[nfft] 01/02: Imported Upstream version 3.2.3
Ghislain Vaillant
ghisvail-guest at alioth.debian.org
Mon Oct 21 13:42:52 UTC 2013
This is an automated email from the git hooks/post-receive script.
ghisvail-guest pushed a commit to branch master
in repository nfft.
commit 946606bbd72a299c20d5b2159a03c1fe6b052913
Author: Ghislain Vaillant <ghisvail at gmail.com>
Date: Mon Oct 21 14:30:00 2013 +0100
Imported Upstream version 3.2.3
---
3rdparty/Makefile.am | 9 +
3rdparty/Makefile.in | 679 +
3rdparty/README | 9 +
3rdparty/cstripack/Makefile.am | 7 +
3rdparty/cstripack/Makefile.in | 556 +
3rdparty/cstripack/cstripack.c | 6262 +++
3rdparty/cstripack/cstripack.h | 124 +
AUTHORS | 46 +
COPYING | 340 +
ChangeLog | 81 +
INSTALL | 370 +
Makefile.am | 97 +
Makefile.in | 1050 +
README | 110 +
aclocal.m4 | 1081 +
applications/Makefile.am | 23 +
applications/Makefile.in | 650 +
applications/doxygen.c | 23 +
applications/fastgauss/Makefile.am | 10 +
applications/fastgauss/Makefile.in | 555 +
applications/fastgauss/README | 22 +
applications/fastgauss/fastgauss.c | 610 +
applications/fastgauss/levelplots.m | 35 +
applications/fastgauss/show_results.m | 51 +
applications/fastsum/Makefile.am | 73 +
applications/fastsum/Makefile.in | 776 +
applications/fastsum/README | 41 +
applications/fastsum/fastsum.c | 1018 +
applications/fastsum/fastsum.h | 177 +
applications/fastsum/fastsum.m | 57 +
applications/fastsum/fastsum_benchomp.c | 651 +
.../fastsum/fastsum_benchomp_createdataset.c | 129 +
applications/fastsum/fastsum_benchomp_detail.c | 190 +
applications/fastsum/fastsum_matlab.c | 224 +
applications/fastsum/fastsum_test.c | 272 +
applications/fastsum/fastsum_test.m | 57 +
applications/fastsum/kernels.c | 405 +
applications/fastsum/kernels.h | 63 +
applications/fastsumS2/Makefile.am | 10 +
applications/fastsumS2/Makefile.in | 555 +
applications/fastsumS2/README | 191 +
applications/fastsumS2/doxygen.h | 24 +
applications/fastsumS2/example.in | 240 +
applications/fastsumS2/example.out | 1584 +
applications/fastsumS2/fastsumS2.c | 912 +
applications/fastsumS2/fastsumS2.m | 299 +
applications/fastsumS2/readTestcase.m | 203 +
applications/fastsumS2/writeTestcase.m | 118 +
applications/iterS2/Makefile.am | 11 +
applications/iterS2/Makefile.in | 556 +
applications/iterS2/README | 50 +
applications/iterS2/doxygen.h | 24 +
applications/iterS2/iterS2.c | 440 +
applications/iterS2/writeImageTestcase.m | 111 +
applications/iterS2/writeTestcase.m | 77 +
applications/mri/Makefile.am | 2 +
applications/mri/Makefile.in | 638 +
applications/mri/doxygen.c | 24 +
applications/mri/mri2d/Makefile.am | 51 +
applications/mri/mri2d/Makefile.in | 661 +
applications/mri/mri2d/README | 24 +
applications/mri/mri2d/construct_data_2d.c | 98 +
applications/mri/mri2d/construct_data_inh_2d1d.c | 157 +
applications/mri/mri2d/construct_data_inh_3d.c | 156 +
applications/mri/mri2d/construct_inh.m | 27 +
applications/mri/mri2d/construct_knots_linogram.m | 31 +
applications/mri/mri2d/construct_knots_radial.m | 39 +
applications/mri/mri2d/construct_knots_rose.m | 41 +
applications/mri/mri2d/construct_knots_spiral.m | 42 +
applications/mri/mri2d/construct_readout_time.m | 29 +
applications/mri/mri2d/doxygen.h | 24 +
applications/mri/mri2d/mri.m | 69 +
applications/mri/mri2d/mri_inh.m | 69 +
applications/mri/mri2d/phantom.m | 46 +
applications/mri/mri2d/precompute_weights.m | 69 +
applications/mri/mri2d/reconstruct_data_2d.c | 175 +
applications/mri/mri2d/reconstruct_data_gridding.c | 112 +
applications/mri/mri2d/reconstruct_data_inh_2d1d.c | 228 +
applications/mri/mri2d/reconstruct_data_inh_3d.c | 222 +
.../mri/mri2d/reconstruct_data_inh_nnfft.c | 241 +
applications/mri/mri2d/rms.m | 32 +
applications/mri/mri2d/visualize_data.m | 49 +
applications/mri/mri3d/Makefile.am | 37 +
applications/mri/mri3d/Makefile.in | 612 +
applications/mri/mri3d/README | 18 +
applications/mri/mri3d/construct_data_2d1d.c | 143 +
applications/mri/mri3d/construct_data_3d.c | 108 +
applications/mri/mri3d/construct_knots_linogram.m | 38 +
applications/mri/mri3d/construct_knots_radial.m | 44 +
applications/mri/mri3d/construct_knots_radial_3d.m | 49 +
applications/mri/mri3d/construct_knots_rose.m | 43 +
applications/mri/mri3d/construct_knots_spiral.m | 41 +
applications/mri/mri3d/construct_phantom.m | 88 +
applications/mri/mri3d/doxygen.h | 24 +
applications/mri/mri3d/mri.m | 91 +
applications/mri/mri3d/precompute_weights_2d.m | 77 +
applications/mri/mri3d/reconstruct_data_2d1d.c | 218 +
applications/mri/mri3d/reconstruct_data_3d.c | 173 +
applications/mri/mri3d/reconstruct_data_gridding.c | 167 +
applications/mri/mri3d/rms.m | 32 +
applications/mri/mri3d/visualize_data.m | 54 +
applications/polarFFT/Makefile.am | 16 +
applications/polarFFT/Makefile.in | 576 +
applications/polarFFT/README | 20 +
applications/polarFFT/doxygen.h | 24 +
applications/polarFFT/fft_test.m | 124 +
applications/polarFFT/linogram_fft_test.c | 489 +
applications/polarFFT/mpolar_fft_test.c | 517 +
applications/polarFFT/phantom.m | 46 +
applications/polarFFT/polar_fft_test.c | 423 +
applications/quadratureS2/Makefile.am | 10 +
applications/quadratureS2/Makefile.in | 555 +
applications/quadratureS2/doxygen.h | 24 +
applications/quadratureS2/example.in | 354 +
applications/quadratureS2/example.out | 42 +
applications/quadratureS2/lgwt.m | 77 +
applications/quadratureS2/plotGrid.m | 123 +
applications/quadratureS2/quadratureS2.c | 1146 +
applications/quadratureS2/quadratureS2.m | 177 +
applications/quadratureS2/readTestcase.m | 176 +
applications/quadratureS2/writeTestcase.m | 77 +
applications/quadratureS2/writeWeights.m | 35 +
applications/radon/Makefile.am | 13 +
applications/radon/Makefile.in | 564 +
applications/radon/README | 27 +
applications/radon/inverse_radon.c | 293 +
applications/radon/phantom.m | 46 +
applications/radon/radon.c | 261 +
applications/radon/radon.m | 77 +
applications/radon/ridgelet.m | 111 +
bootstrap.sh | 46 +
config/compile | 342 +
config/config.guess | 1540 +
config/config.sub | 1779 +
config/depcomp | 707 +
config/install-sh | 527 +
config/ltmain.sh | 9655 +++++
config/missing | 330 +
configure |22488 +++++++++++
configure.ac | 514 +
doc/api/html/accuracy_8c_source.html | 148 +
doc/api/html/annotated.html | 109 +
doc/api/html/applications_2doxygen_8c_source.html | 70 +
...applications_2fastsumS2_2doxygen_8h_source.html | 70 +
.../applications_2iterS2_2doxygen_8h_source.html | 70 +
.../html/applications_2mri_2doxygen_8c_source.html | 70 +
...pplications_2mri_2mri2d_2doxygen_8h_source.html | 70 +
...pplications_2mri_2mri3d_2doxygen_8h_source.html | 70 +
.../applications_2polarFFT_2doxygen_8h_source.html | 70 +
...lications_2quadratureS2_2doxygen_8h_source.html | 70 +
doc/api/html/bc_s.png | Bin 0 -> 680 bytes
doc/api/html/bdwn.png | Bin 0 -> 147 bytes
doc/api/html/bessel__i0_8c_source.html | 368 +
doc/api/html/classes.html | 74 +
doc/api/html/closed.png | Bin 0 -> 132 bytes
doc/api/html/config_8h_source.html | 2118 ++
doc/api/html/construct__data__2d1d_8c_source.html | 176 +
doc/api/html/construct__data__2d_8c_source.html | 139 +
doc/api/html/construct__data__3d_8c_source.html | 152 +
.../html/construct__data__inh__2d1d_8c_source.html | 198 +
.../html/construct__data__inh__3d_8c_source.html | 197 +
doc/api/html/cycle_8h_source.html | 568 +
.../html/dir_0c7f2452bc84fa0fc4195fb15953ec53.html | 52 +
.../html/dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d.html | 50 +
.../html/dir_224fe669cf662e4d4573ba584877a9b9.html | 50 +
.../html/dir_23ec12649285f9fabf3a6b7380226c28.html | 49 +
.../html/dir_25564cacf5a7ef2ec915d9f7b609853e.html | 53 +
.../html/dir_390363ac6c75087990c53a11ba2c3b15.html | 50 +
.../html/dir_58759e03702cf5d3134868f6de633189.html | 50 +
.../html/dir_6409bbb6ca4d9fdb6de069951c273365.html | 49 +
.../html/dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html | 55 +
.../html/dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html | 55 +
.../html/dir_7af51a00587982c04b08a156fa91c254.html | 51 +
.../html/dir_7bc5b4c2d8fedbf49abc178849c07704.html | 49 +
.../html/dir_7eb6ea3471917cbff788e1046aaeac44.html | 49 +
.../html/dir_899180af8ae9527aed19a2e763253fcc.html | 57 +
.../html/dir_8c2550e038f78045c202418cbfa07f80.html | 60 +
.../html/dir_8d4f17a3806fad624168c14bf0ea2fb4.html | 49 +
.../html/dir_8d554148c8057b12dc5cb11ef005c62c.html | 49 +
.../html/dir_8f3c7156d7272f1462551f3a6c5fabd1.html | 52 +
.../html/dir_a42734e8bce3bbae48210591d0fac63c.html | 49 +
.../html/dir_a6d8c0f9045568178601abc26c60f91f.html | 49 +
.../html/dir_a6e4fee11f07c3b70486e88fe92cbbdc.html | 60 +
.../html/dir_ac1c8221356786b534ab925d360822d4.html | 63 +
.../html/dir_d28a4824dc47e487b107a5db32ef43c4.html | 61 +
.../html/dir_d44c64559bbebec7f509842c48db8b23.html | 59 +
.../html/dir_d46f6e04c6f21c2dce6558b4c13d80de.html | 49 +
.../html/dir_d47b87128a15c0ce57cf8f363265bec1.html | 51 +
.../html/dir_dc43877d82dd332f9fb2071fcca799d6.html | 59 +
.../html/dir_deedd863ca11d55d683e9872da0f56e1.html | 50 +
.../html/dir_e198b4faa999927a1ae92d03d5f1f5e6.html | 50 +
.../html/dir_e6016a3bd4e6017d6b851aae5334ffd2.html | 53 +
.../html/dir_ea25627ea6e0d39c26e4e31bca7b94c4.html | 49 +
.../html/dir_ef5ddbf7eefb3d84d608c9a9a32f9b2e.html | 49 +
.../html/dir_fa65d2cfa17fd1e7f6091ef3f0c886ac.html | 49 +
.../html/dir_fb8678d426210fc305fe5dfd30a163a5.html | 54 +
.../html/dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html | 54 +
doc/api/html/doxygen.css | 360 +
doc/api/html/doxygen.png | Bin 0 -> 3779 bytes
doc/api/html/dynsections.js | 78 +
doc/api/html/error_8c_source.html | 213 +
doc/api/html/examples_2doxygen_8c_source.html | 70 +
.../html/examples_2solver_2doxygen_8h_source.html | 70 +
doc/api/html/fastgauss_8c_source.html | 518 +
doc/api/html/fastsumS2_8c_source.html | 884 +
doc/api/html/fastsum_8c.html | 138 +
doc/api/html/fastsum_8c_source.html | 1021 +
doc/api/html/fastsum_8h.html | 113 +
doc/api/html/fastsum_8h_source.html | 154 +
doc/api/html/fastsum__benchomp_8c_source.html | 701 +
...fastsum__benchomp__createdataset_8c_source.html | 177 +
.../html/fastsum__benchomp__detail_8c_source.html | 236 +
doc/api/html/fastsum__matlab_8c.html | 77 +
doc/api/html/fastsum__matlab_8c_source.html | 252 +
doc/api/html/fastsum__test_8c.html | 77 +
doc/api/html/fastsum__test_8c_source.html | 300 +
doc/api/html/files.html | 148 +
doc/api/html/flags_8c.html | 93 +
doc/api/html/flags_8c_source.html | 377 +
doc/api/html/float_8c_source.html | 140 +
doc/api/html/form_0.png | Bin 0 -> 344 bytes
doc/api/html/form_1.png | Bin 0 -> 278 bytes
doc/api/html/form_10.png | Bin 0 -> 374 bytes
doc/api/html/form_100.png | Bin 0 -> 412 bytes
doc/api/html/form_101.png | Bin 0 -> 400 bytes
doc/api/html/form_102.png | Bin 0 -> 900 bytes
doc/api/html/form_103.png | Bin 0 -> 471 bytes
doc/api/html/form_104.png | Bin 0 -> 345 bytes
doc/api/html/form_105.png | Bin 0 -> 387 bytes
doc/api/html/form_106.png | Bin 0 -> 356 bytes
doc/api/html/form_107.png | Bin 0 -> 460 bytes
doc/api/html/form_108.png | Bin 0 -> 335 bytes
doc/api/html/form_109.png | Bin 0 -> 471 bytes
doc/api/html/form_11.png | Bin 0 -> 433 bytes
doc/api/html/form_110.png | Bin 0 -> 325 bytes
doc/api/html/form_111.png | Bin 0 -> 374 bytes
doc/api/html/form_112.png | Bin 0 -> 454 bytes
doc/api/html/form_113.png | Bin 0 -> 322 bytes
doc/api/html/form_114.png | Bin 0 -> 343 bytes
doc/api/html/form_115.png | Bin 0 -> 260 bytes
doc/api/html/form_116.png | Bin 0 -> 267 bytes
doc/api/html/form_117.png | Bin 0 -> 220 bytes
doc/api/html/form_118.png | Bin 0 -> 229 bytes
doc/api/html/form_119.png | Bin 0 -> 1182 bytes
doc/api/html/form_12.png | Bin 0 -> 664 bytes
doc/api/html/form_120.png | Bin 0 -> 225 bytes
doc/api/html/form_121.png | Bin 0 -> 233 bytes
doc/api/html/form_122.png | Bin 0 -> 720 bytes
doc/api/html/form_123.png | Bin 0 -> 523 bytes
doc/api/html/form_124.png | Bin 0 -> 556 bytes
doc/api/html/form_125.png | Bin 0 -> 576 bytes
doc/api/html/form_126.png | Bin 0 -> 717 bytes
doc/api/html/form_127.png | Bin 0 -> 357 bytes
doc/api/html/form_128.png | Bin 0 -> 306 bytes
doc/api/html/form_129.png | Bin 0 -> 1806 bytes
doc/api/html/form_13.png | Bin 0 -> 280 bytes
doc/api/html/form_130.png | Bin 0 -> 267 bytes
doc/api/html/form_131.png | Bin 0 -> 284 bytes
doc/api/html/form_132.png | Bin 0 -> 437 bytes
doc/api/html/form_133.png | Bin 0 -> 419 bytes
doc/api/html/form_134.png | Bin 0 -> 1988 bytes
doc/api/html/form_135.png | Bin 0 -> 295 bytes
doc/api/html/form_136.png | Bin 0 -> 230 bytes
doc/api/html/form_137.png | Bin 0 -> 245 bytes
doc/api/html/form_138.png | Bin 0 -> 357 bytes
doc/api/html/form_139.png | Bin 0 -> 281 bytes
doc/api/html/form_14.png | Bin 0 -> 413 bytes
doc/api/html/form_15.png | Bin 0 -> 654 bytes
doc/api/html/form_16.png | Bin 0 -> 565 bytes
doc/api/html/form_17.png | Bin 0 -> 281 bytes
doc/api/html/form_18.png | Bin 0 -> 308 bytes
doc/api/html/form_19.png | Bin 0 -> 357 bytes
doc/api/html/form_2.png | Bin 0 -> 223 bytes
doc/api/html/form_20.png | Bin 0 -> 356 bytes
doc/api/html/form_21.png | Bin 0 -> 355 bytes
doc/api/html/form_22.png | Bin 0 -> 382 bytes
doc/api/html/form_23.png | Bin 0 -> 427 bytes
doc/api/html/form_24.png | Bin 0 -> 430 bytes
doc/api/html/form_25.png | Bin 0 -> 412 bytes
doc/api/html/form_26.png | Bin 0 -> 357 bytes
doc/api/html/form_27.png | Bin 0 -> 235 bytes
doc/api/html/form_28.png | Bin 0 -> 616 bytes
doc/api/html/form_29.png | Bin 0 -> 392 bytes
doc/api/html/form_3.png | Bin 0 -> 431 bytes
doc/api/html/form_30.png | Bin 0 -> 1030 bytes
doc/api/html/form_31.png | Bin 0 -> 1936 bytes
doc/api/html/form_32.png | Bin 0 -> 421 bytes
doc/api/html/form_33.png | Bin 0 -> 421 bytes
doc/api/html/form_34.png | Bin 0 -> 597 bytes
doc/api/html/form_35.png | Bin 0 -> 582 bytes
doc/api/html/form_36.png | Bin 0 -> 360 bytes
doc/api/html/form_37.png | Bin 0 -> 322 bytes
doc/api/html/form_38.png | Bin 0 -> 321 bytes
doc/api/html/form_39.png | Bin 0 -> 290 bytes
doc/api/html/form_4.png | Bin 0 -> 223 bytes
doc/api/html/form_40.png | Bin 0 -> 449 bytes
doc/api/html/form_41.png | Bin 0 -> 377 bytes
doc/api/html/form_42.png | Bin 0 -> 302 bytes
doc/api/html/form_43.png | Bin 0 -> 279 bytes
doc/api/html/form_44.png | Bin 0 -> 411 bytes
doc/api/html/form_45.png | Bin 0 -> 215 bytes
doc/api/html/form_46.png | Bin 0 -> 420 bytes
doc/api/html/form_47.png | Bin 0 -> 416 bytes
doc/api/html/form_48.png | Bin 0 -> 396 bytes
doc/api/html/form_49.png | Bin 0 -> 347 bytes
doc/api/html/form_5.png | Bin 0 -> 225 bytes
doc/api/html/form_50.png | Bin 0 -> 433 bytes
doc/api/html/form_51.png | Bin 0 -> 423 bytes
doc/api/html/form_52.png | Bin 0 -> 1283 bytes
doc/api/html/form_53.png | Bin 0 -> 427 bytes
doc/api/html/form_54.png | Bin 0 -> 872 bytes
doc/api/html/form_55.png | Bin 0 -> 382 bytes
doc/api/html/form_56.png | Bin 0 -> 616 bytes
doc/api/html/form_57.png | Bin 0 -> 614 bytes
doc/api/html/form_58.png | Bin 0 -> 296 bytes
doc/api/html/form_59.png | Bin 0 -> 226 bytes
doc/api/html/form_6.png | Bin 0 -> 920 bytes
doc/api/html/form_60.png | Bin 0 -> 200 bytes
doc/api/html/form_61.png | Bin 0 -> 302 bytes
doc/api/html/form_62.png | Bin 0 -> 295 bytes
doc/api/html/form_63.png | Bin 0 -> 296 bytes
doc/api/html/form_64.png | Bin 0 -> 371 bytes
doc/api/html/form_65.png | Bin 0 -> 550 bytes
doc/api/html/form_66.png | Bin 0 -> 302 bytes
doc/api/html/form_67.png | Bin 0 -> 295 bytes
doc/api/html/form_68.png | Bin 0 -> 387 bytes
doc/api/html/form_69.png | Bin 0 -> 296 bytes
doc/api/html/form_7.png | Bin 0 -> 437 bytes
doc/api/html/form_70.png | Bin 0 -> 440 bytes
doc/api/html/form_71.png | Bin 0 -> 302 bytes
doc/api/html/form_72.png | Bin 0 -> 295 bytes
doc/api/html/form_73.png | Bin 0 -> 438 bytes
doc/api/html/form_74.png | Bin 0 -> 424 bytes
doc/api/html/form_75.png | Bin 0 -> 501 bytes
doc/api/html/form_76.png | Bin 0 -> 418 bytes
doc/api/html/form_77.png | Bin 0 -> 624 bytes
doc/api/html/form_78.png | Bin 0 -> 376 bytes
doc/api/html/form_79.png | Bin 0 -> 355 bytes
doc/api/html/form_8.png | Bin 0 -> 361 bytes
doc/api/html/form_80.png | Bin 0 -> 366 bytes
doc/api/html/form_81.png | Bin 0 -> 645 bytes
doc/api/html/form_82.png | Bin 0 -> 363 bytes
doc/api/html/form_83.png | Bin 0 -> 235 bytes
doc/api/html/form_84.png | Bin 0 -> 370 bytes
doc/api/html/form_85.png | Bin 0 -> 345 bytes
doc/api/html/form_86.png | Bin 0 -> 449 bytes
doc/api/html/form_87.png | Bin 0 -> 460 bytes
doc/api/html/form_88.png | Bin 0 -> 484 bytes
doc/api/html/form_89.png | Bin 0 -> 459 bytes
doc/api/html/form_9.png | Bin 0 -> 396 bytes
doc/api/html/form_90.png | Bin 0 -> 314 bytes
doc/api/html/form_91.png | Bin 0 -> 311 bytes
doc/api/html/form_92.png | Bin 0 -> 210 bytes
doc/api/html/form_93.png | Bin 0 -> 206 bytes
doc/api/html/form_94.png | Bin 0 -> 1304 bytes
doc/api/html/form_95.png | Bin 0 -> 353 bytes
doc/api/html/form_96.png | Bin 0 -> 254 bytes
doc/api/html/form_97.png | Bin 0 -> 247 bytes
doc/api/html/form_98.png | Bin 0 -> 405 bytes
doc/api/html/form_99.png | Bin 0 -> 391 bytes
doc/api/html/formula.repository | 140 +
doc/api/html/fpt_2simple__test_8c_source.html | 213 +
doc/api/html/fpt_8c.html | 463 +
doc/api/html/fpt_8c_source.html | 1875 +
doc/api/html/fpt_8h_source.html | 123 +
doc/api/html/ftv2blank.png | Bin 0 -> 86 bytes
doc/api/html/ftv2cl.png | Bin 0 -> 453 bytes
doc/api/html/ftv2doc.png | Bin 0 -> 746 bytes
doc/api/html/ftv2folderclosed.png | Bin 0 -> 616 bytes
doc/api/html/ftv2folderopen.png | Bin 0 -> 597 bytes
doc/api/html/ftv2lastnode.png | Bin 0 -> 86 bytes
doc/api/html/ftv2link.png | Bin 0 -> 746 bytes
doc/api/html/ftv2mlastnode.png | Bin 0 -> 246 bytes
doc/api/html/ftv2mnode.png | Bin 0 -> 246 bytes
doc/api/html/ftv2mo.png | Bin 0 -> 403 bytes
doc/api/html/ftv2node.png | Bin 0 -> 86 bytes
doc/api/html/ftv2ns.png | Bin 0 -> 388 bytes
doc/api/html/ftv2plastnode.png | Bin 0 -> 229 bytes
doc/api/html/ftv2pnode.png | Bin 0 -> 229 bytes
doc/api/html/ftv2splitbar.png | Bin 0 -> 314 bytes
doc/api/html/ftv2vertline.png | Bin 0 -> 86 bytes
doc/api/html/functions.html | 90 +
doc/api/html/functions_0x61.html | 142 +
doc/api/html/functions_0x62.html | 122 +
doc/api/html/functions_0x63.html | 105 +
doc/api/html/functions_0x64.html | 212 +
doc/api/html/functions_0x65.html | 87 +
doc/api/html/functions_0x66.html | 241 +
doc/api/html/functions_0x67.html | 124 +
doc/api/html/functions_0x69.html | 102 +
doc/api/html/functions_0x6a.html | 86 +
doc/api/html/functions_0x6b.html | 104 +
doc/api/html/functions_0x6c.html | 84 +
doc/api/html/functions_0x6d.html | 245 +
doc/api/html/functions_0x6e.html | 228 +
doc/api/html/functions_0x70.html | 167 +
doc/api/html/functions_0x72.html | 103 +
doc/api/html/functions_0x73.html | 144 +
doc/api/html/functions_0x74.html | 99 +
doc/api/html/functions_0x76.html | 103 +
doc/api/html/functions_0x77.html | 116 +
doc/api/html/functions_0x78.html | 119 +
doc/api/html/functions_0x79.html | 100 +
doc/api/html/functions_0x7a.html | 98 +
doc/api/html/functions_func.html | 77 +
doc/api/html/functions_vars.html | 90 +
doc/api/html/functions_vars_0x61.html | 142 +
doc/api/html/functions_vars_0x62.html | 122 +
doc/api/html/functions_vars_0x63.html | 105 +
doc/api/html/functions_vars_0x64.html | 212 +
doc/api/html/functions_vars_0x65.html | 87 +
doc/api/html/functions_vars_0x66.html | 214 +
doc/api/html/functions_vars_0x67.html | 124 +
doc/api/html/functions_vars_0x69.html | 102 +
doc/api/html/functions_vars_0x6a.html | 86 +
doc/api/html/functions_vars_0x6b.html | 104 +
doc/api/html/functions_vars_0x6c.html | 84 +
doc/api/html/functions_vars_0x6d.html | 245 +
doc/api/html/functions_vars_0x6e.html | 228 +
doc/api/html/functions_vars_0x70.html | 167 +
doc/api/html/functions_vars_0x72.html | 103 +
doc/api/html/functions_vars_0x73.html | 144 +
doc/api/html/functions_vars_0x74.html | 99 +
doc/api/html/functions_vars_0x76.html | 103 +
doc/api/html/functions_vars_0x77.html | 116 +
doc/api/html/functions_vars_0x78.html | 119 +
doc/api/html/functions_vars_0x79.html | 100 +
doc/api/html/functions_vars_0x7a.html | 98 +
doc/api/html/glacier_8c_source.html | 280 +
doc/api/html/globals.html | 86 +
doc/api/html/globals_0x63.html | 87 +
doc/api/html/globals_0x65.html | 86 +
doc/api/html/globals_0x66.html | 116 +
doc/api/html/globals_0x69.html | 191 +
doc/api/html/globals_0x6b.html | 91 +
doc/api/html/globals_0x6c.html | 91 +
doc/api/html/globals_0x6d.html | 99 +
doc/api/html/globals_0x6e.html | 272 +
doc/api/html/globals_0x70.html | 88 +
doc/api/html/globals_0x71.html | 77 +
doc/api/html/globals_0x72.html | 90 +
doc/api/html/globals_0x73.html | 158 +
doc/api/html/globals_0x74.html | 89 +
doc/api/html/globals_0x77.html | 80 +
doc/api/html/globals_defs.html | 105 +
doc/api/html/globals_func.html | 633 +
doc/api/html/globals_type.html | 80 +
doc/api/html/globals_vars.html | 62 +
doc/api/html/group__applications.html | 55 +
doc/api/html/group__applications__fastgauss.html | 638 +
doc/api/html/group__applications__fastsum.html | 417 +
doc/api/html/group__applications__fastsumS2.html | 48 +
.../html/group__applications__fastsumS2__test.html | 381 +
.../html/group__applications__fastsum__matlab.html | 49 +
.../html/group__applications__fastsum__test.html | 49 +
doc/api/html/group__applications__iterS2.html | 48 +
.../html/group__applications__iterS2__matlab.html | 101 +
doc/api/html/group__applications__mri.html | 49 +
doc/api/html/group__applications__mri2d.html | 55 +
...__applications__mri2d__construct__data__2d.html | 52 +
...ications__mri2d__construct__data__gridding.html | 52 +
...cations__mri2d__construct__data__inh__2d1d.html | 52 +
...lications__mri2d__construct__data__inh__3d.html | 52 +
...ations__mri2d__construct__data__inh__nnfft.html | 52 +
...applications__mri2d__reconstruct__data__2d.html | 52 +
...tions__mri2d__reconstruct__data__inh__2d1d.html | 51 +
...cations__mri2d__reconstruct__data__inh__3d.html | 51 +
doc/api/html/group__applications__mri3d.html | 52 +
...applications__mri3d__construct__data__1d2d.html | 58 +
...__applications__mri3d__construct__data__3d.html | 51 +
...plications__mri3d__reconstruct__data__1d2d.html | 55 +
...applications__mri3d__reconstruct__data__3d.html | 52 +
...ations__mri3d__reconstruct__data__gridding.html | 55 +
doc/api/html/group__applications__polarFFT.html | 50 +
.../group__applications__polarFFT__linogramm.html | 71 +
.../group__applications__polarFFT__mpolar.html | 130 +
.../html/group__applications__polarFFT__polar.html | 126 +
.../html/group__applications__quadratureS2.html | 48 +
.../group__applications__quadratureS2__test.html | 130 +
doc/api/html/group__examples.html | 48 +
doc/api/html/group__examples__solver.html | 48 +
doc/api/html/group__examples__solver__glacier.html | 59 +
doc/api/html/group__nfftutil.html | 478 +
doc/api/html/group__nfsft.html | 563 +
doc/api/html/images/logo.png | Bin 0 -> 2965 bytes
doc/api/html/images/sphere.png | Bin 0 -> 10243 bytes
doc/api/html/include_2api_8h_source.html | 77 +
doc/api/html/index.html | 40 +
doc/api/html/infft_8h_source.html | 1430 +
doc/api/html/int_8c_source.html | 157 +
doc/api/html/inverse__radon_8c.html | 98 +
doc/api/html/inverse__radon_8c_source.html | 295 +
doc/api/html/iterS2_8c_source.html | 474 +
doc/api/html/jquery.js | 8 +
doc/api/html/kernel_2nfsft_2api_8h_source.html | 122 +
doc/api/html/kernels_8c.html | 96 +
doc/api/html/kernels_8c_source.html | 447 +
doc/api/html/kernels_8h.html | 92 +
doc/api/html/kernels_8h_source.html | 105 +
doc/api/html/lambda_8c_source.html | 297 +
doc/api/html/legendre_8c_source.html | 261 +
doc/api/html/legendre_8h_source.html | 92 +
doc/api/html/linogram__fft__test_8c.html | 98 +
doc/api/html/linogram__fft__test_8c_source.html | 472 +
doc/api/html/malloc_8c_source.html | 116 +
doc/api/html/modules.html | 80 +
doc/api/html/mpolar__fft__test_8c.html | 97 +
doc/api/html/mpolar__fft__test_8c_source.html | 487 +
...i2d_2reconstruct__data__gridding_8c_source.html | 153 +
...i3d_2reconstruct__data__gridding_8c_source.html | 204 +
doc/api/html/mri_8c_source.html | 316 +
doc/api/html/nav_f.png | Bin 0 -> 153 bytes
doc/api/html/nav_g.png | Bin 0 -> 95 bytes
doc/api/html/nav_h.png | Bin 0 -> 98 bytes
doc/api/html/ndft__fast_8c.html | 84 +
doc/api/html/ndft__fast_8c_source.html | 260 +
doc/api/html/nfct_2simple__test_8c_source.html | 123 +
doc/api/html/nfct_8c_source.html | 944 +
doc/api/html/nfft3_8h.html | 1543 +
doc/api/html/nfft3_8h_source.html | 853 +
doc/api/html/nfft3conf_8h_source.html | 95 +
doc/api/html/nfft3util_8h.html | 221 +
doc/api/html/nfft3util_8h_source.html | 214 +
doc/api/html/nfft_2simple__test_8c_source.html | 196 +
.../nfft_2simple__test__threads_8c_source.html | 128 +
doc/api/html/nfft_8c_source.html | 5727 +++
doc/api/html/nfft__benchomp_8c_source.html | 640 +
.../nfft__benchomp__createdataset_8c_source.html | 193 +
doc/api/html/nfft__benchomp__detail_8c_source.html | 201 +
doc/api/html/nfft__times_8c_source.html | 1070 +
doc/api/html/nfsft_2simple__test_8c_source.html | 178 +
.../nfsft_2simple__test__threads_8c_source.html | 183 +
doc/api/html/nfsft_8c.html | 125 +
doc/api/html/nfsft_8c_source.html | 1248 +
doc/api/html/nfsft__benchomp_8c_source.html | 567 +
.../nfsft__benchomp__createdataset_8c_source.html | 165 +
.../html/nfsft__benchomp__detail_8c_source.html | 267 +
doc/api/html/nfsoft_2simple__test_8c_source.html | 225 +
doc/api/html/nfsoft_8c_source.html | 747 +
doc/api/html/nfst_2simple__test_8c_source.html | 123 +
doc/api/html/nfst_8c_source.html | 1031 +
doc/api/html/nnfft_2simple__test_8c_source.html | 352 +
doc/api/html/nnfft_8c_source.html | 704 +
doc/api/html/nsfft_2simple__test_8c_source.html | 130 +
doc/api/html/nsfft_8c_source.html | 1944 +
doc/api/html/nsfft__test_8c_source.html | 260 +
doc/api/html/open.png | Bin 0 -> 123 bytes
doc/api/html/polar__fft__test_8c.html | 88 +
doc/api/html/polar__fft__test_8c_source.html | 380 +
doc/api/html/quadratureS2_8c_source.html | 1160 +
doc/api/html/radon_8c.html | 98 +
doc/api/html/radon_8c_source.html | 266 +
.../html/reconstruct__data__2d1d_8c_source.html | 255 +
doc/api/html/reconstruct__data__2d_8c_source.html | 216 +
doc/api/html/reconstruct__data__3d_8c_source.html | 214 +
.../reconstruct__data__inh__2d1d_8c_source.html | 272 +
.../html/reconstruct__data__inh__3d_8c_source.html | 266 +
.../reconstruct__data__inh__nnfft_8c_source.html | 282 +
doc/api/html/sinc_8c_source.html | 97 +
doc/api/html/solver_2simple__test_8c_source.html | 196 +
doc/api/html/solver_8c.html | 118 +
doc/api/html/solver_8c_source.html | 760 +
doc/api/html/solver__adjoint_8h.html | 1052 +
doc/api/html/solver__adjoint_8h_source.html | 133 +
doc/api/html/structfastsum__plan__.html | 229 +
doc/api/html/structfgt__plan.html | 105 +
doc/api/html/structfpt__data__.html | 306 +
doc/api/html/structfpt__set__s__.html | 151 +
doc/api/html/structfpt__step__.html | 133 +
.../html/structimri__inh__2d1d__adjoint__plan.html | 119 +
.../html/structimri__inh__3d__adjoint__plan.html | 119 +
doc/api/html/structinfct__adjoint__plan.html | 119 +
doc/api/html/structinfft__adjoint__plan.html | 119 +
doc/api/html/structinfsft__adjoint__plan.html | 120 +
doc/api/html/structinfst__adjoint__plan.html | 119 +
doc/api/html/structinnfft__adjoint__plan.html | 119 +
doc/api/html/structmri__inh__2d1d__plan.html | 87 +
doc/api/html/structmri__inh__3d__plan.html | 87 +
doc/api/html/structmrif__inh__2d1d__plan.html | 87 +
doc/api/html/structmrif__inh__3d__plan.html | 87 +
doc/api/html/structmril__inh__2d1d__plan.html | 87 +
doc/api/html/structmril__inh__3d__plan.html | 87 +
doc/api/html/structnfct__plan.html | 147 +
doc/api/html/structnfctf__plan.html | 147 +
doc/api/html/structnfctl__plan.html | 147 +
doc/api/html/structnfft__mv__plan__complex.html | 77 +
doc/api/html/structnfft__mv__plan__double.html | 77 +
doc/api/html/structnfft__plan.html | 153 +
doc/api/html/structnfftf__mv__plan__complex.html | 77 +
doc/api/html/structnfftf__mv__plan__double.html | 77 +
doc/api/html/structnfftf__plan.html | 153 +
doc/api/html/structnfftl__mv__plan__complex.html | 77 +
doc/api/html/structnfftl__mv__plan__double.html | 77 +
doc/api/html/structnfftl__plan.html | 153 +
doc/api/html/structnfsft__plan.html | 98 +
doc/api/html/structnfsft__wisdom.html | 123 +
doc/api/html/structnfsftf__plan.html | 98 +
doc/api/html/structnfsftl__plan.html | 98 +
doc/api/html/structnfsoft__plan__.html | 103 +
doc/api/html/structnfsoftf__plan__.html | 103 +
doc/api/html/structnfsoftl__plan__.html | 103 +
doc/api/html/structnfst__plan.html | 147 +
doc/api/html/structnfstf__plan.html | 147 +
doc/api/html/structnfstl__plan.html | 147 +
doc/api/html/structnnfft__plan.html | 177 +
doc/api/html/structnnfftf__plan.html | 175 +
doc/api/html/structnnfftl__plan.html | 175 +
doc/api/html/structnsfft__plan.html | 129 +
doc/api/html/structnsfftf__plan.html | 129 +
doc/api/html/structnsfftl__plan.html | 129 +
doc/api/html/structs__param.html | 93 +
doc/api/html/structs__result.html | 65 +
doc/api/html/structs__resval.html | 67 +
doc/api/html/structs__testset.html | 67 +
doc/api/html/structsolver__plan__complex.html | 113 +
doc/api/html/structsolver__plan__double.html | 113 +
doc/api/html/structsolverf__plan__complex.html | 113 +
doc/api/html/structsolverf__plan__double.html | 113 +
doc/api/html/structsolverl__plan__complex.html | 113 +
doc/api/html/structsolverl__plan__double.html | 113 +
doc/api/html/structtaylor__plan.html | 68 +
doc/api/html/structwindow__funct__plan__.html | 76 +
doc/api/html/tab_a.png | Bin 0 -> 142 bytes
doc/api/html/tab_b.png | Bin 0 -> 167 bytes
doc/api/html/tab_h.png | Bin 0 -> 192 bytes
doc/api/html/tab_s.png | Bin 0 -> 184 bytes
doc/api/html/tabs.css | 59 +
doc/api/html/taylor__nfft_8c.html | 349 +
doc/api/html/taylor__nfft_8c_source.html | 321 +
doc/api/html/ticks_8h_source.html | 84 +
doc/api/html/util_8c_source.html | 1387 +
doc/api/html/wigner_8c_source.html | 432 +
doc/api/html/wigner_8h.html | 890 +
doc/api/html/wigner_8h_source.html | 95 +
doc/api/latex/images/sphere.eps | 99 +
doc/api/latex/images/sphere.pdf | Bin 0 -> 55197 bytes
doc/logo/nfft_logo.tif | Bin 0 -> 56256 bytes
doc/tutorial/README | 9 +
doc/tutorial/acmtrans.bst | 1770 +
doc/tutorial/acmtrans2m.cls | 1460 +
doc/tutorial/answer.tex | 102 +
doc/tutorial/comments1.tex | 107 +
doc/tutorial/comments2.tex | 156 +
doc/tutorial/comments3.tex | 253 +
doc/tutorial/images/accuracy1.eps | 503 +
doc/tutorial/images/accuracy1.pdf | Bin 0 -> 4369 bytes
doc/tutorial/images/accuracy2.eps | 497 +
doc/tutorial/images/accuracy2.pdf | Bin 0 -> 4312 bytes
doc/tutorial/images/accuracy3.eps | 497 +
doc/tutorial/images/accuracy3.pdf | Bin 0 -> 4342 bytes
doc/tutorial/images/accuracy4.eps | 497 +
doc/tutorial/images/accuracy4.pdf | Bin 0 -> 4337 bytes
doc/tutorial/images/accuracy5.eps | 497 +
doc/tutorial/images/accuracy5.pdf | Bin 0 -> 4330 bytes
doc/tutorial/images/accuracy6.eps | 497 +
doc/tutorial/images/accuracy6.pdf | Bin 0 -> 4317 bytes
doc/tutorial/images/front_pic1.eps | 240 +
doc/tutorial/images/front_pic1.pdf | Bin 0 -> 2821 bytes
doc/tutorial/images/front_pic2.eps | 257 +
doc/tutorial/images/front_pic2.pdf | Bin 0 -> 3453 bytes
doc/tutorial/images/glacier1.eps |27242 +++++++++++++
doc/tutorial/images/glacier1.pdf | Bin 0 -> 38015 bytes
doc/tutorial/images/glacier2.eps |39895 ++++++++++++++++++++
doc/tutorial/images/glacier2.pdf | Bin 0 -> 511712 bytes
doc/tutorial/images/interpolation_1d_0.eps | 359 +
doc/tutorial/images/interpolation_1d_0.pdf | Bin 0 -> 5566 bytes
doc/tutorial/images/interpolation_1d_1.eps | 359 +
doc/tutorial/images/interpolation_1d_1.pdf | Bin 0 -> 5339 bytes
doc/tutorial/images/interpolation_1d_2.eps | 357 +
doc/tutorial/images/interpolation_1d_2.pdf | Bin 0 -> 5326 bytes
doc/tutorial/images/interpolation_1d_3.eps | 357 +
doc/tutorial/images/interpolation_1d_3.pdf | Bin 0 -> 5341 bytes
doc/tutorial/images/interpolation_1d_4.eps | 356 +
doc/tutorial/images/interpolation_1d_4.pdf | Bin 0 -> 5378 bytes
doc/tutorial/images/interpolation_1d_5.eps | 357 +
doc/tutorial/images/interpolation_1d_5.pdf | Bin 0 -> 5375 bytes
doc/tutorial/images/linogram_grid.eps | 87 +
doc/tutorial/images/linogram_grid.pdf | Bin 0 -> 153334 bytes
doc/tutorial/images/modified_polar_grid.eps | 87 +
doc/tutorial/images/modified_polar_grid.pdf | Bin 0 -> 153334 bytes
doc/tutorial/images/nfft_times_flops.eps | 511 +
doc/tutorial/images/nfft_times_flops.pdf | Bin 0 -> 5365 bytes
doc/tutorial/images/nfft_times_frodo.txt | 39 +
doc/tutorial/images/nfft_times_frodo_flops.m | 36 +
doc/tutorial/images/nfft_times_frodo_m_2.txt | 39 +
doc/tutorial/images/nfft_times_frodo_m_2_flops.m | 36 +
doc/tutorial/images/nfft_times_frodo_show.m | 47 +
doc/tutorial/images/polar_grid.eps | 87 +
doc/tutorial/images/polar_grid.pdf | Bin 0 -> 153333 bytes
doc/tutorial/images/sparse2D_0.eps | 111 +
doc/tutorial/images/sparse2D_0.pdf | Bin 0 -> 1788 bytes
doc/tutorial/images/sparse2D_1.eps | 123 +
doc/tutorial/images/sparse2D_1.pdf | Bin 0 -> 1839 bytes
doc/tutorial/images/sparse2D_2.eps | 123 +
doc/tutorial/images/sparse2D_2.pdf | Bin 0 -> 1851 bytes
doc/tutorial/images/sparse2D_3.eps | 135 +
doc/tutorial/images/sparse2D_3.pdf | Bin 0 -> 1912 bytes
doc/tutorial/images/sphere.eps | 48 +
doc/tutorial/images/sphere.pdf | Bin 0 -> 55197 bytes
doc/tutorial/images/temperaturemap_filled.pdf | Bin 0 -> 43392 bytes
doc/tutorial/images/temperaturemap_gaps.pdf | Bin 0 -> 43632 bytes
doc/tutorial/images/window_fct1.eps | 501 +
doc/tutorial/images/window_fct1.pdf | Bin 0 -> 7593 bytes
doc/tutorial/images/window_fct2.eps | 501 +
doc/tutorial/images/window_fct2.pdf | Bin 0 -> 7582 bytes
doc/tutorial/images/window_fct3.eps | 484 +
doc/tutorial/images/window_fct3.pdf | Bin 0 -> 5542 bytes
doc/tutorial/paper.tex | 2229 ++
doc/tutorial/paper_brief.tex | 2001 +
doc/tutorial/struct.tex | 59 +
doc/tutorial/summary.tex | 227 +
doc/tutorial/tree.tex | 225 +
doxygen.dox | 110 +
doxygen/Makefile.am | 3 +
doxygen/Makefile.in | 426 +
doxygen/doxygen.Doxyfile | 1143 +
doxygen/doxygen.Doxyfile.in | 1143 +
doxygen/doxygen.css | 360 +
doxygen/footer.html | 4 +
doxygen/header.html | 20 +
examples/Makefile.am | 52 +
examples/Makefile.in | 656 +
examples/doxygen.c | 23 +
examples/fpt/Makefile.am | 10 +
examples/fpt/Makefile.in | 556 +
examples/fpt/simple_test.c | 163 +
examples/mri/Makefile.am | 2 +
examples/mri/Makefile.in | 422 +
examples/nfct/Makefile.am | 10 +
examples/nfct/Makefile.in | 555 +
examples/nfct/README | 17 +
examples/nfct/simple_test.c | 82 +
examples/nfft/Makefile.am | 61 +
examples/nfft/Makefile.in | 710 +
examples/nfft/README | 30 +
examples/nfft/flags.c | 349 +
examples/nfft/flags.m | 152 +
examples/nfft/ndft_fast.c | 221 +
examples/nfft/ndft_fast.m | 61 +
examples/nfft/nfft_benchomp.c | 590 +
examples/nfft/nfft_benchomp_createdataset.c | 144 +
examples/nfft/nfft_benchomp_detail.c | 154 +
examples/nfft/nfft_times.c | 1065 +
examples/nfft/simple_test.c | 164 +
examples/nfft/simple_test_threads.c | 78 +
examples/nfft/taylor_nfft.c | 340 +
examples/nfft/taylor_nfft.m | 140 +
examples/nfsft/Makefile.am | 53 +
examples/nfsft/Makefile.in | 686 +
examples/nfsft/nfsft_benchomp.c | 517 +
examples/nfsft/nfsft_benchomp_createdataset.c | 115 +
examples/nfsft/nfsft_benchomp_detail.c | 218 +
examples/nfsft/simple_test.c | 128 +
examples/nfsft/simple_test_threads.c | 133 +
examples/nfsoft/Makefile.am | 12 +
examples/nfsoft/Makefile.in | 555 +
examples/nfsoft/README | 12 +
examples/nfsoft/simple_test.c | 215 +
examples/nfst/Makefile.am | 10 +
examples/nfst/Makefile.in | 555 +
examples/nfst/README | 17 +
examples/nfst/simple_test.c | 82 +
examples/nnfft/Makefile.am | 13 +
examples/nnfft/Makefile.in | 564 +
examples/nnfft/README | 12 +
examples/nnfft/accuracy.c | 106 +
examples/nnfft/accuracy.m | 64 +
examples/nnfft/simple_test.c | 342 +
examples/nsfft/Makefile.am | 13 +
examples/nsfft/Makefile.in | 564 +
examples/nsfft/README | 8 +
examples/nsfft/nsfft_test.c | 217 +
examples/nsfft/simple_test.c | 85 +
examples/solver/Makefile.am | 13 +
examples/solver/Makefile.in | 564 +
examples/solver/README | 21 +
examples/solver/doxygen.h | 24 +
examples/solver/glacier.c | 241 +
examples/solver/glacier.m | 63 +
examples/solver/glacier_cv.m | 42 +
examples/solver/simple_test.c | 155 +
examples/solver/vol87.dat | 8346 ++++
include/Makefile.am | 3 +
include/Makefile.in | 560 +
include/api.h | 27 +
include/config.h.in | 2067 +
include/cycle.h | 518 +
include/infft.h | 1389 +
include/nfft3.h | 826 +
include/nfft3conf.h | 45 +
include/nfft3conf.h.in | 45 +
include/nfft3util.h | 279 +
include/ticks.h.in | 34 +
kernel/Makefile.am | 104 +
kernel/Makefile.in | 762 +
kernel/fpt/Makefile.am | 23 +
kernel/fpt/Makefile.in | 583 +
kernel/fpt/fpt.c | 1923 +
kernel/fpt/fpt.h | 93 +
kernel/mri/Makefile.am | 5 +
kernel/mri/Makefile.in | 553 +
kernel/mri/mri.c | 275 +
kernel/nfct/Makefile.am | 6 +
kernel/nfct/Makefile.in | 553 +
kernel/nfct/nfct.c | 926 +
kernel/nfft/Makefile.am | 17 +
kernel/nfft/Makefile.in | 578 +
kernel/nfft/nfft.c | 5878 +++
kernel/nfsft/Makefile.am | 20 +
kernel/nfsft/Makefile.in | 591 +
kernel/nfsft/api.h | 104 +
kernel/nfsft/legendre.c | 211 +
kernel/nfsft/legendre.h | 112 +
kernel/nfsft/nfsft.c | 1268 +
kernel/nfsoft/Makefile.am | 6 +
kernel/nfsoft/Makefile.in | 556 +
kernel/nfsoft/nfsoft.c | 730 +
kernel/nfsoft/wigner.c | 382 +
kernel/nfsoft/wigner.h | 197 +
kernel/nfst/Makefile.am | 6 +
kernel/nfst/Makefile.in | 553 +
kernel/nfst/nfst.c | 1078 +
kernel/nnfft/Makefile.am | 6 +
kernel/nnfft/Makefile.in | 553 +
kernel/nnfft/nnfft.c | 673 +
kernel/nsfft/Makefile.am | 6 +
kernel/nsfft/Makefile.in | 553 +
kernel/nsfft/nsfft.c | 1894 +
kernel/solver/Makefile.am | 4 +
kernel/solver/Makefile.in | 553 +
kernel/solver/solver.c | 728 +
kernel/util/Makefile.am | 4 +
kernel/util/Makefile.in | 560 +
kernel/util/bessel_i0.c | 318 +
kernel/util/error.c | 175 +
kernel/util/float.c | 90 +
kernel/util/int.c | 111 +
kernel/util/lambda.c | 247 +
kernel/util/malloc.c | 66 +
kernel/util/sinc.c | 47 +
m4/ax_apple_gcc_archflag.m4 | 93 +
m4/ax_cc_maxopt.m4 | 177 +
m4/ax_check_compiler_flags.m4 | 40 +
m4/ax_check_dir.m4 | 23 +
m4/ax_compiler_vendor.m4 | 30 +
m4/ax_gcc_archflag.m4 | 184 +
m4/ax_gcc_x86_cpuid.m4 | 51 +
m4/ax_lib_fftw3.m4 | 125 +
m4/ax_nfft_module.m4 | 14 +
m4/ax_openmp.m4 | 99 +
m4/ax_prog_matlab.m4 | 318 +
m4/libtool.m4 | 7982 ++++
m4/ltoptions.m4 | 384 +
m4/ltsugar.m4 | 123 +
m4/ltversion.m4 | 23 +
m4/lt~obsolete.m4 | 98 +
matlab/Makefile.am | 23 +
matlab/Makefile.in | 733 +
matlab/README | 1 +
matlab/args.c | 36 +
matlab/imex.h | 84 +
matlab/malloc.c | 59 +
matlab/nfft/Contents.m | 30 +
matlab/nfft/FFTW_ESTIMATE.m | 25 +
matlab/nfft/FFTW_MEASURE.m | 25 +
matlab/nfft/FFT_OUT_OF_PLACE.m | 25 +
matlab/nfft/FG_PSI.m | 27 +
matlab/nfft/Makefile.am | 44 +
matlab/nfft/Makefile.in | 679 +
matlab/nfft/PRE_FG_PSI.m | 28 +
matlab/nfft/PRE_FULL_PSI.m | 27 +
matlab/nfft/PRE_LIN_PSI.m | 27 +
matlab/nfft/PRE_PHI_HUT.m | 27 +
matlab/nfft/PRE_PSI.m | 25 +
matlab/nfft/ndft_adjoint.m | 23 +
matlab/nfft/ndft_trafo.m | 23 +
matlab/nfft/nfft.m | 387 +
matlab/nfft/nfft_adjoint.m | 23 +
matlab/nfft/nfft_finalize.m | 23 +
matlab/nfft/nfft_get_f.m | 23 +
matlab/nfft/nfft_get_f_hat.m | 23 +
matlab/nfft/nfft_get_num_threads.m | 23 +
matlab/nfft/nfft_get_x.m | 23 +
matlab/nfft/nfft_init_1d.m | 23 +
matlab/nfft/nfft_init_2d.m | 23 +
matlab/nfft/nfft_init_3d.m | 23 +
matlab/nfft/nfft_init_guru.m | 36 +
matlab/nfft/nfft_precompute_psi.m | 23 +
matlab/nfft/nfft_set_f.m | 23 +
matlab/nfft/nfft_set_f_hat.m | 23 +
matlab/nfft/nfft_set_x.m | 23 +
matlab/nfft/nfft_trafo.m | 23 +
matlab/nfft/nfftmex.c | 479 +
matlab/nfft/simple_test.m | 128 +
matlab/nfft/test_nfft1d.m | 70 +
matlab/nfft/test_nfft2d.m | 78 +
matlab/nfft/test_nfft3d.m | 83 +
matlab/nfsft/@f_hat/Makefile.am | 5 +
matlab/nfsft/@f_hat/Makefile.in | 480 +
matlab/nfsft/@f_hat/char.m | 27 +
matlab/nfsft/@f_hat/display.m | 34 +
matlab/nfsft/@f_hat/double.m | 28 +
matlab/nfsft/@f_hat/f_hat.m | 49 +
matlab/nfsft/@f_hat/minus.m | 28 +
matlab/nfsft/@f_hat/mtimes.m | 28 +
matlab/nfsft/@f_hat/mtimesr.m | 33 +
matlab/nfsft/@f_hat/norm.m | 24 +
matlab/nfsft/@f_hat/plus.m | 27 +
matlab/nfsft/@f_hat/subsasgn.m | 57 +
matlab/nfsft/@f_hat/subsref.m | 56 +
matlab/nfsft/Contents.m | 33 +
matlab/nfsft/Makefile.am | 48 +
matlab/nfsft/Makefile.in | 840 +
matlab/nfsft/NFSFT_NORMALIZED.m | 22 +
matlab/nfsft/NFSFT_NO_DIRECT_ALGORITHM.m | 22 +
matlab/nfsft/NFSFT_NO_FAST_ALGORITHM.m | 22 +
matlab/nfsft/NFSFT_PRESERVE_F_HAT.m | 22 +
matlab/nfsft/NFSFT_USE_DPT.m | 23 +
matlab/nfsft/NFSFT_USE_NDFT.m | 22 +
matlab/nfsft/cc.m | 95 +
matlab/nfsft/f_hat_index.m | 38 +
matlab/nfsft/gl.m | 106 +
matlab/nfsft/ndsft_adjoint.m | 22 +
matlab/nfsft/ndsft_trafo.m | 22 +
matlab/nfsft/nfsft_adjoint.m | 22 +
matlab/nfsft/nfsft_finalize.m | 22 +
matlab/nfsft/nfsft_forget.m | 22 +
matlab/nfsft/nfsft_get_f.m | 22 +
matlab/nfsft/nfsft_get_f_hat.m | 22 +
matlab/nfsft/nfsft_get_f_hat_linear.m | 22 +
matlab/nfsft/nfsft_get_num_threads.m | 23 +
matlab/nfsft/nfsft_get_x.m | 22 +
matlab/nfsft/nfsft_init.m | 22 +
matlab/nfsft/nfsft_init_advanced.m | 22 +
matlab/nfsft/nfsft_init_guru.m | 22 +
matlab/nfsft/nfsft_precompute.m | 30 +
matlab/nfsft/nfsft_precompute_x.m | 22 +
matlab/nfsft/nfsft_set_f.m | 22 +
matlab/nfsft/nfsft_set_f_hat.m | 22 +
matlab/nfsft/nfsft_set_f_hat_linear.m | 22 +
matlab/nfsft/nfsft_set_x.m | 22 +
matlab/nfsft/nfsft_trafo.m | 22 +
matlab/nfsft/nfsftmex.c | 482 +
matlab/nfsft/projection.m | 78 +
matlab/nfsft/simple_test.m | 69 +
nfft3.pc.in | 11 +
support/Makefile.am | 3 +
support/Makefile.in | 423 +
support/rem.sed | 3 +
support/toc.sed | 5 +
tests/Makefile.am | 31 +
tests/Makefile.in | 685 +
tests/check_nfft.c | 283 +
tests/check_nfft.h | 92 +
tests/check_nfft_1d.c | 203 +
util/Makefile.am | 21 +
util/Makefile.in | 580 +
util/util.c | 1488 +
958 files changed, 304357 insertions(+)
diff --git a/3rdparty/Makefile.am b/3rdparty/Makefile.am
new file mode 100644
index 0000000..c47c071
--- /dev/null
+++ b/3rdparty/Makefile.am
@@ -0,0 +1,9 @@
+SUBDIRS = cstripack .
+
+noinst_LTLIBRARIES = lib3rdparty.la
+
+lib3rdparty_la_SOURCES =
+
+lib3rdparty_la_LIBADD = cstripack/libcstripack.la
+
+EXTRA_DIST = README
\ No newline at end of file
diff --git a/3rdparty/Makefile.in b/3rdparty/Makefile.in
new file mode 100644
index 0000000..52c2a8e
--- /dev/null
+++ b/3rdparty/Makefile.in
@@ -0,0 +1,679 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = 3rdparty
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+lib3rdparty_la_DEPENDENCIES = cstripack/libcstripack.la
+am_lib3rdparty_la_OBJECTS =
+lib3rdparty_la_OBJECTS = $(am_lib3rdparty_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(lib3rdparty_la_SOURCES)
+DIST_SOURCES = $(lib3rdparty_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = cstripack .
+noinst_LTLIBRARIES = lib3rdparty.la
+lib3rdparty_la_SOURCES =
+lib3rdparty_la_LIBADD = cstripack/libcstripack.la
+EXTRA_DIST = README
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu 3rdparty/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu 3rdparty/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+lib3rdparty.la: $(lib3rdparty_la_OBJECTS) $(lib3rdparty_la_DEPENDENCIES) $(EXTRA_lib3rdparty_la_DEPENDENCIES)
+ $(LINK) $(lib3rdparty_la_OBJECTS) $(lib3rdparty_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+cscopelist-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES)
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+ cscopelist-recursive ctags-recursive install-am install-strip \
+ tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES cscopelist cscopelist-recursive ctags \
+ ctags-recursive distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/3rdparty/README b/3rdparty/README
new file mode 100644
index 0000000..be043b7
--- /dev/null
+++ b/3rdparty/README
@@ -0,0 +1,9 @@
+This directory contains third party code that is needed to build NFFT3. This
+directory does, however, not contain the FFTW3 library which is also needed to
+build NFFT3. It is available from http://www.fftw.org as a free download. All
+code in subpackages is copyright of the respective authors as stated in each
+package. Currently, the following packages are included:
+
+CSTRIPACK - A C-version of Robert J. Renka's the STRIPACK Fortran package to
+ compute Delaunay triangulations and Voronoi partitions on the unit sphere.
+
diff --git a/3rdparty/cstripack/Makefile.am b/3rdparty/cstripack/Makefile.am
new file mode 100644
index 0000000..d99c270
--- /dev/null
+++ b/3rdparty/cstripack/Makefile.am
@@ -0,0 +1,7 @@
+noinst_LTLIBRARIES = libcstripack.la
+
+libcstripack_la_SOURCES = cstripack.c
+
+libcstripack_la_LIBADD =
+
+noinst_HEADERS = cstripack.h
diff --git a/3rdparty/cstripack/Makefile.in b/3rdparty/cstripack/Makefile.in
new file mode 100644
index 0000000..30e9115
--- /dev/null
+++ b/3rdparty/cstripack/Makefile.in
@@ -0,0 +1,556 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = 3rdparty/cstripack
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libcstripack_la_DEPENDENCIES =
+am_libcstripack_la_OBJECTS = cstripack.lo
+libcstripack_la_OBJECTS = $(am_libcstripack_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libcstripack_la_SOURCES)
+DIST_SOURCES = $(libcstripack_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libcstripack.la
+libcstripack_la_SOURCES = cstripack.c
+libcstripack_la_LIBADD =
+noinst_HEADERS = cstripack.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu 3rdparty/cstripack/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu 3rdparty/cstripack/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libcstripack.la: $(libcstripack_la_OBJECTS) $(libcstripack_la_DEPENDENCIES) $(EXTRA_libcstripack_la_DEPENDENCIES)
+ $(LINK) $(libcstripack_la_OBJECTS) $(libcstripack_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cstripack.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/3rdparty/cstripack/cstripack.c b/3rdparty/cstripack/cstripack.c
new file mode 100644
index 0000000..d0c5baa
--- /dev/null
+++ b/3rdparty/cstripack/cstripack.c
@@ -0,0 +1,6262 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+/* src.f -- translated by f2c (version 20060506).
+ You must link the resulting object file with libf2c:
+ on Microsoft Windows system, link with libf2c.lib;
+ on Linux or Unix systems, link with .../path/to/libf2c.a -lm
+ or, if you install libf2c.a in a standard place, with -lf2c -lm
+ -- in that order, at the end of the command line, as in
+ cc *.o -lf2c -lm
+ Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
+
+ http://www.netlib.org/f2c/libf2c.zip
+*/
+
+#include <math.h>
+#include "cstripack.h"
+
+/* Declarations from f2c.h */
+#define abs(x) ((x) >= 0 ? (x) : -(x))
+#define TRUE_ (1)
+#define FALSE_ (0)
+
+/* Common Block Declarations */
+
+static struct {
+ double y;
+} stcom;
+
+/* Subroutine */ int addnod_(int *nst, int *k, double *x,
+ double *y, double *z__, int *list, int *lptr, int
+ *lend, int *lnew, int *ier)
+{
+ /* System generated locals */
+ int i__1;
+
+ /* Local variables */
+ static int l;
+ static double p[3], b1, b2, b3;
+ static int i1, i2, i3, kk, lp, in1, io1, io2, km1, lpf, ist, lpo1;
+ static int lpo1s;
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/08/99 */
+
+/* This subroutine adds node K to a triangulation of the */
+/* convex hull of nodes 1,...,K-1, producing a triangulation */
+/* of the convex hull of nodes 1,...,K. */
+
+/* The algorithm consists of the following steps: node K */
+/* is located relative to the triangulation (TRFIND), its */
+/* index is added to the data structure (INTADD or BDYADD), */
+/* and a sequence of swaps (SWPTST and SWAP) are applied to */
+/* the arcs opposite K so that all arcs incident on node K */
+/* and opposite node K are locally optimal (satisfy the cir- */
+/* cumcircle test). Thus, if a Delaunay triangulation is */
+/* input, a Delaunay triangulation will result. */
+
+
+/* On input: */
+
+/* NST = Index of a node at which TRFIND begins its */
+/* search. Search time depends on the proximity */
+/* of this node to K. If NST < 1, the search is */
+/* begun at node K-1. */
+
+/* K = Nodal index (index for X, Y, Z, and LEND) of the */
+/* new node to be added. K .GE. 4. */
+
+/* X,Y,Z = Arrays of length .GE. K containing Car- */
+/* tesian coordinates of the nodes. */
+/* (X(I),Y(I),Z(I)) defines node I for */
+/* I = 1,...,K. */
+
+/* The above parameters are not altered by this routine. */
+
+/* LIST,LPTR,LEND,LNEW = Data structure associated with */
+/* the triangulation of nodes 1 */
+/* to K-1. The array lengths are */
+/* assumed to be large enough to */
+/* add node K. Refer to Subrou- */
+/* tine TRMESH. */
+
+/* On output: */
+
+/* LIST,LPTR,LEND,LNEW = Data structure updated with */
+/* the addition of node K as the */
+/* last entry unless IER .NE. 0 */
+/* and IER .NE. -3, in which case */
+/* the arrays are not altered. */
+
+/* IER = Error indicator: */
+/* IER = 0 if no errors were encountered. */
+/* IER = -1 if K is outside its valid range */
+/* on input. */
+/* IER = -2 if all nodes (including K) are col- */
+/* linear (lie on a common geodesic). */
+/* IER = L if nodes L and K coincide for some */
+/* L < K. */
+
+/* Modules required by ADDNOD: BDYADD, COVSPH, INSERT, */
+/* INTADD, JRAND, LSTPTR, */
+/* STORE, SWAP, SWPTST, */
+/* TRFIND */
+
+/* Intrinsic function called by ADDNOD: ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* B1,B2,B3 = Unnormalized barycentric coordinates returned */
+/* by TRFIND. */
+/* I1,I2,I3 = Vertex indexes of a triangle containing K */
+/* IN1 = Vertex opposite K: first neighbor of IO2 */
+/* that precedes IO1. IN1,IO1,IO2 are in */
+/* counterclockwise order. */
+/* IO1,IO2 = Adjacent neighbors of K defining an arc to */
+/* be tested for a swap */
+/* IST = Index of node at which TRFIND begins its search */
+/* KK = Local copy of K */
+/* KM1 = K-1 */
+/* L = Vertex index (I1, I2, or I3) returned in IER */
+/* if node K coincides with a vertex */
+/* LP = LIST pointer */
+/* LPF = LIST pointer to the first neighbor of K */
+/* LPO1 = LIST pointer to IO1 */
+/* LPO1S = Saved value of LPO1 */
+/* P = Cartesian coordinates of node K */
+
+ /* Parameter adjustments */
+ --lend;
+ --z__;
+ --y;
+ --x;
+ --list;
+ --lptr;
+
+ /* Function Body */
+ kk = *k;
+ if (kk < 4) {
+ goto L3;
+ }
+
+/* Initialization: */
+
+ km1 = kk - 1;
+ ist = *nst;
+ if (ist < 1) {
+ ist = km1;
+ }
+ p[0] = x[kk];
+ p[1] = y[kk];
+ p[2] = z__[kk];
+
+/* Find a triangle (I1,I2,I3) containing K or the rightmost */
+/* (I1) and leftmost (I2) visible boundary nodes as viewed */
+/* from node K. */
+
+ trfind_(&ist, p, &km1, &x[1], &y[1], &z__[1], &list[1], &lptr[1], &lend[1]
+ , &b1, &b2, &b3, &i1, &i2, &i3);
+
+/* Test for collinear or duplicate nodes. */
+
+ if (i1 == 0) {
+ goto L4;
+ }
+ if (i3 != 0) {
+ l = i1;
+ if (p[0] == x[l] && p[1] == y[l] && p[2] == z__[l]) {
+ goto L5;
+ }
+ l = i2;
+ if (p[0] == x[l] && p[1] == y[l] && p[2] == z__[l]) {
+ goto L5;
+ }
+ l = i3;
+ if (p[0] == x[l] && p[1] == y[l] && p[2] == z__[l]) {
+ goto L5;
+ }
+ intadd_(&kk, &i1, &i2, &i3, &list[1], &lptr[1], &lend[1], lnew);
+ } else {
+ if (i1 != i2) {
+ bdyadd_(&kk, &i1, &i2, &list[1], &lptr[1], &lend[1], lnew);
+ } else {
+ covsph_(&kk, &i1, &list[1], &lptr[1], &lend[1], lnew);
+ }
+ }
+ *ier = 0;
+
+/* Initialize variables for optimization of the */
+/* triangulation. */
+
+ lp = lend[kk];
+ lpf = lptr[lp];
+ io2 = list[lpf];
+ lpo1 = lptr[lpf];
+ io1 = (i__1 = list[lpo1], abs(i__1));
+
+/* Begin loop: find the node opposite K. */
+
+L1:
+ lp = lstptr_(&lend[io1], &io2, &list[1], &lptr[1]);
+ if (list[lp] < 0) {
+ goto L2;
+ }
+ lp = lptr[lp];
+ in1 = (i__1 = list[lp], abs(i__1));
+
+/* Swap test: if a swap occurs, two new arcs are */
+/* opposite K and must be tested. */
+
+ lpo1s = lpo1;
+ if (! swptst_(&in1, &kk, &io1, &io2, &x[1], &y[1], &z__[1])) {
+ goto L2;
+ }
+ swap_(&in1, &kk, &io1, &io2, &list[1], &lptr[1], &lend[1], &lpo1);
+ if (lpo1 == 0) {
+
+/* A swap is not possible because KK and IN1 are already */
+/* adjacent. This error in SWPTST only occurs in the */
+/* neutral case and when there are nearly duplicate */
+/* nodes. */
+
+ lpo1 = lpo1s;
+ goto L2;
+ }
+ io1 = in1;
+ goto L1;
+
+/* No swap occurred. Test for termination and reset */
+/* IO2 and IO1. */
+
+L2:
+ if (lpo1 == lpf || list[lpo1] < 0) {
+ return 0;
+ }
+ io2 = io1;
+ lpo1 = lptr[lpo1];
+ io1 = (i__1 = list[lpo1], abs(i__1));
+ goto L1;
+
+/* KK < 4. */
+
+L3:
+ *ier = -1;
+ return 0;
+
+/* All nodes are collinear. */
+
+L4:
+ *ier = -2;
+ return 0;
+
+/* Nodes L and K coincide. */
+
+L5:
+ *ier = l;
+ return 0;
+} /* addnod_ */
+
+double areas_(double *v1, double *v2, double *v3)
+{
+ /* System generated locals */
+ double ret_val;
+
+ /* Local variables */
+ static int i__;
+ static double a1, a2, a3, s12, s31, s23, u12[3], u23[3], u31[3], ca1,
+ ca2, ca3, dv1[3], dv2[3], dv3[3];
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 09/18/90 */
+
+/* This function returns the area of a spherical triangle */
+/* on the unit sphere. */
+
+
+/* On input: */
+
+/* V1,V2,V3 = Arrays of length 3 containing the Carte- */
+/* sian coordinates of unit vectors (the */
+/* three triangle vertices in any order). */
+/* These vectors, if nonzero, are implicitly */
+/* scaled to have length 1. */
+
+/* Input parameters are not altered by this function. */
+
+/* On output: */
+
+/* AREAS = Area of the spherical triangle defined by */
+/* V1, V2, and V3 in the range 0 to 2*PI (the */
+/* area of a hemisphere). AREAS = 0 (or 2*PI) */
+/* if and only if V1, V2, and V3 lie in (or */
+/* close to) a plane containing the origin. */
+
+/* Modules required by AREAS: None */
+
+/* Intrinsic functions called by AREAS: ACOS, DBLE, REAL, */
+/* SQRT */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* A1,A2,A3 = Interior angles of the spherical triangle */
+/* CA1,CA2,CA3 = cos(A1), cos(A2), and cos(A3), respectively */
+/* DV1,DV2,DV3 = Double Precision copies of V1, V2, and V3 */
+/* I = DO-loop index and index for Uij */
+/* S12,S23,S31 = Sum of squared components of U12, U23, U31 */
+/* U12,U23,U31 = Unit normal vectors to the planes defined by */
+/* pairs of triangle vertices */
+
+ /* Parameter adjustments */
+ --v3;
+ --v2;
+ --v1;
+
+ /* Function Body */
+ for (i__ = 1; i__ <= 3; ++i__) {
+ dv1[i__ - 1] = v1[i__];
+ dv2[i__ - 1] = v2[i__];
+ dv3[i__ - 1] = v3[i__];
+/* L1: */
+ }
+
+/* Compute cross products Uij = Vi X Vj. */
+
+ u12[0] = dv1[1] * dv2[2] - dv1[2] * dv2[1];
+ u12[1] = dv1[2] * dv2[0] - dv1[0] * dv2[2];
+ u12[2] = dv1[0] * dv2[1] - dv1[1] * dv2[0];
+
+ u23[0] = dv2[1] * dv3[2] - dv2[2] * dv3[1];
+ u23[1] = dv2[2] * dv3[0] - dv2[0] * dv3[2];
+ u23[2] = dv2[0] * dv3[1] - dv2[1] * dv3[0];
+
+ u31[0] = dv3[1] * dv1[2] - dv3[2] * dv1[1];
+ u31[1] = dv3[2] * dv1[0] - dv3[0] * dv1[2];
+ u31[2] = dv3[0] * dv1[1] - dv3[1] * dv1[0];
+
+/* Normalize Uij to unit vectors. */
+
+ s12 = 0.;
+ s23 = 0.;
+ s31 = 0.;
+ for (i__ = 1; i__ <= 3; ++i__) {
+ s12 += u12[i__ - 1] * u12[i__ - 1];
+ s23 += u23[i__ - 1] * u23[i__ - 1];
+ s31 += u31[i__ - 1] * u31[i__ - 1];
+/* L2: */
+ }
+
+/* Test for a degenerate triangle associated with collinear */
+/* vertices. */
+
+ if (s12 == 0. || s23 == 0. || s31 == 0.) {
+ ret_val = 0.;
+ return ret_val;
+ }
+ s12 = sqrt(s12);
+ s23 = sqrt(s23);
+ s31 = sqrt(s31);
+ for (i__ = 1; i__ <= 3; ++i__) {
+ u12[i__ - 1] /= s12;
+ u23[i__ - 1] /= s23;
+ u31[i__ - 1] /= s31;
+/* L3: */
+ }
+
+/* Compute interior angles Ai as the dihedral angles between */
+/* planes: */
+/* CA1 = cos(A1) = -<U12,U31> */
+/* CA2 = cos(A2) = -<U23,U12> */
+/* CA3 = cos(A3) = -<U31,U23> */
+
+ ca1 = -u12[0] * u31[0] - u12[1] * u31[1] - u12[2] * u31[2];
+ ca2 = -u23[0] * u12[0] - u23[1] * u12[1] - u23[2] * u12[2];
+ ca3 = -u31[0] * u23[0] - u31[1] * u23[1] - u31[2] * u23[2];
+ if (ca1 < -1.) {
+ ca1 = -1.;
+ }
+ if (ca1 > 1.) {
+ ca1 = 1.;
+ }
+ if (ca2 < -1.) {
+ ca2 = -1.;
+ }
+ if (ca2 > 1.) {
+ ca2 = 1.;
+ }
+ if (ca3 < -1.) {
+ ca3 = -1.;
+ }
+ if (ca3 > 1.) {
+ ca3 = 1.;
+ }
+ a1 = acos(ca1);
+ a2 = acos(ca2);
+ a3 = acos(ca3);
+
+/* Compute AREAS = A1 + A2 + A3 - PI. */
+
+ ret_val = a1 + a2 + a3 - acos(-1.);
+ if (ret_val < 0.) {
+ ret_val = 0.;
+ }
+ return ret_val;
+} /* areas_ */
+
+/* Subroutine */ int bdyadd_(int *kk, int *i1, int *i2, int *
+ list, int *lptr, int *lend, int *lnew)
+{
+ static int k, n1, n2, lp, lsav, nsav, next;
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/11/96 */
+
+/* This subroutine adds a boundary node to a triangulation */
+/* of a set of KK-1 points on the unit sphere. The data */
+/* structure is updated with the insertion of node KK, but no */
+/* optimization is performed. */
+
+/* This routine is identical to the similarly named routine */
+/* in TRIPACK. */
+
+
+/* On input: */
+
+/* KK = Index of a node to be connected to the sequence */
+/* of all visible boundary nodes. KK .GE. 1 and */
+/* KK must not be equal to I1 or I2. */
+
+/* I1 = First (rightmost as viewed from KK) boundary */
+/* node in the triangulation that is visible from */
+/* node KK (the line segment KK-I1 intersects no */
+/* arcs. */
+
+/* I2 = Last (leftmost) boundary node that is visible */
+/* from node KK. I1 and I2 may be determined by */
+/* Subroutine TRFIND. */
+
+/* The above parameters are not altered by this routine. */
+
+/* LIST,LPTR,LEND,LNEW = Triangulation data structure */
+/* created by Subroutine TRMESH. */
+/* Nodes I1 and I2 must be in- */
+/* cluded in the triangulation. */
+
+/* On output: */
+
+/* LIST,LPTR,LEND,LNEW = Data structure updated with */
+/* the addition of node KK. Node */
+/* KK is connected to I1, I2, and */
+/* all boundary nodes in between. */
+
+/* Module required by BDYADD: INSERT */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* K = Local copy of KK */
+/* LP = LIST pointer */
+/* LSAV = LIST pointer */
+/* N1,N2 = Local copies of I1 and I2, respectively */
+/* NEXT = Boundary node visible from K */
+/* NSAV = Boundary node visible from K */
+
+ /* Parameter adjustments */
+ --lend;
+ --lptr;
+ --list;
+
+ /* Function Body */
+ k = *kk;
+ n1 = *i1;
+ n2 = *i2;
+
+/* Add K as the last neighbor of N1. */
+
+ lp = lend[n1];
+ lsav = lptr[lp];
+ lptr[lp] = *lnew;
+ list[*lnew] = -k;
+ lptr[*lnew] = lsav;
+ lend[n1] = *lnew;
+ ++(*lnew);
+ next = -list[lp];
+ list[lp] = next;
+ nsav = next;
+
+/* Loop on the remaining boundary nodes between N1 and N2, */
+/* adding K as the first neighbor. */
+
+L1:
+ lp = lend[next];
+ insert_(&k, &lp, &list[1], &lptr[1], lnew);
+ if (next == n2) {
+ goto L2;
+ }
+ next = -list[lp];
+ list[lp] = next;
+ goto L1;
+
+/* Add the boundary nodes between N1 and N2 as neighbors */
+/* of node K. */
+
+L2:
+ lsav = *lnew;
+ list[*lnew] = n1;
+ lptr[*lnew] = *lnew + 1;
+ ++(*lnew);
+ next = nsav;
+
+L3:
+ if (next == n2) {
+ goto L4;
+ }
+ list[*lnew] = next;
+ lptr[*lnew] = *lnew + 1;
+ ++(*lnew);
+ lp = lend[next];
+ next = list[lp];
+ goto L3;
+
+L4:
+ list[*lnew] = -n2;
+ lptr[*lnew] = lsav;
+ lend[k] = *lnew;
+ ++(*lnew);
+ return 0;
+} /* bdyadd_ */
+
+/* Subroutine */ int bnodes_(int *n, int *list, int *lptr,
+ int *lend, int *nodes, int *nb, int *na, int *nt)
+{
+ /* System generated locals */
+ int i__1;
+
+ /* Local variables */
+ static int k, n0, lp, nn, nst;
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 06/26/96 */
+
+/* Given a triangulation of N nodes on the unit sphere */
+/* created by Subroutine TRMESH, this subroutine returns an */
+/* array containing the indexes (if any) of the counterclock- */
+/* wise-ordered sequence of boundary nodes -- the nodes on */
+/* the boundary of the convex hull of the set of nodes. (The */
+/* boundary is empty if the nodes do not lie in a single */
+/* hemisphere.) The numbers of boundary nodes, arcs, and */
+/* triangles are also returned. */
+
+
+/* On input: */
+
+/* N = Number of nodes in the triangulation. N .GE. 3. */
+
+/* LIST,LPTR,LEND = Data structure defining the trian- */
+/* gulation. Refer to Subroutine */
+/* TRMESH. */
+
+/* The above parameters are not altered by this routine. */
+
+/* NODES = int array of length at least NB */
+/* (NB .LE. N). */
+
+/* On output: */
+
+/* NODES = Ordered sequence of boundary node indexes */
+/* in the range 1 to N (in the first NB loca- */
+/* tions). */
+
+/* NB = Number of boundary nodes. */
+
+/* NA,NT = Number of arcs and triangles, respectively, */
+/* in the triangulation. */
+
+/* Modules required by BNODES: None */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* K = NODES index */
+/* LP = LIST pointer */
+/* N0 = Boundary node to be added to NODES */
+/* NN = Local copy of N */
+/* NST = First element of nodes (arbitrarily chosen to be */
+/* the one with smallest index) */
+
+ /* Parameter adjustments */
+ --lend;
+ --list;
+ --lptr;
+ --nodes;
+
+ /* Function Body */
+ nn = *n;
+
+/* Search for a boundary node. */
+
+ i__1 = nn;
+ for (nst = 1; nst <= i__1; ++nst) {
+ lp = lend[nst];
+ if (list[lp] < 0) {
+ goto L2;
+ }
+/* L1: */
+ }
+
+/* The triangulation contains no boundary nodes. */
+
+ *nb = 0;
+ *na = (nn - 2) * 3;
+ *nt = (nn - 2) << 1;
+ return 0;
+
+/* NST is the first boundary node encountered. Initialize */
+/* for traversal of the boundary. */
+
+L2:
+ nodes[1] = nst;
+ k = 1;
+ n0 = nst;
+
+/* Traverse the boundary in counterclockwise order. */
+
+L3:
+ lp = lend[n0];
+ lp = lptr[lp];
+ n0 = list[lp];
+ if (n0 == nst) {
+ goto L4;
+ }
+ ++k;
+ nodes[k] = n0;
+ goto L3;
+
+/* Store the counts. */
+
+L4:
+ *nb = k;
+ *nt = (*n << 1) - *nb - 2;
+ *na = *nt + *n - 1;
+ return 0;
+} /* bnodes_ */
+
+/* Subroutine */ int circum_(double *v1, double *v2, double *v3,
+ double *c__, int *ier)
+{
+ /* Local variables */
+ static int i__;
+ static double e1[3], e2[3], cu[3], cnorm;
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 06/29/95 */
+
+/* This subroutine returns the circumcenter of a spherical */
+/* triangle on the unit sphere: the point on the sphere sur- */
+/* face that is equally distant from the three triangle */
+/* vertices and lies in the same hemisphere, where distance */
+/* is taken to be arc-length on the sphere surface. */
+
+
+/* On input: */
+
+/* V1,V2,V3 = Arrays of length 3 containing the Carte- */
+/* sian coordinates of the three triangle */
+/* vertices (unit vectors) in CCW order. */
+
+/* The above parameters are not altered by this routine. */
+
+/* C = Array of length 3. */
+
+/* On output: */
+
+/* C = Cartesian coordinates of the circumcenter unless */
+/* IER > 0, in which case C is not defined. C = */
+/* (V2-V1) X (V3-V1) normalized to a unit vector. */
+
+/* IER = Error indicator: */
+/* IER = 0 if no errors were encountered. */
+/* IER = 1 if V1, V2, and V3 lie on a common */
+/* line: (V2-V1) X (V3-V1) = 0. */
+/* (The vertices are not tested for validity.) */
+
+/* Modules required by CIRCUM: None */
+
+/* Intrinsic function called by CIRCUM: SQRT */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* CNORM = Norm of CU: used to compute C */
+/* CU = Scalar multiple of C: E1 X E2 */
+/* E1,E2 = Edges of the underlying planar triangle: */
+/* V2-V1 and V3-V1, respectively */
+/* I = DO-loop index */
+
+ /* Parameter adjustments */
+ --c__;
+ --v3;
+ --v2;
+ --v1;
+
+ /* Function Body */
+ for (i__ = 1; i__ <= 3; ++i__) {
+ e1[i__ - 1] = v2[i__] - v1[i__];
+ e2[i__ - 1] = v3[i__] - v1[i__];
+/* L1: */
+ }
+
+/* Compute CU = E1 X E2 and CNORM**2. */
+
+ cu[0] = e1[1] * e2[2] - e1[2] * e2[1];
+ cu[1] = e1[2] * e2[0] - e1[0] * e2[2];
+ cu[2] = e1[0] * e2[1] - e1[1] * e2[0];
+ cnorm = cu[0] * cu[0] + cu[1] * cu[1] + cu[2] * cu[2];
+
+/* The vertices lie on a common line if and only if CU is */
+/* the zero vector. */
+
+ if (cnorm != 0.) {
+
+/* No error: compute C. */
+
+ cnorm = sqrt(cnorm);
+ for (i__ = 1; i__ <= 3; ++i__) {
+ c__[i__] = cu[i__ - 1] / cnorm;
+/* L2: */
+ }
+ *ier = 0;
+ } else {
+
+/* CU = 0. */
+
+ *ier = 1;
+ }
+ return 0;
+} /* circum_ */
+
+/* Subroutine */ int covsph_(int *kk, int *n0, int *list, int
+ *lptr, int *lend, int *lnew)
+{
+ static int k, lp, nst, lsav, next;
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/17/96 */
+
+/* This subroutine connects an exterior node KK to all */
+/* boundary nodes of a triangulation of KK-1 points on the */
+/* unit sphere, producing a triangulation that covers the */
+/* sphere. The data structure is updated with the addition */
+/* of node KK, but no optimization is performed. All boun- */
+/* dary nodes must be visible from node KK. */
+
+
+/* On input: */
+
+/* KK = Index of the node to be connected to the set of */
+/* all boundary nodes. KK .GE. 4. */
+
+/* N0 = Index of a boundary node (in the range 1 to */
+/* KK-1). N0 may be determined by Subroutine */
+/* TRFIND. */
+
+/* The above parameters are not altered by this routine. */
+
+/* LIST,LPTR,LEND,LNEW = Triangulation data structure */
+/* created by Subroutine TRMESH. */
+/* Node N0 must be included in */
+/* the triangulation. */
+
+/* On output: */
+
+/* LIST,LPTR,LEND,LNEW = Data structure updated with */
+/* the addition of node KK as the */
+/* last entry. The updated */
+/* triangulation contains no */
+/* boundary nodes. */
+
+/* Module required by COVSPH: INSERT */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* K = Local copy of KK */
+/* LP = LIST pointer */
+/* LSAV = LIST pointer */
+/* NEXT = Boundary node visible from K */
+/* NST = Local copy of N0 */
+
+ /* Parameter adjustments */
+ --lend;
+ --lptr;
+ --list;
+
+ /* Function Body */
+ k = *kk;
+ nst = *n0;
+
+/* Traverse the boundary in clockwise order, inserting K as */
+/* the first neighbor of each boundary node, and converting */
+/* the boundary node to an interior node. */
+
+ next = nst;
+L1:
+ lp = lend[next];
+ insert_(&k, &lp, &list[1], &lptr[1], lnew);
+ next = -list[lp];
+ list[lp] = next;
+ if (next != nst) {
+ goto L1;
+ }
+
+/* Traverse the boundary again, adding each node to K's */
+/* adjacency list. */
+
+ lsav = *lnew;
+L2:
+ lp = lend[next];
+ list[*lnew] = next;
+ lptr[*lnew] = *lnew + 1;
+ ++(*lnew);
+ next = list[lp];
+ if (next != nst) {
+ goto L2;
+ }
+
+ lptr[*lnew - 1] = lsav;
+ lend[k] = *lnew - 1;
+ return 0;
+} /* covsph_ */
+
+/* Subroutine */ int crlist_(int *n, int *ncol, double *x,
+ double *y, double *z__, int *list, int *lend, int
+ *lptr, int *lnew, int *ltri, int *listc, int *nb,
+ double *xc, double *yc, double *zc, double *rc,
+ int *ier)
+{
+ /* System generated locals */
+ int i__1, i__2;
+
+ /* Local variables */
+ static double c__[3], t;
+ static int i1, i2, i3, i4, n0, n1, n2, n3, n4;
+ static double v1[3], v2[3], v3[3];
+ static int lp, kt, nn, nt, nm2, kt1, kt2, kt11, kt12, kt21, kt22, lpl,
+ lpn;
+ static int swp;
+ static int ierr;
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/05/98 */
+
+/* Given a Delaunay triangulation of nodes on the surface */
+/* of the unit sphere, this subroutine returns the set of */
+/* triangle circumcenters corresponding to Voronoi vertices, */
+/* along with the circumradii and a list of triangle indexes */
+/* LISTC stored in one-to-one correspondence with LIST/LPTR */
+/* entries. */
+
+/* A triangle circumcenter is the point (unit vector) lying */
+/* at the same angular distance from the three vertices and */
+/* contained in the same hemisphere as the vertices. (Note */
+/* that the negative of a circumcenter is also equidistant */
+/* from the vertices.) If the triangulation covers the sur- */
+/* face, the Voronoi vertices are the circumcenters of the */
+/* triangles in the Delaunay triangulation. LPTR, LEND, and */
+/* LNEW are not altered in this case. */
+
+/* On the other hand, if the nodes are contained in a sin- */
+/* gle hemisphere, the triangulation is implicitly extended */
+/* to the entire surface by adding pseudo-arcs (of length */
+/* greater than 180 degrees) between boundary nodes forming */
+/* pseudo-triangles whose 'circumcenters' are included in the */
+/* list. This extension to the triangulation actually con- */
+/* sists of a triangulation of the set of boundary nodes in */
+/* which the swap test is reversed (a non-empty circumcircle */
+/* test). The negative circumcenters are stored as the */
+/* pseudo-triangle 'circumcenters'. LISTC, LPTR, LEND, and */
+/* LNEW contain a data structure corresponding to the ex- */
+/* tended triangulation (Voronoi diagram), but LIST is not */
+/* altered in this case. Thus, if it is necessary to retain */
+/* the original (unextended) triangulation data structure, */
+/* copies of LPTR and LNEW must be saved before calling this */
+/* routine. */
+
+
+/* On input: */
+
+/* N = Number of nodes in the triangulation. N .GE. 3. */
+/* Note that, if N = 3, there are only two Voronoi */
+/* vertices separated by 180 degrees, and the */
+/* Voronoi regions are not well defined. */
+
+/* NCOL = Number of columns reserved for LTRI. This */
+/* must be at least NB-2, where NB is the number */
+/* of boundary nodes. */
+
+/* X,Y,Z = Arrays of length N containing the Cartesian */
+/* coordinates of the nodes (unit vectors). */
+
+/* LIST = int array containing the set of adjacency */
+/* lists. Refer to Subroutine TRMESH. */
+
+/* LEND = Set of pointers to ends of adjacency lists. */
+/* Refer to Subroutine TRMESH. */
+
+/* The above parameters are not altered by this routine. */
+
+/* LPTR = Array of pointers associated with LIST. Re- */
+/* fer to Subroutine TRMESH. */
+
+/* LNEW = Pointer to the first empty location in LIST */
+/* and LPTR (list length plus one). */
+
+/* LTRI = int work space array dimensioned 6 by */
+/* NCOL, or unused dummy parameter if NB = 0. */
+
+/* LISTC = int array of length at least 3*NT, where */
+/* NT = 2*N-4 is the number of triangles in the */
+/* triangulation (after extending it to cover */
+/* the entire surface if necessary). */
+
+/* XC,YC,ZC,RC = Arrays of length NT = 2*N-4. */
+
+/* On output: */
+
+/* LPTR = Array of pointers associated with LISTC: */
+/* updated for the addition of pseudo-triangles */
+/* if the original triangulation contains */
+/* boundary nodes (NB > 0). */
+
+/* LNEW = Pointer to the first empty location in LISTC */
+/* and LPTR (list length plus one). LNEW is not */
+/* altered if NB = 0. */
+
+/* LTRI = Triangle list whose first NB-2 columns con- */
+/* tain the indexes of a clockwise-ordered */
+/* sequence of vertices (first three rows) */
+/* followed by the LTRI column indexes of the */
+/* triangles opposite the vertices (or 0 */
+/* denoting the exterior region) in the last */
+/* three rows. This array is not generally of */
+/* any use. */
+
+/* LISTC = Array containing triangle indexes (indexes */
+/* to XC, YC, ZC, and RC) stored in 1-1 corres- */
+/* pondence with LIST/LPTR entries (or entries */
+/* that would be stored in LIST for the */
+/* extended triangulation): the index of tri- */
+/* angle (N1,N2,N3) is stored in LISTC(K), */
+/* LISTC(L), and LISTC(M), where LIST(K), */
+/* LIST(L), and LIST(M) are the indexes of N2 */
+/* as a neighbor of N1, N3 as a neighbor of N2, */
+/* and N1 as a neighbor of N3. The Voronoi */
+/* region associated with a node is defined by */
+/* the CCW-ordered sequence of circumcenters in */
+/* one-to-one correspondence with its adjacency */
+/* list (in the extended triangulation). */
+
+/* NB = Number of boundary nodes unless IER = 1. */
+
+/* XC,YC,ZC = Arrays containing the Cartesian coordi- */
+/* nates of the triangle circumcenters */
+/* (Voronoi vertices). XC(I)**2 + YC(I)**2 */
+/* + ZC(I)**2 = 1. The first NB-2 entries */
+/* correspond to pseudo-triangles if NB > 0. */
+
+/* RC = Array containing circumradii (the arc lengths */
+/* or angles between the circumcenters and associ- */
+/* ated triangle vertices) in 1-1 correspondence */
+/* with circumcenters. */
+
+/* IER = Error indicator: */
+/* IER = 0 if no errors were encountered. */
+/* IER = 1 if N < 3. */
+/* IER = 2 if NCOL < NB-2. */
+/* IER = 3 if a triangle is degenerate (has ver- */
+/* tices lying on a common geodesic). */
+
+/* Modules required by CRLIST: CIRCUM, LSTPTR, SWPTST */
+
+/* Intrinsic functions called by CRLIST: ABS, ACOS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* C = Circumcenter returned by Subroutine CIRCUM */
+/* I1,I2,I3 = Permutation of (1,2,3): LTRI row indexes */
+/* I4 = LTRI row index in the range 1 to 3 */
+/* IERR = Error flag for calls to CIRCUM */
+/* KT = Triangle index */
+/* KT1,KT2 = Indexes of a pair of adjacent pseudo-triangles */
+/* KT11,KT12 = Indexes of the pseudo-triangles opposite N1 */
+/* and N2 as vertices of KT1 */
+/* KT21,KT22 = Indexes of the pseudo-triangles opposite N1 */
+/* and N2 as vertices of KT2 */
+/* LP,LPN = LIST pointers */
+/* LPL = LIST pointer of the last neighbor of N1 */
+/* N0 = Index of the first boundary node (initial */
+/* value of N1) in the loop on boundary nodes */
+/* used to store the pseudo-triangle indexes */
+/* in LISTC */
+/* N1,N2,N3 = Nodal indexes defining a triangle (CCW order) */
+/* or pseudo-triangle (clockwise order) */
+/* N4 = Index of the node opposite N2 -> N1 */
+/* NM2 = N-2 */
+/* NN = Local copy of N */
+/* NT = Number of pseudo-triangles: NB-2 */
+/* SWP = Logical variable set to TRUE in each optimiza- */
+/* tion loop (loop on pseudo-arcs) iff a swap */
+/* is performed */
+/* V1,V2,V3 = Vertices of triangle KT = (N1,N2,N3) sent to */
+/* Subroutine CIRCUM */
+
+ /* Parameter adjustments */
+ --lend;
+ --z__;
+ --y;
+ --x;
+ ltri -= 7;
+ --list;
+ --lptr;
+ --listc;
+ --xc;
+ --yc;
+ --zc;
+ --rc;
+
+ /* Function Body */
+ nn = *n;
+ *nb = 0;
+ nt = 0;
+ if (nn < 3) {
+ goto L21;
+ }
+
+/* Search for a boundary node N1. */
+
+ i__1 = nn;
+ for (n1 = 1; n1 <= i__1; ++n1) {
+ lp = lend[n1];
+ if (list[lp] < 0) {
+ goto L2;
+ }
+/* L1: */
+ }
+
+/* The triangulation already covers the sphere. */
+
+ goto L9;
+
+/* There are NB .GE. 3 boundary nodes. Add NB-2 pseudo- */
+/* triangles (N1,N2,N3) by connecting N3 to the NB-3 */
+/* boundary nodes to which it is not already adjacent. */
+
+/* Set N3 and N2 to the first and last neighbors, */
+/* respectively, of N1. */
+
+L2:
+ n2 = -list[lp];
+ lp = lptr[lp];
+ n3 = list[lp];
+
+/* Loop on boundary arcs N1 -> N2 in clockwise order, */
+/* storing triangles (N1,N2,N3) in column NT of LTRI */
+/* along with the indexes of the triangles opposite */
+/* the vertices. */
+
+L3:
+ ++nt;
+ if (nt <= *ncol) {
+ ltri[nt * 6 + 1] = n1;
+ ltri[nt * 6 + 2] = n2;
+ ltri[nt * 6 + 3] = n3;
+ ltri[nt * 6 + 4] = nt + 1;
+ ltri[nt * 6 + 5] = nt - 1;
+ ltri[nt * 6 + 6] = 0;
+ }
+ n1 = n2;
+ lp = lend[n1];
+ n2 = -list[lp];
+ if (n2 != n3) {
+ goto L3;
+ }
+
+ *nb = nt + 2;
+ if (*ncol < nt) {
+ goto L22;
+ }
+ ltri[nt * 6 + 4] = 0;
+ if (nt == 1) {
+ goto L7;
+ }
+
+/* Optimize the exterior triangulation (set of pseudo- */
+/* triangles) by applying swaps to the pseudo-arcs N1-N2 */
+/* (pairs of adjacent pseudo-triangles KT1 and KT2 > KT1). */
+/* The loop on pseudo-arcs is repeated until no swaps are */
+/* performed. */
+
+L4:
+ swp = FALSE_;
+ i__1 = nt - 1;
+ for (kt1 = 1; kt1 <= i__1; ++kt1) {
+ for (i3 = 1; i3 <= 3; ++i3) {
+ kt2 = ltri[i3 + 3 + kt1 * 6];
+ if (kt2 <= kt1) {
+ goto L5;
+ }
+
+/* The LTRI row indexes (I1,I2,I3) of triangle KT1 = */
+/* (N1,N2,N3) are a cyclical permutation of (1,2,3). */
+
+ if (i3 == 1) {
+ i1 = 2;
+ i2 = 3;
+ } else if (i3 == 2) {
+ i1 = 3;
+ i2 = 1;
+ } else {
+ i1 = 1;
+ i2 = 2;
+ }
+ n1 = ltri[i1 + kt1 * 6];
+ n2 = ltri[i2 + kt1 * 6];
+ n3 = ltri[i3 + kt1 * 6];
+
+/* KT2 = (N2,N1,N4) for N4 = LTRI(I,KT2), where */
+/* LTRI(I+3,KT2) = KT1. */
+
+ if (ltri[kt2 * 6 + 4] == kt1) {
+ i4 = 1;
+ } else if (ltri[kt2 * 6 + 5] == kt1) {
+ i4 = 2;
+ } else {
+ i4 = 3;
+ }
+ n4 = ltri[i4 + kt2 * 6];
+
+/* The empty circumcircle test is reversed for the pseudo- */
+/* triangles. The reversal is implicit in the clockwise */
+/* ordering of the vertices. */
+
+ if (! swptst_(&n1, &n2, &n3, &n4, &x[1], &y[1], &z__[1])) {
+ goto L5;
+ }
+
+/* Swap arc N1-N2 for N3-N4. KTij is the triangle opposite */
+/* Nj as a vertex of KTi. */
+
+ swp = TRUE_;
+ kt11 = ltri[i1 + 3 + kt1 * 6];
+ kt12 = ltri[i2 + 3 + kt1 * 6];
+ if (i4 == 1) {
+ i2 = 2;
+ i1 = 3;
+ } else if (i4 == 2) {
+ i2 = 3;
+ i1 = 1;
+ } else {
+ i2 = 1;
+ i1 = 2;
+ }
+ kt21 = ltri[i1 + 3 + kt2 * 6];
+ kt22 = ltri[i2 + 3 + kt2 * 6];
+ ltri[kt1 * 6 + 1] = n4;
+ ltri[kt1 * 6 + 2] = n3;
+ ltri[kt1 * 6 + 3] = n1;
+ ltri[kt1 * 6 + 4] = kt12;
+ ltri[kt1 * 6 + 5] = kt22;
+ ltri[kt1 * 6 + 6] = kt2;
+ ltri[kt2 * 6 + 1] = n3;
+ ltri[kt2 * 6 + 2] = n4;
+ ltri[kt2 * 6 + 3] = n2;
+ ltri[kt2 * 6 + 4] = kt21;
+ ltri[kt2 * 6 + 5] = kt11;
+ ltri[kt2 * 6 + 6] = kt1;
+
+/* Correct the KT11 and KT22 entries that changed. */
+
+ if (kt11 != 0) {
+ i4 = 4;
+ if (ltri[kt11 * 6 + 4] != kt1) {
+ i4 = 5;
+ if (ltri[kt11 * 6 + 5] != kt1) {
+ i4 = 6;
+ }
+ }
+ ltri[i4 + kt11 * 6] = kt2;
+ }
+ if (kt22 != 0) {
+ i4 = 4;
+ if (ltri[kt22 * 6 + 4] != kt2) {
+ i4 = 5;
+ if (ltri[kt22 * 6 + 5] != kt2) {
+ i4 = 6;
+ }
+ }
+ ltri[i4 + kt22 * 6] = kt1;
+ }
+L5:
+ ;
+ }
+/* L6: */
+ }
+ if (swp) {
+ goto L4;
+ }
+
+/* Compute and store the negative circumcenters and radii of */
+/* the pseudo-triangles in the first NT positions. */
+
+L7:
+ i__1 = nt;
+ for (kt = 1; kt <= i__1; ++kt) {
+ n1 = ltri[kt * 6 + 1];
+ n2 = ltri[kt * 6 + 2];
+ n3 = ltri[kt * 6 + 3];
+ v1[0] = x[n1];
+ v1[1] = y[n1];
+ v1[2] = z__[n1];
+ v2[0] = x[n2];
+ v2[1] = y[n2];
+ v2[2] = z__[n2];
+ v3[0] = x[n3];
+ v3[1] = y[n3];
+ v3[2] = z__[n3];
+ circum_(v1, v2, v3, c__, &ierr);
+ if (ierr != 0) {
+ goto L23;
+ }
+
+/* Store the negative circumcenter and radius (computed */
+/* from <V1,C>). */
+
+ xc[kt] = c__[0];
+ yc[kt] = c__[1];
+ zc[kt] = c__[2];
+ t = v1[0] * c__[0] + v1[1] * c__[1] + v1[2] * c__[2];
+ if (t < -1.) {
+ t = -1.;
+ }
+ if (t > 1.) {
+ t = 1.;
+ }
+ rc[kt] = acos(t);
+/* L8: */
+ }
+
+/* Compute and store the circumcenters and radii of the */
+/* actual triangles in positions KT = NT+1, NT+2, ... */
+/* Also, store the triangle indexes KT in the appropriate */
+/* LISTC positions. */
+
+L9:
+ kt = nt;
+
+/* Loop on nodes N1. */
+
+ nm2 = nn - 2;
+ i__1 = nm2;
+ for (n1 = 1; n1 <= i__1; ++n1) {
+ lpl = lend[n1];
+ lp = lpl;
+ n3 = list[lp];
+
+/* Loop on adjacent neighbors N2,N3 of N1 for which N2 > N1 */
+/* and N3 > N1. */
+
+L10:
+ lp = lptr[lp];
+ n2 = n3;
+ n3 = (i__2 = list[lp], abs(i__2));
+ if (n2 <= n1 || n3 <= n1) {
+ goto L11;
+ }
+ ++kt;
+
+/* Compute the circumcenter C of triangle KT = (N1,N2,N3). */
+
+ v1[0] = x[n1];
+ v1[1] = y[n1];
+ v1[2] = z__[n1];
+ v2[0] = x[n2];
+ v2[1] = y[n2];
+ v2[2] = z__[n2];
+ v3[0] = x[n3];
+ v3[1] = y[n3];
+ v3[2] = z__[n3];
+ circum_(v1, v2, v3, c__, &ierr);
+ if (ierr != 0) {
+ goto L23;
+ }
+
+/* Store the circumcenter, radius and triangle index. */
+
+ xc[kt] = c__[0];
+ yc[kt] = c__[1];
+ zc[kt] = c__[2];
+ t = v1[0] * c__[0] + v1[1] * c__[1] + v1[2] * c__[2];
+ if (t < -1.) {
+ t = -1.;
+ }
+ if (t > 1.) {
+ t = 1.;
+ }
+ rc[kt] = acos(t);
+
+/* Store KT in LISTC(LPN), where Abs(LIST(LPN)) is the */
+/* index of N2 as a neighbor of N1, N3 as a neighbor */
+/* of N2, and N1 as a neighbor of N3. */
+
+ lpn = lstptr_(&lpl, &n2, &list[1], &lptr[1]);
+ listc[lpn] = kt;
+ lpn = lstptr_(&lend[n2], &n3, &list[1], &lptr[1]);
+ listc[lpn] = kt;
+ lpn = lstptr_(&lend[n3], &n1, &list[1], &lptr[1]);
+ listc[lpn] = kt;
+L11:
+ if (lp != lpl) {
+ goto L10;
+ }
+/* L12: */
+ }
+ if (nt == 0) {
+ goto L20;
+ }
+
+/* Store the first NT triangle indexes in LISTC. */
+
+/* Find a boundary triangle KT1 = (N1,N2,N3) with a */
+/* boundary arc opposite N3. */
+
+ kt1 = 0;
+L13:
+ ++kt1;
+ if (ltri[kt1 * 6 + 4] == 0) {
+ i1 = 2;
+ i2 = 3;
+ i3 = 1;
+ goto L14;
+ } else if (ltri[kt1 * 6 + 5] == 0) {
+ i1 = 3;
+ i2 = 1;
+ i3 = 2;
+ goto L14;
+ } else if (ltri[kt1 * 6 + 6] == 0) {
+ i1 = 1;
+ i2 = 2;
+ i3 = 3;
+ goto L14;
+ }
+ goto L13;
+L14:
+ n1 = ltri[i1 + kt1 * 6];
+ n0 = n1;
+
+/* Loop on boundary nodes N1 in CCW order, storing the */
+/* indexes of the clockwise-ordered sequence of triangles */
+/* that contain N1. The first triangle overwrites the */
+/* last neighbor position, and the remaining triangles, */
+/* if any, are appended to N1's adjacency list. */
+
+/* A pointer to the first neighbor of N1 is saved in LPN. */
+
+L15:
+ lp = lend[n1];
+ lpn = lptr[lp];
+ listc[lp] = kt1;
+
+/* Loop on triangles KT2 containing N1. */
+
+L16:
+ kt2 = ltri[i2 + 3 + kt1 * 6];
+ if (kt2 != 0) {
+
+/* Append KT2 to N1's triangle list. */
+
+ lptr[lp] = *lnew;
+ lp = *lnew;
+ listc[lp] = kt2;
+ ++(*lnew);
+
+/* Set KT1 to KT2 and update (I1,I2,I3) such that */
+/* LTRI(I1,KT1) = N1. */
+
+ kt1 = kt2;
+ if (ltri[kt1 * 6 + 1] == n1) {
+ i1 = 1;
+ i2 = 2;
+ i3 = 3;
+ } else if (ltri[kt1 * 6 + 2] == n1) {
+ i1 = 2;
+ i2 = 3;
+ i3 = 1;
+ } else {
+ i1 = 3;
+ i2 = 1;
+ i3 = 2;
+ }
+ goto L16;
+ }
+
+/* Store the saved first-triangle pointer in LPTR(LP), set */
+/* N1 to the next boundary node, test for termination, */
+/* and permute the indexes: the last triangle containing */
+/* a boundary node is the first triangle containing the */
+/* next boundary node. */
+
+ lptr[lp] = lpn;
+ n1 = ltri[i3 + kt1 * 6];
+ if (n1 != n0) {
+ i4 = i3;
+ i3 = i2;
+ i2 = i1;
+ i1 = i4;
+ goto L15;
+ }
+
+/* No errors encountered. */
+
+L20:
+ *ier = 0;
+ return 0;
+
+/* N < 3. */
+
+L21:
+ *ier = 1;
+ return 0;
+
+/* Insufficient space reserved for LTRI. */
+
+L22:
+ *ier = 2;
+ return 0;
+
+/* Error flag returned by CIRCUM: KT indexes a null triangle. */
+
+L23:
+ *ier = 3;
+ return 0;
+} /* crlist_ */
+
+/* Subroutine */ int delarc_(int *n, int *io1, int *io2, int *
+ list, int *lptr, int *lend, int *lnew, int *ier)
+{
+ /* System generated locals */
+ int i__1;
+
+ /* Local variables */
+ static int n1, n2, n3, lp, lph, lpl;
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/17/96 */
+
+/* This subroutine deletes a boundary arc from a triangula- */
+/* tion. It may be used to remove a null triangle from the */
+/* convex hull boundary. Note, however, that if the union of */
+/* triangles is rendered nonconvex, Subroutines DELNOD, EDGE, */
+/* and TRFIND (and hence ADDNOD) may fail. Also, Function */
+/* NEARND should not be called following an arc deletion. */
+
+/* This routine is identical to the similarly named routine */
+/* in TRIPACK. */
+
+
+/* On input: */
+
+/* N = Number of nodes in the triangulation. N .GE. 4. */
+
+/* IO1,IO2 = Indexes (in the range 1 to N) of a pair of */
+/* adjacent boundary nodes defining the arc */
+/* to be removed. */
+
+/* The above parameters are not altered by this routine. */
+
+/* LIST,LPTR,LEND,LNEW = Triangulation data structure */
+/* created by Subroutine TRMESH. */
+
+/* On output: */
+
+/* LIST,LPTR,LEND,LNEW = Data structure updated with */
+/* the removal of arc IO1-IO2 */
+/* unless IER > 0. */
+
+/* IER = Error indicator: */
+/* IER = 0 if no errors were encountered. */
+/* IER = 1 if N, IO1, or IO2 is outside its valid */
+/* range, or IO1 = IO2. */
+/* IER = 2 if IO1-IO2 is not a boundary arc. */
+/* IER = 3 if the node opposite IO1-IO2 is al- */
+/* ready a boundary node, and thus IO1 */
+/* or IO2 has only two neighbors or a */
+/* deletion would result in two triangu- */
+/* lations sharing a single node. */
+/* IER = 4 if one of the nodes is a neighbor of */
+/* the other, but not vice versa, imply- */
+/* ing an invalid triangulation data */
+/* structure. */
+
+/* Module required by DELARC: DELNB, LSTPTR */
+
+/* Intrinsic function called by DELARC: ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* LP = LIST pointer */
+/* LPH = LIST pointer or flag returned by DELNB */
+/* LPL = Pointer to the last neighbor of N1, N2, or N3 */
+/* N1,N2,N3 = Nodal indexes of a triangle such that N1->N2 */
+/* is the directed boundary edge associated */
+/* with IO1-IO2 */
+
+ /* Parameter adjustments */
+ --lend;
+ --list;
+ --lptr;
+
+ /* Function Body */
+ n1 = *io1;
+ n2 = *io2;
+
+/* Test for errors, and set N1->N2 to the directed boundary */
+/* edge associated with IO1-IO2: (N1,N2,N3) is a triangle */
+/* for some N3. */
+
+ if (*n < 4 || n1 < 1 || n1 > *n || n2 < 1 || n2 > *n || n1 == n2) {
+ *ier = 1;
+ return 0;
+ }
+
+ lpl = lend[n2];
+ if (-list[lpl] != n1) {
+ n1 = n2;
+ n2 = *io1;
+ lpl = lend[n2];
+ if (-list[lpl] != n1) {
+ *ier = 2;
+ return 0;
+ }
+ }
+
+/* Set N3 to the node opposite N1->N2 (the second neighbor */
+/* of N1), and test for error 3 (N3 already a boundary */
+/* node). */
+
+ lpl = lend[n1];
+ lp = lptr[lpl];
+ lp = lptr[lp];
+ n3 = (i__1 = list[lp], abs(i__1));
+ lpl = lend[n3];
+ if (list[lpl] <= 0) {
+ *ier = 3;
+ return 0;
+ }
+
+/* Delete N2 as a neighbor of N1, making N3 the first */
+/* neighbor, and test for error 4 (N2 not a neighbor */
+/* of N1). Note that previously computed pointers may */
+/* no longer be valid following the call to DELNB. */
+
+ delnb_(&n1, &n2, n, &list[1], &lptr[1], &lend[1], lnew, &lph);
+ if (lph < 0) {
+ *ier = 4;
+ return 0;
+ }
+
+/* Delete N1 as a neighbor of N2, making N3 the new last */
+/* neighbor. */
+
+ delnb_(&n2, &n1, n, &list[1], &lptr[1], &lend[1], lnew, &lph);
+
+/* Make N3 a boundary node with first neighbor N2 and last */
+/* neighbor N1. */
+
+ lp = lstptr_(&lend[n3], &n1, &list[1], &lptr[1]);
+ lend[n3] = lp;
+ list[lp] = -n1;
+
+/* No errors encountered. */
+
+ *ier = 0;
+ return 0;
+} /* delarc_ */
+
+/* Subroutine */ int delnb_(int *n0, int *nb, int *n, int *
+ list, int *lptr, int *lend, int *lnew, int *lph)
+{
+ /* System generated locals */
+ int i__1;
+
+ /* Local variables */
+ static int i__, lp, nn, lpb, lpl, lpp, lnw;
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/29/98 */
+
+/* This subroutine deletes a neighbor NB from the adjacency */
+/* list of node N0 (but N0 is not deleted from the adjacency */
+/* list of NB) and, if NB is a boundary node, makes N0 a */
+/* boundary node. For pointer (LIST index) LPH to NB as a */
+/* neighbor of N0, the empty LIST,LPTR location LPH is filled */
+/* in with the values at LNEW-1, pointer LNEW-1 (in LPTR and */
+/* possibly in LEND) is changed to LPH, and LNEW is decremen- */
+/* ted. This requires a search of LEND and LPTR entailing an */
+/* expected operation count of O(N). */
+
+/* This routine is identical to the similarly named routine */
+/* in TRIPACK. */
+
+
+/* On input: */
+
+/* N0,NB = Indexes, in the range 1 to N, of a pair of */
+/* nodes such that NB is a neighbor of N0. */
+/* (N0 need not be a neighbor of NB.) */
+
+/* N = Number of nodes in the triangulation. N .GE. 3. */
+
+/* The above parameters are not altered by this routine. */
+
+/* LIST,LPTR,LEND,LNEW = Data structure defining the */
+/* triangulation. */
+
+/* On output: */
+
+/* LIST,LPTR,LEND,LNEW = Data structure updated with */
+/* the removal of NB from the ad- */
+/* jacency list of N0 unless */
+/* LPH < 0. */
+
+/* LPH = List pointer to the hole (NB as a neighbor of */
+/* N0) filled in by the values at LNEW-1 or error */
+/* indicator: */
+/* LPH > 0 if no errors were encountered. */
+/* LPH = -1 if N0, NB, or N is outside its valid */
+/* range. */
+/* LPH = -2 if NB is not a neighbor of N0. */
+
+/* Modules required by DELNB: None */
+
+/* Intrinsic function called by DELNB: ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* I = DO-loop index */
+/* LNW = LNEW-1 (output value of LNEW) */
+/* LP = LIST pointer of the last neighbor of NB */
+/* LPB = Pointer to NB as a neighbor of N0 */
+/* LPL = Pointer to the last neighbor of N0 */
+/* LPP = Pointer to the neighbor of N0 that precedes NB */
+/* NN = Local copy of N */
+
+ /* Parameter adjustments */
+ --lend;
+ --list;
+ --lptr;
+
+ /* Function Body */
+ nn = *n;
+
+/* Test for error 1. */
+
+ if (*n0 < 1 || *n0 > nn || *nb < 1 || *nb > nn || nn < 3) {
+ *lph = -1;
+ return 0;
+ }
+
+/* Find pointers to neighbors of N0: */
+
+/* LPL points to the last neighbor, */
+/* LPP points to the neighbor NP preceding NB, and */
+/* LPB points to NB. */
+
+ lpl = lend[*n0];
+ lpp = lpl;
+ lpb = lptr[lpp];
+L1:
+ if (list[lpb] == *nb) {
+ goto L2;
+ }
+ lpp = lpb;
+ lpb = lptr[lpp];
+ if (lpb != lpl) {
+ goto L1;
+ }
+
+/* Test for error 2 (NB not found). */
+
+ if ((i__1 = list[lpb], abs(i__1)) != *nb) {
+ *lph = -2;
+ return 0;
+ }
+
+/* NB is the last neighbor of N0. Make NP the new last */
+/* neighbor and, if NB is a boundary node, then make N0 */
+/* a boundary node. */
+
+ lend[*n0] = lpp;
+ lp = lend[*nb];
+ if (list[lp] < 0) {
+ list[lpp] = -list[lpp];
+ }
+ goto L3;
+
+/* NB is not the last neighbor of N0. If NB is a boundary */
+/* node and N0 is not, then make N0 a boundary node with */
+/* last neighbor NP. */
+
+L2:
+ lp = lend[*nb];
+ if (list[lp] < 0 && list[lpl] > 0) {
+ lend[*n0] = lpp;
+ list[lpp] = -list[lpp];
+ }
+
+/* Update LPTR so that the neighbor following NB now fol- */
+/* lows NP, and fill in the hole at location LPB. */
+
+L3:
+ lptr[lpp] = lptr[lpb];
+ lnw = *lnew - 1;
+ list[lpb] = list[lnw];
+ lptr[lpb] = lptr[lnw];
+ for (i__ = nn; i__ >= 1; --i__) {
+ if (lend[i__] == lnw) {
+ lend[i__] = lpb;
+ goto L5;
+ }
+/* L4: */
+ }
+
+L5:
+ i__1 = lnw - 1;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ if (lptr[i__] == lnw) {
+ lptr[i__] = lpb;
+ }
+/* L6: */
+ }
+
+/* No errors encountered. */
+
+ *lnew = lnw;
+ *lph = lpb;
+ return 0;
+} /* delnb_ */
+
+/* Subroutine */ int delnod_(int *k, int *n, double *x,
+ double *y, double *z__, int *list, int *lptr, int
+ *lend, int *lnew, int *lwk, int *iwk, int *ier)
+{
+ /* System generated locals */
+ int i__1;
+
+ /* Local variables */
+ static int i__, j, n1, n2;
+ static double x1, x2, y11, y2, z1, z2;
+ static int nl, lp, nn, nr;
+ static double xl, yl, zl, xr, yr, zr;
+ static int nnb, lp21, lpf, lph, lpl, lpn, iwl, nit, lnw, lpl2;
+ static int bdry;
+ static int ierr, lwkl;
+ static int nfrst;
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 11/30/99 */
+
+/* This subroutine deletes node K (along with all arcs */
+/* incident on node K) from a triangulation of N nodes on the */
+/* unit sphere, and inserts arcs as necessary to produce a */
+/* triangulation of the remaining N-1 nodes. If a Delaunay */
+/* triangulation is input, a Delaunay triangulation will */
+/* result, and thus, DELNOD reverses the effect of a call to */
+/* Subroutine ADDNOD. */
+
+
+/* On input: */
+
+/* K = Index (for X, Y, and Z) of the node to be */
+/* deleted. 1 .LE. K .LE. N. */
+
+/* K is not altered by this routine. */
+
+/* N = Number of nodes in the triangulation on input. */
+/* N .GE. 4. Note that N will be decremented */
+/* following the deletion. */
+
+/* X,Y,Z = Arrays of length N containing the Cartesian */
+/* coordinates of the nodes in the triangula- */
+/* tion. */
+
+/* LIST,LPTR,LEND,LNEW = Data structure defining the */
+/* triangulation. Refer to Sub- */
+/* routine TRMESH. */
+
+/* LWK = Number of columns reserved for IWK. LWK must */
+/* be at least NNB-3, where NNB is the number of */
+/* neighbors of node K, including an extra */
+/* pseudo-node if K is a boundary node. */
+
+/* IWK = int work array dimensioned 2 by LWK (or */
+/* array of length .GE. 2*LWK). */
+
+/* On output: */
+
+/* N = Number of nodes in the triangulation on output. */
+/* The input value is decremented unless 1 .LE. IER */
+/* .LE. 4. */
+
+/* X,Y,Z = Updated arrays containing nodal coordinates */
+/* (with elements K+1,...,N+1 shifted up one */
+/* position, thus overwriting element K) unless */
+/* 1 .LE. IER .LE. 4. */
+
+/* LIST,LPTR,LEND,LNEW = Updated triangulation data */
+/* structure reflecting the dele- */
+/* tion unless 1 .LE. IER .LE. 4. */
+/* Note that the data structure */
+/* may have been altered if IER > */
+/* 3. */
+
+/* LWK = Number of IWK columns required unless IER = 1 */
+/* or IER = 3. */
+
+/* IWK = Indexes of the endpoints of the new arcs added */
+/* unless LWK = 0 or 1 .LE. IER .LE. 4. (Arcs */
+/* are associated with columns, or pairs of */
+/* adjacent elements if IWK is declared as a */
+/* singly-subscripted array.) */
+
+/* IER = Error indicator: */
+/* IER = 0 if no errors were encountered. */
+/* IER = 1 if K or N is outside its valid range */
+/* or LWK < 0 on input. */
+/* IER = 2 if more space is required in IWK. */
+/* Refer to LWK. */
+/* IER = 3 if the triangulation data structure is */
+/* invalid on input. */
+/* IER = 4 if K indexes an interior node with */
+/* four or more neighbors, none of which */
+/* can be swapped out due to collineari- */
+/* ty, and K cannot therefore be deleted. */
+/* IER = 5 if an error flag (other than IER = 1) */
+/* was returned by OPTIM. An error */
+/* message is written to the standard */
+/* output unit in this case. */
+/* IER = 6 if error flag 1 was returned by OPTIM. */
+/* This is not necessarily an error, but */
+/* the arcs may not be optimal. */
+
+/* Note that the deletion may result in all remaining nodes */
+/* being collinear. This situation is not flagged. */
+
+/* Modules required by DELNOD: DELNB, LEFT, LSTPTR, NBCNT, */
+/* OPTIM, SWAP, SWPTST */
+
+/* Intrinsic function called by DELNOD: ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* BDRY = Logical variable with value TRUE iff N1 is a */
+/* boundary node */
+/* I,J = DO-loop indexes */
+/* IERR = Error flag returned by OPTIM */
+/* IWL = Number of IWK columns containing arcs */
+/* LNW = Local copy of LNEW */
+/* LP = LIST pointer */
+/* LP21 = LIST pointer returned by SWAP */
+/* LPF,LPL = Pointers to the first and last neighbors of N1 */
+/* LPH = Pointer (or flag) returned by DELNB */
+/* LPL2 = Pointer to the last neighbor of N2 */
+/* LPN = Pointer to a neighbor of N1 */
+/* LWKL = Input value of LWK */
+/* N1 = Local copy of K */
+/* N2 = Neighbor of N1 */
+/* NFRST = First neighbor of N1: LIST(LPF) */
+/* NIT = Number of iterations in OPTIM */
+/* NR,NL = Neighbors of N1 preceding (to the right of) and */
+/* following (to the left of) N2, respectively */
+/* NN = Number of nodes in the triangulation */
+/* NNB = Number of neighbors of N1 (including a pseudo- */
+/* node representing the boundary if N1 is a */
+/* boundary node) */
+/* X1,Y1,Z1 = Coordinates of N1 */
+/* X2,Y2,Z2 = Coordinates of N2 */
+/* XL,YL,ZL = Coordinates of NL */
+/* XR,YR,ZR = Coordinates of NR */
+
+
+/* Set N1 to K and NNB to the number of neighbors of N1 (plus */
+/* one if N1 is a boundary node), and test for errors. LPF */
+/* and LPL are LIST indexes of the first and last neighbors */
+/* of N1, IWL is the number of IWK columns containing arcs, */
+/* and BDRY is TRUE iff N1 is a boundary node. */
+
+ /* Parameter adjustments */
+ iwk -= 3;
+ --lend;
+ --lptr;
+ --list;
+ --z__;
+ --y;
+ --x;
+
+ /* Function Body */
+ n1 = *k;
+ nn = *n;
+ if (n1 < 1 || n1 > nn || nn < 4 || *lwk < 0) {
+ goto L21;
+ }
+ lpl = lend[n1];
+ lpf = lptr[lpl];
+ nnb = nbcnt_(&lpl, &lptr[1]);
+ bdry = list[lpl] < 0;
+ if (bdry) {
+ ++nnb;
+ }
+ if (nnb < 3) {
+ goto L23;
+ }
+ lwkl = *lwk;
+ *lwk = nnb - 3;
+ if (lwkl < *lwk) {
+ goto L22;
+ }
+ iwl = 0;
+ if (nnb == 3) {
+ goto L3;
+ }
+
+/* Initialize for loop on arcs N1-N2 for neighbors N2 of N1, */
+/* beginning with the second neighbor. NR and NL are the */
+/* neighbors preceding and following N2, respectively, and */
+/* LP indexes NL. The loop is exited when all possible */
+/* swaps have been applied to arcs incident on N1. */
+
+ x1 = x[n1];
+ y11 = y[n1];
+ z1 = z__[n1];
+ nfrst = list[lpf];
+ nr = nfrst;
+ xr = x[nr];
+ yr = y[nr];
+ zr = z__[nr];
+ lp = lptr[lpf];
+ n2 = list[lp];
+ x2 = x[n2];
+ y2 = y[n2];
+ z2 = z__[n2];
+ lp = lptr[lp];
+
+/* Top of loop: set NL to the neighbor following N2. */
+
+L1:
+ nl = (i__1 = list[lp], abs(i__1));
+ if (nl == nfrst && bdry) {
+ goto L3;
+ }
+ xl = x[nl];
+ yl = y[nl];
+ zl = z__[nl];
+
+/* Test for a convex quadrilateral. To avoid an incorrect */
+/* test caused by collinearity, use the fact that if N1 */
+/* is a boundary node, then N1 LEFT NR->NL and if N2 is */
+/* a boundary node, then N2 LEFT NL->NR. */
+
+ lpl2 = lend[n2];
+ if (! ((bdry || left_(&xr, &yr, &zr, &xl, &yl, &zl, &x1, &y11, &z1)) && (
+ list[lpl2] < 0 || left_(&xl, &yl, &zl, &xr, &yr, &zr, &x2, &y2, &
+ z2)))) {
+
+/* Nonconvex quadrilateral -- no swap is possible. */
+
+ nr = n2;
+ xr = x2;
+ yr = y2;
+ zr = z2;
+ goto L2;
+ }
+
+/* The quadrilateral defined by adjacent triangles */
+/* (N1,N2,NL) and (N2,N1,NR) is convex. Swap in */
+/* NL-NR and store it in IWK unless NL and NR are */
+/* already adjacent, in which case the swap is not */
+/* possible. Indexes larger than N1 must be decremented */
+/* since N1 will be deleted from X, Y, and Z. */
+
+ swap_(&nl, &nr, &n1, &n2, &list[1], &lptr[1], &lend[1], &lp21);
+ if (lp21 == 0) {
+ nr = n2;
+ xr = x2;
+ yr = y2;
+ zr = z2;
+ goto L2;
+ }
+ ++iwl;
+ if (nl <= n1) {
+ iwk[(iwl << 1) + 1] = nl;
+ } else {
+ iwk[(iwl << 1) + 1] = nl - 1;
+ }
+ if (nr <= n1) {
+ iwk[(iwl << 1) + 2] = nr;
+ } else {
+ iwk[(iwl << 1) + 2] = nr - 1;
+ }
+
+/* Recompute the LIST indexes and NFRST, and decrement NNB. */
+
+ lpl = lend[n1];
+ --nnb;
+ if (nnb == 3) {
+ goto L3;
+ }
+ lpf = lptr[lpl];
+ nfrst = list[lpf];
+ lp = lstptr_(&lpl, &nl, &list[1], &lptr[1]);
+ if (nr == nfrst) {
+ goto L2;
+ }
+
+/* NR is not the first neighbor of N1. */
+/* Back up and test N1-NR for a swap again: Set N2 to */
+/* NR and NR to the previous neighbor of N1 -- the */
+/* neighbor of NR which follows N1. LP21 points to NL */
+/* as a neighbor of NR. */
+
+ n2 = nr;
+ x2 = xr;
+ y2 = yr;
+ z2 = zr;
+ lp21 = lptr[lp21];
+ lp21 = lptr[lp21];
+ nr = (i__1 = list[lp21], abs(i__1));
+ xr = x[nr];
+ yr = y[nr];
+ zr = z__[nr];
+ goto L1;
+
+/* Bottom of loop -- test for termination of loop. */
+
+L2:
+ if (n2 == nfrst) {
+ goto L3;
+ }
+ n2 = nl;
+ x2 = xl;
+ y2 = yl;
+ z2 = zl;
+ lp = lptr[lp];
+ goto L1;
+
+/* Delete N1 and all its incident arcs. If N1 is an interior */
+/* node and either NNB > 3 or NNB = 3 and N2 LEFT NR->NL, */
+/* then N1 must be separated from its neighbors by a plane */
+/* containing the origin -- its removal reverses the effect */
+/* of a call to COVSPH, and all its neighbors become */
+/* boundary nodes. This is achieved by treating it as if */
+/* it were a boundary node (setting BDRY to TRUE, changing */
+/* a sign in LIST, and incrementing NNB). */
+
+L3:
+ if (! bdry) {
+ if (nnb > 3) {
+ bdry = TRUE_;
+ } else {
+ lpf = lptr[lpl];
+ nr = list[lpf];
+ lp = lptr[lpf];
+ n2 = list[lp];
+ nl = list[lpl];
+ bdry = left_(&x[nr], &y[nr], &z__[nr], &x[nl], &y[nl], &z__[nl], &
+ x[n2], &y[n2], &z__[n2]);
+ }
+ if (bdry) {
+
+/* IF a boundary node already exists, then N1 and its */
+/* neighbors cannot be converted to boundary nodes. */
+/* (They must be collinear.) This is a problem if */
+/* NNB > 3. */
+
+ i__1 = nn;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ if (list[lend[i__]] < 0) {
+ bdry = FALSE_;
+ goto L5;
+ }
+/* L4: */
+ }
+ list[lpl] = -list[lpl];
+ ++nnb;
+ }
+ }
+L5:
+ if (! bdry && nnb > 3) {
+ goto L24;
+ }
+
+/* Initialize for loop on neighbors. LPL points to the last */
+/* neighbor of N1. LNEW is stored in local variable LNW. */
+
+ lp = lpl;
+ lnw = *lnew;
+
+/* Loop on neighbors N2 of N1, beginning with the first. */
+
+L6:
+ lp = lptr[lp];
+ n2 = (i__1 = list[lp], abs(i__1));
+ delnb_(&n2, &n1, n, &list[1], &lptr[1], &lend[1], &lnw, &lph);
+ if (lph < 0) {
+ goto L23;
+ }
+
+/* LP and LPL may require alteration. */
+
+ if (lpl == lnw) {
+ lpl = lph;
+ }
+ if (lp == lnw) {
+ lp = lph;
+ }
+ if (lp != lpl) {
+ goto L6;
+ }
+
+/* Delete N1 from X, Y, Z, and LEND, and remove its adjacency */
+/* list from LIST and LPTR. LIST entries (nodal indexes) */
+/* which are larger than N1 must be decremented. */
+
+ --nn;
+ if (n1 > nn) {
+ goto L9;
+ }
+ i__1 = nn;
+ for (i__ = n1; i__ <= i__1; ++i__) {
+ x[i__] = x[i__ + 1];
+ y[i__] = y[i__ + 1];
+ z__[i__] = z__[i__ + 1];
+ lend[i__] = lend[i__ + 1];
+/* L7: */
+ }
+
+ i__1 = lnw - 1;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ if (list[i__] > n1) {
+ --list[i__];
+ }
+ if (list[i__] < -n1) {
+ ++list[i__];
+ }
+/* L8: */
+ }
+
+/* For LPN = first to last neighbors of N1, delete the */
+/* preceding neighbor (indexed by LP). */
+
+/* Each empty LIST,LPTR location LP is filled in with the */
+/* values at LNW-1, and LNW is decremented. All pointers */
+/* (including those in LPTR and LEND) with value LNW-1 */
+/* must be changed to LP. */
+
+/* LPL points to the last neighbor of N1. */
+
+L9:
+ if (bdry) {
+ --nnb;
+ }
+ lpn = lpl;
+ i__1 = nnb;
+ for (j = 1; j <= i__1; ++j) {
+ --lnw;
+ lp = lpn;
+ lpn = lptr[lp];
+ list[lp] = list[lnw];
+ lptr[lp] = lptr[lnw];
+ if (lptr[lpn] == lnw) {
+ lptr[lpn] = lp;
+ }
+ if (lpn == lnw) {
+ lpn = lp;
+ }
+ for (i__ = nn; i__ >= 1; --i__) {
+ if (lend[i__] == lnw) {
+ lend[i__] = lp;
+ goto L11;
+ }
+/* L10: */
+ }
+
+L11:
+ for (i__ = lnw - 1; i__ >= 1; --i__) {
+ if (lptr[i__] == lnw) {
+ lptr[i__] = lp;
+ }
+/* L12: */
+ }
+/* L13: */
+ }
+
+/* Update N and LNEW, and optimize the patch of triangles */
+/* containing K (on input) by applying swaps to the arcs */
+/* in IWK. */
+
+ *n = nn;
+ *lnew = lnw;
+ if (iwl > 0) {
+ nit = iwl << 2;
+ optim_(&x[1], &y[1], &z__[1], &iwl, &list[1], &lptr[1], &lend[1], &
+ nit, &iwk[3], &ierr);
+ if (ierr != 0 && ierr != 1) {
+ goto L25;
+ }
+ if (ierr == 1) {
+ goto L26;
+ }
+ }
+
+/* Successful termination. */
+
+ *ier = 0;
+ return 0;
+
+/* Invalid input parameter. */
+
+L21:
+ *ier = 1;
+ return 0;
+
+/* Insufficient space reserved for IWK. */
+
+L22:
+ *ier = 2;
+ return 0;
+
+/* Invalid triangulation data structure. NNB < 3 on input or */
+/* N2 is a neighbor of N1 but N1 is not a neighbor of N2. */
+
+L23:
+ *ier = 3;
+ return 0;
+
+/* N1 is interior but NNB could not be reduced to 3. */
+
+L24:
+ *ier = 4;
+ return 0;
+
+/* Error flag (other than 1) returned by OPTIM. */
+
+L25:
+ *ier = 5;
+ return 0;
+
+/* Error flag 1 returned by OPTIM. */
+
+L26:
+ *ier = 6;
+ return 0;
+} /* delnod_ */
+
+/* Subroutine */ int edge_(int *in1, int *in2, double *x,
+ double *y, double *z__, int *lwk, int *iwk, int *
+ list, int *lptr, int *lend, int *ier)
+{
+ /* System generated locals */
+ int i__1;
+
+ /* Local variables */
+ static int i__, n0, n1, n2;
+ static double x0, x1, x2, y00, y11, y2, z0, z1, z2;
+ static int nl, lp, nr;
+ static double dp12;
+ static int lp21, iwc, iwf, lft, lpl, iwl, nit;
+ static double dp1l, dp2l, dp1r, dp2r;
+ static int ierr;
+ static int next, iwcp1, n1lst, iwend;
+ static int n1frst;
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/30/98 */
+
+/* Given a triangulation of N nodes and a pair of nodal */
+/* indexes IN1 and IN2, this routine swaps arcs as necessary */
+/* to force IN1 and IN2 to be adjacent. Only arcs which */
+/* intersect IN1-IN2 are swapped out. If a Delaunay triangu- */
+/* lation is input, the resulting triangulation is as close */
+/* as possible to a Delaunay triangulation in the sense that */
+/* all arcs other than IN1-IN2 are locally optimal. */
+
+/* A sequence of calls to EDGE may be used to force the */
+/* presence of a set of edges defining the boundary of a non- */
+/* convex and/or multiply connected region, or to introduce */
+/* barriers into the triangulation. Note that Subroutine */
+/* GETNP will not necessarily return closest nodes if the */
+/* triangulation has been constrained by a call to EDGE. */
+/* However, this is appropriate in some applications, such */
+/* as triangle-based interpolation on a nonconvex domain. */
+
+
+/* On input: */
+
+/* IN1,IN2 = Indexes (of X, Y, and Z) in the range 1 to */
+/* N defining a pair of nodes to be connected */
+/* by an arc. */
+
+/* X,Y,Z = Arrays of length N containing the Cartesian */
+/* coordinates of the nodes. */
+
+/* The above parameters are not altered by this routine. */
+
+/* LWK = Number of columns reserved for IWK. This must */
+/* be at least NI -- the number of arcs that */
+/* intersect IN1-IN2. (NI is bounded by N-3.) */
+
+/* IWK = int work array of length at least 2*LWK. */
+
+/* LIST,LPTR,LEND = Data structure defining the trian- */
+/* gulation. Refer to Subroutine */
+/* TRMESH. */
+
+/* On output: */
+
+/* LWK = Number of arcs which intersect IN1-IN2 (but */
+/* not more than the input value of LWK) unless */
+/* IER = 1 or IER = 3. LWK = 0 if and only if */
+/* IN1 and IN2 were adjacent (or LWK=0) on input. */
+
+/* IWK = Array containing the indexes of the endpoints */
+/* of the new arcs other than IN1-IN2 unless */
+/* IER > 0 or LWK = 0. New arcs to the left of */
+/* IN1->IN2 are stored in the first K-1 columns */
+/* (left portion of IWK), column K contains */
+/* zeros, and new arcs to the right of IN1->IN2 */
+/* occupy columns K+1,...,LWK. (K can be deter- */
+/* mined by searching IWK for the zeros.) */
+
+/* LIST,LPTR,LEND = Data structure updated if necessary */
+/* to reflect the presence of an arc */
+/* connecting IN1 and IN2 unless IER > */
+/* 0. The data structure has been */
+/* altered if IER >= 4. */
+
+/* IER = Error indicator: */
+/* IER = 0 if no errors were encountered. */
+/* IER = 1 if IN1 < 1, IN2 < 1, IN1 = IN2, */
+/* or LWK < 0 on input. */
+/* IER = 2 if more space is required in IWK. */
+/* Refer to LWK. */
+/* IER = 3 if IN1 and IN2 could not be connected */
+/* due to either an invalid data struc- */
+/* ture or collinear nodes (and floating */
+/* point error). */
+/* IER = 4 if an error flag other than IER = 1 */
+/* was returned by OPTIM. */
+/* IER = 5 if error flag 1 was returned by OPTIM. */
+/* This is not necessarily an error, but */
+/* the arcs other than IN1-IN2 may not */
+/* be optimal. */
+
+/* An error message is written to the standard output unit */
+/* in the case of IER = 3 or IER = 4. */
+
+/* Modules required by EDGE: LEFT, LSTPTR, OPTIM, SWAP, */
+/* SWPTST */
+
+/* Intrinsic function called by EDGE: ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* DPij = Dot product <Ni,Nj> */
+/* I = DO-loop index and column index for IWK */
+/* IERR = Error flag returned by Subroutine OPTIM */
+/* IWC = IWK index between IWF and IWL -- NL->NR is */
+/* stored in IWK(1,IWC)->IWK(2,IWC) */
+/* IWCP1 = IWC + 1 */
+/* IWEND = Input or output value of LWK */
+/* IWF = IWK (column) index of the first (leftmost) arc */
+/* which intersects IN1->IN2 */
+/* IWL = IWK (column) index of the last (rightmost) are */
+/* which intersects IN1->IN2 */
+/* LFT = Flag used to determine if a swap results in the */
+/* new arc intersecting IN1-IN2 -- LFT = 0 iff */
+/* N0 = IN1, LFT = -1 implies N0 LEFT IN1->IN2, */
+/* and LFT = 1 implies N0 LEFT IN2->IN1 */
+/* LP = List pointer (index for LIST and LPTR) */
+/* LP21 = Unused parameter returned by SWAP */
+/* LPL = Pointer to the last neighbor of IN1 or NL */
+/* N0 = Neighbor of N1 or node opposite NR->NL */
+/* N1,N2 = Local copies of IN1 and IN2 */
+/* N1FRST = First neighbor of IN1 */
+/* N1LST = (Signed) last neighbor of IN1 */
+/* NEXT = Node opposite NL->NR */
+/* NIT = Flag or number of iterations employed by OPTIM */
+/* NL,NR = Endpoints of an arc which intersects IN1-IN2 */
+/* with NL LEFT IN1->IN2 */
+/* X0,Y0,Z0 = Coordinates of N0 */
+/* X1,Y1,Z1 = Coordinates of IN1 */
+/* X2,Y2,Z2 = Coordinates of IN2 */
+
+
+/* Store IN1, IN2, and LWK in local variables and test for */
+/* errors. */
+
+ /* Parameter adjustments */
+ --lend;
+ --lptr;
+ --list;
+ iwk -= 3;
+ --z__;
+ --y;
+ --x;
+
+ /* Function Body */
+ n1 = *in1;
+ n2 = *in2;
+ iwend = *lwk;
+ if (n1 < 1 || n2 < 1 || n1 == n2 || iwend < 0) {
+ goto L31;
+ }
+
+/* Test for N2 as a neighbor of N1. LPL points to the last */
+/* neighbor of N1. */
+
+ lpl = lend[n1];
+ n0 = (i__1 = list[lpl], abs(i__1));
+ lp = lpl;
+L1:
+ if (n0 == n2) {
+ goto L30;
+ }
+ lp = lptr[lp];
+ n0 = list[lp];
+ if (lp != lpl) {
+ goto L1;
+ }
+
+/* Initialize parameters. */
+
+ iwl = 0;
+ nit = 0;
+
+/* Store the coordinates of N1 and N2. */
+
+L2:
+ x1 = x[n1];
+ y11 = y[n1];
+ z1 = z__[n1];
+ x2 = x[n2];
+ y2 = y[n2];
+ z2 = z__[n2];
+
+/* Set NR and NL to adjacent neighbors of N1 such that */
+/* NR LEFT N2->N1 and NL LEFT N1->N2, */
+/* (NR Forward N1->N2 or NL Forward N1->N2), and */
+/* (NR Forward N2->N1 or NL Forward N2->N1). */
+
+/* Initialization: Set N1FRST and N1LST to the first and */
+/* (signed) last neighbors of N1, respectively, and */
+/* initialize NL to N1FRST. */
+
+ lpl = lend[n1];
+ n1lst = list[lpl];
+ lp = lptr[lpl];
+ n1frst = list[lp];
+ nl = n1frst;
+ if (n1lst < 0) {
+ goto L4;
+ }
+
+/* N1 is an interior node. Set NL to the first candidate */
+/* for NR (NL LEFT N2->N1). */
+
+L3:
+ if (left_(&x2, &y2, &z2, &x1, &y11, &z1, &x[nl], &y[nl], &z__[nl])) {
+ goto L4;
+ }
+ lp = lptr[lp];
+ nl = list[lp];
+ if (nl != n1frst) {
+ goto L3;
+ }
+
+/* All neighbors of N1 are strictly left of N1->N2. */
+
+ goto L5;
+
+/* NL = LIST(LP) LEFT N2->N1. Set NR to NL and NL to the */
+/* following neighbor of N1. */
+
+L4:
+ nr = nl;
+ lp = lptr[lp];
+ nl = (i__1 = list[lp], abs(i__1));
+ if (left_(&x1, &y11, &z1, &x2, &y2, &z2, &x[nl], &y[nl], &z__[nl])) {
+
+/* NL LEFT N1->N2 and NR LEFT N2->N1. The Forward tests */
+/* are employed to avoid an error associated with */
+/* collinear nodes. */
+
+ dp12 = x1 * x2 + y11 * y2 + z1 * z2;
+ dp1l = x1 * x[nl] + y11 * y[nl] + z1 * z__[nl];
+ dp2l = x2 * x[nl] + y2 * y[nl] + z2 * z__[nl];
+ dp1r = x1 * x[nr] + y11 * y[nr] + z1 * z__[nr];
+ dp2r = x2 * x[nr] + y2 * y[nr] + z2 * z__[nr];
+ if ((dp2l - dp12 * dp1l >= 0. || dp2r - dp12 * dp1r >= 0.) && (dp1l -
+ dp12 * dp2l >= 0. || dp1r - dp12 * dp2r >= 0.)) {
+ goto L6;
+ }
+
+/* NL-NR does not intersect N1-N2. However, there is */
+/* another candidate for the first arc if NL lies on */
+/* the line N1-N2. */
+
+ if (! left_(&x2, &y2, &z2, &x1, &y11, &z1, &x[nl], &y[nl], &z__[nl])) {
+ goto L5;
+ }
+ }
+
+/* Bottom of loop. */
+
+ if (nl != n1frst) {
+ goto L4;
+ }
+
+/* Either the triangulation is invalid or N1-N2 lies on the */
+/* convex hull boundary and an edge NR->NL (opposite N1 and */
+/* intersecting N1-N2) was not found due to floating point */
+/* error. Try interchanging N1 and N2 -- NIT > 0 iff this */
+/* has already been done. */
+
+L5:
+ if (nit > 0) {
+ goto L33;
+ }
+ nit = 1;
+ n1 = n2;
+ n2 = *in1;
+ goto L2;
+
+/* Store the ordered sequence of intersecting edges NL->NR in */
+/* IWK(1,IWL)->IWK(2,IWL). */
+
+L6:
+ ++iwl;
+ if (iwl > iwend) {
+ goto L32;
+ }
+ iwk[(iwl << 1) + 1] = nl;
+ iwk[(iwl << 1) + 2] = nr;
+
+/* Set NEXT to the neighbor of NL which follows NR. */
+
+ lpl = lend[nl];
+ lp = lptr[lpl];
+
+/* Find NR as a neighbor of NL. The search begins with */
+/* the first neighbor. */
+
+L7:
+ if (list[lp] == nr) {
+ goto L8;
+ }
+ lp = lptr[lp];
+ if (lp != lpl) {
+ goto L7;
+ }
+
+/* NR must be the last neighbor, and NL->NR cannot be a */
+/* boundary edge. */
+
+ if (list[lp] != nr) {
+ goto L33;
+ }
+
+/* Set NEXT to the neighbor following NR, and test for */
+/* termination of the store loop. */
+
+L8:
+ lp = lptr[lp];
+ next = (i__1 = list[lp], abs(i__1));
+ if (next == n2) {
+ goto L9;
+ }
+
+/* Set NL or NR to NEXT. */
+
+ if (left_(&x1, &y11, &z1, &x2, &y2, &z2, &x[next], &y[next], &z__[next])) {
+ nl = next;
+ } else {
+ nr = next;
+ }
+ goto L6;
+
+/* IWL is the number of arcs which intersect N1-N2. */
+/* Store LWK. */
+
+L9:
+ *lwk = iwl;
+ iwend = iwl;
+
+/* Initialize for edge swapping loop -- all possible swaps */
+/* are applied (even if the new arc again intersects */
+/* N1-N2), arcs to the left of N1->N2 are stored in the */
+/* left portion of IWK, and arcs to the right are stored in */
+/* the right portion. IWF and IWL index the first and last */
+/* intersecting arcs. */
+
+ iwf = 1;
+
+/* Top of loop -- set N0 to N1 and NL->NR to the first edge. */
+/* IWC points to the arc currently being processed. LFT */
+/* .LE. 0 iff N0 LEFT N1->N2. */
+
+L10:
+ lft = 0;
+ n0 = n1;
+ x0 = x1;
+ y00 = y11;
+ z0 = z1;
+ nl = iwk[(iwf << 1) + 1];
+ nr = iwk[(iwf << 1) + 2];
+ iwc = iwf;
+
+/* Set NEXT to the node opposite NL->NR unless IWC is the */
+/* last arc. */
+
+L11:
+ if (iwc == iwl) {
+ goto L21;
+ }
+ iwcp1 = iwc + 1;
+ next = iwk[(iwcp1 << 1) + 1];
+ if (next != nl) {
+ goto L16;
+ }
+ next = iwk[(iwcp1 << 1) + 2];
+
+/* NEXT RIGHT N1->N2 and IWC .LT. IWL. Test for a possible */
+/* swap. */
+
+ if (! left_(&x0, &y00, &z0, &x[nr], &y[nr], &z__[nr], &x[next], &y[next], &
+ z__[next])) {
+ goto L14;
+ }
+ if (lft >= 0) {
+ goto L12;
+ }
+ if (! left_(&x[nl], &y[nl], &z__[nl], &x0, &y00, &z0, &x[next], &y[next], &
+ z__[next])) {
+ goto L14;
+ }
+
+/* Replace NL->NR with N0->NEXT. */
+
+ swap_(&next, &n0, &nl, &nr, &list[1], &lptr[1], &lend[1], &lp21);
+ iwk[(iwc << 1) + 1] = n0;
+ iwk[(iwc << 1) + 2] = next;
+ goto L15;
+
+/* Swap NL-NR for N0-NEXT, shift columns IWC+1,...,IWL to */
+/* the left, and store N0-NEXT in the right portion of */
+/* IWK. */
+
+L12:
+ swap_(&next, &n0, &nl, &nr, &list[1], &lptr[1], &lend[1], &lp21);
+ i__1 = iwl;
+ for (i__ = iwcp1; i__ <= i__1; ++i__) {
+ iwk[((i__ - 1) << 1) + 1] = iwk[(i__ << 1) + 1];
+ iwk[((i__ - 1) << 1) + 2] = iwk[(i__ << 1) + 2];
+/* L13: */
+ }
+ iwk[(iwl << 1) + 1] = n0;
+ iwk[(iwl << 1) + 2] = next;
+ --iwl;
+ nr = next;
+ goto L11;
+
+/* A swap is not possible. Set N0 to NR. */
+
+L14:
+ n0 = nr;
+ x0 = x[n0];
+ y00 = y[n0];
+ z0 = z__[n0];
+ lft = 1;
+
+/* Advance to the next arc. */
+
+L15:
+ nr = next;
+ ++iwc;
+ goto L11;
+
+/* NEXT LEFT N1->N2, NEXT .NE. N2, and IWC .LT. IWL. */
+/* Test for a possible swap. */
+
+L16:
+ if (! left_(&x[nl], &y[nl], &z__[nl], &x0, &y00, &z0, &x[next], &y[next], &
+ z__[next])) {
+ goto L19;
+ }
+ if (lft <= 0) {
+ goto L17;
+ }
+ if (! left_(&x0, &y00, &z0, &x[nr], &y[nr], &z__[nr], &x[next], &y[next], &
+ z__[next])) {
+ goto L19;
+ }
+
+/* Replace NL->NR with NEXT->N0. */
+
+ swap_(&next, &n0, &nl, &nr, &list[1], &lptr[1], &lend[1], &lp21);
+ iwk[(iwc << 1) + 1] = next;
+ iwk[(iwc << 1) + 2] = n0;
+ goto L20;
+
+/* Swap NL-NR for N0-NEXT, shift columns IWF,...,IWC-1 to */
+/* the right, and store N0-NEXT in the left portion of */
+/* IWK. */
+
+L17:
+ swap_(&next, &n0, &nl, &nr, &list[1], &lptr[1], &lend[1], &lp21);
+ i__1 = iwf;
+ for (i__ = iwc - 1; i__ >= i__1; --i__) {
+ iwk[((i__ + 1) << 1) + 1] = iwk[(i__ << 1) + 1];
+ iwk[((i__ + 1) << 1) + 2] = iwk[(i__ << 1) + 2];
+/* L18: */
+ }
+ iwk[(iwf << 1) + 1] = n0;
+ iwk[(iwf << 1) + 2] = next;
+ ++iwf;
+ goto L20;
+
+/* A swap is not possible. Set N0 to NL. */
+
+L19:
+ n0 = nl;
+ x0 = x[n0];
+ y00 = y[n0];
+ z0 = z__[n0];
+ lft = -1;
+
+/* Advance to the next arc. */
+
+L20:
+ nl = next;
+ ++iwc;
+ goto L11;
+
+/* N2 is opposite NL->NR (IWC = IWL). */
+
+L21:
+ if (n0 == n1) {
+ goto L24;
+ }
+ if (lft < 0) {
+ goto L22;
+ }
+
+/* N0 RIGHT N1->N2. Test for a possible swap. */
+
+ if (! left_(&x0, &y00, &z0, &x[nr], &y[nr], &z__[nr], &x2, &y2, &z2)) {
+ goto L10;
+ }
+
+/* Swap NL-NR for N0-N2 and store N0-N2 in the right */
+/* portion of IWK. */
+
+ swap_(&n2, &n0, &nl, &nr, &list[1], &lptr[1], &lend[1], &lp21);
+ iwk[(iwl << 1) + 1] = n0;
+ iwk[(iwl << 1) + 2] = n2;
+ --iwl;
+ goto L10;
+
+/* N0 LEFT N1->N2. Test for a possible swap. */
+
+L22:
+ if (! left_(&x[nl], &y[nl], &z__[nl], &x0, &y00, &z0, &x2, &y2, &z2)) {
+ goto L10;
+ }
+
+/* Swap NL-NR for N0-N2, shift columns IWF,...,IWL-1 to the */
+/* right, and store N0-N2 in the left portion of IWK. */
+
+ swap_(&n2, &n0, &nl, &nr, &list[1], &lptr[1], &lend[1], &lp21);
+ i__ = iwl;
+L23:
+ iwk[(i__ << 1) + 1] = iwk[((i__ - 1) << 1) + 1];
+ iwk[(i__ << 1) + 2] = iwk[((i__ - 1) << 1) + 2];
+ --i__;
+ if (i__ > iwf) {
+ goto L23;
+ }
+ iwk[(iwf << 1) + 1] = n0;
+ iwk[(iwf << 1) + 2] = n2;
+ ++iwf;
+ goto L10;
+
+/* IWF = IWC = IWL. Swap out the last arc for N1-N2 and */
+/* store zeros in IWK. */
+
+L24:
+ swap_(&n2, &n1, &nl, &nr, &list[1], &lptr[1], &lend[1], &lp21);
+ iwk[(iwc << 1) + 1] = 0;
+ iwk[(iwc << 1) + 2] = 0;
+
+/* Optimization procedure -- */
+
+ *ier = 0;
+ if (iwc > 1) {
+
+/* Optimize the set of new arcs to the left of IN1->IN2. */
+
+ nit = (iwc - 1) << 2;
+ i__1 = iwc - 1;
+ optim_(&x[1], &y[1], &z__[1], &i__1, &list[1], &lptr[1], &lend[1], &
+ nit, &iwk[3], &ierr);
+ if (ierr != 0 && ierr != 1) {
+ goto L34;
+ }
+ if (ierr == 1) {
+ *ier = 5;
+ }
+ }
+ if (iwc < iwend) {
+
+/* Optimize the set of new arcs to the right of IN1->IN2. */
+
+ nit = (iwend - iwc) << 2;
+ i__1 = iwend - iwc;
+ optim_(&x[1], &y[1], &z__[1], &i__1, &list[1], &lptr[1], &lend[1], &
+ nit, &iwk[((iwc + 1) << 1) + 1], &ierr);
+ if (ierr != 0 && ierr != 1) {
+ goto L34;
+ }
+ if (ierr == 1) {
+ goto L35;
+ }
+ }
+ if (*ier == 5) {
+ goto L35;
+ }
+
+/* Successful termination (IER = 0). */
+
+ return 0;
+
+/* IN1 and IN2 were adjacent on input. */
+
+L30:
+ *ier = 0;
+ return 0;
+
+/* Invalid input parameter. */
+
+L31:
+ *ier = 1;
+ return 0;
+
+/* Insufficient space reserved for IWK. */
+
+L32:
+ *ier = 2;
+ return 0;
+
+/* Invalid triangulation data structure or collinear nodes */
+/* on convex hull boundary. */
+
+L33:
+ *ier = 3;
+ return 0;
+
+/* Error flag (other than 1) returned by OPTIM. */
+
+L34:
+ *ier = 4;
+ return 0;
+
+/* Error flag 1 returned by OPTIM. */
+
+L35:
+ *ier = 5;
+ return 0;
+} /* edge_ */
+
+/* Subroutine */ int getnp_(double *x, double *y, double *z__,
+ int *list, int *lptr, int *lend, int *l, int *
+ npts, double *df, int *ier)
+{
+ /* System generated locals */
+ int i__1, i__2;
+
+ /* Local variables */
+ static int i__, n1;
+ static double x1, y11, z1;
+ static int nb, ni, lp, np, lm1;
+ static double dnb, dnp;
+ static int lpl;
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/28/98 */
+
+/* Given a Delaunay triangulation of N nodes on the unit */
+/* sphere and an array NPTS containing the indexes of L-1 */
+/* nodes ordered by angular distance from NPTS(1), this sub- */
+/* routine sets NPTS(L) to the index of the next node in the */
+/* sequence -- the node, other than NPTS(1),...,NPTS(L-1), */
+/* that is closest to NPTS(1). Thus, the ordered sequence */
+/* of K closest nodes to N1 (including N1) may be determined */
+/* by K-1 calls to GETNP with NPTS(1) = N1 and L = 2,3,...,K */
+/* for K .GE. 2. */
+
+/* The algorithm uses the property of a Delaunay triangula- */
+/* tion that the K-th closest node to N1 is a neighbor of one */
+/* of the K-1 closest nodes to N1. */
+
+
+/* On input: */
+
+/* X,Y,Z = Arrays of length N containing the Cartesian */
+/* coordinates of the nodes. */
+
+/* LIST,LPTR,LEND = Triangulation data structure. Re- */
+/* fer to Subroutine TRMESH. */
+
+/* L = Number of nodes in the sequence on output. 2 */
+/* .LE. L .LE. N. */
+
+/* The above parameters are not altered by this routine. */
+
+/* NPTS = Array of length .GE. L containing the indexes */
+/* of the L-1 closest nodes to NPTS(1) in the */
+/* first L-1 locations. */
+
+/* On output: */
+
+/* NPTS = Array updated with the index of the L-th */
+/* closest node to NPTS(1) in position L unless */
+/* IER = 1. */
+
+/* DF = Value of an increasing function (negative cos- */
+/* ine) of the angular distance between NPTS(1) */
+/* and NPTS(L) unless IER = 1. */
+
+/* IER = Error indicator: */
+/* IER = 0 if no errors were encountered. */
+/* IER = 1 if L < 2. */
+
+/* Modules required by GETNP: None */
+
+/* Intrinsic function called by GETNP: ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* DNB,DNP = Negative cosines of the angular distances from */
+/* N1 to NB and to NP, respectively */
+/* I = NPTS index and DO-loop index */
+/* LM1 = L-1 */
+/* LP = LIST pointer of a neighbor of NI */
+/* LPL = Pointer to the last neighbor of NI */
+/* N1 = NPTS(1) */
+/* NB = Neighbor of NI and candidate for NP */
+/* NI = NPTS(I) */
+/* NP = Candidate for NPTS(L) */
+/* X1,Y1,Z1 = Coordinates of N1 */
+
+ /* Parameter adjustments */
+ --x;
+ --y;
+ --z__;
+ --list;
+ --lptr;
+ --lend;
+ --npts;
+
+ /* Function Body */
+ lm1 = *l - 1;
+ if (lm1 < 1) {
+ goto L6;
+ }
+ *ier = 0;
+
+/* Store N1 = NPTS(1) and mark the elements of NPTS. */
+
+ n1 = npts[1];
+ x1 = x[n1];
+ y11 = y[n1];
+ z1 = z__[n1];
+ i__1 = lm1;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ ni = npts[i__];
+ lend[ni] = -lend[ni];
+/* L1: */
+ }
+
+/* Candidates for NP = NPTS(L) are the unmarked neighbors */
+/* of nodes in NPTS. DNP is initially greater than -cos(PI) */
+/* (the maximum distance). */
+
+ dnp = 2.;
+
+/* Loop on nodes NI in NPTS. */
+
+ i__1 = lm1;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ ni = npts[i__];
+ lpl = -lend[ni];
+ lp = lpl;
+
+/* Loop on neighbors NB of NI. */
+
+L2:
+ nb = (i__2 = list[lp], abs(i__2));
+ if (lend[nb] < 0) {
+ goto L3;
+ }
+
+/* NB is an unmarked neighbor of NI. Replace NP if NB is */
+/* closer to N1. */
+
+ dnb = -(x[nb] * x1 + y[nb] * y11 + z__[nb] * z1);
+ if (dnb >= dnp) {
+ goto L3;
+ }
+ np = nb;
+ dnp = dnb;
+L3:
+ lp = lptr[lp];
+ if (lp != lpl) {
+ goto L2;
+ }
+/* L4: */
+ }
+ npts[*l] = np;
+ *df = dnp;
+
+/* Unmark the elements of NPTS. */
+
+ i__1 = lm1;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ ni = npts[i__];
+ lend[ni] = -lend[ni];
+/* L5: */
+ }
+ return 0;
+
+/* L is outside its valid range. */
+
+L6:
+ *ier = 1;
+ return 0;
+} /* getnp_ */
+
+/* Subroutine */ int insert_(int *k, int *lp, int *list, int *
+ lptr, int *lnew)
+{
+ static int lsav;
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/17/96 */
+
+/* This subroutine inserts K as a neighbor of N1 following */
+/* N2, where LP is the LIST pointer of N2 as a neighbor of */
+/* N1. Note that, if N2 is the last neighbor of N1, K will */
+/* become the first neighbor (even if N1 is a boundary node). */
+
+/* This routine is identical to the similarly named routine */
+/* in TRIPACK. */
+
+
+/* On input: */
+
+/* K = Index of the node to be inserted. */
+
+/* LP = LIST pointer of N2 as a neighbor of N1. */
+
+/* The above parameters are not altered by this routine. */
+
+/* LIST,LPTR,LNEW = Data structure defining the trian- */
+/* gulation. Refer to Subroutine */
+/* TRMESH. */
+
+/* On output: */
+
+/* LIST,LPTR,LNEW = Data structure updated with the */
+/* addition of node K. */
+
+/* Modules required by INSERT: None */
+
+/* *********************************************************** */
+
+
+ /* Parameter adjustments */
+ --lptr;
+ --list;
+
+ /* Function Body */
+ lsav = lptr[*lp];
+ lptr[*lp] = *lnew;
+ list[*lnew] = *k;
+ lptr[*lnew] = lsav;
+ ++(*lnew);
+ return 0;
+} /* insert_ */
+
+int inside_(double *p, int *lv, double *xv, double *yv,
+ double *zv, int *nv, int *listv, int *ier)
+{
+ /* Initialized data */
+
+ static double eps = .001;
+
+ /* System generated locals */
+ int i__1;
+ int ret_val = 0;
+
+ /* Local variables */
+ static double b[3], d__;
+ static int k, n;
+ static double q[3];
+ static int i1, i2, k0;
+ static double v1[3], v2[3], cn[3], bp, bq;
+ static int ni;
+ static double pn[3], qn[3], vn[3];
+ static int imx;
+ static int lft1, lft2, even;
+ static int ierr;
+ static int pinr, qinr;
+ static double qnrm, vnrm;
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 12/27/93 */
+
+/* This function locates a point P relative to a polygonal */
+/* region R on the surface of the unit sphere, returning */
+/* INSIDE = TRUE if and only if P is contained in R. R is */
+/* defined by a cyclically ordered sequence of vertices which */
+/* form a positively-oriented simple closed curve. Adjacent */
+/* vertices need not be distinct but the curve must not be */
+/* self-intersecting. Also, while polygon edges are by defi- */
+/* nition restricted to a single hemisphere, R is not so */
+/* restricted. Its interior is the region to the left as the */
+/* vertices are traversed in order. */
+
+/* The algorithm consists of selecting a point Q in R and */
+/* then finding all points at which the great circle defined */
+/* by P and Q intersects the boundary of R. P lies inside R */
+/* if and only if there is an even number of intersection */
+/* points between Q and P. Q is taken to be a point immedi- */
+/* ately to the left of a directed boundary edge -- the first */
+/* one that results in no consistency-check failures. */
+
+/* If P is close to the polygon boundary, the problem is */
+/* ill-conditioned and the decision may be incorrect. Also, */
+/* an incorrect decision may result from a poor choice of Q */
+/* (if, for example, a boundary edge lies on the great cir- */
+/* cle defined by P and Q). A more reliable result could be */
+/* obtained by a sequence of calls to INSIDE with the ver- */
+/* tices cyclically permuted before each call (to alter the */
+/* choice of Q). */
+
+
+/* On input: */
+
+/* P = Array of length 3 containing the Cartesian */
+/* coordinates of the point (unit vector) to be */
+/* located. */
+
+/* LV = Length of arrays XV, YV, and ZV. */
+
+/* XV,YV,ZV = Arrays of length LV containing the Carte- */
+/* sian coordinates of unit vectors (points */
+/* on the unit sphere). These values are */
+/* not tested for validity. */
+
+/* NV = Number of vertices in the polygon. 3 .LE. NV */
+/* .LE. LV. */
+
+/* LISTV = Array of length NV containing the indexes */
+/* (for XV, YV, and ZV) of a cyclically-ordered */
+/* (and CCW-ordered) sequence of vertices that */
+/* define R. The last vertex (indexed by */
+/* LISTV(NV)) is followed by the first (indexed */
+/* by LISTV(1)). LISTV entries must be in the */
+/* range 1 to LV. */
+
+/* Input parameters are not altered by this function. */
+
+/* On output: */
+
+/* INSIDE = TRUE if and only if P lies inside R unless */
+/* IER .NE. 0, in which case the value is not */
+/* altered. */
+
+/* IER = Error indicator: */
+/* IER = 0 if no errors were encountered. */
+/* IER = 1 if LV or NV is outside its valid */
+/* range. */
+/* IER = 2 if a LISTV entry is outside its valid */
+/* range. */
+/* IER = 3 if the polygon boundary was found to */
+/* be self-intersecting. This error will */
+/* not necessarily be detected. */
+/* IER = 4 if every choice of Q (one for each */
+/* boundary edge) led to failure of some */
+/* internal consistency check. The most */
+/* likely cause of this error is invalid */
+/* input: P = (0,0,0), a null or self- */
+/* intersecting polygon, etc. */
+
+/* Module required by INSIDE: INTRSC */
+
+/* Intrinsic function called by INSIDE: SQRT */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* B = Intersection point between the boundary and */
+/* the great circle defined by P and Q */
+/* BP,BQ = <B,P> and <B,Q>, respectively, maximized over */
+/* intersection points B that lie between P and */
+/* Q (on the shorter arc) -- used to find the */
+/* closest intersection points to P and Q */
+/* CN = Q X P = normal to the plane of P and Q */
+/* D = Dot product <B,P> or <B,Q> */
+/* EPS = Parameter used to define Q as the point whose */
+/* orthogonal distance to (the midpoint of) */
+/* boundary edge V1->V2 is approximately EPS/ */
+/* (2*Cos(A/2)), where <V1,V2> = Cos(A). */
+/* EVEN = TRUE iff an even number of intersection points */
+/* lie between P and Q (on the shorter arc) */
+/* I1,I2 = Indexes (LISTV elements) of a pair of adjacent */
+/* boundary vertices (endpoints of a boundary */
+/* edge) */
+/* IERR = Error flag for calls to INTRSC (not tested) */
+/* IMX = Local copy of LV and maximum value of I1 and */
+/* I2 */
+/* K = DO-loop index and LISTV index */
+/* K0 = LISTV index of the first endpoint of the */
+/* boundary edge used to compute Q */
+/* LFT1,LFT2 = Logical variables associated with I1 and I2 in */
+/* the boundary traversal: TRUE iff the vertex */
+/* is strictly to the left of Q->P (<V,CN> > 0) */
+/* N = Local copy of NV */
+/* NI = Number of intersections (between the boundary */
+/* curve and the great circle P-Q) encountered */
+/* PINR = TRUE iff P is to the left of the directed */
+/* boundary edge associated with the closest */
+/* intersection point to P that lies between P */
+/* and Q (a left-to-right intersection as */
+/* viewed from Q), or there is no intersection */
+/* between P and Q (on the shorter arc) */
+/* PN,QN = P X CN and CN X Q, respectively: used to */
+/* locate intersections B relative to arc Q->P */
+/* Q = (V1 + V2 + EPS*VN/VNRM)/QNRM, where V1->V2 is */
+/* the boundary edge indexed by LISTV(K0) -> */
+/* LISTV(K0+1) */
+/* QINR = TRUE iff Q is to the left of the directed */
+/* boundary edge associated with the closest */
+/* intersection point to Q that lies between P */
+/* and Q (a right-to-left intersection as */
+/* viewed from Q), or there is no intersection */
+/* between P and Q (on the shorter arc) */
+/* QNRM = Euclidean norm of V1+V2+EPS*VN/VNRM used to */
+/* compute (normalize) Q */
+/* V1,V2 = Vertices indexed by I1 and I2 in the boundary */
+/* traversal */
+/* VN = V1 X V2, where V1->V2 is the boundary edge */
+/* indexed by LISTV(K0) -> LISTV(K0+1) */
+/* VNRM = Euclidean norm of VN */
+
+ /* Parameter adjustments */
+ --p;
+ --zv;
+ --yv;
+ --xv;
+ --listv;
+
+ /* Function Body */
+
+/* Store local parameters, test for error 1, and initialize */
+/* K0. */
+
+ imx = *lv;
+ n = *nv;
+ if (n < 3 || n > imx) {
+ goto L11;
+ }
+ k0 = 0;
+ i1 = listv[1];
+ if (i1 < 1 || i1 > imx) {
+ goto L12;
+ }
+
+/* Increment K0 and set Q to a point immediately to the left */
+/* of the midpoint of edge V1->V2 = LISTV(K0)->LISTV(K0+1): */
+/* Q = (V1 + V2 + EPS*VN/VNRM)/QNRM, where VN = V1 X V2. */
+
+L1:
+ ++k0;
+ if (k0 > n) {
+ goto L14;
+ }
+ i1 = listv[k0];
+ if (k0 < n) {
+ i2 = listv[k0 + 1];
+ } else {
+ i2 = listv[1];
+ }
+ if (i2 < 1 || i2 > imx) {
+ goto L12;
+ }
+ vn[0] = yv[i1] * zv[i2] - zv[i1] * yv[i2];
+ vn[1] = zv[i1] * xv[i2] - xv[i1] * zv[i2];
+ vn[2] = xv[i1] * yv[i2] - yv[i1] * xv[i2];
+ vnrm = sqrt(vn[0] * vn[0] + vn[1] * vn[1] + vn[2] * vn[2]);
+ if (vnrm == 0.) {
+ goto L1;
+ }
+ q[0] = xv[i1] + xv[i2] + eps * vn[0] / vnrm;
+ q[1] = yv[i1] + yv[i2] + eps * vn[1] / vnrm;
+ q[2] = zv[i1] + zv[i2] + eps * vn[2] / vnrm;
+ qnrm = sqrt(q[0] * q[0] + q[1] * q[1] + q[2] * q[2]);
+ q[0] /= qnrm;
+ q[1] /= qnrm;
+ q[2] /= qnrm;
+
+/* Compute CN = Q X P, PN = P X CN, and QN = CN X Q. */
+
+ cn[0] = q[1] * p[3] - q[2] * p[2];
+ cn[1] = q[2] * p[1] - q[0] * p[3];
+ cn[2] = q[0] * p[2] - q[1] * p[1];
+ if (cn[0] == 0. && cn[1] == 0. && cn[2] == 0.) {
+ goto L1;
+ }
+ pn[0] = p[2] * cn[2] - p[3] * cn[1];
+ pn[1] = p[3] * cn[0] - p[1] * cn[2];
+ pn[2] = p[1] * cn[1] - p[2] * cn[0];
+ qn[0] = cn[1] * q[2] - cn[2] * q[1];
+ qn[1] = cn[2] * q[0] - cn[0] * q[2];
+ qn[2] = cn[0] * q[1] - cn[1] * q[0];
+
+/* Initialize parameters for the boundary traversal. */
+
+ ni = 0;
+ even = TRUE_;
+ bp = -2.;
+ bq = -2.;
+ pinr = TRUE_;
+ qinr = TRUE_;
+ i2 = listv[n];
+ if (i2 < 1 || i2 > imx) {
+ goto L12;
+ }
+ lft2 = cn[0] * xv[i2] + cn[1] * yv[i2] + cn[2] * zv[i2] > 0.;
+
+/* Loop on boundary arcs I1->I2. */
+
+ i__1 = n;
+ for (k = 1; k <= i__1; ++k) {
+ i1 = i2;
+ lft1 = lft2;
+ i2 = listv[k];
+ if (i2 < 1 || i2 > imx) {
+ goto L12;
+ }
+ lft2 = cn[0] * xv[i2] + cn[1] * yv[i2] + cn[2] * zv[i2] > 0.;
+ if (lft1 == lft2) {
+ goto L2;
+ }
+
+/* I1 and I2 are on opposite sides of Q->P. Compute the */
+/* point of intersection B. */
+
+ ++ni;
+ v1[0] = xv[i1];
+ v1[1] = yv[i1];
+ v1[2] = zv[i1];
+ v2[0] = xv[i2];
+ v2[1] = yv[i2];
+ v2[2] = zv[i2];
+ intrsc_(v1, v2, cn, b, &ierr);
+
+/* B is between Q and P (on the shorter arc) iff */
+/* B Forward Q->P and B Forward P->Q iff */
+/* <B,QN> > 0 and <B,PN> > 0. */
+
+ if (b[0] * qn[0] + b[1] * qn[1] + b[2] * qn[2] > 0. && b[0] * pn[0] +
+ b[1] * pn[1] + b[2] * pn[2] > 0.) {
+
+/* Update EVEN, BQ, QINR, BP, and PINR. */
+
+ even = ! even;
+ d__ = b[0] * q[0] + b[1] * q[1] + b[2] * q[2];
+ if (d__ > bq) {
+ bq = d__;
+ qinr = lft2;
+ }
+ d__ = b[0] * p[1] + b[1] * p[2] + b[2] * p[3];
+ if (d__ > bp) {
+ bp = d__;
+ pinr = lft1;
+ }
+ }
+L2:
+ ;
+ }
+
+/* Test for consistency: NI must be even and QINR must be */
+/* TRUE. */
+
+ if (ni != ni / 2 << 1 || ! qinr) {
+ goto L1;
+ }
+
+/* Test for error 3: different values of PINR and EVEN. */
+
+ if (pinr != even) {
+ goto L13;
+ }
+
+/* No error encountered. */
+
+ *ier = 0;
+ ret_val = even;
+ return ret_val;
+
+/* LV or NV is outside its valid range. */
+
+L11:
+ *ier = 1;
+ return ret_val;
+
+/* A LISTV entry is outside its valid range. */
+
+L12:
+ *ier = 2;
+ return ret_val;
+
+/* The polygon boundary is self-intersecting. */
+
+L13:
+ *ier = 3;
+ return ret_val;
+
+/* Consistency tests failed for all values of Q. */
+
+L14:
+ *ier = 4;
+ return ret_val;
+} /* inside_ */
+
+/* Subroutine */ int intadd_(int *kk, int *i1, int *i2, int *
+ i3, int *list, int *lptr, int *lend, int *lnew)
+{
+ static int k, n1, n2, n3, lp;
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/17/96 */
+
+/* This subroutine adds an interior node to a triangulation */
+/* of a set of points on the unit sphere. The data structure */
+/* is updated with the insertion of node KK into the triangle */
+/* whose vertices are I1, I2, and I3. No optimization of the */
+/* triangulation is performed. */
+
+/* This routine is identical to the similarly named routine */
+/* in TRIPACK. */
+
+
+/* On input: */
+
+/* KK = Index of the node to be inserted. KK .GE. 1 */
+/* and KK must not be equal to I1, I2, or I3. */
+
+/* I1,I2,I3 = Indexes of the counterclockwise-ordered */
+/* sequence of vertices of a triangle which */
+/* contains node KK. */
+
+/* The above parameters are not altered by this routine. */
+
+/* LIST,LPTR,LEND,LNEW = Data structure defining the */
+/* triangulation. Refer to Sub- */
+/* routine TRMESH. Triangle */
+/* (I1,I2,I3) must be included */
+/* in the triangulation. */
+
+/* On output: */
+
+/* LIST,LPTR,LEND,LNEW = Data structure updated with */
+/* the addition of node KK. KK */
+/* will be connected to nodes I1, */
+/* I2, and I3. */
+
+/* Modules required by INTADD: INSERT, LSTPTR */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* K = Local copy of KK */
+/* LP = LIST pointer */
+/* N1,N2,N3 = Local copies of I1, I2, and I3 */
+
+ /* Parameter adjustments */
+ --lend;
+ --lptr;
+ --list;
+
+ /* Function Body */
+ k = *kk;
+
+/* Initialization. */
+
+ n1 = *i1;
+ n2 = *i2;
+ n3 = *i3;
+
+/* Add K as a neighbor of I1, I2, and I3. */
+
+ lp = lstptr_(&lend[n1], &n2, &list[1], &lptr[1]);
+ insert_(&k, &lp, &list[1], &lptr[1], lnew);
+ lp = lstptr_(&lend[n2], &n3, &list[1], &lptr[1]);
+ insert_(&k, &lp, &list[1], &lptr[1], lnew);
+ lp = lstptr_(&lend[n3], &n1, &list[1], &lptr[1]);
+ insert_(&k, &lp, &list[1], &lptr[1], lnew);
+
+/* Add I1, I2, and I3 as neighbors of K. */
+
+ list[*lnew] = n1;
+ list[*lnew + 1] = n2;
+ list[*lnew + 2] = n3;
+ lptr[*lnew] = *lnew + 1;
+ lptr[*lnew + 1] = *lnew + 2;
+ lptr[*lnew + 2] = *lnew;
+ lend[k] = *lnew + 2;
+ *lnew += 3;
+ return 0;
+} /* intadd_ */
+
+/* Subroutine */ int intrsc_(double *p1, double *p2, double *cn,
+ double *p, int *ier)
+{
+ /* Local variables */
+ static int i__;
+ static double t, d1, d2, pp[3], ppn;
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/19/90 */
+
+/* Given a great circle C and points P1 and P2 defining an */
+/* arc A on the surface of the unit sphere, where A is the */
+/* shorter of the two portions of the great circle C12 assoc- */
+/* iated with P1 and P2, this subroutine returns the point */
+/* of intersection P between C and C12 that is closer to A. */
+/* Thus, if P1 and P2 lie in opposite hemispheres defined by */
+/* C, P is the point of intersection of C with A. */
+
+
+/* On input: */
+
+/* P1,P2 = Arrays of length 3 containing the Cartesian */
+/* coordinates of unit vectors. */
+
+/* CN = Array of length 3 containing the Cartesian */
+/* coordinates of a nonzero vector which defines C */
+/* as the intersection of the plane whose normal */
+/* is CN with the unit sphere. Thus, if C is to */
+/* be the great circle defined by P and Q, CN */
+/* should be P X Q. */
+
+/* The above parameters are not altered by this routine. */
+
+/* P = Array of length 3. */
+
+/* On output: */
+
+/* P = Point of intersection defined above unless IER */
+/* .NE. 0, in which case P is not altered. */
+
+/* IER = Error indicator. */
+/* IER = 0 if no errors were encountered. */
+/* IER = 1 if <CN,P1> = <CN,P2>. This occurs */
+/* iff P1 = P2 or CN = 0 or there are */
+/* two intersection points at the same */
+/* distance from A. */
+/* IER = 2 if P2 = -P1 and the definition of A is */
+/* therefore ambiguous. */
+
+/* Modules required by INTRSC: None */
+
+/* Intrinsic function called by INTRSC: SQRT */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* D1 = <CN,P1> */
+/* D2 = <CN,P2> */
+/* I = DO-loop index */
+/* PP = P1 + T*(P2-P1) = Parametric representation of the */
+/* line defined by P1 and P2 */
+/* PPN = Norm of PP */
+/* T = D1/(D1-D2) = Parameter value chosen so that PP lies */
+/* in the plane of C */
+
+ /* Parameter adjustments */
+ --p;
+ --cn;
+ --p2;
+ --p1;
+
+ /* Function Body */
+ d1 = cn[1] * p1[1] + cn[2] * p1[2] + cn[3] * p1[3];
+ d2 = cn[1] * p2[1] + cn[2] * p2[2] + cn[3] * p2[3];
+
+ if (d1 == d2) {
+ *ier = 1;
+ return 0;
+ }
+
+/* Solve for T such that <PP,CN> = 0 and compute PP and PPN. */
+
+ t = d1 / (d1 - d2);
+ ppn = 0.;
+ for (i__ = 1; i__ <= 3; ++i__) {
+ pp[i__ - 1] = p1[i__] + t * (p2[i__] - p1[i__]);
+ ppn += pp[i__ - 1] * pp[i__ - 1];
+/* L1: */
+ }
+
+/* PPN = 0 iff PP = 0 iff P2 = -P1 (and T = .5). */
+
+ if (ppn == 0.) {
+ *ier = 2;
+ return 0;
+ }
+ ppn = sqrt(ppn);
+
+/* Compute P = PP/PPN. */
+
+ for (i__ = 1; i__ <= 3; ++i__) {
+ p[i__] = pp[i__ - 1] / ppn;
+/* L2: */
+ }
+ *ier = 0;
+ return 0;
+} /* intrsc_ */
+
+int jrand_(int *n, int *ix, int *iy, int *iz)
+{
+ /* System generated locals */
+ int ret_val;
+
+ /* Local variables */
+ static double u, x;
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/28/98 */
+
+/* This function returns a uniformly distributed pseudo- */
+/* random int in the range 1 to N. */
+
+
+/* On input: */
+
+/* N = Maximum value to be returned. */
+
+/* N is not altered by this function. */
+
+/* IX,IY,IZ = int seeds initialized to values in */
+/* the range 1 to 30,000 before the first */
+/* call to JRAND, and not altered between */
+/* subsequent calls (unless a sequence of */
+/* random numbers is to be repeated by */
+/* reinitializing the seeds). */
+
+/* On output: */
+
+/* IX,IY,IZ = Updated int seeds. */
+
+/* JRAND = Random int in the range 1 to N. */
+
+/* Reference: B. A. Wichmann and I. D. Hill, "An Efficient */
+/* and Portable Pseudo-random Number Generator", */
+/* Applied Statistics, Vol. 31, No. 2, 1982, */
+/* pp. 188-190. */
+
+/* Modules required by JRAND: None */
+
+/* Intrinsic functions called by JRAND: INT, MOD, REAL */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* U = Pseudo-random number uniformly distributed in the */
+/* interval (0,1). */
+/* X = Pseudo-random number in the range 0 to 3 whose frac- */
+/* tional part is U. */
+
+ *ix = *ix * 171 % 30269;
+ *iy = *iy * 172 % 30307;
+ *iz = *iz * 170 % 30323;
+ x = (double) (*ix) / 30269. + (double) (*iy) / 30307. + (
+ double) (*iz) / 30323.;
+ u = x - (int) x;
+ ret_val = (int) ((double) (*n) * u + 1.);
+ return ret_val;
+} /* jrand_ */
+
+int left_(double *x1, double *y11, double *z1, double *x2,
+ double *y2, double *z2, double *x0, double *y00,
+ double *z0)
+{
+ /* System generated locals */
+ int ret_val;
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/15/96 */
+
+/* This function determines whether node N0 is in the */
+/* (closed) left hemisphere defined by the plane containing */
+/* N1, N2, and the origin, where left is defined relative to */
+/* an observer at N1 facing N2. */
+
+
+/* On input: */
+
+/* X1,Y1,Z1 = Coordinates of N1. */
+
+/* X2,Y2,Z2 = Coordinates of N2. */
+
+/* X0,Y0,Z0 = Coordinates of N0. */
+
+/* Input parameters are not altered by this function. */
+
+/* On output: */
+
+/* LEFT = TRUE if and only if N0 is in the closed */
+/* left hemisphere. */
+
+/* Modules required by LEFT: None */
+
+/* *********************************************************** */
+
+/* LEFT = TRUE iff <N0,N1 X N2> = det(N0,N1,N2) .GE. 0. */
+
+ ret_val = *x0 * (*y11 * *z2 - *y2 * *z1) - *y00 * (*x1 * *z2 - *x2 * *z1) +
+ *z0 * (*x1 * *y2 - *x2 * *y11) >= 0.;
+ return ret_val;
+} /* left_ */
+
+int lstptr_(int *lpl, int *nb, int *list, int *lptr)
+{
+ /* System generated locals */
+ int ret_val;
+
+ /* Local variables */
+ static int nd, lp;
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/15/96 */
+
+/* This function returns the index (LIST pointer) of NB in */
+/* the adjacency list for N0, where LPL = LEND(N0). */
+
+/* This function is identical to the similarly named */
+/* function in TRIPACK. */
+
+
+/* On input: */
+
+/* LPL = LEND(N0) */
+
+/* NB = Index of the node whose pointer is to be re- */
+/* turned. NB must be connected to N0. */
+
+/* LIST,LPTR = Data structure defining the triangula- */
+/* tion. Refer to Subroutine TRMESH. */
+
+/* Input parameters are not altered by this function. */
+
+/* On output: */
+
+/* LSTPTR = Pointer such that LIST(LSTPTR) = NB or */
+/* LIST(LSTPTR) = -NB, unless NB is not a */
+/* neighbor of N0, in which case LSTPTR = LPL. */
+
+/* Modules required by LSTPTR: None */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* LP = LIST pointer */
+/* ND = Nodal index */
+
+ /* Parameter adjustments */
+ --lptr;
+ --list;
+
+ /* Function Body */
+ lp = lptr[*lpl];
+L1:
+ nd = list[lp];
+ if (nd == *nb) {
+ goto L2;
+ }
+ lp = lptr[lp];
+ if (lp != *lpl) {
+ goto L1;
+ }
+
+L2:
+ ret_val = lp;
+ return ret_val;
+} /* lstptr_ */
+
+int nbcnt_(int *lpl, int *lptr)
+{
+ /* System generated locals */
+ int ret_val;
+
+ /* Local variables */
+ static int k, lp;
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/15/96 */
+
+/* This function returns the number of neighbors of a node */
+/* N0 in a triangulation created by Subroutine TRMESH. */
+
+/* This function is identical to the similarly named */
+/* function in TRIPACK. */
+
+
+/* On input: */
+
+/* LPL = LIST pointer to the last neighbor of N0 -- */
+/* LPL = LEND(N0). */
+
+/* LPTR = Array of pointers associated with LIST. */
+
+/* Input parameters are not altered by this function. */
+
+/* On output: */
+
+/* NBCNT = Number of neighbors of N0. */
+
+/* Modules required by NBCNT: None */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* K = Counter for computing the number of neighbors */
+/* LP = LIST pointer */
+
+ /* Parameter adjustments */
+ --lptr;
+
+ /* Function Body */
+ lp = *lpl;
+ k = 1;
+
+L1:
+ lp = lptr[lp];
+ if (lp == *lpl) {
+ goto L2;
+ }
+ ++k;
+ goto L1;
+
+L2:
+ ret_val = k;
+ return ret_val;
+} /* nbcnt_ */
+
+int nearnd_(double *p, int *ist, int *n, double *x,
+ double *y, double *z__, int *list, int *lptr, int
+ *lend, double *al)
+{
+ /* System generated locals */
+ int ret_val, i__1;
+
+ /* Local variables */
+ static int l;
+ static double b1, b2, b3;
+ static int i1, i2, i3, n1, n2, n3, lp, nn, nr;
+ static double ds1;
+ static int lp1, lp2;
+ static double dx1, dx2, dx3, dy1, dy2, dy3, dz1, dz2, dz3;
+ static int lpl;
+ static double dsr;
+ static int nst, listp[25], lptrp[25];
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/28/98 */
+
+/* Given a point P on the surface of the unit sphere and a */
+/* Delaunay triangulation created by Subroutine TRMESH, this */
+/* function returns the index of the nearest triangulation */
+/* node to P. */
+
+/* The algorithm consists of implicitly adding P to the */
+/* triangulation, finding the nearest neighbor to P, and */
+/* implicitly deleting P from the triangulation. Thus, it */
+/* is based on the fact that, if P is a node in a Delaunay */
+/* triangulation, the nearest node to P is a neighbor of P. */
+
+
+/* On input: */
+
+/* P = Array of length 3 containing the Cartesian coor- */
+/* dinates of the point P to be located relative to */
+/* the triangulation. It is assumed without a test */
+/* that P(1)**2 + P(2)**2 + P(3)**2 = 1. */
+
+/* IST = Index of a node at which TRFIND begins the */
+/* search. Search time depends on the proximity */
+/* of this node to P. */
+
+/* N = Number of nodes in the triangulation. N .GE. 3. */
+
+/* X,Y,Z = Arrays of length N containing the Cartesian */
+/* coordinates of the nodes. */
+
+/* LIST,LPTR,LEND = Data structure defining the trian- */
+/* gulation. Refer to TRMESH. */
+
+/* Input parameters are not altered by this function. */
+
+/* On output: */
+
+/* NEARND = Nodal index of the nearest node to P, or 0 */
+/* if N < 3 or the triangulation data struc- */
+/* ture is invalid. */
+
+/* AL = Arc length (angular distance in radians) be- */
+/* tween P and NEARND unless NEARND = 0. */
+
+/* Note that the number of candidates for NEARND */
+/* (neighbors of P) is limited to LMAX defined in */
+/* the PARAMETER statement below. */
+
+/* Modules required by NEARND: JRAND, LSTPTR, TRFIND, STORE */
+
+/* Intrinsic functions called by NEARND: ABS, ACOS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* B1,B2,B3 = Unnormalized barycentric coordinates returned */
+/* by TRFIND */
+/* DS1 = (Negative cosine of the) distance from P to N1 */
+/* DSR = (Negative cosine of the) distance from P to NR */
+/* DX1,..DZ3 = Components of vectors used by the swap test */
+/* I1,I2,I3 = Nodal indexes of a triangle containing P, or */
+/* the rightmost (I1) and leftmost (I2) visible */
+/* boundary nodes as viewed from P */
+/* L = Length of LISTP/LPTRP and number of neighbors */
+/* of P */
+/* LMAX = Maximum value of L */
+/* LISTP = Indexes of the neighbors of P */
+/* LPTRP = Array of pointers in 1-1 correspondence with */
+/* LISTP elements */
+/* LP = LIST pointer to a neighbor of N1 and LISTP */
+/* pointer */
+/* LP1,LP2 = LISTP indexes (pointers) */
+/* LPL = Pointer to the last neighbor of N1 */
+/* N1 = Index of a node visible from P */
+/* N2 = Index of an endpoint of an arc opposite P */
+/* N3 = Index of the node opposite N1->N2 */
+/* NN = Local copy of N */
+/* NR = Index of a candidate for the nearest node to P */
+/* NST = Index of the node at which TRFIND begins the */
+/* search */
+
+
+/* Store local parameters and test for N invalid. */
+
+ /* Parameter adjustments */
+ --p;
+ --lend;
+ --z__;
+ --y;
+ --x;
+ --list;
+ --lptr;
+
+ /* Function Body */
+ nn = *n;
+ if (nn < 3) {
+ goto L6;
+ }
+ nst = *ist;
+ if (nst < 1 || nst > nn) {
+ nst = 1;
+ }
+
+/* Find a triangle (I1,I2,I3) containing P, or the rightmost */
+/* (I1) and leftmost (I2) visible boundary nodes as viewed */
+/* from P. */
+
+ trfind_(&nst, &p[1], n, &x[1], &y[1], &z__[1], &list[1], &lptr[1], &lend[
+ 1], &b1, &b2, &b3, &i1, &i2, &i3);
+
+/* Test for collinear nodes. */
+
+ if (i1 == 0) {
+ goto L6;
+ }
+
+/* Store the linked list of 'neighbors' of P in LISTP and */
+/* LPTRP. I1 is the first neighbor, and 0 is stored as */
+/* the last neighbor if P is not contained in a triangle. */
+/* L is the length of LISTP and LPTRP, and is limited to */
+/* LMAX. */
+
+ if (i3 != 0) {
+ listp[0] = i1;
+ lptrp[0] = 2;
+ listp[1] = i2;
+ lptrp[1] = 3;
+ listp[2] = i3;
+ lptrp[2] = 1;
+ l = 3;
+ } else {
+ n1 = i1;
+ l = 1;
+ lp1 = 2;
+ listp[l - 1] = n1;
+ lptrp[l - 1] = lp1;
+
+/* Loop on the ordered sequence of visible boundary nodes */
+/* N1 from I1 to I2. */
+
+L1:
+ lpl = lend[n1];
+ n1 = -list[lpl];
+ l = lp1;
+ lp1 = l + 1;
+ listp[l - 1] = n1;
+ lptrp[l - 1] = lp1;
+ if (n1 != i2 && lp1 < 25) {
+ goto L1;
+ }
+ l = lp1;
+ listp[l - 1] = 0;
+ lptrp[l - 1] = 1;
+ }
+
+/* Initialize variables for a loop on arcs N1-N2 opposite P */
+/* in which new 'neighbors' are 'swapped' in. N1 follows */
+/* N2 as a neighbor of P, and LP1 and LP2 are the LISTP */
+/* indexes of N1 and N2. */
+
+ lp2 = 1;
+ n2 = i1;
+ lp1 = lptrp[0];
+ n1 = listp[lp1 - 1];
+
+/* Begin loop: find the node N3 opposite N1->N2. */
+
+L2:
+ lp = lstptr_(&lend[n1], &n2, &list[1], &lptr[1]);
+ if (list[lp] < 0) {
+ goto L3;
+ }
+ lp = lptr[lp];
+ n3 = (i__1 = list[lp], abs(i__1));
+
+/* Swap test: Exit the loop if L = LMAX. */
+
+ if (l == 25) {
+ goto L4;
+ }
+ dx1 = x[n1] - p[1];
+ dy1 = y[n1] - p[2];
+ dz1 = z__[n1] - p[3];
+
+ dx2 = x[n2] - p[1];
+ dy2 = y[n2] - p[2];
+ dz2 = z__[n2] - p[3];
+
+ dx3 = x[n3] - p[1];
+ dy3 = y[n3] - p[2];
+ dz3 = z__[n3] - p[3];
+ if (dx3 * (dy2 * dz1 - dy1 * dz2) - dy3 * (dx2 * dz1 - dx1 * dz2) + dz3 *
+ (dx2 * dy1 - dx1 * dy2) <= 0.) {
+ goto L3;
+ }
+
+/* Swap: Insert N3 following N2 in the adjacency list for P. */
+/* The two new arcs opposite P must be tested. */
+
+ ++l;
+ lptrp[lp2 - 1] = l;
+ listp[l - 1] = n3;
+ lptrp[l - 1] = lp1;
+ lp1 = l;
+ n1 = n3;
+ goto L2;
+
+/* No swap: Advance to the next arc and test for termination */
+/* on N1 = I1 (LP1 = 1) or N1 followed by 0. */
+
+L3:
+ if (lp1 == 1) {
+ goto L4;
+ }
+ lp2 = lp1;
+ n2 = n1;
+ lp1 = lptrp[lp1 - 1];
+ n1 = listp[lp1 - 1];
+ if (n1 == 0) {
+ goto L4;
+ }
+ goto L2;
+
+/* Set NR and DSR to the index of the nearest node to P and */
+/* an increasing function (negative cosine) of its distance */
+/* from P, respectively. */
+
+L4:
+ nr = i1;
+ dsr = -(x[nr] * p[1] + y[nr] * p[2] + z__[nr] * p[3]);
+ i__1 = l;
+ for (lp = 2; lp <= i__1; ++lp) {
+ n1 = listp[lp - 1];
+ if (n1 == 0) {
+ goto L5;
+ }
+ ds1 = -(x[n1] * p[1] + y[n1] * p[2] + z__[n1] * p[3]);
+ if (ds1 < dsr) {
+ nr = n1;
+ dsr = ds1;
+ }
+L5:
+ ;
+ }
+ dsr = -dsr;
+ if (dsr > 1.) {
+ dsr = 1.;
+ }
+ *al = acos(dsr);
+ ret_val = nr;
+ return ret_val;
+
+/* Invalid input. */
+
+L6:
+ ret_val = 0;
+ return ret_val;
+} /* nearnd_ */
+
+/* Subroutine */ int optim_(double *x, double *y, double *z__,
+ int *na, int *list, int *lptr, int *lend, int *
+ nit, int *iwk, int *ier)
+{
+ /* System generated locals */
+ int i__1, i__2;
+
+ /* Local variables */
+ static int i__, n1, n2, lp, io1, io2, nna, lp21, lpl, lpp;
+ static int swp;
+ static int iter;
+ static int maxit;
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/30/98 */
+
+/* Given a set of NA triangulation arcs, this subroutine */
+/* optimizes the portion of the triangulation consisting of */
+/* the quadrilaterals (pairs of adjacent triangles) which */
+/* have the arcs as diagonals by applying the circumcircle */
+/* test and appropriate swaps to the arcs. */
+
+/* An iteration consists of applying the swap test and */
+/* swaps to all NA arcs in the order in which they are */
+/* stored. The iteration is repeated until no swap occurs */
+/* or NIT iterations have been performed. The bound on the */
+/* number of iterations may be necessary to prevent an */
+/* infinite loop caused by cycling (reversing the effect of a */
+/* previous swap) due to floating point inaccuracy when four */
+/* or more nodes are nearly cocircular. */
+
+
+/* On input: */
+
+/* X,Y,Z = Arrays containing the nodal coordinates. */
+
+/* NA = Number of arcs in the set. NA .GE. 0. */
+
+/* The above parameters are not altered by this routine. */
+
+/* LIST,LPTR,LEND = Data structure defining the trian- */
+/* gulation. Refer to Subroutine */
+/* TRMESH. */
+
+/* NIT = Maximum number of iterations to be performed. */
+/* NIT = 4*NA should be sufficient. NIT .GE. 1. */
+
+/* IWK = int array dimensioned 2 by NA containing */
+/* the nodal indexes of the arc endpoints (pairs */
+/* of endpoints are stored in columns). */
+
+/* On output: */
+
+/* LIST,LPTR,LEND = Updated triangulation data struc- */
+/* ture reflecting the swaps. */
+
+/* NIT = Number of iterations performed. */
+
+/* IWK = Endpoint indexes of the new set of arcs */
+/* reflecting the swaps. */
+
+/* IER = Error indicator: */
+/* IER = 0 if no errors were encountered. */
+/* IER = 1 if a swap occurred on the last of */
+/* MAXIT iterations, where MAXIT is the */
+/* value of NIT on input. The new set */
+/* of arcs is not necessarily optimal */
+/* in this case. */
+/* IER = 2 if NA < 0 or NIT < 1 on input. */
+/* IER = 3 if IWK(2,I) is not a neighbor of */
+/* IWK(1,I) for some I in the range 1 */
+/* to NA. A swap may have occurred in */
+/* this case. */
+/* IER = 4 if a zero pointer was returned by */
+/* Subroutine SWAP. */
+
+/* Modules required by OPTIM: LSTPTR, SWAP, SWPTST */
+
+/* Intrinsic function called by OPTIM: ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* I = Column index for IWK */
+/* IO1,IO2 = Nodal indexes of the endpoints of an arc in IWK */
+/* ITER = Iteration count */
+/* LP = LIST pointer */
+/* LP21 = Parameter returned by SWAP (not used) */
+/* LPL = Pointer to the last neighbor of IO1 */
+/* LPP = Pointer to the node preceding IO2 as a neighbor */
+/* of IO1 */
+/* MAXIT = Input value of NIT */
+/* N1,N2 = Nodes opposite IO1->IO2 and IO2->IO1, */
+/* respectively */
+/* NNA = Local copy of NA */
+/* SWP = Flag set to TRUE iff a swap occurs in the */
+/* optimization loop */
+
+ /* Parameter adjustments */
+ --x;
+ --y;
+ --z__;
+ iwk -= 3;
+ --list;
+ --lptr;
+ --lend;
+
+ /* Function Body */
+ nna = *na;
+ maxit = *nit;
+ if (nna < 0 || maxit < 1) {
+ goto L7;
+ }
+
+/* Initialize iteration count ITER and test for NA = 0. */
+
+ iter = 0;
+ if (nna == 0) {
+ goto L5;
+ }
+
+/* Top of loop -- */
+/* SWP = TRUE iff a swap occurred in the current iteration. */
+
+L1:
+ if (iter == maxit) {
+ goto L6;
+ }
+ ++iter;
+ swp = FALSE_;
+
+/* Inner loop on arcs IO1-IO2 -- */
+
+ i__1 = nna;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ io1 = iwk[(i__ << 1) + 1];
+ io2 = iwk[(i__ << 1) + 2];
+
+/* Set N1 and N2 to the nodes opposite IO1->IO2 and */
+/* IO2->IO1, respectively. Determine the following: */
+
+/* LPL = pointer to the last neighbor of IO1, */
+/* LP = pointer to IO2 as a neighbor of IO1, and */
+/* LPP = pointer to the node N2 preceding IO2. */
+
+ lpl = lend[io1];
+ lpp = lpl;
+ lp = lptr[lpp];
+L2:
+ if (list[lp] == io2) {
+ goto L3;
+ }
+ lpp = lp;
+ lp = lptr[lpp];
+ if (lp != lpl) {
+ goto L2;
+ }
+
+/* IO2 should be the last neighbor of IO1. Test for no */
+/* arc and bypass the swap test if IO1 is a boundary */
+/* node. */
+
+ if ((i__2 = list[lp], abs(i__2)) != io2) {
+ goto L8;
+ }
+ if (list[lp] < 0) {
+ goto L4;
+ }
+
+/* Store N1 and N2, or bypass the swap test if IO1 is a */
+/* boundary node and IO2 is its first neighbor. */
+
+L3:
+ n2 = list[lpp];
+ if (n2 < 0) {
+ goto L4;
+ }
+ lp = lptr[lp];
+ n1 = (i__2 = list[lp], abs(i__2));
+
+/* Test IO1-IO2 for a swap, and update IWK if necessary. */
+
+ if (! swptst_(&n1, &n2, &io1, &io2, &x[1], &y[1], &z__[1])) {
+ goto L4;
+ }
+ swap_(&n1, &n2, &io1, &io2, &list[1], &lptr[1], &lend[1], &lp21);
+ if (lp21 == 0) {
+ goto L9;
+ }
+ swp = TRUE_;
+ iwk[(i__ << 1) + 1] = n1;
+ iwk[(i__ << 1) + 2] = n2;
+L4:
+ ;
+ }
+ if (swp) {
+ goto L1;
+ }
+
+/* Successful termination. */
+
+L5:
+ *nit = iter;
+ *ier = 0;
+ return 0;
+
+/* MAXIT iterations performed without convergence. */
+
+L6:
+ *nit = maxit;
+ *ier = 1;
+ return 0;
+
+/* Invalid input parameter. */
+
+L7:
+ *nit = 0;
+ *ier = 2;
+ return 0;
+
+/* IO2 is not a neighbor of IO1. */
+
+L8:
+ *nit = iter;
+ *ier = 3;
+ return 0;
+
+/* Zero pointer returned by SWAP. */
+
+L9:
+ *nit = iter;
+ *ier = 4;
+ return 0;
+} /* optim_ */
+
+/* Subroutine */ int scoord_(double *px, double *py, double *pz,
+ double *plat, double *plon, double *pnrm)
+{
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 08/27/90 */
+
+/* This subroutine converts a point P from Cartesian coor- */
+/* dinates to spherical coordinates. */
+
+
+/* On input: */
+
+/* PX,PY,PZ = Cartesian coordinates of P. */
+
+/* Input parameters are not altered by this routine. */
+
+/* On output: */
+
+/* PLAT = Latitude of P in the range -PI/2 to PI/2, or */
+/* 0 if PNRM = 0. PLAT should be scaled by */
+/* 180/PI to obtain the value in degrees. */
+
+/* PLON = Longitude of P in the range -PI to PI, or 0 */
+/* if P lies on the Z-axis. PLON should be */
+/* scaled by 180/PI to obtain the value in */
+/* degrees. */
+
+/* PNRM = Magnitude (Euclidean norm) of P. */
+
+/* Modules required by SCOORD: None */
+
+/* Intrinsic functions called by SCOORD: ASIN, ATAN2, SQRT */
+
+/* *********************************************************** */
+
+ *pnrm = sqrt(*px * *px + *py * *py + *pz * *pz);
+ if (*px != 0. || *py != 0.) {
+ *plon = atan2(*py, *px);
+ } else {
+ *plon = 0.;
+ }
+ if (*pnrm != 0.) {
+ *plat = asin(*pz / *pnrm);
+ } else {
+ *plat = 0.;
+ }
+ return 0;
+} /* scoord_ */
+
+double store_(double *x)
+{
+ /* System generated locals */
+ double ret_val;
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 05/09/92 */
+
+/* This function forces its argument X to be stored in a */
+/* memory location, thus providing a means of determining */
+/* floating point number characteristics (such as the machine */
+/* precision) when it is necessary to avoid computation in */
+/* high precision registers. */
+
+
+/* On input: */
+
+/* X = Value to be stored. */
+
+/* X is not altered by this function. */
+
+/* On output: */
+
+/* STORE = Value of X after it has been stored and */
+/* possibly truncated or rounded to the single */
+/* precision word length. */
+
+/* Modules required by STORE: None */
+
+/* *********************************************************** */
+
+ stcom.y = *x;
+ ret_val = stcom.y;
+ return ret_val;
+} /* store_ */
+
+/* Subroutine */ int swap_(int *in1, int *in2, int *io1, int *
+ io2, int *list, int *lptr, int *lend, int *lp21)
+{
+ /* System generated locals */
+ int i__1;
+
+ /* Local variables */
+ static int lp, lph, lpsav;
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 06/22/98 */
+
+/* Given a triangulation of a set of points on the unit */
+/* sphere, this subroutine replaces a diagonal arc in a */
+/* strictly convex quadrilateral (defined by a pair of adja- */
+/* cent triangles) with the other diagonal. Equivalently, a */
+/* pair of adjacent triangles is replaced by another pair */
+/* having the same union. */
+
+
+/* On input: */
+
+/* IN1,IN2,IO1,IO2 = Nodal indexes of the vertices of */
+/* the quadrilateral. IO1-IO2 is re- */
+/* placed by IN1-IN2. (IO1,IO2,IN1) */
+/* and (IO2,IO1,IN2) must be trian- */
+/* gles on input. */
+
+/* The above parameters are not altered by this routine. */
+
+/* LIST,LPTR,LEND = Data structure defining the trian- */
+/* gulation. Refer to Subroutine */
+/* TRMESH. */
+
+/* On output: */
+
+/* LIST,LPTR,LEND = Data structure updated with the */
+/* swap -- triangles (IO1,IO2,IN1) and */
+/* (IO2,IO1,IN2) are replaced by */
+/* (IN1,IN2,IO2) and (IN2,IN1,IO1) */
+/* unless LP21 = 0. */
+
+/* LP21 = Index of IN1 as a neighbor of IN2 after the */
+/* swap is performed unless IN1 and IN2 are */
+/* adjacent on input, in which case LP21 = 0. */
+
+/* Module required by SWAP: LSTPTR */
+
+/* Intrinsic function called by SWAP: ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* LP,LPH,LPSAV = LIST pointers */
+
+
+/* Test for IN1 and IN2 adjacent. */
+
+ /* Parameter adjustments */
+ --lend;
+ --lptr;
+ --list;
+
+ /* Function Body */
+ lp = lstptr_(&lend[*in1], in2, &list[1], &lptr[1]);
+ if ((i__1 = list[lp], abs(i__1)) == *in2) {
+ *lp21 = 0;
+ return 0;
+ }
+
+/* Delete IO2 as a neighbor of IO1. */
+
+ lp = lstptr_(&lend[*io1], in2, &list[1], &lptr[1]);
+ lph = lptr[lp];
+ lptr[lp] = lptr[lph];
+
+/* If IO2 is the last neighbor of IO1, make IN2 the */
+/* last neighbor. */
+
+ if (lend[*io1] == lph) {
+ lend[*io1] = lp;
+ }
+
+/* Insert IN2 as a neighbor of IN1 following IO1 */
+/* using the hole created above. */
+
+ lp = lstptr_(&lend[*in1], io1, &list[1], &lptr[1]);
+ lpsav = lptr[lp];
+ lptr[lp] = lph;
+ list[lph] = *in2;
+ lptr[lph] = lpsav;
+
+/* Delete IO1 as a neighbor of IO2. */
+
+ lp = lstptr_(&lend[*io2], in1, &list[1], &lptr[1]);
+ lph = lptr[lp];
+ lptr[lp] = lptr[lph];
+
+/* If IO1 is the last neighbor of IO2, make IN1 the */
+/* last neighbor. */
+
+ if (lend[*io2] == lph) {
+ lend[*io2] = lp;
+ }
+
+/* Insert IN1 as a neighbor of IN2 following IO2. */
+
+ lp = lstptr_(&lend[*in2], io2, &list[1], &lptr[1]);
+ lpsav = lptr[lp];
+ lptr[lp] = lph;
+ list[lph] = *in1;
+ lptr[lph] = lpsav;
+ *lp21 = lph;
+ return 0;
+} /* swap_ */
+
+int swptst_(int *n1, int *n2, int *n3, int *n4,
+ double *x, double *y, double *z__)
+{
+ /* System generated locals */
+ int ret_val;
+
+ /* Local variables */
+ static double x4, y4, z4, dx1, dx2, dx3, dy1, dy2, dy3, dz1, dz2, dz3;
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 03/29/91 */
+
+/* This function decides whether or not to replace a */
+/* diagonal arc in a quadrilateral with the other diagonal. */
+/* The decision will be to swap (SWPTST = TRUE) if and only */
+/* if N4 lies above the plane (in the half-space not contain- */
+/* ing the origin) defined by (N1,N2,N3), or equivalently, if */
+/* the projection of N4 onto this plane is interior to the */
+/* circumcircle of (N1,N2,N3). The decision will be for no */
+/* swap if the quadrilateral is not strictly convex. */
+
+
+/* On input: */
+
+/* N1,N2,N3,N4 = Indexes of the four nodes defining the */
+/* quadrilateral with N1 adjacent to N2, */
+/* and (N1,N2,N3) in counterclockwise */
+/* order. The arc connecting N1 to N2 */
+/* should be replaced by an arc connec- */
+/* ting N3 to N4 if SWPTST = TRUE. Refer */
+/* to Subroutine SWAP. */
+
+/* X,Y,Z = Arrays of length N containing the Cartesian */
+/* coordinates of the nodes. (X(I),Y(I),Z(I)) */
+/* define node I for I = N1, N2, N3, and N4. */
+
+/* Input parameters are not altered by this routine. */
+
+/* On output: */
+
+/* SWPTST = TRUE if and only if the arc connecting N1 */
+/* and N2 should be swapped for an arc con- */
+/* necting N3 and N4. */
+
+/* Modules required by SWPTST: None */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* DX1,DY1,DZ1 = Coordinates of N4->N1 */
+/* DX2,DY2,DZ2 = Coordinates of N4->N2 */
+/* DX3,DY3,DZ3 = Coordinates of N4->N3 */
+/* X4,Y4,Z4 = Coordinates of N4 */
+
+ /* Parameter adjustments */
+ --z__;
+ --y;
+ --x;
+
+ /* Function Body */
+ x4 = x[*n4];
+ y4 = y[*n4];
+ z4 = z__[*n4];
+ dx1 = x[*n1] - x4;
+ dx2 = x[*n2] - x4;
+ dx3 = x[*n3] - x4;
+ dy1 = y[*n1] - y4;
+ dy2 = y[*n2] - y4;
+ dy3 = y[*n3] - y4;
+ dz1 = z__[*n1] - z4;
+ dz2 = z__[*n2] - z4;
+ dz3 = z__[*n3] - z4;
+
+/* N4 lies above the plane of (N1,N2,N3) iff N3 lies above */
+/* the plane of (N2,N1,N4) iff Det(N3-N4,N2-N4,N1-N4) = */
+/* (N3-N4,N2-N4 X N1-N4) > 0. */
+
+ ret_val = dx3 * (dy2 * dz1 - dy1 * dz2) - dy3 * (dx2 * dz1 - dx1 * dz2) +
+ dz3 * (dx2 * dy1 - dx1 * dy2) > 0.;
+ return ret_val;
+} /* swptst_ */
+
+/* Subroutine */ int trans_(int *n, double *rlat, double *rlon,
+ double *x, double *y, double *z__)
+{
+ /* System generated locals */
+ int i__1;
+
+ /* Local variables */
+ static int i__, nn;
+ static double phi, theta, cosphi;
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 04/08/90 */
+
+/* This subroutine transforms spherical coordinates into */
+/* Cartesian coordinates on the unit sphere for input to */
+/* Subroutine TRMESH. Storage for X and Y may coincide with */
+/* storage for RLAT and RLON if the latter need not be saved. */
+
+
+/* On input: */
+
+/* N = Number of nodes (points on the unit sphere) */
+/* whose coordinates are to be transformed. */
+
+/* RLAT = Array of length N containing latitudinal */
+/* coordinates of the nodes in radians. */
+
+/* RLON = Array of length N containing longitudinal */
+/* coordinates of the nodes in radians. */
+
+/* The above parameters are not altered by this routine. */
+
+/* X,Y,Z = Arrays of length at least N. */
+
+/* On output: */
+
+/* X,Y,Z = Cartesian coordinates in the range -1 to 1. */
+/* X(I)**2 + Y(I)**2 + Z(I)**2 = 1 for I = 1 */
+/* to N. */
+
+/* Modules required by TRANS: None */
+
+/* Intrinsic functions called by TRANS: COS, SIN */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* COSPHI = cos(PHI) */
+/* I = DO-loop index */
+/* NN = Local copy of N */
+/* PHI = Latitude */
+/* THETA = Longitude */
+
+ /* Parameter adjustments */
+ --z__;
+ --y;
+ --x;
+ --rlon;
+ --rlat;
+
+ /* Function Body */
+ nn = *n;
+ i__1 = nn;
+ for (i__ = 1; i__ <= i__1; ++i__)
+ {
+ phi = rlat[i__];
+ theta = rlon[i__];
+ cosphi = cos(phi);
+ x[i__] = cosphi * cos(theta);
+ y[i__] = cosphi * sin(theta);
+ z__[i__] = sin(phi);
+ /* L1: */
+ }
+ return 0;
+} /* trans_ */
+
+/* Subroutine */ int trfind_(int *nst, double *p, int *n,
+ double *x, double *y, double *z__, int *list, int
+ *lptr, int *lend, double *b1, double *b2, double *b3,
+ int *i1, int *i2, int *i3)
+{
+ /* Initialized data */
+
+ static int ix = 1;
+ static int iy = 2;
+ static int iz = 3;
+
+ /* System generated locals */
+ int i__1;
+ double d__1, d__2;
+
+ /* Local variables */
+ static double q[3];
+ static int n0, n1, n2, n3, n4, nf;
+ static double s12;
+ static int nl, lp;
+ static double xp, yp, zp;
+ static int n1s, n2s;
+ static double eps, tol, ptn1, ptn2;
+ static int next;
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 11/30/99 */
+
+/* This subroutine locates a point P relative to a triangu- */
+/* lation created by Subroutine TRMESH. If P is contained in */
+/* a triangle, the three vertex indexes and barycentric coor- */
+/* dinates are returned. Otherwise, the indexes of the */
+/* visible boundary nodes are returned. */
+
+
+/* On input: */
+
+/* NST = Index of a node at which TRFIND begins its */
+/* search. Search time depends on the proximity */
+/* of this node to P. */
+
+/* P = Array of length 3 containing the x, y, and z */
+/* coordinates (in that order) of the point P to be */
+/* located. */
+
+/* N = Number of nodes in the triangulation. N .GE. 3. */
+
+/* X,Y,Z = Arrays of length N containing the Cartesian */
+/* coordinates of the triangulation nodes (unit */
+/* vectors). (X(I),Y(I),Z(I)) defines node I */
+/* for I = 1 to N. */
+
+/* LIST,LPTR,LEND = Data structure defining the trian- */
+/* gulation. Refer to Subroutine */
+/* TRMESH. */
+
+/* Input parameters are not altered by this routine. */
+
+/* On output: */
+
+/* B1,B2,B3 = Unnormalized barycentric coordinates of */
+/* the central projection of P onto the un- */
+/* derlying planar triangle if P is in the */
+/* convex hull of the nodes. These parame- */
+/* ters are not altered if I1 = 0. */
+
+/* I1,I2,I3 = Counterclockwise-ordered vertex indexes */
+/* of a triangle containing P if P is con- */
+/* tained in a triangle. If P is not in the */
+/* convex hull of the nodes, I1 and I2 are */
+/* the rightmost and leftmost (boundary) */
+/* nodes that are visible from P, and */
+/* I3 = 0. (If all boundary nodes are vis- */
+/* ible from P, then I1 and I2 coincide.) */
+/* I1 = I2 = I3 = 0 if P and all of the */
+/* nodes are coplanar (lie on a common great */
+/* circle. */
+
+/* Modules required by TRFIND: JRAND, LSTPTR, STORE */
+
+/* Intrinsic function called by TRFIND: ABS */
+
+/* *********************************************************** */
+
+
+ /* Parameter adjustments */
+ --p;
+ --lend;
+ --z__;
+ --y;
+ --x;
+ --list;
+ --lptr;
+
+ /* Function Body */
+
+/* Local parameters: */
+
+/* EPS = Machine precision */
+/* IX,IY,IZ = int seeds for JRAND */
+/* LP = LIST pointer */
+/* N0,N1,N2 = Nodes in counterclockwise order defining a */
+/* cone (with vertex N0) containing P, or end- */
+/* points of a boundary edge such that P Right */
+/* N1->N2 */
+/* N1S,N2S = Initially-determined values of N1 and N2 */
+/* N3,N4 = Nodes opposite N1->N2 and N2->N1, respectively */
+/* NEXT = Candidate for I1 or I2 when P is exterior */
+/* NF,NL = First and last neighbors of N0, or first */
+/* (rightmost) and last (leftmost) nodes */
+/* visible from P when P is exterior to the */
+/* triangulation */
+/* PTN1 = Scalar product <P,N1> */
+/* PTN2 = Scalar product <P,N2> */
+/* Q = (N2 X N1) X N2 or N1 X (N2 X N1) -- used in */
+/* the boundary traversal when P is exterior */
+/* S12 = Scalar product <N1,N2> */
+/* TOL = Tolerance (multiple of EPS) defining an upper */
+/* bound on the magnitude of a negative bary- */
+/* centric coordinate (B1 or B2) for P in a */
+/* triangle -- used to avoid an infinite number */
+/* of restarts with 0 <= B3 < EPS and B1 < 0 or */
+/* B2 < 0 but small in magnitude */
+/* XP,YP,ZP = Local variables containing P(1), P(2), and P(3) */
+/* X0,Y0,Z0 = Dummy arguments for DET */
+/* X1,Y1,Z1 = Dummy arguments for DET */
+/* X2,Y2,Z2 = Dummy arguments for DET */
+
+/* Statement function: */
+
+/* DET(X1,...,Z0) .GE. 0 if and only if (X0,Y0,Z0) is in the */
+/* (closed) left hemisphere defined by */
+/* the plane containing (0,0,0), */
+/* (X1,Y1,Z1), and (X2,Y2,Z2), where */
+/* left is defined relative to an ob- */
+/* server at (X1,Y1,Z1) facing */
+/* (X2,Y2,Z2). */
+
+
+/* Initialize variables. */
+
+ xp = p[1];
+ yp = p[2];
+ zp = p[3];
+ n0 = *nst;
+ if (n0 < 1 || n0 > *n) {
+ n0 = jrand_(n, &ix, &iy, &iz);
+ }
+
+/* Compute the relative machine precision EPS and TOL. */
+
+ eps = 1.;
+L1:
+ eps /= 2.;
+ d__1 = eps + 1.;
+ if (store_(&d__1) > 1.) {
+ goto L1;
+ }
+ eps *= 2.;
+ tol = eps * 100.;
+
+/* Set NF and NL to the first and last neighbors of N0, and */
+/* initialize N1 = NF. */
+
+L2:
+ lp = lend[n0];
+ nl = list[lp];
+ lp = lptr[lp];
+ nf = list[lp];
+ n1 = nf;
+
+/* Find a pair of adjacent neighbors N1,N2 of N0 that define */
+/* a wedge containing P: P LEFT N0->N1 and P RIGHT N0->N2. */
+
+ if (nl > 0) {
+
+/* N0 is an interior node. Find N1. */
+
+L3:
+ if (xp * (y[n0] * z__[n1] - y[n1] * z__[n0]) - yp * (x[n0] * z__[n1]
+ - x[n1] * z__[n0]) + zp * (x[n0] * y[n1] - x[n1] * y[n0]) <
+ 0.) {
+ lp = lptr[lp];
+ n1 = list[lp];
+ if (n1 == nl) {
+ goto L6;
+ }
+ goto L3;
+ }
+ } else {
+
+/* N0 is a boundary node. Test for P exterior. */
+
+ nl = -nl;
+ if (xp * (y[n0] * z__[nf] - y[nf] * z__[n0]) - yp * (x[n0] * z__[nf]
+ - x[nf] * z__[n0]) + zp * (x[n0] * y[nf] - x[nf] * y[n0]) <
+ 0.) {
+
+/* P is to the right of the boundary edge N0->NF. */
+
+ n1 = n0;
+ n2 = nf;
+ goto L9;
+ }
+ if (xp * (y[nl] * z__[n0] - y[n0] * z__[nl]) - yp * (x[nl] * z__[n0]
+ - x[n0] * z__[nl]) + zp * (x[nl] * y[n0] - x[n0] * y[nl]) <
+ 0.) {
+
+/* P is to the right of the boundary edge NL->N0. */
+
+ n1 = nl;
+ n2 = n0;
+ goto L9;
+ }
+ }
+
+/* P is to the left of arcs N0->N1 and NL->N0. Set N2 to the */
+/* next neighbor of N0 (following N1). */
+
+L4:
+ lp = lptr[lp];
+ n2 = (i__1 = list[lp], abs(i__1));
+ if (xp * (y[n0] * z__[n2] - y[n2] * z__[n0]) - yp * (x[n0] * z__[n2] - x[
+ n2] * z__[n0]) + zp * (x[n0] * y[n2] - x[n2] * y[n0]) < 0.) {
+ goto L7;
+ }
+ n1 = n2;
+ if (n1 != nl) {
+ goto L4;
+ }
+ if (xp * (y[n0] * z__[nf] - y[nf] * z__[n0]) - yp * (x[n0] * z__[nf] - x[
+ nf] * z__[n0]) + zp * (x[n0] * y[nf] - x[nf] * y[n0]) < 0.) {
+ goto L6;
+ }
+
+/* P is left of or on arcs N0->NB for all neighbors NB */
+/* of N0. Test for P = +/-N0. */
+
+ d__2 = (d__1 = x[n0] * xp + y[n0] * yp + z__[n0] * zp, abs(d__1));
+ if (store_(&d__2) < 1. - eps * 4.) {
+
+/* All points are collinear iff P Left NB->N0 for all */
+/* neighbors NB of N0. Search the neighbors of N0. */
+/* Note: N1 = NL and LP points to NL. */
+
+L5:
+ if (xp * (y[n1] * z__[n0] - y[n0] * z__[n1]) - yp * (x[n1] * z__[n0]
+ - x[n0] * z__[n1]) + zp * (x[n1] * y[n0] - x[n0] * y[n1]) >=
+ 0.) {
+ lp = lptr[lp];
+ n1 = (i__1 = list[lp], abs(i__1));
+ if (n1 == nl) {
+ goto L14;
+ }
+ goto L5;
+ }
+ }
+
+/* P is to the right of N1->N0, or P = +/-N0. Set N0 to N1 */
+/* and start over. */
+
+ n0 = n1;
+ goto L2;
+
+/* P is between arcs N0->N1 and N0->NF. */
+
+L6:
+ n2 = nf;
+
+/* P is contained in a wedge defined by geodesics N0-N1 and */
+/* N0-N2, where N1 is adjacent to N2. Save N1 and N2 to */
+/* test for cycling. */
+
+L7:
+ n3 = n0;
+ n1s = n1;
+ n2s = n2;
+
+/* Top of edge-hopping loop: */
+
+L8:
+ *b3 = xp * (y[n1] * z__[n2] - y[n2] * z__[n1]) - yp * (x[n1] * z__[n2] -
+ x[n2] * z__[n1]) + zp * (x[n1] * y[n2] - x[n2] * y[n1]);
+ if (*b3 < 0.) {
+
+/* Set N4 to the first neighbor of N2 following N1 (the */
+/* node opposite N2->N1) unless N1->N2 is a boundary arc. */
+
+ lp = lstptr_(&lend[n2], &n1, &list[1], &lptr[1]);
+ if (list[lp] < 0) {
+ goto L9;
+ }
+ lp = lptr[lp];
+ n4 = (i__1 = list[lp], abs(i__1));
+
+/* Define a new arc N1->N2 which intersects the geodesic */
+/* N0-P. */
+
+ if (xp * (y[n0] * z__[n4] - y[n4] * z__[n0]) - yp * (x[n0] * z__[n4]
+ - x[n4] * z__[n0]) + zp * (x[n0] * y[n4] - x[n4] * y[n0]) <
+ 0.) {
+ n3 = n2;
+ n2 = n4;
+ n1s = n1;
+ if (n2 != n2s && n2 != n0) {
+ goto L8;
+ }
+ } else {
+ n3 = n1;
+ n1 = n4;
+ n2s = n2;
+ if (n1 != n1s && n1 != n0) {
+ goto L8;
+ }
+ }
+
+/* The starting node N0 or edge N1-N2 was encountered */
+/* again, implying a cycle (infinite loop). Restart */
+/* with N0 randomly selected. */
+
+ n0 = jrand_(n, &ix, &iy, &iz);
+ goto L2;
+ }
+
+/* P is in (N1,N2,N3) unless N0, N1, N2, and P are collinear */
+/* or P is close to -N0. */
+
+ if (*b3 >= eps) {
+
+/* B3 .NE. 0. */
+
+ *b1 = xp * (y[n2] * z__[n3] - y[n3] * z__[n2]) - yp * (x[n2] * z__[n3]
+ - x[n3] * z__[n2]) + zp * (x[n2] * y[n3] - x[n3] * y[n2]);
+ *b2 = xp * (y[n3] * z__[n1] - y[n1] * z__[n3]) - yp * (x[n3] * z__[n1]
+ - x[n1] * z__[n3]) + zp * (x[n3] * y[n1] - x[n1] * y[n3]);
+ if (*b1 < -tol || *b2 < -tol) {
+
+/* Restart with N0 randomly selected. */
+
+ n0 = jrand_(n, &ix, &iy, &iz);
+ goto L2;
+ }
+ } else {
+
+/* B3 = 0 and thus P lies on N1->N2. Compute */
+/* B1 = Det(P,N2 X N1,N2) and B2 = Det(P,N1,N2 X N1). */
+
+ *b3 = 0.;
+ s12 = x[n1] * x[n2] + y[n1] * y[n2] + z__[n1] * z__[n2];
+ ptn1 = xp * x[n1] + yp * y[n1] + zp * z__[n1];
+ ptn2 = xp * x[n2] + yp * y[n2] + zp * z__[n2];
+ *b1 = ptn1 - s12 * ptn2;
+ *b2 = ptn2 - s12 * ptn1;
+ if (*b1 < -tol || *b2 < -tol) {
+
+/* Restart with N0 randomly selected. */
+
+ n0 = jrand_(n, &ix, &iy, &iz);
+ goto L2;
+ }
+ }
+
+/* P is in (N1,N2,N3). */
+
+ *i1 = n1;
+ *i2 = n2;
+ *i3 = n3;
+ if (*b1 < 0.) {
+ *b1 = 0.;
+ }
+ if (*b2 < 0.) {
+ *b2 = 0.;
+ }
+ return 0;
+
+/* P Right N1->N2, where N1->N2 is a boundary edge. */
+/* Save N1 and N2, and set NL = 0 to indicate that */
+/* NL has not yet been found. */
+
+L9:
+ n1s = n1;
+ n2s = n2;
+ nl = 0;
+
+/* Counterclockwise Boundary Traversal: */
+
+L10:
+ lp = lend[n2];
+ lp = lptr[lp];
+ next = list[lp];
+ if (xp * (y[n2] * z__[next] - y[next] * z__[n2]) - yp * (x[n2] * z__[next]
+ - x[next] * z__[n2]) + zp * (x[n2] * y[next] - x[next] * y[n2])
+ >= 0.) {
+
+/* N2 is the rightmost visible node if P Forward N2->N1 */
+/* or NEXT Forward N2->N1. Set Q to (N2 X N1) X N2. */
+
+ s12 = x[n1] * x[n2] + y[n1] * y[n2] + z__[n1] * z__[n2];
+ q[0] = x[n1] - s12 * x[n2];
+ q[1] = y[n1] - s12 * y[n2];
+ q[2] = z__[n1] - s12 * z__[n2];
+ if (xp * q[0] + yp * q[1] + zp * q[2] >= 0.) {
+ goto L11;
+ }
+ if (x[next] * q[0] + y[next] * q[1] + z__[next] * q[2] >= 0.) {
+ goto L11;
+ }
+
+/* N1, N2, NEXT, and P are nearly collinear, and N2 is */
+/* the leftmost visible node. */
+
+ nl = n2;
+ }
+
+/* Bottom of counterclockwise loop: */
+
+ n1 = n2;
+ n2 = next;
+ if (n2 != n1s) {
+ goto L10;
+ }
+
+/* All boundary nodes are visible from P. */
+
+ *i1 = n1s;
+ *i2 = n1s;
+ *i3 = 0;
+ return 0;
+
+/* N2 is the rightmost visible node. */
+
+L11:
+ nf = n2;
+ if (nl == 0) {
+
+/* Restore initial values of N1 and N2, and begin the search */
+/* for the leftmost visible node. */
+
+ n2 = n2s;
+ n1 = n1s;
+
+/* Clockwise Boundary Traversal: */
+
+L12:
+ lp = lend[n1];
+ next = -list[lp];
+ if (xp * (y[next] * z__[n1] - y[n1] * z__[next]) - yp * (x[next] *
+ z__[n1] - x[n1] * z__[next]) + zp * (x[next] * y[n1] - x[n1] *
+ y[next]) >= 0.) {
+
+/* N1 is the leftmost visible node if P or NEXT is */
+/* forward of N1->N2. Compute Q = N1 X (N2 X N1). */
+
+ s12 = x[n1] * x[n2] + y[n1] * y[n2] + z__[n1] * z__[n2];
+ q[0] = x[n2] - s12 * x[n1];
+ q[1] = y[n2] - s12 * y[n1];
+ q[2] = z__[n2] - s12 * z__[n1];
+ if (xp * q[0] + yp * q[1] + zp * q[2] >= 0.) {
+ goto L13;
+ }
+ if (x[next] * q[0] + y[next] * q[1] + z__[next] * q[2] >= 0.) {
+ goto L13;
+ }
+
+/* P, NEXT, N1, and N2 are nearly collinear and N1 is the */
+/* rightmost visible node. */
+
+ nf = n1;
+ }
+
+/* Bottom of clockwise loop: */
+
+ n2 = n1;
+ n1 = next;
+ if (n1 != n1s) {
+ goto L12;
+ }
+
+/* All boundary nodes are visible from P. */
+
+ *i1 = n1;
+ *i2 = n1;
+ *i3 = 0;
+ return 0;
+
+/* N1 is the leftmost visible node. */
+
+L13:
+ nl = n1;
+ }
+
+/* NF and NL have been found. */
+
+ *i1 = nf;
+ *i2 = nl;
+ *i3 = 0;
+ return 0;
+
+/* All points are collinear (coplanar). */
+
+L14:
+ *i1 = 0;
+ *i2 = 0;
+ *i3 = 0;
+ return 0;
+} /* trfind_ */
+
+/* Subroutine */ int trlist_(int *n, int *list, int *lptr,
+ int *lend, int *nrow, int *nt, int *ltri, int *
+ ier)
+{
+ /* System generated locals */
+ int ltri_dim1, ltri_offset, i__1, i__2;
+
+ /* Local variables */
+ static int i__, j, i1, i2, i3, n1, n2, n3, ka, kn, lp, kt, nm2, lp2,
+ lpl, isv;
+ static int arcs;
+ static int lpln1;
+
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/20/96 */
+
+/* This subroutine converts a triangulation data structure */
+/* from the linked list created by Subroutine TRMESH to a */
+/* triangle list. */
+
+/* On input: */
+
+/* N = Number of nodes in the triangulation. N .GE. 3. */
+
+/* LIST,LPTR,LEND = Linked list data structure defin- */
+/* ing the triangulation. Refer to */
+/* Subroutine TRMESH. */
+
+/* NROW = Number of rows (entries per triangle) re- */
+/* served for the triangle list LTRI. The value */
+/* must be 6 if only the vertex indexes and */
+/* neighboring triangle indexes are to be */
+/* stored, or 9 if arc indexes are also to be */
+/* assigned and stored. Refer to LTRI. */
+
+/* The above parameters are not altered by this routine. */
+
+/* LTRI = int array of length at least NROW*NT, */
+/* where NT is at most 2N-4. (A sufficient */
+/* length is 12N if NROW=6 or 18N if NROW=9.) */
+
+/* On output: */
+
+/* NT = Number of triangles in the triangulation unless */
+/* IER .NE. 0, in which case NT = 0. NT = 2N-NB-2 */
+/* if NB .GE. 3 or 2N-4 if NB = 0, where NB is the */
+/* number of boundary nodes. */
+
+/* LTRI = NROW by NT array whose J-th column contains */
+/* the vertex nodal indexes (first three rows), */
+/* neighboring triangle indexes (second three */
+/* rows), and, if NROW = 9, arc indexes (last */
+/* three rows) associated with triangle J for */
+/* J = 1,...,NT. The vertices are ordered */
+/* counterclockwise with the first vertex taken */
+/* to be the one with smallest index. Thus, */
+/* LTRI(2,J) and LTRI(3,J) are larger than */
+/* LTRI(1,J) and index adjacent neighbors of */
+/* node LTRI(1,J). For I = 1,2,3, LTRI(I+3,J) */
+/* and LTRI(I+6,J) index the triangle and arc, */
+/* respectively, which are opposite (not shared */
+/* by) node LTRI(I,J), with LTRI(I+3,J) = 0 if */
+/* LTRI(I+6,J) indexes a boundary arc. Vertex */
+/* indexes range from 1 to N, triangle indexes */
+/* from 0 to NT, and, if included, arc indexes */
+/* from 1 to NA, where NA = 3N-NB-3 if NB .GE. 3 */
+/* or 3N-6 if NB = 0. The triangles are or- */
+/* dered on first (smallest) vertex indexes. */
+
+/* IER = Error indicator. */
+/* IER = 0 if no errors were encountered. */
+/* IER = 1 if N or NROW is outside its valid */
+/* range on input. */
+/* IER = 2 if the triangulation data structure */
+/* (LIST,LPTR,LEND) is invalid. Note, */
+/* however, that these arrays are not */
+/* completely tested for validity. */
+
+/* Modules required by TRLIST: None */
+
+/* Intrinsic function called by TRLIST: ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* ARCS = int variable with value TRUE iff are */
+/* indexes are to be stored */
+/* I,J = LTRI row indexes (1 to 3) associated with */
+/* triangles KT and KN, respectively */
+/* I1,I2,I3 = Nodal indexes of triangle KN */
+/* ISV = Variable used to permute indexes I1,I2,I3 */
+/* KA = Arc index and number of currently stored arcs */
+/* KN = Index of the triangle that shares arc I1-I2 */
+/* with KT */
+/* KT = Triangle index and number of currently stored */
+/* triangles */
+/* LP = LIST pointer */
+/* LP2 = Pointer to N2 as a neighbor of N1 */
+/* LPL = Pointer to the last neighbor of I1 */
+/* LPLN1 = Pointer to the last neighbor of N1 */
+/* N1,N2,N3 = Nodal indexes of triangle KT */
+/* NM2 = N-2 */
+
+
+/* Test for invalid input parameters. */
+
+ /* Parameter adjustments */
+ --lend;
+ --list;
+ --lptr;
+ ltri_dim1 = *nrow;
+ ltri_offset = 1 + ltri_dim1;
+ ltri -= ltri_offset;
+
+ /* Function Body */
+ if (*n < 3 || (*nrow != 6 && *nrow != 9)) {
+ goto L11;
+ }
+
+/* Initialize parameters for loop on triangles KT = (N1,N2, */
+/* N3), where N1 < N2 and N1 < N3. */
+
+/* ARCS = TRUE iff arc indexes are to be stored. */
+/* KA,KT = Numbers of currently stored arcs and triangles. */
+/* NM2 = Upper bound on candidates for N1. */
+
+ arcs = *nrow == 9;
+ ka = 0;
+ kt = 0;
+ nm2 = *n - 2;
+
+/* Loop on nodes N1. */
+
+ i__1 = nm2;
+ for (n1 = 1; n1 <= i__1; ++n1) {
+
+/* Loop on pairs of adjacent neighbors (N2,N3). LPLN1 points */
+/* to the last neighbor of N1, and LP2 points to N2. */
+
+ lpln1 = lend[n1];
+ lp2 = lpln1;
+L1:
+ lp2 = lptr[lp2];
+ n2 = list[lp2];
+ lp = lptr[lp2];
+ n3 = (i__2 = list[lp], abs(i__2));
+ if (n2 < n1 || n3 < n1) {
+ goto L8;
+ }
+
+/* Add a new triangle KT = (N1,N2,N3). */
+
+ ++kt;
+ ltri[kt * ltri_dim1 + 1] = n1;
+ ltri[kt * ltri_dim1 + 2] = n2;
+ ltri[kt * ltri_dim1 + 3] = n3;
+
+/* Loop on triangle sides (I2,I1) with neighboring triangles */
+/* KN = (I1,I2,I3). */
+
+ for (i__ = 1; i__ <= 3; ++i__) {
+ if (i__ == 1) {
+ i1 = n3;
+ i2 = n2;
+ } else if (i__ == 2) {
+ i1 = n1;
+ i2 = n3;
+ } else {
+ i1 = n2;
+ i2 = n1;
+ }
+
+/* Set I3 to the neighbor of I1 that follows I2 unless */
+/* I2->I1 is a boundary arc. */
+
+ lpl = lend[i1];
+ lp = lptr[lpl];
+L2:
+ if (list[lp] == i2) {
+ goto L3;
+ }
+ lp = lptr[lp];
+ if (lp != lpl) {
+ goto L2;
+ }
+
+/* I2 is the last neighbor of I1 unless the data structure */
+/* is invalid. Bypass the search for a neighboring */
+/* triangle if I2->I1 is a boundary arc. */
+
+ if ((i__2 = list[lp], abs(i__2)) != i2) {
+ goto L12;
+ }
+ kn = 0;
+ if (list[lp] < 0) {
+ goto L6;
+ }
+
+/* I2->I1 is not a boundary arc, and LP points to I2 as */
+/* a neighbor of I1. */
+
+L3:
+ lp = lptr[lp];
+ i3 = (i__2 = list[lp], abs(i__2));
+
+/* Find J such that LTRI(J,KN) = I3 (not used if KN > KT), */
+/* and permute the vertex indexes of KN so that I1 is */
+/* smallest. */
+
+ if (i1 < i2 && i1 < i3) {
+ j = 3;
+ } else if (i2 < i3) {
+ j = 2;
+ isv = i1;
+ i1 = i2;
+ i2 = i3;
+ i3 = isv;
+ } else {
+ j = 1;
+ isv = i1;
+ i1 = i3;
+ i3 = i2;
+ i2 = isv;
+ }
+
+/* Test for KN > KT (triangle index not yet assigned). */
+
+ if (i1 > n1) {
+ goto L7;
+ }
+
+/* Find KN, if it exists, by searching the triangle list in */
+/* reverse order. */
+
+ for (kn = kt - 1; kn >= 1; --kn) {
+ if (ltri[kn * ltri_dim1 + 1] == i1 && ltri[kn * ltri_dim1 + 2]
+ == i2 && ltri[kn * ltri_dim1 + 3] == i3) {
+ goto L5;
+ }
+/* L4: */
+ }
+ goto L7;
+
+/* Store KT as a neighbor of KN. */
+
+L5:
+ ltri[j + 3 + kn * ltri_dim1] = kt;
+
+/* Store KN as a neighbor of KT, and add a new arc KA. */
+
+L6:
+ ltri[i__ + 3 + kt * ltri_dim1] = kn;
+ if (arcs) {
+ ++ka;
+ ltri[i__ + 6 + kt * ltri_dim1] = ka;
+ if (kn != 0) {
+ ltri[j + 6 + kn * ltri_dim1] = ka;
+ }
+ }
+L7:
+ ;
+ }
+
+/* Bottom of loop on triangles. */
+
+L8:
+ if (lp2 != lpln1) {
+ goto L1;
+ }
+/* L9: */
+ }
+
+/* No errors encountered. */
+
+ *nt = kt;
+ *ier = 0;
+ return 0;
+
+/* Invalid input parameter. */
+
+L11:
+ *nt = 0;
+ *ier = 1;
+ return 0;
+
+/* Invalid triangulation data structure: I1 is a neighbor of */
+/* I2, but I2 is not a neighbor of I1. */
+
+L12:
+ *nt = 0;
+ *ier = 2;
+ return 0;
+} /* trlist_ */
+
+/* Subroutine */ int trmesh_(int *n, double *x, double *y,
+ double *z__, int *list, int *lptr, int *lend, int
+ *lnew, int *near__, int *next, double *dist, int *ier)
+{
+ /* System generated locals */
+ int i__1, i__2;
+
+ /* Local variables */
+ static double d__;
+ static int i__, j, k;
+ static double d1, d2, d3;
+ static int i0, lp, nn, lpl;
+ static int nexti;
+
+/* *********************************************************** */
+
+/* From STRIPACK */
+/* Robert J. Renka */
+/* Dept. of Computer Science */
+/* Univ. of North Texas */
+/* renka at cs.unt.edu */
+/* 07/08/99 */
+
+/* This subroutine creates a Delaunay triangulation of a */
+/* set of N arbitrarily distributed points, referred to as */
+/* nodes, on the surface of the unit sphere. The Delaunay */
+/* triangulation is defined as a set of (spherical) triangles */
+/* with the following five properties: */
+
+/* 1) The triangle vertices are nodes. */
+/* 2) No triangle contains a node other than its vertices. */
+/* 3) The interiors of the triangles are pairwise disjoint. */
+/* 4) The union of triangles is the convex hull of the set */
+/* of nodes (the smallest convex set that contains */
+/* the nodes). If the nodes are not contained in a */
+/* single hemisphere, their convex hull is the en- */
+/* tire sphere and there are no boundary nodes. */
+/* Otherwise, there are at least three boundary nodes. */
+/* 5) The interior of the circumcircle of each triangle */
+/* contains no node. */
+
+/* The first four properties define a triangulation, and the */
+/* last property results in a triangulation which is as close */
+/* as possible to equiangular in a certain sense and which is */
+/* uniquely defined unless four or more nodes lie in a common */
+/* plane. This property makes the triangulation well-suited */
+/* for solving closest-point problems and for triangle-based */
+/* interpolation. */
+
+/* Provided the nodes are randomly ordered, the algorithm */
+/* has expected time complexity O(N*log(N)) for most nodal */
+/* distributions. Note, however, that the complexity may be */
+/* as high as O(N**2) if, for example, the nodes are ordered */
+/* on increasing latitude. */
+
+/* Spherical coordinates (latitude and longitude) may be */
+/* converted to Cartesian coordinates by Subroutine TRANS. */
+
+/* The following is a list of the software package modules */
+/* which a user may wish to call directly: */
+
+/* ADDNOD - Updates the triangulation by appending a new */
+/* node. */
+
+/* AREAS - Returns the area of a spherical triangle. */
+
+/* BNODES - Returns an array containing the indexes of the */
+/* boundary nodes (if any) in counterclockwise */
+/* order. Counts of boundary nodes, triangles, */
+/* and arcs are also returned. */
+
+/* CIRCUM - Returns the circumcenter of a spherical trian- */
+/* gle. */
+
+/* CRLIST - Returns the set of triangle circumcenters */
+/* (Voronoi vertices) and circumradii associated */
+/* with a triangulation. */
+
+/* DELARC - Deletes a boundary arc from a triangulation. */
+
+/* DELNOD - Updates the triangulation with a nodal deletion. */
+
+/* EDGE - Forces an arbitrary pair of nodes to be connec- */
+/* ted by an arc in the triangulation. */
+
+/* GETNP - Determines the ordered sequence of L closest */
+/* nodes to a given node, along with the associ- */
+/* ated distances. */
+
+/* INSIDE - Locates a point relative to a polygon on the */
+/* surface of the sphere. */
+
+/* INTRSC - Returns the point of intersection between a */
+/* pair of great circle arcs. */
+
+/* JRAND - Generates a uniformly distributed pseudo-random */
+/* int. */
+
+/* LEFT - Locates a point relative to a great circle. */
+
+/* NEARND - Returns the index of the nearest node to an */
+/* arbitrary point, along with its squared */
+/* distance. */
+
+/* SCOORD - Converts a point from Cartesian coordinates to */
+/* spherical coordinates. */
+
+/* STORE - Forces a value to be stored in main memory so */
+/* that the precision of floating point numbers */
+/* in memory locations rather than registers is */
+/* computed. */
+
+/* TRANS - Transforms spherical coordinates into Cartesian */
+/* coordinates on the unit sphere for input to */
+/* Subroutine TRMESH. */
+
+/* TRLIST - Converts the triangulation data structure to a */
+/* triangle list more suitable for use in a fin- */
+/* ite element code. */
+
+/* TRLPRT - Prints the triangle list created by Subroutine */
+/* TRLIST. */
+
+/* TRMESH - Creates a Delaunay triangulation of a set of */
+/* nodes. */
+
+/* TRPLOT - Creates a level-2 Encapsulated Postscript (EPS) */
+/* file containing a triangulation plot. */
+
+/* TRPRNT - Prints the triangulation data structure and, */
+/* optionally, the nodal coordinates. */
+
+/* VRPLOT - Creates a level-2 Encapsulated Postscript (EPS) */
+/* file containing a Voronoi diagram plot. */
+
+
+/* On input: */
+
+/* N = Number of nodes in the triangulation. N .GE. 3. */
+
+/* X,Y,Z = Arrays of length N containing the Cartesian */
+/* coordinates of distinct nodes. (X(K),Y(K), */
+/* Z(K)) is referred to as node K, and K is re- */
+/* ferred to as a nodal index. It is required */
+/* that X(K)**2 + Y(K)**2 + Z(K)**2 = 1 for all */
+/* K. The first three nodes must not be col- */
+/* linear (lie on a common great circle). */
+
+/* The above parameters are not altered by this routine. */
+
+/* LIST,LPTR = Arrays of length at least 6N-12. */
+
+/* LEND = Array of length at least N. */
+
+/* NEAR,NEXT,DIST = Work space arrays of length at */
+/* least N. The space is used to */
+/* efficiently determine the nearest */
+/* triangulation node to each un- */
+/* processed node for use by ADDNOD. */
+
+/* On output: */
+
+/* LIST = Set of nodal indexes which, along with LPTR, */
+/* LEND, and LNEW, define the triangulation as a */
+/* set of N adjacency lists -- counterclockwise- */
+/* ordered sequences of neighboring nodes such */
+/* that the first and last neighbors of a bound- */
+/* ary node are boundary nodes (the first neigh- */
+/* bor of an interior node is arbitrary). In */
+/* order to distinguish between interior and */
+/* boundary nodes, the last neighbor of each */
+/* boundary node is represented by the negative */
+/* of its index. */
+
+/* LPTR = Set of pointers (LIST indexes) in one-to-one */
+/* correspondence with the elements of LIST. */
+/* LIST(LPTR(I)) indexes the node which follows */
+/* LIST(I) in cyclical counterclockwise order */
+/* (the first neighbor follows the last neigh- */
+/* bor). */
+
+/* LEND = Set of pointers to adjacency lists. LEND(K) */
+/* points to the last neighbor of node K for */
+/* K = 1,...,N. Thus, LIST(LEND(K)) < 0 if and */
+/* only if K is a boundary node. */
+
+/* LNEW = Pointer to the first empty location in LIST */
+/* and LPTR (list length plus one). LIST, LPTR, */
+/* LEND, and LNEW are not altered if IER < 0, */
+/* and are incomplete if IER > 0. */
+
+/* NEAR,NEXT,DIST = Garbage. */
+
+/* IER = Error indicator: */
+/* IER = 0 if no errors were encountered. */
+/* IER = -1 if N < 3 on input. */
+/* IER = -2 if the first three nodes are */
+/* collinear. */
+/* IER = L if nodes L and M coincide for some */
+/* M > L. The data structure represents */
+/* a triangulation of nodes 1 to M-1 in */
+/* this case. */
+
+/* Modules required by TRMESH: ADDNOD, BDYADD, COVSPH, */
+/* INSERT, INTADD, JRAND, */
+/* LEFT, LSTPTR, STORE, SWAP, */
+/* SWPTST, TRFIND */
+
+/* Intrinsic function called by TRMESH: ABS */
+
+/* *********************************************************** */
+
+
+/* Local parameters: */
+
+/* D = (Negative cosine of) distance from node K to */
+/* node I */
+/* D1,D2,D3 = Distances from node K to nodes 1, 2, and 3, */
+/* respectively */
+/* I,J = Nodal indexes */
+/* I0 = Index of the node preceding I in a sequence of */
+/* unprocessed nodes: I = NEXT(I0) */
+/* K = Index of node to be added and DO-loop index: */
+/* K > 3 */
+/* LP = LIST index (pointer) of a neighbor of K */
+/* LPL = Pointer to the last neighbor of K */
+/* NEXTI = NEXT(I) */
+/* NN = Local copy of N */
+
+ /* Parameter adjustments */
+ --dist;
+ --next;
+ --near__;
+ --lend;
+ --z__;
+ --y;
+ --x;
+ --list;
+ --lptr;
+
+ /* Function Body */
+ nn = *n;
+ if (nn < 3) {
+ *ier = -1;
+ return 0;
+ }
+
+/* Store the first triangle in the linked list. */
+
+ if (! left_(&x[1], &y[1], &z__[1], &x[2], &y[2], &z__[2], &x[3], &y[3], &
+ z__[3])) {
+
+/* The first triangle is (3,2,1) = (2,1,3) = (1,3,2). */
+
+ list[1] = 3;
+ lptr[1] = 2;
+ list[2] = -2;
+ lptr[2] = 1;
+ lend[1] = 2;
+
+ list[3] = 1;
+ lptr[3] = 4;
+ list[4] = -3;
+ lptr[4] = 3;
+ lend[2] = 4;
+
+ list[5] = 2;
+ lptr[5] = 6;
+ list[6] = -1;
+ lptr[6] = 5;
+ lend[3] = 6;
+
+ } else if (! left_(&x[2], &y[2], &z__[2], &x[1], &y[1], &z__[1], &x[3], &
+ y[3], &z__[3])) {
+
+/* The first triangle is (1,2,3): 3 Strictly Left 1->2, */
+/* i.e., node 3 lies in the left hemisphere defined by */
+/* arc 1->2. */
+
+ list[1] = 2;
+ lptr[1] = 2;
+ list[2] = -3;
+ lptr[2] = 1;
+ lend[1] = 2;
+
+ list[3] = 3;
+ lptr[3] = 4;
+ list[4] = -1;
+ lptr[4] = 3;
+ lend[2] = 4;
+
+ list[5] = 1;
+ lptr[5] = 6;
+ list[6] = -2;
+ lptr[6] = 5;
+ lend[3] = 6;
+
+ } else {
+
+/* The first three nodes are collinear. */
+
+ *ier = -2;
+ return 0;
+ }
+
+/* Initialize LNEW and test for N = 3. */
+
+ *lnew = 7;
+ if (nn == 3) {
+ *ier = 0;
+ return 0;
+ }
+
+/* A nearest-node data structure (NEAR, NEXT, and DIST) is */
+/* used to obtain an expected-time (N*log(N)) incremental */
+/* algorithm by enabling constant search time for locating */
+/* each new node in the triangulation. */
+
+/* For each unprocessed node K, NEAR(K) is the index of the */
+/* triangulation node closest to K (used as the starting */
+/* point for the search in Subroutine TRFIND) and DIST(K) */
+/* is an increasing function of the arc length (angular */
+/* distance) between nodes K and NEAR(K): -Cos(a) for arc */
+/* length a. */
+
+/* Since it is necessary to efficiently find the subset of */
+/* unprocessed nodes associated with each triangulation */
+/* node J (those that have J as their NEAR entries), the */
+/* subsets are stored in NEAR and NEXT as follows: for */
+/* each node J in the triangulation, I = NEAR(J) is the */
+/* first unprocessed node in J's set (with I = 0 if the */
+/* set is empty), L = NEXT(I) (if I > 0) is the second, */
+/* NEXT(L) (if L > 0) is the third, etc. The nodes in each */
+/* set are initially ordered by increasing indexes (which */
+/* maximizes efficiency) but that ordering is not main- */
+/* tained as the data structure is updated. */
+
+/* Initialize the data structure for the single triangle. */
+
+ near__[1] = 0;
+ near__[2] = 0;
+ near__[3] = 0;
+ for (k = nn; k >= 4; --k) {
+ d1 = -(x[k] * x[1] + y[k] * y[1] + z__[k] * z__[1]);
+ d2 = -(x[k] * x[2] + y[k] * y[2] + z__[k] * z__[2]);
+ d3 = -(x[k] * x[3] + y[k] * y[3] + z__[k] * z__[3]);
+ if (d1 <= d2 && d1 <= d3) {
+ near__[k] = 1;
+ dist[k] = d1;
+ next[k] = near__[1];
+ near__[1] = k;
+ } else if (d2 <= d1 && d2 <= d3) {
+ near__[k] = 2;
+ dist[k] = d2;
+ next[k] = near__[2];
+ near__[2] = k;
+ } else {
+ near__[k] = 3;
+ dist[k] = d3;
+ next[k] = near__[3];
+ near__[3] = k;
+ }
+/* L1: */
+ }
+
+/* Add the remaining nodes */
+
+ i__1 = nn;
+ for (k = 4; k <= i__1; ++k) {
+ addnod_(&near__[k], &k, &x[1], &y[1], &z__[1], &list[1], &lptr[1], &
+ lend[1], lnew, ier);
+ if (*ier != 0) {
+ return 0;
+ }
+
+/* Remove K from the set of unprocessed nodes associated */
+/* with NEAR(K). */
+
+ i__ = near__[k];
+ if (near__[i__] == k) {
+ near__[i__] = next[k];
+ } else {
+ i__ = near__[i__];
+L2:
+ i0 = i__;
+ i__ = next[i0];
+ if (i__ != k) {
+ goto L2;
+ }
+ next[i0] = next[k];
+ }
+ near__[k] = 0;
+
+/* Loop on neighbors J of node K. */
+
+ lpl = lend[k];
+ lp = lpl;
+L3:
+ lp = lptr[lp];
+ j = (i__2 = list[lp], abs(i__2));
+
+/* Loop on elements I in the sequence of unprocessed nodes */
+/* associated with J: K is a candidate for replacing J */
+/* as the nearest triangulation node to I. The next value */
+/* of I in the sequence, NEXT(I), must be saved before I */
+/* is moved because it is altered by adding I to K's set. */
+
+ i__ = near__[j];
+L4:
+ if (i__ == 0) {
+ goto L5;
+ }
+ nexti = next[i__];
+
+/* Test for the distance from I to K less than the distance */
+/* from I to J. */
+
+ d__ = -(x[i__] * x[k] + y[i__] * y[k] + z__[i__] * z__[k]);
+ if (d__ < dist[i__]) {
+
+/* Replace J by K as the nearest triangulation node to I: */
+/* update NEAR(I) and DIST(I), and remove I from J's set */
+/* of unprocessed nodes and add it to K's set. */
+
+ near__[i__] = k;
+ dist[i__] = d__;
+ if (i__ == near__[j]) {
+ near__[j] = nexti;
+ } else {
+ next[i0] = nexti;
+ }
+ next[i__] = near__[k];
+ near__[k] = i__;
+ } else {
+ i0 = i__;
+ }
+
+/* Bottom of loop on I. */
+
+ i__ = nexti;
+ goto L4;
+
+/* Bottom of loop on neighbors J. */
+
+L5:
+ if (lp != lpl) {
+ goto L3;
+ }
+/* L6: */
+ }
+ return 0;
+} /* trmesh_ */
diff --git a/3rdparty/cstripack/cstripack.h b/3rdparty/cstripack/cstripack.h
new file mode 100644
index 0000000..7ef8d1f
--- /dev/null
+++ b/3rdparty/cstripack/cstripack.h
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#ifndef NFFT3_H
+#define NFFT3_H
+
+/* #include <f2c.h> */
+
+int addnod_(int *nst, int *k, double *x, double *y, double *z__,
+ int *list, int *lptr, int *lend, int *lnew, int *ier);
+
+double areas_(double *v1, double *v2, double *v3);
+
+int bdyadd_(int *kk, int *i1, int *i2, int *list, int *lptr,
+ int *lend, int *lnew);
+
+int bnodes_(int *n, int *list, int *lptr, int *lend,
+ int *nodes, int *nb, int *na, int *nt);
+
+int circum_(double *v1, double *v2, double *v3, double *c__, int *ier);
+
+int covsph_(int *kk, int *n0, int *list, int *lptr,
+ int *lend, int *lnew);
+
+int crlist_(int *n, int *ncol, double *x, double *y, double *z__,
+ int *list, int *lend, int *lptr, int *lnew, int *ltri,
+ int *listc, int *nb, double *xc, double *yc, double *zc, double *rc,
+ int *ier);
+
+int delarc_(int *n, int *io1, int *io2, int * list,
+ int *lptr, int *lend, int *lnew, int *ier);
+
+int delnb_(int *n0, int *nb, int *n, int *list,
+ int *lptr, int *lend, int *lnew, int *lph);
+
+int delnod_(int *k, int *n, double *x, double *y, double *z__, int *list,
+ int *lptr, int *lend, int *lnew, int *lwk, int *iwk,
+ int *ier);
+
+int edge_(int *in1, int *in2, double *x, double *y, double *z__, int *lwk,
+ int *iwk, int *list, int *lptr, int *lend, int *ier);
+
+int getnp_(double *x, double *y, double *z__, int *list, int *lptr,
+ int *lend, int *l, int *npts, double *df, int *ier);
+
+int insert_(int *k, int *lp, int *list, int *lptr,
+ int *lnew);
+
+int inside_(double *p, int *lv, double *xv, double *yv, double *zv, int *
+ nv, int *listv, int *ier);
+
+int intadd_(int *kk, int *i1, int *i2, int *i3, int *list,
+ int *lptr, int *lend, int *lnew);
+
+int intrsc_(double *p1, double *p2, double *cn, double *p, int *ier);
+
+int jrand_(int *n, int *ix, int *iy, int *iz);
+
+int left_(double *x1, double *y1, double *z1, double *x2, double *y2, double *z2,
+ double *x0, double *y0, double *z0);
+
+int lstptr_(int *lpl, int *nb, int *list, int *lptr);
+
+int nbcnt_(int *lpl, int *lptr);
+
+int nearnd_(double *p, int *ist, int *n, double *x, double *y,
+ double *z__, int *list, int *lptr, int *lend, double *al);
+
+int optim_(double *x, double *y, double *z__, int *na, int *list,
+ int *lptr, int *lend, int *nit, int *iwk, int *ier);
+
+int scoord_(double *px, double *py, double *pz, double *plat, double *plon, double *pnrm);
+
+double store_(double *x);
+
+int swap_(int *in1, int *in2, int *io1, int * io2,
+ int *list, int *lptr, int *lend, int *lp21);
+
+int swptst_(int *n1, int *n2, int *n3, int *n4, double *x,
+ double *y, double *z__);
+
+int trans_(int *n, double *rlat, double *rlon, double *x, double *y, double *z__);
+
+int trfind_(int *nst, double *p, int *n, double *x, double *y, double *z__,
+ int *list, int *lptr, int *lend, double *b1, double *b2,
+ double *b3, int *i1, int *i2, int *i3);
+
+int trlist_(int *n, int *list, int *lptr, int *lend,
+ int *nrow, int *nt, int *ltri, int *ier);
+
+int trlprt_(int *n, double *x, double *y, double *z__, int *iflag,
+ int *nrow, int *nt, int *ltri, int *lout);
+
+int trmesh_(int *n, double *x, double *y, double *z__, int *list,
+ int *lptr, int *lend, int *lnew, int *near__, int *next,
+ double *dist, int *ier);
+
+int trplot_(int *lun, double *pltsiz, double *elat, double *elon, double *a,
+ int *n, double *x, double *y, double *z__, int *list, int *lptr,
+ int *lend, char *title, int *numbr, int *ier, short title_len);
+
+int trprnt_(int *n, double *x, double *y, double *z__, int *iflag,
+ int *list, int *lptr, int *lend, int *lout);
+
+int vrplot_(int *lun, double *pltsiz, double *elat, double *elon, double *a,
+ int *n, double *x, double *y, double *z__, int *nt, int *listc,
+ int *lptr, int *lend, double *xc, double *yc, double *zc, char *title,
+ int *numbr, int *ier, short title_len);
+
+#endif
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..35d72df
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,46 @@
+The NFFT3 package was developed and is maintained by
+
+Prof. Dr. Daniel Potts <potts at mathematik.tu-chemnitz.de>
+ TU Chemnitz, Fakultaet fuer Mathematik
+ Reichenhainer Str. 39
+ 09107 Chemnitz, GERMANY
+
+Dr. Jens Keiner <jens at nfft.org>
+ - fast polynomial transform (/kernel/fpt)
+ - nfft on the sphere (/kernel/nfsft)
+ - fast summation on the sphere (/applications/fastsumS2)
+ - autotools, doxygen and friends
+ - Matlab mex interface for nfsft (/matlab/nfsft)
+
+Prof. Dr. Stefan Kunis <stefan.kunis at math.uos.de>
+ - nfft (/kernel/nfft)
+ - inverse transforms (kernel/solver)
+ - nfft on the hyperbolic cross (/kernel/nsfft)
+ - fast Gauss transform (/applications/fastgauss)
+ - Matlab mex interface for nfft (/matlab/nfft)
+
+Further contributions, in particular applications, are due to
+
+Dr. Markus Fenn
+ - nfft on the hyperbolic cross (/kernel/nsfft)
+ - polar fft (/applications/polarFFT)
+ - discrete Radon transform and ridgelet transform (/applications/radon)
+ - fast summation (/applications/fastsum)
+
+Steffen Klatt
+ - nonequispaced cosine transform (/kernel/nfct)
+ - nonequispaced sine transform (/kernel/nfst)
+
+Dr. Tobias Knopp
+ - transforms in magnetic resonance imaging (/kernel/mri)
+ - nonequispaced in time and frequency fft (/kernel/nnfft)
+ - reconstruction in magnetic resonance imaging (/applications/mri)
+
+Dr. Antje Vollrath <a.vollrath at tu-bs.de>
+ - transforms on the rotation group SO(3) (/kernel/nfsoft)
+
+Toni Volkmer
+ - OpenMP parallelization of nfft (/kernel/nfft)
+ - OpenMP parallelization of nfsft (/kernel/nfsft)
+ - OpenMP parallelization of fast summation (/applications/fastsum)
+
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..623b625
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..d872da4
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,81 @@
+This file contains the version history for NFFT 3.x.x.
+
+Changes in version 3.2.3
+ - Added a workaround for an internal compiler error occuring with gcc 4.7.1
+ in kernel/mri
+ - Added a workaround for a compilation error in the MATLAB mex interface for
+ gcc 4.7.1 when compiling with C99 support (-std=gnu99)
+
+Changes in version 3.2.2:
+ - Fixed several problems introduced in version 3.2.1
+ - Fixed an issue when the configure script would not run correctly when using
+ the option --with-fftw3.
+
+Changes in version 3.2.1:
+ - Added missing files of new nfft MATLAB (class) interface to release.
+
+Changes in version 3.2.0:
+ - Added support for OpenMP. To activate, use the configure script with the
+ --enable-openmp option.
+ - Added ticks.h from FFTW to leverage CPU cycle counters. If cycle counters
+ are available, the configure script will try to determine the number of
+ ticks per second. If successful, example programs measure times in seconds.
+ Otherwise, example programs will output raw cycle counter differences in
+ arbitrary units. If cycle counters are not available, results of time
+ measurements are undefined.
+ - Renamed functions of direct (non-fast) algorithms to
+ <function name of fast algorithm>_direct, e.g. the function name for the
+ direct computation of the non-equispaced Fourier transform is
+ nfft_trafo_direct(nfft_plan) instead of ndft_trafo(nfft_plan).
+
+Changes in version 3.1.4:
+ - Added pkg-config file (thanks Gert Wollny)
+ - Headers include/nfft3util.h, applications/fastsum/fastsum.h, and
+ applications/fastsum/kernels.h can now be included by C++ compilers.
+ - Fixed an error that occured when trying to create symbolic links to Matlab mex
+ files during installation.
+ - All programs from the application and examples subdirectories are no longer
+ installed. The same holds for the Matlab code from the matlab subdirectory.
+
+Changes in version 3.1.3:
+ - Fixed some issues that can cause C++ compilers to fail. Thanks to Romain Bossart.
+ - Fixed an error that caused linking against FFTW while checking compiler
+ characteristics in the configure script. This only affected installations where
+ FFTW had been installed in a custom location.
+ - Doxygen generated documentation is now only deleted if the target
+ maintainer-clean is used. The documentation is no longer deleted if the user
+ invokes the usual clean target.
+
+Changes in version 3.1.2:
+ - Fixed a bug in fpt_precompute() that caused excessive stabilization and
+ incorrect results.
+ - Fixed three bugs in the nfft: window function defines are moved to the
+ internal header infft.h, a larger lookup table is used for PRE_LIN_PSI, and
+ nfft_adjoint for d=2,3 and PRE_FULL_PSI writes its output correctly.
+
+Changes in version 3.1.1:
+ - Added a workaround for an internal compiler error occuring with gcc 4.3.2.
+
+Changes in version 3.1.0:
+ - The FPT example program, that is, examples/fpt/simple_test has been
+ modified to not require the NFCT module anymore. This solves the problem
+ that NFFT won't compile when the FPT module has been switched on while the
+ NFCT module is swithced off.
+
+Changes in version 3.1.0:
+ - A module, called nfsoft, for fast Fourier transforms on the rotation group
+ SO(3) has been added.
+ - It is now possible to configure the build process so that only specific
+ modules are compiled and installed. Invoke the configure script with option
+ "--help" for details.
+ - The handling of how to link against the fftw3 library has been improved. The
+ new configure script options "--with-fftw3", "--with-fftw-includedir", and
+ "--with-fftw-libdir" allow to specify where fftw3 has been installed.
+ - Improved compliance with GNU standards.
+ - The experimental Matlab interface has been improved and is now officially a
+ part of NFFT3. To compile the Matlab modules, invoke the configure script
+ with the option --with-matlab=<path/to/matlab/directory>. Also, an interface
+ to the plain NFFT has been added.
+
+Changes in version 3.0.2:
+ - Fixed a bug in the fpt module that lead to wrong output.
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..6e90e07
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,370 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994-1996, 1999-2002, 2004-2012 Free Software Foundation,
+Inc.
+
+ Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+ Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package. The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package. Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below. The lack of an optional feature in a given package is not
+necessarily a bug. More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+ The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system.
+
+ Running `configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package, generally using the just-built uninstalled binaries.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation. When installing into a prefix owned by root, it is
+ recommended that the package be configured and built as a regular
+ user, and only the `make install' phase executed with root
+ privileges.
+
+ 5. Optionally, type `make installcheck' to repeat any self-tests, but
+ this time using the binaries in their final installed location.
+ This target does not install anything. Running this target as a
+ regular user, particularly if the prior `make install' required
+ root privileges, verifies that the installation completed
+ correctly.
+
+ 6. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+ 7. Often, you can also type `make uninstall' to remove the installed
+ files again. In practice, not all packages have tested that
+ uninstallation works correctly, even though it is required by the
+ GNU Coding Standards.
+
+ 8. Some packages, particularly those that use Automake, provide `make
+ distcheck', which can by used by developers to test that all other
+ targets like `make install' and `make uninstall' work correctly.
+ This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+ You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'. This
+is known as a "VPATH" build.
+
+ With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+ On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor. Like
+this:
+
+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CPP="gcc -E" CXXCPP="g++ -E"
+
+ This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+ By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc. You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them. In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+ The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+ The first method involves providing an override variable for each
+affected directory. For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'. Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated. The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+ The second method involves providing the `DESTDIR' variable. For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names. The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters. On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+ Some packages offer the ability to configure how verbose the
+execution of `make' will be. For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+ HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved. Use GNU `make'
+instead.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file. The option `-nodtk' can be used as
+a workaround. If GNU CC is not installed, it is therefore recommended
+to try
+
+ ./configure CC="cc"
+
+and if that doesn't work, try
+
+ ./configure CC="cc -nodtk"
+
+ On Solaris, don't put `/usr/ucb' early in your `PATH'. This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+ On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'. It is recommended to use the following options:
+
+ ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on. Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS
+ KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+ Variables not defined in a site shell script can be set in the
+environment passed to `configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf limitation. Until the limitation is lifted, you can use
+this workaround:
+
+ CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+ Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+ Print a summary of the options unique to this package's
+ `configure', and exit. The `short' variant lists options used
+ only in the top level, while the `recursive' variant lists options
+ also present in any nested packages.
+
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+ Use DIR as the installation prefix. *note Installation Names::
+ for more details, including other options available for fine-tuning
+ the installation locations.
+
+`--no-create'
+`-n'
+ Run the configure checks, but stop before creating any output
+ files.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..47589c7
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,97 @@
+# $Id: Makefile.am 3896 2012-10-10 12:19:26Z tovo $
+
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+
+libtool: $(LIBTOOL_DEPS)
+ $(SHELL) ./config.status --recheck
+
+# Subdirectories
+DIST_SUBDIRS=3rdparty include util kernel . tests examples applications matlab support doxygen
+
+if HAVE_MATLAB
+ MATLAB_DIRS=matlab
+ LIBNFFT3_MATLAB_LA=libnfft3_matlab.la
+else
+ MATLAB_DIRS=
+ LIBNFFT3_MATLAB_LA=
+endif
+
+if HAVE_THREADS
+ LIBNFFT3_THREADS_LA = libnfft3_threads.la
+else
+ LIBNFFT3_THREADS_LA =
+endif
+
+SUBDIRS= 3rdparty include util kernel . tests examples applications $(MATLAB_DIRS)
+
+lib_LTLIBRARIES = libnfft3.la $(LIBNFFT3_THREADS_LA)
+noinst_LTLIBRARIES = $(LIBNFFT3_MATLAB_LA)
+
+libnfft3_la_SOURCES =
+libnfft3_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil.la kernel/libkernel.la @fftw3_LIBS@ -lm
+libnfft3_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @fftw3_LDFLAGS@
+
+if HAVE_THREADS
+libnfft3_threads_la_SOURCES =
+libnfft3_threads_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil_threads.la kernel/libkernel_threads.la @fftw3_threads_LIBS@ -lm
+libnfft3_threads_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @fftw3_LDFLAGS@
+if HAVE_OPENMP
+ libnfft3_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
+if HAVE_MATLAB
+ libnfft3_matlab_la_SOURCES =
+if HAVE_MATLAB_THREADS
+ libnfft3_matlab_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil_threads.la kernel/libkernel_threads.la @matlab_fftw3_LIBS@ -lm
+else
+ libnfft3_matlab_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil.la kernel/libkernel.la @matlab_fftw3_LIBS@ -lm
+endif
+ libnfft3_matlab_la_LDFLAGS = @matlab_fftw3_LDFLAGS@
+endif
+
+EXTRA_DIST = bootstrap.sh doxygen.dox nfft3.pc.in
+
+pkgconfigdir=$(libdir)/pkgconfig
+pkgconfig_DATA = nfft3.pc
+
+#install-data-hook:
+# $(MKDIR_P) $(docdir)
+# cp -R $(srcdir)/doc/* $(docdir)/
+# chmod -R u+rwX,g+rX,g-w,o+rX,o-w $(docdir)
+
+#uninstall-hook:
+# rm -Rf $(docdir)
+
+maintainer-clean-local:
+ rm -f $(srcdir)/doc/api/html/*.html
+ rm -f $(srcdir)/doc/api/html/*.png
+ rm -f $(srcdir)/doc/api/html/*.gif
+ rm -f $(srcdir)/doc/api/html/doxygen.css
+ rm -f $(srcdir)/doc/api/html/formula.repository
+ rm -f $(srcdir)/doc/api/latex/*.tex
+ rm -f $(srcdir)/doc/api/latex/*.sty
+ rm -f $(srcdir)/doc/api/latex/*.ttf
+ rm -f $(srcdir)/doc/api/latex/*.pdf
+ rm -f $(srcdir)/doc/api/latex/Makefile
+
+dist-hook:
+ echo `pwd`
+ chmod -Rf u+rwX $(srcdir)/doc
+ sed 's/^ \* \\section \([a-zA-Z0-9_]*\) \(.*\)/<ul><li><a href="#\1">\2<\/a><\/li><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
+ sed 's/^ \* \\subsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
+ sed 's/^ \* \\subsubsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
+ doxygen $(builddir)/doxygen/doxygen.Doxyfile
+ rm -f $(srcdir)/doc/api/html/toc.txt
+ $(srcdir)/support/rem.sed < $(srcdir)/doc/api/html/index.html > $(srcdir)/doc/api/html/index.html.new
+ mv $(srcdir)/doc/api/html/index.html.new $(srcdir)/doc/api/html/index.html
+ cp -R $(srcdir)/doc $(distdir)/
+ rm -Rf `find $(distdir) -name .svn -type d`
+
+# Flags to be passed to aclocal.
+ACLOCAL_AMFLAGS = -I m4
+
+#distclean-local:
+# rm -Rf `find $(builddir) -type f -name *.Po`
+# rm -Rf `find $(builddir) -type f -name Makefile`
+
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..e048ffe
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,1050 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3896 2012-10-10 12:19:26Z tovo $
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/nfft3.pc.in \
+ $(top_srcdir)/config/compile $(top_srcdir)/config/config.guess \
+ $(top_srcdir)/config/config.sub \
+ $(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \
+ $(top_srcdir)/config/missing $(top_srcdir)/configure AUTHORS \
+ COPYING ChangeLog INSTALL NEWS config/compile \
+ config/config.guess config/config.sub config/depcomp \
+ config/install-sh config/ltmain.sh config/missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES = nfft3.pc
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
+libnfft3_la_DEPENDENCIES = 3rdparty/lib3rdparty.la util/libutil.la \
+ kernel/libkernel.la
+am_libnfft3_la_OBJECTS =
+libnfft3_la_OBJECTS = $(am_libnfft3_la_OBJECTS)
+libnfft3_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(libnfft3_la_LDFLAGS) $(LDFLAGS) -o $@
+ at HAVE_MATLAB_THREADS_FALSE@@HAVE_MATLAB_TRUE at libnfft3_matlab_la_DEPENDENCIES = 3rdparty/lib3rdparty.la \
+ at HAVE_MATLAB_THREADS_FALSE@@HAVE_MATLAB_TRUE@ util/libutil.la \
+ at HAVE_MATLAB_THREADS_FALSE@@HAVE_MATLAB_TRUE@ kernel/libkernel.la
+ at HAVE_MATLAB_THREADS_TRUE@@HAVE_MATLAB_TRUE at libnfft3_matlab_la_DEPENDENCIES = 3rdparty/lib3rdparty.la \
+ at HAVE_MATLAB_THREADS_TRUE@@HAVE_MATLAB_TRUE@ util/libutil_threads.la \
+ at HAVE_MATLAB_THREADS_TRUE@@HAVE_MATLAB_TRUE@ kernel/libkernel_threads.la
+am_libnfft3_matlab_la_OBJECTS =
+libnfft3_matlab_la_OBJECTS = $(am_libnfft3_matlab_la_OBJECTS)
+libnfft3_matlab_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(libnfft3_matlab_la_LDFLAGS) $(LDFLAGS) -o $@
+ at HAVE_MATLAB_TRUE@am_libnfft3_matlab_la_rpath =
+ at HAVE_THREADS_TRUE@libnfft3_threads_la_DEPENDENCIES = \
+ at HAVE_THREADS_TRUE@ 3rdparty/lib3rdparty.la \
+ at HAVE_THREADS_TRUE@ util/libutil_threads.la \
+ at HAVE_THREADS_TRUE@ kernel/libkernel_threads.la
+am_libnfft3_threads_la_OBJECTS =
+libnfft3_threads_la_OBJECTS = $(am_libnfft3_threads_la_OBJECTS)
+libnfft3_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libnfft3_threads_la_CFLAGS) $(CFLAGS) \
+ $(libnfft3_threads_la_LDFLAGS) $(LDFLAGS) -o $@
+ at HAVE_THREADS_TRUE@am_libnfft3_threads_la_rpath = -rpath $(libdir)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libnfft3_la_SOURCES) $(libnfft3_matlab_la_SOURCES) \
+ $(libnfft3_threads_la_SOURCES)
+DIST_SOURCES = $(libnfft3_la_SOURCES) $(libnfft3_matlab_la_SOURCES) \
+ $(libnfft3_threads_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DATA = $(pkgconfig_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ cscope distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+CSCOPE = cscope
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ if test -d "$(distdir)"; then \
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -rf "$(distdir)" \
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
+ else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Subdirectories
+DIST_SUBDIRS = 3rdparty include util kernel . tests examples applications matlab support doxygen
+ at HAVE_MATLAB_FALSE@MATLAB_DIRS =
+ at HAVE_MATLAB_TRUE@MATLAB_DIRS = matlab
+ at HAVE_MATLAB_FALSE@LIBNFFT3_MATLAB_LA =
+ at HAVE_MATLAB_TRUE@LIBNFFT3_MATLAB_LA = libnfft3_matlab.la
+ at HAVE_THREADS_FALSE@LIBNFFT3_THREADS_LA =
+ at HAVE_THREADS_TRUE@LIBNFFT3_THREADS_LA = libnfft3_threads.la
+SUBDIRS = 3rdparty include util kernel . tests examples applications $(MATLAB_DIRS)
+lib_LTLIBRARIES = libnfft3.la $(LIBNFFT3_THREADS_LA)
+noinst_LTLIBRARIES = $(LIBNFFT3_MATLAB_LA)
+libnfft3_la_SOURCES =
+libnfft3_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil.la kernel/libkernel.la @fftw3_LIBS@ -lm
+libnfft3_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @fftw3_LDFLAGS@
+ at HAVE_THREADS_TRUE@libnfft3_threads_la_SOURCES =
+ at HAVE_THREADS_TRUE@libnfft3_threads_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil_threads.la kernel/libkernel_threads.la @fftw3_threads_LIBS@ -lm
+ at HAVE_THREADS_TRUE@libnfft3_threads_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @fftw3_LDFLAGS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libnfft3_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+ at HAVE_MATLAB_TRUE@libnfft3_matlab_la_SOURCES =
+ at HAVE_MATLAB_THREADS_FALSE@@HAVE_MATLAB_TRUE at libnfft3_matlab_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil.la kernel/libkernel.la @matlab_fftw3_LIBS@ -lm
+ at HAVE_MATLAB_THREADS_TRUE@@HAVE_MATLAB_TRUE at libnfft3_matlab_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil_threads.la kernel/libkernel_threads.la @matlab_fftw3_LIBS@ -lm
+ at HAVE_MATLAB_TRUE@libnfft3_matlab_la_LDFLAGS = @matlab_fftw3_LDFLAGS@
+EXTRA_DIST = bootstrap.sh doxygen.dox nfft3.pc.in
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = nfft3.pc
+
+# Flags to be passed to aclocal.
+ACLOCAL_AMFLAGS = -I m4
+all: all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+ @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+nfft3.pc: $(top_builddir)/config.status $(srcdir)/nfft3.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+ }
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libnfft3.la: $(libnfft3_la_OBJECTS) $(libnfft3_la_DEPENDENCIES) $(EXTRA_libnfft3_la_DEPENDENCIES)
+ $(libnfft3_la_LINK) -rpath $(libdir) $(libnfft3_la_OBJECTS) $(libnfft3_la_LIBADD) $(LIBS)
+libnfft3_matlab.la: $(libnfft3_matlab_la_OBJECTS) $(libnfft3_matlab_la_DEPENDENCIES) $(EXTRA_libnfft3_matlab_la_DEPENDENCIES)
+ $(libnfft3_matlab_la_LINK) $(am_libnfft3_matlab_la_rpath) $(libnfft3_matlab_la_OBJECTS) $(libnfft3_matlab_la_LIBADD) $(LIBS)
+libnfft3_threads.la: $(libnfft3_threads_la_OBJECTS) $(libnfft3_threads_la_DEPENDENCIES) $(EXTRA_libnfft3_threads_la_DEPENDENCIES)
+ $(libnfft3_threads_la_LINK) $(am_libnfft3_threads_la_rpath) $(libnfft3_threads_la_OBJECTS) $(libnfft3_threads_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool config.lt
+install-pkgconfigDATA: $(pkgconfig_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+ done
+
+uninstall-pkgconfigDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+cscopelist-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscope: cscope.files
+ test ! -s cscope.files \
+ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+
+clean-cscope:
+ -rm -f cscope.files
+
+cscope.files: clean-cscope cscopelist-recursive cscopelist
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__post_remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+ $(am__post_remove_distdir)
+
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+ $(am__post_remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ $(am__post_remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__post_remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__post_remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__post_remove_distdir)
+
+dist dist-all:
+ $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+ $(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod u+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__post_remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @test -n '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: trying to run $@ with an empty' \
+ '$$(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES) $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+ clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-pkgconfigDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+ maintainer-clean-local
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgconfigDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+ cscopelist-recursive ctags-recursive install-am install-strip \
+ tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am am--refresh check check-am clean clean-cscope \
+ clean-generic clean-libLTLIBRARIES clean-libtool \
+ clean-noinstLTLIBRARIES cscope cscopelist cscopelist-recursive \
+ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+ dist-hook dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
+ distcheck distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distcleancheck distdir \
+ distuninstallcheck dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am \
+ install-libLTLIBRARIES install-man install-pdf install-pdf-am \
+ install-pkgconfigDATA install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic \
+ maintainer-clean-local mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am \
+ uninstall-libLTLIBRARIES uninstall-pkgconfigDATA
+
+
+libtool: $(LIBTOOL_DEPS)
+ $(SHELL) ./config.status --recheck
+
+#install-data-hook:
+# $(MKDIR_P) $(docdir)
+# cp -R $(srcdir)/doc/* $(docdir)/
+# chmod -R u+rwX,g+rX,g-w,o+rX,o-w $(docdir)
+
+#uninstall-hook:
+# rm -Rf $(docdir)
+
+maintainer-clean-local:
+ rm -f $(srcdir)/doc/api/html/*.html
+ rm -f $(srcdir)/doc/api/html/*.png
+ rm -f $(srcdir)/doc/api/html/*.gif
+ rm -f $(srcdir)/doc/api/html/doxygen.css
+ rm -f $(srcdir)/doc/api/html/formula.repository
+ rm -f $(srcdir)/doc/api/latex/*.tex
+ rm -f $(srcdir)/doc/api/latex/*.sty
+ rm -f $(srcdir)/doc/api/latex/*.ttf
+ rm -f $(srcdir)/doc/api/latex/*.pdf
+ rm -f $(srcdir)/doc/api/latex/Makefile
+
+dist-hook:
+ echo `pwd`
+ chmod -Rf u+rwX $(srcdir)/doc
+ sed 's/^ \* \\section \([a-zA-Z0-9_]*\) \(.*\)/<ul><li><a href="#\1">\2<\/a><\/li><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
+ sed 's/^ \* \\subsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
+ sed 's/^ \* \\subsubsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
+ doxygen $(builddir)/doxygen/doxygen.Doxyfile
+ rm -f $(srcdir)/doc/api/html/toc.txt
+ $(srcdir)/support/rem.sed < $(srcdir)/doc/api/html/index.html > $(srcdir)/doc/api/html/index.html.new
+ mv $(srcdir)/doc/api/html/index.html.new $(srcdir)/doc/api/html/index.html
+ cp -R $(srcdir)/doc $(distdir)/
+ rm -Rf `find $(distdir) -name .svn -type d`
+
+#distclean-local:
+# rm -Rf `find $(builddir) -type f -name *.Po`
+# rm -Rf `find $(builddir) -type f -name Makefile`
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..e69de29
diff --git a/README b/README
new file mode 100644
index 0000000..e1d2d40
--- /dev/null
+++ b/README
@@ -0,0 +1,110 @@
+NFFT3 - Nonequispaced FFT, generalisations, inversion, and applications
+
+Overview
+--------
+NFFT3 is a software library written in C for computing nonequispaced fast Fourier
+and related transformations. In detail, NFFT3 implements
+
+ 1) The nonequispaced fast Fourier transform (NFFT)
+ - the forward transform (NFFT)
+ - the adjoint transform (adjoint NFFT)
+ 2) Generalisations of the NFFT
+ - to arbitrary knots in time and frequency domain (NNFFT)
+ - to the sphere S^2 (NFSFT)
+ - to the hyperbolic cross (NSFFT)
+ - to real-valued data, i.e. (co)sine transforms, (NFCT, NFST)
+ - to the rotation group (NFSOFT)
+ 3) Generalised inverses based on iterative methods, e.g. CGNR, CGNE
+ 4) Applications in
+ - medical imaging
+ (i) magnetic resonance imaging
+ (ii) computerised tomography
+ - summation schemes
+ (i) fast Gauss transform (FGT)
+ (ii) singular kernels
+ (iii) zonal kernels
+ - polar FFT, discrete Radon transform, ridgelet transform
+
+For an introduction, please read the "NFFT 3.0 - Tutorial" first. It is
+available in the subdirectory doc/tutorial/tutorial.pdf. Detailed API
+documentation can be found in HTML format in /doc/api/html/index.html
+or in LaTeX format for self compilation in /doc/api/latex/refman.tex.
+For installation instructions, you can also refer to the file INSTALL
+in this directory.
+
+The most current general paper, and the one that we recommend if you wish
+to cite NFFT, is: The paper by Keiner, J., Kunis, S., and Potts, D.
+''Using NFFT 3 - a software library for various nonequispaced fast Fourier transforms''
+ACM Trans. Math. Software,36, Article 19, 1-30, 2009
+Directory structure
+-------------------
+3rdparty (dir) Third-party source code
+aclocal.m4 Macros for configure script
+applications (dir) Application programs (see 4) above)
+AUTHORS Information about the authors of NFFT3
+bootstrap.sh Bootstrap shell script that call Autoconf and friends
+ChangeLog A short version history
+config.guess Used by configure script
+config.sub Used by configure script
+configure Configure script
+configure.in Autoconf configure script template
+COPYING Information about redistributing NFFT3
+depcomp Used by configure script
+doc (dir) User and developer documentation
+examples (dir) Simple examples for using NFFT3 routines
+include (dir) Header files
+INSTALL Installation instructions
+install-sh Used by configure script
+kernel (dir) Source code for core library routines
+ltmain.sh Used by configure script
+Makefile.am Automake Makefile template
+Makefile.in Makefile template generated from Makefile.am,
+ processed by configure script
+missing Used by configure script
+NEWS New and noteworthy
+README This file
+TODO Current work to be done
+util (dir) Source code for auxilliary routines
+
+Feedback
+--------
+Your comments are welcome! This is the third version of the library and may
+not be as robust or well documented as it should be. Please keep track of bugs
+or missing/confusing instructions and report them to
+
+ Prof. Dr. Daniel Potts <potts at mathematik.tu-chemnitz.de>
+ TU Chemnitz, Fakultaet fuer Mathematik
+ Reichenhainer Str. 39
+ 09107 Chemnitz, GERMANY
+
+or
+
+ Stefan Kunis <stefan.kunis at math.uos.de>
+ Jens Keiner <jens at nfft.org>>
+
+If you find NFFT3 useful, we would be delighted to hear about what application
+you are using NFFT3 for!
+
+Legal Information & Credits
+---------------------------
+Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+This software was written by Jens Keiner, Stefan Kunis and Daniel Potts.
+It was developed at the Mathematical Institute, University of
+Luebeck, and at the Faculty of Mathematics, Chemnitz University of Technology.
+
+NFFT3 is free software. You can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version. If not stated otherwise, this applies to all files contained in this
+package and its sub-directories.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..df123fe
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,1081 @@
+# generated automatically by aclocal 1.12.1 -*- Autoconf -*-
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.12'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.12.1], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.12.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# Figure out how to run the assembler. -*- Autoconf -*-
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_PROG_AS
+# ----------
+AC_DEFUN([AM_PROG_AS],
+[# By default we simply use the C compiler to build assembly code.
+AC_REQUIRE([AC_PROG_CC])
+test "${CCAS+set}" = set || CCAS=$CC
+test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)])
+AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)])
+_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl
+])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 10
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 17
+
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
+ [$1], [CXX], [depcc="$CXX" am_compiler_list=],
+ [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+ [$1], [UPC], [depcc="$UPC" am_compiler_list=],
+ [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+ [--enable-dependency-tracking],
+ [do not reject slow dependency extractors])
+AS_HELP_STRING(
+ [--disable-dependency-tracking],
+ [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named 'Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running 'make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each '.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 19
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+[$0: two- and three-arguments forms are deprecated. For more info, see:
+http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+ m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES([CC])],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES([CXX])],
+ [m4_define([AC_PROG_CXX],
+ m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES([OBJC])],
+ [m4_define([AC_PROG_OBJC],
+ m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+dnl Support for Objective C++ was only introduced in Autoconf 2.65,
+dnl but we still cater to Autoconf 2.62.
+m4_ifdef([AC_PROG_OBJCXX],
+[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [_AM_DEPENDENCIES([OBJCXX])],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST([install_sh])])
+
+# Copyright (C) 2003-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 7
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless 'enable' is passed literally.
+# For symmetry, 'disable' may be passed as well. Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+ [enable], [m4_define([am_maintainer_other], [disable])],
+ [disable], [m4_define([am_maintainer_other], [enable])],
+ [m4_define([am_maintainer_other], [enable])
+ m4_warn([syntax], [unexpected argument to AM@&t at _MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+ AC_ARG_ENABLE([maintainer-mode],
+ [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
+ am_maintainer_other[ make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer])],
+ [USE_MAINTAINER_MODE=$enableval],
+ [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST([MAINT])dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+dnl Make sure AC_PROG_CC is never called again, or it will override our
+dnl setting of CC.
+m4_define([AC_PROG_CC],
+ [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 7
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+ alias in your environment])
+ fi
+ if test "$[2]" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+ [AC_MSG_CHECKING([that generated files are newer than configure])
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004-2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of '-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/ax_apple_gcc_archflag.m4])
+m4_include([m4/ax_cc_maxopt.m4])
+m4_include([m4/ax_check_compiler_flags.m4])
+m4_include([m4/ax_check_dir.m4])
+m4_include([m4/ax_compiler_vendor.m4])
+m4_include([m4/ax_gcc_archflag.m4])
+m4_include([m4/ax_gcc_x86_cpuid.m4])
+m4_include([m4/ax_lib_fftw3.m4])
+m4_include([m4/ax_nfft_module.m4])
+m4_include([m4/ax_openmp.m4])
+m4_include([m4/ax_prog_matlab.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
diff --git a/applications/Makefile.am b/applications/Makefile.am
new file mode 100644
index 0000000..ddff97f
--- /dev/null
+++ b/applications/Makefile.am
@@ -0,0 +1,23 @@
+if HAVE_NFSFT
+ DIR_FASTSUMS2=fastsumS2
+ DIR_QUADRATURES2=quadratureS2
+ DIR_ITERS2=iterS2
+else
+ DIR_FASTSUMS2=
+ DIR_QUADRATURES2=
+ DIR_ITERS2=
+endif
+
+if HAVE_MRI
+ DIR_MRI=mri
+else
+ DIR_MRI=
+endif
+
+DIST_SUBDIRS = fastgauss fastsum fastsumS2 mri polarFFT \
+ quadratureS2 radon iterS2
+
+SUBDIRS= fastgauss fastsum $(DIR_FASTSUMS2) $(DIR_MRI) polarFFT \
+ $(DIR_QUADRATURES2) radon $(DIR_ITERS2)
+
+EXTRA_DIST = doxygen.c
diff --git a/applications/Makefile.in b/applications/Makefile.in
new file mode 100644
index 0000000..cc6ff4c
--- /dev/null
+++ b/applications/Makefile.in
@@ -0,0 +1,650 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = applications
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ at HAVE_NFSFT_FALSE@DIR_FASTSUMS2 =
+ at HAVE_NFSFT_TRUE@DIR_FASTSUMS2 = fastsumS2
+ at HAVE_NFSFT_FALSE@DIR_QUADRATURES2 =
+ at HAVE_NFSFT_TRUE@DIR_QUADRATURES2 = quadratureS2
+ at HAVE_NFSFT_FALSE@DIR_ITERS2 =
+ at HAVE_NFSFT_TRUE@DIR_ITERS2 = iterS2
+ at HAVE_MRI_FALSE@DIR_MRI =
+ at HAVE_MRI_TRUE@DIR_MRI = mri
+DIST_SUBDIRS = fastgauss fastsum fastsumS2 mri polarFFT \
+ quadratureS2 radon iterS2
+
+SUBDIRS = fastgauss fastsum $(DIR_FASTSUMS2) $(DIR_MRI) polarFFT \
+ $(DIR_QUADRATURES2) radon $(DIR_ITERS2)
+
+EXTRA_DIST = doxygen.c
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applications/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+cscopelist-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+ cscopelist-recursive ctags-recursive install-am install-strip \
+ tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist cscopelist-recursive ctags ctags-recursive \
+ distclean distclean-generic distclean-libtool distclean-tags \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-recursive uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/doxygen.c b/applications/doxygen.c
new file mode 100644
index 0000000..710c986
--- /dev/null
+++ b/applications/doxygen.c
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */
+
+/**
+ * \defgroup applications Applications
+ */
diff --git a/applications/fastgauss/Makefile.am b/applications/fastgauss/Makefile.am
new file mode 100644
index 0000000..b8b2f4b
--- /dev/null
+++ b/applications/fastgauss/Makefile.am
@@ -0,0 +1,10 @@
+# $Id: Makefile.am 3452 2010-03-15 22:43:05Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = fastgauss
+
+fastgauss_SOURCES = fastgauss.c
+fastgauss_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = levelplots.m show_results.m README
diff --git a/applications/fastgauss/Makefile.in b/applications/fastgauss/Makefile.in
new file mode 100644
index 0000000..700063c
--- /dev/null
+++ b/applications/fastgauss/Makefile.in
@@ -0,0 +1,555 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3452 2010-03-15 22:43:05Z keiner $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = fastgauss$(EXEEXT)
+subdir = applications/fastgauss
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_fastgauss_OBJECTS = fastgauss.$(OBJEXT)
+fastgauss_OBJECTS = $(am_fastgauss_OBJECTS)
+fastgauss_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(fastgauss_SOURCES)
+DIST_SOURCES = $(fastgauss_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+fastgauss_SOURCES = fastgauss.c
+fastgauss_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = levelplots.m show_results.m README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/fastgauss/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applications/fastgauss/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+fastgauss$(EXEEXT): $(fastgauss_OBJECTS) $(fastgauss_DEPENDENCIES) $(EXTRA_fastgauss_DEPENDENCIES)
+ @rm -f fastgauss$(EXEEXT)
+ $(LINK) $(fastgauss_OBJECTS) $(fastgauss_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastgauss.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/fastgauss/README b/applications/fastgauss/README
new file mode 100644
index 0000000..f2563b4
--- /dev/null
+++ b/applications/fastgauss/README
@@ -0,0 +1,22 @@
+Examples to the fast Gauss transform with complex parameters
+
+Author
+
+ Stefan Kunis <kunis at mathematik.tu-chemnitz.de>
+
+List of files and purpose
+
+ README this file
+ fastgauss.c univariate Gauss transform and tests
+ levelplots.m visualisation with MATLAB of error estimates
+ show_results.m visualisation with MATLAB of tested accuracy, relies on
+ output_error.m and output_error_p.m produced by fastgauss.c
+
+References
+
+ Stefan Kunis, Daniel Potts, and Gabriele Steidl
+ Fast Gauss transforms with complex parameters using NFFTs.
+ J. Numer. Math., to appear. 2006
+
+ Preprint available online
+ http://www.tu-chemnitz.de/~potts/paper/fastgauss.pdf
diff --git a/applications/fastgauss/fastgauss.c b/applications/fastgauss/fastgauss.c
new file mode 100644
index 0000000..26da31f
--- /dev/null
+++ b/applications/fastgauss/fastgauss.c
@@ -0,0 +1,610 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: fastgauss.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \defgroup applications_fastgauss Fast Gauss transfrom with complex parameter
+ * \ingroup applications
+ * \{
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+ #include <complex.h>
+#endif
+
+#include "nfft3.h"
+#include "nfft3util.h"
+#include "infft.h"
+
+/**
+ * If this flag is set, the whole matrix is precomputed and stored for the
+ * discrete Gauss transfrom.
+ *
+ * \see fgt_init_node_dependent
+ * \see fgt_init
+ * \author Stefan Kunis
+ */
+#define DGT_PRE_CEXP (1U<< 0)
+
+/**
+ * If this flag is set, the fast Gauss transform uses the discrete instead of
+ * the fast Fourier transform.
+ *
+ * \see fgt_init
+ * \see nfft_trafo_direct
+ * \see nfft_trafo
+ * \author Stefan Kunis
+ */
+#define FGT_NDFT (1U<< 1)
+
+/**
+ * If this flag is set, the discrete Fourier coefficients of the uniformly
+ * sampled Gaussian are used instead of the sampled continuous Fourier
+ * transform.
+ *
+ * \see fgt_init
+ * \author Stefan Kunis
+ */
+#define FGT_APPROX_B (1U<< 2)
+
+/** Structure for the Gauss transform */
+typedef struct
+{
+ int N; /**< number of source nodes */
+ int M; /**< number of target nodes */
+
+ double _Complex *alpha; /**< source coefficients */
+ double _Complex *f; /**< target evaluations */
+
+ unsigned flags; /**< flags for precomputation and
+ approximation type */
+
+ double _Complex sigma; /**< parameter of the Gaussian */
+
+ double *x; /**< source nodes in \f$[-1/4,1/4]\f$*/
+ double *y; /**< target nodes in \f$[-1/4,1/4]\f$*/
+
+ double _Complex *pre_cexp; /**< precomputed values for dgt */
+
+ int n; /**< expansion degree */
+ double p; /**< period, at least 1 */
+
+ double _Complex *b; /**< expansion coefficients */
+
+ nfft_plan *nplan1; /**< source nfft plan */
+ nfft_plan *nplan2; /**< target nfft plan */
+
+} fgt_plan;
+
+/**
+ * Executes the discrete Gauss transform.
+ *
+ * \arg ths The pointer to a fgt plan
+ *
+ * \author Stefan Kunis
+ */
+void dgt_trafo(fgt_plan *ths)
+{
+ int j,k,l;
+
+ for(j=0; j<ths->M; j++)
+ ths->f[j] = 0;
+
+ if(ths->flags & DGT_PRE_CEXP)
+ for(j=0,l=0; j<ths->M; j++)
+ for(k=0; k<ths->N; k++,l++)
+ ths->f[j] += ths->alpha[k]*ths->pre_cexp[l];
+ else
+ for(j=0; j<ths->M; j++)
+ for(k=0; k<ths->N; k++)
+ ths->f[j] += ths->alpha[k]*cexp(-ths->sigma*(ths->y[j]-ths->x[k])*
+ (ths->y[j]-ths->x[k]));
+}
+
+/**
+ * Executes the fast Gauss transform.
+ *
+ * \arg ths The pointer to a fgt plan
+ *
+ * \author Stefan Kunis
+ */
+void fgt_trafo(fgt_plan *ths)
+{
+ int l;
+
+ if(ths->flags & FGT_NDFT)
+ {
+ nfft_adjoint_direct(ths->nplan1);
+
+ for(l=0; l<ths->n; l++)
+ ths->nplan1->f_hat[l] *= ths->b[l];
+
+ nfft_trafo_direct(ths->nplan2);
+ }
+ else
+ {
+ nfft_adjoint(ths->nplan1);
+
+ for(l=0; l<ths->n; l++)
+ ths->nplan1->f_hat[l] *= ths->b[l];
+
+ nfft_trafo(ths->nplan2);
+ }
+}
+
+/**
+ * Initialisation of a transform plan, guru.
+ *
+ * \arg ths The pointer to a fpt plan
+ * \arg N The number of source nodes
+ * \arg M The number of target nodes
+ * \arg sigma The parameter of the Gaussian
+ * \arg n The polynomial expansion degree
+ * \arg p the periodisation length, at least 1
+ * \arg m The spatial cut-off of the nfft
+ * \arg flags FGT flags to use
+ *
+ * \author Stefan Kunis
+ */
+void fgt_init_guru(fgt_plan *ths, int N, int M, double _Complex sigma, int n,
+ double p, int m, unsigned flags)
+{
+ int j,n_fftw;
+ fftw_plan fplan;
+
+ ths->M = M;
+ ths->N = N;
+ ths->sigma = sigma;
+ ths->flags = flags;
+
+ ths->x = (double*)nfft_malloc(ths->N*sizeof(double));
+ ths->y = (double*)nfft_malloc(ths->M*sizeof(double));
+ ths->alpha = (double _Complex*)nfft_malloc(ths->N*sizeof(double _Complex));
+ ths->f = (double _Complex*)nfft_malloc(ths->M*sizeof(double _Complex));
+
+ ths->n = n;
+ ths->p = p;
+
+ ths->b = (double _Complex*)nfft_malloc(ths->n*sizeof(double _Complex));
+
+ ths->nplan1 = (nfft_plan*) nfft_malloc(sizeof(nfft_plan));
+ ths->nplan2 = (nfft_plan*) nfft_malloc(sizeof(nfft_plan));
+
+ n_fftw=X(next_power_of_2)(2*ths->n);
+
+ nfft_init_guru(ths->nplan1, 1, &(ths->n), ths->N, &n_fftw, m, PRE_PHI_HUT|
+ PRE_PSI| MALLOC_X| MALLOC_F_HAT| FFTW_INIT, FFTW_MEASURE);
+ nfft_init_guru(ths->nplan2, 1, &(ths->n), ths->M, &n_fftw, m, PRE_PHI_HUT|
+ PRE_PSI| MALLOC_X| FFTW_INIT, FFTW_MEASURE);
+
+ ths->nplan1->f = ths->alpha;
+ ths->nplan2->f_hat = ths->nplan1->f_hat;
+ ths->nplan2->f = ths->f;
+
+ if(ths->flags & FGT_APPROX_B)
+ {
+ fplan = fftw_plan_dft_1d(ths->n, ths->b, ths->b, FFTW_FORWARD,
+ FFTW_MEASURE);
+
+ for(j=0; j<ths->n; j++)
+ ths->b[j] = cexp(-ths->p*ths->p*ths->sigma*(j-ths->n/2)*(j-ths->n/2)/
+ ((double)ths->n*ths->n)) / ths->n;
+
+ nfft_fftshift_complex(ths->b, 1, &ths->n);
+ fftw_execute(fplan);
+ nfft_fftshift_complex(ths->b, 1, &ths->n);
+
+ fftw_destroy_plan(fplan);
+ }
+ else
+ {
+ for(j=0; j<ths->n; j++)
+ ths->b[j] = 1.0/ths->p * csqrt(PI/ths->sigma)*
+ cexp(-PI*PI*(j-ths->n/2)*(j-ths->n/2)/
+ (ths->p*ths->p*ths->sigma));
+ }
+}
+
+/**
+ * Initialisation of a transform plan, simple.
+ *
+ * \arg ths The pointer to a fpt plan
+ * \arg N The number of source nodes
+ * \arg M The number of target nodes
+ * \arg sigma The parameter of the Gaussian
+ * \arg eps The target accuracy
+ *
+ * \author Stefan Kunis
+ */
+void fgt_init(fgt_plan *ths, int N, int M, double _Complex sigma, double eps)
+{
+ double p;
+ int n;
+
+ p=0.5+sqrt(-log(eps)/creal(sigma));
+ if(p<1)
+ p=1;
+
+ n=2*((int)ceil(p*cabs(sigma)/PI * sqrt(-log(eps)/creal(sigma))));
+
+ if(N*M<=((int)(1U<<20)))
+ fgt_init_guru(ths, N, M, sigma, n, p, 7, DGT_PRE_CEXP);
+ else
+ fgt_init_guru(ths, N, M, sigma, n, p, 7, 0);
+}
+
+/**
+ * Initialisation of a transform plan, depends on source and target nodes.
+ *
+ * \arg ths The pointer to a fpt plan
+ * \author Stefan Kunis
+ */
+void fgt_init_node_dependent(fgt_plan *ths)
+{
+ int j,k,l;
+
+ if(ths->flags & DGT_PRE_CEXP)
+ {
+ ths->pre_cexp=(double _Complex*)nfft_malloc(ths->M*ths->N*
+ sizeof(double _Complex));
+
+ for(j=0,l=0; j<ths->M; j++)
+ for(k=0; k<ths->N; k++,l++)
+ ths->pre_cexp[l]=cexp(-ths->sigma*(ths->y[j]-ths->x[k])*
+ (ths->y[j]-ths->x[k]));
+ }
+
+ for(j=0; j<ths->nplan1->M_total; j++)
+ ths->nplan1->x[j] = ths->x[j]/ths->p;
+ for(j=0; j<ths->nplan2->M_total; j++)
+ ths->nplan2->x[j] = ths->y[j]/ths->p;
+
+ if(ths->nplan1->nfft_flags & PRE_PSI)
+ nfft_precompute_psi(ths->nplan1);
+ if(ths->nplan2->nfft_flags & PRE_PSI)
+ nfft_precompute_psi(ths->nplan2);
+}
+
+/**
+ * Destroys the transform plan.
+ *
+ * \arg ths The pointer to the fgt plan
+ * \author Stefan Kunis
+ */
+void fgt_finalize(fgt_plan *ths)
+{
+ nfft_finalize(ths->nplan2);
+ nfft_finalize(ths->nplan1);
+
+ nfft_free(ths->nplan2);
+ nfft_free(ths->nplan1);
+
+ nfft_free(ths->b);
+
+ nfft_free(ths->f);
+ nfft_free(ths->y);
+
+ nfft_free(ths->alpha);
+ nfft_free(ths->x);
+}
+
+/**
+ * Random initialisation of a fgt plan.
+ *
+ * \arg ths The pointer to the fgt plan
+ * \author Stefan Kunis
+ */
+void fgt_test_init_rand(fgt_plan *ths)
+{
+ int j,k;
+
+ for(k=0; k<ths->N; k++)
+ ths->x[k] = (double)rand()/(2.0*RAND_MAX)-1.0/4.0;
+
+ for(j=0; j<ths->M; j++)
+ ths->y[j] = (double)rand()/(2.0*RAND_MAX)-1.0/4.0;
+
+ for(k=0; k<ths->N; k++)
+ ths->alpha[k] = (double)rand()/(RAND_MAX)-1.0/2.0
+ + _Complex_I*(double)rand()/(RAND_MAX)-I/2.0;
+}
+
+/**
+ * Compares execution times for the fast and discrete Gauss transform.
+ *
+ * \arg ths The pointer to the fgt plan
+ * \arg dgt If this parameter is set \ref dgt_trafo is called as well
+ *
+ * \author Stefan Kunis
+ */
+double fgt_test_measure_time(fgt_plan *ths, unsigned dgt)
+{
+ int r;
+ ticks t0, t1;
+ double t_out;
+ double tau=0.01;
+
+ t_out=0;
+ r=0;
+ while(t_out<tau)
+ {
+ r++;
+ t0 = getticks();
+ if (dgt)
+ dgt_trafo(ths);
+ else
+ fgt_trafo(ths);
+ t1 = getticks();
+ t_out += nfft_elapsed_seconds(t1,t0);
+ }
+ t_out/=r;
+
+ return t_out;
+}
+
+/**
+ * Simple example that computes fast and discrete Gauss transforms.
+ *
+ * \arg ths The pointer to the fgt plan
+ * \arg sigma The parameter of the Gaussian
+ * \arg eps The target accuracy
+ *
+ * \author Stefan Kunis
+ */
+void fgt_test_simple(int N, int M, double _Complex sigma, double eps)
+{
+ fgt_plan my_plan;
+ double _Complex *swap_dgt;
+
+ fgt_init(&my_plan, N, M, sigma, eps);
+ swap_dgt = (double _Complex*)nfft_malloc(my_plan.M*sizeof(double _Complex));
+
+ fgt_test_init_rand(&my_plan);
+ fgt_init_node_dependent(&my_plan);
+
+ NFFT_SWAP_complex(swap_dgt,my_plan.f);
+ dgt_trafo(&my_plan);
+ nfft_vpr_complex(my_plan.f,my_plan.M,"discrete gauss transform");
+ NFFT_SWAP_complex(swap_dgt,my_plan.f);
+
+ fgt_trafo(&my_plan);
+ nfft_vpr_complex(my_plan.f,my_plan.M,"fast gauss transform");
+
+ printf("\n relative error: %1.3e\n", X(error_l_infty_1_complex)(swap_dgt,
+ my_plan.f, my_plan.M, my_plan.alpha, my_plan.N));
+
+ nfft_free(swap_dgt);
+ fgt_finalize(&my_plan);
+}
+
+/**
+ * Compares accuracy and execution time of the fast Gauss transform with
+ * increasing expansion degree.
+ * Similar to the test in F. Andersson and G. Beylkin.
+ * The fast Gauss transform with double _Complex parameters.
+ * J. Comput. Physics 203 (2005) 274-286
+ *
+ * \author Stefan Kunis
+ */
+void fgt_test_andersson(void)
+{
+ fgt_plan my_plan;
+ double _Complex *swap_dgt;
+ int N;
+
+ double _Complex sigma=4*(138+ _Complex_I*100);
+ int n=128;
+ int N_dgt_pre_exp=(int)(1U<<11);
+ int N_dgt=(int)(1U<<19);
+
+ printf("n=%d, sigma=%1.3e+i%1.3e\n",n,creal(sigma),cimag(sigma));
+
+ for(N=((int)(1U<<6)); N<((int)(1U<<22)); N=N<<1)
+ {
+ printf("$%d$\t & ",N);
+
+ if(N<N_dgt_pre_exp)
+ fgt_init_guru(&my_plan, N, N, sigma, n, 1, 7, DGT_PRE_CEXP);
+ else
+ fgt_init_guru(&my_plan, N, N, sigma, n, 1, 7, 0);
+
+ swap_dgt = (double _Complex*)nfft_malloc(my_plan.M*
+ sizeof(double _Complex));
+
+ fgt_test_init_rand(&my_plan);
+
+ fgt_init_node_dependent(&my_plan);
+
+ if(N<N_dgt)
+ {
+ NFFT_SWAP_complex(swap_dgt,my_plan.f);
+ if(N<N_dgt_pre_exp)
+ my_plan.flags^=DGT_PRE_CEXP;
+
+ printf("$%1.1e$\t & ",fgt_test_measure_time(&my_plan, 1));
+ if(N<N_dgt_pre_exp)
+ my_plan.flags^=DGT_PRE_CEXP;
+ NFFT_SWAP_complex(swap_dgt,my_plan.f);
+ }
+ else
+ printf("\t\t & ");
+
+ if(N<N_dgt_pre_exp)
+ printf("$%1.1e$\t & ",fgt_test_measure_time(&my_plan, 1));
+ else
+ printf("\t\t & ");
+
+ my_plan.flags^=FGT_NDFT;
+ printf("$%1.1e$\t & ",fgt_test_measure_time(&my_plan, 0));
+ my_plan.flags^=FGT_NDFT;
+
+ printf("$%1.1e$\t & ",fgt_test_measure_time(&my_plan, 0));
+
+ printf("$%1.1e$\t \\\\ \n",
+ X(error_l_infty_1_complex)(swap_dgt, my_plan.f, my_plan.M,
+ my_plan.alpha, my_plan.N));
+ fflush(stdout);
+
+ nfft_free(swap_dgt);
+ fgt_finalize(&my_plan);
+ fftw_cleanup();
+ }
+}
+
+/**
+ * Compares accuracy of the fast Gauss transform with increasing expansion
+ * degree.
+ *
+ * \author Stefan Kunis
+ */
+void fgt_test_error(void)
+{
+ fgt_plan my_plan;
+ double _Complex *swap_dgt;
+ int n,mi;
+
+ double _Complex sigma=4*(138+ _Complex_I*100);
+ int N=1000;
+ int M=1000;
+ int m[2]={7,3};
+
+ printf("N=%d;\tM=%d;\nsigma=%1.3e+i*%1.3e;\n",N,M,creal(sigma),cimag(sigma));
+ printf("error=[\n");
+
+ swap_dgt = (double _Complex*)nfft_malloc(M*sizeof(double _Complex));
+
+ for(n=8; n<=128; n+=4)
+ {
+ printf("%d\t",n);
+ for(mi=0;mi<2;mi++)
+ {
+ fgt_init_guru(&my_plan, N, M, sigma, n, 1, m[mi], 0);
+ fgt_test_init_rand(&my_plan);
+ fgt_init_node_dependent(&my_plan);
+
+ NFFT_SWAP_complex(swap_dgt,my_plan.f);
+ dgt_trafo(&my_plan);
+ NFFT_SWAP_complex(swap_dgt,my_plan.f);
+
+ fgt_trafo(&my_plan);
+
+ printf("%1.3e\t", X(error_l_infty_1_complex)(swap_dgt, my_plan.f,
+ my_plan.M, my_plan.alpha, my_plan.N));
+ fflush(stdout);
+
+ fgt_finalize(&my_plan);
+ fftw_cleanup();
+ }
+ printf("\n");
+ }
+ printf("];\n");
+
+ nfft_free(swap_dgt);
+}
+
+/**
+ * Compares accuracy of the fast Gauss transform with increasing expansion
+ * degree and different periodisation lengths.
+ *
+ * \author Stefan Kunis
+ */
+void fgt_test_error_p(void)
+{
+ fgt_plan my_plan;
+ double _Complex *swap_dgt;
+ int n,pi;
+
+ double _Complex sigma=20+40*_Complex_I;
+ int N=1000;
+ int M=1000;
+ double p[3]={1,1.5,2};
+
+ printf("N=%d;\tM=%d;\nsigma=%1.3e+i*%1.3e;\n",N,M,creal(sigma),cimag(sigma));
+ printf("error=[\n");
+
+ swap_dgt = (double _Complex*)nfft_malloc(M*sizeof(double _Complex));
+
+ for(n=8; n<=128; n+=4)
+ {
+ printf("%d\t",n);
+ for(pi=0;pi<3;pi++)
+ {
+ fgt_init_guru(&my_plan, N, M, sigma, n, p[pi], 7, 0);
+ fgt_test_init_rand(&my_plan);
+ fgt_init_node_dependent(&my_plan);
+
+ NFFT_SWAP_complex(swap_dgt,my_plan.f);
+ dgt_trafo(&my_plan);
+ NFFT_SWAP_complex(swap_dgt,my_plan.f);
+
+ fgt_trafo(&my_plan);
+
+ printf("%1.3e\t", X(error_l_infty_1_complex)(swap_dgt, my_plan.f,
+ my_plan.M, my_plan.alpha, my_plan.N));
+ fflush(stdout);
+
+ fgt_finalize(&my_plan);
+ fftw_cleanup();
+ }
+ printf("\n");
+ }
+ printf("];\n");
+}
+
+/**
+ * Different tests of the fast Gauss transform.
+ *
+ * \author Stefan Kunis
+ */
+int main(int argc,char **argv)
+{
+ if(argc!=2)
+ {
+ fprintf(stderr,"fastgauss type\n");
+ fprintf(stderr," type\n");
+ fprintf(stderr," 0 - Simple test.\n");
+ fprintf(stderr," 1 - Compares accuracy and execution time.\n");
+ fprintf(stderr," Pipe to output_andersson.tex\n");
+ fprintf(stderr," 2 - Compares accuracy.\n");
+ fprintf(stderr," Pipe to output_error.m\n");
+ fprintf(stderr," 3 - Compares accuracy.\n");
+ fprintf(stderr," Pipe to output_error_p.m\n");
+ return -1;
+ }
+
+ if(atoi(argv[1])==0)
+ fgt_test_simple(10, 10, 5+3*_Complex_I, 0.001);
+
+ if(atoi(argv[1])==1)
+ fgt_test_andersson();
+
+ if(atoi(argv[1])==2)
+ fgt_test_error();
+
+ if(atoi(argv[1])==3)
+ fgt_test_error_p();
+
+ return 1;
+}
+/* \} */
diff --git a/applications/fastgauss/levelplots.m b/applications/fastgauss/levelplots.m
new file mode 100644
index 0000000..4fa5084
--- /dev/null
+++ b/applications/fastgauss/levelplots.m
@@ -0,0 +1,35 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: levelplots.m 3776 2012-06-03 13:29:25Z keiner $
+clear;
+n=128;
+p=1;
+a = 1:1500;
+b = -1500:1500;
+[A,B] = meshgrid(a,b);
+S = A.^2 + B.^2;
+Z = exp(-pi^2*A*n^2./(4*p^2*S));
+ZZ = 2*exp(-A*(2*p-1)^2/4).*(1+1./p*(2*p-1)*A) + sqrt(pi./sqrt(S))/p.*exp(-pi^2*A*n^2./(4*p^2*S)).*(1 + 2*S*p^2./(n*pi^2*A));
+
+p =-20:2:2;
+v = 10.^p;
+figure(1);
+[C,h]=contour(A,B,ZZ,v);
+clabel(C,h);
+figure(2);
+[C,h]=contour(A,B,Z,v);
+clabel(C,h);
diff --git a/applications/fastgauss/show_results.m b/applications/fastgauss/show_results.m
new file mode 100644
index 0000000..a67bc80
--- /dev/null
+++ b/applications/fastgauss/show_results.m
@@ -0,0 +1,51 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: show_results.m 3776 2012-06-03 13:29:25Z keiner $
+output_error
+
+a=real(delta);
+C=exp(-a*pi^2/abs(delta)^2);
+
+figure(1);
+h=semilogy( error(:,1), error(:,2),'k-',...
+ error(:,1), error(:,3),'k--',...
+ error(:,1), error(:,4),'k-.',...
+error(:,1), 2*exp(-a/4)*(1+1/a) + sqrt(pi/abs(delta)) * exp(-pi^2*a*error(:,1).^2/(4*abs(delta)^2)).*(1+abs(delta)^2./(error(:,1)*pi^2*a)),'k:');
+set(h,'LineWidth',1.8); set(h,'Markersize',10); set(gca,'FontSize',25);
+axis([min(error(:,1)),max(error(:,1)),10^-18,1]);
+print gauss1.eps -deps
+
+figure(2);
+h=semilogy( error(:,1), error(:,5),'k-',...
+ error(:,1), error(:,6),'k--',...
+ error(:,1), error(:,7),'k-.',...
+ error(:,1), 8*abs(delta)^2./(pi^2*a*error(:,1)).*exp(-a/4).*(1+1./error(:,1)) + sqrt(pi/abs(delta)) * exp(-pi^2*a*error(:,1).^2/(4*abs(delta)^2)).*(1+2*abs(delta)^2./(error(:,1)*pi^2*a)),'k:');
+set(h,'LineWidth',1.8); set(h,'Markersize',10); set(gca,'FontSize',25);
+axis([min(error(:,1)),max(error(:,1)),10^-18,1]);
+print gauss2.eps -deps
+
+
+
+output_error_p
+
+figure(3);
+h=semilogy( error(:,1), error(:,2),'k-',...
+ error(:,1), error(:,3),'k--',...
+ error(:,1), error(:,4),'k-.');
+set(h,'LineWidth',1.8); set(h,'Markersize',10); set(gca,'FontSize',25);
+axis([min(error(:,1)),max(error(:,1)),10^-18,1]);
+print gauss6.eps -deps
diff --git a/applications/fastsum/Makefile.am b/applications/fastsum/Makefile.am
new file mode 100644
index 0000000..92a05d1
--- /dev/null
+++ b/applications/fastsum/Makefile.am
@@ -0,0 +1,73 @@
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+if HAVE_THREADS
+ FASTSUM_TEST_THREADS=fastsum_test_threads
+ LIBFASTSUM_THREADS=libfastsum_threads.la
+else
+ FASTSUM_TEST_THREADS=
+ LIBFASTSUM_THREADS=
+endif
+
+if HAVE_THREADS
+if HAVE_OPENMP
+ FASTSUM_BENCHOMP_PROGS=fastsum_benchomp fastsum_benchomp_createdataset fastsum_benchomp_detail_single fastsum_benchomp_detail_threads
+else
+ FASTSUM_BENCHOMP_PROGS=
+endif
+else
+ FASTSUM_BENCHOMP_PROGS=
+endif
+
+noinst_LTLIBRARIES = libfastsum.la libkernels.la $(LIBFASTSUM_THREADS)
+noinst_PROGRAMS = fastsum_test fastsum_matlab $(FASTSUM_TEST_THREADS) $(FASTSUM_BENCHOMP_PROGS)
+
+libfastsum_la_SOURCES = fastsum.c fastsum.h kernels.h
+libfastsum_la_LIBADD = @fftw3_LIBS@
+libfastsum_la_LDFLAGS = @fftw3_LDFLAGS@
+
+libkernels_la_SOURCES = kernels.c
+
+if HAVE_THREADS
+ libfastsum_threads_la_SOURCES = fastsum.c fastsum.h kernels.h
+ libfastsum_threads_la_LIBADD = @fftw3_threads_LIBS@
+ libfastsum_threads_la_LDFLAGS = @fftw3_threads_LDFLAGS@
+if HAVE_OPENMP
+ libfastsum_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
+fastsum_test_SOURCES = fastsum_test.c
+fastsum_test_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la
+
+fastsum_matlab_SOURCES = fastsum_matlab.c
+fastsum_matlab_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la
+
+if HAVE_THREADS
+ fastsum_test_threads_SOURCES = fastsum_test.c
+ fastsum_test_threads_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la
+if HAVE_OPENMP
+ fastsum_test_threads_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
+if HAVE_THREADS
+if HAVE_OPENMP
+ fastsum_benchomp_SOURCES = fastsum_benchomp.c
+ fastsum_benchomp_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ fastsum_benchomp_CFLAGS = $(OPENMP_CFLAGS)
+
+ fastsum_benchomp_createdataset_SOURCES = fastsum_benchomp_createdataset.c
+ fastsum_benchomp_createdataset_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+ fastsum_benchomp_detail_single_SOURCES = fastsum_benchomp_detail.c
+ fastsum_benchomp_detail_single_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+ fastsum_benchomp_detail_threads_SOURCES = fastsum_benchomp_detail.c
+ fastsum_benchomp_detail_threads_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ fastsum_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
+EXTRA_DIST = fastsum.m fastsum_test.m README
diff --git a/applications/fastsum/Makefile.in b/applications/fastsum/Makefile.in
new file mode 100644
index 0000000..9157fa7
--- /dev/null
+++ b/applications/fastsum/Makefile.in
@@ -0,0 +1,776 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = fastsum_test$(EXEEXT) fastsum_matlab$(EXEEXT) \
+ $(am__EXEEXT_1) $(am__EXEEXT_2)
+subdir = applications/fastsum
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libfastsum_la_DEPENDENCIES =
+am_libfastsum_la_OBJECTS = fastsum.lo
+libfastsum_la_OBJECTS = $(am_libfastsum_la_OBJECTS)
+libfastsum_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(libfastsum_la_LDFLAGS) $(LDFLAGS) -o $@
+libfastsum_threads_la_DEPENDENCIES =
+am__libfastsum_threads_la_SOURCES_DIST = fastsum.c fastsum.h kernels.h
+ at HAVE_THREADS_TRUE@am_libfastsum_threads_la_OBJECTS = \
+ at HAVE_THREADS_TRUE@ libfastsum_threads_la-fastsum.lo
+libfastsum_threads_la_OBJECTS = $(am_libfastsum_threads_la_OBJECTS)
+libfastsum_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libfastsum_threads_la_CFLAGS) $(CFLAGS) \
+ $(libfastsum_threads_la_LDFLAGS) $(LDFLAGS) -o $@
+ at HAVE_THREADS_TRUE@am_libfastsum_threads_la_rpath =
+libkernels_la_LIBADD =
+am_libkernels_la_OBJECTS = kernels.lo
+libkernels_la_OBJECTS = $(am_libkernels_la_OBJECTS)
+ at HAVE_THREADS_TRUE@am__EXEEXT_1 = fastsum_test_threads$(EXEEXT)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am__EXEEXT_2 = fastsum_benchomp$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ fastsum_benchomp_createdataset$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ fastsum_benchomp_detail_single$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ fastsum_benchomp_detail_threads$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
+am__fastsum_benchomp_SOURCES_DIST = fastsum_benchomp.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_fastsum_benchomp_OBJECTS = fastsum_benchomp-fastsum_benchomp.$(OBJEXT)
+fastsum_benchomp_OBJECTS = $(am_fastsum_benchomp_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_DEPENDENCIES = \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ libfastsum_threads.la \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ libkernels.la \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ $(top_builddir)/libnfft3_threads.la
+fastsum_benchomp_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(fastsum_benchomp_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__fastsum_benchomp_createdataset_SOURCES_DIST = \
+ fastsum_benchomp_createdataset.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_fastsum_benchomp_createdataset_OBJECTS = fastsum_benchomp_createdataset.$(OBJEXT)
+fastsum_benchomp_createdataset_OBJECTS = \
+ $(am_fastsum_benchomp_createdataset_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_createdataset_DEPENDENCIES = \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ libfastsum.la \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ libkernels.la \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ $(top_builddir)/libnfft3.la
+am__fastsum_benchomp_detail_single_SOURCES_DIST = \
+ fastsum_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_fastsum_benchomp_detail_single_OBJECTS = fastsum_benchomp_detail.$(OBJEXT)
+fastsum_benchomp_detail_single_OBJECTS = \
+ $(am_fastsum_benchomp_detail_single_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_single_DEPENDENCIES = \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ libfastsum.la \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ libkernels.la \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ $(top_builddir)/libnfft3.la
+am__fastsum_benchomp_detail_threads_SOURCES_DIST = \
+ fastsum_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_fastsum_benchomp_detail_threads_OBJECTS = fastsum_benchomp_detail_threads-fastsum_benchomp_detail.$(OBJEXT)
+fastsum_benchomp_detail_threads_OBJECTS = \
+ $(am_fastsum_benchomp_detail_threads_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_threads_DEPENDENCIES = \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ libfastsum_threads.la \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ libkernels.la \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ $(top_builddir)/libnfft3_threads.la
+fastsum_benchomp_detail_threads_LINK = $(LIBTOOL) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(fastsum_benchomp_detail_threads_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_fastsum_matlab_OBJECTS = fastsum_matlab.$(OBJEXT)
+fastsum_matlab_OBJECTS = $(am_fastsum_matlab_OBJECTS)
+fastsum_matlab_DEPENDENCIES = libfastsum.la libkernels.la \
+ $(top_builddir)/libnfft3.la
+am_fastsum_test_OBJECTS = fastsum_test.$(OBJEXT)
+fastsum_test_OBJECTS = $(am_fastsum_test_OBJECTS)
+fastsum_test_DEPENDENCIES = libfastsum.la libkernels.la \
+ $(top_builddir)/libnfft3.la
+am__fastsum_test_threads_SOURCES_DIST = fastsum_test.c
+ at HAVE_THREADS_TRUE@am_fastsum_test_threads_OBJECTS = fastsum_test_threads-fastsum_test.$(OBJEXT)
+fastsum_test_threads_OBJECTS = $(am_fastsum_test_threads_OBJECTS)
+ at HAVE_THREADS_TRUE@fastsum_test_threads_DEPENDENCIES = \
+ at HAVE_THREADS_TRUE@ libfastsum_threads.la libkernels.la \
+ at HAVE_THREADS_TRUE@ $(top_builddir)/libnfft3_threads.la
+fastsum_test_threads_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(fastsum_test_threads_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libfastsum_la_SOURCES) $(libfastsum_threads_la_SOURCES) \
+ $(libkernels_la_SOURCES) $(fastsum_benchomp_SOURCES) \
+ $(fastsum_benchomp_createdataset_SOURCES) \
+ $(fastsum_benchomp_detail_single_SOURCES) \
+ $(fastsum_benchomp_detail_threads_SOURCES) \
+ $(fastsum_matlab_SOURCES) $(fastsum_test_SOURCES) \
+ $(fastsum_test_threads_SOURCES)
+DIST_SOURCES = $(libfastsum_la_SOURCES) \
+ $(am__libfastsum_threads_la_SOURCES_DIST) \
+ $(libkernels_la_SOURCES) $(am__fastsum_benchomp_SOURCES_DIST) \
+ $(am__fastsum_benchomp_createdataset_SOURCES_DIST) \
+ $(am__fastsum_benchomp_detail_single_SOURCES_DIST) \
+ $(am__fastsum_benchomp_detail_threads_SOURCES_DIST) \
+ $(fastsum_matlab_SOURCES) $(fastsum_test_SOURCES) \
+ $(am__fastsum_test_threads_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+ at HAVE_THREADS_FALSE@FASTSUM_TEST_THREADS =
+ at HAVE_THREADS_TRUE@FASTSUM_TEST_THREADS = fastsum_test_threads
+ at HAVE_THREADS_FALSE@LIBFASTSUM_THREADS =
+ at HAVE_THREADS_TRUE@LIBFASTSUM_THREADS = libfastsum_threads.la
+ at HAVE_OPENMP_FALSE@@HAVE_THREADS_TRUE at FASTSUM_BENCHOMP_PROGS =
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at FASTSUM_BENCHOMP_PROGS = fastsum_benchomp fastsum_benchomp_createdataset fastsum_benchomp_detail_single fastsum_benchomp_detail_threads
+ at HAVE_THREADS_FALSE@FASTSUM_BENCHOMP_PROGS =
+noinst_LTLIBRARIES = libfastsum.la libkernels.la $(LIBFASTSUM_THREADS)
+libfastsum_la_SOURCES = fastsum.c fastsum.h kernels.h
+libfastsum_la_LIBADD = @fftw3_LIBS@
+libfastsum_la_LDFLAGS = @fftw3_LDFLAGS@
+libkernels_la_SOURCES = kernels.c
+ at HAVE_THREADS_TRUE@libfastsum_threads_la_SOURCES = fastsum.c fastsum.h kernels.h
+ at HAVE_THREADS_TRUE@libfastsum_threads_la_LIBADD = @fftw3_threads_LIBS@
+ at HAVE_THREADS_TRUE@libfastsum_threads_la_LDFLAGS = @fftw3_threads_LDFLAGS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libfastsum_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+fastsum_test_SOURCES = fastsum_test.c
+fastsum_test_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la
+fastsum_matlab_SOURCES = fastsum_matlab.c
+fastsum_matlab_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la
+ at HAVE_THREADS_TRUE@fastsum_test_threads_SOURCES = fastsum_test.c
+ at HAVE_THREADS_TRUE@fastsum_test_threads_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_test_threads_CFLAGS = $(OPENMP_CFLAGS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_SOURCES = fastsum_benchomp.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_CFLAGS = $(OPENMP_CFLAGS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_createdataset_SOURCES = fastsum_benchomp_createdataset.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_createdataset_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_single_SOURCES = fastsum_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_single_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_threads_SOURCES = fastsum_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_threads_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
+EXTRA_DIST = fastsum.m fastsum_test.m README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/fastsum/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applications/fastsum/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libfastsum.la: $(libfastsum_la_OBJECTS) $(libfastsum_la_DEPENDENCIES) $(EXTRA_libfastsum_la_DEPENDENCIES)
+ $(libfastsum_la_LINK) $(libfastsum_la_OBJECTS) $(libfastsum_la_LIBADD) $(LIBS)
+libfastsum_threads.la: $(libfastsum_threads_la_OBJECTS) $(libfastsum_threads_la_DEPENDENCIES) $(EXTRA_libfastsum_threads_la_DEPENDENCIES)
+ $(libfastsum_threads_la_LINK) $(am_libfastsum_threads_la_rpath) $(libfastsum_threads_la_OBJECTS) $(libfastsum_threads_la_LIBADD) $(LIBS)
+libkernels.la: $(libkernels_la_OBJECTS) $(libkernels_la_DEPENDENCIES) $(EXTRA_libkernels_la_DEPENDENCIES)
+ $(LINK) $(libkernels_la_OBJECTS) $(libkernels_la_LIBADD) $(LIBS)
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+fastsum_benchomp$(EXEEXT): $(fastsum_benchomp_OBJECTS) $(fastsum_benchomp_DEPENDENCIES) $(EXTRA_fastsum_benchomp_DEPENDENCIES)
+ @rm -f fastsum_benchomp$(EXEEXT)
+ $(fastsum_benchomp_LINK) $(fastsum_benchomp_OBJECTS) $(fastsum_benchomp_LDADD) $(LIBS)
+fastsum_benchomp_createdataset$(EXEEXT): $(fastsum_benchomp_createdataset_OBJECTS) $(fastsum_benchomp_createdataset_DEPENDENCIES) $(EXTRA_fastsum_benchomp_createdataset_DEPENDENCIES)
+ @rm -f fastsum_benchomp_createdataset$(EXEEXT)
+ $(LINK) $(fastsum_benchomp_createdataset_OBJECTS) $(fastsum_benchomp_createdataset_LDADD) $(LIBS)
+fastsum_benchomp_detail_single$(EXEEXT): $(fastsum_benchomp_detail_single_OBJECTS) $(fastsum_benchomp_detail_single_DEPENDENCIES) $(EXTRA_fastsum_benchomp_detail_single_DEPENDENCIES)
+ @rm -f fastsum_benchomp_detail_single$(EXEEXT)
+ $(LINK) $(fastsum_benchomp_detail_single_OBJECTS) $(fastsum_benchomp_detail_single_LDADD) $(LIBS)
+fastsum_benchomp_detail_threads$(EXEEXT): $(fastsum_benchomp_detail_threads_OBJECTS) $(fastsum_benchomp_detail_threads_DEPENDENCIES) $(EXTRA_fastsum_benchomp_detail_threads_DEPENDENCIES)
+ @rm -f fastsum_benchomp_detail_threads$(EXEEXT)
+ $(fastsum_benchomp_detail_threads_LINK) $(fastsum_benchomp_detail_threads_OBJECTS) $(fastsum_benchomp_detail_threads_LDADD) $(LIBS)
+fastsum_matlab$(EXEEXT): $(fastsum_matlab_OBJECTS) $(fastsum_matlab_DEPENDENCIES) $(EXTRA_fastsum_matlab_DEPENDENCIES)
+ @rm -f fastsum_matlab$(EXEEXT)
+ $(LINK) $(fastsum_matlab_OBJECTS) $(fastsum_matlab_LDADD) $(LIBS)
+fastsum_test$(EXEEXT): $(fastsum_test_OBJECTS) $(fastsum_test_DEPENDENCIES) $(EXTRA_fastsum_test_DEPENDENCIES)
+ @rm -f fastsum_test$(EXEEXT)
+ $(LINK) $(fastsum_test_OBJECTS) $(fastsum_test_LDADD) $(LIBS)
+fastsum_test_threads$(EXEEXT): $(fastsum_test_threads_OBJECTS) $(fastsum_test_threads_DEPENDENCIES) $(EXTRA_fastsum_test_threads_DEPENDENCIES)
+ @rm -f fastsum_test_threads$(EXEEXT)
+ $(fastsum_test_threads_LINK) $(fastsum_test_threads_OBJECTS) $(fastsum_test_threads_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_benchomp_createdataset.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_benchomp_detail.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_matlab.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_test_threads-fastsum_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/kernels.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libfastsum_threads_la-fastsum.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+libfastsum_threads_la-fastsum.lo: fastsum.c
+ at am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfastsum_threads_la_CFLAGS) $(CFLAGS) -MT libfastsum_threads_la-fastsum.lo -MD -MP -MF $(DEPDIR)/libfastsum_threads_la-fastsum.Tpo -c -o libfastsum_threads_la-fastsum.lo `test -f 'fastsum.c' || echo '$(srcdir)/'`fastsum.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libfastsum_threads_la-fastsum.Tpo $(DEPDIR)/libfastsum_threads_la-fastsum.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fastsum.c' object='libfastsum_threads_la-fastsum.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfastsum_threads_la_CFLAGS) $(CFLAGS) -c -o libfastsum_threads_la-fastsum.lo `test -f 'fastsum.c' || echo '$(srcdir)/'`fastsum.c
+
+fastsum_benchomp-fastsum_benchomp.o: fastsum_benchomp.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_CFLAGS) $(CFLAGS) -MT fastsum_benchomp-fastsum_benchomp.o -MD -MP -MF $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Tpo -c -o fastsum_benchomp-fastsum_benchomp.o `test -f 'fastsum_benchomp.c' || echo '$(srcdir)/'`fastsum_benchomp.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Tpo $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fastsum_benchomp.c' object='fastsum_benchomp-fastsum_benchomp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_CFLAGS) $(CFLAGS) -c -o fastsum_benchomp-fastsum_benchomp.o `test -f 'fastsum_benchomp.c' || echo '$(srcdir)/'`fastsum_benchomp.c
+
+fastsum_benchomp-fastsum_benchomp.obj: fastsum_benchomp.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_CFLAGS) $(CFLAGS) -MT fastsum_benchomp-fastsum_benchomp.obj -MD -MP -MF $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Tpo -c -o fastsum_benchomp-fastsum_benchomp.obj `if test -f 'fastsum_benchomp.c'; then $(CYGPATH_W) 'fastsum_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_benchomp.c'; fi`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Tpo $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fastsum_benchomp.c' object='fastsum_benchomp-fastsum_benchomp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_CFLAGS) $(CFLAGS) -c -o fastsum_benchomp-fastsum_benchomp.obj `if test -f 'fastsum_benchomp.c'; then $(CYGPATH_W) 'fastsum_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_benchomp.c'; fi`
+
+fastsum_benchomp_detail_threads-fastsum_benchomp_detail.o: fastsum_benchomp_detail.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT fastsum_benchomp_detail_threads-fastsum_benchomp_detail.o -MD -MP -MF $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Tpo -c -o fastsum_benchomp_detail_threads-fastsum_benchomp_detail.o `test -f 'fastsum_benchomp_detail.c' || echo '$(srcdir)/'`fastsum_benchomp_detail.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Tpo $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fastsum_benchomp_detail.c' object='fastsum_benchomp_detail_threads-fastsum_benchomp_detail.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o fastsum_benchomp_detail_threads-fastsum_benchomp_detail.o `test -f 'fastsum_benchomp_detail.c' || echo '$(srcdir)/'`fastsum_benchomp_detail.c
+
+fastsum_benchomp_detail_threads-fastsum_benchomp_detail.obj: fastsum_benchomp_detail.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT fastsum_benchomp_detail_threads-fastsum_benchomp_detail.obj -MD -MP -MF $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Tpo -c -o fastsum_benchomp_detail_threads-fastsum_benchomp_detail.obj `if test -f 'fastsum_benchomp_detail.c'; then $(CYGPATH_W) 'fastsum_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_benchomp_ [...]
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Tpo $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fastsum_benchomp_detail.c' object='fastsum_benchomp_detail_threads-fastsum_benchomp_detail.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o fastsum_benchomp_detail_threads-fastsum_benchomp_detail.obj `if test -f 'fastsum_benchomp_detail.c'; then $(CYGPATH_W) 'fastsum_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_benchomp_detail.c'; fi`
+
+fastsum_test_threads-fastsum_test.o: fastsum_test.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_test_threads_CFLAGS) $(CFLAGS) -MT fastsum_test_threads-fastsum_test.o -MD -MP -MF $(DEPDIR)/fastsum_test_threads-fastsum_test.Tpo -c -o fastsum_test_threads-fastsum_test.o `test -f 'fastsum_test.c' || echo '$(srcdir)/'`fastsum_test.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/fastsum_test_threads-fastsum_test.Tpo $(DEPDIR)/fastsum_test_threads-fastsum_test.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fastsum_test.c' object='fastsum_test_threads-fastsum_test.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_test_threads_CFLAGS) $(CFLAGS) -c -o fastsum_test_threads-fastsum_test.o `test -f 'fastsum_test.c' || echo '$(srcdir)/'`fastsum_test.c
+
+fastsum_test_threads-fastsum_test.obj: fastsum_test.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_test_threads_CFLAGS) $(CFLAGS) -MT fastsum_test_threads-fastsum_test.obj -MD -MP -MF $(DEPDIR)/fastsum_test_threads-fastsum_test.Tpo -c -o fastsum_test_threads-fastsum_test.obj `if test -f 'fastsum_test.c'; then $(CYGPATH_W) 'fastsum_test.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_test.c'; fi`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/fastsum_test_threads-fastsum_test.Tpo $(DEPDIR)/fastsum_test_threads-fastsum_test.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fastsum_test.c' object='fastsum_test_threads-fastsum_test.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_test_threads_CFLAGS) $(CFLAGS) -c -o fastsum_test_threads-fastsum_test.obj `if test -f 'fastsum_test.c'; then $(CYGPATH_W) 'fastsum_test.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_test.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \
+ cscopelist ctags distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/fastsum/README b/applications/fastsum/README
new file mode 100644
index 0000000..e021533
--- /dev/null
+++ b/applications/fastsum/README
@@ -0,0 +1,41 @@
+fastsum - fast NFFT-based summation
+
+ This library of C functions computes approximations of sums of the form
+
+ N
+ -
+ f(y ) = > alpha K(y - x ) (j=1,...,M)
+ j - k j k
+ k=1
+
+ where x_k, y_j are arbitrary nodes in [-1/4+eps_B/2, 1/4-eps_B/2]^d, alpha_k
+ are complex coefficients and K: R^d -> C is a kernel function which is C^oo
+ except of the origin. Such kernels include log|x| and 1/|x|^b (b \in N) or
+ the parameter dependent Hardy's multiquadric (x^2+c^2)^(1/2) and generalized
+ multiquadrics (x^2+c^2)^(-b/2) (b \in N).
+
+ It is based on the fast Fourier transform for nonequispaced nodes (NFFT) and
+ therefore depends on the NFFT C-library. New kernels are easily incorporated
+ by defining an appropriate C-function (see kernels.c for some examples).
+
+ fastsum_test.c is an example for the usage of the library. The MATLAB script
+ file fastsum_test.m calls the MATLAB function fastsum.m, which is a simple
+ example for the usage in MATLAB.
+
+
+
+ References:
+
+ [1] D. Potts, and G. Steidl. Fast summation at nonequispaced knots by NFFTs.
+ SIAM J. Sci. Comput., 24:2013-2037, 2003.
+
+ [2] D. Potts, G. Steidl, and A. Nieslony. Fast convolution with radial
+ kernels at nonequispaced knots. Numer. Math., 98:329-351, 2004.
+
+ [3] M. Fenn, and G. Steidl. Fast NFFT-based summation of radial functions.
+ Sampl. Theory Signal Image Process., 3:1-28, 2004.
+
+ [4] M. Fenn, and D. Potts. Fast summation based on fast trigonometric
+ transforms at non-equispaced nodes. Numer. Linear Algebra. Appl.,
+ 12:161-169, 2005.
+
diff --git a/applications/fastsum/fastsum.c b/applications/fastsum/fastsum.c
new file mode 100644
index 0000000..8bb53e0
--- /dev/null
+++ b/applications/fastsum/fastsum.c
@@ -0,0 +1,1018 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: fastsum.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/*! \file fastsum.c
+ * \brief Fast NFFT-based summation algorithm.
+ *
+ * \author Markus Fenn
+ * \date 2003-2006
+ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "fastsum.h"
+#include "infft.h"
+
+/** Required for test if (ths->k == one_over_x) */
+#include "kernels.h"
+
+/**
+ * \addtogroup applications_fastsum
+ * \{
+ */
+
+/** max */
+int max_i(int a, int b)
+{
+ return a >= b ? a : b;
+}
+
+/** factorial */
+double fak(int n)
+{
+ if (n<=1) return 1.0;
+ else return (double)n*fak(n-1);
+}
+
+/** binomial coefficient */
+double binom(int n, int m)
+{
+ return fak(n)/fak(m)/fak(n-m);
+}
+
+/** basis polynomial for regularized kernel */
+double BasisPoly(int m, int r, double xx)
+{
+ int k;
+ double sum=0.0;
+
+ for (k=0; k<=m-r; k++) {
+ sum+=binom(m+k,k)*pow((xx+1.0)/2.0,(double)k);
+ }
+ return sum*pow((xx+1.0),(double)r)*pow(1.0-xx,(double)(m+1))/(1<<(m+1))/fak(r); /* 1<<(m+1) = 2^(m+1) */
+}
+
+/** regularized kernel with K_I arbitrary and K_B smooth to zero */
+double _Complex regkern(kernel k, double xx, int p, const double *param, double a, double b)
+{
+ int r;
+ double _Complex sum=0.0;
+
+ if (xx<-0.5)
+ xx=-0.5;
+ if (xx>0.5)
+ xx=0.5;
+ if ((xx>=-0.5+b && xx<=-a) || (xx>=a && xx<=0.5-b)) {
+ return k(xx,0,param);
+ }
+ else if (xx<-0.5+b) {
+ sum=(k(-0.5,0,param)+k(0.5,0,param))/2.0
+ *BasisPoly(p-1,0,2.0*xx/b+(1.0-b)/b);
+ for (r=0; r<p; r++) {
+ sum+=pow(-b/2.0,(double)r)
+ *k(-0.5+b,r,param)
+ *BasisPoly(p-1,r,-2.0*xx/b+(b-1.0)/b);
+ }
+ return sum;
+ }
+ else if ((xx>-a) && (xx<a)) {
+ for (r=0; r<p; r++) {
+ sum+=pow(a,(double)r)
+ *( k(-a,r,param)*BasisPoly(p-1,r,xx/a)
+ +k( a,r,param)*BasisPoly(p-1,r,-xx/a)*(r & 1 ? -1 : 1));
+ }
+ return sum;
+ }
+ else if (xx>0.5-b) {
+ sum=(k(-0.5,0,param)+k(0.5,0,param))/2.0
+ *BasisPoly(p-1,0,-2.0*xx/b+(1.0-b)/b);
+ for (r=0; r<p; r++) {
+ sum+=pow(b/2.0,(double)r)
+ *k(0.5-b,r,param)
+ *BasisPoly(p-1,r,2.0*xx/b-(1.0-b)/b);
+ }
+ return sum;
+ }
+ return k(xx,0,param);
+}
+
+/** regularized kernel with K_I arbitrary and K_B periodized
+ * (used in 1D)
+ */
+double _Complex regkern1(kernel k, double xx, int p, const double *param, double a, double b)
+{
+ int r;
+ double _Complex sum=0.0;
+
+ if (xx<-0.5)
+ xx=-0.5;
+ if (xx>0.5)
+ xx=0.5;
+ if ((xx>=-0.5+b && xx<=-a) || (xx>=a && xx<=0.5-b))
+ {
+ return k(xx,0,param);
+ }
+ else if ((xx>-a) && (xx<a))
+ {
+ for (r=0; r<p; r++) {
+ sum+=pow(a,(double)r)
+ *( k(-a,r,param)*BasisPoly(p-1,r,xx/a)
+ +k( a,r,param)*BasisPoly(p-1,r,-xx/a)*(r & 1 ? -1 : 1));
+ }
+ return sum;
+ }
+ else if (xx<-0.5+b)
+ {
+ for (r=0; r<p; r++) {
+ sum+=pow(b,(double)r)
+ *( k(0.5-b,r,param)*BasisPoly(p-1,r,(xx+0.5)/b)
+ +k(-0.5+b,r,param)*BasisPoly(p-1,r,-(xx+0.5)/b)*(r & 1 ? -1 : 1));
+ }
+ return sum;
+ }
+ else if (xx>0.5-b)
+ {
+ for (r=0; r<p; r++) {
+ sum+=pow(b,(double)r)
+ *( k(0.5-b,r,param)*BasisPoly(p-1,r,(xx-0.5)/b)
+ +k(-0.5+b,r,param)*BasisPoly(p-1,r,-(xx-0.5)/b)*(r & 1 ? -1 : 1));
+ }
+ return sum;
+ }
+ return k(xx,0,param);
+}
+
+/** regularized kernel for even kernels with K_I even and K_B mirrored */
+double _Complex regkern2(kernel k, double xx, int p, const double *param, double a, double b)
+{
+ int r;
+ double _Complex sum=0.0;
+
+ xx=fabs(xx);
+
+ if (xx>0.5) {
+ for (r=0; r<p; r++) {
+ sum+=pow(b,(double)r)*k(0.5-b,r,param)
+ *(BasisPoly(p-1,r,0)+BasisPoly(p-1,r,0));
+ }
+ return sum;
+ }
+ else if ((a<=xx) && (xx<=0.5-b)) {
+ return k(xx,0,param);
+ }
+ else if (xx<a) {
+ for (r=0; r<p; r++) {
+ sum+=pow(-a,(double)r)*k(a,r,param)
+ *(BasisPoly(p-1,r,xx/a)+BasisPoly(p-1,r,-xx/a));
+ }
+ return sum;
+ }
+ else if ((0.5-b<xx) && (xx<=0.5)) {
+ for (r=0; r<p; r++) {
+ sum+=pow(b,(double)r)*k(0.5-b,r,param)
+ *(BasisPoly(p-1,r,(xx-0.5)/b)+BasisPoly(p-1,r,-(xx-0.5)/b));
+ }
+ return sum;
+ }
+ return 0.0;
+}
+
+/** regularized kernel for even kernels with K_I even
+ * and K_B mirrored smooth to K(1/2) (used in dD, d>1)
+ */
+double _Complex regkern3(kernel k, double xx, int p, const double *param, double a, double b)
+{
+ int r;
+ double _Complex sum=0.0;
+
+ xx=fabs(xx);
+
+ if (xx>=0.5) {
+ /*return kern(typ,c,0,0.5);*/
+ xx=0.5;
+ }
+ /* else */
+ if ((a<=xx) && (xx<=0.5-b)) {
+ return k(xx,0,param);
+ }
+ else if (xx<a) {
+ for (r=0; r<p; r++) {
+ sum+=pow(-a,(double)r)*k(a,r,param)
+ *(BasisPoly(p-1,r,xx/a)+BasisPoly(p-1,r,-xx/a));
+ }
+ /*sum=kern(typ,c,0,xx); */
+ return sum;
+ }
+ else if ((0.5-b<xx) && (xx<=0.5)) {
+ sum=k(0.5,0,param)*BasisPoly(p-1,0,-2.0*xx/b+(1.0-b)/b);
+ /* sum=regkern2(typ,c,p,a,b, 0.5)*BasisPoly(p-1,0,-2.0*xx/b+(1.0-b)/b); */
+ for (r=0; r<p; r++) {
+ sum+=pow(b/2.0,(double)r)
+ *k(0.5-b,r,param)
+ *BasisPoly(p-1,r,2.0*xx/b-(1.0-b)/b);
+ }
+ return sum;
+ }
+ return 0.0;
+}
+
+/** linear spline interpolation in near field with even kernels */
+double _Complex linintkern(const double x, const double _Complex *Add,
+ const int Ad, const double a)
+{
+ double c,c1,c3;
+ int r;
+ double _Complex f1,f2;
+
+ c=x*Ad/a;
+ r=c; r=abs(r);
+ f1=Add[r];f2=Add[r+1];
+ c=fabs(c);
+ c1=c-r;
+ c3=c1-1.0;
+ return (-f1*c3+f2*c1);
+}
+
+double _Complex quadrintkern(const double x, const double _Complex *Add,
+ const int Ad, const double a)
+{
+ double c,c1,c2,c3;
+ int r;
+ double _Complex f0,f1,f2;
+
+ c=x*Ad/a;
+ r=c; r=abs(r);
+ if (r==0) {f0=Add[r+1];f1=Add[r];f2=Add[r+1];}
+ else { f0=Add[r-1];f1=Add[r];f2=Add[r+1];}
+ c=fabs(c);
+ c1=c-r;
+ c2=c1+1.0;
+ c3=c1-1.0;
+ return (f0*c1*c3/2.0-f1*c2*c3+f2*c2*c1/2.0);
+}
+
+/** cubic spline interpolation in near field with even kernels */
+double _Complex kubintkern(const double x, const double _Complex *Add,
+ const int Ad, const double a)
+{
+ double c,c1,c2,c3,c4;
+ int r;
+ double _Complex f0,f1,f2,f3;
+ c=x*Ad/a;
+ r=c; r=abs(r);
+ if (r==0) {f0=Add[r+1];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}
+ else { f0=Add[r-1];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}
+ c=fabs(c);
+ c1=c-r;
+ c2=c1+1.0;
+ c3=c1-1.0;
+ c4=c1-2.0;
+ /* return(-f0*(c-r)*(c-r-1.0)*(c-r-2.0)/6.0+f1*(c-r+1.0)*(c-r-1.0)*(c-r-2.0)/2-
+ f2*(c-r+1.0)*(c-r)*(c-r-2.0)/2+f3*(c-r+1.0)*(c-r)*(c-r-1.0)/6.0); */
+ return(-f0*c1*c3*c4/6.0+f1*c2*c3*c4/2.0-f2*c2*c1*c4/2.0+f3*c2*c1*c3/6.0);
+}
+
+/** cubic spline interpolation in near field with arbitrary kernels */
+double _Complex kubintkern1(const double x, const double _Complex *Add,
+ const int Ad, const double a)
+{
+ double c,c1,c2,c3,c4;
+ int r;
+ double _Complex f0,f1,f2,f3;
+ Add+=2;
+ c=(x+a)*Ad/2/a;
+ r=c; r=abs(r);
+ /*if (r==0) {f0=Add[r];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}
+ else */
+ { f0=Add[r-1];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}
+ c=fabs(c);
+ c1=c-r;
+ c2=c1+1.0;
+ c3=c1-1.0;
+ c4=c1-2.0;
+ /* return(-f0*(c-r)*(c-r-1.0)*(c-r-2.0)/6.0+f1*(c-r+1.0)*(c-r-1.0)*(c-r-2.0)/2-
+ f2*(c-r+1.0)*(c-r)*(c-r-2.0)/2+f3*(c-r+1.0)*(c-r)*(c-r-1.0)/6.0); */
+ return(-f0*c1*c3*c4/6.0+f1*c2*c3*c4/2.0-f2*c2*c1*c4/2.0+f3*c2*c1*c3/6.0);
+}
+
+/** quicksort algorithm for source knots and associated coefficients */
+void quicksort(int d, int t, double *x, double _Complex *alpha, int N)
+{
+ int lpos=0;
+ int rpos=N-1;
+ /*double pivot=x[((N-1)/2)*d+t];*/
+ double pivot=x[(N/2)*d+t];
+
+ int k;
+ double temp1;
+ double _Complex temp2;
+
+ while (lpos<=rpos)
+ {
+ while (x[lpos*d+t]<pivot)
+ lpos++;
+ while (x[rpos*d+t]>pivot)
+ rpos--;
+ if (lpos<=rpos)
+ {
+ for (k=0; k<d; k++)
+ {
+ temp1=x[lpos*d+k];
+ x[lpos*d+k]=x[rpos*d+k];
+ x[rpos*d+k]=temp1;
+ }
+ temp2=alpha[lpos];
+ alpha[lpos]=alpha[rpos];
+ alpha[rpos]=temp2;
+
+ lpos++;
+ rpos--;
+ }
+ }
+ if (0<rpos)
+ quicksort(d,t,x,alpha,rpos+1);
+ if (lpos<N-1)
+ quicksort(d,t,x+lpos*d,alpha+lpos,N-lpos);
+}
+
+/** initialize box-based search data structures */
+static void BuildBox(fastsum_plan *ths)
+{
+ int t, l;
+ int *box_index;
+ double val[ths->d];
+
+ box_index = (int *) malloc(ths->box_count * sizeof(int));
+ for (t=0; t < ths->box_count; t++)
+ box_index[t] = 0;
+
+ for (l=0; l < ths->N_total; l++)
+ {
+ int ind = 0;
+ for (t=0; t < ths->d; t++)
+ {
+ val[t] = ths->x[ths->d * l + t] + 0.25 - ths->eps_B/2.0;
+ ind *= ths->box_count_per_dim;
+ ind += (int) (val[t] / ths->eps_I);
+ }
+ box_index[ind]++;
+ }
+
+ ths->box_offset[0] = 0;
+ for (t=1; t<=ths->box_count; t++)
+ {
+ ths->box_offset[t] = ths->box_offset[t-1] + box_index[t-1];
+ box_index[t-1] = ths->box_offset[t-1];
+ }
+
+ for (l=0; l < ths->N_total; l++)
+ {
+ int ind = 0;
+ for (t=0; t < ths->d; t++)
+ {
+ val[t] = ths->x[ths->d * l + t] + 0.25 - ths->eps_B/2.0;
+ ind *= ths->box_count_per_dim;
+ ind += (int) (val[t] / ths->eps_I);
+ }
+
+ ths->box_alpha[box_index[ind]] = ths->alpha[l];
+
+ for (t=0; t < ths->d; t++)
+ {
+ ths->box_x[ths->d * box_index[ind] + t] = ths->x[ths->d * l + t];
+ }
+ box_index[ind]++;
+ }
+ free(box_index);
+}
+
+/** inner computation function for box-based near field correction */
+static inline double _Complex calc_SearchBox(int d, double *y, double *x, double _Complex *alpha, int start, int end_lt, const double _Complex *Add, const int Ad, int p, double a, const kernel k, const double *param, const unsigned flags)
+{
+ double _Complex result = 0.0;
+
+ int m, l;
+ double r;
+
+ for (m = start; m < end_lt; m++)
+ {
+ if (d==1)
+ {
+ r = y[0]-x[m];
+ }
+ else
+ {
+ r=0.0;
+ for (l=0; l<d; l++)
+ r+=(y[l]-x[m*d+l])*(y[l]-x[m*d+l]);
+ r=sqrt(r);
+ }
+ if (fabs(r)<a)
+ {
+ result += alpha[m]*k(r,0,param); /* alpha*(kern-regkern) */
+ if (d==1)
+ {
+ if (flags & EXACT_NEARFIELD)
+ result -= alpha[m]*regkern1(k,r,p,param,a,1.0/16.0); /* exact value (in 1D) */
+ else
+ result -= alpha[m]*kubintkern1(r,Add,Ad,a); /* spline approximation */
+ }
+ else
+ {
+ if (flags & EXACT_NEARFIELD)
+ result -= alpha[m]*regkern(k,r,p,param,a,1.0/16.0); /* exact value (in dD) */
+ else
+#if defined(NF_KUB)
+ result -= alpha[m]*kubintkern(r,Add,Ad,a); /* spline approximation */
+#elif defined(NF_QUADR)
+ result -= alpha[m]*quadrintkern(r,Add,Ad,a); /* spline approximation */
+#elif defined(NF_LIN)
+ result -= alpha[m]*linintkern(r,Add,Ad,a); /* spline approximation */
+#else
+ #error define interpolation method
+#endif
+ }
+ }
+ }
+ return result;
+}
+
+/** box-based near field correction */
+static double _Complex SearchBox(double *y, fastsum_plan *ths)
+{
+ double _Complex val = 0.0;
+ int t, l;
+ int y_multiind[ths->d];
+ int multiindex[ths->d];
+ int y_ind;
+
+ for (t=0; t < ths->d; t++)
+ {
+ y_multiind[t] = ((y[t] + 0.25 - ths->eps_B/2.0) / ths->eps_I);
+ }
+
+ if (ths->d==1)
+ {
+ for (y_ind = max_i(0, y_multiind[0]-1); y_ind < ths->box_count_per_dim && y_ind <= y_multiind[0]+1; y_ind++){
+ val += calc_SearchBox(ths->d, y, ths->box_x, ths->box_alpha, ths->box_offset[y_ind], ths->box_offset[y_ind+1], ths->Add, ths->Ad, ths->p, ths->eps_I, ths->k, ths->kernel_param, ths->flags);
+ }
+ }
+ else if (ths->d==2)
+ {
+ for (multiindex[0] = max_i(0, y_multiind[0]-1); multiindex[0] < ths->box_count_per_dim && multiindex[0] <= y_multiind[0]+1; multiindex[0]++)
+ for (multiindex[1] = max_i(0, y_multiind[1]-1); multiindex[1] < ths->box_count_per_dim && multiindex[1] <= y_multiind[1]+1; multiindex[1]++)
+ {
+ y_ind = (ths->box_count_per_dim * multiindex[0]) + multiindex[1];
+ val += calc_SearchBox(ths->d, y, ths->box_x, ths->box_alpha, ths->box_offset[y_ind], ths->box_offset[y_ind+1], ths->Add, ths->Ad, ths->p, ths->eps_I, ths->k, ths->kernel_param, ths->flags);
+ }
+ }
+ else if(ths->d==3)
+ {
+ for (multiindex[0] = max_i(0, y_multiind[0]-1); multiindex[0] < ths->box_count_per_dim && multiindex[0] <= y_multiind[0]+1; multiindex[0]++)
+ for (multiindex[1] = max_i(0, y_multiind[1]-1); multiindex[1] < ths->box_count_per_dim && multiindex[1] <= y_multiind[1]+1; multiindex[1]++)
+ for (multiindex[2] = max_i(0, y_multiind[2]-1); multiindex[2] < ths->box_count_per_dim && multiindex[2] <= y_multiind[2]+1; multiindex[2]++)
+ {
+ y_ind = ((ths->box_count_per_dim * multiindex[0]) + multiindex[1]) * ths->box_count_per_dim + multiindex[2];
+ val += calc_SearchBox(ths->d, y, ths->box_x, ths->box_alpha, ths->box_offset[y_ind], ths->box_offset[y_ind+1], ths->Add, ths->Ad, ths->p, ths->eps_I, ths->k, ths->kernel_param, ths->flags);
+ }
+ }
+ else {
+ exit(-1);
+ }
+ return val;
+}
+
+/** recursive sort of source knots dimension by dimension to get tree structure */
+void BuildTree(int d, int t, double *x, double _Complex *alpha, int N)
+{
+ if (N>1)
+ {
+ int m=N/2;
+
+ quicksort(d,t,x,alpha,N);
+
+ BuildTree(d, (t+1)%d, x, alpha, m);
+ BuildTree(d, (t+1)%d, x+(m+1)*d, alpha+(m+1), N-m-1);
+ }
+}
+
+/** fast search in tree of source knots for near field computation*/
+double _Complex SearchTree(const int d, const int t, const double *x,
+ const double _Complex *alpha, const double *xmin, const double *xmax,
+ const int N, const kernel k, const double *param, const int Ad,
+ const double _Complex *Add, const int p, const unsigned flags)
+{
+ int m=N/2;
+ double Min=xmin[t], Max=xmax[t], Median=x[m*d+t];
+ double a=fabs(Max-Min)/2;
+ int l;
+ int E=0;
+ double r;
+
+ if (N==0)
+ return 0.0;
+ if (Min>Median)
+ return SearchTree(d,(t+1)%d,x+(m+1)*d,alpha+(m+1),xmin,xmax,N-m-1,k,param,Ad,Add,p,flags);
+ else if (Max<Median)
+ return SearchTree(d,(t+1)%d,x,alpha,xmin,xmax,m,k,param,Ad,Add,p,flags);
+ else
+ {
+ double _Complex result = 0.0;
+ E=0;
+
+ for (l=0; l<d; l++)
+ {
+ if ( x[m*d+l]>xmin[l] && x[m*d+l]<xmax[l] )
+ E++;
+ }
+
+ if (E==d)
+ {
+ if (d==1)
+ {
+ r = xmin[0]+a-x[m]; /* remember: xmin+a = y */
+ }
+ else
+ {
+ r=0.0;
+ for (l=0; l<d; l++)
+ r+=(xmin[l]+a-x[m*d+l])*(xmin[l]+a-x[m*d+l]); /* remember: xmin+a = y */
+ r=sqrt(r);
+ }
+ if (fabs(r)<a)
+ {
+ result += alpha[m]*k(r,0,param); /* alpha*(kern-regkern) */
+ if (d==1)
+ {
+ if (flags & EXACT_NEARFIELD)
+ result -= alpha[m]*regkern1(k,r,p,param,a,1.0/16.0); /* exact value (in 1D) */
+ else
+ result -= alpha[m]*kubintkern1(r,Add,Ad,a); /* spline approximation */
+ }
+ else
+ {
+ if (flags & EXACT_NEARFIELD)
+ result -= alpha[m]*regkern(k,r,p,param,a,1.0/16.0); /* exact value (in dD) */
+ else
+#if defined(NF_KUB)
+ result -= alpha[m]*kubintkern(r,Add,Ad,a); /* spline approximation */
+#elif defined(NF_QUADR)
+ result -= alpha[m]*quadrintkern(r,Add,Ad,a); /* spline approximation */
+#elif defined(NF_LIN)
+ result -= alpha[m]*linintkern(r,Add,Ad,a); /* spline approximation */
+#else
+ #error define interpolation method
+#endif
+ }
+ }
+ }
+ result += SearchTree(d,(t+1)%d,x+(m+1)*d,alpha+(m+1),xmin,xmax,N-m-1,k,param,Ad,Add,p,flags)
+ + SearchTree(d,(t+1)%d,x,alpha,xmin,xmax,m,k,param,Ad,Add,p,flags);
+ return result;
+ }
+}
+
+/** initialization of fastsum plan */
+void fastsum_init_guru(fastsum_plan *ths, int d, int N_total, int M_total, kernel k, double *param, unsigned flags, int nn, int m, int p, double eps_I, double eps_B)
+{
+ int t;
+ int N[d], n[d];
+ int n_total;
+ int sort_flags_trafo = 0;
+ int sort_flags_adjoint = 0;
+#ifdef _OPENMP
+ int nthreads = nfft_get_omp_num_threads();
+#endif
+
+ if (d > 1)
+ {
+ sort_flags_trafo = NFFT_SORT_NODES;
+#ifdef _OPENMP
+ sort_flags_adjoint = NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT;
+#else
+ sort_flags_adjoint = NFFT_SORT_NODES;
+#endif
+ }
+
+ ths->d = d;
+
+ ths->N_total = N_total;
+ ths->M_total = M_total;
+
+ ths->x = (double *)nfft_malloc(d*N_total*(sizeof(double)));
+ ths->alpha = (double _Complex *)nfft_malloc(N_total*(sizeof(double _Complex)));
+
+ ths->y = (double *)nfft_malloc(d*M_total*(sizeof(double)));
+ ths->f = (double _Complex *)nfft_malloc(M_total*(sizeof(double _Complex)));
+
+ ths->k = k;
+ ths->kernel_param = param;
+
+ ths->flags = flags;
+
+ ths->p = p;
+ ths->eps_I = eps_I; /* =(double)ths->p/(double)nn; */ /** inner boundary */
+ ths->eps_B = eps_B; /* =1.0/16.0; */ /** outer boundary */
+
+ /** init spline for near field computation */
+ if (!(ths->flags & EXACT_NEARFIELD))
+ {
+ if (ths->d==1)
+ {
+ ths->Ad = 4*(ths->p)*(ths->p);
+ ths->Add = (double _Complex *)nfft_malloc((ths->Ad+5)*(sizeof(double _Complex)));
+ }
+ else
+ {
+ if (ths->k == one_over_x)
+ {
+ double delta = 1e-8;
+ switch(p)
+ {
+ case 2: delta = 1e-3;
+ break;
+ case 3: delta = 1e-4;
+ break;
+ case 4: delta = 1e-5;
+ break;
+ case 5: delta = 1e-6;
+ break;
+ case 6: delta = 1e-6;
+ break;
+ case 7: delta = 1e-7;
+ break;
+ default: delta = 1e-8;
+ }
+
+#if defined(NF_KUB)
+ ths->Ad = max_i(10, (int) ceil(1.4/pow(delta,1.0/4.0)));
+ ths->Add = (double _Complex *)nfft_malloc((ths->Ad+3)*(sizeof(double _Complex)));
+#elif defined(NF_QUADR)
+ ths->Ad = (int) ceil(2.2/pow(delta,1.0/3.0));
+ ths->Add = (double _Complex *)nfft_malloc((ths->Ad+3)*(sizeof(double _Complex)));
+#elif defined(NF_LIN)
+ ths->Ad = (int) ceil(1.7/pow(delta,1.0/2.0));
+ ths->Add = (double _Complex *)nfft_malloc((ths->Ad+3)*(sizeof(double _Complex)));
+#else
+ #error define NF_LIN or NF_QUADR or NF_KUB
+#endif
+ }
+ else
+ {
+ ths->Ad = 2*(ths->p)*(ths->p);
+ ths->Add = (double _Complex *)nfft_malloc((ths->Ad+3)*(sizeof(double _Complex)));
+ }
+ }
+ }
+
+ /** init d-dimensional NFFT plan */
+ ths->n = nn;
+ for (t=0; t<d; t++)
+ {
+ N[t] = nn;
+ n[t] = 2*nn;
+ }
+ nfft_init_guru(&(ths->mv1), d, N, N_total, n, m,
+ sort_flags_adjoint |
+ PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+ nfft_init_guru(&(ths->mv2), d, N, M_total, n, m,
+ sort_flags_trafo |
+ PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /** init d-dimensional FFTW plan */
+ n_total = 1;
+ for (t=0; t<d; t++)
+ n_total *= nn;
+
+ ths->b = (fftw_complex *)nfft_malloc(n_total*sizeof(fftw_complex));
+#ifdef _OPENMP
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+ fftw_plan_with_nthreads(nthreads);
+#endif
+
+ ths->fft_plan = fftw_plan_dft(d,N,ths->b,ths->b,FFTW_FORWARD,FFTW_ESTIMATE);
+
+#ifdef _OPENMP
+}
+#endif
+
+ if (ths->flags & NEARFIELD_BOXES)
+ {
+ ths->box_count_per_dim = floor((0.5 - ths->eps_B) / ths->eps_I) + 1;
+ ths->box_count = 1;
+ for (t=0; t<ths->d; t++)
+ ths->box_count *= ths->box_count_per_dim;
+
+ ths->box_offset = (int *) nfft_malloc((ths->box_count+1) * sizeof(int));
+
+ ths->box_alpha = (double _Complex *)nfft_malloc(ths->N_total*(sizeof(double _Complex)));
+
+ ths->box_x = (double *) nfft_malloc(ths->d * ths->N_total * sizeof(double));
+ }
+}
+
+/** finalization of fastsum plan */
+void fastsum_finalize(fastsum_plan *ths)
+{
+ nfft_free(ths->x);
+ nfft_free(ths->alpha);
+ nfft_free(ths->y);
+ nfft_free(ths->f);
+
+ if (!(ths->flags & EXACT_NEARFIELD))
+ nfft_free(ths->Add);
+
+ nfft_finalize(&(ths->mv1));
+ nfft_finalize(&(ths->mv2));
+
+#ifdef _OPENMP
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+#endif
+ fftw_destroy_plan(ths->fft_plan);
+#ifdef _OPENMP
+}
+#endif
+
+ nfft_free(ths->b);
+
+ if (ths->flags & NEARFIELD_BOXES)
+ {
+ nfft_free(ths->box_offset);
+ nfft_free(ths->box_alpha);
+ nfft_free(ths->box_x);
+ }
+}
+
+/** direct computation of sums */
+void fastsum_exact(fastsum_plan *ths)
+{
+ int j,k;
+ int t;
+ double r;
+
+ #pragma omp parallel for default(shared) private(j,k,t,r)
+ for (j=0; j<ths->M_total; j++)
+ {
+ ths->f[j]=0.0;
+ for (k=0; k<ths->N_total; k++)
+ {
+ if (ths->d==1)
+ r = ths->y[j] - ths->x[k];
+ else
+ {
+ r=0.0;
+ for (t=0; t<ths->d; t++)
+ r += (ths->y[j*ths->d+t]-ths->x[k*ths->d+t])*(ths->y[j*ths->d+t]-ths->x[k*ths->d+t]);
+ r=sqrt(r);
+ }
+ ths->f[j] += ths->alpha[k] * ths->k(r,0,ths->kernel_param);
+ }
+ }
+}
+
+/** precomputation for fastsum */
+void fastsum_precompute(fastsum_plan *ths)
+{
+ int j,k,t;
+ int n_total;
+ ticks t0, t1;
+
+ ths->MEASURE_TIME_t[0] = 0.0;
+ ths->MEASURE_TIME_t[1] = 0.0;
+ ths->MEASURE_TIME_t[2] = 0.0;
+ ths->MEASURE_TIME_t[3] = 0.0;
+
+#ifdef MEASURE_TIME
+ t0 = getticks();
+#endif
+
+
+ if (ths->flags & NEARFIELD_BOXES)
+ {
+ BuildBox(ths);
+ }
+ else
+ {
+ /** sort source knots */
+ BuildTree(ths->d,0,ths->x,ths->alpha,ths->N_total);
+ }
+
+#ifdef MEASURE_TIME
+ t1 = getticks();
+ ths->MEASURE_TIME_t[3] += nfft_elapsed_seconds(t1,t0);
+#endif
+
+
+#ifdef MEASURE_TIME
+ t0 = getticks();
+#endif
+ /** precompute spline values for near field*/
+ if (!(ths->flags & EXACT_NEARFIELD))
+ {
+ if (ths->d==1)
+ #pragma omp parallel for default(shared) private(k)
+ for (k=-ths->Ad/2-2; k <= ths->Ad/2+2; k++)
+ ths->Add[k+ths->Ad/2+2] = regkern1(ths->k, ths->eps_I*(double)k/ths->Ad*2, ths->p, ths->kernel_param, ths->eps_I, ths->eps_B);
+ else
+ #pragma omp parallel for default(shared) private(k)
+ for (k=0; k <= ths->Ad+2; k++)
+ ths->Add[k] = regkern3(ths->k, ths->eps_I*(double)k/ths->Ad, ths->p, ths->kernel_param, ths->eps_I, ths->eps_B);
+ }
+#ifdef MEASURE_TIME
+ t1 = getticks();
+ ths->MEASURE_TIME_t[0] += nfft_elapsed_seconds(t1,t0);
+#endif
+
+
+#ifdef MEASURE_TIME
+ t0 = getticks();
+#endif
+ /** init NFFT plan for transposed transform in first step*/
+ for (k=0; k<ths->mv1.M_total; k++)
+ for (t=0; t<ths->mv1.d; t++)
+ ths->mv1.x[ths->mv1.d*k+t] = - ths->x[ths->mv1.d*k+t]; /* note the factor -1 for transposed transform instead of adjoint*/
+
+ /** precompute psi, the entries of the matrix B */
+ if(ths->mv1.nfft_flags & PRE_LIN_PSI)
+ nfft_precompute_lin_psi(&(ths->mv1));
+
+ if(ths->mv1.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&(ths->mv1));
+
+ if(ths->mv1.nfft_flags & PRE_FULL_PSI)
+ nfft_precompute_full_psi(&(ths->mv1));
+#ifdef MEASURE_TIME
+ t1 = getticks();
+ ths->MEASURE_TIME_t[1] += nfft_elapsed_seconds(t1,t0);
+#endif
+
+ /** init Fourier coefficients */
+ for(k=0; k<ths->mv1.M_total;k++)
+ ths->mv1.f[k] = ths->alpha[k];
+
+#ifdef MEASURE_TIME
+ t0 = getticks();
+#endif
+ /** init NFFT plan for transform in third step*/
+ for (j=0; j<ths->mv2.M_total; j++)
+ for (t=0; t<ths->mv2.d; t++)
+ ths->mv2.x[ths->mv2.d*j+t] = - ths->y[ths->mv2.d*j+t]; /* note the factor -1 for conjugated transform instead of standard*/
+
+ /** precompute psi, the entries of the matrix B */
+ if(ths->mv2.nfft_flags & PRE_LIN_PSI)
+ nfft_precompute_lin_psi(&(ths->mv2));
+
+ if(ths->mv2.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&(ths->mv2));
+
+ if(ths->mv2.nfft_flags & PRE_FULL_PSI)
+ nfft_precompute_full_psi(&(ths->mv2));
+#ifdef MEASURE_TIME
+ t1 = getticks();
+ ths->MEASURE_TIME_t[2] += nfft_elapsed_seconds(t1,t0);
+#endif
+
+
+#ifdef MEASURE_TIME
+ t0 = getticks();
+#endif
+ /** precompute Fourier coefficients of regularised kernel*/
+ n_total = 1;
+ for (t=0; t<ths->d; t++)
+ n_total *= ths->n;
+
+ #pragma omp parallel for default(shared) private(j,k,t)
+ for (j=0; j<n_total; j++)
+ {
+ if (ths->d==1)
+ ths->b[j] = regkern1(ths->k, (double)j / (ths->n) - 0.5, ths->p, ths->kernel_param, ths->eps_I, ths->eps_B)/n_total;
+ else
+ {
+ k=j;
+ ths->b[j]=0.0;
+ for (t=0; t<ths->d; t++)
+ {
+ ths->b[j] += ((double)(k % (ths->n)) / (ths->n) - 0.5) * ((double)(k % (ths->n)) / (ths->n) - 0.5);
+ k = k / (ths->n);
+ }
+ ths->b[j] = regkern3(ths->k, sqrt(ths->b[j]), ths->p, ths->kernel_param, ths->eps_I, ths->eps_B)/n_total;
+ }
+ }
+
+ nfft_fftshift_complex(ths->b, ths->mv1.d, ths->mv1.N);
+ fftw_execute(ths->fft_plan);
+ nfft_fftshift_complex(ths->b, ths->mv1.d, ths->mv1.N);
+#ifdef MEASURE_TIME
+ t1 = getticks();
+ ths->MEASURE_TIME_t[0] += nfft_elapsed_seconds(t1,t0);
+#endif
+}
+
+/** fast NFFT-based summation */
+void fastsum_trafo(fastsum_plan *ths)
+{
+ int j,k,t;
+ ticks t0, t1;
+
+ ths->MEASURE_TIME_t[4] = 0.0;
+ ths->MEASURE_TIME_t[5] = 0.0;
+ ths->MEASURE_TIME_t[6] = 0.0;
+ ths->MEASURE_TIME_t[7] = 0.0;
+
+#ifdef MEASURE_TIME
+ t0 = getticks();
+#endif
+ /** first step of algorithm */
+ nfft_adjoint(&(ths->mv1));
+#ifdef MEASURE_TIME
+ t1 = getticks();
+ ths->MEASURE_TIME_t[4] += nfft_elapsed_seconds(t1,t0);
+#endif
+
+
+#ifdef MEASURE_TIME
+ t0 = getticks();
+#endif
+ /** second step of algorithm */
+ #pragma omp parallel for default(shared) private(k)
+ for (k=0; k<ths->mv2.N_total; k++)
+ ths->mv2.f_hat[k] = ths->b[k] * ths->mv1.f_hat[k];
+#ifdef MEASURE_TIME
+ t1 = getticks();
+ ths->MEASURE_TIME_t[5] += nfft_elapsed_seconds(t1,t0);
+#endif
+
+
+#ifdef MEASURE_TIME
+ t0 = getticks();
+#endif
+ /** third step of algorithm */
+ nfft_trafo(&(ths->mv2));
+#ifdef MEASURE_TIME
+ t1 = getticks();
+ ths->MEASURE_TIME_t[6] += nfft_elapsed_seconds(t1,t0);
+#endif
+
+
+#ifdef MEASURE_TIME
+ t0 = getticks();
+#endif
+ /** add near field */
+ #pragma omp parallel for default(shared) private(j,k,t)
+ for (j=0; j<ths->M_total; j++)
+ {
+ double ymin[ths->d], ymax[ths->d]; /** limits for d-dimensional near field box */
+
+ if (ths->flags & NEARFIELD_BOXES)
+ {
+ ths->f[j] = ths->mv2.f[j] + SearchBox(ths->y + ths->d*j, ths);
+ }
+ else
+ {
+ for (t=0; t<ths->d; t++)
+ {
+ ymin[t] = ths->y[ths->d*j+t] - ths->eps_I;
+ ymax[t] = ths->y[ths->d*j+t] + ths->eps_I;
+ }
+ ths->f[j] = ths->mv2.f[j] + SearchTree(ths->d,0, ths->x, ths->alpha, ymin, ymax, ths->N_total, ths->k, ths->kernel_param, ths->Ad, ths->Add, ths->p, ths->flags);
+ }
+ /* ths->f[j] = ths->mv2.f[j]; */
+ /* ths->f[j] = SearchTree(ths->d,0, ths->x, ths->alpha, ymin, ymax, ths->N_total, ths->k, ths->kernel_param, ths->Ad, ths->Add, ths->p, ths->flags); */
+ }
+
+#ifdef MEASURE_TIME
+ t1 = getticks();
+ ths->MEASURE_TIME_t[7] += nfft_elapsed_seconds(t1,t0);
+#endif
+}
+/* \} */
+
+/* fastsum.c */
diff --git a/applications/fastsum/fastsum.h b/applications/fastsum/fastsum.h
new file mode 100644
index 0000000..60dbc4c
--- /dev/null
+++ b/applications/fastsum/fastsum.h
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: fastsum.h 3896 2012-10-10 12:19:26Z tovo $ */
+
+/*! \file fastsum.h
+ * \brief Header file for the fast NFFT-based summation algorithm.
+ *
+ * reference: M. Fenn, G. Steidl,
+ * Fast NFFT based summation of radial functions.
+ * Sampl. Theory Signal Image Process., 3, 1-28, 2004.
+ *
+ * \author Markus Fenn
+ * \date 2003-2006
+ */
+
+/**
+ * \defgroup applications_fastsum Fast summation
+ * \ingroup applications
+ * \{
+ */
+
+#ifndef fastsum_h_inc
+#define fastsum_h_inc
+
+#include "config.h"
+
+/** Include header for C99 complex datatype. */
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+/** Include header for utils from NFFT3 library. */
+#include "nfft3util.h"
+/** Include header for NFFT3 library. */
+#include "nfft3.h"
+
+#if !(defined(NF_LIN) || defined(NF_QUADR) || defined(NF_KUB))
+ #define NF_KUB
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+typedef double _Complex (*kernel)(double , int , const double *);
+
+/**
+ * Constant symbols
+ */
+#define EXACT_NEARFIELD (1U<< 0)
+
+#define NEARFIELD_BOXES (1U<< 1)
+
+/** plan for fast summation algorithm */
+typedef struct fastsum_plan_
+{
+ /** api */
+
+ int d; /**< number of dimensions */
+
+ int N_total; /**< number of source knots */
+ int M_total; /**< number of target knots */
+
+ double _Complex *alpha; /**< source coefficients */
+ double _Complex *f; /**< target evaluations */
+
+ double *x; /**< source knots in d-ball with radius 1/4-eps_b/2 */
+ double *y; /**< target knots in d-ball with radius 1/4-eps_b/2 */
+
+ kernel k; /**< kernel function */
+ double *kernel_param; /**< parameters for kernel function */
+
+ unsigned flags; /**< flags precomp. and approx.type */
+
+ /** internal */
+
+ /** DS_PRE - direct summation */
+ double _Complex *pre_K; /**< precomputed K(x_j-y_l) */
+
+ /** FS__ - fast summation */
+ int n; /**< expansion degree */
+ fftw_complex *b; /**< expansion coefficients */
+
+ int p; /**< degree of smoothness of regularization */
+ double eps_I; /**< inner boundary */ /* fixed to p/n so far */
+ double eps_B; /**< outer boundary */ /* fixed to 1/16 so far */
+
+ nfft_plan mv1; /**< source nfft plan */
+ nfft_plan mv2; /**< target nfft plan */
+
+ /** near field */
+ int Ad; /**< number of spline knots for nearfield computation of regularized kernel */
+ double _Complex *Add; /**< spline values */
+
+ /* things for computing *b - are they used only once?? */
+ fftw_plan fft_plan;
+
+ int box_count;
+ int box_count_per_dim;
+ int *box_offset;
+ double *box_x;
+ double _Complex *box_alpha;
+
+ double MEASURE_TIME_t[8]; /**< Measured time for each step if MEASURE_TIME is set */
+} fastsum_plan;
+
+/** initialize fast summation plan
+ *
+ * \param ths The pointer to a fastsum plan.
+ * \param d The dimension of the problem.
+ * \param N_total The number of source knots x.
+ * \param M_total The number of target knots y.
+ * \param kernel The kernel function.
+ * \param param The parameters for the kernel function.
+ * \param flags Fastsum flags.
+ * \param nn The expansion degree.
+ * \param m The cut-off parameter for the NFFT.
+ * \param p The degree of smoothness.
+ * \param eps_I The inner boundary.
+ * \param eps_B the outer boundary.
+ *
+ */
+void fastsum_init_guru(fastsum_plan *ths, int d, int N_total, int M_total, kernel k, double *param, unsigned flags, int nn, int m, int p, double eps_I, double eps_B);
+
+/** finalize plan
+ *
+ * \param ths The pointer to a fastsum plan.
+ */
+void fastsum_finalize(fastsum_plan *ths);
+
+/** direct summation
+ *
+ * \param ths The pointer to a fastsum plan.
+ */
+void fastsum_exact(fastsum_plan *ths);
+
+/** sort source nodes, precompute Fourier coefficients, etc.
+ *
+ * \param ths The pointer to a fastsum plan.
+ */
+void fastsum_precompute(fastsum_plan *ths);
+
+/** fast NFFT-based summation algorithm
+ *
+ * \param ths The pointer to a fastsum plan.
+ */
+void fastsum_trafo(fastsum_plan *ths);
+/* \} */
+
+double _Complex regkern(kernel k, double xx, int p, const double *param, double a, double b);
+
+/** cubic spline interpolation in near field with even kernels */
+double _Complex kubintkern(const double x, const double _Complex *Add,
+ const int Ad, const double a);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif
+/* fastsum.h */
diff --git a/applications/fastsum/fastsum.m b/applications/fastsum/fastsum.m
new file mode 100644
index 0000000..19a2ff6
--- /dev/null
+++ b/applications/fastsum/fastsum.m
@@ -0,0 +1,57 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: fastsum.m 3776 2012-06-03 13:29:25Z keiner $
+function [f,f_direct]=fastsum(x,alpha,y,kernel,c,m,n,p,eps_I,eps_B)
+
+% f=fastsum(x,alpha,y,kernel,c,m,n,p)
+%
+% Computes the sums
+%
+% f(y_j) = sum_{k=1}^N alpha_k kernel(x_k-y_j) (j=1:M)
+%
+% by calling C-program with the fast NFFT-based algorithm.
+%
+% size(f) = [N,1] (complex)
+% size(x) = [N,d]
+% size(alpha) = [N,1] (complex)
+% size(y)=[M,d]
+% kernel = 'multiquadric', e.g.
+% c kernel parameter
+% m cut-off parameter for NFFT
+% n expansion degree
+% p smoothness
+%
+% Markus Fenn, 2006.
+
+[N,d]=size(x);
+[M,d]=size(y);
+
+%write input to file
+save -ascii -double x.dat x
+alpha2=[real(alpha) imag(alpha)];
+save -ascii -double alpha.dat alpha2
+save -ascii -double y.dat y
+
+%execute C-program for fast summation
+system(sprintf('./fastsum_matlab %d %d %d %d %d %d %s %e %e %e',d,N,M,n,m,p,kernel,c,eps_I,eps_B));
+
+%read result from file
+f2=load('f.dat');
+f=f2(:,1)+i*f2(:,2);
+
+f2=load('f_direct.dat');
+f_direct=f2(:,1)+i*f2(:,2);
diff --git a/applications/fastsum/fastsum_benchomp.c b/applications/fastsum/fastsum_benchomp.c
new file mode 100644
index 0000000..a22d3fc
--- /dev/null
+++ b/applications/fastsum/fastsum_benchomp.c
@@ -0,0 +1,651 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "config.h"
+
+#include <nfft3.h>
+#include <nfft3util.h>
+
+#define NREPEAT 5
+
+static FILE* file_out_tex = NULL;
+
+int get_nthreads_array(int **arr)
+{
+ int max_threads = nfft_get_omp_num_threads();
+ int alloc_num = 2;
+ int k;
+ int ret_number = 0;
+ int max_threads_pw2 = (max_threads / 2) * 2 == max_threads ? 1 : 0;
+
+ if (max_threads <= 5)
+ {
+ *arr = (int*) malloc(max_threads*sizeof(int));
+ for (k = 0; k < max_threads; k++)
+ *(*arr + k) = k+1;
+ return max_threads;
+ }
+
+ for (k = 1; k <= max_threads; k*=2, alloc_num++);
+
+ *arr = (int*) malloc(alloc_num*sizeof(int));
+
+ for (k = 1; k <= max_threads; k*=2)
+ {
+ if (k != max_threads && 2*k > max_threads && max_threads_pw2)
+ {
+ *(*arr + ret_number) = max_threads/2;
+ ret_number++;
+ }
+
+ *(*arr + ret_number) = k;
+ ret_number++;
+
+ if (k != max_threads && 2*k > max_threads)
+ {
+ *(*arr + ret_number) = max_threads;
+ ret_number++;
+ break;
+ }
+ }
+
+ return ret_number;
+}
+
+
+void check_result_value(const int val, const int ok, const char *msg)
+{
+ if (val != ok)
+ {
+ fprintf(stderr, "ERROR %s: %d not %d\n", msg, val, ok);
+
+ exit(1);
+ }
+}
+
+void run_test_create(int d, int L, int M)
+{
+ char cmd[1025];
+
+ snprintf(cmd, 1024, "./fastsum_benchomp_createdataset %d %d %d > fastsum_benchomp_test.data", d, L, M);
+ fprintf(stderr, "%s\n", cmd);
+ check_result_value(system(cmd), 0, "createdataset");
+}
+
+void run_test_init_output()
+{
+ FILE *f = fopen("fastsum_benchomp_test.result", "w");
+ if (f!= NULL)
+ fclose(f);
+}
+
+typedef struct
+{
+ int d;
+ int L;
+ int M;
+ int n;
+ int m;
+ int p;
+ char *kernel_name;
+ double c;
+ double eps_I;
+ double eps_B;
+} s_param;
+
+typedef struct
+{
+ double avg;
+ double min;
+ double max;
+} s_resval;
+
+typedef struct
+{
+ int nthreads;
+ s_resval resval[16];
+} s_result;
+
+typedef struct
+{
+ s_param param;
+ s_result *results;
+ int nresults;
+} s_testset;
+
+void run_test(s_resval *res, int nrepeat, int n, int m, int p, char *kernel_name, double c, double eps_I, double eps_B, int nthreads)
+{
+ char cmd[1025];
+ int r,t;
+
+ for (t = 0; t < 16; t++)
+ {
+ res[t].avg = 0.0; res[t].min = 1.0/0.0; res[t].max = 0.0;
+ }
+
+ if (nthreads < 2)
+ snprintf(cmd, 1024, "./fastsum_benchomp_detail_single %d %d %d %s %lg %lg %lg < fastsum_benchomp_test.data > fastsum_benchomp_test.out", n, m, p, kernel_name, c, eps_I, eps_B);
+ else
+ snprintf(cmd, 1024, "./fastsum_benchomp_detail_threads %d %d %d %s %lg %lg %lg %d < fastsum_benchomp_test.data > fastsum_benchomp_test.out", n, m, p, kernel_name, c, eps_I, eps_B, nthreads);
+ fprintf(stderr, "%s\n", cmd);
+ check_result_value(system(cmd), 0, cmd);
+
+ for (r = 0; r < nrepeat; r++)
+ {
+ int retval;
+ double v[16];
+ FILE *f;
+ check_result_value(system(cmd), 0, cmd);
+ f = fopen("fastsum_benchomp_test.out", "r");
+ retval = fscanf(f, "%lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg", v, v+1, v+2, v+3, v+4, v+5, v+6, v+7, v+8, v+9, v+10, v+11, v+12, v+13, v+14, v+15);
+ check_result_value(retval, 16, "read fastsum_benchomp_test.out");
+ fclose(f);
+
+ for (t = 0; t < 16; t++)
+ {
+ res[t].avg += v[t];
+ if (res[t].min > v[t])
+ res[t].min = v[t];
+ if (res[t].max < v[t])
+ res[t].max = v[t];
+ }
+ }
+
+ for (t = 0; t < 16; t++)
+ res[t].avg /= nrepeat;
+
+ fprintf(stderr, "%d %d: ", nthreads, nrepeat);
+ for (t = 0; t < 16; t++)
+ fprintf(stderr, "%.3e %.3e %.3e | ", res[t].avg, res[t].min, res[t].max);
+ fprintf(stderr, "\n");
+}
+
+const char *get_psi_string(int flags)
+{
+ if (flags & PRE_PSI)
+ return "prepsi";
+ else if (flags & PRE_ONE_PSI)
+ return "unknownPSI";
+
+ return "nopsi";
+}
+const char *get_sort_string(int flags)
+{
+ if (flags & NFFT_OMP_BLOCKWISE_ADJOINT)
+ return "";
+
+ if (flags & NFFT_SORT_NODES)
+ return "sorted";
+
+ return "unsorted";
+}
+
+const char *get_adjoint_omp_string(int flags)
+{
+ if (flags & NFFT_OMP_BLOCKWISE_ADJOINT)
+ return "blockwise";
+
+ return "";
+}
+
+#define MASK_FSUM_D (1U<<0)
+#define MASK_FSUM_L (1U<<1)
+#define MASK_FSUM_M (1U<<2)
+#define MASK_FSUM_MULTIBW (1U<<3)
+#define MASK_FSUM_WINM (1U<<4)
+#define MASK_FSUM_P (1U<<5)
+#define MASK_FSUM_KERNEL (1U<<6)
+#define MASK_FSUM_EPSI (1U<<7)
+#define MASK_FSUM_EPSB (1U<<8)
+
+unsigned int fastsum_determine_different_parameters(s_testset *testsets, int ntestsets)
+{
+ int t;
+ unsigned int mask = 0;
+
+ if (ntestsets < 2)
+ return 0;
+
+ for (t = 1; t < ntestsets; t++)
+ {
+ if (testsets[t-1].param.d != testsets[t].param.d)
+ mask |= MASK_FSUM_D;
+ if (testsets[t-1].param.L != testsets[t].param.L)
+ mask |= MASK_FSUM_L;
+ if (testsets[t-1].param.M != testsets[t].param.M)
+ mask |= MASK_FSUM_M;
+ if (testsets[t-1].param.n != testsets[t].param.n)
+ mask |= MASK_FSUM_MULTIBW;
+ if (testsets[t-1].param.m != testsets[t].param.m)
+ mask |= MASK_FSUM_WINM;
+ if (testsets[t-1].param.p != testsets[t].param.p)
+ mask |= MASK_FSUM_P;
+ if (strcmp(testsets[t-1].param.kernel_name, testsets[t].param.kernel_name) != 0)
+ mask |= MASK_FSUM_KERNEL;
+ if (testsets[t-1].param.eps_I != testsets[t].param.eps_I)
+ mask |= MASK_FSUM_EPSI;
+ if (testsets[t-1].param.eps_B != testsets[t].param.eps_B)
+ mask |= MASK_FSUM_EPSB;
+ }
+
+ return mask;
+}
+
+void strEscapeUnderscore(char *dst, char *src, int maxlen)
+{
+ int i = 0;
+ int len;
+ int offset = 0;
+
+ while (src[i] != '\0' && len + offset < maxlen - 1)
+ {
+ if (src[i] == '_')
+ len = snprintf(dst+offset, maxlen-offset, "\\_{}");
+ else
+ len = snprintf(dst+offset, maxlen-offset, "%c", src[i]);
+ offset += len;
+ i++;
+ }
+}
+
+void fastsum_get_plot_title_minus_indep(char *outstr, int maxlen, char *hostname, s_param param, unsigned int diff_mask)
+{
+ unsigned int mask = ~diff_mask;
+ int offset = 0;
+ int len;
+
+ len = snprintf(outstr, maxlen, "%s", hostname);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+
+ if (mask & MASK_FSUM_D)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " %dd fastsum", param.d);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if ((mask & (MASK_FSUM_L | MASK_FSUM_M)) && param.L == param.M)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " L=M=%d", param.L);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+ else
+ {
+ if (mask & MASK_FSUM_L)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " L=%d", param.L);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_FSUM_M)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " M=%d", param.M);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+ }
+
+ if (mask & MASK_FSUM_MULTIBW)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " n=%d", param.n);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_FSUM_WINM)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " m=%d", param.m);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_FSUM_P)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " p=%d", param.p);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_FSUM_KERNEL)
+ {
+ char tmp[maxlen];
+ strEscapeUnderscore(tmp, param.kernel_name, maxlen);
+
+ len = snprintf(outstr+offset, maxlen-offset, " %s", tmp);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if ((mask & (MASK_FSUM_EPSI | MASK_FSUM_EPSB)) && param.eps_I == param.eps_B)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " $\\varepsilon_\\mathrm{I}$=$\\varepsilon_\\mathrm{B}$=%g", param.eps_I);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+ else
+ {
+ if (mask & MASK_FSUM_EPSI)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " $\\varepsilon_\\mathrm{I}$=%g", param.eps_I);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_FSUM_EPSB)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " $\\varepsilon_\\mathrm{B}$=%g", param.eps_B);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+ }
+}
+
+void nfft_adjoint_print_output_histo_DFBRT(FILE *out, s_testset testset)
+{
+ int i, size = testset.nresults;
+ char hostname[1025];
+
+ if (gethostname(hostname, 1024) != 0)
+ strncpy(hostname, "unnamed", 1024);
+
+ fprintf(out, "\\begin{tikzpicture}\n");
+ fprintf(out, "\\begin{axis}[");
+ fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, ");
+ fprintf(out, "symbolic x coords={");
+ for (i = 0; i < size; i++)
+ if (i > 0)
+ fprintf(out, ",%d", testset.results[i].nthreads);
+ else
+ fprintf(out, "%d", testset.results[i].nthreads);
+
+ fprintf(out, "}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, ");
+ fprintf(out, " title={%s %dd $\\textrm{NFFT}^\\top$ N=%d $\\sigma$=2 M=%d m=%d prepsi sorted}", hostname, testset.param.d, testset.param.n, testset.param.M, testset.param.m);
+ fprintf(out, " ]\n");
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[10].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[11].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[12].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[1].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[4].avg + testset.results[i].resval[1].avg);
+ fprintf(out, "};\n");
+ fprintf(out, "\\legend{D,$\\textrm{F}^\\top$,$\\textrm{B}^\\top$,prepsi,total}\n");
+ fprintf(out, "\\end{axis}\n");
+ fprintf(out, "\\end{tikzpicture}\n");
+ fprintf(out, "\n\n");
+
+ fflush(out);
+}
+
+void nfft_trafo_print_output_histo_DFBRT(FILE *out, s_testset testset)
+{
+ int i, size = testset.nresults;
+ char hostname[1025];
+
+ if (gethostname(hostname, 1024) != 0)
+ strncpy(hostname, "unnamed", 1024);
+
+ fprintf(out, "\\begin{tikzpicture}\n");
+ fprintf(out, "\\begin{axis}[");
+ fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, ");
+ fprintf(out, "symbolic x coords={");
+ for (i = 0; i < size; i++)
+ if (i > 0)
+ fprintf(out, ",%d", testset.results[i].nthreads);
+ else
+ fprintf(out, "%d", testset.results[i].nthreads);
+
+ fprintf(out, "}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, ");
+ fprintf(out, " title={%s %dd $\\textrm{NFFT}$ N=%d $\\sigma$=2 M=%d m=%d prepsi sorted}", hostname, testset.param.d, testset.param.n, testset.param.M, testset.param.m);
+ fprintf(out, " ]\n");
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[13].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[14].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[15].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[2].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[6].avg + testset.results[i].resval[2].avg);
+ fprintf(out, "};\n");
+ fprintf(out, "\\legend{D,F,B,prepsi,total}\n");
+ fprintf(out, "\\end{axis}\n");
+ fprintf(out, "\\end{tikzpicture}\n");
+ fprintf(out, "\n\n");
+
+ fflush(out);
+}
+
+void fastsum_print_output_histo_PreRfNfT(FILE *out, s_testset testset)
+{
+ int i, size = testset.nresults;
+ char hostname[1025];
+ char plottitle[1025];
+
+ if (gethostname(hostname, 1024) != 0)
+ strncpy(hostname, "unnamed", 1024);
+
+ fastsum_get_plot_title_minus_indep(plottitle, 1024, hostname, testset.param, 0);
+
+ fprintf(out, "\\begin{tikzpicture}\n");
+ fprintf(out, "\\begin{axis}[");
+ fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, ");
+ fprintf(out, "symbolic x coords={");
+ for (i = 0; i < size; i++)
+ if (i > 0)
+ fprintf(out, ",%d", testset.results[i].nthreads);
+ else
+ fprintf(out, "%d", testset.results[i].nthreads);
+
+ fprintf(out, "}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, ");
+ fprintf(out, " title={%s}", plottitle);
+ fprintf(out, " ]\n");
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[1].avg+testset.results[i].resval[2].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[3].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[4].avg + testset.results[i].resval[5].avg + testset.results[i].resval[6].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[7].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[9].avg - testset.results[i].resval[0].avg);
+ fprintf(out, "};\n");
+ fprintf(out, "\\legend{prepsi (step 1b),init nearfield (step 1c),far field (steps 2a-c),nearfield (step 2d),total $-$ step 1a}\n");
+ fprintf(out, "\\end{axis}\n");
+ fprintf(out, "\\end{tikzpicture}\n");
+ fprintf(out, "\n\n");
+
+ fflush(out);
+}
+
+void fastsum_print_output_speedup_total_minus_indep(FILE *out, s_testset *testsets, int ntestsets)
+{
+ int i, t;
+ char hostname[1025];
+ char plottitle[1025];
+ unsigned int diff_mask = fastsum_determine_different_parameters(testsets, ntestsets);
+
+ if (gethostname(hostname, 1024) != 0)
+ strncpy(hostname, "unnamed", 1024);
+
+ fastsum_get_plot_title_minus_indep(plottitle, 1024, hostname, testsets[0].param, diff_mask | MASK_FSUM_WINM);
+
+ fprintf(out, "\\begin{tikzpicture}\n");
+ fprintf(out, "\\begin{axis}[");
+ fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Speedup, xtick=data, legend style={ legend pos = north west, legend columns=1}, ymajorgrids=true, yminorgrids=true, minor y tick num=4, ");
+ fprintf(out, " title={%s}", plottitle);
+ fprintf(out, " ]\n");
+
+ for (t = 0; t < ntestsets; t++)
+ {
+ s_testset testset = testsets[t];
+
+ double tref = 0.0;
+ for (i = 0; i < testset.nresults; i++)
+ if (testset.results[i].nthreads == 1)
+ tref = testset.results[i].resval[9].avg - testset.results[i].resval[0].avg;
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < testset.nresults; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, tref/(testset.results[i].resval[9].avg - testset.results[i].resval[0].avg));
+ fprintf(out, "};\n");
+
+ for (i = 0; i < testset.nresults; i++)
+ {
+ fprintf(stderr, "%d:%.3f ", testset.results[i].nthreads, tref/(testset.results[i].resval[9].avg - testset.results[i].resval[0].avg));
+ }
+ fprintf(stderr, "\n\n");
+ }
+
+ fprintf(out, "\\legend{{");
+ for (t = 0; t < ntestsets; t++)
+ {
+ char title[256];
+ if (t > 0)
+ fprintf(out, "},{");
+ fastsum_get_plot_title_minus_indep(title, 255, "", testsets[t].param, ~(diff_mask | MASK_FSUM_WINM));
+ fprintf(out, "%s", title);
+ }
+ fprintf(out, "}}\n");
+ fprintf(out, "\\end{axis}\n");
+ fprintf(out, "\\end{tikzpicture}\n");
+ fprintf(out, "\n\n");
+
+ fflush(out);
+}
+
+void run_testset(s_testset *testset, int d, int L, int M, int n, int m, int p, char *kernel_name, double c, double eps_I, double eps_B, int *nthreads_array, int n_threads_array_size)
+{
+ int i;
+ testset->param.d = d;
+ testset->param.L = L;
+ testset->param.M = M;
+ testset->param.n = n;
+ testset->param.m = m;
+ testset->param.p = p;
+ testset->param.kernel_name = kernel_name;
+ testset->param.c = c;
+ testset->param.eps_I = eps_I;
+ testset->param.eps_B = eps_B;
+
+ testset->results = (s_result*) malloc(n_threads_array_size*sizeof(s_result));
+ testset->nresults = n_threads_array_size;
+
+ run_test_create(testset->param.d, testset->param.L, testset->param.M);
+ for (i = 0; i < n_threads_array_size; i++)
+ {
+ testset->results[i].nthreads = nthreads_array[i];
+ run_test(testset->results[i].resval, NREPEAT, testset->param.n, testset->param.m, testset->param.p, testset->param.kernel_name, testset->param.c, testset->param.eps_I, testset->param.eps_B, testset->results[i].nthreads);
+ }
+
+}
+
+void test1(int *nthreads_array, int n_threads_array_size)
+{
+ s_testset testsets[1];
+
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ run_testset(&testsets[0], 3, 100000, 100000, 128, 4, 7, "one_over_x", 0.0, 0.03125, 0.03125, nthreads_array, n_threads_array_size);
+
+ fastsum_print_output_speedup_total_minus_indep(file_out_tex, testsets, 1);
+
+ fastsum_print_output_histo_PreRfNfT(file_out_tex, testsets[0]);
+
+ nfft_adjoint_print_output_histo_DFBRT(file_out_tex, testsets[0]);
+
+ nfft_trafo_print_output_histo_DFBRT(file_out_tex, testsets[0]);
+#endif
+}
+
+int main(int argc, char** argv)
+{
+ int *nthreads_array;
+ int n_threads_array_size = get_nthreads_array(&nthreads_array);
+ int k;
+
+#if !(defined MEASURE_TIME && defined MEASURE_TIME_FFTW)
+ fprintf(stderr, "WARNING: Detailed time measurements are not activated.\n");
+ fprintf(stderr, "Please re-run the configure script with options\n");
+ fprintf(stderr, "--enable-measure-time --enable-measure-time-fftw --enable-openmp\n");
+ fprintf(stderr, "and run \"make clean all\"\n\n");
+#endif
+
+ for (k = 0; k < n_threads_array_size; k++)
+ fprintf(stderr, "%d ", nthreads_array[k]);
+ fprintf(stderr, "\n");
+
+ file_out_tex = fopen("fastsum_benchomp_results_plots.tex", "w");
+
+ test1(nthreads_array, n_threads_array_size);
+
+ fclose(file_out_tex);
+
+ return 0;
+}
+
diff --git a/applications/fastsum/fastsum_benchomp_createdataset.c b/applications/fastsum/fastsum_benchomp_createdataset.c
new file mode 100644
index 0000000..e800f52
--- /dev/null
+++ b/applications/fastsum/fastsum_benchomp_createdataset.c
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <complex.h>
+
+#include "config.h"
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+void fastsum_benchomp_createdataset(unsigned int d, int L, int M)
+{
+ int t, j, k;
+ R *x;
+ R *y;
+ C *alpha;
+
+ x = (R*) nfft_malloc(d*L*sizeof(R));
+ y = (R*) nfft_malloc(d*L*sizeof(R));
+ alpha = (C*) nfft_malloc(L*sizeof(C));
+
+ /** init source knots in a d-ball with radius 1 */
+ k = 0;
+ while (k < L)
+ {
+ double r_max = 1.0;
+ double r2 = 0.0;
+
+ for (j=0; j<d; j++)
+ x[k*d+j] = 2.0 * r_max * (double)rand()/(double)RAND_MAX - r_max;
+
+ for (j=0; j<d; j++)
+ r2 += x[k*d+j] * x[k*d+j];
+
+ if (r2 >= r_max * r_max)
+ continue;
+
+ k++;
+ }
+
+ nfft_vrand_unit_complex(alpha,L);
+
+ /** init target knots in a d-ball with radius 1 */
+ k = 0;
+ while (k < M)
+ {
+ double r_max = 1.0;
+ double r2 = 0.0;
+
+ for (j=0; j<d; j++)
+ y[k*d+j] = 2.0 * r_max * (double)rand()/(double)RAND_MAX - r_max;
+
+ for (j=0; j<d; j++)
+ r2 += y[k*d+j] * y[k*d+j];
+
+ if (r2 >= r_max * r_max)
+ continue;
+
+ k++;
+ }
+
+ printf("%d %d %d\n", d, L, M);
+
+ for (j=0; j < L; j++)
+ {
+ for (t=0; t < d; t++)
+ printf("%.16e ", x[d*j+t]);
+ printf("\n");
+ }
+
+ for (j=0; j < L; j++)
+ printf("%.16e %.16e\n", creal(alpha[j]), cimag(alpha[j]));
+
+ for (j=0; j < M; j++)
+ {
+ for (t=0; t < d; t++)
+ printf("%.16e ", y[d*j+t]);
+ printf("\n");
+ }
+
+ nfft_free(x);
+ nfft_free(y);
+ nfft_free(alpha);
+}
+
+int main(int argc, char **argv)
+{
+ int d;
+ int L;
+ int M;
+
+ if (argc < 4) {
+ fprintf(stderr, "usage: d L M\n");
+ return -1;
+ }
+
+ d = atoi(argv[1]);
+ L = atoi(argv[2]);
+ M = atoi(argv[3]);
+
+ fprintf(stderr, "d=%d, L=%d, M=%d\n", d, L, M);
+
+ fastsum_benchomp_createdataset(d, L, M);
+
+ return 0;
+}
+
diff --git a/applications/fastsum/fastsum_benchomp_detail.c b/applications/fastsum/fastsum_benchomp_detail.c
new file mode 100644
index 0000000..5327028
--- /dev/null
+++ b/applications/fastsum/fastsum_benchomp_detail.c
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <complex.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+#include "fastsum.h"
+#include "kernels.h"
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+int bench_openmp(FILE *infile, int n, int m, int p, double _Complex (*kernel)(double , int , const double *), double c, double eps_I, double eps_B)
+{
+ fastsum_plan my_fastsum_plan;
+ int d, L, M;
+ int t, j;
+ double re,im;
+ double r_max = 0.25 - my_fastsum_plan.eps_B/2.0;
+ ticks t0, t1;
+ double tt_total;
+
+ fscanf(infile, "%d %d %d", &d, &L, &M);
+
+#ifdef _OPENMP
+ fftw_import_wisdom_from_filename("fastsum_benchomp_detail_threads.plan");
+#else
+ fftw_import_wisdom_from_filename("fastsum_benchomp_detail_single.plan");
+#endif
+
+ fastsum_init_guru(&my_fastsum_plan, d, L, M, kernel, &c, NEARFIELD_BOXES, n, m, p, eps_I, eps_B);
+
+#ifdef _OPENMP
+ fftw_export_wisdom_to_filename("fastsum_benchomp_detail_threads.plan");
+#else
+ fftw_export_wisdom_to_filename("fastsum_benchomp_detail_single.plan");
+#endif
+
+ for (j=0; j < L; j++)
+ {
+ for (t=0; t < d; t++)
+ {
+ double v;
+ fscanf(infile, "%lg", &v);
+ my_fastsum_plan.x[d*j+t] = v * r_max;
+ }
+ }
+
+ for (j=0; j < L; j++)
+ {
+ fscanf(infile, "%lg %lg", &re, &im);
+ my_fastsum_plan.alpha[j] = re + _Complex_I * im;
+ }
+
+ for (j=0; j < M; j++)
+ {
+ for (t=0; t < d; t++)
+ {
+ double v;
+ fscanf(infile, "%lg", &v);
+ my_fastsum_plan.y[d*j+t] = v * r_max;
+ }
+ }
+
+ /** precomputation */
+ t0 = getticks();
+ fastsum_precompute(&my_fastsum_plan);
+
+ /** fast computation */
+ fastsum_trafo(&my_fastsum_plan);
+ t1 = getticks();
+ tt_total = nfft_elapsed_seconds(t1,t0);
+
+#ifndef MEASURE_TIME
+ my_fastsum_plan.MEASURE_TIME_t[0] = 0.0;
+ my_fastsum_plan.MEASURE_TIME_t[1] = 0.0;
+ my_fastsum_plan.MEASURE_TIME_t[2] = 0.0;
+ my_fastsum_plan.MEASURE_TIME_t[3] = 0.0;
+ my_fastsum_plan.MEASURE_TIME_t[4] = 0.0;
+ my_fastsum_plan.MEASURE_TIME_t[5] = 0.0;
+ my_fastsum_plan.MEASURE_TIME_t[6] = 0.0;
+ my_fastsum_plan.MEASURE_TIME_t[7] = 0.0;
+ my_fastsum_plan.mv1.MEASURE_TIME_t[0] = 0.0;
+ my_fastsum_plan.mv1.MEASURE_TIME_t[2] = 0.0;
+ my_fastsum_plan.mv2.MEASURE_TIME_t[0] = 0.0;
+ my_fastsum_plan.mv2.MEASURE_TIME_t[2] = 0.0;
+#endif
+#ifndef MEASURE_TIME_FFTW
+ my_fastsum_plan.mv1.MEASURE_TIME_t[1] = 0.0;
+ my_fastsum_plan.mv2.MEASURE_TIME_t[1] = 0.0;
+#endif
+
+ printf("%.6e %.6e %.6e %6e %.6e %.6e %.6e %.6e %.6e %6e %.6e %.6e %6e %.6e %.6e %6e\n", my_fastsum_plan.MEASURE_TIME_t[0], my_fastsum_plan.MEASURE_TIME_t[1], my_fastsum_plan.MEASURE_TIME_t[2], my_fastsum_plan.MEASURE_TIME_t[3], my_fastsum_plan.MEASURE_TIME_t[4], my_fastsum_plan.MEASURE_TIME_t[5], my_fastsum_plan.MEASURE_TIME_t[6], my_fastsum_plan.MEASURE_TIME_t[7], tt_total-my_fastsum_plan.MEASURE_TIME_t[0]-my_fastsum_plan.MEASURE_TIME_t[1]-my_fastsum_plan.MEASURE_TIME_t[2]-my_fastsum_ [...]
+
+ fastsum_finalize(&my_fastsum_plan);
+
+ return 0;
+}
+
+int main(int argc, char **argv)
+{
+ int n; /**< expansion degree */
+ int m; /**< cut-off parameter */
+ int p; /**< degree of smoothness */
+ char *s; /**< name of kernel */
+ double _Complex (*kernel)(double , int , const double *); /**< kernel function */
+ double c; /**< parameter for kernel */
+ double eps_I; /**< inner boundary */
+ double eps_B; /**< outer boundary */
+
+
+#ifdef _OPENMP
+ int nthreads;
+
+ if (argc != 9)
+ return 1;
+
+ nthreads = atoi(argv[8]);
+ fftw_init_threads();
+ omp_set_num_threads(nthreads);
+#else
+ if (argc != 8)
+ return 1;
+#endif
+
+ n=atoi(argv[1]);
+ m=atoi(argv[2]);
+ p=atoi(argv[3]);
+ s=argv[4];
+ c=atof(argv[5]);
+ eps_I=atof(argv[6]);
+ eps_B=atof(argv[7]);
+ if (strcmp(s,"gaussian")==0)
+ kernel = gaussian;
+ else if (strcmp(s,"multiquadric")==0)
+ kernel = multiquadric;
+ else if (strcmp(s,"inverse_multiquadric")==0)
+ kernel = inverse_multiquadric;
+ else if (strcmp(s,"logarithm")==0)
+ kernel = logarithm;
+ else if (strcmp(s,"thinplate_spline")==0)
+ kernel = thinplate_spline;
+ else if (strcmp(s,"one_over_square")==0)
+ kernel = one_over_square;
+ else if (strcmp(s,"one_over_modulus")==0)
+ kernel = one_over_modulus;
+ else if (strcmp(s,"one_over_x")==0)
+ kernel = one_over_x;
+ else if (strcmp(s,"inverse_multiquadric3")==0)
+ kernel = inverse_multiquadric3;
+ else if (strcmp(s,"sinc_kernel")==0)
+ kernel = sinc_kernel;
+ else if (strcmp(s,"cosc")==0)
+ kernel = cosc;
+ else if (strcmp(s,"cot")==0)
+ kernel = kcot;
+ else
+ {
+ s="multiquadric";
+ kernel = multiquadric;
+ }
+
+ bench_openmp(stdin, n, m, p, kernel, c, eps_I, eps_B);
+
+ return 0;
+}
+
diff --git a/applications/fastsum/fastsum_matlab.c b/applications/fastsum/fastsum_matlab.c
new file mode 100644
index 0000000..17b82aa
--- /dev/null
+++ b/applications/fastsum/fastsum_matlab.c
@@ -0,0 +1,224 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: fastsum_matlab.c 3775 2012-06-02 16:39:48Z keiner $ */
+
+/*! \file fastsum_matlab.c
+ * \brief Simple test program for the fast NFFT-based summation algorithm, called by fastsum.m.
+ *
+ * \author Markus Fenn
+ * \date 2006
+ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+ #include <complex.h>
+#endif
+
+#include "fastsum.h"
+#include "kernels.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_fastsum_matlab fastsum_matlab
+ * \ingroup applications_fastsum
+ * \{
+ */
+
+int main(int argc, char **argv)
+{
+ int j,k,t; /**< indices */
+ int d; /**< number of dimensions */
+ int N; /**< number of source nodes */
+ int M; /**< number of target nodes */
+ int n; /**< expansion degree */
+ int m; /**< cut-off parameter */
+ int p; /**< degree of smoothness */
+ char *s; /**< name of kernel */
+ double _Complex (*kernel)(double , int , const double *); /**< kernel function */
+ double c; /**< parameter for kernel */
+ fastsum_plan my_fastsum_plan; /**< plan for fast summation */
+ double _Complex *direct; /**< array for direct computation */
+ ticks t0, t1; /**< for time measurement */
+ double time; /**< for time measurement */
+ double error=0.0; /**< for error computation */
+ double eps_I; /**< inner boundary */
+ double eps_B; /**< outer boundary */
+ FILE *fid1, *fid2;
+ double temp;
+
+ if (argc!=11)
+ {
+ printf("\nfastsum_test d N M n m p kernel c\n\n");
+ printf(" d dimension \n");
+ printf(" N number of source nodes \n");
+ printf(" M number of target nodes \n");
+ printf(" n expansion degree \n");
+ printf(" m cut-off parameter \n");
+ printf(" p degree of smoothness \n");
+ printf(" kernel kernel function (e.g., gaussian)\n");
+ printf(" c kernel parameter \n");
+ printf(" eps_I inner boundary \n");
+ printf(" eps_B outer boundary \n\n");
+ exit(-1);
+ }
+ else
+ {
+ d=atoi(argv[1]);
+ N=atoi(argv[2]); c=1.0/pow((double)N,1.0/(double)d);
+ M=atoi(argv[3]);
+ n=atoi(argv[4]);
+ m=atoi(argv[5]);
+ p=atoi(argv[6]);
+ s=argv[7];
+ c=atof(argv[8]);
+ eps_I=atof(argv[9]);
+ eps_B=atof(argv[10]);
+ if (strcmp(s,"gaussian")==0)
+ kernel = gaussian;
+ else if (strcmp(s,"multiquadric")==0)
+ kernel = multiquadric;
+ else if (strcmp(s,"inverse_multiquadric")==0)
+ kernel = inverse_multiquadric;
+ else if (strcmp(s,"logarithm")==0)
+ kernel = logarithm;
+ else if (strcmp(s,"thinplate_spline")==0)
+ kernel = thinplate_spline;
+ else if (strcmp(s,"one_over_square")==0)
+ kernel = one_over_square;
+ else if (strcmp(s,"one_over_modulus")==0)
+ kernel = one_over_modulus;
+ else if (strcmp(s,"one_over_x")==0)
+ kernel = one_over_x;
+ else if (strcmp(s,"inverse_multiquadric3")==0)
+ kernel = inverse_multiquadric3;
+ else if (strcmp(s,"sinc_kernel")==0)
+ kernel = sinc_kernel;
+ else if (strcmp(s,"cosc")==0)
+ kernel = cosc;
+ else if (strcmp(s,"cot")==0)
+ kernel = kcot;
+ else
+ {
+ s="multiquadric";
+ kernel = multiquadric;
+ }
+ }
+ printf("d=%d, N=%d, M=%d, n=%d, m=%d, p=%d, kernel=%s, c=%g, eps_I=%g, eps_B=%g \n",d,N,M,n,m,p,s,c,eps_I,eps_B);
+
+ /** init two dimensional fastsum plan */
+ fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, 0, n, m, p, eps_I, eps_B);
+ /*fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, EXACT_NEARFIELD, n, m, p);*/
+
+ /** load source knots and coefficients */
+ fid1=fopen("x.dat","r");
+ fid2=fopen("alpha.dat","r");
+ for (k=0; k<N; k++)
+ {
+ for (t=0; t<d; t++)
+ {
+ fscanf(fid1,"%le",&my_fastsum_plan.x[k*d+t]);
+ }
+ fscanf(fid2,"%le",&temp); my_fastsum_plan.alpha[k] = temp;
+ fscanf(fid2,"%le",&temp); my_fastsum_plan.alpha[k] += temp*_Complex_I;
+ }
+ fclose(fid1);
+ fclose(fid2);
+
+ /** load target knots */
+ fid1=fopen("y.dat","r");
+ for (j=0; j<M; j++)
+ {
+ for (t=0; t<d; t++)
+ {
+ fscanf(fid1,"%le",&my_fastsum_plan.y[j*d+t]);
+ }
+ }
+ fclose(fid1);
+
+ /** direct computation */
+ printf("direct computation: "); fflush(NULL);
+ t0 = getticks();
+ fastsum_exact(&my_fastsum_plan);
+ t1 = getticks();
+ time=nfft_elapsed_seconds(t1,t0);
+ printf("%fsec\n",time);
+
+ /** copy result */
+ direct = (double _Complex *)nfft_malloc(my_fastsum_plan.M_total*(sizeof(double _Complex)));
+ for (j=0; j<my_fastsum_plan.M_total; j++)
+ direct[j]=my_fastsum_plan.f[j];
+
+ /** precomputation */
+ printf("pre-computation: "); fflush(NULL);
+ t0 = getticks();
+ fastsum_precompute(&my_fastsum_plan);
+ t1 = getticks();
+ time=nfft_elapsed_seconds(t1,t0);
+ printf("%fsec\n",time);
+
+ /** fast computation */
+ printf("fast computation: "); fflush(NULL);
+ t0 = getticks();
+ fastsum_trafo(&my_fastsum_plan);
+ t1 = getticks();
+ time=nfft_elapsed_seconds(t1,t0);
+ printf("%fsec\n",time);
+
+ /** compute max error */
+ error=0.0;
+ for (j=0; j<my_fastsum_plan.M_total; j++)
+ {
+ if (cabs(direct[j]-my_fastsum_plan.f[j])/cabs(direct[j])>error)
+ error=cabs(direct[j]-my_fastsum_plan.f[j])/cabs(direct[j]);
+ }
+ printf("max relative error: %e\n",error);
+
+ /** write result to file */
+ fid1=fopen("f.dat","w+");
+ fid2=fopen("f_direct.dat","w+");
+ if (fid1==NULL)
+ {
+ printf("Fehler!\n");
+ exit(-1);
+ }
+ for (j=0; j<M; j++)
+ {
+ temp=creal(my_fastsum_plan.f[j]);
+ fprintf(fid1," % .16e",temp);
+ temp=cimag(my_fastsum_plan.f[j]);
+ fprintf(fid1," % .16e\n",temp);
+
+ temp=creal(direct[j]);
+ fprintf(fid2," % .16e",temp);
+ temp=cimag(direct[j]);
+ fprintf(fid2," % .16e\n",temp);
+ }
+ fclose(fid1);
+ fclose(fid2);
+
+ /** finalise the plan */
+ fastsum_finalize(&my_fastsum_plan);
+
+ return 0;
+}
+/* \} */
diff --git a/applications/fastsum/fastsum_test.c b/applications/fastsum/fastsum_test.c
new file mode 100644
index 0000000..120d3fd
--- /dev/null
+++ b/applications/fastsum/fastsum_test.c
@@ -0,0 +1,272 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: fastsum_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/*! \file fastsum_test.c
+ * \brief Simple test program for the fast NFFT-based summation algorithm.
+ *
+ * \author Markus Fenn
+ * \date 2006
+ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+ #include <complex.h>
+#endif
+
+#ifdef _OPENMP
+ #include <omp.h>
+#endif
+
+#include "fastsum.h"
+#include "kernels.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_fastsum_test fastsum_test
+ * \ingroup applications_fastsum
+ * \{
+ */
+
+int main(int argc, char **argv)
+{
+ int j,k,t; /**< indices */
+ int d; /**< number of dimensions */
+ int N; /**< number of source nodes */
+ int M; /**< number of target nodes */
+ int n; /**< expansion degree */
+ int m; /**< cut-off parameter */
+ int p; /**< degree of smoothness */
+ char *s; /**< name of kernel */
+ double _Complex (*kernel)(double , int , const double *); /**< kernel function */
+ double c; /**< parameter for kernel */
+ fastsum_plan my_fastsum_plan; /**< plan for fast summation */
+ double _Complex *direct; /**< array for direct computation */
+ ticks t0, t1; /**< for time measurement */
+ double time; /**< for time measurement */
+ double error=0.0; /**< for error computation */
+ double eps_I; /**< inner boundary */
+ double eps_B; /**< outer boundary */
+
+ if (argc!=11)
+ {
+ printf("\nfastsum_test d N M n m p kernel c eps_I eps_B\n\n");
+ printf(" d dimension \n");
+ printf(" N number of source nodes \n");
+ printf(" M number of target nodes \n");
+ printf(" n expansion degree \n");
+ printf(" m cut-off parameter \n");
+ printf(" p degree of smoothness \n");
+ printf(" kernel kernel function (e.g., gaussian)\n");
+ printf(" c kernel parameter \n");
+ printf(" eps_I inner boundary \n");
+ printf(" eps_B outer boundary \n\n");
+ exit(-1);
+ }
+ else
+ {
+ d=atoi(argv[1]);
+ N=atoi(argv[2]); c=1.0/pow((double)N,1.0/(double)d);
+ M=atoi(argv[3]);
+ n=atoi(argv[4]);
+ m=atoi(argv[5]);
+ p=atoi(argv[6]);
+ s=argv[7];
+ c=atof(argv[8]);
+ eps_I=atof(argv[9]);
+ eps_B=atof(argv[10]);
+ if (strcmp(s,"gaussian")==0)
+ kernel = gaussian;
+ else if (strcmp(s,"multiquadric")==0)
+ kernel = multiquadric;
+ else if (strcmp(s,"inverse_multiquadric")==0)
+ kernel = inverse_multiquadric;
+ else if (strcmp(s,"logarithm")==0)
+ kernel = logarithm;
+ else if (strcmp(s,"thinplate_spline")==0)
+ kernel = thinplate_spline;
+ else if (strcmp(s,"one_over_square")==0)
+ kernel = one_over_square;
+ else if (strcmp(s,"one_over_modulus")==0)
+ kernel = one_over_modulus;
+ else if (strcmp(s,"one_over_x")==0)
+ kernel = one_over_x;
+ else if (strcmp(s,"inverse_multiquadric3")==0)
+ kernel = inverse_multiquadric3;
+ else if (strcmp(s,"sinc_kernel")==0)
+ kernel = sinc_kernel;
+ else if (strcmp(s,"cosc")==0)
+ kernel = cosc;
+ else if (strcmp(s,"cot")==0)
+ kernel = kcot;
+ else
+ {
+ s="multiquadric";
+ kernel = multiquadric;
+ }
+ }
+ printf("d=%d, N=%d, M=%d, n=%d, m=%d, p=%d, kernel=%s, c=%g, eps_I=%g, eps_B=%g \n",d,N,M,n,m,p,s,c,eps_I,eps_B);
+#ifdef NF_KUB
+ printf("nearfield correction using piecewise cubic Lagrange interpolation\n");
+#elif defined(NF_QUADR)
+ printf("nearfield correction using piecewise quadratic Lagrange interpolation\n");
+#elif defined(NF_LIN)
+ printf("nearfield correction using piecewise linear Lagrange interpolation\n");
+#endif
+
+#ifdef _OPENMP
+ #pragma omp parallel
+ {
+ #pragma omp single
+ {
+ printf("nthreads=%d\n", omp_get_max_threads());
+ }
+ }
+
+ fftw_init_threads();
+#endif
+
+ /** init d-dimensional fastsum plan */
+ fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, 0, n, m, p, eps_I, eps_B);
+ //fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, NEARFIELD_BOXES, n, m, p, eps_I, eps_B);
+
+ if (my_fastsum_plan.flags & NEARFIELD_BOXES)
+ printf("determination of nearfield candidates based on partitioning into boxes\n");
+ else
+ printf("determination of nearfield candidates based on search tree\n");
+
+ /** init source knots in a d-ball with radius 0.25-eps_b/2 */
+ k = 0;
+ while (k < N)
+ {
+ double r_max = 0.25 - my_fastsum_plan.eps_B/2.0;
+ double r2 = 0.0;
+
+ for (j=0; j<d; j++)
+ my_fastsum_plan.x[k*d+j] = 2.0 * r_max * (double)rand()/(double)RAND_MAX - r_max;
+
+ for (j=0; j<d; j++)
+ r2 += my_fastsum_plan.x[k*d+j] * my_fastsum_plan.x[k*d+j];
+
+ if (r2 >= r_max * r_max)
+ continue;
+
+ k++;
+ }
+
+ for (k=0; k<N; k++)
+ {
+/* double r=(0.25-my_fastsum_plan.eps_B/2.0)*pow((double)rand()/(double)RAND_MAX,1.0/d);
+ my_fastsum_plan.x[k*d+0] = r;
+ for (j=1; j<d; j++)
+ {
+ double phi=2.0*PI*(double)rand()/(double)RAND_MAX;
+ my_fastsum_plan.x[k*d+j] = r;
+ for (t=0; t<j; t++)
+ {
+ my_fastsum_plan.x[k*d+t] *= cos(phi);
+ }
+ my_fastsum_plan.x[k*d+j] *= sin(phi);
+ }
+*/
+ my_fastsum_plan.alpha[k] = (double)rand()/(double)RAND_MAX + _Complex_I*(double)rand()/(double)RAND_MAX;
+ }
+
+ /** init target knots in a d-ball with radius 0.25-eps_b/2 */
+ k = 0;
+ while (k < M)
+ {
+ double r_max = 0.25 - my_fastsum_plan.eps_B/2.0;
+ double r2 = 0.0;
+
+ for (j=0; j<d; j++)
+ my_fastsum_plan.y[k*d+j] = 2.0 * r_max * (double)rand()/(double)RAND_MAX - r_max;
+
+ for (j=0; j<d; j++)
+ r2 += my_fastsum_plan.y[k*d+j] * my_fastsum_plan.y[k*d+j];
+
+ if (r2 >= r_max * r_max)
+ continue;
+
+ k++;
+ }
+/* for (k=0; k<M; k++)
+ {
+ double r=(0.25-my_fastsum_plan.eps_B/2.0)*pow((double)rand()/(double)RAND_MAX,1.0/d);
+ my_fastsum_plan.y[k*d+0] = r;
+ for (j=1; j<d; j++)
+ {
+ double phi=2.0*PI*(double)rand()/(double)RAND_MAX;
+ my_fastsum_plan.y[k*d+j] = r;
+ for (t=0; t<j; t++)
+ {
+ my_fastsum_plan.y[k*d+t] *= cos(phi);
+ }
+ my_fastsum_plan.y[k*d+j] *= sin(phi);
+ }
+ } */
+
+ /** direct computation */
+ printf("direct computation: "); fflush(NULL);
+ t0 = getticks();
+ fastsum_exact(&my_fastsum_plan);
+ t1 = getticks();
+ time=nfft_elapsed_seconds(t1,t0);
+ printf("%fsec\n",time);
+
+ /** copy result */
+ direct = (double _Complex *)nfft_malloc(my_fastsum_plan.M_total*(sizeof(double _Complex)));
+ for (j=0; j<my_fastsum_plan.M_total; j++)
+ direct[j]=my_fastsum_plan.f[j];
+
+ /** precomputation */
+ printf("pre-computation: "); fflush(NULL);
+ t0 = getticks();
+ fastsum_precompute(&my_fastsum_plan);
+ t1 = getticks();
+ time=nfft_elapsed_seconds(t1,t0);
+ printf("%fsec\n",time);
+
+ /** fast computation */
+ printf("fast computation: "); fflush(NULL);
+ t0 = getticks();
+ fastsum_trafo(&my_fastsum_plan);
+ t1 = getticks();
+ time=nfft_elapsed_seconds(t1,t0);
+ printf("%fsec\n",time);
+
+ /** compute max error */
+ error=0.0;
+ for (j=0; j<my_fastsum_plan.M_total; j++)
+ {
+ if (cabs(direct[j]-my_fastsum_plan.f[j])/cabs(direct[j])>error)
+ error=cabs(direct[j]-my_fastsum_plan.f[j])/cabs(direct[j]);
+ }
+ printf("max relative error: %e\n",error);
+
+ /** finalise the plan */
+ fastsum_finalize(&my_fastsum_plan);
+
+ return 0;
+}
+/* \} */
diff --git a/applications/fastsum/fastsum_test.m b/applications/fastsum/fastsum_test.m
new file mode 100644
index 0000000..83f1677
--- /dev/null
+++ b/applications/fastsum/fastsum_test.m
@@ -0,0 +1,57 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: fastsum_test.m 3776 2012-06-03 13:29:25Z keiner $
+%
+% Simple test program for fast NFFT-based summation algorithm.
+% Markus Fenn, 2006.
+
+% d=2;
+% N=4000;
+% M=4000;
+% n=128;
+% m=4;
+% p=3;
+% kernel='multiquadric';
+% c=1/sqrt(N);
+%
+% system(sprintf('./fastsum_test %d %d %d %d %d %d %s %e',d,N,M,n,m,p,kernel,c));
+
+N = 2000;
+M = 2000;
+kernel = 'multiquadric';
+c = 1/sqrt(N);
+m = 4;
+p = 3;
+n = 156;
+eps_I = p/n;
+eps_B = 1/16;
+
+%random source nodes in circle of radius 0.25-eps_B/2
+r = sqrt(rand(N,1))*(0.25-eps_B/2);
+phi = rand(N,1)*2*pi;
+x = [r.*cos(phi) r.*sin(phi)];
+
+%random coefficients
+alpha = rand(N,1)+i*rand(N,1);
+
+%random target nodes in circle of radius 0.25-eps_B/2
+r = sqrt(rand(M,1))*(0.25-eps_B/2);
+phi = rand(M,1)*2*pi;
+y = [r.*cos(phi) r.*sin(phi)];
+
+%fast NFFT-based summation
+[f,f_direct] = fastsum(x,alpha,y,kernel,c,m,n,p,eps_I,eps_B);
diff --git a/applications/fastsum/kernels.c b/applications/fastsum/kernels.c
new file mode 100644
index 0000000..87d9115
--- /dev/null
+++ b/applications/fastsum/kernels.c
@@ -0,0 +1,405 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: kernels.c 3775 2012-06-02 16:39:48Z keiner $ */
+
+/*! \file kernels.c
+ * \brief File with predefined kernels for the fast summation algorithm.
+ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <float.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "kernels.h"
+
+/**
+ * \addtogroup applications_fastsum
+ * \{
+ */
+
+double _Complex gaussian(double x, int der, const double *param) /* K(x)=exp(-x^2/c^2) */
+{
+ double c=param[0];
+ double value=0.0;
+
+ switch (der)
+ {
+ case 0 : value=exp(-x*x/(c*c)); break;
+ case 1 : value=-2.0*x/(c*c)*exp(-x*x/(c*c)); break;
+ case 2 : value=2.0*exp(-x*x/(c*c))*(-c*c+2.0*x*x)/(c*c*c*c); break;
+ case 3 : value=-4.0*x*exp(-x*x/(c*c))*(-3.0*c*c+2.0*x*x)/(c*c*c*c*c*c); break;
+ case 4 : value=4.0*exp(-x*x/(c*c))*(3.0*c*c*c*c-12.0*c*c*x*x+4.0*x*x*x*x)/(c*c*c*c*c*c*c*c); break;
+ case 5 : value=-8.0*x*exp(-x*x/(c*c))*(15.0*c*c*c*c-20.0*c*c*x*x+4.0*x*x*x*x)/pow(c,10.0); break;
+ case 6 : value=8.0*exp(-x*x/(c*c))*(-15.0*c*c*c*c*c*c+90.0*x*x*c*c*c*c-60.0*x*x*x*x*c*c+8.0*x*x*x*x*x*x)/pow(c,12.0); break;
+ case 7 : value=-16.0*x*exp(-x*x/(c*c))*(-105.0*c*c*c*c*c*c+210.0*x*x*c*c*c*c-84.0*x*x*x*x*c*c+8.0*x*x*x*x*x*x)/pow(c,14.0); break;
+ case 8 : value=16.0*exp(-x*x/(c*c))*(105.0*c*c*c*c*c*c*c*c-840.0*x*x*c*c*c*c*c*c+840.0*x*x*x*x*c*c*c*c-224.0*x*x*x*x*x*x*c*c+16.0*x*x*x*x*x*x*x*x)/pow(c,16.0); break;
+ case 9 : value=-32.0*x*exp(-x*x/(c*c))*(945.0*c*c*c*c*c*c*c*c-2520.0*x*x*c*c*c*c*c*c+1512.0*x*x*x*x*c*c*c*c-288.0*x*x*x*x*x*x*c*c+16.0*x*x*x*x*x*x*x*x)/pow(c,18.0); break;
+ case 10 : value=32.0*exp(-x*x/(c*c))*(-945.0*pow(c,10.0)+9450.0*x*x*c*c*c*c*c*c*c*c-12600.0*x*x*x*x*c*c*c*c*c*c+5040.0*x*x*x*x*x*x*c*c*c*c-720.0*x*x*x*x*x*x*x*x*c*c+32.0*pow(x,10.0))/pow(c,20.0); break;
+ case 11 : value=-64.0*x*exp(-x*x/(c*c))*(-10395.0*pow(c,10.0)+34650.0*x*x*c*c*c*c*c*c*c*c-27720.0*x*x*x*x*c*c*c*c*c*c+7920.0*x*x*x*x*x*x*c*c*c*c-880.0*x*x*x*x*x*x*x*x*c*c+32.0*pow(x,10.0))/pow(c,22.0); break;
+ case 12 : value=64.0*exp(-x*x/(c*c))*(10395.0*pow(c,12.0)-124740.0*x*x*pow(c,10.0)+207900.0*x*x*x*x*c*c*c*c*c*c*c*c-110880.0*x*x*x*x*x*x*c*c*c*c*c*c+23760.0*x*x*x*x*x*x*x*x*c*c*c*c-2112.0*pow(x,10.0)*c*c+64.0*pow(x,12.0))/pow(c,24.0); break;
+ default : value=0.0;
+ }
+
+ return value;
+}
+
+double _Complex multiquadric(double x, int der, const double *param) /* K(x)=sqrt(x^2+c^2) */
+{
+ double c=param[0];
+ double value=0.0;
+
+ switch (der)
+ {
+ case 0 : value=sqrt(x*x+c*c); break;
+ case 1 : value=1.0/(sqrt(x*x+c*c))*x; break;
+ case 2 : value=c*c/sqrt(pow(x*x+c*c,3.0)); break;
+ case 3 : value=-3.0*x*c*c/sqrt(pow(x*x+c*c,5.0)); break;
+ case 4 : value=3.0*c*c*(4.0*x*x-c*c)/sqrt(pow(x*x+c*c,7.0)); break;
+ case 5 : value=-15.0*x*c*c*(4.0*x*x-3.0*c*c)/sqrt(pow(x*x+c*c,9.0)); break;
+ case 6 : value=45.0*c*c*(8.0*x*x*x*x-12.0*x*x*c*c+c*c*c*c)/sqrt(pow(x*x+c*c,11.0)); break;
+ case 7 : value=-315.0*x*c*c*(8.0*x*x*x*x-20.0*x*x*c*c+5.0*c*c*c*c)/sqrt(pow(x*x+c*c,13.0)); break;
+ case 8 : value=315.0*c*c*(64.0*x*x*x*x*x*x-240.0*x*x*x*x*c*c+120.0*x*x*c*c*c*c-5.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,15.0)); break;
+ case 9 : value=-2835.0*x*c*c*(64.0*x*x*x*x*x*x-336.0*x*x*x*x*c*c+280.0*x*x*c*c*c*c-35.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,17.0)); break;
+ case 10 : value=14175.0*c*c*(128.0*x*x*x*x*x*x*x*x-896.0*x*x*x*x*x*x*c*c+1120.0*x*x*x*x*c*c*c*c-280.0*x*x*c*c*c*c*c*c+7.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,19.0)); break;
+ case 11 : value=-155925.0*x*c*c*(128.0*x*x*x*x*x*x*x*x-1152.0*x*x*x*x*x*x*c*c+2016.0*x*x*x*x*c*c*c*c-840.0*x*x*c*c*c*c*c*c+63.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,21.0)); break;
+ case 12 : value=467775.0*c*c*(1260.0*x*x*c*c*c*c*c*c*c*c-21.0*pow(c,10.0)+512.0*pow(x,10.0)-5760.0*x*x*x*x*x*x*x*x*c*c+13440.0*x*x*x*x*x*x*c*c*c*c-8400.0*x*x*x*x*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,23.0)); break;
+ default : value=0.0;
+ }
+
+ return value;
+}
+
+double _Complex inverse_multiquadric(double x, int der, const double *param) /* K(x)=1/sqrt(x^2+c^2) */
+{
+ double c=param[0];
+ double value=0.0;
+
+ switch (der)
+ {
+ case 0 : value=1.0/sqrt(x*x+c*c); break;
+ case 1 : value=-1.0/(sqrt(pow(x*x+c*c,3.0)))*x; break;
+ case 2 : value=(2.0*x*x-c*c)/sqrt(pow(x*x+c*c,5.0)); break;
+ case 3 : value=-3.0*x*(2.0*x*x-3.0*c*c)/sqrt(pow(x*x+c*c,7.0)); break;
+ case 4 : value=3.0*(8.0*x*x*x*x-24.0*x*x*c*c+3.0*c*c*c*c)/sqrt(pow(x*x+c*c,9.0)); break;
+ case 5 : value=-15.0*x*(8.0*x*x*x*x-40.0*x*x*c*c+15.0*c*c*c*c)/sqrt(pow(x*x+c*c,11.0)); break;
+ case 6 : value=45.0*(16.0*x*x*x*x*x*x-120.0*x*x*x*x*c*c+90.0*x*x*c*c*c*c-5.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,13.0)); break;
+ case 7 : value=-315.0*x*(16.0*x*x*x*x*x*x-168.0*x*x*x*x*c*c+210.0*x*x*c*c*c*c-35.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,15.0)); break;
+ case 8 : value=315.0*(128.0*x*x*x*x*x*x*x*x-1792.0*x*x*x*x*x*x*c*c+3360.0*x*x*x*x*c*c*c*c-1120.0*x*x*c*c*c*c*c*c+35.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,17.0)); break;
+ case 9 : value=-2835.0*x*(128.0*x*x*x*x*x*x*x*x-2304.0*x*x*x*x*x*x*c*c+6048.0*x*x*x*x*c*c*c*c-3360.0*x*x*c*c*c*c*c*c+315.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,19.0)); break;
+ case 10 : value=14175.0*(256.0*pow(x,10.0)-5760.0*x*x*x*x*x*x*x*x*c*c+20160.0*x*x*x*x*x*x*c*c*c*c-16800.0*x*x*x*x*c*c*c*c*c*c+3150.0*x*x*c*c*c*c*c*c*c*c-63.0*pow(c,10.0))/sqrt(pow(x*x+c*c,21.0)); break;
+ case 11 : value=-155925.0*x*(256.0*pow(x,10.0)-7040.0*x*x*x*x*x*x*x*x*c*c+31680.0*x*x*x*x*x*x*c*c*c*c-36960.0*x*x*x*x*c*c*c*c*c*c+11550.0*x*x*c*c*c*c*c*c*c*c-693.0*pow(c,10.0))/sqrt(pow(x*x+c*c,23.0)); break;
+ case 12 : value=467775.0*(231.0*pow(c,12.0)+190080.0*x*x*x*x*x*x*x*x*c*c*c*c-16632.0*x*x*pow(c,10.0)-295680.0*x*x*x*x*x*x*c*c*c*c*c*c+138600.0*x*x*x*x*c*c*c*c*c*c*c*c+1024.0*pow(x,12.0)-33792.0*pow(x,10.0)*c*c)/sqrt(pow(x*x+c*c,25.0)); break;
+ default : value=0.0;
+ }
+
+ return value;
+}
+
+double _Complex logarithm(double x, int der, const double *param) /* K(x)=log |x| */
+{
+ double value=0.0;
+
+ (void)param;
+
+ if (fabs(x)<DBL_EPSILON) value=0.0;
+ else switch (der)
+ {
+ case 0 : value=log(fabs(x)); break;
+ case 1 : value=(x<0 ? -1 : 1)/fabs(x); break;
+ case 2 : value=-1/(x*x); break;
+ case 3 : value=2.0*(x<0 ? -1 : 1)/pow(fabs(x),3.0); break;
+ case 4 : value=-6.0/(x*x*x*x); break;
+ case 5 : value=24.0*(x<0 ? -1 : 1)/pow(fabs(x),5.0); break;
+ case 6 : value=-120.0/(x*x*x*x*x*x); break;
+ case 7 : value=720.0*(x<0 ? -1 : 1)/pow(fabs(x),7.0); break;
+ case 8 : value=-5040.0/(x*x*x*x*x*x*x*x); break;
+ case 9 : value=40320.0*(x<0 ? -1 : 1)/pow(fabs(x),9.0); break;
+ case 10 : value=-362880.0/pow(x,10.0); break;
+ case 11 : value=3628800.0*(x<0 ? -1 : 1)/pow(fabs(x),11.0); break;
+ case 12 : value=-39916800.0/pow(x,12.0); break;
+ case 13 : value=479001600.0/pow(x,13.0); break;
+ case 14 : value=-6227020800.0/pow(x,14.0); break;
+ case 15 : value=87178291200.0/pow(x,15.0); break;
+ case 16 : value=-1307674368000.0/pow(x,16.0); break;
+ case 17 : value=20922789888000.0/pow(x,17.0); break;
+ default : value=0.0;
+ }
+
+ return value;
+}
+
+double _Complex thinplate_spline(double x, int der, const double *param) /* K(x) = x^2 log |x| */
+{
+ double value=0.0;
+
+ (void)param;
+
+ if (fabs(x)<DBL_EPSILON) value=0.0;
+ else switch (der)
+ {
+ case 0 : value=x*x*log(fabs(x)); break;
+ case 1 : value=2.0*x*log(fabs(x))+x; break;
+ case 2 : value=2.0*log(fabs(x))+3.0; break;
+ case 3 : value=2.0/x; break;
+ case 4 : value=-2.0/(x*x); break;
+ case 5 : value=4.0/(x*x*x); break;
+ case 6 : value=-12.0/(x*x*x*x); break;
+ case 7 : value=48.0/(x*x*x*x*x); break;
+ case 8 : value=-240.0/(x*x*x*x*x*x); break;
+ case 9 : value=1440.0/(x*x*x*x*x*x*x); break;
+ case 10 : value=-10080.0/(x*x*x*x*x*x*x*x); break;
+ case 11 : value=80640.0/(x*x*x*x*x*x*x*x*x); break;
+ case 12 : value=-725760.0/pow(x,10.0); break;
+ default : value=0.0;
+ }
+
+ return value;
+}
+
+double _Complex one_over_square(double x, int der, const double *param) /* K(x) = 1/x^2 */
+{
+ double value=0.0;
+
+ (void)param;
+
+ if (fabs(x)<DBL_EPSILON) value=0.0;
+ else switch (der)
+ {
+ case 0 : value=1.0/(x*x); break;
+ case 1 : value=-2.0/(x*x*x); break;
+ case 2 : value=6.0/(x*x*x*x); break;
+ case 3 : value=-24.0/(x*x*x*x*x); break;
+ case 4 : value=120.0/(x*x*x*x*x*x); break;
+ case 5 : value=-720.0/(x*x*x*x*x*x*x); break;
+ case 6 : value=5040.0/(x*x*x*x*x*x*x*x); break;
+ case 7 : value=-40320.0/(x*x*x*x*x*x*x*x*x); break;
+ case 8 : value=362880.0/pow(x,10.0); break;
+ case 9 : value=-3628800.0/pow(x,11.0); break;
+ case 10 : value=39916800.0/pow(x,12.0); break;
+ case 11 : value=-479001600.0/pow(x,13.0); break;
+ case 12 : value=6227020800.0/pow(x,14.0); break;
+ default : value=0.0;
+ }
+
+ return value;
+}
+
+double _Complex one_over_modulus(double x, int der, const double *param) /* K(x) = 1/|x| */
+{
+ double value=0.0;
+
+ (void)param;
+
+ if (fabs(x)<DBL_EPSILON) value=0.0;
+ else switch (der)
+ {
+ case 0 : value=1.0/fabs(x); break;
+ case 1 : value=-1/x/fabs(x); break;
+ case 2 : value=2.0/pow(fabs(x),3.0); break;
+ case 3 : value=-6.0/(x*x*x)/fabs(x); break;
+ case 4 : value=24.0/pow(fabs(x),5.0); break;
+ case 5 : value=-120.0/(x*x*x*x*x)/fabs(x); break;
+ case 6 : value=720.0/pow(fabs(x),7.0); break;
+ case 7 : value=-5040.0/(x*x*x*x*x*x*x)/fabs(x); break;
+ case 8 : value=40320.0/pow(fabs(x),9.0); break;
+ case 9 : value=-362880.0/(x*x*x*x*x*x*x*x*x)/fabs(x); break;
+ case 10 : value=3628800.0/pow(fabs(x),11.0); break;
+ case 11 : value=-39916800.0/pow(x,11.0)/fabs(x); break;
+ case 12 : value=479001600.0/pow(fabs(x),13.0); break;
+ default : value=0.0;
+ }
+
+ return value;
+}
+
+double _Complex one_over_x(double x, int der, const double *param) /* K(x) = 1/x */
+{
+ double value=0.0;
+
+ (void)param;
+
+ if (fabs(x)<DBL_EPSILON) value=0.0;
+ else switch (der)
+ {
+ case 0 : value=1.0/x; break;
+ case 1 : value=-1.0/(x*x); break;
+ case 2 : value=2.0/(x*x*x); break;
+ case 3 : value=-6.0/(x*x*x*x); break;
+ case 4 : value=24.0/(x*x*x*x*x); break;
+ case 5 : value=-120.0/(x*x*x*x*x*x); break;
+ case 6 : value=720.0/(x*x*x*x*x*x*x); break;
+ case 7 : value=-5040.0/(x*x*x*x*x*x*x*x); break;
+ case 8 : value=40320.0/(x*x*x*x*x*x*x*x*x); break;
+ case 9 : value=-362880.0/pow(x,10.0); break;
+ case 10 : value=3628800.0/pow(x,11.0); break;
+ case 11 : value=-39916800.0/pow(x,12.0); break;
+ case 12 : value=479001600.0/pow(x,13.0); break;
+ default : value=0.0;
+ }
+
+ return value;
+}
+
+double _Complex inverse_multiquadric3(double x, int der, const double *param) /* K(x) = 1/sqrt(x^2+c^2)^3 */
+{
+ double c=param[0];
+ double value=0.0;
+
+ switch (der)
+ {
+ case 0 : value=1.0/(sqrt(pow(x*x+c*c,3.0))); break;
+ case 1 : value=-3.0/sqrt(pow(x*x+c*c,5.0))*x; break;
+ case 2 : value=3.0*(4.0*x*x-c*c)/sqrt(pow(x*x+c*c,7.0)); break;
+ case 3 : value=-15.0*x*(4.0*x*x-3.0*c*c)/sqrt(pow(x*x+c*c,9.0)); break;
+ case 4 : value=45.0*(8.0*x*x*x*x-12.0*x*x*c*c+c*c*c*c)/sqrt(pow(x*x+c*c,11.0)); break;
+ case 5 : value=-315.0*x*(8.0*x*x*x*x-20.0*x*x*c*c+5.0*c*c*c*c)/sqrt(pow(x*x+c*c,13.0)); break;
+ case 6 : value=315.0*(64.0*x*x*x*x*x*x-240.0*x*x*x*x*c*c+120.0*x*x*c*c*c*c-5.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,15.0)); break;
+ case 7 : value=-2835.0*x*(64.0*x*x*x*x*x*x-336.0*x*x*x*x*c*c+280.0*x*x*c*c*c*c-35.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,17.0)); break;
+ case 8 : value=14175.0*(128.0*x*x*x*x*x*x*x*x-896.0*x*x*x*x*x*x*c*c+1120.0*x*x*x*x*c*c*c*c-280.0*x*x*c*c*c*c*c*c+7.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,19.0)); break;
+ case 9 : value=-155925.0*x*(128.0*x*x*x*x*x*x*x*x-1152.0*x*x*x*x*x*x*c*c+2016.0*x*x*x*x*c*c*c*c-840.0*x*x*c*c*c*c*c*c+63.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,21.0)); break;
+ case 10 : value=467775.0*(512.0*pow(x,10.0)-5760.0*x*x*x*x*x*x*x*x*c*c+13440.0*x*x*x*x*x*x*c*c*c*c-8400.0*x*x*x*x*c*c*c*c*c*c+1260.0*x*x*c*c*c*c*c*c*c*c-21.0*pow(c,10.0))/sqrt(pow(x*x+c*c,23.0)); break;
+ case 11 : value=-6081075.0*x*(512.0*pow(x,10.0)-7040.0*x*x*x*x*x*x*x*x*c*c+21120.0*x*x*x*x*x*x*c*c*c*c-18480.0*x*x*x*x*c*c*c*c*c*c+4620.0*x*x*c*c*c*c*c*c*c*c-231.0*pow(c,10.0))/sqrt(pow(x*x+c*c,25.0)); break;
+ case 12 : value=42567525.0*(1024.0*pow(x,12.0)+27720.0*x*x*x*x*c*c*c*c*c*c*c*c+33.0*pow(c,12.0)-2772.0*x*x*pow(c,10.0)-73920.0*x*x*x*x*x*x*c*c*c*c*c*c+63360.0*x*x*x*x*x*x*x*x*c*c*c*c-16896.0*pow(x,10.0)*c*c)/sqrt(pow(x*x+c*c,27.0)); break;
+ default : value=0.0;
+ }
+
+ return value;
+}
+
+double _Complex sinc_kernel(double x, int der, const double *param) /* K(x) = sin(cx)/x */
+{
+ double c=param[0];
+ double value=0.0;
+
+ if (fabs(x)<DBL_EPSILON) value=0.0;
+ else switch (der)
+ {
+ case 0 : value=sin(c*x)/x; break;
+ case 1 : value=(cos(c*x)*c*x-sin(c*x))/(x*x); break;
+ case 2 : value=-(sin(c*x)*c*c*x*x+2.0*cos(c*x)*c*x-2.0*sin(c*x))/(x*x*x); break;
+ case 3 : value=-(cos(c*x)*c*c*c*x*x*x-3.0*sin(c*x)*c*c*x*x-6.0*cos(c*x)*c*x+6.0*sin(c*x))/(x*x*x*x); break;
+ case 4 : value=(sin(c*x)*c*c*c*c*x*x*x*x+4.0*cos(c*x)*c*c*c*x*x*x-12.0*sin(c*x)*c*c*x*x-24.0*cos(c*x)*c*x+24.0*sin(c*x))/(x*x*x*x*x); break;
+ case 5 : value=(cos(c*x)*c*c*c*c*c*x*x*x*x*x-5.0*sin(c*x)*c*c*c*c*x*x*x*x-20.0*cos(c*x)*c*c*c*x*x*x+60.0*sin(c*x)*c*c*x*x+120.0*cos(c*x)*c*x-120.0*sin(c*x))/(x*x*x*x*x*x); break;
+ case 6 : value=-(sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+6.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x-30.0*sin(c*x)*c*c*c*c*x*x*x*x-120.0*cos(c*x)*c*c*c*x*x*x+360.0*sin(c*x)*c*c*x*x+720.0*cos(c*x)*c*x-720.0*sin(c*x))/(x*x*x*x*x*x*x); break;
+ case 7 : value=-(cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-7.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-42.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+210.0*sin(c*x)*c*c*c*c*x*x*x*x+840.0*cos(c*x)*c*c*c*x*x*x-2520.0*sin(c*x)*c*c*x*x-5040.0*cos(c*x)*c*x+5040.0*sin(c*x))/(x*x*x*x*x*x*x*x); break;
+ case 8 : value=(sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+8.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-56.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-336.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+1680.0*sin(c*x)*c*c*c*c*x*x*x*x+6720.0*cos(c*x)*c*c*c*x*x*x-20160.0*sin(c*x)*c*c*x*x-40320.0*cos(c*x)*c*x+40320.0*sin(c*x))/(x*x*x*x*x*x*x*x*x); break;
+ case 9 : value=(cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-9.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-72.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+504.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+3024.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x-15120.0*sin(c*x)*c*c*c*c*x*x*x*x-60480.0*cos(c*x)*c*c*c*x*x*x+181440.0*sin(c*x)*c*c*x*x+362880.0*cos(c*x)*c*x-362880.0*sin(c*x))/pow(x,10.0); break;
+ case 10 : value=-(sin(c*x)*pow(c,10.0)*pow(x,10.0)+10.0*cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-90.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-720.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+5040.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+30240.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x-151200.0*sin(c*x)*c*c*c*c*x*x*x*x-604800.0*cos(c*x)*c*c*c*x*x*x+1814400.0*sin(c*x)*c*c*x*x+3628800.0*cos(c*x)*c*x-3628800.0*sin(c*x))/pow(x,11.0); break;
+ case 11 : value=-(cos(c*x)*pow(c,11.0)*pow(x,11.0)-11.0*sin(c*x)*pow(c,10.0)*pow(x,10.0)-110.0*cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+990.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+7920.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-55440.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-332640.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+1663200.0*sin(c*x)*c*c*c*c*x*x*x*x+6652800.0*cos(c*x)*c*c*c*x*x*x-19958400.0*sin(c*x)*c*c*x*x-39916800.0*cos(c*x)*c*x+39916800.0*sin(c*x))/pow(x,12.0); break;
+ case 12 : value=(sin(c*x)*pow(c,12.0)*pow(x,12.0)+12.0*cos(c*x)*pow(c,11.0)*pow(x,11.0)-132.0*sin(c*x)*pow(c,10.0)*pow(x,10.0)-1320.0*cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+11880.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+95040.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-665280.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-3991680.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+19958400.0*sin(c*x)*c*c*c*c*x*x*x*x+79833600.0*cos(c*x)*c*c*c*x*x*x-239500800.0*sin(c*x)*c*c*x*x-479001600.0*cos(c*x)*c*x+479001600.0* [...]
+ default : value=0.0;
+ }
+
+ return value;
+}
+
+double _Complex cosc(double x, int der, const double *param) /* K(x) = cos(cx)/x */
+{
+ double c=param[0];
+ double value=0.0;
+ double sign;
+
+ if (x<0) sign=-1.0; else sign=1.0;
+ x=fabs(x);
+
+ if (fabs(x)<DBL_EPSILON) value=0.0;
+ else switch (der)
+ {
+ case 0 : value=cos(c*x)/x; break;
+ case 1 : value=-(sin(c*x)*c*x+cos(c*x))/(x*x); break;
+ case 2 : value=(-cos(c*x)*c*c*x*x+2.0*sin(c*x)*c*x+2.0*cos(c*x))/(x*x*x); break;
+ case 3 : value=(sin(c*x)*c*c*c*x*x*x+3.0*cos(c*x)*c*c*x*x-6.0*sin(c*x)*c*x-6.0*cos(c*x))/(x*x*x*x); break;
+ case 4 : value=(cos(c*x)*c*c*c*c*x*x*x*x-4.0*sin(c*x)*c*c*c*x*x*x-12.0*cos(c*x)*c*c*x*x+24.0*sin(c*x)*c*x+24.0*cos(c*x))/(x*x*x*x*x); break;
+ case 5 : value=-(sin(c*x)*c*c*c*c*c*x*x*x*x*x+5.0*cos(c*x)*c*c*c*c*x*x*x*x-20.0*sin(c*x)*c*c*c*x*x*x-60.0*cos(c*x)*c*c*x*x+120.0*sin(c*x)*c*x+120.0*cos(c*x))/(x*x*x*x*x*x); break;
+ case 6 : value=-(cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-6.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-30.0*cos(c*x)*c*c*c*c*x*x*x*x+120.0*sin(c*x)*c*c*c*x*x*x+360.0*cos(c*x)*c*c*x*x-720.0*sin(c*x)*c*x-720.0*cos(c*x))/(x*x*x*x*x*x*x); break;
+ case 7 : value=(sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+7.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-42.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-210.0*cos(c*x)*c*c*c*c*x*x*x*x+840.0*sin(c*x)*c*c*c*x*x*x+2520.0*cos(c*x)*c*c*x*x-5040.0*sin(c*x)*c*x-5040.0*cos(c*x))/(x*x*x*x*x*x*x*x); break;
+ case 8 : value=(cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-8.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-56.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+336.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x+1680.0*cos(c*x)*c*c*c*c*x*x*x*x-6720.0*sin(c*x)*c*c*c*x*x*x-20160.0*cos(c*x)*c*c*x*x+40320.0*sin(c*x)*c*x+40320.0*cos(c*x))/(x*x*x*x*x*x*x*x*x); break;
+ case 9 : value=-(sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+9.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-72.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-504.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+3024.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x+15120.0*cos(c*x)*c*c*c*c*x*x*x*x-60480.0*sin(c*x)*c*c*c*x*x*x-181440.0*cos(c*x)*c*c*x*x+362880.0*sin(c*x)*c*x+362880.0*cos(c*x))/pow(x,10.0); break;
+ case 10 : value=-(cos(c*x)*pow(c,10.0)*pow(x,10.0)-10.0*sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-90.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+720.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+5040.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-30240.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-151200.0*cos(c*x)*c*c*c*c*x*x*x*x+604800.0*sin(c*x)*c*c*c*x*x*x+1814400.0*cos(c*x)*c*c*x*x-3628800.0*sin(c*x)*c*x-3628800.0*cos(c*x))/pow(x,11.0); break;
+ case 11 : value=(sin(c*x)*pow(c,11.0)*pow(x,11.0)+11.0*cos(c*x)*pow(c,10.0)*pow(x,10.0)-110.0*sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-990.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+7920.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+55440.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-332640.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-1663200.0*cos(c*x)*c*c*c*c*x*x*x*x+6652800.0*sin(c*x)*c*c*c*x*x*x+19958400.0*cos(c*x)*c*c*x*x-39916800.0*sin(c*x)*c*x-39916800.0*cos(c*x))/pow(x,12.0); break;
+ case 12 : value=(cos(c*x)*pow(c,12.0)*pow(x,12.0)-12.0*sin(c*x)*pow(c,11.0)*pow(x,11.0)-132.0*cos(c*x)*pow(c,10.0)*pow(x,10.0)+1320.0*sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+11880.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-95040.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-665280.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+3991680.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x+19958400.0*cos(c*x)*c*c*c*c*x*x*x*x-79833600.0*sin(c*x)*c*c*c*x*x*x-239500800.0*cos(c*x)*c*c*x*x+479001600.0*sin(c*x)*c*x+479001600.0* [...]
+ default : value=0.0;
+ }
+ value*=pow(sign,der);
+
+ return value;
+}
+
+double _Complex kcot(double x, int der, const double *param) /* K(x) = cot(cx) */
+{
+ double c=param[0];
+ double value=0.0;
+
+ if (fabs(x)<DBL_EPSILON) value=0.0;
+ else switch (der)
+ {
+ case 0 : value = 1.0/tan(c * x); break;
+ case 1 : value = -(1.0 + pow(1.0/tan(c * x), 2.0)) * c; break;
+ case 2 : value = 2.0 * 1.0/tan(c * x) * (1.0 + pow(1.0/tan(c * x), 2.0)) * c * c; break;
+ case 3 : value = -2.0 * (1.0 + pow(1.0/tan(c * x), 2.0)) * pow(c, 3.0) * (1.0 + 3.0 * pow(1.0/tan(c * x), 2.0)); break;
+ case 4 : value = 8.0 * (1.0 + pow(1.0/tan(c * x), 2.0)) * pow(c, 4.0) * 1.0/tan(c * x) * (2.0 + 3.0 * pow(1.0/tan(c * x), 2.0)); break;
+ case 5 : value = -0.8e1 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.5e1) * (0.15e2 * pow(1.0/tan(c * x), 0.2e1) + 0.15e2 * pow(1.0/tan(c * x), 0.4e1) + 0.2e1); break;
+ case 6 : value = 0.16e2 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.6e1) * 1.0/tan(c * x) * (0.60e2 * pow(1.0/tan(c * x), 0.2e1) + 0.45e2 * pow(1.0/tan(c * x), 0.4e1) + 0.17e2); break;
+ case 7 : value = -0.16e2 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.7e1) * (0.525e3 * pow(1.0/tan(c * x), 0.4e1) + 0.315e3 * pow(1.0/tan(c * x), 0.6e1) + 0.231e3 * pow(1.0/tan(c * x), 0.2e1) + 0.17e2); break;
+ case 8 : value = 0.128e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.8e1) * 1.0/tan(c * x) * (0.630e3 * pow(1.0/tan(c * x), 0.4e1) + 0.315e3 * pow(1.0/tan(c * x), 0.6e1) + 0.378e3 * pow(1.0/tan(c * x), 0.2e1) + 0.62e2); break;
+ case 9 : value = -0.128e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.9e1) * (0.6615e4 * pow(1.0/tan(c * x), 0.6e1) + 0.2835e4 * pow(1.0/tan(c * x), 0.8e1) + 0.5040e4 * pow(1.0/tan(c * x), 0.4e1) + 0.1320e4 * pow(1.0/tan(c * x), 0.2e1) + 0.62e2); break;
+ case 10 : value = 0.256e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.10e2) * 1.0/tan(c * x) * (0.37800e5 * pow(1.0/tan(c * x), 0.6e1) + 0.14175e5 * pow(1.0/tan(c * x), 0.8e1) + 0.34965e5 * pow(1.0/tan(c * x), 0.4e1) + 0.12720e5 * pow(1.0/tan(c * x), 0.2e1) + 0.1382e4); break;
+ case 11 : value = -0.256e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.11e2) * (0.467775e6 * pow(1.0/tan(c * x), 0.8e1) + 0.155925e6 * pow(1.0/tan(c * x), 0.10e2) + 0.509355e6 * pow(1.0/tan(c * x), 0.6e1) + 0.238425e6 * pow(1.0/tan(c * x), 0.4e1) + 0.42306e5 * pow(1.0/tan(c * x), 0.2e1) + 0.1382e4); break;
+ case 12 : value = 0.1024e4 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.12e2) * 1.0/tan(c * x) * (0.1559250e7 * pow(1.0/tan(c * x), 0.8e1) + 0.467775e6 * pow(1.0/tan(c * x), 0.10e2) + 0.1954260e7 * pow(1.0/tan(c * x), 0.6e1) + 0.1121670e7 * pow(1.0/tan(c * x), 0.4e1) + 0.280731e6 * pow(1.0/tan(c * x), 0.2e1) + 0.21844e5); break;
+ default : value=0.0;
+ }
+
+ return value;
+}
+
+
+double _Complex one_over_cube(double x, int der, const double *param)
+{
+ double value=0.0;
+
+ if (fabs(x)<DBL_EPSILON) value=0.0;
+ else switch (der)
+ {
+ case 0 : value = 1.0/(x*x*x); break;
+ case 1 : value = -3.0/(x*x*x*x); break;
+ case 2 : value = 12.0/(x*x*x*x*x); break;
+ case 3 : value = -60.0/(x*x*x*x*x*x); break;
+ case 4 : value = 360.0/(x*x*x*x*x*x*x); break;
+ case 5 : value = -2520.0/(x*x*x*x*x*x*x*x); break;
+ case 6 : value = 20160.0/pow(x, 9.0); break;
+ case 7 : value = -181440.0/pow(x, 10.0); break;
+ case 8 : value = 1814400.0/pow(x, 11.0); break;
+ case 9 : value = -19958400.0/pow(x, 12.0); break;
+ case 10 : value = 239500800.0/pow(x, 13.0); break;
+ case 11 : value = -3113510400.0/pow(x, 14.0); break;
+ case 12 : value = 43589145600.0/pow(x, 15.0); break;
+ default : value=0.0;
+ }
+
+ return value;
+}
+
+
+/* \} */
+
+/* kernels.c */
diff --git a/applications/fastsum/kernels.h b/applications/fastsum/kernels.h
new file mode 100644
index 0000000..8532b0b
--- /dev/null
+++ b/applications/fastsum/kernels.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: kernels.h 3775 2012-06-02 16:39:48Z keiner $ */
+
+/*! \file kernels.h
+ * \brief Header file with predefined kernels for the fast summation algorithm.
+ */
+#ifndef KERNELS_H
+#define KERNELS_H
+
+#include "config.h"
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/**
+ * \addtogroup applications_fastsum
+ * \{
+ */
+
+double _Complex gaussian(double x, int der, const double *param); /* K(x)=exp(-x^2/c^2) */
+double _Complex multiquadric(double x, int der, const double *param); /* K(x)=sqrt(x^2+c^2) */
+double _Complex inverse_multiquadric(double x, int der, const double *param); /* K(x)=1/sqrt(x^2+c^2) */
+double _Complex logarithm(double x, int der, const double *param); /* K(x)=log |x| */
+double _Complex thinplate_spline(double x, int der, const double *param); /* K(x) = x^2 log |x| */
+double _Complex one_over_square(double x, int der, const double *param); /* K(x) = 1/x^2 */
+double _Complex one_over_modulus(double x, int der, const double *param); /* K(x) = 1/|x| */
+double _Complex one_over_x(double x, int der, const double *param); /* K(x) = 1/x */
+double _Complex inverse_multiquadric3(double x, int der, const double *param); /* K(x) = 1/sqrt(x^2+c^2)^3 */
+double _Complex sinc_kernel(double x, int der, const double *param); /* K(x) = sin(cx)/x */
+double _Complex cosc(double x, int der, const double *param); /* K(x) = cos(cx)/x */
+double _Complex kcot(double x, int der, const double *param); /* K(x) = cot(cx) */
+double _Complex one_over_cube(double x, int der, const double *param); /* K(x) = 1/x^3 */
+/* \} */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif
+/* kernels.h */
diff --git a/applications/fastsumS2/Makefile.am b/applications/fastsumS2/Makefile.am
new file mode 100644
index 0000000..dc9cb12
--- /dev/null
+++ b/applications/fastsumS2/Makefile.am
@@ -0,0 +1,10 @@
+# $Id: Makefile.am 3783 2012-06-06 13:17:59Z mpip $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = fastsumS2
+
+fastsumS2_SOURCES = fastsumS2.c doxygen.h
+fastsumS2_LDADD = $(top_builddir)/libnfft3.la
+
+EXTRA_DIST = fastsumS2.m writeTestcase.m readTestcase.m README example.in example.out
diff --git a/applications/fastsumS2/Makefile.in b/applications/fastsumS2/Makefile.in
new file mode 100644
index 0000000..3970941
--- /dev/null
+++ b/applications/fastsumS2/Makefile.in
@@ -0,0 +1,555 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3783 2012-06-06 13:17:59Z mpip $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = fastsumS2$(EXEEXT)
+subdir = applications/fastsumS2
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_fastsumS2_OBJECTS = fastsumS2.$(OBJEXT)
+fastsumS2_OBJECTS = $(am_fastsumS2_OBJECTS)
+fastsumS2_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(fastsumS2_SOURCES)
+DIST_SOURCES = $(fastsumS2_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+fastsumS2_SOURCES = fastsumS2.c doxygen.h
+fastsumS2_LDADD = $(top_builddir)/libnfft3.la
+EXTRA_DIST = fastsumS2.m writeTestcase.m readTestcase.m README example.in example.out
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/fastsumS2/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applications/fastsumS2/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+fastsumS2$(EXEEXT): $(fastsumS2_OBJECTS) $(fastsumS2_DEPENDENCIES) $(EXTRA_fastsumS2_DEPENDENCIES)
+ @rm -f fastsumS2$(EXEEXT)
+ $(LINK) $(fastsumS2_OBJECTS) $(fastsumS2_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsumS2.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/fastsumS2/README b/applications/fastsumS2/README
new file mode 100644
index 0000000..1e976c2
--- /dev/null
+++ b/applications/fastsumS2/README
@@ -0,0 +1,191 @@
+fastsumS2 - Fast summation of radial functions on the sphere
+
+ Introduction
+ ------------
+ This application deals with approximations to sums of the form
+
+ L-1
+ -
+ f(xi_d) = > b_l K(eta_l - xi_d) (d=0,...,D-1) (1)
+ -
+ l=0
+
+ where xi_d, eta_l are arbitrary nodes on the sphere S^2 given in spherical
+ coordinates (theta,phi) from [0,pi] x [0,2pi), b_l are complex coefficients
+ and K: [-1,1] -> C is a kernel function. Such kernels include the Abel-Poisson
+ and singularity kernels as well as locally supported kernels and the spherical
+ Gaussian kernel. In the following, we will assume that the reader is familiar
+ with the general procedure. A detailed description can be found in [1].
+
+ The fast approximate algorithm usees the fast spherical Fourier transform for
+ arbitrary nodes (NFSFT). For more information on this algorithm and notation
+ in detail, we refer to [1] and [2]. Alternatively, one can replace the
+ individual steps of the NFSFT algirithm by exact but asymptotically slower
+ versions or use a direct evaluation and summation of the kernel functions in
+ (1).
+
+ Directory contents
+ ------------------
+ fastsumS2.c Example C program
+ example.in Example input for fastsum.c
+ example.out Example output of fastsum.c on input example.in
+ README This file
+ Makefile.am Automake template
+ fastsumS2.m MATLAB example file that re-produces figures and tables from
+ [1] using fastsumS2.c
+ readTestcase.m MATLAB function that reads output of fastsumS2.c
+ writeTestcase.m MATLAB function that writes input for fastsumS2.c
+
+ fastsumS2.c
+ -----------
+ The C program fastsumS2.c computes approximations to the sums in (1) using the
+ aforementioned different algorithms. It reads input from the standard input
+ stream and writes output to the standard output stream. The input consists of
+ one ore more testcases. Each testcase specifies
+ - the algorithm(s) and corresponding parameters,
+ - the kernel function and corresponding parameters,
+ - the cut-off degree(s) M for the approximation to the kernel function,
+ - the numbers D and L of nodes.
+ The D and L nodes xi_d and eta_l in (1) are chosen uniformly randomly
+ distributed over the sphere S^2. The coefficients b_l in (1) are chosen
+ uniformly randomly distributed in the complex square [-1/2,1/2] x i[-1/2,1/2].
+ For more information, see the example input file example.in .
+
+ Each parameter is specified by an assignment of the form 'name=value'. Each
+ assignment is seperated from the others by at least one whitespace. All
+ parameter values are integer or floating point numbers. There are obligatory
+ parameters which have to be specified in every testcase and extra
+ parameters which are only necessary if the parameters on which each of them
+ depends take certain values. The parameters must be specified in the order as
+ above. Every parameter has a range of admissible values. The behaviour of the
+ program for illegal values of parameters is unspecified. The first parameter
+ specification is 'testcases=...' which specifies the number of testcases to
+ follow. Each testcase has the following parameters with extra parameters
+ marked by an asterisk:
+ - nfsft If set to 1, the NFSFT algorithm is used. If set to 0, the
+ direct NDSFT algorithm is used.
+ * nfft If set to 1, the NFSFT algorithm will internally use the NFFT
+ algorithm. If set to 0, the NFSFT algorithm will instead use
+ the direct NDSFT algorithm. Extra parameter. Specified only
+ if nfsft=1.
+ * cutoff An integer > 0 specifying the NFFT cut-off parameter. Extra
+ parameter. Specified only if nfft=1.
+ * fpt If set to 1, the NFSFT algorithm will internally use the fast
+ polynomial transform algorithm (FPT). If set to 0, the NFSFT
+ algorithm will instead use the direct discrete polynomial
+ transform algorithm (direct DPT). Extra parameter. Specified
+ only if nfsft=1.
+ * threshold A floating point number > 0 specifying the threshold
+ parameter for the FPT algorithm. Extra parameter. Specified
+ only if fpt=1.
+ - kernel An integer from {0,1,2,3} specifying the type of kernel
+ function to be used. The different kernel functions available
+ are
+ + the Abel-Poisson kernel Q_h with real parameter h from
+ (0,1),
+ + the singularity kernel S_h with real parameter h from
+ (0,1),
+ + the locally supported kernel L_h,lambda real parameter h
+ from (-1,1) and integer parameter lambda >= 0.
+ + the spherical Gaussian kernel G_sigma with real parameter
+ sigma > 0.
+ - parameter_sets An integer > 0 specifying the number of parameter sets to
+ follow for the chosen type of kernel function. In a testcase,
+ the specified type of kernel function can be used with more
+ than one set of distinct parameters to yield different kernel
+ functions.
+ - parameters An integer > 0 specifying the number of parameters that
+ specifies each individual kernel function (one for
+ Abel-Poisson, singularity and spherical Gaussian kernel, two
+ for the locally supported kernel). The parameters' values are
+ given afterwards a list floating point numbers order as in
+ the description of the kernel functions above and grouped by
+ kernel function instance.
+ - bandwidths The number of different cut-off degrees M to be used in the
+ approximation. There follows a list of positive integers
+ specifying the distinct cut-off degrees.
+ - node_sets An integer > 0 specifying the number of sets of nodes to
+ follow
+ - L An integer > 0 specifying the number of source nodes.
+ - D An integer > 0 specifying the number of target nodes.
+ - compare If set to 1, the result of the approximate algorithm is
+ compared to the result of the direct evaluation. If set to 0,
+ no comparison is performed.
+ * precomputed If set to 1, all values in the sum (1) are precomputed and
+ the time measurement for the direct evaluation only measures
+ the time needed to sum up these values. Extra parameter.
+ Specified only if compare=1.
+ * repetitions An integer > 0 specifying the number of times the summation
+ process is repeated. Time emasurements are averaged over all
+ repetitions. This can be used to compensate for inaccuracies
+ in the time measurements for very small computation times.
+
+ The output of the program containes all the input but without the parameter
+ names and, in addition, the results of time and error measurements after each
+ testcase. See the file example.out for an example output on input the contents
+ of example.in.
+
+ To each combination of kernel function, cut-off degree, and node set
+ corresponds a single run of the summation algorithm and therefore a set of
+ six resulting values grouped together. These are
+ - the time needed for direct evaluation of the sums (1),
+ - the time needed for direct evaluation of the sums (1) with the values of
+ the kernel functions precomputed,
+ - the time needed by the fast summation algorithm using the direct NDSFT
+ algorithm,
+ - the time needed by the fast summation algorithm using the NFSFT algorithm,
+ - the error E_infty for the fast summation algorithm using the direct NDSFT
+ algorithm,
+ - the error E_infty for the fast summation algorithm using the NFSFT
+ algorithm.
+
+ Here, the error E_infty is defined as ||f - f_M||_infty / ||b||_1 with the
+ infinity norm ||.||_infty, the one norm ||.||_1, the vector f of function
+ values computed by direct evaluation of the sums in (1), f_M the vector
+ computed by the fast summation algorithm, using either the direct NDSFT or
+ the NFSFT algorithm, and the vector b containing the coefficients b_l from
+ (1).
+ Depending on the parameter combination, some of these (always positive) values
+ might be undefined. This indicated by setting these values to -1.0.
+ The blocks of resulting values for a single run are grouped for each testcase
+ first by the kernel parameters, second by the node sets and third by the
+ cut-off bandwidths ordered as in the input.
+
+ fastsumS2.m
+ -----------
+ This MATLAB function demonstrates the fast summation algorithm using the C
+ program fastsumS2.c . It allows for selecting different testcases to reproduce
+ the figures and tables from [1]. On choosing a testcase, input for the C
+ program fastsumS2.c is generated and written to the file data.in ,
+ fastsumS2.c is called with the generated input writing the result to the file
+ data.out where it is read again into MATLAB. In MATLAB, type "help fatsumS2"
+ for more information.
+
+ readTestcase.m
+ --------------
+ This MATLAB function is used by fatsumS2.m and allows for reading testcase
+ specifications and results from a file. In MATLAB, type "help readTestcase"
+ for more information.
+
+ writeTestcase.m
+ ---------------
+ This MATLAB function is used by fatsumS2.m and allows for writing testcase
+ specifications to a file. In MATLAB, type "help readTestcase" for more
+ information.
+
+ References
+ ----------
+ [1] Keiner, J., Kunis, S. and Potts, D., Fast summation of radial functions
+ on the sphere, Computing 78, 1-15 , 2006
+
+ [2] Kunis, S. and Potts, D., Fast spherical Fourier algorithms, J. Comput.
+ Appl. Math. 161, 75-98, 2003
+
+
+ Feedback
+ --------
+ If you have comments, questions, or suggestions regarding NFFT, don't
+ hesitate to contact us. For more information, news and updates see the NFFT
+ website at
+
+ http://www.tu-chemnitz.de/~potts/nfft/
diff --git a/applications/fastsumS2/doxygen.h b/applications/fastsumS2/doxygen.h
new file mode 100644
index 0000000..be3c7e2
--- /dev/null
+++ b/applications/fastsumS2/doxygen.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */
+
+/**
+ * \defgroup applications_fastsumS2 Fast summation of radial functions on the sphere
+ * \ingroup applications
+ */
diff --git a/applications/fastsumS2/example.in b/applications/fastsumS2/example.in
new file mode 100644
index 0000000..10a0414
--- /dev/null
+++ b/applications/fastsumS2/example.in
@@ -0,0 +1,240 @@
+testcases=3
+nfsft=1
+nfft=0
+fpt=1
+threshold=1.000000e+03
+kernel=0
+parameter_sets=1
+parameters=1
+0.800000
+bandwidths=64
+4
+8
+12
+16
+20
+24
+28
+32
+36
+40
+44
+48
+52
+56
+60
+64
+68
+72
+76
+80
+84
+88
+92
+96
+100
+104
+108
+112
+116
+120
+124
+128
+132
+136
+140
+144
+148
+152
+156
+160
+164
+168
+172
+176
+180
+184
+188
+192
+196
+200
+204
+208
+212
+216
+220
+224
+228
+232
+236
+240
+244
+248
+252
+256
+node_sets=1
+L=1000
+D=1000
+compare=1
+precomputed=0
+repetitions=1
+nfsft=1
+nfft=1
+cutoff=3
+fpt=1
+threshold=1.000000e+03
+kernel=0
+parameter_sets=1
+parameters=1
+0.800000
+bandwidths=64
+4
+8
+12
+16
+20
+24
+28
+32
+36
+40
+44
+48
+52
+56
+60
+64
+68
+72
+76
+80
+84
+88
+92
+96
+100
+104
+108
+112
+116
+120
+124
+128
+132
+136
+140
+144
+148
+152
+156
+160
+164
+168
+172
+176
+180
+184
+188
+192
+196
+200
+204
+208
+212
+216
+220
+224
+228
+232
+236
+240
+244
+248
+252
+256
+node_sets=1
+L=1000
+D=1000
+compare=1
+precomputed=0
+repetitions=1
+nfsft=1
+nfft=1
+cutoff=6
+fpt=1
+threshold=1.000000e+03
+kernel=0
+parameter_sets=1
+parameters=1
+0.800000
+bandwidths=64
+4
+8
+12
+16
+20
+24
+28
+32
+36
+40
+44
+48
+52
+56
+60
+64
+68
+72
+76
+80
+84
+88
+92
+96
+100
+104
+108
+112
+116
+120
+124
+128
+132
+136
+140
+144
+148
+152
+156
+160
+164
+168
+172
+176
+180
+184
+188
+192
+196
+200
+204
+208
+212
+216
+220
+224
+228
+232
+236
+240
+244
+248
+252
+256
+node_sets=1
+L=1000
+D=1000
+compare=1
+precomputed=0
+repetitions=1
diff --git a/applications/fastsumS2/example.out b/applications/fastsumS2/example.out
new file mode 100644
index 0000000..fe83d55
--- /dev/null
+++ b/applications/fastsumS2/example.out
@@ -0,0 +1,1584 @@
+3
+1
+0
+1
+1000.000000
+0
+1
+1
+0.800000
+64
+4
+8
+12
+16
+20
+24
+28
+32
+36
+40
+44
+48
+52
+56
+60
+64
+68
+72
+76
+80
+84
+88
+92
+96
+100
+104
+108
+112
+116
+120
+124
+128
+132
+136
+140
+144
+148
+152
+156
+160
+164
+168
+172
+176
+180
+184
+188
+192
+196
+200
+204
+208
+212
+216
+220
+224
+228
+232
+236
+240
+244
+248
+252
+256
+1
+1000
+1000
+1
+0
+1
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.047332e-03
+-1.000000e+00
+1.576067e-02
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+5.450238e-02
+-1.000000e+00
+7.145489e-03
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.053569e-01
+-1.000000e+00
+5.295336e-03
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.765255e-01
+-1.000000e+00
+2.590083e-03
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.840986e-01
+-1.000000e+00
+1.171801e-03
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.880245e-01
+-1.000000e+00
+4.232169e-04
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+5.134875e-01
+-1.000000e+00
+2.067225e-04
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+6.593283e-01
+-1.000000e+00
+8.173716e-05
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+8.628760e-01
+-1.000000e+00
+3.865388e-05
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.073047e+00
+-1.000000e+00
+1.853350e-05
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.285226e+00
+-1.000000e+00
+5.975031e-06
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.514456e+00
+-1.000000e+00
+3.461024e-06
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.714600e+00
+-1.000000e+00
+1.451071e-06
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.044110e+00
+-1.000000e+00
+5.647944e-07
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.320307e+00
+-1.000000e+00
+2.420518e-07
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.570554e+00
+-1.000000e+00
+1.113257e-07
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.194016e+00
+-1.000000e+00
+4.139858e-08
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.211849e+00
+-1.000000e+00
+1.791441e-08
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.545357e+00
+-1.000000e+00
+7.180275e-09
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.927218e+00
+-1.000000e+00
+3.205551e-09
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+4.417985e+00
+-1.000000e+00
+1.607196e-09
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+4.780440e+00
+-1.000000e+00
+6.027812e-10
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+5.210072e+00
+-1.000000e+00
+2.730937e-10
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+5.687245e+00
+-1.000000e+00
+9.956485e-11
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+6.234587e+00
+-1.000000e+00
+3.650232e-11
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+6.775789e+00
+-1.000000e+00
+1.735506e-11
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+7.207870e+00
+-1.000000e+00
+7.175873e-12
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+7.745034e+00
+-1.000000e+00
+2.552043e-12
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+8.369756e+00
+-1.000000e+00
+1.223144e-12
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+8.847885e+00
+-1.000000e+00
+4.934419e-13
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+9.429349e+00
+-1.000000e+00
+1.941885e-13
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.004512e+01
+-1.000000e+00
+9.104275e-14
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.065165e+01
+-1.000000e+00
+3.849784e-14
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.127894e+01
+-1.000000e+00
+1.654996e-14
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.203556e+01
+-1.000000e+00
+6.889145e-15
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.269827e+01
+-1.000000e+00
+2.463302e-15
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.344654e+01
+-1.000000e+00
+1.075163e-15
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.413678e+01
+-1.000000e+00
+6.001767e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.497025e+01
+-1.000000e+00
+6.664539e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.574484e+01
+-1.000000e+00
+5.081251e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.651622e+01
+-1.000000e+00
+5.596748e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.725102e+01
+-1.000000e+00
+5.154897e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.819202e+01
+-1.000000e+00
+5.191758e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.895847e+01
+-1.000000e+00
+5.449481e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+1.985140e+01
+-1.000000e+00
+5.412642e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.084157e+01
+-1.000000e+00
+5.228557e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.194042e+01
+-1.000000e+00
+5.412647e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.303024e+01
+-1.000000e+00
+5.412638e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.368777e+01
+-1.000000e+00
+5.449467e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.463637e+01
+-1.000000e+00
+5.596745e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.523590e+01
+-1.000000e+00
+5.596740e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.634064e+01
+-1.000000e+00
+5.596744e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.724900e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.838764e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+2.941623e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.046437e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.217433e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.287034e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.385329e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.507951e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.613248e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+3.724638e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+4.029788e+01
+-1.000000e+00
+5.523099e-16
+
+1.946635e-01
+-1.000000e+00
+-1.000000e+00
+4.159665e+01
+-1.000000e+00
+5.523099e-16
+
+1
+1
+3
+1
+1000.000000
+0
+1
+1
+0.800000
+64
+4
+8
+12
+16
+20
+24
+28
+32
+36
+40
+44
+48
+52
+56
+60
+64
+68
+72
+76
+80
+84
+88
+92
+96
+100
+104
+108
+112
+116
+120
+124
+128
+132
+136
+140
+144
+148
+152
+156
+160
+164
+168
+172
+176
+180
+184
+188
+192
+196
+200
+204
+208
+212
+216
+220
+224
+228
+232
+236
+240
+244
+248
+252
+256
+1
+1000
+1000
+1
+0
+1
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.058164e-03
+-1.000000e+00
+2.206196e-02
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+4.916940e-04
+-1.000000e+00
+9.230374e-03
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+6.749389e-04
+-1.000000e+00
+4.864291e-03
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+8.122652e-04
+-1.000000e+00
+2.274209e-03
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.344094e-03
+-1.000000e+00
+1.062196e-03
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.875128e-03
+-1.000000e+00
+5.580252e-04
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.285584e-03
+-1.000000e+00
+2.077600e-04
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.904276e-03
+-1.000000e+00
+8.803162e-05
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+5.139147e-03
+-1.000000e+00
+3.748478e-05
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+5.730155e-03
+-1.000000e+00
+1.851213e-05
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+6.591798e-03
+-1.000000e+00
+6.665944e-06
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+7.545517e-03
+-1.000000e+00
+2.975418e-06
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+8.549193e-03
+-1.000000e+00
+1.440584e-06
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+9.308123e-03
+-1.000000e+00
+5.872307e-07
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.009069e-02
+-1.000000e+00
+2.603293e-07
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.134565e-02
+-1.000000e+00
+1.228668e-07
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.156919e-02
+-1.000000e+00
+9.576442e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.221613e-02
+-1.000000e+00
+7.410972e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.560731e-02
+-1.000000e+00
+6.331626e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.638115e-02
+-1.000000e+00
+6.034587e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.947786e-02
+-1.000000e+00
+8.006522e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+3.124964e-02
+-1.000000e+00
+5.849066e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+3.579587e-02
+-1.000000e+00
+6.006391e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+4.662405e-02
+-1.000000e+00
+6.394056e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+4.080721e-02
+-1.000000e+00
+6.404895e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+4.293288e-02
+-1.000000e+00
+8.404899e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+4.483403e-02
+-1.000000e+00
+7.138842e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+4.858419e-02
+-1.000000e+00
+6.475614e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+5.733759e-02
+-1.000000e+00
+5.546687e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+5.257779e-02
+-1.000000e+00
+8.905276e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+6.502895e-02
+-1.000000e+00
+6.703670e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+6.476594e-02
+-1.000000e+00
+7.281137e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.012439e-01
+-1.000000e+00
+8.602497e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.087701e-01
+-1.000000e+00
+5.322486e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.072860e-01
+-1.000000e+00
+7.190318e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.130813e-01
+-1.000000e+00
+6.175638e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.816289e-01
+-1.000000e+00
+5.544125e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.350188e-01
+-1.000000e+00
+6.333313e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.300539e-01
+-1.000000e+00
+5.665348e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.456071e-01
+-1.000000e+00
+6.575343e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.438004e-01
+-1.000000e+00
+6.158477e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.599971e-01
+-1.000000e+00
+7.265016e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.924899e-01
+-1.000000e+00
+5.685559e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.756611e-01
+-1.000000e+00
+7.989629e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.831965e-01
+-1.000000e+00
+7.176792e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+1.987849e-01
+-1.000000e+00
+7.284645e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.130107e-01
+-1.000000e+00
+6.510812e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.211764e-01
+-1.000000e+00
+8.360268e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.186293e-01
+-1.000000e+00
+5.326091e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.508298e-01
+-1.000000e+00
+7.017699e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.675460e-01
+-1.000000e+00
+6.326950e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.450898e-01
+-1.000000e+00
+6.094832e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.961816e-01
+-1.000000e+00
+5.504172e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.485896e-01
+-1.000000e+00
+7.642313e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.592066e-01
+-1.000000e+00
+5.956123e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+2.689671e-01
+-1.000000e+00
+6.318204e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+3.005800e-01
+-1.000000e+00
+5.306546e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+3.204003e-01
+-1.000000e+00
+7.470833e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+4.306144e-01
+-1.000000e+00
+5.091598e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+3.088647e-01
+-1.000000e+00
+6.035399e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+5.040653e-01
+-1.000000e+00
+6.030642e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+3.757050e-01
+-1.000000e+00
+6.749314e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+3.436299e-01
+-1.000000e+00
+5.168785e-08
+
+1.995145e-01
+-1.000000e+00
+-1.000000e+00
+3.934722e-01
+-1.000000e+00
+4.541723e-08
+
+1
+1
+6
+1
+1000.000000
+0
+1
+1
+0.800000
+64
+4
+8
+12
+16
+20
+24
+28
+32
+36
+40
+44
+48
+52
+56
+60
+64
+68
+72
+76
+80
+84
+88
+92
+96
+100
+104
+108
+112
+116
+120
+124
+128
+132
+136
+140
+144
+148
+152
+156
+160
+164
+168
+172
+176
+180
+184
+188
+192
+196
+200
+204
+208
+212
+216
+220
+224
+228
+232
+236
+240
+244
+248
+252
+256
+1
+1000
+1000
+1
+0
+1
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.039949e-03
+-1.000000e+00
+2.014872e-02
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+9.502748e-04
+-1.000000e+00
+8.659336e-03
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.132988e-03
+-1.000000e+00
+5.506680e-03
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.253998e-03
+-1.000000e+00
+2.229810e-03
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.803338e-03
+-1.000000e+00
+1.095621e-03
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.449043e-03
+-1.000000e+00
+4.469697e-04
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.783493e-03
+-1.000000e+00
+2.390019e-04
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+3.634455e-03
+-1.000000e+00
+7.240590e-05
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+5.709544e-03
+-1.000000e+00
+4.524542e-05
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+6.624406e-03
+-1.000000e+00
+1.984394e-05
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+7.271370e-03
+-1.000000e+00
+7.150170e-06
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+8.539940e-03
+-1.000000e+00
+3.311000e-06
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+8.987270e-03
+-1.000000e+00
+1.317728e-06
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.014274e-02
+-1.000000e+00
+5.724193e-07
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.100352e-02
+-1.000000e+00
+2.082067e-07
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.253078e-02
+-1.000000e+00
+8.020459e-08
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.277670e-02
+-1.000000e+00
+4.033054e-08
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.353545e-02
+-1.000000e+00
+1.910061e-08
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.701967e-02
+-1.000000e+00
+8.209719e-09
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.731132e-02
+-1.000000e+00
+3.415467e-09
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.969884e-02
+-1.000000e+00
+1.611355e-09
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+3.248629e-02
+-1.000000e+00
+5.897510e-10
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+3.718490e-02
+-1.000000e+00
+2.275297e-10
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+4.144712e-02
+-1.000000e+00
+1.005764e-10
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+4.078063e-02
+-1.000000e+00
+3.669910e-11
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+4.461497e-02
+-1.000000e+00
+1.799338e-11
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+4.949561e-02
+-1.000000e+00
+7.267821e-12
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+6.140988e-02
+-1.000000e+00
+2.961840e-12
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+6.233617e-02
+-1.000000e+00
+1.899627e-12
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+6.199885e-02
+-1.000000e+00
+4.898336e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+7.246404e-02
+-1.000000e+00
+2.540395e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+8.287569e-02
+-1.000000e+00
+1.419295e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.356708e-01
+-1.000000e+00
+1.077694e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.666573e-01
+-1.000000e+00
+1.166215e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.449886e-01
+-1.000000e+00
+1.040598e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.602449e-01
+-1.000000e+00
+1.045409e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.615239e-01
+-1.000000e+00
+9.447209e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.784918e-01
+-1.000000e+00
+1.110954e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.523209e-01
+-1.000000e+00
+8.527835e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.713088e-01
+-1.000000e+00
+9.703811e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.399460e-01
+-1.000000e+00
+1.111198e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.662828e-01
+-1.000000e+00
+7.758726e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.028379e-01
+-1.000000e+00
+9.356213e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.902028e-01
+-1.000000e+00
+9.564702e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+1.946892e-01
+-1.000000e+00
+1.116358e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.118433e-01
+-1.000000e+00
+1.074939e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.307004e-01
+-1.000000e+00
+8.718194e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.337525e-01
+-1.000000e+00
+9.001991e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.218771e-01
+-1.000000e+00
+7.784874e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.530055e-01
+-1.000000e+00
+1.154430e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.583145e-01
+-1.000000e+00
+8.167511e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.524221e-01
+-1.000000e+00
+9.630596e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+3.072517e-01
+-1.000000e+00
+9.168991e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.624353e-01
+-1.000000e+00
+9.037553e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.775889e-01
+-1.000000e+00
+9.259290e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+2.816421e-01
+-1.000000e+00
+9.142843e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+3.490324e-01
+-1.000000e+00
+7.655178e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+3.635086e-01
+-1.000000e+00
+1.163181e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+4.702578e-01
+-1.000000e+00
+8.073900e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+3.472053e-01
+-1.000000e+00
+8.085754e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+5.798098e-01
+-1.000000e+00
+8.861487e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+7.018026e-01
+-1.000000e+00
+8.376872e-14
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+4.815139e-01
+-1.000000e+00
+1.069780e-13
+
+1.911687e-01
+-1.000000e+00
+-1.000000e+00
+4.015164e-01
+-1.000000e+00
+9.420015e-14
+
diff --git a/applications/fastsumS2/fastsumS2.c b/applications/fastsumS2/fastsumS2.c
new file mode 100644
index 0000000..c898816
--- /dev/null
+++ b/applications/fastsumS2/fastsumS2.c
@@ -0,0 +1,912 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: fastsumS2.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \defgroup applications_fastsumS2_test fastsumS2_matlab
+ * \ingroup applications_fastsumS2
+ * \{
+ */
+#include "config.h"
+
+/* standard headers */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <float.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+/* NFFT3 header */
+#include "nfft3.h"
+
+/* NFFT3 utilities */
+#include "nfft3util.h"
+#include "infft.h"
+
+/* Fourier-Legendre coefficients for Abel-Poisson kernel */
+#define SYMBOL_ABEL_POISSON(k,h) (pow(h,k))
+
+/* Fourier-Legendre coefficients for singularity kernel */
+#define SYMBOL_SINGULARITY(k,h) ((2.0/(2*k+1))*pow(h,k))
+
+/* Flags for the different kernel functions */
+
+/** Abel-Poisson kernel */
+#define KT_ABEL_POISSON (0)
+/** Singularity kernel */
+#define KT_SINGULARITY (1)
+/** Locally supported kernel */
+#define KT_LOC_SUPP (2)
+/** Gaussian kernel */
+#define KT_GAUSSIAN (3)
+
+/** Enumeration type for yes/no/both-type parameters */
+enum pvalue {NO = 0, YES = 1, BOTH = 2};
+
+/**
+ * Computes the \f$\mathbb{R}^3\f$ standard inner product between two vectors
+ * on the unit sphere \f$\mathbb{S}^2\f$ given in spherical coordinates.
+ *
+ * \arg phi1 The angle \f$\varphi_1 \in [-\pi,\pi)\f$ of the first vector
+ * \arg theta1 The angle \f$\vartheta_1 \in [0,\pi]\f$ of the first vector
+ * \arg phi2 The angle \f$\varphi_2 \in [-\pi,\pi)\f$ of the second vector
+ * \arg theta2 The angle \f$\vartheta_2 \in [0,\pi]\f$ of the second vector
+ *
+ * \return The inner product \f$\cos \vartheta_1 \cos \vartheta_2 +
+ * \sin \vartheta_1 \sin(\vartheta_2 \cos(\varphi_1 - \varphi_2)\f$
+ *
+ * \author Jens Keiner
+ */
+static inline double innerProduct(const double phi1, const double theta1,
+ const double phi2, const double theta2)
+{
+ double pi2theta1 = PI2*theta1, pi2theta2 = PI2*theta2;
+ return (cos(pi2theta1)*cos(pi2theta2)
+ + sin(pi2theta1)*sin(pi2theta2)*cos(PI2*(phi1-phi2)));
+}
+
+/**
+ * Evaluates the Poisson kernel \f$Q_h: [-1,1] \rightarrow \mathbb{R}\f$ at a
+ * node \f$x \in [-1,1]\f$.
+ *
+ * \arg x The node \f$x \in [-1,1]\f$
+ * \arg h The parameter \f$h \in (0,1)\f$
+ *
+ * \return The value of the Poisson kernel \f$Q_h(x)\f$ at the node \f$x\f$
+ *
+ * \author Jens Keiner
+ */
+static inline double poissonKernel(const double x, const double h)
+{
+ return (1.0/(PI4))*((1.0-h)*(1.0+h))/pow(sqrt(1.0-2.0*h*x+h*h),3.0);
+}
+
+/**
+ * Evaluates the singularity kernel \f$S_h: [-1,1] \rightarrow \mathbb{R}\f$ at
+ * a node \f$x \in [-1,1]\f$.
+ *
+ * \arg x The node \f$x \in [-1,1]\f$
+ * \arg h The parameter \f$h \in (0,1)\f$
+ *
+ * \return The value of the Poisson kernel \f$S_h(x)\f$ at the node \f$x\f$
+ *
+ * \author Jens Keiner
+ */
+static inline double singularityKernel(const double x, const double h)
+{
+ return (1.0/(PI2))/sqrt(1.0-2.0*h*x+h*h);
+}
+
+/**
+ * Evaluates the locally supported kernel \f$L_{h,\lambda}: [-1,1] \rightarrow
+ * \mathbb{R}\f$ at a node \f$x \in [-1,1]\f$.
+ *
+ * \arg x The node \f$x \in [-1,1]\f$
+ * \arg h The parameter \f$h \in (0,1)\f$
+ * \arg lambda The parameter \f$\lambda \in \mathbb{N}_0\f$
+ *
+ * \return The value of the locally supported kernel \f$L_{h,\lambda}(x)\f$ at
+ * the node \f$x\f$
+ *
+ * \author Jens Keiner
+ */
+static inline double locallySupportedKernel(const double x, const double h,
+ const double lambda)
+{
+ return (x<=h)?(0.0):(pow((x-h),lambda));
+}
+
+/**
+ * Evaluates the spherical Gaussian kernel \f$G_\sigma: [-1,1] \rightarrow
+ * \mathbb{R}\f$ at a node \f$x \in [-1,1]\f$.
+ *
+ * \arg x The node \f$x \in [-1,1]\f$
+ * \arg sigma The parameter \f$\sigma \in \mathbb{R}_+\f$
+ *
+ * \return The value of the pherical Gaussian kernel \f$G_\sigma(x)\f$ at the
+ * node \f$x\f$
+ *
+ * \author Jens Keiner
+ */
+static inline double gaussianKernel(const double x, const double sigma)
+{
+ return exp(2.0*sigma*(x-1.0));
+}
+
+/**
+ * The main program.
+ *
+ * \param argc The number of arguments
+ * \param argv An array containing the arguments as C-strings
+ *
+ * \return Exit code
+ *
+ * \author Jens Keiner
+ */
+int main (int argc, char **argv)
+{
+ double **p; /* The array containing the parameter sets *
+ * for the kernel functions */
+ int *m; /* The array containing the cut-off degrees M */
+ int **ld; /* The array containing the numbers of source *
+ * and target nodes, L and D */
+ int ip; /* Index variable for p */
+ int im; /* Index variable for m */
+ int ild; /* Index variable for l */
+ int ipp; /* Index for kernel parameters */
+ int ip_max; /* The maximum index for p */
+ int im_max; /* The maximum index for m */
+ int ild_max; /* The maximum index for l */
+ int ipp_max; /* The maximum index for ip */
+ int tc_max; /* The number of testcases */
+ int m_max; /* The maximum cut-off degree M for the *
+ * current dataset */
+ int l_max; /* The maximum number of source nodes L for *
+ * the current dataset */
+ int d_max; /* The maximum number of target nodes D for *
+ * the current dataset */
+ long ld_max_prec; /* The maximum number of source and target *
+ * nodes for precomputation multiplied */
+ long l_max_prec; /* The maximum number of source nodes for *
+ * precomputation */
+ int tc; /* Index variable for testcases */
+ int kt; /* The kernel function */
+ int cutoff; /* The current NFFT cut-off parameter */
+ double threshold; /* The current NFSFT threshold parameter */
+ double t_d; /* Time for direct algorithm in seconds */
+ double t_dp; /* Time for direct algorithm with *
+ precomputation in seconds */
+ double t_fd; /* Time for fast direct algorithm in seconds */
+ double t_f; /* Time for fast algorithm in seconds */
+ double temp; /* */
+ double err_f; /* Error E_infty for fast algorithm */
+ double err_fd; /* Error E_\infty for fast direct algorithm */
+ ticks t0, t1; /* */
+ int precompute = NO; /* */
+ fftw_complex *ptr; /* */
+ double* steed; /* */
+ fftw_complex *b; /* The weights (b_l)_{l=0}^{L-1} */
+ fftw_complex *f_hat; /* The spherical Fourier coefficients */
+ fftw_complex *a; /* The Fourier-Legendre coefficients */
+ double *xi; /* Target nodes */
+ double *eta; /* Source nodes */
+ fftw_complex *f_m; /* Approximate function values */
+ fftw_complex *f; /* Exact function values */
+ fftw_complex *prec = NULL; /* */
+ nfsft_plan plan; /* NFSFT plan */
+ nfsft_plan plan_adjoint; /* adjoint NFSFT plan */
+ int i; /* */
+ int k; /* */
+ int n; /* */
+ int d; /* */
+ int l; /* */
+ int use_nfsft; /* */
+ int use_nfft; /* */
+ int use_fpt; /* */
+ int rinc; /* */
+ double constant; /* */
+
+ /* Read the number of testcases. */
+ fscanf(stdin,"testcases=%d\n",&tc_max);
+ fprintf(stdout,"%d\n",tc_max);
+
+ /* Process each testcase. */
+ for (tc = 0; tc < tc_max; tc++)
+ {
+ /* Check if the fast transform shall be used. */
+ fscanf(stdin,"nfsft=%d\n",&use_nfsft);
+ fprintf(stdout,"%d\n",use_nfsft);
+ if (use_nfsft != NO)
+ {
+ /* Check if the NFFT shall be used. */
+ fscanf(stdin,"nfft=%d\n",&use_nfft);
+ fprintf(stdout,"%d\n",use_nfft);
+ if (use_nfft != NO)
+ {
+ /* Read the cut-off parameter. */
+ fscanf(stdin,"cutoff=%d\n",&cutoff);
+ fprintf(stdout,"%d\n",cutoff);
+ }
+ else
+ {
+ /* TODO remove this */
+ /* Initialize unused variable with dummy value. */
+ cutoff = 1;
+ }
+ /* Check if the fast polynomial transform shall be used. */
+ fscanf(stdin,"fpt=%d\n",&use_fpt);
+ fprintf(stdout,"%d\n",use_fpt);
+ /* Read the NFSFT threshold parameter. */
+ fscanf(stdin,"threshold=%lf\n",&threshold);
+ fprintf(stdout,"%lf\n",threshold);
+ }
+ else
+ {
+ /* TODO remove this */
+ /* Set dummy values. */
+ cutoff = 3;
+ threshold = 1000000000000.0;
+ }
+
+ /* Initialize bandwidth bound. */
+ m_max = 0;
+ /* Initialize source nodes bound. */
+ l_max = 0;
+ /* Initialize target nodes bound. */
+ d_max = 0;
+ /* Initialize source nodes bound for precomputation. */
+ l_max_prec = 0;
+ /* Initialize source and target nodes bound for precomputation. */
+ ld_max_prec = 0;
+
+ /* Read the kernel type. This is one of KT_ABEL_POISSON, KT_SINGULARITY,
+ * KT_LOC_SUPP and KT_GAUSSIAN. */
+ fscanf(stdin,"kernel=%d\n",&kt);
+ fprintf(stdout,"%d\n",kt);
+
+ /* Read the number of parameter sets. */
+ fscanf(stdin,"parameter_sets=%d\n",&ip_max);
+ fprintf(stdout,"%d\n",ip_max);
+
+ /* Allocate memory for pointers to parameter sets. */
+ p = (double**) nfft_malloc(ip_max*sizeof(double*));
+
+ /* We now read in the parameter sets. */
+
+ /* Read number of parameters. */
+ fscanf(stdin,"parameters=%d\n",&ipp_max);
+ fprintf(stdout,"%d\n",ipp_max);
+
+ for (ip = 0; ip < ip_max; ip++)
+ {
+ /* Allocate memory for the parameters. */
+ p[ip] = (double*) nfft_malloc(ipp_max*sizeof(double));
+
+ /* Read the parameters. */
+ for (ipp = 0; ipp < ipp_max; ipp++)
+ {
+ /* Read the next parameter. */
+ fscanf(stdin,"%lf\n",&p[ip][ipp]);
+ fprintf(stdout,"%lf\n",p[ip][ipp]);
+ }
+ }
+
+ /* Read the number of cut-off degrees. */
+ fscanf(stdin,"bandwidths=%d\n",&im_max);
+ fprintf(stdout,"%d\n",im_max);
+ m = (int*) nfft_malloc(im_max*sizeof(int));
+
+ /* Read the cut-off degrees. */
+ for (im = 0; im < im_max; im++)
+ {
+ /* Read cut-off degree. */
+ fscanf(stdin,"%d\n",&m[im]);
+ fprintf(stdout,"%d\n",m[im]);
+ m_max = NFFT_MAX(m_max,m[im]);
+ }
+
+ /* Read number of node specifications. */
+ fscanf(stdin,"node_sets=%d\n",&ild_max);
+ fprintf(stdout,"%d\n",ild_max);
+ ld = (int**) nfft_malloc(ild_max*sizeof(int*));
+
+ /* Read the run specification. */
+ for (ild = 0; ild < ild_max; ild++)
+ {
+ /* Allocate memory for the run parameters. */
+ ld[ild] = (int*) nfft_malloc(5*sizeof(int));
+
+ /* Read number of source nodes. */
+ fscanf(stdin,"L=%d ",&ld[ild][0]);
+ fprintf(stdout,"%d\n",ld[ild][0]);
+ l_max = NFFT_MAX(l_max,ld[ild][0]);
+
+ /* Read number of target nodes. */
+ fscanf(stdin,"D=%d ",&ld[ild][1]);
+ fprintf(stdout,"%d\n",ld[ild][1]);
+ d_max = NFFT_MAX(d_max,ld[ild][1]);
+
+ /* Determine whether direct and fast algorithm shall be compared. */
+ fscanf(stdin,"compare=%d ",&ld[ild][2]);
+ fprintf(stdout,"%d\n",ld[ild][2]);
+
+ /* Check if precomputation for the direct algorithm is used. */
+ if (ld[ild][2] == YES)
+ {
+ /* Read whether the precomputed version shall also be used. */
+ fscanf(stdin,"precomputed=%d\n",&ld[ild][3]);
+ fprintf(stdout,"%d\n",ld[ild][3]);
+
+ /* Read the number of repetitions over which measurements are
+ * averaged. */
+ fscanf(stdin,"repetitions=%d\n",&ld[ild][4]);
+ fprintf(stdout,"%d\n",ld[ild][4]);
+
+ /* Update ld_max_prec and l_max_prec. */
+ if (ld[ild][3] == YES)
+ {
+ /* Update ld_max_prec. */
+ ld_max_prec = NFFT_MAX(ld_max_prec,ld[ild][0]*ld[ild][1]);
+ /* Update l_max_prec. */
+ l_max_prec = NFFT_MAX(l_max_prec,ld[ild][0]);
+ /* Turn on the precomputation for the direct algorithm. */
+ precompute = YES;
+ }
+ }
+ else
+ {
+ /* Set default value for the number of repetitions. */
+ ld[ild][4] = 1;
+ }
+ }
+
+ /* Allocate memory for data structures. */
+ b = (fftw_complex*) nfft_malloc(l_max*sizeof(fftw_complex));
+ eta = (double*) nfft_malloc(2*l_max*sizeof(double));
+ f_hat = (fftw_complex*) nfft_malloc(NFSFT_F_HAT_SIZE(m_max)*sizeof(fftw_complex));
+ a = (fftw_complex*) nfft_malloc((m_max+1)*sizeof(fftw_complex));
+ xi = (double*) nfft_malloc(2*d_max*sizeof(double));
+ f_m = (fftw_complex*) nfft_malloc(d_max*sizeof(fftw_complex));
+ f = (fftw_complex*) nfft_malloc(d_max*sizeof(fftw_complex));
+
+ /* Allocate memory for precomputed data. */
+ if (precompute == YES)
+ {
+ prec = (fftw_complex*) nfft_malloc(ld_max_prec*sizeof(fftw_complex));
+ }
+
+ /* Generate random source nodes and weights. */
+ for (l = 0; l < l_max; l++)
+ {
+ b[l] = (((double)rand())/RAND_MAX) - 0.5;
+ eta[2*l] = (((double)rand())/RAND_MAX) - 0.5;
+ eta[2*l+1] = acos(2.0*(((double)rand())/RAND_MAX) - 1.0)/(PI2);
+ }
+
+ /* Generate random target nodes. */
+ for (d = 0; d < d_max; d++)
+ {
+ xi[2*d] = (((double)rand())/RAND_MAX) - 0.5;
+ xi[2*d+1] = acos(2.0*(((double)rand())/RAND_MAX) - 1.0)/(PI2);
+ }
+
+ /* Do precomputation. */
+ nfsft_precompute(m_max,threshold,
+ ((use_nfsft==NO)?(NFSFT_NO_FAST_ALGORITHM):(0U/*NFSFT_NO_DIRECT_ALGORITHM*/)), 0U);
+
+ /* Process all parameter sets. */
+ for (ip = 0; ip < ip_max; ip++)
+ {
+ /* Compute kernel coeffcients up to the maximum cut-off degree m_max. */
+ switch (kt)
+ {
+ case KT_ABEL_POISSON:
+ /* Compute Fourier-Legendre coefficients for the Poisson kernel. */
+ for (k = 0; k <= m_max; k++)
+ a[k] = SYMBOL_ABEL_POISSON(k,p[ip][0]);
+ break;
+
+ case KT_SINGULARITY:
+ /* Compute Fourier-Legendre coefficients for the singularity
+ * kernel. */
+ for (k = 0; k <= m_max; k++)
+ a[k] = SYMBOL_SINGULARITY(k,p[ip][0]);
+ break;
+
+ case KT_LOC_SUPP:
+ /* Compute Fourier-Legendre coefficients for the locally supported
+ * kernel. */
+ a[0] = 1.0;
+ if (1 <= m_max)
+ a[1] = ((p[ip][1]+1+p[ip][0])/(p[ip][1]+2.0))*a[0];
+ for (k = 2; k <= m_max; k++)
+ a[k] = (1.0/(k+p[ip][1]+1))*((2*k-1)*p[ip][0]*a[k-1] -
+ (k-p[ip][1]-2)*a[k-2]);
+ break;
+
+ case KT_GAUSSIAN:
+ /* Fourier-Legendre coefficients */
+ steed = (double*) nfft_malloc((m_max+1)*sizeof(double));
+ nfft_smbi(2.0*p[ip][0],0.5,m_max+1,2,steed);
+ for (k = 0; k <= m_max; k++)
+ a[k] = PI2*(sqrt(PI/p[ip][0]))*steed[k];
+
+ nfft_free(steed);
+ break;
+ }
+
+ /* Normalize Fourier-Legendre coefficients. */
+ for (k = 0; k <= m_max; k++)
+ a[k] *= (2*k+1)/(PI4);
+
+ /* Process all node sets. */
+ for (ild = 0; ild < ild_max; ild++)
+ {
+ /* Check if the fast algorithm shall be used. */
+ if (ld[ild][2] != NO)
+ {
+ /* Check if the direct algorithm with precomputation should be
+ * tested. */
+ if (ld[ild][3] != NO)
+ {
+ /* Get pointer to start of data. */
+ ptr = prec;
+ /* Calculate increment from one row to the next. */
+ rinc = l_max_prec-ld[ild][0];
+
+ /* Process al target nodes. */
+ for (d = 0; d < ld[ild][1]; d++)
+ {
+ /* Process all source nodes. */
+ for (l = 0; l < ld[ild][0]; l++)
+ {
+ /* Compute inner product between current source and target
+ * node. */
+ temp = innerProduct(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);
+
+ /* Switch by the kernel type. */
+ switch (kt)
+ {
+ case KT_ABEL_POISSON:
+ /* Evaluate the Poisson kernel for the current value. */
+ *ptr++ = poissonKernel(temp,p[ip][0]);
+ break;
+
+ case KT_SINGULARITY:
+ /* Evaluate the singularity kernel for the current
+ * value. */
+ *ptr++ = singularityKernel(temp,p[ip][0]);
+ break;
+
+ case KT_LOC_SUPP:
+ /* Evaluate the localized kernel for the current
+ * value. */
+ *ptr++ = locallySupportedKernel(temp,p[ip][0],p[ip][1]);
+ break;
+
+ case KT_GAUSSIAN:
+ /* Evaluate the spherical Gaussian kernel for the current
+ * value. */
+ *ptr++ = gaussianKernel(temp,p[ip][0]);
+ break;
+ }
+ }
+ /* Increment pointer for next row. */
+ ptr += rinc;
+ }
+
+ /* Initialize cumulative time variable. */
+ t_dp = 0.0;
+
+ /* Initialize time measurement. */
+ t0 = getticks();
+
+ /* Cycle through all runs. */
+ for (i = 0; i < ld[ild][4]; i++)
+ {
+
+ /* Reset pointer to start of precomputed data. */
+ ptr = prec;
+ /* Calculate increment from one row to the next. */
+ rinc = l_max_prec-ld[ild][0];
+
+ /* Check if the localized kernel is used. */
+ if (kt == KT_LOC_SUPP)
+ {
+ /* Perform final summation */
+
+ /* Calculate the multiplicative constant. */
+ constant = ((p[ip][1]+1)/(PI2*pow(1-p[ip][0],p[ip][1]+1)));
+
+ /* Process all target nodes. */
+ for (d = 0; d < ld[ild][1]; d++)
+ {
+ /* Initialize function value. */
+ f[d] = 0.0;
+
+ /* Process all source nodes. */
+ for (l = 0; l < ld[ild][0]; l++)
+ f[d] += b[l]*(*ptr++);
+
+ /* Multiply with the constant. */
+ f[d] *= constant;
+
+ /* Proceed to next row. */
+ ptr += rinc;
+ }
+ }
+ else
+ {
+ /* Process all target nodes. */
+ for (d = 0; d < ld[ild][1]; d++)
+ {
+ /* Initialize function value. */
+ f[d] = 0.0;
+
+ /* Process all source nodes. */
+ for (l = 0; l < ld[ild][0]; l++)
+ f[d] += b[l]*(*ptr++);
+
+ /* Proceed to next row. */
+ ptr += rinc;
+ }
+ }
+ }
+
+ /* Calculate the time needed. */
+ t1 = getticks();
+ t_dp = nfft_elapsed_seconds(t1,t0);
+
+ /* Calculate average time needed. */
+ t_dp = t_dp/((double)ld[ild][4]);
+ }
+ else
+ {
+ /* Initialize cumulative time variable with dummy value. */
+ t_dp = -1.0;
+ }
+
+ /* Initialize cumulative time variable. */
+ t_d = 0.0;
+
+ /* Initialize time measurement. */
+ t0 = getticks();
+
+ /* Cycle through all runs. */
+ for (i = 0; i < ld[ild][4]; i++)
+ {
+ /* Switch by the kernel type. */
+ switch (kt)
+ {
+ case KT_ABEL_POISSON:
+
+ /* Process all target nodes. */
+ for (d = 0; d < ld[ild][1]; d++)
+ {
+ /* Initialize function value. */
+ f[d] = 0.0;
+
+ /* Process all source nodes. */
+ for (l = 0; l < ld[ild][0]; l++)
+ {
+ /* Compute the inner product for the current source and
+ * target nodes. */
+ temp = innerProduct(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);
+
+ /* Evaluate the Poisson kernel for the current value and add
+ * to the result. */
+ f[d] += b[l]*poissonKernel(temp,p[ip][0]);
+ }
+ }
+ break;
+
+ case KT_SINGULARITY:
+ /* Process all target nodes. */
+ for (d = 0; d < ld[ild][1]; d++)
+ {
+ /* Initialize function value. */
+ f[d] = 0.0;
+
+ /* Process all source nodes. */
+ for (l = 0; l < ld[ild][0]; l++)
+ {
+ /* Compute the inner product for the current source and
+ * target nodes. */
+ temp = innerProduct(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);
+
+ /* Evaluate the Poisson kernel for the current value and add
+ * to the result. */
+ f[d] += b[l]*singularityKernel(temp,p[ip][0]);
+ }
+ }
+ break;
+
+ case KT_LOC_SUPP:
+ /* Calculate the multiplicative constant. */
+ constant = ((p[ip][1]+1)/(PI2*pow(1-p[ip][0],p[ip][1]+1)));
+
+ /* Process all target nodes. */
+ for (d = 0; d < ld[ild][1]; d++)
+ {
+ /* Initialize function value. */
+ f[d] = 0.0;
+
+ /* Process all source nodes. */
+ for (l = 0; l < ld[ild][0]; l++)
+ {
+ /* Compute the inner product for the current source and
+ * target nodes. */
+ temp = innerProduct(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);
+
+ /* Evaluate the Poisson kernel for the current value and add
+ * to the result. */
+ f[d] += b[l]*locallySupportedKernel(temp,p[ip][0],p[ip][1]);
+ }
+
+ /* Multiply result with constant. */
+ f[d] *= constant;
+ }
+ break;
+
+ case KT_GAUSSIAN:
+ /* Process all target nodes. */
+ for (d = 0; d < ld[ild][1]; d++)
+ {
+ /* Initialize function value. */
+ f[d] = 0.0;
+
+ /* Process all source nodes. */
+ for (l = 0; l < ld[ild][0]; l++)
+ {
+ /* Compute the inner product for the current source and
+ * target nodes. */
+ temp = innerProduct(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);
+ /* Evaluate the Poisson kernel for the current value and add
+ * to the result. */
+ f[d] += b[l]*gaussianKernel(temp,p[ip][0]);
+ }
+ }
+ break;
+ }
+ }
+
+ /* Calculate and add the time needed. */
+ t1 = getticks();
+ t_d = nfft_elapsed_seconds(t1,t0);
+ /* Calculate average time needed. */
+ t_d = t_d/((double)ld[ild][4]);
+ }
+ else
+ {
+ /* Initialize cumulative time variable with dummy value. */
+ t_d = -1.0;
+ t_dp = -1.0;
+ }
+
+ /* Initialize error and cumulative time variables for the fast
+ * algorithm. */
+ err_fd = -1.0;
+ err_f = -1.0;
+ t_fd = -1.0;
+ t_f = -1.0;
+
+ /* Process all cut-off bandwidths. */
+ for (im = 0; im < im_max; im++)
+ {
+ /* Init transform plans. */
+ nfsft_init_guru(&plan_adjoint, m[im],ld[ild][0],
+ ((use_nfft!=0)?(0U):(NFSFT_USE_NDFT)) |
+ ((use_fpt!=0)?(0U):(NFSFT_USE_DPT)),
+ PRE_PHI_HUT | PRE_PSI | FFTW_INIT |
+ FFT_OUT_OF_PLACE, cutoff);
+ nfsft_init_guru(&plan,m[im],ld[ild][1],
+ ((use_nfft!=0)?(0U):(NFSFT_USE_NDFT)) |
+ ((use_fpt!=0)?(0U):(NFSFT_USE_DPT)),
+ PRE_PHI_HUT | PRE_PSI | FFTW_INIT |
+ FFT_OUT_OF_PLACE,
+ cutoff);
+ plan_adjoint.f_hat = f_hat;
+ plan_adjoint.x = eta;
+ plan_adjoint.f = b;
+ plan.f_hat = f_hat;
+ plan.x = xi;
+ plan.f = f_m;
+ nfsft_precompute_x(&plan_adjoint);
+ nfsft_precompute_x(&plan);
+
+ /* Check if direct algorithm shall also be tested. */
+ if (use_nfsft == BOTH)
+ {
+ /* Initialize cumulative time variable. */
+ t_fd = 0.0;
+
+ /* Initialize time measurement. */
+ t0 = getticks();
+
+ /* Cycle through all runs. */
+ for (i = 0; i < ld[ild][4]; i++)
+ {
+
+ /* Execute adjoint direct NDSFT transformation. */
+ nfsft_adjoint_direct(&plan_adjoint);
+
+ /* Multiplication with the Fourier-Legendre coefficients. */
+ for (k = 0; k <= m[im]; k++)
+ for (n = -k; n <= k; n++)
+ f_hat[NFSFT_INDEX(k,n,&plan_adjoint)] *= a[k];
+
+ /* Execute direct NDSFT transformation. */
+ nfsft_trafo_direct(&plan);
+
+ }
+
+ /* Calculate and add the time needed. */
+ t1 = getticks();
+ t_fd = nfft_elapsed_seconds(t1,t0);
+
+ /* Calculate average time needed. */
+ t_fd = t_fd/((double)ld[ild][4]);
+
+ /* Check if error E_infty should be computed. */
+ if (ld[ild][2] != NO)
+ {
+ /* Compute the error E_infinity. */
+ err_fd = X(error_l_infty_1_complex)(f, f_m, ld[ild][1], b,
+ ld[ild][0]);
+ }
+ }
+
+ /* Check if the fast NFSFT algorithm shall also be tested. */
+ if (use_nfsft != NO)
+ {
+ /* Initialize cumulative time variable for the NFSFT algorithm. */
+ t_f = 0.0;
+ }
+ else
+ {
+ /* Initialize cumulative time variable for the direct NDSFT
+ * algorithm. */
+ t_fd = 0.0;
+ }
+
+ /* Initialize time measurement. */
+ t0 = getticks();
+
+ /* Cycle through all runs. */
+ for (i = 0; i < ld[ild][4]; i++)
+ {
+ /* Check if the fast NFSFT algorithm shall also be tested. */
+ if (use_nfsft != NO)
+ {
+ /* Execute the adjoint NFSFT transformation. */
+ nfsft_adjoint(&plan_adjoint);
+ }
+ else
+ {
+ /* Execute the adjoint direct NDSFT transformation. */
+ nfsft_adjoint_direct(&plan_adjoint);
+ }
+
+ /* Multiplication with the Fourier-Legendre coefficients. */
+ for (k = 0; k <= m[im]; k++)
+ for (n = -k; n <= k; n++)
+ f_hat[NFSFT_INDEX(k,n,&plan_adjoint)] *= a[k];
+
+ /* Check if the fast NFSFT algorithm shall also be tested. */
+ if (use_nfsft != NO)
+ {
+ /* Execute the NFSFT transformation. */
+ nfsft_trafo(&plan);
+ }
+ else
+ {
+ /* Execute the NDSFT transformation. */
+ nfsft_trafo_direct(&plan);
+ }
+ }
+
+ /* Check if the fast NFSFT algorithm has been used. */
+ t1 = getticks();
+
+ if (use_nfsft != NO)
+ t_f = nfft_elapsed_seconds(t1,t0);
+ else
+ t_fd = nfft_elapsed_seconds(t1,t0);
+
+ /* Check if the fast NFSFT algorithm has been used. */
+ if (use_nfsft != NO)
+ {
+ /* Calculate average time needed. */
+ t_f = t_f/((double)ld[ild][4]);
+ }
+ else
+ {
+ /* Calculate average time needed. */
+ t_fd = t_fd/((double)ld[ild][4]);
+ }
+
+ /* Check if error E_infty should be computed. */
+ if (ld[ild][2] != NO)
+ {
+ /* Check if the fast NFSFT algorithm has been used. */
+ if (use_nfsft != NO)
+ {
+ /* Compute the error E_infinity. */
+ err_f = X(error_l_infty_1_complex)(f, f_m, ld[ild][1], b,
+ ld[ild][0]);
+ }
+ else
+ {
+ /* Compute the error E_infinity. */
+ err_fd = X(error_l_infty_1_complex)(f, f_m, ld[ild][1], b,
+ ld[ild][0]);
+ }
+ }
+
+ /* Print out the error measurements. */
+ fprintf(stdout,"%e\n%e\n%e\n%e\n%e\n%e\n\n",t_d,t_dp,t_fd,t_f,err_fd,
+ err_f);
+
+ /* Finalize the NFSFT plans */
+ nfsft_finalize(&plan_adjoint);
+ nfsft_finalize(&plan);
+ } /* for (im = 0; im < im_max; im++) - Process all cut-off
+ * bandwidths.*/
+ } /* for (ild = 0; ild < ild_max; ild++) - Process all node sets. */
+ } /* for (ip = 0; ip < ip_max; ip++) - Process all parameter sets. */
+
+ /* Delete precomputed data. */
+ nfsft_forget();
+
+ /* Check if memory for precomputed data of the matrix K has been
+ * allocated. */
+ if (precompute == YES)
+ {
+ /* Free memory for precomputed matrix K. */
+ nfft_free(prec);
+ }
+ /* Free data arrays. */
+ nfft_free(f);
+ nfft_free(f_m);
+ nfft_free(xi);
+ nfft_free(eta);
+ nfft_free(a);
+ nfft_free(f_hat);
+ nfft_free(b);
+
+ /* Free memory for node sets. */
+ for (ild = 0; ild < ild_max; ild++)
+ nfft_free(ld[ild]);
+ nfft_free(ld);
+
+ /* Free memory for cut-off bandwidths. */
+ nfft_free(m);
+
+ /* Free memory for parameter sets. */
+ for (ip = 0; ip < ip_max; ip++)
+ nfft_free(p[ip]);
+ nfft_free(p);
+ } /* for (tc = 0; tc < tc_max; tc++) - Process each testcase. */
+
+ /* Return exit code for successful run. */
+ return EXIT_SUCCESS;
+}
+/* \} */
diff --git a/applications/fastsumS2/fastsumS2.m b/applications/fastsumS2/fastsumS2.m
new file mode 100644
index 0000000..0c435f3
--- /dev/null
+++ b/applications/fastsumS2/fastsumS2.m
@@ -0,0 +1,299 @@
+function fastsumS2()
+%FASTSUMS2
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: fastsumS2.m 3784 2012-06-06 20:30:39Z keiner $
+
+% The input file's name for fastsumS2.c
+infilename = 'data.in';
+% The output file name.
+outfilename = 'data.out';
+% The name of the fastsumS2.c executable
+programname = 'fastsumS2';
+% The name of the file to write the time measurements table to.
+texfilename = 'table.tex';
+
+% Create the menu
+selection = menu(...
+ ['fastsumS2 - Fast summation of radial functions on the sphere'],...
+ 'Generate Figure 5.1 (a)','Generate Figure 5.1 (b)',...
+ 'Generate Figure 5.1 (c)','Generate Figure 5.1 (d)',...
+ 'Generate Table 5.1')
+
+% Open the file for the input to fastsumS2.c
+file = fopen(infilename,'w');
+
+% Check if the error plots are to be generated
+if (selection > 0 && selection <= 4)
+
+ % Write the number of testcases to the file.
+ fprintf(file,'testcases=3\n');
+
+ % Set the single node set to be used. The values in the vector signify
+ % - 1000 Use 1000 source nodes,
+ % - 1000 use 1000 target nodes,
+ % - 1 Compare with direct evaluation of the sums (1 = Yes, 0 = No),
+ % - 0 Don't use precomputed values for direct evaluation (1 = Yes, 0 = No),
+ % - 1 Do the summation process 1 time.
+ nodes = [1000, 1000, 1, 0, 1];
+
+ % Switch by kernel type.
+ if (selection == 1)
+
+ % Generate figure 5.1 (a)
+
+ % Set the kernel to be the Abel-Poisson kernel.
+ kernel = 0;
+ % Set the parameter h.
+ parameters = [0.8];
+ % Set the cut-off bandwidth
+ m = 4:4:256;
+
+ % Generate the theoretical error bound function from [1].
+ bound = inline(sprintf(['((%d.^(x+1))./(4*pi)).*((2*x+1)./(1-%d)+(2)./',...
+ '((1-%d).^2))'],parameters(1),parameters(1),parameters(1)));
+
+ elseif (selection == 2)
+
+ % Generate figure 5.1 (b)
+
+ % Set the kernel to be the singularity kernel.
+ kernel=1;
+
+ % Set the parameter h.
+ parameters = [0.8];
+
+ % Set the cut-off bandwidth
+ m = 4:4:256;
+
+ % Generate the theoretical error bound function from [1].
+ bound = inline(sprintf(['((%d.^(x+1))./(4*pi)).*((2*x+1)./(2*(1-%d))+',...
+ '(4*x)./((1-%d).^2)+(4)./((1-%d).^3))'], parameters(1),...
+ parameters(1),parameters(1),parameters(1)));
+
+ elseif (selection == 3)
+
+ % Generate figure 5.1 (c)
+
+ % Set the kernel to be the locally supported kernel.
+ kernel=2;
+
+ % Set the parameter h and lambda.
+ parameters = [0.3 7];
+
+ % Set the cut-off bandwidth
+ m = 4:4:256;
+
+ % Generate the theoretical error bound function from [1].
+ bound = inline(sprintf(['(1/(pi*sqrt(2*pi))).*(((%d+1).^2)./(%d-0.5)).*',...
+ '(1./((1-%d).^(2*%d+1).*sqrt(sqrt(1-abs(%d))))).*(1./((x-%d).^',...
+ '(%d-0.5)))'], parameters(2), parameters(2), parameters(1),...
+ parameters(2), parameters(1), parameters(2), parameters(2)));
+
+ elseif (selection == 4)
+
+ % Generate figure 5.1 (c)
+
+ % Set the kernel to be the spherical gaussian kernel.
+ kernel=3;
+
+ % Set the parameter sigma.
+ parameters = [2.5];
+
+ % Set the cut-off bandwidth
+ m = 1:1:32;
+
+ % Generate the theoretical error bound function from [1].
+ bound = inline(sprintf('(sqrt(pi*%d).*(exp(%d)-1).*%d.^(x-0.5))./(gamma(x+0.5))',...
+ parameters(1),parameters(1),parameters(1)));
+
+ end
+
+ % Write three testcases for testing three different algorithms and parameters
+ % to the input file.
+
+ % NFSFT algorithm with direct NDFT and direct DPT
+ writeTestcase(file,1,0,0,1,1000,kernel,parameters,m,nodes);
+
+ % NFSFT algorithm with NFFT (cut-off parameter 3) and FPT algorithm
+ % (threshold 1000.0)
+ writeTestcase(file,1,1,3,1,1000,kernel,parameters,m,nodes);
+
+ % NFSFT algorithm with NFFT (cut-off parameter 6) and FPT algorithm
+ % (threshold 1000.0)
+ writeTestcase(file,1,1,6,1,1000,kernel,parameters,m,nodes);
+
+ % Close the input file.
+ fclose(file);
+
+ % Call fastsumS2.c with the generated input file writing the output to the
+ % output file.
+ system(sprintf('./%s < %s > %s',programname,infilename,outfilename));
+
+ % Open the output file.
+ file = fopen(outfilename,'r');
+
+ % Read the testcases into a cell array.
+ T = readTestcase(file);
+
+ % Close the output file.
+ fclose(file);
+
+ % Generate the values of the theoretical error bound function.
+ y4 = feval(bound,T{1}.bandwidths);
+
+ % Generate a new figure.
+ figure('Color',[1 1 1],'InvertHardcopy','off','PaperSize',[20.98 29.68]);
+
+ % Add the different error curves to the figure
+
+ % Get the cut-off degree values.
+ x = T{1}.bandwidths;
+
+ % First testcase
+ semilogy(x,T{1}.data{1}(:,6),'-','LineWidth',2,'Color',[0,0,0]);
+
+ % Prevent old curves from being deleted by adding the next curve
+ hold on
+
+ % Second testcase
+ semilogy(x,T{2}.data{1}(:,6),'-.','LineWidth',2,'Color',[0,0,0]);
+
+ % Third testcase
+ semilogy(x,T{3}.data{1}(:,6),'--','LineWidth',2,'Color',[0,0,0]);
+
+ % Theoretical error bound
+ semilogy(x,y4,':','LineWidth',2,'Color',[0,0,0]);
+
+ % Adjust the axis limits.
+ axis([x(1) x(end) 1e-17 1])
+
+ % Add axis labels.
+ xlabel('M');
+ ylabel('E_{\infty}','Rotation',0);
+
+elseif (selection == 5)
+
+ % Generate Table 5.1
+
+ % Write the number of testcases to the file.
+ fprintf(file,'testcases=1\n');
+
+ % Set node sets to be used. We use L = D source and target nodes as a power
+ % of two from 2^6 up to 2^21. Up to L = D = 2^18, we use the direct sum
+ % evaluation and compute the error E_infty. Up to L = D = 2^12 we also use
+ % precomputed kernel function values to compare the time needed. For small
+ % node numbers and computation times, we use repetitions to obtain time
+ % measurements averaged over multiple computations.
+ nodes = [...
+ 2^6, 2^6, 1, 1, 60;...
+ 2^7, 2^7, 1, 1, 50;...
+ 2^8, 2^8, 1, 1, 35;...
+ 2^9, 2^9, 1, 1, 20;...
+ 2^10, 2^10, 1, 1, 10;...
+ 2^11, 2^11, 1, 1, 10;...
+ 2^12, 2^12, 1, 1, 10;...
+ 2^13, 2^13, 1, 0, 1;...
+ 2^14, 2^14, 1, 0, 1;...
+ 2^15, 2^15, 1, 0, 1;...
+ 2^16, 2^16, 1, 0, 1;...
+ 2^17, 2^17, 1, 0, 1;...
+ 2^18, 2^18, 1, 0, 1;...
+ 2^19, 2^19, 0, 0, 1;...
+ 2^20, 2^20, 0, 0, 1;...
+ 2^21, 2^21, 0, 0, 1];
+
+ % Set the kernel to be the Abel-Poisson kernel.
+ kernel = 0;
+
+ % Set the parameter h.
+ parameters = [0.6];
+
+ %Set the cut-off degree.
+ m = 128;
+
+ % Write the testcase to the input file.
+ writeTestcase(file,2,1,6,1,1000,kernel,parameters,m,nodes);
+
+ % Close the input file.
+ fclose(file);
+
+ % Call fastsumS2.c with the generated input file writing the output to the
+ % output file.
+ system(sprintf('./%s < %s > %s',programname,infilename,outfilename));
+
+ % Open the output file.
+ file = fopen(outfilename,'r');
+
+ % Read the testcases into a cell array.
+ T = readTestcase(file);
+
+ % Close the output file.
+ fclose(file);
+
+ % Open the file to write the table in TeX format to.
+ file = fopen(texfilename,'w');
+
+ % Generate the table in TeX format and write it to the output file.
+ fprintf(file,'\\begin{table}[ht!]\n \\begin{center}\n ');
+ fprintf(file,'\\begin{tabular}{r|r|r|r|r|r}\n ');
+ fprintf(file,'$L = D$ & direct alg. & w/pre-comp. & ');
+ fprintf(file,'FS, NDSFT & FS, NFSFT & error ');
+ fprintf(file,'$E_{\\infty}$\\\\\\hline\\\\[-2.0ex]\n');
+ for i = 1:size(T{1}.data,2)
+ fprintf(file,' $2^{%d}$ & %s & %s & %s & %s & %s\\\\\n',...
+ round(log2(T{1}.nodes(i,1))),texFormat(T{1}.data{i}(1)),...
+ texFormat(T{1}.data{i}(2)),texFormat(T{1}.data{i}(3)),...
+ texFormat(T{1}.data{i}(4)),texFormat(T{1}.data{i}(6)));
+ end
+ fprintf(file,' \\end{tabular}\n');
+ fprintf(file,' \\end{center}\n');
+ fprintf(file,'\\end{table}\n');
+
+ % Close the output file.
+ fclose(file);
+else
+ % Error due to invalid selection.
+ error('Invalid selection!');
+end
+
+% End of the function
+return;
+
+
+function s = texFormat(d)
+% TEXFORMAT Output positive numbers in TeX verbatim font style
+% TEXFORMAT(d) converts any number d > 0 to a string in TeX verbatim
+% font style. The number is converted into scientfic format with one decimal
+% digit precision. If d <= 0 a dash in Tex verbatim font style is returned in
+% place of the number.
+
+% Check if number is greater zero.
+if d > 0
+
+ % Convert number to TeX verbatim font style and scientif format.
+ s = sprintf('\\verb#%.1E#',d);
+
+else
+
+ % Return a dash in TeX verbatim font style.
+ s = '\verb#-#';
+
+end
diff --git a/applications/fastsumS2/readTestcase.m b/applications/fastsumS2/readTestcase.m
new file mode 100644
index 0000000..56927aa
--- /dev/null
+++ b/applications/fastsumS2/readTestcase.m
@@ -0,0 +1,203 @@
+function T = readTestcase(file)
+% READTESTCASE Read fastsumS2.c testcase results from file
+% READTESTCASE(FILE) reads fastsumS2.c testcase results from the file FILE.
+% The testcase results are returned as a cell vector containing the data for
+% each individual testcase as a structure with the following fields:
+% - USENFSFT If true, the NFSFT algorithm has been used, otherwise the direct
+% NDSFT algorithm
+% - USENFFT If true, the NFFT algorithm has been used, otherwise the direct
+% NDFT algorithm (undefined if USENFSFT is false),
+% - CUTOFF The NFFT cut-off parameter (undefined if USENFFT is false)
+% - USEFPT If true, the fast polynomial transform has been used, otherwise the
+% direct polynomial transform algorithm (undefined if USENFSFT is false),
+% - THRESHOLD The fast polynomial transform threshold parameter (undefined if
+% USEFPT is false),
+% - kernel The kernel function used (0 = Abel-Poisson kernel, 1 =
+% singularity kernel, 2 = locally supported kernel, 3 = spherical Gaussian
+% kernel),
+% - parameters A m x n matrix containing the kernel function parameters,
+% m is the number of parameter sets and n is the number of kernel function
+% parameters (1 for Abel-Poisson, singularity and spherical Gaussian kernel,
+% 2 for the locally supported kernel)
+% - bandwidths A vector containing the cut-off degrees for the approximation
+% - nodes A m x 5 matrix containing the node sets used, where m is the number
+% of different node sets. Each row contains a node set specification
+% containing
+% - in the first column the number of source nodes,
+% - in the second colum the number of target nodes,
+% - in the third column whether the direct sum evaluation has been performed
+% to compute the error E_infty,
+% - in the fourth column whether the precomputed direct sum evaluation has
+% been used (undefined if direct sum evaluation has not been used),
+% - in the fifth column the error E_infty (undefined if direct sum
+% evaluation has not been used).
+% - data A m x n cell array containing the result data where m is the number
+% of parameter sets and n is the number of node sets. Cell (m,n) correspond
+% to the given ordering of parameter sets and node sets and is
+% a j x 6 matrix, where j is the number of cut-off degrees. Each row
+% represents the result data for a single cut-off degree and contains
+% - in the first column the time needed for direct sum evaluation,
+% - in the second column the time needed for direct sum evaluation with
+% precomputation,
+% - in the third column the time needed by the fast summation algorithm
+% using the direct NDSFT algorithm,
+% - in the fourth column the time needed by the fast summation algorithm
+% using the NFSFT algorithm,
+% - in the fifth column the error E_infty for the fast summation algorithm
+% using the direct NDSFT algorithm,
+% - in the sixth column the error E_infty for the fast summation algorithm
+% using the NFSFT algorithm.
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: readTestcase.m 3780 2012-06-04 21:50:09Z keiner $
+
+% Read the number of testcases.
+tc_max = fscanf(file,'%d',1);
+
+% Create empty cell array for the testcases.
+T = cell(tc_max,1);
+
+% Cycle through all testcases.
+for i = 1:tc_max
+
+ % Create structure.
+ t = struct('USENFSFT',[0],'USENFFT',[0],'CUTOFF',[0],'USEFPT',[0],...
+ 'THRESHOLD',[0],'kernel',[0],'parameters',{0},'bandwidths',[0],...
+ 'nodes',{0},'data',{0});
+
+ % Read NFSFT usage flag.
+ v = fscanf(file,'%d',1);
+ if (v >= 1)
+
+ % Set NFSFT usage flag in the structure.
+ t.USENFSFT = [true];
+
+ % Read NFFT usage flag.
+ v = fscanf(file,'%d',1);
+
+ if (v >= 1)
+
+ % Set NFSFT usage flag in the structure.
+ t.USENFFFT = [true];
+
+ % Read the NFFT cut-off parameter.
+ v = fscanf(file,'%d',1);
+ t.CUTOFF = [v];
+
+ else
+
+ % Set NFSFT usage flag in the structure.
+ t.USENFFFT = [false];
+
+ end
+
+ % Read FPT usage flag.
+ v = fscanf(file,'%d',1);
+
+ if (v >= 1)
+
+ % Set NFSFT usage flag in the structure.
+ t.USEFPT = [false];
+
+ else
+
+ % Set NFSFT usage flag in the structure.
+ t.USEFPT = [false];
+
+ end
+
+ % Read the FPT threshold.
+ v = fscanf(file,'%lf',1);
+ t.THRESHOLD = [v];
+
+ else
+
+ % Set NFSFT usage flag in the structure.
+ t.USENFSFT = [false];
+
+ end
+
+ % Read the kernel type.
+ v = fscanf(file,'%d',1);
+ t.kernel = [v];
+
+ % Read the number of parameter sets.
+ ip_max = fscanf(file,'%d',1);
+
+ % Read the number of parameters.
+ ipp_max = fscanf(file,'%d',1);
+
+ % Create empty array for parameters.
+ p = zeros(ipp_max,ip_max);
+
+ % Read parameters.
+ p = fscanf(file,'%lf',[ipp_max,ip_max]);
+
+ % Transpose matrix to get dimensions right.
+ t.parameters = p';
+
+ % Read number of cut-off degrees
+ bandwidths = fscanf(file,'%d',1);
+
+ % Read the cut-off degrees
+ m = fscanf(file,'%d',bandwidths);
+ t.bandwidths = m;
+
+ % Read number of node sets.
+ ild_max = fscanf(file,'%d',1);
+
+ % Read node sets.
+ nodes = zeros(ild_max,5);
+ for j=1:ild_max
+ % Read first three parameters.
+ nodes(j,1) = fscanf(file,'%d',1);
+ nodes(j,2) = fscanf(file,'%d',1);
+ nodes(j,3) = fscanf(file,'%d',1);
+ % Check for for parameters.
+ if (nodes(j,3) == 1)
+ % Read two more parameters.
+ nodes(j,4) = fscanf(file,'%d',1);
+ nodes(j,5) = fscanf(file,'%d',1);
+ end
+ end
+
+ % Assign node set matrix to data field in structure.
+ t.nodes = nodes;
+
+ % Create cell array for result data
+ datacell = {ip_max,ild_max};
+
+ % For each parameter set and node set combination read the result data for
+ % every cut-off degree into a matrix.
+ for j=1:ip_max
+ for k=1:ild_max
+ data = fscanf(file,'%e',[6,bandwidths]);
+ datacell{j,k} = data';
+ end
+ end
+
+ % Assign cell array to data field in structure.
+ t.data = datacell;
+
+ % Assign testcase structure to field in cell array.
+ T{i} = t;
+
+end
+
+% End of the function
+return;
diff --git a/applications/fastsumS2/writeTestcase.m b/applications/fastsumS2/writeTestcase.m
new file mode 100644
index 0000000..32ab884
--- /dev/null
+++ b/applications/fastsumS2/writeTestcase.m
@@ -0,0 +1,118 @@
+function writeTestcase(file,usenfsft,usenfft,cutoff,usefpt,threshold,kernel,...
+ parameters,bandwidths,nodes)
+
+% WRITETESTCASE Write a fastsumS2 testcase definition to a file
+% WRITETESTCASE(FILE, USENFSFT, USENFFT, CUTOFF, USEFPT, THRESHOLD, KERNEL,
+% PARAMETERS, BANDWIDTHS, NODES) writes a fastsumS2 testcase specification to
+% the file associated with the file handle FILE.
+% The parameters are
+% - FILE The file handle associated with the file to write to,
+% - USENFSFT If true, the NFSFT algorithm is used, otherwise the direct NDSFT
+% algorithm,
+% - USENFFT If true, the NFFT algorithm is used, otherwise the direct NDSFT
+% algorithm (ignored if USENFSFT is false),
+% - CUTOFF The NFFT cut-off parameter (ignored if USENFFT is false)
+% - USEFPT If true, the fast polynomial transform is used, otherwise the
+% direct polynomial transform algorithm (ignored if USENFSFT is false),
+% - THRESHOLD The fast polynomial transform threshold parameter (ignored if
+% USEFPT is false),
+% - KERNEL The kernel function to be used (0 = Abel-Poisson kernel, 1 =
+% singularity kernel, 2 = locally supported kernel, 3 = spherical Gaussian
+% kernel),
+% - PARAMETERS A m x n matrix containing the kernel function parameters,
+% m is the number of parameter sets and n is the number of kernel function
+% parameters (1 for Abel-Poisson, singularity and spherical Gaussian kernel,
+% 2 for the locally supported kernel)
+% - BANDWIDTH A vector containing the cut-off degrees for the approximation
+% - NODES A m x 5 matrix containing the node sets used, where m is the number
+% of different node sets. Each row contains a node set specification
+% containing
+% - in the first column the number of source nodes,
+% - in the second colum the number of target nodes,
+% - in the third column whether the direct sum evaluation has been performed
+% to compute the error E_infty,
+% - in the fourth column whether the precomputed direct sum evaluation has
+% been used (undefined if direct sum evaluation has not been used),
+% - in the fifth column the error E_infty (undefined if direct sum
+% evaluation has not been used).
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: writeTestcase.m 3780 2012-06-04 21:50:09Z keiner $
+
+% Write NFSFT usage flag.
+fprintf(file,'nfsft=%d\n',usenfsft);
+
+if (usenfsft == true)
+
+ % Write NFFT usage flag.
+ fprintf(file,'nfft=%d\n',usenfft);
+
+ if (usenfft == true)
+
+ % Write NFFT cut-off parameter.
+ fprintf(file,'cutoff=%d\n',cutoff);
+
+ end
+
+ % Write FPT usage flag.
+ fprintf(file,'fpt=%d\n',usefpt);
+
+ % Write FPT threshold.
+ fprintf(file,'threshold=%e\n',threshold);
+
+end
+
+% Write kernel type
+fprintf(file,'kernel=%d\n',kernel);
+
+% Write number of parameter sets.
+fprintf(file,'parameter_sets=%d\n',size(parameters,1));
+
+% Write number of parameters.
+fprintf(file,'parameters=%d\n',size(parameters,2));
+
+% Write parameters sets.
+for j=1:size(parameters,1)
+ for k=1:size(parameters,2)
+ % Write parameter k of parameter sets j.
+ fprintf(file,'%f\n',parameters(j,k));
+ end
+end
+
+% Write number of bandwidths.
+fprintf(file,'bandwidths=%d\n',length(bandwidths));
+
+% Write bandwidths.
+fprintf(file,'%d\n',bandwidths);
+
+% Write number of node sets.
+fprintf(file,'node_sets=%d\n',size(nodes,1));
+
+% Write node sets.
+for j = 1:size(nodes,1)
+ fprintf(file,'L=%d\n',nodes(j,1));
+ fprintf(file,'D=%d\n',nodes(j,2));
+ fprintf(file,'compare=%d\n',nodes(j,3));
+ if (nodes(j,3) == 1)
+ fprintf(file,'precomputed=%d\n',nodes(j,4));
+ fprintf(file,'repetitions=%d\n',nodes(j,5));
+ end
+end
+
+% End of function
+return;
diff --git a/applications/iterS2/Makefile.am b/applications/iterS2/Makefile.am
new file mode 100644
index 0000000..43fabe4
--- /dev/null
+++ b/applications/iterS2/Makefile.am
@@ -0,0 +1,11 @@
+# $Id: Makefile.am 3792 2012-06-12 06:45:24Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/kernel/nfsft
+
+noinst_PROGRAMS = iterS2
+
+iterS2_SOURCES = iterS2.c doxygen.h
+iterS2_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = writeTestcase.m writeImageTestcase.m README
+#iterS2.m readTestcase.m
diff --git a/applications/iterS2/Makefile.in b/applications/iterS2/Makefile.in
new file mode 100644
index 0000000..4989571
--- /dev/null
+++ b/applications/iterS2/Makefile.in
@@ -0,0 +1,556 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3792 2012-06-12 06:45:24Z keiner $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = iterS2$(EXEEXT)
+subdir = applications/iterS2
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_iterS2_OBJECTS = iterS2.$(OBJEXT)
+iterS2_OBJECTS = $(am_iterS2_OBJECTS)
+iterS2_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(iterS2_SOURCES)
+DIST_SOURCES = $(iterS2_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/kernel/nfsft
+iterS2_SOURCES = iterS2.c doxygen.h
+iterS2_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = writeTestcase.m writeImageTestcase.m README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/iterS2/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applications/iterS2/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+iterS2$(EXEEXT): $(iterS2_OBJECTS) $(iterS2_DEPENDENCIES) $(EXTRA_iterS2_DEPENDENCIES)
+ @rm -f iterS2$(EXEEXT)
+ $(LINK) $(iterS2_OBJECTS) $(iterS2_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/iterS2.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+#iterS2.m readTestcase.m
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/iterS2/README b/applications/iterS2/README
new file mode 100644
index 0000000..f27b9bd
--- /dev/null
+++ b/applications/iterS2/README
@@ -0,0 +1,50 @@
+iterS2 - Iterative reconstruction on the sphere S2.
+
+!!! THIS EXAMPLE IS CURRENTLY NOT FUNCTIONAL !!!
+
+ Introduction
+ ------------
+
+ Directory contents
+ ------------------
+ iterS2.c Example C program
+ example.in Example input for iterS2.c
+ example.out Example output of iterS2.c on input example.in
+ README This file
+ Makefile.am Automake template
+ iterS2.m MATLAB example file that preproduces figures from [1] using
+ iterS2.c
+ readTestcase.m MATLAB function that reads output of iterS2.c
+ writeTestcase.m MATLAB function that writes input for iterS2.c
+ writeImageTestcase.m MATLAB function that writes input for iterS2.c
+
+ iterS2.c
+ -----------
+
+ iterS2.m
+ -----------
+
+ readTestcase.m
+ --------------
+ This MATLAB function is used by iterS2.m and allows for reading testcase
+ specifications and results from a file. In MATLAB, type "help readTestcase"
+ for more information.
+
+ writeTestcase.m
+ ---------------
+ This MATLAB function is used by iterS2.m and allows for writing testcase
+ specifications to a file. In MATLAB, type "help readTestcase" for more
+ information.
+
+ References
+ ----------
+
+ Feedback
+ --------
+ If you have comments, questions, or suggestions regarding NFFT, don't
+ hesitate to contact us. For more information, news and updates see the NFFT
+ website at
+
+ http://www.tu-chemnitz.de/~potts/nfft/
+
+
diff --git a/applications/iterS2/doxygen.h b/applications/iterS2/doxygen.h
new file mode 100644
index 0000000..3bee191
--- /dev/null
+++ b/applications/iterS2/doxygen.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */
+
+/**
+ * \defgroup applications_iterS2 Iterative reconstruction on the sphere S2
+ * \ingroup applications
+ */
diff --git a/applications/iterS2/iterS2.c b/applications/iterS2/iterS2.c
new file mode 100644
index 0000000..bce0afb
--- /dev/null
+++ b/applications/iterS2/iterS2.c
@@ -0,0 +1,440 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: iterS2.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/* iterS2 - Iterative reconstruction on the sphere S2 */
+
+/**
+ * \defgroup applications_iterS2_matlab iterS2_matlab
+ * \ingroup applications_iterS2
+ * \{
+ */
+#include "config.h"
+
+/* Include standard C headers. */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+/* Include NFFT 3 utilities headers. */
+#include "nfft3util.h"
+/* Include NFFT3 library header. */
+#include "nfft3.h"
+
+#include "legendre.h"
+
+/** Enumeration for parameter values */
+enum boolean {NO = 0, YES = 1};
+
+/**
+ * The main program.
+ *
+ * \param argc The number of arguments
+ * \param argv An array containing the arguments as C-strings
+ *
+ * \return Exit code
+ *
+ * \author Jens Keiner
+ */
+int main (int argc, char **argv)
+{
+ int T;
+ int N;
+ int M;
+ int M2;
+
+ int t; /* Index variable for testcases */
+ nfsft_plan plan; /* NFSFT plan */
+ nfsft_plan plan2; /* NFSFT plan */
+ solver_plan_complex iplan; /* NFSFT plan */
+ int j; /* */
+ int k; /* */
+ int m; /* */
+ int use_nfsft; /* */
+ int use_nfft; /* */
+ int use_fpt; /* */
+ int cutoff; /**< The current NFFT cut-off parameter */
+ double threshold; /**< The current NFSFT threshold parameter */
+ double re;
+ double im;
+ double a;
+ double *scratch;
+ double xs;
+ double *ys;
+ double *temp;
+ double _Complex *temp2;
+ int qlength;
+ double *qweights;
+ fftw_plan fplan;
+ fpt_set set;
+ int npt;
+ int npt_exp;
+ double *alpha, *beta, *gamma;
+
+ /* Read the number of testcases. */
+ fscanf(stdin,"testcases=%d\n",&T);
+ fprintf(stderr,"%d\n",T);
+
+ /* Process each testcase. */
+ for (t = 0; t < T; t++)
+ {
+ /* Check if the fast transform shall be used. */
+ fscanf(stdin,"nfsft=%d\n",&use_nfsft);
+ fprintf(stderr,"%d\n",use_nfsft);
+ if (use_nfsft != NO)
+ {
+ /* Check if the NFFT shall be used. */
+ fscanf(stdin,"nfft=%d\n",&use_nfft);
+ fprintf(stderr,"%d\n",use_nfsft);
+ if (use_nfft != NO)
+ {
+ /* Read the cut-off parameter. */
+ fscanf(stdin,"cutoff=%d\n",&cutoff);
+ fprintf(stderr,"%d\n",cutoff);
+ }
+ else
+ {
+ /* TODO remove this */
+ /* Initialize unused variable with dummy value. */
+ cutoff = 1;
+ }
+ /* Check if the fast polynomial transform shall be used. */
+ fscanf(stdin,"fpt=%d\n",&use_fpt);
+ fprintf(stderr,"%d\n",use_fpt);
+ if (use_fpt != NO)
+ {
+ /* Read the NFSFT threshold parameter. */
+ fscanf(stdin,"threshold=%lf\n",&threshold);
+ fprintf(stderr,"%lf\n",threshold);
+ }
+ else
+ {
+ /* TODO remove this */
+ /* Initialize unused variable with dummy value. */
+ threshold = 1000.0;
+ }
+ }
+ else
+ {
+ /* TODO remove this */
+ /* Set dummy values. */
+ use_nfft = NO;
+ use_fpt = NO;
+ cutoff = 3;
+ threshold = 1000.0;
+ }
+
+ /* Read the bandwidth. */
+ fscanf(stdin,"bandwidth=%d\n",&N);
+ fprintf(stderr,"%d\n",N);
+
+ /* Do precomputation. */
+ nfsft_precompute(N,threshold,
+ ((use_nfsft==NO)?(NFSFT_NO_FAST_ALGORITHM):(0U/*NFSFT_NO_DIRECT_ALGORITHM*/)), 0U);
+
+ /* Read the number of nodes. */
+ fscanf(stdin,"nodes=%d\n",&M);
+ fprintf(stderr,"%d\n",M);
+
+ /* */
+ if ((N+1)*(N+1) > M)
+ {
+ X(next_power_of_2_exp)(N, &npt, &npt_exp);
+ fprintf(stderr, "npt = %d, npt_exp = %d\n", npt, npt_exp);
+ fprintf(stderr,"Optimal interpolation!\n");
+ scratch = (double*) nfft_malloc(4*sizeof(double));
+ ys = (double*) nfft_malloc((N+1)*sizeof(double));
+ temp = (double*) nfft_malloc((2*N+1)*sizeof(double));
+ temp2 = (double _Complex*) nfft_malloc((N+1)*sizeof(double _Complex));
+
+ a = 0.0;
+ for (j = 0; j <= N; j++)
+ {
+ xs = 2.0 + (2.0*j)/(N+1);
+ ys[j] = (2.0-((j == 0)?(1.0):(0.0)))*4.0*nfft_bspline(4,xs,scratch);
+ //fprintf(stdout,"%3d: g(%le) = %le\n",j,xs,ys[j]);
+ a += ys[j];
+ }
+ //fprintf(stdout,"a = %le\n",a);
+ for (j = 0; j <= N; j++)
+ {
+ ys[j] *= 1.0/a;
+ }
+
+ qlength = 2*N+1;
+ qweights = (double*) nfft_malloc(qlength*sizeof(double));
+
+ fplan = fftw_plan_r2r_1d(N+1, qweights, qweights, FFTW_REDFT00, 0U);
+ for (j = 0; j < N+1; j++)
+ {
+ qweights[j] = -2.0/(4*j*j-1);
+ }
+ fftw_execute(fplan);
+ qweights[0] *= 0.5;
+
+ for (j = 0; j < N+1; j++)
+ {
+ qweights[j] *= 1.0/(2.0*N+1.0);
+ qweights[2*N+1-1-j] = qweights[j];
+ }
+
+ fplan = fftw_plan_r2r_1d(2*N+1, temp, temp, FFTW_REDFT00, 0U);
+ for (j = 0; j <= N; j++)
+ {
+ temp[j] = ((j==0 || j == 2*N)?(1.0):(0.5))*ys[j];
+ }
+ for (j = N+1; j < 2*N+1; j++)
+ {
+ temp[j] = 0.0;
+ }
+ fftw_execute(fplan);
+
+ for (j = 0; j < 2*N+1; j++)
+ {
+ temp[j] *= qweights[j];
+ }
+
+ fftw_execute(fplan);
+
+ for (j = 0; j < 2*N+1; j++)
+ {
+ temp[j] *= ((j==0 || j == 2*N)?(1.0):(0.5));
+ if (j <= N)
+ {
+ temp2[j] = temp[j];
+ }
+ }
+
+ set = fpt_init(1, npt_exp, 0U);
+
+ alpha = (double*) nfft_malloc((N+2)*sizeof(double));
+ beta = (double*) nfft_malloc((N+2)*sizeof(double));
+ gamma = (double*) nfft_malloc((N+2)*sizeof(double));
+
+ alpha_al_row(alpha, N, 0);
+ beta_al_row(beta, N, 0);
+ gamma_al_row(gamma, N, 0);
+
+ fpt_precompute(set, 0, alpha, beta, gamma, 0, 1000.0);
+
+ fpt_transposed(set,0, temp2, temp2, N, 0U);
+
+ fpt_finalize(set);
+
+ nfft_free(alpha);
+ nfft_free(beta);
+ nfft_free(gamma);
+
+ fftw_destroy_plan(fplan);
+
+ nfft_free(scratch);
+ nfft_free(qweights);
+ nfft_free(ys);
+ nfft_free(temp);
+ }
+
+ /* Init transform plans. */
+ nfsft_init_guru(&plan, N, M,
+ ((use_nfft!=0)?(0U):(NFSFT_USE_NDFT)) |
+ ((use_fpt!=0)?(0U):(NFSFT_USE_DPT)) | NFSFT_MALLOC_F | NFSFT_MALLOC_X |
+ NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_ZERO_F_HAT,
+ PRE_PHI_HUT | PRE_PSI | FFTW_INIT |
+ FFT_OUT_OF_PLACE,
+ cutoff);
+
+ if ((N+1)*(N+1) > M)
+ {
+ solver_init_advanced_complex(&iplan, (nfft_mv_plan_complex*)(&plan), CGNE | PRECOMPUTE_DAMP);
+ }
+ else
+ {
+ solver_init_advanced_complex(&iplan, (nfft_mv_plan_complex*)(&plan), CGNR | PRECOMPUTE_WEIGHT | PRECOMPUTE_DAMP);
+ }
+
+ /* Read the nodes and function values. */
+ for (j = 0; j < M; j++)
+ {
+ fscanf(stdin,"%le %le %le %le\n",&plan.x[2*j+1],&plan.x[2*j],&re,&im);
+ plan.x[2*j+1] = plan.x[2*j+1]/(2.0*PI);
+ plan.x[2*j] = plan.x[2*j]/(2.0*PI);
+ if (plan.x[2*j] >= 0.5)
+ {
+ plan.x[2*j] = plan.x[2*j] - 1;
+ }
+ iplan.y[j] = re + _Complex_I * im;
+ fprintf(stderr,"%le %le %le %le\n",plan.x[2*j+1],plan.x[2*j],
+ creal(iplan.y[j]),cimag(iplan.y[j]));
+ }
+
+ /* Read the number of nodes. */
+ fscanf(stdin,"nodes_eval=%d\n",&M2);
+ fprintf(stderr,"%d\n",M2);
+
+ /* Init transform plans. */
+ nfsft_init_guru(&plan2, N, M2,
+ ((use_nfft!=0)?(0U):(NFSFT_USE_NDFT)) |
+ ((use_fpt!=0)?(0U):(NFSFT_USE_DPT)) | NFSFT_MALLOC_F | NFSFT_MALLOC_X |
+ NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_ZERO_F_HAT,
+ PRE_PHI_HUT | PRE_PSI | FFTW_INIT |
+ FFT_OUT_OF_PLACE,
+ cutoff);
+
+ /* Read the nodes and function values. */
+ for (j = 0; j < M2; j++)
+ {
+ fscanf(stdin,"%le %le\n",&plan2.x[2*j+1],&plan2.x[2*j]);
+ plan2.x[2*j+1] = plan2.x[2*j+1]/(2.0*PI);
+ plan2.x[2*j] = plan2.x[2*j]/(2.0*PI);
+ if (plan2.x[2*j] >= 0.5)
+ {
+ plan2.x[2*j] = plan2.x[2*j] - 1;
+ }
+ fprintf(stderr,"%le %le\n",plan2.x[2*j+1],plan2.x[2*j]);
+ }
+
+ nfsft_precompute_x(&plan);
+
+ nfsft_precompute_x(&plan2);
+
+ /* Frequency weights. */
+ if ((N+1)*(N+1) > M)
+ {
+ /* Compute Voronoi weights. */
+ //nfft_voronoi_weights_S2(iplan.w, plan.x, M);
+
+ /* Print out Voronoi weights. */
+ /*a = 0.0;
+ for (j = 0; j < plan.M_total; j++)
+ {
+ fprintf(stderr,"%le\n",iplan.w[j]);
+ a += iplan.w[j];
+ }
+ fprintf(stderr,"sum = %le\n",a);*/
+
+ for (j = 0; j < plan.N_total; j++)
+ {
+ iplan.w_hat[j] = 0.0;
+ }
+
+ for (k = 0; k <= N; k++)
+ {
+ for (j = -k; j <= k; j++)
+ {
+ iplan.w_hat[NFSFT_INDEX(k,j,&plan)] = 1.0/(pow(k+1.0,2.0)); /*temp2[j]*/;
+ }
+ }
+ }
+ else
+ {
+ for (j = 0; j < plan.N_total; j++)
+ {
+ iplan.w_hat[j] = 0.0;
+ }
+
+ for (k = 0; k <= N; k++)
+ {
+ for (j = -k; j <= k; j++)
+ {
+ iplan.w_hat[NFSFT_INDEX(k,j,&plan)] = 1/(pow(k+1.0,2.5));
+ }
+ }
+
+ /* Compute Voronoi weights. */
+ nfft_voronoi_weights_S2(iplan.w, plan.x, M);
+
+ /* Print out Voronoi weights. */
+ a = 0.0;
+ for (j = 0; j < plan.M_total; j++)
+ {
+ fprintf(stderr,"%le\n",iplan.w[j]);
+ a += iplan.w[j];
+ }
+ fprintf(stderr,"sum = %le\n",a);
+ }
+
+ fprintf(stderr, "N_total = %d\n", plan.N_total);
+ fprintf(stderr, "M_total = %d\n", plan.M_total);
+
+ /* init some guess */
+ for (k = 0; k < plan.N_total; k++)
+ {
+ iplan.f_hat_iter[k] = 0.0;
+ }
+
+ /* inverse trafo */
+ solver_before_loop_complex(&iplan);
+
+ /*for (k = 0; k < plan.M_total; k++)
+ {
+ printf("%le %le\n",creal(iplan.r_iter[k]),cimag(iplan.r_iter[k]));
+ }*/
+
+ for (m = 0; m < 29; m++)
+ {
+ fprintf(stderr,"Residual ||r||=%e,\n",sqrt(iplan.dot_r_iter));
+ solver_loop_one_step_complex(&iplan);
+ }
+
+ /*NFFT_SWAP_complex(iplan.f_hat_iter, plan.f_hat);
+ nfsft_trafo(&plan);
+ NFFT_SWAP_complex(iplan.f_hat_iter, plan.f_hat);
+
+ a = 0.0;
+ b = 0.0;
+ for (k = 0; k < plan.M_total; k++)
+ {
+ printf("%le %le %le\n",cabs(iplan.y[k]),cabs(plan.f[k]),
+ cabs(iplan.y[k]-plan.f[k]));
+ a += cabs(iplan.y[k]-plan.f[k])*cabs(iplan.y[k]-plan.f[k]);
+ b += cabs(iplan.y[k])*cabs(iplan.y[k]);
+ }
+
+ fprintf(stderr,"relative error in 2-norm: %le\n",a/b);*/
+
+ NFFT_SWAP_complex(iplan.f_hat_iter, plan2.f_hat);
+ nfsft_trafo(&plan2);
+ NFFT_SWAP_complex(iplan.f_hat_iter, plan2.f_hat);
+ for (k = 0; k < plan2.M_total; k++)
+ {
+ fprintf(stdout,"%le\n",cabs(plan2.f[k]));
+ }
+
+ solver_finalize_complex(&iplan);
+
+ nfsft_finalize(&plan);
+
+ nfsft_finalize(&plan2);
+
+ /* Delete precomputed data. */
+ nfsft_forget();
+
+ if ((N+1)*(N+1) > M)
+ {
+ nfft_free(temp2);
+ }
+
+ } /* Process each testcase. */
+
+ /* Return exit code for successful run. */
+ return EXIT_SUCCESS;
+}
+/* \} */
diff --git a/applications/iterS2/writeImageTestcase.m b/applications/iterS2/writeImageTestcase.m
new file mode 100644
index 0000000..e7d2dc5
--- /dev/null
+++ b/applications/iterS2/writeImageTestcase.m
@@ -0,0 +1,111 @@
+function writeTestcase(file,usenfsft,usenfft,cutoff,usefpt,threshold,...
+ bandwidth,img,itheta,iphi)
+%WRITEIMAGETESTCASE
+% WRITETESTCASE(FILE, USENFSFT, USENFFT, CUTOFF, USEFPT, THRESHOLD,
+% BANDWIDTH, THETA, PHI, F)
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: writeImageTestcase.m 3784 2012-06-06 20:30:39Z keiner $
+
+% Write NFSFT usage flag.
+fprintf(file,'nfsft=%d\n',usenfsft);
+
+if (usenfsft == true)
+
+ % Write NFFT usage flag.
+ fprintf(file,'nfft=%d\n',usenfft);
+
+ if (usenfft == true)
+
+ % Write NFFT cut-off parameter.
+ fprintf(file,'cutoff=%d\n',cutoff);
+
+ end
+
+ % Write FPT usage flag.
+ fprintf(file,'fpt=%d\n',usefpt);
+
+ if (usefpt == true)
+
+ % Write FPT threshold.
+ fprintf(file,'threshold=%e\n',threshold);
+
+ end
+
+end
+
+% Write bandwidth
+fprintf(file,'bandwidth=%d\n',bandwidth);
+
+% Generate Image
+[m,n] = size(img)
+dtheta = pi/m;
+dphi = 2*pi/n;
+
+if (exist('itheta','var') == false)
+ ts = 1;
+ te = m;
+else
+ ts = itheta(1)
+ te = itheta(2)
+end
+
+if (exist('iphi','var') == false)
+ ps = 1;
+ pe = n;
+else
+ ps = iphi(1)
+ pe = iphi(2)
+end
+
+im = img(ts:te,ps:pe);
+
+r = length(find(im == 0))
+
+theta = ((ts-0.5):(te-0.5))*dtheta;
+phi = ((ps-1):(pe-1))*dphi;
+
+% Write number of nodes.
+fprintf(file,'nodes=%d\n',((te-ts+1)*(pe-ps+1))-r);
+
+% Write nodes and function values.
+for j=1:length(theta)
+ for k=1:length(phi)
+ % Write node (j,k) and corresponding function value.
+ if (abs(im(j,k)) ~= 0)
+ fprintf(file,'%f %f %f %f\n',theta(j),phi(k),real(im(j,k)),imag(im(j,k)));
+ end
+ end
+end
+
+theta = ((ts-0.5):0.25:(te-0.5))*dtheta;
+phi = ((ps-1):0.25:(pe-1))*dphi;
+
+% Write number of nodes.
+fprintf(file,'nodes_eval=%d\n',length(theta)*length(phi));
+% Write nodes and function values.
+for j=1:length(theta)
+ for k=1:length(phi)
+ fprintf(file,'%f %f\n',theta(j),phi(k));
+ end
+end
+
+% End of function
+return;
diff --git a/applications/iterS2/writeTestcase.m b/applications/iterS2/writeTestcase.m
new file mode 100644
index 0000000..420612d
--- /dev/null
+++ b/applications/iterS2/writeTestcase.m
@@ -0,0 +1,77 @@
+function writeTestcase(file,usenfsft,usenfft,cutoff,usefpt,threshold,...
+ bandwidth,theta,phi,f)
+%WRITETESTCASE - Write an iterS2 testcase definition to a file
+% WRITETESTCASE(FILE, USENFSFT, USENFFT, CUTOFF, USEFPT, THRESHOLD,
+% BANDWIDTH, THETA, PHI, F)
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: writeTestcase.m 3784 2012-06-06 20:30:39Z keiner $
+
+% Write NFSFT usage flag.
+fprintf(file,'nfsft=%d\n',usenfsft);
+
+if (usenfsft == true)
+
+ % Write NFFT usage flag.
+ fprintf(file,'nfft=%d\n',usenfft);
+
+ if (usenfft == true)
+
+ % Write NFFT cut-off parameter.
+ fprintf(file,'cutoff=%d\n',cutoff);
+
+ end
+
+ % Write FPT usage flag.
+ fprintf(file,'fpt=%d\n',usefpt);
+
+ if (usefpt == true)
+
+ % Write FPT threshold.
+ fprintf(file,'threshold=%e\n',threshold);
+
+ end
+
+end
+
+% Write bandwidth
+fprintf(file,'bandwidth=%d\n',bandwidth);
+
+% Write number of nodes.
+fprintf(file,'nodes=%d\n',length(theta));
+
+
+% Write nodes and function values.
+for j=1:length(theta)
+ % Write node j and corresponding function value.
+ fprintf(file,'%f %f %f %f\n',theta(j),phi(j),real(f(j)),imag(f(j)));
+end
+
+% Write number of nodes.
+fprintf(file,'nodes_eval=%d\n',m*n);
+% Write nodes and function values.
+for j=1:length(theta)
+ for k=1:length(phi)
+ fprintf(file,'%f %f\n',theta(j),phi(k));
+ end
+end
+
+% End of function
+return;
diff --git a/applications/mri/Makefile.am b/applications/mri/Makefile.am
new file mode 100644
index 0000000..b1d42c3
--- /dev/null
+++ b/applications/mri/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = mri2d mri3d
+EXTRA_DIST = doxygen.c
\ No newline at end of file
diff --git a/applications/mri/Makefile.in b/applications/mri/Makefile.in
new file mode 100644
index 0000000..2416637
--- /dev/null
+++ b/applications/mri/Makefile.in
@@ -0,0 +1,638 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = applications/mri
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = mri2d mri3d
+EXTRA_DIST = doxygen.c
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/mri/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applications/mri/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+cscopelist-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+ cscopelist-recursive ctags-recursive install-am install-strip \
+ tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist cscopelist-recursive ctags ctags-recursive \
+ distclean distclean-generic distclean-libtool distclean-tags \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-recursive uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/mri/doxygen.c b/applications/mri/doxygen.c
new file mode 100644
index 0000000..4e41802
--- /dev/null
+++ b/applications/mri/doxygen.c
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */
+
+/**
+ * \defgroup applications_mri Transforms in magnetic resonance imaging
+ * \ingroup applications
+ */
diff --git a/applications/mri/mri2d/Makefile.am b/applications/mri/mri2d/Makefile.am
new file mode 100644
index 0000000..ab2efb3
--- /dev/null
+++ b/applications/mri/mri2d/Makefile.am
@@ -0,0 +1,51 @@
+# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = \
+ construct_data_2d \
+ construct_data_inh_2d1d \
+ construct_data_inh_3d \
+ reconstruct_data_gridding \
+ reconstruct_data_2d \
+ reconstruct_data_inh_3d \
+ reconstruct_data_inh_2d1d \
+ reconstruct_data_inh_nnfft
+
+construct_data_2d_SOURCES = construct_data_2d.c doxygen.h
+construct_data_2d_LDADD = $(top_builddir)/libnfft3.la
+
+construct_data_inh_2d1d_SOURCES = construct_data_inh_2d1d.c
+construct_data_inh_2d1d_LDADD = $(top_builddir)/libnfft3.la
+
+construct_data_inh_3d_SOURCES = construct_data_inh_3d.c
+construct_data_inh_3d_LDADD = $(top_builddir)/libnfft3.la
+
+reconstruct_data_gridding_SOURCES = reconstruct_data_gridding.c
+reconstruct_data_gridding_LDADD = $(top_builddir)/libnfft3.la
+
+reconstruct_data_2d_SOURCES = reconstruct_data_2d.c
+reconstruct_data_2d_LDADD = $(top_builddir)/libnfft3.la
+
+reconstruct_data_inh_3d_SOURCES = reconstruct_data_inh_3d.c
+reconstruct_data_inh_3d_LDADD = $(top_builddir)/libnfft3.la
+
+reconstruct_data_inh_2d1d_SOURCES = reconstruct_data_inh_2d1d.c
+reconstruct_data_inh_2d1d_LDADD = $(top_builddir)/libnfft3.la
+
+reconstruct_data_inh_nnfft_SOURCES = reconstruct_data_inh_nnfft.c
+reconstruct_data_inh_nnfft_LDADD = $(top_builddir)/libnfft3.la
+
+EXTRA_DIST = construct_inh.m \
+ construct_readout_time.m \
+ precompute_weights.m \
+ construct_knots_linogram.m \
+ mri_inh.m \
+ rms.m \
+ construct_knots_radial.m \
+ mri.m \
+ construct_knots_rose.m \
+ visualize_data.m \
+ construct_knots_spiral.m \
+ phantom.m \
+ README
diff --git a/applications/mri/mri2d/Makefile.in b/applications/mri/mri2d/Makefile.in
new file mode 100644
index 0000000..a533449
--- /dev/null
+++ b/applications/mri/mri2d/Makefile.in
@@ -0,0 +1,661 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = construct_data_2d$(EXEEXT) \
+ construct_data_inh_2d1d$(EXEEXT) \
+ construct_data_inh_3d$(EXEEXT) \
+ reconstruct_data_gridding$(EXEEXT) \
+ reconstruct_data_2d$(EXEEXT) reconstruct_data_inh_3d$(EXEEXT) \
+ reconstruct_data_inh_2d1d$(EXEEXT) \
+ reconstruct_data_inh_nnfft$(EXEEXT)
+subdir = applications/mri/mri2d
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_construct_data_2d_OBJECTS = construct_data_2d.$(OBJEXT)
+construct_data_2d_OBJECTS = $(am_construct_data_2d_OBJECTS)
+construct_data_2d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_construct_data_inh_2d1d_OBJECTS = \
+ construct_data_inh_2d1d.$(OBJEXT)
+construct_data_inh_2d1d_OBJECTS = \
+ $(am_construct_data_inh_2d1d_OBJECTS)
+construct_data_inh_2d1d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_construct_data_inh_3d_OBJECTS = construct_data_inh_3d.$(OBJEXT)
+construct_data_inh_3d_OBJECTS = $(am_construct_data_inh_3d_OBJECTS)
+construct_data_inh_3d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_reconstruct_data_2d_OBJECTS = reconstruct_data_2d.$(OBJEXT)
+reconstruct_data_2d_OBJECTS = $(am_reconstruct_data_2d_OBJECTS)
+reconstruct_data_2d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_reconstruct_data_gridding_OBJECTS = \
+ reconstruct_data_gridding.$(OBJEXT)
+reconstruct_data_gridding_OBJECTS = \
+ $(am_reconstruct_data_gridding_OBJECTS)
+reconstruct_data_gridding_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_reconstruct_data_inh_2d1d_OBJECTS = \
+ reconstruct_data_inh_2d1d.$(OBJEXT)
+reconstruct_data_inh_2d1d_OBJECTS = \
+ $(am_reconstruct_data_inh_2d1d_OBJECTS)
+reconstruct_data_inh_2d1d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_reconstruct_data_inh_3d_OBJECTS = \
+ reconstruct_data_inh_3d.$(OBJEXT)
+reconstruct_data_inh_3d_OBJECTS = \
+ $(am_reconstruct_data_inh_3d_OBJECTS)
+reconstruct_data_inh_3d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_reconstruct_data_inh_nnfft_OBJECTS = \
+ reconstruct_data_inh_nnfft.$(OBJEXT)
+reconstruct_data_inh_nnfft_OBJECTS = \
+ $(am_reconstruct_data_inh_nnfft_OBJECTS)
+reconstruct_data_inh_nnfft_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(construct_data_2d_SOURCES) \
+ $(construct_data_inh_2d1d_SOURCES) \
+ $(construct_data_inh_3d_SOURCES) \
+ $(reconstruct_data_2d_SOURCES) \
+ $(reconstruct_data_gridding_SOURCES) \
+ $(reconstruct_data_inh_2d1d_SOURCES) \
+ $(reconstruct_data_inh_3d_SOURCES) \
+ $(reconstruct_data_inh_nnfft_SOURCES)
+DIST_SOURCES = $(construct_data_2d_SOURCES) \
+ $(construct_data_inh_2d1d_SOURCES) \
+ $(construct_data_inh_3d_SOURCES) \
+ $(reconstruct_data_2d_SOURCES) \
+ $(reconstruct_data_gridding_SOURCES) \
+ $(reconstruct_data_inh_2d1d_SOURCES) \
+ $(reconstruct_data_inh_3d_SOURCES) \
+ $(reconstruct_data_inh_nnfft_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+construct_data_2d_SOURCES = construct_data_2d.c doxygen.h
+construct_data_2d_LDADD = $(top_builddir)/libnfft3.la
+construct_data_inh_2d1d_SOURCES = construct_data_inh_2d1d.c
+construct_data_inh_2d1d_LDADD = $(top_builddir)/libnfft3.la
+construct_data_inh_3d_SOURCES = construct_data_inh_3d.c
+construct_data_inh_3d_LDADD = $(top_builddir)/libnfft3.la
+reconstruct_data_gridding_SOURCES = reconstruct_data_gridding.c
+reconstruct_data_gridding_LDADD = $(top_builddir)/libnfft3.la
+reconstruct_data_2d_SOURCES = reconstruct_data_2d.c
+reconstruct_data_2d_LDADD = $(top_builddir)/libnfft3.la
+reconstruct_data_inh_3d_SOURCES = reconstruct_data_inh_3d.c
+reconstruct_data_inh_3d_LDADD = $(top_builddir)/libnfft3.la
+reconstruct_data_inh_2d1d_SOURCES = reconstruct_data_inh_2d1d.c
+reconstruct_data_inh_2d1d_LDADD = $(top_builddir)/libnfft3.la
+reconstruct_data_inh_nnfft_SOURCES = reconstruct_data_inh_nnfft.c
+reconstruct_data_inh_nnfft_LDADD = $(top_builddir)/libnfft3.la
+EXTRA_DIST = construct_inh.m \
+ construct_readout_time.m \
+ precompute_weights.m \
+ construct_knots_linogram.m \
+ mri_inh.m \
+ rms.m \
+ construct_knots_radial.m \
+ mri.m \
+ construct_knots_rose.m \
+ visualize_data.m \
+ construct_knots_spiral.m \
+ phantom.m \
+ README
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/mri/mri2d/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applications/mri/mri2d/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+construct_data_2d$(EXEEXT): $(construct_data_2d_OBJECTS) $(construct_data_2d_DEPENDENCIES) $(EXTRA_construct_data_2d_DEPENDENCIES)
+ @rm -f construct_data_2d$(EXEEXT)
+ $(LINK) $(construct_data_2d_OBJECTS) $(construct_data_2d_LDADD) $(LIBS)
+construct_data_inh_2d1d$(EXEEXT): $(construct_data_inh_2d1d_OBJECTS) $(construct_data_inh_2d1d_DEPENDENCIES) $(EXTRA_construct_data_inh_2d1d_DEPENDENCIES)
+ @rm -f construct_data_inh_2d1d$(EXEEXT)
+ $(LINK) $(construct_data_inh_2d1d_OBJECTS) $(construct_data_inh_2d1d_LDADD) $(LIBS)
+construct_data_inh_3d$(EXEEXT): $(construct_data_inh_3d_OBJECTS) $(construct_data_inh_3d_DEPENDENCIES) $(EXTRA_construct_data_inh_3d_DEPENDENCIES)
+ @rm -f construct_data_inh_3d$(EXEEXT)
+ $(LINK) $(construct_data_inh_3d_OBJECTS) $(construct_data_inh_3d_LDADD) $(LIBS)
+reconstruct_data_2d$(EXEEXT): $(reconstruct_data_2d_OBJECTS) $(reconstruct_data_2d_DEPENDENCIES) $(EXTRA_reconstruct_data_2d_DEPENDENCIES)
+ @rm -f reconstruct_data_2d$(EXEEXT)
+ $(LINK) $(reconstruct_data_2d_OBJECTS) $(reconstruct_data_2d_LDADD) $(LIBS)
+reconstruct_data_gridding$(EXEEXT): $(reconstruct_data_gridding_OBJECTS) $(reconstruct_data_gridding_DEPENDENCIES) $(EXTRA_reconstruct_data_gridding_DEPENDENCIES)
+ @rm -f reconstruct_data_gridding$(EXEEXT)
+ $(LINK) $(reconstruct_data_gridding_OBJECTS) $(reconstruct_data_gridding_LDADD) $(LIBS)
+reconstruct_data_inh_2d1d$(EXEEXT): $(reconstruct_data_inh_2d1d_OBJECTS) $(reconstruct_data_inh_2d1d_DEPENDENCIES) $(EXTRA_reconstruct_data_inh_2d1d_DEPENDENCIES)
+ @rm -f reconstruct_data_inh_2d1d$(EXEEXT)
+ $(LINK) $(reconstruct_data_inh_2d1d_OBJECTS) $(reconstruct_data_inh_2d1d_LDADD) $(LIBS)
+reconstruct_data_inh_3d$(EXEEXT): $(reconstruct_data_inh_3d_OBJECTS) $(reconstruct_data_inh_3d_DEPENDENCIES) $(EXTRA_reconstruct_data_inh_3d_DEPENDENCIES)
+ @rm -f reconstruct_data_inh_3d$(EXEEXT)
+ $(LINK) $(reconstruct_data_inh_3d_OBJECTS) $(reconstruct_data_inh_3d_LDADD) $(LIBS)
+reconstruct_data_inh_nnfft$(EXEEXT): $(reconstruct_data_inh_nnfft_OBJECTS) $(reconstruct_data_inh_nnfft_DEPENDENCIES) $(EXTRA_reconstruct_data_inh_nnfft_DEPENDENCIES)
+ @rm -f reconstruct_data_inh_nnfft$(EXEEXT)
+ $(LINK) $(reconstruct_data_inh_nnfft_OBJECTS) $(reconstruct_data_inh_nnfft_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/construct_data_2d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/construct_data_inh_2d1d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/construct_data_inh_3d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_2d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_gridding.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_inh_2d1d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_inh_3d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_inh_nnfft.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/mri/mri2d/README b/applications/mri/mri2d/README
new file mode 100644
index 0000000..ee6973c
--- /dev/null
+++ b/applications/mri/mri2d/README
@@ -0,0 +1,24 @@
+Based on the research paper:
+A note on the iterative MRI reconstruction from nonuniform k-space data
+
+by Tobias Knopp, Stefan Kunis and Daniel Potts
+Available from:
+http://www.mathematik.tu-chemnitz.de/~potts
+
+see also:
+http://www.tu-chemnitz.de/~potts/projecte/projekt_mri.php
+http://www.tu-chemnitz.de/~potts/projects/mri/
+
+Furthermore see the Paper
+Field Inhomogeneity Correction based on Gridding Reconstruction for Magnetic Resonance Imaging
+
+by H. Eggers, Tobias Knopp, and Daniel Potts
+
+--------------------------------------------------------------------
+
+Open MATLAB and run the script file mri.m or mri_inh.m.
+mri.m and mri_inh are an examples for the usage of the programs.
+mri.m uses a simple model without considering a field inhomogenity
+against what mri_inh.m considers the field inhomogeneity
+
+For questions mail us: tobias.knopp at informatik.uni-luebeck.de
diff --git a/applications/mri/mri2d/construct_data_2d.c b/applications/mri/mri2d/construct_data_2d.c
new file mode 100644
index 0000000..fa36e56
--- /dev/null
+++ b/applications/mri/mri2d/construct_data_2d.c
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: construct_data_2d.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/**
+ * \defgroup applications_mri2d_construct_data_2d construct_data_2d
+ * \ingroup applications_mri2d
+ * \{
+ */
+
+/**
+ * construct makes an 2d-nfft
+ */
+static void construct(char * file, int N, int M)
+{
+ int j,k; /* some variables */
+ double real;
+ nfft_plan my_plan; /* plan for the two dimensional nfft */
+ FILE* fp;
+ FILE* fk;
+ FILE* fi;
+
+ /* initialise my_plan */
+ nfft_init_2d(&my_plan,N,N,M);
+
+ fp=fopen("knots.dat","r");
+
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fscanf(fp,"%le %le ",&my_plan.x[2*j+0],&my_plan.x[2*j+1]);
+ }
+ fclose(fp);
+
+ fi=fopen("input_f.dat","r");
+ fk=fopen(file,"w");
+
+ for(j=0;j<N;j++)
+ {
+ for(k=0;k<N;k++) {
+ fscanf(fi,"%le ",&real);
+ my_plan.f_hat[(N*j+k)] = real;
+ }
+ }
+
+ if(my_plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_plan);
+
+ nfft_trafo(&my_plan);
+
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fprintf(fk,"%le %le %le %le\n",my_plan.x[2*j+0],my_plan.x[2*j+1],creal(my_plan.f[j]),cimag(my_plan.f[j]));
+ }
+ fclose(fk);
+ fclose(fi);
+
+ nfft_finalize(&my_plan);
+}
+
+int main(int argc, char **argv)
+{
+ if (argc <= 3) {
+ printf("usage: ./construct_data FILENAME N M\n");
+ return 1;
+ }
+
+ construct(argv[1],atoi(argv[2]),atoi(argv[3]));
+
+ return 1;
+}
+/* \} */
diff --git a/applications/mri/mri2d/construct_data_inh_2d1d.c b/applications/mri/mri2d/construct_data_inh_2d1d.c
new file mode 100644
index 0000000..b4e2d4f
--- /dev/null
+++ b/applications/mri/mri2d/construct_data_inh_2d1d.c
@@ -0,0 +1,157 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: construct_data_inh_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#include <limits.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3.h"
+#include "nfft3util.h"
+
+/**
+ * \defgroup applications_mri2d_construct_data_inh_2d1d construct_data__inh_2d1d
+ * \ingroup applications_mri2d
+ * \{
+ */
+
+/**
+ * construct
+ */
+static void construct(char * file, int N, int M)
+{
+ int j; /* some variables */
+ double real;
+ double w;
+ double time,min_time,max_time,min_inh,max_inh;
+ mri_inh_2d1d_plan my_plan;
+ FILE *fp,*fout,*fi,*finh,*ftime;
+ int my_N[3],my_n[3];
+ int flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|
+ MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE|
+ FFTW_MEASURE| FFTW_DESTROY_INPUT;
+
+ double Ts;
+ double W,T;
+ int N3;
+ int m=2;
+ double sigma = 1.25;
+
+ ftime=fopen("readout_time.dat","r");
+ finh=fopen("inh.dat","r");
+
+ min_time=INT_MAX; max_time=INT_MIN;
+ for(j=0;j<M;j++)
+ {
+ fscanf(ftime,"%le ",&time);
+ if(time<min_time)
+ min_time = time;
+ if(time>max_time)
+ max_time = time;
+ }
+
+ fclose(ftime);
+
+ Ts=(min_time+max_time)/2.0;
+
+ min_inh=INT_MAX; max_inh=INT_MIN;
+ for(j=0;j<N*N;j++)
+ {
+ fscanf(finh,"%le ",&w);
+ if(w<min_inh)
+ min_inh = w;
+ if(w>max_inh)
+ max_inh = w;
+ }
+ fclose(finh);
+
+
+ N3=ceil((NFFT_MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);
+ T=((max_time-min_time)/2.0)/(0.5-((double) m)/N3);
+ W=N3/T;
+
+ my_N[0]=N; my_n[0]=ceil(N*sigma);
+ my_N[1]=N; my_n[1]=ceil(N*sigma);
+ my_N[2]=N3; my_n[2]=N3;
+
+ /* initialise nfft */
+ mri_inh_2d1d_init_guru(&my_plan, my_N, M, my_n, m, sigma, flags,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ ftime=fopen("readout_time.dat","r");
+ fp=fopen("knots.dat","r");
+
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fscanf(fp,"%le %le ",&my_plan.plan.x[2*j+0],&my_plan.plan.x[2*j+1]);
+ fscanf(ftime,"%le ",&my_plan.t[j]);
+ my_plan.t[j] = (my_plan.t[j]-Ts)/T;
+ }
+ fclose(fp);
+ fclose(ftime);
+
+ finh=fopen("inh.dat","r");
+ for(j=0;j<N*N;j++)
+ {
+ fscanf(finh,"%le ",&my_plan.w[j]);
+ my_plan.w[j]/=W;
+ }
+ fclose(finh);
+
+
+ fi=fopen("input_f.dat","r");
+ for(j=0;j<N*N;j++)
+ {
+ fscanf(fi,"%le ",&real);
+ my_plan.f_hat[j] = real*cexp(2.0*_Complex_I*PI*Ts*my_plan.w[j]*W);
+ }
+
+ if(my_plan.plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_plan.plan);
+
+ mri_inh_2d1d_trafo(&my_plan);
+
+ fout=fopen(file,"w");
+
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fprintf(fout,"%le %le %le %le\n",my_plan.plan.x[2*j+0],my_plan.plan.x[2*j+1],creal(my_plan.f[j]),cimag(my_plan.f[j]));
+ }
+
+ fclose(fout);
+
+ mri_inh_2d1d_finalize(&my_plan);
+}
+
+int main(int argc, char **argv)
+{
+ if (argc <= 3) {
+ printf("usage: ./construct_data_inh_2d1d FILENAME N M\n");
+ return 1;
+ }
+
+ construct(argv[1],atoi(argv[2]),atoi(argv[3]));
+
+ return 1;
+}
+/* \} */
diff --git a/applications/mri/mri2d/construct_data_inh_3d.c b/applications/mri/mri2d/construct_data_inh_3d.c
new file mode 100644
index 0000000..1000a7c
--- /dev/null
+++ b/applications/mri/mri2d/construct_data_inh_3d.c
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: construct_data_inh_3d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#include <limits.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3.h"
+#include "nfft3util.h"
+
+/**
+ * \defgroup applications_mri2d_construct_data_inh_3d construct_data_inh_3d
+ * \ingroup applications_mri2d
+ * \{
+ */
+
+/**
+ * construct
+ */
+static void construct(char * file, int N, int M)
+{
+ int j; /* some variables */
+ double real;
+ double w;
+ double time,min_time,max_time,min_inh,max_inh;
+ mri_inh_3d_plan my_plan;
+ FILE *fp,*fout,*fi,*finh,*ftime;
+ int my_N[3],my_n[3];
+ int flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|
+ MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE|
+ FFTW_MEASURE| FFTW_DESTROY_INPUT;
+
+ double Ts;
+ double W;
+ int N3;
+ int m=2;
+ double sigma = 1.25;
+
+ ftime=fopen("readout_time.dat","r");
+ finh=fopen("inh.dat","r");
+
+ min_time=INT_MAX; max_time=INT_MIN;
+ for(j=0;j<M;j++)
+ {
+ fscanf(ftime,"%le ",&time);
+ if(time<min_time)
+ min_time = time;
+ if(time>max_time)
+ max_time = time;
+ }
+
+ fclose(ftime);
+
+ Ts=(min_time+max_time)/2.0;
+
+ min_inh=INT_MAX; max_inh=INT_MIN;
+ for(j=0;j<N*N;j++)
+ {
+ fscanf(finh,"%le ",&w);
+ if(w<min_inh)
+ min_inh = w;
+ if(w>max_inh)
+ max_inh = w;
+ }
+ fclose(finh);
+
+ N3=ceil((NFFT_MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);
+
+ W= NFFT_MAX(fabs(min_inh),fabs(max_inh))/(0.5-((double)m)/N3);
+
+ my_N[0]=N; my_n[0]=ceil(N*sigma);
+ my_N[1]=N; my_n[1]=ceil(N*sigma);
+ my_N[2]=N3; my_n[2]=ceil(N3*sigma);
+
+ /* initialise nfft */
+ mri_inh_3d_init_guru(&my_plan, my_N, M, my_n, m, sigma, flags,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ ftime=fopen("readout_time.dat","r");
+ fp=fopen("knots.dat","r");
+
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fscanf(fp,"%le %le",&my_plan.plan.x[3*j+0],&my_plan.plan.x[3*j+1]);
+ fscanf(ftime,"%le ",&my_plan.plan.x[3*j+2]);
+ my_plan.plan.x[3*j+2] = (my_plan.plan.x[3*j+2]-Ts)*W/N3;
+ }
+ fclose(fp);
+ fclose(ftime);
+
+ finh=fopen("inh.dat","r");
+ for(j=0;j<N*N;j++)
+ {
+ fscanf(finh,"%le ",&my_plan.w[j]);
+ my_plan.w[j]/=W;
+ }
+ fclose(finh);
+
+
+ fi=fopen("input_f.dat","r");
+ for(j=0;j<N*N;j++)
+ {
+ fscanf(fi,"%le ",&real);
+ my_plan.f_hat[j] = real*cexp(2.0*_Complex_I*PI*Ts*my_plan.w[j]*W);
+ }
+
+ if(my_plan.plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_plan.plan);
+
+ mri_inh_3d_trafo(&my_plan);
+
+ fout=fopen(file,"w");
+
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fprintf(fout,"%le %le %le %le\n",my_plan.plan.x[3*j+0],my_plan.plan.x[3*j+1],creal(my_plan.f[j]),cimag(my_plan.f[j]));
+ }
+
+ fclose(fout);
+
+ mri_inh_3d_finalize(&my_plan);
+}
+
+int main(int argc, char **argv)
+{
+ if (argc <= 3) {
+ printf("usage: ./construct_data_inh_3d FILENAME N M\n");
+ return 1;
+ }
+
+ construct(argv[1],atoi(argv[2]),atoi(argv[3]));
+
+ return 1;
+}
+/* \} */
diff --git a/applications/mri/mri2d/construct_inh.m b/applications/mri/mri2d/construct_inh.m
new file mode 100644
index 0000000..09ae481
--- /dev/null
+++ b/applications/mri/mri2d/construct_inh.m
@@ -0,0 +1,27 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_inh.m 3776 2012-06-03 13:29:25Z keiner $
+function [] = construct_inh( N )
+out=zeros(N*N,1);
+
+for k=1:N,
+ for j=1:N,
+ out((k-1)*N+j) = (((k-N/2)/(N/sqrt(2)))^2+((j-N/2)/(N/sqrt(2)))^2)/2 -0.5/2;
+ end
+end
+
+save inh.dat -ascii out
diff --git a/applications/mri/mri2d/construct_knots_linogram.m b/applications/mri/mri2d/construct_knots_linogram.m
new file mode 100644
index 0000000..a3d68bf
--- /dev/null
+++ b/applications/mri/mri2d/construct_knots_linogram.m
@@ -0,0 +1,31 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_linogram.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_linogram ( N )
+
+l=((-N/2):(N/2-1));
+k=((-N):(N-1))';
+
+x=[reshape(k*l/N^2,2*N^2,1) kron(ones(N,1),k/2/N);
+ kron(ones(N,1),k/2/N) reshape(-k*l/N^2,2*N^2,1)];
+
+% feel free to plot the knots by uncommenting
+% plot(x(:,1),x(:,2),'r.')
+
+save knots.dat -ascii x
+
+M=size(x,1);
diff --git a/applications/mri/mri2d/construct_knots_radial.m b/applications/mri/mri2d/construct_knots_radial.m
new file mode 100644
index 0000000..7214a35
--- /dev/null
+++ b/applications/mri/mri2d/construct_knots_radial.m
@@ -0,0 +1,39 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_radial.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_radial( N )
+
+A=N*2;
+P=410/512*A;
+M=A*P;
+file=zeros(P*A,2);
+for i=1:P
+ for j=1:A,
+ if mod(i,2) == 0,
+ r=(j-1)/A - 1/2;
+ else
+ r=-(j-1)/A + 1/2;
+ end
+ file((i-1)*A+j,1)=r*sin((i-1)*pi/P);
+ file((i-1)*A+j,2)=r*cos((i-1)*pi/P);
+ end
+end
+
+% feel free to plot the knots by uncommenting
+% plot(file(:,1),file(:,2),'.-');
+
+save knots.dat -ascii file
diff --git a/applications/mri/mri2d/construct_knots_rose.m b/applications/mri/mri2d/construct_knots_rose.m
new file mode 100644
index 0000000..33263ef
--- /dev/null
+++ b/applications/mri/mri2d/construct_knots_rose.m
@@ -0,0 +1,41 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_rose.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_rose( N )
+
+N=ceil(1.5*N);
+B=1;
+M=N^2;
+file = zeros(M,2);
+
+A=0.5;
+
+w=N/64*50;
+
+for b=0:B-1,
+for i=1:M/B,
+ t=i/(M/B);
+ file(b*M/B+i,1) = A*cos(2*pi*w*t)*cos(2*pi*t+b*2*pi/B);
+
+ file(b*M/B+i,2) = A*cos(2*pi*w*t)*sin(2*pi*t+b*2*pi/B);
+end
+end
+
+% feel free to plot the knots by uncommenting
+% plot(file(:,1),file(:,2),'.-');
+
+save knots.dat -ascii file
diff --git a/applications/mri/mri2d/construct_knots_spiral.m b/applications/mri/mri2d/construct_knots_spiral.m
new file mode 100644
index 0000000..a6691a3
--- /dev/null
+++ b/applications/mri/mri2d/construct_knots_spiral.m
@@ -0,0 +1,42 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_spiral.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_spiral ( N,arms )
+M=N^2;
+file = zeros(M,2);
+
+A=0.5;
+
+w=N/64*50;
+
+hold on;
+
+for b=0:arms-1,
+ for i=1:M/arms,
+ t=((i-1)/(M/arms))^(1/2);
+ file(b*M/arms+i,1) = A*t*cos(2*pi*(w*t+b/arms));
+
+ file(b*M/arms+i,2) = A*t*sin(2*pi*(w*t+b/arms));
+ end
+ % plot(file(b*M/arms+1:(b+1)*M/arms,1),file(b*M/arms+1:(b+1)*M/arms,2),'-');
+end
+hold off;
+
+% feel free to plot the knots by uncommenting
+% plot(file(:,1),file(:,2),'.');
+
+save knots.dat -ascii file
diff --git a/applications/mri/mri2d/construct_readout_time.m b/applications/mri/mri2d/construct_readout_time.m
new file mode 100644
index 0000000..9545cc9
--- /dev/null
+++ b/applications/mri/mri2d/construct_readout_time.m
@@ -0,0 +1,29 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_readout_time.m 3776 2012-06-03 13:29:25Z keiner $
+% constructs a three dimensional Shepp Logan phantom
+function [M] = construct_readout_time( M, Te, arms, increment )
+
+out=zeros(M,1);
+
+for j=1:M,
+ out(j) = mod(j-1,M/arms)*increment + Te;
+end
+
+%0.00402542373
+
+save readout_time.dat -ascii out
diff --git a/applications/mri/mri2d/doxygen.h b/applications/mri/mri2d/doxygen.h
new file mode 100644
index 0000000..407d638
--- /dev/null
+++ b/applications/mri/mri2d/doxygen.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */
+
+/**
+ * \defgroup applications_mri2d 2D transforms
+ * \ingroup applications_mri
+ */
diff --git a/applications/mri/mri2d/mri.m b/applications/mri/mri2d/mri.m
new file mode 100644
index 0000000..a483e36
--- /dev/null
+++ b/applications/mri/mri2d/mri.m
@@ -0,0 +1,69 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: mri.m 3776 2012-06-03 13:29:25Z keiner $
+% This script file is an example of the usage
+
+N=128; % points per row / column
+
+% Construct the raw data of the phantom
+% and write it to input_f.dat
+% To use another example than the phantom
+% just put the reshape of your example into input_data_f.dat
+output = reshape(phantom(N),1,N*N);
+save input_f.dat -ascii output
+
+% Construct the knots in k-space and write them to knots.dat
+% Different knots like spiral,rose,radial or linogram can be chosen
+% M is the number of knots
+M = construct_knots_spiral(N,1);
+
+% Make a 2d-NFFT on the constructed knots
+% and write the output to output_data_phantom_nfft.dat
+system(['./construct_data_2d ' 'output_phantom_nfft.dat ' ...
+ int2str(N) ' ' int2str(M)]);
+
+% Precompute the weights using voronoi cells
+% and write them to weights.dat
+precompute_weights('output_phantom_nfft.dat',M);
+
+% Make an inverse 2d-NFFT
+% and write the output to output_real.dat and output_imag.dat
+% The usage is "./reconstruct_data_2 filename N M ITER WEIGHTS"
+% where ITER is the number of iteration and WEIGHTS is 1
+% if the weights are used 0 else
+system(['./reconstruct_data_2d ' 'output_phantom_nfft.dat ' ...
+ int2str(N) ' ' int2str(M) ' 3 1']);
+
+% Visualize the two dimensional phantom. Make a pic
+% and one plot of the N/2 row
+visualize_data('pics/pic_2d', N, 1, 'Inverse 2d-NFFT - 3. iteration');
+
+% Compute the root mean square
+rms('pics/rms_2d.txt');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% The same as above but reconstructed with gridding
+% That means an adjoint 2d-NFFT
+% The ITER parameter is unused and just for compatibility
+system(['./reconstruct_data_gridding ' 'output_phantom_nfft.dat ' ...
+ int2str(N) ' ' int2str(M) ' 5 1']);
+visualize_data('pics/pic_gridding', N, 2, '2d-NFFT (Gridding)');
+rms('pics/rms_gridding.txt');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
diff --git a/applications/mri/mri2d/mri_inh.m b/applications/mri/mri2d/mri_inh.m
new file mode 100644
index 0000000..1f0ed1f
--- /dev/null
+++ b/applications/mri/mri2d/mri_inh.m
@@ -0,0 +1,69 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: mri_inh.m 3776 2012-06-03 13:29:25Z keiner $
+% This script file is an example of the usage
+
+N=128; % points per row / column
+arms=1; % number of spiral arms
+
+% Construct the spiral knots in k-space and write them to knots.dat
+% M is the number of knots
+M = construct_knots_spiral(N,arms);
+
+% Construct the file time.dat which contains the readout time
+construct_readout_time( M, 2, arms,0.0004);
+
+% Construct a fieldmap and write the output to inh.dat
+construct_inh(N);
+
+% Construct the raw data of the phantom
+% and write it to input_f.dat
+% To use another example than the phantom
+% just put the reshape of your example into input_data_f.dat
+out=reshape(phantom(N),1,N*N);
+save input_f.dat -ascii out
+
+% Construct the k-space data considering the fieldmap
+% and write the output to output_data_phantom_nfft.dat
+system(['./construct_data_inh_2d1d ' 'output_phantom_nfft.dat ' ...
+ int2str(N) ' ' int2str(M)]);
+
+% Precompute the weights using voronoi cells
+% and write them to weights.dat
+precompute_weights('output_phantom_nfft.dat',M);
+
+% Reconstruct with the 2d1d method
+% and write the output to output_real.dat and output_imag.dat
+% The usage is "./reconstruct_data_inh_2d1d filename N M ITER WEIGHTS"
+% where ITER is the number of iteration and WEIGHTS is 1
+% if the weights are used 0 else
+% The other methods can be used by replacing 2d1d with 3d or nnfft
+system(['./reconstruct_data_inh_2d1d ' 'output_phantom_nfft.dat ' ...
+ int2str(N) ' ' int2str(M) ' 3 1']);
+
+% Visualize the two dimensional phantom. Make a pic
+% and one plot of the N/2 row
+visualize_data('pics/pic_2d1d', N, 1, 'Reconstruction considering the fieldmap');
+
+% Compute the root mean square
+rms('pics/rms_2d1d.txt');
+
+% Reconstruct without considering the fieldmap
+system(['./reconstruct_data_2d ' 'output_phantom_nfft.dat ' ...
+ int2str(N) ' ' int2str(M) ' 3 1']);
+visualize_data('pics/pic_2d', N, 2, 'Inverse 2d-NFFT - 3. iteration');
+rms('pics/rms_2d.txt');
diff --git a/applications/mri/mri2d/phantom.m b/applications/mri/mri2d/phantom.m
new file mode 100644
index 0000000..3d17d08
--- /dev/null
+++ b/applications/mri/mri2d/phantom.m
@@ -0,0 +1,46 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: phantom.m 3776 2012-06-03 13:29:25Z keiner $
+function I=phantom(N)
+% phantom(N)
+% generates the (modified) Shepp-Logan phantom of P. Toft
+% as an NxN matrix.
+%
+% Reference: Peter Toft: "The Radon Transform - Theory and Implementation", Ph.D. thesis.
+% Department of Mathematical Modelling, Technical University of Denmark, June 1996. 326 pages.
+
+% Author: Markus Fenn, 2005
+
+I = zeros(N,N);
+
+k = linspace(-1,1,N);
+[x,y] = meshgrid(k);
+
+I = I + 1.0 * ( (x/0.69).^2+(y/0.92).^2 <= 1 );
+I = I - 0.8 * ( (x/0.6624).^2+((y+0.0184)/0.874).^2 <= 1 );
+I = I - 0.2 * ( ( (cos(-18/360*2*pi)*(x-0.22)+sin(-18/360*2*pi)*y)/0.11).^2+...
+ ( (sin(-18/360*2*pi)*(x-0.22)-cos(-18/360*2*pi)*y)/0.31).^2 <= 1 );
+I = I - 0.2 * ( ( (cos( 18/360*2*pi)*(x+0.22)+sin( 18/360*2*pi)*y)/0.16).^2+...
+ ( (sin( 18/360*2*pi)*(x+0.22)-cos( 18/360*2*pi)*y)/0.41).^2 <= 1 );
+I = I + 0.1 * ( (x/0.21).^2+((y-0.35)/0.25).^2 <= 1 );
+I = I + 0.1 * ( (x/0.046).^2+((y-0.1)/0.046).^2 <= 1 );
+I = I + 0.1 * ( (x/0.046).^2+((y+0.1)/0.046).^2 <= 1 );
+I = I + 0.1 * ( ((x+0.08)/0.046).^2+((y+0.605)/0.023).^2 <= 1 );
+I = I + 0.1 * ( (x/0.023).^2+((y+0.606)/0.023).^2 <= 1 );
+I = I + 0.1 * ( ((x-0.06)/0.023).^2+((y+0.605)/0.046).^2 <= 1 );
+
+I=flipud(I);
diff --git a/applications/mri/mri2d/precompute_weights.m b/applications/mri/mri2d/precompute_weights.m
new file mode 100644
index 0000000..7ff5e9c
--- /dev/null
+++ b/applications/mri/mri2d/precompute_weights.m
@@ -0,0 +1,69 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: precompute_weights.m 3776 2012-06-03 13:29:25Z keiner $
+function [] = precompute_weights ( file, M )
+
+input=load(file);
+
+kx = input(1:M,1);
+ky = input(1:M,2);
+
+kxy=[kx ky];
+
+% compute the voronoi regions
+[V,C] = voronoin(kxy,{'QJ'});
+
+% the surface of the knots is written to area
+area = [];
+
+% sum of all surfaces
+sum_area = 0;
+
+% the maximum distance two nearest neighbour have
+% to get the surface we store max_distance^2
+max_distance=0;
+
+% compute the surface of the knots
+for j= 1:length(kxy)
+ x = V(C{j},1);
+ y = V(C{j},2);
+ lxy = length(x);
+ if(lxy==0) % a knot exists more than one time
+ A=0;
+ else
+ A = abs(sum(0.5*(x([2:lxy 1])-x(:)).* ...
+ (y([2:lxy 1]) + y(:))));
+ end
+ area = [area A];
+ min_distance = min((2*(x-kxy(j,1))).^2+(2*(y-kxy(j,2))).^2);
+ max_distance = max([max_distance min_distance]);
+end
+
+% if the surface of a knot is bigger than max_distance^2
+% or isnan or isinf, then take max_distance^2
+for j=1:length(area),
+ if(isnan(area(j)) | isinf(area(j))| area(j)>max_distance),
+ area(j)=max_distance;
+ end
+ sum_area = sum_area + area(j);
+end
+
+% norm the weights
+area = area / sum_area;
+
+save weights.dat -ascii area
+
diff --git a/applications/mri/mri2d/reconstruct_data_2d.c b/applications/mri/mri2d/reconstruct_data_2d.c
new file mode 100644
index 0000000..52214b2
--- /dev/null
+++ b/applications/mri/mri2d/reconstruct_data_2d.c
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: reconstruct_data_2d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <math.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_mri2d_reconstruct_data_2d reconstruct_data_2d
+ * \ingroup applications_mri2d
+ * \{
+ */
+
+/**
+ * reconstruct makes an inverse 2d nfft
+ */
+static void reconstruct(char* filename,int N,int M,int iteration, int weight)
+{
+ int j,k,l; /* some variables */
+ ticks t0, t1;
+ double real,imag,t; /* to read the real and imag part of a complex number */
+ nfft_plan my_plan; /* plan for the two dimensional nfft */
+ solver_plan_complex my_iplan; /* plan for the two dimensional infft */
+ FILE* fin; /* input file */
+ FILE* fout_real; /* output file */
+ FILE* fout_imag; /* output file */
+ int my_N[2],my_n[2]; /* to init the nfft */
+ double epsilon=0.0000003; /* epsilon is a the break criterium for
+ the iteration */
+ unsigned infft_flags = CGNR | PRECOMPUTE_DAMP; /* flags for the infft*/
+ int m = 6;
+ double alpha = 2.0;
+ /* initialise my_plan */
+ my_N[0]=N; my_n[0]=ceil(N*alpha);
+ my_N[1]=N; my_n[1]=ceil(N*alpha);
+ nfft_init_guru(&my_plan, 2, my_N, M, my_n, m, PRE_PHI_HUT| PRE_PSI|
+ MALLOC_X| MALLOC_F_HAT| MALLOC_F|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /* precompute lin psi if set */
+ if(my_plan.nfft_flags & PRE_LIN_PSI)
+ nfft_precompute_lin_psi(&my_plan);
+
+ /* set the flags for the infft*/
+ if (weight)
+ infft_flags = infft_flags | PRECOMPUTE_WEIGHT;
+
+ /* initialise my_iplan, advanced */
+ solver_init_advanced_complex(&my_iplan,(nfft_mv_plan_complex*)&my_plan, infft_flags );
+
+ /* get the weights */
+ if(my_iplan.flags & PRECOMPUTE_WEIGHT)
+ {
+ fin=fopen("weights.dat","r");
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fscanf(fin,"%le ",&my_iplan.w[j]);
+ }
+ fclose(fin);
+ }
+
+ /* get the damping factors */
+ if(my_iplan.flags & PRECOMPUTE_DAMP)
+ {
+ for(j=0;j<N;j++){
+ for(k=0;k<N;k++) {
+ int j2= j-N/2;
+ int k2= k-N/2;
+ double r=sqrt(j2*j2+k2*k2);
+ if(r>(double) N/2)
+ my_iplan.w_hat[j*N+k]=0.0;
+ else
+ my_iplan.w_hat[j*N+k]=1.0;
+ }
+ }
+ }
+
+ /* open the input file */
+ fin=fopen(filename,"r");
+
+ /* read x,y,freal and fimag from the knots */
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fscanf(fin,"%le %le %le %le ",&my_plan.x[2*j+0],&my_plan.x[2*j+1],
+ &real,&imag);
+ my_iplan.y[j] = real + _Complex_I*imag;
+ }
+
+ fclose(fin);
+
+ /* precompute psi */
+ if(my_plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_plan);
+
+ /* precompute full psi */
+ if(my_plan.nfft_flags & PRE_FULL_PSI)
+ nfft_precompute_full_psi(&my_plan);
+
+ /* init some guess */
+ for(k=0;k<my_plan.N_total;k++)
+ my_iplan.f_hat_iter[k]=0.0;
+
+ t0 = getticks();
+
+ /* inverse trafo */
+ solver_before_loop_complex(&my_iplan);
+ for(l=0;l<iteration;l++)
+ {
+ /* break if dot_r_iter is smaller than epsilon*/
+ if(my_iplan.dot_r_iter<epsilon)
+ break;
+ fprintf(stderr,"%e, %i of %i\n",sqrt(my_iplan.dot_r_iter),
+ l+1,iteration);
+ solver_loop_one_step_complex(&my_iplan);
+ }
+
+
+ t1 = getticks();
+ t=nfft_elapsed_seconds(t1,t0);
+
+ fout_real=fopen("output_real.dat","w");
+ fout_imag=fopen("output_imag.dat","w");
+
+ for(k=0;k<my_plan.N_total;k++) {
+ fprintf(fout_real,"%le ", creal(my_iplan.f_hat_iter[k]));
+ fprintf(fout_imag,"%le ", cimag(my_iplan.f_hat_iter[k]));
+ }
+
+ fclose(fout_real);
+ fclose(fout_imag);
+
+ /* finalize the infft */
+ solver_finalize_complex(&my_iplan);
+
+ /* finalize the nfft */
+ nfft_finalize(&my_plan);
+}
+
+int main(int argc, char **argv)
+{
+ if (argc <= 5) {
+ printf("usage: ./reconstruct_data_2d FILENAME N M ITER WEIGHTS\n");
+ return 1;
+ }
+
+ reconstruct(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));
+
+ return 1;
+}
+/* \} */
diff --git a/applications/mri/mri2d/reconstruct_data_gridding.c b/applications/mri/mri2d/reconstruct_data_gridding.c
new file mode 100644
index 0000000..f003e80
--- /dev/null
+++ b/applications/mri/mri2d/reconstruct_data_gridding.c
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: reconstruct_data_gridding.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/**
+ * \defgroup applications_mri2d_construct_data_gridding construct_data_gridding
+ * \ingroup applications_mri2d
+ * \{
+ */
+
+/**
+ * reconstruct makes a 2d-adjoint-nfft
+ */
+static void reconstruct(char* filename, int N, int M, int weight)
+{
+ int j; /* some variables */
+ double weights; /* store one weight temporary */
+ double real,imag; /* to read the real and imag part of a complex number */
+ nfft_plan my_plan; /* plan for the two dimensional nfft */
+ FILE* fin; /* input file */
+ FILE* fweight; /* input file for the weights */
+ FILE *fout_real; /* output file */
+ FILE *fout_imag; /* output file */
+ int my_N[2],my_n[2];
+ int flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|
+ MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE|
+ FFTW_MEASURE| FFTW_DESTROY_INPUT;
+
+ /* initialise nfft */
+ my_N[0]=N; my_n[0]=ceil(N*1.2);
+ my_N[1]=N; my_n[1]=ceil(N*1.2);
+ nfft_init_guru(&my_plan, 2, my_N, M, my_n, 6,flags,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ fin=fopen(filename,"r");
+
+ fweight=fopen("weights.dat","r");
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fscanf(fweight,"%le ",&weights);
+ fscanf(fin,"%le %le %le %le",&my_plan.x[2*j+0],&my_plan.x[2*j+1],&real,&imag);
+ my_plan.f[j] = real + _Complex_I*imag;
+ if (weight)
+ my_plan.f[j] = my_plan.f[j] * weights;
+ }
+ fclose(fweight);
+
+ /* precompute psi */
+ if(my_plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_plan);
+
+ /* precompute full psi */
+ if(my_plan.nfft_flags & PRE_FULL_PSI)
+ nfft_precompute_full_psi(&my_plan);
+
+
+ /* compute the adjoint nfft */
+ nfft_adjoint(&my_plan);
+
+ fout_real=fopen("output_real.dat","w");
+ fout_imag=fopen("output_imag.dat","w");
+
+ for (j=0;j<N*N;j++) {
+ fprintf(fout_real,"%le ",creal(my_plan.f_hat[j]));
+ fprintf(fout_imag,"%le ",cimag(my_plan.f_hat[j]));
+ }
+
+ fclose(fin);
+ fclose(fout_real);
+ fclose(fout_imag);
+
+ nfft_finalize(&my_plan);
+}
+
+
+int main(int argc, char **argv)
+{
+ if (argc <= 5) {
+ printf("usage: ./reconstruct_data_gridding FILENAME N M ITER WEIGHTS\n");
+ return 1;
+ }
+ reconstruct(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[5]));
+
+ return 1;
+}
+/* \} */
diff --git a/applications/mri/mri2d/reconstruct_data_inh_2d1d.c b/applications/mri/mri2d/reconstruct_data_inh_2d1d.c
new file mode 100644
index 0000000..f8bfadd
--- /dev/null
+++ b/applications/mri/mri2d/reconstruct_data_inh_2d1d.c
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: reconstruct_data_inh_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#include <limits.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3.h"
+#include "nfft3util.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_mri2d_reconstruct_data_inh_2d1d reconstruct_data__inh_2d1d
+ * \ingroup applications_mri2d
+ * \{
+ */
+
+static void reconstruct(char* filename,int N,int M,int iteration , int weight)
+{
+ int j,k,l;
+ double time,min_time,max_time,min_inh,max_inh;
+ ticks t0, t1;
+ double t,real,imag;
+ double w,epsilon=0.0000003; /* epsilon is a the break criterium for
+ the iteration */;
+ mri_inh_2d1d_plan my_plan;
+ solver_plan_complex my_iplan;
+ FILE* fp,*fw,*fout_real,*fout_imag,*finh,*ftime;
+ int my_N[3],my_n[3];
+ int flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|
+ MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE;
+ unsigned infft_flags = CGNR | PRECOMPUTE_DAMP;
+
+ double Ts;
+ double W,T;
+ int N3;
+ int m=2;
+ double sigma = 1.25;
+
+ ftime=fopen("readout_time.dat","r");
+ finh=fopen("inh.dat","r");
+
+ min_time=INT_MAX; max_time=INT_MIN;
+ for(j=0;j<M;j++)
+ {
+ fscanf(ftime,"%le ",&time);
+ if(time<min_time)
+ min_time = time;
+ if(time>max_time)
+ max_time = time;
+ }
+
+ fclose(ftime);
+
+ Ts=(min_time+max_time)/2.0;
+
+
+ min_inh=INT_MAX; max_inh=INT_MIN;
+ for(j=0;j<N*N;j++)
+ {
+ fscanf(finh,"%le ",&w);
+ if(w<min_inh)
+ min_inh = w;
+ if(w>max_inh)
+ max_inh = w;
+ }
+ fclose(finh);
+
+ N3=ceil((NFFT_MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+(m)/(2*sigma))*4*sigma);
+ /* N3 has to be even */
+ if(N3%2!=0)
+ N3++;
+
+ T=((max_time-min_time)/2.0)/(0.5-((double) (m))/N3);
+ W=N3/T;
+
+ my_N[0]=N; my_n[0]=ceil(N*sigma);
+ my_N[1]=N; my_n[1]=ceil(N*sigma);
+ my_N[2]=N3; my_n[2]=N3;
+
+ /* initialise nfft */
+ mri_inh_2d1d_init_guru(&my_plan, my_N, M, my_n, m, sigma, flags,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+
+ /* precompute lin psi if set */
+ if(my_plan.plan.nfft_flags & PRE_LIN_PSI)
+ nfft_precompute_lin_psi(&my_plan.plan);
+
+ if (weight)
+ infft_flags = infft_flags | PRECOMPUTE_WEIGHT;
+
+ /* initialise my_iplan, advanced */
+ solver_init_advanced_complex(&my_iplan,(nfft_mv_plan_complex*)(&my_plan), infft_flags );
+
+ /* get the weights */
+ if(my_iplan.flags & PRECOMPUTE_WEIGHT)
+ {
+ fw=fopen("weights.dat","r");
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fscanf(fw,"%le ",&my_iplan.w[j]);
+ }
+ fclose(fw);
+ }
+
+ /* get the damping factors */
+ if(my_iplan.flags & PRECOMPUTE_DAMP)
+ {
+ for(j=0;j<N;j++){
+ for(k=0;k<N;k++) {
+ int j2= j-N/2;
+ int k2= k-N/2;
+ double r=sqrt(j2*j2+k2*k2);
+ if(r>(double) N/2)
+ my_iplan.w_hat[j*N+k]=0.0;
+ else
+ my_iplan.w_hat[j*N+k]=1.0;
+ }
+ }
+ }
+
+ fp=fopen(filename,"r");
+ ftime=fopen("readout_time.dat","r");
+
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fscanf(fp,"%le %le %le %le",&my_plan.plan.x[2*j+0],&my_plan.plan.x[2*j+1],&real,&imag);
+ my_iplan.y[j]=real+ _Complex_I*imag;
+ fscanf(ftime,"%le ",&my_plan.t[j]);
+
+ my_plan.t[j] = (my_plan.t[j]-Ts)/T;
+ }
+ fclose(fp);
+ fclose(ftime);
+
+
+ finh=fopen("inh.dat","r");
+ for(j=0;j<N*N;j++)
+ {
+ fscanf(finh,"%le ",&my_plan.w[j]);
+ my_plan.w[j]/=W;
+ }
+ fclose(finh);
+
+
+ if(my_plan.plan.nfft_flags & PRE_PSI) {
+ nfft_precompute_psi(&my_plan.plan);
+ }
+ if(my_plan.plan.nfft_flags & PRE_FULL_PSI) {
+ nfft_precompute_full_psi(&my_plan.plan);
+ }
+
+ /* init some guess */
+ for(j=0;j<my_plan.N_total;j++)
+ {
+ my_iplan.f_hat_iter[j]=0.0;
+ }
+
+ t0 = getticks();
+
+ /* inverse trafo */
+ solver_before_loop_complex(&my_iplan);
+ for(l=0;l<iteration;l++)
+ {
+ /* break if dot_r_iter is smaller than epsilon*/
+ if(my_iplan.dot_r_iter<epsilon)
+ break;
+ fprintf(stderr,"%e, %i of %i\n",sqrt(my_iplan.dot_r_iter),
+ l+1,iteration);
+ solver_loop_one_step_complex(&my_iplan);
+ }
+
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+
+ fout_real=fopen("output_real.dat","w");
+ fout_imag=fopen("output_imag.dat","w");
+
+ for (j=0;j<N*N;j++) {
+ /* Verschiebung wieder herausrechnen */
+ my_iplan.f_hat_iter[j]*=cexp(-2.0*_Complex_I*PI*Ts*my_plan.w[j]*W);
+
+ fprintf(fout_real,"%le ",creal(my_iplan.f_hat_iter[j]));
+ fprintf(fout_imag,"%le ",cimag(my_iplan.f_hat_iter[j]));
+ }
+
+ fclose(fout_real);
+ fclose(fout_imag);
+ solver_finalize_complex(&my_iplan);
+ mri_inh_2d1d_finalize(&my_plan);
+}
+
+
+int main(int argc, char **argv)
+{
+ if (argc <= 5) {
+
+ printf("usage: ./reconstruct_data_inh_2d1d FILENAME N M ITER WEIGHTS\n");
+ return 1;
+ }
+
+ reconstruct(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));
+
+ return 1;
+}
+/* \} */
diff --git a/applications/mri/mri2d/reconstruct_data_inh_3d.c b/applications/mri/mri2d/reconstruct_data_inh_3d.c
new file mode 100644
index 0000000..130d529
--- /dev/null
+++ b/applications/mri/mri2d/reconstruct_data_inh_3d.c
@@ -0,0 +1,222 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: reconstruct_data_inh_3d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#include <limits.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3.h"
+#include "nfft3util.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_mri2d_reconstruct_data_inh_3d reconstruct_data_inh_3d
+ * \ingroup applications_mri2d
+ * \{
+ */
+
+static void reconstruct(char* filename,int N,int M,int iteration , int weight)
+{
+ int j,k,l;
+ ticks t0, t1;
+ double time,min_time,max_time,min_inh,max_inh;
+ double t,real,imag;
+ double w,epsilon=0.0000003; /* epsilon is a the break criterium for
+ the iteration */;
+ mri_inh_3d_plan my_plan;
+ solver_plan_complex my_iplan;
+ FILE* fp,*fw,*fout_real,*fout_imag,*finh,*ftime;
+ int my_N[3],my_n[3];
+ int flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|
+ MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE;
+ unsigned infft_flags = CGNR | PRECOMPUTE_DAMP;
+
+ double Ts;
+ double W;
+ int N3;
+ int m=2;
+ double sigma = 1.25;
+
+ ftime=fopen("readout_time.dat","r");
+ finh=fopen("inh.dat","r");
+
+ min_time=INT_MAX; max_time=INT_MIN;
+ for(j=0;j<M;j++)
+ {
+ fscanf(ftime,"%le ",&time);
+ if(time<min_time)
+ min_time = time;
+ if(time>max_time)
+ max_time = time;
+ }
+
+ fclose(ftime);
+
+ Ts=(min_time+max_time)/2.0;
+
+
+ min_inh=INT_MAX; max_inh=INT_MIN;
+ for(j=0;j<N*N;j++)
+ {
+ fscanf(finh,"%le ",&w);
+ if(w<min_inh)
+ min_inh = w;
+ if(w>max_inh)
+ max_inh = w;
+ }
+ fclose(finh);
+
+ N3=ceil((NFFT_MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);
+ /* N3 has to be even */
+ if(N3%2!=0)
+ N3++;
+
+ W= NFFT_MAX(fabs(min_inh),fabs(max_inh))/(0.5-((double) m)/N3);
+
+ my_N[0]=N;my_n[0]=ceil(N*sigma);
+ my_N[1]=N; my_n[1]=ceil(N*sigma);
+ my_N[2]=N3; my_n[2]=ceil(N3*sigma);
+
+ /* initialise nfft */
+ mri_inh_3d_init_guru(&my_plan, my_N, M, my_n, m, sigma, flags,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ if (weight)
+ infft_flags = infft_flags | PRECOMPUTE_WEIGHT;
+
+ /* initialise my_iplan, advanced */
+ solver_init_advanced_complex(&my_iplan,(nfft_mv_plan_complex*)(&my_plan), infft_flags );
+
+ /* get the weights */
+ if(my_iplan.flags & PRECOMPUTE_WEIGHT)
+ {
+ fw=fopen("weights.dat","r");
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fscanf(fw,"%le ",&my_iplan.w[j]);
+ }
+ fclose(fw);
+ }
+
+ /* get the damping factors */
+ if(my_iplan.flags & PRECOMPUTE_DAMP)
+ {
+ for(j=0;j<N;j++){
+ for(k=0;k<N;k++) {
+ int j2= j-N/2;
+ int k2= k-N/2;
+ double r=sqrt(j2*j2+k2*k2);
+ if(r>(double) N/2)
+ my_iplan.w_hat[j*N+k]=0.0;
+ else
+ my_iplan.w_hat[j*N+k]=1.0;
+ }
+ }
+ }
+
+ fp=fopen(filename,"r");
+ ftime=fopen("readout_time.dat","r");
+
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fscanf(fp,"%le %le %le %le",&my_plan.plan.x[3*j+0],&my_plan.plan.x[3*j+1],&real,&imag);
+ my_iplan.y[j]=real+ _Complex_I*imag;
+ fscanf(ftime,"%le ",&my_plan.plan.x[3*j+2]);
+
+ my_plan.plan.x[3*j+2] = (my_plan.plan.x[3*j+2]-Ts)*W/N3;
+ }
+ fclose(fp);
+ fclose(ftime);
+
+
+ finh=fopen("inh.dat","r");
+ for(j=0;j<N*N;j++)
+ {
+ fscanf(finh,"%le ",&my_plan.w[j]);
+ my_plan.w[j]/=W;
+ }
+ fclose(finh);
+
+
+ if(my_plan.plan.nfft_flags & PRE_PSI) {
+ nfft_precompute_psi(&my_plan.plan);
+ }
+ if(my_plan.plan.nfft_flags & PRE_FULL_PSI) {
+ nfft_precompute_full_psi(&my_plan.plan);
+ }
+
+ /* init some guess */
+ for(j=0;j<my_plan.N_total;j++)
+ {
+ my_iplan.f_hat_iter[j]=0.0;
+ }
+
+ t0 = getticks();
+
+ /* inverse trafo */
+ solver_before_loop_complex(&my_iplan);
+ for(l=0;l<iteration;l++)
+ {
+ /* break if dot_r_iter is smaller than epsilon*/
+ if(my_iplan.dot_r_iter<epsilon)
+ break;
+ fprintf(stderr,"%e, %i of %i\n",sqrt(my_iplan.dot_r_iter),
+ l+1,iteration);
+ solver_loop_one_step_complex(&my_iplan);
+ }
+
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+
+ fout_real=fopen("output_real.dat","w");
+ fout_imag=fopen("output_imag.dat","w");
+
+ for (j=0;j<N*N;j++) {
+ /* Verschiebung wieder herausrechnen */
+ my_iplan.f_hat_iter[j]*=cexp(-2.0*_Complex_I*PI*Ts*my_plan.w[j]*W);
+
+ fprintf(fout_real,"%le ",creal(my_iplan.f_hat_iter[j]));
+ fprintf(fout_imag,"%le ",cimag(my_iplan.f_hat_iter[j]));
+ }
+
+ fclose(fout_real);
+ fclose(fout_imag);
+ solver_finalize_complex(&my_iplan);
+ mri_inh_3d_finalize(&my_plan);
+}
+
+
+int main(int argc, char **argv)
+{
+ if (argc <= 5) {
+
+ printf("usage: ./reconstruct_data_inh_3d FILENAME N M ITER WEIGHTS\n");
+ return 1;
+ }
+
+ reconstruct(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));
+
+ return 1;
+}
+/* \} */
diff --git a/applications/mri/mri2d/reconstruct_data_inh_nnfft.c b/applications/mri/mri2d/reconstruct_data_inh_nnfft.c
new file mode 100644
index 0000000..cf71d04
--- /dev/null
+++ b/applications/mri/mri2d/reconstruct_data_inh_nnfft.c
@@ -0,0 +1,241 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: reconstruct_data_inh_nnfft.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#include <limits.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_mri2d_construct_data_inh_nnfft construct_data_inh_nnfft
+ * \ingroup applications_mri2d
+ * \{
+ */
+
+/**
+ * reconstruct
+ */
+static void reconstruct(char* filename,int N,int M,int iteration, int weight)
+{
+ int j,k,l; /* some variables */
+ nnfft_plan my_plan; /* plan for the two dimensional nfft */
+ solver_plan_complex my_iplan; /* plan for the two dimensional infft */
+ FILE* fin; /* input file */
+ FILE* finh;
+ FILE* ftime;
+ FILE* fout_real; /* output file */
+ FILE* fout_imag; /* output file */
+ int my_N[3],my_n[3]; /* to init the nfft */
+ ticks t0, t1;
+ double t,epsilon=0.0000003; /* epsilon is a the break criterium for
+ the iteration */
+ unsigned infft_flags = CGNR | PRECOMPUTE_DAMP; /* flags for the infft*/
+ double time,min_time,max_time,min_inh,max_inh;
+ double real,imag;
+ double *w;
+
+ double Ts;
+ double W;
+ int N3;
+ int m=2;
+ double sigma = 1.25;
+
+ w = (double*)nfft_malloc(N*N*sizeof(double));
+
+ ftime=fopen("readout_time.dat","r");
+ finh=fopen("inh.dat","r");
+
+ min_time=INT_MAX; max_time=INT_MIN;
+ for(j=0;j<M;j++)
+ {
+ fscanf(ftime,"%le ",&time);
+ if(time<min_time)
+ min_time = time;
+ if(time>max_time)
+ max_time = time;
+ }
+
+ fclose(ftime);
+
+ Ts=(min_time+max_time)/2.0;
+
+ min_inh=INT_MAX; max_inh=INT_MIN;
+ for(j=0;j<N*N;j++)
+ {
+ fscanf(finh,"%le ",&w[j]);
+ if(w[j]<min_inh)
+ min_inh = w[j];
+ if(w[j]>max_inh)
+ max_inh = w[j];
+ }
+ fclose(finh);
+
+ N3=ceil((NFFT_MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0)*4);
+
+
+ W=NFFT_MAX(fabs(min_inh),fabs(max_inh))*2.0;
+
+ fprintf(stderr,"3: %i %e %e %e %e %e %e\n",N3,W,min_inh,max_inh,min_time,max_time,Ts);
+
+ /* initialise my_plan */
+ my_N[0]=N;my_n[0]=ceil(N*sigma);
+ my_N[1]=N; my_n[1]=ceil(N*sigma);
+ my_N[2]=N3; my_n[2]=ceil(N3*sigma);
+ nnfft_init_guru(&my_plan, 3, N*N, M, my_N,my_n,m,
+ PRE_PSI| PRE_PHI_HUT| MALLOC_X| MALLOC_V| MALLOC_F_HAT| MALLOC_F );
+
+ /* precompute lin psi if set */
+ if(my_plan.nnfft_flags & PRE_LIN_PSI)
+ nnfft_precompute_lin_psi(&my_plan);
+
+ /* set the flags for the infft*/
+ if (weight)
+ infft_flags = infft_flags | PRECOMPUTE_WEIGHT;
+
+ /* initialise my_iplan, advanced */
+ solver_init_advanced_complex(&my_iplan,(nfft_mv_plan_complex*)(&my_plan), infft_flags );
+
+ /* get the weights */
+ if(my_iplan.flags & PRECOMPUTE_WEIGHT)
+ {
+ fin=fopen("weights.dat","r");
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fscanf(fin,"%le ",&my_iplan.w[j]);
+ }
+ fclose(fin);
+ }
+
+ /* get the damping factors */
+ if(my_iplan.flags & PRECOMPUTE_DAMP)
+ {
+ for(j=0;j<N;j++){
+ for(k=0;k<N;k++) {
+ int j2= j-N/2;
+ int k2= k-N/2;
+ double r=sqrt(j2*j2+k2*k2);
+ if(r>(double) N/2)
+ my_iplan.w_hat[j*N+k]=0.0;
+ else
+ my_iplan.w_hat[j*N+k]=1.0;
+ }
+ }
+ }
+
+ /* open the input file */
+ fin=fopen(filename,"r");
+ ftime=fopen("readout_time.dat","r");
+
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fscanf(fin,"%le %le %le %le ",&my_plan.x[3*j+0],&my_plan.x[3*j+1],&real,&imag);
+ my_iplan.y[j]=real+ _Complex_I*imag;
+ fscanf(ftime,"%le ",&my_plan.x[3*j+2]);
+
+ my_plan.x[3*j+2] = (my_plan.x[3*j+2]-Ts)*W/N3;
+ }
+
+ for(j=0;j<N;j++)
+ {
+ for(l=0;l<N;l++)
+ {
+ my_plan.v[3*(N*j+l)+0]=(((double) j) -(((double) N)/2.0))/((double) N);
+ my_plan.v[3*(N*j+l)+1]=(((double) l) -(((double) N)/2.0))/((double) N);
+ my_plan.v[3*(N*j+l)+2] = w[N*j+l]/W ;
+ }
+ }
+
+ /* precompute psi */
+ if(my_plan.nnfft_flags & PRE_PSI) {
+ nnfft_precompute_psi(&my_plan);
+ if(my_plan.nnfft_flags & PRE_FULL_PSI)
+ nnfft_precompute_full_psi(&my_plan);
+ }
+
+ if(my_plan.nnfft_flags & PRE_PHI_HUT)
+ nnfft_precompute_phi_hut(&my_plan);
+
+ /* init some guess */
+ for(k=0;k<my_plan.N_total;k++)
+ {
+ my_iplan.f_hat_iter[k]=0.0;
+ }
+
+ t0 = getticks();
+
+ /* inverse trafo */
+ solver_before_loop_complex(&my_iplan);
+ for(l=0;l<iteration;l++)
+ {
+ /* break if dot_r_iter is smaller than epsilon*/
+ if(my_iplan.dot_r_iter<epsilon)
+ break;
+ fprintf(stderr,"%e, %i of %i\n",sqrt(my_iplan.dot_r_iter),
+ l+1,iteration);
+ solver_loop_one_step_complex(&my_iplan);
+ }
+
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+
+ fout_real=fopen("output_real.dat","w");
+ fout_imag=fopen("output_imag.dat","w");
+
+ for(k=0;k<my_plan.N_total;k++) {
+
+ my_iplan.f_hat_iter[k]*=cexp(2.0*_Complex_I*PI*Ts*w[k]);
+
+ fprintf(fout_real,"%le ", creal(my_iplan.f_hat_iter[k]));
+ fprintf(fout_imag,"%le ", cimag(my_iplan.f_hat_iter[k]));
+ }
+
+
+ fclose(fout_real);
+ fclose(fout_imag);
+
+
+ /* finalize the infft */
+ solver_finalize_complex(&my_iplan);
+
+ /* finalize the nfft */
+ nnfft_finalize(&my_plan);
+
+ nfft_free(w);
+}
+
+int main(int argc, char **argv)
+{
+ if (argc <= 5) {
+ printf("usage: ./reconstruct_data_inh_nnfft FILENAME N M ITER WEIGHTS\n");
+ return 1;
+ }
+
+ reconstruct(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));
+
+ return 1;
+}
+/* \} */
diff --git a/applications/mri/mri2d/rms.m b/applications/mri/mri2d/rms.m
new file mode 100644
index 0000000..6335d03
--- /dev/null
+++ b/applications/mri/mri2d/rms.m
@@ -0,0 +1,32 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: rms.m 3776 2012-06-03 13:29:25Z keiner $
+% computes the root mean square
+function [] = rms ( file )
+% load original data f
+load input_f.dat
+% load recontructed data f~
+load output_real.dat
+load output_imag.dat
+output = output_real+i*output_imag;
+
+% compute
+result = (norm(input_f - output) / norm(input_f) );
+
+
+% write the root mean square to file
+save(file,'result','-ascii');
diff --git a/applications/mri/mri2d/visualize_data.m b/applications/mri/mri2d/visualize_data.m
new file mode 100644
index 0000000..7cb9e7e
--- /dev/null
+++ b/applications/mri/mri2d/visualize_data.m
@@ -0,0 +1,49 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: visualize_data.m 3776 2012-06-03 13:29:25Z keiner $
+function [] = visualize_data ( file, N, num_fig, caption )
+
+load output_real.dat
+load output_imag.dat
+
+A=reshape(abs(output_real+i*output_imag),N,N);
+
+for k=1:N,
+ for l=1:N,
+ if sqrt((l-N/2)^2+(k-N/2)^2)>N/2,
+ A(k,l)=0;
+ end
+ end
+end
+
+% plot the two dimensional phantom
+figure(2*num_fig-1)
+imagesc(A, [0 1.2]);
+colormap(gray(256));
+colorbar;
+title(caption);
+file_out =[file '.jpg'];
+print('-djpeg',file_out);
+
+% plot the N/2 row
+figure(2*num_fig)
+file_out = [file 'row' '.png'];
+plot(1:N,A(N/2,:));
+axis([1 N 0 1.2]);
+title([caption ' - The ' int2str(N/2) 'th row']);
+print('-djpeg',file_out);
+
diff --git a/applications/mri/mri3d/Makefile.am b/applications/mri/mri3d/Makefile.am
new file mode 100644
index 0000000..a01853f
--- /dev/null
+++ b/applications/mri/mri3d/Makefile.am
@@ -0,0 +1,37 @@
+# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = \
+ construct_data_2d1d \
+ construct_data_3d \
+ reconstruct_data_gridding \
+ reconstruct_data_2d1d \
+ reconstruct_data_3d
+
+construct_data_2d1d_SOURCES = construct_data_2d1d.c doxygen.h
+construct_data_2d1d_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+construct_data_3d_SOURCES = construct_data_3d.c
+construct_data_3d_LDADD = $(top_builddir)/libnfft3.la
+
+reconstruct_data_gridding_SOURCES = reconstruct_data_gridding.c
+reconstruct_data_gridding_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+reconstruct_data_2d1d_SOURCES = reconstruct_data_2d1d.c
+reconstruct_data_2d1d_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+reconstruct_data_3d_SOURCES = reconstruct_data_3d.c
+reconstruct_data_3d_LDADD = $(top_builddir)/libnfft3.la
+
+EXTRA_DIST = mri.m \
+ construct_knots_linogram.m \
+ construct_knots_radial_3d.m \
+ construct_knots_radial.m \
+ construct_knots_rose.m \
+ construct_knots_spiral.m \
+ construct_phantom.m \
+ precompute_weights_2d.m \
+ rms.m \
+ visualize_data.m \
+ README
diff --git a/applications/mri/mri3d/Makefile.in b/applications/mri/mri3d/Makefile.in
new file mode 100644
index 0000000..70bce7f
--- /dev/null
+++ b/applications/mri/mri3d/Makefile.in
@@ -0,0 +1,612 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = construct_data_2d1d$(EXEEXT) \
+ construct_data_3d$(EXEEXT) reconstruct_data_gridding$(EXEEXT) \
+ reconstruct_data_2d1d$(EXEEXT) reconstruct_data_3d$(EXEEXT)
+subdir = applications/mri/mri3d
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_construct_data_2d1d_OBJECTS = construct_data_2d1d.$(OBJEXT)
+construct_data_2d1d_OBJECTS = $(am_construct_data_2d1d_OBJECTS)
+construct_data_2d1d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_construct_data_3d_OBJECTS = construct_data_3d.$(OBJEXT)
+construct_data_3d_OBJECTS = $(am_construct_data_3d_OBJECTS)
+construct_data_3d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_reconstruct_data_2d1d_OBJECTS = reconstruct_data_2d1d.$(OBJEXT)
+reconstruct_data_2d1d_OBJECTS = $(am_reconstruct_data_2d1d_OBJECTS)
+reconstruct_data_2d1d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_reconstruct_data_3d_OBJECTS = reconstruct_data_3d.$(OBJEXT)
+reconstruct_data_3d_OBJECTS = $(am_reconstruct_data_3d_OBJECTS)
+reconstruct_data_3d_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_reconstruct_data_gridding_OBJECTS = \
+ reconstruct_data_gridding.$(OBJEXT)
+reconstruct_data_gridding_OBJECTS = \
+ $(am_reconstruct_data_gridding_OBJECTS)
+reconstruct_data_gridding_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(construct_data_2d1d_SOURCES) $(construct_data_3d_SOURCES) \
+ $(reconstruct_data_2d1d_SOURCES) \
+ $(reconstruct_data_3d_SOURCES) \
+ $(reconstruct_data_gridding_SOURCES)
+DIST_SOURCES = $(construct_data_2d1d_SOURCES) \
+ $(construct_data_3d_SOURCES) $(reconstruct_data_2d1d_SOURCES) \
+ $(reconstruct_data_3d_SOURCES) \
+ $(reconstruct_data_gridding_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+construct_data_2d1d_SOURCES = construct_data_2d1d.c doxygen.h
+construct_data_2d1d_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+construct_data_3d_SOURCES = construct_data_3d.c
+construct_data_3d_LDADD = $(top_builddir)/libnfft3.la
+reconstruct_data_gridding_SOURCES = reconstruct_data_gridding.c
+reconstruct_data_gridding_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+reconstruct_data_2d1d_SOURCES = reconstruct_data_2d1d.c
+reconstruct_data_2d1d_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+reconstruct_data_3d_SOURCES = reconstruct_data_3d.c
+reconstruct_data_3d_LDADD = $(top_builddir)/libnfft3.la
+EXTRA_DIST = mri.m \
+ construct_knots_linogram.m \
+ construct_knots_radial_3d.m \
+ construct_knots_radial.m \
+ construct_knots_rose.m \
+ construct_knots_spiral.m \
+ construct_phantom.m \
+ precompute_weights_2d.m \
+ rms.m \
+ visualize_data.m \
+ README
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/mri/mri3d/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applications/mri/mri3d/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+construct_data_2d1d$(EXEEXT): $(construct_data_2d1d_OBJECTS) $(construct_data_2d1d_DEPENDENCIES) $(EXTRA_construct_data_2d1d_DEPENDENCIES)
+ @rm -f construct_data_2d1d$(EXEEXT)
+ $(LINK) $(construct_data_2d1d_OBJECTS) $(construct_data_2d1d_LDADD) $(LIBS)
+construct_data_3d$(EXEEXT): $(construct_data_3d_OBJECTS) $(construct_data_3d_DEPENDENCIES) $(EXTRA_construct_data_3d_DEPENDENCIES)
+ @rm -f construct_data_3d$(EXEEXT)
+ $(LINK) $(construct_data_3d_OBJECTS) $(construct_data_3d_LDADD) $(LIBS)
+reconstruct_data_2d1d$(EXEEXT): $(reconstruct_data_2d1d_OBJECTS) $(reconstruct_data_2d1d_DEPENDENCIES) $(EXTRA_reconstruct_data_2d1d_DEPENDENCIES)
+ @rm -f reconstruct_data_2d1d$(EXEEXT)
+ $(LINK) $(reconstruct_data_2d1d_OBJECTS) $(reconstruct_data_2d1d_LDADD) $(LIBS)
+reconstruct_data_3d$(EXEEXT): $(reconstruct_data_3d_OBJECTS) $(reconstruct_data_3d_DEPENDENCIES) $(EXTRA_reconstruct_data_3d_DEPENDENCIES)
+ @rm -f reconstruct_data_3d$(EXEEXT)
+ $(LINK) $(reconstruct_data_3d_OBJECTS) $(reconstruct_data_3d_LDADD) $(LIBS)
+reconstruct_data_gridding$(EXEEXT): $(reconstruct_data_gridding_OBJECTS) $(reconstruct_data_gridding_DEPENDENCIES) $(EXTRA_reconstruct_data_gridding_DEPENDENCIES)
+ @rm -f reconstruct_data_gridding$(EXEEXT)
+ $(LINK) $(reconstruct_data_gridding_OBJECTS) $(reconstruct_data_gridding_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/construct_data_2d1d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/construct_data_3d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_2d1d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_3d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_gridding.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/mri/mri3d/README b/applications/mri/mri3d/README
new file mode 100644
index 0000000..87523da
--- /dev/null
+++ b/applications/mri/mri3d/README
@@ -0,0 +1,18 @@
+Based on the research paper:
+A note on the iterative MRI reconstruction from nonuniform k-space data
+
+
+by Tobias Knopp, Stefan Kunis and Daniel Potts
+Available from:
+http://www.tu-chemnitz.de/~potts
+
+see also:
+http://www.tu-chemnitz.de/~potts/projecte/projekt_mri.php
+http://www.tu-chemnitz.de/~potts/projecte/ijbi
+
+--------------------------------------------------------------------
+
+Open MATLAB and run the script file mri.m.
+mri.m is an example for the usage of the programs.
+
+For questions mail us: tobias.knopp at informatik.uni-luebeck.de
diff --git a/applications/mri/mri3d/construct_data_2d1d.c b/applications/mri/mri3d/construct_data_2d1d.c
new file mode 100644
index 0000000..588605e
--- /dev/null
+++ b/applications/mri/mri3d/construct_data_2d1d.c
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: construct_data_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/**
+ * \defgroup applications_mri3d_construct_data_1d2d construct_data_1d2d
+ * \ingroup applications_mri3d
+ * \{
+ */
+
+/**
+ * construct makes an 2d-nfft for every slice
+ */
+static void construct(char * file, int N, int M, int Z, fftw_complex *mem)
+{
+ int j,z; /* some variables */
+ double tmp; /* a placeholder */
+ nfft_plan my_plan; /* plan for the two dimensional nfft */
+ FILE* fp;
+
+ /* initialise my_plan */
+ nfft_init_2d(&my_plan,N,N,M/Z);
+
+ fp=fopen("knots.dat","r");
+
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fscanf(fp,"%le %le %le",&my_plan.x[2*j+0],&my_plan.x[2*j+1],&tmp);
+ }
+ fclose(fp);
+
+ fp=fopen(file,"w");
+
+ for(z=0;z<Z;z++) {
+ tmp = (double) z;
+
+ for(j=0;j<N*N;j++)
+ my_plan.f_hat[j] = mem[(z*N*N+N*N*Z/2+j)%(N*N*Z)];
+
+ if(my_plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_plan);
+
+ nfft_trafo(&my_plan);
+
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fprintf(fp,"%le %le %le %le %le\n",my_plan.x[2*j+0],my_plan.x[2*j+1],tmp/Z-0.5,
+ creal(my_plan.f[j]),cimag(my_plan.f[j]));
+ }
+ }
+ fclose(fp);
+
+ nfft_finalize(&my_plan);
+}
+
+/**
+ * fft makes an 1D-ftt for every knot through
+ * all layers
+ */
+static void fft(int N,int M,int Z, fftw_complex *mem)
+{
+ fftw_plan plan;
+ plan = fftw_plan_many_dft(1, &Z, N*N,
+ mem, NULL,
+ N*N, 1,
+ mem, NULL,
+ N*N,1 ,
+ FFTW_FORWARD, FFTW_ESTIMATE);
+
+ fftw_execute(plan); /* execute the fft */
+ fftw_destroy_plan(plan);
+}
+
+/**
+ * read fills the memory with the file input_data_f.dat as
+ * the real part of f and with zeros for the imag part of f
+ */
+static void read_data(int N,int M,int Z, fftw_complex *mem)
+{
+ int i,z;
+ double real;
+ FILE* fin;
+ fin=fopen("input_f.dat","r");
+
+ for(z=0;z<Z;z++)
+ {
+ for(i=0;i<N*N;i++)
+ {
+ fscanf(fin,"%le ",&real );
+ mem[(z*N*N+N*N*Z/2+i)%(N*N*Z)]=real;
+ }
+ }
+ fclose(fin);
+}
+
+int main(int argc, char **argv)
+{
+ fftw_complex *mem;
+
+ if (argc <= 4) {
+ printf("usage: ./construct_data FILENAME N M Z\n");
+ return 1;
+ }
+
+ mem = (fftw_complex*) nfft_malloc(sizeof(fftw_complex) * atoi(argv[2]) * atoi(argv[2]) * atoi(argv[4]));
+
+ read_data(atoi(argv[2]),atoi(argv[3]),atoi(argv[4]), mem);
+
+ fft(atoi(argv[2]),atoi(argv[3]),atoi(argv[4]), mem);
+
+ construct(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]), mem);
+
+ nfft_free(mem);
+
+ return 1;
+}
+/* \} */
diff --git a/applications/mri/mri3d/construct_data_3d.c b/applications/mri/mri3d/construct_data_3d.c
new file mode 100644
index 0000000..a6d4a81
--- /dev/null
+++ b/applications/mri/mri3d/construct_data_3d.c
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: construct_data_3d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/**
+ * \defgroup applications_mri3d_construct_data_3d construct_data_3d
+ * \ingroup applications_mri3d
+ * \{
+ */
+
+static void construct(char * file, int N, int M, int Z)
+{
+ int j,k,l; /* some variables */
+ double real;
+ nfft_plan my_plan; /* plan for the three dimensional nfft */
+ FILE* fp,*fk;
+ int my_N[3],my_n[3]; /* to init the nfft */
+
+
+ /* initialise my_plan */
+ //nfft_init_3d(&my_plan,Z,N,N,M);
+ my_N[0]=Z; my_n[0]=ceil(Z*1.2);
+ my_N[1]=N; my_n[1]=ceil(N*1.2);
+ my_N[2]=N; my_n[2]=ceil(N*1.2);
+ nfft_init_guru(&my_plan, 3, my_N, M, my_n, 6,
+ PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|
+ MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ fp=fopen("knots.dat","r");
+
+ for(j=0;j<M;j++)
+ fscanf(fp,"%le %le %le",&my_plan.x[3*(j)+1],
+ &my_plan.x[3*(j)+2],&my_plan.x[3*(j)+0]);
+
+ fclose(fp);
+
+ fp=fopen("input_f.dat","r");
+ fk=fopen(file,"w");
+
+ for(l=0;l<Z;l++) {
+ for(j=0;j<N;j++)
+ {
+ for(k=0;k<N;k++)
+ {
+ //fscanf(fp,"%le ",&my_plan.f_hat[(N*N*(Z-l)+N*j+k+N*N*Z/2)%(N*N*Z)][0]);
+ fscanf(fp,"%le ",&real);
+ my_plan.f_hat[(N*N*l+N*j+k)] = real;
+ }
+ }
+ }
+
+ if(my_plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_plan);
+
+ nfft_trafo(&my_plan);
+
+
+ for(j=0;j<my_plan.M_total;j++)
+ fprintf(fk,"%le %le %le %le %le\n",my_plan.x[3*j+1],
+ my_plan.x[3*j+2],my_plan.x[3*j+0],creal(my_plan.f[j]),cimag(my_plan.f[j]));
+
+
+
+ fclose(fk);
+ fclose(fp);
+
+ nfft_finalize(&my_plan);
+}
+
+int main(int argc, char **argv)
+{
+ if (argc <= 4) {
+ printf("usage: ./construct_data FILENAME N M Z\n");
+ return 1;
+ }
+
+ construct(argv[1], atoi(argv[2]),atoi(argv[3]),atoi(argv[4]));
+
+ return 1;
+}
+/* \} */
diff --git a/applications/mri/mri3d/construct_knots_linogram.m b/applications/mri/mri3d/construct_knots_linogram.m
new file mode 100644
index 0000000..f396714
--- /dev/null
+++ b/applications/mri/mri3d/construct_knots_linogram.m
@@ -0,0 +1,38 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_linogram.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_linogram ( N,Z )
+
+l=((-N/2):(N/2-1));
+k=((-N):(N-1))';
+
+x=[reshape(k*l/N^2,2*N^2,1) kron(ones(N,1),k/2/N);
+ kron(ones(N,1),k/2/N) reshape(-k*l/N^2,2*N^2,1)];
+
+file=[];
+for z=0:Z-1,
+ file=[file; x ones(size(x,1),1)*(z/Z-0.5)];
+end
+
+M=size(file,1);
+
+% feel free to plot the knots by uncommenting
+% plot(file(1:M/Z,1),file(1:M/Z,2),'.');
+
+
+save knots.dat -ascii file
+
diff --git a/applications/mri/mri3d/construct_knots_radial.m b/applications/mri/mri3d/construct_knots_radial.m
new file mode 100644
index 0000000..6b42445
--- /dev/null
+++ b/applications/mri/mri3d/construct_knots_radial.m
@@ -0,0 +1,44 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_radial.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_radial( N,Z )
+
+A=N*2;
+P=410/512*A;
+M=A*P*Z;
+file=zeros(M,3);
+
+for z=0:Z-1,
+for i=1:P,
+ for j=1:A,
+ if mod(i,2) == 0,
+ r=(j-1)/A - 1/2;
+ else
+ r=-(j-1)/A + 1/2;
+ end
+ file(z*A*P+(i-1)*A+j,1)=r*sin((i-1)*pi/P);
+ file(z*A*P+(i-1)*A+j,2)=r*cos((i-1)*pi/P);
+ file(z*A*P+(i-1)*A+j,3)=z/Z-0.5;
+ end
+end
+end
+
+% feel free to plot the knots by uncommenting
+plot(file(1:M/Z,1),file(1:M/Z,2),'.-');
+
+
+save knots.dat -ascii file
diff --git a/applications/mri/mri3d/construct_knots_radial_3d.m b/applications/mri/mri3d/construct_knots_radial_3d.m
new file mode 100644
index 0000000..58e4419
--- /dev/null
+++ b/applications/mri/mri3d/construct_knots_radial_3d.m
@@ -0,0 +1,49 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_radial_3d.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_radial_3d( N,P )
+xk=zeros(N*P^2,4);
+counter=1;
+for r=0:N-1,
+ for i=1:P,
+ for j=1:P,
+ x1=sqrt(2)*r/N/2*cos(2*(i-1/2)*pi/P)*sin((j-1/2)*pi/P);
+ x2=sqrt(2)*r/N/2*sin(2*(i-1/2)*pi/P)*sin((j-1/2)*pi/P);
+ x3=sqrt(2)*r/N/2*cos((j-1/2)*pi/P);
+ if (abs(x1)<0.5 & abs(x2)<0.5 & abs(x3)<0.5),
+ if(r==0)
+ xk(counter,:)=[ x1 x2 x3 (r/N/2)^2*pi]; %weights
+ else
+ xk(counter,:)=[ x1 x2 x3 sqrt(2)*r/N/2*sin((j-1/2)*pi/P)]; %weights
+ end
+ counter=counter+1;
+ end
+ end
+ end
+end
+
+xk=xk(1:counter,:);
+
+% feel free to plot the knots by uncommenting
+% plot3(xk(:,1),xk(:,2),xk(:,3),'.');
+M=size(xk,1);
+
+knots=xk(:,1:3);
+weights=xk(:,4);
+save knots.dat -ascii knots
+save weights.dat -ascii weights
+
diff --git a/applications/mri/mri3d/construct_knots_rose.m b/applications/mri/mri3d/construct_knots_rose.m
new file mode 100644
index 0000000..aa16eb7
--- /dev/null
+++ b/applications/mri/mri3d/construct_knots_rose.m
@@ -0,0 +1,43 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_rose.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_rose( N,Z )
+
+N=ceil(1.5*N);
+B=1;
+M=N^2*Z;
+file = zeros(M,3);
+
+A=0.5;
+
+w=N/64*50;
+
+for z=0:Z-1,
+for b=0:B-1,
+for i=1:M/B/Z,
+ t=i/(M/B/Z);
+ file(z*M/Z+b*M/B+i,1) = A*cos(2*pi*w*t)*cos(2*pi*t+b*2*pi/B);
+ file(z*M/Z+b*M/B+i,2) = A*cos(2*pi*w*t)*sin(2*pi*t+b*2*pi/B);
+ file(z*M/Z+b*M/B+i,3) = z/Z-0.5;
+end
+end
+end
+
+% feel free to plot the knots by uncommenting
+% plot(file(1:M/Z,1),file(1:M/Z,2),'.-');
+
+save knots.dat -ascii file
diff --git a/applications/mri/mri3d/construct_knots_spiral.m b/applications/mri/mri3d/construct_knots_spiral.m
new file mode 100644
index 0000000..30983af
--- /dev/null
+++ b/applications/mri/mri3d/construct_knots_spiral.m
@@ -0,0 +1,41 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_knots_spiral.m 3776 2012-06-03 13:29:25Z keiner $
+function [M] = construct_knots_spiral ( N,Z )
+B=1;
+M=N^2*Z;
+file = zeros(M,3);
+
+A=0.5;
+
+w=N/64*50;
+
+for z=0:Z-1,
+ for b=0:B-1,
+ for i=1:M/B/Z,
+ t=(i/(M/B/Z))^(1/2);
+ file(z*M/Z+b*M/B+i,1) = A*t*cos(2*pi*w*t+b);
+ file(z*M/Z+b*M/B+i,2) = A*t*sin(2*pi*w*t+b);
+ file(z*M/Z+b*M/B+i,3) = z/Z-0.5;
+ end
+ end
+end
+
+% feel free to plot the knots by uncommenting
+ plot(file(1:M/Z,1),file(1:M/Z,2),'.-');
+
+save knots.dat -ascii file
diff --git a/applications/mri/mri3d/construct_phantom.m b/applications/mri/mri3d/construct_phantom.m
new file mode 100644
index 0000000..98804ff
--- /dev/null
+++ b/applications/mri/mri3d/construct_phantom.m
@@ -0,0 +1,88 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: construct_phantom.m 3776 2012-06-03 13:29:25Z keiner $
+function [] = construct_phantom( N, Z )
+% constructs a three dimensional Shepp Logan phantom
+
+% The phantom will be a little bit smaller than N
+% because of aliasing effects
+%N_=N/8*5;
+N_=N;
+
+% The specs of the phantom
+A = [1.0 0.69 0.92 0.0 0.0 0;
+ 0.1 0.6624 0.874 0.0 -0.0184 0;
+ 0.4 0.11 0.31 0.22 0.0 18;
+ 0.4 0.16 0.41 -0.22 0.0 -18;
+ 0.55 0.21 0.25 0.0 0.35 0;
+ 0.55 0.046 0.046 0.0 0.1 0;
+ 0.55 0.046 0.046 0.0 -0.1 0;
+ 0.55 0.046 0.023 -0.08 -0.605 0;
+ 0.55 0.023 0.023 0.0 -0.606 0;
+ 0.55 0.023 0.046 0.06 -0.605 0];
+
+% compute the phantom
+B = zeros(N_,N_,Z);
+for l=1:10,
+ for z=1:Z,
+ for y=1:N_,
+ for x=1:N_,
+ x_= x /(N_/2)-1;
+ y_= y /(N_/2)-1;
+ r = sqrt(x_^2+y_^2);
+ if x_==0 & y_==0,
+ phi=0;
+ elseif x_ >= 0 & y_ >= 0,
+ phi=asin(y_/r);
+ elseif x_ < 0 & y_ > 0,
+ phi=asin(-y_/r)+pi;
+ elseif x_ <= 0 & y_ <= 0,
+ phi=asin(-y_/r)+pi;
+ elseif x_ > 0 & y_ < 0,
+ phi=asin(y_/r);
+ end
+ if(((r*cos(pi*A(l,6)/180+phi)+A(l,4))/A(l,2))^2+...
+ ((r*sin(pi*A(l,6)/180+phi)+A(l,5))/A(l,3))^2+...
+ ((z/(Z/2)-1)/A(l,3))^2 <= 1 ),
+ if B(x,y,z) > 0.1 & l>2,
+ B(x,y,z) = B(x,y,z) +A(l,1);
+ else
+ B(x,y,z) = A(l,1);
+ end
+ end
+ end
+ end
+ end
+end
+
+% place the matrix B in the middle of the matrix C
+C=zeros(N,N,Z);
+C(N/2-N_/2+1:N/2+N_/2,N/2-N_/2+1:N/2+N_/2,:)=B;
+B=C;
+
+% rotate the matrix B
+for z=1:Z,
+ B(:,:,z)=rot90(rot90(rot90((B(:,:,z)))));
+end
+
+output=zeros(Z,N*N);
+
+for z_=0:Z-1,
+ output(z_+1,:)=reshape(B(:,:,z_+1),1,N*N);
+end
+
+save input_f.dat -ascii output
diff --git a/applications/mri/mri3d/doxygen.h b/applications/mri/mri3d/doxygen.h
new file mode 100644
index 0000000..3d9ccae
--- /dev/null
+++ b/applications/mri/mri3d/doxygen.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */
+
+/**
+ * \defgroup applications_mri3d 3D transforms
+ * \ingroup applications_mri
+ */
diff --git a/applications/mri/mri3d/mri.m b/applications/mri/mri3d/mri.m
new file mode 100644
index 0000000..2b91510
--- /dev/null
+++ b/applications/mri/mri3d/mri.m
@@ -0,0 +1,91 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: mri.m 3776 2012-06-03 13:29:25Z keiner $
+% This script file is an example of the usage
+
+N=48; % points per row / column
+Z=48; % number of slices
+
+% Construct the raw data of the phantom
+% and write it to input_f.dat
+% To use another example than the phantom
+% just put the reshape of your example into input_f.dat
+construct_phantom(N,Z);
+
+% Construct the knots in k-space and write them to knots.dat
+% Different knots like spiral,rose,radial,radial_3d or linogram can be chosen
+% The radial_3d knots just work with construct_data_3d and reconstruct_data_3d
+% Then the weights are generated in construct_knots_radial_3d
+% M is the number of knots
+M = construct_knots_spiral(N,Z);
+
+% First make N^2 1d-FFT, then Z 2d-NFFT on the constructed knots
+% and write the output to output_phantom_nfft.dat
+system(['./construct_data_2d1d ' 'output_phantom_nfft.dat '...
+ int2str(N) ' ' int2str(M) ' ' int2str(Z)]);
+
+% Precompute the weights using voronoi cells
+% and write them to weights.dat
+precompute_weights_2d('output_phantom_nfft.dat',M,Z);
+
+% First make Z inverse 2d-NFFT, then N^2 inverse 1d-FFT
+% and write the output to output_real.dat and output_imag.dat
+% The usage is "./reconstruct_data_2d1d filename N M Z ITER WEIGHTS"
+% where ITER is the number of iteration and WEIGHTS is 1
+% if the weights are used 0 else
+system(['./reconstruct_data_2d1d ' 'output_phantom_nfft.dat ' ...
+ int2str(N) ' ' int2str(M) ' ' int2str(Z) ' 3 1']);
+
+% Visualize the three dimensional phantom. Makes a pic of
+% every slice and one plot of the N/2 row of the 10th plane.
+visualize_data('pics_2+1d/pic', N, Z, 1, 'Inverse 2d1d-NFFT - 3. iteration - spiral knots');
+
+% Compute the root mean square
+ rms('pics_2+1d/rms.txt');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% The same as above but reconstructed with gridding.
+% That means first an adjoint 2d-NFFT, then a 1d-FFT.
+% The ITER parameter is obsolent and just for compatibility
+system(['./reconstruct_data_gridding ' 'output_phantom_nfft.dat ' ...
+ int2str(N) ' ' int2str(M) ' ' int2str(Z) ' 0 1']);
+visualize_data('pics_gridding/pic', N, Z, 2, 'Adjoint 2d1d-NFFT (Gridding) - spiral knots');
+rms('pics_gridding/rms.txt');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% The same as above but reconstructed with a 3d-nfft
+system(['./reconstruct_data_3d ' 'output_phantom_nfft.dat ' ...
+ int2str(N) ' ' int2str(M) ' ' int2str(Z) ' 1 1']);
+visualize_data('pics_3d/pic', N, Z, 3, 'Inverse 3d-NFFT - 1. iteration - spiral knots');
+rms('pics_3d/rms.txt');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% An example with the radial_3d knots
+% please uncomment to try
+
+%M = construct_knots_radial_3d(N,N*3/2);
+
+%system(['./construct_data_3d ' 'output_phantom_nfft.dat '...
+% int2str(N) ' ' int2str(M) ' ' int2str(Z)]);
+
+%system(['./reconstruct_data_3d ' 'output_phantom_nfft.dat ' ...
+% int2str(N) ' ' int2str(M) ' ' int2str(Z) ' 3 1']);
+%visualize_data('pics_3d/pic_', N, Z, 4, 'Inverse 3d-NFFT - 3. iteration - radial_3d knots');
+%rms('pics_3d/rms.txt');
diff --git a/applications/mri/mri3d/precompute_weights_2d.m b/applications/mri/mri3d/precompute_weights_2d.m
new file mode 100644
index 0000000..2b98e07
--- /dev/null
+++ b/applications/mri/mri3d/precompute_weights_2d.m
@@ -0,0 +1,77 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: precompute_weights_2d.m 3776 2012-06-03 13:29:25Z keiner $
+function [] = precompute_weights_2d ( file,M,Z )
+
+input=load(file);
+
+kx = input(1:M/Z,1);
+ky = input(1:M/Z,2);
+
+kxy=[kx ky];
+
+% compute the voronoi regions
+[V,C] = voronoin(kxy,{'QJ'});
+
+% the surface of the knots is written to area
+area = [];
+
+% sum of all surfaces
+sum_area = 0;
+
+% the maximum distance two nearest neighbour have
+% to get the surface we store max_distance^2
+max_distance=0;
+
+% compute the surface of the knots
+for j= 1:length(kxy)
+ x = V(C{j},1);
+ y = V(C{j},2);
+ lxy = length(x);
+ if(lxy==0) % a knot exists more than one time
+ A=0;
+ else
+ A = abs(sum(0.5*(x([2:lxy 1])-x(:)).* ...
+ (y([2:lxy 1]) + y(:))));
+ end
+ area = [area A];
+ min_distance = min((2*(x-kxy(j,1))).^2+(2*(y-kxy(j,2))).^2);
+ max_distance = max([max_distance min_distance]);
+end
+
+% if the surface of a knot is bigger than max_distance^2
+% or isnan or isinf, then take max_distance^2
+for j=1:length(area),
+ if(isnan(area(j)) | isinf(area(j))| area(j)>max_distance),
+ area(j)=max_distance;
+ end
+ sum_area = sum_area + area(j);
+end
+
+% norm the weights
+area = area / sum_area;
+
+
+% stack the weights for every slice
+out=[];
+for z=0:Z-1,
+ out=[out area];
+end
+
+save weights.dat -ascii out
+
+
diff --git a/applications/mri/mri3d/reconstruct_data_2d1d.c b/applications/mri/mri3d/reconstruct_data_2d1d.c
new file mode 100644
index 0000000..f118c43
--- /dev/null
+++ b/applications/mri/mri3d/reconstruct_data_2d1d.c
@@ -0,0 +1,218 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: reconstruct_data_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/**
+ * \defgroup applications_mri3d_reconstruct_data_1d2d reconstruct_data_1d2d
+ * \ingroup applications_mri3d
+ * \{
+ */
+
+/**
+ * reconstruct makes an inverse 2d-nfft for every slice
+ */
+static void reconstruct(char* filename,int N,int M,int Z,int iteration, int weight, fftw_complex *mem)
+{
+ int j,k,l,z; /* some variables */
+ double real,imag; /* to read the real and imag part of a complex number */
+ nfft_plan my_plan; /* plan for the two dimensional nfft */
+ solver_plan_complex my_iplan; /* plan for the two dimensional infft */
+ FILE* fin; /* input file */
+ int my_N[2],my_n[2]; /* to init the nfft */
+ double tmp, epsilon=0.0000003;/* tmp to read the obsolent z from the input file
+ epsilon is the break criterium for
+ the iteration */
+ unsigned infft_flags = CGNR | PRECOMPUTE_DAMP; /* flags for the infft */
+
+ /* initialise my_plan */
+ my_N[0]=N;my_n[0]=ceil(N*1.2);
+ my_N[1]=N; my_n[1]=ceil(N*1.2);
+ nfft_init_guru(&my_plan, 2, my_N, M/Z, my_n, 6, PRE_PHI_HUT| PRE_PSI|
+ MALLOC_X| MALLOC_F_HAT| MALLOC_F|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /* precompute lin psi if set */
+ if(my_plan.nfft_flags & PRE_LIN_PSI)
+ nfft_precompute_lin_psi(&my_plan);
+
+ /* set the flags for the infft*/
+ if (weight)
+ infft_flags = infft_flags | PRECOMPUTE_WEIGHT;
+
+ /* initialise my_iplan, advanced */
+ solver_init_advanced_complex(&my_iplan,(nfft_mv_plan_complex*)(&my_plan), infft_flags );
+
+ /* get the weights */
+ if(my_iplan.flags & PRECOMPUTE_WEIGHT)
+ {
+ fin=fopen("weights.dat","r");
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fscanf(fin,"%le ",&my_iplan.w[j]);
+ }
+ fclose(fin);
+ }
+
+ /* get the damping factors */
+ if(my_iplan.flags & PRECOMPUTE_DAMP)
+ {
+ for(j=0;j<N;j++){
+ for(k=0;k<N;k++) {
+ int j2= j-N/2;
+ int k2= k-N/2;
+ double r=sqrt(j2*j2+k2*k2);
+ if(r>(double) N/2)
+ my_iplan.w_hat[j*N+k]=0.0;
+ else
+ my_iplan.w_hat[j*N+k]=1.0;
+ }
+ }
+ }
+
+ /* open the input file */
+ fin=fopen(filename,"r");
+
+ /* For every Layer*/
+ for(z=0;z<Z;z++) {
+
+ /* read x,y,freal and fimag from the knots */
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fscanf(fin,"%le %le %le %le %le ",&my_plan.x[2*j+0],&my_plan.x[2*j+1], &tmp,
+ &real,&imag);
+ my_iplan.y[j] = real + _Complex_I*imag;
+ }
+
+ /* precompute psi if set just one time because the knots equal each plane */
+ if(z==0 && my_plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_plan);
+
+ /* precompute full psi if set just one time because the knots equal each plane */
+ if(z==0 && my_plan.nfft_flags & PRE_FULL_PSI)
+ nfft_precompute_full_psi(&my_plan);
+
+ /* init some guess */
+ for(k=0;k<my_plan.N_total;k++)
+ my_iplan.f_hat_iter[k]=0.0;
+
+ /* inverse trafo */
+ solver_before_loop_complex(&my_iplan);
+ for(l=0;l<iteration;l++)
+ {
+ /* break if dot_r_iter is smaller than epsilon*/
+ if(my_iplan.dot_r_iter<epsilon)
+ break;
+ fprintf(stderr,"%e, %i of %i\n",sqrt(my_iplan.dot_r_iter),
+ iteration*z+l+1,iteration*Z);
+ solver_loop_one_step_complex(&my_iplan);
+ }
+ for(k=0;k<my_plan.N_total;k++) {
+ /* write every slice in the memory.
+ here we make an fftshift direct */
+ mem[(Z*N*N/2+z*N*N+ k)%(Z*N*N)] = my_iplan.f_hat_iter[k];
+ }
+ }
+
+ fclose(fin);
+
+ /* finalize the infft */
+ solver_finalize_complex(&my_iplan);
+
+ /* finalize the nfft */
+ nfft_finalize(&my_plan);
+}
+
+/**
+ * print writes the memory back in a file
+ * output_real.dat for the real part and output_imag.dat for the imaginary part
+ */
+static void print(int N,int M,int Z, fftw_complex *mem)
+{
+ int i,j;
+ FILE* fout_real;
+ FILE* fout_imag;
+ fout_real=fopen("output_real.dat","w");
+ fout_imag=fopen("output_imag.dat","w");
+
+ for(i=0;i<Z;i++) {
+ for (j=0;j<N*N;j++) {
+ fprintf(fout_real,"%le ",creal(mem[(Z*N*N/2+i*N*N+ j)%(Z*N*N)]) /Z);
+ fprintf(fout_imag,"%le ",cimag(mem[(Z*N*N/2+i*N*N+ j)%(Z*N*N)]) /Z);
+ }
+ fprintf(fout_real,"\n");
+ fprintf(fout_imag,"\n");
+ }
+
+ fclose(fout_real);
+ fclose(fout_imag);
+}
+
+int main(int argc, char **argv)
+{
+ fftw_complex *mem;
+ fftw_plan plan;
+ int N,M,Z;
+
+ if (argc <= 6) {
+ printf("usage: ./reconstruct FILENAME N M Z ITER WEIGHTS\n");
+ return 1;
+ }
+
+ N=atoi(argv[2]);
+ M=atoi(argv[3]);
+ Z=atoi(argv[4]);
+
+ /* Allocate memory to hold every layer in memory after the
+ 2D-infft */
+ mem = (fftw_complex*) nfft_malloc(sizeof(fftw_complex) * atoi(argv[2]) * atoi(argv[2]) * atoi(argv[4]));
+
+ /* Create plan for the 1d-ifft */
+ plan = fftw_plan_many_dft(1, &Z, N*N,
+ mem, NULL,
+ N*N, 1,
+ mem, NULL,
+ N*N,1 ,
+ FFTW_BACKWARD, FFTW_MEASURE);
+
+ /* execute the 2d-infft's */
+ reconstruct(argv[1],N,M,Z,atoi(argv[5]),atoi(argv[6]),mem);
+
+ /* execute the 1d-fft's */
+ fftw_execute(plan);
+
+ /* write the memory back in files */
+ print(N,M,Z, mem);
+
+ /* free memory */
+ nfft_free(mem);
+ fftw_destroy_plan(plan);
+ return 1;
+}
+/* \} */
diff --git a/applications/mri/mri3d/reconstruct_data_3d.c b/applications/mri/mri3d/reconstruct_data_3d.c
new file mode 100644
index 0000000..1cb8799
--- /dev/null
+++ b/applications/mri/mri3d/reconstruct_data_3d.c
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: reconstruct_data_3d.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <math.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/**
+ * \defgroup applications_mri3d_reconstruct_data_3d reconstruct_data_3d
+ * \ingroup applications_mri3d
+ * \{
+ */
+
+/**
+ * reconstruct makes an inverse 3d-nfft
+ */
+static void reconstruct(char* filename,int N,int M,int Z,int iteration, int weight)
+{
+ int j,k,z,l; /* some variables */
+ double real,imag; /* to read the real and imag part of a complex number */
+ nfft_plan my_plan; /* plan for the two dimensional nfft */
+ solver_plan_complex my_iplan; /* plan for the two dimensional infft */
+ FILE* fin; /* input file */
+ FILE* fout_real; /* output file (real part) */
+ FILE* fout_imag; /* output file (imag part) */
+ int my_N[3],my_n[3]; /* to init the nfft */
+ double epsilon=0.0000003; /* tmp to read the obsolent z from 700.acs
+ epsilon is a the break criterion for
+ the iteration */
+ unsigned infft_flags = CGNR | PRECOMPUTE_DAMP; /* flags for the infft */
+
+ /* initialise my_plan, specific.
+ we don't precompute psi */
+ my_N[0]=Z; my_n[0]=ceil(Z*1.2);
+ my_N[1]=N; my_n[1]=ceil(N*1.2);
+ my_N[2]=N; my_n[2]=ceil(N*1.2);
+ nfft_init_guru(&my_plan, 3, my_N, M, my_n, 6,
+ PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|
+ MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /* precompute lin psi */
+ if(my_plan.nfft_flags & PRE_LIN_PSI)
+ nfft_precompute_lin_psi(&my_plan);
+
+ if (weight)
+ infft_flags = infft_flags | PRECOMPUTE_WEIGHT;
+
+ /* initialise my_iplan, advanced */
+ solver_init_advanced_complex(&my_iplan,(nfft_mv_plan_complex*)(&my_plan), infft_flags );
+
+ /* get the weights */
+ if(my_iplan.flags & PRECOMPUTE_WEIGHT)
+ {
+ fin=fopen("weights.dat","r");
+ for(j=0;j<M;j++)
+ {
+ fscanf(fin,"%le ",&my_iplan.w[j]);
+ }
+ fclose(fin);
+ }
+
+ /* get the damping factors */
+ if(my_iplan.flags & PRECOMPUTE_DAMP)
+ {
+ for(j=0;j<N;j++){
+ for(k=0;k<N;k++) {
+ for(z=0;z<N;z++) {
+ int j2= j-N/2;
+ int k2= k-N/2;
+ int z2= z-N/2;
+ double r=sqrt(j2*j2+k2*k2+z2*z2);
+ if(r>(double) N/2)
+ my_iplan.w_hat[z*N*N+j*N+k]=0.0;
+ else
+ my_iplan.w_hat[z*N*N+j*N+k]=1.0;
+ }
+ }
+ }
+ }
+
+ /* open the input file */
+ fin=fopen(filename,"r");
+
+ /* open the output files */
+ fout_real=fopen("output_real.dat","w");
+ fout_imag=fopen("output_imag.dat","w");
+
+ /* read x,y,freal and fimag from the knots */
+ for(j=0;j<M;j++)
+ {
+ fscanf(fin,"%le %le %le %le %le ",&my_plan.x[3*j+1],&my_plan.x[3*j+2], &my_plan.x[3*j+0],
+ &real,&imag);
+ my_iplan.y[j] = real + _Complex_I*imag;
+ }
+
+ /* precompute psi */
+ if(my_plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_plan);
+
+ /* precompute full psi */
+ if(my_plan.nfft_flags & PRE_FULL_PSI)
+ nfft_precompute_full_psi(&my_plan);
+
+ /* init some guess */
+ for(k=0;k<my_plan.N_total;k++)
+ my_iplan.f_hat_iter[k]=0.0;
+
+ /* inverse trafo */
+ solver_before_loop_complex(&my_iplan);
+ for(l=0;l<iteration;l++)
+ {
+ /* break if dot_r_iter is smaller than epsilon*/
+ if(my_iplan.dot_r_iter<epsilon)
+ break;
+ fprintf(stderr,"%e, %i of %i\n",sqrt(my_iplan.dot_r_iter),
+ l+1,iteration);
+ solver_loop_one_step_complex(&my_iplan);
+ }
+
+ for(l=0;l<Z;l++)
+ {
+ for(k=0;k<N*N;k++)
+ {
+ /* write every Layer in the files */
+ fprintf(fout_real,"%le ",creal(my_iplan.f_hat_iter[ k+N*N*l ]));
+ fprintf(fout_imag,"%le ",cimag(my_iplan.f_hat_iter[ k+N*N*l ]));
+ }
+ fprintf(fout_real,"\n");
+ fprintf(fout_imag,"\n");
+ }
+
+ fclose(fout_real);
+ fclose(fout_imag);
+
+ solver_finalize_complex(&my_iplan);
+ nfft_finalize(&my_plan);
+}
+
+int main(int argc, char **argv)
+{
+ if (argc <= 6) {
+ printf("usage: ./reconstruct3D FILENAME N M Z ITER WEIGHTS\n");
+ return 1;
+ }
+
+ reconstruct(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]),atoi(argv[6]));
+ return 1;
+}
+/* \} */
diff --git a/applications/mri/mri3d/reconstruct_data_gridding.c b/applications/mri/mri3d/reconstruct_data_gridding.c
new file mode 100644
index 0000000..69136e8
--- /dev/null
+++ b/applications/mri/mri3d/reconstruct_data_gridding.c
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: reconstruct_data_gridding.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/**
+ * \defgroup applications_mri3d_reconstruct_data_gridding reconstruct_data_gridding
+ * \ingroup applications_mri3d
+ * \{
+ */
+
+/**
+ * reconstruct makes an 2d-adjoint-nfft for every slice
+ */
+static void reconstruct(char* filename,int N,int M,int Z, int weight ,fftw_complex *mem)
+{
+ int j,k,z; /* some variables */
+ double weights; /* store one weight temporary */
+ double tmp; /* tmp to read the obsolent z from the input file */
+ double real,imag; /* to read the real and imag part of a complex number */
+ nfft_plan my_plan; /* plan for the two dimensional nfft */
+ int my_N[2],my_n[2]; /* to init the nfft */
+ FILE* fin; /* input file */
+ FILE* fweight; /* input file for the weights */
+
+ /* initialise my_plan */
+ my_N[0]=N; my_n[0]=ceil(N*1.2);
+ my_N[1]=N; my_n[1]=ceil(N*1.2);
+ nfft_init_guru(&my_plan, 2, my_N, M/Z, my_n, 6, PRE_PHI_HUT| PRE_PSI|
+ MALLOC_X| MALLOC_F_HAT| MALLOC_F|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /* precompute lin psi if set */
+ if(my_plan.nfft_flags & PRE_LIN_PSI)
+ nfft_precompute_lin_psi(&my_plan);
+
+ fin=fopen(filename,"r");
+
+ for(z=0;z<Z;z++) {
+ fweight=fopen("weights.dat","r");
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ fscanf(fweight,"%le ",&weights);
+ fscanf(fin,"%le %le %le %le %le",
+ &my_plan.x[2*j+0],&my_plan.x[2*j+1],&tmp,&real,&imag);
+ my_plan.f[j] = real + _Complex_I*imag;
+ if(weight)
+ my_plan.f[j] = my_plan.f[j] * weights;
+ }
+ fclose(fweight);
+
+ /* precompute psi if set just one time because the knots equal each slice */
+ if(z==0 && my_plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_plan);
+
+ /* precompute full psi if set just one time because the knots equal each slice */
+ if(z==0 && my_plan.nfft_flags & PRE_FULL_PSI)
+ nfft_precompute_full_psi(&my_plan);
+
+ /* compute the adjoint nfft */
+ nfft_adjoint(&my_plan);
+
+ for(k=0;k<my_plan.N_total;k++) {
+ /* write every slice in the memory.
+ here we make an fftshift direct */
+ mem[(Z*N*N/2+z*N*N+ k)%(Z*N*N)] = my_plan.f_hat[k];
+ }
+ }
+ fclose(fin);
+
+ nfft_finalize(&my_plan);
+}
+
+ /**
+ * print writes the memory back in a file
+ * output_real.dat for the real part and output_imag.dat for the imaginary part
+ */
+static void print(int N,int M,int Z, fftw_complex *mem)
+{
+ int i,j;
+ FILE* fout_real;
+ FILE* fout_imag;
+ fout_real=fopen("output_real.dat","w");
+ fout_imag=fopen("output_imag.dat","w");
+
+ for(i=0;i<Z;i++) {
+ for (j=0;j<N*N;j++) {
+ fprintf(fout_real,"%le ",creal(mem[(Z*N*N/2+i*N*N+ j)%(Z*N*N)]) /Z);
+ fprintf(fout_imag,"%le ",cimag(mem[(Z*N*N/2+i*N*N+ j)%(Z*N*N)]) /Z);
+ }
+ fprintf(fout_real,"\n");
+ fprintf(fout_imag,"\n");
+ }
+
+ fclose(fout_real);
+ fclose(fout_imag);
+}
+
+
+int main(int argc, char **argv)
+{
+ fftw_complex *mem;
+ fftw_plan plan;
+ int N,M,Z;
+
+ if (argc <= 6) {
+ printf("usage: ./reconstruct_data_gridding FILENAME N M Z ITER WEIGHTS\n");
+ return 1;
+ }
+
+ N=atoi(argv[2]);
+ M=atoi(argv[3]);
+ Z=atoi(argv[4]);
+
+ /* Allocate memory to hold every slice in memory after the
+ 2D-infft */
+ mem = (fftw_complex*) nfft_malloc(sizeof(fftw_complex) * atoi(argv[2]) * atoi(argv[2]) * atoi(argv[4]));
+
+ /* Create plan for the 1d-ifft */
+ plan = fftw_plan_many_dft(1, &Z, N*N,
+ mem, NULL,
+ N*N, 1,
+ mem, NULL,
+ N*N,1 ,
+ FFTW_BACKWARD, FFTW_MEASURE);
+
+ /* execute the 2d-nfft's */
+ reconstruct(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[6]),mem);
+
+ /* execute the 1d-fft's */
+ fftw_execute(plan);
+
+ /* write the memory back in files */
+ print(N,M,Z, mem);
+
+ /* free memory */
+ nfft_free(mem);
+
+ return 1;
+}
+/* \} */
diff --git a/applications/mri/mri3d/rms.m b/applications/mri/mri3d/rms.m
new file mode 100644
index 0000000..6335d03
--- /dev/null
+++ b/applications/mri/mri3d/rms.m
@@ -0,0 +1,32 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: rms.m 3776 2012-06-03 13:29:25Z keiner $
+% computes the root mean square
+function [] = rms ( file )
+% load original data f
+load input_f.dat
+% load recontructed data f~
+load output_real.dat
+load output_imag.dat
+output = output_real+i*output_imag;
+
+% compute
+result = (norm(input_f - output) / norm(input_f) );
+
+
+% write the root mean square to file
+save(file,'result','-ascii');
diff --git a/applications/mri/mri3d/visualize_data.m b/applications/mri/mri3d/visualize_data.m
new file mode 100644
index 0000000..4bd458e
--- /dev/null
+++ b/applications/mri/mri3d/visualize_data.m
@@ -0,0 +1,54 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: visualize_data.m 3776 2012-06-03 13:29:25Z keiner $
+% Visualizes the three dimensional phantom. Makes a pic of
+% every plane and one plot of the N/2 row of the 10th plane.
+function [] = visualize_data ( file, N, Z, num_fig, caption )
+
+% load the real part of f
+load output_real.dat
+
+for z=0:Z-1,
+ for y=0:N-1,
+ for x =0:N-1,
+ A(x+1,y+1,z+1)=output_real(z+1,y*N+ x+1);
+ end
+ end
+end
+
+% plot the three dimensional phantom
+for j=0:Z-1,
+ figure(2*num_fig-1)
+ imagesc(A(:,:,j+1),[0 1]);
+ colorbar;
+ colormap(flipud(gray(256)));
+ title(caption);
+ if j<9,
+ file_out =[file '0' int2str(j+1) '.jpg'];
+ else
+ file_out =[file int2str(j+1) '.jpg'];
+ end
+ print('-djpeg',file_out);
+end
+
+% plot the N/2 row of the 10 plane
+figure(2*num_fig)
+file_out = [file 'row' '.png'];
+plot(1:N,A(:,N/2,Z/2));
+axis([1 N 0 1.2]);
+title([caption ' - The ' int2str(N/2) 'th row']);
+print('-djpeg',file_out);
diff --git a/applications/polarFFT/Makefile.am b/applications/polarFFT/Makefile.am
new file mode 100644
index 0000000..3fac460
--- /dev/null
+++ b/applications/polarFFT/Makefile.am
@@ -0,0 +1,16 @@
+# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = polar_fft_test mpolar_fft_test linogram_fft_test
+
+polar_fft_test_SOURCES = polar_fft_test.c doxygen.h
+polar_fft_test_LDADD = $(top_builddir)/libnfft3.la
+
+mpolar_fft_test_SOURCES = mpolar_fft_test.c
+mpolar_fft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+linogram_fft_test_SOURCES = linogram_fft_test.c
+linogram_fft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = phantom.m fft_test.m README
diff --git a/applications/polarFFT/Makefile.in b/applications/polarFFT/Makefile.in
new file mode 100644
index 0000000..749f26a
--- /dev/null
+++ b/applications/polarFFT/Makefile.in
@@ -0,0 +1,576 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = polar_fft_test$(EXEEXT) mpolar_fft_test$(EXEEXT) \
+ linogram_fft_test$(EXEEXT)
+subdir = applications/polarFFT
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_linogram_fft_test_OBJECTS = linogram_fft_test.$(OBJEXT)
+linogram_fft_test_OBJECTS = $(am_linogram_fft_test_OBJECTS)
+linogram_fft_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_mpolar_fft_test_OBJECTS = mpolar_fft_test.$(OBJEXT)
+mpolar_fft_test_OBJECTS = $(am_mpolar_fft_test_OBJECTS)
+mpolar_fft_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_polar_fft_test_OBJECTS = polar_fft_test.$(OBJEXT)
+polar_fft_test_OBJECTS = $(am_polar_fft_test_OBJECTS)
+polar_fft_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(linogram_fft_test_SOURCES) $(mpolar_fft_test_SOURCES) \
+ $(polar_fft_test_SOURCES)
+DIST_SOURCES = $(linogram_fft_test_SOURCES) $(mpolar_fft_test_SOURCES) \
+ $(polar_fft_test_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+polar_fft_test_SOURCES = polar_fft_test.c doxygen.h
+polar_fft_test_LDADD = $(top_builddir)/libnfft3.la
+mpolar_fft_test_SOURCES = mpolar_fft_test.c
+mpolar_fft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+linogram_fft_test_SOURCES = linogram_fft_test.c
+linogram_fft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = phantom.m fft_test.m README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/polarFFT/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applications/polarFFT/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+linogram_fft_test$(EXEEXT): $(linogram_fft_test_OBJECTS) $(linogram_fft_test_DEPENDENCIES) $(EXTRA_linogram_fft_test_DEPENDENCIES)
+ @rm -f linogram_fft_test$(EXEEXT)
+ $(LINK) $(linogram_fft_test_OBJECTS) $(linogram_fft_test_LDADD) $(LIBS)
+mpolar_fft_test$(EXEEXT): $(mpolar_fft_test_OBJECTS) $(mpolar_fft_test_DEPENDENCIES) $(EXTRA_mpolar_fft_test_DEPENDENCIES)
+ @rm -f mpolar_fft_test$(EXEEXT)
+ $(LINK) $(mpolar_fft_test_OBJECTS) $(mpolar_fft_test_LDADD) $(LIBS)
+polar_fft_test$(EXEEXT): $(polar_fft_test_OBJECTS) $(polar_fft_test_DEPENDENCIES) $(EXTRA_polar_fft_test_DEPENDENCIES)
+ @rm -f polar_fft_test$(EXEEXT)
+ $(LINK) $(polar_fft_test_OBJECTS) $(polar_fft_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/linogram_fft_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mpolar_fft_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/polar_fft_test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/polarFFT/README b/applications/polarFFT/README
new file mode 100644
index 0000000..f8af55f
--- /dev/null
+++ b/applications/polarFFT/README
@@ -0,0 +1,20 @@
+polarFFT
+
+ These are examples of the application of the NFFT for the computation of the
+
+ - polar FFT: polar_fft_test.c
+
+ - modified polar FFT: mpolar_fft_test.c
+
+ - pseudopolar (linogram) FFT: linogram_fft_test.c.
+
+ Use the Matlab script file fft_test.m for a demonstration.
+
+
+ Reference:
+
+ [1] M. Fenn, S. Kunis, and D. Potts. On the computation of the polar FFT.
+ Appl. Comput. Harmon. Anal., accepted.
+
+ [2] D. Potts, and G. Steidl, G. A new linogram algorithm for computerized
+ tomography. IMA J. Numer. Anal. 21, 769-782, 2001
diff --git a/applications/polarFFT/doxygen.h b/applications/polarFFT/doxygen.h
new file mode 100644
index 0000000..7868ac3
--- /dev/null
+++ b/applications/polarFFT/doxygen.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */
+
+/**
+ * \defgroup applications_polarFFT Polar FFT
+ * \ingroup applications
+ */
diff --git a/applications/polarFFT/fft_test.m b/applications/polarFFT/fft_test.m
new file mode 100644
index 0000000..6be6257
--- /dev/null
+++ b/applications/polarFFT/fft_test.m
@@ -0,0 +1,124 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: fft_test.m 3776 2012-06-03 13:29:25Z keiner $
+N=64;
+T=3*N; %T=5*N/2;
+R=3*N/2;
+
+
+f=fft2(phantom(N));
+%f=imresize(im2double(imread('trui.png')),N/256);
+fr=real(f); fi=imag(f);
+save 'input_data_r.dat' fr -ascii -double
+save 'input_data_i.dat' fi -ascii -double
+
+
+system(sprintf('./polar_fft_test %d %d %d',N,T,R));
+
+polar_fft_error = load('polar_fft_error.dat');
+polar_ifft_error3 = load('polar_ifft_error3.dat');
+polar_ifft_error6 = load('polar_ifft_error6.dat');
+polar_ifft_error9 = load('polar_ifft_error9.dat');
+
+figure(1);
+h=semilogy(1:length(polar_fft_error),polar_fft_error);
+set(h,'LineWidth',2.0); set(h,'Markersize',10);
+set(gca,'FontSize',22);
+grid;
+axis([0,10,10^-15,1]);
+title('Test of the polar FFT');
+xlabel('m');
+ylabel('E_{max}');
+print fig_polar_fft -deps2
+
+figure(2);
+it=0:10:100;
+h=plot(it,polar_ifft_error3,'-',it,polar_ifft_error6,'--',it,polar_ifft_error9,'-.');
+set(h,'LineWidth',2.0); set(h,'Markersize',10);
+set(gca,'FontSize',22);
+grid;
+title('Test of the inverse polar FFT');
+xlabel('iterations');
+ylabel('E_{max}');
+legend('m=3','m=6','m=9');
+print fig_ipolar_fft -deps2
+
+disp(sprintf('\n'));
+
+
+system(sprintf('./mpolar_fft_test %d %d %d',N,T,R));
+
+mpolar_fft_error = load('mpolar_fft_error.dat');
+mpolar_ifft_error3 = load('mpolar_ifft_error3.dat');
+mpolar_ifft_error6 = load('mpolar_ifft_error6.dat');
+mpolar_ifft_error9 = load('mpolar_ifft_error9.dat');
+
+figure(3);
+h=semilogy(1:length(mpolar_fft_error),mpolar_fft_error);
+set(h,'LineWidth',2.0); set(h,'Markersize',10);
+set(gca,'FontSize',22);
+grid;
+axis([0,10,10^-15,1]);
+title('Test of the mpolar FFT');
+xlabel('m');
+ylabel('E_{max}');
+print fig_mpolar_fft -deps2
+
+figure(4);
+it=0:2:20;
+h=semilogy(it,mpolar_ifft_error3,'-',it,mpolar_ifft_error6,'--',it,mpolar_ifft_error9,'-.');
+set(h,'LineWidth',2.0); set(h,'Markersize',10);
+set(gca,'FontSize',22);
+grid;
+title('Test of the inverse mpolar FFT');
+xlabel('iterations');
+ylabel('E_{max}');
+legend('m=3','m=6','m=9');
+print fig_impolar_fft -deps2
+
+disp(sprintf('\n'));
+
+
+system(sprintf('./linogram_fft_test %d %d %d',N,T,R));
+
+linogram_fft_error = load('linogram_fft_error.dat');
+linogram_ifft_error3 = load('linogram_ifft_error3.dat');
+linogram_ifft_error6 = load('linogram_ifft_error6.dat');
+linogram_ifft_error9 = load('linogram_ifft_error9.dat');
+
+figure(5);
+h=semilogy(1:length(linogram_fft_error),linogram_fft_error);
+set(h,'LineWidth',2.0); set(h,'Markersize',10);
+set(gca,'FontSize',22);
+grid;
+axis([0,10,10^-15,1]);
+title('Test of the linogram FFT');
+xlabel('m');
+ylabel('E_{max}');
+print fig_lino_fft -deps2
+
+figure(6);
+it=0:2:20;
+h=semilogy(it,linogram_ifft_error3,'-',it,linogram_ifft_error6,'--',it,linogram_ifft_error9,'-.');
+set(h,'LineWidth',2.0); set(h,'Markersize',10);
+set(gca,'FontSize',22);
+grid;
+title('Test of the inverse linogram FFT');
+xlabel('iterations');
+ylabel('E_{max}');
+legend('m=3','m=6','m=9');
+print fig_ilino_fft -deps2
diff --git a/applications/polarFFT/linogram_fft_test.c b/applications/polarFFT/linogram_fft_test.c
new file mode 100644
index 0000000..73529fa
--- /dev/null
+++ b/applications/polarFFT/linogram_fft_test.c
@@ -0,0 +1,489 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: linogram_fft_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \file polarFFT/linogram_fft_test.c
+ * \brief NFFT-based pseudo-polar FFT and inverse.
+ *
+ * Computes the NFFT-based pseudo-polar FFT and its inverse.
+ * \author Markus Fenn
+ * \date 2006
+ */
+#include "config.h"
+
+#include <math.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_polarFFT_linogramm linogram_fft_test
+ * \ingroup applications_polarFFT
+ * \{
+ */
+
+double GLOBAL_elapsed_time;
+
+/** Generates the points x with weights w
+ * for the linogram grid with T slopes and R offsets.
+ */
+static int linogram_grid(int T, int R, double *x, double *w)
+{
+ int t, r;
+ double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+
+ for(t=-T/2; t<T/2; t++)
+ {
+ for(r=-R/2; r<R/2; r++)
+ {
+ if(t<0)
+ {
+ x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R;
+ x[2*((t+T/2)*R+(r+R/2))+1] = (double)4*(t+T/4)/T*r/R;
+ }
+ else
+ {
+ x[2*((t+T/2)*R+(r+R/2))+0] = -(double)4*(t-T/4)/T*r/R;
+ x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R;
+ }
+ if (r==0)
+ w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+ else
+ w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+ }
+ }
+
+ return T*R; /** return the number of knots */
+}
+
+/** discrete pseudo-polar FFT */
+static int linogram_dft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+{
+ ticks t0, t1;
+ int j,k; /**< index for nodes and freqencies */
+ nfft_plan my_nfft_plan; /**< plan for the nfft-2D */
+
+ double *x, *w; /**< knots and associated weights */
+
+ int N[2],n[2];
+ int M=T*R; /**< number of knots */
+
+ N[0]=NN; n[0]=2*N[0]; /**< oversampling factor sigma=2 */
+ N[1]=NN; n[1]=2*N[1]; /**< oversampling factor sigma=2 */
+
+ x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
+ if (x==NULL)
+ return -1;
+
+ w = (double *)nfft_malloc(T*R*(sizeof(double)));
+ if (w==NULL)
+ return -1;
+
+ /** init two dimensional NFFT plan */
+ nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+ PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /** init nodes from linogram grid*/
+ linogram_grid(T,R,x,w);
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ {
+ my_nfft_plan.x[2*j+0] = x[2*j+0];
+ my_nfft_plan.x[2*j+1] = x[2*j+1];
+ }
+
+
+ /** init Fourier coefficients from given image */
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ my_nfft_plan.f_hat[k] = f_hat[k];
+
+ /** NFFT-2D */
+ t0 = getticks();
+ nfft_trafo_direct(&my_nfft_plan);
+ t1 = getticks();
+ GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+
+ /** copy result */
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ f[j] = my_nfft_plan.f[j];
+
+ /** finalise the plans and free the variables */
+ nfft_finalize(&my_nfft_plan);
+ nfft_free(x);
+ nfft_free(w);
+
+ return EXIT_SUCCESS;
+}
+
+/** NFFT-based pseudo-polar FFT */
+static int linogram_fft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+{
+ ticks t0, t1;
+ int j,k; /**< index for nodes and freqencies */
+ nfft_plan my_nfft_plan; /**< plan for the nfft-2D */
+
+ double *x, *w; /**< knots and associated weights */
+
+ int N[2],n[2];
+ int M=T*R; /**< number of knots */
+
+ N[0]=NN; n[0]=2*N[0]; /**< oversampling factor sigma=2 */
+ N[1]=NN; n[1]=2*N[1]; /**< oversampling factor sigma=2 */
+
+ x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
+ if (x==NULL)
+ return -1;
+
+ w = (double *)nfft_malloc(T*R*(sizeof(double)));
+ if (w==NULL)
+ return -1;
+
+ /** init two dimensional NFFT plan */
+ nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+ PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /** init nodes from linogram grid*/
+ linogram_grid(T,R,x,w);
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ {
+ my_nfft_plan.x[2*j+0] = x[2*j+0];
+ my_nfft_plan.x[2*j+1] = x[2*j+1];
+ }
+
+ /** precompute psi, the entries of the matrix B */
+ if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
+ nfft_precompute_lin_psi(&my_nfft_plan);
+
+ if(my_nfft_plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_nfft_plan);
+
+ if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
+ nfft_precompute_full_psi(&my_nfft_plan);
+
+ /** init Fourier coefficients from given image */
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ my_nfft_plan.f_hat[k] = f_hat[k];
+
+ /** NFFT-2D */
+ t0 = getticks();
+ nfft_trafo(&my_nfft_plan);
+ t1 = getticks();
+ GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+
+ /** copy result */
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ f[j] = my_nfft_plan.f[j];
+
+ /** finalise the plans and free the variables */
+ nfft_finalize(&my_nfft_plan);
+ nfft_free(x);
+ nfft_free(w);
+
+ return EXIT_SUCCESS;
+}
+
+/** NFFT-based inverse pseudo-polar FFT */
+static int inverse_linogram_fft(fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int max_i, int m)
+{
+ ticks t0, t1;
+ int j,k; /**< index for nodes and freqencies */
+ nfft_plan my_nfft_plan; /**< plan for the nfft-2D */
+ solver_plan_complex my_infft_plan; /**< plan for the inverse nfft */
+
+ double *x, *w; /**< knots and associated weights */
+ int l; /**< index for iterations */
+
+ int N[2],n[2];
+ int M=T*R; /**< number of knots */
+
+ N[0]=NN; n[0]=2*N[0]; /**< oversampling factor sigma=2 */
+ N[1]=NN; n[1]=2*N[1]; /**< oversampling factor sigma=2 */
+
+ x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
+ if (x==NULL)
+ return -1;
+
+ w = (double *)nfft_malloc(T*R*(sizeof(double)));
+ if (w==NULL)
+ return -1;
+
+ /** init two dimensional NFFT plan */
+ nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+ PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /** init two dimensional infft plan */
+ solver_init_advanced_complex(&my_infft_plan,(nfft_mv_plan_complex*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT );
+
+ /** init nodes, given samples and weights */
+ linogram_grid(T,R,x,w);
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ {
+ my_nfft_plan.x[2*j+0] = x[2*j+0];
+ my_nfft_plan.x[2*j+1] = x[2*j+1];
+ my_infft_plan.y[j] = f[j];
+ my_infft_plan.w[j] = w[j];
+ }
+
+ /** precompute psi, the entries of the matrix B */
+ if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
+ nfft_precompute_lin_psi(&my_nfft_plan);
+
+ if(my_nfft_plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_nfft_plan);
+
+ if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
+ nfft_precompute_full_psi(&my_nfft_plan);
+
+ /** initialise damping factors */
+ if(my_infft_plan.flags & PRECOMPUTE_DAMP)
+ for(j=0;j<my_nfft_plan.N[0];j++)
+ for(k=0;k<my_nfft_plan.N[1];k++)
+ {
+ my_infft_plan.w_hat[j*my_nfft_plan.N[1]+k]=
+ (sqrt(pow(j-my_nfft_plan.N[0]/2,2)+pow(k-my_nfft_plan.N[1]/2,2))>(my_nfft_plan.N[0]/2)?0:1);
+ }
+
+ /** initialise some guess f_hat_0 */
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ my_infft_plan.f_hat_iter[k] = 0.0 + _Complex_I*0.0;
+
+ t0 = getticks();
+ /** solve the system */
+ solver_before_loop_complex(&my_infft_plan);
+
+ if (max_i<1)
+ {
+ l=1;
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ my_infft_plan.f_hat_iter[k] = my_infft_plan.p_hat_iter[k];
+ }
+ else
+ {
+ for(l=1;l<=max_i;l++)
+ {
+ solver_loop_one_step_complex(&my_infft_plan);
+ }
+ }
+
+ t1 = getticks();
+ GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+
+ /** copy result */
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ f_hat[k] = my_infft_plan.f_hat_iter[k];
+
+ /** finalise the plans and free the variables */
+ solver_finalize_complex(&my_infft_plan);
+ nfft_finalize(&my_nfft_plan);
+ nfft_free(x);
+ nfft_free(w);
+
+ return EXIT_SUCCESS;
+}
+
+/** Comparison of the FFTW, linogram FFT, and inverse linogram FFT */
+int comparison_fft(FILE *fp, int N, int T, int R)
+{
+ ticks t0, t1;
+ fftw_plan my_fftw_plan;
+ fftw_complex *f_hat,*f;
+ int m,k;
+ double t_fft, t_dft_linogram;
+
+ f_hat = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+ f = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*(T*R/4)*5);
+
+ my_fftw_plan = fftw_plan_dft_2d(N,N,f_hat,f,FFTW_BACKWARD,FFTW_MEASURE);
+
+ for(k=0; k<N*N; k++)
+ f_hat[k] = (((double)rand())/RAND_MAX) + _Complex_I* (((double)rand())/RAND_MAX);
+
+ t0 = getticks();
+ for(m=0;m<65536/N;m++)
+ {
+ fftw_execute(my_fftw_plan);
+ /* touch */
+ f_hat[2]=2*f_hat[0];
+ }
+ t1 = getticks();
+ GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+ t_fft=N*GLOBAL_elapsed_time/65536;
+
+ if(N<256)
+ {
+ linogram_dft(f_hat,N,f,T,R,m);
+ t_dft_linogram=GLOBAL_elapsed_time;
+ }
+
+ for (m=3; m<=9; m+=3)
+ {
+ if((m==3)&&(N<256))
+ fprintf(fp,"%d\t&\t&\t%1.1e&\t%1.1e&\t%d\t",N,t_fft,t_dft_linogram,m);
+ else
+ if(m==3)
+ fprintf(fp,"%d\t&\t&\t%1.1e&\t &\t%d\t",N,t_fft,m);
+ else
+ fprintf(fp," \t&\t&\t &\t &\t%d\t",m);
+
+ printf("N=%d\tt_fft=%1.1e\tt_dft_linogram=%1.1e\tm=%d\t",N,t_fft,t_dft_linogram,m);
+
+ linogram_fft(f_hat,N,f,T,R,m);
+ fprintf(fp,"%1.1e&\t",GLOBAL_elapsed_time);
+ printf("t_linogram=%1.1e\t",GLOBAL_elapsed_time);
+ inverse_linogram_fft(f,T,R,f_hat,N,m+3,m);
+ if(m==9)
+ fprintf(fp,"%1.1e\\\\\\hline\n",GLOBAL_elapsed_time);
+ else
+ fprintf(fp,"%1.1e\\\\\n",GLOBAL_elapsed_time);
+ printf("t_ilinogram=%1.1e\n",GLOBAL_elapsed_time);
+ }
+
+ fflush(fp);
+
+ nfft_free(f);
+ nfft_free(f_hat);
+
+ return EXIT_SUCCESS;
+}
+
+/** test program for various parameters */
+int main(int argc,char **argv)
+{
+ int N; /**< linogram FFT size NxN */
+ int T, R; /**< number of directions/offsets */
+ int M; /**< number of knots of linogram grid */
+ double *x, *w; /**< knots and associated weights */
+ fftw_complex *f_hat, *f, *f_direct, *f_tilde;
+ int k;
+ int max_i; /**< number of iterations */
+ int m;
+ double temp1, temp2, E_max=0.0;
+ FILE *fp1, *fp2;
+ char filename[30];
+ int logN;
+
+ if( argc!=4 )
+ {
+ printf("linogram_fft_test N T R \n");
+ printf("\n");
+ printf("N linogram FFT of size NxN \n");
+ printf("T number of slopes \n");
+ printf("R number of offsets \n");
+
+ /** Hence, comparison of the FFTW, linogram FFT, and inverse linogram FFT */
+ printf("\nHence, comparison FFTW, linogram FFT and inverse linogram FFT\n");
+ fp1=fopen("linogram_comparison_fft.dat","w");
+ if (fp1==NULL)
+ return(-1);
+ for (logN=4; logN<=8; logN++)
+ comparison_fft(fp1,(1U<< logN), 3*(1U<< logN), 3*(1U<< (logN-1)));
+ fclose(fp1);
+
+ exit(-1);
+ }
+
+ N = atoi(argv[1]);
+ T = atoi(argv[2]);
+ R = atoi(argv[3]);
+ printf("N=%d, linogram grid with T=%d, R=%d => ",N,T,R);
+
+ x = (double *)nfft_malloc(5*T*R/2*(sizeof(double)));
+ w = (double *)nfft_malloc(5*T*R/4*(sizeof(double)));
+
+ f_hat = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+ f = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*5*T*R/4); /* 4/pi*log(1+sqrt(2)) = 1.122... < 1.25 */
+ f_direct = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*5*T*R/4);
+ f_tilde = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+
+ /** generate knots of linogram grid */
+ M=linogram_grid(T,R,x,w); printf("M=%d.\n",M);
+
+ /** load data */
+ fp1=fopen("input_data_r.dat","r");
+ fp2=fopen("input_data_i.dat","r");
+ if ((fp1==NULL) || (fp2==NULL))
+ return(-1);
+ for(k=0;k<N*N;k++)
+ {
+ fscanf(fp1,"%le ",&temp1);
+ fscanf(fp2,"%le ",&temp2);
+ f_hat[k]=temp1+_Complex_I*temp2;
+ }
+ fclose(fp1);
+ fclose(fp2);
+
+ /** direct linogram FFT */
+ linogram_dft(f_hat,N,f_direct,T,R,1);
+ // linogram_fft(f_hat,N,f_direct,T,R,12);
+
+ /** Test of the linogram FFT with different m */
+ printf("\nTest of the linogram FFT: \n");
+ fp1=fopen("linogram_fft_error.dat","w+");
+ for (m=1; m<=12; m++)
+ {
+ /** fast linogram FFT */
+ linogram_fft(f_hat,N,f,T,R,m);
+
+ /** error of fast linogram FFT */
+ E_max=X(error_l_infty_complex)(f_direct,f,M);
+ //E_max=X(error_l_2_complex)(f_direct,f,M);
+
+ printf("m=%2d: E_max = %e\n",m,E_max);
+ fprintf(fp1,"%e\n",E_max);
+ }
+ fclose(fp1);
+
+ /** Test of the inverse linogram FFT for different m in dependece of the iteration number*/
+ for (m=3; m<=9; m+=3)
+ {
+ printf("\nTest of the inverse linogram FFT for m=%d: \n",m);
+ sprintf(filename,"linogram_ifft_error%d.dat",m);
+ fp1=fopen(filename,"w+");
+ for (max_i=0; max_i<=20; max_i+=2)
+ {
+ /** inverse linogram FFT */
+ inverse_linogram_fft(f_direct,T,R,f_tilde,N,max_i,m);
+
+ /** compute maximum error */
+ E_max=X(error_l_infty_complex)(f_hat,f_tilde,N*N);
+ printf("%3d iterations: E_max = %e\n",max_i,E_max);
+ fprintf(fp1,"%e\n",E_max);
+ }
+ fclose(fp1);
+ }
+
+ /** free the variables */
+ nfft_free(x);
+ nfft_free(w);
+ nfft_free(f_hat);
+ nfft_free(f);
+ nfft_free(f_direct);
+ nfft_free(f_tilde);
+
+ return 0;
+}
+/* \} */
diff --git a/applications/polarFFT/mpolar_fft_test.c b/applications/polarFFT/mpolar_fft_test.c
new file mode 100644
index 0000000..0bb4e01
--- /dev/null
+++ b/applications/polarFFT/mpolar_fft_test.c
@@ -0,0 +1,517 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: mpolar_fft_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \file polarFFT/mpolar_fft_test.c
+ * \brief NFFT-based polar FFT and inverse on modified polar grid.
+ *
+ * Computes the NFFT-based polar FFT and its inverse
+ * on a modified polar grid for various parameters.
+ * \author Markus Fenn
+ * \date 2006
+ */
+#include "config.h"
+
+#include <math.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_polarFFT_mpolar mpolar_fft_test
+ * \ingroup applications_polarFFT
+ * \{
+ */
+
+double GLOBAL_elapsed_time;
+
+/** Generates the points \f$x_{t,j}\f$ with weights \f$w_{t,j}\f$
+ * for the modified polar grid with \f$T\f$ angles and \f$R\f$ offsets.
+ *
+ * We add more concentric circles to the polar grid
+ * and exclude those nodes not located in the unit square, i.e.,
+ * \f[
+ * x_{t,j} := r_j\left(\cos\theta_t, \sin\theta_t\right)^{\top}\,,\qquad
+ * (j,t)^{\top}\in I_{\sqrt{2}R}\times I_T\,.
+ * \f]
+ * with \f$r_j\f$ and \f$\theta_t\f$ as for the polar grid.
+ * The number of nodes for the modified polar grid can be estimated as
+ * \f$M \approx \frac{4}{\pi}\log(1+\sqrt{2}) T R\f$.
+ */
+static int mpolar_grid(int T, int R, double *x, double *w)
+{
+ int t, r;
+ double W;
+ int R2=2*ceil(sqrt(2.0)*R/2);
+ double xx, yy;
+ int M=0;
+
+ for(t=-T/2; t<T/2; t++)
+ {
+ for(r=-R2/2; r<R2/2; r++)
+ {
+ xx = (double)r/R*cos(PI*t/T);
+ yy = (double)r/R*sin(PI*t/T);
+
+ if ( ((-0.5-1.0/(double)R)<=xx) & (xx<=(0.5+1.0/(double)R)) &
+ ((-0.5-1.0/(double)R)<=yy) & (yy<=(0.5+1.0/(double)R)) )
+ {
+ x[2*M+0] = xx;
+ x[2*M+1] = yy;
+
+ if (r==0)
+ w[M] = 1.0/4.0;
+ else
+ w[M] = fabs((double)r);
+
+ M++; /** count the knots */
+ }
+ }
+ }
+
+ /** normalize the weights */
+ W=0.0;
+ for (t=0; t<M; t++)
+ W+=w[t];
+
+ for (t=0; t<M; t++)
+ w[t]/=W;
+
+ return M; /** return the number of knots */
+}
+
+/** discrete mpolar FFT */
+static int mpolar_dft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+{
+ ticks t0, t1;
+ int j,k; /**< index for nodes and freqencies */
+ nfft_plan my_nfft_plan; /**< plan for the nfft-2D */
+
+ double *x, *w; /**< knots and associated weights */
+
+ int N[2],n[2];
+ int M; /**< number of knots */
+
+ N[0]=NN; n[0]=2*N[0]; /**< oversampling factor sigma=2 */
+ N[1]=NN; n[1]=2*N[1]; /**< oversampling factor sigma=2 */
+
+ x = (double *)nfft_malloc(5*(T/2)*R*(sizeof(double)));
+ if (x==NULL)
+ return -1;
+
+ w = (double *)nfft_malloc(5*(T*R)/4*(sizeof(double)));
+ if (w==NULL)
+ return -1;
+
+ /** init two dimensional NFFT plan */
+ M=mpolar_grid(T,R,x,w);
+ nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+ PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /** init nodes from mpolar grid*/
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ {
+ my_nfft_plan.x[2*j+0] = x[2*j+0];
+ my_nfft_plan.x[2*j+1] = x[2*j+1];
+ }
+
+ /** init Fourier coefficients from given image */
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ my_nfft_plan.f_hat[k] = f_hat[k];
+
+ t0 = getticks();
+
+ /** NDFT-2D */
+ nfft_trafo_direct(&my_nfft_plan);
+
+ t1 = getticks();
+ GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+
+ /** copy result */
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ f[j] = my_nfft_plan.f[j];
+
+ /** finalise the plans and free the variables */
+ nfft_finalize(&my_nfft_plan);
+ nfft_free(x);
+ nfft_free(w);
+
+ return EXIT_SUCCESS;
+}
+
+/** NFFT-based mpolar FFT */
+static int mpolar_fft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+{
+ ticks t0, t1;
+ int j,k; /**< index for nodes and freqencies */
+ nfft_plan my_nfft_plan; /**< plan for the nfft-2D */
+
+ double *x, *w; /**< knots and associated weights */
+
+ int N[2],n[2];
+ int M; /**< number of knots */
+
+ N[0]=NN; n[0]=2*N[0]; /**< oversampling factor sigma=2 */
+ N[1]=NN; n[1]=2*N[1]; /**< oversampling factor sigma=2 */
+
+ x = (double *)nfft_malloc(5*T*R/2*(sizeof(double)));
+ if (x==NULL)
+ return -1;
+
+ w = (double *)nfft_malloc(5*T*R/4*(sizeof(double)));
+ if (w==NULL)
+ return -1;
+
+ /** init two dimensional NFFT plan */
+ M=mpolar_grid(T,R,x,w);
+ nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+ PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /** init nodes from mpolar grid*/
+
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ {
+ my_nfft_plan.x[2*j+0] = x[2*j+0];
+ my_nfft_plan.x[2*j+1] = x[2*j+1];
+ }
+
+ /** precompute psi, the entries of the matrix B */
+ if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
+ nfft_precompute_lin_psi(&my_nfft_plan);
+
+ if(my_nfft_plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_nfft_plan);
+
+ if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
+ nfft_precompute_full_psi(&my_nfft_plan);
+
+ /** init Fourier coefficients from given image */
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ my_nfft_plan.f_hat[k] = f_hat[k];
+
+ t0 = getticks();
+
+ /** NFFT-2D */
+ nfft_trafo(&my_nfft_plan);
+
+ t1 = getticks();
+ GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+
+ /** copy result */
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ f[j] = my_nfft_plan.f[j];
+
+ /** finalise the plans and free the variables */
+ nfft_finalize(&my_nfft_plan);
+ nfft_free(x);
+ nfft_free(w);
+
+ return EXIT_SUCCESS;
+}
+
+/** inverse NFFT-based mpolar FFT */
+static int inverse_mpolar_fft(fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int max_i, int m)
+{
+ ticks t0, t1;
+ int j,k; /**< index for nodes and freqencies */
+ nfft_plan my_nfft_plan; /**< plan for the nfft-2D */
+ solver_plan_complex my_infft_plan; /**< plan for the inverse nfft */
+
+ double *x, *w; /**< knots and associated weights */
+ int l; /**< index for iterations */
+
+ int N[2],n[2];
+ int M; /**< number of knots */
+
+ N[0]=NN; n[0]=2*N[0]; /**< oversampling factor sigma=2 */
+ N[1]=NN; n[1]=2*N[1]; /**< oversampling factor sigma=2 */
+
+ x = (double *)nfft_malloc(5*T*R/2*(sizeof(double)));
+ if (x==NULL)
+ return -1;
+
+ w = (double *)nfft_malloc(5*T*R/4*(sizeof(double)));
+ if (w==NULL)
+ return -1;
+
+ /** init two dimensional NFFT plan */
+ M=mpolar_grid(T,R,x,w);
+ nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+ PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /** init two dimensional infft plan */
+ solver_init_advanced_complex(&my_infft_plan,(nfft_mv_plan_complex*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT );
+
+ /** init nodes, given samples and weights */
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ {
+ my_nfft_plan.x[2*j+0] = x[2*j+0];
+ my_nfft_plan.x[2*j+1] = x[2*j+1];
+ my_infft_plan.y[j] = f[j];
+ my_infft_plan.w[j] = w[j];
+ }
+
+ /** precompute psi, the entries of the matrix B */
+ if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
+ nfft_precompute_lin_psi(&my_nfft_plan);
+
+ if(my_nfft_plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_nfft_plan);
+
+ if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
+ nfft_precompute_full_psi(&my_nfft_plan);
+
+
+ /** initialise damping factors */
+ if(my_infft_plan.flags & PRECOMPUTE_DAMP)
+ for(j=0;j<my_nfft_plan.N[0];j++)
+ for(k=0;k<my_nfft_plan.N[1];k++)
+ {
+ my_infft_plan.w_hat[j*my_nfft_plan.N[1]+k]=
+ (sqrt(pow(j-my_nfft_plan.N[0]/2,2)+pow(k-my_nfft_plan.N[1]/2,2))>(my_nfft_plan.N[0]/2)?0:1);
+ }
+
+ /** initialise some guess f_hat_0 */
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ my_infft_plan.f_hat_iter[k] = 0.0 + _Complex_I*0.0;
+
+ t0 = getticks();
+
+ /** solve the system */
+ solver_before_loop_complex(&my_infft_plan);
+
+ if (max_i<1)
+ {
+ l=1;
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ my_infft_plan.f_hat_iter[k] = my_infft_plan.p_hat_iter[k];
+ }
+ else
+ {
+ for(l=1;l<=max_i;l++)
+ {
+ solver_loop_one_step_complex(&my_infft_plan);
+ }
+ }
+
+ t1 = getticks();
+ GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+
+ /** copy result */
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ f_hat[k] = my_infft_plan.f_hat_iter[k];
+
+ /** finalise the plans and free the variables */
+ solver_finalize_complex(&my_infft_plan);
+ nfft_finalize(&my_nfft_plan);
+ nfft_free(x);
+ nfft_free(w);
+
+ return EXIT_SUCCESS;
+}
+
+/** Comparison of the FFTW, mpolar FFT, and inverse mpolar FFT */
+static int comparison_fft(FILE *fp, int N, int T, int R)
+{
+ ticks t0, t1;
+ fftw_plan my_fftw_plan;
+ fftw_complex *f_hat,*f;
+ int m,k;
+ double t_fft, t_dft_mpolar;
+
+ f_hat = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+ f = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*(T*R/4)*5);
+
+ my_fftw_plan = fftw_plan_dft_2d(N,N,f_hat,f,FFTW_BACKWARD,FFTW_MEASURE);
+
+ for(k=0; k<N*N; k++)
+ f_hat[k] = (((double)rand())/RAND_MAX) + _Complex_I* (((double)rand())/RAND_MAX);
+
+ t0 = getticks();
+ for(m=0;m<65536/N;m++)
+ {
+ fftw_execute(my_fftw_plan);
+ /* touch */
+ f_hat[2]=2*f_hat[0];
+ }
+ t1 = getticks();
+ GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+ t_fft=N*GLOBAL_elapsed_time/65536;
+
+ if(N<256)
+ {
+ mpolar_dft(f_hat,N,f,T,R,1);
+ t_dft_mpolar=GLOBAL_elapsed_time;
+ }
+
+ for (m=3; m<=9; m+=3)
+ {
+ if((m==3)&&(N<256))
+ fprintf(fp,"%d\t&\t&\t%1.1e&\t%1.1e&\t%d\t",N,t_fft,t_dft_mpolar,m);
+ else
+ if(m==3)
+ fprintf(fp,"%d\t&\t&\t%1.1e&\t &\t%d\t",N,t_fft,m);
+ else
+ fprintf(fp," \t&\t&\t &\t &\t%d\t",m);
+
+ printf("N=%d\tt_fft=%1.1e\tt_dft_mpolar=%1.1e\tm=%d\t",N,t_fft,t_dft_mpolar,m);
+
+ mpolar_fft(f_hat,N,f,T,R,m);
+ fprintf(fp,"%1.1e&\t",GLOBAL_elapsed_time);
+ printf("t_mpolar=%1.1e\t",GLOBAL_elapsed_time);
+ inverse_mpolar_fft(f,T,R,f_hat,N,2*m,m);
+ if(m==9)
+ fprintf(fp,"%1.1e\\\\\\hline\n",GLOBAL_elapsed_time);
+ else
+ fprintf(fp,"%1.1e\\\\\n",GLOBAL_elapsed_time);
+ printf("t_impolar=%1.1e\n",GLOBAL_elapsed_time);
+ }
+
+ fflush(fp);
+
+ nfft_free(f);
+ nfft_free(f_hat);
+
+ return EXIT_SUCCESS;
+}
+
+/** test program for various parameters */
+int main(int argc,char **argv)
+{
+ int N; /**< mpolar FFT size NxN */
+ int T, R; /**< number of directions/offsets */
+ int M; /**< number of knots of mpolar grid */
+ double *x, *w; /**< knots and associated weights */
+ fftw_complex *f_hat, *f, *f_direct, *f_tilde;
+ int k;
+ int max_i; /**< number of iterations */
+ int m;
+ double temp1, temp2, E_max=0.0;
+ FILE *fp1, *fp2;
+ char filename[30];
+ int logN;
+
+ if( argc!=4 )
+ {
+ printf("mpolar_fft_test N T R \n");
+ printf("\n");
+ printf("N mpolar FFT of size NxN \n");
+ printf("T number of slopes \n");
+ printf("R number of offsets \n");
+
+ /** Hence, comparison of the FFTW, mpolar FFT, and inverse mpolar FFT */
+ printf("\nHence, comparison FFTW, mpolar FFT and inverse mpolar FFT\n");
+ fp1=fopen("mpolar_comparison_fft.dat","w");
+ if (fp1==NULL)
+ return(-1);
+ for (logN=4; logN<=8; logN++)
+ comparison_fft(fp1,(1U<< logN), 3*(1U<< logN), 3*(1U<< (logN-1)));
+ fclose(fp1);
+
+ exit(-1);
+ }
+
+ N = atoi(argv[1]);
+ T = atoi(argv[2]);
+ R = atoi(argv[3]);
+ printf("N=%d, modified polar grid with T=%d, R=%d => ",N,T,R);
+
+ x = (double *)nfft_malloc(5*T*R/2*(sizeof(double)));
+ w = (double *)nfft_malloc(5*T*R/4*(sizeof(double)));
+
+ f_hat = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+ f = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*1.25*T*R); /* 4/pi*log(1+sqrt(2)) = 1.122... < 1.25 */
+ f_direct = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*1.25*T*R);
+ f_tilde = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+
+ /** generate knots of mpolar grid */
+ M=mpolar_grid(T,R,x,w); printf("M=%d.\n",M);
+
+ /** load data */
+ fp1=fopen("input_data_r.dat","r");
+ fp2=fopen("input_data_i.dat","r");
+ if ((fp1==NULL) || (fp2==NULL))
+ return(-1);
+ for(k=0;k<N*N;k++)
+ {
+ fscanf(fp1,"%le ",&temp1);
+ fscanf(fp2,"%le ",&temp2);
+ f_hat[k]=temp1+ _Complex_I*temp2;
+ }
+ fclose(fp1);
+ fclose(fp2);
+
+ /** direct mpolar FFT */
+ mpolar_dft(f_hat,N,f_direct,T,R,1);
+ // mpolar_fft(f_hat,N,f_direct,T,R,12);
+
+ /** Test of the mpolar FFT with different m */
+ printf("\nTest of the mpolar FFT: \n");
+ fp1=fopen("mpolar_fft_error.dat","w+");
+ for (m=1; m<=12; m++)
+ {
+ /** fast mpolar FFT */
+ mpolar_fft(f_hat,N,f,T,R,m);
+
+ /** compute error of fast mpolar FFT */
+ E_max=X(error_l_infty_complex)(f_direct,f,M);
+ printf("m=%2d: E_max = %e\n",m,E_max);
+ fprintf(fp1,"%e\n",E_max);
+ }
+ fclose(fp1);
+
+ /** Test of the inverse mpolar FFT for different m in dependece of the iteration number*/
+ for (m=3; m<=9; m+=3)
+ {
+ printf("\nTest of the inverse mpolar FFT for m=%d: \n",m);
+ sprintf(filename,"mpolar_ifft_error%d.dat",m);
+ fp1=fopen(filename,"w+");
+ for (max_i=0; max_i<=20; max_i+=2)
+ {
+ /** inverse mpolar FFT */
+ inverse_mpolar_fft(f_direct,T,R,f_tilde,N,max_i,m);
+
+ /** compute maximum relativ error */
+ E_max=X(error_l_infty_complex)(f_hat,f_tilde,N*N);
+ printf("%3d iterations: E_max = %e\n",max_i,E_max);
+ fprintf(fp1,"%e\n",E_max);
+ }
+ fclose(fp1);
+ }
+
+ /** free the variables */
+ nfft_free(x);
+ nfft_free(w);
+ nfft_free(f_hat);
+ nfft_free(f);
+ nfft_free(f_direct);
+ nfft_free(f_tilde);
+
+ return 0;
+}
+/* \} */
diff --git a/applications/polarFFT/phantom.m b/applications/polarFFT/phantom.m
new file mode 100644
index 0000000..3d17d08
--- /dev/null
+++ b/applications/polarFFT/phantom.m
@@ -0,0 +1,46 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: phantom.m 3776 2012-06-03 13:29:25Z keiner $
+function I=phantom(N)
+% phantom(N)
+% generates the (modified) Shepp-Logan phantom of P. Toft
+% as an NxN matrix.
+%
+% Reference: Peter Toft: "The Radon Transform - Theory and Implementation", Ph.D. thesis.
+% Department of Mathematical Modelling, Technical University of Denmark, June 1996. 326 pages.
+
+% Author: Markus Fenn, 2005
+
+I = zeros(N,N);
+
+k = linspace(-1,1,N);
+[x,y] = meshgrid(k);
+
+I = I + 1.0 * ( (x/0.69).^2+(y/0.92).^2 <= 1 );
+I = I - 0.8 * ( (x/0.6624).^2+((y+0.0184)/0.874).^2 <= 1 );
+I = I - 0.2 * ( ( (cos(-18/360*2*pi)*(x-0.22)+sin(-18/360*2*pi)*y)/0.11).^2+...
+ ( (sin(-18/360*2*pi)*(x-0.22)-cos(-18/360*2*pi)*y)/0.31).^2 <= 1 );
+I = I - 0.2 * ( ( (cos( 18/360*2*pi)*(x+0.22)+sin( 18/360*2*pi)*y)/0.16).^2+...
+ ( (sin( 18/360*2*pi)*(x+0.22)-cos( 18/360*2*pi)*y)/0.41).^2 <= 1 );
+I = I + 0.1 * ( (x/0.21).^2+((y-0.35)/0.25).^2 <= 1 );
+I = I + 0.1 * ( (x/0.046).^2+((y-0.1)/0.046).^2 <= 1 );
+I = I + 0.1 * ( (x/0.046).^2+((y+0.1)/0.046).^2 <= 1 );
+I = I + 0.1 * ( ((x+0.08)/0.046).^2+((y+0.605)/0.023).^2 <= 1 );
+I = I + 0.1 * ( (x/0.023).^2+((y+0.606)/0.023).^2 <= 1 );
+I = I + 0.1 * ( ((x-0.06)/0.023).^2+((y+0.605)/0.046).^2 <= 1 );
+
+I=flipud(I);
diff --git a/applications/polarFFT/polar_fft_test.c b/applications/polarFFT/polar_fft_test.c
new file mode 100644
index 0000000..cce3bff
--- /dev/null
+++ b/applications/polarFFT/polar_fft_test.c
@@ -0,0 +1,423 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: polar_fft_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \file polarFFT/polar_fft_test.c
+ * \brief NFFT-based polar FFT and inverse.
+ *
+ * Computes the NFFT-based polar FFT and its inverse for various parameters.
+ * \author Markus Fenn
+ * \date 2006
+ */
+#include "config.h"
+
+#include <math.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+/**
+ * \defgroup applications_polarFFT_polar polar_fft_test
+ * \ingroup applications_polarFFT
+ * \{
+ */
+
+/** Generates the points \f$x_{t,j}\f$ with weights \f$w_{t,j}\f$
+ * for the polar grid with \f$T\f$ angles and \f$R\f$ offsets.
+ *
+ * The nodes of the polar grid lie on concentric circles around the origin.
+ * They are given for \f$(j,t)^{\top}\in I_R\times I_T\f$ by
+ * a signed radius \f$r_j := \frac{j}{R} \in [-\frac{1}{2},\frac{1}{2})\f$ and
+ * an angle \f$\theta_t := \frac{\pi t}{T} \in [-\frac{\pi}{2},\frac{\pi}{2})\f$
+ * as
+ * \f[
+ * x_{t,j} := r_j\left(\cos\theta_t, \sin\theta_t\right)^{\top}\,.
+ * \f]
+ * The total number of nodes is \f$M=TR\f$,
+ * whereas the origin is included multiple times.
+ *
+ * Weights are introduced to compensate for local sampling density variations.
+ * For every point in the sampling set, we associate a small surrounding area.
+ * In case of the polar grid, we choose small ring segments.
+ * The area of such a ring segment around \f$x_{t,j}\f$ (\f$j \ne 0\f$) is
+ * \f[
+ * w_{t,j}
+ * = \frac{\pi}{2TR^2}\left(\left(|j|+\frac{1}{2}\right)^2-
+ * \left(|j|-\frac{1}{2}\right)^2\right)
+ * = \frac{\pi |j| }{TR^2}\, .
+ * \f]
+ * The area of the small circle of radius \f$\frac{1}{2R}\f$ around the origin is
+ * \f$\frac{\pi}{4R^2}\f$.
+ * Divided by the multiplicity of the origin in the sampling set, we get
+ * \f$w_{t,0} := \frac{\pi}{4TR^2}\f$.
+ * Thus, the sum of all weights is \f$\frac{\pi}{4}(1+\frac{1}{R^2})\f$ and
+ * we divide by this value for normalization.
+ */
+static int polar_grid(int T, int R, double *x, double *w)
+{
+ int t, r;
+ double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+
+ for(t=-T/2; t<T/2; t++)
+ {
+ for(r=-R/2; r<R/2; r++)
+ {
+ x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R*cos(PI*t/T);
+ x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R*sin(PI*t/T);
+ if (r==0)
+ w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+ else
+ w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+ }
+ }
+
+ return T*R; /** return the number of knots */
+}
+
+/** discrete polar FFT */
+static int polar_dft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+{
+ int j,k; /**< index for nodes and frequencies */
+ nfft_plan my_nfft_plan; /**< plan for the nfft-2D */
+
+ double *x, *w; /**< knots and associated weights */
+
+ int N[2],n[2];
+ int M=T*R; /**< number of knots */
+
+ N[0]=NN; n[0]=2*N[0]; /**< oversampling factor sigma=2 */
+ N[1]=NN; n[1]=2*N[1]; /**< oversampling factor sigma=2 */
+
+ x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
+ if (x==NULL)
+ return -1;
+
+ w = (double *)nfft_malloc(T*R*(sizeof(double)));
+ if (w==NULL)
+ return -1;
+
+ /** init two dimensional NFFT plan */
+ nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+ PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /** init nodes from polar grid*/
+ polar_grid(T,R,x,w);
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ {
+ my_nfft_plan.x[2*j+0] = x[2*j+0];
+ my_nfft_plan.x[2*j+1] = x[2*j+1];
+ }
+
+ /** init Fourier coefficients from given image */
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ my_nfft_plan.f_hat[k] = f_hat[k];
+
+ /** NDFT-2D */
+ nfft_trafo_direct(&my_nfft_plan);
+
+ /** copy result */
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ f[j] = my_nfft_plan.f[j];
+
+ /** finalise the plans and free the variables */
+ nfft_finalize(&my_nfft_plan);
+ nfft_free(x);
+ nfft_free(w);
+
+ return EXIT_SUCCESS;
+}
+
+/** NFFT-based polar FFT */
+static int polar_fft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+{
+ int j,k; /**< index for nodes and freqencies */
+ nfft_plan my_nfft_plan; /**< plan for the nfft-2D */
+
+ double *x, *w; /**< knots and associated weights */
+
+ int N[2],n[2];
+ int M=T*R; /**< number of knots */
+
+ N[0]=NN; n[0]=2*N[0]; /**< oversampling factor sigma=2 */
+ N[1]=NN; n[1]=2*N[1]; /**< oversampling factor sigma=2 */
+
+ x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
+ if (x==NULL)
+ return -1;
+
+ w = (double *)nfft_malloc(T*R*(sizeof(double)));
+ if (w==NULL)
+ return -1;
+
+ /** init two dimensional NFFT plan */
+ nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+ PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /** init nodes from polar grid*/
+ polar_grid(T,R,x,w);
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ {
+ my_nfft_plan.x[2*j+0] = x[2*j+0];
+ my_nfft_plan.x[2*j+1] = x[2*j+1];
+ }
+
+ /** precompute psi, the entries of the matrix B */
+ if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
+ nfft_precompute_lin_psi(&my_nfft_plan);
+
+ if(my_nfft_plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_nfft_plan);
+
+ if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
+ nfft_precompute_full_psi(&my_nfft_plan);
+
+ /** init Fourier coefficients from given image */
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ my_nfft_plan.f_hat[k] = f_hat[k];
+
+ /** NFFT-2D */
+ nfft_trafo(&my_nfft_plan);
+
+ /** copy result */
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ f[j] = my_nfft_plan.f[j];
+
+ /** finalise the plans and free the variables */
+ nfft_finalize(&my_nfft_plan);
+ nfft_free(x);
+ nfft_free(w);
+
+ return EXIT_SUCCESS;
+}
+
+/** inverse NFFT-based polar FFT */
+static int inverse_polar_fft(fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int max_i, int m)
+{
+ int j,k; /**< index for nodes and freqencies */
+ nfft_plan my_nfft_plan; /**< plan for the nfft-2D */
+ solver_plan_complex my_infft_plan; /**< plan for the inverse nfft */
+
+ double *x, *w; /**< knots and associated weights */
+ int l; /**< index for iterations */
+
+ int N[2],n[2];
+ int M=T*R; /**< number of knots */
+
+ N[0]=NN; n[0]=2*N[0]; /**< oversampling factor sigma=2 */
+ N[1]=NN; n[1]=2*N[1]; /**< oversampling factor sigma=2 */
+
+ x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
+ if (x==NULL)
+ return -1;
+
+ w = (double *)nfft_malloc(T*R*(sizeof(double)));
+ if (w==NULL)
+ return -1;
+
+ /** init two dimensional NFFT plan */
+ nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
+ PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /** init two dimensional infft plan */
+ solver_init_advanced_complex(&my_infft_plan,(nfft_mv_plan_complex*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT );
+
+ /** init nodes, given samples and weights */
+ polar_grid(T,R,x,w);
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ {
+ my_nfft_plan.x[2*j+0] = x[2*j+0];
+ my_nfft_plan.x[2*j+1] = x[2*j+1];
+ my_infft_plan.y[j] = f[j];
+ my_infft_plan.w[j] = w[j];
+ }
+
+ /** precompute psi, the entries of the matrix B */
+ if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
+ nfft_precompute_lin_psi(&my_nfft_plan);
+
+ if(my_nfft_plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_nfft_plan);
+
+ if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
+ nfft_precompute_full_psi(&my_nfft_plan);
+
+ /** initialise damping factors */
+ if(my_infft_plan.flags & PRECOMPUTE_DAMP)
+ for(j=0;j<my_nfft_plan.N[0];j++)
+ for(k=0;k<my_nfft_plan.N[1];k++)
+ {
+ my_infft_plan.w_hat[j*my_nfft_plan.N[1]+k]=
+ (sqrt(pow((double)(j-my_nfft_plan.N[0]/2),2.0)+pow((double)(k-my_nfft_plan.N[1]/2),2.0))
+ >((double)(my_nfft_plan.N[0]/2))?0:1);
+ }
+
+ /** initialise some guess f_hat_0 */
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ my_infft_plan.f_hat_iter[k] = 0.0 + _Complex_I*0.0;
+
+ /** solve the system */
+ solver_before_loop_complex(&my_infft_plan);
+
+ if (max_i<1)
+ {
+ l=1;
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ my_infft_plan.f_hat_iter[k] = my_infft_plan.p_hat_iter[k];
+ }
+ else
+ {
+ for(l=1;l<=max_i;l++)
+ {
+ solver_loop_one_step_complex(&my_infft_plan);
+ }
+ }
+
+ /** copy result */
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ f_hat[k] = my_infft_plan.f_hat_iter[k];
+
+ /** finalise the plans and free the variables */
+ solver_finalize_complex(&my_infft_plan);
+ nfft_finalize(&my_nfft_plan);
+ nfft_free(x);
+ nfft_free(w);
+
+ return EXIT_SUCCESS;
+}
+
+/** test program for various parameters */
+int main(int argc,char **argv)
+{
+ int N; /**< mpolar FFT size NxN */
+ int T, R; /**< number of directions/offsets */
+ int M; /**< number of knots of mpolar grid */
+ double *x, *w; /**< knots and associated weights */
+ fftw_complex *f_hat, *f, *f_direct, *f_tilde;
+ int k;
+ int max_i; /**< number of iterations */
+ int m = 1;
+ double temp1, temp2, E_max=0.0;
+ FILE *fp1, *fp2;
+ char filename[30];
+
+ if( argc!=4 )
+ {
+ printf("polar_fft_test N T R \n");
+ printf("\n");
+ printf("N polar FFT of size NxN \n");
+ printf("T number of slopes \n");
+ printf("R number of offsets \n");
+ exit(-1);
+ }
+
+ N = atoi(argv[1]);
+ T = atoi(argv[2]);
+ R = atoi(argv[3]);
+ printf("N=%d, polar grid with T=%d, R=%d => ",N,T,R);
+
+ x = (double *)nfft_malloc(2*5*(T/2)*(R/2)*(sizeof(double)));
+ w = (double *)nfft_malloc(5*(T/2)*(R/2)*(sizeof(double)));
+
+ f_hat = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+ f = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*T*R);
+ f_direct = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*T*R);
+ f_tilde = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+
+ /** generate knots of mpolar grid */
+ M=polar_grid(T,R,x,w); printf("M=%d.\n",M);
+
+ /** load data */
+ fp1=fopen("input_data_r.dat","r");
+ fp2=fopen("input_data_i.dat","r");
+ if (fp1==NULL)
+ return(-1);
+ for(k=0;k<N*N;k++)
+ {
+ fscanf(fp1,"%le ",&temp1);
+ fscanf(fp2,"%le ",&temp2);
+ f_hat[k]=temp1+ _Complex_I*temp2;
+ }
+ fclose(fp1);
+ fclose(fp2);
+
+ /** direct polar FFT */
+ polar_dft(f_hat,N,f_direct,T,R,m);
+ // polar_fft(f_hat,N,f_direct,T,R,12);
+
+ /** Test of the polar FFT with different m */
+ printf("\nTest of the polar FFT: \n");
+ fp1=fopen("polar_fft_error.dat","w+");
+ for (m=1; m<=12; m++)
+ {
+ /** fast polar FFT */
+ polar_fft(f_hat,N,f,T,R,m);
+
+ /** compute error of fast polar FFT */
+ E_max=X(error_l_infty_complex)(f_direct,f,M);
+ printf("m=%2d: E_max = %e\n",m,E_max);
+ fprintf(fp1,"%e\n",E_max);
+ }
+ fclose(fp1);
+
+ /** Test of the inverse polar FFT for different m in dependece of the iteration number*/
+ for (m=3; m<=9; m+=3)
+ {
+ printf("\nTest of the inverse polar FFT for m=%d: \n",m);
+ sprintf(filename,"polar_ifft_error%d.dat",m);
+ fp1=fopen(filename,"w+");
+ for (max_i=0; max_i<=100; max_i+=10)
+ {
+ /** inverse polar FFT */
+ inverse_polar_fft(f_direct,T,R,f_tilde,N,max_i,m);
+
+ /** compute maximum relative error */
+ /* E_max=0.0;
+ for(k=0;k<N*N;k++)
+ {
+ temp = cabs((f_hat[k]-f_tilde[k])/f_hat[k]);
+ if (temp>E_max) E_max=temp;
+ }
+ */
+ E_max=X(error_l_infty_complex)(f_hat,f_tilde,N*N);
+ printf("%3d iterations: E_max = %e\n",max_i,E_max);
+ fprintf(fp1,"%e\n",E_max);
+ }
+ fclose(fp1);
+ }
+
+ /** free the variables */
+ nfft_free(x);
+ nfft_free(w);
+ nfft_free(f_hat);
+ nfft_free(f);
+ nfft_free(f_direct);
+ nfft_free(f_tilde);
+
+ return 0;
+}
+/* \} */
diff --git a/applications/quadratureS2/Makefile.am b/applications/quadratureS2/Makefile.am
new file mode 100644
index 0000000..884f613
--- /dev/null
+++ b/applications/quadratureS2/Makefile.am
@@ -0,0 +1,10 @@
+# $Id: Makefile.am 3786 2012-06-07 14:51:35Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = quadratureS2
+
+quadratureS2_SOURCES = quadratureS2.c doxygen.h
+quadratureS2_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = quadratureS2.m writeTestcase.m writeWeights.m readTestcase.m lgwt.m plotGrid.m example.in example.out
diff --git a/applications/quadratureS2/Makefile.in b/applications/quadratureS2/Makefile.in
new file mode 100644
index 0000000..4f05dd8
--- /dev/null
+++ b/applications/quadratureS2/Makefile.in
@@ -0,0 +1,555 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3786 2012-06-07 14:51:35Z keiner $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = quadratureS2$(EXEEXT)
+subdir = applications/quadratureS2
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_quadratureS2_OBJECTS = quadratureS2.$(OBJEXT)
+quadratureS2_OBJECTS = $(am_quadratureS2_OBJECTS)
+quadratureS2_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(quadratureS2_SOURCES)
+DIST_SOURCES = $(quadratureS2_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+quadratureS2_SOURCES = quadratureS2.c doxygen.h
+quadratureS2_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = quadratureS2.m writeTestcase.m writeWeights.m readTestcase.m lgwt.m plotGrid.m example.in example.out
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/quadratureS2/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applications/quadratureS2/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+quadratureS2$(EXEEXT): $(quadratureS2_OBJECTS) $(quadratureS2_DEPENDENCIES) $(EXTRA_quadratureS2_DEPENDENCIES)
+ @rm -f quadratureS2$(EXEEXT)
+ $(LINK) $(quadratureS2_OBJECTS) $(quadratureS2_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/quadratureS2.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/quadratureS2/doxygen.h b/applications/quadratureS2/doxygen.h
new file mode 100644
index 0000000..5f100cf
--- /dev/null
+++ b/applications/quadratureS2/doxygen.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */
+
+/**
+ * \defgroup applications_quadratureS2 Fast evaluation of quadrature formulae on the sphere
+ * \ingroup applications
+ */
diff --git a/applications/quadratureS2/example.in b/applications/quadratureS2/example.in
new file mode 100644
index 0000000..46a7f05
--- /dev/null
+++ b/applications/quadratureS2/example.in
@@ -0,0 +1,354 @@
+testcases=3
+nfsft=1
+nfft=1
+cutoff=3
+fpt=1
+threshold=1.000000e+03
+testmode=0
+gridtype=0
+testfunction=1
+repetitions=1
+mode=0
+bandwidths=2
+16 16
+32 32
+
+
+0.024148302868547931454568100662
+0.055459529373987133393786308488
+0.085036148317179163780288320140
+0.111883847193403884734408393342
+0.135136368468525447372741155050
+0.154045761076810394651914748465
+0.168004102156449897087497902248
+0.176562705366992644950840940510
+0.179446470356206533303122796497
+0.176562705366992644950840940510
+0.168004102156449897087497902248
+0.154045761076810394651914748465
+0.135136368468525447372741155050
+0.111883847193403884734408393342
+0.085036148317179163780288320140
+0.055459529373987133393786308488
+0.024148302868547931454568100662
+
+0.021867872517185239084058778758
+0.050195855139357897778396022659
+0.078691039281386376824656281315
+0.107223872365252256844136979907
+0.135770824783899402010689527742
+0.164324411574724438267480763898
+0.192881461704887263719498946557
+0.221440333046589832299844147201
+0.250000000000000000000000000000
+0.278559666953410167700155852799
+0.307118538295112764036076669072
+0.335675588425275617243670467360
+0.364229175216100653500461703516
+0.392776127634747729278075212278
+0.421308960718613623175343718685
+0.449804144860642129977179592970
+0.478132127482814750507600365381
+
+
+0.006606227847587484679203750915
+0.015321701512934696523537958512
+0.023915548101749450893294124398
+0.032300358632328871055783281463
+0.040401541331669621470723541279
+0.048147742818711682100119020333
+0.055470846631663503489839683880
+0.062306482530317411350218037569
+0.068594572818656829316097400806
+0.074279854843954107312953283326
+0.079312364794886736074630562143
+0.083647876067038787195606630576
+0.087248287618844302948595270664
+0.090081958660638547509158513549
+0.092123986643316849165508131136
+0.093356426065596062602303106814
+0.093768446160209989459488610919
+0.093356426065596062602303106814
+0.092123986643316849165508131136
+0.090081958660638547509158513549
+0.087248287618844302948595270664
+0.083647876067038787195606630576
+0.079312364794886736074630562143
+0.074279854843954107312953283326
+0.068594572818656829316097400806
+0.062306482530317411350218037569
+0.055470846631663503489839683880
+0.048147742818711682100119020333
+0.040401541331669621470723541279
+0.032300358632328871055783281463
+0.023915548101749450893294124398
+0.015321701512934696523537958512
+0.006606227847587484679203750915
+
+0.011424646629589122262538047892
+0.026224329716335245676894771805
+0.041111409496705275667949308627
+0.056018231215834990432966833396
+0.070932535986010208928220777125
+0.085850455629256680611938179482
+0.100770388669267227377268625332
+0.115691552534641750593635833866
+0.130613518882987722502520000489
+0.145536032750858829176721087606
+0.160458932010607013829428524332
+0.175382107696440303623575118763
+0.190305482843150408633903225564
+0.205229000420828450179655533248
+0.220152616025452413373031390620
+0.235076293166748051532977115130
+0.250000000000000000000000000000
+0.264923706833251948467022884870
+0.279847383974547614382544225009
+0.294770999579171577575920082381
+0.309694517156849591366096774436
+0.324617892303559696376424881237
+0.339541067989393041681722706926
+0.354463967249141254090005759281
+0.369386481117012333008631230769
+0.384308447465358304917515397392
+0.399229611330732814256094798111
+0.414149544370743361021425243962
+0.429067464013989818827354838504
+0.443981768784165065078184397862
+0.458888590503294724332050691373
+0.473775670283664795956468651639
+0.488575353370410914166654947621
+nfsft=1
+nfft=1
+cutoff=6
+fpt=1
+threshold=1.000000e+03
+testmode=0
+gridtype=0
+testfunction=1
+repetitions=1
+mode=0
+bandwidths=2
+16 16
+32 32
+
+
+0.024148302868547931454568100662
+0.055459529373987133393786308488
+0.085036148317179163780288320140
+0.111883847193403884734408393342
+0.135136368468525447372741155050
+0.154045761076810394651914748465
+0.168004102156449897087497902248
+0.176562705366992644950840940510
+0.179446470356206533303122796497
+0.176562705366992644950840940510
+0.168004102156449897087497902248
+0.154045761076810394651914748465
+0.135136368468525447372741155050
+0.111883847193403884734408393342
+0.085036148317179163780288320140
+0.055459529373987133393786308488
+0.024148302868547931454568100662
+
+0.021867872517185239084058778758
+0.050195855139357897778396022659
+0.078691039281386376824656281315
+0.107223872365252256844136979907
+0.135770824783899402010689527742
+0.164324411574724438267480763898
+0.192881461704887263719498946557
+0.221440333046589832299844147201
+0.250000000000000000000000000000
+0.278559666953410167700155852799
+0.307118538295112764036076669072
+0.335675588425275617243670467360
+0.364229175216100653500461703516
+0.392776127634747729278075212278
+0.421308960718613623175343718685
+0.449804144860642129977179592970
+0.478132127482814750507600365381
+
+
+0.006606227847587484679203750915
+0.015321701512934696523537958512
+0.023915548101749450893294124398
+0.032300358632328871055783281463
+0.040401541331669621470723541279
+0.048147742818711682100119020333
+0.055470846631663503489839683880
+0.062306482530317411350218037569
+0.068594572818656829316097400806
+0.074279854843954107312953283326
+0.079312364794886736074630562143
+0.083647876067038787195606630576
+0.087248287618844302948595270664
+0.090081958660638547509158513549
+0.092123986643316849165508131136
+0.093356426065596062602303106814
+0.093768446160209989459488610919
+0.093356426065596062602303106814
+0.092123986643316849165508131136
+0.090081958660638547509158513549
+0.087248287618844302948595270664
+0.083647876067038787195606630576
+0.079312364794886736074630562143
+0.074279854843954107312953283326
+0.068594572818656829316097400806
+0.062306482530317411350218037569
+0.055470846631663503489839683880
+0.048147742818711682100119020333
+0.040401541331669621470723541279
+0.032300358632328871055783281463
+0.023915548101749450893294124398
+0.015321701512934696523537958512
+0.006606227847587484679203750915
+
+0.011424646629589122262538047892
+0.026224329716335245676894771805
+0.041111409496705275667949308627
+0.056018231215834990432966833396
+0.070932535986010208928220777125
+0.085850455629256680611938179482
+0.100770388669267227377268625332
+0.115691552534641750593635833866
+0.130613518882987722502520000489
+0.145536032750858829176721087606
+0.160458932010607013829428524332
+0.175382107696440303623575118763
+0.190305482843150408633903225564
+0.205229000420828450179655533248
+0.220152616025452413373031390620
+0.235076293166748051532977115130
+0.250000000000000000000000000000
+0.264923706833251948467022884870
+0.279847383974547614382544225009
+0.294770999579171577575920082381
+0.309694517156849591366096774436
+0.324617892303559696376424881237
+0.339541067989393041681722706926
+0.354463967249141254090005759281
+0.369386481117012333008631230769
+0.384308447465358304917515397392
+0.399229611330732814256094798111
+0.414149544370743361021425243962
+0.429067464013989818827354838504
+0.443981768784165065078184397862
+0.458888590503294724332050691373
+0.473775670283664795956468651639
+0.488575353370410914166654947621
+nfsft=0
+testmode=0
+gridtype=0
+testfunction=1
+repetitions=1
+mode=0
+bandwidths=2
+16 16
+32 32
+
+
+0.024148302868547931454568100662
+0.055459529373987133393786308488
+0.085036148317179163780288320140
+0.111883847193403884734408393342
+0.135136368468525447372741155050
+0.154045761076810394651914748465
+0.168004102156449897087497902248
+0.176562705366992644950840940510
+0.179446470356206533303122796497
+0.176562705366992644950840940510
+0.168004102156449897087497902248
+0.154045761076810394651914748465
+0.135136368468525447372741155050
+0.111883847193403884734408393342
+0.085036148317179163780288320140
+0.055459529373987133393786308488
+0.024148302868547931454568100662
+
+0.021867872517185239084058778758
+0.050195855139357897778396022659
+0.078691039281386376824656281315
+0.107223872365252256844136979907
+0.135770824783899402010689527742
+0.164324411574724438267480763898
+0.192881461704887263719498946557
+0.221440333046589832299844147201
+0.250000000000000000000000000000
+0.278559666953410167700155852799
+0.307118538295112764036076669072
+0.335675588425275617243670467360
+0.364229175216100653500461703516
+0.392776127634747729278075212278
+0.421308960718613623175343718685
+0.449804144860642129977179592970
+0.478132127482814750507600365381
+
+
+0.006606227847587484679203750915
+0.015321701512934696523537958512
+0.023915548101749450893294124398
+0.032300358632328871055783281463
+0.040401541331669621470723541279
+0.048147742818711682100119020333
+0.055470846631663503489839683880
+0.062306482530317411350218037569
+0.068594572818656829316097400806
+0.074279854843954107312953283326
+0.079312364794886736074630562143
+0.083647876067038787195606630576
+0.087248287618844302948595270664
+0.090081958660638547509158513549
+0.092123986643316849165508131136
+0.093356426065596062602303106814
+0.093768446160209989459488610919
+0.093356426065596062602303106814
+0.092123986643316849165508131136
+0.090081958660638547509158513549
+0.087248287618844302948595270664
+0.083647876067038787195606630576
+0.079312364794886736074630562143
+0.074279854843954107312953283326
+0.068594572818656829316097400806
+0.062306482530317411350218037569
+0.055470846631663503489839683880
+0.048147742818711682100119020333
+0.040401541331669621470723541279
+0.032300358632328871055783281463
+0.023915548101749450893294124398
+0.015321701512934696523537958512
+0.006606227847587484679203750915
+
+0.011424646629589122262538047892
+0.026224329716335245676894771805
+0.041111409496705275667949308627
+0.056018231215834990432966833396
+0.070932535986010208928220777125
+0.085850455629256680611938179482
+0.100770388669267227377268625332
+0.115691552534641750593635833866
+0.130613518882987722502520000489
+0.145536032750858829176721087606
+0.160458932010607013829428524332
+0.175382107696440303623575118763
+0.190305482843150408633903225564
+0.205229000420828450179655533248
+0.220152616025452413373031390620
+0.235076293166748051532977115130
+0.250000000000000000000000000000
+0.264923706833251948467022884870
+0.279847383974547614382544225009
+0.294770999579171577575920082381
+0.309694517156849591366096774436
+0.324617892303559696376424881237
+0.339541067989393041681722706926
+0.354463967249141254090005759281
+0.369386481117012333008631230769
+0.384308447465358304917515397392
+0.399229611330732814256094798111
+0.414149544370743361021425243962
+0.429067464013989818827354838504
+0.443981768784165065078184397862
+0.458888590503294724332050691373
+0.473775670283664795956468651639
+0.488575353370410914166654947621
diff --git a/applications/quadratureS2/example.out b/applications/quadratureS2/example.out
new file mode 100644
index 0000000..617a145
--- /dev/null
+++ b/applications/quadratureS2/example.out
@@ -0,0 +1,42 @@
+3
+1
+1
+3
+1
+1000.000000
+0
+0
+1
+1
+0
+2
+16 16
+32 32
++6.984776e-04 +3.886121e-06 +4.494552e-06
++2.990931e-03 +6.012098e-06 +4.316038e-06
+1
+1
+6
+1
+1000.000000
+0
+0
+1
+1
+0
+2
+16 16
+32 32
++9.052888e-04 +3.140451e-12 +3.298942e-12
++3.696837e-03 +5.486733e-12 +5.527605e-12
+0
+0
+0
+1
+1
+0
+2
+16 16
+32 32
++5.884322e-03 +3.245259e-15 +1.976205e-15
++5.845654e-02 +8.561233e-15 +3.745339e-15
diff --git a/applications/quadratureS2/lgwt.m b/applications/quadratureS2/lgwt.m
new file mode 100644
index 0000000..6840891
--- /dev/null
+++ b/applications/quadratureS2/lgwt.m
@@ -0,0 +1,77 @@
+function [x,w]=lgwt(N,a,b)
+%LGWT - Legendre Gauss Quadrature
+%
+% This script is for computing definite integrals using Legendre-Gauss
+% Quadrature. Computes the Legendre-Gauss nodes and weights on an interval
+% [a,b] with truncation order N
+%
+% Suppose you have a continuous function f(x) which is defined on [a,b]
+% which you can evaluate at any x in [a,b]. Simply evaluate it at all of
+% the values contained in the x vector to obtain a vector f. Then compute
+% the definite integral using sum(f.*w);
+%
+% Written by Greg von Winckel - 02/25/2004
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: lgwt.m 3784 2012-06-06 20:30:39Z keiner $
+
+N=N-1;
+N1=N+1; N2=N+2;
+
+xu=linspace(-1,1,N1)';
+
+% Initial guess
+y=cos((2*(0:N)'+1)*pi/(2*N+2))+(0.27/N1)*sin(pi*xu*N/N2);
+
+% Legendre-Gauss Vandermonde Matrix
+L=zeros(N1,N2);
+
+% Derivative of LGVM
+Lp=zeros(N1,N2);
+
+% Compute the zeros of the N+1 Legendre Polynomial
+% using the recursion relation and the Newton-Raphson method
+
+y0=2;
+
+% Iterate until new points are uniformly within epsilon of old points
+while max(abs(y-y0))>eps
+
+
+ L(:,1)=1;
+ Lp(:,1)=0;
+
+ L(:,2)=y;
+ Lp(:,2)=1;
+
+ for k=2:N1
+ L(:,k+1)=( (2*k-1)*y.*L(:,k)-(k-1)*L(:,k-1) )/k;
+ end
+
+ Lp=(N2)*( L(:,N1)-y.*L(:,N2) )./(1-y.^2);
+
+ y0=y;
+ y=y0-L(:,N2)./Lp;
+
+end
+
+% Linear map from[-1,1] to [a,b]
+x=(a*(1-y)+b*(1+y))/2;
+
+% Compute the weights
+w=(b-a)./((1-y.^2).*Lp.^2)*(N2/N1)^2;
diff --git a/applications/quadratureS2/plotGrid.m b/applications/quadratureS2/plotGrid.m
new file mode 100644
index 0000000..f0f9026
--- /dev/null
+++ b/applications/quadratureS2/plotGrid.m
@@ -0,0 +1,123 @@
+function plotGrid(gridType,p)
+%plotGrid - Plot spherical quadrature grids
+%
+% plotGrid(gridtype) plots a quadrature grid. The parameter gridType specifies
+% the point set to plot and can take the following values:
+% 0: Gauss-Legendre quadrature grid,
+% 1: Clenshaw-Curtis qudrature grid,
+% 2: HEALPix point set,
+% 3: Equidistribution point set.
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: plotGrid.m 3784 2012-06-06 20:30:39Z keiner $
+
+if (gridType == 0)
+ [theta,w] = lgwt(p(1)+1,-1,1);
+ theta = acos(theta);
+ phi = 2*pi*(0:(2*p(1)+1))./(2*p(1)+2);
+ [Y,X] = meshgrid(theta,phi);
+ gridName = 'Gauss-Legendre';
+ temp = repmat(w,[1,length(phi)])';
+ [Y(:),X(:),temp(:)]
+ size(Y(:))
+elseif (gridType == 1)
+ theta = pi*(0:2*p(1))./(2*p(1));
+ phi = 2*pi*(0:(2*p(1)+1))./(2*p(1)+2);
+ [X,Y] = meshgrid(phi,theta);
+ gridName = 'Clenshaw-Curtis';
+
+elseif (gridType == 2)
+ if log2(p(1)) ~= fix(log2(p(1)))
+ error('NS has to be an INTEGER power of 2')
+ end
+
+ % initialization of the parameters
+ Y=zeros(12*p(1)^2,1);
+ X=zeros(12*p(1)^2,1);
+ ncoo=0;
+
+ % North pole
+ for ii=1:p(1)-1
+ for hh=0:4*ii-1
+ ncoo=ncoo+1;
+ Y(ncoo)=1-ii^2/(3*p(1)^2);
+ X(ncoo)=2*pi/(4*ii)*(hh+0.5);
+ end
+ end
+ ncoo1=ncoo;
+
+ % Equator
+ for ii=p(1):3*p(1)
+ for hh=0:4*p(1)-1
+ ncoo=ncoo+1;
+ Y(ncoo)=2/(3*p(1))*(2*p(1)-ii);
+ X(ncoo)=2*pi/(4*p(1))*(hh+codd(ii));
+ end
+ end
+
+ % add the south pole
+ X(ncoo+1:end)=X(ncoo1:-1:1);
+ Y(ncoo+1:end)=-Y(ncoo1:-1:1);
+ Y=acos(Y);
+
+ gridName = 'HEALPix';
+
+elseif (gridType == 3)
+
+ X = zeros(2+4*(floor((p(1)+1)/2))*floor(p(1)/2),1);
+ Y = zeros(2+4*(floor((p(1)+1)/2))*floor(p(1)/2),1);
+ X(1) = 0.0;
+ Y(1) = 0.0;
+ d = 2;
+ for k = 1:p(1)-1
+ thetai = (k*pi)/p(1);
+ if (k<=(p(1)/2))
+ gammai = 4*k;
+ else
+ gammai = 4*(p(1)-k);
+ end
+ for n = 1:gammai
+ Y(d) = thetai;
+ X(d) = ((n-0.5)*((2.0*pi)/gammai));
+ d = d+1;
+ end
+ end
+ Y(d) = pi;
+ X(d) = 0.0;
+ size(X)
+
+ gridName = 'Equidistribution Example 7.1.11';
+
+else
+ error('Wrong grid type!');
+end
+
+figure;
+plot(X,Y,'ko');
+axis equal;
+axis([-0.1 2*pi+0.1 -0.1 pi+0.1]);
+xlabel('Phi');
+ylabel('Theta');
+title(gridName);
+return;
+
+function coeff=codd(k);
+ if fix(k/2)*2 == k, coeff=0.5;, else, coeff=0;, end
+return
diff --git a/applications/quadratureS2/quadratureS2.c b/applications/quadratureS2/quadratureS2.c
new file mode 100644
index 0000000..2863e19
--- /dev/null
+++ b/applications/quadratureS2/quadratureS2.c
@@ -0,0 +1,1146 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: quadratureS2.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \defgroup applications_quadratureS2_test quadratureS2_test
+ * \ingroup applications_quadratureS2
+ * \{
+ */
+#include "config.h"
+
+/* Include standard C headers. */
+#include <math.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+/* Include NFFT 3 utilities headers. */
+#include "nfft3util.h"
+
+/* Include NFFT 3 library header. */
+#include "nfft3.h"
+
+#include "infft.h"
+
+/** Enumeration for parameter values */
+enum boolean {NO = 0, YES = 1};
+
+/** Enumeration for test modes */
+enum testtype {ERROR = 0, TIMING = 1};
+
+/** Enumeration for quadrature grid types */
+enum gridtype {GRID_GAUSS_LEGENDRE = 0, GRID_CLENSHAW_CURTIS = 1,
+ GRID_HEALPIX = 2, GRID_EQUIDISTRIBUTION = 3, GRID_EQUIDISTRIBUTION_UNIFORM = 4};
+
+/** Enumeration for test functions */
+enum functiontype {FUNCTION_RANDOM_BANDLIMITED = 0, FUNCTION_F1 = 1,
+ FUNCTION_F2 = 2, FUNCTION_F3 = 3, FUNCTION_F4 = 4, FUNCTION_F5 = 5,
+ FUNCTION_F6 = 6};
+
+/** TODO Add comment here */
+enum modes {USE_GRID = 0, RANDOM = 1};
+
+/**
+ * The main program.
+ *
+ * \param argc The number of arguments
+ * \param argv An array containing the arguments as C-strings
+ *
+ * \return Exit code
+ */
+int main (int argc, char **argv)
+{
+ int tc; /**< The index variable for testcases */
+ int tc_max; /**< The number of testcases */
+
+ int *NQ; /**< The array containing the cut-off degrees *
+ \f$N\f$ */
+ int NQ_max; /**< The maximum cut-off degree \f$N\f$ for the*
+ current testcase */
+ int *SQ; /**< The array containing the grid size
+ parameters */
+ int SQ_max; /**< The maximum grid size parameter */
+ int *RQ; /**< The array containing the grid size
+ parameters */
+ int iNQ; /**< Index variable for cut-off degrees */
+ int iNQ_max; /**< The maximum number of cut-off degrees */
+ int testfunction; /**< The testfunction */
+ int N; /**< The test function's bandwidth */
+
+ int use_nfsft; /**< Whether to use the NFSFT algorithm or not */
+ int use_nfft; /**< Whether to use the NFFT algorithm or not */
+ int use_fpt; /**< Whether to use the FPT algorithm or not */
+ int cutoff; /**< The current NFFT cut-off parameter */
+ double threshold; /**< The current NFSFT threshold parameter */
+
+ int gridtype; /**< The type of quadrature grid to be used */
+ int repetitions; /**< The number of repetitions to be performed */
+ int mode; /**< The number of repetitions to be performed */
+
+ double *w; /**< The quadrature weights */
+ double *x_grid; /**< The quadrature nodes */
+ double *x_compare; /**< The quadrature nodes */
+ double _Complex *f_grid; /**< The reference function values */
+ double _Complex *f_compare; /**< The function values */
+ double _Complex *f; /**< The function values */
+ double _Complex *f_hat_gen; /**< The reference spherical Fourier *
+ coefficients */
+ double _Complex *f_hat; /**< The spherical Fourier coefficients */
+
+ nfsft_plan plan_adjoint; /**< The NFSFT plan */
+ nfsft_plan plan; /**< The NFSFT plan */
+ nfsft_plan plan_gen; /**< The NFSFT plan */
+
+ double t_avg; /**< The average computation time needed */
+ double err_infty_avg; /**< The average error \f$E_\infty\f$ */
+ double err_2_avg; /**< The average error \f$E_2\f$ */
+
+ int i; /**< A loop variable */
+ int k; /**< A loop variable */
+ int n; /**< A loop variable */
+ int d; /**< A loop variable */
+
+ int m_theta; /**< The current number of different *
+ colatitudinal angles (for grids) */
+ int m_phi; /**< The current number of different *
+ longitudinal angles (for grids). */
+ int m_total; /**< The total number nodes. */
+ double *theta; /**< An array for saving the angles theta of a *
+ grid */
+ double *phi; /**< An array for saving the angles phi of a *
+ grid */
+ fftw_plan fplan; /**< An FFTW plan for computing Clenshaw-Curtis
+ quadrature weights */
+ //int nside; /**< The size parameter for the HEALPix grid */
+ int d2;
+ int M;
+ double theta_s;
+ double x1,x2,x3,temp;
+ int m_compare;
+ nfsft_plan *plan_adjoint_ptr;
+ nfsft_plan *plan_ptr;
+ double *w_temp;
+ int testmode;
+ ticks t0, t1;
+
+ /* Read the number of testcases. */
+ fscanf(stdin,"testcases=%d\n",&tc_max);
+ fprintf(stdout,"%d\n",tc_max);
+
+ /* Process each testcase. */
+ for (tc = 0; tc < tc_max; tc++)
+ {
+ /* Check if the fast transform shall be used. */
+ fscanf(stdin,"nfsft=%d\n",&use_nfsft);
+ fprintf(stdout,"%d\n",use_nfsft);
+ if (use_nfsft != NO)
+ {
+ /* Check if the NFFT shall be used. */
+ fscanf(stdin,"nfft=%d\n",&use_nfft);
+ fprintf(stdout,"%d\n",use_nfsft);
+ if (use_nfft != NO)
+ {
+ /* Read the cut-off parameter. */
+ fscanf(stdin,"cutoff=%d\n",&cutoff);
+ fprintf(stdout,"%d\n",cutoff);
+ }
+ else
+ {
+ /* TODO remove this */
+ /* Initialize unused variable with dummy value. */
+ cutoff = 1;
+ }
+ /* Check if the fast polynomial transform shall be used. */
+ fscanf(stdin,"fpt=%d\n",&use_fpt);
+ fprintf(stdout,"%d\n",use_fpt);
+ if (use_fpt != NO)
+ {
+ /* Read the NFSFT threshold parameter. */
+ fscanf(stdin,"threshold=%lf\n",&threshold);
+ fprintf(stdout,"%lf\n",threshold);
+ }
+ else
+ {
+ /* TODO remove this */
+ /* Initialize unused variable with dummy value. */
+ threshold = 1000.0;
+ }
+ }
+ else
+ {
+ /* TODO remove this */
+ /* Set dummy values. */
+ use_nfft = NO;
+ use_fpt = NO;
+ cutoff = 3;
+ threshold = 1000.0;
+ }
+
+ /* Read the testmode type. */
+ fscanf(stdin,"testmode=%d\n",&testmode);
+ fprintf(stdout,"%d\n",testmode);
+
+ if (testmode == ERROR)
+ {
+ /* Read the quadrature grid type. */
+ fscanf(stdin,"gridtype=%d\n",&gridtype);
+ fprintf(stdout,"%d\n",gridtype);
+
+ /* Read the test function. */
+ fscanf(stdin,"testfunction=%d\n",&testfunction);
+ fprintf(stdout,"%d\n",testfunction);
+
+ /* Check if random bandlimited function has been chosen. */
+ if (testfunction == FUNCTION_RANDOM_BANDLIMITED)
+ {
+ /* Read the bandwidht. */
+ fscanf(stdin,"bandlimit=%d\n",&N);
+ fprintf(stdout,"%d\n",N);
+ }
+ else
+ {
+ N = 1;
+ }
+
+ /* Read the number of repetitions. */
+ fscanf(stdin,"repetitions=%d\n",&repetitions);
+ fprintf(stdout,"%d\n",repetitions);
+
+ fscanf(stdin,"mode=%d\n",&mode);
+ fprintf(stdout,"%d\n",mode);
+
+ if (mode == RANDOM)
+ {
+ /* Read the bandwidht. */
+ fscanf(stdin,"points=%d\n",&m_compare);
+ fprintf(stdout,"%d\n",m_compare);
+ x_compare = (double*) nfft_malloc(2*m_compare*sizeof(double));
+ d = 0;
+ while (d < m_compare)
+ {
+ x1 = 2.0*(((double)rand())/RAND_MAX) - 1.0;
+ x2 = 2.0*(((double)rand())/RAND_MAX) - 1.0;
+ x3 = 2.0*(((double)rand())/RAND_MAX) - 1.0;
+ temp = sqrt(x1*x1+x2*x2+x3*x3);
+ if (temp <= 1)
+ {
+ x_compare[2*d+1] = acos(x3);
+ if (x_compare[2*d+1] == 0 || x_compare[2*d+1] == PI)
+ {
+ x_compare[2*d] = 0.0;
+ }
+ else
+ {
+ x_compare[2*d] = atan2(x2/sin(x_compare[2*d+1]),x1/sin(x_compare[2*d+1]));
+ }
+ x_compare[2*d] *= 1.0/(2.0*PI);
+ x_compare[2*d+1] *= 1.0/(2.0*PI);
+ d++;
+ }
+ }
+ f_compare = (double _Complex*) nfft_malloc(m_compare*sizeof(double _Complex));
+ f = (double _Complex*) nfft_malloc(m_compare*sizeof(double _Complex));
+ }
+ }
+
+ /* Initialize maximum cut-off degree and grid size parameter. */
+ NQ_max = 0;
+ SQ_max = 0;
+
+ /* Read the number of cut-off degrees. */
+ fscanf(stdin,"bandwidths=%d\n",&iNQ_max);
+ fprintf(stdout,"%d\n",iNQ_max);
+
+ /* Allocate memory for the cut-off degrees and grid size parameters. */
+ NQ = (int*) nfft_malloc(iNQ_max*sizeof(int));
+ SQ = (int*) nfft_malloc(iNQ_max*sizeof(int));
+ if (testmode == TIMING)
+ {
+ RQ = (int*) nfft_malloc(iNQ_max*sizeof(int));
+ }
+
+ /* Read the cut-off degrees and grid size parameters. */
+ for (iNQ = 0; iNQ < iNQ_max; iNQ++)
+ {
+ if (testmode == TIMING)
+ {
+ /* Read cut-off degree and grid size parameter. */
+ fscanf(stdin,"%d %d %d\n",&NQ[iNQ],&SQ[iNQ],&RQ[iNQ]);
+ fprintf(stdout,"%d %d %d\n",NQ[iNQ],SQ[iNQ],RQ[iNQ]);
+ NQ_max = NFFT_MAX(NQ_max,NQ[iNQ]);
+ SQ_max = NFFT_MAX(SQ_max,SQ[iNQ]);
+ }
+ else
+ {
+ /* Read cut-off degree and grid size parameter. */
+ fscanf(stdin,"%d %d\n",&NQ[iNQ],&SQ[iNQ]);
+ fprintf(stdout,"%d %d\n",NQ[iNQ],SQ[iNQ]);
+ NQ_max = NFFT_MAX(NQ_max,NQ[iNQ]);
+ SQ_max = NFFT_MAX(SQ_max,SQ[iNQ]);
+ }
+ }
+
+ /* Do precomputation. */
+ //fprintf(stderr,"NFSFT Precomputation\n");
+ //fflush(stderr);
+ nfsft_precompute(NQ_max, threshold,
+ ((use_nfsft==NO)?(NFSFT_NO_FAST_ALGORITHM):(0U)), 0U);
+
+ if (testmode == TIMING)
+ {
+ /* Allocate data structures. */
+ f_hat = (double _Complex*) nfft_malloc(NFSFT_F_HAT_SIZE(NQ_max)*sizeof(double _Complex));
+ f = (double _Complex*) nfft_malloc(SQ_max*sizeof(double _Complex));
+ x_grid = (double*) nfft_malloc(2*SQ_max*sizeof(double));
+ for (d = 0; d < SQ_max; d++)
+ {
+ f[d] = (((double)rand())/RAND_MAX)-0.5 + _Complex_I*((((double)rand())/RAND_MAX)-0.5);
+ x_grid[2*d] = (((double)rand())/RAND_MAX) - 0.5;
+ x_grid[2*d+1] = (((double)rand())/RAND_MAX) * 0.5;
+ }
+ }
+
+ //fprintf(stderr,"Entering loop\n");
+ //fflush(stderr);
+ /* Process all cut-off bandwidths. */
+ for (iNQ = 0; iNQ < iNQ_max; iNQ++)
+ {
+ if (testmode == TIMING)
+ {
+ nfsft_init_guru(&plan,NQ[iNQ],SQ[iNQ], NFSFT_NORMALIZED |
+ ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |
+ ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),
+ PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFTW_MEASURE | FFT_OUT_OF_PLACE,
+ cutoff);
+
+ plan.f_hat = f_hat;
+ plan.x = x_grid;
+ plan.f = f;
+
+ nfsft_precompute_x(&plan);
+
+ t_avg = 0.0;
+
+ for (i = 0; i < RQ[iNQ]; i++)
+ {
+ t0 = getticks();
+
+ if (use_nfsft != NO)
+ {
+ /* Execute the adjoint NFSFT transformation. */
+ nfsft_adjoint(&plan);
+ }
+ else
+ {
+ /* Execute the adjoint direct NDSFT transformation. */
+ nfsft_adjoint_direct(&plan);
+ }
+
+ t1 = getticks();
+ t_avg += nfft_elapsed_seconds(t1,t0);
+ }
+
+ t_avg = t_avg/((double)RQ[iNQ]);
+
+ nfsft_finalize(&plan);
+
+ fprintf(stdout,"%+le\n", t_avg);
+ fprintf(stderr,"%d: %4d %4d %+le\n", tc, NQ[iNQ], SQ[iNQ], t_avg);
+ }
+ else
+ {
+ /* Determine the maximum number of nodes. */
+ switch (gridtype)
+ {
+ case GRID_GAUSS_LEGENDRE:
+ /* Calculate grid dimensions. */
+ m_theta = SQ[iNQ] + 1;
+ m_phi = 2*SQ[iNQ] + 2;
+ m_total = m_theta*m_phi;
+ break;
+ case GRID_CLENSHAW_CURTIS:
+ /* Calculate grid dimensions. */
+ m_theta = 2*SQ[iNQ] + 1;
+ m_phi = 2*SQ[iNQ] + 2;
+ m_total = m_theta*m_phi;
+ break;
+ case GRID_HEALPIX:
+ m_theta = 1;
+ m_phi = 12*SQ[iNQ]*SQ[iNQ];
+ m_total = m_theta * m_phi;
+ //fprintf("HEALPix: SQ = %d, m_theta = %d, m_phi= %d, m");
+ break;
+ case GRID_EQUIDISTRIBUTION:
+ case GRID_EQUIDISTRIBUTION_UNIFORM:
+ m_theta = 2;
+ //fprintf(stderr,"ed: m_theta = %d\n",m_theta);
+ for (k = 1; k < SQ[iNQ]; k++)
+ {
+ m_theta += (int)floor((2*PI)/acos((cos(PI/(double)SQ[iNQ])-
+ cos(k*PI/(double)SQ[iNQ])*cos(k*PI/(double)SQ[iNQ]))/
+ (sin(k*PI/(double)SQ[iNQ])*sin(k*PI/(double)SQ[iNQ]))));
+ //fprintf(stderr,"ed: m_theta = %d\n",m_theta);
+ }
+ //fprintf(stderr,"ed: m_theta final = %d\n",m_theta);
+ m_phi = 1;
+ m_total = m_theta * m_phi;
+ break;
+ }
+
+ /* Allocate memory for data structures. */
+ w = (double*) nfft_malloc(m_theta*sizeof(double));
+ x_grid = (double*) nfft_malloc(2*m_total*sizeof(double));
+
+ //fprintf(stderr,"NQ = %d\n",NQ[iNQ]);
+ //fflush(stderr);
+ switch (gridtype)
+ {
+ case GRID_GAUSS_LEGENDRE:
+ //fprintf(stderr,"Generating grid for NQ = %d, SQ = %d\n",NQ[iNQ],SQ[iNQ]);
+ //fflush(stderr);
+
+ /* Read quadrature weights. */
+ for (k = 0; k < m_theta; k++)
+ {
+ fscanf(stdin,"%le\n",&w[k]);
+ w[k] *= (2.0*PI)/((double)m_phi);
+ }
+
+ //fprintf(stderr,"Allocating theta and phi\n");
+ //fflush(stderr);
+ /* Allocate memory to store the grid's angles. */
+ theta = (double*) nfft_malloc(m_theta*sizeof(double));
+ phi = (double*) nfft_malloc(m_phi*sizeof(double));
+
+ //if (theta == NULL || phi == NULL)
+ //{
+ //fprintf(stderr,"Couldn't allocate theta and phi\n");
+ //fflush(stderr);
+ //}
+
+
+ /* Read angles theta. */
+ for (k = 0; k < m_theta; k++)
+ {
+ fscanf(stdin,"%le\n",&theta[k]);
+ }
+
+ /* Generate the grid angles phi. */
+ for (n = 0; n < m_phi; n++)
+ {
+ phi[n] = n/((double)m_phi);
+ phi[n] -= ((phi[n]>=0.5)?(1.0):(0.0));
+ }
+
+ //fprintf(stderr,"Generating grid nodes\n");
+ //fflush(stderr);
+
+ /* Generate the grid's nodes. */
+ d = 0;
+ for (k = 0; k < m_theta; k++)
+ {
+ for (n = 0; n < m_phi; n++)
+ {
+ x_grid[2*d] = phi[n];
+ x_grid[2*d+1] = theta[k];
+ d++;
+ }
+ }
+
+ //fprintf(stderr,"Freeing theta and phi\n");
+ //fflush(stderr);
+ /* Free the arrays for the grid's angles. */
+ nfft_free(theta);
+ nfft_free(phi);
+
+ break;
+
+ case GRID_CLENSHAW_CURTIS:
+
+ /* Allocate memory to store the grid's angles. */
+ theta = (double*) nfft_malloc(m_theta*sizeof(double));
+ phi = (double*) nfft_malloc(m_phi*sizeof(double));
+
+ /* Generate the grid angles theta. */
+ for (k = 0; k < m_theta; k++)
+ {
+ theta[k] = k/((double)2*(m_theta-1));
+ }
+
+ /* Generate the grid angles phi. */
+ for (n = 0; n < m_phi; n++)
+ {
+ phi[n] = n/((double)m_phi);
+ phi[n] -= ((phi[n]>=0.5)?(1.0):(0.0));
+ }
+
+ /* Generate quadrature weights. */
+ fplan = fftw_plan_r2r_1d(SQ[iNQ]+1, w, w, FFTW_REDFT00, 0U);
+ for (k = 0; k < SQ[iNQ]+1; k++)
+ {
+ w[k] = -2.0/(4*k*k-1);
+ }
+ fftw_execute(fplan);
+ w[0] *= 0.5;
+
+ for (k = 0; k < SQ[iNQ]+1; k++)
+ {
+ w[k] *= (2.0*PI)/((double)(m_theta-1)*m_phi);
+ w[m_theta-1-k] = w[k];
+ }
+ fftw_destroy_plan(fplan);
+
+ /* Generate the grid's nodes. */
+ d = 0;
+ for (k = 0; k < m_theta; k++)
+ {
+ for (n = 0; n < m_phi; n++)
+ {
+ x_grid[2*d] = phi[n];
+ x_grid[2*d+1] = theta[k];
+ d++;
+ }
+ }
+
+ /* Free the arrays for the grid's angles. */
+ nfft_free(theta);
+ nfft_free(phi);
+
+ break;
+
+ case GRID_HEALPIX:
+
+ d = 0;
+ for (k = 1; k <= SQ[iNQ]-1; k++)
+ {
+ for (n = 0; n <= 4*k-1; n++)
+ {
+ x_grid[2*d+1] = 1 - (k*k)/((double)(3.0*SQ[iNQ]*SQ[iNQ]));
+ x_grid[2*d] = ((n+0.5)/(4*k));
+ x_grid[2*d] -= (x_grid[2*d]>=0.5)?(1.0):(0.0);
+ d++;
+ }
+ }
+
+ d2 = d-1;
+
+ for (k = SQ[iNQ]; k <= 3*SQ[iNQ]; k++)
+ {
+ for (n = 0; n <= 4*SQ[iNQ]-1; n++)
+ {
+ x_grid[2*d+1] = 2.0/(3*SQ[iNQ])*(2*SQ[iNQ]-k);
+ x_grid[2*d] = (n+((k%2==0)?(0.5):(0.0)))/(4*SQ[iNQ]);
+ x_grid[2*d] -= (x_grid[2*d]>=0.5)?(1.0):(0.0);
+ d++;
+ }
+ }
+
+ for (k = 1; k <= SQ[iNQ]-1; k++)
+ {
+ for (n = 0; n <= 4*k-1; n++)
+ {
+ x_grid[2*d+1] = -x_grid[2*d2+1];
+ x_grid[2*d] = x_grid[2*d2];
+ d++;
+ d2--;
+ }
+ }
+
+ for (d = 0; d < m_total; d++)
+ {
+ x_grid[2*d+1] = acos(x_grid[2*d+1])/(2.0*PI);
+ }
+
+ w[0] = (4.0*PI)/(m_total);
+ break;
+
+ case GRID_EQUIDISTRIBUTION:
+ case GRID_EQUIDISTRIBUTION_UNIFORM:
+ /* TODO Compute the weights. */
+
+ if (gridtype == GRID_EQUIDISTRIBUTION)
+ {
+ w_temp = (double*) nfft_malloc((SQ[iNQ]+1)*sizeof(double));
+ fplan = fftw_plan_r2r_1d(SQ[iNQ]/2+1, w_temp, w_temp, FFTW_REDFT00, 0U);
+ for (k = 0; k < SQ[iNQ]/2+1; k++)
+ {
+ w_temp[k] = -2.0/(4*k*k-1);
+ }
+ fftw_execute(fplan);
+ w_temp[0] *= 0.5;
+
+ for (k = 0; k < SQ[iNQ]/2+1; k++)
+ {
+ w_temp[k] *= (2.0*PI)/((double)(SQ[iNQ]));
+ w_temp[SQ[iNQ]-k] = w_temp[k];
+ }
+ fftw_destroy_plan(fplan);
+ }
+
+ d = 0;
+ x_grid[2*d] = -0.5;
+ x_grid[2*d+1] = 0.0;
+ if (gridtype == GRID_EQUIDISTRIBUTION)
+ {
+ w[d] = w_temp[0];
+ }
+ else
+ {
+ w[d] = (4.0*PI)/(m_total);
+ }
+ d = 1;
+ x_grid[2*d] = -0.5;
+ x_grid[2*d+1] = 0.5;
+ if (gridtype == GRID_EQUIDISTRIBUTION)
+ {
+ w[d] = w_temp[SQ[iNQ]];
+ }
+ else
+ {
+ w[d] = (4.0*PI)/(m_total);
+ }
+ d = 2;
+
+ for (k = 1; k < SQ[iNQ]; k++)
+ {
+ theta_s = (double)k*PI/(double)SQ[iNQ];
+ M = (int)floor((2.0*PI)/acos((cos(PI/(double)SQ[iNQ])-
+ cos(theta_s)*cos(theta_s))/(sin(theta_s)*sin(theta_s))));
+
+ for (n = 0; n < M; n++)
+ {
+ x_grid[2*d] = (n + 0.5)/M;
+ x_grid[2*d] -= (x_grid[2*d]>=0.5)?(1.0):(0.0);
+ x_grid[2*d+1] = theta_s/(2.0*PI);
+ if (gridtype == GRID_EQUIDISTRIBUTION)
+ {
+ w[d] = w_temp[k]/((double)(M));
+ }
+ else
+ {
+ w[d] = (4.0*PI)/(m_total);
+ }
+ d++;
+ }
+ }
+
+ if (gridtype == GRID_EQUIDISTRIBUTION)
+ {
+ nfft_free(w_temp);
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ /* Allocate memory for grid values. */
+ f_grid = (double _Complex*) nfft_malloc(m_total*sizeof(double _Complex));
+
+ if (mode == RANDOM)
+ {
+ }
+ else
+ {
+ m_compare = m_total;
+ f_compare = (double _Complex*) nfft_malloc(m_compare*sizeof(double _Complex));
+ x_compare = x_grid;
+ f = f_grid;
+ }
+
+ //fprintf(stderr,"Generating test function\n");
+ //fflush(stderr);
+ switch (testfunction)
+ {
+ case FUNCTION_RANDOM_BANDLIMITED:
+ f_hat_gen = (double _Complex*) nfft_malloc(NFSFT_F_HAT_SIZE(N)*sizeof(double _Complex));
+ //fprintf(stderr,"Generating random test function\n");
+ //fflush(stderr);
+ /* Generate random function samples by sampling a bandlimited
+ * function. */
+ nfsft_init_guru(&plan_gen,N,m_total, NFSFT_NORMALIZED |
+ ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |
+ ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),
+ ((N>512)?(0U):(PRE_PHI_HUT | PRE_PSI)) | FFTW_INIT |
+ FFT_OUT_OF_PLACE, cutoff);
+
+ plan_gen.f_hat = f_hat_gen;
+ plan_gen.x = x_grid;
+ plan_gen.f = f_grid;
+
+ nfsft_precompute_x(&plan_gen);
+
+ for (k = 0; k < plan_gen.N_total; k++)
+ {
+ f_hat_gen[k] = 0.0;
+ }
+
+ for (k = 0; k <= N; k++)
+ {
+ for (n = -k; n <= k; n++)
+ {
+ f_hat_gen[NFSFT_INDEX(k,n,&plan_gen)] =
+ (((double)rand())/RAND_MAX)-0.5 + _Complex_I*((((double)rand())/RAND_MAX)-0.5);
+ }
+ }
+
+ if (use_nfsft != NO)
+ {
+ /* Execute the NFSFT transformation. */
+ nfsft_trafo(&plan_gen);
+ }
+ else
+ {
+ /* Execute the direct NDSFT transformation. */
+ nfsft_trafo_direct(&plan_gen);
+ }
+
+ nfsft_finalize(&plan_gen);
+
+ if (mode == RANDOM)
+ {
+ nfsft_init_guru(&plan_gen,N,m_compare, NFSFT_NORMALIZED |
+ ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |
+ ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),
+ ((N>512)?(0U):(PRE_PHI_HUT | PRE_PSI)) | FFTW_INIT |
+ FFT_OUT_OF_PLACE, cutoff);
+
+ plan_gen.f_hat = f_hat_gen;
+ plan_gen.x = x_compare;
+ plan_gen.f = f_compare;
+
+ nfsft_precompute_x(&plan_gen);
+
+ if (use_nfsft != NO)
+ {
+ /* Execute the NFSFT transformation. */
+ nfsft_trafo(&plan_gen);
+ }
+ else
+ {
+ /* Execute the direct NDSFT transformation. */
+ nfsft_trafo_direct(&plan_gen);
+ }
+
+ nfsft_finalize(&plan_gen);
+ }
+ else
+ {
+ memcpy(f_compare,f_grid,m_total*sizeof(double _Complex));
+ }
+
+ nfft_free(f_hat_gen);
+
+ break;
+
+ case FUNCTION_F1:
+ for (d = 0; d < m_total; d++)
+ {
+ x1 = sin(x_grid[2*d+1]*2.0*PI)*cos(x_grid[2*d]*2.0*PI);
+ x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);
+ x3 = cos(x_grid[2*d+1]*2.0*PI);
+ f_grid[d] = x1*x2*x3;
+ }
+ if (mode == RANDOM)
+ {
+ for (d = 0; d < m_compare; d++)
+ {
+ x1 = sin(x_compare[2*d+1]*2.0*PI)*cos(x_compare[2*d]*2.0*PI);
+ x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);
+ x3 = cos(x_compare[2*d+1]*2.0*PI);
+ f_compare[d] = x1*x2*x3;
+ }
+ }
+ else
+ {
+ memcpy(f_compare,f_grid,m_total*sizeof(double _Complex));
+ }
+ break;
+ case FUNCTION_F2:
+ for (d = 0; d < m_total; d++)
+ {
+ x1 = sin(x_grid[2*d+1]*2.0*PI)*cos(x_grid[2*d]*2.0*PI);
+ x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);
+ x3 = cos(x_grid[2*d+1]*2.0*PI);
+ f_grid[d] = 0.1*exp(x1+x2+x3);
+ }
+ if (mode == RANDOM)
+ {
+ for (d = 0; d < m_compare; d++)
+ {
+ x1 = sin(x_compare[2*d+1]*2.0*PI)*cos(x_compare[2*d]*2.0*PI);
+ x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);
+ x3 = cos(x_compare[2*d+1]*2.0*PI);
+ f_compare[d] = 0.1*exp(x1+x2+x3);
+ }
+ }
+ else
+ {
+ memcpy(f_compare,f_grid,m_total*sizeof(double _Complex));
+ }
+ break;
+ case FUNCTION_F3:
+ for (d = 0; d < m_total; d++)
+ {
+ x1 = sin(x_grid[2*d+1]*2.0*PI)*cos(x_grid[2*d]*2.0*PI);
+ x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);
+ x3 = cos(x_grid[2*d+1]*2.0*PI);
+ temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
+ f_grid[d] = 0.1*temp;
+ }
+ if (mode == RANDOM)
+ {
+ for (d = 0; d < m_compare; d++)
+ {
+ x1 = sin(x_compare[2*d+1]*2.0*PI)*cos(x_compare[2*d]*2.0*PI);
+ x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);
+ x3 = cos(x_compare[2*d+1]*2.0*PI);
+ temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
+ f_compare[d] = 0.1*temp;
+ }
+ }
+ else
+ {
+ memcpy(f_compare,f_grid,m_total*sizeof(double _Complex));
+ }
+ break;
+ case FUNCTION_F4:
+ for (d = 0; d < m_total; d++)
+ {
+ x1 = sin(x_grid[2*d+1]*2.0*PI)*cos(x_grid[2*d]*2.0*PI);
+ x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);
+ x3 = cos(x_grid[2*d+1]*2.0*PI);
+ temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
+ f_grid[d] = 1.0/(temp);
+ }
+ if (mode == RANDOM)
+ {
+ for (d = 0; d < m_compare; d++)
+ {
+ x1 = sin(x_compare[2*d+1]*2.0*PI)*cos(x_compare[2*d]*2.0*PI);
+ x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);
+ x3 = cos(x_compare[2*d+1]*2.0*PI);
+ temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
+ f_compare[d] = 1.0/(temp);
+ }
+ }
+ else
+ {
+ memcpy(f_compare,f_grid,m_total*sizeof(double _Complex));
+ }
+ break;
+ case FUNCTION_F5:
+ for (d = 0; d < m_total; d++)
+ {
+ x1 = sin(x_grid[2*d+1]*2.0*PI)*cos(x_grid[2*d]*2.0*PI);
+ x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);
+ x3 = cos(x_grid[2*d+1]*2.0*PI);
+ temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
+ f_grid[d] = 0.1*sin(1+temp)*sin(1+temp);
+ }
+ if (mode == RANDOM)
+ {
+ for (d = 0; d < m_compare; d++)
+ {
+ x1 = sin(x_compare[2*d+1]*2.0*PI)*cos(x_compare[2*d]*2.0*PI);
+ x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);
+ x3 = cos(x_compare[2*d+1]*2.0*PI);
+ temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
+ f_compare[d] = 0.1*sin(1+temp)*sin(1+temp);
+ }
+ }
+ else
+ {
+ memcpy(f_compare,f_grid,m_total*sizeof(double _Complex));
+ }
+ break;
+ case FUNCTION_F6:
+ for (d = 0; d < m_total; d++)
+ {
+ if (x_grid[2*d+1] <= 0.25)
+ {
+ f_grid[d] = 1.0;
+ }
+ else
+ {
+ f_grid[d] = 1.0/(sqrt(1+3*cos(2.0*PI*x_grid[2*d+1])*cos(2.0*PI*x_grid[2*d+1])));
+ }
+ }
+ if (mode == RANDOM)
+ {
+ for (d = 0; d < m_compare; d++)
+ {
+ if (x_compare[2*d+1] <= 0.25)
+ {
+ f_compare[d] = 1.0;
+ }
+ else
+ {
+ f_compare[d] = 1.0/(sqrt(1+3*cos(2.0*PI*x_compare[2*d+1])*cos(2.0*PI*x_compare[2*d+1])));
+ }
+ }
+ }
+ else
+ {
+ memcpy(f_compare,f_grid,m_total*sizeof(double _Complex));
+ }
+ break;
+ default:
+ //fprintf(stderr,"Generating one function\n");
+ //fflush(stderr);
+ for (d = 0; d < m_total; d++)
+ {
+ f_grid[d] = 1.0;
+ }
+ if (mode == RANDOM)
+ {
+ for (d = 0; d < m_compare; d++)
+ {
+ f_compare[d] = 1.0;
+ }
+ }
+ else
+ {
+ memcpy(f_compare,f_grid,m_total*sizeof(double _Complex));
+ }
+ break;
+ }
+
+ //fprintf(stderr,"Initializing trafo\n");
+ //fflush(stderr);
+ /* Init transform plan. */
+ nfsft_init_guru(&plan_adjoint,NQ[iNQ],m_total, NFSFT_NORMALIZED |
+ ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |
+ ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),
+ ((NQ[iNQ]>512)?(0U):(PRE_PHI_HUT | PRE_PSI)) | FFTW_INIT |
+ FFT_OUT_OF_PLACE, cutoff);
+
+ plan_adjoint_ptr = &plan_adjoint;
+
+ if (mode == RANDOM)
+ {
+ nfsft_init_guru(&plan,NQ[iNQ],m_compare, NFSFT_NORMALIZED |
+ ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |
+ ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),
+ ((NQ[iNQ]>512)?(0U):(PRE_PHI_HUT | PRE_PSI)) | FFTW_INIT |
+ FFT_OUT_OF_PLACE, cutoff);
+ plan_ptr = &plan;
+ }
+ else
+ {
+ plan_ptr = &plan_adjoint;
+ }
+
+ f_hat = (double _Complex*) nfft_malloc(NFSFT_F_HAT_SIZE(NQ[iNQ])*sizeof(double _Complex));
+
+ plan_adjoint_ptr->f_hat = f_hat;
+ plan_adjoint_ptr->x = x_grid;
+ plan_adjoint_ptr->f = f_grid;
+
+ plan_ptr->f_hat = f_hat;
+ plan_ptr->x = x_compare;
+ plan_ptr->f = f;
+
+ //fprintf(stderr,"Precomputing for x\n");
+ //fflush(stderr);
+ nfsft_precompute_x(plan_adjoint_ptr);
+ if (plan_adjoint_ptr != plan_ptr)
+ {
+ nfsft_precompute_x(plan_ptr);
+ }
+
+ /* Initialize cumulative time variable. */
+ t_avg = 0.0;
+ err_infty_avg = 0.0;
+ err_2_avg = 0.0;
+
+ /* Cycle through all runs. */
+ for (i = 0; i < 1/*repetitions*/; i++)
+ {
+ //fprintf(stderr,"Copying original values\n");
+ //fflush(stderr);
+ /* Copy exact funtion values to working array. */
+ //memcpy(f,f_grid,m_total*sizeof(double _Complex));
+
+ /* Initialize time measurement. */
+ t0 = getticks();
+
+ //fprintf(stderr,"Multiplying with quadrature weights\n");
+ //fflush(stderr);
+ /* Multiplication with the quadrature weights. */
+ /*fprintf(stderr,"\n");*/
+ d = 0;
+ for (k = 0; k < m_theta; k++)
+ {
+ for (n = 0; n < m_phi; n++)
+ {
+ /*fprintf(stderr,"f_ref[%d] = %le + I*%le,\t f[%d] = %le + I*%le, \t w[%d] = %le\n",
+ d,creal(f_ref[d]),cimag(f_ref[d]),d,creal(f[d]),cimag(f[d]),k,
+ w[k]);*/
+ f_grid[d] *= w[k];
+ d++;
+ }
+ }
+
+ t1 = getticks();
+ t_avg += nfft_elapsed_seconds(t1,t0);
+
+ nfft_free(w);
+
+ t0 = getticks();
+
+ /*fprintf(stderr,"\n");
+ d = 0;
+ for (d = 0; d < grid_total; d++)
+ {
+ fprintf(stderr,"f[%d] = %le + I*%le, theta[%d] = %le, phi[%d] = %le\n",
+ d,creal(f[d]),cimag(f[d]),d,x[2*d+1],d,x[2*d]);
+ }*/
+
+ //fprintf(stderr,"Executing adjoint\n");
+ //fflush(stderr);
+ /* Check if the fast NFSFT algorithm shall be tested. */
+ if (use_nfsft != NO)
+ {
+ /* Execute the adjoint NFSFT transformation. */
+ nfsft_adjoint(plan_adjoint_ptr);
+ }
+ else
+ {
+ /* Execute the adjoint direct NDSFT transformation. */
+ nfsft_adjoint_direct(plan_adjoint_ptr);
+ }
+
+ /* Multiplication with the Fourier-Legendre coefficients. */
+ /*for (k = 0; k <= m[im]; k++)
+ {
+ for (n = -k; n <= k; n++)
+ {
+ fprintf(stderr,"f_hat[%d,%d] = %le\t + I*%le\n",k,n,
+ creal(f_hat[NFSFT_INDEX(k,n,&plan_adjoint)]),
+ cimag(f_hat[NFSFT_INDEX(k,n,&plan_adjoint)]));
+ }
+ }*/
+
+ //fprintf(stderr,"Executing trafo\n");
+ //fflush(stderr);
+ if (use_nfsft != NO)
+ {
+ /* Execute the NFSFT transformation. */
+ nfsft_trafo(plan_ptr);
+ }
+ else
+ {
+ /* Execute the direct NDSFT transformation. */
+ nfsft_trafo_direct(plan_ptr);
+ }
+
+ t1 = getticks();
+ t_avg += nfft_elapsed_seconds(t1,t0);
+
+ //fprintf(stderr,"Finalizing\n");
+ //fflush(stderr);
+ /* Finalize the NFSFT plans */
+ nfsft_finalize(plan_adjoint_ptr);
+ if (plan_ptr != plan_adjoint_ptr)
+ {
+ nfsft_finalize(plan_ptr);
+ }
+
+ /* Free data arrays. */
+ nfft_free(f_hat);
+ nfft_free(x_grid);
+
+ err_infty_avg += X(error_l_infty_complex)(f, f_compare, m_compare);
+ err_2_avg += X(error_l_2_complex)(f, f_compare, m_compare);
+
+ nfft_free(f_grid);
+
+ if (mode == RANDOM)
+ {
+ }
+ else
+ {
+ nfft_free(f_compare);
+ }
+
+ /*for (d = 0; d < m_total; d++)
+ {
+ fprintf(stderr,"f_ref[%d] = %le + I*%le,\t f[%d] = %le + I*%le\n",
+ d,creal(f_ref[d]),cimag(f_ref[d]),d,creal(f[d]),cimag(f[d]));
+ }*/
+ }
+
+ //fprintf(stderr,"Calculating the error\n");
+ //fflush(stderr);
+ /* Calculate average time needed. */
+ t_avg = t_avg/((double)repetitions);
+
+ /* Calculate the average error. */
+ err_infty_avg = err_infty_avg/((double)repetitions);
+
+ /* Calculate the average error. */
+ err_2_avg = err_2_avg/((double)repetitions);
+
+ /* Print out the error measurements. */
+ fprintf(stdout,"%+le %+le %+le\n", t_avg, err_infty_avg, err_2_avg);
+ fprintf(stderr,"%d: %4d %4d %+le %+le %+le\n", tc, NQ[iNQ], SQ[iNQ],
+ t_avg, err_infty_avg, err_2_avg);
+ }
+ } /* for (im = 0; im < im_max; im++) - Process all cut-off
+ * bandwidths.*/
+ fprintf(stderr,"\n");
+
+ /* Delete precomputed data. */
+ nfsft_forget();
+
+ /* Free memory for cut-off bandwidths and grid size parameters. */
+ nfft_free(NQ);
+ nfft_free(SQ);
+ if (testmode == TIMING)
+ {
+ nfft_free(RQ);
+ }
+
+ if (mode == RANDOM)
+ {
+ nfft_free(x_compare);
+ nfft_free(f_compare);
+ nfft_free(f);
+ }
+
+ if (testmode == TIMING)
+ {
+ /* Allocate data structures. */
+ nfft_free(f_hat);
+ nfft_free(f);
+ nfft_free(x_grid);
+ }
+
+ } /* for (tc = 0; tc < tc_max; tc++) - Process each testcase. */
+
+ /* Return exit code for successful run. */
+ return EXIT_SUCCESS;
+}
+/* \} */
diff --git a/applications/quadratureS2/quadratureS2.m b/applications/quadratureS2/quadratureS2.m
new file mode 100644
index 0000000..799e380
--- /dev/null
+++ b/applications/quadratureS2/quadratureS2.m
@@ -0,0 +1,177 @@
+function quadratureS2()
+%QUADRATURES2
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: quadratureS2.m 3784 2012-06-06 20:30:39Z keiner $
+
+% The name of the input file
+infilename = 'data.in';
+% The name of the output file
+outfilename = 'data.out';
+% The name of the program
+programname = 'quadratureS2';
+
+% Display the menu.
+selection = menu('quadratureS2 - Fast evaluation of quadrature formulae on the sphere',...
+ 'Generate Figure 6.1 (a)','Generate Figure 6.1 (b)','Generate Figure 6.2 (a)',...
+ 'Generate Figure 6.2 (b)')
+
+% Open input data file.
+file = fopen(infilename,'w');
+
+if (selection == 1)
+ % Set the grid type.
+ % 0 = Gauss-Legendre
+ gridtype = 0;
+ % Set the number of repetitions.
+ repetitions = 1;
+ % Set the size parameters.
+ S1 = 16:16:1024;
+ %S1 = 16:16:128;
+ S2 = [16,32,64,128,256,512,1024];
+ %S2 = [16,32,64,128];
+ % Set the bandwidhts.
+ N1 = S1;
+ N2 = S2;
+ % Write the number of testcases.
+ fprintf(file,'testcases=3\n');
+ % Write the testcases.
+ writeTestcase(file,1,1,3,1,1000,0,gridtype,[1],repetitions,[0],[N1;S1]);
+ writeTestcase(file,1,1,6,1,1000,0,gridtype,[1],repetitions,[0],[N1;S1]);
+ writeTestcase(file,0,0,0,0,1000,0,gridtype,[1],repetitions,[0],[N2;S2]);
+elseif (selection == 2)
+ % Set the grid type.
+ % 0 = Gauss-Legendre
+ gridtype=0;
+ % Set the number of repetitions.
+ repetitions=1;
+ % Set the bandwidhts.
+ N=16:16:1024;
+ % Set the size parameters.
+ S=1024*ones(size(N));
+ % Write the number of testcases.
+ fprintf(file,'testcases=4\n');
+ % Write the testcases.
+ writeTestcase(file,1,1,6,1,1000,0,gridtype,[3],repetitions,[0],[N;S]);
+ writeTestcase(file,1,1,6,1,1000,0,gridtype,[4],repetitions,[0],[N;S]);
+ writeTestcase(file,1,1,6,1,1000,0,gridtype,[5],repetitions,[0],[N;S]);
+ writeTestcase(file,1,1,6,1,1000,0,gridtype,[6],repetitions,[0],[N;S]);
+elseif (selection == 3)
+ % Set the number of repetitions.
+ repetitions=1;
+ % Set the size parameters.
+ S1 = 16:16:1024;
+ S2 = [1,2,4,8,16,32,64,128,256,512];
+ %S1 = 16:16:256;
+ %S2 = [1,2,4,8,16,32,64,128];
+ % Set the bandwidhts.
+ N1 = 128*ones(1,length(S1));
+ N2 = 128*ones(1,length(S2));
+ % Write the number of testcases.
+ fprintf(file,'testcases=4\n');
+ % Write the testcases.
+ writeTestcase(file,1,1,6,1,1000,0,0,[0,128],repetitions,[0],[N1;S1]);
+ writeTestcase(file,1,1,6,1,1000,0,1,[0,128],repetitions,[0],[N1;S1]);
+ writeTestcase(file,1,1,6,1,1000,0,2,[0,128],repetitions,[0],[N2;S2]);
+ writeTestcase(file,1,1,6,1,1000,0,3,[0,128],repetitions,[0],[N1;S1]);
+elseif (selection == 4)
+ % Set the grid type.
+ % 1 = Clenshaw-Curtis
+ gridtype=1;
+ % Set the number of repetitions.
+ repetitions=1;
+ % Set the bandwidhts.
+ N=16:16:1024;
+ %N=16:16:128;
+ % Set the number of nodes.
+ Q=N.*N;
+ % Set the number of repetitions
+ R=ceil(7500./(N.^(1.5))); %horzcat(100:-10:20,20*ones(1,length(N)-length(100:-10:20)));
+ % Set the bandwidhts.
+ N2=[1,2,4,8,16,32,64,128,256,512,1024];
+ %N2=[16,32,64,128];
+ % Set the number of nodes.
+ Q2=N2.*N2;
+ % Set the number of repetitions
+ R2=ceil(7500./(N2.^(2))); %horzcat(100:-10:20,20*ones(1,length(N)-length(100:-10:20)));
+ % Write the number of testcases.
+ fprintf(file,'testcases=2\n');
+ % Write the testcases.
+ writeTestcase(file,1,1,6,1,1000,1,gridtype,[0,128],repetitions,[0],[N;Q;R]);
+ writeTestcase(file,0,1,6,1,1000,1,gridtype,[0,128],repetitions,[0],[N2;Q2;R2]);
+else
+ error('Wrong selection!');
+end
+
+fclose(file);
+
+fprintf('Program in execution. Please be patient! This may take a while!\n');
+
+system(sprintf('./%s < %s > %s',programname,infilename,outfilename));
+file = fopen(outfilename,'r');
+T = readTestcase(file);
+fclose(file);
+figure('Color',[1 1 1],'InvertHardcopy','off','PaperSize',[20.98 29.68]);
+axes('FontSize',16);
+
+if (selection == 1)
+%if (false)
+ x = T{1}.parameters(:,1);
+ semilogy(x,T{1}.data(:,3),'-.','LineWidth',2,'Color',[0,0,0]);
+ hold on
+ semilogy(x,T{2}.data(:,3),'--','LineWidth',2,'Color',[0,0,0]);
+ x2 = T{3}.parameters(:,1);
+ semilogy(x2,T{3}.data(:,3),'-','LineWidth',2,'Color',[0,0,0]);
+ semilogy(x2,T{3}.data(:,3),'.','MarkerSize',2,'Color',[0,0,0]);
+ axis([x(1) x(end) 1e-16 1e-5])
+ xlabel('S=M');
+ ylabel('E_{\infty}','Rotation',0);
+elseif (selection == 2)
+ x = T{1}.parameters(:,1);
+ semilogy(x,T{1}.data(:,3),'-.','LineWidth',2,'Color',[0,0,0]);
+ hold on
+ semilogy(x,T{2}.data(:,3),':','LineWidth',2,'Color',[0,0,0]);
+ semilogy(x,T{3}.data(:,3),'--','LineWidth',2,'Color',[0,0,0]);
+ semilogy(x,T{4}.data(:,3),'-','LineWidth',2,'Color',[0,0,0]);
+ axis([x(1) x(end) 1e-12 1e-0])
+ xlabel('M');
+ ylabel('E_{\infty}','Rotation',0);
+elseif (selection == 3)
+ x = T{1}.parameters(:,2);
+ semilogy(x,T{1}.data(:,3),'-','LineWidth',2,'Color',[0,0,0]);
+ hold on
+ semilogy(x,T{2}.data(:,3),'--','LineWidth',2,'Color',[0,0,0]);
+ semilogy(x,T{3}.data(:,3),':','LineWidth',2,'Color',[0,0,0]);
+ semilogy(x,T{3}.data(:,3),'.','MarkerSize',2,'Color',[0,0,0]);
+ semilogy(x,T{4}.data(:,3),'-.','LineWidth',2,'Color',[0,0,0]);
+ axis([x(1) x(end) 1e-12 1e+0])
+ xlabel('S');
+ ylabel('E_{\infty}','Rotation',0);
+elseif (selection == 4)
+ x = T{1}.parameters(:,1);
+ x2 = T{2}.parameters(:,1);
+ semilogy(x,T{1}.data(:,1),'--','LineWidth',2,'Color',[0,0,0]);
+ hold on
+ semilogy(x2,T{2}.data(:,1),'-','LineWidth',2,'Color',[0,0,0]);
+ semilogy(x2,T{2}.data(:,1),'.','MarkerSize',2,'Color',[0,0,0]);
+ axis([x(1) x(end) 1e-4 1e+6])
+ xlabel('M');
+ ylabel('T','Rotation',0);
+end
diff --git a/applications/quadratureS2/readTestcase.m b/applications/quadratureS2/readTestcase.m
new file mode 100644
index 0000000..d54b212
--- /dev/null
+++ b/applications/quadratureS2/readTestcase.m
@@ -0,0 +1,176 @@
+function T = readTestcase(file)
+%READTESTCASE - Read quadratureS2.c testcase results from file
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: readTestcase.m 3784 2012-06-06 20:30:39Z keiner $
+
+% Read the number of testcases.
+tc_max = fscanf(file,'%d',1);
+
+% Create empty cell array for the testcases.
+T = cell(tc_max,1);
+
+% Cycle through all testcases.
+for i = 1:tc_max
+
+ % Create structure.
+ t = struct('USENFSFT',[0],'USENFFT',[0],'CUTOFF',[0],'USEFPT',[0],...
+ 'THRESHOLD',[0],'testmode',[0],'gridtype',{0},'testfunction',[0],...
+ 'bandlimit',[0],'repetitions',[0],'mode',{0},'points',[0],...
+ 'parameters',[0],'data',[0]);
+
+ % Read NFSFT usage flag.
+ v = fscanf(file,'%d',1);
+ if (v >= 1)
+
+ % Set NFSFT usage flag in the structure.
+ t.USENFSFT = [true];
+
+ % Read NFFT usage flag.
+ v = fscanf(file,'%d',1);
+
+ if (v >= 1)
+
+ % Set NFSFT usage flag in the structure.
+ t.USENFFFT = [true];
+
+ % Read the NFFT cut-off parameter.
+ v = fscanf(file,'%d',1);
+ t.CUTOFF = [v];
+
+ else
+
+ % Set NFSFT usage flag in the structure.
+ t.USENFFFT = [false];
+
+ end
+
+ % Read FPT usage flag.
+ v = fscanf(file,'%d',1);
+
+ if (v >= 1)
+
+ % Set NFSFT usage flag in the structure.
+ t.USEFPT = [true];
+
+ % Read the FPT threshold.
+ v = fscanf(file,'%lf',1);
+ t.THRESHOLD = [v];
+
+ else
+
+ % Set NFSFT usage flag in the structure.
+ t.USEFPT = [false];
+
+ end
+
+ else
+
+ % Set NFSFT usage flag in the structure.
+ t.USENFSFT = [false];
+
+ end
+
+ % Read the test mode.
+ v = fscanf(file,'%d',1);
+ t.testmode = [v];
+
+ if (v == 0)
+
+ % Read the grid type.
+ v = fscanf(file,'%d',1);
+ t.gridtype = [v];
+
+ % Read the testfunction.
+ v = fscanf(file,'%d',1);
+ t.testfunction = [v];
+
+ if (v == 0)
+
+ % Read the badnlimit.
+ v = fscanf(file,'%d',1);
+ t.bandlimit = [v];
+
+ end
+
+ % Read the number of repetitions.
+ v = fscanf(file,'%d',1);
+ t.repetitions = [v];
+
+ % Read the mode.
+ v = fscanf(file,'%d',1);
+ t.mode = [v];
+
+ if (v == 1)
+
+ % Read the points.
+ v = fscanf(file,'%d',1);
+ t.points = [v];
+
+ end
+
+ end
+
+ % Read the number of bandwidths.
+ v = fscanf(file,'%d',1);
+
+ if (t.testmode == 0)
+ % Create empty array for parameters.
+ p = zeros(2,v);
+ % Create empty array for parameters.
+ data = zeros(3,v);
+
+ % Read parameters.
+ p = fscanf(file,'%d',[2,v]);
+
+ % Transpose matrix to get dimensions right.
+ t.parameters = p';
+
+ % Read parameters.
+ data = fscanf(file,'%lf',[3,v]);
+
+ % Transpose matrix to get dimensions right.
+ t.data = data';
+ else
+ % Create empty array for parameters.
+ p = zeros(3,v);
+ % Create empty array for parameters.
+ data = zeros(1,v);
+
+ % Read parameters.
+ p = fscanf(file,'%d',[3,v]);
+
+ % Transpose matrix to get dimensions right.
+ t.parameters = p';
+
+ % Read parameters.
+ data = fscanf(file,'%lf',[1,v]);
+
+ % Transpose matrix to get dimensions right.
+ t.data = data';
+ end
+
+ % Assign testcase structure to field in cell array.
+ T{i} = t;
+
+end
+
+% End of the function
+return;
diff --git a/applications/quadratureS2/writeTestcase.m b/applications/quadratureS2/writeTestcase.m
new file mode 100644
index 0000000..f2de4f0
--- /dev/null
+++ b/applications/quadratureS2/writeTestcase.m
@@ -0,0 +1,77 @@
+function writeTestcase(file,usenfsft,usenfft,cutoff,usefpt,threshold,...
+ testmode,gridtype,testfunction,repetitions,mode,bandwidths)
+%WRITETESTCASE - Write qudratureS2 testcases
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: writeTestcase.m 3785 2012-06-06 20:38:33Z keiner $
+
+% Write usenfsft
+fprintf(file,'nfsft=%d\n',usenfsft);
+if (usenfsft == 1)
+ % Write usenfft
+ fprintf(file,'nfft=%d\n',usenfft);
+ if (usenfft == 1)
+ % Write NFFT cut-off parameter
+ fprintf(file,'cutoff=%d\n',cutoff);
+ end
+ % Write use FPT
+ fprintf(file,'fpt=%d\n',usefpt);
+ if (usefpt == 1)
+ % Write NFSFT threshold
+ fprintf(file,'threshold=%e\n',threshold);
+ end
+end
+
+fprintf(file,'testmode=%d\n',testmode);
+
+if (testmode == 0)
+ % Write grid type
+ fprintf(file,'gridtype=%d\n',gridtype);
+ % Write grid type
+ fprintf(file,'testfunction=%d\n',testfunction(1));
+ if (testfunction(1) == 0)
+ fprintf(file,'bandlimit=%d\n',testfunction(2));
+ end
+ % Write number of repetitions
+ fprintf(file,'repetitions=%d\n',repetitions);
+ % Write mode
+ fprintf(file,'mode=%d\n',mode(1));
+ if (mode(1) == 1)
+ % Write points
+ fprintf(file,'points=%d\n',mode(2));
+ end
+end
+
+% Write number of bandwidths
+fprintf(file,'bandwidths=%d\n',size(bandwidths,2));
+
+if (testmode == 0)
+ % Write bandwidths
+ fprintf(file,'%d %d\n',bandwidths);
+else
+ % Write bandwidths
+ fprintf(file,'%d %d %d\n',bandwidths);
+end
+
+% Check if we need to provide also quadrature weights. This is the case if
+% the Gauss-Legendre quadrature grid is used.
+if (gridtype==0)
+ writeWeights(file,bandwidths(2,:));
+end
diff --git a/applications/quadratureS2/writeWeights.m b/applications/quadratureS2/writeWeights.m
new file mode 100644
index 0000000..f70c775
--- /dev/null
+++ b/applications/quadratureS2/writeWeights.m
@@ -0,0 +1,35 @@
+function writeWeights(file,m)
+%WRITEWEIGHTS
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: writeWeights.m 3784 2012-06-06 20:30:39Z keiner $
+
+for k = m
+ % Generate Gauss-Legendre nodes in co-latitudinal direction.
+ [theta,w] = lgwt(k+1,-1,1);
+ theta = (1/(2*pi))*acos(theta);
+
+ % Write data to file.
+ fprintf(file,'\n');
+ fprintf(file,'\n');
+ fprintf(file,'%.30f\n',w);
+ fprintf(file,'\n');
+ fprintf(file,'%.30f\n',theta);
+end
diff --git a/applications/radon/Makefile.am b/applications/radon/Makefile.am
new file mode 100644
index 0000000..3023ba9
--- /dev/null
+++ b/applications/radon/Makefile.am
@@ -0,0 +1,13 @@
+# $Id: Makefile.am 3452 2010-03-15 22:43:05Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = radon inverse_radon
+
+radon_SOURCES = radon.c
+radon_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+inverse_radon_SOURCES = inverse_radon.c
+inverse_radon_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = phantom.m radon.m ridgelet.m README
diff --git a/applications/radon/Makefile.in b/applications/radon/Makefile.in
new file mode 100644
index 0000000..63d5c08
--- /dev/null
+++ b/applications/radon/Makefile.in
@@ -0,0 +1,564 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3452 2010-03-15 22:43:05Z keiner $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = radon$(EXEEXT) inverse_radon$(EXEEXT)
+subdir = applications/radon
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_inverse_radon_OBJECTS = inverse_radon.$(OBJEXT)
+inverse_radon_OBJECTS = $(am_inverse_radon_OBJECTS)
+inverse_radon_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_radon_OBJECTS = radon.$(OBJEXT)
+radon_OBJECTS = $(am_radon_OBJECTS)
+radon_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(inverse_radon_SOURCES) $(radon_SOURCES)
+DIST_SOURCES = $(inverse_radon_SOURCES) $(radon_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+radon_SOURCES = radon.c
+radon_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+inverse_radon_SOURCES = inverse_radon.c
+inverse_radon_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = phantom.m radon.m ridgelet.m README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/radon/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applications/radon/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+inverse_radon$(EXEEXT): $(inverse_radon_OBJECTS) $(inverse_radon_DEPENDENCIES) $(EXTRA_inverse_radon_DEPENDENCIES)
+ @rm -f inverse_radon$(EXEEXT)
+ $(LINK) $(inverse_radon_OBJECTS) $(inverse_radon_LDADD) $(LIBS)
+radon$(EXEEXT): $(radon_OBJECTS) $(radon_DEPENDENCIES) $(EXTRA_radon_DEPENDENCIES)
+ @rm -f radon$(EXEEXT)
+ $(LINK) $(radon_OBJECTS) $(radon_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/inverse_radon.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/radon.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applications/radon/README b/applications/radon/README
new file mode 100644
index 0000000..c40bf51
--- /dev/null
+++ b/applications/radon/README
@@ -0,0 +1,27 @@
+radon - Fast discrete NFFT-based Radon transform
+
+ This folder includes simple C programs (radon.c, inverse_radon.c) for the
+ computation of a fast discrete NFFT-based Radon transform and its inverse.
+ Use the Matlab script file radon.m for a simple demonstration.
+
+ The Matlab script file ridgelet.m contains an example of denoising by hard
+ thresholding the discrete ridgelet coefficients of a noisy image. The
+ discrete ridgelet transform is based on the fast discrete NFFT-based Radon
+ transform.
+
+
+ References:
+
+ [1] M. Fenn. Fast Fourier Transform at Nonequispaced Nodes and Applications,
+ PhD Thesis, University of Mannheim, 2005.
+
+ [2] J. Ma and M. Fenn. Combined complex ridgelet shrinkage and total
+ variation minimization. SIAM J. Sci. Comput. 28, 984-1000, 2006.
+
+ [3] D. Potts, and G. Steidl, G. A new linogram algorithm for computerized
+ tomography. IMA J. Numer. Anal. 21, 769-782, 2001
+
+ [4] D. Potts, and G. Steidl, New Fourier reconstruction algorithms for
+ computerized tomography. in: Proceedings of SPIE: Wavelet Applications
+ in Signal and Image Processing VIII,A. Aldroubi,A.F. Laine,
+ M.A. Unser (Eds.), Vol.:4119, pages 13-23, 2000
diff --git a/applications/radon/inverse_radon.c b/applications/radon/inverse_radon.c
new file mode 100644
index 0000000..7e22c7d
--- /dev/null
+++ b/applications/radon/inverse_radon.c
@@ -0,0 +1,293 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: inverse_radon.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \file inverse_radon.c
+ * \brief NFFT-based discrete inverse Radon transform.
+ *
+ * Computes the inverse of the discrete Radon transform
+ * \f[
+ * R_{\theta_t} f\left(\frac{s}{R}\right)
+ * = \sum_{r \in I_R} w_r \; \sum_{k \in I_N^2} f_{k}
+ * \mathrm{e}^{-2\pi\mathrm{I} k \; (\frac{r}{R}\theta_t)}
+ * \, \mathrm{e}^{2\pi\mathrm{i} r s / R}
+ * \qquad(t \in I_T, s \in I_R).
+ * \f]
+ * given at the points \f$\frac{r}{R}\theta_t\f$ of the polar or linogram grid
+ * and where \f$w_r\f$ are the weights of the Dirichlet- or Fejer-kernel
+ * by 1D-FFTs and the 2D-iNFFT.
+ * \author Markus Fenn
+ * \date 2005
+ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/** define weights of kernel function for discrete Radon transform */
+/*#define KERNEL(r) 1.0 */
+#define KERNEL(r) (1.0-fabs((double)(r))/((double)R/2))
+
+/** generates the points x with weights w
+ * for the polar grid with T angles and R offsets
+ */
+static int polar_grid(int T, int R, double *x, double *w)
+{
+ int t, r;
+ double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+
+ for(t=-T/2; t<T/2; t++)
+ {
+ for(r=-R/2; r<R/2; r++)
+ {
+ x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R*cos(PI*t/T);
+ x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R*sin(PI*t/T);
+ if (r==0)
+ w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+ else
+ w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+ }
+ }
+
+ return 0;
+}
+
+/** generates the points x with weights w
+ * for the linogram grid with T slopes and R offsets
+ */
+static int linogram_grid(int T, int R, double *x, double *w)
+{
+ int t, r;
+ double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+
+ for(t=-T/2; t<T/2; t++)
+ {
+ for(r=-R/2; r<R/2; r++)
+ {
+ if(t<0)
+ {
+ x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R;
+ x[2*((t+T/2)*R+(r+R/2))+1] = (double)4*(t+T/4)/T*r/R;
+ }
+ else
+ {
+ x[2*((t+T/2)*R+(r+R/2))+0] = -(double)4*(t-T/4)/T*r/R;
+ x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R;
+ }
+ if (r==0)
+ w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+ else
+ w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+ }
+ }
+
+ return 0;
+}
+
+/** computes the inverse discrete Radon transform of Rf
+ * on the grid given by gridfcn() with T angles and R offsets
+ * by a NFFT-based CG-type algorithm
+ */
+int Inverse_Radon_trafo(int (*gridfcn)(), int T, int R, double *Rf, int NN, double *f, int max_i)
+{
+ int j,k; /**< index for nodes and freqencies */
+ nfft_plan my_nfft_plan; /**< plan for the nfft-2D */
+ solver_plan_complex my_infft_plan; /**< plan for the inverse nfft */
+
+ fftw_complex *fft; /**< variable for the fftw-1Ds */
+ fftw_plan my_fftw_plan; /**< plan for the fftw-1Ds */
+
+ int t,r; /**< index for directions and offsets */
+ double *x, *w; /**< knots and associated weights */
+ int l; /**< index for iterations */
+
+ int N[2],n[2];
+ int M=T*R;
+
+ N[0]=NN; n[0]=2*N[0];
+ N[1]=NN; n[1]=2*N[1];
+
+ fft = (fftw_complex *)nfft_malloc(R*sizeof(fftw_complex));
+ my_fftw_plan = fftw_plan_dft_1d(R,fft,fft,FFTW_FORWARD,FFTW_MEASURE);
+
+ x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
+ if (x==NULL)
+ return -1;
+
+ w = (double *)nfft_malloc(T*R*(sizeof(double)));
+ if (w==NULL)
+ return -1;
+
+ /** init two dimensional NFFT plan */
+ nfft_init_guru(&my_nfft_plan, 2, N, M, n, 4,
+ PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /** init two dimensional infft plan */
+ solver_init_advanced_complex(&my_infft_plan,(nfft_mv_plan_complex*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT);
+
+ /** init nodes and weights of grid*/
+ gridfcn(T,R,x,w);
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ {
+ my_nfft_plan.x[2*j+0] = x[2*j+0];
+ my_nfft_plan.x[2*j+1] = x[2*j+1];
+ if (j%R)
+ my_infft_plan.w[j] = w[j];
+ else
+ my_infft_plan.w[j] = 0.0;
+ }
+
+ /** precompute psi, the entries of the matrix B */
+ if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
+ nfft_precompute_lin_psi(&my_nfft_plan);
+
+ if(my_nfft_plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_nfft_plan);
+
+ if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
+ nfft_precompute_full_psi(&my_nfft_plan);
+
+ /** compute 1D-ffts and init given samples and weights */
+ for(t=0; t<T; t++)
+ {
+/* for(r=0; r<R/2; r++)
+ fft[r] = cexp(I*PI*r)*Rf[t*R+(r+R/2)];
+ for(r=0; r<R/2; r++)
+ fft[r+R/2] = cexp(I*PI*r)*Rf[t*R+r];
+ */
+
+ for(r=0; r<R; r++)
+ fft[r] = Rf[t*R+r] + _Complex_I*0.0;
+
+ nfft_fftshift_complex(fft, 1, &R);
+ fftw_execute(my_fftw_plan);
+ nfft_fftshift_complex(fft, 1, &R);
+
+ my_infft_plan.y[t*R] = 0.0;
+ for(r=-R/2+1; r<R/2; r++)
+ my_infft_plan.y[t*R+(r+R/2)] = fft[r+R/2]/KERNEL(r);
+ }
+
+ /** initialise some guess f_hat_0 */
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ my_infft_plan.f_hat_iter[k] = 0.0 + _Complex_I*0.0;
+
+ /** solve the system */
+ solver_before_loop_complex(&my_infft_plan);
+
+ if (max_i<1)
+ {
+ l=1;
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ my_infft_plan.f_hat_iter[k] = my_infft_plan.p_hat_iter[k];
+ }
+ else
+ {
+ for(l=1;l<=max_i;l++)
+ {
+ solver_loop_one_step_complex(&my_infft_plan);
+ /*if (sqrt(my_infft_plan.dot_r_iter)<=1e-12) break;*/
+ }
+ }
+ /*printf("after %d iteration(s): weighted 2-norm of original residual vector = %g\n",l-1,sqrt(my_infft_plan.dot_r_iter));*/
+
+ /** copy result */
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ f[k] = creal(my_infft_plan.f_hat_iter[k]);
+
+ /** finalise the plans and free the variables */
+ fftw_destroy_plan(my_fftw_plan);
+ nfft_free(fft);
+ solver_finalize_complex(&my_infft_plan);
+ nfft_finalize(&my_nfft_plan);
+ nfft_free(x);
+ nfft_free(w);
+ return 0;
+}
+
+/** simple test program for the inverse discrete Radon transform
+ */
+int main(int argc,char **argv)
+{
+ int (*gridfcn)(); /**< grid generating function */
+ int T, R; /**< number of directions/offsets */
+ FILE *fp;
+ int N; /**< image size */
+ double *Rf, *iRf;
+ int max_i; /**< number of iterations */
+
+ if( argc!=6 )
+ {
+ printf("inverse_radon gridfcn N T R max_i\n");
+ printf("\n");
+ printf("gridfcn \"polar\" or \"linogram\" \n");
+ printf("N image size NxN \n");
+ printf("T number of slopes \n");
+ printf("R number of offsets \n");
+ printf("max_i number of iterations \n");
+ exit(-1);
+ }
+
+ if (strcmp(argv[1],"polar") == 0)
+ gridfcn = polar_grid;
+ else
+ gridfcn = linogram_grid;
+
+ N = atoi(argv[2]);
+ T = atoi(argv[3]);
+ R = atoi(argv[4]);
+ /*printf("N=%d, %s grid with T=%d, R=%d. \n",N,argv[1],T,R);*/
+ max_i = atoi(argv[5]);
+
+ Rf = (double *)nfft_malloc(T*R*(sizeof(double)));
+ iRf = (double *)nfft_malloc(N*N*(sizeof(double)));
+
+ /** load data */
+ fp=fopen("sinogram_data.bin","rb");
+ if (fp==NULL)
+ return(-1);
+ fread(Rf,sizeof(double),T*R,fp);
+ fclose(fp);
+
+ /** inverse Radon transform */
+ Inverse_Radon_trafo(gridfcn,T,R,Rf,N,iRf,max_i);
+
+ /** write result */
+ fp=fopen("output_data.bin","wb+");
+ if (fp==NULL)
+ return(-1);
+ fwrite(iRf,sizeof(double),N*N,fp);
+ fclose(fp);
+
+ /** free the variables */
+ nfft_free(Rf);
+ nfft_free(iRf);
+
+ return EXIT_SUCCESS;
+}
diff --git a/applications/radon/phantom.m b/applications/radon/phantom.m
new file mode 100644
index 0000000..3d17d08
--- /dev/null
+++ b/applications/radon/phantom.m
@@ -0,0 +1,46 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: phantom.m 3776 2012-06-03 13:29:25Z keiner $
+function I=phantom(N)
+% phantom(N)
+% generates the (modified) Shepp-Logan phantom of P. Toft
+% as an NxN matrix.
+%
+% Reference: Peter Toft: "The Radon Transform - Theory and Implementation", Ph.D. thesis.
+% Department of Mathematical Modelling, Technical University of Denmark, June 1996. 326 pages.
+
+% Author: Markus Fenn, 2005
+
+I = zeros(N,N);
+
+k = linspace(-1,1,N);
+[x,y] = meshgrid(k);
+
+I = I + 1.0 * ( (x/0.69).^2+(y/0.92).^2 <= 1 );
+I = I - 0.8 * ( (x/0.6624).^2+((y+0.0184)/0.874).^2 <= 1 );
+I = I - 0.2 * ( ( (cos(-18/360*2*pi)*(x-0.22)+sin(-18/360*2*pi)*y)/0.11).^2+...
+ ( (sin(-18/360*2*pi)*(x-0.22)-cos(-18/360*2*pi)*y)/0.31).^2 <= 1 );
+I = I - 0.2 * ( ( (cos( 18/360*2*pi)*(x+0.22)+sin( 18/360*2*pi)*y)/0.16).^2+...
+ ( (sin( 18/360*2*pi)*(x+0.22)-cos( 18/360*2*pi)*y)/0.41).^2 <= 1 );
+I = I + 0.1 * ( (x/0.21).^2+((y-0.35)/0.25).^2 <= 1 );
+I = I + 0.1 * ( (x/0.046).^2+((y-0.1)/0.046).^2 <= 1 );
+I = I + 0.1 * ( (x/0.046).^2+((y+0.1)/0.046).^2 <= 1 );
+I = I + 0.1 * ( ((x+0.08)/0.046).^2+((y+0.605)/0.023).^2 <= 1 );
+I = I + 0.1 * ( (x/0.023).^2+((y+0.606)/0.023).^2 <= 1 );
+I = I + 0.1 * ( ((x-0.06)/0.023).^2+((y+0.605)/0.046).^2 <= 1 );
+
+I=flipud(I);
diff --git a/applications/radon/radon.c b/applications/radon/radon.c
new file mode 100644
index 0000000..9255104
--- /dev/null
+++ b/applications/radon/radon.c
@@ -0,0 +1,261 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: radon.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \file radon.c
+ * \brief NFFT-based discrete Radon transform.
+ *
+ * Computes the discrete Radon transform
+ * \f[
+ * R_{\theta_t} f\left(\frac{s}{R}\right)
+ * = \sum_{r \in I_R} w_r \; \sum_{k \in I_N^2} f_{k}
+ * \mathrm{e}^{-2\pi\mathrm{I} k \; (\frac{r}{R}\theta_t)}
+ * \, \mathrm{e}^{2\pi\mathrm{i} r s / R}
+ * \qquad(t \in I_T, s \in I_R).
+ * \f]
+ * by taking the 2D-NFFT of \f$f_k\f$ (\f$k \in I_N^2\f$)
+ * at the points \f$\frac{r}{R}\theta_t\f$ of the polar or linogram grid
+ * followed by 1D-iFFTs for every direction \f$t \in T\f$,
+ * where \f$w_r\f$ are the weights of the Dirichlet- or Fejer-kernel.
+ * \author Markus Fenn
+ * \date 2005
+ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/** define weights of kernel function for discrete Radon transform */
+/*#define KERNEL(r) 1.0 */
+#define KERNEL(r) (1.0-fabs((double)(r))/((double)R/2))
+
+/** generates the points x with weights w
+ * for the polar grid with T angles and R offsets
+ */
+static int polar_grid(int T, int R, double *x, double *w)
+{
+ int t, r;
+ double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+
+ for(t=-T/2; t<T/2; t++)
+ {
+ for(r=-R/2; r<R/2; r++)
+ {
+ x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R*cos(PI*t/T);
+ x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R*sin(PI*t/T);
+ if (r==0)
+ w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+ else
+ w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+ }
+ }
+
+ return 0;
+}
+
+/** generates the points x with weights w
+ * for the linogram grid with T slopes and R offsets
+ */
+static int linogram_grid(int T, int R, double *x, double *w)
+{
+ int t, r;
+ double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+
+ for(t=-T/2; t<T/2; t++)
+ {
+ for(r=-R/2; r<R/2; r++)
+ {
+ if(t<0)
+ {
+ x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R;
+ x[2*((t+T/2)*R+(r+R/2))+1] = (double)4*(t+T/4)/T*r/R;
+ }
+ else
+ {
+ x[2*((t+T/2)*R+(r+R/2))+0] = -(double)4*(t-T/4)/T*r/R;
+ x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R;
+ }
+ if (r==0)
+ w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+ else
+ w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+ }
+ }
+
+ return 0;
+}
+
+/** computes the NFFT-based discrete Radon transform of f
+ * on the grid given by gridfcn() with T angles and R offsets
+ */
+int Radon_trafo(int (*gridfcn)(), int T, int R, double *f, int NN, double *Rf)
+{
+ int j,k; /**< index for nodes and freqencies */
+ nfft_plan my_nfft_plan; /**< plan for the nfft-2D */
+
+ fftw_complex *fft; /**< variable for the fftw-1Ds */
+ fftw_plan my_fftw_plan; /**< plan for the fftw-1Ds */
+
+ int t,r; /**< index for directions and offsets */
+ double *x, *w; /**< knots and associated weights */
+
+ int N[2],n[2];
+ int M=T*R;
+
+ N[0]=NN; n[0]=2*N[0];
+ N[1]=NN; n[1]=2*N[1];
+
+ fft = (fftw_complex *)nfft_malloc(R*sizeof(fftw_complex));
+ my_fftw_plan = fftw_plan_dft_1d(R,fft,fft,FFTW_BACKWARD,FFTW_MEASURE);
+
+ x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
+ if (x==NULL)
+ return -1;
+
+ w = (double *)nfft_malloc(T*R*(sizeof(double)));
+ if (w==NULL)
+ return -1;
+
+ /** init two dimensional NFFT plan */
+ nfft_init_guru(&my_nfft_plan, 2, N, M, n, 4,
+ PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+
+ /** init nodes from grid*/
+ gridfcn(T,R,x,w);
+ for(j=0;j<my_nfft_plan.M_total;j++)
+ {
+ my_nfft_plan.x[2*j+0] = x[2*j+0];
+ my_nfft_plan.x[2*j+1] = x[2*j+1];
+ }
+
+ /** precompute psi, the entries of the matrix B */
+ if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
+ nfft_precompute_lin_psi(&my_nfft_plan);
+
+ if(my_nfft_plan.nfft_flags & PRE_PSI)
+ nfft_precompute_psi(&my_nfft_plan);
+
+ if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
+ nfft_precompute_full_psi(&my_nfft_plan);
+
+ /** init Fourier coefficients from given image */
+ for(k=0;k<my_nfft_plan.N_total;k++)
+ my_nfft_plan.f_hat[k] = f[k] + _Complex_I*0.0;
+
+ /** NFFT-2D */
+ nfft_trafo(&my_nfft_plan);
+
+ /** FFTW-1Ds */
+ for(t=0; t<T; t++)
+ {
+ fft[0]=0.0;
+ for(r=-R/2+1; r<R/2; r++)
+ fft[r+R/2] = KERNEL(r)*my_nfft_plan.f[t*R+(r+R/2)];
+
+ nfft_fftshift_complex(fft, 1, &R);
+ fftw_execute(my_fftw_plan);
+ nfft_fftshift_complex(fft, 1, &R);
+
+ for(r=0; r<R; r++)
+ Rf[t*R+r] = creal(fft[r])/R;
+
+/* for(r=0; r<R/2; r++)
+ Rf[t*R+(r+R/2)] = creal(cexp(-I*PI*r)*fft[r]);
+ for(r=0; r<R/2; r++)
+ Rf[t*R+r] = creal(cexp(-I*PI*r)*fft[r+R/2]);
+ */
+ }
+
+ /** finalise the plans and free the variables */
+ fftw_destroy_plan(my_fftw_plan);
+ nfft_free(fft);
+ nfft_finalize(&my_nfft_plan);
+ nfft_free(x);
+ nfft_free(w);
+ return 0;
+}
+
+/** simple test program for the discrete Radon transform
+ */
+int main(int argc,char **argv)
+{
+ int (*gridfcn)(); /**< grid generating function */
+ int T, R; /**< number of directions/offsets */
+ FILE *fp;
+ int N; /**< image size */
+ double *f, *Rf;
+
+ if( argc!=5 )
+ {
+ printf("radon gridfcn N T R\n");
+ printf("\n");
+ printf("gridfcn \"polar\" or \"linogram\" \n");
+ printf("N image size NxN \n");
+ printf("T number of slopes \n");
+ printf("R number of offsets \n");
+ exit(-1);
+ }
+
+ if (strcmp(argv[1],"polar") == 0)
+ gridfcn = polar_grid;
+ else
+ gridfcn = linogram_grid;
+
+ N = atoi(argv[2]);
+ T = atoi(argv[3]);
+ R = atoi(argv[4]);
+ /*printf("N=%d, %s grid with T=%d, R=%d. \n",N,argv[1],T,R);*/
+
+ f = (double *)nfft_malloc(N*N*(sizeof(double)));
+ Rf = (double *)nfft_malloc(T*R*(sizeof(double)));
+
+ /** load data */
+ fp=fopen("input_data.bin","rb");
+ if (fp==NULL)
+ return(-1);
+ fread(f,sizeof(double),N*N,fp);
+ fclose(fp);
+
+ /** Radon transform */
+ Radon_trafo(gridfcn,T,R,f,N,Rf);
+
+ /** write result */
+ fp=fopen("sinogram_data.bin","wb+");
+ if (fp==NULL)
+ return(-1);
+ fwrite(Rf,sizeof(double),T*R,fp);
+ fclose(fp);
+
+ /** free the variables */
+ nfft_free(f);
+ nfft_free(Rf);
+
+ return EXIT_SUCCESS;
+}
diff --git a/applications/radon/radon.m b/applications/radon/radon.m
new file mode 100644
index 0000000..8c758f3
--- /dev/null
+++ b/applications/radon/radon.m
@@ -0,0 +1,77 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: radon.m 3776 2012-06-03 13:29:25Z keiner $
+%file: radon.m
+%
+% Simple test program for NFFT-based discrete
+% Radon transform and its inverse.
+%
+% See radon.c, inverse_radon.c and refman.pdf for details.
+%
+%author: Markus Fenn
+%date: February 2006
+
+N=128;
+f=phantom(N);
+%grid='polar'; T=2.5*N; R=1.5*N; it=5;
+grid='linogram'; T=2*N; R=2*N; it=5;
+
+%plot input image
+figure(1);
+imagesc(f);
+axis image
+title('phantom');
+
+%write input to file
+fp = fopen('input_data.bin','wb+');
+fwrite(fp,f','double');
+fclose(fp);
+
+%compute Radon transform by C-program
+system(sprintf('./radon %s %d %d %d',grid,N,T,R));
+
+%read result from file
+fp = fopen('sinogram_data.bin','rb+');
+Rf = fread(fp,[R,T],'double');
+fclose(fp);
+
+%plot sinogram
+figure(2);
+imagesc(Rf);
+axis image
+title('sinogram');
+xlabel('angle');
+ylabel('offset');
+
+%compute inverse Radon transform by C-program
+system(sprintf('./inverse_radon %s %d %d %d %d',grid,N,T,R,it));
+
+%read result from file
+fp = fopen('output_data.bin','rb+');
+iRf = fread(fp,[N,N],'double')';
+fclose(fp);
+
+%plot reconstructed image
+figure(3);
+imagesc(iRf);
+axis image
+title('reconstructed image');
+
+%compute error
+disp(sprintf('max(abs(f(:)-iRf(:))) = %e',max(abs(f(:)-iRf(:)))))
+
+%end: radon.m
diff --git a/applications/radon/ridgelet.m b/applications/radon/ridgelet.m
new file mode 100644
index 0000000..fb615d0
--- /dev/null
+++ b/applications/radon/ridgelet.m
@@ -0,0 +1,111 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: ridgelet.m 3776 2012-06-03 13:29:25Z keiner $
+%file: ridgelet.m
+%
+% Simple test program for denoising an image
+% by hard thresholding the ridgelet coefficients.
+% It uses the NFFT-based discrete Radon transform
+% and translationinvariant discrete Wavelet transform.
+% Requires Matlab-Toolbox WaveLab802.
+%
+%references: D. Donoho et al.,
+% WaveLab802 - A collection of Matlab functions.
+% http://www-stat.stanford.edu/~wavelab/, 1999.
+%
+%author: Markus Fenn
+%date: April 2006
+
+N=128;
+grid='linogram'; T=2*N; R=2*N; it=5; %grid and parameters for Radon transform
+SNR=1; %noise level
+qmf=MakeONFilter('Battle',3); %filter for translation invariant DWT
+threshold=17; %threshhold for denoising
+
+%original input image
+f=ones(N,N);
+for j=1:N
+ for k=j:(N-j)
+ f(j,k)=0.0;
+ end
+end
+f((5*N/8):(7*N/8),(N/4):(3*N/4))=0.0;
+
+%plot original image
+figure(1);
+colormap(gray);
+imagesc(f);
+axis image
+title('original image');
+
+%add gaussian white noise of given SNR
+noise=randn(size(f));
+noise_factor = norm(f - mean(f(:)),'fro')/10^(SNR/20);
+f2 = f + noise_factor * noise/norm(noise,'fro');
+
+%write noisy image to file
+fp = fopen('input_data.bin','wb+');
+fwrite(fp,f2','double');
+fclose(fp);
+
+%plot noisy image
+figure(2);
+colormap(gray);
+imagesc(f2);
+axis image
+title(sprintf('noisy image (SNR=%g)',SNR));
+
+%compute Radon transform by C-program
+system(sprintf('./radon %s %d %d %d %d',grid,N,T,R));
+
+%read result from file
+fp = fopen('sinogram_data.bin','rb+');
+Rf2 = fread(fp,[R,T],'double');
+fclose(fp);
+
+%compute translation invariant DWT for every direction
+Rf2d=zeros(size(Rf2));
+for k=1:T
+ TItable = FWT_TI(Rf2(:,k)', 4, qmf);
+ [nrow,ncol] = size(TItable);
+ for j = 2:ncol
+ TItable(:,j) = TItable(:,j) .* (abs(TItable(:,j)) > threshold);
+ end
+ temp = IWT_TI(TItable,qmf);
+ Rf2d(:,k)=temp';
+end
+
+%write result to file
+fp = fopen('sinogram_data.bin','wb+');
+fwrite(fp,Rf2d,'double');
+fclose(fp);
+
+%compute inverse Radon transform by C-program
+system(sprintf('./inverse_radon %s %d %d %d %d',grid,N,T,R,it));
+
+%read result
+fp = fopen('output_data.bin','rb+');
+iRf2d = fread(fp,[N,N],'double')';
+fclose(fp);
+
+figure(3);
+imagesc(iRf2d);
+colormap(gray);
+axis image
+title(sprintf('reconstructed image (SNR=%g)',20*log10( norm(f - mean(f(:)),'fro') / norm(f-iRf2d,'fro') )));
+
+%end: ridgelet.m
diff --git a/bootstrap.sh b/bootstrap.sh
new file mode 100755
index 0000000..7a3789a
--- /dev/null
+++ b/bootstrap.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+#
+# $Id$
+#
+# Copyright (c) 2003, 2006 Matteo Frigo
+# Copyright (c) 2003, 2006 Massachusetts Institute of Technology
+# Copyright (c) 2007 Jens Keiner
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+################################################################################
+# NOTE: If you just want to build NFFT3, do not use this file. Just follow the
+# installation instructions as described in the tutorial found under
+# doc/tutorial.
+#
+# This file is based on the bootstrap.sh script from FFTW 3.1.2 by
+# M. Frigo and S. G. Johnson
+################################################################################
+
+# alias to allow for systems having glibtoolize
+alias libtoolize=$(type -p glibtoolize libtoolize | head -1)
+
+touch ChangeLog
+
+echo "PLEASE IGNORE WARNINGS AND ERRORS"
+
+# paranoia: sometimes autoconf doesn't get things right the first time
+rm -rf autom4te.cache
+libtoolize
+autoreconf --verbose --install --force
+autoreconf --verbose --install --force
+autoreconf --verbose --install --force
+
+rm -f config.cache
diff --git a/config/compile b/config/compile
new file mode 100755
index 0000000..7b4a9a7
--- /dev/null
+++ b/config/compile
@@ -0,0 +1,342 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2012-03-05.13; # UTC
+
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey at cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake at gnu.org> or send patches to
+# <automake-patches at gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" "" $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+ file=$1
+ case $file in
+ / | /[!/]*) # absolute file, and not a UNC file
+ if test -z "$file_conv"; then
+ # lazily determine how to convert abs files
+ case `uname -s` in
+ MINGW*)
+ file_conv=mingw
+ ;;
+ CYGWIN*)
+ file_conv=cygwin
+ ;;
+ *)
+ file_conv=wine
+ ;;
+ esac
+ fi
+ case $file_conv/,$2, in
+ *,$file_conv,*)
+ ;;
+ mingw/*)
+ file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+ ;;
+ cygwin/*)
+ file=`cygpath -m "$file" || echo "$file"`
+ ;;
+ wine/*)
+ file=`winepath -w "$file" || echo "$file"`
+ ;;
+ esac
+ ;;
+ esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+ func_file_conv "$1"
+ if test -z "$lib_path"; then
+ lib_path=$file
+ else
+ lib_path="$lib_path;$file"
+ fi
+ linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+ lib=$1
+ found=no
+ save_IFS=$IFS
+ IFS=';'
+ for dir in $lib_path $LIB
+ do
+ IFS=$save_IFS
+ if $shared && test -f "$dir/$lib.dll.lib"; then
+ found=yes
+ lib=$dir/$lib.dll.lib
+ break
+ fi
+ if test -f "$dir/$lib.lib"; then
+ found=yes
+ lib=$dir/$lib.lib
+ break
+ fi
+ done
+ IFS=$save_IFS
+
+ if test "$found" != yes; then
+ lib=$lib.lib
+ fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+ # Assume a capable shell
+ lib_path=
+ shared=:
+ linker_opts=
+ for arg
+ do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ eat=1
+ case $2 in
+ *.o | *.[oO][bB][jJ])
+ func_file_conv "$2"
+ set x "$@" -Fo"$file"
+ shift
+ ;;
+ *)
+ func_file_conv "$2"
+ set x "$@" -Fe"$file"
+ shift
+ ;;
+ esac
+ ;;
+ -I)
+ eat=1
+ func_file_conv "$2" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -I*)
+ func_file_conv "${1#-I}" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -l)
+ eat=1
+ func_cl_dashl "$2"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -l*)
+ func_cl_dashl "${1#-l}"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -L)
+ eat=1
+ func_cl_dashL "$2"
+ ;;
+ -L*)
+ func_cl_dashL "${1#-L}"
+ ;;
+ -static)
+ shared=false
+ ;;
+ -Wl,*)
+ arg=${1#-Wl,}
+ save_ifs="$IFS"; IFS=','
+ for flag in $arg; do
+ IFS="$save_ifs"
+ linker_opts="$linker_opts $flag"
+ done
+ IFS="$save_ifs"
+ ;;
+ -Xlinker)
+ eat=1
+ linker_opts="$linker_opts $2"
+ ;;
+ -*)
+ set x "$@" "$1"
+ shift
+ ;;
+ *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+ func_file_conv "$1"
+ set x "$@" -Tp"$file"
+ shift
+ ;;
+ *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+ func_file_conv "$1" mingw
+ set x "$@" "$file"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+ done
+ if test -n "$linker_opts"; then
+ linker_opts="-link$linker_opts"
+ fi
+ exec "$@" $linker_opts
+ exit 1
+}
+
+eat=
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "compile $scriptversion"
+ exit $?
+ ;;
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+ func_cl_wrapper "$@" # Doesn't return...
+ ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ # So we strip '-o arg' only if arg is an object.
+ eat=1
+ case $2 in
+ *.o | *.obj)
+ ofile=$2
+ ;;
+ *)
+ set x "$@" -o "$2"
+ shift
+ ;;
+ esac
+ ;;
+ *.c)
+ cfile=$1
+ set x "$@" "$1"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+ # If no '-o' option was seen then we might have been invoked from a
+ # pattern rule where we don't need one. That is ok -- this is a
+ # normal compilation that the losing compiler can handle. If no
+ # '.c' file was seen then we are probably linking. That is also
+ # ok.
+ exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file. Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+ if mkdir "$lockdir" >/dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+ test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+ test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config/config.guess b/config/config.guess
new file mode 100755
index 0000000..de8e6dd
--- /dev/null
+++ b/config/config.guess
@@ -0,0 +1,1540 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+# 2011, 2012 Free Software Foundation, Inc.
+
+timestamp='2012-02-10'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner. Please send patches (context
+# diff format) to <config-patches at gnu.org> and include a ChangeLog
+# entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi at noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+case "${UNAME_MACHINE}" in
+ i?86)
+ test -z "$VENDOR" && VENDOR=pc
+ ;;
+ *)
+ test -z "$VENDOR" && VENDOR=unknown
+ ;;
+esac
+test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-${VENDOR}-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-solidbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerpc-${VENDOR}-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-mirbsd${UNAME_RELEASE}
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ exitcode=$?
+ trap '' 0
+ exit $exitcode ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-${VENDOR}-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm:riscos:*:*|arm:RISCOS:*:*)
+ echo arm-${VENDOR}-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ s390x:SunOS:*:*)
+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux${UNAME_RELEASE}
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ eval $set_cc_for_build
+ SUN_ARCH="i386"
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH="x86_64"
+ fi
+ fi
+ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-${VENDOR}-mint${UNAME_RELEASE}
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+ *:AIX:*:[4567])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-${VENDOR}-osf1mk
+ else
+ echo ${UNAME_MACHINE}-${VENDOR}-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-${VENDOR}-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case ${UNAME_PROCESSOR} in
+ amd64)
+ echo x86_64-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_PROCESSOR}-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:MSYS*:*)
+ echo ${UNAME_MACHINE}-pc-msys
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ *:Interix*:*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ authenticamd | genuineintel | EM64T)
+ echo x86_64-${VENDOR}-interix${UNAME_RELEASE}
+ exit ;;
+ IA64)
+ echo ia64-${VENDOR}-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit ;;
+ 8664:Windows_NT:*)
+ echo x86_64-pc-mks
+ exit ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-${VENDOR}-cygwin
+ exit ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-${VENDOR}-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-${VENDOR}-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-${VENDOR}-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-${VENDOR}-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ aarch64:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ aarch64_be:Linux:*:*)
+ UNAME_MACHINE=aarch64_be
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu${LIBC}
+ exit ;;
+ arm*:Linux:*:*)
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ else
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnueabi
+ else
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnueabihf
+ fi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ cris:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-gnu
+ exit ;;
+ crisv32:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-gnu
+ exit ;;
+ frv:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ hexagon:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ i*86:Linux:*:*)
+ LIBC=gnu
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=${UNAME_MACHINE}el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=${UNAME_MACHINE}
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-gnu"; exit; }
+ ;;
+ or32:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-${VENDOR}-linux-gnu
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-${VENDOR}-linux-gnu
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-${VENDOR}-linux-gnu ;;
+ PA8*) echo hppa2.0-${VENDOR}-linux-gnu ;;
+ *) echo hppa-${VENDOR}-linux-gnu ;;
+ esac
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-${VENDOR}-linux-gnu
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-${VENDOR}-linux-gnu
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ tile*:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
+ x86_64:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-${VENDOR}-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ echo i386-${VENODR}-lynxos${UNAME_RELEASE}
+ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-${VENDOR}-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configury will decide that
+ # this is a cross-build.
+ echo i586-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-${VENODR}-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-${VENDOR}-lynxos${UNAME_RELEASE}
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-${VENDOR}-lynxos${UNAME_RELEASE}
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-${VENDOR}-lynxos${UNAME_RELEASE}
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ echo powerpc-${VENDOR}-lynxos${UNAME_RELEASE}
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel at ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes at openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf at swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green at stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green at stratus.com.
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-${VENDOR}-sysv${UNAME_RELEASE}
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ case $UNAME_PROCESSOR in
+ i386)
+ eval $set_cc_for_build
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ UNAME_PROCESSOR="x86_64"
+ fi
+ fi ;;
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NEO-?:NONSTOP_KERNEL:*:*)
+ echo neo-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSE-?:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-${VENDOR}-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-${VENDOR}-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-${VENDOR}-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-${VENDOR}-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-${VENDOR}-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
+ exit ;;
+ x86_64:VMkernel:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-esx
+ exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches at gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config/config.sub b/config/config.sub
new file mode 100755
index 0000000..59bb593
--- /dev/null
+++ b/config/config.sub
@@ -0,0 +1,1779 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+# 2011, 2012 Free Software Foundation, Inc.
+
+timestamp='2012-04-18'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches at gnu.org>. Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | \
+ kopensolaris*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ android-linux)
+ os=-linux-android
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray | -microblaze)
+ os=
+ basic_machine=$1
+ ;;
+ -bluegene*)
+ os=-cnk
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*178)
+ os=-lynxos178
+ ;;
+ -lynx*5)
+ os=-lynxos5
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | aarch64 | aarch64_be \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | be32 | be64 \
+ | bfin \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | epiphany \
+ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | le32 | le64 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nios | nios2 \
+ | ns16k | ns32k \
+ | open8 \
+ | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle \
+ | pyramid \
+ | rl78 | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu \
+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ | we32k \
+ | x86 | xc16x | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ strongarm | thumb | xscale)
+ basic_machine=arm-unknown
+ ;;
+ xgate)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ xscaleeb)
+ basic_machine=armeb-unknown
+ ;;
+
+ xscaleel)
+ basic_machine=armel-unknown
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | aarch64-* | aarch64_be-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | be32-* | be64-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | hexagon-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | le32-* | le64-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64octeon-* | mips64octeonel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
+ | nios-* | nios2-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | open8-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+ | pyramid-* \
+ | rl78-* | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | tahoe-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile*-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+ | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-* | z80-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ bluegene*)
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
+ c54x-*)
+ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c55x-*)
+ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c6x-*)
+ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16 | cr16-*)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ microblaze)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ msys)
+ basic_machine=i386-pc
+ os=-msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ os=-nacl
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ neo-tandem)
+ basic_machine=neo-tandem
+ ;;
+ nse-tandem)
+ basic_machine=nse-tandem
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc | ppcbe) basic_machine=powerpc-unknown
+ ;;
+ ppc-* | ppcbe-*)
+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ strongarm-* | thumb-*)
+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tile*)
+ basic_machine=$basic_machine-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ xscale-* | xscalee[bl]-*)
+ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ z80-*-coff)
+ basic_machine=z80-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+ ;;
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* | -aros* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -kaos*)
+ os=-kaos
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
+ -nacl*)
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ tic54x-*)
+ os=-coff
+ ;;
+ tic55x-*)
+ os=-coff
+ ;;
+ tic6x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -cnk*|-aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config/depcomp b/config/depcomp
new file mode 100755
index 0000000..debb6ff
--- /dev/null
+++ b/config/depcomp
@@ -0,0 +1,707 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2012-03-27.16; # UTC
+
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+ depmode Dependency tracking mode.
+ source Source file read by 'PROGRAMS ARGS'.
+ object Object file output by 'PROGRAMS ARGS'.
+ DEPDIR directory where to store dependencies.
+ depfile Dependency file to output.
+ tmpdepfile Temporary file to use when outputting dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+# A tabulation character.
+tab=' '
+# A newline character.
+nl='
+'
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+ # This is just like msvisualcpp but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+ # This is just like msvc7 but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+ # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
+ gccflag=-qmakedep=gcc,-MF
+ depmode=gcc
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am. Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+ for arg
+ do
+ case $arg in
+ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+ *) set fnord "$@" "$arg" ;;
+ esac
+ shift # fnord
+ shift # $arg
+ done
+ "$@"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the "deleted header file" problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+ tr ' ' "$nl" < "$tmpdepfile" |
+## Some versions of gcc put a space before the ':'. On the theory
+## that the space means something, we add a space to the output as
+## well. hp depmode also adds that space, but also prefixes the VPATH
+## to the object. Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like '#:fec' to the end of the
+ # dependency line.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+ tr "$nl" ' ' >> "$depfile"
+ echo >> "$depfile"
+
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+xlc)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. In older versions, this file always lives in the
+ # current directory. Also, the AIX compiler puts '$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$base.u
+ tmpdepfile3=$dir.libs/$base.u
+ "$@" -Wc,-M
+ else
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$dir$base.u
+ tmpdepfile3=$dir$base.u
+ "$@" -M
+ fi
+ stat=$?
+
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ # Each line is of the form 'foo.o: dependent.h'.
+ # Do two passes, one to just change these to
+ # '$object: dependent.h' and one to simply 'dependent.h:'.
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+icc)
+ # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
+ # However on
+ # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+ # ICC 7.0 will fill foo.d with something like
+ # foo.o: sub/foo.c
+ # foo.o: sub/foo.h
+ # which is wrong. We want
+ # sub/foo.o: sub/foo.c
+ # sub/foo.o: sub/foo.h
+ # sub/foo.c:
+ # sub/foo.h:
+ # ICC 7.1 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using '\':
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+ # tcc 0.9.26 (FIXME still under development at the moment of writing)
+ # will emit a similar output, but also prepend the continuation lines
+ # with horizontal tabulation characters.
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each line is of the form 'foo.o: dependent.h',
+ # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
+ # Do two passes, one to just change these to
+ # '$object: dependent.h' and one to simply 'dependent.h:'.
+ sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \
+ < "$tmpdepfile" > "$depfile"
+ sed '
+ s/[ '"$tab"'][ '"$tab"']*/ /g
+ s/^ *//
+ s/ *\\*$//
+ s/^[^:]*: *//
+ /^$/d
+ /:$/d
+ s/$/ :/
+ ' < "$tmpdepfile" >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp2)
+ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+ # compilers, which have integrated preprocessors. The correct option
+ # to use with these is +Maked; it writes dependencies to a file named
+ # 'foo.d', which lands next to the object file, wherever that
+ # happens to be.
+ # Much of this is similar to the tru64 case; see comments there.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir.libs/$base.d
+ "$@" -Wc,+Maked
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ "$@" +Maked
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+ # Add 'dependent.h:' lines.
+ sed -ne '2,${
+ s/^ *//
+ s/ \\*$//
+ s/$/:/
+ p
+ }' "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile" "$tmpdepfile2"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in 'foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+ if test "$libtool" = yes; then
+ # With Tru64 cc, shared objects can also be used to make a
+ # static library. This mechanism is used in libtool 1.4 series to
+ # handle both shared and static libraries in a single compilation.
+ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+ #
+ # With libtool 1.5 this exception was removed, and libtool now
+ # generates 2 separate objects for the 2 libraries. These two
+ # compilations output dependencies in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+ # automatically cleaned when .libs/ is deleted, while ignoring
+ # the former would cause a distcleancheck panic.
+ tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
+ tmpdepfile2=$dir$base.o.d # libtool 1.5
+ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
+ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.o.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ tmpdepfile4=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+msvc7)
+ if test "$libtool" = yes; then
+ showIncludes=-Wc,-showIncludes
+ else
+ showIncludes=-showIncludes
+ fi
+ "$@" $showIncludes > "$tmpdepfile"
+ stat=$?
+ grep -v '^Note: including file: ' "$tmpdepfile"
+ if test "$stat" = 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The first sed program below extracts the file names and escapes
+ # backslashes for cygpath. The second sed program outputs the file
+ # name when reading, but also accumulates all include files in the
+ # hold buffer in order to output them again at the end. This only
+ # works with sed implementations that can handle large buffers.
+ sed < "$tmpdepfile" -n '
+/^Note: including file: *\(.*\)/ {
+ s//\1/
+ s/\\/\\\\/g
+ p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+ s/.*/'"$tab"'/
+ G
+ p
+}' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvc7msys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ # Require at least two characters before searching for ':'
+ # in the target name. This is to cope with DOS-style filenames:
+ # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
+ "$@" $dashmflag |
+ sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ tr ' ' "$nl" < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no eat=no
+ for arg
+ do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ if test $eat = yes; then
+ eat=no
+ continue
+ fi
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
+ -arch)
+ eat=yes ;;
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix=`echo "$object" | sed 's/^.*\././'`
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ # makedepend may prepend the VPATH from the source file name to the object.
+ # No need to regex-escape $object, excess matching of '.' is harmless.
+ sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+ sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E |
+ sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+ sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E 2>/dev/null |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+ echo "$tab" >> "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvcmsys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config/install-sh b/config/install-sh
new file mode 100755
index 0000000..377bb86
--- /dev/null
+++ b/config/install-sh
@@ -0,0 +1,527 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2011-11-20.07; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" "" $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+ doit_exec=exec
+else
+ doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+ test "$posix_glob" != "?" || {
+ if (set -f) 2>/dev/null; then
+ posix_glob=
+ else
+ posix_glob=:
+ fi
+ }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve the last data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -s) stripcmd=$stripprog;;
+
+ -t) dst_arg=$2
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
+
+ -T) no_target_directory=true;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call 'install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ do_exit='(exit $ret); exit $ret'
+ trap "ret=129; $do_exit" 1
+ trap "ret=130; $do_exit" 2
+ trap "ret=141; $do_exit" 13
+ trap "ret=143; $do_exit" 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names problematic for 'test' and other utilities.
+ case $src in
+ -* | [=\(\)!]) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+ dst=$dst_arg
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ eval "$initialize_posix_glob"
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob set -f
+ set fnord $dstdir
+ shift
+ $posix_glob set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test X"$d" = X && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+ eval "$initialize_posix_glob" &&
+ $posix_glob set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ $posix_glob set +f &&
+
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config/ltmain.sh b/config/ltmain.sh
new file mode 100644
index 0000000..63ae69d
--- /dev/null
+++ b/config/ltmain.sh
@@ -0,0 +1,9655 @@
+
+# libtool (GNU libtool) 2.4.2
+# Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
+# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+# --config show all configuration variables
+# --debug enable verbose shell tracing
+# -n, --dry-run display commands without modifying any files
+# --features display basic configuration information and exit
+# --mode=MODE use operation mode MODE
+# --preserve-dup-deps don't remove duplicate dependency libraries
+# --quiet, --silent don't print informational messages
+# --no-quiet, --no-silent
+# print informational messages (default)
+# --no-warn don't display warning messages
+# --tag=TAG use configuration variables from tag TAG
+# -v, --verbose print more informational messages than default
+# --no-verbose don't print the extra informational messages
+# --version print version information
+# -h, --help, --help-all print short, long, or detailed help message
+#
+# MODE must be one of the following:
+#
+# clean remove files from the build directory
+# compile compile a source file into a libtool object
+# execute automatically set library path, then run a program
+# finish complete the installation of libtool libraries
+# install install libraries or executables
+# link create a library or an executable
+# uninstall remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE. When passed as first option,
+# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+# host-triplet: $host
+# shell: $SHELL
+# compiler: $LTCC
+# compiler flags: $LTCFLAGS
+# linker: $LD (gnu? $with_gnu_ld)
+# $progname: (GNU libtool) 2.4.2
+# automake: $automake_version
+# autoconf: $autoconf_version
+#
+# Report bugs to <bug-libtool at gnu.org>.
+# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+# General help using GNU software: <http://www.gnu.org/gethelp/>.
+
+PROGRAM=libtool
+PACKAGE=libtool
+VERSION=2.4.2
+TIMESTAMP=""
+package_revision=1.3337
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# NLS nuisances: We save the old values to restore during execute mode.
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+ eval "if test \"\${$lt_var+set}\" = set; then
+ save_$lt_var=\$$lt_var
+ $lt_var=C
+ export $lt_var
+ lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+ lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+ fi"
+done
+LC_ALL=C
+LANGUAGE=C
+export LANGUAGE LC_ALL
+
+$lt_unset CDPATH
+
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+
+
+: ${CP="cp -f"}
+test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS=" $lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+} # func_dirname may be replaced by extended shell implementation
+
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+} # func_basename may be replaced by extended shell implementation
+
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+ func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
+} # func_dirname_and_basename may be replaced by extended shell implementation
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+ esac
+} # func_stripname may be replaced by extended shell implementation
+
+
+# These SED scripts presuppose an absolute path with a trailing slash.
+pathcar='s,^/\([^/]*\).*$,\1,'
+pathcdr='s,^/[^/]*,,'
+removedotparts=':dotsl
+ s@/\./@/@g
+ t dotsl
+ s,/\.$,/,'
+collapseslashes='s@/\{1,\}@/@g'
+finalslash='s,/*$,/,'
+
+# func_normal_abspath PATH
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+# value returned in "$func_normal_abspath_result"
+func_normal_abspath ()
+{
+ # Start from root dir and reassemble the path.
+ func_normal_abspath_result=
+ func_normal_abspath_tpath=$1
+ func_normal_abspath_altnamespace=
+ case $func_normal_abspath_tpath in
+ "")
+ # Empty path, that just means $cwd.
+ func_stripname '' '/' "`pwd`"
+ func_normal_abspath_result=$func_stripname_result
+ return
+ ;;
+ # The next three entries are used to spot a run of precisely
+ # two leading slashes without using negated character classes;
+ # we take advantage of case's first-match behaviour.
+ ///*)
+ # Unusual form of absolute path, do nothing.
+ ;;
+ //*)
+ # Not necessarily an ordinary path; POSIX reserves leading '//'
+ # and for example Cygwin uses it to access remote file shares
+ # over CIFS/SMB, so we conserve a leading double slash if found.
+ func_normal_abspath_altnamespace=/
+ ;;
+ /*)
+ # Absolute path, do nothing.
+ ;;
+ *)
+ # Relative path, prepend $cwd.
+ func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+ ;;
+ esac
+ # Cancel out all the simple stuff to save iterations. We also want
+ # the path to end with a slash for ease of parsing, so make sure
+ # there is one (and only one) here.
+ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
+ while :; do
+ # Processed it all yet?
+ if test "$func_normal_abspath_tpath" = / ; then
+ # If we ascended to the root using ".." the result may be empty now.
+ if test -z "$func_normal_abspath_result" ; then
+ func_normal_abspath_result=/
+ fi
+ break
+ fi
+ func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$pathcar"`
+ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$pathcdr"`
+ # Figure out what to do with it
+ case $func_normal_abspath_tcomponent in
+ "")
+ # Trailing empty path component, ignore it.
+ ;;
+ ..)
+ # Parent dir; strip last assembled component from result.
+ func_dirname "$func_normal_abspath_result"
+ func_normal_abspath_result=$func_dirname_result
+ ;;
+ *)
+ # Actual path component, append it.
+ func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
+ ;;
+ esac
+ done
+ # Restore leading double-slash if one was found on entry.
+ func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+# func_relative_path SRCDIR DSTDIR
+# generates a relative path from SRCDIR to DSTDIR, with a trailing
+# slash if non-empty, suitable for immediately appending a filename
+# without needing to append a separator.
+# value returned in "$func_relative_path_result"
+func_relative_path ()
+{
+ func_relative_path_result=
+ func_normal_abspath "$1"
+ func_relative_path_tlibdir=$func_normal_abspath_result
+ func_normal_abspath "$2"
+ func_relative_path_tbindir=$func_normal_abspath_result
+
+ # Ascend the tree starting from libdir
+ while :; do
+ # check if we have found a prefix of bindir
+ case $func_relative_path_tbindir in
+ $func_relative_path_tlibdir)
+ # found an exact match
+ func_relative_path_tcancelled=
+ break
+ ;;
+ $func_relative_path_tlibdir*)
+ # found a matching prefix
+ func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+ func_relative_path_tcancelled=$func_stripname_result
+ if test -z "$func_relative_path_result"; then
+ func_relative_path_result=.
+ fi
+ break
+ ;;
+ *)
+ func_dirname $func_relative_path_tlibdir
+ func_relative_path_tlibdir=${func_dirname_result}
+ if test "x$func_relative_path_tlibdir" = x ; then
+ # Have to descend all the way to the root!
+ func_relative_path_result=../$func_relative_path_result
+ func_relative_path_tcancelled=$func_relative_path_tbindir
+ break
+ fi
+ func_relative_path_result=../$func_relative_path_result
+ ;;
+ esac
+ done
+
+ # Now calculate path; take care to avoid doubling-up slashes.
+ func_stripname '' '/' "$func_relative_path_result"
+ func_relative_path_result=$func_stripname_result
+ func_stripname '/' '/' "$func_relative_path_tcancelled"
+ if test "x$func_stripname_result" != x ; then
+ func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
+ fi
+
+ # Normalisation. If bindir is libdir, return empty string,
+ # else relative path ending with a slash; either way, target
+ # file name can be directly appended.
+ if test ! -z "$func_relative_path_result"; then
+ func_stripname './' '' "$func_relative_path_result/"
+ func_relative_path_result=$func_stripname_result
+ fi
+}
+
+# The name of this program:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+ [\\/]*|[A-Za-z]:\\*) ;;
+ *[\\/]*)
+ progdir=$func_dirname_result
+ progdir=`cd "$progdir" && pwd`
+ progpath="$progdir/$progname"
+ ;;
+ *)
+ save_IFS="$IFS"
+ IFS=${PATH_SEPARATOR-:}
+ for progdir in $PATH; do
+ IFS="$save_IFS"
+ test -x "$progdir/$progname" && break
+ done
+ IFS="$save_IFS"
+ test -n "$progdir" || progdir=`pwd`
+ progpath="$progdir/$progname"
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
+
+# Sed substitution that converts a w32 file name or path
+# which contains forward slashes, into one that contains
+# (escaped) backslashes. A very naive implementation.
+lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same. If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'. `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+ s/$bs4/&\\
+/g
+ s/^$bs2$dollar/$bs&/
+ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+ s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+ $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+ $opt_verbose && func_echo ${1+"$@"}
+
+ # A bug in bash halts the script if the last line of a function
+ # fails when set -e is in force, so we need another command to
+ # work around that:
+ :
+}
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+ $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+ $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
+
+ # bash bug again:
+ :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+ func_error ${1+"$@"}
+ exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+ func_error ${1+"$@"}
+ func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information." ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+ $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+ my_directory_path="$1"
+ my_dir_list=
+
+ if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+ # Protect directory names starting with `-'
+ case $my_directory_path in
+ -*) my_directory_path="./$my_directory_path" ;;
+ esac
+
+ # While some portion of DIR does not yet exist...
+ while test ! -d "$my_directory_path"; do
+ # ...make a list in topmost first order. Use a colon delimited
+ # list incase some portion of path contains whitespace.
+ my_dir_list="$my_directory_path:$my_dir_list"
+
+ # If the last portion added has no slash in it, the list is done
+ case $my_directory_path in */*) ;; *) break ;; esac
+
+ # ...otherwise throw away the child directory and loop
+ my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
+ done
+ my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
+
+ save_mkdir_p_IFS="$IFS"; IFS=':'
+ for my_dir in $my_dir_list; do
+ IFS="$save_mkdir_p_IFS"
+ # mkdir can fail with a `File exist' error if two processes
+ # try to create one of the directories concurrently. Don't
+ # stop in that case!
+ $MKDIR "$my_dir" 2>/dev/null || :
+ done
+ IFS="$save_mkdir_p_IFS"
+
+ # Bail out if we (or some other process) failed to create a directory.
+ test -d "$my_directory_path" || \
+ func_fatal_error "Failed to create \`$1'"
+ fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible. If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+ my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+ if test "$opt_dry_run" = ":"; then
+ # Return a directory name, but don't create it in dry-run mode
+ my_tmpdir="${my_template}-$$"
+ else
+
+ # If mktemp works, use that first and foremost
+ my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+ if test ! -d "$my_tmpdir"; then
+ # Failing that, at least try and use $RANDOM to avoid a race
+ my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+ save_mktempdir_umask=`umask`
+ umask 0077
+ $MKDIR "$my_tmpdir"
+ umask $save_mktempdir_umask
+ fi
+
+ # If we're not in dry-run mode, bomb out on failure
+ test -d "$my_tmpdir" || \
+ func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+ fi
+
+ $ECHO "$my_tmpdir"
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+ case $1 in
+ *[\\\`\"\$]*)
+ func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
+ *)
+ func_quote_for_eval_unquoted_result="$1" ;;
+ esac
+
+ case $func_quote_for_eval_unquoted_result in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting, command substitution and and variable
+ # expansion for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+ ;;
+ *)
+ func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+ esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+ case $1 in
+ *[\\\`\"]*)
+ my_arg=`$ECHO "$1" | $SED \
+ -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+ *)
+ my_arg="$1" ;;
+ esac
+
+ case $my_arg in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting and command substitution for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ my_arg="\"$my_arg\""
+ ;;
+ esac
+
+ func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+ my_cmd="$1"
+ my_fail_exp="${2-:}"
+
+ ${opt_silent-false} || {
+ func_quote_for_expand "$my_cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+
+ if ${opt_dry_run-false}; then :; else
+ eval "$my_cmd"
+ my_status=$?
+ if test "$my_status" -eq 0; then :; else
+ eval "(exit $my_status); $my_fail_exp"
+ fi
+ fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it. Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+ my_cmd="$1"
+ my_fail_exp="${2-:}"
+
+ ${opt_silent-false} || {
+ func_quote_for_expand "$my_cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+
+ if ${opt_dry_run-false}; then :; else
+ eval "$lt_user_locale
+ $my_cmd"
+ my_status=$?
+ eval "$lt_safe_locale"
+ if test "$my_status" -eq 0; then :; else
+ eval "(exit $my_status); $my_fail_exp"
+ fi
+ fi
+}
+
+# func_tr_sh
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result. All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+ case $1 in
+ [0-9]* | *[!a-zA-Z0-9_]*)
+ func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
+ ;;
+ * )
+ func_tr_sh_result=$1
+ ;;
+ esac
+}
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+ $opt_debug
+
+ $SED -n '/(C)/!b go
+ :more
+ /\./!{
+ N
+ s/\n# / /
+ b more
+ }
+ :go
+ /^# '$PROGRAM' (GNU /,/# warranty; / {
+ s/^# //
+ s/^# *$//
+ s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+ p
+ }' < "$progpath"
+ exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+ $opt_debug
+
+ $SED -n '/^# Usage:/,/^# *.*--help/ {
+ s/^# //
+ s/^# *$//
+ s/\$progname/'$progname'/
+ p
+ }' < "$progpath"
+ echo
+ $ECHO "run \`$progname --help | more' for full usage"
+ exit $?
+}
+
+# func_help [NOEXIT]
+# Echo long help message to standard output and exit,
+# unless 'noexit' is passed as argument.
+func_help ()
+{
+ $opt_debug
+
+ $SED -n '/^# Usage:/,/# Report bugs to/ {
+ :print
+ s/^# //
+ s/^# *$//
+ s*\$progname*'$progname'*
+ s*\$host*'"$host"'*
+ s*\$SHELL*'"$SHELL"'*
+ s*\$LTCC*'"$LTCC"'*
+ s*\$LTCFLAGS*'"$LTCFLAGS"'*
+ s*\$LD*'"$LD"'*
+ s/\$with_gnu_ld/'"$with_gnu_ld"'/
+ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
+ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
+ p
+ d
+ }
+ /^# .* home page:/b print
+ /^# General help using/b print
+ ' < "$progpath"
+ ret=$?
+ if test -z "$1"; then
+ exit $ret
+ fi
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+ $opt_debug
+
+ func_error "missing argument for $1."
+ exit_cmd=exit
+}
+
+
+# func_split_short_opt shortopt
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+func_split_short_opt ()
+{
+ my_sed_short_opt='1s/^\(..\).*$/\1/;q'
+ my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
+
+ func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
+ func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
+} # func_split_short_opt may be replaced by extended shell implementation
+
+
+# func_split_long_opt longopt
+# Set func_split_long_opt_name and func_split_long_opt_arg shell
+# variables after splitting LONGOPT at the `=' sign.
+func_split_long_opt ()
+{
+ my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
+ my_sed_long_arg='1s/^--[^=]*=//'
+
+ func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
+ func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
+} # func_split_long_opt may be replaced by extended shell implementation
+
+exit_cmd=:
+
+
+
+
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+nonopt=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "${1}=\$${1}\${2}"
+} # func_append may be replaced by extended shell implementation
+
+# func_append_quoted var value
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+func_append_quoted ()
+{
+ func_quote_for_eval "${2}"
+ eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
+} # func_append_quoted may be replaced by extended shell implementation
+
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=`expr "${@}"`
+} # func_arith may be replaced by extended shell implementation
+
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
+} # func_len may be replaced by extended shell implementation
+
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+} # func_lo2o may be replaced by extended shell implementation
+
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+} # func_xform may be replaced by extended shell implementation
+
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+ func_error ${1+"$@"}
+ func_error "See the $PACKAGE documentation for more information."
+ func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+ re_begincf='^# ### BEGIN LIBTOOL'
+ re_endcf='^# ### END LIBTOOL'
+
+ # Default configuration.
+ $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+ # Now print the configurations for the tags.
+ for tagname in $taglist; do
+ $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+ done
+
+ exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+ echo "host: $host"
+ if test "$build_libtool_libs" = yes; then
+ echo "enable shared libraries"
+ else
+ echo "disable shared libraries"
+ fi
+ if test "$build_old_libs" = yes; then
+ echo "enable static libraries"
+ else
+ echo "disable static libraries"
+ fi
+
+ exit $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+ # Global variable:
+ tagname="$1"
+
+ re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+ re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+ sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+ # Validate tagname.
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ func_fatal_error "invalid tag name: $tagname"
+ ;;
+ esac
+
+ # Don't test for the "default" C tag, as we know it's
+ # there but not specially marked.
+ case $tagname in
+ CC) ;;
+ *)
+ if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+ taglist="$taglist $tagname"
+
+ # Evaluate the configuration. Be careful to quote the path
+ # and the sed script, to avoid splitting on whitespace, but
+ # also don't use non-portable quotes within backquotes within
+ # quotes we have to do it in 2 steps:
+ extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+ eval "$extractedcf"
+ else
+ func_error "ignoring unknown tag $tagname"
+ fi
+ ;;
+ esac
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+ if test "$package_revision" != "$macro_revision"; then
+ if test "$VERSION" != "$macro_version"; then
+ if test -z "$macro_version"; then
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ fi
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+ fi
+
+ exit $EXIT_MISMATCH
+ fi
+}
+
+
+# Shorthand for --mode=foo, only valid as the first argument
+case $1 in
+clean|clea|cle|cl)
+ shift; set dummy --mode clean ${1+"$@"}; shift
+ ;;
+compile|compil|compi|comp|com|co|c)
+ shift; set dummy --mode compile ${1+"$@"}; shift
+ ;;
+execute|execut|execu|exec|exe|ex|e)
+ shift; set dummy --mode execute ${1+"$@"}; shift
+ ;;
+finish|finis|fini|fin|fi|f)
+ shift; set dummy --mode finish ${1+"$@"}; shift
+ ;;
+install|instal|insta|inst|ins|in|i)
+ shift; set dummy --mode install ${1+"$@"}; shift
+ ;;
+link|lin|li|l)
+ shift; set dummy --mode link ${1+"$@"}; shift
+ ;;
+uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+ shift; set dummy --mode uninstall ${1+"$@"}; shift
+ ;;
+esac
+
+
+
+# Option defaults:
+opt_debug=:
+opt_dry_run=false
+opt_config=false
+opt_preserve_dup_deps=false
+opt_features=false
+opt_finish=false
+opt_help=false
+opt_help_all=false
+opt_silent=:
+opt_warning=:
+opt_verbose=:
+opt_silent=false
+opt_verbose=false
+
+
+# Parse options once, thoroughly. This comes as soon as possible in the
+# script to make things like `--version' happen as quickly as we can.
+{
+ # this just eases exit handling
+ while test $# -gt 0; do
+ opt="$1"
+ shift
+ case $opt in
+ --debug|-x) opt_debug='set -x'
+ func_echo "enabling shell trace mode"
+ $opt_debug
+ ;;
+ --dry-run|--dryrun|-n)
+ opt_dry_run=:
+ ;;
+ --config)
+ opt_config=:
+func_config
+ ;;
+ --dlopen|-dlopen)
+ optarg="$1"
+ opt_dlopen="${opt_dlopen+$opt_dlopen
+}$optarg"
+ shift
+ ;;
+ --preserve-dup-deps)
+ opt_preserve_dup_deps=:
+ ;;
+ --features)
+ opt_features=:
+func_features
+ ;;
+ --finish)
+ opt_finish=:
+set dummy --mode finish ${1+"$@"}; shift
+ ;;
+ --help)
+ opt_help=:
+ ;;
+ --help-all)
+ opt_help_all=:
+opt_help=': help-all'
+ ;;
+ --mode)
+ test $# = 0 && func_missing_arg $opt && break
+ optarg="$1"
+ opt_mode="$optarg"
+case $optarg in
+ # Valid mode arguments:
+ clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+ # Catch anything else as an error
+ *) func_error "invalid argument for $opt"
+ exit_cmd=exit
+ break
+ ;;
+esac
+ shift
+ ;;
+ --no-silent|--no-quiet)
+ opt_silent=false
+func_append preserve_args " $opt"
+ ;;
+ --no-warning|--no-warn)
+ opt_warning=false
+func_append preserve_args " $opt"
+ ;;
+ --no-verbose)
+ opt_verbose=false
+func_append preserve_args " $opt"
+ ;;
+ --silent|--quiet)
+ opt_silent=:
+func_append preserve_args " $opt"
+ opt_verbose=false
+ ;;
+ --verbose|-v)
+ opt_verbose=:
+func_append preserve_args " $opt"
+opt_silent=false
+ ;;
+ --tag)
+ test $# = 0 && func_missing_arg $opt && break
+ optarg="$1"
+ opt_tag="$optarg"
+func_append preserve_args " $opt $optarg"
+func_enable_tag "$optarg"
+ shift
+ ;;
+
+ -\?|-h) func_usage ;;
+ --help) func_help ;;
+ --version) func_version ;;
+
+ # Separate optargs to long options:
+ --*=*)
+ func_split_long_opt "$opt"
+ set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
+ shift
+ ;;
+
+ # Separate non-argument short options:
+ -\?*|-h*|-n*|-v*)
+ func_split_short_opt "$opt"
+ set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
+ shift
+ ;;
+
+ --) break ;;
+ -*) func_fatal_help "unrecognized option \`$opt'" ;;
+ *) set dummy "$opt" ${1+"$@"}; shift; break ;;
+ esac
+ done
+
+ # Validate options:
+
+ # save first non-option argument
+ if test "$#" -gt 0; then
+ nonopt="$opt"
+ shift
+ fi
+
+ # preserve --debug
+ test "$opt_debug" = : || func_append preserve_args " --debug"
+
+ case $host in
+ *cygwin* | *mingw* | *pw32* | *cegcc*)
+ # don't eliminate duplications in $postdeps and $predeps
+ opt_duplicate_compiler_generated_deps=:
+ ;;
+ *)
+ opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+ ;;
+ esac
+
+ $opt_help || {
+ # Sanity checks first:
+ func_check_version_match
+
+ if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+ func_fatal_configuration "not configured to build any kind of library"
+ fi
+
+ # Darwin sucks
+ eval std_shrext=\"$shrext_cmds\"
+
+ # Only execute mode is allowed to have -dlopen flags.
+ if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
+ func_error "unrecognized option \`-dlopen'"
+ $ECHO "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Change the help message to a mode-specific one.
+ generic_help="$help"
+ help="Try \`$progname --help --mode=$opt_mode' for more information."
+ }
+
+
+ # Bail if the options were screwed
+ $exit_cmd $EXIT_FAILURE
+}
+
+
+
+
+## ----------- ##
+## Main. ##
+## ----------- ##
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+ test -f "$1" &&
+ $SED -e 4q "$1" 2>/dev/null \
+ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs. To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway. Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+ lalib_p=no
+ if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+ for lalib_p_l in 1 2 3 4
+ do
+ read lalib_p_line
+ case "$lalib_p_line" in
+ \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+ esac
+ done
+ exec 0<&5 5<&-
+ fi
+ test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+ func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+ func_ltwrapper_exec_suffix=
+ case $1 in
+ *.exe) ;;
+ *) func_ltwrapper_exec_suffix=.exe ;;
+ esac
+ $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+ func_dirname_and_basename "$1" "" "."
+ func_stripname '' '.exe' "$func_basename_result"
+ func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+ func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+ $opt_debug
+ save_ifs=$IFS; IFS='~'
+ for cmd in $1; do
+ IFS=$save_ifs
+ eval cmd=\"$cmd\"
+ func_show_eval "$cmd" "${2-:}"
+ done
+ IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)! Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+ $opt_debug
+ case $1 in
+ */* | *\\*) . "$1" ;;
+ *) . "./$1" ;;
+ esac
+}
+
+
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot. Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+ func_resolve_sysroot_result=$1
+ case $func_resolve_sysroot_result in
+ =*)
+ func_stripname '=' '' "$func_resolve_sysroot_result"
+ func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+ ;;
+ esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+ case "$lt_sysroot:$1" in
+ ?*:"$lt_sysroot"*)
+ func_stripname "$lt_sysroot" '' "$1"
+ func_replace_sysroot_result="=$func_stripname_result"
+ ;;
+ *)
+ # Including no sysroot.
+ func_replace_sysroot_result=$1
+ ;;
+ esac
+}
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+ $opt_debug
+ if test -n "$available_tags" && test -z "$tagname"; then
+ CC_quoted=
+ for arg in $CC; do
+ func_append_quoted CC_quoted "$arg"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
+ case $@ in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+ CC_quoted=
+ for arg in $CC; do
+ # Double-quote args containing other shell metacharacters.
+ func_append_quoted CC_quoted "$arg"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
+ case "$@ " in
+ " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
+ # The compiler in the base compile command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ func_echo "unable to infer tagged configuration"
+ func_fatal_error "specify a tag with \`--tag'"
+# else
+# func_verbose "using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+ write_libobj=${1}
+ if test "$build_libtool_libs" = yes; then
+ write_lobj=\'${2}\'
+ else
+ write_lobj=none
+ fi
+
+ if test "$build_old_libs" = yes; then
+ write_oldobj=\'${3}\'
+ else
+ write_oldobj=none
+ fi
+
+ $opt_dry_run || {
+ cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+ $MV "${write_libobj}T" "${write_libobj}"
+ }
+}
+
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+ $opt_debug
+ func_convert_core_file_wine_to_w32_result="$1"
+ if test -n "$1"; then
+ # Unfortunately, winepath does not exit with a non-zero error code, so we
+ # are forced to check the contents of stdout. On the other hand, if the
+ # command is not found, the shell will set an exit code of 127 and print
+ # *an error message* to stdout. So we must check for both error code of
+ # zero AND non-empty stdout, which explains the odd construction:
+ func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+ if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
+ func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+ $SED -e "$lt_sed_naive_backslashify"`
+ else
+ func_convert_core_file_wine_to_w32_result=
+ fi
+ fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+ $opt_debug
+ # unfortunately, winepath doesn't convert paths, only file names
+ func_convert_core_path_wine_to_w32_result=""
+ if test -n "$1"; then
+ oldIFS=$IFS
+ IFS=:
+ for func_convert_core_path_wine_to_w32_f in $1; do
+ IFS=$oldIFS
+ func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+ if test -n "$func_convert_core_file_wine_to_w32_result" ; then
+ if test -z "$func_convert_core_path_wine_to_w32_result"; then
+ func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
+ else
+ func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+ fi
+ fi
+ done
+ IFS=$oldIFS
+ fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+ $opt_debug
+ if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+ func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+ if test "$?" -ne 0; then
+ # on failure, ensure result is empty
+ func_cygpath_result=
+ fi
+ else
+ func_cygpath_result=
+ func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
+ fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format. Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+ $opt_debug
+ # awkward: cmd appends spaces to result
+ func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+ $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+ $opt_debug
+ if test -z "$2" && test -n "$1" ; then
+ func_error "Could not determine host file name corresponding to"
+ func_error " \`$1'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback:
+ func_to_host_file_result="$1"
+ fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+ $opt_debug
+ if test -z "$4" && test -n "$3"; then
+ func_error "Could not determine the host path corresponding to"
+ func_error " \`$3'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback. This is a deliberately simplistic "conversion" and
+ # should not be "improved". See libtool.info.
+ if test "x$1" != "x$2"; then
+ lt_replace_pathsep_chars="s|$1|$2|g"
+ func_to_host_path_result=`echo "$3" |
+ $SED -e "$lt_replace_pathsep_chars"`
+ else
+ func_to_host_path_result="$3"
+ fi
+ fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+ $opt_debug
+ case $4 in
+ $1 ) func_to_host_path_result="$3$func_to_host_path_result"
+ ;;
+ esac
+ case $4 in
+ $2 ) func_append func_to_host_path_result "$3"
+ ;;
+ esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via `$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+ $opt_debug
+ $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result. If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+ $opt_debug
+ case ,$2, in
+ *,"$to_tool_file_cmd",*)
+ func_to_tool_file_result=$1
+ ;;
+ *)
+ $to_tool_file_cmd "$1"
+ func_to_tool_file_result=$func_to_host_file_result
+ ;;
+ esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+ func_to_host_file_result="$1"
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper. Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+ $opt_debug
+ func_to_host_file_result="$1"
+ if test -n "$1"; then
+ func_convert_core_msys_to_w32 "$1"
+ func_to_host_file_result="$func_convert_core_msys_to_w32_result"
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format. Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+ $opt_debug
+ func_to_host_file_result="$1"
+ if test -n "$1"; then
+ # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+ # LT_CYGPATH in this case.
+ func_to_host_file_result=`cygpath -m "$1"`
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format. Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+ $opt_debug
+ func_to_host_file_result="$1"
+ if test -n "$1"; then
+ func_convert_core_file_wine_to_w32 "$1"
+ func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+ $opt_debug
+ func_to_host_file_result="$1"
+ if test -n "$1"; then
+ func_convert_core_msys_to_w32 "$1"
+ func_cygpath -u "$func_convert_core_msys_to_w32_result"
+ func_to_host_file_result="$func_cygpath_result"
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set. Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+ $opt_debug
+ func_to_host_file_result="$1"
+ if test -n "$1"; then
+ # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+ func_convert_core_file_wine_to_w32 "$1"
+ func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+ func_to_host_file_result="$func_cygpath_result"
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via `$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format. If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+# file name conversion function : func_convert_file_X_to_Y ()
+# path conversion function : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same. If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+ $opt_debug
+ if test -z "$to_host_path_cmd"; then
+ func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+ to_host_path_cmd="func_convert_path_${func_stripname_result}"
+ fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+ $opt_debug
+ func_init_to_host_path_cmd
+ $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+ func_to_host_path_result="$1"
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper. Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+ $opt_debug
+ func_to_host_path_result="$1"
+ if test -n "$1"; then
+ # Remove leading and trailing path separator characters from ARG. MSYS
+ # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+ # and winepath ignores them completely.
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+ func_to_host_path_result="$func_convert_core_msys_to_w32_result"
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format. Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+ $opt_debug
+ func_to_host_path_result="$1"
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format. Requires a wine environment and
+# a working winepath. Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+ $opt_debug
+ func_to_host_path_result="$1"
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+ func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+ $opt_debug
+ func_to_host_path_result="$1"
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+ func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+ func_to_host_path_result="$func_cygpath_result"
+ func_convert_path_check : : \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+ fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set. Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+ $opt_debug
+ func_to_host_path_result="$1"
+ if test -n "$1"; then
+ # Remove leading and trailing path separator characters from
+ # ARG. msys behavior is inconsistent here, cygpath turns them
+ # into '.;' and ';.', and winepath ignores them completely.
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+ func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+ func_to_host_path_result="$func_cygpath_result"
+ func_convert_path_check : : \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+ fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+ $opt_debug
+ # Get the compilation command and the source file.
+ base_compile=
+ srcfile="$nonopt" # always keep a non-empty value in "srcfile"
+ suppress_opt=yes
+ suppress_output=
+ arg_mode=normal
+ libobj=
+ later=
+ pie_flag=
+
+ for arg
+ do
+ case $arg_mode in
+ arg )
+ # do not "continue". Instead, add this to base_compile
+ lastarg="$arg"
+ arg_mode=normal
+ ;;
+
+ target )
+ libobj="$arg"
+ arg_mode=normal
+ continue
+ ;;
+
+ normal )
+ # Accept any command-line options.
+ case $arg in
+ -o)
+ test -n "$libobj" && \
+ func_fatal_error "you cannot specify \`-o' more than once"
+ arg_mode=target
+ continue
+ ;;
+
+ -pie | -fpie | -fPIE)
+ func_append pie_flag " $arg"
+ continue
+ ;;
+
+ -shared | -static | -prefer-pic | -prefer-non-pic)
+ func_append later " $arg"
+ continue
+ ;;
+
+ -no-suppress)
+ suppress_opt=no
+ continue
+ ;;
+
+ -Xcompiler)
+ arg_mode=arg # the next one goes into the "base_compile" arg list
+ continue # The current "srcfile" will either be retained or
+ ;; # replaced later. I would guess that would be a bug.
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ lastarg=
+ save_ifs="$IFS"; IFS=','
+ for arg in $args; do
+ IFS="$save_ifs"
+ func_append_quoted lastarg "$arg"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$lastarg"
+ lastarg=$func_stripname_result
+
+ # Add the arguments to base_compile.
+ func_append base_compile " $lastarg"
+ continue
+ ;;
+
+ *)
+ # Accept the current argument as the source file.
+ # The previous "srcfile" becomes the current argument.
+ #
+ lastarg="$srcfile"
+ srcfile="$arg"
+ ;;
+ esac # case $arg
+ ;;
+ esac # case $arg_mode
+
+ # Aesthetically quote the previous argument.
+ func_append_quoted base_compile "$lastarg"
+ done # for arg
+
+ case $arg_mode in
+ arg)
+ func_fatal_error "you must specify an argument for -Xcompile"
+ ;;
+ target)
+ func_fatal_error "you must specify a target with \`-o'"
+ ;;
+ *)
+ # Get the name of the library object.
+ test -z "$libobj" && {
+ func_basename "$srcfile"
+ libobj="$func_basename_result"
+ }
+ ;;
+ esac
+
+ # Recognize several different file suffixes.
+ # If the user specifies -o file.o, it is replaced with file.lo
+ case $libobj in
+ *.[cCFSifmso] | \
+ *.ada | *.adb | *.ads | *.asm | \
+ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
+ func_xform "$libobj"
+ libobj=$func_xform_result
+ ;;
+ esac
+
+ case $libobj in
+ *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+ *)
+ func_fatal_error "cannot determine name of library object from \`$libobj'"
+ ;;
+ esac
+
+ func_infer_tag $base_compile
+
+ for arg in $later; do
+ case $arg in
+ -shared)
+ test "$build_libtool_libs" != yes && \
+ func_fatal_configuration "can not build a shared library"
+ build_old_libs=no
+ continue
+ ;;
+
+ -static)
+ build_libtool_libs=no
+ build_old_libs=yes
+ continue
+ ;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
+ ;;
+ esac
+ done
+
+ func_quote_for_eval "$libobj"
+ test "X$libobj" != "X$func_quote_for_eval_result" \
+ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
+ && func_warning "libobj name \`$libobj' may not contain shell special characters."
+ func_dirname_and_basename "$obj" "/" ""
+ objname="$func_basename_result"
+ xdir="$func_dirname_result"
+ lobj=${xdir}$objdir/$objname
+
+ test -z "$base_compile" && \
+ func_fatal_help "you must specify a compilation command"
+
+ # Delete any leftover library objects.
+ if test "$build_old_libs" = yes; then
+ removelist="$obj $lobj $libobj ${libobj}T"
+ else
+ removelist="$lobj $libobj ${libobj}T"
+ fi
+
+ # On Cygwin there's no "real" PIC flag so we must build both object types
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2* | cegcc*)
+ pic_mode=default
+ ;;
+ esac
+ if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+ # non-PIC code in shared libraries is not supported
+ pic_mode=default
+ fi
+
+ # Calculate the filename of the output object if compiler does
+ # not support -o with -c
+ if test "$compiler_c_o" = no; then
+ output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
+ lockfile="$output_obj.lock"
+ else
+ output_obj=
+ need_locks=no
+ lockfile=
+ fi
+
+ # Lock this critical section if it is needed
+ # We use this script file to make the link, it avoids creating a new file
+ if test "$need_locks" = yes; then
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ elif test "$need_locks" = warn; then
+ if test -f "$lockfile"; then
+ $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+ func_append removelist " $output_obj"
+ $ECHO "$srcfile" > "$lockfile"
+ fi
+
+ $opt_dry_run || $RM $removelist
+ func_append removelist " $lockfile"
+ trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+ func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+ srcfile=$func_to_tool_file_result
+ func_quote_for_eval "$srcfile"
+ qsrcfile=$func_quote_for_eval_result
+
+ # Only build a PIC object if we are building libtool libraries.
+ if test "$build_libtool_libs" = yes; then
+ # Without this assignment, base_compile gets emptied.
+ fbsd_hideous_sh_bug=$base_compile
+
+ if test "$pic_mode" != no; then
+ command="$base_compile $qsrcfile $pic_flag"
+ else
+ # Don't build PIC code
+ command="$base_compile $qsrcfile"
+ fi
+
+ func_mkdir_p "$xdir$objdir"
+
+ if test -z "$output_obj"; then
+ # Place PIC objects in $objdir
+ func_append command " -o $lobj"
+ fi
+
+ func_show_eval_locale "$command" \
+ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+ if test "$need_locks" = warn &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed, then go on to compile the next one
+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+ func_show_eval '$MV "$output_obj" "$lobj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+
+ # Allow error messages only from the first compilation.
+ if test "$suppress_opt" = yes; then
+ suppress_output=' >/dev/null 2>&1'
+ fi
+ fi
+
+ # Only build a position-dependent object if we build old libraries.
+ if test "$build_old_libs" = yes; then
+ if test "$pic_mode" != yes; then
+ # Don't build PIC code
+ command="$base_compile $qsrcfile$pie_flag"
+ else
+ command="$base_compile $qsrcfile $pic_flag"
+ fi
+ if test "$compiler_c_o" = yes; then
+ func_append command " -o $obj"
+ fi
+
+ # Suppress compiler output if we already did a PIC compilation.
+ func_append command "$suppress_output"
+ func_show_eval_locale "$command" \
+ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+ if test "$need_locks" = warn &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed
+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+ func_show_eval '$MV "$output_obj" "$obj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+ fi
+
+ $opt_dry_run || {
+ func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+ # Unlock the critical section if it was locked
+ if test "$need_locks" != no; then
+ removelist=$lockfile
+ $RM "$lockfile"
+ fi
+ }
+
+ exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+ test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+ # We need to display help for each of the modes.
+ case $opt_mode in
+ "")
+ # Generic help is extracted from the usage comments
+ # at the start of this file.
+ func_help
+ ;;
+
+ clean)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ compile)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -no-suppress do not suppress compiler output for multiple passes
+ -prefer-pic try to build PIC objects only
+ -prefer-non-pic try to build non-PIC objects only
+ -shared do not build a \`.o' file suitable for static linking
+ -static only build a \`.o' file suitable for static linking
+ -Wc,FLAG pass FLAG directly to the compiler
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+ ;;
+
+ execute)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+ -dlopen FILE add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+ ;;
+
+ finish)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges. Use
+the \`--dry-run' option if you just want to see what would be executed."
+ ;;
+
+ install)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command. The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+ -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+ link)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+ -all-static do not do any dynamic linking at all
+ -avoid-version do not add a version suffix if possible
+ -bindir BINDIR specify path to binaries directory (for systems where
+ libraries must be found in the PATH setting at runtime)
+ -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
+ -no-undefined declare that a library does not refer to external symbols
+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
+ -objectlist FILE Use a list of object files found in FILE to specify objects
+ -precious-files-regex REGEX
+ don't remove output files matching REGEX
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -shared only do dynamic linking of libtool libraries
+ -shrext SUFFIX override the standard shared library file extension
+ -static do not do any dynamic linking of uninstalled libtool libraries
+ -static-libtool-libs
+ do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+ -weak LIBNAME declare that the target provides the LIBNAME interface
+ -Wc,FLAG
+ -Xcompiler FLAG pass linker-specific FLAG directly to the compiler
+ -Wl,FLAG
+ -Xlinker FLAG pass linker-specific FLAG directly to the linker
+ -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename. Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+ ;;
+
+ uninstall)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ *)
+ func_fatal_help "invalid operation mode \`$opt_mode'"
+ ;;
+ esac
+
+ echo
+ $ECHO "Try \`$progname --help' for more information about other modes."
+}
+
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+ if test "$opt_help" = :; then
+ func_mode_help
+ else
+ {
+ func_help noexit
+ for opt_mode in compile link execute install finish uninstall clean; do
+ func_mode_help
+ done
+ } | sed -n '1p; 2,$s/^Usage:/ or: /p'
+ {
+ func_help noexit
+ for opt_mode in compile link execute install finish uninstall clean; do
+ echo
+ func_mode_help
+ done
+ } |
+ sed '1d
+ /^When reporting/,/^Report/{
+ H
+ d
+ }
+ $x
+ /information about other modes/d
+ /more detailed .*MODE/d
+ s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+ fi
+ exit $?
+fi
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+ $opt_debug
+ # The first argument is the command name.
+ cmd="$nonopt"
+ test -z "$cmd" && \
+ func_fatal_help "you must specify a COMMAND"
+
+ # Handle -dlopen flags immediately.
+ for file in $opt_dlopen; do
+ test -f "$file" \
+ || func_fatal_help "\`$file' is not a file"
+
+ dir=
+ case $file in
+ *.la)
+ func_resolve_sysroot "$file"
+ file=$func_resolve_sysroot_result
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+ func_source "$file"
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && \
+ func_warning "\`$file' was not linked with \`-export-dynamic'"
+ continue
+ fi
+
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+
+ if test -f "$dir/$objdir/$dlname"; then
+ func_append dir "/$objdir"
+ else
+ if test ! -f "$dir/$dlname"; then
+ func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+ fi
+ fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+ ;;
+
+ *)
+ func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+ continue
+ ;;
+ esac
+
+ # Get the absolute pathname.
+ absdir=`cd "$dir" && pwd`
+ test -n "$absdir" && dir="$absdir"
+
+ # Now add the directory to shlibpath_var.
+ if eval "test -z \"\$$shlibpath_var\""; then
+ eval "$shlibpath_var=\"\$dir\""
+ else
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+ fi
+ done
+
+ # This variable tells wrapper scripts just to set shlibpath_var
+ # rather than running their programs.
+ libtool_execute_magic="$magic"
+
+ # Check if any of the arguments is a wrapper script.
+ args=
+ for file
+ do
+ case $file in
+ -* | *.la | *.lo ) ;;
+ *)
+ # Do a test to see if this is really a libtool program.
+ if func_ltwrapper_script_p "$file"; then
+ func_source "$file"
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ elif func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ func_source "$func_ltwrapper_scriptname_result"
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ func_append_quoted args "$file"
+ done
+
+ if test "X$opt_dry_run" = Xfalse; then
+ if test -n "$shlibpath_var"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+ fi
+
+ # Restore saved environment variables
+ for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+ do
+ eval "if test \"\${save_$lt_var+set}\" = set; then
+ $lt_var=\$save_$lt_var; export $lt_var
+ else
+ $lt_unset $lt_var
+ fi"
+ done
+
+ # Now prepare to actually exec the command.
+ exec_cmd="\$cmd$args"
+ else
+ # Display what would be done.
+ if test -n "$shlibpath_var"; then
+ eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+ echo "export $shlibpath_var"
+ fi
+ $ECHO "$cmd$args"
+ exit $EXIT_SUCCESS
+ fi
+}
+
+test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+ $opt_debug
+ libs=
+ libdirs=
+ admincmds=
+
+ for opt in "$nonopt" ${1+"$@"}
+ do
+ if test -d "$opt"; then
+ func_append libdirs " $opt"
+
+ elif test -f "$opt"; then
+ if func_lalib_unsafe_p "$opt"; then
+ func_append libs " $opt"
+ else
+ func_warning "\`$opt' is not a valid libtool archive"
+ fi
+
+ else
+ func_fatal_error "invalid argument \`$opt'"
+ fi
+ done
+
+ if test -n "$libs"; then
+ if test -n "$lt_sysroot"; then
+ sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+ sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+ else
+ sysroot_cmd=
+ fi
+
+ # Remove sysroot references
+ if $opt_dry_run; then
+ for lib in $libs; do
+ echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
+ done
+ else
+ tmpdir=`func_mktempdir`
+ for lib in $libs; do
+ sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+ > $tmpdir/tmp-la
+ mv -f $tmpdir/tmp-la $lib
+ done
+ ${RM}r "$tmpdir"
+ fi
+ fi
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+ func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $opt_dry_run || eval "$cmds" || func_append admincmds "
+ $cmds"
+ fi
+ done
+ fi
+
+ # Exit here if they wanted silent mode.
+ $opt_silent && exit $EXIT_SUCCESS
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ echo "----------------------------------------------------------------------"
+ echo "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ $ECHO " $libdir"
+ done
+ echo
+ echo "If you ever happen to want to link against installed libraries"
+ echo "in a given directory, LIBDIR, you must either use libtool, and"
+ echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+ echo "flag during linking and do at least one of the following:"
+ if test -n "$shlibpath_var"; then
+ echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
+ echo " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ echo " - add LIBDIR to the \`$runpath_var' environment variable"
+ echo " during linking"
+ fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
+
+ $ECHO " - use the \`$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ $ECHO " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+ fi
+ echo
+
+ echo "See any operating system documentation about shared libraries for"
+ case $host in
+ solaris2.[6789]|solaris2.1[0-9])
+ echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+ echo "pages."
+ ;;
+ *)
+ echo "more information, such as the ld(1) and ld.so(8) manual pages."
+ ;;
+ esac
+ echo "----------------------------------------------------------------------"
+ fi
+ exit $EXIT_SUCCESS
+}
+
+test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+ $opt_debug
+ # There may be an optional sh(1) argument at the beginning of
+ # install_prog (especially on Windows NT).
+ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+ # Allow the use of GNU shtool's install command.
+ case $nonopt in *shtool*) :;; *) false;; esac; then
+ # Aesthetically quote it.
+ func_quote_for_eval "$nonopt"
+ install_prog="$func_quote_for_eval_result "
+ arg=$1
+ shift
+ else
+ install_prog=
+ arg=$nonopt
+ fi
+
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ func_quote_for_eval "$arg"
+ func_append install_prog "$func_quote_for_eval_result"
+ install_shared_prog=$install_prog
+ case " $install_prog " in
+ *[\\\ /]cp\ *) install_cp=: ;;
+ *) install_cp=false ;;
+ esac
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=no
+ stripme=
+ no_mode=:
+ for arg
+ do
+ arg2=
+ if test -n "$dest"; then
+ func_append files " $dest"
+ dest=$arg
+ continue
+ fi
+
+ case $arg in
+ -d) isdir=yes ;;
+ -f)
+ if $install_cp; then :; else
+ prev=$arg
+ fi
+ ;;
+ -g | -m | -o)
+ prev=$arg
+ ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*)
+ ;;
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ if test "x$prev" = x-m && test -n "$install_override_mode"; then
+ arg2=$install_override_mode
+ no_mode=false
+ fi
+ prev=
+ else
+ dest=$arg
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ func_quote_for_eval "$arg"
+ func_append install_prog " $func_quote_for_eval_result"
+ if test -n "$arg2"; then
+ func_quote_for_eval "$arg2"
+ fi
+ func_append install_shared_prog " $func_quote_for_eval_result"
+ done
+
+ test -z "$install_prog" && \
+ func_fatal_help "you must specify an install program"
+
+ test -n "$prev" && \
+ func_fatal_help "the \`$prev' option requires an argument"
+
+ if test -n "$install_override_mode" && $no_mode; then
+ if $install_cp; then :; else
+ func_quote_for_eval "$install_override_mode"
+ func_append install_shared_prog " -m $func_quote_for_eval_result"
+ fi
+ fi
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ func_fatal_help "no file or destination specified"
+ else
+ func_fatal_help "you must specify a destination"
+ fi
+ fi
+
+ # Strip any trailing slash from the destination.
+ func_stripname '' '/' "$dest"
+ dest=$func_stripname_result
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=yes
+ if test "$isdir" = yes; then
+ destdir="$dest"
+ destname=
+ else
+ func_dirname_and_basename "$dest" "" "."
+ destdir="$func_dirname_result"
+ destname="$func_basename_result"
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files; shift
+ test "$#" -gt 1 && \
+ func_fatal_help "\`$dest' is not a directory"
+ fi
+ case $destdir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case $file in
+ *.lo) ;;
+ *)
+ func_fatal_help "\`$destdir' must be an absolute directory name"
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ staticlibs=
+ future_libdirs=
+ current_libdirs=
+ for file in $files; do
+
+ # Do each installation.
+ case $file in
+ *.$libext)
+ # Do the static libraries later.
+ func_append staticlibs " $file"
+ ;;
+
+ *.la)
+ func_resolve_sysroot "$file"
+ file=$func_resolve_sysroot_result
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "\`$file' is not a valid libtool archive"
+
+ library_names=
+ old_library=
+ relink_command=
+ func_source "$file"
+
+ # Add the libdir to current_libdirs if it is the destination.
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+ *) func_append current_libdirs " $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+ *) func_append future_libdirs " $libdir" ;;
+ esac
+ fi
+
+ func_dirname "$file" "/" ""
+ dir="$func_dirname_result"
+ func_append dir "$objdir"
+
+ if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+ test "$inst_prefix_dir" = "$destdir" && \
+ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+ fi
+
+ func_warning "relinking \`$file'"
+ func_show_eval "$relink_command" \
+ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+ fi
+
+ # See the names of the shared library.
+ set dummy $library_names; shift
+ if test -n "$1"; then
+ realname="$1"
+ shift
+
+ srcname="$realname"
+ test -n "$relink_command" && srcname="$realname"T
+
+ # Install the shared library and build the symlinks.
+ func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+ 'exit $?'
+ tstripme="$stripme"
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $realname in
+ *.dll.a)
+ tstripme=""
+ ;;
+ esac
+ ;;
+ esac
+ if test -n "$tstripme" && test -n "$striplib"; then
+ func_show_eval "$striplib $destdir/$realname" 'exit $?'
+ fi
+
+ if test "$#" -gt 0; then
+ # Delete the old symlinks, and create new ones.
+ # Try `ln -sf' first, because the `ln' binary might depend on
+ # the symlink we replace! Solaris /bin/ln does not understand -f,
+ # so we also need to try rm && ln -s.
+ for linkname
+ do
+ test "$linkname" != "$realname" \
+ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib="$destdir/$realname"
+ func_execute_cmds "$postinstall_cmds" 'exit $?'
+ fi
+
+ # Install the pseudo-library for information purposes.
+ func_basename "$file"
+ name="$func_basename_result"
+ instname="$dir/$name"i
+ func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+ # Maybe install the static library, too.
+ test -n "$old_library" && func_append staticlibs " $dir/$old_library"
+ ;;
+
+ *.lo)
+ # Install (i.e. copy) a libtool object.
+
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ func_basename "$file"
+ destfile="$func_basename_result"
+ destfile="$destdir/$destfile"
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case $destfile in
+ *.lo)
+ func_lo2o "$destfile"
+ staticdest=$func_lo2o_result
+ ;;
+ *.$objext)
+ staticdest="$destfile"
+ destfile=
+ ;;
+ *)
+ func_fatal_help "cannot copy a libtool object to \`$destfile'"
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ test -n "$destfile" && \
+ func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+ # Install the old object if enabled.
+ if test "$build_old_libs" = yes; then
+ # Deduce the name of the old-style object file.
+ func_lo2o "$file"
+ staticobj=$func_lo2o_result
+ func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+ fi
+ exit $EXIT_SUCCESS
+ ;;
+
+ *)
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ func_basename "$file"
+ destfile="$func_basename_result"
+ destfile="$destdir/$destfile"
+ fi
+
+ # If the file is missing, and there is a .exe on the end, strip it
+ # because it is most likely a libtool script we actually want to
+ # install
+ stripped_ext=""
+ case $file in
+ *.exe)
+ if test ! -f "$file"; then
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ stripped_ext=".exe"
+ fi
+ ;;
+ esac
+
+ # Do a test to see if this is really a libtool program.
+ case $host in
+ *cygwin* | *mingw*)
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ wrapper=$func_ltwrapper_scriptname_result
+ else
+ func_stripname '' '.exe' "$file"
+ wrapper=$func_stripname_result
+ fi
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if func_ltwrapper_script_p "$wrapper"; then
+ notinst_deplibs=
+ relink_command=
+
+ func_source "$wrapper"
+
+ # Check the variables that should have been set.
+ test -z "$generated_by_libtool_version" && \
+ func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+ finalize=yes
+ for lib in $notinst_deplibs; do
+ # Check to see that each library is installed.
+ libdir=
+ if test -f "$lib"; then
+ func_source "$lib"
+ fi
+ libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ func_warning "\`$lib' has not been installed in \`$libdir'"
+ finalize=no
+ fi
+ done
+
+ relink_command=
+ func_source "$wrapper"
+
+ outputname=
+ if test "$fast_install" = no && test -n "$relink_command"; then
+ $opt_dry_run || {
+ if test "$finalize" = yes; then
+ tmpdir=`func_mktempdir`
+ func_basename "$file$stripped_ext"
+ file="$func_basename_result"
+ outputname="$tmpdir/$file"
+ # Replace the output file specification.
+ relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $opt_silent || {
+ func_quote_for_expand "$relink_command"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ if eval "$relink_command"; then :
+ else
+ func_error "error: relink \`$file' with the above command before installing it"
+ $opt_dry_run || ${RM}r "$tmpdir"
+ continue
+ fi
+ file="$outputname"
+ else
+ func_warning "cannot relink \`$file'"
+ fi
+ }
+ else
+ # Install the binary that we compiled earlier.
+ file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
+ fi
+ fi
+
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyway
+ case $install_prog,$host in
+ */usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ func_stripname '' '.exe' "$destfile"
+ destfile=$func_stripname_result
+ ;;
+ esac
+ ;;
+ esac
+ func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+ $opt_dry_run || if test -n "$outputname"; then
+ ${RM}r "$tmpdir"
+ fi
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ func_basename "$file"
+ name="$func_basename_result"
+
+ # Set up the ranlib parameters.
+ oldlib="$destdir/$name"
+ func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+ tool_oldlib=$func_to_tool_file_result
+
+ func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+ if test -n "$stripme" && test -n "$old_striplib"; then
+ func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
+ fi
+
+ # Do each command in the postinstall commands.
+ func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+ done
+
+ test -n "$future_libdirs" && \
+ func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ $opt_dry_run && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+ else
+ exit $EXIT_SUCCESS
+ fi
+}
+
+test "$opt_mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+ $opt_debug
+ my_outputname="$1"
+ my_originator="$2"
+ my_pic_p="${3-no}"
+ my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+ my_dlsyms=
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ my_dlsyms="${my_outputname}S.c"
+ else
+ func_error "not configured to extract global symbols from dlpreopened files"
+ fi
+ fi
+
+ if test -n "$my_dlsyms"; then
+ case $my_dlsyms in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist="$output_objdir/${my_outputname}.nm"
+
+ func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+ # Parse the name list into a source file.
+ func_verbose "creating $output_objdir/$my_dlsyms"
+
+ $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data. */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test "$dlself" = yes; then
+ func_verbose "generating symbol list for \`$output'"
+
+ $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ for progfile in $progfiles; do
+ func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+ func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
+ $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $opt_dry_run || {
+ eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $opt_dry_run || {
+ eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols="$output_objdir/$outputname.exp"
+ $opt_dry_run || {
+ $RM $export_symbols
+ eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ else
+ $opt_dry_run || {
+ eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+ eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ fi
+ fi
+
+ for dlprefile in $dlprefiles; do
+ func_verbose "extracting global C symbols from \`$dlprefile'"
+ func_basename "$dlprefile"
+ name="$func_basename_result"
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ # if an import library, we need to obtain dlname
+ if func_win32_import_lib_p "$dlprefile"; then
+ func_tr_sh "$dlprefile"
+ eval "curr_lafile=\$libfile_$func_tr_sh_result"
+ dlprefile_dlbasename=""
+ if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+ # Use subshell, to avoid clobbering current variable values
+ dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+ if test -n "$dlprefile_dlname" ; then
+ func_basename "$dlprefile_dlname"
+ dlprefile_dlbasename="$func_basename_result"
+ else
+ # no lafile. user explicitly requested -dlpreopen <import library>.
+ $sharedlib_from_linklib_cmd "$dlprefile"
+ dlprefile_dlbasename=$sharedlib_from_linklib_result
+ fi
+ fi
+ $opt_dry_run || {
+ if test -n "$dlprefile_dlbasename" ; then
+ eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+ else
+ func_warning "Could not compute DLL name from $name"
+ eval '$ECHO ": $name " >> "$nlist"'
+ fi
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+ $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+ }
+ else # not an import lib
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ fi
+ ;;
+ *)
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ ;;
+ esac
+ done
+
+ $opt_dry_run || {
+ # Make sure we have at least an empty file.
+ test -f "$nlist" || : > "$nlist"
+
+ if test -n "$exclude_expsyms"; then
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $MV "$nlist"T "$nlist"
+ fi
+
+ # Try sorting and uniquifying the output.
+ if $GREP -v "^: " < "$nlist" |
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
+ sort -k 3
+ else
+ sort +2
+ fi |
+ uniq > "$nlist"S; then
+ :
+ else
+ $GREP -v "^: " < "$nlist" > "$nlist"S
+ fi
+
+ if test -f "$nlist"S; then
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+ else
+ echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
+ fi
+
+ echo >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols. */
+typedef struct {
+ const char *name;
+ void *address;
+} lt_dlsymlist;
+extern LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+ { \"$my_originator\", (void *) 0 },"
+
+ case $need_lib_prefix in
+ no)
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ *)
+ eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ esac
+ echo >> "$output_objdir/$my_dlsyms" "\
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ } # !$opt_dry_run
+
+ pic_flag_for_symtable=
+ case "$compile_command " in
+ *" -static "*) ;;
+ *)
+ case $host in
+ # compiling the symbol table file with pic_flag works around
+ # a FreeBSD bug that causes programs to crash when -lm is
+ # linked before any other PIC object. But we must not use
+ # pic_flag when linking with -static. The problem exists in
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+ *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+ *-*-hpux*)
+ pic_flag_for_symtable=" $pic_flag" ;;
+ *)
+ if test "X$my_pic_p" != Xno; then
+ pic_flag_for_symtable=" $pic_flag"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ symtab_cflags=
+ for arg in $LTCFLAGS; do
+ case $arg in
+ -pie | -fpie | -fPIE) ;;
+ *) func_append symtab_cflags " $arg" ;;
+ esac
+ done
+
+ # Now compile the dynamic symbol file.
+ func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+ # Clean up the generated files.
+ func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+ # Transform the symbol file into the correct name.
+ symfileobj="$output_objdir/${my_outputname}S.$objext"
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ if test -f "$output_objdir/$my_outputname.def"; then
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ else
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ fi
+ ;;
+ *)
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ ;;
+ esac
+ ;;
+ *)
+ func_fatal_error "unknown suffix for \`$my_dlsyms'"
+ ;;
+ esac
+ else
+ # We keep going just in case the user didn't refer to
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
+ # really was required.
+
+ # Nullify the symbol file.
+ compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
+ fi
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
+func_win32_libid ()
+{
+ $opt_debug
+ win32_libid_type="unknown"
+ win32_fileres=`file -L $1 2>/dev/null`
+ case $win32_fileres in
+ *ar\ archive\ import\ library*) # definitely import
+ win32_libid_type="x86 archive import"
+ ;;
+ *ar\ archive*) # could be an import, or static
+ # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+ $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+ $SED -n -e '
+ 1,100{
+ / I /{
+ s,.*,import,
+ p
+ q
+ }
+ }'`
+ case $win32_nmres in
+ import*) win32_libid_type="x86 archive import";;
+ *) win32_libid_type="x86 archive static";;
+ esac
+ fi
+ ;;
+ *DLL*)
+ win32_libid_type="x86 DLL"
+ ;;
+ *executable*) # but shell scripts are "executable" too...
+ case $win32_fileres in
+ *MS\ Windows\ PE\ Intel*)
+ win32_libid_type="x86 DLL"
+ ;;
+ esac
+ ;;
+ esac
+ $ECHO "$win32_libid_type"
+}
+
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+# $sharedlib_from_linklib_cmd
+# Result is available in the variable
+# $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+ $opt_debug
+ sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+ $opt_debug
+ match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+ $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+ $SED '/^Contents of section '"$match_literal"':/{
+ # Place marker at beginning of archive member dllname section
+ s/.*/====MARK====/
+ p
+ d
+ }
+ # These lines can sometimes be longer than 43 characters, but
+ # are always uninteresting
+ /:[ ]*file format pe[i]\{,1\}-/d
+ /^In archive [^:]*:/d
+ # Ensure marker is printed
+ /^====MARK====/p
+ # Remove all lines with less than 43 characters
+ /^.\{43\}/!d
+ # From remaining lines, remove first 43 characters
+ s/^.\{43\}//' |
+ $SED -n '
+ # Join marker and all lines until next marker into a single line
+ /^====MARK====/ b para
+ H
+ $ b para
+ b
+ :para
+ x
+ s/\n//g
+ # Remove the marker
+ s/^====MARK====//
+ # Remove trailing dots and whitespace
+ s/[\. \t]*$//
+ # Print
+ /./p' |
+ # we now have a list, one entry per line, of the stringified
+ # contents of the appropriate section of all members of the
+ # archive which possess that section. Heuristic: eliminate
+ # all those which have a first or second character that is
+ # a '.' (that is, objdump's representation of an unprintable
+ # character.) This should work for all archives with less than
+ # 0x302f exports -- but will fail for DLLs whose name actually
+ # begins with a literal '.' or a single character followed by
+ # a '.'.
+ #
+ # Of those that remain, print the first one.
+ $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+ $opt_debug
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+ test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+ $opt_debug
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+ test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+# $sharedlib_from_linklib_cmd
+# Result is available in the variable
+# $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+ $opt_debug
+ if func_cygming_gnu_implib_p "$1" ; then
+ # binutils import library
+ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+ elif func_cygming_ms_implib_p "$1" ; then
+ # ms-generated import library
+ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+ else
+ # unknown
+ sharedlib_from_linklib_result=""
+ fi
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+ $opt_debug
+ f_ex_an_ar_dir="$1"; shift
+ f_ex_an_ar_oldlib="$1"
+ if test "$lock_old_archive_extraction" = yes; then
+ lockfile=$f_ex_an_ar_oldlib.lock
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ fi
+ func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+ 'stat=$?; rm -f "$lockfile"; exit $stat'
+ if test "$lock_old_archive_extraction" = yes; then
+ $opt_dry_run || rm -f "$lockfile"
+ fi
+ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+ fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+ $opt_debug
+ my_gentop="$1"; shift
+ my_oldlibs=${1+"$@"}
+ my_oldobjs=""
+ my_xlib=""
+ my_xabs=""
+ my_xdir=""
+
+ for my_xlib in $my_oldlibs; do
+ # Extract the objects.
+ case $my_xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+ *) my_xabs=`pwd`"/$my_xlib" ;;
+ esac
+ func_basename "$my_xlib"
+ my_xlib="$func_basename_result"
+ my_xlib_u=$my_xlib
+ while :; do
+ case " $extracted_archives " in
+ *" $my_xlib_u "*)
+ func_arith $extracted_serial + 1
+ extracted_serial=$func_arith_result
+ my_xlib_u=lt$extracted_serial-$my_xlib ;;
+ *) break ;;
+ esac
+ done
+ extracted_archives="$extracted_archives $my_xlib_u"
+ my_xdir="$my_gentop/$my_xlib_u"
+
+ func_mkdir_p "$my_xdir"
+
+ case $host in
+ *-darwin*)
+ func_verbose "Extracting $my_xabs"
+ # Do not bother doing anything if just a dry run
+ $opt_dry_run || {
+ darwin_orig_dir=`pwd`
+ cd $my_xdir || exit $?
+ darwin_archive=$my_xabs
+ darwin_curdir=`pwd`
+ darwin_base_archive=`basename "$darwin_archive"`
+ darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+ if test -n "$darwin_arches"; then
+ darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+ darwin_arch=
+ func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+ for darwin_arch in $darwin_arches ; do
+ func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+ $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+ cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+ func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+ cd "$darwin_curdir"
+ $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+ done # $darwin_arches
+ ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+ darwin_file=
+ darwin_files=
+ for darwin_file in $darwin_filelist; do
+ darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+ $LIPO -create -output "$darwin_file" $darwin_files
+ done # $darwin_filelist
+ $RM -rf unfat-$$
+ cd "$darwin_orig_dir"
+ else
+ cd $darwin_orig_dir
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ fi # $darwin_arches
+ } # !$opt_dry_run
+ ;;
+ *)
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ ;;
+ esac
+ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+ done
+
+ func_extract_archives_result="$my_oldobjs"
+}
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable. Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take. If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory. This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+ func_emit_wrapper_arg1=${1-no}
+
+ $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+ # install mode needs the following variables:
+ generated_by_libtool_version='$macro_version'
+ notinst_deplibs='$notinst_deplibs'
+else
+ # When we are sourced in execute mode, \$file and \$ECHO are already set.
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ file=\"\$0\""
+
+ qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+ $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+ ECHO=\"$qECHO\"
+ fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ which is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options which match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+ lt_script_arg0=\$0
+ shift
+ for lt_opt
+ do
+ case \"\$lt_opt\" in
+ --lt-debug) lt_option_debug=1 ;;
+ --lt-dump-script)
+ lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+ test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+ lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+ cat \"\$lt_dump_D/\$lt_dump_F\"
+ exit 0
+ ;;
+ --lt-*)
+ \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+
+ # Print the debug banner immediately:
+ if test -n \"\$lt_option_debug\"; then
+ echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
+ fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+ lt_dump_args_N=1;
+ for lt_arg
+ do
+ \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
+ lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+ done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+"
+ case $host in
+ # Backslashes separate directories on plain windows
+ *-*-mingw | *-*-os2* | *-cegcc*)
+ $ECHO "\
+ if test -n \"\$lt_option_debug\"; then
+ \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
+ func_lt_dump_args \${1+\"\$@\"} 1>&2
+ fi
+ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+ ;;
+
+ *)
+ $ECHO "\
+ if test -n \"\$lt_option_debug\"; then
+ \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
+ func_lt_dump_args \${1+\"\$@\"} 1>&2
+ fi
+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+ ;;
+ esac
+ $ECHO "\
+ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+ exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+ case \" \$* \" in
+ *\\ --lt-*)
+ for lt_wr_arg
+ do
+ case \$lt_wr_arg in
+ --lt-*) ;;
+ *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+ esac
+ shift
+ done ;;
+ esac
+ func_exec_program_core \${1+\"\$@\"}
+}
+
+ # Parse options
+ func_parse_lt_options \"\$0\" \${1+\"\$@\"}
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
+ while test -n \"\$file\"; do
+ destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
+
+ # If there was a directory component, then change thisdir.
+ if test \"x\$destdir\" != \"x\$file\"; then
+ case \"\$destdir\" in
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+ *) thisdir=\"\$thisdir/\$destdir\" ;;
+ esac
+ fi
+
+ file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
+ done
+
+ # Usually 'no', except on cygwin/mingw when embedded into
+ # the cwrapper.
+ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+ if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+ # special case for '.'
+ if test \"\$thisdir\" = \".\"; then
+ thisdir=\`pwd\`
+ fi
+ # remove .libs from thisdir
+ case \"\$thisdir\" in
+ *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
+ $objdir ) thisdir=. ;;
+ esac
+ fi
+
+ # Try to get the absolute directory name.
+ absdir=\`cd \"\$thisdir\" && pwd\`
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+ if test "$fast_install" = yes; then
+ $ECHO "\
+ program=lt-'$outputname'$exeext
+ progdir=\"\$thisdir/$objdir\"
+
+ if test ! -f \"\$progdir/\$program\" ||
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+ file=\"\$\$-\$program\"
+
+ if test ! -d \"\$progdir\"; then
+ $MKDIR \"\$progdir\"
+ else
+ $RM \"\$progdir/\$file\"
+ fi"
+
+ $ECHO "\
+
+ # relink executable if necessary
+ if test -n \"\$relink_command\"; then
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+ else
+ $ECHO \"\$relink_command_output\" >&2
+ $RM \"\$progdir/\$file\"
+ exit 1
+ fi
+ fi
+
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $RM \"\$progdir/\$program\";
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $RM \"\$progdir/\$file\"
+ fi"
+ else
+ $ECHO "\
+ program='$outputname'
+ progdir=\"\$thisdir/$objdir\"
+"
+ fi
+
+ $ECHO "\
+
+ if test -f \"\$progdir/\$program\"; then"
+
+ # fixup the dll searchpath if we need to.
+ #
+ # Fix the DLL searchpath if we need to. Do this before prepending
+ # to shlibpath, because on Windows, both are PATH and uninstalled
+ # libraries must come first.
+ if test -n "$dllsearchpath"; then
+ $ECHO "\
+ # Add the dll search path components to the executable PATH
+ PATH=$dllsearchpath:\$PATH
+"
+ fi
+
+ # Export our shlibpath_var if we have one.
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ $ECHO "\
+ # Add our own library path to $shlibpath_var
+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+ # Some systems cannot cope with colon-terminated $shlibpath_var
+ # The second colon is a workaround for a bug in BeOS R4 sed
+ $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
+
+ export $shlibpath_var
+"
+ fi
+
+ $ECHO "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+ func_exec_program \${1+\"\$@\"}
+ fi
+ else
+ # The program doesn't exist.
+ \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+ \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+ \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+ exit 1
+ fi
+fi\
+"
+}
+
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+ cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+ The $output program cannot be directly executed until all the libtool
+ libraries that it depends on are installed.
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+*/
+EOF
+ cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+# include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+/* declarations of non-ANSI functions */
+#if defined(__MINGW32__)
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined(__CYGWIN__)
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined (other platforms) ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined(_MSC_VER)
+# define setmode _setmode
+# define stat _stat
+# define chmod _chmod
+# define getcwd _getcwd
+# define putenv _putenv
+# define S_IXUSR _S_IEXEC
+# ifndef _INTPTR_T_DEFINED
+# define _INTPTR_T_DEFINED
+# define intptr_t int
+# endif
+#elif defined(__MINGW32__)
+# define setmode _setmode
+# define stat _stat
+# define chmod _chmod
+# define getcwd _getcwd
+# define putenv _putenv
+#elif defined(__CYGWIN__)
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined (other platforms) ... */
+#endif
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+/* path handling portability macros */
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+ defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+# define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+# define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#if defined(LT_DEBUGWRAPPER)
+static int lt_debug = 1;
+#else
+static int lt_debug = 0;
+#endif
+
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
+EOF
+
+ cat <<EOF
+volatile const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ func_to_host_path "$temp_rpath"
+ cat <<EOF
+const char * LIB_PATH_VALUE = "$func_to_host_path_result";
+EOF
+ else
+ cat <<"EOF"
+const char * LIB_PATH_VALUE = "";
+EOF
+ fi
+
+ if test -n "$dllsearchpath"; then
+ func_to_host_path "$dllsearchpath:"
+ cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE = "$func_to_host_path_result";
+EOF
+ else
+ cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE = "";
+EOF
+ fi
+
+ if test "$fast_install" = yes; then
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+ else
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+ fi
+
+
+ cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX "--lt-"
+
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
+static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int newargc;
+ char *tmp_pathspec;
+ char *actual_cwrapper_path;
+ char *actual_cwrapper_name;
+ char *target_name;
+ char *lt_argv_zero;
+ intptr_t rval = 127;
+
+ int i;
+
+ program_name = (char *) xstrdup (base_name (argv[0]));
+ newargz = XMALLOC (char *, argc + 1);
+
+ /* very simple arg parsing; don't want to rely on getopt
+ * also, copy all non cwrapper options to newargz, except
+ * argz[0], which is handled differently
+ */
+ newargc=0;
+ for (i = 1; i < argc; i++)
+ {
+ if (strcmp (argv[i], dumpscript_opt) == 0)
+ {
+EOF
+ case "$host" in
+ *mingw* | *cygwin* )
+ # make stdout use "unix" line endings
+ echo " setmode(1,_O_BINARY);"
+ ;;
+ esac
+
+ cat <<"EOF"
+ lt_dump_script (stdout);
+ return 0;
+ }
+ if (strcmp (argv[i], debug_opt) == 0)
+ {
+ lt_debug = 1;
+ continue;
+ }
+ if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+ {
+ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+ namespace, but it is not one of the ones we know about and
+ have already dealt with, above (inluding dump-script), then
+ report an error. Otherwise, targets might begin to believe
+ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+ namespace. The first time any user complains about this, we'll
+ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+ or a configure.ac-settable value.
+ */
+ lt_fatal (__FILE__, __LINE__,
+ "unrecognized %s option: '%s'",
+ ltwrapper_option_prefix, argv[i]);
+ }
+ /* otherwise ... */
+ newargz[++newargc] = xstrdup (argv[i]);
+ }
+ newargz[++newargc] = NULL;
+
+EOF
+ cat <<EOF
+ /* The GNU banner must be the first non-error debug message */
+ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+EOF
+ cat <<"EOF"
+ lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+ tmp_pathspec = find_executable (argv[0]);
+ if (tmp_pathspec == NULL)
+ lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (before symlink chase) at: %s\n",
+ tmp_pathspec);
+
+ actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (after symlink chase) at: %s\n",
+ actual_cwrapper_path);
+ XFREE (tmp_pathspec);
+
+ actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+ strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+ /* wrapper name transforms */
+ strendzap (actual_cwrapper_name, ".exe");
+ tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+ XFREE (actual_cwrapper_name);
+ actual_cwrapper_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ /* target_name transforms -- use actual target program name; might have lt- prefix */
+ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+ strendzap (target_name, ".exe");
+ tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+ XFREE (target_name);
+ target_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) libtool target name: %s\n",
+ target_name);
+EOF
+
+ cat <<EOF
+ newargz[0] =
+ XMALLOC (char, (strlen (actual_cwrapper_path) +
+ strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+ strcpy (newargz[0], actual_cwrapper_path);
+ strcat (newargz[0], "$objdir");
+ strcat (newargz[0], "/");
+EOF
+
+ cat <<"EOF"
+ /* stop here, and copy so we don't have to do this twice */
+ tmp_pathspec = xstrdup (newargz[0]);
+
+ /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+ strcat (newargz[0], actual_cwrapper_name);
+
+ /* DO want the lt- prefix here if it exists, so use target_name */
+ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+ XFREE (tmp_pathspec);
+ tmp_pathspec = NULL;
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ {
+ char* p;
+ while ((p = strchr (newargz[0], '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ }
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+ XFREE (target_name);
+ XFREE (actual_cwrapper_path);
+ XFREE (actual_cwrapper_name);
+
+ lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+ lt_setenv ("DUALCASE", "1"); /* for MSK sh */
+ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must
+ be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+ because on Windows, both *_VARNAMEs are PATH but uninstalled
+ libraries must come first. */
+ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+
+ lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+ nonnull (lt_argv_zero));
+ for (i = 0; i < newargc; i++)
+ {
+ lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+ i, nonnull (newargz[i]));
+ }
+
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ /* execv doesn't actually work on mingw as expected on unix */
+ newargz = prepare_spawn (newargz);
+ rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+ if (rval == -1)
+ {
+ /* failed to start process */
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) failed to launch target \"%s\": %s\n",
+ lt_argv_zero, nonnull (strerror (errno)));
+ return 127;
+ }
+ return rval;
+EOF
+ ;;
+ *)
+ cat <<"EOF"
+ execv (lt_argv_zero, newargz);
+ return rval; /* =127, but avoids unused variable warning */
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+ void *p = (void *) malloc (num);
+ if (!p)
+ lt_fatal (__FILE__, __LINE__, "memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+ string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+ const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return base;
+}
+
+int
+check_executable (const char *path)
+{
+ struct stat st;
+
+ lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if ((stat (path, &st) >= 0)
+ && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+ return 1;
+ else
+ return 0;
+}
+
+int
+make_executable (const char *path)
+{
+ int rval = 0;
+ struct stat st;
+
+ lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if (stat (path, &st) >= 0)
+ {
+ rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+ }
+ return rval;
+}
+
+/* Searches for the full path of the wrapper. Returns
+ newly allocated full path name if found, NULL otherwise
+ Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+ int has_slash = 0;
+ const char *p;
+ const char *p_next;
+ /* static buffer for getcwd */
+ char tmp[LT_PATHMAX + 1];
+ int tmp_len;
+ char *concat_name;
+
+ lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+ nonempty (wrapper));
+
+ if ((wrapper == NULL) || (*wrapper == '\0'))
+ return NULL;
+
+ /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ else
+ {
+#endif
+ if (IS_DIR_SEPARATOR (wrapper[0]))
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ }
+#endif
+
+ for (p = wrapper; *p; p++)
+ if (*p == '/')
+ {
+ has_slash = 1;
+ break;
+ }
+ if (!has_slash)
+ {
+ /* no slashes; search PATH */
+ const char *path = getenv ("PATH");
+ if (path != NULL)
+ {
+ for (p = path; *p; p = p_next)
+ {
+ const char *q;
+ size_t p_len;
+ for (q = p; *q; q++)
+ if (IS_PATH_SEPARATOR (*q))
+ break;
+ p_len = q - p;
+ p_next = (*q == '\0' ? q : q + 1);
+ if (p_len == 0)
+ {
+ /* empty path: current directory */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
+ tmp_len = strlen (tmp);
+ concat_name =
+ XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+ }
+ else
+ {
+ concat_name =
+ XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, p, p_len);
+ concat_name[p_len] = '/';
+ strcpy (concat_name + p_len + 1, wrapper);
+ }
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ }
+ /* not found in PATH; assume curdir */
+ }
+ /* Relative path | not found in path: prepend cwd */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
+ tmp_len = strlen (tmp);
+ concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+ return xstrdup (pathspec);
+#else
+ char buf[LT_PATHMAX];
+ struct stat s;
+ char *tmp_pathspec = xstrdup (pathspec);
+ char *p;
+ int has_symlinks = 0;
+ while (strlen (tmp_pathspec) && !has_symlinks)
+ {
+ lt_debugprintf (__FILE__, __LINE__,
+ "checking path component for symlinks: %s\n",
+ tmp_pathspec);
+ if (lstat (tmp_pathspec, &s) == 0)
+ {
+ if (S_ISLNK (s.st_mode) != 0)
+ {
+ has_symlinks = 1;
+ break;
+ }
+
+ /* search backwards for last DIR_SEPARATOR */
+ p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+ while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ p--;
+ if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ {
+ /* no more DIR_SEPARATORS left */
+ break;
+ }
+ *p = '\0';
+ }
+ else
+ {
+ lt_fatal (__FILE__, __LINE__,
+ "error accessing file \"%s\": %s",
+ tmp_pathspec, nonnull (strerror (errno)));
+ }
+ }
+ XFREE (tmp_pathspec);
+
+ if (!has_symlinks)
+ {
+ return xstrdup (pathspec);
+ }
+
+ tmp_pathspec = realpath (pathspec, buf);
+ if (tmp_pathspec == 0)
+ {
+ lt_fatal (__FILE__, __LINE__,
+ "could not follow symlinks for %s", pathspec);
+ }
+ return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+ size_t len, patlen;
+
+ assert (str != NULL);
+ assert (pat != NULL);
+
+ len = strlen (str);
+ patlen = strlen (pat);
+
+ if (patlen <= len)
+ {
+ str += len - patlen;
+ if (strcmp (str, pat) == 0)
+ *str = '\0';
+ }
+ return str;
+}
+
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+ va_list args;
+ if (lt_debug)
+ {
+ (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+ va_start (args, fmt);
+ (void) vfprintf (stderr, fmt, args);
+ va_end (args);
+ }
+}
+
+static void
+lt_error_core (int exit_status, const char *file,
+ int line, const char *mode,
+ const char *message, va_list ap)
+{
+ fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *file, int line, const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+ va_end (ap);
+}
+
+static const char *
+nonnull (const char *s)
+{
+ return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+ return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_setenv) setting '%s' to '%s'\n",
+ nonnull (name), nonnull (value));
+ {
+#ifdef HAVE_SETENV
+ /* always make a copy, for consistency with !HAVE_SETENV */
+ char *str = xstrdup (value);
+ setenv (name, str, 1);
+#else
+ int len = strlen (name) + 1 + strlen (value) + 1;
+ char *str = XMALLOC (char, len);
+ sprintf (str, "%s=%s", name, value);
+ if (putenv (str) != EXIT_SUCCESS)
+ {
+ XFREE (str);
+ }
+#endif
+ }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+ char *new_value;
+ if (orig_value && *orig_value)
+ {
+ int orig_value_len = strlen (orig_value);
+ int add_len = strlen (add);
+ new_value = XMALLOC (char, add_len + orig_value_len + 1);
+ if (to_end)
+ {
+ strcpy (new_value, orig_value);
+ strcpy (new_value + orig_value_len, add);
+ }
+ else
+ {
+ strcpy (new_value, add);
+ strcpy (new_value + add_len, orig_value);
+ }
+ }
+ else
+ {
+ new_value = xstrdup (add);
+ }
+ return new_value;
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ /* some systems can't cope with a ':'-terminated path #' */
+ int len = strlen (new_value);
+ while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+ {
+ new_value[len-1] = '\0';
+ }
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+EOF
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+ Note that spawn() does not by itself call the command interpreter
+ (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+ ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&v);
+ v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+ }) ? "cmd.exe" : "command.com").
+ Instead it simply concatenates the arguments, separated by ' ', and calls
+ CreateProcess(). We must quote the arguments since Win32 CreateProcess()
+ interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+ special way:
+ - Space and tab are interpreted as delimiters. They are not treated as
+ delimiters if they are surrounded by double quotes: "...".
+ - Unescaped double quotes are removed from the input. Their only effect is
+ that within double quotes, space and tab are treated like normal
+ characters.
+ - Backslashes not followed by double quotes are not special.
+ - But 2*n+1 backslashes followed by a double quote become
+ n backslashes followed by a double quote (n >= 0):
+ \" -> "
+ \\\" -> \"
+ \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+ size_t argc;
+ char **new_argv;
+ size_t i;
+
+ /* Count number of arguments. */
+ for (argc = 0; argv[argc] != NULL; argc++)
+ ;
+
+ /* Allocate new argument vector. */
+ new_argv = XMALLOC (char *, argc + 1);
+
+ /* Put quoted arguments into the new argument vector. */
+ for (i = 0; i < argc; i++)
+ {
+ const char *string = argv[i];
+
+ if (string[0] == '\0')
+ new_argv[i] = xstrdup ("\"\"");
+ else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+ {
+ int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+ size_t length;
+ unsigned int backslashes;
+ const char *s;
+ char *quoted_string;
+ char *p;
+
+ length = 0;
+ backslashes = 0;
+ if (quote_around)
+ length++;
+ for (s = string; *s != '\0'; s++)
+ {
+ char c = *s;
+ if (c == '"')
+ length += backslashes + 1;
+ length++;
+ if (c == '\\')
+ backslashes++;
+ else
+ backslashes = 0;
+ }
+ if (quote_around)
+ length += backslashes + 1;
+
+ quoted_string = XMALLOC (char, length + 1);
+
+ p = quoted_string;
+ backslashes = 0;
+ if (quote_around)
+ *p++ = '"';
+ for (s = string; *s != '\0'; s++)
+ {
+ char c = *s;
+ if (c == '"')
+ {
+ unsigned int j;
+ for (j = backslashes + 1; j > 0; j--)
+ *p++ = '\\';
+ }
+ *p++ = c;
+ if (c == '\\')
+ backslashes++;
+ else
+ backslashes = 0;
+ }
+ if (quote_around)
+ {
+ unsigned int j;
+ for (j = backslashes; j > 0; j--)
+ *p++ = '\\';
+ *p++ = '"';
+ }
+ *p = '\0';
+
+ new_argv[i] = quoted_string;
+ }
+ else
+ new_argv[i] = (char *) string;
+ }
+ new_argv[argc] = NULL;
+
+ return new_argv;
+}
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+ func_emit_wrapper yes |
+ $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/ fputs ("\1", f);/p
+g
+D'
+ cat <<"EOF"
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+ $opt_debug
+ case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+ *import*) : ;;
+ *) false ;;
+ esac
+}
+
+# func_mode_link arg...
+func_mode_link ()
+{
+ $opt_debug
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ # It is impossible to link a dll without this setting, and
+ # we shouldn't force the makefile maintainer to figure out
+ # which system we are compiling for in order to pass an extra
+ # flag for every libtool invocation.
+ # allow_undefined=no
+
+ # FIXME: Unfortunately, there are problems with the above when trying
+ # to make a dll which has undefined symbols, in which case not
+ # even a static library is built. For now, we need to specify
+ # -no-undefined on the libtool link line when we can be certain
+ # that all symbols are satisfied, otherwise we get a static library.
+ allow_undefined=yes
+ ;;
+ *)
+ allow_undefined=yes
+ ;;
+ esac
+ libtool_args=$nonopt
+ base_compile="$nonopt $@"
+ compile_command=$nonopt
+ finalize_command=$nonopt
+
+ compile_rpath=
+ finalize_rpath=
+ compile_shlibpath=
+ finalize_shlibpath=
+ convenience=
+ old_convenience=
+ deplibs=
+ old_deplibs=
+ compiler_flags=
+ linker_flags=
+ dllsearchpath=
+ lib_search_path=`pwd`
+ inst_prefix_dir=
+ new_inherited_linker_flags=
+
+ avoid_version=no
+ bindir=
+ dlfiles=
+ dlprefiles=
+ dlself=no
+ export_dynamic=no
+ export_symbols=
+ export_symbols_regex=
+ generated=
+ libobjs=
+ ltlibs=
+ module=no
+ no_install=no
+ objs=
+ non_pic_objects=
+ precious_files_regex=
+ prefer_static_libs=no
+ preload=no
+ prev=
+ prevarg=
+ release=
+ rpath=
+ xrpath=
+ perm_rpath=
+ temp_rpath=
+ thread_safe=no
+ vinfo=
+ vinfo_number=no
+ weak_libs=
+ single_module="${wl}-single_module"
+ func_infer_tag $base_compile
+
+ # We need to know -static, to get the right output filenames.
+ for arg
+ do
+ case $arg in
+ -shared)
+ test "$build_libtool_libs" != yes && \
+ func_fatal_configuration "can not build a shared library"
+ build_old_libs=no
+ break
+ ;;
+ -all-static | -static | -static-libtool-libs)
+ case $arg in
+ -all-static)
+ if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+ func_warning "complete static linking is impossible in this configuration"
+ fi
+ if test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ -static)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=built
+ ;;
+ -static-libtool-libs)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ esac
+ build_libtool_libs=no
+ build_old_libs=yes
+ break
+ ;;
+ esac
+ done
+
+ # See if our shared archives depend on static archives.
+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+ # Go through the arguments, transforming them on the way.
+ while test "$#" -gt 0; do
+ arg="$1"
+ shift
+ func_quote_for_eval "$arg"
+ qarg=$func_quote_for_eval_unquoted_result
+ func_append libtool_args " $func_quote_for_eval_result"
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ output)
+ func_append compile_command " @OUTPUT@"
+ func_append finalize_command " @OUTPUT@"
+ ;;
+ esac
+
+ case $prev in
+ bindir)
+ bindir="$arg"
+ prev=
+ continue
+ ;;
+ dlfiles|dlprefiles)
+ if test "$preload" = no; then
+ # Add the symbol object into the linking commands.
+ func_append compile_command " @SYMFILE@"
+ func_append finalize_command " @SYMFILE@"
+ preload=yes
+ fi
+ case $arg in
+ *.la | *.lo) ;; # We handle these cases below.
+ force)
+ if test "$dlself" = no; then
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ self)
+ if test "$prev" = dlprefiles; then
+ dlself=yes
+ elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+ dlself=yes
+ else
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ *)
+ if test "$prev" = dlfiles; then
+ func_append dlfiles " $arg"
+ else
+ func_append dlprefiles " $arg"
+ fi
+ prev=
+ continue
+ ;;
+ esac
+ ;;
+ expsyms)
+ export_symbols="$arg"
+ test -f "$arg" \
+ || func_fatal_error "symbol file \`$arg' does not exist"
+ prev=
+ continue
+ ;;
+ expsyms_regex)
+ export_symbols_regex="$arg"
+ prev=
+ continue
+ ;;
+ framework)
+ case $host in
+ *-*-darwin*)
+ case "$deplibs " in
+ *" $qarg.ltframework "*) ;;
+ *) func_append deplibs " $qarg.ltframework" # this is fixed later
+ ;;
+ esac
+ ;;
+ esac
+ prev=
+ continue
+ ;;
+ inst_prefix)
+ inst_prefix_dir="$arg"
+ prev=
+ continue
+ ;;
+ objectlist)
+ if test -f "$arg"; then
+ save_arg=$arg
+ moreargs=
+ for fil in `cat "$save_arg"`
+ do
+# func_append moreargs " $fil"
+ arg=$fil
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none &&
+ test "$non_pic_object" = none; then
+ func_fatal_error "cannot find name of object for \`$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ func_append dlfiles " $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ func_append dlprefiles " $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object="$pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "\`$arg' is not a valid libtool object"
+ fi
+ fi
+ done
+ else
+ func_fatal_error "link input file \`$arg' does not exist"
+ fi
+ arg=$save_arg
+ prev=
+ continue
+ ;;
+ precious_regex)
+ precious_files_regex="$arg"
+ prev=
+ continue
+ ;;
+ release)
+ release="-$arg"
+ prev=
+ continue
+ ;;
+ rpath | xrpath)
+ # We need an absolute path.
+ case $arg in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ if test "$prev" = rpath; then
+ case "$rpath " in
+ *" $arg "*) ;;
+ *) func_append rpath " $arg" ;;
+ esac
+ else
+ case "$xrpath " in
+ *" $arg "*) ;;
+ *) func_append xrpath " $arg" ;;
+ esac
+ fi
+ prev=
+ continue
+ ;;
+ shrext)
+ shrext_cmds="$arg"
+ prev=
+ continue
+ ;;
+ weak)
+ func_append weak_libs " $arg"
+ prev=
+ continue
+ ;;
+ xcclinker)
+ func_append linker_flags " $qarg"
+ func_append compiler_flags " $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xcompiler)
+ func_append compiler_flags " $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xlinker)
+ func_append linker_flags " $qarg"
+ func_append compiler_flags " $wl$qarg"
+ prev=
+ func_append compile_command " $wl$qarg"
+ func_append finalize_command " $wl$qarg"
+ continue
+ ;;
+ *)
+ eval "$prev=\"\$arg\""
+ prev=
+ continue
+ ;;
+ esac
+ fi # test -n "$prev"
+
+ prevarg="$arg"
+
+ case $arg in
+ -all-static)
+ if test -n "$link_static_flag"; then
+ # See comment for -static flag below, for more details.
+ func_append compile_command " $link_static_flag"
+ func_append finalize_command " $link_static_flag"
+ fi
+ continue
+ ;;
+
+ -allow-undefined)
+ # FIXME: remove this flag sometime in the future.
+ func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+ ;;
+
+ -avoid-version)
+ avoid_version=yes
+ continue
+ ;;
+
+ -bindir)
+ prev=bindir
+ continue
+ ;;
+
+ -dlopen)
+ prev=dlfiles
+ continue
+ ;;
+
+ -dlpreopen)
+ prev=dlprefiles
+ continue
+ ;;
+
+ -export-dynamic)
+ export_dynamic=yes
+ continue
+ ;;
+
+ -export-symbols | -export-symbols-regex)
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ func_fatal_error "more than one -exported-symbols argument is not allowed"
+ fi
+ if test "X$arg" = "X-export-symbols"; then
+ prev=expsyms
+ else
+ prev=expsyms_regex
+ fi
+ continue
+ ;;
+
+ -framework)
+ prev=framework
+ continue
+ ;;
+
+ -inst-prefix-dir)
+ prev=inst_prefix
+ continue
+ ;;
+
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+ # so, if we see these flags be careful not to treat them like -L
+ -L[A-Z][A-Z]*:*)
+ case $with_gcc/$host in
+ no/*-*-irix* | /*-*-irix*)
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ ;;
+ esac
+ continue
+ ;;
+
+ -L*)
+ func_stripname "-L" '' "$arg"
+ if test -z "$func_stripname_result"; then
+ if test "$#" -gt 0; then
+ func_fatal_error "require no space between \`-L' and \`$1'"
+ else
+ func_fatal_error "need path for \`-L' option"
+ fi
+ fi
+ func_resolve_sysroot "$func_stripname_result"
+ dir=$func_resolve_sysroot_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ test -z "$absdir" && \
+ func_fatal_error "cannot determine absolute directory name of \`$dir'"
+ dir="$absdir"
+ ;;
+ esac
+ case "$deplibs " in
+ *" -L$dir "* | *" $arg "*)
+ # Will only happen for absolute or sysroot arguments
+ ;;
+ *)
+ # Preserve sysroot, but never include relative directories
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+ *) func_append deplibs " -L$dir" ;;
+ esac
+ func_append lib_search_path " $dir"
+ ;;
+ esac
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ ::) dllsearchpath=$dir;;
+ *) func_append dllsearchpath ":$dir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+ *) func_append dllsearchpath ":$testbindir";;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+
+ -l*)
+ if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ # These systems don't actually have a C or math library (as such)
+ continue
+ ;;
+ *-*-os2*)
+ # These systems don't actually have a C library (as such)
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc due to us having libc/libc_r.
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C and math libraries are in the System framework
+ func_append deplibs " System.ltframework"
+ continue
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ test "X$arg" = "X-lc" && continue
+ ;;
+ esac
+ elif test "X$arg" = "X-lc_r"; then
+ case $host in
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc_r directly, use -pthread flag.
+ continue
+ ;;
+ esac
+ fi
+ func_append deplibs " $arg"
+ continue
+ ;;
+
+ -module)
+ module=yes
+ continue
+ ;;
+
+ # Tru64 UNIX uses -model [arg] to determine the layout of C++
+ # classes, name mangling, and exception handling.
+ # Darwin uses the -arch flag to determine output architecture.
+ -model|-arch|-isysroot|--sysroot)
+ func_append compiler_flags " $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ prev=xcompiler
+ continue
+ ;;
+
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+ func_append compiler_flags " $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) func_append new_inherited_linker_flags " $arg" ;;
+ esac
+ continue
+ ;;
+
+ -multi_module)
+ single_module="${wl}-multi_module"
+ continue
+ ;;
+
+ -no-fast-install)
+ fast_install=no
+ continue
+ ;;
+
+ -no-install)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+ # The PATH hackery in wrapper scripts is required on Windows
+ # and Darwin in order for the loader to find any dlls it needs.
+ func_warning "\`-no-install' is ignored for $host"
+ func_warning "assuming \`-no-fast-install' instead"
+ fast_install=no
+ ;;
+ *) no_install=yes ;;
+ esac
+ continue
+ ;;
+
+ -no-undefined)
+ allow_undefined=no
+ continue
+ ;;
+
+ -objectlist)
+ prev=objectlist
+ continue
+ ;;
+
+ -o) prev=output ;;
+
+ -precious-files-regex)
+ prev=precious_regex
+ continue
+ ;;
+
+ -release)
+ prev=release
+ continue
+ ;;
+
+ -rpath)
+ prev=rpath
+ continue
+ ;;
+
+ -R)
+ prev=xrpath
+ continue
+ ;;
+
+ -R*)
+ func_stripname '-R' '' "$arg"
+ dir=$func_stripname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ =*)
+ func_stripname '=' '' "$dir"
+ dir=$lt_sysroot$func_stripname_result
+ ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) func_append xrpath " $dir" ;;
+ esac
+ continue
+ ;;
+
+ -shared)
+ # The effects of -shared are defined in a previous loop.
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
+ -static | -static-libtool-libs)
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+ # would be equivalent was wrong. It would break on at least
+ # Digital Unix and AIX.
+ continue
+ ;;
+
+ -thread-safe)
+ thread_safe=yes
+ continue
+ ;;
+
+ -version-info)
+ prev=vinfo
+ continue
+ ;;
+
+ -version-number)
+ prev=vinfo
+ vinfo_number=yes
+ continue
+ ;;
+
+ -weak)
+ prev=weak
+ continue
+ ;;
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$flag"
+ func_append arg " $func_quote_for_eval_result"
+ func_append compiler_flags " $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Wl,*)
+ func_stripname '-Wl,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$flag"
+ func_append arg " $wl$func_quote_for_eval_result"
+ func_append compiler_flags " $wl$func_quote_for_eval_result"
+ func_append linker_flags " $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Xlinker)
+ prev=xlinker
+ continue
+ ;;
+
+ -XCClinker)
+ prev=xcclinker
+ continue
+ ;;
+
+ # -msg_* for osf cc
+ -msg_*)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ ;;
+
+ # Flags to be passed through unchanged, with rationale:
+ # -64, -mips[0-9] enable 64-bit mode for the SGI compiler
+ # -r[0-9][0-9]* specify processor for the SGI compiler
+ # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+ # +DA*, +DD* enable 64-bit mode for the HP compiler
+ # -q* compiler args for the IBM compiler
+ # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+ # -F/path path to uninstalled frameworks, gcc on darwin
+ # -p, -pg, --coverage, -fprofile-* profiling flags for GCC
+ # @file GCC response files
+ # -tp=* Portland pgcc target processor selection
+ # --sysroot=* for sysroot support
+ # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+ -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ func_append compiler_flags " $arg"
+ continue
+ ;;
+
+ # Some other compiler flag.
+ -* | +*)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ ;;
+
+ *.$objext)
+ # A standard object.
+ func_append objs " $arg"
+ ;;
+
+ *.lo)
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none &&
+ test "$non_pic_object" = none; then
+ func_fatal_error "cannot find name of object for \`$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ func_append dlfiles " $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ func_append dlprefiles " $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object="$pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "\`$arg' is not a valid libtool object"
+ fi
+ fi
+ ;;
+
+ *.$libext)
+ # An archive.
+ func_append deplibs " $arg"
+ func_append old_deplibs " $arg"
+ continue
+ ;;
+
+ *.la)
+ # A libtool-controlled library.
+
+ func_resolve_sysroot "$arg"
+ if test "$prev" = dlfiles; then
+ # This library was specified with -dlopen.
+ func_append dlfiles " $func_resolve_sysroot_result"
+ prev=
+ elif test "$prev" = dlprefiles; then
+ # The library was specified with -dlpreopen.
+ func_append dlprefiles " $func_resolve_sysroot_result"
+ prev=
+ else
+ func_append deplibs " $func_resolve_sysroot_result"
+ fi
+ continue
+ ;;
+
+ # Some other compiler argument.
+ *)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ ;;
+ esac # arg
+
+ # Now actually substitute the argument into the commands.
+ if test -n "$arg"; then
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+ done # argument parsing loop
+
+ test -n "$prev" && \
+ func_fatal_help "the \`$prevarg' option requires an argument"
+
+ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+ eval arg=\"$export_dynamic_flag_spec\"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+
+ oldlibs=
+ # calculate the name of the file, without its directory
+ func_basename "$output"
+ outputname="$func_basename_result"
+ libobjs_save="$libobjs"
+
+ if test -n "$shlibpath_var"; then
+ # get the directories listed in $shlibpath_var
+ eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
+ else
+ shlib_search_path=
+ fi
+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+ func_dirname "$output" "/" ""
+ output_objdir="$func_dirname_result$objdir"
+ func_to_tool_file "$output_objdir/"
+ tool_output_objdir=$func_to_tool_file_result
+ # Create the object directory.
+ func_mkdir_p "$output_objdir"
+
+ # Determine the type of output
+ case $output in
+ "")
+ func_fatal_help "you must specify an output file"
+ ;;
+ *.$libext) linkmode=oldlib ;;
+ *.lo | *.$objext) linkmode=obj ;;
+ *.la) linkmode=lib ;;
+ *) linkmode=prog ;; # Anything else should be a program.
+ esac
+
+ specialdeplibs=
+
+ libs=
+ # Find all interdependent deplibs by searching for libraries
+ # that are linked more than once (e.g. -la -lb -la)
+ for deplib in $deplibs; do
+ if $opt_preserve_dup_deps ; then
+ case "$libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append libs " $deplib"
+ done
+
+ if test "$linkmode" = lib; then
+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+ # Compute libraries that are listed more than once in $predeps
+ # $postdeps and mark them as special (i.e., whose duplicates are
+ # not to be eliminated).
+ pre_post_deps=
+ if $opt_duplicate_compiler_generated_deps; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+ *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
+ esac
+ func_append pre_post_deps " $pre_post_dep"
+ done
+ fi
+ pre_post_deps=
+ fi
+
+ deplibs=
+ newdependency_libs=
+ newlib_search_path=
+ need_relink=no # whether we're linking any uninstalled libtool libraries
+ notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+
+ case $linkmode in
+ lib)
+ passes="conv dlpreopen link"
+ for file in $dlfiles $dlprefiles; do
+ case $file in
+ *.la) ;;
+ *)
+ func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+ ;;
+ esac
+ done
+ ;;
+ prog)
+ compile_deplibs=
+ finalize_deplibs=
+ alldeplibs=no
+ newdlfiles=
+ newdlprefiles=
+ passes="conv scan dlopen dlpreopen link"
+ ;;
+ *) passes="conv"
+ ;;
+ esac
+
+ for pass in $passes; do
+ # The preopen pass in lib mode reverses $deplibs; put it back here
+ # so that -L comes before libs that need it for instance...
+ if test "$linkmode,$pass" = "lib,link"; then
+ ## FIXME: Find the place where the list is rebuilt in the wrong
+ ## order, and fix it there properly
+ tmp_deplibs=
+ for deplib in $deplibs; do
+ tmp_deplibs="$deplib $tmp_deplibs"
+ done
+ deplibs="$tmp_deplibs"
+ fi
+
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan"; then
+ libs="$deplibs"
+ deplibs=
+ fi
+ if test "$linkmode" = prog; then
+ case $pass in
+ dlopen) libs="$dlfiles" ;;
+ dlpreopen) libs="$dlprefiles" ;;
+ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ esac
+ fi
+ if test "$linkmode,$pass" = "lib,dlpreopen"; then
+ # Collect and forward deplibs of preopened libtool libs
+ for lib in $dlprefiles; do
+ # Ignore non-libtool-libs
+ dependency_libs=
+ func_resolve_sysroot "$lib"
+ case $lib in
+ *.la) func_source "$func_resolve_sysroot_result" ;;
+ esac
+
+ # Collect preopened libtool deplibs, except any this library
+ # has declared as weak libs
+ for deplib in $dependency_libs; do
+ func_basename "$deplib"
+ deplib_base=$func_basename_result
+ case " $weak_libs " in
+ *" $deplib_base "*) ;;
+ *) func_append deplibs " $deplib" ;;
+ esac
+ done
+ done
+ libs="$dlprefiles"
+ fi
+ if test "$pass" = dlopen; then
+ # Collect dlpreopened libraries
+ save_deplibs="$deplibs"
+ deplibs=
+ fi
+
+ for deplib in $libs; do
+ lib=
+ found=no
+ case $deplib in
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ func_append compiler_flags " $deplib"
+ if test "$linkmode" = lib ; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) func_append new_inherited_linker_flags " $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -l*)
+ if test "$linkmode" != lib && test "$linkmode" != prog; then
+ func_warning "\`-l' is ignored for archives/objects"
+ continue
+ fi
+ func_stripname '-l' '' "$deplib"
+ name=$func_stripname_result
+ if test "$linkmode" = lib; then
+ searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+ else
+ searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+ fi
+ for searchdir in $searchdirs; do
+ for search_ext in .la $std_shrext .so .a; do
+ # Search the libtool library
+ lib="$searchdir/lib${name}${search_ext}"
+ if test -f "$lib"; then
+ if test "$search_ext" = ".la"; then
+ found=yes
+ else
+ found=no
+ fi
+ break 2
+ fi
+ done
+ done
+ if test "$found" != yes; then
+ # deplib doesn't seem to be a libtool library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ else # deplib is a libtool library
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+ # We need to do some special things here, and not later.
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $deplib "*)
+ if func_lalib_p "$lib"; then
+ library_names=
+ old_library=
+ func_source "$lib"
+ for l in $old_library $library_names; do
+ ll="$l"
+ done
+ if test "X$ll" = "X$old_library" ; then # only static version available
+ found=no
+ func_dirname "$lib" "" "."
+ ladir="$func_dirname_result"
+ lib=$ladir/$old_library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ fi
+ ;;
+ *) ;;
+ esac
+ fi
+ fi
+ ;; # -l
+ *.ltframework)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ if test "$linkmode" = lib ; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) func_append new_inherited_linker_flags " $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -L*)
+ case $linkmode in
+ lib)
+ deplibs="$deplib $deplibs"
+ test "$pass" = conv && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ prog)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ if test "$pass" = scan; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ *)
+ func_warning "\`-L' is ignored for archives/objects"
+ ;;
+ esac # linkmode
+ continue
+ ;; # -L
+ -R*)
+ if test "$pass" = link; then
+ func_stripname '-R' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ dir=$func_resolve_sysroot_result
+ # Make sure the xrpath contains only unique directories.
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) func_append xrpath " $dir" ;;
+ esac
+ fi
+ deplibs="$deplib $deplibs"
+ continue
+ ;;
+ *.la)
+ func_resolve_sysroot "$deplib"
+ lib=$func_resolve_sysroot_result
+ ;;
+ *.$libext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ case $linkmode in
+ lib)
+ # Linking convenience modules into shared libraries is allowed,
+ # but linking other static libraries is non-portable.
+ case " $dlpreconveniencelibs " in
+ *" $deplib "*) ;;
+ *)
+ valid_a_lib=no
+ case $deplibs_check_method in
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
+ | $EGREP "$match_pattern_regex" > /dev/null; then
+ valid_a_lib=yes
+ fi
+ ;;
+ pass_all)
+ valid_a_lib=yes
+ ;;
+ esac
+ if test "$valid_a_lib" != yes; then
+ echo
+ $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because the file extensions .$libext of this argument makes me believe"
+ echo "*** that it is just a static archive that I should not use here."
+ else
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the"
+ $ECHO "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ fi
+ ;;
+ esac
+ continue
+ ;;
+ prog)
+ if test "$pass" != link; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ continue
+ ;;
+ esac # linkmode
+ ;; # *.$libext
+ *.lo | *.$objext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ elif test "$linkmode" = prog; then
+ if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+ func_append newdlprefiles " $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ func_append newdlfiles " $deplib"
+ fi
+ fi
+ continue
+ ;;
+ %DEPLIBS%)
+ alldeplibs=yes
+ continue
+ ;;
+ esac # case $deplib
+
+ if test "$found" = yes || test -f "$lib"; then :
+ else
+ func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+ fi
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$lib" \
+ || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+ func_dirname "$lib" "" "."
+ ladir="$func_dirname_result"
+
+ dlname=
+ dlopen=
+ dlpreopen=
+ libdir=
+ library_names=
+ old_library=
+ inherited_linker_flags=
+ # If the library was installed with an old release of libtool,
+ # it will not redefine variables installed, or shouldnotlink
+ installed=yes
+ shouldnotlink=no
+ avoidtemprpath=
+
+
+ # Read the .la file
+ func_source "$lib"
+
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+ *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
+ esac
+ done
+ fi
+ dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan" ||
+ { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+ test -n "$dlopen" && func_append dlfiles " $dlopen"
+ test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
+ fi
+
+ if test "$pass" = conv; then
+ # Only check for convenience libraries
+ deplibs="$lib $deplibs"
+ if test -z "$libdir"; then
+ if test -z "$old_library"; then
+ func_fatal_error "cannot find name of link library for \`$lib'"
+ fi
+ # It is a libtool convenience library, so add in its objects.
+ func_append convenience " $ladir/$objdir/$old_library"
+ func_append old_convenience " $ladir/$objdir/$old_library"
+ elif test "$linkmode" != prog && test "$linkmode" != lib; then
+ func_fatal_error "\`$lib' is not a convenience library"
+ fi
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_preserve_dup_deps ; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done
+ continue
+ fi # $pass = conv
+
+
+ # Get the name of the library we link against.
+ linklib=
+ if test -n "$old_library" &&
+ { test "$prefer_static_libs" = yes ||
+ test "$prefer_static_libs,$installed" = "built,no"; }; then
+ linklib=$old_library
+ else
+ for l in $old_library $library_names; do
+ linklib="$l"
+ done
+ fi
+ if test -z "$linklib"; then
+ func_fatal_error "cannot find name of link library for \`$lib'"
+ fi
+
+ # This library was specified with -dlopen.
+ if test "$pass" = dlopen; then
+ if test -z "$libdir"; then
+ func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+ fi
+ if test -z "$dlname" ||
+ test "$dlopen_support" != yes ||
+ test "$build_libtool_libs" = no; then
+ # If there is no dlname, no dlopen support or we're linking
+ # statically, we need to preload. We also need to preload any
+ # dependent libraries so libltdl's deplib preloader doesn't
+ # bomb out in the load deplibs phase.
+ func_append dlprefiles " $lib $dependency_libs"
+ else
+ func_append newdlfiles " $lib"
+ fi
+ continue
+ fi # $pass = dlopen
+
+ # We need an absolute path.
+ case $ladir in
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+ *)
+ abs_ladir=`cd "$ladir" && pwd`
+ if test -z "$abs_ladir"; then
+ func_warning "cannot determine absolute directory name of \`$ladir'"
+ func_warning "passing it literally to the linker, although it might fail"
+ abs_ladir="$ladir"
+ fi
+ ;;
+ esac
+ func_basename "$lib"
+ laname="$func_basename_result"
+
+ # Find the relevant object directory and library name.
+ if test "X$installed" = Xyes; then
+ if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ func_warning "library \`$lib' was moved."
+ dir="$ladir"
+ absdir="$abs_ladir"
+ libdir="$abs_ladir"
+ else
+ dir="$lt_sysroot$libdir"
+ absdir="$lt_sysroot$libdir"
+ fi
+ test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+ else
+ if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ dir="$ladir"
+ absdir="$abs_ladir"
+ # Remove this search path later
+ func_append notinst_path " $abs_ladir"
+ else
+ dir="$ladir/$objdir"
+ absdir="$abs_ladir/$objdir"
+ # Remove this search path later
+ func_append notinst_path " $abs_ladir"
+ fi
+ fi # $installed = yes
+ func_stripname 'lib' '.la' "$laname"
+ name=$func_stripname_result
+
+ # This library was specified with -dlpreopen.
+ if test "$pass" = dlpreopen; then
+ if test -z "$libdir" && test "$linkmode" = prog; then
+ func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+ fi
+ case "$host" in
+ # special handling for platforms with PE-DLLs.
+ *cygwin* | *mingw* | *cegcc* )
+ # Linker will automatically link against shared library if both
+ # static and shared are present. Therefore, ensure we extract
+ # symbols from the import library if a shared library is present
+ # (otherwise, the dlopen module name will be incorrect). We do
+ # this by putting the import library name into $newdlprefiles.
+ # We recover the dlopen module name by 'saving' the la file
+ # name in a special purpose variable, and (later) extracting the
+ # dlname from the la file.
+ if test -n "$dlname"; then
+ func_tr_sh "$dir/$linklib"
+ eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+ func_append newdlprefiles " $dir/$linklib"
+ else
+ func_append newdlprefiles " $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ func_append dlpreconveniencelibs " $dir/$old_library"
+ fi
+ ;;
+ * )
+ # Prefer using a static library (so that no silly _DYNAMIC symbols
+ # are required to link).
+ if test -n "$old_library"; then
+ func_append newdlprefiles " $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ func_append dlpreconveniencelibs " $dir/$old_library"
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
+ elif test -n "$dlname"; then
+ func_append newdlprefiles " $dir/$dlname"
+ else
+ func_append newdlprefiles " $dir/$linklib"
+ fi
+ ;;
+ esac
+ fi # $pass = dlpreopen
+
+ if test -z "$libdir"; then
+ # Link the convenience library
+ if test "$linkmode" = lib; then
+ deplibs="$dir/$old_library $deplibs"
+ elif test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$dir/$old_library $compile_deplibs"
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
+ else
+ deplibs="$lib $deplibs" # used for prog,scan pass
+ fi
+ continue
+ fi
+
+
+ if test "$linkmode" = prog && test "$pass" != link; then
+ func_append newlib_search_path " $ladir"
+ deplibs="$lib $deplibs"
+
+ linkalldeplibs=no
+ if test "$link_all_deplibs" != no || test -z "$library_names" ||
+ test "$build_libtool_libs" = no; then
+ linkalldeplibs=yes
+ fi
+
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ esac
+ # Need to link against all dependency_libs?
+ if test "$linkalldeplibs" = yes; then
+ deplibs="$deplib $deplibs"
+ else
+ # Need to hardcode shared library paths
+ # or/and link against static libraries
+ newdependency_libs="$deplib $newdependency_libs"
+ fi
+ if $opt_preserve_dup_deps ; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done # for deplib
+ continue
+ fi # $linkmode = prog...
+
+ if test "$linkmode,$pass" = "prog,link"; then
+ if test -n "$library_names" &&
+ { { test "$prefer_static_libs" = no ||
+ test "$prefer_static_libs,$installed" = "built,yes"; } ||
+ test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+ # Make sure the rpath contains only unique directories.
+ case "$temp_rpath:" in
+ *"$absdir:"*) ;;
+ *) func_append temp_rpath "$absdir:" ;;
+ esac
+ fi
+
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) func_append compile_rpath " $absdir" ;;
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ ;;
+ esac
+ fi # $linkmode,$pass = prog,link...
+
+ if test "$alldeplibs" = yes &&
+ { test "$deplibs_check_method" = pass_all ||
+ { test "$build_libtool_libs" = yes &&
+ test -n "$library_names"; }; }; then
+ # We only need to search for static libraries
+ continue
+ fi
+ fi
+
+ link_static=no # Whether the deplib will be linked statically
+ use_static_libs=$prefer_static_libs
+ if test "$use_static_libs" = built && test "$installed" = yes; then
+ use_static_libs=no
+ fi
+ if test -n "$library_names" &&
+ { test "$use_static_libs" = no || test -z "$old_library"; }; then
+ case $host in
+ *cygwin* | *mingw* | *cegcc*)
+ # No point in relinking DLLs because paths are not encoded
+ func_append notinst_deplibs " $lib"
+ need_relink=no
+ ;;
+ *)
+ if test "$installed" = no; then
+ func_append notinst_deplibs " $lib"
+ need_relink=yes
+ fi
+ ;;
+ esac
+ # This is a shared library
+
+ # Warn about portability, can't link against -module's on some
+ # systems (darwin). Don't bleat about dlopened modules though!
+ dlopenmodule=""
+ for dlpremoduletest in $dlprefiles; do
+ if test "X$dlpremoduletest" = "X$lib"; then
+ dlopenmodule="$dlpremoduletest"
+ break
+ fi
+ done
+ if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+ echo
+ if test "$linkmode" = prog; then
+ $ECHO "*** Warning: Linking the executable $output against the loadable module"
+ else
+ $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+ fi
+ $ECHO "*** $linklib is not portable!"
+ fi
+ if test "$linkmode" = lib &&
+ test "$hardcode_into_libs" = yes; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) func_append compile_rpath " $absdir" ;;
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ ;;
+ esac
+ fi
+
+ if test -n "$old_archive_from_expsyms_cmds"; then
+ # figure out the soname
+ set dummy $library_names
+ shift
+ realname="$1"
+ shift
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ # use dlname if we got it. it's perfectly good, no?
+ if test -n "$dlname"; then
+ soname="$dlname"
+ elif test -n "$soname_spec"; then
+ # bleh windows
+ case $host in
+ *cygwin* | mingw* | *cegcc*)
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix="-$major"
+ ;;
+ esac
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+
+ # Make a new name for the extract_expsyms_cmds to use
+ soroot="$soname"
+ func_basename "$soroot"
+ soname="$func_basename_result"
+ func_stripname 'lib' '.dll' "$soname"
+ newlib=libimp-$func_stripname_result.a
+
+ # If the library has no export list, then create one now
+ if test -f "$output_objdir/$soname-def"; then :
+ else
+ func_verbose "extracting exported symbol list from \`$soname'"
+ func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+ fi
+
+ # Create $newlib
+ if test -f "$output_objdir/$newlib"; then :; else
+ func_verbose "generating import library for \`$soname'"
+ func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+ fi
+ # make sure the library variables are pointing to the new library
+ dir=$output_objdir
+ linklib=$newlib
+ fi # test -n "$old_archive_from_expsyms_cmds"
+
+ if test "$linkmode" = prog || test "$opt_mode" != relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ lib_linked=yes
+ case $hardcode_action in
+ immediate | unsupported)
+ if test "$hardcode_direct" = no; then
+ add="$dir/$linklib"
+ case $host in
+ *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+ *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+ *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+ *-*-unixware7*) add_dir="-L$dir" ;;
+ *-*-darwin* )
+ # if the lib is a (non-dlopened) module then we can not
+ # link against it, someone is ignoring the earlier warnings
+ if /usr/bin/file -L $add 2> /dev/null |
+ $GREP ": [^:]* bundle" >/dev/null ; then
+ if test "X$dlopenmodule" != "X$lib"; then
+ $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+ if test -z "$old_library" ; then
+ echo
+ echo "*** And there doesn't seem to be a static archive available"
+ echo "*** The link will probably fail, sorry"
+ else
+ add="$dir/$old_library"
+ fi
+ elif test -n "$old_library"; then
+ add="$dir/$old_library"
+ fi
+ fi
+ esac
+ elif test "$hardcode_minus_L" = no; then
+ case $host in
+ *-*-sunos*) add_shlibpath="$dir" ;;
+ esac
+ add_dir="-L$dir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = no; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ relink)
+ if test "$hardcode_direct" = yes &&
+ test "$hardcode_direct_absolute" = no; then
+ add="$dir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$absdir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ func_append add_dir " -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ *) lib_linked=no ;;
+ esac
+
+ if test "$lib_linked" != yes; then
+ func_fatal_configuration "unsupported hardcode properties"
+ fi
+
+ if test -n "$add_shlibpath"; then
+ case :$compile_shlibpath: in
+ *":$add_shlibpath:"*) ;;
+ *) func_append compile_shlibpath "$add_shlibpath:" ;;
+ esac
+ fi
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ if test "$hardcode_direct" != yes &&
+ test "$hardcode_minus_L" != yes &&
+ test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) func_append finalize_shlibpath "$libdir:" ;;
+ esac
+ fi
+ fi
+ fi
+
+ if test "$linkmode" = prog || test "$opt_mode" = relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ # Finalize command for both is simple: just hardcode it.
+ if test "$hardcode_direct" = yes &&
+ test "$hardcode_direct_absolute" = no; then
+ add="$libdir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$libdir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) func_append finalize_shlibpath "$libdir:" ;;
+ esac
+ add="-l$name"
+ elif test "$hardcode_automatic" = yes; then
+ if test -n "$inst_prefix_dir" &&
+ test -f "$inst_prefix_dir$libdir/$linklib" ; then
+ add="$inst_prefix_dir$libdir/$linklib"
+ else
+ add="$libdir/$linklib"
+ fi
+ else
+ # We cannot seem to hardcode it, guess we'll fake it.
+ add_dir="-L$libdir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ func_append add_dir " -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ fi
+
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ fi
+ fi
+ elif test "$linkmode" = prog; then
+ # Here we assume that one of hardcode_direct or hardcode_minus_L
+ # is not unsupported. This is valid on all known static and
+ # shared platforms.
+ if test "$hardcode_direct" != unsupported; then
+ test -n "$old_library" && linklib="$old_library"
+ compile_deplibs="$dir/$linklib $compile_deplibs"
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
+ else
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+ fi
+ elif test "$build_libtool_libs" = yes; then
+ # Not a shared library
+ if test "$deplibs_check_method" != pass_all; then
+ # We're trying link a shared library against a static one
+ # but the system doesn't support it.
+
+ # Just print a warning and add the library to dependency_libs so
+ # that the program can be linked against the static library.
+ echo
+ $ECHO "*** Warning: This system can not link to static lib archive $lib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have."
+ if test "$module" = yes; then
+ echo "*** But as you try to build a module library, libtool will still create "
+ echo "*** a static module, that should work as long as the dlopening application"
+ echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ if test -z "$global_symbol_pipe"; then
+ echo
+ echo "*** However, this would only work if libtool was able to extract symbol"
+ echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ echo "*** not find such a program. So, this module is probably useless."
+ echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ else
+ deplibs="$dir/$old_library $deplibs"
+ link_static=yes
+ fi
+ fi # link shared/static library?
+
+ if test "$linkmode" = lib; then
+ if test -n "$dependency_libs" &&
+ { test "$hardcode_into_libs" != yes ||
+ test "$build_old_libs" = yes ||
+ test "$link_static" = yes; }; then
+ # Extract -R from dependency_libs
+ temp_deplibs=
+ for libdir in $dependency_libs; do
+ case $libdir in
+ -R*) func_stripname '-R' '' "$libdir"
+ temp_xrpath=$func_stripname_result
+ case " $xrpath " in
+ *" $temp_xrpath "*) ;;
+ *) func_append xrpath " $temp_xrpath";;
+ esac;;
+ *) func_append temp_deplibs " $libdir";;
+ esac
+ done
+ dependency_libs="$temp_deplibs"
+ fi
+
+ func_append newlib_search_path " $absdir"
+ # Link against this library
+ test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ # ... and its dependency_libs
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result";;
+ *) func_resolve_sysroot "$deplib" ;;
+ esac
+ if $opt_preserve_dup_deps ; then
+ case "$tmp_libs " in
+ *" $func_resolve_sysroot_result "*)
+ func_append specialdeplibs " $func_resolve_sysroot_result" ;;
+ esac
+ fi
+ func_append tmp_libs " $func_resolve_sysroot_result"
+ done
+
+ if test "$link_all_deplibs" != no; then
+ # Add the search paths of all dependency libraries
+ for deplib in $dependency_libs; do
+ path=
+ case $deplib in
+ -L*) path="$deplib" ;;
+ *.la)
+ func_resolve_sysroot "$deplib"
+ deplib=$func_resolve_sysroot_result
+ func_dirname "$deplib" "" "."
+ dir=$func_dirname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ func_warning "cannot determine absolute directory name of \`$dir'"
+ absdir="$dir"
+ fi
+ ;;
+ esac
+ if $GREP "^installed=no" $deplib > /dev/null; then
+ case $host in
+ *-*-darwin*)
+ depdepl=
+ eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+ if test -n "$deplibrary_names" ; then
+ for tmp in $deplibrary_names ; do
+ depdepl=$tmp
+ done
+ if test -f "$absdir/$objdir/$depdepl" ; then
+ depdepl="$absdir/$objdir/$depdepl"
+ darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ if test -z "$darwin_install_name"; then
+ darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ fi
+ func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+ func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
+ path=
+ fi
+ fi
+ ;;
+ *)
+ path="-L$absdir/$objdir"
+ ;;
+ esac
+ else
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
+ test "$absdir" != "$libdir" && \
+ func_warning "\`$deplib' seems to be moved"
+
+ path="-L$absdir"
+ fi
+ ;;
+ esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$path $deplibs" ;;
+ esac
+ done
+ fi # link_all_deplibs != no
+ fi # linkmode = lib
+ done # for deplib in $libs
+ if test "$pass" = link; then
+ if test "$linkmode" = "prog"; then
+ compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+ finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ fi
+ fi
+ dependency_libs="$newdependency_libs"
+ if test "$pass" = dlpreopen; then
+ # Link the dlpreopened libraries before other libraries
+ for deplib in $save_deplibs; do
+ deplibs="$deplib $deplibs"
+ done
+ fi
+ if test "$pass" != dlopen; then
+ if test "$pass" != conv; then
+ # Make sure lib_search_path contains only unique directories.
+ lib_search_path=
+ for dir in $newlib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+ *) func_append lib_search_path " $dir" ;;
+ esac
+ done
+ newlib_search_path=
+ fi
+
+ if test "$linkmode,$pass" != "prog,link"; then
+ vars="deplibs"
+ else
+ vars="compile_deplibs finalize_deplibs"
+ fi
+ for var in $vars dependency_libs; do
+ # Add libraries to $var in reverse order
+ eval tmp_libs=\"\$$var\"
+ new_libs=
+ for deplib in $tmp_libs; do
+ # FIXME: Pedantically, this is the right thing to do, so
+ # that some nasty dependency loop isn't accidentally
+ # broken:
+ #new_libs="$deplib $new_libs"
+ # Pragmatically, this seems to cause very few problems in
+ # practice:
+ case $deplib in
+ -L*) new_libs="$deplib $new_libs" ;;
+ -R*) ;;
+ *)
+ # And here is the reason: when a library appears more
+ # than once as an explicit dependence of a library, or
+ # is implicitly linked in more than once by the
+ # compiler, it is considered special, and multiple
+ # occurrences thereof are not removed. Compare this
+ # with having the same library being listed as a
+ # dependency of multiple other libraries: in this case,
+ # we know (pedantically, we assume) the library does not
+ # need to be listed more than once, so we keep only the
+ # last copy. This is not always right, but it is rare
+ # enough that we require users that really mean to play
+ # such unportable linking tricks to link the library
+ # using -Wl,-lname, so that libtool does not consider it
+ # for duplicate removal.
+ case " $specialdeplibs " in
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$deplib $new_libs" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ done
+ tmp_libs=
+ for deplib in $new_libs; do
+ case $deplib in
+ -L*)
+ case " $tmp_libs " in
+ *" $deplib "*) ;;
+ *) func_append tmp_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append tmp_libs " $deplib" ;;
+ esac
+ done
+ eval $var=\"$tmp_libs\"
+ done # for var
+ fi
+ # Last step: remove runtime libs from dependency_libs
+ # (they stay in deplibs)
+ tmp_libs=
+ for i in $dependency_libs ; do
+ case " $predeps $postdeps $compiler_lib_search_path " in
+ *" $i "*)
+ i=""
+ ;;
+ esac
+ if test -n "$i" ; then
+ func_append tmp_libs " $i"
+ fi
+ done
+ dependency_libs=$tmp_libs
+ done # for pass
+ if test "$linkmode" = prog; then
+ dlfiles="$newdlfiles"
+ fi
+ if test "$linkmode" = prog || test "$linkmode" = lib; then
+ dlprefiles="$newdlprefiles"
+ fi
+
+ case $linkmode in
+ oldlib)
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ func_warning "\`-dlopen' is ignored for archives"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "\`-l' and \`-L' are ignored for archives" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "\`-rpath' is ignored for archives"
+
+ test -n "$xrpath" && \
+ func_warning "\`-R' is ignored for archives"
+
+ test -n "$vinfo" && \
+ func_warning "\`-version-info/-version-number' is ignored for archives"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for archives"
+
+ test -n "$export_symbols$export_symbols_regex" && \
+ func_warning "\`-export-symbols' is ignored for archives"
+
+ # Now set the variables for building old libraries.
+ build_libtool_libs=no
+ oldlibs="$output"
+ func_append objs "$old_deplibs"
+ ;;
+
+ lib)
+ # Make sure we only generate libraries of the form `libNAME.la'.
+ case $outputname in
+ lib*)
+ func_stripname 'lib' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ ;;
+ *)
+ test "$module" = no && \
+ func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+ if test "$need_lib_prefix" != no; then
+ # Add the "lib" prefix for modules if required
+ func_stripname '' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ else
+ func_stripname '' '.la' "$outputname"
+ libname=$func_stripname_result
+ fi
+ ;;
+ esac
+
+ if test -n "$objs"; then
+ if test "$deplibs_check_method" != pass_all; then
+ func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+ else
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+ $ECHO "*** objects $objs is not portable!"
+ func_append libobjs " $objs"
+ fi
+ fi
+
+ test "$dlself" != no && \
+ func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+ set dummy $rpath
+ shift
+ test "$#" -gt 1 && \
+ func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+ install_libdir="$1"
+
+ oldlibs=
+ if test -z "$rpath"; then
+ if test "$build_libtool_libs" = yes; then
+ # Building a libtool convenience library.
+ # Some compilers have problems with a `.al' extension so
+ # convenience libraries should have the same extension an
+ # archive normally would.
+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
+ build_libtool_libs=convenience
+ build_old_libs=yes
+ fi
+
+ test -n "$vinfo" && \
+ func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for convenience libraries"
+ else
+
+ # Parse the version information argument.
+ save_ifs="$IFS"; IFS=':'
+ set dummy $vinfo 0 0 0
+ shift
+ IFS="$save_ifs"
+
+ test -n "$7" && \
+ func_fatal_help "too many parameters to \`-version-info'"
+
+ # convert absolute version numbers to libtool ages
+ # this retains compatibility with .la files and attempts
+ # to make the code below a bit more comprehensible
+
+ case $vinfo_number in
+ yes)
+ number_major="$1"
+ number_minor="$2"
+ number_revision="$3"
+ #
+ # There are really only two kinds -- those that
+ # use the current revision as the major version
+ # and those that subtract age and use age as
+ # a minor version. But, then there is irix
+ # which has an extra 1 added just for fun
+ #
+ case $version_type in
+ # correct linux to gnu/linux during the next big refactor
+ darwin|linux|osf|windows|none)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age="$number_minor"
+ revision="$number_revision"
+ ;;
+ freebsd-aout|freebsd-elf|qnx|sunos)
+ current="$number_major"
+ revision="$number_minor"
+ age="0"
+ ;;
+ irix|nonstopux)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age="$number_minor"
+ revision="$number_minor"
+ lt_irix_increment=no
+ ;;
+ esac
+ ;;
+ no)
+ current="$1"
+ revision="$2"
+ age="$3"
+ ;;
+ esac
+
+ # Check that each of the things are valid numbers.
+ case $current in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "CURRENT \`$current' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $revision in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "REVISION \`$revision' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $age in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "AGE \`$age' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ ;;
+ esac
+
+ if test "$age" -gt "$current"; then
+ func_error "AGE \`$age' is greater than the current interface number \`$current'"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ fi
+
+ # Calculate the version variables.
+ major=
+ versuffix=
+ verstring=
+ case $version_type in
+ none) ;;
+
+ darwin)
+ # Like Linux, but with the current version available in
+ # verstring for coding it into the library header
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix="$major.$age.$revision"
+ # Darwin ld doesn't like 0 for these options...
+ func_arith $current + 1
+ minor_current=$func_arith_result
+ xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+
+ freebsd-aout)
+ major=".$current"
+ versuffix=".$current.$revision";
+ ;;
+
+ freebsd-elf)
+ major=".$current"
+ versuffix=".$current"
+ ;;
+
+ irix | nonstopux)
+ if test "X$lt_irix_increment" = "Xno"; then
+ func_arith $current - $age
+ else
+ func_arith $current - $age + 1
+ fi
+ major=$func_arith_result
+
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+ esac
+ verstring="$verstring_prefix$major.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$revision
+ while test "$loop" -ne 0; do
+ func_arith $revision - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring="$verstring_prefix$major.$iface:$verstring"
+ done
+
+ # Before this point, $major must not contain `.'.
+ major=.$major
+ versuffix="$major.$revision"
+ ;;
+
+ linux) # correct to gnu/linux during the next big refactor
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix="$major.$age.$revision"
+ ;;
+
+ osf)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=".$current.$age.$revision"
+ verstring="$current.$age.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$age
+ while test "$loop" -ne 0; do
+ func_arith $current - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring="$verstring:${iface}.0"
+ done
+
+ # Make executables depend on our current version.
+ func_append verstring ":${current}.0"
+ ;;
+
+ qnx)
+ major=".$current"
+ versuffix=".$current"
+ ;;
+
+ sunos)
+ major=".$current"
+ versuffix=".$current.$revision"
+ ;;
+
+ windows)
+ # Use '-' rather than '.', since we only want one
+ # extension on DOS 8.3 filesystems.
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix="-$major"
+ ;;
+
+ *)
+ func_fatal_configuration "unknown library version type \`$version_type'"
+ ;;
+ esac
+
+ # Clear the version info if we defaulted, and they specified a release.
+ if test -z "$vinfo" && test -n "$release"; then
+ major=
+ case $version_type in
+ darwin)
+ # we can't check for "0.0" in archive_cmds due to quoting
+ # problems, so we reset it completely
+ verstring=
+ ;;
+ *)
+ verstring="0.0"
+ ;;
+ esac
+ if test "$need_version" = no; then
+ versuffix=
+ else
+ versuffix=".0.0"
+ fi
+ fi
+
+ # Remove version info from name if versioning should be avoided
+ if test "$avoid_version" = yes && test "$need_version" = no; then
+ major=
+ versuffix=
+ verstring=""
+ fi
+
+ # Check to see if the archive will have undefined symbols.
+ if test "$allow_undefined" = yes; then
+ if test "$allow_undefined_flag" = unsupported; then
+ func_warning "undefined symbols not allowed in $host shared libraries"
+ build_libtool_libs=no
+ build_old_libs=yes
+ fi
+ else
+ # Don't allow undefined symbols.
+ allow_undefined_flag="$no_undefined_flag"
+ fi
+
+ fi
+
+ func_generate_dlsyms "$libname" "$libname" "yes"
+ func_append libobjs " $symfileobj"
+ test "X$libobjs" = "X " && libobjs=
+
+ if test "$opt_mode" != relink; then
+ # Remove our outputs, but don't remove object files since they
+ # may have been created when compiling PIC objects.
+ removelist=
+ tempremovelist=`$ECHO "$output_objdir/*"`
+ for p in $tempremovelist; do
+ case $p in
+ *.$objext | *.gcno)
+ ;;
+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+ if test "X$precious_files_regex" != "X"; then
+ if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+ then
+ continue
+ fi
+ fi
+ func_append removelist " $p"
+ ;;
+ *) ;;
+ esac
+ done
+ test -n "$removelist" && \
+ func_show_eval "${RM}r \$removelist"
+ fi
+
+ # Now set the variables for building old libraries.
+ if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+ func_append oldlibs " $output_objdir/$libname.$libext"
+
+ # Transform .lo files to .o files.
+ oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
+ fi
+
+ # Eliminate all temporary directories.
+ #for path in $notinst_path; do
+ # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+ # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+ # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
+ #done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ temp_xrpath=
+ for libdir in $xrpath; do
+ func_replace_sysroot "$libdir"
+ func_append temp_xrpath " -R$func_replace_sysroot_result"
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ done
+ if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+ dependency_libs="$temp_xrpath $dependency_libs"
+ fi
+ fi
+
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
+ old_dlfiles="$dlfiles"
+ dlfiles=
+ for lib in $old_dlfiles; do
+ case " $dlprefiles $dlfiles " in
+ *" $lib "*) ;;
+ *) func_append dlfiles " $lib" ;;
+ esac
+ done
+
+ # Make sure dlprefiles contains only unique files
+ old_dlprefiles="$dlprefiles"
+ dlprefiles=
+ for lib in $old_dlprefiles; do
+ case "$dlprefiles " in
+ *" $lib "*) ;;
+ *) func_append dlprefiles " $lib" ;;
+ esac
+ done
+
+ if test "$build_libtool_libs" = yes; then
+ if test -n "$rpath"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ # these systems don't actually have a c library (as such)!
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+ func_append deplibs " System.ltframework"
+ ;;
+ *-*-netbsd*)
+ # Don't link with libc until the a.out ld.so is fixed.
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc due to us having libc/libc_r.
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ ;;
+ *)
+ # Add libc to deplibs on all other systems if necessary.
+ if test "$build_libtool_need_lc" = "yes"; then
+ func_append deplibs " -lc"
+ fi
+ ;;
+ esac
+ fi
+
+ # Transform deplibs into only deplibs that can be linked in shared.
+ name_save=$name
+ libname_save=$libname
+ release_save=$release
+ versuffix_save=$versuffix
+ major_save=$major
+ # I'm not sure if I'm treating the release correctly. I think
+ # release should show up in the -l (ie -lgmp5) so we don't want to
+ # add it in twice. Is that correct?
+ release=""
+ versuffix=""
+ major=""
+ newdeplibs=
+ droppeddeps=no
+ case $deplibs_check_method in
+ pass_all)
+ # Don't check for shared/static. Everything works.
+ # This might be a little naive. We might want to check
+ # whether the library exists or not. But this is on
+ # osf3 & osf4 and I'm not really sure... Just
+ # implementing what was already the behavior.
+ newdeplibs=$deplibs
+ ;;
+ test_compile)
+ # This code stresses the "libraries are programs" paradigm to its
+ # limits. Maybe even breaks it. We compile a program, linking it
+ # against the deplibs as a proxy for the library. Then we can check
+ # whether they linked in statically or dynamically with ldd.
+ $opt_dry_run || $RM conftest.c
+ cat > conftest.c <<EOF
+ int main() { return 0; }
+EOF
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ func_append newdeplibs " $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ func_append newdeplibs " $i"
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which I believe you do not have"
+ echo "*** because a test_compile did reveal that the linker did not use it for"
+ echo "*** its dynamic dependency list that programs get resolved with at runtime."
+ fi
+ fi
+ ;;
+ *)
+ func_append newdeplibs " $i"
+ ;;
+ esac
+ done
+ else
+ # Error occurred in the first compile. Let's try to salvage
+ # the situation: Compile a separate program for each library.
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+ ldd_output=`ldd conftest`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ func_append newdeplibs " $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ func_append newdeplibs " $i"
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because a test_compile did reveal that the linker did not use this one"
+ echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+ fi
+ fi
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
+ echo "*** make it link in! You will probably need to install it or some"
+ echo "*** library that it depends on before this library will be fully"
+ echo "*** functional. Installing it before continuing would be even better."
+ fi
+ ;;
+ *)
+ func_append newdeplibs " $i"
+ ;;
+ esac
+ done
+ fi
+ ;;
+ file_magic*)
+ set dummy $deplibs_check_method; shift
+ file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ func_append newdeplibs " $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ if test -n "$file_magic_glob"; then
+ libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+ else
+ libnameglob=$libname
+ fi
+ test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ if test "$want_nocaseglob" = yes; then
+ shopt -s nocaseglob
+ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+ $nocaseglob
+ else
+ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+ fi
+ for potent_lib in $potential_libs; do
+ # Follow soft links.
+ if ls -lLd "$potent_lib" 2>/dev/null |
+ $GREP " -> " >/dev/null; then
+ continue
+ fi
+ # The statement above tries to avoid entering an
+ # endless loop below, in case of cyclic links.
+ # We might still enter an endless loop, since a link
+ # loop can be closed while we follow links,
+ # but so what?
+ potlib="$potent_lib"
+ while test -h "$potlib" 2>/dev/null; do
+ potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+ case $potliblink in
+ [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+ *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
+ esac
+ done
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+ $SED -e 10q |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ func_append newdeplibs " $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a file magic. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ func_append newdeplibs " $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ func_append newdeplibs " $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ potlib="$potent_lib" # see symlink-check above in file_magic test
+ if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
+ $EGREP "$match_pattern_regex" > /dev/null; then
+ func_append newdeplibs " $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a regex pattern. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ func_append newdeplibs " $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ none | unknown | *)
+ newdeplibs=""
+ tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ for i in $predeps $postdeps ; do
+ # can't use Xsed below, because $i might contain '/'
+ tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
+ done
+ fi
+ case $tmp_deplibs in
+ *[!\ \ ]*)
+ echo
+ if test "X$deplibs_check_method" = "Xnone"; then
+ echo "*** Warning: inter-library dependencies are not supported in this platform."
+ else
+ echo "*** Warning: inter-library dependencies are not known to be supported."
+ fi
+ echo "*** All declared inter-library dependencies are being dropped."
+ droppeddeps=yes
+ ;;
+ esac
+ ;;
+ esac
+ versuffix=$versuffix_save
+ major=$major_save
+ release=$release_save
+ libname=$libname_save
+ name=$name_save
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library with the System framework
+ newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ if test "$droppeddeps" = yes; then
+ if test "$module" = yes; then
+ echo
+ echo "*** Warning: libtool could not satisfy all declared inter-library"
+ $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
+ echo "*** a static module, that should work as long as the dlopening"
+ echo "*** application is linked with the -dlopen flag."
+ if test -z "$global_symbol_pipe"; then
+ echo
+ echo "*** However, this would only work if libtool was able to extract symbol"
+ echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ echo "*** not find such a program. So, this module is probably useless."
+ echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ else
+ echo "*** The inter-library dependencies that have been dropped here will be"
+ echo "*** automatically added whenever a program is linked with this library"
+ echo "*** or is declared to -dlopen it."
+
+ if test "$allow_undefined" = no; then
+ echo
+ echo "*** Since this library must not contain undefined symbols,"
+ echo "*** because either the platform does not support them or"
+ echo "*** it was explicitly requested with -no-undefined,"
+ echo "*** libtool will only create a static version of it."
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ fi
+ fi
+ # Done checking deplibs!
+ deplibs=$newdeplibs
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ case $host in
+ *-*-darwin*)
+ newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $deplibs " in
+ *" -L$path/$objdir "*)
+ func_append new_libs " -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ done
+ deplibs="$new_libs"
+
+ # All the library-specific variables (install_libdir is set above).
+ library_names=
+ old_library=
+ dlname=
+
+ # Test again, we may have decided not to build it any more
+ if test "$build_libtool_libs" = yes; then
+ # Remove ${wl} instances when linking with ld.
+ # FIXME: should test the right _cmds variable.
+ case $archive_cmds in
+ *\$LD\ *) wl= ;;
+ esac
+ if test "$hardcode_into_libs" = yes; then
+ # Hardcode the library paths
+ hardcode_libdirs=
+ dep_rpath=
+ rpath="$finalize_rpath"
+ test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ func_replace_sysroot "$libdir"
+ libdir=$func_replace_sysroot_result
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append dep_rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append perm_rpath " $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
+ fi
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ fi
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ fi
+
+ shlibpath="$finalize_shlibpath"
+ test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+ if test -n "$shlibpath"; then
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ fi
+
+ # Get the real and link names of the library.
+ eval shared_ext=\"$shrext_cmds\"
+ eval library_names=\"$library_names_spec\"
+ set dummy $library_names
+ shift
+ realname="$1"
+ shift
+
+ if test -n "$soname_spec"; then
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+ if test -z "$dlname"; then
+ dlname=$soname
+ fi
+
+ lib="$output_objdir/$realname"
+ linknames=
+ for link
+ do
+ func_append linknames " $link"
+ done
+
+ # Use standard objects if they are pic
+ test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ test "X$libobjs" = "X " && libobjs=
+
+ delfiles=
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+ export_symbols="$output_objdir/$libname.uexp"
+ func_append delfiles " $export_symbols"
+ fi
+
+ orig_export_symbols=
+ case $host_os in
+ cygwin* | mingw* | cegcc*)
+ if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+ # exporting using user supplied symfile
+ if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+ # and it's NOT already a .def file. Must figure out
+ # which of the given symbols are data symbols and tag
+ # them as such. So, trigger use of export_symbols_cmds.
+ # export_symbols gets reassigned inside the "prepare
+ # the list of exported symbols" if statement, so the
+ # include_expsyms logic still works.
+ orig_export_symbols="$export_symbols"
+ export_symbols=
+ always_export_symbols=yes
+ fi
+ fi
+ ;;
+ esac
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+ func_verbose "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $opt_dry_run || $RM $export_symbols
+ cmds=$export_symbols_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd1 in $cmds; do
+ IFS="$save_ifs"
+ # Take the normal branch if the nm_file_list_spec branch
+ # doesn't work or if tool conversion is not needed.
+ case $nm_file_list_spec~$to_tool_file_cmd in
+ *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+ try_normal_branch=yes
+ eval cmd=\"$cmd1\"
+ func_len " $cmd"
+ len=$func_len_result
+ ;;
+ *)
+ try_normal_branch=no
+ ;;
+ esac
+ if test "$try_normal_branch" = yes \
+ && { test "$len" -lt "$max_cmd_len" \
+ || test "$max_cmd_len" -le -1; }
+ then
+ func_show_eval "$cmd" 'exit $?'
+ skipped_export=false
+ elif test -n "$nm_file_list_spec"; then
+ func_basename "$output"
+ output_la=$func_basename_result
+ save_libobjs=$libobjs
+ save_output=$output
+ output=${output_objdir}/${output_la}.nm
+ func_to_tool_file "$output"
+ libobjs=$nm_file_list_spec$func_to_tool_file_result
+ func_append delfiles " $output"
+ func_verbose "creating $NM input file list: $output"
+ for obj in $save_libobjs; do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result"
+ done > "$output"
+ eval cmd=\"$cmd1\"
+ func_show_eval "$cmd" 'exit $?'
+ output=$save_output
+ libobjs=$save_libobjs
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+ func_verbose "using reloadable object file for export list..."
+ skipped_export=:
+ # Break out early, otherwise skipped_export may be
+ # set to false by a later but shorter cmd.
+ break
+ fi
+ done
+ IFS="$save_ifs"
+ if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+ fi
+
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols="$export_symbols"
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+
+ tmp_deplibs=
+ for test_deplib in $deplibs; do
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+ func_append tmp_deplibs " $test_deplib"
+ ;;
+ esac
+ done
+ deplibs="$tmp_deplibs"
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec" &&
+ test "$compiler_needs_object" = yes &&
+ test -z "$libobjs"; then
+ # extract the archives, so we have objects to list.
+ # TODO: could optimize this to just extract one archive.
+ whole_archive_flag_spec=
+ fi
+ if test -n "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ else
+ gentop="$output_objdir/${outputname}x"
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $convenience
+ func_append libobjs " $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ fi
+
+ if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+ eval flag=\"$thread_safe_flag_spec\"
+ func_append linker_flags " $flag"
+ fi
+
+ # Make a backup of the uninstalled library when relinking
+ if test "$opt_mode" = relink; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+ fi
+
+ # Do each of the archive commands.
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ eval test_cmds=\"$module_expsym_cmds\"
+ cmds=$module_expsym_cmds
+ else
+ eval test_cmds=\"$module_cmds\"
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval test_cmds=\"$archive_expsym_cmds\"
+ cmds=$archive_expsym_cmds
+ else
+ eval test_cmds=\"$archive_cmds\"
+ cmds=$archive_cmds
+ fi
+ fi
+
+ if test "X$skipped_export" != "X:" &&
+ func_len " $test_cmds" &&
+ len=$func_len_result &&
+ test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # The command line is too long to link in one step, link piecewise
+ # or, if using GNU ld and skipped_export is not :, use a linker
+ # script.
+
+ # Save the value of $output and $libobjs because we want to
+ # use them later. If we have whole_archive_flag_spec, we
+ # want to use save_libobjs as it was before
+ # whole_archive_flag_spec was expanded, because we can't
+ # assume the linker understands whole_archive_flag_spec.
+ # This may have to be revisited, in case too many
+ # convenience libraries get linked in and end up exceeding
+ # the spec.
+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ fi
+ save_output=$output
+ func_basename "$output"
+ output_la=$func_basename_result
+
+ # Clear the reloadable object creation command queue and
+ # initialize k to one.
+ test_cmds=
+ concat_cmds=
+ objlist=
+ last_robj=
+ k=1
+
+ if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+ output=${output_objdir}/${output_la}.lnkscript
+ func_verbose "creating GNU ld script: $output"
+ echo 'INPUT (' > $output
+ for obj in $save_libobjs
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result" >> $output
+ done
+ echo ')' >> $output
+ func_append delfiles " $output"
+ func_to_tool_file "$output"
+ output=$func_to_tool_file_result
+ elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+ output=${output_objdir}/${output_la}.lnk
+ func_verbose "creating linker input file list: $output"
+ : > $output
+ set x $save_libobjs
+ shift
+ firstobj=
+ if test "$compiler_needs_object" = yes; then
+ firstobj="$1 "
+ shift
+ fi
+ for obj
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result" >> $output
+ done
+ func_append delfiles " $output"
+ func_to_tool_file "$output"
+ output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+ else
+ if test -n "$save_libobjs"; then
+ func_verbose "creating reloadable object files..."
+ output=$output_objdir/$output_la-${k}.$objext
+ eval test_cmds=\"$reload_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ if test "X$objlist" = X ||
+ test "$len" -lt "$max_cmd_len"; then
+ func_append objlist " $obj"
+ else
+ # The command $test_cmds is almost too long, add a
+ # command to the queue.
+ if test "$k" -eq 1 ; then
+ # The first file doesn't have a previous command to add.
+ reload_objs=$objlist
+ eval concat_cmds=\"$reload_cmds\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ reload_objs="$objlist $last_robj"
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+ fi
+ last_robj=$output_objdir/$output_la-${k}.$objext
+ func_arith $k + 1
+ k=$func_arith_result
+ output=$output_objdir/$output_la-${k}.$objext
+ objlist=" $obj"
+ func_len " $last_robj"
+ func_arith $len0 + $func_len_result
+ len=$func_arith_result
+ fi
+ done
+ # Handle the remaining objects by creating one last
+ # reloadable object file. All subsequent reloadable object
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ reload_objs="$objlist $last_robj"
+ eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+ fi
+ func_append delfiles " $output"
+
+ else
+ output=
+ fi
+
+ if ${skipped_export-false}; then
+ func_verbose "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $opt_dry_run || $RM $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+ fi
+ fi
+
+ test -n "$save_libobjs" &&
+ func_verbose "creating a temporary reloadable object file: $output"
+
+ # Loop through the commands generated above and execute them.
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $concat_cmds; do
+ IFS="$save_ifs"
+ $opt_silent || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test "$opt_mode" = relink; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS="$save_ifs"
+
+ if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+
+ if ${skipped_export-false}; then
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols="$export_symbols"
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+ fi
+
+ libobjs=$output
+ # Restore the value of output.
+ output=$save_output
+
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ # Expand the library linking commands again to reset the
+ # value of $libobjs for piecewise linking.
+
+ # Do each of the archive commands.
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ cmds=$module_expsym_cmds
+ else
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ cmds=$archive_expsym_cmds
+ else
+ cmds=$archive_cmds
+ fi
+ fi
+ fi
+
+ if test -n "$delfiles"; then
+ # Append the command to remove temporary files to $cmds.
+ eval cmds=\"\$cmds~\$RM $delfiles\"
+ fi
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop="$output_objdir/${outputname}x"
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ func_append libobjs " $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $opt_silent || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test "$opt_mode" = relink; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS="$save_ifs"
+
+ # Restore the uninstalled library and exit
+ if test "$opt_mode" = relink; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+ if test -n "$convenience"; then
+ if test -z "$whole_archive_flag_spec"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ # Create links to the real library.
+ for linkname in $linknames; do
+ if test "$realname" != "$linkname"; then
+ func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+ fi
+ done
+
+ # If -module or -export-dynamic was specified, set the dlname.
+ if test "$module" = yes || test "$export_dynamic" = yes; then
+ # On all known operating systems, these are identical.
+ dlname="$soname"
+ fi
+ fi
+ ;;
+
+ obj)
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ func_warning "\`-dlopen' is ignored for objects"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "\`-l' and \`-L' are ignored for objects" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "\`-rpath' is ignored for objects"
+
+ test -n "$xrpath" && \
+ func_warning "\`-R' is ignored for objects"
+
+ test -n "$vinfo" && \
+ func_warning "\`-version-info' is ignored for objects"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for objects"
+
+ case $output in
+ *.lo)
+ test -n "$objs$old_deplibs" && \
+ func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+ libobj=$output
+ func_lo2o "$libobj"
+ obj=$func_lo2o_result
+ ;;
+ *)
+ libobj=
+ obj="$output"
+ ;;
+ esac
+
+ # Delete the old objects.
+ $opt_dry_run || $RM $obj $libobj
+
+ # Objects from convenience libraries. This assumes
+ # single-version convenience libraries. Whenever we create
+ # different ones for PIC/non-PIC, this we'll have to duplicate
+ # the extraction.
+ reload_conv_objs=
+ gentop=
+ # reload_cmds runs $LD directly, so let us get rid of
+ # -Wl from whole_archive_flag_spec and hope we can get by with
+ # turning comma into space..
+ wl=
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+ reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+ else
+ gentop="$output_objdir/${obj}x"
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $convenience
+ reload_conv_objs="$reload_objs $func_extract_archives_result"
+ fi
+ fi
+
+ # If we're not building shared, we need to use non_pic_objs
+ test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
+
+ # Create the old-style object.
+ reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+ output="$obj"
+ func_execute_cmds "$reload_cmds" 'exit $?'
+
+ # Exit if we aren't doing a library object file.
+ if test -z "$libobj"; then
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ if test "$build_libtool_libs" != yes; then
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ # Create an invalid libtool object if no PIC, so that we don't
+ # accidentally link it into a program.
+ # $show "echo timestamp > $libobj"
+ # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+ exit $EXIT_SUCCESS
+ fi
+
+ if test -n "$pic_flag" || test "$pic_mode" != default; then
+ # Only do commands if we really have different PIC objects.
+ reload_objs="$libobjs $reload_conv_objs"
+ output="$libobj"
+ func_execute_cmds "$reload_cmds" 'exit $?'
+ fi
+
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ ;;
+
+ prog)
+ case $host in
+ *cygwin*) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result.exe;;
+ esac
+ test -n "$vinfo" && \
+ func_warning "\`-version-info' is ignored for programs"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for programs"
+
+ test "$preload" = yes \
+ && test "$dlopen_support" = unknown \
+ && test "$dlopen_self" = unknown \
+ && test "$dlopen_self_static" = unknown && \
+ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ case $host in
+ *-*-darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ # But is supposedly fixed on 10.4 or later (yay!).
+ if test "$tagname" = CXX ; then
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[0123])
+ func_append compile_command " ${wl}-bind_at_load"
+ func_append finalize_command " ${wl}-bind_at_load"
+ ;;
+ esac
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $compile_deplibs " in
+ *" -L$path/$objdir "*)
+ func_append new_libs " -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $compile_deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ done
+ compile_deplibs="$new_libs"
+
+
+ func_append compile_command " $compile_deplibs"
+ func_append finalize_command " $finalize_deplibs"
+
+ if test -n "$rpath$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ for libdir in $rpath $xrpath; do
+ # This is the magic to use -rpath.
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ done
+ fi
+
+ # Now hardcode the library paths
+ rpath=
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append perm_rpath " $libdir" ;;
+ esac
+ fi
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ ::) dllsearchpath=$libdir;;
+ *) func_append dllsearchpath ":$libdir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+ *) func_append dllsearchpath ":$testbindir";;
+ esac
+ ;;
+ esac
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ compile_rpath="$rpath"
+
+ rpath=
+ hardcode_libdirs=
+ for libdir in $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_perm_rpath " $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ finalize_rpath="$rpath"
+
+ if test -n "$libobjs" && test "$build_old_libs" = yes; then
+ # Transform all the library objects into standard objects.
+ compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ fi
+
+ func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+ # template prelinking step
+ if test -n "$prelink_cmds"; then
+ func_execute_cmds "$prelink_cmds" 'exit $?'
+ fi
+
+ wrappers_required=yes
+ case $host in
+ *cegcc* | *mingw32ce*)
+ # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+ wrappers_required=no
+ ;;
+ *cygwin* | *mingw* )
+ if test "$build_libtool_libs" != yes; then
+ wrappers_required=no
+ fi
+ ;;
+ *)
+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+ wrappers_required=no
+ fi
+ ;;
+ esac
+ if test "$wrappers_required" = no; then
+ # Replace the output file specification.
+ compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ link_command="$compile_command$compile_rpath"
+
+ # We have no uninstalled library dependencies, so finalize right now.
+ exit_status=0
+ func_show_eval "$link_command" 'exit_status=$?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ # Delete the generated files.
+ if test -f "$output_objdir/${outputname}S.${objext}"; then
+ func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+ fi
+
+ exit $exit_status
+ fi
+
+ if test -n "$compile_shlibpath$finalize_shlibpath"; then
+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+ fi
+ if test -n "$finalize_shlibpath"; then
+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+ fi
+
+ compile_var=
+ finalize_var=
+ if test -n "$runpath_var"; then
+ if test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ if test -n "$finalize_perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $finalize_perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ fi
+
+ if test "$no_install" = yes; then
+ # We don't need to create a wrapper script.
+ link_command="$compile_var$compile_command$compile_rpath"
+ # Replace the output file specification.
+ link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ # Delete the old output file.
+ $opt_dry_run || $RM $output
+ # Link the executable and exit
+ func_show_eval "$link_command" 'exit $?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ if test "$hardcode_action" = relink; then
+ # Fast installation is not supported
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+ func_warning "this platform does not like uninstalled shared libraries"
+ func_warning "\`$output' will be relinked during installation"
+ else
+ if test "$fast_install" != no; then
+ link_command="$finalize_var$compile_command$finalize_rpath"
+ if test "$fast_install" = yes; then
+ relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+ else
+ # fast_install is set to needless
+ relink_command=
+ fi
+ else
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+ fi
+ fi
+
+ # Replace the output file specification.
+ link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+ # Delete the old output files.
+ $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+ func_show_eval "$link_command" 'exit $?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output_objdir/$outputname"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ # Now create the wrapper script.
+ func_verbose "creating $output"
+
+ # Quote the relink command for shipping.
+ if test -n "$relink_command"; then
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ fi
+ done
+ relink_command="(cd `pwd`; $relink_command)"
+ relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+ fi
+
+ # Only actually do things if not in dry run mode.
+ $opt_dry_run || {
+ # win32 will think the script is a binary if it has
+ # a .exe suffix, so we strip it off here.
+ case $output in
+ *.exe) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result ;;
+ esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+ *cygwin*)
+ exeext=.exe
+ func_stripname '' '.exe' "$outputname"
+ outputname=$func_stripname_result ;;
+ *) exeext= ;;
+ esac
+ case $host in
+ *cygwin* | *mingw* )
+ func_dirname_and_basename "$output" "" "."
+ output_name=$func_basename_result
+ output_path=$func_dirname_result
+ cwrappersource="$output_path/$objdir/lt-$output_name.c"
+ cwrapper="$output_path/$output_name.exe"
+ $RM $cwrappersource $cwrapper
+ trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_cwrapperexe_src > $cwrappersource
+
+ # The wrapper executable is built using the $host compiler,
+ # because it contains $host paths and files. If cross-
+ # compiling, it, like the target executable, must be
+ # executed on the $host or under an emulation environment.
+ $opt_dry_run || {
+ $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+ $STRIP $cwrapper
+ }
+
+ # Now, create the wrapper script for func_source use:
+ func_ltwrapper_scriptname $cwrapper
+ $RM $func_ltwrapper_scriptname_result
+ trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+ $opt_dry_run || {
+ # note: this script will not be executed, so do not chmod.
+ if test "x$build" = "x$host" ; then
+ $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+ else
+ func_emit_wrapper no > $func_ltwrapper_scriptname_result
+ fi
+ }
+ ;;
+ * )
+ $RM $output
+ trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_wrapper no > $output
+ chmod +x $output
+ ;;
+ esac
+ }
+ exit $EXIT_SUCCESS
+ ;;
+ esac
+
+ # See if we need to build an old-fashioned archive.
+ for oldlib in $oldlibs; do
+
+ if test "$build_libtool_libs" = convenience; then
+ oldobjs="$libobjs_save $symfileobj"
+ addlibs="$convenience"
+ build_libtool_libs=no
+ else
+ if test "$build_libtool_libs" = module; then
+ oldobjs="$libobjs_save"
+ build_libtool_libs=no
+ else
+ oldobjs="$old_deplibs $non_pic_objects"
+ if test "$preload" = yes && test -f "$symfileobj"; then
+ func_append oldobjs " $symfileobj"
+ fi
+ fi
+ addlibs="$old_convenience"
+ fi
+
+ if test -n "$addlibs"; then
+ gentop="$output_objdir/${outputname}x"
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $addlibs
+ func_append oldobjs " $func_extract_archives_result"
+ fi
+
+ # Do each command in the archive commands.
+ if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+ cmds=$old_archive_from_new_cmds
+ else
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop="$output_objdir/${outputname}x"
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ func_append oldobjs " $func_extract_archives_result"
+ fi
+
+ # POSIX demands no paths to be encoded in archives. We have
+ # to avoid creating archives with duplicate basenames if we
+ # might have to extract them afterwards, e.g., when creating a
+ # static archive out of a convenience library, or when linking
+ # the entirety of a libtool archive into another (currently
+ # not supported by libtool).
+ if (for obj in $oldobjs
+ do
+ func_basename "$obj"
+ $ECHO "$func_basename_result"
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ echo "copying selected object files to avoid basename conflicts..."
+ gentop="$output_objdir/${outputname}x"
+ func_append generated " $gentop"
+ func_mkdir_p "$gentop"
+ save_oldobjs=$oldobjs
+ oldobjs=
+ counter=1
+ for obj in $save_oldobjs
+ do
+ func_basename "$obj"
+ objbase="$func_basename_result"
+ case " $oldobjs " in
+ " ") oldobjs=$obj ;;
+ *[\ /]"$objbase "*)
+ while :; do
+ # Make sure we don't pick an alternate name that also
+ # overlaps.
+ newobj=lt$counter-$objbase
+ func_arith $counter + 1
+ counter=$func_arith_result
+ case " $oldobjs " in
+ *[\ /]"$newobj "*) ;;
+ *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+ esac
+ done
+ func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+ func_append oldobjs " $gentop/$newobj"
+ ;;
+ *) func_append oldobjs " $obj" ;;
+ esac
+ done
+ fi
+ func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+ tool_oldlib=$func_to_tool_file_result
+ eval cmds=\"$old_archive_cmds\"
+
+ func_len " $cmds"
+ len=$func_len_result
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ cmds=$old_archive_cmds
+ elif test -n "$archiver_list_spec"; then
+ func_verbose "using command file archive linking..."
+ for obj in $oldobjs
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result"
+ done > $output_objdir/$libname.libcmd
+ func_to_tool_file "$output_objdir/$libname.libcmd"
+ oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+ cmds=$old_archive_cmds
+ else
+ # the command line is too long to link in one step, link in parts
+ func_verbose "using piecewise archive linking..."
+ save_RANLIB=$RANLIB
+ RANLIB=:
+ objlist=
+ concat_cmds=
+ save_oldobjs=$oldobjs
+ oldobjs=
+ # Is there a better way of finding the last object in the list?
+ for obj in $save_oldobjs
+ do
+ last_oldobj=$obj
+ done
+ eval test_cmds=\"$old_archive_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+ for obj in $save_oldobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ func_append objlist " $obj"
+ if test "$len" -lt "$max_cmd_len"; then
+ :
+ else
+ # the above command should be used before it gets too long
+ oldobjs=$objlist
+ if test "$obj" = "$last_oldobj" ; then
+ RANLIB=$save_RANLIB
+ fi
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+ objlist=
+ len=$len0
+ fi
+ done
+ RANLIB=$save_RANLIB
+ oldobjs=$objlist
+ if test "X$oldobjs" = "X" ; then
+ eval cmds=\"\$concat_cmds\"
+ else
+ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+ fi
+ fi
+ fi
+ func_execute_cmds "$cmds" 'exit $?'
+ done
+
+ test -n "$generated" && \
+ func_show_eval "${RM}r$generated"
+
+ # Now create the libtool archive.
+ case $output in
+ *.la)
+ old_library=
+ test "$build_old_libs" = yes && old_library="$libname.$libext"
+ func_verbose "creating $output"
+
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ fi
+ done
+ # Quote the link command for shipping.
+ relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+ relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+ if test "$hardcode_automatic" = yes ; then
+ relink_command=
+ fi
+
+ # Only create the output if not a dry run.
+ $opt_dry_run || {
+ for installed in no yes; do
+ if test "$installed" = yes; then
+ if test -z "$install_libdir"; then
+ break
+ fi
+ output="$output_objdir/$outputname"i
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ *.la)
+ func_basename "$deplib"
+ name="$func_basename_result"
+ func_resolve_sysroot "$deplib"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+ test -z "$libdir" && \
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
+ func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ -L*)
+ func_stripname -L '' "$deplib"
+ func_replace_sysroot "$func_stripname_result"
+ func_append newdependency_libs " -L$func_replace_sysroot_result"
+ ;;
+ -R*)
+ func_stripname -R '' "$deplib"
+ func_replace_sysroot "$func_stripname_result"
+ func_append newdependency_libs " -R$func_replace_sysroot_result"
+ ;;
+ *) func_append newdependency_libs " $deplib" ;;
+ esac
+ done
+ dependency_libs="$newdependency_libs"
+ newdlfiles=
+
+ for lib in $dlfiles; do
+ case $lib in
+ *.la)
+ func_basename "$lib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$lib' is not a valid libtool archive"
+ func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ *) func_append newdlfiles " $lib" ;;
+ esac
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ *.la)
+ # Only pass preopened files to the pseudo-archive (for
+ # eventual linking with the app. that links it) if we
+ # didn't already link the preopened objects directly into
+ # the library:
+ func_basename "$lib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$lib' is not a valid libtool archive"
+ func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ esac
+ done
+ dlprefiles="$newdlprefiles"
+ else
+ newdlfiles=
+ for lib in $dlfiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ func_append newdlfiles " $abs"
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ func_append newdlprefiles " $abs"
+ done
+ dlprefiles="$newdlprefiles"
+ fi
+ $RM $output
+ # place dlname in correct position for cygwin
+ # In fact, it would be nice if we could use this code for all target
+ # systems that can't hard-code library paths into their executables
+ # and that have no shared library path variable independent of PATH,
+ # but it turns out we can't easily determine that from inspecting
+ # libtool variables, so we have to hard-code the OSs to which it
+ # applies here; at the moment, that means platforms that use the PE
+ # object format with DLL files. See the long comment at the top of
+ # tests/bindir.at for full details.
+ tdlname=$dlname
+ case $host,$output,$installed,$module,$dlname in
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+ # If a -bindir argument was supplied, place the dll there.
+ if test "x$bindir" != x ;
+ then
+ func_relative_path "$install_libdir" "$bindir"
+ tdlname=$func_relative_path_result$dlname
+ else
+ # Otherwise fall back on heuristic.
+ tdlname=../bin/$dlname
+ fi
+ ;;
+ esac
+ $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+ if test "$installed" = no && test "$need_relink" = yes; then
+ $ECHO >> $output "\
+relink_command=\"$relink_command\""
+ fi
+ done
+ }
+
+ # Do a symbolic link so that the libtool archive can be found in
+ # LD_LIBRARY_PATH before the program is installed.
+ func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+ ;;
+ esac
+ exit $EXIT_SUCCESS
+}
+
+{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
+ func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+ $opt_debug
+ RM="$nonopt"
+ files=
+ rmforce=
+ exit_status=0
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ for arg
+ do
+ case $arg in
+ -f) func_append RM " $arg"; rmforce=yes ;;
+ -*) func_append RM " $arg" ;;
+ *) func_append files " $arg" ;;
+ esac
+ done
+
+ test -z "$RM" && \
+ func_fatal_help "you must specify an RM program"
+
+ rmdirs=
+
+ for file in $files; do
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+ if test "X$dir" = X.; then
+ odir="$objdir"
+ else
+ odir="$dir/$objdir"
+ fi
+ func_basename "$file"
+ name="$func_basename_result"
+ test "$opt_mode" = uninstall && odir="$dir"
+
+ # Remember odir for removal later, being careful to avoid duplicates
+ if test "$opt_mode" = clean; then
+ case " $rmdirs " in
+ *" $odir "*) ;;
+ *) func_append rmdirs " $odir" ;;
+ esac
+ fi
+
+ # Don't error if the file doesn't exist and rm -f was used.
+ if { test -L "$file"; } >/dev/null 2>&1 ||
+ { test -h "$file"; } >/dev/null 2>&1 ||
+ test -f "$file"; then
+ :
+ elif test -d "$file"; then
+ exit_status=1
+ continue
+ elif test "$rmforce" = yes; then
+ continue
+ fi
+
+ rmfiles="$file"
+
+ case $name in
+ *.la)
+ # Possibly a libtool archive, so verify it.
+ if func_lalib_p "$file"; then
+ func_source $dir/$name
+
+ # Delete the libtool libraries and symlinks.
+ for n in $library_names; do
+ func_append rmfiles " $odir/$n"
+ done
+ test -n "$old_library" && func_append rmfiles " $odir/$old_library"
+
+ case "$opt_mode" in
+ clean)
+ case " $library_names " in
+ *" $dlname "*) ;;
+ *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
+ esac
+ test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
+ ;;
+ uninstall)
+ if test -n "$library_names"; then
+ # Do each command in the postuninstall commands.
+ func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+ fi
+
+ if test -n "$old_library"; then
+ # Do each command in the old_postuninstall commands.
+ func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+ fi
+ # FIXME: should reinstall the best remaining shared library.
+ ;;
+ esac
+ fi
+ ;;
+
+ *.lo)
+ # Possibly a libtool object, so verify it.
+ if func_lalib_p "$file"; then
+
+ # Read the .lo file
+ func_source $dir/$name
+
+ # Add PIC object to the list of files to remove.
+ if test -n "$pic_object" &&
+ test "$pic_object" != none; then
+ func_append rmfiles " $dir/$pic_object"
+ fi
+
+ # Add non-PIC object to the list of files to remove.
+ if test -n "$non_pic_object" &&
+ test "$non_pic_object" != none; then
+ func_append rmfiles " $dir/$non_pic_object"
+ fi
+ fi
+ ;;
+
+ *)
+ if test "$opt_mode" = clean ; then
+ noexename=$name
+ case $file in
+ *.exe)
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ func_stripname '' '.exe' "$name"
+ noexename=$func_stripname_result
+ # $file with .exe has already been added to rmfiles,
+ # add $file without .exe
+ func_append rmfiles " $file"
+ ;;
+ esac
+ # Do a test to see if this is a libtool program.
+ if func_ltwrapper_p "$file"; then
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ relink_command=
+ func_source $func_ltwrapper_scriptname_result
+ func_append rmfiles " $func_ltwrapper_scriptname_result"
+ else
+ relink_command=
+ func_source $dir/$noexename
+ fi
+
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+ func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
+ if test "$fast_install" = yes && test -n "$relink_command"; then
+ func_append rmfiles " $odir/lt-$name"
+ fi
+ if test "X$noexename" != "X$name" ; then
+ func_append rmfiles " $odir/lt-${noexename}.c"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ func_show_eval "$RM $rmfiles" 'exit_status=1'
+ done
+
+ # Try to remove the ${objdir}s in the directories where we deleted files
+ for dir in $rmdirs; do
+ if test -d "$dir"; then
+ func_show_eval "rmdir $dir >/dev/null 2>&1"
+ fi
+ done
+
+ exit $exit_status
+}
+
+{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
+ func_mode_uninstall ${1+"$@"}
+
+test -z "$opt_mode" && {
+ help="$generic_help"
+ func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+ func_fatal_help "invalid operation mode \`$opt_mode'"
+
+if test -n "$exec_cmd"; then
+ eval exec "$exec_cmd"
+ exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries. Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them. This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration. But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
diff --git a/config/missing b/config/missing
new file mode 100755
index 0000000..9a55648
--- /dev/null
+++ b/config/missing
@@ -0,0 +1,330 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2012-01-06.18; # UTC
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, 'missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+ # Try to run requested program, and just exit if it succeeds.
+ run=
+ shift
+ "$@" && exit 0
+ # Exit code 63 means version mismatch. This often happens
+ # when the user try to use an ancient version of a tool on
+ # a file that requires a minimum version. In this case we
+ # we should proceed has if the program had been absent, or
+ # if --run hadn't been passed.
+ if test $? = 63; then
+ run=:
+ msg="probably too old"
+ fi
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+ --run try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+ aclocal touch file 'aclocal.m4'
+ autoconf touch file 'configure'
+ autoheader touch file 'config.h.in'
+ autom4te touch the output file, or create a stub one
+ automake touch all 'Makefile.in' files
+ bison create 'y.tab.[ch]', if possible, from existing .[ch]
+ flex create 'lex.yy.c', if possible, from existing .c
+ help2man touch the output file
+ lex create 'lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ yacc create 'y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake at gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown '$1' option"
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# normalize program name to check for.
+program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+# Now exit if we have it, but it failed. Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program). This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+ lex*|yacc*)
+ # Not GNU programs, they don't have --version.
+ ;;
+
+ *)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ # Could not run --version or --help. This is probably someone
+ # running '$TOOL --version' or '$TOOL --help' to check whether
+ # $TOOL exists and not knowing $TOOL uses missing.
+ exit 1
+ fi
+ ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $program in
+ aclocal*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified 'acinclude.m4' or '${configure_ac}'. You might want
+ to install the Automake and Perl packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified '${configure_ac}'. You might want to install the
+ Autoconf and GNU m4 packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified 'acconfig.h' or '${configure_ac}'. You might want
+ to install the Autoconf and GNU m4 packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+ case $f in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+ esac
+ done
+ touch $touch_files
+ ;;
+
+ automake*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
+ You might want to install the Automake and Perl packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print |
+ sed 's/\.am$/.in/' |
+ while read f; do touch "$f"; done
+ ;;
+
+ autom4te*)
+ echo 1>&2 "\
+WARNING: '$1' is needed, but is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them.
+ You can get '$1' as part of Autoconf from any GNU
+ archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo "#! /bin/sh"
+ echo "# Created by GNU Automake missing as a replacement of"
+ echo "# $ $@"
+ echo "exit 0"
+ chmod +x $file
+ exit 1
+ fi
+ ;;
+
+ bison*|yacc*)
+ echo 1>&2 "\
+WARNING: '$1' $msg. You should only need it if
+ you modified a '.y' file. You may need the Bison package
+ in order for those modifications to take effect. You can get
+ Bison from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if test $# -ne 1; then
+ eval LASTARG=\${$#}
+ case $LASTARG in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f y.tab.h; then
+ echo >y.tab.h
+ fi
+ if test ! -f y.tab.c; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex*|flex*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified a '.l' file. You may need the Flex package
+ in order for those modifications to take effect. You can get
+ Flex from any GNU archive site."
+ rm -f lex.yy.c
+ if test $# -ne 1; then
+ eval LASTARG=\${$#}
+ case $LASTARG in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f lex.yy.c; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ help2man*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified a dependency of a manual page. You may need the
+ Help2man package in order for those modifications to take
+ effect. You can get Help2man from any GNU archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo ".ab help2man is required to generate this page"
+ exit $?
+ fi
+ ;;
+
+ makeinfo*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified a '.texi' or '.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy 'make' (AIX,
+ DU, IRIX). You might want to install the Texinfo package or
+ the GNU make package. Grab either from any GNU archive site."
+ # The file to touch is that specified with -o ...
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -z "$file"; then
+ # ... or it is the one specified with @setfilename ...
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '
+ /^@setfilename/{
+ s/.* \([^ ]*\) *$/\1/
+ p
+ q
+ }' $infile`
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+ fi
+ # If the file does not exist, the user really needs makeinfo;
+ # let's fail without touching anything.
+ test -f $file || exit 1
+ touch $file
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: '$1' is needed, and is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them. Check the 'README' file,
+ it often tells you about the needed prerequisites for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing '$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/configure b/configure
new file mode 100755
index 0000000..2fdf263
--- /dev/null
+++ b/configure
@@ -0,0 +1,22488 @@
+#! /bin/sh
+# From configure.ac Id: configure.ac 3971 2013-04-29 08:59:35Z tovo .
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for NFFT 3.2.3.
+#
+# Report bugs to <bugs at nfft.org>.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+#
+# 2003, 2012, Jens Keiner, Stefan Kunis, Daniel Potts
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+ fi
+ # We don't want this to propagate to other subprocesses.
+ { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+
+ test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf at gnu.org and bugs at nfft.org
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='NFFT'
+PACKAGE_TARNAME='nfft'
+PACKAGE_VERSION='3.2.3'
+PACKAGE_STRING='NFFT 3.2.3'
+PACKAGE_BUGREPORT='bugs at nfft.org'
+PACKAGE_URL=''
+
+ac_unique_file="include/nfft3.h"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+TICKS_PER_SECOND
+LIBOBJS
+POW_LIB
+ALLOCA
+PRTDIAG
+matlab_fftw3_LDFLAGS
+matlab_fftw3_LIBS
+matlab_mexext
+matlab_LDFLAGS
+matlab_LIBS
+matlab_CPPFLAGS
+HAVE_MATLAB_THREADS_FALSE
+HAVE_MATLAB_THREADS_TRUE
+HAVE_MATLAB_FALSE
+HAVE_MATLAB_TRUE
+matlab_prog_mexext
+OPENMP_CFLAGS
+HAVE_OPENMP_FALSE
+HAVE_OPENMP_TRUE
+fftw3_LDFLAGS
+fftw3_threads_LIBS
+fftw3_LIBS
+am__fastdepCCAS_FALSE
+am__fastdepCCAS_TRUE
+CCASDEPMODE
+CCASFLAGS
+CCAS
+HAVE_THREADS_FALSE
+HAVE_THREADS_TRUE
+HAVE_FPT
+HAVE_FPT_FALSE
+HAVE_FPT_TRUE
+HAVE_MRI
+HAVE_MRI_FALSE
+HAVE_MRI_TRUE
+HAVE_NSFFT
+HAVE_NSFFT_FALSE
+HAVE_NSFFT_TRUE
+HAVE_NNFFT
+HAVE_NNFFT_FALSE
+HAVE_NNFFT_TRUE
+HAVE_NFSOFT
+HAVE_NFSOFT_FALSE
+HAVE_NFSOFT_TRUE
+HAVE_NFSFT
+HAVE_NFSFT_FALSE
+HAVE_NFSFT_TRUE
+HAVE_NFST
+HAVE_NFST_FALSE
+HAVE_NFST_TRUE
+HAVE_NFCT
+HAVE_NFCT_FALSE
+HAVE_NFCT_TRUE
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+SET_MAKE
+SHARED_VERSION_INFO
+LIBTOOL_DEPS
+CPP
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+MANIFEST_TOOL
+AWK
+RANLIB
+STRIP
+ac_ct_AR
+AR
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+LIBTOOL
+OBJDUMP
+DLLTOOL
+AS
+abs_srcdir
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
+enable_dependency_tracking
+enable_maintainer_mode
+enable_all
+enable_nfct
+enable_nfst
+enable_nfsft
+enable_nfsoft
+enable_nnfft
+enable_nsfft
+enable_mri
+enable_fpt
+enable_openmp
+enable_debug
+enable_measure_time
+enable_measure_time_fftw
+enable_mips_zbus_timer
+with_window
+with_fftw3
+with_fftw3_libdir
+with_fftw3_includedir
+with_matlab
+with_matlab_arch
+enable_matlab_argchecks
+with_matlab_fftw3_libdir
+enable_matlab_threads
+enable_portable_binary
+with_gcc_arch
+with_apple_gcc_arch
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+CCAS
+CCASFLAGS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures NFFT 3.2.3 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/nfft]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of NFFT 3.2.3:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-shared[=PKGS] build shared libraries [default=yes]
+ --enable-static[=PKGS] build static libraries [default=yes]
+ --enable-fast-install[=PKGS]
+ optimize for fast installation [default=yes]
+ --disable-libtool-lock avoid locking (might break parallel builds)
+ --enable-dependency-tracking
+ do not reject slow dependency extractors
+ --disable-dependency-tracking
+ speeds up one-time build
+ --enable-maintainer-mode
+ enable make rules and dependencies not useful (and
+ sometimes confusing) to the casual installer
+ --enable-all build all modules
+ --enable-nfct build NFCT module (nonequispaced fast cosine
+ transform)
+ --enable-nfst build NFST module (nonequispaced fast sine
+ transform)
+ --enable-nfsft build NFSFT module (nonequispaced fast spherical
+ Fourier transform)
+ --enable-nfsoft build NFSOFT module (nonequispaced fast SO(3)
+ Fourier transform)
+ --enable-nnfft build NNFFT module (nonequispaced fast Fourier
+ transform -- # nonequispaced in both domains)
+ --enable-nsfft build NSFFT module (nonequispaced sparse fast
+ Fourier transform)
+ --enable-mri build MRI module (magnet resonance imaging)
+ --enable-fpt build FPT module (fast polynomial transform)
+ --enable-openmp enable OpenMP multithreaded code
+ --enable-debug compile with extra runtime checks for debugging
+ --enable-measure-time measure time during execution
+ --enable-measure-time-fftw
+ measure time of FFTW transforms during execution
+ --enable-mips-zbus-timer
+ use MIPS ZBus cycle-counter
+ --enable-matlab-argchecks
+ Compile Matlab interface with argument checks
+ [default=yes]
+ --enable-matlab-threads Compile Matlab interface with thread support
+ [default same as --enable-openmp]
+ --enable-portable-binary
+ disable compiler optimizations that would produce
+ unportable binaries
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+ --with-sysroot=DIR Search for dependent libraries within DIR
+ (or the compiler's sysroot if not specified).
+ --with-window=ARG choose window function (ARG can be one of:
+ kaiserbessel (default), gaussian, bspline, sinc,
+ dirac)
+ --with-fftw3=DIR compile with fftw3 in DIR
+ --with-fftw3-libdir=DIR compile with fftw3 library directory DIR
+ --with-fftw3-includedir=DIR
+ compile with fftw3 include directory DIR
+ --with-matlab=DIR the directory where Matlab is installed
+ --with-matlab-arch=DIR Matlab architecture acronym
+ --with-matlab-fftw3-libdir=DIR
+ compile Matlab interface with fftw3 library
+ directory DIR
+ --with-gcc-arch=<arch> use architecture <arch> for gcc -march/-mtune,
+ instead of guessing
+ --with-apple-gcc-arch=<arch>
+ use architecture <arch> for Apple's gcc -arch,
+ instead of guessing
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+ CCAS assembler compiler command (defaults to CC)
+ CCASFLAGS assembler compiler flags (defaults to CFLAGS)
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <bugs at nfft.org>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+NFFT configure 3.2.3
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+
+2003, 2012, Jens Keiner, Stefan Kunis, Daniel Potts
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if eval \${$3+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_header_compiler=yes
+else
+ ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ ac_header_preproc=yes
+else
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+ yes:no: )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ---------------------------- ##
+## Report this to bugs at nfft.org ##
+## ---------------------------- ##"
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=no"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=$ac_mid; break
+else
+ as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_lo=$ac_mid; break
+else
+ as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=$ac_mid
+else
+ as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if (($2) < 0)
+ {
+ long int i = longval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%ld", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%lu", i);
+ }
+ /* Do not output a trailing newline, as this causes \r\n confusion
+ on some platforms. */
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+ ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+ fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ as_decl_name=`echo $2|sed 's/ *(.*//'`
+ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+ (void) $as_decl_use;
+#else
+ (void) $as_decl_name;
+#endif
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by NFFT $as_me 3.2.3, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+# revision id from svn
+
+
+# copyright notice
+
+
+# m4 macros go here
+
+
+# where to put auxilliary files
+ac_aux_dir=
+for ac_dir in config "$srcdir"/config; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+
+# how to recognize the source directory
+
+
+# header to create
+ac_config_headers="$ac_config_headers include/config.h:include/config.h.in"
+
+
+# canonical host system type string
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+# number of CPUs
+#AX_COUNT_CPUS
+#AC_DEFINE_UNQUOTED(NFFT_NUM_CORES,$cpu_count,[Define to number of cores.])
+
+# substitute abs_srcdir in generated Makefiles
+
+
+# minimum required libtool version
+
+
+# libtool initialization
+case `pwd` in
+ *\ * | *\ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.4.2'
+macro_revision='1.3337'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO ""
+}
+
+case "$ECHO" in
+ printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+ print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+ then ac_cv_path_FGREP="$GREP -F"
+ else
+ if test -z "$FGREP"; then
+ ac_path_FGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in fgrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+ # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'FGREP' >> "conftest.nl"
+ "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_FGREP="$ac_path_FGREP"
+ ac_path_FGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_FGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_FGREP"; then
+ as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_FGREP=$FGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in dumpbin "link -dump"
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DUMPBIN+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$DUMPBIN" && break
+ done
+fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in dumpbin "link -dump"
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_DUMPBIN" && break
+done
+
+ if test "x$ac_ct_DUMPBIN" = x; then
+ DUMPBIN=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DUMPBIN=$ac_ct_DUMPBIN
+ fi
+fi
+
+ case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ os2*)
+ # The test takes a long time on OS/2.
+ lt_cv_sys_max_cmd_len=8192
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+ ;;
+ esac
+ ;;
+ *-*-cygwin* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+ ;;
+ esac
+ ;;
+ * ) # unhandled hosts (and "normal" native builds)
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ esac
+ ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ if test "$GCC" != yes; then
+ reload_cmds=false
+ fi
+ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OBJDUMP"; then
+ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OBJDUMP" = x; then
+ OBJDUMP="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJDUMP=$ac_ct_OBJDUMP
+ fi
+else
+ OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[45]*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+ if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ # Keep this pattern in sync with the one in func_win32_libid.
+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+ case $host_os in
+ mingw* | pw32*)
+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+ want_nocaseglob=yes
+ else
+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+ fi
+ ;;
+ esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DLLTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DLLTOOL"; then
+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+ ac_ct_DLLTOOL=$DLLTOOL
+ # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DLLTOOL"; then
+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_DLLTOOL" = x; then
+ DLLTOOL="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DLLTOOL=$ac_ct_DLLTOOL
+ fi
+else
+ DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+ # two different shell functions defined in ltmain.sh
+ # decide which to use based on capabilities of $DLLTOOL
+ case `$DLLTOOL --help 2>&1` in
+ *--identify-strict*)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+ ;;
+ *)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+ ;;
+ esac
+ ;;
+*)
+ # fallback: assume linklib IS sharedlib
+ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+ ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in ar
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AR" && break
+ done
+fi
+if test -z "$AR"; then
+ ac_ct_AR=$AR
+ for ac_prog in ar
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_AR" && break
+done
+
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+fi
+
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ar_at_file=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ echo conftest.$ac_objext > conftest.lst
+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+ (eval $lt_ar_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test "$ac_status" -eq 0; then
+ # Ensure the archiver fails upon bogus file names.
+ rm -f conftest.$ac_objext libconftest.a
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+ (eval $lt_ar_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test "$ac_status" -ne 0; then
+ lt_cv_ar_at_file=@
+ fi
+ fi
+ rm -f conftest.* libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
+
+if test "x$lt_cv_ar_at_file" = xno; then
+ archiver_list_spec=
+else
+ archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+ (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data. */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_globsym_save_LIBS=$LIBS
+ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS=$lt_globsym_save_LIBS
+ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+ nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+ withval=$with_sysroot;
+else
+ with_sysroot=no
+fi
+
+
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+ if test "$GCC" = yes; then
+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+ fi
+ ;; #(
+ /*)
+ lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+ ;; #(
+ no|'')
+ ;; #(
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
+$as_echo "${with_sysroot}" >&6; }
+ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+ ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+ enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_cc_needs_belf=yes
+else
+ lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*)
+ case $host in
+ i?86-*-solaris*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ sparc*-*-solaris*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
+ if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+ LD="${LD-ld}_sol2"
+ fi
+ ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$MANIFEST_TOOL"; then
+ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+ # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_MANIFEST_TOOL"; then
+ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_MANIFEST_TOOL" = x; then
+ MANIFEST_TOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+ fi
+else
+ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_path_mainfest_tool=no
+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+ cat conftest.err >&5
+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+ lt_cv_path_mainfest_tool=yes
+ fi
+ rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+ MANIFEST_TOOL=:
+fi
+
+
+
+
+
+
+ case $host_os in
+ rhapsody* | darwin*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DSYMUTIL"; then
+ ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+ ac_ct_DSYMUTIL=$DSYMUTIL
+ # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DSYMUTIL"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_DSYMUTIL" = x; then
+ DSYMUTIL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DSYMUTIL=$ac_ct_DSYMUTIL
+ fi
+else
+ DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NMEDIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NMEDIT"; then
+ ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+ ac_ct_NMEDIT=$NMEDIT
+ # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_NMEDIT"; then
+ ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_NMEDIT="nmedit"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_NMEDIT" = x; then
+ NMEDIT=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ NMEDIT=$ac_ct_NMEDIT
+ fi
+else
+ NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LIPO+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$LIPO"; then
+ ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+ ac_ct_LIPO=$LIPO
+ # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_LIPO"; then
+ ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_LIPO="lipo"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_LIPO" = x; then
+ LIPO=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ LIPO=$ac_ct_LIPO
+ fi
+else
+ LIPO="$ac_cv_prog_LIPO"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL"; then
+ ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+ ac_ct_OTOOL=$OTOOL
+ # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL"; then
+ ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OTOOL="otool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL" = x; then
+ OTOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL=$ac_ct_OTOOL
+ fi
+else
+ OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL64+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL64"; then
+ ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+ ac_ct_OTOOL64=$OTOOL64
+ # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL64"; then
+ ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OTOOL64="otool64"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL64" = x; then
+ OTOOL64=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL64=$ac_ct_OTOOL64
+ fi
+else
+ OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ # If there is a non-empty error log, and "single_module"
+ # appears in it, assume the flag caused a linker warning
+ if test -s conftest.err && $GREP single_module conftest.err; then
+ cat conftest.err >&5
+ # Otherwise, if the output was created with a 0 exit code from
+ # the compiler, it worked.
+ elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_ld_exported_symbols_list=yes
+else
+ lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
+ echo "$RANLIB libconftest.a" >&5
+ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -s conftest.err && $GREP force_load conftest.err; then
+ cat conftest.err >&5
+ elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ 10.[012]*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if ${ac_cv_prog_CPP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in dlfcn.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+# Set options
+enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
+set dummy ${ac_tool_prefix}as; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AS+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AS"; then
+ ac_cv_prog_AS="$AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AS="${ac_tool_prefix}as"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AS=$ac_cv_prog_AS
+if test -n "$AS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
+$as_echo "$AS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AS"; then
+ ac_ct_AS=$AS
+ # Extract the first word of "as", so it can be a program name with args.
+set dummy as; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AS+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AS"; then
+ ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AS="as"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AS=$ac_cv_prog_ac_ct_AS
+if test -n "$ac_ct_AS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
+$as_echo "$ac_ct_AS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_AS" = x; then
+ AS="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AS=$ac_ct_AS
+ fi
+else
+ AS="$ac_cv_prog_AS"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DLLTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DLLTOOL"; then
+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+ ac_ct_DLLTOOL=$DLLTOOL
+ # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DLLTOOL"; then
+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_DLLTOOL" = x; then
+ DLLTOOL="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DLLTOOL=$ac_ct_DLLTOOL
+ fi
+else
+ DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OBJDUMP"; then
+ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OBJDUMP" = x; then
+ OBJDUMP="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJDUMP=$ac_ct_OBJDUMP
+ fi
+else
+ OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+ ;;
+esac
+
+test -z "$AS" && AS=as
+
+
+
+
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+ enable_dlopen=no
+
+
+
+ # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+ enableval=$enable_shared; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+ # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+ enableval=$enable_static; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+ withval=$with_pic; lt_p=${PACKAGE-default}
+ case $withval in
+ yes|no) pic_mode=$withval ;;
+ *)
+ pic_mode=default
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for lt_pkg in $withval; do
+ IFS="$lt_save_ifs"
+ if test "X$lt_pkg" = "X$lt_p"; then
+ pic_mode=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+ # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+ enableval=$enable_fast_install; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ else
+ MAGIC_CMD=:
+ fi
+fi
+
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+ case $cc_basename in
+ nvcc*)
+ lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+ *)
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+ esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ lt_prog_compiler_static=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ lt_prog_compiler_wl='-Xlinker '
+ if test -n "$lt_prog_compiler_pic"; then
+ lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+ fi
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
+ nagfor*)
+ # NAG Fortran compiler
+ lt_prog_compiler_wl='-Wl,-Wl,,'
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-qpic'
+ lt_prog_compiler_static='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ *Sun\ F* | *Sun*Fortran*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Qoption ld '
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ *Intel*\ [CF]*Compiler*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ *Portland\ Group*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ else
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+ if test "$hard_links" = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test "$with_gnu_ld" = yes; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+ *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test "$lt_use_gnu_ld_interface" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ export_dynamic_flag_spec='${wl}--export-all-symbols'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ haiku*)
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ link_all_deplibs=yes
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=' $pic_flag'
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ whole_archive_flag_spec=
+ tmp_sharedflag='--shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ # Also, AIX nm treats weak defined symbols like other global
+ # defined symbols, whereas GNU nm marks them as "W".
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ export_dynamic_flag_spec='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ if test "${lt_cv_aix_libpath+set}" = set; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ if ${lt_cv_aix_libpath_+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }'
+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_="/usr/lib:/lib"
+ fi
+
+fi
+
+ aix_libpath=$lt_cv_aix_libpath_
+fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ if test "${lt_cv_aix_libpath+set}" = set; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ if ${lt_cv_aix_libpath_+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }'
+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_="/usr/lib:/lib"
+ fi
+
+fi
+
+ aix_libpath=$lt_cv_aix_libpath_
+fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' ${wl}-bernotok'
+ allow_undefined_flag=' ${wl}-berok'
+ if test "$with_gnu_ld" = yes; then
+ # We only use this code for GNU lds that support --whole-archive.
+ whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ fi
+ archive_cmds_need_lc=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ case $cc_basename in
+ cl*)
+ # Native MSVC
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ file_list_spec='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+ else
+ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+ enable_shared_with_static_runtimes=yes
+ exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+ # Don't use ranlib
+ old_postinstall_cmds='chmod 644 $oldlib'
+ postlink_cmds='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile="$lt_outputfile.exe"
+ lt_tool_outputfile="$lt_tool_outputfile.exe"
+ ;;
+ esac~
+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # Assume MSVC wrapper
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ enable_shared_with_static_runtimes=yes
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+
+
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ if test "$lt_cv_ld_force_load" = "yes"; then
+ whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+ else
+ whole_archive_flag_spec=''
+ fi
+ link_all_deplibs=yes
+ allow_undefined_flag="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=func_echo_all
+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+ else
+ ld_shlibs=no
+ fi
+
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler__b=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -b"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler__b=yes
+ fi
+ else
+ lt_cv_prog_compiler__b=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test x"$lt_cv_prog_compiler__b" = xyes; then
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ # This should be the same for all languages, so no per-tag cache variable.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo (void) { return 0; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_irix_exported_symbol=yes
+else
+ lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+ if test "$lt_cv_irix_exported_symbol" = yes; then
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+ fi
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='${wl}-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='${wl}-z,text'
+ allow_undefined_flag='${wl}-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ then
+ lt_cv_archive_cmds_need_lc=no
+ else
+ lt_cv_archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+ archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
+ *) lt_sed_strip_eq="s,=/,/,g" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[4-9]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$cc_basename in
+ yes,*)
+ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ ;;
+
+ *,cl*)
+ # Native MSVC
+ libname_spec='$name'
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ library_names_spec='${libname}.dll.lib'
+
+ case $build_os in
+ mingw*)
+ sys_lib_search_path_spec=
+ lt_save_ifs=$IFS
+ IFS=';'
+ for lt_path in $LIB
+ do
+ IFS=$lt_save_ifs
+ # Let DOS variable expansion print the short 8.3 style file name.
+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+ done
+ IFS=$lt_save_ifs
+ # Convert to MSYS style.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+ ;;
+ cygwin*)
+ # Convert to unix form, then to dos form, then back to unix form
+ # but this time dos style (no spaces!) so that the unix form looks
+ # like /cygdrive/c/PROGRA~1:/cygdr...
+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ *)
+ sys_lib_search_path_spec="$LIB"
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # FIXME: find the short name or the path components, as spaces are
+ # common. (e.g. "Program Files" -> "PROGRA~1")
+ ;;
+ esac
+
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
+ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+haiku*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[3-9]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+ lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+fi
+
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test "X$hardcode_automatic" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+ test "$inherit_rpath" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+ if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+else
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ *)
+ ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+ lt_cv_dlopen="shl_load"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_shl_load=yes
+else
+ ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+ ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+ lt_cv_dlopen="dlopen"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+else
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_svld_dlopen=yes
+else
+ ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_dld_link=yes
+else
+ ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report which library types will actually be built
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+# substitute LIBTOOL_DEPS variable in generated Makefiles
+
+
+# version information for shared library
+SHARED_VERSION_INFO="1:0:0"
+
+# substitute SHARED_VERSION_INFO in generated Makefiles
+
+
+# check for make
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+# automake initialization
+am__api_version='1.12'
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+ alias in your environment" "$LINENO" 5
+ fi
+ if test "$2" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if ${ac_cv_path_mkdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='nfft'
+ VERSION='3.2.3'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+mkdir_p="$MKDIR_P"
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+
+################################################################################
+# options for customizing the build process
+################################################################################
+
+# maintainer mode option
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+# enable or disable parts of NFFT
+
+# whether we need the fpt module
+need_fpt="no"
+
+# build all modules by default in maintainer mode or if option is given
+# Check whether --enable-all was given.
+if test "${enable_all+set}" = set; then :
+ enableval=$enable_all; ok=$enableval
+else
+ ok=no
+fi
+
+if test "x$ok" = "xyes" -o "x$USE_MAINTAINER_MODE" = "xyes"; then
+ nfft_module_default="yes"
+else
+ nfft_module_default="no"
+fi
+
+# options for modules
+
+ # Check whether --enable-nfct was given.
+if test "${enable_nfct+set}" = set; then :
+ enableval=$enable_nfct; ok=$enableval
+else
+ ok=$nfft_module_default
+fi
+
+ if test "x$ok" = "xyes"; then
+ HAVE_NFCT="#define HAVE_NFCT 1"
+
+ else
+ HAVE_NFCT="#undef HAVE_NFCT"
+
+ fi
+ if test "x$ok" = "xyes"; then
+ HAVE_NFCT_TRUE=
+ HAVE_NFCT_FALSE='#'
+else
+ HAVE_NFCT_TRUE='#'
+ HAVE_NFCT_FALSE=
+fi
+
+
+
+
+ # Check whether --enable-nfst was given.
+if test "${enable_nfst+set}" = set; then :
+ enableval=$enable_nfst; ok=$enableval
+else
+ ok=$nfft_module_default
+fi
+
+ if test "x$ok" = "xyes"; then
+ HAVE_NFST="#define HAVE_NFST 1"
+
+ else
+ HAVE_NFST="#undef HAVE_NFST"
+
+ fi
+ if test "x$ok" = "xyes"; then
+ HAVE_NFST_TRUE=
+ HAVE_NFST_FALSE='#'
+else
+ HAVE_NFST_TRUE='#'
+ HAVE_NFST_FALSE=
+fi
+
+
+
+
+ # Check whether --enable-nfsft was given.
+if test "${enable_nfsft+set}" = set; then :
+ enableval=$enable_nfsft; ok=$enableval
+else
+ ok=$nfft_module_default
+fi
+
+ if test "x$ok" = "xyes"; then
+ HAVE_NFSFT="#define HAVE_NFSFT 1"
+ need_fpt="yes"
+ else
+ HAVE_NFSFT="#undef HAVE_NFSFT"
+
+ fi
+ if test "x$ok" = "xyes"; then
+ HAVE_NFSFT_TRUE=
+ HAVE_NFSFT_FALSE='#'
+else
+ HAVE_NFSFT_TRUE='#'
+ HAVE_NFSFT_FALSE=
+fi
+
+
+
+
+ # Check whether --enable-nfsoft was given.
+if test "${enable_nfsoft+set}" = set; then :
+ enableval=$enable_nfsoft; ok=$enableval
+else
+ ok=$nfft_module_default
+fi
+
+ if test "x$ok" = "xyes"; then
+ HAVE_NFSOFT="#define HAVE_NFSOFT 1"
+ need_fpt="yes"
+ else
+ HAVE_NFSOFT="#undef HAVE_NFSOFT"
+
+ fi
+ if test "x$ok" = "xyes"; then
+ HAVE_NFSOFT_TRUE=
+ HAVE_NFSOFT_FALSE='#'
+else
+ HAVE_NFSOFT_TRUE='#'
+ HAVE_NFSOFT_FALSE=
+fi
+
+
+
+
+ # Check whether --enable-nnfft was given.
+if test "${enable_nnfft+set}" = set; then :
+ enableval=$enable_nnfft; ok=$enableval
+else
+ ok=$nfft_module_default
+fi
+
+ if test "x$ok" = "xyes"; then
+ HAVE_NNFFT="#define HAVE_NNFFT 1"
+
+ else
+ HAVE_NNFFT="#undef HAVE_NNFFT"
+
+ fi
+ if test "x$ok" = "xyes"; then
+ HAVE_NNFFT_TRUE=
+ HAVE_NNFFT_FALSE='#'
+else
+ HAVE_NNFFT_TRUE='#'
+ HAVE_NNFFT_FALSE=
+fi
+
+
+
+
+ # Check whether --enable-nsfft was given.
+if test "${enable_nsfft+set}" = set; then :
+ enableval=$enable_nsfft; ok=$enableval
+else
+ ok=$nfft_module_default
+fi
+
+ if test "x$ok" = "xyes"; then
+ HAVE_NSFFT="#define HAVE_NSFFT 1"
+
+ else
+ HAVE_NSFFT="#undef HAVE_NSFFT"
+
+ fi
+ if test "x$ok" = "xyes"; then
+ HAVE_NSFFT_TRUE=
+ HAVE_NSFFT_FALSE='#'
+else
+ HAVE_NSFFT_TRUE='#'
+ HAVE_NSFFT_FALSE=
+fi
+
+
+
+
+ # Check whether --enable-mri was given.
+if test "${enable_mri+set}" = set; then :
+ enableval=$enable_mri; ok=$enableval
+else
+ ok=$nfft_module_default
+fi
+
+ if test "x$ok" = "xyes"; then
+ HAVE_MRI="#define HAVE_MRI 1"
+
+ else
+ HAVE_MRI="#undef HAVE_MRI"
+
+ fi
+ if test "x$ok" = "xyes"; then
+ HAVE_MRI_TRUE=
+ HAVE_MRI_FALSE='#'
+else
+ HAVE_MRI_TRUE='#'
+ HAVE_MRI_FALSE=
+fi
+
+
+
+
+ # Check whether --enable-fpt was given.
+if test "${enable_fpt+set}" = set; then :
+ enableval=$enable_fpt; ok=$enableval
+else
+ ok=$nfft_module_default
+fi
+
+ if test "x$ok" = "xyes" -o "x$need_fpt" = "xyes"; then
+ HAVE_FPT="#define HAVE_FPT 1"
+
+ else
+ HAVE_FPT="#undef HAVE_FPT"
+
+ fi
+ if test "x$ok" = "xyes" -o "x$need_fpt" = "xyes"; then
+ HAVE_FPT_TRUE=
+ HAVE_FPT_FALSE='#'
+else
+ HAVE_FPT_TRUE='#'
+ HAVE_FPT_FALSE=
+fi
+
+
+
+
+# multithreaded code
+# Check whether --enable-openmp was given.
+if test "${enable_openmp+set}" = set; then :
+ enableval=$enable_openmp; enable_threads=$enableval
+else
+ enable_threads=no
+fi
+
+ if test "x$enable_threads" = "xyes" ; then
+ HAVE_THREADS_TRUE=
+ HAVE_THREADS_FALSE='#'
+else
+ HAVE_THREADS_TRUE='#'
+ HAVE_THREADS_FALSE=
+fi
+
+
+# debug mode
+# Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then :
+ enableval=$enable_debug; enable_debug=$enableval
+else
+ enable_debug=no
+fi
+
+if test "x$enable_debug" = "xyes"; then
+
+$as_echo "#define NFFT_DEBUG 1" >>confdefs.h
+
+fi
+
+# runtime time measurements
+# Check whether --enable-measure-time was given.
+if test "${enable_measure_time+set}" = set; then :
+ enableval=$enable_measure_time; ok=$enableval
+else
+ ok=no
+fi
+
+if test "x$ok" = "xyes"; then
+
+$as_echo "#define MEASURE_TIME 1" >>confdefs.h
+
+fi
+
+# runtime time measurements for FFTW part
+# Check whether --enable-measure-time-fftw was given.
+if test "${enable_measure_time_fftw+set}" = set; then :
+ enableval=$enable_measure_time_fftw; ok=$enableval
+else
+ ok=no
+fi
+
+if test "x$ok" = "xyes"; then
+
+$as_echo "#define MEASURE_TIME_FFTW 1" >>confdefs.h
+
+fi
+
+# Check whether --enable-mips_zbus_timer was given.
+if test "${enable_mips_zbus_timer+set}" = set; then :
+ enableval=$enable_mips_zbus_timer; have_mips_zbus_timer=$enableval
+else
+ have_mips_zbus_timer=no
+fi
+
+if test "$have_mips_zbus_timer" = "yes"; then
+
+$as_echo "#define HAVE_MIPS_ZBUS_TIMER 1" >>confdefs.h
+
+fi
+
+# select window function
+
+# Check whether --with-window was given.
+if test "${with_window+set}" = set; then :
+ withval=$with_window; window=$withval
+else
+ window="kaiserbessel"
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking window function" >&5
+$as_echo_n "checking window function... " >&6; }
+case "$window" in
+ gaussian)
+
+$as_echo "#define GAUSSIAN 1" >>confdefs.h
+;;
+ bspline)
+
+$as_echo "#define B_SPLINE 1" >>confdefs.h
+;;
+ sinc)
+
+$as_echo "#define SINC_POWER 1" >>confdefs.h
+;;
+ kaiserbessel)
+
+$as_echo "#define KAISER_BESSEL 1" >>confdefs.h
+;;
+ delta)
+
+$as_echo "#define B_SPLINE 1" >>confdefs.h
+;;
+ *)
+ as_fn_error $? "Unknown window function \"$window\"." "$LINENO" 5;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $window" >&5
+$as_echo "$window" >&6; }
+
+################################################################################
+# compiler characteristis
+################################################################################
+
+# select programming language
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# compiler vendor
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5
+$as_echo_n "checking for C compiler vendor... " >&6; }
+if ${ax_cv_c_compiler_vendor+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ax_cv_c_compiler_vendor=unknown
+ # note: don't check for gcc first since some other compilers define __GNUC__
+ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ apple:__APPLE_CC__,__APPLE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do
+ vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#if !($vencpp)
+ thisisanerror;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ax_cv_c_compiler_vendor=`echo $ventest | cut -d: -f1`; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5
+$as_echo "$ax_cv_c_compiler_vendor" >&6; }
+
+
+# check for C99 compliant mode (possibly with GNU extensions)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
+$as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
+if ${ac_cv_prog_cc_c99+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <stdio.h>
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+#define debug(...) fprintf (stderr, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ your preprocessor is broken;
+#endif
+#if BIG_OK
+#else
+ your preprocessor is broken;
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\0'; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static void
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str;
+ int number;
+ float fnumber;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case 's': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case 'd': // int
+ number = va_arg (args_copy, int);
+ break;
+ case 'f': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+}
+
+int
+main ()
+{
+
+ // Check bool.
+ _Bool success = false;
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ test_varargs ("s, d' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
+ || dynamic_array[ni.number - 1] != 543);
+
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c99" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c99"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+$as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c99" != xno; then :
+
+fi
+
+
+
+# per-target flags
+if test "x$CC" != xcc; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
+$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
+$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
+fi
+set dummy $CC; ac_cc=`$as_echo "$2" |
+ sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+rm -f conftest2.*
+if { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } &&
+ test -f conftest2.$ac_objext && { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; };
+then
+ eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+ if test "x$CC" != xcc; then
+ # Test first that cc exists at all.
+ if { ac_try='cc -c conftest.$ac_ext >&5'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+ rm -f conftest2.*
+ if { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } &&
+ test -f conftest2.$ac_objext && { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; };
+ then
+ # cc works too.
+ :
+ else
+ # cc exists but doesn't like -o.
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+ fi
+ fi
+ fi
+else
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f core conftest*
+
+fi
+if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+
+
+
+# enable "const" keyword
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if ${ac_cv_c_const+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this sort of thing. */
+ typedef int charset[2];
+ const charset cs = { 0, 0 };
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *pcpcc;
+ char **ppc;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ pcpcc = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++pcpcc;
+ ppc = (char**) pcpcc;
+ pcpcc = (char const *const *) ppc;
+ { /* SCO 3.2v4 cc rejects this sort of thing. */
+ char tx;
+ char *t = &tx;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ if (s) return 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; } bx;
+ struct s *b = &bx; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ if (!foo) return 0;
+ }
+ return !cs[0] && !zero.x;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_c_const=yes
+else
+ ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+fi
+
+
+# enable "restrict" keyword
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
+$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
+if ${ac_cv_c_restrict+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_c_restrict=no
+ # The order here caters to the fact that C++ does not require restrict.
+ for ac_kw in __restrict __restrict__ _Restrict restrict; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+typedef int * int_ptr;
+ int foo (int_ptr $ac_kw ip) {
+ return ip[0];
+ }
+int
+main ()
+{
+int s[1];
+ int * $ac_kw t = s;
+ t[0] = 0;
+ return foo(t)
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_c_restrict=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ test "$ac_cv_c_restrict" != no && break
+ done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
+$as_echo "$ac_cv_c_restrict" >&6; }
+
+ case $ac_cv_c_restrict in
+ restrict) ;;
+ no) $as_echo "#define restrict /**/" >>confdefs.h
+ ;;
+ *) cat >>confdefs.h <<_ACEOF
+#define restrict $ac_cv_c_restrict
+_ACEOF
+ ;;
+ esac
+
+
+# enable "inline" keyword
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if ${ac_cv_c_inline+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_c_inline=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
+
+case $ac_cv_c_inline in
+ inline | yes) ;;
+ *)
+ case $ac_cv_c_inline in
+ no) ac_val=;;
+ *) ac_val=$ac_cv_c_inline;;
+ esac
+ cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+ ;;
+esac
+
+
+# reset CC variable (the C99 option is added back below)
+CC="$ac_save_CC"
+
+################################################################################
+# program checks
+################################################################################
+
+# C preprocessor
+ac_c_preproc_warn_flag=yes
+
+# assembler
+# By default we simply use the C compiler to build assembly code.
+
+test "${CCAS+set}" = set || CCAS=$CC
+test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+
+
+
+depcc="$CCAS" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CCAS_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CCAS_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CCAS_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CCAS_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; }
+CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then
+ am__fastdepCCAS_TRUE=
+ am__fastdepCCAS_FALSE='#'
+else
+ am__fastdepCCAS_TRUE='#'
+ am__fastdepCCAS_FALSE=
+fi
+
+
+
+# BSD-compatible install
+
+
+# whether ln -s works
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+
+################################################################################
+# 3rd party libraries
+################################################################################
+
+# Check for fftw3.
+
+
+# Check whether --with-fftw3 was given.
+if test "${with_fftw3+set}" = set; then :
+ withval=$with_fftw3; with_fftw3=$withval
+else
+ with_fftw3="yes"
+fi
+
+
+
+# Check whether --with-fftw3-libdir was given.
+if test "${with_fftw3_libdir+set}" = set; then :
+ withval=$with_fftw3_libdir; fftw3_lib_dir=$withval
+else
+ fftw3_lib_dir="yes"
+fi
+
+
+
+# Check whether --with-fftw3-includedir was given.
+if test "${with_fftw3_includedir+set}" = set; then :
+ withval=$with_fftw3_includedir; fftw3_include_dir=$withval
+else
+ fftw3_include_dir="yes"
+fi
+
+
+ if test "x$with_fftw3" != "xyes"; then
+ if test "x${fftw3_include_dir}" = "xyes"; then
+ fftw3_include_dir="$with_fftw3/include"
+ fi
+ if test "x${fftw3_lib_dir}" = "xyes"; then
+ fftw3_lib_dir="$with_fftw3/lib"
+ fi
+ fi
+
+ if test "x${fftw3_include_dir}" != "xyes"; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${fftw3_include_dir} exists" >&5
+$as_echo_n "checking whether directory ${fftw3_include_dir} exists... " >&6; }
+if test -d "${fftw3_include_dir}"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ :
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "The directory ${fftw3_include_dir} does not exist." "$LINENO" 5
+fi
+
+ fftw3_CPPFLAGS="-I$fftw3_include_dir"
+ else
+ fftw3_CPPFLAGS=""
+ fi
+
+ if test "x${fftw3_lib_dir}" != "xyes"; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${fftw3_lib_dir} exists" >&5
+$as_echo_n "checking whether directory ${fftw3_lib_dir} exists... " >&6; }
+if test -d "${fftw3_lib_dir}"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ :
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "The directory ${fftw3_lib_dir} does not exist." "$LINENO" 5
+fi
+
+ fftw3_LDFLAGS="-L$fftw3_lib_dir"
+ else
+ fftw3_LDFLAGS=""
+ fi
+
+ saved_LDFLAGS="$LDFLAGS"
+ saved_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $fftw3_CPPFLAGS"
+ LDFLAGS="$LDFLAGS $fftw3_LDFLAGS"
+
+ # Check if header is present and usable.
+ ax_lib_fftw3=yes
+ ax_lib_fftw3_threads=yes
+ ac_fn_c_check_header_mongrel "$LINENO" "fftw3.h" "ac_cv_header_fftw3_h" "$ac_includes_default"
+if test "x$ac_cv_header_fftw3_h" = xyes; then :
+
+else
+ ax_lib_fftw3=no;ax_lib_fftw3_threads=no
+fi
+
+
+
+ if test "x$ax_lib_fftw3" = "xyes"; then
+ saved_LIBS="$LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_execute in -lfftw3" >&5
+$as_echo_n "checking for fftw_execute in -lfftw3... " >&6; }
+if ${ac_cv_lib_fftw3_fftw_execute+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lfftw3 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_execute ();
+int
+main ()
+{
+return fftw_execute ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_fftw3_fftw_execute=yes
+else
+ ac_cv_lib_fftw3_fftw_execute=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fftw3_fftw_execute" >&5
+$as_echo "$ac_cv_lib_fftw3_fftw_execute" >&6; }
+if test "x$ac_cv_lib_fftw3_fftw_execute" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBFFTW3 1
+_ACEOF
+
+ LIBS="-lfftw3 $LIBS"
+
+else
+ ax_lib_fftw3=no
+fi
+
+ fftw3_LIBS="-lfftw3"
+ LIBS="$saved_LIBS"
+ fi
+
+ if test "x$enable_threads" = "xyes" -a "x$ax_lib_fftw3" = "xyes"; then
+ fftw3_threads_LIBS=""
+ # Combined lib
+ LIBS="-lfftw3 $LIBS"
+ fftw3_threads_LIBS="-lfftw3"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_init_threads in -lfftw3" >&5
+$as_echo_n "checking for fftw_init_threads in -lfftw3... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_init_threads ();
+int
+main ()
+{
+return fftw_init_threads ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_lib_fftw3_threads=yes
+else
+ ax_lib_fftw3_threads=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_lib_fftw3_threads" >&5
+$as_echo "$ax_lib_fftw3_threads" >&6; }
+ LIBS="$saved_LIBS"
+
+ if test "x$ax_lib_fftw3_threads" = "xno"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_init_threads in -lfftw3" >&5
+$as_echo_n "checking for fftw_init_threads in -lfftw3... " >&6; }
+if ${ac_cv_lib_fftw3_fftw_init_threads+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lfftw3 -lpthread -lm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_init_threads ();
+int
+main ()
+{
+return fftw_init_threads ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_fftw3_fftw_init_threads=yes
+else
+ ac_cv_lib_fftw3_fftw_init_threads=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fftw3_fftw_init_threads" >&5
+$as_echo "$ac_cv_lib_fftw3_fftw_init_threads" >&6; }
+if test "x$ac_cv_lib_fftw3_fftw_init_threads" = xyes; then :
+ ax_lib_fftw3_threads=yes
+else
+ ax_lib_fftw3_threads=no
+fi
+
+ fftw3_threads_LIBS="-lfftw3 -lpthread -lm"
+ fi
+
+ if test "x$ax_lib_fftw3_threads" = "xno"; then
+ LIBS="-lfftw3_threads -lfftw3 $LIBS"
+ fftw3_threads_LIBS="-lfftw3_threads -lfftw3"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_init_threads in -lfftw3_threads" >&5
+$as_echo_n "checking for fftw_init_threads in -lfftw3_threads... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_init_threads ();
+int
+main ()
+{
+return fftw_init_threads ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_lib_fftw3_threads=yes
+else
+ ax_lib_fftw3_threads=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_lib_fftw3_threads" >&5
+$as_echo "$ax_lib_fftw3_threads" >&6; }
+ LIBS="$saved_LIBS"
+ fi
+
+ if test "x$ax_lib_fftw3_threads" = "xno"; then
+ LIBS="-lfftw3 -lpthread -lm $LIBS"
+ fftw3_threads_LIBS="-lfftw3_threads -lfftw3 -lpthread -lm"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_init_threads in -lfftw3_threads" >&5
+$as_echo_n "checking for fftw_init_threads in -lfftw3_threads... " >&6; }
+if ${ac_cv_lib_fftw3_threads_fftw_init_threads+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lfftw3_threads $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_init_threads ();
+int
+main ()
+{
+return fftw_init_threads ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_fftw3_threads_fftw_init_threads=yes
+else
+ ac_cv_lib_fftw3_threads_fftw_init_threads=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fftw3_threads_fftw_init_threads" >&5
+$as_echo "$ac_cv_lib_fftw3_threads_fftw_init_threads" >&6; }
+if test "x$ac_cv_lib_fftw3_threads_fftw_init_threads" = xyes; then :
+ ax_lib_fftw3_threads=yes
+else
+ ax_lib_fftw3_threads=no
+fi
+
+ fi
+
+ LIBS="$saved_LIBS"
+ fi
+
+ # Restore saved flags.
+ CPPFLAGS="$saved_CPPFLAGS"
+ LDFLAGS="$saved_LDFLAGS"
+
+
+
+
+
+
+if test "x$ax_lib_fftw3" = "xno"; then
+ as_fn_error $? "You don't seem to have the FFTW 3 library installed. You can #
+ download it from http://www.fftw.org. If you have installed FFTW 3, #
+ make sure that this configure script can find it. See ./configure #
+ --help for more information." "$LINENO" 5
+fi
+
+if test "x$enable_threads" = "xyes" -a "x$ax_lib_fftw3_threads" = "xno"; then
+ as_fn_error $? "You don't seem to have the threaded FFTW 3 library installed." "$LINENO" 5
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C compiler" >&5
+$as_echo_n "checking for OpenMP flag of C compiler... " >&6; }
+if ${ax_cv_c_openmp+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ saveCFLAGS=$CFLAGS
+ax_cv_c_openmp=unknown
+# Flags to try: -fopenmp (gcc), -openmp (icc), -mp (SGI & PGI),
+# -xopenmp (Sun), -omp (Tru64), -qsmp=omp (AIX), none
+ax_openmp_flags="-fopenmp -openmp -mp -xopenmp -omp -qsmp=omp none"
+if test "x$OPENMP_CFLAGS" != x; then
+ ax_openmp_flags="$OPENMP_CFLAGS $ax_openmp_flags"
+fi
+for ax_openmp_flag in $ax_openmp_flags; do
+ case $ax_openmp_flag in
+ none) CFLAGS=$saveC ;;
+ *) CFLAGS="$saveCFLAGS $ax_openmp_flag" ;;
+ esac
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char omp_set_num_threads ();
+int
+main ()
+{
+return omp_set_num_threads ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_cv_c_openmp=$ax_openmp_flag; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+done
+CFLAGS=$saveCFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_openmp" >&5
+$as_echo "$ax_cv_c_openmp" >&6; }
+if test "x$ax_cv_c_openmp" = "xunknown"; then
+ :
+else
+ if test "x$ax_cv_c_openmp" != "xnone"; then
+ OPENMP_CFLAGS=$ax_cv_c_openmp
+ fi
+
+$as_echo "#define HAVE_OPENMP 1" >>confdefs.h
+
+fi
+
+ if test "x$ax_cv_c_openmp" != "xunknown" ; then
+ HAVE_OPENMP_TRUE=
+ HAVE_OPENMP_FALSE='#'
+else
+ HAVE_OPENMP_TRUE='#'
+ HAVE_OPENMP_FALSE=
+fi
+
+
+
+if test "x$enable_threads" = "xyes" -a "x$ax_cv_c_openmp" = "xunknown"; then
+ as_fn_error $? "You don't seem to have a C compiler with OpenMP support installed which is required for threaded NFFT." "$LINENO" 5
+fi
+
+# Check for MATLAB.
+
+
+
+
+ # option to enable mex file compilation
+
+# Check whether --with-matlab was given.
+if test "${with_matlab+set}" = set; then :
+ withval=$with_matlab; matlab_dir=${withval}
+else
+ matlab_dir="no"
+fi
+
+
+
+# Check whether --with-matlab-arch was given.
+if test "${with_matlab_arch+set}" = set; then :
+ withval=$with_matlab_arch; matlab_arch=${withval}
+else
+ matlab_arch="yes"
+fi
+
+
+ # Check whether --enable-matlab-argchecks was given.
+if test "${enable_matlab_argchecks+set}" = set; then :
+ enableval=$enable_matlab_argchecks; ok="$enableval"
+else
+ ok="yes"
+fi
+
+
+ if test "x$ok" = "xyes"; then
+
+$as_echo "#define MATLAB_ARGCHECKS 1" >>confdefs.h
+
+ fi
+
+
+# Check whether --with-matlab-fftw3-libdir was given.
+if test "${with_matlab_fftw3_libdir+set}" = set; then :
+ withval=$with_matlab_fftw3_libdir; matlab_fftw3_lib_dir=$withval
+else
+ matlab_fftw3_lib_dir="yes"
+fi
+
+
+ # Check whether --enable-matlab-threads was given.
+if test "${enable_matlab_threads+set}" = set; then :
+ enableval=$enable_matlab_threads; matlab_threads="$enableval"
+else
+ matlab_threads="$enable_threads"
+fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to check for Matlab" >&5
+$as_echo_n "checking whether to check for Matlab... " >&6; }
+
+ if test "x${matlab_dir}" = "xno"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ax_prog_matlab="no"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+ # Matlab root
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${matlab_dir} exists" >&5
+$as_echo_n "checking whether directory ${matlab_dir} exists... " >&6; }
+if test -d "${matlab_dir}"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ :
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "Please supply a valid path to a Matlab root directory or run configure without the option --with-matlab." "$LINENO" 5
+fi
+
+
+ # subdirectories
+ matlab_bin_dir="${matlab_dir}/bin"
+ matlab_src_dir="${matlab_dir}/extern/src"
+ matlab_include_dir="${matlab_dir}/extern/include"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${matlab_bin_dir} exists" >&5
+$as_echo_n "checking whether directory ${matlab_bin_dir} exists... " >&6; }
+if test -d "${matlab_bin_dir}"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ :
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "The directory ${matlab_dir} does not seem to be a valid Matlab root directory." "$LINENO" 5
+fi
+
+ # More recent versions of Matlab do no longer have the src directory.
+ # AX_CHECK_DIR([${matlab_src_dir}],[],
+ # [AC_MSG_ERROR([The directory ${matlab_dir} does not seem to be a valid Matlab root directory.])])
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${matlab_include_dir} exists" >&5
+$as_echo_n "checking whether directory ${matlab_include_dir} exists... " >&6; }
+if test -d "${matlab_include_dir}"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ :
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "The directory ${matlab_dir} does not seem to be a valid Matlab root directory." "$LINENO" 5
+fi
+
+
+ # architecture and mex file extension
+ if test ! "x${matlab_arch}" = "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab architecture" >&5
+$as_echo_n "checking for Matlab architecture... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_arch}" >&5
+$as_echo "${matlab_arch}" >&6; }
+ # mex file extension for architecture
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mex file extension" >&5
+$as_echo_n "checking for mex file extension... " >&6; }
+ case $matlab_arch in
+ glnx86) matlab_mexext="mexglx";;
+ glnxa64) matlab_mexext="mexa64";;
+ mac) matlab_mexext="mexmac";;
+ maci) matlab_mexext="mexmaci";;
+ maci64) matlab_mexext="mexmaci64";;
+ sol64) matlab_mexext="mexs64";;
+ win32) matlab_mexext="mexw32";;
+ win64) matlab_mexext="mexw64";;
+ *) as_fn_error $? "Unsupported or invalid architecture ${matlab_arch}." "$LINENO" 5;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_mexext}" >&5
+$as_echo "${matlab_mexext}" >&6; }
+ else
+ matlab_mexext="unknown"
+ matlab_arch="unknown"
+
+ # mex file extension, maybe
+ for matlab_check_prog_mexext in mexext mexext.sh mexext.bat; do
+ unset ac_cv_path_matlab_prog_mexext
+ # Extract the first word of "$matlab_check_prog_mexext", so it can be a program name with args.
+set dummy $matlab_check_prog_mexext; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_matlab_prog_mexext+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $matlab_prog_mexext in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_matlab_prog_mexext="$matlab_prog_mexext" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $matlab_bin_dir$PATH_SEPARATOR$PATH$PATH_SEPARATOR$matlab_bin_dir
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_matlab_prog_mexext="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_matlab_prog_mexext" && ac_cv_path_matlab_prog_mexext="no"
+ ;;
+esac
+fi
+matlab_prog_mexext=$ac_cv_path_matlab_prog_mexext
+if test -n "$matlab_prog_mexext"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $matlab_prog_mexext" >&5
+$as_echo "$matlab_prog_mexext" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test ! "x${matlab_prog_mexext}" = "xno"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mex file extension" >&5
+$as_echo_n "checking for mex file extension... " >&6; }
+ if test "x${host_os}" = "xmingw32"; then
+ matlab_mexext=mexw32
+ else
+ matlab_mexext=`${matlab_prog_mexext}`
+ matlab_mexext=`echo ${matlab_mexext} | tr -d '\r\n'`
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_mexext}" >&5
+$as_echo "${matlab_mexext}" >&6; }
+ break
+ fi
+ done
+
+ # architecture, maybe
+ if test "x${matlab_mexext}" = "xunknown"; then
+ # Try guessing the architecture based on host
+ case $host in
+ *86_64*linux*) matlab_arch_test="glnxa64";;
+ *86*linux*) matlab_arch_test="glnx86";;
+ *powerpc*darwin*) matlab_arch_test="mac mac64";;
+ *86*darwin*) matlab_arch_test="maci maci64";;
+ *solaris*) matlab_arch_test="sol sol64";;
+ *cygwin*) matlab_arch_test="win32 win64";;
+ *mingw*) matlab_arch_test="win32 win64";;
+ *) as_fn_error $? "Cannot guess Matlab architecture based on host type." "$LINENO" 5;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for architecture" >&5
+$as_echo_n "checking for architecture... " >&6; }
+ for matlab_arch in "$matlab_arch_test"; do
+ if test -d "${matlab_bin_dir}/${matlab_arch}" -a -f "${matlab_bin_dir}/${matlab_arch}/MATLAB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_arch}" >&5
+$as_echo "${matlab_arch}" >&6; }
+ break
+ fi
+ matlab_arch="unkown"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5
+$as_echo "unknown" >&6; }
+ done
+ fi
+
+ # mex file extension or architecture found
+ if test "x${matlab_mexext}" = "xunknown" -a "x${matlab_arch}" = "xunknown"; then
+ as_fn_error $? "Could not determine mex file extension nor Matlab architecture. Please supply a valid architecture flag using the option --with-matlab-arch" "$LINENO" 5
+ fi
+
+ if test "x${matlab_arch}" = "xunknown"; then
+ # architecture for mex file extension
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for architecture" >&5
+$as_echo_n "checking for architecture... " >&6; }
+ case ${matlab_mexext} in
+ mexglx) matlab_arch="glnx86";;
+ mexa64) matlab_arch="glnxa64";;
+ mexmac) matlab_arch="mac";;
+ mexmaci) matlab_arch="maci";;
+ mexmaci64) matlab_arch="maci64";;
+ mexs64) matlab_arch="sol64";;
+ mexw32) matlab_arch="win32";;
+ mexw64) matlab_arch="win64";;
+ *) as_fn_error $? "Unsupported mex file extension ${matlab_mexext}." "$LINENO" 5;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_arch}" >&5
+$as_echo "${matlab_arch}" >&6; }
+ elif test "x${matlab_mexext}" = "xunknown"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mex file extension" >&5
+$as_echo_n "checking for mex file extension... " >&6; }
+ case $matlab_arch in
+ glnx86) matlab_mexext="mexglx";;
+ glnxa64) matlab_mexext="mexa64";;
+ mac) matlab_mexext="mexmac";;
+ maci) matlab_mexext="mexmaci";;
+ maci64) matlab_mexext="mexmaci64";;
+ sol64) matlab_mexext="mexs64";;
+ win32) matlab_mexext="mexw32";;
+ win64) matlab_mexext="mexw64";;
+ *) as_fn_error $? "Unsupported or invalid architecture ${matlab_arch}." "$LINENO" 5;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_mexext}" >&5
+$as_echo "${matlab_mexext}" >&6; }
+ fi
+ fi
+
+ # add "." to mex file extension
+ matlab_mexext=".$matlab_mexext"
+
+ # arch bin dir
+ matlab_arch_bin_dir="${matlab_bin_dir}/${matlab_arch}"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${matlab_arch_bin_dir} exists" >&5
+$as_echo_n "checking whether directory ${matlab_arch_bin_dir} exists... " >&6; }
+if test -d "${matlab_arch_bin_dir}"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ :
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "The directory ${matlab_dir} does not seem to be a valid Matlab root directory." "$LINENO" 5
+fi
+
+
+ # dynamic library extension for architecture
+ case $matlab_arch in
+ glnx86|glnxa64|sol|sol64) matlab_libext=".so";;
+ mac|mac64|maci|maci64) matlab_libext=".dylib";;
+ win32|win64) matlab_libext=".dll";;
+ *) as_fn_error $? "Unsupported or invalid architecture ${matlab_arch}." "$LINENO" 5;;
+ esac
+
+ # libraries
+ matlab_LDFLAGS="-L${matlab_arch_bin_dir}"
+ saved_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS ${matlab_LDFLAGS}"
+ matlab_LIBS=""
+ matlab_fftw3_LIBS=""
+ matlab_fftw3_LDFLAGS=""
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mxMalloc in -lmx" >&5
+$as_echo_n "checking for mxMalloc in -lmx... " >&6; }
+if ${ac_cv_lib_mx_mxMalloc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmx $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char mxMalloc ();
+int
+main ()
+{
+return mxMalloc ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_mx_mxMalloc=yes
+else
+ ac_cv_lib_mx_mxMalloc=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mx_mxMalloc" >&5
+$as_echo "$ac_cv_lib_mx_mxMalloc" >&6; }
+if test "x$ac_cv_lib_mx_mxMalloc" = xyes; then :
+ matlab_LIBS="$matlab_LIBS -lmx"
+else
+ as_ac_File=`$as_echo "ac_cv_file_${matlab_arch_bin_dir}/libmx${matlab_libext}" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${matlab_arch_bin_dir}/libmx${matlab_libext}" >&5
+$as_echo_n "checking for ${matlab_arch_bin_dir}/libmx${matlab_libext}... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ test "$cross_compiling" = yes &&
+ as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "${matlab_arch_bin_dir}/libmx${matlab_libext}"; then
+ eval "$as_ac_File=yes"
+else
+ eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+ matlab_LIBS="$matlab_LIBS -lmx"
+else
+ as_fn_error $? "Needed Matlab library mx not usable." "$LINENO" 5
+fi
+
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mexCallMATLAB in -lmex" >&5
+$as_echo_n "checking for mexCallMATLAB in -lmex... " >&6; }
+if ${ac_cv_lib_mex_mexCallMATLAB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmex $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char mexCallMATLAB ();
+int
+main ()
+{
+return mexCallMATLAB ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_mex_mexCallMATLAB=yes
+else
+ ac_cv_lib_mex_mexCallMATLAB=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mex_mexCallMATLAB" >&5
+$as_echo "$ac_cv_lib_mex_mexCallMATLAB" >&6; }
+if test "x$ac_cv_lib_mex_mexCallMATLAB" = xyes; then :
+ matlab_LIBS="$matlab_LIBS -lmex"
+else
+ as_ac_File=`$as_echo "ac_cv_file_${matlab_arch_bin_dir}/libmex${matlab_libext}" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${matlab_arch_bin_dir}/libmex${matlab_libext}" >&5
+$as_echo_n "checking for ${matlab_arch_bin_dir}/libmex${matlab_libext}... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ test "$cross_compiling" = yes &&
+ as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "${matlab_arch_bin_dir}/libmex${matlab_libext}"; then
+ eval "$as_ac_File=yes"
+else
+ eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+ matlab_LIBS="$matlab_LIBS -lmex"
+else
+ as_fn_error $? "Needed Matlab library mex not usable." "$LINENO" 5
+fi
+
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for matGetVariable in -lmat" >&5
+$as_echo_n "checking for matGetVariable in -lmat... " >&6; }
+if ${ac_cv_lib_mat_matGetVariable+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmat $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char matGetVariable ();
+int
+main ()
+{
+return matGetVariable ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_mat_matGetVariable=yes
+else
+ ac_cv_lib_mat_matGetVariable=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mat_matGetVariable" >&5
+$as_echo "$ac_cv_lib_mat_matGetVariable" >&6; }
+if test "x$ac_cv_lib_mat_matGetVariable" = xyes; then :
+ matlab_LIBS="$matlab_LIBS -lmat"
+else
+ as_ac_File=`$as_echo "ac_cv_file_${matlab_arch_bin_dir}/libmat${matlab_libext}" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${matlab_arch_bin_dir}/libmat${matlab_libext}" >&5
+$as_echo_n "checking for ${matlab_arch_bin_dir}/libmat${matlab_libext}... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ test "$cross_compiling" = yes &&
+ as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "${matlab_arch_bin_dir}/libmat${matlab_libext}"; then
+ eval "$as_ac_File=yes"
+else
+ eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+ matlab_LIBS="$matlab_LIBS -lmat"
+else
+ as_fn_error $? "Needed Matlab library mat not usable." "$LINENO" 5
+fi
+
+fi
+
+
+ LDFLAGS="$saved_LDFLAGS"
+
+ matlab_CPPFLAGS="-I${matlab_include_dir}"
+
+ # mexversion.c
+ as_ac_File=`$as_echo "ac_cv_file_${matlab_src_dir}/mexversion.c" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${matlab_src_dir}/mexversion.c" >&5
+$as_echo_n "checking for ${matlab_src_dir}/mexversion.c... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ test "$cross_compiling" = yes &&
+ as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "${matlab_src_dir}/mexversion.c"; then
+ eval "$as_ac_File=yes"
+else
+ eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+ matlab_CPPFLAGS="${matlab_CPPFLAGS} -I${matlab_src_dir}";
+$as_echo "#define HAVE_MEXVERSION_C 1" >>confdefs.h
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: File ${matlab_src_dir}/mexversion.c not found" >&5
+$as_echo "$as_me: WARNING: File ${matlab_src_dir}/mexversion.c not found" >&2;}
+fi
+
+
+ ax_prog_matlab="yes"
+
+ # Only overwrite Matlab fftw3 lib dir when not explicitly set
+ if test "x${matlab_fftw3_lib_dir}" = "xyes"; then
+ matlab_fftw3_lib_dir="${matlab_bin_dir}/${matlab_arch}"
+ else
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${matlab_fftw3_lib_dir} exists" >&5
+$as_echo_n "checking whether directory ${matlab_fftw3_lib_dir} exists... " >&6; }
+if test -d "${matlab_fftw3_lib_dir}"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ :
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "The directory ${matlab_fftw3_lib_dir} does not seem to be a valid fftw3 library directory." "$LINENO" 5
+fi
+
+ matlab_fftw3_LDFLAGS="-L$matlab_fftw3_lib_dir"
+ fi
+
+ saved_LIBS="$LIBS"
+ saved_LDFLAGS="$LDFLAGS"
+
+ matlab_fftw3_LIBS="-lfftw3"
+ LIBS="-lfftw3 $LIBS"
+ LDFLAGS="-L$matlab_fftw3_lib_dir ${matlab_LDFLAGS} $LDFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab fftw3 library" >&5
+$as_echo_n "checking for Matlab fftw3 library... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_execute ();
+int
+main ()
+{
+return fftw_execute ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_matlab_lib_fftw3=yes
+else
+ ax_matlab_lib_fftw3=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3" >&5
+$as_echo "$ax_matlab_lib_fftw3" >&6; }
+
+ if test "x$ax_matlab_lib_fftw3" = "xno"; then
+ matlab_fftw3_LIBS="-lfftw3 -lm"
+ LIBS="$matlab_fftw3_LIBS $saved_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab fftw3 library (-lm set)" >&5
+$as_echo_n "checking for Matlab fftw3 library (-lm set)... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_execute ();
+int
+main ()
+{
+return fftw_execute ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_matlab_lib_fftw3=yes
+else
+ ax_matlab_lib_fftw3=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3" >&5
+$as_echo "$ax_matlab_lib_fftw3" >&6; }
+ fi
+
+ if test "x$ax_matlab_lib_fftw3" = "xno"; then
+ matlab_fftw3_LIBS="-lfftw3 -pthread -lm"
+ LIBS="$matlab_fftw3_LIBS $saved_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab fftw3 library (-lpthread -lm set)" >&5
+$as_echo_n "checking for Matlab fftw3 library (-lpthread -lm set)... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_execute ();
+int
+main ()
+{
+return fftw_execute ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_matlab_lib_fftw3=yes
+else
+ ax_matlab_lib_fftw3=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3" >&5
+$as_echo "$ax_matlab_lib_fftw3" >&6; }
+ fi
+
+ if test "x$ax_matlab_lib_fftw3" = "xno"; then
+ as_fn_error $? "You don't seem to have installed installed the FFTW 3 libray for the NFFT Matlab interface." "$LINENO" 5
+ fi
+
+ if test "x$matlab_threads" = "xyes"; then
+ LIBS="$matlab_fftw3_LIBS $saved_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab combined fftw3 library with thread support" >&5
+$as_echo_n "checking for Matlab combined fftw3 library with thread support... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_init_threads ();
+int
+main ()
+{
+return fftw_init_threads ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_matlab_lib_fftw3_threads=yes
+else
+ ax_matlab_lib_fftw3_threads=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3_threads" >&5
+$as_echo "$ax_matlab_lib_fftw3_threads" >&6; }
+
+ if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
+ ax_matlab_lib_fftw3_threads="yes"
+ LIBS="$matlab_fftw3_LIBS -lpthread -lm $saved_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab combined fftw3 library with thread support (-lpthread -lm set)" >&5
+$as_echo_n "checking for Matlab combined fftw3 library with thread support (-lpthread -lm set)... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_init_threads ();
+int
+main ()
+{
+return fftw_init_threads ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ matlab_fftw3_LIBS="$matlab_fftw3_LIBS -lpthread -lm"
+else
+ ax_matlab_lib_fftw3_threads=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3_threads" >&5
+$as_echo "$ax_matlab_lib_fftw3_threads" >&6; }
+ fi
+
+ if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
+ ax_matlab_lib_fftw3_threads="yes"
+ LIBS="-lfftw3_threads $matlab_fftw3_LIBS $saved_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab fftw3 library with thread support" >&5
+$as_echo_n "checking for Matlab fftw3 library with thread support... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_init_threads ();
+int
+main ()
+{
+return fftw_init_threads ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ matlab_fftw3_LIBS="-lfftw3_threads $matlab_fftw3_LIBS"
+else
+ ax_matlab_lib_fftw3_threads=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3_threads" >&5
+$as_echo "$ax_matlab_lib_fftw3_threads" >&6; }
+ fi
+
+ if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
+ ax_matlab_lib_fftw3_threads="yes"
+ LIBS="-lfftw3_threads -lpthread $matlab_fftw3_LIBS $saved_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab fftw3 library with thread support (-lpthread set)" >&5
+$as_echo_n "checking for Matlab fftw3 library with thread support (-lpthread set)... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char fftw_init_threads ();
+int
+main ()
+{
+return fftw_init_threads ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ matlab_fftw3_LIBS="-lfftw3_threads -lpthread $matlab_fftw3_LIBS"
+else
+ ax_matlab_lib_fftw3_threads=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3_threads" >&5
+$as_echo "$ax_matlab_lib_fftw3_threads" >&6; }
+ fi
+
+ if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
+ as_fn_error $? "You don't seem to have installed the FFTW 3 libray for the NFFT Matlab interface." "$LINENO" 5
+ fi
+ fi
+
+ LIBS="$saved_LIBS"
+ LDFLAGS="$saved_LDFLAGS"
+ fi
+ if test "x$ax_prog_matlab" = "xyes" ; then
+ HAVE_MATLAB_TRUE=
+ HAVE_MATLAB_FALSE='#'
+else
+ HAVE_MATLAB_TRUE='#'
+ HAVE_MATLAB_FALSE=
+fi
+
+ if test "x$matlab_threads" = "xyes"; then
+ HAVE_MATLAB_THREADS_TRUE=
+ HAVE_MATLAB_THREADS_FALSE='#'
+else
+ HAVE_MATLAB_THREADS_TRUE='#'
+ HAVE_MATLAB_THREADS_FALSE=
+fi
+
+
+
+
+
+
+
+
+
+if test "x$matlab_threads" = "xyes" -a "x$enable_threads" != "xyes"; then
+ as_fn_error $? "The NFFT Matlab interface with thread support requires the threaded NFFT to be built. Please re-run configure with \"--enable-openmp\"." "$LINENO" 5
+fi
+
+ if test "x$ax_prog_matlab" = "xyes" ; then
+ HAVE_MATLAB_TRUE=
+ HAVE_MATLAB_FALSE='#'
+else
+ HAVE_MATLAB_TRUE='#'
+ HAVE_MATLAB_FALSE=
+fi
+
+
+
+
+
+
+################################################################################
+# compiler options
+################################################################################
+
+# Try to choose good compiler options.
+if test "x$ac_test_CFLAGS" != "xset"; then
+ saved_CPPFLAGS="$CPPFLAGS"
+ saved_LDFLAGS="$LDFLAGS"
+ saved_LIBS="$LIBS"
+ CPPFLAGS="$CPPFLAGS $fftw3_CPPFLAGS"
+ LIBS="$LIBS $fftw3_LIBS"
+ LDFLAGS="$LDFLAGS $fftw3_LDFLAGS"
+
+
+
+
+
+# Check whether --enable-portable-binary was given.
+if test "${enable_portable_binary+set}" = set; then :
+ enableval=$enable_portable_binary; acx_maxopt_portable=$enableval
+else
+ acx_maxopt_portable=no
+fi
+
+
+# Try to determine "good" native compiler flags if none specified via CFLAGS
+if test "$ac_test_CFLAGS" != "set"; then
+ CFLAGS=""
+ case $ax_cv_c_compiler_vendor in
+ dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host"
+ if test "x$acx_maxopt_portable" = xno; then
+ CFLAGS="$CFLAGS -arch host"
+ fi;;
+
+ sun) CFLAGS="-native -fast -xO5 -dalign"
+ if test "x$acx_maxopt_portable" = xyes; then
+ CFLAGS="$CFLAGS -xarch=generic"
+ fi;;
+
+ hp) CFLAGS="+Oall +Optrs_ansi +DSnative"
+ if test "x$acx_maxopt_portable" = xyes; then
+ CFLAGS="$CFLAGS +DAportable"
+ fi;;
+
+ ibm) if test "x$acx_maxopt_portable" = xno; then
+ xlc_opt="-qarch=auto -qtune=auto"
+ else
+ xlc_opt="-qtune=auto"
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $xlc_opt" >&5
+$as_echo_n "checking whether C compiler accepts $xlc_opt... " >&6; }
+ax_save_FLAGS=$CFLAGS
+ CFLAGS="$xlc_opt"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=yes
+else
+ eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ CFLAGS="-O3 -qansialias -w $xlc_opt"
+else
+ CFLAGS="-O3 -qansialias -w"
+ echo "******************************************************"
+ echo "* You seem to have the IBM C compiler. It is *"
+ echo "* recommended for best performance that you use: *"
+ echo "* *"
+ echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *"
+ echo "* ^^^ ^^^ *"
+ echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *"
+ echo "* CPU you have. (Set the CFLAGS environment var. *"
+ echo "* and re-run configure.) For more info, man cc. *"
+ echo "******************************************************"
+fi
+
+ ;;
+
+ intel) CFLAGS="-O3"
+ # Intel seems to have changed the spelling of this flag recently
+ icc_ansi_alias="unknown"
+ for flag in -ansi-alias -ansi_alias; do
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+$as_echo_n "checking whether C compiler accepts $flag... " >&6; }
+ax_save_FLAGS=$CFLAGS
+ CFLAGS="$flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes
+else
+ eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ icc_ansi_alias=$flag; break
+else
+ :
+fi
+
+ done
+ if test "x$icc_ansi_alias" != xunknown; then
+ CFLAGS="$CFLAGS $icc_ansi_alias"
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -malign-double" >&5
+$as_echo_n "checking whether C compiler accepts -malign-double... " >&6; }
+if ${ax_cv_c_flags__malign_double+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_save_FLAGS=$CFLAGS
+ CFLAGS="-malign-double"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ax_cv_c_flags__malign_double=yes
+else
+ ax_cv_c_flags__malign_double=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__malign_double
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ CFLAGS="$CFLAGS -malign-double"
+else
+ :
+fi
+
+ if test "x$acx_maxopt_portable" = xno; then
+ icc_archflag=unknown
+ icc_flags=""
+ # -xN etcetera are for older versions of icc:
+ case $host_cpu in
+ i686*|x86_64*)
+ # icc accepts gcc assembly syntax, so these should work:
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5
+$as_echo_n "checking for x86 cpuid 0 output... " >&6; }
+if ${ax_cv_gcc_x86_cpuid_0+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ ax_cv_gcc_x86_cpuid_0=unknown
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+
+ int op = 0, eax, ebx, ecx, edx;
+ FILE *f;
+ __asm__("push %%ebx\n\t"
+ "cpuid\n\t"
+ "pop %%ebx"
+ : "=a" (eax), "=c" (ecx), "=d" (edx)
+ : "a" (op));
+ __asm__("push %%ebx\n\t"
+ "cpuid\n\t"
+ "mov %%ebx, %%eax\n\t"
+ "pop %%ebx"
+ : "=a" (ebx), "=c" (ecx), "=d" (edx)
+ : "a" (op));
+ f = fopen("conftest_cpuid", "w"); if (!f) return 1;
+ fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
+ fclose(f);
+ return 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid
+else
+ ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5
+$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5
+$as_echo_n "checking for x86 cpuid 1 output... " >&6; }
+if ${ax_cv_gcc_x86_cpuid_1+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ ax_cv_gcc_x86_cpuid_1=unknown
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+
+ int op = 1, eax, ebx, ecx, edx;
+ FILE *f;
+ __asm__("push %%ebx\n\t"
+ "cpuid\n\t"
+ "pop %%ebx"
+ : "=a" (eax), "=c" (ecx), "=d" (edx)
+ : "a" (op));
+ __asm__("push %%ebx\n\t"
+ "cpuid\n\t"
+ "mov %%ebx, %%eax\n\t"
+ "pop %%ebx"
+ : "=a" (ebx), "=c" (ecx), "=d" (edx)
+ : "a" (op));
+ f = fopen("conftest_cpuid", "w"); if (!f) return 1;
+ fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
+ fclose(f);
+ return 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid
+else
+ ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5
+$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG
+ *:756e6547:*:*) # Intel
+ case $ax_cv_gcc_x86_cpuid_1 in
+ *6a?:*[234]:*:*|*6[789b]?:*:*:*) icc_flags="-xK";;
+ *f3[347]:*:*:*|*f41347:*:*:*) icc_flags="-xP -xN -xW -xK";;
+ *f??:*:*:*) icc_flags="-xN -xW -xK";;
+ esac ;;
+ esac ;;
+ esac
+ # newer icc versions should support -xHost
+ icc_flags="-xHost $icc_flags"
+ if test "x$icc_flags" != x; then
+ for flag in $icc_flags; do
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+$as_echo_n "checking whether C compiler accepts $flag... " >&6; }
+ax_save_FLAGS=$CFLAGS
+ CFLAGS="$flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes
+else
+ eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ icc_archflag=$flag; break
+else
+ :
+fi
+
+ done
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icc architecture flag" >&5
+$as_echo_n "checking for icc architecture flag... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $icc_archflag" >&5
+$as_echo "$icc_archflag" >&6; }
+ if test "x$icc_archflag" != xunknown; then
+ CFLAGS="$CFLAGS $icc_archflag"
+ fi
+ fi
+ ;;
+
+ gnu)
+ # default optimization flags for gcc on all systems
+ CFLAGS="-O3 -fomit-frame-pointer"
+
+ # -malign-double for x86 systems
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -malign-double" >&5
+$as_echo_n "checking whether C compiler accepts -malign-double... " >&6; }
+if ${ax_cv_c_flags__malign_double+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_save_FLAGS=$CFLAGS
+ CFLAGS="-malign-double"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ax_cv_c_flags__malign_double=yes
+else
+ ax_cv_c_flags__malign_double=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__malign_double
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ CFLAGS="$CFLAGS -malign-double"
+else
+ :
+fi
+
+
+ # -fstrict-aliasing for gcc-2.95+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstrict-aliasing" >&5
+$as_echo_n "checking whether C compiler accepts -fstrict-aliasing... " >&6; }
+if ${ax_cv_c_flags__fstrict_aliasing+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_save_FLAGS=$CFLAGS
+ CFLAGS="-fstrict-aliasing"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ax_cv_c_flags__fstrict_aliasing=yes
+else
+ ax_cv_c_flags__fstrict_aliasing=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__fstrict_aliasing
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ CFLAGS="$CFLAGS -fstrict-aliasing"
+else
+ :
+fi
+
+
+ # note that we enable "unsafe" fp optimization with other compilers, too
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -ffast-math" >&5
+$as_echo_n "checking whether C compiler accepts -ffast-math... " >&6; }
+if ${ax_cv_c_flags__ffast_math+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_save_FLAGS=$CFLAGS
+ CFLAGS="-ffast-math"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ax_cv_c_flags__ffast_math=yes
+else
+ ax_cv_c_flags__ffast_math=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__ffast_math
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ CFLAGS="$CFLAGS -ffast-math"
+else
+ :
+fi
+
+
+
+
+
+
+# Check whether --with-gcc-arch was given.
+if test "${with_gcc_arch+set}" = set; then :
+ withval=$with_gcc_arch; ax_gcc_arch=$withval
+else
+ ax_gcc_arch=yes
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5
+$as_echo_n "checking for gcc architecture flag... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5
+$as_echo "" >&6; }
+if ${ax_cv_gcc_archflag+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ax_cv_gcc_archflag="unknown"
+
+if test "$GCC" = yes; then
+
+if test "x$ax_gcc_arch" = xyes; then
+ax_gcc_arch=""
+if test "$cross_compiling" = no; then
+case $host_cpu in
+ i[3456]86*|x86_64*|amd64*) # use cpuid codes, in part from x86info-1.21 by D. Jones
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5
+$as_echo_n "checking for x86 cpuid 0 output... " >&6; }
+if ${ax_cv_gcc_x86_cpuid_0+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ ax_cv_gcc_x86_cpuid_0=unknown
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+
+ int op = 0, eax, ebx, ecx, edx;
+ FILE *f;
+ __asm__("push %%ebx\n\t"
+ "cpuid\n\t"
+ "pop %%ebx"
+ : "=a" (eax), "=c" (ecx), "=d" (edx)
+ : "a" (op));
+ __asm__("push %%ebx\n\t"
+ "cpuid\n\t"
+ "mov %%ebx, %%eax\n\t"
+ "pop %%ebx"
+ : "=a" (ebx), "=c" (ecx), "=d" (edx)
+ : "a" (op));
+ f = fopen("conftest_cpuid", "w"); if (!f) return 1;
+ fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
+ fclose(f);
+ return 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid
+else
+ ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5
+$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5
+$as_echo_n "checking for x86 cpuid 1 output... " >&6; }
+if ${ax_cv_gcc_x86_cpuid_1+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ ax_cv_gcc_x86_cpuid_1=unknown
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+
+ int op = 1, eax, ebx, ecx, edx;
+ FILE *f;
+ __asm__("push %%ebx\n\t"
+ "cpuid\n\t"
+ "pop %%ebx"
+ : "=a" (eax), "=c" (ecx), "=d" (edx)
+ : "a" (op));
+ __asm__("push %%ebx\n\t"
+ "cpuid\n\t"
+ "mov %%ebx, %%eax\n\t"
+ "pop %%ebx"
+ : "=a" (ebx), "=c" (ecx), "=d" (edx)
+ : "a" (op));
+ f = fopen("conftest_cpuid", "w"); if (!f) return 1;
+ fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
+ fclose(f);
+ return 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid
+else
+ ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5
+$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ case $ax_cv_gcc_x86_cpuid_0 in
+ *:756e6547:*:*) # Intel
+ case $ax_cv_gcc_x86_cpuid_1 in
+ *5[48]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;;
+ *5??:*:*:*) ax_gcc_arch=pentium ;;
+ *6[3456]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
+ *6a?:*[01]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
+ *6a?:*[234]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
+ *6[78b]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
+ *6[9d]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;;
+ *6[e]?:*:*:*) ax_gcc_arch="native pentium-m pentium3 pentiumpro" ;; # Core Duo
+ *6f?:*:*:*) ax_gcc_arch="core2 native pentium-m pentium3 pentiumpro" ;;
+ *6??:*:*:*) ax_gcc_arch="native pentiumpro" ;;
+ *f3[347]:*:*:*|*f4[1347]:*:*:*)
+ case $host_cpu in
+ x86_64*|amd64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;;
+ *) ax_gcc_arch="prescott pentium4 pentiumpro" ;;
+ esac ;;
+ *f??:*:*:*) ax_gcc_arch="native pentium4 pentiumpro";;
+ esac ;;
+ *:68747541:*:*) # AMD
+ case $ax_cv_gcc_x86_cpuid_1 in
+ *5[67]?:*:*:*) ax_gcc_arch=k6 ;;
+ *5[8c]?:*:*:*) ax_gcc_arch="k6-2 k6" ;;
+ *5[9d]?:*:*:*) ax_gcc_arch="k6-3 k6" ;;
+ *60?:*:*:*) ax_gcc_arch=k7 ;;
+ *6[12]?:*:*:*) ax_gcc_arch="athlon k7" ;;
+ *6[34]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;;
+ *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;;
+ *6[68a]?:*:*:*)
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0x80000006 output" >&5
+$as_echo_n "checking for x86 cpuid 0x80000006 output... " >&6; }
+if ${ax_cv_gcc_x86_cpuid_0x80000006+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ ax_cv_gcc_x86_cpuid_0x80000006=unknown
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+
+ int op = 0x80000006, eax, ebx, ecx, edx;
+ FILE *f;
+ __asm__("push %%ebx\n\t"
+ "cpuid\n\t"
+ "pop %%ebx"
+ : "=a" (eax), "=c" (ecx), "=d" (edx)
+ : "a" (op));
+ __asm__("push %%ebx\n\t"
+ "cpuid\n\t"
+ "mov %%ebx, %%eax\n\t"
+ "pop %%ebx"
+ : "=a" (ebx), "=c" (ecx), "=d" (edx)
+ : "a" (op));
+ f = fopen("conftest_cpuid", "w"); if (!f) return 1;
+ fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
+ fclose(f);
+ return 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ ax_cv_gcc_x86_cpuid_0x80000006=`cat conftest_cpuid`; rm -f conftest_cpuid
+else
+ ax_cv_gcc_x86_cpuid_0x80000006=unknown; rm -f conftest_cpuid
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0x80000006" >&5
+$as_echo "$ax_cv_gcc_x86_cpuid_0x80000006" >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ # L2 cache size
+ case $ax_cv_gcc_x86_cpuid_0x80000006 in
+ *:*:*[1-9a-f]??????:*) # (L2 = ecx >> 16) >= 256
+ ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;;
+ *) ax_gcc_arch="athlon-4 athlon k7" ;;
+ esac ;;
+ *f[4cef8b]?:*:*:*) ax_gcc_arch="athlon64 k8" ;;
+ *f5?:*:*:*) ax_gcc_arch="opteron k8" ;;
+ *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;;
+ *f??:*:*:*) ax_gcc_arch="native k8" ;;
+ esac ;;
+ *:746e6543:*:*) # IDT
+ case $ax_cv_gcc_x86_cpuid_1 in
+ *54?:*:*:*) ax_gcc_arch=winchip-c6 ;;
+ *58?:*:*:*) ax_gcc_arch=winchip2 ;;
+ *6[78]?:*:*:*) ax_gcc_arch=c3 ;;
+ *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;;
+ esac ;;
+ esac
+ if test x"$ax_gcc_arch" = x; then # fallback
+ case $host_cpu in
+ i586*) ax_gcc_arch="native pentium" ;;
+ i686*) ax_gcc_arch="native pentiumpro" ;;
+ x86_64*|amd64*) ax_gcc_arch="native" ;;
+ esac
+ fi
+ ;;
+
+ sparc*)
+ # Extract the first word of "prtdiag", so it can be a program name with args.
+set dummy prtdiag; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PRTDIAG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PRTDIAG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PRTDIAG="$PRTDIAG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PRTDIAG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PRTDIAG" && ac_cv_path_PRTDIAG="prtdiag"
+ ;;
+esac
+fi
+PRTDIAG=$ac_cv_path_PRTDIAG
+if test -n "$PRTDIAG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRTDIAG" >&5
+$as_echo "$PRTDIAG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null`
+ cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters`
+ case $cputype in
+ *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;;
+ *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;;
+ *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;;
+ *supersparc*|*tms390z5[05]*) ax_gcc_arch="supersparc v8" ;;
+ *hypersparc*|*rt62[056]*) ax_gcc_arch="hypersparc v8" ;;
+ *cypress*) ax_gcc_arch=cypress ;;
+ esac ;;
+
+ alphaev5) ax_gcc_arch=ev5 ;;
+ alphaev56) ax_gcc_arch=ev56 ;;
+ alphapca56) ax_gcc_arch="pca56 ev56" ;;
+ alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;;
+ alphaev6) ax_gcc_arch=ev6 ;;
+ alphaev67) ax_gcc_arch=ev67 ;;
+ alphaev68) ax_gcc_arch="ev68 ev67" ;;
+ alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;;
+ alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;;
+ alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;;
+
+ powerpc*)
+ cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null`
+ cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'`
+ case $cputype in
+ *750*) ax_gcc_arch="750 G3" ;;
+ *740[0-9]*) ax_gcc_arch="$cputype 7400 G4" ;;
+ *74[4-5][0-9]*) ax_gcc_arch="$cputype 7450 G4" ;;
+ *74[0-9][0-9]*) ax_gcc_arch="$cputype G4" ;;
+ *970*) ax_gcc_arch="970 G5 power4";;
+ *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";;
+ *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";;
+ 603ev|8240) ax_gcc_arch="$cputype 603e 603";;
+ *Cell*) ax_gcc_arch="cellppu cell";;
+ *) ax_gcc_arch="$cputype native" ;;
+ esac
+ ax_gcc_arch="$ax_gcc_arch powerpc"
+ ;;
+esac
+fi # not cross-compiling
+fi # guess arch
+
+if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then
+for arch in $ax_gcc_arch; do
+ if test "x$acx_maxopt_portable" = xyes; then # if we require portable code
+ flags="-mtune=$arch"
+ # -mcpu=$arch and m$arch generate nonportable code on every arch except
+ # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr.
+ case $host_cpu in i*86|x86_64*|amd64*) flags="$flags -mcpu=$arch -m$arch";; esac
+ else
+ flags="-march=$arch -mcpu=$arch -m$arch"
+ fi
+ for flag in $flags; do
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+$as_echo_n "checking whether C compiler accepts $flag... " >&6; }
+ax_save_FLAGS=$CFLAGS
+ CFLAGS="$flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes
+else
+ eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ ax_cv_gcc_archflag=$flag; break
+else
+ :
+fi
+
+ done
+ test "x$ax_cv_gcc_archflag" = xunknown || break
+done
+fi
+
+fi # $GCC=yes
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5
+$as_echo_n "checking for gcc architecture flag... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_archflag" >&5
+$as_echo "$ax_cv_gcc_archflag" >&6; }
+if test "x$ax_cv_gcc_archflag" = xunknown; then
+ :
+else
+ CFLAGS="$CFLAGS $ax_cv_gcc_archflag"
+fi
+
+ ;;
+ apple)
+ # default optimization flags for apple on all systems
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -O3" >&5
+$as_echo_n "checking whether C compiler accepts -O3... " >&6; }
+if ${ax_cv_c_flags__O3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_save_FLAGS=$CFLAGS
+ CFLAGS="-O3"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ax_cv_c_flags__O3=yes
+else
+ ax_cv_c_flags__O3=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__O3
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ CFLAGS="$CFLAGS -O3"
+else
+ :
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fomit-frame-pointer" >&5
+$as_echo_n "checking whether C compiler accepts -fomit-frame-pointer... " >&6; }
+if ${ax_cv_c_flags__fomit_frame_pointer+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_save_FLAGS=$CFLAGS
+ CFLAGS="-fomit-frame-pointer"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ax_cv_c_flags__fomit_frame_pointer=yes
+else
+ ax_cv_c_flags__fomit_frame_pointer=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__fomit_frame_pointer
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ CFLAGS="$CFLAGS -fomit-frame-pointer"
+else
+ :
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fPIC" >&5
+$as_echo_n "checking whether C compiler accepts -fPIC... " >&6; }
+if ${ax_cv_c_flags__fPIC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_save_FLAGS=$CFLAGS
+ CFLAGS="-fPIC"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ax_cv_c_flags__fPIC=yes
+else
+ ax_cv_c_flags__fPIC=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__fPIC
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ CFLAGS="$CFLAGS -fPIC"
+else
+ :
+fi
+
+
+ # -malign-double for x86 systems
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -malign-double" >&5
+$as_echo_n "checking whether C compiler accepts -malign-double... " >&6; }
+if ${ax_cv_c_flags__malign_double+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_save_FLAGS=$CFLAGS
+ CFLAGS="-malign-double"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ax_cv_c_flags__malign_double=yes
+else
+ ax_cv_c_flags__malign_double=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__malign_double
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ CFLAGS="$CFLAGS -malign-double"
+else
+ :
+fi
+
+
+ # -fstrict-aliasing for gcc-2.95+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstrict-aliasing" >&5
+$as_echo_n "checking whether C compiler accepts -fstrict-aliasing... " >&6; }
+if ${ax_cv_c_flags__fstrict_aliasing+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_save_FLAGS=$CFLAGS
+ CFLAGS="-fstrict-aliasing"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ax_cv_c_flags__fstrict_aliasing=yes
+else
+ ax_cv_c_flags__fstrict_aliasing=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__fstrict_aliasing
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ CFLAGS="$CFLAGS -fstrict-aliasing"
+else
+ :
+fi
+
+
+ # note that we enable "unsafe" fp optimization with other compilers, too
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -ffast-math" >&5
+$as_echo_n "checking whether C compiler accepts -ffast-math... " >&6; }
+if ${ax_cv_c_flags__ffast_math+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_save_FLAGS=$CFLAGS
+ CFLAGS="-ffast-math"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ax_cv_c_flags__ffast_math=yes
+else
+ ax_cv_c_flags__ffast_math=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__ffast_math
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ CFLAGS="$CFLAGS -ffast-math"
+else
+ :
+fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -march=core2" >&5
+$as_echo_n "checking whether C compiler accepts -march=core2... " >&6; }
+if ${ax_cv_c_flags__march_core2+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_save_FLAGS=$CFLAGS
+ CFLAGS="-march=core2"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ax_cv_c_flags__march_core2=yes
+else
+ ax_cv_c_flags__march_core2=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__march_core2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ CFLAGS="$CFLAGS -march=core2"
+else
+ :
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -mtune=core2" >&5
+$as_echo_n "checking whether C compiler accepts -mtune=core2... " >&6; }
+if ${ax_cv_c_flags__mtune_core2+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_save_FLAGS=$CFLAGS
+ CFLAGS="-mtune=core2"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ax_cv_c_flags__mtune_core2=yes
+else
+ ax_cv_c_flags__mtune_core2=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+fi
+
+eval ax_check_compiler_flags=$ax_cv_c_flags__mtune_core2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ CFLAGS="$CFLAGS -mtune=core2"
+else
+ :
+fi
+
+
+
+
+
+
+# Check whether --with-apple-gcc-arch was given.
+if test "${with_apple_gcc_arch+set}" = set; then :
+ withval=$with_apple_gcc_arch; ax_apple_gcc_arch=$withval
+else
+ ax_apple_gcc_arch=yes
+fi
+
+
+if ${ax_cv_apple_gcc_archflag+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ax_cv_apple_gcc_archflag="unknown"
+
+if test "$GCC" = yes; then
+ if test "x$ax_apple_gcc_arch" = xyes; then
+ ax_apple_gcc_arch=""
+ if test "$cross_compiling" = no; then
+ if test "x$acx_maxopt_portable" = xyes; then # if we require portable code
+ ax_apple_gcc_arch="i386 x86_64 ppc ppc64"
+ echo "default arch because of portable code"
+ else
+ case $host_cpu in
+ x86_64*|amd64*|i[3456]86*)
+ ax_apple_gcc_arch="x86_64 i386"
+ ;;
+ powerpc*)
+ cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null`
+ cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'`
+ case $cputype in
+ *750*|*740[0-9]*|*74[4-5][0-9]*|*74[0-9][0-9]*) ax_apple_gcc_arch="ppc";;
+ *970*|*POWER4*|*power4*|*gq*|*POWER5*|*power5*|*gr*|*gs*) ax_apple_gcc_arch="ppc64";;
+ *) ax_apple_gcc_arch="ppc64 ppc";;
+ esac
+ ;;
+ *)
+ ax_apple_gcc_arch="x86_64 i386 ppc64 ppc"
+ ;;
+ esac
+ fi # portable code
+ fi # not cross-compiling
+ fi # guess arch
+
+ if test "x$ax_apple_gcc_arch" != x -a "x$ax_apple_gcc_arch" != xno; then
+ ax_cv_apple_gcc_archflag=""
+ for arch in $ax_apple_gcc_arch; do
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -arch $arch" >&5
+$as_echo_n "checking whether C compiler accepts -arch $arch... " >&6; }
+ax_save_FLAGS=$CFLAGS
+ CFLAGS="-arch $arch"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval `$as_echo "ax_cv_c_flags_-arch $arch" | $as_tr_sh`=yes
+else
+ eval `$as_echo "ax_cv_c_flags_-arch $arch" | $as_tr_sh`=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_-arch $arch" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+
+ saved_CFLAGS="$CFLAGS";
+ CFLAGS="$CFLAGS -arch $arch";
+ LIBS="$LIBS $fftw3_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether linking is possible with -arch $arch" >&5
+$as_echo_n "checking whether linking is possible with -arch $arch... " >&6; };
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+int main(void){return 0;}
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ last_result=yes;{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; };ax_cv_apple_gcc_archflag="$ax_cv_apple_gcc_archflag -arch $arch"
+else
+ last_result=no;{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext;
+ CFLAGS="$saved_CFLAGS"
+
+else
+ :
+fi
+
+ if test "x$last_result" = "xyes"; then
+ break;
+ fi
+ done
+ fi
+fi # $GCC=yes
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Apple's gcc architecture flag" >&5
+$as_echo_n "checking for Apple's gcc architecture flag... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_apple_gcc_archflag" >&5
+$as_echo "$ax_cv_apple_gcc_archflag" >&6; }
+if test "x$ax_cv_apple_gcc_archflag" = xunknown; then
+ :
+else
+ CFLAGS="$CFLAGS $ax_cv_apple_gcc_archflag"
+fi
+
+ ;;
+ esac
+
+ if test -z "$CFLAGS"; then
+ echo ""
+ echo "********************************************************"
+ echo "* WARNING: Don't know the best CFLAGS for this system *"
+ echo "* Use ./configure CFLAGS=... to specify your own flags *"
+ echo "* (otherwise, a default of CFLAGS=-O3 will be used) *"
+ echo "********************************************************"
+ echo ""
+ CFLAGS="-O3"
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5
+$as_echo_n "checking whether C compiler accepts $CFLAGS... " >&6; }
+ax_save_FLAGS=$CFLAGS
+ CFLAGS="$CFLAGS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=yes
+else
+ eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS=$ax_save_FLAGS
+eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
+$as_echo "$ax_check_compiler_flags" >&6; }
+if test "x$ax_check_compiler_flags" = xyes; then
+ :
+else
+
+ echo ""
+ echo "********************************************************"
+ echo "* WARNING: The guessed CFLAGS don't seem to work with *"
+ echo "* your compiler. *"
+ echo "* Use ./configure CFLAGS=... to specify your own flags *"
+ echo "********************************************************"
+ echo ""
+ CFLAGS=""
+
+fi
+
+
+fi
+
+ CPPFLAGS="$saved_CPPFLAGS"
+ LDFLAGS="$saved_LDFLAGS"
+ LIBS="$saved_LIBS"
+fi
+
+# override CFLAGS selection when debugging
+if test "x${enable_debug}" = "xyes"; then
+ CFLAGS="-g"
+# if test "x$ax_cv_c_compiler_vendor" = "xapple"; then
+# CFLAGS="$CFLAGS $ax_cv_apple_gcc_archflag"
+# fi
+fi
+
+# add gcc warnings, in debug/maintainer mode only
+if test "x${enable_debug}" = "xyes" || test "x$USE_MAINTAINER_MODE" = "xyes";
+then
+ if test "x$ac_cv_c_compiler_gnu" = "xyes"; then
+ CFLAGS="$CFLAGS -Wall -W -Wcast-qual -Wpointer-arith -Wcast-align -pedantic"
+ CFLAGS="$CFLAGS -Wno-long-long -Wshadow -Wbad-function-cast -Wwrite-strings"
+ CFLAGS="$CFLAGS -Wstrict-prototypes -Wredundant-decls -Wnested-externs"
+ CFLAGS="$CFLAGS -Wundef -Wconversion -Wmissing-prototypes "
+ CFLAGS="$CFLAGS -Wmissing-declarations"
+ fi
+fi
+
+# option to accept C99
+CFLAGS="$CFLAGS $ac_cv_prog_cc_c99"
+
+CPPFLAGS="$CPPFLAGS $fftw3_CPPFLAGS"
+
+# add Matlab CFLAGS
+if test "x$ax_prog_matlab" = "xyes"; then
+ CFLAGS="$CFLAGS $matlab_CFLAGS"
+fi
+
+################################################################################
+# check if mex.h can be included without undefinition of
+################################################################################
+ax_prog_matlab_gcc_require_undef_stdc_utf_16=no
+if test "x$ax_prog_matlab" = "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inclusion of mex.h succeeds" >&5
+$as_echo_n "checking if inclusion of mex.h succeeds... " >&6; }
+ saved_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $matlab_CPPFLAGS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include "mex.h"
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ax_prog_matlab_check_compile_mex_h=yes
+else
+ ax_prog_matlab_check_compile_mex_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_prog_matlab_check_compile_mex_h" >&5
+$as_echo "$ax_prog_matlab_check_compile_mex_h" >&6; }
+ if test "x$ax_prog_matlab_check_compile_mex_h" = "xno"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if undefining __STDC_UTF_16__ solves this issue" >&5
+$as_echo_n "checking if undefining __STDC_UTF_16__ solves this issue... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#undef __STDC_UTF_16__
+ #include "mex.h"
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ax_prog_matlab_gcc_require_undef_stdc_utf_16=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_prog_matlab_gcc_require_undef_stdc_utf_16" >&5
+$as_echo "$ax_prog_matlab_gcc_require_undef_stdc_utf_16" >&6; }
+ fi
+ CPPFLAGS="$saved_CPPFLAGS"
+fi
+if test "x$ax_prog_matlab_gcc_require_undef_stdc_utf_16" = "xyes"; then
+
+$as_echo "#define HAVE_MATLAB_GCC_REQUIRE_UNDEF_STDC_UTF_16 1" >>confdefs.h
+
+fi
+
+################################################################################
+# header files/data types/compiler characteristics
+################################################################################
+
+for ac_header in math.h stdio.h stdlib.h time.h sys/time.h \
+ complex.h string.h float.h limits.h stdarg.h stddef.h sys/types.h stdint.h \
+ inttypes.h stdbool.h malloc.h c_asm.h intrinsics.h mach/mach_time.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
+$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
+if ${ac_cv_header_time+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_time=yes
+else
+ ac_cv_header_time=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
+$as_echo "$ac_cv_header_time" >&6; }
+if test $ac_cv_header_time = yes; then
+
+$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
+
+fi
+
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "long double" "ac_cv_type_long_double" "$ac_includes_default"
+if test "x$ac_cv_type_long_double" = xyes; then :
+
+$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "hrtime_t" "ac_cv_type_hrtime_t" "
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+
+"
+if test "x$ac_cv_type_hrtime_t" = xyes; then :
+
+$as_echo "#define HAVE_HRTIME_T 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+"
+if test "x$ac_cv_type_uintptr_t" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UINTPTR_T 1
+_ACEOF
+
+
+else
+ # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+$as_echo_n "checking size of void *... " >&6; }
+if ${ac_cv_sizeof_void_p+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_void_p" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (void *)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_void_p=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+$as_echo "$ac_cv_sizeof_void_p" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
+_ACEOF
+
+
+fi
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+$as_echo_n "checking size of int... " >&6; }
+if ${ac_cv_sizeof_int+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_int" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (int)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_int=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
+$as_echo "$ac_cv_sizeof_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned int" >&5
+$as_echo_n "checking size of unsigned int... " >&6; }
+if ${ac_cv_sizeof_unsigned_int+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned int))" "ac_cv_sizeof_unsigned_int" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_unsigned_int" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned int)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_unsigned_int=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_int" >&5
+$as_echo "$ac_cv_sizeof_unsigned_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+$as_echo_n "checking size of long... " >&6; }
+if ${ac_cv_sizeof_long+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_long" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_long=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+$as_echo "$ac_cv_sizeof_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5
+$as_echo_n "checking size of unsigned long... " >&6; }
+if ${ac_cv_sizeof_unsigned_long+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_unsigned_long" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned long)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_unsigned_long=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5
+$as_echo "$ac_cv_sizeof_unsigned_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
+$as_echo_n "checking size of long long... " >&6; }
+if ${ac_cv_sizeof_long_long+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_long_long" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long long)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_long_long=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
+$as_echo "$ac_cv_sizeof_long_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long long" >&5
+$as_echo_n "checking size of unsigned long long... " >&6; }
+if ${ac_cv_sizeof_unsigned_long_long+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long long))" "ac_cv_sizeof_unsigned_long_long" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_unsigned_long_long" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned long long)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_unsigned_long_long=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long_long" >&5
+$as_echo "$ac_cv_sizeof_unsigned_long_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_LONG_LONG $ac_cv_sizeof_unsigned_long_long
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5
+$as_echo_n "checking size of size_t... " >&6; }
+if ${ac_cv_sizeof_size_t+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_size_t" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (size_t)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_size_t=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5
+$as_echo "$ac_cv_sizeof_size_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of ptrdiff_t" >&5
+$as_echo_n "checking size of ptrdiff_t... " >&6; }
+if ${ac_cv_sizeof_ptrdiff_t+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (ptrdiff_t))" "ac_cv_sizeof_ptrdiff_t" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_ptrdiff_t" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (ptrdiff_t)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_ptrdiff_t=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_ptrdiff_t" >&5
+$as_echo "$ac_cv_sizeof_ptrdiff_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_PTRDIFF_T $ac_cv_sizeof_ptrdiff_t
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float" >&5
+$as_echo_n "checking size of float... " >&6; }
+if ${ac_cv_sizeof_float+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_float" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (float)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_float=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5
+$as_echo "$ac_cv_sizeof_float" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_FLOAT $ac_cv_sizeof_float
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5
+$as_echo_n "checking size of double... " >&6; }
+if ${ac_cv_sizeof_double+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_double" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (double)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_double=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5
+$as_echo "$ac_cv_sizeof_double" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_DOUBLE $ac_cv_sizeof_double
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5
+$as_echo_n "checking size of long double... " >&6; }
+if ${ac_cv_sizeof_long_double+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_long_double" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long double)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_long_double=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5
+$as_echo "$ac_cv_sizeof_long_double" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double
+_ACEOF
+
+
+
+# library functions
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments. Useless!
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
+$as_echo_n "checking for working alloca.h... " >&6; }
+if ${ac_cv_working_alloca_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <alloca.h>
+int
+main ()
+{
+char *p = (char *) alloca (2 * sizeof (int));
+ if (p) return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_working_alloca_h=yes
+else
+ ac_cv_working_alloca_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
+$as_echo "$ac_cv_working_alloca_h" >&6; }
+if test $ac_cv_working_alloca_h = yes; then
+
+$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
+$as_echo_n "checking for alloca... " >&6; }
+if ${ac_cv_func_alloca_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# ifdef HAVE_ALLOCA_H
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca /* predefined by HP cc +Olibcalls */
+void *alloca (size_t);
+# endif
+# endif
+# endif
+# endif
+#endif
+
+int
+main ()
+{
+char *p = (char *) alloca (1);
+ if (p) return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_func_alloca_works=yes
+else
+ ac_cv_func_alloca_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
+$as_echo "$ac_cv_func_alloca_works" >&6; }
+
+if test $ac_cv_func_alloca_works = yes; then
+
+$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
+
+else
+ # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble. Some versions do not even contain alloca or
+# contain a buggy version. If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+
+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
+
+$as_echo "#define C_ALLOCA 1" >>confdefs.h
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
+$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
+if ${ac_cv_os_cray+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "webecray" >/dev/null 2>&1; then :
+ ac_cv_os_cray=yes
+else
+ ac_cv_os_cray=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
+$as_echo "$ac_cv_os_cray" >&6; }
+if test $ac_cv_os_cray = yes; then
+ for ac_func in _getb67 GETB67 getb67; do
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
+
+ break
+fi
+
+ done
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
+$as_echo_n "checking stack direction for C alloca... " >&6; }
+if ${ac_cv_c_stack_direction+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ ac_cv_c_stack_direction=0
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+find_stack_direction (int *addr, int depth)
+{
+ int dir, dummy = 0;
+ if (! addr)
+ addr = &dummy;
+ *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+ dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+ return dir + dummy;
+}
+
+int
+main (int argc, char **argv)
+{
+ return find_stack_direction (0, argc + !argv + 20) < 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ ac_cv_c_stack_direction=1
+else
+ ac_cv_c_stack_direction=-1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
+$as_echo "$ac_cv_c_stack_direction" >&6; }
+cat >>confdefs.h <<_ACEOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
+_ACEOF
+
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strtod" >&5
+$as_echo_n "checking for working strtod... " >&6; }
+if ${ac_cv_func_strtod+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ ac_cv_func_strtod=no
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+$ac_includes_default
+#ifndef strtod
+double strtod ();
+#endif
+int
+main()
+{
+ {
+ /* Some versions of Linux strtod mis-parse strings with leading '+'. */
+ char *string = " +69";
+ char *term;
+ double value;
+ value = strtod (string, &term);
+ if (value != 69 || term != (string + 4))
+ return 1;
+ }
+
+ {
+ /* Under Solaris 2.4, strtod returns the wrong value for the
+ terminating character under some conditions. */
+ char *string = "NaN";
+ char *term;
+ strtod (string, &term);
+ if (term != string && *(term - 1) == 0)
+ return 1;
+ }
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ ac_cv_func_strtod=yes
+else
+ ac_cv_func_strtod=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strtod" >&5
+$as_echo "$ac_cv_func_strtod" >&6; }
+if test $ac_cv_func_strtod = no; then
+ case " $LIBOBJS " in
+ *" strtod.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS strtod.$ac_objext"
+ ;;
+esac
+
+ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow"
+if test "x$ac_cv_func_pow" = xyes; then :
+
+fi
+
+if test $ac_cv_func_pow = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5
+$as_echo_n "checking for pow in -lm... " >&6; }
+if ${ac_cv_lib_m_pow+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pow ();
+int
+main ()
+{
+return pow ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_m_pow=yes
+else
+ ac_cv_lib_m_pow=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5
+$as_echo "$ac_cv_lib_m_pow" >&6; }
+if test "x$ac_cv_lib_m_pow" = xyes; then :
+ POW_LIB=-lm
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find library containing definition of pow" >&5
+$as_echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;}
+fi
+
+fi
+
+fi
+
+for ac_func in vprintf
+do :
+ ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf"
+if test "x$ac_cv_func_vprintf" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_VPRINTF 1
+_ACEOF
+
+ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt"
+if test "x$ac_cv_func__doprnt" = xyes; then :
+
+$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h
+
+fi
+
+fi
+done
+
+
+saved_LIBS=$LIBS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sin in -lm" >&5
+$as_echo_n "checking for sin in -lm... " >&6; }
+if ${ac_cv_lib_m_sin+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sin ();
+int
+main ()
+{
+return sin ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_m_sin=yes
+else
+ ac_cv_lib_m_sin=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sin" >&5
+$as_echo "$ac_cv_lib_m_sin" >&6; }
+if test "x$ac_cv_lib_m_sin" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBM 1
+_ACEOF
+
+ LIBS="-lm $LIBS"
+
+fi
+
+LIBS=$saved_LIBS
+
+for ac_func in gethrtime read_real_time time_base_to_time clock_gettime mach_absolute_time
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+for ac_func in memset posix_memalign memalign
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+for ac_func in _mm_malloc _mm_free sysctl
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+for ac_func in abort snprintf sqrt
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+for ac_func in sleep usleep nanosleep drand48 srand48
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+ac_fn_c_check_decl "$LINENO" "memalign" "ac_cv_have_decl_memalign" "$ac_includes_default"
+if test "x$ac_cv_have_decl_memalign" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MEMALIGN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "posix_memalign" "ac_cv_have_decl_posix_memalign" "$ac_includes_default"
+if test "x$ac_cv_have_decl_posix_memalign" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_POSIX_MEMALIGN $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "sleep" "ac_cv_have_decl_sleep" "#include <unistd.h>
+"
+if test "x$ac_cv_have_decl_sleep" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SLEEP $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "nanosleep" "ac_cv_have_decl_nanosleep" "#include <time.h>
+"
+if test "x$ac_cv_have_decl_nanosleep" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NANOSLEEP $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "drand48" "ac_cv_have_decl_drand48" "#include <stdlib.h>
+"
+if test "x$ac_cv_have_decl_drand48" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_DRAND48 $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "srand48" "ac_cv_have_decl_srand48" "#include <stdlib.h>
+"
+if test "x$ac_cv_have_decl_srand48" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SRAND48 $ac_have_decl
+_ACEOF
+
+
+# Cray UNICOS _rtc() (real-time clock) intrinsic
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _rtc intrinsic" >&5
+$as_echo_n "checking for _rtc intrinsic... " >&6; }
+rtc_ok=yes
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef HAVE_INTRINSICS_H
+#include <intrinsics.h>
+#endif
+int
+main ()
+{
+_rtc()
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+$as_echo "#define HAVE__RTC 1" >>confdefs.h
+
+else
+ rtc_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rtc_ok" >&5
+$as_echo "$rtc_ok" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a cycle counter is available" >&5
+$as_echo_n "checking whether a cycle counter is available... " >&6; }
+save_CPPFLAGS=$CPPFLAGS
+CPPFLAGS="$CPPFLAGS -I$srcdir/include"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include "cycle.h"
+#ifndef HAVE_TICK_COUNTER
+# error No cycle counter
+#endif
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ ok=yes
+else
+ ok=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ok" >&5
+$as_echo "$ok" >&6; }
+TICKS_PER_SECOND=1
+if test $ok = no; then
+ echo "***************************************************************"
+ echo "WARNING: No cycle counter found. Time measurements in NFFT will"
+ echo " show incorrect results. "
+ echo "***************************************************************"
+else
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include "cycle.h"
+#include <stdio.h>
+#if defined(HAVE_NANOSLEEP)
+#include <stdlib.h>
+static struct timespec ts = {1,0};
+#define SLEEP nanosleep(&ts, 0)
+#elif defined(HAVE_SLEEP)
+#include <unistd.h>
+#define SLEEP sleep(1)
+#elif defined(HAVE_USLEEP)
+#include <unistd.h>
+#define SLEEP usleep(1000)
+#else
+#error wtf!
+#endif
+int main(){
+ticks t0 = getticks();
+SLEEP;{
+ double tps = elapsed(getticks(),t0)/1.0;
+ FILE *f = fopen("ticks.tmp","w");
+ fprintf(f,"%.1f\n",tps);
+ fclose(f);}
+return 0;}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ read TICKS_PER_SECOND < ticks.tmp
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ rm -f ticks.tmp
+ if test "$TICKS_PER_SECOND" = "1"; then
+ echo "***************************************************************"
+ echo "WARNING: Number of ticks per second could not be determined. "
+ echo " Time measurements in NFFT will be in arbitrary units "
+ echo " instead of seconds. "
+ echo "***************************************************************"
+ fi
+fi
+
+CPPFLAGS=$save_CPPFLAGS
+
+
+PRECISION=d
+if test "$PRECISION" = "l"; then
+for ac_func in copysignl nextafterl nanl ceill floorl nearbyintl rintl roundl lrintl lroundl llrintl llroundl truncl fmodl remainderl remquol fdiml fmaxl fminl fmal fabsl sqrtl cbrtl hypotl expl exp2l expm1l logl log2l log10l log1pl logbl ilogbl modfl frexpl ldexpl scalbnl scalblnl powl cosl sinl tanl coshl sinhl tanhl acosl asinl atanl atan2l acoshl asinhl atanhl tgammal lgammal j0l j1l jnl jnl y0l y1l ynl erfl erfcl creall cimagl cabsl cargl conjl cprojl csqrtl cexpl clogl cpowl csinl [...]
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ac_fn_c_check_decl "$LINENO" "copysignl" "ac_cv_have_decl_copysignl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_copysignl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COPYSIGNL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nextafterl" "ac_cv_have_decl_nextafterl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nextafterl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NEXTAFTERL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nanl" "ac_cv_have_decl_nanl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nanl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NANL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ceill" "ac_cv_have_decl_ceill" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ceill" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CEILL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "floorl" "ac_cv_have_decl_floorl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_floorl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FLOORL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nearbyintl" "ac_cv_have_decl_nearbyintl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nearbyintl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NEARBYINTL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "rintl" "ac_cv_have_decl_rintl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_rintl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_RINTL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "roundl" "ac_cv_have_decl_roundl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_roundl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ROUNDL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lrintl" "ac_cv_have_decl_lrintl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lrintl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LRINTL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lroundl" "ac_cv_have_decl_lroundl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lroundl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LROUNDL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "llrintl" "ac_cv_have_decl_llrintl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_llrintl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LLRINTL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "llroundl" "ac_cv_have_decl_llroundl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_llroundl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LLROUNDL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "truncl" "ac_cv_have_decl_truncl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_truncl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TRUNCL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmodl" "ac_cv_have_decl_fmodl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmodl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMODL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "remainderl" "ac_cv_have_decl_remainderl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_remainderl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_REMAINDERL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "remquol" "ac_cv_have_decl_remquol" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_remquol" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_REMQUOL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fdiml" "ac_cv_have_decl_fdiml" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fdiml" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FDIML $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmaxl" "ac_cv_have_decl_fmaxl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmaxl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMAXL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fminl" "ac_cv_have_decl_fminl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fminl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMINL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmal" "ac_cv_have_decl_fmal" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmal" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMAL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fabsl" "ac_cv_have_decl_fabsl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fabsl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FABSL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sqrtl" "ac_cv_have_decl_sqrtl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sqrtl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SQRTL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cbrtl" "ac_cv_have_decl_cbrtl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cbrtl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CBRTL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "hypotl" "ac_cv_have_decl_hypotl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_hypotl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_HYPOTL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "expl" "ac_cv_have_decl_expl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_expl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXPL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "exp2l" "ac_cv_have_decl_exp2l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_exp2l" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXP2L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "expm1l" "ac_cv_have_decl_expm1l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_expm1l" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXPM1L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "logl" "ac_cv_have_decl_logl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_logl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOGL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log2l" "ac_cv_have_decl_log2l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log2l" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG2L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log10l" "ac_cv_have_decl_log10l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log10l" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG10L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log1pl" "ac_cv_have_decl_log1pl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log1pl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG1PL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "logbl" "ac_cv_have_decl_logbl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_logbl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOGBL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ilogbl" "ac_cv_have_decl_ilogbl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ilogbl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ILOGBL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "modfl" "ac_cv_have_decl_modfl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_modfl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MODFL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "frexpl" "ac_cv_have_decl_frexpl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_frexpl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FREXPL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ldexpl" "ac_cv_have_decl_ldexpl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ldexpl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LDEXPL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "scalbnl" "ac_cv_have_decl_scalbnl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_scalbnl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SCALBNL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "scalblnl" "ac_cv_have_decl_scalblnl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_scalblnl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SCALBLNL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "powl" "ac_cv_have_decl_powl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_powl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_POWL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cosl" "ac_cv_have_decl_cosl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cosl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COSL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sinl" "ac_cv_have_decl_sinl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sinl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SINL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tanl" "ac_cv_have_decl_tanl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tanl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TANL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "coshl" "ac_cv_have_decl_coshl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_coshl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COSHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sinhl" "ac_cv_have_decl_sinhl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sinhl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SINHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tanhl" "ac_cv_have_decl_tanhl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tanhl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TANHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "acosl" "ac_cv_have_decl_acosl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_acosl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ACOSL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "asinl" "ac_cv_have_decl_asinl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_asinl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASINL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atanl" "ac_cv_have_decl_atanl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atanl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATANL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atan2l" "ac_cv_have_decl_atan2l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atan2l" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATAN2L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "acoshl" "ac_cv_have_decl_acoshl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_acoshl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ACOSHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "asinhl" "ac_cv_have_decl_asinhl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_asinhl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASINHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atanhl" "ac_cv_have_decl_atanhl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atanhl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATANHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tgammal" "ac_cv_have_decl_tgammal" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tgammal" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TGAMMAL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lgammal" "ac_cv_have_decl_lgammal" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lgammal" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LGAMMAL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "j0l" "ac_cv_have_decl_j0l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_j0l" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_J0L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "j1l" "ac_cv_have_decl_j1l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_j1l" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_J1L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "jnl" "ac_cv_have_decl_jnl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_jnl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_JNL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "y0l" "ac_cv_have_decl_y0l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_y0l" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_Y0L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "y1l" "ac_cv_have_decl_y1l" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_y1l" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_Y1L $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ynl" "ac_cv_have_decl_ynl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ynl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_YNL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "erfl" "ac_cv_have_decl_erfl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_erfl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ERFL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "erfcl" "ac_cv_have_decl_erfcl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_erfcl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ERFCL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "creall" "ac_cv_have_decl_creall" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_creall" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CREALL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cimagl" "ac_cv_have_decl_cimagl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cimagl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CIMAGL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cabsl" "ac_cv_have_decl_cabsl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cabsl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CABSL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cargl" "ac_cv_have_decl_cargl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cargl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CARGL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "conjl" "ac_cv_have_decl_conjl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_conjl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CONJL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cprojl" "ac_cv_have_decl_cprojl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cprojl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CPROJL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csqrtl" "ac_cv_have_decl_csqrtl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csqrtl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSQRTL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cexpl" "ac_cv_have_decl_cexpl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cexpl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CEXPL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "clogl" "ac_cv_have_decl_clogl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_clogl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CLOGL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cpowl" "ac_cv_have_decl_cpowl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cpowl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CPOWL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csinl" "ac_cv_have_decl_csinl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csinl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSINL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ccosl" "ac_cv_have_decl_ccosl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ccosl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CCOSL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ctanl" "ac_cv_have_decl_ctanl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ctanl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CTANL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "casinl" "ac_cv_have_decl_casinl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_casinl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CASINL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cacosl" "ac_cv_have_decl_cacosl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cacosl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CACOSL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "catanl" "ac_cv_have_decl_catanl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_catanl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CATANL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csinhl" "ac_cv_have_decl_csinhl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csinhl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSINHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ccoshl" "ac_cv_have_decl_ccoshl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ccoshl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CCOSHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ctanhl" "ac_cv_have_decl_ctanhl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ctanhl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CTANHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "casinhl" "ac_cv_have_decl_casinhl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_casinhl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CASINHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cacoshl" "ac_cv_have_decl_cacoshl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cacoshl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CACOSHL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "catanhl" "ac_cv_have_decl_catanhl" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_catanhl" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CATANHL $ac_have_decl
+_ACEOF
+
+fi
+
+if test "$PRECISION" = "d"; then
+for ac_func in copysign nextafter nan ceil floor nearbyint rint round lrint lround llrint llround trunc fmod remainder remquo fdim fmax fmin fma fabs sqrt cbrt hypot exp exp2 expm1 log log2 log10 log1p logb ilogb modf frexp ldexp scalbn scalbln pow cos sin tan cosh sinh tanh acos asin atan atan2 acosh asinh atanh tgamma lgamma j0 j1 jn y0 y1 yn erf erfc creal cimag cabs carg conj cproj csqrt cexp clog cpow csin ccos ctan casin cacos catan csinh ccosh ctanh casinh cacosh catanh
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ac_fn_c_check_decl "$LINENO" "copysign" "ac_cv_have_decl_copysign" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_copysign" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COPYSIGN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nextafter" "ac_cv_have_decl_nextafter" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nextafter" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NEXTAFTER $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nan" "ac_cv_have_decl_nan" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nan" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NAN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ceil" "ac_cv_have_decl_ceil" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ceil" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CEIL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "floor" "ac_cv_have_decl_floor" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_floor" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FLOOR $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nearbyint" "ac_cv_have_decl_nearbyint" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nearbyint" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NEARBYINT $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "rint" "ac_cv_have_decl_rint" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_rint" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_RINT $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "round" "ac_cv_have_decl_round" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_round" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ROUND $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lrint" "ac_cv_have_decl_lrint" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lrint" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LRINT $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lround" "ac_cv_have_decl_lround" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lround" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LROUND $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "llrint" "ac_cv_have_decl_llrint" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_llrint" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LLRINT $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "llround" "ac_cv_have_decl_llround" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_llround" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LLROUND $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "trunc" "ac_cv_have_decl_trunc" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_trunc" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TRUNC $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmod" "ac_cv_have_decl_fmod" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmod" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMOD $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "remainder" "ac_cv_have_decl_remainder" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_remainder" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_REMAINDER $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "remquo" "ac_cv_have_decl_remquo" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_remquo" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_REMQUO $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fdim" "ac_cv_have_decl_fdim" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fdim" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FDIM $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmax" "ac_cv_have_decl_fmax" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmax" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMAX $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmin" "ac_cv_have_decl_fmin" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmin" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMIN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fma" "ac_cv_have_decl_fma" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fma" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMA $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fabs" "ac_cv_have_decl_fabs" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fabs" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FABS $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sqrt" "ac_cv_have_decl_sqrt" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sqrt" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SQRT $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cbrt" "ac_cv_have_decl_cbrt" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cbrt" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CBRT $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "hypot" "ac_cv_have_decl_hypot" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_hypot" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_HYPOT $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "exp" "ac_cv_have_decl_exp" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_exp" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXP $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "exp2" "ac_cv_have_decl_exp2" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_exp2" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXP2 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "expm1" "ac_cv_have_decl_expm1" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_expm1" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXPM1 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log" "ac_cv_have_decl_log" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log2" "ac_cv_have_decl_log2" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log2" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG2 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log10" "ac_cv_have_decl_log10" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log10" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG10 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log1p" "ac_cv_have_decl_log1p" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log1p" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG1P $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "logb" "ac_cv_have_decl_logb" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_logb" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOGB $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ilogb" "ac_cv_have_decl_ilogb" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ilogb" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ILOGB $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "modf" "ac_cv_have_decl_modf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_modf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MODF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "frexp" "ac_cv_have_decl_frexp" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_frexp" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FREXP $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ldexp" "ac_cv_have_decl_ldexp" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ldexp" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LDEXP $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "scalbn" "ac_cv_have_decl_scalbn" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_scalbn" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SCALBN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "scalbln" "ac_cv_have_decl_scalbln" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_scalbln" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SCALBLN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "pow" "ac_cv_have_decl_pow" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_pow" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_POW $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cos" "ac_cv_have_decl_cos" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cos" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COS $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sin" "ac_cv_have_decl_sin" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sin" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SIN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tan" "ac_cv_have_decl_tan" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tan" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TAN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cosh" "ac_cv_have_decl_cosh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cosh" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COSH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sinh" "ac_cv_have_decl_sinh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sinh" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SINH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tanh" "ac_cv_have_decl_tanh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tanh" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TANH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "acos" "ac_cv_have_decl_acos" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_acos" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ACOS $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "asin" "ac_cv_have_decl_asin" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_asin" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASIN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atan" "ac_cv_have_decl_atan" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atan" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATAN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atan2" "ac_cv_have_decl_atan2" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atan2" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATAN2 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "acosh" "ac_cv_have_decl_acosh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_acosh" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ACOSH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "asinh" "ac_cv_have_decl_asinh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_asinh" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASINH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atanh" "ac_cv_have_decl_atanh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atanh" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATANH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tgamma" "ac_cv_have_decl_tgamma" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tgamma" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TGAMMA $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lgamma" "ac_cv_have_decl_lgamma" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lgamma" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LGAMMA $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "j0" "ac_cv_have_decl_j0" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_j0" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_J0 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "j1" "ac_cv_have_decl_j1" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_j1" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_J1 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "jn" "ac_cv_have_decl_jn" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_jn" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_JN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "y0" "ac_cv_have_decl_y0" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_y0" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_Y0 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "y1" "ac_cv_have_decl_y1" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_y1" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_Y1 $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "yn" "ac_cv_have_decl_yn" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_yn" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_YN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "erf" "ac_cv_have_decl_erf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_erf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ERF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "erfc" "ac_cv_have_decl_erfc" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_erfc" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ERFC $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "creal" "ac_cv_have_decl_creal" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_creal" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CREAL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cimag" "ac_cv_have_decl_cimag" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cimag" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CIMAG $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cabs" "ac_cv_have_decl_cabs" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cabs" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CABS $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "carg" "ac_cv_have_decl_carg" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_carg" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CARG $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "conj" "ac_cv_have_decl_conj" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_conj" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CONJ $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cproj" "ac_cv_have_decl_cproj" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cproj" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CPROJ $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csqrt" "ac_cv_have_decl_csqrt" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csqrt" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSQRT $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cexp" "ac_cv_have_decl_cexp" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cexp" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CEXP $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "clog" "ac_cv_have_decl_clog" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_clog" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CLOG $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cpow" "ac_cv_have_decl_cpow" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cpow" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CPOW $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csin" "ac_cv_have_decl_csin" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csin" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSIN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ccos" "ac_cv_have_decl_ccos" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ccos" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CCOS $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ctan" "ac_cv_have_decl_ctan" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ctan" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CTAN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "casin" "ac_cv_have_decl_casin" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_casin" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CASIN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cacos" "ac_cv_have_decl_cacos" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cacos" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CACOS $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "catan" "ac_cv_have_decl_catan" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_catan" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CATAN $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csinh" "ac_cv_have_decl_csinh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csinh" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSINH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ccosh" "ac_cv_have_decl_ccosh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ccosh" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CCOSH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ctanh" "ac_cv_have_decl_ctanh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ctanh" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CTANH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "casinh" "ac_cv_have_decl_casinh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_casinh" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CASINH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cacosh" "ac_cv_have_decl_cacosh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cacosh" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CACOSH $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "catanh" "ac_cv_have_decl_catanh" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_catanh" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CATANH $ac_have_decl
+_ACEOF
+
+fi
+
+if test "$PRECISION" = "s"; then
+for ac_func in copysignf nextafterf nanf ceilf floorf nearbyintf rintf roundf lrintf lroundf llrintf llroundf truncf fmodf remainderf remquof fdimf fmaxf fminf fmaf fabsf sqrtf cbrtf hypotf expf exp2f expm1f logf log2f log10f log1pf logbf ilogbf modff frexpf ldexpf scalbnf scalblnf powf cosf sinf tanf coshf sinhf tanhf acosf asinf atanf atan2f acoshf asinhf atanhf tgammaf lgammaf j0f j1f jnf y0f y1f ynf erff erfcf crealf cimagf cabsf cargf conjf cprojf csqrtf cexpf clogf cpowf csinf ccos [...]
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ac_fn_c_check_decl "$LINENO" "copysignf" "ac_cv_have_decl_copysignf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_copysignf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COPYSIGNF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nextafterf" "ac_cv_have_decl_nextafterf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nextafterf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NEXTAFTERF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nanf" "ac_cv_have_decl_nanf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nanf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NANF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ceilf" "ac_cv_have_decl_ceilf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ceilf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CEILF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "floorf" "ac_cv_have_decl_floorf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_floorf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FLOORF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "nearbyintf" "ac_cv_have_decl_nearbyintf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_nearbyintf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_NEARBYINTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "rintf" "ac_cv_have_decl_rintf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_rintf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_RINTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "roundf" "ac_cv_have_decl_roundf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_roundf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ROUNDF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lrintf" "ac_cv_have_decl_lrintf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lrintf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LRINTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lroundf" "ac_cv_have_decl_lroundf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lroundf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LROUNDF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "llrintf" "ac_cv_have_decl_llrintf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_llrintf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LLRINTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "llroundf" "ac_cv_have_decl_llroundf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_llroundf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LLROUNDF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "truncf" "ac_cv_have_decl_truncf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_truncf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TRUNCF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmodf" "ac_cv_have_decl_fmodf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmodf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMODF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "remainderf" "ac_cv_have_decl_remainderf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_remainderf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_REMAINDERF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "remquof" "ac_cv_have_decl_remquof" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_remquof" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_REMQUOF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fdimf" "ac_cv_have_decl_fdimf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fdimf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FDIMF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmaxf" "ac_cv_have_decl_fmaxf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmaxf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMAXF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fminf" "ac_cv_have_decl_fminf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fminf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMINF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fmaf" "ac_cv_have_decl_fmaf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fmaf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FMAF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "fabsf" "ac_cv_have_decl_fabsf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_fabsf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FABSF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sqrtf" "ac_cv_have_decl_sqrtf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sqrtf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SQRTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cbrtf" "ac_cv_have_decl_cbrtf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cbrtf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CBRTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "hypotf" "ac_cv_have_decl_hypotf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_hypotf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_HYPOTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "expf" "ac_cv_have_decl_expf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_expf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXPF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "exp2f" "ac_cv_have_decl_exp2f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_exp2f" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXP2F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "expm1f" "ac_cv_have_decl_expm1f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_expm1f" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_EXPM1F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "logf" "ac_cv_have_decl_logf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_logf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOGF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log2f" "ac_cv_have_decl_log2f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log2f" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG2F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log10f" "ac_cv_have_decl_log10f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log10f" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG10F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "log1pf" "ac_cv_have_decl_log1pf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_log1pf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOG1PF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "logbf" "ac_cv_have_decl_logbf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_logbf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOGBF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ilogbf" "ac_cv_have_decl_ilogbf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ilogbf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ILOGBF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "modff" "ac_cv_have_decl_modff" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_modff" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MODFF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "frexpf" "ac_cv_have_decl_frexpf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_frexpf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FREXPF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ldexpf" "ac_cv_have_decl_ldexpf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ldexpf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LDEXPF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "scalbnf" "ac_cv_have_decl_scalbnf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_scalbnf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SCALBNF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "scalblnf" "ac_cv_have_decl_scalblnf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_scalblnf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SCALBLNF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "powf" "ac_cv_have_decl_powf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_powf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_POWF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cosf" "ac_cv_have_decl_cosf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cosf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COSF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sinf" "ac_cv_have_decl_sinf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sinf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SINF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tanf" "ac_cv_have_decl_tanf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tanf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TANF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "coshf" "ac_cv_have_decl_coshf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_coshf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COSHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "sinhf" "ac_cv_have_decl_sinhf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_sinhf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SINHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tanhf" "ac_cv_have_decl_tanhf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tanhf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TANHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "acosf" "ac_cv_have_decl_acosf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_acosf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ACOSF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "asinf" "ac_cv_have_decl_asinf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_asinf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASINF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atanf" "ac_cv_have_decl_atanf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atanf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATANF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atan2f" "ac_cv_have_decl_atan2f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atan2f" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATAN2F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "acoshf" "ac_cv_have_decl_acoshf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_acoshf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ACOSHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "asinhf" "ac_cv_have_decl_asinhf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_asinhf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ASINHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "atanhf" "ac_cv_have_decl_atanhf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_atanhf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ATANHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "tgammaf" "ac_cv_have_decl_tgammaf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_tgammaf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TGAMMAF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "lgammaf" "ac_cv_have_decl_lgammaf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_lgammaf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LGAMMAF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "j0f" "ac_cv_have_decl_j0f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_j0f" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_J0F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "j1f" "ac_cv_have_decl_j1f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_j1f" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_J1F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "jnf" "ac_cv_have_decl_jnf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_jnf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_JNF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "y0f" "ac_cv_have_decl_y0f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_y0f" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_Y0F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "y1f" "ac_cv_have_decl_y1f" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_y1f" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_Y1F $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ynf" "ac_cv_have_decl_ynf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ynf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_YNF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "erff" "ac_cv_have_decl_erff" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_erff" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ERFF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "erfcf" "ac_cv_have_decl_erfcf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_erfcf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ERFCF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "crealf" "ac_cv_have_decl_crealf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_crealf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CREALF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cimagf" "ac_cv_have_decl_cimagf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cimagf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CIMAGF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cabs" "ac_cv_have_decl_cabs" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cabs" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CABS $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cargf" "ac_cv_have_decl_cargf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cargf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CARGF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "conjf" "ac_cv_have_decl_conjf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_conjf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CONJF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cprojf" "ac_cv_have_decl_cprojf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cprojf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CPROJF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csqrtf" "ac_cv_have_decl_csqrtf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csqrtf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSQRTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cexpf" "ac_cv_have_decl_cexpf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cexpf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CEXPF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "clogf" "ac_cv_have_decl_clogf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_clogf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CLOGF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cpowf" "ac_cv_have_decl_cpowf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cpowf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CPOWF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csinf" "ac_cv_have_decl_csinf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csinf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSINF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ccosf" "ac_cv_have_decl_ccosf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ccosf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CCOSF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ctanf" "ac_cv_have_decl_ctanf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ctanf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CTANF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "casinf" "ac_cv_have_decl_casinf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_casinf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CASINF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cacosf" "ac_cv_have_decl_cacosf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cacosf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CACOSF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "catanf" "ac_cv_have_decl_catanf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_catanf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CATANF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "csinhf" "ac_cv_have_decl_csinhf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_csinhf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CSINHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ccoshf" "ac_cv_have_decl_ccoshf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ccoshf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CCOSHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "ctanhf" "ac_cv_have_decl_ctanhf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_ctanhf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CTANHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "casinhf" "ac_cv_have_decl_casinhf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_casinhf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CASINHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "cacoshf" "ac_cv_have_decl_cacoshf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_cacoshf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CACOSHF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "catanhf" "ac_cv_have_decl_catanhf" "#include <math.h>
+#include <complex.h>
+"
+if test "x$ac_cv_have_decl_catanhf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_CATANHF $ac_have_decl
+_ACEOF
+
+fi
+
+# The output files to be generated
+ac_config_files="$ac_config_files Makefile nfft3.pc doxygen/doxygen.Doxyfile include/Makefile include/nfft3conf.h include/ticks.h 3rdparty/Makefile 3rdparty/cstripack/Makefile util/Makefile kernel/Makefile kernel/fpt/Makefile kernel/mri/Makefile kernel/nfct/Makefile kernel/nfft/Makefile kernel/nfsft/Makefile kernel/nfsoft/Makefile kernel/nfst/Makefile kernel/nnfft/Makefile kernel/nsfft/Makefile kernel/solver/Makefile kernel/util/Makefile tests/Makefile examples/Makefile examples/fpt/Make [...]
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_NFCT_TRUE}" && test -z "${HAVE_NFCT_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_NFCT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_NFST_TRUE}" && test -z "${HAVE_NFST_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_NFST\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_NFSFT_TRUE}" && test -z "${HAVE_NFSFT_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_NFSFT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_NFSOFT_TRUE}" && test -z "${HAVE_NFSOFT_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_NFSOFT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_NNFFT_TRUE}" && test -z "${HAVE_NNFFT_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_NNFFT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_NSFFT_TRUE}" && test -z "${HAVE_NSFFT_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_NSFFT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_MRI_TRUE}" && test -z "${HAVE_MRI_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_MRI\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_FPT_TRUE}" && test -z "${HAVE_FPT_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_FPT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_THREADS_TRUE}" && test -z "${HAVE_THREADS_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_THREADS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_OPENMP_TRUE}" && test -z "${HAVE_OPENMP_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_OPENMP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_MATLAB_TRUE}" && test -z "${HAVE_MATLAB_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_MATLAB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_MATLAB_THREADS_TRUE}" && test -z "${HAVE_MATLAB_THREADS_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_MATLAB_THREADS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_MATLAB_TRUE}" && test -z "${HAVE_MATLAB_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_MATLAB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by NFFT $as_me 3.2.3, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bugs at nfft.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+NFFT config.status 3.2.3
+configured by $0, generated by GNU Autoconf 2.69,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in AS \
+DLLTOOL \
+OBJDUMP \
+SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+sharedlib_from_linklib_cmd \
+AR \
+AR_FLAGS \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+nm_file_list_spec \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "include/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/config.h:include/config.h.in" ;;
+ "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "nfft3.pc") CONFIG_FILES="$CONFIG_FILES nfft3.pc" ;;
+ "doxygen/doxygen.Doxyfile") CONFIG_FILES="$CONFIG_FILES doxygen/doxygen.Doxyfile" ;;
+ "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
+ "include/nfft3conf.h") CONFIG_FILES="$CONFIG_FILES include/nfft3conf.h" ;;
+ "include/ticks.h") CONFIG_FILES="$CONFIG_FILES include/ticks.h" ;;
+ "3rdparty/Makefile") CONFIG_FILES="$CONFIG_FILES 3rdparty/Makefile" ;;
+ "3rdparty/cstripack/Makefile") CONFIG_FILES="$CONFIG_FILES 3rdparty/cstripack/Makefile" ;;
+ "util/Makefile") CONFIG_FILES="$CONFIG_FILES util/Makefile" ;;
+ "kernel/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/Makefile" ;;
+ "kernel/fpt/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/fpt/Makefile" ;;
+ "kernel/mri/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/mri/Makefile" ;;
+ "kernel/nfct/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nfct/Makefile" ;;
+ "kernel/nfft/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nfft/Makefile" ;;
+ "kernel/nfsft/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nfsft/Makefile" ;;
+ "kernel/nfsoft/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nfsoft/Makefile" ;;
+ "kernel/nfst/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nfst/Makefile" ;;
+ "kernel/nnfft/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nnfft/Makefile" ;;
+ "kernel/nsfft/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nsfft/Makefile" ;;
+ "kernel/solver/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/solver/Makefile" ;;
+ "kernel/util/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/util/Makefile" ;;
+ "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+ "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+ "examples/fpt/Makefile") CONFIG_FILES="$CONFIG_FILES examples/fpt/Makefile" ;;
+ "examples/mri/Makefile") CONFIG_FILES="$CONFIG_FILES examples/mri/Makefile" ;;
+ "examples/nfct/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nfct/Makefile" ;;
+ "examples/nfft/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nfft/Makefile" ;;
+ "examples/nfsft/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nfsft/Makefile" ;;
+ "examples/nfsoft/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nfsoft/Makefile" ;;
+ "examples/nfst/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nfst/Makefile" ;;
+ "examples/nnfft/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nnfft/Makefile" ;;
+ "examples/nsfft/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nsfft/Makefile" ;;
+ "examples/solver/Makefile") CONFIG_FILES="$CONFIG_FILES examples/solver/Makefile" ;;
+ "applications/Makefile") CONFIG_FILES="$CONFIG_FILES applications/Makefile" ;;
+ "applications/fastgauss/Makefile") CONFIG_FILES="$CONFIG_FILES applications/fastgauss/Makefile" ;;
+ "applications/fastsum/Makefile") CONFIG_FILES="$CONFIG_FILES applications/fastsum/Makefile" ;;
+ "applications/fastsumS2/Makefile") CONFIG_FILES="$CONFIG_FILES applications/fastsumS2/Makefile" ;;
+ "applications/quadratureS2/Makefile") CONFIG_FILES="$CONFIG_FILES applications/quadratureS2/Makefile" ;;
+ "applications/mri/Makefile") CONFIG_FILES="$CONFIG_FILES applications/mri/Makefile" ;;
+ "applications/mri/mri2d/Makefile") CONFIG_FILES="$CONFIG_FILES applications/mri/mri2d/Makefile" ;;
+ "applications/mri/mri3d/Makefile") CONFIG_FILES="$CONFIG_FILES applications/mri/mri3d/Makefile" ;;
+ "applications/polarFFT/Makefile") CONFIG_FILES="$CONFIG_FILES applications/polarFFT/Makefile" ;;
+ "applications/radon/Makefile") CONFIG_FILES="$CONFIG_FILES applications/radon/Makefile" ;;
+ "applications/iterS2/Makefile") CONFIG_FILES="$CONFIG_FILES applications/iterS2/Makefile" ;;
+ "matlab/Makefile") CONFIG_FILES="$CONFIG_FILES matlab/Makefile" ;;
+ "matlab/nfsft/Makefile") CONFIG_FILES="$CONFIG_FILES matlab/nfsft/Makefile" ;;
+ "matlab/nfft/Makefile") CONFIG_FILES="$CONFIG_FILES matlab/nfft/Makefile" ;;
+ "matlab/nfsft/@f_hat/Makefile") CONFIG_FILES="$CONFIG_FILES matlab/nfsft/@f_hat/Makefile" ;;
+ "doxygen/Makefile") CONFIG_FILES="$CONFIG_FILES doxygen/Makefile" ;;
+ "support/Makefile") CONFIG_FILES="$CONFIG_FILES support/Makefile" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_tt"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+ } >"$ac_tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$ac_tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$_am_arg" : 'X\(//\)[^/]' \| \
+ X"$_am_arg" : 'X\(//\)$' \| \
+ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "libtool":C)
+
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=""
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Assembler program.
+AS=$lt_AS
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Object dumper program.
+OBJDUMP=$lt_OBJDUMP
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive.
+AR_FLAGS=$lt_AR_FLAGS
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and in which our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ if test x"$xsi_shell" = xyes; then
+ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
+func_dirname ()\
+{\
+\ case ${1} in\
+\ */*) func_dirname_result="${1%/*}${2}" ;;\
+\ * ) func_dirname_result="${3}" ;;\
+\ esac\
+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_basename ()$/,/^} # func_basename /c\
+func_basename ()\
+{\
+\ func_basename_result="${1##*/}"\
+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
+func_dirname_and_basename ()\
+{\
+\ case ${1} in\
+\ */*) func_dirname_result="${1%/*}${2}" ;;\
+\ * ) func_dirname_result="${3}" ;;\
+\ esac\
+\ func_basename_result="${1##*/}"\
+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
+func_stripname ()\
+{\
+\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
+\ # positional parameters, so assign one to ordinary parameter first.\
+\ func_stripname_result=${3}\
+\ func_stripname_result=${func_stripname_result#"${1}"}\
+\ func_stripname_result=${func_stripname_result%"${2}"}\
+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
+func_split_long_opt ()\
+{\
+\ func_split_long_opt_name=${1%%=*}\
+\ func_split_long_opt_arg=${1#*=}\
+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
+func_split_short_opt ()\
+{\
+\ func_split_short_opt_arg=${1#??}\
+\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
+func_lo2o ()\
+{\
+\ case ${1} in\
+\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
+\ *) func_lo2o_result=${1} ;;\
+\ esac\
+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_xform ()$/,/^} # func_xform /c\
+func_xform ()\
+{\
+ func_xform_result=${1%.*}.lo\
+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_arith ()$/,/^} # func_arith /c\
+func_arith ()\
+{\
+ func_arith_result=$(( $* ))\
+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_len ()$/,/^} # func_len /c\
+func_len ()\
+{\
+ func_len_result=${#1}\
+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+fi
+
+if test x"$lt_shell_append" = xyes; then
+ sed -e '/^func_append ()$/,/^} # func_append /c\
+func_append ()\
+{\
+ eval "${1}+=\\${2}"\
+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
+func_append_quoted ()\
+{\
+\ func_quote_for_eval "${2}"\
+\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ # Save a `func_append' function call where possible by direct use of '+='
+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+ test 0 -eq $? || _lt_function_replace_fail=:
+else
+ # Save a `func_append' function call even when '+=' is not available
+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+ test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
+fi
+
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+ ;;
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named 'Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running 'make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir=$dirpart/$fdir; as_fn_mkdir_p
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+ ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..fcd76c3
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,514 @@
+# $Id: configure.ac 3971 2013-04-29 08:59:35Z tovo $
+#
+# Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+################################################################################
+# Process this file with autoconf to produce a configure script.
+################################################################################
+
+# autoconf initialization
+AC_INIT([NFFT],[3.2.3],[bugs at nfft.org])
+
+# revision id from svn
+AC_REVISION([$Id: configure.ac 3971 2013-04-29 08:59:35Z tovo $])
+
+# copyright notice
+AC_COPYRIGHT([2003, 2012, Jens Keiner, Stefan Kunis, Daniel Potts])
+
+# m4 macros go here
+AC_CONFIG_MACRO_DIR([m4])
+
+# where to put auxilliary files
+AC_CONFIG_AUX_DIR([config])
+
+# how to recognize the source directory
+AC_CONFIG_SRCDIR([include/nfft3.h])
+
+# header to create
+AC_CONFIG_HEADERS([include/config.h:include/config.h.in])
+
+# canonical host system type string
+AC_CANONICAL_HOST
+
+# number of CPUs
+#AX_COUNT_CPUS
+#AC_DEFINE_UNQUOTED(NFFT_NUM_CORES,$cpu_count,[Define to number of cores.])
+
+# substitute abs_srcdir in generated Makefiles
+AC_SUBST([abs_srcdir])
+
+# minimum required libtool version
+LT_PREREQ([2.4.2])
+
+# libtool initialization
+LT_INIT([win32-dll])
+
+# substitute LIBTOOL_DEPS variable in generated Makefiles
+AC_SUBST([LIBTOOL_DEPS])
+
+# version information for shared library
+SHARED_VERSION_INFO="1:0:0"
+
+# substitute SHARED_VERSION_INFO in generated Makefiles
+AC_SUBST(SHARED_VERSION_INFO)
+
+# check for make
+AC_PROG_MAKE_SET
+
+# automake initialization
+AM_INIT_AUTOMAKE(1.10)
+
+################################################################################
+# options for customizing the build process
+################################################################################
+
+# maintainer mode option
+AM_MAINTAINER_MODE
+
+# enable or disable parts of NFFT
+
+# whether we need the fpt module
+need_fpt="no"
+
+# build all modules by default in maintainer mode or if option is given
+AC_ARG_ENABLE(all, [AC_HELP_STRING([--enable-all],[build all modules])],
+ ok=$enableval, ok=no)
+if test "x$ok" = "xyes" -o "x$USE_MAINTAINER_MODE" = "xyes"; then
+ nfft_module_default="yes"
+else
+ nfft_module_default="no"
+fi
+
+# options for modules
+AX_NFFT_MODULE([nfct],[NFCT],[nonequispaced fast cosine transform])
+AX_NFFT_MODULE([nfst],[NFST],[nonequispaced fast sine transform])
+AX_NFFT_MODULE([nfsft],[NFSFT],[nonequispaced fast spherical Fourier transform],
+ [need_fpt="yes"])
+AX_NFFT_MODULE([nfsoft],[NFSOFT],[nonequispaced fast SO(3) Fourier transform],
+ [need_fpt="yes"])
+AX_NFFT_MODULE([nnfft],[NNFFT],[nonequispaced fast Fourier transform -- ]#
+ [nonequispaced in both domains])
+AX_NFFT_MODULE([nsfft],[NSFFT],[nonequispaced sparse fast Fourier transform])
+AX_NFFT_MODULE([mri],[MRI],[magnet resonance imaging])
+AX_NFFT_MODULE([fpt],[FPT],[fast polynomial transform],[],[],
+ [test "x$ok" = "xyes" -o "x$need_fpt" = "xyes"])
+
+# multithreaded code
+AC_ARG_ENABLE(openmp, [AC_HELP_STRING([--enable-openmp],
+ [enable OpenMP multithreaded code])], enable_threads=$enableval, enable_threads=no)
+AM_CONDITIONAL(HAVE_THREADS, test "x$enable_threads" = "xyes" )
+
+# debug mode
+AC_ARG_ENABLE(debug, [AC_HELP_STRING([--enable-debug],
+ [compile with extra runtime checks for debugging])], enable_debug=$enableval,
+ enable_debug=no)
+if test "x$enable_debug" = "xyes"; then
+ AC_DEFINE(NFFT_DEBUG,1,[Define to enable extra debugging code.])
+fi
+
+# runtime time measurements
+AC_ARG_ENABLE(measure-time, [AC_HELP_STRING([--enable-measure-time],
+ [measure time during execution])], ok=$enableval, ok=no)
+if test "x$ok" = "xyes"; then
+ AC_DEFINE(MEASURE_TIME,1,[Define to enable runtime time measurements.])
+fi
+
+# runtime time measurements for FFTW part
+AC_ARG_ENABLE(measure-time-fftw, [AC_HELP_STRING([--enable-measure-time-fftw],
+ [measure time of FFTW transforms during execution])], ok=$enableval, ok=no)
+if test "x$ok" = "xyes"; then
+ AC_DEFINE(MEASURE_TIME_FFTW,1,[Define to enable time measurements for FFTW]
+ [transforms.])
+fi
+
+AC_ARG_ENABLE(mips_zbus_timer, [AC_HELP_STRING([--enable-mips-zbus-timer],
+ [use MIPS ZBus cycle-counter])], have_mips_zbus_timer=$enableval,
+ have_mips_zbus_timer=no)
+if test "$have_mips_zbus_timer" = "yes"; then
+ AC_DEFINE(HAVE_MIPS_ZBUS_TIMER,1,
+ [Define to enable use of MIPS ZBus cycle-counter.])
+fi
+
+# select window function
+AC_ARG_WITH(window, [AC_HELP_STRING([--with-window=ARG],[choose window function
+ (ARG can be one of: kaiserbessel (default), gaussian, bspline, sinc,
+ dirac)])],
+ window=$withval, window="kaiserbessel")
+
+AC_MSG_CHECKING([window function])
+case "$window" in
+ gaussian)
+ AC_DEFINE(GAUSSIAN,1,[Define to enable Gaussian window function.]);;
+ bspline)
+ AC_DEFINE(B_SPLINE,1,[Define to enable B-spline window function.]);;
+ sinc)
+ AC_DEFINE(SINC_POWER,1,[Define to enable sinc power window function.]);;
+ kaiserbessel)
+ AC_DEFINE(KAISER_BESSEL,1,[Define to enable Kaiser-Bessel window function.]);;
+ delta)
+ AC_DEFINE(B_SPLINE,1,[Define to enable Dirac delta window function.]);;
+ *)
+ AC_MSG_ERROR([Unknown window function "$window".]);;
+esac
+AC_MSG_RESULT([$window])
+
+################################################################################
+# compiler characteristis
+################################################################################
+
+# select programming language
+AC_LANG(C)
+
+# compiler vendor
+AX_COMPILER_VENDOR
+
+# check for C99 compliant mode (possibly with GNU extensions)
+AC_PROG_CC_C99
+
+# per-target flags
+AM_PROG_CC_C_O
+
+# enable "const" keyword
+AC_C_CONST
+
+# enable "restrict" keyword
+AC_C_RESTRICT
+
+# enable "inline" keyword
+AC_C_INLINE
+
+# reset CC variable (the C99 option is added back below)
+CC="$ac_save_CC"
+
+################################################################################
+# program checks
+################################################################################
+
+# C preprocessor
+AC_PROG_CPP_WERROR
+
+# assembler
+AM_PROG_AS
+
+# BSD-compatible install
+AC_PROG_INSTALL
+
+# whether ln -s works
+AC_PROG_LN_S
+
+################################################################################
+# 3rd party libraries
+################################################################################
+
+# Check for fftw3.
+AX_LIB_FFTW3
+
+if test "x$ax_lib_fftw3" = "xno"; then
+ AC_MSG_ERROR([You don't seem to have the FFTW 3 library installed. You can ]#
+ [download it from http://www.fftw.org. If you have installed FFTW 3, ]#
+ [make sure that this configure script can find it. See ./configure ]#
+ [--help for more information.])
+fi
+
+if test "x$enable_threads" = "xyes" -a "x$ax_lib_fftw3_threads" = "xno"; then
+ AC_MSG_ERROR([You don't seem to have the threaded FFTW 3 library installed.])
+fi
+
+AX_OPENMP
+AM_CONDITIONAL(HAVE_OPENMP, test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" != "xunknown" )
+AC_SUBST(OPENMP_CFLAGS)
+
+if test "x$enable_threads" = "xyes" -a "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" = "xunknown"; then
+ AC_MSG_ERROR([You don't seem to have a C compiler with OpenMP support installed which is required for threaded NFFT.])
+fi
+
+# Check for MATLAB.
+AX_PROG_MATLAB
+
+if test "x$matlab_threads" = "xyes" -a "x$enable_threads" != "xyes"; then
+ AC_MSG_ERROR([The NFFT Matlab interface with thread support requires the threaded NFFT to be built. Please re-run configure with \"--enable-openmp\".])
+fi
+
+AM_CONDITIONAL(HAVE_MATLAB, test "x$ax_prog_matlab" = "xyes" )
+AC_SUBST(matlab_CPPFLAGS)
+AC_SUBST(matlab_LIBS)
+AC_SUBST(matlab_LDFLAGS)
+AC_SUBST(matlab_mexext)
+
+################################################################################
+# compiler options
+################################################################################
+
+# Try to choose good compiler options.
+if test "x$ac_test_CFLAGS" != "xset"; then
+ saved_CPPFLAGS="$CPPFLAGS"
+ saved_LDFLAGS="$LDFLAGS"
+ saved_LIBS="$LIBS"
+ CPPFLAGS="$CPPFLAGS $fftw3_CPPFLAGS"
+ LIBS="$LIBS $fftw3_LIBS"
+ LDFLAGS="$LDFLAGS $fftw3_LDFLAGS"
+ AX_CC_MAXOPT
+ CPPFLAGS="$saved_CPPFLAGS"
+ LDFLAGS="$saved_LDFLAGS"
+ LIBS="$saved_LIBS"
+fi
+
+# override CFLAGS selection when debugging
+if test "x${enable_debug}" = "xyes"; then
+ CFLAGS="-g"
+# if test "x$ax_cv_c_compiler_vendor" = "xapple"; then
+# CFLAGS="$CFLAGS $ax_cv_apple_gcc_archflag"
+# fi
+fi
+
+# add gcc warnings, in debug/maintainer mode only
+if test "x${enable_debug}" = "xyes" || test "x$USE_MAINTAINER_MODE" = "xyes";
+then
+ if test "x$ac_cv_c_compiler_gnu" = "xyes"; then
+ CFLAGS="$CFLAGS -Wall -W -Wcast-qual -Wpointer-arith -Wcast-align -pedantic"
+ CFLAGS="$CFLAGS -Wno-long-long -Wshadow -Wbad-function-cast -Wwrite-strings"
+ CFLAGS="$CFLAGS -Wstrict-prototypes -Wredundant-decls -Wnested-externs"
+ CFLAGS="$CFLAGS -Wundef -Wconversion -Wmissing-prototypes "
+ CFLAGS="$CFLAGS -Wmissing-declarations"
+ fi
+fi
+
+# option to accept C99
+CFLAGS="$CFLAGS $ac_cv_prog_cc_c99"
+
+CPPFLAGS="$CPPFLAGS $fftw3_CPPFLAGS"
+
+# add Matlab CFLAGS
+if test "x$ax_prog_matlab" = "xyes"; then
+ CFLAGS="$CFLAGS $matlab_CFLAGS"
+fi
+
+################################################################################
+# check if mex.h can be included without undefinition of
+################################################################################
+ax_prog_matlab_gcc_require_undef_stdc_utf_16=no
+if test "x$ax_prog_matlab" = "xyes"; then
+ AC_MSG_CHECKING([if inclusion of mex.h succeeds])
+ saved_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $matlab_CPPFLAGS"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include "mex.h"]],[[]])],[ax_prog_matlab_check_compile_mex_h=yes], [ax_prog_matlab_check_compile_mex_h=no])
+ AC_MSG_RESULT([$ax_prog_matlab_check_compile_mex_h])
+ if test "x$ax_prog_matlab_check_compile_mex_h" = "xno"; then
+ AC_MSG_CHECKING([if undefining __STDC_UTF_16__ solves this issue])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#undef __STDC_UTF_16__
+ #include "mex.h"]],[[]])],[ax_prog_matlab_gcc_require_undef_stdc_utf_16=yes], [])
+ AC_MSG_RESULT([$ax_prog_matlab_gcc_require_undef_stdc_utf_16])
+ fi
+ CPPFLAGS="$saved_CPPFLAGS"
+fi
+if test "x$ax_prog_matlab_gcc_require_undef_stdc_utf_16" = "xyes"; then
+ AC_DEFINE([HAVE_MATLAB_GCC_REQUIRE_UNDEF_STDC_UTF_16],[1],[Define to 1 if compilation of Matlab interface only succeeds when macro __STDC_UTF_16__ not defined.])
+fi
+
+################################################################################
+# header files/data types/compiler characteristics
+################################################################################
+
+AC_CHECK_HEADERS([math.h stdio.h stdlib.h time.h sys/time.h \
+ complex.h string.h float.h limits.h stdarg.h stddef.h sys/types.h stdint.h \
+ inttypes.h stdbool.h malloc.h c_asm.h intrinsics.h mach/mach_time.h])
+
+AC_HEADER_TIME
+
+AC_TYPE_SIZE_T
+AC_CHECK_TYPE([long double],
+ [AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define to 1 if the compiler supports]
+ ['long double'])],[])
+AC_CHECK_TYPE([hrtime_t],[AC_DEFINE(HAVE_HRTIME_T, 1, [Define to 1 if hrtime_t]
+ [is defined in <sys/time.h>])],,
+ [
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+ ])
+AC_CHECK_TYPES(uintptr_t, [], [AC_CHECK_SIZEOF(void *)], [$ac_includes_default
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif])
+
+AC_CHECK_SIZEOF(int)
+AC_CHECK_SIZEOF(unsigned int)
+AC_CHECK_SIZEOF(long)
+AC_CHECK_SIZEOF(unsigned long)
+AC_CHECK_SIZEOF(long long)
+AC_CHECK_SIZEOF(unsigned long long)
+AC_CHECK_SIZEOF(size_t)
+AC_CHECK_SIZEOF(ptrdiff_t)
+AC_CHECK_SIZEOF(float)
+AC_CHECK_SIZEOF(double)
+AC_CHECK_SIZEOF(long double)
+
+# library functions
+AC_FUNC_ALLOCA
+AC_FUNC_STRTOD
+AC_FUNC_VPRINTF
+saved_LIBS=$LIBS
+AC_CHECK_LIB(m, sin)
+LIBS=$saved_LIBS
+
+AC_CHECK_FUNCS([gethrtime read_real_time time_base_to_time clock_gettime mach_absolute_time])
+
+AC_CHECK_FUNCS([memset posix_memalign memalign])
+AC_CHECK_FUNCS([_mm_malloc _mm_free sysctl])
+AC_CHECK_FUNCS([abort snprintf sqrt])
+AC_CHECK_FUNCS([sleep usleep nanosleep drand48 srand48])
+
+AC_CHECK_DECLS([memalign, posix_memalign])
+AC_CHECK_DECLS([sleep],[],[],[#include <unistd.h>])
+AC_CHECK_DECLS([nanosleep],[],[],[#include <time.h>])
+AC_CHECK_DECLS([drand48],[],[],[#include <stdlib.h>])
+AC_CHECK_DECLS([srand48],[],[],[#include <stdlib.h>])
+
+# Cray UNICOS _rtc() (real-time clock) intrinsic
+AC_MSG_CHECKING([for _rtc intrinsic])
+rtc_ok=yes
+AC_TRY_LINK([#ifdef HAVE_INTRINSICS_H
+#include <intrinsics.h>
+#endif], [_rtc()], [AC_DEFINE(HAVE__RTC,1,[Define if you have the UNICOS _rtc() intrinsic.])], [rtc_ok=no])
+AC_MSG_RESULT($rtc_ok)
+
+AC_MSG_CHECKING([whether a cycle counter is available])
+save_CPPFLAGS=$CPPFLAGS
+CPPFLAGS="$CPPFLAGS -I$srcdir/include"
+AC_TRY_CPP([#include "cycle.h"
+#ifndef HAVE_TICK_COUNTER
+# error No cycle counter
+#endif], [ok=yes], [ok=no])
+AC_MSG_RESULT($ok)
+TICKS_PER_SECOND=1
+if test $ok = no; then
+ echo "***************************************************************"
+ echo "WARNING: No cycle counter found. Time measurements in NFFT will"
+ echo " show incorrect results. "
+ echo "***************************************************************"
+else
+ AC_TRY_RUN([#include "cycle.h"
+#include <stdio.h>
+#if defined(HAVE_NANOSLEEP)
+#include <stdlib.h>
+static struct timespec ts = {1,0};
+#define SLEEP nanosleep(&ts, 0)
+#elif defined(HAVE_SLEEP)
+#include <unistd.h>
+#define SLEEP sleep(1)
+#elif defined(HAVE_USLEEP)
+#include <unistd.h>
+#define SLEEP usleep(1000)
+#else
+#error wtf!
+#endif
+int main(){
+ticks t0 = getticks();
+SLEEP;{
+ double tps = elapsed(getticks(),t0)/1.0;
+ FILE *f = fopen("ticks.tmp","w");
+ fprintf(f,"%.1f\n",tps);
+ fclose(f);}
+return 0;}],[read TICKS_PER_SECOND < ticks.tmp],[],[])
+ rm -f ticks.tmp
+ if test "$TICKS_PER_SECOND" = "1"; then
+ echo "***************************************************************"
+ echo "WARNING: Number of ticks per second could not be determined. "
+ echo " Time measurements in NFFT will be in arbitrary units "
+ echo " instead of seconds. "
+ echo "***************************************************************"
+ fi
+fi
+
+CPPFLAGS=$save_CPPFLAGS
+AC_SUBST(TICKS_PER_SECOND)
+
+PRECISION=d
+if test "$PRECISION" = "l"; then
+AC_CHECK_FUNCS([copysignl nextafterl nanl ceill floorl nearbyintl rintl roundl lrintl lroundl llrintl llroundl truncl fmodl remainderl remquol fdiml fmaxl fminl fmal fabsl sqrtl cbrtl hypotl expl exp2l expm1l logl log2l log10l log1pl logbl ilogbl modfl frexpl ldexpl scalbnl scalblnl powl cosl sinl tanl coshl sinhl tanhl acosl asinl atanl atan2l acoshl asinhl atanhl tgammal lgammal j0l j1l jnl jnl y0l y1l ynl erfl erfcl creall cimagl cabsl cargl conjl cprojl csqrtl cexpl clogl cpowl csinl [...]
+AC_CHECK_DECLS([copysignl, nextafterl, nanl, ceill, floorl, nearbyintl, rintl, roundl, lrintl, lroundl, llrintl, llroundl, truncl, fmodl, remainderl, remquol, fdiml, fmaxl, fminl, fmal, fabsl, sqrtl, cbrtl, hypotl, expl, exp2l, expm1l, logl, log2l, log10l, log1pl, logbl, ilogbl, modfl, frexpl, ldexpl, scalbnl, scalblnl, powl, cosl, sinl, tanl, coshl, sinhl, tanhl, acosl, asinl, atanl, atan2l, acoshl, asinhl, atanhl, tgammal, lgammal, j0l, j1l, jnl, y0l, y1l, ynl, erfl, erfcl, creall, cim [...]
+ [#include <math.h>
+#include <complex.h>])
+fi
+
+if test "$PRECISION" = "d"; then
+AC_CHECK_FUNCS([copysign nextafter nan ceil floor nearbyint rint round lrint lround llrint llround trunc fmod remainder remquo fdim fmax fmin fma fabs sqrt cbrt hypot exp exp2 expm1 log log2 log10 log1p logb ilogb modf frexp ldexp scalbn scalbln pow cos sin tan cosh sinh tanh acos asin atan atan2 acosh asinh atanh tgamma lgamma j0 j1 jn y0 y1 yn erf erfc creal cimag cabs carg conj cproj csqrt cexp clog cpow csin ccos ctan casin cacos catan csinh ccosh ctanh casinh cacosh catanh])
+AC_CHECK_DECLS([copysign, nextafter, nan, ceil, floor, nearbyint, rint, round, lrint, lround, llrint, llround, trunc, fmod, remainder, remquo, fdim, fmax, fmin, fma, fabs, sqrt, cbrt, hypot, exp, exp2, expm1, log, log2, log10, log1p, logb, ilogb, modf, frexp, ldexp, scalbn, scalbln, pow, cos, sin, tan, cosh, sinh, tanh, acos, asin, atan, atan2, acosh, asinh, atanh, tgamma, lgamma, j0, j1, jn, y0, y1, yn, erf, erfc, creal, cimag, cabs, carg, conj, cproj, csqrt, cexp, clog, cpow, csin, cco [...]
+ [#include <math.h>
+#include <complex.h>])
+fi
+
+if test "$PRECISION" = "s"; then
+AC_CHECK_FUNCS([copysignf nextafterf nanf ceilf floorf nearbyintf rintf roundf lrintf lroundf llrintf llroundf truncf fmodf remainderf remquof fdimf fmaxf fminf fmaf fabsf sqrtf cbrtf hypotf expf exp2f expm1f logf log2f log10f log1pf logbf ilogbf modff frexpf ldexpf scalbnf scalblnf powf cosf sinf tanf coshf sinhf tanhf acosf asinf atanf atan2f acoshf asinhf atanhf tgammaf lgammaf j0f j1f jnf y0f y1f ynf erff erfcf crealf cimagf cabsf cargf conjf cprojf csqrtf cexpf clogf cpowf csinf cco [...]
+AC_CHECK_DECLS([copysignf, nextafterf, nanf, ceilf, floorf, nearbyintf, rintf, roundf, lrintf, lroundf, llrintf, llroundf, truncf, fmodf, remainderf, remquof, fdimf, fmaxf, fminf, fmaf, fabsf, sqrtf, cbrtf, hypotf, expf, exp2f, expm1f, logf, log2f, log10f, log1pf, logbf, ilogbf, modff, frexpf, ldexpf, scalbnf, scalblnf, powf, cosf, sinf, tanf, coshf, sinhf, tanhf, acosf, asinf, atanf, atan2f, acoshf, asinhf, atanhf, tgammaf, lgammaf, j0f, j1f, jnf, y0f, y1f, ynf, erff, erfcf, crealf, cim [...]
+ [#include <math.h>
+#include <complex.h>])
+fi
+
+# The output files to be generated
+AC_CONFIG_FILES(Makefile \
+ nfft3.pc \
+ doxygen/doxygen.Doxyfile \
+ include/Makefile \
+ include/nfft3conf.h \
+ include/ticks.h \
+ 3rdparty/Makefile \
+ 3rdparty/cstripack/Makefile \
+ util/Makefile \
+ kernel/Makefile \
+ kernel/fpt/Makefile \
+ kernel/mri/Makefile \
+ kernel/nfct/Makefile \
+ kernel/nfft/Makefile \
+ kernel/nfsft/Makefile \
+ kernel/nfsoft/Makefile \
+ kernel/nfst/Makefile \
+ kernel/nnfft/Makefile \
+ kernel/nsfft/Makefile \
+ kernel/solver/Makefile \
+ kernel/util/Makefile \
+ tests/Makefile \
+ examples/Makefile \
+ examples/fpt/Makefile \
+ examples/mri/Makefile \
+ examples/nfct/Makefile \
+ examples/nfft/Makefile \
+ examples/nfsft/Makefile \
+ examples/nfsoft/Makefile \
+ examples/nfst/Makefile \
+ examples/nnfft/Makefile \
+ examples/nsfft/Makefile \
+ examples/solver/Makefile \
+ applications/Makefile \
+ applications/fastgauss/Makefile \
+ applications/fastsum/Makefile \
+ applications/fastsumS2/Makefile \
+ applications/quadratureS2/Makefile \
+ applications/mri/Makefile \
+ applications/mri/mri2d/Makefile \
+ applications/mri/mri3d/Makefile \
+ applications/polarFFT/Makefile \
+ applications/radon/Makefile \
+ applications/iterS2/Makefile
+ matlab/Makefile \
+ matlab/nfsft/Makefile \
+ matlab/nfft/Makefile \
+ matlab/nfsft/@f_hat/Makefile \
+ doxygen/Makefile \
+ support/Makefile)
+
+AC_OUTPUT
diff --git a/doc/api/html/accuracy_8c_source.html b/doc/api/html/accuracy_8c_source.html
new file mode 100644
index 0000000..287bfda
--- /dev/null
+++ b/doc/api/html/accuracy_8c_source.html
@@ -0,0 +1,148 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - accuracy.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d.html">nnfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">accuracy.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: accuracy.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">void</span> accuracy(<span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">int</span> m,t;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <a class="code" href="structnnfft__plan.html">nnfft_plan</a> my_plan;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">double</span> _Complex *slow;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">int</span> N[d],n[d];</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">int</span> M_total,N_total;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> M_total=10000;N_total=1;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> slow=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">for</span>(t=0; t<d; t++)</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> {</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> N[t]=(1<<(12/d));</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> n[t]=2*N[t];</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> N_total*=N[t];</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> }</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">for</span>(m=0; m<10; m++)</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> {</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> nnfft_init_guru(&my_plan, d, N_total, M_total, N, n, m,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> PRE_PSI| PRE_PHI_HUT|</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> MALLOC_X| MALLOC_V| MALLOC_F_HAT| MALLOC_F);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>, d*my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total numb [...]
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>, d*my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of [...]
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> nnfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <a class="code" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6" title="create a lookup table">nnfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9" title="computes all entries of B explicitly">nnfft_precompute_full_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580" title="initialisation of direct transform">nnfft_precompute_phi_hut</a>(&my_plan);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(my_plan.<a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb99 [...]
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> nnfft_trafo_direct(&my_plan);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(my_plan.<a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,slow);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <a class="code" href="nfft3_8h.html#a994c1748ebe1371c53dd2cb437054d4f" title="user routines">nnfft_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> printf(<span class="stringliteral">"%e, %e\n"</span>,</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> X(error_l_infty_complex)(slow, my_plan.<a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, M_total),</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> X(error_l_infty_1_complex)(slow, my_plan.<a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, M_total, my_plan.<a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>));</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> nnfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> {</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordtype">int</span> d;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">for</span>(d=1; d<4; d++)</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> accuracy(d);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/annotated.html b/doc/api/html/annotated.html
new file mode 100644
index 0000000..9e54f4d
--- /dev/null
+++ b/doc/api/html/annotated.html
@@ -0,0 +1,109 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Structures
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Data Structures</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structfastsum__plan__.html" target="_self">fastsum_plan_</a></td><td class="desc">Plan for fast summation algorithm</td></tr>
+<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structfgt__plan.html" target="_self">fgt_plan</a></td><td class="desc">Structure for the Gauss transform</td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structfpt__data__.html" target="_self">fpt_data_</a></td><td class="desc">Holds data for a single cascade summation</td></tr>
+<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structfpt__set__s__.html" target="_self">fpt_set_s_</a></td><td class="desc">Holds data for a set of cascade summations</td></tr>
+<tr id="row_4_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structfpt__step__.html" target="_self">fpt_step_</a></td><td class="desc">Holds data for a single multiplication step in the cascade summation</td></tr>
+<tr id="row_5_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structimri__inh__2d1d__adjoint__plan.html" target="_self">imri_inh_2d1d_adjoint_plan</a></td><td class="desc">Structure for an adjoint transform plan</td></tr>
+<tr id="row_6_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structimri__inh__3d__adjoint__plan.html" target="_self">imri_inh_3d_adjoint_plan</a></td><td class="desc">Structure for an adjoint transform plan</td></tr>
+<tr id="row_7_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structinfct__adjoint__plan.html" target="_self">infct_adjoint_plan</a></td><td class="desc">Structure for an adjoint transform plan</td></tr>
+<tr id="row_8_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structinfft__adjoint__plan.html" target="_self">infft_adjoint_plan</a></td><td class="desc">Structure for an adjoint transform plan</td></tr>
+<tr id="row_9_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structinfsft__adjoint__plan.html" target="_self">infsft_adjoint_plan</a></td><td class="desc">TODO: different solvers</td></tr>
+<tr id="row_10_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structinfst__adjoint__plan.html" target="_self">infst_adjoint_plan</a></td><td class="desc">Structure for an adjoint transform plan</td></tr>
+<tr id="row_11_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structinnfft__adjoint__plan.html" target="_self">innfft_adjoint_plan</a></td><td class="desc">Structure for an adjoint transform plan</td></tr>
+<tr id="row_12_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structmri__inh__2d1d__plan.html" target="_self">mri_inh_2d1d_plan</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structmri__inh__3d__plan.html" target="_self">mri_inh_3d_plan</a></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structmrif__inh__2d1d__plan.html" target="_self">mrif_inh_2d1d_plan</a></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structmrif__inh__3d__plan.html" target="_self">mrif_inh_3d_plan</a></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structmril__inh__2d1d__plan.html" target="_self">mril_inh_2d1d_plan</a></td><td class="desc"></td></tr>
+<tr id="row_17_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structmril__inh__3d__plan.html" target="_self">mril_inh_3d_plan</a></td><td class="desc"></td></tr>
+<tr id="row_18_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfct__plan.html" target="_self">nfct_plan</a></td><td class="desc"></td></tr>
+<tr id="row_19_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfctf__plan.html" target="_self">nfctf_plan</a></td><td class="desc"></td></tr>
+<tr id="row_20_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfctl__plan.html" target="_self">nfctl_plan</a></td><td class="desc"></td></tr>
+<tr id="row_21_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfft__mv__plan__complex.html" target="_self">nfft_mv_plan_complex</a></td><td class="desc"></td></tr>
+<tr id="row_22_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfft__mv__plan__double.html" target="_self">nfft_mv_plan_double</a></td><td class="desc"></td></tr>
+<tr id="row_23_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfft__plan.html" target="_self">nfft_plan</a></td><td class="desc"></td></tr>
+<tr id="row_24_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfftf__mv__plan__complex.html" target="_self">nfftf_mv_plan_complex</a></td><td class="desc"></td></tr>
+<tr id="row_25_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfftf__mv__plan__double.html" target="_self">nfftf_mv_plan_double</a></td><td class="desc"></td></tr>
+<tr id="row_26_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfftf__plan.html" target="_self">nfftf_plan</a></td><td class="desc"></td></tr>
+<tr id="row_27_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfftl__mv__plan__complex.html" target="_self">nfftl_mv_plan_complex</a></td><td class="desc"></td></tr>
+<tr id="row_28_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfftl__mv__plan__double.html" target="_self">nfftl_mv_plan_double</a></td><td class="desc"></td></tr>
+<tr id="row_29_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfftl__plan.html" target="_self">nfftl_plan</a></td><td class="desc"></td></tr>
+<tr id="row_30_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfsft__plan.html" target="_self">nfsft_plan</a></td><td class="desc"></td></tr>
+<tr id="row_31_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfsft__wisdom.html" target="_self">nfsft_wisdom</a></td><td class="desc">Wisdom structure</td></tr>
+<tr id="row_32_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfsftf__plan.html" target="_self">nfsftf_plan</a></td><td class="desc"></td></tr>
+<tr id="row_33_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfsftl__plan.html" target="_self">nfsftl_plan</a></td><td class="desc"></td></tr>
+<tr id="row_34_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfsoft__plan__.html" target="_self">nfsoft_plan_</a></td><td class="desc"></td></tr>
+<tr id="row_35_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfsoftf__plan__.html" target="_self">nfsoftf_plan_</a></td><td class="desc"></td></tr>
+<tr id="row_36_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfsoftl__plan__.html" target="_self">nfsoftl_plan_</a></td><td class="desc"></td></tr>
+<tr id="row_37_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfst__plan.html" target="_self">nfst_plan</a></td><td class="desc"></td></tr>
+<tr id="row_38_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfstf__plan.html" target="_self">nfstf_plan</a></td><td class="desc"></td></tr>
+<tr id="row_39_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnfstl__plan.html" target="_self">nfstl_plan</a></td><td class="desc"></td></tr>
+<tr id="row_40_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnnfft__plan.html" target="_self">nnfft_plan</a></td><td class="desc"></td></tr>
+<tr id="row_41_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnnfftf__plan.html" target="_self">nnfftf_plan</a></td><td class="desc"></td></tr>
+<tr id="row_42_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnnfftl__plan.html" target="_self">nnfftl_plan</a></td><td class="desc"></td></tr>
+<tr id="row_43_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnsfft__plan.html" target="_self">nsfft_plan</a></td><td class="desc"></td></tr>
+<tr id="row_44_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnsfftf__plan.html" target="_self">nsfftf_plan</a></td><td class="desc"></td></tr>
+<tr id="row_45_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structnsfftl__plan.html" target="_self">nsfftl_plan</a></td><td class="desc"></td></tr>
+<tr id="row_46_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structs__param.html" target="_self">s_param</a></td><td class="desc"></td></tr>
+<tr id="row_47_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structs__result.html" target="_self">s_result</a></td><td class="desc"></td></tr>
+<tr id="row_48_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structs__resval.html" target="_self">s_resval</a></td><td class="desc"></td></tr>
+<tr id="row_49_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structs__testset.html" target="_self">s_testset</a></td><td class="desc"></td></tr>
+<tr id="row_50_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsolver__plan__complex.html" target="_self">solver_plan_complex</a></td><td class="desc"></td></tr>
+<tr id="row_51_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsolver__plan__double.html" target="_self">solver_plan_double</a></td><td class="desc"></td></tr>
+<tr id="row_52_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsolverf__plan__complex.html" target="_self">solverf_plan_complex</a></td><td class="desc"></td></tr>
+<tr id="row_53_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsolverf__plan__double.html" target="_self">solverf_plan_double</a></td><td class="desc"></td></tr>
+<tr id="row_54_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsolverl__plan__complex.html" target="_self">solverl_plan_complex</a></td><td class="desc"></td></tr>
+<tr id="row_55_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structsolverl__plan__double.html" target="_self">solverl_plan_double</a></td><td class="desc"></td></tr>
+<tr id="row_56_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structtaylor__plan.html" target="_self">taylor_plan</a></td><td class="desc"></td></tr>
+<tr id="row_57_"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structwindow__funct__plan__.html" target="_self">window_funct_plan_</a></td><td class="desc">Window_funct_plan is a plan to use the window functions independent of the nfft</td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/applications_2doxygen_8c_source.html b/doc/api/html/applications_2doxygen_8c_source.html
new file mode 100644
index 0000000..ae90e09
--- /dev/null
+++ b/doc/api/html/applications_2doxygen_8c_source.html
@@ -0,0 +1,70 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - doxygen.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">applications/doxygen.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/applications_2fastsumS2_2doxygen_8h_source.html b/doc/api/html/applications_2fastsumS2_2doxygen_8h_source.html
new file mode 100644
index 0000000..d60ce07
--- /dev/null
+++ b/doc/api/html/applications_2fastsumS2_2doxygen_8h_source.html
@@ -0,0 +1,70 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - doxygen.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_224fe669cf662e4d4573ba584877a9b9.html">fastsumS2</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">applications/fastsumS2/doxygen.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/applications_2iterS2_2doxygen_8h_source.html b/doc/api/html/applications_2iterS2_2doxygen_8h_source.html
new file mode 100644
index 0000000..40dcda8
--- /dev/null
+++ b/doc/api/html/applications_2iterS2_2doxygen_8h_source.html
@@ -0,0 +1,70 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - doxygen.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_e198b4faa999927a1ae92d03d5f1f5e6.html">iterS2</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">applications/iterS2/doxygen.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/applications_2mri_2doxygen_8c_source.html b/doc/api/html/applications_2mri_2doxygen_8c_source.html
new file mode 100644
index 0000000..61a8f60
--- /dev/null
+++ b/doc/api/html/applications_2mri_2doxygen_8c_source.html
@@ -0,0 +1,70 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - doxygen.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">applications/mri/doxygen.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/applications_2mri_2mri2d_2doxygen_8h_source.html b/doc/api/html/applications_2mri_2mri2d_2doxygen_8h_source.html
new file mode 100644
index 0000000..c654fcd
--- /dev/null
+++ b/doc/api/html/applications_2mri_2mri2d_2doxygen_8h_source.html
@@ -0,0 +1,70 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - doxygen.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">applications/mri/mri2d/doxygen.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/applications_2mri_2mri3d_2doxygen_8h_source.html b/doc/api/html/applications_2mri_2mri3d_2doxygen_8h_source.html
new file mode 100644
index 0000000..faf1155
--- /dev/null
+++ b/doc/api/html/applications_2mri_2mri3d_2doxygen_8h_source.html
@@ -0,0 +1,70 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - doxygen.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_fb8678d426210fc305fe5dfd30a163a5.html">mri3d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">applications/mri/mri3d/doxygen.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/applications_2polarFFT_2doxygen_8h_source.html b/doc/api/html/applications_2polarFFT_2doxygen_8h_source.html
new file mode 100644
index 0000000..eb9348a
--- /dev/null
+++ b/doc/api/html/applications_2polarFFT_2doxygen_8h_source.html
@@ -0,0 +1,70 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - doxygen.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">applications/polarFFT/doxygen.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/applications_2quadratureS2_2doxygen_8h_source.html b/doc/api/html/applications_2quadratureS2_2doxygen_8h_source.html
new file mode 100644
index 0000000..5f9a8fe
--- /dev/null
+++ b/doc/api/html/applications_2quadratureS2_2doxygen_8h_source.html
@@ -0,0 +1,70 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - doxygen.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_deedd863ca11d55d683e9872da0f56e1.html">quadratureS2</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">applications/quadratureS2/doxygen.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/bc_s.png b/doc/api/html/bc_s.png
new file mode 100644
index 0000000..25e3beb
Binary files /dev/null and b/doc/api/html/bc_s.png differ
diff --git a/doc/api/html/bdwn.png b/doc/api/html/bdwn.png
new file mode 100644
index 0000000..940a0b9
Binary files /dev/null and b/doc/api/html/bdwn.png differ
diff --git a/doc/api/html/bessel__i0_8c_source.html b/doc/api/html/bessel__i0_8c_source.html
new file mode 100644
index 0000000..d809260
--- /dev/null
+++ b/doc/api/html/bessel__i0_8c_source.html
@@ -0,0 +1,368 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - bessel_i0.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">bessel_i0.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#if defined(NFFT_LDOUBLE)</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"></span><span class="preprocessor"> #if LDBL_MANT_DIG > 64</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span> <span class="comment">/* long double 128 bit wide */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">static</span> <span class="keyword">const</span> R P1[] =</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> {</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> K(1.00715709113717408460589579223209941204261347125985390244049122),</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> K(0.244951997023176876020320575838917179801959212259109588711443322),</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> K(0.007157677421552158878119583351756319398653762265084335703499437),</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> K(0.000088638803372684623765617528646130117285577351082745565226135),</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> K(5.86290506716174293160891590037213629006472953235560773267e-7),</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> K(2.345957469650316879673588315314269880856753475545514611e-9),</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> K(6.128655873200031753345017339110506400750029700912053e-12),</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> K(1.0986892011606471142197070904902679807307454250063e-14),</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> K(1.3971139352985872209413265761909675621623302845e-17),</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> K(1.2871864763402201040551492995178709443354555e-20),</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> K(8.691006015934819586402366491436791599814e-24),</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> K(4.309390047550403478410330783891146603e-27),</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> K(1.555612957227921944637472907134242e-30),</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> K(3.9925388022711127965090640127e-34),</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> K(6.9368410036374068977799409e-38),</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> K(7.357454531748581565018e-42),</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> K(3.62204101214442072e-46),</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> };</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">static</span> <span class="keyword">const</span> R Q1[] =</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> {</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> K(1.000007070784273109528051454385187718969110645914059499666326971665),</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> K(-0.005313926453449002844879821442805584438144938596471790433918964154),</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> K(7.070788418542362565462155969863941136682888242514039780835548e-6),</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> K(-6.26540971437695808708857953483635930152829451235344028056e-9),</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> K(4.145433773149898726789014352388133793941127788810021957e-12),</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> K(-2.175603200497645955857316018087216481968512641548262e-15),</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> K(9.38635995876117135738708302122439402494096616172e-19),</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> K(-3.40237206590514988600833435986797066144532635e-22),</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> K(1.04920116497922307284730776882365699575587e-25),</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> K(-2.7669765371483918815184949580784634161e-29),</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> K(6.231564149372584873279011515844227e-33),</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> K(-1.188050982913851622946881814029e-36),</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> K(1.88293159106694034780937099e-40),</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> K(-2.4019827304263718078055e-44),</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> K(2.329008315410200325e-48),</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> K(-1.5351885198203e-52),</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> K(5.185989964e-57),</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> };</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">static</span> <span class="keyword">const</span> R P2[] =</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> {</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> K( 131.0667020533290798466779416062094395070734202211890460026693857),</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> K(-245.6303545941878773983069709370348347580041325639555236454969282),</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> K( 204.5101554148308448423458719550952945685069457114308003995567211),</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> K(-150.5327320302921153754033870344894598759293143264072490756636477),</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> K( 98.7912567249134681293252237328232822188103014960829409778733265),</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> K(-57.7019241687318590480852440271548151666166507997357208465833492),</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> K( 30.1081598594932287475081756049550869990287890532877175670317803),</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> K(-14.0088712491952531569334147267018927351724433165829632848926311),</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> K( 5.8111909743388254524987383393719023598144356156326152933831237),</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> K(-2.1414136626793476610653760169160704073350780611789294609123711),</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> K( 0.698259559703142895902111022926235616592885506170181809796723),</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> K(-0.2001189347807367129846000381714457873845590394096920427488356),</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> K( 0.049988621846192684047867347253361546337456980171441178625268),</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> K(-0.0107553807128048320349112565182564637746370430259714241685807),</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> K( 0.0019628478791093008488874963820323167136472914702684286586238),</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> K(-0.0002975064821201439959012839810796951490827490578144599267114),</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> K( 0.0000363948822068787975159479880539390140326476204059270500102),</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> K(-3.4500354506312803346122587812035952285744626406680126004e-6),</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> K( 2.389194163273735466736165111640837640682648262451843124e-7),</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> K(-1.10522228579658847710719851107420853059835206797979003e-8),</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> K( 2.998585735858447897961231663140456464729911623332484e-10),</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> K(-3.9833617558882606404645795329229040634928477778665e-12),</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> K( 1.92588438006565847602499920031655017544553574078e-14),</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> K(-1.53988141966712757209882685942469734803820881e-17)</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> };</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">static</span> <span class="keyword">const</span> R Q2[] =</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> K(328.4489907350967829456654595549647170421869780143590268003242948),</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> K(-615.575319575198219705670766725559477112082560070865403723416427),</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> K(512.563661235514015228169012911053008163272899480360140632585558),</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> K(-377.3415411557897134242242685951784724031156711312221525972796826),</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> K(247.6887960380354072297631204916926385047383091206925653242453925),</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> K(-144.7079367047916629699737294050207521413589574809430211064537016),</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> K(75.5300501439366128901130531145623549019791219037305096822646727),</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> K(-35.1562871183824787711155827433330019401972267325168728838283815),</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> K(14.5900995053625141158588399870084373879991873744753473985888771),</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> K(-5.3793167684795558315535956122846115342243771791771104555817078),</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> K(1.7551860916884001665224751521627837644140913167505738803593836),</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> K(-0.5034275191915128601243198185547065251560284487106213345738464),</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> K(0.1258761177781805904401665597080296597844219207555140252667602),</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> K(-0.0271165711067811527517031577204913417520417117202287079370524),</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> K(0.0049566968097755025323253093106955508273120444565853663949773),</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> K(-0.0007529042621964042565348473109633952383792675486716081916002),</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> K(0.0000923845012025941529926888028246088283227759969619552077927),</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> K(-8.7971061636613823628316954758674029940675792754742342069e-6),</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> K(6.136252042100256280345626781919643641626278378156829218e-7),</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> K(-2.87514497545628209951433938237642236070094379906239019e-8),</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> K(7.99982739755782677965258184972152681716223485333226e-10),</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> K(-1.12250050360331111260828032356887810736651792918878e-11),</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> K(6.221827386743849038481605158298006999161167883e-14),</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> K(-8.0950402455773560717067392049638116407074069e-17)</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> };</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="preprocessor"> #elif LDBL_MANT_DIG == 64</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="preprocessor"></span> <span class="comment">/* long double 96 bit wide */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">static</span> <span class="keyword">const</span> R P1[] =</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> {</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> K(1.00696388290874250231638626673686646317801154370159972703168538),</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> K(0.243352848727738955738908687369450214577920342918851509272408866),</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> K(0.006964401160721188186398281247079919082283450941469460164590432),</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> K(0.000083047334117897959145500056901191736030823531931380263686302),</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> K(5.18256420384764810882467760619532575731801821889985626099e-7),</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> K(1.90790611016475818883461118145629029943434891680660527e-9),</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> K(4.44170587990105074420754325358582895345307949815573e-12),</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> K(6.805150196466153819995090798791966304827558189423e-15),</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> K(6.985104315031938858779570788468047860794936128e-18),</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> K(4.785507068734939741097928056648844894386614e-21),</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> K(2.117077490896605677726199140622837572025e-24),</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> K(5.52919580174986488729896702518475621e-28),</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> K(6.5666588969169003434516942087381e-32),</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> };</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">static</span> <span class="keyword">const</span> R Q1[] =</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> {</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> K(1.000011863675914860400478598182318948452642744176732473923183795358),</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> K(-0.006896324225185339751945118908659032102601115341265224641280055928),</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> K(0.00001186368725103095674191039208189536570056102297912907572890034),</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> K(-1.3496696876875206170114218872940978330152830864048922600366e-8),</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> K(1.1336174449932022007831556161183407392648142591512923821e-11),</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> K(-7.422841655569707018644701823047396523966712871897812e-15),</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> K(3.893669273036094904159100761627937282479044304922e-18),</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> K(-1.651720545895290413869725701665259282787265642e-21),</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> K(5.6323805635535562808481781647661895955232e-25),</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> K(-1.50728066570923164846664348266414336373e-28),</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> K(3.006044492319661074666639642233229e-32),</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> K(-4.010148023149017379419706572721e-36),</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> K(2.70282874465984817539266054e-40),</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> };</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">static</span> <span class="keyword">const</span> R P2[] =</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> {</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> K( 1.30090423521760256476093919023146864017751590623897710895862681),</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> K(-1.981041925270972574120174940817336830170017871902975653312750388),</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> K( 0.956892580228917795561363651877698243164566364537052353014543669),</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> K(-0.295476285312266394050596510402082979039773201845265239542019439),</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> K( 0.056978837924988815165935230495950981635872574537538384147033652),</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> K(-0.006299149197554616295736173514236214970859775932020376086036399),</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> K( 0.000353716966863384475462973243411450895641022763240331882363443),</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> K(-8.707624424632528381900923003415938761710942641810978203625e-6),</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> K( 7.283705999222063845686558855093093825421931939071318202e-8),</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> K(-9.7967727386492889920273780071218382357131320542055799e-11)</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> };</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keyword">static</span> <span class="keyword">const</span> R Q2[] =</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> {</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> K( 3.257608431020108786259398271424889402309379351594793640349460063),</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> K(-4.96363276525502538609792324882976732173260916421950408693842731),</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> K( 2.400495835659089927333294199555080092801133193497330702140754591),</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> K(-0.742868968166381852162379299256973953894545292197384361382965225),</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> K( 0.143801810439830068463911726822151703498931831272162081681231077),</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> K(-0.016019224718850575023820322478614758671031103220377245057110662),</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> K( 0.000914623505897601721718970098041677534130323750396506936364887),</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> K(-0.000023411644633126949191317085153966622167096685843127825287574),</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> K( 2.17705048674331703171406080664526952334380771487046428339e-7),</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> K(-4.47580289731041130181939560179689655281441839562189718e-10)</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> };</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor"> #else</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="preprocessor"></span><span class="preprocessor"> #error Unsupported size of long double</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor"></span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(NFFT_SINGLE)</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor"></span> <span class="comment">/* float */</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">static</span> <span class="keyword">const</span> R P1[] =</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> {</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> K(1.006634511033311726164163027592274220828216885723379609007274761),</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> K(0.240606487720090757394176928596156553834296465200311569457994763),</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> K(0.006634921274522227156198202198389031672287220144321235665461021),</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> K(0.000073749622820821337100502174723273851941734199062726870961819),</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> K(4.10243517822171814488230564074819973544765129449450710122e-7),</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> K(1.262110026222369902633819303536802438120823461060572684e-9),</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> K(2.218532296437410634454463125960648541194468552527652e-12),</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> K(2.141504045536019682125761418851096299425878119158e-15),</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> K(9.19584570350722374435337612379408707845677156e-19),</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> };</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keyword">static</span> <span class="keyword">const</span> R Q1[] =</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> {</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> K(1.000022624782705275228334312456728477812835742762369533496905023937),</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> K(-0.009614857078745003693609489751018087358244444264456521971379273084),</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> K(0.000022624818652773047747424411495054891627754515915461183178099877),</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> K(-3.4080521639954323706277061786236961377055349443081338572762e-8),</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> K(3.5947512112800645225066705862453058797853924958888263259e-11),</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> K(-2.7149805873212658218594464017972758572144265290831215e-14),</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> K(1.4293388301569282795540255590126107486209476445158e-17),</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> K(-4.771887851505849942903948600229238419570937509e-21),</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> K(7.68298982666756594543081799488936861257839e-25),</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> };</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keyword">static</span> <span class="keyword">const</span> R P2[] =</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> {</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> K( 0.400758393969643840397216812932361963736749407866811083462461),</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> K(-0.0312216150704950438088565774064329777860642477326179964345542),</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> K( 0.0001215451718646727844117193541329442989170354233955281424116)</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> };</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keyword">static</span> <span class="keyword">const</span> R Q2[] =</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> {</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> K( 1.00043733569136882353241680221279480297575523819814430369272934),</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> K(-0.0822433017391967535749382764476705160129315137731445852657631),</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> K( 0.00043733569136882353241680221279480297575523819814430369272934)</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> };</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="preprocessor"></span> <span class="comment">/* double */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keyword">static</span> <span class="keyword">const</span> R P1[] =</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> {</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> K(1.006897990143384859657820271920512961153421109156614230747188622),</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> K(0.242805341483041870658834102275462978674549112393424086979586278),</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> K(0.006898486035482686938510112687043665965094733332210445239567379),</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> K(0.000081165067173822070066416843139523709162208390998449005642346),</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> K(4.95896034564955471201271060753697747487292805350402943964e-7),</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> K(1.769262324717844587819564151110983803173733141412266849e-9),</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> K(3.936742942676484111899247866083681245613312522754135e-12),</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> K(5.65030097981781148787580946077568408874044779529e-15),</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> K(5.267856044117588097078633338366456262960465052e-18),</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> K(3.111192981528832405775039015470693622536939e-21),</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> K(1.071238669051606108411504195862449904664e-24),</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> K(1.66685455020362122704904175079692613e-28),</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> };</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keyword">static</span> <span class="keyword">const</span> R Q1[] =</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> {</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> K(1.000013770640886533569435896302721489503868900260448440877422679934),</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> K(-0.007438195256024963574139196893944950727405523418354136393367554385),</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> K(0.000013770655915064256304772604385297068669909609091264440116789601),</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> K(-1.6794623118559896441239590667288215019925076196457659206142e-8),</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> K(1.50285363491992136130760477001818578470292828225498818e-11),</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> K(-1.0383232801211938342796582949062551517465351830706356e-14),</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> K(5.66233115275307483428203764087829782195312564006e-18),</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> K(-2.44062252162491829675666639093292109472275754e-21),</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> K(8.15441695513966815222186223740016719597617e-25),</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> K(-2.01117218503954384746303760121365911698e-28),</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> K(3.2919820158429806312377323449729691e-32),</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> K(-2.70343047912331415988664032397e-36),</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> };</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keyword">static</span> <span class="keyword">const</span> R P2[] =</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> {</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> K( 0.4305671332839579065931339658100499864903788418438938270811),</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> K(-0.2897224581554843285637983312103876003389911968369470222427),</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> K( 0.0299419330186508349765969995362253891383950029259740306077),</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> K(-0.0010756807437990349677633120240742396555192749710627626584),</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> K( 0.0000116485185631252780743187413946316104574410146692335443),</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> K(-1.89995137955806752293614125586568854200245376235433e-08)</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> };</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keyword">static</span> <span class="keyword">const</span> R Q2[] =</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> {</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> K(1.0762291019783101702628805159947862543863829764738274558421),</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> K(-0.7279167074883770739509279847502106137135422309409220238564),</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> K(0.0762629142282649564822465976300194596092279190843683614797),</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> K(-0.0028345107938479082322784040228834113914746923069059932628),</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> K(0.0000338122499547862193660816352332052228449426105409056376),</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> K(-8.28850093512263912295888947693700479250899073022595e-08)</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> };</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keyword">static</span> <span class="keyword">const</span> INT N1 = <span class="keyword">sizeof</span>(P1)/<span class="keyword">sizeof</span>(P1[0]);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keyword">static</span> <span class="keyword">const</span> INT M1 = <span class="keyword">sizeof</span>(Q1)/<span class="keyword">sizeof</span>(Q1[0]);</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keyword">static</span> <span class="keyword">const</span> INT N2 = <span class="keyword">sizeof</span>(P2)/<span class="keyword">sizeof</span>(P2[0]);</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keyword">static</span> <span class="keyword">const</span> INT M2 = <span class="keyword">sizeof</span>(Q2)/<span class="keyword">sizeof</span>(Q2[0]);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keyword">static</span> <span class="keyword">inline</span> R evaluate_chebyshev(<span class="keyword">const</span> INT n, <span class="keyword">const</span> R *c, <span class="keyword">const</span> R x)</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> {</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> R a = c[n-2], b = c[n-1], t;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> A(n >= 2);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">for</span> (j = n - 2; j > 0; j--)</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> {</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> t = c[j-1] - b;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> b = a + K(2.0) * x * b;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> a = t;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> }</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">return</span> a + x * b;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> }</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> R X(bessel_i0)(R x)</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> {</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">if</span> (x < 0)</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> {</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="comment">/* even function */</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> x = -x;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> }</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">if</span> (x == K(0.0))</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">return</span> K(1.0);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">if</span> (x <= K(15.0))</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> {</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="comment">/* x in (0, 15] */</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keyword">const</span> R y = x * x;</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">return</span> evaluate_chebyshev(N1, P1, y) / evaluate_chebyshev(M1, Q1, y);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> }</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> {</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment">/* x in (15, \infty) */</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keyword">const</span> R y = (K(30.0) - x) / x;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">return</span> (EXP(x) / SQRT(x)) * (evaluate_chebyshev(N2, P2, y) /</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> evaluate_chebyshev(M2, Q2, y));</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> }</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/classes.html b/doc/api/html/classes.html
new file mode 100644
index 0000000..ec08fce
--- /dev/null
+++ b/doc/api/html/classes.html
@@ -0,0 +1,74 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Structure Index
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Data Structure Index</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_F">F</a> | <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_M">M</a> | <a class="qindex" href="#letter_N">N</a> | <a class="qindex" href="#letter_S">S</a> | <a class="qindex" href="#letter_T">T</a> | <a class="qindex" href="#letter_W">W</a></div>
+<table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
+<tr><td rowspan="2" valign="bottom"><a name="letter_F"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> F </div></td></tr></table>
+</td><td valign="top"><a class="el" href="structinnfft__adjoint__plan.html">innfft_adjoint_plan</a> </td><td valign="top"><a class="el" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a> </td><td valign="top"><a class="el" href="structnfst__plan.html">nfst_plan</a> </td><td valign="top"><a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> </td></tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> M </div></td></tr></table>
+</td><td valign="top"><a class="el" href="structnfft__plan.html">nfft_plan</a> </td><td valign="top"><a class="el" href="structnfstf__plan.html">nfstf_plan</a> </td><td valign="top"><a class="el" href="structsolver__plan__double.html">solver_plan_double</a> </td></tr>
+<tr><td valign="top"><a class="el" href="structfastsum__plan__.html">fastsum_plan_</a> </td><td valign="top"><a class="el" href="structnfftf__mv__plan__complex.html">nfftf_mv_plan_complex</a> </td><td valign="top"><a class="el" href="structnfstl__plan.html">nfstl_plan</a> </td><td valign="top"><a class="el" href="structsolverf__plan__complex.html">solverf_plan_complex</a> </td></tr>
+<tr><td valign="top"><a class="el" href="structfgt__plan.html">fgt_plan</a> </td><td valign="top"><a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> </td><td valign="top"><a class="el" href="structnfftf__mv__plan__double.html">nfftf_mv_plan_double</a> </td><td valign="top"><a class="el" href="structnnfft__plan.html">nnfft_plan</a> </td><td valign="top"><a class="el" href="structsolverf__plan__doub [...]
+<tr><td valign="top"><a class="el" href="structfpt__data__.html">fpt_data_</a> </td><td valign="top"><a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> </td><td valign="top"><a class="el" href="structnfftf__plan.html">nfftf_plan</a> </td><td valign="top"><a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> </td><td valign="top"><a class="el" href="structsolverl__plan__complex.html">solverl_pla [...]
+<tr><td valign="top"><a class="el" href="structfpt__set__s__.html">fpt_set_s_</a> </td><td valign="top"><a class="el" href="structmrif__inh__2d1d__plan.html">mrif_inh_2d1d_plan</a> </td><td valign="top"><a class="el" href="structnfftl__mv__plan__complex.html">nfftl_mv_plan_complex</a> </td><td valign="top"><a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> </td><td valign="top"><a class="el" href="structsolverl [...]
+<tr><td valign="top"><a class="el" href="structfpt__step__.html">fpt_step_</a> </td><td valign="top"><a class="el" href="structmrif__inh__3d__plan.html">mrif_inh_3d_plan</a> </td><td valign="top"><a class="el" href="structnfftl__mv__plan__double.html">nfftl_mv_plan_double</a> </td><td valign="top"><a class="el" href="structnsfft__plan.html">nsfft_plan</a> </td><td rowspan="2" valign="bottom"><a name="letter_T"></a><table [...]
+</td></tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_I"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> I </div></td></tr></table>
+</td><td valign="top"><a class="el" href="structmril__inh__2d1d__plan.html">mril_inh_2d1d_plan</a> </td><td valign="top"><a class="el" href="structnfftl__plan.html">nfftl_plan</a> </td><td valign="top"><a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> </td></tr>
+<tr><td valign="top"><a class="el" href="structmril__inh__3d__plan.html">mril_inh_3d_plan</a> </td><td valign="top"><a class="el" href="structnfsft__plan.html">nfsft_plan</a> </td><td valign="top"><a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> </td><td valign="top"><a class="el" href="structtaylor__plan.html">taylor_plan</a> </td></tr>
+<tr><td valign="top"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html">imri_inh_2d1d_adjoint_plan</a> </td><td rowspan="2" valign="bottom"><a name="letter_N"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> N </div></td></tr></table>
+</td><td valign="top"><a class="el" href="structnfsft__wisdom.html">nfsft_wisdom</a> </td><td rowspan="2" valign="bottom"><a name="letter_S"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> S </div></td></tr></table>
+</td><td rowspan="2" valign="bottom"><a name="letter_W"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> W </div></td></tr></table>
+</td></tr>
+<tr><td valign="top"><a class="el" href="structimri__inh__3d__adjoint__plan.html">imri_inh_3d_adjoint_plan</a> </td><td valign="top"><a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> </td></tr>
+<tr><td valign="top"><a class="el" href="structinfct__adjoint__plan.html">infct_adjoint_plan</a> </td><td valign="top"><a class="el" href="structnfct__plan.html">nfct_plan</a> </td><td valign="top"><a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> </td><td valign="top"><a class="el" href="structs__param.html">s_param</a> </td><td valign="top"><a class="el" href="structwindow__funct__plan__.html">window_funct_p [...]
+<tr><td valign="top"><a class="el" href="structinfft__adjoint__plan.html">infft_adjoint_plan</a> </td><td valign="top"><a class="el" href="structnfctf__plan.html">nfctf_plan</a> </td><td valign="top"><a class="el" href="structnfsoft__plan__.html">nfsoft_plan_</a> </td><td valign="top"><a class="el" href="structs__result.html">s_result</a> </td><td></td></tr>
+<tr><td valign="top"><a class="el" href="structinfsft__adjoint__plan.html">infsft_adjoint_plan</a> </td><td valign="top"><a class="el" href="structnfctl__plan.html">nfctl_plan</a> </td><td valign="top"><a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan_</a> </td><td valign="top"><a class="el" href="structs__resval.html">s_resval</a> </td><td></td></tr>
+<tr><td valign="top"><a class="el" href="structinfst__adjoint__plan.html">infst_adjoint_plan</a> </td><td valign="top"><a class="el" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a> </td><td valign="top"><a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan_</a> </td><td valign="top"><a class="el" href="structs__testset.html">s_testset</a> </td><td></td></tr>
+<tr><td></td><td></td><td></td><td></td><td></td></tr>
+</table>
+<div class="qindex"><a class="qindex" href="#letter_F">F</a> | <a class="qindex" href="#letter_I">I</a> | <a class="qindex" href="#letter_M">M</a> | <a class="qindex" href="#letter_N">N</a> | <a class="qindex" href="#letter_S">S</a> | <a class="qindex" href="#letter_T">T</a> | <a class="qindex" href="#letter_W">W</a></div>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/closed.png b/doc/api/html/closed.png
new file mode 100644
index 0000000..98cc2c9
Binary files /dev/null and b/doc/api/html/closed.png differ
diff --git a/doc/api/html/config_8h_source.html b/doc/api/html/config_8h_source.html
new file mode 100644
index 0000000..660474d
--- /dev/null
+++ b/doc/api/html/config_8h_source.html
@@ -0,0 +1,2118 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - config.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">config.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/* include/config.h. Generated from config.h.in by configure. */</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">/* include/config.h.in. Generated from configure.ac by autoheader. */</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">/* Define to enable Dirac delta window function. */</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">/* #undef B_SPLINE */</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> systems. This function is required for `alloca.c' support on those systems.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">/* #undef CRAY_STACKSEG_END */</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">/* Define to 1 if using `alloca.c'. */</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">/* #undef C_ALLOCA */</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">/* Define to enable Gaussian window function. */</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">/* #undef GAUSSIAN */</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">/* Define to 1 if you have the `abort' function. */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#define HAVE_ABORT 1</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">/* Define to 1 if you have the `acos' function. */</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">/* #undef HAVE_ACOS */</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">/* Define to 1 if you have the `acosf' function. */</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">/* #undef HAVE_ACOSF */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">/* Define to 1 if you have the `acosh' function. */</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">/* #undef HAVE_ACOSH */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">/* Define to 1 if you have the `acoshf' function. */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">/* #undef HAVE_ACOSHF */</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">/* Define to 1 if you have the `acoshl' function. */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">/* #undef HAVE_ACOSHL */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment">/* Define to 1 if you have the `acosl' function. */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">/* #undef HAVE_ACOSL */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">/* Define to 1 if you have `alloca', as a function or macro. */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#define HAVE_ALLOCA 1</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment">/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#define HAVE_ALLOCA_H 1</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">/* Define to 1 if you have the `asin' function. */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment">/* #undef HAVE_ASIN */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment">/* Define to 1 if you have the `asinf' function. */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">/* #undef HAVE_ASINF */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment">/* Define to 1 if you have the `asinh' function. */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment">/* #undef HAVE_ASINH */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment">/* Define to 1 if you have the `asinhf' function. */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment">/* #undef HAVE_ASINHF */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">/* Define to 1 if you have the `asinhl' function. */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment">/* #undef HAVE_ASINHL */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment">/* Define to 1 if you have the `asinl' function. */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment">/* #undef HAVE_ASINL */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment">/* Define to 1 if you have the `atan' function. */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">/* #undef HAVE_ATAN */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment">/* Define to 1 if you have the `atan2' function. */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment">/* #undef HAVE_ATAN2 */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment">/* Define to 1 if you have the `atan2f' function. */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">/* #undef HAVE_ATAN2F */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">/* Define to 1 if you have the `atan2l' function. */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">/* #undef HAVE_ATAN2L */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">/* Define to 1 if you have the `atanf' function. */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment">/* #undef HAVE_ATANF */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">/* Define to 1 if you have the `atanh' function. */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment">/* #undef HAVE_ATANH */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment">/* Define to 1 if you have the `atanhf' function. */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment">/* #undef HAVE_ATANHF */</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment">/* Define to 1 if you have the `atanhl' function. */</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment">/* #undef HAVE_ATANHL */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment">/* Define to 1 if you have the `atanl' function. */</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment">/* #undef HAVE_ATANL */</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment">/* Define to 1 if you have the `cabs' function. */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment">/* #undef HAVE_CABS */</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment">/* Define to 1 if you have the `cabsf' function. */</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment">/* #undef HAVE_CABSF */</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">/* Define to 1 if you have the `cabsl' function. */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment">/* #undef HAVE_CABSL */</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment">/* Define to 1 if you have the `cacos' function. */</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment">/* #undef HAVE_CACOS */</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment">/* Define to 1 if you have the `cacosf' function. */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment">/* #undef HAVE_CACOSF */</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment">/* Define to 1 if you have the `cacosh' function. */</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment">/* #undef HAVE_CACOSH */</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment">/* Define to 1 if you have the `cacoshf' function. */</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment">/* #undef HAVE_CACOSHF */</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">/* Define to 1 if you have the `cacoshl' function. */</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment">/* #undef HAVE_CACOSHL */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment">/* Define to 1 if you have the `cacosl' function. */</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment">/* #undef HAVE_CACOSL */</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment">/* Define to 1 if you have the `carg' function. */</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment">/* #undef HAVE_CARG */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment">/* Define to 1 if you have the `cargf' function. */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment">/* #undef HAVE_CARGF */</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment">/* Define to 1 if you have the `cargl' function. */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment">/* #undef HAVE_CARGL */</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment">/* Define to 1 if you have the `casin' function. */</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment">/* #undef HAVE_CASIN */</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">/* Define to 1 if you have the `casinf' function. */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment">/* #undef HAVE_CASINF */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment">/* Define to 1 if you have the `casinh' function. */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment">/* #undef HAVE_CASINH */</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment">/* Define to 1 if you have the `casinhf' function. */</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment">/* #undef HAVE_CASINHF */</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment">/* Define to 1 if you have the `casinhl' function. */</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="comment">/* #undef HAVE_CASINHL */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment">/* Define to 1 if you have the `casinl' function. */</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment">/* #undef HAVE_CASINL */</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment">/* Define to 1 if you have the `catan' function. */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment">/* #undef HAVE_CATAN */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment">/* Define to 1 if you have the `catanf' function. */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="comment">/* #undef HAVE_CATANF */</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment">/* Define to 1 if you have the `catanh' function. */</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment">/* #undef HAVE_CATANH */</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment">/* Define to 1 if you have the `catanhf' function. */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment">/* #undef HAVE_CATANHF */</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment">/* Define to 1 if you have the `catanhl' function. */</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment">/* #undef HAVE_CATANHL */</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment">/* Define to 1 if you have the `catanl' function. */</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment">/* #undef HAVE_CATANL */</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="comment">/* Define to 1 if you have the `cbrt' function. */</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="comment">/* #undef HAVE_CBRT */</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="comment">/* Define to 1 if you have the `cbrtf' function. */</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="comment">/* #undef HAVE_CBRTF */</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment">/* Define to 1 if you have the `cbrtl' function. */</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment">/* #undef HAVE_CBRTL */</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment">/* Define to 1 if you have the `ccos' function. */</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment">/* #undef HAVE_CCOS */</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment">/* Define to 1 if you have the `ccosf' function. */</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment">/* #undef HAVE_CCOSF */</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment">/* Define to 1 if you have the `ccosh' function. */</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment">/* #undef HAVE_CCOSH */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment">/* Define to 1 if you have the `ccoshf' function. */</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment">/* #undef HAVE_CCOSHF */</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="comment">/* Define to 1 if you have the `ccoshl' function. */</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment">/* #undef HAVE_CCOSHL */</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="comment">/* Define to 1 if you have the `ccosl' function. */</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="comment">/* #undef HAVE_CCOSL */</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment">/* Define to 1 if you have the `ceil' function. */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="comment">/* #undef HAVE_CEIL */</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment">/* Define to 1 if you have the `ceilf' function. */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment">/* #undef HAVE_CEILF */</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment">/* Define to 1 if you have the `ceill' function. */</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="comment">/* #undef HAVE_CEILL */</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="comment">/* Define to 1 if you have the `cexp' function. */</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment">/* #undef HAVE_CEXP */</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment">/* Define to 1 if you have the `cexpf' function. */</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment">/* #undef HAVE_CEXPF */</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment">/* Define to 1 if you have the `cexpl' function. */</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment">/* #undef HAVE_CEXPL */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="comment">/* Define to 1 if you have the `cimag' function. */</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment">/* #undef HAVE_CIMAG */</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment">/* Define to 1 if you have the `cimagf' function. */</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="comment">/* #undef HAVE_CIMAGF */</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment">/* Define to 1 if you have the `cimagl' function. */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment">/* #undef HAVE_CIMAGL */</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="comment">/* Define to 1 if you have the `clock_gettime' function. */</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment">/* #undef HAVE_CLOCK_GETTIME */</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="comment">/* Define to 1 if you have the `clog' function. */</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment">/* #undef HAVE_CLOG */</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment">/* Define to 1 if you have the `clogf' function. */</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment">/* #undef HAVE_CLOGF */</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment">/* Define to 1 if you have the `clogl' function. */</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment">/* #undef HAVE_CLOGL */</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment">/* Define to 1 if you have the <complex.h> header file. */</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="preprocessor">#define HAVE_COMPLEX_H 1</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="comment">/* Define to 1 if you have the `conj' function. */</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="comment">/* #undef HAVE_CONJ */</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="comment">/* Define to 1 if you have the `conjf' function. */</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="comment">/* #undef HAVE_CONJF */</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment">/* Define to 1 if you have the `conjl' function. */</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment">/* #undef HAVE_CONJL */</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment">/* Define to 1 if you have the `copysign' function. */</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="preprocessor">#define HAVE_COPYSIGN 1</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="comment">/* Define to 1 if you have the `copysignf' function. */</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="comment">/* #undef HAVE_COPYSIGNF */</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="comment">/* Define to 1 if you have the `copysignl' function. */</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="comment">/* #undef HAVE_COPYSIGNL */</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="comment">/* Define to 1 if you have the `cos' function. */</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="comment">/* #undef HAVE_COS */</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="comment">/* Define to 1 if you have the `cosf' function. */</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="comment">/* #undef HAVE_COSF */</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="comment">/* Define to 1 if you have the `cosh' function. */</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="comment">/* #undef HAVE_COSH */</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="comment">/* Define to 1 if you have the `coshf' function. */</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="comment">/* #undef HAVE_COSHF */</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="comment">/* Define to 1 if you have the `coshl' function. */</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="comment">/* #undef HAVE_COSHL */</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="comment">/* Define to 1 if you have the `cosl' function. */</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="comment">/* #undef HAVE_COSL */</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="comment">/* Define to 1 if you have the `cpow' function. */</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="comment">/* #undef HAVE_CPOW */</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="comment">/* Define to 1 if you have the `cpowf' function. */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="comment">/* #undef HAVE_CPOWF */</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="comment">/* Define to 1 if you have the `cpowl' function. */</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="comment">/* #undef HAVE_CPOWL */</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="comment">/* Define to 1 if you have the `cproj' function. */</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="comment">/* #undef HAVE_CPROJ */</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="comment">/* Define to 1 if you have the `cprojf' function. */</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="comment">/* #undef HAVE_CPROJF */</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="comment">/* Define to 1 if you have the `cprojl' function. */</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment">/* #undef HAVE_CPROJL */</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="comment">/* Define to 1 if you have the `creal' function. */</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="comment">/* #undef HAVE_CREAL */</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="comment">/* Define to 1 if you have the `crealf' function. */</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="comment">/* #undef HAVE_CREALF */</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="comment">/* Define to 1 if you have the `creall' function. */</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="comment">/* #undef HAVE_CREALL */</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="comment">/* Define to 1 if you have the `csin' function. */</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="comment">/* #undef HAVE_CSIN */</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="comment">/* Define to 1 if you have the `csinf' function. */</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="comment">/* #undef HAVE_CSINF */</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="comment">/* Define to 1 if you have the `csinh' function. */</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="comment">/* #undef HAVE_CSINH */</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="comment">/* Define to 1 if you have the `csinhf' function. */</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="comment">/* #undef HAVE_CSINHF */</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="comment">/* Define to 1 if you have the `csinhl' function. */</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="comment">/* #undef HAVE_CSINHL */</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment">/* Define to 1 if you have the `csinl' function. */</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment">/* #undef HAVE_CSINL */</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment">/* Define to 1 if you have the `csqrt' function. */</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="comment">/* #undef HAVE_CSQRT */</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="comment">/* Define to 1 if you have the `csqrtf' function. */</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="comment">/* #undef HAVE_CSQRTF */</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="comment">/* Define to 1 if you have the `csqrtl' function. */</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="comment">/* #undef HAVE_CSQRTL */</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="comment">/* Define to 1 if you have the `ctan' function. */</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="comment">/* #undef HAVE_CTAN */</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="comment">/* Define to 1 if you have the `ctanf' function. */</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="comment">/* #undef HAVE_CTANF */</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="comment">/* Define to 1 if you have the `ctanh' function. */</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="comment">/* #undef HAVE_CTANH */</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="comment">/* Define to 1 if you have the `ctanhf' function. */</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="comment">/* #undef HAVE_CTANHF */</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="comment">/* Define to 1 if you have the `ctanhl' function. */</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="comment">/* #undef HAVE_CTANHL */</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="comment">/* Define to 1 if you have the `ctanl' function. */</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="comment">/* #undef HAVE_CTANL */</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="comment">/* Define to 1 if you have the <c_asm.h> header file. */</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="comment">/* #undef HAVE_C_ASM_H */</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="comment">/* Define to 1 if you have the declaration of `acos', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="preprocessor">#define HAVE_DECL_ACOS 1</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="comment">/* Define to 1 if you have the declaration of `acosf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="comment">/* #undef HAVE_DECL_ACOSF */</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="comment">/* Define to 1 if you have the declaration of `acosh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="preprocessor">#define HAVE_DECL_ACOSH 1</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="comment">/* Define to 1 if you have the declaration of `acoshf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="comment">/* #undef HAVE_DECL_ACOSHF */</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="comment">/* Define to 1 if you have the declaration of `acoshl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="comment">/* #undef HAVE_DECL_ACOSHL */</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="comment">/* Define to 1 if you have the declaration of `acosl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="comment">/* #undef HAVE_DECL_ACOSL */</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="comment">/* Define to 1 if you have the declaration of `asin', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="preprocessor">#define HAVE_DECL_ASIN 1</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="comment">/* Define to 1 if you have the declaration of `asinf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="comment">/* #undef HAVE_DECL_ASINF */</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="comment">/* Define to 1 if you have the declaration of `asinh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="preprocessor">#define HAVE_DECL_ASINH 1</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="comment">/* Define to 1 if you have the declaration of `asinhf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="comment">/* #undef HAVE_DECL_ASINHF */</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="comment">/* Define to 1 if you have the declaration of `asinhl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="comment">/* #undef HAVE_DECL_ASINHL */</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="comment">/* Define to 1 if you have the declaration of `asinl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="comment">/* #undef HAVE_DECL_ASINL */</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="comment">/* Define to 1 if you have the declaration of `atan', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="preprocessor">#define HAVE_DECL_ATAN 1</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="comment">/* Define to 1 if you have the declaration of `atan2', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="preprocessor">#define HAVE_DECL_ATAN2 1</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="comment">/* Define to 1 if you have the declaration of `atan2f', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="comment">/* #undef HAVE_DECL_ATAN2F */</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="comment">/* Define to 1 if you have the declaration of `atan2l', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="comment">/* #undef HAVE_DECL_ATAN2L */</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="comment">/* Define to 1 if you have the declaration of `atanf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="comment">/* #undef HAVE_DECL_ATANF */</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="comment">/* Define to 1 if you have the declaration of `atanh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor">#define HAVE_DECL_ATANH 1</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="comment">/* Define to 1 if you have the declaration of `atanhf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="comment">/* #undef HAVE_DECL_ATANHF */</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="comment">/* Define to 1 if you have the declaration of `atanhl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="comment">/* #undef HAVE_DECL_ATANHL */</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="comment">/* Define to 1 if you have the declaration of `atanl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="comment">/* #undef HAVE_DECL_ATANL */</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="comment">/* Define to 1 if you have the declaration of `cabs', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="preprocessor">#define HAVE_DECL_CABS 1</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="comment">/* Define to 1 if you have the declaration of `cabsl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="comment">/* #undef HAVE_DECL_CABSL */</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="comment">/* Define to 1 if you have the declaration of `cacos', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="preprocessor">#define HAVE_DECL_CACOS 1</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="comment">/* Define to 1 if you have the declaration of `cacosf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="comment">/* #undef HAVE_DECL_CACOSF */</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="comment">/* Define to 1 if you have the declaration of `cacosh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="preprocessor">#define HAVE_DECL_CACOSH 1</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="comment">/* Define to 1 if you have the declaration of `cacoshf', and to 0 if you</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="comment">/* #undef HAVE_DECL_CACOSHF */</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="comment">/* Define to 1 if you have the declaration of `cacoshl', and to 0 if you</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="comment">/* #undef HAVE_DECL_CACOSHL */</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="comment">/* Define to 1 if you have the declaration of `cacosl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="comment">/* #undef HAVE_DECL_CACOSL */</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="comment">/* Define to 1 if you have the declaration of `carg', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="preprocessor">#define HAVE_DECL_CARG 1</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="comment">/* Define to 1 if you have the declaration of `cargf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="comment">/* #undef HAVE_DECL_CARGF */</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="comment">/* Define to 1 if you have the declaration of `cargl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="comment">/* #undef HAVE_DECL_CARGL */</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="comment">/* Define to 1 if you have the declaration of `casin', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor">#define HAVE_DECL_CASIN 1</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="comment">/* Define to 1 if you have the declaration of `casinf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="comment">/* #undef HAVE_DECL_CASINF */</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="comment">/* Define to 1 if you have the declaration of `casinh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="preprocessor">#define HAVE_DECL_CASINH 1</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="comment">/* Define to 1 if you have the declaration of `casinhf', and to 0 if you</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="comment">/* #undef HAVE_DECL_CASINHF */</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="comment">/* Define to 1 if you have the declaration of `casinhl', and to 0 if you</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="comment">/* #undef HAVE_DECL_CASINHL */</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> </div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="comment">/* Define to 1 if you have the declaration of `casinl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="comment">/* #undef HAVE_DECL_CASINL */</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="comment">/* Define to 1 if you have the declaration of `catan', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="preprocessor">#define HAVE_DECL_CATAN 1</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="comment">/* Define to 1 if you have the declaration of `catanf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="comment">/* #undef HAVE_DECL_CATANF */</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="comment">/* Define to 1 if you have the declaration of `catanh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="preprocessor">#define HAVE_DECL_CATANH 1</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="comment">/* Define to 1 if you have the declaration of `catanhf', and to 0 if you</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="comment">/* #undef HAVE_DECL_CATANHF */</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="comment">/* Define to 1 if you have the declaration of `catanhl', and to 0 if you</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="comment">/* #undef HAVE_DECL_CATANHL */</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="comment">/* Define to 1 if you have the declaration of `catanl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="comment">/* #undef HAVE_DECL_CATANL */</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="comment">/* Define to 1 if you have the declaration of `cbrt', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="preprocessor">#define HAVE_DECL_CBRT 1</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="comment">/* Define to 1 if you have the declaration of `cbrtf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="comment">/* #undef HAVE_DECL_CBRTF */</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="comment">/* Define to 1 if you have the declaration of `cbrtl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="comment">/* #undef HAVE_DECL_CBRTL */</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="comment">/* Define to 1 if you have the declaration of `ccos', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="preprocessor">#define HAVE_DECL_CCOS 1</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="comment">/* Define to 1 if you have the declaration of `ccosf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="comment">/* #undef HAVE_DECL_CCOSF */</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="comment">/* Define to 1 if you have the declaration of `ccosh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="preprocessor">#define HAVE_DECL_CCOSH 1</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="comment">/* Define to 1 if you have the declaration of `ccoshf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="comment">/* #undef HAVE_DECL_CCOSHF */</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="comment">/* Define to 1 if you have the declaration of `ccoshl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="comment">/* #undef HAVE_DECL_CCOSHL */</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="comment">/* Define to 1 if you have the declaration of `ccosl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="comment">/* #undef HAVE_DECL_CCOSL */</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> </div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="comment">/* Define to 1 if you have the declaration of `ceil', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="preprocessor">#define HAVE_DECL_CEIL 1</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="comment">/* Define to 1 if you have the declaration of `ceilf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="comment">/* #undef HAVE_DECL_CEILF */</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="comment">/* Define to 1 if you have the declaration of `ceill', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="comment">/* #undef HAVE_DECL_CEILL */</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="comment">/* Define to 1 if you have the declaration of `cexp', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="preprocessor">#define HAVE_DECL_CEXP 1</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="comment">/* Define to 1 if you have the declaration of `cexpf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="comment">/* #undef HAVE_DECL_CEXPF */</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="comment">/* Define to 1 if you have the declaration of `cexpl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="comment">/* #undef HAVE_DECL_CEXPL */</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="comment">/* Define to 1 if you have the declaration of `cimag', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="preprocessor">#define HAVE_DECL_CIMAG 1</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="comment">/* Define to 1 if you have the declaration of `cimagf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="comment">/* #undef HAVE_DECL_CIMAGF */</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="comment">/* Define to 1 if you have the declaration of `cimagl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="comment">/* #undef HAVE_DECL_CIMAGL */</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> </div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="comment">/* Define to 1 if you have the declaration of `clog', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="preprocessor">#define HAVE_DECL_CLOG 1</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="comment">/* Define to 1 if you have the declaration of `clogf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="comment">/* #undef HAVE_DECL_CLOGF */</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="comment">/* Define to 1 if you have the declaration of `clogl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="comment">/* #undef HAVE_DECL_CLOGL */</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="comment">/* Define to 1 if you have the declaration of `conj', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="preprocessor">#define HAVE_DECL_CONJ 1</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="comment">/* Define to 1 if you have the declaration of `conjf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="comment">/* #undef HAVE_DECL_CONJF */</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> </div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="comment">/* Define to 1 if you have the declaration of `conjl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="comment">/* #undef HAVE_DECL_CONJL */</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> </div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="comment">/* Define to 1 if you have the declaration of `copysign', and to 0 if you</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="preprocessor">#define HAVE_DECL_COPYSIGN 1</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="comment">/* Define to 1 if you have the declaration of `copysignf', and to 0 if you</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="comment">/* #undef HAVE_DECL_COPYSIGNF */</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="comment">/* Define to 1 if you have the declaration of `copysignl', and to 0 if you</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="comment">/* #undef HAVE_DECL_COPYSIGNL */</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> </div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="comment">/* Define to 1 if you have the declaration of `cos', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="preprocessor">#define HAVE_DECL_COS 1</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="comment">/* Define to 1 if you have the declaration of `cosf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="comment">/* #undef HAVE_DECL_COSF */</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> </div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="comment">/* Define to 1 if you have the declaration of `cosh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="preprocessor">#define HAVE_DECL_COSH 1</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="comment">/* Define to 1 if you have the declaration of `coshf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="comment">/* #undef HAVE_DECL_COSHF */</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="comment">/* Define to 1 if you have the declaration of `coshl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="comment">/* #undef HAVE_DECL_COSHL */</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> </div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="comment">/* Define to 1 if you have the declaration of `cosl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="comment">/* #undef HAVE_DECL_COSL */</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> </div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="comment">/* Define to 1 if you have the declaration of `cpow', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="preprocessor">#define HAVE_DECL_CPOW 1</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="comment">/* Define to 1 if you have the declaration of `cpowf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="comment">/* #undef HAVE_DECL_CPOWF */</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> </div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="comment">/* Define to 1 if you have the declaration of `cpowl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="comment">/* #undef HAVE_DECL_CPOWL */</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="comment">/* Define to 1 if you have the declaration of `cproj', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="preprocessor">#define HAVE_DECL_CPROJ 1</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="comment">/* Define to 1 if you have the declaration of `cprojf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="comment">/* #undef HAVE_DECL_CPROJF */</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> </div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="comment">/* Define to 1 if you have the declaration of `cprojl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="comment">/* #undef HAVE_DECL_CPROJL */</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> </div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="comment">/* Define to 1 if you have the declaration of `creal', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="preprocessor">#define HAVE_DECL_CREAL 1</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="comment">/* Define to 1 if you have the declaration of `crealf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="comment">/* #undef HAVE_DECL_CREALF */</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> </div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="comment">/* Define to 1 if you have the declaration of `creall', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="comment">/* #undef HAVE_DECL_CREALL */</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="comment">/* Define to 1 if you have the declaration of `csin', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="preprocessor">#define HAVE_DECL_CSIN 1</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="comment">/* Define to 1 if you have the declaration of `csinf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="comment">/* #undef HAVE_DECL_CSINF */</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="comment">/* Define to 1 if you have the declaration of `csinh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="preprocessor">#define HAVE_DECL_CSINH 1</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="comment">/* Define to 1 if you have the declaration of `csinhf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <span class="comment">/* #undef HAVE_DECL_CSINHF */</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> </div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="comment">/* Define to 1 if you have the declaration of `csinhl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="comment">/* #undef HAVE_DECL_CSINHL */</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> </div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="comment">/* Define to 1 if you have the declaration of `csinl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="comment">/* #undef HAVE_DECL_CSINL */</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> </div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="comment">/* Define to 1 if you have the declaration of `csqrt', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="preprocessor">#define HAVE_DECL_CSQRT 1</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="comment">/* Define to 1 if you have the declaration of `csqrtf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="comment">/* #undef HAVE_DECL_CSQRTF */</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> </div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="comment">/* Define to 1 if you have the declaration of `csqrtl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="comment">/* #undef HAVE_DECL_CSQRTL */</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="comment">/* Define to 1 if you have the declaration of `ctan', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="preprocessor">#define HAVE_DECL_CTAN 1</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="comment">/* Define to 1 if you have the declaration of `ctanf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="comment">/* #undef HAVE_DECL_CTANF */</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> </div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="comment">/* Define to 1 if you have the declaration of `ctanh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="preprocessor">#define HAVE_DECL_CTANH 1</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="comment">/* Define to 1 if you have the declaration of `ctanhf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="comment">/* #undef HAVE_DECL_CTANHF */</span></div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> </div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> <span class="comment">/* Define to 1 if you have the declaration of `ctanhl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="comment">/* #undef HAVE_DECL_CTANHL */</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> </div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="comment">/* Define to 1 if you have the declaration of `ctanl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <span class="comment">/* #undef HAVE_DECL_CTANL */</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="comment">/* Define to 1 if you have the declaration of `drand48', and to 0 if you</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="preprocessor">#define HAVE_DECL_DRAND48 1</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <span class="comment">/* Define to 1 if you have the declaration of `erf', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="preprocessor">#define HAVE_DECL_ERF 1</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="comment">/* Define to 1 if you have the declaration of `erfc', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="preprocessor">#define HAVE_DECL_ERFC 1</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="comment">/* Define to 1 if you have the declaration of `erfcf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <span class="comment">/* #undef HAVE_DECL_ERFCF */</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> </div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="comment">/* Define to 1 if you have the declaration of `erfcl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="comment">/* #undef HAVE_DECL_ERFCL */</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> </div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="comment">/* Define to 1 if you have the declaration of `erff', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="comment">/* #undef HAVE_DECL_ERFF */</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> </div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="comment">/* Define to 1 if you have the declaration of `erfl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="comment">/* #undef HAVE_DECL_ERFL */</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> </div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="comment">/* Define to 1 if you have the declaration of `exp', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="preprocessor">#define HAVE_DECL_EXP 1</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="comment">/* Define to 1 if you have the declaration of `exp2', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <span class="preprocessor">#define HAVE_DECL_EXP2 1</span></div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> <span class="comment">/* Define to 1 if you have the declaration of `exp2f', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="comment">/* #undef HAVE_DECL_EXP2F */</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> </div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="comment">/* Define to 1 if you have the declaration of `exp2l', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="comment">/* #undef HAVE_DECL_EXP2L */</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> </div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> <span class="comment">/* Define to 1 if you have the declaration of `expf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="comment">/* #undef HAVE_DECL_EXPF */</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> </div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="comment">/* Define to 1 if you have the declaration of `expl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="comment">/* #undef HAVE_DECL_EXPL */</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> </div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="comment">/* Define to 1 if you have the declaration of `expm1', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="preprocessor">#define HAVE_DECL_EXPM1 1</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> <span class="comment">/* Define to 1 if you have the declaration of `expm1f', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="comment">/* #undef HAVE_DECL_EXPM1F */</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> </div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="comment">/* Define to 1 if you have the declaration of `expm1l', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> <span class="comment">/* #undef HAVE_DECL_EXPM1L */</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> </div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="comment">/* Define to 1 if you have the declaration of `fabs', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="preprocessor">#define HAVE_DECL_FABS 1</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> <span class="comment">/* Define to 1 if you have the declaration of `fabsf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> <span class="comment">/* #undef HAVE_DECL_FABSF */</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> </div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> <span class="comment">/* Define to 1 if you have the declaration of `fabsl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> <span class="comment">/* #undef HAVE_DECL_FABSL */</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> </div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> <span class="comment">/* Define to 1 if you have the declaration of `fdim', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="preprocessor">#define HAVE_DECL_FDIM 1</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="comment">/* Define to 1 if you have the declaration of `fdimf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="comment">/* #undef HAVE_DECL_FDIMF */</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> </div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> <span class="comment">/* Define to 1 if you have the declaration of `fdiml', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> <span class="comment">/* #undef HAVE_DECL_FDIML */</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> </div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> <span class="comment">/* Define to 1 if you have the declaration of `floor', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="preprocessor">#define HAVE_DECL_FLOOR 1</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="comment">/* Define to 1 if you have the declaration of `floorf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> <span class="comment">/* #undef HAVE_DECL_FLOORF */</span></div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> </div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> <span class="comment">/* Define to 1 if you have the declaration of `floorl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> <span class="comment">/* #undef HAVE_DECL_FLOORL */</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> </div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> <span class="comment">/* Define to 1 if you have the declaration of `fma', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="preprocessor">#define HAVE_DECL_FMA 1</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="comment">/* Define to 1 if you have the declaration of `fmaf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="comment">/* #undef HAVE_DECL_FMAF */</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> </div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> <span class="comment">/* Define to 1 if you have the declaration of `fmal', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="comment">/* #undef HAVE_DECL_FMAL */</span></div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> </div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> <span class="comment">/* Define to 1 if you have the declaration of `fmax', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> <span class="preprocessor">#define HAVE_DECL_FMAX 1</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> <span class="comment">/* Define to 1 if you have the declaration of `fmaxf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> <span class="comment">/* #undef HAVE_DECL_FMAXF */</span></div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> </div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <span class="comment">/* Define to 1 if you have the declaration of `fmaxl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> <span class="comment">/* #undef HAVE_DECL_FMAXL */</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> </div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> <span class="comment">/* Define to 1 if you have the declaration of `fmin', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <span class="preprocessor">#define HAVE_DECL_FMIN 1</span></div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> <span class="comment">/* Define to 1 if you have the declaration of `fminf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="comment">/* #undef HAVE_DECL_FMINF */</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <span class="comment">/* Define to 1 if you have the declaration of `fminl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> <span class="comment">/* #undef HAVE_DECL_FMINL */</span></div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> </div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> <span class="comment">/* Define to 1 if you have the declaration of `fmod', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="preprocessor">#define HAVE_DECL_FMOD 1</span></div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="comment">/* Define to 1 if you have the declaration of `fmodf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="comment">/* #undef HAVE_DECL_FMODF */</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> </div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <span class="comment">/* Define to 1 if you have the declaration of `fmodl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> <span class="comment">/* #undef HAVE_DECL_FMODL */</span></div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="comment">/* Define to 1 if you have the declaration of `frexp', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <span class="preprocessor">#define HAVE_DECL_FREXP 1</span></div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> <span class="comment">/* Define to 1 if you have the declaration of `frexpf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> <span class="comment">/* #undef HAVE_DECL_FREXPF */</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="comment">/* Define to 1 if you have the declaration of `frexpl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="comment">/* #undef HAVE_DECL_FREXPL */</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> </div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="comment">/* Define to 1 if you have the declaration of `hypot', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="preprocessor">#define HAVE_DECL_HYPOT 1</span></div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="comment">/* Define to 1 if you have the declaration of `hypotf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="comment">/* #undef HAVE_DECL_HYPOTF */</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> </div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> <span class="comment">/* Define to 1 if you have the declaration of `hypotl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="comment">/* #undef HAVE_DECL_HYPOTL */</span></div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> </div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> <span class="comment">/* Define to 1 if you have the declaration of `ilogb', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <span class="preprocessor">#define HAVE_DECL_ILOGB 1</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="comment">/* Define to 1 if you have the declaration of `ilogbf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="comment">/* #undef HAVE_DECL_ILOGBF */</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> </div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="comment">/* Define to 1 if you have the declaration of `ilogbl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <span class="comment">/* #undef HAVE_DECL_ILOGBL */</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> </div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="comment">/* Define to 1 if you have the declaration of `j0', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <span class="preprocessor">#define HAVE_DECL_J0 1</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> <span class="comment">/* Define to 1 if you have the declaration of `j0f', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> <span class="comment">/* #undef HAVE_DECL_J0F */</span></div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> </div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> <span class="comment">/* Define to 1 if you have the declaration of `j0l', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> <span class="comment">/* #undef HAVE_DECL_J0L */</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> </div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> <span class="comment">/* Define to 1 if you have the declaration of `j1', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> <span class="preprocessor">#define HAVE_DECL_J1 1</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> <span class="comment">/* Define to 1 if you have the declaration of `j1f', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="comment">/* #undef HAVE_DECL_J1F */</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> </div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="comment">/* Define to 1 if you have the declaration of `j1l', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="comment">/* #undef HAVE_DECL_J1L */</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> </div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> <span class="comment">/* Define to 1 if you have the declaration of `jn', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <span class="preprocessor">#define HAVE_DECL_JN 1</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="comment">/* Define to 1 if you have the declaration of `jnf', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> <span class="comment">/* #undef HAVE_DECL_JNF */</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> </div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> <span class="comment">/* Define to 1 if you have the declaration of `jnl', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> <span class="comment">/* #undef HAVE_DECL_JNL */</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> </div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> <span class="comment">/* Define to 1 if you have the declaration of `ldexp', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> <span class="preprocessor">#define HAVE_DECL_LDEXP 1</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="comment">/* Define to 1 if you have the declaration of `ldexpf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="comment">/* #undef HAVE_DECL_LDEXPF */</span></div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> </div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> <span class="comment">/* Define to 1 if you have the declaration of `ldexpl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> <span class="comment">/* #undef HAVE_DECL_LDEXPL */</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> </div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="comment">/* Define to 1 if you have the declaration of `lgamma', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> <span class="preprocessor">#define HAVE_DECL_LGAMMA 1</span></div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> <span class="comment">/* Define to 1 if you have the declaration of `lgammaf', and to 0 if you</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> <span class="comment">/* #undef HAVE_DECL_LGAMMAF */</span></div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="comment">/* Define to 1 if you have the declaration of `lgammal', and to 0 if you</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="comment">/* #undef HAVE_DECL_LGAMMAL */</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> </div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> <span class="comment">/* Define to 1 if you have the declaration of `llrint', and to 0 if you don't.</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="preprocessor">#define HAVE_DECL_LLRINT 1</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="comment">/* Define to 1 if you have the declaration of `llrintf', and to 0 if you</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> <span class="comment">/* #undef HAVE_DECL_LLRINTF */</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> </div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="comment">/* Define to 1 if you have the declaration of `llrintl', and to 0 if you</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <span class="comment">/* #undef HAVE_DECL_LLRINTL */</span></div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> </div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <span class="comment">/* Define to 1 if you have the declaration of `llround', and to 0 if you</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="preprocessor">#define HAVE_DECL_LLROUND 1</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> <span class="comment">/* Define to 1 if you have the declaration of `llroundf', and to 0 if you</span></div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> <span class="comment">/* #undef HAVE_DECL_LLROUNDF */</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> </div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> <span class="comment">/* Define to 1 if you have the declaration of `llroundl', and to 0 if you</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="comment">/* #undef HAVE_DECL_LLROUNDL */</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> </div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="comment">/* Define to 1 if you have the declaration of `log', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="preprocessor">#define HAVE_DECL_LOG 1</span></div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="comment">/* Define to 1 if you have the declaration of `log10', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> <span class="preprocessor">#define HAVE_DECL_LOG10 1</span></div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="comment">/* Define to 1 if you have the declaration of `log10f', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="comment">/* #undef HAVE_DECL_LOG10F */</span></div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="comment">/* Define to 1 if you have the declaration of `log10l', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="comment">/* #undef HAVE_DECL_LOG10L */</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> </div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> <span class="comment">/* Define to 1 if you have the declaration of `log1p', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="preprocessor">#define HAVE_DECL_LOG1P 1</span></div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="comment">/* Define to 1 if you have the declaration of `log1pf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="comment">/* #undef HAVE_DECL_LOG1PF */</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> </div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="comment">/* Define to 1 if you have the declaration of `log1pl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="comment">/* #undef HAVE_DECL_LOG1PL */</span></div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> </div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="comment">/* Define to 1 if you have the declaration of `log2', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="preprocessor">#define HAVE_DECL_LOG2 1</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> <span class="comment">/* Define to 1 if you have the declaration of `log2f', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="comment">/* #undef HAVE_DECL_LOG2F */</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="comment">/* Define to 1 if you have the declaration of `log2l', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <span class="comment">/* #undef HAVE_DECL_LOG2L */</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> </div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> <span class="comment">/* Define to 1 if you have the declaration of `logb', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="preprocessor">#define HAVE_DECL_LOGB 1</span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="comment">/* Define to 1 if you have the declaration of `logbf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="comment">/* #undef HAVE_DECL_LOGBF */</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> </div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <span class="comment">/* Define to 1 if you have the declaration of `logbl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> <span class="comment">/* #undef HAVE_DECL_LOGBL */</span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> </div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="comment">/* Define to 1 if you have the declaration of `logf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="comment">/* #undef HAVE_DECL_LOGF */</span></div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> </div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <span class="comment">/* Define to 1 if you have the declaration of `logl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="comment">/* #undef HAVE_DECL_LOGL */</span></div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> </div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="comment">/* Define to 1 if you have the declaration of `lrint', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> <span class="preprocessor">#define HAVE_DECL_LRINT 1</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="comment">/* Define to 1 if you have the declaration of `lrintf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="comment">/* #undef HAVE_DECL_LRINTF */</span></div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> </div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="comment">/* Define to 1 if you have the declaration of `lrintl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="comment">/* #undef HAVE_DECL_LRINTL */</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> </div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> <span class="comment">/* Define to 1 if you have the declaration of `lround', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="preprocessor">#define HAVE_DECL_LROUND 1</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="comment">/* Define to 1 if you have the declaration of `lroundf', and to 0 if you</span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="comment">/* #undef HAVE_DECL_LROUNDF */</span></div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> <span class="comment">/* Define to 1 if you have the declaration of `lroundl', and to 0 if you</span></div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="comment">/* #undef HAVE_DECL_LROUNDL */</span></div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> </div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> <span class="comment">/* Define to 1 if you have the declaration of `memalign', and to 0 if you</span></div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="preprocessor">#define HAVE_DECL_MEMALIGN 0</span></div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="comment">/* Define to 1 if you have the declaration of `modf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="preprocessor">#define HAVE_DECL_MODF 1</span></div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> <span class="comment">/* Define to 1 if you have the declaration of `modff', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="comment">/* #undef HAVE_DECL_MODFF */</span></div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> </div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> <span class="comment">/* Define to 1 if you have the declaration of `modfl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="comment">/* #undef HAVE_DECL_MODFL */</span></div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> </div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> <span class="comment">/* Define to 1 if you have the declaration of `nan', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> <span class="preprocessor">#define HAVE_DECL_NAN 1</span></div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> <span class="comment">/* Define to 1 if you have the declaration of `nanf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> <span class="comment">/* #undef HAVE_DECL_NANF */</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> </div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="comment">/* Define to 1 if you have the declaration of `nanl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="comment">/* #undef HAVE_DECL_NANL */</span></div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> </div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> <span class="comment">/* Define to 1 if you have the declaration of `nanosleep', and to 0 if you</span></div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="preprocessor">#define HAVE_DECL_NANOSLEEP 1</span></div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> <span class="comment">/* Define to 1 if you have the declaration of `nearbyint', and to 0 if you</span></div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> <span class="preprocessor">#define HAVE_DECL_NEARBYINT 1</span></div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <span class="comment">/* Define to 1 if you have the declaration of `nearbyintf', and to 0 if you</span></div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> <span class="comment">/* #undef HAVE_DECL_NEARBYINTF */</span></div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> </div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> <span class="comment">/* Define to 1 if you have the declaration of `nearbyintl', and to 0 if you</span></div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="comment">/* #undef HAVE_DECL_NEARBYINTL */</span></div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> </div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> <span class="comment">/* Define to 1 if you have the declaration of `nextafter', and to 0 if you</span></div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> <span class="preprocessor">#define HAVE_DECL_NEXTAFTER 1</span></div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> <span class="comment">/* Define to 1 if you have the declaration of `nextafterf', and to 0 if you</span></div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="comment">/* #undef HAVE_DECL_NEXTAFTERF */</span></div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> </div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <span class="comment">/* Define to 1 if you have the declaration of `nextafterl', and to 0 if you</span></div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> <span class="comment">/* #undef HAVE_DECL_NEXTAFTERL */</span></div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> </div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> <span class="comment">/* Define to 1 if you have the declaration of `posix_memalign', and to 0 if</span></div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> <span class="comment"> you don't. */</span></div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> <span class="preprocessor">#define HAVE_DECL_POSIX_MEMALIGN 1</span></div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> <span class="comment">/* Define to 1 if you have the declaration of `pow', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> <span class="preprocessor">#define HAVE_DECL_POW 1</span></div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="comment">/* Define to 1 if you have the declaration of `powf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="comment">/* #undef HAVE_DECL_POWF */</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> </div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> <span class="comment">/* Define to 1 if you have the declaration of `powl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="comment">/* #undef HAVE_DECL_POWL */</span></div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> </div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="comment">/* Define to 1 if you have the declaration of `remainder', and to 0 if you</span></div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="preprocessor">#define HAVE_DECL_REMAINDER 1</span></div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="comment">/* Define to 1 if you have the declaration of `remainderf', and to 0 if you</span></div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> <span class="comment">/* #undef HAVE_DECL_REMAINDERF */</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> </div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> <span class="comment">/* Define to 1 if you have the declaration of `remainderl', and to 0 if you</span></div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> <span class="comment">/* #undef HAVE_DECL_REMAINDERL */</span></div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> </div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> <span class="comment">/* Define to 1 if you have the declaration of `remquo', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="preprocessor">#define HAVE_DECL_REMQUO 1</span></div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="comment">/* Define to 1 if you have the declaration of `remquof', and to 0 if you</span></div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="comment">/* #undef HAVE_DECL_REMQUOF */</span></div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> </div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> <span class="comment">/* Define to 1 if you have the declaration of `remquol', and to 0 if you</span></div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="comment">/* #undef HAVE_DECL_REMQUOL */</span></div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> </div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="comment">/* Define to 1 if you have the declaration of `rint', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="preprocessor">#define HAVE_DECL_RINT 1</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="comment">/* Define to 1 if you have the declaration of `rintf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="comment">/* #undef HAVE_DECL_RINTF */</span></div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> </div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> <span class="comment">/* Define to 1 if you have the declaration of `rintl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <span class="comment">/* #undef HAVE_DECL_RINTL */</span></div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> </div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <span class="comment">/* Define to 1 if you have the declaration of `round', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> <span class="preprocessor">#define HAVE_DECL_ROUND 1</span></div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <span class="comment">/* Define to 1 if you have the declaration of `roundf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <span class="comment">/* #undef HAVE_DECL_ROUNDF */</span></div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> </div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="comment">/* Define to 1 if you have the declaration of `roundl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="comment">/* #undef HAVE_DECL_ROUNDL */</span></div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> </div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> <span class="comment">/* Define to 1 if you have the declaration of `scalbln', and to 0 if you</span></div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="preprocessor">#define HAVE_DECL_SCALBLN 1</span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="comment">/* Define to 1 if you have the declaration of `scalblnf', and to 0 if you</span></div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> <span class="comment">/* #undef HAVE_DECL_SCALBLNF */</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> </div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> <span class="comment">/* Define to 1 if you have the declaration of `scalblnl', and to 0 if you</span></div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="comment">/* #undef HAVE_DECL_SCALBLNL */</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> </div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="comment">/* Define to 1 if you have the declaration of `scalbn', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="preprocessor">#define HAVE_DECL_SCALBN 1</span></div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="comment">/* Define to 1 if you have the declaration of `scalbnf', and to 0 if you</span></div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> <span class="comment">/* #undef HAVE_DECL_SCALBNF */</span></div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> </div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> <span class="comment">/* Define to 1 if you have the declaration of `scalbnl', and to 0 if you</span></div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="comment">/* #undef HAVE_DECL_SCALBNL */</span></div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> </div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <span class="comment">/* Define to 1 if you have the declaration of `sin', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> <span class="preprocessor">#define HAVE_DECL_SIN 1</span></div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> <span class="comment">/* Define to 1 if you have the declaration of `sinf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="comment">/* #undef HAVE_DECL_SINF */</span></div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> </div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="comment">/* Define to 1 if you have the declaration of `sinh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="preprocessor">#define HAVE_DECL_SINH 1</span></div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> <span class="comment">/* Define to 1 if you have the declaration of `sinhf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> <span class="comment">/* #undef HAVE_DECL_SINHF */</span></div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> </div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> <span class="comment">/* Define to 1 if you have the declaration of `sinhl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="comment">/* #undef HAVE_DECL_SINHL */</span></div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> </div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> <span class="comment">/* Define to 1 if you have the declaration of `sinl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="comment">/* #undef HAVE_DECL_SINL */</span></div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> </div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> <span class="comment">/* Define to 1 if you have the declaration of `sleep', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> <span class="preprocessor">#define HAVE_DECL_SLEEP 1</span></div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> <span class="comment">/* Define to 1 if you have the declaration of `sqrt', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> <span class="preprocessor">#define HAVE_DECL_SQRT 1</span></div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> <span class="comment">/* Define to 1 if you have the declaration of `sqrtf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> <span class="comment">/* #undef HAVE_DECL_SQRTF */</span></div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> </div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> <span class="comment">/* Define to 1 if you have the declaration of `sqrtl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> <span class="comment">/* #undef HAVE_DECL_SQRTL */</span></div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> </div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> <span class="comment">/* Define to 1 if you have the declaration of `srand48', and to 0 if you</span></div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> <span class="preprocessor">#define HAVE_DECL_SRAND48 1</span></div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> <span class="comment">/* Define to 1 if you have the declaration of `tan', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> <span class="preprocessor">#define HAVE_DECL_TAN 1</span></div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> <span class="comment">/* Define to 1 if you have the declaration of `tanf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> <span class="comment">/* #undef HAVE_DECL_TANF */</span></div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> </div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> <span class="comment">/* Define to 1 if you have the declaration of `tanh', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> <span class="preprocessor">#define HAVE_DECL_TANH 1</span></div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> <span class="comment">/* Define to 1 if you have the declaration of `tanhf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> <span class="comment">/* #undef HAVE_DECL_TANHF */</span></div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> </div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> <span class="comment">/* Define to 1 if you have the declaration of `tanhl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> <span class="comment">/* #undef HAVE_DECL_TANHL */</span></div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> </div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> <span class="comment">/* Define to 1 if you have the declaration of `tanl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> <span class="comment">/* #undef HAVE_DECL_TANL */</span></div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> </div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <span class="comment">/* Define to 1 if you have the declaration of `tgamma', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <span class="preprocessor">#define HAVE_DECL_TGAMMA 1</span></div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="comment">/* Define to 1 if you have the declaration of `tgammaf', and to 0 if you</span></div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="comment">/* #undef HAVE_DECL_TGAMMAF */</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> </div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> <span class="comment">/* Define to 1 if you have the declaration of `tgammal', and to 0 if you</span></div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="comment"> don't. */</span></div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="comment">/* #undef HAVE_DECL_TGAMMAL */</span></div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> </div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> <span class="comment">/* Define to 1 if you have the declaration of `trunc', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="preprocessor">#define HAVE_DECL_TRUNC 1</span></div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="comment">/* Define to 1 if you have the declaration of `truncf', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> <span class="comment">/* #undef HAVE_DECL_TRUNCF */</span></div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> </div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> <span class="comment">/* Define to 1 if you have the declaration of `truncl', and to 0 if you don't.</span></div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="comment">/* #undef HAVE_DECL_TRUNCL */</span></div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> </div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> <span class="comment">/* Define to 1 if you have the declaration of `y0', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> <span class="preprocessor">#define HAVE_DECL_Y0 1</span></div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> <span class="comment">/* Define to 1 if you have the declaration of `y0f', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <span class="comment">/* #undef HAVE_DECL_Y0F */</span></div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> </div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> <span class="comment">/* Define to 1 if you have the declaration of `y0l', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> <span class="comment">/* #undef HAVE_DECL_Y0L */</span></div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> </div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <span class="comment">/* Define to 1 if you have the declaration of `y1', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> <span class="preprocessor">#define HAVE_DECL_Y1 1</span></div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="comment">/* Define to 1 if you have the declaration of `y1f', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="comment">/* #undef HAVE_DECL_Y1F */</span></div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> </div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> <span class="comment">/* Define to 1 if you have the declaration of `y1l', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <span class="comment">/* #undef HAVE_DECL_Y1L */</span></div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> </div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="comment">/* Define to 1 if you have the declaration of `yn', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> <span class="preprocessor">#define HAVE_DECL_YN 1</span></div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> <span class="comment">/* Define to 1 if you have the declaration of `ynf', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> <span class="comment">/* #undef HAVE_DECL_YNF */</span></div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> </div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> <span class="comment">/* Define to 1 if you have the declaration of `ynl', and to 0 if you don't. */</span></div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> <span class="comment">/* #undef HAVE_DECL_YNL */</span></div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> </div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> <span class="comment">/* Define to 1 if you have the <dlfcn.h> header file. */</span></div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> <span class="preprocessor">#define HAVE_DLFCN_H 1</span></div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> <span class="comment">/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */</span></div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="comment">/* #undef HAVE_DOPRNT */</span></div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> </div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> <span class="comment">/* Define to 1 if you have the `drand48' function. */</span></div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> <span class="preprocessor">#define HAVE_DRAND48 1</span></div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> <span class="comment">/* Define to 1 if you have the `erf' function. */</span></div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> <span class="comment">/* #undef HAVE_ERF */</span></div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> </div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> <span class="comment">/* Define to 1 if you have the `erfc' function. */</span></div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> <span class="comment">/* #undef HAVE_ERFC */</span></div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> </div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> <span class="comment">/* Define to 1 if you have the `erfcf' function. */</span></div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> <span class="comment">/* #undef HAVE_ERFCF */</span></div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> </div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> <span class="comment">/* Define to 1 if you have the `erfcl' function. */</span></div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> <span class="comment">/* #undef HAVE_ERFCL */</span></div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> </div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> <span class="comment">/* Define to 1 if you have the `erff' function. */</span></div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="comment">/* #undef HAVE_ERFF */</span></div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> </div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> <span class="comment">/* Define to 1 if you have the `erfl' function. */</span></div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> <span class="comment">/* #undef HAVE_ERFL */</span></div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> </div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> <span class="comment">/* Define to 1 if you have the `exp' function. */</span></div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> <span class="comment">/* #undef HAVE_EXP */</span></div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> </div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> <span class="comment">/* Define to 1 if you have the `exp2' function. */</span></div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> <span class="comment">/* #undef HAVE_EXP2 */</span></div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> </div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> <span class="comment">/* Define to 1 if you have the `exp2f' function. */</span></div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> <span class="comment">/* #undef HAVE_EXP2F */</span></div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> </div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> <span class="comment">/* Define to 1 if you have the `exp2l' function. */</span></div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <span class="comment">/* #undef HAVE_EXP2L */</span></div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> </div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> <span class="comment">/* Define to 1 if you have the `expf' function. */</span></div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> <span class="comment">/* #undef HAVE_EXPF */</span></div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> </div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="comment">/* Define to 1 if you have the `expl' function. */</span></div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> <span class="comment">/* #undef HAVE_EXPL */</span></div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> </div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="comment">/* Define to 1 if you have the `expm1' function. */</span></div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> <span class="comment">/* #undef HAVE_EXPM1 */</span></div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> </div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> <span class="comment">/* Define to 1 if you have the `expm1f' function. */</span></div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> <span class="comment">/* #undef HAVE_EXPM1F */</span></div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> </div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> <span class="comment">/* Define to 1 if you have the `expm1l' function. */</span></div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> <span class="comment">/* #undef HAVE_EXPM1L */</span></div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> </div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> <span class="comment">/* Define to 1 if you have the `fabs' function. */</span></div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> <span class="comment">/* #undef HAVE_FABS */</span></div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> </div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> <span class="comment">/* Define to 1 if you have the `fabsf' function. */</span></div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> <span class="comment">/* #undef HAVE_FABSF */</span></div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> </div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> <span class="comment">/* Define to 1 if you have the `fabsl' function. */</span></div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> <span class="comment">/* #undef HAVE_FABSL */</span></div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> </div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> <span class="comment">/* Define to 1 if you have the `fdim' function. */</span></div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> <span class="comment">/* #undef HAVE_FDIM */</span></div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> </div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> <span class="comment">/* Define to 1 if you have the `fdimf' function. */</span></div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> <span class="comment">/* #undef HAVE_FDIMF */</span></div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> </div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span> <span class="comment">/* Define to 1 if you have the `fdiml' function. */</span></div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> <span class="comment">/* #undef HAVE_FDIML */</span></div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> </div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> <span class="comment">/* Define to 1 if you have the <float.h> header file. */</span></div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> <span class="preprocessor">#define HAVE_FLOAT_H 1</span></div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> <span class="comment">/* Define to 1 if you have the `floor' function. */</span></div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> <span class="comment">/* #undef HAVE_FLOOR */</span></div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> </div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> <span class="comment">/* Define to 1 if you have the `floorf' function. */</span></div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> <span class="comment">/* #undef HAVE_FLOORF */</span></div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> </div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> <span class="comment">/* Define to 1 if you have the `floorl' function. */</span></div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> <span class="comment">/* #undef HAVE_FLOORL */</span></div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> </div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> <span class="comment">/* Define to 1 if you have the `fma' function. */</span></div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> <span class="comment">/* #undef HAVE_FMA */</span></div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> </div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> <span class="comment">/* Define to 1 if you have the `fmaf' function. */</span></div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> <span class="comment">/* #undef HAVE_FMAF */</span></div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> </div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> <span class="comment">/* Define to 1 if you have the `fmal' function. */</span></div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> <span class="comment">/* #undef HAVE_FMAL */</span></div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> </div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> <span class="comment">/* Define to 1 if you have the `fmax' function. */</span></div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> <span class="comment">/* #undef HAVE_FMAX */</span></div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> </div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> <span class="comment">/* Define to 1 if you have the `fmaxf' function. */</span></div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> <span class="comment">/* #undef HAVE_FMAXF */</span></div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> </div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> <span class="comment">/* Define to 1 if you have the `fmaxl' function. */</span></div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> <span class="comment">/* #undef HAVE_FMAXL */</span></div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> </div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> <span class="comment">/* Define to 1 if you have the `fmin' function. */</span></div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> <span class="comment">/* #undef HAVE_FMIN */</span></div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> </div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> <span class="comment">/* Define to 1 if you have the `fminf' function. */</span></div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> <span class="comment">/* #undef HAVE_FMINF */</span></div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> </div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> <span class="comment">/* Define to 1 if you have the `fminl' function. */</span></div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> <span class="comment">/* #undef HAVE_FMINL */</span></div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> </div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> <span class="comment">/* Define to 1 if you have the `fmod' function. */</span></div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> <span class="comment">/* #undef HAVE_FMOD */</span></div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> </div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> <span class="comment">/* Define to 1 if you have the `fmodf' function. */</span></div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> <span class="comment">/* #undef HAVE_FMODF */</span></div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> </div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> <span class="comment">/* Define to 1 if you have the `fmodl' function. */</span></div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> <span class="comment">/* #undef HAVE_FMODL */</span></div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> </div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> <span class="comment">/* Define to 1 if you have the `frexp' function. */</span></div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> <span class="preprocessor">#define HAVE_FREXP 1</span></div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> <span class="comment">/* Define to 1 if you have the `frexpf' function. */</span></div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> <span class="comment">/* #undef HAVE_FREXPF */</span></div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> </div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> <span class="comment">/* Define to 1 if you have the `frexpl' function. */</span></div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> <span class="comment">/* #undef HAVE_FREXPL */</span></div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> </div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> <span class="comment">/* Define to 1 if you have the `gethrtime' function. */</span></div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> <span class="comment">/* #undef HAVE_GETHRTIME */</span></div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> </div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> <span class="comment">/* Define to 1 if hrtime_t is defined in <sys/time.h> */</span></div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> <span class="comment">/* #undef HAVE_HRTIME_T */</span></div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> </div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> <span class="comment">/* Define to 1 if you have the `hypot' function. */</span></div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> <span class="comment">/* #undef HAVE_HYPOT */</span></div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> </div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> <span class="comment">/* Define to 1 if you have the `hypotf' function. */</span></div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> <span class="comment">/* #undef HAVE_HYPOTF */</span></div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> </div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <span class="comment">/* Define to 1 if you have the `hypotl' function. */</span></div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> <span class="comment">/* #undef HAVE_HYPOTL */</span></div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> </div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> <span class="comment">/* Define to 1 if you have the `ilogb' function. */</span></div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> <span class="comment">/* #undef HAVE_ILOGB */</span></div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> </div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> <span class="comment">/* Define to 1 if you have the `ilogbf' function. */</span></div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> <span class="comment">/* #undef HAVE_ILOGBF */</span></div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> </div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> <span class="comment">/* Define to 1 if you have the `ilogbl' function. */</span></div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> <span class="comment">/* #undef HAVE_ILOGBL */</span></div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> </div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> <span class="comment">/* Define to 1 if you have the <intrinsics.h> header file. */</span></div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> <span class="comment">/* #undef HAVE_INTRINSICS_H */</span></div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> </div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> <span class="comment">/* Define to 1 if you have the <inttypes.h> header file. */</span></div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span> <span class="preprocessor">#define HAVE_INTTYPES_H 1</span></div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span> <span class="comment">/* Define to 1 if you have the `j0' function. */</span></div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span> <span class="comment">/* #undef HAVE_J0 */</span></div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> </div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> <span class="comment">/* Define to 1 if you have the `j0f' function. */</span></div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> <span class="comment">/* #undef HAVE_J0F */</span></div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span> </div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> <span class="comment">/* Define to 1 if you have the `j0l' function. */</span></div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> <span class="comment">/* #undef HAVE_J0L */</span></div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span> </div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> <span class="comment">/* Define to 1 if you have the `j1' function. */</span></div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> <span class="comment">/* #undef HAVE_J1 */</span></div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> </div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> <span class="comment">/* Define to 1 if you have the `j1f' function. */</span></div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> <span class="comment">/* #undef HAVE_J1F */</span></div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> </div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> <span class="comment">/* Define to 1 if you have the `j1l' function. */</span></div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> <span class="comment">/* #undef HAVE_J1L */</span></div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> </div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> <span class="comment">/* Define to 1 if you have the `jn' function. */</span></div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> <span class="comment">/* #undef HAVE_JN */</span></div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> </div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> <span class="comment">/* Define to 1 if you have the `jnf' function. */</span></div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> <span class="comment">/* #undef HAVE_JNF */</span></div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> </div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span> <span class="comment">/* Define to 1 if you have the `jnl' function. */</span></div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> <span class="comment">/* #undef HAVE_JNL */</span></div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span> </div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> <span class="comment">/* Define to 1 if you have the `ldexp' function. */</span></div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> <span class="preprocessor">#define HAVE_LDEXP 1</span></div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> <span class="comment">/* Define to 1 if you have the `ldexpf' function. */</span></div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> <span class="comment">/* #undef HAVE_LDEXPF */</span></div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span> </div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span> <span class="comment">/* Define to 1 if you have the `ldexpl' function. */</span></div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span> <span class="comment">/* #undef HAVE_LDEXPL */</span></div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> </div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span> <span class="comment">/* Define to 1 if you have the `lgamma' function. */</span></div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span> <span class="comment">/* #undef HAVE_LGAMMA */</span></div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> </div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> <span class="comment">/* Define to 1 if you have the `lgammaf' function. */</span></div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> <span class="comment">/* #undef HAVE_LGAMMAF */</span></div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> </div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> <span class="comment">/* Define to 1 if you have the `lgammal' function. */</span></div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> <span class="comment">/* #undef HAVE_LGAMMAL */</span></div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span> </div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span> <span class="comment">/* Define to 1 if you have the `fftw3' library (-lfftw3). */</span></div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> <span class="preprocessor">#define HAVE_LIBFFTW3 1</span></div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> <span class="comment">/* Define to 1 if you have the `m' library (-lm). */</span></div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> <span class="preprocessor">#define HAVE_LIBM 1</span></div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> <span class="comment">/* Define to 1 if you have the <limits.h> header file. */</span></div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> <span class="preprocessor">#define HAVE_LIMITS_H 1</span></div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> <span class="comment">/* Define to 1 if you have the `llrint' function. */</span></div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> <span class="comment">/* #undef HAVE_LLRINT */</span></div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> </div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> <span class="comment">/* Define to 1 if you have the `llrintf' function. */</span></div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> <span class="comment">/* #undef HAVE_LLRINTF */</span></div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> </div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> <span class="comment">/* Define to 1 if you have the `llrintl' function. */</span></div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span> <span class="comment">/* #undef HAVE_LLRINTL */</span></div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> </div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> <span class="comment">/* Define to 1 if you have the `llround' function. */</span></div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span> <span class="comment">/* #undef HAVE_LLROUND */</span></div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> </div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> <span class="comment">/* Define to 1 if you have the `llroundf' function. */</span></div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> <span class="comment">/* #undef HAVE_LLROUNDF */</span></div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> </div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span> <span class="comment">/* Define to 1 if you have the `llroundl' function. */</span></div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> <span class="comment">/* #undef HAVE_LLROUNDL */</span></div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span> </div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> <span class="comment">/* Define to 1 if you have the `log' function. */</span></div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> <span class="comment">/* #undef HAVE_LOG */</span></div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> </div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span> <span class="comment">/* Define to 1 if you have the `log10' function. */</span></div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> <span class="comment">/* #undef HAVE_LOG10 */</span></div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> </div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> <span class="comment">/* Define to 1 if you have the `log10f' function. */</span></div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> <span class="comment">/* #undef HAVE_LOG10F */</span></div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> </div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> <span class="comment">/* Define to 1 if you have the `log10l' function. */</span></div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span> <span class="comment">/* #undef HAVE_LOG10L */</span></div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> </div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span> <span class="comment">/* Define to 1 if you have the `log1p' function. */</span></div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> <span class="comment">/* #undef HAVE_LOG1P */</span></div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> </div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> <span class="comment">/* Define to 1 if you have the `log1pf' function. */</span></div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> <span class="comment">/* #undef HAVE_LOG1PF */</span></div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> </div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> <span class="comment">/* Define to 1 if you have the `log1pl' function. */</span></div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> <span class="comment">/* #undef HAVE_LOG1PL */</span></div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> </div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> <span class="comment">/* Define to 1 if you have the `log2' function. */</span></div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> <span class="comment">/* #undef HAVE_LOG2 */</span></div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> </div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> <span class="comment">/* Define to 1 if you have the `log2f' function. */</span></div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span> <span class="comment">/* #undef HAVE_LOG2F */</span></div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> </div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> <span class="comment">/* Define to 1 if you have the `log2l' function. */</span></div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> <span class="comment">/* #undef HAVE_LOG2L */</span></div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span> </div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span> <span class="comment">/* Define to 1 if you have the `logb' function. */</span></div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> <span class="comment">/* #undef HAVE_LOGB */</span></div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span> </div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span> <span class="comment">/* Define to 1 if you have the `logbf' function. */</span></div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> <span class="comment">/* #undef HAVE_LOGBF */</span></div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> </div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> <span class="comment">/* Define to 1 if you have the `logbl' function. */</span></div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span> <span class="comment">/* #undef HAVE_LOGBL */</span></div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span> </div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> <span class="comment">/* Define to 1 if you have the `logf' function. */</span></div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> <span class="comment">/* #undef HAVE_LOGF */</span></div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span> </div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> <span class="comment">/* Define to 1 if you have the `logl' function. */</span></div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> <span class="comment">/* #undef HAVE_LOGL */</span></div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> </div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> <span class="comment">/* Define to 1 if the compiler supports 'long double' */</span></div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> <span class="preprocessor">#define HAVE_LONG_DOUBLE 1</span></div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> <span class="comment">/* Define to 1 if you have the `lrint' function. */</span></div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> <span class="comment">/* #undef HAVE_LRINT */</span></div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> </div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> <span class="comment">/* Define to 1 if you have the `lrintf' function. */</span></div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span> <span class="comment">/* #undef HAVE_LRINTF */</span></div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> </div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> <span class="comment">/* Define to 1 if you have the `lrintl' function. */</span></div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> <span class="comment">/* #undef HAVE_LRINTL */</span></div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> </div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> <span class="comment">/* Define to 1 if you have the `lround' function. */</span></div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> <span class="comment">/* #undef HAVE_LROUND */</span></div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span> </div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> <span class="comment">/* Define to 1 if you have the `lroundf' function. */</span></div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> <span class="comment">/* #undef HAVE_LROUNDF */</span></div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> </div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> <span class="comment">/* Define to 1 if you have the `lroundl' function. */</span></div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> <span class="comment">/* #undef HAVE_LROUNDL */</span></div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> </div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span> <span class="comment">/* Define to 1 if you have the `mach_absolute_time' function. */</span></div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span> <span class="comment">/* #undef HAVE_MACH_ABSOLUTE_TIME */</span></div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> </div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> <span class="comment">/* Define to 1 if you have the <mach/mach_time.h> header file. */</span></div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span> <span class="comment">/* #undef HAVE_MACH_MACH_TIME_H */</span></div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> </div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span> <span class="comment">/* Define to 1 if you have the <malloc.h> header file. */</span></div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> <span class="preprocessor">#define HAVE_MALLOC_H 1</span></div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span> <span class="comment">/* Define to 1 if you have the <math.h> header file. */</span></div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> <span class="preprocessor">#define HAVE_MATH_H 1</span></div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span> <span class="comment">/* Define to 1 if compilation of Matlab interface only succeeds when macro</span></div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span> <span class="comment"> __STDC_UTF_16__ not defined. */</span></div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> <span class="comment">/* #undef HAVE_MATLAB_GCC_REQUIRE_UNDEF_STDC_UTF_16 */</span></div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> </div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> <span class="comment">/* Define to 1 if you have the `memalign' function. */</span></div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span> <span class="preprocessor">#define HAVE_MEMALIGN 1</span></div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> <span class="comment">/* Define to 1 if you have the <memory.h> header file. */</span></div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span> <span class="preprocessor">#define HAVE_MEMORY_H 1</span></div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> <span class="comment">/* Define to 1 if you have the `memset' function. */</span></div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span> <span class="preprocessor">#define HAVE_MEMSET 1</span></div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span> <span class="comment">/* Define to have the file mexversion.c */</span></div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> <span class="comment">/* #undef HAVE_MEXVERSION_C */</span></div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> </div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> <span class="comment">/* Define to enable use of MIPS ZBus cycle-counter. */</span></div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> <span class="comment">/* #undef HAVE_MIPS_ZBUS_TIMER */</span></div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> </div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> <span class="comment">/* Define to 1 if you have the `modf' function. */</span></div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> <span class="preprocessor">#define HAVE_MODF 1</span></div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span> <span class="comment">/* Define to 1 if you have the `modff' function. */</span></div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> <span class="comment">/* #undef HAVE_MODFF */</span></div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span> </div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span> <span class="comment">/* Define to 1 if you have the `modfl' function. */</span></div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span> <span class="comment">/* #undef HAVE_MODFL */</span></div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span> </div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span> <span class="comment">/* Define to 1 if you have the `nan' function. */</span></div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> <span class="comment">/* #undef HAVE_NAN */</span></div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span> </div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> <span class="comment">/* Define to 1 if you have the `nanf' function. */</span></div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span> <span class="comment">/* #undef HAVE_NANF */</span></div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span> </div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span> <span class="comment">/* Define to 1 if you have the `nanl' function. */</span></div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span> <span class="comment">/* #undef HAVE_NANL */</span></div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span> </div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span> <span class="comment">/* Define to 1 if you have the `nanosleep' function. */</span></div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span> <span class="preprocessor">#define HAVE_NANOSLEEP 1</span></div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> <span class="comment">/* Define to 1 if you have the `nearbyint' function. */</span></div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span> <span class="comment">/* #undef HAVE_NEARBYINT */</span></div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span> </div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> <span class="comment">/* Define to 1 if you have the `nearbyintf' function. */</span></div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span> <span class="comment">/* #undef HAVE_NEARBYINTF */</span></div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span> </div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span> <span class="comment">/* Define to 1 if you have the `nearbyintl' function. */</span></div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span> <span class="comment">/* #undef HAVE_NEARBYINTL */</span></div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span> </div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span> <span class="comment">/* Define to 1 if you have the `nextafter' function. */</span></div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span> <span class="comment">/* #undef HAVE_NEXTAFTER */</span></div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> </div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> <span class="comment">/* Define to 1 if you have the `nextafterf' function. */</span></div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> <span class="comment">/* #undef HAVE_NEXTAFTERF */</span></div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span> </div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span> <span class="comment">/* Define to 1 if you have the `nextafterl' function. */</span></div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span> <span class="comment">/* #undef HAVE_NEXTAFTERL */</span></div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> </div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span> <span class="comment">/* Define if OpenMP is enabled */</span></div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span> <span class="preprocessor">#define HAVE_OPENMP 1</span></div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span> <span class="comment">/* Define to 1 if you have the `posix_memalign' function. */</span></div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span> <span class="preprocessor">#define HAVE_POSIX_MEMALIGN 1</span></div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span> <span class="comment">/* Define to 1 if you have the `pow' function. */</span></div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span> <span class="comment">/* #undef HAVE_POW */</span></div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> </div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> <span class="comment">/* Define to 1 if you have the `powf' function. */</span></div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span> <span class="comment">/* #undef HAVE_POWF */</span></div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> </div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span> <span class="comment">/* Define to 1 if you have the `powl' function. */</span></div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> <span class="comment">/* #undef HAVE_POWL */</span></div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> </div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> <span class="comment">/* Define to 1 if you have the `read_real_time' function. */</span></div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span> <span class="comment">/* #undef HAVE_READ_REAL_TIME */</span></div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span> </div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> <span class="comment">/* Define to 1 if you have the `remainder' function. */</span></div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span> <span class="comment">/* #undef HAVE_REMAINDER */</span></div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> </div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span> <span class="comment">/* Define to 1 if you have the `remainderf' function. */</span></div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> <span class="comment">/* #undef HAVE_REMAINDERF */</span></div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span> </div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> <span class="comment">/* Define to 1 if you have the `remainderl' function. */</span></div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> <span class="comment">/* #undef HAVE_REMAINDERL */</span></div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> </div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> <span class="comment">/* Define to 1 if you have the `remquo' function. */</span></div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span> <span class="comment">/* #undef HAVE_REMQUO */</span></div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> </div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> <span class="comment">/* Define to 1 if you have the `remquof' function. */</span></div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> <span class="comment">/* #undef HAVE_REMQUOF */</span></div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span> </div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> <span class="comment">/* Define to 1 if you have the `remquol' function. */</span></div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> <span class="comment">/* #undef HAVE_REMQUOL */</span></div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> </div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> <span class="comment">/* Define to 1 if you have the `rint' function. */</span></div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> <span class="comment">/* #undef HAVE_RINT */</span></div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> </div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span> <span class="comment">/* Define to 1 if you have the `rintf' function. */</span></div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> <span class="comment">/* #undef HAVE_RINTF */</span></div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span> </div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span> <span class="comment">/* Define to 1 if you have the `rintl' function. */</span></div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> <span class="comment">/* #undef HAVE_RINTL */</span></div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span> </div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span> <span class="comment">/* Define to 1 if you have the `round' function. */</span></div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> <span class="comment">/* #undef HAVE_ROUND */</span></div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span> </div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span> <span class="comment">/* Define to 1 if you have the `roundf' function. */</span></div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> <span class="comment">/* #undef HAVE_ROUNDF */</span></div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> </div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span> <span class="comment">/* Define to 1 if you have the `roundl' function. */</span></div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> <span class="comment">/* #undef HAVE_ROUNDL */</span></div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> </div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span> <span class="comment">/* Define to 1 if you have the `scalbln' function. */</span></div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> <span class="comment">/* #undef HAVE_SCALBLN */</span></div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span> </div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> <span class="comment">/* Define to 1 if you have the `scalblnf' function. */</span></div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> <span class="comment">/* #undef HAVE_SCALBLNF */</span></div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> </div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> <span class="comment">/* Define to 1 if you have the `scalblnl' function. */</span></div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span> <span class="comment">/* #undef HAVE_SCALBLNL */</span></div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> </div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> <span class="comment">/* Define to 1 if you have the `scalbn' function. */</span></div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> <span class="preprocessor">#define HAVE_SCALBN 1</span></div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> <span class="comment">/* Define to 1 if you have the `scalbnf' function. */</span></div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> <span class="comment">/* #undef HAVE_SCALBNF */</span></div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span> </div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span> <span class="comment">/* Define to 1 if you have the `scalbnl' function. */</span></div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> <span class="comment">/* #undef HAVE_SCALBNL */</span></div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span> </div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span> <span class="comment">/* Define to 1 if you have the `sin' function. */</span></div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> <span class="comment">/* #undef HAVE_SIN */</span></div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span> </div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> <span class="comment">/* Define to 1 if you have the `sinf' function. */</span></div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> <span class="comment">/* #undef HAVE_SINF */</span></div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> </div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> <span class="comment">/* Define to 1 if you have the `sinh' function. */</span></div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> <span class="comment">/* #undef HAVE_SINH */</span></div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> </div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span> <span class="comment">/* Define to 1 if you have the `sinhf' function. */</span></div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> <span class="comment">/* #undef HAVE_SINHF */</span></div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> </div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span> <span class="comment">/* Define to 1 if you have the `sinhl' function. */</span></div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span> <span class="comment">/* #undef HAVE_SINHL */</span></div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> </div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span> <span class="comment">/* Define to 1 if you have the `sinl' function. */</span></div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span> <span class="comment">/* #undef HAVE_SINL */</span></div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span> </div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> <span class="comment">/* Define to 1 if you have the `sleep' function. */</span></div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span> <span class="preprocessor">#define HAVE_SLEEP 1</span></div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> <span class="comment">/* Define to 1 if you have the `snprintf' function. */</span></div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> <span class="preprocessor">#define HAVE_SNPRINTF 1</span></div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span> <span class="comment">/* Define to 1 if you have the `sqrt' function. */</span></div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span> <span class="comment">/* #undef HAVE_SQRT */</span></div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> </div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span> <span class="comment">/* Define to 1 if you have the `sqrtf' function. */</span></div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span> <span class="comment">/* #undef HAVE_SQRTF */</span></div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span> </div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> <span class="comment">/* Define to 1 if you have the `sqrtl' function. */</span></div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> <span class="comment">/* #undef HAVE_SQRTL */</span></div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> </div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> <span class="comment">/* Define to 1 if you have the `srand48' function. */</span></div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> <span class="preprocessor">#define HAVE_SRAND48 1</span></div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span> <span class="comment">/* Define to 1 if you have the <stdarg.h> header file. */</span></div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span> <span class="preprocessor">#define HAVE_STDARG_H 1</span></div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span> <span class="comment">/* Define to 1 if you have the <stdbool.h> header file. */</span></div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> <span class="preprocessor">#define HAVE_STDBOOL_H 1</span></div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> <span class="comment">/* Define to 1 if you have the <stddef.h> header file. */</span></div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> <span class="preprocessor">#define HAVE_STDDEF_H 1</span></div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> <span class="comment">/* Define to 1 if you have the <stdint.h> header file. */</span></div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span> <span class="preprocessor">#define HAVE_STDINT_H 1</span></div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span> <span class="comment">/* Define to 1 if you have the <stdio.h> header file. */</span></div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> <span class="preprocessor">#define HAVE_STDIO_H 1</span></div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span> <span class="comment">/* Define to 1 if you have the <stdlib.h> header file. */</span></div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> <span class="preprocessor">#define HAVE_STDLIB_H 1</span></div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> <span class="comment">/* Define to 1 if you have the <strings.h> header file. */</span></div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> <span class="preprocessor">#define HAVE_STRINGS_H 1</span></div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span> <span class="comment">/* Define to 1 if you have the <string.h> header file. */</span></div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span> <span class="preprocessor">#define HAVE_STRING_H 1</span></div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span> <span class="comment">/* Define to 1 if you have the `sysctl' function. */</span></div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span> <span class="preprocessor">#define HAVE_SYSCTL 1</span></div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> <span class="comment">/* Define to 1 if you have the <sys/stat.h> header file. */</span></div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span> <span class="preprocessor">#define HAVE_SYS_STAT_H 1</span></div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span> <span class="comment">/* Define to 1 if you have the <sys/time.h> header file. */</span></div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span> <span class="preprocessor">#define HAVE_SYS_TIME_H 1</span></div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span> <span class="comment">/* Define to 1 if you have the <sys/types.h> header file. */</span></div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span> <span class="preprocessor">#define HAVE_SYS_TYPES_H 1</span></div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span> <span class="comment">/* Define to 1 if you have the `tan' function. */</span></div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span> <span class="comment">/* #undef HAVE_TAN */</span></div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> </div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span> <span class="comment">/* Define to 1 if you have the `tanf' function. */</span></div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> <span class="comment">/* #undef HAVE_TANF */</span></div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> </div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span> <span class="comment">/* Define to 1 if you have the `tanh' function. */</span></div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> <span class="comment">/* #undef HAVE_TANH */</span></div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span> </div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span> <span class="comment">/* Define to 1 if you have the `tanhf' function. */</span></div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span> <span class="comment">/* #undef HAVE_TANHF */</span></div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span> </div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span> <span class="comment">/* Define to 1 if you have the `tanhl' function. */</span></div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span> <span class="comment">/* #undef HAVE_TANHL */</span></div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span> </div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> <span class="comment">/* Define to 1 if you have the `tanl' function. */</span></div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span> <span class="comment">/* #undef HAVE_TANL */</span></div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span> </div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span> <span class="comment">/* Define to 1 if you have the `tgamma' function. */</span></div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span> <span class="comment">/* #undef HAVE_TGAMMA */</span></div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span> </div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span> <span class="comment">/* Define to 1 if you have the `tgammaf' function. */</span></div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span> <span class="comment">/* #undef HAVE_TGAMMAF */</span></div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span> </div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span> <span class="comment">/* Define to 1 if you have the `tgammal' function. */</span></div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span> <span class="comment">/* #undef HAVE_TGAMMAL */</span></div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span> </div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span> <span class="comment">/* Define to 1 if you have the `time_base_to_time' function. */</span></div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span> <span class="comment">/* #undef HAVE_TIME_BASE_TO_TIME */</span></div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span> </div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span> <span class="comment">/* Define to 1 if you have the <time.h> header file. */</span></div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> <span class="preprocessor">#define HAVE_TIME_H 1</span></div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span> <span class="comment">/* Define to 1 if you have the `trunc' function. */</span></div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span> <span class="comment">/* #undef HAVE_TRUNC */</span></div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span> </div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span> <span class="comment">/* Define to 1 if you have the `truncf' function. */</span></div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span> <span class="comment">/* #undef HAVE_TRUNCF */</span></div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span> </div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span> <span class="comment">/* Define to 1 if you have the `truncl' function. */</span></div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span> <span class="comment">/* #undef HAVE_TRUNCL */</span></div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span> </div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span> <span class="comment">/* Define to 1 if the system has the type `uintptr_t'. */</span></div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span> <span class="preprocessor">#define HAVE_UINTPTR_T 1</span></div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span> <span class="comment">/* Define to 1 if you have the <unistd.h> header file. */</span></div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span> <span class="preprocessor">#define HAVE_UNISTD_H 1</span></div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span> <span class="comment">/* Define to 1 if you have the `usleep' function. */</span></div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span> <span class="preprocessor">#define HAVE_USLEEP 1</span></div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span> <span class="comment">/* Define to 1 if you have the `vprintf' function. */</span></div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span> <span class="preprocessor">#define HAVE_VPRINTF 1</span></div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span> <span class="comment">/* Define to 1 if you have the `y0' function. */</span></div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span> <span class="comment">/* #undef HAVE_Y0 */</span></div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span> </div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span> <span class="comment">/* Define to 1 if you have the `y0f' function. */</span></div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span> <span class="comment">/* #undef HAVE_Y0F */</span></div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span> </div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span> <span class="comment">/* Define to 1 if you have the `y0l' function. */</span></div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span> <span class="comment">/* #undef HAVE_Y0L */</span></div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span> </div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span> <span class="comment">/* Define to 1 if you have the `y1' function. */</span></div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span> <span class="comment">/* #undef HAVE_Y1 */</span></div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span> </div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span> <span class="comment">/* Define to 1 if you have the `y1f' function. */</span></div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span> <span class="comment">/* #undef HAVE_Y1F */</span></div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span> </div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span> <span class="comment">/* Define to 1 if you have the `y1l' function. */</span></div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span> <span class="comment">/* #undef HAVE_Y1L */</span></div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span> </div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span> <span class="comment">/* Define to 1 if you have the `yn' function. */</span></div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span> <span class="comment">/* #undef HAVE_YN */</span></div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span> </div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span> <span class="comment">/* Define to 1 if you have the `ynf' function. */</span></div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span> <span class="comment">/* #undef HAVE_YNF */</span></div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span> </div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span> <span class="comment">/* Define to 1 if you have the `ynl' function. */</span></div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span> <span class="comment">/* #undef HAVE_YNL */</span></div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> </div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span> <span class="comment">/* Define to 1 if you have the `_mm_free' function. */</span></div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span> <span class="comment">/* #undef HAVE__MM_FREE */</span></div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span> </div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span> <span class="comment">/* Define to 1 if you have the `_mm_malloc' function. */</span></div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span> <span class="comment">/* #undef HAVE__MM_MALLOC */</span></div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span> </div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span> <span class="comment">/* Define if you have the UNICOS _rtc() intrinsic. */</span></div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span> <span class="comment">/* #undef HAVE__RTC */</span></div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span> </div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span> <span class="comment">/* Define to enable Kaiser-Bessel window function. */</span></div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span> <span class="preprocessor">#define KAISER_BESSEL 1</span></div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span> <span class="comment">/* Define to the sub-directory in which libtool stores uninstalled libraries.</span></div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span> <span class="preprocessor">#define LT_OBJDIR ".libs/"</span></div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span> <span class="comment">/* Define to enable Matlab argument checks. */</span></div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span> <span class="preprocessor">#define MATLAB_ARGCHECKS 1</span></div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span> <span class="comment">/* Define to enable runtime time measurements. */</span></div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span> <span class="comment">/* #undef MEASURE_TIME */</span></div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span> </div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span> <span class="comment">/* Define to enable time measurements for FFTW transforms. */</span></div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span> <span class="comment">/* #undef MEASURE_TIME_FFTW */</span></div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span> </div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span> <span class="comment">/* Define to enable extra debugging code. */</span></div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span> <span class="comment">/* #undef NFFT_DEBUG */</span></div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span> </div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span> <span class="comment">/* Define to 1 if your C compiler doesn't accept -c and -o together. */</span></div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span> <span class="comment">/* #undef NO_MINUS_C_MINUS_O */</span></div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span> </div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> <span class="comment">/* Name of package */</span></div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span> <span class="preprocessor">#define PACKAGE "nfft"</span></div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span> <span class="comment">/* Define to the address where bug reports for this package should be sent. */</span></div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span> <span class="preprocessor">#define PACKAGE_BUGREPORT "bugs at nfft.org"</span></div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span> <span class="comment">/* Define to the full name of this package. */</span></div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span> <span class="preprocessor">#define PACKAGE_NAME "NFFT"</span></div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span> <span class="comment">/* Define to the full name and version of this package. */</span></div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span> <span class="preprocessor">#define PACKAGE_STRING "NFFT 3.2.3"</span></div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span> <span class="comment">/* Define to the one symbol short name of this package. */</span></div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span> <span class="preprocessor">#define PACKAGE_TARNAME "nfft"</span></div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span> <span class="comment">/* Define to the home page for this package. */</span></div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span> <span class="preprocessor">#define PACKAGE_URL ""</span></div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span> <span class="comment">/* Define to the version of this package. */</span></div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span> <span class="preprocessor">#define PACKAGE_VERSION "3.2.3"</span></div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span> <span class="comment">/* Define to enable sinc power window function. */</span></div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span> <span class="comment">/* #undef SINC_POWER */</span></div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span> </div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span> <span class="comment">/* The size of `double', as computed by sizeof. */</span></div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span> <span class="preprocessor">#define SIZEOF_DOUBLE 8</span></div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span> <span class="comment">/* The size of `float', as computed by sizeof. */</span></div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span> <span class="preprocessor">#define SIZEOF_FLOAT 4</span></div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span> <span class="comment">/* The size of `int', as computed by sizeof. */</span></div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span> <span class="preprocessor">#define SIZEOF_INT 4</span></div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span> <span class="comment">/* The size of `long', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span> <span class="preprocessor">#define SIZEOF_LONG 8</span></div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span> <span class="comment">/* The size of `long double', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span> <span class="preprocessor">#define SIZEOF_LONG_DOUBLE 16</span></div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span> <span class="comment">/* The size of `long long', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span> <span class="preprocessor">#define SIZEOF_LONG_LONG 8</span></div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span> <span class="comment">/* The size of `ptrdiff_t', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span> <span class="preprocessor">#define SIZEOF_PTRDIFF_T 8</span></div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span> <span class="comment">/* The size of `size_t', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span> <span class="preprocessor">#define SIZEOF_SIZE_T 8</span></div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span> <span class="comment">/* The size of `unsigned int', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span> <span class="preprocessor">#define SIZEOF_UNSIGNED_INT 4</span></div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span> <span class="comment">/* The size of `unsigned long', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span> <span class="preprocessor">#define SIZEOF_UNSIGNED_LONG 8</span></div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span> <span class="comment">/* The size of `unsigned long long', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span> <span class="preprocessor">#define SIZEOF_UNSIGNED_LONG_LONG 8</span></div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span> <span class="comment">/* The size of `void *', as computed by sizeof. */</span></div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span> <span class="comment">/* #undef SIZEOF_VOID_P */</span></div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span> </div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span> <span class="comment">/* If using the C implementation of alloca, define if you know the</span></div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span> <span class="comment"> direction of stack growth for your system; otherwise it will be</span></div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span> <span class="comment"> automatically deduced at runtime.</span></div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span> <span class="comment"> STACK_DIRECTION > 0 => grows toward higher addresses</span></div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span> <span class="comment"> STACK_DIRECTION < 0 => grows toward lower addresses</span></div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span> <span class="comment"> STACK_DIRECTION = 0 => direction of growth unknown */</span></div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span> <span class="comment">/* #undef STACK_DIRECTION */</span></div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span> </div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span> <span class="comment">/* Define to 1 if you have the ANSI C header files. */</span></div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span> <span class="preprocessor">#define STDC_HEADERS 1</span></div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span> <span class="comment">/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */</span></div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span> <span class="preprocessor">#define TIME_WITH_SYS_TIME 1</span></div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span> <span class="comment">/* Version number of package */</span></div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span> <span class="preprocessor">#define VERSION "3.2.3"</span></div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span> <span class="comment">/* Define to empty if `const' does not conform to ANSI C. */</span></div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span> <span class="comment">/* #undef const */</span></div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span> </div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span> <span class="comment">/* Define to `__inline__' or `__inline' if that's what the C compiler</span></div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span> <span class="comment"> calls it, or to nothing if 'inline' is not supported under any name. */</span></div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span> <span class="preprocessor">#ifndef __cplusplus</span></div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span> <span class="preprocessor"></span><span class="comment">/* #undef inline */</span></div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span> <span class="comment">/* Define to the equivalent of the C99 'restrict' keyword, or to</span></div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span> <span class="comment"> nothing if this is not supported. Do not define if restrict is</span></div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span> <span class="comment"> supported directly. */</span></div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span> <span class="preprocessor">#define restrict __restrict</span></div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span> <span class="preprocessor"></span><span class="comment">/* Work around a bug in Sun C++: it does not support _Restrict or</span></div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span> <span class="comment"> __restrict__, even though the corresponding Sun C compiler ends up with</span></div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span> <span class="comment"> "#define restrict _Restrict" or "#define restrict __restrict__" in the</span></div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span> <span class="comment"> previous line. Perhaps some future version of Sun C++ will work with</span></div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span> <span class="comment"> restrict; if so, hopefully it defines __RESTRICT like Sun C does. */</span></div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span> <span class="preprocessor">#if defined __SUNPRO_CC && !defined __RESTRICT</span></div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span> <span class="preprocessor"></span><span class="preprocessor"># define _Restrict</span></div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span> <span class="preprocessor"></span><span class="preprocessor"># define __restrict__</span></div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span> <span class="comment">/* Define to `unsigned int' if <sys/types.h> does not define. */</span></div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span> <span class="comment">/* #undef size_t */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/construct__data__2d1d_8c_source.html b/doc/api/html/construct__data__2d1d_8c_source.html
new file mode 100644
index 0000000..724e602
--- /dev/null
+++ b/doc/api/html/construct__data__2d1d_8c_source.html
@@ -0,0 +1,176 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - construct_data_2d1d.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_fb8678d426210fc305fe5dfd30a163a5.html">mri3d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">construct_data_2d1d.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: construct_data_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="group__applications__mri3d__construct__data__1d2d.html#ga3b7e53294d00c663429518cb2f7c7791"> 40</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri3d__construct__data__1d2d.html#ga3b7e53294d00c663429518cb2f7c7791" title="construct makes an 2d-nfft for every slice">construct</a>(<span class="keywordtype">char</span> * file, [...]
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">int</span> j,z; <span class="comment">/* some variables */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">double</span> tmp; <span class="comment">/* a placeholder */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_plan; <span class="comment">/* plan for the two dimensional nfft */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> FILE* fp;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment">/* initialise my_plan */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> nfft_init_2d(&my_plan,N,N,M/Z);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> fp=fopen(<span class="stringliteral">"knots.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> fscanf(fp,<span class="stringliteral">"%le %le %le"</span>,&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0],&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1],&tmp);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> }</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> fclose(fp);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> fp=fopen(file,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">for</span>(z=0;z<Z;z++) {</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> tmp = (double) z;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> my_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j] = mem[(z*N*N+N*N*Z/2+j)%(N*N*Z)];</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> nfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> {</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> fprintf(fp,<span class="stringliteral">"%le %le %le %le %le\n"</span>,my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0],my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1],tmp/Z-0.5,</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> creal(my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]),cimag(my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]));</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> }</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> fclose(fp);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> nfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="code" href="group__applications__mri3d__construct__data__1d2d.html#gafa82bf5df93804a1760082b88492b8d5"> 86</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri3d__construct__data__1d2d.html#gafa82bf5df93804a1760082b88492b8d5" title="fft makes an 1D-ftt for every knot through all layers">fft</a>(<span class="keywordtype">int</span> N,< [...]
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> {</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> fftw_plan plan;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> plan = fftw_plan_many_dft(1, &Z, N*N,</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> mem, NULL,</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> N*N, 1,</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> mem, NULL,</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> N*N,1 ,</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> FFTW_FORWARD, FFTW_ESTIMATE);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> fftw_execute(plan); <span class="comment">/* execute the fft */</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> fftw_destroy_plan(plan);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="code" href="group__applications__mri3d__construct__data__1d2d.html#ga324751353a7eefbe2ad622201dd52d5f"> 104</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri3d__construct__data__1d2d.html#ga324751353a7eefbe2ad622201dd52d5f" title="read fills the memory with the file input_data_f.dat as the real part of f and with zeros for the ima.. [...]
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> {</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">int</span> i,z;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">double</span> real;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> FILE* fin;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> fin=fopen(<span class="stringliteral">"input_f.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">for</span>(z=0;z<Z;z++)</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> {</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">for</span>(i=0;i<N*N;i++)</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> fscanf(fin,<span class="stringliteral">"%le "</span>,&real );</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> mem[(z*N*N+N*N*Z/2+i)%(N*N*Z)]=real;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> fclose(fin);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> {</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> fftw_complex *mem;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">if</span> (argc <= 4) {</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> printf(<span class="stringliteral">"usage: ./construct_data FILENAME N M Z\n"</span>);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> mem = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex) * atoi(argv[2]) * atoi(argv[2]) * atoi(argv[4]));</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <a class="code" href="group__applications__mri3d__construct__data__1d2d.html#ga324751353a7eefbe2ad622201dd52d5f" title="read fills the memory with the file input_data_f.dat as the real part of f and with zeros for the ima...">read_data</a>(atoi(argv[2]),atoi(argv[3]),atoi(argv[4]), mem);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <a class="code" href="group__applications__mri3d__construct__data__1d2d.html#gafa82bf5df93804a1760082b88492b8d5" title="fft makes an 1D-ftt for every knot through all layers">fft</a>(atoi(argv[2]),atoi(argv[3]),atoi(argv[4]), mem);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <a class="code" href="group__applications__mri3d__construct__data__1d2d.html#ga3b7e53294d00c663429518cb2f7c7791" title="construct makes an 2d-nfft for every slice">construct</a>(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]), mem);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(mem);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/construct__data__2d_8c_source.html b/doc/api/html/construct__data__2d_8c_source.html
new file mode 100644
index 0000000..4bbd354
--- /dev/null
+++ b/doc/api/html/construct__data__2d_8c_source.html
@@ -0,0 +1,139 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - construct_data_2d.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">construct_data_2d.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: construct_data_2d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="group__applications__mri2d__construct__data__2d.html#ga7cad9b408cf07cdd4fa31da9c325dac5"> 41</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__construct__data__2d.html#ga7cad9b408cf07cdd4fa31da9c325dac5" title="construct makes an 2d-nfft">construct</a>(<span class="keywordtype">char</span> * file, <span class="keywor [...]
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">int</span> j,k; <span class="comment">/* some variables */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">double</span> real;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_plan; <span class="comment">/* plan for the two dimensional nfft */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> FILE* fp;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> FILE* fk;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> FILE* fi;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">/* initialise my_plan */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> nfft_init_2d(&my_plan,N,N,M);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> fp=fopen(<span class="stringliteral">"knots.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> {</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> fscanf(fp,<span class="stringliteral">"%le %le "</span>,&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0],&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1]);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> fclose(fp);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> fi=fopen(<span class="stringliteral">"input_f.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> fk=fopen(file,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">for</span>(j=0;j<N;j++)</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">for</span>(k=0;k<N;k++) {</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> fscanf(fi,<span class="stringliteral">"%le "</span>,&real);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> my_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(N*j+k)] = real;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> }</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> nfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> fprintf(fk,<span class="stringliteral">"%le %le %le %le\n"</span>,my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0],my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1],creal(my_plan.<a class [...]
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> fclose(fk);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> fclose(fi);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> nfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> {</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">if</span> (argc <= 3) {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> printf(<span class="stringliteral">"usage: ./construct_data FILENAME N M\n"</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <a class="code" href="group__applications__mri2d__construct__data__2d.html#ga7cad9b408cf07cdd4fa31da9c325dac5" title="construct makes an 2d-nfft">construct</a>(argv[1],atoi(argv[2]),atoi(argv[3]));</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/construct__data__3d_8c_source.html b/doc/api/html/construct__data__3d_8c_source.html
new file mode 100644
index 0000000..7fc65cf
--- /dev/null
+++ b/doc/api/html/construct__data__3d_8c_source.html
@@ -0,0 +1,152 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - construct_data_3d.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_fb8678d426210fc305fe5dfd30a163a5.html">mri3d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">construct_data_3d.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: construct_data_3d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__construct__data__2d.html#ga7cad9b408cf07cdd4fa31da9c325dac5" title="construct makes an 2d-nfft">construct</a>(<span class="keywordtype">char</span> * file, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> Z)</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">int</span> j,k,l; <span class="comment">/* some variables */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">double</span> real;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_plan; <span class="comment">/* plan for the three dimensional nfft */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> FILE* fp,*fk;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">int</span> my_N[3],my_n[3]; <span class="comment">/* to init the nfft */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">/* initialise my_plan */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment">//nfft_init_3d(&my_plan,Z,N,N,M);</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> my_N[0]=Z; my_n[0]=ceil(Z*1.2);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> my_N[1]=N; my_n[1]=ceil(N*1.2);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> my_N[2]=N; my_n[2]=ceil(N*1.2);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> nfft_init_guru(&my_plan, 3, my_N, M, my_n, 6,</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> fp=fopen(<span class="stringliteral">"knots.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">for</span>(j=0;j<M;j++)</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> fscanf(fp,<span class="stringliteral">"%le %le %le"</span>,&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*(j)+1],</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> &my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*(j)+2],&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*(j)+0]);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> fclose(fp);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> fp=fopen(<span class="stringliteral">"input_f.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> fk=fopen(file,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">for</span>(l=0;l<Z;l++) {</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">for</span>(j=0;j<N;j++)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">for</span>(k=0;k<N;k++)</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> {</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">//fscanf(fp,"%le ",&my_plan.f_hat[(N*N*(Z-l)+N*j+k+N*N*Z/2)%(N*N*Z)][0]);</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> fscanf(fp,<span class="stringliteral">"%le "</span>,&real);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> my_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(N*N*l+N*j+k)] = real;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> }</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> }</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> nfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> fprintf(fk,<span class="stringliteral">"%le %le %le %le %le\n"</span>,my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1],</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2],my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+0],creal(my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" tit [...]
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> fclose(fk);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> fclose(fp);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> nfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> }</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">if</span> (argc <= 4) {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> printf(<span class="stringliteral">"usage: ./construct_data FILENAME N M Z\n"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <a class="code" href="group__applications__mri2d__construct__data__2d.html#ga7cad9b408cf07cdd4fa31da9c325dac5" title="construct makes an 2d-nfft">construct</a>(argv[1], atoi(argv[2]),atoi(argv[3]),atoi(argv[4]));</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/construct__data__inh__2d1d_8c_source.html b/doc/api/html/construct__data__inh__2d1d_8c_source.html
new file mode 100644
index 0000000..8651639
--- /dev/null
+++ b/doc/api/html/construct__data__inh__2d1d_8c_source.html
@@ -0,0 +1,198 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - construct_data_inh_2d1d.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">construct_data_inh_2d1d.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: construct_data_inh_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <limits.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="group__applications__mri2d__construct__data__inh__2d1d.html#ga7cad9b408cf07cdd4fa31da9c325dac5"> 41</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__construct__data__inh__2d1d.html#ga7cad9b408cf07cdd4fa31da9c325dac5" title="construct">construct</a>(<span class="keywordtype">char</span> * file, <span class="keywordty [...]
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">int</span> j; <span class="comment">/* some variables */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">double</span> real;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">double</span> w;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">double</span> time,min_time,max_time,min_inh,max_inh;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <a class="code" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> my_plan;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> FILE *fp,*fout,*fi,*finh,*ftime;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">int</span> my_N[3],my_n[3];</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">int</span> flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE|</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> FFTW_MEASURE| FFTW_DESTROY_INPUT;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">double</span> Ts;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">double</span> W,T;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">int</span> N3;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">int</span> m=2;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">double</span> sigma = 1.25;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> min_time=INT_MAX; max_time=INT_MIN;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">for</span>(j=0;j<M;j++)</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> fscanf(ftime,<span class="stringliteral">"%le "</span>,&time);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">if</span>(time<min_time)</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> min_time = time;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">if</span>(time>max_time)</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> max_time = time;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> fclose(ftime);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> Ts=(min_time+max_time)/2.0;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> min_inh=INT_MAX; max_inh=INT_MIN;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> {</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> fscanf(finh,<span class="stringliteral">"%le "</span>,&w);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">if</span>(w<min_inh)</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> min_inh = w;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span>(w>max_inh)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> max_inh = w;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> fclose(finh);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> N3=ceil((<a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> T=((max_time-min_time)/2.0)/(0.5-((double) m)/N3);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> W=N3/T;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> my_N[0]=N; my_n[0]=ceil(N*sigma);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> my_N[1]=N; my_n[1]=ceil(N*sigma);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> my_N[2]=N3; my_n[2]=N3;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">/* initialise nfft */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> mri_inh_2d1d_init_guru(&my_plan, my_N, M, my_n, m, sigma, flags,</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> fp=fopen(<span class="stringliteral">"knots.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> {</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> fscanf(fp,<span class="stringliteral">"%le %le "</span>,&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0],&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1]);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> fscanf(ftime,<span class="stringliteral">"%le "</span>,&my_plan.t[j]);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> my_plan.t[j] = (my_plan.t[j]-Ts)/T;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> fclose(fp);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> fclose(ftime);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> {</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> fscanf(finh,<span class="stringliteral">"%le "</span>,&my_plan.w[j]);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> my_plan.w[j]/=W;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> fclose(finh);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> fi=fopen(<span class="stringliteral">"input_f.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> {</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> fscanf(fi,<span class="stringliteral">"%le "</span>,&real);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> my_plan.<a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j] = real*cexp(2.0*_Complex_I*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*Ts*my_plan.w[j]*W);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> }</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">if</span>(my_plan.plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> nfft_precompute_psi(&my_plan.plan);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> mri_inh_2d1d_trafo(&my_plan);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> fout=fopen(file,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> {</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> fprintf(fout,<span class="stringliteral">"%le %le %le %le\n"</span>,my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0],my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1],creal(my_p [...]
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> }</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> fclose(fout);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> mri_inh_2d1d_finalize(&my_plan);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> {</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">if</span> (argc <= 3) {</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> printf(<span class="stringliteral">"usage: ./construct_data_inh_2d1d FILENAME N M\n"</span>);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <a class="code" href="group__applications__mri2d__construct__data__inh__2d1d.html#ga7cad9b408cf07cdd4fa31da9c325dac5" title="construct">construct</a>(argv[1],atoi(argv[2]),atoi(argv[3]));</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> }</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/construct__data__inh__3d_8c_source.html b/doc/api/html/construct__data__inh__3d_8c_source.html
new file mode 100644
index 0000000..25c807f
--- /dev/null
+++ b/doc/api/html/construct__data__inh__3d_8c_source.html
@@ -0,0 +1,197 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - construct_data_inh_3d.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">construct_data_inh_3d.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: construct_data_inh_3d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <limits.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="group__applications__mri2d__construct__data__inh__3d.html#ga7cad9b408cf07cdd4fa31da9c325dac5"> 41</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__construct__data__inh__3d.html#ga7cad9b408cf07cdd4fa31da9c325dac5" title="construct">construct</a>(<span class="keywordtype">char</span> * file, <span class="keywordtype"> [...]
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">int</span> j; <span class="comment">/* some variables */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">double</span> real;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">double</span> w;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">double</span> time,min_time,max_time,min_inh,max_inh;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <a class="code" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> my_plan;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> FILE *fp,*fout,*fi,*finh,*ftime;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">int</span> my_N[3],my_n[3];</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">int</span> flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE|</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> FFTW_MEASURE| FFTW_DESTROY_INPUT;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">double</span> Ts;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">double</span> W;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">int</span> N3;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">int</span> m=2;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">double</span> sigma = 1.25;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> min_time=INT_MAX; max_time=INT_MIN;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">for</span>(j=0;j<M;j++)</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> fscanf(ftime,<span class="stringliteral">"%le "</span>,&time);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">if</span>(time<min_time)</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> min_time = time;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">if</span>(time>max_time)</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> max_time = time;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> fclose(ftime);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> Ts=(min_time+max_time)/2.0;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> min_inh=INT_MAX; max_inh=INT_MIN;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> {</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> fscanf(finh,<span class="stringliteral">"%le "</span>,&w);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">if</span>(w<min_inh)</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> min_inh = w;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span>(w>max_inh)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> max_inh = w;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> fclose(finh);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> N3=ceil((<a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> W= <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(fabs(min_inh),fabs(max_inh))/(0.5-((double)m)/N3);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> my_N[0]=N; my_n[0]=ceil(N*sigma);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> my_N[1]=N; my_n[1]=ceil(N*sigma);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> my_N[2]=N3; my_n[2]=ceil(N3*sigma);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="comment">/* initialise nfft */</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> mri_inh_3d_init_guru(&my_plan, my_N, M, my_n, m, sigma, flags,</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> fp=fopen(<span class="stringliteral">"knots.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> fscanf(fp,<span class="stringliteral">"%le %le"</span>,&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+0],&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1]);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> fscanf(ftime,<span class="stringliteral">"%le "</span>,&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2]);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2] = (my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2]-Ts)*W/N3;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> }</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> fclose(fp);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> fclose(ftime);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> fscanf(finh,<span class="stringliteral">"%le "</span>,&my_plan.w[j]);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> my_plan.w[j]/=W;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> fclose(finh);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> fi=fopen(<span class="stringliteral">"input_f.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> {</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> fscanf(fi,<span class="stringliteral">"%le "</span>,&real);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> my_plan.<a class="code" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j] = real*cexp(2.0*_Complex_I*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*Ts*my_plan.w[j]*W);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">if</span>(my_plan.plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> nfft_precompute_psi(&my_plan.plan);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> mri_inh_3d_trafo(&my_plan);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> fout=fopen(file,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> {</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> fprintf(fout,<span class="stringliteral">"%le %le %le %le\n"</span>,my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+0],my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1],creal(my_p [...]
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> fclose(fout);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> mri_inh_3d_finalize(&my_plan);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> }</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> {</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">if</span> (argc <= 3) {</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> printf(<span class="stringliteral">"usage: ./construct_data_inh_3d FILENAME N M\n"</span>);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <a class="code" href="group__applications__mri2d__construct__data__inh__3d.html#ga7cad9b408cf07cdd4fa31da9c325dac5" title="construct">construct</a>(argv[1],atoi(argv[2]),atoi(argv[3]));</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/cycle_8h_source.html b/doc/api/html/cycle_8h_source.html
new file mode 100644
index 0000000..6177f5a
--- /dev/null
+++ b/doc/api/html/cycle_8h_source.html
@@ -0,0 +1,568 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - cycle.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">cycle.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2003, 2007-8 Matteo Frigo</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright (c) 2003, 2007-8 Massachusetts Institute of Technology</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * a copy of this software and associated documentation files (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * "Software"), to deal in the Software without restriction, including</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * without limitation the rights to use, copy, modify, merge, publish,</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * distribute, sublicense, and/or sell copies of the Software, and to</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * permit persons to whom the Software is furnished to do so, subject to</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * the following conditions:</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * The above copyright notice and this permission notice shall be</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * included in all copies or substantial portions of the Software.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">/* machine-dependent cycle counters code. Needs to be inlined. */</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment">/***************************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">/* To use the cycle counters in your code, simply #include "cycle.h" (this</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> file), and then use the functions/macros:</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> ticks getticks(void);</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment"> ticks is an opaque typedef defined below, representing the current time.</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment"> You extract the elapsed time between two calls to gettick() via:</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment"> double elapsed(ticks t1, ticks t0);</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment"> which returns a double-precision variable in arbitrary units. You</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment"> are not expected to convert this into human units like seconds; it</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment"> is intended only for *comparisons* of time intervals.</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment"></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment"> (In order to use some of the OS-dependent timer routines like</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment"> Solaris' gethrtime, you need to paste the autoconf snippet below</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment"> into your configure.ac file and #include "config.h" before cycle.h,</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment"> or define the relevant macros manually if you are not using autoconf.)</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">/***************************************************************************/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment">/* This file uses macros like HAVE_GETHRTIME that are assumed to be</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment"> defined according to whether the corresponding function/type/header</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment"> is available on your system. The necessary macros are most</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment"> conveniently defined if you are using GNU autoconf, via the tests:</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment"> dnl ---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment"></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment"> AC_C_INLINE</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment"> AC_HEADER_TIME</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment"> AC_CHECK_HEADERS([sys/time.h c_asm.h intrinsics.h mach/mach_time.h])</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment"> AC_CHECK_TYPE([hrtime_t],[AC_DEFINE(HAVE_HRTIME_T, 1, [Define to 1 if hrtime_t is defined in <sys/time.h>])],,[#if HAVE_SYS_TIME_H</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment">#include <sys/time.h></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment">#endif])</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment"></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment"> AC_CHECK_FUNCS([gethrtime read_real_time time_base_to_time clock_gettime mach_absolute_time])</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment"> dnl Cray UNICOS _rtc() (real-time clock) intrinsic</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment"> AC_MSG_CHECKING([for _rtc intrinsic])</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment"> rtc_ok=yes</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment"> AC_TRY_LINK([#ifdef HAVE_INTRINSICS_H</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">#include <intrinsics.h></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">#endif], [_rtc()], [AC_DEFINE(HAVE__RTC,1,[Define if you have the UNICOS _rtc() intrinsic.])], [rtc_ok=no])</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment"> AC_MSG_RESULT($rtc_ok)</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment"></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment"> dnl ---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">/***************************************************************************/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor">#if TIME_WITH_SYS_TIME</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor"></span><span class="preprocessor"># include <sys/time.h></span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor"># include <time.h></span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor"></span><span class="preprocessor"># if HAVE_SYS_TIME_H</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor"></span><span class="preprocessor"># include <sys/time.h></span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor"></span><span class="preprocessor"># include <time.h></span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor">#define INLINE_ELAPSED(INL) static INL double elapsed(ticks t1, ticks t0) \</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor"> return (double)t1 - (double)t0; \</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor">#if 1 == 0</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment">/* Solaris */</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor">#if defined(HAVE_GETHRTIME) && defined(HAVE_HRTIME_T) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor"></span><span class="keyword">typedef</span> hrtime_t ticks;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor">#define getticks gethrtime</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> INLINE_ELAPSED(<span class="keyword">inline</span>)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment">/* AIX v. 4+ routines to read the real-time clock or time-base register */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="preprocessor">#if defined(HAVE_READ_REAL_TIME) && defined(HAVE_TIME_BASE_TO_TIME) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="preprocessor"></span><span class="keyword">typedef</span> timebasestruct_t ticks;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keyword">static</span> __inline ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> {</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> ticks t;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> read_real_time(&t, TIMEBASE_SZ);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">static</span> __inline <span class="keywordtype">double</span> elapsed(ticks t1, ticks t0) <span class="comment">/* time in nanoseconds */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> {</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> time_base_to_time(&t1, TIMEBASE_SZ);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> time_base_to_time(&t0, TIMEBASE_SZ);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">return</span> (((<span class="keywordtype">double</span>)t1.tb_high - (<span class="keywordtype">double</span>)t0.tb_high) * 1.0e9 + </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> ((<span class="keywordtype">double</span>)t1.tb_low - (<span class="keywordtype">double</span>)t0.tb_low));</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment"> * PowerPC ``cycle'' counter using the time base register.</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="preprocessor">#if ((((defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__))) || (defined(__MWERKS__) && defined(macintosh)))) || (defined(__IBM_GCC_ASM) && (defined(__powerpc__) || defined(__ppc__)))) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> {</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tbl, tbu0, tbu1;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> __asm__ __volatile__ (<span class="stringliteral">"mftbu %0"</span> : <span class="stringliteral">"=r"</span>(tbu0));</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> __asm__ __volatile__ (<span class="stringliteral">"mftb %0"</span> : <span class="stringliteral">"=r"</span>(tbl));</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> __asm__ __volatile__ (<span class="stringliteral">"mftbu %0"</span> : <span class="stringliteral">"=r"</span>(tbu1));</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> } <span class="keywordflow">while</span> (tbu0 != tbu1);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">return</span> (((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span>)tbu0) << 32) | tbl;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment">/* MacOS/Mach (Darwin) time-base register interface (unlike UpTime,</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment"> from Carbon, requires no additional libraries to be linked). */</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="preprocessor">#if defined(HAVE_MACH_ABSOLUTE_TIME) && defined(HAVE_MACH_MACH_TIME_H) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="preprocessor"></span><span class="preprocessor">#include <mach/mach_time.h></span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keyword">typedef</span> uint64_t ticks;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor">#define getticks mach_absolute_time</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="preprocessor"></span>INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment"> * Pentium cycle counter </span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor">#if (defined(__GNUC__) || defined(__ICC)) && defined(__i386__) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> {</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> ticks ret;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> __asm__ __volatile__(<span class="stringliteral">"rdtsc"</span>: <span class="stringliteral">"=A"</span> (ret));</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment">/* no input, nothing else clobbered */</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">return</span> ret;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> }</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor"></span><span class="preprocessor">#define TIME_MIN 5000.0 </span><span class="comment">/* unreliable pentium IV cycle counter */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment">/* Visual C++ -- thanks to Morten Nissov for his help with this */</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="preprocessor">#if defined(_MSC_VER) && _MSC_VER >= 1200 && _M_IX86 >= 500 && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="preprocessor"></span><span class="preprocessor">#include <windows.h></span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">typedef</span> LARGE_INTEGER ticks;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="preprocessor">#define RDTSC __asm __emit 0fh __asm __emit 031h </span><span class="comment">/* hack for VC++ 5.0 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">static</span> __inline ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> {</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> ticks retval;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> __asm {</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> RDTSC</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> mov retval.HighPart, edx</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> mov retval.LowPart, eax</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> }</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">return</span> retval;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> }</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keyword">static</span> __inline <span class="keywordtype">double</span> elapsed(ticks t1, ticks t0)</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> { </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">return</span> (<span class="keywordtype">double</span>)t1.QuadPart - (double)t0.QuadPart;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> } </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor"></span><span class="preprocessor">#define TIME_MIN 5000.0 </span><span class="comment">/* unreliable pentium IV cycle counter */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment"> * X86-64 cycle counter</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="preprocessor">#if (defined(__GNUC__) || defined(__ICC) || defined(__SUNPRO_C)) && defined(__x86_64__) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> {</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordtype">unsigned</span> a, d; </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keyword">asm</span> <span class="keyword">volatile</span>(<span class="stringliteral">"rdtsc"</span> : <span class="stringliteral">"=a"</span> (a), <span class="stringliteral">"=d"</span> (d)); </div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">return</span> ((ticks)a) | (((ticks)d) << 32); </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> }</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment">/* PGI compiler, courtesy Cristiano Calonaci, Andrea Tarsi, & Roberto Gori.</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment"> NOTE: this code will fail to link unless you use the -Masmkeyword compiler</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="comment"> option (grrr). */</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="preprocessor">#if defined(__PGI) && defined(__x86_64__) && !defined(HAVE_TICK_COUNTER) </span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keyword">static</span> ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> {</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keyword">asm</span>(<span class="stringliteral">" rdtsc; shl $0x20,%rdx; mov %eax,%eax; or %rdx,%rax; "</span>);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> }</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="comment">/* Visual C++, courtesy of Dirk Michaelis */</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="preprocessor">#if defined(_MSC_VER) && _MSC_VER >= 1400 && (defined(_M_AMD64) || defined(_M_X64)) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="preprocessor">#include <intrin.h></span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="preprocessor">#pragma intrinsic(__rdtsc)</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int64 ticks;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="preprocessor">#define getticks __rdtsc</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor"></span>INLINE_ELAPSED(__inline)</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="comment"> * IA64 cycle counter</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="comment">/* intel's icc/ecc compiler */</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="preprocessor">#if (defined(__EDG_VERSION) || defined(__ECC)) && defined(__ia64__) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor">#include <ia64intrin.h></span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> {</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">return</span> __getReg(_IA64_REG_AR_ITC);</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> }</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="comment">/* gcc */</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="preprocessor">#if defined(__GNUC__) && defined(__ia64__) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> {</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> ticks ret;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> __asm__ __volatile__ (<span class="stringliteral">"mov %0=ar.itc"</span> : <span class="stringliteral">"=r"</span>(ret));</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">return</span> ret;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> }</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="comment">/* HP/UX IA64 compiler, courtesy Teresa L. Johnson: */</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="preprocessor">#if defined(__hpux) && defined(__ia64) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="preprocessor"></span><span class="preprocessor">#include <machine/sys/inline.h></span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keyword">static</span> <span class="keyword">inline</span> ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> {</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> ticks ret;</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> ret = _Asm_mov_from_ar (_AREG_ITC);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">return</span> ret;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> }</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> INLINE_ELAPSED(<span class="keyword">inline</span>)</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="comment">/* Microsoft Visual C++ */</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="preprocessor">#if defined(_MSC_VER) && defined(_M_IA64) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int64 ticks;</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="preprocessor"># ifdef __cplusplus</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="preprocessor"></span>ticks __getReg(<span class="keywordtype">int</span> whichReg);</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="preprocessor">#pragma intrinsic(__getReg)</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keyword">static</span> __inline ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> {</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keyword">volatile</span> ticks temp;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> temp = __getReg(3116);</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">return</span> temp;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> }</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> INLINE_ELAPSED(<span class="keyword">inline</span>)</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="comment"> * PA-RISC cycle counter </span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="preprocessor">#if defined(__hppa__) || defined(__hppa) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="preprocessor"># ifdef __GNUC__</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="preprocessor"></span><span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> {</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> ticks ret;</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> __asm__ __volatile__(<span class="stringliteral">"mfctl 16, %0"</span>: <span class="stringliteral">"=r"</span> (ret));</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="comment">/* no input, nothing else clobbered */</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">return</span> ret;</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> }</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="preprocessor"></span><span class="preprocessor"># include <machine/inline.h></span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> {</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keyword">register</span> ticks ret;</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> _MFCTL(16, ret);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keywordflow">return</span> ret;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> }</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> INLINE_ELAPSED(<span class="keyword">inline</span>)</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="comment">/* S390, courtesy of James Treacy */</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="preprocessor">#if defined(__GNUC__) && defined(__s390__) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> {</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> ticks cycles;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> __asm__(<span class="stringliteral">"stck 0(%0)"</span> : : <span class="stringliteral">"a"</span> (&(cycles)) : <span class="stringliteral">"memory"</span>, <span class="stringliteral">"cc"</span>);</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">return</span> cycles;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="preprocessor">#if defined(__GNUC__) && defined(__alpha__) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="comment"> * The 32-bit cycle counter on alpha overflows pretty quickly, </span></div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="comment"> * unfortunately. A 1GHz machine overflows in 4 seconds.</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ticks;</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> {</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> cc;</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> __asm__ __volatile__ (<span class="stringliteral">"rpcc %0"</span> : <span class="stringliteral">"=r"</span>(cc));</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">return</span> (cc & 0xFFFFFFFF);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> }</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor">#if defined(__GNUC__) && defined(__sparc_v9__) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="keyword">static</span> __inline__ ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> {</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> ticks ret;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> __asm__ __volatile__(<span class="stringliteral">"rd %%tick, %0"</span> : <span class="stringliteral">"=r"</span> (ret));</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keywordflow">return</span> ret;</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> }</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="preprocessor">#if (defined(__DECC) || defined(__DECCXX)) && defined(__alpha) && defined(HAVE_C_ASM_H) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="preprocessor"></span><span class="preprocessor"># include <c_asm.h></span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ticks;</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keyword">static</span> __inline ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> {</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> cc;</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> cc = <span class="keyword">asm</span>(<span class="stringliteral">"rpcc %v0"</span>);</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">return</span> (cc & 0xFFFFFFFF);</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> }</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> INLINE_ELAPSED(__inline)</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="comment">/* SGI/Irix */</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="preprocessor">#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_SGI_CYCLE) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keyword">struct </span>timespec ticks;</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keyword">static</span> <span class="keyword">inline</span> ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> {</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keyword">struct </span>timespec t;</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> clock_gettime(CLOCK_SGI_CYCLE, &t);</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> }</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> elapsed(ticks t1, ticks t0)</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> {</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keywordflow">return</span> ((<span class="keywordtype">double</span>)t1.tv_sec - (<span class="keywordtype">double</span>)t0.tv_sec) * 1.0E9 +</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> ((double)t1.tv_nsec - (<span class="keywordtype">double</span>)t0.tv_nsec);</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> }</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="comment">/* Cray UNICOS _rtc() intrinsic function */</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="preprocessor">#if defined(HAVE__RTC) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="preprocessor"></span><span class="preprocessor">#ifdef HAVE_INTRINSICS_H</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="preprocessor"></span><span class="preprocessor"># include <intrinsics.h></span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keyword">typedef</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> ticks;</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor">#define getticks _rtc</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> INLINE_ELAPSED(<span class="keyword">inline</span>)</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="comment">/* MIPS ZBus */</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor">#if defined(HAVE_MIPS_ZBUS_TIMER) && HAVE_MIPS_ZBUS_TIMER</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor"></span><span class="preprocessor">#if defined(__mips__) && !defined(HAVE_TICK_COUNTER)</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor"></span><span class="preprocessor">#include <sys/mman.h></span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="preprocessor">#include <unistd.h></span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="preprocessor">#include <fcntl.h></span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="keyword">typedef</span> uint64_t ticks;</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keyword">static</span> <span class="keyword">inline</span> ticks getticks(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> {</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keyword">static</span> uint64_t* addr = 0;</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">if</span> (addr == 0)</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> {</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> uint32_t rq_addr = 0x10030000;</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keywordtype">int</span> fd;</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="keywordtype">int</span> pgsize;</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> pgsize = getpagesize();</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> fd = open (<span class="stringliteral">"/dev/mem"</span>, O_RDONLY | O_SYNC, 0);</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keywordflow">if</span> (fd < 0) {</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> perror(<span class="stringliteral">"open"</span>);</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> }</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> addr = mmap(0, pgsize, PROT_READ, MAP_SHARED, fd, rq_addr);</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> close(fd);</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">if</span> (addr == (uint64_t *)-1) {</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> perror(<span class="stringliteral">"mmap"</span>);</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> }</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> }</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="keywordflow">return</span> *addr;</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> }</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> INLINE_ELAPSED(<span class="keyword">inline</span>)</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="preprocessor">#define HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* HAVE_MIPS_ZBUS_TIMER */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_0c7f2452bc84fa0fc4195fb15953ec53.html b/doc/api/html/dir_0c7f2452bc84fa0fc4195fb15953ec53.html
new file mode 100644
index 0000000..a0304ea
--- /dev/null
+++ b/doc/api/html/dir_0c7f2452bc84fa0fc4195fb15953ec53.html
@@ -0,0 +1,52 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - applications/radon/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_0c7f2452bc84fa0fc4195fb15953ec53.html">radon</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">radon Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:inverse__radon_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="inverse__radon_8c.html">inverse_radon.c</a> <a href="inverse__radon_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:inverse__radon_8c"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based discrete inverse Radon transform. <br/></td></tr>
+<tr class="memitem:radon_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="radon_8c.html">radon.c</a> <a href="radon_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:radon_8c"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based discrete Radon transform. <br/></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d.html b/doc/api/html/dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d.html
new file mode 100644
index 0000000..c44022f
--- /dev/null
+++ b/doc/api/html/dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d.html
@@ -0,0 +1,50 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - examples/nnfft/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d.html">nnfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nnfft Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:accuracy_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>accuracy.c</b> <a href="accuracy_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nnfft_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nnfft/simple_test.c</b> <a href="nnfft_2simple__test_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_224fe669cf662e4d4573ba584877a9b9.html b/doc/api/html/dir_224fe669cf662e4d4573ba584877a9b9.html
new file mode 100644
index 0000000..7ed373e
--- /dev/null
+++ b/doc/api/html/dir_224fe669cf662e4d4573ba584877a9b9.html
@@ -0,0 +1,50 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - applications/fastsumS2/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_224fe669cf662e4d4573ba584877a9b9.html">fastsumS2</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastsumS2 Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:applications_2fastsumS2_2doxygen_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>applications/fastsumS2/doxygen.h</b> <a href="applications_2fastsumS2_2doxygen_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:fastsumS2_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>fastsumS2.c</b> <a href="fastsumS2_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_23ec12649285f9fabf3a6b7380226c28.html b/doc/api/html/dir_23ec12649285f9fabf3a6b7380226c28.html
new file mode 100644
index 0000000..5905d25
--- /dev/null
+++ b/doc/api/html/dir_23ec12649285f9fabf3a6b7380226c28.html
@@ -0,0 +1,49 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - util/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_23ec12649285f9fabf3a6b7380226c28.html">util</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">util Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:util_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>util.c</b> <a href="util_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_25564cacf5a7ef2ec915d9f7b609853e.html b/doc/api/html/dir_25564cacf5a7ef2ec915d9f7b609853e.html
new file mode 100644
index 0000000..137f617
--- /dev/null
+++ b/doc/api/html/dir_25564cacf5a7ef2ec915d9f7b609853e.html
@@ -0,0 +1,53 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - kernel/nfsft/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_25564cacf5a7ef2ec915d9f7b609853e.html">nfsft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfsft Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:kernel_2nfsft_2api_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>kernel/nfsft/api.h</b> <a href="kernel_2nfsft_2api_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:legendre_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>legendre.c</b> <a href="legendre_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:legendre_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>legendre.h</b> <a href="legendre_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:nfsft_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="nfsft_8c.html">nfsft.c</a> <a href="nfsft_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:nfsft_8c"><td class="mdescLeft"> </td><td class="mdescRight">Implementation file for the NFSFT module. <br/></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_390363ac6c75087990c53a11ba2c3b15.html b/doc/api/html/dir_390363ac6c75087990c53a11ba2c3b15.html
new file mode 100644
index 0000000..1a14578
--- /dev/null
+++ b/doc/api/html/dir_390363ac6c75087990c53a11ba2c3b15.html
@@ -0,0 +1,50 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - examples/nsfft/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_390363ac6c75087990c53a11ba2c3b15.html">nsfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nsfft Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nsfft__test_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nsfft_test.c</b> <a href="nsfft__test_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nsfft_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nsfft/simple_test.c</b> <a href="nsfft_2simple__test_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_58759e03702cf5d3134868f6de633189.html b/doc/api/html/dir_58759e03702cf5d3134868f6de633189.html
new file mode 100644
index 0000000..fc11062
--- /dev/null
+++ b/doc/api/html/dir_58759e03702cf5d3134868f6de633189.html
@@ -0,0 +1,50 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - kernel/solver/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_58759e03702cf5d3134868f6de633189.html">solver</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">solver Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:solver_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html">solver.c</a> <a href="solver_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:solver_8c"><td class="mdescLeft"> </td><td class="mdescRight">Implementation file for the solver module. <br/></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_6409bbb6ca4d9fdb6de069951c273365.html b/doc/api/html/dir_6409bbb6ca4d9fdb6de069951c273365.html
new file mode 100644
index 0000000..f67f603
--- /dev/null
+++ b/doc/api/html/dir_6409bbb6ca4d9fdb6de069951c273365.html
@@ -0,0 +1,49 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - kernel/nfct/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_6409bbb6ca4d9fdb6de069951c273365.html">nfct</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfct Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nfct_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfct.c</b> <a href="nfct_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html b/doc/api/html/dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html
new file mode 100644
index 0000000..8f81322
--- /dev/null
+++ b/doc/api/html/dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html
@@ -0,0 +1,55 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - applications/polarFFT/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">polarFFT Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:applications_2polarFFT_2doxygen_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>applications/polarFFT/doxygen.h</b> <a href="applications_2polarFFT_2doxygen_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:linogram__fft__test_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="linogram__fft__test_8c.html">linogram_fft_test.c</a> <a href="linogram__fft__test_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:linogram__fft__test_8c"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based pseudo-polar FFT and inverse. <br/></td></tr>
+<tr class="memitem:mpolar__fft__test_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="mpolar__fft__test_8c.html">mpolar_fft_test.c</a> <a href="mpolar__fft__test_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:mpolar__fft__test_8c"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based polar FFT and inverse on modified polar grid. <br/></td></tr>
+<tr class="memitem:polar__fft__test_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="polar__fft__test_8c.html">polar_fft_test.c</a> <a href="polar__fft__test_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:polar__fft__test_8c"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based polar FFT and inverse. <br/></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html b/doc/api/html/dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html
new file mode 100644
index 0000000..b41e54f
--- /dev/null
+++ b/doc/api/html/dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html
@@ -0,0 +1,55 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - kernel/util/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">util Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:bessel__i0_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>bessel_i0.c</b> <a href="bessel__i0_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:error_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>error.c</b> <a href="error_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:float_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>float.c</b> <a href="float_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:int_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>int.c</b> <a href="int_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:lambda_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>lambda.c</b> <a href="lambda_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:malloc_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>malloc.c</b> <a href="malloc_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinc_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>sinc.c</b> <a href="sinc_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_7af51a00587982c04b08a156fa91c254.html b/doc/api/html/dir_7af51a00587982c04b08a156fa91c254.html
new file mode 100644
index 0000000..434decb
--- /dev/null
+++ b/doc/api/html/dir_7af51a00587982c04b08a156fa91c254.html
@@ -0,0 +1,51 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - examples/solver/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_7af51a00587982c04b08a156fa91c254.html">solver</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">solver Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:examples_2solver_2doxygen_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>examples/solver/doxygen.h</b> <a href="examples_2solver_2doxygen_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:glacier_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>glacier.c</b> <a href="glacier_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:solver_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>solver/simple_test.c</b> <a href="solver_2simple__test_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_7bc5b4c2d8fedbf49abc178849c07704.html b/doc/api/html/dir_7bc5b4c2d8fedbf49abc178849c07704.html
new file mode 100644
index 0000000..3389c09
--- /dev/null
+++ b/doc/api/html/dir_7bc5b4c2d8fedbf49abc178849c07704.html
@@ -0,0 +1,49 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - examples/fpt/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_7bc5b4c2d8fedbf49abc178849c07704.html">fpt</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fpt Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:fpt_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>fpt/simple_test.c</b> <a href="fpt_2simple__test_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_7eb6ea3471917cbff788e1046aaeac44.html b/doc/api/html/dir_7eb6ea3471917cbff788e1046aaeac44.html
new file mode 100644
index 0000000..76d274d
--- /dev/null
+++ b/doc/api/html/dir_7eb6ea3471917cbff788e1046aaeac44.html
@@ -0,0 +1,49 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - kernel/nfft/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7eb6ea3471917cbff788e1046aaeac44.html">nfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfft Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nfft_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfft.c</b> <a href="nfft_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_899180af8ae9527aed19a2e763253fcc.html b/doc/api/html/dir_899180af8ae9527aed19a2e763253fcc.html
new file mode 100644
index 0000000..1539593
--- /dev/null
+++ b/doc/api/html/dir_899180af8ae9527aed19a2e763253fcc.html
@@ -0,0 +1,57 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - applications/mri/mri2d/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mri2d Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:construct__data__2d_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>construct_data_2d.c</b> <a href="construct__data__2d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:construct__data__inh__2d1d_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>construct_data_inh_2d1d.c</b> <a href="construct__data__inh__2d1d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:construct__data__inh__3d_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>construct_data_inh_3d.c</b> <a href="construct__data__inh__3d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:applications_2mri_2mri2d_2doxygen_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>applications/mri/mri2d/doxygen.h</b> <a href="applications_2mri_2mri2d_2doxygen_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:reconstruct__data__2d_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>reconstruct_data_2d.c</b> <a href="reconstruct__data__2d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:mri2d_2reconstruct__data__gridding_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>mri2d/reconstruct_data_gridding.c</b> <a href="mri2d_2reconstruct__data__gridding_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:reconstruct__data__inh__2d1d_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>reconstruct_data_inh_2d1d.c</b> <a href="reconstruct__data__inh__2d1d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:reconstruct__data__inh__3d_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>reconstruct_data_inh_3d.c</b> <a href="reconstruct__data__inh__3d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:reconstruct__data__inh__nnfft_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>reconstruct_data_inh_nnfft.c</b> <a href="reconstruct__data__inh__nnfft_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_8c2550e038f78045c202418cbfa07f80.html b/doc/api/html/dir_8c2550e038f78045c202418cbfa07f80.html
new file mode 100644
index 0000000..81cc4fc
--- /dev/null
+++ b/doc/api/html/dir_8c2550e038f78045c202418cbfa07f80.html
@@ -0,0 +1,60 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - examples/nfft/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfft Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:flags_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="flags_8c.html">flags.c</a> <a href="flags_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:flags_8c"><td class="mdescLeft"> </td><td class="mdescRight">Testing the nfft. <br/></td></tr>
+<tr class="memitem:ndft__fast_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="ndft__fast_8c.html">ndft_fast.c</a> <a href="ndft__fast_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:ndft__fast_8c"><td class="mdescLeft"> </td><td class="mdescRight">Testing ndft, Horner-like ndft, and fully precomputed ndft. <br/></td></tr>
+<tr class="memitem:nfft__benchomp_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfft_benchomp.c</b> <a href="nfft__benchomp_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfft__benchomp__createdataset_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfft_benchomp_createdataset.c</b> <a href="nfft__benchomp__createdataset_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfft__benchomp__detail_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfft_benchomp_detail.c</b> <a href="nfft__benchomp__detail_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfft__times_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfft_times.c</b> <a href="nfft__times_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfft_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfft/simple_test.c</b> <a href="nfft_2simple__test_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfft_2simple__test__threads_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfft/simple_test_threads.c</b> <a href="nfft_2simple__test__threads_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:taylor__nfft_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="taylor__nfft_8c.html">taylor_nfft.c</a> <a href="taylor__nfft_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:taylor__nfft_8c"><td class="mdescLeft"> </td><td class="mdescRight">Testing the nfft againt a Taylor expansion based version. <br/></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_8d4f17a3806fad624168c14bf0ea2fb4.html b/doc/api/html/dir_8d4f17a3806fad624168c14bf0ea2fb4.html
new file mode 100644
index 0000000..a456a48
--- /dev/null
+++ b/doc/api/html/dir_8d4f17a3806fad624168c14bf0ea2fb4.html
@@ -0,0 +1,49 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - examples/nfct/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8d4f17a3806fad624168c14bf0ea2fb4.html">nfct</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfct Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nfct_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfct/simple_test.c</b> <a href="nfct_2simple__test_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_8d554148c8057b12dc5cb11ef005c62c.html b/doc/api/html/dir_8d554148c8057b12dc5cb11ef005c62c.html
new file mode 100644
index 0000000..66b6c9e
--- /dev/null
+++ b/doc/api/html/dir_8d554148c8057b12dc5cb11ef005c62c.html
@@ -0,0 +1,49 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - examples/nfsoft/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8d554148c8057b12dc5cb11ef005c62c.html">nfsoft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfsoft Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nfsoft_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfsoft/simple_test.c</b> <a href="nfsoft_2simple__test_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_8f3c7156d7272f1462551f3a6c5fabd1.html b/doc/api/html/dir_8f3c7156d7272f1462551f3a6c5fabd1.html
new file mode 100644
index 0000000..c53adea
--- /dev/null
+++ b/doc/api/html/dir_8f3c7156d7272f1462551f3a6c5fabd1.html
@@ -0,0 +1,52 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - kernel/nfsoft/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_8f3c7156d7272f1462551f3a6c5fabd1.html">nfsoft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfsoft Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nfsoft_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfsoft.c</b> <a href="nfsoft_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:wigner_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>wigner.c</b> <a href="wigner_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:wigner_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html">wigner.h</a> <a href="wigner_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:wigner_8h"><td class="mdescLeft"> </td><td class="mdescRight">Header file for functions related to Wigner-d/D functions. <br/></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_a42734e8bce3bbae48210591d0fac63c.html b/doc/api/html/dir_a42734e8bce3bbae48210591d0fac63c.html
new file mode 100644
index 0000000..9a80c89
--- /dev/null
+++ b/doc/api/html/dir_a42734e8bce3bbae48210591d0fac63c.html
@@ -0,0 +1,49 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - kernel/nsfft/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_a42734e8bce3bbae48210591d0fac63c.html">nsfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nsfft Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nsfft_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nsfft.c</b> <a href="nsfft_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_a6d8c0f9045568178601abc26c60f91f.html b/doc/api/html/dir_a6d8c0f9045568178601abc26c60f91f.html
new file mode 100644
index 0000000..86bc80c
--- /dev/null
+++ b/doc/api/html/dir_a6d8c0f9045568178601abc26c60f91f.html
@@ -0,0 +1,49 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - kernel/mri/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_a6d8c0f9045568178601abc26c60f91f.html">mri</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mri Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:mri_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>mri.c</b> <a href="mri_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_a6e4fee11f07c3b70486e88fe92cbbdc.html b/doc/api/html/dir_a6e4fee11f07c3b70486e88fe92cbbdc.html
new file mode 100644
index 0000000..5ed8d71
--- /dev/null
+++ b/doc/api/html/dir_a6e4fee11f07c3b70486e88fe92cbbdc.html
@@ -0,0 +1,60 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - applications/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">applications Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_ef5ddbf7eefb3d84d608c9a9a32f9b2e"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_ef5ddbf7eefb3d84d608c9a9a32f9b2e.html">fastgauss</a></td></tr>
+<tr class="memitem:dir_ac1c8221356786b534ab925d360822d4"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></td></tr>
+<tr class="memitem:dir_224fe669cf662e4d4573ba584877a9b9"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_224fe669cf662e4d4573ba584877a9b9.html">fastsumS2</a></td></tr>
+<tr class="memitem:dir_e198b4faa999927a1ae92d03d5f1f5e6"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_e198b4faa999927a1ae92d03d5f1f5e6.html">iterS2</a></td></tr>
+<tr class="memitem:dir_fcbc4f55ac8dbf86a30b1d7535946c2d"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></td></tr>
+<tr class="memitem:dir_697d3e9fc07ca8e2f36d15eea53bc2fc"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></td></tr>
+<tr class="memitem:dir_deedd863ca11d55d683e9872da0f56e1"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_deedd863ca11d55d683e9872da0f56e1.html">quadratureS2</a></td></tr>
+<tr class="memitem:dir_0c7f2452bc84fa0fc4195fb15953ec53"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_0c7f2452bc84fa0fc4195fb15953ec53.html">radon</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:applications_2doxygen_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>applications/doxygen.c</b> <a href="applications_2doxygen_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_ac1c8221356786b534ab925d360822d4.html b/doc/api/html/dir_ac1c8221356786b534ab925d360822d4.html
new file mode 100644
index 0000000..7b7bd82
--- /dev/null
+++ b/doc/api/html/dir_ac1c8221356786b534ab925d360822d4.html
@@ -0,0 +1,63 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - applications/fastsum/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastsum Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:fastsum_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="fastsum_8c.html">fastsum.c</a> <a href="fastsum_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:fastsum_8c"><td class="mdescLeft"> </td><td class="mdescRight">Fast NFFT-based summation algorithm. <br/></td></tr>
+<tr class="memitem:fastsum_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="fastsum_8h.html">fastsum.h</a> <a href="fastsum_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:fastsum_8h"><td class="mdescLeft"> </td><td class="mdescRight">Header file for the fast NFFT-based summation algorithm. <br/></td></tr>
+<tr class="memitem:fastsum__benchomp_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>fastsum_benchomp.c</b> <a href="fastsum__benchomp_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:fastsum__benchomp__createdataset_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>fastsum_benchomp_createdataset.c</b> <a href="fastsum__benchomp__createdataset_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:fastsum__benchomp__detail_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>fastsum_benchomp_detail.c</b> <a href="fastsum__benchomp__detail_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:fastsum__matlab_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="fastsum__matlab_8c.html">fastsum_matlab.c</a> <a href="fastsum__matlab_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:fastsum__matlab_8c"><td class="mdescLeft"> </td><td class="mdescRight">Simple test program for the fast NFFT-based summation algorithm, called by fastsum.m. <br/></td></tr>
+<tr class="memitem:fastsum__test_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="fastsum__test_8c.html">fastsum_test.c</a> <a href="fastsum__test_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:fastsum__test_8c"><td class="mdescLeft"> </td><td class="mdescRight">Simple test program for the fast NFFT-based summation algorithm. <br/></td></tr>
+<tr class="memitem:kernels_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="kernels_8c.html">kernels.c</a> <a href="kernels_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:kernels_8c"><td class="mdescLeft"> </td><td class="mdescRight">File with predefined kernels for the fast summation algorithm. <br/></td></tr>
+<tr class="memitem:kernels_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="kernels_8h.html">kernels.h</a> <a href="kernels_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:kernels_8h"><td class="mdescLeft"> </td><td class="mdescRight">Header file with predefined kernels for the fast summation algorithm. <br/></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_d28a4824dc47e487b107a5db32ef43c4.html b/doc/api/html/dir_d28a4824dc47e487b107a5db32ef43c4.html
new file mode 100644
index 0000000..6308821
--- /dev/null
+++ b/doc/api/html/dir_d28a4824dc47e487b107a5db32ef43c4.html
@@ -0,0 +1,61 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - examples/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_7bc5b4c2d8fedbf49abc178849c07704"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_7bc5b4c2d8fedbf49abc178849c07704.html">fpt</a></td></tr>
+<tr class="memitem:dir_8d4f17a3806fad624168c14bf0ea2fb4"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_8d4f17a3806fad624168c14bf0ea2fb4.html">nfct</a></td></tr>
+<tr class="memitem:dir_8c2550e038f78045c202418cbfa07f80"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></td></tr>
+<tr class="memitem:dir_e6016a3bd4e6017d6b851aae5334ffd2"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_e6016a3bd4e6017d6b851aae5334ffd2.html">nfsft</a></td></tr>
+<tr class="memitem:dir_8d554148c8057b12dc5cb11ef005c62c"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_8d554148c8057b12dc5cb11ef005c62c.html">nfsoft</a></td></tr>
+<tr class="memitem:dir_fa65d2cfa17fd1e7f6091ef3f0c886ac"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_fa65d2cfa17fd1e7f6091ef3f0c886ac.html">nfst</a></td></tr>
+<tr class="memitem:dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d.html">nnfft</a></td></tr>
+<tr class="memitem:dir_390363ac6c75087990c53a11ba2c3b15"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_390363ac6c75087990c53a11ba2c3b15.html">nsfft</a></td></tr>
+<tr class="memitem:dir_7af51a00587982c04b08a156fa91c254"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_7af51a00587982c04b08a156fa91c254.html">solver</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:examples_2doxygen_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>examples/doxygen.c</b> <a href="examples_2doxygen_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_d44c64559bbebec7f509842c48db8b23.html b/doc/api/html/dir_d44c64559bbebec7f509842c48db8b23.html
new file mode 100644
index 0000000..b594ea0
--- /dev/null
+++ b/doc/api/html/dir_d44c64559bbebec7f509842c48db8b23.html
@@ -0,0 +1,59 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - include/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">include Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:include_2api_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>include/api.h</b> <a href="include_2api_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:config_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>config.h</b> <a href="config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:cycle_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>cycle.h</b> <a href="cycle_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:infft_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>infft.h</b> <a href="infft_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:nfft3_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html">nfft3.h</a> <a href="nfft3_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:nfft3conf_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfft3conf.h</b> <a href="nfft3conf_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:nfft3util_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3util_8h.html">nfft3util.h</a> <a href="nfft3util_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:nfft3util_8h"><td class="mdescLeft"> </td><td class="mdescRight">Header file for utility functions used by the nfft3 library. <br/></td></tr>
+<tr class="memitem:solver__adjoint_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html">solver_adjoint.h</a> <a href="solver__adjoint_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:solver__adjoint_8h"><td class="mdescLeft"> </td><td class="mdescRight">Header file for adjoint solver. <br/></td></tr>
+<tr class="memitem:ticks_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>ticks.h</b> <a href="ticks_8h_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_d46f6e04c6f21c2dce6558b4c13d80de.html b/doc/api/html/dir_d46f6e04c6f21c2dce6558b4c13d80de.html
new file mode 100644
index 0000000..7373688
--- /dev/null
+++ b/doc/api/html/dir_d46f6e04c6f21c2dce6558b4c13d80de.html
@@ -0,0 +1,49 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - kernel/nfst/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_d46f6e04c6f21c2dce6558b4c13d80de.html">nfst</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfst Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nfst_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfst.c</b> <a href="nfst_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_d47b87128a15c0ce57cf8f363265bec1.html b/doc/api/html/dir_d47b87128a15c0ce57cf8f363265bec1.html
new file mode 100644
index 0000000..5f34fe8
--- /dev/null
+++ b/doc/api/html/dir_d47b87128a15c0ce57cf8f363265bec1.html
@@ -0,0 +1,51 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - kernel/fpt/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_d47b87128a15c0ce57cf8f363265bec1.html">fpt</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fpt Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:fpt_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html">fpt.c</a> <a href="fpt_8c_source.html">[code]</a></td></tr>
+<tr class="memdesc:fpt_8c"><td class="mdescLeft"> </td><td class="mdescRight">Implementation file for the FPT module. <br/></td></tr>
+<tr class="memitem:fpt_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>fpt.h</b> <a href="fpt_8h_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_dc43877d82dd332f9fb2071fcca799d6.html b/doc/api/html/dir_dc43877d82dd332f9fb2071fcca799d6.html
new file mode 100644
index 0000000..cdcd79f
--- /dev/null
+++ b/doc/api/html/dir_dc43877d82dd332f9fb2071fcca799d6.html
@@ -0,0 +1,59 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - kernel/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">kernel Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_d47b87128a15c0ce57cf8f363265bec1"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_d47b87128a15c0ce57cf8f363265bec1.html">fpt</a></td></tr>
+<tr class="memitem:dir_a6d8c0f9045568178601abc26c60f91f"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_a6d8c0f9045568178601abc26c60f91f.html">mri</a></td></tr>
+<tr class="memitem:dir_6409bbb6ca4d9fdb6de069951c273365"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_6409bbb6ca4d9fdb6de069951c273365.html">nfct</a></td></tr>
+<tr class="memitem:dir_7eb6ea3471917cbff788e1046aaeac44"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_7eb6ea3471917cbff788e1046aaeac44.html">nfft</a></td></tr>
+<tr class="memitem:dir_25564cacf5a7ef2ec915d9f7b609853e"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_25564cacf5a7ef2ec915d9f7b609853e.html">nfsft</a></td></tr>
+<tr class="memitem:dir_8f3c7156d7272f1462551f3a6c5fabd1"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_8f3c7156d7272f1462551f3a6c5fabd1.html">nfsoft</a></td></tr>
+<tr class="memitem:dir_d46f6e04c6f21c2dce6558b4c13d80de"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_d46f6e04c6f21c2dce6558b4c13d80de.html">nfst</a></td></tr>
+<tr class="memitem:dir_ea25627ea6e0d39c26e4e31bca7b94c4"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_ea25627ea6e0d39c26e4e31bca7b94c4.html">nnfft</a></td></tr>
+<tr class="memitem:dir_a42734e8bce3bbae48210591d0fac63c"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_a42734e8bce3bbae48210591d0fac63c.html">nsfft</a></td></tr>
+<tr class="memitem:dir_58759e03702cf5d3134868f6de633189"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_58759e03702cf5d3134868f6de633189.html">solver</a></td></tr>
+<tr class="memitem:dir_7ab5cd9d6a44db3bf3b807f89e50cefe"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_deedd863ca11d55d683e9872da0f56e1.html b/doc/api/html/dir_deedd863ca11d55d683e9872da0f56e1.html
new file mode 100644
index 0000000..6a1b8f1
--- /dev/null
+++ b/doc/api/html/dir_deedd863ca11d55d683e9872da0f56e1.html
@@ -0,0 +1,50 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - applications/quadratureS2/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_deedd863ca11d55d683e9872da0f56e1.html">quadratureS2</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">quadratureS2 Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:applications_2quadratureS2_2doxygen_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>applications/quadratureS2/doxygen.h</b> <a href="applications_2quadratureS2_2doxygen_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:quadratureS2_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>quadratureS2.c</b> <a href="quadratureS2_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_e198b4faa999927a1ae92d03d5f1f5e6.html b/doc/api/html/dir_e198b4faa999927a1ae92d03d5f1f5e6.html
new file mode 100644
index 0000000..547c1e8
--- /dev/null
+++ b/doc/api/html/dir_e198b4faa999927a1ae92d03d5f1f5e6.html
@@ -0,0 +1,50 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - applications/iterS2/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_e198b4faa999927a1ae92d03d5f1f5e6.html">iterS2</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">iterS2 Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:applications_2iterS2_2doxygen_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>applications/iterS2/doxygen.h</b> <a href="applications_2iterS2_2doxygen_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:iterS2_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>iterS2.c</b> <a href="iterS2_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_e6016a3bd4e6017d6b851aae5334ffd2.html b/doc/api/html/dir_e6016a3bd4e6017d6b851aae5334ffd2.html
new file mode 100644
index 0000000..379566d
--- /dev/null
+++ b/doc/api/html/dir_e6016a3bd4e6017d6b851aae5334ffd2.html
@@ -0,0 +1,53 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - examples/nfsft/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_e6016a3bd4e6017d6b851aae5334ffd2.html">nfsft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfsft Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nfsft__benchomp_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfsft_benchomp.c</b> <a href="nfsft__benchomp_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfsft__benchomp__createdataset_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfsft_benchomp_createdataset.c</b> <a href="nfsft__benchomp__createdataset_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfsft__benchomp__detail_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfsft_benchomp_detail.c</b> <a href="nfsft__benchomp__detail_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfsft_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfsft/simple_test.c</b> <a href="nfsft_2simple__test_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:nfsft_2simple__test__threads_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfsft/simple_test_threads.c</b> <a href="nfsft_2simple__test__threads_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_ea25627ea6e0d39c26e4e31bca7b94c4.html b/doc/api/html/dir_ea25627ea6e0d39c26e4e31bca7b94c4.html
new file mode 100644
index 0000000..fc50652
--- /dev/null
+++ b/doc/api/html/dir_ea25627ea6e0d39c26e4e31bca7b94c4.html
@@ -0,0 +1,49 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - kernel/nnfft/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_ea25627ea6e0d39c26e4e31bca7b94c4.html">nnfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nnfft Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nnfft_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nnfft.c</b> <a href="nnfft_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_ef5ddbf7eefb3d84d608c9a9a32f9b2e.html b/doc/api/html/dir_ef5ddbf7eefb3d84d608c9a9a32f9b2e.html
new file mode 100644
index 0000000..66c6099
--- /dev/null
+++ b/doc/api/html/dir_ef5ddbf7eefb3d84d608c9a9a32f9b2e.html
@@ -0,0 +1,49 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - applications/fastgauss/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ef5ddbf7eefb3d84d608c9a9a32f9b2e.html">fastgauss</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastgauss Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:fastgauss_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>fastgauss.c</b> <a href="fastgauss_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_fa65d2cfa17fd1e7f6091ef3f0c886ac.html b/doc/api/html/dir_fa65d2cfa17fd1e7f6091ef3f0c886ac.html
new file mode 100644
index 0000000..91fb826
--- /dev/null
+++ b/doc/api/html/dir_fa65d2cfa17fd1e7f6091ef3f0c886ac.html
@@ -0,0 +1,49 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - examples/nfst/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_fa65d2cfa17fd1e7f6091ef3f0c886ac.html">nfst</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfst Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:nfst_2simple__test_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>nfst/simple_test.c</b> <a href="nfst_2simple__test_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_fb8678d426210fc305fe5dfd30a163a5.html b/doc/api/html/dir_fb8678d426210fc305fe5dfd30a163a5.html
new file mode 100644
index 0000000..21dd559
--- /dev/null
+++ b/doc/api/html/dir_fb8678d426210fc305fe5dfd30a163a5.html
@@ -0,0 +1,54 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - applications/mri/mri3d/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_fb8678d426210fc305fe5dfd30a163a5.html">mri3d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mri3d Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:construct__data__2d1d_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>construct_data_2d1d.c</b> <a href="construct__data__2d1d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:construct__data__3d_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>construct_data_3d.c</b> <a href="construct__data__3d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:applications_2mri_2mri3d_2doxygen_8h"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>applications/mri/mri3d/doxygen.h</b> <a href="applications_2mri_2mri3d_2doxygen_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:reconstruct__data__2d1d_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>reconstruct_data_2d1d.c</b> <a href="reconstruct__data__2d1d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:reconstruct__data__3d_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>reconstruct_data_3d.c</b> <a href="reconstruct__data__3d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:mri3d_2reconstruct__data__gridding_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>mri3d/reconstruct_data_gridding.c</b> <a href="mri3d_2reconstruct__data__gridding_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html b/doc/api/html/dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html
new file mode 100644
index 0000000..a4a89ca
--- /dev/null
+++ b/doc/api/html/dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html
@@ -0,0 +1,54 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - applications/mri/ Directory Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mri Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_899180af8ae9527aed19a2e763253fcc"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></td></tr>
+<tr class="memitem:dir_fb8678d426210fc305fe5dfd30a163a5"><td class="memItemLeft" align="right" valign="top">directory </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_fb8678d426210fc305fe5dfd30a163a5.html">mri3d</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:applications_2mri_2doxygen_8c"><td class="memItemLeft" align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><b>applications/mri/doxygen.c</b> <a href="applications_2mri_2doxygen_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/doxygen.css b/doc/api/html/doxygen.css
new file mode 100644
index 0000000..c023715
--- /dev/null
+++ b/doc/api/html/doxygen.css
@@ -0,0 +1,360 @@
+BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV
+{
+ font-family: Geneva, Arial, Helvetica, sans-serif;
+ color: #000000;
+}
+
+BODY,TD
+{
+ font-size: 90%;
+}
+
+H1
+{
+ text-align: center;
+ font-size: 160%;
+}
+
+H1nc
+{
+ font-size: 210%;
+}
+
+H2
+{
+ font-size: 120%;
+}
+
+H3
+{
+ font-size: 100%;
+}
+
+CAPTION
+{
+ font-weight: bold
+}
+
+a
+{
+ color: #000000;
+ text-decoration: none;
+}
+
+div.qindex {
+ width: 97%;
+ color: #FFFFFF;
+ background-color: #177665;
+ border-left: 20px solid #7FACA2;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+
+DIV.nav {
+ width: 100%;
+ background-color: #177665;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+DIV.navtab {
+ background-color: #177665;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+TD.navtab {
+ font-size: 70%;
+}
+
+a.qindex:link
+{
+ color: #FFFFFF;
+ background-color: #177665;
+}
+a.qindex:visited
+{
+ color: #FFFFFF;
+ background-color: #177665;
+}
+a.qindex:focus
+{
+ color: #7FACA2;
+ background-color: #177665;
+}
+a.qindex:hover
+{
+ color: #7FACA2;
+ background-color: #177665;
+}
+a.qindex:active
+{
+ color: #7FACA2;
+ background-color: #177665;
+}
+
+a.qindexHL:link
+{
+ color: #FFFFFF;
+ background-color: #177665;
+}
+a.qindexHL:visited
+{
+ color: #FFFFFF;
+ background-color: #177665;
+}
+a.qindexHL:focus
+{
+ color: #7FACA2;
+ background-color: #177665;
+}
+a.qindexHL:hover
+{
+ color: #7FACA2;
+ background-color: #177665;
+}
+a.qindexHL:active
+{
+ color: #7FACA2;
+ background-color: #177665;
+}
+
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
+A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
+A.codeRef:link { font-weight: normal; color: #0000FF}
+A.codeRef:visited { font-weight: normal; color: #0000FF}
+DL.el { margin-left: -1cm }
+.fragment {
+ font-family: Fixed, monospace;
+ font-size: 95%;
+}
+PRE.fragment {
+ border: 1px solid #CCCCCC;
+ background-color: #f5f5f5;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ margin-left: 2px;
+ margin-right: 8px;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+TD.md { background-color: #F4F4FB; font-weight: bold; }
+TD.mdPrefix {
+ background-color: #F4F4FB;
+ color: #606060;
+ font-size: 80%;
+}
+TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
+DIV.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ margin-bottom: 6px;
+ font-weight: bold;
+}
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
+BODY {
+ background: white;
+ color: black;
+ margin-right: 20px;
+ margin-left: 20px;
+}
+TD.indexkey {
+ background-color: #BFDCD2;
+ font-weight: bold;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #7FACA2;
+}
+TD.indexvalue {
+ background-color: #BFDCD2;
+ font-style: italic;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #7FACA2;
+}
+TR.memlist {
+ background-color: #f0f0f0;
+}
+P.formulaDsp { text-align: center; }
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+SPAN.keyword { color: #008000 }
+SPAN.keywordtype { color: #604020 }
+SPAN.keywordflow { color: #e08000 }
+SPAN.comment { color: #800000 }
+SPAN.preprocessor { color: #806020 }
+SPAN.stringliteral { color: #002080 }
+SPAN.charliteral { color: #008080 }
+.mdTable {
+ border: 1px solid #868686;
+ background-color: #F4F4FB;
+}
+.mdRow {
+ padding: 8px 10px;
+}
+.mdescLeft {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.mdescRight {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.memItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplParams {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ color: #606060;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.search { color: #003399;
+ font-weight: bold;
+}
+FORM.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+INPUT.search { font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #eeeeff;
+}
+TD.tiny { font-size: 75%;
+}
+.dirtab { padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #b0b0b0;
+}
+TH.dirtab { background: #eeeeff;
+ font-weight: bold;
+}
+HR { height: 1px;
+ border: none;
+ border-top: 1px solid black;
+}
+
+ul {
+ padding-top:0px;
+ padding-bottom:0px;
+ margin:0px;
+}
diff --git a/doc/api/html/doxygen.png b/doc/api/html/doxygen.png
new file mode 100644
index 0000000..3ff17d8
Binary files /dev/null and b/doc/api/html/doxygen.png differ
diff --git a/doc/api/html/dynsections.js b/doc/api/html/dynsections.js
new file mode 100644
index 0000000..116542f
--- /dev/null
+++ b/doc/api/html/dynsections.js
@@ -0,0 +1,78 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+ content.hide();
+ summary.show();
+ $(linkObj).addClass('closed').removeClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ content.show();
+ summary.hide();
+ $(linkObj).removeClass('closed').addClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ return false;
+}
+
+function updateStripes()
+{
+ $('table.directory tr').
+ removeClass('even').filter(':visible:even').addClass('even');
+}
+function toggleLevel(level)
+{
+ $('table.directory tr').each(function(){
+ var l = this.id.split('_').length-1;
+ var i = $('#img'+this.id.substring(3));
+ var a = $('#arr'+this.id.substring(3));
+ if (l<level+1) {
+ i.attr('src','ftv2folderopen.png');
+ a.attr('src','ftv2mnode.png');
+ $(this).show();
+ } else if (l==level+1) {
+ i.attr('src','ftv2folderclosed.png');
+ a.attr('src','ftv2pnode.png');
+ $(this).show();
+ } else {
+ $(this).hide();
+ }
+ });
+ updateStripes();
+}
+function toggleFolder(id)
+{
+ var n = $('[id^=row_'+id+']');
+ var i = $('[id^=img_'+id+']');
+ var a = $('[id^=arr_'+id+']');
+ var c = n.slice(1);
+ if (c.filter(':first').is(':visible')===true) {
+ i.attr('src','ftv2folderclosed.png');
+ a.attr('src','ftv2pnode.png');
+ c.hide();
+ } else {
+ i.attr('src','ftv2folderopen.png');
+ a.attr('src','ftv2mnode.png');
+ c.show();
+ }
+ updateStripes();
+}
+
+function toggleInherit(id)
+{
+ var rows = $('tr.inherit.'+id);
+ var img = $('tr.inherit_header.'+id+' img');
+ var src = $(img).attr('src');
+ if (rows.filter(':first').is(':visible')===true) {
+ rows.css('display','none');
+ $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ rows.css('display','table-row'); // using show() causes jump in firefox
+ $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+}
+
diff --git a/doc/api/html/error_8c_source.html b/doc/api/html/error_8c_source.html
new file mode 100644
index 0000000..a344dcf
--- /dev/null
+++ b/doc/api/html/error_8c_source.html
@@ -0,0 +1,213 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - error.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">error.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">static</span> R cnrm1(<span class="keyword">const</span> C *x, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> INT k;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> R nrm = K(0.0);</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> nrm += CABS(x[k]);</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keywordflow">return</span> nrm;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> }</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">static</span> R nrm1(<span class="keyword">const</span> R *x, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> R nrm = K(0.0);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> nrm += FABS(x[k]);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">return</span> nrm;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> }</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">static</span> R cerr2(<span class="keyword">const</span> C *x, <span class="keyword">const</span> C *y, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> {</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> R err = K(0.0);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">if</span> (!y)</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> {</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> err += CONJ(x[k]) * x[k];</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> {</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> err += CONJ(x[k]-y[k]) * (x[k]-y[k]);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">return</span> SQRT(err);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">static</span> R err2(<span class="keyword">const</span> R *x, <span class="keyword">const</span> R *y, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> R err = K(0.0);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">if</span> (!y)</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> {</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> err += x[k]*x[k];</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> err += (x[k]-y[k]) * (x[k]-y[k]);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> }</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">return</span> SQRT(err);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">static</span> R cerri(<span class="keyword">const</span> C *x, <span class="keyword">const</span> C *y, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> R err = K(0.0), t;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">if</span> (!y)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> {</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> t = CABS(x[k]);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> err = MAX(err, t);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> }</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> {</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> t = CABS(x[k] - y[k]);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> err = MAX(err, t);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">return</span> err;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> }</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">static</span> R erri(<span class="keyword">const</span> R *x, <span class="keyword">const</span> R *y, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> {</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> R err = K(0.0), t;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">if</span> (!y)</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> {</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> t = FABS(x[k]);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> err = MAX(err, t);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> {</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> {</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> t = FABS(x[k] - y[k]);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> err = MAX(err, t);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> }</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> }</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">return</span> err;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> R X(error_l_infty_complex)(<span class="keyword">const</span> C *x, <span class="keyword">const</span> C *y, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> {</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">return</span> (cerri(x, y, n)/cerri(x, 0, n));</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> R X(error_l_infty_double)(<span class="keyword">const</span> R *x, <span class="keyword">const</span> R *y, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> {</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">return</span> (erri(x, y, n)/erri(x, 0, n));</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> R X(error_l_infty_1_complex)(<span class="keyword">const</span> C *x, <span class="keyword">const</span> C *y, <span class="keyword">const</span> INT n,</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keyword">const</span> C *z, <span class="keyword">const</span> INT m)</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> {</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">return</span> (cerri(x, y, n)/cnrm1(z, m));</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> R X(error_l_infty_1_double)(<span class="keyword">const</span> R *x, <span class="keyword">const</span> R *y, <span class="keyword">const</span> INT n, <span class="keyword">const</span> R *z,</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keyword">const</span> INT m)</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> {</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">return</span> (erri(x, y, n)/nrm1(z, m));</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> }</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> R X(error_l_2_complex)(<span class="keyword">const</span> C *x, <span class="keyword">const</span> C *y, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> {</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">return</span> (cerr2(x, y, n)/cerr2(x, 0, n));</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> R X(error_l_2_double)(<span class="keyword">const</span> R *x, <span class="keyword">const</span> R *y, <span class="keyword">const</span> INT n)</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> {</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">return</span> (err2(x, y, n)/err2(x, NULL, n));</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/examples_2doxygen_8c_source.html b/doc/api/html/examples_2doxygen_8c_source.html
new file mode 100644
index 0000000..8c0487a
--- /dev/null
+++ b/doc/api/html/examples_2doxygen_8c_source.html
@@ -0,0 +1,70 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - doxygen.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples/doxygen.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/examples_2solver_2doxygen_8h_source.html b/doc/api/html/examples_2solver_2doxygen_8h_source.html
new file mode 100644
index 0000000..7b371ef
--- /dev/null
+++ b/doc/api/html/examples_2solver_2doxygen_8h_source.html
@@ -0,0 +1,70 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - doxygen.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_7af51a00587982c04b08a156fa91c254.html">solver</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">examples/solver/doxygen.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/fastgauss_8c_source.html b/doc/api/html/fastgauss_8c_source.html
new file mode 100644
index 0000000..1939c09
--- /dev/null
+++ b/doc/api/html/fastgauss_8c_source.html
@@ -0,0 +1,518 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastgauss.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ef5ddbf7eefb3d84d608c9a9a32f9b2e.html">fastgauss</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastgauss.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: fastgauss.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"></span><span class="preprocessor"> #include <complex.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga48aa1ec81a29b9f079701246f0b53ccc"> 48</a></span> <span class="preprocessor">#define DGT_PRE_CEXP (1U<< 0)</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga38ab7e1022ff3c5b556ce93078a05d1e"> 59</a></span> <span class="preprocessor">#define FGT_NDFT (1U<< 1)</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga39c3e544a78853e0da2b9a8c66d3054d"> 69</a></span> <span class="preprocessor">#define FGT_APPROX_B (1U<< 2)</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="structfgt__plan.html"> 72</a></span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> {</div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87"> 74</a></span> <span class="keywordtype">int</span> <a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>; </div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa"> 75</a></span> <span class="keywordtype">int</span> <a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>; </div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a"> 77</a></span> <span class="keywordtype">double</span> _Complex *<a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>; </div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1"> 78</a></span> <span class="keywordtype">double</span> _Complex *<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>; </div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869"> 80</a></span> <span class="keywordtype">unsigned</span> flags; </div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666"> 83</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666" title="parameter of the Gaussian">sigma</a>; </div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="code" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93"> 85</a></span> <span class="keywordtype">double</span> *<a class="code" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93" title="source nodes in ">x</a>; </div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056"> 86</a></span> <span class="keywordtype">double</span> *<a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056" title="target nodes in ">y</a>; </div>
+<div class="line"><a name="l00088"></a><span class="lineno"><a class="code" href="structfgt__plan.html#ad7d9387df7df72e3d5d628d7e429c2a2"> 88</a></span> <span class="keywordtype">double</span> _Complex *<a class="code" href="structfgt__plan.html#ad7d9387df7df72e3d5d628d7e429c2a2" title="precomputed values for dgt">pre_cexp</a>; </div>
+<div class="line"><a name="l00090"></a><span class="lineno"><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1"> 90</a></span> <span class="keywordtype">int</span> <a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>; </div>
+<div class="line"><a name="l00091"></a><span class="lineno"><a class="code" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73"> 91</a></span> <span class="keywordtype">double</span> <a class="code" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73" title="period, at least 1">p</a>; </div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4"> 93</a></span> <span class="keywordtype">double</span> _Complex *<a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a>; </div>
+<div class="line"><a name="l00095"></a><span class="lineno"><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2"> 95</a></span> <a class="code" href="structnfft__plan.html">nfft_plan</a> *<a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>; </div>
+<div class="line"><a name="l00096"></a><span class="lineno"><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163"> 96</a></span> <a class="code" href="structnfft__plan.html">nfft_plan</a> *<a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>; </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> } <a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a>;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga42f141fc768ced46eb2dac284b063b80"> 107</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#ga42f141fc768ced46eb2dac284b063b80" title="Executes the discrete Gauss transform.">dgt_trafo</a>(<a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> *ths)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> {</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">int</span> j,k,l;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">for</span>(j=0; j<ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>; j++)</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> ths-><a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>[j] = 0;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a> & <a class="code" href="group__applications__fastgauss.html#ga48aa1ec81a29b9f079701246f0b53ccc" title="If this flag is set, the whole matrix is precomputed and stored for the discrete Gauss transfrom...">DGT_PRE_CEXP</a>)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">for</span>(j=0,l=0; j<ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>; j++)</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">for</span>(k=0; k<ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>; k++,l++)</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> ths-><a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>[j] += ths-><a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>[k]*ths-><a class="code" href="structfgt__plan.html#ad7d9387df7df72e3d5d628d7e429c2a2" title="precomputed values for dgt">pre_cexp</a>[l];</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">for</span>(j=0; j<ths->M; j++)</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">for</span>(k=0; k<ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>; k++)</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> ths-><a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>[j] += ths-><a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>[k]*cexp(-ths-><a class="code" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666" title="parameter of the Gaussian">sigma</a>*(ths-><a class= [...]
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> (ths-><a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056" title="target nodes in ">y</a>[j]-ths-><a class="code" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93" title="source nodes in ">x</a>[k]));</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#gab12b6f7c36927db24d8555484dcdfde0"> 132</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#gab12b6f7c36927db24d8555484dcdfde0" title="Executes the fast Gauss transform.">fgt_trafo</a>(<a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> *ths)</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> {</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a> & <a class="code" href="group__applications__fastgauss.html#ga38ab7e1022ff3c5b556ce93078a05d1e" title="If this flag is set, the fast Gauss transform uses the discrete instead of the fast Fourier transform...">FGT_NDFT</a [...]
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> {</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> nfft_adjoint_direct(ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">for</span>(l=0; l<ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>; l++)</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[l] *= ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion c [...]
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> nfft_trafo_direct(ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> {</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> nfft_adjoint(ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">for</span>(l=0; l<ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>; l++)</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[l] *= ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion c [...]
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff"> 170</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff" title="Initialisation of a transform plan, guru.">fgt_init_guru</a>(<a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> *ths, <span clas [...]
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordtype">double</span> p, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> flags)</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> {</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordtype">int</span> j,n_fftw;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> fftw_plan fplan;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a> = M;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a> = N;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> ths-><a class="code" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666" title="parameter of the Gaussian">sigma</a> = sigma;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> ths-><a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a> = flags;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> ths-><a class="code" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93" title="source nodes in ">x</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>*<span class="keyword">sizeof</span>(<span [...]
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> ths-><a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056" title="target nodes in ">y</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>*<span class="keyword">sizeof</span>(<span [...]
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> ths-><a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a> = (<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>*<span class="keyword">siz [...]
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> ths-><a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a> = (<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>*<span class="keyword">sizeof</ [...]
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a> = n;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> ths-><a class="code" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73" title="period, at least 1">p</a> = p;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a> = (<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>*<span class="keyword">sizeof</sp [...]
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>));</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>));</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> n_fftw=X(next_power_of_2)(2*ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> nfft_init_guru(ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>, 1, &(ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>), ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>, &n_fftw, m, PRE_PH [...]
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> PRE_PSI| MALLOC_X| MALLOC_F_HAT| FFTW_INIT, FFTW_MEASURE);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> nfft_init_guru(ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>, 1, &(ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>), ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>, &n_fftw, m, PRE_PH [...]
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> PRE_PSI| MALLOC_X| FFTW_INIT, FFTW_MEASURE);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = ths-><a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">npl [...]
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = ths-><a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a> & <a class="code" href="group__applications__fastgauss.html#ga39c3e544a78853e0da2b9a8c66d3054d" title="If this flag is set, the discrete Fourier coefficients of the uniformly sampled Gaussian are used ins...">FGT_APPROX_ [...]
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> {</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> fplan = fftw_plan_dft_1d(ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>, ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a>, ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a>, FFTW_FORWARD,</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> FFTW_MEASURE);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">for</span>(j=0; j<ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>; j++)</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a>[j] = cexp(-ths-><a class="code" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73" title="period, at least 1">p</a>*ths-><a class="code" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73" title="period, at least 1">p</a>*ths-><a class="code" href="structfgt_ [...]
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> ((<span class="keywordtype">double</span>)ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>*ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>)) / ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degre [...]
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a>, 1, &ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> fftw_execute(fplan);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a>, 1, &ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> fftw_destroy_plan(fplan);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> }</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> {</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">for</span>(j=0; j<ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>; j++)</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a>[j] = 1.0/ths-><a class="code" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73" title="period, at least 1">p</a> * csqrt(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/ths-><a class [...]
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> cexp(-<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*(j-ths-><a class="code" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1" title="expansion degree">n</a>/2)*(j-ths- [...]
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> (ths-><a class="code" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73" title="period, at least 1">p</a>*ths-><a class="code" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73" title="period, at least 1">p</a>*ths-><a class="code" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666" title="parameter of the Gaussian">sigma</a>));</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> }</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga44cf9a6fb0a16df875f613f343fd5c65"> 240</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#ga44cf9a6fb0a16df875f613f343fd5c65" title="Initialisation of a transform plan, simple.">fgt_init</a>(<a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> *ths, <span class=" [...]
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> {</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordtype">double</span> p;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordtype">int</span> n;</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> p=0.5+sqrt(-log(eps)/creal(sigma));</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">if</span>(p<1)</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> p=1;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> n=2*((int)ceil(p*cabs(sigma)/<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a> * sqrt(-log(eps)/creal(sigma))));</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">if</span>(N*M<=((<span class="keywordtype">int</span>)(1U<<20)))</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <a class="code" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff" title="Initialisation of a transform plan, guru.">fgt_init_guru</a>(ths, N, M, sigma, n, p, 7, <a class="code" href="group__applications__fastgauss.html#ga48aa1ec81a29b9f079701246f0b53ccc" title="If this flag is set, the whole matrix is precomputed and stored for the discrete Gauss transfrom...">DGT_PRE_CEXP</a>);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <a class="code" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff" title="Initialisation of a transform plan, guru.">fgt_init_guru</a>(ths, N, M, sigma, n, p, 7, 0);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> }</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga9d8f6229d33bc49f618838b21b3dd7fc"> 263</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#ga9d8f6229d33bc49f618838b21b3dd7fc" title="Initialisation of a transform plan, depends on source and target nodes.">fgt_init_node_dependent</a>(<a class="code" href="structfgt__plan.html" title="Structure for the Gauss t [...]
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> {</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordtype">int</span> j,k,l;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a> & <a class="code" href="group__applications__fastgauss.html#ga48aa1ec81a29b9f079701246f0b53ccc" title="If this flag is set, the whole matrix is precomputed and stored for the discrete Gauss transfrom...">DGT_PRE_CEXP</a>)</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> {</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> ths-><a class="code" href="structfgt__plan.html#ad7d9387df7df72e3d5d628d7e429c2a2" title="precomputed values for dgt">pre_cexp</a>=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>*ths-><a cla [...]
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">for</span>(j=0,l=0; j<ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>; j++)</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">for</span>(k=0; k<ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>; k++,l++)</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> ths-><a class="code" href="structfgt__plan.html#ad7d9387df7df72e3d5d628d7e429c2a2" title="precomputed values for dgt">pre_cexp</a>[l]=cexp(-ths-><a class="code" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666" title="parameter of the Gaussian">sigma</a>*(ths-><a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056" title="target nodes in ">y</a>[j]-ths-><a [...]
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> (ths-><a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056" title="target nodes in ">y</a>[j]-ths-><a class="code" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93" title="source nodes in ">x</a>[k]));</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> }</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">for</span>(j=0; j<ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j] = ths-><a class="code" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93" title="source nodes in ">x</a>[j]/ths-><a class=" [...]
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">for</span>(j=0; j<ths->nplan2->M_total; j++)</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j] = ths-><a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056" title="target nodes in ">y</a>[j]/ths-><a class=" [...]
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> nfft_precompute_psi(ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>);</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> nfft_precompute_psi(ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> }</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga4634fe28b9e1be61106871cf0e61ef83"> 295</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#ga4634fe28b9e1be61106871cf0e61ef83" title="Destroys the transform plan.">fgt_finalize</a>(<a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> *ths)</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> {</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> nfft_finalize(ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> nfft_finalize(ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163" title="target nfft plan">nplan2</a>);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2" title="source nfft plan">nplan1</a>);</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4" title="expansion coefficients">b</a>);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056" title="target nodes in ">y</a>);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93" title="source nodes in ">x</a>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> }</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga317a464dbf2df948bb94ef5748710e57"> 318</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#ga317a464dbf2df948bb94ef5748710e57" title="Random initialisation of a fgt plan.">fgt_test_init_rand</a>(<a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> *ths)</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> {</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">for</span>(k=0; k<ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>; k++)</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> ths-><a class="code" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93" title="source nodes in ">x</a>[k] = (<span class="keywordtype">double</span>)rand()/(2.0*RAND_MAX)-1.0/4.0;</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">for</span>(j=0; j<ths-><a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>; j++)</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> ths-><a class="code" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056" title="target nodes in ">y</a>[j] = (<span class="keywordtype">double</span>)rand()/(2.0*RAND_MAX)-1.0/4.0;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">for</span>(k=0; k<ths-><a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>; k++)</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> ths-><a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>[k] = (<span class="keywordtype">double</span>)rand()/(RAND_MAX)-1.0/2.0</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> + _Complex_I*(<span class="keywordtype">double</span>)rand()/(RAND_MAX)-I/2.0;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> }</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#gabebca8cc0714b36c3b47e2a5d0317960"> 341</a></span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastgauss.html#gabebca8cc0714b36c3b47e2a5d0317960" title="Compares execution times for the fast and discrete Gauss transform.">fgt_test_measure_time</a>(<a class="code" href="structfgt__plan.html" title="Structure for the Gauss trans [...]
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> {</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> ticks t0, t1;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordtype">double</span> t_out;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordtype">double</span> tau=0.01;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> t_out=0;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> r=0;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">while</span>(t_out<tau)</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> {</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> r++;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> t0 = getticks();</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">if</span> (dgt)</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <a class="code" href="group__applications__fastgauss.html#ga42f141fc768ced46eb2dac284b063b80" title="Executes the discrete Gauss transform.">dgt_trafo</a>(ths);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <a class="code" href="group__applications__fastgauss.html#gab12b6f7c36927db24d8555484dcdfde0" title="Executes the fast Gauss transform.">fgt_trafo</a>(ths);</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> t1 = getticks();</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> t_out += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> t_out/=r;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="keywordflow">return</span> t_out;</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> }</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga74b5dd8d6f593462a2b37b290ad4d227"> 375</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#ga74b5dd8d6f593462a2b37b290ad4d227" title="Simple example that computes fast and discrete Gauss transforms.">fgt_test_simple</a>(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class [...]
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> {</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> my_plan;</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordtype">double</span> _Complex *swap_dgt;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <a class="code" href="group__applications__fastgauss.html#ga44cf9a6fb0a16df875f613f343fd5c65" title="Initialisation of a transform plan, simple.">fgt_init</a>(&my_plan, N, M, sigma, eps);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> swap_dgt = (<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(my_plan.<a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <a class="code" href="group__applications__fastgauss.html#ga317a464dbf2df948bb94ef5748710e57" title="Random initialisation of a fgt plan.">fgt_test_init_rand</a>(&my_plan);</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <a class="code" href="group__applications__fastgauss.html#ga9d8f6229d33bc49f618838b21b3dd7fc" title="Initialisation of a transform plan, depends on source and target nodes.">fgt_init_node_dependent</a>(&my_plan);</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_dgt,my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <a class="code" href="group__applications__fastgauss.html#ga42f141fc768ced46eb2dac284b063b80" title="Executes the discrete Gauss transform.">dgt_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>,my_plan.<a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>,<span class="stringliteral [...]
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_dgt,my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <a class="code" href="group__applications__fastgauss.html#gab12b6f7c36927db24d8555484dcdfde0" title="Executes the fast Gauss transform.">fgt_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>,my_plan.<a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>,<span class="stringliteral [...]
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> printf(<span class="stringliteral">"\n relative error: %1.3e\n"</span>, X(error_l_infty_1_complex)(swap_dgt,</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>, my_plan.<a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>, my_plan.<a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>, my_plan.<a class="code" href="struct [...]
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swap_dgt);</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <a class="code" href="group__applications__fastgauss.html#ga4634fe28b9e1be61106871cf0e61ef83" title="Destroys the transform plan.">fgt_finalize</a>(&my_plan);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> }</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#gaac05fa78924012be74e54ddbd098892f"> 410</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#gaac05fa78924012be74e54ddbd098892f" title="Compares accuracy and execution time of the fast Gauss transform with increasing expansion degree...">fgt_test_andersson</a>(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> {</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> my_plan;</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordtype">double</span> _Complex *swap_dgt;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordtype">int</span> N;</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keywordtype">double</span> _Complex sigma=4*(138+ _Complex_I*100);</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="keywordtype">int</span> n=128;</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="keywordtype">int</span> N_dgt_pre_exp=(int)(1U<<11);</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="keywordtype">int</span> N_dgt=(int)(1U<<19);</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> printf(<span class="stringliteral">"n=%d, sigma=%1.3e+i%1.3e\n"</span>,n,creal(sigma),cimag(sigma));</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keywordflow">for</span>(N=((<span class="keywordtype">int</span>)(1U<<6)); N<((int)(1U<<22)); N=N<<1)</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> {</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> printf(<span class="stringliteral">"$%d$\t & "</span>,N);</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">if</span>(N<N_dgt_pre_exp)</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <a class="code" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff" title="Initialisation of a transform plan, guru.">fgt_init_guru</a>(&my_plan, N, N, sigma, n, 1, 7, <a class="code" href="group__applications__fastgauss.html#ga48aa1ec81a29b9f079701246f0b53ccc" title="If this flag is set, the whole matrix is precomputed and stored for the discrete Gauss transfrom...">DGT_PR [...]
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <a class="code" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff" title="Initialisation of a transform plan, guru.">fgt_init_guru</a>(&my_plan, N, N, sigma, n, 1, 7, 0);</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> swap_dgt = (<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(my_plan.<a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>*</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <a class="code" href="group__applications__fastgauss.html#ga317a464dbf2df948bb94ef5748710e57" title="Random initialisation of a fgt plan.">fgt_test_init_rand</a>(&my_plan);</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <a class="code" href="group__applications__fastgauss.html#ga9d8f6229d33bc49f618838b21b3dd7fc" title="Initialisation of a transform plan, depends on source and target nodes.">fgt_init_node_dependent</a>(&my_plan);</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">if</span>(N<N_dgt)</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> {</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_dgt,my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keywordflow">if</span>(N<N_dgt_pre_exp)</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> my_plan.<a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a>^=<a class="code" href="group__applications__fastgauss.html#ga48aa1ec81a29b9f079701246f0b53ccc" title="If this flag is set, the whole matrix is precomputed and stored for the discrete Gauss transfrom...">DGT_PRE_CEXP</a>;</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> printf(<span class="stringliteral">"$%1.1e$\t & "</span>,<a class="code" href="group__applications__fastgauss.html#gabebca8cc0714b36c3b47e2a5d0317960" title="Compares execution times for the fast and discrete Gauss transform.">fgt_test_measure_time</a>(&my_plan, 1));</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keywordflow">if</span>(N<N_dgt_pre_exp)</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> my_plan.<a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a>^=<a class="code" href="group__applications__fastgauss.html#ga48aa1ec81a29b9f079701246f0b53ccc" title="If this flag is set, the whole matrix is precomputed and stored for the discrete Gauss transfrom...">DGT_PRE_CEXP</a>;</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_dgt,my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> }</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> printf(<span class="stringliteral">"\t\t & "</span>);</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keywordflow">if</span>(N<N_dgt_pre_exp)</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> printf(<span class="stringliteral">"$%1.1e$\t & "</span>,<a class="code" href="group__applications__fastgauss.html#gabebca8cc0714b36c3b47e2a5d0317960" title="Compares execution times for the fast and discrete Gauss transform.">fgt_test_measure_time</a>(&my_plan, 1));</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> printf(<span class="stringliteral">"\t\t & "</span>);</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> my_plan.<a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a>^=<a class="code" href="group__applications__fastgauss.html#ga38ab7e1022ff3c5b556ce93078a05d1e" title="If this flag is set, the fast Gauss transform uses the discrete instead of the fast Fourier transform...">FGT_NDFT</a>;</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> printf(<span class="stringliteral">"$%1.1e$\t & "</span>,<a class="code" href="group__applications__fastgauss.html#gabebca8cc0714b36c3b47e2a5d0317960" title="Compares execution times for the fast and discrete Gauss transform.">fgt_test_measure_time</a>(&my_plan, 0));</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> my_plan.<a class="code" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869" title="flags for precomputation and approximation type">flags</a>^=<a class="code" href="group__applications__fastgauss.html#ga38ab7e1022ff3c5b556ce93078a05d1e" title="If this flag is set, the fast Gauss transform uses the discrete instead of the fast Fourier transform...">FGT_NDFT</a>;</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> printf(<span class="stringliteral">"$%1.1e$\t & "</span>,<a class="code" href="group__applications__fastgauss.html#gabebca8cc0714b36c3b47e2a5d0317960" title="Compares execution times for the fast and discrete Gauss transform.">fgt_test_measure_time</a>(&my_plan, 0));</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> printf(<span class="stringliteral">"$%1.1e$\t \\\\ \n"</span>,</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> X(error_l_infty_1_complex)(swap_dgt, my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>, my_plan.<a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>,</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> my_plan.<a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>, my_plan.<a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>));</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> fflush(stdout);</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swap_dgt);</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <a class="code" href="group__applications__fastgauss.html#ga4634fe28b9e1be61106871cf0e61ef83" title="Destroys the transform plan.">fgt_finalize</a>(&my_plan);</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> fftw_cleanup();</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> }</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> }</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#gaab0a7e29242524d33269448fc4612946"> 481</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#gaab0a7e29242524d33269448fc4612946" title="Compares accuracy of the fast Gauss transform with increasing expansion degree.">fgt_test_error</a>(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> {</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> my_plan;</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="keywordtype">double</span> _Complex *swap_dgt;</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordtype">int</span> n,mi;</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keywordtype">double</span> _Complex sigma=4*(138+ _Complex_I*100);</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="keywordtype">int</span> N=1000;</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordtype">int</span> M=1000;</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="keywordtype">int</span> m[2]={7,3};</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> printf(<span class="stringliteral">"N=%d;\tM=%d;\nsigma=%1.3e+i*%1.3e;\n"</span>,N,M,creal(sigma),cimag(sigma));</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> printf(<span class="stringliteral">"error=[\n"</span>);</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> swap_dgt = (<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keywordflow">for</span>(n=8; n<=128; n+=4)</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> {</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> printf(<span class="stringliteral">"%d\t"</span>,n);</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keywordflow">for</span>(mi=0;mi<2;mi++)</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> {</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <a class="code" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff" title="Initialisation of a transform plan, guru.">fgt_init_guru</a>(&my_plan, N, M, sigma, n, 1, m[mi], 0);</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <a class="code" href="group__applications__fastgauss.html#ga317a464dbf2df948bb94ef5748710e57" title="Random initialisation of a fgt plan.">fgt_test_init_rand</a>(&my_plan);</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <a class="code" href="group__applications__fastgauss.html#ga9d8f6229d33bc49f618838b21b3dd7fc" title="Initialisation of a transform plan, depends on source and target nodes.">fgt_init_node_dependent</a>(&my_plan);</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_dgt,my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <a class="code" href="group__applications__fastgauss.html#ga42f141fc768ced46eb2dac284b063b80" title="Executes the discrete Gauss transform.">dgt_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_dgt,my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <a class="code" href="group__applications__fastgauss.html#gab12b6f7c36927db24d8555484dcdfde0" title="Executes the fast Gauss transform.">fgt_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> printf(<span class="stringliteral">"%1.3e\t"</span>, X(error_l_infty_1_complex)(swap_dgt, my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>,</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> my_plan.<a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>, my_plan.<a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>, my_plan.<a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>));</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> fflush(stdout);</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <a class="code" href="group__applications__fastgauss.html#ga4634fe28b9e1be61106871cf0e61ef83" title="Destroys the transform plan.">fgt_finalize</a>(&my_plan);</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> fftw_cleanup();</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> }</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> }</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> printf(<span class="stringliteral">"];\n"</span>);</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> </div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swap_dgt);</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> }</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#gab68ea529a033a478a391243d8dacf61b"> 532</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastgauss.html#gab68ea529a033a478a391243d8dacf61b" title="Compares accuracy of the fast Gauss transform with increasing expansion degree and different periodis...">fgt_test_error_p</a>(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> {</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <a class="code" href="structfgt__plan.html" title="Structure for the Gauss transform.">fgt_plan</a> my_plan;</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="keywordtype">double</span> _Complex *swap_dgt;</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="keywordtype">int</span> n,pi;</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="keywordtype">double</span> _Complex sigma=20+40*_Complex_I;</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="keywordtype">int</span> N=1000;</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="keywordtype">int</span> M=1000;</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="keywordtype">double</span> p[3]={1,1.5,2};</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> </div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> printf(<span class="stringliteral">"N=%d;\tM=%d;\nsigma=%1.3e+i*%1.3e;\n"</span>,N,M,creal(sigma),cimag(sigma));</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> printf(<span class="stringliteral">"error=[\n"</span>);</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> swap_dgt = (<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keywordflow">for</span>(n=8; n<=128; n+=4)</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> {</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> printf(<span class="stringliteral">"%d\t"</span>,n);</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="keywordflow">for</span>(pi=0;pi<3;pi++)</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> {</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <a class="code" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff" title="Initialisation of a transform plan, guru.">fgt_init_guru</a>(&my_plan, N, M, sigma, n, p[pi], 7, 0);</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <a class="code" href="group__applications__fastgauss.html#ga317a464dbf2df948bb94ef5748710e57" title="Random initialisation of a fgt plan.">fgt_test_init_rand</a>(&my_plan);</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <a class="code" href="group__applications__fastgauss.html#ga9d8f6229d33bc49f618838b21b3dd7fc" title="Initialisation of a transform plan, depends on source and target nodes.">fgt_init_node_dependent</a>(&my_plan);</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_dgt,my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <a class="code" href="group__applications__fastgauss.html#ga42f141fc768ced46eb2dac284b063b80" title="Executes the discrete Gauss transform.">dgt_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_dgt,my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> </div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <a class="code" href="group__applications__fastgauss.html#gab12b6f7c36927db24d8555484dcdfde0" title="Executes the fast Gauss transform.">fgt_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> printf(<span class="stringliteral">"%1.3e\t"</span>, X(error_l_infty_1_complex)(swap_dgt, my_plan.<a class="code" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1" title="target evaluations">f</a>,</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> my_plan.<a class="code" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa" title="number of target nodes">M</a>, my_plan.<a class="code" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a" title="source coefficients">alpha</a>, my_plan.<a class="code" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87" title="number of source nodes">N</a>));</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> fflush(stdout);</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <a class="code" href="group__applications__fastgauss.html#ga4634fe28b9e1be61106871cf0e61ef83" title="Destroys the transform plan.">fgt_finalize</a>(&my_plan);</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> fftw_cleanup();</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> }</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> }</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> printf(<span class="stringliteral">"];\n"</span>);</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> }</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> </div>
+<div class="line"><a name="l00580"></a><span class="lineno"><a class="code" href="group__applications__fastgauss.html#ga3c04138a5bfe5d72780bb7e82a18e627"> 580</a></span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> {</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="keywordflow">if</span>(argc!=2)</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> {</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> fprintf(stderr,<span class="stringliteral">"fastgauss type\n"</span>);</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> fprintf(stderr,<span class="stringliteral">" type\n"</span>);</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> fprintf(stderr,<span class="stringliteral">" 0 - Simple test.\n"</span>);</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> fprintf(stderr,<span class="stringliteral">" 1 - Compares accuracy and execution time.\n"</span>);</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> fprintf(stderr,<span class="stringliteral">" Pipe to output_andersson.tex\n"</span>);</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> fprintf(stderr,<span class="stringliteral">" 2 - Compares accuracy.\n"</span>);</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> fprintf(stderr,<span class="stringliteral">" Pipe to output_error.m\n"</span>);</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> fprintf(stderr,<span class="stringliteral">" 3 - Compares accuracy.\n"</span>);</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> fprintf(stderr,<span class="stringliteral">" Pipe to output_error_p.m\n"</span>);</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> }</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="keywordflow">if</span>(atoi(argv[1])==0)</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <a class="code" href="group__applications__fastgauss.html#ga74b5dd8d6f593462a2b37b290ad4d227" title="Simple example that computes fast and discrete Gauss transforms.">fgt_test_simple</a>(10, 10, 5+3*_Complex_I, 0.001);</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keywordflow">if</span>(atoi(argv[1])==1)</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <a class="code" href="group__applications__fastgauss.html#gaac05fa78924012be74e54ddbd098892f" title="Compares accuracy and execution time of the fast Gauss transform with increasing expansion degree...">fgt_test_andersson</a>();</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordflow">if</span>(atoi(argv[1])==2)</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <a class="code" href="group__applications__fastgauss.html#gaab0a7e29242524d33269448fc4612946" title="Compares accuracy of the fast Gauss transform with increasing expansion degree.">fgt_test_error</a>();</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> </div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="keywordflow">if</span>(atoi(argv[1])==3)</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <a class="code" href="group__applications__fastgauss.html#gab68ea529a033a478a391243d8dacf61b" title="Compares accuracy of the fast Gauss transform with increasing expansion degree and different periodis...">fgt_test_error_p</a>();</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> </div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> }</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/fastsumS2_8c_source.html b/doc/api/html/fastsumS2_8c_source.html
new file mode 100644
index 0000000..b051acc
--- /dev/null
+++ b/doc/api/html/fastsumS2_8c_source.html
@@ -0,0 +1,884 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastsumS2.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_224fe669cf662e4d4573ba584877a9b9.html">fastsumS2</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastsumS2.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: fastsumS2.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">/* standard headers */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">/* NFFT3 header */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">/* NFFT3 utilities */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment">/* Fourier-Legendre coefficients for Abel-Poisson kernel */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#define SYMBOL_ABEL_POISSON(k,h) (pow(h,k))</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment">/* Fourier-Legendre coefficients for singularity kernel */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#define SYMBOL_SINGULARITY(k,h) ((2.0/(2*k+1))*pow(h,k))</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">/* Flags for the different kernel functions */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga0452118afd292fc346ed8116915d001e"> 53</a></span> <span class="preprocessor">#define KT_ABEL_POISSON (0)</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga814ba1b58f017f7a67a85f68d4719814"> 55</a></span> <span class="preprocessor">#define KT_SINGULARITY (1)</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#gae2a54d1d59448d9f02697f89a6ec7306"> 57</a></span> <span class="preprocessor">#define KT_LOC_SUPP (2)</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga3a03d7fde39f1ba22a4549e72c8cbf39"> 59</a></span> <span class="preprocessor">#define KT_GAUSSIAN (3)</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#gad09943f93b91eb526d8081a4963eead8"> 62</a></span> <span class="keyword">enum</span> <a class="code" href="group__applications__fastsumS2__test.html#gad09943f93b91eb526d8081a4963eead8" title="Enumeration type for yes/no/both-type parameters.">pvalue</a> {NO = 0, YES = 1, BOTH = 2};</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga764f956ac40df99e776155bfa8da2e93"> 78</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastsumS2__test.html#ga764f956ac40df99e776155bfa8da2e93" title="Computes the standard inner product between two vectors on the unit sphere given in spher [...]
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">const</span> <span class="keywordtype">double</span> phi2, <span class="keyword">const</span> <span class="keywordtype">double</span> theta2)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> {</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">double</span> pi2theta1 = PI2*theta1, pi2theta2 = PI2*theta2;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">return</span> (cos(pi2theta1)*cos(pi2theta2)</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> + sin(pi2theta1)*sin(pi2theta2)*cos(PI2*(phi1-phi2)));</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> }</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga6db9bf5c4ee6ca573d6d08a8202a5314"> 97</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastsumS2__test.html#ga6db9bf5c4ee6ca573d6d08a8202a5314" title="Evaluates the Poisson kernel at a node .">poissonKernel</a>(<span class="keyword">const</s [...]
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">return</span> (1.0/(PI4))*((1.0-h)*(1.0+h))/pow(sqrt(1.0-2.0*h*x+h*h),3.0);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga3f82140c739f6fcf9bc17a03a09f580d"> 113</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastsumS2__test.html#ga3f82140c739f6fcf9bc17a03a09f580d" title="Evaluates the singularity kernel at a node .">singularityKernel</a>(<span class="keyword"> [...]
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">return</span> (1.0/(PI2))/sqrt(1.0-2.0*h*x+h*h);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga226aec741614e0a2d2a9305bc2c28063"> 131</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastsumS2__test.html#ga226aec741614e0a2d2a9305bc2c28063" title="Evaluates the locally supported kernel at a node .">locallySupportedKernel</a>(<span class [...]
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">const</span> <span class="keywordtype">double</span> lambda)</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> {</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">return</span> (x<=h)?(0.0):(pow((x-h),lambda));</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga22bfa09881115e4c4f8fef59538d1ce7"> 149</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastsumS2__test.html#ga22bfa09881115e4c4f8fef59538d1ce7" title="Evaluates the spherical Gaussian kernel at a node .">gaussianKernel</a>(<span class="keywo [...]
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> {</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">return</span> exp(2.0*sigma*(x-1.0));</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> }</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"><a class="code" href="group__applications__fastsumS2__test.html#ga3c04138a5bfe5d72780bb7e82a18e627"> 164</a></span> <span class="keywordtype">int</span> main (<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> {</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordtype">double</span> **p; <span class="comment">/* The array containing the parameter sets *</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="comment"> * for the kernel functions */</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordtype">int</span> *m; <span class="comment">/* The array containing the cut-off degrees M */</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordtype">int</span> **ld; <span class="comment">/* The array containing the numbers of source *</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment"> * and target nodes, L and D */</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordtype">int</span> ip; <span class="comment">/* Index variable for p */</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordtype">int</span> im; <span class="comment">/* Index variable for m */</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordtype">int</span> ild; <span class="comment">/* Index variable for l */</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordtype">int</span> ipp; <span class="comment">/* Index for kernel parameters */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordtype">int</span> ip_max; <span class="comment">/* The maximum index for p */</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordtype">int</span> im_max; <span class="comment">/* The maximum index for m */</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordtype">int</span> ild_max; <span class="comment">/* The maximum index for l */</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordtype">int</span> ipp_max; <span class="comment">/* The maximum index for ip */</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordtype">int</span> tc_max; <span class="comment">/* The number of testcases */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordtype">int</span> m_max; <span class="comment">/* The maximum cut-off degree M for the *</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment"> * current dataset */</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordtype">int</span> l_max; <span class="comment">/* The maximum number of source nodes L for *</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment"> * the current dataset */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordtype">int</span> d_max; <span class="comment">/* The maximum number of target nodes D for *</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment"> * the current dataset */</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordtype">long</span> ld_max_prec; <span class="comment">/* The maximum number of source and target *</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="comment"> * nodes for precomputation multiplied */</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordtype">long</span> l_max_prec; <span class="comment">/* The maximum number of source nodes for *</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment"> * precomputation */</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordtype">int</span> tc; <span class="comment">/* Index variable for testcases */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">int</span> kt; <span class="comment">/* The kernel function */</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordtype">int</span> cutoff; <span class="comment">/* The current NFFT cut-off parameter */</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordtype">double</span> threshold; <span class="comment">/* The current NFSFT threshold parameter */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordtype">double</span> t_d; <span class="comment">/* Time for direct algorithm in seconds */</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">double</span> t_dp; <span class="comment">/* Time for direct algorithm with *</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment"> precomputation in seconds */</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordtype">double</span> t_fd; <span class="comment">/* Time for fast direct algorithm in seconds */</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordtype">double</span> t_f; <span class="comment">/* Time for fast algorithm in seconds */</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordtype">double</span> temp; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordtype">double</span> err_f; <span class="comment">/* Error E_infty for fast algorithm */</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordtype">double</span> err_fd; <span class="comment">/* Error E_\infty for fast direct algorithm */</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> ticks t0, t1; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordtype">int</span> precompute = NO; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> fftw_complex *ptr; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordtype">double</span>* steed; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> fftw_complex *b; <span class="comment">/* The weights (b_l)_{l=0}^{L-1} */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> fftw_complex *f_hat; <span class="comment">/* The spherical Fourier coefficients */</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> fftw_complex *a; <span class="comment">/* The Fourier-Legendre coefficients */</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordtype">double</span> *xi; <span class="comment">/* Target nodes */</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordtype">double</span> *eta; <span class="comment">/* Source nodes */</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> fftw_complex *f_m; <span class="comment">/* Approximate function values */</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> fftw_complex *f; <span class="comment">/* Exact function values */</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> fftw_complex *prec = NULL; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan; <span class="comment">/* NFSFT plan */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan_adjoint; <span class="comment">/* adjoint NFSFT plan */</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordtype">int</span> i; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordtype">int</span> k; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordtype">int</span> n; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordtype">int</span> d; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordtype">int</span> l; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordtype">int</span> use_nfsft; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordtype">int</span> use_nfft; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordtype">int</span> use_fpt; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordtype">int</span> rinc; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordtype">double</span> constant; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment">/* Read the number of testcases. */</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> fscanf(stdin,<span class="stringliteral">"testcases=%d\n"</span>,&tc_max);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,tc_max);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="comment">/* Process each testcase. */</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">for</span> (tc = 0; tc < tc_max; tc++)</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> {</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="comment">/* Check if the fast transform shall be used. */</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> fscanf(stdin,<span class="stringliteral">"nfsft=%d\n"</span>,&use_nfsft);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,use_nfsft);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> {</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment">/* Check if the NFFT shall be used. */</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> fscanf(stdin,<span class="stringliteral">"nfft=%d\n"</span>,&use_nfft);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,use_nfft);</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">if</span> (use_nfft != NO)</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> {</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="comment">/* Read the cut-off parameter. */</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> fscanf(stdin,<span class="stringliteral">"cutoff=%d\n"</span>,&cutoff);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,cutoff);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> }</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> {</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="comment">/* TODO remove this */</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="comment">/* Initialize unused variable with dummy value. */</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> cutoff = 1;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> }</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="comment">/* Check if the fast polynomial transform shall be used. */</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> fscanf(stdin,<span class="stringliteral">"fpt=%d\n"</span>,&use_fpt);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,use_fpt);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="comment">/* Read the NFSFT threshold parameter. */</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> fscanf(stdin,<span class="stringliteral">"threshold=%lf\n"</span>,&threshold);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> fprintf(stdout,<span class="stringliteral">"%lf\n"</span>,threshold);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> }</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> {</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="comment">/* TODO remove this */</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="comment">/* Set dummy values. */</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> cutoff = 3;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> threshold = 1000000000000.0;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> }</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="comment">/* Initialize bandwidth bound. */</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> m_max = 0;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="comment">/* Initialize source nodes bound. */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> l_max = 0;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="comment">/* Initialize target nodes bound. */</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> d_max = 0;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="comment">/* Initialize source nodes bound for precomputation. */</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> l_max_prec = 0;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="comment">/* Initialize source and target nodes bound for precomputation. */</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> ld_max_prec = 0;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="comment">/* Read the kernel type. This is one of KT_ABEL_POISSON, KT_SINGULARITY,</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="comment"> * KT_LOC_SUPP and KT_GAUSSIAN. */</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> fscanf(stdin,<span class="stringliteral">"kernel=%d\n"</span>,&kt);</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,kt);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="comment">/* Read the number of parameter sets. */</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> fscanf(stdin,<span class="stringliteral">"parameter_sets=%d\n"</span>,&ip_max);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,ip_max);</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="comment">/* Allocate memory for pointers to parameter sets. */</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> p = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ip_max*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="comment">/* We now read in the parameter sets. */</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment">/* Read number of parameters. */</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> fscanf(stdin,<span class="stringliteral">"parameters=%d\n"</span>,&ipp_max);</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,ipp_max);</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">for</span> (ip = 0; ip < ip_max; ip++)</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> {</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="comment">/* Allocate memory for the parameters. */</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> p[ip] = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ipp_max*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="comment">/* Read the parameters. */</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">for</span> (ipp = 0; ipp < ipp_max; ipp++)</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> {</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="comment">/* Read the next parameter. */</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> fscanf(stdin,<span class="stringliteral">"%lf\n"</span>,&p[ip][ipp]);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> fprintf(stdout,<span class="stringliteral">"%lf\n"</span>,p[ip][ipp]);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> }</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> }</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment">/* Read the number of cut-off degrees. */</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> fscanf(stdin,<span class="stringliteral">"bandwidths=%d\n"</span>,&im_max);</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,im_max);</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> m = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(im_max*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="comment">/* Read the cut-off degrees. */</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">for</span> (im = 0; im < im_max; im++)</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> {</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="comment">/* Read cut-off degree. */</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> fscanf(stdin,<span class="stringliteral">"%d\n"</span>,&m[im]);</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,m[im]);</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> m_max = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(m_max,m[im]);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> }</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="comment">/* Read number of node specifications. */</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> fscanf(stdin,<span class="stringliteral">"node_sets=%d\n"</span>,&ild_max);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,ild_max);</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> ld = (<span class="keywordtype">int</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ild_max*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>*));</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="comment">/* Read the run specification. */</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">for</span> (ild = 0; ild < ild_max; ild++)</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> {</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="comment">/* Allocate memory for the run parameters. */</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> ld[ild] = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="comment">/* Read number of source nodes. */</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> fscanf(stdin,<span class="stringliteral">"L=%d "</span>,&ld[ild][0]);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,ld[ild][0]);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> l_max = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(l_max,ld[ild][0]);</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="comment">/* Read number of target nodes. */</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> fscanf(stdin,<span class="stringliteral">"D=%d "</span>,&ld[ild][1]);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,ld[ild][1]);</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> d_max = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(d_max,ld[ild][1]);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="comment">/* Determine whether direct and fast algorithm shall be compared. */</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> fscanf(stdin,<span class="stringliteral">"compare=%d "</span>,&ld[ild][2]);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,ld[ild][2]);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="comment">/* Check if precomputation for the direct algorithm is used. */</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">if</span> (ld[ild][2] == YES)</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> {</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="comment">/* Read whether the precomputed version shall also be used. */</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> fscanf(stdin,<span class="stringliteral">"precomputed=%d\n"</span>,&ld[ild][3]);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,ld[ild][3]);</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="comment">/* Read the number of repetitions over which measurements are</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="comment"> * averaged. */</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> fscanf(stdin,<span class="stringliteral">"repetitions=%d\n"</span>,&ld[ild][4]);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,ld[ild][4]);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="comment">/* Update ld_max_prec and l_max_prec. */</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">if</span> (ld[ild][3] == YES)</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> {</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="comment">/* Update ld_max_prec. */</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> ld_max_prec = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(ld_max_prec,ld[ild][0]*ld[ild][1]);</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="comment">/* Update l_max_prec. */</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> l_max_prec = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(l_max_prec,ld[ild][0]);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="comment">/* Turn on the precomputation for the direct algorithm. */</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> precompute = YES;</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> }</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> }</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> {</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="comment">/* Set default value for the number of repetitions. */</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> ld[ild][4] = 1;</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> }</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> }</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="comment">/* Allocate memory for data structures. */</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> b = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(l_max*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> eta = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*l_max*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> f_hat = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(NFSFT_F_HAT_SIZE(m_max)*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> a = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((m_max+1)*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> xi = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*d_max*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> f_m = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d_max*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> f = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d_max*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="comment">/* Allocate memory for precomputed data. */</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">if</span> (precompute == YES)</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> {</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> prec = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ld_max_prec*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> }</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="comment">/* Generate random source nodes and weights. */</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">for</span> (l = 0; l < l_max; l++)</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> {</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> b[l] = (((double)rand())/RAND_MAX) - 0.5;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> eta[2*l] = (((double)rand())/RAND_MAX) - 0.5;</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> eta[2*l+1] = acos(2.0*(((<span class="keywordtype">double</span>)rand())/RAND_MAX) - 1.0)/(PI2);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> }</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="comment">/* Generate random target nodes. */</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keywordflow">for</span> (d = 0; d < d_max; d++)</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> {</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> xi[2*d] = (((double)rand())/RAND_MAX) - 0.5;</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> xi[2*d+1] = acos(2.0*(((<span class="keywordtype">double</span>)rand())/RAND_MAX) - 1.0)/(PI2);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> }</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="comment">/* Do precomputation. */</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> nfsft_precompute(m_max,threshold,</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> ((use_nfsft==NO)?(NFSFT_NO_FAST_ALGORITHM):(0U<span class="comment">/*NFSFT_NO_DIRECT_ALGORITHM*/</span>)), 0U);</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="comment">/* Process all parameter sets. */</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keywordflow">for</span> (ip = 0; ip < ip_max; ip++)</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> {</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="comment">/* Compute kernel coeffcients up to the maximum cut-off degree m_max. */</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="keywordflow">switch</span> (kt)</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> {</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga0452118afd292fc346ed8116915d001e" title="Abel-Poisson kernel.">KT_ABEL_POISSON</a>:</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="comment">/* Compute Fourier-Legendre coefficients for the Poisson kernel. */</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keywordflow">for</span> (k = 0; k <= m_max; k++)</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> a[k] = SYMBOL_ABEL_POISSON(k,p[ip][0]);</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga814ba1b58f017f7a67a85f68d4719814" title="Singularity kernel.">KT_SINGULARITY</a>:</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="comment">/* Compute Fourier-Legendre coefficients for the singularity</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="comment"> * kernel. */</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keywordflow">for</span> (k = 0; k <= m_max; k++)</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> a[k] = SYMBOL_SINGULARITY(k,p[ip][0]);</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#gae2a54d1d59448d9f02697f89a6ec7306" title="Locally supported kernel.">KT_LOC_SUPP</a>:</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="comment">/* Compute Fourier-Legendre coefficients for the locally supported</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="comment"> * kernel. */</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> a[0] = 1.0;</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="keywordflow">if</span> (1 <= m_max)</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> a[1] = ((p[ip][1]+1+p[ip][0])/(p[ip][1]+2.0))*a[0];</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="keywordflow">for</span> (k = 2; k <= m_max; k++)</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> a[k] = (1.0/(k+p[ip][1]+1))*((2*k-1)*p[ip][0]*a[k-1] -</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> (k-p[ip][1]-2)*a[k-2]);</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga3a03d7fde39f1ba22a4549e72c8cbf39" title="Gaussian kernel.">KT_GAUSSIAN</a>:</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="comment">/* Fourier-Legendre coefficients */</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> steed = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((m_max+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <a class="code" href="group__nfftutil.html#ga2decee6fe50d50797a82737ba82cf97a" title="Calculates the modified bessel function , possibly scaled by , for real non-negative with ...">nfft_smbi</a>(2.0*p[ip][0],0.5,m_max+1,2,steed);</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="keywordflow">for</span> (k = 0; k <= m_max; k++)</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> a[k] = PI2*(sqrt(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/p[ip][0]))*steed[k];</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(steed);</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> }</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="comment">/* Normalize Fourier-Legendre coefficients. */</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="keywordflow">for</span> (k = 0; k <= m_max; k++)</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> a[k] *= (2*k+1)/(PI4);</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="comment">/* Process all node sets. */</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keywordflow">for</span> (ild = 0; ild < ild_max; ild++)</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> {</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="comment">/* Check if the fast algorithm shall be used. */</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordflow">if</span> (ld[ild][2] != NO)</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> {</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="comment">/* Check if the direct algorithm with precomputation should be</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="comment"> * tested. */</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="keywordflow">if</span> (ld[ild][3] != NO)</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> {</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="comment">/* Get pointer to start of data. */</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> ptr = prec;</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="comment">/* Calculate increment from one row to the next. */</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> rinc = l_max_prec-ld[ild][0];</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="comment">/* Process al target nodes. */</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="keywordflow">for</span> (d = 0; d < ld[ild][1]; d++)</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> {</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="comment">/* Process all source nodes. */</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keywordflow">for</span> (l = 0; l < ld[ild][0]; l++)</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> {</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="comment">/* Compute inner product between current source and target</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="comment"> * node. */</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> temp = <a class="code" href="group__applications__fastsumS2__test.html#ga764f956ac40df99e776155bfa8da2e93" title="Computes the standard inner product between two vectors on the unit sphere given in spherical coord...">innerProduct</a>(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="comment">/* Switch by the kernel type. */</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="keywordflow">switch</span> (kt)</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> {</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga0452118afd292fc346ed8116915d001e" title="Abel-Poisson kernel.">KT_ABEL_POISSON</a>:</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="comment">/* Evaluate the Poisson kernel for the current value. */</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> *ptr++ = <a class="code" href="group__applications__fastsumS2__test.html#ga6db9bf5c4ee6ca573d6d08a8202a5314" title="Evaluates the Poisson kernel at a node .">poissonKernel</a>(temp,p[ip][0]);</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> </div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga814ba1b58f017f7a67a85f68d4719814" title="Singularity kernel.">KT_SINGULARITY</a>:</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="comment">/* Evaluate the singularity kernel for the current</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="comment"> * value. */</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> *ptr++ = <a class="code" href="group__applications__fastsumS2__test.html#ga3f82140c739f6fcf9bc17a03a09f580d" title="Evaluates the singularity kernel at a node .">singularityKernel</a>(temp,p[ip][0]);</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#gae2a54d1d59448d9f02697f89a6ec7306" title="Locally supported kernel.">KT_LOC_SUPP</a>:</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="comment">/* Evaluate the localized kernel for the current</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="comment"> * value. */</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> *ptr++ = <a class="code" href="group__applications__fastsumS2__test.html#ga226aec741614e0a2d2a9305bc2c28063" title="Evaluates the locally supported kernel at a node .">locallySupportedKernel</a>(temp,p[ip][0],p[ip][1]);</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga3a03d7fde39f1ba22a4549e72c8cbf39" title="Gaussian kernel.">KT_GAUSSIAN</a>:</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="comment">/* Evaluate the spherical Gaussian kernel for the current</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="comment"> * value. */</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> *ptr++ = <a class="code" href="group__applications__fastsumS2__test.html#ga22bfa09881115e4c4f8fef59538d1ce7" title="Evaluates the spherical Gaussian kernel at a node .">gaussianKernel</a>(temp,p[ip][0]);</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> }</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> }</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="comment">/* Increment pointer for next row. */</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> ptr += rinc;</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> }</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="comment">/* Initialize cumulative time variable. */</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> t_dp = 0.0;</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="comment">/* Initialize time measurement. */</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> t0 = getticks();</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="comment">/* Cycle through all runs. */</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="keywordflow">for</span> (i = 0; i < ld[ild][4]; i++)</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> {</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> </div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="comment">/* Reset pointer to start of precomputed data. */</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> ptr = prec;</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="comment">/* Calculate increment from one row to the next. */</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> rinc = l_max_prec-ld[ild][0];</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="comment">/* Check if the localized kernel is used. */</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="keywordflow">if</span> (kt == <a class="code" href="group__applications__fastsumS2__test.html#gae2a54d1d59448d9f02697f89a6ec7306" title="Locally supported kernel.">KT_LOC_SUPP</a>)</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> {</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="comment">/* Perform final summation */</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="comment">/* Calculate the multiplicative constant. */</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> constant = ((p[ip][1]+1)/(PI2*pow(1-p[ip][0],p[ip][1]+1)));</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="comment">/* Process all target nodes. */</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="keywordflow">for</span> (d = 0; d < ld[ild][1]; d++)</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> {</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="comment">/* Initialize function value. */</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> f[d] = 0.0;</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="comment">/* Process all source nodes. */</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="keywordflow">for</span> (l = 0; l < ld[ild][0]; l++)</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> f[d] += b[l]*(*ptr++);</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="comment">/* Multiply with the constant. */</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> f[d] *= constant;</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="comment">/* Proceed to next row. */</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> ptr += rinc;</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> }</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> }</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> {</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="comment">/* Process all target nodes. */</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">for</span> (d = 0; d < ld[ild][1]; d++)</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> {</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="comment">/* Initialize function value. */</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> f[d] = 0.0;</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="comment">/* Process all source nodes. */</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">for</span> (l = 0; l < ld[ild][0]; l++)</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> f[d] += b[l]*(*ptr++);</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> </div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="comment">/* Proceed to next row. */</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> ptr += rinc;</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> }</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> }</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> }</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="comment">/* Calculate the time needed. */</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> t1 = getticks();</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> t_dp = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="comment">/* Calculate average time needed. */</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> t_dp = t_dp/((double)ld[ild][4]);</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> }</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> {</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="comment">/* Initialize cumulative time variable with dummy value. */</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> t_dp = -1.0;</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> }</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="comment">/* Initialize cumulative time variable. */</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> t_d = 0.0;</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="comment">/* Initialize time measurement. */</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> t0 = getticks();</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="comment">/* Cycle through all runs. */</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordflow">for</span> (i = 0; i < ld[ild][4]; i++)</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> {</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="comment">/* Switch by the kernel type. */</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="keywordflow">switch</span> (kt)</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> {</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga0452118afd292fc346ed8116915d001e" title="Abel-Poisson kernel.">KT_ABEL_POISSON</a>:</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="comment">/* Process all target nodes. */</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordflow">for</span> (d = 0; d < ld[ild][1]; d++)</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> {</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="comment">/* Initialize function value. */</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> f[d] = 0.0;</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="comment">/* Process all source nodes. */</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="keywordflow">for</span> (l = 0; l < ld[ild][0]; l++)</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> {</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="comment">/* Compute the inner product for the current source and</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="comment"> * target nodes. */</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> temp = <a class="code" href="group__applications__fastsumS2__test.html#ga764f956ac40df99e776155bfa8da2e93" title="Computes the standard inner product between two vectors on the unit sphere given in spherical coord...">innerProduct</a>(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> </div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="comment">/* Evaluate the Poisson kernel for the current value and add</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="comment"> * to the result. */</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> f[d] += b[l]*<a class="code" href="group__applications__fastsumS2__test.html#ga6db9bf5c4ee6ca573d6d08a8202a5314" title="Evaluates the Poisson kernel at a node .">poissonKernel</a>(temp,p[ip][0]);</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> }</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> }</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> </div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga814ba1b58f017f7a67a85f68d4719814" title="Singularity kernel.">KT_SINGULARITY</a>:</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="comment">/* Process all target nodes. */</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="keywordflow">for</span> (d = 0; d < ld[ild][1]; d++)</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> {</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="comment">/* Initialize function value. */</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> f[d] = 0.0;</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> </div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="comment">/* Process all source nodes. */</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">for</span> (l = 0; l < ld[ild][0]; l++)</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> {</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="comment">/* Compute the inner product for the current source and</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="comment"> * target nodes. */</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> temp = <a class="code" href="group__applications__fastsumS2__test.html#ga764f956ac40df99e776155bfa8da2e93" title="Computes the standard inner product between two vectors on the unit sphere given in spherical coord...">innerProduct</a>(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> </div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="comment">/* Evaluate the Poisson kernel for the current value and add</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="comment"> * to the result. */</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> f[d] += b[l]*<a class="code" href="group__applications__fastsumS2__test.html#ga3f82140c739f6fcf9bc17a03a09f580d" title="Evaluates the singularity kernel at a node .">singularityKernel</a>(temp,p[ip][0]);</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> }</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> }</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#gae2a54d1d59448d9f02697f89a6ec7306" title="Locally supported kernel.">KT_LOC_SUPP</a>:</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="comment">/* Calculate the multiplicative constant. */</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> constant = ((p[ip][1]+1)/(PI2*pow(1-p[ip][0],p[ip][1]+1)));</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> </div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="comment">/* Process all target nodes. */</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="keywordflow">for</span> (d = 0; d < ld[ild][1]; d++)</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> {</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="comment">/* Initialize function value. */</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> f[d] = 0.0;</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="comment">/* Process all source nodes. */</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="keywordflow">for</span> (l = 0; l < ld[ild][0]; l++)</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> {</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="comment">/* Compute the inner product for the current source and</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="comment"> * target nodes. */</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> temp = <a class="code" href="group__applications__fastsumS2__test.html#ga764f956ac40df99e776155bfa8da2e93" title="Computes the standard inner product between two vectors on the unit sphere given in spherical coord...">innerProduct</a>(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="comment">/* Evaluate the Poisson kernel for the current value and add</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="comment"> * to the result. */</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> f[d] += b[l]*<a class="code" href="group__applications__fastsumS2__test.html#ga226aec741614e0a2d2a9305bc2c28063" title="Evaluates the locally supported kernel at a node .">locallySupportedKernel</a>(temp,p[ip][0],p[ip][1]);</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> }</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> </div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="comment">/* Multiply result with constant. */</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> f[d] *= constant;</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> }</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> </div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="keywordflow">case</span> <a class="code" href="group__applications__fastsumS2__test.html#ga3a03d7fde39f1ba22a4549e72c8cbf39" title="Gaussian kernel.">KT_GAUSSIAN</a>:</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="comment">/* Process all target nodes. */</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="keywordflow">for</span> (d = 0; d < ld[ild][1]; d++)</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> {</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="comment">/* Initialize function value. */</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> f[d] = 0.0;</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> </div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="comment">/* Process all source nodes. */</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="keywordflow">for</span> (l = 0; l < ld[ild][0]; l++)</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> {</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="comment">/* Compute the inner product for the current source and</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="comment"> * target nodes. */</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> temp = <a class="code" href="group__applications__fastsumS2__test.html#ga764f956ac40df99e776155bfa8da2e93" title="Computes the standard inner product between two vectors on the unit sphere given in spherical coord...">innerProduct</a>(eta[2*l],eta[2*l+1],xi[2*d],xi[2*d+1]);</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="comment">/* Evaluate the Poisson kernel for the current value and add</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="comment"> * to the result. */</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> f[d] += b[l]*<a class="code" href="group__applications__fastsumS2__test.html#ga22bfa09881115e4c4f8fef59538d1ce7" title="Evaluates the spherical Gaussian kernel at a node .">gaussianKernel</a>(temp,p[ip][0]);</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> }</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> }</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> }</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> }</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="comment">/* Calculate and add the time needed. */</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> t1 = getticks();</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> t_d = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="comment">/* Calculate average time needed. */</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> t_d = t_d/((double)ld[ild][4]);</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> }</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> {</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="comment">/* Initialize cumulative time variable with dummy value. */</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> t_d = -1.0;</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> t_dp = -1.0;</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> }</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> </div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="comment">/* Initialize error and cumulative time variables for the fast</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="comment"> * algorithm. */</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> err_fd = -1.0;</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> err_f = -1.0;</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> t_fd = -1.0;</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> t_f = -1.0;</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="comment">/* Process all cut-off bandwidths. */</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="keywordflow">for</span> (im = 0; im < im_max; im++)</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> {</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="comment">/* Init transform plans. */</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> nfsft_init_guru(&plan_adjoint, m[im],ld[ild][0],</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> ((use_nfft!=0)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> ((use_fpt!=0)?(0U):(NFSFT_USE_DPT)),</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> PRE_PHI_HUT | PRE_PSI | FFTW_INIT |</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> FFT_OUT_OF_PLACE, cutoff);</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> nfsft_init_guru(&plan,m[im],ld[ild][1],</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> ((use_nfft!=0)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> ((use_fpt!=0)?(0U):(NFSFT_USE_DPT)),</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> PRE_PHI_HUT | PRE_PSI | FFTW_INIT |</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> cutoff);</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> plan_adjoint.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = f_hat;</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> plan_adjoint.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a> = eta;</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> plan_adjoint.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = b;</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = f_hat;</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a> = xi;</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = f_m;</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> nfsft_precompute_x(&plan_adjoint);</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> nfsft_precompute_x(&plan);</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="comment">/* Check if direct algorithm shall also be tested. */</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="keywordflow">if</span> (use_nfsft == BOTH)</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> {</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> <span class="comment">/* Initialize cumulative time variable. */</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> t_fd = 0.0;</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> </div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="comment">/* Initialize time measurement. */</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> t0 = getticks();</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> </div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <span class="comment">/* Cycle through all runs. */</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> <span class="keywordflow">for</span> (i = 0; i < ld[ild][4]; i++)</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> {</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> </div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="comment">/* Execute adjoint direct NDSFT transformation. */</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> nfsft_adjoint_direct(&plan_adjoint);</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> </div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="comment">/* Multiplication with the Fourier-Legendre coefficients. */</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="keywordflow">for</span> (k = 0; k <= m[im]; k++)</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> f_hat[NFSFT_INDEX(k,n,&plan_adjoint)] *= a[k];</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="comment">/* Execute direct NDSFT transformation. */</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> nfsft_trafo_direct(&plan);</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> </div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> }</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> </div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="comment">/* Calculate and add the time needed. */</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> t1 = getticks();</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> t_fd = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> </div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="comment">/* Calculate average time needed. */</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> t_fd = t_fd/((double)ld[ild][4]);</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> </div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="comment">/* Check if error E_infty should be computed. */</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="keywordflow">if</span> (ld[ild][2] != NO)</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> {</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="comment">/* Compute the error E_infinity. */</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> err_fd = X(error_l_infty_1_complex)(f, f_m, ld[ild][1], b,</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> ld[ild][0]);</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> }</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> }</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> </div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <span class="comment">/* Check if the fast NFSFT algorithm shall also be tested. */</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> {</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> <span class="comment">/* Initialize cumulative time variable for the NFSFT algorithm. */</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> t_f = 0.0;</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> }</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> {</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="comment">/* Initialize cumulative time variable for the direct NDSFT</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="comment"> * algorithm. */</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> t_fd = 0.0;</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> }</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> </div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="comment">/* Initialize time measurement. */</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> t0 = getticks();</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> </div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="comment">/* Cycle through all runs. */</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="keywordflow">for</span> (i = 0; i < ld[ild][4]; i++)</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> {</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="comment">/* Check if the fast NFSFT algorithm shall also be tested. */</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> {</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="comment">/* Execute the adjoint NFSFT transformation. */</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> nfsft_adjoint(&plan_adjoint);</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> }</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> {</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="comment">/* Execute the adjoint direct NDSFT transformation. */</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> nfsft_adjoint_direct(&plan_adjoint);</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> }</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> </div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="comment">/* Multiplication with the Fourier-Legendre coefficients. */</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> <span class="keywordflow">for</span> (k = 0; k <= m[im]; k++)</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> f_hat[NFSFT_INDEX(k,n,&plan_adjoint)] *= a[k];</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> <span class="comment">/* Check if the fast NFSFT algorithm shall also be tested. */</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> {</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> <span class="comment">/* Execute the NFSFT transformation. */</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> nfsft_trafo(&plan);</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> }</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> {</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="comment">/* Execute the NDSFT transformation. */</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> nfsft_trafo_direct(&plan);</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> }</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> }</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> </div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="comment">/* Check if the fast NFSFT algorithm has been used. */</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> t1 = getticks();</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> </div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> t_f = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> t_fd = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> </div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="comment">/* Check if the fast NFSFT algorithm has been used. */</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> {</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <span class="comment">/* Calculate average time needed. */</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> t_f = t_f/((double)ld[ild][4]);</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> }</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> {</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> <span class="comment">/* Calculate average time needed. */</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> t_fd = t_fd/((double)ld[ild][4]);</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> }</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> </div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> <span class="comment">/* Check if error E_infty should be computed. */</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="keywordflow">if</span> (ld[ild][2] != NO)</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> {</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="comment">/* Check if the fast NFSFT algorithm has been used. */</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> {</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="comment">/* Compute the error E_infinity. */</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> err_f = X(error_l_infty_1_complex)(f, f_m, ld[ild][1], b,</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> ld[ild][0]);</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> }</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> {</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="comment">/* Compute the error E_infinity. */</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> err_fd = X(error_l_infty_1_complex)(f, f_m, ld[ild][1], b,</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> ld[ild][0]);</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> }</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> }</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="comment">/* Print out the error measurements. */</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> fprintf(stdout,<span class="stringliteral">"%e\n%e\n%e\n%e\n%e\n%e\n\n"</span>,t_d,t_dp,t_fd,t_f,err_fd,</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> err_f);</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> </div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="comment">/* Finalize the NFSFT plans */</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> nfsft_finalize(&plan_adjoint);</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> nfsft_finalize(&plan);</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> } <span class="comment">/* for (im = 0; im < im_max; im++) - Process all cut-off</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="comment"> * bandwidths.*/</span></div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> } <span class="comment">/* for (ild = 0; ild < ild_max; ild++) - Process all node sets. */</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> } <span class="comment">/* for (ip = 0; ip < ip_max; ip++) - Process all parameter sets. */</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> </div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="comment">/* Delete precomputed data. */</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> nfsft_forget();</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> </div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> <span class="comment">/* Check if memory for precomputed data of the matrix K has been</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="comment"> * allocated. */</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="keywordflow">if</span> (precompute == YES)</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> {</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="comment">/* Free memory for precomputed matrix K. */</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(prec);</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> }</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> <span class="comment">/* Free data arrays. */</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_m);</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(xi);</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(eta);</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(a);</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(b);</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> </div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> <span class="comment">/* Free memory for node sets. */</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="keywordflow">for</span> (ild = 0; ild < ild_max; ild++)</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ld[ild]);</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ld);</div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> </div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="comment">/* Free memory for cut-off bandwidths. */</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(m);</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> </div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="comment">/* Free memory for parameter sets. */</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="keywordflow">for</span> (ip = 0; ip < ip_max; ip++)</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(p[ip]);</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(p);</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> } <span class="comment">/* for (tc = 0; tc < tc_max; tc++) - Process each testcase. */</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> </div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="comment">/* Return exit code for successful run. */</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> }</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/fastsum_8c.html b/doc/api/html/fastsum_8c.html
new file mode 100644
index 0000000..1398953
--- /dev/null
+++ b/doc/api/html/fastsum_8c.html
@@ -0,0 +1,138 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastsum.c File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">fastsum.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Fast NFFT-based summation algorithm.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "<a class="el" href="fastsum_8h_source.html">fastsum.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+<code>#include "<a class="el" href="kernels_8h_source.html">kernels.h</a>"</code><br/>
+</div>
+<p><a href="fastsum_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga37a2a7cb4fb162d6e6e46ea614318a4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga37a2a7cb4fb162d6e6e46ea614318a4e"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a> (int a, int b)</td></tr>
+<tr class="memdesc:ga37a2a7cb4fb162d6e6e46ea614318a4e"><td class="mdescLeft"> </td><td class="mdescRight">max <br/></td></tr>
+<tr class="memitem:ga6fd3e84b794684dd1c6236619437bf09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6fd3e84b794684dd1c6236619437bf09"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09">fak</a> (int n)</td></tr>
+<tr class="memdesc:ga6fd3e84b794684dd1c6236619437bf09"><td class="mdescLeft"> </td><td class="mdescRight">factorial <br/></td></tr>
+<tr class="memitem:gae767db8af0cbe9244cfbd0580b0bb9f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae767db8af0cbe9244cfbd0580b0bb9f4"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gae767db8af0cbe9244cfbd0580b0bb9f4">binom</a> (int n, int m)</td></tr>
+<tr class="memdesc:gae767db8af0cbe9244cfbd0580b0bb9f4"><td class="mdescLeft"> </td><td class="mdescRight">binomial coefficient <br/></td></tr>
+<tr class="memitem:ga0c4b940daf11ebe201355f43f26cddd0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0c4b940daf11ebe201355f43f26cddd0"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0">BasisPoly</a> (int m, int r, double xx)</td></tr>
+<tr class="memdesc:ga0c4b940daf11ebe201355f43f26cddd0"><td class="mdescLeft"> </td><td class="mdescRight">basis polynomial for regularized kernel <br/></td></tr>
+<tr class="memitem:ga247527ab67657107225fa69882f0208c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga247527ab67657107225fa69882f0208c"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c">regkern</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:ga247527ab67657107225fa69882f0208c"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel with K_I arbitrary and K_B smooth to zero <br/></td></tr>
+<tr class="memitem:gaf022589be0533270b476edc9b78928f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf022589be0533270b476edc9b78928f1"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1">regkern1</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:gaf022589be0533270b476edc9b78928f1"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel with K_I arbitrary and K_B periodized (used in 1D) <br/></td></tr>
+<tr class="memitem:ga461376a86ecb935b74e7bfa4c86275d9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga461376a86ecb935b74e7bfa4c86275d9"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga461376a86ecb935b74e7bfa4c86275d9">regkern2</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:ga461376a86ecb935b74e7bfa4c86275d9"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel for even kernels with K_I even and K_B mirrored <br/></td></tr>
+<tr class="memitem:ga2077aec7b505fd6bf082c28cc5d59468"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2077aec7b505fd6bf082c28cc5d59468"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga2077aec7b505fd6bf082c28cc5d59468">regkern3</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:ga2077aec7b505fd6bf082c28cc5d59468"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel for even kernels with K_I even and K_B mirrored smooth to K(1/2) (used in dD, d>1) <br/></td></tr>
+<tr class="memitem:gae23df7b1c09c2955895545e164bc9e99"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae23df7b1c09c2955895545e164bc9e99"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gae23df7b1c09c2955895545e164bc9e99">linintkern</a> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memdesc:gae23df7b1c09c2955895545e164bc9e99"><td class="mdescLeft"> </td><td class="mdescRight">linear spline interpolation in near field with even kernels <br/></td></tr>
+<tr class="memitem:gabad684b95fbab7d2c039bec72bff712e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabad684b95fbab7d2c039bec72bff712e"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>quadrintkern</b> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memitem:ga67103860c05f7296f7c302e7f0dbfe79"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga67103860c05f7296f7c302e7f0dbfe79"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79">kubintkern</a> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memdesc:ga67103860c05f7296f7c302e7f0dbfe79"><td class="mdescLeft"> </td><td class="mdescRight">cubic spline interpolation in near field with even kernels <br/></td></tr>
+<tr class="memitem:gad527763b180de164610e55a704c69116"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad527763b180de164610e55a704c69116"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gad527763b180de164610e55a704c69116">kubintkern1</a> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memdesc:gad527763b180de164610e55a704c69116"><td class="mdescLeft"> </td><td class="mdescRight">cubic spline interpolation in near field with arbitrary kernels <br/></td></tr>
+<tr class="memitem:ga7d3d3786f2e799dc1fa1704281f4a3fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7d3d3786f2e799dc1fa1704281f4a3fe"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe">quicksort</a> (int d, int t, double *x, double _Complex *alpha, int N)</td></tr>
+<tr class="memdesc:ga7d3d3786f2e799dc1fa1704281f4a3fe"><td class="mdescLeft"> </td><td class="mdescRight">quicksort algorithm for source knots and associated coefficients <br/></td></tr>
+<tr class="memitem:ga8237ee0c81a2518c4849e71317a479d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8237ee0c81a2518c4849e71317a479d0"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga8237ee0c81a2518c4849e71317a479d0">BuildBox</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga8237ee0c81a2518c4849e71317a479d0"><td class="mdescLeft"> </td><td class="mdescRight">initialize box-based search data structures <br/></td></tr>
+<tr class="memitem:ga15df6167d1d2dd375cb81e81a969cf9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga15df6167d1d2dd375cb81e81a969cf9d"></a>
+static double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d">calc_SearchBox</a> (int d, double *y, double *x, double _Complex *alpha, int start, int end_lt, const double _Complex *Add, const int Ad, int p, double a, const kernel k, const double *param, const unsigned flags)</td></tr>
+<tr class="memdesc:ga15df6167d1d2dd375cb81e81a969cf9d"><td class="mdescLeft"> </td><td class="mdescRight">inner computation function for box-based near field correction <br/></td></tr>
+<tr class="memitem:gae5d00a6d73390cc05d73aeca17028fc5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae5d00a6d73390cc05d73aeca17028fc5"></a>
+static double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gae5d00a6d73390cc05d73aeca17028fc5">SearchBox</a> (double *y, <a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gae5d00a6d73390cc05d73aeca17028fc5"><td class="mdescLeft"> </td><td class="mdescRight">box-based near field correction <br/></td></tr>
+<tr class="memitem:ga61bae6836e2c586b9de245b664853174"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga61bae6836e2c586b9de245b664853174"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174">BuildTree</a> (int d, int t, double *x, double _Complex *alpha, int N)</td></tr>
+<tr class="memdesc:ga61bae6836e2c586b9de245b664853174"><td class="mdescLeft"> </td><td class="mdescRight">recursive sort of source knots dimension by dimension to get tree structure <br/></td></tr>
+<tr class="memitem:gab5a71f2cd5581bfa121b77aa6c981104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab5a71f2cd5581bfa121b77aa6c981104"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104">SearchTree</a> (const int d, const int t, const double *x, const double _Complex *alpha, const double *xmin, const double *xmax, const int N, const kernel k, const double *param, const int Ad, const double _Complex *Add, const int p, const unsigned flags)</td></tr>
+<tr class="memdesc:gab5a71f2cd5581bfa121b77aa6c981104"><td class="mdescLeft"> </td><td class="mdescRight">fast search in tree of source knots for near field computation <br/></td></tr>
+<tr class="memitem:ga9a053d513b2eb19c5f1c70f16e0ae149"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149">fastsum_init_guru</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths, int d, int N_total, int M_total, kernel k, double *param, unsigned flags, int nn, int m, int p, double e [...]
+<tr class="memdesc:ga9a053d513b2eb19c5f1c70f16e0ae149"><td class="mdescLeft"> </td><td class="mdescRight">initialization of fastsum plan <a href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149"></a><br/></td></tr>
+<tr class="memitem:gab989ea4659fe681bd4c025e82756f769"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769">fastsum_finalize</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gab989ea4659fe681bd4c025e82756f769"><td class="mdescLeft"> </td><td class="mdescRight">finalization of fastsum plan <a href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769"></a><br/></td></tr>
+<tr class="memitem:gaaee3dd954ffc99e4330fabe16ccad0fd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd">fastsum_exact</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gaaee3dd954ffc99e4330fabe16ccad0fd"><td class="mdescLeft"> </td><td class="mdescRight">direct computation of sums <a href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd"></a><br/></td></tr>
+<tr class="memitem:ga197c16fcec7935886fc97d140f2b20ff"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff">fastsum_precompute</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga197c16fcec7935886fc97d140f2b20ff"><td class="mdescLeft"> </td><td class="mdescRight">precomputation for fastsum <a href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff"></a><br/></td></tr>
+<tr class="memitem:gaab2cc691ba59064c18d439c9fd2185e8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8">fastsum_trafo</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gaab2cc691ba59064c18d439c9fd2185e8"><td class="mdescLeft"> </td><td class="mdescRight">fast NFFT-based summation <a href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Fast NFFT-based summation algorithm. </p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2003-2006 </dd></dl>
+
+<p>Definition in file <a class="el" href="fastsum_8c_source.html">fastsum.c</a>.</p>
+</div></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/fastsum_8c_source.html b/doc/api/html/fastsum_8c_source.html
new file mode 100644
index 0000000..9f5e7c4
--- /dev/null
+++ b/doc/api/html/fastsum_8c_source.html
@@ -0,0 +1,1021 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastsum.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastsum.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="fastsum_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: fastsum.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="fastsum_8h.html" title="Header file for the fast NFFT-based summation algorithm.">fastsum.h</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "<a class="code" href="kernels_8h.html" title="Header file with predefined kernels for the fast summation algorithm.">kernels.h</a>"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e"> 49</a></span> <span class="keywordtype">int</span> <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>(<span class="keywordtype">int</span> a, <span class="keywordtype">int</span> b)</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> {</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">return</span> a >= b ? a : b;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09"> 55</a></span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09" title="factorial">fak</a>(<span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> {</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">if</span> (n<=1) <span class="keywordflow">return</span> 1.0;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">else</span> <span class="keywordflow">return</span> (<span class="keywordtype">double</span>)n*<a class="code" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09" title="factorial">fak</a>(n-1);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gae767db8af0cbe9244cfbd0580b0bb9f4"> 62</a></span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastsum.html#gae767db8af0cbe9244cfbd0580b0bb9f4" title="binomial coefficient">binom</a>(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">return</span> <a class="code" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09" title="factorial">fak</a>(n)/<a class="code" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09" title="factorial">fak</a>(m)/<a class="code" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09" title="factorial">fak</a>(n-m);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0"> 68</a></span> <span class="keywordtype">double</span> <a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(<span class="keywordtype">int</span> m, <span class="keywordtype">int</span> r, <span class="keywordtype">double</span> xx)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">double</span> sum=0.0;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">for</span> (k=0; k<=m-r; k++) {</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> sum+=<a class="code" href="group__applications__fastsum.html#gae767db8af0cbe9244cfbd0580b0bb9f4" title="binomial coefficient">binom</a>(m+k,k)*pow((xx+1.0)/2.0,(<span class="keywordtype">double</span>)k);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">return</span> sum*pow((xx+1.0),(<span class="keywordtype">double</span>)r)*pow(1.0-xx,(<span class="keywordtype">double</span>)(m+1))/(1<<(m+1))/<a class="code" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09" title="factorial">fak</a>(r); <span class="comment">/* 1<<(m+1) = 2^(m+1) */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> }</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c"> 80</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c" title="regularized kernel with K_I arbitrary and K_B smooth to zero">regkern</a>(kernel k, <span class="keywordtype">double</span> xx, <span class="keywordtype">int</span> p, <s [...]
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">double</span> _Complex sum=0.0;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span> (xx<-0.5)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> xx=-0.5;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">if</span> (xx>0.5)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> xx=0.5;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">if</span> ((xx>=-0.5+b && xx<=-a) || (xx>=a && xx<=0.5-b)) {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">return</span> k(xx,0,param);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xx<-0.5+b) {</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> sum=(k(-0.5,0,param)+k(0.5,0,param))/2.0</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> *<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,0,2.0*xx/b+(1.0-b)/b);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> sum+=pow(-b/2.0,(<span class="keywordtype">double</span>)r)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> *k(-0.5+b,r,param)</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> *<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,-2.0*xx/b+(b-1.0)/b);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((xx>-a) && (xx<a)) {</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> sum+=pow(a,(<span class="keywordtype">double</span>)r)</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> *( k(-a,r,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,xx/a)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> +k( a,r,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,-xx/a)*(r & 1 ? -1 : 1));</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xx>0.5-b) {</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> sum=(k(-0.5,0,param)+k(0.5,0,param))/2.0</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> *<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,0,-2.0*xx/b+(1.0-b)/b);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> sum+=pow(b/2.0,(<span class="keywordtype">double</span>)r)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> *k(0.5-b,r,param)</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> *<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,2.0*xx/b-(1.0-b)/b);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">return</span> k(xx,0,param);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1"> 126</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1" title="regularized kernel with K_I arbitrary and K_B periodized (used in 1D)">regkern1</a>(kernel k, <span class="keywordtype">double</span> xx, <span class="keywordtype">int</s [...]
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> {</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordtype">double</span> _Complex sum=0.0;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">if</span> (xx<-0.5)</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> xx=-0.5;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span> (xx>0.5)</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> xx=0.5;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">if</span> ((xx>=-0.5+b && xx<=-a) || (xx>=a && xx<=0.5-b))</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> {</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">return</span> k(xx,0,param);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((xx>-a) && (xx<a))</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> {</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> sum+=pow(a,(<span class="keywordtype">double</span>)r)</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> *( k(-a,r,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,xx/a)</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> +k( a,r,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,-xx/a)*(r & 1 ? -1 : 1));</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xx<-0.5+b)</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> {</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> sum+=pow(b,(<span class="keywordtype">double</span>)r)</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> *( k(0.5-b,r,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,(xx+0.5)/b)</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> +k(-0.5+b,r,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,-(xx+0.5)/b)*(r & 1 ? -1 : 1));</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> }</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xx>0.5-b)</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> {</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> sum+=pow(b,(<span class="keywordtype">double</span>)r)</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> *( k(0.5-b,r,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,(xx-0.5)/b)</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> +k(-0.5+b,r,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,-(xx-0.5)/b)*(r & 1 ? -1 : 1));</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> }</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">return</span> k(xx,0,param);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> }</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga461376a86ecb935b74e7bfa4c86275d9"> 170</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#ga461376a86ecb935b74e7bfa4c86275d9" title="regularized kernel for even kernels with K_I even and K_B mirrored">regkern2</a>(kernel k, <span class="keywordtype">double</span> xx, <span class="keywordtype">int</span [...]
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> {</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordtype">double</span> _Complex sum=0.0;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> xx=fabs(xx);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">if</span> (xx>0.5) {</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> sum+=pow(b,(<span class="keywordtype">double</span>)r)*k(0.5-b,r,param)</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> *(<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,0)+<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,0));</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> }</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((a<=xx) && (xx<=0.5-b)) {</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">return</span> k(xx,0,param);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xx<a) {</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> sum+=pow(-a,(<span class="keywordtype">double</span>)r)*k(a,r,param)</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> *(<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,xx/a)+<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,-xx/a));</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> }</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((0.5-b<xx) && (xx<=0.5)) {</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> sum+=pow(b,(<span class="keywordtype">double</span>)r)*k(0.5-b,r,param)</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> *(<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,(xx-0.5)/b)+<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,-(xx-0.5)/b));</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> }</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> }</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">return</span> 0.0;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> }</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga2077aec7b505fd6bf082c28cc5d59468"> 207</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#ga2077aec7b505fd6bf082c28cc5d59468" title="regularized kernel for even kernels with K_I even and K_B mirrored smooth to K(1/2) (used in dD...">regkern3</a>(kernel k, <span class="keywordtype">double</span> xx, <sp [...]
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> {</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordtype">double</span> _Complex sum=0.0;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> xx=fabs(xx);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span> (xx>=0.5) {</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment">/*return kern(typ,c,0,0.5);*/</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> xx=0.5;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment">/* else */</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">if</span> ((a<=xx) && (xx<=0.5-b)) {</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">return</span> k(xx,0,param);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> }</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xx<a) {</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> sum+=pow(-a,(<span class="keywordtype">double</span>)r)*k(a,r,param)</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> *(<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,xx/a)+<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,-xx/a));</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment">/*sum=kern(typ,c,0,xx); */</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> }</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((0.5-b<xx) && (xx<=0.5)) {</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> sum=k(0.5,0,param)*<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,0,-2.0*xx/b+(1.0-b)/b);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="comment">/* sum=regkern2(typ,c,p,a,b, 0.5)*BasisPoly(p-1,0,-2.0*xx/b+(1.0-b)/b); */</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">for</span> (r=0; r<p; r++) {</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> sum+=pow(b/2.0,(<span class="keywordtype">double</span>)r)</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> *k(0.5-b,r,param)</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> *<a class="code" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0" title="basis polynomial for regularized kernel">BasisPoly</a>(p-1,r,2.0*xx/b-(1.0-b)/b);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> }</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> }</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">return</span> 0.0;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> }</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gae23df7b1c09c2955895545e164bc9e99"> 244</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#gae23df7b1c09c2955895545e164bc9e99" title="linear spline interpolation in near field with even kernels">linintkern</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="key [...]
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keyword">const</span> <span class="keywordtype">int</span> Ad, <span class="keyword">const</span> <span class="keywordtype">double</span> a)</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> {</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordtype">double</span> c,c1,c3;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordtype">double</span> _Complex f1,f2;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> c=x*Ad/a;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> r=c; r=abs(r);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> f1=Add[r];f2=Add[r+1];</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> c=fabs(c);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> c1=c-r;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> c3=c1-1.0;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">return</span> (-f1*c3+f2*c1);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> }</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="keywordtype">double</span> _Complex quadrintkern(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keyword">const</span> <span class="keywordtype">double</span> _Complex *Add,</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keyword">const</span> <span class="keywordtype">int</span> Ad, <span class="keyword">const</span> <span class="keywordtype">double</span> a)</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> {</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordtype">double</span> c,c1,c2,c3;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordtype">double</span> _Complex f0,f1,f2;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> c=x*Ad/a;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> r=c; r=abs(r);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">if</span> (r==0) {f0=Add[r+1];f1=Add[r];f2=Add[r+1];}</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">else</span> { f0=Add[r-1];f1=Add[r];f2=Add[r+1];}</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> c=fabs(c);</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> c1=c-r;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> c2=c1+1.0;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> c3=c1-1.0;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">return</span> (f0*c1*c3/2.0-f1*c2*c3+f2*c2*c1/2.0);</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> }</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79"> 279</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79" title="cubic spline interpolation in near field with even kernels">kubintkern</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keyw [...]
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keyword">const</span> <span class="keywordtype">int</span> Ad, <span class="keyword">const</span> <span class="keywordtype">double</span> a)</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> {</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordtype">double</span> c,c1,c2,c3,c4;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordtype">double</span> _Complex f0,f1,f2,f3;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> c=x*Ad/a;</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> r=c; r=abs(r);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">if</span> (r==0) {f0=Add[r+1];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">else</span> { f0=Add[r-1];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> c=fabs(c);</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> c1=c-r;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> c2=c1+1.0;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> c3=c1-1.0;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> c4=c1-2.0;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment">/* return(-f0*(c-r)*(c-r-1.0)*(c-r-2.0)/6.0+f1*(c-r+1.0)*(c-r-1.0)*(c-r-2.0)/2-</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="comment"> f2*(c-r+1.0)*(c-r)*(c-r-2.0)/2+f3*(c-r+1.0)*(c-r)*(c-r-1.0)/6.0); */</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">return</span>(-f0*c1*c3*c4/6.0+f1*c2*c3*c4/2.0-f2*c2*c1*c4/2.0+f3*c2*c1*c3/6.0);</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> }</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gad527763b180de164610e55a704c69116"> 300</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#gad527763b180de164610e55a704c69116" title="cubic spline interpolation in near field with arbitrary kernels">kubintkern1</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class [...]
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keyword">const</span> <span class="keywordtype">int</span> Ad, <span class="keyword">const</span> <span class="keywordtype">double</span> a)</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> {</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordtype">double</span> c,c1,c2,c3,c4;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keywordtype">double</span> _Complex f0,f1,f2,f3;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> Add+=2;</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> c=(x+a)*Ad/2/a;</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> r=c; r=abs(r);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="comment">/*if (r==0) {f0=Add[r];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment"> else */</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> { f0=Add[r-1];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> c=fabs(c);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> c1=c-r;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> c2=c1+1.0;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> c3=c1-1.0;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> c4=c1-2.0;</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="comment">/* return(-f0*(c-r)*(c-r-1.0)*(c-r-2.0)/6.0+f1*(c-r+1.0)*(c-r-1.0)*(c-r-2.0)/2-</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="comment"> f2*(c-r+1.0)*(c-r)*(c-r-2.0)/2+f3*(c-r+1.0)*(c-r)*(c-r-1.0)/6.0); */</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">return</span>(-f0*c1*c3*c4/6.0+f1*c2*c3*c4/2.0-f2*c2*c1*c4/2.0+f3*c2*c1*c3/6.0);</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> }</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe"> 323</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe" title="quicksort algorithm for source knots and associated coefficients">quicksort</a>(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> t, <span class="keywordt [...]
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> {</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordtype">int</span> lpos=0;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordtype">int</span> rpos=N-1;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="comment">/*double pivot=x[((N-1)/2)*d+t];*/</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordtype">double</span> pivot=x[(N/2)*d+t];</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="keywordtype">double</span> temp1;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordtype">double</span> _Complex temp2;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">while</span> (lpos<=rpos)</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> {</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">while</span> (x[lpos*d+t]<pivot)</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> lpos++;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="keywordflow">while</span> (x[rpos*d+t]>pivot)</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> rpos--;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">if</span> (lpos<=rpos)</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> {</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="keywordflow">for</span> (k=0; k<d; k++)</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> {</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> temp1=x[lpos*d+k];</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> x[lpos*d+k]=x[rpos*d+k];</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> x[rpos*d+k]=temp1;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> }</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> temp2=alpha[lpos];</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> alpha[lpos]=alpha[rpos];</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> alpha[rpos]=temp2;</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> lpos++;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> rpos--;</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> }</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> }</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">if</span> (0<rpos)</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <a class="code" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe" title="quicksort algorithm for source knots and associated coefficients">quicksort</a>(d,t,x,alpha,rpos+1);</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">if</span> (lpos<N-1)</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <a class="code" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe" title="quicksort algorithm for source knots and associated coefficients">quicksort</a>(d,t,x+lpos*d,alpha+lpos,N-lpos);</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga8237ee0c81a2518c4849e71317a479d0"> 363</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#ga8237ee0c81a2518c4849e71317a479d0" title="initialize box-based search data structures">BuildBox</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algori [...]
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> {</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="keywordtype">int</span> t, l;</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordtype">int</span> *box_index;</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordtype">double</span> val[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>];</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> box_index = (<span class="keywordtype">int</span> *) malloc(ths->box_count * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">for</span> (t=0; t < ths->box_count; t++)</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> box_index[t] = 0;</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">for</span> (l=0; l < ths-><a class="code" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976" title="number of source knots">N_total</a>; l++)</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> {</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keywordtype">int</span> ind = 0;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">for</span> (t=0; t < ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> {</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> val[t] = ths-><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a> * l + t] + 0.25 - ths-><a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps [...]
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> ind *= ths->box_count_per_dim;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> ind += (int) (val[t] / ths-><a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6" title="inner boundary">eps_I</a>);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> box_index[ind]++;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> }</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> ths->box_offset[0] = 0;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordflow">for</span> (t=1; t<=ths->box_count; t++)</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> {</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> ths->box_offset[t] = ths->box_offset[t-1] + box_index[t-1];</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> box_index[t-1] = ths->box_offset[t-1];</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> }</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">for</span> (l=0; l < ths-><a class="code" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976" title="number of source knots">N_total</a>; l++)</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> {</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="keywordtype">int</span> ind = 0;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keywordflow">for</span> (t=0; t < ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> {</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> val[t] = ths-><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a> * l + t] + 0.25 - ths-><a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps [...]
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> ind *= ths->box_count_per_dim;</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> ind += (int) (val[t] / ths-><a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6" title="inner boundary">eps_I</a>);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> }</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> ths->box_alpha[box_index[ind]] = ths-><a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a>[l];</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keywordflow">for</span> (t=0; t < ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> {</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> ths->box_x[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a> * box_index[ind] + t] = ths-><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</ [...]
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> }</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> box_index[ind]++;</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> }</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> free(box_index);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> }</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d"> 414</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d" title="inner computation function for box-based near field correction">calc_SearchBox</a>(<span class="ke [...]
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> {</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keywordtype">double</span> _Complex result = 0.0;</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="keywordtype">int</span> m, l;</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="keywordtype">double</span> r;</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">for</span> (m = start; m < end_lt; m++)</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> {</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keywordflow">if</span> (d==1)</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> {</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> r = y[0]-x[m];</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> }</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> {</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> r=0.0;</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keywordflow">for</span> (l=0; l<d; l++)</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> r+=(y[l]-x[m*d+l])*(y[l]-x[m*d+l]);</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> r=sqrt(r);</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> }</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordflow">if</span> (fabs(r)<a)</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> {</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> result += alpha[m]*k(r,0,param); <span class="comment">/* alpha*(kern-regkern) */</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keywordflow">if</span> (d==1)</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> {</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">if</span> (flags & <a class="code" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d" title="Constant symbols.">EXACT_NEARFIELD</a>)</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1" title="regularized kernel with K_I arbitrary and K_B periodized (used in 1D)">regkern1</a>(k,r,p,param,a,1.0/16.0); <span class="comment">/* exact value (in 1D) */</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#gad527763b180de164610e55a704c69116" title="cubic spline interpolation in near field with arbitrary kernels">kubintkern1</a>(r,Add,Ad,a); <span class="comment">/* spline approximation */</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> }</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> {</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keywordflow">if</span> (flags & <a class="code" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d" title="Constant symbols.">EXACT_NEARFIELD</a>)</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c" title="regularized kernel with K_I arbitrary and K_B smooth to zero">regkern</a>(k,r,p,param,a,1.0/16.0); <span class="comment">/* exact value (in dD) */</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="preprocessor">#if defined(NF_KUB)</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="preprocessor"></span> result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79" title="cubic spline interpolation in near field with even kernels">kubintkern</a>(r,Add,Ad,a); <span class="comment">/* spline approximation */</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="preprocessor">#elif defined(NF_QUADR)</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="preprocessor"></span> result -= alpha[m]*quadrintkern(r,Add,Ad,a); <span class="comment">/* spline approximation */</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="preprocessor">#elif defined(NF_LIN)</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="preprocessor"></span> result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#gae23df7b1c09c2955895545e164bc9e99" title="linear spline interpolation in near field with even kernels">linintkern</a>(r,Add,Ad,a); <span class="comment">/* spline approximation */</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="preprocessor"></span><span class="preprocessor"> #error define interpolation method</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> }</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> }</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> }</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gae5d00a6d73390cc05d73aeca17028fc5"> 465</a></span> <span class="keyword">static</span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#gae5d00a6d73390cc05d73aeca17028fc5" title="box-based near field correction">SearchBox</a>(<span class="keywordtype">double</span> *y, <a class="code" href="structfastsum__plan__ [...]
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> {</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="keywordtype">double</span> _Complex val = 0.0;</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="keywordtype">int</span> t, l;</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="keywordtype">int</span> y_multiind[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>];</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="keywordtype">int</span> multiindex[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>];</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keywordtype">int</span> y_ind;</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keywordflow">for</span> (t=0; t < ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> {</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> y_multiind[t] = ((y[t] + 0.25 - ths-><a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps_B</a>/2.0) / ths-><a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6" title="inner boundary">eps_I</a>);</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> }</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>==1)</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> {</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">for</span> (y_ind = <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>(0, y_multiind[0]-1); y_ind < ths->box_count_per_dim && y_ind <= y_multiind[0]+1; y_ind++){</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> val += <a class="code" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d" title="inner computation function for box-based near field correction">calc_SearchBox</a>(ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>, y, ths->box_x, ths->box_alpha, ths->box_offset[y_ind], ths->box_offset[y_ind+1], ths-><a clas [...]
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> }</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> }</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>==2)</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> {</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="keywordflow">for</span> (multiindex[0] = <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>(0, y_multiind[0]-1); multiindex[0] < ths->box_count_per_dim && multiindex[0] <= y_multiind[0]+1; multiindex[0]++)</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">for</span> (multiindex[1] = <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>(0, y_multiind[1]-1); multiindex[1] < ths->box_count_per_dim && multiindex[1] <= y_multiind[1]+1; multiindex[1]++)</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> {</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> y_ind = (ths->box_count_per_dim * multiindex[0]) + multiindex[1];</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> val += <a class="code" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d" title="inner computation function for box-based near field correction">calc_SearchBox</a>(ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>, y, ths->box_x, ths->box_alpha, ths->box_offset[y_ind], ths->box_offset[y_ind+1], ths-><a cl [...]
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> }</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> }</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>==3)</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> {</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="keywordflow">for</span> (multiindex[0] = <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>(0, y_multiind[0]-1); multiindex[0] < ths->box_count_per_dim && multiindex[0] <= y_multiind[0]+1; multiindex[0]++)</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="keywordflow">for</span> (multiindex[1] = <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>(0, y_multiind[1]-1); multiindex[1] < ths->box_count_per_dim && multiindex[1] <= y_multiind[1]+1; multiindex[1]++)</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keywordflow">for</span> (multiindex[2] = <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>(0, y_multiind[2]-1); multiindex[2] < ths->box_count_per_dim && multiindex[2] <= y_multiind[2]+1; multiindex[2]++)</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> {</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> y_ind = ((ths->box_count_per_dim * multiindex[0]) + multiindex[1]) * ths->box_count_per_dim + multiindex[2];</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> val += <a class="code" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d" title="inner computation function for box-based near field correction">calc_SearchBox</a>(ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>, y, ths->box_x, ths->box_alpha, ths->box_offset[y_ind], ths->box_offset[y_ind+1], ths-><a [...]
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> }</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> }</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> exit(-1);</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> }</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="keywordflow">return</span> val;</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> }</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174"> 510</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174" title="recursive sort of source knots dimension by dimension to get tree structure">BuildTree</a>(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> t, <span clas [...]
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> {</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="keywordflow">if</span> (N>1)</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> {</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="keywordtype">int</span> m=N/2;</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <a class="code" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe" title="quicksort algorithm for source knots and associated coefficients">quicksort</a>(d,t,x,alpha,N);</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <a class="code" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174" title="recursive sort of source knots dimension by dimension to get tree structure">BuildTree</a>(d, (t+1)%d, x, alpha, m);</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <a class="code" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174" title="recursive sort of source knots dimension by dimension to get tree structure">BuildTree</a>(d, (t+1)%d, x+(m+1)*d, alpha+(m+1), N-m-1);</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> }</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> }</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104"> 524</a></span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104" title="fast search in tree of source knots for near field computation">SearchTree</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> d, <span class="key [...]
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="keyword">const</span> <span class="keywordtype">double</span> _Complex *alpha, <span class="keyword">const</span> <span class="keywordtype">double</span> *xmin, <span class="keyword">const</span> <span class="keywordtype">double</span> *xmax,</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> kernel k, <span class="keyword">const</span> <span class="keywordtype">double</span> *param, <span class="keyword">const</span> <span class="keywordtype">int</span> Ad,</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="keyword">const</span> <span class="keywordtype">double</span> _Complex *Add, <span class="keyword">const</span> <span class="keywordtype">int</span> p, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> flags)</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> {</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keywordtype">int</span> m=N/2;</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keywordtype">double</span> Min=xmin[t], Max=xmax[t], Median=x[m*d+t];</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="keywordtype">double</span> a=fabs(Max-Min)/2;</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="keywordtype">int</span> E=0;</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordtype">double</span> r;</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">if</span> (N==0)</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keywordflow">return</span> 0.0;</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="keywordflow">if</span> (Min>Median)</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="keywordflow">return</span> <a class="code" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104" title="fast search in tree of source knots for near field computation">SearchTree</a>(d,(t+1)%d,x+(m+1)*d,alpha+(m+1),xmin,xmax,N-m-1,k,param,Ad,Add,p,flags);</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Max<Median)</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="keywordflow">return</span> <a class="code" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104" title="fast search in tree of source knots for near field computation">SearchTree</a>(d,(t+1)%d,x,alpha,xmin,xmax,m,k,param,Ad,Add,p,flags);</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> {</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="keywordtype">double</span> _Complex result = 0.0;</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> E=0;</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">for</span> (l=0; l<d; l++)</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> {</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="keywordflow">if</span> ( x[m*d+l]>xmin[l] && x[m*d+l]<xmax[l] )</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> E++;</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> }</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="keywordflow">if</span> (E==d)</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> {</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="keywordflow">if</span> (d==1)</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> {</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> r = xmin[0]+a-x[m]; <span class="comment">/* remember: xmin+a = y */</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> }</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> {</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> r=0.0;</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="keywordflow">for</span> (l=0; l<d; l++)</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> r+=(xmin[l]+a-x[m*d+l])*(xmin[l]+a-x[m*d+l]); <span class="comment">/* remember: xmin+a = y */</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> r=sqrt(r);</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> }</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="keywordflow">if</span> (fabs(r)<a)</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> {</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> result += alpha[m]*k(r,0,param); <span class="comment">/* alpha*(kern-regkern) */</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="keywordflow">if</span> (d==1)</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> {</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="keywordflow">if</span> (flags & <a class="code" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d" title="Constant symbols.">EXACT_NEARFIELD</a>)</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1" title="regularized kernel with K_I arbitrary and K_B periodized (used in 1D)">regkern1</a>(k,r,p,param,a,1.0/16.0); <span class="comment">/* exact value (in 1D) */</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#gad527763b180de164610e55a704c69116" title="cubic spline interpolation in near field with arbitrary kernels">kubintkern1</a>(r,Add,Ad,a); <span class="comment">/* spline approximation */</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> }</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> {</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="keywordflow">if</span> (flags & <a class="code" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d" title="Constant symbols.">EXACT_NEARFIELD</a>)</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c" title="regularized kernel with K_I arbitrary and K_B smooth to zero">regkern</a>(k,r,p,param,a,1.0/16.0); <span class="comment">/* exact value (in dD) */</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="preprocessor">#if defined(NF_KUB)</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="preprocessor"></span> result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79" title="cubic spline interpolation in near field with even kernels">kubintkern</a>(r,Add,Ad,a); <span class="comment">/* spline approximation */</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="preprocessor">#elif defined(NF_QUADR)</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="preprocessor"></span> result -= alpha[m]*quadrintkern(r,Add,Ad,a); <span class="comment">/* spline approximation */</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="preprocessor">#elif defined(NF_LIN)</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="preprocessor"></span> result -= alpha[m]*<a class="code" href="group__applications__fastsum.html#gae23df7b1c09c2955895545e164bc9e99" title="linear spline interpolation in near field with even kernels">linintkern</a>(r,Add,Ad,a); <span class="comment">/* spline approximation */</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="preprocessor"></span><span class="preprocessor"> #error define interpolation method</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> }</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> }</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> result += <a class="code" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104" title="fast search in tree of source knots for near field computation">SearchTree</a>(d,(t+1)%d,x+(m+1)*d,alpha+(m+1),xmin,xmax,N-m-1,k,param,Ad,Add,p,flags)</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> + <a class="code" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104" title="fast search in tree of source knots for near field computation">SearchTree</a>(d,(t+1)%d,x,alpha,xmin,xmax,m,k,param,Ad,Add,p,flags);</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> }</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> }</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div>
+<div class="line"><a name="l00600"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149"> 600</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149" title="initialization of fastsum plan">fastsum_init_guru</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths, <span class= [...]
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> {</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="keywordtype">int</span> N[d], n[d];</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="keywordtype">int</span> n_total;</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="keywordtype">int</span> sort_flags_trafo = 0;</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="keywordtype">int</span> sort_flags_adjoint = 0;</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="preprocessor"></span> <span class="keywordtype">int</span> nthreads = nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="keywordflow">if</span> (d > 1)</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> {</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> sort_flags_trafo = NFFT_SORT_NODES;</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="preprocessor"></span> sort_flags_adjoint = NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT;</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="preprocessor"></span> sort_flags_adjoint = NFFT_SORT_NODES;</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> </div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a> = d;</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> ths-><a class="code" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976" title="number of source knots">N_total</a> = N_total;</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> ths-><a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a> = M_total;</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> ths-><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a> = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d*N_total*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> ths-><a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(N_total*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex)));</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> ths-><a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a> = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d*M_total*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> ths-><a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M_total*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex)));</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> ths-><a class="code" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8" title="kernel function">k</a> = k;</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> ths-><a class="code" href="structfastsum__plan__.html#a37cbe7b34fce3f90419fb45ab74aaa34" title="parameters for kernel function">kernel_param</a> = param;</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> </div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> ths-><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> = flags;</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> ths-><a class="code" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf" title="degree of smoothness of regularization">p</a> = p;</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> ths-><a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6" title="inner boundary">eps_I</a> = eps_I; <span class="comment">/* =(double)ths->p/(double)nn; */</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> ths-><a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps_B</a> = eps_B; <span class="comment">/* =1.0/16.0; */</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="keywordflow">if</span> (!(ths-><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> & <a class="code" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d" title="Constant symbols.">EXACT_NEARFIELD</a>))</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> {</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>==1)</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> {</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a> = 4*(ths-><a class="code" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf" title="degree of smoothness of regularization">p</a>)*(ths-><a class="code" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf" title="degree of smoothness of regularization" [...]
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> ths-><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>+5)*(<span class="keyword"> [...]
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> }</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> {</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8" title="kernel function">k</a> == one_over_x)</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> {</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="keywordtype">double</span> delta = 1e-8;</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="keywordflow">switch</span>(p)</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> {</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="keywordflow">case</span> 2: delta = 1e-3;</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="keywordflow">case</span> 3: delta = 1e-4;</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="keywordflow">case</span> 4: delta = 1e-5;</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="keywordflow">case</span> 5: delta = 1e-6;</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="keywordflow">case</span> 6: delta = 1e-6;</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="keywordflow">case</span> 7: delta = 1e-7;</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="keywordflow">default</span>: delta = 1e-8;</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> }</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> </div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="preprocessor">#if defined(NF_KUB)</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="preprocessor"></span> ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a> = <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>(10, (<span class="keywordtype">int</span>) ceil(1.4/pow(delta,1.0/4.0)));</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> ths-><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>+3)*(<span class="keyword [...]
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="preprocessor">#elif defined(NF_QUADR)</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="preprocessor"></span> ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a> = (int) ceil(2.2/pow(delta,1.0/3.0));</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> ths-><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>+3)*(<span class="keyword [...]
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="preprocessor">#elif defined(NF_LIN)</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="preprocessor"></span> ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a> = (int) ceil(1.7/pow(delta,1.0/2.0));</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> ths-><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>+3)*(<span class="keyword [...]
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="preprocessor"></span><span class="preprocessor"> #error define NF_LIN or NF_QUADR or NF_KUB</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> {</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a> = 2*(ths-><a class="code" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf" title="degree of smoothness of regularization">p</a>)*(ths-><a class="code" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf" title="degree of smoothness of regularizatio [...]
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> ths-><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>+3)*(<span class="keyword [...]
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> }</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> }</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> }</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> </div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> ths-><a class="code" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084" title="FS__ - fast summation.">n</a> = nn;</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> {</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> N[t] = nn;</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> n[t] = 2*nn;</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> }</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> nfft_init_guru(&(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>), d, N, N_total, n, m,</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> sort_flags_adjoint |</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> nfft_init_guru(&(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>), d, N, M_total, n, m,</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> sort_flags_trafo |</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> </div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> n_total = 1;</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> n_total *= nn;</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a> = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(n_total*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="preprocessor"></span><span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> fftw_plan_with_nthreads(nthreads);</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> ths->fft_plan = fftw_plan_dft(d,N,ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>,ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>,FFTW_FORWARD,FFTW_ESTIMATE);</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> & NEARFIELD_BOXES)</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> {</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> ths->box_count_per_dim = floor((0.5 - ths-><a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps_B</a>) / ths-><a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6" title="inner boundary">eps_I</a>) + 1;</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> ths->box_count = 1;</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> ths->box_count *= ths->box_count_per_dim;</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> </div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> ths->box_offset = (<span class="keywordtype">int</span> *) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((ths->box_count+1) * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> ths->box_alpha = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976" title="number of source knots">N_total</a>*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex)));</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> </div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> ths->box_x = (<span class="keywordtype">double</span> *) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a> * ths-><a class="code" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976" title="number of source knots">N_total</a> * <span class=" [...]
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> }</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> }</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> </div>
+<div class="line"><a name="l00742"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769"> 742</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769" title="finalization of fastsum plan">fastsum_finalize</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths)</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> {</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>);</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a>);</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>);</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>);</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="keywordflow">if</span> (!(ths-><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> & <a class="code" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d" title="Constant symbols.">EXACT_NEARFIELD</a>))</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a>);</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> </div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> nfft_finalize(&(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>));</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> nfft_finalize(&(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>));</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> </div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="preprocessor"></span><span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <span class="preprocessor"></span> fftw_destroy_plan(ths->fft_plan);</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>);</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> </div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> & NEARFIELD_BOXES)</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> {</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->box_offset);</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->box_alpha);</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->box_x);</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> }</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> }</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> </div>
+<div class="line"><a name="l00775"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd"> 775</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd" title="direct computation of sums">fastsum_exact</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths)</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> {</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="keywordtype">double</span> r;</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> </div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(j,k,t,r)</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (j=0; j<ths-><a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>; j++)</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> {</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> ths-><a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j]=0.0;</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="keywordflow">for</span> (k=0; k<ths-><a class="code" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976" title="number of source knots">N_total</a>; k++)</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> {</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>==1)</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> r = ths-><a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[j] - ths-><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[k];</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> {</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> r=0.0;</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> r += (ths-><a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[j*ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>+t]-ths-><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with rad [...]
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> r=sqrt(r);</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> }</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> ths-><a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j] += ths-><a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a>[k] * ths-><a class="code" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8" title="kernel function">k</a>(r,0,ths-><a class [...]
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> }</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> }</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> }</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> </div>
+<div class="line"><a name="l00802"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff"> 802</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff" title="precomputation for fastsum">fastsum_precompute</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths)</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> {</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="keywordtype">int</span> j,k,t;</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keywordtype">int</span> n_total;</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> ticks t0, t1;</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> </div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[3] = 0.0;</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> <span class="preprocessor"></span> t0 = getticks();</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> </div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> & NEARFIELD_BOXES)</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> {</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> <a class="code" href="group__applications__fastsum.html#ga8237ee0c81a2518c4849e71317a479d0" title="initialize box-based search data structures">BuildBox</a>(ths);</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> }</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> {</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> <a class="code" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174" title="recursive sort of source knots dimension by dimension to get tree structure">BuildTree</a>(ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>,0,ths-><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source kn [...]
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> }</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> </div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> <span class="preprocessor"></span> t1 = getticks();</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[3] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> </div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="preprocessor"></span> t0 = getticks();</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> <span class="keywordflow">if</span> (!(ths-><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> & <a class="code" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d" title="Constant symbols.">EXACT_NEARFIELD</a>))</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> {</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>==1)</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k=-ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>/2-2; k <= ths->Ad/2+2; k++)</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> ths-><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a>[k+ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>/2+2] = <a class="code" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1" title="regularized kernel with K_I arbitrary and K_B periodized ( [...]
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k=0; k <= ths-><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>+2; k++)</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> ths-><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a>[k] = <a class="code" href="group__applications__fastsum.html#ga2077aec7b505fd6bf082c28cc5d59468" title="regularized kernel for even kernels with K_I even and K_B mirrored smooth to K(1/2) (used in dD...">regkern3</a>(ths-><a class="code" href="structfastsum__plan__.html#aaf4ea39f8 [...]
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> }</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="preprocessor"></span> t1 = getticks();</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> </div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="preprocessor"></span> t0 = getticks();</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> <span class="keywordflow">for</span> (k=0; k<ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" h [...]
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>));</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> </div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> nfft_precompute_psi(&(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>));</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> nfft_precompute_full_psi(&(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>));</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="preprocessor"></span> t1 = getticks();</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> <span class="keywordflow">for</span>(k=0; k<ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;k++)</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[k] = ths-><a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</ [...]
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> </div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> #ifdef MEASURE_TIME</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> t0 = getticks();</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="keywordflow">for</span> (j=0; j<ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" h [...]
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> </div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>));</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> </div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> nfft_precompute_psi(&(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>));</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> </div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> nfft_precompute_full_psi(&(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>));</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="preprocessor"></span> t1 = getticks();</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> </div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="preprocessor"></span> t0 = getticks();</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> n_total = 1;</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> n_total *= ths-><a class="code" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084" title="FS__ - fast summation.">n</a>;</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> </div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> #pragma omp parallel <span class="keywordflow">for</span> <span class="keywordflow">default</span>(shared) <span class="keyword">private</span>(j,k,t)</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="keywordflow">for</span> (j=0; j<n_total; j++)</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> {</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>==1)</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>[j] = <a class="code" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1" title="regularized kernel with K_I arbitrary and K_B periodized (used in 1D)">regkern1</a>(ths-><a class="code" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8" [...]
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> {</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> k=j;</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>[j]=0.0;</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> {</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>[j] += ((double)(k % (ths-><a class="code" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084" title="FS__ - fast summation.">n</a>)) / (ths-><a class="code" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084" title="FS__ - fast summation." [...]
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> k = k / (ths-><a class="code" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084" title="FS__ - fast summation.">n</a>);</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> }</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>[j] = <a class="code" href="group__applications__fastsum.html#ga2077aec7b505fd6bf082c28cc5d59468" title="regularized kernel for even kernels with K_I even and K_B mirrored smooth to K(1/2) (used in dD...">regkern3</a>(ths-><a class="code" href="structfastsum__plan__.html#aaf4e [...]
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> }</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> }</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> </div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>, ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" [...]
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> fftw_execute(ths->fft_plan);</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>, ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" [...]
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> <span class="preprocessor"></span> t1 = getticks();</div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> </div>
+<div class="line"><a name="l00940"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8"> 940</a></span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8" title="fast NFFT-based summation">fastsum_trafo</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths)</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> {</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="keywordtype">int</span> j,k,t;</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> ticks t0, t1;</div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> </div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[4] = 0.0; </div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[5] = 0.0;</div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[6] = 0.0;</div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[7] = 0.0;</div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> </div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> <span class="preprocessor"></span> t0 = getticks();</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> nfft_adjoint(&(ths-><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>));</div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> <span class="preprocessor"></span> t1 = getticks();</div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[4] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> </div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> <span class="preprocessor"></span> t0 = getticks();</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k=0; k<ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k++)</div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = ths-><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion c [...]
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> #ifdef MEASURE_TIME</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> t1 = getticks();</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[5] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="preprocessor"></span> t0 = getticks();</div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&(ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>));</div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="preprocessor"></span> t1 = getticks();</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[6] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> </div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="preprocessor"></span> t0 = getticks();</div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(j,k,t)</span></div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (j=0; j<ths-><a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>; j++)</div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> {</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="keywordtype">double</span> ymin[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>], ymax[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>]; </div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> & NEARFIELD_BOXES)</div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> {</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> ths-><a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j] = ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[ [...]
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> }</div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> {</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; t++)</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> {</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> ymin[t] = ths-><a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>*j+t] - ths-><a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6" title="inner boundary">eps_I</a>;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> ymax[t] = ths-><a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[ths-><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>*j+t] + ths-><a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6" title="inner boundary">eps_I</a>;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> }</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> ths-><a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j] = ths-><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[ [...]
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> }</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> <span class="comment">/* ths->f[j] = ths->mv2.f[j]; */</span></div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="comment">/* ths->f[j] = SearchTree(ths->d,0, ths->x, ths->alpha, ymin, ymax, ths->N_total, ths->k, ths->kernel_param, ths->Ad, ths->Add, ths->p, ths->flags); */</span></div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> }</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> </div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="preprocessor"></span> t1 = getticks();</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> ths-><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[7] += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="comment">/* \} */</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> </div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="comment">/* fastsum.c */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/fastsum_8h.html b/doc/api/html/fastsum_8h.html
new file mode 100644
index 0000000..16953ac
--- /dev/null
+++ b/doc/api/html/fastsum_8h.html
@@ -0,0 +1,113 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastsum.h File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">fastsum.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Header file for the fast NFFT-based summation algorithm.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+</div>
+<p><a href="fastsum_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html">fastsum_plan_</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">plan for fast summation algorithm <a href="structfastsum__plan__.html#details">More...</a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:gafa2dd15778c93b2eaa42de608fb4d1a8"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gafa2dd15778c93b2eaa42de608fb4d1a8">NF_KUB</a></td></tr>
+<tr class="memdesc:gafa2dd15778c93b2eaa42de608fb4d1a8"><td class="mdescLeft"> </td><td class="mdescRight">Include header for C99 complex datatype. <a href="group__applications__fastsum.html#gafa2dd15778c93b2eaa42de608fb4d1a8"></a><br/></td></tr>
+<tr class="memitem:gac22376cb30edef9131c592a355d1030d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac22376cb30edef9131c592a355d1030d"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d">EXACT_NEARFIELD</a> (1U<< 0)</td></tr>
+<tr class="memdesc:gac22376cb30edef9131c592a355d1030d"><td class="mdescLeft"> </td><td class="mdescRight">Constant symbols. <br/></td></tr>
+<tr class="memitem:ga90e3c393cc832eec83e9da3b207edb8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga90e3c393cc832eec83e9da3b207edb8c"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NEARFIELD_BOXES</b> (1U<< 1)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga9227ba3791b3360dc4a0d6fbf82034c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9227ba3791b3360dc4a0d6fbf82034c6"></a>
+typedef double _Complex(* </td><td class="memItemRight" valign="bottom"><b>kernel</b> )(double, int, const double *)</td></tr>
+<tr class="memitem:gad953252f6b309404991c4afc7b98b34b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad953252f6b309404991c4afc7b98b34b"></a>
+typedef struct <a class="el" href="structfastsum__plan__.html">fastsum_plan_</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a></td></tr>
+<tr class="memdesc:gad953252f6b309404991c4afc7b98b34b"><td class="mdescLeft"> </td><td class="mdescRight">plan for fast summation algorithm <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga9a053d513b2eb19c5f1c70f16e0ae149"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149">fastsum_init_guru</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths, int d, int N_total, int M_total, kernel k, double *param, unsigned flags, int nn, int m, int p, double e [...]
+<tr class="memdesc:ga9a053d513b2eb19c5f1c70f16e0ae149"><td class="mdescLeft"> </td><td class="mdescRight">initialization of fastsum plan <a href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149"></a><br/></td></tr>
+<tr class="memitem:gab989ea4659fe681bd4c025e82756f769"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769">fastsum_finalize</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gab989ea4659fe681bd4c025e82756f769"><td class="mdescLeft"> </td><td class="mdescRight">finalization of fastsum plan <a href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769"></a><br/></td></tr>
+<tr class="memitem:gaaee3dd954ffc99e4330fabe16ccad0fd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd">fastsum_exact</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gaaee3dd954ffc99e4330fabe16ccad0fd"><td class="mdescLeft"> </td><td class="mdescRight">direct computation of sums <a href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd"></a><br/></td></tr>
+<tr class="memitem:ga197c16fcec7935886fc97d140f2b20ff"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff">fastsum_precompute</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga197c16fcec7935886fc97d140f2b20ff"><td class="mdescLeft"> </td><td class="mdescRight">precomputation for fastsum <a href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff"></a><br/></td></tr>
+<tr class="memitem:gaab2cc691ba59064c18d439c9fd2185e8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8">fastsum_trafo</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gaab2cc691ba59064c18d439c9fd2185e8"><td class="mdescLeft"> </td><td class="mdescRight">fast NFFT-based summation <a href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8"></a><br/></td></tr>
+<tr class="memitem:ga247527ab67657107225fa69882f0208c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga247527ab67657107225fa69882f0208c"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c">regkern</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:ga247527ab67657107225fa69882f0208c"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel with K_I arbitrary and K_B smooth to zero <br/></td></tr>
+<tr class="memitem:ga67103860c05f7296f7c302e7f0dbfe79"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga67103860c05f7296f7c302e7f0dbfe79"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79">kubintkern</a> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memdesc:ga67103860c05f7296f7c302e7f0dbfe79"><td class="mdescLeft"> </td><td class="mdescRight">cubic spline interpolation in near field with even kernels <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Header file for the fast NFFT-based summation algorithm. </p>
+<p>reference: M. Fenn, G. Steidl, Fast NFFT based summation of radial functions. Sampl. Theory Signal Image Process., 3, 1-28, 2004.</p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2003-2006 </dd></dl>
+
+<p>Definition in file <a class="el" href="fastsum_8h_source.html">fastsum.h</a>.</p>
+</div></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/fastsum_8h_source.html b/doc/api/html/fastsum_8h_source.html
new file mode 100644
index 0000000..513efa2
--- /dev/null
+++ b/doc/api/html/fastsum_8h_source.html
@@ -0,0 +1,154 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastsum.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastsum.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="fastsum_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: fastsum.h 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#ifndef fastsum_h_inc</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor"></span><span class="preprocessor">#define fastsum_h_inc</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#if !(defined(NF_LIN) || defined(NF_QUADR) || defined(NF_KUB))</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gafa2dd15778c93b2eaa42de608fb4d1a8"> 53</a></span> <span class="preprocessor"></span><span class="preprocessor"> #define NF_KUB</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> {</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">typedef</span> <span class="keywordtype">double</span> _Complex (*kernel)(double , int , <span class="keyword">const</span> <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"><a class="code" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d"> 66</a></span> <span class="preprocessor">#define EXACT_NEARFIELD (1U<< 0)</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor">#define NEARFIELD_BOXES (1U<< 1)</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html"> 71</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan_</a></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307"> 75</a></span> <span class="keywordtype">int</span> <a class="code" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307" title="api">d</a>; </div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976"> 77</a></span> <span class="keywordtype">int</span> <a class="code" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976" title="number of source knots">N_total</a>; </div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f"> 78</a></span> <span class="keywordtype">int</span> <a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>; </div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087"> 80</a></span> <span class="keywordtype">double</span> _Complex *<a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a>; </div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a"> 81</a></span> <span class="keywordtype">double</span> _Complex *<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>; </div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91"> 83</a></span> <span class="keywordtype">double</span> *<a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>; </div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51"> 84</a></span> <span class="keywordtype">double</span> *<a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>; </div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8"> 86</a></span> kernel <a class="code" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8" title="kernel function">k</a>; </div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a37cbe7b34fce3f90419fb45ab74aaa34"> 87</a></span> <span class="keywordtype">double</span> *<a class="code" href="structfastsum__plan__.html#a37cbe7b34fce3f90419fb45ab74aaa34" title="parameters for kernel function">kernel_param</a>; </div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa"> 89</a></span> <span class="keywordtype">unsigned</span> <a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a>; </div>
+<div class="line"><a name="l00094"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a2ac8e8bdf57c75a916b1f4ef36ca513e"> 94</a></span> <span class="keywordtype">double</span> _Complex *<a class="code" href="structfastsum__plan__.html#a2ac8e8bdf57c75a916b1f4ef36ca513e" title="internal">pre_K</a>; </div>
+<div class="line"><a name="l00097"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084"> 97</a></span> <span class="keywordtype">int</span> <a class="code" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084" title="FS__ - fast summation.">n</a>; </div>
+<div class="line"><a name="l00098"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972"> 98</a></span> fftw_complex *<a class="code" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972" title="expansion coefficients">b</a>; </div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf"> 100</a></span> <span class="keywordtype">int</span> <a class="code" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf" title="degree of smoothness of regularization">p</a>; </div>
+<div class="line"><a name="l00101"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6"> 101</a></span> <span class="keywordtype">double</span> <a class="code" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6" title="inner boundary">eps_I</a>; <span class="comment">/* fixed to p/n so far */</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46"> 102</a></span> <span class="keywordtype">double</span> <a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps_B</a>; <span class="comment">/* fixed to 1/16 so far */</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766"> 104</a></span> <a class="code" href="structnfft__plan.html">nfft_plan</a> <a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>; </div>
+<div class="line"><a name="l00105"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78"> 105</a></span> <a class="code" href="structnfft__plan.html">nfft_plan</a> <a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>; </div>
+<div class="line"><a name="l00108"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef"> 108</a></span> <span class="keywordtype">int</span> <a class="code" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef" title="near field">Ad</a>; </div>
+<div class="line"><a name="l00109"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc"> 109</a></span> <span class="keywordtype">double</span> _Complex *<a class="code" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc" title="spline values">Add</a>; </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment">/* things for computing *b - are they used only once?? */</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> fftw_plan fft_plan;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">int</span> box_count;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">int</span> box_count_per_dim;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">int</span> *box_offset;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">double</span> *box_x;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">double</span> _Complex *box_alpha;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"><a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d"> 120</a></span> <span class="keywordtype">double</span> <a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[8]; </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> } <a class="code" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b" title="plan for fast summation algorithm">fastsum_plan</a>;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149" title="initialization of fastsum plan">fastsum_init_guru</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N_total, <span class="keywordty [...]
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769" title="finalization of fastsum plan">fastsum_finalize</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd" title="direct computation of sums">fastsum_exact</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff" title="precomputation for fastsum">fastsum_precompute</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8" title="fast NFFT-based summation">fastsum_trafo</a>(<a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> *ths);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="comment">/* \} */</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c" title="regularized kernel with K_I arbitrary and K_B smooth to zero">regkern</a>(kernel k, <span class="keywordtype">double</span> xx, <span class="keywordtype">int</span> p, <span class="keyword">const</span> <span class="keywordtype">double</span> *param, <span class="ke [...]
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordtype">double</span> _Complex <a class="code" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79" title="cubic spline interpolation in near field with even kernels">kubintkern</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keyword">const</span> <span class="keywordtype">double</span> _Complex *Add,</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">const</span> <span class="keywordtype">int</span> Ad, <span class="keyword">const</span> <span class="keywordtype">double</span> a);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor"></span>} <span class="comment">/* extern "C" */</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor"></span><span class="comment">/* fastsum.h */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/fastsum__benchomp_8c_source.html b/doc/api/html/fastsum__benchomp_8c_source.html
new file mode 100644
index 0000000..3cd856c
--- /dev/null
+++ b/doc/api/html/fastsum__benchomp_8c_source.html
@@ -0,0 +1,701 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastsum_benchomp.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastsum_benchomp.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <unistd.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <<a class="code" href="nfft3_8h.html">nfft3.h</a>></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#define NREPEAT 5</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">static</span> FILE* file_out_tex = NULL;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keywordtype">int</span> get_nthreads_array(<span class="keywordtype">int</span> **arr)</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordtype">int</span> max_threads = nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">int</span> alloc_num = 2;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">int</span> ret_number = 0;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">int</span> max_threads_pw2 = (max_threads / 2) * 2 == max_threads ? 1 : 0;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordflow">if</span> (max_threads <= 5)</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> *arr = (<span class="keywordtype">int</span>*) malloc(max_threads*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">for</span> (k = 0; k < max_threads; k++)</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> *(*arr + k) = k+1;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">return</span> max_threads;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordflow">for</span> (k = 1; k <= max_threads; k*=2, alloc_num++);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> *arr = (<span class="keywordtype">int</span>*) malloc(alloc_num*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">for</span> (k = 1; k <= max_threads; k*=2)</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">if</span> (k != max_threads && 2*k > max_threads && max_threads_pw2)</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> {</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> *(*arr + ret_number) = max_threads/2;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> ret_number++;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> *(*arr + ret_number) = k;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> ret_number++;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">if</span> (k != max_threads && 2*k > max_threads)</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> {</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> *(*arr + ret_number) = max_threads;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> ret_number++;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> }</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> }</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">return</span> ret_number;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> } </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> check_result_value(<span class="keyword">const</span> <span class="keywordtype">int</span> val, <span class="keyword">const</span> <span class="keywordtype">int</span> ok, <span class="keyword">const</span> <span class="keywordtype">char</span> *msg)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">if</span> (val != ok)</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> fprintf(stderr, <span class="stringliteral">"ERROR %s: %d not %d\n"</span>, msg, val, ok);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> exit(1);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">void</span> run_test_create(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> L, <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> {</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">char</span> cmd[1025];</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> snprintf(cmd, 1024, <span class="stringliteral">"./fastsum_benchomp_createdataset %d %d %d > fastsum_benchomp_test.data"</span>, d, L, M);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> fprintf(stderr, <span class="stringliteral">"%s\n"</span>, cmd);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> check_result_value(system(cmd), 0, <span class="stringliteral">"createdataset"</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">void</span> run_test_init_output()</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> {</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> FILE *f = fopen(<span class="stringliteral">"fastsum_benchomp_test.result"</span>, <span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span> (f!= NULL)</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> fclose(f);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> {</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">int</span> d;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">int</span> L;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">int</span> M;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">int</span> n;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">int</span> p;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">char</span> *kernel_name;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">double</span> c;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">double</span> eps_I;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">double</span> eps_B;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> } <a class="code" href="structs__param.html">s_param</a>;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> {</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">double</span> avg;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">double</span> min;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordtype">double</span> max;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> } <a class="code" href="structs__resval.html">s_resval</a>;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> {</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordtype">int</span> nthreads;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <a class="code" href="structs__resval.html">s_resval</a> resval[16];</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> } <a class="code" href="structs__result.html">s_result</a>;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> {</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <a class="code" href="structs__param.html">s_param</a> param;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <a class="code" href="structs__result.html">s_result</a> *results;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordtype">int</span> nresults;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> } <a class="code" href="structs__testset.html">s_testset</a>;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordtype">void</span> run_test(<a class="code" href="structs__resval.html">s_resval</a> *res, <span class="keywordtype">int</span> nrepeat, <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> p, <span class="keywordtype">char</span> *kernel_name, <span class="keywordtype">double</span> c, <span class="keywordtype">double</span> eps [...]
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> {</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordtype">char</span> cmd[1025];</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordtype">int</span> r,t;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">for</span> (t = 0; t < 16; t++)</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> {</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> res[t].avg = 0.0; res[t].min = 1.0/0.0; res[t].max = 0.0;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> }</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">if</span> (nthreads < 2)</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> snprintf(cmd, 1024, <span class="stringliteral">"./fastsum_benchomp_detail_single %d %d %d %s %lg %lg %lg < fastsum_benchomp_test.data > fastsum_benchomp_test.out"</span>, n, m, p, kernel_name, c, eps_I, eps_B);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> snprintf(cmd, 1024, <span class="stringliteral">"./fastsum_benchomp_detail_threads %d %d %d %s %lg %lg %lg %d < fastsum_benchomp_test.data > fastsum_benchomp_test.out"</span>, n, m, p, kernel_name, c, eps_I, eps_B, nthreads);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> fprintf(stderr, <span class="stringliteral">"%s\n"</span>, cmd);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> check_result_value(system(cmd), 0, cmd);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">for</span> (r = 0; r < nrepeat; r++)</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> {</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordtype">int</span> retval;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordtype">double</span> v[16];</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> FILE *f;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> check_result_value(system(cmd), 0, cmd);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> f = fopen(<span class="stringliteral">"fastsum_benchomp_test.out"</span>, <span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> retval = fscanf(f, <span class="stringliteral">"%lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg"</span>, v, v+1, v+2, v+3, v+4, v+5, v+6, v+7, v+8, v+9, v+10, v+11, v+12, v+13, v+14, v+15);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> check_result_value(retval, 16, <span class="stringliteral">"read fastsum_benchomp_test.out"</span>);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> fclose(f);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">for</span> (t = 0; t < 16; t++)</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> {</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> res[t].avg += v[t];</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">if</span> (res[t].min > v[t])</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> res[t].min = v[t];</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">if</span> (res[t].max < v[t])</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> res[t].max = v[t];</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> }</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> }</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">for</span> (t = 0; t < 16; t++)</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> res[t].avg /= nrepeat;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> fprintf(stderr, <span class="stringliteral">"%d %d: "</span>, nthreads, nrepeat);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">for</span> (t = 0; t < 16; t++)</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> fprintf(stderr, <span class="stringliteral">"%.3e %.3e %.3e | "</span>, res[t].avg, res[t].min, res[t].max);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> fprintf(stderr, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_psi_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> {</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">if</span> (flags & PRE_PSI)</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">return</span> <span class="stringliteral">"prepsi"</span>;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (flags & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">return</span> <span class="stringliteral">"unknownPSI"</span>;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">return</span> <span class="stringliteral">"nopsi"</span>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> }</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_sort_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> {</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">if</span> (flags & NFFT_OMP_BLOCKWISE_ADJOINT)</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">if</span> (flags & NFFT_SORT_NODES)</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">return</span> <span class="stringliteral">"sorted"</span>;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">return</span> <span class="stringliteral">"unsorted"</span>;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> }</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_adjoint_omp_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> {</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">if</span> (flags & NFFT_OMP_BLOCKWISE_ADJOINT)</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">return</span> <span class="stringliteral">"blockwise"</span>;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> }</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="preprocessor">#define MASK_FSUM_D (1U<<0)</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FSUM_L (1U<<1)</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FSUM_M (1U<<2)</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FSUM_MULTIBW (1U<<3)</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FSUM_WINM (1U<<4)</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FSUM_P (1U<<5)</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FSUM_KERNEL (1U<<6)</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FSUM_EPSI (1U<<7)</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FSUM_EPSB (1U<<8)</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fastsum_determine_different_parameters(<a class="code" href="structs__testset.html">s_testset</a> *testsets, <span class="keywordtype">int</span> ntestsets)</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> {</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mask = 0;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">if</span> (ntestsets < 2)</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">for</span> (t = 1; t < ntestsets; t++)</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> {</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">if</span> (testsets[t-1].param.d != testsets[t].param.d)</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> mask |= MASK_FSUM_D;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">if</span> (testsets[t-1].param.L != testsets[t].param.L)</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> mask |= MASK_FSUM_L;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">if</span> (testsets[t-1].param.M != testsets[t].param.M)</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> mask |= MASK_FSUM_M;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">if</span> (testsets[t-1].param.n != testsets[t].param.n)</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> mask |= MASK_FSUM_MULTIBW;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">if</span> (testsets[t-1].param.m != testsets[t].param.m)</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> mask |= MASK_FSUM_WINM;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">if</span> (testsets[t-1].param.p != testsets[t].param.p)</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> mask |= MASK_FSUM_P;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">if</span> (strcmp(testsets[t-1].param.kernel_name, testsets[t].param.kernel_name) != 0)</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> mask |= MASK_FSUM_KERNEL;</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">if</span> (testsets[t-1].param.eps_I != testsets[t].param.eps_I)</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> mask |= MASK_FSUM_EPSI;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">if</span> (testsets[t-1].param.eps_B != testsets[t].param.eps_B)</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> mask |= MASK_FSUM_EPSB;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> }</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">return</span> mask;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> }</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordtype">void</span> strEscapeUnderscore(<span class="keywordtype">char</span> *dst, <span class="keywordtype">char</span> *src, <span class="keywordtype">int</span> maxlen)</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> {</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordtype">int</span> len;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordtype">int</span> offset = 0;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">while</span> (src[i] != <span class="charliteral">'\0'</span> && len + offset < maxlen - 1)</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> {</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">if</span> (src[i] == <span class="charliteral">'_'</span>)</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> len = snprintf(dst+offset, maxlen-offset, <span class="stringliteral">"\\_{}"</span>);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> len = snprintf(dst+offset, maxlen-offset, <span class="stringliteral">"%c"</span>, src[i]);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> offset += len;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> i++;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> }</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> }</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordtype">void</span> fastsum_get_plot_title_minus_indep(<span class="keywordtype">char</span> *outstr, <span class="keywordtype">int</span> maxlen, <span class="keywordtype">char</span> *hostname, <a class="code" href="structs__param.html">s_param</a> param, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> diff_mask)</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> {</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mask = ~diff_mask;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keywordtype">int</span> offset = 0;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordtype">int</span> len;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> len = snprintf(outstr, maxlen, <span class="stringliteral">"%s"</span>, hostname);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> offset += len;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">if</span> (mask & MASK_FSUM_D)</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> {</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %dd fastsum"</span>, param.d);</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> offset += len;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> }</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">if</span> ((mask & (MASK_FSUM_L | MASK_FSUM_M)) && param.L == param.M)</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> {</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" L=M=%d"</span>, param.L);</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> offset += len;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> }</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> {</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">if</span> (mask & MASK_FSUM_L)</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> {</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" L=%d"</span>, param.L);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> offset += len;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> }</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">if</span> (mask & MASK_FSUM_M)</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> {</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" M=%d"</span>, param.M);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> offset += len;</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> }</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> }</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">if</span> (mask & MASK_FSUM_MULTIBW)</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> {</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" n=%d"</span>, param.n);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> offset += len;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> }</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keywordflow">if</span> (mask & MASK_FSUM_WINM)</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> {</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" m=%d"</span>, param.m);</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> offset += len;</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> }</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">if</span> (mask & MASK_FSUM_P)</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> {</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" p=%d"</span>, param.p);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> offset += len;</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> }</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="keywordflow">if</span> (mask & MASK_FSUM_KERNEL)</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> {</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordtype">char</span> tmp[maxlen];</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> strEscapeUnderscore(tmp, param.kernel_name, maxlen);</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %s"</span>, tmp);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> offset += len;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> }</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">if</span> ((mask & (MASK_FSUM_EPSI | MASK_FSUM_EPSB)) && param.eps_I == param.eps_B)</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> {</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" $\\varepsilon_\\mathrm{I}$=$\\varepsilon_\\mathrm{B}$=%g"</span>, param.eps_I);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> offset += len;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> }</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> {</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">if</span> (mask & MASK_FSUM_EPSI)</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> {</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" $\\varepsilon_\\mathrm{I}$=%g"</span>, param.eps_I);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> offset += len;</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> }</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">if</span> (mask & MASK_FSUM_EPSB)</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> {</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" $\\varepsilon_\\mathrm{B}$=%g"</span>, param.eps_B);</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> offset += len;</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> }</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> }</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> }</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="keywordtype">void</span> nfft_adjoint_print_output_histo_DFBRT(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> testset)</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> {</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordtype">int</span> i, size = testset.nresults;</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordtype">char</span> hostname[1025];</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">if</span> (gethostname(hostname, 1024) != 0)</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> strncpy(hostname, <span class="stringliteral">"unnamed"</span>, 1024);</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> fprintf(out, <span class="stringliteral">"\\begin{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> fprintf(out, <span class="stringliteral">"\\begin{axis}["</span>);</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> fprintf(out, <span class="stringliteral">"width=0.9\\textwidth, height=0.6\\textwidth, "</span>);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> fprintf(out, <span class="stringliteral">"symbolic x coords={"</span>);</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">if</span> (i > 0)</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> fprintf(out, <span class="stringliteral">",%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> fprintf(out, <span class="stringliteral">"%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> fprintf(out, <span class="stringliteral">"}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, "</span>);</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> fprintf(out, <span class="stringliteral">" title={%s %dd $\\textrm{NFFT}^\\top$ N=%d $\\sigma$=2 M=%d m=%d prepsi sorted}"</span>, hostname, testset.param.d, testset.param.n, testset.param.M, testset.param.m);</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> fprintf(out, <span class="stringliteral">" ]\n"</span>);</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[10].avg);</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[11].avg);</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[12].avg);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[1].avg);</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[4].avg + testset.results[i].resval[1].avg);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> fprintf(out, <span class="stringliteral">"\\legend{D,$\\textrm{F}^\\top$,$\\textrm{B}^\\top$,prepsi,total}\n"</span>);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> fprintf(out, <span class="stringliteral">"\\end{axis}\n"</span>);</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> fprintf(out, <span class="stringliteral">"\\end{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> fprintf(out, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> fflush(out);</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> }</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="keywordtype">void</span> nfft_trafo_print_output_histo_DFBRT(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> testset)</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> {</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="keywordtype">int</span> i, size = testset.nresults;</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordtype">char</span> hostname[1025];</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keywordflow">if</span> (gethostname(hostname, 1024) != 0)</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> strncpy(hostname, <span class="stringliteral">"unnamed"</span>, 1024);</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> fprintf(out, <span class="stringliteral">"\\begin{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> fprintf(out, <span class="stringliteral">"\\begin{axis}["</span>);</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> fprintf(out, <span class="stringliteral">"width=0.9\\textwidth, height=0.6\\textwidth, "</span>);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> fprintf(out, <span class="stringliteral">"symbolic x coords={"</span>);</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keywordflow">if</span> (i > 0)</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> fprintf(out, <span class="stringliteral">",%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> fprintf(out, <span class="stringliteral">"%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> fprintf(out, <span class="stringliteral">"}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, "</span>);</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> fprintf(out, <span class="stringliteral">" title={%s %dd $\\textrm{NFFT}$ N=%d $\\sigma$=2 M=%d m=%d prepsi sorted}"</span>, hostname, testset.param.d, testset.param.n, testset.param.M, testset.param.m);</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> fprintf(out, <span class="stringliteral">" ]\n"</span>);</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[13].avg);</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[14].avg);</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[15].avg);</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[2].avg);</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[6].avg + testset.results[i].resval[2].avg);</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> fprintf(out, <span class="stringliteral">"\\legend{D,F,B,prepsi,total}\n"</span>);</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> fprintf(out, <span class="stringliteral">"\\end{axis}\n"</span>);</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> fprintf(out, <span class="stringliteral">"\\end{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> fprintf(out, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> fflush(out);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> }</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keywordtype">void</span> fastsum_print_output_histo_PreRfNfT(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> testset)</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> {</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keywordtype">int</span> i, size = testset.nresults;</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="keywordtype">char</span> hostname[1025];</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="keywordtype">char</span> plottitle[1025];</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keywordflow">if</span> (gethostname(hostname, 1024) != 0)</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> strncpy(hostname, <span class="stringliteral">"unnamed"</span>, 1024);</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> fastsum_get_plot_title_minus_indep(plottitle, 1024, hostname, testset.param, 0);</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> fprintf(out, <span class="stringliteral">"\\begin{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> fprintf(out, <span class="stringliteral">"\\begin{axis}["</span>);</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> fprintf(out, <span class="stringliteral">"width=0.9\\textwidth, height=0.6\\textwidth, "</span>);</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> fprintf(out, <span class="stringliteral">"symbolic x coords={"</span>);</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">if</span> (i > 0)</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> fprintf(out, <span class="stringliteral">",%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> fprintf(out, <span class="stringliteral">"%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> fprintf(out, <span class="stringliteral">"}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, "</span>);</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> fprintf(out, <span class="stringliteral">" title={%s}"</span>, plottitle);</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> fprintf(out, <span class="stringliteral">" ]\n"</span>);</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[1].avg+testset.results[i].resval[2].avg);</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[3].avg);</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[4].avg + testset.results[i].resval[5].avg + testset.results[i].resval[6].avg);</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[7].avg);</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[9].avg - testset.results[i].resval[0].avg);</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> fprintf(out, <span class="stringliteral">"\\legend{prepsi (step 1b),init nearfield (step 1c),far field (steps 2a-c),nearfield (step 2d),total $-$ step 1a}\n"</span>);</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> fprintf(out, <span class="stringliteral">"\\end{axis}\n"</span>);</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> fprintf(out, <span class="stringliteral">"\\end{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> fprintf(out, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> fflush(out);</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> }</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="keywordtype">void</span> fastsum_print_output_speedup_total_minus_indep(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> *testsets, <span class="keywordtype">int</span> ntestsets)</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> {</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keywordtype">int</span> i, t;</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keywordtype">char</span> hostname[1025];</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="keywordtype">char</span> plottitle[1025];</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> diff_mask = fastsum_determine_different_parameters(testsets, ntestsets);</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">if</span> (gethostname(hostname, 1024) != 0)</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> strncpy(hostname, <span class="stringliteral">"unnamed"</span>, 1024);</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> fastsum_get_plot_title_minus_indep(plottitle, 1024, hostname, testsets[0].param, diff_mask | MASK_FSUM_WINM);</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> fprintf(out, <span class="stringliteral">"\\begin{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> fprintf(out, <span class="stringliteral">"\\begin{axis}["</span>);</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> fprintf(out, <span class="stringliteral">"width=0.9\\textwidth, height=0.6\\textwidth, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Speedup, xtick=data, legend style={ legend pos = north west, legend columns=1}, ymajorgrids=true, yminorgrids=true, minor y tick num=4, "</span>);</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> fprintf(out, <span class="stringliteral">" title={%s}"</span>, plottitle);</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> fprintf(out, <span class="stringliteral">" ]\n"</span>);</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="keywordflow">for</span> (t = 0; t < ntestsets; t++)</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> {</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <a class="code" href="structs__testset.html">s_testset</a> testset = testsets[t];</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="keywordtype">double</span> tref = 0.0;</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="keywordflow">for</span> (i = 0; i < testset.nresults; i++)</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="keywordflow">if</span> (testset.results[i].nthreads == 1)</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> tref = testset.results[i].resval[9].avg - testset.results[i].resval[0].avg;</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> </div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="keywordflow">for</span> (i = 0; i < testset.nresults; i++)</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, tref/(testset.results[i].resval[9].avg - testset.results[i].resval[0].avg));</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">for</span> (i = 0; i < testset.nresults; i++)</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> {</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> fprintf(stderr, <span class="stringliteral">"%d:%.3f "</span>, testset.results[i].nthreads, tref/(testset.results[i].resval[9].avg - testset.results[i].resval[0].avg));</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> }</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> fprintf(stderr, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> }</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> </div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> fprintf(out, <span class="stringliteral">"\\legend{{"</span>);</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordflow">for</span> (t = 0; t < ntestsets; t++)</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> {</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="keywordtype">char</span> title[256];</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">if</span> (t > 0)</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> fprintf(out, <span class="stringliteral">"},{"</span>);</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> fastsum_get_plot_title_minus_indep(title, 255, <span class="stringliteral">""</span>, testsets[t].param, ~(diff_mask | MASK_FSUM_WINM));</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> fprintf(out, <span class="stringliteral">"%s"</span>, title);</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> }</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> fprintf(out, <span class="stringliteral">"}}\n"</span>);</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> fprintf(out, <span class="stringliteral">"\\end{axis}\n"</span>);</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> fprintf(out, <span class="stringliteral">"\\end{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> fprintf(out, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> fflush(out);</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> }</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordtype">void</span> run_testset(<a class="code" href="structs__testset.html">s_testset</a> *testset, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> L, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> p, <span class="keywordtype">char</span> *kernel_name, <sp [...]
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> {</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> testset->param.d = d;</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> testset->param.L = L;</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> testset->param.M = M;</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> testset->param.n = n;</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> testset->param.m = m;</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> testset->param.p = p;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> testset->param.kernel_name = kernel_name;</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> testset->param.c = c;</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> testset->param.eps_I = eps_I;</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> testset->param.eps_B = eps_B;</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> testset->results = (<a class="code" href="structs__result.html">s_result</a>*) malloc(n_threads_array_size*<span class="keyword">sizeof</span>(<a class="code" href="structs__result.html">s_result</a>));</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> testset->nresults = n_threads_array_size;</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> </div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> run_test_create(testset->param.d, testset->param.L, testset->param.M);</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="keywordflow">for</span> (i = 0; i < n_threads_array_size; i++)</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> {</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> testset->results[i].nthreads = nthreads_array[i];</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> run_test(testset->results[i].resval, NREPEAT, testset->param.n, testset->param.m, testset->param.p, testset->param.kernel_name, testset->param.c, testset->param.eps_I, testset->param.eps_B, testset->results[i].nthreads);</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> }</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> }</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> </div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordtype">void</span> test1(<span class="keywordtype">int</span> *nthreads_array, <span class="keywordtype">int</span> n_threads_array_size)</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> {</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <a class="code" href="structs__testset.html">s_testset</a> testsets[1];</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="preprocessor"></span> run_testset(&testsets[0], 3, 100000, 100000, 128, 4, 7, <span class="stringliteral">"one_over_x"</span>, 0.0, 0.03125, 0.03125, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> </div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> fastsum_print_output_speedup_total_minus_indep(file_out_tex, testsets, 1);</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> fastsum_print_output_histo_PreRfNfT(file_out_tex, testsets[0]);</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> </div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> nfft_adjoint_print_output_histo_DFBRT(file_out_tex, testsets[0]);</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> </div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> nfft_trafo_print_output_histo_DFBRT(file_out_tex, testsets[0]);</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>** argv)</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> {</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="keywordtype">int</span> *nthreads_array;</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordtype">int</span> n_threads_array_size = get_nthreads_array(&nthreads_array);</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="preprocessor">#if !(defined MEASURE_TIME && defined MEASURE_TIME_FFTW)</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="preprocessor"></span> fprintf(stderr, <span class="stringliteral">"WARNING: Detailed time measurements are not activated.\n"</span>);</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> fprintf(stderr, <span class="stringliteral">"Please re-run the configure script with options\n"</span>);</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> fprintf(stderr, <span class="stringliteral">"--enable-measure-time --enable-measure-time-fftw --enable-openmp\n"</span>);</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> fprintf(stderr, <span class="stringliteral">"and run \"make clean all\"\n\n"</span>);</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keywordflow">for</span> (k = 0; k < n_threads_array_size; k++)</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> fprintf(stderr, <span class="stringliteral">"%d "</span>, nthreads_array[k]);</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> fprintf(stderr, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> file_out_tex = fopen(<span class="stringliteral">"fastsum_benchomp_results_plots.tex"</span>, <span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> </div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> test1(nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> fclose(file_out_tex);</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> </div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> }</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/fastsum__benchomp__createdataset_8c_source.html b/doc/api/html/fastsum__benchomp__createdataset_8c_source.html
new file mode 100644
index 0000000..76b93c1
--- /dev/null
+++ b/doc/api/html/fastsum__benchomp__createdataset_8c_source.html
@@ -0,0 +1,177 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastsum_benchomp_createdataset.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastsum_benchomp_createdataset.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">void</span> fastsum_benchomp_createdataset(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> L, <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">int</span> t, j, k;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> R *x;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> R *y;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> C *alpha;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> x = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d*L*<span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> y = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d*L*<span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> alpha = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(L*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> k = 0;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">while</span> (k < L)</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> {</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">double</span> r_max = 1.0;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">double</span> r2 = 0.0;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">for</span> (j=0; j<d; j++)</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> x[k*d+j] = 2.0 * r_max * (<span class="keywordtype">double</span>)rand()/(double)RAND_MAX - r_max;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">for</span> (j=0; j<d; j++)</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> r2 += x[k*d+j] * x[k*d+j];</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">if</span> (r2 >= r_max * r_max)</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> k++;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> }</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(alpha,L);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> k = 0;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">while</span> (k < M)</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> {</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordtype">double</span> r_max = 1.0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">double</span> r2 = 0.0;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">for</span> (j=0; j<d; j++)</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> y[k*d+j] = 2.0 * r_max * (<span class="keywordtype">double</span>)rand()/(double)RAND_MAX - r_max;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">for</span> (j=0; j<d; j++)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> r2 += y[k*d+j] * y[k*d+j];</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">if</span> (r2 >= r_max * r_max)</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> k++;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> printf(<span class="stringliteral">"%d %d %d\n"</span>, d, L, M);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">for</span> (j=0; j < L; j++)</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> {</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">for</span> (t=0; t < d; t++)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> printf(<span class="stringliteral">"%.16e "</span>, x[d*j+t]);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">for</span> (j=0; j < L; j++)</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> printf(<span class="stringliteral">"%.16e %.16e\n"</span>, creal(alpha[j]), cimag(alpha[j]));</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">for</span> (j=0; j < M; j++)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> {</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">for</span> (t=0; t < d; t++)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> printf(<span class="stringliteral">"%.16e "</span>, y[d*j+t]);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(y);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(alpha);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> }</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> {</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">int</span> d;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">int</span> L;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">int</span> M;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span> (argc < 4) {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> fprintf(stderr, <span class="stringliteral">"usage: d L M\n"</span>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> d = atoi(argv[1]);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> L = atoi(argv[2]);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> M = atoi(argv[3]);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> fprintf(stderr, <span class="stringliteral">"d=%d, L=%d, M=%d\n"</span>, d, L, M);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> fastsum_benchomp_createdataset(d, L, M);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> }</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/fastsum__benchomp__detail_8c_source.html b/doc/api/html/fastsum__benchomp__detail_8c_source.html
new file mode 100644
index 0000000..1a68568
--- /dev/null
+++ b/doc/api/html/fastsum__benchomp__detail_8c_source.html
@@ -0,0 +1,236 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastsum_benchomp_detail.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastsum_benchomp_detail.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="fastsum_8h.html" title="Header file for the fast NFFT-based summation algorithm.">fastsum.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="kernels_8h.html" title="Header file with predefined kernels for the fast summation algorithm.">kernels.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">int</span> bench_openmp(FILE *infile, <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> p, <span class="keywordtype">double</span> _Complex (*kernel)(<span class="keywordtype">double</span> , <span class="keywordtype">int</span> , <span class="keyword">const</span> <span class="keywordtype">double</span> *), <span class [...]
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> my_fastsum_plan;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">int</span> d, L, M;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">int</span> t, j;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">double</span> re,im;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">double</span> r_max = 0.25 - my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps_B</a>/2.0;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> ticks t0, t1;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">double</span> tt_total;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> fscanf(infile, <span class="stringliteral">"%d %d %d"</span>, &d, &L, &M);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"></span> fftw_import_wisdom_from_filename(<span class="stringliteral">"fastsum_benchomp_detail_threads.plan"</span>);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor"></span> fftw_import_wisdom_from_filename(<span class="stringliteral">"fastsum_benchomp_detail_single.plan"</span>);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <a class="code" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149" title="initialization of fastsum plan">fastsum_init_guru</a>(&my_fastsum_plan, d, L, M, kernel, &c, NEARFIELD_BOXES, n, m, p, eps_I, eps_B);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor"></span> fftw_export_wisdom_to_filename(<span class="stringliteral">"fastsum_benchomp_detail_threads.plan"</span>);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor"></span> fftw_export_wisdom_to_filename(<span class="stringliteral">"fastsum_benchomp_detail_single.plan"</span>);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">for</span> (j=0; j < L; j++)</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">for</span> (t=0; t < d; t++)</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">double</span> v;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> fscanf(infile, <span class="stringliteral">"%lg"</span>, &v);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[d*j+t] = v * r_max;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> }</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">for</span> (j=0; j < L; j++)</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> {</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> fscanf(infile, <span class="stringliteral">"%lg %lg"</span>, &re, &im);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a>[j] = re + _Complex_I * im;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> }</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">for</span> (j=0; j < M; j++)</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> {</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">for</span> (t=0; t < d; t++)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">double</span> v;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> fscanf(infile, <span class="stringliteral">"%lg"</span>, &v);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[d*j+t] = v * r_max;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> t0 = getticks();</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <a class="code" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff" title="precomputation for fastsum">fastsum_precompute</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <a class="code" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8" title="fast NFFT-based summation">fastsum_trafo</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> t1 = getticks();</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> tt_total = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor">#ifndef MEASURE_TIME</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor"></span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[3] = 0.0;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[4] = 0.0;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[5] = 0.0;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[6] = 0.0;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[7] = 0.0;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="preprocessor"></span><span class="preprocessor">#ifndef MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor"></span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766" title="source nfft plan">mv1</a>.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78" title="target nfft plan">mv2</a>.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> printf(<span class="stringliteral">"%.6e %.6e %.6e %6e %.6e %.6e %.6e %.6e %.6e %6e %.6e %.6e %6e %.6e %.6e %6e\n"</span>, my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0], my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e [...]
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <a class="code" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769" title="finalization of fastsum plan">fastsum_finalize</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> {</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordtype">int</span> n; </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">int</span> m; </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">int</span> p; </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">char</span> *s; </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordtype">double</span> _Complex (*kernel)(double , int , <span class="keyword">const</span> <span class="keywordtype">double</span> *); </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordtype">double</span> c; </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordtype">double</span> eps_I; </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordtype">double</span> eps_B; </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="preprocessor"></span> <span class="keywordtype">int</span> nthreads;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span> (argc != 9)</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> nthreads = atoi(argv[8]);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> fftw_init_threads();</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> omp_set_num_threads(nthreads);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="preprocessor"></span> <span class="keywordflow">if</span> (argc != 8)</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> n=atoi(argv[1]);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> m=atoi(argv[2]);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> p=atoi(argv[3]);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> s=argv[4];</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> c=atof(argv[5]);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> eps_I=atof(argv[6]);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> eps_B=atof(argv[7]);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"gaussian"</span>)==0)</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> kernel = gaussian;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"multiquadric"</span>)==0)</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> kernel = multiquadric;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"inverse_multiquadric"</span>)==0)</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> kernel = inverse_multiquadric;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"logarithm"</span>)==0)</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> kernel = logarithm;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"thinplate_spline"</span>)==0)</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> kernel = thinplate_spline;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_square"</span>)==0)</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> kernel = one_over_square;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_modulus"</span>)==0)</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> kernel = one_over_modulus;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_x"</span>)==0)</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> kernel = one_over_x;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"inverse_multiquadric3"</span>)==0)</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> kernel = inverse_multiquadric3;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"sinc_kernel"</span>)==0)</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> kernel = sinc_kernel;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"cosc"</span>)==0)</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> kernel = cosc;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"cot"</span>)==0)</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> kernel = kcot;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> {</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> s=<span class="stringliteral">"multiquadric"</span>;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> kernel = multiquadric;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> }</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> bench_openmp(stdin, n, m, p, kernel, c, eps_I, eps_B);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> }</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/fastsum__matlab_8c.html b/doc/api/html/fastsum__matlab_8c.html
new file mode 100644
index 0000000..be08e57
--- /dev/null
+++ b/doc/api/html/fastsum__matlab_8c.html
@@ -0,0 +1,77 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastsum_matlab.c File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">fastsum_matlab.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Simple test program for the fast NFFT-based summation algorithm, called by fastsum.m.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="fastsum_8h_source.html">fastsum.h</a>"</code><br/>
+<code>#include "<a class="el" href="kernels_8h_source.html">kernels.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="fastsum__matlab_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Simple test program for the fast NFFT-based summation algorithm, called by fastsum.m. </p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2006 </dd></dl>
+
+<p>Definition in file <a class="el" href="fastsum__matlab_8c_source.html">fastsum_matlab.c</a>.</p>
+</div></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/fastsum__matlab_8c_source.html b/doc/api/html/fastsum__matlab_8c_source.html
new file mode 100644
index 0000000..f0e654f
--- /dev/null
+++ b/doc/api/html/fastsum__matlab_8c_source.html
@@ -0,0 +1,252 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastsum_matlab.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastsum_matlab.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="fastsum__matlab_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: fastsum_matlab.c 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span><span class="preprocessor"> #include <complex.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="fastsum_8h.html" title="Header file for the fast NFFT-based summation algorithm.">fastsum.h</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "<a class="code" href="kernels_8h.html" title="Header file with predefined kernels for the fast summation algorithm.">kernels.h</a>"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> {</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">int</span> j,k,t; </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">int</span> d; </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">int</span> N; </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">int</span> M; </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">int</span> n; </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">int</span> m; </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">int</span> p; </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">char</span> *s; </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">double</span> _Complex (*kernel)(double , int , <span class="keyword">const</span> <span class="keywordtype">double</span> *); </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">double</span> c; </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> my_fastsum_plan; </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">double</span> _Complex *direct; </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> ticks t0, t1; </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">double</span> time; </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">double</span> error=0.0; </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">double</span> eps_I; </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">double</span> eps_B; </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> FILE *fid1, *fid2;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">double</span> temp;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">if</span> (argc!=11)</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> {</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> printf(<span class="stringliteral">"\nfastsum_test d N M n m p kernel c\n\n"</span>);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> printf(<span class="stringliteral">" d dimension \n"</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> printf(<span class="stringliteral">" N number of source nodes \n"</span>);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> printf(<span class="stringliteral">" M number of target nodes \n"</span>);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> printf(<span class="stringliteral">" n expansion degree \n"</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> printf(<span class="stringliteral">" m cut-off parameter \n"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> printf(<span class="stringliteral">" p degree of smoothness \n"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> printf(<span class="stringliteral">" kernel kernel function (e.g., gaussian)\n"</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> printf(<span class="stringliteral">" c kernel parameter \n"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> printf(<span class="stringliteral">" eps_I inner boundary \n"</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> printf(<span class="stringliteral">" eps_B outer boundary \n\n"</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> exit(-1);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> {</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> d=atoi(argv[1]);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> N=atoi(argv[2]); c=1.0/pow((<span class="keywordtype">double</span>)N,1.0/(<span class="keywordtype">double</span>)d);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> M=atoi(argv[3]);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> n=atoi(argv[4]);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> m=atoi(argv[5]);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> p=atoi(argv[6]);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> s=argv[7];</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> c=atof(argv[8]);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> eps_I=atof(argv[9]);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> eps_B=atof(argv[10]);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"gaussian"</span>)==0)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> kernel = gaussian;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"multiquadric"</span>)==0)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> kernel = multiquadric;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"inverse_multiquadric"</span>)==0)</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> kernel = inverse_multiquadric;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"logarithm"</span>)==0)</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> kernel = logarithm;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"thinplate_spline"</span>)==0)</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> kernel = thinplate_spline;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_square"</span>)==0)</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> kernel = one_over_square;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_modulus"</span>)==0)</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> kernel = one_over_modulus;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_x"</span>)==0)</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> kernel = one_over_x;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"inverse_multiquadric3"</span>)==0)</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> kernel = inverse_multiquadric3;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"sinc_kernel"</span>)==0)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> kernel = sinc_kernel;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"cosc"</span>)==0)</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> kernel = cosc;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"cot"</span>)==0)</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> kernel = kcot;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> {</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> s=<span class="stringliteral">"multiquadric"</span>;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> kernel = multiquadric;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> }</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> }</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> printf(<span class="stringliteral">"d=%d, N=%d, M=%d, n=%d, m=%d, p=%d, kernel=%s, c=%g, eps_I=%g, eps_B=%g \n"</span>,d,N,M,n,m,p,s,c,eps_I,eps_B);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <a class="code" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149" title="initialization of fastsum plan">fastsum_init_guru</a>(&my_fastsum_plan, d, N, M, kernel, &c, 0, n, m, p, eps_I, eps_B);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">/*fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, EXACT_NEARFIELD, n, m, p);*/</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> fid1=fopen(<span class="stringliteral">"x.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> fid2=fopen(<span class="stringliteral">"alpha.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">for</span> (k=0; k<N; k++)</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> {</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> {</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> fscanf(fid1,<span class="stringliteral">"%le"</span>,&my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[k*d+t]);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> fscanf(fid2,<span class="stringliteral">"%le"</span>,&temp); my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a>[k] = temp;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> fscanf(fid2,<span class="stringliteral">"%le"</span>,&temp); my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a>[k] += temp*_Complex_I;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> }</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> fclose(fid1);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> fclose(fid2);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> fid1=fopen(<span class="stringliteral">"y.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> {</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> {</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> fscanf(fid1,<span class="stringliteral">"%le"</span>,&my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[j*d+t]);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> fclose(fid1);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> printf(<span class="stringliteral">"direct computation: "</span>); fflush(NULL);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> t0 = getticks();</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <a class="code" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd" title="direct computation of sums">fastsum_exact</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> t1 = getticks();</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> time=nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> printf(<span class="stringliteral">"%fsec\n"</span>,time);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> direct = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex)));</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">for</span> (j=0; j<my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>; j++)</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> direct[j]=my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j];</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> printf(<span class="stringliteral">"pre-computation: "</span>); fflush(NULL);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> t0 = getticks();</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <a class="code" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff" title="precomputation for fastsum">fastsum_precompute</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> t1 = getticks();</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> time=nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> printf(<span class="stringliteral">"%fsec\n"</span>,time);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> printf(<span class="stringliteral">"fast computation: "</span>); fflush(NULL);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> t0 = getticks();</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <a class="code" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8" title="fast NFFT-based summation">fastsum_trafo</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> t1 = getticks();</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> time=nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> printf(<span class="stringliteral">"%fsec\n"</span>,time);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> error=0.0;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">for</span> (j=0; j<my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>; j++)</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> {</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">if</span> (cabs(direct[j]-my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j])/cabs(direct[j])>error)</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> error=cabs(direct[j]-my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j])/cabs(direct[j]);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> printf(<span class="stringliteral">"max relative error: %e\n"</span>,error);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> fid1=fopen(<span class="stringliteral">"f.dat"</span>,<span class="stringliteral">"w+"</span>);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> fid2=fopen(<span class="stringliteral">"f_direct.dat"</span>,<span class="stringliteral">"w+"</span>);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">if</span> (fid1==NULL)</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> {</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> printf(<span class="stringliteral">"Fehler!\n"</span>);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> exit(-1);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> {</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> temp=creal(my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j]);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> fprintf(fid1,<span class="stringliteral">" % .16e"</span>,temp);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> temp=cimag(my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j]);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> fprintf(fid1,<span class="stringliteral">" % .16e\n"</span>,temp);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> temp=creal(direct[j]);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> fprintf(fid2,<span class="stringliteral">" % .16e"</span>,temp);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> temp=cimag(direct[j]);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> fprintf(fid2,<span class="stringliteral">" % .16e\n"</span>,temp);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> }</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> fclose(fid1);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> fclose(fid2);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <a class="code" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769" title="finalization of fastsum plan">fastsum_finalize</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> }</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/fastsum__test_8c.html b/doc/api/html/fastsum__test_8c.html
new file mode 100644
index 0000000..8fd6c93
--- /dev/null
+++ b/doc/api/html/fastsum__test_8c.html
@@ -0,0 +1,77 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastsum_test.c File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">fastsum_test.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Simple test program for the fast NFFT-based summation algorithm.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="fastsum_8h_source.html">fastsum.h</a>"</code><br/>
+<code>#include "<a class="el" href="kernels_8h_source.html">kernels.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="fastsum__test_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Simple test program for the fast NFFT-based summation algorithm. </p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2006 </dd></dl>
+
+<p>Definition in file <a class="el" href="fastsum__test_8c_source.html">fastsum_test.c</a>.</p>
+</div></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/fastsum__test_8c_source.html b/doc/api/html/fastsum__test_8c_source.html
new file mode 100644
index 0000000..3d19918
--- /dev/null
+++ b/doc/api/html/fastsum__test_8c_source.html
@@ -0,0 +1,300 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastsum_test.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fastsum_test.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="fastsum__test_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: fastsum_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span><span class="preprocessor"> #include <complex.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"></span><span class="preprocessor"> #include <omp.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "<a class="code" href="fastsum_8h.html" title="Header file for the fast NFFT-based summation algorithm.">fastsum.h</a>"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="kernels_8h.html" title="Header file with predefined kernels for the fast summation algorithm.">kernels.h</a>"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> {</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">int</span> j,k,t; </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">int</span> d; </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">int</span> N; </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">int</span> M; </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">int</span> n; </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">int</span> m; </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">int</span> p; </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">char</span> *s; </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">double</span> _Complex (*kernel)(double , int , <span class="keyword">const</span> <span class="keywordtype">double</span> *); </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">double</span> c; </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <a class="code" href="structfastsum__plan__.html" title="plan for fast summation algorithm">fastsum_plan</a> my_fastsum_plan; </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">double</span> _Complex *direct; </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> ticks t0, t1; </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">double</span> time; </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">double</span> error=0.0; </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">double</span> eps_I; </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordtype">double</span> eps_B; </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">if</span> (argc!=11)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> {</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> printf(<span class="stringliteral">"\nfastsum_test d N M n m p kernel c eps_I eps_B\n\n"</span>);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> printf(<span class="stringliteral">" d dimension \n"</span>);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> printf(<span class="stringliteral">" N number of source nodes \n"</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> printf(<span class="stringliteral">" M number of target nodes \n"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> printf(<span class="stringliteral">" n expansion degree \n"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> printf(<span class="stringliteral">" m cut-off parameter \n"</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> printf(<span class="stringliteral">" p degree of smoothness \n"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> printf(<span class="stringliteral">" kernel kernel function (e.g., gaussian)\n"</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> printf(<span class="stringliteral">" c kernel parameter \n"</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> printf(<span class="stringliteral">" eps_I inner boundary \n"</span>);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> printf(<span class="stringliteral">" eps_B outer boundary \n\n"</span>);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> exit(-1);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> {</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> d=atoi(argv[1]);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> N=atoi(argv[2]); c=1.0/pow((<span class="keywordtype">double</span>)N,1.0/(<span class="keywordtype">double</span>)d);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> M=atoi(argv[3]);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> n=atoi(argv[4]);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> m=atoi(argv[5]);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> p=atoi(argv[6]);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> s=argv[7];</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> c=atof(argv[8]);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> eps_I=atof(argv[9]);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> eps_B=atof(argv[10]);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"gaussian"</span>)==0)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> kernel = gaussian;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"multiquadric"</span>)==0)</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> kernel = multiquadric;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"inverse_multiquadric"</span>)==0)</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> kernel = inverse_multiquadric;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"logarithm"</span>)==0)</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> kernel = logarithm;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"thinplate_spline"</span>)==0)</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> kernel = thinplate_spline;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_square"</span>)==0)</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> kernel = one_over_square;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_modulus"</span>)==0)</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> kernel = one_over_modulus;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"one_over_x"</span>)==0)</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> kernel = one_over_x;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"inverse_multiquadric3"</span>)==0)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> kernel = inverse_multiquadric3;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"sinc_kernel"</span>)==0)</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> kernel = sinc_kernel;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"cosc"</span>)==0)</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> kernel = cosc;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(s,<span class="stringliteral">"cot"</span>)==0)</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> kernel = kcot;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> {</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> s=<span class="stringliteral">"multiquadric"</span>;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> kernel = multiquadric;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> }</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> printf(<span class="stringliteral">"d=%d, N=%d, M=%d, n=%d, m=%d, p=%d, kernel=%s, c=%g, eps_I=%g, eps_B=%g \n"</span>,d,N,M,n,m,p,s,c,eps_I,eps_B);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="preprocessor">#ifdef NF_KUB</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="preprocessor"></span> printf(<span class="stringliteral">"nearfield correction using piecewise cubic Lagrange interpolation\n"</span>);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor">#elif defined(NF_QUADR)</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="preprocessor"></span> printf(<span class="stringliteral">"nearfield correction using piecewise quadratic Lagrange interpolation\n"</span>);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor">#elif defined(NF_LIN)</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="preprocessor"></span> printf(<span class="stringliteral">"nearfield correction using piecewise linear Lagrange interpolation\n"</span>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="preprocessor"></span><span class="preprocessor"> #pragma omp parallel</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="preprocessor"></span> {</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="preprocessor"> #pragma omp single</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="preprocessor"></span> {</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> printf(<span class="stringliteral">"nthreads=%d\n"</span>, omp_get_max_threads());</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> }</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> fftw_init_threads();</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <a class="code" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149" title="initialization of fastsum plan">fastsum_init_guru</a>(&my_fastsum_plan, d, N, M, kernel, &c, 0, n, m, p, eps_I, eps_B);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment">//fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, NEARFIELD_BOXES, n, m, p, eps_I, eps_B);</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">if</span> (my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa" title="flags precomp.">flags</a> & NEARFIELD_BOXES)</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> printf(<span class="stringliteral">"determination of nearfield candidates based on partitioning into boxes\n"</span>);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> printf(<span class="stringliteral">"determination of nearfield candidates based on search tree\n"</span>);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> k = 0;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">while</span> (k < N)</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> {</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordtype">double</span> r_max = 0.25 - my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps_B</a>/2.0;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordtype">double</span> r2 = 0.0;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">for</span> (j=0; j<d; j++)</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[k*d+j] = 2.0 * r_max * (<span class="keywordtype">double</span>)rand()/(double)RAND_MAX - r_max;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">for</span> (j=0; j<d; j++)</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> r2 += my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[k*d+j] * my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91" title="source knots in d-ball with radius 1/4-eps_b/2">x</a>[k*d+j];</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> if (r2 >= r_max * r_max)</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> k++;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> }</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">for</span> (k=0; k<N; k++)</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> {</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment">/* double r=(0.25-my_fastsum_plan.eps_B/2.0)*pow((double)rand()/(double)RAND_MAX,1.0/d);</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment"> my_fastsum_plan.x[k*d+0] = r;</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment"> for (j=1; j<d; j++)</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment"> double phi=2.0*PI*(double)rand()/(double)RAND_MAX;</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="comment"> my_fastsum_plan.x[k*d+j] = r;</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment"> for (t=0; t<j; t++)</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="comment"> my_fastsum_plan.x[k*d+t] *= cos(phi);</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="comment"> }</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment"> my_fastsum_plan.x[k*d+j] *= sin(phi);</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment"> }</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087" title="source coefficients">alpha</a>[k] = (double)rand()/(double)RAND_MAX + _Complex_I*(<span class="keywordtype">double</span>)rand()/(double)RAND_MAX;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> k = 0;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">while</span> (k < M)</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> {</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordtype">double</span> r_max = 0.25 - my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46" title="outer boundary">eps_B</a>/2.0;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordtype">double</span> r2 = 0.0;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">for</span> (j=0; j<d; j++)</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[k*d+j] = 2.0 * r_max * (<span class="keywordtype">double</span>)rand()/(double)RAND_MAX - r_max;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">for</span> (j=0; j<d; j++)</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> r2 += my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[k*d+j] * my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51" title="target knots in d-ball with radius 1/4-eps_b/2">y</a>[k*d+j];</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> if (r2 >= r_max * r_max)</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> k++;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment">/* for (k=0; k<M; k++)</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment"> double r=(0.25-my_fastsum_plan.eps_B/2.0)*pow((double)rand()/(double)RAND_MAX,1.0/d);</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="comment"> my_fastsum_plan.y[k*d+0] = r;</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="comment"> for (j=1; j<d; j++)</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment"> double phi=2.0*PI*(double)rand()/(double)RAND_MAX;</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="comment"> my_fastsum_plan.y[k*d+j] = r;</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment"> for (t=0; t<j; t++)</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment"> my_fastsum_plan.y[k*d+t] *= cos(phi);</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment"> }</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="comment"> my_fastsum_plan.y[k*d+j] *= sin(phi);</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment"> }</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment"> } */</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> printf(<span class="stringliteral">"direct computation: "</span>); fflush(NULL);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> t0 = getticks();</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <a class="code" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd" title="direct computation of sums">fastsum_exact</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> t1 = getticks();</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> time=nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> printf(<span class="stringliteral">"%fsec\n"</span>,time);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> direct = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex)));</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">for</span> (j=0; j<my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>; j++)</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> direct[j]=my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j];</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> printf(<span class="stringliteral">"pre-computation: "</span>); fflush(NULL);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> t0 = getticks();</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <a class="code" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff" title="precomputation for fastsum">fastsum_precompute</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> t1 = getticks();</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> time=nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> printf(<span class="stringliteral">"%fsec\n"</span>,time);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> printf(<span class="stringliteral">"fast computation: "</span>); fflush(NULL);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> t0 = getticks();</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <a class="code" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8" title="fast NFFT-based summation">fastsum_trafo</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> t1 = getticks();</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> time=nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> printf(<span class="stringliteral">"%fsec\n"</span>,time);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> error=0.0;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="keywordflow">for</span> (j=0; j<my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f" title="number of target knots">M_total</a>; j++)</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> {</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">if</span> (cabs(direct[j]-my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j])/cabs(direct[j])>error)</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> error=cabs(direct[j]-my_fastsum_plan.<a class="code" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a" title="target evaluations">f</a>[j])/cabs(direct[j]);</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> }</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> printf(<span class="stringliteral">"max relative error: %e\n"</span>,error);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <a class="code" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769" title="finalization of fastsum plan">fastsum_finalize</a>(&my_fastsum_plan);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> }</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/files.html b/doc/api/html/files.html
new file mode 100644
index 0000000..680fb49
--- /dev/null
+++ b/doc/api/html/files.html
@@ -0,0 +1,148 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - File List
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">File List</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="accuracy_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>accuracy.c</b></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="include_2api_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>include/api.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="kernel_2nfsft_2api_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>kernel/nfsft/api.h</b></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="bessel__i0_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>bessel_i0.c</b></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>config.h</b></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="construct__data__2d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>construct_data_2d.c</b></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="construct__data__2d1d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>construct_data_2d1d.c</b></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="construct__data__3d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>construct_data_3d.c</b></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="construct__data__inh__2d1d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>construct_data_inh_2d1d.c</b></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="construct__data__inh__3d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>construct_data_inh_3d.c</b></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="cycle_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>cycle.h</b></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="examples_2doxygen_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>examples/doxygen.c</b></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="applications_2doxygen_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>applications/doxygen.c</b></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="applications_2mri_2doxygen_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>applications/mri/doxygen.c</b></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="examples_2solver_2doxygen_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>examples/solver/doxygen.h</b></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="applications_2fastsumS2_2doxygen_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>applications/fastsumS2/doxygen.h</b></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="applications_2iterS2_2doxygen_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>applications/iterS2/doxygen.h</b></td><td class="desc"></td></tr>
+<tr id="row_17_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="applications_2mri_2mri2d_2doxygen_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>applications/mri/mri2d/doxygen.h</b></td><td class="desc"></td></tr>
+<tr id="row_18_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="applications_2mri_2mri3d_2doxygen_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>applications/mri/mri3d/doxygen.h</b></td><td class="desc"></td></tr>
+<tr id="row_19_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="applications_2polarFFT_2doxygen_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>applications/polarFFT/doxygen.h</b></td><td class="desc"></td></tr>
+<tr id="row_20_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="applications_2quadratureS2_2doxygen_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>applications/quadratureS2/doxygen.h</b></td><td class="desc"></td></tr>
+<tr id="row_21_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="error_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>error.c</b></td><td class="desc"></td></tr>
+<tr id="row_22_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastgauss_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>fastgauss.c</b></td><td class="desc"></td></tr>
+<tr id="row_23_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastsum_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="fastsum_8c.html" target="_self">fastsum.c</a></td><td class="desc">Fast NFFT-based summation algorithm</td></tr>
+<tr id="row_24_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastsum_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="fastsum_8h.html" target="_self">fastsum.h</a></td><td class="desc">Header file for the fast NFFT-based summation algorithm</td></tr>
+<tr id="row_25_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastsum__benchomp_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>fastsum_benchomp.c</b></td><td class="desc"></td></tr>
+<tr id="row_26_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastsum__benchomp__createdataset_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>fastsum_benchomp_createdataset.c</b></td><td class="desc"></td></tr>
+<tr id="row_27_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastsum__benchomp__detail_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>fastsum_benchomp_detail.c</b></td><td class="desc"></td></tr>
+<tr id="row_28_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastsum__matlab_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="fastsum__matlab_8c.html" target="_self">fastsum_matlab.c</a></td><td class="desc">Simple test program for the fast NFFT-based summation algorithm, called by fastsum.m</td></tr>
+<tr id="row_29_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastsum__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="fastsum__test_8c.html" target="_self">fastsum_test.c</a></td><td class="desc">Simple test program for the fast NFFT-based summation algorithm</td></tr>
+<tr id="row_30_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fastsumS2_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>fastsumS2.c</b></td><td class="desc"></td></tr>
+<tr id="row_31_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="flags_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="flags_8c.html" target="_self">flags.c</a></td><td class="desc">Testing the nfft</td></tr>
+<tr id="row_32_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="float_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>float.c</b></td><td class="desc"></td></tr>
+<tr id="row_33_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fpt_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="fpt_8c.html" target="_self">fpt.c</a></td><td class="desc">Implementation file for the FPT module</td></tr>
+<tr id="row_34_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fpt_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>fpt.h</b></td><td class="desc"></td></tr>
+<tr id="row_35_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="glacier_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>glacier.c</b></td><td class="desc"></td></tr>
+<tr id="row_36_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="infft_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>infft.h</b></td><td class="desc"></td></tr>
+<tr id="row_37_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="int_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>int.c</b></td><td class="desc"></td></tr>
+<tr id="row_38_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="inverse__radon_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="inverse__radon_8c.html" target="_self">inverse_radon.c</a></td><td class="desc">NFFT-based discrete inverse Radon transform</td></tr>
+<tr id="row_39_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="iterS2_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>iterS2.c</b></td><td class="desc"></td></tr>
+<tr id="row_40_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="kernels_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="kernels_8c.html" target="_self">kernels.c</a></td><td class="desc">File with predefined kernels for the fast summation algorithm</td></tr>
+<tr id="row_41_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="kernels_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="kernels_8h.html" target="_self">kernels.h</a></td><td class="desc">Header file with predefined kernels for the fast summation algorithm</td></tr>
+<tr id="row_42_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="lambda_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>lambda.c</b></td><td class="desc"></td></tr>
+<tr id="row_43_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="legendre_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>legendre.c</b></td><td class="desc"></td></tr>
+<tr id="row_44_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="legendre_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>legendre.h</b></td><td class="desc"></td></tr>
+<tr id="row_45_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="linogram__fft__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="linogram__fft__test_8c.html" target="_self">linogram_fft_test.c</a></td><td class="desc">NFFT-based pseudo-polar FFT and inverse</td></tr>
+<tr id="row_46_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="malloc_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>malloc.c</b></td><td class="desc"></td></tr>
+<tr id="row_47_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="mpolar__fft__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="mpolar__fft__test_8c.html" target="_self">mpolar_fft_test.c</a></td><td class="desc">NFFT-based polar FFT and inverse on modified polar grid</td></tr>
+<tr id="row_48_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="mri_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>mri.c</b></td><td class="desc"></td></tr>
+<tr id="row_49_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="ndft__fast_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="ndft__fast_8c.html" target="_self">ndft_fast.c</a></td><td class="desc">Testing ndft, Horner-like ndft, and fully precomputed ndft</td></tr>
+<tr id="row_50_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfct_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfct.c</b></td><td class="desc"></td></tr>
+<tr id="row_51_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfft.c</b></td><td class="desc"></td></tr>
+<tr id="row_52_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft3_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="nfft3_8h.html" target="_self">nfft3.h</a></td><td class="desc"></td></tr>
+<tr id="row_53_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft3conf_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfft3conf.h</b></td><td class="desc"></td></tr>
+<tr id="row_54_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft3util_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="nfft3util_8h.html" target="_self">nfft3util.h</a></td><td class="desc">Header file for utility functions used by the nfft3 library</td></tr>
+<tr id="row_55_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft__benchomp_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfft_benchomp.c</b></td><td class="desc"></td></tr>
+<tr id="row_56_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft__benchomp__createdataset_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfft_benchomp_createdataset.c</b></td><td class="desc"></td></tr>
+<tr id="row_57_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft__benchomp__detail_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfft_benchomp_detail.c</b></td><td class="desc"></td></tr>
+<tr id="row_58_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft__times_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfft_times.c</b></td><td class="desc"></td></tr>
+<tr id="row_59_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfsft_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="nfsft_8c.html" target="_self">nfsft.c</a></td><td class="desc">Implementation file for the NFSFT module</td></tr>
+<tr id="row_60_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfsft__benchomp_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfsft_benchomp.c</b></td><td class="desc"></td></tr>
+<tr id="row_61_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfsft__benchomp__createdataset_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfsft_benchomp_createdataset.c</b></td><td class="desc"></td></tr>
+<tr id="row_62_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfsft__benchomp__detail_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfsft_benchomp_detail.c</b></td><td class="desc"></td></tr>
+<tr id="row_63_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfsoft_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfsoft.c</b></td><td class="desc"></td></tr>
+<tr id="row_64_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfst_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfst.c</b></td><td class="desc"></td></tr>
+<tr id="row_65_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nnfft_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nnfft.c</b></td><td class="desc"></td></tr>
+<tr id="row_66_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nsfft_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nsfft.c</b></td><td class="desc"></td></tr>
+<tr id="row_67_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nsfft__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nsfft_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_68_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="polar__fft__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="polar__fft__test_8c.html" target="_self">polar_fft_test.c</a></td><td class="desc">NFFT-based polar FFT and inverse</td></tr>
+<tr id="row_69_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="quadratureS2_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>quadratureS2.c</b></td><td class="desc"></td></tr>
+<tr id="row_70_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="radon_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="radon_8c.html" target="_self">radon.c</a></td><td class="desc">NFFT-based discrete Radon transform</td></tr>
+<tr id="row_71_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="reconstruct__data__2d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>reconstruct_data_2d.c</b></td><td class="desc"></td></tr>
+<tr id="row_72_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="reconstruct__data__2d1d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>reconstruct_data_2d1d.c</b></td><td class="desc"></td></tr>
+<tr id="row_73_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="reconstruct__data__3d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>reconstruct_data_3d.c</b></td><td class="desc"></td></tr>
+<tr id="row_74_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="mri2d_2reconstruct__data__gridding_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>mri2d/reconstruct_data_gridding.c</b></td><td class="desc"></td></tr>
+<tr id="row_75_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="mri3d_2reconstruct__data__gridding_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>mri3d/reconstruct_data_gridding.c</b></td><td class="desc"></td></tr>
+<tr id="row_76_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="reconstruct__data__inh__2d1d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>reconstruct_data_inh_2d1d.c</b></td><td class="desc"></td></tr>
+<tr id="row_77_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="reconstruct__data__inh__3d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>reconstruct_data_inh_3d.c</b></td><td class="desc"></td></tr>
+<tr id="row_78_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="reconstruct__data__inh__nnfft_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>reconstruct_data_inh_nnfft.c</b></td><td class="desc"></td></tr>
+<tr id="row_79_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="fpt_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>fpt/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_80_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfct_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfct/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_81_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfft/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_82_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfsft_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfsft/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_83_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfsoft_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfsoft/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_84_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfst_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfst/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_85_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nnfft_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nnfft/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_86_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nsfft_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nsfft/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_87_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="solver_2simple__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>solver/simple_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_88_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfft_2simple__test__threads_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfft/simple_test_threads.c</b></td><td class="desc"></td></tr>
+<tr id="row_89_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="nfsft_2simple__test__threads_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>nfsft/simple_test_threads.c</b></td><td class="desc"></td></tr>
+<tr id="row_90_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinc_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinc.c</b></td><td class="desc"></td></tr>
+<tr id="row_91_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="solver_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="solver_8c.html" target="_self">solver.c</a></td><td class="desc">Implementation file for the solver module</td></tr>
+<tr id="row_92_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="solver__adjoint_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="solver__adjoint_8h.html" target="_self">solver_adjoint.h</a></td><td class="desc">Header file for adjoint solver</td></tr>
+<tr id="row_93_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="taylor__nfft_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="taylor__nfft_8c.html" target="_self">taylor_nfft.c</a></td><td class="desc">Testing the nfft againt a Taylor expansion based version</td></tr>
+<tr id="row_94_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="ticks_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>ticks.h</b></td><td class="desc"></td></tr>
+<tr id="row_95_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="util_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>util.c</b></td><td class="desc"></td></tr>
+<tr id="row_96_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="wigner_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>wigner.c</b></td><td class="desc"></td></tr>
+<tr id="row_97_"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="wigner_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="wigner_8h.html" target="_self">wigner.h</a></td><td class="desc">Header file for functions related to Wigner-d/D functions</td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/flags_8c.html b/doc/api/html/flags_8c.html
new file mode 100644
index 0000000..ad67bac
--- /dev/null
+++ b/doc/api/html/flags_8c.html
@@ -0,0 +1,93 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - flags.c File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">flags.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Testing the nfft.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="flags_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae9b8a68139d23c0923435caccc456d97"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae9b8a68139d23c0923435caccc456d97"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>flags_cp</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *dst, <a class="el" href="structnfft__plan.html">nfft_plan</a> *src)</td></tr>
+<tr class="memitem:a8a97c72294cf18ba58a3bef876afa38c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8a97c72294cf18ba58a3bef876afa38c"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>time_accuracy</b> (int d, int N, int M, int n, int m, unsigned test_ndft, unsigned test_pre_full_psi)</td></tr>
+<tr class="memitem:a550dfff6dd252731bf204932e537658e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a550dfff6dd252731bf204932e537658e"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>accuracy_pre_lin_psi</b> (int d, int N, int M, int n, int m, int K)</td></tr>
+<tr class="memitem:a3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a5d625f0503d2fb7e7a4a2fcb18b80801"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5d625f0503d2fb7e7a4a2fcb18b80801"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><b>test_fg</b> = 0</td></tr>
+<tr class="memitem:a923a2c2945ee7b6a8358d4eb5eb46749"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a923a2c2945ee7b6a8358d4eb5eb46749"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><b>test_fftw</b> = 0</td></tr>
+<tr class="memitem:a780207296bf31c1ca10a59fb1990a52d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a780207296bf31c1ca10a59fb1990a52d"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><b>test</b> = 0</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Testing the nfft. </p>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis</dd></dl>
+<p>References: Time and Memory Requirements of the Nonequispaced FFT </p>
+
+<p>Definition in file <a class="el" href="flags_8c_source.html">flags.c</a>.</p>
+</div></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/flags_8c_source.html b/doc/api/html/flags_8c_source.html
new file mode 100644
index 0000000..feb0f12
--- /dev/null
+++ b/doc/api/html/flags_8c_source.html
@@ -0,0 +1,377 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - flags.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">flags.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="flags_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: flags.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#ifdef GAUSSIAN</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor"></span> <span class="keywordtype">unsigned</span> test_fg=1;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"></span> <span class="keywordtype">unsigned</span> test_fg=0;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#ifdef MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor"></span> <span class="keywordtype">unsigned</span> test_fftw=1;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor"></span> <span class="keywordtype">unsigned</span> test_fftw=0;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"></span> <span class="keywordtype">unsigned</span> test=1;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor"></span> <span class="keywordtype">unsigned</span> test=0;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">static</span> <span class="keywordtype">void</span> flags_cp(<a class="code" href="structnfft__plan.html">nfft_plan</a> *dst, <a class="code" href="structnfft__plan.html">nfft_plan</a> *src)</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> {</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> dst-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>=src-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> dst-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=src-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> dst-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>=src-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> dst-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>=src-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> dst-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>=src-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> dst->my_fftw_plan1=src->my_fftw_plan1;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> dst->my_fftw_plan2=src->my_fftw_plan2;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">static</span> <span class="keywordtype">void</span> time_accuracy(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> test_ndft,</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">unsigned</span> test_pre_full_psi)</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">int</span> r, NN[d], nn[d];</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">double</span> t_ndft, t, e;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">double</span> _Complex *swapndft = NULL;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> ticks t0, t1;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p_pre_phi_hut;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p_fg_psi;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p_pre_lin_psi;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p_pre_fg_psi;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p_pre_psi;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p_pre_full_psi;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> printf(<span class="stringliteral">"%d\t%d\t"</span>, d, N);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">for</span>(r=0; r<d; r++)</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> {</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> NN[r]=N;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> nn[r]=n;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> nfft_init_guru(&p, d, NN, M, nn, m,</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> MALLOC_X| MALLOC_F_HAT| MALLOC_F|</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> nfft_init_guru(&p_pre_phi_hut, d, NN, M, nn, m, PRE_PHI_HUT,0);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> flags_cp(&p_pre_phi_hut, &p);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> nfft_precompute_one_psi(&p_pre_phi_hut);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">if</span>(test_fg)</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> {</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> nfft_init_guru(&p_fg_psi, d, NN, M, nn, m, FG_PSI,0);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> flags_cp(&p_fg_psi, &p);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> nfft_precompute_one_psi(&p_fg_psi);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> nfft_init_guru(&p_pre_lin_psi, d, NN, M, nn, m, PRE_LIN_PSI,0);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> flags_cp(&p_pre_lin_psi, &p);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> nfft_precompute_one_psi(&p_pre_lin_psi);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span>(test_fg)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> {</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> nfft_init_guru(&p_pre_fg_psi, d, NN, M, nn, m, PRE_FG_PSI,0);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> flags_cp(&p_pre_fg_psi, &p);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> nfft_precompute_one_psi(&p_pre_fg_psi);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> }</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> nfft_init_guru(&p_pre_psi, d, NN, M, nn, m, PRE_PSI,0);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> flags_cp(&p_pre_psi, &p);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> nfft_precompute_one_psi(&p_pre_psi);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span>(test_pre_full_psi)</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> {</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> nfft_init_guru(&p_pre_full_psi, d, NN, M, nn, m, PRE_FULL_PSI,0);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> flags_cp(&p_pre_full_psi, &p);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> nfft_precompute_one_psi(&p_pre_full_psi);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> }</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d2 [...]
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> {</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> t_ndft=0;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> r=0;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">while</span>(t_ndft<0.01)</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> {</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> r++;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> t0 = getticks();</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> nfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> t1 = getticks();</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> t_ndft+=t;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> }</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> t_ndft/=r;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> }</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> t_ndft=nan(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p_pre_phi_hut);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">if</span>(test_fg)</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p_fg_psi);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> p_fg_psi.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2]=nan(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p_pre_lin_psi);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span>(test_fg)</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p_pre_fg_psi);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> p_pre_fg_psi.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2]=nan(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p_pre_psi);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">if</span>(test_pre_full_psi)</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p_pre_full_psi);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> p_pre_full_psi.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2]=nan(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">if</span>(test_fftw==0)</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1]=nan(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> e=X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> e=nan(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> printf(<span class="stringliteral">"%.2e\t%d\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\n"</span>,</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> t_ndft,</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> m,</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> e,</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0],</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> p_pre_phi_hut.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0],</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1],</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2],</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> p_fg_psi.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2],</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> p_pre_lin_psi.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2],</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> p_pre_fg_psi.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2],</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> p_pre_psi.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2],</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> p_pre_full_psi.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2]);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> fflush(stdout);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">if</span>(test_pre_full_psi)</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> nfft_finalize(&p_pre_full_psi);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> nfft_finalize(&p_pre_psi);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">if</span>(test_fg)</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> nfft_finalize(&p_pre_fg_psi);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> nfft_finalize(&p_pre_lin_psi);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">if</span>(test_fg)</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> nfft_finalize(&p_fg_psi);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> nfft_finalize(&p_pre_phi_hut);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> nfft_finalize(&p);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> }</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keyword">static</span> <span class="keywordtype">void</span> accuracy_pre_lin_psi(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> K)</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> {</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordtype">int</span> r, NN[d], nn[d];</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordtype">double</span> e;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordtype">double</span> _Complex *swapndft;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">for</span>(r=0; r<d; r++)</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> {</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> NN[r]=N;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> nn[r]=n;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> }</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> nfft_init_guru(&p, d, NN, M, nn, m,</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> MALLOC_X| MALLOC_F_HAT| MALLOC_F|</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> PRE_PHI_HUT| PRE_LIN_PSI|</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(p.<a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> p.<a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>=K;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> p.<a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>=(<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((p.<a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equisp [...]
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d2 [...]
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> nfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> e=X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="comment">// printf("%d\t%d\t%d\t%d\t%.2e\n",d,N,m,K,e);</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> printf(<span class="stringliteral">"$%.1e$&\t"</span>,e);</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> fflush(stdout);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> nfft_finalize(&p);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> }</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> {</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordtype">int</span> l,m,d,trial,N;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">if</span>(argc<=2)</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> {</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> fprintf(stderr,<span class="stringliteral">"flags type first last trials d m\n"</span>);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> }</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">if</span>((test==0)&&(atoi(argv[1])<2))</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> {</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> fprintf(stderr,<span class="stringliteral">"MEASURE_TIME in nfft3util.h not set\n"</span>);</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> }</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> fprintf(stderr,<span class="stringliteral">"Testing different precomputation schemes for the nfft.\n"</span>);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> fprintf(stderr,<span class="stringliteral">"Columns: d, N=M, t_ndft, e_nfft, t_D, t_pre_phi_hut, "</span>);</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> fprintf(stderr,<span class="stringliteral">"t_fftw, t_B, t_fg_psi, t_pre_lin_psi, t_pre_fg_psi, "</span>);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> fprintf(stderr,<span class="stringliteral">"t_pre_psi, t_pre_full_psi\n\n"</span>);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> d=atoi(argv[5]);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> m=atoi(argv[6]);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="comment">/* time vs. N=M */</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">if</span>(atoi(argv[1])==0)</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">for</span>(l=atoi(argv[2]); l<=atoi(argv[3]); l++)</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">for</span>(trial=0; trial<atoi(argv[4]); trial++)</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> {</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">if</span>(l<=20)</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> time_accuracy(d, (1U<< l), (1U<< (d*l)), (1U<< (l+1)), m, 0, 0);</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> time_accuracy(d, (1U<< l), (1U<< (d*l)), (1U<< (l+1)), m, 0, 0);</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> }</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> d=atoi(argv[5]);</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> N=atoi(argv[6]);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="comment">/* accuracy vs. time */</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">if</span>(atoi(argv[1])==1)</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">for</span>(m=atoi(argv[2]); m<=atoi(argv[3]); m++)</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">for</span>(trial=0; trial<atoi(argv[4]); trial++)</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> time_accuracy(d, N, (<span class="keywordtype">int</span>)pow(N,d), 2*N, m, 1, 1);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> d=atoi(argv[5]);</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> N=atoi(argv[6]);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> m=atoi(argv[7]);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="comment">/* accuracy vs. K for linear interpolation, assumes (m+1)|K */</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">if</span>(atoi(argv[1])==2)</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> {</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> printf(<span class="stringliteral">"$\\log_2(K/(m+1))$&\t"</span>);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">for</span>(l=atoi(argv[2]); l<atoi(argv[3]); l++)</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> printf(<span class="stringliteral">"$%d$&\t"</span>,l);</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> printf(<span class="stringliteral">"$%d$\\\\\n"</span>,atoi(argv[3]));</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> printf(<span class="stringliteral">"$\\tilde E_2$&\t"</span>);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="keywordflow">for</span>(l=atoi(argv[2]); l<=atoi(argv[3]); l++)</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> accuracy_pre_lin_psi(d, N, (<span class="keywordtype">int</span>)pow(N,d), 2*N, m, (m+1)*(1U<< l));</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> }</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/float_8c_source.html b/doc/api/html/float_8c_source.html
new file mode 100644
index 0000000..132eab5
--- /dev/null
+++ b/doc/api/html/float_8c_source.html
@@ -0,0 +1,140 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - float.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">float.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> R X(float_property)(<span class="keyword">const</span> float_property p)</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">const</span> R base = FLT_RADIX;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">const</span> R eps = EPSILON;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">const</span> R t = MANT_DIG;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">const</span> R emin = MIN_EXP;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">const</span> R emax = MAX_EXP;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">const</span> R prec = eps * base;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">static</span> R rmin = K(1.0);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">static</span> R rmax = K(1.0);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">const</span> R rnd = FLTROUND;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">static</span> R sfmin = K(-1.0);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">static</span> <span class="keywordtype">short</span> first = TRUE;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordflow">if</span> (first)</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">/* Compute rmin */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">const</span> INT n = 1 - MIN_EXP;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> INT i;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">for</span> (i = 0; i < n; i++)</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> rmin /= base;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment">/* Compute rmax */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> {</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> INT i;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> rmax -= eps;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">for</span> (i = 0; i < emax; i++)</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> rmax *= base;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment">/* Compute sfmin */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> {</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> R small = K(1.0) / rmax;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> sfmin = rmin;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">if</span> (small >= sfmin)</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> sfmin = small * (eps + K(1.0));</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> }</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> first = FALSE;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">if</span> (p == NFFT_EPSILON)</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">return</span> eps;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_SAFE_MIN)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">return</span> sfmin;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_BASE)</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">return</span> base;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_PRECISION)</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">return</span> prec;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_MANT_DIG)</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_FLTROUND)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">return</span> rnd;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_E_MIN)</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">return</span> emin;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_R_MIN)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">return</span> rmin;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_E_MAX)</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">return</span> emax;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p == NFFT_R_MAX)</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">return</span> rmax;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> CK(0 <span class="comment">/* cannot happen */</span>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">return</span> K(-1.0);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> } <span class="comment">/* dlamch_ */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/form_0.png b/doc/api/html/form_0.png
new file mode 100644
index 0000000..f06b1e7
Binary files /dev/null and b/doc/api/html/form_0.png differ
diff --git a/doc/api/html/form_1.png b/doc/api/html/form_1.png
new file mode 100644
index 0000000..7258515
Binary files /dev/null and b/doc/api/html/form_1.png differ
diff --git a/doc/api/html/form_10.png b/doc/api/html/form_10.png
new file mode 100644
index 0000000..e2a158f
Binary files /dev/null and b/doc/api/html/form_10.png differ
diff --git a/doc/api/html/form_100.png b/doc/api/html/form_100.png
new file mode 100644
index 0000000..3b75231
Binary files /dev/null and b/doc/api/html/form_100.png differ
diff --git a/doc/api/html/form_101.png b/doc/api/html/form_101.png
new file mode 100644
index 0000000..438264f
Binary files /dev/null and b/doc/api/html/form_101.png differ
diff --git a/doc/api/html/form_102.png b/doc/api/html/form_102.png
new file mode 100644
index 0000000..5e0a536
Binary files /dev/null and b/doc/api/html/form_102.png differ
diff --git a/doc/api/html/form_103.png b/doc/api/html/form_103.png
new file mode 100644
index 0000000..996f73a
Binary files /dev/null and b/doc/api/html/form_103.png differ
diff --git a/doc/api/html/form_104.png b/doc/api/html/form_104.png
new file mode 100644
index 0000000..20ee68c
Binary files /dev/null and b/doc/api/html/form_104.png differ
diff --git a/doc/api/html/form_105.png b/doc/api/html/form_105.png
new file mode 100644
index 0000000..519da32
Binary files /dev/null and b/doc/api/html/form_105.png differ
diff --git a/doc/api/html/form_106.png b/doc/api/html/form_106.png
new file mode 100644
index 0000000..a11640d
Binary files /dev/null and b/doc/api/html/form_106.png differ
diff --git a/doc/api/html/form_107.png b/doc/api/html/form_107.png
new file mode 100644
index 0000000..b259813
Binary files /dev/null and b/doc/api/html/form_107.png differ
diff --git a/doc/api/html/form_108.png b/doc/api/html/form_108.png
new file mode 100644
index 0000000..d7b488b
Binary files /dev/null and b/doc/api/html/form_108.png differ
diff --git a/doc/api/html/form_109.png b/doc/api/html/form_109.png
new file mode 100644
index 0000000..f85e586
Binary files /dev/null and b/doc/api/html/form_109.png differ
diff --git a/doc/api/html/form_11.png b/doc/api/html/form_11.png
new file mode 100644
index 0000000..8d74f29
Binary files /dev/null and b/doc/api/html/form_11.png differ
diff --git a/doc/api/html/form_110.png b/doc/api/html/form_110.png
new file mode 100644
index 0000000..d58b824
Binary files /dev/null and b/doc/api/html/form_110.png differ
diff --git a/doc/api/html/form_111.png b/doc/api/html/form_111.png
new file mode 100644
index 0000000..4742c70
Binary files /dev/null and b/doc/api/html/form_111.png differ
diff --git a/doc/api/html/form_112.png b/doc/api/html/form_112.png
new file mode 100644
index 0000000..97fe23b
Binary files /dev/null and b/doc/api/html/form_112.png differ
diff --git a/doc/api/html/form_113.png b/doc/api/html/form_113.png
new file mode 100644
index 0000000..9be9b6c
Binary files /dev/null and b/doc/api/html/form_113.png differ
diff --git a/doc/api/html/form_114.png b/doc/api/html/form_114.png
new file mode 100644
index 0000000..3667f26
Binary files /dev/null and b/doc/api/html/form_114.png differ
diff --git a/doc/api/html/form_115.png b/doc/api/html/form_115.png
new file mode 100644
index 0000000..35809eb
Binary files /dev/null and b/doc/api/html/form_115.png differ
diff --git a/doc/api/html/form_116.png b/doc/api/html/form_116.png
new file mode 100644
index 0000000..1c65677
Binary files /dev/null and b/doc/api/html/form_116.png differ
diff --git a/doc/api/html/form_117.png b/doc/api/html/form_117.png
new file mode 100644
index 0000000..cca2cb8
Binary files /dev/null and b/doc/api/html/form_117.png differ
diff --git a/doc/api/html/form_118.png b/doc/api/html/form_118.png
new file mode 100644
index 0000000..67b4970
Binary files /dev/null and b/doc/api/html/form_118.png differ
diff --git a/doc/api/html/form_119.png b/doc/api/html/form_119.png
new file mode 100644
index 0000000..cc84aa1
Binary files /dev/null and b/doc/api/html/form_119.png differ
diff --git a/doc/api/html/form_12.png b/doc/api/html/form_12.png
new file mode 100644
index 0000000..2f2d622
Binary files /dev/null and b/doc/api/html/form_12.png differ
diff --git a/doc/api/html/form_120.png b/doc/api/html/form_120.png
new file mode 100644
index 0000000..61172b7
Binary files /dev/null and b/doc/api/html/form_120.png differ
diff --git a/doc/api/html/form_121.png b/doc/api/html/form_121.png
new file mode 100644
index 0000000..bfcd3dd
Binary files /dev/null and b/doc/api/html/form_121.png differ
diff --git a/doc/api/html/form_122.png b/doc/api/html/form_122.png
new file mode 100644
index 0000000..ec5f7c9
Binary files /dev/null and b/doc/api/html/form_122.png differ
diff --git a/doc/api/html/form_123.png b/doc/api/html/form_123.png
new file mode 100644
index 0000000..2159692
Binary files /dev/null and b/doc/api/html/form_123.png differ
diff --git a/doc/api/html/form_124.png b/doc/api/html/form_124.png
new file mode 100644
index 0000000..95670aa
Binary files /dev/null and b/doc/api/html/form_124.png differ
diff --git a/doc/api/html/form_125.png b/doc/api/html/form_125.png
new file mode 100644
index 0000000..ca4e040
Binary files /dev/null and b/doc/api/html/form_125.png differ
diff --git a/doc/api/html/form_126.png b/doc/api/html/form_126.png
new file mode 100644
index 0000000..52b5e8b
Binary files /dev/null and b/doc/api/html/form_126.png differ
diff --git a/doc/api/html/form_127.png b/doc/api/html/form_127.png
new file mode 100644
index 0000000..8fd0afc
Binary files /dev/null and b/doc/api/html/form_127.png differ
diff --git a/doc/api/html/form_128.png b/doc/api/html/form_128.png
new file mode 100644
index 0000000..632378b
Binary files /dev/null and b/doc/api/html/form_128.png differ
diff --git a/doc/api/html/form_129.png b/doc/api/html/form_129.png
new file mode 100644
index 0000000..b13b40a
Binary files /dev/null and b/doc/api/html/form_129.png differ
diff --git a/doc/api/html/form_13.png b/doc/api/html/form_13.png
new file mode 100644
index 0000000..b2c64c3
Binary files /dev/null and b/doc/api/html/form_13.png differ
diff --git a/doc/api/html/form_130.png b/doc/api/html/form_130.png
new file mode 100644
index 0000000..4e59b05
Binary files /dev/null and b/doc/api/html/form_130.png differ
diff --git a/doc/api/html/form_131.png b/doc/api/html/form_131.png
new file mode 100644
index 0000000..eb402b0
Binary files /dev/null and b/doc/api/html/form_131.png differ
diff --git a/doc/api/html/form_132.png b/doc/api/html/form_132.png
new file mode 100644
index 0000000..437ca9d
Binary files /dev/null and b/doc/api/html/form_132.png differ
diff --git a/doc/api/html/form_133.png b/doc/api/html/form_133.png
new file mode 100644
index 0000000..4cbf872
Binary files /dev/null and b/doc/api/html/form_133.png differ
diff --git a/doc/api/html/form_134.png b/doc/api/html/form_134.png
new file mode 100644
index 0000000..8b80a7f
Binary files /dev/null and b/doc/api/html/form_134.png differ
diff --git a/doc/api/html/form_135.png b/doc/api/html/form_135.png
new file mode 100644
index 0000000..774e523
Binary files /dev/null and b/doc/api/html/form_135.png differ
diff --git a/doc/api/html/form_136.png b/doc/api/html/form_136.png
new file mode 100644
index 0000000..b56c675
Binary files /dev/null and b/doc/api/html/form_136.png differ
diff --git a/doc/api/html/form_137.png b/doc/api/html/form_137.png
new file mode 100644
index 0000000..8fa4de3
Binary files /dev/null and b/doc/api/html/form_137.png differ
diff --git a/doc/api/html/form_138.png b/doc/api/html/form_138.png
new file mode 100644
index 0000000..fa9b2fc
Binary files /dev/null and b/doc/api/html/form_138.png differ
diff --git a/doc/api/html/form_139.png b/doc/api/html/form_139.png
new file mode 100644
index 0000000..e343fef
Binary files /dev/null and b/doc/api/html/form_139.png differ
diff --git a/doc/api/html/form_14.png b/doc/api/html/form_14.png
new file mode 100644
index 0000000..289ae1b
Binary files /dev/null and b/doc/api/html/form_14.png differ
diff --git a/doc/api/html/form_15.png b/doc/api/html/form_15.png
new file mode 100644
index 0000000..8943508
Binary files /dev/null and b/doc/api/html/form_15.png differ
diff --git a/doc/api/html/form_16.png b/doc/api/html/form_16.png
new file mode 100644
index 0000000..13842bb
Binary files /dev/null and b/doc/api/html/form_16.png differ
diff --git a/doc/api/html/form_17.png b/doc/api/html/form_17.png
new file mode 100644
index 0000000..25ddedf
Binary files /dev/null and b/doc/api/html/form_17.png differ
diff --git a/doc/api/html/form_18.png b/doc/api/html/form_18.png
new file mode 100644
index 0000000..87da112
Binary files /dev/null and b/doc/api/html/form_18.png differ
diff --git a/doc/api/html/form_19.png b/doc/api/html/form_19.png
new file mode 100644
index 0000000..c564494
Binary files /dev/null and b/doc/api/html/form_19.png differ
diff --git a/doc/api/html/form_2.png b/doc/api/html/form_2.png
new file mode 100644
index 0000000..a6bbbc7
Binary files /dev/null and b/doc/api/html/form_2.png differ
diff --git a/doc/api/html/form_20.png b/doc/api/html/form_20.png
new file mode 100644
index 0000000..5107265
Binary files /dev/null and b/doc/api/html/form_20.png differ
diff --git a/doc/api/html/form_21.png b/doc/api/html/form_21.png
new file mode 100644
index 0000000..fe59754
Binary files /dev/null and b/doc/api/html/form_21.png differ
diff --git a/doc/api/html/form_22.png b/doc/api/html/form_22.png
new file mode 100644
index 0000000..bceb5f9
Binary files /dev/null and b/doc/api/html/form_22.png differ
diff --git a/doc/api/html/form_23.png b/doc/api/html/form_23.png
new file mode 100644
index 0000000..d3b0a60
Binary files /dev/null and b/doc/api/html/form_23.png differ
diff --git a/doc/api/html/form_24.png b/doc/api/html/form_24.png
new file mode 100644
index 0000000..c999cbe
Binary files /dev/null and b/doc/api/html/form_24.png differ
diff --git a/doc/api/html/form_25.png b/doc/api/html/form_25.png
new file mode 100644
index 0000000..1e27259
Binary files /dev/null and b/doc/api/html/form_25.png differ
diff --git a/doc/api/html/form_26.png b/doc/api/html/form_26.png
new file mode 100644
index 0000000..ce4366d
Binary files /dev/null and b/doc/api/html/form_26.png differ
diff --git a/doc/api/html/form_27.png b/doc/api/html/form_27.png
new file mode 100644
index 0000000..f4928c6
Binary files /dev/null and b/doc/api/html/form_27.png differ
diff --git a/doc/api/html/form_28.png b/doc/api/html/form_28.png
new file mode 100644
index 0000000..e0a1be3
Binary files /dev/null and b/doc/api/html/form_28.png differ
diff --git a/doc/api/html/form_29.png b/doc/api/html/form_29.png
new file mode 100644
index 0000000..ff81525
Binary files /dev/null and b/doc/api/html/form_29.png differ
diff --git a/doc/api/html/form_3.png b/doc/api/html/form_3.png
new file mode 100644
index 0000000..b0e94c7
Binary files /dev/null and b/doc/api/html/form_3.png differ
diff --git a/doc/api/html/form_30.png b/doc/api/html/form_30.png
new file mode 100644
index 0000000..2fbfaf8
Binary files /dev/null and b/doc/api/html/form_30.png differ
diff --git a/doc/api/html/form_31.png b/doc/api/html/form_31.png
new file mode 100644
index 0000000..95283dc
Binary files /dev/null and b/doc/api/html/form_31.png differ
diff --git a/doc/api/html/form_32.png b/doc/api/html/form_32.png
new file mode 100644
index 0000000..a1b8abc
Binary files /dev/null and b/doc/api/html/form_32.png differ
diff --git a/doc/api/html/form_33.png b/doc/api/html/form_33.png
new file mode 100644
index 0000000..570f79b
Binary files /dev/null and b/doc/api/html/form_33.png differ
diff --git a/doc/api/html/form_34.png b/doc/api/html/form_34.png
new file mode 100644
index 0000000..292158a
Binary files /dev/null and b/doc/api/html/form_34.png differ
diff --git a/doc/api/html/form_35.png b/doc/api/html/form_35.png
new file mode 100644
index 0000000..60bd34c
Binary files /dev/null and b/doc/api/html/form_35.png differ
diff --git a/doc/api/html/form_36.png b/doc/api/html/form_36.png
new file mode 100644
index 0000000..388f9ff
Binary files /dev/null and b/doc/api/html/form_36.png differ
diff --git a/doc/api/html/form_37.png b/doc/api/html/form_37.png
new file mode 100644
index 0000000..f2266aa
Binary files /dev/null and b/doc/api/html/form_37.png differ
diff --git a/doc/api/html/form_38.png b/doc/api/html/form_38.png
new file mode 100644
index 0000000..3408b36
Binary files /dev/null and b/doc/api/html/form_38.png differ
diff --git a/doc/api/html/form_39.png b/doc/api/html/form_39.png
new file mode 100644
index 0000000..12d5096
Binary files /dev/null and b/doc/api/html/form_39.png differ
diff --git a/doc/api/html/form_4.png b/doc/api/html/form_4.png
new file mode 100644
index 0000000..4d6582a
Binary files /dev/null and b/doc/api/html/form_4.png differ
diff --git a/doc/api/html/form_40.png b/doc/api/html/form_40.png
new file mode 100644
index 0000000..ae095b2
Binary files /dev/null and b/doc/api/html/form_40.png differ
diff --git a/doc/api/html/form_41.png b/doc/api/html/form_41.png
new file mode 100644
index 0000000..e967111
Binary files /dev/null and b/doc/api/html/form_41.png differ
diff --git a/doc/api/html/form_42.png b/doc/api/html/form_42.png
new file mode 100644
index 0000000..0641e64
Binary files /dev/null and b/doc/api/html/form_42.png differ
diff --git a/doc/api/html/form_43.png b/doc/api/html/form_43.png
new file mode 100644
index 0000000..75cf1af
Binary files /dev/null and b/doc/api/html/form_43.png differ
diff --git a/doc/api/html/form_44.png b/doc/api/html/form_44.png
new file mode 100644
index 0000000..513f9c9
Binary files /dev/null and b/doc/api/html/form_44.png differ
diff --git a/doc/api/html/form_45.png b/doc/api/html/form_45.png
new file mode 100644
index 0000000..db2aece
Binary files /dev/null and b/doc/api/html/form_45.png differ
diff --git a/doc/api/html/form_46.png b/doc/api/html/form_46.png
new file mode 100644
index 0000000..650f65e
Binary files /dev/null and b/doc/api/html/form_46.png differ
diff --git a/doc/api/html/form_47.png b/doc/api/html/form_47.png
new file mode 100644
index 0000000..c832bb5
Binary files /dev/null and b/doc/api/html/form_47.png differ
diff --git a/doc/api/html/form_48.png b/doc/api/html/form_48.png
new file mode 100644
index 0000000..9f63a36
Binary files /dev/null and b/doc/api/html/form_48.png differ
diff --git a/doc/api/html/form_49.png b/doc/api/html/form_49.png
new file mode 100644
index 0000000..96c5f0b
Binary files /dev/null and b/doc/api/html/form_49.png differ
diff --git a/doc/api/html/form_5.png b/doc/api/html/form_5.png
new file mode 100644
index 0000000..f558ccf
Binary files /dev/null and b/doc/api/html/form_5.png differ
diff --git a/doc/api/html/form_50.png b/doc/api/html/form_50.png
new file mode 100644
index 0000000..5c4a9ba
Binary files /dev/null and b/doc/api/html/form_50.png differ
diff --git a/doc/api/html/form_51.png b/doc/api/html/form_51.png
new file mode 100644
index 0000000..d156539
Binary files /dev/null and b/doc/api/html/form_51.png differ
diff --git a/doc/api/html/form_52.png b/doc/api/html/form_52.png
new file mode 100644
index 0000000..f8a9456
Binary files /dev/null and b/doc/api/html/form_52.png differ
diff --git a/doc/api/html/form_53.png b/doc/api/html/form_53.png
new file mode 100644
index 0000000..83b29ec
Binary files /dev/null and b/doc/api/html/form_53.png differ
diff --git a/doc/api/html/form_54.png b/doc/api/html/form_54.png
new file mode 100644
index 0000000..70259d8
Binary files /dev/null and b/doc/api/html/form_54.png differ
diff --git a/doc/api/html/form_55.png b/doc/api/html/form_55.png
new file mode 100644
index 0000000..2be1e8d
Binary files /dev/null and b/doc/api/html/form_55.png differ
diff --git a/doc/api/html/form_56.png b/doc/api/html/form_56.png
new file mode 100644
index 0000000..8ae7d2c
Binary files /dev/null and b/doc/api/html/form_56.png differ
diff --git a/doc/api/html/form_57.png b/doc/api/html/form_57.png
new file mode 100644
index 0000000..eb53520
Binary files /dev/null and b/doc/api/html/form_57.png differ
diff --git a/doc/api/html/form_58.png b/doc/api/html/form_58.png
new file mode 100644
index 0000000..3d4805a
Binary files /dev/null and b/doc/api/html/form_58.png differ
diff --git a/doc/api/html/form_59.png b/doc/api/html/form_59.png
new file mode 100644
index 0000000..e73edbb
Binary files /dev/null and b/doc/api/html/form_59.png differ
diff --git a/doc/api/html/form_6.png b/doc/api/html/form_6.png
new file mode 100644
index 0000000..dcfadbc
Binary files /dev/null and b/doc/api/html/form_6.png differ
diff --git a/doc/api/html/form_60.png b/doc/api/html/form_60.png
new file mode 100644
index 0000000..f1c8800
Binary files /dev/null and b/doc/api/html/form_60.png differ
diff --git a/doc/api/html/form_61.png b/doc/api/html/form_61.png
new file mode 100644
index 0000000..a433cfa
Binary files /dev/null and b/doc/api/html/form_61.png differ
diff --git a/doc/api/html/form_62.png b/doc/api/html/form_62.png
new file mode 100644
index 0000000..1f26d0e
Binary files /dev/null and b/doc/api/html/form_62.png differ
diff --git a/doc/api/html/form_63.png b/doc/api/html/form_63.png
new file mode 100644
index 0000000..3d4805a
Binary files /dev/null and b/doc/api/html/form_63.png differ
diff --git a/doc/api/html/form_64.png b/doc/api/html/form_64.png
new file mode 100644
index 0000000..f756cd5
Binary files /dev/null and b/doc/api/html/form_64.png differ
diff --git a/doc/api/html/form_65.png b/doc/api/html/form_65.png
new file mode 100644
index 0000000..03438b4
Binary files /dev/null and b/doc/api/html/form_65.png differ
diff --git a/doc/api/html/form_66.png b/doc/api/html/form_66.png
new file mode 100644
index 0000000..a433cfa
Binary files /dev/null and b/doc/api/html/form_66.png differ
diff --git a/doc/api/html/form_67.png b/doc/api/html/form_67.png
new file mode 100644
index 0000000..1f26d0e
Binary files /dev/null and b/doc/api/html/form_67.png differ
diff --git a/doc/api/html/form_68.png b/doc/api/html/form_68.png
new file mode 100644
index 0000000..9afa409
Binary files /dev/null and b/doc/api/html/form_68.png differ
diff --git a/doc/api/html/form_69.png b/doc/api/html/form_69.png
new file mode 100644
index 0000000..3d4805a
Binary files /dev/null and b/doc/api/html/form_69.png differ
diff --git a/doc/api/html/form_7.png b/doc/api/html/form_7.png
new file mode 100644
index 0000000..ff0b031
Binary files /dev/null and b/doc/api/html/form_7.png differ
diff --git a/doc/api/html/form_70.png b/doc/api/html/form_70.png
new file mode 100644
index 0000000..d021395
Binary files /dev/null and b/doc/api/html/form_70.png differ
diff --git a/doc/api/html/form_71.png b/doc/api/html/form_71.png
new file mode 100644
index 0000000..a433cfa
Binary files /dev/null and b/doc/api/html/form_71.png differ
diff --git a/doc/api/html/form_72.png b/doc/api/html/form_72.png
new file mode 100644
index 0000000..1f26d0e
Binary files /dev/null and b/doc/api/html/form_72.png differ
diff --git a/doc/api/html/form_73.png b/doc/api/html/form_73.png
new file mode 100644
index 0000000..435935a
Binary files /dev/null and b/doc/api/html/form_73.png differ
diff --git a/doc/api/html/form_74.png b/doc/api/html/form_74.png
new file mode 100644
index 0000000..a3bd77f
Binary files /dev/null and b/doc/api/html/form_74.png differ
diff --git a/doc/api/html/form_75.png b/doc/api/html/form_75.png
new file mode 100644
index 0000000..025d0ab
Binary files /dev/null and b/doc/api/html/form_75.png differ
diff --git a/doc/api/html/form_76.png b/doc/api/html/form_76.png
new file mode 100644
index 0000000..a28a592
Binary files /dev/null and b/doc/api/html/form_76.png differ
diff --git a/doc/api/html/form_77.png b/doc/api/html/form_77.png
new file mode 100644
index 0000000..d3d8884
Binary files /dev/null and b/doc/api/html/form_77.png differ
diff --git a/doc/api/html/form_78.png b/doc/api/html/form_78.png
new file mode 100644
index 0000000..53a4820
Binary files /dev/null and b/doc/api/html/form_78.png differ
diff --git a/doc/api/html/form_79.png b/doc/api/html/form_79.png
new file mode 100644
index 0000000..29e0831
Binary files /dev/null and b/doc/api/html/form_79.png differ
diff --git a/doc/api/html/form_8.png b/doc/api/html/form_8.png
new file mode 100644
index 0000000..b426d20
Binary files /dev/null and b/doc/api/html/form_8.png differ
diff --git a/doc/api/html/form_80.png b/doc/api/html/form_80.png
new file mode 100644
index 0000000..485518b
Binary files /dev/null and b/doc/api/html/form_80.png differ
diff --git a/doc/api/html/form_81.png b/doc/api/html/form_81.png
new file mode 100644
index 0000000..76a84c7
Binary files /dev/null and b/doc/api/html/form_81.png differ
diff --git a/doc/api/html/form_82.png b/doc/api/html/form_82.png
new file mode 100644
index 0000000..eeeeda9
Binary files /dev/null and b/doc/api/html/form_82.png differ
diff --git a/doc/api/html/form_83.png b/doc/api/html/form_83.png
new file mode 100644
index 0000000..393ceb2
Binary files /dev/null and b/doc/api/html/form_83.png differ
diff --git a/doc/api/html/form_84.png b/doc/api/html/form_84.png
new file mode 100644
index 0000000..6209553
Binary files /dev/null and b/doc/api/html/form_84.png differ
diff --git a/doc/api/html/form_85.png b/doc/api/html/form_85.png
new file mode 100644
index 0000000..aecc315
Binary files /dev/null and b/doc/api/html/form_85.png differ
diff --git a/doc/api/html/form_86.png b/doc/api/html/form_86.png
new file mode 100644
index 0000000..24a2c21
Binary files /dev/null and b/doc/api/html/form_86.png differ
diff --git a/doc/api/html/form_87.png b/doc/api/html/form_87.png
new file mode 100644
index 0000000..9716cb9
Binary files /dev/null and b/doc/api/html/form_87.png differ
diff --git a/doc/api/html/form_88.png b/doc/api/html/form_88.png
new file mode 100644
index 0000000..7dd4b01
Binary files /dev/null and b/doc/api/html/form_88.png differ
diff --git a/doc/api/html/form_89.png b/doc/api/html/form_89.png
new file mode 100644
index 0000000..06f32bc
Binary files /dev/null and b/doc/api/html/form_89.png differ
diff --git a/doc/api/html/form_9.png b/doc/api/html/form_9.png
new file mode 100644
index 0000000..0063477
Binary files /dev/null and b/doc/api/html/form_9.png differ
diff --git a/doc/api/html/form_90.png b/doc/api/html/form_90.png
new file mode 100644
index 0000000..9d9379f
Binary files /dev/null and b/doc/api/html/form_90.png differ
diff --git a/doc/api/html/form_91.png b/doc/api/html/form_91.png
new file mode 100644
index 0000000..21ea066
Binary files /dev/null and b/doc/api/html/form_91.png differ
diff --git a/doc/api/html/form_92.png b/doc/api/html/form_92.png
new file mode 100644
index 0000000..00cb9f0
Binary files /dev/null and b/doc/api/html/form_92.png differ
diff --git a/doc/api/html/form_93.png b/doc/api/html/form_93.png
new file mode 100644
index 0000000..26d8933
Binary files /dev/null and b/doc/api/html/form_93.png differ
diff --git a/doc/api/html/form_94.png b/doc/api/html/form_94.png
new file mode 100644
index 0000000..d07654a
Binary files /dev/null and b/doc/api/html/form_94.png differ
diff --git a/doc/api/html/form_95.png b/doc/api/html/form_95.png
new file mode 100644
index 0000000..0d1c013
Binary files /dev/null and b/doc/api/html/form_95.png differ
diff --git a/doc/api/html/form_96.png b/doc/api/html/form_96.png
new file mode 100644
index 0000000..bb0ccb9
Binary files /dev/null and b/doc/api/html/form_96.png differ
diff --git a/doc/api/html/form_97.png b/doc/api/html/form_97.png
new file mode 100644
index 0000000..5ead9ef
Binary files /dev/null and b/doc/api/html/form_97.png differ
diff --git a/doc/api/html/form_98.png b/doc/api/html/form_98.png
new file mode 100644
index 0000000..d99570e
Binary files /dev/null and b/doc/api/html/form_98.png differ
diff --git a/doc/api/html/form_99.png b/doc/api/html/form_99.png
new file mode 100644
index 0000000..08d72f1
Binary files /dev/null and b/doc/api/html/form_99.png differ
diff --git a/doc/api/html/formula.repository b/doc/api/html/formula.repository
new file mode 100644
index 0000000..5c3eb05
--- /dev/null
+++ b/doc/api/html/formula.repository
@@ -0,0 +1,140 @@
+\form#0:$2\le\sigma<4$
+\form#1:$dM$
+\form#2:$D$
+\form#3:$N_0+\hdots+N_{d-1}$
+\form#4:$B$
+\form#5:$N$
+\form#6:$\mathbf{x}(m) = \left(x_1,x_2\right) \in [-\frac{1}{2},\frac{1}{2}) \times [0,\frac{1}{2}]$
+\form#7:$m=0,\ldots, M-1$
+\form#8:$M \in \mathbb{N},$
+\form#9:$M_{k,0}\left(x\right)$
+\form#10:$\prod_{t=0}^{d-1} v_t$
+\form#11:$\prod_{t=0}^{d-1} v_t-a$
+\form#12:$\sum_{t=0}^{d-1} i_t \prod_{t'=t+1}^{d-1} N_{t'}$
+\form#13:$x^H x$
+\form#14:$x^H (w \odot x)$
+\form#15:$x^H (w1\odot w2\odot w2 \odot x)$
+\form#16:$x^H (w2\odot w2 \odot x)$
+\form#17:$x \leftarrow y$
+\form#18:$x \leftarrow a y$
+\form#19:$x \leftarrow w\odot y$
+\form#20:$x \leftarrow a x + y$
+\form#21:$x \leftarrow x + a y$
+\form#22:$x \leftarrow a x + b y$
+\form#23:$x \leftarrow x + a w\odot y$
+\form#24:$x \leftarrow a x + w\odot y$
+\form#25:$[0,1]\times[0,1]{\rm i}$
+\form#26:$[-1/2,1/2]$
+\form#27:$x_j$
+\form#28:$\frac{2}{N}\left(1-\frac{\left|2k+1\right|}{N}\right)$
+\form#29:$P_k : \mathbb{R} \rightarrow \mathbb{R}$
+\form#30:\[ f(x) = \sum_{k=0}^N a_k P_k(x) \quad (N \in \mathbb{N}_0) \]
+\form#31:\[ P_{k+1}(x) = (alpha_k * x + beta_k)*P_{k}(x) + gamma_k P_{k-1}(x) \quad (alpha_k, beta_k, gamma_k \in \mathbb{R},\; k \ge 0) \]
+\form#32:$P_{-1}(x) := 0$
+\form#33:$P_0(x) := \lambda$
+\form#34:$\left(a_k\right)_{k=0}^N \in \mathbb{C}^{N+1}$
+\form#35:$\left(x_j\right)_{j=0}^M \in \mathbb{R}^{M+1}$
+\form#36:$M \in \mathbb{N}_0$
+\form#37:$B, B^{\rm T}$
+\form#38:$D, D^T$
+\form#39:$\alpha_{k-1}^n$
+\form#40:$k,n = 0,1,\ldots,N$
+\form#41:$(N+1)^2$
+\form#42:$\beta_{k-1}^n$
+\form#43:$\gamma_{k-1}^n$
+\form#44:$P_k^n(x,c)$
+\form#45:$k$
+\form#46:$\alpha_c^n,\ldots,\alpha_{c+k}^n$
+\form#47:$\beta_c^n,\ldots,\beta_{c+k}^n$
+\form#48:$\gamma_c^n,\ldots,\gamma_{c+k}^n$
+\form#49:$N \in \mathbb{N}_0$
+\form#50:$\left(b_k^n\right)_{k=0}^M$
+\form#51:$-M \le n \le M$
+\form#52:\[ f(\cos\vartheta) = \sum_{k=0}^{2\lfloor\frac{M}{2}\rfloor} a_k (\sin\vartheta)^{n\;\mathrm{mod}\;2} T_k(\cos\vartheta) \]
+\form#53:$\left(c_k^n\right)_{k=0}^M$
+\form#54:\[ f(\cos\vartheta) = \sum_{k=-M}^{M} c_k \mathrm{e}^{\mathrm{i}k\vartheta} \]
+\form#55:$n=-M,\ldots,M$
+\form#56:$\left(b_k^n\right)_{k=0,\ldots,M;n=-M,\ldots,M}$
+\form#57:$\left(c_k^n\right)_{k=-M,\ldots,M;n=-M,\ldots,M}$
+\form#58:$\alpha_l^{km}$
+\form#59:$m$
+\form#60:$l$
+\form#61:$\beta_l^{km}$
+\form#62:$\gamma_l^{km}$
+\form#63:$ \alpha_{l}^{km}$
+\form#64:$ l= 0,\ldots,N $
+\form#65:$(2N+1)^2(N+1)$
+\form#66:$ \beta_{l}^{km}$
+\form#67:$ \gamma_{l}^{km}$
+\form#68:$ m = -N,\ldots,N $
+\form#69:$\alpha_{l}^{km}$
+\form#70:$ k,m = -N,\ldots,N $
+\form#71:$\beta_{l}^{km}$
+\form#72:$\gamma_{l}^{km}$
+\form#73:$d_l^{km}(x,c)$
+\form#74:$\alpha_c^{km},\ldots,\alpha_{c+l}^{km}$
+\form#75:$\beta_c^{km},\ldots,\beta_{c+l}^{km}$
+\form#76:$\gamma_c^{km},\ldots,\gamma_{c+l}^{km}$
+\form#77:$ d^{km}_l(cos(theta)) $
+\form#78:$\frac{\|x-y\|_{\infty}}{\|x\|_{\infty}} $
+\form#79:$\frac{\|x-y\|_{\infty}}{\|z\|_1} $
+\form#80:$\frac{\|x-y\|_2}{\|x\|_2} $
+\form#81:$x^H (w\odot w2\odot w2 \odot x)$
+\form#82:$I_{n+\alpha}(x)$
+\form#83:$\mathrm{e}^{-x}$
+\form#84:$x,alpha$
+\form#85:$0 \le \alpha < 1$
+\form#86:$n=0,1,\ldots,nb-1$
+\form#87:$|x| \ge exparg$
+\form#88:$\min(nb,0)-1$
+\form#89:$n=0,1,\ldots,ncalc$
+\form#90:$J_{\nu}(x)$
+\form#91:$I_{\nu}(x)$
+\form#92:$x$
+\form#93:$\nu$
+\form#94:\[ f(g_q)=\sum^{N}_{l=0}\sum_{m,n=-l}^l \hat f^{mn}_l D_{mn}^l(\alpha_q,\beta_q,\gamma_q) \]
+\form#95:$[-1/4,1/4]$
+\form#96:$\mathbb{R}^3$
+\form#97:$\mathbb{S}^2$
+\form#98:$\varphi_1 \in [-\pi,\pi)$
+\form#99:$\vartheta_1 \in [0,\pi]$
+\form#100:$\varphi_2 \in [-\pi,\pi)$
+\form#101:$\vartheta_2 \in [0,\pi]$
+\form#102:$\cos \vartheta_1 \cos \vartheta_2 + \sin \vartheta_1 \sin(\vartheta_2 \cos(\varphi_1 - \varphi_2)$
+\form#103:$Q_h: [-1,1] \rightarrow \mathbb{R}$
+\form#104:$x \in [-1,1]$
+\form#105:$h \in (0,1)$
+\form#106:$Q_h(x)$
+\form#107:$S_h: [-1,1] \rightarrow \mathbb{R}$
+\form#108:$S_h(x)$
+\form#109:$L_{h,\lambda}: [-1,1] \rightarrow \mathbb{R}$
+\form#110:$\lambda \in \mathbb{N}_0$
+\form#111:$L_{h,\lambda}(x)$
+\form#112:$G_\sigma: [-1,1] \rightarrow \mathbb{R}$
+\form#113:$\sigma \in \mathbb{R}_+$
+\form#114:$G_\sigma(x)$
+\form#115:$x_{t,j}$
+\form#116:$w_{t,j}$
+\form#117:$T$
+\form#118:$R$
+\form#119:\[ x_{t,j} := r_j\left(\cos\theta_t, \sin\theta_t\right)^{\top}\,,\qquad (j,t)^{\top}\in I_{\sqrt{2}R}\times I_T\,. \]
+\form#120:$r_j$
+\form#121:$\theta_t$
+\form#122:$M \approx \frac{4}{\pi}\log(1+\sqrt{2}) T R$
+\form#123:$(j,t)^{\top}\in I_R\times I_T$
+\form#124:$r_j := \frac{j}{R} \in [-\frac{1}{2},\frac{1}{2})$
+\form#125:$\theta_t := \frac{\pi t}{T} \in [-\frac{\pi}{2},\frac{\pi}{2})$
+\form#126:\[ x_{t,j} := r_j\left(\cos\theta_t, \sin\theta_t\right)^{\top}\,. \]
+\form#127:$M=TR$
+\form#128:$j \ne 0$
+\form#129:\[ w_{t,j} = \frac{\pi}{2TR^2}\left(\left(|j|+\frac{1}{2}\right)^2- \left(|j|-\frac{1}{2}\right)^2\right) = \frac{\pi |j| }{TR^2}\, . \]
+\form#130:$\frac{1}{2R}$
+\form#131:$\frac{\pi}{4R^2}$
+\form#132:$w_{t,0} := \frac{\pi}{4TR^2}$
+\form#133:$\frac{\pi}{4}(1+\frac{1}{R^2})$
+\form#134:\[ R_{\theta_t} f\left(\frac{s}{R}\right) = \sum_{r \in I_R} w_r \; \sum_{k \in I_N^2} f_{k} \mathrm{e}^{-2\pi\mathrm{I} k \; (\frac{r}{R}\theta_t)} \, \mathrm{e}^{2\pi\mathrm{i} r s / R} \qquad(t \in I_T, s \in I_R). \]
+\form#135:$\frac{r}{R}\theta_t$
+\form#136:$w_r$
+\form#137:$f_k$
+\form#138:$k \in I_N^2$
+\form#139:$t \in T$
diff --git a/doc/api/html/fpt_2simple__test_8c_source.html b/doc/api/html/fpt_2simple__test_8c_source.html
new file mode 100644
index 0000000..976a6e8
--- /dev/null
+++ b/doc/api/html/fpt_2simple__test_8c_source.html
@@ -0,0 +1,213 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - simple_test.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_7bc5b4c2d8fedbf49abc178849c07704.html">fpt</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fpt/simple_test.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/* standard headers */</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">/* It is important to include complex.h before nfft3.h. */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <fftw3.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment">/* NFFT3 header */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">/* Two times Pi */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#define KPI2 6.2831853071795864769252867665590057683943387987502</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> {</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment">/* This example shows the use of the fast polynomial transform to evaluate a</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment"> * finite expansion in Legendre polynomials,</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment"> * f(x) = a_0 P_0(x) + a_1 P_1(x) + ... + a_N P_N(x) (1)</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment"> * at the Chebyshev nodes x_j = cos(j*pi/N), j=0,1,...,N. */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = 8;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment">/* An fpt_set is a data structure that contains precomputed data for a number</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment"> * of different polynomial transforms. Here, we need only one transform. the</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment"> * second parameter (t) is the exponent of the maximum transform size desired</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment"> * (2^t), i.e., t = 3 means that N in (1) can be at most N = 8. */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span> = fpt_init(1,lrint(ceil(log2((<span class="keywordtype">double</span>)N))),0U);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">/* Three-term recurrence coefficients for Legendre polynomials */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a> = malloc((N+2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)),</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a> = malloc((N+2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)),</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a> = malloc((N+2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment">/* alpha[0] and beta[0] are not referenced. */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> alpha[0] = <a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>[0] = 0.0;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">/* gamma[0] contains the value of P_0(x) (which is a constant). */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>[0] = 1.0;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment">/* Actual three-term recurrence coefficients for Legendre polynomials */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">for</span> (k = 0; k <= N; k++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> {</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> alpha[k+1] = ((double)(2*k+1))/((<span class="keywordtype">double</span>)(k+1));</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>[k+1] = 0.0;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>[k+1] = -((double)(k))/((<span class="keywordtype">double</span>)(k+1));</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> }</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> }</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> printf(</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="stringliteral">"Computing a fast polynomial transform (FPT) and a fast discrete cosine \n"</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="stringliteral">"transform (DCT) to evaluate\n\n"</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="stringliteral">" f_j = a_0 P_0(x_j) + a_1 P_1(x_j) + ... + a_N P_N(x_j), j=0,1,...,N,\n\n"</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="stringliteral">"with N=%d, x_j = cos(j*pi/N), j=0,1,...N, the Chebyshev nodes, a_k,\n"</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="stringliteral">"k=0,1,...,N, random Fourier coefficients in [-1,1]x[-1,1]*I, and P_k,\n"</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="stringliteral">"k=0,1,...,N, the Legendre polynomials."</span>,N</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> );</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment">/* Random seed, makes things reproducible. */</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> nfft_srand48(314);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment">/* The function fpt_repcompute actually does the precomputation for a single</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment"> * transform. It needs arrays alpha, beta, and gamma, containing the three-</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment"> * term recurrence coefficients, here of the Legendre polynomials. The format</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment"> * is explained above. The sixth parameter (k_start) is where the index in the</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment"> * linear combination (1) starts, here k_start=0. The seventh parameter</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="comment"> * (kappa) is the threshold which has an influence on the accuracy of the fast</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment"> * polynomial transform. Usually, kappa = 1000 is a good choice. */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> fpt_precompute(<span class="keyword">set</span>,0,alpha,<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>,<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coeffic [...]
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> {</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment">/* Arrays for Fourier coefficients and function values. */</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">double</span> _Complex *a = malloc((N+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">double</span> _Complex *b = malloc((N+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">double</span> *f = malloc((N+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment">/* Plan for discrete cosine transform */</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">const</span> <span class="keywordtype">int</span> NP1 = N + 1;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> fftw_r2r_kind kind = FFTW_REDFT00;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> fftw_plan p = fftw_plan_many_r2r(1, &NP1, 1, (<span class="keywordtype">double</span>*)b, NULL, 2, 1,</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> (<span class="keywordtype">double</span>*)f, NULL, 1, 1, &kind, 0U);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment">/* random Fourier coefficients */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> printf(<span class="stringliteral">"\n2) Random Fourier coefficients a_k, k=0,1,...,N:\n"</span>);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">for</span> (k = 0; k <= N; k++)</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> {</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> a[k] = 2.0*nfft_drand48() - 1.0; <span class="comment">/* for debugging: use k+1 */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> printf(<span class="stringliteral">" a_%-2d = %+5.3lE\n"</span>,k,creal(a[k]));</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment">/* fast polynomial transform */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> fpt_trafo(<span class="keyword">set</span>,0,a,b,N,0U);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment">/* Renormalize coefficients b_j, j=1,2,...,N-1 owing to how FFTW defines a</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment"> * DCT-I; see</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment"> * http://www.fftw.org/fftw3_doc/1d-Real_002deven-DFTs-_0028DCTs_0029.html</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment"> * for details */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> {</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">for</span> (j = 1; j < N; j++)</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> b[j] *= 0.5;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment">/* discrete cosine transform */</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> fftw_execute(p);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> {</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> printf(<span class="stringliteral">"\n3) Function values f_j, j=1,1,...,M:\n"</span>);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">for</span> (j = 0; j <= N; j++)</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> printf(<span class="stringliteral">" f_%-2d = %+5.3lE\n"</span>,j,f[j]);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment">/* cleanup */</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> free(a);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> free(b);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> free(f);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment">/* cleanup */</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> fftw_destroy_plan(p);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment">/* cleanup */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> fpt_finalize(<span class="keyword">set</span>);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> free(alpha);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> free(<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> free(<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/fpt_8c.html b/doc/api/html/fpt_8c.html
new file mode 100644
index 0000000..4e0e168
--- /dev/null
+++ b/doc/api/html/fpt_8c.html
@@ -0,0 +1,463 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fpt.c File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_d47b87128a15c0ce57cf8f363265bec1.html">fpt</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">fpt.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Implementation file for the FPT module.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include <stdbool.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="fpt_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__step__.html">fpt_step_</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Holds data for a single multiplication step in the cascade summation. <a href="structfpt__step__.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html">fpt_data_</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Holds data for a single cascade summation. <a href="structfpt__data__.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html">fpt_set_s_</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Holds data for a set of cascade summations. <a href="structfpt__set__s__.html#details">More...</a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a58f899926cc6e95ea54dd68d131979b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a58f899926cc6e95ea54dd68d131979b8"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html#a58f899926cc6e95ea54dd68d131979b8">K_START_TILDE</a>(x, y) (<a class="el" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3">NFFT_MAX</a>(<a class="el" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308">NFFT_MIN</a>(x,y-2),0))</td></tr>
+<tr class="memdesc:a58f899926cc6e95ea54dd68d131979b8"><td class="mdescLeft"> </td><td class="mdescRight">Minimum degree at top of a cascade. <br/></td></tr>
+<tr class="memitem:a769119c8ae45f2a30a62ba802d83139f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a769119c8ae45f2a30a62ba802d83139f"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html#a769119c8ae45f2a30a62ba802d83139f">K_END_TILDE</a>(x, y) <a class="el" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308">NFFT_MIN</a>(x,y-1)</td></tr>
+<tr class="memdesc:a769119c8ae45f2a30a62ba802d83139f"><td class="mdescLeft"> </td><td class="mdescRight">Maximum degree at top of a cascade. <br/></td></tr>
+<tr class="memitem:ac81f7eac1a01b06e91817857f47b9804"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac81f7eac1a01b06e91817857f47b9804"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html#ac81f7eac1a01b06e91817857f47b9804">FIRST_L</a>(x, y) (LRINT(floor((x)/(double)y)))</td></tr>
+<tr class="memdesc:ac81f7eac1a01b06e91817857f47b9804"><td class="mdescLeft"> </td><td class="mdescRight">Index of first block of four functions at level. <br/></td></tr>
+<tr class="memitem:ac9f7e1529d635e3357d1e081ddf7e349"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9f7e1529d635e3357d1e081ddf7e349"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html#ac9f7e1529d635e3357d1e081ddf7e349">LAST_L</a>(x, y) (LRINT(ceil(((x)+1)/(double)y))-1)</td></tr>
+<tr class="memdesc:ac9f7e1529d635e3357d1e081ddf7e349"><td class="mdescLeft"> </td><td class="mdescRight">Index of last block of four functions at level. <br/></td></tr>
+<tr class="memitem:a3861f1554af7a46ab4788955bff82e16"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3861f1554af7a46ab4788955bff82e16"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>N_TILDE</b>(y) (y-1)</td></tr>
+<tr class="memitem:a2a3d2e8d45a563c618a6c2b6a292cc64"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a3d2e8d45a563c618a6c2b6a292cc64"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>IS_SYMMETRIC</b>(x, y, z) (x >= ((y-1.0)/z))</td></tr>
+<tr class="memitem:a81f8de5e3b3597d325e47d05d9f1213c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a81f8de5e3b3597d325e47d05d9f1213c"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_BREAK_EVEN</b> 4</td></tr>
+<tr class="memitem:a0afca80d182fb1abd524bc0a1378dc25"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>ABUVXPWY_SYMMETRIC</b>(NAME, S1, S2)</td></tr>
+<tr class="memitem:a18db89dcff6fae9720e01a0be56fc8f7"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>ABUVXPWY_SYMMETRIC_1</b>(NAME, S1)</td></tr>
+<tr class="memitem:ad301783a6575cd0fc132ebaa12d3cf60"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>ABUVXPWY_SYMMETRIC_2</b>(NAME, S1)</td></tr>
+<tr class="memitem:a9fe176f7a67aa76e7d5c101ff5aefe68"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9fe176f7a67aa76e7d5c101ff5aefe68"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_DO_STEP</b>(NAME, M1_FUNCTION, M2_FUNCTION)</td></tr>
+<tr class="memitem:a8cb478c4a27a921310d57427c1e94aa4"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>FPT_DO_STEP_TRANSPOSED</b>(NAME, M1_FUNCTION, M2_FUNCTION)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a4c7f62127651d301d4604b3a6519458d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c7f62127651d301d4604b3a6519458d"></a>
+typedef struct <a class="el" href="structfpt__step__.html">fpt_step_</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html#a4c7f62127651d301d4604b3a6519458d">fpt_step</a></td></tr>
+<tr class="memdesc:a4c7f62127651d301d4604b3a6519458d"><td class="mdescLeft"> </td><td class="mdescRight">Holds data for a single multiplication step in the cascade summation. <br/></td></tr>
+<tr class="memitem:a5141ba7ff5b14b5fbf7ee769943f1c10"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5141ba7ff5b14b5fbf7ee769943f1c10"></a>
+typedef struct <a class="el" href="structfpt__data__.html">fpt_data_</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html#a5141ba7ff5b14b5fbf7ee769943f1c10">fpt_data</a></td></tr>
+<tr class="memdesc:a5141ba7ff5b14b5fbf7ee769943f1c10"><td class="mdescLeft"> </td><td class="mdescRight">Holds data for a single cascade summation. <br/></td></tr>
+<tr class="memitem:a06f7c65536489b0602c70a616e9f1fe8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06f7c65536489b0602c70a616e9f1fe8"></a>
+typedef struct <a class="el" href="structfpt__set__s__.html">fpt_set_s_</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html#a06f7c65536489b0602c70a616e9f1fe8">fpt_set_s</a></td></tr>
+<tr class="memdesc:a06f7c65536489b0602c70a616e9f1fe8"><td class="mdescLeft"> </td><td class="mdescRight">Holds data for a set of cascade summations. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a736cbc7c2da6a04952583fd49e25e4e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a736cbc7c2da6a04952583fd49e25e4e3"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>abuvxpwy</b> (double a, double b, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n)</td></tr>
+<tr class="memitem:aad216e28422c530c4ee4fbf95fd33e1b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad216e28422c530c4ee4fbf95fd33e1b"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>abuvxpwy_symmetric1</b> (double a, double b, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n)</td></tr>
+<tr class="memitem:a83f9840e24ce540950b72434c661fde0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83f9840e24ce540950b72434c661fde0"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>abuvxpwy_symmetric2</b> (double a, double b, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n)</td></tr>
+<tr class="memitem:a3b79087d7b531639c88b9e63663d0001"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b79087d7b531639c88b9e63663d0001"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>abuvxpwy_symmetric1_1</b> (double a, double b, double _Complex *u, double _Complex *x, double *v, double _Complex *y, int n, double *xx)</td></tr>
+<tr class="memitem:a8144ba83b6da484aef595c3d9dacc138"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8144ba83b6da484aef595c3d9dacc138"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>abuvxpwy_symmetric1_2</b> (double a, double b, double _Complex *u, double _Complex *x, double *v, double _Complex *y, int n, double *xx)</td></tr>
+<tr class="memitem:ab0f8ee56f80660ec5e0f203389d736cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab0f8ee56f80660ec5e0f203389d736cc"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>abuvxpwy_symmetric2_1</b> (double a, double b, double _Complex *u, double _Complex *x, double _Complex *y, double *w, int n, double *xx)</td></tr>
+<tr class="memitem:a0ef6c4c0b701e19dc21041d62882f375"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ef6c4c0b701e19dc21041d62882f375"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>abuvxpwy_symmetric2_2</b> (double a, double b, double _Complex *u, double _Complex *x, double _Complex *y, double *w, int n, double *xx)</td></tr>
+<tr class="memitem:ab1fe68d8531716c8a5e036baca7a182b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1fe68d8531716c8a5e036baca7a182b"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>auvxpwy</b> (double a, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n)</td></tr>
+<tr class="memitem:afef4734728c0be3266b66352674602e6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afef4734728c0be3266b66352674602e6"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>auvxpwy_symmetric</b> (double a, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n)</td></tr>
+<tr class="memitem:a8c808df9f2681afd90495d0440773474"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8c808df9f2681afd90495d0440773474"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>auvxpwy_symmetric_1</b> (double a, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n, double *xx)</td></tr>
+<tr class="memitem:ab68e898834538d04a587fb3b47ca9e77"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab68e898834538d04a587fb3b47ca9e77"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>auvxpwy_symmetric_2</b> (double a, double _Complex *u, double _Complex *x, double *v, double _Complex *y, double *w, int n, double *xx)</td></tr>
+<tr class="memitem:a6eb07ec910d75702e7407e7c33cf3817"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6eb07ec910d75702e7407e7c33cf3817"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>fpt_do_step</b> (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double g, int tau, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:a37851bd35e077d1e38b83030e711640c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a37851bd35e077d1e38b83030e711640c"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>fpt_do_step_symmetric</b> (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double g, int tau, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:a2b4990ee477f2cbfecae8c2d10d45ad0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b4990ee477f2cbfecae8c2d10d45ad0"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>fpt_do_step_symmetric_u</b> (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double *x, double gam, int tau, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:a80c9f8e8cef9c53fced32b54d9db0527"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a80c9f8e8cef9c53fced32b54d9db0527"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>fpt_do_step_symmetric_l</b> (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double *x, double gam, int tau, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:aef54b179ce562d67ede119727d18dfbf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef54b179ce562d67ede119727d18dfbf"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>fpt_do_step_t</b> (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double g, int tau, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:a672e9251669c82c40fab19a2c66bd04f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a672e9251669c82c40fab19a2c66bd04f"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>fpt_do_step_t_symmetric</b> (double _Complex *a, double _Complex *b, double *a11, double *a12, double *a21, double *a22, double g, int tau, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:af140e4b95bdb5718b30dccb254f4c98e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af140e4b95bdb5718b30dccb254f4c98e"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>fpt_do_step_t_symmetric_u</b> (double _Complex *a, double _Complex *b, double *a11, double *a12, double *x, double gam, int tau, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:a5882ba5488023dbb43a37d69799f9054"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5882ba5488023dbb43a37d69799f9054"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>fpt_do_step_t_symmetric_l</b> (double _Complex *a, double _Complex *b, double *a21, double *a22, double *x, double gam, int tau, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:acf8cc85f60664acaf217f3546ccb0cdb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf8cc85f60664acaf217f3546ccb0cdb"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>eval_clenshaw</b> (const double *x, double *y, int size, int k, const double *alpha, const double *beta, const double *gam)</td></tr>
+<tr class="memitem:aa240495a95de302ce4a8da517fbeef6e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa240495a95de302ce4a8da517fbeef6e"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>eval_clenshaw2</b> (const double *x, double *z, double *y, int size1, int size, int k, const double *alpha, const double *beta, const double *gam)</td></tr>
+<tr class="memitem:a7286ea3559feea24b14c2905c5ec0a9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7286ea3559feea24b14c2905c5ec0a9d"></a>
+static int </td><td class="memItemRight" valign="bottom"><b>eval_clenshaw_thresh2</b> (const double *x, double *z, double *y, int size, int k, const double *alpha, const double *beta, const double *gam, const double threshold)</td></tr>
+<tr class="memitem:a2e7a261a047fe617e987e83e40032ecf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e7a261a047fe617e987e83e40032ecf"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>eval_sum_clenshaw_fast</b> (const int N, const int M, const double _Complex *a, const double *x, double _Complex *y, const double *alpha, const double *beta, const double *gam, const double lambda)</td></tr>
+<tr class="memitem:a509209ea5b6e210805a37cd80579c2c5"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="fpt_8c.html#a509209ea5b6e210805a37cd80579c2c5">eval_sum_clenshaw_transposed</a> (int N, int M, double _Complex *a, double *x, double _Complex *y, double _Complex *temp, double *alpha, double *beta, double *gam, double lambda)</td></tr>
+<tr class="memdesc:a509209ea5b6e210805a37cd80579c2c5"><td class="mdescLeft"> </td><td class="mdescRight">Clenshaw algorithm. <a href="#a509209ea5b6e210805a37cd80579c2c5"></a><br/></td></tr>
+<tr class="memitem:ad103ad18c75ee5dd048392dfd1ca7305"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad103ad18c75ee5dd048392dfd1ca7305"></a>
+<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> </td><td class="memItemRight" valign="bottom"><b>fpt_init</b> (const int M, const int t, const unsigned int flags)</td></tr>
+<tr class="memitem:ad3c3b30fda57364c92958cc7390b6378"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3c3b30fda57364c92958cc7390b6378"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_precompute</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, double *alpha, double *beta, double *gam, int k_start, const double threshold)</td></tr>
+<tr class="memitem:ade78830b02dc8b789992d6c3009c3f6f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade78830b02dc8b789992d6c3009c3f6f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_trafo_direct</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, const double _Complex *x, double _Complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a41f2c9ddd39779e60f0431efa67bb560"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41f2c9ddd39779e60f0431efa67bb560"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_trafo</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, const double _Complex *x, double _Complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a51ede94663119ef8153dfbd07456badc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a51ede94663119ef8153dfbd07456badc"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_transposed_direct</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, double _Complex *x, double _Complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:aa2084b56c851ff0c58d10bf34a084a38"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2084b56c851ff0c58d10bf34a084a38"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_transposed</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, double _Complex *x, double _Complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a7f2a1b915af8d0e7f2eb2f37ddb6772c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f2a1b915af8d0e7f2eb2f37ddb6772c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_finalize</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Implementation file for the FPT module. </p>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition in file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+</div><hr/><h2>Macro Definition Documentation</h2>
+<a class="anchor" id="a0afca80d182fb1abd524bc0a1378dc25"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ABUVXPWY_SYMMETRIC</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">NAME, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">S1, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">S2 </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> NAME(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> b, <span class="keywordtype">double</span> _Complex* u, <span class="keywordtype">double</span> _Complex* x, \</div>
+<div class="line"> <span class="keywordtype">double</span>* v, <span class="keywordtype">double</span> _Complex* y, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n) \</div>
+<div class="line">{ \</div>
+<div class="line"> const <span class="keywordtype">int</span> n2 = n>>1; \</div>
+<div class="line"> int l; <span class="keywordtype">double</span> _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \</div>
+<div class="line"> double *v_ptr = v, *w_ptr = w; \</div>
+<div class="line"> for (l = 0; l < n2; l++) \</div>
+<div class="line"> *u_ptr++ = a * (b * (*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++)); \</div>
+<div class="line"> v_ptr--; w_ptr--; \</div>
+<div class="line"> for (l = 0; l < n2; l++) \</div>
+<div class="line"> *u_ptr++ = a * (b * S1 * (*v_ptr--) * (*x_ptr++) + S2 * (*w_ptr--) * (*y_ptr++)); \</div>
+<div class="line">}</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00139">139</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a18db89dcff6fae9720e01a0be56fc8f7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ABUVXPWY_SYMMETRIC_1</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">NAME, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">S1 </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> NAME(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> b, <span class="keywordtype">double</span> _Complex* u, <span class="keywordtype">double</span> _Complex* x, \</div>
+<div class="line"> <span class="keywordtype">double</span>* v, <span class="keywordtype">double</span> _Complex* y, <span class="keywordtype">int</span> n, <span class="keywordtype">double</span> *xx) \</div>
+<div class="line">{ \</div>
+<div class="line"> const <span class="keywordtype">int</span> n2 = n>>1; \</div>
+<div class="line"> int l; <span class="keywordtype">double</span> _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \</div>
+<div class="line"> double *v_ptr = v, *xx_ptr = xx; \</div>
+<div class="line"> for (l = 0; l < n2; l++, v_ptr++) \</div>
+<div class="line"> *u_ptr++ = a * (b * (*v_ptr) * (*x_ptr++) + ((*v_ptr)*(1.0+*xx_ptr++)) * (*y_ptr++)); \</div>
+<div class="line"> v_ptr--; \</div>
+<div class="line"> for (l = 0; l < n2; l++, v_ptr--) \</div>
+<div class="line"> *u_ptr++ = a * (b * S1 * (*v_ptr) * (*x_ptr++) + (S1 * (*v_ptr) * (1.0+*xx_ptr++)) * (*y_ptr++)); \</div>
+<div class="line">}</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00156">156</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad301783a6575cd0fc132ebaa12d3cf60"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ABUVXPWY_SYMMETRIC_2</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">NAME, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">S1 </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> NAME(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> b, <span class="keywordtype">double</span> _Complex* u, <span class="keywordtype">double</span> _Complex* x, \</div>
+<div class="line"> <span class="keywordtype">double</span> _Complex* y, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n, <span class="keywordtype">double</span> *xx) \</div>
+<div class="line">{ \</div>
+<div class="line"> const <span class="keywordtype">int</span> n2 = n>>1; \</div>
+<div class="line"> int l; <span class="keywordtype">double</span> _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \</div>
+<div class="line"> double *w_ptr = w, *xx_ptr = xx; \</div>
+<div class="line"> for (l = 0; l < n2; l++, w_ptr++) \</div>
+<div class="line"> *u_ptr++ = a * (b * (*w_ptr/(1.0+*xx_ptr++)) * (*x_ptr++) + (*w_ptr) * (*y_ptr++)); \</div>
+<div class="line"> w_ptr--; \</div>
+<div class="line"> for (l = 0; l < n2; l++, w_ptr--) \</div>
+<div class="line"> *u_ptr++ = a * (b * (S1 * (*w_ptr)/(1.0+*xx_ptr++) ) * (*x_ptr++) + S1 * (*w_ptr) * (*y_ptr++)); \</div>
+<div class="line">}</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00173">173</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8cb478c4a27a921310d57427c1e94aa4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FPT_DO_STEP_TRANSPOSED</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">NAME, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">M1_FUNCTION, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">M2_FUNCTION </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> NAME(<span class="keywordtype">double</span> _Complex *a, <span class="keywordtype">double</span> _Complex *b, <span class="keywordtype">double</span> *a11, \</div>
+<div class="line"> <span class="keywordtype">double</span> *a12, <span class="keywordtype">double</span> *a21, <span class="keywordtype">double</span> *a22, <span class="keywordtype">double</span> g, <span class="keywordtype">int</span> tau, <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>) \</div>
+<div class="line">{ \ \</div>
+<div class="line"> int length = 1<<(tau+1); \ \</div>
+<div class="line"> double norm = 1.0/(length<<1); \</div>
+<div class="line"> \</div>
+<div class="line"> <span class="comment">/* Compute function values from Chebyshev-coefficients using a DCT-III. */</span> \</div>
+<div class="line"> fftw_execute_r2r(<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>-><a class="code" href="structfpt__set__s__.html#a5f146823d105906abf0cdc4c5f9638dc" title="Transform plans for the fftw library.">plans_dct3</a>[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a); \</div>
+<div class="line"> fftw_execute_r2r(<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>-><a class="code" href="structfpt__set__s__.html#a5f146823d105906abf0cdc4c5f9638dc" title="Transform plans for the fftw library.">plans_dct3</a>[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b); \</div>
+<div class="line"> \</div>
+<div class="line"> <span class="comment">/* Perform matrix multiplication. */</span> \</div>
+<div class="line"> M1_FUNCTION(norm,g,<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>->z,a,a11,b,a21,length); \</div>
+<div class="line"> M2_FUNCTION(norm,g,b,a,a12,b,a22,length); \</div>
+<div class="line"> memcpy(a,<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>->z,length*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex)); \</div>
+<div class="line"> \</div>
+<div class="line"> <span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span> \</div>
+<div class="line"> fftw_execute_r2r(<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>-><a class="code" href="structfpt__set__s__.html#aead22ae71c82ad37da07f6166bf53fbc" title="Transform plans for the fftw library.">plans_dct2</a>[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a); \</div>
+<div class="line"> fftw_execute_r2r(<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>-><a class="code" href="structfpt__set__s__.html#aead22ae71c82ad37da07f6166bf53fbc" title="Transform plans for the fftw library.">plans_dct2</a>[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b); \</div>
+<div class="line">}</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00397">397</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a509209ea5b6e210805a37cd80579c2c5"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void eval_sum_clenshaw_transposed </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>N</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>M</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double _Complex * </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double _Complex * </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double _Complex * </td>
+ <td class="paramname"><em>temp</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>alpha</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>beta</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>gam</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double </td>
+ <td class="paramname"><em>lambda</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Clenshaw algorithm. </p>
+<p>Evaluates a sum of real-valued functions <img class="formulaInl" alt="$P_k : \mathbb{R} \rightarrow \mathbb{R}$" src="form_29.png"/> </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ f(x) = \sum_{k=0}^N a_k P_k(x) \quad (N \in \mathbb{N}_0) \]" src="form_30.png"/>
+</p>
+<p> obeying a three-term recurrence relation </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ P_{k+1}(x) = (alpha_k * x + beta_k)*P_{k}(x) + gamma_k P_{k-1}(x) \quad (alpha_k, beta_k, gamma_k \in \mathbb{R},\; k \ge 0) \]" src="form_31.png"/>
+</p>
+<p> with initial conditions <img class="formulaInl" alt="$P_{-1}(x) := 0$" src="form_32.png"/>, <img class="formulaInl" alt="$P_0(x) := \lambda$" src="form_33.png"/> for given double _Complex coefficients <img class="formulaInl" alt="$\left(a_k\right)_{k=0}^N \in \mathbb{C}^{N+1}$" src="form_34.png"/> at given nodes <img class="formulaInl" alt="$\left(x_j\right)_{j=0}^M \in \mathbb{R}^{M+1}$" src="form_35.png"/>, <img class="formulaInl" alt="$M \in \mathbb{N}_0$" src="form_36.png"/>. </p>
+
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00715">715</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/fpt_8c_source.html b/doc/api/html/fpt_8c_source.html
new file mode 100644
index 0000000..f1991dc
--- /dev/null
+++ b/doc/api/html/fpt_8c_source.html
@@ -0,0 +1,1875 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fpt.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_d47b87128a15c0ce57cf8f363265bec1.html">fpt</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fpt.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="fpt_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: fpt.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <stdbool.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">/* Macros for index calculation. */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"><a class="code" href="fpt_8c.html#a58f899926cc6e95ea54dd68d131979b8"> 44</a></span> <span class="preprocessor">#define K_START_TILDE(x,y) (NFFT_MAX(NFFT_MIN(x,y-2),0))</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="code" href="fpt_8c.html#a769119c8ae45f2a30a62ba802d83139f"> 47</a></span> <span class="preprocessor">#define K_END_TILDE(x,y) NFFT_MIN(x,y-1)</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="code" href="fpt_8c.html#ac81f7eac1a01b06e91817857f47b9804"> 50</a></span> <span class="preprocessor">#define FIRST_L(x,y) (LRINT(floor((x)/(double)y)))</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="code" href="fpt_8c.html#ac9f7e1529d635e3357d1e081ddf7e349"> 53</a></span> <span class="preprocessor">#define LAST_L(x,y) (LRINT(ceil(((x)+1)/(double)y))-1)</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#define N_TILDE(y) (y-1)</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#define IS_SYMMETRIC(x,y,z) (x >= ((y-1.0)/z))</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#define FPT_BREAK_EVEN 4</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"><a class="code" href="structfpt__step__.html"> 64</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step_</a></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno"><a class="code" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf"> 66</a></span> <span class="keywordtype">bool</span> <a class="code" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf" title="Indicates if the values contained represent a fast or a slow stabilized step.">stable</a>; </div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="code" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b"> 69</a></span> <span class="keywordtype">int</span> <a class="code" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b" title="TODO Add comment here.">Ns</a>; </div>
+<div class="line"><a name="l00070"></a><span class="lineno"><a class="code" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb"> 70</a></span> <span class="keywordtype">int</span> <a class="code" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb" title="TODO Add comment here.">ts</a>; </div>
+<div class="line"><a name="l00071"></a><span class="lineno"><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9"> 71</a></span> <span class="keywordtype">double</span> **a11,**a12,**a21,**<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>; </div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540"> 72</a></span> <span class="keywordtype">double</span> *<a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>; </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> } <a class="code" href="fpt_8c.html#a4c7f62127651d301d4604b3a6519458d" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="structfpt__data__.html"> 78</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data_</a></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> {</div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854"> 80</a></span> <a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a> **<a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>; </div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334"> 81</a></span> <span class="keywordtype">int</span> <a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>; </div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519"> 82</a></span> <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519" title="TODO Add comment here.">alphaN</a>; </div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d"> 83</a></span> <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d" title="TODO Add comment here.">betaN</a>; </div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a"> 84</a></span> <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a" title="TODO Add comment here.">gammaN</a>; </div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e"> 85</a></span> <span class="keywordtype">double</span> <a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>; </div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa"> 86</a></span> <span class="keywordtype">double</span> <a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a>; </div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a"> 87</a></span> <span class="keywordtype">double</span> <a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>; </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment">/* Data for direct transform. */</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7"> 89</a></span> <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a>; </div>
+<div class="line"><a name="l00090"></a><span class="lineno"><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb"> 90</a></span> <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a>; </div>
+<div class="line"><a name="l00091"></a><span class="lineno"><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc"> 91</a></span> <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO Add comment here.">_gamma</a>; </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> } <a class="code" href="fpt_8c.html#a5141ba7ff5b14b5fbf7ee769943f1c10" title="Holds data for a single cascade summation.">fpt_data</a>;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html"> 97</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set_s_</a></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#ab2272294463f288c3aaa4513bfeac758"> 99</a></span> <span class="keywordtype">int</span> <a class="code" href="structfpt__set__s__.html#ab2272294463f288c3aaa4513bfeac758" title="The flags.">flags</a>; </div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a2387122a1e670e2e61b1699458224804"> 100</a></span> <span class="keywordtype">int</span> <a class="code" href="structfpt__set__s__.html#a2387122a1e670e2e61b1699458224804" title="The number of DPT transforms.">M</a>; </div>
+<div class="line"><a name="l00101"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#aa353a04683b31bed668ee490d5df1b81"> 101</a></span> <span class="keywordtype">int</span> <a class="code" href="structfpt__set__s__.html#aa353a04683b31bed668ee490d5df1b81" title="The transform length.">N</a>; </div>
+<div class="line"><a name="l00103"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a1d35166e05db58736e422850fe02edef"> 103</a></span> <span class="keywordtype">int</span> <a class="code" href="structfpt__set__s__.html#a1d35166e05db58736e422850fe02edef" title="The exponent of N.">t</a>; </div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a0509dfa979aa395a80d8f38b2f5fb760"> 104</a></span> <a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a> *<a class="code" href="structfpt__set__s__.html#a0509dfa979aa395a80d8f38b2f5fb760" title="The DPT transform data.">dpt</a>; </div>
+<div class="line"><a name="l00105"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a58a8f2867286e0be19dd89e8d41c033b"> 105</a></span> <span class="keywordtype">double</span> **<a class="code" href="structfpt__set__s__.html#a58a8f2867286e0be19dd89e8d41c033b" title="Array of pointers to arrays containing the Chebyshev nodes.">xcvecs</a>; </div>
+<div class="line"><a name="l00108"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a226e29e0f97627e77ec4fcebd0c49fdf"> 108</a></span> <span class="keywordtype">double</span> *<a class="code" href="structfpt__set__s__.html#a226e29e0f97627e77ec4fcebd0c49fdf" title="Array for Chebychev-nodes.">xc</a>; </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">double</span> _Complex *temp; </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">double</span> _Complex *work; </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">double</span> _Complex *result; </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">double</span> _Complex *vec3;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">double</span> _Complex *vec4;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">double</span> _Complex *z;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a5f146823d105906abf0cdc4c5f9638dc"> 115</a></span> fftw_plan *<a class="code" href="structfpt__set__s__.html#a5f146823d105906abf0cdc4c5f9638dc" title="Transform plans for the fftw library.">plans_dct3</a>; </div>
+<div class="line"><a name="l00117"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#aead22ae71c82ad37da07f6166bf53fbc"> 117</a></span> fftw_plan *<a class="code" href="structfpt__set__s__.html#aead22ae71c82ad37da07f6166bf53fbc" title="Transform plans for the fftw library.">plans_dct2</a>; </div>
+<div class="line"><a name="l00119"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a15eafd93be80eeea02173a9042e303d3"> 119</a></span> fftw_r2r_kind *<a class="code" href="structfpt__set__s__.html#a15eafd93be80eeea02173a9042e303d3" title="Transform kinds for fftw library.">kinds</a>; </div>
+<div class="line"><a name="l00121"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#afd6508cc584ac06b9f679be441b6e7f6"> 121</a></span> fftw_r2r_kind *<a class="code" href="structfpt__set__s__.html#afd6508cc584ac06b9f679be441b6e7f6" title="Transform kinds for fftw library.">kindsr</a>; </div>
+<div class="line"><a name="l00124"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a26355113f8348c270cd02bc196fad681"> 124</a></span> <span class="keywordtype">int</span> *<a class="code" href="structfpt__set__s__.html#a26355113f8348c270cd02bc196fad681" title="Transform lengths for fftw library.">lengths</a>; </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment">/* Data for slow transforms. */</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">double</span> *xc_slow;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> } <a class="code" href="fpt_8c.html#a06f7c65536489b0602c70a616e9f1fe8" title="Holds data for a set of cascade summations.">fpt_set_s</a>;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> abuvxpwy(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> b, <span class="keywordtype">double</span> _Complex* u, <span class="keywordtype">double</span> _Complex* x,</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordtype">double</span>* v, <span class="keywordtype">double</span> _Complex* y, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> {</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">int</span> l; <span class="keywordtype">double</span> _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordtype">double</span> *v_ptr = v, *w_ptr = w;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">for</span> (l = 0; l < n; l++)</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> *u_ptr++ = a * (b * (*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++));</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> }</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="preprocessor">#define ABUVXPWY_SYMMETRIC(NAME,S1,S2) \</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="preprocessor">static inline void NAME(double a, double b, double _Complex* u, double _Complex* x, \</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="preprocessor"> double* v, double _Complex* y, double* w, int n) \</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="preprocessor"> const int n2 = n>>1; \</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="preprocessor"> int l; double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="preprocessor"> double *v_ptr = v, *w_ptr = w; \</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor"> for (l = 0; l < n2; l++) \</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="preprocessor"> *u_ptr++ = a * (b * (*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++)); \</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="preprocessor"> v_ptr--; w_ptr--; \</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor"> for (l = 0; l < n2; l++) \</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor"> *u_ptr++ = a * (b * S1 * (*v_ptr--) * (*x_ptr++) + S2 * (*w_ptr--) * (*y_ptr++)); \</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> ABUVXPWY_SYMMETRIC(abuvxpwy_symmetric1,1.0,-1.0)</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> ABUVXPWY_SYMMETRIC(abuvxpwy_symmetric2,-1.0,1.0)</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor">#define ABUVXPWY_SYMMETRIC_1(NAME,S1) \</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor">static inline void NAME(double a, double b, double _Complex* u, double _Complex* x, \</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="preprocessor"> double* v, double _Complex* y, int n, double *xx) \</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="preprocessor"> const int n2 = n>>1; \</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="preprocessor"> int l; double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="preprocessor"> double *v_ptr = v, *xx_ptr = xx; \</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="preprocessor"> for (l = 0; l < n2; l++, v_ptr++) \</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="preprocessor"> *u_ptr++ = a * (b * (*v_ptr) * (*x_ptr++) + ((*v_ptr)*(1.0+*xx_ptr++)) * (*y_ptr++)); \</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor"> v_ptr--; \</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="preprocessor"> for (l = 0; l < n2; l++, v_ptr--) \</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor"> *u_ptr++ = a * (b * S1 * (*v_ptr) * (*x_ptr++) + (S1 * (*v_ptr) * (1.0+*xx_ptr++)) * (*y_ptr++)); \</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> ABUVXPWY_SYMMETRIC_1(abuvxpwy_symmetric1_1,1.0)</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> ABUVXPWY_SYMMETRIC_1(abuvxpwy_symmetric1_2,-1.0)</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor">#define ABUVXPWY_SYMMETRIC_2(NAME,S1) \</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor">static inline void NAME(double a, double b, double _Complex* u, double _Complex* x, \</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor"> double _Complex* y, double* w, int n, double *xx) \</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor"> const int n2 = n>>1; \</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor"> int l; double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor"> double *w_ptr = w, *xx_ptr = xx; \</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor"> for (l = 0; l < n2; l++, w_ptr++) \</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="preprocessor"> *u_ptr++ = a * (b * (*w_ptr/(1.0+*xx_ptr++)) * (*x_ptr++) + (*w_ptr) * (*y_ptr++)); \</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor"> w_ptr--; \</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="preprocessor"> for (l = 0; l < n2; l++, w_ptr--) \</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor"> *u_ptr++ = a * (b * (S1 * (*w_ptr)/(1.0+*xx_ptr++) ) * (*x_ptr++) + S1 * (*w_ptr) * (*y_ptr++)); \</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> ABUVXPWY_SYMMETRIC_2(abuvxpwy_symmetric2_1,1.0)</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> ABUVXPWY_SYMMETRIC_2(abuvxpwy_symmetric2_2,-1.0)</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> static inline <span class="keywordtype">void</span> auvxpwy(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> _Complex* u, <span class="keywordtype">double</span> _Complex* x, <span class="keywordtype">double</span>* v,</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">double</span> _Complex* y, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> {</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordtype">double</span> _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">double</span> *v_ptr = v, *w_ptr = w;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">for</span> (l = n; l > 0; l--)</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> *u_ptr++ = a * ((*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++));</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> }</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> auvxpwy_symmetric(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> _Complex* u, <span class="keywordtype">double</span> _Complex* x,</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordtype">double</span>* v, <span class="keywordtype">double</span> _Complex* y, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> {</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n2 = n>>1; \</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> int l;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordtype">double</span> _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordtype">double</span> *v_ptr = v, *w_ptr = w;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">for</span> (l = n2; l > 0; l--)</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> *u_ptr++ = a * ((*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++));</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> v_ptr--; w_ptr--;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">for</span> (l = n2; l > 0; l--)</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> *u_ptr++ = a * ((*v_ptr--) * (*x_ptr++) - (*w_ptr--) * (*y_ptr++));</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> auvxpwy_symmetric_1(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> _Complex* u, <span class="keywordtype">double</span> _Complex* x,</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordtype">double</span>* v, <span class="keywordtype">double</span> _Complex* y, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n, <span class="keywordtype">double</span> *xx)</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> {</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n2 = n>>1; \</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> int l;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordtype">double</span> _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordtype">double</span> *v_ptr = v, *w_ptr = w, *xx_ptr = xx;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">for</span> (l = n2; l > 0; l--, xx_ptr++)</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> *u_ptr++ = a * (((*v_ptr++)*(1.0+*xx_ptr)) * (*x_ptr++) + ((*w_ptr++)*(1.0+*xx_ptr)) * (*y_ptr++));</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> v_ptr--; w_ptr--;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">for</span> (l = n2; l > 0; l--, xx_ptr++)</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> *u_ptr++ = a * (-((*v_ptr--)*(1.0+*xx_ptr)) * (*x_ptr++) + ((*w_ptr--)*(1.0+*xx_ptr)) * (*y_ptr++));</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> auvxpwy_symmetric_2(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> _Complex* u, <span class="keywordtype">double</span> _Complex* x,</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordtype">double</span>* v, <span class="keywordtype">double</span> _Complex* y, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n, <span class="keywordtype">double</span> *xx)</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> {</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n2 = n>>1; \</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> int l;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordtype">double</span> _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordtype">double</span> *v_ptr = v, *w_ptr = w, *xx_ptr = xx;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">for</span> (l = n2; l > 0; l--, xx_ptr++)</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> *u_ptr++ = a * (((*v_ptr++)/(1.0+*xx_ptr)) * (*x_ptr++) + ((*w_ptr++)/(1.0+*xx_ptr)) * (*y_ptr++));</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> v_ptr--; w_ptr--;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">for</span> (l = n2; l > 0; l--, xx_ptr++)</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> *u_ptr++ = a * (-((*v_ptr--)/(1.0+*xx_ptr)) * (*x_ptr++) + ((*w_ptr--)/(1.0+*xx_ptr)) * (*y_ptr++));</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="preprocessor">#define FPT_DO_STEP(NAME,M1_FUNCTION,M2_FUNCTION) \</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="preprocessor">static inline void NAME(double _Complex *a, double _Complex *b, double *a11, double *a12, \</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor"> double *a21, double *a22, double g, int tau, fpt_set set) \</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="preprocessor"> int length = 1<<(tau+1); \</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="preprocessor"> double norm = 1.0/(length<<1); \</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="preprocessor"> </span><span class="comment">/* Compensate for factors introduced by a raw DCT-III. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="preprocessor"> a[0] *= 2.0; \</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="preprocessor"> b[0] *= 2.0; \</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="preprocessor"> </span><span class="comment">/* Compute function values from Chebyshev-coefficients using a DCT-III. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="preprocessor"> fftw_execute_r2r(set->plans_dct3[tau-1],(double*)a,(double*)a); \</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="preprocessor"> fftw_execute_r2r(set->plans_dct3[tau-1],(double*)b,(double*)b); \</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor"> </span><span class="comment">/*for (k = 0; k < length; k++)*/</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor"> </span><span class="comment">/*{*/</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor"> </span><span class="comment">/*fprintf(stderr,"fpt_do_step: a11 = %le, a12 = %le, a21 = %le, a22 = %le\n",*/</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="preprocessor"> </span><span class="comment">/* a11[k],a12[k],a21[k],a22[k]);*/</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor"> </span><span class="comment">/*}*/</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="preprocessor"> </span><span class="comment">/* Check, if gamma is zero. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor"> if (g == 0.0) \</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="preprocessor"> </span><span class="comment">/*fprintf(stderr,"gamma == 0!\n");*/</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="preprocessor"> </span><span class="comment">/* Perform multiplication only for second row. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="preprocessor"> M2_FUNCTION(norm,b,b,a22,a,a21,length); \</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="preprocessor"> </span><span class="comment">/*fprintf(stderr,"gamma != 0!\n");*/</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="preprocessor"> </span><span class="comment">/* Perform multiplication for both rows. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="preprocessor"> M2_FUNCTION(norm,set->z,b,a22,a,a21,length); \</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="preprocessor"> M1_FUNCTION(norm*g,a,a,a11,b,a12,length); \</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="preprocessor"> memcpy(b,set->z,length*sizeof(double _Complex)); \</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="preprocessor"> </span><span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="preprocessor"> fftw_execute_r2r(set->plans_dct2[tau-1],(double*)a,(double*)a); \</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="preprocessor"> </span><span class="comment">/* Compensate for factors introduced by a raw DCT-II. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="preprocessor"> a[0] *= 0.5; \</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="preprocessor"> </span><span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="preprocessor"> fftw_execute_r2r(set->plans_dct2[tau-1],(double*)b,(double*)b); \</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="preprocessor"> </span><span class="comment">/* Compensate for factors introduced by a raw DCT-II. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="preprocessor"> b[0] *= 0.5; \</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> FPT_DO_STEP(fpt_do_step,auvxpwy,auvxpwy)</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> FPT_DO_STEP(fpt_do_step_symmetric,auvxpwy_symmetric,auvxpwy_symmetric)</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="comment">/*FPT_DO_STEP(fpt_do_step_symmetric_u,auvxpwy_symmetric,auvxpwy)</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment">FPT_DO_STEP(fpt_do_step_symmetric_l,auvxpwy,auvxpwy_symmetric)*/</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> static inline <span class="keywordtype">void</span> fpt_do_step_symmetric_u(<span class="keywordtype">double</span> _Complex *a, <span class="keywordtype">double</span> _Complex *b,</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keywordtype">double</span> *a11, <span class="keywordtype">double</span> *a12, <span class="keywordtype">double</span> *a21, <span class="keywordtype">double</span> *a22, <span class="keywordtype">double</span> *x,</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordtype">double</span> gam, <span class="keywordtype">int</span> tau, <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> set)</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> {</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordtype">int</span> length = 1<<(tau+1);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordtype">double</span> norm = 1.0/(length<<1);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> UNUSED(a21); UNUSED(a22);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="comment">/* Compensate for factors introduced by a raw DCT-III. */</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> a[0] *= 2.0;</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> b[0] *= 2.0;</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment">/* Compute function values from Chebyshev-coefficients using a DCT-III. */</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> fftw_execute_r2r(set->plans_dct3[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> fftw_execute_r2r(set->plans_dct3[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b);</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="comment">/*for (k = 0; k < length; k++)*/</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="comment">/*{*/</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="comment">/*fprintf(stderr,"fpt_do_step: a11 = %le, a12 = %le, a21 = %le, a22 = %le\n",*/</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="comment">/* a11[k],a12[k],a21[k],a22[k]);*/</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="comment">/*}*/</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="comment">/* Check, if gamma is zero. */</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">if</span> (gam == 0.0)</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> {</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="comment">/*fprintf(stderr,"gamma == 0!\n");*/</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="comment">/* Perform multiplication only for second row. */</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> auvxpwy_symmetric_1(norm,b,b,a12,a,a11,length,x);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> }</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> {</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="comment">/*fprintf(stderr,"gamma != 0!\n");*/</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="comment">/* Perform multiplication for both rows. */</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> auvxpwy_symmetric_1(norm,set->z,b,a12,a,a11,length,x);</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> auvxpwy_symmetric(norm*gam,a,a,a11,b,a12,length);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> memcpy(b,set->z,length*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> fftw_execute_r2r(set->plans_dct2[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="comment">/* Compensate for factors introduced by a raw DCT-II. */</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> a[0] *= 0.5;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> }</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> fftw_execute_r2r(set->plans_dct2[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b);</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="comment">/* Compensate for factors introduced by a raw DCT-II. */</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> b[0] *= 0.5;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> }</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> fpt_do_step_symmetric_l(<span class="keywordtype">double</span> _Complex *a, <span class="keywordtype">double</span> _Complex *b,</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordtype">double</span> *a11, <span class="keywordtype">double</span> *a12, <span class="keywordtype">double</span> *a21, <span class="keywordtype">double</span> *a22, <span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> gam, <span class="keywordtype">int</span> tau, <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations [...]
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> {</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keywordtype">int</span> length = 1<<(tau+1);</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordtype">double</span> norm = 1.0/(length<<1);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="comment">/* Compensate for factors introduced by a raw DCT-III. */</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> a[0] *= 2.0;</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> b[0] *= 2.0;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> UNUSED(a11); UNUSED(a12);</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="comment">/* Compute function values from Chebyshev-coefficients using a DCT-III. */</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> fftw_execute_r2r(set->plans_dct3[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a);</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> fftw_execute_r2r(set->plans_dct3[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="comment">/*for (k = 0; k < length; k++)*/</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="comment">/*{*/</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="comment">/*fprintf(stderr,"fpt_do_step: a11 = %le, a12 = %le, a21 = %le, a22 = %le\n",*/</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="comment">/* a11[k],a12[k],a21[k],a22[k]);*/</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="comment">/*}*/</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="comment">/* Check, if gamma is zero. */</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">if</span> (gam == 0.0)</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> {</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="comment">/*fprintf(stderr,"gamma == 0!\n");*/</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="comment">/* Perform multiplication only for second row. */</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> auvxpwy_symmetric(norm,b,b,a22,a,a21,length);</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> }</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> {</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="comment">/*fprintf(stderr,"gamma != 0!\n");*/</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="comment">/* Perform multiplication for both rows. */</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> auvxpwy_symmetric(norm,set->z,b,a22,a,a21,length);</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> auvxpwy_symmetric_2(norm*gam,a,a,a21,b,a22,length,x);</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> memcpy(b,set->z,length*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> fftw_execute_r2r(set->plans_dct2[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="comment">/* Compensate for factors introduced by a raw DCT-II. */</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> a[0] *= 0.5;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> }</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> fftw_execute_r2r(set->plans_dct2[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b);</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="comment">/* Compensate for factors introduced by a raw DCT-II. */</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> b[0] *= 0.5;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> }</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="preprocessor">#define FPT_DO_STEP_TRANSPOSED(NAME,M1_FUNCTION,M2_FUNCTION) \</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="preprocessor">static inline void NAME(double _Complex *a, double _Complex *b, double *a11, \</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="preprocessor"> double *a12, double *a21, double *a22, double g, int tau, fpt_set set) \</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="preprocessor"> int length = 1<<(tau+1); \</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor"> double norm = 1.0/(length<<1); \</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="preprocessor"> </span><span class="comment">/* Compute function values from Chebyshev-coefficients using a DCT-III. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="preprocessor"> fftw_execute_r2r(set->plans_dct3[tau-1],(double*)a,(double*)a); \</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor"> fftw_execute_r2r(set->plans_dct3[tau-1],(double*)b,(double*)b); \</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="preprocessor"> </span><span class="comment">/* Perform matrix multiplication. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="preprocessor"> M1_FUNCTION(norm,g,set->z,a,a11,b,a21,length); \</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="preprocessor"> M2_FUNCTION(norm,g,b,a,a12,b,a22,length); \</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor"> memcpy(a,set->z,length*sizeof(double _Complex)); \</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="preprocessor"> </span><span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="preprocessor"> fftw_execute_r2r(set->plans_dct2[tau-1],(double*)a,(double*)a); \</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="preprocessor"> fftw_execute_r2r(set->plans_dct2[tau-1],(double*)b,(double*)b); \</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> FPT_DO_STEP_TRANSPOSED(fpt_do_step_t,abuvxpwy,abuvxpwy)</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> FPT_DO_STEP_TRANSPOSED(fpt_do_step_t_symmetric,abuvxpwy_symmetric1,abuvxpwy_symmetric2)</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="comment">/*FPT_DO_STEP_TRANSPOSED(fpt_do_step_t_symmetric_u,abuvxpwy_symmetric1_1,abuvxpwy_symmetric1_2)*/</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="comment">/*FPT_DO_STEP_TRANSPOSED(fpt_do_step_t_symmetric_l,abuvxpwy_symmetric2_2,abuvxpwy_symmetric2_1)*/</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> static inline <span class="keywordtype">void</span> fpt_do_step_t_symmetric_u(<span class="keywordtype">double</span> _Complex *a,</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keywordtype">double</span> _Complex *b, <span class="keywordtype">double</span> *a11, <span class="keywordtype">double</span> *a12, <span class="keywordtype">double</span> *x,</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keywordtype">double</span> gam, <span class="keywordtype">int</span> tau, <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> set)</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> {</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keywordtype">int</span> length = 1<<(tau+1);</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="keywordtype">double</span> norm = 1.0/(length<<1);</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="comment">/* Compute function values from Chebyshev-coefficients using a DCT-III. */</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> fftw_execute_r2r(set->plans_dct3[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a);</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> fftw_execute_r2r(set->plans_dct3[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b);</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="comment">/* Perform matrix multiplication. */</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> abuvxpwy_symmetric1_1(norm,gam,set->z,a,a11,b,length,x);</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> abuvxpwy_symmetric1_2(norm,gam,b,a,a12,b,length,x);</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> memcpy(a,set->z,length*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> fftw_execute_r2r(set->plans_dct2[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a);</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> fftw_execute_r2r(set->plans_dct2[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b);</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> }</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> fpt_do_step_t_symmetric_l(<span class="keywordtype">double</span> _Complex *a,</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="keywordtype">double</span> _Complex *b, <span class="keywordtype">double</span> *a21, <span class="keywordtype">double</span> *a22,</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> gam, <span class="keywordtype">int</span> tau, <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>)</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> {</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="keywordtype">int</span> length = 1<<(tau+1);</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="keywordtype">double</span> norm = 1.0/(length<<1);</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="comment">/* Compute function values from Chebyshev-coefficients using a DCT-III. */</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> fftw_execute_r2r(set->plans_dct3[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a);</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> fftw_execute_r2r(set->plans_dct3[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b);</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="comment">/* Perform matrix multiplication. */</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> abuvxpwy_symmetric2_2(norm,gam,set->z,a,b,a21,length,x);</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> abuvxpwy_symmetric2_1(norm,gam,b,a,b,a22,length,x);</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> memcpy(a,set->z,length*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="comment">/* Compute Chebyshev-coefficients using a DCT-II. */</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> fftw_execute_r2r(set->plans_dct2[tau-1],(<span class="keywordtype">double</span>*)a,(<span class="keywordtype">double</span>*)a);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> fftw_execute_r2r(set->plans_dct2[tau-1],(<span class="keywordtype">double</span>*)b,(<span class="keywordtype">double</span>*)b);</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> }</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keyword">static</span> <span class="keywordtype">void</span> eval_clenshaw(<span class="keyword">const</span> <span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> size, <span class="keywordtype">int</span> k, <span class="keyword">const</span> <span class="keywordtype">double</span> *alpha,</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="keyword">const</span> <span class="keywordtype">double</span> *beta, <span class="keyword">const</span> <span class="keywordtype">double</span> *gam)</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> {</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="comment">/* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="comment"> * of knots x[0], ..., x[size-1] by the Clenshaw algorithm</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keywordtype">double</span> a,b,x_val_act,a_old;</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keyword">const</span> <span class="keywordtype">double</span> *x_act;</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keywordtype">double</span> *y_act;</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="keyword">const</span> <span class="keywordtype">double</span> *alpha_act, *beta_act, *gamma_act;</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> x_act = x;</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> y_act = y;</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> {</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> a = 1.0;</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> b = 0.0;</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> x_val_act = *x_act;</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> {</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> *y_act = 1.0;</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> }</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> {</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> alpha_act = &(alpha[k]);</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> beta_act = &(beta[k]);</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> gamma_act = &(gam[k]);</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">for</span> (j = k; j > 1; j--)</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> {</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> a_old = a;</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> b = a_old*(*gamma_act);</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> alpha_act--;</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> beta_act--;</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> gamma_act--;</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> }</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> }</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> x_act++;</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> y_act++;</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> }</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> }</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="keyword">static</span> <span class="keywordtype">void</span> eval_clenshaw2(<span class="keyword">const</span> <span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *z, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> size1, <span class="keywordtype">int</span> size, <span class="keywordtype">int</span> k, <span class="keyword">const</sp [...]
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="keyword">const</span> <span class="keywordtype">double</span> *beta, <span class="keyword">const</span> <span class="keywordtype">double</span> *gam)</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> {</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="comment">/* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="comment"> * of knots x[0], ..., x[size-1] by the Clenshaw algorithm</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="keywordtype">double</span> a,b,x_val_act,a_old;</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="keyword">const</span> <span class="keywordtype">double</span> *x_act;</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="keywordtype">double</span> *y_act, *z_act;</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keyword">const</span> <span class="keywordtype">double</span> *alpha_act, *beta_act, *gamma_act;</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> x_act = x;</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> y_act = y;</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> z_act = z;</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> {</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> a = 1.0;</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> b = 0.0;</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> x_val_act = *x_act;</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> {</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> *y_act = 1.0;</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> *z_act = 0.0;</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> }</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> {</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> alpha_act = &(alpha[k]);</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> beta_act = &(beta[k]);</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> gamma_act = &(gam[k]);</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="keywordflow">for</span> (j = k; j > 1; j--)</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> {</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> a_old = a;</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> b = a_old*(*gamma_act);</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> alpha_act--;</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> beta_act--;</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> gamma_act--;</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> }</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keywordflow">if</span> (i < size1)</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> *z_act = a;</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> }</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> </div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> x_act++;</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> y_act++;</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> z_act++;</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> }</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="comment">/*gamma_act++;</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="comment"> FILE *f = fopen("/Users/keiner/Desktop/nfsft_debug.txt","a");</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="comment"> fprintf(f,"size1: %10d, size: %10d\n",size1,size);</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="comment"> fclose(f);*/</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> }</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="keyword">static</span> <span class="keywordtype">int</span> eval_clenshaw_thresh2(<span class="keyword">const</span> <span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *z, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> size, <span class="keywordtype">int</span> k,</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="keyword">const</span> <span class="keywordtype">double</span> *alpha, <span class="keyword">const</span> <span class="keywordtype">double</span> *beta, <span class="keyword">const</span> <span class="keywordtype">double</span> *gam, <span class="keyword">const</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="keywordtype">double</span> threshold)</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> {</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="comment">/* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="comment"> * of knots x[0], ..., x[size-1] by the Clenshaw algorithm</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordtype">double</span> a,b,x_val_act,a_old;</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keyword">const</span> <span class="keywordtype">double</span> *x_act;</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="keywordtype">double</span> *y_act, *z_act;</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="keyword">const</span> <span class="keywordtype">double</span> *alpha_act, *beta_act, *gamma_act;</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> R max = -nfft_float_property(NFFT_R_MAX);</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="keyword">const</span> R t = LOG10(FABS(threshold));</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> x_act = x;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> y_act = y;</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> z_act = z;</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> {</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> a = 1.0;</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> b = 0.0;</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> x_val_act = *x_act;</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> </div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> {</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> *y_act = 1.0;</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> *z_act = 0.0;</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> }</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> {</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> alpha_act = &(alpha[k]);</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> beta_act = &(beta[k]);</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> gamma_act = &(gam[k]);</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="keywordflow">for</span> (j = k; j > 1; j--)</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> {</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> a_old = a;</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> b = a_old*(*gamma_act);</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> alpha_act--;</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> beta_act--;</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> gamma_act--;</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> }</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> *z_act = a;</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> max = FMAX(max,LOG10(FABS(*y_act)));</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">if</span> (max > t)</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> }</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> x_act++;</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> y_act++;</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> z_act++;</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> }</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> }</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> eval_sum_clenshaw_fast(<span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> M,</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="keyword">const</span> <span class="keywordtype">double</span> _Complex *a, <span class="keyword">const</span> <span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> _Complex *y,</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="keyword">const</span> <span class="keywordtype">double</span> *alpha, <span class="keyword">const</span> <span class="keywordtype">double</span> *beta, <span class="keyword">const</span> <span class="keywordtype">double</span> *gam,</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="keyword">const</span> <span class="keywordtype">double</span> lambda)</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> {</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="keywordtype">double</span> _Complex tmp1, tmp2, tmp3;</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keywordtype">double</span> xc;</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="comment">/*fprintf(stderr, "Executing eval_sum_clenshaw_fast.\n"); </span></div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="comment"> fprintf(stderr, "Before transform:\n"); </span></div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="comment"> for (j = 0; j < N; j++)</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="comment"> fprintf(stderr, "a[%4d] = %e.\n", j, a[j]); </span></div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="comment"> for (j = 0; j <= M; j++)</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="comment"> fprintf(stderr, "x[%4d] = %e, y[%4d] = %e.\n", j, x[j], j, y[j]);*/</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> </div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">if</span> (N == 0)</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="keywordflow">for</span> (j = 0; j <= M; j++)</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> y[j] = a[0];</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> {</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="keywordflow">for</span> (j = 0; j <= M; j++)</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> {</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="preprocessor">#if 0</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="preprocessor"></span> xc = x[j];</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> tmp2 = a[N];</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> tmp1 = a[N-1] + (alpha[N-1] * xc + beta[N-1])*tmp2;</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="keywordflow">for</span> (k = N-1; k > 0; k--)</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> {</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> tmp3 = a[k-1]</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> + (alpha[k-1] * xc + beta[k-1]) * tmp1</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> + gam[k] * tmp2;</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> tmp2 = tmp1;</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> tmp1 = tmp3;</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> }</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> y[j] = lambda * tmp1;</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="preprocessor"></span> xc = x[j];</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> tmp1 = a[N-1];</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> tmp2 = a[N];</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="keywordflow">for</span> (k = N-1; k > 0; k--)</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> {</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> tmp3 = a[k-1] + tmp2 * gam[k];</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> tmp2 *= (alpha[k] * xc + beta[k]);</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> tmp2 += tmp1;</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> tmp1 = tmp3;</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="comment">/*if (j == 1515) </span></div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="comment"> fprintf(stderr, "k = %d, tmp1 = %e, tmp2 = %e.\n", k, tmp1, tmp2); </span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="comment"> }*/</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> }</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> tmp2 *= (alpha[0] * xc + beta[0]);</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="comment">//fprintf(stderr, "alpha[0] = %e, beta[0] = %e.\n", alpha[0], beta[0]); </span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> y[j] = lambda * (tmp2 + tmp1);</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="comment">//fprintf(stderr, "lambda = %e.\n", lambda); </span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> }</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="comment">/*fprintf(stderr, "Before transform:\n"); </span></div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="comment"> for (j = 0; j < N; j++)</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="comment"> fprintf(stderr, "a[%4d] = %e.\n", j, a[j]); </span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="comment"> for (j = 0; j <= M; j++)</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="comment"> fprintf(stderr, "x[%4d] = %e, y[%4d] = %e.\n", j, x[j], j, y[j]); */</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> }</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> </div>
+<div class="line"><a name="l00715"></a><span class="lineno"><a class="code" href="fpt_8c.html#a509209ea5b6e210805a37cd80579c2c5"> 715</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="fpt_8c.html#a509209ea5b6e210805a37cd80579c2c5" title="Clenshaw algorithm.">eval_sum_clenshaw_transposed</a>(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">double</span> _Complex* a, <spa [...]
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">double</span> _Complex *temp, <span class="keywordtype">double</span> *alpha, <span class="keywordtype">double</span> *beta, <span class="keywordtype">double</span> *gam,</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <span class="keywordtype">double</span> lambda)</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> {</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="keywordtype">double</span> _Complex* it1 = temp;</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="keywordtype">double</span> _Complex* it2 = y;</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="keywordtype">double</span> _Complex aux;</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> </div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="comment">/* Compute final result by multiplying with the constant lambda */</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> a[0] = 0.0;</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="keywordflow">for</span> (j = 0; j <= M; j++)</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> {</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> it2[j] = lambda * y[j];</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> a[0] += it2[j];</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> }</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="keywordflow">if</span> (N > 0)</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> {</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="comment">/* Compute final step. */</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> a[1] = 0.0;</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="keywordflow">for</span> (j = 0; j <= M; j++)</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> {</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> it1[j] = it2[j];</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> it2[j] = it2[j] * (alpha[0] * x[j] + beta[0]);</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> a[1] += it2[j];</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> }</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> </div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="keywordflow">for</span> (k = 2; k <= N; k++)</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> {</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> a[k] = 0.0;</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="keywordflow">for</span> (j = 0; j <= M; j++)</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> {</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> aux = it1[j];</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> it1[j] = it2[j];</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> it2[j] = it2[j]*(alpha[k-1] * x[j] + beta[k-1]) + gam[k-1] * aux;</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> a[k] += it2[j];</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> }</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> }</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> }</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> }</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> </div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> fpt_init(<span class="keyword">const</span> <span class="keywordtype">int</span> M, <span class="keyword">const</span> <span class="keywordtype">int</span> t, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> {</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="keywordtype">int</span> plength;</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="keywordtype">int</span> tau;</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="preprocessor"></span> <span class="keywordtype">int</span> nthreads = nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="comment">/* Allocate memory for new DPT set. */</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set_s</a> *<span class="keyword">set</span> = (<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set_s</a>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="s [...]
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> </div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="comment">/* Save parameters in structure. */</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="keyword">set</span>->flags = flags;</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> </div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <span class="keyword">set</span>->M = M;</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <span class="keyword">set</span>->t = t;</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="keyword">set</span>->N = 1<<t;</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> </div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="comment">/* Allocate memory for M transforms. */</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="keyword">set</span>->dpt = (<a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a>));</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> </div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="comment">/* Initialize with NULL pointer. */</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="keywordflow">for</span> (m = 0; m < <span class="keyword">set</span>->M; m++)</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> set->dpt[m].steps = 0;</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> </div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> <span class="comment">/* Create arrays with Chebyshev nodes. */</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> </div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="comment">/* Initialize array with Chebyshev coefficients for the polynomial x. This</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> <span class="comment"> * would be trivially an array containing a 1 as second entry with all other</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="comment"> * coefficients set to zero. In order to compensate for the multiplicative</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="comment"> * factor 2 introduced by the DCT-III, we set this coefficient to 0.5 here. */</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> </div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="comment">/* Allocate memory for array of pointers to node arrays. */</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> set->xcvecs = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->t)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="comment">/* For each polynomial length starting with 4, compute the Chebyshev nodes</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="comment"> * using a DCT-III. */</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> plength = 4;</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> <span class="keywordflow">for</span> (tau = 1; tau < t+1; tau++)</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> {</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="comment">/* Allocate memory for current array. */</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> <span class="keyword">set</span>->xcvecs[tau-1] = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(plength*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="keywordflow">for</span> (k = 0; k < plength; k++)</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> {</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> <span class="keyword">set</span>->xcvecs[tau-1][k] = cos(((k+0.5)*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/plength);</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> }</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> plength = plength << 1;</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> }</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> </div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> <span class="keyword">set</span>->work = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*set->N)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> <span class="keyword">set</span>->result = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*set->N)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> </div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="keyword">set</span>->lengths = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->t<span class="comment">/*-1*/</span>)*<span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> <span class="keyword">set</span>->plans_dct2 = (fftw_plan*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_plan)*(<span class="keyword">set</span>->t<span class="comment">/*-1*/</span>));</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> <span class="keyword">set</span>->kindsr = (fftw_r2r_kind*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*<span class="keyword">sizeof</span>(fftw_r2r_kind));</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> <span class="keyword">set</span>->kindsr[0] = FFTW_REDFT10;</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="keyword">set</span>->kindsr[1] = FFTW_REDFT10;</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> <span class="keywordflow">for</span> (tau = 0, plength = 4; tau < <span class="keyword">set</span>->t<span class="comment">/*-1*/</span>; tau++, plength<<=1)</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> {</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="keyword">set</span>->lengths[tau] = plength;</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="preprocessor"></span><span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> fftw_plan_with_nthreads(nthreads);</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> <span class="preprocessor"></span> <span class="keyword">set</span>->plans_dct2[tau] =</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> fftw_plan_many_r2r(1, &set->lengths[tau], 2, (<span class="keywordtype">double</span>*)set->work, NULL,</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> 2, 1, (<span class="keywordtype">double</span>*)set->result, NULL, 2, 1,set->kindsr,</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> 0);</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> </div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <span class="comment">/* Check if fast transform is activated. */</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> <span class="keywordflow">if</span> (!(set->flags & FPT_NO_FAST_ALGORITHM))</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> {</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="keyword">set</span>->vec3 = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(set->N*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> <span class="keyword">set</span>->vec4 = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(set->N*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="keyword">set</span>->z = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(set->N*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> </div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> <span class="keyword">set</span>->plans_dct3 = (fftw_plan*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_plan)*(<span class="keyword">set</span>->t<span class="comment">/*-1*/</span>));</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="keyword">set</span>->kinds = (fftw_r2r_kind*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*<span class="keyword">sizeof</span>(fftw_r2r_kind));</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> <span class="keyword">set</span>->kinds[0] = FFTW_REDFT01;</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="keyword">set</span>->kinds[1] = FFTW_REDFT01;</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="keywordflow">for</span> (tau = 0, plength = 4; tau < <span class="keyword">set</span>->t<span class="comment">/*-1*/</span>; tau++, plength<<=1)</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> {</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="keyword">set</span>->lengths[tau] = plength;</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> <span class="preprocessor"></span><span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> fftw_plan_with_nthreads(nthreads);</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="preprocessor"></span> <span class="keyword">set</span>->plans_dct3[tau] =</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> fftw_plan_many_r2r(1, &set->lengths[tau], 2, (<span class="keywordtype">double</span>*)set->work, NULL,</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> 2, 1, (<span class="keywordtype">double</span>*)set->result, NULL, 2, 1, set->kinds,</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> 0);</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->lengths);</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->kinds);</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->kindsr);</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <span class="keyword">set</span>->lengths = NULL;</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="keyword">set</span>->kinds = NULL;</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> <span class="keyword">set</span>->kindsr = NULL;</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> }</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> </div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="keywordflow">if</span> (!(set->flags & FPT_NO_DIRECT_ALGORITHM))</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> {</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="keyword">set</span>->xc_slow = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->N+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> <span class="keyword">set</span>->temp = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->N+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> }</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> </div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="comment">/* Return the newly created DPT set. */</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="keywordflow">return</span> <span class="keyword">set</span>;</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> }</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> </div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> <span class="keywordtype">void</span> fpt_precompute(<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keywordtype">double</span> *alpha, <span class="keywordtype">double</span> *beta,</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="keywordtype">double</span> *gam, <span class="keywordtype">int</span> k_start, <span class="keyword">const</span> <span class="keywordtype">double</span> threshold)</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> {</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> </div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <span class="keywordtype">int</span> tau; </div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> <span class="keywordtype">int</span> l; </div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="keywordtype">int</span> plength; </div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="keywordtype">int</span> degree; </div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="keywordtype">int</span> firstl; </div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> <span class="keywordtype">int</span> lastl; </div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="keywordtype">int</span> plength_stab; </div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="keywordtype">int</span> degree_stab; </div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="keywordtype">double</span> *a11; </div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="keywordtype">double</span> *a12; </div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="keywordtype">double</span> *a21; </div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="keywordtype">double</span> *a22; </div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="keyword">const</span> <span class="keywordtype">double</span> *calpha;</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="keyword">const</span> <span class="keywordtype">double</span> *cbeta;</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="keyword">const</span> <span class="keywordtype">double</span> *cgamma;</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> <span class="keywordtype">int</span> needstab = 0; </div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="keywordtype">int</span> k_start_tilde;</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="keywordtype">int</span> N_tilde;</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="keywordtype">int</span> clength;</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> <span class="keywordtype">int</span> clength_1;</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="keywordtype">int</span> clength_2;</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <span class="keywordtype">int</span> t_stab, N_stab;</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a> *data;</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> </div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="comment">/* Get pointer to DPT data. */</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> data = &(<span class="keyword">set</span>->dpt[m]);</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> </div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="comment">/* Check, if already precomputed. */</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> <span class="keywordflow">if</span> (data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a> != NULL)</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> </div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="comment">/* Save k_start. */</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a> = k_start;</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> </div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a> = gam[0];</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> </div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> <span class="comment">/* Check if fast transform is activated. */</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> <span class="keywordflow">if</span> (!(set->flags & FPT_NO_FAST_ALGORITHM))</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> {</div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> <span class="comment">/* Save recursion coefficients. */</span></div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> data-><a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519" title="TODO Add comment here.">alphaN</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->t-1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> data-><a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d" title="TODO Add comment here.">betaN</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->t-1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> data-><a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a" title="TODO Add comment here.">gammaN</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->t-1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> </div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="keywordflow">for</span> (tau = 2; tau <= <span class="keyword">set</span>->t; tau++)</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> {</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> </div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> data-><a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519" title="TODO Add comment here.">alphaN</a>[tau-2] = alpha[1<<tau];</div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> data-><a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d" title="TODO Add comment here.">betaN</a>[tau-2] = beta[1<<tau];</div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> data-><a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a" title="TODO Add comment here.">gammaN</a>[tau-2] = gam[1<<tau];</div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> }</div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> </div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> data-><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a> = alpha[1];</div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> data-><a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a> = beta[1];</div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> </div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> k_start_tilde = <a class="code" href="fpt_8c.html#a58f899926cc6e95ea54dd68d131979b8" title="Minimum degree at top of a cascade.">K_START_TILDE</a>(data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>,X(next_power_of_2)(data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment [...]
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> <span class="comment">/*set->N*/</span>);</div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> N_tilde = N_TILDE(set->N);</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> </div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="comment">/* Allocate memory for the cascade with t = log_2(N) many levels. */</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a> = (<a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class [...]
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> </div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="comment">/* For tau = 1,...t compute the matrices U_{n,tau,l}. */</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> plength = 4;</div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="keywordflow">for</span> (tau = 1; tau < <span class="keyword">set</span>->t; tau++)</div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> {</div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> <span class="comment">/* Compute auxilliary values. */</span></div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> degree = plength>>1;</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> <span class="comment">/* Compute first l. */</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> firstl = <a class="code" href="fpt_8c.html#ac81f7eac1a01b06e91817857f47b9804" title="Index of first block of four functions at level.">FIRST_L</a>(k_start_tilde,plength);</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="comment">/* Compute last l. */</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> lastl = <a class="code" href="fpt_8c.html#ac9f7e1529d635e3357d1e081ddf7e349" title="Index of last block of four functions at level.">LAST_L</a>(N_tilde,plength);</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> </div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <span class="comment">/* Allocate memory for current level. This level will contain 2^{t-tau-1}</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> <span class="comment"> * many matrices. */</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau] = (<a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a [...]
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> * (lastl+1));</div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="comment">/* For l = 0,...2^{t-tau-1}-1 compute the matrices U_{n,tau,l}. */</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="keywordflow">for</span> (l = firstl; l <= lastl; l++)</div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> {</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> <span class="keywordflow">if</span> (set->flags & FPT_AL_SYMMETRY && IS_SYMMETRIC(l,m,plength))</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> {</div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="comment">//fprintf(stderr,"fpt_precompute(%d): symmetric step\n",m);</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> clength = plength/2;</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> }</div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> {</div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> clength = plength;</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> }</div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> </div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <span class="comment">/* Allocate memory for the components of U_{n,tau,l}. */</span></div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> a11 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength);</div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> a12 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength);</div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> a21 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength);</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> a22 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength);</div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> </div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> <span class="comment">/* Evaluate the associated polynomials at the 2^{tau+1} Chebyshev</span></div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> <span class="comment"> * nodes. */</span></div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> </div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> <span class="comment">/* Get the pointers to the three-term recurrence coeffcients. */</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> calpha = &(alpha[plength*l+1+1]);</div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> cbeta = &(beta[plength*l+1+1]);</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> cgamma = &(gam[plength*l+1+1]);</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> </div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="keywordflow">if</span> (set->flags & FPT_NO_STABILIZATION)</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> {</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="comment">/* Evaluate P_{2^{tau}-2}^n(\cdot,2^{tau+1}l+2). */</span></div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> calpha--;</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> cbeta--;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> cgamma--;</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> eval_clenshaw2(set->xcvecs[tau-1], a11, a21, clength, clength, degree-1, calpha, cbeta,</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> cgamma);</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> eval_clenshaw2(set->xcvecs[tau-1], a12, a22, clength, clength, degree, calpha, cbeta,</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> cgamma);</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> needstab = 0;</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> }</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> {</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> calpha--;</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> cbeta--;</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> cgamma--;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="comment">/* Evaluate P_{2^{tau}-1}^n(\cdot,2^{tau+1}l+1). */</span></div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> needstab = eval_clenshaw_thresh2(set->xcvecs[tau-1], a11, a21, clength,</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> degree-1, calpha, cbeta, cgamma, threshold);</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="keywordflow">if</span> (needstab == 0)</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> {</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> <span class="comment">/* Evaluate P_{2^{tau}}^n(\cdot,2^{tau+1}l+1). */</span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> needstab = eval_clenshaw_thresh2(set->xcvecs[tau-1], a12, a22, clength,</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> degree, calpha, cbeta, cgamma, threshold);</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> }</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> }</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> </div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> </div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="comment">/* Check if stabilization needed. */</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="keywordflow">if</span> (needstab == 0)</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> {</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a11 = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a12 = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a21 = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a> = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span cl [...]
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<spa [...]
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <span class="comment">/* No stabilization needed. */</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a11[0] = a11;</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a12[0] = a12;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a21[0] = a21;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0] = a22;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>[0] = gam[plength*l+1+1];</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf" title="Indicates if the values contained represent a fast or a slow stabilized step.">stable</a> = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> }</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> {</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <span class="comment">/* Stabilize. */</span></div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> degree_stab = degree*(2*l+1);</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> X(next_power_of_2_exp)((l+1)*(1<<(tau+1)),&N_stab,&t_stab);</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> </div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="comment">/* Old arrays are to small. */</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(a11);</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(a12);</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(a21);</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(a22);</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> </div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a11 = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a12 = (<span class="keywordtype">double</span>**)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a21 = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a> = (<span class="keywordtype">double</span>**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span cl [...]
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<spa [...]
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> </div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> plength_stab = N_stab;</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="keywordflow">if</span> (set->flags & FPT_AL_SYMMETRY)</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> {</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="keywordflow">if</span> (m <= 1)</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> {</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="comment">/* This should never be executed */</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> clength_1 = plength_stab;</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> clength_2 = plength_stab;</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="comment">/* Allocate memory for arrays. */</span></div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> a11 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength_1);</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> a12 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength_1);</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> a21 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength_2);</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> a22 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength_2);</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="comment">/* Get the pointers to the three-term recurrence coeffcients. */</span></div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> calpha = &(alpha[1]); cbeta = &(beta[1]); cgamma = &(gam[1]);</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> eval_clenshaw2(set->xcvecs[t_stab-2], a11, a21, clength_1,</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> clength_2, degree_stab-1, calpha, cbeta, cgamma);</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> eval_clenshaw2(set->xcvecs[t_stab-2], a12, a22, clength_1,</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> clength_2, degree_stab+0, calpha, cbeta, cgamma);</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> }</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> {</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> clength = plength_stab/2;</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="keywordflow">if</span> (m%2 == 0)</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> {</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> a11 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength);</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> a12 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength);</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> a21 = 0;</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> a22 = 0;</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> calpha = &(alpha[2]); cbeta = &(beta[2]); cgamma = &(gam[2]);</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> eval_clenshaw(set->xcvecs[t_stab-2], a11, clength,</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> degree_stab-2, calpha, cbeta, cgamma);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> eval_clenshaw(set->xcvecs[t_stab-2], a12, clength,</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> degree_stab-1, calpha, cbeta, cgamma);</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> }</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> {</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> a11 = 0;</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> a12 = 0;</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> a21 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength);</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> a22 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength);</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> calpha = &(alpha[1]); cbeta = &(beta[1]); cgamma = &(gam[1]);</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> eval_clenshaw(set->xcvecs[t_stab-2], a21, clength,</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> degree_stab-1,calpha, cbeta, cgamma);</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> eval_clenshaw(set->xcvecs[t_stab-2], a22, clength,</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> degree_stab+0, calpha, cbeta, cgamma);</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> }</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> }</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> }</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> {</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> clength_1 = plength_stab;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> clength_2 = plength_stab;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> a11 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength_1);</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> a12 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength_1);</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> a21 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength_2);</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> a22 = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*clength_2);</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> calpha = &(alpha[2]);</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> cbeta = &(beta[2]);</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> cgamma = &(gam[2]);</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> calpha--;</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> cbeta--;</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> cgamma--;</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> eval_clenshaw2(set->xcvecs[t_stab-2], a11, a21, clength_1, clength_2, degree_stab-1,</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> calpha, cbeta, cgamma);</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> eval_clenshaw2(set->xcvecs[t_stab-2], a12, a22, clength_1, clength_2, degree_stab+0,</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> calpha, cbeta, cgamma);</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> </div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> }</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a11[0] = a11;</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a12[0] = a12;</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a21[0] = a21;</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0] = a22;</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> </div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>[0] = gam[1+1];</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf" title="Indicates if the values contained represent a fast or a slow stabilized step.">stable</a> = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb" title="TODO Add comment here.">ts</a> = t_stab;</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b" title="TODO Add comment here.">Ns</a> = N_stab;</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> }</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> }</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> plength = plength << 1;</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> }</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> }</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> </div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> <span class="keywordflow">if</span> (!(set->flags & FPT_NO_DIRECT_ALGORITHM))</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> {</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="comment">/* Check, if recurrence coefficients must be copied. */</span></div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> <span class="keywordflow">if</span> (set->flags & FPT_PERSISTENT_DATA)</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> {</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a> = (<span class="keywordtype">double</span>*) alpha;</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a> = (<span class="keywordtype">double</span>*) beta;</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO Add comment here.">_gamma</a> = (<span class="keywordtype">double</span>*) gam;</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> }</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> {</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->N+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->N+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO Add comment here.">_gamma</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((set->N+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> memcpy(data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a>,alpha,(set->N+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> memcpy(data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a>,beta,(set->N+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> memcpy(data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO Add comment here.">_gamma</a>,gam,(set->N+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> }</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> }</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> }</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> </div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="keywordtype">void</span> fpt_trafo_direct(<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keyword">const</span> <span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> _Complex * [...]
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="keyword">const</span> <span class="keywordtype">int</span> k_end, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> {</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> <a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a> *data = &(<span class="keyword">set</span>->dpt[m]);</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="keywordtype">int</span> Nk;</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> <span class="keywordtype">int</span> tk;</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="keywordtype">double</span> norm;</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> </div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="comment">//fprintf(stderr, "Executing dpt.\n"); </span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> </div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> X(next_power_of_2_exp)(k_end+1,&Nk,&tk);</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> norm = 2.0/(Nk<<1);</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> </div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="comment">//fprintf(stderr, "Norm = %e.\n", norm); </span></div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> </div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> <span class="keywordflow">if</span> (set->flags & FPT_NO_DIRECT_ALGORITHM)</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> {</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> }</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> </div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> <span class="keywordflow">if</span> (flags & FPT_FUNCTION_VALUES)</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> {</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <span class="comment">/* Fill array with Chebyshev nodes. */</span></div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> <span class="keywordflow">for</span> (j = 0; j <= k_end; j++)</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> {</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> <span class="keyword">set</span>->xc_slow[j] = cos((<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*(j+0.5))/(k_end+1));</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="comment">//fprintf(stderr, "x[%4d] = %e.\n", j, set->xc_slow[j]); </span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> }</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> </div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> memset(set->result,0U,data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> memcpy(&set->result[data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>],x,(k_end-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> </div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="comment">/*eval_sum_clenshaw(k_end, k_end, set->result, set->xc_slow,</span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="comment"> y, set->work, &data->alpha[1], &data->beta[1], &data->gamma[1],</span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="comment"> data->gamma_m1);*/</span></div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> eval_sum_clenshaw_fast(k_end, k_end, set->result, set->xc_slow,</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> y, &data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a>[1], &data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a>[1], &data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO Add comment her [...]
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> }</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> {</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> memset(set->temp,0U,data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> memcpy(&set->temp[data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>],x,(k_end-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> </div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> eval_sum_clenshaw_fast(k_end, Nk-1, set->temp, set->xcvecs[tk-2],</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> set->result, &data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a>[1], &data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a>[1], &data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO Ad [...]
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>);</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> </div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> fftw_execute_r2r(set->plans_dct2[tk-2],(<span class="keywordtype">double</span>*)set->result,</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> (<span class="keywordtype">double</span>*)set->result);</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> </div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> <span class="keyword">set</span>->result[0] *= 0.5;</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="keywordflow">for</span> (j = 0; j < Nk; j++)</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> {</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> <span class="keyword">set</span>->result[j] *= norm;</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> }</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> </div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> memcpy(y,set->result,(k_end+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> }</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> }</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> </div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="keywordtype">void</span> fpt_trafo(<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keyword">const</span> <span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> _Complex *y,</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="keyword">const</span> <span class="keywordtype">int</span> k_end, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> {</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="comment">/* Get transformation data. */</span></div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> <a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a> *data = &(<span class="keyword">set</span>->dpt[m]);</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> <span class="keywordtype">int</span> Nk;</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="keywordtype">int</span> tk;</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="keywordtype">int</span> k_start_tilde;</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> <span class="keywordtype">int</span> k_end_tilde;</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> </div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="keywordtype">int</span> tau;</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> <span class="keywordtype">int</span> firstl;</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> <span class="keywordtype">int</span> lastl;</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> <span class="keywordtype">int</span> plength;</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> <span class="keywordtype">int</span> plength_stab;</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> <span class="keywordtype">int</span> t_stab;</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> <a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a> *step;</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> fftw_plan plan = 0;</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> <span class="keywordtype">int</span> length = k_end+1;</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> fftw_r2r_kind kinds[2] = {FFTW_REDFT01,FFTW_REDFT01};</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> </div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> </div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> <span class="keywordtype">double</span> _Complex *work_ptr;</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> <span class="keyword">const</span> <span class="keywordtype">double</span> _Complex *x_ptr;</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> </div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> <span class="comment">/* Check, if slow transformation should be used due to small bandwidth. */</span></div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> <span class="keywordflow">if</span> (k_end < FPT_BREAK_EVEN)</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> {</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> <span class="comment">/* Use NDSFT. */</span></div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> fpt_trafo_direct(<span class="keyword">set</span>, m, x, y, k_end, flags);</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> }</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> </div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> X(next_power_of_2_exp)(k_end,&Nk,&tk);</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> k_start_tilde = <a class="code" href="fpt_8c.html#a58f899926cc6e95ea54dd68d131979b8" title="Minimum degree at top of a cascade.">K_START_TILDE</a>(data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>,Nk);</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> k_end_tilde = <a class="code" href="fpt_8c.html#a769119c8ae45f2a30a62ba802d83139f" title="Maximum degree at top of a cascade.">K_END_TILDE</a>(k_end,Nk);</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> </div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> <span class="comment">/* Check if fast transform is activated. */</span></div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> <span class="keywordflow">if</span> (set->flags & FPT_NO_FAST_ALGORITHM)</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> </div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> <span class="keywordflow">if</span> (flags & FPT_FUNCTION_VALUES)</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> {</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="preprocessor"></span> <span class="keywordtype">int</span> nthreads = nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> fftw_plan_with_nthreads(nthreads);</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="preprocessor"></span> plan = fftw_plan_many_r2r(1, &length, 2, (<span class="keywordtype">double</span>*)set->work, NULL, 2, 1,</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> (<span class="keywordtype">double</span>*)set->work, NULL, 2, 1, kinds, 0U);</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> </div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="comment">/* Initialize working arrays. */</span></div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> memset(set->result,0U,2*Nk*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> </div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="comment">/* The first step. */</span></div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> </div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="comment">/* Set the first 2*data->k_start coefficients to zero. */</span></div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> memset(set->work,0U,2*data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> </div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> work_ptr = &<span class="keyword">set</span>->work[2*data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>];</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> x_ptr = x;</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> </div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="keywordflow">for</span> (k = 0; k <= k_end_tilde-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>; k++)</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> {</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> *work_ptr++ = *x_ptr++;</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> *work_ptr++ = K(0.0);</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> }</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> </div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <span class="comment">/* Set the last 2*(set->N-1-k_end_tilde) coefficients to zero. */</span></div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> memset(&set->work[2*(k_end_tilde+1)],0U,2*(Nk-1-k_end_tilde)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> </div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> <span class="comment">/* If k_end == Nk, use three-term recurrence to map last coefficient x_{Nk} to</span></div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> <span class="comment"> * x_{Nk-1} and x_{Nk-2}. */</span></div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <span class="keywordflow">if</span> (k_end == Nk)</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> {</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> <span class="keyword">set</span>->work[2*(Nk-2)] += data-><a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a" title="TODO Add comment here.">gammaN</a>[tk-2]*x[Nk-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>];</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> set->work[2*(Nk-1)] += data-><a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d" title="TODO Add comment here.">betaN</a>[tk-2]*x[Nk-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>];</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="keyword">set</span>->work[2*(Nk-1)+1] = data-><a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519" title="TODO Add comment here.">alphaN</a>[tk-2]*x[Nk-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>];</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> }</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> </div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <span class="comment">/* Compute the remaining steps. */</span></div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> plength = 4;</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="keywordflow">for</span> (tau = 1; tau < tk; tau++)</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> {</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> <span class="comment">/* Compute first l. */</span></div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> firstl = <a class="code" href="fpt_8c.html#ac81f7eac1a01b06e91817857f47b9804" title="Index of first block of four functions at level.">FIRST_L</a>(k_start_tilde,plength);</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> <span class="comment">/* Compute last l. */</span></div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> lastl = <a class="code" href="fpt_8c.html#ac9f7e1529d635e3357d1e081ddf7e349" title="Index of last block of four functions at level.">LAST_L</a>(k_end_tilde,plength);</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> </div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> <span class="comment">/* Compute the multiplication steps. */</span></div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> <span class="keywordflow">for</span> (l = firstl; l <= lastl; l++)</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> {</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> <span class="comment">/* Copy vectors to multiply into working arrays zero-padded to twice the length. */</span></div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> memcpy(set->vec3,&(set->work[(plength/2)*(4*l+2)]),(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> memcpy(set->vec4,&(set->work[(plength/2)*(4*l+3)]),(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> memset(&set->vec3[plength/2],0U,(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> memset(&set->vec4[plength/2],0U,(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> </div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> <span class="comment">/* Copy coefficients into first half. */</span></div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> memcpy(&(set->work[(plength/2)*(4*l+2)]),&(set->work[(plength/2)*(4*l+1)]),(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> memset(&(set->work[(plength/2)*(4*l+1)]),0U,(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> memset(&(set->work[(plength/2)*(4*l+3)]),0U,(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> </div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> <span class="comment">/* Get matrix U_{n,tau,l} */</span></div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> step = &(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l]);</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> </div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> <span class="comment">/* Check if step is stable. */</span></div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> <span class="keywordflow">if</span> (step-><a class="code" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf" title="Indicates if the values contained represent a fast or a slow stabilized step.">stable</a>)</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> {</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> <span class="comment">/* Check, if we should do a symmetrizised step. */</span></div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> <span class="keywordflow">if</span> (set->flags & FPT_AL_SYMMETRY && IS_SYMMETRIC(l,m,plength))</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> {</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> <span class="comment">/*for (k = 0; k < plength; k++)</span></div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> <span class="comment"> fprintf(stderr,"fpt_trafo: a11 = %le, a12 = %le, a21 = %le, a22 = %le\n",</span></div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> <span class="comment"> step->a11[0][k],step->a12[0][k],step->a21[0][k],step->a22[0][k]);</span></div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> <span class="comment"> }*/</span></div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> <span class="comment">/* Multiply third and fourth polynomial with matrix U. */</span></div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> <span class="comment">//fprintf(stderr,"\nhallo\n");</span></div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> fpt_do_step_symmetric(set->vec3, set->vec4, step->a11[0],</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> step->a12[0], step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>[0], tau, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> }</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> {</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> <span class="comment">/* Multiply third and fourth polynomial with matrix U. */</span></div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> fpt_do_step(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>[0], tau, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> }</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> </div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> <span class="keywordflow">if</span> (step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>[0] != 0.0)</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> {</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> <span class="keywordflow">for</span> (k = 0; k < plength; k++)</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> {</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="keyword">set</span>->work[plength*2*l+k] += <span class="keyword">set</span>->vec3[k];</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> }</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> }</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="keywordflow">for</span> (k = 0; k < plength; k++)</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> {</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> <span class="keyword">set</span>->work[plength*(2*l+1)+k] += set->vec4[k];</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> }</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> }</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> {</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> <span class="comment">/* Stabilize. */</span></div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> </div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> <span class="comment">/* The lengh of the polynomials */</span></div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> plength_stab = step-><a class="code" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b" title="TODO Add comment here.">Ns</a>;</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> t_stab = step-><a class="code" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb" title="TODO Add comment here.">ts</a>;</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> </div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> <span class="comment">/*---------*/</span></div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> <span class="comment">/*fprintf(stderr,"\nfpt_trafo: stabilizing at tau = %d, l = %d.\n",tau,l);</span></div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> <span class="comment"> fprintf(stderr,"\nfpt_trafo: plength_stab = %d.\n",plength_stab);</span></div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> <span class="comment"> fprintf(stderr,"\nfpt_trafo: tk = %d.\n",tk);</span></div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> <span class="comment"> fprintf(stderr,"\nfpt_trafo: index = %d.\n",tk-tau-1);*/</span></div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> <span class="comment">/*---------*/</span></div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> </div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> <span class="comment">/* Set rest of vectors explicitely to zero */</span></div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> <span class="comment">/*fprintf(stderr,"fpt_trafo: stabilizing: plength = %d, plength_stab = %d\n",</span></div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> <span class="comment"> plength, plength_stab);*/</span></div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> memset(&set->vec3[plength/2],0U,(plength_stab-plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span> memset(&set->vec4[plength/2],0U,(plength_stab-plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> </div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> <span class="comment">/* Multiply third and fourth polynomial with matrix U. */</span></div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> <span class="comment">/* Check for symmetry. */</span></div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> <span class="keywordflow">if</span> (set->flags & FPT_AL_SYMMETRY)</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> {</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> <span class="keywordflow">if</span> (m <= 1)</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> {</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> fpt_do_step_symmetric(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>[0], t_stab-1, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> }</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m%2 == 0)</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> {</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> <span class="comment">/*fpt_do_step_symmetric_u(set->vec3, set->vec4, step->a11[0], step->a12[0],</span></div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> <span class="comment"> step->a21[0], step->a22[0], step->gamma[0], t_stab-1, set);*/</span></div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> fpt_do_step_symmetric_u(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0],</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> set->xcvecs[t_stab-2], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>[0], t_stab-1, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> <span class="comment">/*fpt_do_step(set->vec3, set->vec4, step->a11[0], step->a12[0],</span></div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> <span class="comment"> step->a21[0], step->a22[0], step->gamma[0], t_stab-1, set);*/</span></div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> }</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> {</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> <span class="comment">/*fpt_do_step_symmetric_l(set->vec3, set->vec4, step->a11[0], step->a12[0],</span></div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> <span class="comment"> step->a21[0], step->a22[0], step->gamma[0], t_stab-1, set);*/</span></div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> fpt_do_step_symmetric_l(set->vec3, set->vec4,</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> step->a21[0],</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], set->xcvecs[t_stab-2], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>[0], t_stab-1, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> <span class="comment">/*fpt_do_step(set->vec3, set->vec4, step->a11[0], step->a12[0],</span></div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> <span class="comment"> step->a21[0], step->a22[0], step->gamma[0], t_stab-1, set);*/</span></div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> }</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> }</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> {</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> fpt_do_step(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>[0], t_stab-1, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> }</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> </div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> <span class="keywordflow">if</span> (step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>[0] != 0.0)</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> {</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> <span class="keywordflow">for</span> (k = 0; k < plength_stab; k++)</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> {</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> <span class="keyword">set</span>->result[k] += <span class="keyword">set</span>->vec3[k];</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> }</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> }</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> </div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> <span class="keywordflow">for</span> (k = 0; k < plength_stab; k++)</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> {</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> <span class="keyword">set</span>->result[Nk+k] += <span class="keyword">set</span>->vec4[k];</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> }</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> }</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> }</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> <span class="comment">/* Double length of polynomials. */</span></div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> plength = plength<<1;</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> </div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> <span class="comment">/*--------*/</span></div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> <span class="comment">/*for (k = 0; k < 2*Nk; k++)</span></div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> <span class="comment"> fprintf(stderr,"work[%2d] = %le + I*%le\tresult[%2d] = %le + I*%le\n",</span></div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> <span class="comment"> k,creal(set->work[k]),cimag(set->work[k]),k,creal(set->result[k]),</span></div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> <span class="comment"> cimag(set->result[k]));</span></div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> <span class="comment"> }*/</span></div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> <span class="comment">/*--------*/</span></div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> }</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> </div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> <span class="comment">/* Add the resulting cascade coeffcients to the coeffcients accumulated from</span></div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> <span class="comment"> * the stabilization steps. */</span></div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> <span class="keywordflow">for</span> (k = 0; k < 2*Nk; k++)</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> {</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> <span class="keyword">set</span>->result[k] += <span class="keyword">set</span>->work[k];</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> }</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> </div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> <span class="comment">/* The last step. Compute the Chebyshev coeffcients c_k^n from the</span></div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> <span class="comment"> * polynomials in front of P_0^n and P_1^n. */</span></div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> y[0] = data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>*(<span class="keyword">set</span>->result[0] + data-><a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a>*<span class="keyword">set</span>->result[Nk] +</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> data-><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>*<span class="keyword">set</span>->result[Nk+1]*0.5);</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> y[1] = data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>*(<span class="keyword">set</span>->result[1] + data-><a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a>*<span class="keyword">set</span>->result[Nk+1]+</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> data-><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>*(<span class="keyword">set</span>->result[Nk]+<span class="keyword">set</span>->result[Nk+2]*0.5));</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> y[k_end-1] = data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>*(<span class="keyword">set</span>->result[k_end-1] +</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> data-><a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a>*<span class="keyword">set</span>->result[Nk+k_end-1] +</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> data-><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>*<span class="keyword">set</span>->result[Nk+k_end-2]*0.5);</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> y[k_end] = data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>*(0.5*data-><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>*<span class="keyword">set</span>->result[Nk+k_end-1]);</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> <span class="keywordflow">for</span> (k = 2; k <= k_end-2; k++)</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> {</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> y[k] = data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>*(<span class="keyword">set</span>->result[k] + data-><a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a>*<span class="keyword">set</span>->result[Nk+k] +</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> data-><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>*0.5*(<span class="keyword">set</span>->result[Nk+k-1]+<span class="keyword">set</span>->result[Nk+k+1]));</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> }</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span> </div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> <span class="keywordflow">if</span> (flags & FPT_FUNCTION_VALUES)</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span> {</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span> y[0] *= 2.0;</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> fftw_execute_r2r(plan,(<span class="keywordtype">double</span>*)y,(<span class="keywordtype">double</span>*)y);</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> <span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> <span class="preprocessor"></span> fftw_destroy_plan(plan);</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span> <span class="keywordflow">for</span> (k = 0; k <= k_end; k++)</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> {</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> y[k] *= 0.5;</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span> }</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> }</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> }</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> </div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> <span class="keywordtype">void</span> fpt_transposed_direct(<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keywordtype">double</span> _Complex *x,</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> <span class="keywordtype">double</span> _Complex *y, <span class="keyword">const</span> <span class="keywordtype">int</span> k_end, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> {</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> <a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a> *data = &(<span class="keyword">set</span>->dpt[m]);</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> <span class="keywordtype">int</span> Nk;</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> <span class="keywordtype">int</span> tk;</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> <span class="keywordtype">double</span> norm;</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> </div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> X(next_power_of_2_exp)(k_end+1,&Nk,&tk);</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> norm = 2.0/(Nk<<1);</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> </div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span> <span class="keywordflow">if</span> (set->flags & FPT_NO_DIRECT_ALGORITHM)</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> {</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> }</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> </div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> <span class="keywordflow">if</span> (flags & FPT_FUNCTION_VALUES)</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> {</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> <span class="keywordflow">for</span> (j = 0; j <= k_end; j++)</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span> {</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span> <span class="keyword">set</span>->xc_slow[j] = cos((<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*(j+0.5))/(k_end+1));</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span> }</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> </div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span> <a class="code" href="fpt_8c.html#a509209ea5b6e210805a37cd80579c2c5" title="Clenshaw algorithm.">eval_sum_clenshaw_transposed</a>(k_end, k_end, set->result, set->xc_slow,</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span> y, set->work, &data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a>[1], &data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a>[1], &data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO A [...]
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>);</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> </div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> memcpy(x,&set->result[data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>],(k_end-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>+1)*</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> }</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span> {</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span> memcpy(set->result,y,(k_end+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> memset(&set->result[k_end+1],0U,(Nk-k_end-1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> </div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> <span class="keywordflow">for</span> (j = 0; j < Nk; j++)</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> {</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> <span class="keyword">set</span>->result[j] *= norm;</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> }</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> </div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> fftw_execute_r2r(set->plans_dct3[tk-2],(<span class="keywordtype">double</span>*)set->result,</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> (<span class="keywordtype">double</span>*)set->result);</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> </div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> <a class="code" href="fpt_8c.html#a509209ea5b6e210805a37cd80579c2c5" title="Clenshaw algorithm.">eval_sum_clenshaw_transposed</a>(k_end, Nk-1, set->temp, set->xcvecs[tk-2],</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> set->result, set->work, &data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a>[1], &data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a>[1], &data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" [...]
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>);</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> </div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> memcpy(x,&set->temp[data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>],(k_end-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span> }</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> }</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> </div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span> <span class="keywordtype">void</span> fpt_transposed(<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keywordtype">double</span> _Complex *x,</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> <span class="keywordtype">double</span> _Complex *y, <span class="keyword">const</span> <span class="keywordtype">int</span> k_end, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> {</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> <span class="comment">/* Get transformation data. */</span></div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> <a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a> *data = &(<span class="keyword">set</span>->dpt[m]);</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> <span class="keywordtype">int</span> Nk;</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> <span class="keywordtype">int</span> tk;</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> <span class="keywordtype">int</span> k_start_tilde;</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> <span class="keywordtype">int</span> k_end_tilde;</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> </div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> <span class="keywordtype">int</span> tau;</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> <span class="keywordtype">int</span> firstl;</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> <span class="keywordtype">int</span> lastl;</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> <span class="keywordtype">int</span> plength;</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> <span class="keywordtype">int</span> plength_stab;</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> <a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a> *step;</div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> fftw_plan plan;</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> <span class="keywordtype">int</span> length = k_end+1;</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> fftw_r2r_kind kinds[2] = {FFTW_REDFT10,FFTW_REDFT10};</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> <span class="keywordtype">int</span> t_stab;</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> </div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> <span class="comment">/* Check, if slow transformation should be used due to small bandwidth. */</span></div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span> <span class="keywordflow">if</span> (k_end < FPT_BREAK_EVEN)</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span> {</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> <span class="comment">/* Use NDSFT. */</span></div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span> fpt_transposed_direct(<span class="keyword">set</span>, m, x, y, k_end, flags);</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> }</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> </div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> X(next_power_of_2_exp)(k_end,&Nk,&tk);</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span> k_start_tilde = <a class="code" href="fpt_8c.html#a58f899926cc6e95ea54dd68d131979b8" title="Minimum degree at top of a cascade.">K_START_TILDE</a>(data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>,Nk);</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span> k_end_tilde = <a class="code" href="fpt_8c.html#a769119c8ae45f2a30a62ba802d83139f" title="Maximum degree at top of a cascade.">K_END_TILDE</a>(k_end,Nk);</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> </div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> <span class="comment">/* Check if fast transform is activated. */</span></div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span> <span class="keywordflow">if</span> (set->flags & FPT_NO_FAST_ALGORITHM)</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> {</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> }</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> </div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> <span class="keywordflow">if</span> (flags & FPT_FUNCTION_VALUES)</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> {</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> <span class="preprocessor"></span> <span class="keywordtype">int</span> nthreads = nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> <span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span> fftw_plan_with_nthreads(nthreads);</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> <span class="preprocessor"></span> plan = fftw_plan_many_r2r(1, &length, 2, (<span class="keywordtype">double</span>*)set->work, NULL, 2, 1,</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> (<span class="keywordtype">double</span>*)set->work, NULL, 2, 1, kinds, 0U);</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span> <span class="preprocessor"></span> fftw_execute_r2r(plan,(<span class="keywordtype">double</span>*)y,(<span class="keywordtype">double</span>*)set->result);</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> <span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> <span class="preprocessor"></span> fftw_destroy_plan(plan);</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> <span class="keywordflow">for</span> (k = 0; k <= k_end; k++)</div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> {</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> <span class="keyword">set</span>->result[k] *= 0.5;</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> }</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span> }</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> {</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> memcpy(set->result,y,(k_end+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span> }</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> </div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span> <span class="comment">/* Initialize working arrays. */</span></div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> memset(set->work,0U,2*Nk*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> </div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span> <span class="comment">/* The last step is now the first step. */</span></div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> <span class="keywordflow">for</span> (k = 0; k <= k_end; k++)</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span> {</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span> <span class="keyword">set</span>->work[k] = data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>*<span class="keyword">set</span>->result[k];</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span> }</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> <span class="comment">//memset(&set->work[k_end+1],0U,(Nk+1-k_end)*sizeof(double _Complex));</span></div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> </div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> <span class="keyword">set</span>->work[Nk] = data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>*(data-><a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a>*<span class="keyword">set</span>->result[0] +</div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span> data-><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>*<span class="keyword">set</span>->result[1]);</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> <span class="keywordflow">for</span> (k = 1; k < k_end; k++)</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> {</div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span> <span class="keyword">set</span>->work[Nk+k] = data-><a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>*(data-><a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a>*<span class="keyword">set</span>->result[k] +</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> data-><a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>*0.5*(<span class="keyword">set</span>->result[k-1]+<span class="keyword">set</span>->result[k+1]));</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> }</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span> <span class="keywordflow">if</span> (k_end<Nk)</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span> {</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span> memset(&set->work[k_end],0U,(Nk-k_end)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> }</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> </div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> memcpy(set->result,set->work,2*Nk*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> </div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> <span class="comment">/* Compute the remaining steps. */</span></div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> plength = Nk;</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span> <span class="keywordflow">for</span> (tau = tk-1; tau >= 1; tau--)</div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span> {</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> <span class="comment">/* Compute first l. */</span></div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span> firstl = <a class="code" href="fpt_8c.html#ac81f7eac1a01b06e91817857f47b9804" title="Index of first block of four functions at level.">FIRST_L</a>(k_start_tilde,plength);</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span> <span class="comment">/* Compute last l. */</span></div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span> lastl = <a class="code" href="fpt_8c.html#ac9f7e1529d635e3357d1e081ddf7e349" title="Index of last block of four functions at level.">LAST_L</a>(k_end_tilde,plength);</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span> </div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span> <span class="comment">/* Compute the multiplication steps. */</span></div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> <span class="keywordflow">for</span> (l = firstl; l <= lastl; l++)</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span> {</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> <span class="comment">/* Initialize second half of coefficient arrays with zeros. */</span></div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span> memcpy(set->vec3,&(set->work[(plength/2)*(4*l+0)]),plength*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span> memcpy(set->vec4,&(set->work[(plength/2)*(4*l+2)]),plength*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span> </div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span> memcpy(&set->work[(plength/2)*(4*l+1)],&(set->work[(plength/2)*(4*l+2)]),</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span> (plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span> </div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span> <span class="comment">/* Get matrix U_{n,tau,l} */</span></div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> step = &(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l]);</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> </div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span> <span class="comment">/* Check if step is stable. */</span></div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span> <span class="keywordflow">if</span> (step-><a class="code" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf" title="Indicates if the values contained represent a fast or a slow stabilized step.">stable</a>)</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> {</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span> <span class="keywordflow">if</span> (set->flags & FPT_AL_SYMMETRY && IS_SYMMETRIC(l,m,plength))</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span> {</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span> <span class="comment">/* Multiply third and fourth polynomial with matrix U. */</span></div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span> fpt_do_step_t_symmetric(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span> step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>[0], tau, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span> }</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> {</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> <span class="comment">/* Multiply third and fourth polynomial with matrix U. */</span></div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> fpt_do_step_t(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span> step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>[0], tau, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span> }</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span> memcpy(&(set->vec3[plength/2]), set->vec4,(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> </div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span> <span class="keywordflow">for</span> (k = 0; k < plength; k++)</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span> {</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span> <span class="keyword">set</span>->work[plength*(4*l+2)/2+k] = set->vec3[k];</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span> }</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span> }</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span> {</div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span> <span class="comment">/* Stabilize. */</span></div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> plength_stab = step-><a class="code" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b" title="TODO Add comment here.">Ns</a>;</div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> t_stab = step-><a class="code" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb" title="TODO Add comment here.">ts</a>;</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span> </div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> memcpy(set->vec3,set->result,plength_stab*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span> memcpy(set->vec4,&(set->result[Nk]),plength_stab*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> </div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> <span class="comment">/* Multiply third and fourth polynomial with matrix U. */</span></div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> <span class="keywordflow">if</span> (set->flags & FPT_AL_SYMMETRY)</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span> {</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span> <span class="keywordflow">if</span> (m <= 1)</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> {</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span> fpt_do_step_t_symmetric(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>[0], t_stab-1, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span> }</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m%2 == 0)</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span> {</div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> fpt_do_step_t_symmetric_u(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> set->xcvecs[t_stab-2], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>[0], t_stab-1, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> }</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span> {</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> fpt_do_step_t_symmetric_l(set->vec3, set->vec4,</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], set->xcvecs[t_stab-2], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>[0], t_stab-1, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> }</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span> }</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> {</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> fpt_do_step_t(set->vec3, set->vec4, step->a11[0], step->a12[0],</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> step->a21[0], step-><a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0], step-><a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>[0], t_stab-1, <span class="keyword">set</span>);</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> }</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> </div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span> memcpy(&(set->vec3[plength/2]),set->vec4,(plength/2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> </div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span> <span class="keywordflow">for</span> (k = 0; k < plength; k++)</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span> {</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> <span class="keyword">set</span>->work[(plength/2)*(4*l+2)+k] = <span class="keyword">set</span>->vec3[k];</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span> }</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span> }</div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> }</div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span> <span class="comment">/* Half the length of polynomial arrays. */</span></div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span> plength = plength>>1;</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> }</div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> </div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span> <span class="comment">/* First step */</span></div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> <span class="keywordflow">for</span> (k = 0; k <= k_end_tilde-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>; k++)</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> {</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span> x[k] = <span class="keyword">set</span>->work[2*(data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>+k)];</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> }</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span> <span class="keywordflow">if</span> (k_end == Nk)</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> {</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> x[Nk-data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>] =</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> data-><a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a" title="TODO Add comment here.">gammaN</a>[tk-2]*<span class="keyword">set</span>->work[2*(Nk-2)]</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> + data-><a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d" title="TODO Add comment here.">betaN</a>[tk-2] *set->work[2*(Nk-1)]</div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span> + data-><a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519" title="TODO Add comment here.">alphaN</a>[tk-2]*<span class="keyword">set</span>->work[2*(Nk-1)+1];</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> }</div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> }</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> </div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> <span class="keywordtype">void</span> fpt_finalize(<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>)</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> {</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> <span class="keywordtype">int</span> tau;</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span> <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> <a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a> *data;</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span> <span class="keywordtype">int</span> k_start_tilde;</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span> <span class="keywordtype">int</span> N_tilde;</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> <span class="keywordtype">int</span> firstl, lastl;</div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span> <span class="keywordtype">int</span> plength;</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> <span class="keyword">const</span> <span class="keywordtype">int</span> M = <span class="keyword">set</span>->M;</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> </div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> <span class="comment">/* TODO Clean up DPT transform data structures. */</span></div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> <span class="keywordflow">for</span> (m = 0; m < M; m++)</div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> {</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> <span class="comment">/* Check if precomputed. */</span></div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span> data = &<span class="keyword">set</span>->dpt[m];</div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> <span class="keywordflow">if</span> (data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a> != (<a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a>**)NULL)</div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> {</div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519" title="TODO Add comment here.">alphaN</a>);</div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d" title="TODO Add comment here.">betaN</a>);</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a" title="TODO Add comment here.">gammaN</a>);</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span> data-><a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519" title="TODO Add comment here.">alphaN</a> = NULL;</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span> data-><a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d" title="TODO Add comment here.">betaN</a> = NULL;</div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span> data-><a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a" title="TODO Add comment here.">gammaN</a> = NULL;</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> </div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span> <span class="comment">/* Free precomputed data. */</span></div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span> k_start_tilde = <a class="code" href="fpt_8c.html#a58f899926cc6e95ea54dd68d131979b8" title="Minimum degree at top of a cascade.">K_START_TILDE</a>(data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>,X(next_power_of_2)(data-><a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comme [...]
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> <span class="comment">/*set->N*/</span>);</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> N_tilde = N_TILDE(set->N);</div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> plength = 4;</div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span> <span class="keywordflow">for</span> (tau = 1; tau < <span class="keyword">set</span>->t; tau++)</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span> {</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> <span class="comment">/* Compute first l. */</span></div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span> firstl = <a class="code" href="fpt_8c.html#ac81f7eac1a01b06e91817857f47b9804" title="Index of first block of four functions at level.">FIRST_L</a>(k_start_tilde,plength);</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span> <span class="comment">/* Compute last l. */</span></div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span> lastl = <a class="code" href="fpt_8c.html#ac9f7e1529d635e3357d1e081ddf7e349" title="Index of last block of four functions at level.">LAST_L</a>(N_tilde,plength);</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> </div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> <span class="comment">/* For l = 0,...2^{t-tau-1}-1 compute the matrices U_{n,tau,l}. */</span></div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> <span class="keywordflow">for</span> (l = firstl; l <= lastl; l++)</div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> {</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> <span class="comment">/* Free components. */</span></div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a11[0]);</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a12[0]);</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a21[0]);</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0]);</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a11[0] = NULL;</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a12[0] = NULL;</div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a21[0] = NULL;</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>[0] = NULL;</div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> <span class="comment">/* Free components. */</span></div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a11);</div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a12);</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a21);</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>);</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>);</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a11 = NULL;</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a12 = NULL;</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].a21 = NULL;</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a> = NULL;</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau][l].<a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a> = NULL;</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> }</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> <span class="comment">/* Free pointers for current level. */</span></div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau]);</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>[tau] = NULL;</div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span> <span class="comment">/* Double length of polynomials. */</span></div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> plength = plength<<1;</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span> }</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span> <span class="comment">/* Free steps. */</span></div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>);</div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> data-><a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a> = NULL;</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span> }</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span> </div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span> <span class="keywordflow">if</span> (!(set->flags & FPT_NO_DIRECT_ALGORITHM))</div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span> {</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> <span class="comment">/* Check, if recurrence coefficients must be copied. */</span></div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span> <span class="comment">//fprintf(stderr,"\nfpt_finalize: %d\n",set->flags & FPT_PERSISTENT_DATA);</span></div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span> <span class="keywordflow">if</span> (!(set->flags & FPT_PERSISTENT_DATA))</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span> {</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a>);</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a>);</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO Add comment here.">_gamma</a>);</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span> }</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> data-><a class="code" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7" title="< TODO Add comment here.">_alpha</a> = NULL;</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> data-><a class="code" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb" title="TODO Add comment here.">_beta</a> = NULL;</div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span> data-><a class="code" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc" title="TODO Add comment here.">_gamma</a> = NULL;</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> }</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span> }</div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span> </div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span> <span class="comment">/* Delete array of DPT transform data. */</span></div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->dpt);</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span> <span class="keyword">set</span>->dpt = NULL;</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span> </div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span> <span class="keywordflow">for</span> (tau = 1; tau < <span class="keyword">set</span>->t+1; tau++)</div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> {</div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->xcvecs[tau-1]);</div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span> <span class="keyword">set</span>->xcvecs[tau-1] = NULL;</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span> }</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->xcvecs);</div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span> <span class="keyword">set</span>->xcvecs = NULL;</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span> </div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span> <span class="comment">/* Free auxilliary arrays. */</span></div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->work);</div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->result);</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span> </div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span> <span class="comment">/* Check if fast transform is activated. */</span></div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span> <span class="keywordflow">if</span> (!(set->flags & FPT_NO_FAST_ALGORITHM))</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span> {</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span> <span class="comment">/* Free auxilliary arrays. */</span></div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->vec3);</div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->vec4);</div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->z);</div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span> <span class="keyword">set</span>->work = NULL;</div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span> <span class="keyword">set</span>->result = NULL;</div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span> <span class="keyword">set</span>->vec3 = NULL;</div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span> <span class="keyword">set</span>->vec4 = NULL;</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span> <span class="keyword">set</span>->z = NULL;</div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span> </div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span> <span class="comment">/* Free FFTW plans. */</span></div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span> <span class="keywordflow">for</span>(tau = 0; tau < <span class="keyword">set</span>->t<span class="comment">/*-1*/</span>; tau++)</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span> {</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span> <span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span> fftw_destroy_plan(set->plans_dct3[tau]);</div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span> fftw_destroy_plan(set->plans_dct2[tau]);</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span> }</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span> <span class="keyword">set</span>->plans_dct3[tau] = NULL;</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span> <span class="keyword">set</span>->plans_dct2[tau] = NULL;</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span> }</div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span> </div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->plans_dct3);</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->plans_dct2);</div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span> <span class="keyword">set</span>->plans_dct3 = NULL;</div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span> <span class="keyword">set</span>->plans_dct2 = NULL;</div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span> }</div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span> </div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span> <span class="keywordflow">if</span> (!(set->flags & FPT_NO_DIRECT_ALGORITHM))</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span> {</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span> <span class="comment">/* Delete arrays of Chebyshev nodes. */</span></div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->xc_slow);</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span> <span class="keyword">set</span>->xc_slow = NULL;</div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(set->temp);</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span> <span class="keyword">set</span>->temp = NULL;</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span> }</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span> </div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span> <span class="comment">/* Free DPT set structure. */</span></div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(<span class="keyword">set</span>);</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/fpt_8h_source.html b/doc/api/html/fpt_8h_source.html
new file mode 100644
index 0000000..d200a63
--- /dev/null
+++ b/doc/api/html/fpt_8h_source.html
@@ -0,0 +1,123 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fpt.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_d47b87128a15c0ce57cf8f363265bec1.html">fpt</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fpt.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: fpt.h 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#ifndef _FPT_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span><span class="preprocessor">#define _FPT_H_</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step_</a></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keywordtype">bool</span> <a class="code" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf" title="Indicates if the values contained represent a fast or a slow stabilized step.">stable</a>; </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keywordtype">int</span> <a class="code" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b" title="TODO Add comment here.">Ns</a>; </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">int</span> <a class="code" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb" title="TODO Add comment here.">ts</a>; </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordtype">double</span> **a11,**a12,**a21,**<a class="code" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9" title="The matrix components.">a22</a>; </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">double</span> *<a class="code" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540" title=" ">g</a>; </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> } <a class="code" href="fpt_8c.html#a4c7f62127651d301d4604b3a6519458d" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a>;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data_</a></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <a class="code" href="structfpt__step__.html" title="Holds data for a single multiplication step in the cascade summation.">fpt_step</a> **<a class="code" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854" title="The cascade summation steps.">steps</a>; </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">int</span> <a class="code" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334" title="TODO Add comment here.">k_start</a>; </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519" title="TODO Add comment here.">alphaN</a>; </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d" title="TODO Add comment here.">betaN</a>; </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a" title="TODO Add comment here.">gammaN</a>; </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">double</span> <a class="code" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e" title="TODO Add comment here.">alpha_0</a>; </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">double</span> <a class="code" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa" title="TODO Add comment here.">beta_0</a>; </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">double</span> <a class="code" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a" title="TODO Add comment here.">gamma_m1</a>; </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment">/* Data for direct transform. */</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"><a class="code" href="structfpt__data__.html#ad56b765b9faabb4071e844e7d1355151"> 52</a></span> <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#ad56b765b9faabb4071e844e7d1355151" title="< TODO Add comment here.">alpha</a>; </div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="code" href="structfpt__data__.html#af28f490521ca26420df33a1f590363e3"> 53</a></span> <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#af28f490521ca26420df33a1f590363e3" title="TODO Add comment here.">beta</a>; </div>
+<div class="line"><a name="l00054"></a><span class="lineno"><a class="code" href="structfpt__data__.html#a13aaa57c27f3ab5eab4c28d47d501723"> 54</a></span> <span class="keywordtype">double</span> *<a class="code" href="structfpt__data__.html#a13aaa57c27f3ab5eab4c28d47d501723" title="TODO Add comment here.">gamma</a>; </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> } <a class="code" href="fpt_8c.html#a5141ba7ff5b14b5fbf7ee769943f1c10" title="Holds data for a single cascade summation.">fpt_data</a>;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set_s_</a></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> {</div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="structfpt__set__s__.html#a401070e7725566f06ae740e7e99a12a2"> 62</a></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structfpt__set__s__.html#a401070e7725566f06ae740e7e99a12a2" title="The flags.">flags</a>; </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">int</span> <a class="code" href="structfpt__set__s__.html#a2387122a1e670e2e61b1699458224804" title="The number of DPT transforms.">M</a>; </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">int</span> <a class="code" href="structfpt__set__s__.html#aa353a04683b31bed668ee490d5df1b81" title="The transform length.">N</a>; </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">int</span> <a class="code" href="structfpt__set__s__.html#a1d35166e05db58736e422850fe02edef" title="The exponent of N.">t</a>; </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <a class="code" href="structfpt__data__.html" title="Holds data for a single cascade summation.">fpt_data</a> *<a class="code" href="structfpt__set__s__.html#a0509dfa979aa395a80d8f38b2f5fb760" title="The DPT transform data.">dpt</a>; </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">double</span> **<a class="code" href="structfpt__set__s__.html#a58a8f2867286e0be19dd89e8d41c033b" title="Array of pointers to arrays containing the Chebyshev nodes.">xcvecs</a>; </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">double</span> *<a class="code" href="structfpt__set__s__.html#a226e29e0f97627e77ec4fcebd0c49fdf" title="Array for Chebychev-nodes.">xc</a>; </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">double</span> _Complex *temp; </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">double</span> _Complex *work; </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">double</span> _Complex *result; </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">double</span> _Complex *vec3;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">double</span> _Complex *vec4;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">double</span> _Complex *z;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> fftw_plan *<a class="code" href="structfpt__set__s__.html#a5f146823d105906abf0cdc4c5f9638dc" title="Transform plans for the fftw library.">plans_dct3</a>; </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> fftw_plan *<a class="code" href="structfpt__set__s__.html#aead22ae71c82ad37da07f6166bf53fbc" title="Transform plans for the fftw library.">plans_dct2</a>; </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> fftw_r2r_kind *<a class="code" href="structfpt__set__s__.html#a15eafd93be80eeea02173a9042e303d3" title="Transform kinds for fftw library.">kinds</a>; </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> fftw_r2r_kind *<a class="code" href="structfpt__set__s__.html#afd6508cc584ac06b9f679be441b6e7f6" title="Transform kinds for fftw library.">kindsr</a>; </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">int</span> *<a class="code" href="structfpt__set__s__.html#a26355113f8348c270cd02bc196fad681" title="Transform lengths for fftw library.">lengths</a>; </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment">/* Data for slow transforms. */</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">double</span> *xc_slow;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> } <a class="code" href="fpt_8c.html#a06f7c65536489b0602c70a616e9f1fe8" title="Holds data for a set of cascade summations.">fpt_set_s</a>;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor">#endif </span><span class="comment">/*_FPT_H_*/</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/ftv2blank.png b/doc/api/html/ftv2blank.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/doc/api/html/ftv2blank.png differ
diff --git a/doc/api/html/ftv2cl.png b/doc/api/html/ftv2cl.png
new file mode 100644
index 0000000..132f657
Binary files /dev/null and b/doc/api/html/ftv2cl.png differ
diff --git a/doc/api/html/ftv2doc.png b/doc/api/html/ftv2doc.png
new file mode 100644
index 0000000..17edabf
Binary files /dev/null and b/doc/api/html/ftv2doc.png differ
diff --git a/doc/api/html/ftv2folderclosed.png b/doc/api/html/ftv2folderclosed.png
new file mode 100644
index 0000000..bb8ab35
Binary files /dev/null and b/doc/api/html/ftv2folderclosed.png differ
diff --git a/doc/api/html/ftv2folderopen.png b/doc/api/html/ftv2folderopen.png
new file mode 100644
index 0000000..d6c7f67
Binary files /dev/null and b/doc/api/html/ftv2folderopen.png differ
diff --git a/doc/api/html/ftv2lastnode.png b/doc/api/html/ftv2lastnode.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/doc/api/html/ftv2lastnode.png differ
diff --git a/doc/api/html/ftv2link.png b/doc/api/html/ftv2link.png
new file mode 100644
index 0000000..17edabf
Binary files /dev/null and b/doc/api/html/ftv2link.png differ
diff --git a/doc/api/html/ftv2mlastnode.png b/doc/api/html/ftv2mlastnode.png
new file mode 100644
index 0000000..0b63f6d
Binary files /dev/null and b/doc/api/html/ftv2mlastnode.png differ
diff --git a/doc/api/html/ftv2mnode.png b/doc/api/html/ftv2mnode.png
new file mode 100644
index 0000000..0b63f6d
Binary files /dev/null and b/doc/api/html/ftv2mnode.png differ
diff --git a/doc/api/html/ftv2mo.png b/doc/api/html/ftv2mo.png
new file mode 100644
index 0000000..4bfb80f
Binary files /dev/null and b/doc/api/html/ftv2mo.png differ
diff --git a/doc/api/html/ftv2node.png b/doc/api/html/ftv2node.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/doc/api/html/ftv2node.png differ
diff --git a/doc/api/html/ftv2ns.png b/doc/api/html/ftv2ns.png
new file mode 100644
index 0000000..72e3d71
Binary files /dev/null and b/doc/api/html/ftv2ns.png differ
diff --git a/doc/api/html/ftv2plastnode.png b/doc/api/html/ftv2plastnode.png
new file mode 100644
index 0000000..c6ee22f
Binary files /dev/null and b/doc/api/html/ftv2plastnode.png differ
diff --git a/doc/api/html/ftv2pnode.png b/doc/api/html/ftv2pnode.png
new file mode 100644
index 0000000..c6ee22f
Binary files /dev/null and b/doc/api/html/ftv2pnode.png differ
diff --git a/doc/api/html/ftv2splitbar.png b/doc/api/html/ftv2splitbar.png
new file mode 100644
index 0000000..fe895f2
Binary files /dev/null and b/doc/api/html/ftv2splitbar.png differ
diff --git a/doc/api/html/ftv2vertline.png b/doc/api/html/ftv2vertline.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/doc/api/html/ftv2vertline.png differ
diff --git a/doc/api/html/functions.html b/doc/api/html/functions.html
new file mode 100644
index 0000000..7fd3bab
--- /dev/null
+++ b/doc/api/html/functions.html
@@ -0,0 +1,90 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index__"></a>- _ -</h3><ul>
+<li>_alpha
+: <a class="el" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7">fpt_data_</a>
+</li>
+<li>_beta
+: <a class="el" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb">fpt_data_</a>
+</li>
+<li>_gamma
+: <a class="el" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc">fpt_data_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x61.html b/doc/api/html/functions_0x61.html
new file mode 100644
index 0000000..1dd5a67
--- /dev/null
+++ b/doc/api/html/functions_0x61.html
@@ -0,0 +1,142 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li class="current"><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>a
+: <a class="el" href="structnnfftf__plan.html#ab0a39deb647f2a862caf5a6cfaf4939b">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a0a30183077239e2de76e5de626dc92e9">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a41260d5c377bdd918b4952b4730b6908">nnfftl_plan</a>
+</li>
+<li>a22
+: <a class="el" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9">fpt_step_</a>
+</li>
+<li>act_nfft_plan
+: <a class="el" href="structnsfftf__plan.html#a505021fefe68002ba73c78815166a73c">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a28eeabbe1dbef7ccf1c2b8c683a4b5dc">nsfftl_plan</a>
+</li>
+<li>Ad
+: <a class="el" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef">fastsum_plan_</a>
+</li>
+<li>Add
+: <a class="el" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc">fastsum_plan_</a>
+</li>
+<li>alpha
+: <a class="el" href="structfpt__data__.html#ad56b765b9faabb4071e844e7d1355151">fpt_data_</a>
+, <a class="el" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e">nfsft_wisdom</a>
+, <a class="el" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a">fgt_plan</a>
+, <a class="el" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087">fastsum_plan_</a>
+</li>
+<li>alpha_0
+: <a class="el" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e">fpt_data_</a>
+</li>
+<li>alpha_iter
+: <a class="el" href="structsolverf__plan__double.html#ae1d25f3ba1b23f7d5953991495c91ce3">solverf_plan_double</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a6e7a960d8661f6c459ebac7085e2587f">infct_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#ad149f66fa5dde187b3ef7860e593de01">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a7ea0b68ab2ccfe01df7a3747a5fed15a">solverl_plan_double</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#aad358c99ea10d70c4984bf9898820865">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a9abf5757d92159acfd73366a4c4df7be">infft_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#ae202e8af2161d1d64bb32e49fc16f5f0">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#ae6e228dc1df00e0b3de8873f0de12675">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#aef3f9b375d7e43fbcbea60380c5e9f34">infst_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a740c87ac77f68578613d58e569deedb2">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structsolverf__plan__complex.html#ac2ce57e2bfbc31f9262e5ce93562d899">solverf_plan_complex</a>
+</li>
+<li>alphaN
+: <a class="el" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519">fpt_data_</a>
+</li>
+<li>aN1
+: <a class="el" href="structnnfftf__plan.html#a405914d88ec36f1bf8438ebfed59f294">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#af262dc79891366e77bb15789aa24f2cd">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb">nnfft_plan</a>
+</li>
+<li>aN1_total
+: <a class="el" href="structnnfft__plan.html#acb1a1fa5fdb73d2187e9e9d8e4415921">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#aa791fcca6424d42640020e178e8319e7">nnfftl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a4bfc7abd18935616365f7925b2994e38">nnfftf_plan</a>
+</li>
+<li>aux
+: <a class="el" href="structnfsoftf__plan__.html#a5f7c39509a2403a9bc17824be7a3c3a9">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#ae669348fbbb187c8c521f6a89c8f3720">nfsoftl_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c">nfsoft_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x62.html b/doc/api/html/functions_0x62.html
new file mode 100644
index 0000000..650d74a
--- /dev/null
+++ b/doc/api/html/functions_0x62.html
@@ -0,0 +1,122 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li class="current"><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>b
+: <a class="el" href="structnfftf__plan.html#a3ede2fe9c94e00ec59150ba2971facb2">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a6eb955f63212f63c0ac26894f8355caf">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#a49927bec2aa96ab8596740011fabb914">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a8378f952b6e05cd58225877eee84f2e7">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#af1c2c2fe35f5b574a39109bb7b176270">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#adbd7faf4a853905d26899885e5ca3b38">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#aa91e909254c1beb83e2e971df50b96ca">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a80c548cbcc4defbac2b544602a5baa85">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a01287f3f68aff7e5d7ce35d3163021e2">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#ada085ec8f6099bfcaa7a193745689c9a">nnfftl_plan</a>
+, <a class="el" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4">fgt_plan</a>
+, <a class="el" href="structnfstf__plan.html#a2ca69cf1b6dea39e81cba93d0d1667d8">nfstf_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972">fastsum_plan_</a>
+</li>
+<li>beta
+: <a class="el" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255">nfsft_wisdom</a>
+, <a class="el" href="structfpt__data__.html#af28f490521ca26420df33a1f590363e3">fpt_data_</a>
+</li>
+<li>beta_0
+: <a class="el" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa">fpt_data_</a>
+</li>
+<li>beta_iter
+: <a class="el" href="structsolver__plan__complex.html#af13036b1a6f6edabe3fd862f77cf5000">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#aebfe38cf3b3ca344bbfbb7b1cf41eca8">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__double.html#a1c60e5fd15da3722f9b8213d1634c86a">solverl_plan_double</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a7714746a66fd3657bd247062c9c5cb24">infsft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a0aa7b8faeab03acb6011b673882282ea">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a444f54274b78ec9162683d2cc9cb3160">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#ac622efae9216d5d4335118084c7fcbfa">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structsolverf__plan__complex.html#abd007d004fedd5bb4b9eb919d8e928d8">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a4b53103abc562b5c603b4b656d1992fa">solverf_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#ab0f9266a50fc4a3acda9659b2c0920e3">solverl_plan_complex</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a3e6ea22841cd010652beb76f554bdf92">infct_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a09f8c30247659fc918d48521ba5ed5e8">infft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a7f3271035bca7b994475e565ab1ffb22">imri_inh_2d1d_adjoint_plan</a>
+</li>
+<li>betaN
+: <a class="el" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d">fpt_data_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x63.html b/doc/api/html/functions_0x63.html
new file mode 100644
index 0000000..b681f20
--- /dev/null
+++ b/doc/api/html/functions_0x63.html
@@ -0,0 +1,105 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li class="current"><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>c_phi_inv
+: <a class="el" href="structnfftf__plan.html#aa71f70b332bbb9868caad1db9f6cda02">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a38d2c1dec96ad6d632133bc1dcbf82cb">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#a2c42ae2c8ca95bb4c0c1dfc279bc2cab">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a7fdb409271e18f5dec1ac622af10d32a">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#aa217dda883fc3533b95bf6ab6ccff888">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a89b1d6ef566671d479eaaf4e50f666cb">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#ab9b9f0d173b9526d60c1ae8fbec1e1f7">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#a9073b3c76f70f8b9caedac7f5574ce89">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#afdcd5a1259a4fb7e7271efe30a207265">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2b69489da0118e06cba24db6d73ea934">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a9d59ca4338fe39f2e22f4e5d3155deba">nfstf_plan</a>
+</li>
+<li>center_nfft_plan
+: <a class="el" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e">nsfft_plan</a>
+, <a class="el" href="structnsfftf__plan.html#aa01b9e613b9847fa4cc6278fcb3ae660">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#af26a51757ddb28c4bcb37a0426e83fc1">nsfftl_plan</a>
+</li>
+<li>cheby
+: <a class="el" href="structnfsoftf__plan__.html#a73e75b0a9f8ceebffe6923c90c04c312">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#a681110b5c15effe7ef2781249e049119">nfsoftl_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x64.html b/doc/api/html/functions_0x64.html
new file mode 100644
index 0000000..caaa50b
--- /dev/null
+++ b/doc/api/html/functions_0x64.html
@@ -0,0 +1,212 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li class="current"><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>d
+: <a class="el" href="structnfftf__plan.html#a35ff58e4549b1c5292fd03cb215debac">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a1129b984a15339cca4fbbbc2190d43af">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8">nfst_plan</a>
+, <a class="el" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307">fastsum_plan_</a>
+, <a class="el" href="structnfstl__plan.html#a66ac609113d5f8debb056f3c62f6b14b">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#a998a428a06532646854e8add72c5ca63">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#ae6d3ce66c1d6d2fd0f507d83df91f549">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a4c139d72e93078b54f4240ecd7f6454f">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#aa42a9c638dec4cfa622f2e3f7e7c1dc3">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a14dac9d67ed25ff370516f66668a8ec6">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a161e392c8404d11f3237350b23e8c041">nsfftf_plan</a>
+, <a class="el" href="structnfstf__plan.html#aa792b04cd0fa4f09175773aaa48f6a69">nfstf_plan</a>
+, <a class="el" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aca82cd28238f0c1a5171eabd1d301f90">nsfftl_plan</a>
+</li>
+<li>deltax0
+: <a class="el" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b">taylor_plan</a>
+</li>
+<li>direct_plan
+: <a class="el" href="structnnfftf__plan.html#a15fe2e694c1b999008600c1f4a5dc2be">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#aa59e9ff1ad2fe1d90e077451831c6596">nnfftl_plan</a>
+</li>
+<li>dot_p_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#a3d2a5ea538a77dc4f2da9b53beab9c01">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a2bf2a21b09e47a883f9665b4ec38f3c2">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a0cced7bb2f3b85b75b765d796e2c741d">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a21f781633362300a145e71ea88febbae">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a4941cd9e60935f7e39a0c86a52202c02">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a2f43c87a598dff5b6e87960a07864148">solverl_plan_double</a>
+</li>
+<li>dot_p_iter
+: <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a00c75acfb362339a30d2809520fcd775">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#a65805c60e7d3a18d9a8952da80286032">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a108504616c4e19b53638a80710f9308c">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a2ddddb18e229f9d2d4b9eb11c36d0529">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a50526d4b81b2dd8cf90e82ad162af3c5">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a6dfb17d6feade963b31c16e6278aa6ee">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a3d20a53eb3c0158cc401d7b0d640da07">innfft_adjoint_plan</a>
+</li>
+<li>dot_r_hat_iter
+: <a class="el" href="structinfsft__adjoint__plan.html#a90e95de22380d88f23720ffca653edeb">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#af3de3b55c6ddf2e27ed9fbe7ef164b04">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#adfc3485017bb92e57c229dc7f81e438b">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a3dfbd628846af0683c8fc263f8cf6418">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#aad7bfd0f7561ec252b26b1d183622f12">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a52eec6bb5ee2ae209ed90d44739c8769">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#af456205ec418161fe20de523e423bb51">imri_inh_3d_adjoint_plan</a>
+</li>
+<li>dot_r_hat_iter_old
+: <a class="el" href="structinfsft__adjoint__plan.html#a228a2a746f7b7958efb3c4a4ef28e6ce">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a38e5e1e241a0a4a54e83266223725ab6">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a98056f05d5a45569899df80b040b9872">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#ae8dfd86274f0e3bba8c01730449d0474">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a0a0b243360667886af63d1ac26408f74">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a846d92d450d33e64996d28c2054e3181">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#acce4b5401db74c6e9896a78eccc9ca1e">imri_inh_3d_adjoint_plan</a>
+</li>
+<li>dot_r_iter
+: <a class="el" href="structsolverf__plan__complex.html#a1bb6290598f2f4f1452a2de2c27f54af">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#ae52e93514983b50204d70f660e720e04">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#aa2d90b37bc2a2ae2f9d0c90c9431abf1">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#ab12b510e093f8ccfaa4c1e51b6cd31c1">solverl_plan_double</a>
+</li>
+<li>dot_r_iter_old
+: <a class="el" href="structsolverf__plan__double.html#a2ee1d6b53c866d65aaa948afcbdd871e">solverf_plan_double</a>
+, <a class="el" href="structsolverl__plan__double.html#afa3e321968bd1773368cebe1339add7c">solverl_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#a861d76266b51f96c015ed6e33505978d">solverf_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#add3b6bc4149ba5371ef0b8bd91443e50">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a5d47ba554ae4d190384eaca6250f7312">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a6d564c417ab5b11a306e489df80f4e1e">solverl_plan_complex</a>
+</li>
+<li>dot_v_hat_iter
+: <a class="el" href="structinfst__adjoint__plan.html#ab4e8f85dfe25ba2b90f86d7d39362e5c">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a5d9a12eacf094e7f9e771add0a3874d5">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aed3f646cabd7b8ab1a480d7607ea45f3">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#ae251b00724c42f9c0f906e823c9e17f8">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a990b893dd142cbc3ade6436bdd603e59">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a1a005f3e97b207a1d42cbc8e2ad3a5e1">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#ac1b772ccfa72ce8e522298aeef3b1e1b">infct_adjoint_plan</a>
+</li>
+<li>dot_v_iter
+: <a class="el" href="structsolverf__plan__double.html#aaeae6a2f28ba0ded31baca1aa8c36431">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890">solver_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#a46f2243aac9e8e4689ab7f06914d3f97">solverf_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a849c4c1c131a333885e581fec5a2dac0">solverl_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a14f62c3118e3c1c7a92dd9bf8877250c">solverl_plan_complex</a>
+</li>
+<li>dot_z_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#adeec40c2b8450cd7486f8524c6dcc3d4">solverf_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__double.html#aefacac40db7773101ce75ba8247119b7">solverl_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#ae487ec619578f4f6d4876d7bc059f22a">solverl_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df">solver_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a845482517a34f22d7eb39bf1747e5dd6">solverf_plan_double</a>
+</li>
+<li>dot_z_hat_iter_old
+: <a class="el" href="structsolverf__plan__double.html#aa9672016211508805091ab645b489bbf">solverf_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#af4efa34efc92f873c771df52d423f39e">solverl_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a35f2567cc25bcfce28dbb48eba5e49c9">solver_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#a71e2482ed0eb34229fb166d6821d1a03">solverf_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#aa991891a7df826b77fac977581f9077c">solverl_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#aadb97426a0e35fd46a65557c56b055ee">solver_plan_complex</a>
+</li>
+<li>dot_z_iter
+: <a class="el" href="structinnfft__adjoint__plan.html#aae72bba8cc1a211c1b3931c969f95a85">innfft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a6cca862303d84903e408f5a2ea02aa9c">infft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a2309d1161fdf96711f3251e41a65eef0">infst_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#ad854541f2e09bc978461fff1c323b2a5">infsft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#af91db19db24ca1c648d97ea516367f94">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#ac3ca8cbbcd9958d69b15b4696e14a2e3">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#ab848ecc31c17b9cd639e9834ee56816d">infct_adjoint_plan</a>
+</li>
+<li>dot_z_iter_old
+: <a class="el" href="structimri__inh__3d__adjoint__plan.html#a794d80ffe20e25a4d69340d925d8624c">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#aa78f22f1c5c917f665b2f1af3e7df191">infft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a9bdd6b4dfcb1b22bd010444ef34b5903">infst_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#ad2417d37a566a0d26dea57f6f875ca12">infct_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a92ceaf9529a44c28fd3b6d9d63c0c13f">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a669c48fd77d0d04bf0adc4ebedbd699f">innfft_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a681a3587b2e42a24f03bac812eb7a60e">infsft_adjoint_plan</a>
+</li>
+<li>dpt
+: <a class="el" href="structfpt__set__s__.html#a0509dfa979aa395a80d8f38b2f5fb760">fpt_set_s_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x65.html b/doc/api/html/functions_0x65.html
new file mode 100644
index 0000000..4e96c1e
--- /dev/null
+++ b/doc/api/html/functions_0x65.html
@@ -0,0 +1,87 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li class="current"><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>eps_B
+: <a class="el" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46">fastsum_plan_</a>
+</li>
+<li>eps_I
+: <a class="el" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6">fastsum_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x66.html b/doc/api/html/functions_0x66.html
new file mode 100644
index 0000000..f4886ad
--- /dev/null
+++ b/doc/api/html/functions_0x66.html
@@ -0,0 +1,241 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li class="current"><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>f
+: <a class="el" href="structnfftf__mv__plan__complex.html#ab3a2f060f60eb88cd268bc1bec2e5310">nfftf_mv_plan_complex</a>
+, <a class="el" href="structnfftf__mv__plan__double.html#a0b25cac2771ce5e3048ddc1b708e9005">nfftf_mv_plan_double</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e">nfft_mv_plan_complex</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#ae6c4a0204a54f2a37a0acf2b3f5a0c0c">nfftl_mv_plan_double</a>
+, <a class="el" href="structnnfftf__plan.html#a458403c21a1083ede0d84a6d25c8cc8c">nnfftf_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#a62073b403c90aa2b527d5f62f190112e">nfsoftl_plan_</a>
+, <a class="el" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb">nnfft_plan</a>
+, <a class="el" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1">fgt_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a">fastsum_plan_</a>
+, <a class="el" href="structnfftl__plan.html#a53b53a1222f4acf29c778b933c9f130e">nfftl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a6aaa7904dbee73679d86060f1842a04e">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#aa2cda7d4bb129ad3dfd6b89682c28cd6">nsfftf_plan</a>
+, <a class="el" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e">nfft_mv_plan_double</a>
+, <a class="el" href="structnfctf__plan.html#a5c695490725fbd63787fb76548de2908">nfctf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#ada472d5a0fb2afc32b4d1683c98185f6">nsfftl_plan</a>
+, <a class="el" href="structnfct__plan.html#acca00284f93bd33c00a1b099a6eec8cd">nfct_plan</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#a3ab01f8b5f1b1368dbf3d7715ce46997">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#aa762bd3f11d1558e792ff34dc710bcb3">mrif_inh_3d_plan</a>
+, <a class="el" href="structnfftf__plan.html#a1c2e419705d6254801134bffe0695ae1">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5">nfft_plan</a>
+, <a class="el" href="structnfctl__plan.html#ae09e0a759e136ad020a97e6c76efbb30">nfctl_plan</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0">mri_inh_2d1d_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#a9e51f5f4ad46d4b120c452fc962a2385">mri_inh_3d_plan</a>
+, <a class="el" href="structnfstf__plan.html#a178dae9cc4b5869ef69fd148efe14f93">nfstf_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a3e2fef5b1bb862347511209994235597">mril_inh_2d1d_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#adb03497106fd0a995b70010f9cd9684b">mril_inh_3d_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#adb5c2e9ba052f02fec78e550413aacfa">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfst__plan.html#a314e2d828775d6aa93a26d7c40b7b931">nfst_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a7cfd191a4353a736bf9045c7e1d46f70">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df">nfsft_plan</a>
+, <a class="el" href="structnfstl__plan.html#ad4f7ff9f286c0203712d5f16b21e9e4e">nfstl_plan</a>
+, <a class="el" href="structnfsftl__plan.html#ad27b30233039fea75a9e1bc885324f3d">nfsftl_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a165dc6360c20f9eb19a55872cc29455a">nfsoftf_plan_</a>
+</li>
+<li>f_hat
+: <a class="el" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#ab9243951baccdf59de326cada1c08853">nfsftl_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#aa6990fedf1965a967f3f718dd373f543">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#ab280522456fe4f49ccb91d4aa195702d">nfsoftl_plan_</a>
+, <a class="el" href="structnfftf__mv__plan__complex.html#ad55a895ef394e9b74db36d028656b382">nfftf_mv_plan_complex</a>
+, <a class="el" href="structnfftf__mv__plan__double.html#a109229f89032f01e4b2bece93297189c">nfftf_mv_plan_double</a>
+, <a class="el" href="structnfftf__plan.html#aa967453b5ae5ba9e5b2056c884d2cda5">nfftf_plan</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52">nfft_mv_plan_complex</a>
+, <a class="el" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac">nfft_mv_plan_double</a>
+, <a class="el" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691">nfft_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#ae4b3786df2416012cf16d7ed4c097791">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#add804289931e55388070ee495c3e5072">nfftl_mv_plan_double</a>
+, <a class="el" href="structnfftl__plan.html#ad5cf4ad0369bdaf07f6acd801e6b9e5e">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a33bae90d163b1d848efc2c656bac6839">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#af289164b09e85f75e8ed0eb3ded40d9c">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#aede4fbbe9a7b666d5d5fbd62e62bf103">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#ab57019bf0a7274b5a6f401fe2f6bcf2b">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#aa0a56037700b7a3d428c77e353dc209e">nfstl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a068de2b177ffaad5b0091b0ecd2ca211">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a97bc689ffe1f4c8eb99ee43cf408c662">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a423d4a1555477e49a7cb3c26a4a5dfd1">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a93d9d361d56e03f44bc6a9d4265b9f43">nsfftl_plan</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#a18fb340e9ead654552e45033c81ac637">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#ac644cb0bbceb7ea8634ea94758da405d">mrif_inh_3d_plan</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf">mri_inh_2d1d_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50">mri_inh_3d_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a70247e89a002d0e7b5c66d1e87b33645">mril_inh_2d1d_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#ae1f94471fa54c0a172ede3345d0a9a9c">mril_inh_3d_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a840547e30414a41c3751e2b418f76312">nfsftf_plan</a>
+</li>
+<li>f_hat_intern
+: <a class="el" href="structnfsftf__plan.html#aa0a6fb494d6378f656c83f191cd4ed1d">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#ab3914490d1c4767c0127783cac5098e4">nfsftl_plan</a>
+</li>
+<li>f_hat_iter
+: <a class="el" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1">solver_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#abe0364fe67e48a336fca522a0cf6ee1b">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#aab9daf7841a5f6b3a059921713736e3c">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__complex.html#affba771210ad63dfce92bed9a629e19f">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a0c38937dd8ad6734e94e08a2cd700628">solverl_plan_double</a>
+</li>
+<li>f_iter
+: <a class="el" href="structinfsft__adjoint__plan.html#a9c5a261251ad90176392b2fafcd961de">infsft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#af72ea2aed94d3e789dd064776fdf2919">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a53b03057778ae78ee06efd6b135e23fb">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a74d132853f5b7e0a4b8e3918dae7fe8c">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#ae154ca7cd0d7ebc7e0db4b1f415b56fd">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#a4207ca1175efe7865d6631ae5a704632">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a0b408ac6ce2906dc57ff0c2ff9d3f0d0">infft_adjoint_plan</a>
+</li>
+<li>fftw_flags
+: <a class="el" href="structnfftf__plan.html#a880c04f5e9d485d84065b3c289cd5729">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#afd3bc700b6adca6d3dde831c9a7aae79">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#a407c06575335351e1b720b40f8b4f26c">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#afc96567eba0053563867b8e3a064902b">nfctl_plan</a>
+, <a class="el" href="structnfst__plan.html#a69d37e02b7a2868e3861c582e76e35d8">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a0ab6b3ec18b7e0685277d5f6997aa54c">nfstl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a9da018cd24e707e57ed0c8cac82f5301">nfstf_plan</a>
+, <a class="el" href="structnfftl__plan.html#a4e0df1f491a4aa8f7373d776d705095f">nfftl_plan</a>
+</li>
+<li>FFTW_MANGLE_DOUBLE()
+: <a class="el" href="structnfst__plan.html#abeeca1317cee53206b64c79f3de094c2">nfst_plan</a>
+, <a class="el" href="structnfft__plan.html#a02f777d558f0f4a3417000200472f1a9">nfft_plan</a>
+, <a class="el" href="structnsfft__plan.html#a937d2895eeeaa8aabb92359232498693">nsfft_plan</a>
+, <a class="el" href="structnfct__plan.html#af736d9e6e59e9a91276a48a50979fedb">nfct_plan</a>
+, <a class="el" href="structnfst__plan.html#ac3c18cc4dec9293352c508e9999ebf05">nfst_plan</a>
+, <a class="el" href="structnsfft__plan.html#a979134567e97bfffbc022b8267f98f6d">nsfft_plan</a>
+</li>
+<li>FFTW_MANGLE_FLOAT()
+: <a class="el" href="structnsfftf__plan.html#a5ceb97a548f5a438ad46a12133b1b5e8">nsfftf_plan</a>
+, <a class="el" href="structnfstf__plan.html#a013fbbcfb64ef4d8f0cc7345e584fa92">nfstf_plan</a>
+, <a class="el" href="structnfftf__plan.html#ae2ffec96887c5407fb31063a0139f678">nfftf_plan</a>
+, <a class="el" href="structnfctf__plan.html#a18d7721bf6d8ccbc5bb20e2dad30f9a3">nfctf_plan</a>
+, <a class="el" href="structnfstf__plan.html#ad4f44281f0c352fc630442cb40597983">nfstf_plan</a>
+, <a class="el" href="structnsfftf__plan.html#ac0a9dbecfd535a1c7b2c0cfec5b79925">nsfftf_plan</a>
+, <a class="el" href="structnfctf__plan.html#a3aef4c36c692ab0ac6e9ab69b32ac761">nfctf_plan</a>
+</li>
+<li>FFTW_MANGLE_LONG_DOUBLE()
+: <a class="el" href="structnfftl__plan.html#ab17581f82946cc39584acd6b059b7809">nfftl_plan</a>
+, <a class="el" href="structnfstl__plan.html#a6285132e89913685bc2f7366fd79e769">nfstl_plan</a>
+, <a class="el" href="structnfftl__plan.html#a2e9e81a72c786bd7ed4eef099a5f8a5e">nfftl_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aa7137e627728ebee120141e78066da51">nsfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#ad0a55579cc5f04b0af4cc28abd445083">nfctl_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a9a426f13a97f82a480413cba913b7f2b">nsfftl_plan</a>
+, <a class="el" href="structnfstl__plan.html#a2c07f20560a3969129916e3d30239227">nfstl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a59134c76d93ffd73a6fc738babf5d443">nfctl_plan</a>
+</li>
+<li>flags
+: <a class="el" href="structnfsftl__plan.html#a15d53809b4f86c20e7fd99ea1b71efcb">nfsftl_plan</a>
+, <a class="el" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4">solver_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942">solver_plan_complex</a>
+, <a class="el" href="structnfsftf__plan.html#a67898ed2ead6812358feeace004b14fe">nfsftf_plan</a>
+, <a class="el" href="structsolverf__plan__double.html#a28ce886cb705632f8f866bfb5880795b">solverf_plan_double</a>
+, <a class="el" href="structnsfftf__plan.html#acd78e2fcc4a9c29700887aee1517214c">nsfftf_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#a2f236235168535b9f9833bcc7e50e695">nfsoftl_plan_</a>
+, <a class="el" href="structsolverl__plan__double.html#aa95251443f265effb6093d63b6536431">solverl_plan_double</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#aadd41183d54818f3e8528affe40769bc">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#adea4e1650ddadc3f0f7c1d833b6b7789">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structsolverf__plan__complex.html#a2d7642432b4b627a4bf77d1c05216669">solverf_plan_complex</a>
+, <a class="el" href="structinfct__adjoint__plan.html#ad913ef9fc7d9bb8ca4f91f1abbf99949">infct_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a0d51c3ece7512b04408b5a2b94ee4a05">innfft_adjoint_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftf__plan__.html#a55301d3525d6457aebd0237871dee668">nfsoftf_plan_</a>
+, <a class="el" href="structsolverl__plan__complex.html#abd86575c07d53042297da1c54ebc9e1a">solverl_plan_complex</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a6795cda9e0d83c5b5c7935b75d10dc1a">infsft_adjoint_plan</a>
+, <a class="el" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694">nfsft_plan</a>
+, <a class="el" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa">fastsum_plan_</a>
+, <a class="el" href="structfpt__set__s__.html#a401070e7725566f06ae740e7e99a12a2">fpt_set_s_</a>
+, <a class="el" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281">nsfft_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a8771c95bc65a49fe974389825f005ec9">infst_adjoint_plan</a>
+, <a class="el" href="structfpt__set__s__.html#ab2272294463f288c3aaa4513bfeac758">fpt_set_s_</a>
+, <a class="el" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869">fgt_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a83f3fc443fbf5c40336a46a8c1bdfaf8">infft_adjoint_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a5c4750f9d7a5f0dbc4d51d06d6be08d3">nsfftl_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x67.html b/doc/api/html/functions_0x67.html
new file mode 100644
index 0000000..570a841
--- /dev/null
+++ b/doc/api/html/functions_0x67.html
@@ -0,0 +1,124 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li class="current"><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>g
+: <a class="el" href="structnfftf__plan.html#a35e6b39bfe06e5a6e56cde2458cf79a7">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539">nfft_plan</a>
+, <a class="el" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540">fpt_step_</a>
+, <a class="el" href="structnfftl__plan.html#aa442607f39ed01885dbeb286b18b1b77">nfftl_plan</a>
+</li>
+<li>g1
+: <a class="el" href="structnfctf__plan.html#a44a225766135ec7d1bbe8e8e7631faa3">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#a597e9fd4dddb36748c5e33ee1f058835">nfct_plan</a>
+, <a class="el" href="structnfftf__plan.html#a01420d5d785228ee24a4819d2b0454a2">nfftf_plan</a>
+, <a class="el" href="structnfctl__plan.html#afbe6522294161b247058e61e9ef64d78">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a279687997f16d0fb839928f472307b39">nfstf_plan</a>
+, <a class="el" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda">nfft_plan</a>
+, <a class="el" href="structnfst__plan.html#a06cd5d11b13d590c9ab3a88d93b21fb2">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#ac54e606a9b0c7c6b526fb3d44d28482a">nfstl_plan</a>
+, <a class="el" href="structnfftl__plan.html#a71a99cd893a823d1a7edb139650b2afe">nfftl_plan</a>
+</li>
+<li>g2
+: <a class="el" href="structnfftl__plan.html#aea25feca0bccefe267c0a9eb75390ed6">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a4a70d593fb1704dda85e2392c77ea3bc">nfctf_plan</a>
+, <a class="el" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78">nfft_plan</a>
+, <a class="el" href="structnfct__plan.html#ac4c375e593da728a4e7477f76ff12031">nfct_plan</a>
+, <a class="el" href="structnfstf__plan.html#a11f05420be226a83aed2e8c41a1b9bd3">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a7b67e2cf657227ae46d13fa239d534f7">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a0e91b301bcd4ce83aecdda2b0f7712ed">nfstl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a365bf7b6d6fa04bfb4206f8ec647eb14">nfctl_plan</a>
+, <a class="el" href="structnfftf__plan.html#a4fda15d8d9edaa8de0636b2a458bf763">nfftf_plan</a>
+</li>
+<li>g_hat
+: <a class="el" href="structnfftf__plan.html#aad01cb28079405090eaa1fce590c0c09">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#af708c1c479196fb4e3ded3d289085b5e">nfftl_plan</a>
+</li>
+<li>gamma
+: <a class="el" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2">nfsft_wisdom</a>
+, <a class="el" href="structfpt__data__.html#a13aaa57c27f3ab5eab4c28d47d501723">fpt_data_</a>
+</li>
+<li>gamma_m1
+: <a class="el" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a">fpt_data_</a>
+</li>
+<li>gammaN
+: <a class="el" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a">fpt_data_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x69.html b/doc/api/html/functions_0x69.html
new file mode 100644
index 0000000..8be316f
--- /dev/null
+++ b/doc/api/html/functions_0x69.html
@@ -0,0 +1,102 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li class="current"><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>idx0
+: <a class="el" href="structtaylor__plan.html#a3d3e69bc61775fee556801bd66a47c19">taylor_plan</a>
+</li>
+<li>index_sparse_to_full
+: <a class="el" href="structnsfftf__plan.html#a3e6968100cf6a0d5950ccdcb1744788f">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aaaf6f8d00374e91ec3baf983583b51bd">nsfftl_plan</a>
+, <a class="el" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55">nsfft_plan</a>
+</li>
+<li>index_x
+: <a class="el" href="structnfftf__plan.html#a1dadaac164fe9f9be856d47a53498335">nfftf_plan</a>
+, <a class="el" href="structnfftl__plan.html#ad98e162c23583ec8f010aacf9ec06767">nfftl_plan</a>
+, <a class="el" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735">nfft_plan</a>
+</li>
+<li>initialized
+: <a class="el" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740">nfsft_wisdom</a>
+</li>
+<li>internal_fpt_set
+: <a class="el" href="structnfsoftl__plan__.html#a8cf750d58de22209962bd9cb96f48864">nfsoftl_plan_</a>
+, <a class="el" href="structnfsoftf__plan__.html#a686809f1397b113322b77ef50c8c0ef7">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#a39a07d81bf6117dca5530d76beaf6b31">nfsoft_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x6a.html b/doc/api/html/functions_0x6a.html
new file mode 100644
index 0000000..ce37b94
--- /dev/null
+++ b/doc/api/html/functions_0x6a.html
@@ -0,0 +1,86 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li class="current"><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_j"></a>- j -</h3><ul>
+<li>J
+: <a class="el" href="structnsfftf__plan.html#a24e51336c8b6f1814932e2bad306179b">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a6e3abb9e765b8f40b0f398a85c07d8af">nsfftl_plan</a>
+, <a class="el" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52">nsfft_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x6b.html b/doc/api/html/functions_0x6b.html
new file mode 100644
index 0000000..52c0651
--- /dev/null
+++ b/doc/api/html/functions_0x6b.html
@@ -0,0 +1,104 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li class="current"><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>k
+: <a class="el" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8">fastsum_plan_</a>
+</li>
+<li>K
+: <a class="el" href="structnfftf__plan.html#aad0836b3e8e4a98b27729d960b593caa">nfftf_plan</a>
+, <a class="el" href="structnfftl__plan.html#ae6f8a76f202fe1816cfe1004a9ce9a0d">nfftl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a9d2bd4132187064cf5f6c301f7ce5125">nnfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4">nfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a574648230ce316a55282f362774aa615">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#a4ee39bebbff40746c2701ade2e13f1f8">nnfft_plan</a>
+</li>
+<li>k_start
+: <a class="el" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334">fpt_data_</a>
+</li>
+<li>kernel_param
+: <a class="el" href="structfastsum__plan__.html#a37cbe7b34fce3f90419fb45ab74aaa34">fastsum_plan_</a>
+</li>
+<li>kinds
+: <a class="el" href="structfpt__set__s__.html#a15eafd93be80eeea02173a9042e303d3">fpt_set_s_</a>
+</li>
+<li>kindsr
+: <a class="el" href="structfpt__set__s__.html#afd6508cc584ac06b9f679be441b6e7f6">fpt_set_s_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x6c.html b/doc/api/html/functions_0x6c.html
new file mode 100644
index 0000000..b3d245b
--- /dev/null
+++ b/doc/api/html/functions_0x6c.html
@@ -0,0 +1,84 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li class="current"><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>lengths
+: <a class="el" href="structfpt__set__s__.html#a26355113f8348c270cd02bc196fad681">fpt_set_s_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x6d.html b/doc/api/html/functions_0x6d.html
new file mode 100644
index 0000000..ac5a3f6
--- /dev/null
+++ b/doc/api/html/functions_0x6d.html
@@ -0,0 +1,245 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li class="current"><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>m
+: <a class="el" href="structnfftf__plan.html#a9002bd9a063311155ae2a8c94c076e9d">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a255a1e1526bba8643690e0aa9c5b90c6">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#ac3aacf128a897c132809411ef9d41d7d">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a55a5e4a962d8e01d7c0282f916bacb8c">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#a15e9f66b0447148fcce4af9eafa2f9ed">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#af7f40661f8b29323b5b0f1ad5a7290a4">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#ac4741304d0030c88a8244dd1d8171b65">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a0a2a679bf0d1c90511a52c31f5a537f1">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a2082f917534e3a8590d5a19b4377a256">nnfftl_plan</a>
+</li>
+<li>M
+: <a class="el" href="structfpt__set__s__.html#a2387122a1e670e2e61b1699458224804">fpt_set_s_</a>
+</li>
+<li>m
+: <a class="el" href="structnfstf__plan.html#a6d228a85b702490f205c8983c15e33fe">nfstf_plan</a>
+</li>
+<li>M
+: <a class="el" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa">fgt_plan</a>
+</li>
+<li>M_total
+: <a class="el" href="structnfftf__mv__plan__double.html#a37eb6ac713dbf1205f2dce0fa39107df">nfftf_mv_plan_double</a>
+, <a class="el" href="structnnfftl__plan.html#a74e7fb29427e5a4d9b383ab278f513a2">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a6a75a26e5d6476595bde5b03d6293a0a">nsfftf_plan</a>
+, <a class="el" href="structnfftf__plan.html#a3823921949eded81bde776f57eba8052">nfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#af95027b3922c48e54dc5e5417d3a45e8">nsfftl_plan</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#a2cb2df3ae5db867f38cb75b7c88de7fe">nfft_mv_plan_complex</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#ac9fffb187c8a840eb83939ba4d710f13">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#a03c2aa160944a42e0f3116e7545ed20f">mrif_inh_3d_plan</a>
+, <a class="el" href="structnfft__mv__plan__double.html#af540ad90ef6b30fab022c95e8a5dcd58">nfft_mv_plan_double</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09">mri_inh_2d1d_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b">mri_inh_3d_plan</a>
+, <a class="el" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6">nfft_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a241e8def5a65484080b01871c12851b3">mril_inh_2d1d_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#a9a1093b920fb4468b59c7120a7e1ceb5">mril_inh_3d_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#aa0175f63a2b2f5c80bb3153008315871">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfsftf__plan.html#a5df19929f38064f36893840388ef975e">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed">nfsft_plan</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#ac7366d2d09a0b3aed5884b50d10ef478">nfftl_mv_plan_double</a>
+, <a class="el" href="structnfsftl__plan.html#aa1b43495afe03e88e419961428769246">nfsftl_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a6fc89775998b5353b0f674b75b3638ae">nfsoftf_plan_</a>
+, <a class="el" href="structnfftl__plan.html#a95e2db75883c6586f31b8db8c8bf8cf8">nfftl_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#a33cddd8977c92ba6641a1c4a18318fd6">nfsoftl_plan_</a>
+, <a class="el" href="structnfctf__plan.html#a86276f6249784d5121d83453818709e9">nfctf_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f">fastsum_plan_</a>
+, <a class="el" href="structnfct__plan.html#ab201c4e89753b167954e7cb5f34a321d">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#ac4ad3000c4c3293f3d86b90a926410a9">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a936082c69e582e36fb51ae452cd08fc3">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#ae4d5aeae7ea312bf70720bafd4fb3882">nfstl_plan</a>
+, <a class="el" href="structnfftf__mv__plan__complex.html#ab437c32f06548b3728bcb2b39681acd8">nfftf_mv_plan_complex</a>
+, <a class="el" href="structnnfftf__plan.html#a6908aa62ea014b3b60e047a99f6adb2b">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c">nnfft_plan</a>
+</li>
+<li>MEASURE_TIME_t
+: <a class="el" href="structnfftf__plan.html#afb81143dbd42553ed90440afc406c909">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#ae8cf45feec672cd7e6f42a1b6a091a5c">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a3621b32cd8ea93b2bcb8db6ce40cd5bb">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#acd69baad39feaa27f34c063960b173f0">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2c6b9d81be06f2e557c410310420809f">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a369d8545639fccbf73f9daf7dcb94fe8">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a74e5be807909e0a443ea9b48e0a7da4b">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a47c6a3aba310b4f18d7ba5a7107fc168">nfstl_plan</a>
+, <a class="el" href="structnfsftf__plan.html#af36dbcf3d4f12bb85ac6c167aabf8768">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#ae2870ad5b902cb4724c2ab47e5e012e1">nfsftl_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d">fastsum_plan_</a>
+</li>
+<li>mv
+: <a class="el" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a3da97d0d8d896d9da6a95a68a6f65442">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a56e946ecb94fc633a9d518d347725c4c">solverl_plan_double</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a791fe047a3b45cce8049e83d422b8414">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a320424336d0f74f0d24cc67053dea7ca">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a65d97330deb4cd9de78e4b9aa85afa62">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a02395790ff1d9e7ffc2e3fae3b927df0">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#abb0996d6ed2cd627dc28fb7f5c18007a">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a18f9b22f7f221aedc3dabab2cb07e633">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#afa903e9a436fc17da89b08377a6a733e">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structsolverf__plan__complex.html#a519286afbd99d020738a92e03c320a18">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#aaa4fedc5005e075e7f707770384be114">solverf_plan_double</a>
+</li>
+<li>mv1
+: <a class="el" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766">fastsum_plan_</a>
+</li>
+<li>mv2
+: <a class="el" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78">fastsum_plan_</a>
+</li>
+<li>mv_adjoint
+: <a class="el" href="structnfsftl__plan.html#a162601fc8aa3248af806908e160d3c14">nfsftl_plan</a>
+, <a class="el" href="structnfftf__plan.html#a9f8b111e42ef7ba609879d4a6983695d">nfftf_plan</a>
+, <a class="el" href="structnfftf__mv__plan__complex.html#acbff2532fc4d66cf92321be33ef6498f">nfftf_mv_plan_complex</a>
+, <a class="el" href="structnfftf__mv__plan__double.html#a3d0e47cf55f04c89523abd46f361ef91">nfftf_mv_plan_double</a>
+, <a class="el" href="structnfsoftf__plan__.html#a858269faf194eca2137b65f2a5a8c0fb">nfsoftf_plan_</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#add14030aae4920f7ca71ecf1efde00a3">nfft_mv_plan_complex</a>
+, <a class="el" href="structnfft__mv__plan__double.html#a92e4080bcb7241befa250be9d8f9a1cd">nfft_mv_plan_double</a>
+, <a class="el" href="structnfft__plan.html#abbe724645c96ef34c3e98d821f6648a3">nfft_plan</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#a804a64f2fb25ad91487fbcc186d784e0">nfftl_mv_plan_double</a>
+, <a class="el" href="structnfftl__plan.html#a3d343b79e00dbb8cd4984143a03ddf53">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a876dda7208fd0634f426c1e5cb04b77f">nfctf_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#a33d5fb830b3021ddb85320139be034b8">nfsoft_plan_</a>
+, <a class="el" href="structnfctl__plan.html#a99191484b327c3283f3aed8c3e9a3d70">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a604a83ef64c291c6f8b23d45f620f2c7">nfstf_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#a2d189c2b7f8b5bf635cce01354ef253e">mril_inh_3d_plan</a>
+, <a class="el" href="structnfst__plan.html#aedfe6da9afb5dc0457cc4f2197034fc0">nfst_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a6259dd5746b911632df1286d0654eabe">mril_inh_2d1d_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#a2f7123e0975b4a7cd693d01abf117949">nfsoftl_plan_</a>
+, <a class="el" href="structnnfftf__plan.html#adcff4592ce1838e342b92633e9f8de42">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#aa6098f51f9c69196ca782a1b0f8feeba">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a8b4c8c903e7b24610e2d2e0c9bb62705">nsfftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#a14cc99f56f6a61958aef26f80aac6f12">nfsft_plan</a>
+, <a class="el" href="structnsfft__plan.html#a9761ac166f3ec93197e8e409ba78fb4f">nsfft_plan</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#aea23a3331d423e70f2cbbeee71303906">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#afe427225384a2d226c3cb85cf9aa4042">mri_inh_2d1d_plan</a>
+, <a class="el" href="structnfstl__plan.html#a1eca782b8267b78a6effc382c0a5b9f4">nfstl_plan</a>
+, <a class="el" href="structnfsftf__plan.html#af4deec395e0a4650b1e108677b787900">nfsftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a0afd6961b8b0b24b526e034d89874c7c">nnfft_plan</a>
+, <a class="el" href="structnfct__plan.html#aab8ee071a4e254cbf94a03689ed3127f">nfct_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a658b4a71ff29aa1cc2febc66d6c175bd">nsfftl_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#afa2e143e704b701e9a0ee1d795f46b5b">mri_inh_3d_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#a5f31b4b9a03ac8f9a503c1ae42cad758">nfftl_mv_plan_complex</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#ac765b0a8797a3fd31b58133be9ff280b">mrif_inh_3d_plan</a>
+</li>
+<li>mv_trafo
+: <a class="el" href="structnfftl__plan.html#a0f05caab33b6f473626e74f44356e3fc">nfftl_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a417f0b7f48ab77d5af34ed1da9ba95c9">nfsftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#ac2beab555e72c8f10921db21dc094069">nnfft_plan</a>
+, <a class="el" href="structnfstl__plan.html#adbe7e6be1061160223c10b6567efda40">nfstl_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#a4d573c341aae7a4e034944772478658c">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfsft__plan.html#a01bf30c31f886ffa9d486c010a452051">nfsft_plan</a>
+, <a class="el" href="structnfft__mv__plan__double.html#a920771039e5cf889d6a29a243e6922e3">nfft_mv_plan_double</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#a4cad33b38f4d5bc54b8d25d90913ab44">mri_inh_2d1d_plan</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#acdbe3a414d9c87baba03db3d873b864c">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structnfftf__mv__plan__double.html#a130252f4a197b65416311097880cff4f">nfftf_mv_plan_double</a>
+, <a class="el" href="structmri__inh__3d__plan.html#a780818802d5bfdc4d4174a3637254fd5">mri_inh_3d_plan</a>
+, <a class="el" href="structnfftf__mv__plan__complex.html#a48e28caf604132d02999d1dc0f5dc9a0">nfftf_mv_plan_complex</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#a4763b4f8f1b5f574d601289ab3cbcfa8">mrif_inh_3d_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aad46757ac44a32dbb04d0e453454acac">nsfftl_plan</a>
+, <a class="el" href="structnfft__plan.html#a9ebd66f2964cca6a02fc50d640df3557">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a7a532e28539e1ac2f49413248ae76a67">nfctf_plan</a>
+, <a class="el" href="structnnfftf__plan.html#aea4c2210478af70a540da01e0c0a1c7b">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a39b1bdd9a3eacd4ff3b809eeef01f364">nnfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a42f0c32b080677a57f82ccf23d018da2">nfctl_plan</a>
+, <a class="el" href="structnfst__plan.html#a4a3b2ecc26204b3087d1c19b7857943f">nfst_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#ae7c72bdbce93cb99dcbd14d764d08502">nfsoft_plan_</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#aff66252bd97fa6d73d7e137d888bb625">nfftl_mv_plan_double</a>
+, <a class="el" href="structnfsftl__plan.html#ab1a7dae6c0f2b18d4eda2e32195bba95">nfsftl_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a7dbc7cd7b733b5850a59f35aa0f959d1">mril_inh_2d1d_plan</a>
+, <a class="el" href="structnfftf__plan.html#ab09b1d93f60895791076e1e41241ecb0">nfftf_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a0291622a1f08aff56cc126ca64364d85">nfsoftf_plan_</a>
+, <a class="el" href="structnsfft__plan.html#abbab5fc009e68a329bbebee4904e53a5">nsfft_plan</a>
+, <a class="el" href="structnfct__plan.html#a5f9802e95bfc2ae69f22e91c1fe47778">nfct_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#aeab94862046b7688470f3f1d78ca927d">nfsoftl_plan_</a>
+, <a class="el" href="structnsfftf__plan.html#ac698248a376958d67a10beecfdc3aa36">nsfftf_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#a61eec020c68a2b36cff4acb6dd4dcf96">mril_inh_3d_plan</a>
+, <a class="el" href="structnfstf__plan.html#aa960f82c35501acf5237b5ed49f7fe57">nfstf_plan</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#a56bf298c03c4aaeb6b4aaf7ed5cca57e">nfft_mv_plan_complex</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x6e.html b/doc/api/html/functions_0x6e.html
new file mode 100644
index 0000000..4fb4754
--- /dev/null
+++ b/doc/api/html/functions_0x6e.html
@@ -0,0 +1,228 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li class="current"><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>N
+: <a class="el" href="structnfftf__plan.html#a27caa84ad525683d89b5963defadc98d">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#ade6a750c99253ddfe82c08e439094507">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b">nfst_plan</a>
+, <a class="el" href="structfpt__set__s__.html#aa353a04683b31bed668ee490d5df1b81">fpt_set_s_</a>
+, <a class="el" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87">fgt_plan</a>
+, <a class="el" href="structnfstl__plan.html#a83b7013eb7ce3b1743ba45a2546a36c0">nfstl_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfftf__plan.html#a6971ea46e4044daa773f19c8bd8d4a0b">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae">nfft_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfct__plan.html#ad4d0600d8b0ee9d41bff22a7d63e64cf">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#aefd2c40e607f75679bb61926881d4488">nnfftf_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfftl__plan.html#a58140f5f6ea4ca1c0305cbcec55437bd">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a9c8ffbb61c7f5ad5d0a5545bdff83270">nfctf_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7">nnfft_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfct__plan.html#a0ad3d47d659b3641bb90eca6e56f9047">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a6d0bd4de4d2b90c38010bb4b8d77561b">nfctl_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfftl__plan.html#a36e045f670b95d68f5c2e04b55a1c220">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a4497138b087187f70d19f107b1c80204">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a7fb433be8689db7816a3667620a294f3">nnfftl_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfstf__plan.html#ade7cdc871c9633a324774001bd809f49">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2">nfst_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfsftf__plan.html#a09b711da345edffb8a71b5b8a8bca6d0">nfsftf_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfstl__plan.html#a10456ed98cb22787f2469e1d20903c8c">nfstl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#ae849996a09be847a35be6c1ea018d988">nnfftf_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfstf__plan.html#a3c13e4fbc7dba10012ac853e2cde12d0">nfstf_plan</a>
+, <a class="el" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403">nfsft_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnnfft__plan.html#a6b2de2633dd4347692e96887f98c1020">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#ad8d9bc5c5ae9f1ee6c813839ff831d97">nnfftl_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfsftl__plan.html#a8740f26f76947fcc07a636002217a8db">nfsftl_plan</a>
+</li>
+<li>n
+: <a class="el" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1">fgt_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084">fastsum_plan_</a>
+</li>
+<li>N1
+: <a class="el" href="structnnfftf__plan.html#a9f6a5274cee5803505df5ad65d4c12fd">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a693c5d648b1781dce21d24636aac6554">nnfftl_plan</a>
+</li>
+<li>N_MAX
+: <a class="el" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51">nfsft_wisdom</a>
+</li>
+<li>N_total
+: <a class="el" href="structnnfftl__plan.html#a0e0827be03d503291f4a6d76c7b690d7">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2">nnfft_plan</a>
+, <a class="el" href="structnnfftf__plan.html#afd4cb1ff03f227c4e9e1dd9da21ec34e">nnfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505">nsfft_plan</a>
+, <a class="el" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#a090c82bf91f18bc68a389c06fb347cec">nfsftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#ac31afd2bc4a0fc94cd9ec08e302f84ac">nfctl_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#aa3a702dbaed1e34d090e23b75c9949d6">nfsoftf_plan_</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#afad39dcd7d77c81247bcf5e4abc1cdaa">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#a397e113cdbedc1e964657131c9a9dea3">nfsoftl_plan_</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#a63a371e62727c804a195cf2315b79a41">nfftl_mv_plan_double</a>
+</li>
+<li>n_total
+: <a class="el" href="structnfftf__plan.html#a79aefed96e856d86d0fb74f873ae09ba">nfftf_plan</a>
+</li>
+<li>N_total
+: <a class="el" href="structnfftf__mv__plan__complex.html#a65ce9742c15bad2711e8f8151bbf941c">nfftf_mv_plan_complex</a>
+</li>
+<li>n_total
+: <a class="el" href="structnfftl__plan.html#a58ea89cc9b78b32c8c1775e8b1277ad8">nfftl_plan</a>
+</li>
+<li>N_total
+: <a class="el" href="structnfftf__mv__plan__double.html#a1df474111c1d61261d53455e05bc6c63">nfftf_mv_plan_double</a>
+, <a class="el" href="structnfftf__plan.html#a65855ec1dec6f17eb46d6762ad6ff942">nfftf_plan</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8">nfft_mv_plan_complex</a>
+, <a class="el" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41">nfft_mv_plan_double</a>
+, <a class="el" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22">nfft_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#a469c0077659dda97651e075da143a398">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfftl__plan.html#a747b6aee3ae47ad66391027bc13789af">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a618b4315972d4ef612c772649d470ff9">nfctf_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a4114df78a52f5e4a1a12a13678a9cb6c">mril_inh_2d1d_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#a79e477483b67862d2dd7fcb5432f7651">mril_inh_3d_plan</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#a7d51e6be67c5f2bc4d1a996e10228258">mrif_inh_3d_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aa0e8f48c39f40e781da203659ec018ab">nsfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#afe49ebe4fbbb3bd90b12e939c06adfab">nsfftf_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976">fastsum_plan_</a>
+, <a class="el" href="structnfstl__plan.html#a87f57bdfd9ba4415370ec796329cc1de">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#abc66ae61c54a049868c62288623d4a6b">nfct_plan</a>
+, <a class="el" href="structnfstf__plan.html#aea7fa284fa9aaa4e264c9c07844b5442">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed">nfst_plan</a>
+</li>
+<li>n_total
+: <a class="el" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7">nfft_plan</a>
+</li>
+<li>N_total
+: <a class="el" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e">nfsoft_plan_</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b">mri_inh_2d1d_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a90ee6582e535312ac761e4e6fbaad0c0">nfsftf_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb86d92e12">mri_inh_3d_plan</a>
+</li>
+<li>nfct_flags
+: <a class="el" href="structnfctl__plan.html#a292db653f04805f907737a480f681888">nfctl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a484df328b87ae06b6c47b03298e18dbd">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#ae2a2e493b2938fe9b22b0506765f30cf">nfct_plan</a>
+</li>
+<li>nfft_flags
+: <a class="el" href="structnfftl__plan.html#a375f14a65c5686803270dbb3cfd1c371">nfftl_plan</a>
+, <a class="el" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d">nfft_plan</a>
+, <a class="el" href="structnfftf__plan.html#adaaa66e5b89d9f65ce94b56617574518">nfftf_plan</a>
+</li>
+<li>nfst_flags
+: <a class="el" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a15bb194b8a4fe39aca1b5be9f38d7175">nfstl_plan</a>
+, <a class="el" href="structnfstf__plan.html#aa23ef32254d98b76dfadbe7fa439f8c3">nfstf_plan</a>
+</li>
+<li>nnfft_flags
+: <a class="el" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a1a9bf1751caf842fb44f70a4cbab8744">nnfftl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#acebd9e667d51a5293f977642f031724e">nnfftf_plan</a>
+</li>
+<li>nplan1
+: <a class="el" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2">fgt_plan</a>
+</li>
+<li>nplan2
+: <a class="el" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163">fgt_plan</a>
+</li>
+<li>Ns
+: <a class="el" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b">fpt_step_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x70.html b/doc/api/html/functions_0x70.html
new file mode 100644
index 0000000..1e049da
--- /dev/null
+++ b/doc/api/html/functions_0x70.html
@@ -0,0 +1,167 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li class="current"><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>p
+: <a class="el" href="structtaylor__plan.html#afd71182be8b8fcfa66155b0be4fb94ee">taylor_plan</a>
+, <a class="el" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73">fgt_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf">fastsum_plan_</a>
+</li>
+<li>p_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#ac62464d925e739f79c28059cd1e59faa">solverf_plan_complex</a>
+, <a class="el" href="structsolverl__plan__complex.html#aa7833544d06eb2d71042da5fa06b9c5c">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a803178524d842ae2944fb5f3ce9d4939">solverl_plan_double</a>
+, <a class="el" href="structsolverf__plan__double.html#a6987fb320cd6798faabe9dfd92a494f2">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677">solver_plan_double</a>
+</li>
+<li>p_iter
+: <a class="el" href="structimri__inh__3d__adjoint__plan.html#ade134a86a60d2538595acc2fafb83e41">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a6e1fc4f4d7adf8aa89cde17cf002f0f6">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#afa0571b6b2c75979bc6a8ea75dc13efc">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a6c81df2130d05bcbbcd6646cd27b671e">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a53b6ba348be2011c1cfecdb9f16829fd">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a74ee726c5c0916fde59e77ca51d319eb">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aafe496b74fca5e5d96ce258bb3da1ffc">imri_inh_2d1d_adjoint_plan</a>
+</li>
+<li>p_nfft
+: <a class="el" href="structnfsoftf__plan__.html#a1be8436a257f63ab4c27441bf714671d">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#ac1230a81665ed7aa68cb7b4bc3a0c0c1">nfsoftl_plan_</a>
+</li>
+<li>plan_nfft
+: <a class="el" href="structnfsftf__plan.html#a87927611482f2fb3421ea2279993f94a">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#a2c016b15b6b33c44b8218c43619ef784">nfsftl_plan</a>
+</li>
+<li>plans_dct2
+: <a class="el" href="structfpt__set__s__.html#aead22ae71c82ad37da07f6166bf53fbc">fpt_set_s_</a>
+</li>
+<li>plans_dct3
+: <a class="el" href="structfpt__set__s__.html#a5f146823d105906abf0cdc4c5f9638dc">fpt_set_s_</a>
+</li>
+<li>pre_cexp
+: <a class="el" href="structfgt__plan.html#ad7d9387df7df72e3d5d628d7e429c2a2">fgt_plan</a>
+</li>
+<li>pre_K
+: <a class="el" href="structfastsum__plan__.html#a2ac8e8bdf57c75a916b1f4ef36ca513e">fastsum_plan_</a>
+</li>
+<li>psi
+: <a class="el" href="structnfctl__plan.html#a59712f0b5712ba9020540b7bf355caea">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a96d6ede1036cae0a4df7fbf7ba7b8034">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a59c1ef7493650838cf31086a46ff2e3f">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a3fb3fd27fa2c3c907c4f1e05a183598d">nfstl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a10747f86b86f7fa64539b46914344877">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4">nnfft_plan</a>
+, <a class="el" href="structnfct__plan.html#ad3886151e655110a1c5ba71a66439e2b">nfct_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a8644e94ccefb0b3001442b4df86dae5d">nnfftl_plan</a>
+, <a class="el" href="structnfftf__plan.html#a84402b4c947d57abef20e5f2db9110e3">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a33955562ecf9b48f4283f869c77f96ff">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a748631060895d5106d11cdf4fce3ee60">nfctf_plan</a>
+</li>
+<li>psi_index_f
+: <a class="el" href="structnfst__plan.html#a028609e96fa5f10d4197e4b50312180c">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a46d8f0fefc63d3ba6f1811f41bc9a7d8">nfstl_plan</a>
+, <a class="el" href="structnfstf__plan.html#ad20fa3e6bdb829247c3585639a0b086d">nfstf_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2ec8c4542c9fafbaf90b469ab8d06d59">nfctl_plan</a>
+, <a class="el" href="structnfft__plan.html#a2ed144cf7d6043a93c07b6f6ba7bbe2a">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a713765bd7f9b488ac995de023de2ead1">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#aa33238f59c2282eea4b81d8ecbba1417">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#a59633568fd7d1cb01df5f49f08ad352c">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a3788434fa045ecd49dd89d116bb40c47">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#abf4204a1a31afd35d490ca4ef42bd596">nnfftl_plan</a>
+, <a class="el" href="structnfftf__plan.html#ac0073e7c6389e9141d555bf58e2d0b59">nfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a2ada74222958e630640e6456e9bd2a8d">nnfft_plan</a>
+</li>
+<li>psi_index_g
+: <a class="el" href="structnnfftl__plan.html#a4b53c60fb307d01e01931ef812974a3c">nnfftl_plan</a>
+, <a class="el" href="structnfct__plan.html#adcd209b5cbbfae40c5490a1141b7acda">nfct_plan</a>
+, <a class="el" href="structnnfft__plan.html#aa0b2be91e59a45c809c68398ceb41232">nnfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a60f4fbcf2fb3a48a037e5cda4608f535">nfctf_plan</a>
+, <a class="el" href="structnfstf__plan.html#a3ece0ce2dd8ad2e41852ac59df3ad481">nfstf_plan</a>
+, <a class="el" href="structnfftf__plan.html#a04f8c8d2075057efa3b41381705084c6">nfftf_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2e593f732ad26f9d681797a85a7293cf">nfctl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#aa6d0ce899b41da6981f6863fc242559d">nnfftf_plan</a>
+, <a class="el" href="structnfstl__plan.html#a773fbd9160ac14e6972a4b5be1b5113d">nfstl_plan</a>
+, <a class="el" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a">nfft_plan</a>
+, <a class="el" href="structnfst__plan.html#a2d2a4a4d3c7ff12f35045b5466f41811">nfst_plan</a>
+, <a class="el" href="structnfftl__plan.html#ad3ff1d5c721f0ec4e81aa341b29abc15">nfftl_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x72.html b/doc/api/html/functions_0x72.html
new file mode 100644
index 0000000..8f4f2a5
--- /dev/null
+++ b/doc/api/html/functions_0x72.html
@@ -0,0 +1,103 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li class="current"><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>r_act_nfft_plan
+: <a class="el" href="structnsfftf__plan.html#a844f94caf050adea11133a52dcbaccdc">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a0a1b5e59c9ff83bc7b2d2894f96edd23">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#ad40799f013c6b35165c2bc76eb7cb32e">nsfftl_plan</a>
+</li>
+<li>r_hat_iter
+: <a class="el" href="structinfsft__adjoint__plan.html#a781b1438bf0c8d47f51b30551f982426">infsft_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a4739f3543d8e4e7af745c017a163516f">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a6088e9949fa966d839e8feadfb34596e">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a314c60168395a677ea88ff67dcaa2ec9">infft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#acbea7a40d34bbca7688da41378140926">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a3bb77b67c3779716d767e76b8661efbc">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#abd086bc019b356986e38f3db8039051f">infst_adjoint_plan</a>
+</li>
+<li>r_iter
+: <a class="el" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#aec8fcaf36c7ce234e76970dc4b4ec9c9">solverl_plan_complex</a>
+, <a class="el" href="structsolverf__plan__complex.html#a4ca8ff73e59386ea3d5003c1ad27459d">solverf_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a9715db1a24435d9dd2bc76371d92174e">solverl_plan_double</a>
+, <a class="el" href="structsolverf__plan__double.html#a6261a160be099d721856fab16f31cf22">solverf_plan_double</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x73.html b/doc/api/html/functions_0x73.html
new file mode 100644
index 0000000..8c91016
--- /dev/null
+++ b/doc/api/html/functions_0x73.html
@@ -0,0 +1,144 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li class="current"><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>set
+: <a class="el" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2">nfsft_wisdom</a>
+</li>
+<li>set_nfft_plan_1d
+: <a class="el" href="structnsfftf__plan.html#aaadc0908c69e235bc60ec3c7b28bca47">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a89a23c26f73280c5945e62f8966195fb">nsfftl_plan</a>
+, <a class="el" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc">nsfft_plan</a>
+</li>
+<li>set_nfft_plan_2d
+: <a class="el" href="structnsfftf__plan.html#a4ee3a7ef05c4fdbc161d24db51be3122">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aa7ae0c8a9b2f404bd1f8ce4820d7cf43">nsfftl_plan</a>
+</li>
+<li>sigma
+: <a class="el" href="structnfftf__plan.html#a20d669812b6acf9a8bda34cb659d61dd">nfftf_plan</a>
+, <a class="el" href="structnfstl__plan.html#a3c50de01911ed86a66d15ecd79874e21">nfstl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a858114a52835ef9cae070f6017625a4c">nnfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a09340f6465c23f3d94636f4f0da30f8a">nfft_plan</a>
+, <a class="el" href="structnnfft__plan.html#a6a3e11978f1e2c6279bd12785ef56b5d">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a899c16c2e59f2566a9f17d84f64af952">nnfftl_plan</a>
+, <a class="el" href="structnfftl__plan.html#a149fdaed10fafdb3bf414110ad233b7c">nfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#ab7b68bdae0872917b559577ac2f53402">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954">nsfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#acfc4ccc79c6fa50199500a790cb833b2">nfctf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aa55c79623980b8334e9fcb50fa55ecd3">nsfftl_plan</a>
+, <a class="el" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666">fgt_plan</a>
+, <a class="el" href="structnfct__plan.html#a56c9f580f79fb7605ae21bcbb729a8b9">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a629ae83677e311095d4c24ad4826e2ab">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a8d8b3093a73c09aac44cd8f55708ef27">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a7a8028a0e7348e5fa7717eebf07b76d1">nfst_plan</a>
+</li>
+<li>size_psi
+: <a class="el" href="structnnfftf__plan.html#a67aae8bda525717c1628aa53fca9b7de">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#aed13a1f152cb6febf2ce643c204d8b9a">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#af2992b9cb57809fb90a68dbaea36d79a">nnfft_plan</a>
+, <a class="el" href="structnfstl__plan.html#a975ebfbce1679c3ad3d8cc06e81c5645">nfstl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a2a01c089b030159c77a9bdcb46d1b183">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#ab03d9f17b3fb46eb14439745e8f7994b">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a1b8cf9260caf345c8ecb5e6de726387b">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a4c9f0923fcf290197cee1550dc9a3665">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a1780e54f9fed43e92c22a1e70274e7ad">nfst_plan</a>
+</li>
+<li>spline_coeffs
+: <a class="el" href="structnfstl__plan.html#a7abc2fedc757d9b2b5f985377f99bfe7">nfstl_plan</a>
+, <a class="el" href="structnnfft__plan.html#ac3e3c4b14a5227a96b8627faf6933652">nnfft_plan</a>
+, <a class="el" href="structnfstf__plan.html#a64c5addda16e3d789184af183900db21">nfstf_plan</a>
+, <a class="el" href="structnfftf__plan.html#a65c65de370e29b24ba0da097d20ee262">nfftf_plan</a>
+, <a class="el" href="structnnfftf__plan.html#acb221c7694859d0828bcc1f56154cd69">nnfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a3aaf44c4f0769644075d9fc5ed60afa0">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a971f190366e40c729899ff71d2a60682">nfftl_plan</a>
+, <a class="el" href="structnfct__plan.html#a53242b3a71b8997bdcd173777146c427">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a38de3cc7a337907a01ae2701ea335d75">nfctl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a25a3208574495231141c9c407658f0cf">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#a23bec4401a652efc87ee6781061c9363">nfst_plan</a>
+, <a class="el" href="structwindow__funct__plan__.html#a59ddba27ebde497ae7cfcfc2dbdd2304">window_funct_plan_</a>
+, <a class="el" href="structnnfftl__plan.html#a8f364097c04b46c203a4883af90b9eb0">nnfftl_plan</a>
+</li>
+<li>stable
+: <a class="el" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf">fpt_step_</a>
+</li>
+<li>steps
+: <a class="el" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854">fpt_data_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x74.html b/doc/api/html/functions_0x74.html
new file mode 100644
index 0000000..edf7dbf
--- /dev/null
+++ b/doc/api/html/functions_0x74.html
@@ -0,0 +1,99 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li class="current"><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>t
+: <a class="el" href="structnfsftf__plan.html#ad5d65a033c50d321c6affc677e4f5226">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#a59d80818cb9c0dcaccc477954720772c">nfsft_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a21641301ce6613d250e6d683c3fad9c2">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#ab0b32ee063950ce38adc6b0e5e40af02">nfsoft_plan_</a>
+, <a class="el" href="structfpt__set__s__.html#a1d35166e05db58736e422850fe02edef">fpt_set_s_</a>
+, <a class="el" href="structnfsoftl__plan__.html#acd18e8a2b89aacd8034b49033449f979">nfsoftl_plan_</a>
+, <a class="el" href="structnfsftl__plan.html#af5ba15c85f29ea8ba05a03c2f2fc2611">nfsftl_plan</a>
+</li>
+<li>T_MAX
+: <a class="el" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4">nfsft_wisdom</a>
+</li>
+<li>threshold
+: <a class="el" href="structnfsft__wisdom.html#ac367edaa1fae041e5b049cd81b44336b">nfsft_wisdom</a>
+</li>
+<li>ts
+: <a class="el" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb">fpt_step_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x76.html b/doc/api/html/functions_0x76.html
new file mode 100644
index 0000000..ff13be9
--- /dev/null
+++ b/doc/api/html/functions_0x76.html
@@ -0,0 +1,103 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li class="current"><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>v
+: <a class="el" href="structnnfftf__plan.html#a62822fb1596e8eccd6d2edf62096323b">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a224d2ba2e9ba30535b394b1375ff0a88">nnfftl_plan</a>
+</li>
+<li>v_hat_iter
+: <a class="el" href="structinfsft__adjoint__plan.html#ae1911bb7b195a6cdc51fc2c9dd5663d5">infsft_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a5078575d0bf816ed68ce3c762f578887">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#af253d4b292aa7db655ca51dfdf598bf9">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a8f64e1af7dfd3cd41377d79113eb51e3">infft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#ad04d2974dedefdc45e176e5ea5399aab">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#af025d6f664c1ccdd552f61e68d58ec97">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a10da470b963e2d631f48e8eb81bad94e">infst_adjoint_plan</a>
+</li>
+<li>v_iter
+: <a class="el" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a79c7f5b84aa9feddeafbcb9bde26de17">solverl_plan_complex</a>
+, <a class="el" href="structsolverf__plan__complex.html#a7e352320832a737577bd9ebe689a50bd">solverf_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#ab469e8fc7e7bc6c4068794cddf69ce26">solverl_plan_double</a>
+, <a class="el" href="structsolverf__plan__double.html#a6ee0cddd36b16d6b8cc09baf6db05cf9">solverf_plan_double</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x77.html b/doc/api/html/functions_0x77.html
new file mode 100644
index 0000000..9518549
--- /dev/null
+++ b/doc/api/html/functions_0x77.html
@@ -0,0 +1,116 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li class="current"><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>w
+: <a class="el" href="structsolverf__plan__complex.html#a91f7e03dc8509952827333cc61ca9aa4">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a63c0a528c6e9989c7b0fee6c02d1fbff">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__double.html#adc2b7cea47756753ae9f8d5731f8d500">solver_plan_double</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a67fabb54885946acaaad95a5a472b004">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#add093d84bfb7f6f5d5b5512e000efc68">infct_adjoint_plan</a>
+, <a class="el" href="structsolverl__plan__complex.html#a547382238a57e96f316bac4dd291af0d">solverl_plan_complex</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a5b64034f7c01c3ce0a7ab02fd8477bdc">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a20565dbd14d036eb348ca0276a4f411c">innfft_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a0f45b9d16576986d6d6d9605f6891f3d">solverl_plan_double</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a552e0603ee92be729e052bb6028a1fb4">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#aa4cd6ea3040339a39047978a7c1f1c9d">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a9738a7ae6eb6e9ac59018d7fe0b67b32">infsft_adjoint_plan</a>
+</li>
+<li>w_hat
+: <a class="el" href="structinfst__adjoint__plan.html#a00f860d5af6ada0c99a252b5d7548f5b">infst_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce">solver_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#ab1cada21b9034edfd3a1b2f77252f3be">solverf_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#aece5ec597b25ea28c945d2559316fad8">solverf_plan_complex</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a76ad0c6eace967391553fd4939e70662">infft_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__double.html#ab16ed4ac6cf04f57c4b1f194fbc09472">solver_plan_double</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aeb6a8106c1347dc7decf42e4520f70ab">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#aa53e43e9cd65db3ba08ed275cb62d456">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structsolverl__plan__complex.html#ad4d107f6ef642a2f8173d05d73bde405">solverl_plan_complex</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a0545064b15a22a5a3ae285e6aded5f80">innfft_adjoint_plan</a>
+, <a class="el" href="structsolverl__plan__double.html#aaa9d07d5f3ec0f7f7f0a6193927e1a94">solverl_plan_double</a>
+, <a class="el" href="structinfct__adjoint__plan.html#af14d4eb49aee59948ea57d30dbf4d628">infct_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a5830886454142e4825347a703f286c0a">infsft_adjoint_plan</a>
+</li>
+<li>wig_coeffs
+: <a class="el" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#a452e16848e81fd0b072d4e3347345455">nfsoftl_plan_</a>
+, <a class="el" href="structnfsoftf__plan__.html#a1d6f6e5b95a8f0ff13add5c23b382fb9">nfsoftf_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x78.html b/doc/api/html/functions_0x78.html
new file mode 100644
index 0000000..4624966
--- /dev/null
+++ b/doc/api/html/functions_0x78.html
@@ -0,0 +1,119 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li class="current"><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
+<li>x
+: <a class="el" href="structnfftf__plan.html#a4bcaa307f32321459187f8633a946a7e">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#acf91ba20ce671a5d4c971465fbd33b03">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#a048ebad4f2abe3821988fa06a5e308d8">nfst_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a072fa8dcd38c95bec64c8e82af71afa7">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383">nfsoft_plan_</a>
+, <a class="el" href="structnfstl__plan.html#af663d590a277872d6e0e777cb410edbb">nfstl_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#a92211c64713d72c3d3cf45ac39601214">nfsoftl_plan_</a>
+, <a class="el" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93">fgt_plan</a>
+, <a class="el" href="structnfct__plan.html#a5635e780f4c492f087754d71f16e07ed">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#ae3c9275b5cafc753e2762406ba422378">nnfftf_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91">fastsum_plan_</a>
+, <a class="el" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#ad5695c30a05c03573082a1aac0394700">nfftl_plan</a>
+, <a class="el" href="structnfsftl__plan.html#a59d00d103ebc0746d9cbf2d49077dfe8">nfsftl_plan</a>
+, <a class="el" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90">nfsft_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a110084c9a750d175c70caa7a24d69ae7">nfsftf_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2f7f915bfefa105412cabfc368c26560">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#ad3c1a7dca6cddcecba876f1bb523e3b6">nnfftl_plan</a>
+, <a class="el" href="structnfstf__plan.html#ad0d1772e5947f4395cbfa0fc2ed39018">nfstf_plan</a>
+</li>
+<li>x_021
+: <a class="el" href="structnsfft__plan.html#aee5ad936bb790f00bf0797c94e185549">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a62e8e58fe1b84f82ac85301a091af3fa">nsfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a0c015fd2deca4e70105f0c68a6a69586">nsfftf_plan</a>
+</li>
+<li>x_transposed
+: <a class="el" href="structnsfftf__plan.html#a4d7e0553a450636fc65816e4977914bd">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a28eb398ae77902fd1ec2e0604d2a77ce">nsfftl_plan</a>
+, <a class="el" href="structnsfft__plan.html#aca6c9880cde07f3bc26dd7666c09a9d6">nsfft_plan</a>
+</li>
+<li>xc
+: <a class="el" href="structfpt__set__s__.html#a226e29e0f97627e77ec4fcebd0c49fdf">fpt_set_s_</a>
+</li>
+<li>xcvecs
+: <a class="el" href="structfpt__set__s__.html#a58a8f2867286e0be19dd89e8d41c033b">fpt_set_s_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x79.html b/doc/api/html/functions_0x79.html
new file mode 100644
index 0000000..0b644f6
--- /dev/null
+++ b/doc/api/html/functions_0x79.html
@@ -0,0 +1,100 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li class="current"><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_y"></a>- y -</h3><ul>
+<li>y
+: <a class="el" href="structsolverf__plan__complex.html#a522b2ad5b572dce6d786b26e221a14d6">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a31aa1269dccbcfad158f31c276b0399e">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__double.html#accc401c5912fe60922d4ce2b30132e18">solver_plan_double</a>
+, <a class="el" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51">fastsum_plan_</a>
+, <a class="el" href="structsolverl__plan__complex.html#afbcb92106789225f6d54be521797b97f">solverl_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a70307c6e59216c27cb4d78e7f172ab8c">solverl_plan_double</a>
+, <a class="el" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056">fgt_plan</a>
+</li>
+<li>y_hat
+: <a class="el" href="structimri__inh__3d__adjoint__plan.html#a968843771644077babbdd687b6bbdb5d">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#ab91fa7e8fa5668148a4cba86a97e415b">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a4a98ec178d9d74dab4e617beebc419a6">infct_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#acd0758c4ed1c79b6d2f2eed33effb539">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aaed8db541ee689c5ec82bb8e18c4c8d1">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#ac21eced87cb3a6eafd0d22f27e0eac03">infsft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a52d2b0b0d208e673eada45dff01e9c13">infst_adjoint_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_0x7a.html b/doc/api/html/functions_0x7a.html
new file mode 100644
index 0000000..3affec2
--- /dev/null
+++ b/doc/api/html/functions_0x7a.html
@@ -0,0 +1,98 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index__"><span>_</span></a></li>
+ <li><a href="functions_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ <li class="current"><a href="functions_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a class="anchor" id="index_z"></a>- z -</h3><ul>
+<li>z_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#a4c8dbe5d5a4d910b93ae7f84215482c8">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#aeee7fa961ebdf43e0caf1108e6b5ada7">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#abe468b3b489a8707538f083713962fcc">solverl_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a0816054fdb0e07f4a68fc4aa5321c977">solverl_plan_double</a>
+</li>
+<li>z_iter
+: <a class="el" href="structinfft__adjoint__plan.html#a0f6a4a61889385e975380802617ade31">infft_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a2c01ce7b85130d3069016e30b4a1685e">infsft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a254d587d2d91f18fb55a2ccae89198a5">infst_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a2e2d8f1f1a6a7500c1689cf5021abcde">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#a0efcec4db642e9066fbc64c1c70bc079">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a5b1da212f8c15d7ca209dbe347a5ec8f">infct_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a4a4aac08b2efbcbc13545a08bb397f52">innfft_adjoint_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_func.html b/doc/api/html/functions_func.html
new file mode 100644
index 0000000..862ddf9
--- /dev/null
+++ b/doc/api/html/functions_func.html
@@ -0,0 +1,77 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Functions
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_func.html"><span>Functions</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+ <ul>
+<li>FFTW_MANGLE_DOUBLE()
+: <a class="el" href="structnfft__plan.html#a2310e54f3049b94d2bf08b67f689280c">nfft_plan</a>
+, <a class="el" href="structnfct__plan.html#a5ae19fdb6ea93d515109229f419c22df">nfct_plan</a>
+, <a class="el" href="structnsfft__plan.html#a937d2895eeeaa8aabb92359232498693">nsfft_plan</a>
+, <a class="el" href="structnfst__plan.html#ac3c18cc4dec9293352c508e9999ebf05">nfst_plan</a>
+, <a class="el" href="structnfct__plan.html#af736d9e6e59e9a91276a48a50979fedb">nfct_plan</a>
+, <a class="el" href="structnfst__plan.html#abeeca1317cee53206b64c79f3de094c2">nfst_plan</a>
+, <a class="el" href="structnsfft__plan.html#a979134567e97bfffbc022b8267f98f6d">nsfft_plan</a>
+</li>
+<li>FFTW_MANGLE_FLOAT()
+: <a class="el" href="structnsfftf__plan.html#a5ceb97a548f5a438ad46a12133b1b5e8">nsfftf_plan</a>
+, <a class="el" href="structnfftf__plan.html#a17fea72bdd4f446528716400f4522dac">nfftf_plan</a>
+, <a class="el" href="structnsfftf__plan.html#ac0a9dbecfd535a1c7b2c0cfec5b79925">nsfftf_plan</a>
+, <a class="el" href="structnfftf__plan.html#ae2ffec96887c5407fb31063a0139f678">nfftf_plan</a>
+, <a class="el" href="structnfctf__plan.html#a18d7721bf6d8ccbc5bb20e2dad30f9a3">nfctf_plan</a>
+, <a class="el" href="structnfstf__plan.html#ad4f44281f0c352fc630442cb40597983">nfstf_plan</a>
+</li>
+<li>FFTW_MANGLE_LONG_DOUBLE()
+: <a class="el" href="structnfstl__plan.html#a2c07f20560a3969129916e3d30239227">nfstl_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a9a426f13a97f82a480413cba913b7f2b">nsfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#ad0a55579cc5f04b0af4cc28abd445083">nfctl_plan</a>
+, <a class="el" href="structnfftl__plan.html#ab17581f82946cc39584acd6b059b7809">nfftl_plan</a>
+, <a class="el" href="structnfstl__plan.html#a6285132e89913685bc2f7366fd79e769">nfstl_plan</a>
+, <a class="el" href="structnfftl__plan.html#a2e9e81a72c786bd7ed4eef099a5f8a5e">nfftl_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars.html b/doc/api/html/functions_vars.html
new file mode 100644
index 0000000..3d2ae19
--- /dev/null
+++ b/doc/api/html/functions_vars.html
@@ -0,0 +1,90 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li class="current"><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index__"></a>- _ -</h3><ul>
+<li>_alpha
+: <a class="el" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7">fpt_data_</a>
+</li>
+<li>_beta
+: <a class="el" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb">fpt_data_</a>
+</li>
+<li>_gamma
+: <a class="el" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc">fpt_data_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x61.html b/doc/api/html/functions_vars_0x61.html
new file mode 100644
index 0000000..5096185
--- /dev/null
+++ b/doc/api/html/functions_vars_0x61.html
@@ -0,0 +1,142 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li class="current"><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>a
+: <a class="el" href="structnnfftf__plan.html#ab0a39deb647f2a862caf5a6cfaf4939b">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a0a30183077239e2de76e5de626dc92e9">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a41260d5c377bdd918b4952b4730b6908">nnfftl_plan</a>
+</li>
+<li>a22
+: <a class="el" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9">fpt_step_</a>
+</li>
+<li>act_nfft_plan
+: <a class="el" href="structnsfftf__plan.html#a505021fefe68002ba73c78815166a73c">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a28eeabbe1dbef7ccf1c2b8c683a4b5dc">nsfftl_plan</a>
+</li>
+<li>Ad
+: <a class="el" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef">fastsum_plan_</a>
+</li>
+<li>Add
+: <a class="el" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc">fastsum_plan_</a>
+</li>
+<li>alpha
+: <a class="el" href="structfpt__data__.html#ad56b765b9faabb4071e844e7d1355151">fpt_data_</a>
+, <a class="el" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e">nfsft_wisdom</a>
+, <a class="el" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a">fgt_plan</a>
+, <a class="el" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087">fastsum_plan_</a>
+</li>
+<li>alpha_0
+: <a class="el" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e">fpt_data_</a>
+</li>
+<li>alpha_iter
+: <a class="el" href="structsolverf__plan__double.html#ae1d25f3ba1b23f7d5953991495c91ce3">solverf_plan_double</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a6e7a960d8661f6c459ebac7085e2587f">infct_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#ad149f66fa5dde187b3ef7860e593de01">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a7ea0b68ab2ccfe01df7a3747a5fed15a">solverl_plan_double</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#aad358c99ea10d70c4984bf9898820865">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a9abf5757d92159acfd73366a4c4df7be">infft_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#ae202e8af2161d1d64bb32e49fc16f5f0">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#ae6e228dc1df00e0b3de8873f0de12675">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#aef3f9b375d7e43fbcbea60380c5e9f34">infst_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a740c87ac77f68578613d58e569deedb2">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structsolverf__plan__complex.html#ac2ce57e2bfbc31f9262e5ce93562d899">solverf_plan_complex</a>
+</li>
+<li>alphaN
+: <a class="el" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519">fpt_data_</a>
+</li>
+<li>aN1
+: <a class="el" href="structnnfftf__plan.html#a405914d88ec36f1bf8438ebfed59f294">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#af262dc79891366e77bb15789aa24f2cd">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb">nnfft_plan</a>
+</li>
+<li>aN1_total
+: <a class="el" href="structnnfft__plan.html#acb1a1fa5fdb73d2187e9e9d8e4415921">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#aa791fcca6424d42640020e178e8319e7">nnfftl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a4bfc7abd18935616365f7925b2994e38">nnfftf_plan</a>
+</li>
+<li>aux
+: <a class="el" href="structnfsoftf__plan__.html#a5f7c39509a2403a9bc17824be7a3c3a9">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#ae669348fbbb187c8c521f6a89c8f3720">nfsoftl_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c">nfsoft_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x62.html b/doc/api/html/functions_vars_0x62.html
new file mode 100644
index 0000000..7b67780
--- /dev/null
+++ b/doc/api/html/functions_vars_0x62.html
@@ -0,0 +1,122 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li class="current"><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>b
+: <a class="el" href="structnfftf__plan.html#a3ede2fe9c94e00ec59150ba2971facb2">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a6eb955f63212f63c0ac26894f8355caf">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#a49927bec2aa96ab8596740011fabb914">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a8378f952b6e05cd58225877eee84f2e7">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#af1c2c2fe35f5b574a39109bb7b176270">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#adbd7faf4a853905d26899885e5ca3b38">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#aa91e909254c1beb83e2e971df50b96ca">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a80c548cbcc4defbac2b544602a5baa85">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a01287f3f68aff7e5d7ce35d3163021e2">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#ada085ec8f6099bfcaa7a193745689c9a">nnfftl_plan</a>
+, <a class="el" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4">fgt_plan</a>
+, <a class="el" href="structnfstf__plan.html#a2ca69cf1b6dea39e81cba93d0d1667d8">nfstf_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972">fastsum_plan_</a>
+</li>
+<li>beta
+: <a class="el" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255">nfsft_wisdom</a>
+, <a class="el" href="structfpt__data__.html#af28f490521ca26420df33a1f590363e3">fpt_data_</a>
+</li>
+<li>beta_0
+: <a class="el" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa">fpt_data_</a>
+</li>
+<li>beta_iter
+: <a class="el" href="structsolver__plan__complex.html#af13036b1a6f6edabe3fd862f77cf5000">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#aebfe38cf3b3ca344bbfbb7b1cf41eca8">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__double.html#a1c60e5fd15da3722f9b8213d1634c86a">solverl_plan_double</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a7714746a66fd3657bd247062c9c5cb24">infsft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a0aa7b8faeab03acb6011b673882282ea">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a444f54274b78ec9162683d2cc9cb3160">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#ac622efae9216d5d4335118084c7fcbfa">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structsolverf__plan__complex.html#abd007d004fedd5bb4b9eb919d8e928d8">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a4b53103abc562b5c603b4b656d1992fa">solverf_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#ab0f9266a50fc4a3acda9659b2c0920e3">solverl_plan_complex</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a3e6ea22841cd010652beb76f554bdf92">infct_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a09f8c30247659fc918d48521ba5ed5e8">infft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a7f3271035bca7b994475e565ab1ffb22">imri_inh_2d1d_adjoint_plan</a>
+</li>
+<li>betaN
+: <a class="el" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d">fpt_data_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x63.html b/doc/api/html/functions_vars_0x63.html
new file mode 100644
index 0000000..349461d
--- /dev/null
+++ b/doc/api/html/functions_vars_0x63.html
@@ -0,0 +1,105 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li class="current"><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>c_phi_inv
+: <a class="el" href="structnfftf__plan.html#aa71f70b332bbb9868caad1db9f6cda02">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a38d2c1dec96ad6d632133bc1dcbf82cb">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#a2c42ae2c8ca95bb4c0c1dfc279bc2cab">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a7fdb409271e18f5dec1ac622af10d32a">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#aa217dda883fc3533b95bf6ab6ccff888">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a89b1d6ef566671d479eaaf4e50f666cb">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#ab9b9f0d173b9526d60c1ae8fbec1e1f7">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#a9073b3c76f70f8b9caedac7f5574ce89">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#afdcd5a1259a4fb7e7271efe30a207265">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2b69489da0118e06cba24db6d73ea934">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a9d59ca4338fe39f2e22f4e5d3155deba">nfstf_plan</a>
+</li>
+<li>center_nfft_plan
+: <a class="el" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e">nsfft_plan</a>
+, <a class="el" href="structnsfftf__plan.html#aa01b9e613b9847fa4cc6278fcb3ae660">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#af26a51757ddb28c4bcb37a0426e83fc1">nsfftl_plan</a>
+</li>
+<li>cheby
+: <a class="el" href="structnfsoftf__plan__.html#a73e75b0a9f8ceebffe6923c90c04c312">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#a681110b5c15effe7ef2781249e049119">nfsoftl_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x64.html b/doc/api/html/functions_vars_0x64.html
new file mode 100644
index 0000000..b170656
--- /dev/null
+++ b/doc/api/html/functions_vars_0x64.html
@@ -0,0 +1,212 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li class="current"><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>d
+: <a class="el" href="structnfftf__plan.html#a35ff58e4549b1c5292fd03cb215debac">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a1129b984a15339cca4fbbbc2190d43af">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8">nfst_plan</a>
+, <a class="el" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307">fastsum_plan_</a>
+, <a class="el" href="structnfstl__plan.html#a66ac609113d5f8debb056f3c62f6b14b">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#a998a428a06532646854e8add72c5ca63">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#ae6d3ce66c1d6d2fd0f507d83df91f549">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a4c139d72e93078b54f4240ecd7f6454f">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#aa42a9c638dec4cfa622f2e3f7e7c1dc3">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a14dac9d67ed25ff370516f66668a8ec6">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a161e392c8404d11f3237350b23e8c041">nsfftf_plan</a>
+, <a class="el" href="structnfstf__plan.html#aa792b04cd0fa4f09175773aaa48f6a69">nfstf_plan</a>
+, <a class="el" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aca82cd28238f0c1a5171eabd1d301f90">nsfftl_plan</a>
+</li>
+<li>deltax0
+: <a class="el" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b">taylor_plan</a>
+</li>
+<li>direct_plan
+: <a class="el" href="structnnfftf__plan.html#a15fe2e694c1b999008600c1f4a5dc2be">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#aa59e9ff1ad2fe1d90e077451831c6596">nnfftl_plan</a>
+</li>
+<li>dot_p_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#a3d2a5ea538a77dc4f2da9b53beab9c01">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a2bf2a21b09e47a883f9665b4ec38f3c2">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a0cced7bb2f3b85b75b765d796e2c741d">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a21f781633362300a145e71ea88febbae">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a4941cd9e60935f7e39a0c86a52202c02">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a2f43c87a598dff5b6e87960a07864148">solverl_plan_double</a>
+</li>
+<li>dot_p_iter
+: <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a00c75acfb362339a30d2809520fcd775">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#a65805c60e7d3a18d9a8952da80286032">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a108504616c4e19b53638a80710f9308c">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a2ddddb18e229f9d2d4b9eb11c36d0529">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a50526d4b81b2dd8cf90e82ad162af3c5">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a6dfb17d6feade963b31c16e6278aa6ee">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a3d20a53eb3c0158cc401d7b0d640da07">innfft_adjoint_plan</a>
+</li>
+<li>dot_r_hat_iter
+: <a class="el" href="structinfsft__adjoint__plan.html#a90e95de22380d88f23720ffca653edeb">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#af3de3b55c6ddf2e27ed9fbe7ef164b04">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#adfc3485017bb92e57c229dc7f81e438b">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a3dfbd628846af0683c8fc263f8cf6418">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#aad7bfd0f7561ec252b26b1d183622f12">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a52eec6bb5ee2ae209ed90d44739c8769">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#af456205ec418161fe20de523e423bb51">imri_inh_3d_adjoint_plan</a>
+</li>
+<li>dot_r_hat_iter_old
+: <a class="el" href="structinfsft__adjoint__plan.html#a228a2a746f7b7958efb3c4a4ef28e6ce">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a38e5e1e241a0a4a54e83266223725ab6">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a98056f05d5a45569899df80b040b9872">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#ae8dfd86274f0e3bba8c01730449d0474">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a0a0b243360667886af63d1ac26408f74">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a846d92d450d33e64996d28c2054e3181">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#acce4b5401db74c6e9896a78eccc9ca1e">imri_inh_3d_adjoint_plan</a>
+</li>
+<li>dot_r_iter
+: <a class="el" href="structsolverf__plan__complex.html#a1bb6290598f2f4f1452a2de2c27f54af">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#ae52e93514983b50204d70f660e720e04">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#aa2d90b37bc2a2ae2f9d0c90c9431abf1">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#ab12b510e093f8ccfaa4c1e51b6cd31c1">solverl_plan_double</a>
+</li>
+<li>dot_r_iter_old
+: <a class="el" href="structsolverf__plan__double.html#a2ee1d6b53c866d65aaa948afcbdd871e">solverf_plan_double</a>
+, <a class="el" href="structsolverl__plan__double.html#afa3e321968bd1773368cebe1339add7c">solverl_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#a861d76266b51f96c015ed6e33505978d">solverf_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#add3b6bc4149ba5371ef0b8bd91443e50">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a5d47ba554ae4d190384eaca6250f7312">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a6d564c417ab5b11a306e489df80f4e1e">solverl_plan_complex</a>
+</li>
+<li>dot_v_hat_iter
+: <a class="el" href="structinfst__adjoint__plan.html#ab4e8f85dfe25ba2b90f86d7d39362e5c">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a5d9a12eacf094e7f9e771add0a3874d5">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aed3f646cabd7b8ab1a480d7607ea45f3">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#ae251b00724c42f9c0f906e823c9e17f8">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a990b893dd142cbc3ade6436bdd603e59">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a1a005f3e97b207a1d42cbc8e2ad3a5e1">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#ac1b772ccfa72ce8e522298aeef3b1e1b">infct_adjoint_plan</a>
+</li>
+<li>dot_v_iter
+: <a class="el" href="structsolverf__plan__double.html#aaeae6a2f28ba0ded31baca1aa8c36431">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890">solver_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#a46f2243aac9e8e4689ab7f06914d3f97">solverf_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a849c4c1c131a333885e581fec5a2dac0">solverl_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a14f62c3118e3c1c7a92dd9bf8877250c">solverl_plan_complex</a>
+</li>
+<li>dot_z_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#adeec40c2b8450cd7486f8524c6dcc3d4">solverf_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__double.html#aefacac40db7773101ce75ba8247119b7">solverl_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#ae487ec619578f4f6d4876d7bc059f22a">solverl_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df">solver_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a845482517a34f22d7eb39bf1747e5dd6">solverf_plan_double</a>
+</li>
+<li>dot_z_hat_iter_old
+: <a class="el" href="structsolverf__plan__double.html#aa9672016211508805091ab645b489bbf">solverf_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#af4efa34efc92f873c771df52d423f39e">solverl_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a35f2567cc25bcfce28dbb48eba5e49c9">solver_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#a71e2482ed0eb34229fb166d6821d1a03">solverf_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#aa991891a7df826b77fac977581f9077c">solverl_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#aadb97426a0e35fd46a65557c56b055ee">solver_plan_complex</a>
+</li>
+<li>dot_z_iter
+: <a class="el" href="structinnfft__adjoint__plan.html#aae72bba8cc1a211c1b3931c969f95a85">innfft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a6cca862303d84903e408f5a2ea02aa9c">infft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a2309d1161fdf96711f3251e41a65eef0">infst_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#ad854541f2e09bc978461fff1c323b2a5">infsft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#af91db19db24ca1c648d97ea516367f94">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#ac3ca8cbbcd9958d69b15b4696e14a2e3">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#ab848ecc31c17b9cd639e9834ee56816d">infct_adjoint_plan</a>
+</li>
+<li>dot_z_iter_old
+: <a class="el" href="structimri__inh__3d__adjoint__plan.html#a794d80ffe20e25a4d69340d925d8624c">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#aa78f22f1c5c917f665b2f1af3e7df191">infft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a9bdd6b4dfcb1b22bd010444ef34b5903">infst_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#ad2417d37a566a0d26dea57f6f875ca12">infct_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a92ceaf9529a44c28fd3b6d9d63c0c13f">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a669c48fd77d0d04bf0adc4ebedbd699f">innfft_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a681a3587b2e42a24f03bac812eb7a60e">infsft_adjoint_plan</a>
+</li>
+<li>dpt
+: <a class="el" href="structfpt__set__s__.html#a0509dfa979aa395a80d8f38b2f5fb760">fpt_set_s_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x65.html b/doc/api/html/functions_vars_0x65.html
new file mode 100644
index 0000000..fd16e48
--- /dev/null
+++ b/doc/api/html/functions_vars_0x65.html
@@ -0,0 +1,87 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li class="current"><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>eps_B
+: <a class="el" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46">fastsum_plan_</a>
+</li>
+<li>eps_I
+: <a class="el" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6">fastsum_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x66.html b/doc/api/html/functions_vars_0x66.html
new file mode 100644
index 0000000..a20f920
--- /dev/null
+++ b/doc/api/html/functions_vars_0x66.html
@@ -0,0 +1,214 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li class="current"><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>f
+: <a class="el" href="structnfftf__mv__plan__complex.html#ab3a2f060f60eb88cd268bc1bec2e5310">nfftf_mv_plan_complex</a>
+, <a class="el" href="structnfftf__mv__plan__double.html#a0b25cac2771ce5e3048ddc1b708e9005">nfftf_mv_plan_double</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e">nfft_mv_plan_complex</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#ae6c4a0204a54f2a37a0acf2b3f5a0c0c">nfftl_mv_plan_double</a>
+, <a class="el" href="structnnfftf__plan.html#a458403c21a1083ede0d84a6d25c8cc8c">nnfftf_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#a62073b403c90aa2b527d5f62f190112e">nfsoftl_plan_</a>
+, <a class="el" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb">nnfft_plan</a>
+, <a class="el" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1">fgt_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a">fastsum_plan_</a>
+, <a class="el" href="structnfftl__plan.html#a53b53a1222f4acf29c778b933c9f130e">nfftl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a6aaa7904dbee73679d86060f1842a04e">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#aa2cda7d4bb129ad3dfd6b89682c28cd6">nsfftf_plan</a>
+, <a class="el" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e">nfft_mv_plan_double</a>
+, <a class="el" href="structnfctf__plan.html#a5c695490725fbd63787fb76548de2908">nfctf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#ada472d5a0fb2afc32b4d1683c98185f6">nsfftl_plan</a>
+, <a class="el" href="structnfct__plan.html#acca00284f93bd33c00a1b099a6eec8cd">nfct_plan</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#a3ab01f8b5f1b1368dbf3d7715ce46997">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#aa762bd3f11d1558e792ff34dc710bcb3">mrif_inh_3d_plan</a>
+, <a class="el" href="structnfftf__plan.html#a1c2e419705d6254801134bffe0695ae1">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5">nfft_plan</a>
+, <a class="el" href="structnfctl__plan.html#ae09e0a759e136ad020a97e6c76efbb30">nfctl_plan</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0">mri_inh_2d1d_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#a9e51f5f4ad46d4b120c452fc962a2385">mri_inh_3d_plan</a>
+, <a class="el" href="structnfstf__plan.html#a178dae9cc4b5869ef69fd148efe14f93">nfstf_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a3e2fef5b1bb862347511209994235597">mril_inh_2d1d_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#adb03497106fd0a995b70010f9cd9684b">mril_inh_3d_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#adb5c2e9ba052f02fec78e550413aacfa">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfst__plan.html#a314e2d828775d6aa93a26d7c40b7b931">nfst_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a7cfd191a4353a736bf9045c7e1d46f70">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df">nfsft_plan</a>
+, <a class="el" href="structnfstl__plan.html#ad4f7ff9f286c0203712d5f16b21e9e4e">nfstl_plan</a>
+, <a class="el" href="structnfsftl__plan.html#ad27b30233039fea75a9e1bc885324f3d">nfsftl_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a165dc6360c20f9eb19a55872cc29455a">nfsoftf_plan_</a>
+</li>
+<li>f_hat
+: <a class="el" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#ab9243951baccdf59de326cada1c08853">nfsftl_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#aa6990fedf1965a967f3f718dd373f543">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#ab280522456fe4f49ccb91d4aa195702d">nfsoftl_plan_</a>
+, <a class="el" href="structnfftf__mv__plan__complex.html#ad55a895ef394e9b74db36d028656b382">nfftf_mv_plan_complex</a>
+, <a class="el" href="structnfftf__mv__plan__double.html#a109229f89032f01e4b2bece93297189c">nfftf_mv_plan_double</a>
+, <a class="el" href="structnfftf__plan.html#aa967453b5ae5ba9e5b2056c884d2cda5">nfftf_plan</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52">nfft_mv_plan_complex</a>
+, <a class="el" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac">nfft_mv_plan_double</a>
+, <a class="el" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691">nfft_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#ae4b3786df2416012cf16d7ed4c097791">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#add804289931e55388070ee495c3e5072">nfftl_mv_plan_double</a>
+, <a class="el" href="structnfftl__plan.html#ad5cf4ad0369bdaf07f6acd801e6b9e5e">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a33bae90d163b1d848efc2c656bac6839">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#af289164b09e85f75e8ed0eb3ded40d9c">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#aede4fbbe9a7b666d5d5fbd62e62bf103">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#ab57019bf0a7274b5a6f401fe2f6bcf2b">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#aa0a56037700b7a3d428c77e353dc209e">nfstl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a068de2b177ffaad5b0091b0ecd2ca211">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b">nnfft_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a840547e30414a41c3751e2b418f76312">nfsftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a97bc689ffe1f4c8eb99ee43cf408c662">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a423d4a1555477e49a7cb3c26a4a5dfd1">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a93d9d361d56e03f44bc6a9d4265b9f43">nsfftl_plan</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#a18fb340e9ead654552e45033c81ac637">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#ac644cb0bbceb7ea8634ea94758da405d">mrif_inh_3d_plan</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf">mri_inh_2d1d_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50">mri_inh_3d_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a70247e89a002d0e7b5c66d1e87b33645">mril_inh_2d1d_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#ae1f94471fa54c0a172ede3345d0a9a9c">mril_inh_3d_plan</a>
+</li>
+<li>f_hat_intern
+: <a class="el" href="structnfsftf__plan.html#aa0a6fb494d6378f656c83f191cd4ed1d">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#ab3914490d1c4767c0127783cac5098e4">nfsftl_plan</a>
+</li>
+<li>f_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#abe0364fe67e48a336fca522a0cf6ee1b">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#aab9daf7841a5f6b3a059921713736e3c">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__complex.html#affba771210ad63dfce92bed9a629e19f">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a0c38937dd8ad6734e94e08a2cd700628">solverl_plan_double</a>
+, <a class="el" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1">solver_plan_double</a>
+</li>
+<li>f_iter
+: <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#ae154ca7cd0d7ebc7e0db4b1f415b56fd">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a0b408ac6ce2906dc57ff0c2ff9d3f0d0">infft_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a9c5a261251ad90176392b2fafcd961de">infsft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#af72ea2aed94d3e789dd064776fdf2919">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a53b03057778ae78ee06efd6b135e23fb">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a74d132853f5b7e0a4b8e3918dae7fe8c">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#a4207ca1175efe7865d6631ae5a704632">imri_inh_3d_adjoint_plan</a>
+</li>
+<li>fftw_flags
+: <a class="el" href="structnfftf__plan.html#a880c04f5e9d485d84065b3c289cd5729">nfftf_plan</a>
+, <a class="el" href="structnfctf__plan.html#afd3bc700b6adca6d3dde831c9a7aae79">nfctf_plan</a>
+, <a class="el" href="structnfctl__plan.html#afc96567eba0053563867b8e3a064902b">nfctl_plan</a>
+, <a class="el" href="structnfst__plan.html#a69d37e02b7a2868e3861c582e76e35d8">nfst_plan</a>
+, <a class="el" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805">nfft_plan</a>
+, <a class="el" href="structnfct__plan.html#a407c06575335351e1b720b40f8b4f26c">nfct_plan</a>
+, <a class="el" href="structnfftl__plan.html#a4e0df1f491a4aa8f7373d776d705095f">nfftl_plan</a>
+, <a class="el" href="structnfstl__plan.html#a0ab6b3ec18b7e0685277d5f6997aa54c">nfstl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a9da018cd24e707e57ed0c8cac82f5301">nfstf_plan</a>
+</li>
+<li>flags
+: <a class="el" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa">fastsum_plan_</a>
+, <a class="el" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869">fgt_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a6795cda9e0d83c5b5c7935b75d10dc1a">infsft_adjoint_plan</a>
+, <a class="el" href="structnsfftf__plan.html#acd78e2fcc4a9c29700887aee1517214c">nsfftf_plan</a>
+, <a class="el" href="structnfsftl__plan.html#a15d53809b4f86c20e7fd99ea1b71efcb">nfsftl_plan</a>
+, <a class="el" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694">nfsft_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#aadd41183d54818f3e8528affe40769bc">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#a2f236235168535b9f9833bcc7e50e695">nfsoftl_plan_</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a83f3fc443fbf5c40336a46a8c1bdfaf8">infft_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4">solver_plan_double</a>
+, <a class="el" href="structnfsftf__plan.html#a67898ed2ead6812358feeace004b14fe">nfsftf_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a8771c95bc65a49fe974389825f005ec9">infst_adjoint_plan</a>
+, <a class="el" href="structfpt__set__s__.html#a401070e7725566f06ae740e7e99a12a2">fpt_set_s_</a>
+, <a class="el" href="structsolverf__plan__double.html#a28ce886cb705632f8f866bfb5880795b">solverf_plan_double</a>
+, <a class="el" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281">nsfft_plan</a>
+, <a class="el" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942">solver_plan_complex</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#adea4e1650ddadc3f0f7c1d833b6b7789">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a55301d3525d6457aebd0237871dee668">nfsoftf_plan_</a>
+, <a class="el" href="structsolverl__plan__double.html#aa95251443f265effb6093d63b6536431">solverl_plan_double</a>
+, <a class="el" href="structinfct__adjoint__plan.html#ad913ef9fc7d9bb8ca4f91f1abbf99949">infct_adjoint_plan</a>
+, <a class="el" href="structsolverf__plan__complex.html#a2d7642432b4b627a4bf77d1c05216669">solverf_plan_complex</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a0d51c3ece7512b04408b5a2b94ee4a05">innfft_adjoint_plan</a>
+, <a class="el" href="structsolverl__plan__complex.html#abd86575c07d53042297da1c54ebc9e1a">solverl_plan_complex</a>
+, <a class="el" href="structfpt__set__s__.html#ab2272294463f288c3aaa4513bfeac758">fpt_set_s_</a>
+, <a class="el" href="structnsfftl__plan.html#a5c4750f9d7a5f0dbc4d51d06d6be08d3">nsfftl_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca">nfsoft_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x67.html b/doc/api/html/functions_vars_0x67.html
new file mode 100644
index 0000000..25d880e
--- /dev/null
+++ b/doc/api/html/functions_vars_0x67.html
@@ -0,0 +1,124 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li class="current"><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>g
+: <a class="el" href="structnfftf__plan.html#a35e6b39bfe06e5a6e56cde2458cf79a7">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539">nfft_plan</a>
+, <a class="el" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540">fpt_step_</a>
+, <a class="el" href="structnfftl__plan.html#aa442607f39ed01885dbeb286b18b1b77">nfftl_plan</a>
+</li>
+<li>g1
+: <a class="el" href="structnfctf__plan.html#a44a225766135ec7d1bbe8e8e7631faa3">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#a597e9fd4dddb36748c5e33ee1f058835">nfct_plan</a>
+, <a class="el" href="structnfftf__plan.html#a01420d5d785228ee24a4819d2b0454a2">nfftf_plan</a>
+, <a class="el" href="structnfctl__plan.html#afbe6522294161b247058e61e9ef64d78">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a279687997f16d0fb839928f472307b39">nfstf_plan</a>
+, <a class="el" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda">nfft_plan</a>
+, <a class="el" href="structnfst__plan.html#a06cd5d11b13d590c9ab3a88d93b21fb2">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#ac54e606a9b0c7c6b526fb3d44d28482a">nfstl_plan</a>
+, <a class="el" href="structnfftl__plan.html#a71a99cd893a823d1a7edb139650b2afe">nfftl_plan</a>
+</li>
+<li>g2
+: <a class="el" href="structnfftl__plan.html#aea25feca0bccefe267c0a9eb75390ed6">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a4a70d593fb1704dda85e2392c77ea3bc">nfctf_plan</a>
+, <a class="el" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78">nfft_plan</a>
+, <a class="el" href="structnfct__plan.html#ac4c375e593da728a4e7477f76ff12031">nfct_plan</a>
+, <a class="el" href="structnfstf__plan.html#a11f05420be226a83aed2e8c41a1b9bd3">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a7b67e2cf657227ae46d13fa239d534f7">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a0e91b301bcd4ce83aecdda2b0f7712ed">nfstl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a365bf7b6d6fa04bfb4206f8ec647eb14">nfctl_plan</a>
+, <a class="el" href="structnfftf__plan.html#a4fda15d8d9edaa8de0636b2a458bf763">nfftf_plan</a>
+</li>
+<li>g_hat
+: <a class="el" href="structnfftf__plan.html#aad01cb28079405090eaa1fce590c0c09">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#af708c1c479196fb4e3ded3d289085b5e">nfftl_plan</a>
+</li>
+<li>gamma
+: <a class="el" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2">nfsft_wisdom</a>
+, <a class="el" href="structfpt__data__.html#a13aaa57c27f3ab5eab4c28d47d501723">fpt_data_</a>
+</li>
+<li>gamma_m1
+: <a class="el" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a">fpt_data_</a>
+</li>
+<li>gammaN
+: <a class="el" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a">fpt_data_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x69.html b/doc/api/html/functions_vars_0x69.html
new file mode 100644
index 0000000..8735559
--- /dev/null
+++ b/doc/api/html/functions_vars_0x69.html
@@ -0,0 +1,102 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li class="current"><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>idx0
+: <a class="el" href="structtaylor__plan.html#a3d3e69bc61775fee556801bd66a47c19">taylor_plan</a>
+</li>
+<li>index_sparse_to_full
+: <a class="el" href="structnsfftf__plan.html#a3e6968100cf6a0d5950ccdcb1744788f">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aaaf6f8d00374e91ec3baf983583b51bd">nsfftl_plan</a>
+, <a class="el" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55">nsfft_plan</a>
+</li>
+<li>index_x
+: <a class="el" href="structnfftf__plan.html#a1dadaac164fe9f9be856d47a53498335">nfftf_plan</a>
+, <a class="el" href="structnfftl__plan.html#ad98e162c23583ec8f010aacf9ec06767">nfftl_plan</a>
+, <a class="el" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735">nfft_plan</a>
+</li>
+<li>initialized
+: <a class="el" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740">nfsft_wisdom</a>
+</li>
+<li>internal_fpt_set
+: <a class="el" href="structnfsoftl__plan__.html#a8cf750d58de22209962bd9cb96f48864">nfsoftl_plan_</a>
+, <a class="el" href="structnfsoftf__plan__.html#a686809f1397b113322b77ef50c8c0ef7">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#a39a07d81bf6117dca5530d76beaf6b31">nfsoft_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x6a.html b/doc/api/html/functions_vars_0x6a.html
new file mode 100644
index 0000000..7ec2269
--- /dev/null
+++ b/doc/api/html/functions_vars_0x6a.html
@@ -0,0 +1,86 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li class="current"><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_j"></a>- j -</h3><ul>
+<li>J
+: <a class="el" href="structnsfftf__plan.html#a24e51336c8b6f1814932e2bad306179b">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a6e3abb9e765b8f40b0f398a85c07d8af">nsfftl_plan</a>
+, <a class="el" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52">nsfft_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x6b.html b/doc/api/html/functions_vars_0x6b.html
new file mode 100644
index 0000000..975f3d8
--- /dev/null
+++ b/doc/api/html/functions_vars_0x6b.html
@@ -0,0 +1,104 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li class="current"><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>k
+: <a class="el" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8">fastsum_plan_</a>
+</li>
+<li>K
+: <a class="el" href="structnfftf__plan.html#aad0836b3e8e4a98b27729d960b593caa">nfftf_plan</a>
+, <a class="el" href="structnfftl__plan.html#ae6f8a76f202fe1816cfe1004a9ce9a0d">nfftl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a9d2bd4132187064cf5f6c301f7ce5125">nnfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4">nfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a574648230ce316a55282f362774aa615">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#a4ee39bebbff40746c2701ade2e13f1f8">nnfft_plan</a>
+</li>
+<li>k_start
+: <a class="el" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334">fpt_data_</a>
+</li>
+<li>kernel_param
+: <a class="el" href="structfastsum__plan__.html#a37cbe7b34fce3f90419fb45ab74aaa34">fastsum_plan_</a>
+</li>
+<li>kinds
+: <a class="el" href="structfpt__set__s__.html#a15eafd93be80eeea02173a9042e303d3">fpt_set_s_</a>
+</li>
+<li>kindsr
+: <a class="el" href="structfpt__set__s__.html#afd6508cc584ac06b9f679be441b6e7f6">fpt_set_s_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x6c.html b/doc/api/html/functions_vars_0x6c.html
new file mode 100644
index 0000000..4b09c0c
--- /dev/null
+++ b/doc/api/html/functions_vars_0x6c.html
@@ -0,0 +1,84 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li class="current"><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>lengths
+: <a class="el" href="structfpt__set__s__.html#a26355113f8348c270cd02bc196fad681">fpt_set_s_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x6d.html b/doc/api/html/functions_vars_0x6d.html
new file mode 100644
index 0000000..feb7ae2
--- /dev/null
+++ b/doc/api/html/functions_vars_0x6d.html
@@ -0,0 +1,245 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li class="current"><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>m
+: <a class="el" href="structnfftf__plan.html#a9002bd9a063311155ae2a8c94c076e9d">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a255a1e1526bba8643690e0aa9c5b90c6">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#ac3aacf128a897c132809411ef9d41d7d">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a55a5e4a962d8e01d7c0282f916bacb8c">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#a15e9f66b0447148fcce4af9eafa2f9ed">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#af7f40661f8b29323b5b0f1ad5a7290a4">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#ac4741304d0030c88a8244dd1d8171b65">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a0a2a679bf0d1c90511a52c31f5a537f1">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a2082f917534e3a8590d5a19b4377a256">nnfftl_plan</a>
+</li>
+<li>M
+: <a class="el" href="structfpt__set__s__.html#a2387122a1e670e2e61b1699458224804">fpt_set_s_</a>
+</li>
+<li>m
+: <a class="el" href="structnfstf__plan.html#a6d228a85b702490f205c8983c15e33fe">nfstf_plan</a>
+</li>
+<li>M
+: <a class="el" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa">fgt_plan</a>
+</li>
+<li>M_total
+: <a class="el" href="structnfftf__mv__plan__double.html#a37eb6ac713dbf1205f2dce0fa39107df">nfftf_mv_plan_double</a>
+, <a class="el" href="structnnfftl__plan.html#a74e7fb29427e5a4d9b383ab278f513a2">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a6a75a26e5d6476595bde5b03d6293a0a">nsfftf_plan</a>
+, <a class="el" href="structnfftf__plan.html#a3823921949eded81bde776f57eba8052">nfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#af95027b3922c48e54dc5e5417d3a45e8">nsfftl_plan</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#a2cb2df3ae5db867f38cb75b7c88de7fe">nfft_mv_plan_complex</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#ac9fffb187c8a840eb83939ba4d710f13">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#a03c2aa160944a42e0f3116e7545ed20f">mrif_inh_3d_plan</a>
+, <a class="el" href="structnfft__mv__plan__double.html#af540ad90ef6b30fab022c95e8a5dcd58">nfft_mv_plan_double</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09">mri_inh_2d1d_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b">mri_inh_3d_plan</a>
+, <a class="el" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6">nfft_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a241e8def5a65484080b01871c12851b3">mril_inh_2d1d_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#a9a1093b920fb4468b59c7120a7e1ceb5">mril_inh_3d_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#aa0175f63a2b2f5c80bb3153008315871">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfsftf__plan.html#a5df19929f38064f36893840388ef975e">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed">nfsft_plan</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#ac7366d2d09a0b3aed5884b50d10ef478">nfftl_mv_plan_double</a>
+, <a class="el" href="structnfsftl__plan.html#aa1b43495afe03e88e419961428769246">nfsftl_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a6fc89775998b5353b0f674b75b3638ae">nfsoftf_plan_</a>
+, <a class="el" href="structnfftl__plan.html#a95e2db75883c6586f31b8db8c8bf8cf8">nfftl_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#a33cddd8977c92ba6641a1c4a18318fd6">nfsoftl_plan_</a>
+, <a class="el" href="structnfctf__plan.html#a86276f6249784d5121d83453818709e9">nfctf_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f">fastsum_plan_</a>
+, <a class="el" href="structnfct__plan.html#ab201c4e89753b167954e7cb5f34a321d">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#ac4ad3000c4c3293f3d86b90a926410a9">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a936082c69e582e36fb51ae452cd08fc3">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#ae4d5aeae7ea312bf70720bafd4fb3882">nfstl_plan</a>
+, <a class="el" href="structnfftf__mv__plan__complex.html#ab437c32f06548b3728bcb2b39681acd8">nfftf_mv_plan_complex</a>
+, <a class="el" href="structnnfftf__plan.html#a6908aa62ea014b3b60e047a99f6adb2b">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c">nnfft_plan</a>
+</li>
+<li>MEASURE_TIME_t
+: <a class="el" href="structnfftf__plan.html#afb81143dbd42553ed90440afc406c909">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#ae8cf45feec672cd7e6f42a1b6a091a5c">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a3621b32cd8ea93b2bcb8db6ce40cd5bb">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#acd69baad39feaa27f34c063960b173f0">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2c6b9d81be06f2e557c410310420809f">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a369d8545639fccbf73f9daf7dcb94fe8">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a74e5be807909e0a443ea9b48e0a7da4b">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a47c6a3aba310b4f18d7ba5a7107fc168">nfstl_plan</a>
+, <a class="el" href="structnfsftf__plan.html#af36dbcf3d4f12bb85ac6c167aabf8768">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#ae2870ad5b902cb4724c2ab47e5e012e1">nfsftl_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d">fastsum_plan_</a>
+</li>
+<li>mv
+: <a class="el" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a3da97d0d8d896d9da6a95a68a6f65442">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a56e946ecb94fc633a9d518d347725c4c">solverl_plan_double</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a791fe047a3b45cce8049e83d422b8414">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a320424336d0f74f0d24cc67053dea7ca">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a65d97330deb4cd9de78e4b9aa85afa62">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a02395790ff1d9e7ffc2e3fae3b927df0">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#abb0996d6ed2cd627dc28fb7f5c18007a">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a18f9b22f7f221aedc3dabab2cb07e633">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#afa903e9a436fc17da89b08377a6a733e">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structsolverf__plan__complex.html#a519286afbd99d020738a92e03c320a18">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#aaa4fedc5005e075e7f707770384be114">solverf_plan_double</a>
+</li>
+<li>mv1
+: <a class="el" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766">fastsum_plan_</a>
+</li>
+<li>mv2
+: <a class="el" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78">fastsum_plan_</a>
+</li>
+<li>mv_adjoint
+: <a class="el" href="structnfsftl__plan.html#a162601fc8aa3248af806908e160d3c14">nfsftl_plan</a>
+, <a class="el" href="structnfftf__plan.html#a9f8b111e42ef7ba609879d4a6983695d">nfftf_plan</a>
+, <a class="el" href="structnfftf__mv__plan__complex.html#acbff2532fc4d66cf92321be33ef6498f">nfftf_mv_plan_complex</a>
+, <a class="el" href="structnfftf__mv__plan__double.html#a3d0e47cf55f04c89523abd46f361ef91">nfftf_mv_plan_double</a>
+, <a class="el" href="structnfsoftf__plan__.html#a858269faf194eca2137b65f2a5a8c0fb">nfsoftf_plan_</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#add14030aae4920f7ca71ecf1efde00a3">nfft_mv_plan_complex</a>
+, <a class="el" href="structnfft__mv__plan__double.html#a92e4080bcb7241befa250be9d8f9a1cd">nfft_mv_plan_double</a>
+, <a class="el" href="structnfft__plan.html#abbe724645c96ef34c3e98d821f6648a3">nfft_plan</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#a804a64f2fb25ad91487fbcc186d784e0">nfftl_mv_plan_double</a>
+, <a class="el" href="structnfftl__plan.html#a3d343b79e00dbb8cd4984143a03ddf53">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a876dda7208fd0634f426c1e5cb04b77f">nfctf_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#a33d5fb830b3021ddb85320139be034b8">nfsoft_plan_</a>
+, <a class="el" href="structnfctl__plan.html#a99191484b327c3283f3aed8c3e9a3d70">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a604a83ef64c291c6f8b23d45f620f2c7">nfstf_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#a2d189c2b7f8b5bf635cce01354ef253e">mril_inh_3d_plan</a>
+, <a class="el" href="structnfst__plan.html#aedfe6da9afb5dc0457cc4f2197034fc0">nfst_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a6259dd5746b911632df1286d0654eabe">mril_inh_2d1d_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#a2f7123e0975b4a7cd693d01abf117949">nfsoftl_plan_</a>
+, <a class="el" href="structnnfftf__plan.html#adcff4592ce1838e342b92633e9f8de42">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#aa6098f51f9c69196ca782a1b0f8feeba">nnfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a8b4c8c903e7b24610e2d2e0c9bb62705">nsfftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#a14cc99f56f6a61958aef26f80aac6f12">nfsft_plan</a>
+, <a class="el" href="structnsfft__plan.html#a9761ac166f3ec93197e8e409ba78fb4f">nsfft_plan</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#aea23a3331d423e70f2cbbeee71303906">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#afe427225384a2d226c3cb85cf9aa4042">mri_inh_2d1d_plan</a>
+, <a class="el" href="structnfstl__plan.html#a1eca782b8267b78a6effc382c0a5b9f4">nfstl_plan</a>
+, <a class="el" href="structnfsftf__plan.html#af4deec395e0a4650b1e108677b787900">nfsftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a0afd6961b8b0b24b526e034d89874c7c">nnfft_plan</a>
+, <a class="el" href="structnfct__plan.html#aab8ee071a4e254cbf94a03689ed3127f">nfct_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a658b4a71ff29aa1cc2febc66d6c175bd">nsfftl_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#afa2e143e704b701e9a0ee1d795f46b5b">mri_inh_3d_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#a5f31b4b9a03ac8f9a503c1ae42cad758">nfftl_mv_plan_complex</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#ac765b0a8797a3fd31b58133be9ff280b">mrif_inh_3d_plan</a>
+</li>
+<li>mv_trafo
+: <a class="el" href="structnfftl__plan.html#a0f05caab33b6f473626e74f44356e3fc">nfftl_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a417f0b7f48ab77d5af34ed1da9ba95c9">nfsftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#ac2beab555e72c8f10921db21dc094069">nnfft_plan</a>
+, <a class="el" href="structnfstl__plan.html#adbe7e6be1061160223c10b6567efda40">nfstl_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#a4d573c341aae7a4e034944772478658c">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfsft__plan.html#a01bf30c31f886ffa9d486c010a452051">nfsft_plan</a>
+, <a class="el" href="structnfft__mv__plan__double.html#a920771039e5cf889d6a29a243e6922e3">nfft_mv_plan_double</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#a4cad33b38f4d5bc54b8d25d90913ab44">mri_inh_2d1d_plan</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#acdbe3a414d9c87baba03db3d873b864c">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structnfftf__mv__plan__double.html#a130252f4a197b65416311097880cff4f">nfftf_mv_plan_double</a>
+, <a class="el" href="structmri__inh__3d__plan.html#a780818802d5bfdc4d4174a3637254fd5">mri_inh_3d_plan</a>
+, <a class="el" href="structnfftf__mv__plan__complex.html#a48e28caf604132d02999d1dc0f5dc9a0">nfftf_mv_plan_complex</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#a4763b4f8f1b5f574d601289ab3cbcfa8">mrif_inh_3d_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aad46757ac44a32dbb04d0e453454acac">nsfftl_plan</a>
+, <a class="el" href="structnfft__plan.html#a9ebd66f2964cca6a02fc50d640df3557">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a7a532e28539e1ac2f49413248ae76a67">nfctf_plan</a>
+, <a class="el" href="structnnfftf__plan.html#aea4c2210478af70a540da01e0c0a1c7b">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a39b1bdd9a3eacd4ff3b809eeef01f364">nnfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a42f0c32b080677a57f82ccf23d018da2">nfctl_plan</a>
+, <a class="el" href="structnfst__plan.html#a4a3b2ecc26204b3087d1c19b7857943f">nfst_plan</a>
+, <a class="el" href="structnfsoft__plan__.html#ae7c72bdbce93cb99dcbd14d764d08502">nfsoft_plan_</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#aff66252bd97fa6d73d7e137d888bb625">nfftl_mv_plan_double</a>
+, <a class="el" href="structnfsftl__plan.html#ab1a7dae6c0f2b18d4eda2e32195bba95">nfsftl_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a7dbc7cd7b733b5850a59f35aa0f959d1">mril_inh_2d1d_plan</a>
+, <a class="el" href="structnfftf__plan.html#ab09b1d93f60895791076e1e41241ecb0">nfftf_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a0291622a1f08aff56cc126ca64364d85">nfsoftf_plan_</a>
+, <a class="el" href="structnsfft__plan.html#abbab5fc009e68a329bbebee4904e53a5">nsfft_plan</a>
+, <a class="el" href="structnfct__plan.html#a5f9802e95bfc2ae69f22e91c1fe47778">nfct_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#aeab94862046b7688470f3f1d78ca927d">nfsoftl_plan_</a>
+, <a class="el" href="structnsfftf__plan.html#ac698248a376958d67a10beecfdc3aa36">nsfftf_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#a61eec020c68a2b36cff4acb6dd4dcf96">mril_inh_3d_plan</a>
+, <a class="el" href="structnfstf__plan.html#aa960f82c35501acf5237b5ed49f7fe57">nfstf_plan</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#a56bf298c03c4aaeb6b4aaf7ed5cca57e">nfft_mv_plan_complex</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x6e.html b/doc/api/html/functions_vars_0x6e.html
new file mode 100644
index 0000000..b4e8522
--- /dev/null
+++ b/doc/api/html/functions_vars_0x6e.html
@@ -0,0 +1,228 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li class="current"><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>N
+: <a class="el" href="structnfftf__plan.html#a27caa84ad525683d89b5963defadc98d">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#ade6a750c99253ddfe82c08e439094507">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b">nfst_plan</a>
+, <a class="el" href="structfpt__set__s__.html#aa353a04683b31bed668ee490d5df1b81">fpt_set_s_</a>
+, <a class="el" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87">fgt_plan</a>
+, <a class="el" href="structnfstl__plan.html#a83b7013eb7ce3b1743ba45a2546a36c0">nfstl_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfftf__plan.html#a6971ea46e4044daa773f19c8bd8d4a0b">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae">nfft_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfct__plan.html#ad4d0600d8b0ee9d41bff22a7d63e64cf">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#aefd2c40e607f75679bb61926881d4488">nnfftf_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfftl__plan.html#a58140f5f6ea4ca1c0305cbcec55437bd">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a9c8ffbb61c7f5ad5d0a5545bdff83270">nfctf_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7">nnfft_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfct__plan.html#a0ad3d47d659b3641bb90eca6e56f9047">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a6d0bd4de4d2b90c38010bb4b8d77561b">nfctl_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfftl__plan.html#a36e045f670b95d68f5c2e04b55a1c220">nfftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#a4497138b087187f70d19f107b1c80204">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a7fb433be8689db7816a3667620a294f3">nnfftl_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfstf__plan.html#ade7cdc871c9633a324774001bd809f49">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2">nfst_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfsftf__plan.html#a09b711da345edffb8a71b5b8a8bca6d0">nfsftf_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnfstl__plan.html#a10456ed98cb22787f2469e1d20903c8c">nfstl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#ae849996a09be847a35be6c1ea018d988">nnfftf_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfstf__plan.html#a3c13e4fbc7dba10012ac853e2cde12d0">nfstf_plan</a>
+, <a class="el" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403">nfsft_plan</a>
+</li>
+<li>n
+: <a class="el" href="structnnfft__plan.html#a6b2de2633dd4347692e96887f98c1020">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#ad8d9bc5c5ae9f1ee6c813839ff831d97">nnfftl_plan</a>
+</li>
+<li>N
+: <a class="el" href="structnfsftl__plan.html#a8740f26f76947fcc07a636002217a8db">nfsftl_plan</a>
+</li>
+<li>n
+: <a class="el" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1">fgt_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084">fastsum_plan_</a>
+</li>
+<li>N1
+: <a class="el" href="structnnfftf__plan.html#a9f6a5274cee5803505df5ad65d4c12fd">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a693c5d648b1781dce21d24636aac6554">nnfftl_plan</a>
+</li>
+<li>N_MAX
+: <a class="el" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51">nfsft_wisdom</a>
+</li>
+<li>N_total
+: <a class="el" href="structnnfftl__plan.html#a0e0827be03d503291f4a6d76c7b690d7">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2">nnfft_plan</a>
+, <a class="el" href="structnnfftf__plan.html#afd4cb1ff03f227c4e9e1dd9da21ec34e">nnfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505">nsfft_plan</a>
+, <a class="el" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#a090c82bf91f18bc68a389c06fb347cec">nfsftl_plan</a>
+, <a class="el" href="structnfctl__plan.html#ac31afd2bc4a0fc94cd9ec08e302f84ac">nfctl_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#aa3a702dbaed1e34d090e23b75c9949d6">nfsoftf_plan_</a>
+, <a class="el" href="structmrif__inh__2d1d__plan.html#afad39dcd7d77c81247bcf5e4abc1cdaa">mrif_inh_2d1d_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#a397e113cdbedc1e964657131c9a9dea3">nfsoftl_plan_</a>
+, <a class="el" href="structnfftl__mv__plan__double.html#a63a371e62727c804a195cf2315b79a41">nfftl_mv_plan_double</a>
+</li>
+<li>n_total
+: <a class="el" href="structnfftf__plan.html#a79aefed96e856d86d0fb74f873ae09ba">nfftf_plan</a>
+</li>
+<li>N_total
+: <a class="el" href="structnfftf__mv__plan__complex.html#a65ce9742c15bad2711e8f8151bbf941c">nfftf_mv_plan_complex</a>
+</li>
+<li>n_total
+: <a class="el" href="structnfftl__plan.html#a58ea89cc9b78b32c8c1775e8b1277ad8">nfftl_plan</a>
+</li>
+<li>N_total
+: <a class="el" href="structnfftf__mv__plan__double.html#a1df474111c1d61261d53455e05bc6c63">nfftf_mv_plan_double</a>
+, <a class="el" href="structnfftf__plan.html#a65855ec1dec6f17eb46d6762ad6ff942">nfftf_plan</a>
+, <a class="el" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8">nfft_mv_plan_complex</a>
+, <a class="el" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41">nfft_mv_plan_double</a>
+, <a class="el" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22">nfft_plan</a>
+, <a class="el" href="structnfftl__mv__plan__complex.html#a469c0077659dda97651e075da143a398">nfftl_mv_plan_complex</a>
+, <a class="el" href="structnfftl__plan.html#a747b6aee3ae47ad66391027bc13789af">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a618b4315972d4ef612c772649d470ff9">nfctf_plan</a>
+, <a class="el" href="structmril__inh__2d1d__plan.html#a4114df78a52f5e4a1a12a13678a9cb6c">mril_inh_2d1d_plan</a>
+, <a class="el" href="structmril__inh__3d__plan.html#a79e477483b67862d2dd7fcb5432f7651">mril_inh_3d_plan</a>
+, <a class="el" href="structmrif__inh__3d__plan.html#a7d51e6be67c5f2bc4d1a996e10228258">mrif_inh_3d_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aa0e8f48c39f40e781da203659ec018ab">nsfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#afe49ebe4fbbb3bd90b12e939c06adfab">nsfftf_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976">fastsum_plan_</a>
+, <a class="el" href="structnfstl__plan.html#a87f57bdfd9ba4415370ec796329cc1de">nfstl_plan</a>
+, <a class="el" href="structnfct__plan.html#abc66ae61c54a049868c62288623d4a6b">nfct_plan</a>
+, <a class="el" href="structnfstf__plan.html#aea7fa284fa9aaa4e264c9c07844b5442">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed">nfst_plan</a>
+</li>
+<li>n_total
+: <a class="el" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7">nfft_plan</a>
+</li>
+<li>N_total
+: <a class="el" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e">nfsoft_plan_</a>
+, <a class="el" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b">mri_inh_2d1d_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a90ee6582e535312ac761e4e6fbaad0c0">nfsftf_plan</a>
+, <a class="el" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb86d92e12">mri_inh_3d_plan</a>
+</li>
+<li>nfct_flags
+: <a class="el" href="structnfctl__plan.html#a292db653f04805f907737a480f681888">nfctl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a484df328b87ae06b6c47b03298e18dbd">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#ae2a2e493b2938fe9b22b0506765f30cf">nfct_plan</a>
+</li>
+<li>nfft_flags
+: <a class="el" href="structnfftl__plan.html#a375f14a65c5686803270dbb3cfd1c371">nfftl_plan</a>
+, <a class="el" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d">nfft_plan</a>
+, <a class="el" href="structnfftf__plan.html#adaaa66e5b89d9f65ce94b56617574518">nfftf_plan</a>
+</li>
+<li>nfst_flags
+: <a class="el" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a15bb194b8a4fe39aca1b5be9f38d7175">nfstl_plan</a>
+, <a class="el" href="structnfstf__plan.html#aa23ef32254d98b76dfadbe7fa439f8c3">nfstf_plan</a>
+</li>
+<li>nnfft_flags
+: <a class="el" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a1a9bf1751caf842fb44f70a4cbab8744">nnfftl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#acebd9e667d51a5293f977642f031724e">nnfftf_plan</a>
+</li>
+<li>nplan1
+: <a class="el" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2">fgt_plan</a>
+</li>
+<li>nplan2
+: <a class="el" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163">fgt_plan</a>
+</li>
+<li>Ns
+: <a class="el" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b">fpt_step_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x70.html b/doc/api/html/functions_vars_0x70.html
new file mode 100644
index 0000000..3a5af7f
--- /dev/null
+++ b/doc/api/html/functions_vars_0x70.html
@@ -0,0 +1,167 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li class="current"><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>p
+: <a class="el" href="structtaylor__plan.html#afd71182be8b8fcfa66155b0be4fb94ee">taylor_plan</a>
+, <a class="el" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73">fgt_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf">fastsum_plan_</a>
+</li>
+<li>p_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#ac62464d925e739f79c28059cd1e59faa">solverf_plan_complex</a>
+, <a class="el" href="structsolverl__plan__complex.html#aa7833544d06eb2d71042da5fa06b9c5c">solverl_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a803178524d842ae2944fb5f3ce9d4939">solverl_plan_double</a>
+, <a class="el" href="structsolverf__plan__double.html#a6987fb320cd6798faabe9dfd92a494f2">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce">solver_plan_complex</a>
+, <a class="el" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677">solver_plan_double</a>
+</li>
+<li>p_iter
+: <a class="el" href="structimri__inh__3d__adjoint__plan.html#ade134a86a60d2538595acc2fafb83e41">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a6e1fc4f4d7adf8aa89cde17cf002f0f6">infsft_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#afa0571b6b2c75979bc6a8ea75dc13efc">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a6c81df2130d05bcbbcd6646cd27b671e">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a53b6ba348be2011c1cfecdb9f16829fd">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a74ee726c5c0916fde59e77ca51d319eb">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aafe496b74fca5e5d96ce258bb3da1ffc">imri_inh_2d1d_adjoint_plan</a>
+</li>
+<li>p_nfft
+: <a class="el" href="structnfsoftf__plan__.html#a1be8436a257f63ab4c27441bf714671d">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#ac1230a81665ed7aa68cb7b4bc3a0c0c1">nfsoftl_plan_</a>
+</li>
+<li>plan_nfft
+: <a class="el" href="structnfsftf__plan.html#a87927611482f2fb3421ea2279993f94a">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e">nfsft_plan</a>
+, <a class="el" href="structnfsftl__plan.html#a2c016b15b6b33c44b8218c43619ef784">nfsftl_plan</a>
+</li>
+<li>plans_dct2
+: <a class="el" href="structfpt__set__s__.html#aead22ae71c82ad37da07f6166bf53fbc">fpt_set_s_</a>
+</li>
+<li>plans_dct3
+: <a class="el" href="structfpt__set__s__.html#a5f146823d105906abf0cdc4c5f9638dc">fpt_set_s_</a>
+</li>
+<li>pre_cexp
+: <a class="el" href="structfgt__plan.html#ad7d9387df7df72e3d5d628d7e429c2a2">fgt_plan</a>
+</li>
+<li>pre_K
+: <a class="el" href="structfastsum__plan__.html#a2ac8e8bdf57c75a916b1f4ef36ca513e">fastsum_plan_</a>
+</li>
+<li>psi
+: <a class="el" href="structnfctl__plan.html#a59712f0b5712ba9020540b7bf355caea">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a96d6ede1036cae0a4df7fbf7ba7b8034">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a59c1ef7493650838cf31086a46ff2e3f">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a3fb3fd27fa2c3c907c4f1e05a183598d">nfstl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a10747f86b86f7fa64539b46914344877">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4">nnfft_plan</a>
+, <a class="el" href="structnfct__plan.html#ad3886151e655110a1c5ba71a66439e2b">nfct_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a8644e94ccefb0b3001442b4df86dae5d">nnfftl_plan</a>
+, <a class="el" href="structnfftf__plan.html#a84402b4c947d57abef20e5f2db9110e3">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a33955562ecf9b48f4283f869c77f96ff">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a748631060895d5106d11cdf4fce3ee60">nfctf_plan</a>
+</li>
+<li>psi_index_f
+: <a class="el" href="structnfst__plan.html#a028609e96fa5f10d4197e4b50312180c">nfst_plan</a>
+, <a class="el" href="structnfstl__plan.html#a46d8f0fefc63d3ba6f1811f41bc9a7d8">nfstl_plan</a>
+, <a class="el" href="structnfstf__plan.html#ad20fa3e6bdb829247c3585639a0b086d">nfstf_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2ec8c4542c9fafbaf90b469ab8d06d59">nfctl_plan</a>
+, <a class="el" href="structnfft__plan.html#a2ed144cf7d6043a93c07b6f6ba7bbe2a">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a713765bd7f9b488ac995de023de2ead1">nfftl_plan</a>
+, <a class="el" href="structnfctf__plan.html#aa33238f59c2282eea4b81d8ecbba1417">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#a59633568fd7d1cb01df5f49f08ad352c">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a3788434fa045ecd49dd89d116bb40c47">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#abf4204a1a31afd35d490ca4ef42bd596">nnfftl_plan</a>
+, <a class="el" href="structnfftf__plan.html#ac0073e7c6389e9141d555bf58e2d0b59">nfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a2ada74222958e630640e6456e9bd2a8d">nnfft_plan</a>
+</li>
+<li>psi_index_g
+: <a class="el" href="structnnfftl__plan.html#a4b53c60fb307d01e01931ef812974a3c">nnfftl_plan</a>
+, <a class="el" href="structnfct__plan.html#adcd209b5cbbfae40c5490a1141b7acda">nfct_plan</a>
+, <a class="el" href="structnnfft__plan.html#aa0b2be91e59a45c809c68398ceb41232">nnfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#a60f4fbcf2fb3a48a037e5cda4608f535">nfctf_plan</a>
+, <a class="el" href="structnfstf__plan.html#a3ece0ce2dd8ad2e41852ac59df3ad481">nfstf_plan</a>
+, <a class="el" href="structnfftf__plan.html#a04f8c8d2075057efa3b41381705084c6">nfftf_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2e593f732ad26f9d681797a85a7293cf">nfctl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#aa6d0ce899b41da6981f6863fc242559d">nnfftf_plan</a>
+, <a class="el" href="structnfstl__plan.html#a773fbd9160ac14e6972a4b5be1b5113d">nfstl_plan</a>
+, <a class="el" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a">nfft_plan</a>
+, <a class="el" href="structnfst__plan.html#a2d2a4a4d3c7ff12f35045b5466f41811">nfst_plan</a>
+, <a class="el" href="structnfftl__plan.html#ad3ff1d5c721f0ec4e81aa341b29abc15">nfftl_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x72.html b/doc/api/html/functions_vars_0x72.html
new file mode 100644
index 0000000..ed2c9fe
--- /dev/null
+++ b/doc/api/html/functions_vars_0x72.html
@@ -0,0 +1,103 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li class="current"><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>r_act_nfft_plan
+: <a class="el" href="structnsfftf__plan.html#a844f94caf050adea11133a52dcbaccdc">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a0a1b5e59c9ff83bc7b2d2894f96edd23">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#ad40799f013c6b35165c2bc76eb7cb32e">nsfftl_plan</a>
+</li>
+<li>r_hat_iter
+: <a class="el" href="structinfsft__adjoint__plan.html#a781b1438bf0c8d47f51b30551f982426">infsft_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a4739f3543d8e4e7af745c017a163516f">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a6088e9949fa966d839e8feadfb34596e">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a314c60168395a677ea88ff67dcaa2ec9">infft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#acbea7a40d34bbca7688da41378140926">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a3bb77b67c3779716d767e76b8661efbc">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#abd086bc019b356986e38f3db8039051f">infst_adjoint_plan</a>
+</li>
+<li>r_iter
+: <a class="el" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#aec8fcaf36c7ce234e76970dc4b4ec9c9">solverl_plan_complex</a>
+, <a class="el" href="structsolverf__plan__complex.html#a4ca8ff73e59386ea3d5003c1ad27459d">solverf_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a9715db1a24435d9dd2bc76371d92174e">solverl_plan_double</a>
+, <a class="el" href="structsolverf__plan__double.html#a6261a160be099d721856fab16f31cf22">solverf_plan_double</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x73.html b/doc/api/html/functions_vars_0x73.html
new file mode 100644
index 0000000..d205f68
--- /dev/null
+++ b/doc/api/html/functions_vars_0x73.html
@@ -0,0 +1,144 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li class="current"><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>set
+: <a class="el" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2">nfsft_wisdom</a>
+</li>
+<li>set_nfft_plan_1d
+: <a class="el" href="structnsfftf__plan.html#aaadc0908c69e235bc60ec3c7b28bca47">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a89a23c26f73280c5945e62f8966195fb">nsfftl_plan</a>
+, <a class="el" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc">nsfft_plan</a>
+</li>
+<li>set_nfft_plan_2d
+: <a class="el" href="structnsfftf__plan.html#a4ee3a7ef05c4fdbc161d24db51be3122">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aa7ae0c8a9b2f404bd1f8ce4820d7cf43">nsfftl_plan</a>
+</li>
+<li>sigma
+: <a class="el" href="structnfftf__plan.html#a20d669812b6acf9a8bda34cb659d61dd">nfftf_plan</a>
+, <a class="el" href="structnfstl__plan.html#a3c50de01911ed86a66d15ecd79874e21">nfstl_plan</a>
+, <a class="el" href="structnnfftf__plan.html#a858114a52835ef9cae070f6017625a4c">nnfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a09340f6465c23f3d94636f4f0da30f8a">nfft_plan</a>
+, <a class="el" href="structnnfft__plan.html#a6a3e11978f1e2c6279bd12785ef56b5d">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a899c16c2e59f2566a9f17d84f64af952">nnfftl_plan</a>
+, <a class="el" href="structnfftl__plan.html#a149fdaed10fafdb3bf414110ad233b7c">nfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#ab7b68bdae0872917b559577ac2f53402">nsfftf_plan</a>
+, <a class="el" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954">nsfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#acfc4ccc79c6fa50199500a790cb833b2">nfctf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#aa55c79623980b8334e9fcb50fa55ecd3">nsfftl_plan</a>
+, <a class="el" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666">fgt_plan</a>
+, <a class="el" href="structnfct__plan.html#a56c9f580f79fb7605ae21bcbb729a8b9">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a629ae83677e311095d4c24ad4826e2ab">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a8d8b3093a73c09aac44cd8f55708ef27">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a7a8028a0e7348e5fa7717eebf07b76d1">nfst_plan</a>
+</li>
+<li>size_psi
+: <a class="el" href="structnnfftf__plan.html#a67aae8bda525717c1628aa53fca9b7de">nnfftf_plan</a>
+, <a class="el" href="structnnfftl__plan.html#aed13a1f152cb6febf2ce643c204d8b9a">nnfftl_plan</a>
+, <a class="el" href="structnnfft__plan.html#af2992b9cb57809fb90a68dbaea36d79a">nnfft_plan</a>
+, <a class="el" href="structnfstl__plan.html#a975ebfbce1679c3ad3d8cc06e81c5645">nfstl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a2a01c089b030159c77a9bdcb46d1b183">nfctf_plan</a>
+, <a class="el" href="structnfct__plan.html#ab03d9f17b3fb46eb14439745e8f7994b">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a1b8cf9260caf345c8ecb5e6de726387b">nfctl_plan</a>
+, <a class="el" href="structnfstf__plan.html#a4c9f0923fcf290197cee1550dc9a3665">nfstf_plan</a>
+, <a class="el" href="structnfst__plan.html#a1780e54f9fed43e92c22a1e70274e7ad">nfst_plan</a>
+</li>
+<li>spline_coeffs
+: <a class="el" href="structnfstl__plan.html#a7abc2fedc757d9b2b5f985377f99bfe7">nfstl_plan</a>
+, <a class="el" href="structnnfft__plan.html#ac3e3c4b14a5227a96b8627faf6933652">nnfft_plan</a>
+, <a class="el" href="structnfstf__plan.html#a64c5addda16e3d789184af183900db21">nfstf_plan</a>
+, <a class="el" href="structnfftf__plan.html#a65c65de370e29b24ba0da097d20ee262">nfftf_plan</a>
+, <a class="el" href="structnnfftf__plan.html#acb221c7694859d0828bcc1f56154cd69">nnfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a3aaf44c4f0769644075d9fc5ed60afa0">nfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#a971f190366e40c729899ff71d2a60682">nfftl_plan</a>
+, <a class="el" href="structnfct__plan.html#a53242b3a71b8997bdcd173777146c427">nfct_plan</a>
+, <a class="el" href="structnfctl__plan.html#a38de3cc7a337907a01ae2701ea335d75">nfctl_plan</a>
+, <a class="el" href="structnfctf__plan.html#a25a3208574495231141c9c407658f0cf">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#a23bec4401a652efc87ee6781061c9363">nfst_plan</a>
+, <a class="el" href="structwindow__funct__plan__.html#a59ddba27ebde497ae7cfcfc2dbdd2304">window_funct_plan_</a>
+, <a class="el" href="structnnfftl__plan.html#a8f364097c04b46c203a4883af90b9eb0">nnfftl_plan</a>
+</li>
+<li>stable
+: <a class="el" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf">fpt_step_</a>
+</li>
+<li>steps
+: <a class="el" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854">fpt_data_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x74.html b/doc/api/html/functions_vars_0x74.html
new file mode 100644
index 0000000..318c7ff
--- /dev/null
+++ b/doc/api/html/functions_vars_0x74.html
@@ -0,0 +1,99 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li class="current"><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>t
+: <a class="el" href="structnfsftf__plan.html#ad5d65a033c50d321c6affc677e4f5226">nfsftf_plan</a>
+, <a class="el" href="structnfsft__plan.html#a59d80818cb9c0dcaccc477954720772c">nfsft_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a21641301ce6613d250e6d683c3fad9c2">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#ab0b32ee063950ce38adc6b0e5e40af02">nfsoft_plan_</a>
+, <a class="el" href="structfpt__set__s__.html#a1d35166e05db58736e422850fe02edef">fpt_set_s_</a>
+, <a class="el" href="structnfsoftl__plan__.html#acd18e8a2b89aacd8034b49033449f979">nfsoftl_plan_</a>
+, <a class="el" href="structnfsftl__plan.html#af5ba15c85f29ea8ba05a03c2f2fc2611">nfsftl_plan</a>
+</li>
+<li>T_MAX
+: <a class="el" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4">nfsft_wisdom</a>
+</li>
+<li>threshold
+: <a class="el" href="structnfsft__wisdom.html#ac367edaa1fae041e5b049cd81b44336b">nfsft_wisdom</a>
+</li>
+<li>ts
+: <a class="el" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb">fpt_step_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x76.html b/doc/api/html/functions_vars_0x76.html
new file mode 100644
index 0000000..3ce84c8
--- /dev/null
+++ b/doc/api/html/functions_vars_0x76.html
@@ -0,0 +1,103 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li class="current"><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>v
+: <a class="el" href="structnnfftf__plan.html#a62822fb1596e8eccd6d2edf62096323b">nnfftf_plan</a>
+, <a class="el" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c">nnfft_plan</a>
+, <a class="el" href="structnnfftl__plan.html#a224d2ba2e9ba30535b394b1375ff0a88">nnfftl_plan</a>
+</li>
+<li>v_hat_iter
+: <a class="el" href="structinfsft__adjoint__plan.html#ae1911bb7b195a6cdc51fc2c9dd5663d5">infsft_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a5078575d0bf816ed68ce3c762f578887">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#af253d4b292aa7db655ca51dfdf598bf9">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a8f64e1af7dfd3cd41377d79113eb51e3">infft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#ad04d2974dedefdc45e176e5ea5399aab">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#af025d6f664c1ccdd552f61e68d58ec97">infct_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a10da470b963e2d631f48e8eb81bad94e">infst_adjoint_plan</a>
+</li>
+<li>v_iter
+: <a class="el" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#a79c7f5b84aa9feddeafbcb9bde26de17">solverl_plan_complex</a>
+, <a class="el" href="structsolverf__plan__complex.html#a7e352320832a737577bd9ebe689a50bd">solverf_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#ab469e8fc7e7bc6c4068794cddf69ce26">solverl_plan_double</a>
+, <a class="el" href="structsolverf__plan__double.html#a6ee0cddd36b16d6b8cc09baf6db05cf9">solverf_plan_double</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x77.html b/doc/api/html/functions_vars_0x77.html
new file mode 100644
index 0000000..5a8d34c
--- /dev/null
+++ b/doc/api/html/functions_vars_0x77.html
@@ -0,0 +1,116 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li class="current"><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>w
+: <a class="el" href="structsolverf__plan__complex.html#a91f7e03dc8509952827333cc61ca9aa4">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a63c0a528c6e9989c7b0fee6c02d1fbff">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__double.html#adc2b7cea47756753ae9f8d5731f8d500">solver_plan_double</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a67fabb54885946acaaad95a5a472b004">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#add093d84bfb7f6f5d5b5512e000efc68">infct_adjoint_plan</a>
+, <a class="el" href="structsolverl__plan__complex.html#a547382238a57e96f316bac4dd291af0d">solverl_plan_complex</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a5b64034f7c01c3ce0a7ab02fd8477bdc">infst_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a20565dbd14d036eb348ca0276a4f411c">innfft_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a0f45b9d16576986d6d6d9605f6891f3d">solverl_plan_double</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a552e0603ee92be729e052bb6028a1fb4">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#aa4cd6ea3040339a39047978a7c1f1c9d">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a9738a7ae6eb6e9ac59018d7fe0b67b32">infsft_adjoint_plan</a>
+</li>
+<li>w_hat
+: <a class="el" href="structinfst__adjoint__plan.html#a00f860d5af6ada0c99a252b5d7548f5b">infst_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce">solver_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#ab1cada21b9034edfd3a1b2f77252f3be">solverf_plan_double</a>
+, <a class="el" href="structsolverf__plan__complex.html#aece5ec597b25ea28c945d2559316fad8">solverf_plan_complex</a>
+, <a class="el" href="structinfft__adjoint__plan.html#a76ad0c6eace967391553fd4939e70662">infft_adjoint_plan</a>
+, <a class="el" href="structsolver__plan__double.html#ab16ed4ac6cf04f57c4b1f194fbc09472">solver_plan_double</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aeb6a8106c1347dc7decf42e4520f70ab">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#aa53e43e9cd65db3ba08ed275cb62d456">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structsolverl__plan__complex.html#ad4d107f6ef642a2f8173d05d73bde405">solverl_plan_complex</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a0545064b15a22a5a3ae285e6aded5f80">innfft_adjoint_plan</a>
+, <a class="el" href="structsolverl__plan__double.html#aaa9d07d5f3ec0f7f7f0a6193927e1a94">solverl_plan_double</a>
+, <a class="el" href="structinfct__adjoint__plan.html#af14d4eb49aee59948ea57d30dbf4d628">infct_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a5830886454142e4825347a703f286c0a">infsft_adjoint_plan</a>
+</li>
+<li>wig_coeffs
+: <a class="el" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c">nfsoft_plan_</a>
+, <a class="el" href="structnfsoftl__plan__.html#a452e16848e81fd0b072d4e3347345455">nfsoftl_plan_</a>
+, <a class="el" href="structnfsoftf__plan__.html#a1d6f6e5b95a8f0ff13add5c23b382fb9">nfsoftf_plan_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x78.html b/doc/api/html/functions_vars_0x78.html
new file mode 100644
index 0000000..121eac6
--- /dev/null
+++ b/doc/api/html/functions_vars_0x78.html
@@ -0,0 +1,119 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li class="current"><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
+<li>x
+: <a class="el" href="structnfftf__plan.html#a4bcaa307f32321459187f8633a946a7e">nfftf_plan</a>
+, <a class="el" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0">nfft_plan</a>
+, <a class="el" href="structnfctf__plan.html#acf91ba20ce671a5d4c971465fbd33b03">nfctf_plan</a>
+, <a class="el" href="structnfst__plan.html#a048ebad4f2abe3821988fa06a5e308d8">nfst_plan</a>
+, <a class="el" href="structnfsoftf__plan__.html#a072fa8dcd38c95bec64c8e82af71afa7">nfsoftf_plan_</a>
+, <a class="el" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383">nfsoft_plan_</a>
+, <a class="el" href="structnfstl__plan.html#af663d590a277872d6e0e777cb410edbb">nfstl_plan</a>
+, <a class="el" href="structnfsoftl__plan__.html#a92211c64713d72c3d3cf45ac39601214">nfsoftl_plan_</a>
+, <a class="el" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93">fgt_plan</a>
+, <a class="el" href="structnfct__plan.html#a5635e780f4c492f087754d71f16e07ed">nfct_plan</a>
+, <a class="el" href="structnnfftf__plan.html#ae3c9275b5cafc753e2762406ba422378">nnfftf_plan</a>
+, <a class="el" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91">fastsum_plan_</a>
+, <a class="el" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d">nnfft_plan</a>
+, <a class="el" href="structnfftl__plan.html#ad5695c30a05c03573082a1aac0394700">nfftl_plan</a>
+, <a class="el" href="structnfsftl__plan.html#a59d00d103ebc0746d9cbf2d49077dfe8">nfsftl_plan</a>
+, <a class="el" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90">nfsft_plan</a>
+, <a class="el" href="structnfsftf__plan.html#a110084c9a750d175c70caa7a24d69ae7">nfsftf_plan</a>
+, <a class="el" href="structnfctl__plan.html#a2f7f915bfefa105412cabfc368c26560">nfctl_plan</a>
+, <a class="el" href="structnnfftl__plan.html#ad3c1a7dca6cddcecba876f1bb523e3b6">nnfftl_plan</a>
+, <a class="el" href="structnfstf__plan.html#ad0d1772e5947f4395cbfa0fc2ed39018">nfstf_plan</a>
+</li>
+<li>x_021
+: <a class="el" href="structnsfft__plan.html#aee5ad936bb790f00bf0797c94e185549">nsfft_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a62e8e58fe1b84f82ac85301a091af3fa">nsfftl_plan</a>
+, <a class="el" href="structnsfftf__plan.html#a0c015fd2deca4e70105f0c68a6a69586">nsfftf_plan</a>
+</li>
+<li>x_transposed
+: <a class="el" href="structnsfftf__plan.html#a4d7e0553a450636fc65816e4977914bd">nsfftf_plan</a>
+, <a class="el" href="structnsfftl__plan.html#a28eb398ae77902fd1ec2e0604d2a77ce">nsfftl_plan</a>
+, <a class="el" href="structnsfft__plan.html#aca6c9880cde07f3bc26dd7666c09a9d6">nsfft_plan</a>
+</li>
+<li>xc
+: <a class="el" href="structfpt__set__s__.html#a226e29e0f97627e77ec4fcebd0c49fdf">fpt_set_s_</a>
+</li>
+<li>xcvecs
+: <a class="el" href="structfpt__set__s__.html#a58a8f2867286e0be19dd89e8d41c033b">fpt_set_s_</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x79.html b/doc/api/html/functions_vars_0x79.html
new file mode 100644
index 0000000..73cea26
--- /dev/null
+++ b/doc/api/html/functions_vars_0x79.html
@@ -0,0 +1,100 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li class="current"><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_y"></a>- y -</h3><ul>
+<li>y
+: <a class="el" href="structsolverf__plan__complex.html#a522b2ad5b572dce6d786b26e221a14d6">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#a31aa1269dccbcfad158f31c276b0399e">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__double.html#accc401c5912fe60922d4ce2b30132e18">solver_plan_double</a>
+, <a class="el" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51">fastsum_plan_</a>
+, <a class="el" href="structsolverl__plan__complex.html#afbcb92106789225f6d54be521797b97f">solverl_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a70307c6e59216c27cb4d78e7f172ab8c">solverl_plan_double</a>
+, <a class="el" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056">fgt_plan</a>
+</li>
+<li>y_hat
+: <a class="el" href="structimri__inh__3d__adjoint__plan.html#a968843771644077babbdd687b6bbdb5d">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfft__adjoint__plan.html#ab91fa7e8fa5668148a4cba86a97e415b">infft_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a4a98ec178d9d74dab4e617beebc419a6">infct_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#acd0758c4ed1c79b6d2f2eed33effb539">innfft_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aaed8db541ee689c5ec82bb8e18c4c8d1">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#ac21eced87cb3a6eafd0d22f27e0eac03">infsft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a52d2b0b0d208e673eada45dff01e9c13">infst_adjoint_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/functions_vars_0x7a.html b/doc/api/html/functions_vars_0x7a.html
new file mode 100644
index 0000000..de3631a
--- /dev/null
+++ b/doc/api/html/functions_vars_0x7a.html
@@ -0,0 +1,98 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Data Fields - Variables
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index__"><span>_</span></a></li>
+ <li><a href="functions_vars_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6a.html#index_j"><span>j</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ <li class="current"><a href="functions_vars_0x7a.html#index_z"><span>z</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_z"></a>- z -</h3><ul>
+<li>z_hat_iter
+: <a class="el" href="structsolverf__plan__complex.html#a4c8dbe5d5a4d910b93ae7f84215482c8">solverf_plan_complex</a>
+, <a class="el" href="structsolverf__plan__double.html#aeee7fa961ebdf43e0caf1108e6b5ada7">solverf_plan_double</a>
+, <a class="el" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48">solver_plan_double</a>
+, <a class="el" href="structsolverl__plan__complex.html#abe468b3b489a8707538f083713962fcc">solverl_plan_complex</a>
+, <a class="el" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03">solver_plan_complex</a>
+, <a class="el" href="structsolverl__plan__double.html#a0816054fdb0e07f4a68fc4aa5321c977">solverl_plan_double</a>
+</li>
+<li>z_iter
+: <a class="el" href="structinfft__adjoint__plan.html#a0f6a4a61889385e975380802617ade31">infft_adjoint_plan</a>
+, <a class="el" href="structinfsft__adjoint__plan.html#a2c01ce7b85130d3069016e30b4a1685e">infsft_adjoint_plan</a>
+, <a class="el" href="structinfst__adjoint__plan.html#a254d587d2d91f18fb55a2ccae89198a5">infst_adjoint_plan</a>
+, <a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a2e2d8f1f1a6a7500c1689cf5021abcde">imri_inh_2d1d_adjoint_plan</a>
+, <a class="el" href="structimri__inh__3d__adjoint__plan.html#a0efcec4db642e9066fbc64c1c70bc079">imri_inh_3d_adjoint_plan</a>
+, <a class="el" href="structinfct__adjoint__plan.html#a5b1da212f8c15d7ca209dbe347a5ec8f">infct_adjoint_plan</a>
+, <a class="el" href="structinnfft__adjoint__plan.html#a4a4aac08b2efbcbc13545a08bb397f52">innfft_adjoint_plan</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/glacier_8c_source.html b/doc/api/html/glacier_8c_source.html
new file mode 100644
index 0000000..db6c5a8
--- /dev/null
+++ b/doc/api/html/glacier_8c_source.html
@@ -0,0 +1,280 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - glacier.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_7af51a00587982c04b08a156fa91c254.html">solver</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">glacier.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: glacier.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"><a class="code" href="group__examples__solver__glacier.html#gab4da467610b4e791d41de5b7501fe208"> 42</a></span> <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="group__examples__solver__glacier.html#gab4da467610b4e791d41de5b7501fe208" title="Generalised Sobolev weight.">my_weight</a>(<span class="keywordtype">double</span> z,<span class="keywordtype">double</span> a,<span cl [...]
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> {</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">return</span> pow(0.25-z*z,b)/(c+pow(fabs(z),2*a));</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="code" href="group__examples__solver__glacier.html#gae32b7b49ac3d92c70301b2f96ab31e7a"> 48</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__examples__solver__glacier.html#gae32b7b49ac3d92c70301b2f96ab31e7a" title="Reconstruction routine.">glacier</a>(<span class="keywordtype">int</span> N,<span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> {</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">int</span> j,k,k0,k1,l,my_N[2],my_n[2];</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">double</span> tmp_y;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> ip;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> FILE* fp;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment">/* initialise p */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> my_N[0]=N; my_n[0]=X(next_power_of_2)(N);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> my_N[1]=N; my_n[1]=X(next_power_of_2)(N);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> nfft_init_guru(&p, 2, my_N, M, my_n, 6,</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> PRE_PHI_HUT| PRE_FULL_PSI|</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> MALLOC_X| MALLOC_F_HAT| MALLOC_F|</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">/* initialise ip, specific */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> solver_init_advanced_complex(&ip,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&p), CGNE| PRECOMPUTE_DAMP);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> fprintf(stderr,<span class="stringliteral">"Using the generic solver!"</span>);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment">/* init nodes */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> fp=fopen(<span class="stringliteral">"input_data.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">for</span>(j=0;j<p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> {</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> fscanf(fp,<span class="stringliteral">"%le %le %le"</span>,&p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0],&p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1],&tmp_y);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> ip.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]=tmp_y;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> fclose(fp);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">/* precompute psi */</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span>(p.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment">/* initialise damping factors */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span>(ip.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">for</span>(k0=0;k0<p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];k0++)</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">for</span>(k1=0;k1<p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];k1++)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> ip.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[k0*p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]+k1]=</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <a class="code" href="group__examples__solver__glacier.html#gab4da467610b4e791d41de5b7501fe208" title="Generalised Sobolev weight.">my_weight</a>(((<span class="keywordtype">double</span>)(k0-p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2))/p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-band [...]
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <a class="code" href="group__examples__solver__glacier.html#gab4da467610b4e791d41de5b7501fe208" title="Generalised Sobolev weight.">my_weight</a>(((<span class="keywordtype">double</span>)(k1-p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]/2))/p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-band [...]
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">for</span>(k=0;k<p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]=0;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> solver_before_loop_complex(&ip);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">for</span>(l=0;l<40;l++)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> {</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> fprintf(stderr,<span class="stringliteral">"Residual ||r||=%e,\n"</span>,sqrt(ip.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>));</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&ip);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">for</span>(k=0;k<p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> printf(<span class="stringliteral">"%le %le\n"</span>,creal(ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]),cimag(ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]));</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&ip);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> nfft_finalize(&p);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"><a class="code" href="group__examples__solver__glacier.html#ga1503d05480f3e910ffae52b2e6aef34f"> 110</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__examples__solver__glacier.html#ga1503d05480f3e910ffae52b2e6aef34f" title="Reconstruction routine with cross validation.">glacier_cv</a>(<span class="keywordtype">int</span> N,<span class="keywordtype">int</span> [...]
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> {</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">int</span> j,k,k0,k1,l,my_N[2],my_n[2];</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">double</span> tmp_y,r;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p,cp;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> ip;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">double</span> _Complex* cp_y;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> FILE* fp;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">int</span> M_re=M-M_cv;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment">/* initialise p for reconstruction */</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> my_N[0]=N; my_n[0]=X(next_power_of_2)(N);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> my_N[1]=N; my_n[1]=X(next_power_of_2)(N);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> nfft_init_guru(&p, 2, my_N, M_re, my_n, 6,</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> PRE_PHI_HUT| PRE_FULL_PSI|</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> MALLOC_X| MALLOC_F_HAT| MALLOC_F|</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">/* initialise ip, specific */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> solver_init_advanced_complex(&ip,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&p), solver_flags);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment">/* initialise cp for validation */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> cp_y = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> nfft_init_guru(&cp, 2, my_N, M, my_n, 6,</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> PRE_PHI_HUT| PRE_FULL_PSI|</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> MALLOC_X| MALLOC_F|</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> cp.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment">/* set up data in cp and cp_y */</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> fp=fopen(<span class="stringliteral">"input_data.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">for</span>(j=0;j<cp.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> {</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> fscanf(fp,<span class="stringliteral">"%le %le %le"</span>,&cp.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0],&cp.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1],&tmp_y);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> cp_y[j]=tmp_y;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> }</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> fclose(fp);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment">/* copy part of the data to p and ip */</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">for</span>(j=0;j<p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> {</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0]=cp.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0];</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1]=cp.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1];</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> ip.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]=tmp_y;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> }</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment">/* precompute psi */</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">if</span>(p.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="comment">/* precompute psi */</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">if</span>(cp.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> nfft_precompute_one_psi(&cp);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="comment">/* initialise damping factors */</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">if</span>(ip.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">for</span>(k0=0;k0<p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];k0++)</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">for</span>(k1=0;k1<p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];k1++)</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> ip.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[k0*p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]+k1]=</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <a class="code" href="group__examples__solver__glacier.html#gab4da467610b4e791d41de5b7501fe208" title="Generalised Sobolev weight.">my_weight</a>(((<span class="keywordtype">double</span>)(k0-p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2))/p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-band [...]
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <a class="code" href="group__examples__solver__glacier.html#gab4da467610b4e791d41de5b7501fe208" title="Generalised Sobolev weight.">my_weight</a>(((<span class="keywordtype">double</span>)(k1-p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]/2))/p.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-band [...]
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">for</span>(k=0;k<p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]=0;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> solver_before_loop_complex(&ip);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment">// fprintf(stderr,"iteration starts,\t");</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">for</span>(l=0;l<40;l++)</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&ip);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment">//fprintf(stderr,"r=%1.2e, ",sqrt(ip.dot_r_iter)/M_re);</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterat [...]
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterat [...]
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <a class="code" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5" title="Updates .">nfft_upd_axpy_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,-1,ip.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a> [...]
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> r=sqrt(<a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,M_re)/<a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inne [...]
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> fprintf(stderr,<span class="stringliteral">"r=%1.2e, "</span>,r);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> printf(<span class="stringliteral">"$%1.1e$ & "</span>,r);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&cp);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <a class="code" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5" title="Updates .">nfft_upd_axpy_complex</a>(&cp.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[M_re],-1,&cp_y[M_re],M_cv);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> r=sqrt(<a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(&cp.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[M_re],M_cv)/<a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Compu [...]
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> fprintf(stderr,<span class="stringliteral">"r_1=%1.2e\t"</span>,r);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> printf(<span class="stringliteral">"$%1.1e$ & "</span>,r);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> nfft_finalize(&cp);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&ip);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> nfft_finalize(&p);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> }</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"><a class="code" href="group__examples__solver__glacier.html#ga3c04138a5bfe5d72780bb7e82a18e627"> 209</a></span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> {</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordtype">int</span> M_cv;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">if</span>(argc<3)</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> {</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> fprintf(stderr,<span class="stringliteral">"Call this program from the Matlab script glacier.m!"</span>);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> exit(-1);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">if</span>(argc==3)</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <a class="code" href="group__examples__solver__glacier.html#gae32b7b49ac3d92c70301b2f96ab31e7a" title="Reconstruction routine.">glacier</a>(atoi(argv[1]),atoi(argv[2]));</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">for</span>(M_cv=atoi(argv[3]);M_cv<=atoi(argv[5]);M_cv+=atoi(argv[4]))</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> {</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> fprintf(stderr,<span class="stringliteral">"\nM_cv=%d,\t"</span>,M_cv);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> printf(<span class="stringliteral">"$%d$ & "</span>,M_cv);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> fprintf(stderr,<span class="stringliteral">"cgne+damp: "</span>);</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <a class="code" href="group__examples__solver__glacier.html#ga1503d05480f3e910ffae52b2e6aef34f" title="Reconstruction routine with cross validation.">glacier_cv</a>(atoi(argv[1]),atoi(argv[2]),M_cv,CGNE| PRECOMPUTE_DAMP);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment">//fprintf(stderr,"cgne: ");</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment">//glacier_cv(atoi(argv[1]),atoi(argv[2]),M_cv,CGNE);</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> fprintf(stderr,<span class="stringliteral">"cgnr: "</span>);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <a class="code" href="group__examples__solver__glacier.html#ga1503d05480f3e910ffae52b2e6aef34f" title="Reconstruction routine with cross validation.">glacier_cv</a>(atoi(argv[1]),atoi(argv[2]),M_cv,CGNR);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> fprintf(stderr,<span class="stringliteral">"cgnr: "</span>);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <a class="code" href="group__examples__solver__glacier.html#ga1503d05480f3e910ffae52b2e6aef34f" title="Reconstruction routine with cross validation.">glacier_cv</a>(atoi(argv[1])/4,atoi(argv[2]),M_cv,CGNR);</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> printf(<span class="stringliteral">"XXX \\\\\n"</span>);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> }</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> fprintf(stderr,<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals.html b/doc/api/html/globals.html
new file mode 100644
index 0000000..27d47dc
--- /dev/null
+++ b/doc/api/html/globals.html
@@ -0,0 +1,86 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>BasisPoly()
+: <a class="el" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0">fastsum.c</a>
+</li>
+<li>binom()
+: <a class="el" href="group__applications__fastsum.html#gae767db8af0cbe9244cfbd0580b0bb9f4">fastsum.c</a>
+</li>
+<li>BuildBox()
+: <a class="el" href="group__applications__fastsum.html#ga8237ee0c81a2518c4849e71317a479d0">fastsum.c</a>
+</li>
+<li>BuildTree()
+: <a class="el" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174">fastsum.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_0x63.html b/doc/api/html/globals_0x63.html
new file mode 100644
index 0000000..95e04f1
--- /dev/null
+++ b/doc/api/html/globals_0x63.html
@@ -0,0 +1,87 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index_b"><span>b</span></a></li>
+ <li class="current"><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>c2e()
+: <a class="el" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656">nfsft.c</a>
+</li>
+<li>c2e_transposed()
+: <a class="el" href="group__nfsft.html#ga0e033457136bc0ecb18bb57d3ee5aa37">nfsft.c</a>
+</li>
+<li>calc_SearchBox()
+: <a class="el" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d">fastsum.c</a>
+</li>
+<li>comparison_fft()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432">linogram_fft_test.c</a>
+, <a class="el" href="group__applications__polarFFT__mpolar.html#ga522ff84df31c08a1f237ad0ec7ce4ac5">mpolar_fft_test.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_0x65.html b/doc/api/html/globals_0x65.html
new file mode 100644
index 0000000..b2f5d4d
--- /dev/null
+++ b/doc/api/html/globals_0x65.html
@@ -0,0 +1,86 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li class="current"><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>eval_sum_clenshaw_transposed()
+: <a class="el" href="fpt_8c.html#a509209ea5b6e210805a37cd80579c2c5">fpt.c</a>
+</li>
+<li>eval_wigner()
+: <a class="el" href="wigner_8h.html#a86975b8841ed9b6bb3e1484130658f19">wigner.h</a>
+</li>
+<li>eval_wigner_thresh()
+: <a class="el" href="wigner_8h.html#ae5933af03f4536a70ddfc744f16c9c55">wigner.h</a>
+</li>
+<li>EXACT_NEARFIELD
+: <a class="el" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d">fastsum.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_0x66.html b/doc/api/html/globals_0x66.html
new file mode 100644
index 0000000..4a00c6a
--- /dev/null
+++ b/doc/api/html/globals_0x66.html
@@ -0,0 +1,116 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li class="current"><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>fak()
+: <a class="el" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09">fastsum.c</a>
+</li>
+<li>fastsum_exact()
+: <a class="el" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd">fastsum.c</a>
+</li>
+<li>fastsum_finalize()
+: <a class="el" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769">fastsum.c</a>
+</li>
+<li>fastsum_init_guru()
+: <a class="el" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149">fastsum.c</a>
+</li>
+<li>fastsum_plan
+: <a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum.h</a>
+</li>
+<li>fastsum_precompute()
+: <a class="el" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff">fastsum.c</a>
+</li>
+<li>fastsum_trafo()
+: <a class="el" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8">fastsum.c</a>
+</li>
+<li>FIRST_L
+: <a class="el" href="fpt_8c.html#ac81f7eac1a01b06e91817857f47b9804">fpt.c</a>
+</li>
+<li>fpt_data
+: <a class="el" href="fpt_8c.html#a5141ba7ff5b14b5fbf7ee769943f1c10">fpt.c</a>
+</li>
+<li>fpt_set
+: <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">nfft3.h</a>
+</li>
+<li>fpt_set_s
+: <a class="el" href="fpt_8c.html#a06f7c65536489b0602c70a616e9f1fe8">fpt.c</a>
+</li>
+<li>fpt_step
+: <a class="el" href="fpt_8c.html#a4c7f62127651d301d4604b3a6519458d">fpt.c</a>
+</li>
+<li>fptf_set
+: <a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">nfft3.h</a>
+</li>
+<li>fptl_set
+: <a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">nfft3.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_0x69.html b/doc/api/html/globals_0x69.html
new file mode 100644
index 0000000..135e1eb
--- /dev/null
+++ b/doc/api/html/globals_0x69.html
@@ -0,0 +1,191 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li class="current"><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>imri_inh_2d1d_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a39cce38619ea8d9ce84326173e2d091b">solver_adjoint.h</a>
+</li>
+<li>imri_inh_2d1d_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a7b403058cdba0d2918690b2d1d577912">solver_adjoint.h</a>
+</li>
+<li>imri_inh_2d1d_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#ae0f7ba8180888f8f70aff1b041f4ec57">solver_adjoint.h</a>
+</li>
+<li>imri_inh_2d1d_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#a61bb41310d86e96ad1912ce486930bea">solver_adjoint.h</a>
+</li>
+<li>imri_inh_2d1d_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a84b7c58708fe95ff8234638689a30302">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a9a8864136de1ff61970eeed934350238">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a48c6fe11c01d742025c7eb7bf7ac9002">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#a6275d93dac2957a4acad3bda978c98cd">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#afb6ade8e78c1dfdc7e513c6e8fa7ffb6">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a7e65b366bd5003cef9c16e640591b972">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a7bfc5594bbdc3d6c58fb10713a03bc40">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a48c89f97b3f452ee3aedb245d064f24e">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#a695c20cc98df4bbd370240bee9703e77">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#a4fcee80a5fbbe901b8d51717dc07ae24">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a36eef8da31026b71a865108b095768cc">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a2a31ddf66394b88a4dd1545278e205b5">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a826591281cbec37c2a032eaecbbacf9d">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#ae93aa72dcb2528111f021c952482c244">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#adf47a7ff42ca521526db42b4d3a68f98">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a219ff15a153205b04eec76860cb4d6eb">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a26dbcae80a2db01144d523cb3d22a01d">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#adb479e2343fef9fbafdc5d8d65085aee">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#a040cb361de66313ccbad17f746cc748d">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#a0a162589cc358719488082d0b3e42e0e">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a03fc19c8d3c7b8a49c8751a2a88e0d09">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a4a5720df6bfee236588f38e516e32c90">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a086451cc556027d5e909eb7d1c1249b7">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#a332fad4381e89b483482e53fa39604e3">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#ac5ad72ccf1af482d623242389bc154b2">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a57df76147b89e6e204a465fd437fbaae">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a3c7be955a46b3d056b5d38324f2d2068">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a1316a1ad32f611899e446cd98d3b0b0d">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#ab4dcbe373e99d9c010034c6eecdfea86">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#aac4fe9056cb5a96170ba6122e20d116a">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a9e80774fcedbd2a50e4146290de9ce3f">solver_adjoint.h</a>
+</li>
+<li>inverse_linogram_fft()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#gaf44988058d3000a477c046c172c26265">linogram_fft_test.c</a>
+</li>
+<li>inverse_mpolar_fft()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#ga5d0560e898b722ee5fe09acc485bbec8">mpolar_fft_test.c</a>
+</li>
+<li>inverse_polar_fft()
+: <a class="el" href="group__applications__polarFFT__polar.html#gad996d429207cf198e9027618e081ada0">polar_fft_test.c</a>
+</li>
+<li>Inverse_Radon_trafo()
+: <a class="el" href="inverse__radon_8c.html#a298e52a05aeac043f9b35e8ae60a13e4">inverse_radon.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_0x6b.html b/doc/api/html/globals_0x6b.html
new file mode 100644
index 0000000..57b4c5c
--- /dev/null
+++ b/doc/api/html/globals_0x6b.html
@@ -0,0 +1,91 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li class="current"><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>K_END_TILDE
+: <a class="el" href="fpt_8c.html#a769119c8ae45f2a30a62ba802d83139f">fpt.c</a>
+</li>
+<li>K_START_TILDE
+: <a class="el" href="fpt_8c.html#a58f899926cc6e95ea54dd68d131979b8">fpt.c</a>
+</li>
+<li>KERNEL
+: <a class="el" href="radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1">radon.c</a>
+, <a class="el" href="inverse__radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1">inverse_radon.c</a>
+</li>
+<li>kubintkern()
+: <a class="el" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79">fastsum.h</a>
+, <a class="el" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79">fastsum.c</a>
+</li>
+<li>kubintkern1()
+: <a class="el" href="group__applications__fastsum.html#gad527763b180de164610e55a704c69116">fastsum.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_0x6c.html b/doc/api/html/globals_0x6c.html
new file mode 100644
index 0000000..da573bd
--- /dev/null
+++ b/doc/api/html/globals_0x6c.html
@@ -0,0 +1,91 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li class="current"><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>LAST_L
+: <a class="el" href="fpt_8c.html#ac9f7e1529d635e3357d1e081ddf7e349">fpt.c</a>
+</li>
+<li>linintkern()
+: <a class="el" href="group__applications__fastsum.html#gae23df7b1c09c2955895545e164bc9e99">fastsum.c</a>
+</li>
+<li>linogram_dft()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#ga708f5c41add2af92a97339dee1c068dc">linogram_fft_test.c</a>
+</li>
+<li>linogram_fft()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#gaea5025fe751ace25f818ecb3cfc16444">linogram_fft_test.c</a>
+</li>
+<li>linogram_grid()
+: <a class="el" href="radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310">radon.c</a>
+, <a class="el" href="inverse__radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310">inverse_radon.c</a>
+, <a class="el" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310">linogram_fft_test.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_0x6d.html b/doc/api/html/globals_0x6d.html
new file mode 100644
index 0000000..de65e6f
--- /dev/null
+++ b/doc/api/html/globals_0x6d.html
@@ -0,0 +1,99 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li class="current"><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>MACRO_MV_PLAN
+: <a class="el" href="nfft3_8h.html#a0d1eb31c2f64e41fa0399b1eb7b5ddd4">nfft3.h</a>
+</li>
+<li>MACRO_SOLVER_ADJOINT_PLAN
+: <a class="el" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637">solver_adjoint.h</a>
+</li>
+<li>main()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#ga3c04138a5bfe5d72780bb7e82a18e627">mpolar_fft_test.c</a>
+, <a class="el" href="group__applications__polarFFT__polar.html#ga3c04138a5bfe5d72780bb7e82a18e627">polar_fft_test.c</a>
+, <a class="el" href="group__applications__polarFFT__linogramm.html#ga3c04138a5bfe5d72780bb7e82a18e627">linogram_fft_test.c</a>
+, <a class="el" href="radon_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">radon.c</a>
+, <a class="el" href="inverse__radon_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">inverse_radon.c</a>
+</li>
+<li>max_i()
+: <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">fastsum.c</a>
+</li>
+<li>mpolar_dft()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#gaee9902054200ea50d90b5d290bff8c71">mpolar_fft_test.c</a>
+</li>
+<li>mpolar_fft()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#ga55b2f979a5c69176a73f59eb0312b53d">mpolar_fft_test.c</a>
+</li>
+<li>mpolar_grid()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952">mpolar_fft_test.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_0x6e.html b/doc/api/html/globals_0x6e.html
new file mode 100644
index 0000000..d1d6791
--- /dev/null
+++ b/doc/api/html/globals_0x6e.html
@@ -0,0 +1,272 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li class="current"><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>NF_KUB
+: <a class="el" href="group__applications__fastsum.html#gafa2dd15778c93b2eaa42de608fb4d1a8">fastsum.h</a>
+</li>
+<li>nfft_bspline()
+: <a class="el" href="group__nfftutil.html#ga2fd48f1f700153c050d27691c4b2a6cc">nfft3util.h</a>
+</li>
+<li>nfft_bspline_old()
+: <a class="el" href="group__nfftutil.html#ga89bd624abdfb13abc10c144a8ff949cd">nfft3util.h</a>
+</li>
+<li>nfft_cp_a_complex()
+: <a class="el" href="group__nfftutil.html#ga33409df91e7ad5e1dca3beaa63e0ef25">nfft3util.h</a>
+</li>
+<li>nfft_cp_a_double()
+: <a class="el" href="group__nfftutil.html#ga41f20c605269e701b3305e49010e0759">nfft3util.h</a>
+</li>
+<li>nfft_cp_complex()
+: <a class="el" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133">nfft3util.h</a>
+</li>
+<li>nfft_cp_double()
+: <a class="el" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2">nfft3util.h</a>
+</li>
+<li>nfft_cp_w_complex()
+: <a class="el" href="group__nfftutil.html#ga630054cb816785d766959a867965f619">nfft3util.h</a>
+</li>
+<li>nfft_cp_w_double()
+: <a class="el" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099">nfft3util.h</a>
+</li>
+<li>nfft_dot_complex()
+: <a class="el" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004">nfft3util.h</a>
+</li>
+<li>nfft_dot_double()
+: <a class="el" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5">nfft3util.h</a>
+</li>
+<li>nfft_dot_w2_complex()
+: <a class="el" href="group__nfftutil.html#ga9b59288597d159357fe86395e635a075">nfft3util.h</a>
+</li>
+<li>nfft_dot_w_complex()
+: <a class="el" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1">nfft3util.h</a>
+</li>
+<li>nfft_dot_w_double()
+: <a class="el" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39">nfft3util.h</a>
+</li>
+<li>nfft_dot_w_w2_complex()
+: <a class="el" href="group__nfftutil.html#ga68268fc9bfad5a7e7383098ac1715674">nfft3util.h</a>
+</li>
+<li>nfft_fftshift_complex()
+: <a class="el" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770">nfft3util.h</a>
+</li>
+<li>nfft_free()
+: <a class="el" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft3.h</a>
+</li>
+<li>nfft_free_hook
+: <a class="el" href="nfft3_8h.html#a5b4d02593a82ded7c1d3c3c868e72347">nfft3.h</a>
+</li>
+<li>nfft_free_type_function
+: <a class="el" href="nfft3_8h.html#acdec9723f6ea0ea162d5f3fc6f1f1906">nfft3.h</a>
+</li>
+<li>nfft_malloc()
+: <a class="el" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft3.h</a>
+</li>
+<li>nfft_malloc_hook
+: <a class="el" href="nfft3_8h.html#aa578dec914d95bda5a2fad3fbd90c76f">nfft3.h</a>
+</li>
+<li>nfft_malloc_type_function
+: <a class="el" href="nfft3_8h.html#ae2db105c02d4b63d1962dc94d4e7a4c2">nfft3.h</a>
+</li>
+<li>NFFT_MAX
+: <a class="el" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3">nfft3util.h</a>
+</li>
+<li>NFFT_MIN
+: <a class="el" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308">nfft3util.h</a>
+</li>
+<li>nfft_modified_fejer()
+: <a class="el" href="group__nfftutil.html#gac9b810183abafb668f8aa777c7985256">nfft3util.h</a>
+</li>
+<li>nfft_modified_jackson2()
+: <a class="el" href="group__nfftutil.html#gab45a6cd3528d3716522a0cf184375aaf">nfft3util.h</a>
+</li>
+<li>nfft_modified_jackson4()
+: <a class="el" href="group__nfftutil.html#ga126ec2282393435f0d795ac79db8654b">nfft3util.h</a>
+</li>
+<li>nfft_modified_multiquadric()
+: <a class="el" href="group__nfftutil.html#gac6201bc2aa806bd25cb14c5f96d644e9">nfft3util.h</a>
+</li>
+<li>nfft_modified_sobolev()
+: <a class="el" href="group__nfftutil.html#gaa84cb34c6d368599fb2f997eadb184a7">nfft3util.h</a>
+</li>
+<li>nfft_plain_loop()
+: <a class="el" href="group__nfftutil.html#gad979f626cc8397e26d1bd78a7ba342cd">nfft3util.h</a>
+</li>
+<li>nfft_precompute_lin_psi()
+: <a class="el" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc">nfft3.h</a>
+</li>
+<li>nfft_prod_int()
+: <a class="el" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116">nfft3util.h</a>
+</li>
+<li>nfft_prod_real()
+: <a class="el" href="group__nfftutil.html#gad7bad7074a695341742f57526f8695eb">nfft3util.h</a>
+</li>
+<li>nfft_smbi()
+: <a class="el" href="group__nfftutil.html#ga2decee6fe50d50797a82737ba82cf97a">nfft3util.h</a>
+</li>
+<li>nfft_sort_node_indices_radix_lsdf()
+: <a class="el" href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738">nfft3util.h</a>
+</li>
+<li>nfft_sort_node_indices_radix_msdf()
+: <a class="el" href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5">nfft3util.h</a>
+</li>
+<li>NFFT_SWAP_complex
+: <a class="el" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5">nfft3util.h</a>
+</li>
+<li>NFFT_SWAP_double
+: <a class="el" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e">nfft3util.h</a>
+</li>
+<li>nfft_trafo()
+: <a class="el" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421">nfft3.h</a>
+</li>
+<li>nfft_upd_axpby_complex()
+: <a class="el" href="group__nfftutil.html#ga903a4b3ed369dcfe67b9379a238ed23d">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpby_double()
+: <a class="el" href="group__nfftutil.html#ga75e403e92875b0b919a555f8cede0e8d">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpwy_complex()
+: <a class="el" href="group__nfftutil.html#ga693919963b51cf396311b15660e04cd8">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpwy_double()
+: <a class="el" href="group__nfftutil.html#gaf6777c4b8aa9f575f1600c51e8ae343a">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpy_complex()
+: <a class="el" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpy_double()
+: <a class="el" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3">nfft3util.h</a>
+</li>
+<li>nfft_upd_xpawy_complex()
+: <a class="el" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e">nfft3util.h</a>
+</li>
+<li>nfft_upd_xpawy_double()
+: <a class="el" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0">nfft3util.h</a>
+</li>
+<li>nfft_upd_xpay_complex()
+: <a class="el" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4">nfft3util.h</a>
+</li>
+<li>nfft_upd_xpay_double()
+: <a class="el" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064">nfft3util.h</a>
+</li>
+<li>nfft_voronoi_weights_1d()
+: <a class="el" href="group__nfftutil.html#ga797e81f55e6379efabf4d98522d1ee9d">nfft3util.h</a>
+</li>
+<li>nfft_voronoi_weights_S2()
+: <a class="el" href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994">nfft3util.h</a>
+</li>
+<li>nfft_vpr_complex()
+: <a class="el" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0">nfft3util.h</a>
+</li>
+<li>nfft_vpr_double()
+: <a class="el" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91">nfft3util.h</a>
+</li>
+<li>nfft_vpr_int()
+: <a class="el" href="group__nfftutil.html#gaa8e0581d802c4b7bb153682a4c156409">nfft3util.h</a>
+</li>
+<li>nfft_vrand_shifted_unit_double()
+: <a class="el" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34">nfft3util.h</a>
+</li>
+<li>nfft_vrand_unit_complex()
+: <a class="el" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685">nfft3util.h</a>
+</li>
+<li>NFSFT_BREAK_EVEN
+: <a class="el" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3">nfsft.c</a>
+</li>
+<li>NFSFT_DEFAULT_NFFT_CUTOFF
+: <a class="el" href="group__nfsft.html#ga206c4faaf800b49dcb14e26148fa9ac6">nfsft.c</a>
+</li>
+<li>NFSFT_DEFAULT_THRESHOLD
+: <a class="el" href="group__nfsft.html#gab7d25b80464387893b3c773f92e5c4f3">nfsft.c</a>
+</li>
+<li>nfst_full_psi()
+: <a class="el" href="nfft3_8h.html#a02d072e80ccaca6482b396540eaef585">nfft3.h</a>
+</li>
+<li>nfst_prod_minus_a_int()
+: <a class="el" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40">nfft3util.h</a>
+</li>
+<li>nfst_trafo()
+: <a class="el" href="nfft3_8h.html#ac80b86521428ec2191919cc96c82f416">nfft3.h</a>
+</li>
+<li>nnfft_precompute_full_psi()
+: <a class="el" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9">nfft3.h</a>
+</li>
+<li>nnfft_precompute_lin_psi()
+: <a class="el" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6">nfft3.h</a>
+</li>
+<li>nnfft_precompute_phi_hut()
+: <a class="el" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580">nfft3.h</a>
+</li>
+<li>nnfft_trafo()
+: <a class="el" href="nfft3_8h.html#a994c1748ebe1371c53dd2cb437054d4f">nfft3.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_0x70.html b/doc/api/html/globals_0x70.html
new file mode 100644
index 0000000..0241fbb
--- /dev/null
+++ b/doc/api/html/globals_0x70.html
@@ -0,0 +1,88 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li class="current"><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>PI
+: <a class="el" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca">nfft3util.h</a>
+</li>
+<li>polar_dft()
+: <a class="el" href="group__applications__polarFFT__polar.html#gaf6ec0d6bb5bfea4829e551c9dc9a656e">polar_fft_test.c</a>
+</li>
+<li>polar_fft()
+: <a class="el" href="group__applications__polarFFT__polar.html#ga72ebda23ef48b6509833eea9a24fa839">polar_fft_test.c</a>
+</li>
+<li>polar_grid()
+: <a class="el" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae">polar_fft_test.c</a>
+, <a class="el" href="inverse__radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae">inverse_radon.c</a>
+, <a class="el" href="radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae">radon.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_0x71.html b/doc/api/html/globals_0x71.html
new file mode 100644
index 0000000..02e10af
--- /dev/null
+++ b/doc/api/html/globals_0x71.html
@@ -0,0 +1,77 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li class="current"><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_q"></a>- q -</h3><ul>
+<li>quicksort()
+: <a class="el" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe">fastsum.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_0x72.html b/doc/api/html/globals_0x72.html
new file mode 100644
index 0000000..c2f9b02
--- /dev/null
+++ b/doc/api/html/globals_0x72.html
@@ -0,0 +1,90 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li class="current"><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>Radon_trafo()
+: <a class="el" href="radon_8c.html#a01ba457f6edb3193453204cc702ac5ca">radon.c</a>
+</li>
+<li>regkern()
+: <a class="el" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c">fastsum.c</a>
+, <a class="el" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c">fastsum.h</a>
+</li>
+<li>regkern1()
+: <a class="el" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1">fastsum.c</a>
+</li>
+<li>regkern2()
+: <a class="el" href="group__applications__fastsum.html#ga461376a86ecb935b74e7bfa4c86275d9">fastsum.c</a>
+</li>
+<li>regkern3()
+: <a class="el" href="group__applications__fastsum.html#ga2077aec7b505fd6bf082c28cc5d59468">fastsum.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_0x73.html b/doc/api/html/globals_0x73.html
new file mode 100644
index 0000000..f639872
--- /dev/null
+++ b/doc/api/html/globals_0x73.html
@@ -0,0 +1,158 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li class="current"><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>SearchBox()
+: <a class="el" href="group__applications__fastsum.html#gae5d00a6d73390cc05d73aeca17028fc5">fastsum.c</a>
+</li>
+<li>SearchTree()
+: <a class="el" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104">fastsum.c</a>
+</li>
+<li>SO3_alpha()
+: <a class="el" href="wigner_8h.html#ab67e240f23c39daa7283fee9025a8f03">wigner.h</a>
+</li>
+<li>SO3_alpha_all()
+: <a class="el" href="wigner_8h.html#aef802fd511b566392a8b2cbb9fcd6678">wigner.h</a>
+</li>
+<li>SO3_alpha_matrix()
+: <a class="el" href="wigner_8h.html#a9ab913c454dd078bed0db8b4aa9365e1">wigner.h</a>
+</li>
+<li>SO3_alpha_row()
+: <a class="el" href="wigner_8h.html#ae9c3c9a11f1da35bb0cfbed1fb828ad2">wigner.h</a>
+</li>
+<li>SO3_beta()
+: <a class="el" href="wigner_8h.html#a6722aa3212be1361b531751a850056f6">wigner.h</a>
+</li>
+<li>SO3_beta_all()
+: <a class="el" href="wigner_8h.html#aa981c92edca3fac2f04a7d3524b8425a">wigner.h</a>
+</li>
+<li>SO3_beta_matrix()
+: <a class="el" href="wigner_8h.html#a742f6babb80797e003835bc66cfe9080">wigner.h</a>
+</li>
+<li>SO3_beta_row()
+: <a class="el" href="wigner_8h.html#a1b82e072be0c3e0d45426ed56e4e6a9d">wigner.h</a>
+</li>
+<li>SO3_gamma()
+: <a class="el" href="wigner_8h.html#a6b13b24d727910800b9f1c0da29f5f73">wigner.h</a>
+</li>
+<li>SO3_gamma_all()
+: <a class="el" href="wigner_8h.html#a4ff3aa0c3afb226613100df410cbef7f">wigner.h</a>
+</li>
+<li>SO3_gamma_matrix()
+: <a class="el" href="wigner_8h.html#aa9850cfec93784e536a728f13db4c5cb">wigner.h</a>
+</li>
+<li>SO3_gamma_row()
+: <a class="el" href="wigner_8h.html#a46516d6ec71efab3c80eecd459ad20ee">wigner.h</a>
+</li>
+<li>solver_finalize_complex()
+: <a class="el" href="solver_8c.html#a2f44c78734390e47d72578f4c9cbe709">solver.c</a>
+, <a class="el" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709">nfft3.h</a>
+</li>
+<li>solver_finalize_double()
+: <a class="el" href="solver_8c.html#a6d04f270b539a9f48b3521ba973829bf">solver.c</a>
+</li>
+<li>solver_init_advanced_double()
+: <a class="el" href="nfft3_8h.html#a1a4544ab96d14c812e3b330c439c3d80">nfft3.h</a>
+, <a class="el" href="solver_8c.html#a1a4544ab96d14c812e3b330c439c3d80">solver.c</a>
+</li>
+<li>solver_loop_one_step_cgne_complex()
+: <a class="el" href="solver_8c.html#a59278b7119c43bf23b9aaca6eae936e5">solver.c</a>
+</li>
+<li>solver_loop_one_step_cgne_double()
+: <a class="el" href="solver_8c.html#a206a5fe70bfb6853a2a9a9551e12b2db">solver.c</a>
+</li>
+<li>solver_loop_one_step_cgnr_complex()
+: <a class="el" href="solver_8c.html#a376190a64969829c029532fd0957e184">solver.c</a>
+</li>
+<li>solver_loop_one_step_cgnr_double()
+: <a class="el" href="solver_8c.html#ae134ca120f6f4fcc96626c6a1acedfb6">solver.c</a>
+</li>
+<li>solver_loop_one_step_complex()
+: <a class="el" href="solver_8c.html#a3b80b04ee3429b04c310992fb0a12420">solver.c</a>
+, <a class="el" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420">nfft3.h</a>
+</li>
+<li>solver_loop_one_step_double()
+: <a class="el" href="solver_8c.html#a89adea45056c1b5c8d90cfd87325be4e">solver.c</a>
+</li>
+<li>solver_loop_one_step_landweber_complex()
+: <a class="el" href="solver_8c.html#a7e818bcb6dd61e2a7aa5748c8ee9d339">solver.c</a>
+</li>
+<li>solver_loop_one_step_landweber_double()
+: <a class="el" href="solver_8c.html#a30d6a3373083167e38181c964d6a4288">solver.c</a>
+</li>
+<li>solver_loop_one_step_steepest_descent_complex()
+: <a class="el" href="solver_8c.html#ab14e3227776d9378c195664f3ace8110">solver.c</a>
+</li>
+<li>solver_loop_one_step_steepest_descent_double()
+: <a class="el" href="solver_8c.html#a6fef0b0a380ed017554c41b78fccc477">solver.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_0x74.html b/doc/api/html/globals_0x74.html
new file mode 100644
index 0000000..fe07a6e
--- /dev/null
+++ b/doc/api/html/globals_0x74.html
@@ -0,0 +1,89 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li class="current"><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>taylor_finalize()
+: <a class="el" href="taylor__nfft_8c.html#a10f336e1a24851643775a0da2f338c65">taylor_nfft.c</a>
+</li>
+<li>taylor_init()
+: <a class="el" href="taylor__nfft_8c.html#a8aaec175a64f4ca7e15fcdcd355f56a2">taylor_nfft.c</a>
+</li>
+<li>taylor_precompute()
+: <a class="el" href="taylor__nfft_8c.html#a13b127b1ecbbd640bd30123c635940a5">taylor_nfft.c</a>
+</li>
+<li>taylor_time_accuracy()
+: <a class="el" href="taylor__nfft_8c.html#a7ef2d41455ffa60a2f001c4981d4cf97">taylor_nfft.c</a>
+</li>
+<li>taylor_trafo()
+: <a class="el" href="taylor__nfft_8c.html#ada016505d50bb2473ce6061a342d7e20">taylor_nfft.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_0x77.html b/doc/api/html/globals_0x77.html
new file mode 100644
index 0000000..ef0dae5
--- /dev/null
+++ b/doc/api/html/globals_0x77.html
@@ -0,0 +1,80 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li class="current"><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>wigner_start()
+: <a class="el" href="wigner_8h.html#a6c43c1f82cf3efa9cb1343ec9dcd07ed">wigner.h</a>
+</li>
+<li>wisdom
+: <a class="el" href="group__nfsft.html#ga0af81d81e1b436949ddc46dbd27346e5">nfsft.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_defs.html b/doc/api/html/globals_defs.html
new file mode 100644
index 0000000..38cbda4
--- /dev/null
+++ b/doc/api/html/globals_defs.html
@@ -0,0 +1,105 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+ <ul>
+<li>EXACT_NEARFIELD
+: <a class="el" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d">fastsum.h</a>
+</li>
+<li>FIRST_L
+: <a class="el" href="fpt_8c.html#ac81f7eac1a01b06e91817857f47b9804">fpt.c</a>
+</li>
+<li>K_END_TILDE
+: <a class="el" href="fpt_8c.html#a769119c8ae45f2a30a62ba802d83139f">fpt.c</a>
+</li>
+<li>K_START_TILDE
+: <a class="el" href="fpt_8c.html#a58f899926cc6e95ea54dd68d131979b8">fpt.c</a>
+</li>
+<li>KERNEL
+: <a class="el" href="inverse__radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1">inverse_radon.c</a>
+, <a class="el" href="radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1">radon.c</a>
+</li>
+<li>LAST_L
+: <a class="el" href="fpt_8c.html#ac9f7e1529d635e3357d1e081ddf7e349">fpt.c</a>
+</li>
+<li>MACRO_MV_PLAN
+: <a class="el" href="nfft3_8h.html#a0d1eb31c2f64e41fa0399b1eb7b5ddd4">nfft3.h</a>
+</li>
+<li>MACRO_SOLVER_ADJOINT_PLAN
+: <a class="el" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637">solver_adjoint.h</a>
+</li>
+<li>NF_KUB
+: <a class="el" href="group__applications__fastsum.html#gafa2dd15778c93b2eaa42de608fb4d1a8">fastsum.h</a>
+</li>
+<li>NFFT_MAX
+: <a class="el" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3">nfft3util.h</a>
+</li>
+<li>NFFT_MIN
+: <a class="el" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308">nfft3util.h</a>
+</li>
+<li>NFFT_SWAP_complex
+: <a class="el" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5">nfft3util.h</a>
+</li>
+<li>NFFT_SWAP_double
+: <a class="el" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e">nfft3util.h</a>
+</li>
+<li>NFSFT_BREAK_EVEN
+: <a class="el" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3">nfsft.c</a>
+</li>
+<li>NFSFT_DEFAULT_NFFT_CUTOFF
+: <a class="el" href="group__nfsft.html#ga206c4faaf800b49dcb14e26148fa9ac6">nfsft.c</a>
+</li>
+<li>NFSFT_DEFAULT_THRESHOLD
+: <a class="el" href="group__nfsft.html#gab7d25b80464387893b3c773f92e5c4f3">nfsft.c</a>
+</li>
+<li>PI
+: <a class="el" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca">nfft3util.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_func.html b/doc/api/html/globals_func.html
new file mode 100644
index 0000000..b3a6c14
--- /dev/null
+++ b/doc/api/html/globals_func.html
@@ -0,0 +1,633 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="#index_b"><span>b</span></a></li>
+ <li><a href="#index_c"><span>c</span></a></li>
+ <li><a href="#index_e"><span>e</span></a></li>
+ <li><a href="#index_f"><span>f</span></a></li>
+ <li><a href="#index_i"><span>i</span></a></li>
+ <li><a href="#index_k"><span>k</span></a></li>
+ <li><a href="#index_l"><span>l</span></a></li>
+ <li><a href="#index_m"><span>m</span></a></li>
+ <li><a href="#index_n"><span>n</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_q"><span>q</span></a></li>
+ <li><a href="#index_r"><span>r</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_t"><span>t</span></a></li>
+ <li><a href="#index_w"><span>w</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>BasisPoly()
+: <a class="el" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0">fastsum.c</a>
+</li>
+<li>binom()
+: <a class="el" href="group__applications__fastsum.html#gae767db8af0cbe9244cfbd0580b0bb9f4">fastsum.c</a>
+</li>
+<li>BuildBox()
+: <a class="el" href="group__applications__fastsum.html#ga8237ee0c81a2518c4849e71317a479d0">fastsum.c</a>
+</li>
+<li>BuildTree()
+: <a class="el" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174">fastsum.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>c2e()
+: <a class="el" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656">nfsft.c</a>
+</li>
+<li>c2e_transposed()
+: <a class="el" href="group__nfsft.html#ga0e033457136bc0ecb18bb57d3ee5aa37">nfsft.c</a>
+</li>
+<li>calc_SearchBox()
+: <a class="el" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d">fastsum.c</a>
+</li>
+<li>comparison_fft()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432">linogram_fft_test.c</a>
+, <a class="el" href="group__applications__polarFFT__mpolar.html#ga522ff84df31c08a1f237ad0ec7ce4ac5">mpolar_fft_test.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>eval_sum_clenshaw_transposed()
+: <a class="el" href="fpt_8c.html#a509209ea5b6e210805a37cd80579c2c5">fpt.c</a>
+</li>
+<li>eval_wigner()
+: <a class="el" href="wigner_8h.html#a86975b8841ed9b6bb3e1484130658f19">wigner.h</a>
+</li>
+<li>eval_wigner_thresh()
+: <a class="el" href="wigner_8h.html#ae5933af03f4536a70ddfc744f16c9c55">wigner.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>fak()
+: <a class="el" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09">fastsum.c</a>
+</li>
+<li>fastsum_exact()
+: <a class="el" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd">fastsum.c</a>
+</li>
+<li>fastsum_finalize()
+: <a class="el" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769">fastsum.c</a>
+</li>
+<li>fastsum_init_guru()
+: <a class="el" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149">fastsum.c</a>
+</li>
+<li>fastsum_precompute()
+: <a class="el" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff">fastsum.c</a>
+</li>
+<li>fastsum_trafo()
+: <a class="el" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8">fastsum.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>imri_inh_2d1d_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a39cce38619ea8d9ce84326173e2d091b">solver_adjoint.h</a>
+</li>
+<li>imri_inh_2d1d_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a7b403058cdba0d2918690b2d1d577912">solver_adjoint.h</a>
+</li>
+<li>imri_inh_2d1d_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#ae0f7ba8180888f8f70aff1b041f4ec57">solver_adjoint.h</a>
+</li>
+<li>imri_inh_2d1d_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#a61bb41310d86e96ad1912ce486930bea">solver_adjoint.h</a>
+</li>
+<li>imri_inh_2d1d_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a84b7c58708fe95ff8234638689a30302">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a9a8864136de1ff61970eeed934350238">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a48c6fe11c01d742025c7eb7bf7ac9002">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#a6275d93dac2957a4acad3bda978c98cd">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#afb6ade8e78c1dfdc7e513c6e8fa7ffb6">solver_adjoint.h</a>
+</li>
+<li>imri_inh_3d_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a7e65b366bd5003cef9c16e640591b972">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a7bfc5594bbdc3d6c58fb10713a03bc40">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a48c89f97b3f452ee3aedb245d064f24e">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#a695c20cc98df4bbd370240bee9703e77">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#a4fcee80a5fbbe901b8d51717dc07ae24">solver_adjoint.h</a>
+</li>
+<li>infct_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a36eef8da31026b71a865108b095768cc">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a2a31ddf66394b88a4dd1545278e205b5">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a826591281cbec37c2a032eaecbbacf9d">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#ae93aa72dcb2528111f021c952482c244">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#adf47a7ff42ca521526db42b4d3a68f98">solver_adjoint.h</a>
+</li>
+<li>infft_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a219ff15a153205b04eec76860cb4d6eb">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a26dbcae80a2db01144d523cb3d22a01d">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#adb479e2343fef9fbafdc5d8d65085aee">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#a040cb361de66313ccbad17f746cc748d">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#a0a162589cc358719488082d0b3e42e0e">solver_adjoint.h</a>
+</li>
+<li>infsft_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a03fc19c8d3c7b8a49c8751a2a88e0d09">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a4a5720df6bfee236588f38e516e32c90">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a086451cc556027d5e909eb7d1c1249b7">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#a332fad4381e89b483482e53fa39604e3">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#ac5ad72ccf1af482d623242389bc154b2">solver_adjoint.h</a>
+</li>
+<li>infst_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a57df76147b89e6e204a465fd437fbaae">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_before_loop()
+: <a class="el" href="solver__adjoint_8h.html#a3c7be955a46b3d056b5d38324f2d2068">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_finalize()
+: <a class="el" href="solver__adjoint_8h.html#a1316a1ad32f611899e446cd98d3b0b0d">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_init()
+: <a class="el" href="solver__adjoint_8h.html#ab4dcbe373e99d9c010034c6eecdfea86">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_init_advanced()
+: <a class="el" href="solver__adjoint_8h.html#aac4fe9056cb5a96170ba6122e20d116a">solver_adjoint.h</a>
+</li>
+<li>innfft_adjoint_loop_one_step()
+: <a class="el" href="solver__adjoint_8h.html#a9e80774fcedbd2a50e4146290de9ce3f">solver_adjoint.h</a>
+</li>
+<li>inverse_linogram_fft()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#gaf44988058d3000a477c046c172c26265">linogram_fft_test.c</a>
+</li>
+<li>inverse_mpolar_fft()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#ga5d0560e898b722ee5fe09acc485bbec8">mpolar_fft_test.c</a>
+</li>
+<li>inverse_polar_fft()
+: <a class="el" href="group__applications__polarFFT__polar.html#gad996d429207cf198e9027618e081ada0">polar_fft_test.c</a>
+</li>
+<li>Inverse_Radon_trafo()
+: <a class="el" href="inverse__radon_8c.html#a298e52a05aeac043f9b35e8ae60a13e4">inverse_radon.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>kubintkern()
+: <a class="el" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79">fastsum.c</a>
+, <a class="el" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79">fastsum.h</a>
+</li>
+<li>kubintkern1()
+: <a class="el" href="group__applications__fastsum.html#gad527763b180de164610e55a704c69116">fastsum.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>linintkern()
+: <a class="el" href="group__applications__fastsum.html#gae23df7b1c09c2955895545e164bc9e99">fastsum.c</a>
+</li>
+<li>linogram_dft()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#ga708f5c41add2af92a97339dee1c068dc">linogram_fft_test.c</a>
+</li>
+<li>linogram_fft()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#gaea5025fe751ace25f818ecb3cfc16444">linogram_fft_test.c</a>
+</li>
+<li>linogram_grid()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310">linogram_fft_test.c</a>
+, <a class="el" href="inverse__radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310">inverse_radon.c</a>
+, <a class="el" href="radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310">radon.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>main()
+: <a class="el" href="group__applications__polarFFT__linogramm.html#ga3c04138a5bfe5d72780bb7e82a18e627">linogram_fft_test.c</a>
+, <a class="el" href="group__applications__polarFFT__mpolar.html#ga3c04138a5bfe5d72780bb7e82a18e627">mpolar_fft_test.c</a>
+, <a class="el" href="inverse__radon_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">inverse_radon.c</a>
+, <a class="el" href="radon_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">radon.c</a>
+, <a class="el" href="group__applications__polarFFT__polar.html#ga3c04138a5bfe5d72780bb7e82a18e627">polar_fft_test.c</a>
+</li>
+<li>max_i()
+: <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">fastsum.c</a>
+</li>
+<li>mpolar_dft()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#gaee9902054200ea50d90b5d290bff8c71">mpolar_fft_test.c</a>
+</li>
+<li>mpolar_fft()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#ga55b2f979a5c69176a73f59eb0312b53d">mpolar_fft_test.c</a>
+</li>
+<li>mpolar_grid()
+: <a class="el" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952">mpolar_fft_test.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>nfft_bspline()
+: <a class="el" href="group__nfftutil.html#ga2fd48f1f700153c050d27691c4b2a6cc">nfft3util.h</a>
+</li>
+<li>nfft_bspline_old()
+: <a class="el" href="group__nfftutil.html#ga89bd624abdfb13abc10c144a8ff949cd">nfft3util.h</a>
+</li>
+<li>nfft_cp_a_complex()
+: <a class="el" href="group__nfftutil.html#ga33409df91e7ad5e1dca3beaa63e0ef25">nfft3util.h</a>
+</li>
+<li>nfft_cp_a_double()
+: <a class="el" href="group__nfftutil.html#ga41f20c605269e701b3305e49010e0759">nfft3util.h</a>
+</li>
+<li>nfft_cp_complex()
+: <a class="el" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133">nfft3util.h</a>
+</li>
+<li>nfft_cp_double()
+: <a class="el" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2">nfft3util.h</a>
+</li>
+<li>nfft_cp_w_complex()
+: <a class="el" href="group__nfftutil.html#ga630054cb816785d766959a867965f619">nfft3util.h</a>
+</li>
+<li>nfft_cp_w_double()
+: <a class="el" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099">nfft3util.h</a>
+</li>
+<li>nfft_dot_complex()
+: <a class="el" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004">nfft3util.h</a>
+</li>
+<li>nfft_dot_double()
+: <a class="el" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5">nfft3util.h</a>
+</li>
+<li>nfft_dot_w2_complex()
+: <a class="el" href="group__nfftutil.html#ga9b59288597d159357fe86395e635a075">nfft3util.h</a>
+</li>
+<li>nfft_dot_w_complex()
+: <a class="el" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1">nfft3util.h</a>
+</li>
+<li>nfft_dot_w_double()
+: <a class="el" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39">nfft3util.h</a>
+</li>
+<li>nfft_dot_w_w2_complex()
+: <a class="el" href="group__nfftutil.html#ga68268fc9bfad5a7e7383098ac1715674">nfft3util.h</a>
+</li>
+<li>nfft_fftshift_complex()
+: <a class="el" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770">nfft3util.h</a>
+</li>
+<li>nfft_free()
+: <a class="el" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft3.h</a>
+</li>
+<li>nfft_malloc()
+: <a class="el" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft3.h</a>
+</li>
+<li>nfft_modified_fejer()
+: <a class="el" href="group__nfftutil.html#gac9b810183abafb668f8aa777c7985256">nfft3util.h</a>
+</li>
+<li>nfft_modified_jackson2()
+: <a class="el" href="group__nfftutil.html#gab45a6cd3528d3716522a0cf184375aaf">nfft3util.h</a>
+</li>
+<li>nfft_modified_jackson4()
+: <a class="el" href="group__nfftutil.html#ga126ec2282393435f0d795ac79db8654b">nfft3util.h</a>
+</li>
+<li>nfft_modified_multiquadric()
+: <a class="el" href="group__nfftutil.html#gac6201bc2aa806bd25cb14c5f96d644e9">nfft3util.h</a>
+</li>
+<li>nfft_modified_sobolev()
+: <a class="el" href="group__nfftutil.html#gaa84cb34c6d368599fb2f997eadb184a7">nfft3util.h</a>
+</li>
+<li>nfft_plain_loop()
+: <a class="el" href="group__nfftutil.html#gad979f626cc8397e26d1bd78a7ba342cd">nfft3util.h</a>
+</li>
+<li>nfft_precompute_lin_psi()
+: <a class="el" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc">nfft3.h</a>
+</li>
+<li>nfft_prod_int()
+: <a class="el" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116">nfft3util.h</a>
+</li>
+<li>nfft_prod_real()
+: <a class="el" href="group__nfftutil.html#gad7bad7074a695341742f57526f8695eb">nfft3util.h</a>
+</li>
+<li>nfft_smbi()
+: <a class="el" href="group__nfftutil.html#ga2decee6fe50d50797a82737ba82cf97a">nfft3util.h</a>
+</li>
+<li>nfft_sort_node_indices_radix_lsdf()
+: <a class="el" href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738">nfft3util.h</a>
+</li>
+<li>nfft_sort_node_indices_radix_msdf()
+: <a class="el" href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5">nfft3util.h</a>
+</li>
+<li>nfft_trafo()
+: <a class="el" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421">nfft3.h</a>
+</li>
+<li>nfft_upd_axpby_complex()
+: <a class="el" href="group__nfftutil.html#ga903a4b3ed369dcfe67b9379a238ed23d">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpby_double()
+: <a class="el" href="group__nfftutil.html#ga75e403e92875b0b919a555f8cede0e8d">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpwy_complex()
+: <a class="el" href="group__nfftutil.html#ga693919963b51cf396311b15660e04cd8">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpwy_double()
+: <a class="el" href="group__nfftutil.html#gaf6777c4b8aa9f575f1600c51e8ae343a">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpy_complex()
+: <a class="el" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5">nfft3util.h</a>
+</li>
+<li>nfft_upd_axpy_double()
+: <a class="el" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3">nfft3util.h</a>
+</li>
+<li>nfft_upd_xpawy_complex()
+: <a class="el" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e">nfft3util.h</a>
+</li>
+<li>nfft_upd_xpawy_double()
+: <a class="el" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0">nfft3util.h</a>
+</li>
+<li>nfft_upd_xpay_complex()
+: <a class="el" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4">nfft3util.h</a>
+</li>
+<li>nfft_upd_xpay_double()
+: <a class="el" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064">nfft3util.h</a>
+</li>
+<li>nfft_voronoi_weights_1d()
+: <a class="el" href="group__nfftutil.html#ga797e81f55e6379efabf4d98522d1ee9d">nfft3util.h</a>
+</li>
+<li>nfft_voronoi_weights_S2()
+: <a class="el" href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994">nfft3util.h</a>
+</li>
+<li>nfft_vpr_complex()
+: <a class="el" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0">nfft3util.h</a>
+</li>
+<li>nfft_vpr_double()
+: <a class="el" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91">nfft3util.h</a>
+</li>
+<li>nfft_vpr_int()
+: <a class="el" href="group__nfftutil.html#gaa8e0581d802c4b7bb153682a4c156409">nfft3util.h</a>
+</li>
+<li>nfft_vrand_shifted_unit_double()
+: <a class="el" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34">nfft3util.h</a>
+</li>
+<li>nfft_vrand_unit_complex()
+: <a class="el" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685">nfft3util.h</a>
+</li>
+<li>nfst_full_psi()
+: <a class="el" href="nfft3_8h.html#a02d072e80ccaca6482b396540eaef585">nfft3.h</a>
+</li>
+<li>nfst_prod_minus_a_int()
+: <a class="el" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40">nfft3util.h</a>
+</li>
+<li>nfst_trafo()
+: <a class="el" href="nfft3_8h.html#ac80b86521428ec2191919cc96c82f416">nfft3.h</a>
+</li>
+<li>nnfft_precompute_full_psi()
+: <a class="el" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9">nfft3.h</a>
+</li>
+<li>nnfft_precompute_lin_psi()
+: <a class="el" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6">nfft3.h</a>
+</li>
+<li>nnfft_precompute_phi_hut()
+: <a class="el" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580">nfft3.h</a>
+</li>
+<li>nnfft_trafo()
+: <a class="el" href="nfft3_8h.html#a994c1748ebe1371c53dd2cb437054d4f">nfft3.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>polar_dft()
+: <a class="el" href="group__applications__polarFFT__polar.html#gaf6ec0d6bb5bfea4829e551c9dc9a656e">polar_fft_test.c</a>
+</li>
+<li>polar_fft()
+: <a class="el" href="group__applications__polarFFT__polar.html#ga72ebda23ef48b6509833eea9a24fa839">polar_fft_test.c</a>
+</li>
+<li>polar_grid()
+: <a class="el" href="inverse__radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae">inverse_radon.c</a>
+, <a class="el" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae">polar_fft_test.c</a>
+, <a class="el" href="radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae">radon.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_q"></a>- q -</h3><ul>
+<li>quicksort()
+: <a class="el" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe">fastsum.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>Radon_trafo()
+: <a class="el" href="radon_8c.html#a01ba457f6edb3193453204cc702ac5ca">radon.c</a>
+</li>
+<li>regkern()
+: <a class="el" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c">fastsum.c</a>
+, <a class="el" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c">fastsum.h</a>
+</li>
+<li>regkern1()
+: <a class="el" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1">fastsum.c</a>
+</li>
+<li>regkern2()
+: <a class="el" href="group__applications__fastsum.html#ga461376a86ecb935b74e7bfa4c86275d9">fastsum.c</a>
+</li>
+<li>regkern3()
+: <a class="el" href="group__applications__fastsum.html#ga2077aec7b505fd6bf082c28cc5d59468">fastsum.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>SearchBox()
+: <a class="el" href="group__applications__fastsum.html#gae5d00a6d73390cc05d73aeca17028fc5">fastsum.c</a>
+</li>
+<li>SearchTree()
+: <a class="el" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104">fastsum.c</a>
+</li>
+<li>SO3_alpha()
+: <a class="el" href="wigner_8h.html#ab67e240f23c39daa7283fee9025a8f03">wigner.h</a>
+</li>
+<li>SO3_alpha_all()
+: <a class="el" href="wigner_8h.html#aef802fd511b566392a8b2cbb9fcd6678">wigner.h</a>
+</li>
+<li>SO3_alpha_matrix()
+: <a class="el" href="wigner_8h.html#a9ab913c454dd078bed0db8b4aa9365e1">wigner.h</a>
+</li>
+<li>SO3_alpha_row()
+: <a class="el" href="wigner_8h.html#ae9c3c9a11f1da35bb0cfbed1fb828ad2">wigner.h</a>
+</li>
+<li>SO3_beta()
+: <a class="el" href="wigner_8h.html#a6722aa3212be1361b531751a850056f6">wigner.h</a>
+</li>
+<li>SO3_beta_all()
+: <a class="el" href="wigner_8h.html#aa981c92edca3fac2f04a7d3524b8425a">wigner.h</a>
+</li>
+<li>SO3_beta_matrix()
+: <a class="el" href="wigner_8h.html#a742f6babb80797e003835bc66cfe9080">wigner.h</a>
+</li>
+<li>SO3_beta_row()
+: <a class="el" href="wigner_8h.html#a1b82e072be0c3e0d45426ed56e4e6a9d">wigner.h</a>
+</li>
+<li>SO3_gamma()
+: <a class="el" href="wigner_8h.html#a6b13b24d727910800b9f1c0da29f5f73">wigner.h</a>
+</li>
+<li>SO3_gamma_all()
+: <a class="el" href="wigner_8h.html#a4ff3aa0c3afb226613100df410cbef7f">wigner.h</a>
+</li>
+<li>SO3_gamma_matrix()
+: <a class="el" href="wigner_8h.html#aa9850cfec93784e536a728f13db4c5cb">wigner.h</a>
+</li>
+<li>SO3_gamma_row()
+: <a class="el" href="wigner_8h.html#a46516d6ec71efab3c80eecd459ad20ee">wigner.h</a>
+</li>
+<li>solver_finalize_complex()
+: <a class="el" href="solver_8c.html#a2f44c78734390e47d72578f4c9cbe709">solver.c</a>
+, <a class="el" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709">nfft3.h</a>
+</li>
+<li>solver_finalize_double()
+: <a class="el" href="solver_8c.html#a6d04f270b539a9f48b3521ba973829bf">solver.c</a>
+</li>
+<li>solver_init_advanced_double()
+: <a class="el" href="nfft3_8h.html#a1a4544ab96d14c812e3b330c439c3d80">nfft3.h</a>
+, <a class="el" href="solver_8c.html#a1a4544ab96d14c812e3b330c439c3d80">solver.c</a>
+</li>
+<li>solver_loop_one_step_cgne_complex()
+: <a class="el" href="solver_8c.html#a59278b7119c43bf23b9aaca6eae936e5">solver.c</a>
+</li>
+<li>solver_loop_one_step_cgne_double()
+: <a class="el" href="solver_8c.html#a206a5fe70bfb6853a2a9a9551e12b2db">solver.c</a>
+</li>
+<li>solver_loop_one_step_cgnr_complex()
+: <a class="el" href="solver_8c.html#a376190a64969829c029532fd0957e184">solver.c</a>
+</li>
+<li>solver_loop_one_step_cgnr_double()
+: <a class="el" href="solver_8c.html#ae134ca120f6f4fcc96626c6a1acedfb6">solver.c</a>
+</li>
+<li>solver_loop_one_step_complex()
+: <a class="el" href="solver_8c.html#a3b80b04ee3429b04c310992fb0a12420">solver.c</a>
+, <a class="el" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420">nfft3.h</a>
+</li>
+<li>solver_loop_one_step_double()
+: <a class="el" href="solver_8c.html#a89adea45056c1b5c8d90cfd87325be4e">solver.c</a>
+</li>
+<li>solver_loop_one_step_landweber_complex()
+: <a class="el" href="solver_8c.html#a7e818bcb6dd61e2a7aa5748c8ee9d339">solver.c</a>
+</li>
+<li>solver_loop_one_step_landweber_double()
+: <a class="el" href="solver_8c.html#a30d6a3373083167e38181c964d6a4288">solver.c</a>
+</li>
+<li>solver_loop_one_step_steepest_descent_complex()
+: <a class="el" href="solver_8c.html#ab14e3227776d9378c195664f3ace8110">solver.c</a>
+</li>
+<li>solver_loop_one_step_steepest_descent_double()
+: <a class="el" href="solver_8c.html#a6fef0b0a380ed017554c41b78fccc477">solver.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>taylor_finalize()
+: <a class="el" href="taylor__nfft_8c.html#a10f336e1a24851643775a0da2f338c65">taylor_nfft.c</a>
+</li>
+<li>taylor_init()
+: <a class="el" href="taylor__nfft_8c.html#a8aaec175a64f4ca7e15fcdcd355f56a2">taylor_nfft.c</a>
+</li>
+<li>taylor_precompute()
+: <a class="el" href="taylor__nfft_8c.html#a13b127b1ecbbd640bd30123c635940a5">taylor_nfft.c</a>
+</li>
+<li>taylor_time_accuracy()
+: <a class="el" href="taylor__nfft_8c.html#a7ef2d41455ffa60a2f001c4981d4cf97">taylor_nfft.c</a>
+</li>
+<li>taylor_trafo()
+: <a class="el" href="taylor__nfft_8c.html#ada016505d50bb2473ce6061a342d7e20">taylor_nfft.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>wigner_start()
+: <a class="el" href="wigner_8h.html#a6c43c1f82cf3efa9cb1343ec9dcd07ed">wigner.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_type.html b/doc/api/html/globals_type.html
new file mode 100644
index 0000000..45e474c
--- /dev/null
+++ b/doc/api/html/globals_type.html
@@ -0,0 +1,80 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+ <ul>
+<li>fastsum_plan
+: <a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum.h</a>
+</li>
+<li>fpt_data
+: <a class="el" href="fpt_8c.html#a5141ba7ff5b14b5fbf7ee769943f1c10">fpt.c</a>
+</li>
+<li>fpt_set
+: <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">nfft3.h</a>
+</li>
+<li>fpt_set_s
+: <a class="el" href="fpt_8c.html#a06f7c65536489b0602c70a616e9f1fe8">fpt.c</a>
+</li>
+<li>fpt_step
+: <a class="el" href="fpt_8c.html#a4c7f62127651d301d4604b3a6519458d">fpt.c</a>
+</li>
+<li>fptf_set
+: <a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">nfft3.h</a>
+</li>
+<li>fptl_set
+: <a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">nfft3.h</a>
+</li>
+<li>nfft_free_type_function
+: <a class="el" href="nfft3_8h.html#acdec9723f6ea0ea162d5f3fc6f1f1906">nfft3.h</a>
+</li>
+<li>nfft_malloc_type_function
+: <a class="el" href="nfft3_8h.html#ae2db105c02d4b63d1962dc94d4e7a4c2">nfft3.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/globals_vars.html b/doc/api/html/globals_vars.html
new file mode 100644
index 0000000..a63ce0a
--- /dev/null
+++ b/doc/api/html/globals_vars.html
@@ -0,0 +1,62 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Globals
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_defs.html"><span>Macros</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="contents">
+ <ul>
+<li>nfft_free_hook
+: <a class="el" href="nfft3_8h.html#a5b4d02593a82ded7c1d3c3c868e72347">nfft3.h</a>
+</li>
+<li>nfft_malloc_hook
+: <a class="el" href="nfft3_8h.html#aa578dec914d95bda5a2fad3fbd90c76f">nfft3.h</a>
+</li>
+<li>wisdom
+: <a class="el" href="group__nfsft.html#ga0af81d81e1b436949ddc46dbd27346e5">nfsft.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications.html b/doc/api/html/group__applications.html
new file mode 100644
index 0000000..169fa40
--- /dev/null
+++ b/doc/api/html/group__applications.html
@@ -0,0 +1,55 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Applications
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#groups">Modules</a> </div>
+ <div class="headertitle">
+<div class="title">Applications</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__fastgauss"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html">Fast Gauss transfrom with complex parameter</a></td></tr>
+<tr class="memitem:group__applications__fastsum"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html">Fast summation</a></td></tr>
+<tr class="memdesc:group__applications__fastsum"><td class="mdescLeft"> </td><td class="mdescRight">Required for test if (ths->k == one_over_x) <br/></td></tr>
+<tr class="memitem:group__applications__fastsumS2"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2.html">Fast summation of radial functions on the sphere</a></td></tr>
+<tr class="memitem:group__applications__iterS2"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__iterS2.html">Iterative reconstruction on the sphere S2</a></td></tr>
+<tr class="memitem:group__applications__mri"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri.html">Transforms in magnetic resonance imaging</a></td></tr>
+<tr class="memitem:group__applications__polarFFT"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT.html">Polar FFT</a></td></tr>
+<tr class="memitem:group__applications__quadratureS2"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__quadratureS2.html">Fast evaluation of quadrature formulae on the sphere</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__fastgauss.html b/doc/api/html/group__applications__fastgauss.html
new file mode 100644
index 0000000..d7479f9
--- /dev/null
+++ b/doc/api/html/group__applications__fastgauss.html
@@ -0,0 +1,638 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Fast Gauss transfrom with complex parameter
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Fast Gauss transfrom with complex parameter</div> </div>
+<div class="ingroups"><a class="el" href="group__applications.html">Applications</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html">fgt_plan</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for the Gauss transform. <a href="structfgt__plan.html#details">More...</a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga48aa1ec81a29b9f079701246f0b53ccc"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga48aa1ec81a29b9f079701246f0b53ccc">DGT_PRE_CEXP</a> (1U<< 0)</td></tr>
+<tr class="memdesc:ga48aa1ec81a29b9f079701246f0b53ccc"><td class="mdescLeft"> </td><td class="mdescRight">If this flag is set, the whole matrix is precomputed and stored for the discrete Gauss transfrom. <a href="#ga48aa1ec81a29b9f079701246f0b53ccc"></a><br/></td></tr>
+<tr class="memitem:ga38ab7e1022ff3c5b556ce93078a05d1e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga38ab7e1022ff3c5b556ce93078a05d1e">FGT_NDFT</a> (1U<< 1)</td></tr>
+<tr class="memdesc:ga38ab7e1022ff3c5b556ce93078a05d1e"><td class="mdescLeft"> </td><td class="mdescRight">If this flag is set, the fast Gauss transform uses the discrete instead of the fast Fourier transform. <a href="#ga38ab7e1022ff3c5b556ce93078a05d1e"></a><br/></td></tr>
+<tr class="memitem:ga39c3e544a78853e0da2b9a8c66d3054d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga39c3e544a78853e0da2b9a8c66d3054d">FGT_APPROX_B</a> (1U<< 2)</td></tr>
+<tr class="memdesc:ga39c3e544a78853e0da2b9a8c66d3054d"><td class="mdescLeft"> </td><td class="mdescRight">If this flag is set, the discrete Fourier coefficients of the uniformly sampled Gaussian are used instead of the sampled continuous Fourier transform. <a href="#ga39c3e544a78853e0da2b9a8c66d3054d"></a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga42f141fc768ced46eb2dac284b063b80"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga42f141fc768ced46eb2dac284b063b80">dgt_trafo</a> (<a class="el" href="structfgt__plan.html">fgt_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga42f141fc768ced46eb2dac284b063b80"><td class="mdescLeft"> </td><td class="mdescRight">Executes the discrete Gauss transform. <a href="#ga42f141fc768ced46eb2dac284b063b80"></a><br/></td></tr>
+<tr class="memitem:gab12b6f7c36927db24d8555484dcdfde0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#gab12b6f7c36927db24d8555484dcdfde0">fgt_trafo</a> (<a class="el" href="structfgt__plan.html">fgt_plan</a> *ths)</td></tr>
+<tr class="memdesc:gab12b6f7c36927db24d8555484dcdfde0"><td class="mdescLeft"> </td><td class="mdescRight">Executes the fast Gauss transform. <a href="#gab12b6f7c36927db24d8555484dcdfde0"></a><br/></td></tr>
+<tr class="memitem:ga902eb9182c72c3c9293084a70523ebff"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga902eb9182c72c3c9293084a70523ebff">fgt_init_guru</a> (<a class="el" href="structfgt__plan.html">fgt_plan</a> *ths, int N, int M, double _Complex sigma, int n, double p, int m, unsigned flags)</td></tr>
+<tr class="memdesc:ga902eb9182c72c3c9293084a70523ebff"><td class="mdescLeft"> </td><td class="mdescRight">Initialisation of a transform plan, guru. <a href="#ga902eb9182c72c3c9293084a70523ebff"></a><br/></td></tr>
+<tr class="memitem:ga44cf9a6fb0a16df875f613f343fd5c65"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga44cf9a6fb0a16df875f613f343fd5c65">fgt_init</a> (<a class="el" href="structfgt__plan.html">fgt_plan</a> *ths, int N, int M, double _Complex sigma, double eps)</td></tr>
+<tr class="memdesc:ga44cf9a6fb0a16df875f613f343fd5c65"><td class="mdescLeft"> </td><td class="mdescRight">Initialisation of a transform plan, simple. <a href="#ga44cf9a6fb0a16df875f613f343fd5c65"></a><br/></td></tr>
+<tr class="memitem:ga9d8f6229d33bc49f618838b21b3dd7fc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga9d8f6229d33bc49f618838b21b3dd7fc">fgt_init_node_dependent</a> (<a class="el" href="structfgt__plan.html">fgt_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga9d8f6229d33bc49f618838b21b3dd7fc"><td class="mdescLeft"> </td><td class="mdescRight">Initialisation of a transform plan, depends on source and target nodes. <a href="#ga9d8f6229d33bc49f618838b21b3dd7fc"></a><br/></td></tr>
+<tr class="memitem:ga4634fe28b9e1be61106871cf0e61ef83"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga4634fe28b9e1be61106871cf0e61ef83">fgt_finalize</a> (<a class="el" href="structfgt__plan.html">fgt_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga4634fe28b9e1be61106871cf0e61ef83"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the transform plan. <a href="#ga4634fe28b9e1be61106871cf0e61ef83"></a><br/></td></tr>
+<tr class="memitem:ga317a464dbf2df948bb94ef5748710e57"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga317a464dbf2df948bb94ef5748710e57">fgt_test_init_rand</a> (<a class="el" href="structfgt__plan.html">fgt_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga317a464dbf2df948bb94ef5748710e57"><td class="mdescLeft"> </td><td class="mdescRight">Random initialisation of a fgt plan. <a href="#ga317a464dbf2df948bb94ef5748710e57"></a><br/></td></tr>
+<tr class="memitem:gabebca8cc0714b36c3b47e2a5d0317960"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#gabebca8cc0714b36c3b47e2a5d0317960">fgt_test_measure_time</a> (<a class="el" href="structfgt__plan.html">fgt_plan</a> *ths, unsigned dgt)</td></tr>
+<tr class="memdesc:gabebca8cc0714b36c3b47e2a5d0317960"><td class="mdescLeft"> </td><td class="mdescRight">Compares execution times for the fast and discrete Gauss transform. <a href="#gabebca8cc0714b36c3b47e2a5d0317960"></a><br/></td></tr>
+<tr class="memitem:ga74b5dd8d6f593462a2b37b290ad4d227"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga74b5dd8d6f593462a2b37b290ad4d227">fgt_test_simple</a> (int N, int M, double _Complex sigma, double eps)</td></tr>
+<tr class="memdesc:ga74b5dd8d6f593462a2b37b290ad4d227"><td class="mdescLeft"> </td><td class="mdescRight">Simple example that computes fast and discrete Gauss transforms. <a href="#ga74b5dd8d6f593462a2b37b290ad4d227"></a><br/></td></tr>
+<tr class="memitem:gaac05fa78924012be74e54ddbd098892f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#gaac05fa78924012be74e54ddbd098892f">fgt_test_andersson</a> (void)</td></tr>
+<tr class="memdesc:gaac05fa78924012be74e54ddbd098892f"><td class="mdescLeft"> </td><td class="mdescRight">Compares accuracy and execution time of the fast Gauss transform with increasing expansion degree. <a href="#gaac05fa78924012be74e54ddbd098892f"></a><br/></td></tr>
+<tr class="memitem:gaab0a7e29242524d33269448fc4612946"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#gaab0a7e29242524d33269448fc4612946">fgt_test_error</a> (void)</td></tr>
+<tr class="memdesc:gaab0a7e29242524d33269448fc4612946"><td class="mdescLeft"> </td><td class="mdescRight">Compares accuracy of the fast Gauss transform with increasing expansion degree. <a href="#gaab0a7e29242524d33269448fc4612946"></a><br/></td></tr>
+<tr class="memitem:gab68ea529a033a478a391243d8dacf61b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#gab68ea529a033a478a391243d8dacf61b">fgt_test_error_p</a> (void)</td></tr>
+<tr class="memdesc:gab68ea529a033a478a391243d8dacf61b"><td class="mdescLeft"> </td><td class="mdescRight">Compares accuracy of the fast Gauss transform with increasing expansion degree and different periodisation lengths. <a href="#gab68ea529a033a478a391243d8dacf61b"></a><br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastgauss.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">Different tests of the fast Gauss transform. <a href="#ga3c04138a5bfe5d72780bb7e82a18e627"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<hr/><h2>Macro Definition Documentation</h2>
+<a class="anchor" id="ga48aa1ec81a29b9f079701246f0b53ccc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DGT_PRE_CEXP (1U<< 0)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>If this flag is set, the whole matrix is precomputed and stored for the discrete Gauss transfrom. </p>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__applications__fastgauss.html#ga9d8f6229d33bc49f618838b21b3dd7fc" title="Initialisation of a transform plan, depends on source and target nodes.">fgt_init_node_dependent</a> </dd>
+<dd>
+<a class="el" href="group__applications__fastgauss.html#ga44cf9a6fb0a16df875f613f343fd5c65" title="Initialisation of a transform plan, simple.">fgt_init</a> </dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00048">48</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00107">dgt_trafo()</a>, <a class="el" href="fastgauss_8c_source.html#l00240">fgt_init()</a>, <a class="el" href="fastgauss_8c_source.html#l00263">fgt_init_node_dependent()</a>, and <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga38ab7e1022ff3c5b556ce93078a05d1e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FGT_NDFT (1U<< 1)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>If this flag is set, the fast Gauss transform uses the discrete instead of the fast Fourier transform. </p>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__applications__fastgauss.html#ga44cf9a6fb0a16df875f613f343fd5c65" title="Initialisation of a transform plan, simple.">fgt_init</a> </dd>
+<dd>
+nfft_trafo_direct </dd>
+<dd>
+<a class="el" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a> </dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00059">59</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, and <a class="el" href="fastgauss_8c_source.html#l00132">fgt_trafo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga39c3e544a78853e0da2b9a8c66d3054d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FGT_APPROX_B (1U<< 2)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>If this flag is set, the discrete Fourier coefficients of the uniformly sampled Gaussian are used instead of the sampled continuous Fourier transform. </p>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__applications__fastgauss.html#ga44cf9a6fb0a16df875f613f343fd5c65" title="Initialisation of a transform plan, simple.">fgt_init</a> </dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00069">69</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00170">fgt_init_guru()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga42f141fc768ced46eb2dac284b063b80"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dgt_trafo </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structfgt__plan.html">fgt_plan</a> * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Executes the discrete Gauss transform. </p>
+<ul>
+<li>ths The pointer to a fgt plan</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00107">107</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00077">fgt_plan::alpha</a>, <a class="el" href="fastgauss_8c_source.html#l00048">DGT_PRE_CEXP</a>, <a class="el" href="fastgauss_8c_source.html#l00078">fgt_plan::f</a>, <a class="el" href="fastgauss_8c_source.html#l00080">fgt_plan::flags</a>, <a class="el" href="fastgauss_8c_source.html#l00075">fgt_plan::M</a>, <a class="el" href="fastgauss_8c_source.html#l00074">fgt_plan::N</a>, <a class="el" href="fastgauss_8c_source.html#l000 [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a class="el" href="fastgauss_8c_source.html#l00532">fgt_test_error_p()</a>, <a class="el" href="fastgauss_8c_source.html#l00341">fgt_test_measure_time()</a>, and <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab12b6f7c36927db24d8555484dcdfde0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void fgt_trafo </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structfgt__plan.html">fgt_plan</a> * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Executes the fast Gauss transform. </p>
+<ul>
+<li>ths The pointer to a fgt plan</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00132">132</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00093">fgt_plan::b</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::f_hat</a>, <a class="el" href="fastgauss_8c_source.html#l00059">FGT_NDFT</a>, <a class="el" href="fastgauss_8c_source.html#l00080">fgt_plan::flags</a>, <a class="el" href="fastgauss_8c_source.html#l00090">fgt_plan::n</a>, <a class="el" href="nfft_8c_source.html#l05354">nfft_trafo()</a>, <a class="el" href="fastgauss_8c_source.html#l00095">fgt_pla [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a class="el" href="fastgauss_8c_source.html#l00532">fgt_test_error_p()</a>, <a class="el" href="fastgauss_8c_source.html#l00341">fgt_test_measure_time()</a>, and <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga902eb9182c72c3c9293084a70523ebff"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void fgt_init_guru </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structfgt__plan.html">fgt_plan</a> * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>N</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>M</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double _Complex </td>
+ <td class="paramname"><em>sigma</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>n</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double </td>
+ <td class="paramname"><em>p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned </td>
+ <td class="paramname"><em>flags</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Initialisation of a transform plan, guru. </p>
+<ul>
+<li>ths The pointer to a fpt plan </li>
+<li>N The number of source nodes </li>
+<li>M The number of target nodes </li>
+<li>sigma The parameter of the Gaussian </li>
+<li>n The polynomial expansion degree </li>
+<li>p the periodisation length, at least 1 </li>
+<li>m The spatial cut-off of the nfft </li>
+<li>flags FGT flags to use</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00170">170</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00077">fgt_plan::alpha</a>, <a class="el" href="fastgauss_8c_source.html#l00093">fgt_plan::b</a>, <a class="el" href="fastgauss_8c_source.html#l00078">fgt_plan::f</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::f</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::f_hat</a>, <a class="el" href="fastgauss_8c_source.html#l00069">FGT_APPROX_B</a>, <a class="el" href="fastgauss_8c_source.html#l00080">fg [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00240">fgt_init()</a>, <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, and <a class="el" href="fastgauss_8c_source.html#l00532">fgt_test_error_p()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga44cf9a6fb0a16df875f613f343fd5c65"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void fgt_init </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structfgt__plan.html">fgt_plan</a> * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>N</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>M</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double _Complex </td>
+ <td class="paramname"><em>sigma</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double </td>
+ <td class="paramname"><em>eps</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Initialisation of a transform plan, simple. </p>
+<ul>
+<li>ths The pointer to a fpt plan </li>
+<li>N The number of source nodes </li>
+<li>M The number of target nodes </li>
+<li>sigma The parameter of the Gaussian </li>
+<li>eps The target accuracy</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00240">240</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00048">DGT_PRE_CEXP</a>, <a class="el" href="fastgauss_8c_source.html#l00170">fgt_init_guru()</a>, and <a class="el" href="nfft3util_8h_source.html#l00062">PI</a>.</p>
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga9d8f6229d33bc49f618838b21b3dd7fc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void fgt_init_node_dependent </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structfgt__plan.html">fgt_plan</a> * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Initialisation of a transform plan, depends on source and target nodes. </p>
+<ul>
+<li>ths The pointer to a fpt plan <dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+</li>
+</ul>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00263">263</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00048">DGT_PRE_CEXP</a>, <a class="el" href="fastgauss_8c_source.html#l00080">fgt_plan::flags</a>, <a class="el" href="fastgauss_8c_source.html#l00075">fgt_plan::M</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::M_total</a>, <a class="el" href="fastgauss_8c_source.html#l00074">fgt_plan::N</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::nfft_flags</a>, <a class="el" href="nfft3_8h.html#aafe616743 [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a class="el" href="fastgauss_8c_source.html#l00532">fgt_test_error_p()</a>, and <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga4634fe28b9e1be61106871cf0e61ef83"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void fgt_finalize </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structfgt__plan.html">fgt_plan</a> * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Destroys the transform plan. </p>
+<ul>
+<li>ths The pointer to the fgt plan <dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+</li>
+</ul>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00295">295</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00077">fgt_plan::alpha</a>, <a class="el" href="fastgauss_8c_source.html#l00093">fgt_plan::b</a>, <a class="el" href="fastgauss_8c_source.html#l00078">fgt_plan::f</a>, <a class="el" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free()</a>, <a class="el" href="fastgauss_8c_source.html#l00095">fgt_plan::nplan1</a>, <a class="el" href="fastgauss_8c_source.html#l00096">fgt_plan::nplan2</a>, <a class="el" href="fastgaus [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a class="el" href="fastgauss_8c_source.html#l00532">fgt_test_error_p()</a>, and <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga317a464dbf2df948bb94ef5748710e57"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void fgt_test_init_rand </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structfgt__plan.html">fgt_plan</a> * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Random initialisation of a fgt plan. </p>
+<ul>
+<li>ths The pointer to the fgt plan <dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+</li>
+</ul>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00318">318</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00077">fgt_plan::alpha</a>, <a class="el" href="fastgauss_8c_source.html#l00075">fgt_plan::M</a>, <a class="el" href="fastgauss_8c_source.html#l00074">fgt_plan::N</a>, <a class="el" href="fastgauss_8c_source.html#l00085">fgt_plan::x</a>, and <a class="el" href="fastgauss_8c_source.html#l00086">fgt_plan::y</a>.</p>
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a class="el" href="fastgauss_8c_source.html#l00532">fgt_test_error_p()</a>, and <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gabebca8cc0714b36c3b47e2a5d0317960"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double fgt_test_measure_time </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structfgt__plan.html">fgt_plan</a> * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned </td>
+ <td class="paramname"><em>dgt</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compares execution times for the fast and discrete Gauss transform. </p>
+<ul>
+<li>ths The pointer to the fgt plan </li>
+<li>dgt If this parameter is set <a class="el" href="group__applications__fastgauss.html#ga42f141fc768ced46eb2dac284b063b80">dgt_trafo</a> is called as well</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00341">341</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00107">dgt_trafo()</a>, and <a class="el" href="fastgauss_8c_source.html#l00132">fgt_trafo()</a>.</p>
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga74b5dd8d6f593462a2b37b290ad4d227"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void fgt_test_simple </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>N</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>M</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double _Complex </td>
+ <td class="paramname"><em>sigma</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double </td>
+ <td class="paramname"><em>eps</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Simple example that computes fast and discrete Gauss transforms. </p>
+<ul>
+<li>ths The pointer to the fgt plan </li>
+<li>sigma The parameter of the Gaussian </li>
+<li>eps The target accuracy</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00375">375</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00077">fgt_plan::alpha</a>, <a class="el" href="fastgauss_8c_source.html#l00107">dgt_trafo()</a>, <a class="el" href="fastgauss_8c_source.html#l00078">fgt_plan::f</a>, <a class="el" href="fastgauss_8c_source.html#l00295">fgt_finalize()</a>, <a class="el" href="fastgauss_8c_source.html#l00240">fgt_init()</a>, <a class="el" href="fastgauss_8c_source.html#l00263">fgt_init_node_dependent()</a>, <a class="el" href="fastgauss_8c_sourc [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00580">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaac05fa78924012be74e54ddbd098892f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void fgt_test_andersson </td>
+ <td>(</td>
+ <td class="paramtype">void </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compares accuracy and execution time of the fast Gauss transform with increasing expansion degree. </p>
+<p>Similar to the test in F. Andersson and G. Beylkin. The fast Gauss transform with double _Complex parameters. J. Comput. Physics 203 (2005) 274-286</p>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00410">410</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00077">fgt_plan::alpha</a>, <a class="el" href="fastgauss_8c_source.html#l00048">DGT_PRE_CEXP</a>, <a class="el" href="fastgauss_8c_source.html#l00078">fgt_plan::f</a>, <a class="el" href="fastgauss_8c_source.html#l00295">fgt_finalize()</a>, <a class="el" href="fastgauss_8c_source.html#l00170">fgt_init_guru()</a>, <a class="el" href="fastgauss_8c_source.html#l00263">fgt_init_node_dependent()</a>, <a class="el" href="fastgauss_8c [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00580">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaab0a7e29242524d33269448fc4612946"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void fgt_test_error </td>
+ <td>(</td>
+ <td class="paramtype">void </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compares accuracy of the fast Gauss transform with increasing expansion degree. </p>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00481">481</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00077">fgt_plan::alpha</a>, <a class="el" href="fastgauss_8c_source.html#l00107">dgt_trafo()</a>, <a class="el" href="fastgauss_8c_source.html#l00078">fgt_plan::f</a>, <a class="el" href="fastgauss_8c_source.html#l00295">fgt_finalize()</a>, <a class="el" href="fastgauss_8c_source.html#l00170">fgt_init_guru()</a>, <a class="el" href="fastgauss_8c_source.html#l00263">fgt_init_node_dependent()</a>, <a class="el" href="fastgauss_8c_ [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00580">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab68ea529a033a478a391243d8dacf61b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void fgt_test_error_p </td>
+ <td>(</td>
+ <td class="paramtype">void </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compares accuracy of the fast Gauss transform with increasing expansion degree and different periodisation lengths. </p>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00532">532</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00077">fgt_plan::alpha</a>, <a class="el" href="fastgauss_8c_source.html#l00107">dgt_trafo()</a>, <a class="el" href="fastgauss_8c_source.html#l00078">fgt_plan::f</a>, <a class="el" href="fastgauss_8c_source.html#l00295">fgt_finalize()</a>, <a class="el" href="fastgauss_8c_source.html#l00170">fgt_init_guru()</a>, <a class="el" href="fastgauss_8c_source.html#l00263">fgt_init_node_dependent()</a>, <a class="el" href="fastgauss_8c_ [...]
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00580">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char ** </td>
+ <td class="paramname"><em>argv</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Different tests of the fast Gauss transform. </p>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00580">580</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+
+<p>References <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a class="el" href="fastgauss_8c_source.html#l00532">fgt_test_error_p()</a>, and <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__fastsum.html b/doc/api/html/group__applications__fastsum.html
new file mode 100644
index 0000000..c6c5e26
--- /dev/null
+++ b/doc/api/html/group__applications__fastsum.html
@@ -0,0 +1,417 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Fast summation
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#groups">Modules</a> |
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Fast summation</div> </div>
+<div class="ingroups"><a class="el" href="group__applications.html">Applications</a></div></div><!--header-->
+<div class="contents">
+
+<p>Required for test if (ths->k == one_over_x)
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__fastsum__matlab"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum__matlab.html">fastsum_matlab</a></td></tr>
+<tr class="memitem:group__applications__fastsum__test"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum__test.html">fastsum_test</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html">fastsum_plan_</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">plan for fast summation algorithm <a href="structfastsum__plan__.html#details">More...</a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:gafa2dd15778c93b2eaa42de608fb4d1a8"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gafa2dd15778c93b2eaa42de608fb4d1a8">NF_KUB</a></td></tr>
+<tr class="memdesc:gafa2dd15778c93b2eaa42de608fb4d1a8"><td class="mdescLeft"> </td><td class="mdescRight">Include header for C99 complex datatype. <a href="#gafa2dd15778c93b2eaa42de608fb4d1a8"></a><br/></td></tr>
+<tr class="memitem:gac22376cb30edef9131c592a355d1030d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac22376cb30edef9131c592a355d1030d"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gac22376cb30edef9131c592a355d1030d">EXACT_NEARFIELD</a> (1U<< 0)</td></tr>
+<tr class="memdesc:gac22376cb30edef9131c592a355d1030d"><td class="mdescLeft"> </td><td class="mdescRight">Constant symbols. <br/></td></tr>
+<tr class="memitem:ga90e3c393cc832eec83e9da3b207edb8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga90e3c393cc832eec83e9da3b207edb8c"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NEARFIELD_BOXES</b> (1U<< 1)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga9227ba3791b3360dc4a0d6fbf82034c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9227ba3791b3360dc4a0d6fbf82034c6"></a>
+typedef double _Complex(* </td><td class="memItemRight" valign="bottom"><b>kernel</b> )(double, int, const double *)</td></tr>
+<tr class="memitem:gad953252f6b309404991c4afc7b98b34b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad953252f6b309404991c4afc7b98b34b"></a>
+typedef struct <a class="el" href="structfastsum__plan__.html">fastsum_plan_</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a></td></tr>
+<tr class="memdesc:gad953252f6b309404991c4afc7b98b34b"><td class="mdescLeft"> </td><td class="mdescRight">plan for fast summation algorithm <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga37a2a7cb4fb162d6e6e46ea614318a4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga37a2a7cb4fb162d6e6e46ea614318a4e"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a> (int a, int b)</td></tr>
+<tr class="memdesc:ga37a2a7cb4fb162d6e6e46ea614318a4e"><td class="mdescLeft"> </td><td class="mdescRight">max <br/></td></tr>
+<tr class="memitem:ga6fd3e84b794684dd1c6236619437bf09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6fd3e84b794684dd1c6236619437bf09"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga6fd3e84b794684dd1c6236619437bf09">fak</a> (int n)</td></tr>
+<tr class="memdesc:ga6fd3e84b794684dd1c6236619437bf09"><td class="mdescLeft"> </td><td class="mdescRight">factorial <br/></td></tr>
+<tr class="memitem:gae767db8af0cbe9244cfbd0580b0bb9f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae767db8af0cbe9244cfbd0580b0bb9f4"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gae767db8af0cbe9244cfbd0580b0bb9f4">binom</a> (int n, int m)</td></tr>
+<tr class="memdesc:gae767db8af0cbe9244cfbd0580b0bb9f4"><td class="mdescLeft"> </td><td class="mdescRight">binomial coefficient <br/></td></tr>
+<tr class="memitem:ga0c4b940daf11ebe201355f43f26cddd0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0c4b940daf11ebe201355f43f26cddd0"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga0c4b940daf11ebe201355f43f26cddd0">BasisPoly</a> (int m, int r, double xx)</td></tr>
+<tr class="memdesc:ga0c4b940daf11ebe201355f43f26cddd0"><td class="mdescLeft"> </td><td class="mdescRight">basis polynomial for regularized kernel <br/></td></tr>
+<tr class="memitem:ga247527ab67657107225fa69882f0208c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga247527ab67657107225fa69882f0208c"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga247527ab67657107225fa69882f0208c">regkern</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:ga247527ab67657107225fa69882f0208c"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel with K_I arbitrary and K_B smooth to zero <br/></td></tr>
+<tr class="memitem:gaf022589be0533270b476edc9b78928f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf022589be0533270b476edc9b78928f1"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gaf022589be0533270b476edc9b78928f1">regkern1</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:gaf022589be0533270b476edc9b78928f1"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel with K_I arbitrary and K_B periodized (used in 1D) <br/></td></tr>
+<tr class="memitem:ga461376a86ecb935b74e7bfa4c86275d9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga461376a86ecb935b74e7bfa4c86275d9"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga461376a86ecb935b74e7bfa4c86275d9">regkern2</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:ga461376a86ecb935b74e7bfa4c86275d9"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel for even kernels with K_I even and K_B mirrored <br/></td></tr>
+<tr class="memitem:ga2077aec7b505fd6bf082c28cc5d59468"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2077aec7b505fd6bf082c28cc5d59468"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga2077aec7b505fd6bf082c28cc5d59468">regkern3</a> (kernel k, double xx, int p, const double *param, double a, double b)</td></tr>
+<tr class="memdesc:ga2077aec7b505fd6bf082c28cc5d59468"><td class="mdescLeft"> </td><td class="mdescRight">regularized kernel for even kernels with K_I even and K_B mirrored smooth to K(1/2) (used in dD, d>1) <br/></td></tr>
+<tr class="memitem:gae23df7b1c09c2955895545e164bc9e99"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae23df7b1c09c2955895545e164bc9e99"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gae23df7b1c09c2955895545e164bc9e99">linintkern</a> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memdesc:gae23df7b1c09c2955895545e164bc9e99"><td class="mdescLeft"> </td><td class="mdescRight">linear spline interpolation in near field with even kernels <br/></td></tr>
+<tr class="memitem:gabad684b95fbab7d2c039bec72bff712e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabad684b95fbab7d2c039bec72bff712e"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>quadrintkern</b> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memitem:ga67103860c05f7296f7c302e7f0dbfe79"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga67103860c05f7296f7c302e7f0dbfe79"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga67103860c05f7296f7c302e7f0dbfe79">kubintkern</a> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memdesc:ga67103860c05f7296f7c302e7f0dbfe79"><td class="mdescLeft"> </td><td class="mdescRight">cubic spline interpolation in near field with even kernels <br/></td></tr>
+<tr class="memitem:gad527763b180de164610e55a704c69116"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad527763b180de164610e55a704c69116"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gad527763b180de164610e55a704c69116">kubintkern1</a> (const double x, const double _Complex *Add, const int Ad, const double a)</td></tr>
+<tr class="memdesc:gad527763b180de164610e55a704c69116"><td class="mdescLeft"> </td><td class="mdescRight">cubic spline interpolation in near field with arbitrary kernels <br/></td></tr>
+<tr class="memitem:ga7d3d3786f2e799dc1fa1704281f4a3fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7d3d3786f2e799dc1fa1704281f4a3fe"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga7d3d3786f2e799dc1fa1704281f4a3fe">quicksort</a> (int d, int t, double *x, double _Complex *alpha, int N)</td></tr>
+<tr class="memdesc:ga7d3d3786f2e799dc1fa1704281f4a3fe"><td class="mdescLeft"> </td><td class="mdescRight">quicksort algorithm for source knots and associated coefficients <br/></td></tr>
+<tr class="memitem:ga8237ee0c81a2518c4849e71317a479d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8237ee0c81a2518c4849e71317a479d0"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga8237ee0c81a2518c4849e71317a479d0">BuildBox</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga8237ee0c81a2518c4849e71317a479d0"><td class="mdescLeft"> </td><td class="mdescRight">initialize box-based search data structures <br/></td></tr>
+<tr class="memitem:ga15df6167d1d2dd375cb81e81a969cf9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga15df6167d1d2dd375cb81e81a969cf9d"></a>
+static double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga15df6167d1d2dd375cb81e81a969cf9d">calc_SearchBox</a> (int d, double *y, double *x, double _Complex *alpha, int start, int end_lt, const double _Complex *Add, const int Ad, int p, double a, const kernel k, const double *param, const unsigned flags)</td></tr>
+<tr class="memdesc:ga15df6167d1d2dd375cb81e81a969cf9d"><td class="mdescLeft"> </td><td class="mdescRight">inner computation function for box-based near field correction <br/></td></tr>
+<tr class="memitem:gae5d00a6d73390cc05d73aeca17028fc5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae5d00a6d73390cc05d73aeca17028fc5"></a>
+static double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gae5d00a6d73390cc05d73aeca17028fc5">SearchBox</a> (double *y, <a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gae5d00a6d73390cc05d73aeca17028fc5"><td class="mdescLeft"> </td><td class="mdescRight">box-based near field correction <br/></td></tr>
+<tr class="memitem:ga61bae6836e2c586b9de245b664853174"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga61bae6836e2c586b9de245b664853174"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga61bae6836e2c586b9de245b664853174">BuildTree</a> (int d, int t, double *x, double _Complex *alpha, int N)</td></tr>
+<tr class="memdesc:ga61bae6836e2c586b9de245b664853174"><td class="mdescLeft"> </td><td class="mdescRight">recursive sort of source knots dimension by dimension to get tree structure <br/></td></tr>
+<tr class="memitem:gab5a71f2cd5581bfa121b77aa6c981104"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab5a71f2cd5581bfa121b77aa6c981104"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gab5a71f2cd5581bfa121b77aa6c981104">SearchTree</a> (const int d, const int t, const double *x, const double _Complex *alpha, const double *xmin, const double *xmax, const int N, const kernel k, const double *param, const int Ad, const double _Complex *Add, const int p, const unsigned flags)</td></tr>
+<tr class="memdesc:gab5a71f2cd5581bfa121b77aa6c981104"><td class="mdescLeft"> </td><td class="mdescRight">fast search in tree of source knots for near field computation <br/></td></tr>
+<tr class="memitem:ga9a053d513b2eb19c5f1c70f16e0ae149"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga9a053d513b2eb19c5f1c70f16e0ae149">fastsum_init_guru</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths, int d, int N_total, int M_total, kernel k, double *param, unsigned flags, int nn, int m, int p, double e [...]
+<tr class="memdesc:ga9a053d513b2eb19c5f1c70f16e0ae149"><td class="mdescLeft"> </td><td class="mdescRight">initialization of fastsum plan <a href="#ga9a053d513b2eb19c5f1c70f16e0ae149"></a><br/></td></tr>
+<tr class="memitem:gab989ea4659fe681bd4c025e82756f769"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gab989ea4659fe681bd4c025e82756f769">fastsum_finalize</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gab989ea4659fe681bd4c025e82756f769"><td class="mdescLeft"> </td><td class="mdescRight">finalization of fastsum plan <a href="#gab989ea4659fe681bd4c025e82756f769"></a><br/></td></tr>
+<tr class="memitem:gaaee3dd954ffc99e4330fabe16ccad0fd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gaaee3dd954ffc99e4330fabe16ccad0fd">fastsum_exact</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gaaee3dd954ffc99e4330fabe16ccad0fd"><td class="mdescLeft"> </td><td class="mdescRight">direct computation of sums <a href="#gaaee3dd954ffc99e4330fabe16ccad0fd"></a><br/></td></tr>
+<tr class="memitem:ga197c16fcec7935886fc97d140f2b20ff"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#ga197c16fcec7935886fc97d140f2b20ff">fastsum_precompute</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:ga197c16fcec7935886fc97d140f2b20ff"><td class="mdescLeft"> </td><td class="mdescRight">precomputation for fastsum <a href="#ga197c16fcec7935886fc97d140f2b20ff"></a><br/></td></tr>
+<tr class="memitem:gaab2cc691ba59064c18d439c9fd2185e8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsum.html#gaab2cc691ba59064c18d439c9fd2185e8">fastsum_trafo</a> (<a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> *ths)</td></tr>
+<tr class="memdesc:gaab2cc691ba59064c18d439c9fd2185e8"><td class="mdescLeft"> </td><td class="mdescRight">fast NFFT-based summation <a href="#gaab2cc691ba59064c18d439c9fd2185e8"></a><br/></td></tr>
+<tr class="memitem:ga81bf029788afe857325a760743f9fdd3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga81bf029788afe857325a760743f9fdd3"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>gaussian</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga44a58143a1f5c79b45c538134117e091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga44a58143a1f5c79b45c538134117e091"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>multiquadric</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga889c2a1791e42bb8fa5a594588d68a5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga889c2a1791e42bb8fa5a594588d68a5c"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>inverse_multiquadric</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga91be4b7bcc7d3a415e6b9b6ccaec39a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga91be4b7bcc7d3a415e6b9b6ccaec39a7"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>logarithm</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga7723414bb26fd9b1cc76686aeca57425"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7723414bb26fd9b1cc76686aeca57425"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>thinplate_spline</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gaed5f8559b7b7a24674318cb58856602b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaed5f8559b7b7a24674318cb58856602b"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_square</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga635ef40090e33b4917a20ab62913ef05"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga635ef40090e33b4917a20ab62913ef05"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_modulus</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga6a6096569616d5cf9604c514f925581b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6a6096569616d5cf9604c514f925581b"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_x</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga221604ef3a42dc2de4f1ce68831e7524"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga221604ef3a42dc2de4f1ce68831e7524"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>inverse_multiquadric3</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga8946fd3f992262c24477b56cba844873"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8946fd3f992262c24477b56cba844873"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>sinc_kernel</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gab7b7015bc5f2946583e7adbecb2cf630"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab7b7015bc5f2946583e7adbecb2cf630"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>cosc</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gac693b76a84e9435efc06c1ef26fc7435"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac693b76a84e9435efc06c1ef26fc7435"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>kcot</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga1deb0e10a0d6cf7f11d8b90ee008eb53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1deb0e10a0d6cf7f11d8b90ee008eb53"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_cube</b> (double x, int der, const double *param)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<p>Required for test if (ths->k == one_over_x) </p>
+<hr/><h2>Macro Definition Documentation</h2>
+<a class="anchor" id="gafa2dd15778c93b2eaa42de608fb4d1a8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NF_KUB</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Include header for C99 complex datatype. </p>
+<p>Include header for utils from NFFT3 library. Include header for NFFT3 library. </p>
+
+<p>Definition at line <a class="el" href="fastsum_8h_source.html#l00053">53</a> of file <a class="el" href="fastsum_8h_source.html">fastsum.h</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga9a053d513b2eb19c5f1c70f16e0ae149"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void fastsum_init_guru </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>d</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>N_total</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>M_total</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">kernel </td>
+ <td class="paramname"><em>k</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>param</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned </td>
+ <td class="paramname"><em>flags</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>nn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double </td>
+ <td class="paramname"><em>eps_I</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double </td>
+ <td class="paramname"><em>eps_B</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>initialization of fastsum plan </p>
+<p>initialize fast summation plan</p>
+<dl class="params"><dt>Parameters:</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ths</td><td>The pointer to a fastsum plan. </td></tr>
+ <tr><td class="paramname">d</td><td>The dimension of the problem. </td></tr>
+ <tr><td class="paramname">N_total</td><td>The number of source knots x. </td></tr>
+ <tr><td class="paramname">M_total</td><td>The number of target knots y. </td></tr>
+ <tr><td class="paramname">kernel</td><td>The kernel function. </td></tr>
+ <tr><td class="paramname">param</td><td>The parameters for the kernel function. </td></tr>
+ <tr><td class="paramname">flags</td><td>Fastsum flags. </td></tr>
+ <tr><td class="paramname">nn</td><td>The expansion degree. </td></tr>
+ <tr><td class="paramname">m</td><td>The cut-off parameter for the NFFT. </td></tr>
+ <tr><td class="paramname">p</td><td>The degree of smoothness. </td></tr>
+ <tr><td class="paramname">eps_I</td><td>The inner boundary. </td></tr>
+ <tr><td class="paramname">eps_B</td><td>the outer boundary. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="fastsum_8c_source.html#l00600">600</a> of file <a class="el" href="fastsum_8c_source.html">fastsum.c</a>.</p>
+
+<p>References <a class="el" href="fastsum_8h_source.html#l00108">fastsum_plan_::Ad</a>, <a class="el" href="fastsum_8h_source.html#l00109">fastsum_plan_::Add</a>, <a class="el" href="fastsum_8h_source.html#l00080">fastsum_plan_::alpha</a>, <a class="el" href="fastsum_8h_source.html#l00098">fastsum_plan_::b</a>, <a class="el" href="fastsum_8h_source.html#l00075">fastsum_plan_::d</a>, <a class="el" href="fastsum_8h_source.html#l00102">fastsum_plan_::eps_B</a>, <a class="el" href="fastsum_8 [...]
+
+</div>
+</div>
+<a class="anchor" id="gab989ea4659fe681bd4c025e82756f769"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void fastsum_finalize </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>finalization of fastsum plan </p>
+<p>finalize plan</p>
+<dl class="params"><dt>Parameters:</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ths</td><td>The pointer to a fastsum plan. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="fastsum_8c_source.html#l00742">742</a> of file <a class="el" href="fastsum_8c_source.html">fastsum.c</a>.</p>
+
+<p>References <a class="el" href="fastsum_8h_source.html#l00109">fastsum_plan_::Add</a>, <a class="el" href="fastsum_8h_source.html#l00080">fastsum_plan_::alpha</a>, <a class="el" href="fastsum_8h_source.html#l00098">fastsum_plan_::b</a>, <a class="el" href="fastsum_8h_source.html#l00066">EXACT_NEARFIELD</a>, <a class="el" href="fastsum_8h_source.html#l00081">fastsum_plan_::f</a>, <a class="el" href="fastsum_8h_source.html#l00089">fastsum_plan_::flags</a>, <a class="el" href="fastsum_8h_ [...]
+
+</div>
+</div>
+<a class="anchor" id="gaaee3dd954ffc99e4330fabe16ccad0fd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void fastsum_exact </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>direct computation of sums </p>
+<p>direct summation</p>
+<dl class="params"><dt>Parameters:</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ths</td><td>The pointer to a fastsum plan. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="fastsum_8c_source.html#l00775">775</a> of file <a class="el" href="fastsum_8c_source.html">fastsum.c</a>.</p>
+
+<p>References <a class="el" href="fastsum_8h_source.html#l00080">fastsum_plan_::alpha</a>, <a class="el" href="fastsum_8h_source.html#l00075">fastsum_plan_::d</a>, <a class="el" href="fastsum_8h_source.html#l00081">fastsum_plan_::f</a>, <a class="el" href="fastsum_8h_source.html#l00086">fastsum_plan_::k</a>, <a class="el" href="fastsum_8h_source.html#l00087">fastsum_plan_::kernel_param</a>, <a class="el" href="fastsum_8h_source.html#l00078">fastsum_plan_::M_total</a>, <a class="el" href= [...]
+
+</div>
+</div>
+<a class="anchor" id="ga197c16fcec7935886fc97d140f2b20ff"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void fastsum_precompute </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>precomputation for fastsum </p>
+<p>sort source nodes, precompute Fourier coefficients, etc.</p>
+<dl class="params"><dt>Parameters:</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ths</td><td>The pointer to a fastsum plan. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="fastsum_8c_source.html#l00802">802</a> of file <a class="el" href="fastsum_8c_source.html">fastsum.c</a>.</p>
+
+<p>References <a class="el" href="fastsum_8h_source.html#l00108">fastsum_plan_::Ad</a>, <a class="el" href="fastsum_8h_source.html#l00109">fastsum_plan_::Add</a>, <a class="el" href="fastsum_8h_source.html#l00080">fastsum_plan_::alpha</a>, <a class="el" href="fastsum_8h_source.html#l00098">fastsum_plan_::b</a>, <a class="el" href="fastsum_8c_source.html#l00363">BuildBox()</a>, <a class="el" href="fastsum_8c_source.html#l00510">BuildTree()</a>, <a class="el" href="fastsum_8h_source.html#l [...]
+
+</div>
+</div>
+<a class="anchor" id="gaab2cc691ba59064c18d439c9fd2185e8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void fastsum_trafo </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group__applications__fastsum.html#gad953252f6b309404991c4afc7b98b34b">fastsum_plan</a> * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>fast NFFT-based summation </p>
+<p>fast NFFT-based summation algorithm</p>
+<dl class="params"><dt>Parameters:</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ths</td><td>The pointer to a fastsum plan. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="fastsum_8c_source.html#l00940">940</a> of file <a class="el" href="fastsum_8c_source.html">fastsum.c</a>.</p>
+
+<p>References <a class="el" href="fastsum_8h_source.html#l00108">fastsum_plan_::Ad</a>, <a class="el" href="fastsum_8h_source.html#l00109">fastsum_plan_::Add</a>, <a class="el" href="fastsum_8h_source.html#l00080">fastsum_plan_::alpha</a>, <a class="el" href="fastsum_8h_source.html#l00098">fastsum_plan_::b</a>, <a class="el" href="fastsum_8h_source.html#l00075">fastsum_plan_::d</a>, <a class="el" href="fastsum_8h_source.html#l00101">fastsum_plan_::eps_I</a>, <a class="el" href="fastsum_8 [...]
+
+</div>
+</div>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__fastsumS2.html b/doc/api/html/group__applications__fastsumS2.html
new file mode 100644
index 0000000..1c8f80e
--- /dev/null
+++ b/doc/api/html/group__applications__fastsumS2.html
@@ -0,0 +1,48 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Fast summation of radial functions on the sphere
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#groups">Modules</a> </div>
+ <div class="headertitle">
+<div class="title">Fast summation of radial functions on the sphere</div> </div>
+<div class="ingroups"><a class="el" href="group__applications.html">Applications</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__fastsumS2__test"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html">fastsumS2_matlab</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__fastsumS2__test.html b/doc/api/html/group__applications__fastsumS2__test.html
new file mode 100644
index 0000000..273191c
--- /dev/null
+++ b/doc/api/html/group__applications__fastsumS2__test.html
@@ -0,0 +1,381 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastsumS2_matlab
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">fastsumS2_matlab</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__fastsumS2.html">Fast summation of radial functions on the sphere</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga0512f12a35b9bcac68ac0d36cd9b50d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0512f12a35b9bcac68ac0d36cd9b50d5"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>SYMBOL_ABEL_POISSON</b>(k, h) (pow(h,k))</td></tr>
+<tr class="memitem:ga580e1a9e3fba99e0750908b58010dc00"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga580e1a9e3fba99e0750908b58010dc00"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>SYMBOL_SINGULARITY</b>(k, h) ((2.0/(2*k+1))*pow(h,k))</td></tr>
+<tr class="memitem:ga0452118afd292fc346ed8116915d001e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0452118afd292fc346ed8116915d001e"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga0452118afd292fc346ed8116915d001e">KT_ABEL_POISSON</a> (0)</td></tr>
+<tr class="memdesc:ga0452118afd292fc346ed8116915d001e"><td class="mdescLeft"> </td><td class="mdescRight">Abel-Poisson kernel. <br/></td></tr>
+<tr class="memitem:ga814ba1b58f017f7a67a85f68d4719814"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga814ba1b58f017f7a67a85f68d4719814"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga814ba1b58f017f7a67a85f68d4719814">KT_SINGULARITY</a> (1)</td></tr>
+<tr class="memdesc:ga814ba1b58f017f7a67a85f68d4719814"><td class="mdescLeft"> </td><td class="mdescRight">Singularity kernel. <br/></td></tr>
+<tr class="memitem:gae2a54d1d59448d9f02697f89a6ec7306"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae2a54d1d59448d9f02697f89a6ec7306"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#gae2a54d1d59448d9f02697f89a6ec7306">KT_LOC_SUPP</a> (2)</td></tr>
+<tr class="memdesc:gae2a54d1d59448d9f02697f89a6ec7306"><td class="mdescLeft"> </td><td class="mdescRight">Locally supported kernel. <br/></td></tr>
+<tr class="memitem:ga3a03d7fde39f1ba22a4549e72c8cbf39"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3a03d7fde39f1ba22a4549e72c8cbf39"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga3a03d7fde39f1ba22a4549e72c8cbf39">KT_GAUSSIAN</a> (3)</td></tr>
+<tr class="memdesc:ga3a03d7fde39f1ba22a4549e72c8cbf39"><td class="mdescLeft"> </td><td class="mdescRight">Gaussian kernel. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:gad09943f93b91eb526d8081a4963eead8"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#gad09943f93b91eb526d8081a4963eead8">pvalue</a> { <b>NO</b> = 0,
+<b>YES</b> = 1,
+<b>BOTH</b> = 2
+ }</td></tr>
+<tr class="memdesc:gad09943f93b91eb526d8081a4963eead8"><td class="mdescLeft"> </td><td class="mdescRight">Enumeration type for yes/no/both-type parameters. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga764f956ac40df99e776155bfa8da2e93"><td class="memItemLeft" align="right" valign="top">static double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga764f956ac40df99e776155bfa8da2e93">innerProduct</a> (const double phi1, const double theta1, const double phi2, const double theta2)</td></tr>
+<tr class="memdesc:ga764f956ac40df99e776155bfa8da2e93"><td class="mdescLeft"> </td><td class="mdescRight">Computes the <img class="formulaInl" alt="$\mathbb{R}^3$" src="form_96.png"/> standard inner product between two vectors on the unit sphere <img class="formulaInl" alt="$\mathbb{S}^2$" src="form_97.png"/> given in spherical coordinates. <a href="#ga764f956ac40df99e776155bfa8da2e93"></a><br/></td></tr>
+<tr class="memitem:ga6db9bf5c4ee6ca573d6d08a8202a5314"><td class="memItemLeft" align="right" valign="top">static double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga6db9bf5c4ee6ca573d6d08a8202a5314">poissonKernel</a> (const double x, const double h)</td></tr>
+<tr class="memdesc:ga6db9bf5c4ee6ca573d6d08a8202a5314"><td class="mdescLeft"> </td><td class="mdescRight">Evaluates the Poisson kernel <img class="formulaInl" alt="$Q_h: [-1,1] \rightarrow \mathbb{R}$" src="form_103.png"/> at a node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/>. <a href="#ga6db9bf5c4ee6ca573d6d08a8202a5314"></a><br/></td></tr>
+<tr class="memitem:ga3f82140c739f6fcf9bc17a03a09f580d"><td class="memItemLeft" align="right" valign="top">static double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga3f82140c739f6fcf9bc17a03a09f580d">singularityKernel</a> (const double x, const double h)</td></tr>
+<tr class="memdesc:ga3f82140c739f6fcf9bc17a03a09f580d"><td class="mdescLeft"> </td><td class="mdescRight">Evaluates the singularity kernel <img class="formulaInl" alt="$S_h: [-1,1] \rightarrow \mathbb{R}$" src="form_107.png"/> at a node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/>. <a href="#ga3f82140c739f6fcf9bc17a03a09f580d"></a><br/></td></tr>
+<tr class="memitem:ga226aec741614e0a2d2a9305bc2c28063"><td class="memItemLeft" align="right" valign="top">static double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga226aec741614e0a2d2a9305bc2c28063">locallySupportedKernel</a> (const double x, const double h, const double lambda)</td></tr>
+<tr class="memdesc:ga226aec741614e0a2d2a9305bc2c28063"><td class="mdescLeft"> </td><td class="mdescRight">Evaluates the locally supported kernel <img class="formulaInl" alt="$L_{h,\lambda}: [-1,1] \rightarrow \mathbb{R}$" src="form_109.png"/> at a node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/>. <a href="#ga226aec741614e0a2d2a9305bc2c28063"></a><br/></td></tr>
+<tr class="memitem:ga22bfa09881115e4c4f8fef59538d1ce7"><td class="memItemLeft" align="right" valign="top">static double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga22bfa09881115e4c4f8fef59538d1ce7">gaussianKernel</a> (const double x, const double sigma)</td></tr>
+<tr class="memdesc:ga22bfa09881115e4c4f8fef59538d1ce7"><td class="mdescLeft"> </td><td class="mdescRight">Evaluates the spherical Gaussian kernel <img class="formulaInl" alt="$G_\sigma: [-1,1] \rightarrow \mathbb{R}$" src="form_112.png"/> at a node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/>. <a href="#ga22bfa09881115e4c4f8fef59538d1ce7"></a><br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__fastsumS2__test.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">The main program. <a href="#ga3c04138a5bfe5d72780bb7e82a18e627"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga764f956ac40df99e776155bfa8da2e93"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static double innerProduct </td>
+ <td>(</td>
+ <td class="paramtype">const double </td>
+ <td class="paramname"><em>phi1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const double </td>
+ <td class="paramname"><em>theta1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const double </td>
+ <td class="paramname"><em>phi2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const double </td>
+ <td class="paramname"><em>theta2</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Computes the <img class="formulaInl" alt="$\mathbb{R}^3$" src="form_96.png"/> standard inner product between two vectors on the unit sphere <img class="formulaInl" alt="$\mathbb{S}^2$" src="form_97.png"/> given in spherical coordinates. </p>
+<ul>
+<li>phi1 The angle <img class="formulaInl" alt="$\varphi_1 \in [-\pi,\pi)$" src="form_98.png"/> of the first vector </li>
+<li>theta1 The angle <img class="formulaInl" alt="$\vartheta_1 \in [0,\pi]$" src="form_99.png"/> of the first vector </li>
+<li>phi2 The angle <img class="formulaInl" alt="$\varphi_2 \in [-\pi,\pi)$" src="form_100.png"/> of the second vector </li>
+<li>theta2 The angle <img class="formulaInl" alt="$\vartheta_2 \in [0,\pi]$" src="form_101.png"/> of the second vector</li>
+</ul>
+<dl class="section return"><dt>Returns:</dt><dd>The inner product <img class="formulaInl" alt="$\cos \vartheta_1 \cos \vartheta_2 + \sin \vartheta_1 \sin(\vartheta_2 \cos(\varphi_1 - \varphi_2)$" src="form_102.png"/></dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="fastsumS2_8c_source.html#l00078">78</a> of file <a class="el" href="fastsumS2_8c_source.html">fastsumS2.c</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsumS2_8c_source.html#l00164">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6db9bf5c4ee6ca573d6d08a8202a5314"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static double poissonKernel </td>
+ <td>(</td>
+ <td class="paramtype">const double </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const double </td>
+ <td class="paramname"><em>h</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Evaluates the Poisson kernel <img class="formulaInl" alt="$Q_h: [-1,1] \rightarrow \mathbb{R}$" src="form_103.png"/> at a node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/>. </p>
+<ul>
+<li>x The node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/> </li>
+<li>h The parameter <img class="formulaInl" alt="$h \in (0,1)$" src="form_105.png"/></li>
+</ul>
+<dl class="section return"><dt>Returns:</dt><dd>The value of the Poisson kernel <img class="formulaInl" alt="$Q_h(x)$" src="form_106.png"/> at the node <img class="formulaInl" alt="$x$" src="form_92.png"/></dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="fastsumS2_8c_source.html#l00097">97</a> of file <a class="el" href="fastsumS2_8c_source.html">fastsumS2.c</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsumS2_8c_source.html#l00164">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3f82140c739f6fcf9bc17a03a09f580d"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static double singularityKernel </td>
+ <td>(</td>
+ <td class="paramtype">const double </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const double </td>
+ <td class="paramname"><em>h</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Evaluates the singularity kernel <img class="formulaInl" alt="$S_h: [-1,1] \rightarrow \mathbb{R}$" src="form_107.png"/> at a node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/>. </p>
+<ul>
+<li>x The node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/> </li>
+<li>h The parameter <img class="formulaInl" alt="$h \in (0,1)$" src="form_105.png"/></li>
+</ul>
+<dl class="section return"><dt>Returns:</dt><dd>The value of the Poisson kernel <img class="formulaInl" alt="$S_h(x)$" src="form_108.png"/> at the node <img class="formulaInl" alt="$x$" src="form_92.png"/></dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="fastsumS2_8c_source.html#l00113">113</a> of file <a class="el" href="fastsumS2_8c_source.html">fastsumS2.c</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsumS2_8c_source.html#l00164">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga226aec741614e0a2d2a9305bc2c28063"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static double locallySupportedKernel </td>
+ <td>(</td>
+ <td class="paramtype">const double </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const double </td>
+ <td class="paramname"><em>h</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const double </td>
+ <td class="paramname"><em>lambda</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Evaluates the locally supported kernel <img class="formulaInl" alt="$L_{h,\lambda}: [-1,1] \rightarrow \mathbb{R}$" src="form_109.png"/> at a node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/>. </p>
+<ul>
+<li>x The node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/> </li>
+<li>h The parameter <img class="formulaInl" alt="$h \in (0,1)$" src="form_105.png"/> </li>
+<li>lambda The parameter <img class="formulaInl" alt="$\lambda \in \mathbb{N}_0$" src="form_110.png"/></li>
+</ul>
+<dl class="section return"><dt>Returns:</dt><dd>The value of the locally supported kernel <img class="formulaInl" alt="$L_{h,\lambda}(x)$" src="form_111.png"/> at the node <img class="formulaInl" alt="$x$" src="form_92.png"/></dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="fastsumS2_8c_source.html#l00131">131</a> of file <a class="el" href="fastsumS2_8c_source.html">fastsumS2.c</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsumS2_8c_source.html#l00164">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga22bfa09881115e4c4f8fef59538d1ce7"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static double gaussianKernel </td>
+ <td>(</td>
+ <td class="paramtype">const double </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const double </td>
+ <td class="paramname"><em>sigma</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Evaluates the spherical Gaussian kernel <img class="formulaInl" alt="$G_\sigma: [-1,1] \rightarrow \mathbb{R}$" src="form_112.png"/> at a node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/>. </p>
+<ul>
+<li>x The node <img class="formulaInl" alt="$x \in [-1,1]$" src="form_104.png"/> </li>
+<li>sigma The parameter <img class="formulaInl" alt="$\sigma \in \mathbb{R}_+$" src="form_113.png"/></li>
+</ul>
+<dl class="section return"><dt>Returns:</dt><dd>The value of the pherical Gaussian kernel <img class="formulaInl" alt="$G_\sigma(x)$" src="form_114.png"/> at the node <img class="formulaInl" alt="$x$" src="form_92.png"/></dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="fastsumS2_8c_source.html#l00149">149</a> of file <a class="el" href="fastsumS2_8c_source.html">fastsumS2.c</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsumS2_8c_source.html#l00164">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char ** </td>
+ <td class="paramname"><em>argv</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>The main program. </p>
+<dl class="params"><dt>Parameters:</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">argc</td><td>The number of arguments </td></tr>
+ <tr><td class="paramname">argv</td><td>An array containing the arguments as C-strings</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>Exit code</dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="fastsumS2_8c_source.html#l00164">164</a> of file <a class="el" href="fastsumS2_8c_source.html">fastsumS2.c</a>.</p>
+
+<p>References <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::f</a>, <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::f_hat</a>, <a class="el" href="fastsumS2_8c_source.html#l00149">gaussianKernel()</a>, <a class="el" href="fastsumS2_8c_source.html#l00078">innerProduct()</a>, <a class="el" href="fastsumS2_8c_source.html#l00053">KT_ABEL_POISSON</a>, <a class="el" href="fastsumS2_8c_source.html#l00059">KT_GAUSSIAN</a>, <a class="el" href="fastsumS2_8c_source.html#l [...]
+
+</div>
+</div>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__fastsum__matlab.html b/doc/api/html/group__applications__fastsum__matlab.html
new file mode 100644
index 0000000..eaa3be2
--- /dev/null
+++ b/doc/api/html/group__applications__fastsum__matlab.html
@@ -0,0 +1,49 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastsum_matlab
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">fastsum_matlab</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__fastsum.html">Fast summation</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__fastsum__test.html b/doc/api/html/group__applications__fastsum__test.html
new file mode 100644
index 0000000..e5bf0f7
--- /dev/null
+++ b/doc/api/html/group__applications__fastsum__test.html
@@ -0,0 +1,49 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastsum_test
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">fastsum_test</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__fastsum.html">Fast summation</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__iterS2.html b/doc/api/html/group__applications__iterS2.html
new file mode 100644
index 0000000..dc3cec0
--- /dev/null
+++ b/doc/api/html/group__applications__iterS2.html
@@ -0,0 +1,48 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Iterative reconstruction on the sphere S2
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#groups">Modules</a> </div>
+ <div class="headertitle">
+<div class="title">Iterative reconstruction on the sphere S2</div> </div>
+<div class="ingroups"><a class="el" href="group__applications.html">Applications</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__iterS2__matlab"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__iterS2__matlab.html">iterS2_matlab</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__iterS2__matlab.html b/doc/api/html/group__applications__iterS2__matlab.html
new file mode 100644
index 0000000..64b8664
--- /dev/null
+++ b/doc/api/html/group__applications__iterS2__matlab.html
@@ -0,0 +1,101 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - iterS2_matlab
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">iterS2_matlab</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__iterS2.html">Iterative reconstruction on the sphere S2</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga7c6368b321bd9acd0149b030bb8275ed"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__iterS2__matlab.html#ga7c6368b321bd9acd0149b030bb8275ed">boolean</a> { <b>NO</b> = 0,
+<b>YES</b> = 1,
+<b>NO</b> = 0,
+<b>YES</b> = 1
+ }</td></tr>
+<tr class="memdesc:ga7c6368b321bd9acd0149b030bb8275ed"><td class="mdescLeft"> </td><td class="mdescRight">Enumeration for parameter values. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__iterS2__matlab.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">The main program. <a href="#ga3c04138a5bfe5d72780bb7e82a18e627"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char ** </td>
+ <td class="paramname"><em>argv</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>The main program. </p>
+<dl class="params"><dt>Parameters:</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">argc</td><td>The number of arguments </td></tr>
+ <tr><td class="paramname">argv</td><td>An array containing the arguments as C-strings</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>Exit code</dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="iterS2_8c_source.html#l00058">58</a> of file <a class="el" href="iterS2_8c_source.html">iterS2.c</a>.</p>
+
+<p>References <a class="el" href="nfft3_8h_source.html#l00763">solver_plan_complex::dot_r_iter</a>, <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::f</a>, <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::f_hat</a>, <a class="el" href="nfft3_8h_source.html#l00763">solver_plan_complex::f_hat_iter</a>, <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::M_total</a>, <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::N_total</a>, <a class="el" href [...]
+
+</div>
+</div>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__mri.html b/doc/api/html/group__applications__mri.html
new file mode 100644
index 0000000..699a940
--- /dev/null
+++ b/doc/api/html/group__applications__mri.html
@@ -0,0 +1,49 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Transforms in magnetic resonance imaging
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#groups">Modules</a> </div>
+ <div class="headertitle">
+<div class="title">Transforms in magnetic resonance imaging</div> </div>
+<div class="ingroups"><a class="el" href="group__applications.html">Applications</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__mri2d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d.html">2D transforms</a></td></tr>
+<tr class="memitem:group__applications__mri3d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d.html">3D transforms</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d.html b/doc/api/html/group__applications__mri2d.html
new file mode 100644
index 0000000..f55cc89
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d.html
@@ -0,0 +1,55 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - 2D transforms
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#groups">Modules</a> </div>
+ <div class="headertitle">
+<div class="title">2D transforms</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__mri.html">Transforms in magnetic resonance imaging</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__mri2d__construct__data__2d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__2d.html">construct_data_2d</a></td></tr>
+<tr class="memitem:group__applications__mri2d__construct__data__inh__2d1d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__inh__2d1d.html">construct_data__inh_2d1d</a></td></tr>
+<tr class="memitem:group__applications__mri2d__construct__data__inh__3d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__inh__3d.html">construct_data_inh_3d</a></td></tr>
+<tr class="memitem:group__applications__mri2d__reconstruct__data__2d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__reconstruct__data__2d.html">reconstruct_data_2d</a></td></tr>
+<tr class="memitem:group__applications__mri2d__construct__data__gridding"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__gridding.html">construct_data_gridding</a></td></tr>
+<tr class="memitem:group__applications__mri2d__reconstruct__data__inh__2d1d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__reconstruct__data__inh__2d1d.html">reconstruct_data__inh_2d1d</a></td></tr>
+<tr class="memitem:group__applications__mri2d__reconstruct__data__inh__3d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__reconstruct__data__inh__3d.html">reconstruct_data_inh_3d</a></td></tr>
+<tr class="memitem:group__applications__mri2d__construct__data__inh__nnfft"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__inh__nnfft.html">construct_data_inh_nnfft</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d__construct__data__2d.html b/doc/api/html/group__applications__mri2d__construct__data__2d.html
new file mode 100644
index 0000000..41901ef
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d__construct__data__2d.html
@@ -0,0 +1,52 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - construct_data_2d
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">construct_data_2d</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__mri2d.html">2D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7cad9b408cf07cdd4fa31da9c325dac5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7cad9b408cf07cdd4fa31da9c325dac5"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__2d.html#ga7cad9b408cf07cdd4fa31da9c325dac5">construct</a> (char *file, int N, int M)</td></tr>
+<tr class="memdesc:ga7cad9b408cf07cdd4fa31da9c325dac5"><td class="mdescLeft"> </td><td class="mdescRight">construct makes an 2d-nfft <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d__construct__data__gridding.html b/doc/api/html/group__applications__mri2d__construct__data__gridding.html
new file mode 100644
index 0000000..585e622
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d__construct__data__gridding.html
@@ -0,0 +1,52 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - construct_data_gridding
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">construct_data_gridding</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__mri2d.html">2D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaafaf486ca8f1725dce039d2e2d150340"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaafaf486ca8f1725dce039d2e2d150340"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__gridding.html#gaafaf486ca8f1725dce039d2e2d150340">reconstruct</a> (char *filename, int N, int M, int weight)</td></tr>
+<tr class="memdesc:gaafaf486ca8f1725dce039d2e2d150340"><td class="mdescLeft"> </td><td class="mdescRight">reconstruct makes a 2d-adjoint-nfft <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d__construct__data__inh__2d1d.html b/doc/api/html/group__applications__mri2d__construct__data__inh__2d1d.html
new file mode 100644
index 0000000..772ce26
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d__construct__data__inh__2d1d.html
@@ -0,0 +1,52 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - construct_data__inh_2d1d
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">construct_data__inh_2d1d</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__mri2d.html">2D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7cad9b408cf07cdd4fa31da9c325dac5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7cad9b408cf07cdd4fa31da9c325dac5"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__inh__2d1d.html#ga7cad9b408cf07cdd4fa31da9c325dac5">construct</a> (char *file, int N, int M)</td></tr>
+<tr class="memdesc:ga7cad9b408cf07cdd4fa31da9c325dac5"><td class="mdescLeft"> </td><td class="mdescRight">construct <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d__construct__data__inh__3d.html b/doc/api/html/group__applications__mri2d__construct__data__inh__3d.html
new file mode 100644
index 0000000..6cf315b
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d__construct__data__inh__3d.html
@@ -0,0 +1,52 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - construct_data_inh_3d
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">construct_data_inh_3d</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__mri2d.html">2D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7cad9b408cf07cdd4fa31da9c325dac5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7cad9b408cf07cdd4fa31da9c325dac5"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__inh__3d.html#ga7cad9b408cf07cdd4fa31da9c325dac5">construct</a> (char *file, int N, int M)</td></tr>
+<tr class="memdesc:ga7cad9b408cf07cdd4fa31da9c325dac5"><td class="mdescLeft"> </td><td class="mdescRight">construct <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d__construct__data__inh__nnfft.html b/doc/api/html/group__applications__mri2d__construct__data__inh__nnfft.html
new file mode 100644
index 0000000..103c6ae
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d__construct__data__inh__nnfft.html
@@ -0,0 +1,52 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - construct_data_inh_nnfft
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">construct_data_inh_nnfft</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__mri2d.html">2D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga75582a0ebe96f1391e90db0053ee981c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga75582a0ebe96f1391e90db0053ee981c"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__construct__data__inh__nnfft.html#ga75582a0ebe96f1391e90db0053ee981c">reconstruct</a> (char *filename, int N, int M, int iteration, int weight)</td></tr>
+<tr class="memdesc:ga75582a0ebe96f1391e90db0053ee981c"><td class="mdescLeft"> </td><td class="mdescRight">reconstruct <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d__reconstruct__data__2d.html b/doc/api/html/group__applications__mri2d__reconstruct__data__2d.html
new file mode 100644
index 0000000..bd6081e
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d__reconstruct__data__2d.html
@@ -0,0 +1,52 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - reconstruct_data_2d
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">reconstruct_data_2d</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__mri2d.html">2D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga75582a0ebe96f1391e90db0053ee981c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga75582a0ebe96f1391e90db0053ee981c"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri2d__reconstruct__data__2d.html#ga75582a0ebe96f1391e90db0053ee981c">reconstruct</a> (char *filename, int N, int M, int iteration, int weight)</td></tr>
+<tr class="memdesc:ga75582a0ebe96f1391e90db0053ee981c"><td class="mdescLeft"> </td><td class="mdescRight">reconstruct makes an inverse 2d nfft <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d__reconstruct__data__inh__2d1d.html b/doc/api/html/group__applications__mri2d__reconstruct__data__inh__2d1d.html
new file mode 100644
index 0000000..517f6ee
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d__reconstruct__data__inh__2d1d.html
@@ -0,0 +1,51 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - reconstruct_data__inh_2d1d
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">reconstruct_data__inh_2d1d</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__mri2d.html">2D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga75582a0ebe96f1391e90db0053ee981c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga75582a0ebe96f1391e90db0053ee981c"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>reconstruct</b> (char *filename, int N, int M, int iteration, int weight)</td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__mri2d__reconstruct__data__inh__3d.html b/doc/api/html/group__applications__mri2d__reconstruct__data__inh__3d.html
new file mode 100644
index 0000000..903f911
--- /dev/null
+++ b/doc/api/html/group__applications__mri2d__reconstruct__data__inh__3d.html
@@ -0,0 +1,51 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - reconstruct_data_inh_3d
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">reconstruct_data_inh_3d</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__mri2d.html">2D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga75582a0ebe96f1391e90db0053ee981c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga75582a0ebe96f1391e90db0053ee981c"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>reconstruct</b> (char *filename, int N, int M, int iteration, int weight)</td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__mri3d.html b/doc/api/html/group__applications__mri3d.html
new file mode 100644
index 0000000..6e21c3f
--- /dev/null
+++ b/doc/api/html/group__applications__mri3d.html
@@ -0,0 +1,52 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - 3D transforms
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#groups">Modules</a> </div>
+ <div class="headertitle">
+<div class="title">3D transforms</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__mri.html">Transforms in magnetic resonance imaging</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__mri3d__construct__data__1d2d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__construct__data__1d2d.html">construct_data_1d2d</a></td></tr>
+<tr class="memitem:group__applications__mri3d__construct__data__3d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__construct__data__3d.html">construct_data_3d</a></td></tr>
+<tr class="memitem:group__applications__mri3d__reconstruct__data__1d2d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__reconstruct__data__1d2d.html">reconstruct_data_1d2d</a></td></tr>
+<tr class="memitem:group__applications__mri3d__reconstruct__data__3d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__reconstruct__data__3d.html">reconstruct_data_3d</a></td></tr>
+<tr class="memitem:group__applications__mri3d__reconstruct__data__gridding"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__reconstruct__data__gridding.html">reconstruct_data_gridding</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__mri3d__construct__data__1d2d.html b/doc/api/html/group__applications__mri3d__construct__data__1d2d.html
new file mode 100644
index 0000000..1b75b5f
--- /dev/null
+++ b/doc/api/html/group__applications__mri3d__construct__data__1d2d.html
@@ -0,0 +1,58 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - construct_data_1d2d
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">construct_data_1d2d</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__mri3d.html">3D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga3b7e53294d00c663429518cb2f7c7791"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3b7e53294d00c663429518cb2f7c7791"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__construct__data__1d2d.html#ga3b7e53294d00c663429518cb2f7c7791">construct</a> (char *file, int N, int M, int Z, fftw_complex *mem)</td></tr>
+<tr class="memdesc:ga3b7e53294d00c663429518cb2f7c7791"><td class="mdescLeft"> </td><td class="mdescRight">construct makes an 2d-nfft for every slice <br/></td></tr>
+<tr class="memitem:gafa82bf5df93804a1760082b88492b8d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafa82bf5df93804a1760082b88492b8d5"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__construct__data__1d2d.html#gafa82bf5df93804a1760082b88492b8d5">fft</a> (int N, int M, int Z, fftw_complex *mem)</td></tr>
+<tr class="memdesc:gafa82bf5df93804a1760082b88492b8d5"><td class="mdescLeft"> </td><td class="mdescRight">fft makes an 1D-ftt for every knot through all layers <br/></td></tr>
+<tr class="memitem:ga324751353a7eefbe2ad622201dd52d5f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga324751353a7eefbe2ad622201dd52d5f"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__construct__data__1d2d.html#ga324751353a7eefbe2ad622201dd52d5f">read_data</a> (int N, int M, int Z, fftw_complex *mem)</td></tr>
+<tr class="memdesc:ga324751353a7eefbe2ad622201dd52d5f"><td class="mdescLeft"> </td><td class="mdescRight">read fills the memory with the file input_data_f.dat as the real part of f and with zeros for the imag part of f <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__mri3d__construct__data__3d.html b/doc/api/html/group__applications__mri3d__construct__data__3d.html
new file mode 100644
index 0000000..de2a591
--- /dev/null
+++ b/doc/api/html/group__applications__mri3d__construct__data__3d.html
@@ -0,0 +1,51 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - construct_data_3d
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">construct_data_3d</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__mri3d.html">3D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaf6e5c02bb968f96600d6f91018b38ee1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf6e5c02bb968f96600d6f91018b38ee1"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>construct</b> (char *file, int N, int M, int Z)</td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__mri3d__reconstruct__data__1d2d.html b/doc/api/html/group__applications__mri3d__reconstruct__data__1d2d.html
new file mode 100644
index 0000000..f39a095
--- /dev/null
+++ b/doc/api/html/group__applications__mri3d__reconstruct__data__1d2d.html
@@ -0,0 +1,55 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - reconstruct_data_1d2d
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">reconstruct_data_1d2d</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__mri3d.html">3D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gad67335b03b6fec43e0dff3512c8f6d68"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad67335b03b6fec43e0dff3512c8f6d68"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__reconstruct__data__1d2d.html#gad67335b03b6fec43e0dff3512c8f6d68">reconstruct</a> (char *filename, int N, int M, int Z, int iteration, int weight, fftw_complex *mem)</td></tr>
+<tr class="memdesc:gad67335b03b6fec43e0dff3512c8f6d68"><td class="mdescLeft"> </td><td class="mdescRight">reconstruct makes an inverse 2d-nfft for every slice <br/></td></tr>
+<tr class="memitem:gaa30709aaef018deecdd911083fadb877"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa30709aaef018deecdd911083fadb877"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__reconstruct__data__1d2d.html#gaa30709aaef018deecdd911083fadb877">print</a> (int N, int M, int Z, fftw_complex *mem)</td></tr>
+<tr class="memdesc:gaa30709aaef018deecdd911083fadb877"><td class="mdescLeft"> </td><td class="mdescRight">print writes the memory back in a file output_real.dat for the real part and output_imag.dat for the imaginary part <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__mri3d__reconstruct__data__3d.html b/doc/api/html/group__applications__mri3d__reconstruct__data__3d.html
new file mode 100644
index 0000000..7c7160d
--- /dev/null
+++ b/doc/api/html/group__applications__mri3d__reconstruct__data__3d.html
@@ -0,0 +1,52 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - reconstruct_data_3d
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">reconstruct_data_3d</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__mri3d.html">3D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga6a872b7d27169c9b01e09dcf45b9737d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6a872b7d27169c9b01e09dcf45b9737d"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__reconstruct__data__3d.html#ga6a872b7d27169c9b01e09dcf45b9737d">reconstruct</a> (char *filename, int N, int M, int Z, int iteration, int weight)</td></tr>
+<tr class="memdesc:ga6a872b7d27169c9b01e09dcf45b9737d"><td class="mdescLeft"> </td><td class="mdescRight">reconstruct makes an inverse 3d-nfft <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__mri3d__reconstruct__data__gridding.html b/doc/api/html/group__applications__mri3d__reconstruct__data__gridding.html
new file mode 100644
index 0000000..228dd74
--- /dev/null
+++ b/doc/api/html/group__applications__mri3d__reconstruct__data__gridding.html
@@ -0,0 +1,55 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - reconstruct_data_gridding
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">reconstruct_data_gridding</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__mri3d.html">3D transforms</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga0152e0943d96d847eaaaa8a9f487eb9e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0152e0943d96d847eaaaa8a9f487eb9e"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__reconstruct__data__gridding.html#ga0152e0943d96d847eaaaa8a9f487eb9e">reconstruct</a> (char *filename, int N, int M, int Z, int weight, fftw_complex *mem)</td></tr>
+<tr class="memdesc:ga0152e0943d96d847eaaaa8a9f487eb9e"><td class="mdescLeft"> </td><td class="mdescRight">reconstruct makes an 2d-adjoint-nfft for every slice <br/></td></tr>
+<tr class="memitem:gaa30709aaef018deecdd911083fadb877"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa30709aaef018deecdd911083fadb877"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__mri3d__reconstruct__data__gridding.html#gaa30709aaef018deecdd911083fadb877">print</a> (int N, int M, int Z, fftw_complex *mem)</td></tr>
+<tr class="memdesc:gaa30709aaef018deecdd911083fadb877"><td class="mdescLeft"> </td><td class="mdescRight">print writes the memory back in a file output_real.dat for the real part and output_imag.dat for the imaginary part <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__polarFFT.html b/doc/api/html/group__applications__polarFFT.html
new file mode 100644
index 0000000..781d407
--- /dev/null
+++ b/doc/api/html/group__applications__polarFFT.html
@@ -0,0 +1,50 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Polar FFT
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#groups">Modules</a> </div>
+ <div class="headertitle">
+<div class="title">Polar FFT</div> </div>
+<div class="ingroups"><a class="el" href="group__applications.html">Applications</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__polarFFT__linogramm"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html">linogram_fft_test</a></td></tr>
+<tr class="memitem:group__applications__polarFFT__mpolar"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html">mpolar_fft_test</a></td></tr>
+<tr class="memitem:group__applications__polarFFT__polar"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html">polar_fft_test</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__polarFFT__linogramm.html b/doc/api/html/group__applications__polarFFT__linogramm.html
new file mode 100644
index 0000000..599a0fd
--- /dev/null
+++ b/doc/api/html/group__applications__polarFFT__linogramm.html
@@ -0,0 +1,71 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - linogram_fft_test
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">linogram_fft_test</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__polarFFT.html">Polar FFT</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga9a5ff165ab1e23af77ab6f6108bb6310"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9a5ff165ab1e23af77ab6f6108bb6310"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310">linogram_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:ga9a5ff165ab1e23af77ab6f6108bb6310"><td class="mdescLeft"> </td><td class="mdescRight">Generates the points x with weights w for the linogram grid with T slopes and R offsets. <br/></td></tr>
+<tr class="memitem:ga708f5c41add2af92a97339dee1c068dc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga708f5c41add2af92a97339dee1c068dc"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#ga708f5c41add2af92a97339dee1c068dc">linogram_dft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:ga708f5c41add2af92a97339dee1c068dc"><td class="mdescLeft"> </td><td class="mdescRight">discrete pseudo-polar FFT <br/></td></tr>
+<tr class="memitem:gaea5025fe751ace25f818ecb3cfc16444"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaea5025fe751ace25f818ecb3cfc16444"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#gaea5025fe751ace25f818ecb3cfc16444">linogram_fft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:gaea5025fe751ace25f818ecb3cfc16444"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based pseudo-polar FFT. <br/></td></tr>
+<tr class="memitem:gaf44988058d3000a477c046c172c26265"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf44988058d3000a477c046c172c26265"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#gaf44988058d3000a477c046c172c26265">inverse_linogram_fft</a> (fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a>, int m)</td></tr>
+<tr class="memdesc:gaf44988058d3000a477c046c172c26265"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based inverse pseudo-polar FFT. <br/></td></tr>
+<tr class="memitem:gac2a323224e3346e37714575d49c65432"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac2a323224e3346e37714575d49c65432"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432">comparison_fft</a> (FILE *fp, int N, int T, int R)</td></tr>
+<tr class="memdesc:gac2a323224e3346e37714575d49c65432"><td class="mdescLeft"> </td><td class="mdescRight">Comparison of the FFTW, linogram FFT, and inverse linogram FFT. <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">test program for various parameters <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ga89f1a3516fab4c4d4d274df955af639b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga89f1a3516fab4c4d4d274df955af639b"></a>
+double </td><td class="memItemRight" valign="bottom"><b>GLOBAL_elapsed_time</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__polarFFT__mpolar.html b/doc/api/html/group__applications__polarFFT__mpolar.html
new file mode 100644
index 0000000..27207af
--- /dev/null
+++ b/doc/api/html/group__applications__polarFFT__mpolar.html
@@ -0,0 +1,130 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - mpolar_fft_test
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">mpolar_fft_test</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__polarFFT.html">Polar FFT</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga08d0441aceedbcb98b985ee5aa121952"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952">mpolar_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:ga08d0441aceedbcb98b985ee5aa121952"><td class="mdescLeft"> </td><td class="mdescRight">Generates the points <img class="formulaInl" alt="$x_{t,j}$" src="form_115.png"/> with weights <img class="formulaInl" alt="$w_{t,j}$" src="form_116.png"/> for the modified polar grid with <img class="formulaInl" alt="$T$" src="form_117.png"/> angles and <img class="formulaInl" alt="$R$" src="form_118.png"/> offsets. <a href="#ga08d0441aceedbcb98b985ee5aa121952"></a><br/></td></tr>
+<tr class="memitem:gaee9902054200ea50d90b5d290bff8c71"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaee9902054200ea50d90b5d290bff8c71"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#gaee9902054200ea50d90b5d290bff8c71">mpolar_dft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:gaee9902054200ea50d90b5d290bff8c71"><td class="mdescLeft"> </td><td class="mdescRight">discrete mpolar FFT <br/></td></tr>
+<tr class="memitem:ga55b2f979a5c69176a73f59eb0312b53d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga55b2f979a5c69176a73f59eb0312b53d"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga55b2f979a5c69176a73f59eb0312b53d">mpolar_fft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:ga55b2f979a5c69176a73f59eb0312b53d"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based mpolar FFT. <br/></td></tr>
+<tr class="memitem:ga5d0560e898b722ee5fe09acc485bbec8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5d0560e898b722ee5fe09acc485bbec8"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga5d0560e898b722ee5fe09acc485bbec8">inverse_mpolar_fft</a> (fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a>, int m)</td></tr>
+<tr class="memdesc:ga5d0560e898b722ee5fe09acc485bbec8"><td class="mdescLeft"> </td><td class="mdescRight">inverse NFFT-based mpolar FFT <br/></td></tr>
+<tr class="memitem:ga522ff84df31c08a1f237ad0ec7ce4ac5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga522ff84df31c08a1f237ad0ec7ce4ac5"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga522ff84df31c08a1f237ad0ec7ce4ac5">comparison_fft</a> (FILE *fp, int N, int T, int R)</td></tr>
+<tr class="memdesc:ga522ff84df31c08a1f237ad0ec7ce4ac5"><td class="mdescLeft"> </td><td class="mdescRight">Comparison of the FFTW, mpolar FFT, and inverse mpolar FFT. <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">test program for various parameters <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ga89f1a3516fab4c4d4d274df955af639b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga89f1a3516fab4c4d4d274df955af639b"></a>
+double </td><td class="memItemRight" valign="bottom"><b>GLOBAL_elapsed_time</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga08d0441aceedbcb98b985ee5aa121952"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int mpolar_grid </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>T</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>R</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>w</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Generates the points <img class="formulaInl" alt="$x_{t,j}$" src="form_115.png"/> with weights <img class="formulaInl" alt="$w_{t,j}$" src="form_116.png"/> for the modified polar grid with <img class="formulaInl" alt="$T$" src="form_117.png"/> angles and <img class="formulaInl" alt="$R$" src="form_118.png"/> offsets. </p>
+<p>We add more concentric circles to the polar grid and exclude those nodes not located in the unit square, i.e., </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ x_{t,j} := r_j\left(\cos\theta_t, \sin\theta_t\right)^{\top}\,,\qquad (j,t)^{\top}\in I_{\sqrt{2}R}\times I_T\,. \]" src="form_119.png"/>
+</p>
+<p> with <img class="formulaInl" alt="$r_j$" src="form_120.png"/> and <img class="formulaInl" alt="$\theta_t$" src="form_121.png"/> as for the polar grid. The number of nodes for the modified polar grid can be estimated as <img class="formulaInl" alt="$M \approx \frac{4}{\pi}\log(1+\sqrt{2}) T R$" src="form_122.png"/>. </p>
+
+<p>Definition at line <a class="el" href="mpolar__fft__test_8c_source.html#l00063">63</a> of file <a class="el" href="mpolar__fft__test_8c_source.html">mpolar_fft_test.c</a>.</p>
+
+<p>References <a class="el" href="nfft3util_8h_source.html#l00062">PI</a>.</p>
+
+<p>Referenced by <a class="el" href="mpolar__fft__test_8c_source.html#l00237">inverse_mpolar_fft()</a>, <a class="el" href="mpolar__fft__test_8c_source.html#l00404">main()</a>, <a class="el" href="mpolar__fft__test_8c_source.html#l00106">mpolar_dft()</a>, and <a class="el" href="mpolar__fft__test_8c_source.html#l00166">mpolar_fft()</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__polarFFT__polar.html b/doc/api/html/group__applications__polarFFT__polar.html
new file mode 100644
index 0000000..f74d7ff
--- /dev/null
+++ b/doc/api/html/group__applications__polarFFT__polar.html
@@ -0,0 +1,126 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - polar_fft_test
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">polar_fft_test</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__polarFFT.html">Polar FFT</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga307b67b4c00a1c756f140c7fa831cdae"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae">polar_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:ga307b67b4c00a1c756f140c7fa831cdae"><td class="mdescLeft"> </td><td class="mdescRight">Generates the points <img class="formulaInl" alt="$x_{t,j}$" src="form_115.png"/> with weights <img class="formulaInl" alt="$w_{t,j}$" src="form_116.png"/> for the polar grid with <img class="formulaInl" alt="$T$" src="form_117.png"/> angles and <img class="formulaInl" alt="$R$" src="form_118.png"/> offsets. <a href="#ga307b67b4c00a1c756f140c7fa831cdae"></a><br/></td></tr>
+<tr class="memitem:gaf6ec0d6bb5bfea4829e551c9dc9a656e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf6ec0d6bb5bfea4829e551c9dc9a656e"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#gaf6ec0d6bb5bfea4829e551c9dc9a656e">polar_dft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:gaf6ec0d6bb5bfea4829e551c9dc9a656e"><td class="mdescLeft"> </td><td class="mdescRight">discrete polar FFT <br/></td></tr>
+<tr class="memitem:ga72ebda23ef48b6509833eea9a24fa839"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga72ebda23ef48b6509833eea9a24fa839"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#ga72ebda23ef48b6509833eea9a24fa839">polar_fft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:ga72ebda23ef48b6509833eea9a24fa839"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based polar FFT. <br/></td></tr>
+<tr class="memitem:gad996d429207cf198e9027618e081ada0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad996d429207cf198e9027618e081ada0"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#gad996d429207cf198e9027618e081ada0">inverse_polar_fft</a> (fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a>, int m)</td></tr>
+<tr class="memdesc:gad996d429207cf198e9027618e081ada0"><td class="mdescLeft"> </td><td class="mdescRight">inverse NFFT-based polar FFT <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">test program for various parameters <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga307b67b4c00a1c756f140c7fa831cdae"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int polar_grid </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>T</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>R</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>w</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Generates the points <img class="formulaInl" alt="$x_{t,j}$" src="form_115.png"/> with weights <img class="formulaInl" alt="$w_{t,j}$" src="form_116.png"/> for the polar grid with <img class="formulaInl" alt="$T$" src="form_117.png"/> angles and <img class="formulaInl" alt="$R$" src="form_118.png"/> offsets. </p>
+<p>The nodes of the polar grid lie on concentric circles around the origin. They are given for <img class="formulaInl" alt="$(j,t)^{\top}\in I_R\times I_T$" src="form_123.png"/> by a signed radius <img class="formulaInl" alt="$r_j := \frac{j}{R} \in [-\frac{1}{2},\frac{1}{2})$" src="form_124.png"/> and an angle <img class="formulaInl" alt="$\theta_t := \frac{\pi t}{T} \in [-\frac{\pi}{2},\frac{\pi}{2})$" src="form_125.png"/> as </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ x_{t,j} := r_j\left(\cos\theta_t, \sin\theta_t\right)^{\top}\,. \]" src="form_126.png"/>
+</p>
+<p> The total number of nodes is <img class="formulaInl" alt="$M=TR$" src="form_127.png"/>, whereas the origin is included multiple times.</p>
+<p>Weights are introduced to compensate for local sampling density variations. For every point in the sampling set, we associate a small surrounding area. In case of the polar grid, we choose small ring segments. The area of such a ring segment around <img class="formulaInl" alt="$x_{t,j}$" src="form_115.png"/> ( <img class="formulaInl" alt="$j \ne 0$" src="form_128.png"/>) is </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ w_{t,j} = \frac{\pi}{2TR^2}\left(\left(|j|+\frac{1}{2}\right)^2- \left(|j|-\frac{1}{2}\right)^2\right) = \frac{\pi |j| }{TR^2}\, . \]" src="form_129.png"/>
+</p>
+<p> The area of the small circle of radius <img class="formulaInl" alt="$\frac{1}{2R}$" src="form_130.png"/> around the origin is <img class="formulaInl" alt="$\frac{\pi}{4R^2}$" src="form_131.png"/>. Divided by the multiplicity of the origin in the sampling set, we get <img class="formulaInl" alt="$w_{t,0} := \frac{\pi}{4TR^2}$" src="form_132.png"/>. Thus, the sum of all weights is <img class="formulaInl" alt="$\frac{\pi}{4}(1+\frac{1}{R^2})$" src="form_133.png"/> and we divide by this [...]
+
+<p>Definition at line <a class="el" href="polar__fft__test_8c_source.html#l00078">78</a> of file <a class="el" href="polar__fft__test_8c_source.html">polar_fft_test.c</a>.</p>
+
+<p>References <a class="el" href="nfft3util_8h_source.html#l00062">PI</a>.</p>
+
+<p>Referenced by <a class="el" href="polar__fft__test_8c_source.html#l00218">inverse_polar_fft()</a>, <a class="el" href="polar__fft__test_8c_source.html#l00314">main()</a>, <a class="el" href="polar__fft__test_8c_source.html#l00100">polar_dft()</a>, and <a class="el" href="polar__fft__test_8c_source.html#l00154">polar_fft()</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__quadratureS2.html b/doc/api/html/group__applications__quadratureS2.html
new file mode 100644
index 0000000..8efb4ec
--- /dev/null
+++ b/doc/api/html/group__applications__quadratureS2.html
@@ -0,0 +1,48 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Fast evaluation of quadrature formulae on the sphere
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#groups">Modules</a> </div>
+ <div class="headertitle">
+<div class="title">Fast evaluation of quadrature formulae on the sphere</div> </div>
+<div class="ingroups"><a class="el" href="group__applications.html">Applications</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__applications__quadratureS2__test"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__quadratureS2__test.html">quadratureS2_test</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__applications__quadratureS2__test.html b/doc/api/html/group__applications__quadratureS2__test.html
new file mode 100644
index 0000000..1fbaf10
--- /dev/null
+++ b/doc/api/html/group__applications__quadratureS2__test.html
@@ -0,0 +1,130 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - quadratureS2_test
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">quadratureS2_test</div> </div>
+<div class="ingroups"><a class="el" href="group__applications__quadratureS2.html">Fast evaluation of quadrature formulae on the sphere</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga7c6368b321bd9acd0149b030bb8275ed"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__quadratureS2__test.html#ga7c6368b321bd9acd0149b030bb8275ed">boolean</a> { <b>NO</b> = 0,
+<b>YES</b> = 1,
+<b>NO</b> = 0,
+<b>YES</b> = 1
+ }</td></tr>
+<tr class="memdesc:ga7c6368b321bd9acd0149b030bb8275ed"><td class="mdescLeft"> </td><td class="mdescRight">Enumeration for parameter values. <br/></td></tr>
+<tr class="memitem:ga47f3fd319121e75dc73cd720c536f3c7"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__quadratureS2__test.html#ga47f3fd319121e75dc73cd720c536f3c7">testtype</a> { <b>ERROR</b> = 0,
+<b>TIMING</b> = 1
+ }</td></tr>
+<tr class="memdesc:ga47f3fd319121e75dc73cd720c536f3c7"><td class="mdescLeft"> </td><td class="mdescRight">Enumeration for test modes. <br/></td></tr>
+<tr class="memitem:ga4cf30b0362e85bc0154ca2c52b2bc17e"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__quadratureS2__test.html#ga4cf30b0362e85bc0154ca2c52b2bc17e">gridtype</a> { <br/>
+ <b>GRID_GAUSS_LEGENDRE</b> = 0,
+<b>GRID_CLENSHAW_CURTIS</b> = 1,
+<b>GRID_HEALPIX</b> = 2,
+<b>GRID_EQUIDISTRIBUTION</b> = 3,
+<br/>
+ <b>GRID_EQUIDISTRIBUTION_UNIFORM</b> = 4
+<br/>
+ }</td></tr>
+<tr class="memdesc:ga4cf30b0362e85bc0154ca2c52b2bc17e"><td class="mdescLeft"> </td><td class="mdescRight">Enumeration for quadrature grid types. <br/></td></tr>
+<tr class="memitem:gaa7c9498e1664b6773fd8f9d850921e20"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__quadratureS2__test.html#gaa7c9498e1664b6773fd8f9d850921e20">functiontype</a> { <br/>
+ <b>FUNCTION_RANDOM_BANDLIMITED</b> = 0,
+<b>FUNCTION_F1</b> = 1,
+<b>FUNCTION_F2</b> = 2,
+<b>FUNCTION_F3</b> = 3,
+<br/>
+ <b>FUNCTION_F4</b> = 4,
+<b>FUNCTION_F5</b> = 5,
+<b>FUNCTION_F6</b> = 6
+<br/>
+ }</td></tr>
+<tr class="memdesc:gaa7c9498e1664b6773fd8f9d850921e20"><td class="mdescLeft"> </td><td class="mdescRight">Enumeration for test functions. <br/></td></tr>
+<tr class="memitem:ga811fe196a5d9d37857c2f8adeeaac3c6"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__quadratureS2__test.html#ga811fe196a5d9d37857c2f8adeeaac3c6">modes</a> { <b>USE_GRID</b> = 0,
+<b>RANDOM</b> = 1
+ }</td></tr>
+<tr class="memdesc:ga811fe196a5d9d37857c2f8adeeaac3c6"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__quadratureS2__test.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">The main program. <a href="#ga3c04138a5bfe5d72780bb7e82a18e627"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char ** </td>
+ <td class="paramname"><em>argv</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>The main program. </p>
+<dl class="params"><dt>Parameters:</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">argc</td><td>The number of arguments </td></tr>
+ <tr><td class="paramname">argv</td><td>An array containing the arguments as C-strings</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns:</dt><dd>Exit code </dd></dl>
+
+<p>Definition at line <a class="el" href="quadratureS2_8c_source.html#l00072">72</a> of file <a class="el" href="quadratureS2_8c_source.html">quadratureS2.c</a>.</p>
+
+<p>References <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::f</a>, <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::f_hat</a>, <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::N_total</a>, <a class="el" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free()</a>, <a class="el" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc()</a>, <a class="el" href="nfft3util_8h_source.html#l00068">NFFT_MAX</a>, <a class="el" href="nff [...]
+
+</div>
+</div>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__examples.html b/doc/api/html/group__examples.html
new file mode 100644
index 0000000..e23fef3
--- /dev/null
+++ b/doc/api/html/group__examples.html
@@ -0,0 +1,48 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Examples
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#groups">Modules</a> </div>
+ <div class="headertitle">
+<div class="title">Examples</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__examples__solver"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__examples__solver.html">Solver component</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__examples__solver.html b/doc/api/html/group__examples__solver.html
new file mode 100644
index 0000000..59a913d
--- /dev/null
+++ b/doc/api/html/group__examples__solver.html
@@ -0,0 +1,48 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Solver component
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#groups">Modules</a> </div>
+ <div class="headertitle">
+<div class="title">Solver component</div> </div>
+<div class="ingroups"><a class="el" href="group__examples.html">Examples</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group__examples__solver__glacier"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__examples__solver__glacier.html">Reconstruction of a glacier from scattered data</a></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__examples__solver__glacier.html b/doc/api/html/group__examples__solver__glacier.html
new file mode 100644
index 0000000..f062589
--- /dev/null
+++ b/doc/api/html/group__examples__solver__glacier.html
@@ -0,0 +1,59 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Reconstruction of a glacier from scattered data
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Reconstruction of a glacier from scattered data</div> </div>
+<div class="ingroups"><a class="el" href="group__examples__solver.html">Solver component</a></div></div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gab4da467610b4e791d41de5b7501fe208"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab4da467610b4e791d41de5b7501fe208"></a>
+static double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__examples__solver__glacier.html#gab4da467610b4e791d41de5b7501fe208">my_weight</a> (double z, double a, double b, double c)</td></tr>
+<tr class="memdesc:gab4da467610b4e791d41de5b7501fe208"><td class="mdescLeft"> </td><td class="mdescRight">Generalised Sobolev weight. <br/></td></tr>
+<tr class="memitem:gae32b7b49ac3d92c70301b2f96ab31e7a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae32b7b49ac3d92c70301b2f96ab31e7a"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__examples__solver__glacier.html#gae32b7b49ac3d92c70301b2f96ab31e7a">glacier</a> (int N, int M)</td></tr>
+<tr class="memdesc:gae32b7b49ac3d92c70301b2f96ab31e7a"><td class="mdescLeft"> </td><td class="mdescRight">Reconstruction routine. <br/></td></tr>
+<tr class="memitem:ga1503d05480f3e910ffae52b2e6aef34f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1503d05480f3e910ffae52b2e6aef34f"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__examples__solver__glacier.html#ga1503d05480f3e910ffae52b2e6aef34f">glacier_cv</a> (int N, int M, int M_cv, unsigned solver_flags)</td></tr>
+<tr class="memdesc:ga1503d05480f3e910ffae52b2e6aef34f"><td class="mdescLeft"> </td><td class="mdescRight">Reconstruction routine with cross validation. <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__examples__solver__glacier.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">Main routine. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__nfftutil.html b/doc/api/html/group__nfftutil.html
new file mode 100644
index 0000000..8483481
--- /dev/null
+++ b/doc/api/html/group__nfftutil.html
@@ -0,0 +1,478 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Util - Auxilliary functions
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Util - Auxilliary functions</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Include header for FFTW3 library for its complex type.
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga4df074728562efbb458f6662e649d1d5"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5">NFFT_SWAP_complex</a>(x, y)</td></tr>
+<tr class="memdesc:ga4df074728562efbb458f6662e649d1d5"><td class="mdescLeft"> </td><td class="mdescRight">Swapping of two vectors. <a href="#ga4df074728562efbb458f6662e649d1d5"></a><br/></td></tr>
+<tr class="memitem:ga4d8733560ed5e4cc3ff7ecadac62e83e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e">NFFT_SWAP_double</a>(x, y)</td></tr>
+<tr class="memdesc:ga4d8733560ed5e4cc3ff7ecadac62e83e"><td class="mdescLeft"> </td><td class="mdescRight">Swapping of two vectors. <a href="#ga4d8733560ed5e4cc3ff7ecadac62e83e"></a><br/></td></tr>
+<tr class="memitem:ga598a3330b3c21701223ee0ca14316eca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga598a3330b3c21701223ee0ca14316eca"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca">PI</a> 3.141592653589793238462643383279502884197169399375105820974944592</td></tr>
+<tr class="memdesc:ga598a3330b3c21701223ee0ca14316eca"><td class="mdescLeft"> </td><td class="mdescRight">Formerly known to be an irrational number. <br/></td></tr>
+<tr class="memitem:ga2750dfdda752269a036f487a4a34b849"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2750dfdda752269a036f487a4a34b849"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PI2</b> 6.283185307179586476925286766559005768394338798750211641949889185</td></tr>
+<tr class="memitem:gafd17621e12029ff7c53518b74a487c94"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafd17621e12029ff7c53518b74a487c94"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PI4</b> 12.56637061435917295385057353311801153678867759750042328389977837</td></tr>
+<tr class="memitem:gad2e3f0e1983de6d70f003545cc556ed3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad2e3f0e1983de6d70f003545cc556ed3"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3">NFFT_MAX</a>(a, b) ((a)>(b)? (a) : (b))</td></tr>
+<tr class="memdesc:gad2e3f0e1983de6d70f003545cc556ed3"><td class="mdescLeft"> </td><td class="mdescRight">Maximum of its two arguments. <br/></td></tr>
+<tr class="memitem:ga9087991411f723f26723b2b26dbf3308"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9087991411f723f26723b2b26dbf3308"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308">NFFT_MIN</a>(a, b) ((a)<(b)? (a) : (b))</td></tr>
+<tr class="memdesc:ga9087991411f723f26723b2b26dbf3308"><td class="mdescLeft"> </td><td class="mdescRight">Mimimum of its two arguments. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga89bd624abdfb13abc10c144a8ff949cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga89bd624abdfb13abc10c144a8ff949cd"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga89bd624abdfb13abc10c144a8ff949cd">nfft_bspline_old</a> (int k, double x, double *A)</td></tr>
+<tr class="memdesc:ga89bd624abdfb13abc10c144a8ff949cd"><td class="mdescLeft"> </td><td class="mdescRight">To test the new one. <br/></td></tr>
+<tr class="memitem:ga2fd48f1f700153c050d27691c4b2a6cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2fd48f1f700153c050d27691c4b2a6cc"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga2fd48f1f700153c050d27691c4b2a6cc">nfft_bspline</a> (int k, double x, double *scratch)</td></tr>
+<tr class="memdesc:ga2fd48f1f700153c050d27691c4b2a6cc"><td class="mdescLeft"> </td><td class="mdescRight">Computes the B-spline <img class="formulaInl" alt="$M_{k,0}\left(x\right)$" src="form_9.png"/>, scratch is used for de Boor's scheme. <br/></td></tr>
+<tr class="memitem:ga2752ca372ee2622f173a706e86e2b116"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2752ca372ee2622f173a706e86e2b116"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116">nfft_prod_int</a> (int *vec, int d)</td></tr>
+<tr class="memdesc:ga2752ca372ee2622f173a706e86e2b116"><td class="mdescLeft"> </td><td class="mdescRight">Computes integer <img class="formulaInl" alt="$\prod_{t=0}^{d-1} v_t$" src="form_10.png"/>. <br/></td></tr>
+<tr class="memitem:ga8adc6bf59ec10f16243030ee00ad4a40"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8adc6bf59ec10f16243030ee00ad4a40"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40">nfst_prod_minus_a_int</a> (int *vec, int a, int d)</td></tr>
+<tr class="memdesc:ga8adc6bf59ec10f16243030ee00ad4a40"><td class="mdescLeft"> </td><td class="mdescRight">Computes integer <img class="formulaInl" alt="$\prod_{t=0}^{d-1} v_t-a$" src="form_11.png"/>. <br/></td></tr>
+<tr class="memitem:gad979f626cc8397e26d1bd78a7ba342cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad979f626cc8397e26d1bd78a7ba342cd"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad979f626cc8397e26d1bd78a7ba342cd">nfft_plain_loop</a> (int *idx, int *N, int d)</td></tr>
+<tr class="memdesc:gad979f626cc8397e26d1bd78a7ba342cd"><td class="mdescLeft"> </td><td class="mdescRight">Computes <img class="formulaInl" alt="$\sum_{t=0}^{d-1} i_t \prod_{t'=t+1}^{d-1} N_{t'}$" src="form_12.png"/>. <br/></td></tr>
+<tr class="memitem:gad7bad7074a695341742f57526f8695eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad7bad7074a695341742f57526f8695eb"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad7bad7074a695341742f57526f8695eb">nfft_prod_real</a> (double *vec, int d)</td></tr>
+<tr class="memdesc:gad7bad7074a695341742f57526f8695eb"><td class="mdescLeft"> </td><td class="mdescRight">Computes double <img class="formulaInl" alt="$\prod_{t=0}^{d-1} v_t$" src="form_10.png"/>. <br/></td></tr>
+<tr class="memitem:ga135eb6c5a8ae1a84ea64c9099caac004"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga135eb6c5a8ae1a84ea64c9099caac004"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004">nfft_dot_complex</a> (fftw_complex *x, int n)</td></tr>
+<tr class="memdesc:ga135eb6c5a8ae1a84ea64c9099caac004"><td class="mdescLeft"> </td><td class="mdescRight">Computes the inner/dot product <img class="formulaInl" alt="$x^H x$" src="form_13.png"/>. <br/></td></tr>
+<tr class="memitem:ga02357d8d67d2591573089e49958855a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga02357d8d67d2591573089e49958855a5"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5">nfft_dot_double</a> (double *x, int n)</td></tr>
+<tr class="memdesc:ga02357d8d67d2591573089e49958855a5"><td class="mdescLeft"> </td><td class="mdescRight">Computes the inner/dot product <img class="formulaInl" alt="$x^H x$" src="form_13.png"/>. <br/></td></tr>
+<tr class="memitem:gac712b4a91652e20dc53719ce6fc1f9e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac712b4a91652e20dc53719ce6fc1f9e1"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1">nfft_dot_w_complex</a> (fftw_complex *x, double *w, int n)</td></tr>
+<tr class="memdesc:gac712b4a91652e20dc53719ce6fc1f9e1"><td class="mdescLeft"> </td><td class="mdescRight">Computes the weighted inner/dot product <img class="formulaInl" alt="$x^H (w \odot x)$" src="form_14.png"/>. <br/></td></tr>
+<tr class="memitem:ga69cceec47679c500072d3d60c6181b39"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga69cceec47679c500072d3d60c6181b39"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39">nfft_dot_w_double</a> (double *x, double *w, int n)</td></tr>
+<tr class="memdesc:ga69cceec47679c500072d3d60c6181b39"><td class="mdescLeft"> </td><td class="mdescRight">Computes the weighted inner/dot product <img class="formulaInl" alt="$x^H (w \odot x)$" src="form_14.png"/>. <br/></td></tr>
+<tr class="memitem:ga68268fc9bfad5a7e7383098ac1715674"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga68268fc9bfad5a7e7383098ac1715674"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga68268fc9bfad5a7e7383098ac1715674">nfft_dot_w_w2_complex</a> (fftw_complex *x, double *w, double *w2, int n)</td></tr>
+<tr class="memdesc:ga68268fc9bfad5a7e7383098ac1715674"><td class="mdescLeft"> </td><td class="mdescRight">Computes the weighted inner/dot product <img class="formulaInl" alt="$x^H (w1\odot w2\odot w2 \odot x)$" src="form_15.png"/>. <br/></td></tr>
+<tr class="memitem:ga9b59288597d159357fe86395e635a075"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9b59288597d159357fe86395e635a075"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga9b59288597d159357fe86395e635a075">nfft_dot_w2_complex</a> (fftw_complex *x, double *w2, int n)</td></tr>
+<tr class="memdesc:ga9b59288597d159357fe86395e635a075"><td class="mdescLeft"> </td><td class="mdescRight">Computes the weighted inner/dot product <img class="formulaInl" alt="$x^H (w2\odot w2 \odot x)$" src="form_16.png"/>. <br/></td></tr>
+<tr class="memitem:ga21fd5b4d5f6113538320188306611133"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga21fd5b4d5f6113538320188306611133"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133">nfft_cp_complex</a> (fftw_complex *x, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga21fd5b4d5f6113538320188306611133"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow y$" src="form_17.png"/>. <br/></td></tr>
+<tr class="memitem:gab220a37bd6e58be7413507b17ca3bfe2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab220a37bd6e58be7413507b17ca3bfe2"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2">nfft_cp_double</a> (double *x, double *y, int n)</td></tr>
+<tr class="memdesc:gab220a37bd6e58be7413507b17ca3bfe2"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow y$" src="form_17.png"/>. <br/></td></tr>
+<tr class="memitem:ga33409df91e7ad5e1dca3beaa63e0ef25"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga33409df91e7ad5e1dca3beaa63e0ef25"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga33409df91e7ad5e1dca3beaa63e0ef25">nfft_cp_a_complex</a> (fftw_complex *x, double a, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga33409df91e7ad5e1dca3beaa63e0ef25"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow a y$" src="form_18.png"/>. <br/></td></tr>
+<tr class="memitem:ga41f20c605269e701b3305e49010e0759"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga41f20c605269e701b3305e49010e0759"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga41f20c605269e701b3305e49010e0759">nfft_cp_a_double</a> (double *x, double a, double *y, int n)</td></tr>
+<tr class="memdesc:ga41f20c605269e701b3305e49010e0759"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow a y$" src="form_18.png"/>. <br/></td></tr>
+<tr class="memitem:ga630054cb816785d766959a867965f619"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga630054cb816785d766959a867965f619"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga630054cb816785d766959a867965f619">nfft_cp_w_complex</a> (fftw_complex *x, double *w, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga630054cb816785d766959a867965f619"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow w\odot y$" src="form_19.png"/>. <br/></td></tr>
+<tr class="memitem:ga27a75e17d21c508cacf81276ca531099"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga27a75e17d21c508cacf81276ca531099"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099">nfft_cp_w_double</a> (double *x, double *w, double *y, int n)</td></tr>
+<tr class="memdesc:ga27a75e17d21c508cacf81276ca531099"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow w\odot y$" src="form_19.png"/>. <br/></td></tr>
+<tr class="memitem:ga676395f56bbf1c444d074a21753de8d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga676395f56bbf1c444d074a21753de8d5"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5">nfft_upd_axpy_complex</a> (fftw_complex *x, double a, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga676395f56bbf1c444d074a21753de8d5"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + y$" src="form_20.png"/>. <br/></td></tr>
+<tr class="memitem:ga7610a506bc5ab40a6e1d7937b36921a3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7610a506bc5ab40a6e1d7937b36921a3"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3">nfft_upd_axpy_double</a> (double *x, double a, double *y, int n)</td></tr>
+<tr class="memdesc:ga7610a506bc5ab40a6e1d7937b36921a3"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + y$" src="form_20.png"/>. <br/></td></tr>
+<tr class="memitem:ga1fde8da1b69413398fca44e2ef2fbdb4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1fde8da1b69413398fca44e2ef2fbdb4"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4">nfft_upd_xpay_complex</a> (fftw_complex *x, double a, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga1fde8da1b69413398fca44e2ef2fbdb4"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow x + a y$" src="form_21.png"/>. <br/></td></tr>
+<tr class="memitem:ga2389c3b56a484a3f165b7d9203700064"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2389c3b56a484a3f165b7d9203700064"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064">nfft_upd_xpay_double</a> (double *x, double a, double *y, int n)</td></tr>
+<tr class="memdesc:ga2389c3b56a484a3f165b7d9203700064"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow x + a y$" src="form_21.png"/>. <br/></td></tr>
+<tr class="memitem:ga903a4b3ed369dcfe67b9379a238ed23d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga903a4b3ed369dcfe67b9379a238ed23d"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga903a4b3ed369dcfe67b9379a238ed23d">nfft_upd_axpby_complex</a> (fftw_complex *x, double a, fftw_complex *y, double b, int n)</td></tr>
+<tr class="memdesc:ga903a4b3ed369dcfe67b9379a238ed23d"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + b y$" src="form_22.png"/>. <br/></td></tr>
+<tr class="memitem:ga75e403e92875b0b919a555f8cede0e8d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga75e403e92875b0b919a555f8cede0e8d"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga75e403e92875b0b919a555f8cede0e8d">nfft_upd_axpby_double</a> (double *x, double a, double *y, double b, int n)</td></tr>
+<tr class="memdesc:ga75e403e92875b0b919a555f8cede0e8d"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + b y$" src="form_22.png"/>. <br/></td></tr>
+<tr class="memitem:gad8e10773e59818c88a8ea2cb560b936e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad8e10773e59818c88a8ea2cb560b936e"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e">nfft_upd_xpawy_complex</a> (fftw_complex *x, double a, double *w, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:gad8e10773e59818c88a8ea2cb560b936e"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow x + a w\odot y$" src="form_23.png"/>. <br/></td></tr>
+<tr class="memitem:gac5db5bbc58f772844cf0caf5fd9fafb0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac5db5bbc58f772844cf0caf5fd9fafb0"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0">nfft_upd_xpawy_double</a> (double *x, double a, double *w, double *y, int n)</td></tr>
+<tr class="memdesc:gac5db5bbc58f772844cf0caf5fd9fafb0"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow x + a w\odot y$" src="form_23.png"/>. <br/></td></tr>
+<tr class="memitem:ga693919963b51cf396311b15660e04cd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga693919963b51cf396311b15660e04cd8"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga693919963b51cf396311b15660e04cd8">nfft_upd_axpwy_complex</a> (fftw_complex *x, double a, double *w, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga693919963b51cf396311b15660e04cd8"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + w\odot y$" src="form_24.png"/>. <br/></td></tr>
+<tr class="memitem:gaf6777c4b8aa9f575f1600c51e8ae343a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf6777c4b8aa9f575f1600c51e8ae343a"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaf6777c4b8aa9f575f1600c51e8ae343a">nfft_upd_axpwy_double</a> (double *x, double a, double *w, double *y, int n)</td></tr>
+<tr class="memdesc:gaf6777c4b8aa9f575f1600c51e8ae343a"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + w\odot y$" src="form_24.png"/>. <br/></td></tr>
+<tr class="memitem:gaa388b5ec231e02ac45e37b60fd62e770"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa388b5ec231e02ac45e37b60fd62e770"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770">nfft_fftshift_complex</a> (fftw_complex *x, int d, int *N)</td></tr>
+<tr class="memdesc:gaa388b5ec231e02ac45e37b60fd62e770"><td class="mdescLeft"> </td><td class="mdescRight">Swaps each half over N[d]/2. <br/></td></tr>
+<tr class="memitem:gaa8e0581d802c4b7bb153682a4c156409"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa8e0581d802c4b7bb153682a4c156409"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaa8e0581d802c4b7bb153682a4c156409">nfft_vpr_int</a> (int *x, int n, char *text)</td></tr>
+<tr class="memdesc:gaa8e0581d802c4b7bb153682a4c156409"><td class="mdescLeft"> </td><td class="mdescRight">Prints a vector of integer numbers. <br/></td></tr>
+<tr class="memitem:ga5021b4c5ea2a24b0014786deb81cca91"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5021b4c5ea2a24b0014786deb81cca91"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91">nfft_vpr_double</a> (double *x, int n, const char *text)</td></tr>
+<tr class="memdesc:ga5021b4c5ea2a24b0014786deb81cca91"><td class="mdescLeft"> </td><td class="mdescRight">Prints a vector of doubles numbers. <br/></td></tr>
+<tr class="memitem:ga52ad07055e22b83a016bdbf43d3884d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga52ad07055e22b83a016bdbf43d3884d0"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0">nfft_vpr_complex</a> (fftw_complex *x, int n, const char *text)</td></tr>
+<tr class="memdesc:ga52ad07055e22b83a016bdbf43d3884d0"><td class="mdescLeft"> </td><td class="mdescRight">Prints a vector of complex numbers. <br/></td></tr>
+<tr class="memitem:ga5f53c8cd0b2f33200fce15ecf75a0685"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5f53c8cd0b2f33200fce15ecf75a0685"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685">nfft_vrand_unit_complex</a> (fftw_complex *x, int n)</td></tr>
+<tr class="memdesc:ga5f53c8cd0b2f33200fce15ecf75a0685"><td class="mdescLeft"> </td><td class="mdescRight">Inits a vector of random complex numbers in <img class="formulaInl" alt="$[0,1]\times[0,1]{\rm i}$" src="form_25.png"/>. <br/></td></tr>
+<tr class="memitem:gaa44184ac2c1452221508e7640f391c34"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa44184ac2c1452221508e7640f391c34"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34">nfft_vrand_shifted_unit_double</a> (double *x, int n)</td></tr>
+<tr class="memdesc:gaa44184ac2c1452221508e7640f391c34"><td class="mdescLeft"> </td><td class="mdescRight">Inits a vector of random double numbers in <img class="formulaInl" alt="$[-1/2,1/2]$" src="form_26.png"/>. <br/></td></tr>
+<tr class="memitem:ga797e81f55e6379efabf4d98522d1ee9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga797e81f55e6379efabf4d98522d1ee9d"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga797e81f55e6379efabf4d98522d1ee9d">nfft_voronoi_weights_1d</a> (double *w, double *x, int M)</td></tr>
+<tr class="memdesc:ga797e81f55e6379efabf4d98522d1ee9d"><td class="mdescLeft"> </td><td class="mdescRight">Computes non periodic voronoi weights, assumes ordered nodes <img class="formulaInl" alt="$x_j$" src="form_27.png"/>. <br/></td></tr>
+<tr class="memitem:ga26a4ed487a23e99e01f111113be9f994"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994">nfft_voronoi_weights_S2</a> (double *w, double *xi, int M)</td></tr>
+<tr class="memdesc:ga26a4ed487a23e99e01f111113be9f994"><td class="mdescLeft"> </td><td class="mdescRight">Computes voronoi weights for nodes on the sphere S^2. <a href="#ga26a4ed487a23e99e01f111113be9f994"></a><br/></td></tr>
+<tr class="memitem:gac9b810183abafb668f8aa777c7985256"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac9b810183abafb668f8aa777c7985256"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gac9b810183abafb668f8aa777c7985256">nfft_modified_fejer</a> (int N, int kk)</td></tr>
+<tr class="memdesc:gac9b810183abafb668f8aa777c7985256"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified Fejer kernel, ie <img class="formulaInl" alt="$\frac{2}{N}\left(1-\frac{\left|2k+1\right|}{N}\right)$" src="form_28.png"/>. <br/></td></tr>
+<tr class="memitem:gab45a6cd3528d3716522a0cf184375aaf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab45a6cd3528d3716522a0cf184375aaf"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gab45a6cd3528d3716522a0cf184375aaf">nfft_modified_jackson2</a> (int N, int kk)</td></tr>
+<tr class="memdesc:gab45a6cd3528d3716522a0cf184375aaf"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified Jackson kernel. <br/></td></tr>
+<tr class="memitem:ga126ec2282393435f0d795ac79db8654b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga126ec2282393435f0d795ac79db8654b"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga126ec2282393435f0d795ac79db8654b">nfft_modified_jackson4</a> (int N, int kk)</td></tr>
+<tr class="memdesc:ga126ec2282393435f0d795ac79db8654b"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified generalised Jackson kernel. <br/></td></tr>
+<tr class="memitem:gaa84cb34c6d368599fb2f997eadb184a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa84cb34c6d368599fb2f997eadb184a7"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaa84cb34c6d368599fb2f997eadb184a7">nfft_modified_sobolev</a> (double mu, int kk)</td></tr>
+<tr class="memdesc:gaa84cb34c6d368599fb2f997eadb184a7"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified Sobolev kernel. <br/></td></tr>
+<tr class="memitem:gac6201bc2aa806bd25cb14c5f96d644e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac6201bc2aa806bd25cb14c5f96d644e9"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gac6201bc2aa806bd25cb14c5f96d644e9">nfft_modified_multiquadric</a> (double mu, double c, int kk)</td></tr>
+<tr class="memdesc:gac6201bc2aa806bd25cb14c5f96d644e9"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified multiquadric kernel. <br/></td></tr>
+<tr class="memitem:ga2decee6fe50d50797a82737ba82cf97a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga2decee6fe50d50797a82737ba82cf97a">nfft_smbi</a> (const double x, const double alpha, const int nb, const int ize, double *b)</td></tr>
+<tr class="memdesc:ga2decee6fe50d50797a82737ba82cf97a"><td class="mdescLeft"> </td><td class="mdescRight">Calculates the modified bessel function <img class="formulaInl" alt="$I_{n+\alpha}(x)$" src="form_82.png"/>, possibly scaled by <img class="formulaInl" alt="$\mathrm{e}^{-x}$" src="form_83.png"/>, for real non-negative <img class="formulaInl" alt="$x,alpha$" src="form_84.png"/> with <img class="formulaInl" alt="$0 \le \alpha < 1$" src="form_85.png"/>, and <img class="formulaInl" [...]
+<tr class="memitem:ga574571239f7dcf7474736d35a6242bb1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga574571239f7dcf7474736d35a6242bb1"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nfft_drand48</b> (void)</td></tr>
+<tr class="memitem:gaef3ecf626cc0aab6ccdc363fd43ef0d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaef3ecf626cc0aab6ccdc363fd43ef0d8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_srand48</b> (long int seed)</td></tr>
+<tr class="memitem:gad93b94e3c7e9149f89819504c2b3c738"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738">nfft_sort_node_indices_radix_lsdf</a> (int n, int *keys0, int *keys1, int rhigh)</td></tr>
+<tr class="memdesc:gad93b94e3c7e9149f89819504c2b3c738"><td class="mdescLeft"> </td><td class="mdescRight">Radix sort for node indices. <a href="#gad93b94e3c7e9149f89819504c2b3c738"></a><br/></td></tr>
+<tr class="memitem:ga60a5123a8026a06807e14502d7cedcd5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5">nfft_sort_node_indices_radix_msdf</a> (int n, int *keys0, int *keys1, int rhigh)</td></tr>
+<tr class="memdesc:ga60a5123a8026a06807e14502d7cedcd5"><td class="mdescLeft"> </td><td class="mdescRight">Radix sort for node indices. <a href="#ga60a5123a8026a06807e14502d7cedcd5"></a><br/></td></tr>
+<tr class="memitem:gafb4a11b0dff72fc3b827b0fee0a14611"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafb4a11b0dff72fc3b827b0fee0a14611"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfft_get_num_threads</b> (void)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<p>Include header for FFTW3 library for its complex type. </p>
+<p>This module implements frequently used utility functions. In particular, this includes simple measurement of resources, evaluation of window functions, vector routines for basic linear algebra tasks, and computation of weights for the inverse transforms. </p>
+<hr/><h2>Macro Definition Documentation</h2>
+<a class="anchor" id="ga4df074728562efbb458f6662e649d1d5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NFFT_SWAP_complex</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">x, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">y </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">{fftw_complex* NFFT_SWAP_temp__; \</div>
+<div class="line"> NFFT_SWAP_temp__=(x); (x)=(y); (y)=NFFT_SWAP_temp__;}</div>
+</div><!-- fragment -->
+<p>Swapping of two vectors. </p>
+
+<p>Definition at line <a class="el" href="nfft3util_8h_source.html#l00052">52</a> of file <a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>.</p>
+
+<p>Referenced by <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a class="el" href="fastgauss_8c_source.html#l00532">fgt_test_error_p()</a>, <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>, <a class="el" href="glacier_8c_source.html#l00110">glacier_cv()</a>, <a class="el" href="iterS2_8c_source.html#l00058">main()</a>, <a class="el" href="solver_8c_source. [...]
+
+</div>
+</div>
+<a class="anchor" id="ga4d8733560ed5e4cc3ff7ecadac62e83e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NFFT_SWAP_double</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">x, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">y </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">{<span class="keywordtype">double</span>* NFFT_SWAP_temp__; NFFT_SWAP_temp__=(x); \</div>
+<div class="line"> (x)=(y); (y)=NFFT_SWAP_temp__;}</div>
+</div><!-- fragment -->
+<p>Swapping of two vectors. </p>
+
+<p>Definition at line <a class="el" href="nfft3util_8h_source.html#l00057">57</a> of file <a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>.</p>
+
+<p>Referenced by <a class="el" href="solver_8c_source.html#l00575">solver_loop_one_step_cgnr_double()</a>, <a class="el" href="solver_8c_source.html#l00471">solver_loop_one_step_landweber_double()</a>, and <a class="el" href="solver_8c_source.html#l00520">solver_loop_one_step_steepest_descent_double()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga26a4ed487a23e99e01f111113be9f994"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void nfft_voronoi_weights_S2 </td>
+ <td>(</td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>xi</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>M</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Computes voronoi weights for nodes on the sphere S^2. </p>
+
+<p>Definition at line <a class="el" href="util_8c_source.html#l00581">581</a> of file <a class="el" href="util_8c_source.html">util.c</a>.</p>
+
+<p>References <a class="el" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free()</a>, <a class="el" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc()</a>, and <a class="el" href="nfft3util_8h_source.html#l00062">PI</a>.</p>
+
+<p>Referenced by <a class="el" href="iterS2_8c_source.html#l00058">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga2decee6fe50d50797a82737ba82cf97a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int nfft_smbi </td>
+ <td>(</td>
+ <td class="paramtype">const R </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const R </td>
+ <td class="paramname"><em>alpha</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int </td>
+ <td class="paramname"><em>nb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int </td>
+ <td class="paramname"><em>ize</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">R * </td>
+ <td class="paramname"><em>b</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Calculates the modified bessel function <img class="formulaInl" alt="$I_{n+\alpha}(x)$" src="form_82.png"/>, possibly scaled by <img class="formulaInl" alt="$\mathrm{e}^{-x}$" src="form_83.png"/>, for real non-negative <img class="formulaInl" alt="$x,alpha$" src="form_84.png"/> with <img class="formulaInl" alt="$0 \le \alpha < 1$" src="form_85.png"/>, and <img class="formulaInl" alt="$n=0,1,\ldots,nb-1$" src="form_86.png"/>. </p>
+<ul>
+<li>[in] <code>x</code> non-negative real number in <img class="formulaInl" alt="$I_{n+\alpha}(x)$" src="form_82.png"/> </li>
+<li>[in] <code>alpha</code> non-negative real number with <img class="formulaInl" alt="$0 \le \alpha < 1$" src="form_85.png"/> in <img class="formulaInl" alt="$I_{n+\alpha}(x)$" src="form_82.png"/> </li>
+<li>[in] <code>nb</code> number of functions to be calculated </li>
+<li>[in] <code>ize</code> switch between no scaling (<code>ize</code> = 1) and exponential scaling (<code>ize</code> = 2) </li>
+<li>[out] <code>b</code> real output vector to contain <img class="formulaInl" alt="$I_{n+\alpha}(x)$" src="form_82.png"/>, <img class="formulaInl" alt="$n=0,1,\ldots,nb-1$" src="form_86.png"/> <dl class="section return"><dt>Returns:</dt><dd>error indicator. Only if this value is identical to <code>nb</code>, then all values in <code>b</code> have been calculated to full accuracy. If not, errors are indicated using the following scheme:<ul>
+<li>ncalc < 0: At least one of the arguments was out of range (e.g. nb <= 0, ize neither equals 1 nor 2, <img class="formulaInl" alt="$|x| \ge exparg$" src="form_87.png"/>). In this case, the output vector b is not calculated and <code>ncalc</code> is set to <img class="formulaInl" alt="$\min(nb,0)-1$" src="form_88.png"/>.</li>
+<li>0 < ncalc < nb: Not all requested functions could be calculated to full accuracy. This can occur when nb is much larger than |x|. in this case, the values <img class="formulaInl" alt="$I_{n+\alpha}(x)$" src="form_82.png"/> are calculated to full accuracy for <img class="formulaInl" alt="$n=0,1,\ldots,ncalc$" src="form_89.png"/>. The rest of the values up to <img class="formulaInl" alt="$n=0,1,\ldots,nb-1$" src="form_86.png"/> is calculated to a lower accuracy.</li>
+</ul>
+</dd></dl>
+</li>
+</ul>
+<p>This program is based on a program written by David J. Sookne [2] that computes values of the Bessel functions <img class="formulaInl" alt="$J_{\nu}(x)$" src="form_90.png"/> or <img class="formulaInl" alt="$I_{\nu}(x)$" src="form_91.png"/> for real argument <img class="formulaInl" alt="$x$" src="form_92.png"/> and integer order <img class="formulaInl" alt="$\nu$" src="form_93.png"/>. modifications include the restriction of the computation to the Bessel function <img class="formulaInl [...]
+<p>References: [1] F. W. J. Olver and D. J. Sookne, A note on backward recurrence algorithms", Math. Comput. (26), 1972, pp 125 – 132.
+ [2] D. J. Sookne, "Bessel functions of real argument and int order", NBS Jour. of Res. B. (77B), 1973, pp. 125 – 132.</p>
+<p>Modified by W. J. Cody, Applied Mathematics Division, Argonne National Laboratory, Argonne, IL, 60439, USA</p>
+<p>Modified by Jens Keiner, Institute of Mathematics, University of Lübeck, 23560 Lübeck, Germany </p>
+
+<p>Definition at line <a class="el" href="util_8c_source.html#l00950">950</a> of file <a class="el" href="util_8c_source.html">util.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00076">nfsft_wisdom::alpha</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsumS2_8c_source.html#l00164">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad93b94e3c7e9149f89819504c2b3c738"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void nfft_sort_node_indices_radix_lsdf </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>n</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>keys0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>keys1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>rhigh</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Radix sort for node indices. </p>
+<p>Radix sort for node indices.</p>
+<dl class="section author"><dt>Author:</dt><dd>Michael Hofmann </dd></dl>
+
+<p>Definition at line <a class="el" href="util_8c_source.html#l01301">1301</a> of file <a class="el" href="util_8c_source.html">util.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga60a5123a8026a06807e14502d7cedcd5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void nfft_sort_node_indices_radix_msdf </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>n</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>keys0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int * </td>
+ <td class="paramname"><em>keys1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>rhigh</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Radix sort for node indices. </p>
+<p>Radix sort for node indices.</p>
+<dl class="section author"><dt>Author:</dt><dd>Michael Hofmann </dd></dl>
+
+<p>Definition at line <a class="el" href="util_8c_source.html#l01383">1383</a> of file <a class="el" href="util_8c_source.html">util.c</a>.</p>
+
+<p>References <a class="el" href="util_8c_source.html#l01383">nfft_sort_node_indices_radix_msdf()</a>.</p>
+
+<p>Referenced by <a class="el" href="util_8c_source.html#l01383">nfft_sort_node_indices_radix_msdf()</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/group__nfsft.html b/doc/api/html/group__nfsft.html
new file mode 100644
index 0000000..70d8f46
--- /dev/null
+++ b/doc/api/html/group__nfsft.html
@@ -0,0 +1,563 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Nfsft
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">Nfsft</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html">nfsft_wisdom</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Wisdom structure. <a href="structnfsft__wisdom.html#details">More...</a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga6ebc87b6a9996327fdf13c4c3b2f79c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6ebc87b6a9996327fdf13c4c3b2f79c1"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>BWEXP_MAX</b> 10</td></tr>
+<tr class="memitem:ga7a05635f8b2f1099a6a57dafbb6a1cb1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7a05635f8b2f1099a6a57dafbb6a1cb1"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>BW_MAX</b> 1024</td></tr>
+<tr class="memitem:ga419a0077c38536976cf6ad9d7fddd9e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga419a0077c38536976cf6ad9d7fddd9e5"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>ROW</b>(k) (k*(wisdom.N_MAX+2))</td></tr>
+<tr class="memitem:ga5c75ea9f4835d9aa1b75dac53622e488"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5c75ea9f4835d9aa1b75dac53622e488"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>ROWK</b>(k) (k*(wisdom.N_MAX+2)+k)</td></tr>
+<tr class="memitem:ga206c4faaf800b49dcb14e26148fa9ac6"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga206c4faaf800b49dcb14e26148fa9ac6">NFSFT_DEFAULT_NFFT_CUTOFF</a> 6</td></tr>
+<tr class="memdesc:ga206c4faaf800b49dcb14e26148fa9ac6"><td class="mdescLeft"> </td><td class="mdescRight">The default NFFT cutoff parameter. <a href="#ga206c4faaf800b49dcb14e26148fa9ac6"></a><br/></td></tr>
+<tr class="memitem:gab7d25b80464387893b3c773f92e5c4f3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#gab7d25b80464387893b3c773f92e5c4f3">NFSFT_DEFAULT_THRESHOLD</a> 1000</td></tr>
+<tr class="memdesc:gab7d25b80464387893b3c773f92e5c4f3"><td class="mdescLeft"> </td><td class="mdescRight">The default threshold for the FPT. <a href="#gab7d25b80464387893b3c773f92e5c4f3"></a><br/></td></tr>
+<tr class="memitem:ga54b840898df97bcd14af4cb004650ed3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3">NFSFT_BREAK_EVEN</a> 5</td></tr>
+<tr class="memdesc:ga54b840898df97bcd14af4cb004650ed3"><td class="mdescLeft"> </td><td class="mdescRight">The break-even bandwidth <img class="formulaInl" alt="$N \in \mathbb{N}_0$" src="form_49.png"/>. <a href="#ga54b840898df97bcd14af4cb004650ed3"></a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:gaf6a258d8f3ee5206d682d799316314b1"><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><b>bool</b> { <b>false</b> = 0,
+<b>true</b> = 1
+ }</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga579cd4224a1b91605551f9ef36c02570"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga579cd4224a1b91605551f9ef36c02570"></a>
+void </td><td class="memItemRight" valign="bottom"><b>alpha_al_row</b> (R *alpha, const int N, const int n)</td></tr>
+<tr class="memitem:ga701e714a76a30130d1db3394ef199b7a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga701e714a76a30130d1db3394ef199b7a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>beta_al_row</b> (R *beta, const int N, const int n)</td></tr>
+<tr class="memitem:gacc014bf577397cff2b508de22a4581bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gacc014bf577397cff2b508de22a4581bb"></a>
+void </td><td class="memItemRight" valign="bottom"><b>gamma_al_row</b> (R *gamma, const int N, const int n)</td></tr>
+<tr class="memitem:ga6b01d5f2e8b3a026906e977118d7b0d2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga6b01d5f2e8b3a026906e977118d7b0d2">alpha_al_all</a> (R *alpha, const int N)</td></tr>
+<tr class="memdesc:ga6b01d5f2e8b3a026906e977118d7b0d2"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\alpha_{k-1}^n$" src="form_39.png"/> of associated Legendre functions for <img class="formulaInl" alt="$k,n = 0,1,\ldots,N$" src="form_40.png"/>. <a href="#ga6b01d5f2e8b3a026906e977118d7b0d2"></a><br/></td></tr>
+<tr class="memitem:gaf0fb6a3993b3c956bea8fa75e3a71290"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#gaf0fb6a3993b3c956bea8fa75e3a71290">beta_al_all</a> (R *beta, const int N)</td></tr>
+<tr class="memdesc:gaf0fb6a3993b3c956bea8fa75e3a71290"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\beta_{k-1}^n$" src="form_42.png"/> of associated Legendre functions for <img class="formulaInl" alt="$k,n = 0,1,\ldots,N$" src="form_40.png"/>. <a href="#gaf0fb6a3993b3c956bea8fa75e3a71290"></a><br/></td></tr>
+<tr class="memitem:ga88de851c8f9a4c042ad101cb4fb8c51d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga88de851c8f9a4c042ad101cb4fb8c51d">gamma_al_all</a> (R *gamma, const int N)</td></tr>
+<tr class="memdesc:ga88de851c8f9a4c042ad101cb4fb8c51d"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\gamma_{k-1}^n$" src="form_43.png"/> of associated Legendre functions for <img class="formulaInl" alt="$k,n = 0,1,\ldots,N$" src="form_40.png"/>. <a href="#ga88de851c8f9a4c042ad101cb4fb8c51d"></a><br/></td></tr>
+<tr class="memitem:gac5f2f8c36dc4f8ca65f058af6491f163"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#gac5f2f8c36dc4f8ca65f058af6491f163">eval_al</a> (R *x, R *y, const int size, const int k, R *alpha, R *beta, R *gamma)</td></tr>
+<tr class="memdesc:gac5f2f8c36dc4f8ca65f058af6491f163"><td class="mdescLeft"> </td><td class="mdescRight">Evaluates an associated Legendre polynomials <img class="formulaInl" alt="$P_k^n(x,c)$" src="form_44.png"/> using the Clenshaw-algorithm. <a href="#gac5f2f8c36dc4f8ca65f058af6491f163"></a><br/></td></tr>
+<tr class="memitem:ga1bc5682379de94e87031afa38e02675d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga1bc5682379de94e87031afa38e02675d">eval_al_thresh</a> (R *x, R *y, const int size, const int k, R *alpha, R *beta, R *gamma, R threshold)</td></tr>
+<tr class="memdesc:ga1bc5682379de94e87031afa38e02675d"><td class="mdescLeft"> </td><td class="mdescRight">Evaluates an associated Legendre polynomials <img class="formulaInl" alt="$P_k^n(x,c)$" src="form_44.png"/> using the Clenshaw-algorithm if it no exceeds a given threshold. <a href="#ga1bc5682379de94e87031afa38e02675d"></a><br/></td></tr>
+<tr class="memitem:ga47209b28b6561fca7349ed8afa5f9656"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656">c2e</a> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memdesc:ga47209b28b6561fca7349ed8afa5f9656"><td class="mdescLeft"> </td><td class="mdescRight">Converts coefficients <img class="formulaInl" alt="$\left(b_k^n\right)_{k=0}^M$" src="form_50.png"/> with <img class="formulaInl" alt="$M \in \mathbb{N}_0$" src="form_36.png"/>, <img class="formulaInl" alt="$-M \le n \le M$" src="form_51.png"/> from a linear combination of Chebyshev polynomials </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ f(\cos\vartheta) = \sum_{k=0}^{2\lfloor\frac{M}{2}\rfloor} a_k (\sin\vartheta)^{n\;\mathrm{mod}\;2} T_k(\cos\vartheta) \]" src="form_52.png"/>
+</p>
+<p> to coefficients <img class="formulaInl" alt="$\left(c_k^n\right)_{k=0}^M$" src="form_53.png"/> matching the representation by complex exponentials </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ f(\cos\vartheta) = \sum_{k=-M}^{M} c_k \mathrm{e}^{\mathrm{i}k\vartheta} \]" src="form_54.png"/>
+</p>
+<p> for each order <img class="formulaInl" alt="$n=-M,\ldots,M$" src="form_55.png"/>. <a href="#ga47209b28b6561fca7349ed8afa5f9656"></a><br/></td></tr>
+<tr class="memitem:ga0e033457136bc0ecb18bb57d3ee5aa37"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga0e033457136bc0ecb18bb57d3ee5aa37">c2e_transposed</a> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memdesc:ga0e033457136bc0ecb18bb57d3ee5aa37"><td class="mdescLeft"> </td><td class="mdescRight">Transposed version of the function <a class="el" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656">c2e</a>. <a href="#ga0e033457136bc0ecb18bb57d3ee5aa37"></a><br/></td></tr>
+<tr class="memitem:ga65cda3f4a3edc5eb39c697cf34b1f0b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga65cda3f4a3edc5eb39c697cf34b1f0b9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M)</td></tr>
+<tr class="memitem:ga2812aa5beba0eb7efd3072bf323a0155"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2812aa5beba0eb7efd3072bf323a0155"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init_advanced</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M, unsigned int flags)</td></tr>
+<tr class="memitem:gafff6158abcefa9a75bcfa41af5a79089"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafff6158abcefa9a75bcfa41af5a79089"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init_guru</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M, unsigned int flags, unsigned int nfft_flags, int nfft_cutoff)</td></tr>
+<tr class="memitem:gabe87aeea1f7cfef9ae8febb16d702f3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabe87aeea1f7cfef9ae8febb16d702f3b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_precompute</b> (int N, double kappa, unsigned int nfsft_flags, unsigned int fpt_flags)</td></tr>
+<tr class="memitem:ga3b69bca6c76a63877534f5a9781bf285"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3b69bca6c76a63877534f5a9781bf285"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_forget</b> (void)</td></tr>
+<tr class="memitem:gaa63e193a27d84059742ff25ff81e2ed1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa63e193a27d84059742ff25ff81e2ed1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_finalize</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga7628057164579a29cc77487cda6772e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7628057164579a29cc77487cda6772e5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_trafo_direct</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga7cfaacc3393dea5c895859fa035e3e06"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7cfaacc3393dea5c895859fa035e3e06"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_adjoint_direct</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga5796fc68c432d46dfcab7abd8c56ee22"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5796fc68c432d46dfcab7abd8c56ee22"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_trafo</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga813bb48d404c7286310733c99a81a169"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga813bb48d404c7286310733c99a81a169"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_adjoint</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga7a7fa6722d6ba3aade4c69299af86e4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7a7fa6722d6ba3aade4c69299af86e4e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_precompute_x</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ga0af81d81e1b436949ddc46dbd27346e5"><td class="memItemLeft" align="right" valign="top">static struct <a class="el" href="structnfsft__wisdom.html">nfsft_wisdom</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga0af81d81e1b436949ddc46dbd27346e5">wisdom</a> = {false,0U,-1,-1,0,0,0,0,0}</td></tr>
+<tr class="memdesc:ga0af81d81e1b436949ddc46dbd27346e5"><td class="mdescLeft"> </td><td class="mdescRight">The global wisdom structure for precomputed data. <a href="#ga0af81d81e1b436949ddc46dbd27346e5"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<hr/><h2>Macro Definition Documentation</h2>
+<a class="anchor" id="ga206c4faaf800b49dcb14e26148fa9ac6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NFSFT_DEFAULT_NFFT_CUTOFF 6</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>The default NFFT cutoff parameter. </p>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="nfsft_8c_source.html#l00065">65</a> of file <a class="el" href="nfsft_8c_source.html">nfsft.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab7d25b80464387893b3c773f92e5c4f3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NFSFT_DEFAULT_THRESHOLD 1000</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>The default threshold for the FPT. </p>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="nfsft_8c_source.html#l00072">72</a> of file <a class="el" href="nfsft_8c_source.html">nfsft.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga54b840898df97bcd14af4cb004650ed3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NFSFT_BREAK_EVEN 5</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>The break-even bandwidth <img class="formulaInl" alt="$N \in \mathbb{N}_0$" src="form_49.png"/>. </p>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="nfsft_8c_source.html#l00079">79</a> of file <a class="el" href="nfsft_8c_source.html">nfsft.c</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ga6b01d5f2e8b3a026906e977118d7b0d2"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void alpha_al_all </td>
+ <td>(</td>
+ <td class="paramtype">R * </td>
+ <td class="paramname"><em>alpha</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int </td>
+ <td class="paramname"><em>N</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\alpha_{k-1}^n$" src="form_39.png"/> of associated Legendre functions for <img class="formulaInl" alt="$k,n = 0,1,\ldots,N$" src="form_40.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(N+1)^2$" src="form_41.png"/> where the coefficients will be stored such that alpha[n+(N+1)+k] = <img class="formulaInl" alt="$\alpha_{k-1}^n$" src="form_39.png"/>. </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="legendre_8c_source.html#l00091">91</a> of file <a class="el" href="legendre_8c_source.html">legendre.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf0fb6a3993b3c956bea8fa75e3a71290"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void beta_al_all </td>
+ <td>(</td>
+ <td class="paramtype">R * </td>
+ <td class="paramname"><em>beta</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int </td>
+ <td class="paramname"><em>N</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\beta_{k-1}^n$" src="form_42.png"/> of associated Legendre functions for <img class="formulaInl" alt="$k,n = 0,1,\ldots,N$" src="form_40.png"/>. </p>
+<ul>
+<li>beta A pointer to an array of doubles of size <img class="formulaInl" alt="$(N+1)^2$" src="form_41.png"/> where the coefficients will be stored such that beta[n+(N+1)+k] = <img class="formulaInl" alt="$\beta_{k-1}^n$" src="form_42.png"/>. </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="legendre_8c_source.html#l00100">100</a> of file <a class="el" href="legendre_8c_source.html">legendre.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga88de851c8f9a4c042ad101cb4fb8c51d"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void gamma_al_all </td>
+ <td>(</td>
+ <td class="paramtype">R * </td>
+ <td class="paramname"><em>gamma</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int </td>
+ <td class="paramname"><em>N</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\gamma_{k-1}^n$" src="form_43.png"/> of associated Legendre functions for <img class="formulaInl" alt="$k,n = 0,1,\ldots,N$" src="form_40.png"/>. </p>
+<ul>
+<li>beta A pointer to an array of doubles of size <img class="formulaInl" alt="$(N+1)^2$" src="form_41.png"/> where the coefficients will be stored such that gamma[n+(N+1)+k] = <img class="formulaInl" alt="$\gamma_{k-1}^n$" src="form_43.png"/>. </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="legendre_8c_source.html#l00109">109</a> of file <a class="el" href="legendre_8c_source.html">legendre.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac5f2f8c36dc4f8ca65f058af6491f163"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void eval_al </td>
+ <td>(</td>
+ <td class="paramtype">R * </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">R * </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int </td>
+ <td class="paramname"><em>size</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int </td>
+ <td class="paramname"><em>k</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">R * </td>
+ <td class="paramname"><em>alpha</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">R * </td>
+ <td class="paramname"><em>beta</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">R * </td>
+ <td class="paramname"><em>gamma</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Evaluates an associated Legendre polynomials <img class="formulaInl" alt="$P_k^n(x,c)$" src="form_44.png"/> using the Clenshaw-algorithm. </p>
+<ul>
+<li>x A pointer to an array of nodes where the function is to be evaluated </li>
+<li>y A pointer to an array where the function values are returned </li>
+<li>size The length of x and y </li>
+<li>k The index <img class="formulaInl" alt="$k$" src="form_45.png"/> </li>
+<li>alpha A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\alpha_c^n,\ldots,\alpha_{c+k}^n$" src="form_46.png"/> </li>
+<li>beta A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\beta_c^n,\ldots,\beta_{c+k}^n$" src="form_47.png"/> </li>
+<li>gamma A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\gamma_c^n,\ldots,\gamma_{c+k}^n$" src="form_48.png"/> </li>
+</ul>
+
+<p>Definition at line <a class="el" href="legendre_8c_source.html#l00118">118</a> of file <a class="el" href="legendre_8c_source.html">legendre.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1bc5682379de94e87031afa38e02675d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int eval_al_thresh </td>
+ <td>(</td>
+ <td class="paramtype">R * </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">R * </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int </td>
+ <td class="paramname"><em>size</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const int </td>
+ <td class="paramname"><em>k</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">R * </td>
+ <td class="paramname"><em>alpha</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">R * </td>
+ <td class="paramname"><em>beta</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">R * </td>
+ <td class="paramname"><em>gamma</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">R </td>
+ <td class="paramname"><em>threshold</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Evaluates an associated Legendre polynomials <img class="formulaInl" alt="$P_k^n(x,c)$" src="form_44.png"/> using the Clenshaw-algorithm if it no exceeds a given threshold. </p>
+<ul>
+<li>x A pointer to an array of nodes where the function is to be evaluated </li>
+<li>y A pointer to an array where the function values are returned </li>
+<li>size The length of x and y </li>
+<li>k The index <img class="formulaInl" alt="$k$" src="form_45.png"/> </li>
+<li>alpha A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\alpha_c^n,\ldots,\alpha_{c+k}^n$" src="form_46.png"/> </li>
+<li>beta A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\beta_c^n,\ldots,\beta_{c+k}^n$" src="form_47.png"/> </li>
+<li>gamma A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\gamma_c^n,\ldots,\gamma_{c+k}^n$" src="form_48.png"/> </li>
+<li>threshold The threshold </li>
+</ul>
+
+<p>Definition at line <a class="el" href="legendre_8c_source.html#l00163">163</a> of file <a class="el" href="legendre_8c_source.html">legendre.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga47209b28b6561fca7349ed8afa5f9656"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void c2e </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structnfsft__plan.html">nfsft_plan</a> * </td>
+ <td class="paramname"><em>plan</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Converts coefficients <img class="formulaInl" alt="$\left(b_k^n\right)_{k=0}^M$" src="form_50.png"/> with <img class="formulaInl" alt="$M \in \mathbb{N}_0$" src="form_36.png"/>, <img class="formulaInl" alt="$-M \le n \le M$" src="form_51.png"/> from a linear combination of Chebyshev polynomials </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ f(\cos\vartheta) = \sum_{k=0}^{2\lfloor\frac{M}{2}\rfloor} a_k (\sin\vartheta)^{n\;\mathrm{mod}\;2} T_k(\cos\vartheta) \]" src="form_52.png"/>
+</p>
+<p> to coefficients <img class="formulaInl" alt="$\left(c_k^n\right)_{k=0}^M$" src="form_53.png"/> matching the representation by complex exponentials </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ f(\cos\vartheta) = \sum_{k=-M}^{M} c_k \mathrm{e}^{\mathrm{i}k\vartheta} \]" src="form_54.png"/>
+</p>
+<p> for each order <img class="formulaInl" alt="$n=-M,\ldots,M$" src="form_55.png"/>. </p>
+<ul>
+<li>plan The <code><a class="el" href="structnfsft__plan.html">nfsft_plan</a></code> containing the coefficients <img class="formulaInl" alt="$\left(b_k^n\right)_{k=0,\ldots,M;n=-M,\ldots,M}$" src="form_56.png"/></li>
+</ul>
+<dl class="section remark"><dt>Remarks:</dt><dd>The transformation is computed in place.</dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="nfsft_8c_source.html#l00111">111</a> of file <a class="el" href="nfsft_8c_source.html">nfsft.c</a>.</p>
+
+<p>References <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::f_hat_intern</a>, and <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::N</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga0e033457136bc0ecb18bb57d3ee5aa37"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void c2e_transposed </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structnfsft__plan.html">nfsft_plan</a> * </td>
+ <td class="paramname"><em>plan</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Transposed version of the function <a class="el" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656">c2e</a>. </p>
+<ul>
+<li>plan The <code><a class="el" href="structnfsft__plan.html">nfsft_plan</a></code> containing the coefficients <img class="formulaInl" alt="$\left(c_k^n\right)_{k=-M,\ldots,M;n=-M,\ldots,M}$" src="form_57.png"/></li>
+</ul>
+<dl class="section remark"><dt>Remarks:</dt><dd>The transformation is computed in place.</dd></dl>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="nfsft_8c_source.html#l00189">189</a> of file <a class="el" href="nfsft_8c_source.html">nfsft.c</a>.</p>
+
+<p>References <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::f_hat</a>, and <a class="el" href="nfft3_8h_source.html#l00551">nfsft_plan::N</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="ga0af81d81e1b436949ddc46dbd27346e5"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structnfsft__wisdom.html">nfsft_wisdom</a> wisdom = {false,0U,-1,-1,0,0,0,0,0}</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>The global wisdom structure for precomputed data. </p>
+<p><code>wisdom.initialized</code> is set to <code>false</code> and <code>wisdom.flags</code> is set to <code>0U</code>.</p>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition at line <a class="el" href="nfsft_8c_source.html#l00087">87</a> of file <a class="el" href="nfsft_8c_source.html">nfsft.c</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/images/logo.png b/doc/api/html/images/logo.png
new file mode 100644
index 0000000..b8511af
Binary files /dev/null and b/doc/api/html/images/logo.png differ
diff --git a/doc/api/html/images/sphere.png b/doc/api/html/images/sphere.png
new file mode 100644
index 0000000..42612e1
Binary files /dev/null and b/doc/api/html/images/sphere.png differ
diff --git a/doc/api/html/include_2api_8h_source.html b/doc/api/html/include_2api_8h_source.html
new file mode 100644
index 0000000..d5ea22b
--- /dev/null
+++ b/doc/api/html/include_2api_8h_source.html
@@ -0,0 +1,77 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - api.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">include/api.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: infft.h 3483 2010-04-23 19:02:34Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#ifndef __API_H__</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span><span class="preprocessor">#define __API_H__</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#endif </span><span class="comment">/* __API_H__ */</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/index.html b/doc/api/html/index.html
new file mode 100644
index 0000000..c69ddc4
--- /dev/null
+++ b/doc/api/html/index.html
@@ -0,0 +1,40 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Main Page
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li class="current"><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">NFFT Documentation</div> </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/infft_8h_source.html b/doc/api/html/infft_8h_source.html
new file mode 100644
index 0000000..aab7d6b
--- /dev/null
+++ b/doc/api/html/infft_8h_source.html
@@ -0,0 +1,1430 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - infft.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">infft.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: infft.h 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">/* NFFT internal header file */</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#ifndef __INFFT_H__</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"></span><span class="preprocessor">#define __INFFT_H__</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"></span><span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <stdlib.h></span> <span class="comment">/* size_t */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include <stdarg.h></span> <span class="comment">/* va_list */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include <stddef.h></span> <span class="comment">/* ptrdiff_t */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#if HAVE_SYS_TYPES_H</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor"></span><span class="preprocessor">#include <sys/types.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#if HAVE_STDINT_H</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor"></span><span class="preprocessor">#include <stdint.h></span> <span class="comment">/* uintptr_t, maybe */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#if HAVE_INTTYPES_H</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"></span><span class="preprocessor">#include <inttypes.h></span> <span class="comment">/* uintptr_t, maybe */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#include <fftw3.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#include "ticks.h"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment">/* Determine precision and name-mangling scheme. */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#define CONCAT(prefix, name) prefix ## name</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor"></span><span class="preprocessor">#if defined(NFFT_SINGLE)</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">float</span> R;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">typedef</span> <span class="keywordtype">float</span> _Complex C;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#define Y(name) CONCAT(nfftf_,name)</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"></span><span class="preprocessor">#define Z(name) CONCAT(fftwf_,name)</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT(name) CONCAT(nfsftf_,name)</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(NFFT_LDOUBLE)</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> R;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">typedef</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex C;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor">#define Y(name) CONCAT(nfftl_,name)</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor"></span><span class="preprocessor">#define Z(name) CONCAT(fftwl_,name)</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT(name) CONCAT(nfsftl_,name)</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">double</span> R;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">typedef</span> <span class="keywordtype">double</span> _Complex C;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">#define Y(name) CONCAT(nfft_,name)</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"></span><span class="preprocessor">#define Z(name) CONCAT(fftw_,name)</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT(name) CONCAT(nfsft_,name)</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor"></span><span class="preprocessor">#define X(name) Y(name)</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="preprocessor">#define STRINGIZEx(x) #x</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor"></span><span class="preprocessor">#define STRINGIZE(x) STRINGIZEx(x)</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor">#ifdef NFFT_LDOUBLE</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor"></span><span class="preprocessor"># define K(x) ((R) x##L)</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="preprocessor"></span><span class="preprocessor"># define K(x) ((R) x)</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor"></span><span class="preprocessor">#define DK(name, value) const R name = K(value)</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment">/* Integral type large enough to contain a stride (what ``int'' should have been</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment"> * in the first place) */</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">typedef</span> ptrdiff_t INT;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor">#define KPI K(3.1415926535897932384626433832795028841971693993751)</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor"></span><span class="preprocessor">#define K2PI K(6.2831853071795864769252867665590057683943387987502)</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor"></span><span class="preprocessor">#define KE K(2.7182818284590452353602874713526624977572470937000)</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor">#define IF(x,a,b) ((x)?(a):(b))</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor"></span><span class="preprocessor">#define MIN(a,b) (((a)<(b))?(a):(b))</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor"></span><span class="preprocessor">#define MAX(a,b) (((a)>(b))?(a):(b))</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="preprocessor"></span><span class="preprocessor">#define ABS(x) (((x)>K(0.0))?(x):(-(x)))</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor"></span><span class="preprocessor">#define SIGN(a) (((a)>=0)?1:-1)</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor"></span><span class="preprocessor">#define SIGN(a) (((a)>=0)?1:-1)</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor"></span><span class="preprocessor">#define SIGNF(a) IF((a)<K(0.0),K(-1.0),K(1.0))</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment">/* macros for window functions */</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor">#if defined(DIRAC_DELTA)</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="preprocessor"></span><span class="preprocessor"> #define PHI_HUT(k,d) K(1.0)</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="preprocessor"></span><span class="preprocessor"> #define PHI(x,d) IF(FABS((x)) < K(10E-8),K(1.0),K(0.0))</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="preprocessor"></span><span class="preprocessor"> #define WINDOW_HELP_INIT(d)</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="preprocessor"></span><span class="preprocessor"> #define WINDOW_HELP_FINALIZE</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="preprocessor"></span><span class="preprocessor"> #define WINDOW_HELP_ESTIMATE_m 0</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(GAUSSIAN)</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor"></span><span class="preprocessor"> #define PHI_HUT(k,d) ((R)EXP(-(POW(KPI*(k)/ths->n[d],K(2.0))*ths->b[d])))</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="preprocessor"></span><span class="preprocessor"> #define PHI(x,d) ((R)EXP(-POW((x)*((R)ths->n[d]),K(2.0)) / \</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="preprocessor"> ths->b[d])/SQRT(KPI*ths->b[d]))</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="preprocessor"></span><span class="preprocessor"> #define WINDOW_HELP_INIT \</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="preprocessor"> int WINDOW_idx; \</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor"> ths->b = (R*) Y(malloc)(ths->d*sizeof(R)); \</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="preprocessor"> for (WINDOW_idx = 0; WINDOW_idx < ths->d; WINDOW_idx++) \</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="preprocessor"> ths->b[WINDOW_idx]=(K(2.0)*ths->sigma[WINDOW_idx]) / \</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="preprocessor"> (K(2.0)*ths->sigma[WINDOW_idx] - K(1.0)) * (((R)ths->m) / KPI); \</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="preprocessor"> }</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="preprocessor"></span><span class="preprocessor"> #define WINDOW_HELP_FINALIZE {Y(free)(ths->b);}</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="preprocessor"></span><span class="preprocessor"> #define WINDOW_HELP_ESTIMATE_m 12</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(B_SPLINE)</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="preprocessor"></span><span class="preprocessor"> #define PHI_HUT(k,d) ((R)(((k) == 0) ? K(1.0) / ths->n[(d)] : \</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="preprocessor"> POW(SIN((k) * KPI / ths->n[(d)]) / ((k) * KPI / ths->n[(d)]), \</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="preprocessor"> K(2.0) * ths->m)/ths->n[(d)]))</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="preprocessor"></span><span class="preprocessor"> #define PHI(x,d) (Y(bspline)(2*ths->m,((x)*ths->n[(d)]) + \</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor"> (R)ths->m,ths->spline_coeffs) / ths->n[(d)])</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="preprocessor"></span><span class="preprocessor"> #define WINDOW_HELP_INIT \</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="preprocessor"> ths->spline_coeffs= (R*)Y(malloc)(2*ths->m*sizeof(R)); \</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor"> }</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="preprocessor"></span><span class="preprocessor"> #define WINDOW_HELP_FINALIZE {Y(free)(ths->spline_coeffs);}</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor"></span><span class="preprocessor"> #define WINDOW_HELP_ESTIMATE_m 11</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(SINC_POWER)</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="preprocessor"></span><span class="preprocessor"> #define PHI_HUT(k,d) (Y(bspline)(2 * ths->m, (K(2.0) * ths->m*(k)) / \</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="preprocessor"> ((K(2.0) * ths->sigma[(d)] - 1) * ths->n[(d)] / \</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="preprocessor"> ths->sigma[(d)]) + (R)ths->m, ths->spline_coeffs))</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="preprocessor"></span><span class="preprocessor"> #define PHI(x,d) ((R)(ths->n[(d)] / ths->sigma[(d)] * \</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="preprocessor"> (K(2.0) * ths->sigma[(d)] - K(1.0))/ (K(2.0)*ths->m) * \</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="preprocessor"> POW(Y(sinc)(KPI * ths->n[(d)] / ths->sigma[(d)] * (x) * \</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="preprocessor"> (K(2.0) * ths->sigma[(d)] - K(1.0)) / (K(2.0)*ths->m)) , 2*ths->m) / \</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor"> ths->n[(d)]))</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="preprocessor"></span><span class="preprocessor"> #define WINDOW_HELP_INIT \</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor"> ths->spline_coeffs= (R*)Y(malloc)(2 * ths->m * sizeof(R)); \</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor"> }</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor"></span><span class="preprocessor"> #define WINDOW_HELP_FINALIZE {Y(free)(ths->spline_coeffs);}</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="preprocessor"></span><span class="preprocessor"> #define WINDOW_HELP_ESTIMATE_m 9</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* Kaiser-Bessel is the default. */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="preprocessor"></span><span class="preprocessor"> #define PHI_HUT(k,d) ((R)Y(bessel_i0)(ths->m * SQRT(\</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="preprocessor"> POW((R)(ths->b[d]), K(2.0)) - POW(K(2.0) * KPI * (k) / ths->n[d], K(2.0)))))</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor"></span><span class="preprocessor"> #define PHI(x,d) ((R)((POW((R)(ths->m), K(2.0))\</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor"> -POW((x)*ths->n[d],K(2.0))) > 0)? \</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="preprocessor"> SINH(ths->b[d] * SQRT(POW((R)(ths->m),K(2.0)) - \</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="preprocessor"> POW((x)*ths->n[d],K(2.0))))/(KPI*SQRT(POW((R)(ths->m),K(2.0)) - \</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="preprocessor"> POW((x)*ths->n[d],K(2.0)))) : (((POW((R)(ths->m),K(2.0)) - \</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="preprocessor"> POW((x)*ths->n[d],K(2.0))) < 0)? SIN(ths->b[d] * \</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="preprocessor"> SQRT(POW(ths->n[d]*(x),K(2.0)) - POW((R)(ths->m), K(2.0)))) / \</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="preprocessor"> (KPI*SQRT(POW(ths->n[d]*(x),K(2.0)) - POW((R)(ths->m),K(2.0)))):K(1.0)))</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="preprocessor"></span><span class="preprocessor"> #define WINDOW_HELP_INIT \</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="preprocessor"> int WINDOW_idx; \</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor"> ths->b = (R*) Y(malloc)(ths->d*sizeof(R)); \</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="preprocessor"> for (WINDOW_idx = 0; WINDOW_idx < ths->d; WINDOW_idx++) \</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor"> ths->b[WINDOW_idx] = ((R)KPI*(K(2.0)-K(1.0) / ths->sigma[WINDOW_idx])); \</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor"> }</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor"></span><span class="preprocessor"> #define WINDOW_HELP_FINALIZE {Y(free)(ths->b);}</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor"></span><span class="preprocessor"> #define WINDOW_HELP_ESTIMATE_m 6</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor">#if defined(NFFT_LDOUBLE)</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COPYSIGNL == 0</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> copysignl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NEXTAFTERL == 0</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> nextafterl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NANL == 0</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> nanl(<span class="keyword">const</span> <span class="keywordtype">char</span> *tag);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CEILL == 0</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> ceill(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FLOORL == 0</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> floorl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NEARBYINTL == 0</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> nearbyintl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_RINTL == 0</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> rintl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ROUNDL == 0</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> roundl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LRINTL == 0</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> lrintl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LROUNDL == 0</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> lroundl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LLRINTL == 0</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> llrintl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LLROUNDL == 0</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> llroundl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TRUNCL == 0</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> truncl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMODL == 0</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> fmodl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_REMAINDERL == 0</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> remainderl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_REMQUOL == 0</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> remquol(<span class="keywordtype">long</span> <span class="keywordtype">double</span> x, <span class="keywordtype">long</span> <span class="keywordtype">double</span> y, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FDIML == 0</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> fdiml(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMAXL == 0</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> fmaxl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMINL == 0</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> fminl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMAL == 0</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> fmal(<span class="keywordtype">long</span> <span class="keywordtype">double</span> x, <span class="keywordtype">long</span> <span class="keywordtype">double</span> y, <span class="keywordtype">long</span> <span class="keywordtype">double</span> z);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FABSL == 0</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> fabsl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SQRTL == 0</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> sqrtl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CBRTL == 0</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> cbrtl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_HYPOTL == 0</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> hypotl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXPL == 0</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> expl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXP2L == 0</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> exp2l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXPM1L == 0</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> expm1l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOGL == 0</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> logl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG2L == 0</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> log2l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG10L == 0</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> log10l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG1PL == 0</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> log1pl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOGBL == 0</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> logbl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ILOGBL == 0</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">int</span> ilogbl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_MODFL == 0</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> modfl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FREXPL == 0</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> frexpl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LDEXPL == 0</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> ldexpl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SCALBNL == 0</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> scalbnl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SCALBLNL == 0</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> scalblnl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_POWL == 0</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> powl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COSL == 0</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> cosl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SINL == 0</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> sinl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TANL == 0</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> tanl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COSHL == 0</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> coshl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SINHL == 0</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> sinhl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TANHL == 0</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> tanhl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ACOSL == 0</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> acosl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ASINL == 0</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> asinl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATANL == 0</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> atanl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATAN2L == 0</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> atan2l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ACOSHL == 0</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> acoshl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ASINHL == 0</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> asinhl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATANHL == 0</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> atanhl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TGAMMAL == 0</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> tgammal(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LGAMMAL == 0</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> lgammal(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_J0L == 0</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> j0l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_J1L == 0</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> j1l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_JNL == 0</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> jnl(<span class="keywordtype">int</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_Y0L == 0</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> y0l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_Y1L == 0</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> y1l(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_YNL == 0</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> ynl(<span class="keywordtype">int</span>, <span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ERFL == 0</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> erfl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ERFCL == 0</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> erfcl(<span class="keywordtype">long</span> <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CREALL == 0</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> creall(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CIMAGL == 0</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> cimagl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CABSL == 0</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> cabsl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CARGL == 0</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> cargl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CONJL == 0</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex conjl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CPROJL == 0</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex cprojl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSQRTL == 0</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex csqrtl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CEXPL == 0</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex cexpl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CLOGL == 0</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex clogl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CPOWL == 0</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex cpowl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z, <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex w);</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSINL == 0</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex csinl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CCOSL == 0</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex ccosl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CTANL == 0</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex ctanl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CASINL == 0</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex casinl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CACOSL == 0</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex cacosl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CATANL == 0</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex catanl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSINHL == 0</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex csinhl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CCOSHL == 0</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex ccoshl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CTANHL == 0</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex ctanhl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CASINHL == 0</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex casinhl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CACOSHL == 0</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex cacoshl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CATANHL == 0</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex catanhl(<span class="keywordtype">long</span> <span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="preprocessor"></span><span class="preprocessor">#define COPYSIGN copysignl</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="preprocessor"></span><span class="preprocessor">#define NEXTAFTER nextafterl</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="preprocessor"></span><span class="preprocessor">#define MKNAN nanl</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="preprocessor"></span><span class="preprocessor">#define CEIL ceill</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="preprocessor"></span><span class="preprocessor">#define FLOOR floorl</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="preprocessor"></span><span class="preprocessor">#define NEARBYINT nearbyintl</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="preprocessor"></span><span class="preprocessor">#define RINT rintl</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="preprocessor"></span><span class="preprocessor">#define ROUND roundl</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="preprocessor"></span><span class="preprocessor">#define LRINT lrintl</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="preprocessor"></span><span class="preprocessor">#define LROUND lroundl</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="preprocessor"></span><span class="preprocessor">#define LLRINT llrintl</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="preprocessor"></span><span class="preprocessor">#define LLROUND llroundl</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="preprocessor"></span><span class="preprocessor">#define TRUNC truncl</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="preprocessor"></span><span class="preprocessor">#define FMOD fmodl</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="preprocessor"></span><span class="preprocessor">#define REMAINDER remainderl</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="preprocessor"></span><span class="preprocessor">#define REMQUO remquol</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="preprocessor"></span><span class="preprocessor">#define FDIM fdiml</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="preprocessor"></span><span class="preprocessor">#define FMAX fmaxl</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="preprocessor"></span><span class="preprocessor">#define FMIN fminl</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="preprocessor"></span><span class="preprocessor">#define FFMA fmal</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="preprocessor"></span><span class="preprocessor">#define FABS fabsl</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="preprocessor"></span><span class="preprocessor">#define SQRT sqrtl</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="preprocessor"></span><span class="preprocessor">#define CBRT cbrtl</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="preprocessor"></span><span class="preprocessor">#define HYPOT hypotl</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="preprocessor"></span><span class="preprocessor">#define EXP expl</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="preprocessor"></span><span class="preprocessor">#define EXP2 exp2l</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="preprocessor"></span><span class="preprocessor">#define EXPM1 expm1l</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG logl</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG2 log2l</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG10 log10l</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG1P log1pl</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor"></span><span class="preprocessor">#define LOGB logbl</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="preprocessor"></span><span class="preprocessor">#define ILOGB ilogbl</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="preprocessor"></span><span class="preprocessor">#define MODF modfl</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="preprocessor"></span><span class="preprocessor">#define FREXP frexpl</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="preprocessor"></span><span class="preprocessor">#define LDEXP ldexpl</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="preprocessor"></span><span class="preprocessor">#define SCALBN scalbnl</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor"></span><span class="preprocessor">#define SCALBLN scalblnl</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="preprocessor"></span><span class="preprocessor">#define POW powl</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="preprocessor"></span><span class="preprocessor">#define COS cosl</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor"></span><span class="preprocessor">#define SIN sinl</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="preprocessor"></span><span class="preprocessor">#define TAN tanl</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="preprocessor"></span><span class="preprocessor">#define COSH coshl</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="preprocessor"></span><span class="preprocessor">#define SINH sinhl</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="preprocessor"></span><span class="preprocessor">#define TANH tanhl</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor"></span><span class="preprocessor">#define ACOS acosl</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="preprocessor"></span><span class="preprocessor">#define ASIN asinl</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="preprocessor"></span><span class="preprocessor">#define ATAN atanl</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="preprocessor"></span><span class="preprocessor">#define ATAN2 atan2l</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor"></span><span class="preprocessor">#define ACOSH acoshl</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor"></span><span class="preprocessor">#define ASINH asinhl</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor"></span><span class="preprocessor">#define ATANH atanhl</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="preprocessor"></span><span class="preprocessor">#define TGAMMA tgammal</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="preprocessor"></span><span class="preprocessor">#define LGAMMA lgammal</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="preprocessor"></span><span class="preprocessor">#define J0 j0l</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="preprocessor"></span><span class="preprocessor">#define J1 j1l</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor"></span><span class="preprocessor">#define JN jnl</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor"></span><span class="preprocessor">#define Y0 y0l</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="preprocessor"></span><span class="preprocessor">#define Y1 y1l</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="preprocessor"></span><span class="preprocessor">#define YN ynl</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="preprocessor"></span><span class="preprocessor">#define ERF erfl</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="preprocessor"></span><span class="preprocessor">#define ERFC erfcl</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="preprocessor"></span><span class="preprocessor">#define CREAL creall</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="preprocessor"></span><span class="preprocessor">#define CIMAG cimagl</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="preprocessor"></span><span class="preprocessor">#define CABS cabsl</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="preprocessor"></span><span class="preprocessor">#define CARG cargl</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="preprocessor"></span><span class="preprocessor">#define CONJ conjl</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="preprocessor"></span><span class="preprocessor">#define CPROJ cprojl</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="preprocessor"></span><span class="preprocessor">#define CSQRT csqrtl</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="preprocessor"></span><span class="preprocessor">#define CEXP cexpl</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="preprocessor"></span><span class="preprocessor">#define CLOG clogl</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="preprocessor"></span><span class="preprocessor">#define CPOW cpowl</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="preprocessor"></span><span class="preprocessor">#define CSIN csinl</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor"></span><span class="preprocessor">#define CCOS ccosl</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="preprocessor"></span><span class="preprocessor">#define CTAN ctanl</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="preprocessor"></span><span class="preprocessor">#define CASIN casinl</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="preprocessor"></span><span class="preprocessor">#define CACOS cacosl</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="preprocessor"></span><span class="preprocessor">#define CATAN catanl</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="preprocessor"></span><span class="preprocessor">#define CSINH csinhl</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="preprocessor"></span><span class="preprocessor">#define CCOSH ccoshl</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="preprocessor"></span><span class="preprocessor">#define CTANH ctanhl</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="preprocessor"></span><span class="preprocessor">#define CASINH casinhl</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="preprocessor"></span><span class="preprocessor">#define CACOSH cacoshl</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="preprocessor"></span><span class="preprocessor">#define CATANH catanhl</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(NFFT_SINGLE)</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COPYSIGNF == 0</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> copysignf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NEXTAFTERF == 0</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> nextafterf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NANF == 0</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> nanf(<span class="keyword">const</span> <span class="keywordtype">char</span> *tag);</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CEILF == 0</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> ceilf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FLOORF == 0</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> floorf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NEARBYINTF == 0</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> nearbyintf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_RINTF == 0</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> rintf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ROUNDF == 0</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> roundf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LRINTF == 0</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> lrintf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LROUNDF == 0</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> lroundf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LLRINTF == 0</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> llrintf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LLROUNDF == 0</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> llroundf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TRUNCF == 0</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> truncf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMODF == 0</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> fmodf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_REMAINDERF == 0</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> remainderf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_REMQUOF == 0</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> remquof(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FDIMF == 0</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> fdimf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMAXF == 0</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> fmaxf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMINF == 0</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> fminf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMAF == 0</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> fmaf(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FABSF == 0</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> fabsf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SQRTF == 0</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> sqrtf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CBRTF == 0</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> cbrtf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_HYPOTF == 0</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> hypotf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXPF == 0</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> expf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXP2F == 0</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> exp2f(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXPM1F == 0</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> expm1f(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOGF == 0</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> logf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG2F == 0</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> log2f(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG10F == 0</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> log10f(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG1PF == 0</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> log1pf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOGBF == 0</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> logbf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ILOGBF == 0</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">int</span> ilogbf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_MODFF == 0</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> modff(<span class="keywordtype">float</span>, <span class="keywordtype">float</span> *);</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FREXPF == 0</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> frexpf(<span class="keywordtype">float</span>, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LDEXPF == 0</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> ldexpf(<span class="keywordtype">float</span>, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SCALBNF == 0</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> scalbnf(<span class="keywordtype">float</span>, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SCALBLNF == 0</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> scalblnf(<span class="keywordtype">float</span>, <span class="keywordtype">long</span> <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_POWF == 0</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> powf(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COSF == 0</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> cosf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SINF == 0</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> sinf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TANF == 0</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> tanf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COSHF == 0</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> coshf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SINHF == 0</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> sinhf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TANHF == 0</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> tanhf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ACOSF == 0</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> acosf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ASINF == 0</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> asinf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATANF == 0</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> atanf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATAN2F == 0</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> atan2f(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ACOSHF == 0</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> acoshf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ASINHF == 0</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> asinhf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATANHF == 0</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> atanhf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TGAMMAF == 0</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> tgammaf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LGAMMAF == 0</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> lgammaf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_J0F == 0</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> j0f(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_J1F == 0</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> j1f(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_JNF == 0</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> jnf(<span class="keywordtype">int</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_Y0F == 0</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> y0f(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_Y1F == 0</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> y1f(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_YNF == 0</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> ynf(<span class="keywordtype">int</span>, <span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ERFF == 0</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> erff(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ERFCF == 0</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> erfcf(<span class="keywordtype">float</span>);</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CREALF == 0</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> crealf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CIMAGF == 0</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> cimagf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CABSF == 0</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> cabsf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CARGF == 0</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> cargf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CONJF == 0</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex conjf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CPROJF == 0</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex cprojf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSQRTF == 0</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex csqrtf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CEXPF == 0</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex cexpf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CLOGF == 0</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex clogf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CPOWF == 0</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex cpowf(<span class="keywordtype">float</span> _Complex z, <span class="keywordtype">float</span> _Complex w);</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSINF == 0</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex csinf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CCOSF == 0</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex ccosf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CTANF == 0</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex ctanf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CASINF == 0</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex casinf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CACOSF == 0</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex cacosf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CATANF == 0</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex catanf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSINHF == 0</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex csinhf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CCOSHF == 0</span></div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex ccoshf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CTANHF == 0</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex ctanhf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CASINHF == 0</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex casinhf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CACOSHF == 0</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex cacoshf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CATANHF == 0</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">float</span> _Complex catanhf(<span class="keywordtype">float</span> _Complex z);</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="preprocessor"></span><span class="preprocessor">#define COPYSIGN copysignf</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="preprocessor"></span><span class="preprocessor">#define NEXTAFTER nextafterf</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="preprocessor"></span><span class="preprocessor">#define MKNAN nanf</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="preprocessor"></span><span class="preprocessor">#define CEIL ceilf</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="preprocessor"></span><span class="preprocessor">#define FLOOR floorf</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="preprocessor"></span><span class="preprocessor">#define NEARBYINT nearbyintf</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="preprocessor"></span><span class="preprocessor">#define RINT rintf</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="preprocessor"></span><span class="preprocessor">#define ROUND roundf</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="preprocessor"></span><span class="preprocessor">#define LRINT lrintf</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="preprocessor"></span><span class="preprocessor">#define LROUND lroundf</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="preprocessor"></span><span class="preprocessor">#define LLRINT llrintf</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="preprocessor"></span><span class="preprocessor">#define LLROUND llroundf</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <span class="preprocessor"></span><span class="preprocessor">#define TRUNC truncf</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <span class="preprocessor"></span><span class="preprocessor">#define FMOD fmodf</span></div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="preprocessor"></span><span class="preprocessor">#define REMAINDER remainderf</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> <span class="preprocessor"></span><span class="preprocessor">#define REMQUO remquof</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="preprocessor"></span><span class="preprocessor">#define FDIM fdimf</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="preprocessor"></span><span class="preprocessor">#define FMAX fmaxf</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="preprocessor"></span><span class="preprocessor">#define FMIN fminf</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="preprocessor"></span><span class="preprocessor">#define FFMA fmaf</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="preprocessor"></span><span class="preprocessor">#define FABS fabsf</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="preprocessor"></span><span class="preprocessor">#define SQRT sqrtf</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> <span class="preprocessor"></span><span class="preprocessor">#define CBRT cbrtf</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> <span class="preprocessor"></span><span class="preprocessor">#define HYPOT hypotf</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="preprocessor"></span><span class="preprocessor">#define EXP expf</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="preprocessor"></span><span class="preprocessor">#define EXP2 exp2f</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> <span class="preprocessor"></span><span class="preprocessor">#define EXPM1 expm1f</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG logf</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG2 log2f</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG10 log10f</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG1P log1pf</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="preprocessor"></span><span class="preprocessor">#define LOGB logbf</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="preprocessor"></span><span class="preprocessor">#define ILOGB ilogbf</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="preprocessor"></span><span class="preprocessor">#define MODF modff</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="preprocessor"></span><span class="preprocessor">#define FREXP frexpf</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> <span class="preprocessor"></span><span class="preprocessor">#define LDEXP ldexpf</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="preprocessor"></span><span class="preprocessor">#define SCALBN scalbnf</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="preprocessor"></span><span class="preprocessor">#define SCALBLN scalblnf</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> <span class="preprocessor"></span><span class="preprocessor">#define POW powf</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="preprocessor"></span><span class="preprocessor">#define COS cosf</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="preprocessor"></span><span class="preprocessor">#define SIN sinf</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> <span class="preprocessor"></span><span class="preprocessor">#define TAN tanf</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="preprocessor"></span><span class="preprocessor">#define COSH coshf</span></div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="preprocessor"></span><span class="preprocessor">#define SINH sinhf</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> <span class="preprocessor"></span><span class="preprocessor">#define TANH tanhf</span></div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="preprocessor"></span><span class="preprocessor">#define ACOS acosf</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> <span class="preprocessor"></span><span class="preprocessor">#define ASIN asinf</span></div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> <span class="preprocessor"></span><span class="preprocessor">#define ATAN atanf</span></div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> <span class="preprocessor"></span><span class="preprocessor">#define ATAN2 atan2f</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> <span class="preprocessor"></span><span class="preprocessor">#define ACOSH acoshf</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="preprocessor"></span><span class="preprocessor">#define ASINH asinhf</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> <span class="preprocessor"></span><span class="preprocessor">#define ATANH atanhf</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> <span class="preprocessor"></span><span class="preprocessor">#define TGAMMA tgammaf</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> <span class="preprocessor"></span><span class="preprocessor">#define LGAMMA lgammaf</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="preprocessor"></span><span class="preprocessor">#define J0 j0f</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> <span class="preprocessor"></span><span class="preprocessor">#define J1 j1f</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="preprocessor"></span><span class="preprocessor">#define JN jnf</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="preprocessor"></span><span class="preprocessor">#define Y0 y0f</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="preprocessor"></span><span class="preprocessor">#define Y1 y1f</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="preprocessor"></span><span class="preprocessor">#define YN ynf</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> <span class="preprocessor"></span><span class="preprocessor">#define ERF erff</span></div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="preprocessor"></span><span class="preprocessor">#define ERFC erfcf</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="preprocessor"></span><span class="preprocessor">#define CREAL crealf</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> <span class="preprocessor"></span><span class="preprocessor">#define CIMAG cimagf</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> <span class="preprocessor"></span><span class="preprocessor">#define CABS cabsf</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> <span class="preprocessor"></span><span class="preprocessor">#define CARG cargf</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="preprocessor"></span><span class="preprocessor">#define CONJ conjf</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> <span class="preprocessor"></span><span class="preprocessor">#define CPROJ cprojf</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> <span class="preprocessor"></span><span class="preprocessor">#define CSQRT csqrtf</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="preprocessor"></span><span class="preprocessor">#define CEXP cexpf</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="preprocessor"></span><span class="preprocessor">#define CLOG clogf</span></div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="preprocessor"></span><span class="preprocessor">#define CPOW cpowf</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <span class="preprocessor"></span><span class="preprocessor">#define CSIN csinf</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> <span class="preprocessor"></span><span class="preprocessor">#define CCOS ccosf</span></div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> <span class="preprocessor"></span><span class="preprocessor">#define CTAN ctanf</span></div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> <span class="preprocessor"></span><span class="preprocessor">#define CASIN casinf</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="preprocessor"></span><span class="preprocessor">#define CACOS cacosf</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> <span class="preprocessor"></span><span class="preprocessor">#define CATAN catanf</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="preprocessor"></span><span class="preprocessor">#define CSINH csinhf</span></div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> <span class="preprocessor"></span><span class="preprocessor">#define CCOSH ccoshf</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="preprocessor"></span><span class="preprocessor">#define CTANH ctanhf</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> <span class="preprocessor"></span><span class="preprocessor">#define CASINH casinhf</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="preprocessor"></span><span class="preprocessor">#define CACOSH cacoshf</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> <span class="preprocessor"></span><span class="preprocessor">#define CATANH catanhf</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COPYSIGN == 0</span></div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> copysign(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NEXTAFTER == 0</span></div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> nextafter(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NAN == 0</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> nan(<span class="keyword">const</span> <span class="keywordtype">char</span> *tag);</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CEIL == 0</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> ceil(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FLOOR == 0</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> floor(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_NEARBYINT == 0</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> nearbyint(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_RINT == 0</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> rint(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ROUND == 0</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> round(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LRINT == 0</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> lrint(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LROUND == 0</span></div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> lround(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LLRINT == 0</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> llrint(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LLROUND == 0</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> llround(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TRUNC == 0</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> trunc(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMOD == 0</span></div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> fmod(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_REMAINDER == 0</span></div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> remainder(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_REMQUO == 0</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> remquo(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FDIM == 0</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> fdim(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMAX == 0</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> fmax(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMIN == 0</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> fmin(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FMA == 0</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> fma(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y, <span class="keywordtype">double</span> z);</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FABS == 0</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> fabs(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SQRT == 0</span></div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> sqrt(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CBRT == 0</span></div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> cbrt(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_HYPOT == 0</span></div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> hypot(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXP == 0</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> exp(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXP2 == 0</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> exp2(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_EXPM1 == 0</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> expm1(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG == 0</span></div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> log(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG2 == 0</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> log2(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG10 == 0</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> log10(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOG1P == 0</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> log1p(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LOGB == 0</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> logb(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ILOGB == 0</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">int</span> ilogb(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_MODF == 0</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> modf(<span class="keywordtype">double</span>, <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_FREXP == 0</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> frexp(<span class="keywordtype">double</span>, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LDEXP == 0</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> ldexp(<span class="keywordtype">double</span>, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SCALBN == 0</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> scalbn(<span class="keywordtype">double</span>, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SCALBLN == 0</span></div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> scalbln(<span class="keywordtype">double</span>, <span class="keywordtype">long</span> <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_POW == 0</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> pow(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COS == 0</span></div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> cos(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SIN == 0</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> sin(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TAN == 0</span></div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> tan(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_COSH == 0</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> cosh(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SINH == 0</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> sinh(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TANH == 0</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> tanh(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ACOS == 0</span></div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> acos(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ASIN == 0</span></div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> asin(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATAN == 0</span></div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> atan(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATAN2 == 0</span></div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> atan2(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ACOSH == 0</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> acosh(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ASINH == 0</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> asinh(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ATANH == 0</span></div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> atanh(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_TGAMMA == 0</span></div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> tgamma(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_LGAMMA == 0</span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> lgamma(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_J0 == 0</span></div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> j0(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_J1 == 0</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> j1(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_JN == 0</span></div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> jn(<span class="keywordtype">int</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_Y0 == 0</span></div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> y0(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_Y1 == 0</span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> y1(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_YN == 0</span></div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> yn(<span class="keywordtype">int</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ERF == 0</span></div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> erf(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_ERFC == 0</span></div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> erfc(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CREAL == 0</span></div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> creal(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CIMAG == 0</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> cimag(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CABS == 0</span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> cabs(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CARG == 0</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> carg(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CONJ == 0</span></div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex conj(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CPROJ == 0</span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex cproj(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSQRT == 0</span></div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex csqrt(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CEXP == 0</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex cexp(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CLOG == 0</span></div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex clog(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CPOW == 0</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex cpow(<span class="keywordtype">double</span> _Complex z, <span class="keywordtype">double</span> _Complex w);</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSIN == 0</span></div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex csin(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CCOS == 0</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex ccos(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CTAN == 0</span></div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex ctan(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CASIN == 0</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex casin(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CACOS == 0</span></div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex cacos(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CATAN == 0</span></div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex catan(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CSINH == 0</span></div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex csinh(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CCOSH == 0</span></div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex ccosh(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CTANH == 0</span></div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex ctanh(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CASINH == 0</span></div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex casinh(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CACOSH == 0</span></div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex cacosh(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_CATANH == 0</span></div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">double</span> _Complex catanh(<span class="keywordtype">double</span> _Complex z);</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> <span class="preprocessor"></span><span class="preprocessor">#define COPYSIGN copysign</span></div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <span class="preprocessor"></span><span class="preprocessor">#define NEXTAFTER nextafter</span></div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> <span class="preprocessor"></span><span class="preprocessor">#define MKNAN nan</span></div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> <span class="preprocessor"></span><span class="preprocessor">#define CEIL ceil</span></div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> <span class="preprocessor"></span><span class="preprocessor">#define FLOOR floor</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> <span class="preprocessor"></span><span class="preprocessor">#define NEARBYINT nearbyint</span></div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="preprocessor"></span><span class="preprocessor">#define RINT rint</span></div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> <span class="preprocessor"></span><span class="preprocessor">#define ROUND round</span></div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="preprocessor"></span><span class="preprocessor">#define LRINT lrint</span></div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> <span class="preprocessor"></span><span class="preprocessor">#define LROUND lround</span></div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> <span class="preprocessor"></span><span class="preprocessor">#define LLRINT llrint</span></div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> <span class="preprocessor"></span><span class="preprocessor">#define LLROUND llround</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="preprocessor"></span><span class="preprocessor">#define TRUNC trunc</span></div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="preprocessor"></span><span class="preprocessor">#define FMOD fmod</span></div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> <span class="preprocessor"></span><span class="preprocessor">#define REMAINDER remainder</span></div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> <span class="preprocessor"></span><span class="preprocessor">#define REMQUO remquo</span></div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> <span class="preprocessor"></span><span class="preprocessor">#define FDIM fdim</span></div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="preprocessor"></span><span class="preprocessor">#define FMAX fmax</span></div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <span class="preprocessor"></span><span class="preprocessor">#define FMIN fmin</span></div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <span class="preprocessor"></span><span class="preprocessor">#define FFMA fma</span></div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> <span class="preprocessor"></span><span class="preprocessor">#define FABS fabs</span></div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> <span class="preprocessor"></span><span class="preprocessor">#define SQRT sqrt</span></div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> <span class="preprocessor"></span><span class="preprocessor">#define CBRT cbrt</span></div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> <span class="preprocessor"></span><span class="preprocessor">#define HYPOT hypot</span></div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="preprocessor"></span><span class="preprocessor">#define EXP exp</span></div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> <span class="preprocessor"></span><span class="preprocessor">#define EXP2 exp2</span></div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> <span class="preprocessor"></span><span class="preprocessor">#define EXPM1 expm1</span></div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG log</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG2 log2</span></div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG10 log10</span></div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> <span class="preprocessor"></span><span class="preprocessor">#define LOG1P log1p</span></div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="preprocessor"></span><span class="preprocessor">#define LOGB logb</span></div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="preprocessor"></span><span class="preprocessor">#define ILOGB ilogb</span></div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> <span class="preprocessor"></span><span class="preprocessor">#define MODF modf</span></div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <span class="preprocessor"></span><span class="preprocessor">#define FREXP frexp</span></div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> <span class="preprocessor"></span><span class="preprocessor">#define LDEXP ldexp</span></div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> <span class="preprocessor"></span><span class="preprocessor">#define SCALBN scalbn</span></div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> <span class="preprocessor"></span><span class="preprocessor">#define SCALBLN scalbln</span></div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> <span class="preprocessor"></span><span class="preprocessor">#define POW pow</span></div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> <span class="preprocessor"></span><span class="preprocessor">#define COS cos</span></div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> <span class="preprocessor"></span><span class="preprocessor">#define SIN sin</span></div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> <span class="preprocessor"></span><span class="preprocessor">#define TAN tan</span></div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> <span class="preprocessor"></span><span class="preprocessor">#define COSH cosh</span></div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> <span class="preprocessor"></span><span class="preprocessor">#define SINH sinh</span></div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="preprocessor"></span><span class="preprocessor">#define TANH tanh</span></div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="preprocessor"></span><span class="preprocessor">#define ACOS acos</span></div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> <span class="preprocessor"></span><span class="preprocessor">#define ASIN asin</span></div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="preprocessor"></span><span class="preprocessor">#define ATAN atan</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> <span class="preprocessor"></span><span class="preprocessor">#define ATAN2 atan2</span></div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> <span class="preprocessor"></span><span class="preprocessor">#define ACOSH acosh</span></div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="preprocessor"></span><span class="preprocessor">#define ASINH asinh</span></div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="preprocessor"></span><span class="preprocessor">#define ATANH atanh</span></div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> <span class="preprocessor"></span><span class="preprocessor">#define TGAMMA tgamma</span></div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="preprocessor"></span><span class="preprocessor">#define LGAMMA lgamma</span></div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> <span class="preprocessor"></span><span class="preprocessor">#define J0 j0</span></div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="preprocessor"></span><span class="preprocessor">#define J1 j1</span></div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> <span class="preprocessor"></span><span class="preprocessor">#define JN jn</span></div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="preprocessor"></span><span class="preprocessor">#define Y0 y0</span></div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <span class="preprocessor"></span><span class="preprocessor">#define Y1 y1</span></div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> <span class="preprocessor"></span><span class="preprocessor">#define YN yn</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> <span class="preprocessor"></span><span class="preprocessor">#define ERF erf</span></div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> <span class="preprocessor"></span><span class="preprocessor">#define ERFC erfc</span></div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="preprocessor"></span><span class="preprocessor">#define CREAL creal</span></div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> <span class="preprocessor"></span><span class="preprocessor">#define CIMAG cimag</span></div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> <span class="preprocessor"></span><span class="preprocessor">#define CABS cabs</span></div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> <span class="preprocessor"></span><span class="preprocessor">#define CARG carg</span></div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="preprocessor"></span><span class="preprocessor">#define CONJ conj</span></div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="preprocessor"></span><span class="preprocessor">#define CPROJ cproj</span></div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="preprocessor"></span><span class="preprocessor">#define CSQRT csqrt</span></div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="preprocessor"></span><span class="preprocessor">#define CEXP cexp</span></div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="preprocessor"></span><span class="preprocessor">#define CLOG clog</span></div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="preprocessor"></span><span class="preprocessor">#define CPOW cpow</span></div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> <span class="preprocessor"></span><span class="preprocessor">#define CSIN csin</span></div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> <span class="preprocessor"></span><span class="preprocessor">#define CCOS ccos</span></div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> <span class="preprocessor"></span><span class="preprocessor">#define CTAN ctan</span></div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="preprocessor"></span><span class="preprocessor">#define CASIN casin</span></div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> <span class="preprocessor"></span><span class="preprocessor">#define CACOS cacos</span></div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="preprocessor"></span><span class="preprocessor">#define CATAN catan</span></div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> <span class="preprocessor"></span><span class="preprocessor">#define CSINH csinh</span></div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="preprocessor"></span><span class="preprocessor">#define CCOSH ccosh</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="preprocessor"></span><span class="preprocessor">#define CTANH ctanh</span></div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="preprocessor"></span><span class="preprocessor">#define CASINH casinh</span></div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> <span class="preprocessor"></span><span class="preprocessor">#define CACOSH cacosh</span></div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="preprocessor"></span><span class="preprocessor">#define CATANH catanh</span></div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> <span class="preprocessor">#if defined(NFFT_LDOUBLE)</span></div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <span class="preprocessor"></span><span class="preprocessor"> #define EPSILON LDBL_EPSILON//4.0E-31L</span></div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> <span class="preprocessor"></span><span class="preprocessor"> #define MANT_DIG LDBL_MANT_DIG</span></div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <span class="preprocessor"></span><span class="preprocessor"> #define MIN_EXP LDBL_MIN_EXP</span></div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> <span class="preprocessor"></span><span class="preprocessor"> #define MAX_EXP LDBL_MAX_EXP</span></div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(NFFT_SINGLE)</span></div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="preprocessor"></span><span class="preprocessor"> #define EPSILON FLT_EPSILON</span></div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <span class="preprocessor"></span><span class="preprocessor"> #define MANT_DIG FLT_MANT_DIG</span></div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> <span class="preprocessor"></span><span class="preprocessor"> #define MIN_EXP FLT_MIN_EXP</span></div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <span class="preprocessor"></span><span class="preprocessor"> #define MAX_EXP FLT_MAX_EXP</span></div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="preprocessor"></span><span class="preprocessor"> #define EPSILON DBL_EPSILON</span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> <span class="preprocessor"></span><span class="preprocessor"> #define MANT_DIG DBL_MANT_DIG</span></div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="preprocessor"></span><span class="preprocessor"> #define MIN_EXP DBL_MIN_EXP</span></div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <span class="preprocessor"></span><span class="preprocessor"> #define MAX_EXP DBL_MAX_EXP</span></div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="preprocessor">#if defined(FLT_ROUND)</span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="preprocessor"></span><span class="preprocessor"> #if FLT_ROUND != -1</span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="preprocessor"></span><span class="preprocessor"> #define FLTROUND 1.0</span></div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="preprocessor"></span><span class="preprocessor"> #else</span></div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> <span class="preprocessor"></span><span class="preprocessor"> #define FLTROUND 0.0</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="preprocessor"></span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> <span class="preprocessor"></span><span class="preprocessor"> #define FLTROUND 0.0</span></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="preprocessor">#if HAVE_DECL_DRAND48 == 0</span></div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="preprocessor"></span> <span class="keyword">extern</span> <span class="keywordtype">double</span> drand48(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SRAND48 == 0</span></div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="preprocessor"></span> <span class="keyword">extern</span> <span class="keywordtype">void</span> srand48(<span class="keywordtype">long</span> <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> <span class="preprocessor"></span><span class="preprocessor">#define R_RADIX FLT_RADIX</span></div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="preprocessor"></span><span class="preprocessor">#define II _Complex_I</span></div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="comment">/* format strings */</span></div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="preprocessor">#if defined(NFFT_LDOUBLE)</span></div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> <span class="preprocessor"></span><span class="preprocessor"># define FE "LE"</span></div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <span class="preprocessor"></span><span class="preprocessor"># define FE_ "% 36.32LE"</span></div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> <span class="preprocessor"></span><span class="preprocessor"># define FFI "%Lf"</span></div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(NFFT_SINGLE)</span></div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> <span class="preprocessor"></span><span class="preprocessor"># define FE "E"</span></div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="preprocessor"></span><span class="preprocessor"># define FE_ "% 12.8E"</span></div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="preprocessor"></span><span class="preprocessor"># define FFI "%f"</span></div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="preprocessor"></span><span class="preprocessor"># define FE "lE"</span></div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> <span class="preprocessor"></span><span class="preprocessor"># define FE_ "% 20.16lE"</span></div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="preprocessor"></span><span class="preprocessor"># define FFI "%lf"</span></div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> <span class="preprocessor">#define TRUE 1</span></div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> <span class="preprocessor"></span><span class="preprocessor">#define FALSE 0</span></div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="preprocessor">#define UNUSED(x) (void)x</span></div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> <span class="keyword">extern</span> <span class="keywordtype">void</span> nfft_assertion_failed(<span class="keyword">const</span> <span class="keywordtype">char</span> *s, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span> *file);</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> </div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="comment">/* always check */</span></div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="preprocessor">#define CK(ex) \</span></div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> <span class="preprocessor"> (void)((ex) || (nfft_assertion_failed(#ex, __LINE__, __FILE__), 0))</span></div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> <span class="preprocessor">#ifdef NFFT_DEBUG</span></div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> <span class="preprocessor"></span> <span class="comment">/* check only if debug enabled */</span></div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> <span class="preprocessor"> #define A(ex) \</span></div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> <span class="preprocessor"> (void)((ex) || (nfft_assertion_failed(#ex, __LINE__, __FILE__), 0))</span></div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> <span class="preprocessor"></span><span class="preprocessor"> #define A(ex) </span><span class="comment">/* nothing */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> <span class="preprocessor">#ifdef HAVE_ALLOCA</span></div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> <span class="preprocessor"></span> <span class="comment">/* Use alloca if available. */</span></div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> <span class="preprocessor"> #ifndef alloca</span></div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> <span class="preprocessor"></span><span class="preprocessor"> #ifdef __GNUC__</span></div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> <span class="preprocessor"></span> <span class="comment">/* No alloca defined but can use GCC's builtin version. */</span></div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> <span class="preprocessor"> #define alloca __builtin_alloca</span></div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> <span class="preprocessor"></span><span class="preprocessor"> #else</span></div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> <span class="preprocessor"></span> <span class="comment">/* No alloca defined and not using GCC. */</span></div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> <span class="preprocessor"> #ifdef _MSC_VER</span></div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> <span class="preprocessor"></span> <span class="comment">/* Using Microsoft's C compiler. Include header file and use _alloca</span></div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <span class="comment"> * defined therein. */</span></div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> <span class="preprocessor"> #include <malloc.h></span></div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> <span class="preprocessor"> #define alloca _alloca</span></div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> <span class="preprocessor"></span><span class="preprocessor"> #else</span></div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> <span class="preprocessor"></span> <span class="comment">/* Also not using Microsoft's C compiler. */</span></div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> <span class="preprocessor"> #if HAVE_ALLOCA_H</span></div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> <span class="preprocessor"></span> <span class="comment">/* Alloca header is available. */</span></div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> <span class="preprocessor"> #include <alloca.h></span></div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> <span class="preprocessor"> #else</span></div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> <span class="preprocessor"></span> <span class="comment">/* No alloca header available. */</span></div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> <span class="preprocessor"> #ifdef _AIX</span></div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> <span class="preprocessor"></span> <span class="comment">/* We're using the AIX C compiler. Use pragma. */</span></div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> <span class="preprocessor"> #pragma alloca</span></div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> <span class="preprocessor"></span><span class="preprocessor"> #else</span></div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> <span class="preprocessor"></span> <span class="comment">/* Not using AIX compiler. */</span></div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> <span class="preprocessor"> #ifndef alloca </span><span class="comment">/* HP's cc +Olibcalls predefines alloca. */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> <span class="preprocessor"></span> <span class="keywordtype">void</span> *alloca(<span class="keywordtype">size_t</span>);</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> <span class="preprocessor"> #endif</span></div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> <span class="preprocessor"></span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> <span class="preprocessor"></span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> <span class="preprocessor"></span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> <span class="preprocessor"></span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> <span class="preprocessor"></span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="preprocessor"></span> <span class="comment">/* So we have alloca. */</span></div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <span class="preprocessor"> #define STACK_MALLOC(T, p, x) p = (T)alloca(x)</span></div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="preprocessor"></span><span class="preprocessor"> #define STACK_FREE(x) </span><span class="comment">/* Nothing. Cleanup done automatically. */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* ! HAVE_ALLOCA */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> <span class="preprocessor"></span> <span class="comment">/* Use malloc instead of alloca. So we allocate memory on the heap instead of</span></div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="comment"> * on the stack which is slower. */</span></div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="preprocessor"> #define STACK_MALLOC(T, p, x) p = (T)nfft_malloc(x)</span></div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="preprocessor"></span><span class="preprocessor"> #define STACK_FREE(x) nfft_free(x)</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* ! HAVE_ALLOCA */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="keywordtype">double</span> nfft_elapsed_seconds(ticks t1, ticks t0);</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> </div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <span class="preprocessor">#define UNUSED(x) (void)x</span></div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="preprocessor"></span> <span class="keywordtype">int</span> MEASURE_TIME_r;</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> <span class="keywordtype">double</span> MEASURE_TIME_tt;</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> ticks MEASURE_TIME_t0, MEASURE_TIME_t1;</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> </div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> <span class="preprocessor">#define TIC(a) \</span></div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> <span class="preprocessor"> ths->MEASURE_TIME_t[(a)]=0; \</span></div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <span class="preprocessor"> MEASURE_TIME_r=0; \</span></div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> <span class="preprocessor"> </span><span class="comment">/* DISABLED LOOP due to code blocks causing segfault when repeatedly run */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> <span class="preprocessor"> </span><span class="comment">/*while(ths->MEASURE_TIME_t[(a)]<0.01)*/</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> <span class="preprocessor"> MEASURE_TIME_r++; \</span></div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <span class="preprocessor"> MEASURE_TIME_t0 = getticks(); \</span></div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> <span class="preprocessor"></span><span class="comment">/* THE MEASURED FUNCTION IS CALLED REPEATEDLY */</span></div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> </div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="preprocessor">#define TOC(a) \</span></div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> <span class="preprocessor"> MEASURE_TIME_t1 = getticks(); \</span></div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> <span class="preprocessor"> MEASURE_TIME_tt = nfft_elapsed_seconds(MEASURE_TIME_t1,MEASURE_TIME_t0);\</span></div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <span class="preprocessor"> ths->MEASURE_TIME_t[(a)]+=MEASURE_TIME_tt; \</span></div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="preprocessor"> ths->MEASURE_TIME_t[(a)]/=MEASURE_TIME_r; \</span></div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> <span class="preprocessor"></span><span class="preprocessor">#define TIC(a)</span></div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> <span class="preprocessor"></span><span class="preprocessor">#define TOC(a)</span></div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> <span class="preprocessor">#ifdef MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> <span class="preprocessor"></span><span class="preprocessor">#define TIC_FFTW(a) TIC(a)</span></div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> <span class="preprocessor"></span><span class="preprocessor">#define TOC_FFTW(a) TOC(a)</span></div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> <span class="preprocessor"></span><span class="preprocessor">#define TIC_FFTW(a)</span></div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> <span class="preprocessor"></span><span class="preprocessor">#define TOC_FFTW(a)</span></div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> <span class="comment">/* sinc.c: */</span></div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> </div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> <span class="comment">/* Sinus cardinalis. */</span></div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> R X(sinc)(R x);</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> </div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> <span class="comment">/* lambda.c: */</span></div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> </div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> <span class="comment">/* lambda(z, eps) = gamma(z + eps) / gamma(z + 1) */</span></div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> R X(lambda)(R z, R eps);</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> </div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> <span class="comment">/* lambda2(mu, nu) = sqrt(gamma(mu + nu + 1) / (gamma(mu + 1) * gamma(nu + 1))) */</span></div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> R X(lambda2)(R mu, R nu);</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> </div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> <span class="comment">/* bessel_i0.c: */</span></div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> R X(bessel_i0)(R x);</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> </div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="comment">/* float.c: */</span></div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> <span class="keyword">typedef</span> <span class="keyword">enum</span> {NFFT_EPSILON = 0, NFFT_SAFE_MIN = 1, NFFT_BASE = 2,</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> NFFT_PRECISION = 3, NFFT_MANT_DIG = 4, NFFT_FLTROUND = 5, NFFT_E_MIN = 6,</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> NFFT_R_MIN = 7, NFFT_E_MAX = 8, NFFT_R_MAX = 9} float_property;</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> </div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> R X(float_property)(float_property);</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> </div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> <span class="comment">/* int.c: */</span></div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> <span class="keywordtype">int</span> X(exp2i)(<span class="keyword">const</span> <span class="keywordtype">int</span> a);</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> <span class="keywordtype">int</span> X(log2i)(<span class="keyword">const</span> <span class="keywordtype">int</span> m);</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> <span class="keywordtype">int</span> X(next_power_of_2)(<span class="keyword">const</span> <span class="keywordtype">int</span> N);</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> <span class="keywordtype">void</span> X(next_power_of_2_exp)(<span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> *N2, <span class="keywordtype">int</span> *t);</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> </div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> <span class="comment">/* error.c: */</span></div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> R X(error_l_infty_complex)(<span class="keyword">const</span> C *x, <span class="keyword">const</span> C *y, <span class="keyword">const</span> INT n);</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <span class="comment">/* not used */</span> R X(error_l_infty_double)(<span class="keyword">const</span> R *x, <span class="keyword">const</span> R *y, <span class="keyword">const</span> INT n);</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> R X(error_l_infty_1_complex)(<span class="keyword">const</span> C *x, <span class="keyword">const</span> C *y, <span class="keyword">const</span> INT n,</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> <span class="keyword">const</span> C *z, <span class="keyword">const</span> INT m);</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> <span class="comment">/* not used */</span> R X(error_l_infty_1_double)(<span class="keyword">const</span> R *x, <span class="keyword">const</span> R *y, <span class="keyword">const</span> INT n, <span class="keyword">const</span> R *z,</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> <span class="keyword">const</span> INT m);</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> R X(error_l_2_complex)(<span class="keyword">const</span> C *x, <span class="keyword">const</span> C *y, <span class="keyword">const</span> INT n);</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> <span class="comment">/* not used */</span> R X(error_l_2_double)(<span class="keyword">const</span> R *x, <span class="keyword">const</span> R *y, <span class="keyword">const</span> INT n);</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> </div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/int_8c_source.html b/doc/api/html/int_8c_source.html
new file mode 100644
index 0000000..cfd4636
--- /dev/null
+++ b/doc/api/html/int_8c_source.html
@@ -0,0 +1,157 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - int.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">int.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keywordtype">int</span> X(exp2i)(<span class="keyword">const</span> <span class="keywordtype">int</span> a)</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keywordflow">return</span> (1U << a);</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> }</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keywordtype">int</span> X(log2i)(<span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keywordtype">int</span> l = 0;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keywordtype">int</span> mm = m;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordflow">while</span> (mm > 0)</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> mm = (mm >> 1);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> l++;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordflow">return</span> (l-1);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> }</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">int</span> X(next_power_of_2)(<span class="keyword">const</span> <span class="keywordtype">int</span> N)</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> {</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">int</span> n,i,logn;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">int</span> N_is_not_power_of_2=0;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordflow">if</span> (N == 0)</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> {</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> n = N;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> logn = 0;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">while</span> (n != 1)</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> {</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">if</span> (n%2 == 1)</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> N_is_not_power_of_2=1;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> n = n/2;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> logn++;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> }</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">if</span> (!N_is_not_power_of_2)</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> logn--;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">for</span> (i = 0; i <= logn; i++)</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> n = n*2;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">return</span> n;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> }</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">void</span> X(next_power_of_2_exp)(<span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> *N2, <span class="keywordtype">int</span> *t)</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">int</span> n,i,logn;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">int</span> N_is_not_power_of_2=0;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span> (N == 0)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> {</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> *N2 = 1;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> *t = 0;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> {</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> n=N;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> logn=0;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">while</span> (n != 1)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">if</span> (n%2 == 1)</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> {</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> N_is_not_power_of_2=1;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> n = n/2;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> logn++;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">if</span> (!N_is_not_power_of_2)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> logn--;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">for</span> (i = 0; i <= logn; i++)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> n = n*2;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> }</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> *N2 = n;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> *t = logn+1;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/inverse__radon_8c.html b/doc/api/html/inverse__radon_8c.html
new file mode 100644
index 0000000..09a83fa
--- /dev/null
+++ b/doc/api/html/inverse__radon_8c.html
@@ -0,0 +1,98 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - inverse_radon.c File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_0c7f2452bc84fa0fc4195fb15953ec53.html">radon</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">inverse_radon.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>NFFT-based discrete inverse Radon transform.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+</div>
+<p><a href="inverse__radon_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a0091bbc07c9570a2ab0dac372c2104f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0091bbc07c9570a2ab0dac372c2104f1"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="inverse__radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1">KERNEL</a>(r) (1.0-fabs((double)(r))/((double)R/2))</td></tr>
+<tr class="memdesc:a0091bbc07c9570a2ab0dac372c2104f1"><td class="mdescLeft"> </td><td class="mdescRight">define weights of kernel function for discrete Radon transform <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a307b67b4c00a1c756f140c7fa831cdae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a307b67b4c00a1c756f140c7fa831cdae"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="inverse__radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae">polar_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:a307b67b4c00a1c756f140c7fa831cdae"><td class="mdescLeft"> </td><td class="mdescRight">generates the points x with weights w for the polar grid with T angles and R offsets <br/></td></tr>
+<tr class="memitem:a9a5ff165ab1e23af77ab6f6108bb6310"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a5ff165ab1e23af77ab6f6108bb6310"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="inverse__radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310">linogram_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:a9a5ff165ab1e23af77ab6f6108bb6310"><td class="mdescLeft"> </td><td class="mdescRight">generates the points x with weights w for the linogram grid with T slopes and R offsets <br/></td></tr>
+<tr class="memitem:a298e52a05aeac043f9b35e8ae60a13e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a298e52a05aeac043f9b35e8ae60a13e4"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="inverse__radon_8c.html#a298e52a05aeac043f9b35e8ae60a13e4">Inverse_Radon_trafo</a> (int(*gridfcn)(), int T, int R, double *Rf, int NN, double *f, int <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a>)</td></tr>
+<tr class="memdesc:a298e52a05aeac043f9b35e8ae60a13e4"><td class="mdescLeft"> </td><td class="mdescRight">computes the inverse discrete Radon transform of Rf on the grid given by gridfcn() with T angles and R offsets by a NFFT-based CG-type algorithm <br/></td></tr>
+<tr class="memitem:a3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="inverse__radon_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:a3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">simple test program for the inverse discrete Radon transform <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>NFFT-based discrete inverse Radon transform. </p>
+<p>Computes the inverse of the discrete Radon transform </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ R_{\theta_t} f\left(\frac{s}{R}\right) = \sum_{r \in I_R} w_r \; \sum_{k \in I_N^2} f_{k} \mathrm{e}^{-2\pi\mathrm{I} k \; (\frac{r}{R}\theta_t)} \, \mathrm{e}^{2\pi\mathrm{i} r s / R} \qquad(t \in I_T, s \in I_R). \]" src="form_134.png"/>
+</p>
+<p> given at the points <img class="formulaInl" alt="$\frac{r}{R}\theta_t$" src="form_135.png"/> of the polar or linogram grid and where <img class="formulaInl" alt="$w_r$" src="form_136.png"/> are the weights of the Dirichlet- or Fejer-kernel by 1D-FFTs and the 2D-iNFFT. </p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2005 </dd></dl>
+
+<p>Definition in file <a class="el" href="inverse__radon_8c_source.html">inverse_radon.c</a>.</p>
+</div></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/inverse__radon_8c_source.html b/doc/api/html/inverse__radon_8c_source.html
new file mode 100644
index 0000000..ea3e33e
--- /dev/null
+++ b/doc/api/html/inverse__radon_8c_source.html
@@ -0,0 +1,295 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - inverse_radon.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_0c7f2452bc84fa0fc4195fb15953ec53.html">radon</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">inverse_radon.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="inverse__radon_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: inverse_radon.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment">/*#define KERNEL(r) 1.0 */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"><a class="code" href="inverse__radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1"> 54</a></span> <span class="preprocessor">#define KERNEL(r) (1.0-fabs((double)(r))/((double)R/2))</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"><a class="code" href="inverse__radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae"> 59</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="inverse__radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae" title="generates the points x with weights w for the polar grid with T angles and R offsets">polar_grid</a>(<span class="keywordtype">int</span> T, <span class="keywordtype">int [...]
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">int</span> t, r;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">double</span> W=(double)T*(((<span class="keywordtype">double</span>)R/2.0)*((double)R/2.0)+1.0/4.0);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">for</span>(t=-T/2; t<T/2; t++)</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">for</span>(r=-R/2; r<R/2; r++)</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> {</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> x[2*((t+T/2)*R+(r+R/2))+0] = (<span class="keywordtype">double</span>)r/R*cos(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*t/T);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)r/R*sin(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*t/T);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">if</span> (r==0)</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> w[(t+T/2)*R+(r+R/2)] = fabs((<span class="keywordtype">double</span>)r)/W;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> }</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> }</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="inverse__radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310"> 83</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="inverse__radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310" title="generates the points x with weights w for the linogram grid with T slopes and R offsets">linogram_grid</a>(<span class="keywordtype">int</span> T, <span class="keywordtyp [...]
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">int</span> t, r;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">double</span> W=(double)T*(((<span class="keywordtype">double</span>)R/2.0)*((double)R/2.0)+1.0/4.0);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">for</span>(t=-T/2; t<T/2; t++)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">for</span>(r=-R/2; r<R/2; r++)</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> {</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">if</span>(t<0)</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> {</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> x[2*((t+T/2)*R+(r+R/2))+0] = (<span class="keywordtype">double</span>)r/R;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)4*(t+T/4)/T*r/R;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> x[2*((t+T/2)*R+(r+R/2))+0] = -(<span class="keywordtype">double</span>)4*(t-T/4)/T*r/R;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)r/R;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">if</span> (r==0)</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> w[(t+T/2)*R+(r+R/2)] = fabs((<span class="keywordtype">double</span>)r)/W;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> }</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"><a class="code" href="inverse__radon_8c.html#a298e52a05aeac043f9b35e8ae60a13e4"> 116</a></span> <span class="keywordtype">int</span> <a class="code" href="inverse__radon_8c.html#a298e52a05aeac043f9b35e8ae60a13e4" title="computes the inverse discrete Radon transform of Rf on the grid given by gridfcn() with T angles and ...">Inverse_Radon_trafo</a>(<span class="keywordtype">int</span> (*gridfcn)(), <span class="keywordtype" [...]
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> {</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">int</span> j,k; </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan; </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_infft_plan; </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> fftw_complex *<a class="code" href="group__applications__mri3d__construct__data__1d2d.html#gafa82bf5df93804a1760082b88492b8d5" title="fft makes an 1D-ftt for every knot through all layers">fft</a>; </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> fftw_plan my_fftw_plan; </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordtype">int</span> t,r; </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">double</span> *x, *w; </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">int</span> l; </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordtype">int</span> M=T*R;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> N[0]=NN; n[0]=2*N[0];</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> N[1]=NN; n[1]=2*N[1];</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> fft = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(R*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> my_fftw_plan = fftw_plan_dft_1d(R,fft,fft,FFTW_FORWARD,FFTW_MEASURE);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> nfft_init_guru(&my_nfft_plan, 2, N, M, n, 4,</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> solver_init_advanced_complex(&my_infft_plan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> gridfcn(T,R,x,w);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> {</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">if</span> (j%R)</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j] = w[j];</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j] = 0.0;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> nfft_precompute_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> nfft_precompute_full_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">for</span>(t=0; t<T; t++)</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> {</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment">/* for(r=0; r<R/2; r++)</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment"> fft[r] = cexp(I*PI*r)*Rf[t*R+(r+R/2)];</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment"> for(r=0; r<R/2; r++)</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment"> fft[r+R/2] = cexp(I*PI*r)*Rf[t*R+r];</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">for</span>(r=0; r<R; r++)</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> fft[r] = Rf[t*R+r] + _Complex_I*0.0;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(fft, 1, &R);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> fftw_execute(my_fftw_plan);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(fft, 1, &R);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[t*R] = 0.0;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">for</span>(r=-R/2+1; r<R/2; r++)</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[t*R+(r+R/2)] = fft[r+R/2]/<a class="code" href="inverse__radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1" title="define weights of kernel function for discrete Radon transform">KERNEL</a>(r);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = 0.0 + _Complex_I*0.0;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> solver_before_loop_complex(&my_infft_plan);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">if</span> (max_i<1)</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> {</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> l=1;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>[k];</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> }</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> {</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">for</span>(l=1;l<=<a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>;l++)</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> {</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_infft_plan);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment">/*if (sqrt(my_infft_plan.dot_r_iter)<=1e-12) break;*/</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> }</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment">/*printf("after %d iteration(s): weighted 2-norm of original residual vector = %g\n",l-1,sqrt(my_infft_plan.dot_r_iter));*/</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> f[k] = creal(my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> fftw_destroy_plan(my_fftw_plan);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(fft);</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_infft_plan);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> }</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno"><a class="code" href="inverse__radon_8c.html#a3c04138a5bfe5d72780bb7e82a18e627"> 236</a></span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> {</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> int (*gridfcn)(); </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordtype">int</span> T, R; </div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> FILE *fp;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordtype">int</span> N; </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordtype">double</span> *Rf, *iRf;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>; </div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">if</span>( argc!=6 )</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> {</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> printf(<span class="stringliteral">"inverse_radon gridfcn N T R max_i\n"</span>);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> printf(<span class="stringliteral">"gridfcn \"polar\" or \"linogram\" \n"</span>);</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> printf(<span class="stringliteral">"N image size NxN \n"</span>);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> printf(<span class="stringliteral">"T number of slopes \n"</span>);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> printf(<span class="stringliteral">"R number of offsets \n"</span>);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> printf(<span class="stringliteral">"max_i number of iterations \n"</span>);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> exit(-1);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> }</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">if</span> (strcmp(argv[1],<span class="stringliteral">"polar"</span>) == 0)</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> gridfcn = <a class="code" href="inverse__radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae" title="generates the points x with weights w for the polar grid with T angles and R offsets">polar_grid</a>;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> gridfcn = <a class="code" href="inverse__radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310" title="generates the points x with weights w for the linogram grid with T slopes and R offsets">linogram_grid</a>;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> N = atoi(argv[2]);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> T = atoi(argv[3]);</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> R = atoi(argv[4]);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="comment">/*printf("N=%d, %s grid with T=%d, R=%d. \n",N,argv[1],T,R);*/</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> max_i = atoi(argv[5]);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> Rf = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> iRf = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(N*N*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> fp=fopen(<span class="stringliteral">"sinogram_data.bin"</span>,<span class="stringliteral">"rb"</span>);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">if</span> (fp==NULL)</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> fread(Rf,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),T*R,fp);</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> fclose(fp);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <a class="code" href="inverse__radon_8c.html#a298e52a05aeac043f9b35e8ae60a13e4" title="computes the inverse discrete Radon transform of Rf on the grid given by gridfcn() with T angles and ...">Inverse_Radon_trafo</a>(gridfcn,T,R,Rf,N,iRf,max_i);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> fp=fopen(<span class="stringliteral">"output_data.bin"</span>,<span class="stringliteral">"wb+"</span>);</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">if</span> (fp==NULL)</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> fwrite(iRf,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),N*N,fp);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> fclose(fp);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(Rf);</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(iRf);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/iterS2_8c_source.html b/doc/api/html/iterS2_8c_source.html
new file mode 100644
index 0000000..4976896
--- /dev/null
+++ b/doc/api/html/iterS2_8c_source.html
@@ -0,0 +1,474 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - iterS2.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_e198b4faa999927a1ae92d03d5f1f5e6.html">iterS2</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">iterS2.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: iterS2.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">/* iterS2 - Iterative reconstruction on the sphere S2 */</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">/* Include standard C headers. */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment">/* Include NFFT 3 utilities headers. */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">/* Include NFFT3 library header. */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "legendre.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"><a class="code" href="group__applications__iterS2__matlab.html#ga7c6368b321bd9acd0149b030bb8275ed"> 46</a></span> <span class="keyword">enum</span> <span class="keywordtype">boolean</span> {NO = 0, YES = 1};</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"><a class="code" href="group__applications__iterS2__matlab.html#ga3c04138a5bfe5d72780bb7e82a18e627"> 58</a></span> <span class="keywordtype">int</span> main (<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> {</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">int</span> T;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">int</span> N;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">int</span> M;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">int</span> M2;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">int</span> t; <span class="comment">/* Index variable for testcases */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan; <span class="comment">/* NFSFT plan */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan2; <span class="comment">/* NFSFT plan */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> iplan; <span class="comment">/* NFSFT plan */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordtype">int</span> j; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">int</span> k; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">int</span> m; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">int</span> use_nfsft; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">int</span> use_nfft; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">int</span> use_fpt; <span class="comment">/* */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">int</span> cutoff; </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">double</span> threshold; </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">double</span> re;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">double</span> im;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">double</span> a;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">double</span> *scratch;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">double</span> xs;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">double</span> *ys;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">double</span> *temp;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">double</span> _Complex *temp2;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">int</span> qlength;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">double</span> *qweights;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> fftw_plan fplan;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordtype">int</span> npt;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">int</span> npt_exp;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">double</span> *alpha, *beta, *gamma;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment">/* Read the number of testcases. */</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> fscanf(stdin,<span class="stringliteral">"testcases=%d\n"</span>,&T);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> fprintf(stderr,<span class="stringliteral">"%d\n"</span>,T);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">/* Process each testcase. */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">for</span> (t = 0; t < T; t++)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment">/* Check if the fast transform shall be used. */</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> fscanf(stdin,<span class="stringliteral">"nfsft=%d\n"</span>,&use_nfsft);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> fprintf(stderr,<span class="stringliteral">"%d\n"</span>,use_nfsft);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment">/* Check if the NFFT shall be used. */</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> fscanf(stdin,<span class="stringliteral">"nfft=%d\n"</span>,&use_nfft);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> fprintf(stderr,<span class="stringliteral">"%d\n"</span>,use_nfsft);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">if</span> (use_nfft != NO)</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> {</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment">/* Read the cut-off parameter. */</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> fscanf(stdin,<span class="stringliteral">"cutoff=%d\n"</span>,&cutoff);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> fprintf(stderr,<span class="stringliteral">"%d\n"</span>,cutoff);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> {</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment">/* TODO remove this */</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="comment">/* Initialize unused variable with dummy value. */</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> cutoff = 1;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment">/* Check if the fast polynomial transform shall be used. */</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> fscanf(stdin,<span class="stringliteral">"fpt=%d\n"</span>,&use_fpt);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> fprintf(stderr,<span class="stringliteral">"%d\n"</span>,use_fpt);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span> (use_fpt != NO)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> {</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment">/* Read the NFSFT threshold parameter. */</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> fscanf(stdin,<span class="stringliteral">"threshold=%lf\n"</span>,&threshold);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> fprintf(stderr,<span class="stringliteral">"%lf\n"</span>,threshold);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> }</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> {</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment">/* TODO remove this */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment">/* Initialize unused variable with dummy value. */</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> threshold = 1000.0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> }</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> {</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment">/* TODO remove this */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment">/* Set dummy values. */</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> use_nfft = NO;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> use_fpt = NO;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> cutoff = 3;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> threshold = 1000.0;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment">/* Read the bandwidth. */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> fscanf(stdin,<span class="stringliteral">"bandwidth=%d\n"</span>,&N);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> fprintf(stderr,<span class="stringliteral">"%d\n"</span>,N);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="comment">/* Do precomputation. */</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> nfsft_precompute(N,threshold,</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> ((use_nfsft==NO)?(NFSFT_NO_FAST_ALGORITHM):(0U<span class="comment">/*NFSFT_NO_DIRECT_ALGORITHM*/</span>)), 0U);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment">/* Read the number of nodes. */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> fscanf(stdin,<span class="stringliteral">"nodes=%d\n"</span>,&M);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> fprintf(stderr,<span class="stringliteral">"%d\n"</span>,M);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment">/* */</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span> ((N+1)*(N+1) > M)</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> {</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> X(next_power_of_2_exp)(N, &npt, &npt_exp);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> fprintf(stderr, <span class="stringliteral">"npt = %d, npt_exp = %d\n"</span>, npt, npt_exp);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> fprintf(stderr,<span class="stringliteral">"Optimal interpolation!\n"</span>);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> scratch = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(4*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> ys = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> temp = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*N+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> temp2 = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> a = 0.0;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">for</span> (j = 0; j <= N; j++)</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> {</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> xs = 2.0 + (2.0*j)/(N+1);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> ys[j] = (2.0-((j == 0)?(1.0):(0.0)))*4.0*<a class="code" href="group__nfftutil.html#ga2fd48f1f700153c050d27691c4b2a6cc" title="Computes the B-spline , scratch is used for de Boor's scheme.">nfft_bspline</a>(4,xs,scratch);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="comment">//fprintf(stdout,"%3d: g(%le) = %le\n",j,xs,ys[j]);</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> a += ys[j];</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment">//fprintf(stdout,"a = %le\n",a);</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">for</span> (j = 0; j <= N; j++)</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> {</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> ys[j] *= 1.0/a;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> qlength = 2*N+1;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> qweights = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(qlength*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> fplan = fftw_plan_r2r_1d(N+1, qweights, qweights, FFTW_REDFT00, 0U);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">for</span> (j = 0; j < N+1; j++)</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> {</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> qweights[j] = -2.0/(4*j*j-1);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> }</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> fftw_execute(fplan);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> qweights[0] *= 0.5;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">for</span> (j = 0; j < N+1; j++)</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> {</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> qweights[j] *= 1.0/(2.0*N+1.0);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> qweights[2*N+1-1-j] = qweights[j];</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> }</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> fplan = fftw_plan_r2r_1d(2*N+1, temp, temp, FFTW_REDFT00, 0U);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">for</span> (j = 0; j <= N; j++)</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> {</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> temp[j] = ((j==0 || j == 2*N)?(1.0):(0.5))*ys[j];</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> }</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">for</span> (j = N+1; j < 2*N+1; j++)</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> {</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> temp[j] = 0.0;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> }</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> fftw_execute(fplan);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">for</span> (j = 0; j < 2*N+1; j++)</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> {</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> temp[j] *= qweights[j];</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> fftw_execute(fplan);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">for</span> (j = 0; j < 2*N+1; j++)</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> {</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> temp[j] *= ((j==0 || j == 2*N)?(1.0):(0.5));</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">if</span> (j <= N)</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> {</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> temp2[j] = temp[j];</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> }</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> }</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keyword">set</span> = fpt_init(1, npt_exp, 0U);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> alpha = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N+2)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> beta = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N+2)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> gamma = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N+2)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> alpha_al_row(alpha, N, 0);</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> beta_al_row(beta, N, 0);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> gamma_al_row(gamma, N, 0);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> fpt_precompute(<span class="keyword">set</span>, 0, alpha, beta, gamma, 0, 1000.0);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> fpt_transposed(<span class="keyword">set</span>,0, temp2, temp2, N, 0U);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> fpt_finalize(<span class="keyword">set</span>);</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(alpha);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(beta);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(gamma);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> fftw_destroy_plan(fplan);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(scratch);</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(qweights);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ys);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(temp);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> }</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="comment">/* Init transform plans. */</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> nfsft_init_guru(&plan, N, M,</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> ((use_nfft!=0)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> ((use_fpt!=0)?(0U):(NFSFT_USE_DPT)) | NFSFT_MALLOC_F | NFSFT_MALLOC_X |</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_ZERO_F_HAT,</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> PRE_PHI_HUT | PRE_PSI | FFTW_INIT |</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> cutoff);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">if</span> ((N+1)*(N+1) > M)</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> {</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> solver_init_advanced_complex(&iplan, (<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&plan), CGNE | PRECOMPUTE_DAMP);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> }</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> {</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> solver_init_advanced_complex(&iplan, (<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&plan), CGNR | PRECOMPUTE_WEIGHT | PRECOMPUTE_DAMP);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> }</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="comment">/* Read the nodes and function values. */</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">for</span> (j = 0; j < M; j++)</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> {</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> fscanf(stdin,<span class="stringliteral">"%le %le %le %le\n"</span>,&plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j+1],&plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j],&re,&im);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j+1] = plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j+1]/(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j] = plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j]/(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">if</span> (plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j] >= 0.5)</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> {</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j] = plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j] - 1;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> }</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j] = re + _Complex_I * im;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> fprintf(stderr,<span class="stringliteral">"%le %le %le %le\n"</span>,plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j+1],plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j],</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> creal(iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]),cimag(iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]));</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> }</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="comment">/* Read the number of nodes. */</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> fscanf(stdin,<span class="stringliteral">"nodes_eval=%d\n"</span>,&M2);</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> fprintf(stderr,<span class="stringliteral">"%d\n"</span>,M2);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="comment">/* Init transform plans. */</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> nfsft_init_guru(&plan2, N, M2,</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> ((use_nfft!=0)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> ((use_fpt!=0)?(0U):(NFSFT_USE_DPT)) | NFSFT_MALLOC_F | NFSFT_MALLOC_X |</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_ZERO_F_HAT,</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> PRE_PHI_HUT | PRE_PSI | FFTW_INIT |</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> cutoff);</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="comment">/* Read the nodes and function values. */</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">for</span> (j = 0; j < M2; j++)</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> {</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> fscanf(stdin,<span class="stringliteral">"%le %le\n"</span>,&plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j+1],&plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j]);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j+1] = plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j+1]/(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j] = plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j]/(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="keywordflow">if</span> (plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j] >= 0.5)</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> {</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j] = plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j] - 1;</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> }</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> fprintf(stderr,<span class="stringliteral">"%le %le\n"</span>,plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j+1],plan2.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j]);</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> }</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> nfsft_precompute_x(&plan);</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> nfsft_precompute_x(&plan2);</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="comment">/* Frequency weights. */</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">if</span> ((N+1)*(N+1) > M)</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> {</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="comment">/* Compute Voronoi weights. */</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="comment">//nfft_voronoi_weights_S2(iplan.w, plan.x, M);</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="comment">/* Print out Voronoi weights. */</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="comment">/*a = 0.0;</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="comment"> for (j = 0; j < plan.M_total; j++)</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="comment"> fprintf(stderr,"%le\n",iplan.w[j]);</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="comment"> a += iplan.w[j];</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="comment"> }</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="comment"> fprintf(stderr,"sum = %le\n",a);*/</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a>; j++)</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> {</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j] = 0.0;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> }</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="keywordflow">for</span> (k = 0; k <= N; k++)</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> {</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">for</span> (j = -k; j <= k; j++)</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> {</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[NFSFT_INDEX(k,j,&plan)] = 1.0/(pow(k+1.0,2.0)); <span class="comment">/*temp2[j]*/</span>;</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> }</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> }</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> }</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> {</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a>; j++)</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> {</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j] = 0.0;</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> }</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">for</span> (k = 0; k <= N; k++)</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> {</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="keywordflow">for</span> (j = -k; j <= k; j++)</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> {</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[NFSFT_INDEX(k,j,&plan)] = 1/(pow(k+1.0,2.5));</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> }</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> }</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="comment">/* Compute Voronoi weights. */</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <a class="code" href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994" title="Computes voronoi weights for nodes on the sphere S^2.">nfft_voronoi_weights_S2</a>(iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>, plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , " [...]
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="comment">/* Print out Voronoi weights. */</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> a = 0.0;</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> {</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> fprintf(stderr,<span class="stringliteral">"%le\n"</span>,iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]);</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> a += iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j];</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> }</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> fprintf(stderr,<span class="stringliteral">"sum = %le\n"</span>,a);</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> }</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> fprintf(stderr, <span class="stringliteral">"N_total = %d\n"</span>, plan.<a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> fprintf(stderr, <span class="stringliteral">"M_total = %d\n"</span>, plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">for</span> (k = 0; k < plan.<a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a>; k++)</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> {</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = 0.0;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> solver_before_loop_complex(&iplan);</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="comment">/*for (k = 0; k < plan.M_total; k++)</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="comment"> printf("%le %le\n",creal(iplan.r_iter[k]),cimag(iplan.r_iter[k]));</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="comment"> }*/</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">for</span> (m = 0; m < 29; m++)</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> {</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> fprintf(stderr,<span class="stringliteral">"Residual ||r||=%e,\n"</span>,sqrt(iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>));</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&iplan);</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> }</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="comment">/*NFFT_SWAP_complex(iplan.f_hat_iter, plan.f_hat);</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="comment"> nfsft_trafo(&plan);</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="comment"> NFFT_SWAP_complex(iplan.f_hat_iter, plan.f_hat);</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="comment"></span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="comment"> a = 0.0;</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="comment"> b = 0.0;</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="comment"> for (k = 0; k < plan.M_total; k++)</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="comment"> printf("%le %le %le\n",cabs(iplan.y[k]),cabs(plan.f[k]),</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="comment"> cabs(iplan.y[k]-plan.f[k]));</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="comment"> a += cabs(iplan.y[k]-plan.f[k])*cabs(iplan.y[k]-plan.f[k]);</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="comment"> b += cabs(iplan.y[k])*cabs(iplan.y[k]);</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="comment"> }</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="comment"></span></div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="comment"> fprintf(stderr,"relative error in 2-norm: %le\n",a/b);*/</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, plan2.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_to [...]
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> nfsft_trafo(&plan2);</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, plan2.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_to [...]
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keywordflow">for</span> (k = 0; k < plan2.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> {</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> fprintf(stdout,<span class="stringliteral">"%le\n"</span>,cabs(plan2.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[k]));</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> }</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&iplan);</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> nfsft_finalize(&plan);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> nfsft_finalize(&plan2);</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="comment">/* Delete precomputed data. */</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> nfsft_forget();</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keywordflow">if</span> ((N+1)*(N+1) > M)</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> {</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(temp2);</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> }</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> } <span class="comment">/* Process each testcase. */</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="comment">/* Return exit code for successful run. */</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> }</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/jquery.js b/doc/api/html/jquery.js
new file mode 100644
index 0000000..63939e7
--- /dev/null
+++ b/doc/api/html/jquery.js
@@ -0,0 +1,8 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement( [...]
+{g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=argumen [...]
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]| [...]
+&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsBy [...]
+f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replac [...]
+{if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m, [...]
diff --git a/doc/api/html/kernel_2nfsft_2api_8h_source.html b/doc/api/html/kernel_2nfsft_2api_8h_source.html
new file mode 100644
index 0000000..d245cd1
--- /dev/null
+++ b/doc/api/html/kernel_2nfsft_2api_8h_source.html
@@ -0,0 +1,122 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - api.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_25564cacf5a7ef2ec915d9f7b609853e.html">nfsft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">kernel/nfsft/api.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: api.h 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#ifndef API_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span><span class="preprocessor">#define API_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment">/* "Default exponent of maximum bandwidth" */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#define BWEXP_MAX 10</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">/* "Default maximum bandwidth" */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#define BW_MAX 1024</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#define ROW(k) (k*(wisdom.N_MAX+2))</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"></span><span class="preprocessor">#define ROWK(k) (k*(wisdom.N_MAX+2)+k)</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#ifdef HAVE_STDBOOL_H</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"></span><span class="preprocessor"> #include <stdbool.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"></span> <span class="keyword">typedef</span> <span class="keyword">enum</span> {<span class="keyword">false</span> = 0,<span class="keyword">true</span> = 1} bool;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment">//#define FIRST_L (int)floor(ntilde/(double)plength)</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment">//#define LAST_L (int)ceil((Mtilde+1)/(double)plength)-1</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html"> 58</a></span> <span class="keyword">struct </span><a class="code" href="structnfsft__wisdom.html" title="Wisdom structure.">nfsft_wisdom</a></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> {</div>
+<div class="line"><a name="l00061"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740"> 61</a></span> <span class="keywordtype">bool</span> <a class="code" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740" title="Indicates wether the structure has been initialized.">initialized</a>;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51"> 65</a></span> <span class="keywordtype">int</span> <a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4"> 67</a></span> <span class="keywordtype">int</span> <a class="code" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4" title="The logarithm /f$t = N_{{max}}/f$ of the maximum bandwidth.">T_MAX</a>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment">/* Data for the direct algorithms */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e"> 76</a></span> <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255"> 82</a></span> <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2"> 88</a></span> <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment">/* Data for fast algorithms. */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html#ac367edaa1fae041e5b049cd81b44336b"> 93</a></span> <span class="keywordtype">double</span> <a class="code" href="structnfsft__wisdom.html#ac367edaa1fae041e5b049cd81b44336b" title="The threshold /f$/f$.">threshold</a>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor"></span> <span class="keywordtype">int</span> nthreads;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> *set_threads;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"><a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2"> 99</a></span> <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor"></span>};</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment">/* \} */</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/kernels_8c.html b/doc/api/html/kernels_8c.html
new file mode 100644
index 0000000..891536c
--- /dev/null
+++ b/doc/api/html/kernels_8c.html
@@ -0,0 +1,96 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - kernels.c File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">kernels.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>File with predefined kernels for the fast summation algorithm.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <float.h></code><br/>
+<code>#include "<a class="el" href="kernels_8h_source.html">kernels.h</a>"</code><br/>
+</div>
+<p><a href="kernels_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga81bf029788afe857325a760743f9fdd3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga81bf029788afe857325a760743f9fdd3"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>gaussian</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga44a58143a1f5c79b45c538134117e091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga44a58143a1f5c79b45c538134117e091"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>multiquadric</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga889c2a1791e42bb8fa5a594588d68a5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga889c2a1791e42bb8fa5a594588d68a5c"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>inverse_multiquadric</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga91be4b7bcc7d3a415e6b9b6ccaec39a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga91be4b7bcc7d3a415e6b9b6ccaec39a7"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>logarithm</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga7723414bb26fd9b1cc76686aeca57425"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7723414bb26fd9b1cc76686aeca57425"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>thinplate_spline</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gaed5f8559b7b7a24674318cb58856602b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaed5f8559b7b7a24674318cb58856602b"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_square</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga635ef40090e33b4917a20ab62913ef05"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga635ef40090e33b4917a20ab62913ef05"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_modulus</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga6a6096569616d5cf9604c514f925581b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6a6096569616d5cf9604c514f925581b"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_x</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga221604ef3a42dc2de4f1ce68831e7524"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga221604ef3a42dc2de4f1ce68831e7524"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>inverse_multiquadric3</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga8946fd3f992262c24477b56cba844873"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8946fd3f992262c24477b56cba844873"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>sinc_kernel</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gab7b7015bc5f2946583e7adbecb2cf630"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab7b7015bc5f2946583e7adbecb2cf630"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>cosc</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gac693b76a84e9435efc06c1ef26fc7435"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac693b76a84e9435efc06c1ef26fc7435"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>kcot</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga1deb0e10a0d6cf7f11d8b90ee008eb53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1deb0e10a0d6cf7f11d8b90ee008eb53"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_cube</b> (double x, int der, const double *param)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>File with predefined kernels for the fast summation algorithm. </p>
+
+<p>Definition in file <a class="el" href="kernels_8c_source.html">kernels.c</a>.</p>
+</div></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/kernels_8c_source.html b/doc/api/html/kernels_8c_source.html
new file mode 100644
index 0000000..ecccda5
--- /dev/null
+++ b/doc/api/html/kernels_8c_source.html
@@ -0,0 +1,447 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - kernels.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">kernels.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="kernels_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: kernels.c 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="kernels_8h.html" title="Header file with predefined kernels for the fast summation algorithm.">kernels.h</a>"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">double</span> _Complex gaussian(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param) <span class="comment">/* K(x)=exp(-x^2/c^2) */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">double</span> c=param[0];</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> {</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordflow">case</span> 0 : value=exp(-x*x/(c*c)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordflow">case</span> 1 : value=-2.0*x/(c*c)*exp(-x*x/(c*c)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">case</span> 2 : value=2.0*exp(-x*x/(c*c))*(-c*c+2.0*x*x)/(c*c*c*c); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">case</span> 3 : value=-4.0*x*exp(-x*x/(c*c))*(-3.0*c*c+2.0*x*x)/(c*c*c*c*c*c); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">case</span> 4 : value=4.0*exp(-x*x/(c*c))*(3.0*c*c*c*c-12.0*c*c*x*x+4.0*x*x*x*x)/(c*c*c*c*c*c*c*c); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">case</span> 5 : value=-8.0*x*exp(-x*x/(c*c))*(15.0*c*c*c*c-20.0*c*c*x*x+4.0*x*x*x*x)/pow(c,10.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">case</span> 6 : value=8.0*exp(-x*x/(c*c))*(-15.0*c*c*c*c*c*c+90.0*x*x*c*c*c*c-60.0*x*x*x*x*c*c+8.0*x*x*x*x*x*x)/pow(c,12.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">case</span> 7 : value=-16.0*x*exp(-x*x/(c*c))*(-105.0*c*c*c*c*c*c+210.0*x*x*c*c*c*c-84.0*x*x*x*x*c*c+8.0*x*x*x*x*x*x)/pow(c,14.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">case</span> 8 : value=16.0*exp(-x*x/(c*c))*(105.0*c*c*c*c*c*c*c*c-840.0*x*x*c*c*c*c*c*c+840.0*x*x*x*x*c*c*c*c-224.0*x*x*x*x*x*x*c*c+16.0*x*x*x*x*x*x*x*x)/pow(c,16.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">case</span> 9 : value=-32.0*x*exp(-x*x/(c*c))*(945.0*c*c*c*c*c*c*c*c-2520.0*x*x*c*c*c*c*c*c+1512.0*x*x*x*x*c*c*c*c-288.0*x*x*x*x*x*x*c*c+16.0*x*x*x*x*x*x*x*x)/pow(c,18.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">case</span> 10 : value=32.0*exp(-x*x/(c*c))*(-945.0*pow(c,10.0)+9450.0*x*x*c*c*c*c*c*c*c*c-12600.0*x*x*x*x*c*c*c*c*c*c+5040.0*x*x*x*x*x*x*c*c*c*c-720.0*x*x*x*x*x*x*x*x*c*c+32.0*pow(x,10.0))/pow(c,20.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">case</span> 11 : value=-64.0*x*exp(-x*x/(c*c))*(-10395.0*pow(c,10.0)+34650.0*x*x*c*c*c*c*c*c*c*c-27720.0*x*x*x*x*c*c*c*c*c*c+7920.0*x*x*x*x*x*x*c*c*c*c-880.0*x*x*x*x*x*x*x*x*c*c+32.0*pow(x,10.0))/pow(c,22.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">case</span> 12 : value=64.0*exp(-x*x/(c*c))*(10395.0*pow(c,12.0)-124740.0*x*x*pow(c,10.0)+207900.0*x*x*x*x*c*c*c*c*c*c*c*c-110880.0*x*x*x*x*x*x*c*c*c*c*c*c+23760.0*x*x*x*x*x*x*x*x*c*c*c*c-2112.0*pow(x,10.0)*c*c+64.0*pow(x,12.0))/pow(c,24.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> }</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">double</span> _Complex multiquadric(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param) <span class="comment">/* K(x)=sqrt(x^2+c^2) */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> {</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">double</span> c=param[0];</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> {</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">case</span> 0 : value=sqrt(x*x+c*c); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">case</span> 1 : value=1.0/(sqrt(x*x+c*c))*x; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">case</span> 2 : value=c*c/sqrt(pow(x*x+c*c,3.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">case</span> 3 : value=-3.0*x*c*c/sqrt(pow(x*x+c*c,5.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">case</span> 4 : value=3.0*c*c*(4.0*x*x-c*c)/sqrt(pow(x*x+c*c,7.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">case</span> 5 : value=-15.0*x*c*c*(4.0*x*x-3.0*c*c)/sqrt(pow(x*x+c*c,9.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">case</span> 6 : value=45.0*c*c*(8.0*x*x*x*x-12.0*x*x*c*c+c*c*c*c)/sqrt(pow(x*x+c*c,11.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">case</span> 7 : value=-315.0*x*c*c*(8.0*x*x*x*x-20.0*x*x*c*c+5.0*c*c*c*c)/sqrt(pow(x*x+c*c,13.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">case</span> 8 : value=315.0*c*c*(64.0*x*x*x*x*x*x-240.0*x*x*x*x*c*c+120.0*x*x*c*c*c*c-5.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,15.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">case</span> 9 : value=-2835.0*x*c*c*(64.0*x*x*x*x*x*x-336.0*x*x*x*x*c*c+280.0*x*x*c*c*c*c-35.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,17.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">case</span> 10 : value=14175.0*c*c*(128.0*x*x*x*x*x*x*x*x-896.0*x*x*x*x*x*x*c*c+1120.0*x*x*x*x*c*c*c*c-280.0*x*x*c*c*c*c*c*c+7.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,19.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">case</span> 11 : value=-155925.0*x*c*c*(128.0*x*x*x*x*x*x*x*x-1152.0*x*x*x*x*x*x*c*c+2016.0*x*x*x*x*c*c*c*c-840.0*x*x*c*c*c*c*c*c+63.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,21.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">case</span> 12 : value=467775.0*c*c*(1260.0*x*x*c*c*c*c*c*c*c*c-21.0*pow(c,10.0)+512.0*pow(x,10.0)-5760.0*x*x*x*x*x*x*x*x*c*c+13440.0*x*x*x*x*x*x*c*c*c*c-8400.0*x*x*x*x*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,23.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">double</span> _Complex inverse_multiquadric(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param) <span class="comment">/* K(x)=1/sqrt(x^2+c^2) */</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> {</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">double</span> c=param[0];</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">case</span> 0 : value=1.0/sqrt(x*x+c*c); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">case</span> 1 : value=-1.0/(sqrt(pow(x*x+c*c,3.0)))*x; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">case</span> 2 : value=(2.0*x*x-c*c)/sqrt(pow(x*x+c*c,5.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">case</span> 3 : value=-3.0*x*(2.0*x*x-3.0*c*c)/sqrt(pow(x*x+c*c,7.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">case</span> 4 : value=3.0*(8.0*x*x*x*x-24.0*x*x*c*c+3.0*c*c*c*c)/sqrt(pow(x*x+c*c,9.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">case</span> 5 : value=-15.0*x*(8.0*x*x*x*x-40.0*x*x*c*c+15.0*c*c*c*c)/sqrt(pow(x*x+c*c,11.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">case</span> 6 : value=45.0*(16.0*x*x*x*x*x*x-120.0*x*x*x*x*c*c+90.0*x*x*c*c*c*c-5.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,13.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">case</span> 7 : value=-315.0*x*(16.0*x*x*x*x*x*x-168.0*x*x*x*x*c*c+210.0*x*x*c*c*c*c-35.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,15.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">case</span> 8 : value=315.0*(128.0*x*x*x*x*x*x*x*x-1792.0*x*x*x*x*x*x*c*c+3360.0*x*x*x*x*c*c*c*c-1120.0*x*x*c*c*c*c*c*c+35.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,17.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">case</span> 9 : value=-2835.0*x*(128.0*x*x*x*x*x*x*x*x-2304.0*x*x*x*x*x*x*c*c+6048.0*x*x*x*x*c*c*c*c-3360.0*x*x*c*c*c*c*c*c+315.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,19.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">case</span> 10 : value=14175.0*(256.0*pow(x,10.0)-5760.0*x*x*x*x*x*x*x*x*c*c+20160.0*x*x*x*x*x*x*c*c*c*c-16800.0*x*x*x*x*c*c*c*c*c*c+3150.0*x*x*c*c*c*c*c*c*c*c-63.0*pow(c,10.0))/sqrt(pow(x*x+c*c,21.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">case</span> 11 : value=-155925.0*x*(256.0*pow(x,10.0)-7040.0*x*x*x*x*x*x*x*x*c*c+31680.0*x*x*x*x*x*x*c*c*c*c-36960.0*x*x*x*x*c*c*c*c*c*c+11550.0*x*x*c*c*c*c*c*c*c*c-693.0*pow(c,10.0))/sqrt(pow(x*x+c*c,23.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">case</span> 12 : value=467775.0*(231.0*pow(c,12.0)+190080.0*x*x*x*x*x*x*x*x*c*c*c*c-16632.0*x*x*pow(c,10.0)-295680.0*x*x*x*x*x*x*c*c*c*c*c*c+138600.0*x*x*x*x*c*c*c*c*c*c*c*c+1024.0*pow(x,12.0)-33792.0*pow(x,10.0)*c*c)/sqrt(pow(x*x+c*c,25.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">double</span> _Complex logarithm(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param) <span class="comment">/* K(x)=log |x| */</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> {</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> (void)param;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> {</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">case</span> 0 : value=log(fabs(x)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">case</span> 1 : value=(x<0 ? -1 : 1)/fabs(x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">case</span> 2 : value=-1/(x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">case</span> 3 : value=2.0*(x<0 ? -1 : 1)/pow(fabs(x),3.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">case</span> 4 : value=-6.0/(x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">case</span> 5 : value=24.0*(x<0 ? -1 : 1)/pow(fabs(x),5.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">case</span> 6 : value=-120.0/(x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">case</span> 7 : value=720.0*(x<0 ? -1 : 1)/pow(fabs(x),7.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">case</span> 8 : value=-5040.0/(x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">case</span> 9 : value=40320.0*(x<0 ? -1 : 1)/pow(fabs(x),9.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">case</span> 10 : value=-362880.0/pow(x,10.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">case</span> 11 : value=3628800.0*(x<0 ? -1 : 1)/pow(fabs(x),11.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">case</span> 12 : value=-39916800.0/pow(x,12.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">case</span> 13 : value=479001600.0/pow(x,13.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">case</span> 14 : value=-6227020800.0/pow(x,14.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">case</span> 15 : value=87178291200.0/pow(x,15.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">case</span> 16 : value=-1307674368000.0/pow(x,16.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">case</span> 17 : value=20922789888000.0/pow(x,17.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> }</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordtype">double</span> _Complex thinplate_spline(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param) <span class="comment">/* K(x) = x^2 log |x| */</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> {</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> (void)param;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> {</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">case</span> 0 : value=x*x*log(fabs(x)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">case</span> 1 : value=2.0*x*log(fabs(x))+x; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">case</span> 2 : value=2.0*log(fabs(x))+3.0; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">case</span> 3 : value=2.0/x; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">case</span> 4 : value=-2.0/(x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">case</span> 5 : value=4.0/(x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">case</span> 6 : value=-12.0/(x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">case</span> 7 : value=48.0/(x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">case</span> 8 : value=-240.0/(x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">case</span> 9 : value=1440.0/(x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">case</span> 10 : value=-10080.0/(x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">case</span> 11 : value=80640.0/(x*x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">case</span> 12 : value=-725760.0/pow(x,10.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordtype">double</span> _Complex one_over_square(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param) <span class="comment">/* K(x) = 1/x^2 */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> {</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> (void)param;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> {</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">case</span> 0 : value=1.0/(x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">case</span> 1 : value=-2.0/(x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">case</span> 2 : value=6.0/(x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">case</span> 3 : value=-24.0/(x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">case</span> 4 : value=120.0/(x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">case</span> 5 : value=-720.0/(x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">case</span> 6 : value=5040.0/(x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">case</span> 7 : value=-40320.0/(x*x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">case</span> 8 : value=362880.0/pow(x,10.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">case</span> 9 : value=-3628800.0/pow(x,11.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">case</span> 10 : value=39916800.0/pow(x,12.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">case</span> 11 : value=-479001600.0/pow(x,13.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">case</span> 12 : value=6227020800.0/pow(x,14.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> }</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> }</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordtype">double</span> _Complex one_over_modulus(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param) <span class="comment">/* K(x) = 1/|x| */</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> {</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> (void)param;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> {</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">case</span> 0 : value=1.0/fabs(x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">case</span> 1 : value=-1/x/fabs(x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">case</span> 2 : value=2.0/pow(fabs(x),3.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">case</span> 3 : value=-6.0/(x*x*x)/fabs(x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">case</span> 4 : value=24.0/pow(fabs(x),5.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">case</span> 5 : value=-120.0/(x*x*x*x*x)/fabs(x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">case</span> 6 : value=720.0/pow(fabs(x),7.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">case</span> 7 : value=-5040.0/(x*x*x*x*x*x*x)/fabs(x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">case</span> 8 : value=40320.0/pow(fabs(x),9.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">case</span> 9 : value=-362880.0/(x*x*x*x*x*x*x*x*x)/fabs(x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">case</span> 10 : value=3628800.0/pow(fabs(x),11.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">case</span> 11 : value=-39916800.0/pow(x,11.0)/fabs(x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">case</span> 12 : value=479001600.0/pow(fabs(x),13.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> }</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> }</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordtype">double</span> _Complex one_over_x(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param) <span class="comment">/* K(x) = 1/x */</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> {</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> (void)param;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> {</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">case</span> 0 : value=1.0/x; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">case</span> 1 : value=-1.0/(x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">case</span> 2 : value=2.0/(x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">case</span> 3 : value=-6.0/(x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">case</span> 4 : value=24.0/(x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">case</span> 5 : value=-120.0/(x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">case</span> 6 : value=720.0/(x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">case</span> 7 : value=-5040.0/(x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">case</span> 8 : value=40320.0/(x*x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">case</span> 9 : value=-362880.0/pow(x,10.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keywordflow">case</span> 10 : value=3628800.0/pow(x,11.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">case</span> 11 : value=-39916800.0/pow(x,12.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordflow">case</span> 12 : value=479001600.0/pow(x,13.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> }</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordtype">double</span> _Complex inverse_multiquadric3(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param) <span class="comment">/* K(x) = 1/sqrt(x^2+c^2)^3 */</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> {</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordtype">double</span> c=param[0];</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> {</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">case</span> 0 : value=1.0/(sqrt(pow(x*x+c*c,3.0))); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">case</span> 1 : value=-3.0/sqrt(pow(x*x+c*c,5.0))*x; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">case</span> 2 : value=3.0*(4.0*x*x-c*c)/sqrt(pow(x*x+c*c,7.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">case</span> 3 : value=-15.0*x*(4.0*x*x-3.0*c*c)/sqrt(pow(x*x+c*c,9.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">case</span> 4 : value=45.0*(8.0*x*x*x*x-12.0*x*x*c*c+c*c*c*c)/sqrt(pow(x*x+c*c,11.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">case</span> 5 : value=-315.0*x*(8.0*x*x*x*x-20.0*x*x*c*c+5.0*c*c*c*c)/sqrt(pow(x*x+c*c,13.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">case</span> 6 : value=315.0*(64.0*x*x*x*x*x*x-240.0*x*x*x*x*c*c+120.0*x*x*c*c*c*c-5.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,15.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keywordflow">case</span> 7 : value=-2835.0*x*(64.0*x*x*x*x*x*x-336.0*x*x*x*x*c*c+280.0*x*x*c*c*c*c-35.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,17.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">case</span> 8 : value=14175.0*(128.0*x*x*x*x*x*x*x*x-896.0*x*x*x*x*x*x*c*c+1120.0*x*x*x*x*c*c*c*c-280.0*x*x*c*c*c*c*c*c+7.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,19.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">case</span> 9 : value=-155925.0*x*(128.0*x*x*x*x*x*x*x*x-1152.0*x*x*x*x*x*x*c*c+2016.0*x*x*x*x*c*c*c*c-840.0*x*x*c*c*c*c*c*c+63.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,21.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">case</span> 10 : value=467775.0*(512.0*pow(x,10.0)-5760.0*x*x*x*x*x*x*x*x*c*c+13440.0*x*x*x*x*x*x*c*c*c*c-8400.0*x*x*x*x*c*c*c*c*c*c+1260.0*x*x*c*c*c*c*c*c*c*c-21.0*pow(c,10.0))/sqrt(pow(x*x+c*c,23.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">case</span> 11 : value=-6081075.0*x*(512.0*pow(x,10.0)-7040.0*x*x*x*x*x*x*x*x*c*c+21120.0*x*x*x*x*x*x*c*c*c*c-18480.0*x*x*x*x*c*c*c*c*c*c+4620.0*x*x*c*c*c*c*c*c*c*c-231.0*pow(c,10.0))/sqrt(pow(x*x+c*c,25.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">case</span> 12 : value=42567525.0*(1024.0*pow(x,12.0)+27720.0*x*x*x*x*c*c*c*c*c*c*c*c+33.0*pow(c,12.0)-2772.0*x*x*pow(c,10.0)-73920.0*x*x*x*x*x*x*c*c*c*c*c*c+63360.0*x*x*x*x*x*x*x*x*c*c*c*c-16896.0*pow(x,10.0)*c*c)/sqrt(pow(x*x+c*c,27.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> }</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> }</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordtype">double</span> _Complex sinc_kernel(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param) <span class="comment">/* K(x) = sin(cx)/x */</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> {</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordtype">double</span> c=param[0];</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> {</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">case</span> 0 : value=sin(c*x)/x; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">case</span> 1 : value=(cos(c*x)*c*x-sin(c*x))/(x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">case</span> 2 : value=-(sin(c*x)*c*c*x*x+2.0*cos(c*x)*c*x-2.0*sin(c*x))/(x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">case</span> 3 : value=-(cos(c*x)*c*c*c*x*x*x-3.0*sin(c*x)*c*c*x*x-6.0*cos(c*x)*c*x+6.0*sin(c*x))/(x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">case</span> 4 : value=(sin(c*x)*c*c*c*c*x*x*x*x+4.0*cos(c*x)*c*c*c*x*x*x-12.0*sin(c*x)*c*c*x*x-24.0*cos(c*x)*c*x+24.0*sin(c*x))/(x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">case</span> 5 : value=(cos(c*x)*c*c*c*c*c*x*x*x*x*x-5.0*sin(c*x)*c*c*c*c*x*x*x*x-20.0*cos(c*x)*c*c*c*x*x*x+60.0*sin(c*x)*c*c*x*x+120.0*cos(c*x)*c*x-120.0*sin(c*x))/(x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">case</span> 6 : value=-(sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+6.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x-30.0*sin(c*x)*c*c*c*c*x*x*x*x-120.0*cos(c*x)*c*c*c*x*x*x+360.0*sin(c*x)*c*c*x*x+720.0*cos(c*x)*c*x-720.0*sin(c*x))/(x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">case</span> 7 : value=-(cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-7.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-42.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+210.0*sin(c*x)*c*c*c*c*x*x*x*x+840.0*cos(c*x)*c*c*c*x*x*x-2520.0*sin(c*x)*c*c*x*x-5040.0*cos(c*x)*c*x+5040.0*sin(c*x))/(x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">case</span> 8 : value=(sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+8.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-56.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-336.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+1680.0*sin(c*x)*c*c*c*c*x*x*x*x+6720.0*cos(c*x)*c*c*c*x*x*x-20160.0*sin(c*x)*c*c*x*x-40320.0*cos(c*x)*c*x+40320.0*sin(c*x))/(x*x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">case</span> 9 : value=(cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-9.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-72.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+504.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+3024.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x-15120.0*sin(c*x)*c*c*c*c*x*x*x*x-60480.0*cos(c*x)*c*c*c*x*x*x+181440.0*sin(c*x)*c*c*x*x+362880.0*cos(c*x)*c*x-362880.0*sin(c*x))/pow(x,10.0); <span class [...]
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="keywordflow">case</span> 10 : value=-(sin(c*x)*pow(c,10.0)*pow(x,10.0)+10.0*cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-90.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-720.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+5040.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+30240.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x-151200.0*sin(c*x)*c*c*c*c*x*x*x*x-604800.0*cos(c*x)*c*c*c*x*x*x+1814400.0*sin(c*x)*c*c*x*x+3628800.0*cos(c*x)* [...]
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">case</span> 11 : value=-(cos(c*x)*pow(c,11.0)*pow(x,11.0)-11.0*sin(c*x)*pow(c,10.0)*pow(x,10.0)-110.0*cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+990.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+7920.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-55440.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-332640.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+1663200.0*sin(c*x)*c*c*c*c*x*x*x*x+6652800.0*cos(c*x)*c*c*c*x*x*x-1 [...]
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">case</span> 12 : value=(sin(c*x)*pow(c,12.0)*pow(x,12.0)+12.0*cos(c*x)*pow(c,11.0)*pow(x,11.0)-132.0*sin(c*x)*pow(c,10.0)*pow(x,10.0)-1320.0*cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+11880.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+95040.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-665280.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-3991680.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+19958400.0*sin(c*x)*c*c [...]
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> }</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> }</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordtype">double</span> _Complex cosc(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param) <span class="comment">/* K(x) = cos(cx)/x */</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> {</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordtype">double</span> c=param[0];</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordtype">double</span> sign;</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">if</span> (x<0) sign=-1.0; <span class="keywordflow">else</span> sign=1.0;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> x=fabs(x);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> {</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">case</span> 0 : value=cos(c*x)/x; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keywordflow">case</span> 1 : value=-(sin(c*x)*c*x+cos(c*x))/(x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordflow">case</span> 2 : value=(-cos(c*x)*c*c*x*x+2.0*sin(c*x)*c*x+2.0*cos(c*x))/(x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="keywordflow">case</span> 3 : value=(sin(c*x)*c*c*c*x*x*x+3.0*cos(c*x)*c*c*x*x-6.0*sin(c*x)*c*x-6.0*cos(c*x))/(x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">case</span> 4 : value=(cos(c*x)*c*c*c*c*x*x*x*x-4.0*sin(c*x)*c*c*c*x*x*x-12.0*cos(c*x)*c*c*x*x+24.0*sin(c*x)*c*x+24.0*cos(c*x))/(x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">case</span> 5 : value=-(sin(c*x)*c*c*c*c*c*x*x*x*x*x+5.0*cos(c*x)*c*c*c*c*x*x*x*x-20.0*sin(c*x)*c*c*c*x*x*x-60.0*cos(c*x)*c*c*x*x+120.0*sin(c*x)*c*x+120.0*cos(c*x))/(x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">case</span> 6 : value=-(cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-6.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-30.0*cos(c*x)*c*c*c*c*x*x*x*x+120.0*sin(c*x)*c*c*c*x*x*x+360.0*cos(c*x)*c*c*x*x-720.0*sin(c*x)*c*x-720.0*cos(c*x))/(x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordflow">case</span> 7 : value=(sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+7.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-42.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-210.0*cos(c*x)*c*c*c*c*x*x*x*x+840.0*sin(c*x)*c*c*c*x*x*x+2520.0*cos(c*x)*c*c*x*x-5040.0*sin(c*x)*c*x-5040.0*cos(c*x))/(x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">case</span> 8 : value=(cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-8.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-56.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+336.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x+1680.0*cos(c*x)*c*c*c*c*x*x*x*x-6720.0*sin(c*x)*c*c*c*x*x*x-20160.0*cos(c*x)*c*c*x*x+40320.0*sin(c*x)*c*x+40320.0*cos(c*x))/(x*x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">case</span> 9 : value=-(sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+9.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-72.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-504.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+3024.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x+15120.0*cos(c*x)*c*c*c*c*x*x*x*x-60480.0*sin(c*x)*c*c*c*x*x*x-181440.0*cos(c*x)*c*c*x*x+362880.0*sin(c*x)*c*x+362880.0*cos(c*x))/pow(x,10.0); <span clas [...]
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="keywordflow">case</span> 10 : value=-(cos(c*x)*pow(c,10.0)*pow(x,10.0)-10.0*sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-90.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+720.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+5040.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-30240.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-151200.0*cos(c*x)*c*c*c*c*x*x*x*x+604800.0*sin(c*x)*c*c*c*x*x*x+1814400.0*cos(c*x)*c*c*x*x-3628800.0*sin(c*x)* [...]
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">case</span> 11 : value=(sin(c*x)*pow(c,11.0)*pow(x,11.0)+11.0*cos(c*x)*pow(c,10.0)*pow(x,10.0)-110.0*sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-990.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+7920.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+55440.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-332640.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-1663200.0*cos(c*x)*c*c*c*c*x*x*x*x+6652800.0*sin(c*x)*c*c*c*x*x*x+19 [...]
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">case</span> 12 : value=(cos(c*x)*pow(c,12.0)*pow(x,12.0)-12.0*sin(c*x)*pow(c,11.0)*pow(x,11.0)-132.0*cos(c*x)*pow(c,10.0)*pow(x,10.0)+1320.0*sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+11880.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-95040.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-665280.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+3991680.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x+19958400.0*cos(c*x)*c*c [...]
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> value*=pow(sign,der);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> }</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordtype">double</span> _Complex kcot(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param) <span class="comment">/* K(x) = cot(cx) */</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> {</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordtype">double</span> c=param[0];</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> {</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">case</span> 0 : value = 1.0/tan(c * x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">case</span> 1 : value = -(1.0 + pow(1.0/tan(c * x), 2.0)) * c; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">case</span> 2 : value = 2.0 * 1.0/tan(c * x) * (1.0 + pow(1.0/tan(c * x), 2.0)) * c * c; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">case</span> 3 : value = -2.0 * (1.0 + pow(1.0/tan(c * x), 2.0)) * pow(c, 3.0) * (1.0 + 3.0 * pow(1.0/tan(c * x), 2.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">case</span> 4 : value = 8.0 * (1.0 + pow(1.0/tan(c * x), 2.0)) * pow(c, 4.0) * 1.0/tan(c * x) * (2.0 + 3.0 * pow(1.0/tan(c * x), 2.0)); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">case</span> 5 : value = -0.8e1 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.5e1) * (0.15e2 * pow(1.0/tan(c * x), 0.2e1) + 0.15e2 * pow(1.0/tan(c * x), 0.4e1) + 0.2e1); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keywordflow">case</span> 6 : value = 0.16e2 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.6e1) * 1.0/tan(c * x) * (0.60e2 * pow(1.0/tan(c * x), 0.2e1) + 0.45e2 * pow(1.0/tan(c * x), 0.4e1) + 0.17e2); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="keywordflow">case</span> 7 : value = -0.16e2 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.7e1) * (0.525e3 * pow(1.0/tan(c * x), 0.4e1) + 0.315e3 * pow(1.0/tan(c * x), 0.6e1) + 0.231e3 * pow(1.0/tan(c * x), 0.2e1) + 0.17e2); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">case</span> 8 : value = 0.128e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.8e1) * 1.0/tan(c * x) * (0.630e3 * pow(1.0/tan(c * x), 0.4e1) + 0.315e3 * pow(1.0/tan(c * x), 0.6e1) + 0.378e3 * pow(1.0/tan(c * x), 0.2e1) + 0.62e2); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="keywordflow">case</span> 9 : value = -0.128e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.9e1) * (0.6615e4 * pow(1.0/tan(c * x), 0.6e1) + 0.2835e4 * pow(1.0/tan(c * x), 0.8e1) + 0.5040e4 * pow(1.0/tan(c * x), 0.4e1) + 0.1320e4 * pow(1.0/tan(c * x), 0.2e1) + 0.62e2); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">case</span> 10 : value = 0.256e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.10e2) * 1.0/tan(c * x) * (0.37800e5 * pow(1.0/tan(c * x), 0.6e1) + 0.14175e5 * pow(1.0/tan(c * x), 0.8e1) + 0.34965e5 * pow(1.0/tan(c * x), 0.4e1) + 0.12720e5 * pow(1.0/tan(c * x), 0.2e1) + 0.1382e4); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordflow">case</span> 11 : value = -0.256e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.11e2) * (0.467775e6 * pow(1.0/tan(c * x), 0.8e1) + 0.155925e6 * pow(1.0/tan(c * x), 0.10e2) + 0.509355e6 * pow(1.0/tan(c * x), 0.6e1) + 0.238425e6 * pow(1.0/tan(c * x), 0.4e1) + 0.42306e5 * pow(1.0/tan(c * x), 0.2e1) + 0.1382e4); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">case</span> 12 : value = 0.1024e4 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.12e2) * 1.0/tan(c * x) * (0.1559250e7 * pow(1.0/tan(c * x), 0.8e1) + 0.467775e6 * pow(1.0/tan(c * x), 0.10e2) + 0.1954260e7 * pow(1.0/tan(c * x), 0.6e1) + 0.1121670e7 * pow(1.0/tan(c * x), 0.4e1) + 0.280731e6 * pow(1.0/tan(c * x), 0.2e1) + 0.21844e5); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> }</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> }</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordtype">double</span> _Complex one_over_cube(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param)</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> {</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordtype">double</span> value=0.0;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">if</span> (fabs(x)<DBL_EPSILON) value=0.0;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="keywordflow">else</span> <span class="keywordflow">switch</span> (der)</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> {</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="keywordflow">case</span> 0 : value = 1.0/(x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordflow">case</span> 1 : value = -3.0/(x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keywordflow">case</span> 2 : value = 12.0/(x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordflow">case</span> 3 : value = -60.0/(x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">case</span> 4 : value = 360.0/(x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordflow">case</span> 5 : value = -2520.0/(x*x*x*x*x*x*x*x); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="keywordflow">case</span> 6 : value = 20160.0/pow(x, 9.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keywordflow">case</span> 7 : value = -181440.0/pow(x, 10.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">case</span> 8 : value = 1814400.0/pow(x, 11.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">case</span> 9 : value = -19958400.0/pow(x, 12.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordflow">case</span> 10 : value = 239500800.0/pow(x, 13.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="keywordflow">case</span> 11 : value = -3113510400.0/pow(x, 14.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keywordflow">case</span> 12 : value = 43589145600.0/pow(x, 15.0); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keywordflow">default</span> : value=0.0;</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> }</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> }</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="comment">/* \} */</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="comment">/* kernels.c */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/kernels_8h.html b/doc/api/html/kernels_8h.html
new file mode 100644
index 0000000..d7be7dd
--- /dev/null
+++ b/doc/api/html/kernels_8h.html
@@ -0,0 +1,92 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - kernels.h File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">kernels.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Header file with predefined kernels for the fast summation algorithm.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+</div>
+<p><a href="kernels_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga81bf029788afe857325a760743f9fdd3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga81bf029788afe857325a760743f9fdd3"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>gaussian</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga44a58143a1f5c79b45c538134117e091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga44a58143a1f5c79b45c538134117e091"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>multiquadric</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga889c2a1791e42bb8fa5a594588d68a5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga889c2a1791e42bb8fa5a594588d68a5c"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>inverse_multiquadric</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga91be4b7bcc7d3a415e6b9b6ccaec39a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga91be4b7bcc7d3a415e6b9b6ccaec39a7"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>logarithm</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga7723414bb26fd9b1cc76686aeca57425"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7723414bb26fd9b1cc76686aeca57425"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>thinplate_spline</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gaed5f8559b7b7a24674318cb58856602b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaed5f8559b7b7a24674318cb58856602b"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_square</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga635ef40090e33b4917a20ab62913ef05"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga635ef40090e33b4917a20ab62913ef05"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_modulus</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga6a6096569616d5cf9604c514f925581b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6a6096569616d5cf9604c514f925581b"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_x</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga221604ef3a42dc2de4f1ce68831e7524"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga221604ef3a42dc2de4f1ce68831e7524"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>inverse_multiquadric3</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga8946fd3f992262c24477b56cba844873"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8946fd3f992262c24477b56cba844873"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>sinc_kernel</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gab7b7015bc5f2946583e7adbecb2cf630"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab7b7015bc5f2946583e7adbecb2cf630"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>cosc</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:gac693b76a84e9435efc06c1ef26fc7435"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac693b76a84e9435efc06c1ef26fc7435"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>kcot</b> (double x, int der, const double *param)</td></tr>
+<tr class="memitem:ga1deb0e10a0d6cf7f11d8b90ee008eb53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1deb0e10a0d6cf7f11d8b90ee008eb53"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><b>one_over_cube</b> (double x, int der, const double *param)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Header file with predefined kernels for the fast summation algorithm. </p>
+
+<p>Definition in file <a class="el" href="kernels_8h_source.html">kernels.h</a>.</p>
+</div></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/kernels_8h_source.html b/doc/api/html/kernels_8h_source.html
new file mode 100644
index 0000000..9eb0bc9
--- /dev/null
+++ b/doc/api/html/kernels_8h_source.html
@@ -0,0 +1,105 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - kernels.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_ac1c8221356786b534ab925d360822d4.html">fastsum</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">kernels.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="kernels_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: kernels.h 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifndef KERNELS_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span><span class="preprocessor">#define KERNELS_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">double</span> _Complex gaussian(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param); <span class="comment">/* K(x)=exp(-x^2/c^2) */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">double</span> _Complex multiquadric(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param); <span class="comment">/* K(x)=sqrt(x^2+c^2) */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">double</span> _Complex inverse_multiquadric(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param); <span class="comment">/* K(x)=1/sqrt(x^2+c^2) */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">double</span> _Complex logarithm(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param); <span class="comment">/* K(x)=log |x| */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">double</span> _Complex thinplate_spline(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param); <span class="comment">/* K(x) = x^2 log |x| */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">double</span> _Complex one_over_square(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param); <span class="comment">/* K(x) = 1/x^2 */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">double</span> _Complex one_over_modulus(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param); <span class="comment">/* K(x) = 1/|x| */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">double</span> _Complex one_over_x(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param); <span class="comment">/* K(x) = 1/x */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">double</span> _Complex inverse_multiquadric3(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param); <span class="comment">/* K(x) = 1/sqrt(x^2+c^2)^3 */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">double</span> _Complex sinc_kernel(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param); <span class="comment">/* K(x) = sin(cx)/x */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">double</span> _Complex cosc(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param); <span class="comment">/* K(x) = cos(cx)/x */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">double</span> _Complex kcot(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param); <span class="comment">/* K(x) = cot(cx) */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">double</span> _Complex one_over_cube(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> der, <span class="keyword">const</span> <span class="keywordtype">double</span> *param); <span class="comment">/* K(x) = 1/x^3 */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment">/* \} */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor"></span>} <span class="comment">/* extern "C" */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"></span><span class="comment">/* kernels.h */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/lambda_8c_source.html b/doc/api/html/lambda_8c_source.html
new file mode 100644
index 0000000..f205cdc
--- /dev/null
+++ b/doc/api/html/lambda_8c_source.html
@@ -0,0 +1,297 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - lambda.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">lambda.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/* Coefficients for Lanzcos's approximation to the Gamma function. Can be</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * regenerated with Mathematica from file lambda.nb. */</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#if defined(NFFT_LDOUBLE)</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span><span class="preprocessor"> #if LDBL_MANT_DIG > 64</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span> <span class="comment">/* long double 128 bit wide */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"> #define N 24</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"></span> <span class="keyword">static</span> <span class="keyword">const</span> R num[24] =</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> K(3.035162425359883494754028782232869726547E21),</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> K(3.4967568944064301036001605717507506346E21),</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> K(1.9266526566893208886540195401514595829E21),</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> K(6.755170664882727663160830237424406199E20),</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> K(1.691728531049187527800862627495648317E20),</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> K(3.21979351672256057856444116302160246E19),</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> K(4.8378495427140832493758744745481812E18),</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> K(5.8843103809049324230843820398664955E17),</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> K(5.893958514163405862064178891925630E16),</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> K(4.919561837722192829918665308020810E15),</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> K(3.449165802442404074427531228315120E14),</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> K(2.041330296068782505988459692384726E13),</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> K(1.022234822943784007524609706893119E12),</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> K(4.33137871919821354846952908076307E10),</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> K(1.54921950559667418528481770869280E9),</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> K(4.6544421199876191938054157935810E7),</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> K(1.16527806807504975090675074910053E6),</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> K(24024.759267256769471083727721827),</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> K(400.96500811342195582435806376976),</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> K(5.2829901565447826961703902917085),</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> K(0.05289990244125101024092566765994),</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> K(0.0003783467106547406854542665695934),</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> K(1.7219414217921113919596660801124E-6),</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> K(3.747999317071488557713812635427084359354E-9)</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> };</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment">/* static const R denom[24] =</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment"> K(0.0),</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment"> K(1124000727777607680000.0),</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment"> K(4148476779335454720000.0),</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment"> K(6756146673770930688000.0),</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment"> K(6548684852703068697600.0),</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment"> K(4280722865357147142912.0),</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment"> K(2021687376910682741568.0),</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment"> K(720308216440924653696.0),</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment"> K(199321978221066137360.0),</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment"> K(43714229649594412832.0),</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment"> K(7707401101297361068.0),</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment"> K(1103230881185949736.0),</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment"> K(129006659818331295.0),</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment"> K(12363045847086207.0),</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment"> K(971250460939913.0),</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment"> K(62382416421941.0),</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment"> K(3256091103430.0),</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment"> K(136717357942.0),</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment"> K(4546047198.0),</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment"> K(116896626.0),</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment"> K(2240315.0),</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment"> K(30107.0),</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment"> K(253.0),</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment"> K(1.0L)</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment"> };*/</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keyword">static</span> <span class="keyword">const</span> R g = K(20.32098218798637390136718750000000000000);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor"> #elif LDBL_MANT_DIG == 64</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor"></span> <span class="comment">/* long double 96 bit wide */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor"> #define N 17</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor"></span> <span class="keyword">static</span> <span class="keyword">const</span> R num[17] =</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> K(2.715894658327717377557655133124376674911E12),</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> K(3.59017952609791210503852552872112955043E12),</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> K(2.22396659973781496931212735323581871017E12),</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> K(8.5694083451895624818099258668254858834E11),</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> K(2.2988587166874907293359744645339939547E11),</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> K(4.552617168754610815813502794395753410E10),</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> K(6.884887713165178784550917647709216425E9),</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> K(8.11048596140753186476028245385237278E8),</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> K(7.52139159654082231449961362311950170E7),</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> K(5.50924541722426515169752795795495283E6),</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> K(317673.536843541912671493184218236957),</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> K(14268.2798984503552014701437332033752),</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> K(489.361872040326367021390908360178781),</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> K(12.3894133003845444929588321786545861),</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> K(0.218362738950461496394157450728168315),</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> K(0.00239374952205844918669062799606398310),</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> K(0.00001229541408909435212800785616808830746135)</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> };</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment">/* static const R denom[17] =</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment"> K(0.0),</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment"> K(1307674368000.0),</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment"> K(4339163001600.0),</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment"> K(6165817614720.0),</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment"> K(5056995703824.0),</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment"> K(2706813345600.0),</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment"> K(1009672107080.0),</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="comment"> K(272803210680.0),</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment"> K(54631129553.0),</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment"> K(8207628000.0),</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment"> K(928095740.0),</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment"> K(78558480.0),</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment"> K(4899622.0),</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment"> K(218400.0),</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment"> K(6580.0),</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment"> K(120.0),</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment"> K(1.0L)</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment"> };*/</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">static</span> <span class="keyword">const</span> R g = K(12.22522273659706115722656250000000000000);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="preprocessor"> #else</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="preprocessor"></span><span class="preprocessor"> #error Unsupported size of long double</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor"></span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(NFFT_SINGLE)</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor"></span> <span class="comment">/* float */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="preprocessor"> #define N 6</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor"></span> <span class="keyword">static</span> <span class="keyword">const</span> R num[6] =</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> {</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> K(14.02614328749964766195705772850038393570),</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> K(43.74732405540314316089531289293124360129),</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> K(50.59547402616588964511581430025589038612),</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> K(26.90456680562548195593733429204228910299),</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> K(6.595765571169314946316366571954421695196),</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> K(0.6007854010515290065101128585795542383721)</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> };</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment">/* static const R denom[6] =</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment"> K(0.0),</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment"> K(24.0),</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment"> K(50.0),</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="comment"> K(35.0),</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="comment"> K(10.0),</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment"> K(1.0)</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment"> };*/</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">static</span> <span class="keyword">const</span> R g = K(1.428456135094165802001953125000000000000);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="preprocessor"></span> <span class="comment">/* double */</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor"> #define N 13</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor"></span> <span class="keyword">static</span> <span class="keyword">const</span> R num[13] =</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> {</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> K(5.690652191347156388090791033559122686859E7),</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> K(1.037940431163445451906271053616070238554E8),</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> K(8.63631312881385914554692728897786842234E7),</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> K(4.33388893246761383477372374059053331609E7),</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> K(1.46055780876850680841416998279135921857E7),</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> K(3.48171215498064590882071018964774556468E6),</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> K(601859.61716810987866702265336993523025),</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> K(75999.293040145426498753034435989091371),</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> K(6955.9996025153761403563101155151989875),</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> K(449.944556906316811944685860765098840962),</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> K(19.5199278824761748284786096623565213621),</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> K(0.509841665565667618812517864480469450999),</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> K(0.006061842346248906525783753964555936883222)</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> };</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment">/* static const R denom[13] =</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment"> K(0.0),</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment"> K(39916800.0),</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment"> K(120543840.0),</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment"> K(150917976.0),</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment"> K(105258076.0),</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment"> K(45995730.0),</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment"> K(13339535.0),</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment"> K(2637558.0),</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment"> K(357423.0),</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="comment"> K(32670.0),</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment"> K(1925.0),</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment"> K(66.0),</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="comment"> K(1.0)</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="comment"> };*/</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keyword">static</span> <span class="keyword">const</span> R g = K(6.024680040776729583740234375000000000000);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">static</span> <span class="keyword">inline</span> R evaluate_rational(<span class="keyword">const</span> R z_)</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> {</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> R z = z_, s1, s2;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">if</span> (z <= K(1.0))</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> {</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> s1 = num[N - 1];</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> s2 = K(1.0);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">for</span> (i = N - 2; i >= 0; --i)</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> {</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> s1 *= z;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> s2 *= (z + i);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> s1 += num[i];</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> }</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> }</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> {</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> z = K(1.0)/z;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> s1 = num[0];</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> s2 = K(1.0);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">for</span> (i = 1; i < N; ++i)</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> {</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> s1 *= z;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> s2 *= K(1.0) + (i-1)*z;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> s1 += num[i];</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> }</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> }</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">return</span> s1 / s2;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> }</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> R X(lambda)(<span class="keyword">const</span> R z, <span class="keyword">const</span> R eps)</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> {</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keyword">const</span> R d = K(1.0) - eps, zpg = z + g, emh = eps - K(0.5);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">return</span> EXP(-LOG1P(d / (zpg + emh)) * (z + emh)) *</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> POW(KE / (zpg + K(0.5)),d) *</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> (evaluate_rational(z + eps) / evaluate_rational(z + K(1.0)));</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> }</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> R X(lambda2)(<span class="keyword">const</span> R mu, <span class="keyword">const</span> R nu)</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> {</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">if</span> (mu == K(0.0))</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">return</span> K(1.0);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nu == K(0.0))</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">return</span> K(1.0);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">return</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> SQRT(</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> POW((mu + nu + g + K(0.5)) / (K(1.0) * (mu + g + K(0.5))), mu) *</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> POW((mu + nu + g + K(0.5)) / (K(1.0) * (nu + g + K(0.5))), nu) *</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> SQRT(KE * (mu + nu + g + K(0.5)) /</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> ((mu + g + K(0.5)) * (nu + g + K(0.5)))) *</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> (evaluate_rational(mu + nu + K(1.0)) /</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> (evaluate_rational(mu + K(1.0)) * evaluate_rational(nu + K(1.0))))</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> );</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/legendre_8c_source.html b/doc/api/html/legendre_8c_source.html
new file mode 100644
index 0000000..79b1b2b
--- /dev/null
+++ b/doc/api/html/legendre_8c_source.html
@@ -0,0 +1,261 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - legendre.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_25564cacf5a7ef2ec915d9f7b609853e.html">nfsft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">legendre.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: legendre.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "legendre.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">/* One over sqrt(pi) */</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> DK(KSQRTPII,0.56418958354775628694807945156077258584405062932900);</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">static</span> <span class="keyword">inline</span> R alpha_al(<span class="keyword">const</span> <span class="keywordtype">int</span> k, <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keywordflow">if</span> (k > 0)</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordflow">if</span> (k < n)</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordflow">return</span> IF(k%2,K(1.0),K(-1.0));</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordflow">return</span> SQRT(((R)(2*k+1))/((R)(k-n+1)))*SQRT((((R)(2*k+1))/((R)(k+n+1))));</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> }</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">if</span> (n == 0)</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">return</span> K(1.0);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">return</span> IF(n%2,K(0.0),K(-1.0));</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">return</span> K(0.0);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">static</span> <span class="keyword">inline</span> R beta_al(<span class="keyword">const</span> <span class="keywordtype">int</span> k, <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> {</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">if</span> (0 <= k && k < n)</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">return</span> K(1.0);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">return</span> K(0.0);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> }</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keyword">static</span> <span class="keyword">inline</span> R gamma_al(<span class="keyword">const</span> <span class="keywordtype">int</span> k, <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> {</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">if</span> (k == -1)</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">return</span> SQRT(KSQRTPII*nfft_lambda((R)(n),K(0.5)));</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (k <= n)</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">return</span> K(0.0);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">return</span> -SQRT(((R)(k-n))/((R)(k-n+1))*((R)(k+n))/((R)(k+n+1)));</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">void</span> alpha_al_row(R *alpha, <span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> {</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> R *p = alpha;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> *p++ = alpha_al(j,n);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> beta_al_row(R *beta, <span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> R *p = beta;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> *p++ = beta_al(j,n);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">void</span> gamma_al_row(R *gamma, <span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> R *p = gamma;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> *p++ = gamma_al(j,n);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"><a class="code" href="group__nfsft.html#ga6b01d5f2e8b3a026906e977118d7b0d2"> 91</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#ga6b01d5f2e8b3a026906e977118d7b0d2" title="Compute three-term-recurrence coefficients of associated Legendre functions for .">alpha_al_all</a>(R *alpha, <span class="keyword">const</span> <span class="keywordtype">int</ [...]
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> {</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> R *p = alpha;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">for</span> (i = 0; i <= N; i++)</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> *p++ = alpha_al(j,i);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="code" href="group__nfsft.html#gaf0fb6a3993b3c956bea8fa75e3a71290"> 100</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#gaf0fb6a3993b3c956bea8fa75e3a71290" title="Compute three-term-recurrence coefficients of associated Legendre functions for .">beta_al_all</a>(R *alpha, <span class="keyword">const</span> <span class="keywordtype">int</s [...]
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> {</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> R *p = alpha;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">for</span> (i = 0; i <= N; i++)</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> *p++ = beta_al(j,i);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"><a class="code" href="group__nfsft.html#ga88de851c8f9a4c042ad101cb4fb8c51d"> 109</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#ga88de851c8f9a4c042ad101cb4fb8c51d" title="Compute three-term-recurrence coefficients of associated Legendre functions for .">gamma_al_all</a>(R *alpha, <span class="keyword">const</span> <span class="keywordtype">int</ [...]
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> {</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> R *p = alpha;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">for</span> (i = 0; i <= N; i++)</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> *p++ = gamma_al(j,i);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"><a class="code" href="group__nfsft.html#gac5f2f8c36dc4f8ca65f058af6491f163"> 118</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#gac5f2f8c36dc4f8ca65f058af6491f163" title="Evaluates an associated Legendre polynomials using the Clenshaw-algorithm.">eval_al</a>(R *x, R *y, <span class="keyword">const</span> <span class="keywordtype">int</span> size, <span class="keyword">const</span> [...]
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> R *beta, R *gamma)</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> {</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment">/* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment"> * of knots x[0], ..., x[size-1] by the Clenshaw algorithm</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> R a,b,x_val_act,a_old;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> R *x_act, *y_act;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> R *alpha_act, *beta_act, *gamma_act;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> x_act = x;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> y_act = y;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> {</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> a = 1.0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> b = 0.0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> x_val_act = *x_act;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> {</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> *y_act = 1.0;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> {</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> alpha_act = &(alpha[k]);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> beta_act = &(beta[k]);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> gamma_act = &(gamma[k]);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">for</span> (j = k; j > 1; j--)</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> {</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> a_old = a;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> b = a_old*(*gamma_act);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> alpha_act--;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> beta_act--;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> gamma_act--;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> }</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> x_act++;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> y_act++;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> }</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> }</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"><a class="code" href="group__nfsft.html#ga1bc5682379de94e87031afa38e02675d"> 163</a></span> <span class="keywordtype">int</span> <a class="code" href="group__nfsft.html#ga1bc5682379de94e87031afa38e02675d" title="Evaluates an associated Legendre polynomials using the Clenshaw-algorithm if it no exceeds a given t...">eval_al_thresh</a>(R *x, R *y, <span class="keyword">const</span> <span class="keywordtype">int</span> size, [...]
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> R *beta, R *gamma, R threshold)</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> {</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="comment">/* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="comment"> * of knots x[0], ..., x[size-1] by the Clenshaw algorithm</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> R a,b,x_val_act,a_old;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> R *x_act, *y_act;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> R *alpha_act, *beta_act, *gamma_act;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> x_act = x;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> y_act = y;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> {</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> a = 1.0;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> b = 0.0;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> x_val_act = *x_act;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> {</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> *y_act = 1.0;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> {</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> alpha_act = &(alpha[k]);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> beta_act = &(beta[k]);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> gamma_act = &(gamma[k]);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">for</span> (j = k; j > 1; j--)</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> {</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> a_old = a;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> b = a_old*(*gamma_act);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> alpha_act--;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> beta_act--;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> gamma_act--;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> }</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">if</span> (fabs(*y_act) > threshold)</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> {</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> }</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> }</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> x_act++;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> y_act++;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> }</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/legendre_8h_source.html b/doc/api/html/legendre_8h_source.html
new file mode 100644
index 0000000..cf140b5
--- /dev/null
+++ b/doc/api/html/legendre_8h_source.html
@@ -0,0 +1,92 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - legendre.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_25564cacf5a7ef2ec915d9f7b609853e.html">nfsft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">legendre.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: legendre.h 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#ifndef LEGENDRE_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"></span><span class="preprocessor">#define LEGENDRE_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">void</span> alpha_al_row(R *alpha, <span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">void</span> beta_al_row(R *beta, <span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">void</span> gamma_al_row(R *gamma, <span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#ga6b01d5f2e8b3a026906e977118d7b0d2" title="Compute three-term-recurrence coefficients of associated Legendre functions for .">alpha_al_all</a>(R *alpha, <span class="keyword">const</span> <span class="keywordtype">int</span> N);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#gaf0fb6a3993b3c956bea8fa75e3a71290" title="Compute three-term-recurrence coefficients of associated Legendre functions for .">beta_al_all</a>(R *beta, <span class="keyword">const</span> <span class="keywordtype">int</span> N);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#ga88de851c8f9a4c042ad101cb4fb8c51d" title="Compute three-term-recurrence coefficients of associated Legendre functions for .">gamma_al_all</a>(R *gamma, <span class="keyword">const</span> <span class="keywordtype">int</span> N);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#gac5f2f8c36dc4f8ca65f058af6491f163" title="Evaluates an associated Legendre polynomials using the Clenshaw-algorithm.">eval_al</a>(R *x, R *y, <span class="keyword">const</span> <span class="keywordtype">int</span> size, <span class="keyword">const</span> <span class="keywordtype">int</span> k, R *alpha,</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> R *beta, R *gamma);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">int</span> <a class="code" href="group__nfsft.html#ga1bc5682379de94e87031afa38e02675d" title="Evaluates an associated Legendre polynomials using the Clenshaw-algorithm if it no exceeds a given t...">eval_al_thresh</a>(R *x, R *y, <span class="keyword">const</span> <span class="keywordtype">int</span> size, <span class="keyword">const</span> <span class="keywordtype">int</span> k, R *a [...]
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> R *beta, R *gamma, R threshold);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment">/* \} */</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/linogram__fft__test_8c.html b/doc/api/html/linogram__fft__test_8c.html
new file mode 100644
index 0000000..24f3d3f
--- /dev/null
+++ b/doc/api/html/linogram__fft__test_8c.html
@@ -0,0 +1,98 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - linogram_fft_test.c File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">linogram_fft_test.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>NFFT-based pseudo-polar FFT and inverse.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="linogram__fft__test_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga9a5ff165ab1e23af77ab6f6108bb6310"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9a5ff165ab1e23af77ab6f6108bb6310"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310">linogram_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:ga9a5ff165ab1e23af77ab6f6108bb6310"><td class="mdescLeft"> </td><td class="mdescRight">Generates the points x with weights w for the linogram grid with T slopes and R offsets. <br/></td></tr>
+<tr class="memitem:ga708f5c41add2af92a97339dee1c068dc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga708f5c41add2af92a97339dee1c068dc"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#ga708f5c41add2af92a97339dee1c068dc">linogram_dft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:ga708f5c41add2af92a97339dee1c068dc"><td class="mdescLeft"> </td><td class="mdescRight">discrete pseudo-polar FFT <br/></td></tr>
+<tr class="memitem:gaea5025fe751ace25f818ecb3cfc16444"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaea5025fe751ace25f818ecb3cfc16444"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#gaea5025fe751ace25f818ecb3cfc16444">linogram_fft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:gaea5025fe751ace25f818ecb3cfc16444"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based pseudo-polar FFT. <br/></td></tr>
+<tr class="memitem:gaf44988058d3000a477c046c172c26265"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf44988058d3000a477c046c172c26265"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#gaf44988058d3000a477c046c172c26265">inverse_linogram_fft</a> (fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a>, int m)</td></tr>
+<tr class="memdesc:gaf44988058d3000a477c046c172c26265"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based inverse pseudo-polar FFT. <br/></td></tr>
+<tr class="memitem:gac2a323224e3346e37714575d49c65432"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac2a323224e3346e37714575d49c65432"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432">comparison_fft</a> (FILE *fp, int N, int T, int R)</td></tr>
+<tr class="memdesc:gac2a323224e3346e37714575d49c65432"><td class="mdescLeft"> </td><td class="mdescRight">Comparison of the FFTW, linogram FFT, and inverse linogram FFT. <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__linogramm.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">test program for various parameters <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ga89f1a3516fab4c4d4d274df955af639b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga89f1a3516fab4c4d4d274df955af639b"></a>
+double </td><td class="memItemRight" valign="bottom"><b>GLOBAL_elapsed_time</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>NFFT-based pseudo-polar FFT and inverse. </p>
+<p>Computes the NFFT-based pseudo-polar FFT and its inverse. </p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2006 </dd></dl>
+
+<p>Definition in file <a class="el" href="linogram__fft__test_8c_source.html">linogram_fft_test.c</a>.</p>
+</div></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/linogram__fft__test_8c_source.html b/doc/api/html/linogram__fft__test_8c_source.html
new file mode 100644
index 0000000..c1d5981
--- /dev/null
+++ b/doc/api/html/linogram__fft__test_8c_source.html
@@ -0,0 +1,472 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - linogram_fft_test.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">linogram_fft_test.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="linogram__fft__test_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: linogram_fft_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">double</span> GLOBAL_elapsed_time;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310"> 52</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310" title="Generates the points x with weights w for the linogram grid with T slopes and R offsets.">linogram_grid</a>(<span class="k [...]
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">int</span> t, r;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">double</span> W=(double)T*(((<span class="keywordtype">double</span>)R/2.0)*((double)R/2.0)+1.0/4.0);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">for</span>(t=-T/2; t<T/2; t++)</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> {</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">for</span>(r=-R/2; r<R/2; r++)</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">if</span>(t<0)</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> {</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> x[2*((t+T/2)*R+(r+R/2))+0] = (<span class="keywordtype">double</span>)r/R;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)4*(t+T/4)/T*r/R;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> {</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> x[2*((t+T/2)*R+(r+R/2))+0] = -(<span class="keywordtype">double</span>)4*(t-T/4)/T*r/R;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)r/R;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">if</span> (r==0)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> w[(t+T/2)*R+(r+R/2)] = fabs((<span class="keywordtype">double</span>)r)/W;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> }</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">return</span> T*R; </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__linogramm.html#ga708f5c41add2af92a97339dee1c068dc"> 82</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__linogramm.html#ga708f5c41add2af92a97339dee1c068dc" title="discrete pseudo-polar FFT">linogram_dft</a>(fftw_complex *f_hat, <span class="keywordtype">int</span> NN, fftw_complex *f, [...]
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> {</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> ticks t0, t1;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">int</span> j,k; </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan; </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">double</span> *x, *w; </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">int</span> M=T*R; </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> N[0]=NN; n[0]=2*N[0]; </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> N[1]=NN; n[1]=2*N[1]; </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <a class="code" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310" title="Generates the points x with weights w for the linogram grid with T slopes and R offsets.">linogram_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> {</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = f_hat[k];</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> t0 = getticks();</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> nfft_trafo_direct(&my_nfft_plan);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> t1 = getticks();</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> f[j] = my_nfft_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__linogramm.html#gaea5025fe751ace25f818ecb3cfc16444"> 141</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__linogramm.html#gaea5025fe751ace25f818ecb3cfc16444" title="NFFT-based pseudo-polar FFT.">linogram_fft</a>(fftw_complex *f_hat, <span class="keywordtype">int</span> NN, fftw_complex [...]
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> {</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> ticks t0, t1;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordtype">int</span> j,k; </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan; </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordtype">double</span> *x, *w; </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordtype">int</span> M=T*R; </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> N[0]=NN; n[0]=2*N[0]; </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> N[1]=NN; n[1]=2*N[1]; </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <a class="code" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310" title="Generates the points x with weights w for the linogram grid with T slopes and R offsets.">linogram_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> {</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> nfft_precompute_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> nfft_precompute_full_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = f_hat[k];</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> t0 = getticks();</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> t1 = getticks();</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> f[j] = my_nfft_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> }</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__linogramm.html#gaf44988058d3000a477c046c172c26265"> 209</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__linogramm.html#gaf44988058d3000a477c046c172c26265" title="NFFT-based inverse pseudo-polar FFT.">inverse_linogram_fft</a>(fftw_complex *f, <span class="keywordtype">int</span> T, <s [...]
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> {</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> ticks t0, t1;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordtype">int</span> j,k; </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan; </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_infft_plan; </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordtype">double</span> *x, *w; </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordtype">int</span> l; </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordtype">int</span> M=T*R; </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> N[0]=NN; n[0]=2*N[0]; </div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> N[1]=NN; n[1]=2*N[1]; </div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> solver_init_advanced_complex(&my_infft_plan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT );</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <a class="code" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310" title="Generates the points x with weights w for the linogram grid with T slopes and R offsets.">linogram_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> {</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j] = f[j];</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j] = w[j];</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> }</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> nfft_precompute_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> nfft_precompute_full_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">if</span>(my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];j++)</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];k++)</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> {</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]+k]=</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> (sqrt(pow(j-my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2,2)+pow(k-my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]/2,2))>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0 [...]
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> }</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = 0.0 + _Complex_I*0.0;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> t0 = getticks();</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> solver_before_loop_complex(&my_infft_plan);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">if</span> (max_i<1)</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> {</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> l=1;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>[k];</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> }</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> {</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">for</span>(l=1;l<=<a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>;l++)</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> {</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_infft_plan);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> }</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> }</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> t1 = getticks();</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> f_hat[k] = my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k];</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_infft_plan);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> }</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432"> 309</a></span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432" title="Comparison of the FFTW, linogram FFT, and inverse linogram FFT.">comparison_fft</a>(FILE *fp, <span class="keywordtype">int</span> N, <span class="keywordtype [...]
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> {</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> ticks t0, t1;</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> fftw_plan my_fftw_plan;</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> fftw_complex *f_hat,*f;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keywordtype">int</span> m,k;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordtype">double</span> t_fft, t_dft_linogram;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> f_hat = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*N*N);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> f = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*(T*R/4)*5);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> my_fftw_plan = fftw_plan_dft_2d(N,N,f_hat,f,FFTW_BACKWARD,FFTW_MEASURE);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">for</span>(k=0; k<N*N; k++)</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> f_hat[k] = (((<span class="keywordtype">double</span>)rand())/RAND_MAX) + _Complex_I* (((double)rand())/RAND_MAX);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> t0 = getticks();</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">for</span>(m=0;m<65536/N;m++)</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> {</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> fftw_execute(my_fftw_plan);</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="comment">/* touch */</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> f_hat[2]=2*f_hat[0];</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> }</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> t1 = getticks();</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> t_fft=N*GLOBAL_elapsed_time/65536;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keywordflow">if</span>(N<256)</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> {</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <a class="code" href="group__applications__polarFFT__linogramm.html#ga708f5c41add2af92a97339dee1c068dc" title="discrete pseudo-polar FFT">linogram_dft</a>(f_hat,N,f,T,R,m);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> t_dft_linogram=GLOBAL_elapsed_time;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> }</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="keywordflow">for</span> (m=3; m<=9; m+=3)</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> {</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">if</span>((m==3)&&(N<256))</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> fprintf(fp,<span class="stringliteral">"%d\t&\t&\t%1.1e&\t%1.1e&\t%d\t"</span>,N,t_fft,t_dft_linogram,m);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">if</span>(m==3)</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> fprintf(fp,<span class="stringliteral">"%d\t&\t&\t%1.1e&\t &\t%d\t"</span>,N,t_fft,m);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> fprintf(fp,<span class="stringliteral">" \t&\t&\t &\t &\t%d\t"</span>,m);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> printf(<span class="stringliteral">"N=%d\tt_fft=%1.1e\tt_dft_linogram=%1.1e\tm=%d\t"</span>,N,t_fft,t_dft_linogram,m);</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <a class="code" href="group__applications__polarFFT__linogramm.html#gaea5025fe751ace25f818ecb3cfc16444" title="NFFT-based pseudo-polar FFT.">linogram_fft</a>(f_hat,N,f,T,R,m);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> fprintf(fp,<span class="stringliteral">"%1.1e&\t"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> printf(<span class="stringliteral">"t_linogram=%1.1e\t"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <a class="code" href="group__applications__polarFFT__linogramm.html#gaf44988058d3000a477c046c172c26265" title="NFFT-based inverse pseudo-polar FFT.">inverse_linogram_fft</a>(f,T,R,f_hat,N,m+3,m);</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">if</span>(m==9)</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> fprintf(fp,<span class="stringliteral">"%1.1e\\\\\\hline\n"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> fprintf(fp,<span class="stringliteral">"%1.1e\\\\\n"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> printf(<span class="stringliteral">"t_ilinogram=%1.1e\n"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> }</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> fflush(fp);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> }</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__linogramm.html#ga3c04138a5bfe5d72780bb7e82a18e627"> 374</a></span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> {</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordtype">int</span> N; </div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="keywordtype">int</span> T, R; </div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordtype">int</span> M; </div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordtype">double</span> *x, *w; </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> fftw_complex *f_hat, *f, *f_direct, *f_tilde;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>; </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordtype">double</span> temp1, temp2, E_max=0.0;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> FILE *fp1, *fp2;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordtype">char</span> filename[30];</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordtype">int</span> logN;</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="keywordflow">if</span>( argc!=4 )</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> {</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> printf(<span class="stringliteral">"linogram_fft_test N T R \n"</span>);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> printf(<span class="stringliteral">"N linogram FFT of size NxN \n"</span>);</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> printf(<span class="stringliteral">"T number of slopes \n"</span>);</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> printf(<span class="stringliteral">"R number of offsets \n"</span>);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> printf(<span class="stringliteral">"\nHence, comparison FFTW, linogram FFT and inverse linogram FFT\n"</span>);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> fp1=fopen(<span class="stringliteral">"linogram_comparison_fft.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">if</span> (fp1==NULL)</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">for</span> (logN=4; logN<=8; logN++)</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <a class="code" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432" title="Comparison of the FFTW, linogram FFT, and inverse linogram FFT.">comparison_fft</a>(fp1,(1U<< logN), 3*(1U<< logN), 3*(1U<< (logN-1)));</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> fclose(fp1);</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> exit(-1);</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> }</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> N = atoi(argv[1]);</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> T = atoi(argv[2]);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> R = atoi(argv[3]);</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> printf(<span class="stringliteral">"N=%d, linogram grid with T=%d, R=%d => "</span>,N,T,R);</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*T*R/2*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*T*R/4*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> f_hat = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*N*N);</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> f = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*5*T*R/4); <span class="comment">/* 4/pi*log(1+sqrt(2)) = 1.122... < 1.25 */</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> f_direct = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*5*T*R/4);</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> f_tilde = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*N*N);</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> M=<a class="code" href="group__applications__polarFFT__linogramm.html#ga9a5ff165ab1e23af77ab6f6108bb6310" title="Generates the points x with weights w for the linogram grid with T slopes and R offsets.">linogram_grid</a>(T,R,x,w); printf(<span class="stringliteral">"M=%d.\n"</span>,M);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> fp1=fopen(<span class="stringliteral">"input_data_r.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> fp2=fopen(<span class="stringliteral">"input_data_i.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keywordflow">if</span> ((fp1==NULL) || (fp2==NULL))</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keywordflow">for</span>(k=0;k<N*N;k++)</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> {</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> fscanf(fp1,<span class="stringliteral">"%le "</span>,&temp1);</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> fscanf(fp2,<span class="stringliteral">"%le "</span>,&temp2);</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> f_hat[k]=temp1+_Complex_I*temp2;</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> }</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> fclose(fp1);</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> fclose(fp2);</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <a class="code" href="group__applications__polarFFT__linogramm.html#ga708f5c41add2af92a97339dee1c068dc" title="discrete pseudo-polar FFT">linogram_dft</a>(f_hat,N,f_direct,T,R,1);</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="comment">// linogram_fft(f_hat,N,f_direct,T,R,12);</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> printf(<span class="stringliteral">"\nTest of the linogram FFT: \n"</span>);</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> fp1=fopen(<span class="stringliteral">"linogram_fft_error.dat"</span>,<span class="stringliteral">"w+"</span>);</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keywordflow">for</span> (m=1; m<=12; m++)</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> {</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <a class="code" href="group__applications__polarFFT__linogramm.html#gaea5025fe751ace25f818ecb3cfc16444" title="NFFT-based pseudo-polar FFT.">linogram_fft</a>(f_hat,N,f,T,R,m);</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> E_max=X(error_l_infty_complex)(f_direct,f,M);</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="comment">//E_max=X(error_l_2_complex)(f_direct,f,M);</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> printf(<span class="stringliteral">"m=%2d: E_max = %e\n"</span>,m,E_max);</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> fprintf(fp1,<span class="stringliteral">"%e\n"</span>,E_max);</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> }</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> fclose(fp1);</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keywordflow">for</span> (m=3; m<=9; m+=3)</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> {</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> printf(<span class="stringliteral">"\nTest of the inverse linogram FFT for m=%d: \n"</span>,m);</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> sprintf(filename,<span class="stringliteral">"linogram_ifft_error%d.dat"</span>,m);</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> fp1=fopen(filename,<span class="stringliteral">"w+"</span>);</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">for</span> (max_i=0; max_i<=20; max_i+=2)</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> {</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <a class="code" href="group__applications__polarFFT__linogramm.html#gaf44988058d3000a477c046c172c26265" title="NFFT-based inverse pseudo-polar FFT.">inverse_linogram_fft</a>(f_direct,T,R,f_tilde,N,max_i,m);</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> E_max=X(error_l_infty_complex)(f_hat,f_tilde,N*N);</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> printf(<span class="stringliteral">"%3d iterations: E_max = %e\n"</span>,max_i,E_max);</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> fprintf(fp1,<span class="stringliteral">"%e\n"</span>,E_max);</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> }</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> fclose(fp1);</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> }</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_direct);</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_tilde);</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> }</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/malloc_8c_source.html b/doc/api/html/malloc_8c_source.html
new file mode 100644
index 0000000..4bfed74
--- /dev/null
+++ b/doc/api/html/malloc_8c_source.html
@@ -0,0 +1,116 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - malloc.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">malloc.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include<stdlib.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "api.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> X(malloc_type_function) X(malloc_hook) = 0;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> X(free_type_function) X(free_hook) = 0;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> X(die_type_function) X(die_hook) = 0;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keywordtype">void</span> *X(malloc)(<span class="keywordtype">size_t</span> n)</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keywordtype">void</span> *p;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordflow">if</span> (X(malloc_hook))</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordflow">return</span> <a class="code" href="nfft3_8h.html#aa578dec914d95bda5a2fad3fbd90c76f">nfft_malloc_hook</a>(n);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordflow">if</span> (n == 0)</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> n = 1;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> p = Z(malloc)(n);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">if</span> (!p)</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> X(die)(STRINGIZE(X(malloc)) <span class="stringliteral">": out of memory\n"</span>);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">return</span> p;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">void</span> X(free)(<span class="keywordtype">void</span> *p)</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> {</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">if</span> (p)</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> {</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">if</span> (X(free_hook))</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> {</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> X(free_hook)(p);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> }</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> Z(free)(p);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">void</span> X(die)(<span class="keywordtype">char</span> *s)</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> {</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">if</span> (X(die_hook))</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> X(die_hook)(s);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> exit(EXIT_FAILURE);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/modules.html b/doc/api/html/modules.html
new file mode 100644
index 0000000..ebb24aa
--- /dev/null
+++ b/doc/api/html/modules.html
@@ -0,0 +1,80 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - Modules
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Modules</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all modules:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__nfftutil.html" target="_self">Util - Auxilliary functions</a></td><td class="desc">Include header for FFTW3 library for its complex type</td></tr>
+<tr id="row_1_"><td class="entry"><img id="arr_1_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_')"/><a class="el" href="group__examples.html" target="_self">Examples</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_1_0_" src="ftv2mlastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('1_0_')"/><a class="el" href="group__examples__solver.html" target="_self">Solver component</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__examples__solver__glacier.html" target="_self">Reconstruction of a glacier from scattered data</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img id="arr_2_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_')"/><a class="el" href="group__applications.html" target="_self">Applications</a></td><td class="desc"></td></tr>
+<tr id="row_2_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__fastgauss.html" target="_self">Fast Gauss transfrom with complex parameter</a></td><td class="desc"></td></tr>
+<tr id="row_2_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_1_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_1_')"/><a class="el" href="group__applications__fastsum.html" target="_self">Fast summation</a></td><td class="desc">Required for test if (ths->k == one_over_x)</td></tr>
+<tr id="row_2_1_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__fastsum__matlab.html" target="_self">fastsum_matlab</a></td><td class="desc"></td></tr>
+<tr id="row_2_1_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__applications__fastsum__test.html" target="_self">fastsum_test</a></td><td class="desc"></td></tr>
+<tr id="row_2_2_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_2_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_2_')"/><a class="el" href="group__applications__fastsumS2.html" target="_self">Fast summation of radial functions on the sphere</a></td><td class="desc"></td></tr>
+<tr id="row_2_2_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__applications__fastsumS2__test.html" target="_self">fastsumS2_matlab</a></td><td class="desc"></td></tr>
+<tr id="row_2_3_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_3_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_3_')"/><a class="el" href="group__applications__iterS2.html" target="_self">Iterative reconstruction on the sphere S2</a></td><td class="desc"></td></tr>
+<tr id="row_2_3_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__applications__iterS2__matlab.html" target="_self">iterS2_matlab</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_4_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_4_')"/><a class="el" href="group__applications__mri.html" target="_self">Transforms in magnetic resonance imaging</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_4_0_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_4_0_')"/><a class="el" href="group__applications__mri2d.html" target="_self">2D transforms</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri2d__construct__data__2d.html" target="_self">construct_data_2d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri2d__construct__data__inh__2d1d.html" target="_self">construct_data__inh_2d1d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_2_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri2d__construct__data__inh__3d.html" target="_self">construct_data_inh_3d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_3_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri2d__reconstruct__data__2d.html" target="_self">reconstruct_data_2d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_4_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri2d__construct__data__gridding.html" target="_self">construct_data_gridding</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_5_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri2d__reconstruct__data__inh__2d1d.html" target="_self">reconstruct_data__inh_2d1d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_6_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri2d__reconstruct__data__inh__3d.html" target="_self">reconstruct_data_inh_3d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_0_7_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__applications__mri2d__construct__data__inh__nnfft.html" target="_self">construct_data_inh_nnfft</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_1_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_4_1_" src="ftv2mlastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('2_4_1_')"/><a class="el" href="group__applications__mri3d.html" target="_self">3D transforms</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_1_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri3d__construct__data__1d2d.html" target="_self">construct_data_1d2d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_1_1_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri3d__construct__data__3d.html" target="_self">construct_data_3d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_1_2_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri3d__reconstruct__data__1d2d.html" target="_self">reconstruct_data_1d2d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_1_3_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__mri3d__reconstruct__data__3d.html" target="_self">reconstruct_data_3d</a></td><td class="desc"></td></tr>
+<tr id="row_2_4_1_4_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__applications__mri3d__reconstruct__data__gridding.html" target="_self">reconstruct_data_gridding</a></td><td class="desc"></td></tr>
+<tr id="row_2_5_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_5_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_5_')"/><a class="el" href="group__applications__polarFFT.html" target="_self">Polar FFT</a></td><td class="desc"></td></tr>
+<tr id="row_2_5_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__polarFFT__linogramm.html" target="_self">linogram_fft_test</a></td><td class="desc"></td></tr>
+<tr id="row_2_5_1_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__applications__polarFFT__mpolar.html" target="_self">mpolar_fft_test</a></td><td class="desc"></td></tr>
+<tr id="row_2_5_2_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__applications__polarFFT__polar.html" target="_self">polar_fft_test</a></td><td class="desc"></td></tr>
+<tr id="row_2_6_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img id="arr_2_6_" src="ftv2mlastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('2_6_')"/><a class="el" href="group__applications__quadratureS2.html" target="_self">Fast evaluation of quadrature formulae on the sphere</a></td><td class="desc"></td></tr>
+<tr id="row_2_6_0_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__applications__quadratureS2__test.html" target="_self">quadratureS2_test</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__nfsft.html" target="_self">Nfsft</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/mpolar__fft__test_8c.html b/doc/api/html/mpolar__fft__test_8c.html
new file mode 100644
index 0000000..fd24b78
--- /dev/null
+++ b/doc/api/html/mpolar__fft__test_8c.html
@@ -0,0 +1,97 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - mpolar_fft_test.c File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">mpolar_fft_test.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>NFFT-based polar FFT and inverse on modified polar grid.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="mpolar__fft__test_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga08d0441aceedbcb98b985ee5aa121952"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952">mpolar_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:ga08d0441aceedbcb98b985ee5aa121952"><td class="mdescLeft"> </td><td class="mdescRight">Generates the points <img class="formulaInl" alt="$x_{t,j}$" src="form_115.png"/> with weights <img class="formulaInl" alt="$w_{t,j}$" src="form_116.png"/> for the modified polar grid with <img class="formulaInl" alt="$T$" src="form_117.png"/> angles and <img class="formulaInl" alt="$R$" src="form_118.png"/> offsets. <a href="group__applications__polarFFT__mpolar.html#ga08d0441 [...]
+<tr class="memitem:gaee9902054200ea50d90b5d290bff8c71"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaee9902054200ea50d90b5d290bff8c71"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#gaee9902054200ea50d90b5d290bff8c71">mpolar_dft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:gaee9902054200ea50d90b5d290bff8c71"><td class="mdescLeft"> </td><td class="mdescRight">discrete mpolar FFT <br/></td></tr>
+<tr class="memitem:ga55b2f979a5c69176a73f59eb0312b53d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga55b2f979a5c69176a73f59eb0312b53d"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga55b2f979a5c69176a73f59eb0312b53d">mpolar_fft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:ga55b2f979a5c69176a73f59eb0312b53d"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based mpolar FFT. <br/></td></tr>
+<tr class="memitem:ga5d0560e898b722ee5fe09acc485bbec8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5d0560e898b722ee5fe09acc485bbec8"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga5d0560e898b722ee5fe09acc485bbec8">inverse_mpolar_fft</a> (fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a>, int m)</td></tr>
+<tr class="memdesc:ga5d0560e898b722ee5fe09acc485bbec8"><td class="mdescLeft"> </td><td class="mdescRight">inverse NFFT-based mpolar FFT <br/></td></tr>
+<tr class="memitem:ga522ff84df31c08a1f237ad0ec7ce4ac5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga522ff84df31c08a1f237ad0ec7ce4ac5"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga522ff84df31c08a1f237ad0ec7ce4ac5">comparison_fft</a> (FILE *fp, int N, int T, int R)</td></tr>
+<tr class="memdesc:ga522ff84df31c08a1f237ad0ec7ce4ac5"><td class="mdescLeft"> </td><td class="mdescRight">Comparison of the FFTW, mpolar FFT, and inverse mpolar FFT. <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__mpolar.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">test program for various parameters <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ga89f1a3516fab4c4d4d274df955af639b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga89f1a3516fab4c4d4d274df955af639b"></a>
+double </td><td class="memItemRight" valign="bottom"><b>GLOBAL_elapsed_time</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>NFFT-based polar FFT and inverse on modified polar grid. </p>
+<p>Computes the NFFT-based polar FFT and its inverse on a modified polar grid for various parameters. </p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2006 </dd></dl>
+
+<p>Definition in file <a class="el" href="mpolar__fft__test_8c_source.html">mpolar_fft_test.c</a>.</p>
+</div></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/mpolar__fft__test_8c_source.html b/doc/api/html/mpolar__fft__test_8c_source.html
new file mode 100644
index 0000000..bbeb25d
--- /dev/null
+++ b/doc/api/html/mpolar__fft__test_8c_source.html
@@ -0,0 +1,487 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - mpolar_fft_test.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mpolar_fft_test.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="mpolar__fft__test_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: mpolar_fft_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">double</span> GLOBAL_elapsed_time;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952"> 63</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952" title="Generates the points with weights for the modified polar grid with angles and offsets...">mpolar_grid</a>(<span class="keywo [...]
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> {</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">int</span> t, r;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">double</span> W;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">int</span> R2=2*ceil(sqrt(2.0)*R/2);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">double</span> xx, yy;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordtype">int</span> M=0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">for</span>(t=-T/2; t<T/2; t++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> {</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">for</span>(r=-R2/2; r<R2/2; r++)</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> xx = (double)r/R*cos(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*t/T);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> yy = (double)r/R*sin(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*t/T);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">if</span> ( ((-0.5-1.0/(<span class="keywordtype">double</span>)R)<=xx) & (xx<=(0.5+1.0/(<span class="keywordtype">double</span>)R)) &</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> ((-0.5-1.0/(<span class="keywordtype">double</span>)R)<=yy) & (yy<=(0.5+1.0/(<span class="keywordtype">double</span>)R)) )</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> {</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> x[2*M+0] = xx;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> x[2*M+1] = yy;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">if</span> (r==0)</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> w[M] = 1.0/4.0;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> w[M] = fabs((<span class="keywordtype">double</span>)r);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> M++; </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> W=0.0;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">for</span> (t=0; t<M; t++)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> W+=w[t];</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">for</span> (t=0; t<M; t++)</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> w[t]/=W;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">return</span> M; </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__mpolar.html#gaee9902054200ea50d90b5d290bff8c71"> 106</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__mpolar.html#gaee9902054200ea50d90b5d290bff8c71" title="discrete mpolar FFT">mpolar_dft</a>(fftw_complex *f_hat, <span class="keywordtype">int</span> NN, fftw_complex *f, <span class=" [...]
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> {</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> ticks t0, t1;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">int</span> j,k; </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan; </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">double</span> *x, *w; </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">int</span> M; </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> N[0]=NN; n[0]=2*N[0]; </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> N[1]=NN; n[1]=2*N[1]; </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*(T/2)*R*(<span class="keyword">sizeof</span>(double)));</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*(T*R)/4*(<span class="keyword">sizeof</span>(double)));</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> M=<a class="code" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952" title="Generates the points with weights for the modified polar grid with angles and offsets...">mpolar_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> {</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> }</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = f_hat[k];</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> t0 = getticks();</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> nfft_trafo_direct(&my_nfft_plan);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> t1 = getticks();</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> f[j] = my_nfft_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> }</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__mpolar.html#ga55b2f979a5c69176a73f59eb0312b53d"> 166</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__mpolar.html#ga55b2f979a5c69176a73f59eb0312b53d" title="NFFT-based mpolar FFT.">mpolar_fft</a>(fftw_complex *f_hat, <span class="keywordtype">int</span> NN, fftw_complex *f, <span clas [...]
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> {</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> ticks t0, t1;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordtype">int</span> j,k; </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan; </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordtype">double</span> *x, *w; </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordtype">int</span> M; </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> N[0]=NN; n[0]=2*N[0]; </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> N[1]=NN; n[1]=2*N[1]; </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*T*R/2*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*T*R/4*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> M=<a class="code" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952" title="Generates the points with weights for the modified polar grid with angles and offsets...">mpolar_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> {</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> }</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> nfft_precompute_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> nfft_precompute_full_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = f_hat[k];</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> t0 = getticks();</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> t1 = getticks();</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> f[j] = my_nfft_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> }</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__mpolar.html#ga5d0560e898b722ee5fe09acc485bbec8"> 237</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__mpolar.html#ga5d0560e898b722ee5fe09acc485bbec8" title="inverse NFFT-based mpolar FFT">inverse_mpolar_fft</a>(fftw_complex *f, <span class="keywordtype">int</span> T, <span class="keyw [...]
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> {</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> ticks t0, t1;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordtype">int</span> j,k; </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan; </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_infft_plan; </div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keywordtype">double</span> *x, *w; </div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordtype">int</span> l; </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordtype">int</span> M; </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> N[0]=NN; n[0]=2*N[0]; </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> N[1]=NN; n[1]=2*N[1]; </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*T*R/2*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*T*R/4*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> M=<a class="code" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952" title="Generates the points with weights for the modified polar grid with angles and offsets...">mpolar_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> solver_init_advanced_complex(&my_infft_plan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT );</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> {</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j] = f[j];</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j] = w[j];</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> }</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> nfft_precompute_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> nfft_precompute_full_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">if</span>(my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];j++)</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];k++)</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> {</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]+k]=</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> (sqrt(pow(j-my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2,2)+pow(k-my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]/2,2))>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a> [...]
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> }</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = 0.0 + _Complex_I*0.0;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> t0 = getticks();</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> solver_before_loop_complex(&my_infft_plan);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">if</span> (max_i<1)</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> {</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> l=1;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>[k];</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> }</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> {</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordflow">for</span>(l=1;l<=<a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>;l++)</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> {</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_infft_plan);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> }</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> }</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> t1 = getticks();</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> f_hat[k] = my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k];</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_infft_plan);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> }</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__mpolar.html#ga522ff84df31c08a1f237ad0ec7ce4ac5"> 339</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432" title="Comparison of the FFTW, linogram FFT, and inverse linogram FFT.">comparison_fft</a>(FILE *fp, <span class="keywordtype">int</ [...]
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> {</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> ticks t0, t1;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> fftw_plan my_fftw_plan;</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> fftw_complex *f_hat,*f;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordtype">int</span> m,k;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordtype">double</span> t_fft, t_dft_mpolar;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> f_hat = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*N*N);</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> f = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*(T*R/4)*5);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> my_fftw_plan = fftw_plan_dft_2d(N,N,f_hat,f,FFTW_BACKWARD,FFTW_MEASURE);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">for</span>(k=0; k<N*N; k++)</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> f_hat[k] = (((<span class="keywordtype">double</span>)rand())/RAND_MAX) + _Complex_I* (((double)rand())/RAND_MAX);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> t0 = getticks();</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">for</span>(m=0;m<65536/N;m++)</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> {</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> fftw_execute(my_fftw_plan);</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="comment">/* touch */</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> f_hat[2]=2*f_hat[0];</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> }</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> t1 = getticks();</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> t_fft=N*GLOBAL_elapsed_time/65536;</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">if</span>(N<256)</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> {</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <a class="code" href="group__applications__polarFFT__mpolar.html#gaee9902054200ea50d90b5d290bff8c71" title="discrete mpolar FFT">mpolar_dft</a>(f_hat,N,f,T,R,1);</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> t_dft_mpolar=GLOBAL_elapsed_time;</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> }</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">for</span> (m=3; m<=9; m+=3)</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> {</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keywordflow">if</span>((m==3)&&(N<256))</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> fprintf(fp,<span class="stringliteral">"%d\t&\t&\t%1.1e&\t%1.1e&\t%d\t"</span>,N,t_fft,t_dft_mpolar,m);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="keywordflow">if</span>(m==3)</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> fprintf(fp,<span class="stringliteral">"%d\t&\t&\t%1.1e&\t &\t%d\t"</span>,N,t_fft,m);</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> fprintf(fp,<span class="stringliteral">" \t&\t&\t &\t &\t%d\t"</span>,m);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> printf(<span class="stringliteral">"N=%d\tt_fft=%1.1e\tt_dft_mpolar=%1.1e\tm=%d\t"</span>,N,t_fft,t_dft_mpolar,m);</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <a class="code" href="group__applications__polarFFT__mpolar.html#ga55b2f979a5c69176a73f59eb0312b53d" title="NFFT-based mpolar FFT.">mpolar_fft</a>(f_hat,N,f,T,R,m);</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> fprintf(fp,<span class="stringliteral">"%1.1e&\t"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> printf(<span class="stringliteral">"t_mpolar=%1.1e\t"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <a class="code" href="group__applications__polarFFT__mpolar.html#ga5d0560e898b722ee5fe09acc485bbec8" title="inverse NFFT-based mpolar FFT">inverse_mpolar_fft</a>(f,T,R,f_hat,N,2*m,m);</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordflow">if</span>(m==9)</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> fprintf(fp,<span class="stringliteral">"%1.1e\\\\\\hline\n"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> fprintf(fp,<span class="stringliteral">"%1.1e\\\\\n"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> printf(<span class="stringliteral">"t_impolar=%1.1e\n"</span>,GLOBAL_elapsed_time);</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> }</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> fflush(fp);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> }</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__mpolar.html#ga3c04138a5bfe5d72780bb7e82a18e627"> 404</a></span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> {</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="keywordtype">int</span> N; </div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="keywordtype">int</span> T, R; </div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="keywordtype">int</span> M; </div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordtype">double</span> *x, *w; </div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> fftw_complex *f_hat, *f, *f_direct, *f_tilde;</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>; </div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordtype">double</span> temp1, temp2, E_max=0.0;</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> FILE *fp1, *fp2;</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keywordtype">char</span> filename[30];</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="keywordtype">int</span> logN;</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="keywordflow">if</span>( argc!=4 )</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> {</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> printf(<span class="stringliteral">"mpolar_fft_test N T R \n"</span>);</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> printf(<span class="stringliteral">"N mpolar FFT of size NxN \n"</span>);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> printf(<span class="stringliteral">"T number of slopes \n"</span>);</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> printf(<span class="stringliteral">"R number of offsets \n"</span>);</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> printf(<span class="stringliteral">"\nHence, comparison FFTW, mpolar FFT and inverse mpolar FFT\n"</span>);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> fp1=fopen(<span class="stringliteral">"mpolar_comparison_fft.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keywordflow">if</span> (fp1==NULL)</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">for</span> (logN=4; logN<=8; logN++)</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <a class="code" href="group__applications__polarFFT__linogramm.html#gac2a323224e3346e37714575d49c65432" title="Comparison of the FFTW, linogram FFT, and inverse linogram FFT.">comparison_fft</a>(fp1,(1U<< logN), 3*(1U<< logN), 3*(1U<< (logN-1)));</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> fclose(fp1);</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> exit(-1);</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> }</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> N = atoi(argv[1]);</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> T = atoi(argv[2]);</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> R = atoi(argv[3]);</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> printf(<span class="stringliteral">"N=%d, modified polar grid with T=%d, R=%d => "</span>,N,T,R);</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*T*R/2*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*T*R/4*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> f_hat = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*N*N);</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> f = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*1.25*T*R); <span class="comment">/* 4/pi*log(1+sqrt(2)) = 1.122... < 1.25 */</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> f_direct = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*1.25*T*R);</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> f_tilde = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*N*N);</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> M=<a class="code" href="group__applications__polarFFT__mpolar.html#ga08d0441aceedbcb98b985ee5aa121952" title="Generates the points with weights for the modified polar grid with angles and offsets...">mpolar_grid</a>(T,R,x,w); printf(<span class="stringliteral">"M=%d.\n"</span>,M);</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> fp1=fopen(<span class="stringliteral">"input_data_r.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> fp2=fopen(<span class="stringliteral">"input_data_i.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="keywordflow">if</span> ((fp1==NULL) || (fp2==NULL))</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="keywordflow">for</span>(k=0;k<N*N;k++)</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> {</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> fscanf(fp1,<span class="stringliteral">"%le "</span>,&temp1);</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> fscanf(fp2,<span class="stringliteral">"%le "</span>,&temp2);</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> f_hat[k]=temp1+ _Complex_I*temp2;</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> }</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> fclose(fp1);</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> fclose(fp2);</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <a class="code" href="group__applications__polarFFT__mpolar.html#gaee9902054200ea50d90b5d290bff8c71" title="discrete mpolar FFT">mpolar_dft</a>(f_hat,N,f_direct,T,R,1);</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="comment">// mpolar_fft(f_hat,N,f_direct,T,R,12);</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> printf(<span class="stringliteral">"\nTest of the mpolar FFT: \n"</span>);</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> fp1=fopen(<span class="stringliteral">"mpolar_fft_error.dat"</span>,<span class="stringliteral">"w+"</span>);</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="keywordflow">for</span> (m=1; m<=12; m++)</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> {</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <a class="code" href="group__applications__polarFFT__mpolar.html#ga55b2f979a5c69176a73f59eb0312b53d" title="NFFT-based mpolar FFT.">mpolar_fft</a>(f_hat,N,f,T,R,m);</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> E_max=X(error_l_infty_complex)(f_direct,f,M);</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> printf(<span class="stringliteral">"m=%2d: E_max = %e\n"</span>,m,E_max);</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> fprintf(fp1,<span class="stringliteral">"%e\n"</span>,E_max);</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> }</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> fclose(fp1);</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> </div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">for</span> (m=3; m<=9; m+=3)</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> {</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> printf(<span class="stringliteral">"\nTest of the inverse mpolar FFT for m=%d: \n"</span>,m);</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> sprintf(filename,<span class="stringliteral">"mpolar_ifft_error%d.dat"</span>,m);</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> fp1=fopen(filename,<span class="stringliteral">"w+"</span>);</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="keywordflow">for</span> (max_i=0; max_i<=20; max_i+=2)</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> {</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <a class="code" href="group__applications__polarFFT__mpolar.html#ga5d0560e898b722ee5fe09acc485bbec8" title="inverse NFFT-based mpolar FFT">inverse_mpolar_fft</a>(f_direct,T,R,f_tilde,N,max_i,m);</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> E_max=X(error_l_infty_complex)(f_hat,f_tilde,N*N);</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> printf(<span class="stringliteral">"%3d iterations: E_max = %e\n"</span>,max_i,E_max);</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> fprintf(fp1,<span class="stringliteral">"%e\n"</span>,E_max);</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> }</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> fclose(fp1);</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> }</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_direct);</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_tilde);</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> }</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/mri2d_2reconstruct__data__gridding_8c_source.html b/doc/api/html/mri2d_2reconstruct__data__gridding_8c_source.html
new file mode 100644
index 0000000..3ee6537
--- /dev/null
+++ b/doc/api/html/mri2d_2reconstruct__data__gridding_8c_source.html
@@ -0,0 +1,153 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - reconstruct_data_gridding.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mri2d/reconstruct_data_gridding.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: reconstruct_data_gridding.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="group__applications__mri2d__construct__data__gridding.html#gaafaf486ca8f1725dce039d2e2d150340"> 40</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__construct__data__gridding.html#gaafaf486ca8f1725dce039d2e2d150340" title="reconstruct makes a 2d-adjoint-nfft">reconstruct</a>(<span class="keywordtype">char</span>* fil [...]
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">int</span> j; <span class="comment">/* some variables */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">double</span> weights; <span class="comment">/* store one weight temporary */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">double</span> real,imag; <span class="comment">/* to read the real and imag part of a complex number */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_plan; <span class="comment">/* plan for the two dimensional nfft */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> FILE* fin; <span class="comment">/* input file */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> FILE* fweight; <span class="comment">/* input file for the weights */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> FILE *fout_real; <span class="comment">/* output file */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> FILE *fout_imag; <span class="comment">/* output file */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">int</span> my_N[2],my_n[2];</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">int</span> flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE|</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> FFTW_MEASURE| FFTW_DESTROY_INPUT;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment">/* initialise nfft */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> my_N[0]=N; my_n[0]=ceil(N*1.2);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> my_N[1]=N; my_n[1]=ceil(N*1.2);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> nfft_init_guru(&my_plan, 2, my_N, M, my_n, 6,flags,</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> fin=fopen(filename,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> fweight=fopen(<span class="stringliteral">"weights.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> fscanf(fweight,<span class="stringliteral">"%le "</span>,&weights);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> fscanf(fin,<span class="stringliteral">"%le %le %le %le"</span>,&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0],&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1],&real,& [...]
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = real + _Complex_I*imag;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">if</span> (weight)</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * weights;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> fclose(fweight);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">/* precompute psi */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> nfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">/* precompute full psi */</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> nfft_precompute_full_psi(&my_plan);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment">/* compute the adjoint nfft */</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> nfft_adjoint(&my_plan);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> fout_real=fopen(<span class="stringliteral">"output_real.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> fout_imag=fopen(<span class="stringliteral">"output_imag.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">for</span> (j=0;j<N*N;j++) {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> fprintf(fout_real,<span class="stringliteral">"%le "</span>,creal(my_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]));</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> fprintf(fout_imag,<span class="stringliteral">"%le "</span>,cimag(my_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]));</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> fclose(fin);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> fclose(fout_real);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> fclose(fout_imag);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> nfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> {</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">if</span> (argc <= 5) {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> printf(<span class="stringliteral">"usage: ./reconstruct_data_gridding FILENAME N M ITER WEIGHTS\n"</span>);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <a class="code" href="group__applications__mri2d__construct__data__gridding.html#gaafaf486ca8f1725dce039d2e2d150340" title="reconstruct makes a 2d-adjoint-nfft">reconstruct</a>(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[5]));</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/mri3d_2reconstruct__data__gridding_8c_source.html b/doc/api/html/mri3d_2reconstruct__data__gridding_8c_source.html
new file mode 100644
index 0000000..cc5dc10
--- /dev/null
+++ b/doc/api/html/mri3d_2reconstruct__data__gridding_8c_source.html
@@ -0,0 +1,204 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - reconstruct_data_gridding.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_fb8678d426210fc305fe5dfd30a163a5.html">mri3d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mri3d/reconstruct_data_gridding.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: reconstruct_data_gridding.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="group__applications__mri3d__reconstruct__data__gridding.html#ga0152e0943d96d847eaaaa8a9f487eb9e"> 40</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri3d__reconstruct__data__gridding.html#ga0152e0943d96d847eaaaa8a9f487eb9e" title="reconstruct makes an 2d-adjoint-nfft for every slice">reconstruct</a>(<span class="keywordt [...]
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">int</span> j,k,z; <span class="comment">/* some variables */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">double</span> weights; <span class="comment">/* store one weight temporary */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">double</span> tmp; <span class="comment">/* tmp to read the obsolent z from the input file */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">double</span> real,imag; <span class="comment">/* to read the real and imag part of a complex number */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_plan; <span class="comment">/* plan for the two dimensional nfft */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">int</span> my_N[2],my_n[2]; <span class="comment">/* to init the nfft */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> FILE* fin; <span class="comment">/* input file */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> FILE* fweight; <span class="comment">/* input file for the weights */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment">/* initialise my_plan */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> my_N[0]=N; my_n[0]=ceil(N*1.2);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> my_N[1]=N; my_n[1]=ceil(N*1.2);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> nfft_init_guru(&my_plan, 2, my_N, M/Z, my_n, 6, PRE_PHI_HUT| PRE_PSI|</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> MALLOC_X| MALLOC_F_HAT| MALLOC_F|</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment">/* precompute lin psi if set */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> fin=fopen(filename,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">for</span>(z=0;z<Z;z++) {</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> fweight=fopen(<span class="stringliteral">"weights.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> {</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> fscanf(fweight,<span class="stringliteral">"%le "</span>,&weights);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> fscanf(fin,<span class="stringliteral">"%le %le %le %le %le"</span>,</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> &my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0],&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1],&tmp,&real,&imag);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = real + _Complex_I*imag;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">if</span>(weight)</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = my_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * weights;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> fclose(fweight);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">/* precompute psi if set just one time because the knots equal each slice */</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span>(z==0 && my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> nfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment">/* precompute full psi if set just one time because the knots equal each slice */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span>(z==0 && my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> nfft_precompute_full_psi(&my_plan);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment">/* compute the adjoint nfft */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> nfft_adjoint(&my_plan);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++) {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment">/* write every slice in the memory.</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment"> here we make an fftshift direct */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> mem[(Z*N*N/2+z*N*N+ k)%(Z*N*N)] = my_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k];</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> fclose(fin);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> nfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="code" href="group__applications__mri3d__reconstruct__data__gridding.html#gaa30709aaef018deecdd911083fadb877"> 104</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri3d__reconstruct__data__gridding.html#gaa30709aaef018deecdd911083fadb877" title="print writes the memory back in a file output_real.dat for the real part and output_imag.da [...]
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> {</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> FILE* fout_real;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> FILE* fout_imag;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> fout_real=fopen(<span class="stringliteral">"output_real.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> fout_imag=fopen(<span class="stringliteral">"output_imag.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">for</span>(i=0;i<Z;i++) {</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">for</span> (j=0;j<N*N;j++) {</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> fprintf(fout_real,<span class="stringliteral">"%le "</span>,creal(mem[(Z*N*N/2+i*N*N+ j)%(Z*N*N)]) /Z);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> fprintf(fout_imag,<span class="stringliteral">"%le "</span>,cimag(mem[(Z*N*N/2+i*N*N+ j)%(Z*N*N)]) /Z);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> fprintf(fout_real,<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> fprintf(fout_imag,<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> fclose(fout_real);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> fclose(fout_imag);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> {</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> fftw_complex *mem;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> fftw_plan plan;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordtype">int</span> N,M,Z;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">if</span> (argc <= 6) {</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> printf(<span class="stringliteral">"usage: ./reconstruct_data_gridding FILENAME N M Z ITER WEIGHTS\n"</span>);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> N=atoi(argv[2]);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> M=atoi(argv[3]);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> Z=atoi(argv[4]);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="comment">/* Allocate memory to hold every slice in memory after the</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment"> 2D-infft */</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> mem = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex) * atoi(argv[2]) * atoi(argv[2]) * atoi(argv[4]));</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment">/* Create plan for the 1d-ifft */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> plan = fftw_plan_many_dft(1, &Z, N*N,</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> mem, NULL,</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> N*N, 1,</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> mem, NULL,</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> N*N,1 ,</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> FFTW_BACKWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="comment">/* execute the 2d-nfft's */</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <a class="code" href="group__applications__mri3d__reconstruct__data__gridding.html#ga0152e0943d96d847eaaaa8a9f487eb9e" title="reconstruct makes an 2d-adjoint-nfft for every slice">reconstruct</a>(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[6]),mem);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment">/* execute the 1d-fft's */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> fftw_execute(plan);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="comment">/* write the memory back in files */</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <a class="code" href="group__applications__mri3d__reconstruct__data__gridding.html#gaa30709aaef018deecdd911083fadb877" title="print writes the memory back in a file output_real.dat for the real part and output_imag.dat for the imaginary part">print</a>(N,M,Z, mem);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(mem);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> }</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/mri_8c_source.html b/doc/api/html/mri_8c_source.html
new file mode 100644
index 0000000..a29cd69
--- /dev/null
+++ b/doc/api/html/mri_8c_source.html
@@ -0,0 +1,316 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - mri.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_a6d8c0f9045568178601abc26c60f91f.html">mri</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mri.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: mri.c 3965 2013-04-22 12:12:31Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"><a class="code" href="structwindow__funct__plan__.html"> 37</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan_</a> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">int</span> d;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">int</span> n[1];</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">double</span> sigma[1];</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">double</span> *b;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="code" href="structwindow__funct__plan__.html#a59ddba27ebde497ae7cfcfc2dbdd2304"> 43</a></span> <span class="keywordtype">double</span> *<a class="code" href="structwindow__funct__plan__.html#a59ddba27ebde497ae7cfcfc2dbdd2304" title="input for de Boor algorithm, if B_SPLINE or SINC_2m is defined">spline_coeffs</a>; </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> } <a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a>;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">static</span> <span class="keywordtype">void</span> window_funct_init(<a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a>* ths, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> n, <span class="keywordtype">double</span> sigma) {</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> ths->d=1;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> ths->m=m;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> ths->n[0]=n;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> ths->sigma[0]=sigma;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> WINDOW_HELP_INIT</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> }</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment"> * mri_inh_2d1d</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">void</span> mri_inh_2d1d_trafo(<a class="code" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *that) {</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">int</span> l,j;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">double</span> _Complex *f = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(that-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> [...]
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">double</span> _Complex *f_hat = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(that-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtyp [...]
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a> *ths = (<a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e" [...]
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> window_funct_init(ths,that->plan.<a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>,that->N3,that->sigma3);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment">/* the pointers that->f and that->f_hat have been modified by the solver */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> that->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> that->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = that-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> memset(f,0,that-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> {</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> f_hat[j]=that-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j];</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">for</span>(l=-ths->n[0]/2;l<=ths->n[0]/2;l++) {</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> that-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]*=cexp(-2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*that->w[j]*((<span class="keywordtype">double</span>)l)) [...]
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&that->plan);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>;j++){</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment">/* PHI has compact support */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">if</span>(fabs(that->t[j]-((<span class="keywordtype">double</span>)l)/((<span class="keywordtype">double</span>)ths->n[0]))<that->plan.<a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>/((<span class="key [...]
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> {</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordtype">double</span> phi_val = PHI(that->t[j]-((<span class="keywordtype">double</span>)l)/((<span class="keywordtype">double</span>)ths->n[0]),0);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> f[j]+=that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]*phi_val;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment">// the line below causes internal compiler error for gcc 4.7.1</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment">// f[j]+=that->f[j]*PHI(that->t[j]-((double)l)/((double)ths->n[0]),0);</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> that-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]=f_hat[j];</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(that->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>=f;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> that->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> WINDOW_HELP_FINALIZE</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">void</span> mri_inh_2d1d_adjoint(<a class="code" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *that) {</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">int</span> l,j;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">double</span> _Complex *f = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(that-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> [...]
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">double</span> _Complex *f_hat = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(that-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtyp [...]
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a> *ths = (<a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e" [...]
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> window_funct_init(ths,that->plan.<a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>,that->N3,that->sigma3);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> memset(f_hat,0,that-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment">/* the pointers that->f and that->f_hat have been modified by the solver */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> that->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> that->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = that-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> {</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> f[j]=that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">for</span>(l=-ths->n[0]/2;l<=ths->n[0]/2;l++) {</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment">/* PHI has compact support */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span>(fabs(that->t[j]-((<span class="keywordtype">double</span>)l)/((<span class="keywordtype">double</span>)ths->n[0]))<that->plan.<a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>/((<span class="key [...]
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]*=PHI(that->t[j]-((<span class="keywordtype">double</span>)l)/((<span class="keywordtype">double</span>)ths->n[0]),0);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]=0.0;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> nfft_adjoint(&that->plan);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> f_hat[j]+=that-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]*cexp(2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*that->w[j]*((<span class="keywordtype">double</s [...]
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> that-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]=f[j];</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> {</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> f_hat[j] /= PHI_HUT(ths->n[0]*that->w[j],0);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> }</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(that->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> that-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=f_hat;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> that->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = that-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> WINDOW_HELP_FINALIZE</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> }</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordtype">void</span> mri_inh_2d1d_init_guru(<a class="code" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *ths, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> *n,</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordtype">int</span> m, <span class="keywordtype">double</span> sigma, <span class="keywordtype">unsigned</span> nfft_flags, <span class="keywordtype">unsigned</span> fftw_flags) {</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> nfft_init_guru(&ths->plan,2,N,M,n,m,nfft_flags,fftw_flags);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> ths->N3=N[2];</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> ths->sigma3=sigma;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> ths-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a> = ths->plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> ths-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a> = ths->plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> ths-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = ths->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> ths-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> ths->t = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> ths->w = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> ths-><a class="code" href="structmri__inh__2d1d__plan.html#a4cad33b38f4d5bc54b8d25d90913ab44" title="Pointer to the own transform.">mv_trafo</a> = (void (*) (<span class="keywordtype">void</span>* ))mri_inh_2d1d_trafo;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> ths-><a class="code" href="structmri__inh__2d1d__plan.html#afe427225384a2d226c3cb85cf9aa4042" title="Pointer to the own adjoint.">mv_adjoint</a> = (void (*) (<span class="keywordtype">void</span>* ))mri_inh_2d1d_adjoint;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordtype">void</span> mri_inh_2d1d_finalize(<a class="code" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *ths) {</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->t);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->w);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment">/* the pointers ths->f and ths->f_hat have been modified by the solver */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> ths->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = ths-><a class="code" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> ths->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths-><a class="code" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> nfft_finalize(&ths->plan);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> }</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="comment"> * mri_inh_3d</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordtype">void</span> mri_inh_3d_trafo(<a class="code" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *that) {</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">int</span> l,j;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a> *ths = (<a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e" [...]
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> window_funct_init(ths,that->plan.<a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>,that->N3,that->sigma3);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="comment">/* the pointers that->f has been modified by the solver */</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> that->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> =that-><a class="code" href="structmri__inh__3d__plan.html#a9e51f5f4ad46d4b120c452fc962a2385" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb86d92e12" title="Total number of Fourier coefficients.">N_total</a>;j++) {</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">for</span>(l=-ths->n[0]/2;l<ths->n[0]/2;l++)</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> {</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="comment">/* PHI has compact support */</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">if</span>(fabs(that->w[j]-((<span class="keywordtype">double</span>)l)/((<span class="keywordtype">double</span>)ths->n[0]))<ths->m/((<span class="keywordtype">double</span>)ths->n[0]))</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> that->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j*ths->n[0]+(l+ths->n[0]/2)]= that-><a class="code" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> [...]
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> that->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j*ths->n[0]+(l+ths->n[0]/2)]=0.0;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> }</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&that->plan);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> {</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> that-><a class="code" href="structmri__inh__3d__plan.html#a9e51f5f4ad46d4b120c452fc962a2385" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] /= PHI_HUT(ths->n[0]*that->plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2],0);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> }</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> WINDOW_HELP_FINALIZE</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths);</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> }</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordtype">void</span> mri_inh_3d_adjoint(<a class="code" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *that) {</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordtype">int</span> l,j;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a> *ths = (<a class="code" href="structwindow__funct__plan__.html" title="window_funct_plan is a plan to use the window functions independent of the nfft">window_funct_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e" [...]
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> window_funct_init(ths,that->plan.<a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>,that->N3,that->sigma3);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="comment">/* the pointers that->f has been modified by the solver */</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> that->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> =that-><a class="code" href="structmri__inh__3d__plan.html#a9e51f5f4ad46d4b120c452fc962a2385" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> ;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> {</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> that-><a class="code" href="structmri__inh__3d__plan.html#a9e51f5f4ad46d4b120c452fc962a2385" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] /= PHI_HUT(ths->n[0]*that->plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2],0);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> }</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> nfft_adjoint(&that->plan);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">for</span>(j=0;j<that-><a class="code" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb86d92e12" title="Total number of Fourier coefficients.">N_total</a>;j++) {</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> that-><a class="code" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]=0.0;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">for</span>(l=-ths->n[0]/2;l<ths->n[0]/2;l++)</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> {</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="comment">/* PHI has compact support */</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">if</span>(fabs(that->w[j]-((<span class="keywordtype">double</span>)l)/((<span class="keywordtype">double</span>)ths->n[0]))<ths->m/((<span class="keywordtype">double</span>)ths->n[0]))</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> that-><a class="code" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]+= that->plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j*ths->n[0]+(l+ths->n[0] [...]
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> }</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> }</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> WINDOW_HELP_FINALIZE</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> }</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordtype">void</span> mri_inh_3d_init_guru(<a class="code" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *ths, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> *n,</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordtype">int</span> m, <span class="keywordtype">double</span> sigma, <span class="keywordtype">unsigned</span> nfft_flags, <span class="keywordtype">unsigned</span> fftw_flags) {</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> ths->N3=N[2];</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> ths->sigma3=sigma;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> nfft_init_guru(&ths->plan,3,N,M,n,m,nfft_flags,fftw_flags);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> ths-><a class="code" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb86d92e12" title="Total number of Fourier coefficients.">N_total</a> = N[0]*N[1];</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> ths-><a class="code" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b" title="Total number of samples.">M_total</a> = ths->plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> ths-><a class="code" href="structmri__inh__3d__plan.html#a9e51f5f4ad46d4b120c452fc962a2385" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = ths->plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> ths-><a class="code" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb [...]
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> ths->w = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb86d92e12" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> ths-><a class="code" href="structmri__inh__3d__plan.html#a780818802d5bfdc4d4174a3637254fd5" title="Pointer to the own transform.">mv_trafo</a> = (void (*) (<span class="keywordtype">void</span>* ))mri_inh_3d_trafo;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> ths-><a class="code" href="structmri__inh__3d__plan.html#afa2e143e704b701e9a0ee1d795f46b5b" title="Pointer to the own adjoint.">mv_adjoint</a> = (void (*) (<span class="keywordtype">void</span>* ))mri_inh_3d_adjoint;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordtype">void</span> mri_inh_3d_finalize(<a class="code" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *ths) {</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->w);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> nfft_finalize(&ths->plan);</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nav_f.png b/doc/api/html/nav_f.png
new file mode 100644
index 0000000..72a58a5
Binary files /dev/null and b/doc/api/html/nav_f.png differ
diff --git a/doc/api/html/nav_g.png b/doc/api/html/nav_g.png
new file mode 100644
index 0000000..2093a23
Binary files /dev/null and b/doc/api/html/nav_g.png differ
diff --git a/doc/api/html/nav_h.png b/doc/api/html/nav_h.png
new file mode 100644
index 0000000..33389b1
Binary files /dev/null and b/doc/api/html/nav_h.png differ
diff --git a/doc/api/html/ndft__fast_8c.html b/doc/api/html/ndft__fast_8c.html
new file mode 100644
index 0000000..3920466
--- /dev/null
+++ b/doc/api/html/ndft__fast_8c.html
@@ -0,0 +1,84 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - ndft_fast.c File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ndft_fast.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Testing ndft, Horner-like ndft, and fully precomputed ndft.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="ndft__fast_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab816d27cbbc27e40180686dfdf092c18"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab816d27cbbc27e40180686dfdf092c18"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>ndft_horner_trafo</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a53bb2cec77c49aa5c95da563cb8e8006"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53bb2cec77c49aa5c95da563cb8e8006"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>ndft_pre_full_trafo</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths, double _Complex *A)</td></tr>
+<tr class="memitem:afcad1528e5264964ab523b110c62d6b4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afcad1528e5264964ab523b110c62d6b4"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>ndft_pre_full_init</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths, double _Complex *A)</td></tr>
+<tr class="memitem:a5aca0b75e5ca5f147c210b23c507cd00"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5aca0b75e5ca5f147c210b23c507cd00"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>ndft_time</b> (int N, int M, unsigned test_ndft, unsigned test_pre_full)</td></tr>
+<tr class="memitem:a3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Testing ndft, Horner-like ndft, and fully precomputed ndft. </p>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition in file <a class="el" href="ndft__fast_8c_source.html">ndft_fast.c</a>.</p>
+</div></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/ndft__fast_8c_source.html b/doc/api/html/ndft__fast_8c_source.html
new file mode 100644
index 0000000..0719d54
--- /dev/null
+++ b/doc/api/html/ndft__fast_8c_source.html
@@ -0,0 +1,260 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - ndft_fast.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ndft_fast.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="ndft__fast_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: ndft_fast.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">static</span> <span class="keywordtype">void</span> ndft_horner_trafo(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">double</span> _Complex *f_hat_k, *f_j;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">double</span> _Complex exp_omega_0;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordflow">for</span>(j=0, f_j=ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>; j<ths->M_total; j++, f_j++)</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> (*f_j) =0;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">for</span>(j=0, f_j=ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>; j<ths->M_total; j++, f_j++)</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> {</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> exp_omega_0 = cexp(+2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j]);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">for</span>(k=0, f_hat_k= ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>; k<ths->N[0]; k++, f_hat_k++)</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> {</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> (*f_j)+=(*f_hat_k);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> (*f_j)*=exp_omega_0;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> (*f_j)*=cexp(-<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, si [...]
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> } <span class="comment">/* ndft_horner_trafo */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">static</span> <span class="keywordtype">void</span> ndft_pre_full_trafo(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths, <span class="keywordtype">double</span> _Complex *A)</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">double</span> _Complex *f_hat_k, *f_j;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">double</span> _Complex *A_local;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">for</span>(j=0, f_j=ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>; j<ths->M_total; j++, f_j++)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> (*f_j) =0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">for</span>(j=0, f_j=ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, A_local=A; j<ths->M_total; j++, f_j++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">for</span>(k=0, f_hat_k= ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>; k<ths->N[0]; k++, f_hat_k++, A_local++)</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> (*f_j) += (*f_hat_k)*(*A_local);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> } <span class="comment">/* ndft_pre_full_trafo */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">static</span> <span class="keywordtype">void</span> ndft_pre_full_init(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths, <span class="keywordtype">double</span> _Complex *A)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> {</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">double</span> _Complex *f_hat_k, *f_j, *A_local;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">for</span>(j=0, f_j=ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, A_local=A; j<ths->M_total; j++, f_j++)</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">for</span>(k=0, f_hat_k= ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>; k<ths->N[0]; k++, f_hat_k++, A_local++)</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> (*A_local) = cexp(-2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*(k-ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2)*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spati [...]
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> } <span class="comment">/* ndft_pre_full_init */</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">static</span> <span class="keywordtype">void</span> ndft_time(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">unsigned</span> test_ndft, <span class="keywordtype">unsigned</span> test_pre_full)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> {</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">double</span> t, t_ndft, t_horner, t_pre_full, t_nfft;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">double</span> _Complex *A = NULL;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> ticks t0, t1;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> np;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> printf(<span class="stringliteral">"%d\t%d\t"</span>,N, M);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> nfft_init_1d(&np, N, M);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(np.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>, np.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total numbe [...]
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">if</span>(test_pre_full)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> A=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(N*M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> ndft_pre_full_init(&np, A);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(np.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, np.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0 [...]
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> t_ndft=0;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> r=0;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">while</span>(t_ndft<0.1)</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> {</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> r++;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> t0 = getticks();</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> nfft_trafo_direct(&np);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> t1 = getticks();</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> t_ndft+=t;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> }</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> t_ndft/=r;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> printf(<span class="stringliteral">"%.2e\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> printf(<span class="stringliteral">"nan\t\t"</span>);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> t_horner=0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> r=0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">while</span>(t_horner<0.1)</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> {</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> r++;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> t0 = getticks();</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> ndft_horner_trafo(&np);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> t1 = getticks();</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> t_horner+=t;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> t_horner/=r;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> printf(<span class="stringliteral">"%.2e\t"</span>, t_horner);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">if</span>(test_pre_full)</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> {</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> t_pre_full=0;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> r=0;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">while</span>(t_pre_full<0.1)</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> {</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> r++;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> t0 = getticks();</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> ndft_pre_full_trafo(&np,A);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> t1 = getticks();</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> t_pre_full+=t;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> }</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> t_pre_full/=r;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> printf(<span class="stringliteral">"%.2e\t"</span>, t_pre_full);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> }</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> printf(<span class="stringliteral">"nan\t\t"</span>);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> t_nfft=0;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> r=0;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> {</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> r++;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> t0 = getticks();</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&np);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> t1 = getticks();</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> t_nfft+=t;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> t_nfft/=r;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> printf(<span class="stringliteral">"%.2e\n"</span>, t_nfft);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> fflush(stdout);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">if</span>(test_pre_full)</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(A);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> nfft_finalize(&np);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> }</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> {</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">int</span> l,trial;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">if</span>(argc<=2)</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> {</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> fprintf(stderr,<span class="stringliteral">"ndft_fast type first last trials\n"</span>);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> }</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> fprintf(stderr,<span class="stringliteral">"Testing ndft, Horner-like ndft, fully precomputed ndft.\n"</span>);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> fprintf(stderr,<span class="stringliteral">"Columns: N, M, t_ndft, t_horner, t_pre_full, t_nfft\n\n"</span>);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment">/* time vs. N=M */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">if</span>(atoi(argv[1])==0)</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> {</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">for</span>(l=atoi(argv[2]); l<=atoi(argv[3]); l++)</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">for</span>(trial=0; trial<atoi(argv[4]); trial++)</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">if</span>(l<=13)</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> ndft_time((1U<< l), (1U<< l), 1, 1);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span>(l<=15)</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> ndft_time((1U<< l), (1U<< l), 1, 0);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> ndft_time((1U<< l), (1U<< l), 0, 0);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> }</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfct_2simple__test_8c_source.html b/doc/api/html/nfct_2simple__test_8c_source.html
new file mode 100644
index 0000000..e4053c6
--- /dev/null
+++ b/doc/api/html/nfct_2simple__test_8c_source.html
@@ -0,0 +1,123 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - simple_test.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8d4f17a3806fad624168c14bf0ea2fb4.html">nfct</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfct/simple_test.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_nfct_1d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <a class="code" href="structnfct__plan.html">nfct_plan</a> p;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordtype">int</span> N=14;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">int</span> M=19;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> nfct_init_1d(&p,N,M);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">for</span>(j = 0; j < p.<a class="code" href="structnfct__plan.html#a998a428a06532646854e8add72c5ca63" title="dimension, rank">d</a>*p.<a class="code" href="structnfct__plan.html#ab201c4e89753b167954e7cb5f34a321d" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> p.<a class="code" href="structnfct__plan.html#a5635e780f4c492f087754d71f16e07ed" title="nodes (in time/spatial domain)">x</a>[j] = 0.5 * ((<span class="keywordtype">double</span>)rand()) / RAND_MAX;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">if</span>( p.<a class="code" href="structnfct__plan.html#ae2a2e493b2938fe9b22b0506765f30cf" title="flags for precomputation, malloc">nfct_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> nfct_precompute_psi( &p);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">for</span>(k = 0; k < p.<a class="code" href="structnfct__plan.html#abc66ae61c54a049868c62288623d4a6b" title="Total number of Fourier coefficients.">N_total</a>; k++)</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> p.<a class="code" href="structnfct__plan.html#af289164b09e85f75e8ed0eb3ded40d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>[k] = (<span class="keywordtype">double</span>)rand() / RAND_MAX;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfct__plan.html#af289164b09e85f75e8ed0eb3ded40d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>,p.<a class="code" href="structnfct__plan.html#abc66ae61c54a049868c62288623d4a6b" title="Total number of [...]
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> nfct_trafo_direct(&p);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfct__plan.html#acca00284f93bd33c00a1b099a6eec8cd" title="Vector of samples, size is M_total * sizeof( double )">f</a>,p.<a class="code" href="structnfct__plan.html#ab201c4e89753b167954e7cb5f34a321d" title="Total number of samples.">M_tota [...]
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> nfct_trafo(&p);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfct__plan.html#acca00284f93bd33c00a1b099a6eec8cd" title="Vector of samples, size is M_total * sizeof( double )">f</a>,p.<a class="code" href="structnfct__plan.html#ab201c4e89753b167954e7cb5f34a321d" title="Total number of samples.">M_tota [...]
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> nfct_adjoint(&p);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfct__plan.html#af289164b09e85f75e8ed0eb3ded40d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>,p.<a class="code" href="structnfct__plan.html#abc66ae61c54a049868c62288623d4a6b" title="Total number of [...]
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> nfct_adjoint_direct(&p);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfct__plan.html#af289164b09e85f75e8ed0eb3ded40d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>,p.<a class="code" href="structnfct__plan.html#abc66ae61c54a049868c62288623d4a6b" title="Total number of [...]
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> nfct_finalize(&p);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> }</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> printf(<span class="stringliteral">"computing one dimensional ndct, nfct and adjoint ndct, nfct\n\n"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> simple_test_nfct_1d();</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> printf(<span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfct_8c_source.html b/doc/api/html/nfct_8c_source.html
new file mode 100644
index 0000000..bc63e70
--- /dev/null
+++ b/doc/api/html/nfct_8c_source.html
@@ -0,0 +1,944 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfct.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_6409bbb6ca4d9fdb6de069951c273365.html">nfct</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfct.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: nfct.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">/* Nonequispaced fast cosine transform</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * Author: Steffen Klatt 2004-2006, Jens Keiner 2010 */</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#undef X</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span><span class="preprocessor">#if defined(NFFT_SINGLE)</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"></span><span class="preprocessor">#define X(name) CONCAT(nfctf_, name)</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span><span class="preprocessor">#elif defined(NFFT_LDOUBLE)</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"></span><span class="preprocessor">#define X(name) CONCAT(nfctl_, name)</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor"></span><span class="preprocessor">#define X(name) CONCAT(nfct_, name)</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> fftw_2N(<span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> {</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">return</span> 2 * (n - 1);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> fftw_2N_rev(<span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> {</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">return</span> (LRINT(K(0.5) * n) + 1);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> }</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> prod_int(<span class="keywordtype">int</span> *vec, <span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">int</span> t, prod = 1;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">for</span> (t = 0; t < d; t++)</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> prod *= vec[t];</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">return</span> prod;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> }</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment">/* handy shortcuts */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor">#define NFCT_DEFAULT_FLAGS PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | \</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"> MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor">#define FFTW_DEFAULT_FLAGS FFTW_ESTIMATE | FFTW_DESTROY_INPUT</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor">#define NFCT_SUMMANDS (2 * ths->m + 2)</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor"></span><span class="preprocessor">#define NODE(p,r) (ths->x[(p) * ths->d + (r)])</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor">#define MACRO_ndct_init_result_trafo \</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor"> memset(f, 0, ths->M_total * sizeof(R));</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndct_init_result_adjoint \</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor"> memset(f_hat, 0, ths->N_total * sizeof(R));</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor">#define MACRO_nfct_D_init_result_A \</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="preprocessor"> memset(g_hat, 0, prod_int(ths->n, ths->d) * sizeof(R));</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfct_D_init_result_T \</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor"> memset(f_hat, 0, ths->N_total * sizeof(R));</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor">#define MACRO_nfct_B_init_result_A \</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor"> memset(f, 0, ths->M_total * sizeof(R));</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfct_B_init_result_T \</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="preprocessor"> memset(g, 0, prod_int(ths->n, ths->d) * sizeof(R));</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor">#define NFCT_PRE_WINFUN(d) ths->N[d] = 2 * ths->N[d]; \</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor"> ths->n[d] = fftw_2N(ths->n[d]);</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor">#define NFCT_POST_WINFUN(d) ths->N[d] = LRINT(K(0.5) * ths->N[d]); \</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor"> ths->n[d] = fftw_2N_rev(ths->n[d]);</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor">#define NFCT_WINDOW_HELP_INIT WINDOW_HELP_INIT</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> R X(phi_hut)(X(plan) *ths, <span class="keywordtype">int</span> k, <span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> {</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> NFCT_PRE_WINFUN(d);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> R phi_hut_tmp = PHI_HUT(k, d);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> NFCT_POST_WINFUN(d);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">return</span> phi_hut_tmp;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> R X(phi)(X(plan) *ths, R x, <span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> NFCT_PRE_WINFUN(d);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> R phi_tmp = PHI(x, d);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> NFCT_POST_WINFUN(d);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">return</span> phi_tmp;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor">#define MACRO_with_cos_vec cos_vec[t][ka[t]]</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_without_cos_vec COS(K(2.0) * KPI * ka[t] * NODE(j,t))</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="preprocessor">#define MACRO_with_PRE_PHI_HUT ths->c_phi_inv[t][kg[t]];</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_compute_PHI_HUT_INV (K(1.0) / (X(phi_hut)(ths, kg[t], t)))</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="preprocessor">#define MACRO_with_PRE_PSI ths->psi[(j * ths->d + t) * NFCT_SUMMANDS + lc[t]]</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_compute_PSI X(phi)(ths, NODE(j,t) - ((R)(lc[t] + lb[t])) / (K(2.0)*((R)(ths->n[t])-K(1.0))</span><span class="comment">/*(R)(fftw_2N(ths->n[t]))*/</span><span class="preprocessor">), t)</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="preprocessor">#define MACRO_ndct_malloc__cos_vec \</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor"> R **cos_vec; \</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="preprocessor"> cos_vec = (R**)Y(malloc)(ths->d * sizeof(R*)); \</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="preprocessor"> for (t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="preprocessor"> cos_vec[t] = (R*)Y(malloc)(ths->N[t] * sizeof(R));</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="preprocessor">#define MACRO_ndct_free__cos_vec \</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="preprocessor"> </span><span class="comment">/* free allocated memory */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="preprocessor"> for (t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor"> Y(free)(cos_vec[t]); \</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="preprocessor"> Y(free)(cos_vec); \</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor">#define MACRO_ndct_init__cos_vec \</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="preprocessor"> for(t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="preprocessor"> cos_vec[t][0] = K(1.0); \</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="preprocessor"> cos_vec[t][1] = COS(K(2.0) * KPI * NODE(j,t)); \</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor"> for (k = 2; k < ths->N[t]; k++) \</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor"> cos_vec[t][k] = K(2.0) * cos_vec[t][1] * cos_vec[t][k-1] - \</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="preprocessor"> cos_vec[t][k-2]; \</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="preprocessor">#define MACRO_ndct_init__k__cos_k(which_one) \</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="preprocessor"> cos_k[0] = K(1.0); \</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor"> for (t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="preprocessor"> ka[t] = 0; \</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="preprocessor"> for (t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor"> cos_k[t+1] = cos_k[t] * MACRO_ ##which_one; \</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor">#define MACRO_ndct_count__k__cos_k(which_one) \</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor"> ka[ths->d-1]++; \</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor"> i = ths->d - 1; \</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor"> while ((ka[i] == ths->N[i]) && (i > 0)) \</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor"> ka[i - 1]++; \</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="preprocessor"> ka[i] = 0; \</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor"> i--; \</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor"> for (t = i; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="preprocessor"> cos_k[t+1] = cos_k[t] * MACRO_ ##which_one; \</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor">#define MACRO_ndct_compute__trafo \</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor"> f[j] += f_hat[k] * cos_k[ths->d]; \</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="preprocessor">#define MACRO_ndct_compute__adjoint \</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="preprocessor"> f_hat[k] += f[j] * cos_k[ths->d]; \</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment">/* slow (trafo) transform */</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor">#define MACRO_ndct(which_one) \</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="preprocessor"> void X(which_one ## _direct) (X(plan) *ths) \</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="preprocessor"> int j, k, t, i; \</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="preprocessor"> int ka[ths->d]; \</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="preprocessor"> R cos_k[ths->d+1]; \</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="preprocessor"> R *f = ths->f; \</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="preprocessor"> R *f_hat = ths->f_hat; \</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor"> MACRO_ndct_init_result_ ## which_one; \</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="preprocessor"> if (ths->d == 1) \</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="preprocessor"> for (j = 0; j < ths->M_total; j++) \</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="preprocessor"> for (k = 0; k < ths->N[0]; k++) \</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor"> cos_k[ths->d] = COS(K(2.0) * KPI * k * NODE(j,0)); \</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="preprocessor"> MACRO_ndct_compute__ ## which_one; \</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor"> </span><span class="comment">/* fast nfct_trafo_direct */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="preprocessor"> MACRO_ndct_malloc__cos_vec; \</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="preprocessor"> for (j = 0; j < ths->M_total; j++) \</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="preprocessor"> MACRO_ndct_init__cos_vec; \</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="preprocessor"> MACRO_ndct_init__k__cos_k(with_cos_vec); \</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="preprocessor"> for (k = 0; k < ths->N_total; k++) \</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="preprocessor"> MACRO_ndct_compute__ ## which_one; \</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="preprocessor"> MACRO_ndct_count__k__cos_k(with_cos_vec); \</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="preprocessor"> MACRO_ndct_free__cos_vec; \</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="preprocessor">} </span><span class="comment">/* ndct_{trafo, adjoint} */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> MACRO_ndct(trafo)</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> MACRO_ndct(adjoint)</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="preprocessor">#define MACRO_nfct__lower_boundary(j,act_dim) \</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="preprocessor"> lb[(act_dim)] = \</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor"> LRINT(NODE((j),(act_dim)) * fftw_2N(ths->n[(act_dim)])) - ths->m; \</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor">#define MACRO_nfct_D_compute_A \</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor"> g_hat[kg_plain[ths->d]] = f_hat[k_L] * c_phi_inv_k[ths->d]; \</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor">#define MACRO_nfct_D_compute_T \</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="preprocessor"> f_hat[k_L] = g_hat[kg_plain[ths->d]] * c_phi_inv_k[ths->d]; \</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor">#define MACRO_init__kg \</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="preprocessor"> for (t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="preprocessor"> kg[t] = 0; \</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="preprocessor"> i = 0; \</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="preprocessor">#define MACRO_count__kg \</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="preprocessor"> kg[ths->d - 1]++; \</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="preprocessor"> i = ths->d - 1; \</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="preprocessor"> while ((kg[i] == ths->N[i]) && (i > 0)) \</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="preprocessor"> kg[i - 1]++; \</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="preprocessor"> kg[i] = 0; \</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="preprocessor"> i--; \</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="preprocessor">#define MACRO_update__phi_inv_k__kg_plain(what_kind, which_phi) \</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="preprocessor"> for (t = i; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="preprocessor"> MACRO__c_phi_inv_k__ ## what_kind(which_phi); \</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="preprocessor"> kg_plain[t+1] = kg_plain[t] * ths->n[t] + kg[t]; \</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="preprocessor">#define MACRO__c_phi_inv_k__A(which_phi) \</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="preprocessor"> if (kg[t] == 0) \</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="preprocessor"> c_phi_inv_k[t+1] = c_phi_inv_k[t] * MACRO_ ## which_phi; \</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor"> c_phi_inv_k[t+1] = K(0.5) * c_phi_inv_k[t] * MACRO_ ## which_phi; \</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="preprocessor">#define MACRO__c_phi_inv_k__T(which_phi) \</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="preprocessor"> c_phi_inv_k[t+1] = c_phi_inv_k[t] * MACRO_ ## which_phi; \</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="preprocessor">#define MACRO_nfct_D(which_one) \</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="preprocessor">static inline void D_ ## which_one (X(plan) *ths) \</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="preprocessor"> int k_L; </span><span class="comment">/* plain index */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="preprocessor"> int i, t; \</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="preprocessor"> int kg[ths->d]; </span><span class="comment">/* multi index in g_hat,c_phi */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="preprocessor"> R c_phi_inv_k[ths->d+1]; </span><span class="comment">/* postfix product of PHI_HUT_INV */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="preprocessor"> int kg_plain[ths->d+1]; </span><span class="comment">/* postfix plain index */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="preprocessor"> R *g_hat, *f_hat; </span><span class="comment">/* local copy */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="preprocessor"> g_hat = ths->g_hat; \</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="preprocessor"> f_hat = ths->f_hat; \</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="preprocessor"> MACRO_nfct_D_init_result_ ## which_one \</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="preprocessor"> c_phi_inv_k[0] = K(1.0); \</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="preprocessor"> kg_plain[0] = 0; \</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor"> MACRO_init__kg; \</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="preprocessor"> if (ths->nfct_flags & PRE_PHI_HUT) \</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="preprocessor"> for (k_L = 0; k_L < ths->N_total; k_L++) \</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="preprocessor"> MACRO_update__phi_inv_k__kg_plain(which_one, with_PRE_PHI_HUT); \</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="preprocessor"> MACRO_nfct_D_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="preprocessor"> MACRO_count__kg; \</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="preprocessor"> } </span><span class="comment">/* for (k_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="preprocessor"> for (k_L = 0; k_L < ths->N_total; k_L++) \</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="preprocessor"> MACRO_update__phi_inv_k__kg_plain(which_one,compute_PHI_HUT_INV); \</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="preprocessor"> MACRO_nfct_D_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="preprocessor"> MACRO_count__kg; \</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="preprocessor"> } </span><span class="comment">/* for(k_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor">} </span><span class="comment">/* nfct_D */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> MACRO_nfct_D(A)</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> MACRO_nfct_D(T)</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="preprocessor">#define MACRO_nfct_B_PRE_FULL_PSI_compute_A \</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="preprocessor"> (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]]; \</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="preprocessor">#define MACRO_nfct_B_PRE_FULL_PSI_compute_T \</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="preprocessor"> g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj); \</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="preprocessor">#define MACRO_nfct_B_compute_A \</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="preprocessor"> (*fj) += phi_tilde[ths->d] * g[lg_plain[ths->d]]; \</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="preprocessor">#define MACRO_nfct_B_compute_T \</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="preprocessor"> g[lg_plain[ths->d]] += phi_tilde[ths->d] * (*fj); \</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="preprocessor">#define MACRO_compute_lg_offset__count_lg(i0) \</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="preprocessor"> </span><span class="comment">/* determine index in g-array corresponding to lb[(i0)] */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="preprocessor"> if (lb[(i0)] < 0) \</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor"> lg_offset[(i0)] = \</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="preprocessor"> (lb[(i0)] % fftw_2N(ths->n[(i0)])) + fftw_2N(ths->n[(i0)]); \</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="preprocessor"> lg_offset[(i0)] = lb[(i0)] % (fftw_2N(ths->n[(i0)])); \</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="preprocessor"> if (lg_offset[(i0)] >= ths->n[(i0)]) \</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="preprocessor"> lg_offset[(i0)] = -(fftw_2N(ths->n[(i0)]) - lg_offset[(i0)]); \</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="preprocessor">#define MACRO_set__lg__to__lg_offset \</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="preprocessor"> if (lg_offset[i] <= 0) \</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="preprocessor"> lg[i] = -lg_offset[i]; \</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="preprocessor"> count_lg[i] = -1; \</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="preprocessor"> lg[i] = +lg_offset[i]; \</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="preprocessor"> count_lg[i] = +1; \</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor">#define MACRO_count__lg(dim) \</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="preprocessor"> </span><span class="comment">/* turn around if we hit one of the boundaries */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor"> if ((lg[(dim)] == 0) || (lg[(dim)] == ths->n[(dim)]-1)) \</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor"> count_lg[(dim)] *= -1; \</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="preprocessor"> </span><span class="comment">/* move array index */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="preprocessor"> lg[(dim)] += count_lg[(dim)]; \</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="preprocessor">#define MACRO_init_lb_lg_lc \</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="preprocessor"> for (i = 0; i < ths->d; i++) \</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="preprocessor"> MACRO_nfct__lower_boundary(j, i); \</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="preprocessor"> MACRO_compute_lg_offset__count_lg(i); \</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="preprocessor"> MACRO_set__lg__to__lg_offset; \</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="preprocessor"> </span><span class="comment">/* counter for lg */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="preprocessor"> lc[i] = 0; \</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="preprocessor"> i = 0; \</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="preprocessor">#define MACRO_count__lg_lc \</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="preprocessor"> MACRO_count__lg(ths->d-1); \</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="preprocessor"> lc[ths->d - 1]++; \</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="preprocessor"> i = ths->d - 1; \</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="preprocessor"> while ((lc[i] == NFCT_SUMMANDS) && (i > 0)) \</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="preprocessor"> lc[i - 1]++; \</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="preprocessor"> lc[i] = 0; \</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="preprocessor"> </span><span class="comment">/* ansonsten lg[i-1] verschieben */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="preprocessor"> MACRO_count__lg(i - 1); \</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="preprocessor"> </span><span class="comment">/* lg[i] = anfangswert */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="preprocessor"> MACRO_set__lg__to__lg_offset; \</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="preprocessor"> i--; \</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="preprocessor">#define MACRO_update_phi_tilde_lg_plain(which_one, which_psi) \</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="preprocessor"> for (t = i; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="preprocessor"> MACRO__phi_tilde__ ## which_one(which_psi); \</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="preprocessor"> lg_plain[t+1] = lg_plain[t] * ths->n[t] + lg[t]; \</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="preprocessor">#define MACRO__phi_tilde__A(which_psi) \</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="preprocessor"> phi_tilde[t+1] = phi_tilde[t] * MACRO_ ## which_psi; \</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="preprocessor">#define MACRO__phi_tilde__T(which_psi) \</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="preprocessor"> if(lg[t] == 0 || lg[t] == ths->n[t] - 1) \</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="preprocessor"> phi_tilde[t+1] = phi_tilde[t] * MACRO_ ## which_psi; \</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="preprocessor"> phi_tilde[t+1] = K(0.5) * phi_tilde[t] * MACRO_ ## which_psi; \</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="preprocessor">#define MACRO_nfct_B(which_one) \</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="preprocessor">static inline void B_ ## which_one (nfct_plan *ths) \</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="preprocessor">{ </span><span class="comment">/* MACRO_nfct_B */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor"> int lb[ths->d]; </span><span class="comment">/* multi band with respect to x_j */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="preprocessor"> int j, t, i; </span><span class="comment">/* index nodes, help vars */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="preprocessor"> int lprod, l_L, ix; </span><span class="comment">/* index one row of B */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="preprocessor"> int lc[ths->d]; </span><span class="comment">/* multi index 0<=lc<2m+2 */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor"> int lg[ths->d]; </span><span class="comment">/* real index of g in array */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor"> int lg_offset[ths->d]; </span><span class="comment">/* offset in g according to u */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor"> int count_lg[ths->d]; </span><span class="comment">/* count summands (2m+2) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="preprocessor"> int lg_plain[ths->d+1]; </span><span class="comment">/* index of g in multi_array */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="preprocessor"> R *f, *g; </span><span class="comment">/* local copy */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="preprocessor"> R phi_tilde[ths->d+1]; </span><span class="comment">/* holds values for psi */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="preprocessor"> R *fj; </span><span class="comment">/* pointer to final result */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor"> f = ths->f; g = ths->g; \</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="preprocessor"> MACRO_nfct_B_init_result_ ## which_one \</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="preprocessor"> </span><span class="comment">/* both flags are set */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="preprocessor"> if ((ths->nfct_flags & PRE_PSI)&&(ths->nfct_flags & PRE_FULL_PSI)) \</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="preprocessor"> for (ix = 0, j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="preprocessor"> for (l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++) \</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="preprocessor"> MACRO_nfct_B_PRE_FULL_PSI_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="preprocessor"> phi_tilde[0] = K(1.0); \</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor"> lg_plain[0] = 0; \</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="preprocessor"> for (t = 0, lprod = 1; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="preprocessor"> lprod *= NFCT_SUMMANDS; \</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="preprocessor"> </span><span class="comment">/* PRE_PSI flag is set */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="preprocessor"> if (ths->nfct_flags & PRE_PSI) \</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="preprocessor"> for (j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="preprocessor"> MACRO_init_lb_lg_lc; \</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="preprocessor"> for (l_L = 0; l_L < lprod; l_L++) \</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="preprocessor"> MACRO_update_phi_tilde_lg_plain(which_one, with_PRE_PSI); \</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="preprocessor"> MACRO_nfct_B_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="preprocessor"> MACRO_count__lg_lc; \</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="preprocessor"> } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="preprocessor"> } </span><span class="comment">/* for(j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="preprocessor"> </span><span class="comment">/* no PSI flag is set */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="preprocessor"> for (j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="preprocessor"> MACRO_init_lb_lg_lc; \</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="preprocessor"> for (l_L = 0; l_L < lprod; l_L++) \</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="preprocessor"> MACRO_update_phi_tilde_lg_plain(which_one,compute_PSI); \</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="preprocessor"> MACRO_nfct_B_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="preprocessor"> MACRO_count__lg_lc; \</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="preprocessor"> } </span><span class="comment">/* for (l_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="preprocessor"> } </span><span class="comment">/* for (j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="preprocessor"> } </span><span class="comment">/* else (PRE_PSI && FULL_PRE_PSI) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="preprocessor">} </span><span class="comment">/* nfct_B */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> MACRO_nfct_B(A)</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> MACRO_nfct_B(T)</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="comment">/* more memory, but faster */</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="preprocessor">#define MACRO_nfct_full_psi(which_one) \</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="preprocessor">static inline void full_psi__ ## which_one(nfct_plan *ths) \</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="preprocessor"> int t, i; </span><span class="comment">/* index over all dimensions */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="preprocessor"> int j; </span><span class="comment">/* node index */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="preprocessor"> int l_L; </span><span class="comment">/* plain index 0 <= l_L < lprod */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="preprocessor"> int lc[ths->d]; </span><span class="comment">/* multi index 0<=lj<u+o+1 */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="preprocessor"> int lg_plain[ths->d+1]; </span><span class="comment">/* postfix plain index */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="preprocessor"> int count_lg[ths->d]; \</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="preprocessor"> int lg_offset[ths->d]; \</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="preprocessor"> int lg[ths->d]; \</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="preprocessor"> int lprod; </span><span class="comment">/* 'bandwidth' of matrix B */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="preprocessor"> int lb[ths->d]; </span><span class="comment">/* depends on x_j */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="preprocessor"> R phi_tilde[ths->d+1]; \</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="preprocessor"> R eps = ths->nfct_full_psi_eps; \</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="preprocessor"> int *index_g, *index_f; \</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="preprocessor"> R *new_psi; \</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="preprocessor"> int ix, ix_old, size_psi; \</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="preprocessor"> phi_tilde[0] = K(1.0); \</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="preprocessor"> lg_plain[0] = 0; \</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="preprocessor"> if (ths->nfct_flags & PRE_PSI) \</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="preprocessor"> size_psi = ths->M_total; \</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="preprocessor"> index_f = (int*)Y(malloc)(ths->M_total * sizeof(int)); \</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="preprocessor"> index_g = (int*)Y(malloc)(size_psi * sizeof(int)); \</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="preprocessor"> new_psi = (R*)Y(malloc)(size_psi * sizeof(R)); \</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="preprocessor"> for (t = 0,lprod = 1; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="preprocessor"> lprod *= NFCT_SUMMANDS; \</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="preprocessor"> eps *= nfct_phi(ths, K(0.0), t); \</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor"> for (ix = 0, ix_old = 0, j = 0; j < ths->M_total; j++) \</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="preprocessor"> MACRO_init_lb_lg_lc; \</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="preprocessor"> for (l_L = 0; l_L < lprod; l_L++) \</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="preprocessor"> MACRO_update_phi_tilde_lg_plain(which_one, with_PRE_PSI); \</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="preprocessor"> if (phi_tilde[ths->d] > eps) \</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="preprocessor"> index_g[ix] = lg_plain[ths->d]; \</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="preprocessor"> new_psi[ix] = phi_tilde[ths->d]; \</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="preprocessor"> ix++; \</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="preprocessor"> if (ix == size_psi) \</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="preprocessor"> size_psi += ths->M_total; \</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="preprocessor"> index_g = (int*)realloc(index_g, size_psi * sizeof(int)); \</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="preprocessor"> new_psi = (R*)realloc(new_psi, size_psi * sizeof(R)); \</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="preprocessor"> MACRO_count__lg_lc; \</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor"> } </span><span class="comment">/* for (l_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="preprocessor"> index_f[j] = ix - ix_old; \</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="preprocessor"> ix_old = ix; \</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="preprocessor"> } </span><span class="comment">/* for(j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="preprocessor"> Y(free)(ths->psi); \</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="preprocessor"> size_psi = ix; \</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="preprocessor"> ths->size_psi = size_psi; \</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="preprocessor"> index_g = (int*)realloc(index_g, size_psi * sizeof(int)); \</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="preprocessor"> new_psi = (R*)realloc(new_psi, size_psi * sizeof(R)); \</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="preprocessor"> ths->psi = new_psi; \</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="preprocessor"> ths->psi_index_g = index_g; \</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="preprocessor"> ths->psi_index_f = index_f; \</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="preprocessor"> } </span><span class="comment">/* if(PRE_PSI) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> MACRO_nfct_full_psi(A)</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> MACRO_nfct_full_psi(T)</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="comment">/* user routines */</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="keywordtype">void</span> X(trafo)(X(plan) *ths)</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> {</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="comment">/* use ths->my_fftw_r2r_plan */</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> ths->g_hat = ths->g1;</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> ths->g = ths->g2;</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="comment">/* form \f$ \hat g_k = \frac{\hat f_k}{c_k\left(\phi\right)} \text{ for }</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="comment"> * k \in I_N \f$ */</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> TIC(0)</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> D_A(ths);</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> TOC(0)</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="comment">/* Compute by d-variate discrete Fourier transform</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="comment"> * \f$ g_l = \sum_{k \in I_N} \hat g_k {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="comment"> * \text{ for } l \in I_n \f$ */</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> TIC(1)</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> Z(execute)(ths->my_fftw_r2r_plan);</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> TOC(1)</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> </div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> if (ths->nfct_flags & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> full_psi__A(ths);</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="comment">/* Set \f$ f_j = \sum_{l \in I_n,m(x_j)} g_l \psi\left(x_j-\frac{l}{n}\right)</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="comment"> * \text{ for } j=0,\hdots,M-1 \f$ */</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> TIC(2)</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> B_A(ths);</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> TOC(2)</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> if (ths->nfct_flags & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> {</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> Y(free)(ths->psi_index_g);</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> Y(free)(ths->psi_index_f);</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> }</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> } <span class="comment">/* nfct_trafo */</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="keywordtype">void</span> X(adjoint)(X(plan) *ths)</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> {</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="comment">/* use ths->my_fftw_plan */</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> ths->g_hat = ths->g2;</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> ths->g = ths->g1;</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> </div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="keywordflow">if</span> (ths->nfct_flags & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> full_psi__T(ths);</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> </div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="comment">/* Set \f$ g_l = \sum_{j=0}^{M-1} f_j \psi\left(x_j-\frac{l}{n}\right)</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="comment"> * \text{ for } l \in I_n,m(x_j) \f$ */</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> TIC(2)</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> B_T(ths);</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> TOC(2)</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> if (ths->nfct_flags & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> {</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> Y(free)(ths->psi_index_g);</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> Y(free)(ths->psi_index_f);</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> }</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> </div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="comment">/* Compute by d-variate discrete cosine transform</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="comment"> * \f$ \hat g_k = \sum_{l \in I_n} g_l {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="comment"> * \text{ for } k \in I_N\f$ */</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> TIC(1)</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> Z(execute)(ths->my_fftw_r2r_plan);</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> TOC(1)</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> </div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="comment">/* Form \f$ \hat f_k = \frac{\hat g_k}{c_k\left(\phi\right)} \text{ for }</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="comment"> * k \in I_N \f$ */</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> TIC(0)</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> D_T(ths);</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> TOC(0)</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> } <span class="comment">/* nfct_adjoint */</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> </div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> static inline <span class="keywordtype">void</span> precompute_phi_hut(X(plan) *ths)</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> {</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="keywordtype">int</span> kg[ths->d]; <span class="comment">/* index over all frequencies */</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="keywordtype">int</span> t; <span class="comment">/* index over all dimensions */</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> ths->c_phi_inv = (R**)Y(malloc)(ths->d * <span class="keyword">sizeof</span>(R*));</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> </div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="keywordflow">for</span> (t = 0; t < ths->d; t++)</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> {</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> ths->c_phi_inv[t] = (R*)Y(malloc)(ths->N[t] * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="keywordflow">for</span> (kg[t] = 0; kg[t] < ths->N[t]; kg[t]++)</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> {</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> ths->c_phi_inv[t][kg[t]] = MACRO_compute_PHI_HUT_INV;</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> }</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> }</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> } <span class="comment">/* nfct_phi_hut */</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> </div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="keywordtype">void</span> X(precompute_psi)(X(plan) *ths)</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> {</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="keywordtype">int</span> t; <span class="comment">/* index over all dimensions */</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <span class="keywordtype">int</span> j; <span class="comment">/* index over all nodes */</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="keywordtype">int</span> lc[ths->d]; <span class="comment">/* index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="keywordtype">int</span> lb[ths->d]; <span class="comment">/* depends on x_j */</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> </div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="keywordflow">for</span> (t = 0; t < ths->d; t++)</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> {</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="keywordflow">for</span> (j = 0; j < ths->M_total; j++)</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> {</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> MACRO_nfct__lower_boundary(j, t);</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="keywordflow">for</span>(lc[t] = 0; lc[t] < NFCT_SUMMANDS; lc[t]++)</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> ths->psi[(j * ths->d + t) * NFCT_SUMMANDS + lc[t]] = MACRO_compute_PSI;</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> } <span class="comment">/* for (j) */</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> } <span class="comment">/* for (t) */</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> } <span class="comment">/* nfct_precompute_psi */</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> init_help(X(plan) *ths)</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> {</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="keywordtype">int</span> t; <span class="comment">/* index over all dimensions */</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> ths->N_total = prod_int(ths->N, ths->d);</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> ths->sigma = (R*)Y(malloc)(ths->d * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="keywordflow">for</span> (t = 0; t < ths->d; t++)</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> ths->sigma[t] = ((R)(ths->n[t] - 1)) / ths->N[t];</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> </div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="comment">/* Assign r2r transform kinds for each dimension */</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> ths->r2r_kind = (Z(r2r_kind)*)Y(malloc)(ths->d * <span class="keyword">sizeof</span> (Z(r2r_kind)));</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <span class="keywordflow">for</span> (t = 0; t < ths->d; t++)</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> ths->r2r_kind[t] = FFTW_REDFT00;</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> </div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> NFCT_WINDOW_HELP_INIT;</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> if (ths->nfct_flags & MALLOC_X)</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> ths->x = (R*)Y(malloc)(ths->d * ths->M_total * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> </div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="keywordflow">if</span> (ths->nfct_flags & MALLOC_F_HAT)</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> ths->f_hat = (R*)Y(malloc)(ths->N_total * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> </div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="keywordflow">if</span> (ths->nfct_flags & MALLOC_F)</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> ths->f = (R*)Y(malloc)(ths->M_total * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="keywordflow">if</span> (ths->nfct_flags & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> precompute_phi_hut(ths);</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> </div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="comment">/* NO FFTW_MALLOC HERE */</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="keywordflow">if</span> (ths->nfct_flags & PRE_PSI)</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> {</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> ths->psi =</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> (R*)Y(malloc)(ths->M_total * ths->d * NFCT_SUMMANDS * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> </div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="comment">/* Set default for full_psi_eps */</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> ths->nfct_full_psi_eps = POW(K(10.0), K(-10.0));</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> }</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> </div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="keywordflow">if</span> (ths->nfct_flags & FFTW_INIT)</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> {</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> ths->g1 =</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> (R*)Y(malloc)(prod_int(ths->n, ths->d) * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> </div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="keywordflow">if</span> (ths->nfct_flags & FFT_OUT_OF_PLACE)</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> ths->g2 =</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> (R*) Y(malloc)(prod_int(ths->n, ths->d) * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> ths->g2 = ths->g1;</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> </div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> ths->my_fftw_r2r_plan =</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> Z(plan_r2r)(ths->d, ths->n, ths->g1, ths->g2, ths->r2r_kind,</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> ths->fftw_flags);</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> }</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> </div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> ths->mv_trafo = (void (*) (<span class="keywordtype">void</span>* ))X(trafo);</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> ths->mv_adjoint = (void (*) (<span class="keywordtype">void</span>* ))X(adjoint);</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> }</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> </div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> <span class="keywordtype">void</span> X(init)(X(plan) *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> {</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> </div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> ths->d = d;</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> ths->M_total = M_total;</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> ths->N = (<span class="keywordtype">int</span>*) Y(malloc)(ths->d * <span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> </div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="keywordflow">for</span> (t = 0;t < d; t++)</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> ths->N[t] = N[t];</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> </div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> ths->n = (<span class="keywordtype">int</span>*) Y(malloc)(ths->d * <span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> </div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="keywordflow">for</span> (t = 0; t < d; t++)</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> ths->n[t] = fftw_2N(Y(next_power_of_2)(ths->N[t]));</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> </div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="comment">/* Was soll dieser Ausdruck machen? Es handelt sich um eine Ganzzahl!</span></div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="comment"></span></div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> <span class="comment"> WINDOW_HELP_ESTIMATE_m;</span></div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> ths->nfct_flags = NFCT_DEFAULT_FLAGS;</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> ths->fftw_flags = FFTW_DEFAULT_FLAGS;</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> </div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> init_help(ths);</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> }</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> </div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> <span class="comment">/* Was macht diese Funktion. Wird sie gebraucht? Bei NFST ist sie auch in</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> <span class="comment"> * nfft3.h deklariert.</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="comment">void nfct_init_m(nfct_plan *ths, int d, int *N, int M_total, int m)</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> <span class="comment">{</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="comment"> int t, n[d];</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="comment"></span></div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="comment"> for(t = 0; t < d; t++)</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="comment"> n[t] = fftw_2N(X(next_power_of_2)(N[t]));</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> <span class="comment"></span></div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="comment"> nfct_init_guru(ths, d, N, M_total, n, m, NFCT_DEFAULT_FLAGS, FFTW_DEFAULT_FLAGS);</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="comment">}</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> </div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> <span class="keywordtype">void</span> X(init_guru)(X(plan) *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M_total, <span class="keywordtype">int</span> *n, <span class="keywordtype">int</span> m,</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keywordtype">unsigned</span> nfct_flags, <span class="keywordtype">unsigned</span> fftw_flags)</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> {</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> <span class="keywordtype">int</span> t; <span class="comment">/* index over all dimensions */</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> </div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> ths->d = d;</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> ths->M_total = M_total;</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> ths->N = (<span class="keywordtype">int</span>*)Y(malloc)(ths->d * <span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> </div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> <span class="keywordflow">for</span> (t = 0; t < d; t++)</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> ths->N[t] = N[t];</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> </div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> ths->n = (<span class="keywordtype">int</span>*)Y(malloc)(ths->d * <span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> </div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="keywordflow">for</span> (t = 0; t < d; t++)</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> ths->n[t] = n[t];</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> </div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> ths->m = m;</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> </div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> ths->nfct_flags = nfct_flags;</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> ths->fftw_flags = fftw_flags;</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> </div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> init_help(ths);</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> }</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> </div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keywordtype">void</span> X(init_1d)(X(plan) *ths, <span class="keywordtype">int</span> N0, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> {</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="keywordtype">int</span> N[1];</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> </div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> N[0] = N0;</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> X(init)(ths, 1, N, M_total);</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> }</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="keywordtype">void</span> X(init_2d)(X(plan) *ths, <span class="keywordtype">int</span> N0, <span class="keywordtype">int</span> N1, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> {</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> <span class="keywordtype">int</span> N[2];</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> </div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> N[0] = N0;</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> N[1] = N1;</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> X(init)(ths, 2, N, M_total);</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> }</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> </div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="keywordtype">void</span> X(init_3d)(X(plan) *ths, <span class="keywordtype">int</span> N0, <span class="keywordtype">int</span> N1, <span class="keywordtype">int</span> N2, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> {</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <span class="keywordtype">int</span> N[3];</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> </div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> N[0] = N0;</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> N[1] = N1;</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> N[2] = N2;</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> X(init)(ths, 3, N, M_total);</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> }</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> </div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="keywordtype">void</span> X(finalize)(X(plan) *ths)</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> {</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="keywordtype">int</span> t; <span class="comment">/* dimension index*/</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> </div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <span class="keywordflow">if</span> (ths->nfct_flags & FFTW_INIT)</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> {</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> Z(destroy_plan)(ths->my_fftw_r2r_plan);</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="keywordflow">if</span> (ths->nfct_flags & FFT_OUT_OF_PLACE)</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> Y(free)(ths->g2);</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> </div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> Y(free)(ths->g1);</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> }</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> </div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> <span class="comment">/* NO FFTW_FREE HERE */</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="keywordflow">if</span> (ths->nfct_flags & PRE_PSI)</div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> {</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> Y(free)(ths->psi);</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> }</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> </div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="keywordflow">if</span> (ths->nfct_flags & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> {</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="keywordflow">for</span> (t = 0; t < ths->d; t++)</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> Y(free)(ths->c_phi_inv[t]);</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> Y(free)(ths->c_phi_inv);</div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> }</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> </div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="keywordflow">if</span> (ths->nfct_flags & MALLOC_F)</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> Y(free)(ths->f);</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> </div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="keywordflow">if</span>(ths->nfct_flags & MALLOC_F_HAT)</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> Y(free)(ths->f_hat);</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> </div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="keywordflow">if</span> (ths->nfct_flags & MALLOC_X)</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> Y(free)(ths->x);</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> </div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> WINDOW_HELP_FINALIZE;</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> </div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> Y(free)(ths->N);</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> Y(free)(ths->n);</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> Y(free)(ths->sigma);</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> </div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> Y(free)(ths->r2r_kind);</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> } <span class="comment">/* nfct_finalize */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfft3_8h.html b/doc/api/html/nfft3_8h.html
new file mode 100644
index 0000000..6d1f936
--- /dev/null
+++ b/doc/api/html/nfft3_8h.html
@@ -0,0 +1,1543 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfft3.h File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">nfft3.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include "nfft3conf.h"</code><br/>
+<code>#include <fftw3.h></code><br/>
+</div>
+<p><a href="nfft3_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__complex.html">nfftf_mv_plan_complex</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__double.html">nfftf_mv_plan_double</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html">nfftf_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html">nfft_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__complex.html">nfftl_mv_plan_complex</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__double.html">nfftl_mv_plan_double</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html">nfftl_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html">nfctf_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html">nfct_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html">nfctl_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html">nfstf_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html">nfst_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html">nfstl_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html">nnfftf_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html">nnfft_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html">nnfftl_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html">nsfftf_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html">nsfft_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html">nsfftl_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__2d1d__plan.html">mrif_inh_2d1d_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__3d__plan.html">mrif_inh_3d_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__2d1d__plan.html">mril_inh_2d1d_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__3d__plan.html">mril_inh_3d_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html">nfsftf_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html">nfsft_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html">nfsftl_plan</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan_</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html">nfsoft_plan_</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan_</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html">solverf_plan_complex</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html">solverf_plan_double</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html">solver_plan_double</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html">solverl_plan_complex</a></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html">solverl_plan_double</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ae517f6bde0ab33b87890bb20a018546a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae517f6bde0ab33b87890bb20a018546a"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFFT_CONCAT</b>(prefix, name) prefix ## name</td></tr>
+<tr class="memitem:a3aee7f9abb803d4208e483d24ce23847"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3aee7f9abb803d4208e483d24ce23847"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFFT_EXTERN</b> extern</td></tr>
+<tr class="memitem:a0d1eb31c2f64e41fa0399b1eb7b5ddd4"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a0d1eb31c2f64e41fa0399b1eb7b5ddd4">MACRO_MV_PLAN</a>(RC)</td></tr>
+<tr class="memdesc:a0d1eb31c2f64e41fa0399b1eb7b5ddd4"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <a href="#a0d1eb31c2f64e41fa0399b1eb7b5ddd4"></a><br/></td></tr>
+<tr class="memitem:abb27e11cf00ef4d6c30c8bcedf7da849"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abb27e11cf00ef4d6c30c8bcedf7da849"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFFT_MANGLE_DOUBLE</b>(name) NFFT_CONCAT(nfft_, name)</td></tr>
+<tr class="memitem:acace1e2cd22c39b9b6f0fee89315e092"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acace1e2cd22c39b9b6f0fee89315e092"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFFT_MANGLE_FLOAT</b>(name) NFFT_CONCAT(nfftf_, name)</td></tr>
+<tr class="memitem:a2cf83ec3ae466fbda3fa01f5cf6263fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cf83ec3ae466fbda3fa01f5cf6263fe"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFFT_MANGLE_LONG_DOUBLE</b>(name) NFFT_CONCAT(nfftl_, name)</td></tr>
+<tr class="memitem:a038f615fdd7fd2ef683924657745121a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a038f615fdd7fd2ef683924657745121a"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFFT_DEFINE_API</b>(X, Y, R, C)</td></tr>
+<tr class="memitem:ada3a356fdaf5840f98374a0a7aaf3e9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada3a356fdaf5840f98374a0a7aaf3e9c"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PRE_PHI_HUT</b> (1U<< 0)</td></tr>
+<tr class="memitem:a01ebac2d2071639df189f083fc9f24eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01ebac2d2071639df189f083fc9f24eb"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FG_PSI</b> (1U<< 1)</td></tr>
+<tr class="memitem:abb1ad048b695cb806baf010c5d1b2caf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abb1ad048b695cb806baf010c5d1b2caf"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PRE_LIN_PSI</b> (1U<< 2)</td></tr>
+<tr class="memitem:a9c5a5ab61009a801082897ca40a1658c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c5a5ab61009a801082897ca40a1658c"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PRE_FG_PSI</b> (1U<< 3)</td></tr>
+<tr class="memitem:a959463a5c7723ccef5057ddcb784b40c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a959463a5c7723ccef5057ddcb784b40c"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PRE_PSI</b> (1U<< 4)</td></tr>
+<tr class="memitem:a7ad8a7e19519b16340dabec48899c6a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ad8a7e19519b16340dabec48899c6a4"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PRE_FULL_PSI</b> (1U<< 5)</td></tr>
+<tr class="memitem:a353185384f87de0dc4320a82652ef724"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a353185384f87de0dc4320a82652ef724"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>MALLOC_X</b> (1U<< 6)</td></tr>
+<tr class="memitem:a02d52cb02b6cfdbc3e4d5fd4de1aef9e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02d52cb02b6cfdbc3e4d5fd4de1aef9e"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>MALLOC_F_HAT</b> (1U<< 7)</td></tr>
+<tr class="memitem:aa7b5098f4136080bbe0dd989973e2a69"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7b5098f4136080bbe0dd989973e2a69"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>MALLOC_F</b> (1U<< 8)</td></tr>
+<tr class="memitem:a9193f768d5839892d0e303080c370eaf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9193f768d5839892d0e303080c370eaf"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FFT_OUT_OF_PLACE</b> (1U<< 9)</td></tr>
+<tr class="memitem:ad3fe6867a3351441c6f44dd5a3746f5b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3fe6867a3351441c6f44dd5a3746f5b"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FFTW_INIT</b> (1U<< 10)</td></tr>
+<tr class="memitem:a4915d42afc8200ce7e0bf3c60f5a5164"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4915d42afc8200ce7e0bf3c60f5a5164"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFFT_SORT_NODES</b> (1U<< 11)</td></tr>
+<tr class="memitem:a0dc58c2f9ab115527fce4553e523fe65"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0dc58c2f9ab115527fce4553e523fe65"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFFT_OMP_BLOCKWISE_ADJOINT</b> (1U<<12)</td></tr>
+<tr class="memitem:a44c85197c6bdcf4b632aeff5e94d5329"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44c85197c6bdcf4b632aeff5e94d5329"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PRE_ONE_PSI</b> (PRE_LIN_PSI| PRE_FG_PSI| PRE_PSI| PRE_FULL_PSI)</td></tr>
+<tr class="memitem:a8aca2e82cc4aad289d766e9081db2342"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8aca2e82cc4aad289d766e9081db2342"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFCT_MANGLE_DOUBLE</b>(name) NFFT_CONCAT(nfct_, name)</td></tr>
+<tr class="memitem:aae454c5f4fb644fc43fcbcb38aa2ad21"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae454c5f4fb644fc43fcbcb38aa2ad21"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFCT_MANGLE_FLOAT</b>(name) NFFT_CONCAT(nfctf_, name)</td></tr>
+<tr class="memitem:ac5f221d2bdedda863256ad71afb59aa8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac5f221d2bdedda863256ad71afb59aa8"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFCT_MANGLE_LONG_DOUBLE</b>(name) NFFT_CONCAT(nfctl_, name)</td></tr>
+<tr class="memitem:acc3e466d456fb09b49d1419c700b17a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc3e466d456fb09b49d1419c700b17a8"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFCT_DEFINE_API</b>(X, Y, R, C)</td></tr>
+<tr class="memitem:a31de74e769995b389a073cc1a11a635d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31de74e769995b389a073cc1a11a635d"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFST_MANGLE_DOUBLE</b>(name) NFFT_CONCAT(nfst_, name)</td></tr>
+<tr class="memitem:a2179856efcede20ea65f4258a0d0d733"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2179856efcede20ea65f4258a0d0d733"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFST_MANGLE_FLOAT</b>(name) NFFT_CONCAT(nfstf_, name)</td></tr>
+<tr class="memitem:ac580ff2588b8c11fe4afff54283f59f5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac580ff2588b8c11fe4afff54283f59f5"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFST_MANGLE_LONG_DOUBLE</b>(name) NFFT_CONCAT(nfstl_, name)</td></tr>
+<tr class="memitem:a903d25a4862e94e5f89cda05c6e37b91"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a903d25a4862e94e5f89cda05c6e37b91"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFST_DEFINE_API</b>(X, Y, R, C)</td></tr>
+<tr class="memitem:a47809430feb060b7a83995abd8a1463e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47809430feb060b7a83995abd8a1463e"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NNFFT_MANGLE_DOUBLE</b>(name) NFFT_CONCAT(nnfft_, name)</td></tr>
+<tr class="memitem:a3ad081c46c1cab2db96655b39606c35d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ad081c46c1cab2db96655b39606c35d"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NNFFT_MANGLE_FLOAT</b>(name) NFFT_CONCAT(nnfftf_, name)</td></tr>
+<tr class="memitem:a42846731d87023ee66232e72c613ad41"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42846731d87023ee66232e72c613ad41"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NNFFT_MANGLE_LONG_DOUBLE</b>(name) NFFT_CONCAT(nnfftl_, name)</td></tr>
+<tr class="memitem:a8700e802f404ffbc5c550435fc424cad"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8700e802f404ffbc5c550435fc424cad"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NNFFT_DEFINE_API</b>(X, Y, Z, R, C)</td></tr>
+<tr class="memitem:abfc80597fb6dcd28f3b9728bd7082642"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abfc80597fb6dcd28f3b9728bd7082642"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>MALLOC_V</b> (1U<< 11)</td></tr>
+<tr class="memitem:adf3e9bfac19f91b9ddc0b4d7e6a6d058"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf3e9bfac19f91b9ddc0b4d7e6a6d058"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NSFFT_MANGLE_DOUBLE</b>(name) NFFT_CONCAT(nsfft_, name)</td></tr>
+<tr class="memitem:a3c980c7d23c9e5613e89f6e9eeb61522"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c980c7d23c9e5613e89f6e9eeb61522"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NSFFT_MANGLE_FLOAT</b>(name) NFFT_CONCAT(nsfftf_, name)</td></tr>
+<tr class="memitem:abf287fadc0bd736d90c31cbf94403765"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf287fadc0bd736d90c31cbf94403765"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NSFFT_MANGLE_LONG_DOUBLE</b>(name) NFFT_CONCAT(nsfftl_, name)</td></tr>
+<tr class="memitem:a84826a12df920d845086a31bd4256c7b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>NSFFT_DEFINE_API</b>(X, Y, Z, R, C)</td></tr>
+<tr class="memitem:a3a5a1f8be42adf0575f0e0c4b8e0a32a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3a5a1f8be42adf0575f0e0c4b8e0a32a"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NSDFT</b> (1U<< 12)</td></tr>
+<tr class="memitem:aa0c7f7ad1ad1f371eef969d543b57fb8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0c7f7ad1ad1f371eef969d543b57fb8"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>MRI_MANGLE_DOUBLE</b>(name) NFFT_CONCAT(mri_, name)</td></tr>
+<tr class="memitem:a73bcb00b7f86d1862cd1fb121e3d5924"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73bcb00b7f86d1862cd1fb121e3d5924"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>MRI_MANGLE_FLOAT</b>(name) NFFT_CONCAT(mrif_, name)</td></tr>
+<tr class="memitem:a2af03d945f2809254dfda35ce8ce933f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2af03d945f2809254dfda35ce8ce933f"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>MRI_MANGLE_LONG_DOUBLE</b>(name) NFFT_CONCAT(mril_, name)</td></tr>
+<tr class="memitem:a50af9dcbe46f6cc4fee5141873098415"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>MRI_DEFINE_API</b>(X, Z, R, C)</td></tr>
+<tr class="memitem:aadd481b947f7d9c24f54b386e3579da1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aadd481b947f7d9c24f54b386e3579da1"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_MANGLE_DOUBLE</b>(name) NFFT_CONCAT(nfsft_, name)</td></tr>
+<tr class="memitem:a02786180402d502acfa410bc0c0f5c6b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02786180402d502acfa410bc0c0f5c6b"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_MANGLE_FLOAT</b>(name) NFFT_CONCAT(nfsftf_, name)</td></tr>
+<tr class="memitem:ab05ba2d6ff05bf13a77a0a26d0adedb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab05ba2d6ff05bf13a77a0a26d0adedb2"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_MANGLE_LONG_DOUBLE</b>(name) NFFT_CONCAT(nfsftl_, name)</td></tr>
+<tr class="memitem:a80ade6852f7c1215d2ebc936a734250e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a80ade6852f7c1215d2ebc936a734250e"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_DEFINE_API</b>(X, Z, R, C)</td></tr>
+<tr class="memitem:a65036f479a7421863956c02aa78bc9be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65036f479a7421863956c02aa78bc9be"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_NORMALIZED</b> (1U << 0)</td></tr>
+<tr class="memitem:aba029560a4a506c8f2dad185511db827"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba029560a4a506c8f2dad185511db827"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_USE_NDFT</b> (1U << 1)</td></tr>
+<tr class="memitem:a6b9eed1e7bcf862dcc3111509075fcbb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6b9eed1e7bcf862dcc3111509075fcbb"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_USE_DPT</b> (1U << 2)</td></tr>
+<tr class="memitem:a02e4313d15b24c79e6802f853d452454"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02e4313d15b24c79e6802f853d452454"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_MALLOC_X</b> (1U << 3)</td></tr>
+<tr class="memitem:ab76dcf8db948f18cc87403dac804fc68"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab76dcf8db948f18cc87403dac804fc68"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_MALLOC_F_HAT</b> (1U << 5)</td></tr>
+<tr class="memitem:af3bc3ab774cda0c1c765e97066893d30"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3bc3ab774cda0c1c765e97066893d30"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_MALLOC_F</b> (1U << 6)</td></tr>
+<tr class="memitem:ac8a292845f0bdec6b0d8ef6eb693a00e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac8a292845f0bdec6b0d8ef6eb693a00e"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_PRESERVE_F_HAT</b> (1U << 7)</td></tr>
+<tr class="memitem:acf7d73753b74dbf148167c3d46226f09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf7d73753b74dbf148167c3d46226f09"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_PRESERVE_X</b> (1U << 8)</td></tr>
+<tr class="memitem:a45962e763c2c551c1ea764a68b686b5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a45962e763c2c551c1ea764a68b686b5c"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_PRESERVE_F</b> (1U << 9)</td></tr>
+<tr class="memitem:aa808899fc4db422c7b23470e6baad904"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa808899fc4db422c7b23470e6baad904"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_DESTROY_F_HAT</b> (1U << 10)</td></tr>
+<tr class="memitem:a6f22df0b292db920d795b3e3569181f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f22df0b292db920d795b3e3569181f2"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_DESTROY_X</b> (1U << 11)</td></tr>
+<tr class="memitem:a2b32e2eabd33bf0886f6df45365d04c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b32e2eabd33bf0886f6df45365d04c0"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_DESTROY_F</b> (1U << 12)</td></tr>
+<tr class="memitem:a9ed987164acf6e362ab2878506fbca95"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ed987164acf6e362ab2878506fbca95"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_NO_DIRECT_ALGORITHM</b> (1U << 13)</td></tr>
+<tr class="memitem:aa228bbed7ddbbb4a15f1cd11ec27b415"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa228bbed7ddbbb4a15f1cd11ec27b415"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_NO_FAST_ALGORITHM</b> (1U << 14)</td></tr>
+<tr class="memitem:a7797dfe75149e88ee680fc2579c31505"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7797dfe75149e88ee680fc2579c31505"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_ZERO_F_HAT</b> (1U << 16)</td></tr>
+<tr class="memitem:a8be22087991e0a82cfa59a3f0f2a5e86"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8be22087991e0a82cfa59a3f0f2a5e86"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_INDEX</b>(k, n, plan) ((2*(plan)->N+2)*((plan)->N-n+1)+(plan)->N+k+1)</td></tr>
+<tr class="memitem:ad426bf64ff72d6e3c2450fbb56146a44"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad426bf64ff72d6e3c2450fbb56146a44"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSFT_F_HAT_SIZE</b>(N) ((2*N+2)*(2*N+2))</td></tr>
+<tr class="memitem:a44d97472ab10ca3b256fd0c33cb3737e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44d97472ab10ca3b256fd0c33cb3737e"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_MANGLE_DOUBLE</b>(name) NFFT_CONCAT(fpt_, name)</td></tr>
+<tr class="memitem:a80067368d7e171b07bfa417af75775d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a80067368d7e171b07bfa417af75775d3"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_MANGLE_FLOAT</b>(name) NFFT_CONCAT(fptf_, name)</td></tr>
+<tr class="memitem:aa27ec6913fe46da3571d2080c6d722d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa27ec6913fe46da3571d2080c6d722d5"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_MANGLE_LONG_DOUBLE</b>(name) NFFT_CONCAT(fptl_, name)</td></tr>
+<tr class="memitem:a8bfac1df57d74c1d7bed37487e241bcd"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>FPT_DEFINE_API</b>(X, Y, R, C)</td></tr>
+<tr class="memitem:a43cffc40fea4280ae0bcbe948109a3be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a43cffc40fea4280ae0bcbe948109a3be"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_NO_STABILIZATION</b> (1U << 0)</td></tr>
+<tr class="memitem:a33b9330253f419a91ef09a1b0d7a2667"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a33b9330253f419a91ef09a1b0d7a2667"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_NO_FAST_ALGORITHM</b> (1U << 2)</td></tr>
+<tr class="memitem:adbf3440a08ccd763556ff4caa36693d9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbf3440a08ccd763556ff4caa36693d9"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_NO_DIRECT_ALGORITHM</b> (1U << 3)</td></tr>
+<tr class="memitem:a1ee771544214aba96ee012095feeead1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ee771544214aba96ee012095feeead1"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_PERSISTENT_DATA</b> (1U << 4)</td></tr>
+<tr class="memitem:ad5594ac14b8a368f0103761361af5691"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5594ac14b8a368f0103761361af5691"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_FUNCTION_VALUES</b> (1U << 5)</td></tr>
+<tr class="memitem:aba75cd704c2ca4153c1733b4cb3c977f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba75cd704c2ca4153c1733b4cb3c977f"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>FPT_AL_SYMMETRY</b> (1U << 6)</td></tr>
+<tr class="memitem:ab40821fed9fe63e42e2ee665f0dae7ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab40821fed9fe63e42e2ee665f0dae7ef"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_MANGLE_DOUBLE</b>(name) NFFT_CONCAT(nfsoft_, name)</td></tr>
+<tr class="memitem:a4e387b12df84d52678c2734f5b94d217"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e387b12df84d52678c2734f5b94d217"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_MANGLE_FLOAT</b>(name) NFFT_CONCAT(nfsoftf_, name)</td></tr>
+<tr class="memitem:a492d027375c61b20ee5ad37d61ddb6a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a492d027375c61b20ee5ad37d61ddb6a9"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_MANGLE_LONG_DOUBLE</b>(name) NFFT_CONCAT(nfsoftl_, name)</td></tr>
+<tr class="memitem:ab64e7dca068fc797700ea5a1f294430f"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_DEFINE_API</b>(X, Y, Z, R, C)</td></tr>
+<tr class="memitem:a8c53e32dd194bda4a828c15ad044d44a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8c53e32dd194bda4a828c15ad044d44a"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_NORMALIZED</b> (1U << 0)</td></tr>
+<tr class="memitem:a14cae92f8ee539b4a41aebdf913ef2c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14cae92f8ee539b4a41aebdf913ef2c5"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_USE_NDFT</b> (1U << 1)</td></tr>
+<tr class="memitem:a619b249b5d4b4675d2ce9a17d7817590"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a619b249b5d4b4675d2ce9a17d7817590"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_USE_DPT</b> (1U << 2)</td></tr>
+<tr class="memitem:abe0d04599c1b06144e9a66fc2ac7b09d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe0d04599c1b06144e9a66fc2ac7b09d"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_MALLOC_X</b> (1U << 3)</td></tr>
+<tr class="memitem:a379d5bf88e399cf492d86090ce47d47d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a379d5bf88e399cf492d86090ce47d47d"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_REPRESENT</b> (1U << 4)</td></tr>
+<tr class="memitem:a846e8298ed59219f7072230bd61c7a2a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a846e8298ed59219f7072230bd61c7a2a"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_MALLOC_F_HAT</b> (1U << 5)</td></tr>
+<tr class="memitem:ac65bdc42b4c11296197dc991bbebbd12"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac65bdc42b4c11296197dc991bbebbd12"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_MALLOC_F</b> (1U << 6)</td></tr>
+<tr class="memitem:a83119b0d4e62f7cd83e0f74c5ef08dec"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83119b0d4e62f7cd83e0f74c5ef08dec"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_PRESERVE_F_HAT</b> (1U << 7)</td></tr>
+<tr class="memitem:a2650cbfde4c8259e5059d6e9b91e0ec3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2650cbfde4c8259e5059d6e9b91e0ec3"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_PRESERVE_X</b> (1U << 8)</td></tr>
+<tr class="memitem:a629a86dd29a3cf09872755cd82bf7062"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a629a86dd29a3cf09872755cd82bf7062"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_PRESERVE_F</b> (1U << 9)</td></tr>
+<tr class="memitem:ad324d67114a4f52a9fc86d2639745acd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad324d67114a4f52a9fc86d2639745acd"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_DESTROY_F_HAT</b> (1U << 10)</td></tr>
+<tr class="memitem:ab7ca87a4bb214bcc25d544aa0b6dd503"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab7ca87a4bb214bcc25d544aa0b6dd503"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_DESTROY_X</b> (1U << 11)</td></tr>
+<tr class="memitem:a93ab283dcb14d5b37b130e2556bb6e7d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a93ab283dcb14d5b37b130e2556bb6e7d"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_DESTROY_F</b> (1U << 12)</td></tr>
+<tr class="memitem:ae6c22599d21b5d8a8f144a39b49d3677"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6c22599d21b5d8a8f144a39b49d3677"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_NO_STABILIZATION</b> (1U << 13)</td></tr>
+<tr class="memitem:a43ce16ed2d1893df2b997e637ccde4d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a43ce16ed2d1893df2b997e637ccde4d4"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_CHOOSE_DPT</b> (1U << 14)</td></tr>
+<tr class="memitem:a07ad8a429e8451bd153563eedc3ef0bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a07ad8a429e8451bd153563eedc3ef0bf"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_SOFT</b> (1U << 15)</td></tr>
+<tr class="memitem:adaa4a4436a6a9e8b491660bb5fc54f8e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adaa4a4436a6a9e8b491660bb5fc54f8e"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_ZERO_F_HAT</b> (1U << 16)</td></tr>
+<tr class="memitem:a796e2f298278bbed00bf0704b553be98"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a796e2f298278bbed00bf0704b553be98"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_INDEX</b>(m, n, l, B) (((l)+((B)+1))+(2*(B)+2)*(((n)+((B)+1))+(2*(B)+2)*((m)+((B)+1))))</td></tr>
+<tr class="memitem:a67274491cbbbca79a4170608dec640ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67274491cbbbca79a4170608dec640ce"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_INDEX_TWO</b>(m, n, l, B) ((B+1)*(B+1)+(B+1)*(B+1)*(m+B)-((m-1)*m*(2*m-1)+(B+1)*(B+2)*(2*B+3))/6)+(posN(n,m,B))+(l-MAX(ABS(m),ABS(n)))</td></tr>
+<tr class="memitem:ad214901ec9451e6076e05d22eb734d49"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad214901ec9451e6076e05d22eb734d49"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NFSOFT_F_HAT_SIZE</b>(B) (((B)+1)*(4*((B)+1)*((B)+1)-1)/3)</td></tr>
+<tr class="memitem:a2e779defec2c348c6d8a8c6f8421a242"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e779defec2c348c6d8a8c6f8421a242"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>SOLVER_MANGLE_DOUBLE</b>(name) NFFT_CONCAT(solver_, name)</td></tr>
+<tr class="memitem:acca5f1d40d99c32b16eb8096b1339d50"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acca5f1d40d99c32b16eb8096b1339d50"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>SOLVER_MANGLE_FLOAT</b>(name) NFFT_CONCAT(solverf_, name)</td></tr>
+<tr class="memitem:acd9b2356a04e9b982826211c51c600c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd9b2356a04e9b982826211c51c600c6"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>SOLVER_MANGLE_LONG_DOUBLE</b>(name) NFFT_CONCAT(solverl_, name)</td></tr>
+<tr class="memitem:a582e092f0b5e3b447e1a884e8495c99b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a582e092f0b5e3b447e1a884e8495c99b"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>SOLVER_DEFINE_API</b>(X, Y, R, C)</td></tr>
+<tr class="memitem:a84bae5d48296d5a0d1e548ed58b9e495"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a84bae5d48296d5a0d1e548ed58b9e495"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>LANDWEBER</b> (1U<< 0)</td></tr>
+<tr class="memitem:a1f016d06d661c80eacb5182d80813cd9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1f016d06d661c80eacb5182d80813cd9"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>STEEPEST_DESCENT</b> (1U<< 1)</td></tr>
+<tr class="memitem:a5716b96b5141dfb52b747a78b11defa7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5716b96b5141dfb52b747a78b11defa7"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>CGNR</b> (1U<< 2)</td></tr>
+<tr class="memitem:aae8290aa6a83fd56699a98cc0a55baf5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae8290aa6a83fd56699a98cc0a55baf5"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>CGNE</b> (1U<< 3)</td></tr>
+<tr class="memitem:a6be0dda24e7cbd9f3f1d1b299e815973"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6be0dda24e7cbd9f3f1d1b299e815973"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>NORMS_FOR_LANDWEBER</b> (1U<< 4)</td></tr>
+<tr class="memitem:aa59267dba2cd3247c5ee4eb493d31c2d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa59267dba2cd3247c5ee4eb493d31c2d"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PRECOMPUTE_WEIGHT</b> (1U<< 5)</td></tr>
+<tr class="memitem:a9ccacd28b2d441a797a5c0d9e6c17fa7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ccacd28b2d441a797a5c0d9e6c17fa7"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PRECOMPUTE_DAMP</b> (1U<< 6)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ae2db105c02d4b63d1962dc94d4e7a4c2"><td class="memItemLeft" align="right" valign="top">typedef void *(* </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#ae2db105c02d4b63d1962dc94d4e7a4c2">nfft_malloc_type_function</a> )(size_t n)</td></tr>
+<tr class="memitem:acdec9723f6ea0ea162d5f3fc6f1f1906"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#acdec9723f6ea0ea162d5f3fc6f1f1906">nfft_free_type_function</a> )(void *p)</td></tr>
+<tr class="memitem:a79fa7003e5077adf8ad168bff9c8c986"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a79fa7003e5077adf8ad168bff9c8c986"></a>
+typedef void(* </td><td class="memItemRight" valign="bottom"><b>nfft_die_type_function</b> )(const char *errString)</td></tr>
+<tr class="memitem:a74cbbcba4b36c9272b3e1b309f574308"><td class="memItemLeft" align="right" valign="top">typedef struct fptf_set_s_ * </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a></td></tr>
+<tr class="memdesc:a74cbbcba4b36c9272b3e1b309f574308"><td class="mdescLeft"> </td><td class="mdescRight">A set of precomputed data for a set of DPT transforms of equal maximum length. <a href="#a74cbbcba4b36c9272b3e1b309f574308"></a><br/></td></tr>
+<tr class="memitem:a73d630ac21d6474ba0693f124d465e15"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structfpt__set__s__.html">fpt_set_s_</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a></td></tr>
+<tr class="memdesc:a73d630ac21d6474ba0693f124d465e15"><td class="mdescLeft"> </td><td class="mdescRight">A set of precomputed data for a set of DPT transforms of equal maximum length. <a href="#a73d630ac21d6474ba0693f124d465e15"></a><br/></td></tr>
+<tr class="memitem:afa0a822edf2abbd8e1ab2cd0afd72efa"><td class="memItemLeft" align="right" valign="top">typedef struct fptl_set_s_ * </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a></td></tr>
+<tr class="memdesc:afa0a822edf2abbd8e1ab2cd0afd72efa"><td class="mdescLeft"> </td><td class="mdescRight">A set of precomputed data for a set of DPT transforms of equal maximum length. <a href="#afa0a822edf2abbd8e1ab2cd0afd72efa"></a><br/></td></tr>
+<tr class="memitem:ad09d4f327f3d1510be6bcf4375906176"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad09d4f327f3d1510be6bcf4375906176"></a>
+typedef struct <a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan_</a> </td><td class="memItemRight" valign="bottom"><b>nfsoftf_plan</b></td></tr>
+<tr class="memitem:aa862e783e0563487b2c8e0e83b9dc742"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa862e783e0563487b2c8e0e83b9dc742"></a>
+typedef struct <a class="el" href="structnfsoft__plan__.html">nfsoft_plan_</a> </td><td class="memItemRight" valign="bottom"><b>nfsoft_plan</b></td></tr>
+<tr class="memitem:a6d67c17c3744095b57a3c4491d0a3109"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d67c17c3744095b57a3c4491d0a3109"></a>
+typedef struct <a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan_</a> </td><td class="memItemRight" valign="bottom"><b>nfsoftl_plan</b></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:aafe6167438c5de4d3d4c509f66a6694e"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a> (size_t n)</td></tr>
+<tr class="memitem:ab8a0db03dda1317a8a3d922e0e4e8aaa"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a> (void *p)</td></tr>
+<tr class="memitem:ace7c4a800755f1c9a8e7479c64665733"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ace7c4a800755f1c9a8e7479c64665733"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_die</b> (char *s)</td></tr>
+<tr class="memitem:aa97b8219dc23517c274ee9951af5ae8b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa97b8219dc23517c274ee9951af5ae8b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_trafo_direct</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a13b36ffc5ad4dea0501da86b4ea93f9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13b36ffc5ad4dea0501da86b4ea93f9c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_adjoint_direct</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a6a99e8e25843bf6f3b503a5030ebcfcb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a99e8e25843bf6f3b503a5030ebcfcb"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_trafo</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a71e3ddb963596b177c9f3d94b8961cc8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a71e3ddb963596b177c9f3d94b8961cc8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_trafo_1d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a062bd142005b5fc523db95e41c665f24"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a062bd142005b5fc523db95e41c665f24"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_trafo_2d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a501a0b91c433ed4857943dd777e7e16a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a501a0b91c433ed4857943dd777e7e16a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_trafo_3d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a7bfe9f714ceb6a9d3911de1eb140f5dd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7bfe9f714ceb6a9d3911de1eb140f5dd"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_adjoint</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:aaeec2252ee63c95ab2471fe59f341c01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaeec2252ee63c95ab2471fe59f341c01"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_adjoint_1d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a214d4e491256491ae71b2c66767b5db5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a214d4e491256491ae71b2c66767b5db5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_adjoint_2d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:adc41672222d378897caaa87b0b70fa2f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adc41672222d378897caaa87b0b70fa2f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_adjoint_3d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a6ff5563bc1f9c37250cced03ed21d961"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ff5563bc1f9c37250cced03ed21d961"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_init_1d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths, int N1, int M)</td></tr>
+<tr class="memitem:ab5cc14480a2380acaa8433dcde2e7b70"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5cc14480a2380acaa8433dcde2e7b70"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_init_2d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths, int N1, int N2, int M)</td></tr>
+<tr class="memitem:a00c248803a48939d9d5c8c78365d1bac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00c248803a48939d9d5c8c78365d1bac"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_init_3d</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths, int N1, int N2, int N3, int M)</td></tr>
+<tr class="memitem:a1ca11660915a2e57e4ca2134465bd179"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ca11660915a2e57e4ca2134465bd179"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_init</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths, int d, int *N, int M)</td></tr>
+<tr class="memitem:a3a7bbd8652f6be0d955a9685400dfa89"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3a7bbd8652f6be0d955a9685400dfa89"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_init_guru</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths, int d, int *N, int M, int *n, int m, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a85210f098260b748aa3da2d37bfd5ce6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85210f098260b748aa3da2d37bfd5ce6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_precompute_one_psi</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a1aa91a41f8c652a5b82bc013f234adcd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1aa91a41f8c652a5b82bc013f234adcd"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_precompute_full_psi</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:afe253a9f00f666f7d99e6276f25fe70a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe253a9f00f666f7d99e6276f25fe70a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_precompute_psi</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a4a931f44a44954ab94576e6d4554182f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a931f44a44954ab94576e6d4554182f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_precompute_lin_psi</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a95688574035044784d8179168561f176"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95688574035044784d8179168561f176"></a>
+const char * </td><td class="memItemRight" valign="bottom"><b>nfftf_check</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a991e56a61be1686499777e6cf97ac08e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a991e56a61be1686499777e6cf97ac08e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftf_finalize</b> (<a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a76a2441388702c7cf232ffb3ec69d826"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a76a2441388702c7cf232ffb3ec69d826"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_trafo_direct</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a6d259124ce68da237671a667db8367ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d259124ce68da237671a667db8367ff"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_adjoint_direct</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a9f1e6bd9f7f956a8679e6b413c97b421"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f1e6bd9f7f956a8679e6b413c97b421"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421">nfft_trafo</a> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memdesc:a9f1e6bd9f7f956a8679e6b413c97b421"><td class="mdescLeft"> </td><td class="mdescRight">user routines <br/></td></tr>
+<tr class="memitem:ae6dff0553d273fc53a15ce4535df8087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6dff0553d273fc53a15ce4535df8087"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_trafo_1d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:ac05ae265993ff8e1396ac6c801c47ffe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac05ae265993ff8e1396ac6c801c47ffe"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_trafo_2d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a503e48334b8cdefb63f55941460354bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a503e48334b8cdefb63f55941460354bf"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_trafo_3d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a4b44c1dd52026dcb494dc735f0fa5b08"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b44c1dd52026dcb494dc735f0fa5b08"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_adjoint</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a13f8052bab72ec8994354cdd6ccb6982"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a13f8052bab72ec8994354cdd6ccb6982"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_adjoint_1d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:ada6d6c809694e08aac88fa0204192325"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada6d6c809694e08aac88fa0204192325"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_adjoint_2d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a4469a1fc88e71eaff7b6912a15079195"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4469a1fc88e71eaff7b6912a15079195"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_adjoint_3d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a01dbd2cfc9cc8577fc097e607e3c845f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01dbd2cfc9cc8577fc097e607e3c845f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_init_1d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths, int N1, int M)</td></tr>
+<tr class="memitem:a54ab08124f47fe412b2979abdc28cc16"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54ab08124f47fe412b2979abdc28cc16"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_init_2d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths, int N1, int N2, int M)</td></tr>
+<tr class="memitem:a67493342a23bdbb4301063f96e13fd88"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67493342a23bdbb4301063f96e13fd88"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_init_3d</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths, int N1, int N2, int N3, int M)</td></tr>
+<tr class="memitem:a1dfeaf18f3735f035afa62ca768d99c4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1dfeaf18f3735f035afa62ca768d99c4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_init</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths, int d, int *N, int M)</td></tr>
+<tr class="memitem:a406f05717c6299b918261c61aaa9de23"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a406f05717c6299b918261c61aaa9de23"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_init_guru</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths, int d, int *N, int M, int *n, int m, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:afd7b278b6ed04d929212b4807dd195f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd7b278b6ed04d929212b4807dd195f0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_precompute_one_psi</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:aee7a88956c66b2113014084d6dd04b3a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee7a88956c66b2113014084d6dd04b3a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_precompute_full_psi</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:ae6a8367b03fd75b2af42dbbaccb78bf2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6a8367b03fd75b2af42dbbaccb78bf2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_precompute_psi</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a3f91a7a005cc31a8b05f33fea0507ddc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3f91a7a005cc31a8b05f33fea0507ddc"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc">nfft_precompute_lin_psi</a> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memdesc:a3f91a7a005cc31a8b05f33fea0507ddc"><td class="mdescLeft"> </td><td class="mdescRight">create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assumes an EVEN window function <br/></td></tr>
+<tr class="memitem:a9fe3dd8c48b139fa813d89aea9305191"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9fe3dd8c48b139fa813d89aea9305191"></a>
+const char * </td><td class="memItemRight" valign="bottom"><b>nfft_check</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a614f9f7af5b0d5491afa9495393c4dc3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a614f9f7af5b0d5491afa9495393c4dc3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_finalize</b> (<a class="el" href="structnfft__plan.html">nfft_plan</a> *ths)</td></tr>
+<tr class="memitem:aade98b08a1764d934fc1e3328ca4748c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aade98b08a1764d934fc1e3328ca4748c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_trafo_direct</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a749f21a124ee46334eb7ec688dfa907b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a749f21a124ee46334eb7ec688dfa907b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_adjoint_direct</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a239d94aa7ede469acccd137b816632c8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a239d94aa7ede469acccd137b816632c8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_trafo</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a7a7438f1eda9c46ab2378e94317c2b6c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a7438f1eda9c46ab2378e94317c2b6c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_trafo_1d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a5a08729af6bfae8bdcdd23a948303678"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5a08729af6bfae8bdcdd23a948303678"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_trafo_2d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:aeef91bc707567a4da86d5d7d8813b654"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeef91bc707567a4da86d5d7d8813b654"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_trafo_3d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:acc437673282c8cbbdc057d1f447df412"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc437673282c8cbbdc057d1f447df412"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_adjoint</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:aaf80f8f97f566ce6bf814590fff412ab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf80f8f97f566ce6bf814590fff412ab"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_adjoint_1d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a79cb762faa374f897c63784654178ba3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a79cb762faa374f897c63784654178ba3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_adjoint_2d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:ac67b1fa2c19e23ae4cdf40ce6fc22c54"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac67b1fa2c19e23ae4cdf40ce6fc22c54"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_adjoint_3d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a44f2703f03552f3282f64ebcbbc4d10e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44f2703f03552f3282f64ebcbbc4d10e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_init_1d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths, int N1, int M)</td></tr>
+<tr class="memitem:a5a23efb04a7efe72618970c1c38833a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5a23efb04a7efe72618970c1c38833a7"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_init_2d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths, int N1, int N2, int M)</td></tr>
+<tr class="memitem:ad3f182c73964739a8d37aa53a6b3f08e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3f182c73964739a8d37aa53a6b3f08e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_init_3d</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths, int N1, int N2, int N3, int M)</td></tr>
+<tr class="memitem:ac1bb75bcc340c22a5cf743bf1f9e5173"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1bb75bcc340c22a5cf743bf1f9e5173"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_init</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths, int d, int *N, int M)</td></tr>
+<tr class="memitem:af01ca4593fe6f4a76e981428529ef683"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af01ca4593fe6f4a76e981428529ef683"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_init_guru</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths, int d, int *N, int M, int *n, int m, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a5fac8d29d45f72e44cd89cab07d0d059"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fac8d29d45f72e44cd89cab07d0d059"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_precompute_one_psi</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a797c4d47a0932fef1724da790901ad31"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a797c4d47a0932fef1724da790901ad31"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_precompute_full_psi</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:ad60f5459cde8f650a09ccab58daa702b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad60f5459cde8f650a09ccab58daa702b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_precompute_psi</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:ac3dd031c004b1e36add9996d7d27fe07"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac3dd031c004b1e36add9996d7d27fe07"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_precompute_lin_psi</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a9a88020d6fdf2f0e71e59d2d46351acc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a88020d6fdf2f0e71e59d2d46351acc"></a>
+const char * </td><td class="memItemRight" valign="bottom"><b>nfftl_check</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a4c53403d49c55788fc7d7f16fbeb0294"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c53403d49c55788fc7d7f16fbeb0294"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfftl_finalize</b> (<a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:ad1b85989c8f6296202c5ead97b2a4d3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad1b85989c8f6296202c5ead97b2a4d3b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_init_1d</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan, int N0, int M_total)</td></tr>
+<tr class="memitem:a54475a045421b8c7d4a2e284ac98b68e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54475a045421b8c7d4a2e284ac98b68e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_init_2d</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan, int N0, int N1, int M_total)</td></tr>
+<tr class="memitem:adadcd59ed27befb417baf6f23d92903b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adadcd59ed27befb417baf6f23d92903b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_init_3d</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan, int N0, int N1, int N2, int M_total)</td></tr>
+<tr class="memitem:a948aec7c8b620bda3580d3d073be54b6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a948aec7c8b620bda3580d3d073be54b6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_init</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan, int d, int *N, int M_total)</td></tr>
+<tr class="memitem:a2d8c4f072d7c12eac56d9314b1d795a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d8c4f072d7c12eac56d9314b1d795a6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_init_guru</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan, int d, int *N, int M_total, int *n, int m, unsigned nfct_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:acd09b8596fa9aa4c6809a4ce6ade4d2a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd09b8596fa9aa4c6809a4ce6ade4d2a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_precompute_psi</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:af407452ab0b930263950cd9432c0a3de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af407452ab0b930263950cd9432c0a3de"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_trafo</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a4f03bebbb59e69446af3c94c80c48e99"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f03bebbb59e69446af3c94c80c48e99"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_trafo_direct</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a8a7e3c8c2f47b2c215a9f43419c41218"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8a7e3c8c2f47b2c215a9f43419c41218"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_adjoint</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:acc707e1afd6bc01e212112199f8f10d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc707e1afd6bc01e212112199f8f10d0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_adjoint_direct</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a7d1f18e46748f9cfe0d5f26ee8c58610"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7d1f18e46748f9cfe0d5f26ee8c58610"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctf_finalize</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ad1948b714bc3c82b53f99d4e54e818ea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad1948b714bc3c82b53f99d4e54e818ea"></a>
+float </td><td class="memItemRight" valign="bottom"><b>nfctf_phi_hut</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan, int k, int d)</td></tr>
+<tr class="memitem:a4a0a312fbe21abb26702af072b9fe8e2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a0a312fbe21abb26702af072b9fe8e2"></a>
+float </td><td class="memItemRight" valign="bottom"><b>nfctf_phi</b> (<a class="el" href="structnfctf__plan.html">nfctf_plan</a> *ths_plan, float x, int d)</td></tr>
+<tr class="memitem:acdaa71ef0c4ea05c55a09a08845b3043"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acdaa71ef0c4ea05c55a09a08845b3043"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_init_1d</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan, int N0, int M_total)</td></tr>
+<tr class="memitem:a84c8a611ea11546b90a7db424ebced7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a84c8a611ea11546b90a7db424ebced7c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_init_2d</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan, int N0, int N1, int M_total)</td></tr>
+<tr class="memitem:a7894f72320bda7850ccf43b9a227fe09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7894f72320bda7850ccf43b9a227fe09"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_init_3d</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan, int N0, int N1, int N2, int M_total)</td></tr>
+<tr class="memitem:a69ac40972c84cfd04909723da056004b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69ac40972c84cfd04909723da056004b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_init</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan, int d, int *N, int M_total)</td></tr>
+<tr class="memitem:aa2f86c85130172f1151a85996ea1bfa3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2f86c85130172f1151a85996ea1bfa3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_init_guru</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan, int d, int *N, int M_total, int *n, int m, unsigned nfct_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a2792eada84d4d363e308825dc40c2e6d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2792eada84d4d363e308825dc40c2e6d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_precompute_psi</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a73327e4f32328dcae3e9f86572a0e15a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73327e4f32328dcae3e9f86572a0e15a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_trafo</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:adbf865fd9ccfdadc5b7b86e58f092d16"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbf865fd9ccfdadc5b7b86e58f092d16"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_trafo_direct</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:abc14753b2aa4ae8af85fc9632720514e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abc14753b2aa4ae8af85fc9632720514e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_adjoint</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a1e797dc0f4e07c62342f28e4dc3f7fe0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e797dc0f4e07c62342f28e4dc3f7fe0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_adjoint_direct</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a5613906eb739a977bd862fbdb25224f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5613906eb739a977bd862fbdb25224f6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfct_finalize</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a10982ac173900c44e0317a8fb01e53c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10982ac173900c44e0317a8fb01e53c1"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nfct_phi_hut</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan, int k, int d)</td></tr>
+<tr class="memitem:a825ccf26ddeddc330f320146d3d223de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a825ccf26ddeddc330f320146d3d223de"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nfct_phi</b> (<a class="el" href="structnfct__plan.html">nfct_plan</a> *ths_plan, double x, int d)</td></tr>
+<tr class="memitem:a2b2c7c01bf971f33edc3acb1139bf161"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b2c7c01bf971f33edc3acb1139bf161"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_init_1d</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan, int N0, int M_total)</td></tr>
+<tr class="memitem:aed79e0497c45176f43d8fa911d6f069a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed79e0497c45176f43d8fa911d6f069a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_init_2d</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan, int N0, int N1, int M_total)</td></tr>
+<tr class="memitem:ad637a73bde08d33d9c30381d16d4ba3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad637a73bde08d33d9c30381d16d4ba3b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_init_3d</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan, int N0, int N1, int N2, int M_total)</td></tr>
+<tr class="memitem:a2b3eb969859db7cf581a54541445ffb0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b3eb969859db7cf581a54541445ffb0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_init</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan, int d, int *N, int M_total)</td></tr>
+<tr class="memitem:aa20eb0ade7b3c4ff2ffe241f4452fd35"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa20eb0ade7b3c4ff2ffe241f4452fd35"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_init_guru</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan, int d, int *N, int M_total, int *n, int m, unsigned nfct_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a3657c9e044b54cb7b2a3d5717b68e030"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3657c9e044b54cb7b2a3d5717b68e030"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_precompute_psi</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ade7830710d428e89f9fa01ef364e6378"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade7830710d428e89f9fa01ef364e6378"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_trafo</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a4f153794f61f2cfc711f67134db52226"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f153794f61f2cfc711f67134db52226"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_trafo_direct</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ae292cc7d0b3c315f0d5a26ec4fe711c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae292cc7d0b3c315f0d5a26ec4fe711c5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_adjoint</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:aa5a922b6a88ead364e577c2341713036"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa5a922b6a88ead364e577c2341713036"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_adjoint_direct</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:adf343b3aa0408dff9907dfaf5e44a916"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf343b3aa0408dff9907dfaf5e44a916"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfctl_finalize</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:aff1f9664971c98bb2acf9bc71fb2c221"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff1f9664971c98bb2acf9bc71fb2c221"></a>
+long double </td><td class="memItemRight" valign="bottom"><b>nfctl_phi_hut</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan, int k, int d)</td></tr>
+<tr class="memitem:a0c74d0bbb03b7da2208f1c004b39d968"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0c74d0bbb03b7da2208f1c004b39d968"></a>
+long double </td><td class="memItemRight" valign="bottom"><b>nfctl_phi</b> (<a class="el" href="structnfctl__plan.html">nfctl_plan</a> *ths_plan, long double x, int d)</td></tr>
+<tr class="memitem:a436cf366c1bf5124fec4a48affe5ed33"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a436cf366c1bf5124fec4a48affe5ed33"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_init_1d</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, int N0, int M_total)</td></tr>
+<tr class="memitem:a28f62d4f47f327bbcd814c5f8881269d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28f62d4f47f327bbcd814c5f8881269d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_init_2d</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, int N0, int N1, int M_total)</td></tr>
+<tr class="memitem:a4bad3dcbf566247ce521d2b836f19cd9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4bad3dcbf566247ce521d2b836f19cd9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_init_3d</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, int N0, int N1, int N2, int M_total)</td></tr>
+<tr class="memitem:aa535ec3a94b56443c9ac6a770e242cc9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa535ec3a94b56443c9ac6a770e242cc9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_init</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, int d, int *N, int M_total)</td></tr>
+<tr class="memitem:acc15a1f1877aa558add661788043b4eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc15a1f1877aa558add661788043b4eb"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_init_m</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, int d, int *N, int M_total, int m)</td></tr>
+<tr class="memitem:a975ee87801a379f4cff0d8951cae3146"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a975ee87801a379f4cff0d8951cae3146"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_init_guru</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, int d, int *N, int M_total, int *n, int m, unsigned nfst_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a30852f312cc13c7937d1762fd338227a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a30852f312cc13c7937d1762fd338227a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_precompute_psi</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a479977674224d07ba369e2005ccae29e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a479977674224d07ba369e2005ccae29e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_trafo</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:afa7cbae602aa715a494d1d4c753c5b02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa7cbae602aa715a494d1d4c753c5b02"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_trafo_direct</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:aa5c75d98de3086bb0c8d0b9f56f2daee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa5c75d98de3086bb0c8d0b9f56f2daee"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_adjoint</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:aa7a5510270b8ac3949b7e16d4eeb9d66"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7a5510270b8ac3949b7e16d4eeb9d66"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_adjoint_direct</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a0759e77328bfaac4e7fe5022cf1cfd55"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0759e77328bfaac4e7fe5022cf1cfd55"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_finalize</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a41f08418f5b56c55f68bf5bb2217fcc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41f08418f5b56c55f68bf5bb2217fcc0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstf_full_psi</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, float eps)</td></tr>
+<tr class="memitem:a4465e8694d9574b47f40e7b6bbd5e542"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4465e8694d9574b47f40e7b6bbd5e542"></a>
+float </td><td class="memItemRight" valign="bottom"><b>nfstf_phi_hut</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, int k, int d)</td></tr>
+<tr class="memitem:ad5ea11822143256d19d4b8acde7b7ffe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5ea11822143256d19d4b8acde7b7ffe"></a>
+float </td><td class="memItemRight" valign="bottom"><b>nfstf_phi</b> (<a class="el" href="structnfstf__plan.html">nfstf_plan</a> *ths_plan, float x, int d)</td></tr>
+<tr class="memitem:a01dfe8ac1efd2655f17f0ce08136d4b1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01dfe8ac1efd2655f17f0ce08136d4b1"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfstf_fftw_2N</b> (int n)</td></tr>
+<tr class="memitem:a6ea4d9088aa79c66f5d7cd4df43b8e46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ea4d9088aa79c66f5d7cd4df43b8e46"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfstf_fftw_2N_rev</b> (int n)</td></tr>
+<tr class="memitem:ac13a4c85f5cd43cfc3b5c3895021a9a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac13a4c85f5cd43cfc3b5c3895021a9a9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_init_1d</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, int N0, int M_total)</td></tr>
+<tr class="memitem:a44eff771382180419936a6dbf51505fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44eff771382180419936a6dbf51505fa"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_init_2d</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, int N0, int N1, int M_total)</td></tr>
+<tr class="memitem:af1dd972b1831e75d3cfba0a0a2671711"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af1dd972b1831e75d3cfba0a0a2671711"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_init_3d</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, int N0, int N1, int N2, int M_total)</td></tr>
+<tr class="memitem:ae4043a9926de23326b21b8722648bafa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae4043a9926de23326b21b8722648bafa"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_init</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, int d, int *N, int M_total)</td></tr>
+<tr class="memitem:a8a48a14e97780c89216d09bdb75f513a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8a48a14e97780c89216d09bdb75f513a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_init_m</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, int d, int *N, int M_total, int m)</td></tr>
+<tr class="memitem:a052efac9f85424d50ceb77279c4e8cc3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a052efac9f85424d50ceb77279c4e8cc3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_init_guru</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, int d, int *N, int M_total, int *n, int m, unsigned nfst_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a0580a0aa2d426835b618b564b5ef3387"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0580a0aa2d426835b618b564b5ef3387"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_precompute_psi</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ac80b86521428ec2191919cc96c82f416"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#ac80b86521428ec2191919cc96c82f416">nfst_trafo</a> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan)</td></tr>
+<tr class="memdesc:ac80b86521428ec2191919cc96c82f416"><td class="mdescLeft"> </td><td class="mdescRight">user routines <a href="#ac80b86521428ec2191919cc96c82f416"></a><br/></td></tr>
+<tr class="memitem:ab32c2626ee801b86707fdacf3d432732"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab32c2626ee801b86707fdacf3d432732"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_trafo_direct</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a0ae3871b80dda28e7aabe541a48d34e2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ae3871b80dda28e7aabe541a48d34e2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_adjoint</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ac61e39a2328268b6cd214ecc9233561a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac61e39a2328268b6cd214ecc9233561a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_adjoint_direct</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ab5d03eeff969c872061d96998f9f0405"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5d03eeff969c872061d96998f9f0405"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfst_finalize</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a02d072e80ccaca6482b396540eaef585"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02d072e80ccaca6482b396540eaef585"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a02d072e80ccaca6482b396540eaef585">nfst_full_psi</a> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, double eps)</td></tr>
+<tr class="memdesc:a02d072e80ccaca6482b396540eaef585"><td class="mdescLeft"> </td><td class="mdescRight">more memory usage, a bit faster <br/></td></tr>
+<tr class="memitem:aa2862de70644887849e0bc1df618a018"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2862de70644887849e0bc1df618a018"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nfst_phi_hut</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, int k, int d)</td></tr>
+<tr class="memitem:aec803ab48734df96a9f21d66cbb71e23"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec803ab48734df96a9f21d66cbb71e23"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nfst_phi</b> (<a class="el" href="structnfst__plan.html">nfst_plan</a> *ths_plan, double x, int d)</td></tr>
+<tr class="memitem:ae2f6c7dd71f57ba413df7f9e0d9c8c6d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2f6c7dd71f57ba413df7f9e0d9c8c6d"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfst_fftw_2N</b> (int n)</td></tr>
+<tr class="memitem:ad31424393fa4e91a19cd9a82776f2d74"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad31424393fa4e91a19cd9a82776f2d74"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfst_fftw_2N_rev</b> (int n)</td></tr>
+<tr class="memitem:a85ac488c78b0ba84aeb87b0fcf72b0f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85ac488c78b0ba84aeb87b0fcf72b0f0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_init_1d</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, int N0, int M_total)</td></tr>
+<tr class="memitem:a1f222ef8f5d4882d61bc2b6754f2ffc7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1f222ef8f5d4882d61bc2b6754f2ffc7"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_init_2d</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, int N0, int N1, int M_total)</td></tr>
+<tr class="memitem:aed4a64b8c12141a35943abbbdbe12d9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed4a64b8c12141a35943abbbdbe12d9d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_init_3d</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, int N0, int N1, int N2, int M_total)</td></tr>
+<tr class="memitem:a3fbc166b35241c5d64631b082f013045"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3fbc166b35241c5d64631b082f013045"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_init</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, int d, int *N, int M_total)</td></tr>
+<tr class="memitem:a862b3337532e586616524e6768691495"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a862b3337532e586616524e6768691495"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_init_m</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, int d, int *N, int M_total, int m)</td></tr>
+<tr class="memitem:a0b87f3a5e41aee11cf0173b91a5b7a00"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b87f3a5e41aee11cf0173b91a5b7a00"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_init_guru</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, int d, int *N, int M_total, int *n, int m, unsigned nfst_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a7dd1d42a1c265c29c4d9fa8b30176ff8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7dd1d42a1c265c29c4d9fa8b30176ff8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_precompute_psi</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a720da4873a2b621c04137f5c9a631e4a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a720da4873a2b621c04137f5c9a631e4a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_trafo</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:aec700716b804a98ff486f14eb51cfdfe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec700716b804a98ff486f14eb51cfdfe"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_trafo_direct</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ac00306a2df327d5b38e39ee4d555e81d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac00306a2df327d5b38e39ee4d555e81d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_adjoint</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a7c92e221c13aacd52d6365922b9e43ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c92e221c13aacd52d6365922b9e43ca"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_adjoint_direct</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a6f1de42997582d6acaed4749d27dc945"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f1de42997582d6acaed4749d27dc945"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_finalize</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a447769fb78cd7f9510471e02b5ac1a5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a447769fb78cd7f9510471e02b5ac1a5e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfstl_full_psi</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, long double eps)</td></tr>
+<tr class="memitem:a701a71b754f9e3d588bfc21306c156ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a701a71b754f9e3d588bfc21306c156ae"></a>
+long double </td><td class="memItemRight" valign="bottom"><b>nfstl_phi_hut</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, int k, int d)</td></tr>
+<tr class="memitem:ab6a612b1061bbd991b57d5a220462ab1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab6a612b1061bbd991b57d5a220462ab1"></a>
+long double </td><td class="memItemRight" valign="bottom"><b>nfstl_phi</b> (<a class="el" href="structnfstl__plan.html">nfstl_plan</a> *ths_plan, long double x, int d)</td></tr>
+<tr class="memitem:a66118abf0bb2273087acbf081224123d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66118abf0bb2273087acbf081224123d"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfstl_fftw_2N</b> (int n)</td></tr>
+<tr class="memitem:afc9ad7537ca27d07f9ba33e7271da2d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc9ad7537ca27d07f9ba33e7271da2d6"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfstl_fftw_2N_rev</b> (int n)</td></tr>
+<tr class="memitem:a0853e9518eca0ab78beb72447d9bcac7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0853e9518eca0ab78beb72447d9bcac7"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_init</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan, int d, int N_total, int M_total, int *N)</td></tr>
+<tr class="memitem:a1db7790fab59cd8e7ae7ee4103fcf179"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1db7790fab59cd8e7ae7ee4103fcf179"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_init_guru</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan, int d, int N_total, int M_total, int *N, int *N1, int m, unsigned nnfft_flags)</td></tr>
+<tr class="memitem:a9ef01f6b9c0c562bf0ad784bf3c9dd02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ef01f6b9c0c562bf0ad784bf3c9dd02"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_trafo_direct</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a81208f117a1ff58be4b2f7bde83284a3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a81208f117a1ff58be4b2f7bde83284a3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_adjoint_direct</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ac46acd46be18dc621cfa9db06e5a6904"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac46acd46be18dc621cfa9db06e5a6904"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_trafo</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ae6fbd48312d1f898bc815d9d24ab997b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6fbd48312d1f898bc815d9d24ab997b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_adjoint</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:af6d97c9d5c11383330c1eb4a8af7845e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6d97c9d5c11383330c1eb4a8af7845e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_precompute_lin_psi</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ac088286367ae957d1d1b86702d730602"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac088286367ae957d1d1b86702d730602"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_precompute_psi</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a95da6a6d7c9c46c4452ceb89030be07f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95da6a6d7c9c46c4452ceb89030be07f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_precompute_full_psi</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a18026c7f9d32b1b726713359105e81e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18026c7f9d32b1b726713359105e81e4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_precompute_phi_hut</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ac767d45622f34b7182b9ee3ed955023d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac767d45622f34b7182b9ee3ed955023d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftf_finalize</b> (<a class="el" href="structnnfftf__plan.html">nnfftf_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a03fa16df51ea6c10e65baf058f109c52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03fa16df51ea6c10e65baf058f109c52"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfft_init</b> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan, int d, int N_total, int M_total, int *N)</td></tr>
+<tr class="memitem:a75a2cb786f4cc4c87082c87a2c32046a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75a2cb786f4cc4c87082c87a2c32046a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfft_init_guru</b> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan, int d, int N_total, int M_total, int *N, int *N1, int m, unsigned nnfft_flags)</td></tr>
+<tr class="memitem:a7a1000e0d0302bb33c70b63464d4b065"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a1000e0d0302bb33c70b63464d4b065"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfft_trafo_direct</b> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ad35e9f7ca7bf1c7451a554c2592fddb4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad35e9f7ca7bf1c7451a554c2592fddb4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfft_adjoint_direct</b> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a994c1748ebe1371c53dd2cb437054d4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a994c1748ebe1371c53dd2cb437054d4f"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a994c1748ebe1371c53dd2cb437054d4f">nnfft_trafo</a> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memdesc:a994c1748ebe1371c53dd2cb437054d4f"><td class="mdescLeft"> </td><td class="mdescRight">user routines <br/></td></tr>
+<tr class="memitem:ad4f536f3aee7e85acc75c5fcad307b7d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4f536f3aee7e85acc75c5fcad307b7d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfft_adjoint</b> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a65983eef73b9f5740214bf720f62fcd6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65983eef73b9f5740214bf720f62fcd6"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6">nnfft_precompute_lin_psi</a> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memdesc:a65983eef73b9f5740214bf720f62fcd6"><td class="mdescLeft"> </td><td class="mdescRight">create a lookup table <br/></td></tr>
+<tr class="memitem:a962d6f449cbad4faf81e20328a911c46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a962d6f449cbad4faf81e20328a911c46"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfft_precompute_psi</b> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a78cf7bac65f6de46182ea1ff509c2af9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a78cf7bac65f6de46182ea1ff509c2af9"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9">nnfft_precompute_full_psi</a> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memdesc:a78cf7bac65f6de46182ea1ff509c2af9"><td class="mdescLeft"> </td><td class="mdescRight">computes all entries of B explicitly <br/></td></tr>
+<tr class="memitem:a9e4663c2cdbff65da327400657528580"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e4663c2cdbff65da327400657528580"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580">nnfft_precompute_phi_hut</a> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memdesc:a9e4663c2cdbff65da327400657528580"><td class="mdescLeft"> </td><td class="mdescRight">initialisation of direct transform <br/></td></tr>
+<tr class="memitem:a9b5bcde6c436f8fe0e8d8dc4fa7a4230"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9b5bcde6c436f8fe0e8d8dc4fa7a4230"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfft_finalize</b> (<a class="el" href="structnnfft__plan.html">nnfft_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a010a880c1cdc5901fc568774e8117380"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a010a880c1cdc5901fc568774e8117380"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_init</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan, int d, int N_total, int M_total, int *N)</td></tr>
+<tr class="memitem:af291f15fa5efec136c99f7a74f6f333b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af291f15fa5efec136c99f7a74f6f333b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_init_guru</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan, int d, int N_total, int M_total, int *N, int *N1, int m, unsigned nnfft_flags)</td></tr>
+<tr class="memitem:a31789d574c1ce35f6c2726b55b9c3e4a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31789d574c1ce35f6c2726b55b9c3e4a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_trafo_direct</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a69f0e2320028ddb45ab12a3be7ca6f3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69f0e2320028ddb45ab12a3be7ca6f3e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_adjoint_direct</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a81228a2d7d5d54aba3cffe5fbd1866d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a81228a2d7d5d54aba3cffe5fbd1866d3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_trafo</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a7b3e34dfc295bd18d9a8fe5a43dc0736"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b3e34dfc295bd18d9a8fe5a43dc0736"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_adjoint</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:afd5503eff636fcfd4b731b4d6bfc2119"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd5503eff636fcfd4b731b4d6bfc2119"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_precompute_lin_psi</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a011e2cf68784c0015eecfd23443067f5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a011e2cf68784c0015eecfd23443067f5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_precompute_psi</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:ae7b90ce759730f0b0ac3e4e35379f7e6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7b90ce759730f0b0ac3e4e35379f7e6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_precompute_full_psi</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a5ffb3e0c715973be44b71f55c425668a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ffb3e0c715973be44b71f55c425668a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_precompute_phi_hut</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:a05483e8f729f280b755ebe038425969c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a05483e8f729f280b755ebe038425969c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nnfftl_finalize</b> (<a class="el" href="structnnfftl__plan.html">nnfftl_plan</a> *ths_plan)</td></tr>
+<tr class="memitem:aae08f8a7b735787dbd5eb8ded76ce619"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae08f8a7b735787dbd5eb8ded76ce619"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftf_trafo_direct</b> (<a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a150a780df08f4548980af604e3bf2f03"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a150a780df08f4548980af604e3bf2f03"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftf_adjoint_direct</b> (<a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a813b32fc4e3df02faf046b8145b7ec04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a813b32fc4e3df02faf046b8145b7ec04"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftf_trafo</b> (<a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:ae2a73ce3575102670d5fd4075fd60299"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2a73ce3575102670d5fd4075fd60299"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftf_adjoint</b> (<a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a8b730993c5a578afa78f2c69413e477a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b730993c5a578afa78f2c69413e477a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftf_cp</b> (<a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> *ths, <a class="el" href="structnfftf__plan.html">nfftf_plan</a> *ths_nfft)</td></tr>
+<tr class="memitem:a3363adf9baa0f8b37468db82b6d03286"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3363adf9baa0f8b37468db82b6d03286"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftf_init_random_nodes_coeffs</b> (<a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a466e274abdf984c5b5621fd9dc43f6af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a466e274abdf984c5b5621fd9dc43f6af"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftf_init</b> (<a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> *ths, int d, int J, int M, int m, unsigned flags)</td></tr>
+<tr class="memitem:a82bbeb139266dc60fb5fcd2089b3f9fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a82bbeb139266dc60fb5fcd2089b3f9fe"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftf_finalize</b> (<a class="el" href="structnsfftf__plan.html">nsfftf_plan</a> *ths)</td></tr>
+<tr class="memitem:a5d7a89ea903b670bc790a08ea37f073c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5d7a89ea903b670bc790a08ea37f073c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfft_trafo_direct</b> (<a class="el" href="structnsfft__plan.html">nsfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a816b55033620b857ff80b6315400c448"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a816b55033620b857ff80b6315400c448"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfft_adjoint_direct</b> (<a class="el" href="structnsfft__plan.html">nsfft_plan</a> *ths)</td></tr>
+<tr class="memitem:aee06e4a864e22e2c41f71606a8e2644e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee06e4a864e22e2c41f71606a8e2644e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfft_trafo</b> (<a class="el" href="structnsfft__plan.html">nsfft_plan</a> *ths)</td></tr>
+<tr class="memitem:ab3de4bceeffaea05a29daf75cad04d38"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3de4bceeffaea05a29daf75cad04d38"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfft_adjoint</b> (<a class="el" href="structnsfft__plan.html">nsfft_plan</a> *ths)</td></tr>
+<tr class="memitem:aa90a04e2110e52bedb70382704f3f004"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa90a04e2110e52bedb70382704f3f004"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfft_cp</b> (<a class="el" href="structnsfft__plan.html">nsfft_plan</a> *ths, <a class="el" href="structnfft__plan.html">nfft_plan</a> *ths_nfft)</td></tr>
+<tr class="memitem:a7cbc20c44eeecadc5c30f4159616f30a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7cbc20c44eeecadc5c30f4159616f30a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfft_init_random_nodes_coeffs</b> (<a class="el" href="structnsfft__plan.html">nsfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a1b7f87f960cb22420a933e915c539aaf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1b7f87f960cb22420a933e915c539aaf"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfft_init</b> (<a class="el" href="structnsfft__plan.html">nsfft_plan</a> *ths, int d, int J, int M, int m, unsigned flags)</td></tr>
+<tr class="memitem:aef170ad12eff8fde1c78bc6071142b36"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef170ad12eff8fde1c78bc6071142b36"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfft_finalize</b> (<a class="el" href="structnsfft__plan.html">nsfft_plan</a> *ths)</td></tr>
+<tr class="memitem:a8f34911d7f056c5206ce9efe81477774"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f34911d7f056c5206ce9efe81477774"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftl_trafo_direct</b> (<a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:af08a9578e5926022bfd2032f14f78b15"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af08a9578e5926022bfd2032f14f78b15"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftl_adjoint_direct</b> (<a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:ad13e87c32603d30c0fcfabf017feac6f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad13e87c32603d30c0fcfabf017feac6f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftl_trafo</b> (<a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a1ac447e3fb8ccb5a7b50a5af8709f33e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ac447e3fb8ccb5a7b50a5af8709f33e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftl_adjoint</b> (<a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a78f38bd6d8f554ef1c8e318234ca0f3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a78f38bd6d8f554ef1c8e318234ca0f3e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftl_cp</b> (<a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> *ths, <a class="el" href="structnfftl__plan.html">nfftl_plan</a> *ths_nfft)</td></tr>
+<tr class="memitem:af6d3d908336159a4be2f16966c70ebc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6d3d908336159a4be2f16966c70ebc0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftl_init_random_nodes_coeffs</b> (<a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a64c1bf471a36994117e7e660d7ba99d2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a64c1bf471a36994117e7e660d7ba99d2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftl_init</b> (<a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> *ths, int d, int J, int M, int m, unsigned flags)</td></tr>
+<tr class="memitem:ab243ff1dc03d549b6ee72a986a905386"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab243ff1dc03d549b6ee72a986a905386"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nsfftl_finalize</b> (<a class="el" href="structnsfftl__plan.html">nsfftl_plan</a> *ths)</td></tr>
+<tr class="memitem:a5651ec188110aa7615f2342f0e50ea52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5651ec188110aa7615f2342f0e50ea52"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrif_inh_2d1d_trafo</b> (<a class="el" href="structmrif__inh__2d1d__plan.html">mrif_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:a92cb0fe77b9cf4c4c61af21a207262b6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92cb0fe77b9cf4c4c61af21a207262b6"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrif_inh_2d1d_adjoint</b> (<a class="el" href="structmrif__inh__2d1d__plan.html">mrif_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:abc16967817cccb9f22c42d65541907b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abc16967817cccb9f22c42d65541907b3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrif_inh_2d1d_init_guru</b> (<a class="el" href="structmrif__inh__2d1d__plan.html">mrif_inh_2d1d_plan</a> *ths, int *N, int M, int *n, int m, float sigma, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a2ae8486acde371aec1c5f6e7d9b39703"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ae8486acde371aec1c5f6e7d9b39703"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrif_inh_2d1d_finalize</b> (<a class="el" href="structmrif__inh__2d1d__plan.html">mrif_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:acf24e20c973caf86bfeb1929b67034fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf24e20c973caf86bfeb1929b67034fa"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrif_inh_3d_trafo</b> (<a class="el" href="structmrif__inh__3d__plan.html">mrif_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:addb2caf1322371cee040f80d9c6d86b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="addb2caf1322371cee040f80d9c6d86b5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrif_inh_3d_adjoint</b> (<a class="el" href="structmrif__inh__3d__plan.html">mrif_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:ac133e266d5c1887ddc374a52cd86ba51"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac133e266d5c1887ddc374a52cd86ba51"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrif_inh_3d_init_guru</b> (<a class="el" href="structmrif__inh__3d__plan.html">mrif_inh_3d_plan</a> *ths, int *N, int M, int *n, int m, float sigma, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a823d3b63a31d3e320a42c94f7d4c760e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a823d3b63a31d3e320a42c94f7d4c760e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mrif_inh_3d_finalize</b> (<a class="el" href="structmrif__inh__3d__plan.html">mrif_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:a0dad1c9466615a5791b5037ab2f85373"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0dad1c9466615a5791b5037ab2f85373"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mri_inh_2d1d_trafo</b> (<a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:ae431fe3e0ef4dc056f58d827f804d0a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae431fe3e0ef4dc056f58d827f804d0a4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mri_inh_2d1d_adjoint</b> (<a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:a8010f0f3bd86f3bd6516751b876e6b14"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8010f0f3bd86f3bd6516751b876e6b14"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mri_inh_2d1d_init_guru</b> (<a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *ths, int *N, int M, int *n, int m, double sigma, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:aaa9aa7ca6642fde2d6926a6430149fa1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa9aa7ca6642fde2d6926a6430149fa1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mri_inh_2d1d_finalize</b> (<a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:ad95016880bd9ad2af3e59185c5312d99"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad95016880bd9ad2af3e59185c5312d99"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mri_inh_3d_trafo</b> (<a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:ac385874f7e751acd9120537ac58069b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac385874f7e751acd9120537ac58069b8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mri_inh_3d_adjoint</b> (<a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:adaab02ce08e45dab866fd5f841700afb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adaab02ce08e45dab866fd5f841700afb"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mri_inh_3d_init_guru</b> (<a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *ths, int *N, int M, int *n, int m, double sigma, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:adcf8b78420d90797f43abb15be1d9cf5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adcf8b78420d90797f43abb15be1d9cf5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mri_inh_3d_finalize</b> (<a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:a3979a630f875c2548e7e7860fa2a4234"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3979a630f875c2548e7e7860fa2a4234"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mril_inh_2d1d_trafo</b> (<a class="el" href="structmril__inh__2d1d__plan.html">mril_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:aed8d14ef64bb1702965856d648bb0e81"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed8d14ef64bb1702965856d648bb0e81"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mril_inh_2d1d_adjoint</b> (<a class="el" href="structmril__inh__2d1d__plan.html">mril_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:a51539d9bdb03bc862c172f4553310006"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a51539d9bdb03bc862c172f4553310006"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mril_inh_2d1d_init_guru</b> (<a class="el" href="structmril__inh__2d1d__plan.html">mril_inh_2d1d_plan</a> *ths, int *N, int M, int *n, int m, long double sigma, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:af00281fab7999742510498d0235027c9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af00281fab7999742510498d0235027c9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mril_inh_2d1d_finalize</b> (<a class="el" href="structmril__inh__2d1d__plan.html">mril_inh_2d1d_plan</a> *ths)</td></tr>
+<tr class="memitem:a9a935b5e070c44bb7ef68cfd166ed818"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a935b5e070c44bb7ef68cfd166ed818"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mril_inh_3d_trafo</b> (<a class="el" href="structmril__inh__3d__plan.html">mril_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:ae40e4f02cdb2fadeac9f4663d2e72a9e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae40e4f02cdb2fadeac9f4663d2e72a9e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mril_inh_3d_adjoint</b> (<a class="el" href="structmril__inh__3d__plan.html">mril_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:af29e97397fd45aebea1cc6a17f344aae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af29e97397fd45aebea1cc6a17f344aae"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mril_inh_3d_init_guru</b> (<a class="el" href="structmril__inh__3d__plan.html">mril_inh_3d_plan</a> *ths, int *N, int M, int *n, int m, long double sigma, unsigned nfft_flags, unsigned fftw_flags)</td></tr>
+<tr class="memitem:a5e3f5c6460102eaf60170aa832cd6b20"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e3f5c6460102eaf60170aa832cd6b20"></a>
+void </td><td class="memItemRight" valign="bottom"><b>mril_inh_3d_finalize</b> (<a class="el" href="structmril__inh__3d__plan.html">mril_inh_3d_plan</a> *ths)</td></tr>
+<tr class="memitem:a3aff93c37d515728069bf5be55130f61"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3aff93c37d515728069bf5be55130f61"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_init</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan, int N, int M)</td></tr>
+<tr class="memitem:a43209c6040e32b10470f814734fddbd9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a43209c6040e32b10470f814734fddbd9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_init_advanced</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan, int N, int M, unsigned int nfsft_flags)</td></tr>
+<tr class="memitem:a708f132f101d3e5281d5e55db2b0fbc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a708f132f101d3e5281d5e55db2b0fbc0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_init_guru</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan, int N, int M, unsigned int nfsft_flags, unsigned int nfft_flags, int nfft_cutoff)</td></tr>
+<tr class="memitem:a9adc8da9ffdeb957aa2df5807d12172e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9adc8da9ffdeb957aa2df5807d12172e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_precompute</b> (int N, float kappa, unsigned int nfsft_flags, unsigned int fpt_flags)</td></tr>
+<tr class="memitem:a5401f9eb13507d7f9bf9f95300380268"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5401f9eb13507d7f9bf9f95300380268"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_forget</b> (void)</td></tr>
+<tr class="memitem:a18ee188d7021103bdd1589b802a7e407"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18ee188d7021103bdd1589b802a7e407"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_trafo_direct</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan)</td></tr>
+<tr class="memitem:a52a2acd6b761ce7a884a136524a18584"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a52a2acd6b761ce7a884a136524a18584"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_adjoint_direct</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan)</td></tr>
+<tr class="memitem:ab50b55785a02c4ffd0b3b1399cb9ccf1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab50b55785a02c4ffd0b3b1399cb9ccf1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_trafo</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan)</td></tr>
+<tr class="memitem:acfa6e095a34d2045182ea22cde56ed24"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acfa6e095a34d2045182ea22cde56ed24"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_adjoint</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan)</td></tr>
+<tr class="memitem:a70ff7515207398223d232d0687dee80c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a70ff7515207398223d232d0687dee80c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_finalize</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan)</td></tr>
+<tr class="memitem:adce47b633284c7b29e644a4e16230ed3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adce47b633284c7b29e644a4e16230ed3"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftf_precompute_x</b> (<a class="el" href="structnfsftf__plan.html">nfsftf_plan</a> *plan)</td></tr>
+<tr class="memitem:ga65cda3f4a3edc5eb39c697cf34b1f0b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga65cda3f4a3edc5eb39c697cf34b1f0b9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M)</td></tr>
+<tr class="memitem:ga2812aa5beba0eb7efd3072bf323a0155"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2812aa5beba0eb7efd3072bf323a0155"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init_advanced</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M, unsigned int nfsft_flags)</td></tr>
+<tr class="memitem:gafff6158abcefa9a75bcfa41af5a79089"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafff6158abcefa9a75bcfa41af5a79089"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init_guru</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M, unsigned int nfsft_flags, unsigned int nfft_flags, int nfft_cutoff)</td></tr>
+<tr class="memitem:gabe87aeea1f7cfef9ae8febb16d702f3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabe87aeea1f7cfef9ae8febb16d702f3b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_precompute</b> (int N, double kappa, unsigned int nfsft_flags, unsigned int fpt_flags)</td></tr>
+<tr class="memitem:ga3b69bca6c76a63877534f5a9781bf285"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3b69bca6c76a63877534f5a9781bf285"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_forget</b> (void)</td></tr>
+<tr class="memitem:ga7628057164579a29cc77487cda6772e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7628057164579a29cc77487cda6772e5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_trafo_direct</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga7cfaacc3393dea5c895859fa035e3e06"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7cfaacc3393dea5c895859fa035e3e06"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_adjoint_direct</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga5796fc68c432d46dfcab7abd8c56ee22"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5796fc68c432d46dfcab7abd8c56ee22"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_trafo</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga813bb48d404c7286310733c99a81a169"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga813bb48d404c7286310733c99a81a169"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_adjoint</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:gaa63e193a27d84059742ff25ff81e2ed1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa63e193a27d84059742ff25ff81e2ed1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_finalize</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga7a7fa6722d6ba3aade4c69299af86e4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7a7fa6722d6ba3aade4c69299af86e4e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_precompute_x</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:a7ba9fe6d07ea6928286876aaad517edf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ba9fe6d07ea6928286876aaad517edf"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_init</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan, int N, int M)</td></tr>
+<tr class="memitem:a7cf6938e64d62373ecfb94bfe9dce8ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7cf6938e64d62373ecfb94bfe9dce8ef"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_init_advanced</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan, int N, int M, unsigned int nfsft_flags)</td></tr>
+<tr class="memitem:a2b186aa674c4c3a923bcb3b15109f7cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b186aa674c4c3a923bcb3b15109f7cf"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_init_guru</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan, int N, int M, unsigned int nfsft_flags, unsigned int nfft_flags, int nfft_cutoff)</td></tr>
+<tr class="memitem:a9759900e56cb74834b01e57e34218a4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9759900e56cb74834b01e57e34218a4f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_precompute</b> (int N, long double kappa, unsigned int nfsft_flags, unsigned int fpt_flags)</td></tr>
+<tr class="memitem:a3d09a53a36a1ca79748ee6f0852cd77c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d09a53a36a1ca79748ee6f0852cd77c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_forget</b> (void)</td></tr>
+<tr class="memitem:abe5f98e7b22b8aebe56f79bd84d2c43a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe5f98e7b22b8aebe56f79bd84d2c43a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_trafo_direct</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan)</td></tr>
+<tr class="memitem:a2540dc3f9b3cf3d117e7282bb91cbe2f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2540dc3f9b3cf3d117e7282bb91cbe2f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_adjoint_direct</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan)</td></tr>
+<tr class="memitem:aa6c645664adc5fc32e0ad4ad2c39ad8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6c645664adc5fc32e0ad4ad2c39ad8c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_trafo</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan)</td></tr>
+<tr class="memitem:a3d1b4b881054aee1d006f2de008a28ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d1b4b881054aee1d006f2de008a28ca"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_adjoint</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan)</td></tr>
+<tr class="memitem:ab5d37f72aa8caef32a3b664df1aff334"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5d37f72aa8caef32a3b664df1aff334"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_finalize</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan)</td></tr>
+<tr class="memitem:a7b20b3319d95c11edb6703976c97d5aa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b20b3319d95c11edb6703976c97d5aa"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsftl_precompute_x</b> (<a class="el" href="structnfsftl__plan.html">nfsftl_plan</a> *plan)</td></tr>
+<tr class="memitem:a99ed7214bd4ac2629f025c418de4cce6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99ed7214bd4ac2629f025c418de4cce6"></a>
+<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> </td><td class="memItemRight" valign="bottom"><b>fptf_init</b> (const int M, const int t, const unsigned int flags)</td></tr>
+<tr class="memitem:af6fd137ff8a9d4e4bfadbdd286fed22c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6fd137ff8a9d4e4bfadbdd286fed22c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptf_precompute</b> (<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> set, const int m, float *alpha, float *beta, float *gam, int k_start, const float threshold)</td></tr>
+<tr class="memitem:a006e0ccb6b9cb6f93cf65943104cb526"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a006e0ccb6b9cb6f93cf65943104cb526"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptf_trafo_direct</b> (<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> set, const int m, const fftwf_complex *x, fftwf_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:ab9088c2cface913de972e5fda67b7318"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9088c2cface913de972e5fda67b7318"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptf_trafo</b> (<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> set, const int m, const fftwf_complex *x, fftwf_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a0047f35347e74bf2d37e1329697532f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0047f35347e74bf2d37e1329697532f2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptf_transposed_direct</b> (<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> set, const int m, fftwf_complex *x, fftwf_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a739fb9ad942ef7112f99801cb88b2a8b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a739fb9ad942ef7112f99801cb88b2a8b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptf_transposed</b> (<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> set, const int m, fftwf_complex *x, fftwf_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a5b986d2fd4647b0d42df6f593ba3245e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b986d2fd4647b0d42df6f593ba3245e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptf_finalize</b> (<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> set)</td></tr>
+<tr class="memitem:ad103ad18c75ee5dd048392dfd1ca7305"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad103ad18c75ee5dd048392dfd1ca7305"></a>
+<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> </td><td class="memItemRight" valign="bottom"><b>fpt_init</b> (const int M, const int t, const unsigned int flags)</td></tr>
+<tr class="memitem:ad3c3b30fda57364c92958cc7390b6378"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3c3b30fda57364c92958cc7390b6378"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_precompute</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, double *alpha, double *beta, double *gam, int k_start, const double threshold)</td></tr>
+<tr class="memitem:a9cf316f764ebe8fc8c323ee8e25575c4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9cf316f764ebe8fc8c323ee8e25575c4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_trafo_direct</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, const fftw_complex *x, fftw_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a16d416e80a919ac119d5cea13fce79d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16d416e80a919ac119d5cea13fce79d0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_trafo</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, const fftw_complex *x, fftw_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:ac0236446f79ad475c1cdc2b44c6dcc09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0236446f79ad475c1cdc2b44c6dcc09"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_transposed_direct</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, fftw_complex *x, fftw_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:abacb4c41365ca6f32b72688376aa86e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abacb4c41365ca6f32b72688376aa86e1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_transposed</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, const int m, fftw_complex *x, fftw_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a7f2a1b915af8d0e7f2eb2f37ddb6772c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f2a1b915af8d0e7f2eb2f37ddb6772c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fpt_finalize</b> (<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set)</td></tr>
+<tr class="memitem:a29a588fe645ac374090459950d9a6670"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a29a588fe645ac374090459950d9a6670"></a>
+<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> </td><td class="memItemRight" valign="bottom"><b>fptl_init</b> (const int M, const int t, const unsigned int flags)</td></tr>
+<tr class="memitem:a5bec17cbb38bc370251f2c0c837fdeb0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5bec17cbb38bc370251f2c0c837fdeb0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptl_precompute</b> (<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> set, const int m, long double *alpha, long double *beta, long double *gam, int k_start, const long double threshold)</td></tr>
+<tr class="memitem:a192094ff3bd8fa9c2dfee9bb760c5218"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a192094ff3bd8fa9c2dfee9bb760c5218"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptl_trafo_direct</b> (<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> set, const int m, const fftwl_complex *x, fftwl_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a783431b575e6823de7cb2ba9536917d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a783431b575e6823de7cb2ba9536917d4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptl_trafo</b> (<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> set, const int m, const fftwl_complex *x, fftwl_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a02a45978d9d953a365c400c6a3a7d872"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02a45978d9d953a365c400c6a3a7d872"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptl_transposed_direct</b> (<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> set, const int m, fftwl_complex *x, fftwl_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:a55a8bcd4d06045f1bd40265e181d0d31"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55a8bcd4d06045f1bd40265e181d0d31"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptl_transposed</b> (<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> set, const int m, fftwl_complex *x, fftwl_complex *y, const int k_end, const unsigned int flags)</td></tr>
+<tr class="memitem:ac9f254034246b927eaa45f8398da096a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9f254034246b927eaa45f8398da096a"></a>
+void </td><td class="memItemRight" valign="bottom"><b>fptl_finalize</b> (<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> set)</td></tr>
+<tr class="memitem:a126dc23ff74589bf7717f0d5eb92934d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a126dc23ff74589bf7717f0d5eb92934d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_precompute</b> (<a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan</a> *plan)</td></tr>
+<tr class="memitem:aab919ac542ffa0c99c311ff8a0787e5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aab919ac542ffa0c99c311ff8a0787e5c"></a>
+<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> </td><td class="memItemRight" valign="bottom"><b>nfsoftf_SO3_single_fpt_init</b> (int l, int k, int m, unsigned int flags, int kappa)</td></tr>
+<tr class="memitem:ab85f7c141114c260127f0e8a507c295d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab85f7c141114c260127f0e8a507c295d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_SO3_fpt</b> (fftwf_complex *coeffs, <a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> set, int l, int k, int m, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:a0cfd79f6121c052cfa2e8e07d76dd92c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0cfd79f6121c052cfa2e8e07d76dd92c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_SO3_fpt_transposed</b> (fftwf_complex *coeffs, <a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> set, int l, int k, int m, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:aff3382f0ef7121a0877d678b1cfeb3a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff3382f0ef7121a0877d678b1cfeb3a4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_init</b> (<a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan</a> *plan, int N, int M)</td></tr>
+<tr class="memitem:aee344825ad78ff13375f194b3533f3f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee344825ad78ff13375f194b3533f3f4"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_init_advanced</b> (<a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan</a> *plan, int N, int M, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:ae3bb027d4ec83a8a0b92ea96bc5cabad"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3bb027d4ec83a8a0b92ea96bc5cabad"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_init_guru</b> (<a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan</a> *plan, int N, int M, unsigned int nfsoft_flags, unsigned int nfft_flags, int nfft_cutoff, int fpt_kappa)</td></tr>
+<tr class="memitem:ad44ae4f31e450bd5757b6498d668d02f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad44ae4f31e450bd5757b6498d668d02f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_trafo</b> (<a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan</a> *plan_nfsoft)</td></tr>
+<tr class="memitem:ab6701999f8f6cc4c115a6b780eea9d77"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab6701999f8f6cc4c115a6b780eea9d77"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_adjoint</b> (<a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan</a> *plan_nfsoft)</td></tr>
+<tr class="memitem:ac19e7732a4ffd5f9a31a121c040370a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac19e7732a4ffd5f9a31a121c040370a5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftf_finalize</b> (<a class="el" href="structnfsoftf__plan__.html">nfsoftf_plan</a> *plan)</td></tr>
+<tr class="memitem:a40f362a2e5589c83315cec24d42af7f9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a40f362a2e5589c83315cec24d42af7f9"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfsoftf_posN</b> (int n, int m, int B)</td></tr>
+<tr class="memitem:a123df5d17a0d43fe5e061ac0fb8c1d23"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a123df5d17a0d43fe5e061ac0fb8c1d23"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_precompute</b> (<a class="el" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan)</td></tr>
+<tr class="memitem:ad8bf7646fcf34c3cda08123798ca5c95"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8bf7646fcf34c3cda08123798ca5c95"></a>
+<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> </td><td class="memItemRight" valign="bottom"><b>nfsoft_SO3_single_fpt_init</b> (int l, int k, int m, unsigned int flags, int kappa)</td></tr>
+<tr class="memitem:a112f47515a696db8b9c5fd15b6b9232b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a112f47515a696db8b9c5fd15b6b9232b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_SO3_fpt</b> (fftw_complex *coeffs, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, int l, int k, int m, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:a3f64d6d2a6b3e9f52a2090aa51867c03"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3f64d6d2a6b3e9f52a2090aa51867c03"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_SO3_fpt_transposed</b> (fftw_complex *coeffs, <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> set, int l, int k, int m, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:a31c884458165fa204073c6c16c10775e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31c884458165fa204073c6c16c10775e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_init</b> (<a class="el" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan, int N, int M)</td></tr>
+<tr class="memitem:af4aec4ee2a2a5d56ca27c4f1a7f90b18"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4aec4ee2a2a5d56ca27c4f1a7f90b18"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_init_advanced</b> (<a class="el" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan, int N, int M, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:a1c13cdd3f82f48fa41acdd313cdc2052"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c13cdd3f82f48fa41acdd313cdc2052"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_init_guru</b> (<a class="el" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan, int N, int M, unsigned int nfsoft_flags, unsigned int nfft_flags, int nfft_cutoff, int fpt_kappa)</td></tr>
+<tr class="memitem:ae243cd75d7571a99eae53818e32355fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae243cd75d7571a99eae53818e32355fb"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_trafo</b> (<a class="el" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan_nfsoft)</td></tr>
+<tr class="memitem:a08395b1dd90f9a2565685d17460afc5b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a08395b1dd90f9a2565685d17460afc5b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_adjoint</b> (<a class="el" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan_nfsoft)</td></tr>
+<tr class="memitem:a30b5c6ae1ff496680f11ddcaad2d5a47"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a30b5c6ae1ff496680f11ddcaad2d5a47"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoft_finalize</b> (<a class="el" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan)</td></tr>
+<tr class="memitem:a7a81dd322c0de63c61c238e32bd8969d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a81dd322c0de63c61c238e32bd8969d"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfsoft_posN</b> (int n, int m, int B)</td></tr>
+<tr class="memitem:a85ade4ba1f835c82bcb2acbd9adc24b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85ade4ba1f835c82bcb2acbd9adc24b9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_precompute</b> (<a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan</a> *plan)</td></tr>
+<tr class="memitem:ab3a39f78ce9698d55f368e3df7fb0198"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3a39f78ce9698d55f368e3df7fb0198"></a>
+<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> </td><td class="memItemRight" valign="bottom"><b>nfsoftl_SO3_single_fpt_init</b> (int l, int k, int m, unsigned int flags, int kappa)</td></tr>
+<tr class="memitem:a3d51082ff48d917c2c8aa485a01810d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d51082ff48d917c2c8aa485a01810d8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_SO3_fpt</b> (fftwl_complex *coeffs, <a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> set, int l, int k, int m, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:acdaa6dd5d2fe9cba39e41c9553ed8cae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acdaa6dd5d2fe9cba39e41c9553ed8cae"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_SO3_fpt_transposed</b> (fftwl_complex *coeffs, <a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> set, int l, int k, int m, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:a1ad37a52b2fa051bb5fe92d37cf0bf84"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ad37a52b2fa051bb5fe92d37cf0bf84"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_init</b> (<a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan</a> *plan, int N, int M)</td></tr>
+<tr class="memitem:a7547538a90a8d41999e2546c667e7102"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7547538a90a8d41999e2546c667e7102"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_init_advanced</b> (<a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan</a> *plan, int N, int M, unsigned int nfsoft_flags)</td></tr>
+<tr class="memitem:af3ce458721f4e5b420b61613525137e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3ce458721f4e5b420b61613525137e0"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_init_guru</b> (<a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan</a> *plan, int N, int M, unsigned int nfsoft_flags, unsigned int nfft_flags, int nfft_cutoff, int fpt_kappa)</td></tr>
+<tr class="memitem:ad2c5c958d3c13b0cd9527025af0f6e29"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad2c5c958d3c13b0cd9527025af0f6e29"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_trafo</b> (<a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan</a> *plan_nfsoft)</td></tr>
+<tr class="memitem:af440be0c56d2d1953cf5316582b84ede"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af440be0c56d2d1953cf5316582b84ede"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_adjoint</b> (<a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan</a> *plan_nfsoft)</td></tr>
+<tr class="memitem:af0805495fc6c08955599186bf721cf13"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af0805495fc6c08955599186bf721cf13"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsoftl_finalize</b> (<a class="el" href="structnfsoftl__plan__.html">nfsoftl_plan</a> *plan)</td></tr>
+<tr class="memitem:a51ad8bfaa076e695c082a7cfa60f3f12"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a51ad8bfaa076e695c082a7cfa60f3f12"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfsoftl_posN</b> (int n, int m, int B)</td></tr>
+<tr class="memitem:ae23d5ef292fbe751bc0d5ed6cfcae2b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae23d5ef292fbe751bc0d5ed6cfcae2b5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_init_advanced_complex</b> (<a class="el" href="structsolverf__plan__complex.html">solverf_plan_complex</a> *ths, <a class="el" href="structnfftf__mv__plan__complex.html">nfftf_mv_plan_complex</a> *mv, unsigned flags)</td></tr>
+<tr class="memitem:a76250063357080589a41db463e113dab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a76250063357080589a41db463e113dab"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_init_complex</b> (<a class="el" href="structsolverf__plan__complex.html">solverf_plan_complex</a> *ths, <a class="el" href="structnfftf__mv__plan__complex.html">nfftf_mv_plan_complex</a> *mv)</td></tr>
+<tr class="memitem:a49fae3a25f94a5e8b04c41205e942ea5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49fae3a25f94a5e8b04c41205e942ea5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_before_loop_complex</b> (<a class="el" href="structsolverf__plan__complex.html">solverf_plan_complex</a> *ths)</td></tr>
+<tr class="memitem:aac2301a124b586c1fba6363edc152872"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac2301a124b586c1fba6363edc152872"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_loop_one_step_complex</b> (<a class="el" href="structsolverf__plan__complex.html">solverf_plan_complex</a> *ths)</td></tr>
+<tr class="memitem:ae481120286ed0c292151ce62c6b3d2f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae481120286ed0c292151ce62c6b3d2f1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_finalize_complex</b> (<a class="el" href="structsolverf__plan__complex.html">solverf_plan_complex</a> *ths)</td></tr>
+<tr class="memitem:a7aab180f1d34c63103c98cb1335b621e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7aab180f1d34c63103c98cb1335b621e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_init_advanced_double</b> (<a class="el" href="structsolverf__plan__double.html">solverf_plan_double</a> *ths, <a class="el" href="structnfftf__mv__plan__double.html">nfftf_mv_plan_double</a> *mv, unsigned flags)</td></tr>
+<tr class="memitem:ab9cfdca5f92d0c296e067ab2e47a7128"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9cfdca5f92d0c296e067ab2e47a7128"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_solver_init_double</b> (<a class="el" href="structsolverf__plan__double.html">solverf_plan_double</a> *ths, <a class="el" href="structnfftf__mv__plan__double.html">nfftf_mv_plan_double</a> *mv)</td></tr>
+<tr class="memitem:ad52d3e6444d5bd54cc3f599b1473c8cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad52d3e6444d5bd54cc3f599b1473c8cf"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_solver_before_loop_double</b> (<a class="el" href="structsolverf__plan__double.html">solverf_plan_double</a> *ths)</td></tr>
+<tr class="memitem:ac9bacf478095bc5055af479bc16d9475"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9bacf478095bc5055af479bc16d9475"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_solver_loop_one_step_double</b> (<a class="el" href="structsolverf__plan__double.html">solverf_plan_double</a> *ths)</td></tr>
+<tr class="memitem:a1ee053c9bb4ddec8e117081c7442ba9b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ee053c9bb4ddec8e117081c7442ba9b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverf_solver_finalize_double</b> (<a class="el" href="structsolverf__plan__double.html">solverf_plan_double</a> *ths)</td></tr>
+<tr class="memitem:ad8962fc79683a67a84b10593d8e0103c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8962fc79683a67a84b10593d8e0103c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_init_advanced_complex</b> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths, <a class="el" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a> *mv, unsigned flags)</td></tr>
+<tr class="memitem:a6662c51f86e40ded7773d1954ec77ca2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6662c51f86e40ded7773d1954ec77ca2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_init_complex</b> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths, <a class="el" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a> *mv)</td></tr>
+<tr class="memitem:a54498806e5ab4046a2ef8fc426e5b141"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54498806e5ab4046a2ef8fc426e5b141"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_before_loop_complex</b> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memitem:a3b80b04ee3429b04c310992fb0a12420"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b80b04ee3429b04c310992fb0a12420"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420">solver_loop_one_step_complex</a> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memdesc:a3b80b04ee3429b04c310992fb0a12420"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step <br/></td></tr>
+<tr class="memitem:a2f44c78734390e47d72578f4c9cbe709"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f44c78734390e47d72578f4c9cbe709"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709">solver_finalize_complex</a> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memdesc:a2f44c78734390e47d72578f4c9cbe709"><td class="mdescLeft"> </td><td class="mdescRight">void solver_finalize <br/></td></tr>
+<tr class="memitem:a1a4544ab96d14c812e3b330c439c3d80"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a4544ab96d14c812e3b330c439c3d80"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a1a4544ab96d14c812e3b330c439c3d80">solver_init_advanced_double</a> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths, <a class="el" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a> *mv, unsigned flags)</td></tr>
+<tr class="memdesc:a1a4544ab96d14c812e3b330c439c3d80"><td class="mdescLeft"> </td><td class="mdescRight">void solver_finalize <br/></td></tr>
+<tr class="memitem:a5f0f420b9eea82330931a0cc9b0b6b54"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f0f420b9eea82330931a0cc9b0b6b54"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_solver_init_double</b> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths, <a class="el" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a> *mv)</td></tr>
+<tr class="memitem:ae57f41c91d348569e0108042b4d6e518"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae57f41c91d348569e0108042b4d6e518"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_solver_before_loop_double</b> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memitem:a4249ae5081906e8af8c04885e9da470f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4249ae5081906e8af8c04885e9da470f"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_solver_loop_one_step_double</b> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memitem:aa85b6edbe1a34d5cfaf4c65e62549ff5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa85b6edbe1a34d5cfaf4c65e62549ff5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_solver_finalize_double</b> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memitem:a3d083e820487819be320c29e6f453a2c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d083e820487819be320c29e6f453a2c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_init_advanced_complex</b> (<a class="el" href="structsolverl__plan__complex.html">solverl_plan_complex</a> *ths, <a class="el" href="structnfftl__mv__plan__complex.html">nfftl_mv_plan_complex</a> *mv, unsigned flags)</td></tr>
+<tr class="memitem:a739e47736aee0e65ad64f7e3c2c78575"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a739e47736aee0e65ad64f7e3c2c78575"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_init_complex</b> (<a class="el" href="structsolverl__plan__complex.html">solverl_plan_complex</a> *ths, <a class="el" href="structnfftl__mv__plan__complex.html">nfftl_mv_plan_complex</a> *mv)</td></tr>
+<tr class="memitem:aac9042f700453c4730f3a015d502e5dd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac9042f700453c4730f3a015d502e5dd"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_before_loop_complex</b> (<a class="el" href="structsolverl__plan__complex.html">solverl_plan_complex</a> *ths)</td></tr>
+<tr class="memitem:a09a9110704ce69fda1fb556c0bcd223d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09a9110704ce69fda1fb556c0bcd223d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_loop_one_step_complex</b> (<a class="el" href="structsolverl__plan__complex.html">solverl_plan_complex</a> *ths)</td></tr>
+<tr class="memitem:af3e16a8e0b7c37c162797e469d5da57d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3e16a8e0b7c37c162797e469d5da57d"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_finalize_complex</b> (<a class="el" href="structsolverl__plan__complex.html">solverl_plan_complex</a> *ths)</td></tr>
+<tr class="memitem:a76d058dd91d4cd6399c3b1c68687f900"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a76d058dd91d4cd6399c3b1c68687f900"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_init_advanced_double</b> (<a class="el" href="structsolverl__plan__double.html">solverl_plan_double</a> *ths, <a class="el" href="structnfftl__mv__plan__double.html">nfftl_mv_plan_double</a> *mv, unsigned flags)</td></tr>
+<tr class="memitem:aac3933f52d2db95054c9141dc15c1973"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac3933f52d2db95054c9141dc15c1973"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_solver_init_double</b> (<a class="el" href="structsolverl__plan__double.html">solverl_plan_double</a> *ths, <a class="el" href="structnfftl__mv__plan__double.html">nfftl_mv_plan_double</a> *mv)</td></tr>
+<tr class="memitem:aae2ec8317e9deada5bc1794296736f50"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae2ec8317e9deada5bc1794296736f50"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_solver_before_loop_double</b> (<a class="el" href="structsolverl__plan__double.html">solverl_plan_double</a> *ths)</td></tr>
+<tr class="memitem:a0d7767264a59d24000e4e900addb010e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d7767264a59d24000e4e900addb010e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_solver_loop_one_step_double</b> (<a class="el" href="structsolverl__plan__double.html">solverl_plan_double</a> *ths)</td></tr>
+<tr class="memitem:a9f29c9c96f62842c11d49ab0c0f392df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f29c9c96f62842c11d49ab0c0f392df"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solverl_solver_finalize_double</b> (<a class="el" href="structsolverl__plan__double.html">solverl_plan_double</a> *ths)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:aa578dec914d95bda5a2fad3fbd90c76f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="nfft3_8h.html#ae2db105c02d4b63d1962dc94d4e7a4c2">nfft_malloc_type_function</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#aa578dec914d95bda5a2fad3fbd90c76f">nfft_malloc_hook</a></td></tr>
+<tr class="memitem:a5b4d02593a82ded7c1d3c3c868e72347"><td class="memItemLeft" align="right" valign="top"><a class="el" href="nfft3_8h.html#acdec9723f6ea0ea162d5f3fc6f1f1906">nfft_free_type_function</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="nfft3_8h.html#a5b4d02593a82ded7c1d3c3c868e72347">nfft_free_hook</a></td></tr>
+<tr class="memitem:a7bd67de0993700f3ff4ed9d6475bc105"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7bd67de0993700f3ff4ed9d6475bc105"></a>
+nfft_die_type_function </td><td class="memItemRight" valign="bottom"><b>nfft_die_hook</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Header file for NFFT3 </p>
+
+<p>Definition in file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/><h2>Macro Definition Documentation</h2>
+<a class="anchor" id="a0d1eb31c2f64e41fa0399b1eb7b5ddd4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MACRO_MV_PLAN</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">RC</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keywordtype">int</span> N_total; \</div>
+<div class="line"> int M_total; \</div>
+<div class="line"> RC *f_hat; \</div>
+<div class="line"> RC *f; \</div>
+<div class="line"> void (*mv_trafo)(<span class="keywordtype">void</span>*); \</div>
+<div class="line"> void (*mv_adjoint)(<span class="keywordtype">void</span>*);</div>
+</div><!-- fragment -->
+<p>Pointer to the own adjoint. </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00069">69</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a84826a12df920d845086a31bd4256c7b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NSFFT_DEFINE_API</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">X, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">Y, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">Z, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">R, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">C </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">typedef</span> <span class="keyword">struct</span>\</div>
+<div class="line">{\</div>
+<div class="line"> MACRO_MV_PLAN(C)\</div>
+<div class="line">\</div>
+<div class="line"> int d; \</div>
+<div class="line"> int J; \</div>
+<div class="line"> int sigma; \</div>
+<div class="line"> unsigned flags; \</div>
+<div class="line"> int *index_sparse_to_full; \</div>
+<div class="line"> int r_act_nfft_plan; \</div>
+<div class="line"> Z(plan) *act_nfft_plan; \</div>
+<div class="line"> Z(plan) *center_nfft_plan; \</div>
+<div class="line"> Y(plan) *set_fftw_plan1; \</div>
+<div class="line"> Y(plan) *set_fftw_plan2; \</div>
+<div class="line"> Z(plan) *set_nfft_plan_1d; \</div>
+<div class="line"> Z(plan) *set_nfft_plan_2d; \</div>
+<div class="line"> R *x_transposed; \</div>
+<div class="line"> R *x_102,*x_201,*x_120,*x_021; \</div>
+<div class="line">} X(plan);\</div>
+<div class="line">\</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(trafo_direct)(X(plan) *ths); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(adjoint_direct)(X(plan) *ths); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(trafo)(X(plan) *ths); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(adjoint)(X(plan) *ths); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(cp)(X(plan) *ths, Z(plan) *ths_nfft); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(init_random_nodes_coeffs)(X(plan) *ths); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(init)(X(plan) *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> J, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(finalize)(X(plan) *ths);</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00419">419</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a50af9dcbe46f6cc4fee5141873098415"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MRI_DEFINE_API</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">X, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">Z, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">R, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">C </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">typedef</span> <span class="keyword">struct</span>\</div>
+<div class="line">{\</div>
+<div class="line"> MACRO_MV_PLAN(C)\</div>
+<div class="line"> Z(plan) plan;\</div>
+<div class="line"> <span class="keywordtype">int</span> N3;\</div>
+<div class="line"> R sigma3;\</div>
+<div class="line"> R *t;\</div>
+<div class="line"> R *w;\</div>
+<div class="line">} X(inh_2d1d_plan);\</div>
+<div class="line">\</div>
+<div class="line">typedef struct\</div>
+<div class="line">{\</div>
+<div class="line"> MACRO_MV_PLAN(C)\</div>
+<div class="line"> Z(plan) plan;\</div>
+<div class="line"> <span class="keywordtype">int</span> N3;\</div>
+<div class="line"> R sigma3;\</div>
+<div class="line"> R *t;\</div>
+<div class="line"> R *w;\</div>
+<div class="line">} X(inh_3d_plan);\</div>
+<div class="line">\</div>
+<div class="line"><span class="keywordtype">void</span> X(inh_2d1d_trafo)(X(inh_2d1d_plan) *ths); \</div>
+<div class="line"><span class="keywordtype">void</span> X(inh_2d1d_adjoint)(X(inh_2d1d_plan) *ths); \</div>
+<div class="line"><span class="keywordtype">void</span> X(inh_2d1d_init_guru)(X(inh_2d1d_plan) *ths, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> *n, \</div>
+<div class="line"> <span class="keywordtype">int</span> m, R sigma, <span class="keywordtype">unsigned</span> nfft_flags, <span class="keywordtype">unsigned</span> fftw_flags); \</div>
+<div class="line"><span class="keywordtype">void</span> X(inh_2d1d_finalize)(X(inh_2d1d_plan) *ths); \</div>
+<div class="line"><span class="keywordtype">void</span> X(inh_3d_trafo)(X(inh_3d_plan) *ths); \</div>
+<div class="line"><span class="keywordtype">void</span> X(inh_3d_adjoint)(X(inh_3d_plan) *ths); \</div>
+<div class="line"><span class="keywordtype">void</span> X(inh_3d_init_guru)(X(inh_3d_plan) *ths, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> *n, \</div>
+<div class="line"> <span class="keywordtype">int</span> m, R sigma, <span class="keywordtype">unsigned</span> nfft_flags, <span class="keywordtype">unsigned</span> fftw_flags); \</div>
+<div class="line"><span class="keywordtype">void</span> X(inh_3d_finalize)(X(inh_3d_plan) *ths);</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00470">470</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8bfac1df57d74c1d7bed37487e241bcd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FPT_DEFINE_API</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">X, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">Y, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">R, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">C </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">typedef</span> <span class="keyword">struct </span>X(set_s_) *X(<span class="keyword">set</span>); \</div>
+<div class="line">\</div>
+<div class="line">NFFT_EXTERN X(<span class="keyword">set</span>) X(init)(const <span class="keywordtype">int</span> M, const <span class="keywordtype">int</span> t, const <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(precompute)(X(set) set, const <span class="keywordtype">int</span> m, R *alpha, R *beta, \</div>
+<div class="line"> R *gam, <span class="keywordtype">int</span> k_start, const R threshold); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(trafo_direct)(X(set) set, const <span class="keywordtype">int</span> m, const C *x, C *y, \</div>
+<div class="line"> const <span class="keywordtype">int</span> k_end, const <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(trafo)(X(set) set, const <span class="keywordtype">int</span> m, const C *x, C *y, \</div>
+<div class="line"> const <span class="keywordtype">int</span> k_end, const <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(transposed_direct)(X(set) set, const <span class="keywordtype">int</span> m, C *x, \</div>
+<div class="line"> C *y, const <span class="keywordtype">int</span> k_end, const <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(transposed)(X(set) set, const <span class="keywordtype">int</span> m, C *x, \</div>
+<div class="line"> C *y, const <span class="keywordtype">int</span> k_end, const <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(finalize)(X(set) set);</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00589">589</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab64e7dca068fc797700ea5a1f294430f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NFSOFT_DEFINE_API</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">X, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">Y, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">Z, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">R, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">C </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">typedef</span> <span class="keyword">struct </span>X(plan_)\</div>
+<div class="line">{\</div>
+<div class="line"> MACRO_MV_PLAN(C) \</div>
+<div class="line"> R *x; \</div>
+<div class="line"> C *wig_coeffs; \</div>
+<div class="line"> C *cheby; \</div>
+<div class="line"> C *aux; \</div>
+<div class="line"> <span class="comment">/* internal use only */</span>\</div>
+<div class="line"> int t; \</div>
+<div class="line"> unsigned <span class="keywordtype">int</span> flags; \</div>
+<div class="line"> Y(plan) p_nfft; \</div>
+<div class="line"> Z(set) internal_fpt_set; \</div>
+<div class="line"> <span class="keywordtype">int</span> fpt_kappa; \</div>
+<div class="line">} X(plan);\</div>
+<div class="line">\</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(precompute)(X(plan) *plan); \</div>
+<div class="line">NFFT_EXTERN Z(set) X(SO3_single_fpt_init)(<span class="keywordtype">int</span> l, <span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> kappa); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(SO3_fpt)(C *coeffs, Z(set) set, <span class="keywordtype">int</span> l, <span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfsoft_flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(SO3_fpt_transposed)(C *coeffs, Z(set) set,<span class="keywordtype">int</span> l, <span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m,<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfsoft_flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(init)(X(plan) *plan, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(init_advanced)(X(plan) *plan, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M,<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfsoft_flags); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(init_guru)(X(plan) *plan, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M,<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfsoft_flags,<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfft_flags,<span class="keywordtype">int</span> nfft_cutoff,<span class="keywordtype">int</span> fpt_kappa); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(trafo)(X(plan) *plan_nfsoft); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(adjoint)(X(plan) *plan_nfsoft); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">void</span> X(finalize)(X(plan) *plan); \</div>
+<div class="line">NFFT_EXTERN <span class="keywordtype">int</span> X(posN)(<span class="keywordtype">int</span> n,<span class="keywordtype">int</span> m, <span class="keywordtype">int</span> B);</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00633">633</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="ae2db105c02d4b63d1962dc94d4e7a4c2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void *(* nfft_malloc_type_function)(size_t n)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>A <code>malloc</code> type function </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00061">61</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acdec9723f6ea0ea162d5f3fc6f1f1906"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* nfft_free_type_function)(void *p)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>A <code>free</code> type function </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00062">62</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a74cbbcba4b36c9272b3e1b309f574308"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct fptf_set_s_* <a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>A set of precomputed data for a set of DPT transforms of equal maximum length. </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00607">607</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a73d630ac21d6474ba0693f124d465e15"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structfpt__set__s__.html">fpt_set_s_</a>* <a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>A set of precomputed data for a set of DPT transforms of equal maximum length. </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00607">607</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afa0a822edf2abbd8e1ab2cd0afd72efa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct fptl_set_s_* <a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>A set of precomputed data for a set of DPT transforms of equal maximum length. </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00607">607</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="aafe6167438c5de4d3d4c509f66a6694e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void * nfft_malloc </td>
+ <td>(</td>
+ <td class="paramtype">size_t </td>
+ <td class="paramname"><em>n</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Our <code>malloc</code> function </p>
+<dl class="params"><dt>Parameters:</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">n</td><td>The number of bytes to allocate </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Referenced by <a class="el" href="linogram__fft__test_8c_source.html#l00309">comparison_fft()</a>, <a class="el" href="fastsum_8c_source.html#l00600">fastsum_init_guru()</a>, <a class="el" href="fastgauss_8c_source.html#l00170">fgt_init_guru()</a>, <a class="el" href="fastgauss_8c_source.html#l00263">fgt_init_node_dependent()</a>, <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a [...]
+
+</div>
+</div>
+<a class="anchor" id="ab8a0db03dda1317a8a3d922e0e4e8aaa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void nfft_free </td>
+ <td>(</td>
+ <td class="paramtype">void * </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Our <code>free</code> function </p>
+<dl class="params"><dt>Parameters:</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">p</td><td>Pointer to the memory region to free </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Referenced by <a class="el" href="linogram__fft__test_8c_source.html#l00309">comparison_fft()</a>, <a class="el" href="fastsum_8c_source.html#l00742">fastsum_finalize()</a>, <a class="el" href="fastgauss_8c_source.html#l00295">fgt_finalize()</a>, <a class="el" href="fastgauss_8c_source.html#l00410">fgt_test_andersson()</a>, <a class="el" href="fastgauss_8c_source.html#l00481">fgt_test_error()</a>, <a class="el" href="fastgauss_8c_source.html#l00375">fgt_test_simple()</a>, <a class="el [...]
+
+</div>
+</div>
+<a class="anchor" id="ac80b86521428ec2191919cc96c82f416"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void nfst_trafo </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structnfst__plan.html">nfst_plan</a> * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>user routines </p>
+
+<p>Definition at line <a class="el" href="nfst_8c_source.html#l00647">647</a> of file <a class="el" href="nfst_8c_source.html">nfst.c</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="aa578dec914d95bda5a2fad3fbd90c76f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="nfft3_8h.html#ae2db105c02d4b63d1962dc94d4e7a4c2">nfft_malloc_type_function</a> nfft_malloc_hook</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Hook for <code>nfft_malloc</code> </p>
+
+</div>
+</div>
+<a class="anchor" id="a5b4d02593a82ded7c1d3c3c868e72347"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="nfft3_8h.html#acdec9723f6ea0ea162d5f3fc6f1f1906">nfft_free_type_function</a> nfft_free_hook</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Hook for <code>nfft_free</code> </p>
+
+</div>
+</div>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfft3_8h_source.html b/doc/api/html/nfft3_8h_source.html
new file mode 100644
index 0000000..26f4516
--- /dev/null
+++ b/doc/api/html/nfft3_8h_source.html
@@ -0,0 +1,853 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfft3.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfft3.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="nfft3_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: nfft3.h 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#ifndef __NFFT3_H__</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span><span class="preprocessor">#define __NFFT3_H__</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">/* module configuration */</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "nfft3conf.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">/* fftw_complex */</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <fftw3.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> {</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#define NFFT_CONCAT(prefix, name) prefix ## name</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">/* IMPORTANT: for Windows compilers, you should add a line</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment"> * #define FFTW_DLL</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment"> * here and in kernel/infft.h if you are compiling/using NFFT as a DLL, in order</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment"> * to do the proper importing/exporting, or alternatively compile with</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment"> * -DNFFT_DLL or the equivalent command-line flag. This is not necessary under</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment"> * MinGW/Cygwin, where libtool does the imports/exports automatically. */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#if defined(NFFT_DLL) && (defined(_WIN32) || defined(__WIN32__))</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor"></span> <span class="comment">/* annoying Windows syntax for shared-library declarations */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"># if defined(COMPILING_NFFT) </span><span class="comment">/* defined in api.h when compiling NFFT */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"></span><span class="preprocessor"># define NFFT_EXTERN extern __declspec(dllexport)</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor"></span><span class="preprocessor"># else </span><span class="comment">/* user is calling NFFT; import symbol */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"></span><span class="preprocessor"># define NFFT_EXTERN extern __declspec(dllimport)</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"></span><span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor"></span><span class="preprocessor"># define NFFT_EXTERN extern</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment">/* our own memory allocation and exit functions */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> NFFT_EXTERN <span class="keywordtype">void</span> *<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keywordtype">size_t</span> n);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> NFFT_EXTERN <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(<span class="keywordtype">void</span> *p);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> NFFT_EXTERN <span class="keywordtype">void</span> nfft_die(<span class="keywordtype">char</span> *s);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment">/* You can replace the hooks with your own, functions if necessary. We need this</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment"> * for the Matlab interfaces etc. */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"><a class="code" href="nfft3_8h.html#ae2db105c02d4b63d1962dc94d4e7a4c2"> 61</a></span> <span class="keyword">typedef</span> <span class="keywordtype">void</span> *(*nfft_malloc_type_function) (<span class="keywordtype">size_t</span> n);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="nfft3_8h.html#acdec9723f6ea0ea162d5f3fc6f1f1906"> 62</a></span> <span class="keyword">typedef</span> void (*<a class="code" href="nfft3_8h.html#acdec9723f6ea0ea162d5f3fc6f1f1906">nfft_free_type_function</a>) (<span class="keywordtype">void</span> *p);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">typedef</span> void (*nfft_die_type_function) (<span class="keyword">const</span> <span class="keywordtype">char</span> *errString);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> NFFT_EXTERN <a class="code" href="nfft3_8h.html#ae2db105c02d4b63d1962dc94d4e7a4c2">nfft_malloc_type_function</a> <a class="code" href="nfft3_8h.html#aa578dec914d95bda5a2fad3fbd90c76f">nfft_malloc_hook</a>;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> NFFT_EXTERN <a class="code" href="nfft3_8h.html#acdec9723f6ea0ea162d5f3fc6f1f1906">nfft_free_type_function</a> <a class="code" href="nfft3_8h.html#a5b4d02593a82ded7c1d3c3c868e72347">nfft_free_hook</a>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> NFFT_EXTERN nfft_die_type_function nfft_die_hook;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment">/* members inherited by all plans */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="code" href="nfft3_8h.html#a0d1eb31c2f64e41fa0399b1eb7b5ddd4"> 69</a></span> <span class="preprocessor">#define MACRO_MV_PLAN(RC) \</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"> int N_total; \</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor"> int M_total; \</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor"> RC *f_hat; \</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"> RC *f; \</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor"> void (*mv_trafo)(void*); \</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor"> void (*mv_adjoint)(void*); </span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="preprocessor"></span><span class="comment">/* nfft */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="preprocessor">#define NFFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfft_, name)</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor"></span><span class="preprocessor">#define NFFT_MANGLE_FLOAT(name) NFFT_CONCAT(nfftf_, name)</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor"></span><span class="preprocessor">#define NFFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfftl_, name)</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment">/* huge second-order macro that defines prototypes for all nfft API functions.</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment"> * X: nfft name-mangling macro</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment"> * Y: fftw name-mangling macro</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment"> * R: real data type</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment"> * C: complex data type</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor">#define NFFT_DEFINE_API(X,Y,R,C) \</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor">typedef struct \</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor"> MACRO_MV_PLAN(C) \</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor">} X(mv_plan_complex); \</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor">typedef struct \</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor"> MACRO_MV_PLAN(R) \</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor">} X(mv_plan_double); \</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor"> MACRO_MV_PLAN(C)\</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="preprocessor"> int d; \</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="preprocessor"> int *N; \</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="preprocessor"> R *sigma; \</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="preprocessor"> int *n; \</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor"> int n_total; \</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor"> int m; \</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="preprocessor"> R *b; \</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor"> int K; \</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="preprocessor"> unsigned nfft_flags; \</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="preprocessor"> unsigned fftw_flags; \</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="preprocessor"> R *x; \</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="preprocessor"> double MEASURE_TIME_t[3]; \</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor"> </span><span class="comment">/* internal use only */</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="preprocessor"> Y(plan) my_fftw_plan1; \</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor"> Y(plan) my_fftw_plan2; \</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="preprocessor"> R **c_phi_inv; \</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="preprocessor"> R *psi; \</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="preprocessor"> int *psi_index_g; \</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="preprocessor"> int *psi_index_f; \</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor"> C *g; \</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="preprocessor"> C *g_hat; \</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="preprocessor"> C *g1; \</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor"> C *g2; \</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor"> R *spline_coeffs; \</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="preprocessor"> int *index_x; \</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="preprocessor">} X(plan); \</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_direct)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="preprocessor">NFFT_EXTERN void X(trafo)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_1d)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_2d)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_3d)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_1d)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_2d)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_3d)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="preprocessor">NFFT_EXTERN void X(init_1d)(X(plan) *ths, int N1, int M);\</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor">NFFT_EXTERN void X(init_2d)(X(plan) *ths, int N1, int N2, int M);\</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="preprocessor">NFFT_EXTERN void X(init_3d)(X(plan) *ths, int N1, int N2, int N3, int M);\</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor">NFFT_EXTERN void X(init)(X(plan) *ths, int d, int *N, int M);\</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor">NFFT_EXTERN void X(init_guru)(X(plan) *ths, int d, int *N, int M, int *n, \</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor"> int m, unsigned nfft_flags, unsigned fftw_flags);\</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor">NFFT_EXTERN void X(precompute_one_psi)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"><a class="code" href="structnfftl__plan.html#ad5695c30a05c03573082a1aac0394700"> 173</a></span> <span class="preprocessor">NFFT_EXTERN void X(precompute_full_psi)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor">NFFT_EXTERN void X(precompute_psi)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor">NFFT_EXTERN void X(precompute_lin_psi)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor">NFFT_EXTERN const char* X(check)(X(plan) *ths);\</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor">NFFT_EXTERN void X(finalize)(X(plan) *ths);</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment">/* nfft api */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> NFFT_DEFINE_API(NFFT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> NFFT_DEFINE_API(NFFT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> NFFT_DEFINE_API(NFFT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="comment">/* flags for init */</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="preprocessor">#define PRE_PHI_HUT (1U<< 0)</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="preprocessor"></span><span class="preprocessor">#define FG_PSI (1U<< 1)</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="preprocessor"></span><span class="preprocessor">#define PRE_LIN_PSI (1U<< 2)</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor"></span><span class="preprocessor">#define PRE_FG_PSI (1U<< 3)</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor"></span><span class="preprocessor">#define PRE_PSI (1U<< 4)</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor"></span><span class="preprocessor">#define PRE_FULL_PSI (1U<< 5)</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor"></span><span class="preprocessor">#define MALLOC_X (1U<< 6)</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor"></span><span class="preprocessor">#define MALLOC_F_HAT (1U<< 7)</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="preprocessor"></span><span class="preprocessor">#define MALLOC_F (1U<< 8)</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="preprocessor"></span><span class="preprocessor">#define FFT_OUT_OF_PLACE (1U<< 9)</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="preprocessor"></span><span class="preprocessor">#define FFTW_INIT (1U<< 10)</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="preprocessor"></span><span class="preprocessor">#define NFFT_SORT_NODES (1U<< 11)</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="preprocessor"></span><span class="preprocessor">#define NFFT_OMP_BLOCKWISE_ADJOINT (1U<<12)</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="preprocessor"></span><span class="preprocessor">#define PRE_ONE_PSI (PRE_LIN_PSI| PRE_FG_PSI| PRE_PSI| PRE_FULL_PSI)</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment">/* nfct */</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="preprocessor">#define NFCT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfct_, name)</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="preprocessor"></span><span class="preprocessor">#define NFCT_MANGLE_FLOAT(name) NFFT_CONCAT(nfctf_, name)</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="preprocessor"></span><span class="preprocessor">#define NFCT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfctl_, name)</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="comment">/* huge second-order macro that defines prototypes for all nfct API functions.</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment"> * X: nfct name-mangling macro</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment"> * Y: fftw name-mangling macro</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="comment"> * R: real data type</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment"> * C: complex data type</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="preprocessor">#define NFCT_DEFINE_API(X,Y,R,C) \</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor"> </span><span class="comment">/* api */</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="preprocessor"> MACRO_MV_PLAN(R)\</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="preprocessor"> int d; \</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="preprocessor"> int *N; \</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="preprocessor"> int *n; \</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="preprocessor"> R *sigma; \</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="preprocessor"> int m; \</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="preprocessor"> R nfct_full_psi_eps;\</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="preprocessor"> R *b; \</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="preprocessor"> unsigned nfct_flags; \</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="preprocessor"> unsigned fftw_flags; \</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="preprocessor"> R *x; \</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="preprocessor"> double MEASURE_TIME_t[3]; \</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="preprocessor"> </span><span class="comment">/* internal use only */</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="preprocessor"> Y(plan) my_fftw_r2r_plan; \</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="preprocessor"> Y(r2r_kind) *r2r_kind; \</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="preprocessor"> R **c_phi_inv; \</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="preprocessor"> R *psi; \</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="preprocessor"> int size_psi; \</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor"> int *psi_index_g; \</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="preprocessor"> int *psi_index_f; \</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="preprocessor"> R *g;\</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="preprocessor"> R *g_hat;\</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="preprocessor"> R *g1; \</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="preprocessor"> R *g2; \</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="preprocessor"> R *spline_coeffs; \</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="preprocessor">} X(plan);\</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="preprocessor">NFFT_EXTERN void X(init_1d)(X(plan) *ths_plan, int N0, int M_total); \</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="preprocessor">NFFT_EXTERN void X(init_2d)(X(plan) *ths_plan, int N0, int N1, int M_total); \</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="preprocessor">NFFT_EXTERN void X(init_3d)(X(plan) *ths_plan, int N0, int N1, int N2, int M_total); \</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor">NFFT_EXTERN void X(init)(X(plan) *ths_plan, int d, int *N, int M_total); \</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor">NFFT_EXTERN void X(init_guru)(X(plan) *ths_plan, int d, int *N, int M_total, int *n, \</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor"> int m, unsigned nfct_flags, unsigned fftw_flags); \</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"><a class="code" href="structnfctl__plan.html#a2f7f915bfefa105412cabfc368c26560"> 261</a></span> <span class="preprocessor">NFFT_EXTERN void X(precompute_psi)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="preprocessor">NFFT_EXTERN void X(trafo)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_direct)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor">NFFT_EXTERN void X(finalize)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="preprocessor">NFFT_EXTERN R X(phi_hut)(X(plan) *ths_plan, int k, int d); \</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="preprocessor">NFFT_EXTERN R X(phi)(X(plan) *ths_plan, R x, int d);</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="preprocessor">#if defined(HAVE_NFCT)</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor"></span><span class="comment">/* nfct api */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> NFCT_DEFINE_API(NFCT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> NFCT_DEFINE_API(NFCT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> NFCT_DEFINE_API(NFCT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="comment">/* nfst */</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="preprocessor">#define NFST_MANGLE_DOUBLE(name) NFFT_CONCAT(nfst_, name)</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="preprocessor"></span><span class="preprocessor">#define NFST_MANGLE_FLOAT(name) NFFT_CONCAT(nfstf_, name)</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="preprocessor"></span><span class="preprocessor">#define NFST_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfstl_, name)</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment">/* huge second-order macro that defines prototypes for all nfct API functions.</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="comment"> * X: nfst name-mangling macro</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="comment"> * Y: fftw name-mangling macro</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="comment"> * R: real data type</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="comment"> * C: complex data type</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="preprocessor">#define NFST_DEFINE_API(X,Y,R,C) \</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="preprocessor"> </span><span class="comment">/* api */</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="preprocessor"> MACRO_MV_PLAN(R)\</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="preprocessor"> int d; \</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="preprocessor"> int *N; \</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="preprocessor"> int *n; \</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="preprocessor"> R *sigma; \</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="preprocessor"> int m; \</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="preprocessor"> R nfst_full_psi_eps;\</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="preprocessor"> R *b; \</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="preprocessor"> unsigned nfst_flags; \</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="preprocessor"> unsigned fftw_flags; \</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="preprocessor"> R *x; \</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="preprocessor"> double MEASURE_TIME_t[3]; \</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="preprocessor"> </span><span class="comment">/* internal use only */</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="preprocessor"> Y(plan) my_fftw_r2r_plan; \</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor"> Y(r2r_kind) *r2r_kind; \</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="preprocessor"> R **c_phi_inv; \</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="preprocessor"> R *psi; \</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="preprocessor"> int size_psi; \</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="preprocessor"> int *psi_index_g; \</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="preprocessor"> int *psi_index_f; \</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="preprocessor"> R *g;\</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="preprocessor"> R *g_hat;\</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="preprocessor"> R *g1; \</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="preprocessor"> R *g2; \</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="preprocessor"> R *spline_coeffs; \</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="preprocessor">} X(plan);\</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="preprocessor">NFFT_EXTERN void X(init_1d)(X(plan) *ths_plan, int N0, int M_total); \</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="preprocessor">NFFT_EXTERN void X(init_2d)(X(plan) *ths_plan, int N0, int N1, int M_total); \</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="preprocessor">NFFT_EXTERN void X(init_3d)(X(plan) *ths_plan, int N0, int N1, int N2, int M_total); \</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="preprocessor">NFFT_EXTERN void X(init)(X(plan) *ths_plan, int d, int *N, int M_total); \</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor">NFFT_EXTERN void X(init_m)(X(plan) *ths_plan, int d, int *N, int M_total, int m);\</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="preprocessor">NFFT_EXTERN void X(init_guru)(X(plan) *ths_plan, int d, int *N, int M_total, int *n, \</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="preprocessor"> int m, unsigned nfst_flags, unsigned fftw_flags); \</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"><a class="code" href="structnfstl__plan.html#af663d590a277872d6e0e777cb410edbb"> 338</a></span> <span class="preprocessor">NFFT_EXTERN void X(precompute_psi)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="preprocessor">NFFT_EXTERN void X(trafo)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_direct)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="preprocessor">NFFT_EXTERN void X(finalize)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="preprocessor">NFFT_EXTERN void X(full_psi)(X(plan) *ths_plan, R eps); \</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="preprocessor">NFFT_EXTERN R X(phi_hut)(X(plan) *ths_plan, int k, int d); \</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="preprocessor">NFFT_EXTERN R X(phi)(X(plan) *ths_plan, R x, int d); \</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="preprocessor">NFFT_EXTERN int X(fftw_2N)(int n); \</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="preprocessor">NFFT_EXTERN int X(fftw_2N_rev)(int n);</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="preprocessor">#ifdef HAVE_NFST</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor"></span><span class="comment">/* nfst api */</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> NFST_DEFINE_API(NFST_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> NFST_DEFINE_API(NFST_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> NFST_DEFINE_API(NFST_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="comment">/* nnfft */</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="preprocessor">#define NNFFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nnfft_, name)</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="preprocessor"></span><span class="preprocessor">#define NNFFT_MANGLE_FLOAT(name) NFFT_CONCAT(nnfftf_, name)</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="preprocessor"></span><span class="preprocessor">#define NNFFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nnfftl_, name)</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="comment">/* huge second-order macro that defines prototypes for all nfst API functions.</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="comment"> * X: nnfft name-mangling macro</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="comment"> * Y: fftw name-mangling macro</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="comment"> * Z: nfft name mangling macro</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="comment"> * R: real data type</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="comment"> * C: complex data type</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="preprocessor">#define NNFFT_DEFINE_API(X,Y,Z,R,C) \</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="preprocessor"> </span><span class="comment">/* api */</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="preprocessor"> MACRO_MV_PLAN(C)\</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="preprocessor"> int d; \</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="preprocessor"> R *sigma; \</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="preprocessor"> R *a; \</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="preprocessor"> int *N; \</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="preprocessor"> int *N1; \</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor"> int *aN1; \</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="preprocessor"> int m; \</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="preprocessor"> R *b; \</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="preprocessor"> int K; \</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="preprocessor"> int aN1_total; \</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="preprocessor"> Z(plan) *direct_plan; \</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="preprocessor"> unsigned nnfft_flags; \</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="preprocessor"> int *n; \</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="preprocessor"> R *x; \</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="preprocessor"> R *v; \</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="preprocessor"> R *c_phi_inv; \</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="preprocessor"> R *psi; \</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="preprocessor"> int size_psi; \</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="preprocessor"> int *psi_index_g; \</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="preprocessor"> int *psi_index_f; \</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="preprocessor"> C *F;\</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="preprocessor"> R *spline_coeffs; \</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"><a class="code" href="structnnfftl__plan.html#ad3c1a7dca6cddcecba876f1bb523e3b6"> 400</a></span> <span class="preprocessor">} X(plan);\</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="preprocessor">NFFT_EXTERN void X(init)(X(plan) *ths_plan, int d, int N_total, int M_total, int *N); \</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="preprocessor">NFFT_EXTERN void X(init_guru)(X(plan) *ths_plan, int d, int N_total, int M_total, \</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor"> int *N, int *N1, int m, unsigned nnfft_flags); \</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_direct)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="preprocessor">NFFT_EXTERN void X(trafo)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor">NFFT_EXTERN void X(precompute_lin_psi)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="preprocessor">NFFT_EXTERN void X(precompute_psi)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="preprocessor">NFFT_EXTERN void X(precompute_full_psi)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="preprocessor">NFFT_EXTERN void X(precompute_phi_hut)(X(plan) *ths_plan); \</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor">NFFT_EXTERN void X(finalize)(X(plan) *ths_plan);</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="preprocessor">#ifdef HAVE_NNFFT</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="preprocessor"></span><span class="comment">/* nnfft api */</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> NNFFT_DEFINE_API(NNFFT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> NNFFT_DEFINE_API(NNFFT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> NNFFT_DEFINE_API(NNFFT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="comment">/* additional init flags */</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="preprocessor">#define MALLOC_V (1U<< 11)</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="comment">/* nsfft */</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="preprocessor">#define NSFFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nsfft_, name)</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="preprocessor"></span><span class="preprocessor">#define NSFFT_MANGLE_FLOAT(name) NFFT_CONCAT(nsfftf_, name)</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="preprocessor"></span><span class="preprocessor">#define NSFFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nsfftl_, name)</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="comment">/* huge second-order macro that defines prototypes for all nnfft API functions.</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="comment"> * X: nnfft name-mangling macro</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="comment"> * Y: fftw name-mangling macro</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="comment"> * Z: nfft name mangling macro</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="comment"> * R: real data type</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="comment"> * C: complex data type</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="preprocessor">#define NSFFT_DEFINE_API(X,Y,Z,R,C) \</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="preprocessor"> MACRO_MV_PLAN(C)\</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="preprocessor"> int d; \</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="preprocessor"> int J; \</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="preprocessor"> int sigma; \</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="preprocessor"> unsigned flags; \</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="preprocessor"> int *index_sparse_to_full; \</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"><a class="code" href="structnsfftl__plan.html#a28eb398ae77902fd1ec2e0604d2a77ce"> 451</a></span> <span class="preprocessor"> int r_act_nfft_plan; \</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="preprocessor"> Z(plan) *act_nfft_plan; \</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="preprocessor"> Z(plan) *center_nfft_plan; \</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="preprocessor"> Y(plan) *set_fftw_plan1; \</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="preprocessor"> Y(plan) *set_fftw_plan2; \</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="preprocessor"> Z(plan) *set_nfft_plan_1d; \</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor"> Z(plan) *set_nfft_plan_2d; \</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="preprocessor"> R *x_transposed; \</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor"> R *x_102,*x_201,*x_120,*x_021; \</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="preprocessor">} X(plan);\</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_direct)(X(plan) *ths); \</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths); \</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="preprocessor">NFFT_EXTERN void X(trafo)(X(plan) *ths); \</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint)(X(plan) *ths); \</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="preprocessor">NFFT_EXTERN void X(cp)(X(plan) *ths, Z(plan) *ths_nfft); \</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="preprocessor">NFFT_EXTERN void X(init_random_nodes_coeffs)(X(plan) *ths); \</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor">NFFT_EXTERN void X(init)(X(plan) *ths, int d, int J, int M, int m, unsigned flags); \</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="preprocessor">NFFT_EXTERN void X(finalize)(X(plan) *ths);</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="preprocessor">#ifdef HAVE_NSFFT</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="preprocessor"></span><span class="comment">/* nsfft api */</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> NSFFT_DEFINE_API(NSFFT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> NSFFT_DEFINE_API(NSFFT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> NSFFT_DEFINE_API(NSFFT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="comment">/* additional init flags */</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor">#define NSDFT (1U<< 12)</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="comment">/* mri */</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor">#define MRI_MANGLE_DOUBLE(name) NFFT_CONCAT(mri_, name)</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor"></span><span class="preprocessor">#define MRI_MANGLE_FLOAT(name) NFFT_CONCAT(mrif_, name)</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="preprocessor"></span><span class="preprocessor">#define MRI_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(mril_, name)</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="comment">/* huge second-order macro that defines prototypes for all mri API functions.</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="comment"> * X: mri name-mangling macro</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="comment"> * Z: nfft name mangling macro</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="comment"> * R: real data type</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="comment"> * C: complex data type</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="preprocessor">#define MRI_DEFINE_API(X,Z,R,C) \</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="preprocessor"> MACRO_MV_PLAN(C)\</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="preprocessor"> Z(plan) plan;\</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="preprocessor"> int N3;\</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor"> R sigma3;\</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="preprocessor"> R *t;\</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="preprocessor"> R *w;\</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"><a class="code" href="structmril__inh__3d__plan.html#a79e477483b67862d2dd7fcb5432f7651"> 504</a></span> <span class="preprocessor">} X(inh_2d1d_plan);\</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="preprocessor"> MACRO_MV_PLAN(C)\</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="preprocessor"> Z(plan) plan;\</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="preprocessor"> int N3;\</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="preprocessor"> R sigma3;\</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="preprocessor"> R *t;\</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="preprocessor"> R *w;\</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="preprocessor">} X(inh_3d_plan);\</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="preprocessor">void X(inh_2d1d_trafo)(X(inh_2d1d_plan) *ths); \</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="preprocessor">void X(inh_2d1d_adjoint)(X(inh_2d1d_plan) *ths); \</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="preprocessor">void X(inh_2d1d_init_guru)(X(inh_2d1d_plan) *ths, int *N, int M, int *n, \</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="preprocessor"> int m, R sigma, unsigned nfft_flags, unsigned fftw_flags); \</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="preprocessor">void X(inh_2d1d_finalize)(X(inh_2d1d_plan) *ths); \</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="preprocessor">void X(inh_3d_trafo)(X(inh_3d_plan) *ths); \</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="preprocessor">void X(inh_3d_adjoint)(X(inh_3d_plan) *ths); \</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="preprocessor">void X(inh_3d_init_guru)(X(inh_3d_plan) *ths, int *N, int M, int *n, \</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="preprocessor"> int m, R sigma, unsigned nfft_flags, unsigned fftw_flags); \</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="preprocessor">void X(inh_3d_finalize)(X(inh_3d_plan) *ths);</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="preprocessor">#ifdef HAVE_MRI</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="preprocessor"></span> <span class="comment">/* mri api */</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> MRI_DEFINE_API(MRI_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> MRI_DEFINE_API(MRI_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> MRI_DEFINE_API(MRI_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="comment">/* nfsft */</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="preprocessor">#define NFSFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfsft_, name)</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_MANGLE_FLOAT(name) NFFT_CONCAT(nfsftf_, name)</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfsftl_, name)</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="comment">/* huge second-order macro that defines prototypes for all nfsft API functions.</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="comment"> * X: nfsft name-mangling macro</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="comment"> * Z: nfft name mangling macro</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="comment"> * R: real data type</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="comment"> * C: complex data type</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="preprocessor">#define NFSFT_DEFINE_API(X,Z,R,C) \</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno"><a class="code" href="structnfsftl__plan.html#a59d00d103ebc0746d9cbf2d49077dfe8"> 551</a></span> <span class="preprocessor"> MACRO_MV_PLAN(C)\</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="preprocessor"> int N; \</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="preprocessor"> R *x; \</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="preprocessor"> </span><span class="comment">/* internal use only */</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="preprocessor"> int t; \</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="preprocessor"> unsigned int flags; \</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="preprocessor"> Z(plan) plan_nfft; \</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="preprocessor"> C *f_hat_intern; \</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="preprocessor"> double MEASURE_TIME_t[3]; \</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="preprocessor">} X(plan);\</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="preprocessor">NFFT_EXTERN void X(init)(X(plan) *plan, int N, int M); \</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="preprocessor">NFFT_EXTERN void X(init_advanced)(X(plan)* plan, int N, int M, unsigned int \</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="preprocessor"> nfsft_flags); \</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="preprocessor">NFFT_EXTERN void X(init_guru)(X(plan) *plan, int N, int M, \</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="preprocessor"> unsigned int nfsft_flags, unsigned int nfft_flags, int nfft_cutoff); \</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="preprocessor">NFFT_EXTERN void X(precompute)(int N, R kappa, unsigned int nfsft_flags, \</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="preprocessor"> unsigned int fpt_flags); \</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="preprocessor">NFFT_EXTERN void X(forget)(void); \</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_direct)(X(plan)* plan); \</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint_direct)(X(plan)* plan); \</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="preprocessor">NFFT_EXTERN void X(trafo)(X(plan)* plan); \</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint)(X(plan)* plan); \</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="preprocessor">NFFT_EXTERN void X(finalize)(X(plan) *plan); \</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="preprocessor">NFFT_EXTERN void X(precompute_x)(X(plan) *plan);</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="preprocessor">#ifdef HAVE_NFSFT</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="preprocessor"></span><span class="comment">/* nfsft api */</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> NFSFT_DEFINE_API(NFSFT_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> NFSFT_DEFINE_API(NFSFT_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> NFSFT_DEFINE_API(NFSFT_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="comment">/* init flags */</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="preprocessor">#define NFSFT_NORMALIZED (1U << 0)</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_USE_NDFT (1U << 1)</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_USE_DPT (1U << 2)</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_MALLOC_X (1U << 3)</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_MALLOC_F_HAT (1U << 5)</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_MALLOC_F (1U << 6)</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_PRESERVE_F_HAT (1U << 7)</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_PRESERVE_X (1U << 8)</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_PRESERVE_F (1U << 9)</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_DESTROY_F_HAT (1U << 10)</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_DESTROY_X (1U << 11)</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_DESTROY_F (1U << 12)</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="comment">/* precompute flags */</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="preprocessor">#define NFSFT_NO_DIRECT_ALGORITHM (1U << 13)</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_NO_FAST_ALGORITHM (1U << 14)</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_ZERO_F_HAT (1U << 16)</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00607"></a><span class="lineno"><a class="code" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa"> 607</a></span> <span class="comment">/* helper macros */</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="preprocessor">#define NFSFT_INDEX(k,n,plan) ((2*(plan)->N+2)*((plan)->N-n+1)+(plan)->N+k+1)</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSFT_F_HAT_SIZE(N) ((2*N+2)*(2*N+2))</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="comment">/* fpt */</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="preprocessor">#define FPT_MANGLE_DOUBLE(name) NFFT_CONCAT(fpt_, name)</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="preprocessor"></span><span class="preprocessor">#define FPT_MANGLE_FLOAT(name) NFFT_CONCAT(fptf_, name)</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="preprocessor"></span><span class="preprocessor">#define FPT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(fptl_, name)</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="comment">/* huge second-order macro that defines prototypes for all fpt API functions.</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="comment"> * X: fpt name-mangling macro</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="comment"> * R: real data type</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="comment"> * C: complex data type</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="preprocessor">#define FPT_DEFINE_API(X,Y,R,C) \</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="preprocessor">typedef struct X(set_s_) *X(set); \</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="preprocessor">NFFT_EXTERN X(set) X(init)(const int M, const int t, const unsigned int flags); \</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="preprocessor">NFFT_EXTERN void X(precompute)(X(set) set, const int m, R *alpha, R *beta, \</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="preprocessor"> R *gam, int k_start, const R threshold); \</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="preprocessor">NFFT_EXTERN void X(trafo_direct)(X(set) set, const int m, const C *x, C *y, \</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="preprocessor"> const int k_end, const unsigned int flags); \</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="preprocessor">NFFT_EXTERN void X(trafo)(X(set) set, const int m, const C *x, C *y, \</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="preprocessor"> const int k_end, const unsigned int flags); \</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="preprocessor">NFFT_EXTERN void X(transposed_direct)(X(set) set, const int m, C *x, \</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="preprocessor"> C *y, const int k_end, const unsigned int flags); \</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="preprocessor">NFFT_EXTERN void X(transposed)(X(set) set, const int m, C *x, \</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="preprocessor"> C *y, const int k_end, const unsigned int flags); \</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="preprocessor">NFFT_EXTERN void X(finalize)(X(set) set);</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="preprocessor">#ifdef HAVE_FPT</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="preprocessor"></span><span class="comment">/* fpt api */</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> FPT_DEFINE_API(FPT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> FPT_DEFINE_API(FPT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> FPT_DEFINE_API(FPT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="comment">/* init flags */</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="preprocessor">#define FPT_NO_STABILIZATION (1U << 0)</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="preprocessor"></span><span class="preprocessor">#define FPT_NO_FAST_ALGORITHM (1U << 2)</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="preprocessor"></span><span class="preprocessor">#define FPT_NO_DIRECT_ALGORITHM (1U << 3)</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="preprocessor"></span><span class="preprocessor">#define FPT_PERSISTENT_DATA (1U << 4)</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="comment">/* transform flags */</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="preprocessor">#define FPT_FUNCTION_VALUES (1U << 5)</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="preprocessor"></span><span class="preprocessor">#define FPT_AL_SYMMETRY (1U << 6)</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="comment">/* nfsoft*/</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="preprocessor">#define NFSOFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfsoft_, name)</span></div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_MANGLE_FLOAT(name) NFFT_CONCAT(nfsoftf_, name)</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"><a class="code" href="structnfsoftl__plan__.html#a92211c64713d72c3d3cf45ac39601214"> 663</a></span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfsoftl_, name)</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="comment">/* huge second-order macro that defines prototypes for all nfsoft API functions.</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="comment"> * X: nfsoft name-mangling macro</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="comment"> * Y: nfft name-mangling macro</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="comment"> * Z: fpt name-mangling macro</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="comment"> * R: real data type</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="comment"> * C: complex data type</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="preprocessor">#define NFSOFT_DEFINE_API(X,Y,Z,R,C) \</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="preprocessor">typedef struct X(plan_)\</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="preprocessor"> MACRO_MV_PLAN(C) \</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="preprocessor"> R *x; \</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="preprocessor"> C *wig_coeffs; \</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="preprocessor"> C *cheby; \</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="preprocessor"> C *aux; \</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="preprocessor"> </span><span class="comment">/* internal use only */</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="preprocessor"> int t; \</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="preprocessor"> unsigned int flags; \</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="preprocessor"> Y(plan) p_nfft; \</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="preprocessor"> Z(set) internal_fpt_set; \</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="preprocessor"> int fpt_kappa; \</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="preprocessor">} X(plan);\</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="preprocessor">NFFT_EXTERN void X(precompute)(X(plan) *plan); \</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="preprocessor">NFFT_EXTERN Z(set) X(SO3_single_fpt_init)(int l, int k, int m, unsigned int flags, int kappa); \</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="preprocessor">NFFT_EXTERN void X(SO3_fpt)(C *coeffs, Z(set) set, int l, int k, int m, unsigned int nfsoft_flags); \</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="preprocessor">NFFT_EXTERN void X(SO3_fpt_transposed)(C *coeffs, Z(set) set,int l, int k, int m,unsigned int nfsoft_flags); \</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="preprocessor">NFFT_EXTERN void X(init)(X(plan) *plan, int N, int M); \</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="preprocessor">NFFT_EXTERN void X(init_advanced)(X(plan) *plan, int N, int M,unsigned int nfsoft_flags); \</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="preprocessor">NFFT_EXTERN void X(init_guru)(X(plan) *plan, int N, int M,unsigned int nfsoft_flags,unsigned int nfft_flags,int nfft_cutoff,int fpt_kappa); \</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="preprocessor">NFFT_EXTERN void X(trafo)(X(plan) *plan_nfsoft); \</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="preprocessor">NFFT_EXTERN void X(adjoint)(X(plan) *plan_nfsoft); \</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <span class="preprocessor">NFFT_EXTERN void X(finalize)(X(plan) *plan); \</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="preprocessor">NFFT_EXTERN int X(posN)(int n,int m, int B);</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="preprocessor">#ifdef HAVE_NFSOFT</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="preprocessor"></span><span class="comment">/* nfsoft api */</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> NFSOFT_DEFINE_API(NFSOFT_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,FPT_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> NFSOFT_DEFINE_API(NFSOFT_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,FPT_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> NFSOFT_DEFINE_API(NFSOFT_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,FPT_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> </div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="comment">/* init flags */</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="preprocessor">#define NFSOFT_NORMALIZED (1U << 0)</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_USE_NDFT (1U << 1)</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_USE_DPT (1U << 2)</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_MALLOC_X (1U << 3)</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_REPRESENT (1U << 4)</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_MALLOC_F_HAT (1U << 5)</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_MALLOC_F (1U << 6)</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_PRESERVE_F_HAT (1U << 7)</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_PRESERVE_X (1U << 8)</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_PRESERVE_F (1U << 9)</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_DESTROY_F_HAT (1U << 10)</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_DESTROY_X (1U << 11)</span></div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_DESTROY_F (1U << 12)</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="comment">/* precompute flags */</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="preprocessor">#define NFSOFT_NO_STABILIZATION (1U << 13)</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_CHOOSE_DPT (1U << 14)</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_SOFT (1U << 15)</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_ZERO_F_HAT (1U << 16)</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="comment">/* helper macros */</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="preprocessor">#define NFSOFT_INDEX(m,n,l,B) (((l)+((B)+1))+(2*(B)+2)*(((n)+((B)+1))+(2*(B)+2)*((m)+((B)+1))))</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_INDEX_TWO(m,n,l,B) ((B+1)*(B+1)+(B+1)*(B+1)*(m+B)-((m-1)*m*(2*m-1)+(B+1)*(B+2)*(2*B+3))/6)+(posN(n,m,B))+(l-MAX(ABS(m),ABS(n)))</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="preprocessor"></span><span class="preprocessor">#define NFSOFT_F_HAT_SIZE(B) (((B)+1)*(4*((B)+1)*((B)+1)-1)/3)</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="comment">/*solver */</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="comment">/* name mangling macros */</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="preprocessor">#define SOLVER_MANGLE_DOUBLE(name) NFFT_CONCAT(solver_, name)</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="preprocessor"></span><span class="preprocessor">#define SOLVER_MANGLE_FLOAT(name) NFFT_CONCAT(solverf_, name)</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="preprocessor"></span><span class="preprocessor">#define SOLVER_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(solverl_, name)</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <span class="comment">/* huge second-order macro that defines prototypes for all nfsoft API functions.</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> <span class="comment"> * We expand this macro for each supported precision.</span></div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="comment"> * X: nfsoft name-mangling macro</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="comment"> * Y: nfft name-mangling macro</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="comment"> * R: real data type</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="comment"> * C: complex data type</span></div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="preprocessor">#define SOLVER_DEFINE_API(X,Y,R,C)\</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> <span class="preprocessor"> Y(mv_plan_complex) *mv; \</span></div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="preprocessor"> unsigned flags; \</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="preprocessor"> R *w; \</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="preprocessor"> R *w_hat; \</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="preprocessor"> C *y; \</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <span class="preprocessor"> C *f_hat_iter; \</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> <span class="preprocessor"> C *r_iter; \</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="preprocessor"> C *z_hat_iter; \</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="preprocessor"> C *p_hat_iter; \</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno"><a class="code" href="structsolverl__plan__double.html#a0816054fdb0e07f4a68fc4aa5321c977"> 763</a></span> <span class="preprocessor"> C *v_iter; \</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="preprocessor"> R alpha_iter; \</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="preprocessor"> R beta_iter; \</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="preprocessor"> R dot_r_iter; \</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="preprocessor"> R dot_r_iter_old; \</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="preprocessor"> R dot_z_hat_iter; \</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="preprocessor"> R dot_z_hat_iter_old; \</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="preprocessor"> R dot_p_hat_iter; \</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="preprocessor"> R dot_v_iter; \</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="preprocessor">} X(plan_complex);\</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="preprocessor">NFFT_EXTERN void X(init_advanced_complex)(X(plan_complex)* ths, Y(mv_plan_complex) *mv, unsigned flags);\</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="preprocessor">NFFT_EXTERN void X(init_complex)(X(plan_complex)* ths, Y(mv_plan_complex) *mv);\</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="preprocessor">NFFT_EXTERN void X(before_loop_complex)(X(plan_complex)* ths);\</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <span class="preprocessor">NFFT_EXTERN void X(loop_one_step_complex)(X(plan_complex) *ths);\</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <span class="preprocessor">NFFT_EXTERN void X(finalize_complex)(X(plan_complex) *ths);\</span></div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> <span class="preprocessor">typedef struct\</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="preprocessor">{\</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="preprocessor"> Y(mv_plan_double) *mv; \</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="preprocessor"> unsigned flags; \</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="preprocessor"> R *w; \</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="preprocessor"> R *w_hat; \</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="preprocessor"> R *y; \</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> <span class="preprocessor"> R *f_hat_iter; \</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> <span class="preprocessor"> R *r_iter; \</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="preprocessor"> R *z_hat_iter; \</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="preprocessor"> R *p_hat_iter; \</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> <span class="preprocessor"> R *v_iter; \</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="preprocessor"> R alpha_iter; \</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="preprocessor"> R beta_iter; \</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="preprocessor"> R dot_r_iter; \</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="preprocessor"> R dot_r_iter_old; \</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="preprocessor"> R dot_z_hat_iter; \</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="preprocessor"> R dot_z_hat_iter_old; \</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="preprocessor"> R dot_p_hat_iter; \</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="preprocessor"> R dot_v_iter; \</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> <span class="preprocessor">} X(plan_double);\</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="preprocessor">NFFT_EXTERN void X(init_advanced_double)(X(plan_double)* ths, Y(mv_plan_double) *mv, unsigned flags);\</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> <span class="preprocessor">NFFT_EXTERN void X(solver_init_double)(X(plan_double)* ths, Y(mv_plan_double) *mv);\</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="preprocessor">NFFT_EXTERN void X(solver_before_loop_double)(X(plan_double)* ths);\</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="preprocessor">NFFT_EXTERN void X(solver_loop_one_step_double)(X(plan_double) *ths);\</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> <span class="preprocessor">NFFT_EXTERN void X(solver_finalize_double)(X(plan_double) *ths);</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="comment">/* solver api */</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> SOLVER_DEFINE_API(SOLVER_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,<span class="keywordtype">float</span>,fftwf_complex)</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> SOLVER_DEFINE_API(SOLVER_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,<span class="keywordtype">double</span>,fftw_complex)</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> SOLVER_DEFINE_API(SOLVER_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,<span class="keywordtype">long</span> <span class="keywordtype">double</span>,fftwl_complex)</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> <span class="comment">/* init flags */</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> <span class="preprocessor">#define LANDWEBER (1U<< 0)</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="preprocessor"></span><span class="preprocessor">#define STEEPEST_DESCENT (1U<< 1)</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> <span class="preprocessor"></span><span class="preprocessor">#define CGNR (1U<< 2)</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> <span class="preprocessor"></span><span class="preprocessor">#define CGNE (1U<< 3)</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> <span class="preprocessor"></span><span class="preprocessor">#define NORMS_FOR_LANDWEBER (1U<< 4)</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="preprocessor"></span><span class="preprocessor">#define PRECOMPUTE_WEIGHT (1U<< 5)</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> <span class="preprocessor"></span><span class="preprocessor">#define PRECOMPUTE_DAMP (1U<< 6)</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="preprocessor"></span>} <span class="comment">/* extern "C" */</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="preprocessor">#endif </span><span class="comment">/* defined(__NFFT3_H__) */</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfft3conf_8h_source.html b/doc/api/html/nfft3conf_8h_source.html
new file mode 100644
index 0000000..e6868f0
--- /dev/null
+++ b/doc/api/html/nfft3conf_8h_source.html
@@ -0,0 +1,95 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfft3conf.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfft3conf.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id$ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">/* include/nfftconf.h.in. Generated from configure.ac by autoheader. */</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/* Define to enable FPT module. */</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#define HAVE_FPT 1</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment">/* Define to enable MRI module. */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#define HAVE_MRI 1</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment">/* Define to enable NFCT module. */</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#define HAVE_NFCT 1</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">/* Define to enable NFSFT module. */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#define HAVE_NFSFT 1</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment">/* Define to enable NFSOFT module. */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#define HAVE_NFSOFT 1</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment">/* Define to enable NFST module. */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#define HAVE_NFST 1</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">/* Define to enable NNFFT module. */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#define HAVE_NNFFT 1</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment">/* Define to enable NSFFT module. */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#define HAVE_NSFFT 1</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfft3util_8h.html b/doc/api/html/nfft3util_8h.html
new file mode 100644
index 0000000..e16eb93
--- /dev/null
+++ b/doc/api/html/nfft3util_8h.html
@@ -0,0 +1,221 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfft3util.h File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">nfft3util.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Header file for utility functions used by the nfft3 library.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include <fftw3.h></code><br/>
+</div>
+<p><a href="nfft3util_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga4df074728562efbb458f6662e649d1d5"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5">NFFT_SWAP_complex</a>(x, y)</td></tr>
+<tr class="memdesc:ga4df074728562efbb458f6662e649d1d5"><td class="mdescLeft"> </td><td class="mdescRight">Swapping of two vectors. <a href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5"></a><br/></td></tr>
+<tr class="memitem:ga4d8733560ed5e4cc3ff7ecadac62e83e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e">NFFT_SWAP_double</a>(x, y)</td></tr>
+<tr class="memdesc:ga4d8733560ed5e4cc3ff7ecadac62e83e"><td class="mdescLeft"> </td><td class="mdescRight">Swapping of two vectors. <a href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e"></a><br/></td></tr>
+<tr class="memitem:ga598a3330b3c21701223ee0ca14316eca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga598a3330b3c21701223ee0ca14316eca"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca">PI</a> 3.141592653589793238462643383279502884197169399375105820974944592</td></tr>
+<tr class="memdesc:ga598a3330b3c21701223ee0ca14316eca"><td class="mdescLeft"> </td><td class="mdescRight">Formerly known to be an irrational number. <br/></td></tr>
+<tr class="memitem:ga2750dfdda752269a036f487a4a34b849"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2750dfdda752269a036f487a4a34b849"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PI2</b> 6.283185307179586476925286766559005768394338798750211641949889185</td></tr>
+<tr class="memitem:gafd17621e12029ff7c53518b74a487c94"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafd17621e12029ff7c53518b74a487c94"></a>
+#define </td><td class="memItemRight" valign="bottom"><b>PI4</b> 12.56637061435917295385057353311801153678867759750042328389977837</td></tr>
+<tr class="memitem:gad2e3f0e1983de6d70f003545cc556ed3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad2e3f0e1983de6d70f003545cc556ed3"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3">NFFT_MAX</a>(a, b) ((a)>(b)? (a) : (b))</td></tr>
+<tr class="memdesc:gad2e3f0e1983de6d70f003545cc556ed3"><td class="mdescLeft"> </td><td class="mdescRight">Maximum of its two arguments. <br/></td></tr>
+<tr class="memitem:ga9087991411f723f26723b2b26dbf3308"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9087991411f723f26723b2b26dbf3308"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308">NFFT_MIN</a>(a, b) ((a)<(b)? (a) : (b))</td></tr>
+<tr class="memdesc:ga9087991411f723f26723b2b26dbf3308"><td class="mdescLeft"> </td><td class="mdescRight">Mimimum of its two arguments. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga89bd624abdfb13abc10c144a8ff949cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga89bd624abdfb13abc10c144a8ff949cd"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga89bd624abdfb13abc10c144a8ff949cd">nfft_bspline_old</a> (int k, double x, double *A)</td></tr>
+<tr class="memdesc:ga89bd624abdfb13abc10c144a8ff949cd"><td class="mdescLeft"> </td><td class="mdescRight">To test the new one. <br/></td></tr>
+<tr class="memitem:ga2fd48f1f700153c050d27691c4b2a6cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2fd48f1f700153c050d27691c4b2a6cc"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga2fd48f1f700153c050d27691c4b2a6cc">nfft_bspline</a> (int k, double x, double *scratch)</td></tr>
+<tr class="memdesc:ga2fd48f1f700153c050d27691c4b2a6cc"><td class="mdescLeft"> </td><td class="mdescRight">Computes the B-spline <img class="formulaInl" alt="$M_{k,0}\left(x\right)$" src="form_9.png"/>, scratch is used for de Boor's scheme. <br/></td></tr>
+<tr class="memitem:ga2752ca372ee2622f173a706e86e2b116"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2752ca372ee2622f173a706e86e2b116"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116">nfft_prod_int</a> (int *vec, int d)</td></tr>
+<tr class="memdesc:ga2752ca372ee2622f173a706e86e2b116"><td class="mdescLeft"> </td><td class="mdescRight">Computes integer <img class="formulaInl" alt="$\prod_{t=0}^{d-1} v_t$" src="form_10.png"/>. <br/></td></tr>
+<tr class="memitem:ga8adc6bf59ec10f16243030ee00ad4a40"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8adc6bf59ec10f16243030ee00ad4a40"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40">nfst_prod_minus_a_int</a> (int *vec, int a, int d)</td></tr>
+<tr class="memdesc:ga8adc6bf59ec10f16243030ee00ad4a40"><td class="mdescLeft"> </td><td class="mdescRight">Computes integer <img class="formulaInl" alt="$\prod_{t=0}^{d-1} v_t-a$" src="form_11.png"/>. <br/></td></tr>
+<tr class="memitem:gad979f626cc8397e26d1bd78a7ba342cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad979f626cc8397e26d1bd78a7ba342cd"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad979f626cc8397e26d1bd78a7ba342cd">nfft_plain_loop</a> (int *idx, int *N, int d)</td></tr>
+<tr class="memdesc:gad979f626cc8397e26d1bd78a7ba342cd"><td class="mdescLeft"> </td><td class="mdescRight">Computes <img class="formulaInl" alt="$\sum_{t=0}^{d-1} i_t \prod_{t'=t+1}^{d-1} N_{t'}$" src="form_12.png"/>. <br/></td></tr>
+<tr class="memitem:gad7bad7074a695341742f57526f8695eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad7bad7074a695341742f57526f8695eb"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad7bad7074a695341742f57526f8695eb">nfft_prod_real</a> (double *vec, int d)</td></tr>
+<tr class="memdesc:gad7bad7074a695341742f57526f8695eb"><td class="mdescLeft"> </td><td class="mdescRight">Computes double <img class="formulaInl" alt="$\prod_{t=0}^{d-1} v_t$" src="form_10.png"/>. <br/></td></tr>
+<tr class="memitem:ga135eb6c5a8ae1a84ea64c9099caac004"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga135eb6c5a8ae1a84ea64c9099caac004"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004">nfft_dot_complex</a> (fftw_complex *x, int n)</td></tr>
+<tr class="memdesc:ga135eb6c5a8ae1a84ea64c9099caac004"><td class="mdescLeft"> </td><td class="mdescRight">Computes the inner/dot product <img class="formulaInl" alt="$x^H x$" src="form_13.png"/>. <br/></td></tr>
+<tr class="memitem:ga02357d8d67d2591573089e49958855a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga02357d8d67d2591573089e49958855a5"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5">nfft_dot_double</a> (double *x, int n)</td></tr>
+<tr class="memdesc:ga02357d8d67d2591573089e49958855a5"><td class="mdescLeft"> </td><td class="mdescRight">Computes the inner/dot product <img class="formulaInl" alt="$x^H x$" src="form_13.png"/>. <br/></td></tr>
+<tr class="memitem:gac712b4a91652e20dc53719ce6fc1f9e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac712b4a91652e20dc53719ce6fc1f9e1"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1">nfft_dot_w_complex</a> (fftw_complex *x, double *w, int n)</td></tr>
+<tr class="memdesc:gac712b4a91652e20dc53719ce6fc1f9e1"><td class="mdescLeft"> </td><td class="mdescRight">Computes the weighted inner/dot product <img class="formulaInl" alt="$x^H (w \odot x)$" src="form_14.png"/>. <br/></td></tr>
+<tr class="memitem:ga69cceec47679c500072d3d60c6181b39"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga69cceec47679c500072d3d60c6181b39"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39">nfft_dot_w_double</a> (double *x, double *w, int n)</td></tr>
+<tr class="memdesc:ga69cceec47679c500072d3d60c6181b39"><td class="mdescLeft"> </td><td class="mdescRight">Computes the weighted inner/dot product <img class="formulaInl" alt="$x^H (w \odot x)$" src="form_14.png"/>. <br/></td></tr>
+<tr class="memitem:ga68268fc9bfad5a7e7383098ac1715674"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga68268fc9bfad5a7e7383098ac1715674"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga68268fc9bfad5a7e7383098ac1715674">nfft_dot_w_w2_complex</a> (fftw_complex *x, double *w, double *w2, int n)</td></tr>
+<tr class="memdesc:ga68268fc9bfad5a7e7383098ac1715674"><td class="mdescLeft"> </td><td class="mdescRight">Computes the weighted inner/dot product <img class="formulaInl" alt="$x^H (w1\odot w2\odot w2 \odot x)$" src="form_15.png"/>. <br/></td></tr>
+<tr class="memitem:ga9b59288597d159357fe86395e635a075"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9b59288597d159357fe86395e635a075"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga9b59288597d159357fe86395e635a075">nfft_dot_w2_complex</a> (fftw_complex *x, double *w2, int n)</td></tr>
+<tr class="memdesc:ga9b59288597d159357fe86395e635a075"><td class="mdescLeft"> </td><td class="mdescRight">Computes the weighted inner/dot product <img class="formulaInl" alt="$x^H (w2\odot w2 \odot x)$" src="form_16.png"/>. <br/></td></tr>
+<tr class="memitem:ga21fd5b4d5f6113538320188306611133"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga21fd5b4d5f6113538320188306611133"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133">nfft_cp_complex</a> (fftw_complex *x, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga21fd5b4d5f6113538320188306611133"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow y$" src="form_17.png"/>. <br/></td></tr>
+<tr class="memitem:gab220a37bd6e58be7413507b17ca3bfe2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab220a37bd6e58be7413507b17ca3bfe2"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2">nfft_cp_double</a> (double *x, double *y, int n)</td></tr>
+<tr class="memdesc:gab220a37bd6e58be7413507b17ca3bfe2"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow y$" src="form_17.png"/>. <br/></td></tr>
+<tr class="memitem:ga33409df91e7ad5e1dca3beaa63e0ef25"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga33409df91e7ad5e1dca3beaa63e0ef25"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga33409df91e7ad5e1dca3beaa63e0ef25">nfft_cp_a_complex</a> (fftw_complex *x, double a, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga33409df91e7ad5e1dca3beaa63e0ef25"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow a y$" src="form_18.png"/>. <br/></td></tr>
+<tr class="memitem:ga41f20c605269e701b3305e49010e0759"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga41f20c605269e701b3305e49010e0759"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga41f20c605269e701b3305e49010e0759">nfft_cp_a_double</a> (double *x, double a, double *y, int n)</td></tr>
+<tr class="memdesc:ga41f20c605269e701b3305e49010e0759"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow a y$" src="form_18.png"/>. <br/></td></tr>
+<tr class="memitem:ga630054cb816785d766959a867965f619"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga630054cb816785d766959a867965f619"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga630054cb816785d766959a867965f619">nfft_cp_w_complex</a> (fftw_complex *x, double *w, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga630054cb816785d766959a867965f619"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow w\odot y$" src="form_19.png"/>. <br/></td></tr>
+<tr class="memitem:ga27a75e17d21c508cacf81276ca531099"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga27a75e17d21c508cacf81276ca531099"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099">nfft_cp_w_double</a> (double *x, double *w, double *y, int n)</td></tr>
+<tr class="memdesc:ga27a75e17d21c508cacf81276ca531099"><td class="mdescLeft"> </td><td class="mdescRight">Copies <img class="formulaInl" alt="$x \leftarrow w\odot y$" src="form_19.png"/>. <br/></td></tr>
+<tr class="memitem:ga676395f56bbf1c444d074a21753de8d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga676395f56bbf1c444d074a21753de8d5"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5">nfft_upd_axpy_complex</a> (fftw_complex *x, double a, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga676395f56bbf1c444d074a21753de8d5"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + y$" src="form_20.png"/>. <br/></td></tr>
+<tr class="memitem:ga7610a506bc5ab40a6e1d7937b36921a3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7610a506bc5ab40a6e1d7937b36921a3"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3">nfft_upd_axpy_double</a> (double *x, double a, double *y, int n)</td></tr>
+<tr class="memdesc:ga7610a506bc5ab40a6e1d7937b36921a3"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + y$" src="form_20.png"/>. <br/></td></tr>
+<tr class="memitem:ga1fde8da1b69413398fca44e2ef2fbdb4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1fde8da1b69413398fca44e2ef2fbdb4"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4">nfft_upd_xpay_complex</a> (fftw_complex *x, double a, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga1fde8da1b69413398fca44e2ef2fbdb4"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow x + a y$" src="form_21.png"/>. <br/></td></tr>
+<tr class="memitem:ga2389c3b56a484a3f165b7d9203700064"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2389c3b56a484a3f165b7d9203700064"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064">nfft_upd_xpay_double</a> (double *x, double a, double *y, int n)</td></tr>
+<tr class="memdesc:ga2389c3b56a484a3f165b7d9203700064"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow x + a y$" src="form_21.png"/>. <br/></td></tr>
+<tr class="memitem:ga903a4b3ed369dcfe67b9379a238ed23d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga903a4b3ed369dcfe67b9379a238ed23d"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga903a4b3ed369dcfe67b9379a238ed23d">nfft_upd_axpby_complex</a> (fftw_complex *x, double a, fftw_complex *y, double b, int n)</td></tr>
+<tr class="memdesc:ga903a4b3ed369dcfe67b9379a238ed23d"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + b y$" src="form_22.png"/>. <br/></td></tr>
+<tr class="memitem:ga75e403e92875b0b919a555f8cede0e8d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga75e403e92875b0b919a555f8cede0e8d"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga75e403e92875b0b919a555f8cede0e8d">nfft_upd_axpby_double</a> (double *x, double a, double *y, double b, int n)</td></tr>
+<tr class="memdesc:ga75e403e92875b0b919a555f8cede0e8d"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + b y$" src="form_22.png"/>. <br/></td></tr>
+<tr class="memitem:gad8e10773e59818c88a8ea2cb560b936e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad8e10773e59818c88a8ea2cb560b936e"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e">nfft_upd_xpawy_complex</a> (fftw_complex *x, double a, double *w, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:gad8e10773e59818c88a8ea2cb560b936e"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow x + a w\odot y$" src="form_23.png"/>. <br/></td></tr>
+<tr class="memitem:gac5db5bbc58f772844cf0caf5fd9fafb0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac5db5bbc58f772844cf0caf5fd9fafb0"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0">nfft_upd_xpawy_double</a> (double *x, double a, double *w, double *y, int n)</td></tr>
+<tr class="memdesc:gac5db5bbc58f772844cf0caf5fd9fafb0"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow x + a w\odot y$" src="form_23.png"/>. <br/></td></tr>
+<tr class="memitem:ga693919963b51cf396311b15660e04cd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga693919963b51cf396311b15660e04cd8"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga693919963b51cf396311b15660e04cd8">nfft_upd_axpwy_complex</a> (fftw_complex *x, double a, double *w, fftw_complex *y, int n)</td></tr>
+<tr class="memdesc:ga693919963b51cf396311b15660e04cd8"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + w\odot y$" src="form_24.png"/>. <br/></td></tr>
+<tr class="memitem:gaf6777c4b8aa9f575f1600c51e8ae343a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf6777c4b8aa9f575f1600c51e8ae343a"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaf6777c4b8aa9f575f1600c51e8ae343a">nfft_upd_axpwy_double</a> (double *x, double a, double *w, double *y, int n)</td></tr>
+<tr class="memdesc:gaf6777c4b8aa9f575f1600c51e8ae343a"><td class="mdescLeft"> </td><td class="mdescRight">Updates <img class="formulaInl" alt="$x \leftarrow a x + w\odot y$" src="form_24.png"/>. <br/></td></tr>
+<tr class="memitem:gaa388b5ec231e02ac45e37b60fd62e770"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa388b5ec231e02ac45e37b60fd62e770"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770">nfft_fftshift_complex</a> (fftw_complex *x, int d, int *N)</td></tr>
+<tr class="memdesc:gaa388b5ec231e02ac45e37b60fd62e770"><td class="mdescLeft"> </td><td class="mdescRight">Swaps each half over N[d]/2. <br/></td></tr>
+<tr class="memitem:gaa8e0581d802c4b7bb153682a4c156409"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa8e0581d802c4b7bb153682a4c156409"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaa8e0581d802c4b7bb153682a4c156409">nfft_vpr_int</a> (int *x, int n, char *text)</td></tr>
+<tr class="memdesc:gaa8e0581d802c4b7bb153682a4c156409"><td class="mdescLeft"> </td><td class="mdescRight">Prints a vector of integer numbers. <br/></td></tr>
+<tr class="memitem:ga5021b4c5ea2a24b0014786deb81cca91"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5021b4c5ea2a24b0014786deb81cca91"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91">nfft_vpr_double</a> (double *x, int n, const char *text)</td></tr>
+<tr class="memdesc:ga5021b4c5ea2a24b0014786deb81cca91"><td class="mdescLeft"> </td><td class="mdescRight">Prints a vector of doubles numbers. <br/></td></tr>
+<tr class="memitem:ga52ad07055e22b83a016bdbf43d3884d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga52ad07055e22b83a016bdbf43d3884d0"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0">nfft_vpr_complex</a> (fftw_complex *x, int n, const char *text)</td></tr>
+<tr class="memdesc:ga52ad07055e22b83a016bdbf43d3884d0"><td class="mdescLeft"> </td><td class="mdescRight">Prints a vector of complex numbers. <br/></td></tr>
+<tr class="memitem:ga5f53c8cd0b2f33200fce15ecf75a0685"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5f53c8cd0b2f33200fce15ecf75a0685"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685">nfft_vrand_unit_complex</a> (fftw_complex *x, int n)</td></tr>
+<tr class="memdesc:ga5f53c8cd0b2f33200fce15ecf75a0685"><td class="mdescLeft"> </td><td class="mdescRight">Inits a vector of random complex numbers in <img class="formulaInl" alt="$[0,1]\times[0,1]{\rm i}$" src="form_25.png"/>. <br/></td></tr>
+<tr class="memitem:gaa44184ac2c1452221508e7640f391c34"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa44184ac2c1452221508e7640f391c34"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34">nfft_vrand_shifted_unit_double</a> (double *x, int n)</td></tr>
+<tr class="memdesc:gaa44184ac2c1452221508e7640f391c34"><td class="mdescLeft"> </td><td class="mdescRight">Inits a vector of random double numbers in <img class="formulaInl" alt="$[-1/2,1/2]$" src="form_26.png"/>. <br/></td></tr>
+<tr class="memitem:ga797e81f55e6379efabf4d98522d1ee9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga797e81f55e6379efabf4d98522d1ee9d"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga797e81f55e6379efabf4d98522d1ee9d">nfft_voronoi_weights_1d</a> (double *w, double *x, int M)</td></tr>
+<tr class="memdesc:ga797e81f55e6379efabf4d98522d1ee9d"><td class="mdescLeft"> </td><td class="mdescRight">Computes non periodic voronoi weights, assumes ordered nodes <img class="formulaInl" alt="$x_j$" src="form_27.png"/>. <br/></td></tr>
+<tr class="memitem:ga26a4ed487a23e99e01f111113be9f994"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994">nfft_voronoi_weights_S2</a> (double *w, double *xi, int M)</td></tr>
+<tr class="memdesc:ga26a4ed487a23e99e01f111113be9f994"><td class="mdescLeft"> </td><td class="mdescRight">Computes voronoi weights for nodes on the sphere S^2. <a href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994"></a><br/></td></tr>
+<tr class="memitem:gac9b810183abafb668f8aa777c7985256"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac9b810183abafb668f8aa777c7985256"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gac9b810183abafb668f8aa777c7985256">nfft_modified_fejer</a> (int N, int kk)</td></tr>
+<tr class="memdesc:gac9b810183abafb668f8aa777c7985256"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified Fejer kernel, ie <img class="formulaInl" alt="$\frac{2}{N}\left(1-\frac{\left|2k+1\right|}{N}\right)$" src="form_28.png"/>. <br/></td></tr>
+<tr class="memitem:gab45a6cd3528d3716522a0cf184375aaf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab45a6cd3528d3716522a0cf184375aaf"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gab45a6cd3528d3716522a0cf184375aaf">nfft_modified_jackson2</a> (int N, int kk)</td></tr>
+<tr class="memdesc:gab45a6cd3528d3716522a0cf184375aaf"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified Jackson kernel. <br/></td></tr>
+<tr class="memitem:ga126ec2282393435f0d795ac79db8654b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga126ec2282393435f0d795ac79db8654b"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga126ec2282393435f0d795ac79db8654b">nfft_modified_jackson4</a> (int N, int kk)</td></tr>
+<tr class="memdesc:ga126ec2282393435f0d795ac79db8654b"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified generalised Jackson kernel. <br/></td></tr>
+<tr class="memitem:gaa84cb34c6d368599fb2f997eadb184a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa84cb34c6d368599fb2f997eadb184a7"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gaa84cb34c6d368599fb2f997eadb184a7">nfft_modified_sobolev</a> (double mu, int kk)</td></tr>
+<tr class="memdesc:gaa84cb34c6d368599fb2f997eadb184a7"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified Sobolev kernel. <br/></td></tr>
+<tr class="memitem:gac6201bc2aa806bd25cb14c5f96d644e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac6201bc2aa806bd25cb14c5f96d644e9"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gac6201bc2aa806bd25cb14c5f96d644e9">nfft_modified_multiquadric</a> (double mu, double c, int kk)</td></tr>
+<tr class="memdesc:gac6201bc2aa806bd25cb14c5f96d644e9"><td class="mdescLeft"> </td><td class="mdescRight">Computes the damping factor for the modified multiquadric kernel. <br/></td></tr>
+<tr class="memitem:ga2decee6fe50d50797a82737ba82cf97a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga2decee6fe50d50797a82737ba82cf97a">nfft_smbi</a> (const double x, const double alpha, const int nb, const int ize, double *b)</td></tr>
+<tr class="memdesc:ga2decee6fe50d50797a82737ba82cf97a"><td class="mdescLeft"> </td><td class="mdescRight">Calculates the modified bessel function <img class="formulaInl" alt="$I_{n+\alpha}(x)$" src="form_82.png"/>, possibly scaled by <img class="formulaInl" alt="$\mathrm{e}^{-x}$" src="form_83.png"/>, for real non-negative <img class="formulaInl" alt="$x,alpha$" src="form_84.png"/> with <img class="formulaInl" alt="$0 \le \alpha < 1$" src="form_85.png"/>, and <img class="formulaInl" [...]
+<tr class="memitem:ga574571239f7dcf7474736d35a6242bb1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga574571239f7dcf7474736d35a6242bb1"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nfft_drand48</b> (void)</td></tr>
+<tr class="memitem:gaef3ecf626cc0aab6ccdc363fd43ef0d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaef3ecf626cc0aab6ccdc363fd43ef0d8"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfft_srand48</b> (long int seed)</td></tr>
+<tr class="memitem:gad93b94e3c7e9149f89819504c2b3c738"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738">nfft_sort_node_indices_radix_lsdf</a> (int n, int *keys0, int *keys1, int rhigh)</td></tr>
+<tr class="memdesc:gad93b94e3c7e9149f89819504c2b3c738"><td class="mdescLeft"> </td><td class="mdescRight">Radix sort for node indices. <a href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738"></a><br/></td></tr>
+<tr class="memitem:ga60a5123a8026a06807e14502d7cedcd5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5">nfft_sort_node_indices_radix_msdf</a> (int n, int *keys0, int *keys1, int rhigh)</td></tr>
+<tr class="memdesc:ga60a5123a8026a06807e14502d7cedcd5"><td class="mdescLeft"> </td><td class="mdescRight">Radix sort for node indices. <a href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5"></a><br/></td></tr>
+<tr class="memitem:gafb4a11b0dff72fc3b827b0fee0a14611"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafb4a11b0dff72fc3b827b0fee0a14611"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfft_get_num_threads</b> (void)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Header file for utility functions used by the nfft3 library. </p>
+
+<p>Definition in file <a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>.</p>
+</div></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfft3util_8h_source.html b/doc/api/html/nfft3util_8h_source.html
new file mode 100644
index 0000000..db7cf01
--- /dev/null
+++ b/doc/api/html/nfft3util_8h_source.html
@@ -0,0 +1,214 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfft3util.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfft3util.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="nfft3util_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: nfft3util.h 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifndef __UTIL_H__</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span><span class="preprocessor">#define __UTIL_H__</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <fftw3.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> {</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment">/*###########################################################################*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment">/*###########################################################################*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">/*###########################################################################*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5"> 52</a></span> <span class="preprocessor">#define NFFT_SWAP_complex(x,y) {fftw_complex* NFFT_SWAP_temp__; \</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor"> NFFT_SWAP_temp__=(x); (x)=(y); (y)=NFFT_SWAP_temp__;}</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e"> 57</a></span> <span class="preprocessor">#define NFFT_SWAP_double(x,y) {double* NFFT_SWAP_temp__; NFFT_SWAP_temp__=(x); \</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor"> (x)=(y); (y)=NFFT_SWAP_temp__;}</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca"> 62</a></span> <span class="preprocessor">#define PI 3.141592653589793238462643383279502884197169399375105820974944592</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"></span><span class="preprocessor">#define PI2 6.283185307179586476925286766559005768394338798750211641949889185</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"></span><span class="preprocessor">#define PI4 12.56637061435917295385057353311801153678867759750042328389977837</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3"> 68</a></span> <span class="preprocessor">#define NFFT_MAX(a,b) ((a)>(b)? (a) : (b))</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308"> 72</a></span> <span class="preprocessor">#define NFFT_MIN(a,b) ((a)<(b)? (a) : (b))</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">/* ######################################################################### */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment">/* ########## Window function related ###################################### */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">/* ######################################################################### */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga89bd624abdfb13abc10c144a8ff949cd" title="To test the new one.">nfft_bspline_old</a>(<span class="keywordtype">int</span> k,<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> *A);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga2fd48f1f700153c050d27691c4b2a6cc" title="Computes the B-spline , scratch is used for de Boor's scheme.">nfft_bspline</a>(<span class="keywordtype">int</span> k, <span class="keywordtype">double</span> x, <span class="keywordtype">double</span> *scratch);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment">/* ######################################################################### */</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment">/* ########## Vector routines ############################################## */</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment">/* ######################################################################### */</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">int</span> <a class="code" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116" title="Computes integer .">nfft_prod_int</a>(<span class="keywordtype">int</span> *vec, <span class="keywordtype">int</span> d);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">int</span> <a class="code" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40" title="Computes integer .">nfst_prod_minus_a_int</a>(<span class="keywordtype">int</span> *vec, <span class="keywordtype">int</span> a, <span class="keywordtype">int</span> d);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordtype">int</span> <a class="code" href="group__nfftutil.html#gad979f626cc8397e26d1bd78a7ba342cd" title="Computes .">nfft_plain_loop</a>(<span class="keywordtype">int</span> *idx,<span class="keywordtype">int</span> *N,<span class="keywordtype">int</span> d);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#gad7bad7074a695341742f57526f8695eb" title="Computes double .">nfft_prod_real</a>(<span class="keywordtype">double</span> *vec,<span class="keywordtype">int</span> d);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(fftw_complex* x, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>( <span class="keywordtype">double</span>* x, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(fftw_complex* x, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>( <span class="keywordtype">double</span>* x, <span class="keywordtype">double</span>* w, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga68268fc9bfad5a7e7383098ac1715674" title="Computes the weighted inner/dot product .">nfft_dot_w_w2_complex</a>(fftw_complex* x, <span class="keywordtype">double</span>* w, <span class="keywordtype">double</span>* w2, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga9b59288597d159357fe86395e635a075" title="Computes the weighted inner/dot product .">nfft_dot_w2_complex</a>(fftw_complex* x, <span class="keywordtype">double</span>* w2, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(fftw_complex* x, fftw_complex* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>( <span class="keywordtype">double</span>* x, <span class="keywordtype">double</span>* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga33409df91e7ad5e1dca3beaa63e0ef25" title="Copies .">nfft_cp_a_complex</a>(fftw_complex* x, <span class="keywordtype">double</span> a, fftw_complex* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga41f20c605269e701b3305e49010e0759" title="Copies .">nfft_cp_a_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(fftw_complex* x, <span class="keywordtype">double</span>* w, fftw_complex* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>( <span class="keywordtype">double</span>* x, <span class="keywordtype">double</span>* w, <span class="keywordtype">double</span>* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5" title="Updates .">nfft_upd_axpy_complex</a>(fftw_complex* x, <span class="keywordtype">double</span> a, fftw_complex* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3" title="Updates .">nfft_upd_axpy_double</a>( <span class="keywordtype">double</span>* x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span>* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(fftw_complex* x, <span class="keywordtype">double</span> a, fftw_complex* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>( <span class="keywordtype">double</span>* x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span>* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga903a4b3ed369dcfe67b9379a238ed23d" title="Updates .">nfft_upd_axpby_complex</a>(fftw_complex* x, <span class="keywordtype">double</span> a, fftw_complex* y, <span class="keywordtype">double</span> b, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga75e403e92875b0b919a555f8cede0e8d" title="Updates .">nfft_upd_axpby_double</a>( <span class="keywordtype">double</span>* x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span>* y, <span class="keywordtype">double</span> b, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e" title="Updates .">nfft_upd_xpawy_complex</a>(fftw_complex* x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span>* w, fftw_complex* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0" title="Updates .">nfft_upd_xpawy_double</a>( <span class="keywordtype">double</span>* x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span>* w, <span class="keywordtype">double</span>* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga693919963b51cf396311b15660e04cd8" title="Updates .">nfft_upd_axpwy_complex</a>(fftw_complex* x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span>* w, fftw_complex* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gaf6777c4b8aa9f575f1600c51e8ae343a" title="Updates .">nfft_upd_axpwy_double</a>( <span class="keywordtype">double</span>* x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span>* w, <span class="keywordtype">double</span>* y, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(fftw_complex *x, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span>* N);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gaa8e0581d802c4b7bb153682a4c156409" title="Prints a vector of integer numbers.">nfft_vpr_int</a>(<span class="keywordtype">int</span> *x, <span class="keywordtype">int</span> n, <span class="keywordtype">char</span> *text);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">char</span> *text);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(fftw_complex *x, <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">char</span> *text);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(fftw_complex *x, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment">/* ######################################################################### */</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment">/* ########## Helpers for inverse transforms ############################### */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment">/* ######################################################################### */</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga797e81f55e6379efabf4d98522d1ee9d" title="Computes non periodic voronoi weights, assumes ordered nodes .">nfft_voronoi_weights_1d</a>(<span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> *x, <span class="keywordtype">int</span> M);</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994" title="Computes voronoi weights for nodes on the sphere S^2.">nfft_voronoi_weights_S2</a>(<span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> *xi, <span class="keywordtype">int</span> M);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#gac9b810183abafb668f8aa777c7985256" title="Computes the damping factor for the modified Fejer kernel, ie .">nfft_modified_fejer</a>(<span class="keywordtype">int</span> N,<span class="keywordtype">int</span> kk);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#gab45a6cd3528d3716522a0cf184375aaf" title="Computes the damping factor for the modified Jackson kernel.">nfft_modified_jackson2</a>(<span class="keywordtype">int</span> N,<span class="keywordtype">int</span> kk);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga126ec2282393435f0d795ac79db8654b" title="Computes the damping factor for the modified generalised Jackson kernel.">nfft_modified_jackson4</a>(<span class="keywordtype">int</span> N,<span class="keywordtype">int</span> kk);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#gaa84cb34c6d368599fb2f997eadb184a7" title="Computes the damping factor for the modified Sobolev kernel.">nfft_modified_sobolev</a>(<span class="keywordtype">double</span> mu,<span class="keywordtype">int</span> kk);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#gac6201bc2aa806bd25cb14c5f96d644e9" title="Computes the damping factor for the modified multiquadric kernel.">nfft_modified_multiquadric</a>(<span class="keywordtype">double</span> mu,<span class="keywordtype">double</span> c,<span class="keywordtype">int</span> kk);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordtype">int</span> <a class="code" href="group__nfftutil.html#ga2decee6fe50d50797a82737ba82cf97a" title="Calculates the modified bessel function , possibly scaled by , for real non-negative with ...">nfft_smbi</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keyword">const</span> <span class="keywordtype">double</span> alpha, <span class="keyword" [...]
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordtype">double</span> *b);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keywordtype">double</span> nfft_drand48(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordtype">void</span> nfft_srand48(<span class="keywordtype">long</span> <span class="keywordtype">int</span> seed);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738" title="Radix sort for node indices.">nfft_sort_node_indices_radix_lsdf</a>(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> *keys0, <span class="keywordtype">int</span> *keys1, <span class="keywordtype">int</span> rhigh);</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5" title="Radix sort for node indices.">nfft_sort_node_indices_radix_msdf</a>(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> *keys0, <span class="keywordtype">int</span> *keys1, <span class="keywordtype">int</span> rhigh);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordtype">int</span> nfft_get_num_threads(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="preprocessor"></span><span class="keywordtype">int</span> nfft_get_omp_num_threads(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="preprocessor"></span>} <span class="comment">/* extern "C" */</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfft_2simple__test_8c_source.html b/doc/api/html/nfft_2simple__test_8c_source.html
new file mode 100644
index 0000000..55a18ca
--- /dev/null
+++ b/doc/api/html/nfft_2simple__test_8c_source.html
@@ -0,0 +1,196 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - simple_test.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfft/simple_test.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_nfft_1d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">double</span> t;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">int</span> N=14;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">int</span> M=19;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> ticks t0, t1;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> nfft_init_1d(&p,N,M);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number o [...]
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">if</span>(p.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22 [...]
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total nu [...]
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> t0 = getticks();</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> nfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> t1 = getticks();</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples." [...]
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> printf(<span class="stringliteral">" took %e seconds.\n"</span>,t);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples." [...]
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> nfft_adjoint_direct(&p);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total nu [...]
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> nfft_adjoint(&p);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total nu [...]
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> nfft_finalize(&p);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_nfft_2d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> {</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">int</span> K,N[2],n[2],M;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">double</span> t;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> ticks t0, t1;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> N[0]=32; n[0]=64;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> N[1]=14; n[1]=32;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> M=N[0]*N[1];</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> K=16;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> t0 = getticks();</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> nfft_init_guru(&p, 2, N, M, n, 7,</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> PRE_PHI_HUT| PRE_FULL_PSI| MALLOC_F_HAT| MALLOC_X| MALLOC_F |</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> FFTW_ESTIMATE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span>(p.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22 [...]
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> t1 = getticks();</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,K,</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="stringliteral">"given Fourier coefficients, vector f_hat (first few entries)"</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> printf(<span class="stringliteral">" ... initialisation took %e seconds.\n"</span>,t);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> t0 = getticks();</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> nfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> t1 = getticks();</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,K,<span class="stringliteral">"ndft, vector f (first few entries)"</span>);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> printf(<span class="stringliteral">" took %e seconds.\n"</span>,t);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> t0 = getticks();</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> t1 = getticks();</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,K,<span class="stringliteral">"nfft, vector f (first few entries)"</span>);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> printf(<span class="stringliteral">" took %e seconds.\n"</span>,t);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> t0 = getticks();</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> nfft_adjoint_direct(&p);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> t1 = getticks();</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,K,<span class="stringliteral">"adjoint ndft, vector f_hat (first few entries)"</span>);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> printf(<span class="stringliteral">" took %e seconds.\n"</span>,t);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> t0 = getticks();</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> nfft_adjoint(&p);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> t1 = getticks();</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,K,<span class="stringliteral">"adjoint nfft, vector f_hat (first few entries)"</span>);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> printf(<span class="stringliteral">" took %e seconds.\n"</span>,t);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> nfft_finalize(&p);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> {</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> printf(<span class="stringliteral">"1) computing a one dimensional ndft, nfft and an adjoint nfft\n\n"</span>);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> simple_test_nfft_1d();</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> getc(stdin);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> printf(<span class="stringliteral">"2) computing a two dimensional ndft, nfft and an adjoint nfft\n\n"</span>);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> simple_test_nfft_2d();</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfft_2simple__test__threads_8c_source.html b/doc/api/html/nfft_2simple__test__threads_8c_source.html
new file mode 100644
index 0000000..c601d7e
--- /dev/null
+++ b/doc/api/html/nfft_2simple__test__threads_8c_source.html
@@ -0,0 +1,128 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - simple_test_threads.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfft/simple_test_threads.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3198 2009-05-27 14:16:50Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">//#include <time.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = 1000000;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">const</span> <span class="keywordtype">int</span> M = 1000000;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> ticks t0, t1;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">double</span> t;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> printf(<span class="stringliteral">"nthreads = %d\n"</span>, nfft_get_num_threads());</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">/* init */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> fftw_init_threads();</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> nfft_init_1d(&p,N,M);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">/* pseudo random nodes */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number o [...]
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment">/* precompute psi, that is, the entries of the matrix B */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> t0 = getticks();</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">if</span>(p.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> t1 = getticks();</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> fprintf(stderr,<span class="stringliteral">"precompute elapsed time: %.3f seconds\n"</span>,t);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment">/* pseudo random Fourier coefficients */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22 [...]
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment">/* transformation */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> t0 = getticks();</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> t1 = getticks();</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> fprintf(stderr,<span class="stringliteral">"compute elapsed time: %.3f seconds\n"</span>,t);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> fflush(stderr);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">// nfft_vpr_complex(p.f,p.M_total,"ndft, vector f");</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">/* cleanup */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> nfft_finalize(&p);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> fftw_cleanup_threads();</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfft_8c_source.html b/doc/api/html/nfft_8c_source.html
new file mode 100644
index 0000000..abdcedd
--- /dev/null
+++ b/doc/api/html/nfft_8c_source.html
@@ -0,0 +1,5727 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfft.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7eb6ea3471917cbff788e1046aaeac44.html">nfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfft.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: nfft.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">/* Nonequispaced FFT */</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/* Authors: D. Potts, S. Kunis 2002-2009, Jens Keiner 2009, Toni Volkmer 2012 */</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">/* configure header */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">/* complex datatype (maybe) */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"></span><span class="preprocessor">#include<complex.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">/* NFFT headers */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"></span><span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_sort_nodes_for_better_cache_handle(<span class="keywordtype">int</span> d,</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">const</span> <span class="keywordtype">int</span> *n, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> local_x_num, <span class="keyword">const</span> R *local_x, <span class="keywordtype">int</span> *ar_x)</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">int</span> u_j[d], i, j, help, rhigh;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">int</span> *ar_x_temp;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">int</span> nprod;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">for</span>(i = 0; i < local_x_num; i++) {</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> ar_x[2*i] = 0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> ar_x[2*i+1] = i;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">for</span>(j = 0; j < d; j++) {</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> help = (int) floor( n[j]*local_x[d*i+j] - m);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> u_j[j] = (help%n[j]+n[j])%n[j];</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> ar_x[2*i] += u_j[j];</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span> (j+1 < d)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> ar_x[2*i] *= n[j+1];</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> }</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">for</span> (j = 0, nprod = 1; j < d; j++)</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> nprod *= n[j];</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> rhigh = (int) ceil(log2(nprod)) - 1;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> ar_x_temp = (<span class="keywordtype">int</span> *) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*local_x_num*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <a class="code" href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738" title="Radix sort for node indices.">nfft_sort_node_indices_radix_lsdf</a>(local_x_num, ar_x, ar_x_temp, rhigh);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (i = 1; i < local_x_num; i++)</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> assert(ar_x[2*(i-1)] <= ar_x[2*i]);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor"></span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ar_x_temp);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_sort_nodes(<span class="keyword">const</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> nfft_sort_nodes_for_better_cache_handle(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>, ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>, ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a544 [...]
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">/* some macros to initialize arrays before executing a transformation */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor">#define MACRO_ndft_init_result_trafo memset(f,0,ths->M_total*sizeof(C));</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_init_result_conjugated MACRO_ndft_init_result_trafo</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_init_result_adjoint memset(f_hat,0,ths->N_total*sizeof(C));</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_init_result_transposed MACRO_ndft_init_result_adjoint</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment">/* exponent of complex exponentials */</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor">#define MACRO_ndft_sign_trafo K2PI*ths->x[j*ths->d+t]</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_sign_conjugated -K2PI*ths->x[j*ths->d+t]</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_sign_adjoint K2PI*ths->x[j*ths->d+t]</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_sign_transposed -K2PI*ths->x[j*ths->d+t]</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="preprocessor">#define MACRO_init_k_N_Omega_x(which_one) \</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="preprocessor"> for (t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor"> k[t] = -ths->N[t]/2; \</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="preprocessor"> x[t] = MACRO_ndft_sign_ ## which_one; \</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="preprocessor"> Omega[t+1] = k[t]*x[t] + Omega[t]; \</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor"> omega = Omega[ths->d]; \</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor">} \</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_count_k_N_Omega \</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="preprocessor"> for (t = ths->d-1; (t >= 1) && (k[t] == ths->N[t]/2-1); t--) \</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor"> k[t]-= ths->N[t]-1; \</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="preprocessor"> k[t]++; \</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="preprocessor"> for (t2 = t; t2 < ths->d; t2++) \</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="preprocessor"> Omega[t2+1] = k[t2]*x[t2] + Omega[t2]; \</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="preprocessor"> omega = Omega[ths->d]; \</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="preprocessor">#define MACRO_ndft_compute_trafo f[j] += f_hat[k_L]*CEXP(-II*omega);</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_compute_conjugated MACRO_ndft_compute_trafo</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_compute_adjoint f_hat[k_L] += f[j]*CEXP(+II*omega);</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndft_compute_transposed MACRO_ndft_compute_adjoint</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor">#define MACRO_ndft(which_one) \</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor">void nfft_ ## which_one ## _direct (nfft_plan *ths) \</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor"> C *f_hat = (C*)ths->f_hat, *f = (C*)ths->f; \</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor"> MACRO_ndft_init_result_ ## which_one \</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor"> if (ths->d == 1) \</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor"> </span><span class="comment">/* specialize for univariate case, rationale: faster */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="preprocessor"> const int t = 0; \</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor"> int j; \</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="preprocessor"> for (j = 0; j < ths->M_total; j++) \</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="preprocessor"> int k_L; \</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="preprocessor"> for(k_L = 0; k_L < ths->N_total; k_L++) \</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor"> R omega = (k_L - (ths->N_total/2)) * MACRO_ndft_sign_ ## which_one; \</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor"> MACRO_ndft_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="preprocessor"> </span><span class="comment">/* multivariate case */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="preprocessor"> int j; \</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="preprocessor"> for (j = 0; j < ths->M_total; j++) \</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor"> R x[ths->d], omega, Omega[ths->d+1]; \</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="preprocessor"> int t, t2, k_L, k[ths->d]; \</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="preprocessor"> Omega[0] = K(0.0); \</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="preprocessor"> MACRO_init_k_N_Omega_x(which_one); \</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="preprocessor"> for(k_L = 0; k_L < ths->N_total; k_L++) \</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="preprocessor"> MACRO_ndft_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="preprocessor"> MACRO_count_k_N_Omega; \</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="comment">// macro expanded for OpenMP parallelization</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment">//MACRO_ndft(trafo)</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordtype">void</span> nfft_trafo_direct (<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> {</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> C *f_hat = (C*)ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, *f = (C*)ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> memset(f,0,ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a> == 1)</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> {</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment">/* specialize for univariate case, rationale: faster */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(j)</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (j = 0; j < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> {</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordtype">int</span> k_L;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">for</span>(k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> {</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> R omega = (k_L - ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>/2) * K2PI * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j];</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> f[j] += f_hat[k_L]*cexp(-( 1.0iF)*omega);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> }</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> }</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> }</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> {</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="comment">/* multivariate case */</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(j)</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (j = 0; j < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> {</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> R x[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], omega, Omega[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1];</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordtype">int</span> t, t2, k_L, k[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> Omega[0] = ((R) 0.0);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> {</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> k[t] = -ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> x[t] = K2PI*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t];</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> Omega[t+1] = k[t]*x[t] + Omega[t];</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> }</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> omega = Omega[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">for</span>(k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> {</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> f[j] += f_hat[k_L]*cexp(-( 1.0iF)*omega);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> {</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">for</span> (t = ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>-1; (t >= 1) && (k[t] == ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2-1); t--)</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> k[t]-= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]-1;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> k[t]++;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">for</span> (t2 = t; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> Omega[t2+1] = k[t2]*x[t2] + Omega[t2];</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> omega = Omega[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> }</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> }</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> }</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> }</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="comment">// macro expanded for OpenMP parallelization since parallel calculation</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="comment">// requires outer loop over frequencies and inner loop over nodes.</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="comment">//MACRO_ndft(adjoint)</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordtype">void</span> nfft_adjoint_direct (<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> {</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> C *f_hat = (C*)ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, *f = (C*)ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>;</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> memset(f_hat,0,ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a> == 1)</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> {</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="comment">/* specialize for univariate case, rationale: faster */</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="preprocessor"></span> <span class="keywordtype">int</span> k_L;</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k_L)</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="preprocessor"></span> <span class="keywordflow">for</span>(k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> {</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">for</span> (j = 0; j < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> {</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> R omega = (k_L - (ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>/2)) * K2PI * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j];</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> }</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> }</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="preprocessor"></span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">for</span> (j = 0; j < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> {</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordtype">int</span> k_L;</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">for</span>(k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> {</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> R omega = (k_L - (ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>/2)) * K2PI * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j];</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> }</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> }</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> {</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment">/* multivariate case */</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordtype">int</span> j, k_L;</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="preprocessor"></span><span class="preprocessor"> #pragma omp parallel for default(shared) private(j, k_L)</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor"></span> <span class="keywordflow">for</span>(k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> {</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keywordtype">int</span> k[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], k_temp, t;</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> k_temp = k_L;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">for</span> (t = ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>-1; t >= 0; t--)</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> {</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> k[t] = k_temp % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2;</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> k_temp /= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> }</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">for</span> (j = 0; j < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> {</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> R omega = 0.0;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> omega += k[t] * K2PI * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t];</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> }</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> }</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (j = 0; j < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> {</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> R x[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], omega, Omega[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1];</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordtype">int</span> t, t2, k[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> Omega[0] = ((R) 0.0);</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> {</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> k[t] = -ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> x[t] = K2PI * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t];</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> Omega[t+1] = k[t]*x[t] + Omega[t];</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> }</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> omega = Omega[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">for</span>(k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> {</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">for</span> (t = ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>-1; (t >= 1) && (k[t] == ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2-1); t--)</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> k[t]-= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]-1;</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> k[t]++;</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">for</span> (t2 = t; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> Omega[t2+1] = k[t2]*x[t2] + Omega[t2];</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> omega = Omega[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> }</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> }</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> }</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> nfft_uo(<span class="keyword">const</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> *ths, <span class="keyword">const</span> <span class="keywordtype">int</span> j, <span class="keywordtype">int</span> *up, <span class="keywordtype">int</span> *op,</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keyword">const</span> <span class="keywordtype">int</span> act_dim)</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> {</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keyword">const</span> R xj = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j * ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a> + act_dim];</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keywordtype">int</span> c = LRINT(FLOOR(xj * ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[act_dim]));</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> (*up) = c - (ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> (*op) = c + 1 + (ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> }</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> nfft_uo2(<span class="keywordtype">int</span> *u, <span class="keywordtype">int</span> *o, <span class="keyword">const</span> R x, <span class="keyword">const</span> <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> {</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keywordtype">int</span> c = LRINT(FLOOR(x * n));</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> *u = (c - m + n) % n;</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> *o = (c + 1 + m + n) % n;</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> }</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="preprocessor">#define MACRO_nfft_D_compute_A \</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="preprocessor"> g_hat[k_plain[ths->d]] = f_hat[ks_plain[ths->d]] * c_phi_inv_k[ths->d]; \</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="preprocessor">#define MACRO_nfft_D_compute_T \</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="preprocessor"> f_hat[ks_plain[ths->d]] = g_hat[k_plain[ths->d]] * c_phi_inv_k[ths->d]; \</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="preprocessor">#define MACRO_nfft_D_init_result_A memset(g_hat,0,ths->n_total*sizeof(C));</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="preprocessor">#define MACRO_nfft_D_init_result_T memset(f_hat,0,ths->N_total*sizeof(C));</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="preprocessor">#define MACRO_with_PRE_PHI_HUT * ths->c_phi_inv[t2][ks[t2]];</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="preprocessor">#define MACRO_without_PRE_PHI_HUT / (PHI_HUT(ks[t2]-(ths->N[t2]/2),t2));</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="preprocessor">#define MACRO_init_k_ks \</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="preprocessor"> for (t = ths->d-1; 0 <= t; t--) \</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="preprocessor"> kp[t] = k[t] = 0; \</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="preprocessor"> ks[t] = ths->N[t]/2; \</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="preprocessor"> t++; \</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="preprocessor">#define MACRO_update_c_phi_inv_k(which_one) \</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="preprocessor"> for (t2 = t; t2 < ths->d; t2++) \</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="preprocessor"> c_phi_inv_k[t2+1] = c_phi_inv_k[t2] MACRO_ ##which_one; \</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="preprocessor"> ks_plain[t2+1] = ks_plain[t2]*ths->N[t2] + ks[t2]; \</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="preprocessor"> k_plain[t2+1] = k_plain[t2]*ths->n[t2] + k[t2]; \</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="preprocessor">#define MACRO_count_k_ks \</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="preprocessor"> for (t = ths->d-1; (t > 0) && (kp[t] == ths->N[t]-1); t--) \</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="preprocessor"> kp[t] = k[t] = 0; \</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="preprocessor"> ks[t]= ths->N[t]/2; \</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="preprocessor"> kp[t]++; k[t]++; ks[t]++; \</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor"> if(kp[t] == ths->N[t]/2) \</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor"> k[t] = ths->n[t] - ths->N[t]/2; \</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="preprocessor"> ks[t] = 0; \</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="preprocessor">} \</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor">#define MACRO_nfft_D(which_one) \</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="preprocessor">static inline void nfft_D_serial_ ## which_one (nfft_plan *ths) \</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="preprocessor"> C *f_hat, *g_hat; \</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="preprocessor"> R c_phi_inv_k[ths->d+1]; \</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor"> int t, t2; \</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="preprocessor"> int k_L; \</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="preprocessor"> int kp[ths->d]; \</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="preprocessor"> int k[ths->d]; \</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor"> int ks[ths->d]; \</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor"> int k_plain[ths->d+1]; \</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor"> int ks_plain[ths->d+1]; \</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="preprocessor"> f_hat = (C*)ths->f_hat; g_hat = (C*)ths->g_hat; \</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="preprocessor"> MACRO_nfft_D_init_result_ ## which_one; \</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor"> c_phi_inv_k[0] = K(1.0); \</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor"> k_plain[0] = 0; \</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="preprocessor"> ks_plain[0] = 0; \</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="preprocessor"> if (ths->nfft_flags & PRE_PHI_HUT) \</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="preprocessor"> MACRO_init_k_ks; \</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="preprocessor"> for (k_L = 0; k_L < ths->N_total; k_L++) \</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="preprocessor"> MACRO_update_c_phi_inv_k(with_PRE_PHI_HUT); \</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="preprocessor"> MACRO_nfft_D_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="preprocessor"> MACRO_count_k_ks; \</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="preprocessor"> } </span><span class="comment">/* for(k_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="preprocessor"> } </span><span class="comment">/* if(PRE_PHI_HUT) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor"> MACRO_init_k_ks; \</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="preprocessor"> for (k_L = 0; k_L < ths->N_total; k_L++) \</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="preprocessor"> MACRO_update_c_phi_inv_k(without_PRE_PHI_HUT); \</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="preprocessor"> MACRO_nfft_D_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="preprocessor"> MACRO_count_k_ks; \</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="preprocessor"> } </span><span class="comment">/* for(k_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="preprocessor"> } </span><span class="comment">/* else(PRE_PHI_HUT) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="preprocessor">} </span><span class="comment">/* nfft_D */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> nfft_D_openmp_A(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> {</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> C *f_hat, *g_hat; </div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="keywordtype">int</span> k_L; </div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> f_hat = (C*)ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>; g_hat = (C*)ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>;</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> memset(g_hat,0,ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> {</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k_L)</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> {</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="keywordtype">int</span> kp[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">//0..N-1</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="keywordtype">int</span> k[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; </div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="keywordtype">int</span> ks[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; </div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> R c_phi_inv_k_val = K(1.0);</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keywordtype">int</span> k_plain_val = 0;</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keywordtype">int</span> ks_plain_val = 0;</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="keywordtype">int</span> k_temp = k_L;</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">for</span> (t = ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>-1; t >= 0; t--)</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> {</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> kp[t] = k_temp % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keywordflow">if</span> (kp[t] >= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2)</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> k[t] = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] + kp[t];</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> k[t] = kp[t];</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> ks[t] = (kp[t] + ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2) % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> k_temp /= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> }</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> {</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> c_phi_inv_k_val *= ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is doubles.">c_phi_inv</a>[t][ks[t]];</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> ks_plain_val = ks_plain_val*ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] + ks[t];</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> k_plain_val = k_plain_val*ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] + k[t];</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> }</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> g_hat[k_plain_val] = f_hat[ks_plain_val] * c_phi_inv_k_val;</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> } <span class="comment">/* for(k_L) */</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> } <span class="comment">/* if(PRE_PHI_HUT) */</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> {</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k_L)</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> {</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keywordtype">int</span> kp[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">//0..N-1</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="keywordtype">int</span> k[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; </div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="keywordtype">int</span> ks[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; </div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> R c_phi_inv_k_val = K(1.0);</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordtype">int</span> k_plain_val = 0;</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="keywordtype">int</span> ks_plain_val = 0;</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordtype">int</span> k_temp = k_L;</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="keywordflow">for</span> (t = ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>-1; t >= 0; t--)</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> {</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> kp[t] = k_temp % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="keywordflow">if</span> (kp[t] >= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2)</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> k[t] = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] + kp[t];</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> k[t] = kp[t];</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> ks[t] = (kp[t] + ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2) % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> k_temp /= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> }</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> {</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> c_phi_inv_k_val /= (PHI_HUT(ks[t]-(ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2),t));</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> ks_plain_val = ks_plain_val*ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] + ks[t];</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> k_plain_val = k_plain_val*ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] + k[t];</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> }</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> g_hat[k_plain_val] = f_hat[ks_plain_val] * c_phi_inv_k_val;</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> } <span class="comment">/* for(k_L) */</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> } <span class="comment">/* else(PRE_PHI_HUT) */</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> }</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="preprocessor">#ifndef _OPENMP</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="preprocessor"></span>MACRO_nfft_D(A)</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_D_A(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> {</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="preprocessor"></span> nfft_D_openmp_A(ths);</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="preprocessor"></span> nfft_D_serial_A(ths);</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> nfft_D_openmp_T(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> {</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> C *f_hat, *g_hat; </div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="keywordtype">int</span> k_L; </div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> f_hat = (C*)ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>; g_hat = (C*)ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>;</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> memset(f_hat,0,ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> </div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> {</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k_L)</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> {</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="keywordtype">int</span> kp[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">//0..N-1</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="keywordtype">int</span> k[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; </div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="keywordtype">int</span> ks[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; </div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> R c_phi_inv_k_val = K(1.0);</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="keywordtype">int</span> k_plain_val = 0;</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="keywordtype">int</span> ks_plain_val = 0;</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="keywordtype">int</span> k_temp = k_L;</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">for</span> (t = ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>-1; t >= 0; t--)</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> {</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> kp[t] = k_temp % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordflow">if</span> (kp[t] >= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2)</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> k[t] = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] + kp[t];</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> k[t] = kp[t];</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> ks[t] = (kp[t] + ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2) % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> k_temp /= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> }</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> </div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> {</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> c_phi_inv_k_val *= ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is doubles.">c_phi_inv</a>[t][ks[t]];</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> ks_plain_val = ks_plain_val*ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] + ks[t];</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> k_plain_val = k_plain_val*ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] + k[t];</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> }</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> f_hat[ks_plain_val] = g_hat[k_plain_val] * c_phi_inv_k_val;</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> } <span class="comment">/* for(k_L) */</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> } <span class="comment">/* if(PRE_PHI_HUT) */</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> {</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k_L)</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k_L = 0; k_L < ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; k_L++)</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> {</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="keywordtype">int</span> kp[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">//0..N-1</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="keywordtype">int</span> k[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; </div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="keywordtype">int</span> ks[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; </div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> R c_phi_inv_k_val = K(1.0);</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="keywordtype">int</span> k_plain_val = 0;</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="keywordtype">int</span> ks_plain_val = 0;</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="keywordtype">int</span> k_temp = k_L;</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> </div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="keywordflow">for</span> (t = ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>-1; t >= 0; t--)</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> {</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> kp[t] = k_temp % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="keywordflow">if</span> (kp[t] >= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2)</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> k[t] = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] + kp[t];</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> k[t] = kp[t];</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> ks[t] = (kp[t] + ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2) % ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> k_temp /= ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t];</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> }</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> {</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> c_phi_inv_k_val /= (PHI_HUT(ks[t]-(ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]/2),t));</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> ks_plain_val = ks_plain_val*ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] + ks[t];</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> k_plain_val = k_plain_val*ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] + k[t];</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> }</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> </div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> f_hat[ks_plain_val] = g_hat[k_plain_val] * c_phi_inv_k_val;</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> } <span class="comment">/* for(k_L) */</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> } <span class="comment">/* else(PRE_PHI_HUT) */</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> }</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="preprocessor">#ifndef _OPENMP</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="preprocessor"></span>MACRO_nfft_D(T)</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_D_T(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> {</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="preprocessor"></span> nfft_D_openmp_T(ths);</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="preprocessor"></span> nfft_D_serial_T(ths);</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> </div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="preprocessor">#define MACRO_nfft_B_init_result_A memset(f,0,ths->M_total*sizeof(C));</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_B_init_result_T memset(g,0,ths->n_total*sizeof(C));</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="preprocessor">#define MACRO_nfft_B_PRE_FULL_PSI_compute_A \</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="preprocessor"> (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]]; \</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="preprocessor">#define MACRO_nfft_B_PRE_FULL_PSI_compute_T \</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="preprocessor"> g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj); \</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <span class="preprocessor">#define MACRO_nfft_B_compute_A \</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="preprocessor"> (*fj) += phi_prod[ths->d] * g[ll_plain[ths->d]]; \</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="preprocessor">#define MACRO_nfft_B_compute_T \</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="preprocessor"> g[ll_plain[ths->d]] += phi_prod[ths->d] * (*fj); \</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <span class="preprocessor">#define MACRO_with_FG_PSI fg_psi[t2][lj[t2]]</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> <span class="preprocessor">#define MACRO_with_PRE_PSI ths->psi[(j*ths->d+t2) * (2*ths->m+2)+lj[t2]]</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="preprocessor">#define MACRO_without_PRE_PSI PHI(ths->x[j*ths->d+t2] \</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="preprocessor"> - ((R)l[t2])/((R)ths->n[t2]), t2)</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="preprocessor">#define MACRO_init_uo_l_lj_t \</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="preprocessor"> for (t = ths->d-1; t >= 0; t--) \</span></div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> <span class="preprocessor"> nfft_uo(ths,j,&u[t],&o[t],t); \</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="preprocessor"> l[t] = u[t]; \</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="preprocessor"> lj[t] = 0; \</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="preprocessor"> } </span><span class="comment">/* for(t) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="preprocessor"> t++; \</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> <span class="preprocessor">#define MACRO_update_phi_prod_ll_plain(which_one) { \</span></div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="preprocessor"> for(t2=t; t2<ths->d; t2++) \</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="preprocessor"> phi_prod[t2+1] = phi_prod[t2]* MACRO_ ## which_one; \</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="preprocessor"> ll_plain[t2+1] = ll_plain[t2]*ths->n[t2] +(l[t2]+ths->n[t2])%ths->n[t2];\</span></div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <span class="preprocessor"> } </span><span class="comment">/* for(t2) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="preprocessor">#define MACRO_count_uo_l_lj_t { \</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> <span class="preprocessor"> for(t = ths->d-1; (t > 0) && (l[t] == o[t]); t--) \</span></div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="preprocessor"> l[t] = u[t]; \</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="preprocessor"> lj[t] = 0; \</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="preprocessor"> } </span><span class="comment">/* for(t) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> <span class="preprocessor"> l[t]++; \</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="preprocessor"> lj[t]++; \</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="preprocessor">#define MACRO_nfft_B(which_one) \</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="preprocessor">static inline void nfft_B_serial_ ## which_one (nfft_plan *ths) \</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="preprocessor"> int lprod; </span><span class="comment">/* 'regular bandwidth' of matrix B */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="preprocessor"> int u[ths->d], o[ths->d]; </span><span class="comment">/* multi band with respect to x_j */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="preprocessor"> int t, t2; </span><span class="comment">/* index dimensions */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="preprocessor"> int j; </span><span class="comment">/* index nodes */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="preprocessor"> int l_L, ix; </span><span class="comment">/* index one row of B */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="preprocessor"> int l[ths->d]; </span><span class="comment">/* multi index u<=l<=o */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="preprocessor"> int lj[ths->d]; </span><span class="comment">/* multi index 0<=lj<u+o+1 */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="preprocessor"> int ll_plain[ths->d+1]; </span><span class="comment">/* postfix plain index in g */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="preprocessor"> R phi_prod[ths->d+1]; </span><span class="comment">/* postfix product of PHI */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="preprocessor"> C *f, *g; </span><span class="comment">/* local copy */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <span class="preprocessor"> C *fj; </span><span class="comment">/* local copy */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <span class="preprocessor"> R y[ths->d]; \</span></div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="preprocessor"> R fg_psi[ths->d][2*ths->m+2]; \</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> <span class="preprocessor"> R fg_exp_l[ths->d][2*ths->m+2]; \</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="preprocessor"> int l_fg,lj_fg; \</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="preprocessor"> R tmpEXP1, tmpEXP2, tmpEXP2sq, tmp1, tmp2, tmp3; \</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="preprocessor"> R ip_w; \</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="preprocessor"> int ip_u; \</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="preprocessor"> int ip_s = ths->K/(ths->m+2); \</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> <span class="preprocessor"> f = (C*)ths->f; g = (C*)ths->g; \</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="preprocessor"> MACRO_nfft_B_init_result_ ## which_one; \</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> <span class="preprocessor"> if (ths->nfft_flags & PRE_FULL_PSI) \</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="preprocessor"> for (ix = 0, j = 0, fj = f; j < ths->M_total; j++, fj++) \</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="preprocessor"> for (l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++) \</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="preprocessor"> MACRO_nfft_B_PRE_FULL_PSI_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="preprocessor"> return; \</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="preprocessor"> phi_prod[0] = K(1.0); \</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> <span class="preprocessor"> ll_plain[0] = 0; \</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="preprocessor"> for (t = 0, lprod = 1; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> <span class="preprocessor"> lprod *= (2*ths->m+2); \</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="preprocessor"> if (ths->nfft_flags & PRE_PSI) \</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="preprocessor"> for (j = 0, fj = f; j < ths->M_total; j++, fj++) \</span></div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> <span class="preprocessor"> MACRO_init_uo_l_lj_t; \</span></div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> <span class="preprocessor"> for (l_L = 0; l_L < lprod; l_L++) \</span></div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> <span class="preprocessor"> MACRO_update_phi_prod_ll_plain(with_PRE_PSI); \</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="preprocessor"> MACRO_nfft_B_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> <span class="preprocessor"> MACRO_count_uo_l_lj_t; \</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> <span class="preprocessor"> } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="preprocessor"> } </span><span class="comment">/* for(j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> <span class="preprocessor"> return; \</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="preprocessor"> } </span><span class="comment">/* if(PRE_PSI) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="preprocessor"> if (ths->nfft_flags & PRE_FG_PSI) \</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> <span class="preprocessor"> for(t2 = 0; t2 < ths->d; t2++) \</span></div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="preprocessor"> tmpEXP2 = EXP(K(-1.0)/ths->b[t2]); \</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> <span class="preprocessor"> tmpEXP2sq = tmpEXP2*tmpEXP2; \</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> <span class="preprocessor"> tmp2 = K(1.0); \</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> <span class="preprocessor"> tmp3 = K(1.0); \</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="preprocessor"> fg_exp_l[t2][0] = K(1.0); \</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> <span class="preprocessor"> for(lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++) \</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="preprocessor"> tmp3 = tmp2*tmpEXP2; \</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="preprocessor"> tmp2 *= tmpEXP2sq; \</span></div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="preprocessor"> fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3; \</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> <span class="preprocessor"> for (j = 0, fj = f; j < ths->M_total; j++, fj++) \</span></div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="preprocessor"> MACRO_init_uo_l_lj_t; \</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="preprocessor"> for (t2 = 0; t2 < ths->d; t2++) \</span></div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="preprocessor"> fg_psi[t2][0] = ths->psi[2*(j*ths->d+t2)]; \</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> <span class="preprocessor"> tmpEXP1 = ths->psi[2*(j*ths->d+t2)+1]; \</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="preprocessor"> tmp1 = K(1.0); \</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> <span class="preprocessor"> for (l_fg = u[t2]+1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++) \</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="preprocessor"> tmp1 *= tmpEXP1; \</span></div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> <span class="preprocessor"> fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg]; \</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> <span class="preprocessor"> for (l_L= 0; l_L < lprod; l_L++) \</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> <span class="preprocessor"> MACRO_update_phi_prod_ll_plain(with_FG_PSI); \</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> <span class="preprocessor"> MACRO_nfft_B_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> <span class="preprocessor"> MACRO_count_uo_l_lj_t; \</span></div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <span class="preprocessor"> } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <span class="preprocessor"> } </span><span class="comment">/* for(j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="preprocessor"> return; \</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> <span class="preprocessor"> } </span><span class="comment">/* if(PRE_FG_PSI) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> <span class="preprocessor"> if (ths->nfft_flags & FG_PSI) \</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <span class="preprocessor"> for (t2 = 0; t2 < ths->d; t2++) \</span></div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> <span class="preprocessor"> tmpEXP2 = EXP(K(-1.0)/ths->b[t2]); \</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="preprocessor"> tmpEXP2sq = tmpEXP2*tmpEXP2; \</span></div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="preprocessor"> tmp2 = K(1.0); \</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="preprocessor"> tmp3 = K(1.0); \</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <span class="preprocessor"> fg_exp_l[t2][0] = K(1.0); \</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="preprocessor"> for (lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++) \</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> <span class="preprocessor"> tmp3 = tmp2*tmpEXP2; \</span></div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> <span class="preprocessor"> tmp2 *= tmpEXP2sq; \</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="preprocessor"> fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3; \</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="preprocessor"> for (j = 0, fj = f; j < ths->M_total; j++, fj++) \</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="preprocessor"> MACRO_init_uo_l_lj_t; \</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <span class="preprocessor"> for (t2 = 0; t2 < ths->d; t2++) \</span></div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> <span class="preprocessor"> fg_psi[t2][0] = (PHI((ths->x[j*ths->d+t2]-((R)u[t2])/ths->n[t2]),t2));\</span></div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="preprocessor"> tmpEXP1 = EXP(K(2.0)*(ths->n[t2]*ths->x[j*ths->d+t2] - u[t2]) \</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="preprocessor"> /ths->b[t2]); \</span></div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <span class="preprocessor"> tmp1 = K(1.0); \</span></div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="preprocessor"> for (l_fg = u[t2] + 1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++) \</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="preprocessor"> tmp1 *= tmpEXP1; \</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> <span class="preprocessor"> fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg]; \</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="preprocessor"> for (l_L = 0; l_L < lprod; l_L++) \</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="preprocessor"> MACRO_update_phi_prod_ll_plain(with_FG_PSI); \</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="preprocessor"> MACRO_nfft_B_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="preprocessor"> MACRO_count_uo_l_lj_t; \</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="preprocessor"> } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="preprocessor"> } </span><span class="comment">/* for(j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="preprocessor"> return; \</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> <span class="preprocessor"> } </span><span class="comment">/* if(FG_PSI) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="preprocessor"> if (ths->nfft_flags & PRE_LIN_PSI) \</span></div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> <span class="preprocessor"> for (j = 0, fj=f; j<ths->M_total; j++, fj++) \</span></div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <span class="preprocessor"> MACRO_init_uo_l_lj_t; \</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="preprocessor"> for (t2 = 0; t2 < ths->d; t2++) \</span></div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="preprocessor"> y[t2] = ((ths->n[t2]*ths->x[j*ths->d+t2]-(R)u[t2]) \</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> <span class="preprocessor"> * ((R)ths->K))/(ths->m+2); \</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="preprocessor"> ip_u = LRINT(FLOOR(y[t2])); \</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> <span class="preprocessor"> ip_w = y[t2]-ip_u; \</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <span class="preprocessor"> for (l_fg = u[t2], lj_fg = 0; l_fg <= o[t2]; l_fg++, lj_fg++) \</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="preprocessor"> fg_psi[t2][lj_fg] = ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s)] \</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <span class="preprocessor"> * (1-ip_w) + ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s+1)] \</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> <span class="preprocessor"> * (ip_w); \</span></div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> <span class="preprocessor"> for (l_L = 0; l_L < lprod; l_L++) \</span></div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> <span class="preprocessor"> MACRO_update_phi_prod_ll_plain(with_FG_PSI); \</span></div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> <span class="preprocessor"> MACRO_nfft_B_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> <span class="preprocessor"> MACRO_count_uo_l_lj_t; \</span></div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="preprocessor"> } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="preprocessor"> } </span><span class="comment">/* for(j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="preprocessor"> return; \</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="preprocessor"> } </span><span class="comment">/* if(PRE_LIN_PSI) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> <span class="preprocessor"> </span><span class="comment">/* no precomputed psi at all */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <span class="preprocessor"> for (j = 0, fj = f; j < ths->M_total; j++, fj++) \</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="preprocessor"> MACRO_init_uo_l_lj_t; \</span></div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> <span class="preprocessor"> for (l_L = 0; l_L < lprod; l_L++) \</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> <span class="preprocessor"> MACRO_update_phi_prod_ll_plain(without_PRE_PSI); \</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> <span class="preprocessor"> MACRO_nfft_B_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> <span class="preprocessor"> MACRO_count_uo_l_lj_t; \</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> <span class="preprocessor"> } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="preprocessor"> } </span><span class="comment">/* for(j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> <span class="preprocessor">} </span><span class="comment">/* nfft_B */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> <span class="preprocessor"></span><span class="preprocessor">#ifndef _OPENMP</span></div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> <span class="preprocessor"></span>MACRO_nfft_B(A)</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> nfft_B_openmp_A (<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> {</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> <span class="keywordtype">int</span> lprod; <span class="comment">/* 'regular bandwidth' of matrix B */</span></div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> </div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> memset(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,0,ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> </div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> <span class="keywordflow">for</span> (k = 0, lprod = 1; k < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; k++)</div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> lprod *= (2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2);</div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> </div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> {</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> {</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = K(0.0);</div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> <span class="keywordflow">for</span> (l = 0; l < lprod; l++)</div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[j*lprod+l] * ths-><a class="code" href="structnfft__p [...]
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> }</div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> }</div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> </div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> {</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> {</div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> <span class="keywordtype">int</span> l_L; <span class="comment">/* index one row of B */</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> </div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> ll_plain[0] = 0;</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> </div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> </div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="keywordflow">for</span> (l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> {</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> MACRO_update_phi_prod_ll_plain(with_PRE_PSI);</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled v [...]
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> </div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> </div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> {</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> R fg_exp_l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> </div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> <span class="keywordflow">for</span>(t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> {</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> <span class="keywordtype">int</span> lj_fg;</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> R tmpEXP2 = EXP(K(-1.0)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[t2]);</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> R tmpEXP2sq = tmpEXP2*tmpEXP2;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> R tmp2 = K(1.0);</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> R tmp3 = K(1.0);</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> fg_exp_l[t2][0] = K(1.0);</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> <span class="keywordflow">for</span>(lj_fg = 1; lj_fg <= (2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2); lj_fg++)</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> {</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> tmp3 = tmp2*tmpEXP2;</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> tmp2 *= tmpEXP2sq;</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> }</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> }</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> </div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k,t,t2)</span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> {</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> R fg_psi[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> R tmpEXP1, tmp1;</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="keywordtype">int</span> l_fg,lj_fg;</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="keywordtype">int</span> l_L;</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> </div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> ll_plain[0] = 0;</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> </div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> </div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="keywordflow">for</span> (t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> {</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> fg_psi[t2][0] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t2)];</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> tmpEXP1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t2)+1];</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> tmp1 = K(1.0);</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> <span class="keywordflow">for</span> (l_fg = u[t2]+1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> {</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> tmp1 *= tmpEXP1;</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> }</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> }</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> </div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> <span class="keywordflow">for</span> (l_L= 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> {</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> MACRO_update_phi_prod_ll_plain(with_FG_PSI);</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> </div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled v [...]
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> </div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> } <span class="comment">/* if(PRE_FG_PSI) */</span></div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> </div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FG_PSI)</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> {</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> R fg_exp_l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> </div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> </div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="keywordflow">for</span> (t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> {</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="keywordtype">int</span> lj_fg;</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> R tmpEXP2 = EXP(K(-1.0)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[t2]);</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> R tmpEXP2sq = tmpEXP2*tmpEXP2;</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> R tmp2 = K(1.0);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> R tmp3 = K(1.0);</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> fg_exp_l[t2][0] = K(1.0);</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <span class="keywordflow">for</span> (lj_fg = 1; lj_fg <= (2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2); lj_fg++)</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> {</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> tmp3 = tmp2*tmpEXP2;</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> tmp2 *= tmpEXP2sq;</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> }</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> }</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> </div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k,t,t2)</span></div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> {</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> R fg_psi[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> R tmpEXP1, tmp1;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> <span class="keywordtype">int</span> l_fg,lj_fg;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="keywordtype">int</span> l_L;</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> </div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> ll_plain[0] = 0;</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> </div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> </div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> <span class="keywordflow">for</span> (t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> {</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> fg_psi[t2][0] = (PHI((ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t2]-((R)u[t2])/ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW [...]
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> </div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> tmpEXP1 = EXP(K(2.0)*(ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t2]*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d48 [...]
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> /ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[t2]);</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> tmp1 = K(1.0);</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="keywordflow">for</span> (l_fg = u[t2] + 1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> {</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> tmp1 *= tmpEXP1;</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> }</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> }</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> </div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> <span class="keywordflow">for</span> (l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> {</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> MACRO_update_phi_prod_ll_plain(with_FG_PSI);</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> </div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled v [...]
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> </div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> } <span class="comment">/* if(FG_PSI) */</span></div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> </div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> {</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> </div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> {</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> <span class="keywordtype">int</span> l_L; <span class="comment">/* index one row of B */</span></div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> R y[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> R fg_psi[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="keywordtype">int</span> l_fg,lj_fg;</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> R ip_w;</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="keywordtype">int</span> ip_u;</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="keywordtype">int</span> ip_s = ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>/(ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B [...]
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> </div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> ll_plain[0] = 0;</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> </div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> </div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> <span class="keywordflow">for</span> (t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> {</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> y[t2] = ((ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t2]*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96a [...]
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> * ((R)ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>))/(ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2 [...]
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> ip_u = LRINT(FLOOR(y[t2]));</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> ip_w = y[t2]-ip_u;</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="keywordflow">for</span> (l_fg = u[t2], lj_fg = 0; l_fg <= o[t2]; l_fg++, lj_fg++)</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> {</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> fg_psi[t2][lj_fg] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>+1)*t2 + ABS(ip_u-lj_fg*ip_s)]</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> * (1-ip_w) + ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>+1)*t2 + ABS(ip_u-lj_fg*ip_s+1)]</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> * (ip_w);</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> }</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> }</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> </div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="keywordflow">for</span> (l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> {</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> MACRO_update_phi_prod_ll_plain(with_FG_PSI);</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> </div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled v [...]
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> </div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> } <span class="comment">/* if(PRE_LIN_PSI) */</span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> </div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="comment">/* no precomputed psi at all */</span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> </div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> {</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> <span class="keywordtype">int</span> l_L; <span class="comment">/* index one row of B */</span></div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when [...]
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> </div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> ll_plain[0] = 0;</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> </div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> </div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> <span class="keywordflow">for</span> (l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> {</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> MACRO_update_phi_prod_ll_plain(without_PRE_PSI);</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> </div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vec [...]
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> </div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> }</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_B_A(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> {</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="preprocessor"></span> nfft_B_openmp_A(ths);</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="preprocessor"></span> nfft_B_serial_A(ths);</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> </div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> index_x_binary_search(<span class="keyword">const</span> <span class="keywordtype">int</span> *ar_x, <span class="keyword">const</span> <span class="keywordtype">int</span> len, <span class="keyword">const</span> <span class="keywordtype">int</span> key)</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> {</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> <span class="keywordtype">int</span> left = 0, right = len - 1;</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> </div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> <span class="keywordflow">if</span> (len == 1)</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> </div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> <span class="keywordflow">while</span> (left < right - 1)</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> {</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> <span class="keywordtype">int</span> i = (left + right) / 2;</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> <span class="keywordflow">if</span> (ar_x[2*i] >= key)</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> right = i;</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ar_x[2*i] < key)</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> left = i;</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> }</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> </div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> <span class="keywordflow">if</span> (ar_x[2*left] < key && left != len-1)</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> <span class="keywordflow">return</span> left+1;</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> </div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> <span class="keywordflow">return</span> left;</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> }</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_B_omp_blockwise_init(<span class="keywordtype">int</span> *my_u0, <span class="keywordtype">int</span> *my_o0, <span class="keywordtype">int</span> *min_u_a, <span class="keywordtype">int</span> *max_u_a, <span class="keywordtype">int</span> *min_u_b, <span class="keywordtype">int</span> *max_u_b, <span class="keyword">const< [...]
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> {</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n0 = n[0];</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <span class="keywordtype">int</span> nthreads = omp_get_num_threads();</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="keywordtype">int</span> nthreads_used = MIN(nthreads, n0);</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="keywordtype">int</span> size_per_thread = n0 / nthreads_used;</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="keywordtype">int</span> size_left = n0 - size_per_thread * nthreads_used;</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> <span class="keywordtype">int</span> size_g[nthreads_used];</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> <span class="keywordtype">int</span> offset_g[nthreads_used];</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> <span class="keywordtype">int</span> my_id = omp_get_thread_num();</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> <span class="keywordtype">int</span> n_prod_rest = 1;</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> </div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="keywordflow">for</span> (k = 1; k < d; k++)</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> n_prod_rest *= n[k];</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> </div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> *min_u_a = -1;</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> *max_u_a = -1;</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> *min_u_b = -1;</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> *max_u_b = -1;</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> *my_u0 = -1;</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> *my_o0 = -1;</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> </div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> <span class="keywordflow">if</span> (my_id < nthreads_used)</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> {</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> <span class="keyword">const</span> <span class="keywordtype">int</span> m22 = 2 * m + 2;</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> </div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> offset_g[0] = 0;</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="keywordflow">for</span> (k = 0; k < nthreads_used; k++)</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> {</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> <span class="keywordflow">if</span> (k > 0)</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> offset_g[k] = offset_g[k-1] + size_g[k-1];</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> size_g[k] = size_per_thread;</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="keywordflow">if</span> (size_left > 0)</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> {</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> size_g[k]++;</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> size_left--;</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> }</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> }</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> </div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> *my_u0 = offset_g[my_id];</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> *my_o0 = offset_g[my_id] + size_g[my_id] - 1;</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> </div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> <span class="keywordflow">if</span> (nthreads_used > 1)</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> {</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> *max_u_a = n_prod_rest*(offset_g[my_id] + size_g[my_id]) - 1;</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> *min_u_a = n_prod_rest*(offset_g[my_id] - m22 + 1);</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> }</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> {</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> *min_u_a = 0;</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> *max_u_a = n_prod_rest * n0 - 1;</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> }</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> </div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> <span class="keywordflow">if</span> (*min_u_a < 0)</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> {</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> *min_u_b = n_prod_rest * (offset_g[my_id] - m22 + 1 + n0);</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> *max_u_b = n_prod_rest * n0 - 1;</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> *min_u_a = 0;</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> }</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> </div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> <span class="keywordflow">if</span> (*min_u_b != -1 && *min_u_b <= *max_u_a)</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> {</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> *max_u_a = *max_u_b;</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> *min_u_b = -1;</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> *max_u_b = -1;</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> }</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> <span class="preprocessor"></span> assert(*min_u_a <= *max_u_a);</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> assert(*min_u_b <= *max_u_b);</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> assert(*min_u_b == -1 || *max_u_a < *min_u_b);</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> }</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_B_compute_full_psi(</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> C *g, <span class="keyword">const</span> <span class="keywordtype">int</span> *psi_index_g, <span class="keyword">const</span> R *psi, <span class="keyword">const</span> C *f,</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> <span class="keyword">const</span> <span class="keywordtype">int</span> M, <span class="keyword">const</span> <span class="keywordtype">int</span> d, <span class="keyword">const</span> <span class="keywordtype">int</span> *n, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keyword">const</span> <span class="keywordtype">int</span> nfft_flags, <span class="keyword">con [...]
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> {</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> <span class="keywordtype">int</span> lprod, lprod_m1;</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> {</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> <span class="keywordflow">for</span>(t = 0, lprod = 1; t < d; t++)</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> lprod *= 2 * m + 2;</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> }</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> lprod_m1 = lprod / (2 * m + 2);</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> </div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> <span class="preprocessor"></span> <span class="keywordflow">if</span> (nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> {</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> <span class="preprocessor"> #pragma omp parallel private(k)</span></div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> <span class="preprocessor"></span> {</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> <span class="keywordtype">int</span> my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b;</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> <span class="keyword">const</span> <span class="keywordtype">int</span> *ar_x = index_x;</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> <span class="keywordtype">int</span> n_prod_rest = 1;</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> </div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> <span class="keywordflow">for</span> (k = 1; k < d; k++)</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> n_prod_rest *= n[k];</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> </div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, &min_u_b, &max_u_b, d, n, m);</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> </div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span> <span class="keywordflow">if</span> (min_u_a != -1)</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> {</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> k = index_x_binary_search(ar_x, M, min_u_a);</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> <span class="preprocessor"></span> assert(ar_x[2*k] >= min_u_a || k == M-1);</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> <span class="keywordflow">if</span> (k > 0)</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> assert(ar_x[2*k-2] < min_u_a);</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> <span class="preprocessor"></span> <span class="keywordflow">while</span> (k < M)</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> {</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> <span class="keywordtype">int</span> l0, lrest;</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> <span class="keywordtype">int</span> u_prod = ar_x[2*k];</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> <span class="keywordtype">int</span> j = ar_x[2*k+1];</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> </div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> <span class="keywordflow">if</span> (u_prod < min_u_a || u_prod > max_u_a)</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> </div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> <span class="keywordflow">for</span> (l0 = 0; l0 < 2 * m + 2; l0++)</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> {</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> <span class="keyword">const</span> <span class="keywordtype">int</span> start_index = psi_index_g[j * lprod + l0 * lprod_m1];</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> </div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> <span class="keywordflow">if</span> (start_index < my_u0 * n_prod_rest || start_index > (my_o0+1) * n_prod_rest - 1)</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> </div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> <span class="keywordflow">for</span> (lrest = 0; lrest < lprod_m1; lrest++)</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> {</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> <span class="keyword">const</span> <span class="keywordtype">int</span> l = l0 * lprod_m1 + lrest;</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> g[psi_index_g[j * lprod + l]] += psi[j * lprod + l] * f[j];</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> }</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> }</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> </div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> k++;</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> }</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> }</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> </div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> <span class="keywordflow">if</span> (min_u_b != -1)</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> {</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> k = index_x_binary_search(ar_x, M, min_u_b);</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> <span class="preprocessor"></span> assert(ar_x[2*k] >= min_u_b || k == M-1);</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> <span class="keywordflow">if</span> (k > 0)</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> assert(ar_x[2*k-2] < min_u_b);</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> <span class="preprocessor"></span> <span class="keywordflow">while</span> (k < M)</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> {</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> <span class="keywordtype">int</span> l0, lrest;</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> <span class="keywordtype">int</span> u_prod = ar_x[2*k];</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> <span class="keywordtype">int</span> j = ar_x[2*k+1];</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> </div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> <span class="keywordflow">if</span> (u_prod < min_u_b || u_prod > max_u_b)</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> </div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> <span class="keywordflow">for</span> (l0 = 0; l0 < 2 * m + 2; l0++)</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> {</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> <span class="keyword">const</span> <span class="keywordtype">int</span> start_index = psi_index_g[j * lprod + l0 * lprod_m1];</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> </div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> <span class="keywordflow">if</span> (start_index < my_u0 * n_prod_rest || start_index > (my_o0+1) * n_prod_rest - 1)</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> <span class="keywordflow">for</span> (lrest = 0; lrest < lprod_m1; lrest++)</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> {</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> <span class="keyword">const</span> <span class="keywordtype">int</span> l = l0 * lprod_m1 + lrest;</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> g[psi_index_g[j * lprod + l]] += psi[j * lprod + l] * f[j];</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> }</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> }</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> </div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> k++;</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> }</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> }</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> } <span class="comment">/* omp parallel */</span></div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> } <span class="comment">/* if(NFFT_OMP_BLOCKWISE_ADJOINT) */</span></div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> {</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> <span class="keywordtype">int</span> j = (nfft_flags & NFFT_SORT_NODES) ? index_x[2*k+1] : k;</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> </div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> <span class="keywordflow">for</span> (l = 0; l < lprod; l++)</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> {</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> <span class="preprocessor"></span> C val = psi[j * lprod + l] * f[j];</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> C *gref = g + psi_index_g[j * lprod + l];</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> R *gref_real = (R*) gref;</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> </div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> <span class="preprocessor"></span> gref_real[0] += creal(val);</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span> </div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span> <span class="preprocessor"></span> gref_real[1] += cimag(val);</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> <span class="preprocessor"></span> g[psi_index_g[j * lprod + l]] += psi[j * lprod + l] * f[j];</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span> }</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> }</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> </div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span> <span class="preprocessor">#ifndef _OPENMP</span></div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> <span class="preprocessor"></span>MACRO_nfft_B(T)</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> nfft_B_openmp_T(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> {</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> <span class="keywordtype">int</span> lprod; <span class="comment">/* 'regular bandwidth' of matrix B */</span></div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> </div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> memset(ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>,0,ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> </div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> <span class="keywordflow">for</span> (k = 0, lprod = 1; k < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; k++)</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> lprod *= (2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2);</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> </div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span> {</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> nfft_adjoint_B_compute_full_psi(ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>, ths-><a class="code" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_g</a>, ths-><a class="code" href="structnfft__plan.html [...]
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span> ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>, ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>, ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off paramete [...]
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> }</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> </div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> {</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span> {</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span> <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span> <span class="keywordtype">int</span> l_L; <span class="comment">/* index one row of B */</span></div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> </div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span> phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span> ll_plain[0] = 0;</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> </div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> </div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> <span class="keywordflow">for</span> (l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> {</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> C *lhs;</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> R *lhs_real;</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> C val;</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> </div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> MACRO_update_phi_prod_ll_plain(with_PRE_PSI);</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> </div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> lhs = ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a> + ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> lhs_real = (R*)lhs;</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> val = phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> </div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> <span class="preprocessor"></span> lhs_real[0] += creal(val);</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> </div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> <span class="preprocessor"></span> lhs_real[1] += cimag(val);</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> </div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span> } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> </div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> {</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span> <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> R fg_exp_l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> <span class="keywordflow">for</span>(t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> {</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> <span class="keywordtype">int</span> lj_fg;</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> R tmpEXP2 = EXP(K(-1.0)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[t2]);</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> R tmpEXP2sq = tmpEXP2*tmpEXP2;</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span> R tmp2 = K(1.0);</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> R tmp3 = K(1.0);</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span> fg_exp_l[t2][0] = K(1.0);</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> <span class="keywordflow">for</span>(lj_fg = 1; lj_fg <= (2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2); lj_fg++)</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> {</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> tmp3 = tmp2*tmpEXP2;</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> tmp2 *= tmpEXP2sq;</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> }</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> }</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> </div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k,t,t2)</span></div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> {</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span> R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span> R fg_psi[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span> R tmpEXP1, tmp1;</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> <span class="keywordtype">int</span> l_fg,lj_fg;</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span> <span class="keywordtype">int</span> l_L;</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> </div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> ll_plain[0] = 0;</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span> </div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span> MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> </div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> <span class="keywordflow">for</span> (t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span> {</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> fg_psi[t2][0] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t2)];</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> tmpEXP1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t2)+1];</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> tmp1 = K(1.0);</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> <span class="keywordflow">for</span> (l_fg = u[t2]+1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)</div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> {</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> tmp1 *= tmpEXP1;</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> }</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> }</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> </div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span> <span class="keywordflow">for</span> (l_L= 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> {</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> C *lhs;</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> R *lhs_real;</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> C val;</div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> </div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> MACRO_update_phi_prod_ll_plain(with_FG_PSI);</div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span> </div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> lhs = ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a> + ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> lhs_real = (R*)lhs;</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> val = phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> </div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> <span class="preprocessor"></span> lhs_real[0] += creal(val);</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span> </div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> <span class="preprocessor"></span> lhs_real[1] += cimag(val);</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> </div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span> MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> } <span class="comment">/* if(PRE_FG_PSI) */</span></div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span> </div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FG_PSI)</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span> {</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span> <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span> R fg_exp_l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> </div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> </div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span> <span class="keywordflow">for</span> (t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> {</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> <span class="keywordtype">int</span> lj_fg;</div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span> R tmpEXP2 = EXP(K(-1.0)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[t2]);</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> R tmpEXP2sq = tmpEXP2*tmpEXP2;</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> R tmp2 = K(1.0);</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span> R tmp3 = K(1.0);</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span> fg_exp_l[t2][0] = K(1.0);</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span> <span class="keywordflow">for</span> (lj_fg = 1; lj_fg <= (2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2); lj_fg++)</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> {</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> tmp3 = tmp2*tmpEXP2;</div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> tmp2 *= tmpEXP2sq;</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> }</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> }</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> </div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k,t,t2)</span></div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> {</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span> <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span> R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span> <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span> <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span> <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> R fg_psi[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span> R tmpEXP1, tmp1;</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> <span class="keywordtype">int</span> l_fg,lj_fg;</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span> <span class="keywordtype">int</span> l_L;</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span> </div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span> phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span> ll_plain[0] = 0;</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span> </div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span> MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> </div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> <span class="keywordflow">for</span> (t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span> {</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span> fg_psi[t2][0] = (PHI((ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t2]-((R)u[t2])/ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW [...]
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> </div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span> tmpEXP1 = EXP(K(2.0)*(ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t2]*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d48 [...]
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span> /ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[t2]);</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span> tmp1 = K(1.0);</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span> <span class="keywordflow">for</span> (l_fg = u[t2] + 1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)</div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span> {</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span> tmp1 *= tmpEXP1;</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span> fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> }</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> }</div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> </div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span> <span class="keywordflow">for</span> (l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span> {</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span> C *lhs;</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> R *lhs_real;</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span> C val;</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span> </div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span> MACRO_update_phi_prod_ll_plain(with_FG_PSI);</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span> </div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span> lhs = ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a> + ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> lhs_real = (R*)lhs;</div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span> val = phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span> </div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> <span class="preprocessor"></span> lhs_real[0] += creal(val);</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span> </div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span> <span class="preprocessor"></span> lhs_real[1] += cimag(val);</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> </div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> } <span class="comment">/* if(FG_PSI) */</span></div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span> </div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span> {</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span> </div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> {</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span> <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> <span class="keywordtype">int</span> l_L; <span class="comment">/* index one row of B */</span></div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span> <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> R y[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> R fg_psi[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>][2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2];</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> <span class="keywordtype">int</span> l_fg,lj_fg;</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> R ip_w;</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> <span class="keywordtype">int</span> ip_u;</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span> <span class="keywordtype">int</span> ip_s = ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>/(ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B [...]
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span> </div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span> phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> ll_plain[0] = 0;</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span> </div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span> MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> </div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span> <span class="keywordflow">for</span> (t2 = 0; t2 < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t2++)</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span> {</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> y[t2] = ((ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t2]*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96a [...]
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> * ((R)ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>))/(ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2 [...]
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span> ip_u = LRINT(FLOOR(y[t2]));</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> ip_w = y[t2]-ip_u;</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> <span class="keywordflow">for</span> (l_fg = u[t2], lj_fg = 0; l_fg <= o[t2]; l_fg++, lj_fg++)</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span> {</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> fg_psi[t2][lj_fg] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>+1)*t2 + ABS(ip_u-lj_fg*ip_s)]</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span> * (1-ip_w) + ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>+1)*t2 + ABS(ip_u-lj_fg*ip_s+1)]</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> * (ip_w);</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> }</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> }</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> </div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span> <span class="keywordflow">for</span> (l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> {</div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> C *lhs;</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> R *lhs_real;</div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> C val;</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> </div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> MACRO_update_phi_prod_ll_plain(with_FG_PSI);</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span> </div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span> lhs = ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a> + ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> lhs_real = (R*)lhs;</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span> val = phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span> </div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span> <span class="preprocessor"></span> lhs_real[0] += creal(val);</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> </div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> <span class="preprocessor"></span> lhs_real[1] += cimag(val);</div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> </div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> } <span class="comment">/* if(PRE_LIN_PSI) */</span></div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span> </div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span> <span class="comment">/* no precomputed psi at all */</span></div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span> </div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; k++)</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> {</div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span> <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi band with respect to x_j */</span></div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span> <span class="keywordtype">int</span> t, t2; <span class="comment">/* index dimensions */</span></div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> <span class="keywordtype">int</span> l_L; <span class="comment">/* index one row of B */</span></div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index u<=l<=o */</span></div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; <span class="comment">/* multi index 0<=lj<u+o+1 */</span></div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span> <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix plain index in g */</span></div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span> R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; <span class="comment">/* postfix product of PHI */</span></div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when [...]
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span> </div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span> phi_prod[0] = K(1.0);</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span> ll_plain[0] = 0;</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> </div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> </div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> <span class="keywordflow">for</span> (l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> {</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span> C *lhs;</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span> R *lhs_real;</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span> C val;</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> </div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span> MACRO_update_phi_prod_ll_plain(without_PRE_PSI);</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> </div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span> lhs = ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a> + ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> lhs_real = (R*)lhs;</div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> val = phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>] * ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span> </div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span> <span class="preprocessor"></span> lhs_real[0] += creal(val);</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> </div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> <span class="preprocessor"></span> lhs_real[1] += cimag(val);</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> </div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span> MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> }</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_B_T(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span> {</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span> <span class="preprocessor"></span> nfft_B_openmp_T(ths);</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> <span class="preprocessor"></span> nfft_B_serial_T(ths);</div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span> </div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span> <span class="comment">/* ## specialized version for d=1 ########################################### */</span></div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span> </div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_1d_init_fg_exp_l(R *fg_exp_l, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keyword">const</span> R b)</div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span> {</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span> <span class="keyword">const</span> <span class="keywordtype">int</span> tmp2 = 2*m+2;</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span> R fg_exp_b0, fg_exp_b1, fg_exp_b2, fg_exp_b0_sq;</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span> </div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> fg_exp_b0 = EXP(K(-1.0)/b);</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span> fg_exp_b0_sq = fg_exp_b0*fg_exp_b0;</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> fg_exp_b1 = fg_exp_b2 =fg_exp_l[0] = K(1.0);</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> </div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span> <span class="keywordflow">for</span> (l = 1; l < tmp2; l++)</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> {</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span> fg_exp_b2 = fg_exp_b1*fg_exp_b0;</div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span> fg_exp_b1 *= fg_exp_b0_sq;</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span> fg_exp_l[l] = fg_exp_l[l-1]*fg_exp_b2;</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span> }</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span> }</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span> </div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span> </div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_trafo_1d_compute(C *fj, <span class="keyword">const</span> C *g,<span class="keyword">const</span> R *psij_const,</div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span> <span class="keyword">const</span> R *xj, <span class="keyword">const</span> <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span> {</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span> <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span> <span class="keyword">const</span> C *gj;</div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span> <span class="keyword">const</span> R *psij;</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span> psij = psij_const;</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span> </div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span> nfft_uo2(&u, &o, *xj, n, m);</div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span> </div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span> <span class="keywordflow">if</span> (u < o)</div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span> {</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span> <span class="keywordflow">for</span> (l = 1, gj = g + u, (*fj) = (*psij++) * (*gj++); l <= 2*m+1; l++)</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span> (*fj) += (*psij++) * (*gj++);</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span> }</div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> {</div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> <span class="keywordflow">for</span> (l = 1, gj = g + u, (*fj) = (*psij++) * (*gj++); l < 2*m+1 - o; l++)</div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span> (*fj) += (*psij++) * (*gj++);</div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span> <span class="keywordflow">for</span> (l = 0, gj = g; l <= o; l++)</div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span> (*fj) += (*psij++) * (*gj++);</div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span> }</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span> }</div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span> </div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span> <span class="preprocessor">#ifndef _OPENMP</span></div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_1d_compute_serial(<span class="keyword">const</span> C *fj, C *g,<span class="keyword">const</span> R *psij_const,</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span> <span class="keyword">const</span> R *xj, <span class="keyword">const</span> <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span> {</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span> <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span> C *gj;</div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span> <span class="keyword">const</span> R *psij;</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span> psij=psij_const;</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span> </div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span> nfft_uo2(&u,&o,*xj, n, m);</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span> </div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span> <span class="keywordflow">if</span>(u<o)</div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span> {</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span> <span class="keywordflow">for</span> (l = 0, gj = g+u; l <= 2*m+1; l++)</div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span> (*gj++) += (*psij++) * (*fj);</div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span> }</div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span> {</div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span> <span class="keywordflow">for</span> (l = 0, gj = g+u; l < 2*m+1-o; l++)</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span> (*gj++) += (*psij++) * (*fj);</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span> <span class="keywordflow">for</span> (l = 0, gj = g; l <= o; l++)</div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span> (*gj++) += (*psij++) * (*fj);</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span> }</div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span> }</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span> <span class="preprocessor"></span><span class="comment">/* adjoint NFFT one-dimensional case with OpenMP atomic operations */</span></div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_1d_compute_omp_atomic(<span class="keyword">const</span> C f, C *g,<span class="keyword">const</span> R *psij_const,</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span> <span class="keyword">const</span> R *xj, <span class="keyword">const</span> <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span> {</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span> <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span> C *gj;</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span> <span class="keywordtype">int</span> index_temp[2*m+2];</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span> </div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span> nfft_uo2(&u,&o,*xj, n, m);</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span> </div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span> <span class="keywordflow">for</span> (l=0; l<=2*m+1; l++)</div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span> index_temp[l] = (l+u)%n;</div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span> </div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span> <span class="keywordflow">for</span> (l = 0, gj = g+u; l <= 2*m+1; l++)</div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> {</div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span> <span class="keywordtype">int</span> i = index_temp[l];</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span> C *lhs = g+i;</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span> R *lhs_real = (R*)lhs;</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span> C val = psij_const[l] * f;</div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span> <span class="preprocessor"></span> lhs_real[0] += creal(val);</div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span> </div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span> <span class="preprocessor"></span> lhs_real[1] += cimag(val);</div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span> }</div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span> }</div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_1d_compute_omp_blockwise(<span class="keyword">const</span> C f, C *g,<span class="keyword">const</span> R *psij_const,</div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span> <span class="keyword">const</span> R *xj, <span class="keyword">const</span> <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keyword">const</span> <span class="keywordtype">int</span> my_u0, <span class="keyword">const</span> <span class="keywordtype">int</span> my_o0)</div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> {</div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span> <span class="keywordtype">int</span> ar_u,ar_o,l;</div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span> </div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span> nfft_uo2(&ar_u,&ar_o,*xj, n, m);</div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span> </div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> <span class="keywordflow">if</span>(ar_u<ar_o)</div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span> {</div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span> <span class="keywordtype">int</span> u = MAX(my_u0,ar_u);</div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span> <span class="keywordtype">int</span> o = MIN(my_o0,ar_o);</div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span> <span class="keywordtype">int</span> offset_psij = u-ar_u;</div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span> <span class="preprocessor"></span> assert(offset_psij >= 0);</div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span> assert(o-u <= 2*m+1);</div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span> assert(offset_psij+o-u <= 2*m+1);</div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span> <span class="keywordflow">for</span> (l = 0; l <= o-u; l++)</div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span> g[u+l] += psij_const[offset_psij+l] * f;</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span> }</div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span> {</div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span> <span class="keywordtype">int</span> u = MAX(my_u0,ar_u);</div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span> <span class="keywordtype">int</span> o = my_o0;</div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span> <span class="keywordtype">int</span> offset_psij = u-ar_u;</div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span> <span class="preprocessor"></span> assert(offset_psij >= 0);</div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span> assert(o-u <= 2*m+1);</div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span> assert(offset_psij+o-u <= 2*m+1);</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span> <span class="keywordflow">for</span> (l = 0; l <= o-u; l++)</div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span> g[u+l] += psij_const[offset_psij+l] * f;</div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span> </div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span> u = my_u0;</div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span> o = MIN(my_o0,ar_o);</div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span> offset_psij += my_u0-ar_u+n;</div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span> </div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span> <span class="preprocessor"></span> <span class="keywordflow">if</span> (u<=o)</div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span> {</div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span> assert(o-u <= 2*m+1);</div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span> <span class="keywordflow">if</span> (offset_psij+o-u > 2*m+1)</div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span> {</div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span> fprintf(stderr, <span class="stringliteral">"ERR: %d %d %d %d %d %d %d\n"</span>, ar_u, ar_o, my_u0, my_o0, u, o, offset_psij);</div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span> }</div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span> assert(offset_psij+o-u <= 2*m+1);</div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span> }</div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (l = 0; l <= o-u; l++)</div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span> g[u+l] += psij_const[offset_psij+l] * f;</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span> }</div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span> }</div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_trafo_1d_B(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span> {</div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0], M = ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>, m = ths-><a class="cod [...]
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span> <span class="keyword">const</span> C *g = (C*)ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>;</div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span> </div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span> if (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span> {</div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span> {</div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = K(0.0);</div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span> <span class="keywordflow">for</span> (l = 0; l < m2p2; l++)</div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[j*m2p2+l] * g[ths-><a class="code" href="structnfft__ [...]
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span> }</div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span> } <span class="comment">/* if(PRE_FULL_PSI) */</span></div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span> </div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span> {</div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span> {</div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span> nfft_trafo_1d_compute(&ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a> + j * (2 * m + 2),</div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span> &ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j], n, m);</div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span> }</div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span> } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span> </div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span> {</div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span> R fg_exp_l[m2p2];</div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span> </div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span> nfft_1d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span> </div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span> {</div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span> <span class="keyword">const</span> R fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2 * j], fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomp [...]
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span> R fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span> R psij_const[m2p2];</div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span> </div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span> psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span> </div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span> <span class="keywordflow">for</span> (l = 1; l < m2p2; l++)</div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span> {</div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span> psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];</div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span> }</div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span> </div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span> nfft_trafo_1d_compute(&ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, &ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j], n, m);</div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span> }</div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span> </div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span> } <span class="comment">/* if(PRE_FG_PSI) */</span></div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span> </div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FG_PSI)</div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span> {</div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span> R fg_exp_l[m2p2];</div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span> </div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span> </div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span> nfft_1d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span> </div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span> {</div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span> <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span> R fg_psij0, fg_psij1, fg_psij2;</div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span> R psij_const[m2p2];</div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span> </div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span> nfft_uo(ths, (<span class="keywordtype">int</span>)j, &u, &o, 0);</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span> fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j]-((R)u)/n,0));</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span> fg_psij1 = EXP(K(2.0) * (n * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j] - u) / ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span> </div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span> psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span> </div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span> <span class="keywordflow">for</span> (l = 1; l < m2p2; l++)</div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span> {</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span> psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];</div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span> }</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span> </div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span> nfft_trafo_1d_compute(&ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, &ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j], n, m);</div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span> }</div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span> } <span class="comment">/* if(FG_PSI) */</span></div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span> </div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span> {</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span> <span class="keyword">const</span> <span class="keywordtype">int</span> K = ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>, ip_s = K / (m + 2);</div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span> </div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span> </div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span> {</div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span> <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span> R ip_y, ip_w;</div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span> <span class="keywordtype">int</span> ip_u;</div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span> R psij_const[m2p2];</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span> </div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span> nfft_uo(ths, (<span class="keywordtype">int</span>)j, &u, &o, 0);</div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span> </div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span> ip_y = FABS(n * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j] - u) * ((R)ip_s);</div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span> ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span> ip_w = ip_y - ip_u;</div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span> </div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span> <span class="keywordflow">for</span> (l = 0; l < m2p2; l++)</div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span> psij_const[l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s)] * (K(1.0) - ip_w)</div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span> + ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s+1)] * (ip_w);</div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span> </div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span> nfft_trafo_1d_compute(&ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, &ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j], n, m);</div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span> }</div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span> } <span class="comment">/* if(PRE_LIN_PSI) */</span></div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span> {</div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span> <span class="comment">/* no precomputed psi at all */</span></div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span> </div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span> </div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span> {</div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span> R psij_const[m2p2];</div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span> <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span> </div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span> nfft_uo(ths, (<span class="keywordtype">int</span>)j, &u, &o, 0);</div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span> </div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span> <span class="keywordflow">for</span> (l = 0; l < m2p2; l++)</div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span> psij_const[l] = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j]-((R)((u+l)))/n,0));</div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span> </div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span> nfft_trafo_1d_compute(&ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, &ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j], n, m);</div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span> }</div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span> }</div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span> }</div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span> </div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span> </div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A \</span></div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span> <span class="preprocessor"> assert(ar_x[2*k] >= min_u_a || k == M-1); \</span></div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span> <span class="preprocessor"> if (k > 0) \</span></div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span> <span class="preprocessor"> assert(ar_x[2*k-2] < min_u_a); \</span></div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A</span></div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B \</span></div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span> <span class="preprocessor"> assert(ar_x[2*k] >= min_u_b || k == M-1); \</span></div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span> <span class="preprocessor"> if (k > 0) \</span></div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span> <span class="preprocessor"> assert(ar_x[2*k-2] < min_u_b); \</span></div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B</span></div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span> <span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI \</span></div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span> <span class="preprocessor"> nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, \</span></div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span> <span class="preprocessor"> ths->psi + j * (2 * m + 2), ths->x + j, n, m, my_u0, my_o0); \</span></div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span> <span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI \</span></div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span> <span class="preprocessor"> R psij_const[2 * m + 2]; \</span></div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span> <span class="preprocessor"> int u, o, l; \</span></div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span> <span class="preprocessor"> R fg_psij0 = ths->psi[2 * j]; \</span></div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span> <span class="preprocessor"> R fg_psij1 = ths->psi[2 * j + 1]; \</span></div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span> <span class="preprocessor"> R fg_psij2 = K(1.0); \</span></div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span> <span class="preprocessor"> psij_const[0] = fg_psij0; \</span></div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span> <span class="preprocessor"> for (l = 1; l <= 2 * m + 1; l++) \</span></div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span> <span class="preprocessor"> fg_psij2 *= fg_psij1; \</span></div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span> <span class="preprocessor"> psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l]; \</span></div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span> <span class="preprocessor"> nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const, \</span></div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span> <span class="preprocessor"> ths->x + j, n, m, my_u0, my_o0); \</span></div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span> <span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI \</span></div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span> <span class="preprocessor"> R psij_const[2 * m + 2]; \</span></div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span> <span class="preprocessor"> R fg_psij0, fg_psij1, fg_psij2; \</span></div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span> <span class="preprocessor"> int u, o, l; \</span></div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span> <span class="preprocessor"> nfft_uo(ths, j, &u, &o, 0); \</span></div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span> <span class="preprocessor"> fg_psij0 = (PHI(ths->x[j]-((R)u)/n,0)); \</span></div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span> <span class="preprocessor"> fg_psij1 = EXP(K(2.0) * (n * (ths->x[j]) - u) / ths->b[0]); \</span></div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span> <span class="preprocessor"> fg_psij2 = K(1.0); \</span></div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span> <span class="preprocessor"> psij_const[0] = fg_psij0; \</span></div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span> <span class="preprocessor"> for (l = 1; l <= 2 * m + 1; l++) \</span></div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span> <span class="preprocessor"> fg_psij2 *= fg_psij1; \</span></div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span> <span class="preprocessor"> psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l]; \</span></div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span> <span class="preprocessor"> nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const, \</span></div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span> <span class="preprocessor"> ths->x + j, n, m, my_u0, my_o0); \</span></div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span> <span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI \</span></div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span> <span class="preprocessor"> R psij_const[2 * m + 2]; \</span></div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span> <span class="preprocessor"> int ip_u; \</span></div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span> <span class="preprocessor"> R ip_y, ip_w; \</span></div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span> <span class="preprocessor"> int u, o, l; \</span></div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span> <span class="preprocessor"> nfft_uo(ths, j, &u, &o, 0); \</span></div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span> <span class="preprocessor"> ip_y = FABS(n * ths->x[j] - u) * ((R)ip_s); \</span></div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span> <span class="preprocessor"> ip_u = LRINT(FLOOR(ip_y)); \</span></div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span> <span class="preprocessor"> ip_w = ip_y - ip_u; \</span></div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span> <span class="preprocessor"> for (l = 0; l < 2 * m + 2; l++) \</span></div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span> <span class="preprocessor"> psij_const[l] \</span></div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span> <span class="preprocessor"> = ths->psi[ABS(ip_u-l*ip_s)] * (K(1.0) - ip_w) \</span></div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span> <span class="preprocessor"> + ths->psi[ABS(ip_u-l*ip_s+1)] * (ip_w); \</span></div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span> <span class="preprocessor"> nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const, \</span></div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span> <span class="preprocessor"> ths->x + j, n, m, my_u0, my_o0); \</span></div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span> <span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI \</span></div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span> <span class="preprocessor"> R psij_const[2 * m + 2]; \</span></div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span> <span class="preprocessor"> int u, o, l; \</span></div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span> <span class="preprocessor"> nfft_uo(ths, j, &u, &o, 0); \</span></div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span> <span class="preprocessor"> for (l = 0; l <= 2 * m + 1; l++) \</span></div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span> <span class="preprocessor"> psij_const[l] = (PHI(ths->x[j]-((R)((u+l)))/n,0)); \</span></div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span> <span class="preprocessor"> nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const, \</span></div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span> <span class="preprocessor"> ths->x + j, n, m, my_u0, my_o0); \</span></div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span> <span class="preprocessor">#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(whichone) \</span></div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span> <span class="preprocessor"> if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT) \</span></div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span> <span class="preprocessor"> _Pragma("omp parallel private(k)") \</span></div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span> <span class="preprocessor"> int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b; \</span></div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span> <span class="preprocessor"> int *ar_x = ths->index_x; \</span></div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span> <span class="preprocessor"> nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, \</span></div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span> <span class="preprocessor"> &min_u_b, &max_u_b, 1, &n, m); \</span></div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span> <span class="preprocessor"> if (min_u_a != -1) \</span></div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span> <span class="preprocessor"> k = index_x_binary_search(ar_x, M, min_u_a); \</span></div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span> <span class="preprocessor"> MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A \</span></div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span> <span class="preprocessor"> while (k < M) \</span></div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span> <span class="preprocessor"> int u_prod = ar_x[2*k]; \</span></div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span> <span class="preprocessor"> int j = ar_x[2*k+1]; \</span></div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span> <span class="preprocessor"> if (u_prod < min_u_a || u_prod > max_u_a) \</span></div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span> <span class="preprocessor"> break; \</span></div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span> <span class="preprocessor"> MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \</span></div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span> <span class="preprocessor"> k++; \</span></div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span> <span class="preprocessor"> if (min_u_b != -1) \</span></div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span> <span class="preprocessor"> k = index_x_binary_search(ar_x, M, min_u_b); \</span></div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span> <span class="preprocessor"> MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B \</span></div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span> <span class="preprocessor"> while (k < M) \</span></div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span> <span class="preprocessor"> int u_prod = ar_x[2*k]; \</span></div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span> <span class="preprocessor"> int j = ar_x[2*k+1]; \</span></div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span> <span class="preprocessor"> if (u_prod < min_u_b || u_prod > max_u_b) \</span></div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span> <span class="preprocessor"> break; \</span></div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span> <span class="preprocessor"> MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \</span></div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span> <span class="preprocessor"> k++; \</span></div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span> <span class="preprocessor"> } </span><span class="comment">/* omp parallel */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span> <span class="preprocessor"> return; \</span></div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span> <span class="preprocessor"> } </span><span class="comment">/* if(NFFT_OMP_BLOCKWISE_ADJOINT) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_1d_B(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span> {</div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0], M = ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>, m = ths-><a class="cod [...]
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span> C *g = (C*)ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>;</div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span> </div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span> memset(g,0,ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span> </div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span> {</div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span> nfft_adjoint_B_compute_full_psi(g, ths-><a class="code" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_g</a>, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>, ths-><a class="code" href= [...]
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span> 1, ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>, m, ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a>, ths-><a cl [...]
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span> } <span class="comment">/* if(PRE_FULL_PSI) */</span></div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span> </div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span> {</div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span> <span class="preprocessor"></span> MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(PRE_PSI)</div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span> {</div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span> #ifdef _OPENMP</div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span> nfft_adjoint_1d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a> + j * (2 * m + 2), ths [...]
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span> <span class="preprocessor"></span> nfft_adjoint_1d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> + j, g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme." [...]
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span> </div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span> } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span> </div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span> {</div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span> R fg_exp_l[2 * m + 2];</div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span> </div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span> nfft_1d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span> </div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span> <span class="preprocessor"></span> MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(PRE_FG_PSI)</div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span> </div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span> {</div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span> R psij_const[2 * m + 2];</div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span> R fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2 * j];</div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span> R fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2 * j + 1];</div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span> R fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span> </div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span> psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span> <span class="keywordflow">for</span> (l = 1; l <= 2 * m + 1; l++)</div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span> {</div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span> psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];</div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span> }</div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span> </div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span> <span class="preprocessor"></span> nfft_adjoint_1d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a> + j, n, m);</div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span> <span class="preprocessor"></span> nfft_adjoint_1d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> + j, g, psij_const, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a> + j, n, m);</div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span> </div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span> } <span class="comment">/* if(PRE_FG_PSI) */</span></div>
+<div class="line"><a name="l02405"></a><span class="lineno"> 2405</span> </div>
+<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FG_PSI)</div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span> {</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span> R fg_exp_l[2 * m + 2];</div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span> </div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span> nfft_1d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span> </div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span> </div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span> <span class="preprocessor"></span> MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(FG_PSI)</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span> {</div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span> <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span> R psij_const[2 * m + 2];</div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span> R fg_psij0, fg_psij1, fg_psij2;</div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span> </div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span> nfft_uo(ths, j, &u, &o, 0);</div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span> fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j]-((R)u)/n,0));</div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span> fg_psij1 = EXP(K(2.0) * (n * (ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j]) - u) / ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span> psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span> <span class="keywordflow">for</span> (l = 1; l <= 2 * m + 1; l++)</div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span> {</div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span> psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];</div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span> }</div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span> </div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span> <span class="preprocessor"></span> nfft_adjoint_1d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a> + j, n, m);</div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span> <span class="preprocessor"></span> nfft_adjoint_1d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> + j, g, psij_const, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a> + j, n, m);</div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span> </div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span> } <span class="comment">/* if(FG_PSI) */</span></div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span> </div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span> {</div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span> <span class="keyword">const</span> <span class="keywordtype">int</span> K = ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>;</div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span> <span class="keyword">const</span> <span class="keywordtype">int</span> ip_s = K / (m + 2);</div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span> </div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span> </div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span> <span class="preprocessor"></span> MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(PRE_LIN_PSI)</div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span> <span class="preprocessor"> #pragma openmp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span> {</div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span> <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span> <span class="keywordtype">int</span> ip_u;</div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span> R ip_y, ip_w;</div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span> R psij_const[2 * m + 2];</div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span> </div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span> nfft_uo(ths, j, &u, &o, 0);</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span> </div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span> ip_y = FABS(n * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j] - u) * ((R)ip_s);</div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span> ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span> ip_w = ip_y - ip_u;</div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span> <span class="keywordflow">for</span> (l = 0; l < 2 * m + 2; l++)</div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span> psij_const[l]</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span> = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s)] * (K(1.0) - ip_w)</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span> + ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s+1)] * (ip_w);</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span> </div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span> <span class="preprocessor"></span> nfft_adjoint_1d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a> + j, n, m);</div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span> <span class="preprocessor"></span> nfft_adjoint_1d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> + j, g, psij_const, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a> + j, n, m);</div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span> } <span class="comment">/* if(PRE_LIN_PSI) */</span></div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span> </div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span> <span class="comment">/* no precomputed psi at all */</span></div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span> </div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span> <span class="preprocessor"></span> MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(NO_PSI)</div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span> {</div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span> <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span> R psij_const[2 * m + 2];</div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when [...]
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span> </div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span> nfft_uo(ths, j, &u, &o, 0);</div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span> </div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span> <span class="keywordflow">for</span> (l = 0; l <= 2 * m + 1; l++)</div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span> psij_const[l] = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j]-((R)((u+l)))/n,0));</div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span> </div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span> <span class="preprocessor"></span> nfft_adjoint_1d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a> + j, n, m);</div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span> <span class="preprocessor"></span> nfft_adjoint_1d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> + j, g, psij_const, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a> + j, n, m);</div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span> }</div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span> </div>
+<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span> <span class="keywordtype">void</span> nfft_trafo_1d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span> {</div>
+<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0], N2 = N/2, n = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0];</div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span> C *f_hat1 = (C*)ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, *f_hat2 = (C*)&ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[N2];</div>
+<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span> </div>
+<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span> ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a> = ths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>;</div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span> ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a> = ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>;</div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span> </div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span> {</div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span> C *g_hat1 = (C*)&ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>[n-N/2], *g_hat2 = (C*)ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>;</div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span> R *c_phi_inv1, *c_phi_inv2;</div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span> </div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span> TIC(0)</div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span> <span class="preprocessor"></span> {</div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>; k++)</div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span> ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>[k] = 0.0;</div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span> }</div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span> <span class="preprocessor"></span> memset(ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>, 0, ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span> <span class="preprocessor"></span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span> {</div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span> c_phi_inv1 = ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is doubles.">c_phi_inv</a>[0];</div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span> c_phi_inv2 = &ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is doubles.">c_phi_inv</a>[0][N2];</div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span> </div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < N2; k++)</div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span> {</div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span> g_hat1[k] = f_hat1[k] * c_phi_inv1[k];</div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span> g_hat2[k] = f_hat2[k] * c_phi_inv2[k];</div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span> }</div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span> }</div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span> {</div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < N2; k++)</div>
+<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span> {</div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span> g_hat1[k] = f_hat1[k] / (PHI_HUT(k-N2,0));</div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span> g_hat2[k] = f_hat2[k] / (PHI_HUT(k,0));</div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span> }</div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span> }</div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span> TOC(0)</div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span> </div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span> TIC_FFTW(1)</div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span> fftw_execute(ths->my_fftw_plan1);</div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span> TOC_FFTW(1);</div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span> </div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span> TIC(2);</div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span> nfft_trafo_1d_B(ths);</div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span> TOC(2);</div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span> }</div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span> }</div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span> </div>
+<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span> <span class="keywordtype">void</span> nfft_adjoint_1d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span> {</div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span> <span class="keywordtype">int</span> n,N;</div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span> C *g_hat1,*g_hat2,*f_hat1,*f_hat2;</div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span> R *c_phi_inv1, *c_phi_inv2;</div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span> </div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span> N=ths->N[0];</div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span> n=ths->n[0];</div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span> </div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span> ths->g_hat=ths->g1;</div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span> ths->g=ths->g2;</div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span> </div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span> f_hat1=(C*)ths->f_hat;</div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span> f_hat2=(C*)&ths->f_hat[N/2];</div>
+<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span> g_hat1=(C*)&ths->g_hat[n-N/2];</div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span> g_hat2=(C*)ths->g_hat;</div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span> </div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span> TIC(2)</div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span> nfft_adjoint_1d_B(ths);</div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span> TOC(2)</div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span> </div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span> TIC_FFTW(1)</div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span> fftw_execute(ths->my_fftw_plan2);</div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span> TOC_FFTW(1);</div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span> </div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span> TIC(0)</div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span> if(ths->nfft_flags & PRE_PHI_HUT)</div>
+<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span> {</div>
+<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span> c_phi_inv1=ths->c_phi_inv[0];</div>
+<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span> c_phi_inv2=&ths->c_phi_inv[0][N/2];</div>
+<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span> </div>
+<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < N/2; k++)</div>
+<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span> {</div>
+<div class="line"><a name="l02606"></a><span class="lineno"> 2606</span> f_hat1[k] = g_hat1[k] * c_phi_inv1[k];</div>
+<div class="line"><a name="l02607"></a><span class="lineno"> 2607</span> f_hat2[k] = g_hat2[k] * c_phi_inv2[k];</div>
+<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span> }</div>
+<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span> }</div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span> {</div>
+<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span> </div>
+<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < N/2; k++)</div>
+<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span> {</div>
+<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span> f_hat1[k] = g_hat1[k] / (PHI_HUT(k-N/2,0));</div>
+<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span> f_hat2[k] = g_hat2[k] / (PHI_HUT(k,0));</div>
+<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span> }</div>
+<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span> }</div>
+<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span> TOC(0)</div>
+<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span> }</div>
+<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span> </div>
+<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span> </div>
+<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span> <span class="comment">/* ############################################################ SPECIFIC VERSIONS FOR d=2 */</span></div>
+<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span> </div>
+<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_2d_init_fg_exp_l(R *fg_exp_l, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keyword">const</span> R b)</div>
+<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span> {</div>
+<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span> R fg_exp_b0, fg_exp_b1, fg_exp_b2, fg_exp_b0_sq;</div>
+<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span> </div>
+<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span> fg_exp_b0 = EXP(K(-1.0)/b);</div>
+<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span> fg_exp_b0_sq = fg_exp_b0*fg_exp_b0;</div>
+<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span> fg_exp_b1 = K(1.0);</div>
+<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span> fg_exp_b2 = K(1.0);</div>
+<div class="line"><a name="l02636"></a><span class="lineno"> 2636</span> fg_exp_l[0] = K(1.0);</div>
+<div class="line"><a name="l02637"></a><span class="lineno"> 2637</span> <span class="keywordflow">for</span>(l=1; l <= 2*m+1; l++)</div>
+<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span> {</div>
+<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span> fg_exp_b2 = fg_exp_b1*fg_exp_b0;</div>
+<div class="line"><a name="l02640"></a><span class="lineno"> 2640</span> fg_exp_b1 *= fg_exp_b0_sq;</div>
+<div class="line"><a name="l02641"></a><span class="lineno"> 2641</span> fg_exp_l[l] = fg_exp_l[l-1]*fg_exp_b2;</div>
+<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span> }</div>
+<div class="line"><a name="l02643"></a><span class="lineno"> 2643</span> }</div>
+<div class="line"><a name="l02644"></a><span class="lineno"> 2644</span> </div>
+<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_trafo_2d_compute(C *fj, <span class="keyword">const</span> C *g,</div>
+<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span> <span class="keyword">const</span> R *psij_const0, <span class="keyword">const</span> R *psij_const1,</div>
+<div class="line"><a name="l02647"></a><span class="lineno"> 2647</span> <span class="keyword">const</span> R *xj0, <span class="keyword">const</span> R *xj1,</div>
+<div class="line"><a name="l02648"></a><span class="lineno"> 2648</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n0, <span class="keyword">const</span> <span class="keywordtype">int</span> n1, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l02649"></a><span class="lineno"> 2649</span> {</div>
+<div class="line"><a name="l02650"></a><span class="lineno"> 2650</span> <span class="keywordtype">int</span> u0,o0,l0,u1,o1,l1;</div>
+<div class="line"><a name="l02651"></a><span class="lineno"> 2651</span> <span class="keyword">const</span> C *gj;</div>
+<div class="line"><a name="l02652"></a><span class="lineno"> 2652</span> <span class="keyword">const</span> R *psij0,*psij1;</div>
+<div class="line"><a name="l02653"></a><span class="lineno"> 2653</span> </div>
+<div class="line"><a name="l02654"></a><span class="lineno"> 2654</span> psij0=psij_const0;</div>
+<div class="line"><a name="l02655"></a><span class="lineno"> 2655</span> psij1=psij_const1;</div>
+<div class="line"><a name="l02656"></a><span class="lineno"> 2656</span> </div>
+<div class="line"><a name="l02657"></a><span class="lineno"> 2657</span> nfft_uo2(&u0,&o0,*xj0, n0, m);</div>
+<div class="line"><a name="l02658"></a><span class="lineno"> 2658</span> nfft_uo2(&u1,&o1,*xj1, n1, m);</div>
+<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span> </div>
+<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span> *fj=0;</div>
+<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span> </div>
+<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span> <span class="keywordflow">if</span>(u0<o0)</div>
+<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span> <span class="keywordflow">if</span>(u1<o1)</div>
+<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span> <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span> {</div>
+<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span> psij1=psij_const1;</div>
+<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span> gj=g+(u0+l0)*n1+u1;</div>
+<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span> (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span> }</div>
+<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span> <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span> {</div>
+<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span> psij1=psij_const1;</div>
+<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span> gj=g+(u0+l0)*n1+u1;</div>
+<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++)</div>
+<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span> (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span> gj=g+(u0+l0)*n1;</div>
+<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++)</div>
+<div class="line"><a name="l02680"></a><span class="lineno"> 2680</span> (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02681"></a><span class="lineno"> 2681</span> }</div>
+<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span> <span class="keywordflow">if</span>(u1<o1)</div>
+<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span> {</div>
+<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span> <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span> {</div>
+<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span> psij1=psij_const1;</div>
+<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span> gj=g+(u0+l0)*n1+u1;</div>
+<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span> (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span> }</div>
+<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span> <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span> {</div>
+<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span> psij1=psij_const1;</div>
+<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span> gj=g+l0*n1+u1;</div>
+<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span> (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span> }</div>
+<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span> }</div>
+<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span> {</div>
+<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span> <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span> {</div>
+<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span> psij1=psij_const1;</div>
+<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span> gj=g+(u0+l0)*n1+u1;</div>
+<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++)</div>
+<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span> (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span> gj=g+(u0+l0)*n1;</div>
+<div class="line"><a name="l02709"></a><span class="lineno"> 2709</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++)</div>
+<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span> (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span> }</div>
+<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span> <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span> {</div>
+<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span> psij1=psij_const1;</div>
+<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span> gj=g+l0*n1+u1;</div>
+<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++)</div>
+<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span> (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span> gj=g+l0*n1;</div>
+<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++)</div>
+<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span> (*fj) += (*psij0) * (*psij1++) * (*gj++);</div>
+<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span> }</div>
+<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span> }</div>
+<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span> }</div>
+<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span> </div>
+<div class="line"><a name="l02725"></a><span class="lineno"> 2725</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02726"></a><span class="lineno"> 2726</span> <span class="preprocessor"></span><span class="comment">/* adjoint NFFT two-dimensional case with OpenMP atomic operations */</span></div>
+<div class="line"><a name="l02727"></a><span class="lineno"> 2727</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_2d_compute_omp_atomic(<span class="keyword">const</span> C f, C *g,</div>
+<div class="line"><a name="l02728"></a><span class="lineno"> 2728</span> <span class="keyword">const</span> R *psij_const0, <span class="keyword">const</span> R *psij_const1,</div>
+<div class="line"><a name="l02729"></a><span class="lineno"> 2729</span> <span class="keyword">const</span> R *xj0, <span class="keyword">const</span> R *xj1,</div>
+<div class="line"><a name="l02730"></a><span class="lineno"> 2730</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n0, <span class="keyword">const</span> <span class="keywordtype">int</span> n1, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l02731"></a><span class="lineno"> 2731</span> {</div>
+<div class="line"><a name="l02732"></a><span class="lineno"> 2732</span> <span class="keywordtype">int</span> u0,o0,l0,u1,o1,l1;</div>
+<div class="line"><a name="l02733"></a><span class="lineno"> 2733</span> <span class="keyword">const</span> <span class="keywordtype">int</span> lprod = (2*m+2) * (2*m+2); </div>
+<div class="line"><a name="l02734"></a><span class="lineno"> 2734</span> </div>
+<div class="line"><a name="l02735"></a><span class="lineno"> 2735</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index_temp0[2*m+2];</div>
+<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index_temp1[2*m+2];</div>
+<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span> </div>
+<div class="line"><a name="l02738"></a><span class="lineno"> 2738</span> nfft_uo2(&u0,&o0,*xj0, n0, m);</div>
+<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span> nfft_uo2(&u1,&o1,*xj1, n1, m);</div>
+<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span> </div>
+<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span> <span class="keywordflow">for</span> (l0=0; l0<=2*m+1; l0++)</div>
+<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span> index_temp0[l0] = (u0+l0)%n0;</div>
+<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span> </div>
+<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span> <span class="keywordflow">for</span> (l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span> index_temp1[l1] = (u1+l1)%n1;</div>
+<div class="line"><a name="l02746"></a><span class="lineno"> 2746</span> </div>
+<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span> <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++)</div>
+<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span> {</div>
+<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span> {</div>
+<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i = index_temp0[l0] * n1 + index_temp1[l1];</div>
+<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span> C *lhs = g+i;</div>
+<div class="line"><a name="l02753"></a><span class="lineno"> 2753</span> R *lhs_real = (R*)lhs;</div>
+<div class="line"><a name="l02754"></a><span class="lineno"> 2754</span> C val = psij_const0[l0] * psij_const1[l1] * f;</div>
+<div class="line"><a name="l02755"></a><span class="lineno"> 2755</span> </div>
+<div class="line"><a name="l02756"></a><span class="lineno"> 2756</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l02757"></a><span class="lineno"> 2757</span> <span class="preprocessor"></span> lhs_real[0] += creal(val);</div>
+<div class="line"><a name="l02758"></a><span class="lineno"> 2758</span> </div>
+<div class="line"><a name="l02759"></a><span class="lineno"> 2759</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l02760"></a><span class="lineno"> 2760</span> <span class="preprocessor"></span> lhs_real[1] += cimag(val);</div>
+<div class="line"><a name="l02761"></a><span class="lineno"> 2761</span> }</div>
+<div class="line"><a name="l02762"></a><span class="lineno"> 2762</span> }</div>
+<div class="line"><a name="l02763"></a><span class="lineno"> 2763</span> }</div>
+<div class="line"><a name="l02764"></a><span class="lineno"> 2764</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02765"></a><span class="lineno"> 2765</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02766"></a><span class="lineno"> 2766</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l02767"></a><span class="lineno"> 2767</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02785"></a><span class="lineno"> 2785</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_2d_compute_omp_blockwise(<span class="keyword">const</span> C f, C *g,</div>
+<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span> <span class="keyword">const</span> R *psij_const0, <span class="keyword">const</span> R *psij_const1,</div>
+<div class="line"><a name="l02787"></a><span class="lineno"> 2787</span> <span class="keyword">const</span> R *xj0, <span class="keyword">const</span> R *xj1,</div>
+<div class="line"><a name="l02788"></a><span class="lineno"> 2788</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n0, <span class="keyword">const</span> <span class="keywordtype">int</span> n1, <span class="keyword">const</span> <span class="keywordtype">int</span> m,</div>
+<div class="line"><a name="l02789"></a><span class="lineno"> 2789</span> <span class="keyword">const</span> <span class="keywordtype">int</span> my_u0, <span class="keyword">const</span> <span class="keywordtype">int</span> my_o0)</div>
+<div class="line"><a name="l02790"></a><span class="lineno"> 2790</span> {</div>
+<div class="line"><a name="l02791"></a><span class="lineno"> 2791</span> <span class="keywordtype">int</span> ar_u0,ar_o0,l0,u1,o1,l1;</div>
+<div class="line"><a name="l02792"></a><span class="lineno"> 2792</span> <span class="keyword">const</span> <span class="keywordtype">int</span> lprod = (2*m+2) * (2*m+2); </div>
+<div class="line"><a name="l02793"></a><span class="lineno"> 2793</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index_temp1[2*m+2];</div>
+<div class="line"><a name="l02794"></a><span class="lineno"> 2794</span> </div>
+<div class="line"><a name="l02795"></a><span class="lineno"> 2795</span> nfft_uo2(&ar_u0,&ar_o0,*xj0, n0, m);</div>
+<div class="line"><a name="l02796"></a><span class="lineno"> 2796</span> nfft_uo2(&u1,&o1,*xj1, n1, m);</div>
+<div class="line"><a name="l02797"></a><span class="lineno"> 2797</span> </div>
+<div class="line"><a name="l02798"></a><span class="lineno"> 2798</span> <span class="keywordflow">for</span> (l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02799"></a><span class="lineno"> 2799</span> index_temp1[l1] = (u1+l1)%n1;</div>
+<div class="line"><a name="l02800"></a><span class="lineno"> 2800</span> </div>
+<div class="line"><a name="l02801"></a><span class="lineno"> 2801</span> <span class="keywordflow">if</span>(ar_u0<ar_o0)</div>
+<div class="line"><a name="l02802"></a><span class="lineno"> 2802</span> {</div>
+<div class="line"><a name="l02803"></a><span class="lineno"> 2803</span> <span class="keywordtype">int</span> u0 = MAX(my_u0,ar_u0);</div>
+<div class="line"><a name="l02804"></a><span class="lineno"> 2804</span> <span class="keywordtype">int</span> o0 = MIN(my_o0,ar_o0);</div>
+<div class="line"><a name="l02805"></a><span class="lineno"> 2805</span> <span class="keywordtype">int</span> offset_psij = u0-ar_u0;</div>
+<div class="line"><a name="l02806"></a><span class="lineno"> 2806</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l02807"></a><span class="lineno"> 2807</span> <span class="preprocessor"></span> assert(offset_psij >= 0);</div>
+<div class="line"><a name="l02808"></a><span class="lineno"> 2808</span> assert(o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l02809"></a><span class="lineno"> 2809</span> assert(offset_psij+o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l02810"></a><span class="lineno"> 2810</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02811"></a><span class="lineno"> 2811</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02812"></a><span class="lineno"> 2812</span> <span class="keywordflow">for</span> (l0 = 0; l0 <= o0-u0; l0++)</div>
+<div class="line"><a name="l02813"></a><span class="lineno"> 2813</span> {</div>
+<div class="line"><a name="l02814"></a><span class="lineno"> 2814</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i0 = (u0+l0) * n1;</div>
+<div class="line"><a name="l02815"></a><span class="lineno"> 2815</span> <span class="keyword">const</span> C val0 = psij_const0[offset_psij+l0];</div>
+<div class="line"><a name="l02816"></a><span class="lineno"> 2816</span> </div>
+<div class="line"><a name="l02817"></a><span class="lineno"> 2817</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02818"></a><span class="lineno"> 2818</span> g[i0 + index_temp1[l1]] += val0 * psij_const1[l1] * f;</div>
+<div class="line"><a name="l02819"></a><span class="lineno"> 2819</span> }</div>
+<div class="line"><a name="l02820"></a><span class="lineno"> 2820</span> }</div>
+<div class="line"><a name="l02821"></a><span class="lineno"> 2821</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02822"></a><span class="lineno"> 2822</span> {</div>
+<div class="line"><a name="l02823"></a><span class="lineno"> 2823</span> <span class="keywordtype">int</span> u0 = MAX(my_u0,ar_u0);</div>
+<div class="line"><a name="l02824"></a><span class="lineno"> 2824</span> <span class="keywordtype">int</span> o0 = my_o0;</div>
+<div class="line"><a name="l02825"></a><span class="lineno"> 2825</span> <span class="keywordtype">int</span> offset_psij = u0-ar_u0;</div>
+<div class="line"><a name="l02826"></a><span class="lineno"> 2826</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l02827"></a><span class="lineno"> 2827</span> <span class="preprocessor"></span> assert(offset_psij >= 0);</div>
+<div class="line"><a name="l02828"></a><span class="lineno"> 2828</span> assert(o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l02829"></a><span class="lineno"> 2829</span> assert(offset_psij+o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l02830"></a><span class="lineno"> 2830</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02831"></a><span class="lineno"> 2831</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02832"></a><span class="lineno"> 2832</span> <span class="keywordflow">for</span> (l0 = 0; l0 <= o0-u0; l0++)</div>
+<div class="line"><a name="l02833"></a><span class="lineno"> 2833</span> {</div>
+<div class="line"><a name="l02834"></a><span class="lineno"> 2834</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i0 = (u0+l0) * n1;</div>
+<div class="line"><a name="l02835"></a><span class="lineno"> 2835</span> <span class="keyword">const</span> C val0 = psij_const0[offset_psij+l0];</div>
+<div class="line"><a name="l02836"></a><span class="lineno"> 2836</span> </div>
+<div class="line"><a name="l02837"></a><span class="lineno"> 2837</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02838"></a><span class="lineno"> 2838</span> g[i0 + index_temp1[l1]] += val0 * psij_const1[l1] * f;</div>
+<div class="line"><a name="l02839"></a><span class="lineno"> 2839</span> }</div>
+<div class="line"><a name="l02840"></a><span class="lineno"> 2840</span> </div>
+<div class="line"><a name="l02841"></a><span class="lineno"> 2841</span> u0 = my_u0;</div>
+<div class="line"><a name="l02842"></a><span class="lineno"> 2842</span> o0 = MIN(my_o0,ar_o0);</div>
+<div class="line"><a name="l02843"></a><span class="lineno"> 2843</span> offset_psij += my_u0-ar_u0+n0;</div>
+<div class="line"><a name="l02844"></a><span class="lineno"> 2844</span> </div>
+<div class="line"><a name="l02845"></a><span class="lineno"> 2845</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l02846"></a><span class="lineno"> 2846</span> <span class="preprocessor"></span> <span class="keywordflow">if</span> (u0<=o0)</div>
+<div class="line"><a name="l02847"></a><span class="lineno"> 2847</span> {</div>
+<div class="line"><a name="l02848"></a><span class="lineno"> 2848</span> assert(o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l02849"></a><span class="lineno"> 2849</span> assert(offset_psij+o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l02850"></a><span class="lineno"> 2850</span> }</div>
+<div class="line"><a name="l02851"></a><span class="lineno"> 2851</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02852"></a><span class="lineno"> 2852</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02853"></a><span class="lineno"> 2853</span> <span class="keywordflow">for</span> (l0 = 0; l0 <= o0-u0; l0++)</div>
+<div class="line"><a name="l02854"></a><span class="lineno"> 2854</span> {</div>
+<div class="line"><a name="l02855"></a><span class="lineno"> 2855</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i0 = (u0+l0) * n1;</div>
+<div class="line"><a name="l02856"></a><span class="lineno"> 2856</span> <span class="keyword">const</span> C val0 = psij_const0[offset_psij+l0];</div>
+<div class="line"><a name="l02857"></a><span class="lineno"> 2857</span> </div>
+<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02859"></a><span class="lineno"> 2859</span> g[i0 + index_temp1[l1]] += val0 * psij_const1[l1] * f;</div>
+<div class="line"><a name="l02860"></a><span class="lineno"> 2860</span> }</div>
+<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span> }</div>
+<div class="line"><a name="l02862"></a><span class="lineno"> 2862</span> }</div>
+<div class="line"><a name="l02863"></a><span class="lineno"> 2863</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02864"></a><span class="lineno"> 2864</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02865"></a><span class="lineno"> 2865</span> <span class="preprocessor">#ifndef _OPENMP</span></div>
+<div class="line"><a name="l02866"></a><span class="lineno"> 2866</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_2d_compute_serial(<span class="keyword">const</span> C *fj, C *g,</div>
+<div class="line"><a name="l02867"></a><span class="lineno"> 2867</span> <span class="keyword">const</span> R *psij_const0, <span class="keyword">const</span> R *psij_const1,</div>
+<div class="line"><a name="l02868"></a><span class="lineno"> 2868</span> <span class="keyword">const</span> R *xj0, <span class="keyword">const</span> R *xj1,</div>
+<div class="line"><a name="l02869"></a><span class="lineno"> 2869</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n0, <span class="keyword">const</span> <span class="keywordtype">int</span> n1, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l02870"></a><span class="lineno"> 2870</span> {</div>
+<div class="line"><a name="l02871"></a><span class="lineno"> 2871</span> <span class="keywordtype">int</span> u0,o0,l0,u1,o1,l1;</div>
+<div class="line"><a name="l02872"></a><span class="lineno"> 2872</span> C *gj;</div>
+<div class="line"><a name="l02873"></a><span class="lineno"> 2873</span> <span class="keyword">const</span> R *psij0,*psij1;</div>
+<div class="line"><a name="l02874"></a><span class="lineno"> 2874</span> </div>
+<div class="line"><a name="l02875"></a><span class="lineno"> 2875</span> psij0=psij_const0;</div>
+<div class="line"><a name="l02876"></a><span class="lineno"> 2876</span> psij1=psij_const1;</div>
+<div class="line"><a name="l02877"></a><span class="lineno"> 2877</span> </div>
+<div class="line"><a name="l02878"></a><span class="lineno"> 2878</span> nfft_uo2(&u0,&o0,*xj0, n0, m);</div>
+<div class="line"><a name="l02879"></a><span class="lineno"> 2879</span> nfft_uo2(&u1,&o1,*xj1, n1, m);</div>
+<div class="line"><a name="l02880"></a><span class="lineno"> 2880</span> </div>
+<div class="line"><a name="l02881"></a><span class="lineno"> 2881</span> <span class="keywordflow">if</span>(u0<o0)</div>
+<div class="line"><a name="l02882"></a><span class="lineno"> 2882</span> <span class="keywordflow">if</span>(u1<o1)</div>
+<div class="line"><a name="l02883"></a><span class="lineno"> 2883</span> <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l02884"></a><span class="lineno"> 2884</span> {</div>
+<div class="line"><a name="l02885"></a><span class="lineno"> 2885</span> psij1=psij_const1;</div>
+<div class="line"><a name="l02886"></a><span class="lineno"> 2886</span> gj=g+(u0+l0)*n1+u1;</div>
+<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02888"></a><span class="lineno"> 2888</span> (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02889"></a><span class="lineno"> 2889</span> }</div>
+<div class="line"><a name="l02890"></a><span class="lineno"> 2890</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02891"></a><span class="lineno"> 2891</span> <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span> {</div>
+<div class="line"><a name="l02893"></a><span class="lineno"> 2893</span> psij1=psij_const1;</div>
+<div class="line"><a name="l02894"></a><span class="lineno"> 2894</span> gj=g+(u0+l0)*n1+u1;</div>
+<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++)</div>
+<div class="line"><a name="l02896"></a><span class="lineno"> 2896</span> (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span> gj=g+(u0+l0)*n1;</div>
+<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++)</div>
+<div class="line"><a name="l02899"></a><span class="lineno"> 2899</span> (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span> }</div>
+<div class="line"><a name="l02901"></a><span class="lineno"> 2901</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02902"></a><span class="lineno"> 2902</span> <span class="keywordflow">if</span>(u1<o1)</div>
+<div class="line"><a name="l02903"></a><span class="lineno"> 2903</span> {</div>
+<div class="line"><a name="l02904"></a><span class="lineno"> 2904</span> <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l02905"></a><span class="lineno"> 2905</span> {</div>
+<div class="line"><a name="l02906"></a><span class="lineno"> 2906</span> psij1=psij_const1;</div>
+<div class="line"><a name="l02907"></a><span class="lineno"> 2907</span> gj=g+(u0+l0)*n1+u1;</div>
+<div class="line"><a name="l02908"></a><span class="lineno"> 2908</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02909"></a><span class="lineno"> 2909</span> (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02910"></a><span class="lineno"> 2910</span> }</div>
+<div class="line"><a name="l02911"></a><span class="lineno"> 2911</span> <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l02912"></a><span class="lineno"> 2912</span> {</div>
+<div class="line"><a name="l02913"></a><span class="lineno"> 2913</span> psij1=psij_const1;</div>
+<div class="line"><a name="l02914"></a><span class="lineno"> 2914</span> gj=g+l0*n1+u1;</div>
+<div class="line"><a name="l02915"></a><span class="lineno"> 2915</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l02916"></a><span class="lineno"> 2916</span> (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02917"></a><span class="lineno"> 2917</span> }</div>
+<div class="line"><a name="l02918"></a><span class="lineno"> 2918</span> }</div>
+<div class="line"><a name="l02919"></a><span class="lineno"> 2919</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02920"></a><span class="lineno"> 2920</span> {</div>
+<div class="line"><a name="l02921"></a><span class="lineno"> 2921</span> <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l02922"></a><span class="lineno"> 2922</span> {</div>
+<div class="line"><a name="l02923"></a><span class="lineno"> 2923</span> psij1=psij_const1;</div>
+<div class="line"><a name="l02924"></a><span class="lineno"> 2924</span> gj=g+(u0+l0)*n1+u1;</div>
+<div class="line"><a name="l02925"></a><span class="lineno"> 2925</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++)</div>
+<div class="line"><a name="l02926"></a><span class="lineno"> 2926</span> (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02927"></a><span class="lineno"> 2927</span> gj=g+(u0+l0)*n1;</div>
+<div class="line"><a name="l02928"></a><span class="lineno"> 2928</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++)</div>
+<div class="line"><a name="l02929"></a><span class="lineno"> 2929</span> (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02930"></a><span class="lineno"> 2930</span> }</div>
+<div class="line"><a name="l02931"></a><span class="lineno"> 2931</span> <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l02932"></a><span class="lineno"> 2932</span> {</div>
+<div class="line"><a name="l02933"></a><span class="lineno"> 2933</span> psij1=psij_const1;</div>
+<div class="line"><a name="l02934"></a><span class="lineno"> 2934</span> gj=g+l0*n1+u1;</div>
+<div class="line"><a name="l02935"></a><span class="lineno"> 2935</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++)</div>
+<div class="line"><a name="l02936"></a><span class="lineno"> 2936</span> (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02937"></a><span class="lineno"> 2937</span> gj=g+l0*n1;</div>
+<div class="line"><a name="l02938"></a><span class="lineno"> 2938</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++)</div>
+<div class="line"><a name="l02939"></a><span class="lineno"> 2939</span> (*gj++) += (*psij0) * (*psij1++) * (*fj);</div>
+<div class="line"><a name="l02940"></a><span class="lineno"> 2940</span> }</div>
+<div class="line"><a name="l02941"></a><span class="lineno"> 2941</span> }</div>
+<div class="line"><a name="l02942"></a><span class="lineno"> 2942</span> }</div>
+<div class="line"><a name="l02943"></a><span class="lineno"> 2943</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02944"></a><span class="lineno"> 2944</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l02945"></a><span class="lineno"> 2945</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_trafo_2d_B(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l02946"></a><span class="lineno"> 2946</span> {</div>
+<div class="line"><a name="l02947"></a><span class="lineno"> 2947</span> <span class="keyword">const</span> C *g = (C*)ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>;</div>
+<div class="line"><a name="l02948"></a><span class="lineno"> 2948</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N0 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];</div>
+<div class="line"><a name="l02949"></a><span class="lineno"> 2949</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n0 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0];</div>
+<div class="line"><a name="l02950"></a><span class="lineno"> 2950</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N1 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];</div>
+<div class="line"><a name="l02951"></a><span class="lineno"> 2951</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n1 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[1];</div>
+<div class="line"><a name="l02952"></a><span class="lineno"> 2952</span> <span class="keyword">const</span> <span class="keywordtype">int</span> M = ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l02953"></a><span class="lineno"> 2953</span> <span class="keyword">const</span> <span class="keywordtype">int</span> m = ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>;</div>
+<div class="line"><a name="l02954"></a><span class="lineno"> 2954</span> </div>
+<div class="line"><a name="l02955"></a><span class="lineno"> 2955</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l02956"></a><span class="lineno"> 2956</span> </div>
+<div class="line"><a name="l02957"></a><span class="lineno"> 2957</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l02958"></a><span class="lineno"> 2958</span> {</div>
+<div class="line"><a name="l02959"></a><span class="lineno"> 2959</span> <span class="keyword">const</span> <span class="keywordtype">int</span> lprod = (2*m+2) * (2*m+2);</div>
+<div class="line"><a name="l02960"></a><span class="lineno"> 2960</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02961"></a><span class="lineno"> 2961</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02962"></a><span class="lineno"> 2962</span> {</div>
+<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = K(0.0);</div>
+<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span> <span class="keywordflow">for</span> (l = 0; l < lprod; l++)</div>
+<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[j*lprod+l] * g[ths-><a class="code" href="structnfft_ [...]
+<div class="line"><a name="l02968"></a><span class="lineno"> 2968</span> }</div>
+<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span> } <span class="comment">/* if(PRE_FULL_PSI) */</span></div>
+<div class="line"><a name="l02971"></a><span class="lineno"> 2971</span> </div>
+<div class="line"><a name="l02972"></a><span class="lineno"> 2972</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l02973"></a><span class="lineno"> 2973</span> {</div>
+<div class="line"><a name="l02974"></a><span class="lineno"> 2974</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02975"></a><span class="lineno"> 2975</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02976"></a><span class="lineno"> 2976</span> {</div>
+<div class="line"><a name="l02977"></a><span class="lineno"> 2977</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02978"></a><span class="lineno"> 2978</span> nfft_trafo_2d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>+j*2*(2*m+2), ths-><a class="code" [...]
+<div class="line"><a name="l02979"></a><span class="lineno"> 2979</span> }</div>
+<div class="line"><a name="l02980"></a><span class="lineno"> 2980</span> </div>
+<div class="line"><a name="l02981"></a><span class="lineno"> 2981</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span> } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span> </div>
+<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span> {</div>
+<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span> R fg_exp_l[2*(2*m+2)];</div>
+<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span> </div>
+<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span> nfft_2d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l02989"></a><span class="lineno"> 2989</span> nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l02990"></a><span class="lineno"> 2990</span> </div>
+<div class="line"><a name="l02991"></a><span class="lineno"> 2991</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l02992"></a><span class="lineno"> 2992</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l02993"></a><span class="lineno"> 2993</span> {</div>
+<div class="line"><a name="l02994"></a><span class="lineno"> 2994</span> R psij_const[2*(2*m+2)];</div>
+<div class="line"><a name="l02995"></a><span class="lineno"> 2995</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l02996"></a><span class="lineno"> 2996</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l02997"></a><span class="lineno"> 2997</span> R fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*j*2];</div>
+<div class="line"><a name="l02998"></a><span class="lineno"> 2998</span> R fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*j*2+1];</div>
+<div class="line"><a name="l02999"></a><span class="lineno"> 2999</span> R fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l03000"></a><span class="lineno"> 3000</span> </div>
+<div class="line"><a name="l03001"></a><span class="lineno"> 3001</span> psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l03002"></a><span class="lineno"> 3002</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span> {</div>
+<div class="line"><a name="l03004"></a><span class="lineno"> 3004</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l03005"></a><span class="lineno"> 3005</span> psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];</div>
+<div class="line"><a name="l03006"></a><span class="lineno"> 3006</span> }</div>
+<div class="line"><a name="l03007"></a><span class="lineno"> 3007</span> </div>
+<div class="line"><a name="l03008"></a><span class="lineno"> 3008</span> fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*2+1)];</div>
+<div class="line"><a name="l03009"></a><span class="lineno"> 3009</span> fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*2+1)+1];</div>
+<div class="line"><a name="l03010"></a><span class="lineno"> 3010</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l03011"></a><span class="lineno"> 3011</span> psij_const[2*m+2] = fg_psij0;</div>
+<div class="line"><a name="l03012"></a><span class="lineno"> 3012</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l03013"></a><span class="lineno"> 3013</span> {</div>
+<div class="line"><a name="l03014"></a><span class="lineno"> 3014</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l03015"></a><span class="lineno"> 3015</span> psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];</div>
+<div class="line"><a name="l03016"></a><span class="lineno"> 3016</span> }</div>
+<div class="line"><a name="l03017"></a><span class="lineno"> 3017</span> </div>
+<div class="line"><a name="l03018"></a><span class="lineno"> 3018</span> nfft_trafo_2d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>+2*j, ths-><a class="code" href="struc [...]
+<div class="line"><a name="l03019"></a><span class="lineno"> 3019</span> }</div>
+<div class="line"><a name="l03020"></a><span class="lineno"> 3020</span> </div>
+<div class="line"><a name="l03021"></a><span class="lineno"> 3021</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03022"></a><span class="lineno"> 3022</span> } <span class="comment">/* if(PRE_FG_PSI) */</span></div>
+<div class="line"><a name="l03023"></a><span class="lineno"> 3023</span> </div>
+<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FG_PSI)</div>
+<div class="line"><a name="l03025"></a><span class="lineno"> 3025</span> {</div>
+<div class="line"><a name="l03026"></a><span class="lineno"> 3026</span> R fg_exp_l[2*(2*m+2)];</div>
+<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span> </div>
+<div class="line"><a name="l03028"></a><span class="lineno"> 3028</span> nfft_2d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l03029"></a><span class="lineno"> 3029</span> nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l03030"></a><span class="lineno"> 3030</span> </div>
+<div class="line"><a name="l03031"></a><span class="lineno"> 3031</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l03032"></a><span class="lineno"> 3032</span> </div>
+<div class="line"><a name="l03033"></a><span class="lineno"> 3033</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l03034"></a><span class="lineno"> 3034</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l03035"></a><span class="lineno"> 3035</span> {</div>
+<div class="line"><a name="l03036"></a><span class="lineno"> 3036</span> <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l03037"></a><span class="lineno"> 3037</span> R fg_psij0, fg_psij1, fg_psij2;</div>
+<div class="line"><a name="l03038"></a><span class="lineno"> 3038</span> R psij_const[2*(2*m+2)];</div>
+<div class="line"><a name="l03039"></a><span class="lineno"> 3039</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l03040"></a><span class="lineno"> 3040</span> </div>
+<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span> nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l03042"></a><span class="lineno"> 3042</span> fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j]-((R)u)/n0,0));</div>
+<div class="line"><a name="l03043"></a><span class="lineno"> 3043</span> fg_psij1 = EXP(K(2.0)*(n0*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l03044"></a><span class="lineno"> 3044</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l03045"></a><span class="lineno"> 3045</span> psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l03046"></a><span class="lineno"> 3046</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l03047"></a><span class="lineno"> 3047</span> {</div>
+<div class="line"><a name="l03048"></a><span class="lineno"> 3048</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l03049"></a><span class="lineno"> 3049</span> psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];</div>
+<div class="line"><a name="l03050"></a><span class="lineno"> 3050</span> }</div>
+<div class="line"><a name="l03051"></a><span class="lineno"> 3051</span> </div>
+<div class="line"><a name="l03052"></a><span class="lineno"> 3052</span> nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l03053"></a><span class="lineno"> 3053</span> fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1]-((R)u)/n1,1));</div>
+<div class="line"><a name="l03054"></a><span class="lineno"> 3054</span> fg_psij1 = EXP(K(2.0)*(n1*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l03056"></a><span class="lineno"> 3056</span> psij_const[2*m+2] = fg_psij0;</div>
+<div class="line"><a name="l03057"></a><span class="lineno"> 3057</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span> {</div>
+<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l03060"></a><span class="lineno"> 3060</span> psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];</div>
+<div class="line"><a name="l03061"></a><span class="lineno"> 3061</span> }</div>
+<div class="line"><a name="l03062"></a><span class="lineno"> 3062</span> </div>
+<div class="line"><a name="l03063"></a><span class="lineno"> 3063</span> nfft_trafo_2d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>+2*j, ths-><a class="code" href="struc [...]
+<div class="line"><a name="l03064"></a><span class="lineno"> 3064</span> }</div>
+<div class="line"><a name="l03065"></a><span class="lineno"> 3065</span> </div>
+<div class="line"><a name="l03066"></a><span class="lineno"> 3066</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03067"></a><span class="lineno"> 3067</span> } <span class="comment">/* if(FG_PSI) */</span></div>
+<div class="line"><a name="l03068"></a><span class="lineno"> 3068</span> </div>
+<div class="line"><a name="l03069"></a><span class="lineno"> 3069</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l03070"></a><span class="lineno"> 3070</span> {</div>
+<div class="line"><a name="l03071"></a><span class="lineno"> 3071</span> <span class="keyword">const</span> <span class="keywordtype">int</span> K = ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>, ip_s = K / (m + 2);</div>
+<div class="line"><a name="l03072"></a><span class="lineno"> 3072</span> </div>
+<div class="line"><a name="l03073"></a><span class="lineno"> 3073</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l03074"></a><span class="lineno"> 3074</span> </div>
+<div class="line"><a name="l03075"></a><span class="lineno"> 3075</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l03076"></a><span class="lineno"> 3076</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l03077"></a><span class="lineno"> 3077</span> {</div>
+<div class="line"><a name="l03078"></a><span class="lineno"> 3078</span> <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l03079"></a><span class="lineno"> 3079</span> R ip_y, ip_w;</div>
+<div class="line"><a name="l03080"></a><span class="lineno"> 3080</span> <span class="keywordtype">int</span> ip_u;</div>
+<div class="line"><a name="l03081"></a><span class="lineno"> 3081</span> R psij_const[2*(2*m+2)];</div>
+<div class="line"><a name="l03082"></a><span class="lineno"> 3082</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l03083"></a><span class="lineno"> 3083</span> </div>
+<div class="line"><a name="l03084"></a><span class="lineno"> 3084</span> nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l03085"></a><span class="lineno"> 3085</span> ip_y = FABS(n0*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j] - u)*((R)ip_s);</div>
+<div class="line"><a name="l03086"></a><span class="lineno"> 3086</span> ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l03087"></a><span class="lineno"> 3087</span> ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l03088"></a><span class="lineno"> 3088</span> <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l03089"></a><span class="lineno"> 3089</span> psij_const[l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme. [...]
+<div class="line"><a name="l03090"></a><span class="lineno"> 3090</span> </div>
+<div class="line"><a name="l03091"></a><span class="lineno"> 3091</span> nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l03092"></a><span class="lineno"> 3092</span> ip_y = FABS(n1*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1] - u)*((R)ip_s);</div>
+<div class="line"><a name="l03093"></a><span class="lineno"> 3093</span> ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l03094"></a><span class="lineno"> 3094</span> ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l03095"></a><span class="lineno"> 3095</span> <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l03096"></a><span class="lineno"> 3096</span> psij_const[2*m+2+l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputa [...]
+<div class="line"><a name="l03097"></a><span class="lineno"> 3097</span> </div>
+<div class="line"><a name="l03098"></a><span class="lineno"> 3098</span> nfft_trafo_2d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>+2*j, ths-><a class="code" href="struc [...]
+<div class="line"><a name="l03099"></a><span class="lineno"> 3099</span> }</div>
+<div class="line"><a name="l03100"></a><span class="lineno"> 3100</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03101"></a><span class="lineno"> 3101</span> } <span class="comment">/* if(PRE_LIN_PSI) */</span></div>
+<div class="line"><a name="l03102"></a><span class="lineno"> 3102</span> </div>
+<div class="line"><a name="l03103"></a><span class="lineno"> 3103</span> <span class="comment">/* no precomputed psi at all */</span></div>
+<div class="line"><a name="l03104"></a><span class="lineno"> 3104</span> </div>
+<div class="line"><a name="l03105"></a><span class="lineno"> 3105</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l03106"></a><span class="lineno"> 3106</span> </div>
+<div class="line"><a name="l03107"></a><span class="lineno"> 3107</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l03108"></a><span class="lineno"> 3108</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l03109"></a><span class="lineno"> 3109</span> {</div>
+<div class="line"><a name="l03110"></a><span class="lineno"> 3110</span> R psij_const[2*(2*m+2)];</div>
+<div class="line"><a name="l03111"></a><span class="lineno"> 3111</span> <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l03112"></a><span class="lineno"> 3112</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when [...]
+<div class="line"><a name="l03113"></a><span class="lineno"> 3113</span> </div>
+<div class="line"><a name="l03114"></a><span class="lineno"> 3114</span> nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l03115"></a><span class="lineno"> 3115</span> <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l03116"></a><span class="lineno"> 3116</span> psij_const[l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j]-((R)((u+l)))/n0,0));</div>
+<div class="line"><a name="l03117"></a><span class="lineno"> 3117</span> </div>
+<div class="line"><a name="l03118"></a><span class="lineno"> 3118</span> nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l03119"></a><span class="lineno"> 3119</span> <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l03120"></a><span class="lineno"> 3120</span> psij_const[2*m+2+l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1]-((R)((u+l)))/n1,1));</div>
+<div class="line"><a name="l03121"></a><span class="lineno"> 3121</span> </div>
+<div class="line"><a name="l03122"></a><span class="lineno"> 3122</span> nfft_trafo_2d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>+2*j, ths-><a class="code" href="structn [...]
+<div class="line"><a name="l03123"></a><span class="lineno"> 3123</span> }</div>
+<div class="line"><a name="l03124"></a><span class="lineno"> 3124</span> }</div>
+<div class="line"><a name="l03125"></a><span class="lineno"> 3125</span> </div>
+<div class="line"><a name="l03126"></a><span class="lineno"> 3126</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l03127"></a><span class="lineno"> 3127</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A \</span></div>
+<div class="line"><a name="l03128"></a><span class="lineno"> 3128</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l03129"></a><span class="lineno"> 3129</span> <span class="preprocessor"> assert(ar_x[2*k] >= min_u_a || k == M-1); \</span></div>
+<div class="line"><a name="l03130"></a><span class="lineno"> 3130</span> <span class="preprocessor"> if (k > 0) \</span></div>
+<div class="line"><a name="l03131"></a><span class="lineno"> 3131</span> <span class="preprocessor"> assert(ar_x[2*k-2] < min_u_a); \</span></div>
+<div class="line"><a name="l03132"></a><span class="lineno"> 3132</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l03133"></a><span class="lineno"> 3133</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l03134"></a><span class="lineno"> 3134</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A</span></div>
+<div class="line"><a name="l03135"></a><span class="lineno"> 3135</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03136"></a><span class="lineno"> 3136</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03137"></a><span class="lineno"> 3137</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l03138"></a><span class="lineno"> 3138</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B \</span></div>
+<div class="line"><a name="l03139"></a><span class="lineno"> 3139</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l03140"></a><span class="lineno"> 3140</span> <span class="preprocessor"> assert(ar_x[2*k] >= min_u_b || k == M-1); \</span></div>
+<div class="line"><a name="l03141"></a><span class="lineno"> 3141</span> <span class="preprocessor"> if (k > 0) \</span></div>
+<div class="line"><a name="l03142"></a><span class="lineno"> 3142</span> <span class="preprocessor"> assert(ar_x[2*k-2] < min_u_b); \</span></div>
+<div class="line"><a name="l03143"></a><span class="lineno"> 3143</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l03144"></a><span class="lineno"> 3144</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l03145"></a><span class="lineno"> 3145</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B</span></div>
+<div class="line"><a name="l03146"></a><span class="lineno"> 3146</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03147"></a><span class="lineno"> 3147</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03148"></a><span class="lineno"> 3148</span> <span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI \</span></div>
+<div class="line"><a name="l03149"></a><span class="lineno"> 3149</span> <span class="preprocessor"> nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g, \</span></div>
+<div class="line"><a name="l03150"></a><span class="lineno"> 3150</span> <span class="preprocessor"> ths->psi+j*2*(2*m+2), ths->psi+(j*2+1)*(2*m+2), \</span></div>
+<div class="line"><a name="l03151"></a><span class="lineno"> 3151</span> <span class="preprocessor"> ths->x+2*j, ths->x+2*j+1, n0, n1, m, my_u0, my_o0);</span></div>
+<div class="line"><a name="l03152"></a><span class="lineno"> 3152</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03153"></a><span class="lineno"> 3153</span> <span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI \</span></div>
+<div class="line"><a name="l03154"></a><span class="lineno"> 3154</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l03155"></a><span class="lineno"> 3155</span> <span class="preprocessor"> R psij_const[2*(2*m+2)]; \</span></div>
+<div class="line"><a name="l03156"></a><span class="lineno"> 3156</span> <span class="preprocessor"> int u, o, l; \</span></div>
+<div class="line"><a name="l03157"></a><span class="lineno"> 3157</span> <span class="preprocessor"> R fg_psij0 = ths->psi[2*j*2]; \</span></div>
+<div class="line"><a name="l03158"></a><span class="lineno"> 3158</span> <span class="preprocessor"> R fg_psij1 = ths->psi[2*j*2+1]; \</span></div>
+<div class="line"><a name="l03159"></a><span class="lineno"> 3159</span> <span class="preprocessor"> R fg_psij2 = K(1.0); \</span></div>
+<div class="line"><a name="l03160"></a><span class="lineno"> 3160</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03161"></a><span class="lineno"> 3161</span> <span class="preprocessor"> psij_const[0] = fg_psij0; \</span></div>
+<div class="line"><a name="l03162"></a><span class="lineno"> 3162</span> <span class="preprocessor"> for(l=1; l<=2*m+1; l++) \</span></div>
+<div class="line"><a name="l03163"></a><span class="lineno"> 3163</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l03164"></a><span class="lineno"> 3164</span> <span class="preprocessor"> fg_psij2 *= fg_psij1; \</span></div>
+<div class="line"><a name="l03165"></a><span class="lineno"> 3165</span> <span class="preprocessor"> psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l]; \</span></div>
+<div class="line"><a name="l03166"></a><span class="lineno"> 3166</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l03167"></a><span class="lineno"> 3167</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03168"></a><span class="lineno"> 3168</span> <span class="preprocessor"> fg_psij0 = ths->psi[2*(j*2+1)]; \</span></div>
+<div class="line"><a name="l03169"></a><span class="lineno"> 3169</span> <span class="preprocessor"> fg_psij1 = ths->psi[2*(j*2+1)+1]; \</span></div>
+<div class="line"><a name="l03170"></a><span class="lineno"> 3170</span> <span class="preprocessor"> fg_psij2 = K(1.0); \</span></div>
+<div class="line"><a name="l03171"></a><span class="lineno"> 3171</span> <span class="preprocessor"> psij_const[2*m+2] = fg_psij0; \</span></div>
+<div class="line"><a name="l03172"></a><span class="lineno"> 3172</span> <span class="preprocessor"> for(l=1; l<=2*m+1; l++) \</span></div>
+<div class="line"><a name="l03173"></a><span class="lineno"> 3173</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l03174"></a><span class="lineno"> 3174</span> <span class="preprocessor"> fg_psij2 *= fg_psij1; \</span></div>
+<div class="line"><a name="l03175"></a><span class="lineno"> 3175</span> <span class="preprocessor"> psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l]; \</span></div>
+<div class="line"><a name="l03176"></a><span class="lineno"> 3176</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l03177"></a><span class="lineno"> 3177</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03178"></a><span class="lineno"> 3178</span> <span class="preprocessor"> nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g, \</span></div>
+<div class="line"><a name="l03179"></a><span class="lineno"> 3179</span> <span class="preprocessor"> psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, \</span></div>
+<div class="line"><a name="l03180"></a><span class="lineno"> 3180</span> <span class="preprocessor"> n0, n1, m, my_u0, my_o0); \</span></div>
+<div class="line"><a name="l03181"></a><span class="lineno"> 3181</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l03182"></a><span class="lineno"> 3182</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03183"></a><span class="lineno"> 3183</span> <span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI \</span></div>
+<div class="line"><a name="l03184"></a><span class="lineno"> 3184</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l03185"></a><span class="lineno"> 3185</span> <span class="preprocessor"> R psij_const[2*(2*m+2)]; \</span></div>
+<div class="line"><a name="l03186"></a><span class="lineno"> 3186</span> <span class="preprocessor"> R fg_psij0, fg_psij1, fg_psij2; \</span></div>
+<div class="line"><a name="l03187"></a><span class="lineno"> 3187</span> <span class="preprocessor"> int u, o, l; \</span></div>
+<div class="line"><a name="l03188"></a><span class="lineno"> 3188</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03189"></a><span class="lineno"> 3189</span> <span class="preprocessor"> nfft_uo(ths,j,&u,&o,0); \</span></div>
+<div class="line"><a name="l03190"></a><span class="lineno"> 3190</span> <span class="preprocessor"> fg_psij0 = (PHI(ths->x[2*j]-((R)u)/n0,0)); \</span></div>
+<div class="line"><a name="l03191"></a><span class="lineno"> 3191</span> <span class="preprocessor"> fg_psij1 = EXP(K(2.0)*(n0*(ths->x[2*j]) - u)/ths->b[0]); \</span></div>
+<div class="line"><a name="l03192"></a><span class="lineno"> 3192</span> <span class="preprocessor"> fg_psij2 = K(1.0); \</span></div>
+<div class="line"><a name="l03193"></a><span class="lineno"> 3193</span> <span class="preprocessor"> psij_const[0] = fg_psij0; \</span></div>
+<div class="line"><a name="l03194"></a><span class="lineno"> 3194</span> <span class="preprocessor"> for(l=1; l<=2*m+1; l++) \</span></div>
+<div class="line"><a name="l03195"></a><span class="lineno"> 3195</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l03196"></a><span class="lineno"> 3196</span> <span class="preprocessor"> fg_psij2 *= fg_psij1; \</span></div>
+<div class="line"><a name="l03197"></a><span class="lineno"> 3197</span> <span class="preprocessor"> psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l]; \</span></div>
+<div class="line"><a name="l03198"></a><span class="lineno"> 3198</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l03199"></a><span class="lineno"> 3199</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03200"></a><span class="lineno"> 3200</span> <span class="preprocessor"> nfft_uo(ths,j,&u,&o,1); \</span></div>
+<div class="line"><a name="l03201"></a><span class="lineno"> 3201</span> <span class="preprocessor"> fg_psij0 = (PHI(ths->x[2*j+1]-((R)u)/n1,1)); \</span></div>
+<div class="line"><a name="l03202"></a><span class="lineno"> 3202</span> <span class="preprocessor"> fg_psij1 = EXP(K(2.0)*(n1*(ths->x[2*j+1]) - u)/ths->b[1]); \</span></div>
+<div class="line"><a name="l03203"></a><span class="lineno"> 3203</span> <span class="preprocessor"> fg_psij2 = K(1.0); \</span></div>
+<div class="line"><a name="l03204"></a><span class="lineno"> 3204</span> <span class="preprocessor"> psij_const[2*m+2] = fg_psij0; \</span></div>
+<div class="line"><a name="l03205"></a><span class="lineno"> 3205</span> <span class="preprocessor"> for(l=1; l<=2*m+1; l++) \</span></div>
+<div class="line"><a name="l03206"></a><span class="lineno"> 3206</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l03207"></a><span class="lineno"> 3207</span> <span class="preprocessor"> fg_psij2 *= fg_psij1; \</span></div>
+<div class="line"><a name="l03208"></a><span class="lineno"> 3208</span> <span class="preprocessor"> psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l]; \</span></div>
+<div class="line"><a name="l03209"></a><span class="lineno"> 3209</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l03210"></a><span class="lineno"> 3210</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03211"></a><span class="lineno"> 3211</span> <span class="preprocessor"> nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g, \</span></div>
+<div class="line"><a name="l03212"></a><span class="lineno"> 3212</span> <span class="preprocessor"> psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, \</span></div>
+<div class="line"><a name="l03213"></a><span class="lineno"> 3213</span> <span class="preprocessor"> n0, n1, m, my_u0, my_o0); \</span></div>
+<div class="line"><a name="l03214"></a><span class="lineno"> 3214</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l03215"></a><span class="lineno"> 3215</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03216"></a><span class="lineno"> 3216</span> <span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI \</span></div>
+<div class="line"><a name="l03217"></a><span class="lineno"> 3217</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l03218"></a><span class="lineno"> 3218</span> <span class="preprocessor"> R psij_const[2*(2*m+2)]; \</span></div>
+<div class="line"><a name="l03219"></a><span class="lineno"> 3219</span> <span class="preprocessor"> int u, o, l; \</span></div>
+<div class="line"><a name="l03220"></a><span class="lineno"> 3220</span> <span class="preprocessor"> int ip_u; \</span></div>
+<div class="line"><a name="l03221"></a><span class="lineno"> 3221</span> <span class="preprocessor"> R ip_y, ip_w; \</span></div>
+<div class="line"><a name="l03222"></a><span class="lineno"> 3222</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03223"></a><span class="lineno"> 3223</span> <span class="preprocessor"> nfft_uo(ths,j,&u,&o,0); \</span></div>
+<div class="line"><a name="l03224"></a><span class="lineno"> 3224</span> <span class="preprocessor"> ip_y = FABS(n0*(ths->x[2*j]) - u)*((R)ip_s); \</span></div>
+<div class="line"><a name="l03225"></a><span class="lineno"> 3225</span> <span class="preprocessor"> ip_u = LRINT(FLOOR(ip_y)); \</span></div>
+<div class="line"><a name="l03226"></a><span class="lineno"> 3226</span> <span class="preprocessor"> ip_w = ip_y-ip_u; \</span></div>
+<div class="line"><a name="l03227"></a><span class="lineno"> 3227</span> <span class="preprocessor"> for(l=0; l < 2*m+2; l++) \</span></div>
+<div class="line"><a name="l03228"></a><span class="lineno"> 3228</span> <span class="preprocessor"> psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \</span></div>
+<div class="line"><a name="l03229"></a><span class="lineno"> 3229</span> <span class="preprocessor"> ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w); \</span></div>
+<div class="line"><a name="l03230"></a><span class="lineno"> 3230</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03231"></a><span class="lineno"> 3231</span> <span class="preprocessor"> nfft_uo(ths,j,&u,&o,1); \</span></div>
+<div class="line"><a name="l03232"></a><span class="lineno"> 3232</span> <span class="preprocessor"> ip_y = FABS(n1*(ths->x[2*j+1]) - u)*((R)ip_s); \</span></div>
+<div class="line"><a name="l03233"></a><span class="lineno"> 3233</span> <span class="preprocessor"> ip_u = LRINT(FLOOR(ip_y)); \</span></div>
+<div class="line"><a name="l03234"></a><span class="lineno"> 3234</span> <span class="preprocessor"> ip_w = ip_y-ip_u; \</span></div>
+<div class="line"><a name="l03235"></a><span class="lineno"> 3235</span> <span class="preprocessor"> for(l=0; l < 2*m+2; l++) \</span></div>
+<div class="line"><a name="l03236"></a><span class="lineno"> 3236</span> <span class="preprocessor"> psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \</span></div>
+<div class="line"><a name="l03237"></a><span class="lineno"> 3237</span> <span class="preprocessor"> ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w); \</span></div>
+<div class="line"><a name="l03238"></a><span class="lineno"> 3238</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03239"></a><span class="lineno"> 3239</span> <span class="preprocessor"> nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g, \</span></div>
+<div class="line"><a name="l03240"></a><span class="lineno"> 3240</span> <span class="preprocessor"> psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, \</span></div>
+<div class="line"><a name="l03241"></a><span class="lineno"> 3241</span> <span class="preprocessor"> n0, n1, m, my_u0, my_o0); \</span></div>
+<div class="line"><a name="l03242"></a><span class="lineno"> 3242</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l03243"></a><span class="lineno"> 3243</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03244"></a><span class="lineno"> 3244</span> <span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI \</span></div>
+<div class="line"><a name="l03245"></a><span class="lineno"> 3245</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l03246"></a><span class="lineno"> 3246</span> <span class="preprocessor"> R psij_const[2*(2*m+2)]; \</span></div>
+<div class="line"><a name="l03247"></a><span class="lineno"> 3247</span> <span class="preprocessor"> int u, o, l; \</span></div>
+<div class="line"><a name="l03248"></a><span class="lineno"> 3248</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03249"></a><span class="lineno"> 3249</span> <span class="preprocessor"> nfft_uo(ths,j,&u,&o,0); \</span></div>
+<div class="line"><a name="l03250"></a><span class="lineno"> 3250</span> <span class="preprocessor"> for(l=0;l<=2*m+1;l++) \</span></div>
+<div class="line"><a name="l03251"></a><span class="lineno"> 3251</span> <span class="preprocessor"> psij_const[l]=(PHI(ths->x[2*j]-((R)((u+l)))/n0,0)); \</span></div>
+<div class="line"><a name="l03252"></a><span class="lineno"> 3252</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03253"></a><span class="lineno"> 3253</span> <span class="preprocessor"> nfft_uo(ths,j,&u,&o,1); \</span></div>
+<div class="line"><a name="l03254"></a><span class="lineno"> 3254</span> <span class="preprocessor"> for(l=0;l<=2*m+1;l++) \</span></div>
+<div class="line"><a name="l03255"></a><span class="lineno"> 3255</span> <span class="preprocessor"> psij_const[2*m+2+l]=(PHI(ths->x[2*j+1]-((R)((u+l)))/n1,1)); \</span></div>
+<div class="line"><a name="l03256"></a><span class="lineno"> 3256</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03257"></a><span class="lineno"> 3257</span> <span class="preprocessor"> nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g, \</span></div>
+<div class="line"><a name="l03258"></a><span class="lineno"> 3258</span> <span class="preprocessor"> psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, \</span></div>
+<div class="line"><a name="l03259"></a><span class="lineno"> 3259</span> <span class="preprocessor"> n0, n1, m, my_u0, my_o0); \</span></div>
+<div class="line"><a name="l03260"></a><span class="lineno"> 3260</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l03261"></a><span class="lineno"> 3261</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03262"></a><span class="lineno"> 3262</span> <span class="preprocessor">#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(whichone) \</span></div>
+<div class="line"><a name="l03263"></a><span class="lineno"> 3263</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l03264"></a><span class="lineno"> 3264</span> <span class="preprocessor"> if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT) \</span></div>
+<div class="line"><a name="l03265"></a><span class="lineno"> 3265</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l03266"></a><span class="lineno"> 3266</span> <span class="preprocessor"> _Pragma("omp parallel private(k)") \</span></div>
+<div class="line"><a name="l03267"></a><span class="lineno"> 3267</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l03268"></a><span class="lineno"> 3268</span> <span class="preprocessor"> int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b; \</span></div>
+<div class="line"><a name="l03269"></a><span class="lineno"> 3269</span> <span class="preprocessor"> int *ar_x = ths->index_x; \</span></div>
+<div class="line"><a name="l03270"></a><span class="lineno"> 3270</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03271"></a><span class="lineno"> 3271</span> <span class="preprocessor"> nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, \</span></div>
+<div class="line"><a name="l03272"></a><span class="lineno"> 3272</span> <span class="preprocessor"> &min_u_b, &max_u_b, 2, ths->n, m); \</span></div>
+<div class="line"><a name="l03273"></a><span class="lineno"> 3273</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03274"></a><span class="lineno"> 3274</span> <span class="preprocessor"> if (min_u_a != -1) \</span></div>
+<div class="line"><a name="l03275"></a><span class="lineno"> 3275</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l03276"></a><span class="lineno"> 3276</span> <span class="preprocessor"> k = index_x_binary_search(ar_x, M, min_u_a); \</span></div>
+<div class="line"><a name="l03277"></a><span class="lineno"> 3277</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03278"></a><span class="lineno"> 3278</span> <span class="preprocessor"> MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A \</span></div>
+<div class="line"><a name="l03279"></a><span class="lineno"> 3279</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03280"></a><span class="lineno"> 3280</span> <span class="preprocessor"> while (k < M) \</span></div>
+<div class="line"><a name="l03281"></a><span class="lineno"> 3281</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l03282"></a><span class="lineno"> 3282</span> <span class="preprocessor"> int u_prod = ar_x[2*k]; \</span></div>
+<div class="line"><a name="l03283"></a><span class="lineno"> 3283</span> <span class="preprocessor"> int j = ar_x[2*k+1]; \</span></div>
+<div class="line"><a name="l03284"></a><span class="lineno"> 3284</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03285"></a><span class="lineno"> 3285</span> <span class="preprocessor"> if (u_prod < min_u_a || u_prod > max_u_a) \</span></div>
+<div class="line"><a name="l03286"></a><span class="lineno"> 3286</span> <span class="preprocessor"> break; \</span></div>
+<div class="line"><a name="l03287"></a><span class="lineno"> 3287</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03288"></a><span class="lineno"> 3288</span> <span class="preprocessor"> MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \</span></div>
+<div class="line"><a name="l03289"></a><span class="lineno"> 3289</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03290"></a><span class="lineno"> 3290</span> <span class="preprocessor"> k++; \</span></div>
+<div class="line"><a name="l03291"></a><span class="lineno"> 3291</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l03292"></a><span class="lineno"> 3292</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l03293"></a><span class="lineno"> 3293</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03294"></a><span class="lineno"> 3294</span> <span class="preprocessor"> if (min_u_b != -1) \</span></div>
+<div class="line"><a name="l03295"></a><span class="lineno"> 3295</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l03296"></a><span class="lineno"> 3296</span> <span class="preprocessor"> int k = index_x_binary_search(ar_x, M, min_u_b); \</span></div>
+<div class="line"><a name="l03297"></a><span class="lineno"> 3297</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03298"></a><span class="lineno"> 3298</span> <span class="preprocessor"> MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B \</span></div>
+<div class="line"><a name="l03299"></a><span class="lineno"> 3299</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03300"></a><span class="lineno"> 3300</span> <span class="preprocessor"> while (k < M) \</span></div>
+<div class="line"><a name="l03301"></a><span class="lineno"> 3301</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l03302"></a><span class="lineno"> 3302</span> <span class="preprocessor"> int u_prod = ar_x[2*k]; \</span></div>
+<div class="line"><a name="l03303"></a><span class="lineno"> 3303</span> <span class="preprocessor"> int j = ar_x[2*k+1]; \</span></div>
+<div class="line"><a name="l03304"></a><span class="lineno"> 3304</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03305"></a><span class="lineno"> 3305</span> <span class="preprocessor"> if (u_prod < min_u_b || u_prod > max_u_b) \</span></div>
+<div class="line"><a name="l03306"></a><span class="lineno"> 3306</span> <span class="preprocessor"> break; \</span></div>
+<div class="line"><a name="l03307"></a><span class="lineno"> 3307</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03308"></a><span class="lineno"> 3308</span> <span class="preprocessor"> MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \</span></div>
+<div class="line"><a name="l03309"></a><span class="lineno"> 3309</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03310"></a><span class="lineno"> 3310</span> <span class="preprocessor"> k++; \</span></div>
+<div class="line"><a name="l03311"></a><span class="lineno"> 3311</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l03312"></a><span class="lineno"> 3312</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l03313"></a><span class="lineno"> 3313</span> <span class="preprocessor"> } </span><span class="comment">/* omp parallel */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03314"></a><span class="lineno"> 3314</span> <span class="preprocessor"> return; \</span></div>
+<div class="line"><a name="l03315"></a><span class="lineno"> 3315</span> <span class="preprocessor"> } </span><span class="comment">/* if(NFFT_OMP_BLOCKWISE_ADJOINT) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l03316"></a><span class="lineno"> 3316</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l03317"></a><span class="lineno"> 3317</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03318"></a><span class="lineno"> 3318</span> </div>
+<div class="line"><a name="l03319"></a><span class="lineno"> 3319</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_2d_B(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l03320"></a><span class="lineno"> 3320</span> {</div>
+<div class="line"><a name="l03321"></a><span class="lineno"> 3321</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N0 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];</div>
+<div class="line"><a name="l03322"></a><span class="lineno"> 3322</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n0 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0];</div>
+<div class="line"><a name="l03323"></a><span class="lineno"> 3323</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N1 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];</div>
+<div class="line"><a name="l03324"></a><span class="lineno"> 3324</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n1 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[1];</div>
+<div class="line"><a name="l03325"></a><span class="lineno"> 3325</span> <span class="keyword">const</span> <span class="keywordtype">int</span> M = ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l03326"></a><span class="lineno"> 3326</span> <span class="keyword">const</span> <span class="keywordtype">int</span> m = ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>;</div>
+<div class="line"><a name="l03327"></a><span class="lineno"> 3327</span> C* g = (C*) ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>;</div>
+<div class="line"><a name="l03328"></a><span class="lineno"> 3328</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l03329"></a><span class="lineno"> 3329</span> </div>
+<div class="line"><a name="l03330"></a><span class="lineno"> 3330</span> memset(g,0,ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l03331"></a><span class="lineno"> 3331</span> </div>
+<div class="line"><a name="l03332"></a><span class="lineno"> 3332</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l03333"></a><span class="lineno"> 3333</span> {</div>
+<div class="line"><a name="l03334"></a><span class="lineno"> 3334</span> nfft_adjoint_B_compute_full_psi(g, ths-><a class="code" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_g</a>, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>, ths-><a class="code" href= [...]
+<div class="line"><a name="l03335"></a><span class="lineno"> 3335</span> 2, ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>, m, ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a>, ths-><a cl [...]
+<div class="line"><a name="l03336"></a><span class="lineno"> 3336</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03337"></a><span class="lineno"> 3337</span> } <span class="comment">/* if(PRE_FULL_PSI) */</span></div>
+<div class="line"><a name="l03338"></a><span class="lineno"> 3338</span> </div>
+<div class="line"><a name="l03339"></a><span class="lineno"> 3339</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l03340"></a><span class="lineno"> 3340</span> {</div>
+<div class="line"><a name="l03341"></a><span class="lineno"> 3341</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03342"></a><span class="lineno"> 3342</span> <span class="preprocessor"></span> MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(PRE_PSI)</div>
+<div class="line"><a name="l03343"></a><span class="lineno"> 3343</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03344"></a><span class="lineno"> 3344</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03345"></a><span class="lineno"> 3345</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l03346"></a><span class="lineno"> 3346</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l03347"></a><span class="lineno"> 3347</span> {</div>
+<div class="line"><a name="l03348"></a><span class="lineno"> 3348</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l03349"></a><span class="lineno"> 3349</span> #ifdef _OPENMP</div>
+<div class="line"><a name="l03350"></a><span class="lineno"> 3350</span> nfft_adjoint_2d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>+j*2*(2*m+2), ths->< [...]
+<div class="line"><a name="l03351"></a><span class="lineno"> 3351</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l03352"></a><span class="lineno"> 3352</span> <span class="preprocessor"></span> nfft_adjoint_2d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">p [...]
+<div class="line"><a name="l03353"></a><span class="lineno"> 3353</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03354"></a><span class="lineno"> 3354</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l03355"></a><span class="lineno"> 3355</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03356"></a><span class="lineno"> 3356</span> } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l03357"></a><span class="lineno"> 3357</span> </div>
+<div class="line"><a name="l03358"></a><span class="lineno"> 3358</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l03359"></a><span class="lineno"> 3359</span> {</div>
+<div class="line"><a name="l03360"></a><span class="lineno"> 3360</span> R fg_exp_l[2*(2*m+2)];</div>
+<div class="line"><a name="l03361"></a><span class="lineno"> 3361</span> </div>
+<div class="line"><a name="l03362"></a><span class="lineno"> 3362</span> nfft_2d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l03363"></a><span class="lineno"> 3363</span> nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l03364"></a><span class="lineno"> 3364</span> </div>
+<div class="line"><a name="l03365"></a><span class="lineno"> 3365</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03366"></a><span class="lineno"> 3366</span> <span class="preprocessor"></span> MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(PRE_FG_PSI)</div>
+<div class="line"><a name="l03367"></a><span class="lineno"> 3367</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03368"></a><span class="lineno"> 3368</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03369"></a><span class="lineno"> 3369</span> </div>
+<div class="line"><a name="l03370"></a><span class="lineno"> 3370</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l03371"></a><span class="lineno"> 3371</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l03372"></a><span class="lineno"> 3372</span> {</div>
+<div class="line"><a name="l03373"></a><span class="lineno"> 3373</span> R psij_const[2*(2*m+2)];</div>
+<div class="line"><a name="l03374"></a><span class="lineno"> 3374</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l03375"></a><span class="lineno"> 3375</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l03376"></a><span class="lineno"> 3376</span> R fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*j*2];</div>
+<div class="line"><a name="l03377"></a><span class="lineno"> 3377</span> R fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*j*2+1];</div>
+<div class="line"><a name="l03378"></a><span class="lineno"> 3378</span> R fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l03379"></a><span class="lineno"> 3379</span> </div>
+<div class="line"><a name="l03380"></a><span class="lineno"> 3380</span> psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l03381"></a><span class="lineno"> 3381</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l03382"></a><span class="lineno"> 3382</span> {</div>
+<div class="line"><a name="l03383"></a><span class="lineno"> 3383</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l03384"></a><span class="lineno"> 3384</span> psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];</div>
+<div class="line"><a name="l03385"></a><span class="lineno"> 3385</span> }</div>
+<div class="line"><a name="l03386"></a><span class="lineno"> 3386</span> </div>
+<div class="line"><a name="l03387"></a><span class="lineno"> 3387</span> fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*2+1)];</div>
+<div class="line"><a name="l03388"></a><span class="lineno"> 3388</span> fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*2+1)+1];</div>
+<div class="line"><a name="l03389"></a><span class="lineno"> 3389</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l03390"></a><span class="lineno"> 3390</span> psij_const[2*m+2] = fg_psij0;</div>
+<div class="line"><a name="l03391"></a><span class="lineno"> 3391</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l03392"></a><span class="lineno"> 3392</span> {</div>
+<div class="line"><a name="l03393"></a><span class="lineno"> 3393</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l03394"></a><span class="lineno"> 3394</span> psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];</div>
+<div class="line"><a name="l03395"></a><span class="lineno"> 3395</span> }</div>
+<div class="line"><a name="l03396"></a><span class="lineno"> 3396</span> </div>
+<div class="line"><a name="l03397"></a><span class="lineno"> 3397</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03398"></a><span class="lineno"> 3398</span> <span class="preprocessor"></span> nfft_adjoint_2d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles. [...]
+<div class="line"><a name="l03399"></a><span class="lineno"> 3399</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l03400"></a><span class="lineno"> 3400</span> <span class="preprocessor"></span> nfft_adjoint_2d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</ [...]
+<div class="line"><a name="l03401"></a><span class="lineno"> 3401</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03402"></a><span class="lineno"> 3402</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l03403"></a><span class="lineno"> 3403</span> </div>
+<div class="line"><a name="l03404"></a><span class="lineno"> 3404</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03405"></a><span class="lineno"> 3405</span> } <span class="comment">/* if(PRE_FG_PSI) */</span></div>
+<div class="line"><a name="l03406"></a><span class="lineno"> 3406</span> </div>
+<div class="line"><a name="l03407"></a><span class="lineno"> 3407</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FG_PSI)</div>
+<div class="line"><a name="l03408"></a><span class="lineno"> 3408</span> {</div>
+<div class="line"><a name="l03409"></a><span class="lineno"> 3409</span> R fg_exp_l[2*(2*m+2)];</div>
+<div class="line"><a name="l03410"></a><span class="lineno"> 3410</span> </div>
+<div class="line"><a name="l03411"></a><span class="lineno"> 3411</span> nfft_2d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l03412"></a><span class="lineno"> 3412</span> nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l03413"></a><span class="lineno"> 3413</span> </div>
+<div class="line"><a name="l03414"></a><span class="lineno"> 3414</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l03415"></a><span class="lineno"> 3415</span> </div>
+<div class="line"><a name="l03416"></a><span class="lineno"> 3416</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03417"></a><span class="lineno"> 3417</span> <span class="preprocessor"></span> MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(FG_PSI)</div>
+<div class="line"><a name="l03418"></a><span class="lineno"> 3418</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03419"></a><span class="lineno"> 3419</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03420"></a><span class="lineno"> 3420</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l03421"></a><span class="lineno"> 3421</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l03422"></a><span class="lineno"> 3422</span> {</div>
+<div class="line"><a name="l03423"></a><span class="lineno"> 3423</span> <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l03424"></a><span class="lineno"> 3424</span> R fg_psij0, fg_psij1, fg_psij2;</div>
+<div class="line"><a name="l03425"></a><span class="lineno"> 3425</span> R psij_const[2*(2*m+2)];</div>
+<div class="line"><a name="l03426"></a><span class="lineno"> 3426</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l03427"></a><span class="lineno"> 3427</span> </div>
+<div class="line"><a name="l03428"></a><span class="lineno"> 3428</span> nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l03429"></a><span class="lineno"> 3429</span> fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j]-((R)u)/n0,0));</div>
+<div class="line"><a name="l03430"></a><span class="lineno"> 3430</span> fg_psij1 = EXP(K(2.0)*(n0*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l03431"></a><span class="lineno"> 3431</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l03432"></a><span class="lineno"> 3432</span> psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l03433"></a><span class="lineno"> 3433</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l03434"></a><span class="lineno"> 3434</span> {</div>
+<div class="line"><a name="l03435"></a><span class="lineno"> 3435</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l03436"></a><span class="lineno"> 3436</span> psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];</div>
+<div class="line"><a name="l03437"></a><span class="lineno"> 3437</span> }</div>
+<div class="line"><a name="l03438"></a><span class="lineno"> 3438</span> </div>
+<div class="line"><a name="l03439"></a><span class="lineno"> 3439</span> nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l03440"></a><span class="lineno"> 3440</span> fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1]-((R)u)/n1,1));</div>
+<div class="line"><a name="l03441"></a><span class="lineno"> 3441</span> fg_psij1 = EXP(K(2.0)*(n1*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l03442"></a><span class="lineno"> 3442</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l03443"></a><span class="lineno"> 3443</span> psij_const[2*m+2] = fg_psij0;</div>
+<div class="line"><a name="l03444"></a><span class="lineno"> 3444</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l03445"></a><span class="lineno"> 3445</span> {</div>
+<div class="line"><a name="l03446"></a><span class="lineno"> 3446</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l03447"></a><span class="lineno"> 3447</span> psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];</div>
+<div class="line"><a name="l03448"></a><span class="lineno"> 3448</span> }</div>
+<div class="line"><a name="l03449"></a><span class="lineno"> 3449</span> </div>
+<div class="line"><a name="l03450"></a><span class="lineno"> 3450</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03451"></a><span class="lineno"> 3451</span> <span class="preprocessor"></span> nfft_adjoint_2d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles. [...]
+<div class="line"><a name="l03452"></a><span class="lineno"> 3452</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l03453"></a><span class="lineno"> 3453</span> <span class="preprocessor"></span> nfft_adjoint_2d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</ [...]
+<div class="line"><a name="l03454"></a><span class="lineno"> 3454</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03455"></a><span class="lineno"> 3455</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l03456"></a><span class="lineno"> 3456</span> </div>
+<div class="line"><a name="l03457"></a><span class="lineno"> 3457</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03458"></a><span class="lineno"> 3458</span> } <span class="comment">/* if(FG_PSI) */</span></div>
+<div class="line"><a name="l03459"></a><span class="lineno"> 3459</span> </div>
+<div class="line"><a name="l03460"></a><span class="lineno"> 3460</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l03461"></a><span class="lineno"> 3461</span> {</div>
+<div class="line"><a name="l03462"></a><span class="lineno"> 3462</span> <span class="keyword">const</span> <span class="keywordtype">int</span> K = ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>;</div>
+<div class="line"><a name="l03463"></a><span class="lineno"> 3463</span> <span class="keyword">const</span> <span class="keywordtype">int</span> ip_s = K / (m + 2);</div>
+<div class="line"><a name="l03464"></a><span class="lineno"> 3464</span> </div>
+<div class="line"><a name="l03465"></a><span class="lineno"> 3465</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l03466"></a><span class="lineno"> 3466</span> </div>
+<div class="line"><a name="l03467"></a><span class="lineno"> 3467</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03468"></a><span class="lineno"> 3468</span> <span class="preprocessor"></span> MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(PRE_LIN_PSI)</div>
+<div class="line"><a name="l03469"></a><span class="lineno"> 3469</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03470"></a><span class="lineno"> 3470</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03471"></a><span class="lineno"> 3471</span> <span class="preprocessor"> #pragma openmp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l03472"></a><span class="lineno"> 3472</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l03473"></a><span class="lineno"> 3473</span> {</div>
+<div class="line"><a name="l03474"></a><span class="lineno"> 3474</span> <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l03475"></a><span class="lineno"> 3475</span> <span class="keywordtype">int</span> ip_u;</div>
+<div class="line"><a name="l03476"></a><span class="lineno"> 3476</span> R ip_y, ip_w;</div>
+<div class="line"><a name="l03477"></a><span class="lineno"> 3477</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l03478"></a><span class="lineno"> 3478</span> R psij_const[2*(2*m+2)];</div>
+<div class="line"><a name="l03479"></a><span class="lineno"> 3479</span> </div>
+<div class="line"><a name="l03480"></a><span class="lineno"> 3480</span> nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l03481"></a><span class="lineno"> 3481</span> ip_y = FABS(n0*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j]) - u)*((R)ip_s);</div>
+<div class="line"><a name="l03482"></a><span class="lineno"> 3482</span> ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l03483"></a><span class="lineno"> 3483</span> ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l03484"></a><span class="lineno"> 3484</span> <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l03485"></a><span class="lineno"> 3485</span> psij_const[l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +</div>
+<div class="line"><a name="l03486"></a><span class="lineno"> 3486</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s+1)]*(ip_w);</div>
+<div class="line"><a name="l03487"></a><span class="lineno"> 3487</span> </div>
+<div class="line"><a name="l03488"></a><span class="lineno"> 3488</span> nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l03489"></a><span class="lineno"> 3489</span> ip_y = FABS(n1*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1]) - u)*((R)ip_s);</div>
+<div class="line"><a name="l03490"></a><span class="lineno"> 3490</span> ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l03491"></a><span class="lineno"> 3491</span> ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l03492"></a><span class="lineno"> 3492</span> <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l03493"></a><span class="lineno"> 3493</span> psij_const[2*m+2+l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +</div>
+<div class="line"><a name="l03494"></a><span class="lineno"> 3494</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);</div>
+<div class="line"><a name="l03495"></a><span class="lineno"> 3495</span> </div>
+<div class="line"><a name="l03496"></a><span class="lineno"> 3496</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03497"></a><span class="lineno"> 3497</span> <span class="preprocessor"></span> nfft_adjoint_2d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles. [...]
+<div class="line"><a name="l03498"></a><span class="lineno"> 3498</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l03499"></a><span class="lineno"> 3499</span> <span class="preprocessor"></span> nfft_adjoint_2d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</ [...]
+<div class="line"><a name="l03500"></a><span class="lineno"> 3500</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03501"></a><span class="lineno"> 3501</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l03502"></a><span class="lineno"> 3502</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l03503"></a><span class="lineno"> 3503</span> } <span class="comment">/* if(PRE_LIN_PSI) */</span></div>
+<div class="line"><a name="l03504"></a><span class="lineno"> 3504</span> </div>
+<div class="line"><a name="l03505"></a><span class="lineno"> 3505</span> <span class="comment">/* no precomputed psi at all */</span></div>
+<div class="line"><a name="l03506"></a><span class="lineno"> 3506</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l03507"></a><span class="lineno"> 3507</span> </div>
+<div class="line"><a name="l03508"></a><span class="lineno"> 3508</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03509"></a><span class="lineno"> 3509</span> <span class="preprocessor"></span> MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(NO_PSI)</div>
+<div class="line"><a name="l03510"></a><span class="lineno"> 3510</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03511"></a><span class="lineno"> 3511</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03512"></a><span class="lineno"> 3512</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l03513"></a><span class="lineno"> 3513</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l03514"></a><span class="lineno"> 3514</span> {</div>
+<div class="line"><a name="l03515"></a><span class="lineno"> 3515</span> <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l03516"></a><span class="lineno"> 3516</span> R psij_const[2*(2*m+2)];</div>
+<div class="line"><a name="l03517"></a><span class="lineno"> 3517</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when [...]
+<div class="line"><a name="l03518"></a><span class="lineno"> 3518</span> </div>
+<div class="line"><a name="l03519"></a><span class="lineno"> 3519</span> nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l03520"></a><span class="lineno"> 3520</span> <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l03521"></a><span class="lineno"> 3521</span> psij_const[l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j]-((R)((u+l)))/n0,0));</div>
+<div class="line"><a name="l03522"></a><span class="lineno"> 3522</span> </div>
+<div class="line"><a name="l03523"></a><span class="lineno"> 3523</span> nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l03524"></a><span class="lineno"> 3524</span> <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l03525"></a><span class="lineno"> 3525</span> psij_const[2*m+2+l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1]-((R)((u+l)))/n1,1));</div>
+<div class="line"><a name="l03526"></a><span class="lineno"> 3526</span> </div>
+<div class="line"><a name="l03527"></a><span class="lineno"> 3527</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03528"></a><span class="lineno"> 3528</span> <span class="preprocessor"></span> nfft_adjoint_2d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles."> [...]
+<div class="line"><a name="l03529"></a><span class="lineno"> 3529</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l03530"></a><span class="lineno"> 3530</span> <span class="preprocessor"></span> nfft_adjoint_2d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a> [...]
+<div class="line"><a name="l03531"></a><span class="lineno"> 3531</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03532"></a><span class="lineno"> 3532</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l03533"></a><span class="lineno"> 3533</span> }</div>
+<div class="line"><a name="l03534"></a><span class="lineno"> 3534</span> </div>
+<div class="line"><a name="l03535"></a><span class="lineno"> 3535</span> </div>
+<div class="line"><a name="l03536"></a><span class="lineno"> 3536</span> <span class="keywordtype">void</span> nfft_trafo_2d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l03537"></a><span class="lineno"> 3537</span> {</div>
+<div class="line"><a name="l03538"></a><span class="lineno"> 3538</span> <span class="keywordtype">int</span> k0,k1,n0,n1,N0,N1;</div>
+<div class="line"><a name="l03539"></a><span class="lineno"> 3539</span> C *g_hat,*f_hat;</div>
+<div class="line"><a name="l03540"></a><span class="lineno"> 3540</span> R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12;</div>
+<div class="line"><a name="l03541"></a><span class="lineno"> 3541</span> R ck01, ck02, ck11, ck12;</div>
+<div class="line"><a name="l03542"></a><span class="lineno"> 3542</span> C *g_hat11,*f_hat11,*g_hat21,*f_hat21,*g_hat12,*f_hat12,*g_hat22,*f_hat22;</div>
+<div class="line"><a name="l03543"></a><span class="lineno"> 3543</span> </div>
+<div class="line"><a name="l03544"></a><span class="lineno"> 3544</span> ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>=ths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>;</div>
+<div class="line"><a name="l03545"></a><span class="lineno"> 3545</span> ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>=ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>;</div>
+<div class="line"><a name="l03546"></a><span class="lineno"> 3546</span> </div>
+<div class="line"><a name="l03547"></a><span class="lineno"> 3547</span> N0=ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];</div>
+<div class="line"><a name="l03548"></a><span class="lineno"> 3548</span> N1=ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];</div>
+<div class="line"><a name="l03549"></a><span class="lineno"> 3549</span> n0=ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0];</div>
+<div class="line"><a name="l03550"></a><span class="lineno"> 3550</span> n1=ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[1];</div>
+<div class="line"><a name="l03551"></a><span class="lineno"> 3551</span> </div>
+<div class="line"><a name="l03552"></a><span class="lineno"> 3552</span> f_hat=(C*)ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l03553"></a><span class="lineno"> 3553</span> g_hat=(C*)ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>;</div>
+<div class="line"><a name="l03554"></a><span class="lineno"> 3554</span> </div>
+<div class="line"><a name="l03555"></a><span class="lineno"> 3555</span> TIC(0)</div>
+<div class="line"><a name="l03556"></a><span class="lineno"> 3556</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03557"></a><span class="lineno"> 3557</span> <span class="preprocessor"></span><span class="preprocessor"> #pragma omp parallel for default(shared) private(k0)</span></div>
+<div class="line"><a name="l03558"></a><span class="lineno"> 3558</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k0 = 0; k0 < ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>; k0++)</div>
+<div class="line"><a name="l03559"></a><span class="lineno"> 3559</span> ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>[k0] = 0.0;</div>
+<div class="line"><a name="l03560"></a><span class="lineno"> 3560</span> #<span class="keywordflow">else</span></div>
+<div class="line"><a name="l03561"></a><span class="lineno"> 3561</span> memset(ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>,0,ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l03562"></a><span class="lineno"> 3562</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l03563"></a><span class="lineno"> 3563</span> <span class="preprocessor"></span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l03564"></a><span class="lineno"> 3564</span> {</div>
+<div class="line"><a name="l03565"></a><span class="lineno"> 3565</span> c_phi_inv01=ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is doubles.">c_phi_inv</a>[0];</div>
+<div class="line"><a name="l03566"></a><span class="lineno"> 3566</span> c_phi_inv02=&ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is doubles.">c_phi_inv</a>[0][N0/2];</div>
+<div class="line"><a name="l03567"></a><span class="lineno"> 3567</span> </div>
+<div class="line"><a name="l03568"></a><span class="lineno"> 3568</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,c_phi_inv11,c_phi_inv12,g_hat11,f_hat11,g_hat21,f_hat21,g_hat12,f_hat12,g_hat22,f_hat22,ck11,ck12)</span></div>
+<div class="line"><a name="l03569"></a><span class="lineno"> 3569</span> <span class="preprocessor"></span> <span class="keywordflow">for</span>(k0=0;k0<N0/2;k0++)</div>
+<div class="line"><a name="l03570"></a><span class="lineno"> 3570</span> {</div>
+<div class="line"><a name="l03571"></a><span class="lineno"> 3571</span> ck01=c_phi_inv01[k0];</div>
+<div class="line"><a name="l03572"></a><span class="lineno"> 3572</span> ck02=c_phi_inv02[k0];</div>
+<div class="line"><a name="l03573"></a><span class="lineno"> 3573</span> </div>
+<div class="line"><a name="l03574"></a><span class="lineno"> 3574</span> c_phi_inv11=ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is doubles.">c_phi_inv</a>[1];</div>
+<div class="line"><a name="l03575"></a><span class="lineno"> 3575</span> c_phi_inv12=&ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is doubles.">c_phi_inv</a>[1][N1/2];</div>
+<div class="line"><a name="l03576"></a><span class="lineno"> 3576</span> </div>
+<div class="line"><a name="l03577"></a><span class="lineno"> 3577</span> g_hat11=g_hat + (n0-(N0/2)+k0)*n1+n1-(N1/2);</div>
+<div class="line"><a name="l03578"></a><span class="lineno"> 3578</span> f_hat11=f_hat + k0*N1;</div>
+<div class="line"><a name="l03579"></a><span class="lineno"> 3579</span> g_hat21=g_hat + k0*n1+n1-(N1/2);</div>
+<div class="line"><a name="l03580"></a><span class="lineno"> 3580</span> f_hat21=f_hat + ((N0/2)+k0)*N1;</div>
+<div class="line"><a name="l03581"></a><span class="lineno"> 3581</span> g_hat12=g_hat + (n0-(N0/2)+k0)*n1;</div>
+<div class="line"><a name="l03582"></a><span class="lineno"> 3582</span> f_hat12=f_hat + k0*N1+(N1/2);</div>
+<div class="line"><a name="l03583"></a><span class="lineno"> 3583</span> g_hat22=g_hat + k0*n1;</div>
+<div class="line"><a name="l03584"></a><span class="lineno"> 3584</span> f_hat22=f_hat + ((N0/2)+k0)*N1+(N1/2);</div>
+<div class="line"><a name="l03585"></a><span class="lineno"> 3585</span> </div>
+<div class="line"><a name="l03586"></a><span class="lineno"> 3586</span> <span class="keywordflow">for</span>(k1=0;k1<N1/2;k1++)</div>
+<div class="line"><a name="l03587"></a><span class="lineno"> 3587</span> {</div>
+<div class="line"><a name="l03588"></a><span class="lineno"> 3588</span> ck11=c_phi_inv11[k1];</div>
+<div class="line"><a name="l03589"></a><span class="lineno"> 3589</span> ck12=c_phi_inv12[k1];</div>
+<div class="line"><a name="l03590"></a><span class="lineno"> 3590</span> </div>
+<div class="line"><a name="l03591"></a><span class="lineno"> 3591</span> g_hat11[k1] = f_hat11[k1] * ck01 * ck11;</div>
+<div class="line"><a name="l03592"></a><span class="lineno"> 3592</span> g_hat21[k1] = f_hat21[k1] * ck02 * ck11;</div>
+<div class="line"><a name="l03593"></a><span class="lineno"> 3593</span> g_hat12[k1] = f_hat12[k1] * ck01 * ck12;</div>
+<div class="line"><a name="l03594"></a><span class="lineno"> 3594</span> g_hat22[k1] = f_hat22[k1] * ck02 * ck12;</div>
+<div class="line"><a name="l03595"></a><span class="lineno"> 3595</span> }</div>
+<div class="line"><a name="l03596"></a><span class="lineno"> 3596</span> }</div>
+<div class="line"><a name="l03597"></a><span class="lineno"> 3597</span> }</div>
+<div class="line"><a name="l03598"></a><span class="lineno"> 3598</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03599"></a><span class="lineno"> 3599</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,ck11,ck12)</span></div>
+<div class="line"><a name="l03600"></a><span class="lineno"> 3600</span> <span class="preprocessor"></span> <span class="keywordflow">for</span>(k0=0;k0<N0/2;k0++)</div>
+<div class="line"><a name="l03601"></a><span class="lineno"> 3601</span> {</div>
+<div class="line"><a name="l03602"></a><span class="lineno"> 3602</span> ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));</div>
+<div class="line"><a name="l03603"></a><span class="lineno"> 3603</span> ck02=K(1.0)/(PHI_HUT(k0,0));</div>
+<div class="line"><a name="l03604"></a><span class="lineno"> 3604</span> <span class="keywordflow">for</span>(k1=0;k1<N1/2;k1++)</div>
+<div class="line"><a name="l03605"></a><span class="lineno"> 3605</span> {</div>
+<div class="line"><a name="l03606"></a><span class="lineno"> 3606</span> ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));</div>
+<div class="line"><a name="l03607"></a><span class="lineno"> 3607</span> ck12=K(1.0)/(PHI_HUT(k1,1));</div>
+<div class="line"><a name="l03608"></a><span class="lineno"> 3608</span> g_hat[(n0-N0/2+k0)*n1+n1-N1/2+k1] = f_hat[k0*N1+k1] * ck01 * ck11;</div>
+<div class="line"><a name="l03609"></a><span class="lineno"> 3609</span> g_hat[k0*n1+n1-N1/2+k1] = f_hat[(N0/2+k0)*N1+k1] * ck02 * ck11;</div>
+<div class="line"><a name="l03610"></a><span class="lineno"> 3610</span> g_hat[(n0-N0/2+k0)*n1+k1] = f_hat[k0*N1+N1/2+k1] * ck01 * ck12;</div>
+<div class="line"><a name="l03611"></a><span class="lineno"> 3611</span> g_hat[k0*n1+k1] = f_hat[(N0/2+k0)*N1+N1/2+k1] * ck02 * ck12;</div>
+<div class="line"><a name="l03612"></a><span class="lineno"> 3612</span> }</div>
+<div class="line"><a name="l03613"></a><span class="lineno"> 3613</span> }</div>
+<div class="line"><a name="l03614"></a><span class="lineno"> 3614</span> </div>
+<div class="line"><a name="l03615"></a><span class="lineno"> 3615</span> TOC(0)</div>
+<div class="line"><a name="l03616"></a><span class="lineno"> 3616</span> </div>
+<div class="line"><a name="l03617"></a><span class="lineno"> 3617</span> TIC_FFTW(1)</div>
+<div class="line"><a name="l03618"></a><span class="lineno"> 3618</span> fftw_execute(ths->my_fftw_plan1);</div>
+<div class="line"><a name="l03619"></a><span class="lineno"> 3619</span> TOC_FFTW(1);</div>
+<div class="line"><a name="l03620"></a><span class="lineno"> 3620</span> </div>
+<div class="line"><a name="l03621"></a><span class="lineno"> 3621</span> TIC(2);</div>
+<div class="line"><a name="l03622"></a><span class="lineno"> 3622</span> nfft_trafo_2d_B(ths);</div>
+<div class="line"><a name="l03623"></a><span class="lineno"> 3623</span> TOC(2);</div>
+<div class="line"><a name="l03624"></a><span class="lineno"> 3624</span> }</div>
+<div class="line"><a name="l03625"></a><span class="lineno"> 3625</span> </div>
+<div class="line"><a name="l03626"></a><span class="lineno"> 3626</span> <span class="keywordtype">void</span> nfft_adjoint_2d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l03627"></a><span class="lineno"> 3627</span> {</div>
+<div class="line"><a name="l03628"></a><span class="lineno"> 3628</span> <span class="keywordtype">int</span> k0,k1,n0,n1,N0,N1;</div>
+<div class="line"><a name="l03629"></a><span class="lineno"> 3629</span> C *g_hat,*f_hat;</div>
+<div class="line"><a name="l03630"></a><span class="lineno"> 3630</span> R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12;</div>
+<div class="line"><a name="l03631"></a><span class="lineno"> 3631</span> R ck01, ck02, ck11, ck12;</div>
+<div class="line"><a name="l03632"></a><span class="lineno"> 3632</span> C *g_hat11,*f_hat11,*g_hat21,*f_hat21,*g_hat12,*f_hat12,*g_hat22,*f_hat22;</div>
+<div class="line"><a name="l03633"></a><span class="lineno"> 3633</span> </div>
+<div class="line"><a name="l03634"></a><span class="lineno"> 3634</span> ths->g_hat=ths->g1;</div>
+<div class="line"><a name="l03635"></a><span class="lineno"> 3635</span> ths->g=ths->g2;</div>
+<div class="line"><a name="l03636"></a><span class="lineno"> 3636</span> </div>
+<div class="line"><a name="l03637"></a><span class="lineno"> 3637</span> N0=ths->N[0];</div>
+<div class="line"><a name="l03638"></a><span class="lineno"> 3638</span> N1=ths->N[1];</div>
+<div class="line"><a name="l03639"></a><span class="lineno"> 3639</span> n0=ths->n[0];</div>
+<div class="line"><a name="l03640"></a><span class="lineno"> 3640</span> n1=ths->n[1];</div>
+<div class="line"><a name="l03641"></a><span class="lineno"> 3641</span> </div>
+<div class="line"><a name="l03642"></a><span class="lineno"> 3642</span> f_hat=(C*)ths->f_hat;</div>
+<div class="line"><a name="l03643"></a><span class="lineno"> 3643</span> g_hat=(C*)ths->g_hat;</div>
+<div class="line"><a name="l03644"></a><span class="lineno"> 3644</span> </div>
+<div class="line"><a name="l03645"></a><span class="lineno"> 3645</span> TIC(2);</div>
+<div class="line"><a name="l03646"></a><span class="lineno"> 3646</span> nfft_adjoint_2d_B(ths);</div>
+<div class="line"><a name="l03647"></a><span class="lineno"> 3647</span> TOC(2);</div>
+<div class="line"><a name="l03648"></a><span class="lineno"> 3648</span> </div>
+<div class="line"><a name="l03649"></a><span class="lineno"> 3649</span> TIC_FFTW(1)</div>
+<div class="line"><a name="l03650"></a><span class="lineno"> 3650</span> fftw_execute(ths->my_fftw_plan2);</div>
+<div class="line"><a name="l03651"></a><span class="lineno"> 3651</span> TOC_FFTW(1);</div>
+<div class="line"><a name="l03652"></a><span class="lineno"> 3652</span> </div>
+<div class="line"><a name="l03653"></a><span class="lineno"> 3653</span> TIC(0)</div>
+<div class="line"><a name="l03654"></a><span class="lineno"> 3654</span> if(ths->nfft_flags & PRE_PHI_HUT)</div>
+<div class="line"><a name="l03655"></a><span class="lineno"> 3655</span> {</div>
+<div class="line"><a name="l03656"></a><span class="lineno"> 3656</span> c_phi_inv01=ths->c_phi_inv[0];</div>
+<div class="line"><a name="l03657"></a><span class="lineno"> 3657</span> c_phi_inv02=&ths->c_phi_inv[0][N0/2];</div>
+<div class="line"><a name="l03658"></a><span class="lineno"> 3658</span> </div>
+<div class="line"><a name="l03659"></a><span class="lineno"> 3659</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,c_phi_inv11,c_phi_inv12,g_hat11,f_hat11,g_hat21,f_hat21,g_hat12,f_hat12,g_hat22,f_hat22,ck11,ck12)</span></div>
+<div class="line"><a name="l03660"></a><span class="lineno"> 3660</span> <span class="preprocessor"></span> <span class="keywordflow">for</span>(k0=0;k0<N0/2;k0++)</div>
+<div class="line"><a name="l03661"></a><span class="lineno"> 3661</span> {</div>
+<div class="line"><a name="l03662"></a><span class="lineno"> 3662</span> ck01=c_phi_inv01[k0];</div>
+<div class="line"><a name="l03663"></a><span class="lineno"> 3663</span> ck02=c_phi_inv02[k0];</div>
+<div class="line"><a name="l03664"></a><span class="lineno"> 3664</span> </div>
+<div class="line"><a name="l03665"></a><span class="lineno"> 3665</span> c_phi_inv11=ths->c_phi_inv[1];</div>
+<div class="line"><a name="l03666"></a><span class="lineno"> 3666</span> c_phi_inv12=&ths->c_phi_inv[1][N1/2];</div>
+<div class="line"><a name="l03667"></a><span class="lineno"> 3667</span> </div>
+<div class="line"><a name="l03668"></a><span class="lineno"> 3668</span> g_hat11=g_hat + (n0-(N0/2)+k0)*n1+n1-(N1/2);</div>
+<div class="line"><a name="l03669"></a><span class="lineno"> 3669</span> f_hat11=f_hat + k0*N1;</div>
+<div class="line"><a name="l03670"></a><span class="lineno"> 3670</span> g_hat21=g_hat + k0*n1+n1-(N1/2);</div>
+<div class="line"><a name="l03671"></a><span class="lineno"> 3671</span> f_hat21=f_hat + ((N0/2)+k0)*N1;</div>
+<div class="line"><a name="l03672"></a><span class="lineno"> 3672</span> g_hat12=g_hat + (n0-(N0/2)+k0)*n1;</div>
+<div class="line"><a name="l03673"></a><span class="lineno"> 3673</span> f_hat12=f_hat + k0*N1+(N1/2);</div>
+<div class="line"><a name="l03674"></a><span class="lineno"> 3674</span> g_hat22=g_hat + k0*n1;</div>
+<div class="line"><a name="l03675"></a><span class="lineno"> 3675</span> f_hat22=f_hat + ((N0/2)+k0)*N1+(N1/2);</div>
+<div class="line"><a name="l03676"></a><span class="lineno"> 3676</span> </div>
+<div class="line"><a name="l03677"></a><span class="lineno"> 3677</span> <span class="keywordflow">for</span>(k1=0;k1<N1/2;k1++)</div>
+<div class="line"><a name="l03678"></a><span class="lineno"> 3678</span> {</div>
+<div class="line"><a name="l03679"></a><span class="lineno"> 3679</span> ck11=c_phi_inv11[k1];</div>
+<div class="line"><a name="l03680"></a><span class="lineno"> 3680</span> ck12=c_phi_inv12[k1];</div>
+<div class="line"><a name="l03681"></a><span class="lineno"> 3681</span> </div>
+<div class="line"><a name="l03682"></a><span class="lineno"> 3682</span> f_hat11[k1] = g_hat11[k1] * ck01 * ck11;</div>
+<div class="line"><a name="l03683"></a><span class="lineno"> 3683</span> f_hat21[k1] = g_hat21[k1] * ck02 * ck11;</div>
+<div class="line"><a name="l03684"></a><span class="lineno"> 3684</span> f_hat12[k1] = g_hat12[k1] * ck01 * ck12;</div>
+<div class="line"><a name="l03685"></a><span class="lineno"> 3685</span> f_hat22[k1] = g_hat22[k1] * ck02 * ck12;</div>
+<div class="line"><a name="l03686"></a><span class="lineno"> 3686</span> }</div>
+<div class="line"><a name="l03687"></a><span class="lineno"> 3687</span> }</div>
+<div class="line"><a name="l03688"></a><span class="lineno"> 3688</span> }</div>
+<div class="line"><a name="l03689"></a><span class="lineno"> 3689</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03690"></a><span class="lineno"> 3690</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,ck11,ck12)</span></div>
+<div class="line"><a name="l03691"></a><span class="lineno"> 3691</span> <span class="preprocessor"></span> <span class="keywordflow">for</span>(k0=0;k0<N0/2;k0++)</div>
+<div class="line"><a name="l03692"></a><span class="lineno"> 3692</span> {</div>
+<div class="line"><a name="l03693"></a><span class="lineno"> 3693</span> ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));</div>
+<div class="line"><a name="l03694"></a><span class="lineno"> 3694</span> ck02=K(1.0)/(PHI_HUT(k0,0));</div>
+<div class="line"><a name="l03695"></a><span class="lineno"> 3695</span> <span class="keywordflow">for</span>(k1=0;k1<N1/2;k1++)</div>
+<div class="line"><a name="l03696"></a><span class="lineno"> 3696</span> {</div>
+<div class="line"><a name="l03697"></a><span class="lineno"> 3697</span> ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));</div>
+<div class="line"><a name="l03698"></a><span class="lineno"> 3698</span> ck12=K(1.0)/(PHI_HUT(k1,1));</div>
+<div class="line"><a name="l03699"></a><span class="lineno"> 3699</span> f_hat[k0*N1+k1] = g_hat[(n0-N0/2+k0)*n1+n1-N1/2+k1] * ck01 * ck11;</div>
+<div class="line"><a name="l03700"></a><span class="lineno"> 3700</span> f_hat[(N0/2+k0)*N1+k1] = g_hat[k0*n1+n1-N1/2+k1] * ck02 * ck11;</div>
+<div class="line"><a name="l03701"></a><span class="lineno"> 3701</span> f_hat[k0*N1+N1/2+k1] = g_hat[(n0-N0/2+k0)*n1+k1] * ck01 * ck12;</div>
+<div class="line"><a name="l03702"></a><span class="lineno"> 3702</span> f_hat[(N0/2+k0)*N1+N1/2+k1] = g_hat[k0*n1+k1] * ck02 * ck12;</div>
+<div class="line"><a name="l03703"></a><span class="lineno"> 3703</span> }</div>
+<div class="line"><a name="l03704"></a><span class="lineno"> 3704</span> }</div>
+<div class="line"><a name="l03705"></a><span class="lineno"> 3705</span> TOC(0)</div>
+<div class="line"><a name="l03706"></a><span class="lineno"> 3706</span> }</div>
+<div class="line"><a name="l03707"></a><span class="lineno"> 3707</span> </div>
+<div class="line"><a name="l03708"></a><span class="lineno"> 3708</span> <span class="comment">/* ############################################################ SPECIFIC VERSIONS FOR d=3 */</span></div>
+<div class="line"><a name="l03709"></a><span class="lineno"> 3709</span> </div>
+<div class="line"><a name="l03710"></a><span class="lineno"> 3710</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_3d_init_fg_exp_l(R *fg_exp_l, <span class="keyword">const</span> <span class="keywordtype">int</span> m, <span class="keyword">const</span> R b)</div>
+<div class="line"><a name="l03711"></a><span class="lineno"> 3711</span> {</div>
+<div class="line"><a name="l03712"></a><span class="lineno"> 3712</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l03713"></a><span class="lineno"> 3713</span> R fg_exp_b0, fg_exp_b1, fg_exp_b2, fg_exp_b0_sq;</div>
+<div class="line"><a name="l03714"></a><span class="lineno"> 3714</span> </div>
+<div class="line"><a name="l03715"></a><span class="lineno"> 3715</span> fg_exp_b0 = EXP(-1.0/b);</div>
+<div class="line"><a name="l03716"></a><span class="lineno"> 3716</span> fg_exp_b0_sq = fg_exp_b0*fg_exp_b0;</div>
+<div class="line"><a name="l03717"></a><span class="lineno"> 3717</span> fg_exp_b1 = K(1.0);</div>
+<div class="line"><a name="l03718"></a><span class="lineno"> 3718</span> fg_exp_b2 = K(1.0);</div>
+<div class="line"><a name="l03719"></a><span class="lineno"> 3719</span> fg_exp_l[0] = K(1.0);</div>
+<div class="line"><a name="l03720"></a><span class="lineno"> 3720</span> <span class="keywordflow">for</span>(l=1; l <= 2*m+1; l++)</div>
+<div class="line"><a name="l03721"></a><span class="lineno"> 3721</span> {</div>
+<div class="line"><a name="l03722"></a><span class="lineno"> 3722</span> fg_exp_b2 = fg_exp_b1*fg_exp_b0;</div>
+<div class="line"><a name="l03723"></a><span class="lineno"> 3723</span> fg_exp_b1 *= fg_exp_b0_sq;</div>
+<div class="line"><a name="l03724"></a><span class="lineno"> 3724</span> fg_exp_l[l] = fg_exp_l[l-1]*fg_exp_b2;</div>
+<div class="line"><a name="l03725"></a><span class="lineno"> 3725</span> }</div>
+<div class="line"><a name="l03726"></a><span class="lineno"> 3726</span> }</div>
+<div class="line"><a name="l03727"></a><span class="lineno"> 3727</span> </div>
+<div class="line"><a name="l03728"></a><span class="lineno"> 3728</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_trafo_3d_compute(C *fj, <span class="keyword">const</span> C *g,</div>
+<div class="line"><a name="l03729"></a><span class="lineno"> 3729</span> <span class="keyword">const</span> R *psij_const0, <span class="keyword">const</span> R *psij_const1, <span class="keyword">const</span> R *psij_const2,</div>
+<div class="line"><a name="l03730"></a><span class="lineno"> 3730</span> <span class="keyword">const</span> R *xj0, <span class="keyword">const</span> R *xj1, <span class="keyword">const</span> R *xj2,</div>
+<div class="line"><a name="l03731"></a><span class="lineno"> 3731</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n0, <span class="keyword">const</span> <span class="keywordtype">int</span> n1, <span class="keyword">const</span> <span class="keywordtype">int</span> n2, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l03732"></a><span class="lineno"> 3732</span> {</div>
+<div class="line"><a name="l03733"></a><span class="lineno"> 3733</span> <span class="keywordtype">int</span> u0,o0,l0,u1,o1,l1,u2,o2,l2;</div>
+<div class="line"><a name="l03734"></a><span class="lineno"> 3734</span> <span class="keyword">const</span> C *gj;</div>
+<div class="line"><a name="l03735"></a><span class="lineno"> 3735</span> <span class="keyword">const</span> R *psij0,*psij1,*psij2;</div>
+<div class="line"><a name="l03736"></a><span class="lineno"> 3736</span> </div>
+<div class="line"><a name="l03737"></a><span class="lineno"> 3737</span> psij0=psij_const0;</div>
+<div class="line"><a name="l03738"></a><span class="lineno"> 3738</span> psij1=psij_const1;</div>
+<div class="line"><a name="l03739"></a><span class="lineno"> 3739</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03740"></a><span class="lineno"> 3740</span> </div>
+<div class="line"><a name="l03741"></a><span class="lineno"> 3741</span> nfft_uo2(&u0,&o0,*xj0, n0, m);</div>
+<div class="line"><a name="l03742"></a><span class="lineno"> 3742</span> nfft_uo2(&u1,&o1,*xj1, n1, m);</div>
+<div class="line"><a name="l03743"></a><span class="lineno"> 3743</span> nfft_uo2(&u2,&o2,*xj2, n2, m);</div>
+<div class="line"><a name="l03744"></a><span class="lineno"> 3744</span> </div>
+<div class="line"><a name="l03745"></a><span class="lineno"> 3745</span> *fj=0;</div>
+<div class="line"><a name="l03746"></a><span class="lineno"> 3746</span> </div>
+<div class="line"><a name="l03747"></a><span class="lineno"> 3747</span> <span class="keywordflow">if</span>(u0<o0)</div>
+<div class="line"><a name="l03748"></a><span class="lineno"> 3748</span> <span class="keywordflow">if</span>(u1<o1)</div>
+<div class="line"><a name="l03749"></a><span class="lineno"> 3749</span> <span class="keywordflow">if</span>(u2<o2)</div>
+<div class="line"><a name="l03750"></a><span class="lineno"> 3750</span> <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l03751"></a><span class="lineno"> 3751</span> {</div>
+<div class="line"><a name="l03752"></a><span class="lineno"> 3752</span> psij1=psij_const1;</div>
+<div class="line"><a name="l03753"></a><span class="lineno"> 3753</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l03754"></a><span class="lineno"> 3754</span> {</div>
+<div class="line"><a name="l03755"></a><span class="lineno"> 3755</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03756"></a><span class="lineno"> 3756</span> gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03757"></a><span class="lineno"> 3757</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03758"></a><span class="lineno"> 3758</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03759"></a><span class="lineno"> 3759</span> }</div>
+<div class="line"><a name="l03760"></a><span class="lineno"> 3760</span> }</div>
+<div class="line"><a name="l03761"></a><span class="lineno"> 3761</span> <span class="keywordflow">else</span><span class="comment">/* asserts (u2>o2)*/</span></div>
+<div class="line"><a name="l03762"></a><span class="lineno"> 3762</span> <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l03763"></a><span class="lineno"> 3763</span> {</div>
+<div class="line"><a name="l03764"></a><span class="lineno"> 3764</span> psij1=psij_const1;</div>
+<div class="line"><a name="l03765"></a><span class="lineno"> 3765</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l03766"></a><span class="lineno"> 3766</span> {</div>
+<div class="line"><a name="l03767"></a><span class="lineno"> 3767</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03768"></a><span class="lineno"> 3768</span> gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03769"></a><span class="lineno"> 3769</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03770"></a><span class="lineno"> 3770</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03771"></a><span class="lineno"> 3771</span> gj=g+((u0+l0)*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l03772"></a><span class="lineno"> 3772</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03773"></a><span class="lineno"> 3773</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03774"></a><span class="lineno"> 3774</span> }</div>
+<div class="line"><a name="l03775"></a><span class="lineno"> 3775</span> }</div>
+<div class="line"><a name="l03776"></a><span class="lineno"> 3776</span> <span class="keywordflow">else</span><span class="comment">/* asserts (u1>o1)*/</span></div>
+<div class="line"><a name="l03777"></a><span class="lineno"> 3777</span> <span class="keywordflow">if</span>(u2<o2)</div>
+<div class="line"><a name="l03778"></a><span class="lineno"> 3778</span> <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l03779"></a><span class="lineno"> 3779</span> {</div>
+<div class="line"><a name="l03780"></a><span class="lineno"> 3780</span> psij1=psij_const1;</div>
+<div class="line"><a name="l03781"></a><span class="lineno"> 3781</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l03782"></a><span class="lineno"> 3782</span> {</div>
+<div class="line"><a name="l03783"></a><span class="lineno"> 3783</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03784"></a><span class="lineno"> 3784</span> gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03785"></a><span class="lineno"> 3785</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03786"></a><span class="lineno"> 3786</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03787"></a><span class="lineno"> 3787</span> }</div>
+<div class="line"><a name="l03788"></a><span class="lineno"> 3788</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l03789"></a><span class="lineno"> 3789</span> {</div>
+<div class="line"><a name="l03790"></a><span class="lineno"> 3790</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03791"></a><span class="lineno"> 3791</span> gj=g+((u0+l0)*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l03792"></a><span class="lineno"> 3792</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03793"></a><span class="lineno"> 3793</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03794"></a><span class="lineno"> 3794</span> }</div>
+<div class="line"><a name="l03795"></a><span class="lineno"> 3795</span> }</div>
+<div class="line"><a name="l03796"></a><span class="lineno"> 3796</span> <span class="keywordflow">else</span><span class="comment">/* asserts (u2>o2) */</span></div>
+<div class="line"><a name="l03797"></a><span class="lineno"> 3797</span> {</div>
+<div class="line"><a name="l03798"></a><span class="lineno"> 3798</span> <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l03799"></a><span class="lineno"> 3799</span> {</div>
+<div class="line"><a name="l03800"></a><span class="lineno"> 3800</span> psij1=psij_const1;</div>
+<div class="line"><a name="l03801"></a><span class="lineno"> 3801</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l03802"></a><span class="lineno"> 3802</span> {</div>
+<div class="line"><a name="l03803"></a><span class="lineno"> 3803</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03804"></a><span class="lineno"> 3804</span> gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03805"></a><span class="lineno"> 3805</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03806"></a><span class="lineno"> 3806</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03807"></a><span class="lineno"> 3807</span> gj=g+((u0+l0)*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l03808"></a><span class="lineno"> 3808</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03809"></a><span class="lineno"> 3809</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03810"></a><span class="lineno"> 3810</span> }</div>
+<div class="line"><a name="l03811"></a><span class="lineno"> 3811</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l03812"></a><span class="lineno"> 3812</span> {</div>
+<div class="line"><a name="l03813"></a><span class="lineno"> 3813</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03814"></a><span class="lineno"> 3814</span> gj=g+((u0+l0)*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l03815"></a><span class="lineno"> 3815</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03816"></a><span class="lineno"> 3816</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03817"></a><span class="lineno"> 3817</span> gj=g+((u0+l0)*n1+l1)*n2;</div>
+<div class="line"><a name="l03818"></a><span class="lineno"> 3818</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03819"></a><span class="lineno"> 3819</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03820"></a><span class="lineno"> 3820</span> }</div>
+<div class="line"><a name="l03821"></a><span class="lineno"> 3821</span> }</div>
+<div class="line"><a name="l03822"></a><span class="lineno"> 3822</span> }</div>
+<div class="line"><a name="l03823"></a><span class="lineno"> 3823</span> <span class="keywordflow">else</span><span class="comment">/* asserts (u0>o0) */</span></div>
+<div class="line"><a name="l03824"></a><span class="lineno"> 3824</span> <span class="keywordflow">if</span>(u1<o1)</div>
+<div class="line"><a name="l03825"></a><span class="lineno"> 3825</span> <span class="keywordflow">if</span>(u2<o2)</div>
+<div class="line"><a name="l03826"></a><span class="lineno"> 3826</span> {</div>
+<div class="line"><a name="l03827"></a><span class="lineno"> 3827</span> <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l03828"></a><span class="lineno"> 3828</span> {</div>
+<div class="line"><a name="l03829"></a><span class="lineno"> 3829</span> psij1=psij_const1;</div>
+<div class="line"><a name="l03830"></a><span class="lineno"> 3830</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l03831"></a><span class="lineno"> 3831</span> {</div>
+<div class="line"><a name="l03832"></a><span class="lineno"> 3832</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03833"></a><span class="lineno"> 3833</span> gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03834"></a><span class="lineno"> 3834</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03835"></a><span class="lineno"> 3835</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03836"></a><span class="lineno"> 3836</span> }</div>
+<div class="line"><a name="l03837"></a><span class="lineno"> 3837</span> }</div>
+<div class="line"><a name="l03838"></a><span class="lineno"> 3838</span> </div>
+<div class="line"><a name="l03839"></a><span class="lineno"> 3839</span> <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l03840"></a><span class="lineno"> 3840</span> {</div>
+<div class="line"><a name="l03841"></a><span class="lineno"> 3841</span> psij1=psij_const1;</div>
+<div class="line"><a name="l03842"></a><span class="lineno"> 3842</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l03843"></a><span class="lineno"> 3843</span> {</div>
+<div class="line"><a name="l03844"></a><span class="lineno"> 3844</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03845"></a><span class="lineno"> 3845</span> gj=g+(l0*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03846"></a><span class="lineno"> 3846</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03847"></a><span class="lineno"> 3847</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03848"></a><span class="lineno"> 3848</span> }</div>
+<div class="line"><a name="l03849"></a><span class="lineno"> 3849</span> }</div>
+<div class="line"><a name="l03850"></a><span class="lineno"> 3850</span> }</div>
+<div class="line"><a name="l03851"></a><span class="lineno"> 3851</span> <span class="keywordflow">else</span><span class="comment">/* asserts (u2>o2) */</span></div>
+<div class="line"><a name="l03852"></a><span class="lineno"> 3852</span> {</div>
+<div class="line"><a name="l03853"></a><span class="lineno"> 3853</span> <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l03854"></a><span class="lineno"> 3854</span> {</div>
+<div class="line"><a name="l03855"></a><span class="lineno"> 3855</span> psij1=psij_const1;</div>
+<div class="line"><a name="l03856"></a><span class="lineno"> 3856</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l03857"></a><span class="lineno"> 3857</span> {</div>
+<div class="line"><a name="l03858"></a><span class="lineno"> 3858</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03859"></a><span class="lineno"> 3859</span> gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03860"></a><span class="lineno"> 3860</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03861"></a><span class="lineno"> 3861</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03862"></a><span class="lineno"> 3862</span> gj=g+((u0+l0)*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l03863"></a><span class="lineno"> 3863</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03864"></a><span class="lineno"> 3864</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03865"></a><span class="lineno"> 3865</span> }</div>
+<div class="line"><a name="l03866"></a><span class="lineno"> 3866</span> }</div>
+<div class="line"><a name="l03867"></a><span class="lineno"> 3867</span> </div>
+<div class="line"><a name="l03868"></a><span class="lineno"> 3868</span> <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l03869"></a><span class="lineno"> 3869</span> {</div>
+<div class="line"><a name="l03870"></a><span class="lineno"> 3870</span> psij1=psij_const1;</div>
+<div class="line"><a name="l03871"></a><span class="lineno"> 3871</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l03872"></a><span class="lineno"> 3872</span> {</div>
+<div class="line"><a name="l03873"></a><span class="lineno"> 3873</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03874"></a><span class="lineno"> 3874</span> gj=g+(l0*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03875"></a><span class="lineno"> 3875</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03876"></a><span class="lineno"> 3876</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03877"></a><span class="lineno"> 3877</span> gj=g+(l0*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l03878"></a><span class="lineno"> 3878</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03879"></a><span class="lineno"> 3879</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03880"></a><span class="lineno"> 3880</span> }</div>
+<div class="line"><a name="l03881"></a><span class="lineno"> 3881</span> }</div>
+<div class="line"><a name="l03882"></a><span class="lineno"> 3882</span> }</div>
+<div class="line"><a name="l03883"></a><span class="lineno"> 3883</span> <span class="keywordflow">else</span><span class="comment">/* asserts (u1>o1) */</span></div>
+<div class="line"><a name="l03884"></a><span class="lineno"> 3884</span> <span class="keywordflow">if</span>(u2<o2)</div>
+<div class="line"><a name="l03885"></a><span class="lineno"> 3885</span> {</div>
+<div class="line"><a name="l03886"></a><span class="lineno"> 3886</span> <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l03887"></a><span class="lineno"> 3887</span> {</div>
+<div class="line"><a name="l03888"></a><span class="lineno"> 3888</span> psij1=psij_const1;</div>
+<div class="line"><a name="l03889"></a><span class="lineno"> 3889</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l03890"></a><span class="lineno"> 3890</span> {</div>
+<div class="line"><a name="l03891"></a><span class="lineno"> 3891</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03892"></a><span class="lineno"> 3892</span> gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03893"></a><span class="lineno"> 3893</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03894"></a><span class="lineno"> 3894</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03895"></a><span class="lineno"> 3895</span> }</div>
+<div class="line"><a name="l03896"></a><span class="lineno"> 3896</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l03897"></a><span class="lineno"> 3897</span> {</div>
+<div class="line"><a name="l03898"></a><span class="lineno"> 3898</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03899"></a><span class="lineno"> 3899</span> gj=g+((u0+l0)*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l03900"></a><span class="lineno"> 3900</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03901"></a><span class="lineno"> 3901</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03902"></a><span class="lineno"> 3902</span> }</div>
+<div class="line"><a name="l03903"></a><span class="lineno"> 3903</span> }</div>
+<div class="line"><a name="l03904"></a><span class="lineno"> 3904</span> <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l03905"></a><span class="lineno"> 3905</span> {</div>
+<div class="line"><a name="l03906"></a><span class="lineno"> 3906</span> psij1=psij_const1;</div>
+<div class="line"><a name="l03907"></a><span class="lineno"> 3907</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l03908"></a><span class="lineno"> 3908</span> {</div>
+<div class="line"><a name="l03909"></a><span class="lineno"> 3909</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03910"></a><span class="lineno"> 3910</span> gj=g+(l0*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03911"></a><span class="lineno"> 3911</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03912"></a><span class="lineno"> 3912</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03913"></a><span class="lineno"> 3913</span> }</div>
+<div class="line"><a name="l03914"></a><span class="lineno"> 3914</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l03915"></a><span class="lineno"> 3915</span> {</div>
+<div class="line"><a name="l03916"></a><span class="lineno"> 3916</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03917"></a><span class="lineno"> 3917</span> gj=g+(l0*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l03918"></a><span class="lineno"> 3918</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l03919"></a><span class="lineno"> 3919</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03920"></a><span class="lineno"> 3920</span> }</div>
+<div class="line"><a name="l03921"></a><span class="lineno"> 3921</span> }</div>
+<div class="line"><a name="l03922"></a><span class="lineno"> 3922</span> }</div>
+<div class="line"><a name="l03923"></a><span class="lineno"> 3923</span> <span class="keywordflow">else</span><span class="comment">/* asserts (u2>o2) */</span></div>
+<div class="line"><a name="l03924"></a><span class="lineno"> 3924</span> {</div>
+<div class="line"><a name="l03925"></a><span class="lineno"> 3925</span> <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l03926"></a><span class="lineno"> 3926</span> {</div>
+<div class="line"><a name="l03927"></a><span class="lineno"> 3927</span> psij1=psij_const1;</div>
+<div class="line"><a name="l03928"></a><span class="lineno"> 3928</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l03929"></a><span class="lineno"> 3929</span> {</div>
+<div class="line"><a name="l03930"></a><span class="lineno"> 3930</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03931"></a><span class="lineno"> 3931</span> gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03932"></a><span class="lineno"> 3932</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03933"></a><span class="lineno"> 3933</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03934"></a><span class="lineno"> 3934</span> gj=g+((u0+l0)*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l03935"></a><span class="lineno"> 3935</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03936"></a><span class="lineno"> 3936</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03937"></a><span class="lineno"> 3937</span> }</div>
+<div class="line"><a name="l03938"></a><span class="lineno"> 3938</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l03939"></a><span class="lineno"> 3939</span> {</div>
+<div class="line"><a name="l03940"></a><span class="lineno"> 3940</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03941"></a><span class="lineno"> 3941</span> gj=g+((u0+l0)*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l03942"></a><span class="lineno"> 3942</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03943"></a><span class="lineno"> 3943</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03944"></a><span class="lineno"> 3944</span> gj=g+((u0+l0)*n1+l1)*n2;</div>
+<div class="line"><a name="l03945"></a><span class="lineno"> 3945</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03946"></a><span class="lineno"> 3946</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03947"></a><span class="lineno"> 3947</span> }</div>
+<div class="line"><a name="l03948"></a><span class="lineno"> 3948</span> }</div>
+<div class="line"><a name="l03949"></a><span class="lineno"> 3949</span> </div>
+<div class="line"><a name="l03950"></a><span class="lineno"> 3950</span> <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l03951"></a><span class="lineno"> 3951</span> {</div>
+<div class="line"><a name="l03952"></a><span class="lineno"> 3952</span> psij1=psij_const1;</div>
+<div class="line"><a name="l03953"></a><span class="lineno"> 3953</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l03954"></a><span class="lineno"> 3954</span> {</div>
+<div class="line"><a name="l03955"></a><span class="lineno"> 3955</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03956"></a><span class="lineno"> 3956</span> gj=g+(l0*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l03957"></a><span class="lineno"> 3957</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03958"></a><span class="lineno"> 3958</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03959"></a><span class="lineno"> 3959</span> gj=g+(l0*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l03960"></a><span class="lineno"> 3960</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03961"></a><span class="lineno"> 3961</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03962"></a><span class="lineno"> 3962</span> }</div>
+<div class="line"><a name="l03963"></a><span class="lineno"> 3963</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l03964"></a><span class="lineno"> 3964</span> {</div>
+<div class="line"><a name="l03965"></a><span class="lineno"> 3965</span> psij2=psij_const2;</div>
+<div class="line"><a name="l03966"></a><span class="lineno"> 3966</span> gj=g+(l0*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l03967"></a><span class="lineno"> 3967</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l03968"></a><span class="lineno"> 3968</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03969"></a><span class="lineno"> 3969</span> gj=g+(l0*n1+l1)*n2;</div>
+<div class="line"><a name="l03970"></a><span class="lineno"> 3970</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l03971"></a><span class="lineno"> 3971</span> (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);</div>
+<div class="line"><a name="l03972"></a><span class="lineno"> 3972</span> }</div>
+<div class="line"><a name="l03973"></a><span class="lineno"> 3973</span> }</div>
+<div class="line"><a name="l03974"></a><span class="lineno"> 3974</span> }</div>
+<div class="line"><a name="l03975"></a><span class="lineno"> 3975</span> }</div>
+<div class="line"><a name="l03976"></a><span class="lineno"> 3976</span> </div>
+<div class="line"><a name="l03977"></a><span class="lineno"> 3977</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l03978"></a><span class="lineno"> 3978</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l03999"></a><span class="lineno"> 3999</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_3d_compute_omp_blockwise(<span class="keyword">const</span> C f, C *g,</div>
+<div class="line"><a name="l04000"></a><span class="lineno"> 4000</span> <span class="keyword">const</span> R *psij_const0, <span class="keyword">const</span> R *psij_const1, <span class="keyword">const</span> R *psij_const2,</div>
+<div class="line"><a name="l04001"></a><span class="lineno"> 4001</span> <span class="keyword">const</span> R *xj0, <span class="keyword">const</span> R *xj1, <span class="keyword">const</span> R *xj2,</div>
+<div class="line"><a name="l04002"></a><span class="lineno"> 4002</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n0, <span class="keyword">const</span> <span class="keywordtype">int</span> n1, <span class="keyword">const</span> <span class="keywordtype">int</span> n2, <span class="keyword">const</span> <span class="keywordtype">int</span> m,</div>
+<div class="line"><a name="l04003"></a><span class="lineno"> 4003</span> <span class="keyword">const</span> <span class="keywordtype">int</span> my_u0, <span class="keyword">const</span> <span class="keywordtype">int</span> my_o0)</div>
+<div class="line"><a name="l04004"></a><span class="lineno"> 4004</span> {</div>
+<div class="line"><a name="l04005"></a><span class="lineno"> 4005</span> <span class="keywordtype">int</span> ar_u0,ar_o0,l0,u1,o1,l1,u2,o2,l2;</div>
+<div class="line"><a name="l04006"></a><span class="lineno"> 4006</span> <span class="keyword">const</span> <span class="keywordtype">int</span> lprod = (2*m+2) * (2*m+2) * (2*m+2);</div>
+<div class="line"><a name="l04007"></a><span class="lineno"> 4007</span> </div>
+<div class="line"><a name="l04008"></a><span class="lineno"> 4008</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index_temp1[2*m+2];</div>
+<div class="line"><a name="l04009"></a><span class="lineno"> 4009</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index_temp2[2*m+2];</div>
+<div class="line"><a name="l04010"></a><span class="lineno"> 4010</span> </div>
+<div class="line"><a name="l04011"></a><span class="lineno"> 4011</span> nfft_uo2(&ar_u0,&ar_o0,*xj0, n0, m);</div>
+<div class="line"><a name="l04012"></a><span class="lineno"> 4012</span> nfft_uo2(&u1,&o1,*xj1, n1, m);</div>
+<div class="line"><a name="l04013"></a><span class="lineno"> 4013</span> nfft_uo2(&u2,&o2,*xj2, n2, m);</div>
+<div class="line"><a name="l04014"></a><span class="lineno"> 4014</span> </div>
+<div class="line"><a name="l04015"></a><span class="lineno"> 4015</span> <span class="keywordflow">for</span> (l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l04016"></a><span class="lineno"> 4016</span> index_temp1[l1] = (u1+l1)%n1;</div>
+<div class="line"><a name="l04017"></a><span class="lineno"> 4017</span> </div>
+<div class="line"><a name="l04018"></a><span class="lineno"> 4018</span> <span class="keywordflow">for</span> (l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04019"></a><span class="lineno"> 4019</span> index_temp2[l2] = (u2+l2)%n2;</div>
+<div class="line"><a name="l04020"></a><span class="lineno"> 4020</span> </div>
+<div class="line"><a name="l04021"></a><span class="lineno"> 4021</span> <span class="keywordflow">if</span>(ar_u0<ar_o0)</div>
+<div class="line"><a name="l04022"></a><span class="lineno"> 4022</span> {</div>
+<div class="line"><a name="l04023"></a><span class="lineno"> 4023</span> <span class="keywordtype">int</span> u0 = MAX(my_u0,ar_u0);</div>
+<div class="line"><a name="l04024"></a><span class="lineno"> 4024</span> <span class="keywordtype">int</span> o0 = MIN(my_o0,ar_o0);</div>
+<div class="line"><a name="l04025"></a><span class="lineno"> 4025</span> <span class="keywordtype">int</span> offset_psij = u0-ar_u0;</div>
+<div class="line"><a name="l04026"></a><span class="lineno"> 4026</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l04027"></a><span class="lineno"> 4027</span> <span class="preprocessor"></span> assert(offset_psij >= 0);</div>
+<div class="line"><a name="l04028"></a><span class="lineno"> 4028</span> assert(o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l04029"></a><span class="lineno"> 4029</span> assert(offset_psij+o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l04030"></a><span class="lineno"> 4030</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04031"></a><span class="lineno"> 4031</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04032"></a><span class="lineno"> 4032</span> <span class="keywordflow">for</span> (l0 = 0; l0 <= o0-u0; l0++)</div>
+<div class="line"><a name="l04033"></a><span class="lineno"> 4033</span> {</div>
+<div class="line"><a name="l04034"></a><span class="lineno"> 4034</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i0 = (u0+l0) * n1;</div>
+<div class="line"><a name="l04035"></a><span class="lineno"> 4035</span> <span class="keyword">const</span> C val0 = psij_const0[offset_psij+l0];</div>
+<div class="line"><a name="l04036"></a><span class="lineno"> 4036</span> </div>
+<div class="line"><a name="l04037"></a><span class="lineno"> 4037</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l04038"></a><span class="lineno"> 4038</span> {</div>
+<div class="line"><a name="l04039"></a><span class="lineno"> 4039</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i1 = (i0 + index_temp1[l1]) * n2;</div>
+<div class="line"><a name="l04040"></a><span class="lineno"> 4040</span> <span class="keyword">const</span> C val1 = psij_const1[l1];</div>
+<div class="line"><a name="l04041"></a><span class="lineno"> 4041</span> </div>
+<div class="line"><a name="l04042"></a><span class="lineno"> 4042</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04043"></a><span class="lineno"> 4043</span> g[i1 + index_temp2[l2]] += val0 * val1 * psij_const2[l2] * f;</div>
+<div class="line"><a name="l04044"></a><span class="lineno"> 4044</span> }</div>
+<div class="line"><a name="l04045"></a><span class="lineno"> 4045</span> } </div>
+<div class="line"><a name="l04046"></a><span class="lineno"> 4046</span> }</div>
+<div class="line"><a name="l04047"></a><span class="lineno"> 4047</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l04048"></a><span class="lineno"> 4048</span> {</div>
+<div class="line"><a name="l04049"></a><span class="lineno"> 4049</span> <span class="keywordtype">int</span> u0 = MAX(my_u0,ar_u0);</div>
+<div class="line"><a name="l04050"></a><span class="lineno"> 4050</span> <span class="keywordtype">int</span> o0 = my_o0;</div>
+<div class="line"><a name="l04051"></a><span class="lineno"> 4051</span> <span class="keywordtype">int</span> offset_psij = u0-ar_u0;</div>
+<div class="line"><a name="l04052"></a><span class="lineno"> 4052</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l04053"></a><span class="lineno"> 4053</span> <span class="preprocessor"></span> assert(offset_psij >= 0);</div>
+<div class="line"><a name="l04054"></a><span class="lineno"> 4054</span> assert(o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l04055"></a><span class="lineno"> 4055</span> assert(offset_psij+o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l04056"></a><span class="lineno"> 4056</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04057"></a><span class="lineno"> 4057</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04058"></a><span class="lineno"> 4058</span> <span class="keywordflow">for</span> (l0 = 0; l0 <= o0-u0; l0++)</div>
+<div class="line"><a name="l04059"></a><span class="lineno"> 4059</span> {</div>
+<div class="line"><a name="l04060"></a><span class="lineno"> 4060</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i0 = (u0+l0) * n1;</div>
+<div class="line"><a name="l04061"></a><span class="lineno"> 4061</span> <span class="keyword">const</span> C val0 = psij_const0[offset_psij+l0];</div>
+<div class="line"><a name="l04062"></a><span class="lineno"> 4062</span> </div>
+<div class="line"><a name="l04063"></a><span class="lineno"> 4063</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l04064"></a><span class="lineno"> 4064</span> {</div>
+<div class="line"><a name="l04065"></a><span class="lineno"> 4065</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i1 = (i0 + index_temp1[l1]) * n2;</div>
+<div class="line"><a name="l04066"></a><span class="lineno"> 4066</span> <span class="keyword">const</span> C val1 = psij_const1[l1];</div>
+<div class="line"><a name="l04067"></a><span class="lineno"> 4067</span> </div>
+<div class="line"><a name="l04068"></a><span class="lineno"> 4068</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04069"></a><span class="lineno"> 4069</span> g[i1 + index_temp2[l2]] += val0 * val1 * psij_const2[l2] * f;</div>
+<div class="line"><a name="l04070"></a><span class="lineno"> 4070</span> }</div>
+<div class="line"><a name="l04071"></a><span class="lineno"> 4071</span> }</div>
+<div class="line"><a name="l04072"></a><span class="lineno"> 4072</span> </div>
+<div class="line"><a name="l04073"></a><span class="lineno"> 4073</span> u0 = my_u0;</div>
+<div class="line"><a name="l04074"></a><span class="lineno"> 4074</span> o0 = MIN(my_o0,ar_o0);</div>
+<div class="line"><a name="l04075"></a><span class="lineno"> 4075</span> offset_psij += my_u0-ar_u0+n0;</div>
+<div class="line"><a name="l04076"></a><span class="lineno"> 4076</span> </div>
+<div class="line"><a name="l04077"></a><span class="lineno"> 4077</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l04078"></a><span class="lineno"> 4078</span> <span class="preprocessor"></span> <span class="keywordflow">if</span> (u0<=o0)</div>
+<div class="line"><a name="l04079"></a><span class="lineno"> 4079</span> {</div>
+<div class="line"><a name="l04080"></a><span class="lineno"> 4080</span> assert(o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l04081"></a><span class="lineno"> 4081</span> assert(offset_psij+o0-u0 <= 2*m+1);</div>
+<div class="line"><a name="l04082"></a><span class="lineno"> 4082</span> }</div>
+<div class="line"><a name="l04083"></a><span class="lineno"> 4083</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04084"></a><span class="lineno"> 4084</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (l0 = 0; l0 <= o0-u0; l0++)</div>
+<div class="line"><a name="l04085"></a><span class="lineno"> 4085</span> {</div>
+<div class="line"><a name="l04086"></a><span class="lineno"> 4086</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i0 = (u0+l0) * n1;</div>
+<div class="line"><a name="l04087"></a><span class="lineno"> 4087</span> <span class="keyword">const</span> C val0 = psij_const0[offset_psij+l0];</div>
+<div class="line"><a name="l04088"></a><span class="lineno"> 4088</span> </div>
+<div class="line"><a name="l04089"></a><span class="lineno"> 4089</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l04090"></a><span class="lineno"> 4090</span> {</div>
+<div class="line"><a name="l04091"></a><span class="lineno"> 4091</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i1 = (i0 + index_temp1[l1]) * n2;</div>
+<div class="line"><a name="l04092"></a><span class="lineno"> 4092</span> <span class="keyword">const</span> C val1 = psij_const1[l1];</div>
+<div class="line"><a name="l04093"></a><span class="lineno"> 4093</span> </div>
+<div class="line"><a name="l04094"></a><span class="lineno"> 4094</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04095"></a><span class="lineno"> 4095</span> g[i1 + index_temp2[l2]] += val0 * val1 * psij_const2[l2] * f;</div>
+<div class="line"><a name="l04096"></a><span class="lineno"> 4096</span> }</div>
+<div class="line"><a name="l04097"></a><span class="lineno"> 4097</span> }</div>
+<div class="line"><a name="l04098"></a><span class="lineno"> 4098</span> }</div>
+<div class="line"><a name="l04099"></a><span class="lineno"> 4099</span> }</div>
+<div class="line"><a name="l04100"></a><span class="lineno"> 4100</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04101"></a><span class="lineno"> 4101</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04102"></a><span class="lineno"> 4102</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l04103"></a><span class="lineno"> 4103</span> <span class="preprocessor"></span><span class="comment">/* adjoint NFFT three-dimensional case with OpenMP atomic operations */</span></div>
+<div class="line"><a name="l04104"></a><span class="lineno"> 4104</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_3d_compute_omp_atomic(<span class="keyword">const</span> C f, C *g,</div>
+<div class="line"><a name="l04105"></a><span class="lineno"> 4105</span> <span class="keyword">const</span> R *psij_const0, <span class="keyword">const</span> R *psij_const1, <span class="keyword">const</span> R *psij_const2,</div>
+<div class="line"><a name="l04106"></a><span class="lineno"> 4106</span> <span class="keyword">const</span> R *xj0, <span class="keyword">const</span> R *xj1, <span class="keyword">const</span> R *xj2,</div>
+<div class="line"><a name="l04107"></a><span class="lineno"> 4107</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n0, <span class="keyword">const</span> <span class="keywordtype">int</span> n1, <span class="keyword">const</span> <span class="keywordtype">int</span> n2, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l04108"></a><span class="lineno"> 4108</span> {</div>
+<div class="line"><a name="l04109"></a><span class="lineno"> 4109</span> <span class="keywordtype">int</span> u0,o0,l0,u1,o1,l1,u2,o2,l2;</div>
+<div class="line"><a name="l04110"></a><span class="lineno"> 4110</span> <span class="keyword">const</span> <span class="keywordtype">int</span> lprod = (2*m+2) * (2*m+2) * (2*m+2);</div>
+<div class="line"><a name="l04111"></a><span class="lineno"> 4111</span> </div>
+<div class="line"><a name="l04112"></a><span class="lineno"> 4112</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index_temp0[2*m+2];</div>
+<div class="line"><a name="l04113"></a><span class="lineno"> 4113</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index_temp1[2*m+2];</div>
+<div class="line"><a name="l04114"></a><span class="lineno"> 4114</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index_temp2[2*m+2];</div>
+<div class="line"><a name="l04115"></a><span class="lineno"> 4115</span> </div>
+<div class="line"><a name="l04116"></a><span class="lineno"> 4116</span> nfft_uo2(&u0,&o0,*xj0, n0, m);</div>
+<div class="line"><a name="l04117"></a><span class="lineno"> 4117</span> nfft_uo2(&u1,&o1,*xj1, n1, m);</div>
+<div class="line"><a name="l04118"></a><span class="lineno"> 4118</span> nfft_uo2(&u2,&o2,*xj2, n2, m);</div>
+<div class="line"><a name="l04119"></a><span class="lineno"> 4119</span> </div>
+<div class="line"><a name="l04120"></a><span class="lineno"> 4120</span> <span class="keywordflow">for</span> (l0=0; l0<=2*m+1; l0++)</div>
+<div class="line"><a name="l04121"></a><span class="lineno"> 4121</span> index_temp0[l0] = (u0+l0)%n0;</div>
+<div class="line"><a name="l04122"></a><span class="lineno"> 4122</span> </div>
+<div class="line"><a name="l04123"></a><span class="lineno"> 4123</span> <span class="keywordflow">for</span> (l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l04124"></a><span class="lineno"> 4124</span> index_temp1[l1] = (u1+l1)%n1;</div>
+<div class="line"><a name="l04125"></a><span class="lineno"> 4125</span> </div>
+<div class="line"><a name="l04126"></a><span class="lineno"> 4126</span> <span class="keywordflow">for</span> (l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04127"></a><span class="lineno"> 4127</span> index_temp2[l2] = (u2+l2)%n2;</div>
+<div class="line"><a name="l04128"></a><span class="lineno"> 4128</span> </div>
+<div class="line"><a name="l04129"></a><span class="lineno"> 4129</span> <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++)</div>
+<div class="line"><a name="l04130"></a><span class="lineno"> 4130</span> {</div>
+<div class="line"><a name="l04131"></a><span class="lineno"> 4131</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++)</div>
+<div class="line"><a name="l04132"></a><span class="lineno"> 4132</span> {</div>
+<div class="line"><a name="l04133"></a><span class="lineno"> 4133</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04134"></a><span class="lineno"> 4134</span> {</div>
+<div class="line"><a name="l04135"></a><span class="lineno"> 4135</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i = (index_temp0[l0] * n1 + index_temp1[l1]) * n2 + index_temp2[l2];</div>
+<div class="line"><a name="l04136"></a><span class="lineno"> 4136</span> C *lhs = g+i;</div>
+<div class="line"><a name="l04137"></a><span class="lineno"> 4137</span> R *lhs_real = (R*)lhs;</div>
+<div class="line"><a name="l04138"></a><span class="lineno"> 4138</span> C val = psij_const0[l0] * psij_const1[l1] * psij_const2[l2] * f;</div>
+<div class="line"><a name="l04139"></a><span class="lineno"> 4139</span> </div>
+<div class="line"><a name="l04140"></a><span class="lineno"> 4140</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l04141"></a><span class="lineno"> 4141</span> <span class="preprocessor"></span> lhs_real[0] += creal(val);</div>
+<div class="line"><a name="l04142"></a><span class="lineno"> 4142</span> </div>
+<div class="line"><a name="l04143"></a><span class="lineno"> 4143</span> <span class="preprocessor"> #pragma omp atomic</span></div>
+<div class="line"><a name="l04144"></a><span class="lineno"> 4144</span> <span class="preprocessor"></span> lhs_real[1] += cimag(val);</div>
+<div class="line"><a name="l04145"></a><span class="lineno"> 4145</span> }</div>
+<div class="line"><a name="l04146"></a><span class="lineno"> 4146</span> }</div>
+<div class="line"><a name="l04147"></a><span class="lineno"> 4147</span> }</div>
+<div class="line"><a name="l04148"></a><span class="lineno"> 4148</span> }</div>
+<div class="line"><a name="l04149"></a><span class="lineno"> 4149</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04150"></a><span class="lineno"> 4150</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04151"></a><span class="lineno"> 4151</span> <span class="preprocessor">#ifndef _OPENMP</span></div>
+<div class="line"><a name="l04152"></a><span class="lineno"> 4152</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_3d_compute_serial(<span class="keyword">const</span> C *fj, C *g,</div>
+<div class="line"><a name="l04153"></a><span class="lineno"> 4153</span> <span class="keyword">const</span> R *psij_const0, <span class="keyword">const</span> R *psij_const1, <span class="keyword">const</span> R *psij_const2,</div>
+<div class="line"><a name="l04154"></a><span class="lineno"> 4154</span> <span class="keyword">const</span> R *xj0, <span class="keyword">const</span> R *xj1, <span class="keyword">const</span> R *xj2,</div>
+<div class="line"><a name="l04155"></a><span class="lineno"> 4155</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n0, <span class="keyword">const</span> <span class="keywordtype">int</span> n1, <span class="keyword">const</span> <span class="keywordtype">int</span> n2, <span class="keyword">const</span> <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l04156"></a><span class="lineno"> 4156</span> {</div>
+<div class="line"><a name="l04157"></a><span class="lineno"> 4157</span> <span class="keywordtype">int</span> u0,o0,l0,u1,o1,l1,u2,o2,l2;</div>
+<div class="line"><a name="l04158"></a><span class="lineno"> 4158</span> C *gj;</div>
+<div class="line"><a name="l04159"></a><span class="lineno"> 4159</span> <span class="keyword">const</span> R *psij0,*psij1,*psij2;</div>
+<div class="line"><a name="l04160"></a><span class="lineno"> 4160</span> </div>
+<div class="line"><a name="l04161"></a><span class="lineno"> 4161</span> psij0=psij_const0;</div>
+<div class="line"><a name="l04162"></a><span class="lineno"> 4162</span> psij1=psij_const1;</div>
+<div class="line"><a name="l04163"></a><span class="lineno"> 4163</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04164"></a><span class="lineno"> 4164</span> </div>
+<div class="line"><a name="l04165"></a><span class="lineno"> 4165</span> nfft_uo2(&u0,&o0,*xj0, n0, m);</div>
+<div class="line"><a name="l04166"></a><span class="lineno"> 4166</span> nfft_uo2(&u1,&o1,*xj1, n1, m);</div>
+<div class="line"><a name="l04167"></a><span class="lineno"> 4167</span> nfft_uo2(&u2,&o2,*xj2, n2, m);</div>
+<div class="line"><a name="l04168"></a><span class="lineno"> 4168</span> </div>
+<div class="line"><a name="l04169"></a><span class="lineno"> 4169</span> <span class="keywordflow">if</span>(u0<o0)</div>
+<div class="line"><a name="l04170"></a><span class="lineno"> 4170</span> <span class="keywordflow">if</span>(u1<o1)</div>
+<div class="line"><a name="l04171"></a><span class="lineno"> 4171</span> <span class="keywordflow">if</span>(u2<o2)</div>
+<div class="line"><a name="l04172"></a><span class="lineno"> 4172</span> <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l04173"></a><span class="lineno"> 4173</span> {</div>
+<div class="line"><a name="l04174"></a><span class="lineno"> 4174</span> psij1=psij_const1;</div>
+<div class="line"><a name="l04175"></a><span class="lineno"> 4175</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l04176"></a><span class="lineno"> 4176</span> {</div>
+<div class="line"><a name="l04177"></a><span class="lineno"> 4177</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04178"></a><span class="lineno"> 4178</span> gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04179"></a><span class="lineno"> 4179</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04180"></a><span class="lineno"> 4180</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04181"></a><span class="lineno"> 4181</span> }</div>
+<div class="line"><a name="l04182"></a><span class="lineno"> 4182</span> }</div>
+<div class="line"><a name="l04183"></a><span class="lineno"> 4183</span> <span class="keywordflow">else</span><span class="comment">/* asserts (u2>o2)*/</span></div>
+<div class="line"><a name="l04184"></a><span class="lineno"> 4184</span> <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l04185"></a><span class="lineno"> 4185</span> {</div>
+<div class="line"><a name="l04186"></a><span class="lineno"> 4186</span> psij1=psij_const1;</div>
+<div class="line"><a name="l04187"></a><span class="lineno"> 4187</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l04188"></a><span class="lineno"> 4188</span> {</div>
+<div class="line"><a name="l04189"></a><span class="lineno"> 4189</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04190"></a><span class="lineno"> 4190</span> gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04191"></a><span class="lineno"> 4191</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04192"></a><span class="lineno"> 4192</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04193"></a><span class="lineno"> 4193</span> gj=g+((u0+l0)*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l04194"></a><span class="lineno"> 4194</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04195"></a><span class="lineno"> 4195</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04196"></a><span class="lineno"> 4196</span> }</div>
+<div class="line"><a name="l04197"></a><span class="lineno"> 4197</span> }</div>
+<div class="line"><a name="l04198"></a><span class="lineno"> 4198</span> <span class="keywordflow">else</span><span class="comment">/* asserts (u1>o1)*/</span></div>
+<div class="line"><a name="l04199"></a><span class="lineno"> 4199</span> <span class="keywordflow">if</span>(u2<o2)</div>
+<div class="line"><a name="l04200"></a><span class="lineno"> 4200</span> <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l04201"></a><span class="lineno"> 4201</span> {</div>
+<div class="line"><a name="l04202"></a><span class="lineno"> 4202</span> psij1=psij_const1;</div>
+<div class="line"><a name="l04203"></a><span class="lineno"> 4203</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l04204"></a><span class="lineno"> 4204</span> {</div>
+<div class="line"><a name="l04205"></a><span class="lineno"> 4205</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04206"></a><span class="lineno"> 4206</span> gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04207"></a><span class="lineno"> 4207</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04208"></a><span class="lineno"> 4208</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04209"></a><span class="lineno"> 4209</span> }</div>
+<div class="line"><a name="l04210"></a><span class="lineno"> 4210</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l04211"></a><span class="lineno"> 4211</span> {</div>
+<div class="line"><a name="l04212"></a><span class="lineno"> 4212</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04213"></a><span class="lineno"> 4213</span> gj=g+((u0+l0)*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l04214"></a><span class="lineno"> 4214</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04215"></a><span class="lineno"> 4215</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04216"></a><span class="lineno"> 4216</span> }</div>
+<div class="line"><a name="l04217"></a><span class="lineno"> 4217</span> }</div>
+<div class="line"><a name="l04218"></a><span class="lineno"> 4218</span> <span class="keywordflow">else</span><span class="comment">/* asserts (u2>o2) */</span></div>
+<div class="line"><a name="l04219"></a><span class="lineno"> 4219</span> {</div>
+<div class="line"><a name="l04220"></a><span class="lineno"> 4220</span> <span class="keywordflow">for</span>(l0=0; l0<=2*m+1; l0++,psij0++)</div>
+<div class="line"><a name="l04221"></a><span class="lineno"> 4221</span> {</div>
+<div class="line"><a name="l04222"></a><span class="lineno"> 4222</span> psij1=psij_const1;</div>
+<div class="line"><a name="l04223"></a><span class="lineno"> 4223</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l04224"></a><span class="lineno"> 4224</span> {</div>
+<div class="line"><a name="l04225"></a><span class="lineno"> 4225</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04226"></a><span class="lineno"> 4226</span> gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04227"></a><span class="lineno"> 4227</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04228"></a><span class="lineno"> 4228</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04229"></a><span class="lineno"> 4229</span> gj=g+((u0+l0)*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l04230"></a><span class="lineno"> 4230</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04231"></a><span class="lineno"> 4231</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04232"></a><span class="lineno"> 4232</span> }</div>
+<div class="line"><a name="l04233"></a><span class="lineno"> 4233</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l04234"></a><span class="lineno"> 4234</span> {</div>
+<div class="line"><a name="l04235"></a><span class="lineno"> 4235</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04236"></a><span class="lineno"> 4236</span> gj=g+((u0+l0)*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l04237"></a><span class="lineno"> 4237</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04238"></a><span class="lineno"> 4238</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04239"></a><span class="lineno"> 4239</span> gj=g+((u0+l0)*n1+l1)*n2;</div>
+<div class="line"><a name="l04240"></a><span class="lineno"> 4240</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04241"></a><span class="lineno"> 4241</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04242"></a><span class="lineno"> 4242</span> }</div>
+<div class="line"><a name="l04243"></a><span class="lineno"> 4243</span> }</div>
+<div class="line"><a name="l04244"></a><span class="lineno"> 4244</span> }</div>
+<div class="line"><a name="l04245"></a><span class="lineno"> 4245</span> <span class="keywordflow">else</span><span class="comment">/* asserts (u0>o0) */</span></div>
+<div class="line"><a name="l04246"></a><span class="lineno"> 4246</span> <span class="keywordflow">if</span>(u1<o1)</div>
+<div class="line"><a name="l04247"></a><span class="lineno"> 4247</span> <span class="keywordflow">if</span>(u2<o2)</div>
+<div class="line"><a name="l04248"></a><span class="lineno"> 4248</span> {</div>
+<div class="line"><a name="l04249"></a><span class="lineno"> 4249</span> <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l04250"></a><span class="lineno"> 4250</span> {</div>
+<div class="line"><a name="l04251"></a><span class="lineno"> 4251</span> psij1=psij_const1;</div>
+<div class="line"><a name="l04252"></a><span class="lineno"> 4252</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l04253"></a><span class="lineno"> 4253</span> {</div>
+<div class="line"><a name="l04254"></a><span class="lineno"> 4254</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04255"></a><span class="lineno"> 4255</span> gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04256"></a><span class="lineno"> 4256</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04257"></a><span class="lineno"> 4257</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04258"></a><span class="lineno"> 4258</span> }</div>
+<div class="line"><a name="l04259"></a><span class="lineno"> 4259</span> }</div>
+<div class="line"><a name="l04260"></a><span class="lineno"> 4260</span> </div>
+<div class="line"><a name="l04261"></a><span class="lineno"> 4261</span> <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l04262"></a><span class="lineno"> 4262</span> {</div>
+<div class="line"><a name="l04263"></a><span class="lineno"> 4263</span> psij1=psij_const1;</div>
+<div class="line"><a name="l04264"></a><span class="lineno"> 4264</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l04265"></a><span class="lineno"> 4265</span> {</div>
+<div class="line"><a name="l04266"></a><span class="lineno"> 4266</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04267"></a><span class="lineno"> 4267</span> gj=g+(l0*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04268"></a><span class="lineno"> 4268</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04269"></a><span class="lineno"> 4269</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04270"></a><span class="lineno"> 4270</span> }</div>
+<div class="line"><a name="l04271"></a><span class="lineno"> 4271</span> }</div>
+<div class="line"><a name="l04272"></a><span class="lineno"> 4272</span> }</div>
+<div class="line"><a name="l04273"></a><span class="lineno"> 4273</span> <span class="keywordflow">else</span><span class="comment">/* asserts (u2>o2) */</span></div>
+<div class="line"><a name="l04274"></a><span class="lineno"> 4274</span> {</div>
+<div class="line"><a name="l04275"></a><span class="lineno"> 4275</span> <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l04276"></a><span class="lineno"> 4276</span> {</div>
+<div class="line"><a name="l04277"></a><span class="lineno"> 4277</span> psij1=psij_const1;</div>
+<div class="line"><a name="l04278"></a><span class="lineno"> 4278</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l04279"></a><span class="lineno"> 4279</span> {</div>
+<div class="line"><a name="l04280"></a><span class="lineno"> 4280</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04281"></a><span class="lineno"> 4281</span> gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04282"></a><span class="lineno"> 4282</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04283"></a><span class="lineno"> 4283</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04284"></a><span class="lineno"> 4284</span> gj=g+((u0+l0)*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l04285"></a><span class="lineno"> 4285</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04286"></a><span class="lineno"> 4286</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04287"></a><span class="lineno"> 4287</span> }</div>
+<div class="line"><a name="l04288"></a><span class="lineno"> 4288</span> }</div>
+<div class="line"><a name="l04289"></a><span class="lineno"> 4289</span> </div>
+<div class="line"><a name="l04290"></a><span class="lineno"> 4290</span> <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l04291"></a><span class="lineno"> 4291</span> {</div>
+<div class="line"><a name="l04292"></a><span class="lineno"> 4292</span> psij1=psij_const1;</div>
+<div class="line"><a name="l04293"></a><span class="lineno"> 4293</span> <span class="keywordflow">for</span>(l1=0; l1<=2*m+1; l1++,psij1++)</div>
+<div class="line"><a name="l04294"></a><span class="lineno"> 4294</span> {</div>
+<div class="line"><a name="l04295"></a><span class="lineno"> 4295</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04296"></a><span class="lineno"> 4296</span> gj=g+(l0*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04297"></a><span class="lineno"> 4297</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04298"></a><span class="lineno"> 4298</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04299"></a><span class="lineno"> 4299</span> gj=g+(l0*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l04300"></a><span class="lineno"> 4300</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04301"></a><span class="lineno"> 4301</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04302"></a><span class="lineno"> 4302</span> }</div>
+<div class="line"><a name="l04303"></a><span class="lineno"> 4303</span> }</div>
+<div class="line"><a name="l04304"></a><span class="lineno"> 4304</span> }</div>
+<div class="line"><a name="l04305"></a><span class="lineno"> 4305</span> <span class="keywordflow">else</span><span class="comment">/* asserts (u1>o1) */</span></div>
+<div class="line"><a name="l04306"></a><span class="lineno"> 4306</span> <span class="keywordflow">if</span>(u2<o2)</div>
+<div class="line"><a name="l04307"></a><span class="lineno"> 4307</span> {</div>
+<div class="line"><a name="l04308"></a><span class="lineno"> 4308</span> <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l04309"></a><span class="lineno"> 4309</span> {</div>
+<div class="line"><a name="l04310"></a><span class="lineno"> 4310</span> psij1=psij_const1;</div>
+<div class="line"><a name="l04311"></a><span class="lineno"> 4311</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l04312"></a><span class="lineno"> 4312</span> {</div>
+<div class="line"><a name="l04313"></a><span class="lineno"> 4313</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04314"></a><span class="lineno"> 4314</span> gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04315"></a><span class="lineno"> 4315</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04316"></a><span class="lineno"> 4316</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04317"></a><span class="lineno"> 4317</span> }</div>
+<div class="line"><a name="l04318"></a><span class="lineno"> 4318</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l04319"></a><span class="lineno"> 4319</span> {</div>
+<div class="line"><a name="l04320"></a><span class="lineno"> 4320</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04321"></a><span class="lineno"> 4321</span> gj=g+((u0+l0)*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l04322"></a><span class="lineno"> 4322</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04323"></a><span class="lineno"> 4323</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04324"></a><span class="lineno"> 4324</span> }</div>
+<div class="line"><a name="l04325"></a><span class="lineno"> 4325</span> }</div>
+<div class="line"><a name="l04326"></a><span class="lineno"> 4326</span> <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l04327"></a><span class="lineno"> 4327</span> {</div>
+<div class="line"><a name="l04328"></a><span class="lineno"> 4328</span> psij1=psij_const1;</div>
+<div class="line"><a name="l04329"></a><span class="lineno"> 4329</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l04330"></a><span class="lineno"> 4330</span> {</div>
+<div class="line"><a name="l04331"></a><span class="lineno"> 4331</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04332"></a><span class="lineno"> 4332</span> gj=g+(l0*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04333"></a><span class="lineno"> 4333</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04334"></a><span class="lineno"> 4334</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04335"></a><span class="lineno"> 4335</span> }</div>
+<div class="line"><a name="l04336"></a><span class="lineno"> 4336</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l04337"></a><span class="lineno"> 4337</span> {</div>
+<div class="line"><a name="l04338"></a><span class="lineno"> 4338</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04339"></a><span class="lineno"> 4339</span> gj=g+(l0*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l04340"></a><span class="lineno"> 4340</span> <span class="keywordflow">for</span>(l2=0; l2<=2*m+1; l2++)</div>
+<div class="line"><a name="l04341"></a><span class="lineno"> 4341</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04342"></a><span class="lineno"> 4342</span> }</div>
+<div class="line"><a name="l04343"></a><span class="lineno"> 4343</span> }</div>
+<div class="line"><a name="l04344"></a><span class="lineno"> 4344</span> }</div>
+<div class="line"><a name="l04345"></a><span class="lineno"> 4345</span> <span class="keywordflow">else</span><span class="comment">/* asserts (u2>o2) */</span></div>
+<div class="line"><a name="l04346"></a><span class="lineno"> 4346</span> {</div>
+<div class="line"><a name="l04347"></a><span class="lineno"> 4347</span> <span class="keywordflow">for</span>(l0=0; l0<2*m+1-o0; l0++,psij0++)</div>
+<div class="line"><a name="l04348"></a><span class="lineno"> 4348</span> {</div>
+<div class="line"><a name="l04349"></a><span class="lineno"> 4349</span> psij1=psij_const1;</div>
+<div class="line"><a name="l04350"></a><span class="lineno"> 4350</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l04351"></a><span class="lineno"> 4351</span> {</div>
+<div class="line"><a name="l04352"></a><span class="lineno"> 4352</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04353"></a><span class="lineno"> 4353</span> gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04354"></a><span class="lineno"> 4354</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04355"></a><span class="lineno"> 4355</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04356"></a><span class="lineno"> 4356</span> gj=g+((u0+l0)*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l04357"></a><span class="lineno"> 4357</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04358"></a><span class="lineno"> 4358</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04359"></a><span class="lineno"> 4359</span> }</div>
+<div class="line"><a name="l04360"></a><span class="lineno"> 4360</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l04361"></a><span class="lineno"> 4361</span> {</div>
+<div class="line"><a name="l04362"></a><span class="lineno"> 4362</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04363"></a><span class="lineno"> 4363</span> gj=g+((u0+l0)*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l04364"></a><span class="lineno"> 4364</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04365"></a><span class="lineno"> 4365</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04366"></a><span class="lineno"> 4366</span> gj=g+((u0+l0)*n1+l1)*n2;</div>
+<div class="line"><a name="l04367"></a><span class="lineno"> 4367</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04368"></a><span class="lineno"> 4368</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04369"></a><span class="lineno"> 4369</span> }</div>
+<div class="line"><a name="l04370"></a><span class="lineno"> 4370</span> }</div>
+<div class="line"><a name="l04371"></a><span class="lineno"> 4371</span> </div>
+<div class="line"><a name="l04372"></a><span class="lineno"> 4372</span> <span class="keywordflow">for</span>(l0=0; l0<=o0; l0++,psij0++)</div>
+<div class="line"><a name="l04373"></a><span class="lineno"> 4373</span> {</div>
+<div class="line"><a name="l04374"></a><span class="lineno"> 4374</span> psij1=psij_const1;</div>
+<div class="line"><a name="l04375"></a><span class="lineno"> 4375</span> <span class="keywordflow">for</span>(l1=0; l1<2*m+1-o1; l1++,psij1++)</div>
+<div class="line"><a name="l04376"></a><span class="lineno"> 4376</span> {</div>
+<div class="line"><a name="l04377"></a><span class="lineno"> 4377</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04378"></a><span class="lineno"> 4378</span> gj=g+(l0*n1+(u1+l1))*n2+u2;</div>
+<div class="line"><a name="l04379"></a><span class="lineno"> 4379</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04380"></a><span class="lineno"> 4380</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04381"></a><span class="lineno"> 4381</span> gj=g+(l0*n1+(u1+l1))*n2;</div>
+<div class="line"><a name="l04382"></a><span class="lineno"> 4382</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04383"></a><span class="lineno"> 4383</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04384"></a><span class="lineno"> 4384</span> }</div>
+<div class="line"><a name="l04385"></a><span class="lineno"> 4385</span> <span class="keywordflow">for</span>(l1=0; l1<=o1; l1++,psij1++)</div>
+<div class="line"><a name="l04386"></a><span class="lineno"> 4386</span> {</div>
+<div class="line"><a name="l04387"></a><span class="lineno"> 4387</span> psij2=psij_const2;</div>
+<div class="line"><a name="l04388"></a><span class="lineno"> 4388</span> gj=g+(l0*n1+l1)*n2+u2;</div>
+<div class="line"><a name="l04389"></a><span class="lineno"> 4389</span> <span class="keywordflow">for</span>(l2=0; l2<2*m+1-o2; l2++)</div>
+<div class="line"><a name="l04390"></a><span class="lineno"> 4390</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04391"></a><span class="lineno"> 4391</span> gj=g+(l0*n1+l1)*n2;</div>
+<div class="line"><a name="l04392"></a><span class="lineno"> 4392</span> <span class="keywordflow">for</span>(l2=0; l2<=o2; l2++)</div>
+<div class="line"><a name="l04393"></a><span class="lineno"> 4393</span> (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);</div>
+<div class="line"><a name="l04394"></a><span class="lineno"> 4394</span> }</div>
+<div class="line"><a name="l04395"></a><span class="lineno"> 4395</span> }</div>
+<div class="line"><a name="l04396"></a><span class="lineno"> 4396</span> }</div>
+<div class="line"><a name="l04397"></a><span class="lineno"> 4397</span> }</div>
+<div class="line"><a name="l04398"></a><span class="lineno"> 4398</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04399"></a><span class="lineno"> 4399</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04400"></a><span class="lineno"> 4400</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_trafo_3d_B(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l04401"></a><span class="lineno"> 4401</span> {</div>
+<div class="line"><a name="l04402"></a><span class="lineno"> 4402</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N0 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];</div>
+<div class="line"><a name="l04403"></a><span class="lineno"> 4403</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n0 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0];</div>
+<div class="line"><a name="l04404"></a><span class="lineno"> 4404</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N1 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];</div>
+<div class="line"><a name="l04405"></a><span class="lineno"> 4405</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n1 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[1];</div>
+<div class="line"><a name="l04406"></a><span class="lineno"> 4406</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N2 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2];</div>
+<div class="line"><a name="l04407"></a><span class="lineno"> 4407</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n2 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[2];</div>
+<div class="line"><a name="l04408"></a><span class="lineno"> 4408</span> <span class="keyword">const</span> <span class="keywordtype">int</span> M = ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l04409"></a><span class="lineno"> 4409</span> <span class="keyword">const</span> <span class="keywordtype">int</span> m = ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>;</div>
+<div class="line"><a name="l04410"></a><span class="lineno"> 4410</span> </div>
+<div class="line"><a name="l04411"></a><span class="lineno"> 4411</span> <span class="keyword">const</span> C* g = (C*) ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>;</div>
+<div class="line"><a name="l04412"></a><span class="lineno"> 4412</span> </div>
+<div class="line"><a name="l04413"></a><span class="lineno"> 4413</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l04414"></a><span class="lineno"> 4414</span> </div>
+<div class="line"><a name="l04415"></a><span class="lineno"> 4415</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l04416"></a><span class="lineno"> 4416</span> {</div>
+<div class="line"><a name="l04417"></a><span class="lineno"> 4417</span> <span class="keyword">const</span> <span class="keywordtype">int</span> lprod = (2*m+2) * (2*m+2) * (2*m+2);</div>
+<div class="line"><a name="l04418"></a><span class="lineno"> 4418</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04419"></a><span class="lineno"> 4419</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04420"></a><span class="lineno"> 4420</span> {</div>
+<div class="line"><a name="l04421"></a><span class="lineno"> 4421</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l04422"></a><span class="lineno"> 4422</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l04423"></a><span class="lineno"> 4423</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = K(0.0);</div>
+<div class="line"><a name="l04424"></a><span class="lineno"> 4424</span> <span class="keywordflow">for</span> (l = 0; l < lprod; l++)</div>
+<div class="line"><a name="l04425"></a><span class="lineno"> 4425</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[j*lprod+l] * g[ths-><a class="code" href="structnfft_ [...]
+<div class="line"><a name="l04426"></a><span class="lineno"> 4426</span> }</div>
+<div class="line"><a name="l04427"></a><span class="lineno"> 4427</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04428"></a><span class="lineno"> 4428</span> } <span class="comment">/* if(PRE_FULL_PSI) */</span></div>
+<div class="line"><a name="l04429"></a><span class="lineno"> 4429</span> </div>
+<div class="line"><a name="l04430"></a><span class="lineno"> 4430</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l04431"></a><span class="lineno"> 4431</span> {</div>
+<div class="line"><a name="l04432"></a><span class="lineno"> 4432</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04433"></a><span class="lineno"> 4433</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04434"></a><span class="lineno"> 4434</span> {</div>
+<div class="line"><a name="l04435"></a><span class="lineno"> 4435</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l04436"></a><span class="lineno"> 4436</span> nfft_trafo_3d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>+j*3*(2*m+2), ths-><a class="code" [...]
+<div class="line"><a name="l04437"></a><span class="lineno"> 4437</span> }</div>
+<div class="line"><a name="l04438"></a><span class="lineno"> 4438</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04439"></a><span class="lineno"> 4439</span> } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l04440"></a><span class="lineno"> 4440</span> </div>
+<div class="line"><a name="l04441"></a><span class="lineno"> 4441</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l04442"></a><span class="lineno"> 4442</span> {</div>
+<div class="line"><a name="l04443"></a><span class="lineno"> 4443</span> R fg_exp_l[3*(2*m+2)];</div>
+<div class="line"><a name="l04444"></a><span class="lineno"> 4444</span> </div>
+<div class="line"><a name="l04445"></a><span class="lineno"> 4445</span> nfft_3d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l04446"></a><span class="lineno"> 4446</span> nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l04447"></a><span class="lineno"> 4447</span> nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[2]);</div>
+<div class="line"><a name="l04448"></a><span class="lineno"> 4448</span> </div>
+<div class="line"><a name="l04449"></a><span class="lineno"> 4449</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04450"></a><span class="lineno"> 4450</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04451"></a><span class="lineno"> 4451</span> {</div>
+<div class="line"><a name="l04452"></a><span class="lineno"> 4452</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l04453"></a><span class="lineno"> 4453</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l04454"></a><span class="lineno"> 4454</span> R psij_const[3*(2*m+2)];</div>
+<div class="line"><a name="l04455"></a><span class="lineno"> 4455</span> R fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*j*3];</div>
+<div class="line"><a name="l04456"></a><span class="lineno"> 4456</span> R fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*j*3+1];</div>
+<div class="line"><a name="l04457"></a><span class="lineno"> 4457</span> R fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04458"></a><span class="lineno"> 4458</span> </div>
+<div class="line"><a name="l04459"></a><span class="lineno"> 4459</span> psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l04460"></a><span class="lineno"> 4460</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04461"></a><span class="lineno"> 4461</span> {</div>
+<div class="line"><a name="l04462"></a><span class="lineno"> 4462</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04463"></a><span class="lineno"> 4463</span> psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];</div>
+<div class="line"><a name="l04464"></a><span class="lineno"> 4464</span> }</div>
+<div class="line"><a name="l04465"></a><span class="lineno"> 4465</span> </div>
+<div class="line"><a name="l04466"></a><span class="lineno"> 4466</span> fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*3+1)];</div>
+<div class="line"><a name="l04467"></a><span class="lineno"> 4467</span> fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*3+1)+1];</div>
+<div class="line"><a name="l04468"></a><span class="lineno"> 4468</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04469"></a><span class="lineno"> 4469</span> psij_const[2*m+2] = fg_psij0;</div>
+<div class="line"><a name="l04470"></a><span class="lineno"> 4470</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04471"></a><span class="lineno"> 4471</span> {</div>
+<div class="line"><a name="l04472"></a><span class="lineno"> 4472</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04473"></a><span class="lineno"> 4473</span> psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];</div>
+<div class="line"><a name="l04474"></a><span class="lineno"> 4474</span> }</div>
+<div class="line"><a name="l04475"></a><span class="lineno"> 4475</span> </div>
+<div class="line"><a name="l04476"></a><span class="lineno"> 4476</span> fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*3+2)];</div>
+<div class="line"><a name="l04477"></a><span class="lineno"> 4477</span> fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*3+2)+1];</div>
+<div class="line"><a name="l04478"></a><span class="lineno"> 4478</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04479"></a><span class="lineno"> 4479</span> psij_const[2*(2*m+2)] = fg_psij0;</div>
+<div class="line"><a name="l04480"></a><span class="lineno"> 4480</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04481"></a><span class="lineno"> 4481</span> {</div>
+<div class="line"><a name="l04482"></a><span class="lineno"> 4482</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04483"></a><span class="lineno"> 4483</span> psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l];</div>
+<div class="line"><a name="l04484"></a><span class="lineno"> 4484</span> }</div>
+<div class="line"><a name="l04485"></a><span class="lineno"> 4485</span> </div>
+<div class="line"><a name="l04486"></a><span class="lineno"> 4486</span> nfft_trafo_3d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>+3*j, ths-><a cl [...]
+<div class="line"><a name="l04487"></a><span class="lineno"> 4487</span> }</div>
+<div class="line"><a name="l04488"></a><span class="lineno"> 4488</span> </div>
+<div class="line"><a name="l04489"></a><span class="lineno"> 4489</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04490"></a><span class="lineno"> 4490</span> } <span class="comment">/* if(PRE_FG_PSI) */</span></div>
+<div class="line"><a name="l04491"></a><span class="lineno"> 4491</span> </div>
+<div class="line"><a name="l04492"></a><span class="lineno"> 4492</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FG_PSI)</div>
+<div class="line"><a name="l04493"></a><span class="lineno"> 4493</span> {</div>
+<div class="line"><a name="l04494"></a><span class="lineno"> 4494</span> R fg_exp_l[3*(2*m+2)];</div>
+<div class="line"><a name="l04495"></a><span class="lineno"> 4495</span> </div>
+<div class="line"><a name="l04496"></a><span class="lineno"> 4496</span> nfft_3d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l04497"></a><span class="lineno"> 4497</span> nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l04498"></a><span class="lineno"> 4498</span> nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[2]);</div>
+<div class="line"><a name="l04499"></a><span class="lineno"> 4499</span> </div>
+<div class="line"><a name="l04500"></a><span class="lineno"> 4500</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l04501"></a><span class="lineno"> 4501</span> </div>
+<div class="line"><a name="l04502"></a><span class="lineno"> 4502</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04503"></a><span class="lineno"> 4503</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04504"></a><span class="lineno"> 4504</span> {</div>
+<div class="line"><a name="l04505"></a><span class="lineno"> 4505</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l04506"></a><span class="lineno"> 4506</span> <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l04507"></a><span class="lineno"> 4507</span> R psij_const[3*(2*m+2)];</div>
+<div class="line"><a name="l04508"></a><span class="lineno"> 4508</span> R fg_psij0, fg_psij1, fg_psij2;</div>
+<div class="line"><a name="l04509"></a><span class="lineno"> 4509</span> </div>
+<div class="line"><a name="l04510"></a><span class="lineno"> 4510</span> nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l04511"></a><span class="lineno"> 4511</span> fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j]-((R)u)/n0,0));</div>
+<div class="line"><a name="l04512"></a><span class="lineno"> 4512</span> fg_psij1 = EXP(K(2.0)*(n0*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l04513"></a><span class="lineno"> 4513</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04514"></a><span class="lineno"> 4514</span> psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l04515"></a><span class="lineno"> 4515</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04516"></a><span class="lineno"> 4516</span> {</div>
+<div class="line"><a name="l04517"></a><span class="lineno"> 4517</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04518"></a><span class="lineno"> 4518</span> psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];</div>
+<div class="line"><a name="l04519"></a><span class="lineno"> 4519</span> }</div>
+<div class="line"><a name="l04520"></a><span class="lineno"> 4520</span> </div>
+<div class="line"><a name="l04521"></a><span class="lineno"> 4521</span> nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l04522"></a><span class="lineno"> 4522</span> fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1]-((R)u)/n1,1));</div>
+<div class="line"><a name="l04523"></a><span class="lineno"> 4523</span> fg_psij1 = EXP(K(2.0)*(n1*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l04524"></a><span class="lineno"> 4524</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04525"></a><span class="lineno"> 4525</span> psij_const[2*m+2] = fg_psij0;</div>
+<div class="line"><a name="l04526"></a><span class="lineno"> 4526</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04527"></a><span class="lineno"> 4527</span> {</div>
+<div class="line"><a name="l04528"></a><span class="lineno"> 4528</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04529"></a><span class="lineno"> 4529</span> psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];</div>
+<div class="line"><a name="l04530"></a><span class="lineno"> 4530</span> }</div>
+<div class="line"><a name="l04531"></a><span class="lineno"> 4531</span> </div>
+<div class="line"><a name="l04532"></a><span class="lineno"> 4532</span> nfft_uo(ths,j,&u,&o,2);</div>
+<div class="line"><a name="l04533"></a><span class="lineno"> 4533</span> fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2]-((R)u)/n2,2));</div>
+<div class="line"><a name="l04534"></a><span class="lineno"> 4534</span> fg_psij1 = EXP(K(2.0)*(n2*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[2]);</div>
+<div class="line"><a name="l04535"></a><span class="lineno"> 4535</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04536"></a><span class="lineno"> 4536</span> psij_const[2*(2*m+2)] = fg_psij0;</div>
+<div class="line"><a name="l04537"></a><span class="lineno"> 4537</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04538"></a><span class="lineno"> 4538</span> {</div>
+<div class="line"><a name="l04539"></a><span class="lineno"> 4539</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04540"></a><span class="lineno"> 4540</span> psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l];</div>
+<div class="line"><a name="l04541"></a><span class="lineno"> 4541</span> }</div>
+<div class="line"><a name="l04542"></a><span class="lineno"> 4542</span> </div>
+<div class="line"><a name="l04543"></a><span class="lineno"> 4543</span> nfft_trafo_3d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>+3*j, ths-><a cl [...]
+<div class="line"><a name="l04544"></a><span class="lineno"> 4544</span> }</div>
+<div class="line"><a name="l04545"></a><span class="lineno"> 4545</span> </div>
+<div class="line"><a name="l04546"></a><span class="lineno"> 4546</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04547"></a><span class="lineno"> 4547</span> } <span class="comment">/* if(FG_PSI) */</span></div>
+<div class="line"><a name="l04548"></a><span class="lineno"> 4548</span> </div>
+<div class="line"><a name="l04549"></a><span class="lineno"> 4549</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l04550"></a><span class="lineno"> 4550</span> {</div>
+<div class="line"><a name="l04551"></a><span class="lineno"> 4551</span> <span class="keyword">const</span> <span class="keywordtype">int</span> K = ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>, ip_s = K / (m + 2);</div>
+<div class="line"><a name="l04552"></a><span class="lineno"> 4552</span> </div>
+<div class="line"><a name="l04553"></a><span class="lineno"> 4553</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l04554"></a><span class="lineno"> 4554</span> </div>
+<div class="line"><a name="l04555"></a><span class="lineno"> 4555</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04556"></a><span class="lineno"> 4556</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04557"></a><span class="lineno"> 4557</span> {</div>
+<div class="line"><a name="l04558"></a><span class="lineno"> 4558</span> <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l04559"></a><span class="lineno"> 4559</span> R ip_y, ip_w;</div>
+<div class="line"><a name="l04560"></a><span class="lineno"> 4560</span> <span class="keywordtype">int</span> ip_u;</div>
+<div class="line"><a name="l04561"></a><span class="lineno"> 4561</span> R psij_const[3*(2*m+2)];</div>
+<div class="line"><a name="l04562"></a><span class="lineno"> 4562</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l04563"></a><span class="lineno"> 4563</span> </div>
+<div class="line"><a name="l04564"></a><span class="lineno"> 4564</span> nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l04565"></a><span class="lineno"> 4565</span> ip_y = FABS(n0*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+0] - u)*((R)ip_s);</div>
+<div class="line"><a name="l04566"></a><span class="lineno"> 4566</span> ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l04567"></a><span class="lineno"> 4567</span> ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l04568"></a><span class="lineno"> 4568</span> <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l04569"></a><span class="lineno"> 4569</span> psij_const[l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +</div>
+<div class="line"><a name="l04570"></a><span class="lineno"> 4570</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s+1)]*(ip_w);</div>
+<div class="line"><a name="l04571"></a><span class="lineno"> 4571</span> </div>
+<div class="line"><a name="l04572"></a><span class="lineno"> 4572</span> nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l04573"></a><span class="lineno"> 4573</span> ip_y = FABS(n1*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1] - u)*((R)ip_s);</div>
+<div class="line"><a name="l04574"></a><span class="lineno"> 4574</span> ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l04575"></a><span class="lineno"> 4575</span> ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l04576"></a><span class="lineno"> 4576</span> <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l04577"></a><span class="lineno"> 4577</span> psij_const[2*m+2+l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +</div>
+<div class="line"><a name="l04578"></a><span class="lineno"> 4578</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);</div>
+<div class="line"><a name="l04579"></a><span class="lineno"> 4579</span> </div>
+<div class="line"><a name="l04580"></a><span class="lineno"> 4580</span> nfft_uo(ths,j,&u,&o,2);</div>
+<div class="line"><a name="l04581"></a><span class="lineno"> 4581</span> ip_y = FABS(n2*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2] - u)*((R)ip_s);</div>
+<div class="line"><a name="l04582"></a><span class="lineno"> 4582</span> ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l04583"></a><span class="lineno"> 4583</span> ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l04584"></a><span class="lineno"> 4584</span> <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l04585"></a><span class="lineno"> 4585</span> psij_const[2*(2*m+2)+l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +</div>
+<div class="line"><a name="l04586"></a><span class="lineno"> 4586</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);</div>
+<div class="line"><a name="l04587"></a><span class="lineno"> 4587</span> </div>
+<div class="line"><a name="l04588"></a><span class="lineno"> 4588</span> nfft_trafo_3d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>+3*j, ths-><a cl [...]
+<div class="line"><a name="l04589"></a><span class="lineno"> 4589</span> }</div>
+<div class="line"><a name="l04590"></a><span class="lineno"> 4590</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04591"></a><span class="lineno"> 4591</span> } <span class="comment">/* if(PRE_LIN_PSI) */</span></div>
+<div class="line"><a name="l04592"></a><span class="lineno"> 4592</span> </div>
+<div class="line"><a name="l04593"></a><span class="lineno"> 4593</span> <span class="comment">/* no precomputed psi at all */</span></div>
+<div class="line"><a name="l04594"></a><span class="lineno"> 4594</span> </div>
+<div class="line"><a name="l04595"></a><span class="lineno"> 4595</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l04596"></a><span class="lineno"> 4596</span> </div>
+<div class="line"><a name="l04597"></a><span class="lineno"> 4597</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04598"></a><span class="lineno"> 4598</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04599"></a><span class="lineno"> 4599</span> {</div>
+<div class="line"><a name="l04600"></a><span class="lineno"> 4600</span> R psij_const[3*(2*m+2)];</div>
+<div class="line"><a name="l04601"></a><span class="lineno"> 4601</span> <span class="keywordtype">int</span> u, o, l;</div>
+<div class="line"><a name="l04602"></a><span class="lineno"> 4602</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when [...]
+<div class="line"><a name="l04603"></a><span class="lineno"> 4603</span> </div>
+<div class="line"><a name="l04604"></a><span class="lineno"> 4604</span> nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l04605"></a><span class="lineno"> 4605</span> <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l04606"></a><span class="lineno"> 4606</span> psij_const[l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j]-((R)((u+l)))/n0,0));</div>
+<div class="line"><a name="l04607"></a><span class="lineno"> 4607</span> </div>
+<div class="line"><a name="l04608"></a><span class="lineno"> 4608</span> nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l04609"></a><span class="lineno"> 4609</span> <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l04610"></a><span class="lineno"> 4610</span> psij_const[2*m+2+l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1]-((R)((u+l)))/n1,1));</div>
+<div class="line"><a name="l04611"></a><span class="lineno"> 4611</span> </div>
+<div class="line"><a name="l04612"></a><span class="lineno"> 4612</span> nfft_uo(ths,j,&u,&o,2);</div>
+<div class="line"><a name="l04613"></a><span class="lineno"> 4613</span> <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l04614"></a><span class="lineno"> 4614</span> psij_const[2*(2*m+2)+l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2]-((R)((u+l)))/n2,2));</div>
+<div class="line"><a name="l04615"></a><span class="lineno"> 4615</span> </div>
+<div class="line"><a name="l04616"></a><span class="lineno"> 4616</span> nfft_trafo_3d_compute(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>+3*j, ths-><a clas [...]
+<div class="line"><a name="l04617"></a><span class="lineno"> 4617</span> }</div>
+<div class="line"><a name="l04618"></a><span class="lineno"> 4618</span> }</div>
+<div class="line"><a name="l04619"></a><span class="lineno"> 4619</span> </div>
+<div class="line"><a name="l04620"></a><span class="lineno"> 4620</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l04621"></a><span class="lineno"> 4621</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A \</span></div>
+<div class="line"><a name="l04622"></a><span class="lineno"> 4622</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l04623"></a><span class="lineno"> 4623</span> <span class="preprocessor"> assert(ar_x[2*k] >= min_u_a || k == M-1); \</span></div>
+<div class="line"><a name="l04624"></a><span class="lineno"> 4624</span> <span class="preprocessor"> if (k > 0) \</span></div>
+<div class="line"><a name="l04625"></a><span class="lineno"> 4625</span> <span class="preprocessor"> assert(ar_x[2*k-2] < min_u_a); \</span></div>
+<div class="line"><a name="l04626"></a><span class="lineno"> 4626</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l04627"></a><span class="lineno"> 4627</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l04628"></a><span class="lineno"> 4628</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A</span></div>
+<div class="line"><a name="l04629"></a><span class="lineno"> 4629</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04630"></a><span class="lineno"> 4630</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04631"></a><span class="lineno"> 4631</span> <span class="preprocessor">#ifdef OMP_ASSERT</span></div>
+<div class="line"><a name="l04632"></a><span class="lineno"> 4632</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B \</span></div>
+<div class="line"><a name="l04633"></a><span class="lineno"> 4633</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l04634"></a><span class="lineno"> 4634</span> <span class="preprocessor"> assert(ar_x[2*k] >= min_u_b || k == M-1); \</span></div>
+<div class="line"><a name="l04635"></a><span class="lineno"> 4635</span> <span class="preprocessor"> if (k > 0) \</span></div>
+<div class="line"><a name="l04636"></a><span class="lineno"> 4636</span> <span class="preprocessor"> assert(ar_x[2*k-2] < min_u_b); \</span></div>
+<div class="line"><a name="l04637"></a><span class="lineno"> 4637</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l04638"></a><span class="lineno"> 4638</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l04639"></a><span class="lineno"> 4639</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B</span></div>
+<div class="line"><a name="l04640"></a><span class="lineno"> 4640</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04641"></a><span class="lineno"> 4641</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04642"></a><span class="lineno"> 4642</span> <span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI \</span></div>
+<div class="line"><a name="l04643"></a><span class="lineno"> 4643</span> <span class="preprocessor"> nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g, \</span></div>
+<div class="line"><a name="l04644"></a><span class="lineno"> 4644</span> <span class="preprocessor"> ths->psi+j*3*(2*m+2), \</span></div>
+<div class="line"><a name="l04645"></a><span class="lineno"> 4645</span> <span class="preprocessor"> ths->psi+(j*3+1)*(2*m+2), \</span></div>
+<div class="line"><a name="l04646"></a><span class="lineno"> 4646</span> <span class="preprocessor"> ths->psi+(j*3+2)*(2*m+2), \</span></div>
+<div class="line"><a name="l04647"></a><span class="lineno"> 4647</span> <span class="preprocessor"> ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, \</span></div>
+<div class="line"><a name="l04648"></a><span class="lineno"> 4648</span> <span class="preprocessor"> n0, n1, n2, m, my_u0, my_o0);</span></div>
+<div class="line"><a name="l04649"></a><span class="lineno"> 4649</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04650"></a><span class="lineno"> 4650</span> <span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI \</span></div>
+<div class="line"><a name="l04651"></a><span class="lineno"> 4651</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l04652"></a><span class="lineno"> 4652</span> <span class="preprocessor"> int u, o, l; \</span></div>
+<div class="line"><a name="l04653"></a><span class="lineno"> 4653</span> <span class="preprocessor"> R psij_const[3*(2*m+2)]; \</span></div>
+<div class="line"><a name="l04654"></a><span class="lineno"> 4654</span> <span class="preprocessor"> R fg_psij0 = ths->psi[2*j*3]; \</span></div>
+<div class="line"><a name="l04655"></a><span class="lineno"> 4655</span> <span class="preprocessor"> R fg_psij1 = ths->psi[2*j*3+1]; \</span></div>
+<div class="line"><a name="l04656"></a><span class="lineno"> 4656</span> <span class="preprocessor"> R fg_psij2 = K(1.0); \</span></div>
+<div class="line"><a name="l04657"></a><span class="lineno"> 4657</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04658"></a><span class="lineno"> 4658</span> <span class="preprocessor"> psij_const[0] = fg_psij0; \</span></div>
+<div class="line"><a name="l04659"></a><span class="lineno"> 4659</span> <span class="preprocessor"> for(l=1; l<=2*m+1; l++) \</span></div>
+<div class="line"><a name="l04660"></a><span class="lineno"> 4660</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l04661"></a><span class="lineno"> 4661</span> <span class="preprocessor"> fg_psij2 *= fg_psij1; \</span></div>
+<div class="line"><a name="l04662"></a><span class="lineno"> 4662</span> <span class="preprocessor"> psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l]; \</span></div>
+<div class="line"><a name="l04663"></a><span class="lineno"> 4663</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l04664"></a><span class="lineno"> 4664</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04665"></a><span class="lineno"> 4665</span> <span class="preprocessor"> fg_psij0 = ths->psi[2*(j*3+1)]; \</span></div>
+<div class="line"><a name="l04666"></a><span class="lineno"> 4666</span> <span class="preprocessor"> fg_psij1 = ths->psi[2*(j*3+1)+1]; \</span></div>
+<div class="line"><a name="l04667"></a><span class="lineno"> 4667</span> <span class="preprocessor"> fg_psij2 = K(1.0); \</span></div>
+<div class="line"><a name="l04668"></a><span class="lineno"> 4668</span> <span class="preprocessor"> psij_const[2*m+2] = fg_psij0; \</span></div>
+<div class="line"><a name="l04669"></a><span class="lineno"> 4669</span> <span class="preprocessor"> for(l=1; l<=2*m+1; l++) \</span></div>
+<div class="line"><a name="l04670"></a><span class="lineno"> 4670</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l04671"></a><span class="lineno"> 4671</span> <span class="preprocessor"> fg_psij2 *= fg_psij1; \</span></div>
+<div class="line"><a name="l04672"></a><span class="lineno"> 4672</span> <span class="preprocessor"> psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l]; \</span></div>
+<div class="line"><a name="l04673"></a><span class="lineno"> 4673</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l04674"></a><span class="lineno"> 4674</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04675"></a><span class="lineno"> 4675</span> <span class="preprocessor"> fg_psij0 = ths->psi[2*(j*3+2)]; \</span></div>
+<div class="line"><a name="l04676"></a><span class="lineno"> 4676</span> <span class="preprocessor"> fg_psij1 = ths->psi[2*(j*3+2)+1]; \</span></div>
+<div class="line"><a name="l04677"></a><span class="lineno"> 4677</span> <span class="preprocessor"> fg_psij2 = K(1.0); \</span></div>
+<div class="line"><a name="l04678"></a><span class="lineno"> 4678</span> <span class="preprocessor"> psij_const[2*(2*m+2)] = fg_psij0; \</span></div>
+<div class="line"><a name="l04679"></a><span class="lineno"> 4679</span> <span class="preprocessor"> for(l=1; l<=2*m+1; l++) \</span></div>
+<div class="line"><a name="l04680"></a><span class="lineno"> 4680</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l04681"></a><span class="lineno"> 4681</span> <span class="preprocessor"> fg_psij2 *= fg_psij1; \</span></div>
+<div class="line"><a name="l04682"></a><span class="lineno"> 4682</span> <span class="preprocessor"> psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l]; \</span></div>
+<div class="line"><a name="l04683"></a><span class="lineno"> 4683</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l04684"></a><span class="lineno"> 4684</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04685"></a><span class="lineno"> 4685</span> <span class="preprocessor"> nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g, \</span></div>
+<div class="line"><a name="l04686"></a><span class="lineno"> 4686</span> <span class="preprocessor"> psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, \</span></div>
+<div class="line"><a name="l04687"></a><span class="lineno"> 4687</span> <span class="preprocessor"> ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, \</span></div>
+<div class="line"><a name="l04688"></a><span class="lineno"> 4688</span> <span class="preprocessor"> n0, n1, n2, m, my_u0, my_o0); \</span></div>
+<div class="line"><a name="l04689"></a><span class="lineno"> 4689</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l04690"></a><span class="lineno"> 4690</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04691"></a><span class="lineno"> 4691</span> <span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI \</span></div>
+<div class="line"><a name="l04692"></a><span class="lineno"> 4692</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l04693"></a><span class="lineno"> 4693</span> <span class="preprocessor"> int u, o, l; \</span></div>
+<div class="line"><a name="l04694"></a><span class="lineno"> 4694</span> <span class="preprocessor"> R psij_const[3*(2*m+2)]; \</span></div>
+<div class="line"><a name="l04695"></a><span class="lineno"> 4695</span> <span class="preprocessor"> R fg_psij0, fg_psij1, fg_psij2; \</span></div>
+<div class="line"><a name="l04696"></a><span class="lineno"> 4696</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04697"></a><span class="lineno"> 4697</span> <span class="preprocessor"> nfft_uo(ths,j,&u,&o,0); \</span></div>
+<div class="line"><a name="l04698"></a><span class="lineno"> 4698</span> <span class="preprocessor"> fg_psij0 = (PHI(ths->x[3*j]-((R)u)/n0,0)); \</span></div>
+<div class="line"><a name="l04699"></a><span class="lineno"> 4699</span> <span class="preprocessor"> fg_psij1 = EXP(K(2.0)*(n0*(ths->x[3*j]) - u)/ths->b[0]); \</span></div>
+<div class="line"><a name="l04700"></a><span class="lineno"> 4700</span> <span class="preprocessor"> fg_psij2 = K(1.0); \</span></div>
+<div class="line"><a name="l04701"></a><span class="lineno"> 4701</span> <span class="preprocessor"> psij_const[0] = fg_psij0; \</span></div>
+<div class="line"><a name="l04702"></a><span class="lineno"> 4702</span> <span class="preprocessor"> for(l=1; l<=2*m+1; l++) \</span></div>
+<div class="line"><a name="l04703"></a><span class="lineno"> 4703</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l04704"></a><span class="lineno"> 4704</span> <span class="preprocessor"> fg_psij2 *= fg_psij1; \</span></div>
+<div class="line"><a name="l04705"></a><span class="lineno"> 4705</span> <span class="preprocessor"> psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l]; \</span></div>
+<div class="line"><a name="l04706"></a><span class="lineno"> 4706</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l04707"></a><span class="lineno"> 4707</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04708"></a><span class="lineno"> 4708</span> <span class="preprocessor"> nfft_uo(ths,j,&u,&o,1); \</span></div>
+<div class="line"><a name="l04709"></a><span class="lineno"> 4709</span> <span class="preprocessor"> fg_psij0 = (PHI(ths->x[3*j+1]-((R)u)/n1,1)); \</span></div>
+<div class="line"><a name="l04710"></a><span class="lineno"> 4710</span> <span class="preprocessor"> fg_psij1 = EXP(K(2.0)*(n1*(ths->x[3*j+1]) - u)/ths->b[1]); \</span></div>
+<div class="line"><a name="l04711"></a><span class="lineno"> 4711</span> <span class="preprocessor"> fg_psij2 = K(1.0); \</span></div>
+<div class="line"><a name="l04712"></a><span class="lineno"> 4712</span> <span class="preprocessor"> psij_const[2*m+2] = fg_psij0; \</span></div>
+<div class="line"><a name="l04713"></a><span class="lineno"> 4713</span> <span class="preprocessor"> for(l=1; l<=2*m+1; l++) \</span></div>
+<div class="line"><a name="l04714"></a><span class="lineno"> 4714</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l04715"></a><span class="lineno"> 4715</span> <span class="preprocessor"> fg_psij2 *= fg_psij1; \</span></div>
+<div class="line"><a name="l04716"></a><span class="lineno"> 4716</span> <span class="preprocessor"> psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l]; \</span></div>
+<div class="line"><a name="l04717"></a><span class="lineno"> 4717</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l04718"></a><span class="lineno"> 4718</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04719"></a><span class="lineno"> 4719</span> <span class="preprocessor"> nfft_uo(ths,j,&u,&o,2); \</span></div>
+<div class="line"><a name="l04720"></a><span class="lineno"> 4720</span> <span class="preprocessor"> fg_psij0 = (PHI(ths->x[3*j+2]-((R)u)/n2,2)); \</span></div>
+<div class="line"><a name="l04721"></a><span class="lineno"> 4721</span> <span class="preprocessor"> fg_psij1 = EXP(K(2.0)*(n2*(ths->x[3*j+2]) - u)/ths->b[2]); \</span></div>
+<div class="line"><a name="l04722"></a><span class="lineno"> 4722</span> <span class="preprocessor"> fg_psij2 = K(1.0); \</span></div>
+<div class="line"><a name="l04723"></a><span class="lineno"> 4723</span> <span class="preprocessor"> psij_const[2*(2*m+2)] = fg_psij0; \</span></div>
+<div class="line"><a name="l04724"></a><span class="lineno"> 4724</span> <span class="preprocessor"> for(l=1; l<=2*m+1; l++) \</span></div>
+<div class="line"><a name="l04725"></a><span class="lineno"> 4725</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l04726"></a><span class="lineno"> 4726</span> <span class="preprocessor"> fg_psij2 *= fg_psij1; \</span></div>
+<div class="line"><a name="l04727"></a><span class="lineno"> 4727</span> <span class="preprocessor"> psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l]; \</span></div>
+<div class="line"><a name="l04728"></a><span class="lineno"> 4728</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l04729"></a><span class="lineno"> 4729</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04730"></a><span class="lineno"> 4730</span> <span class="preprocessor"> nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g, \</span></div>
+<div class="line"><a name="l04731"></a><span class="lineno"> 4731</span> <span class="preprocessor"> psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, \</span></div>
+<div class="line"><a name="l04732"></a><span class="lineno"> 4732</span> <span class="preprocessor"> ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, \</span></div>
+<div class="line"><a name="l04733"></a><span class="lineno"> 4733</span> <span class="preprocessor"> n0, n1, n2, m, my_u0, my_o0); \</span></div>
+<div class="line"><a name="l04734"></a><span class="lineno"> 4734</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l04735"></a><span class="lineno"> 4735</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04736"></a><span class="lineno"> 4736</span> <span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI \</span></div>
+<div class="line"><a name="l04737"></a><span class="lineno"> 4737</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l04738"></a><span class="lineno"> 4738</span> <span class="preprocessor"> int u, o, l; \</span></div>
+<div class="line"><a name="l04739"></a><span class="lineno"> 4739</span> <span class="preprocessor"> R psij_const[3*(2*m+2)]; \</span></div>
+<div class="line"><a name="l04740"></a><span class="lineno"> 4740</span> <span class="preprocessor"> int ip_u; \</span></div>
+<div class="line"><a name="l04741"></a><span class="lineno"> 4741</span> <span class="preprocessor"> R ip_y, ip_w; \</span></div>
+<div class="line"><a name="l04742"></a><span class="lineno"> 4742</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04743"></a><span class="lineno"> 4743</span> <span class="preprocessor"> nfft_uo(ths,j,&u,&o,0); \</span></div>
+<div class="line"><a name="l04744"></a><span class="lineno"> 4744</span> <span class="preprocessor"> ip_y = FABS(n0*ths->x[3*j+0] - u)*((R)ip_s); \</span></div>
+<div class="line"><a name="l04745"></a><span class="lineno"> 4745</span> <span class="preprocessor"> ip_u = LRINT(FLOOR(ip_y)); \</span></div>
+<div class="line"><a name="l04746"></a><span class="lineno"> 4746</span> <span class="preprocessor"> ip_w = ip_y-ip_u; \</span></div>
+<div class="line"><a name="l04747"></a><span class="lineno"> 4747</span> <span class="preprocessor"> for(l=0; l < 2*m+2; l++) \</span></div>
+<div class="line"><a name="l04748"></a><span class="lineno"> 4748</span> <span class="preprocessor"> psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \</span></div>
+<div class="line"><a name="l04749"></a><span class="lineno"> 4749</span> <span class="preprocessor"> ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w); \</span></div>
+<div class="line"><a name="l04750"></a><span class="lineno"> 4750</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04751"></a><span class="lineno"> 4751</span> <span class="preprocessor"> nfft_uo(ths,j,&u,&o,1); \</span></div>
+<div class="line"><a name="l04752"></a><span class="lineno"> 4752</span> <span class="preprocessor"> ip_y = FABS(n1*ths->x[3*j+1] - u)*((R)ip_s); \</span></div>
+<div class="line"><a name="l04753"></a><span class="lineno"> 4753</span> <span class="preprocessor"> ip_u = LRINT(FLOOR(ip_y)); \</span></div>
+<div class="line"><a name="l04754"></a><span class="lineno"> 4754</span> <span class="preprocessor"> ip_w = ip_y-ip_u; \</span></div>
+<div class="line"><a name="l04755"></a><span class="lineno"> 4755</span> <span class="preprocessor"> for(l=0; l < 2*m+2; l++) \</span></div>
+<div class="line"><a name="l04756"></a><span class="lineno"> 4756</span> <span class="preprocessor"> psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \</span></div>
+<div class="line"><a name="l04757"></a><span class="lineno"> 4757</span> <span class="preprocessor"> ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w); \</span></div>
+<div class="line"><a name="l04758"></a><span class="lineno"> 4758</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04759"></a><span class="lineno"> 4759</span> <span class="preprocessor"> nfft_uo(ths,j,&u,&o,2); \</span></div>
+<div class="line"><a name="l04760"></a><span class="lineno"> 4760</span> <span class="preprocessor"> ip_y = FABS(n2*ths->x[3*j+2] - u)*((R)ip_s); \</span></div>
+<div class="line"><a name="l04761"></a><span class="lineno"> 4761</span> <span class="preprocessor"> ip_u = LRINT(FLOOR(ip_y)); \</span></div>
+<div class="line"><a name="l04762"></a><span class="lineno"> 4762</span> <span class="preprocessor"> ip_w = ip_y-ip_u; \</span></div>
+<div class="line"><a name="l04763"></a><span class="lineno"> 4763</span> <span class="preprocessor"> for(l=0; l < 2*m+2; l++) \</span></div>
+<div class="line"><a name="l04764"></a><span class="lineno"> 4764</span> <span class="preprocessor"> psij_const[2*(2*m+2)+l] = ths->psi[2*(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \</span></div>
+<div class="line"><a name="l04765"></a><span class="lineno"> 4765</span> <span class="preprocessor"> ths->psi[2*(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w); \</span></div>
+<div class="line"><a name="l04766"></a><span class="lineno"> 4766</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04767"></a><span class="lineno"> 4767</span> <span class="preprocessor"> nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g, \</span></div>
+<div class="line"><a name="l04768"></a><span class="lineno"> 4768</span> <span class="preprocessor"> psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, \</span></div>
+<div class="line"><a name="l04769"></a><span class="lineno"> 4769</span> <span class="preprocessor"> ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, \</span></div>
+<div class="line"><a name="l04770"></a><span class="lineno"> 4770</span> <span class="preprocessor"> n0, n1, n2, m, my_u0, my_o0); \</span></div>
+<div class="line"><a name="l04771"></a><span class="lineno"> 4771</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l04772"></a><span class="lineno"> 4772</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04773"></a><span class="lineno"> 4773</span> <span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI \</span></div>
+<div class="line"><a name="l04774"></a><span class="lineno"> 4774</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l04775"></a><span class="lineno"> 4775</span> <span class="preprocessor"> int u, o, l; \</span></div>
+<div class="line"><a name="l04776"></a><span class="lineno"> 4776</span> <span class="preprocessor"> R psij_const[3*(2*m+2)]; \</span></div>
+<div class="line"><a name="l04777"></a><span class="lineno"> 4777</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04778"></a><span class="lineno"> 4778</span> <span class="preprocessor"> nfft_uo(ths,j,&u,&o,0); \</span></div>
+<div class="line"><a name="l04779"></a><span class="lineno"> 4779</span> <span class="preprocessor"> for(l=0;l<=2*m+1;l++) \</span></div>
+<div class="line"><a name="l04780"></a><span class="lineno"> 4780</span> <span class="preprocessor"> psij_const[l]=(PHI(ths->x[3*j]-((R)((u+l)))/n0,0)); \</span></div>
+<div class="line"><a name="l04781"></a><span class="lineno"> 4781</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04782"></a><span class="lineno"> 4782</span> <span class="preprocessor"> nfft_uo(ths,j,&u,&o,1); \</span></div>
+<div class="line"><a name="l04783"></a><span class="lineno"> 4783</span> <span class="preprocessor"> for(l=0;l<=2*m+1;l++) \</span></div>
+<div class="line"><a name="l04784"></a><span class="lineno"> 4784</span> <span class="preprocessor"> psij_const[2*m+2+l]=(PHI(ths->x[3*j+1]-((R)((u+l)))/n1,1)); \</span></div>
+<div class="line"><a name="l04785"></a><span class="lineno"> 4785</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04786"></a><span class="lineno"> 4786</span> <span class="preprocessor"> nfft_uo(ths,j,&u,&o,2); \</span></div>
+<div class="line"><a name="l04787"></a><span class="lineno"> 4787</span> <span class="preprocessor"> for(l=0;l<=2*m+1;l++) \</span></div>
+<div class="line"><a name="l04788"></a><span class="lineno"> 4788</span> <span class="preprocessor"> psij_const[2*(2*m+2)+l]=(PHI(ths->x[3*j+2]-((R)((u+l)))/n2,2)); \</span></div>
+<div class="line"><a name="l04789"></a><span class="lineno"> 4789</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04790"></a><span class="lineno"> 4790</span> <span class="preprocessor"> nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g, \</span></div>
+<div class="line"><a name="l04791"></a><span class="lineno"> 4791</span> <span class="preprocessor"> psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, \</span></div>
+<div class="line"><a name="l04792"></a><span class="lineno"> 4792</span> <span class="preprocessor"> ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, \</span></div>
+<div class="line"><a name="l04793"></a><span class="lineno"> 4793</span> <span class="preprocessor"> n0, n1, n2, m, my_u0, my_o0); \</span></div>
+<div class="line"><a name="l04794"></a><span class="lineno"> 4794</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l04795"></a><span class="lineno"> 4795</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04796"></a><span class="lineno"> 4796</span> <span class="preprocessor">#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(whichone) \</span></div>
+<div class="line"><a name="l04797"></a><span class="lineno"> 4797</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l04798"></a><span class="lineno"> 4798</span> <span class="preprocessor"> if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT) \</span></div>
+<div class="line"><a name="l04799"></a><span class="lineno"> 4799</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l04800"></a><span class="lineno"> 4800</span> <span class="preprocessor"> _Pragma("omp parallel private(k)") \</span></div>
+<div class="line"><a name="l04801"></a><span class="lineno"> 4801</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l04802"></a><span class="lineno"> 4802</span> <span class="preprocessor"> int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b; \</span></div>
+<div class="line"><a name="l04803"></a><span class="lineno"> 4803</span> <span class="preprocessor"> int *ar_x = ths->index_x; \</span></div>
+<div class="line"><a name="l04804"></a><span class="lineno"> 4804</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04805"></a><span class="lineno"> 4805</span> <span class="preprocessor"> nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, \</span></div>
+<div class="line"><a name="l04806"></a><span class="lineno"> 4806</span> <span class="preprocessor"> &min_u_b, &max_u_b, 3, ths->n, m); \</span></div>
+<div class="line"><a name="l04807"></a><span class="lineno"> 4807</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04808"></a><span class="lineno"> 4808</span> <span class="preprocessor"> if (min_u_a != -1) \</span></div>
+<div class="line"><a name="l04809"></a><span class="lineno"> 4809</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l04810"></a><span class="lineno"> 4810</span> <span class="preprocessor"> k = index_x_binary_search(ar_x, M, min_u_a); \</span></div>
+<div class="line"><a name="l04811"></a><span class="lineno"> 4811</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04812"></a><span class="lineno"> 4812</span> <span class="preprocessor"> MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A \</span></div>
+<div class="line"><a name="l04813"></a><span class="lineno"> 4813</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04814"></a><span class="lineno"> 4814</span> <span class="preprocessor"> while (k < M) \</span></div>
+<div class="line"><a name="l04815"></a><span class="lineno"> 4815</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l04816"></a><span class="lineno"> 4816</span> <span class="preprocessor"> int u_prod = ar_x[2*k]; \</span></div>
+<div class="line"><a name="l04817"></a><span class="lineno"> 4817</span> <span class="preprocessor"> int j = ar_x[2*k+1]; \</span></div>
+<div class="line"><a name="l04818"></a><span class="lineno"> 4818</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04819"></a><span class="lineno"> 4819</span> <span class="preprocessor"> if (u_prod < min_u_a || u_prod > max_u_a) \</span></div>
+<div class="line"><a name="l04820"></a><span class="lineno"> 4820</span> <span class="preprocessor"> break; \</span></div>
+<div class="line"><a name="l04821"></a><span class="lineno"> 4821</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04822"></a><span class="lineno"> 4822</span> <span class="preprocessor"> MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \</span></div>
+<div class="line"><a name="l04823"></a><span class="lineno"> 4823</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04824"></a><span class="lineno"> 4824</span> <span class="preprocessor"> k++; \</span></div>
+<div class="line"><a name="l04825"></a><span class="lineno"> 4825</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l04826"></a><span class="lineno"> 4826</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l04827"></a><span class="lineno"> 4827</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04828"></a><span class="lineno"> 4828</span> <span class="preprocessor"> if (min_u_b != -1) \</span></div>
+<div class="line"><a name="l04829"></a><span class="lineno"> 4829</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l04830"></a><span class="lineno"> 4830</span> <span class="preprocessor"> int k = index_x_binary_search(ar_x, M, min_u_b); \</span></div>
+<div class="line"><a name="l04831"></a><span class="lineno"> 4831</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04832"></a><span class="lineno"> 4832</span> <span class="preprocessor"> MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B \</span></div>
+<div class="line"><a name="l04833"></a><span class="lineno"> 4833</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04834"></a><span class="lineno"> 4834</span> <span class="preprocessor"> while (k < M) \</span></div>
+<div class="line"><a name="l04835"></a><span class="lineno"> 4835</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l04836"></a><span class="lineno"> 4836</span> <span class="preprocessor"> int u_prod = ar_x[2*k]; \</span></div>
+<div class="line"><a name="l04837"></a><span class="lineno"> 4837</span> <span class="preprocessor"> int j = ar_x[2*k+1]; \</span></div>
+<div class="line"><a name="l04838"></a><span class="lineno"> 4838</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04839"></a><span class="lineno"> 4839</span> <span class="preprocessor"> if (u_prod < min_u_b || u_prod > max_u_b) \</span></div>
+<div class="line"><a name="l04840"></a><span class="lineno"> 4840</span> <span class="preprocessor"> break; \</span></div>
+<div class="line"><a name="l04841"></a><span class="lineno"> 4841</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04842"></a><span class="lineno"> 4842</span> <span class="preprocessor"> MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \</span></div>
+<div class="line"><a name="l04843"></a><span class="lineno"> 4843</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04844"></a><span class="lineno"> 4844</span> <span class="preprocessor"> k++; \</span></div>
+<div class="line"><a name="l04845"></a><span class="lineno"> 4845</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l04846"></a><span class="lineno"> 4846</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l04847"></a><span class="lineno"> 4847</span> <span class="preprocessor"> } </span><span class="comment">/* omp parallel */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04848"></a><span class="lineno"> 4848</span> <span class="preprocessor"> return; \</span></div>
+<div class="line"><a name="l04849"></a><span class="lineno"> 4849</span> <span class="preprocessor"> } </span><span class="comment">/* if(NFFT_OMP_BLOCKWISE_ADJOINT) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l04850"></a><span class="lineno"> 4850</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l04851"></a><span class="lineno"> 4851</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04852"></a><span class="lineno"> 4852</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_adjoint_3d_B(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l04853"></a><span class="lineno"> 4853</span> {</div>
+<div class="line"><a name="l04854"></a><span class="lineno"> 4854</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l04855"></a><span class="lineno"> 4855</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N0 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];</div>
+<div class="line"><a name="l04856"></a><span class="lineno"> 4856</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n0 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0];</div>
+<div class="line"><a name="l04857"></a><span class="lineno"> 4857</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N1 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];</div>
+<div class="line"><a name="l04858"></a><span class="lineno"> 4858</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n1 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[1];</div>
+<div class="line"><a name="l04859"></a><span class="lineno"> 4859</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N2 = ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2];</div>
+<div class="line"><a name="l04860"></a><span class="lineno"> 4860</span> <span class="keyword">const</span> <span class="keywordtype">int</span> n2 = ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[2];</div>
+<div class="line"><a name="l04861"></a><span class="lineno"> 4861</span> <span class="keyword">const</span> <span class="keywordtype">int</span> M = ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l04862"></a><span class="lineno"> 4862</span> <span class="keyword">const</span> <span class="keywordtype">int</span> m = ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>;</div>
+<div class="line"><a name="l04863"></a><span class="lineno"> 4863</span> </div>
+<div class="line"><a name="l04864"></a><span class="lineno"> 4864</span> C* g = (C*) ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>;</div>
+<div class="line"><a name="l04865"></a><span class="lineno"> 4865</span> </div>
+<div class="line"><a name="l04866"></a><span class="lineno"> 4866</span> memset(g,0,ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l04867"></a><span class="lineno"> 4867</span> </div>
+<div class="line"><a name="l04868"></a><span class="lineno"> 4868</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l04869"></a><span class="lineno"> 4869</span> {</div>
+<div class="line"><a name="l04870"></a><span class="lineno"> 4870</span> nfft_adjoint_B_compute_full_psi(g, ths-><a class="code" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_g</a>, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>, ths-><a class="code" href= [...]
+<div class="line"><a name="l04871"></a><span class="lineno"> 4871</span> 3, ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>, m, ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a>, ths-><a cl [...]
+<div class="line"><a name="l04872"></a><span class="lineno"> 4872</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04873"></a><span class="lineno"> 4873</span> } <span class="comment">/* if(PRE_FULL_PSI) */</span></div>
+<div class="line"><a name="l04874"></a><span class="lineno"> 4874</span> </div>
+<div class="line"><a name="l04875"></a><span class="lineno"> 4875</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l04876"></a><span class="lineno"> 4876</span> {</div>
+<div class="line"><a name="l04877"></a><span class="lineno"> 4877</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l04878"></a><span class="lineno"> 4878</span> <span class="preprocessor"></span> MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(PRE_PSI)</div>
+<div class="line"><a name="l04879"></a><span class="lineno"> 4879</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04880"></a><span class="lineno"> 4880</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04881"></a><span class="lineno"> 4881</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04882"></a><span class="lineno"> 4882</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04883"></a><span class="lineno"> 4883</span> {</div>
+<div class="line"><a name="l04884"></a><span class="lineno"> 4884</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l04885"></a><span class="lineno"> 4885</span> #ifdef _OPENMP</div>
+<div class="line"><a name="l04886"></a><span class="lineno"> 4886</span> nfft_adjoint_3d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>+j*3*(2*m+2), ths->< [...]
+<div class="line"><a name="l04887"></a><span class="lineno"> 4887</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l04888"></a><span class="lineno"> 4888</span> <span class="preprocessor"></span> nfft_adjoint_3d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">p [...]
+<div class="line"><a name="l04889"></a><span class="lineno"> 4889</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04890"></a><span class="lineno"> 4890</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l04891"></a><span class="lineno"> 4891</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04892"></a><span class="lineno"> 4892</span> } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l04893"></a><span class="lineno"> 4893</span> </div>
+<div class="line"><a name="l04894"></a><span class="lineno"> 4894</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l04895"></a><span class="lineno"> 4895</span> {</div>
+<div class="line"><a name="l04896"></a><span class="lineno"> 4896</span> R fg_exp_l[3*(2*m+2)];</div>
+<div class="line"><a name="l04897"></a><span class="lineno"> 4897</span> </div>
+<div class="line"><a name="l04898"></a><span class="lineno"> 4898</span> nfft_3d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l04899"></a><span class="lineno"> 4899</span> nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l04900"></a><span class="lineno"> 4900</span> nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[2]);</div>
+<div class="line"><a name="l04901"></a><span class="lineno"> 4901</span> </div>
+<div class="line"><a name="l04902"></a><span class="lineno"> 4902</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l04903"></a><span class="lineno"> 4903</span> <span class="preprocessor"></span> MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(PRE_FG_PSI)</div>
+<div class="line"><a name="l04904"></a><span class="lineno"> 4904</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04905"></a><span class="lineno"> 4905</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04906"></a><span class="lineno"> 4906</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04907"></a><span class="lineno"> 4907</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04908"></a><span class="lineno"> 4908</span> {</div>
+<div class="line"><a name="l04909"></a><span class="lineno"> 4909</span> R psij_const[3*(2*m+2)];</div>
+<div class="line"><a name="l04910"></a><span class="lineno"> 4910</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l04911"></a><span class="lineno"> 4911</span> <span class="keywordtype">int</span> l;</div>
+<div class="line"><a name="l04912"></a><span class="lineno"> 4912</span> R fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*j*3];</div>
+<div class="line"><a name="l04913"></a><span class="lineno"> 4913</span> R fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*j*3+1];</div>
+<div class="line"><a name="l04914"></a><span class="lineno"> 4914</span> R fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04915"></a><span class="lineno"> 4915</span> </div>
+<div class="line"><a name="l04916"></a><span class="lineno"> 4916</span> psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l04917"></a><span class="lineno"> 4917</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04918"></a><span class="lineno"> 4918</span> {</div>
+<div class="line"><a name="l04919"></a><span class="lineno"> 4919</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04920"></a><span class="lineno"> 4920</span> psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];</div>
+<div class="line"><a name="l04921"></a><span class="lineno"> 4921</span> }</div>
+<div class="line"><a name="l04922"></a><span class="lineno"> 4922</span> </div>
+<div class="line"><a name="l04923"></a><span class="lineno"> 4923</span> fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*3+1)];</div>
+<div class="line"><a name="l04924"></a><span class="lineno"> 4924</span> fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*3+1)+1];</div>
+<div class="line"><a name="l04925"></a><span class="lineno"> 4925</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04926"></a><span class="lineno"> 4926</span> psij_const[2*m+2] = fg_psij0;</div>
+<div class="line"><a name="l04927"></a><span class="lineno"> 4927</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04928"></a><span class="lineno"> 4928</span> {</div>
+<div class="line"><a name="l04929"></a><span class="lineno"> 4929</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04930"></a><span class="lineno"> 4930</span> psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];</div>
+<div class="line"><a name="l04931"></a><span class="lineno"> 4931</span> }</div>
+<div class="line"><a name="l04932"></a><span class="lineno"> 4932</span> </div>
+<div class="line"><a name="l04933"></a><span class="lineno"> 4933</span> fg_psij0 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*3+2)];</div>
+<div class="line"><a name="l04934"></a><span class="lineno"> 4934</span> fg_psij1 = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*3+2)+1];</div>
+<div class="line"><a name="l04935"></a><span class="lineno"> 4935</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04936"></a><span class="lineno"> 4936</span> psij_const[2*(2*m+2)] = fg_psij0;</div>
+<div class="line"><a name="l04937"></a><span class="lineno"> 4937</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04938"></a><span class="lineno"> 4938</span> {</div>
+<div class="line"><a name="l04939"></a><span class="lineno"> 4939</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04940"></a><span class="lineno"> 4940</span> psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l];</div>
+<div class="line"><a name="l04941"></a><span class="lineno"> 4941</span> }</div>
+<div class="line"><a name="l04942"></a><span class="lineno"> 4942</span> </div>
+<div class="line"><a name="l04943"></a><span class="lineno"> 4943</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l04944"></a><span class="lineno"> 4944</span> <span class="preprocessor"></span> nfft_adjoint_3d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial dom [...]
+<div class="line"><a name="l04945"></a><span class="lineno"> 4945</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l04946"></a><span class="lineno"> 4946</span> <span class="preprocessor"></span> nfft_adjoint_3d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, [...]
+<div class="line"><a name="l04947"></a><span class="lineno"> 4947</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04948"></a><span class="lineno"> 4948</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l04949"></a><span class="lineno"> 4949</span> </div>
+<div class="line"><a name="l04950"></a><span class="lineno"> 4950</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04951"></a><span class="lineno"> 4951</span> } <span class="comment">/* if(PRE_FG_PSI) */</span></div>
+<div class="line"><a name="l04952"></a><span class="lineno"> 4952</span> </div>
+<div class="line"><a name="l04953"></a><span class="lineno"> 4953</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FG_PSI)</div>
+<div class="line"><a name="l04954"></a><span class="lineno"> 4954</span> {</div>
+<div class="line"><a name="l04955"></a><span class="lineno"> 4955</span> R fg_exp_l[3*(2*m+2)];</div>
+<div class="line"><a name="l04956"></a><span class="lineno"> 4956</span> </div>
+<div class="line"><a name="l04957"></a><span class="lineno"> 4957</span> nfft_3d_init_fg_exp_l(fg_exp_l, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l04958"></a><span class="lineno"> 4958</span> nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l04959"></a><span class="lineno"> 4959</span> nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[2]);</div>
+<div class="line"><a name="l04960"></a><span class="lineno"> 4960</span> </div>
+<div class="line"><a name="l04961"></a><span class="lineno"> 4961</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l04962"></a><span class="lineno"> 4962</span> </div>
+<div class="line"><a name="l04963"></a><span class="lineno"> 4963</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l04964"></a><span class="lineno"> 4964</span> <span class="preprocessor"></span> MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(FG_PSI)</div>
+<div class="line"><a name="l04965"></a><span class="lineno"> 4965</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04966"></a><span class="lineno"> 4966</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l04967"></a><span class="lineno"> 4967</span> <span class="preprocessor"> #pragma openmp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l04968"></a><span class="lineno"> 4968</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l04969"></a><span class="lineno"> 4969</span> {</div>
+<div class="line"><a name="l04970"></a><span class="lineno"> 4970</span> <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l04971"></a><span class="lineno"> 4971</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l04972"></a><span class="lineno"> 4972</span> R psij_const[3*(2*m+2)];</div>
+<div class="line"><a name="l04973"></a><span class="lineno"> 4973</span> R fg_psij0, fg_psij1, fg_psij2;</div>
+<div class="line"><a name="l04974"></a><span class="lineno"> 4974</span> </div>
+<div class="line"><a name="l04975"></a><span class="lineno"> 4975</span> nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l04976"></a><span class="lineno"> 4976</span> fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j]-((R)u)/n0,0));</div>
+<div class="line"><a name="l04977"></a><span class="lineno"> 4977</span> fg_psij1 = EXP(K(2.0)*(n0*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[0]);</div>
+<div class="line"><a name="l04978"></a><span class="lineno"> 4978</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04979"></a><span class="lineno"> 4979</span> psij_const[0] = fg_psij0;</div>
+<div class="line"><a name="l04980"></a><span class="lineno"> 4980</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04981"></a><span class="lineno"> 4981</span> {</div>
+<div class="line"><a name="l04982"></a><span class="lineno"> 4982</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04983"></a><span class="lineno"> 4983</span> psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];</div>
+<div class="line"><a name="l04984"></a><span class="lineno"> 4984</span> }</div>
+<div class="line"><a name="l04985"></a><span class="lineno"> 4985</span> </div>
+<div class="line"><a name="l04986"></a><span class="lineno"> 4986</span> nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l04987"></a><span class="lineno"> 4987</span> fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1]-((R)u)/n1,1));</div>
+<div class="line"><a name="l04988"></a><span class="lineno"> 4988</span> fg_psij1 = EXP(K(2.0)*(n1*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[1]);</div>
+<div class="line"><a name="l04989"></a><span class="lineno"> 4989</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l04990"></a><span class="lineno"> 4990</span> psij_const[2*m+2] = fg_psij0;</div>
+<div class="line"><a name="l04991"></a><span class="lineno"> 4991</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l04992"></a><span class="lineno"> 4992</span> {</div>
+<div class="line"><a name="l04993"></a><span class="lineno"> 4993</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l04994"></a><span class="lineno"> 4994</span> psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];</div>
+<div class="line"><a name="l04995"></a><span class="lineno"> 4995</span> }</div>
+<div class="line"><a name="l04996"></a><span class="lineno"> 4996</span> </div>
+<div class="line"><a name="l04997"></a><span class="lineno"> 4997</span> nfft_uo(ths,j,&u,&o,2);</div>
+<div class="line"><a name="l04998"></a><span class="lineno"> 4998</span> fg_psij0 = (PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2]-((R)u)/n2,2));</div>
+<div class="line"><a name="l04999"></a><span class="lineno"> 4999</span> fg_psij1 = EXP(K(2.0)*(n2*(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2]) - u)/ths-><a class="code" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a" title="Shape parameter of the window function.">b</a>[2]);</div>
+<div class="line"><a name="l05000"></a><span class="lineno"> 5000</span> fg_psij2 = K(1.0);</div>
+<div class="line"><a name="l05001"></a><span class="lineno"> 5001</span> psij_const[2*(2*m+2)] = fg_psij0;</div>
+<div class="line"><a name="l05002"></a><span class="lineno"> 5002</span> <span class="keywordflow">for</span>(l=1; l<=2*m+1; l++)</div>
+<div class="line"><a name="l05003"></a><span class="lineno"> 5003</span> {</div>
+<div class="line"><a name="l05004"></a><span class="lineno"> 5004</span> fg_psij2 *= fg_psij1;</div>
+<div class="line"><a name="l05005"></a><span class="lineno"> 5005</span> psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l];</div>
+<div class="line"><a name="l05006"></a><span class="lineno"> 5006</span> }</div>
+<div class="line"><a name="l05007"></a><span class="lineno"> 5007</span> </div>
+<div class="line"><a name="l05008"></a><span class="lineno"> 5008</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05009"></a><span class="lineno"> 5009</span> <span class="preprocessor"></span> nfft_adjoint_3d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial dom [...]
+<div class="line"><a name="l05010"></a><span class="lineno"> 5010</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l05011"></a><span class="lineno"> 5011</span> <span class="preprocessor"></span> nfft_adjoint_3d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, [...]
+<div class="line"><a name="l05012"></a><span class="lineno"> 5012</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05013"></a><span class="lineno"> 5013</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l05014"></a><span class="lineno"> 5014</span> </div>
+<div class="line"><a name="l05015"></a><span class="lineno"> 5015</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l05016"></a><span class="lineno"> 5016</span> } <span class="comment">/* if(FG_PSI) */</span></div>
+<div class="line"><a name="l05017"></a><span class="lineno"> 5017</span> </div>
+<div class="line"><a name="l05018"></a><span class="lineno"> 5018</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l05019"></a><span class="lineno"> 5019</span> {</div>
+<div class="line"><a name="l05020"></a><span class="lineno"> 5020</span> <span class="keyword">const</span> <span class="keywordtype">int</span> K = ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>;</div>
+<div class="line"><a name="l05021"></a><span class="lineno"> 5021</span> <span class="keyword">const</span> <span class="keywordtype">int</span> ip_s = K / (m + 2);</div>
+<div class="line"><a name="l05022"></a><span class="lineno"> 5022</span> </div>
+<div class="line"><a name="l05023"></a><span class="lineno"> 5023</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l05024"></a><span class="lineno"> 5024</span> </div>
+<div class="line"><a name="l05025"></a><span class="lineno"> 5025</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05026"></a><span class="lineno"> 5026</span> <span class="preprocessor"></span> MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(PRE_LIN_PSI)</div>
+<div class="line"><a name="l05027"></a><span class="lineno"> 5027</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05028"></a><span class="lineno"> 5028</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l05029"></a><span class="lineno"> 5029</span> <span class="preprocessor"> #pragma openmp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l05030"></a><span class="lineno"> 5030</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l05031"></a><span class="lineno"> 5031</span> {</div>
+<div class="line"><a name="l05032"></a><span class="lineno"> 5032</span> <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l05033"></a><span class="lineno"> 5033</span> <span class="keywordtype">int</span> ip_u;</div>
+<div class="line"><a name="l05034"></a><span class="lineno"> 5034</span> R ip_y, ip_w;</div>
+<div class="line"><a name="l05035"></a><span class="lineno"> 5035</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used whe [...]
+<div class="line"><a name="l05036"></a><span class="lineno"> 5036</span> R psij_const[3*(2*m+2)];</div>
+<div class="line"><a name="l05037"></a><span class="lineno"> 5037</span> </div>
+<div class="line"><a name="l05038"></a><span class="lineno"> 5038</span> nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l05039"></a><span class="lineno"> 5039</span> ip_y = FABS(n0*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+0] - u)*((R)ip_s);</div>
+<div class="line"><a name="l05040"></a><span class="lineno"> 5040</span> ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l05041"></a><span class="lineno"> 5041</span> ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l05042"></a><span class="lineno"> 5042</span> <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l05043"></a><span class="lineno"> 5043</span> psij_const[l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +</div>
+<div class="line"><a name="l05044"></a><span class="lineno"> 5044</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ABS(ip_u-l*ip_s+1)]*(ip_w);</div>
+<div class="line"><a name="l05045"></a><span class="lineno"> 5045</span> </div>
+<div class="line"><a name="l05046"></a><span class="lineno"> 5046</span> nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l05047"></a><span class="lineno"> 5047</span> ip_y = FABS(n1*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1] - u)*((R)ip_s);</div>
+<div class="line"><a name="l05048"></a><span class="lineno"> 5048</span> ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l05049"></a><span class="lineno"> 5049</span> ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l05050"></a><span class="lineno"> 5050</span> <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l05051"></a><span class="lineno"> 5051</span> psij_const[2*m+2+l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +</div>
+<div class="line"><a name="l05052"></a><span class="lineno"> 5052</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);</div>
+<div class="line"><a name="l05053"></a><span class="lineno"> 5053</span> </div>
+<div class="line"><a name="l05054"></a><span class="lineno"> 5054</span> nfft_uo(ths,j,&u,&o,2);</div>
+<div class="line"><a name="l05055"></a><span class="lineno"> 5055</span> ip_y = FABS(n2*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2] - u)*((R)ip_s);</div>
+<div class="line"><a name="l05056"></a><span class="lineno"> 5056</span> ip_u = LRINT(FLOOR(ip_y));</div>
+<div class="line"><a name="l05057"></a><span class="lineno"> 5057</span> ip_w = ip_y-ip_u;</div>
+<div class="line"><a name="l05058"></a><span class="lineno"> 5058</span> <span class="keywordflow">for</span>(l=0; l < 2*m+2; l++)</div>
+<div class="line"><a name="l05059"></a><span class="lineno"> 5059</span> psij_const[2*(2*m+2)+l] = ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +</div>
+<div class="line"><a name="l05060"></a><span class="lineno"> 5060</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);</div>
+<div class="line"><a name="l05061"></a><span class="lineno"> 5061</span> </div>
+<div class="line"><a name="l05062"></a><span class="lineno"> 5062</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05063"></a><span class="lineno"> 5063</span> <span class="preprocessor"></span> nfft_adjoint_3d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial dom [...]
+<div class="line"><a name="l05064"></a><span class="lineno"> 5064</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l05065"></a><span class="lineno"> 5065</span> <span class="preprocessor"></span> nfft_adjoint_3d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, [...]
+<div class="line"><a name="l05066"></a><span class="lineno"> 5066</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05067"></a><span class="lineno"> 5067</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l05068"></a><span class="lineno"> 5068</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l05069"></a><span class="lineno"> 5069</span> } <span class="comment">/* if(PRE_LIN_PSI) */</span></div>
+<div class="line"><a name="l05070"></a><span class="lineno"> 5070</span> </div>
+<div class="line"><a name="l05071"></a><span class="lineno"> 5071</span> <span class="comment">/* no precomputed psi at all */</span></div>
+<div class="line"><a name="l05072"></a><span class="lineno"> 5072</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l05073"></a><span class="lineno"> 5073</span> </div>
+<div class="line"><a name="l05074"></a><span class="lineno"> 5074</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05075"></a><span class="lineno"> 5075</span> <span class="preprocessor"></span> MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(NO_PSI)</div>
+<div class="line"><a name="l05076"></a><span class="lineno"> 5076</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05077"></a><span class="lineno"> 5077</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l05078"></a><span class="lineno"> 5078</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k)</span></div>
+<div class="line"><a name="l05079"></a><span class="lineno"> 5079</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l05080"></a><span class="lineno"> 5080</span> {</div>
+<div class="line"><a name="l05081"></a><span class="lineno"> 5081</span> <span class="keywordtype">int</span> u,o,l;</div>
+<div class="line"><a name="l05082"></a><span class="lineno"> 5082</span> R psij_const[3*(2*m+2)];</div>
+<div class="line"><a name="l05083"></a><span class="lineno"> 5083</span> <span class="keywordtype">int</span> j = (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES) ? ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when [...]
+<div class="line"><a name="l05084"></a><span class="lineno"> 5084</span> </div>
+<div class="line"><a name="l05085"></a><span class="lineno"> 5085</span> nfft_uo(ths,j,&u,&o,0);</div>
+<div class="line"><a name="l05086"></a><span class="lineno"> 5086</span> <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l05087"></a><span class="lineno"> 5087</span> psij_const[l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j]-((R)((u+l)))/n0,0));</div>
+<div class="line"><a name="l05088"></a><span class="lineno"> 5088</span> </div>
+<div class="line"><a name="l05089"></a><span class="lineno"> 5089</span> nfft_uo(ths,j,&u,&o,1);</div>
+<div class="line"><a name="l05090"></a><span class="lineno"> 5090</span> <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l05091"></a><span class="lineno"> 5091</span> psij_const[2*m+2+l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1]-((R)((u+l)))/n1,1));</div>
+<div class="line"><a name="l05092"></a><span class="lineno"> 5092</span> </div>
+<div class="line"><a name="l05093"></a><span class="lineno"> 5093</span> nfft_uo(ths,j,&u,&o,2);</div>
+<div class="line"><a name="l05094"></a><span class="lineno"> 5094</span> <span class="keywordflow">for</span>(l=0;l<=2*m+1;l++)</div>
+<div class="line"><a name="l05095"></a><span class="lineno"> 5095</span> psij_const[2*(2*m+2)+l]=(PHI(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2]-((R)((u+l)))/n2,2));</div>
+<div class="line"><a name="l05096"></a><span class="lineno"> 5096</span> </div>
+<div class="line"><a name="l05097"></a><span class="lineno"> 5097</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05098"></a><span class="lineno"> 5098</span> <span class="preprocessor"></span> nfft_adjoint_3d_compute_omp_atomic(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domai [...]
+<div class="line"><a name="l05099"></a><span class="lineno"> 5099</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l05100"></a><span class="lineno"> 5100</span> <span class="preprocessor"></span> nfft_adjoint_3d_compute_serial(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, si [...]
+<div class="line"><a name="l05101"></a><span class="lineno"> 5101</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05102"></a><span class="lineno"> 5102</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l05103"></a><span class="lineno"> 5103</span> }</div>
+<div class="line"><a name="l05104"></a><span class="lineno"> 5104</span> </div>
+<div class="line"><a name="l05105"></a><span class="lineno"> 5105</span> </div>
+<div class="line"><a name="l05106"></a><span class="lineno"> 5106</span> <span class="keywordtype">void</span> nfft_trafo_3d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05107"></a><span class="lineno"> 5107</span> {</div>
+<div class="line"><a name="l05108"></a><span class="lineno"> 5108</span> <span class="keywordtype">int</span> k0,k1,k2,n0,n1,n2,N0,N1,N2;</div>
+<div class="line"><a name="l05109"></a><span class="lineno"> 5109</span> C *g_hat,*f_hat;</div>
+<div class="line"><a name="l05110"></a><span class="lineno"> 5110</span> R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12, *c_phi_inv21, *c_phi_inv22;</div>
+<div class="line"><a name="l05111"></a><span class="lineno"> 5111</span> R ck01, ck02, ck11, ck12, ck21, ck22;</div>
+<div class="line"><a name="l05112"></a><span class="lineno"> 5112</span> C *g_hat111,*f_hat111,*g_hat211,*f_hat211,*g_hat121,*f_hat121,*g_hat221,*f_hat221;</div>
+<div class="line"><a name="l05113"></a><span class="lineno"> 5113</span> C *g_hat112,*f_hat112,*g_hat212,*f_hat212,*g_hat122,*f_hat122,*g_hat222,*f_hat222;</div>
+<div class="line"><a name="l05114"></a><span class="lineno"> 5114</span> </div>
+<div class="line"><a name="l05115"></a><span class="lineno"> 5115</span> ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>=ths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>;</div>
+<div class="line"><a name="l05116"></a><span class="lineno"> 5116</span> ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>=ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>;</div>
+<div class="line"><a name="l05117"></a><span class="lineno"> 5117</span> </div>
+<div class="line"><a name="l05118"></a><span class="lineno"> 5118</span> N0=ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];</div>
+<div class="line"><a name="l05119"></a><span class="lineno"> 5119</span> N1=ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];</div>
+<div class="line"><a name="l05120"></a><span class="lineno"> 5120</span> N2=ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2];</div>
+<div class="line"><a name="l05121"></a><span class="lineno"> 5121</span> n0=ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0];</div>
+<div class="line"><a name="l05122"></a><span class="lineno"> 5122</span> n1=ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[1];</div>
+<div class="line"><a name="l05123"></a><span class="lineno"> 5123</span> n2=ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[2];</div>
+<div class="line"><a name="l05124"></a><span class="lineno"> 5124</span> </div>
+<div class="line"><a name="l05125"></a><span class="lineno"> 5125</span> f_hat=(C*)ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l05126"></a><span class="lineno"> 5126</span> g_hat=(C*)ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>;</div>
+<div class="line"><a name="l05127"></a><span class="lineno"> 5127</span> </div>
+<div class="line"><a name="l05128"></a><span class="lineno"> 5128</span> TIC(0)</div>
+<div class="line"><a name="l05129"></a><span class="lineno"> 5129</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05130"></a><span class="lineno"> 5130</span> <span class="preprocessor"></span><span class="preprocessor"> #pragma omp parallel for default(shared) private(k0)</span></div>
+<div class="line"><a name="l05131"></a><span class="lineno"> 5131</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k0 = 0; k0 < ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>; k0++)</div>
+<div class="line"><a name="l05132"></a><span class="lineno"> 5132</span> ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>[k0] = 0.0;</div>
+<div class="line"><a name="l05133"></a><span class="lineno"> 5133</span> #<span class="keywordflow">else</span></div>
+<div class="line"><a name="l05134"></a><span class="lineno"> 5134</span> memset(ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>,0,ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l05135"></a><span class="lineno"> 5135</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05136"></a><span class="lineno"> 5136</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l05137"></a><span class="lineno"> 5137</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l05138"></a><span class="lineno"> 5138</span> {</div>
+<div class="line"><a name="l05139"></a><span class="lineno"> 5139</span> c_phi_inv01=ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is doubles.">c_phi_inv</a>[0];</div>
+<div class="line"><a name="l05140"></a><span class="lineno"> 5140</span> c_phi_inv02=&ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is doubles.">c_phi_inv</a>[0][N0/2];</div>
+<div class="line"><a name="l05141"></a><span class="lineno"> 5141</span> </div>
+<div class="line"><a name="l05142"></a><span class="lineno"> 5142</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,c_phi_inv11,c_phi_inv12,ck11,ck12,c_phi_inv21,c_phi_inv22,g_hat111,f_hat111,g_hat211,f_hat211,g_hat121,f_hat121,g_hat221,f_hat221,g_hat112,f_hat112,g_hat212,f_hat212,g_hat122,f_hat122,g_hat222,f_hat222,ck21,ck22)</span></div>
+<div class="line"><a name="l05143"></a><span class="lineno"> 5143</span> <span class="preprocessor"></span> <span class="keywordflow">for</span>(k0=0;k0<N0/2;k0++)</div>
+<div class="line"><a name="l05144"></a><span class="lineno"> 5144</span> {</div>
+<div class="line"><a name="l05145"></a><span class="lineno"> 5145</span> ck01=c_phi_inv01[k0];</div>
+<div class="line"><a name="l05146"></a><span class="lineno"> 5146</span> ck02=c_phi_inv02[k0];</div>
+<div class="line"><a name="l05147"></a><span class="lineno"> 5147</span> c_phi_inv11=ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is doubles.">c_phi_inv</a>[1];</div>
+<div class="line"><a name="l05148"></a><span class="lineno"> 5148</span> c_phi_inv12=&ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is doubles.">c_phi_inv</a>[1][N1/2];</div>
+<div class="line"><a name="l05149"></a><span class="lineno"> 5149</span> </div>
+<div class="line"><a name="l05150"></a><span class="lineno"> 5150</span> <span class="keywordflow">for</span>(k1=0;k1<N1/2;k1++)</div>
+<div class="line"><a name="l05151"></a><span class="lineno"> 5151</span> {</div>
+<div class="line"><a name="l05152"></a><span class="lineno"> 5152</span> ck11=c_phi_inv11[k1];</div>
+<div class="line"><a name="l05153"></a><span class="lineno"> 5153</span> ck12=c_phi_inv12[k1];</div>
+<div class="line"><a name="l05154"></a><span class="lineno"> 5154</span> c_phi_inv21=ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is doubles.">c_phi_inv</a>[2];</div>
+<div class="line"><a name="l05155"></a><span class="lineno"> 5155</span> c_phi_inv22=&ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is doubles.">c_phi_inv</a>[2][N2/2];</div>
+<div class="line"><a name="l05156"></a><span class="lineno"> 5156</span> </div>
+<div class="line"><a name="l05157"></a><span class="lineno"> 5157</span> g_hat111=g_hat + ((n0-(N0/2)+k0)*n1+n1-(N1/2)+k1)*n2+n2-(N2/2);</div>
+<div class="line"><a name="l05158"></a><span class="lineno"> 5158</span> f_hat111=f_hat + (k0*N1+k1)*N2;</div>
+<div class="line"><a name="l05159"></a><span class="lineno"> 5159</span> g_hat211=g_hat + (k0*n1+n1-(N1/2)+k1)*n2+n2-(N2/2);</div>
+<div class="line"><a name="l05160"></a><span class="lineno"> 5160</span> f_hat211=f_hat + (((N0/2)+k0)*N1+k1)*N2;</div>
+<div class="line"><a name="l05161"></a><span class="lineno"> 5161</span> g_hat121=g_hat + ((n0-(N0/2)+k0)*n1+k1)*n2+n2-(N2/2);</div>
+<div class="line"><a name="l05162"></a><span class="lineno"> 5162</span> f_hat121=f_hat + (k0*N1+(N1/2)+k1)*N2;</div>
+<div class="line"><a name="l05163"></a><span class="lineno"> 5163</span> g_hat221=g_hat + (k0*n1+k1)*n2+n2-(N2/2);</div>
+<div class="line"><a name="l05164"></a><span class="lineno"> 5164</span> f_hat221=f_hat + (((N0/2)+k0)*N1+(N1/2)+k1)*N2;</div>
+<div class="line"><a name="l05165"></a><span class="lineno"> 5165</span> </div>
+<div class="line"><a name="l05166"></a><span class="lineno"> 5166</span> g_hat112=g_hat + ((n0-(N0/2)+k0)*n1+n1-(N1/2)+k1)*n2;</div>
+<div class="line"><a name="l05167"></a><span class="lineno"> 5167</span> f_hat112=f_hat + (k0*N1+k1)*N2+(N2/2);</div>
+<div class="line"><a name="l05168"></a><span class="lineno"> 5168</span> g_hat212=g_hat + (k0*n1+n1-(N1/2)+k1)*n2;</div>
+<div class="line"><a name="l05169"></a><span class="lineno"> 5169</span> f_hat212=f_hat + (((N0/2)+k0)*N1+k1)*N2+(N2/2);</div>
+<div class="line"><a name="l05170"></a><span class="lineno"> 5170</span> g_hat122=g_hat + ((n0-(N0/2)+k0)*n1+k1)*n2;</div>
+<div class="line"><a name="l05171"></a><span class="lineno"> 5171</span> f_hat122=f_hat + (k0*N1+N1/2+k1)*N2+(N2/2);</div>
+<div class="line"><a name="l05172"></a><span class="lineno"> 5172</span> g_hat222=g_hat + (k0*n1+k1)*n2;</div>
+<div class="line"><a name="l05173"></a><span class="lineno"> 5173</span> f_hat222=f_hat + (((N0/2)+k0)*N1+(N1/2)+k1)*N2+(N2/2);</div>
+<div class="line"><a name="l05174"></a><span class="lineno"> 5174</span> </div>
+<div class="line"><a name="l05175"></a><span class="lineno"> 5175</span> <span class="keywordflow">for</span>(k2=0;k2<N2/2;k2++)</div>
+<div class="line"><a name="l05176"></a><span class="lineno"> 5176</span> {</div>
+<div class="line"><a name="l05177"></a><span class="lineno"> 5177</span> ck21=c_phi_inv21[k2];</div>
+<div class="line"><a name="l05178"></a><span class="lineno"> 5178</span> ck22=c_phi_inv22[k2];</div>
+<div class="line"><a name="l05179"></a><span class="lineno"> 5179</span> </div>
+<div class="line"><a name="l05180"></a><span class="lineno"> 5180</span> g_hat111[k2] = f_hat111[k2] * ck01 * ck11 * ck21;</div>
+<div class="line"><a name="l05181"></a><span class="lineno"> 5181</span> g_hat211[k2] = f_hat211[k2] * ck02 * ck11 * ck21;</div>
+<div class="line"><a name="l05182"></a><span class="lineno"> 5182</span> g_hat121[k2] = f_hat121[k2] * ck01 * ck12 * ck21;</div>
+<div class="line"><a name="l05183"></a><span class="lineno"> 5183</span> g_hat221[k2] = f_hat221[k2] * ck02 * ck12 * ck21;</div>
+<div class="line"><a name="l05184"></a><span class="lineno"> 5184</span> </div>
+<div class="line"><a name="l05185"></a><span class="lineno"> 5185</span> g_hat112[k2] = f_hat112[k2] * ck01 * ck11 * ck22;</div>
+<div class="line"><a name="l05186"></a><span class="lineno"> 5186</span> g_hat212[k2] = f_hat212[k2] * ck02 * ck11 * ck22;</div>
+<div class="line"><a name="l05187"></a><span class="lineno"> 5187</span> g_hat122[k2] = f_hat122[k2] * ck01 * ck12 * ck22;</div>
+<div class="line"><a name="l05188"></a><span class="lineno"> 5188</span> g_hat222[k2] = f_hat222[k2] * ck02 * ck12 * ck22;</div>
+<div class="line"><a name="l05189"></a><span class="lineno"> 5189</span> }</div>
+<div class="line"><a name="l05190"></a><span class="lineno"> 5190</span> }</div>
+<div class="line"><a name="l05191"></a><span class="lineno"> 5191</span> }</div>
+<div class="line"><a name="l05192"></a><span class="lineno"> 5192</span> }</div>
+<div class="line"><a name="l05193"></a><span class="lineno"> 5193</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l05194"></a><span class="lineno"> 5194</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,ck11,ck12,ck21,ck22)</span></div>
+<div class="line"><a name="l05195"></a><span class="lineno"> 5195</span> <span class="preprocessor"></span> <span class="keywordflow">for</span>(k0=0;k0<N0/2;k0++)</div>
+<div class="line"><a name="l05196"></a><span class="lineno"> 5196</span> {</div>
+<div class="line"><a name="l05197"></a><span class="lineno"> 5197</span> ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));</div>
+<div class="line"><a name="l05198"></a><span class="lineno"> 5198</span> ck02=K(1.0)/(PHI_HUT(k0,0));</div>
+<div class="line"><a name="l05199"></a><span class="lineno"> 5199</span> <span class="keywordflow">for</span>(k1=0;k1<N1/2;k1++)</div>
+<div class="line"><a name="l05200"></a><span class="lineno"> 5200</span> {</div>
+<div class="line"><a name="l05201"></a><span class="lineno"> 5201</span> ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));</div>
+<div class="line"><a name="l05202"></a><span class="lineno"> 5202</span> ck12=K(1.0)/(PHI_HUT(k1,1));</div>
+<div class="line"><a name="l05203"></a><span class="lineno"> 5203</span> </div>
+<div class="line"><a name="l05204"></a><span class="lineno"> 5204</span> <span class="keywordflow">for</span>(k2=0;k2<N2/2;k2++)</div>
+<div class="line"><a name="l05205"></a><span class="lineno"> 5205</span> {</div>
+<div class="line"><a name="l05206"></a><span class="lineno"> 5206</span> ck21=K(1.0)/(PHI_HUT(k2-N2/2,2));</div>
+<div class="line"><a name="l05207"></a><span class="lineno"> 5207</span> ck22=K(1.0)/(PHI_HUT(k2,2));</div>
+<div class="line"><a name="l05208"></a><span class="lineno"> 5208</span> </div>
+<div class="line"><a name="l05209"></a><span class="lineno"> 5209</span> g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+n2-N2/2+k2] = f_hat[(k0*N1+k1)*N2+k2] * ck01 * ck11 * ck21;</div>
+<div class="line"><a name="l05210"></a><span class="lineno"> 5210</span> g_hat[(k0*n1+n1-N1/2+k1)*n2+n2-N2/2+k2] = f_hat[((N0/2+k0)*N1+k1)*N2+k2] * ck02 * ck11 * ck21;</div>
+<div class="line"><a name="l05211"></a><span class="lineno"> 5211</span> g_hat[((n0-N0/2+k0)*n1+k1)*n2+n2-N2/2+k2] = f_hat[(k0*N1+N1/2+k1)*N2+k2] * ck01 * ck12 * ck21;</div>
+<div class="line"><a name="l05212"></a><span class="lineno"> 5212</span> g_hat[(k0*n1+k1)*n2+n2-N2/2+k2] = f_hat[((N0/2+k0)*N1+N1/2+k1)*N2+k2] * ck02 * ck12 * ck21;</div>
+<div class="line"><a name="l05213"></a><span class="lineno"> 5213</span> </div>
+<div class="line"><a name="l05214"></a><span class="lineno"> 5214</span> g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+k2] = f_hat[(k0*N1+k1)*N2+N2/2+k2] * ck01 * ck11 * ck22;</div>
+<div class="line"><a name="l05215"></a><span class="lineno"> 5215</span> g_hat[(k0*n1+n1-N1/2+k1)*n2+k2] = f_hat[((N0/2+k0)*N1+k1)*N2+N2/2+k2] * ck02 * ck11 * ck22;</div>
+<div class="line"><a name="l05216"></a><span class="lineno"> 5216</span> g_hat[((n0-N0/2+k0)*n1+k1)*n2+k2] = f_hat[(k0*N1+N1/2+k1)*N2+N2/2+k2] * ck01 * ck12 * ck22;</div>
+<div class="line"><a name="l05217"></a><span class="lineno"> 5217</span> g_hat[(k0*n1+k1)*n2+k2] = f_hat[((N0/2+k0)*N1+N1/2+k1)*N2+N2/2+k2] * ck02 * ck12 * ck22;</div>
+<div class="line"><a name="l05218"></a><span class="lineno"> 5218</span> }</div>
+<div class="line"><a name="l05219"></a><span class="lineno"> 5219</span> }</div>
+<div class="line"><a name="l05220"></a><span class="lineno"> 5220</span> }</div>
+<div class="line"><a name="l05221"></a><span class="lineno"> 5221</span> </div>
+<div class="line"><a name="l05222"></a><span class="lineno"> 5222</span> TOC(0)</div>
+<div class="line"><a name="l05223"></a><span class="lineno"> 5223</span> </div>
+<div class="line"><a name="l05224"></a><span class="lineno"> 5224</span> TIC_FFTW(1)</div>
+<div class="line"><a name="l05225"></a><span class="lineno"> 5225</span> fftw_execute(ths->my_fftw_plan1);</div>
+<div class="line"><a name="l05226"></a><span class="lineno"> 5226</span> TOC_FFTW(1);</div>
+<div class="line"><a name="l05227"></a><span class="lineno"> 5227</span> </div>
+<div class="line"><a name="l05228"></a><span class="lineno"> 5228</span> TIC(2);</div>
+<div class="line"><a name="l05229"></a><span class="lineno"> 5229</span> nfft_trafo_3d_B(ths);</div>
+<div class="line"><a name="l05230"></a><span class="lineno"> 5230</span> TOC(2);</div>
+<div class="line"><a name="l05231"></a><span class="lineno"> 5231</span> }</div>
+<div class="line"><a name="l05232"></a><span class="lineno"> 5232</span> </div>
+<div class="line"><a name="l05233"></a><span class="lineno"> 5233</span> <span class="keywordtype">void</span> nfft_adjoint_3d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05234"></a><span class="lineno"> 5234</span> {</div>
+<div class="line"><a name="l05235"></a><span class="lineno"> 5235</span> <span class="keywordtype">int</span> k0,k1,k2,n0,n1,n2,N0,N1,N2;</div>
+<div class="line"><a name="l05236"></a><span class="lineno"> 5236</span> C *g_hat,*f_hat;</div>
+<div class="line"><a name="l05237"></a><span class="lineno"> 5237</span> R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12, *c_phi_inv21, *c_phi_inv22;</div>
+<div class="line"><a name="l05238"></a><span class="lineno"> 5238</span> R ck01, ck02, ck11, ck12, ck21, ck22;</div>
+<div class="line"><a name="l05239"></a><span class="lineno"> 5239</span> C *g_hat111,*f_hat111,*g_hat211,*f_hat211,*g_hat121,*f_hat121,*g_hat221,*f_hat221;</div>
+<div class="line"><a name="l05240"></a><span class="lineno"> 5240</span> C *g_hat112,*f_hat112,*g_hat212,*f_hat212,*g_hat122,*f_hat122,*g_hat222,*f_hat222;</div>
+<div class="line"><a name="l05241"></a><span class="lineno"> 5241</span> </div>
+<div class="line"><a name="l05242"></a><span class="lineno"> 5242</span> ths->g_hat=ths->g1;</div>
+<div class="line"><a name="l05243"></a><span class="lineno"> 5243</span> ths->g=ths->g2;</div>
+<div class="line"><a name="l05244"></a><span class="lineno"> 5244</span> </div>
+<div class="line"><a name="l05245"></a><span class="lineno"> 5245</span> N0=ths->N[0];</div>
+<div class="line"><a name="l05246"></a><span class="lineno"> 5246</span> N1=ths->N[1];</div>
+<div class="line"><a name="l05247"></a><span class="lineno"> 5247</span> N2=ths->N[2];</div>
+<div class="line"><a name="l05248"></a><span class="lineno"> 5248</span> n0=ths->n[0];</div>
+<div class="line"><a name="l05249"></a><span class="lineno"> 5249</span> n1=ths->n[1];</div>
+<div class="line"><a name="l05250"></a><span class="lineno"> 5250</span> n2=ths->n[2];</div>
+<div class="line"><a name="l05251"></a><span class="lineno"> 5251</span> </div>
+<div class="line"><a name="l05252"></a><span class="lineno"> 5252</span> f_hat=(C*)ths->f_hat;</div>
+<div class="line"><a name="l05253"></a><span class="lineno"> 5253</span> g_hat=(C*)ths->g_hat;</div>
+<div class="line"><a name="l05254"></a><span class="lineno"> 5254</span> </div>
+<div class="line"><a name="l05255"></a><span class="lineno"> 5255</span> TIC(2);</div>
+<div class="line"><a name="l05256"></a><span class="lineno"> 5256</span> nfft_adjoint_3d_B(ths);</div>
+<div class="line"><a name="l05257"></a><span class="lineno"> 5257</span> TOC(2);</div>
+<div class="line"><a name="l05258"></a><span class="lineno"> 5258</span> </div>
+<div class="line"><a name="l05259"></a><span class="lineno"> 5259</span> TIC_FFTW(1)</div>
+<div class="line"><a name="l05260"></a><span class="lineno"> 5260</span> fftw_execute(ths->my_fftw_plan2);</div>
+<div class="line"><a name="l05261"></a><span class="lineno"> 5261</span> TOC_FFTW(1);</div>
+<div class="line"><a name="l05262"></a><span class="lineno"> 5262</span> </div>
+<div class="line"><a name="l05263"></a><span class="lineno"> 5263</span> TIC(0)</div>
+<div class="line"><a name="l05264"></a><span class="lineno"> 5264</span> if(ths->nfft_flags & PRE_PHI_HUT)</div>
+<div class="line"><a name="l05265"></a><span class="lineno"> 5265</span> {</div>
+<div class="line"><a name="l05266"></a><span class="lineno"> 5266</span> c_phi_inv01=ths->c_phi_inv[0];</div>
+<div class="line"><a name="l05267"></a><span class="lineno"> 5267</span> c_phi_inv02=&ths->c_phi_inv[0][N0/2];</div>
+<div class="line"><a name="l05268"></a><span class="lineno"> 5268</span> </div>
+<div class="line"><a name="l05269"></a><span class="lineno"> 5269</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,c_phi_inv11,c_phi_inv12,ck11,ck12,c_phi_inv21,c_phi_inv22,g_hat111,f_hat111,g_hat211,f_hat211,g_hat121,f_hat121,g_hat221,f_hat221,g_hat112,f_hat112,g_hat212,f_hat212,g_hat122,f_hat122,g_hat222,f_hat222,ck21,ck22)</span></div>
+<div class="line"><a name="l05270"></a><span class="lineno"> 5270</span> <span class="preprocessor"></span> <span class="keywordflow">for</span>(k0=0;k0<N0/2;k0++)</div>
+<div class="line"><a name="l05271"></a><span class="lineno"> 5271</span> {</div>
+<div class="line"><a name="l05272"></a><span class="lineno"> 5272</span> ck01=c_phi_inv01[k0];</div>
+<div class="line"><a name="l05273"></a><span class="lineno"> 5273</span> ck02=c_phi_inv02[k0];</div>
+<div class="line"><a name="l05274"></a><span class="lineno"> 5274</span> c_phi_inv11=ths->c_phi_inv[1];</div>
+<div class="line"><a name="l05275"></a><span class="lineno"> 5275</span> c_phi_inv12=&ths->c_phi_inv[1][N1/2];</div>
+<div class="line"><a name="l05276"></a><span class="lineno"> 5276</span> </div>
+<div class="line"><a name="l05277"></a><span class="lineno"> 5277</span> <span class="keywordflow">for</span>(k1=0;k1<N1/2;k1++)</div>
+<div class="line"><a name="l05278"></a><span class="lineno"> 5278</span> {</div>
+<div class="line"><a name="l05279"></a><span class="lineno"> 5279</span> ck11=c_phi_inv11[k1];</div>
+<div class="line"><a name="l05280"></a><span class="lineno"> 5280</span> ck12=c_phi_inv12[k1];</div>
+<div class="line"><a name="l05281"></a><span class="lineno"> 5281</span> c_phi_inv21=ths->c_phi_inv[2];</div>
+<div class="line"><a name="l05282"></a><span class="lineno"> 5282</span> c_phi_inv22=&ths->c_phi_inv[2][N2/2];</div>
+<div class="line"><a name="l05283"></a><span class="lineno"> 5283</span> </div>
+<div class="line"><a name="l05284"></a><span class="lineno"> 5284</span> g_hat111=g_hat + ((n0-(N0/2)+k0)*n1+n1-(N1/2)+k1)*n2+n2-(N2/2);</div>
+<div class="line"><a name="l05285"></a><span class="lineno"> 5285</span> f_hat111=f_hat + (k0*N1+k1)*N2;</div>
+<div class="line"><a name="l05286"></a><span class="lineno"> 5286</span> g_hat211=g_hat + (k0*n1+n1-(N1/2)+k1)*n2+n2-(N2/2);</div>
+<div class="line"><a name="l05287"></a><span class="lineno"> 5287</span> f_hat211=f_hat + (((N0/2)+k0)*N1+k1)*N2;</div>
+<div class="line"><a name="l05288"></a><span class="lineno"> 5288</span> g_hat121=g_hat + ((n0-(N0/2)+k0)*n1+k1)*n2+n2-(N2/2);</div>
+<div class="line"><a name="l05289"></a><span class="lineno"> 5289</span> f_hat121=f_hat + (k0*N1+(N1/2)+k1)*N2;</div>
+<div class="line"><a name="l05290"></a><span class="lineno"> 5290</span> g_hat221=g_hat + (k0*n1+k1)*n2+n2-(N2/2);</div>
+<div class="line"><a name="l05291"></a><span class="lineno"> 5291</span> f_hat221=f_hat + (((N0/2)+k0)*N1+(N1/2)+k1)*N2;</div>
+<div class="line"><a name="l05292"></a><span class="lineno"> 5292</span> </div>
+<div class="line"><a name="l05293"></a><span class="lineno"> 5293</span> g_hat112=g_hat + ((n0-(N0/2)+k0)*n1+n1-(N1/2)+k1)*n2;</div>
+<div class="line"><a name="l05294"></a><span class="lineno"> 5294</span> f_hat112=f_hat + (k0*N1+k1)*N2+(N2/2);</div>
+<div class="line"><a name="l05295"></a><span class="lineno"> 5295</span> g_hat212=g_hat + (k0*n1+n1-(N1/2)+k1)*n2;</div>
+<div class="line"><a name="l05296"></a><span class="lineno"> 5296</span> f_hat212=f_hat + (((N0/2)+k0)*N1+k1)*N2+(N2/2);</div>
+<div class="line"><a name="l05297"></a><span class="lineno"> 5297</span> g_hat122=g_hat + ((n0-(N0/2)+k0)*n1+k1)*n2;</div>
+<div class="line"><a name="l05298"></a><span class="lineno"> 5298</span> f_hat122=f_hat + (k0*N1+(N1/2)+k1)*N2+(N2/2);</div>
+<div class="line"><a name="l05299"></a><span class="lineno"> 5299</span> g_hat222=g_hat + (k0*n1+k1)*n2;</div>
+<div class="line"><a name="l05300"></a><span class="lineno"> 5300</span> f_hat222=f_hat + (((N0/2)+k0)*N1+(N1/2)+k1)*N2+(N2/2);</div>
+<div class="line"><a name="l05301"></a><span class="lineno"> 5301</span> </div>
+<div class="line"><a name="l05302"></a><span class="lineno"> 5302</span> <span class="keywordflow">for</span>(k2=0;k2<N2/2;k2++)</div>
+<div class="line"><a name="l05303"></a><span class="lineno"> 5303</span> {</div>
+<div class="line"><a name="l05304"></a><span class="lineno"> 5304</span> ck21=c_phi_inv21[k2];</div>
+<div class="line"><a name="l05305"></a><span class="lineno"> 5305</span> ck22=c_phi_inv22[k2];</div>
+<div class="line"><a name="l05306"></a><span class="lineno"> 5306</span> </div>
+<div class="line"><a name="l05307"></a><span class="lineno"> 5307</span> f_hat111[k2] = g_hat111[k2] * ck01 * ck11 * ck21;</div>
+<div class="line"><a name="l05308"></a><span class="lineno"> 5308</span> f_hat211[k2] = g_hat211[k2] * ck02 * ck11 * ck21;</div>
+<div class="line"><a name="l05309"></a><span class="lineno"> 5309</span> f_hat121[k2] = g_hat121[k2] * ck01 * ck12 * ck21;</div>
+<div class="line"><a name="l05310"></a><span class="lineno"> 5310</span> f_hat221[k2] = g_hat221[k2] * ck02 * ck12 * ck21;</div>
+<div class="line"><a name="l05311"></a><span class="lineno"> 5311</span> </div>
+<div class="line"><a name="l05312"></a><span class="lineno"> 5312</span> f_hat112[k2] = g_hat112[k2] * ck01 * ck11 * ck22;</div>
+<div class="line"><a name="l05313"></a><span class="lineno"> 5313</span> f_hat212[k2] = g_hat212[k2] * ck02 * ck11 * ck22;</div>
+<div class="line"><a name="l05314"></a><span class="lineno"> 5314</span> f_hat122[k2] = g_hat122[k2] * ck01 * ck12 * ck22;</div>
+<div class="line"><a name="l05315"></a><span class="lineno"> 5315</span> f_hat222[k2] = g_hat222[k2] * ck02 * ck12 * ck22;</div>
+<div class="line"><a name="l05316"></a><span class="lineno"> 5316</span> }</div>
+<div class="line"><a name="l05317"></a><span class="lineno"> 5317</span> }</div>
+<div class="line"><a name="l05318"></a><span class="lineno"> 5318</span> }</div>
+<div class="line"><a name="l05319"></a><span class="lineno"> 5319</span> }</div>
+<div class="line"><a name="l05320"></a><span class="lineno"> 5320</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l05321"></a><span class="lineno"> 5321</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,ck11,ck12,ck21,ck22)</span></div>
+<div class="line"><a name="l05322"></a><span class="lineno"> 5322</span> <span class="preprocessor"></span> <span class="keywordflow">for</span>(k0=0;k0<N0/2;k0++)</div>
+<div class="line"><a name="l05323"></a><span class="lineno"> 5323</span> {</div>
+<div class="line"><a name="l05324"></a><span class="lineno"> 5324</span> ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));</div>
+<div class="line"><a name="l05325"></a><span class="lineno"> 5325</span> ck02=K(1.0)/(PHI_HUT(k0,0));</div>
+<div class="line"><a name="l05326"></a><span class="lineno"> 5326</span> <span class="keywordflow">for</span>(k1=0;k1<N1/2;k1++)</div>
+<div class="line"><a name="l05327"></a><span class="lineno"> 5327</span> {</div>
+<div class="line"><a name="l05328"></a><span class="lineno"> 5328</span> ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));</div>
+<div class="line"><a name="l05329"></a><span class="lineno"> 5329</span> ck12=K(1.0)/(PHI_HUT(k1,1));</div>
+<div class="line"><a name="l05330"></a><span class="lineno"> 5330</span> </div>
+<div class="line"><a name="l05331"></a><span class="lineno"> 5331</span> <span class="keywordflow">for</span>(k2=0;k2<N2/2;k2++)</div>
+<div class="line"><a name="l05332"></a><span class="lineno"> 5332</span> {</div>
+<div class="line"><a name="l05333"></a><span class="lineno"> 5333</span> ck21=K(1.0)/(PHI_HUT(k2-N2/2,2));</div>
+<div class="line"><a name="l05334"></a><span class="lineno"> 5334</span> ck22=K(1.0)/(PHI_HUT(k2,2));</div>
+<div class="line"><a name="l05335"></a><span class="lineno"> 5335</span> </div>
+<div class="line"><a name="l05336"></a><span class="lineno"> 5336</span> f_hat[(k0*N1+k1)*N2+k2] = g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+n2-N2/2+k2] * ck01 * ck11 * ck21;</div>
+<div class="line"><a name="l05337"></a><span class="lineno"> 5337</span> f_hat[((N0/2+k0)*N1+k1)*N2+k2] = g_hat[(k0*n1+n1-N1/2+k1)*n2+n2-N2/2+k2] * ck02 * ck11 * ck21;</div>
+<div class="line"><a name="l05338"></a><span class="lineno"> 5338</span> f_hat[(k0*N1+N1/2+k1)*N2+k2] = g_hat[((n0-N0/2+k0)*n1+k1)*n2+n2-N2/2+k2] * ck01 * ck12 * ck21;</div>
+<div class="line"><a name="l05339"></a><span class="lineno"> 5339</span> f_hat[((N0/2+k0)*N1+N1/2+k1)*N2+k2] = g_hat[(k0*n1+k1)*n2+n2-N2/2+k2] * ck02 * ck12 * ck21;</div>
+<div class="line"><a name="l05340"></a><span class="lineno"> 5340</span> </div>
+<div class="line"><a name="l05341"></a><span class="lineno"> 5341</span> f_hat[(k0*N1+k1)*N2+N2/2+k2] = g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+k2] * ck01 * ck11 * ck22;</div>
+<div class="line"><a name="l05342"></a><span class="lineno"> 5342</span> f_hat[((N0/2+k0)*N1+k1)*N2+N2/2+k2] = g_hat[(k0*n1+n1-N1/2+k1)*n2+k2] * ck02 * ck11 * ck22;</div>
+<div class="line"><a name="l05343"></a><span class="lineno"> 5343</span> f_hat[(k0*N1+N1/2+k1)*N2+N2/2+k2] = g_hat[((n0-N0/2+k0)*n1+k1)*n2+k2] * ck01 * ck12 * ck22;</div>
+<div class="line"><a name="l05344"></a><span class="lineno"> 5344</span> f_hat[((N0/2+k0)*N1+N1/2+k1)*N2+N2/2+k2] = g_hat[(k0*n1+k1)*n2+k2] * ck02 * ck12 * ck22;</div>
+<div class="line"><a name="l05345"></a><span class="lineno"> 5345</span> }</div>
+<div class="line"><a name="l05346"></a><span class="lineno"> 5346</span> }</div>
+<div class="line"><a name="l05347"></a><span class="lineno"> 5347</span> }</div>
+<div class="line"><a name="l05348"></a><span class="lineno"> 5348</span> </div>
+<div class="line"><a name="l05349"></a><span class="lineno"> 5349</span> TOC(0)</div>
+<div class="line"><a name="l05350"></a><span class="lineno"> 5350</span> }</div>
+<div class="line"><a name="l05351"></a><span class="lineno"> 5351</span> </div>
+<div class="line"><a name="l05354"></a><span class="lineno"><a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421"> 5354</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05355"></a><span class="lineno"> 5355</span> {</div>
+<div class="line"><a name="l05356"></a><span class="lineno"> 5356</span> <span class="keywordflow">switch</span>(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>)</div>
+<div class="line"><a name="l05357"></a><span class="lineno"> 5357</span> {</div>
+<div class="line"><a name="l05358"></a><span class="lineno"> 5358</span> <span class="keywordflow">case</span> 1: nfft_trafo_1d(ths); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05359"></a><span class="lineno"> 5359</span> <span class="keywordflow">case</span> 2: nfft_trafo_2d(ths); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05360"></a><span class="lineno"> 5360</span> <span class="keywordflow">case</span> 3: nfft_trafo_3d(ths); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05361"></a><span class="lineno"> 5361</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l05362"></a><span class="lineno"> 5362</span> <span class="comment">/* use ths->my_fftw_plan1 */</span></div>
+<div class="line"><a name="l05363"></a><span class="lineno"> 5363</span> ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>=ths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>;</div>
+<div class="line"><a name="l05364"></a><span class="lineno"> 5364</span> ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>=ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>;</div>
+<div class="line"><a name="l05365"></a><span class="lineno"> 5365</span> </div>
+<div class="line"><a name="l05369"></a><span class="lineno"> 5369</span> TIC(0)</div>
+<div class="line"><a name="l05370"></a><span class="lineno"> 5370</span> nfft_D_A(ths);</div>
+<div class="line"><a name="l05371"></a><span class="lineno"> 5371</span> TOC(0)</div>
+<div class="line"><a name="l05372"></a><span class="lineno"> 5372</span> </div>
+<div class="line"><a name="l05373"></a><span class="lineno"> 5373</span> </div>
+<div class="line"><a name="l05377"></a><span class="lineno"> 5377</span> TIC_FFTW(1)</div>
+<div class="line"><a name="l05378"></a><span class="lineno"> 5378</span> fftw_execute(ths->my_fftw_plan1);</div>
+<div class="line"><a name="l05379"></a><span class="lineno"> 5379</span> TOC_FFTW(1)</div>
+<div class="line"><a name="l05380"></a><span class="lineno"> 5380</span> </div>
+<div class="line"><a name="l05381"></a><span class="lineno"> 5381</span> </div>
+<div class="line"><a name="l05384"></a><span class="lineno"> 5384</span> TIC(2)</div>
+<div class="line"><a name="l05385"></a><span class="lineno"> 5385</span> nfft_B_A(ths);</div>
+<div class="line"><a name="l05386"></a><span class="lineno"> 5386</span> TOC(2)</div>
+<div class="line"><a name="l05387"></a><span class="lineno"> 5387</span> }</div>
+<div class="line"><a name="l05388"></a><span class="lineno"> 5388</span> } <span class="comment">/* nfft_trafo */</span></div>
+<div class="line"><a name="l05389"></a><span class="lineno"> 5389</span> </div>
+<div class="line"><a name="l05390"></a><span class="lineno"> 5390</span> <span class="keywordtype">void</span> nfft_adjoint(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05391"></a><span class="lineno"> 5391</span> {</div>
+<div class="line"><a name="l05392"></a><span class="lineno"> 5392</span> <span class="keywordflow">switch</span>(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>)</div>
+<div class="line"><a name="l05393"></a><span class="lineno"> 5393</span> {</div>
+<div class="line"><a name="l05394"></a><span class="lineno"> 5394</span> <span class="keywordflow">case</span> 1: nfft_adjoint_1d(ths); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05395"></a><span class="lineno"> 5395</span> <span class="keywordflow">case</span> 2: nfft_adjoint_2d(ths); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05396"></a><span class="lineno"> 5396</span> <span class="keywordflow">case</span> 3: nfft_adjoint_3d(ths); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05397"></a><span class="lineno"> 5397</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l05398"></a><span class="lineno"> 5398</span> <span class="comment">/* use ths->my_fftw_plan2 */</span></div>
+<div class="line"><a name="l05399"></a><span class="lineno"> 5399</span> ths-><a class="code" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5" title="Zero-padded vector of Fourier coefficients, size is n_total fftw_complex.">g_hat</a>=ths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>;</div>
+<div class="line"><a name="l05400"></a><span class="lineno"> 5400</span> ths-><a class="code" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539" title="Oversampled vector of samples, size is n_total double complex.">g</a>=ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>;</div>
+<div class="line"><a name="l05401"></a><span class="lineno"> 5401</span> </div>
+<div class="line"><a name="l05405"></a><span class="lineno"> 5405</span> TIC(2)</div>
+<div class="line"><a name="l05406"></a><span class="lineno"> 5406</span> nfft_B_T(ths);</div>
+<div class="line"><a name="l05407"></a><span class="lineno"> 5407</span> TOC(2)</div>
+<div class="line"><a name="l05408"></a><span class="lineno"> 5408</span> </div>
+<div class="line"><a name="l05413"></a><span class="lineno"> 5413</span> TIC_FFTW(1)</div>
+<div class="line"><a name="l05414"></a><span class="lineno"> 5414</span> fftw_execute(ths->my_fftw_plan2);</div>
+<div class="line"><a name="l05415"></a><span class="lineno"> 5415</span> TOC_FFTW(1)</div>
+<div class="line"><a name="l05416"></a><span class="lineno"> 5416</span> </div>
+<div class="line"><a name="l05420"></a><span class="lineno"> 5420</span> TIC(0)</div>
+<div class="line"><a name="l05421"></a><span class="lineno"> 5421</span> nfft_D_T(ths);</div>
+<div class="line"><a name="l05422"></a><span class="lineno"> 5422</span> TOC(0)</div>
+<div class="line"><a name="l05423"></a><span class="lineno"> 5423</span> }</div>
+<div class="line"><a name="l05424"></a><span class="lineno"> 5424</span> } <span class="comment">/* nfft_adjoint */</span></div>
+<div class="line"><a name="l05425"></a><span class="lineno"> 5425</span> </div>
+<div class="line"><a name="l05426"></a><span class="lineno"> 5426</span> </div>
+<div class="line"><a name="l05429"></a><span class="lineno"> 5429</span> static <span class="keywordtype">void</span> nfft_precompute_phi_hut(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05430"></a><span class="lineno"> 5430</span> {</div>
+<div class="line"><a name="l05431"></a><span class="lineno"> 5431</span> <span class="keywordtype">int</span> ks[ths->d]; </div>
+<div class="line"><a name="l05432"></a><span class="lineno"> 5432</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l05434"></a><span class="lineno"> 5434</span> ths->c_phi_inv = (R**) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths->d*<span class="keyword">sizeof</span>(R*));</div>
+<div class="line"><a name="l05435"></a><span class="lineno"> 5435</span> </div>
+<div class="line"><a name="l05436"></a><span class="lineno"> 5436</span> <span class="keywordflow">for</span>(t=0; t<ths->d; t++)</div>
+<div class="line"><a name="l05437"></a><span class="lineno"> 5437</span> {</div>
+<div class="line"><a name="l05438"></a><span class="lineno"> 5438</span> ths->c_phi_inv[t]= (R*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths->N[t]*<span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l05439"></a><span class="lineno"> 5439</span> <span class="keywordflow">for</span>(ks[t]=0; ks[t]<ths->N[t]; ks[t]++)</div>
+<div class="line"><a name="l05440"></a><span class="lineno"> 5440</span> ths->c_phi_inv[t][ks[t]]= K(1.0)/(PHI_HUT(ks[t]-ths->N[t]/2,t));</div>
+<div class="line"><a name="l05441"></a><span class="lineno"> 5441</span> }</div>
+<div class="line"><a name="l05442"></a><span class="lineno"> 5442</span> } <span class="comment">/* nfft_phi_hut */</span></div>
+<div class="line"><a name="l05443"></a><span class="lineno"> 5443</span> </div>
+<div class="line"><a name="l05449"></a><span class="lineno"><a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc"> 5449</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05450"></a><span class="lineno"> 5450</span> {</div>
+<div class="line"><a name="l05451"></a><span class="lineno"> 5451</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l05452"></a><span class="lineno"> 5452</span> <span class="keywordtype">int</span> j; </div>
+<div class="line"><a name="l05453"></a><span class="lineno"> 5453</span> R step; </div>
+<div class="line"><a name="l05455"></a><span class="lineno"> 5455</span> <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l05456"></a><span class="lineno"> 5456</span> {</div>
+<div class="line"><a name="l05457"></a><span class="lineno"> 5457</span> step=((R)(ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2))/(((R)ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K [...]
+<div class="line"><a name="l05458"></a><span class="lineno"> 5458</span> <span class="keywordflow">for</span>(j=0;j<=ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>;j++)</div>
+<div class="line"><a name="l05459"></a><span class="lineno"> 5459</span> {</div>
+<div class="line"><a name="l05460"></a><span class="lineno"> 5460</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>+1)*t + j] = PHI(j*step,t);</div>
+<div class="line"><a name="l05461"></a><span class="lineno"> 5461</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l05462"></a><span class="lineno"> 5462</span> } <span class="comment">/* for(t) */</span></div>
+<div class="line"><a name="l05463"></a><span class="lineno"> 5463</span> }</div>
+<div class="line"><a name="l05464"></a><span class="lineno"> 5464</span> </div>
+<div class="line"><a name="l05465"></a><span class="lineno"> 5465</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_precompute_fg_psi(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05466"></a><span class="lineno"> 5466</span> {</div>
+<div class="line"><a name="l05467"></a><span class="lineno"> 5467</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l05468"></a><span class="lineno"> 5468</span> <span class="keywordtype">int</span> u, o; </div>
+<div class="line"><a name="l05470"></a><span class="lineno"> 5470</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l05471"></a><span class="lineno"> 5471</span> </div>
+<div class="line"><a name="l05472"></a><span class="lineno"> 5472</span> <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l05473"></a><span class="lineno"> 5473</span> {</div>
+<div class="line"><a name="l05474"></a><span class="lineno"> 5474</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l05475"></a><span class="lineno"> 5475</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(j,u,o)</span></div>
+<div class="line"><a name="l05476"></a><span class="lineno"> 5476</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (j = 0; j < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l05477"></a><span class="lineno"> 5477</span> {</div>
+<div class="line"><a name="l05478"></a><span class="lineno"> 5478</span> nfft_uo(ths,j,&u,&o,t);</div>
+<div class="line"><a name="l05479"></a><span class="lineno"> 5479</span> </div>
+<div class="line"><a name="l05480"></a><span class="lineno"> 5480</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t)]=</div>
+<div class="line"><a name="l05481"></a><span class="lineno"> 5481</span> (PHI((ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t]-((R)u)/ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to [...]
+<div class="line"><a name="l05482"></a><span class="lineno"> 5482</span> </div>
+<div class="line"><a name="l05483"></a><span class="lineno"> 5483</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[2*(j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t)+1]=</div>
+<div class="line"><a name="l05484"></a><span class="lineno"> 5484</span> EXP(K(2.0)*(ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t]*ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac94 [...]
+<div class="line"><a name="l05485"></a><span class="lineno"> 5485</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l05486"></a><span class="lineno"> 5486</span> }</div>
+<div class="line"><a name="l05487"></a><span class="lineno"> 5487</span> <span class="comment">/* for(t) */</span></div>
+<div class="line"><a name="l05488"></a><span class="lineno"> 5488</span> } <span class="comment">/* nfft_precompute_fg_psi */</span></div>
+<div class="line"><a name="l05489"></a><span class="lineno"> 5489</span> </div>
+<div class="line"><a name="l05490"></a><span class="lineno"> 5490</span> <span class="keywordtype">void</span> nfft_precompute_psi(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05491"></a><span class="lineno"> 5491</span> {</div>
+<div class="line"><a name="l05492"></a><span class="lineno"> 5492</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l05493"></a><span class="lineno"> 5493</span> <span class="keywordtype">int</span> l; </div>
+<div class="line"><a name="l05494"></a><span class="lineno"> 5494</span> <span class="keywordtype">int</span> lj; </div>
+<div class="line"><a name="l05495"></a><span class="lineno"> 5495</span> <span class="keywordtype">int</span> u, o; </div>
+<div class="line"><a name="l05497"></a><span class="lineno"> 5497</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l05498"></a><span class="lineno"> 5498</span> </div>
+<div class="line"><a name="l05499"></a><span class="lineno"> 5499</span> <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l05500"></a><span class="lineno"> 5500</span> {</div>
+<div class="line"><a name="l05501"></a><span class="lineno"> 5501</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l05502"></a><span class="lineno"> 5502</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(j,l,lj,u,o)</span></div>
+<div class="line"><a name="l05503"></a><span class="lineno"> 5503</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (j = 0; j < ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l05504"></a><span class="lineno"> 5504</span> {</div>
+<div class="line"><a name="l05505"></a><span class="lineno"> 5505</span> nfft_uo(ths,j,&u,&o,t);</div>
+<div class="line"><a name="l05506"></a><span class="lineno"> 5506</span> </div>
+<div class="line"><a name="l05507"></a><span class="lineno"> 5507</span> <span class="keywordflow">for</span>(l=u, lj=0; l <= o; l++, lj++)</div>
+<div class="line"><a name="l05508"></a><span class="lineno"> 5508</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[(j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t)*(2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut- [...]
+<div class="line"><a name="l05509"></a><span class="lineno"> 5509</span> (PHI((ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+t]-((R)l)/ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma [...]
+<div class="line"><a name="l05510"></a><span class="lineno"> 5510</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l05511"></a><span class="lineno"> 5511</span> }</div>
+<div class="line"><a name="l05512"></a><span class="lineno"> 5512</span> <span class="comment">/* for(t) */</span></div>
+<div class="line"><a name="l05513"></a><span class="lineno"> 5513</span> } <span class="comment">/* nfft_precompute_psi */</span></div>
+<div class="line"><a name="l05514"></a><span class="lineno"> 5514</span> </div>
+<div class="line"><a name="l05515"></a><span class="lineno"> 5515</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05516"></a><span class="lineno"> 5516</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> nfft_precompute_full_psi_omp(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05517"></a><span class="lineno"> 5517</span> {</div>
+<div class="line"><a name="l05518"></a><span class="lineno"> 5518</span> <span class="keywordtype">int</span> j; </div>
+<div class="line"><a name="l05519"></a><span class="lineno"> 5519</span> <span class="keywordtype">int</span> lprod; </div>
+<div class="line"><a name="l05521"></a><span class="lineno"> 5521</span> {</div>
+<div class="line"><a name="l05522"></a><span class="lineno"> 5522</span> <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l05523"></a><span class="lineno"> 5523</span> <span class="keywordflow">for</span>(t=0,lprod = 1; t<ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l05524"></a><span class="lineno"> 5524</span> lprod *= 2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2;</div>
+<div class="line"><a name="l05525"></a><span class="lineno"> 5525</span> }</div>
+<div class="line"><a name="l05526"></a><span class="lineno"> 5526</span> </div>
+<div class="line"><a name="l05527"></a><span class="lineno"> 5527</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(j)</span></div>
+<div class="line"><a name="l05528"></a><span class="lineno"> 5528</span> <span class="preprocessor"></span> <span class="keywordflow">for</span>(j=0; j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l05529"></a><span class="lineno"> 5529</span> {</div>
+<div class="line"><a name="l05530"></a><span class="lineno"> 5530</span> <span class="keywordtype">int</span> t,t2; </div>
+<div class="line"><a name="l05531"></a><span class="lineno"> 5531</span> <span class="keywordtype">int</span> l_L; </div>
+<div class="line"><a name="l05532"></a><span class="lineno"> 5532</span> <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; </div>
+<div class="line"><a name="l05533"></a><span class="lineno"> 5533</span> <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; </div>
+<div class="line"><a name="l05534"></a><span class="lineno"> 5534</span> <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; </div>
+<div class="line"><a name="l05536"></a><span class="lineno"> 5536</span> <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; </div>
+<div class="line"><a name="l05538"></a><span class="lineno"> 5538</span> R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1];</div>
+<div class="line"><a name="l05539"></a><span class="lineno"> 5539</span> <span class="keywordtype">int</span> ix = j*lprod;</div>
+<div class="line"><a name="l05540"></a><span class="lineno"> 5540</span> </div>
+<div class="line"><a name="l05541"></a><span class="lineno"> 5541</span> phi_prod[0]=1;</div>
+<div class="line"><a name="l05542"></a><span class="lineno"> 5542</span> ll_plain[0]=0;</div>
+<div class="line"><a name="l05543"></a><span class="lineno"> 5543</span> </div>
+<div class="line"><a name="l05544"></a><span class="lineno"> 5544</span> MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l05545"></a><span class="lineno"> 5545</span> </div>
+<div class="line"><a name="l05546"></a><span class="lineno"> 5546</span> <span class="keywordflow">for</span>(l_L=0; l_L<lprod; l_L++, ix++)</div>
+<div class="line"><a name="l05547"></a><span class="lineno"> 5547</span> {</div>
+<div class="line"><a name="l05548"></a><span class="lineno"> 5548</span> MACRO_update_phi_prod_ll_plain(without_PRE_PSI);</div>
+<div class="line"><a name="l05549"></a><span class="lineno"> 5549</span> </div>
+<div class="line"><a name="l05550"></a><span class="lineno"> 5550</span> ths-><a class="code" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_g</a>[ix]=ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l05551"></a><span class="lineno"> 5551</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ix]=phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l05552"></a><span class="lineno"> 5552</span> </div>
+<div class="line"><a name="l05553"></a><span class="lineno"> 5553</span> MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l05554"></a><span class="lineno"> 5554</span> } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l05555"></a><span class="lineno"> 5555</span> </div>
+<div class="line"><a name="l05556"></a><span class="lineno"> 5556</span> ths-><a class="code" href="structnfft__plan.html#a2ed144cf7d6043a93c07b6f6ba7bbe2a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_f</a>[j]=lprod;</div>
+<div class="line"><a name="l05557"></a><span class="lineno"> 5557</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l05558"></a><span class="lineno"> 5558</span> }</div>
+<div class="line"><a name="l05559"></a><span class="lineno"> 5559</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05560"></a><span class="lineno"> 5560</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l05561"></a><span class="lineno"> 5561</span> <span class="keywordtype">void</span> nfft_precompute_full_psi(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05562"></a><span class="lineno"> 5562</span> {</div>
+<div class="line"><a name="l05563"></a><span class="lineno"> 5563</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05564"></a><span class="lineno"> 5564</span> <span class="preprocessor"></span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l05565"></a><span class="lineno"> 5565</span> </div>
+<div class="line"><a name="l05566"></a><span class="lineno"> 5566</span> nfft_precompute_full_psi_omp(ths);</div>
+<div class="line"><a name="l05567"></a><span class="lineno"> 5567</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l05568"></a><span class="lineno"> 5568</span> <span class="preprocessor"></span> <span class="keywordtype">int</span> t,t2; </div>
+<div class="line"><a name="l05569"></a><span class="lineno"> 5569</span> <span class="keywordtype">int</span> j; </div>
+<div class="line"><a name="l05570"></a><span class="lineno"> 5570</span> <span class="keywordtype">int</span> l_L; </div>
+<div class="line"><a name="l05571"></a><span class="lineno"> 5571</span> <span class="keywordtype">int</span> l[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; </div>
+<div class="line"><a name="l05572"></a><span class="lineno"> 5572</span> <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; </div>
+<div class="line"><a name="l05573"></a><span class="lineno"> 5573</span> <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1]; </div>
+<div class="line"><a name="l05574"></a><span class="lineno"> 5574</span> <span class="keywordtype">int</span> lprod; </div>
+<div class="line"><a name="l05575"></a><span class="lineno"> 5575</span> <span class="keywordtype">int</span> u[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>], o[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>]; </div>
+<div class="line"><a name="l05577"></a><span class="lineno"> 5577</span> R phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>+1];</div>
+<div class="line"><a name="l05578"></a><span class="lineno"> 5578</span> </div>
+<div class="line"><a name="l05579"></a><span class="lineno"> 5579</span> <span class="keywordtype">int</span> ix,ix_old;</div>
+<div class="line"><a name="l05580"></a><span class="lineno"> 5580</span> </div>
+<div class="line"><a name="l05581"></a><span class="lineno"> 5581</span> nfft_sort_nodes(ths);</div>
+<div class="line"><a name="l05582"></a><span class="lineno"> 5582</span> </div>
+<div class="line"><a name="l05583"></a><span class="lineno"> 5583</span> phi_prod[0]=1;</div>
+<div class="line"><a name="l05584"></a><span class="lineno"> 5584</span> ll_plain[0]=0;</div>
+<div class="line"><a name="l05585"></a><span class="lineno"> 5585</span> </div>
+<div class="line"><a name="l05586"></a><span class="lineno"> 5586</span> <span class="keywordflow">for</span>(t=0,lprod = 1; t<ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l05587"></a><span class="lineno"> 5587</span> lprod *= 2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2;</div>
+<div class="line"><a name="l05588"></a><span class="lineno"> 5588</span> </div>
+<div class="line"><a name="l05589"></a><span class="lineno"> 5589</span> <span class="keywordflow">for</span>(j=0,ix=0,ix_old=0; j<ths->M_total; j++)</div>
+<div class="line"><a name="l05590"></a><span class="lineno"> 5590</span> {</div>
+<div class="line"><a name="l05591"></a><span class="lineno"> 5591</span> MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l05592"></a><span class="lineno"> 5592</span> </div>
+<div class="line"><a name="l05593"></a><span class="lineno"> 5593</span> <span class="keywordflow">for</span>(l_L=0; l_L<lprod; l_L++, ix++)</div>
+<div class="line"><a name="l05594"></a><span class="lineno"> 5594</span> {</div>
+<div class="line"><a name="l05595"></a><span class="lineno"> 5595</span> MACRO_update_phi_prod_ll_plain(without_PRE_PSI);</div>
+<div class="line"><a name="l05596"></a><span class="lineno"> 5596</span> </div>
+<div class="line"><a name="l05597"></a><span class="lineno"> 5597</span> ths-><a class="code" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_g</a>[ix]=ll_plain[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l05598"></a><span class="lineno"> 5598</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>[ix]=phi_prod[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>];</div>
+<div class="line"><a name="l05599"></a><span class="lineno"> 5599</span> </div>
+<div class="line"><a name="l05600"></a><span class="lineno"> 5600</span> MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l05601"></a><span class="lineno"> 5601</span> } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l05602"></a><span class="lineno"> 5602</span> </div>
+<div class="line"><a name="l05603"></a><span class="lineno"> 5603</span> </div>
+<div class="line"><a name="l05604"></a><span class="lineno"> 5604</span> ths-><a class="code" href="structnfft__plan.html#a2ed144cf7d6043a93c07b6f6ba7bbe2a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_f</a>[j]=ix-ix_old;</div>
+<div class="line"><a name="l05605"></a><span class="lineno"> 5605</span> ix_old=ix;</div>
+<div class="line"><a name="l05606"></a><span class="lineno"> 5606</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l05607"></a><span class="lineno"> 5607</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05608"></a><span class="lineno"> 5608</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l05609"></a><span class="lineno"> 5609</span> </div>
+<div class="line"><a name="l05610"></a><span class="lineno"> 5610</span> <span class="keywordtype">void</span> nfft_precompute_one_psi(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05611"></a><span class="lineno"> 5611</span> {</div>
+<div class="line"><a name="l05612"></a><span class="lineno"> 5612</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l05613"></a><span class="lineno"> 5613</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(ths);</div>
+<div class="line"><a name="l05614"></a><span class="lineno"> 5614</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l05615"></a><span class="lineno"> 5615</span> nfft_precompute_fg_psi(ths);</div>
+<div class="line"><a name="l05616"></a><span class="lineno"> 5616</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l05617"></a><span class="lineno"> 5617</span> nfft_precompute_psi(ths);</div>
+<div class="line"><a name="l05618"></a><span class="lineno"> 5618</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l05619"></a><span class="lineno"> 5619</span> nfft_precompute_full_psi(ths);</div>
+<div class="line"><a name="l05620"></a><span class="lineno"> 5620</span> }</div>
+<div class="line"><a name="l05621"></a><span class="lineno"> 5621</span> </div>
+<div class="line"><a name="l05622"></a><span class="lineno"> 5622</span> </div>
+<div class="line"><a name="l05623"></a><span class="lineno"> 5623</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_init_help(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05624"></a><span class="lineno"> 5624</span> {</div>
+<div class="line"><a name="l05625"></a><span class="lineno"> 5625</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l05626"></a><span class="lineno"> 5626</span> <span class="keywordtype">int</span> lprod; </div>
+<div class="line"><a name="l05628"></a><span class="lineno"> 5628</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_OMP_BLOCKWISE_ADJOINT)</div>
+<div class="line"><a name="l05629"></a><span class="lineno"> 5629</span> ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> |= NFFT_SORT_NODES;</div>
+<div class="line"><a name="l05630"></a><span class="lineno"> 5630</span> </div>
+<div class="line"><a name="l05631"></a><span class="lineno"> 5631</span> ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>=<a class="code" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116" title="Computes integer .">nfft_prod_int</a>(ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>, ths-><a class="code" h [...]
+<div class="line"><a name="l05632"></a><span class="lineno"> 5632</span> ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>=<a class="code" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116" title="Computes integer .">nfft_prod_int</a>(ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that [...]
+<div class="line"><a name="l05633"></a><span class="lineno"> 5633</span> </div>
+<div class="line"><a name="l05634"></a><span class="lineno"> 5634</span> ths-><a class="code" href="structnfft__plan.html#a09340f6465c23f3d94636f4f0da30f8a" title="oversampling-factor">sigma</a> = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>*<span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l05635"></a><span class="lineno"> 5635</span> <span class="keywordflow">for</span>(t = 0;t < ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l05636"></a><span class="lineno"> 5636</span> ths-><a class="code" href="structnfft__plan.html#a09340f6465c23f3d94636f4f0da30f8a" title="oversampling-factor">sigma</a>[t] = ((R)ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t])/ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-ba [...]
+<div class="line"><a name="l05637"></a><span class="lineno"> 5637</span> </div>
+<div class="line"><a name="l05638"></a><span class="lineno"> 5638</span> WINDOW_HELP_INIT;</div>
+<div class="line"><a name="l05639"></a><span class="lineno"> 5639</span> </div>
+<div class="line"><a name="l05640"></a><span class="lineno"> 5640</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & MALLOC_X)</div>
+<div class="line"><a name="l05641"></a><span class="lineno"> 5641</span> ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a> = (R*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>*ths-><a class="code" href="structnfft__plan.h [...]
+<div class="line"><a name="l05642"></a><span class="lineno"> 5642</span> </div>
+<div class="line"><a name="l05643"></a><span class="lineno"> 5643</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & MALLOC_F_HAT)</div>
+<div class="line"><a name="l05644"></a><span class="lineno"> 5644</span> ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficien [...]
+<div class="line"><a name="l05645"></a><span class="lineno"> 5645</span> </div>
+<div class="line"><a name="l05646"></a><span class="lineno"> 5646</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & MALLOC_F)</div>
+<div class="line"><a name="l05647"></a><span class="lineno"> 5647</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*<span class=" [...]
+<div class="line"><a name="l05648"></a><span class="lineno"> 5648</span> </div>
+<div class="line"><a name="l05649"></a><span class="lineno"> 5649</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l05650"></a><span class="lineno"> 5650</span> nfft_precompute_phi_hut(ths);</div>
+<div class="line"><a name="l05651"></a><span class="lineno"> 5651</span> </div>
+<div class="line"><a name="l05652"></a><span class="lineno"> 5652</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l05653"></a><span class="lineno"> 5653</span> {</div>
+<div class="line"><a name="l05654"></a><span class="lineno"> 5654</span> ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>=(1U<< 10)*(ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</ [...]
+<div class="line"><a name="l05655"></a><span class="lineno"> 5655</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a> = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((ths-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the [...]
+<div class="line"><a name="l05656"></a><span class="lineno"> 5656</span> }</div>
+<div class="line"><a name="l05657"></a><span class="lineno"> 5657</span> </div>
+<div class="line"><a name="l05658"></a><span class="lineno"> 5658</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l05659"></a><span class="lineno"> 5659</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a> = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*t [...]
+<div class="line"><a name="l05660"></a><span class="lineno"> 5660</span> </div>
+<div class="line"><a name="l05661"></a><span class="lineno"> 5661</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l05662"></a><span class="lineno"> 5662</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a> = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*t [...]
+<div class="line"><a name="l05663"></a><span class="lineno"> 5663</span> (2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2)*<span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l05664"></a><span class="lineno"> 5664</span> </div>
+<div class="line"><a name="l05665"></a><span class="lineno"> 5665</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l05666"></a><span class="lineno"> 5666</span> {</div>
+<div class="line"><a name="l05667"></a><span class="lineno"> 5667</span> <span class="keywordflow">for</span>(t=0,lprod = 1; t<ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l05668"></a><span class="lineno"> 5668</span> lprod *= 2*ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>+2;</div>
+<div class="line"><a name="l05669"></a><span class="lineno"> 5669</span> </div>
+<div class="line"><a name="l05670"></a><span class="lineno"> 5670</span> ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a> = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a> [...]
+<div class="line"><a name="l05671"></a><span class="lineno"> 5671</span> </div>
+<div class="line"><a name="l05672"></a><span class="lineno"> 5672</span> ths-><a class="code" href="structnfft__plan.html#a2ed144cf7d6043a93c07b6f6ba7bbe2a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_f</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples. [...]
+<div class="line"><a name="l05673"></a><span class="lineno"> 5673</span> ths-><a class="code" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_g</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples. [...]
+<div class="line"><a name="l05674"></a><span class="lineno"> 5674</span> }</div>
+<div class="line"><a name="l05675"></a><span class="lineno"> 5675</span> </div>
+<div class="line"><a name="l05676"></a><span class="lineno"> 5676</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FFTW_INIT)</div>
+<div class="line"><a name="l05677"></a><span class="lineno"> 5677</span> {</div>
+<div class="line"><a name="l05678"></a><span class="lineno"> 5678</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05679"></a><span class="lineno"> 5679</span> <span class="preprocessor"></span> <span class="keywordtype">int</span> nthreads = nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l05680"></a><span class="lineno"> 5680</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05681"></a><span class="lineno"> 5681</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l05682"></a><span class="lineno"> 5682</span> ths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>=(fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l05683"></a><span class="lineno"> 5683</span> </div>
+<div class="line"><a name="l05684"></a><span class="lineno"> 5684</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FFT_OUT_OF_PLACE)</div>
+<div class="line"><a name="l05685"></a><span class="lineno"> 5685</span> ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a> = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l05686"></a><span class="lineno"> 5686</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l05687"></a><span class="lineno"> 5687</span> ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a> = ths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>;</div>
+<div class="line"><a name="l05688"></a><span class="lineno"> 5688</span> </div>
+<div class="line"><a name="l05689"></a><span class="lineno"> 5689</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05690"></a><span class="lineno"> 5690</span> <span class="preprocessor"></span><span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l05691"></a><span class="lineno"> 5691</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l05692"></a><span class="lineno"> 5692</span> fftw_plan_with_nthreads(nthreads);</div>
+<div class="line"><a name="l05693"></a><span class="lineno"> 5693</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05694"></a><span class="lineno"> 5694</span> <span class="preprocessor"></span> ths->my_fftw_plan1 = fftw_plan_dft(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>, ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>, ths-><a class="code" href="structnfft__plan [...]
+<div class="line"><a name="l05695"></a><span class="lineno"> 5695</span> ths->my_fftw_plan2 = fftw_plan_dft(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>, ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>, ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43 [...]
+<div class="line"><a name="l05696"></a><span class="lineno"> 5696</span> FFTW_BACKWARD, ths-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>);</div>
+<div class="line"><a name="l05697"></a><span class="lineno"> 5697</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05698"></a><span class="lineno"> 5698</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l05699"></a><span class="lineno"> 5699</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05700"></a><span class="lineno"> 5700</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l05701"></a><span class="lineno"> 5701</span> </div>
+<div class="line"><a name="l05702"></a><span class="lineno"> 5702</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES)</div>
+<div class="line"><a name="l05703"></a><span class="lineno"> 5703</span> ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when flag NFFT_SORT_NODES is set.">index_x</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)*2*ths-><a class="code" href="struc [...]
+<div class="line"><a name="l05704"></a><span class="lineno"> 5704</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l05705"></a><span class="lineno"> 5705</span> ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when flag NFFT_SORT_NODES is set.">index_x</a> = NULL;</div>
+<div class="line"><a name="l05706"></a><span class="lineno"> 5706</span> </div>
+<div class="line"><a name="l05707"></a><span class="lineno"> 5707</span> ths-><a class="code" href="structnfft__plan.html#a9ebd66f2964cca6a02fc50d640df3557" title="Pointer to the own transform.">mv_trafo</a> = (void (*) (<span class="keywordtype">void</span>* ))<a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>;</div>
+<div class="line"><a name="l05708"></a><span class="lineno"> 5708</span> ths-><a class="code" href="structnfft__plan.html#abbe724645c96ef34c3e98d821f6648a3" title="Pointer to the own adjoint.">mv_adjoint</a> = (void (*) (<span class="keywordtype">void</span>* ))nfft_adjoint;</div>
+<div class="line"><a name="l05709"></a><span class="lineno"> 5709</span> }</div>
+<div class="line"><a name="l05710"></a><span class="lineno"> 5710</span> </div>
+<div class="line"><a name="l05711"></a><span class="lineno"> 5711</span> <span class="keywordtype">void</span> nfft_init(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l05712"></a><span class="lineno"> 5712</span> {</div>
+<div class="line"><a name="l05713"></a><span class="lineno"> 5713</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l05715"></a><span class="lineno"> 5715</span> ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a> = d;</div>
+<div class="line"><a name="l05716"></a><span class="lineno"> 5716</span> </div>
+<div class="line"><a name="l05717"></a><span class="lineno"> 5717</span> ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>=(<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l05718"></a><span class="lineno"> 5718</span> </div>
+<div class="line"><a name="l05719"></a><span class="lineno"> 5719</span> <span class="keywordflow">for</span> (t = 0;t < d; t++)</div>
+<div class="line"><a name="l05720"></a><span class="lineno"> 5720</span> ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t] = N[t];</div>
+<div class="line"><a name="l05721"></a><span class="lineno"> 5721</span> </div>
+<div class="line"><a name="l05722"></a><span class="lineno"> 5722</span> ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a> = M_total;</div>
+<div class="line"><a name="l05723"></a><span class="lineno"> 5723</span> </div>
+<div class="line"><a name="l05724"></a><span class="lineno"> 5724</span> ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l05725"></a><span class="lineno"> 5725</span> <span class="keywordflow">for</span> (t = 0;t < d; t++)</div>
+<div class="line"><a name="l05726"></a><span class="lineno"> 5726</span> ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t] = 2*X(next_power_of_2)(ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]);</div>
+<div class="line"><a name="l05727"></a><span class="lineno"> 5727</span> </div>
+<div class="line"><a name="l05728"></a><span class="lineno"> 5728</span> ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a> = WINDOW_HELP_ESTIMATE_m;</div>
+<div class="line"><a name="l05729"></a><span class="lineno"> 5729</span> </div>
+<div class="line"><a name="l05730"></a><span class="lineno"> 5730</span> <span class="keywordflow">if</span> (d > 1)</div>
+<div class="line"><a name="l05731"></a><span class="lineno"> 5731</span> {</div>
+<div class="line"><a name="l05732"></a><span class="lineno"> 5732</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l05733"></a><span class="lineno"> 5733</span> <span class="preprocessor"></span> ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |</div>
+<div class="line"><a name="l05734"></a><span class="lineno"> 5734</span> FFTW_INIT | FFT_OUT_OF_PLACE | NFFT_SORT_NODES |</div>
+<div class="line"><a name="l05735"></a><span class="lineno"> 5735</span> NFFT_OMP_BLOCKWISE_ADJOINT;</div>
+<div class="line"><a name="l05736"></a><span class="lineno"> 5736</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l05737"></a><span class="lineno"> 5737</span> <span class="preprocessor"></span> ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |</div>
+<div class="line"><a name="l05738"></a><span class="lineno"> 5738</span> FFTW_INIT | FFT_OUT_OF_PLACE | NFFT_SORT_NODES;</div>
+<div class="line"><a name="l05739"></a><span class="lineno"> 5739</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l05740"></a><span class="lineno"> 5740</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l05741"></a><span class="lineno"> 5741</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l05742"></a><span class="lineno"> 5742</span> ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |</div>
+<div class="line"><a name="l05743"></a><span class="lineno"> 5743</span> FFTW_INIT | FFT_OUT_OF_PLACE;</div>
+<div class="line"><a name="l05744"></a><span class="lineno"> 5744</span> </div>
+<div class="line"><a name="l05745"></a><span class="lineno"> 5745</span> ths-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>= FFTW_ESTIMATE| FFTW_DESTROY_INPUT;</div>
+<div class="line"><a name="l05746"></a><span class="lineno"> 5746</span> </div>
+<div class="line"><a name="l05747"></a><span class="lineno"> 5747</span> nfft_init_help(ths);</div>
+<div class="line"><a name="l05748"></a><span class="lineno"> 5748</span> }</div>
+<div class="line"><a name="l05749"></a><span class="lineno"> 5749</span> </div>
+<div class="line"><a name="l05750"></a><span class="lineno"> 5750</span> <span class="keywordtype">void</span> nfft_init_guru(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M_total, <span class="keywordtype">int</span> *n,</div>
+<div class="line"><a name="l05751"></a><span class="lineno"> 5751</span> <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> nfft_flags, <span class="keywordtype">unsigned</span> fftw_flags)</div>
+<div class="line"><a name="l05752"></a><span class="lineno"> 5752</span> {</div>
+<div class="line"><a name="l05753"></a><span class="lineno"> 5753</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l05755"></a><span class="lineno"> 5755</span> ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a> =d;</div>
+<div class="line"><a name="l05756"></a><span class="lineno"> 5756</span> ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>= (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>*<span class="keyword">sizeof</span>(<span class [...]
+<div class="line"><a name="l05757"></a><span class="lineno"> 5757</span> <span class="keywordflow">for</span>(t=0; t<d; t++)</div>
+<div class="line"><a name="l05758"></a><span class="lineno"> 5758</span> ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[t]= N[t];</div>
+<div class="line"><a name="l05759"></a><span class="lineno"> 5759</span> ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>= M_total;</div>
+<div class="line"><a name="l05760"></a><span class="lineno"> 5760</span> ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>= (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank"> [...]
+<div class="line"><a name="l05761"></a><span class="lineno"> 5761</span> <span class="keywordflow">for</span>(t=0; t<d; t++)</div>
+<div class="line"><a name="l05762"></a><span class="lineno"> 5762</span> ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[t]= n[t];</div>
+<div class="line"><a name="l05763"></a><span class="lineno"> 5763</span> ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>= m;</div>
+<div class="line"><a name="l05764"></a><span class="lineno"> 5764</span> ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a>= nfft_flags;</div>
+<div class="line"><a name="l05765"></a><span class="lineno"> 5765</span> ths-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>= fftw_flags;</div>
+<div class="line"><a name="l05766"></a><span class="lineno"> 5766</span> </div>
+<div class="line"><a name="l05767"></a><span class="lineno"> 5767</span> nfft_init_help(ths);</div>
+<div class="line"><a name="l05768"></a><span class="lineno"> 5768</span> }</div>
+<div class="line"><a name="l05769"></a><span class="lineno"> 5769</span> </div>
+<div class="line"><a name="l05770"></a><span class="lineno"> 5770</span> <span class="keywordtype">void</span> nfft_init_1d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths, <span class="keywordtype">int</span> N1, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l05771"></a><span class="lineno"> 5771</span> {</div>
+<div class="line"><a name="l05772"></a><span class="lineno"> 5772</span> <span class="keywordtype">int</span> N[1];</div>
+<div class="line"><a name="l05773"></a><span class="lineno"> 5773</span> </div>
+<div class="line"><a name="l05774"></a><span class="lineno"> 5774</span> N[0]=N1;</div>
+<div class="line"><a name="l05775"></a><span class="lineno"> 5775</span> </div>
+<div class="line"><a name="l05776"></a><span class="lineno"> 5776</span> nfft_init(ths, 1, N, M_total);</div>
+<div class="line"><a name="l05777"></a><span class="lineno"> 5777</span> }</div>
+<div class="line"><a name="l05778"></a><span class="lineno"> 5778</span> </div>
+<div class="line"><a name="l05779"></a><span class="lineno"> 5779</span> <span class="keywordtype">void</span> nfft_init_2d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths, <span class="keywordtype">int</span> N1, <span class="keywordtype">int</span> N2, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l05780"></a><span class="lineno"> 5780</span> {</div>
+<div class="line"><a name="l05781"></a><span class="lineno"> 5781</span> <span class="keywordtype">int</span> N[2];</div>
+<div class="line"><a name="l05782"></a><span class="lineno"> 5782</span> </div>
+<div class="line"><a name="l05783"></a><span class="lineno"> 5783</span> N[0]=N1;</div>
+<div class="line"><a name="l05784"></a><span class="lineno"> 5784</span> N[1]=N2;</div>
+<div class="line"><a name="l05785"></a><span class="lineno"> 5785</span> nfft_init(ths,2,N,M_total);</div>
+<div class="line"><a name="l05786"></a><span class="lineno"> 5786</span> }</div>
+<div class="line"><a name="l05787"></a><span class="lineno"> 5787</span> </div>
+<div class="line"><a name="l05788"></a><span class="lineno"> 5788</span> <span class="keywordtype">void</span> nfft_init_3d(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths, <span class="keywordtype">int</span> N1, <span class="keywordtype">int</span> N2, <span class="keywordtype">int</span> N3, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l05789"></a><span class="lineno"> 5789</span> {</div>
+<div class="line"><a name="l05790"></a><span class="lineno"> 5790</span> <span class="keywordtype">int</span> N[3];</div>
+<div class="line"><a name="l05791"></a><span class="lineno"> 5791</span> </div>
+<div class="line"><a name="l05792"></a><span class="lineno"> 5792</span> N[0]=N1;</div>
+<div class="line"><a name="l05793"></a><span class="lineno"> 5793</span> N[1]=N2;</div>
+<div class="line"><a name="l05794"></a><span class="lineno"> 5794</span> N[2]=N3;</div>
+<div class="line"><a name="l05795"></a><span class="lineno"> 5795</span> nfft_init(ths,3,N,M_total);</div>
+<div class="line"><a name="l05796"></a><span class="lineno"> 5796</span> }</div>
+<div class="line"><a name="l05797"></a><span class="lineno"> 5797</span> </div>
+<div class="line"><a name="l05798"></a><span class="lineno"> 5798</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* nfft_check(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05799"></a><span class="lineno"> 5799</span> {</div>
+<div class="line"><a name="l05800"></a><span class="lineno"> 5800</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l05801"></a><span class="lineno"> 5801</span> </div>
+<div class="line"><a name="l05802"></a><span class="lineno"> 5802</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>;j++)</div>
+<div class="line"><a name="l05803"></a><span class="lineno"> 5803</span> <span class="keywordflow">if</span>((ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j]<-K(0.5)) || (ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j]>= K(0.5)))</div>
+<div class="line"><a name="l05804"></a><span class="lineno"> 5804</span> <span class="keywordflow">return</span> <span class="stringliteral">"ths->x out of range [-0.5,0.5)"</span>;</div>
+<div class="line"><a name="l05805"></a><span class="lineno"> 5805</span> </div>
+<div class="line"><a name="l05806"></a><span class="lineno"> 5806</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>;j++)</div>
+<div class="line"><a name="l05807"></a><span class="lineno"> 5807</span> {</div>
+<div class="line"><a name="l05808"></a><span class="lineno"> 5808</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a09340f6465c23f3d94636f4f0da30f8a" title="oversampling-factor">sigma</a>[j]<=1)</div>
+<div class="line"><a name="l05809"></a><span class="lineno"> 5809</span> <span class="keywordflow">return</span> <span class="stringliteral">"nfft_check: oversampling factor too small"</span>;</div>
+<div class="line"><a name="l05810"></a><span class="lineno"> 5810</span> </div>
+<div class="line"><a name="l05811"></a><span class="lineno"> 5811</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[j]<=ths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>)</div>
+<div class="line"><a name="l05812"></a><span class="lineno"> 5812</span> <span class="keywordflow">return</span> <span class="stringliteral">"Polynomial degree N is smaller than cut-off m"</span>;</div>
+<div class="line"><a name="l05813"></a><span class="lineno"> 5813</span> </div>
+<div class="line"><a name="l05814"></a><span class="lineno"> 5814</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[j]%2==1)</div>
+<div class="line"><a name="l05815"></a><span class="lineno"> 5815</span> <span class="keywordflow">return</span> <span class="stringliteral">"polynomial degree N has to be even"</span>;</div>
+<div class="line"><a name="l05816"></a><span class="lineno"> 5816</span> }</div>
+<div class="line"><a name="l05817"></a><span class="lineno"> 5817</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l05818"></a><span class="lineno"> 5818</span> }</div>
+<div class="line"><a name="l05819"></a><span class="lineno"> 5819</span> </div>
+<div class="line"><a name="l05820"></a><span class="lineno"> 5820</span> <span class="keywordtype">void</span> nfft_finalize(<a class="code" href="structnfft__plan.html">nfft_plan</a> *ths)</div>
+<div class="line"><a name="l05821"></a><span class="lineno"> 5821</span> {</div>
+<div class="line"><a name="l05822"></a><span class="lineno"> 5822</span> <span class="keywordtype">int</span> t; <span class="comment">/* index over dimensions */</span></div>
+<div class="line"><a name="l05823"></a><span class="lineno"> 5823</span> </div>
+<div class="line"><a name="l05824"></a><span class="lineno"> 5824</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & NFFT_SORT_NODES)</div>
+<div class="line"><a name="l05825"></a><span class="lineno"> 5825</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735" title="Index array for nodes x used when flag NFFT_SORT_NODES is set.">index_x</a>);</div>
+<div class="line"><a name="l05826"></a><span class="lineno"> 5826</span> </div>
+<div class="line"><a name="l05827"></a><span class="lineno"> 5827</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FFTW_INIT)</div>
+<div class="line"><a name="l05828"></a><span class="lineno"> 5828</span> {</div>
+<div class="line"><a name="l05829"></a><span class="lineno"> 5829</span> <span class="preprocessor">#pragma omp critical (nfft_omp_critical_fftw_plan)</span></div>
+<div class="line"><a name="l05830"></a><span class="lineno"> 5830</span> <span class="preprocessor"></span>{</div>
+<div class="line"><a name="l05831"></a><span class="lineno"> 5831</span> fftw_destroy_plan(ths->my_fftw_plan2);</div>
+<div class="line"><a name="l05832"></a><span class="lineno"> 5832</span> fftw_destroy_plan(ths->my_fftw_plan1);</div>
+<div class="line"><a name="l05833"></a><span class="lineno"> 5833</span> }</div>
+<div class="line"><a name="l05834"></a><span class="lineno"> 5834</span> </div>
+<div class="line"><a name="l05835"></a><span class="lineno"> 5835</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & FFT_OUT_OF_PLACE)</div>
+<div class="line"><a name="l05836"></a><span class="lineno"> 5836</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>);</div>
+<div class="line"><a name="l05837"></a><span class="lineno"> 5837</span> </div>
+<div class="line"><a name="l05838"></a><span class="lineno"> 5838</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>);</div>
+<div class="line"><a name="l05839"></a><span class="lineno"> 5839</span> }</div>
+<div class="line"><a name="l05840"></a><span class="lineno"> 5840</span> </div>
+<div class="line"><a name="l05841"></a><span class="lineno"> 5841</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l05842"></a><span class="lineno"> 5842</span> {</div>
+<div class="line"><a name="l05843"></a><span class="lineno"> 5843</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_g</a>);</div>
+<div class="line"><a name="l05844"></a><span class="lineno"> 5844</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a2ed144cf7d6043a93c07b6f6ba7bbe2a" title="Indices in source/target vector for PRE_FULL_PSI.">psi_index_f</a>);</div>
+<div class="line"><a name="l05845"></a><span class="lineno"> 5845</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>);</div>
+<div class="line"><a name="l05846"></a><span class="lineno"> 5846</span> }</div>
+<div class="line"><a name="l05847"></a><span class="lineno"> 5847</span> </div>
+<div class="line"><a name="l05848"></a><span class="lineno"> 5848</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l05849"></a><span class="lineno"> 5849</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>);</div>
+<div class="line"><a name="l05850"></a><span class="lineno"> 5850</span> </div>
+<div class="line"><a name="l05851"></a><span class="lineno"> 5851</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FG_PSI)</div>
+<div class="line"><a name="l05852"></a><span class="lineno"> 5852</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>);</div>
+<div class="line"><a name="l05853"></a><span class="lineno"> 5853</span> </div>
+<div class="line"><a name="l05854"></a><span class="lineno"> 5854</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l05855"></a><span class="lineno"> 5855</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>);</div>
+<div class="line"><a name="l05856"></a><span class="lineno"> 5856</span> </div>
+<div class="line"><a name="l05857"></a><span class="lineno"> 5857</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l05858"></a><span class="lineno"> 5858</span> {</div>
+<div class="line"><a name="l05859"></a><span class="lineno"> 5859</span> <span class="keywordflow">for</span>(t=0; t<ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l05860"></a><span class="lineno"> 5860</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is doubles.">c_phi_inv</a>[t]);</div>
+<div class="line"><a name="l05861"></a><span class="lineno"> 5861</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce" title="Precomputed data for the diagonal matrix , size \ is doubles.">c_phi_inv</a>);</div>
+<div class="line"><a name="l05862"></a><span class="lineno"> 5862</span> }</div>
+<div class="line"><a name="l05863"></a><span class="lineno"> 5863</span> </div>
+<div class="line"><a name="l05864"></a><span class="lineno"> 5864</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & MALLOC_F)</div>
+<div class="line"><a name="l05865"></a><span class="lineno"> 5865</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>);</div>
+<div class="line"><a name="l05866"></a><span class="lineno"> 5866</span> </div>
+<div class="line"><a name="l05867"></a><span class="lineno"> 5867</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & MALLOC_F_HAT)</div>
+<div class="line"><a name="l05868"></a><span class="lineno"> 5868</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l05869"></a><span class="lineno"> 5869</span> </div>
+<div class="line"><a name="l05870"></a><span class="lineno"> 5870</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & MALLOC_X)</div>
+<div class="line"><a name="l05871"></a><span class="lineno"> 5871</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>);</div>
+<div class="line"><a name="l05872"></a><span class="lineno"> 5872</span> </div>
+<div class="line"><a name="l05873"></a><span class="lineno"> 5873</span> WINDOW_HELP_FINALIZE;</div>
+<div class="line"><a name="l05874"></a><span class="lineno"> 5874</span> </div>
+<div class="line"><a name="l05875"></a><span class="lineno"> 5875</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a09340f6465c23f3d94636f4f0da30f8a" title="oversampling-factor">sigma</a>);</div>
+<div class="line"><a name="l05876"></a><span class="lineno"> 5876</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>);</div>
+<div class="line"><a name="l05877"></a><span class="lineno"> 5877</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>);</div>
+<div class="line"><a name="l05878"></a><span class="lineno"> 5878</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfft__benchomp_8c_source.html b/doc/api/html/nfft__benchomp_8c_source.html
new file mode 100644
index 0000000..7f6c860
--- /dev/null
+++ b/doc/api/html/nfft__benchomp_8c_source.html
@@ -0,0 +1,640 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfft_benchomp.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfft_benchomp.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <unistd.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <<a class="code" href="nfft3_8h.html">nfft3.h</a>></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#define NREPEAT 5</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">static</span> FILE* file_out_tex = NULL;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keywordtype">int</span> get_nthreads_array(<span class="keywordtype">int</span> **arr)</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordtype">int</span> max_threads = nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">int</span> alloc_num = 2;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">int</span> ret_number = 0;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">int</span> max_threads_pw2 = (max_threads / 2) * 2 == max_threads ? 1 : 0;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordflow">if</span> (max_threads <= 5)</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> *arr = (<span class="keywordtype">int</span>*) malloc(max_threads*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">for</span> (k = 0; k < max_threads; k++)</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> *(*arr + k) = k+1;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">return</span> max_threads;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordflow">for</span> (k = 1; k <= max_threads; k*=2, alloc_num++);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> *arr = (<span class="keywordtype">int</span>*) malloc(alloc_num*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">for</span> (k = 1; k <= max_threads; k*=2)</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">if</span> (k != max_threads && 2*k > max_threads && max_threads_pw2)</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> {</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> *(*arr + ret_number) = max_threads/2;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> ret_number++;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> *(*arr + ret_number) = k;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> ret_number++;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">if</span> (k != max_threads && 2*k > max_threads)</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> {</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> *(*arr + ret_number) = max_threads;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> ret_number++;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> }</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> }</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">return</span> ret_number;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> } </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> check_result_value(<span class="keyword">const</span> <span class="keywordtype">int</span> val, <span class="keyword">const</span> <span class="keywordtype">int</span> ok, <span class="keyword">const</span> <span class="keywordtype">char</span> *msg)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">if</span> (val != ok)</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> fprintf(stderr, <span class="stringliteral">"ERROR %s: %d not %d\n"</span>, msg, val, ok);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> exit(1);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">void</span> run_test_create(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> trafo_adjoint, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">double</span> sigma)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> {</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">char</span> cmd[1025];</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">if</span> (d==1)</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> snprintf(cmd, 1024, <span class="stringliteral">"./nfft_benchomp_createdataset %d %d %d %d %lg > nfft_benchomp_test.data"</span>, d, trafo_adjoint, N, M, sigma);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (d==2) </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> snprintf(cmd, 1024, <span class="stringliteral">"./nfft_benchomp_createdataset %d %d %d %d %d %lg > nfft_benchomp_test.data"</span>, d, trafo_adjoint, N, N, M, sigma);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (d==3) </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> snprintf(cmd, 1024, <span class="stringliteral">"./nfft_benchomp_createdataset %d %d %d %d %d %d %lg > nfft_benchomp_test.data"</span>, d, trafo_adjoint, N, N, N, M, sigma);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (d==4) </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> snprintf(cmd, 1024, <span class="stringliteral">"./nfft_benchomp_createdataset %d %d %d %d %d %d %d %lg > nfft_benchomp_test.data"</span>, d, trafo_adjoint, N, N, N, N, M, sigma);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> exit(1);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> fprintf(stderr, <span class="stringliteral">"%s\n"</span>, cmd);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> check_result_value(system(cmd), 0, <span class="stringliteral">"createdataset"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">void</span> run_test_init_output()</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> FILE *f = fopen(<span class="stringliteral">"nfft_benchomp_test.result"</span>, <span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">if</span> (f!= NULL)</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> fclose(f);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> }</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"><a class="code" href="structs__param.html"> 110</a></span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> {</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">int</span> d;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">int</span> trafo_adjoint;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">int</span> N;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">int</span> M;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">double</span> sigma;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">int</span> flags;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> } <a class="code" href="structs__param.html">s_param</a>;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"><a class="code" href="structs__resval.html"> 121</a></span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> {</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordtype">double</span> avg;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordtype">double</span> min;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordtype">double</span> max;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> } <a class="code" href="structs__resval.html">s_resval</a>;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"><a class="code" href="structs__result.html"> 128</a></span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> {</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordtype">int</span> nthreads;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <a class="code" href="structs__resval.html">s_resval</a> resval[6];</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> } <a class="code" href="structs__result.html">s_result</a>;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"><a class="code" href="structs__testset.html"> 134</a></span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> {</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <a class="code" href="structs__param.html">s_param</a> param;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <a class="code" href="structs__result.html">s_result</a> *results;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordtype">int</span> nresults;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> } <a class="code" href="structs__testset.html">s_testset</a>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordtype">void</span> run_test(<a class="code" href="structs__resval.html">s_resval</a> *res, <span class="keywordtype">int</span> nrepeat, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> nthreads)</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> {</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordtype">char</span> cmd[1025];</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordtype">int</span> r,t;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">for</span> (t = 0; t < 6; t++)</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> {</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> res[t].avg = 0.0; res[t].min = 1.0/0.0; res[t].max = 0.0;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> }</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">if</span> (nthreads < 2)</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> snprintf(cmd, 1024, <span class="stringliteral">"./nfft_benchomp_detail_single %d %d < nfft_benchomp_test.data > nfft_benchomp_test.out"</span>, m, flags);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> snprintf(cmd, 1024, <span class="stringliteral">"./nfft_benchomp_detail_threads %d %d %d < nfft_benchomp_test.data > nfft_benchomp_test.out"</span>, m, flags, nthreads);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> fprintf(stderr, <span class="stringliteral">"%s\n"</span>, cmd);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> check_result_value(system(cmd), 0, cmd);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">for</span> (r = 0; r < nrepeat; r++)</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> {</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordtype">int</span> retval;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordtype">double</span> v[6];</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> FILE *f;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> check_result_value(system(cmd), 0, cmd);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> f = fopen(<span class="stringliteral">"nfft_benchomp_test.out"</span>, <span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> retval = fscanf(f, <span class="stringliteral">"%lg %lg %lg %lg %lg %lg"</span>, v, v+1, v+2, v+3, v+4, v+5);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> check_result_value(retval, 6, <span class="stringliteral">"read nfft_benchomp_test.out"</span>);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> fclose(f);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">for</span> (t = 0; t < 6; t++)</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> {</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> res[t].avg += v[t];</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">if</span> (res[t].min > v[t])</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> res[t].min = v[t];</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">if</span> (res[t].max < v[t])</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> res[t].max = v[t];</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">for</span> (t = 0; t < 6; t++)</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> res[t].avg /= nrepeat;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> fprintf(stderr, <span class="stringliteral">"%d %d: "</span>, nthreads, nrepeat);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">for</span> (t = 0; t < 6; t++)</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> fprintf(stderr, <span class="stringliteral">"%.3e %.3e %.3e | "</span>, res[t].avg, res[t].min, res[t].max);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> fprintf(stderr, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_psi_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> {</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">if</span> (flags & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">return</span> <span class="stringliteral">"unknownPSI"</span>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">return</span> <span class="stringliteral">"nopsi"</span>;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> }</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_sort_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> {</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">if</span> (flags & NFFT_SORT_NODES)</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">return</span> <span class="stringliteral">"sorted"</span>;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">return</span> <span class="stringliteral">"unsorted"</span>;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> }</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_adjoint_omp_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> {</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">if</span> (flags & NFFT_OMP_BLOCKWISE_ADJOINT)</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">return</span> <span class="stringliteral">"blockwise"</span>;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> }</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="preprocessor">#define MASK_D (1U<<0)</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_TA (1U<<1)</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_N (1U<<2)</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_SIGMA (1U<<3)</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_M (1U<<4)</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_WINM (1U<<5)</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FLAGS_PSI (1U<<6)</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FLAGS_SORT (1U<<7)</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FLAGS_BW (1U<<8)</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> determine_different_parameters(<a class="code" href="structs__testset.html">s_testset</a> *testsets, <span class="keywordtype">int</span> ntestsets)</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> {</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mask = 0;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">if</span> (ntestsets < 2)</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">for</span> (t = 1; t < ntestsets; t++)</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> {</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">if</span> (testsets[t-1].param.d != testsets[t].param.d)</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> mask |= MASK_D;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">if</span> (testsets[t-1].param.trafo_adjoint != testsets[t].param.trafo_adjoint)</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> mask |= MASK_TA;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">if</span> (testsets[t-1].param.N != testsets[t].param.N)</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> mask |= MASK_N;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">if</span> (testsets[t-1].param.sigma != testsets[t].param.sigma)</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> mask |= MASK_SIGMA;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">if</span> (testsets[t-1].param.M != testsets[t].param.M)</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> mask |= MASK_M;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">if</span> (testsets[t-1].param.m != testsets[t].param.m)</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> mask |= MASK_WINM;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">if</span> ((testsets[t-1].param.flags & PRE_ONE_PSI) != (testsets[t].param.flags & PRE_ONE_PSI))</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> mask |= MASK_FLAGS_PSI;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">if</span> ((testsets[t-1].param.flags & NFFT_SORT_NODES) != (testsets[t].param.flags & NFFT_SORT_NODES))</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> mask |= MASK_FLAGS_SORT;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">if</span> ((testsets[t-1].param.flags & NFFT_OMP_BLOCKWISE_ADJOINT) != (testsets[t].param.flags & NFFT_OMP_BLOCKWISE_ADJOINT))</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> mask |= MASK_FLAGS_BW;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> }</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">return</span> mask;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> }</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keywordtype">void</span> get_plot_title(<span class="keywordtype">char</span> *outstr, <span class="keywordtype">int</span> maxlen, <span class="keywordtype">char</span> *hostname, <a class="code" href="structs__param.html">s_param</a> param, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> diff_mask)</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> {</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mask = ~diff_mask;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordtype">int</span> offset = 0;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordtype">int</span> len;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> len = snprintf(outstr, maxlen, <span class="stringliteral">"%s"</span>, hostname);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> offset += len;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">if</span> (mask & MASK_D)</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> {</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %dd"</span>, param.d);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> offset += len;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">if</span> (mask & MASK_TA)</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> {</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" $\\mathrm{NFFT}%s$"</span>, param.trafo_adjoint==0?<span class="stringliteral">""</span>:<span class="stringliteral">"^\\top"</span>);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> offset += len;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> }</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">if</span> (mask & MASK_N)</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> {</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" N=%d"</span>, param.N);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> offset += len;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> }</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">if</span> (mask & MASK_SIGMA)</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> {</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" N=%g"</span>, param.sigma);</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> offset += len;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> }</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">if</span> (mask & MASK_M)</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> {</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" M=%d"</span>, param.M);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> offset += len;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> }</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">if</span> (mask & MASK_WINM)</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> {</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" m=%d"</span>, param.m);</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> offset += len;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> }</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">if</span> (mask & MASK_FLAGS_PSI)</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> {</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %s"</span>, get_psi_string(param.flags));</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> offset += len;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> }</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">if</span> (mask & MASK_FLAGS_SORT)</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> {</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %s"</span>, get_sort_string(param.flags));</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> offset += len;</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> }</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">if</span> ((mask & MASK_FLAGS_BW) && strlen(get_adjoint_omp_string(param.flags)) > 0)</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> {</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %s"</span>, get_adjoint_omp_string(param.flags));</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> offset += len;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> }</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> }</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordtype">void</span> print_output_speedup_total_tref(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> *testsets, <span class="keywordtype">int</span> ntestsets, <span class="keywordtype">double</span> tref)</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> {</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordtype">int</span> i, t;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="keywordtype">char</span> hostname[1025];</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordtype">char</span> plottitle[1025];</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> diff_mask = determine_different_parameters(testsets, ntestsets);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordflow">if</span> (gethostname(hostname, 1024) != 0)</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> strncpy(hostname, <span class="stringliteral">"unnamed"</span>, 1024);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> get_plot_title(plottitle, 1024, hostname, testsets[0].param, diff_mask | MASK_FLAGS_SORT);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> fprintf(out, <span class="stringliteral">"\\begin{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> fprintf(out, <span class="stringliteral">"\\begin{axis}["</span>);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> fprintf(out, <span class="stringliteral">"width=0.9\\textwidth, height=0.6\\textwidth, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Speedup, xtick=data, legend style={ legend pos = north west, legend columns=1}, ymajorgrids=true, yminorgrids=true, minor y tick num=4, "</span>);</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> fprintf(out, <span class="stringliteral">" title={%s}"</span>, plottitle);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> fprintf(out, <span class="stringliteral">" ]\n"</span>);</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordflow">for</span> (t = 0; t < ntestsets; t++)</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> {</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <a class="code" href="structs__testset.html">s_testset</a> testset = testsets[t];</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> fprintf(stderr, <span class="stringliteral">"%s %dd $\\mathrm{NFFT}%s$ N=%d $\\sigma$=%g M=%d m=%d %s %s %s}"</span>, hostname, testset.param.d, testset.param.trafo_adjoint==0?<span class="stringliteral">""</span>:<span class="stringliteral">"^\\top"</span>, testset.param.N, testset.param.sigma, testset.param.M, testset.param.m, get_psi_string(testset.param.flags), get_sort_str [...]
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> fprintf(stderr, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">for</span> (i = 0; i < testset.nresults; i++)</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, tref/testset.results[i].resval[5].avg);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">for</span> (i = 0; i < testset.nresults; i++)</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> {</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> fprintf(stderr, <span class="stringliteral">"%d:%.3f "</span>, testset.results[i].nthreads, tref/testset.results[i].resval[5].avg);</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> fprintf(stderr, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> }</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> fprintf(out, <span class="stringliteral">"\\legend{{"</span>);</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="keywordflow">for</span> (t = 0; t < ntestsets; t++)</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> {</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordtype">char</span> title[256];</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">if</span> (t > 0)</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> fprintf(out, <span class="stringliteral">"},{"</span>);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> get_plot_title(title, 255, <span class="stringliteral">""</span>, testsets[t].param, ~(diff_mask | MASK_FLAGS_SORT));</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> fprintf(out, <span class="stringliteral">"%s"</span>, title);</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> }</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> fprintf(out, <span class="stringliteral">"}}\n"</span>);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> fprintf(out, <span class="stringliteral">"\\end{axis}\n"</span>);</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> fprintf(out, <span class="stringliteral">"\\end{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> fprintf(out, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> fflush(out);</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> }</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="keywordtype">void</span> print_output_speedup_total(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> *testsets, <span class="keywordtype">int</span> ntestsets)</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> {</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="keywordtype">double</span> tref = 1.0/0.0;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordtype">int</span> t, k;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordflow">for</span> (t = 0; t < ntestsets; t++)</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">for</span> (k = 0; k < testsets[t].nresults; k++)</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordflow">if</span> (testsets[t].results[k].nthreads == 1 && testsets[t].results[k].resval[5].avg < tref)</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> tref = testsets[t].results[k].resval[5].avg;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> print_output_speedup_total_tref(out, testsets, ntestsets, tref);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> }</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="keywordtype">void</span> print_output_histo_DFBRT(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> testset)</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> {</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keywordtype">int</span> i, size = testset.nresults;</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordtype">char</span> hostname[1025];</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">if</span> (gethostname(hostname, 1024) != 0)</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> strncpy(hostname, <span class="stringliteral">"unnamed"</span>, 1024);</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> fprintf(out, <span class="stringliteral">"\\begin{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> fprintf(out, <span class="stringliteral">"\\begin{axis}["</span>);</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> fprintf(out, <span class="stringliteral">"width=0.9\\textwidth, height=0.6\\textwidth, "</span>);</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> fprintf(out, <span class="stringliteral">"symbolic x coords={"</span>);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="keywordflow">if</span> (i > 0)</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> fprintf(out, <span class="stringliteral">",%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> fprintf(out, <span class="stringliteral">"%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> fprintf(stderr, <span class="stringliteral">"FLAGS: %d\n"</span>, testset.param.flags);</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> fprintf(out, <span class="stringliteral">"}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, "</span>);</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> fprintf(out, <span class="stringliteral">" title={%s %dd $\\mathrm{NFFT}%s$ N=%d $\\sigma$=%g M=%d m=%d %s %s %s}"</span>, hostname, testset.param.d, testset.param.trafo_adjoint==0?<span class="stringliteral">""</span>:<span class="stringliteral">"^\\top"</span>, testset.param.N, testset.param.sigma, testset.param.M, testset.param.m, get_psi_string(testset.param.flags), get_sort_ [...]
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> fprintf(out, <span class="stringliteral">" ]\n"</span>);</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[1].avg);</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[2].avg);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[3].avg);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[0].avg + testset.results[i].resval[4].avg);</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[5].avg);</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> fprintf(out, <span class="stringliteral">"\\legend{D,F,B,rest,total}\n"</span>);</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> fprintf(out, <span class="stringliteral">"\\end{axis}\n"</span>);</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> fprintf(out, <span class="stringliteral">"\\end{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> fprintf(out, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> fflush(out);</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> }</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keywordtype">void</span> run_testset(<a class="code" href="structs__testset.html">s_testset</a> *testset, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> trafo_adjoint, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">double</span> sigma, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> [...]
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> {</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> testset->param.d = d;</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> testset->param.trafo_adjoint = trafo_adjoint;</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> testset->param.N = N;</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> testset->param.M = M;</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> testset->param.sigma = sigma;</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> testset->param.m = m;</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> testset->param.flags = flags;</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> testset->results = (<a class="code" href="structs__result.html">s_result</a>*) malloc(n_threads_array_size*<span class="keyword">sizeof</span>(<a class="code" href="structs__result.html">s_result</a>));</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> testset->nresults = n_threads_array_size;</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> run_test_create(testset->param.d, testset->param.trafo_adjoint, testset->param.N, testset->param.M, testset->param.sigma);</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keywordflow">for</span> (i = 0; i < n_threads_array_size; i++)</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> {</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> testset->results[i].nthreads = nthreads_array[i];</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> run_test(testset->results[i].resval, NREPEAT, testset->param.m, testset->param.flags, testset->results[i].nthreads = nthreads_array[i]);</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> }</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> }</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="keywordtype">void</span> test1(<span class="keywordtype">int</span> *nthreads_array, <span class="keywordtype">int</span> n_threads_array_size, <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> {</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <a class="code" href="structs__testset.html">s_testset</a> testsets[15];</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> run_testset(&testsets[0], 1, 0, 2097152, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor"></span> print_output_histo_DFBRT(file_out_tex, testsets[0]);</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> run_testset(&testsets[1], 1, 0, 2097152, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="preprocessor"></span> print_output_histo_DFBRT(file_out_tex, testsets[1]);</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> print_output_speedup_total(file_out_tex, testsets, 2);</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> run_testset(&testsets[2], 1, 1, 2097152, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="preprocessor"></span> print_output_histo_DFBRT(file_out_tex, testsets[2]);</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> run_testset(&testsets[3], 1, 1, 2097152, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="preprocessor"></span> print_output_histo_DFBRT(file_out_tex, testsets[3]);</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> run_testset(&testsets[4], 1, 1, 2097152, 2097152, 2.0, m, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="preprocessor"></span> print_output_histo_DFBRT(file_out_tex, testsets[4]);</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> print_output_speedup_total(file_out_tex, testsets+2, 3);</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> run_testset(&testsets[5], 2, 0, 1024, 1048576, 2.0, m, 0, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="preprocessor"></span> print_output_histo_DFBRT(file_out_tex, testsets[5]);</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> run_testset(&testsets[6], 2, 0, 1024, 1048576, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="preprocessor"></span> print_output_histo_DFBRT(file_out_tex, testsets[6]);</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> print_output_speedup_total(file_out_tex, testsets+5, 2);</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> run_testset(&testsets[7], 2, 1, 1024, 1048576, 2.0, m, 0, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="preprocessor"></span> print_output_histo_DFBRT(file_out_tex, testsets[7]);</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> run_testset(&testsets[8], 2, 1, 1024, 1048576, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="preprocessor"></span> print_output_histo_DFBRT(file_out_tex, testsets[8]);</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> run_testset(&testsets[9], 2, 1, 1024, 1048576, 2.0, m, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="preprocessor"></span> print_output_histo_DFBRT(file_out_tex, testsets[9]);</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> print_output_speedup_total(file_out_tex, testsets+7, 3);</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> </div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> run_testset(&testsets[10], 3, 0, 128, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="preprocessor"></span> print_output_histo_DFBRT(file_out_tex, testsets[10]);</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> run_testset(&testsets[11], 3, 0, 128, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="preprocessor"></span> print_output_histo_DFBRT(file_out_tex, testsets[11]);</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> print_output_speedup_total(file_out_tex, testsets+10, 2);</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> run_testset(&testsets[12], 3, 1, 128, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="preprocessor"></span> print_output_histo_DFBRT(file_out_tex, testsets[12]);</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> run_testset(&testsets[13], 3, 1, 128, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="preprocessor"></span> print_output_histo_DFBRT(file_out_tex, testsets[13]);</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> run_testset(&testsets[14], 3, 1, 128, 2097152, 2.0, m, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="preprocessor"></span> print_output_histo_DFBRT(file_out_tex, testsets[14]);</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> print_output_speedup_total(file_out_tex, testsets+12, 3);</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> }</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>** argv)</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> {</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="keywordtype">int</span> *nthreads_array;</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordtype">int</span> n_threads_array_size = get_nthreads_array(&nthreads_array);</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="preprocessor">#if !(defined MEASURE_TIME && defined MEASURE_TIME_FFTW)</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="preprocessor"></span> fprintf(stderr, <span class="stringliteral">"WARNING: Detailed time measurements for NFFT are not activated.\n"</span>);</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> fprintf(stderr, <span class="stringliteral">"For more detailed plots, please re-run the configure script with options\n"</span>);</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> fprintf(stderr, <span class="stringliteral">"--enable-measure-time --enable-measure-time-fftw --enable-openmp\n"</span>);</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> fprintf(stderr, <span class="stringliteral">"and run \"make clean all\"\n\n"</span>);</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="keywordflow">for</span> (k = 0; k < n_threads_array_size; k++)</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> fprintf(stderr, <span class="stringliteral">"%d "</span>, nthreads_array[k]);</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> fprintf(stderr, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> </div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> file_out_tex = fopen(<span class="stringliteral">"nfft_benchomp_results_plots.tex"</span>, <span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> test1(nthreads_array, n_threads_array_size, 2);</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> test1(nthreads_array, n_threads_array_size, 4);</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> test1(nthreads_array, n_threads_array_size, 6);</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> fclose(file_out_tex);</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfft__benchomp__createdataset_8c_source.html b/doc/api/html/nfft__benchomp__createdataset_8c_source.html
new file mode 100644
index 0000000..4f0df98
--- /dev/null
+++ b/doc/api/html/nfft__benchomp__createdataset_8c_source.html
@@ -0,0 +1,193 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfft_benchomp_createdataset.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfft_benchomp_createdataset.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">void</span> nfft_benchomp_createdataset(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> d, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> trafo_adjoint, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M, <span class="keywordtype">double</span> sigma)</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">int</span> n[d];</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">int</span> t, j;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> R *x;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> C *f, *f_hat;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">int</span> N_total = 1;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">for</span> (t = 0; t < d; t++)</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> N_total *= N[t];</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> x = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(d*M*<span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> f = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> f_hat = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(N_total*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> n[t] = sigma*nfft_next_power_of_2(N[t]);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(x,d*M);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> {</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(f_hat,N_total);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> {</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(f,M);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> }</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> printf(<span class="stringliteral">"%d %d "</span>, d, trafo_adjoint);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> printf(<span class="stringliteral">"%d "</span>, N[t]);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> printf(<span class="stringliteral">"%d "</span>, n[t]);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> printf(<span class="stringliteral">"%d\n"</span>, M);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">for</span> (j=0; j < M; j++)</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">for</span> (t=0; t < d; t++)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> printf(<span class="stringliteral">"%.16e "</span>, x[d*j+t]);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> }</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">for</span> (j=0; j < N_total; j++)</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> printf(<span class="stringliteral">"%.16e %.16e\n"</span>, creal(f_hat[j]), cimag(f_hat[j]));</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> }</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> {</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">for</span> (j=0; j < M; j++)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> printf(<span class="stringliteral">"%.16e %.16e\n"</span>, creal(f[j]), cimag(f[j]));</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> {</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">int</span> d;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordtype">int</span> *N;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordtype">int</span> M;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordtype">int</span> trafo_adjoint;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">double</span> sigma;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span> (argc < 6) {</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> fprintf(stderr, <span class="stringliteral">"usage: d tr_adj N_1 ... N_d M sigma\n"</span>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> }</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> d = atoi(argv[1]);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> fprintf(stderr, <span class="stringliteral">"d=%d"</span>, d);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span> (d < 1 || argc < 5+d) {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> fprintf(stderr, <span class="stringliteral">"usage: d tr_adj N_1 ... N_d M sigma\n"</span>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> N = malloc(d*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> trafo_adjoint = atoi(argv[2]);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">if</span> (trafo_adjoint < 0 && trafo_adjoint > 1)</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> trafo_adjoint = 1;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> fprintf(stderr, <span class="stringliteral">", tr_adj=%d, N="</span>, trafo_adjoint);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> N[t] = atoi(argv[3+t]);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> fprintf(stderr, <span class="stringliteral">"%d "</span>,N[t]);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> M = atoi(argv[3+d]);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> sigma = atof(argv[4+d]);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> fprintf(stderr, <span class="stringliteral">", M=%d, sigma=%.16g\n"</span>, M, sigma);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> nfft_benchomp_createdataset(d, trafo_adjoint, N, M, sigma);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> free(N);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfft__benchomp__detail_8c_source.html b/doc/api/html/nfft__benchomp__detail_8c_source.html
new file mode 100644
index 0000000..286a681
--- /dev/null
+++ b/doc/api/html/nfft__benchomp__detail_8c_source.html
@@ -0,0 +1,201 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfft_benchomp_detail.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfft_benchomp_detail.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordtype">void</span> bench_openmp(FILE *infile, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> psi_flag)</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">int</span> *N;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">int</span> *n;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">int</span> M, d, trafo_adjoint;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">int</span> t, j;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">double</span> re,im;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> ticks t0, t1;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">double</span> tt_total, tt_preonepsi;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> fscanf(infile, <span class="stringliteral">"%d %d"</span>, &d, &trafo_adjoint);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> N = malloc(d*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> n = malloc(d*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> fscanf(infile, <span class="stringliteral">"%d"</span>, N+t);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">for</span> (t=0; t<d; t++)</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> fscanf(infile, <span class="stringliteral">"%d"</span>, n+t);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> fscanf(infile, <span class="stringliteral">"%d"</span>, &M);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor"></span> fftw_import_wisdom_from_filename(<span class="stringliteral">"nfft_benchomp_detail_threads.plan"</span>);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"></span> fftw_import_wisdom_from_filename(<span class="stringliteral">"nfft_benchomp_detail_single.plan"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> nfft_init_guru(&p, d, N, M, n, m,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> PRE_PHI_HUT| psi_flag | MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"></span> fftw_export_wisdom_to_filename(<span class="stringliteral">"nfft_benchomp_detail_threads.plan"</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor"></span> fftw_export_wisdom_to_filename(<span class="stringliteral">"nfft_benchomp_detail_single.plan"</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">for</span> (j=0; j < p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">for</span> (t=0; t < p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>; t++)</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> fscanf(infile, <span class="stringliteral">"%lg"</span>, p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>+p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank">d</a>*j+t);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> {</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">for</span> (j=0; j < p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; j++)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> fscanf(infile, <span class="stringliteral">"%lg %lg"</span>, &re, &im);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j] = re + _Complex_I * im;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> }</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> {</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">for</span> (j=0; j < p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> {</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> fscanf(infile, <span class="stringliteral">"%lg %lg"</span>, &re, &im);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = re + _Complex_I * im;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> }</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> t0 = getticks();</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">if</span>(p.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> t1 = getticks();</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> tt_preonepsi = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> nfft_adjoint(&p);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> t1 = getticks();</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> tt_total = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor">#ifndef MEASURE_TIME</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor"></span> p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="preprocessor">#ifndef MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="preprocessor"></span> p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> printf(<span class="stringliteral">"%.6e %.6e %6e %.6e %.6e %.6e\n"</span>, tt_preonepsi, p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0], p.<a class="code" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848" title="Measured time for each step if MEASURE_TIME is set.">MEASURE [...]
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment">// printf("%.6e\n", tt);</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> free(N);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> free(n);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> nfft_finalize(&p);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> {</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">int</span> m, psi_flag;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor"></span> <span class="keywordtype">int</span> nthreads;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span> (argc != 4)</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> nthreads = atoi(argv[3]);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> fftw_init_threads();</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> omp_set_num_threads(nthreads);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="preprocessor"></span> <span class="keywordflow">if</span> (argc != 3)</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> m = atoi(argv[1]);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> psi_flag = atoi(argv[2]);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> bench_openmp(stdin, m, psi_flag);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfft__times_8c_source.html b/doc/api/html/nfft__times_8c_source.html
new file mode 100644
index 0000000..09f8303
--- /dev/null
+++ b/doc/api/html/nfft__times_8c_source.html
@@ -0,0 +1,1070 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfft_times.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfft_times.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: nfft_times.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordtype">int</span> global_n;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">int</span> global_d;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">static</span> <span class="keywordtype">int</span> comp1(<span class="keyword">const</span> <span class="keywordtype">void</span> *x,<span class="keyword">const</span> <span class="keywordtype">void</span> *y)</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordflow">return</span> ((* (<span class="keywordtype">double</span>*) x)<(* (<span class="keywordtype">double</span>*) y)?-1:1);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> }</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">static</span> <span class="keywordtype">int</span> comp2(<span class="keyword">const</span> <span class="keywordtype">void</span> *x,<span class="keyword">const</span> <span class="keywordtype">void</span> *y)</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> {</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">int</span> nx0,nx1,ny0,ny1;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> nx0=global_n*(* ((<span class="keywordtype">double</span>*)x+0));</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> nx1=global_n*(* ((<span class="keywordtype">double</span>*)x+1));</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> ny0=global_n*(* ((<span class="keywordtype">double</span>*)y+0));</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> ny1=global_n*(* ((<span class="keywordtype">double</span>*)y+1));</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">if</span>(nx0<ny0)</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">if</span>(nx0==ny0)</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">if</span>(nx1<ny1)</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> }</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">static</span> <span class="keywordtype">int</span> comp3(<span class="keyword">const</span> <span class="keywordtype">void</span> *x,<span class="keyword">const</span> <span class="keywordtype">void</span> *y)</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">int</span> nx0,nx1,nx2,ny0,ny1,ny2;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> nx0=global_n*(* ((<span class="keywordtype">double</span>*)x+0));</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> nx1=global_n*(* ((<span class="keywordtype">double</span>*)x+1));</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> nx2=global_n*(* ((<span class="keywordtype">double</span>*)x+2));</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> ny0=global_n*(* ((<span class="keywordtype">double</span>*)y+0));</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> ny1=global_n*(* ((<span class="keywordtype">double</span>*)y+1));</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> ny2=global_n*(* ((<span class="keywordtype">double</span>*)y+2));</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">if</span>(nx0<ny0)</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">if</span>(nx0==ny0)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span>(nx1<ny1)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span>(nx1==ny1)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">if</span>(nx2<ny2)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> }</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">void</span> measure_time_nfft(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">unsigned</span> test_ndft)</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> {</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">int</span> r, M, NN[d], nn[d];</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">double</span> t, t_fft, t_ndft, t_nfft;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> ticks t0, t1;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> fftw_plan p_fft;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> printf(<span class="stringliteral">"\\verb+%d+&\t"</span>,(<span class="keywordtype">int</span>)(log(N)/log(2)*d+0.5));</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">for</span>(r=0,M=1;r<d;r++)</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> {</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> M=N*M;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> NN[r]=N;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> nn[r]=2*N;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> }</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> nfft_init_guru(&p, d, NN, M, nn, 2,</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> PRE_PHI_HUT|</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> PRE_FULL_PSI| MALLOC_F_HAT| MALLOC_X| MALLOC_F|</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> p_fft=fftw_plan_dft(d, NN, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, FFTW_FORWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> global_n=nn[0];</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> global_d=d;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">switch</span>(d)</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> {</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">case</span> 1: { qsort(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>,d*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),comp1); <sp [...]
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">case</span> 2: { qsort(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>,d*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),comp2); <sp [...]
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">case</span> 3: { qsort(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>,d*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),comp3); <sp [...]
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d2 [...]
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> t_fft=0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> r=0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">while</span>(t_fft<1)</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> {</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> r++;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> t0 = getticks();</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> fftw_execute(p_fft);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> t1 = getticks();</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> t_fft+=t;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> t_fft/=r;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// printf("\\verb+%.1e+ & \\verb+(%.1f)+ &\t",t_fft,t_fft/(p.N_total*(log(N)/log(2)*d))*auxC);</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> printf(<span class="stringliteral">"\\verb+%.1e+ &\t"</span>,t_fft);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> {</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> t_ndft=0;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> r=0;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">while</span>(t_ndft<1)</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> {</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> r++;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> t0 = getticks();</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> nfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> t1 = getticks();</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> t_ndft+=t;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> }</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> t_ndft/=r;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="comment">//printf("\\verb+%.1e+ & \\verb+(%d)+&\t",t_ndft,(int)round(t_ndft/(p.N_total*p.N_total)*auxC));</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> printf(<span class="stringliteral">"\\verb+%.1e+ &\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> }</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment">// printf("\\verb+*+\t&\t&\t");</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> printf(<span class="stringliteral">"\\verb+*+\t&\t"</span>);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> t_nfft=0;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> r=0;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">while</span>(t_nfft<1)</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> {</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> r++;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> t0 = getticks();</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">switch</span>(d)</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> {</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">case</span> 1: { nfft_trafo_1d(&p); <span class="keywordflow">break</span>; }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">case</span> 2: { nfft_trafo_2d(&p); <span class="keywordflow">break</span>; }</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">case</span> 3: { nfft_trafo_3d(&p); <span class="keywordflow">break</span>; }</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">default</span>: <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> }</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> t1 = getticks();</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> t_nfft+=t;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> }</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> t_nfft/=r;</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment">// printf("\\verb+%.1e+ & \\verb+(%d)+ & \\verb+(%.1e)+\\\\\n",t_nfft,(int)round(t_nfft/(p.N_total*(log(N)/log(2)*d))*auxC),t_nfft/t_fft);</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> printf(<span class="stringliteral">"\\verb+%.1e+ & \\verb+(%3.1f)+\\\\\n"</span>,t_nfft,t_nfft/t_fft);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> fftw_destroy_plan(p_fft);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> nfft_finalize(&p);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordtype">void</span> measure_time_nfft_XXX2(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">unsigned</span> test_ndft)</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> {</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordtype">int</span> r, M, NN[d], nn[d];</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordtype">double</span> t, t_fft, t_ndft, t_nfft;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> ticks t0, t1;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> fftw_plan p_fft;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> printf(<span class="stringliteral">"%d\t"</span>,(<span class="keywordtype">int</span>)(log(N)/log(2)*d+0.5)); fflush(stdout);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">for</span>(r=0,M=1;r<d;r++)</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> {</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> M=N*M;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> NN[r]=N;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> nn[r]=2*N;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> }</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> nfft_init_guru(&p, d, NN, M, nn, 2,</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> PRE_PHI_HUT|</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> PRE_PSI|</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> MALLOC_F_HAT| MALLOC_X| MALLOC_F|</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> p_fft=fftw_plan_dft(d, NN, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, FFTW_FORWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordtype">double</span> _Complex *swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> qsort(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>,d*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),comp1);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="comment">//nfft_vpr_double(p.x,p.M_total,"nodes x");</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d2 [...]
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> t_fft=0;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> r=0;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">while</span>(t_fft<0.1)</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> {</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> r++;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> t0 = getticks();</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> fftw_execute(p_fft);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> t1 = getticks();</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> t_fft+=t;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> }</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> t_fft/=r;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_fft);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> {</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> t_ndft=0;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> r=0;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">while</span>(t_ndft<0.1)</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> {</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> r++;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> t0 = getticks();</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> nfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> t1 = getticks();</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> t_ndft+=t;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> t_ndft/=r;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> }</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> printf(<span class="stringliteral">"\t"</span>);</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> t_nfft=0;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> r=0;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> {</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> r++;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> t0 = getticks();</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> t1 = getticks();</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> t_nfft+=t;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> }</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> t_nfft/=r;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> t_nfft=0;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> r=0;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> {</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> r++;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> t0 = getticks();</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> nfft_trafo_1d(&p);</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> t1 = getticks();</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> t_nfft+=t;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> }</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> t_nfft/=r;</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> fftw_destroy_plan(p_fft);</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> nfft_finalize(&p);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> }</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordtype">void</span> measure_time_nfft_XXX3(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">unsigned</span> test_ndft)</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> {</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordtype">int</span> r, M, NN[d], nn[d];</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordtype">double</span> t, t_fft, t_ndft, t_nfft;</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> ticks t0, t1;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> fftw_plan p_fft;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> printf(<span class="stringliteral">"%d\t"</span>,(<span class="keywordtype">int</span>)(log(N)/log(2)*d+0.5)); fflush(stdout);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keywordflow">for</span>(r=0,M=1;r<d;r++)</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> {</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> M=N*M;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> NN[r]=N;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> nn[r]=2*N;</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> }</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> nfft_init_guru(&p, d, NN, M, nn, 2,</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> PRE_PHI_HUT|</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> PRE_PSI|</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> MALLOC_F_HAT| MALLOC_X| MALLOC_F|</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> p_fft=fftw_plan_dft(d, NN, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, FFTW_BACKWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordtype">double</span> _Complex *swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> [...]
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> qsort(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>,d*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),comp1);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="comment">//nfft_vpr_double(p.x,p.M_total,"nodes x");</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total n [...]
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> t_fft=0;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> r=0;</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">while</span>(t_fft<0.1)</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> {</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> r++;</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> t0 = getticks();</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> fftw_execute(p_fft);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> t1 = getticks();</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> t_fft+=t;</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> }</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> t_fft/=r;</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_fft);</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> {</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,swapndft);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> t_ndft=0;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> r=0;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">while</span>(t_ndft<0.1)</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> {</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> r++;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> t0 = getticks();</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> nfft_adjoint_direct(&p);</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> t1 = getticks();</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> t_ndft+=t;</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> }</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> t_ndft/=r;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,swapndft);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> }</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> printf(<span class="stringliteral">"\t"</span>);</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> t_nfft=0;</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> r=0;</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> {</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> r++;</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> t0 = getticks();</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> nfft_adjoint(&p);</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> t1 = getticks();</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> t_nfft+=t;</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> }</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> t_nfft/=r;</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>));</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> t_nfft=0;</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> r=0;</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> {</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> r++;</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> t0 = getticks();</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> nfft_adjoint_1d(&p);</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> t1 = getticks();</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> t_nfft+=t;</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> }</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> t_nfft/=r;</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>));</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> fftw_destroy_plan(p_fft);</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> nfft_finalize(&p);</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> }</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="keywordtype">void</span> measure_time_nfft_XXX4(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">unsigned</span> test_ndft)</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> {</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keywordtype">int</span> r, M, NN[d], nn[d];</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keywordtype">double</span> t, t_fft, t_ndft, t_nfft;</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> ticks t0, t1;</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> fftw_plan p_fft;</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> printf(<span class="stringliteral">"%d\t"</span>,(<span class="keywordtype">int</span>)(log(N)/log(2)*d+0.5)); fflush(stdout);</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">for</span>(r=0,M=1;r<d;r++)</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> {</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> M=N*M;</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> NN[r]=N;</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> nn[r]=2*N;</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> }</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> nfft_init_guru(&p, d, NN, M, nn, 4,</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> PRE_PHI_HUT|</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> PRE_PSI|</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> MALLOC_F_HAT| MALLOC_X| MALLOC_F|</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> p_fft=fftw_plan_dft(d, NN, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, FFTW_FORWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="keywordtype">double</span> _Complex *swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="comment">//for(j=0;j<2*M;j+=2)</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="comment">// p.x[j]=0.5*p.x[j]+0.25*(p.x[j]>=0?1:-1);</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="comment">//qsort(p.x,p.M_total,d*sizeof(double),comp1);</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="comment">//nfft_vpr_double(p.x,p.M_total,"nodes x");</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d2 [...]
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> t_fft=0;</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> r=0;</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="keywordflow">while</span>(t_fft<0.1)</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> {</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> r++;</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> t0 = getticks();</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> fftw_execute(p_fft);</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> t1 = getticks();</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> t_fft+=t;</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> }</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> t_fft/=r;</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_fft);</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d2 [...]
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> {</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> t_ndft=0;</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> r=0;</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="keywordflow">while</span>(t_ndft<0.1)</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> {</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> r++;</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> t0 = getticks();</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> nfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> t1 = getticks();</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> t_ndft+=t;</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> }</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> t_ndft/=r;</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="comment">//printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> }</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> printf(<span class="stringliteral">"\t"</span>);</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> t_nfft=0;</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> r=0;</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> {</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> r++;</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> t0 = getticks();</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> t1 = getticks();</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> t_nfft+=t;</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> }</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> t_nfft/=r;</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="comment">//printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> t_nfft=0;</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> r=0;</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> {</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> r++;</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> t0 = getticks();</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> nfft_trafo_2d(&p);</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> t1 = getticks();</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> t_nfft+=t;</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> }</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> t_nfft/=r;</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="comment">//printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> </div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> fftw_destroy_plan(p_fft);</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> nfft_finalize(&p);</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> }</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> </div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> </div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="keywordtype">void</span> measure_time_nfft_XXX5(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">unsigned</span> test_ndft)</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> {</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="keywordtype">int</span> r, M, NN[d], nn[d];</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="keywordtype">double</span> t, t_fft, t_ndft, t_nfft;</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> ticks t0, t1;</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> fftw_plan p_fft;</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> </div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> printf(<span class="stringliteral">"%d\t"</span>,(<span class="keywordtype">int</span>)(log(N)/log(2)*d+0.5)); fflush(stdout);</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> </div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordflow">for</span>(r=0,M=1;r<d;r++)</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> {</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> M=N*M;</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> NN[r]=N;</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> nn[r]=2*N;</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> }</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> </div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> nfft_init_guru(&p, d, NN, M, nn, 4,</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> PRE_PHI_HUT|</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> PRE_PSI|</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> MALLOC_F_HAT| MALLOC_X| MALLOC_F|</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> p_fft=fftw_plan_dft(d, NN, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, FFTW_FORWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> </div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keywordtype">double</span> _Complex *swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> [...]
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> </div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="comment">//sort_nodes(p.x,p.d,p.M_total,</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> </div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total n [...]
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> t_fft=0;</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> r=0;</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="keywordflow">while</span>(t_fft<0.1)</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> {</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> r++;</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> t0 = getticks();</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> fftw_execute(p_fft);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> t1 = getticks();</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> t_fft+=t;</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> }</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> t_fft/=r;</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_fft);</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total n [...]
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> {</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,swapndft);</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> t_ndft=0;</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> r=0;</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="keywordflow">while</span>(t_ndft<0.1)</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> {</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> r++;</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> t0 = getticks();</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> nfft_adjoint_direct(&p);</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> t1 = getticks();</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> t_ndft+=t;</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> }</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> t_ndft/=r;</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> </div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="comment">//printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> </div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,swapndft);</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> }</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> printf(<span class="stringliteral">"\t"</span>);</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> </div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> t_nfft=0;</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> r=0;</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> {</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> r++;</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> t0 = getticks();</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> nfft_adjoint(&p);</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> t1 = getticks();</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> t_nfft+=t;</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> }</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> t_nfft/=r;</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>));</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="comment">//printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> t_nfft=0;</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> r=0;</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> {</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> r++;</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> t0 = getticks();</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> nfft_adjoint_2d(&p);</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> t1 = getticks();</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> t_nfft+=t;</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> }</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> t_nfft/=r;</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>));</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> </div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="comment">//printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> </div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> fftw_destroy_plan(p_fft);</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> nfft_finalize(&p);</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> }</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> </div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="keywordtype">void</span> measure_time_nfft_XXX6(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">unsigned</span> test_ndft)</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> {</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="keywordtype">int</span> r, M, NN[d], nn[d];</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="keywordtype">double</span> t, t_fft, t_ndft, t_nfft;</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> ticks t0, t1;</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> </div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> fftw_plan p_fft;</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> printf(<span class="stringliteral">"%d\t"</span>,(<span class="keywordtype">int</span>)(log(N)/log(2)*d+0.5)); fflush(stdout);</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="keywordflow">for</span>(r=0,M=1;r<d;r++)</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> {</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> M=N*M;</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> NN[r]=N;</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> nn[r]=2*N;</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> }</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> nfft_init_guru(&p, d, NN, M, nn, 2,</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> PRE_PHI_HUT|</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> FG_PSI|</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> MALLOC_F_HAT| MALLOC_X| MALLOC_F|</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> </div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> p_fft=fftw_plan_dft(d, NN, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, FFTW_FORWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> <span class="keywordtype">double</span> _Complex *swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="comment">//qsort(p.x,p.M_total,d*sizeof(double),comp1);</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="comment">//nfft_vpr_double(p.x,p.M_total,"nodes x");</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> </div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d2 [...]
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> </div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> t_fft=0;</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> r=0;</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> <span class="keywordflow">while</span>(t_fft<0.1)</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> {</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> r++;</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> t0 = getticks();</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> fftw_execute(p_fft);</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> t1 = getticks();</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> t_fft+=t;</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> }</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> t_fft/=r;</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_fft);</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> </div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d2 [...]
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> </div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> {</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> t_ndft=0;</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> r=0;</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="keywordflow">while</span>(t_ndft<0.1)</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> {</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> r++;</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> t0 = getticks();</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> nfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> t1 = getticks();</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> t_ndft+=t;</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> }</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> t_ndft/=r;</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> </div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="comment">//printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> </div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> }</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> printf(<span class="stringliteral">"\t"</span>);</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> </div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> t_nfft=0;</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> r=0;</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> {</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> r++;</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> t0 = getticks();</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> t1 = getticks();</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> t_nfft+=t;</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> }</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> t_nfft/=r;</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> </div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> <span class="comment">//printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> </div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> t_nfft=0;</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> r=0;</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> {</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> r++;</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> t0 = getticks();</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> nfft_trafo_3d(&p);</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> t1 = getticks();</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> t_nfft+=t;</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> }</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> t_nfft/=r;</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> </div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="comment">//printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> </div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> </div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> fftw_destroy_plan(p_fft);</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> nfft_finalize(&p);</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> }</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> </div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> </div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> <span class="keywordtype">void</span> measure_time_nfft_XXX7(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N, <span class="keywordtype">unsigned</span> test_ndft)</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> {</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="keywordtype">int</span> r, M, NN[d], nn[d];</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="keywordtype">double</span> t, t_fft, t_ndft, t_nfft;</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> ticks t0, t1;</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p;</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> fftw_plan p_fft;</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> </div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> printf(<span class="stringliteral">"%d\t"</span>,(<span class="keywordtype">int</span>)(log(N)/log(2)*d+0.5)); fflush(stdout);</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> </div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="keywordflow">for</span>(r=0,M=1;r<d;r++)</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> {</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> M=N*M;</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> NN[r]=N;</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> nn[r]=2*N;</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> }</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> </div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> nfft_init_guru(&p, d, NN, M, nn, 2,</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> PRE_PHI_HUT|</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> FG_PSI|</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> MALLOC_F_HAT| MALLOC_X| MALLOC_F|</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> </div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> p_fft=fftw_plan_dft(d, NN, p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, FFTW_FORWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> </div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> <span class="keywordtype">double</span> _Complex *swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> [...]
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> </div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>, p.<a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka [...]
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="comment">//sort_nodes(p.x,p.d,p.M_total,</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> </div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> </div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total n [...]
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> </div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> t_fft=0;</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> r=0;</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="keywordflow">while</span>(t_fft<0.1)</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> {</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> r++;</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> t0 = getticks();</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> fftw_execute(p_fft);</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> t1 = getticks();</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> t_fft+=t;</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> }</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> t_fft/=r;</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> </div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_fft);</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> </div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total n [...]
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> {</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,swapndft);</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> t_ndft=0;</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> r=0;</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="keywordflow">while</span>(t_ndft<0.1)</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> {</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> r++;</div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> t0 = getticks();</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> nfft_adjoint_direct(&p);</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> t1 = getticks();</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> t_ndft+=t;</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> }</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> t_ndft/=r;</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> </div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="comment">//printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));</span></div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> </div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,swapndft);</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> }</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> printf(<span class="stringliteral">"\t"</span>);</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> </div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> t_nfft=0;</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> r=0;</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> {</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> r++;</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> t0 = getticks();</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> nfft_adjoint(&p);</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> t1 = getticks();</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> t_nfft+=t;</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> }</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> t_nfft/=r;</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>));</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> </div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> <span class="comment">//printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> </div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> t_nfft=0;</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> r=0;</div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> {</div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> r++;</div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> t0 = getticks();</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> nfft_adjoint_3d(&p);</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> t1 = getticks();</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> t_nfft+=t;</div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> }</div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> t_nfft/=r;</div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> printf(<span class="stringliteral">"%.1e\t"</span>,t_nfft);</div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="keywordflow">if</span>(test_ndft)</div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> printf(<span class="stringliteral">"(%.1e)\t"</span>,X(error_l_2_complex)(swapndft, p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>));</div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> </div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> <span class="comment">//printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> </div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> </div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> fftw_destroy_plan(p_fft);</div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> nfft_finalize(&p);</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> }</div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> </div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="keywordtype">int</span> main2(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> {</div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> <span class="keywordtype">int</span> l,d,logIN;</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> </div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> <span class="keywordflow">for</span>(l=3;l<=6;l++)</div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> {</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> d=3;</div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> logIN=d*l;</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> <span class="keywordflow">if</span>(logIN<=15)</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> {</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> measure_time_nfft_XXX6(d,(1U<< (logIN/d)),1);</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> measure_time_nfft_XXX7(d,(1U<< (logIN/d)),1);</div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> }</div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> {</div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> measure_time_nfft_XXX6(d,(1U<< (logIN/d)),0);</div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> measure_time_nfft_XXX7(d,(1U<< (logIN/d)),0);</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> }</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> }</div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> </div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> exit(-1);</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> </div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> </div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> <span class="keywordflow">for</span>(l=7;l<=12;l++)</div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> {</div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> d=2;</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> logIN=d*l;</div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="keywordflow">if</span>(logIN<=15)</div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> {</div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> measure_time_nfft_XXX4(d,(1U<< (logIN/d)),1);</div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> measure_time_nfft_XXX5(d,(1U<< (logIN/d)),1);</div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> }</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> {</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> measure_time_nfft_XXX4(d,(1U<< (logIN/d)),0);</div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> measure_time_nfft_XXX5(d,(1U<< (logIN/d)),0);</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> }</div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> }</div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> </div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> exit(-1);</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> </div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="keywordflow">for</span>(l=3;l<=12;l++)</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> {</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> logIN=l;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="keywordflow">if</span>(logIN<=15)</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> {</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> measure_time_nfft_XXX2(1,(1U<< (logIN)),1);</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> measure_time_nfft_XXX3(1,(1U<< (logIN)),1);</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> }</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> {</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> measure_time_nfft_XXX2(1,(1U<< (logIN)),0);</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> measure_time_nfft_XXX3(1,(1U<< (logIN)),0);</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> }</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> }</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> </div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> exit(-1);</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> }</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> </div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> {</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="keywordtype">int</span> l,d,logIN;</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> </div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> printf(<span class="stringliteral">"\\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\\\\n"</span>);</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> printf(<span class="stringliteral">"\\hline \\hline \\multicolumn{5}{|c|}{$d=1$} \\\\ \\hline\n"</span>);</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="keywordflow">for</span>(l=3;l<=22;l++)</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> {</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> d=1;</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> logIN=l;</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="keywordflow">if</span>(logIN<=15)</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> measure_time_nfft(d,(1U<< (logIN/d)),1);</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> measure_time_nfft(d,(1U<< (logIN/d)),0);</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> </div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> fflush(stdout);</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> }</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> printf(<span class="stringliteral">"\\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\\\\n"</span>);</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> printf(<span class="stringliteral">"\\hline \\hline \\multicolumn{5}{|c|}{$d=2$} \\\\ \\hline\n"</span>);</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <span class="keywordflow">for</span>(l=3;l<=11;l++)</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> {</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> d=2;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> logIN=d*l;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="keywordflow">if</span>(logIN<=15)</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> measure_time_nfft(d,(1U<< (logIN/d)),1);</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> measure_time_nfft(d,(1U<< (logIN/d)),0);</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> </div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> fflush(stdout);</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> }</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> </div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> printf(<span class="stringliteral">"\\hline \\hline \\multicolumn{5}{|c|}{$d=3$} \\\\ \\hline\n"</span>);</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="keywordflow">for</span>(l=3;l<=7;l++)</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> {</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> d=3;</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> logIN=d*l;</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <span class="keywordflow">if</span>(logIN<=15)</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> measure_time_nfft(d,(1U<< (logIN/d)),1);</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> measure_time_nfft(d,(1U<< (logIN/d)),0);</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> </div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> fflush(stdout);</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> }</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> </div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfsft_2simple__test_8c_source.html b/doc/api/html/nfsft_2simple__test_8c_source.html
new file mode 100644
index 0000000..bc7f5a9
--- /dev/null
+++ b/doc/api/html/nfsft_2simple__test_8c_source.html
@@ -0,0 +1,178 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - simple_test.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_e6016a3bd4e6017d6b851aae5334ffd2.html">nfsft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfsft/simple_test.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3902 2012-10-16 14:02:31Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/* standard headers */</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">/* It is important to include complex.h before nfft3.h. */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span> <span class="comment">/* NFFT3 header */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span> <span class="comment">/* NFFT3 utilities header*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "infft.h"</span> <span class="comment">/* NFFT3 internal header */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_nfsft(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = 4; <span class="comment">/* bandwidth/maximum degree */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">const</span> <span class="keywordtype">int</span> M = 8; <span class="comment">/* number of nodes */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan; <span class="comment">/* transform plan */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">int</span> j, k, n; <span class="comment">/* loop variables */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment">/* precomputation (for fast polynomial transform) */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> nfsft_precompute(N,1000.0,0U,0U);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment">/* Initialize transform plan using the guru interface. All input and output</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment"> * arrays are allocated by nfsft_init_guru(). Computations are performed with</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment"> * respect to L^2-normalized spherical harmonics Y_k^n. The array of spherical</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment"> * Fourier coefficients is preserved during transformations. The NFFT uses a</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment"> * cut-off parameter m = 6. See the NFFT 3 manual for details.</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> nfsft_init_guru(&plan, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFT_OUT_OF_PLACE, 6);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment">/* pseudo-random nodes */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> {</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j]= nfft_drand48() - K(0.5);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j+1]= K(0.5) * nfft_drand48();</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment">/* precomputation (for NFFT, node-dependent) */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> nfsft_precompute_x(&plan);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment">/* pseudo-random Fourier coefficients */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">for</span> (k = 0; k <= plan.<a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)] =</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> nfft_drand48() - K(0.5) + _Complex_I*(nfft_drand48() - K(0.5));</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">/* Direct transformation, display result. */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> nfsft_trafo_direct(&plan);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> printf(<span class="stringliteral">"Vector f (NDSFT):\n"</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> printf(<span class="stringliteral">"f[%+2d] = %+5.3"</span> FE <span class="stringliteral">" %+5.3"</span> FE <span class="stringliteral">"*I\n"</span>,j,</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> creal(plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]), cimag(plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]));</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment">/* Fast approximate transformation, display result. */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> nfsft_trafo(&plan);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> printf(<span class="stringliteral">"Vector f (NFSFT):\n"</span>);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> printf(<span class="stringliteral">"f[%+2d] = %+5.3"</span> FE <span class="stringliteral">" %+5.3"</span> FE <span class="stringliteral">"*I\n"</span>,j,</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> creal(plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]), cimag(plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]));</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment">/* Direct adjoint transformation, display result. */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> nfsft_adjoint_direct(&plan);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> printf(<span class="stringliteral">"Vector f_hat (NDSFT):\n"</span>);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">for</span> (k = 0; k <= plan.<a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> fprintf(stdout,<span class="stringliteral">"f_hat[%+2d,%+2d] = %+5.3"</span> FE <span class="stringliteral">" %+5.3"</span> FE <span class="stringliteral">"*I\n"</span>,k,n,</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> creal(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)]),</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> cimag(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)]));</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment">/* Fast approximate adjoint transformation, display result. */</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> nfsft_adjoint(&plan);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> printf(<span class="stringliteral">"Vector f_hat (NFSFT):\n"</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">for</span> (k = 0; k <= plan.<a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> {</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> fprintf(stdout,<span class="stringliteral">"f_hat[%+2d,%+2d] = %+5.3"</span> FE <span class="stringliteral">" %+5.3"</span> FE <span class="stringliteral">"*I\n"</span>,k,n,</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> creal(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)]),</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> cimag(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)]));</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment">/* Finalize the plan. */</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> nfsft_finalize(&plan);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment">/* Destroy data precomputed for fast polynomial transform. */</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> nfsft_forget();</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> {</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> printf(<span class="stringliteral">"Computing an NDSFT, an NFSFT, an adjoint NDSFT, and an adjoint NFSFT"</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="stringliteral">"...\n\n"</span>);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> simple_test_nfsft();</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfsft_2simple__test__threads_8c_source.html b/doc/api/html/nfsft_2simple__test__threads_8c_source.html
new file mode 100644
index 0000000..6b4582b
--- /dev/null
+++ b/doc/api/html/nfsft_2simple__test__threads_8c_source.html
@@ -0,0 +1,183 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - simple_test_threads.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_e6016a3bd4e6017d6b851aae5334ffd2.html">nfsft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfsft/simple_test_threads.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3498 2010-05-07 18:46:08Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/* standard headers */</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">/* It is important to include complex.h before nfft3.h. */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span> <span class="comment">/* NFFT3 header */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span> <span class="comment">/* NFFT3 utilities header*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "infft.h"</span> <span class="comment">/* NFFT3 internal header */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_nfsft(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> {</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N = 4; <span class="comment">/* bandwidth/maximum degree */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">const</span> <span class="keywordtype">int</span> M = 8; <span class="comment">/* number of nodes */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan; <span class="comment">/* transform plan */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">int</span> j, k, n; <span class="comment">/* loop variables */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment">/* precomputation (for fast polynomial transform) */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> nfsft_precompute(N,1000.0,0U,0U);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment">/* Initialize transform plan using the guru interface. All input and output</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment"> * arrays are allocated by nfsft_init_guru(). Computations are performed with</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment"> * respect to L^2-normalized spherical harmonics Y_k^n. The array of spherical</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment"> * Fourier coefficients is preserved during transformations. The NFFT uses a</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment"> * cut-off parameter m = 6. See the NFFT 3 manual for details.</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> nfsft_init_guru(&plan, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFT_OUT_OF_PLACE, 6);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">/* pseudo-random nodes */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j]= nfft_drand48() - K(0.5);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j+1]= K(0.5) * nfft_drand48();</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> }</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">/* precomputation (for NFFT, node-dependent) */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> nfsft_precompute_x(&plan);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment">/* pseudo-random Fourier coefficients */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">for</span> (k = 0; k <= plan.<a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)] =</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> nfft_drand48() - K(0.5) + _Complex_I*(nfft_drand48() - K(0.5));</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">/* Direct transformation, display result. */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> nfsft_trafo_direct(&plan);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> printf(<span class="stringliteral">"Vector f (NDSFT):\n"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> printf(<span class="stringliteral">"f[%+2d] = %+5.3"</span> FE <span class="stringliteral">" %+5.3"</span> FE <span class="stringliteral">"*I\n"</span>,j,</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> creal(plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]), cimag(plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]));</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment">/* Fast approximate transformation, display result. */</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> printf(<span class="stringliteral">"Vector f (NDSFT):\n"</span>);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">for</span> (j = 0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> printf(<span class="stringliteral">"f[%+2d] = %+5.3"</span> FE <span class="stringliteral">" %+5.3"</span> FE <span class="stringliteral">"*I\n"</span>,j,</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> creal(plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]), cimag(plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]));</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment">/* Direct adjoint transformation, display result. */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> nfsft_adjoint_direct(&plan);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> printf(<span class="stringliteral">"Vector f_hat (NDSFT):\n"</span>);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">for</span> (k = 0; k <= plan.<a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> fprintf(stdout,<span class="stringliteral">"f_hat[%+2d,%+2d] = %+5.3"</span> FE <span class="stringliteral">" %+5.3"</span> FE <span class="stringliteral">"*I\n"</span>,k,n,</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> creal(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)]),</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> cimag(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)]));</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment">/* Fast approximate adjoint transformation, display result. */</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> nfsft_adjoint(&plan);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> printf(<span class="stringliteral">"Vector f_hat (NFSFT):\n"</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">for</span> (k = 0; k <= plan.<a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> {</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> fprintf(stdout,<span class="stringliteral">"f_hat[%+2d,%+2d] = %+5.3"</span> FE <span class="stringliteral">" %+5.3"</span> FE <span class="stringliteral">"*I\n"</span>,k,n,</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> creal(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)]),</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> cimag(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)]));</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment">/* Finalize the plan. */</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> nfsft_finalize(&plan);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment">/* Destroy data precomputed for fast polynomial transform. */</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> nfsft_forget();</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> {</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> printf(<span class="stringliteral">"nthreads = %d\n"</span>, nfft_get_omp_num_threads());</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment">/* init */</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> fftw_init_threads();</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> printf(<span class="stringliteral">"Computing an NDSFT, an NFSFT, an adjoint NDSFT, and an adjoint NFSFT"</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="stringliteral">"...\n\n"</span>);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> simple_test_nfsft();</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfsft_8c.html b/doc/api/html/nfsft_8c.html
new file mode 100644
index 0000000..d6d241c
--- /dev/null
+++ b/doc/api/html/nfsft_8c.html
@@ -0,0 +1,125 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfsft.c File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_25564cacf5a7ef2ec915d9f7b609853e.html">nfsft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">nfsft.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Implementation file for the NFSFT module.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+<code>#include "legendre.h"</code><br/>
+<code>#include "api.h"</code><br/>
+</div>
+<p><a href="nfsft_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga206c4faaf800b49dcb14e26148fa9ac6"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga206c4faaf800b49dcb14e26148fa9ac6">NFSFT_DEFAULT_NFFT_CUTOFF</a> 6</td></tr>
+<tr class="memdesc:ga206c4faaf800b49dcb14e26148fa9ac6"><td class="mdescLeft"> </td><td class="mdescRight">The default NFFT cutoff parameter. <a href="group__nfsft.html#ga206c4faaf800b49dcb14e26148fa9ac6"></a><br/></td></tr>
+<tr class="memitem:gab7d25b80464387893b3c773f92e5c4f3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#gab7d25b80464387893b3c773f92e5c4f3">NFSFT_DEFAULT_THRESHOLD</a> 1000</td></tr>
+<tr class="memdesc:gab7d25b80464387893b3c773f92e5c4f3"><td class="mdescLeft"> </td><td class="mdescRight">The default threshold for the FPT. <a href="group__nfsft.html#gab7d25b80464387893b3c773f92e5c4f3"></a><br/></td></tr>
+<tr class="memitem:ga54b840898df97bcd14af4cb004650ed3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3">NFSFT_BREAK_EVEN</a> 5</td></tr>
+<tr class="memdesc:ga54b840898df97bcd14af4cb004650ed3"><td class="mdescLeft"> </td><td class="mdescRight">The break-even bandwidth <img class="formulaInl" alt="$N \in \mathbb{N}_0$" src="form_49.png"/>. <a href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3"></a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga47209b28b6561fca7349ed8afa5f9656"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656">c2e</a> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memdesc:ga47209b28b6561fca7349ed8afa5f9656"><td class="mdescLeft"> </td><td class="mdescRight">Converts coefficients <img class="formulaInl" alt="$\left(b_k^n\right)_{k=0}^M$" src="form_50.png"/> with <img class="formulaInl" alt="$M \in \mathbb{N}_0$" src="form_36.png"/>, <img class="formulaInl" alt="$-M \le n \le M$" src="form_51.png"/> from a linear combination of Chebyshev polynomials </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ f(\cos\vartheta) = \sum_{k=0}^{2\lfloor\frac{M}{2}\rfloor} a_k (\sin\vartheta)^{n\;\mathrm{mod}\;2} T_k(\cos\vartheta) \]" src="form_52.png"/>
+</p>
+<p> to coefficients <img class="formulaInl" alt="$\left(c_k^n\right)_{k=0}^M$" src="form_53.png"/> matching the representation by complex exponentials </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ f(\cos\vartheta) = \sum_{k=-M}^{M} c_k \mathrm{e}^{\mathrm{i}k\vartheta} \]" src="form_54.png"/>
+</p>
+<p> for each order <img class="formulaInl" alt="$n=-M,\ldots,M$" src="form_55.png"/>. <a href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656"></a><br/></td></tr>
+<tr class="memitem:ga0e033457136bc0ecb18bb57d3ee5aa37"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga0e033457136bc0ecb18bb57d3ee5aa37">c2e_transposed</a> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memdesc:ga0e033457136bc0ecb18bb57d3ee5aa37"><td class="mdescLeft"> </td><td class="mdescRight">Transposed version of the function <a class="el" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656">c2e</a>. <a href="group__nfsft.html#ga0e033457136bc0ecb18bb57d3ee5aa37"></a><br/></td></tr>
+<tr class="memitem:ga65cda3f4a3edc5eb39c697cf34b1f0b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga65cda3f4a3edc5eb39c697cf34b1f0b9"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M)</td></tr>
+<tr class="memitem:ga2812aa5beba0eb7efd3072bf323a0155"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2812aa5beba0eb7efd3072bf323a0155"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init_advanced</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M, unsigned int flags)</td></tr>
+<tr class="memitem:gafff6158abcefa9a75bcfa41af5a79089"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafff6158abcefa9a75bcfa41af5a79089"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_init_guru</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan, int N, int M, unsigned int flags, unsigned int nfft_flags, int nfft_cutoff)</td></tr>
+<tr class="memitem:gabe87aeea1f7cfef9ae8febb16d702f3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabe87aeea1f7cfef9ae8febb16d702f3b"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_precompute</b> (int N, double kappa, unsigned int nfsft_flags, unsigned int fpt_flags)</td></tr>
+<tr class="memitem:ga3b69bca6c76a63877534f5a9781bf285"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3b69bca6c76a63877534f5a9781bf285"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_forget</b> (void)</td></tr>
+<tr class="memitem:gaa63e193a27d84059742ff25ff81e2ed1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa63e193a27d84059742ff25ff81e2ed1"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_finalize</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga7628057164579a29cc77487cda6772e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7628057164579a29cc77487cda6772e5"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_trafo_direct</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga7cfaacc3393dea5c895859fa035e3e06"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7cfaacc3393dea5c895859fa035e3e06"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_adjoint_direct</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga5796fc68c432d46dfcab7abd8c56ee22"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5796fc68c432d46dfcab7abd8c56ee22"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_trafo</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga813bb48d404c7286310733c99a81a169"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga813bb48d404c7286310733c99a81a169"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_adjoint</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+<tr class="memitem:ga7a7fa6722d6ba3aade4c69299af86e4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7a7fa6722d6ba3aade4c69299af86e4e"></a>
+void </td><td class="memItemRight" valign="bottom"><b>nfsft_precompute_x</b> (<a class="el" href="structnfsft__plan.html">nfsft_plan</a> *plan)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ga0af81d81e1b436949ddc46dbd27346e5"><td class="memItemLeft" align="right" valign="top">static struct <a class="el" href="structnfsft__wisdom.html">nfsft_wisdom</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__nfsft.html#ga0af81d81e1b436949ddc46dbd27346e5">wisdom</a> = {false,0U,-1,-1,0,0,0,0,0}</td></tr>
+<tr class="memdesc:ga0af81d81e1b436949ddc46dbd27346e5"><td class="mdescLeft"> </td><td class="mdescRight">The global wisdom structure for precomputed data. <a href="group__nfsft.html#ga0af81d81e1b436949ddc46dbd27346e5"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Implementation file for the NFSFT module. </p>
+<dl class="section author"><dt>Author:</dt><dd>Jens Keiner </dd></dl>
+
+<p>Definition in file <a class="el" href="nfsft_8c_source.html">nfsft.c</a>.</p>
+</div></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfsft_8c_source.html b/doc/api/html/nfsft_8c_source.html
new file mode 100644
index 0000000..e819159
--- /dev/null
+++ b/doc/api/html/nfsft_8c_source.html
@@ -0,0 +1,1248 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfsft.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_25564cacf5a7ef2ec915d9f7b609853e.html">nfsft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfsft.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="nfsft_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: nfsft.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment">/* Include standard C headers. */</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">/* Include NFFT3 utilities header. */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment">/* Include NFFT3 library header. */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment">/* Include private associated Legendre functions header. */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#include "legendre.h"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment">/* Include private API header. */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#include "api.h"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="code" href="group__nfsft.html#ga206c4faaf800b49dcb14e26148fa9ac6"> 65</a></span> <span class="preprocessor">#define NFSFT_DEFAULT_NFFT_CUTOFF 6</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="group__nfsft.html#gab7d25b80464387893b3c773f92e5c4f3"> 72</a></span> <span class="preprocessor">#define NFSFT_DEFAULT_THRESHOLD 1000</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="code" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3"> 79</a></span> <span class="preprocessor">#define NFSFT_BREAK_EVEN 5</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="code" href="group__nfsft.html#ga0af81d81e1b436949ddc46dbd27346e5"> 87</a></span> <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structnfsft__wisdom.html" title="Wisdom structure.">nfsft_wisdom</a> <a class="code" href="group__nfsft.html#ga0af81d81e1b436949ddc46dbd27346e5" title="The global wisdom structure for precomputed data.">wisdom</a> = {<span class="keyword">f [...]
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"><a class="code" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656"> 111</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656" title="Converts coefficients with , from a linear combination of Chebyshev polynomials to coefficients m...">c2e</a>(<a class="code" href="struc [...]
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> {</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">int</span> k; </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">int</span> n; </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">double</span> _Complex last; </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">double</span> _Complex act; </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">double</span> _Complex *xp; </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">double</span> _Complex *xm; </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordtype">int</span> low; </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordtype">int</span> up; </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">int</span> lowe; </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordtype">int</span> upe; </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment">/* Set the first row to order to zero since it is unused. */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> memset(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>,0U,(2*plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>+2)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment">/* Determine lower and upper bounds for loop processing even terms. */</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> lowe = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> + (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>%2);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> upe = -lowe;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment">/* Process even terms. */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">for</span> (n = lowe; n <= upe; n += 2)</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> {</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment">/* Compute new coefficients \f$\left(c_k^n\right)_{k=-M,\ldots,M}\f$ from</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment"> * old coefficients $\left(b_k^n\right)_{k=0,\ldots,M}$. */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> xm = &(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(-1,n,plan)]);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> xp = &(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(+1,n,plan)]);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">for</span>(k = 1; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> {</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> *xp *= 0.5;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> *xm-- = *xp++;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment">/* Set the first coefficient in the array corresponding to this order to</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment"> * zero since it is unused. */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> *xm = 0.0;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment">/* Determine lower and upper bounds for loop processing odd terms. */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> low = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> + (1-plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>%2);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> up = -low;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment">/* Process odd terms incorporating the additional sine term</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="comment"> * \f$\sin \vartheta\f$. */</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">for</span> (n = low; n <= up; n += 2)</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> {</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment">/* Compute new coefficients \f$\left(c_k^n\right)_{k=-M,\ldots,M}\f$ from</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment"> * old coefficients $\left(b_k^n\right)_{k=0,\ldots,M-1}$ incorporating</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment"> * the additional term \f$\sin \vartheta\f$. */</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(0,n,plan)] *= 2.0;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> xp = &(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(-plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>-1,n,plan)]);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment">/* Set the first coefficient in the array corresponding to this order to zero</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="comment"> * since it is unused. */</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> *xp++ = 0.0;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> xm = &(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,n,plan)]);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> last = *xm;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> *xm = 0.5 * _Complex_I * (0.5*xm[-1]);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> *xp++ = -(*xm--);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">for</span> (k = plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>-1; k > 0; k--)</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> {</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> act = *xm;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> *xm = 0.5 * _Complex_I * (0.5*(xm[-1] - last));</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> *xp++ = -(*xm--);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> last = act;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> *xm = 0.0;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"><a class="code" href="group__nfsft.html#ga0e033457136bc0ecb18bb57d3ee5aa37"> 189</a></span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#ga0e033457136bc0ecb18bb57d3ee5aa37" title="Transposed version of the function c2e.">c2e_transposed</a>(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan)</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> {</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordtype">int</span> k; </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordtype">int</span> n; </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordtype">double</span> _Complex last; </div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordtype">double</span> _Complex act; </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">double</span> _Complex *xp; </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordtype">double</span> _Complex *xm; </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordtype">int</span> low; </div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordtype">int</span> up; </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordtype">int</span> lowe; </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keywordtype">int</span> upe; </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment">/* Determine lower and upper bounds for loop processing even terms. */</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> lowe = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> + (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>%2);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> upe = -lowe;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment">/* Process even terms. */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">for</span> (n = lowe; n <= upe; n += 2)</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> {</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment">/* Compute new coefficients \f$\left(b_k^n\right)_{k=0,\ldots,M}\f$ from</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment"> * old coefficients $\left(c_k^n\right)_{k=-M,\ldots,M}$. */</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> xm = &(plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(-1,n,plan)]);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> xp = &(plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(+1,n,plan)]);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">for</span>(k = 1; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> {</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> *xp += *xm--;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> *xp++ *= 0.5;;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> }</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="comment">/* Determine lower and upper bounds for loop processing odd terms. */</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> low = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> + (1-plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>%2);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> up = -low;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment">/* Process odd terms. */</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">for</span> (n = low; n <= up; n += 2)</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> {</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment">/* Compute new coefficients \f$\left(b_k^n\right)_{k=0,\ldots,M-1}\f$ from</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment"> * old coefficients $\left(c_k^n\right)_{k=0,\ldots,M-1}$. */</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> xm = &(plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(-1,n,plan)]);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> xp = &(plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(+1,n,plan)]);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">for</span>(k = 1; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> {</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> *xp++ -= *xm--;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> }</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(0,n,plan)] =</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> -0.25*_Complex_I*plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(1,n,plan)];</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> last = plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(1,n,plan)];</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(1,n,plan)] =</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> -0.25*_Complex_I*plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(2,n,plan)];</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> xp = &(plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(2,n,plan)]);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">for</span> (k = 2; k < plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> {</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> act = *xp;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> *xp = -0.25 * _Complex_I * (xp[1] - last);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> xp++;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> last = act;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> }</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> *xp = 0.25 * _Complex_I * last;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(0,n,plan)] *= 2.0;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> }</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> }</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordtype">void</span> nfsft_init(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> {</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="comment">/* Call nfsft_init_advanced with default flags. */</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> nfsft_init_advanced(plan, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> NFSFT_MALLOC_F_HAT);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordtype">void</span> nfsft_init_advanced(<a class="code" href="structnfsft__plan.html">nfsft_plan</a>* plan, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M,</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> {</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="comment">/* Call nfsft_init_guru with the flags and default NFFT cut-off. */</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> nfsft_init_guru(plan, N, M, flags, PRE_PHI_HUT | PRE_PSI | FFTW_INIT |</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> FFT_OUT_OF_PLACE, <a class="code" href="group__nfsft.html#ga206c4faaf800b49dcb14e26148fa9ac6" title="The default NFFT cutoff parameter.">NFSFT_DEFAULT_NFFT_CUTOFF</a>);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordtype">void</span> nfsft_init_guru(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags,</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfft_flags, <span class="keywordtype">int</span> nfft_cutoff)</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> {</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordtype">int</span> *nfft_size; <span class="comment">/*< NFFT size */</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordtype">int</span> *fftw_size; <span class="comment">/*< FFTW size */</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="comment">/* Save the flags in the plan. */</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> = flags;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="comment">/* Save the bandwidth N and the number of samples M in the plan. */</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> = N;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a> = M;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment">/* Calculate the next greater power of two with respect to the bandwidth N</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="comment"> * and the corresponding exponent. */</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="comment">//next_power_of_2_exp(plan->N,&plan->NPT,&plan->t);</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="comment">/* Save length of array of Fourier coefficients. Owing to the data layout the</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="comment"> * length is (2N+2)(2N+2) */</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> plan-><a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a> = (2*plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>+2)*(2*plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>+2);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="comment">/* Allocate memory for auxilliary array of spherical Fourier coefficients,</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="comment"> * if neccesary. */</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_PRESERVE_F_HAT)</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> {</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a> = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(plan-><a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title=" [...]
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> }</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="comment">/* Allocate memory for spherical Fourier coefficients, if neccesary. */</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_MALLOC_F_HAT)</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> {</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(plan-><a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" [...]
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> }</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="comment">/* Allocate memory for samples, if neccesary. */</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_MALLOC_F)</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> {</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total numb [...]
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> }</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment">/* Allocate memory for nodes, if neccesary. */</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_MALLOC_X)</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> {</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>*2*<span class="keyword" [...]
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> }</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="comment">/* Check if fast algorithm is activated. */</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_NO_FAST_ALGORITHM)</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> {</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> }</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> {</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> nfft_size = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> fftw_size = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> nfft_size[0] = 2*plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>+2;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> nfft_size[1] = 2*plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>+2;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> fftw_size[0] = 4*plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> fftw_size[1] = 4*plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> nfft_init_guru(&plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>, 2, nfft_size, plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>, fftw_size,</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> nfft_cutoff, nfft_flags,</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> FFTW_ESTIMATE | FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="comment">/* Assign angle array. */</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a> = plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="comment">/* Assign result array. */</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size [...]
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="comment">/* Assign Fourier coefficients array. */</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector [...]
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="comment">/* Precompute. */</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="comment">//nfft_precompute_one_psi(&plan->plan_nfft);</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="comment">/* Free auxilliary arrays. */</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(nfft_size);</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(fftw_size);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> }</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> plan-><a class="code" href="structnfsft__plan.html#a01bf30c31f886ffa9d486c010a452051" title="Pointer to the own transform.">mv_trafo</a> = (void (*) (<span class="keywordtype">void</span>* ))nfsft_trafo;</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> plan-><a class="code" href="structnfsft__plan.html#a14cc99f56f6a61958aef26f80aac6f12" title="Pointer to the own adjoint.">mv_adjoint</a> = (void (*) (<span class="keywordtype">void</span>* ))nfsft_adjoint;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> }</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordtype">void</span> nfsft_precompute(<span class="keywordtype">int</span> N, <span class="keywordtype">double</span> kappa, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfsft_flags,</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fpt_flags)</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> {</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="keywordtype">int</span> n; <span class="comment">/*< The order n */</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="comment">/* Check if already initialized. */</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">if</span> (wisdom.<a class="code" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740" title="Indicates wether the structure has been initialized.">initialized</a> == <span class="keyword">true</span>)</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> {</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> }</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="preprocessor"></span><span class="preprocessor"> #pragma omp parallel default(shared)</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="preprocessor"></span> {</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keywordtype">int</span> nthreads = omp_get_num_threads();</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keywordtype">int</span> threadid = omp_get_thread_num();</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="preprocessor"> #pragma omp single</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="preprocessor"></span> {</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> wisdom.nthreads = nthreads;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> }</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> }</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="comment">/* Save the precomputation flags. */</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> wisdom.flags = nfsft_flags;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="comment">/* Compute and save N_max = 2^{\ceil{log_2 N}} as next greater</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="comment"> * power of two with respect to N. */</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> X(next_power_of_2_exp)(N,&wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>,&wisdom.<a class="code" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4" title="The logarithm /f$t = N_{{max}}/f$ of the maximum bandwidth.">T_MAX</a>);</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="comment">/* Check, if precomputation for direct algorithms needs to be performed. */</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">if</span> (wisdom.flags & NFSFT_NO_DIRECT_ALGORITHM)</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> {</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a> = NULL;</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a> = NULL;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a> = NULL;</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> }</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> {</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="comment">/* Allocate memory for three-term recursion coefficients. */</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href="st [...]
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href="str [...]
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href="st [...]
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="comment">/* Compute three-term recurrence coefficients alpha_k^n, beta_k^n, and</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="comment"> * gamma_k^n. */</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <a class="code" href="group__nfsft.html#ga6b01d5f2e8b3a026906e977118d7b0d2" title="Compute three-term-recurrence coefficients of associated Legendre functions for .">alpha_al_all</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P [...]
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <a class="code" href="group__nfsft.html#gaf0fb6a3993b3c956bea8fa75e3a71290" title="Compute three-term-recurrence coefficients of associated Legendre functions for .">beta_al_all</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_ [...]
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <a class="code" href="group__nfsft.html#ga88de851c8f9a4c042ad101cb4fb8c51d" title="Compute three-term-recurrence coefficients of associated Legendre functions for .">gamma_al_all</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P [...]
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> }</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="comment">/* Check, if precomputation for fast algorithms needs to be performed. */</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keywordflow">if</span> (wisdom.flags & NFSFT_NO_FAST_ALGORITHM)</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> {</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> }</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a> >= <a class="code" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3" title="The break-even bandwidth .">NFSFT_BREAK_EVEN</a>)</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> {</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="comment">/* Precompute data for DPT/FPT. */</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="comment">/* Check, if recursion coefficients have already been calculated. */</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keywordflow">if</span> (wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a> != NULL)</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> {</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="preprocessor"></span><span class="preprocessor"> #pragma omp parallel default(shared) private(n)</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="preprocessor"></span> {</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keywordtype">int</span> nthreads = omp_get_num_threads();</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="keywordtype">int</span> threadid = omp_get_thread_num();</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="preprocessor"> #pragma omp single</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="preprocessor"></span> {</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> wisdom.nthreads = nthreads;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> wisdom.set_threads = (<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(nthreads*<span class="keyword">sizeof</span>(<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a>));</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> }</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> wisdom.set_threads[threadid] = fpt_init(wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>+1, wisdom.<a class="code" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4" title="The logarithm /f$t = N_{{max}}/f$ of the maximum bandwidth.">T_MAX</a>,</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> fpt_flags | FPT_AL_SYMMETRY | FPT_PERSISTENT_DATA);</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="keywordflow">for</span> (n = 0; n <= wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>; n++)</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> fpt_precompute(wisdom.set_threads[threadid],n,&wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>[ROW(n)],</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> &wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>[ROW(n)], &wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f [...]
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> }</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="preprocessor"></span> <span class="comment">/* Use the recursion coefficients to precompute FPT data using persistent</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="comment"> * arrays. */</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a> = fpt_init(wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>+1, wisdom.<a class="code" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4" title="The log [...]
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> fpt_flags | FPT_AL_SYMMETRY | FPT_PERSISTENT_DATA);</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">for</span> (n = 0; n <= wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>; n++)</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> {</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="comment">/*fprintf(stderr,"%d\n",n);</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="comment"> fflush(stderr);*/</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="comment">/* Precompute data for FPT transformation for order n. */</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> fpt_precompute(wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>,n,&wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^ [...]
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> &wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>[ROW(n)],n,kappa);</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> }</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> {</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="preprocessor"></span><span class="preprocessor"> #pragma omp parallel default(shared) private(n)</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="preprocessor"></span> {</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>, *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients [...]
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordtype">int</span> nthreads = omp_get_num_threads();</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="keywordtype">int</span> threadid = omp_get_thread_num();</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="preprocessor"> #pragma omp single</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="preprocessor"></span> {</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> wisdom.nthreads = nthreads;</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> wisdom.set_threads = (<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(nthreads*<span class="keyword">sizeof</span>(<a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a>));</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> }</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> alpha = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>+2)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> beta = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>+2)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> gamma = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>+2)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> wisdom.set_threads[threadid] = fpt_init(wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>+1, wisdom.<a class="code" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4" title="The logarithm /f$t = N_{{max}}/f$ of the maximum bandwidth.">T_MAX</a>,</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> fpt_flags | FPT_AL_SYMMETRY);</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="keywordflow">for</span> (n = 0; n <= wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>; n++)</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> {</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> alpha_al_row(alpha,wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>,n);</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> beta_al_row(beta,wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>,n);</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> gamma_al_row(gamma,wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>,n);</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> </div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="comment">/* Precompute data for FPT transformation for order n. */</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> fpt_precompute(wisdom.set_threads[threadid],n,alpha,beta,gamma,n,</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> kappa);</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> }</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="comment">/* Free auxilliary arrays. */</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(alpha);</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(beta);</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(gamma);</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> }</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="preprocessor"></span> <span class="comment">/* Allocate memory for three-term recursion coefficients. */</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href=" [...]
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href="s [...]
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((wisdom.<a class="code" href=" [...]
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a> = fpt_init(wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>+1, wisdom.<a class="code" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4" title="The log [...]
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> fpt_flags | FPT_AL_SYMMETRY);</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keywordflow">for</span> (n = 0; n <= wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>; n++)</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> {</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="comment">/*fprintf(stderr,"%d NO_DIRECT\n",n);</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="comment"> fflush(stderr);*/</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="comment">/* Compute three-term recurrence coefficients alpha_k^n, beta_k^n, and</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="comment"> * gamma_k^n. */</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> alpha_al_row(wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>,wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>,n);</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> beta_al_row(wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>,wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>,n);</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> gamma_al_row(wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>,wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>,n);</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="comment">/* Precompute data for FPT transformation for order n. */</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> fpt_precompute(wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>,n,wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$. [...]
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> kappa);</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> }</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="comment">/* Free auxilliary arrays. */</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>);</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>);</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>);</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="preprocessor"></span> wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a> = NULL;</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a> = NULL;</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a> = NULL;</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> }</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> }</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="comment">/* Wisdom has been initialised. */</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> wisdom.<a class="code" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740" title="Indicates wether the structure has been initialized.">initialized</a> = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> }</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keywordtype">void</span> nfsft_forget(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> {</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="comment">/* Check if wisdom has been initialised. */</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="keywordflow">if</span> (wisdom.<a class="code" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740" title="Indicates wether the structure has been initialized.">initialized</a> == <span class="keyword">false</span>)</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> {</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="comment">/* Nothing to do. */</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> }</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="comment">/* Check, if precomputation for direct algorithms has been performed. */</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="keywordflow">if</span> (wisdom.flags & NFSFT_NO_DIRECT_ALGORITHM)</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> {</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> }</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> {</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="comment">/* Free arrays holding three-term recurrence coefficients. */</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>);</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>);</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>);</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a> = NULL;</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> wisdom.<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a> = NULL;</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a> = NULL;</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> }</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="comment">/* Check, if precomputation for fast algorithms has been performed. */</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="keywordflow">if</span> (wisdom.flags & NFSFT_NO_FAST_ALGORITHM)</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> {</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> }</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a> >= <a class="code" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3" title="The break-even bandwidth .">NFSFT_BREAK_EVEN</a>)</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> {</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="preprocessor"></span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="keywordflow">for</span> (k = 0; k < wisdom.nthreads; k++)</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> fpt_finalize(wisdom.set_threads[k]);</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(wisdom.set_threads);</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="preprocessor"></span> <span class="comment">/* Free precomputed data for FPT transformation. */</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> fpt_finalize(wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>);</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="comment">/* Wisdom is now uninitialised. */</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> wisdom.<a class="code" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740" title="Indicates wether the structure has been initialized.">initialized</a> = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> }</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="keywordtype">void</span> nfsft_finalize(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan)</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> {</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="keywordflow">if</span> (!plan)</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="comment">/* Finalise the nfft plan. */</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> nfft_finalize(&plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>);</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="comment">/* De-allocate memory for auxilliary array of spherical Fourier coefficients,</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="comment"> * if neccesary. */</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_PRESERVE_F_HAT)</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> {</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>);</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> }</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="comment">/* De-allocate memory for spherical Fourier coefficients, if necessary. */</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_MALLOC_F_HAT)</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> {</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="comment">//fprintf(stderr,"deallocating f_hat\n");</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> }</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="comment">/* De-allocate memory for samples, if neccesary. */</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_MALLOC_F)</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> {</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="comment">//fprintf(stderr,"deallocating f\n");</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>);</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> }</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> </div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="comment">/* De-allocate memory for nodes, if neccesary. */</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_MALLOC_X)</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> {</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="comment">//fprintf(stderr,"deallocating x\n");</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>);</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> }</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> }</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keywordtype">void</span> nfsft_trafo_direct(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan)</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> {</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="keywordtype">int</span> m; <span class="comment">/*< The node index */</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="keywordtype">int</span> k; <span class="comment">/*< The degree k */</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="keywordtype">int</span> n; <span class="comment">/*< The order n */</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="keywordtype">int</span> n_abs; <span class="comment">/*< The absolute value of the order n, ie n_abs = |n| */</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>; <span class="comment">/*< Pointer to current three-term recurrence</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="comment"> coefficient alpha_k^n for associated Legendre</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="comment"> functions P_k^n */</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>; <span class="comment">/*< Pointer to current three-term recurrence</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="comment"> coefficient beta_k^n for associated Legendre</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="comment"> functions P_k^n */</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="keywordtype">double</span> _Complex *a; <span class="comment">/*< Pointer to auxilliary array for Clenshaw algor. */</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="keywordtype">double</span> _Complex it1; <span class="comment">/*< Auxilliary variable for Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="keywordtype">double</span> _Complex it2; <span class="comment">/*< Auxilliary variable for Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="keywordtype">double</span> _Complex temp; <span class="comment">/*< Auxilliary variable for Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="keywordtype">double</span> _Complex f_m; <span class="comment">/*< The final function value f_m = f(x_m) for a</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="comment"> single node. */</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="keywordtype">double</span> stheta; <span class="comment">/*< Current angle theta for Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="keywordtype">double</span> sphi; <span class="comment">/*< Current angle phi for Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> </div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="preprocessor"></span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keywordflow">if</span> (wisdom.flags & NFSFT_NO_DIRECT_ALGORITHM)</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> {</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> }</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> </div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="comment">/* Copy spherical Fourier coefficients, if necessary. */</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_PRESERVE_F_HAT)</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> {</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> memcpy(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>,plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,plan-><a class="code" href="structnfsft__plan.h [...]
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> }</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> {</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a> = plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> }</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> </div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="comment">/* Check, if we compute with L^2-normalized spherical harmonics. If so,</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="comment"> * multiply spherical Fourier coefficients with corresponding normalization</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="comment"> * weight. */</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_NORMALIZED)</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> {</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="comment">/* Traverse Fourier coefficients array. */</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k,n)</span></div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> {</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> {</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="comment">/* Multiply with normalization weight. */</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(k,n,plan)] *=</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> sqrt((2*k+1)/(4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>));</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> }</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> }</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> }</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="comment">/* Distinguish by bandwidth M. */</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> == 0)</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> {</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="comment">/* N = 0 */</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> </div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="comment">/* Constant function */</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="keywordflow">for</span> (m = 0; m < plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; m++)</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> {</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[m] = plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(0,0,plan)];</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> }</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> }</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> {</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="comment">/* N > 0 */</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> </div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="comment">/* Evaluate</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="comment"> * \sum_{k=0}^N \sum_{n=-k}^k a_k^n P_k^{|n|}(cos theta_m) e^{i n phi_m}</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="comment"> * = \sum_{n=-N}^N \sum_{k=|n|}^N a_k^n P_k^{|n|}(cos theta_m)</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="comment"> * e^{i n phi_m}.</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(m,stheta,sphi,f_m,n,a,n_abs,alpha,gamma,it2,it1,k,temp)</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (m = 0; m < plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; m++)</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> {</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="comment">/* Scale angle theta from [0,1/2] to [0,pi] and apply cosine. */</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> stheta = cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*m+1]);</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="comment">/* Scale angle phi from [-1/2,1/2] to [-pi,pi]. */</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> sphi = 2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*m];</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="comment">/* Initialize result for current node. */</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> f_m = 0.0;</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> </div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="comment">/* For n = -N,...,N, evaluate</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="comment"> * b_n := \sum_{k=|n|}^N a_k^n P_k^{|n|}(cos theta_m)</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="comment"> * using Clenshaw's algorithm.</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> {</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="comment">/* Get pointer to Fourier coefficients vector for current order n. */</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> a = &(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(0,n,plan)]);</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="comment">/* Take absolute value of n. */</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> n_abs = abs(n);</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> </div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="comment">/* Get pointers to three-term recurrence coefficients arrays. */</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> alpha = &(wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>[ROW(n_abs)]);</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> gamma = &(wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>[ROW(n_abs)]);</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="comment">/* Clenshaw's algorithm */</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> it2 = a[plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>];</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> it1 = a[plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>-1];</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="keywordflow">for</span> (k = plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k > n_abs + 1; k--)</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> {</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> temp = a[k-2] + it2 * gamma[k];</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> it2 = it1 + it2 * alpha[k] * stheta;</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> it1 = temp;</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> }</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> </div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="comment">/* Compute final step if neccesary. */</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="keywordflow">if</span> (n_abs < plan->N)</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> {</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> it2 = it1 + it2 * wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>[ROWK(n_abs)+1] * stheta;</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> }</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="comment">/* Compute final result by multiplying the fixed part</span></div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="comment"> * gamma_|n| (1-cos^2(theta))^{|n|/2}</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> <span class="comment"> * for order n and the exponential part</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="comment"> * e^{i n phi}</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="comment"> * and add the result to f_m.</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> f_m += it2 * wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>[ROW(n_abs)] *</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> pow(1- stheta * stheta, 0.5*n_abs) * cexp(_Complex_I*n*sphi);</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> }</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="comment">/* Write result f_m for current node to array f. */</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[m] = f_m;</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> }</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> }</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> }</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> </div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="keywordtype">void</span> nfsft_adjoint_direct(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan)</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> {</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> <span class="keywordtype">int</span> m; <span class="comment">/*< The node index */</span></div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="keywordtype">int</span> k; <span class="comment">/*< The degree k */</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="keywordtype">int</span> n; <span class="comment">/*< The order n */</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="keywordtype">int</span> n_abs; <span class="comment">/*< The absolute value of the order n, ie n_abs = |n| */</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>; <span class="comment">/*< Pointer to current three-term recurrence</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <span class="comment"> coefficient alpha_k^n for associated Legendre</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> <span class="comment"> functions P_k^n */</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>; <span class="comment">/*< Pointer to current three-term recurrence</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="comment"> coefficient beta_k^n for associated Legendre</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="comment"> functions P_k^n */</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="keywordtype">double</span> _Complex it1; <span class="comment">/*< Auxilliary variable for Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="keywordtype">double</span> _Complex it2; <span class="comment">/*< Auxilliary variable for Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="keywordtype">double</span> _Complex temp; <span class="comment">/*< Auxilliary variable for Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="keywordtype">double</span> stheta; <span class="comment">/*< Current angle theta for Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="keywordtype">double</span> sphi; <span class="comment">/*< Current angle phi for Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> </div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="preprocessor"></span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="keywordflow">if</span> (wisdom.flags & NFSFT_NO_DIRECT_ALGORITHM)</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> {</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> }</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> </div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="comment">/* Initialise spherical Fourier coefficients array with zeros. */</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> memset(plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,0U,plan-><a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> [...]
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> </div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="comment">/* Distinguish by bandwidth N. */</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> == 0)</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> {</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> <span class="comment">/* N == 0 */</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> </div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="comment">/* Constant function */</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="keywordflow">for</span> (m = 0; m < plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; m++)</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> {</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(0,0,plan)] += plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[m];</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> }</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> }</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> {</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="comment">/* N > 0 */</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> </div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> <span class="preprocessor"></span> <span class="comment">/* Traverse all orders n. */</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(n,n_abs,alpha,gamma,m,stheta,sphi,it2,it1,k,temp)</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> {</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="comment">/* Take absolute value of n. */</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> n_abs = abs(n);</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> </div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="comment">/* Get pointers to three-term recurrence coefficients arrays. */</span></div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> alpha = &(wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>[ROW(n_abs)]);</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> gamma = &(wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>[ROW(n_abs)]);</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> </div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> <span class="keywordflow">for</span> (m = 0; m < plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; m++)</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> {</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> <span class="comment">/* Scale angle theta from [0,1/2] to [0,pi] and apply cosine. */</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> stheta = cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*m+1]);</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> <span class="comment">/* Scale angle phi from [-1/2,1/2] to [-pi,pi]. */</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> sphi = 2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*m];</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> </div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="comment">/* Transposed Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> </div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="comment">/* Initial step */</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> it1 = plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[m] * wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n [...]
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> pow(1 - stheta * stheta, 0.5*n_abs) * cexp(-_Complex_I*n*sphi);</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(n_abs,n,plan)] += it1;</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> it2 = 0.0;</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> </div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="keywordflow">if</span> (n_abs < plan->N)</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> {</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> it2 = it1 * wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>[ROWK(n_abs)+1] * stheta;</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(n_abs+1,n,plan)] += it2;</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> }</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> </div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> <span class="comment">/* Loop for transposed Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="keywordflow">for</span> (k = n_abs+2; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> {</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> temp = it2;</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> it2 = alpha[k] * stheta * it2 + gamma[k] * it1;</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> it1 = temp;</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,plan)] += it2;</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> }</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> }</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> }</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> <span class="preprocessor"></span> <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="keywordflow">for</span> (m = 0; m < plan-><a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; m++)</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> {</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="comment">/* Scale angle theta from [0,1/2] to [0,pi] and apply cosine. */</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> stheta = cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*m+1]);</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="comment">/* Scale angle phi from [-1/2,1/2] to [-pi,pi]. */</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> sphi = 2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*m];</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> </div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="comment">/* Traverse all orders n. */</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> {</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> <span class="comment">/* Take absolute value of n. */</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> n_abs = abs(n);</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> </div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="comment">/* Get pointers to three-term recurrence coefficients arrays. */</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> alpha = &(wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>[ROW(n_abs)]);</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> gamma = &(wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>[ROW(n_abs)]);</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> </div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <span class="comment">/* Transposed Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="comment">/* Initial step */</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> it1 = plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[m] * wisdom.<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f [...]
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> pow(1 - stheta * stheta, 0.5*n_abs) * cexp(-_Complex_I*n*sphi);</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(n_abs,n,plan)] += it1;</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> it2 = 0.0;</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="keywordflow">if</span> (n_abs < plan->N)</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> {</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> it2 = it1 * wisdom.<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>[ROWK(n_abs)+1] * stheta;</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(n_abs+1,n,plan)] += it2;</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> }</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> </div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="comment">/* Loop for transposed Clenshaw algorithm */</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> <span class="keywordflow">for</span> (k = n_abs+2; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> {</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> temp = it2;</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> it2 = alpha[k] * stheta * it2 + gamma[k] * it1;</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> it1 = temp;</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,plan)] += it2;</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> }</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> }</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> }</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> </div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> <span class="comment">/* Check, if we compute with L^2-normalized spherical harmonics. If so,</span></div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="comment"> * multiply spherical Fourier coefficients with corresponding normalization</span></div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="comment"> * weight. */</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_NORMALIZED)</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> {</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="comment">/* Traverse Fourier coefficients array. */</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k,n)</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> {</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> {</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="comment">/* Multiply with normalization weight. */</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,plan)] *=</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> sqrt((2*k+1)/(4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>));</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> }</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> }</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> }</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> </div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="comment">/* Set unused coefficients to zero. */</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_ZERO_F_HAT)</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> {</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N+1; n++)</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> {</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> memset(&plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(-plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>-1,n,plan)],0U,</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>+1+abs(n))*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> }</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> }</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> }</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> </div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="keywordtype">void</span> nfsft_trafo(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan)</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> {</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="keywordtype">int</span> k; <span class="comment">/*< The degree k */</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="keywordtype">int</span> n; <span class="comment">/*< The order n */</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="preprocessor"></span> ticks t0, t1;</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <span class="preprocessor"></span><span class="preprocessor"> #ifdef DEBUG</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> <span class="preprocessor"></span> <span class="keywordtype">double</span> t, t_pre, t_nfft, t_fpt, t_c2e, t_norm;</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> t_pre = 0.0;</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> t_norm = 0.0;</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> t_fpt = 0.0;</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> t_c2e = 0.0;</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> t_nfft = 0.0;</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> <span class="preprocessor"> #endif</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> <span class="preprocessor"></span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="keywordflow">if</span> (wisdom.flags & NFSFT_NO_FAST_ALGORITHM)</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> {</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> }</div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> </div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> <span class="comment">/* Check, if precomputation was done and that the bandwidth N is not too</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <span class="comment"> * big.</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="keywordflow">if</span> (wisdom.<a class="code" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740" title="Indicates wether the structure has been initialized.">initialized</a> == 0 || plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> > wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b [...]
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> {</div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> }</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> </div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="comment">/* Check, if slow transformation should be used due to small bandwidth. */</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> < <a class="code" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3" title="The break-even bandwidth .">NFSFT_BREAK_EVEN</a>)</div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> {</div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> <span class="comment">/* Use NDSFT. */</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> nfsft_trafo_direct(plan);</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> }</div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> </div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="comment">/* Check for correct value of the bandwidth N. */</span></div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> <= wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>)</div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> {</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> <span class="comment">/* Copy spherical Fourier coefficients, if necessary. */</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_PRESERVE_F_HAT)</div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> {</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> memcpy(plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>,plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,plan-><a class="code" href="structnfsft__plan [...]
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> }</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> {</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a> = plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> }</div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="comment">/* Propagate pointer values to the internal NFFT plan to assure</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="comment"> * consistency. Pointers may have been modified externally.</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a> = plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>;</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size i [...]
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internal [...]
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> </div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> <span class="comment">/* Check, if we compute with L^2-normalized spherical harmonics. If so,</span></div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="comment"> * multiply spherical Fourier coefficients with corresponding normalization</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> <span class="comment"> * weight. */</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_NORMALIZED)</div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> {</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="comment">/* Traverse Fourier coefficients array. */</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k,n)</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> {</div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> {</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="comment">/* Multiply with normalization weight. */</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(k,n,plan)] *=</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> sqrt((2*k+1)/(4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>));</div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> }</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> }</div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> }</div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> </div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="preprocessor"></span> t0 = getticks();</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="preprocessor"></span> <span class="comment">/* Check, which polynomial transform algorithm should be used. */</span></div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_USE_DPT)</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> {</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="preprocessor"></span><span class="preprocessor"> #pragma omp parallel for default(shared) private(n) num_threads(wisdom.nthreads)</span></div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> fpt_trafo_direct(wisdom.set_threads[omp_get_thread_num()],abs(n),</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> &plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(abs(n),n,plan)],</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> &plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(0,n,plan)],</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,0U);</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="preprocessor"></span> <span class="comment">/* Use direct discrete polynomial transform DPT. */</span></div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> {</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="comment">//fprintf(stderr,"nfsft_trafo: n = %d\n",n);</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> fpt_trafo_direct(wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>,abs(n),</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> &plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(abs(n),n,plan)],</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> &plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(0,n,plan)],</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,0U);</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> }</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> {</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> <span class="preprocessor"></span><span class="preprocessor"> #pragma omp parallel for default(shared) private(n) num_threads(wisdom.nthreads)</span></div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> fpt_trafo(wisdom.set_threads[omp_get_thread_num()],abs(n),</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> &plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(abs(n),n,plan)],</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> &plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(0,n,plan)],</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,0U);</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="preprocessor"></span> <span class="comment">/* Use fast polynomial transform FPT. */</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> {</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="comment">//fprintf(stderr,"nfsft_trafo: n = %d\n",n);</span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> fpt_trafo(wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>,abs(n),</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> &plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(abs(n),n,plan)],</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> &plan-><a class="code" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548" title="Internally used pointer to spherical Fourier coefficients.">f_hat_intern</a>[NFSFT_INDEX(0,n,plan)],</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,0U);</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> }</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="preprocessor"></span> t1 = getticks();</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="preprocessor"></span> t0 = getticks();</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="preprocessor"></span> <span class="comment">/* Convert Chebyshev coefficients to Fourier coefficients. */</span></div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <a class="code" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656" title="Converts coefficients with , from a linear combination of Chebyshev polynomials to coefficients m...">c2e</a>(plan);</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="preprocessor"></span> t1 = getticks();</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> <span class="preprocessor"></span> t0 = getticks();</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="preprocessor"></span> <span class="comment">/* Check, which nonequispaced discrete Fourier transform algorithm should</span></div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> <span class="comment"> * be used.</span></div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_USE_NDFT)</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> {</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="comment">/* Use NDFT. */</span></div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> nfft_trafo_direct(&plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>);</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> }</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> {</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="comment">/* Use NFFT. */</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="comment">//fprintf(stderr,"nfsft_adjoint: nfft_trafo\n");</span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> nfft_trafo_2d(&plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>);</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> }</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> <span class="preprocessor"></span> t1 = getticks();</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> }</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> </div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="keywordtype">void</span> nfsft_adjoint(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan)</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> {</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="keywordtype">int</span> k; <span class="comment">/*< The degree k */</span></div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="keywordtype">int</span> n; <span class="comment">/*< The order n */</span></div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="preprocessor"></span> ticks t0, t1;</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="preprocessor"></span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <span class="keywordflow">if</span> (wisdom.flags & NFSFT_NO_FAST_ALGORITHM)</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> {</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> }</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> </div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> <span class="comment">/* Check, if precomputation was done and that the bandwidth N is not too</span></div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> <span class="comment"> * big.</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="keywordflow">if</span> (wisdom.<a class="code" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740" title="Indicates wether the structure has been initialized.">initialized</a> == 0 || plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> > wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b [...]
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> {</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> }</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> </div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> <span class="comment">/* Check, if slow transformation should be used due to small bandwidth. */</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> < <a class="code" href="group__nfsft.html#ga54b840898df97bcd14af4cb004650ed3" title="The break-even bandwidth .">NFSFT_BREAK_EVEN</a>)</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> {</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> <span class="comment">/* Use adjoint NDSFT. */</span></div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> nfsft_adjoint_direct(plan);</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> }</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="comment">/* Check for correct value of the bandwidth N. */</span></div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a> <= wisdom.<a class="code" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51" title="Stores precomputation flags.">N_MAX</a>)</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> {</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> <span class="comment">//fprintf(stderr,"nfsft_adjoint: Starting\n");</span></div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> <span class="comment">/* Propagate pointer values to the internal NFFT plan to assure</span></div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> <span class="comment"> * consistency. Pointers may have been modified externally.</span></div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a> = plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>;</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = plan-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size i [...]
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector o [...]
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> </div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> <span class="preprocessor"></span> t0 = getticks();</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="preprocessor"></span> <span class="comment">/* Check, which adjoint nonequispaced discrete Fourier transform algorithm</span></div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> <span class="comment"> * should be used.</span></div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_USE_NDFT)</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> {</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> <span class="comment">//fprintf(stderr,"nfsft_adjoint: Executing nfft_adjoint_direct\n");</span></div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> <span class="comment">/* Use adjoint NDFT. */</span></div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> nfft_adjoint_direct(&plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>);</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> }</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> {</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="comment">//fprintf(stderr,"nfsft_adjoint: Executing nfft_adjoint\n");</span></div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> <span class="comment">//fprintf(stderr,"nfsft_adjoint: nfft_adjoint\n");</span></div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="comment">/* Use adjoint NFFT. */</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> nfft_adjoint_2d(&plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>);</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> }</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="preprocessor"></span> t1 = getticks();</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="comment">//fprintf(stderr,"nfsft_adjoint: Executing c2e_transposed\n");</span></div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <span class="preprocessor"></span> t0 = getticks();</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> <span class="preprocessor"></span> <span class="comment">/* Convert Fourier coefficients to Chebyshev coefficients. */</span></div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> <a class="code" href="group__nfsft.html#ga0e033457136bc0ecb18bb57d3ee5aa37" title="Transposed version of the function c2e.">c2e_transposed</a>(plan);</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> <span class="preprocessor"></span> t1 = getticks();</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="preprocessor"></span> t0 = getticks();</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="preprocessor"></span> <span class="comment">/* Check, which transposed polynomial transform algorithm should be used */</span></div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_USE_DPT)</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> {</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> <span class="preprocessor"></span><span class="preprocessor"> #pragma omp parallel for default(shared) private(n) num_threads(wisdom.nthreads)</span></div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> fpt_transposed_direct(wisdom.set_threads[omp_get_thread_num()],abs(n),</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> &plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(abs(n),n,plan)],</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> &plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(0,n,plan)],</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,0U);</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="preprocessor"></span> <span class="comment">/* Use transposed DPT. */</span></div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> {</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="comment">//fprintf(stderr,"nfsft_adjoint: Executing dpt_transposed\n");</span></div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> fpt_transposed_direct(wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>,abs(n),</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> &plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(abs(n),n,plan)],</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> &plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(0,n,plan)],</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,0U);</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> }</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> {</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> <span class="preprocessor"></span><span class="preprocessor"> #pragma omp parallel for default(shared) private(n) num_threads(wisdom.nthreads)</span></div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> fpt_transposed(wisdom.set_threads[omp_get_thread_num()],abs(n),</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> &plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(abs(n),n,plan)],</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> &plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(0,n,plan)],</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,0U);</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="preprocessor"></span> <span class="comment">//fprintf(stderr,"nfsft_adjoint: fpt_transposed\n");</span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="comment">/* Use transposed FPT. */</span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N; n++)</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> {</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> <span class="comment">//fprintf(stderr,"nfsft_adjoint: Executing fpt_transposed\n");</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> fpt_transposed(wisdom.<a class="code" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2" title="Structure for discrete polynomial transform (DPT)">set</a>,abs(n),</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> &plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(abs(n),n,plan)],</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> &plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(0,n,plan)],</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>,0U);</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> }</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="preprocessor">#ifdef MEASURE_TIME</span></div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="preprocessor"></span> t1 = getticks();</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> plan-><a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> <span class="comment">/* Check, if we compute with L^2-normalized spherical harmonics. If so,</span></div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="comment"> * multiply spherical Fourier coefficients with corresponding normalization</span></div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="comment"> * weight. */</span></div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_NORMALIZED)</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> {</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> <span class="comment">//fprintf(stderr,"nfsft_adjoint: Normalizing\n");</span></div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> <span class="comment">/* Traverse Fourier coefficients array. */</span></div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="preprocessor"> #pragma omp parallel for default(shared) private(k,n)</span></div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="preprocessor"></span> <span class="keywordflow">for</span> (k = 0; k <= plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> {</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> {</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="comment">/* Multiply with normalization weight. */</span></div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,plan)] *=</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> sqrt((2*k+1)/(4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>));</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> }</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> }</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> }</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> </div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="comment">/* Set unused coefficients to zero. */</span></div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694" title="the planner flags">flags</a> & NFSFT_ZERO_F_HAT)</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> {</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> <span class="comment">//fprintf(stderr,"nfsft_adjoint: Setting to zero\n");</span></div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="keywordflow">for</span> (n = -plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; n <= plan->N+1; n++)</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> {</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> memset(&plan-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(-plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>-1,n,plan)],0U,</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> (plan-><a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>+1+abs(n))*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> }</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> }</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> <span class="comment">//fprintf(stderr,"nfsft_adjoint: Finished\n");</span></div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> }</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> }</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> </div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> <span class="keywordtype">void</span> nfsft_precompute_x(<a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan)</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> {</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> <span class="comment">/* Pass angle array to NFFT plan. */</span></div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a> = plan-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>;</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> </div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> <span class="comment">/* Precompute. */</span></div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> nfft_precompute_one_psi(&plan-><a class="code" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e" title="the internal NFFT plan">plan_nfft</a>);</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> }</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfsft__benchomp_8c_source.html b/doc/api/html/nfsft__benchomp_8c_source.html
new file mode 100644
index 0000000..139527d
--- /dev/null
+++ b/doc/api/html/nfsft__benchomp_8c_source.html
@@ -0,0 +1,567 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfsft_benchomp.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_e6016a3bd4e6017d6b851aae5334ffd2.html">nfsft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfsft_benchomp.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <unistd.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <<a class="code" href="nfft3_8h.html">nfft3.h</a>></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#define NREPEAT 5</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">static</span> FILE* file_out_tex = NULL;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keywordtype">int</span> get_nthreads_array(<span class="keywordtype">int</span> **arr)</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordtype">int</span> max_threads = nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">int</span> alloc_num = 2;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">int</span> ret_number = 0;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">int</span> max_threads_pw2 = (max_threads / 2) * 2 == max_threads ? 1 : 0;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordflow">if</span> (max_threads <= 5)</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> *arr = (<span class="keywordtype">int</span>*) malloc(max_threads*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">for</span> (k = 0; k < max_threads; k++)</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> *(*arr + k) = k+1;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">return</span> max_threads;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordflow">for</span> (k = 1; k <= max_threads; k*=2, alloc_num++);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> *arr = (<span class="keywordtype">int</span>*) malloc(alloc_num*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">for</span> (k = 1; k <= max_threads; k*=2)</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">if</span> (k != max_threads && 2*k > max_threads && max_threads_pw2)</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> {</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> *(*arr + ret_number) = max_threads/2;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> ret_number++;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> *(*arr + ret_number) = k;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> ret_number++;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">if</span> (k != max_threads && 2*k > max_threads)</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> {</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> *(*arr + ret_number) = max_threads;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> ret_number++;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> }</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> }</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">return</span> ret_number;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> } </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> check_result_value(<span class="keyword">const</span> <span class="keywordtype">int</span> val, <span class="keyword">const</span> <span class="keywordtype">int</span> ok, <span class="keyword">const</span> <span class="keywordtype">char</span> *msg)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">if</span> (val != ok)</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> fprintf(stderr, <span class="stringliteral">"ERROR %s: %d not %d\n"</span>, msg, val, ok);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> exit(1);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">void</span> run_test_create(<span class="keywordtype">int</span> trafo_adjoint, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> {</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">char</span> cmd[1025];</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> snprintf(cmd, 1024, <span class="stringliteral">"./nfsft_benchomp_createdataset %d %d %d > nfsft_benchomp_test.data"</span>, trafo_adjoint, N, M);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> fprintf(stderr, <span class="stringliteral">"%s\n"</span>, cmd);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> check_result_value(system(cmd), 0, <span class="stringliteral">"createdataset"</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">void</span> run_test_init_output()</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> {</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> FILE *f = fopen(<span class="stringliteral">"nfsft_benchomp_test.result"</span>, <span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span> (f!= NULL)</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> fclose(f);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> {</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">int</span> trafo_adjoint;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">int</span> N;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">int</span> M;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">int</span> nfsft_flags;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">int</span> psi_flags;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> } <a class="code" href="structs__param.html">s_param</a>;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> {</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">double</span> avg;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">double</span> min;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">double</span> max;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> } <a class="code" href="structs__resval.html">s_resval</a>;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> {</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordtype">int</span> nthreads;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <a class="code" href="structs__resval.html">s_resval</a> resval[6];</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> } <a class="code" href="structs__result.html">s_result</a>;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> {</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <a class="code" href="structs__param.html">s_param</a> param;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <a class="code" href="structs__result.html">s_result</a> *results;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">int</span> nresults;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> } <a class="code" href="structs__testset.html">s_testset</a>;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordtype">void</span> run_test(<a class="code" href="structs__resval.html">s_resval</a> *res, <span class="keywordtype">int</span> nrepeat, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> nfsft_flags, <span class="keywordtype">int</span> psi_flags, <span class="keywordtype">int</span> nthreads)</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> {</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> FILE *f;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordtype">char</span> cmd[1025];</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordtype">int</span> r,t;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">for</span> (t = 0; t < 6; t++)</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> {</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> res[t].avg = 0.0; res[t].min = 1.0/0.0; res[t].max = 0.0;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">if</span> (nthreads < 2)</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> snprintf(cmd, 1024, <span class="stringliteral">"./nfsft_benchomp_detail_single %d %d %d %d < nfsft_benchomp_test.data > nfsft_benchomp_test.out"</span>, m, nfsft_flags, psi_flags, nrepeat);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> snprintf(cmd, 1024, <span class="stringliteral">"./nfsft_benchomp_detail_threads %d %d %d %d %d < nfsft_benchomp_test.data > nfsft_benchomp_test.out"</span>, m, nfsft_flags, psi_flags, nrepeat, nthreads);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> fprintf(stderr, <span class="stringliteral">"%s\n"</span>, cmd);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> check_result_value(system(cmd), 0, cmd);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> f = fopen(<span class="stringliteral">"nfsft_benchomp_test.out"</span>, <span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">for</span> (r = 0; r < nrepeat; r++)</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> {</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordtype">int</span> retval;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordtype">double</span> v[6];</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment">// FILE *f;</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment">// check_result_value(system(cmd), 0, cmd);</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment">// f = fopen("nfsft_benchomp_test.out", "r");</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> retval = fscanf(f, <span class="stringliteral">"%lg %lg %lg %lg %lg %lg"</span>, v, v+1, v+2, v+3, v+4, v+5);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> check_result_value(retval, 6, <span class="stringliteral">"read nfsft_benchomp_test.out"</span>);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment">// fclose(f);</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment">// fprintf(stderr, "%.3e %.3e %.3e %.3e %.3e %.3e\n", v[0], v[1], v[2], v[3], v[4], v[5]);</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">for</span> (t = 0; t < 6; t++)</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> {</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> res[t].avg += v[t];</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">if</span> (res[t].min > v[t])</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> res[t].min = v[t];</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">if</span> (res[t].max < v[t])</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> res[t].max = v[t];</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> }</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> fclose(f);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">for</span> (t = 0; t < 6; t++)</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> res[t].avg /= nrepeat;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> fprintf(stderr, <span class="stringliteral">"%d %d: "</span>, nthreads, nrepeat);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">for</span> (t = 0; t < 6; t++)</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> fprintf(stderr, <span class="stringliteral">"%.3e %.3e %.3e | "</span>, res[t].avg, res[t].min, res[t].max);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> fprintf(stderr, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_psi_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> {</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordflow">if</span> (flags & PRE_PSI)</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">return</span> <span class="stringliteral">"prepsi"</span>;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (flags & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">return</span> <span class="stringliteral">"unknownPSI"</span>;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">return</span> <span class="stringliteral">"nopsi"</span>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> }</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_sort_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> {</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">if</span> (flags & NFFT_SORT_NODES)</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">return</span> <span class="stringliteral">"sorted"</span>;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">return</span> <span class="stringliteral">"unsorted"</span>;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *get_adjoint_omp_string(<span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> {</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">if</span> (flags & NFFT_OMP_BLOCKWISE_ADJOINT)</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">return</span> <span class="stringliteral">"blockwise"</span>;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> }</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor">#define MASK_TA (1U<<1)</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_N (1U<<2)</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_M (1U<<4)</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_WINM (1U<<5)</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FLAGS_PSI (1U<<6)</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FLAGS_SORT (1U<<7)</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FLAGS_BW (1U<<8)</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor"></span><span class="preprocessor">#define MASK_FLAGS_FPT (1U<<9)</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> determine_different_parameters(<a class="code" href="structs__testset.html">s_testset</a> *testsets, <span class="keywordtype">int</span> ntestsets)</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> {</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mask = 0;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">if</span> (ntestsets < 2)</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">for</span> (t = 1; t < ntestsets; t++)</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> {</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">if</span> (testsets[t-1].param.trafo_adjoint != testsets[t].param.trafo_adjoint)</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> mask |= MASK_TA;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">if</span> (testsets[t-1].param.N != testsets[t].param.N)</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> mask |= MASK_N;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">if</span> (testsets[t-1].param.M != testsets[t].param.M)</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> mask |= MASK_M;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">if</span> (testsets[t-1].param.m != testsets[t].param.m)</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> mask |= MASK_WINM;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">if</span> ((testsets[t-1].param.psi_flags & PRE_ONE_PSI) != (testsets[t].param.psi_flags & PRE_ONE_PSI))</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> mask |= MASK_FLAGS_PSI;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">if</span> ((testsets[t-1].param.psi_flags & NFFT_SORT_NODES) != (testsets[t].param.psi_flags & NFFT_SORT_NODES))</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> mask |= MASK_FLAGS_SORT;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">if</span> ((testsets[t-1].param.psi_flags & NFFT_OMP_BLOCKWISE_ADJOINT) != (testsets[t].param.psi_flags & NFFT_OMP_BLOCKWISE_ADJOINT))</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> mask |= MASK_FLAGS_BW;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">if</span> ((testsets[t-1].param.nfsft_flags & NFSFT_USE_DPT) != (testsets[t].param.nfsft_flags & NFSFT_USE_DPT))</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> mask |= MASK_FLAGS_FPT;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> }</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">return</span> mask;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> }</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordtype">void</span> get_plot_title(<span class="keywordtype">char</span> *outstr, <span class="keywordtype">int</span> maxlen, <span class="keywordtype">char</span> *hostname, <a class="code" href="structs__param.html">s_param</a> param, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> diff_mask)</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> {</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mask = ~diff_mask;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordtype">int</span> offset = 0;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordtype">int</span> len;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> len = snprintf(outstr, maxlen, <span class="stringliteral">"%s"</span>, hostname);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> offset += len;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">if</span> (mask & MASK_TA)</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> {</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" $\\mathrm{NFSFT}%s$"</span>, param.trafo_adjoint==0?<span class="stringliteral">""</span>:<span class="stringliteral">"^\\top"</span>);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> offset += len;</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> }</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">if</span> (mask & MASK_N)</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> {</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" N=%d"</span>, param.N);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> offset += len;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">if</span> (mask & MASK_M)</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> {</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" M=%d"</span>, param.M);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> offset += len;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> }</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">if</span> (mask & MASK_WINM)</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> {</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" m=%d"</span>, param.m);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> offset += len;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> }</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">if</span> (mask & MASK_FLAGS_PSI)</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> {</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %s"</span>, get_psi_string(param.psi_flags));</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> offset += len;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> }</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">if</span> (mask & MASK_FLAGS_SORT)</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> {</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %s"</span>, get_sort_string(param.psi_flags));</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> offset += len;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> }</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">if</span> ((mask & MASK_FLAGS_BW) && strlen(get_adjoint_omp_string(param.psi_flags)) > 0)</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> {</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> len = snprintf(outstr+offset, maxlen-offset, <span class="stringliteral">" %s"</span>, get_adjoint_omp_string(param.psi_flags));</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> offset += len;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> }</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">if</span> (mask & MASK_FLAGS_FPT)</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> {</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> len = snprintf(outstr+offset, maxlen-offset, param.nfsft_flags & NFSFT_USE_DPT ? <span class="stringliteral">" DPT"</span> : <span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">if</span> (len < 0 || len+offset >= maxlen-1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> offset += len;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> }</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> }</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordtype">void</span> print_output_speedup_total_tref(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> *testsets, <span class="keywordtype">int</span> ntestsets, <span class="keywordtype">int</span> use_tref, <span class="keywordtype">double</span> tref)</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> {</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keywordtype">int</span> i, t;</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordtype">char</span> hostname[1025];</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keywordtype">char</span> plottitle[1025];</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> diff_mask = determine_different_parameters(testsets, ntestsets);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">if</span> (gethostname(hostname, 1024) != 0)</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> strncpy(hostname, <span class="stringliteral">"unnamed"</span>, 1024);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> get_plot_title(plottitle, 1024, hostname, testsets[0].param, diff_mask);</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> fprintf(out, <span class="stringliteral">"\\begin{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> fprintf(out, <span class="stringliteral">"\\begin{axis}["</span>);</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> fprintf(out, <span class="stringliteral">"width=0.9\\textwidth, height=0.6\\textwidth, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Speedup, xtick=data, legend style={ legend pos = north west, legend columns=1}, ymajorgrids=true, yminorgrids=true, minor y tick num=4, "</span>);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> fprintf(out, <span class="stringliteral">" title={%s}"</span>, plottitle);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> fprintf(out, <span class="stringliteral">" ]\n"</span>);</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">for</span> (t = 0; t < ntestsets; t++)</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> {</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <a class="code" href="structs__testset.html">s_testset</a> testset = testsets[t];</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> fprintf(stderr, <span class="stringliteral">"%s $\\mathrm{NFSFT}%s$ N=%d M=%d m=%d %s %s %s}"</span>, hostname, testset.param.trafo_adjoint==0?<span class="stringliteral">""</span>:<span class="stringliteral">"^\\top"</span>, testset.param.N, testset.param.M, testset.param.m, get_psi_string(testset.param.psi_flags), get_sort_string(testset.param.psi_flags), get_adjoint_omp_stri [...]
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> fprintf(stderr, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">for</span> (i = 0; i < testset.nresults; i++)</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">if</span> (use_tref == 1)</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, tref/testset.results[i].resval[5].avg);</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[0].resval[5].avg/testset.results[i].resval[5].avg);</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">for</span> (i = 0; i < testset.nresults; i++)</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">if</span> (use_tref == 1)</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> fprintf(stderr, <span class="stringliteral">"%d:%.3f "</span>, testset.results[i].nthreads, tref/testset.results[i].resval[5].avg);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> fprintf(stderr, <span class="stringliteral">"%d:%.3f "</span>, testset.results[i].nthreads, testset.results[0].resval[5].avg/testset.results[i].resval[5].avg);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> fprintf(stderr, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> }</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> fprintf(out, <span class="stringliteral">"\\legend{{"</span>);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">for</span> (t = 0; t < ntestsets; t++)</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> {</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keywordtype">char</span> title[256];</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">if</span> (t > 0)</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> fprintf(out, <span class="stringliteral">"},{"</span>);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> get_plot_title(title, 255, <span class="stringliteral">""</span>, testsets[t].param, ~(diff_mask));</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> fprintf(out, <span class="stringliteral">"%s"</span>, title);</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> }</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> fprintf(out, <span class="stringliteral">"}}\n"</span>);</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> fprintf(out, <span class="stringliteral">"\\end{axis}\n"</span>);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> fprintf(out, <span class="stringliteral">"\\end{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> fprintf(out, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> fflush(out);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> }</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordtype">void</span> print_output_speedup_total(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> *testsets, <span class="keywordtype">int</span> ntestsets, <span class="keywordtype">int</span> use_tref)</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> {</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keywordtype">double</span> tref = 1.0/0.0;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keywordtype">int</span> t, k;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="keywordflow">if</span> (use_tref == 1)</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">for</span> (t = 0; t < ntestsets; t++)</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">for</span> (k = 0; k < testsets[t].nresults; k++)</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">if</span> (testsets[t].results[k].nthreads == 1 && testsets[t].results[k].resval[5].avg < tref)</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> tref = testsets[t].results[k].resval[5].avg;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> print_output_speedup_total_tref(out, testsets, ntestsets, use_tref, tref);</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> }</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordtype">void</span> print_output_histo_PENRT(FILE *out, <a class="code" href="structs__testset.html">s_testset</a> testset)</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> {</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordtype">int</span> i, size = testset.nresults;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="keywordtype">char</span> hostname[1025];</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">if</span> (gethostname(hostname, 1024) != 0)</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> strncpy(hostname, <span class="stringliteral">"unnamed"</span>, 1024);</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> fprintf(out, <span class="stringliteral">"\\begin{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> fprintf(out, <span class="stringliteral">"\\begin{axis}["</span>);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> fprintf(out, <span class="stringliteral">"width=0.9\\textwidth, height=0.6\\textwidth, "</span>);</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> fprintf(out, <span class="stringliteral">"symbolic x coords={"</span>);</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">if</span> (i > 0)</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> fprintf(out, <span class="stringliteral">",%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> fprintf(out, <span class="stringliteral">"%d"</span>, testset.results[i].nthreads);</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> fprintf(out, <span class="stringliteral">"}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, "</span>);</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> fprintf(out, <span class="stringliteral">" title={%s $\\mathrm{NFSFT}%s$ N=%d M=%d m=%d %s %s %s}"</span>, hostname, testset.param.trafo_adjoint==0?<span class="stringliteral">""</span>:<span class="stringliteral">"^\\top"</span>, testset.param.N, testset.param.M, testset.param.m, get_psi_string(testset.param.psi_flags), get_sort_string(testset.param.psi_flags), get_adjoint_omp_s [...]
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> fprintf(out, <span class="stringliteral">" ]\n"</span>);</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[1].avg);</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[2].avg);</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[3].avg);</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[0].avg + testset.results[i].resval[4].avg);</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> fprintf(out, <span class="stringliteral">"\\addplot coordinates {"</span>);</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> fprintf(out, <span class="stringliteral">"(%d, %.6e) "</span>, testset.results[i].nthreads, testset.results[i].resval[5].avg);</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> fprintf(out, <span class="stringliteral">"};\n"</span>);</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> fprintf(out, <span class="stringliteral">"\\legend{%s,%s,$\\mathrm{NFFT}%s$,rest,total}\n"</span>, testset.param.nfsft_flags & NFSFT_USE_DPT ? <span class="stringliteral">"DPT"</span> : <span class="stringliteral">"FPT"</span>, testset.param.trafo_adjoint==0?<span class="stringliteral">"c2e"</span>:<span class="stringliteral">"$\\mathrm{c2e}^\\top$"</span> [...]
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> fprintf(out, <span class="stringliteral">"\\end{axis}\n"</span>);</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> fprintf(out, <span class="stringliteral">"\\end{tikzpicture}\n"</span>);</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> fprintf(out, <span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> fflush(out);</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> }</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordtype">void</span> run_testset(<a class="code" href="structs__testset.html">s_testset</a> *testset, <span class="keywordtype">int</span> trafo_adjoint, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> nfsft_flags, <span class="keywordtype">int</span> psi_flags, <span class="keywordtype" [...]
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> {</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> testset->param.trafo_adjoint = trafo_adjoint;</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> testset->param.N = N;</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> testset->param.M = M;</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> testset->param.m = m;</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> testset->param.nfsft_flags = nfsft_flags;</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> testset->param.psi_flags = psi_flags;</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> testset->results = (<a class="code" href="structs__result.html">s_result</a>*) malloc(n_threads_array_size*<span class="keyword">sizeof</span>(<a class="code" href="structs__result.html">s_result</a>));</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> testset->nresults = n_threads_array_size;</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> run_test_create(testset->param.trafo_adjoint, testset->param.N, testset->param.M);</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keywordflow">for</span> (i = 0; i < n_threads_array_size; i++)</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> {</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> testset->results[i].nthreads = nthreads_array[i];</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> run_test(testset->results[i].resval, NREPEAT, testset->param.m, testset->param.nfsft_flags, testset->param.psi_flags, testset->results[i].nthreads = nthreads_array[i]);</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> }</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> }</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keywordtype">void</span> test1(<span class="keywordtype">int</span> *nthreads_array, <span class="keywordtype">int</span> n_threads_array_size, <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> {</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <a class="code" href="structs__testset.html">s_testset</a> testsets[4];</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> run_testset(&testsets[0], 0, 1024, 1000000, m, 0, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="preprocessor"></span> print_output_histo_PENRT(file_out_tex, testsets[0]);</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> run_testset(&testsets[1], 1, 1024, 1000000, m, 0, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="preprocessor"></span> print_output_histo_PENRT(file_out_tex, testsets[1]);</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> print_output_speedup_total(file_out_tex, testsets, 2, 0);</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> run_testset(&testsets[2], 0, 1024, 1000000, m, NFSFT_USE_DPT, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor"></span> print_output_histo_PENRT(file_out_tex, testsets[2]);</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> run_testset(&testsets[3], 1, 1024, 1000000, m, NFSFT_USE_DPT, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="preprocessor">#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor"></span> print_output_histo_PENRT(file_out_tex, testsets[3]);</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> print_output_speedup_total(file_out_tex, testsets+2, 2, 0);</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> }</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>** argv)</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> {</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keywordtype">int</span> *nthreads_array;</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="keywordtype">int</span> n_threads_array_size = get_nthreads_array(&nthreads_array);</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> </div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="preprocessor">#if !(defined MEASURE_TIME && defined MEASURE_TIME_FFTW)</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="preprocessor"></span> fprintf(stderr, <span class="stringliteral">"WARNING: Detailed time measurements for NFSFT are not activated.\n"</span>);</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> fprintf(stderr, <span class="stringliteral">"For more detailed plots, please re-run the configure script with options\n"</span>);</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> fprintf(stderr, <span class="stringliteral">"--enable-measure-time --enable-measure-time-fftw --enable-nfsft --enable-openmp\n"</span>);</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> fprintf(stderr, <span class="stringliteral">"and run \"make clean all\"\n\n"</span>);</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">for</span> (k = 0; k < n_threads_array_size; k++)</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> fprintf(stderr, <span class="stringliteral">"%d "</span>, nthreads_array[k]);</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> fprintf(stderr, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> file_out_tex = fopen(<span class="stringliteral">"nfsft_benchomp_results_plots.tex"</span>, <span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> test1(nthreads_array, n_threads_array_size, 2);</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> test1(nthreads_array, n_threads_array_size, 4);</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> test1(nthreads_array, n_threads_array_size, 6);</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> test1(nthreads_array, n_threads_array_size, 8);</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> fclose(file_out_tex);</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfsft__benchomp__createdataset_8c_source.html b/doc/api/html/nfsft__benchomp__createdataset_8c_source.html
new file mode 100644
index 0000000..272cc7d
--- /dev/null
+++ b/doc/api/html/nfsft__benchomp__createdataset_8c_source.html
@@ -0,0 +1,165 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfsft_benchomp_createdataset.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_e6016a3bd4e6017d6b851aae5334ffd2.html">nfsft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfsft_benchomp_createdataset.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">void</span> nfsft_benchomp_createdataset(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> trafo_adjoint, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">int</span> t, j, k, n;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> R *x;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> C *f, *f_hat;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">int</span> N_total = (2*N+2) * (2*N+2);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <a class="code" href="structnfsft__plan.html">nfsft_plan</a> ptemp;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> nfsft_init_guru(&ptemp, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFT_OUT_OF_PLACE, 6);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> x = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*M*<span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> f = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> f_hat = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(N_total*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment">/* init pseudo-random nodes */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">for</span> (j = 0; j < M; j++)</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> {</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> x[2*j]= nfft_drand48() - K(0.5);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> x[2*j+1]= K(0.5) * nfft_drand48();</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> {</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">for</span> (k = 0; k <= N; k++)</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(f_hat+NFSFT_INDEX(k,n,&ptemp),1);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> }</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(f,M);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> printf(<span class="stringliteral">"%d %d %d\n"</span>, trafo_adjoint, N, M);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">for</span> (j=0; j < M; j++)</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> {</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">for</span> (t=0; t < 2; t++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> printf(<span class="stringliteral">"%.16e "</span>, x[2*j+t]);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> }</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> {</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">for</span> (k = 0; k <= N; k++)</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> printf(<span class="stringliteral">"%.16e %.16e\n"</span>, creal(f_hat[NFSFT_INDEX(k,n,&ptemp)]), cimag(f_hat[NFSFT_INDEX(k,n,&ptemp)]));</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> {</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">for</span> (j=0; j < M; j++)</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> printf(<span class="stringliteral">"%.16e %.16e\n"</span>, creal(f[j]), cimag(f[j]));</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">int</span> trafo_adjoint;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">int</span> N;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">int</span> M;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">if</span> (argc < 4) {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> fprintf(stderr, <span class="stringliteral">"usage: tr_adj N M\n"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> trafo_adjoint = atoi(argv[1]);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span> (trafo_adjoint < 0 && trafo_adjoint > 1)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> trafo_adjoint = 1;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> N = atoi(argv[2]);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> M = atoi(argv[3]);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> fprintf(stderr, <span class="stringliteral">"tr_adj=%d, N=%d, M=%d\n"</span>, trafo_adjoint, N, M);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> nfsft_benchomp_createdataset(trafo_adjoint, N, M);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfsft__benchomp__detail_8c_source.html b/doc/api/html/nfsft__benchomp__detail_8c_source.html
new file mode 100644
index 0000000..a09ac95
--- /dev/null
+++ b/doc/api/html/nfsft__benchomp__detail_8c_source.html
@@ -0,0 +1,267 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfsft_benchomp_detail.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_e6016a3bd4e6017d6b851aae5334ffd2.html">nfsft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfsft_benchomp_detail.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordtype">void</span> bench_openmp_readfile(FILE *infile, <span class="keywordtype">int</span> *trafo_adjoint, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> *M, <span class="keywordtype">double</span> **x, C **f_hat, C **f)</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">double</span> re,im;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">int</span> k, n, j, t;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> fscanf(infile, <span class="stringliteral">"%d %d %d"</span>, trafo_adjoint, N, M);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> *x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*(*M)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> *f_hat = (C*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*(*N)+2) * (2*(*N)+2) * <span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> *f = (C*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((*M)*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> memset(*f_hat,0U,(2*(*N)+2) * (2*(*N)+2) * <span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> memset(*f,0U,(*M)*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"></span> fftw_import_wisdom_from_filename(<span class="stringliteral">"nfsft_benchomp_detail_threads.plan"</span>);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor"></span> fftw_import_wisdom_from_filename(<span class="stringliteral">"nfsft_benchomp_detail_single.plan"</span>);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> nfsft_init_guru(&plan, *N, *M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> PRE_PHI_HUT | FFTW_INIT | FFT_OUT_OF_PLACE, 6);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor"></span> fftw_export_wisdom_to_filename(<span class="stringliteral">"nfsft_benchomp_detail_threads.plan"</span>);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"></span> fftw_export_wisdom_to_filename(<span class="stringliteral">"nfsft_benchomp_detail_single.plan"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">for</span> (j=0; j < *M; j++)</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">for</span> (t=0; t < 2; t++)</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> fscanf(infile, <span class="stringliteral">"%lg"</span>, (*x)+2*j+t);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">for</span> (k = 0; k <= *N; k++)</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> {</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> fscanf(infile, <span class="stringliteral">"%lg %lg"</span>, &re, &im);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> (*f_hat)[NFSFT_INDEX(k,n,&plan)] = re + _Complex_I * im;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> }</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">for</span> (j=0; j < *M; j++)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> {</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> fscanf(infile, <span class="stringliteral">"%lg %lg"</span>, &re, &im);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> (*f)[j] = re + _Complex_I * im;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> }</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> nfsft_finalize(&plan);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordtype">void</span> bench_openmp(<span class="keywordtype">int</span> trafo_adjoint, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">double</span> *x, C *f_hat, C *f, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> nfsft_flags, <span class="keywordtype">int</span> psi_flags)</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> {</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">int</span> k, n;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment">// int N, M, trafo_adjoint;</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">int</span> t, j;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> ticks t0, t1;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">double</span> tt_total, tt_pre;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment">// fscanf(infile, "%d %d %d", &trafo_adjoint, &N, &M);</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment">/*#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment"> fftw_import_wisdom_from_filename("nfsft_benchomp_detail_threads.plan");</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment">#else</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment"> fftw_import_wisdom_from_filename("nfsft_benchomp_detail_single.plan");</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment">#endif*/</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment">/* precomputation (for fast polynomial transform) */</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment">// nfsft_precompute(N,1000.0,0U,0U);</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment">/* Initialize transform plan using the guru interface. All input and output</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment"> * arrays are allocated by nfsft_init_guru(). Computations are performed with</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment"> * respect to L^2-normalized spherical harmonics Y_k^n. The array of spherical</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment"> * Fourier coefficients is preserved during transformations. The NFFT uses a</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment"> * cut-off parameter m = 6. See the NFFT 3 manual for details.</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> nfsft_init_guru(&plan, N, M, nfsft_flags | NFSFT_MALLOC_X | NFSFT_MALLOC_F |</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> PRE_PHI_HUT | psi_flags | FFTW_INIT | FFT_OUT_OF_PLACE, m);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment">/*#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment"> fftw_export_wisdom_to_filename("nfsft_benchomp_detail_threads.plan");</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment">#else</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment"> fftw_export_wisdom_to_filename("nfsft_benchomp_detail_single.plan");</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment">#endif*/</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">for</span> (j=0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> {</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">for</span> (t=0; t < 2; t++)</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment">// fscanf(infile, "%lg", plan.x+2*j+t);</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a>[2*j+t] = x[2*j+t];</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> {</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> memset(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,0U,plan.<a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Comp [...]
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">for</span> (k = 0; k <= plan.<a class="code" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403" title="the bandwidth ">N</a>; k++)</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> {</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment">// fscanf(infile, "%lg %lg", &re, &im);</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment">// plan.f_hat[NFSFT_INDEX(k,n,&plan)] = re + _Complex_I * im;</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSFT_INDEX(k,n,&plan)] = f_hat[NFSFT_INDEX(k,n,&plan)];</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> {</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">for</span> (j=0; j < plan.<a class="code" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> {</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// fscanf(infile, "%lg %lg", &re, &im);</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// plan.f[j] = re + _Complex_I * im;</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = f[j];</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> memset(plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,0U,plan.<a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Comp [...]
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> t0 = getticks();</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment">/* precomputation (for NFFT, node-dependent) */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> nfsft_precompute_x(&plan);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> t1 = getticks();</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> tt_pre = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">if</span> (trafo_adjoint==0)</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> nfsft_trafo(&plan);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> nfsft_adjoint(&plan);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> t1 = getticks();</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> tt_total = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="preprocessor">#ifndef MEASURE_TIME</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor"></span> plan.<a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0] = 0.0;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> plan.<a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[2] = 0.0;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor">#ifndef MEASURE_TIME_FFTW</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor"></span> plan.<a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[1] = 0.0;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> printf(<span class="stringliteral">"%.6e %.6e %6e %.6e %.6e %.6e\n"</span>, tt_pre, plan.<a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASURE_TIME_t</a>[0], plan.<a class="code" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db" title="Measured time for each step if MEASURE_TIME is set.">MEASU [...]
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> nfsft_finalize(&plan);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> {</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordtype">int</span> m, nfsft_flags, psi_flags;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordtype">int</span> nrepeat;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordtype">int</span> trafo_adjoint, N, M, r;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordtype">double</span> *x;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> C *f_hat, *f;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor"></span> <span class="keywordtype">int</span> nthreads;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">if</span> (argc != 6)</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> nthreads = atoi(argv[5]);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> fftw_init_threads();</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> omp_set_num_threads(nthreads);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="preprocessor"></span> <span class="keywordflow">if</span> (argc != 5)</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> m = atoi(argv[1]);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> nfsft_flags = atoi(argv[2]);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> psi_flags = atoi(argv[3]);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> nrepeat = atoi(argv[4]);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> bench_openmp_readfile(stdin, &trafo_adjoint, &N, &M, &x, &f_hat, &f);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment">/* precomputation (for fast polynomial transform) */</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> nfsft_precompute(N,1000.0,0U,0U);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">for</span> (r = 0; r < nrepeat; r++)</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> bench_openmp(trafo_adjoint, N, M, x, f_hat, f, m, nfsft_flags, psi_flags);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfsoft_2simple__test_8c_source.html b/doc/api/html/nfsoft_2simple__test_8c_source.html
new file mode 100644
index 0000000..1f86f80
--- /dev/null
+++ b/doc/api/html/nfsoft_2simple__test_8c_source.html
@@ -0,0 +1,225 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - simple_test.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8d554148c8057b12dc5cb11ef005c62c.html">nfsoft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfsoft/simple_test.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/* Include standard C headers. */</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">/* Include NFFT 3 utilities headers. */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">/* Include NFFT3 library header. */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_nfsoft(<span class="keywordtype">int</span> bw, <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> {</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> plan_nfsoft; </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> plan_ndsoft; </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> ticks t0, t1;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">int</span> j; </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">int</span> k, m; </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">double</span> d1, d2, d3; </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">double</span> time, error; </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags = NFSOFT_MALLOC_X | NFSOFT_MALLOC_F | NFSOFT_MALLOC_F_HAT; </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> k = 1000; </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> m = 5; </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> nfsoft_init_guru(&plan_ndsoft, bw, M, flags | NFSOFT_USE_NDFT</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> | NFSOFT_USE_DPT, PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE, m, k);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> nfsoft_init_guru(&plan_nfsoft, bw, M, flags, PRE_PHI_HUT | PRE_PSI | MALLOC_X</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> | MALLOC_F_HAT | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE, m, k);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">for</span> (j = 0; j < plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> {</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> d1 = ((R) rand()) / RAND_MAX - 0.5;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> d2 = 0.5 * ((R) rand()) / RAND_MAX;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> d3 = ((R) rand()) / RAND_MAX - 0.5;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3* j ] = d1; </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3* j + 1] = d2; </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3* j + 2] = d3; </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3* j ] = d1; </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3* j + 1] = d2; </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3* j + 2] = d3; </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">for</span> (j = 0; j < (bw + 1) * (4* (bw +1)*(bw+1)-1)/3;j++)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> {</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> d1=((R)rand())/RAND_MAX - 0.5;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> d2=((R)rand())/RAND_MAX - 0.5;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]=d1 + I*d2;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j]=d1 + I*d2;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">if</span> ((bw+1)*(4*(bw+1)*(bw+1)-1)/3<=20)</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,(bw+1)*(4*(bw+1)*(bw+1)-1)/3,<span class="stringliteral">"randomly generated [...]
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,20,<span class="stringliteral">"1st-20th randomly generated SO(3) Fourier coe [...]
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> printf(<span class="stringliteral">"\n---------------------------------------------\n"</span>);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> nfsoft_precompute(&plan_nfsoft);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> nfsoft_precompute(&plan_ndsoft);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> t0 = getticks();</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> nfsoft_trafo(&plan_nfsoft);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> t1 = getticks();</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">if</span> (plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a><=20)</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" ti [...]
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,20,<span class="stringliteral">"NFSOFT, 1st-20th function sample"</span>);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> printf(<span class="stringliteral">" computed in %11le seconds\n"</span>,time);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> t0 = getticks();</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> nfsoft_trafo(&plan_ndsoft);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> t1 = getticks();</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">if</span> (plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a><=20)</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" ti [...]
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,20,<span class="stringliteral">"NDSOFT, 1st-20th function sample"</span>);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> printf(<span class="stringliteral">" computed in %11le seconds\n"</span>,time);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> error= X(error_l_infty_complex)(plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, plan_nfsoft.<a class="code" href="structn [...]
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> printf(<span class="stringliteral">"\n The NFSOFT of bandwidth=%d for %d rotations has infty-error %11le \n"</span>,bw, M,error);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> printf(<span class="stringliteral">"\n---------------------------------------------\n"</span>);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[0]=1.0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[0]=1.0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" titl [...]
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> t0 = getticks();</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> nfsoft_adjoint(&plan_nfsoft);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> t1 = getticks();</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">if</span> ((bw+1)*(4*(bw+1)*(bw+1)-1)/3<=20)</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,(bw+1)*(4*(bw+1)*(bw+1)-1)/3,<span class="stringliteral">"SO(3) Fourier co [...]
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,20,<span class="stringliteral">"adjoint NFSOFT, 1st-20th Fourier coefficie [...]
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> printf(<span class="stringliteral">" computed in %11le seconds\n"</span>,time);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> t0 = getticks();</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> nfsoft_adjoint(&plan_ndsoft);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> t1 = getticks();</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> time = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">if</span> ((bw+1)*(4*(bw+1)*(bw+1)-1)/3<=20)</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,(bw+1)*(4*(bw+1)*(bw+1)-1)/3,<span class="stringliteral">"SO(3) Fourier coeff [...]
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,20,<span class="stringliteral">"adjoint NDSOFT, 1st-20th Fourier coefficien [...]
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> printf(<span class="stringliteral">" computed in %11le seconds\n"</span>,time);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> error=X(error_l_infty_complex)(plan_ndsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,plan_nfsoft.<a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, (bw+1)*( [...]
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> printf(<span class="stringliteral">"\n The adjoint NFSOFT of bandwidth=%d for %d rotations has infty-error %11le \n"</span>,bw, M,error);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> printf(<span class="stringliteral">"\n---------------------------------------------\n"</span>);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> nfsoft_finalize(&plan_ndsoft);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> nfsoft_finalize(&plan_nfsoft);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> {</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordtype">int</span> N; </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordtype">int</span> M; </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">if</span> (argc < 2)</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> {</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> printf(</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="stringliteral">"This test programm computes the NFSOFT with maximum polynomial degree N at M input rotations\n"</span>);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> printf(<span class="stringliteral">"Usage: simple_test N M \n"</span>);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> printf(<span class="stringliteral">"e.g.: simple_test 8 64\n"</span>);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> exit(0);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> N = atoi(argv[1]);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> M = atoi(argv[2]);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> printf(</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="stringliteral">"computing an NDSOFT, an NFSOFT, an adjoint NDSOFT, and an adjoint NFSOFT\n\n"</span>);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> simple_test_nfsoft(N, M);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="comment">/* Exit the program. */</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfsoft_8c_source.html b/doc/api/html/nfsoft_8c_source.html
new file mode 100644
index 0000000..083952b
--- /dev/null
+++ b/doc/api/html/nfsoft_8c_source.html
@@ -0,0 +1,747 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfsoft.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_8f3c7156d7272f1462551f3a6c5fabd1.html">nfsoft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfsoft.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: nfsoft.c 3919 2012-11-20 13:31:45Z grman $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="wigner_8h.html" title="Header file for functions related to Wigner-d/D functions.">wigner.h</a>"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#define DEFAULT_NFFT_CUTOFF 6</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span><span class="preprocessor">#define FPT_THRESHOLD 1000</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">static</span> <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> SO3_fpt_init(<span class="keywordtype">int</span> l, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> kappa);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">void</span> nfsoft_init(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> nfsoft_init_advanced(plan, N, M, NFSOFT_MALLOC_X | NFSOFT_MALLOC_F</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> | NFSOFT_MALLOC_F_HAT);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> }</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">void</span> nfsoft_init_advanced(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfsoft_flags)</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> {</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> nfsoft_init_guru(plan, N, M, nfsoft_flags, PRE_PHI_HUT | PRE_PSI | MALLOC_X</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> | MALLOC_F_HAT | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> DEFAULT_NFFT_CUTOFF, FPT_THRESHOLD);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">void</span> nfsoft_init_guru(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan, <span class="keywordtype">int</span> B, <span class="keywordtype">int</span> M,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfsoft_flags, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfft_flags, <span class="keywordtype">int</span> nfft_cutoff,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">int</span> fpt_kappa)</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> {</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">int</span> N[3];</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">int</span> n[3];</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> N[0] = 2* B + 2;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> N[1] = 2* B + 2;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> N[2] = 2* B + 2;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> n[0] = 8* B ;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> n[1] = 8* B ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> n[2] = 8* B ;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> nfft_init_guru(&plan-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>, 3, N, M, n, nfft_cutoff, nfft_flags,</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> FFTW_ESTIMATE | FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordflow">if</span> ((plan-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>).nfft_flags & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> {</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&(plan-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>));</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> plan-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a> = B;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> plan-><a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a> = M;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> plan->fpt_kappa = fpt_kappa;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> plan-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> = nfsoft_flags;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_MALLOC_F_HAT)</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> {</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> plan-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((B + 1) * (4* (B +1)*(B+1)-1)/3*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> == NULL ) printf(<span class="stringliteral">"Allocation failed!\n"</span>);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_MALLOC_X)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> plan-><a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a> = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(plan-><a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a>*3*<span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a> == NULL ) printf(<span class="stringliteral">"Allocation failed!\n"</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_MALLOC_F)</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> plan-><a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(plan-><a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a>*<span class=" [...]
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> == NULL ) printf(<span class="stringliteral">"Allocation failed!\n"</span>);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> plan-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a> = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((X(next_power_of_2)(B)+1)*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a> = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*B+2)*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> plan-><a class="code" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c" title="used when converting Chebychev to Fourier coeffcients">aux</a> = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*B+4)*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a> == NULL ) printf(<span class="stringliteral">"Allocation failed!\n"</span>);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a> == NULL ) printf(<span class="stringliteral">"Allocation failed!\n"</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c" title="used when converting Chebychev to Fourier coeffcients">aux</a> == NULL ) printf(<span class="stringliteral">"Allocation failed!\n"</span>);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> plan-><a class="code" href="structnfsoft__plan__.html#ae7c72bdbce93cb99dcbd14d764d08502" title="Pointer to the own transform.">mv_trafo</a> = (void (*) (<span class="keywordtype">void</span>* ))nfsoft_trafo;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> plan-><a class="code" href="structnfsoft__plan__.html#a33d5fb830b3021ddb85320139be034b8" title="Pointer to the own adjoint.">mv_adjoint</a> = (void (*) (<span class="keywordtype">void</span>* ))nfsoft_adjoint;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> plan-><a class="code" href="structnfsoft__plan__.html#a39a07d81bf6117dca5530d76beaf6b31" title="the internal FPT plan">internal_fpt_set</a> = SO3_fpt_init(plan-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>, plan-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the [...]
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656" title="Converts coefficients with , from a linear combination of Chebyshev polynomials to coefficients m...">c2e</a>(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *my_plan, <span class="keywordtype">int</span> even)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> {</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">int</span> j, N;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> N = 2* (my_plan -><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>+1);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[my_plan-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>+1] = my_plan-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e9869 [...]
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[0]=0.0;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">for</span> (j=1;j<my_plan-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>+1;j++)</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> {</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[my_plan-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>+1+j]=0.5* my_plan-><a class="code" href="structnfsoft__plan__.html#af6fb25c [...]
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[my_plan-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>+1-j]=0.5* my_plan-><a class="code" href="structnfsoft__plan__.html#af6fb25c [...]
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> C *aux= (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N+2)*<span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">for</span>(j=1;j<N;j++)</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> aux[j]=my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[j];</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> aux[0]=0.;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> aux[N]=0.;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> if (even>0)</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> {</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[0]=(C) (-1.)/(2.*_Complex_I) * aux[1];</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">for</span> (j=1;j<N;j++)</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> {</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[j]=(1./(2.*_Complex_I)*(aux[j+1]-aux[j-1]));</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> free(aux);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> aux = NULL;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">static</span> <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> SO3_fpt_init(<span class="keywordtype">int</span> l, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> kappa)</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> {</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span> = 0;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordtype">int</span> N, t, k_start, k_end, k, m;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordtype">int</span> glo = 0;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> R *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>, *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=- [...]
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">if</span> (flags & NFSOFT_USE_DPT)</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> {</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">if</span> (l < 2)</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> N = 2;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> N = l;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> t = (int) log2(X(next_power_of_2)(N));</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> }</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> {</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">if</span> (l < 2)</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> N = 2;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> N = X(next_power_of_2)(l);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> t = (int) log2(N);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> alpha = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N + 2) * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> beta = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N + 2) * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> gamma = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N + 2) * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">if</span> (flags & NFSOFT_NO_STABILIZATION)</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> {</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">set</span> = fpt_init((2* N + 1) * (2* N + 1), t, 0U | FPT_NO_STABILIZATION);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> }</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> {</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keyword">set</span> = fpt_init((2* N + 1) * (2* N + 1), t, 0U);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">for</span> (k = -N; k <= N; k++)</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">for</span> (m = -N; m <= N; m++)</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> {</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> k_start = (ABS(k) >= ABS(m)) ? ABS(k) : ABS(m);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> k_end = N;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> SO3_alpha_row(alpha, N, k, m);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> SO3_beta_row(beta, N, k, m);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> SO3_gamma_row(gamma, N, k, m);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> fpt_precompute(<span class="keyword">set</span>, glo, alpha, beta, gamma, k_start, kappa);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> glo++;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> }</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> free(alpha);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> free(beta);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> free(gamma);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> alpha = NULL;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> beta = NULL;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> gamma = NULL;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">return</span> <span class="keyword">set</span>;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> }</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keyword">static</span> <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> SO3_single_fpt_init(<span class="keywordtype">int</span> l, <span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> kap [...]
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> {</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordtype">int</span> N, t, k_start, k_end;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> R *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>, *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=- [...]
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span> = 0;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">if</span> (flags & NFSOFT_USE_DPT)</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> {</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">if</span> (l < 2)</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> N = 2;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> N = l;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> t = (int) log2(X(next_power_of_2)(N));</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> }</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> {</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">if</span> (l < 2)</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> N = 2;</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> N = X(next_power_of_2)(l);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> t = (int) log2(N);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> }</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> alpha = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N + 2) * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> beta = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N + 2) * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> gamma = (R*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((N + 2) * <span class="keyword">sizeof</span>(R));</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> {</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fptflags = 0U </div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> | IF(flags & NFSOFT_USE_DPT,FPT_NO_FAST_ALGORITHM,IF(t > 1,FPT_NO_DIRECT_ALGORITHM,0U))</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> | IF(flags & NFSOFT_NO_STABILIZATION,FPT_NO_STABILIZATION,0U);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="keyword">set</span> = fpt_init(1, t, fptflags);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> k_start = (ABS(k) >= ABS(m)) ? ABS(k) : ABS(m);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> k_end = N;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> SO3_alpha_row(alpha, N, k, m);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> SO3_beta_row(beta, N, k, m);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> SO3_gamma_row(gamma, N, k, m);</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="comment">/*{</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="comment"> int rr;</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="comment"> for (rr = 0; rr < N + 2; rr++)</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="comment"> fprintf(stderr, "a[%4d] = %10e b[%4d] = %10e c[%4d] = %10e\n",rr,alpha[rr],rr,beta[rr],rr,gamma[rr]);</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="comment"> }*/</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> fpt_precompute(<span class="keyword">set</span>, 0, alpha, beta, gamma, k_start, kappa);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> free(alpha);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> free(beta);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> free(gamma);</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> alpha = NULL;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> beta = NULL;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> gamma = NULL;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">return</span> <span class="keyword">set</span>;</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> }</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordtype">void</span> SO3_fpt(C *coeffs, <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>, <span class="keywordtype">int</span> l, <span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> {</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordtype">int</span> N;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> C* x;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> C* y;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keywordtype">int</span> trafo_nr; </div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordtype">int</span> k_start, k_end, j;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordtype">int</span> function_values = 0;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">if</span> (flags & NFSOFT_USE_DPT)</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> {</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> N = l;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">if</span> (l < 2)</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> N = 2;</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> }</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> {</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">if</span> (l < 2)</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> N = 2;</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> N = X(next_power_of_2)(l);</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> }</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> k_start = (ABS(k) >= ABS(m)) ? ABS(k) : ABS(m);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> k_end = N;</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> trafo_nr = (N + k) * (2* N + 1) + (m + N);</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> x = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((k_end + 1) * <span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordflow">for</span> (j = 0; j <= k_end; j++)</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> x[j] = K(0.0);</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">for</span> (j = 0; j <= l - k_start; j++)</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> {</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> x[j + k_start] = coeffs[j];</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> }</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordflow">for</span> (j = l - k_start + 1; j <= k_end - k_start; j++)</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> {</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> x[j + k_start] = K(0.0);</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> }</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> y = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((k_end + 1) * <span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keywordflow">if</span> (flags & NFSOFT_USE_DPT)</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> { </div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> fpt_trafo_direct(<span class="keyword">set</span>, trafo_nr, &x[k_start], y, k_end, 0U</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> | (function_values ? FPT_FUNCTION_VALUES : 0U));</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> }</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> { </div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> fpt_trafo(<span class="keyword">set</span>, trafo_nr, &x[k_start], y, k_end, 0U</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> | (function_values ? FPT_FUNCTION_VALUES : 0U));</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> }</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">for</span> (j = 0; j <= l; j++)</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> {</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> coeffs[j] = y[j];</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> }</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> free(x);</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> free(y);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> x = NULL;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> y = NULL;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> }</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="keywordtype">void</span> SO3_fpt_transposed(C *coeffs, <a class="code" href="structfpt__set__s__.html" title="Holds data for a set of cascade summations.">fpt_set</a> <span class="keyword">set</span>, <span class="keywordtype">int</span> l, <span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m,</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> {</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordtype">int</span> N, k_start, k_end, j;</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordtype">int</span> trafo_nr; </div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordtype">int</span> function_values = 0;</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> C* x;</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> C* y;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">if</span> (flags & NFSOFT_USE_DPT)</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> {</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> N = l;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="keywordflow">if</span> (l < 2)</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> N = 2;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> }</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> {</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordflow">if</span> (l < 2)</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> N = 2;</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> N = X(next_power_of_2)(l);</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> }</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> k_start = (ABS(k) >= ABS(m)) ? ABS(k) : ABS(m);</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> k_end = N;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> trafo_nr = (N + k) * (2* N + 1) + (m + N);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> y = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((k_end + 1) * <span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> x = (C*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((k_end + 1) * <span class="keyword">sizeof</span>(C));</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">for</span> (j = 0; j <= l; j++)</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> {</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> y[j] = coeffs[j];</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> }</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="keywordflow">for</span> (j = l + 1; j <= k_end; j++)</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> {</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> y[j] = K(0.0);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> }</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="keywordflow">if</span> (flags & NFSOFT_USE_DPT)</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> {</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> fpt_transposed_direct(<span class="keyword">set</span>, trafo_nr, &x[k_start], y, k_end, 0U</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> | (function_values ? FPT_FUNCTION_VALUES : 0U));</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> }</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> {</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> fpt_transposed(<span class="keyword">set</span>, trafo_nr, &x[k_start], y, k_end, 0U</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> | (function_values ? FPT_FUNCTION_VALUES : 0U));</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> }</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="keywordflow">for</span> (j = 0; j <= l; j++)</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> {</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> coeffs[j] = x[j];</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> }</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> free(x);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> free(y);</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> x = NULL;</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> y = NULL;</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> }</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordtype">void</span> nfsoft_precompute(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan3D)</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> {</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keywordtype">int</span> N = plan3D-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>;</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="keywordtype">int</span> M = plan3D-><a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keywordflow">for</span> (j = 0; j < M; j++)</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> {</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3* j ] = plan3D-><a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3* j [...]
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3* j + 1] = plan3D-><a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3 [...]
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3* j + 2] = plan3D-><a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>[3 [...]
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> }</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="keywordflow">for</span> (j = 0; j < 3* plan3D -><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> {</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_n [...]
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> }</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="keywordflow">if</span> ((plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>).nfft_flags & FG_PSI)</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> {</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> nfft_precompute_one_psi(&(plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>));</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> }</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="keywordflow">if</span> ((plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>).nfft_flags & PRE_PSI)</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> {</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> nfft_precompute_one_psi(&(plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>));</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> }</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> }</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="keywordtype">void</span> nfsoft_trafo(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan3D)</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> {</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="keywordtype">int</span> i, j, m, k, max, glo1, glo2;</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> i = 0;</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> glo1 = 0;</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> glo2 = 0;</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keywordtype">int</span> N = plan3D-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>;</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="keywordtype">int</span> M = plan3D-><a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keywordflow">if</span> (N == 0)</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> {</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keywordflow">for</span> (j = 0; j < M; j++)</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> plan3D-><a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[0];</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> }</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> </div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="keywordflow">for</span> (j = 0; j < plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>; j++)</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[j] = 0.0;</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> for (k = -N; k <= N; k++)</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> {</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">for</span> (m = -N; m <= N; m++)</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> {</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> max = (ABS(m) > ABS(k) ? ABS(m) : ABS(k));</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="keywordflow">for</span> (j = 0; j <= N - max; j++)</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> {</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[glo1];</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="keywordflow">if</span> ((plan3D-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_NORMALIZED))</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> {</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] * (1. / (2. * <a class [...]
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> * SQRT(0.5 * (2. * (max + j) + 1.));</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> }</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="keywordflow">if</span> ((plan3D-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_REPRESENT))</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> {</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="keywordflow">if</span> ((k < 0) && (k % 2))</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> {</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] * (-1);</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> }</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="keywordflow">if</span> ((m < 0) && (m % 2))</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] * (-1);</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> </div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="keywordflow">if</span> ((m + k) % 2)</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] * (-1);</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> }</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> glo1++;</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> }</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">for</span> (j = N - max + 1; j < X(next_power_of_2)(N) + 1; j++)</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = 0.0;</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="comment">//fprintf(stdout,"\n k= %d, m= %d \n",k,m);</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> SO3_fpt(plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>, plan3D-><a class="code" href="structnfsoft__plan__.html#a39a07d81bf6117dca5530d76beaf6b31" title="the internal FPT plan">internal_fpt_set</a>, N, k, m, plan3D-><a class="code" href="structnfsoft__plan__.htm [...]
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> </div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <a class="code" href="group__nfsft.html#ga47209b28b6561fca7349ed8afa5f9656" title="Converts coefficients with , from a linear combination of Chebyshev polynomials to coefficients m...">c2e</a>(plan3D, ABS((k + m) % 2));</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="keywordflow">for</span> (i = 1; i <= 2* plan3D -><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a> + 2; i++)</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> {</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[NFSOFT_INDEX(k, m, i - N - 1, N) - 1]</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> = plan3D-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[i - 1];</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="comment">//fprintf(stdout,"%f \t", plan3D->nfft_plan.f_hat[NFSOFT_INDEX(k,m,i-N-1,N)-1]);</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="comment">//fprintf(stdout,"another index: %d for k=%d,m=%d,l=%d,N=%d \n", NFSOFT_INDEX(k,m,i-N-1,N)-1,k,m,i-N-1,N);</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> }</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> }</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> }</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="keywordflow">if</span> (plan3D-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_USE_NDFT)</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> {</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> nfft_trafo_direct(&(plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>));</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> }</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> {</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&(plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>));</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> }</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keywordflow">for</span> (j = 0; j < plan3D-><a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> plan3D-><a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> }</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="keyword">static</span> <span class="keywordtype">void</span> e2c(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *my_plan, <span class="keywordtype">int</span> even)</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> {</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="keywordtype">int</span> N;</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> N = 2* (my_plan -><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>+1);</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="comment">//nfft_vpr_complex(my_plan->cheby,N+1,"chebychev");</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="keywordflow">if</span> (even>0)</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> {</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="comment">//my_plan->aux[N-1]= -1/(2*I)* my_plan->cheby[N-2];</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> my_plan-><a class="code" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c" title="used when converting Chebychev to Fourier coeffcients">aux</a>[0]= 1/(2*_Complex_I)*my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[1];</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> </div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="keywordflow">for</span>(j=1;j<N-1;j++)</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> {</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> my_plan-><a class="code" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c" title="used when converting Chebychev to Fourier coeffcients">aux</a>[j]=1/(2*_Complex_I)*(my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[j+1]-my_plan-><a class="code" href=" [...]
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> }</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> my_plan-><a class="code" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c" title="used when converting Chebychev to Fourier coeffcients">aux</a>[N-1]=1/(2*_Complex_I)*(-my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[j-1]);</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="keywordflow">for</span>(j=0;j<N;j++)</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> {</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[j]= my_plan-><a class="code" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c" title="used when converting Chebychev to Fourier coeffcients">aux</a>[j];</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> }</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> }</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> </div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> my_plan-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[0]=my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[my_plan-><a class="code" href="structnfso [...]
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordflow">for</span>(j=1;j<=my_plan-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> {</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> my_plan-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j]=0.5*(my_plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[my_plan-><a class="code" href="struc [...]
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> }</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> </div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="comment">//nfft_vpr_complex(my_plan->wig_coeffs,my_plan->N_total,"chebychev ");</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> }</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordtype">void</span> nfsoft_adjoint(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan3D)</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> {</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="keywordtype">int</span> i, j, m, k, max, glo1, glo2;</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> i = 0;</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> glo1 = 0;</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> glo2 = 0;</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordtype">int</span> N = plan3D-><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a>;</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="keywordtype">int</span> M = plan3D-><a class="code" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> </div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="comment">//nothing much to be done for polynomial degree 0</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="keywordflow">if</span> (N == 0)</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> {</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> plan3D-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[0]=0;</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordflow">for</span> (j = 0; j < M; j++)</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> plan3D-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[0] += plan3D-><a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> }</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> </div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="keywordflow">for</span> (j = 0; j < M; j++)</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> {</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of sampl [...]
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> }</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> </div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="keywordflow">if</span> (plan3D-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_USE_NDFT)</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> {</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> nfft_adjoint_direct(&(plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>));</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> }</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> {</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> nfft_adjoint(&(plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>));</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> }</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> </div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="comment">//nfft_vpr_complex(plan3D->nfft_plan.f_hat,plan3D->nfft_plan.N_total,"all results");</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> glo1 = 0;</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordflow">for</span> (k = -N; k <= N; k++)</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> {</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="keywordflow">for</span> (m = -N; m <= N; m++)</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> {</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> max = (ABS(m) > ABS(k) ? ABS(m) : ABS(k));</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keywordflow">for</span> (i = 1; i < 2* plan3D -><a class="code" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e" title="Total number of Fourier coefficients.">N_total</a> + 3; i++)</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> {</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> plan3D-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>[i - 1] = plan3D-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" titl [...]
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> - 1, N) - 1];</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> }</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> </div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="comment">//fprintf(stdout,"k=%d,m=%d \n",k,m);</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="comment">//nfft_vpr_complex(plan3D->cheby,2*plan3D->N_total+2,"euler");</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> e2c(plan3D, ABS((k + m) % 2));</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> </div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="comment">//nfft_vpr_complex(plan3D->wig_coeffs,plan3D->N_total+1,"chebys");</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> SO3_fpt_transposed(plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>, plan3D-><a class="code" href="structnfsoft__plan__.html#a39a07d81bf6117dca5530d76beaf6b31" title="the internal FPT plan">internal_fpt_set</a>, N, k, m,</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> plan3D-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a>);</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="comment">//nfft_vpr_complex(plan3D->wig_coeffs,plan3D->N_total+1,"wigners");</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="comment">// SO3_fpt_transposed(plan3D->wig_coeffs,N,k,m,plan3D->flags,plan3D->fpt_kappa);</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> </div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> </div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="keywordflow">for</span> (j = max; j <= N; j++)</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> {</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="keywordflow">if</span> ((plan3D-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_REPRESENT))</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> {</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="keywordflow">if</span> ((k < 0) && (k % 2))</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> {</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = -plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j];</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> }</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="keywordflow">if</span> ((m < 0) && (m % 2))</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = -plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j];</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> </div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="keywordflow">if</span> ((m + k) % 2)</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] = plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j] * (-1);</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> </div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> }</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> </div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> plan3D-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[glo1] = plan3D-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>[j];</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> </div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="keywordflow">if</span> ((plan3D-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_NORMALIZED))</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> {</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> plan3D-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[glo1] = plan3D-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[glo1] * (1 / (2. * <a clas [...]
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> 0.5 * (2. * (j) + 1.));</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> }</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> </div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> glo1++;</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> }</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> </div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> }</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> }</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> }</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> </div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="keywordtype">void</span> nfsoft_finalize(<a class="code" href="structnfsoft__plan__.html">nfsoft_plan</a> *plan)</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> {</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="comment">/* Finalise the nfft plan. */</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> nfft_finalize(&plan-><a class="code" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c" title="the internal NFFT plan">p_nfft</a>);</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> free(plan-><a class="code" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c" title="contains a set of SO(3) Fourier coefficients for fixed orders m and n">wig_coeffs</a>);</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> free(plan-><a class="code" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f" title="contains a set of Chebychev coefficients for fixed orders m and n">cheby</a>);</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> free(plan-><a class="code" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c" title="used when converting Chebychev to Fourier coeffcients">aux</a>);</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> </div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> fpt_finalize(plan-><a class="code" href="structnfsoft__plan__.html#a39a07d81bf6117dca5530d76beaf6b31" title="the internal FPT plan">internal_fpt_set</a>);</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> plan-><a class="code" href="structnfsoft__plan__.html#a39a07d81bf6117dca5530d76beaf6b31" title="the internal FPT plan">internal_fpt_set</a> = NULL;</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_MALLOC_F_HAT)</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> {</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <span class="comment">//fprintf(stderr,"deallocating f_hat\n");</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> free(plan-><a class="code" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> }</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> </div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="comment">/* De-allocate memory for samples, if neccesary. */</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_MALLOC_F)</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> {</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="comment">//fprintf(stderr,"deallocating f\n");</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> free(plan-><a class="code" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>);</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> }</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="comment">/* De-allocate memory for nodes, if neccesary. */</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="keywordflow">if</span> (plan-><a class="code" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca" title="the planner flags">flags</a> & NFSOFT_MALLOC_X)</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> {</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="comment">//fprintf(stderr,"deallocating x\n");</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> free(plan-><a class="code" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383" title="input nodes">x</a>);</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> }</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> }</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> </div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="keywordtype">int</span> posN(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> B)</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> {</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="keywordtype">int</span> pos;</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> </div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="keywordflow">if</span> (n > -B)</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> pos = posN(n - 1, m, B) + B + 1 - MAX(ABS(m), ABS(n - 1));</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> pos = 0;</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <span class="comment">//(n > -B? pos=posN(n-1,m,B)+B+1-MAX(ABS(m),ABS(n-1)): pos= 0)</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="keywordflow">return</span> pos;</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> }</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfst_2simple__test_8c_source.html b/doc/api/html/nfst_2simple__test_8c_source.html
new file mode 100644
index 0000000..cf76534
--- /dev/null
+++ b/doc/api/html/nfst_2simple__test_8c_source.html
@@ -0,0 +1,123 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - simple_test.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_fa65d2cfa17fd1e7f6091ef3f0c886ac.html">nfst</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfst/simple_test.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_nfst_1d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keywordtype">int</span> j,k;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <a class="code" href="structnfst__plan.html">nfst_plan</a> p;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordtype">int</span> N=14;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">int</span> M=19;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> nfst_init_1d(&p,N,M);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">for</span>(j = 0; j < p.<a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>*p.<a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> p.<a class="code" href="structnfst__plan.html#a048ebad4f2abe3821988fa06a5e308d8" title="nodes (in time/spatial domain)">x</a>[j] = 0.5 * ((<span class="keywordtype">double</span>)rand()) / RAND_MAX;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">if</span>( p.<a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> nfst_precompute_psi( &p);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">for</span>(k = 0; k < p.<a class="code" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed" title="Total number of Fourier coefficients.">N_total</a>; k++)</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> p.<a class="code" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>[k] = (<span class="keywordtype">double</span>)rand() / RAND_MAX;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>,p.<a class="code" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed" title="Total number of [...]
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> nfst_trafo_direct(&p);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfst__plan.html#a314e2d828775d6aa93a26d7c40b7b931" title="Vector of samples, size is M_total * sizeof( double )">f</a>,p.<a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_tota [...]
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <a class="code" href="nfft3_8h.html#ac80b86521428ec2191919cc96c82f416" title="user routines">nfst_trafo</a>(&p);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfst__plan.html#a314e2d828775d6aa93a26d7c40b7b931" title="Vector of samples, size is M_total * sizeof( double )">f</a>,p.<a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_tota [...]
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> nfst_adjoint_direct(&p);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>,p.<a class="code" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed" title="Total number of [...]
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> nfst_adjoint(&p);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <a class="code" href="group__nfftutil.html#ga5021b4c5ea2a24b0014786deb81cca91" title="Prints a vector of doubles numbers.">nfft_vpr_double</a>(p.<a class="code" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>,p.<a class="code" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed" title="Total number of [...]
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> nfst_finalize(&p);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> }</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> printf(<span class="stringliteral">"computing one dimensional ndst, nfst and adjoint ndst, nfst\n\n"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> simple_test_nfst_1d();</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> printf(<span class="stringliteral">"\n\n"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nfst_8c_source.html b/doc/api/html/nfst_8c_source.html
new file mode 100644
index 0000000..7b8b8c2
--- /dev/null
+++ b/doc/api/html/nfst_8c_source.html
@@ -0,0 +1,1031 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfst.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_d46f6e04c6f21c2dce6558b4c13d80de.html">nfst</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nfst.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: nfst.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#define NFST_DEFAULT_FLAGS PRE_PHI_HUT|\</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor"> PRE_PSI|\</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor"> MALLOC_X|\</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor"> MALLOC_F_HAT|\</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"> MALLOC_F|\</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor"> FFTW_INIT|\</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"> FFT_OUT_OF_PLACE</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#define FFTW_DEFAULT_FLAGS FFTW_ESTIMATE|\</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"> FFTW_DESTROY_INPUT</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#define NFST_SUMMANDS ( 2 * ths->m + 2)</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor"></span><span class="preprocessor">#define NODE(p,r) ( ths->x[(p) * ths->d + (r)])</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#define MACRO_ndst_init_result_trafo \</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor"> memset( f, 0, ths->M_total * sizeof( double));</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_ndst_init_result_adjoint \</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"> memset( f_hat, 0, ths->N_total * sizeof( double));</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#define MACRO_nfst_D_init_result_A \</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"> memset(g_hat, 0, nfst_prod_minus_a_int( ths->n, 0, ths->d) * sizeof( double));</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfst_D_init_result_T \</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor"> memset(f_hat, 0, ths->N_total * sizeof( double));</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor">#define MACRO_nfst_B_init_result_A \</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor"> memset(f, 0, ths->M_total * sizeof( double));</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nfst_B_init_result_T \</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor"> memset(g, 0, nfst_prod_minus_a_int( ths->n, 0, ths->d) * sizeof( double));</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor">#define NFST_PRE_WINFUN( d) ths->N[d] = 2 * ths->N[d]; \</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor"> ths->n[d] = nfst_fftw_2N( ths->n[d]);</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor">#define NFST_POST_WINFUN( d) ths->N[d] = (LRINT(0.5 * ths->N[d])); \</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor"> ths->n[d] = nfst_fftw_2N_rev( ths->n[d]);</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="preprocessor">#define NFST_WINDOW_HELP_INIT WINDOW_HELP_INIT</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">double</span> nfst_phi_hut( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">int</span> k, <span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> NFST_PRE_WINFUN( d);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">double</span> phi_hut_tmp = PHI_HUT( k, d);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> NFST_POST_WINFUN( d);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">return</span> phi_hut_tmp;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordtype">double</span> nfst_phi( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">double</span> x, <span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> {</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> NFST_PRE_WINFUN( d);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">double</span> phi_tmp = PHI( x, d);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> NFST_POST_WINFUN( d);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">return</span> phi_tmp;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">int</span> nfst_fftw_2N( <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">return</span> 2 * ( n + 1);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">int</span> nfst_fftw_2N_rev( <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> div_t n_div;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> n_div = div(n, 2);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">return</span> n_div.quot - 1;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="preprocessor">#define MACRO_with_sin_vec sin_vec[t][ka[t]]</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_without_sin_vec sin( 2.0 * PI * (ka[t]+1) * NODE(j,t))</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="preprocessor">#define MACRO_with_PRE_PHI_HUT ths->c_phi_inv[t][kg[t]];</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_compute_PHI_HUT_INV (1.0 / (nfst_phi_hut( ths, kg[t]+1, t)))</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="preprocessor">#define MACRO_with_PRE_PSI ths->psi[(j * ths->d + t) * NFST_SUMMANDS + lc[t]];</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_compute_PSI \</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="preprocessor"> nfst_phi( ths, NODE(j,t) - (( double)(lc[t] + lb[t])) / nfst_fftw_2N( ths->n[t]), t)</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="preprocessor">#define MACRO_ndst_malloc__sin_vec \</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="preprocessor"> double **sin_vec; \</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="preprocessor"> sin_vec = (double**)nfft_malloc( ths->d * sizeof( double*)); \</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="preprocessor"> for( t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="preprocessor"> sin_vec[t] = (double*)nfft_malloc( ( ths->N[t] - 1) * sizeof( double)); \</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor">#define MACRO_ndst_free__sin_vec \</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor"> </span><span class="comment">/* free allocated memory */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="preprocessor"> for( t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="preprocessor"> nfft_free( sin_vec[t]); \</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="preprocessor"> nfft_free( sin_vec); \</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="preprocessor">#define MACRO_ndst_init__sin_vec \</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="preprocessor"> for( t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="preprocessor"> cos_x[t] = cos( 2.0 * PI * NODE(j,t)); \</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="preprocessor"> sin_vec[t][0] = sin( 2.0 * PI * NODE(j,t)); \</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor"> sin_vec[t][1] = sin( 4.0 * PI * NODE(j,t)); \</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="preprocessor"> for( k = 2; k < ths->N[t] - 1; k++) \</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor"> sin_vec[t][k] = 2.0 * cos_x[t] * sin_vec[t][k-1] \</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="preprocessor"> - sin_vec[t][k-2]; \</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor">#define MACRO_ndst_init__k__sin_k( which_one) \</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor"> sin_k[0] = 1.0; \</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor"> for( t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor"> ka[t] = 0; \</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor"> for( t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="preprocessor"> sin_k[t+1] = sin_k[t] * MACRO_ ##which_one; \</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="preprocessor">#define MACRO_ndst_count__k__sin_k( which_one) \</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor"> ka[ths->d-1]++; \</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor"> i = ths->d - 1; \</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor"> while( ( ka[i] == ths->N[i] - 1) && ( i > 0)) \</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor"> ka[i - 1]++; \</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="preprocessor"> ka[i] = 0; \</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="preprocessor"> i--; \</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="preprocessor"> for( t = i; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="preprocessor"> sin_k[t+1] = sin_k[t] * MACRO_ ##which_one; \</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="preprocessor">#define MACRO_ndst_compute__trafo \</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="preprocessor"> f[j] += f_hat[k] * sin_k[ths->d]; \</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor">#define MACRO_ndst_compute__adjoint \</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="preprocessor"> f_hat[k] += f[j] * sin_k[ths->d]; \</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment">/* slow (trafo) transform */</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor">#define MACRO_ndst( which_one) \</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="preprocessor"> void nfst_ ## which_one ## _direct ( nfst_plan *ths) \</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor"> int j, k, t, i; \</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor"> int ka[ths->d]; \</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="preprocessor"> double sin_k[ths->d+1]; \</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor"> double cos_x[ths->d]; \</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="preprocessor"> double *f = ths->f; \</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="preprocessor"> double *f_hat = ths->f_hat; \</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="preprocessor"> MACRO_ndst_init_result_ ## which_one; \</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="preprocessor"> if( ths->d == 1) \</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="preprocessor"> for( j = 0; j < ths->M_total; j++) \</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="preprocessor"> for( k = 0; k < ths->N_total; k++) \</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="preprocessor"> sin_k[ths->d] = sin( 2.0 * PI * (k+1) * NODE(j,0)); \</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="preprocessor"> MACRO_ndst_compute__ ## which_one; \</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="preprocessor"> if( 1 == 0) </span><span class="comment">/*FIXME: remove slow slow ... */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="preprocessor"> </span><span class="comment">/* slow ndst */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="preprocessor"> for( j = 0; j < ths->M_total; j++) \</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="preprocessor"> MACRO_ndst_init__k__sin_k(without_sin_vec); \</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="preprocessor"> for( k = 0; k < ths->N_total; k++) \</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="preprocessor"> MACRO_ndst_compute__ ## which_one; \</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="preprocessor"> MACRO_ndst_count__k__sin_k(without_sin_vec); \</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="preprocessor"> </span><span class="comment">/* fast nfst_trafo_direct */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="preprocessor"> MACRO_ndst_malloc__sin_vec; \</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="preprocessor"> for( j = 0; j < ths->M_total; j++) \</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="preprocessor"> MACRO_ndst_init__sin_vec; \</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="preprocessor"> MACRO_ndst_init__k__sin_k(with_sin_vec); \</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor"> for( k = 0; k < ths->N_total; k++) \</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor"> MACRO_ndst_compute__ ## which_one; \</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor"> MACRO_ndst_count__k__sin_k(with_sin_vec); \</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor"> MACRO_ndst_free__sin_vec; \</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="preprocessor"> } </span><span class="comment">/* ndst_{trafo, adjoint} */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> MACRO_ndst(trafo)</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> MACRO_ndst(adjoint)</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="preprocessor">#define MACRO_nfst__lower_boundary( j,act_dim) \</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="preprocessor"> lb[(act_dim)] = \</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="preprocessor"> (LRINT(NODE((j),(act_dim)) * nfst_fftw_2N( ths->n[(act_dim)]))) - ths->m; \</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="preprocessor">#define MACRO_nfst_D_compute_A \</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="preprocessor"> g_hat[kg_plain[ths->d]] = f_hat[k_L] * c_phi_inv_k[ths->d]; \</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="preprocessor">#define MACRO_nfst_D_compute_T \</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="preprocessor"> f_hat[k_L] = g_hat[kg_plain[ths->d]] * c_phi_inv_k[ths->d]; \</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor">#define MACRO_init__kg \</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="preprocessor"> for( t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="preprocessor"> kg[t] = 0; \</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="preprocessor"> i = 0; \</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="preprocessor">#define MACRO_count__kg \</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="preprocessor"> kg[ths->d - 1]++; \</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="preprocessor"> i = ths->d - 1; \</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="preprocessor"> while( ( kg[i] == ths->N[i] - 1) && ( i > 0)) \</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="preprocessor"> kg[i - 1]++; \</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="preprocessor"> kg[i] = 0; \</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="preprocessor"> i--; \</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="preprocessor">#define MACRO_update__c_phi_inv_k__lg_plain( which_one, which_phi) \</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="preprocessor"> for( t = i; t < ths->d; t++) { \</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="preprocessor"> MACRO__c_phi_inv_k( which_phi); \</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor"> kg_plain[t+1] = kg_plain[t] * ths->n[t] + kg[t]; \</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="preprocessor">#define MACRO__c_phi_inv_k( which_phi) \</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="preprocessor"> c_phi_inv_k[t+1] = 0.5 * c_phi_inv_k[t] * MACRO_ ## which_phi; \</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="preprocessor">#define MACRO_nfst_D(which_one) \</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="preprocessor">static inline void nfst_D_ ## which_one (nfst_plan *ths) \</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="preprocessor"> int k_L; \</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor"> int i, t; \</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="preprocessor"> int kg[ths->d]; \</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="preprocessor"> double c_phi_inv_k[ths->d+1]; \</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="preprocessor"> int kg_plain[ths->d+1]; \</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="preprocessor"> double *g_hat, *f_hat; \</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="preprocessor"> g_hat = ths->g_hat; \</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="preprocessor"> f_hat = ths->f_hat; \</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="preprocessor"> MACRO_nfst_D_init_result_ ## which_one \</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor"> c_phi_inv_k[0] = 1; \</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="preprocessor"> kg_plain[0] = 0; \</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="preprocessor"> MACRO_init__kg; \</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="preprocessor"> if( ths->nfst_flags & PRE_PHI_HUT) \</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="preprocessor"> for( k_L = 0; k_L < ths->N_total; k_L++) \</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="preprocessor"> MACRO_update__c_phi_inv_k__lg_plain( which_one, with_PRE_PHI_HUT); \</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="preprocessor"> MACRO_nfst_D_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="preprocessor"> MACRO_count__kg; \</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="preprocessor"> } </span><span class="comment">/* for(k_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="preprocessor"> for( k_L = 0; k_L < ths->N_total; k_L++) \</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="preprocessor"> MACRO_update__c_phi_inv_k__lg_plain( which_one, compute_PHI_HUT_INV); \</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="preprocessor"> MACRO_nfst_D_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="preprocessor"> MACRO_count__kg \</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="preprocessor"> } </span><span class="comment">/* for(k_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="preprocessor">} </span><span class="comment">/* nfst_D */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> MACRO_nfst_D(A)</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> MACRO_nfst_D(T)</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor">#define MACRO_nfst_B_PRE_FULL_PSI_compute_A \</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="preprocessor"> (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]]; \</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="preprocessor">#define MACRO_nfst_B_PRE_FULL_PSI_compute_T \</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="preprocessor"> g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj); \</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="preprocessor">#define MACRO_nfst_B_compute_A \</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="preprocessor"> (*fj) += phi_tilde[ths->d] * g[lg_plain[ths->d]]; \</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="preprocessor">#define MACRO_nfst_B_compute_T \</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="preprocessor"> g[lg_plain[ths->d]] += phi_tilde[ths->d] * (*fj); \</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="preprocessor">#define MACRO_compute_lg_offset__count_lg( i0) \</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="preprocessor"> </span><span class="comment">/* determine index in g-array corresponding to lb[(i0)] */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="preprocessor"> if( lb[(i0)] < 0) \</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="preprocessor"> lg_offset[(i0)] = \</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="preprocessor"> (lb[(i0)] % nfst_fftw_2N( ths->n[(i0)])) + nfst_fftw_2N( ths->n[(i0)]); \</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="preprocessor"> lg_offset[(i0)] = lb[(i0)] % nfst_fftw_2N( ths->n[(i0)]); \</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="preprocessor"> if( lg_offset[(i0)] > ths->n[(i0)]+1) \</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="preprocessor"> lg_offset[(i0)] = -( nfst_fftw_2N( ths->n[(i0)]) - lg_offset[(i0)]); \</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="preprocessor">#define MACRO_set__lg__to__lg_offset \</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="preprocessor"> if( lg_offset[i] <= 0) \</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="preprocessor"> lg[i] = -lg_offset[i]; \</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="preprocessor"> count_lg[i] = -1; \</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor"> lg[i] = +lg_offset[i]; \</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="preprocessor"> count_lg[i] = +1; \</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="preprocessor">#define MACRO_count__lg(dim) \</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="preprocessor"> </span><span class="comment">/* turn around when we hit one of the boundaries */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="preprocessor"> if( ((lg[(dim)] == 0) || (lg[(dim)] == (ths->n[(dim)] + 1))) ) \</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor"> count_lg[(dim)] *= -1; \</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="preprocessor"> lg[(dim)] += count_lg[(dim)]; \</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="preprocessor">#define MACRO_init_lb_lg_lc_phi_tilde_lg_plain( which_psi) \</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor"> for( i = 0; i < ths->d; i++) \</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor"> MACRO_nfst__lower_boundary( j, i); \</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="preprocessor"> MACRO_compute_lg_offset__count_lg( i); \</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="preprocessor"> MACRO_set__lg__to__lg_offset; \</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor"> </span><span class="comment">/* counter for lg */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor"> lc[i] = 0; \</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="preprocessor"> for( t = 0; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="preprocessor"> if( lg[t] == 0) \</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="preprocessor"> lg_plain[t+1] = lg_plain[t] * ths->n[t]; \</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="preprocessor"> phi_tilde[t+1] = 0.0; \</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="preprocessor"> if( lg[t] == ths->n[t]+1) \</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="preprocessor"> lg_plain[t+1] = lg_plain[t] * ths->n[t] + ths->n[t]-1; \</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="preprocessor"> phi_tilde[t+1] = 0.0; \</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="preprocessor"> MACRO__phi_tilde( which_psi); \</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="preprocessor"> lg_plain[t+1] = lg_plain[t] * ths->n[t] + lg[t]-1; \</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="preprocessor"> i = 0; \</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> </div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="preprocessor">#define MACRO_count__lg_lc \</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="preprocessor"> MACRO_count__lg( ths->d-1); \</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="preprocessor"> lc[ths->d - 1]++; \</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="preprocessor"> i = ths->d - 1; \</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="preprocessor"> while( (lc[i] == NFST_SUMMANDS) && (i > 0)) \</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="preprocessor"> lc[i - 1]++; \</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="preprocessor"> lc[i] = 0; \</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="preprocessor"> </span><span class="comment">/* ansonsten lg[i-1] verschieben */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="preprocessor"> MACRO_count__lg( i - 1); \</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="preprocessor"> </span><span class="comment">/* lg[i] = anfangswert */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="preprocessor"> MACRO_set__lg__to__lg_offset; \</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="preprocessor"> i--; \</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> </div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="preprocessor">#define MACRO_update__phi_tilde__lg_plain( which_psi) \</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="preprocessor"> for( t = i; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="preprocessor"> if( (lg[t] != 0) && (lg[t] != ths->n[t]+1)) \</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="preprocessor"> MACRO__phi_tilde( which_psi); \</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="preprocessor"> lg_plain[t+1] = lg_plain[t] * ths->n[t] + lg[t]-1; \</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="preprocessor"> phi_tilde[t+1] = 0.0; \</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="preprocessor">#define MACRO__phi_tilde( which_psi) \</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="preprocessor"> phi_tilde[t+1] = (double)count_lg[t] * phi_tilde[t] * MACRO_ ## which_psi; \</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> </div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="preprocessor">#define MACRO_nfst_B( which_one) \</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="preprocessor"> static inline void nfst_B_ ## which_one ( nfst_plan *ths) \</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="preprocessor"> { </span><span class="comment">/* MACRO_nfst_B */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="preprocessor"> int lb[ths->d]; \</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="preprocessor"> int j, t, i; \</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="preprocessor"> int lprod, l_L, ix; \</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="preprocessor"> int lc[ths->d]; \</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="preprocessor"> int lg[ths->d]; \</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="preprocessor"> int lg_offset[ths->d]; \</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="preprocessor"> int count_lg[ths->d]; \</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="preprocessor"> int lg_plain[ths->d+1]; \</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="preprocessor"> double *f, *g; \</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="preprocessor"> double phi_tilde[ths->d+1]; \</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="preprocessor"> double *fj; \</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="preprocessor"> f = ths->f; g = ths->g; \</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="preprocessor"> MACRO_nfst_B_init_result_ ## which_one \</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="preprocessor"> </span><span class="comment">/* both flags are set */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="preprocessor"> if( (ths->nfst_flags & PRE_PSI) && (ths->nfst_flags & PRE_FULL_PSI)) \</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="preprocessor"> for( ix = 0, j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="preprocessor"> for( l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++) \</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="preprocessor"> MACRO_nfst_B_PRE_FULL_PSI_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="preprocessor"> phi_tilde[0] = 1; \</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="preprocessor"> lg_plain[0] = 0; \</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="preprocessor"> for( t = 0, lprod = 1; t < ths->d; t++) \</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="preprocessor"> lprod *= NFST_SUMMANDS; \</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="preprocessor"> </span><span class="comment">/* PRE_PSI flag is set */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="preprocessor"> if( ths->nfst_flags & PRE_PSI) \</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="preprocessor"> for( j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="preprocessor"> MACRO_init_lb_lg_lc_phi_tilde_lg_plain( with_PRE_PSI); \</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="preprocessor"> for( l_L = 0; l_L < lprod; l_L++) \</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="preprocessor"> MACRO_update__phi_tilde__lg_plain( with_PRE_PSI); \</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="preprocessor"> MACRO_nfst_B_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="preprocessor"> MACRO_count__lg_lc; \</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="preprocessor"> } </span><span class="comment">/* for( l_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="preprocessor"> } </span><span class="comment">/* for( j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="preprocessor"> } </span><span class="comment">/* if( PRE_PSI) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="preprocessor"> </span><span class="comment">/* no PSI flag is set */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="preprocessor"> else \</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="preprocessor"> for( j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="preprocessor"> MACRO_init_lb_lg_lc_phi_tilde_lg_plain( compute_PSI); \</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="preprocessor"> for( l_L = 0; l_L < lprod; l_L++) \</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="preprocessor"> MACRO_update__phi_tilde__lg_plain( compute_PSI); \</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="preprocessor"> MACRO_nfst_B_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="preprocessor"> MACRO_count__lg_lc; \</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="preprocessor"> } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="preprocessor"> } </span><span class="comment">/* for(j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="preprocessor"> } </span><span class="comment">/* else(PRE_PSI) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="preprocessor"> }</span><span class="comment">/* else( PRE_PRE && FULL_PRE_PSI) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="preprocessor">} </span><span class="comment">/* nfst_B */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> MACRO_nfst_B(A)</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> MACRO_nfst_B(T)</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> </div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> </div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno"><a class="code" href="nfft3_8h.html#ac80b86521428ec2191919cc96c82f416"> 647</a></span> <span class="keywordtype">void</span> nfst_trafo( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths)</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> {</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> ths->g_hat = ths->g1;</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> ths->g = ths->g2;</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> </div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> TIC(0)</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> nfst_D_A( ths);</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> TOC(0)</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> </div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> </div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> TIC(1)</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> fftw_execute( ths->my_fftw_r2r_plan);</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> TOC(1)</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> </div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> </div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> </div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> TIC(2)</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> nfst_B_A( ths);</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> TOC(2)</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> </div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> } <span class="comment">/* nfst_trafo */</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> </div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> </div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="keywordtype">void</span> nfst_adjoint( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths)</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> {</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> ths->g_hat = ths-><a class="code" href="structnfst__plan.html#a7b67e2cf657227ae46d13fa239d534f7" title="output of fftw">g2</a>;</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> ths->g = ths-><a class="code" href="structnfst__plan.html#a06cd5d11b13d590c9ab3a88d93b21fb2" title="input of fftw">g1</a>;</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> TIC(2)</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> nfst_B_T( ths);</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> TOC(2)</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> </div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> TIC(1)</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> fftw_execute( ths->my_fftw_r2r_plan);</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> TOC(1)</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> </div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> TIC(0)</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> nfst_D_T( ths);</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> TOC(0)</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> } <span class="comment">/* nfst_adjoint */</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="keywordtype">void</span> nfst_precompute_phi_hut( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths)</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> {</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="keywordtype">int</span> kg[ths->d]; </div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> ths->c_phi_inv = (<span class="keywordtype">double</span>**)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths->d * <span class="keyword">sizeof</span>( <span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> </div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="keywordflow">for</span>( t = 0; t < ths->d; t++)</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> {</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> ths->c_phi_inv[t] = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ( ths->N[t] - 1) * <span class="keyword">sizeof</span>( double));</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> </div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="keywordflow">for</span>( kg[t] = 0; kg[t] < ths->N[t] - 1; kg[t]++)</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> {</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> ths->c_phi_inv[t][kg[t]] = MACRO_compute_PHI_HUT_INV;</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> }</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> }</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> } <span class="comment">/* nfst_phi_hut */</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> </div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> </div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> <span class="keywordtype">void</span> nfst_precompute_psi( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths)</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> {</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="keywordtype">int</span> j; </div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="keywordtype">int</span> lc[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>]; </div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="keywordtype">int</span> lb[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>]; </div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> {</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="keywordflow">for</span>(j = 0; j < ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> {</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> MACRO_nfst__lower_boundary( j, t);</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> </div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="keywordflow">for</span>( lc[t] = 0; lc[t] < NFST_SUMMANDS; lc[t]++)</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> ths-><a class="code" href="structnfst__plan.html#a59c1ef7493650838cf31086a46ff2e3f" title="precomputed data, matrix B">psi</a>[(j * ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> + t) * NFST_SUMMANDS + lc[t]] = MACRO_compute_PSI;</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> </div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> } <span class="comment">/* for(t) */</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> </div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="comment">/* full precomputation of psi */</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> <span class="keywordflow">if</span> ( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <a class="code" href="nfft3_8h.html#a02d072e80ccaca6482b396540eaef585" title="more memory usage, a bit faster">nfst_full_psi</a>( ths, ths->nfst_full_psi_eps);</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> </div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> } <span class="comment">/* nfst_precompute_psi */</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> </div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> </div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> </div>
+<div class="line"><a name="l00788"></a><span class="lineno"><a class="code" href="nfft3_8h.html#a02d072e80ccaca6482b396540eaef585"> 788</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a02d072e80ccaca6482b396540eaef585" title="more memory usage, a bit faster">nfst_full_psi</a>(<a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">double</span> eps)</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> {</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="keywordtype">int</span> t, i; </div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> <span class="keywordtype">int</span> j; </div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="keywordtype">int</span> l_L; </div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="keywordtype">int</span> lc[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>]; </div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="keywordtype">int</span> lg_plain[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>+1]; </div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="keywordtype">int</span> count_lg[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>];</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="keywordtype">int</span> lg_offset[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>];</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="keywordtype">int</span> lg[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>];</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="keywordtype">int</span> lprod; </div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="keywordtype">int</span> lb[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>]; </div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="keywordtype">double</span> phi_tilde[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>+1];</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> </div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> <span class="keywordtype">int</span> *index_g, *index_f;</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="keywordtype">double</span> *new_psi;</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keywordtype">int</span> ix, ix_old, size_psi;</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> </div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> phi_tilde[0] = 1.0;</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> lg_plain[0] = 0;</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> </div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> {</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> size_psi = ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> index_f = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a> * <span class="keyword">sizeof</span>( <span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> index_g = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( size_psi * <span class="keyword">sizeof</span>( <span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> new_psi = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( size_psi * <span class="keyword">sizeof</span>( <span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> </div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> <span class="keywordflow">for</span>( t = 0,lprod = 1; t < ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> {</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> lprod *= NFST_SUMMANDS;</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> eps *= PHI( 0, t);</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> }</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> </div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="keywordflow">for</span>( ix = 0, ix_old = 0, j = 0; j < ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> {</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> MACRO_init_lb_lg_lc_phi_tilde_lg_plain( with_PRE_PSI);</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> </div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="keywordflow">for</span>( l_L = 0; l_L < lprod; l_L++)</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> {</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> MACRO_update__phi_tilde__lg_plain( with_PRE_PSI);</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> </div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keywordflow">if</span>( fabs(phi_tilde[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>]) > eps)</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> {</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> index_g[ix] = lg_plain[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>];</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> new_psi[ix] = phi_tilde[ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>];</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> </div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> ix++;</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <span class="keywordflow">if</span>( ix == size_psi)</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> {</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> size_psi += ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> index_g = (<span class="keywordtype">int</span>*)realloc( index_g, size_psi * <span class="keyword">sizeof</span>( <span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> new_psi = (<span class="keywordtype">double</span>*)realloc( new_psi, size_psi * <span class="keyword">sizeof</span>( <span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> }</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> }</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> MACRO_count__lg_lc;</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> </div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> </div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> index_f[j] = ix - ix_old;</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> ix_old = ix;</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> </div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> </div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a59c1ef7493650838cf31086a46ff2e3f" title="precomputed data, matrix B">psi</a>);</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> </div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> size_psi = ix;</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> ths-><a class="code" href="structnfst__plan.html#a1780e54f9fed43e92c22a1e70274e7ad" title="only for thin B">size_psi</a> = size_psi;</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> index_g = (<span class="keywordtype">int</span>*)realloc( index_g, size_psi * <span class="keyword">sizeof</span>( <span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> new_psi = (<span class="keywordtype">double</span>*)realloc( new_psi, size_psi * <span class="keyword">sizeof</span>( <span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> </div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> ths-><a class="code" href="structnfst__plan.html#a59c1ef7493650838cf31086a46ff2e3f" title="precomputed data, matrix B">psi</a> = new_psi;</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> ths-><a class="code" href="structnfst__plan.html#a2d2a4a4d3c7ff12f35045b5466f41811" title="only for thin B">psi_index_g</a> = index_g;</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> ths-><a class="code" href="structnfst__plan.html#a028609e96fa5f10d4197e4b50312180c" title="only for thin B">psi_index_f</a> = index_f;</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> } <span class="comment">/* if(PRE_PSI) */</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> } <span class="comment">/* nfst_full_psi */</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> </div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> </div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> </div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="keywordtype">void</span> nfst_init_help( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths)</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> {</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> ths-><a class="code" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed" title="Total number of Fourier coefficients.">N_total</a> = <a class="code" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40" title="Computes integer .">nfst_prod_minus_a_int</a>( ths-><a class="code" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b" title="bandwidth">N</a>, 1, ths-><a class= [...]
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> </div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> ths-><a class="code" href="structnfst__plan.html#a7a8028a0e7348e5fa7717eebf07b76d1" title="oversampling-factor">sigma</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> * <span class="keyword">sizeof</span [...]
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> </div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> <span class="keywordflow">for</span>( t = 0; t < ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> <span class="comment">/* FIXME: n/N or (n+1)/N */</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> ths-><a class="code" href="structnfst__plan.html#a7a8028a0e7348e5fa7717eebf07b76d1" title="oversampling-factor">sigma</a>[t] = ((<span class="keywordtype">double</span>)ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a>[t] + 1) / ths-><a class="code" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b" title="bandwidth">N</a>[ [...]
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> </div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> <span class="comment">/* assign r2r transform kinds for each dimension */</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> ths->r2r_kind = (fftw_r2r_kind*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a> ( ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> * <span class="keyword">sizeof</span>( fftw_r2r_kind));</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> <span class="keywordflow">for</span> (t = 0; t < ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> ths->r2r_kind[t] = FFTW_RODFT00;</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> </div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> </div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> WINDOW_HELP_INIT;</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> </div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & MALLOC_X)</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> ths-><a class="code" href="structnfst__plan.html#a048ebad4f2abe3821988fa06a5e308d8" title="nodes (in time/spatial domain)">x</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> * ths-><a class="code" hre [...]
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> </div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & MALLOC_F_HAT)</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> ths-><a class="code" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed" title="Total number [...]
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> </div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & MALLOC_F)</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> ths-><a class="code" href="structnfst__plan.html#a314e2d828775d6aa93a26d7c40b7b931" title="Vector of samples, size is M_total * sizeof( double )">f</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_t [...]
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> nfst_precompute_phi_hut( ths);</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> </div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="comment">/* NO FFTW_MALLOC HERE */</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> {</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> ths-><a class="code" href="structnfst__plan.html#a59c1ef7493650838cf31086a46ff2e3f" title="precomputed data, matrix B">psi</a> =</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a> * ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> * NFST_SUMMANDS * <span cla [...]
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> </div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> ths->nfst_full_psi_eps = pow(10, -10);</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> }</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> </div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & FFTW_INIT)</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> {</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> ths-><a class="code" href="structnfst__plan.html#a06cd5d11b13d590c9ab3a88d93b21fb2" title="input of fftw">g1</a> =</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( <a class="code" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40" title="Computes integer .">nfst_prod_minus_a_int</a>( ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a>, 0, ths-><a class="code [...]
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> </div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & FFT_OUT_OF_PLACE)</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> ths-><a class="code" href="structnfst__plan.html#a7b67e2cf657227ae46d13fa239d534f7" title="output of fftw">g2</a> =</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( <a class="code" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40" title="Computes integer .">nfst_prod_minus_a_int</a>( ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a>, 0, ths-><a class="co [...]
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> ths-><a class="code" href="structnfst__plan.html#a7b67e2cf657227ae46d13fa239d534f7" title="output of fftw">g2</a> = ths-><a class="code" href="structnfst__plan.html#a06cd5d11b13d590c9ab3a88d93b21fb2" title="input of fftw">g1</a>;</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> </div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> ths->my_fftw_r2r_plan =</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> fftw_plan_r2r( ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>, ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a>, ths-><a class="code" href="structnfst__plan.html#a06cd5d11b13d590c9ab3a88d93b21fb2" title="input of fftw">g1</a>, ths-><a class="code" href="structnf [...]
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> }</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> </div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> ths-><a class="code" href="structnfst__plan.html#a4a3b2ecc26204b3087d1c19b7857943f" title="Pointer to the own transform.">mv_trafo</a> = (void (*) (<span class="keywordtype">void</span>* ))<a class="code" href="nfft3_8h.html#ac80b86521428ec2191919cc96c82f416" title="user routines">nfst_trafo</a>;</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> ths-><a class="code" href="structnfst__plan.html#aedfe6da9afb5dc0457cc4f2197034fc0" title="Pointer to the own adjoint.">mv_adjoint</a> = (void (*) (<span class="keywordtype">void</span>* ))nfst_adjoint;</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> }</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> </div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> <span class="keywordtype">void</span> nfst_init( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> {</div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> = d;</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> </div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> ths-><a class="code" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b" title="bandwidth">N</a> = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> * <span class="keyword">sizeof</span>( <span class [...]
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> </div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="keywordflow">for</span>(t = 0;t < d; t++)</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> ths-><a class="code" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b" title="bandwidth">N</a>[t] = N[t];</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> </div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a> = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> * <span class="keyword">sizeof</span>( <span [...]
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> </div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <span class="keywordflow">for</span>( t = 0; t < d; t++)</div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a>[t] = 2 * X(next_power_of_2)( ths-><a class="code" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b" title="bandwidth">N</a>[t]) - 1;</div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> </div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a> = M_total;</div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> </div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> <span class="comment">/* Was soll dieser Ausdruck machen? Es handelt sich um eine Ganzzahl!</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> <span class="comment"></span></div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="comment"> WINDOW_HELP_ESTIMATE_m;</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> <span class="comment">*/</span> </div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> </div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> = NFST_DEFAULT_FLAGS;</div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> ths-><a class="code" href="structnfst__plan.html#a69d37e02b7a2868e3861c582e76e35d8" title="flags for the fftw">fftw_flags</a> = FFTW_DEFAULT_FLAGS;</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> </div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> nfst_init_help( ths);</div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> }</div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> </div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> </div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> <span class="keywordtype">void</span> nfst_init_m( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> M_total, <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> {</div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> <span class="keywordtype">int</span> t, n[d];</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> </div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> <span class="keywordflow">for</span>( t = 0; t < d; t++)</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> n[t] = nfst_fftw_2N( X(next_power_of_2)( N[t]));</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> </div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> nfst_init_guru( ths, d, N, M_total, n, m, NFST_DEFAULT_FLAGS, FFTW_DEFAULT_FLAGS);</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> }</div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> </div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="keywordtype">void</span> nfst_init_guru( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> *N,</div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="keywordtype">int</span> M_total, <span class="keywordtype">int</span> *n, <span class="keywordtype">int</span> m,</div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="keywordtype">unsigned</span> nfst_flags, <span class="keywordtype">unsigned</span> fftw_flags)</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> {</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> = d;</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> ths-><a class="code" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98" title="Total number of samples.">M_total</a> = M_total;</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> </div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> ths-><a class="code" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b" title="bandwidth">N</a> = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> * <span class="keyword">sizeof</span>( <span class [...]
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> </div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> <span class="keywordflow">for</span>( t = 0; t < d; t++)</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> ths-><a class="code" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b" title="bandwidth">N</a>[t] = N[t];</div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> </div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a> = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>( ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a> * <span class="keyword">sizeof</span>( <span [...]
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> </div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <span class="keywordflow">for</span>( t = 0; t < d; t++)</div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a>[t] = n[t];</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> </div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> ths-><a class="code" href="structnfst__plan.html#ac3aacf128a897c132809411ef9d41d7d" title="cut-off parameter in time-domain">m</a> = m;</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> </div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> = nfst_flags;</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> ths-><a class="code" href="structnfst__plan.html#a69d37e02b7a2868e3861c582e76e35d8" title="flags for the fftw">fftw_flags</a> = fftw_flags;</div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> </div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> nfst_init_help( ths);</div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> }</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> </div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> </div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="keywordtype">void</span> nfst_init_1d( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">int</span> N0, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> {</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="keywordtype">int</span> N[1];</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> </div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> N[0] = N0;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> nfst_init( ths, 1, N, M_total);</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> }</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> </div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="keywordtype">void</span> nfst_init_2d( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">int</span> N0, <span class="keywordtype">int</span> N1, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> {</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="keywordtype">int</span> N[2];</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> </div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> N[0] = N0;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> N[1] = N1;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> nfst_init( ths, 2, N, M_total);</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> }</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> </div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="keywordtype">void</span> nfst_init_3d( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths, <span class="keywordtype">int</span> N0, <span class="keywordtype">int</span> N1, <span class="keywordtype">int</span> N2, <span class="keywordtype">int</span> M_total)</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> {</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="keywordtype">int</span> N[3];</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> </div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> N[0] = N0;</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> N[1] = N1;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> N[2] = N2;</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> nfst_init( ths, 3, N, M_total);</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> }</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> </div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="keywordtype">void</span> nfst_finalize( <a class="code" href="structnfst__plan.html">nfst_plan</a> *ths)</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> {</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="keywordtype">int</span> t; <span class="comment">/* index over dimensions */</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> </div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> <span class="keywordflow">if</span>( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & FFTW_INIT)</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> {</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> fftw_destroy_plan( ths->my_fftw_r2r_plan);</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="keywordflow">if</span>( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & FFT_OUT_OF_PLACE)</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a7b67e2cf657227ae46d13fa239d534f7" title="output of fftw">g2</a>);</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> </div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a06cd5d11b13d590c9ab3a88d93b21fb2" title="input of fftw">g1</a>);</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> }</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> </div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="comment">/* NO FFTW_FREE HERE */</span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <span class="keywordflow">if</span>( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> {</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="keywordflow">if</span>( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> {</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a2d2a4a4d3c7ff12f35045b5466f41811" title="only for thin B">psi_index_g</a>);</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a028609e96fa5f10d4197e4b50312180c" title="only for thin B">psi_index_f</a>);</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> }</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> </div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a59c1ef7493650838cf31086a46ff2e3f" title="precomputed data, matrix B">psi</a>);</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> }</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> </div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="keywordflow">if</span>( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & PRE_PHI_HUT) {</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <span class="keywordflow">for</span>( t = 0; t < ths-><a class="code" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a2c42ae2c8ca95bb4c0c1dfc279bc2cab" title="precomputed data, matrix D">c_phi_inv</a>[t]);</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a2c42ae2c8ca95bb4c0c1dfc279bc2cab" title="precomputed data, matrix D">c_phi_inv</a>);</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> }</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> </div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="keywordflow">if</span>( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & MALLOC_F)</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a314e2d828775d6aa93a26d7c40b7b931" title="Vector of samples, size is M_total * sizeof( double )">f</a>);</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> </div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> <span class="keywordflow">if</span>( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & MALLOC_F_HAT)</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c" title="Vector of Fourier coefficients, size is N_total * sizeof( double )">f_hat</a>);</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="keywordflow">if</span>( ths-><a class="code" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9" title="flags for precomputation, malloc">nfst_flags</a> & MALLOC_X)</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a048ebad4f2abe3821988fa06a5e308d8" title="nodes (in time/spatial domain)">x</a>);</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> </div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> WINDOW_HELP_FINALIZE;</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> </div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b" title="bandwidth">N</a>);</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2" title="length of DST-1">n</a>);</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>( ths-><a class="code" href="structnfst__plan.html#a7a8028a0e7348e5fa7717eebf07b76d1" title="oversampling-factor">sigma</a>);</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> </div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->r2r_kind);</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> } <span class="comment">/* nfst_finalize */</span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nnfft_2simple__test_8c_source.html b/doc/api/html/nnfft_2simple__test_8c_source.html
new file mode 100644
index 0000000..5a949c3
--- /dev/null
+++ b/doc/api/html/nnfft_2simple__test_8c_source.html
@@ -0,0 +1,352 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - simple_test.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_0c9e32fd27b7f4e80ec4ebeb6c427e2d.html">nnfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nnfft/simple_test.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keywordtype">void</span> simple_test_nnfft_1d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordtype">int</span> j,k; </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <a class="code" href="structnnfft__plan.html">nnfft_plan</a> my_plan; </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">int</span> N[1];</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> N[0]=12;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> nnfft_init(&my_plan, 1, 3, 19, N);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> {</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j]=((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> {</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[j]=((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> nnfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9" title="computes all entries of B explicitly">nnfft_precompute_full_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <a class="code" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6" title="create a lookup table">nnfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580" title="initialisation of direct transform">nnfft_precompute_phi_hut</a>(&my_plan);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> my_plan.<a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = ((<span class="keywordtype">double</span>)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f_hat,my_plan.N_total,"given Fourier coefficients, vector f_hat");</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> nnfft_trafo_direct(&my_plan);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f,my_plan.M_total,"nndft, vector f");</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> nnfft_trafo(&my_plan);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f,my_plan.M_total,"nnfft, vector f");</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> nnfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> }</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> static <span class="keywordtype">void</span> simple_test_adjoint_nnfft_1d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> {</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">int</span> j; </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <a class="code" href="structnnfft__plan.html">nnfft_plan</a> my_plan; </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">int</span> N[1];</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> N[0]=12;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> nnfft_init(&my_plan, 1, 20, 33, N);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j]=((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[j]=((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> }</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> nnfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9" title="computes all entries of B explicitly">nnfft_precompute_full_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <a class="code" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6" title="create a lookup table">nnfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580" title="initialisation of direct transform">nnfft_precompute_phi_hut</a>(&my_plan);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> my_plan.<a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = ((<span class="keywordtype">double</span>)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f,my_plan.M_total,"given Samples, vector f");</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> nnfft_adjoint_direct(&my_plan);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f_hat,my_plan.N_total,"adjoint nndft, vector f_hat");</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> nnfft_adjoint(&my_plan);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f_hat,my_plan.N_total,"adjoint nnfft, vector f_hat");</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> nnfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> static <span class="keywordtype">void</span> simple_test_nnfft_2d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> {</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordtype">int</span> j,k; </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <a class="code" href="structnnfft__plan.html">nnfft_plan</a> my_plan; </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">int</span> N[2];</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> N[0]=12;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> N[1]=14;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> nnfft_init(&my_plan, 2,12*14,19, N);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> {</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[2*j]=((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[2*j+1]=((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> }</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> {</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[2*j]=((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[2*j+1]=((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> nnfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9" title="computes all entries of B explicitly">nnfft_precompute_full_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <a class="code" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6" title="create a lookup table">nnfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580" title="initialisation of direct transform">nnfft_precompute_phi_hut</a>(&my_plan);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> my_plan.<a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = ((<span class="keywordtype">double</span>)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f_hat,12,</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> "given Fourier coefficients, vector f_hat (first 12 entries)");</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> nnfft_trafo_direct(&my_plan);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f,my_plan.M_total,"ndft, vector f");</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> nnfft_trafo(&my_plan);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.f,my_plan.M_total,"nfft, vector f");</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> nnfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> static <span class="keywordtype">void</span> simple_test_innfft_1d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> {</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordtype">int</span> j,k,l,N=8; </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <a class="code" href="structnnfft__plan.html">nnfft_plan</a> my_plan; </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_iplan; </div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> nnfft_init(&my_plan,1 ,8 ,8 ,&N);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> solver_init_advanced_complex(&my_iplan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_plan),CGNR);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j]=((<span class="keywordtype">double</span>)rand())/((double)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[k]=((<span class="keywordtype">double</span>)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> nnfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9" title="computes all entries of B explicitly">nnfft_precompute_full_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580" title="initialisation of direct transform">nnfft_precompute_phi_hut</a>(&my_plan);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j] = ((<span class="keywordtype">double</span>)rand())/((double)RAND_MAX);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>,my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</ [...]
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = 0.0;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coeffici [...]
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="stringliteral">"approximate solution, vector f_hat_iter"</span>);</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> solver_before_loop_complex(&my_iplan);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">for</span>(l=0;l<8;l++)</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> {</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> printf(<span class="stringliteral">"iteration l=%d\n"</span>,l);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coeffi [...]
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="stringliteral">"approximate solution, vector f_hat_iter"</span>);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,my_plan.<a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is [...]
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <a class="code" href="nfft3_8h.html#a994c1748ebe1371c53dd2cb437054d4f" title="user routines">nnfft_trafo</a>(&my_plan);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(my_plan.<a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total num [...]
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,my_plan.<a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is [...]
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> }</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> nnfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keyword">static</span> <span class="keywordtype">void</span> measure_time_nnfft_1d(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> {</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordtype">int</span> j,k; </div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <a class="code" href="structnnfft__plan.html">nnfft_plan</a> my_plan; </div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordtype">int</span> my_N,N=4;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keywordtype">double</span> t;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> ticks t0, t1;</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">for</span>(my_N=16; my_N<=16384; my_N*=2)</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> {</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> nnfft_init(&my_plan,1,my_N,my_N,&N);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j]=((<span class="keywordtype">double</span>)rand())/((double)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[j]=((<span class="keywordtype">double</span>)rand())/((<span class="keywordtype">double</span>)RAND_MAX)-0.5;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> nnfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9" title="computes all entries of B explicitly">nnfft_precompute_full_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580" title="initialisation of direct transform">nnfft_precompute_phi_hut</a>(&my_plan);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> my_plan.<a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = ((<span class="keywordtype">double</span>)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((<span class="keywordtype">double</span>)RAND_MAX);</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> t0 = getticks();</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> nnfft_trafo_direct(&my_plan);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> t1 = getticks();</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> printf("t_nndft=%e,\t",t);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> t0 = getticks();</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> nnfft_trafo(&my_plan);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> t1 = getticks();</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> printf("t_nnfft=%e\t",t);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> printf("(N=M=%d)\n",my_N);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> nnfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> }</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> }</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> {</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> printf(<span class="stringliteral">"1) computing a one dimensional nndft, nnfft\n\n"</span>);</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> simple_test_nnfft_1d();</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> getc(stdin);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> printf(<span class="stringliteral">"1a) computing a one dimensional adjoint nndft, nnfft\n\n"</span>);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> simple_test_adjoint_nnfft_1d();</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> getc(stdin);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> printf(<span class="stringliteral">"2) computing a two dimensional nndft, nnfft\n\n"</span>);</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> simple_test_nnfft_2d();</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> getc(stdin);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> printf(<span class="stringliteral">"3) computing a one dimensional innfft\n\n"</span>);</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> simple_test_innfft_1d();</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> getc(stdin);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> printf(<span class="stringliteral">"4) computing times for one dimensional nnfft\n\n"</span>);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> measure_time_nnfft_1d();</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nnfft_8c_source.html b/doc/api/html/nnfft_8c_source.html
new file mode 100644
index 0000000..9bdb897
--- /dev/null
+++ b/doc/api/html/nnfft_8c_source.html
@@ -0,0 +1,704 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nnfft.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_ea25627ea6e0d39c26e4e31bca7b94c4.html">nnfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nnfft.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: nnfft.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#define MACRO_nndft_init_result_trafo memset(f,0,ths->M_total*sizeof(double _Complex));</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nndft_init_result_conjugated MACRO_nndft_init_result_trafo</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nndft_init_result_adjoint memset(f_hat,0,ths->N_total*sizeof(double _Complex));</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nndft_init_result_transposed MACRO_nndft_init_result_adjoint</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#define MACRO_nndft_sign_trafo (-2.0*PI)</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nndft_sign_conjugated (+2.0*PI)</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nndft_sign_adjoint (+2.0*PI)</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nndft_sign_transposed (-2.0*PI)</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#define MACRO_nndft_compute_trafo (*fj) += (*f_hat_k)*cexp(+ _Complex_I*omega);</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#define MACRO_nndft_compute_conjugated MACRO_nndft_compute_trafo</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#define MACRO_nndft_compute_adjoint (*f_hat_k) += (*fj)*cexp(+ _Complex_I*omega);</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#define MACRO_nndft_compute_transposed MACRO_nndft_compute_adjoint</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#define MACRO_nndft(which_one) \</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">void nnfft_ ## which_one ## _direct (nnfft_plan *ths) \</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"> int j; \</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor"> int t; \</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor"> int l; \</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor"> double _Complex *f_hat, *f; \</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"> double _Complex *f_hat_k; \</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"> double _Complex *fj; \</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor"> double omega; \</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"> f_hat=ths->f_hat; f=ths->f; \</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor"> MACRO_nndft_init_result_ ## which_one \</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor"> for(j=0, fj=f; j<ths->M_total; j++, fj++) \</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"> for(l=0, f_hat_k=f_hat; l<ths->N_total; l++, f_hat_k++) \</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor"> omega=0.0; \</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"> for(t = 0; t<ths->d; t++) \</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor"> omega+=ths->v[l*ths->d+t] * ths->x[j*ths->d+t] * ths->N[t]; \</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor"> omega*= MACRO_nndft_sign_ ## which_one; \</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="preprocessor"> MACRO_nndft_compute_ ## which_one \</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="preprocessor"> } </span><span class="comment">/* for(l) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor"> } </span><span class="comment">/* for(j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor">} </span><span class="comment">/* nndft_trafo */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="preprocessor"></span>MACRO_nndft(trafo)</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> MACRO_nndft(adjoint)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> static <span class="keywordtype">void</span> nnfft_uo(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths,<span class="keywordtype">int</span> j,<span class="keywordtype">int</span> *up,<span class="keywordtype">int</span> *op,<span class="keywordtype">int</span> act_dim)</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> {</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">double</span> c;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">int</span> u,o;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> c = ths->v[j*ths->d+act_dim] * ths->n[act_dim];</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> u = c; o = c;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span>(c < 0)</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> u = u-1;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> o = o+1;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> u = u - (ths->m); o = o + (ths->m);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> up[0]=u; op[0]=o;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> }</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="preprocessor">#define MACRO_nnfft_B_init_result_A memset(f,0,ths->N_total*sizeof(double _Complex));</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_nnfft_B_init_result_T memset(g,0,ths->aN1_total*sizeof(double _Complex));</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor">#define MACRO_nnfft_B_PRE_FULL_PSI_compute_A { \</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="preprocessor"> (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]]; \</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="preprocessor">#define MACRO_nnfft_B_PRE_FULL_PSI_compute_T { \</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="preprocessor"> g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj); \</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="preprocessor">#define MACRO_nnfft_B_compute_A { \</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="preprocessor"> (*fj) += phi_prod[ths->d] * g[ll_plain[ths->d]]; \</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="preprocessor">#define MACRO_nnfft_B_compute_T { \</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="preprocessor"> g[ll_plain[ths->d]] += phi_prod[ths->d] * (*fj); \</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="preprocessor">#define MACRO_with_PRE_LIN_PSI (ths->psi[(ths->K+1)*t2+y_u[t2]]* \</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="preprocessor"> (y_u[t2]+1-y[t2]) + \</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor"> ths->psi[(ths->K+1)*t2+y_u[t2]+1]* \</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="preprocessor"> (y[t2]-y_u[t2]))</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_with_PRE_PSI ths->psi[(j*ths->d+t2)*(2*ths->m+2)+lj[t2]]</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="preprocessor"></span><span class="preprocessor">#define MACRO_without_PRE_PSI PHI(-ths->v[j*ths->d+t2]+ \</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor"> ((double)l[t2])/ths->N1[t2], t2)</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor">#define MACRO_init_uo_l_lj_t { \</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="preprocessor"> for(t = ths->d-1; t>=0; t--) \</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="preprocessor"> nnfft_uo(ths,j,&u[t],&o[t],t); \</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="preprocessor"> l[t] = u[t]; \</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="preprocessor"> lj[t] = 0; \</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="preprocessor"> } </span><span class="comment">/* for(t) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="preprocessor"> t++; \</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="preprocessor">#define MACRO_update_with_PRE_PSI_LIN { \</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="preprocessor"> for(t2=t; t2<ths->d; t2++) \</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor"> y[t2] = fabs(((-ths->N1[t2]*ths->v[j*ths->d+t2]+(double)l[t2]) \</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor"> * ((double)ths->K))/(ths->m+1)); \</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="preprocessor"> y_u[t2] = (int)y[t2]; \</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="preprocessor"> } </span><span class="comment">/* for(t2) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor">#define MACRO_update_phi_prod_ll_plain(which_one) { \</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor"> for(t2=t; t2<ths->d; t2++) \</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="preprocessor"> phi_prod[t2+1]=phi_prod[t2]* MACRO_ ## which_one; \</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="preprocessor"> ll_plain[t2+1]=ll_plain[t2]*ths->aN1[t2] + \</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="preprocessor"> (l[t2]+ths->aN1[t2]*3/2)%ths->aN1[t2]; \</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="preprocessor"> </span><span class="comment">/* 3/2 because of the (not needed) fftshift and to be in [0 aN1[t2]]?!*/</span><span class="preprocessor">\</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="preprocessor"> } </span><span class="comment">/* for(t2) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="preprocessor">#define MACRO_count_uo_l_lj_t { \</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor"> for(t = ths->d-1; (t>0)&&(l[t]==o[t]); t--) \</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor"> l[t] = u[t]; \</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor"> lj[t] = 0; \</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor"> } </span><span class="comment">/* for(t) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor"> l[t]++; \</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor"> lj[t]++; \</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor">}</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor">#define MACRO_nnfft_B(which_one) \</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor">static inline void nnfft_B_ ## which_one (nnfft_plan *ths) \</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor"> int lprod; \</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="preprocessor"> int u[ths->d], o[ths->d]; \</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor"> int t, t2; \</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="preprocessor"> int j; \</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor"> int l_L, ix; \</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="preprocessor"> int l[ths->d]; \</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="preprocessor"> int lj[ths->d]; \</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="preprocessor"> int ll_plain[ths->d+1]; \</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor"> double phi_prod[ths->d+1]; \</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor"> double _Complex *f, *g; \</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor"> double _Complex *fj; \</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor"> double y[ths->d]; \</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor"> int y_u[ths->d]; \</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="preprocessor"> f=ths->f_hat; g=ths->F; \</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="preprocessor"> MACRO_nnfft_B_init_result_ ## which_one \</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="preprocessor"> if(ths->nnfft_flags & PRE_FULL_PSI) \</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="preprocessor"> for(ix=0, j=0, fj=f; j<ths->N_total; j++,fj++) \</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="preprocessor"> for(l_L=0; l_L<ths->psi_index_f[j]; l_L++, ix++) \</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="preprocessor"> MACRO_nnfft_B_PRE_FULL_PSI_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="preprocessor"> return; \</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="preprocessor"> phi_prod[0]=1; \</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor"> ll_plain[0]=0; \</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="preprocessor"> for(t=0,lprod = 1; t<ths->d; t++) \</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="preprocessor"> lprod *= (2*ths->m+2); \</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="preprocessor"> if(ths->nnfft_flags & PRE_PSI) \</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor"> for(j=0, fj=f; j<ths->N_total; j++, fj++) \</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor"> MACRO_init_uo_l_lj_t; \</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor"> for(l_L=0; l_L<lprod; l_L++) \</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor"> MACRO_update_phi_prod_ll_plain(with_PRE_PSI); \</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="preprocessor"> MACRO_nnfft_B_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="preprocessor"> MACRO_count_uo_l_lj_t; \</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="preprocessor"> } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="preprocessor"> } </span><span class="comment">/* for(j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="preprocessor"> return; \</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="preprocessor"> } </span><span class="comment">/* if(PRE_PSI) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="preprocessor"> if(ths->nnfft_flags & PRE_LIN_PSI) \</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="preprocessor"> for(j=0, fj=f; j<ths->N_total; j++, fj++) \</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="preprocessor"> MACRO_init_uo_l_lj_t; \</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="preprocessor"> for(l_L=0; l_L<lprod; l_L++) \</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="preprocessor"> MACRO_update_with_PRE_PSI_LIN; \</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="preprocessor"> MACRO_update_phi_prod_ll_plain(with_PRE_LIN_PSI); \</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="preprocessor"> MACRO_nnfft_B_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor"> MACRO_count_uo_l_lj_t; \</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="preprocessor"> } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="preprocessor"> } </span><span class="comment">/* for(j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="preprocessor"> return; \</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="preprocessor"> } </span><span class="comment">/* if(PRE_LIN_PSI) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="preprocessor"> </span><span class="comment">/* no precomputed psi at all */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="preprocessor"> for(j=0, fj=f; j<ths->N_total; j++, fj++) \</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="preprocessor"> MACRO_init_uo_l_lj_t; \</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="preprocessor"> for(l_L=0; l_L<lprod; l_L++) \</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor"> MACRO_update_phi_prod_ll_plain(without_PRE_PSI); \</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor"> MACRO_nnfft_B_compute_ ## which_one; \</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="preprocessor"> MACRO_count_uo_l_lj_t; \</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor"> } </span><span class="comment">/* for(l_L) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="preprocessor"> } </span><span class="comment">/* for(j) */</span><span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="preprocessor">} </span><span class="comment">/* nnfft_B */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> MACRO_nnfft_B(A)</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> MACRO_nnfft_B(T)</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> static inline <span class="keywordtype">void</span> nnfft_D (<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths){</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordtype">int</span> j,t;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordtype">double</span> tmp;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">if</span>(ths->nnfft_flags & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> {</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">for</span>(j=0; j<ths->M_total; j++)</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> ths->f[j] *= ths->c_phi_inv[j];</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> }</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> {</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keywordflow">for</span>(j=0; j<ths->M_total; j++)</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> {</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> tmp = 1.0;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment">/* multiply with N1, because x was modified */</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">for</span>(t=0; t<ths->d; t++)</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> tmp*= 1.0 /((PHI_HUT(ths->x[ths->d*j + t]*((<span class="keywordtype">double</span>)ths->N[t]),t)) );</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> ths->f[j] *= tmp;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> }</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> }</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> }</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"><a class="code" href="nfft3_8h.html#a994c1748ebe1371c53dd2cb437054d4f"> 294</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a994c1748ebe1371c53dd2cb437054d4f" title="user routines">nnfft_trafo</a>(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths)</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> {</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keywordtype">int</span> j,t;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> nnfft_B_T(ths);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">for</span>(t=0;t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>;t++) {</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]= ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class [...]
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> }</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> }</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="comment">/* allows for external swaps of ths->f */</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = ths-><a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M [...]
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">for</span>(t=0;t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>;t++) {</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]= ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class [...]
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> }</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> }</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> nnfft_D(ths);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> } <span class="comment">/* nnfft_trafo */</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordtype">void</span> nnfft_adjoint(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths)</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> {</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordtype">int</span> j,t;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> nnfft_D(ths);</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">for</span>(t=0;t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>;t++) {</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]= ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class [...]
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> }</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> }</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="comment">/* allows for external swaps of ths->f */</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>=ths-><a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M_t [...]
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> nfft_adjoint(ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="keywordflow">for</span>(t=0;t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>;t++) {</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]= ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class [...]
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> }</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> }</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> nnfft_B_A(ths);</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> } <span class="comment">/* nnfft_adjoint */</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"><a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580"> 348</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580" title="initialisation of direct transform">nnfft_precompute_phi_hut</a>(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths)</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> {</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordtype">int</span> j; </div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordtype">double</span> tmp;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> ths-><a class="code" href="structnnfft__plan.html#a9073b3c76f70f8b9caedac7f5574ce89" title="precomputed data, matrix D">c_phi_inv</a>= (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>*<span class= [...]
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">for</span>(j=0; j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>; j++)</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> {</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> tmp = 1.0;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">for</span>(t=0; t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> tmp*= 1.0 /(PHI_HUT(ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*j + t]*((<span class="keywordtype">double</span>)ths-><a class="code" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7 [...]
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> ths-><a class="code" href="structnnfft__plan.html#a9073b3c76f70f8b9caedac7f5574ce89" title="precomputed data, matrix D">c_phi_inv</a>[j]=tmp;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> }</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> } <span class="comment">/* nnfft_phi_hut */</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno"><a class="code" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6"> 368</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6" title="create a lookup table">nnfft_precompute_lin_psi</a>(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths)</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> {</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keywordtype">int</span> j; </div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordtype">double</span> step; </div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>);</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> {</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> step=((double)(ths-><a class="code" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da" title="cut-off parameter in time-domain">m</a>+1))/(ths-><a class="code" href="structnnfft__plan.html#a4ee39bebbff40746c2701ade2e13f1f8" title="number of precomp.">K</a>*ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>[t]);</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">for</span>(j=0;j<=ths-><a class="code" href="structnnfft__plan.html#a4ee39bebbff40746c2701ade2e13f1f8" title="number of precomp.">K</a>;j++)</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> {</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a>[(ths-><a class="code" href="structnnfft__plan.html#a4ee39bebbff40746c2701ade2e13f1f8" title="number of precomp.">K</a>+1)*t + j] = PHI(j*step,t);</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> } <span class="comment">/* for(t) */</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> }</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="keywordtype">void</span> nnfft_precompute_psi(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths)</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> {</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="keywordtype">int</span> j; </div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keywordtype">int</span> l; </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordtype">int</span> lj; </div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="keywordtype">int</span> u, o; </div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="keywordflow">for</span> (t=0; t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> {</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> nnfft_uo(ths,j,&u,&o,t);</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">for</span>(l=u, lj=0; l <= o; l++, lj++)</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a>[(j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t)*(2*ths-><a class="code" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da" title="cut-off parameter in time-domain">m</a>+2)+lj]=</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> (PHI((-ths-><a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]+((<span class="keywordtype">double</span>)l)/((<span class="keywordtype">double</span>)ths-><a class="code" href="structnnfft__plan.html#a746 [...]
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keywordflow">for</span>(t=0;t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>;t++) {</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]= ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class [...]
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> }</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> }</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> nfft_precompute_psi(ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">for</span>(t=0;t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>;t++) {</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]= ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class [...]
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> }</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> }</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="comment">/* for(t) */</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> } <span class="comment">/* nfft_precompute_psi */</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno"><a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9"> 425</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9" title="computes all entries of B explicitly">nnfft_precompute_full_psi</a>(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths)</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> {</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keywordtype">int</span> t,t2; </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keywordtype">int</span> j; </div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="keywordtype">int</span> l_L; </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keywordtype">int</span> l[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>]; </div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keywordtype">int</span> lj[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>]; </div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordtype">int</span> ll_plain[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+1]; </div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="keywordtype">int</span> lprod; </div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordtype">int</span> u[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>], o[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>]; </div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keywordtype">double</span> phi_prod[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+1];</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="keywordtype">int</span> ix,ix_old;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keywordflow">for</span>(t=0;t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>;t++) {</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]= ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class [...]
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> }</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> }</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> nnfft_precompute_psi(ths);</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> nfft_precompute_full_psi(ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>);</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++) {</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">for</span>(t=0;t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>;t++) {</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>+t]= ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[j*ths-><a class [...]
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> }</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> }</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> phi_prod[0]=1;</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> ll_plain[0]=0;</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="keywordflow">for</span>(t=0,lprod = 1; t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> lprod *= 2*ths-><a class="code" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da" title="cut-off parameter in time-domain">m</a>+2;</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="keywordflow">for</span>(j=0,ix=0,ix_old=0; j<ths->N_total; j++)</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> {</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> MACRO_init_uo_l_lj_t;</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">for</span>(l_L=0; l_L<lprod; l_L++, ix++)</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> {</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> MACRO_update_phi_prod_ll_plain(without_PRE_PSI);</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> ths-><a class="code" href="structnnfft__plan.html#aa0b2be91e59a45c809c68398ceb41232" title="only for thin B">psi_index_g</a>[ix]=ll_plain[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>];</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a>[ix]=phi_prod[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>];</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> MACRO_count_uo_l_lj_t;</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> } <span class="comment">/* for(l_L) */</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> </div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> ths-><a class="code" href="structnnfft__plan.html#a2ada74222958e630640e6456e9bd2a8d" title="only for thin B">psi_index_f</a>[j]=ix-ix_old;</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> ix_old=ix;</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> } <span class="comment">/* for(j) */</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> }</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nnfft_init_help(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths, <span class="keywordtype">int</span> m2, <span class="keywordtype">unsigned</span> nfft_flags, <span class="keywordtype">unsigned</span> fftw_flags)</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> {</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordtype">int</span> lprod; </div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="keywordtype">int</span> N2[ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>];</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*<span class="keyword">sizeof</span>(<span class="ke [...]
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> ths-><a class="code" href="structnnfft__plan.html#a0a30183077239e2de76e5de626dc92e9" title="1 + 2*m/N1">a</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*<span class="keyword">sizeof</span>(<span class=" [...]
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> ths-><a class="code" href="structnnfft__plan.html#a6a3e11978f1e2c6279bd12785ef56b5d" title="oversampling-factor">sigma</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*<span class="keyword">sizeof</span>( [...]
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> ths-><a class="code" href="structnnfft__plan.html#a6b2de2633dd4347692e96887f98c1020" title="n=N1, for the window function">n</a> = ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>;</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> </div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> ths-><a class="code" href="structnnfft__plan.html#acb1a1fa5fdb73d2187e9e9d8e4415921" title="aN1_total=aN1[0]* ...">aN1_total</a>=1;</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="keywordflow">for</span>(t = 0; t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>; t++) {</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> ths-><a class="code" href="structnnfft__plan.html#a0a30183077239e2de76e5de626dc92e9" title="1 + 2*m/N1">a</a>[t] = 1.0 + (2.0*((double)ths-><a class="code" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da" title="cut-off parameter in time-domain">m</a>))/((<span class="keywordtype">double</span>)ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title [...]
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a>[t] = ths-><a class="code" href="structnnfft__plan.html#a0a30183077239e2de76e5de626dc92e9" title="1 + 2*m/N1">a</a>[t] * ((double)ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>[t]);</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="comment">/* aN1 should be even */</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a>[t]%2 != 0)</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a>[t] = ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a>[t] +1;</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> ths-><a class="code" href="structnnfft__plan.html#acb1a1fa5fdb73d2187e9e9d8e4415921" title="aN1_total=aN1[0]* ...">aN1_total</a>*=ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a>[t];</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> ths-><a class="code" href="structnnfft__plan.html#a6a3e11978f1e2c6279bd12785ef56b5d" title="oversampling-factor">sigma</a>[t] = ((double) ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>[t] )/((double) ths-><a class="code" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7" title="cut-off-frequencies">N</a>[t]);;</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="comment">/* take the same oversampling factor in the inner NFFT */</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> N2[t] = ceil(ths-><a class="code" href="structnnfft__plan.html#a6a3e11978f1e2c6279bd12785ef56b5d" title="oversampling-factor">sigma</a>[t]*(ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a>[t]));</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="comment">/* N2 should be even */</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="keywordflow">if</span>(N2[t]%2 != 0)</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> N2[t] = N2[t] +1;</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> }</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> WINDOW_HELP_INIT</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & MALLOC_X)</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*ths-><a class="code" href [...]
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & MALLOC_F)</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> ths-><a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of [...]
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> </div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & MALLOC_V)</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> ths-><a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*ths-><a class="code" href="str [...]
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & MALLOC_F_HAT)</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> ths-><a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = (<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" tit [...]
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> {</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> ths-><a class="code" href="structnnfft__plan.html#a4ee39bebbff40746c2701ade2e13f1f8" title="number of precomp.">K</a>=(1U<< 10)*(ths-><a class="code" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da" title="cut-off parameter in time-domain">m</a>+1);</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((ths-><a class="code" href="structnnfft__plan.html#a4ee39bebbff40746c2701ade2e13f1f8" title="number of precomp.">K</a>+1)*ths-><a class="code [...]
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> }</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>*th [...]
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> {</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="keywordflow">for</span>(t=0,lprod = 1; t<ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>; t++)</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> lprod *= 2*ths-><a class="code" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da" title="cut-off parameter in time-domain">m</a>+2;</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>* [...]
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> ths-><a class="code" href="structnnfft__plan.html#a2ada74222958e630640e6456e9bd2a8d" title="only for thin B">psi_index_f</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>*<span [...]
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> ths-><a class="code" href="structnnfft__plan.html#aa0b2be91e59a45c809c68398ceb41232" title="only for thin B">psi_index_g</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>*lprod [...]
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> }</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>));</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> nfft_init_guru(ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>, ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>, ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a>, ths-><a class="code" href="st [...]
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> nfft_flags, fftw_flags);</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a> = ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>;</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = ths-><a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M [...]
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> ths->F = ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>;</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> ths-><a class="code" href="structnnfft__plan.html#ac2beab555e72c8f10921db21dc094069" title="Pointer to the own transform.">mv_trafo</a> = (void (*) (<span class="keywordtype">void</span>* ))<a class="code" href="nfft3_8h.html#a994c1748ebe1371c53dd2cb437054d4f" title="user routines">nnfft_trafo</a>;</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> ths-><a class="code" href="structnnfft__plan.html#a0afd6961b8b0b24b526e034d89874c7c" title="Pointer to the own adjoint.">mv_adjoint</a> = (void (*) (<span class="keywordtype">void</span>* ))nnfft_adjoint;</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> }</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> </div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="keywordtype">void</span> nnfft_init_guru(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N_total, <span class="keywordtype">int</span> M_total, <span class="keywordtype">int</span> *N, <span class="keywordtype">int</span> *N1,</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> nnfft_flags)</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> {</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="keywordtype">unsigned</span> nfft_flags;</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordtype">unsigned</span> fftw_flags;</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>= d;</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>= M_total;</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> ths-><a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>= N_total;</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> ths-><a class="code" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da" title="cut-off parameter in time-domain">m</a>= m;</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a>= nnfft_flags;</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> fftw_flags= FFTW_ESTIMATE| FFTW_DESTROY_INPUT;</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> nfft_flags= PRE_PHI_HUT| MALLOC_F_HAT| FFTW_INIT| FFT_OUT_OF_PLACE;</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> </div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> nfft_flags = nfft_flags | PRE_PSI;</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> nfft_flags = nfft_flags | PRE_FULL_PSI;</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> nfft_flags = nfft_flags | PRE_LIN_PSI;</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> </div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> ths-><a class="code" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7" title="cut-off-frequencies">N</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*<span class="keyword">sizeof</span>(<span c [...]
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*<span class="keyword">sizeof</span>(<span class="keywo [...]
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">for</span>(t=0; t<d; t++) {</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> ths-><a class="code" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7" title="cut-off-frequencies">N</a>[t] = N[t];</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>[t] = N1[t];</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> }</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> nnfft_init_help(ths,m,nfft_flags,fftw_flags);</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> }</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="keywordtype">void</span> nnfft_init(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> N_total, <span class="keywordtype">int</span> M_total, <span class="keywordtype">int</span> *N)</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> {</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="keywordtype">int</span> t; </div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keywordtype">unsigned</span> nfft_flags;</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="keywordtype">unsigned</span> fftw_flags;</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a> = d;</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> ths-><a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a> = M_total;</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> ths-><a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a> = N_total;</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="comment">/* m should be greater to get the same accuracy as the nfft */</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="comment">/* Was soll dieser Ausdruck machen? Es handelt sich um eine Ganzzahl!</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="comment"></span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="comment"> WINDOW_HELP_ESTIMATE_m;</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> ths-><a class="code" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7" title="cut-off-frequencies">N</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*<span class="keyword">sizeof</span>(<span c [...]
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a> = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6" title="dimension, rank">d</a>*<span class="keyword">sizeof</span>(<span class="keywo [...]
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> </div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="keywordflow">for</span>(t=0; t<d; t++) {</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> ths-><a class="code" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7" title="cut-off-frequencies">N</a>[t] = N[t];</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> </div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="comment">/* the standard oversampling factor in the nnfft is 1.5 */</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>[t] = ceil(1.5*ths-><a class="code" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7" title="cut-off-frequencies">N</a>[t]);</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> </div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="comment">/* N1 should be even */</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>[t]%2 != 0)</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>[t] = ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>[t] +1;</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> }</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> </div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a>=PRE_PSI| PRE_PHI_HUT| MALLOC_X| MALLOC_V| MALLOC_F_HAT| MALLOC_F;</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> nfft_flags= PRE_PSI| PRE_PHI_HUT| MALLOC_F_HAT| FFTW_INIT| FFT_OUT_OF_PLACE;</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> fftw_flags= FFTW_ESTIMATE| FFTW_DESTROY_INPUT;</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> nnfft_init_help(ths,ths-><a class="code" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da" title="cut-off parameter in time-domain">m</a>,nfft_flags,fftw_flags);</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> }</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> </div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="keywordtype">void</span> nnfft_finalize(<a class="code" href="structnnfft__plan.html">nnfft_plan</a> *ths)</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> {</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> </div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> nfft_finalize(ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>);</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> </div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f" title="plan for the nfft">direct_plan</a>);</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb" title="sigma*a*N">aN1</a>);</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7" title="cut-off-frequencies">N</a>);</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643" title="sigma*N">N1</a>);</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> </div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> {</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#aa0b2be91e59a45c809c68398ceb41232" title="only for thin B">psi_index_g</a>);</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#a2ada74222958e630640e6456e9bd2a8d" title="only for thin B">psi_index_f</a>);</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a>);</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> }</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a>);</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> </div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4" title="precomputed data, matrix B">psi</a>);</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#a9073b3c76f70f8b9caedac7f5574ce89" title="precomputed data, matrix D">c_phi_inv</a>);</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & MALLOC_F)</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>);</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> </div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & MALLOC_F_HAT)</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> </div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & MALLOC_X)</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>);</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> </div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & MALLOC_V)</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>);</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nsfft_2simple__test_8c_source.html b/doc/api/html/nsfft_2simple__test_8c_source.html
new file mode 100644
index 0000000..c62174c
--- /dev/null
+++ b/doc/api/html/nsfft_2simple__test_8c_source.html
@@ -0,0 +1,130 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - simple_test.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_390363ac6c75087990c53a11ba2c3b15.html">nsfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nsfft/simple_test.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_nsfft(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> J, <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">int</span> K=12;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <a class="code" href="structnsfft__plan.html">nsfft_plan</a> p;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> nsfft_init(&p, d, J, M, 6, NSDFT);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> nsfft_init_random_nodes_coeffs(&p);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, K, <span class="stringliteral">"frequencies, vector f_hat (first few entries)"</span [...]
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> nsfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, K, <span class="stringliteral">"nsdft, vector f (first few entries)"</span>);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> nsfft_trafo(&p);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, K, <span class="stringliteral">"nsfft, vector f (first few entries)"</span>);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> nsfft_adjoint_direct(&p);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, K, <span class="stringliteral">"adjoint nsdft, vector f_hat, (first few entries)"</s [...]
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> nsfft_adjoint(&p);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, K, <span class="stringliteral">"adjoint nsfft, vector f_hat, (first few entries)"</s [...]
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> nsfft_finalize(&p);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> }</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> {</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">int</span> d, J, M;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> printf(<span class="stringliteral">"1) computing a two dimensional nsdft, nsfft and adjoints\n\n"</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> d=2;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> J=5;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> M=(J+4)*X(exp2i)(J+1);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> simple_test_nsfft(d,J,M);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> getc(stdin);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> system(<span class="stringliteral">"clear"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> printf(<span class="stringliteral">"2) computing a three dimensional nsdft, nsfft and adjoints\n\n"</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> d=3;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> J=5;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> M=6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1)+X(exp2i)(3*(J/2+1));</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> simple_test_nsfft(d,J,M);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nsfft_8c_source.html b/doc/api/html/nsfft_8c_source.html
new file mode 100644
index 0000000..7be5a67
--- /dev/null
+++ b/doc/api/html/nsfft_8c_source.html
@@ -0,0 +1,1944 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nsfft.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_a42734e8bce3bbae48210591d0fac63c.html">nsfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nsfft.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: nsfft.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#define NSFTT_DISABLE_TEST</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment">/* computes a 2d ndft by 1d nfft along the dimension 1 times</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment"> 1d ndft along dimension 0</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">static</span> <span class="keywordtype">void</span> short_nfft_trafo_2d(<a class="code" href="structnfft__plan.html">nfft_plan</a>* ths, <a class="code" href="structnfft__plan.html">nfft_plan</a>* plan_1d)</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> {</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">int</span> j,k0;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> {</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= 0;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> plan_1d-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j] = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimensi [...]
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">for</span>(k0=0;k0<ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];k0++) <span class="comment">/* for shorties */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> {</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> plan_1d-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> + k0*ths-><a class="code" href="structnfft_ [...]
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(plan_1d);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> {</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> omega = ((double)(k0 - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2)) * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank [...]
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += plan_1d-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * cexp( - I*2*<a class="code" href="group__nfftutil.html#ga598a3330b3 [...]
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> }</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> }</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">static</span> <span class="keywordtype">void</span> short_nfft_adjoint_2d(<a class="code" href="structnfft__plan.html">nfft_plan</a>* ths, <a class="code" href="structnfft__plan.html">nfft_plan</a>* plan_1d)</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> {</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">int</span> j,k0;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> plan_1d-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j] = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension [...]
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">for</span>(k0=0;k0<ths->N[0];k0++) <span class="comment">/* for shorties */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> {</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> omega = ((double)(k0 - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2)) * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank [...]
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> plan_1d-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * cexp( + _Complex_I*2*<a class="code" href="group__nfftutil.html#ga59 [...]
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> }</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> plan_1d-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> + k0*ths-><a class="code" href="structnfft_ [...]
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> nfft_adjoint(plan_1d);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment">/* computes a 3d ndft by 1d nfft along the dimension 2 times</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment"> 2d ndft along dimension 0,1</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">static</span> <span class="keywordtype">void</span> short_nfft_trafo_3d_1(<a class="code" href="structnfft__plan.html">nfft_plan</a>* ths, <a class="code" href="structnfft__plan.html">nfft_plan</a>* plan_1d)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">int</span> j,k0,k1;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = 0;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> plan_1d-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j] = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimensi [...]
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordflow">for</span>(k0=0;k0<ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];k0++) <span class="comment">/* for shorties */</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">for</span>(k1=0;k1<ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];k1++)</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> {</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> plan_1d-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> + (k0*ths-><a class="code" href="structnfft__pl [...]
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(plan_1d);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> {</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> omega = ((double)(k0 - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2)) * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka ra [...]
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> + ((<span class="keywordtype">double</span>)(k1 - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]/2)) * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc [...]
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += plan_1d-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * cexp( - I*2*<a class="code" href="group__nfftutil.html#ga598a3330 [...]
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keyword">static</span> <span class="keywordtype">void</span> short_nfft_adjoint_3d_1(<a class="code" href="structnfft__plan.html">nfft_plan</a>* ths, <a class="code" href="structnfft__plan.html">nfft_plan</a>* plan_1d)</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> {</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">int</span> j,k0,k1;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> plan_1d-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j] = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension [...]
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">for</span>(k0=0;k0<ths->N[0];k0++) <span class="comment">/* for shorties */</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">for</span>(k1=0;k1<ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];k1++)</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> {</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> {</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> omega = ((double)(k0 - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2)) * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka ra [...]
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> + ((<span class="keywordtype">double</span>)(k1 - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]/2)) * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc [...]
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> plan_1d-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * cexp( + _Complex_I*2*<a class="code" href="group__nfftutil.html#ga [...]
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> plan_1d-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> + (k0*ths-><a class="code" href="structnfft__pl [...]
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> nfft_adjoint(plan_1d);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> }</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> }</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment">/* computes a 3d ndft by 2d nfft along the dimension 1,2 times</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="comment"> 1d ndft along dimension 0</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">static</span> <span class="keywordtype">void</span> short_nfft_trafo_3d_2(<a class="code" href="structnfft__plan.html">nfft_plan</a>* ths, <a class="code" href="structnfft__plan.html">nfft_plan</a>* plan_2d)</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> {</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordtype">int</span> j,k0;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> {</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = 0;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> plan_2d-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0] = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dim [...]
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> plan_2d-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1] = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dim [...]
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> }</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">for</span>(k0=0;k0<ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];k0++) <span class="comment">/* for shorties */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> {</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> plan_2d-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> + k0*ths-><a class="code" href="structnfft_ [...]
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(plan_2d);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> {</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> omega = ((double)(k0 - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2)) * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank [...]
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += plan_2d-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * cexp( - I*2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701 [...]
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> }</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">static</span> <span class="keywordtype">void</span> short_nfft_adjoint_3d_2(<a class="code" href="structnfft__plan.html">nfft_plan</a>* ths, <a class="code" href="structnfft__plan.html">nfft_plan</a>* plan_2d)</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> {</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordtype">int</span> j,k0;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> {</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> plan_2d-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0] = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dim [...]
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> plan_2d-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1] = ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dim [...]
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">for</span>(k0=0;k0<ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];k0++) <span class="comment">/* for shorties */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> {</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> {</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> omega = ((double)(k0 - ths-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2)) * ths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[ths-><a class="code" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8" title="dimension aka rank [...]
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> plan_2d-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = ths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * cexp( + _Complex_I*2*<a class="code" href="group__nfftutil.html#ga598a3330 [...]
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> }</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> plan_2d-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = ths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> + k0*ths-><a class="code" href="structnfft_ [...]
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> nfft_adjoint(plan_2d);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> }</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> }</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="preprocessor">#ifdef GAUSSIAN</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">int</span> index_sparse_to_full_direct_2d(<span class="keywordtype">int</span> J, <span class="keywordtype">int</span> k)</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> {</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordtype">int</span> N=X(exp2i)(J+2); <span class="comment">/* number of full coeffs */</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordtype">int</span> N_B=X(exp2i)(J); <span class="comment">/* number in each sparse block */</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordtype">int</span> j=k/N_B; <span class="comment">/* consecutive number of Block */</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordtype">int</span> r=j/4; <span class="comment">/* level of block */</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordtype">int</span> i, o, a, b,s,l,m1,m2;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordtype">int</span> k1,k2;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">if</span> (k>=(J+4)*X(exp2i)(J+1))</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> {</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> printf(<span class="stringliteral">"Fehler!\n"</span>);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> }</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> {</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span> (r>(J+1)/2) <span class="comment">/* center block */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> {</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> i=k-4*((J+1)/2+1)*N_B;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> a=X(exp2i)(J/2+1);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> m1=i/a;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> m2=i%a;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> k1=N/2-a/2+m1;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> k2=N/2-a/2+m2;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> }</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">else</span> <span class="comment">/* no center block */</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> {</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> i=k-j*N_B; <span class="comment">/* index in specific block */</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> o=j%4; <span class="comment">/* kind of specific block */</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> a=X(exp2i)(r);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> b=X(exp2i)(J-r);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> l=<a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(a,b); <span class="comment">/* long dimension of block */</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> s=<a class="code" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308" title="Mimimum of its two arguments.">NFFT_MIN</a>(a,b); <span class="comment">/* short dimension of block */</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> m1=i/l;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> m2=i%l;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">switch</span>(o)</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> {</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> {</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> k1=N/2-a/2 ;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> k2=N/2+ b ;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">if</span> (b>=a)</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> {</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> k1+=m1;</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> k2+=m2;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> }</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> {</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> k1+=m2;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> k2+=m1;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> }</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> }</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> {</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> k1=N/2+ b ;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> k2=N/2-a/2 ;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">if</span> (b>a)</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> {</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> k1+=m2;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> k2+=m1;</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> }</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> {</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> k1+=m1;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> k2+=m2;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> }</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">case</span> 2:</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> {</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> k1=N/2-a/2 ;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> k2=N/2-2*b ;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">if</span> (b>=a)</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> {</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> k1+=m1;</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> k2+=m2;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> }</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> {</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> k1+=m2;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> k2+=m1;</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> }</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> }</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">case</span> 3:</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> {</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> k1=N/2-2*b ;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> k2=N/2-a/2 ;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">if</span> (b>a)</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> {</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> k1+=m2;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> k2+=m1;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> }</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> {</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> k1+=m1;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> k2+=m2;</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> }</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> }</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> {</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> k1=-1;</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> k2=-1;</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> }</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> }</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> }</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment">//printf("m1=%d, m2=%d\n",m1,m2);</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">return</span>(k1*N+k2);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> }</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> }</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> index_sparse_to_full_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths, <span class="keywordtype">int</span> k)</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> {</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="comment">/* only by lookup table */</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">if</span>( k < ths->N_total)</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">return</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k];</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> }</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="preprocessor">#ifndef NSFTT_DISABLE_TEST</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">int</span> index_full_to_sparse_2d(<span class="keywordtype">int</span> J, <span class="keywordtype">int</span> k)</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> {</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keywordtype">int</span> N=X(exp2i)(J+2); <span class="comment">/* number of full coeffs */</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordtype">int</span> N_B=X(exp2i)(J); <span class="comment">/* number in each sparse block */</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keywordtype">int</span> k1=k/N-N/2; <span class="comment">/* coordinates in the full grid */</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordtype">int</span> k2=k%N-N/2; <span class="comment">/* k1: row, k2: column */</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordtype">int</span> r,a,b;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> a=X(exp2i)(J/2+1);</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">if</span> ( (k1>=-(a/2)) && (k1<a/2) && (k2>=(-a/2)) && (k2<a/2) )</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> {</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">return</span>(4*((J+1)/2+1)*N_B+(k1+a/2)*a+(k2+a/2));</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">for</span> (r=0; r<=(J+1)/2; r++)</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> {</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> b=X(exp2i)(r);</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> a=X(exp2i)(J-r);</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">if</span> ( (k1>=-(b/2)) && (k1<(b+1)/2) && (k2>=a) && (k2<2*a) )</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> {</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">if</span> (a>=b)</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">return</span>((4*r+0)*N_B+(k1+b/2)*a+(k2-a));</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">return</span>((4*r+0)*N_B+(k2-a)*b+(k1+b/2));</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> }</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (k1>=a) && (k1<2*a) && (k2>=-(b/2)) && (k2<(b+1)/2) )</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> {</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">if</span> (a>b)</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">return</span>((4*r+1)*N_B+(k2+b/2)*a+(k1-a));</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">return</span>((4*r+1)*N_B+(k1-a)*b+(k2+b/2));</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> }</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (k1>=-(b/2)) && (k1<(b+1)/2) && (k2>=-2*a) && (k2<-a) )</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> {</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">if</span> (a>=b)</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="keywordflow">return</span>((4*r+2)*N_B+(k1+b/2)*a+(k2+2*a));</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keywordflow">return</span>((4*r+2)*N_B+(k2+2*a)*b+(k1+b/2));</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> }</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (k1>=-2*a) && (k1<-a) && (k2>=-(b/2)) && (k2<(b+1)/2) )</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> {</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">if</span> (a>b)</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">return</span>((4*r+3)*N_B+(k2+b/2)*a+(k1+2*a));</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keywordflow">return</span>((4*r+3)*N_B+(k1+2*a)*b+(k2+b/2));</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> }</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> }</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> }</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="preprocessor">#ifdef GAUSSIAN</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> init_index_sparse_to_full_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> {</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keywordtype">int</span> k_S;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">for</span> (k_S=0; k_S<ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>; k_S++)</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_S]=index_sparse_to_full_direct_2d(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>, k_S);</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> }</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="preprocessor">#ifdef GAUSSIAN</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> index_sparse_to_full_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths, <span class="keywordtype">int</span> k)</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> {</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="comment">/* only by lookup table */</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keywordflow">if</span>( k < ths->N_total)</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">return</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k];</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> }</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="preprocessor">#ifndef NSFTT_DISABLE_TEST</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">int</span> index_full_to_sparse_3d(<span class="keywordtype">int</span> J, <span class="keywordtype">int</span> k)</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> {</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="keywordtype">int</span> N=X(exp2i)(J+2); <span class="comment">/* length of the full grid */</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="keywordtype">int</span> N_B_r; <span class="comment">/* size of a sparse block in level r */</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="keywordtype">int</span> sum_N_B_less_r; <span class="comment">/* sum N_B_r */</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keywordtype">int</span> r,a,b;</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="keywordtype">int</span> k3=(k%N)-N/2; <span class="comment">/* coordinates in the full grid */</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordtype">int</span> k2=((k/N)%N)-N/2;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordtype">int</span> k1=k/(N*N)-N/2;</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> a=X(exp2i)(J/2+1); <span class="comment">/* length of center block */</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="keywordflow">if</span>((k1>=-(a/2)) && (k1<a/2) && (k2>=(-a/2)) && (k2<a/2) && (k3>=(-a/2)) &&</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> (k3<a/2))</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> {</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">return</span>(6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1)+((k1+a/2)*a+(k2+a/2))*a+</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> (k3+a/2));</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> }</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> sum_N_B_less_r=0;</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keywordflow">for</span> (r=0; r<=(J+1)/2; r++)</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> {</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> a=X(exp2i)(J-r);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> b=X(exp2i)(r);</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> N_B_r=a*b*b;</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="comment">/* right - rear - top - left - front - bottom */</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordflow">if</span> ((k1>=a) && (k1<2*a) && (k2>=-(b/2)) && (k2<(b+1)/2) &&</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> (k3>=-(b/2)) && (k3<(b+1)/2)) <span class="comment">/* right */</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> {</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*0 + ((k2+b/2)*b+k3+b/2)*a + (k1-a);</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*0 + ((k1-a)*b+(k2+b/2))*b + (k3+b/2);</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> }</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((k2>=a) && (k2<2*a) && (k1>=-(b/2)) && (k1<(b+1)/2) &&</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> (k3>=-(b/2)) && (k3<(b+1)/2)) <span class="comment">/* rear */</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> {</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*1 + ((k1+b/2)*b+k3+b/2)*a + (k2-a);</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (a==b)</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*1 + ((k1+b/2)*b+(k2-a))*a + (k3+b/2);</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*1 + ((k2-a)*b+(k1+b/2))*b + (k3+b/2);</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> }</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((k3>=a) && (k3<2*a) && (k1>=-(b/2)) && (k1<(b+1)/2) &&</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> (k2>=-(b/2)) && (k2<(b+1)/2)) <span class="comment">/* top */</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> {</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="keywordflow">if</span>(a>=b)</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*2 + ((k1+b/2)*b+k2+b/2)*a + (k3-a);</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*2 + ((k3-a)*b+(k1+b/2))*b + (k2+b/2);</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> }</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((k1>=-2*a) && (k1<-a) && (k2>=-(b/2)) && (k2<(b+1)/2) &&</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> (k3>=-(b/2)) && (k3<(b+1)/2)) <span class="comment">/* left */</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> {</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*3 + ((k2+b/2)*b+k3+b/2)*a + (k1+2*a);</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*3 + ((k1+2*a)*b+(k2+b/2))*b + (k3+b/2);</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> }</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((k2>=-2*a) && (k2<-a) && (k1>=-(b/2)) && (k1<(b+1)/2) &&</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> (k3>=-(b/2)) && (k3<(b+1)/2)) <span class="comment">/* front */</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> {</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*4 + ((k1+b/2)*b+k3+b/2)*a + (k2+2*a);</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (a==b)</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*4 + ((k1+b/2)*b+(k2+2*a))*a + (k3+b/2);</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*4 + ((k2+2*a)*b+(k1+b/2))*b + (k3+b/2);</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> }</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((k3>=-2*a) && (k3<-a) && (k1>=-(b/2)) && (k1<(b+1)/2) &&</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> (k2>=-(b/2)) && (k2<(b+1)/2)) <span class="comment">/* bottom */</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> {</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">if</span>(a>=b)</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*5 + ((k1+b/2)*b+k2+b/2)*a + (k3+2*a);</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keywordflow">return</span> sum_N_B_less_r+N_B_r*5 + ((k3+2*a)*b+(k1+b/2))*b + (k2+b/2);</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> }</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> sum_N_B_less_r+=6*N_B_r;</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> } <span class="comment">/* for(r) */</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> </div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> }</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="preprocessor">#ifdef GAUSSIAN</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> init_index_sparse_to_full_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> {</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="keywordtype">int</span> k1,k2,k3,k_s,r;</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="keywordtype">int</span> a,b;</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keywordtype">int</span> N=X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+2); <span class="comment">/* length of the full grid */</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="keywordtype">int</span> Nc=ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]; <span class="comment">/* length of the center block */</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">for</span> (k_s=0, r=0; r<=(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+1)/2; r++)</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> {</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> a=X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>-r);</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> b=X(exp2i)(r);</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="comment">/* right - rear - top - left - front - bottom */</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="comment">/* right */</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="keywordflow">for</span>(k2=-b/2;k2<(b+1)/2;k2++)</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++)</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="keywordflow">for</span>(k1=a; k1<2*a; k1++,k_s++)</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="keywordflow">for</span>(k1=a; k1<2*a; k1++)</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="keywordflow">for</span>(k2=-b/2;k2<(b+1)/2;k2++)</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++,k_s++)</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="comment">/* rear */</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++)</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="keywordflow">for</span>(k2=a; k2<2*a; k2++,k_s++)</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(a==b)</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keywordflow">for</span>(k2=a; k2<2*a; k2++)</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++,k_s++)</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">for</span>(k2=a; k2<2*a; k2++)</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++,k_s++)</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="comment">/* top */</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="keywordflow">if</span>(a>=b)</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="keywordflow">for</span>(k2=-b/2;k2<(b+1)/2;k2++)</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">for</span>(k3=a; k3<2*a; k3++,k_s++)</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="keywordflow">for</span>(k3=a; k3<2*a; k3++)</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keywordflow">for</span>(k2=-b/2;k2<(b+1)/2;k2++,k_s++)</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="comment">/* left */</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="keywordflow">for</span>(k2=-b/2;k2<(b+1)/2;k2++)</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++)</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="keywordflow">for</span>(k1=-2*a; k1<-a; k1++,k_s++)</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="keywordflow">for</span>(k1=-2*a; k1<-a; k1++)</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">for</span>(k2=-b/2;k2<(b+1)/2;k2++)</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++,k_s++)</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="comment">/* front */</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++)</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordflow">for</span>(k2=-2*a; k2<-a; k2++,k_s++)</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(a==b)</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="keywordflow">for</span>(k2=-2*a; k2<-a; k2++)</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++,k_s++)</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="keywordflow">for</span>(k2=-2*a; k2<-a; k2++)</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="keywordflow">for</span>(k3=-b/2;k3<(b+1)/2;k3++,k_s++)</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="comment">/* top */</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="keywordflow">if</span>(a>=b)</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordflow">for</span>(k2=-b/2;k2<(b+1)/2;k2++)</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordflow">for</span>(k3=-2*a; k3<-a; k3++,k_s++)</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="keywordflow">for</span>(k3=-2*a; k3<-a; k3++)</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="keywordflow">for</span>(k1=-b/2;k1<(b+1)/2;k1++)</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">for</span>(k2=-b/2;k2<(b+1)/2;k2++,k_s++)</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> }</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="comment">/* center */</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordflow">for</span>(k1=-Nc/2;k1<Nc/2;k1++)</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="keywordflow">for</span>(k2=-Nc/2;k2<Nc/2;k2++)</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="keywordflow">for</span>(k3=-Nc/2; k3<Nc/2; k3++,k_s++)</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> }</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="comment">/* copies ths->f_hat to ths_plan->f_hat */</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordtype">void</span> nsfft_cp(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths, <a class="code" href="structnfft__plan.html">nfft_plan</a> *ths_full_plan)</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> {</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="comment">/* initialize f_hat with zero values */</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> memset(ths_full_plan-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, 0, ths_full_plan-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordty [...]
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> </div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="comment">/* copy values at hyperbolic grid points */</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="keywordflow">for</span>(k=0;k<ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> ths_full_plan-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k]]=ths-><a class="code" href="structnsfft__plan.html#a [...]
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="comment">/* copy nodes */</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> memcpy(ths_full_plan-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial d [...]
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> }</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> </div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="preprocessor">#ifndef NSFTT_DISABLE_TEST</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor"></span><span class="comment">/* test copy_sparse_to_full */</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="keyword">static</span> <span class="keywordtype">void</span> test_copy_sparse_to_full_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths, <a class="code" href="structnfft__plan.html">nfft_plan</a> *ths_full_plan)</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> {</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="keywordtype">int</span> k1, k2;</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="keywordtype">int</span> a,b;</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="keyword">const</span> <span class="keywordtype">int</span> J=ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>; <span class="comment">/* N=2^J */</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N=ths_full_plan-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]; <span class="comment">/* size of full NFFT */</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="keyword">const</span> <span class="keywordtype">int</span> N_B=X(exp2i)(J); <span class="comment">/* size of small blocks */</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> </div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="comment">/* copy sparse plan to full plan */</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> nsfft_cp(ths, ths_full_plan);</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="comment">/* show blockwise f_hat */</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> printf(<span class="stringliteral">"f_hat blockwise\n"</span>);</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="keywordflow">for</span> (r=0; r<=(J+1)/2; r++){</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> a=X(exp2i)(J-r); b=X(exp2i)(r);</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> </div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> printf(<span class="stringliteral">"top\n"</span>);</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="keywordflow">for</span> (k1=0; k1<a; k1++){</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="keywordflow">for</span> (k2=0; k2<b; k2++){</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> printf(<span class="stringliteral">"(%1.1f,%1.1f) "</span>, creal(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(4*r+1)*N_B+ k1*b+k2]),</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> cimag(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(4*r+1)*N_B+ k1*b+k2]));</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> }</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> }</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> </div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> printf(<span class="stringliteral">"bottom\n"</span>);</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="keywordflow">for</span> (k1=0; k1<a; k1++){</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="keywordflow">for</span> (k2=0; k2<b; k2++){</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> printf(<span class="stringliteral">"(%1.1f,%1.1f) "</span>, creal(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(4*r+3)*N_B+ k1*b+k2]),</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> cimag(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(4*r+3)*N_B+ k1*b+k2]));</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> }</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> }</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> printf(<span class="stringliteral">"right\n"</span>);</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="keywordflow">for</span> (k2=0; k2<b; k2++){</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="keywordflow">for</span> (k1=0; k1<a; k1++){</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> printf(<span class="stringliteral">"(%1.1f,%1.1f) "</span>, creal(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(4*r+0)*N_B+ k2*a+k1]),</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> cimag(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(4*r+0)*N_B+ k2*a+k1]));</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> }</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> }</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> </div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> printf(<span class="stringliteral">"left\n"</span>);</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="keywordflow">for</span> (k2=0; k2<b; k2++){</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="keywordflow">for</span> (k1=0; k1<a; k1++){</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> printf(<span class="stringliteral">"(%1.1f,%1.1f) "</span>, creal(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(4*r+2)*N_B+ k2*a+k1]),</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> cimag(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[(4*r+2)*N_B+ k2*a+k1]));</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> }</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> }</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> }</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="comment">/* show full f_hat */</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> printf(<span class="stringliteral">"full f_hat\n"</span>);</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="keywordflow">for</span> (k1=0;k1<N;k1++){</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="keywordflow">for</span> (k2=0;k2<N;k2++){</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> printf(<span class="stringliteral">"(%1.1f,%1.1f) "</span>, creal(ths_full_plan-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k1*N+k2]),</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> cimag(ths_full_plan-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k1*N+k2]));</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> }</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> }</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> }</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="preprocessor">#ifndef NSFTT_DISABLE_TEST</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> test_sparse_to_full_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a>* ths)</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> {</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="keywordtype">int</span> k_S,k1,k2;</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="keywordtype">int</span> N=X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+2);</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> </div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> printf(<span class="stringliteral">"N=%d\n\n"</span>,N);</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="keywordflow">for</span>(k1=0;k1<N;k1++)</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="keywordflow">for</span>(k2=0;k2<N;k2++)</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> {</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> k_S=index_full_to_sparse_2d(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>, k1*N+k2);</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="keywordflow">if</span>(k_S!=-1)</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> printf(<span class="stringliteral">"(%+d, %+d)\t= %+d \t= %+d = %+d \n"</span>,k1-N/2,k2-N/2,</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> k1*N+k2, k_S, ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_S]);</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> }</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> }</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="preprocessor">#ifndef NSFTT_DISABLE_TEST</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> test_sparse_to_full_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a>* ths)</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> {</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="keywordtype">int</span> k_S,k1,k2,k3;</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="keywordtype">int</span> N=X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+2);</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> printf(<span class="stringliteral">"N=%d\n\n"</span>,N);</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="keywordflow">for</span>(k1=0;k1<N;k1++)</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="keywordflow">for</span>(k2=0;k2<N;k2++)</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="keywordflow">for</span>(k3=0;k3<N;k3++)</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> {</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> k_S=index_full_to_sparse_3d(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>, (k1*N+k2)*N+k3);</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="keywordflow">if</span>(k_S!=-1)</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> printf(<span class="stringliteral">"(%d, %d, %d)\t= %d \t= %d = %d \n"</span>,k1-N/2,k2-N/2,k3-N/2,</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> (k1*N+k2)*N+k3,k_S, ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_S]);</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> }</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> }</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="keywordtype">void</span> nsfft_init_random_nodes_coeffs(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> {</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> </div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="comment">/* init frequencies */</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a421 [...]
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> </div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="comment">/* init nodes */</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial [...]
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe" title="dimension, rank; d = 2, 3">d</a>==2)</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> {</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> ths-><a class="code" href="structnsfft__plan.html#aca6c9880cde07f3bc26dd7666c09a9d6" title="coordinate exchanged nodes, d = 2">x_transposed</a>[2*j+0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, [...]
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> ths-><a class="code" href="structnsfft__plan.html#aca6c9880cde07f3bc26dd7666c09a9d6" title="coordinate exchanged nodes, d = 2">x_transposed</a>[2*j+1]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, [...]
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> }</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="keywordflow">else</span> <span class="comment">/* this->d==3 */</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> {</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> ths->x_102[3*j+0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1];</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> ths->x_102[3*j+1]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+0];</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> ths->x_102[3*j+2]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2];</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> ths->x_201[3*j+0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2];</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> ths->x_201[3*j+1]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+0];</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> ths->x_201[3*j+2]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1];</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> </div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> ths->x_120[3*j+0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1];</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> ths->x_120[3*j+1]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2];</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> ths->x_120[3*j+2]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+0];</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> </div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> ths-><a class="code" href="structnsfft__plan.html#aee5ad936bb790f00bf0797c94e185549" title="coordinate exchanged nodes, d=3">x_021</a>[3*j+0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is [...]
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> ths-><a class="code" href="structnsfft__plan.html#aee5ad936bb790f00bf0797c94e185549" title="coordinate exchanged nodes, d=3">x_021</a>[3*j+1]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is [...]
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> ths-><a class="code" href="structnsfft__plan.html#aee5ad936bb790f00bf0797c94e185549" title="coordinate exchanged nodes, d=3">x_021</a>[3*j+2]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is [...]
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> }</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> }</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> </div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsdft_trafo_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> {</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="keywordtype">int</span> j,k_S,k_L,k0,k1;</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="keywordtype">int</span> N=X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+2);</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> </div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> memset(ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,0,ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> </div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="keywordflow">for</span>(k_S=0;k_S<ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>;k_S++)</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> {</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> k_L=ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_S];</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> k0=k_L / N;</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> k1=k_L % N;</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> </div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> {</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> omega =</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> ((double)(k0 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2 * j + 0] +</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> ((<span class="keywordtype">double</span>)(k1 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2 * j + 1];</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k_S] * cexp( - I*2*<a class="code" href="group__nfftutil. [...]
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> }</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> }</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> } <span class="comment">/* void nsdft_trafo_2d */</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> </div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsdft_trafo_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> {</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="keywordtype">int</span> j,k_S,k0,k1,k2;</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> <span class="keywordtype">int</span> N=X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+2);</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="keywordtype">int</span> k_L;</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> </div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> memset(ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,0,ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> </div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="keywordflow">for</span>(k_S=0;k_S<ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>;k_S++)</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> {</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> k_L=ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_S];</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> </div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> k0=k_L/(N*N);</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> k1=(k_L/N)%N;</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> k2=k_L%N;</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> </div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> {</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> omega =</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> ((double)(k0 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3 * j + 0] +</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> ((<span class="keywordtype">double</span>)(k1 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3 * j + 1] +</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> ((double)(k2 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3 * j + 2];</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k_S] * cexp( - I*2*<a class="code" href="group__nfftutil. [...]
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> }</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> }</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> } <span class="comment">/* void nsdft_trafo_3d */</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> </div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="keywordtype">void</span> nsfft_trafo_direct(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> {</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe" title="dimension, rank; d = 2, 3">d</a>==2)</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> nsdft_trafo_2d(ths);</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> nsdft_trafo_3d(ths);</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> }</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> </div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsdft_adjoint_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> {</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> <span class="keywordtype">int</span> j,k_S,k_L,k0,k1;</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="keywordtype">int</span> N=X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+2);</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> </div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> memset(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,0,ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _C [...]
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> </div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keywordflow">for</span>(k_S=0;k_S<ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>;k_S++)</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> {</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> k_L=ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_S];</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> k0=k_L / N;</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> k1=k_L % N;</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> </div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> {</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> omega =</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> ((double)(k0 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2 * j + 0] +</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> ((<span class="keywordtype">double</span>)(k1 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2 * j + 1];</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k_S] += ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * cexp( + _Complex_I*2*<a class="code" href="group__ [...]
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> }</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> }</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> } <span class="comment">/* void nsdft_adjoint_2d */</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> </div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsdft_adjoint_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> {</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="keywordtype">int</span> j,k_S,k0,k1,k2;</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="keywordtype">double</span> omega;</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> <span class="keywordtype">int</span> N=X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+2);</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="keywordtype">int</span> k_L;</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> </div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> memset(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,0,ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _C [...]
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> </div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keywordflow">for</span>(k_S=0;k_S<ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>;k_S++)</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> {</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> k_L=ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>[k_S];</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> </div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> k0=k_L/(N*N);</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> k1=(k_L/N)%N;</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> k2=k_L%N;</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="keywordflow">for</span>(j=0;j<ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> {</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> omega =</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> ((double)(k0 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3 * j + 0] +</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> ((<span class="keywordtype">double</span>)(k1 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3 * j + 1] +</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> ((double)(k2 - N/2)) * ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3 * j + 2];</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k_S] += ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] * cexp( + _Complex_I*2*<a class="code" href="group__ [...]
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> }</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> }</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> } <span class="comment">/* void nsdft_adjoint_3d */</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <span class="keywordtype">void</span> nsfft_adjoint_direct(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> {</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe" title="dimension, rank; d = 2, 3">d</a>==2)</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> nsdft_adjoint_2d(ths);</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> nsdft_adjoint_3d(ths);</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> }</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> </div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsfft_trafo_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> {</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="keywordtype">int</span> r,rr,j;</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> <span class="keywordtype">double</span> temp;</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> </div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <span class="keywordtype">int</span> M=ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> <span class="keywordtype">int</span> J=ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>;</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="comment">/* center */</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> </div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">cent [...]
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples [...]
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> </div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="keywordflow">for</span>(rr=0;rr<=(J+1)/2;rr++)</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> {</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> r=<a class="code" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308" title="Mimimum of its two arguments.">NFFT_MIN</a>(rr,J-rr);</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan1 = ths->set_fftw_plan1[r];</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]=X(exp2i)(r); ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class= [...]
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]=X(exp2i)(J-r); ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a clas [...]
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> </div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="comment">/*printf("%d x %d\n",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1]);*/</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> </div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> temp=-3.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*X(exp2i)(J-rr);</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> </div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="comment">/* right */</span></div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> </div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="keywordflow">if</span>(r<rr)</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> </div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> short_nfft_trafo_2d(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> </div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="keywordflow">if</span>(r<rr)</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> </div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samp [...]
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1]);</div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> </div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> <span class="comment">/* top */</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> </div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> <span class="keywordflow">if</span>((r==rr)&&(J-rr!=rr))</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> </div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> short_nfft_trafo_2d(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> </div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="keywordflow">if</span>((r==rr)&&(J-rr!=rr))</div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> </div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0]);</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> </div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="comment">/* left */</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> </div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="keywordflow">if</span>(r<rr)</div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> </div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> short_nfft_trafo_2d(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> </div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <span class="keywordflow">if</span>(r<rr)</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> </div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1]);</div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> </div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="comment">/* bottom */</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> </div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="keywordflow">if</span>((r==rr)&&(J-rr!=rr))</div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> </div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> short_nfft_trafo_2d(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> </div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <span class="keywordflow">if</span>((r==rr)&&(J-rr!=rr))</div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> </div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0]);</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> } <span class="comment">/* for(rr) */</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> } <span class="comment">/* void nsfft_trafo_2d */</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> </div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsfft_adjoint_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> {</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="keywordtype">int</span> r,rr,j;</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="keywordtype">double</span> temp;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> </div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="keywordtype">int</span> M=ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="keywordtype">int</span> J=ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>;</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> </div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> <span class="comment">/* center */</span></div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> </div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">cent [...]
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> </div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="keywordflow">for</span>(rr=0;rr<=(J+1)/2;rr++)</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> {</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> r=<a class="code" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308" title="Mimimum of its two arguments.">NFFT_MIN</a>(rr,J-rr);</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan2 = ths->set_fftw_plan2[r];</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]=X(exp2i)(r); ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class= [...]
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]=X(exp2i)(J-r); ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a clas [...]
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> </div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="comment">/*printf("%d x %d\n",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1]);*/</span></div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> </div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> temp=-3.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*X(exp2i)(J-rr);</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> </div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="comment">/* right */</span></div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> </div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1]);</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> </div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> <span class="keywordflow">if</span>(r<rr)</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> </div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> short_nfft_adjoint_2d(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> </div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="keywordflow">if</span>(r<rr)</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> </div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> <span class="comment">/* top */</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> </div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0]);</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> </div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <span class="keywordflow">if</span>((r==rr)&&(J-rr!=rr))</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> </div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> short_nfft_adjoint_2d(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> </div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="keywordflow">if</span>((r==rr)&&(J-rr!=rr))</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> </div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="comment">/* left */</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> </div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1]);</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> </div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="keywordflow">if</span>(r<rr)</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> short_nfft_adjoint_2d(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> </div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="keywordflow">if</span>(r<rr)</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> </div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="comment">/* bottom */</span></div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> </div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0]);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> </div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="keywordflow">if</span>((r==rr)&&(J-rr!=rr))</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> </div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> short_nfft_adjoint_2d(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> </div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="keywordflow">if</span>((r==rr)&&(J-rr!=rr))</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> } <span class="comment">/* for(rr) */</span></div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> } <span class="comment">/* void nsfft_adjoint_2d */</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> </div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsfft_trafo_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> {</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> <span class="keywordtype">int</span> r,rr,j;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> <span class="keywordtype">double</span> temp;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="keywordtype">int</span> sum_N_B_less_r,N_B_r,a,b;</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> </div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <span class="keywordtype">int</span> M=ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> <span class="keywordtype">int</span> J=ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>;</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> </div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> <span class="comment">/* center */</span></div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> </div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">cent [...]
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> </div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples [...]
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> </div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> sum_N_B_less_r=0;</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <span class="keywordflow">for</span>(rr=0;rr<=(J+1)/2;rr++)</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> {</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> a=X(exp2i)(J-rr);</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> b=X(exp2i)(rr);</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> </div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> N_B_r=a*b*b;</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> </div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> r=<a class="code" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308" title="Mimimum of its two arguments.">NFFT_MIN</a>(rr,J-rr);</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan1 = ths->set_fftw_plan1[rr];</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> </div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]=X(exp2i)(r);</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]=X(exp2i)(J-r);</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]=X(exp2i)(r);</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]=X(exp2i)(J-r);</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> </div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="comment">/*printf("\n\n%d x %d x %d:\t",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1],ths->act_nfft_plan->N[2]); fflush(stdout);*/</span></div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> </div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-& [...]
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversamplin [...]
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversamplin [...]
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[2]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversamplin [...]
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" [...]
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> </div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> <span class="comment">/* only for right - rear - top */</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> <span class="keywordflow">if</span>((J==0)||((J==1)&&(rr==1)))</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> temp=-2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> temp=-3.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*X(exp2i)(J-rr);</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> </div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> <span class="comment">/* right */</span></div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> </div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> </div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> short_nfft_trafo_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> short_nfft_trafo_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> </div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> </div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+0]);</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> </div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <span class="comment">/* rear */</span></div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> </div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> </div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> short_nfft_trafo_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> short_nfft_trafo_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> </div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> </div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1]);</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> </div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="comment">/* top */</span></div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> </div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> </div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> short_nfft_trafo_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> short_nfft_trafo_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> </div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> </div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2]);</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> </div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="comment">/* only for left - front - bottom */</span></div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="keywordflow">if</span>((J==0)||((J==1)&&(rr==1)))</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> temp=-4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>;</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> temp=-3.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*X(exp2i)(J-rr);</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> </div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> <span class="comment">/* left */</span></div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> </div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> </div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> short_nfft_trafo_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> short_nfft_trafo_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> </div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> </div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+0]);</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> </div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> <span class="comment">/* front */</span></div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> </div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> </div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> short_nfft_trafo_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> short_nfft_trafo_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> </div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> </div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1]);</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> </div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> <span class="comment">/* bottom */</span></div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> </div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> </div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> nfft_trafo_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> short_nfft_trafo_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> short_nfft_trafo_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> </div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> </div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] += ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of sampl [...]
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2]);</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> </div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> sum_N_B_less_r+=6*N_B_r;</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> } <span class="comment">/* for(rr) */</span></div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> } <span class="comment">/* void nsfft_trafo_3d */</span></div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> </div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsfft_adjoint_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> {</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> <span class="keywordtype">int</span> r,rr,j;</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> <span class="keywordtype">double</span> temp;</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <span class="keywordtype">int</span> sum_N_B_less_r,N_B_r,a,b;</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> </div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="keywordtype">int</span> M=ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>;</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> <span class="keywordtype">int</span> J=ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>;</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> </div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> <span class="comment">/* center */</span></div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j] = ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> </div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> </div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> <span class="keywordflow">if</span> (ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">cent [...]
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> </div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> sum_N_B_less_r=0;</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> <span class="keywordflow">for</span>(rr=0;rr<=(J+1)/2;rr++)</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> {</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> a=X(exp2i)(J-rr);</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> b=X(exp2i)(rr);</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> </div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> N_B_r=a*b*b;</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> </div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> r=<a class="code" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308" title="Mimimum of its two arguments.">NFFT_MIN</a>(rr,J-rr);</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan1 = ths->set_fftw_plan1[rr];</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan2 = ths->set_fftw_plan2[rr];</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> </div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]=X(exp2i)(r);</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]=X(exp2i)(J-r);</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]=X(exp2i)(r);</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]=X(exp2i)(J-r);</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> </div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> <span class="comment">/*printf("\n\n%d x %d x %d:\t",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1],ths->act_nfft_plan->N[2]); fflush(stdout);*/</span></div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> </div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-& [...]
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversamplin [...]
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversamplin [...]
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[2]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversamplin [...]
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" [...]
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> </div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> <span class="comment">/* only for right - rear - top */</span></div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> <span class="keywordflow">if</span>((J==0)||((J==1)&&(rr==1)))</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> temp=-2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>;</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> temp=-3.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*X(exp2i)(J-rr);</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> </div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> <span class="comment">/* right */</span></div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> </div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+0]);</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> </div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> </div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> short_nfft_adjoint_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> short_nfft_adjoint_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> </div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> </div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> <span class="comment">/* rear */</span></div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> </div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1]);</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> </div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> </div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> short_nfft_adjoint_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> short_nfft_adjoint_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> </div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> </div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> <span class="comment">/* top */</span></div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> </div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> cexp( - I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2]);</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> </div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> </div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> short_nfft_adjoint_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> short_nfft_adjoint_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> </div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> </div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> <span class="comment">/* only for left - front - bottom */</span></div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> <span class="keywordflow">if</span>((J==0)||((J==1)&&(rr==1)))</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> temp=-4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>;</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> temp=-3.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*X(exp2i)(J-rr);</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> </div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> <span class="comment">/* left */</span></div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> </div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+0]);</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> </div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> </div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> short_nfft_adjoint_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> short_nfft_adjoint_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> </div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> </div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> <span class="comment">/* front */</span></div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> </div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1]);</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> </div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> </div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span> nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> short_nfft_adjoint_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> short_nfft_adjoint_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> </div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span> <span class="keywordflow">if</span>(a>b)</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> </div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> <span class="comment">/* bottom */</span></div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector [...]
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> </div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> <span class="keywordflow">for</span> (j=0; j<M; j++)</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j]= ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples [...]
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> cexp( + _Complex_I*temp*ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2]);</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> </div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> </div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_ [...]
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft [...]
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[2]<=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nf [...]
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span> nfft_adjoint_direct(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> short_nfft_adjoint_3d_1(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> short_nfft_adjoint_3d_2(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span> nfft_adjoint(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span> </div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,t [...]
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span> </div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span> sum_N_B_less_r+=6*N_B_r;</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> } <span class="comment">/* for(rr) */</span></div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> } <span class="comment">/* void nsfft_adjoint_3d */</span></div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> </div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> <span class="keywordtype">void</span> nsfft_trafo(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> {</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe" title="dimension, rank; d = 2, 3">d</a>==2)</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span> nsfft_trafo_2d(ths);</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> nsfft_trafo_3d(ths);</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> }</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> </div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> <span class="keywordtype">void</span> nsfft_adjoint(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> {</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe" title="dimension, rank; d = 2, 3">d</a>==2)</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> nsfft_adjoint_2d(ths);</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> nsfft_adjoint_3d(ths);</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> }</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> </div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> </div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> <span class="comment">/*========================================================*/</span></div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> <span class="comment">/* J >1, no precomputation at all!! */</span></div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> <span class="preprocessor">#ifdef GAUSSIAN</span></div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> nsfft_init_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths, <span class="keywordtype">int</span> J, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> snfft_flags)</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> {</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span> <span class="keywordtype">int</span> N[2];</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> <span class="keywordtype">int</span> n[2];</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> </div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> ths-><a class="code" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281" title="flags for precomputation, malloc">flags</a>=snfft_flags;</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>=2;</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span> ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>=J;</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>=M;</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span> ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>=(J+4)*X(exp2i)(J+1);</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> </div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> <span class="comment">/* memory allocation */</span></div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span> ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" titl [...]
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> ths-><a class="code" href="structnsfft__plan.html#aca6c9880cde07f3bc26dd7666c09a9d6" title="coordinate exchanged nodes, d = 2">x_transposed</a>= (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> </div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>));</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>));</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> </div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> ths->set_fftw_plan1=(fftw_plan*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((J/2+1)*<span class="keyword">sizeof</span>(fftw_plan));</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span> ths->set_fftw_plan2=(fftw_plan*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((J/2+1)*<span class="keyword">sizeof</span>(fftw_plan));</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> </div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span> ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((X(log2i)(m)+1)*(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>)));</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> </div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> <span class="comment">/* planning the small nffts */</span></div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> <span class="comment">/* r=0 */</span></div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> N[0]=1; n[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[0];</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> N[1]=X(exp2i)(J); n[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[1];</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> </div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> nfft_init_guru(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,2,N,M,n,m, FG_PSI| MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> </div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> nfft_precompute_one_psi(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> </div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> ths->set_fftw_plan1[0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan1;</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span> ths->set_fftw_plan2[0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan2;</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> </div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> <span class="keywordflow">for</span>(r=1;r<=J/2;r++)</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> {</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span> N[0]=X(exp2i)(r); n[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[0];</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span> N[1]=X(exp2i)(J-r); n[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[1];</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> ths->set_fftw_plan1[r] =</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span> fftw_plan_dft(2, n, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class [...]
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span> FFTW_FORWARD, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>);</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> </div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> ths->set_fftw_plan2[r] =</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> fftw_plan_dft(2, n, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a clas [...]
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span> FFTW_BACKWARD, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>);</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span> }</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> </div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> <span class="comment">/* planning the 1d nffts */</span></div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span> <span class="keywordflow">for</span>(r=0;r<=X(log2i)(m);r++)</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> {</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> N[0]=X(exp2i)(J-r); n[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[0]; <span class="comment">/* ==N[1] of the 2 dimensional plan */</span></div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> </div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> nfft_init_guru(&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]),1,N,M,n,m, MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);</div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html [...]
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="curr [...]
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f [...]
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> }</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> </div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> <span class="comment">/* center plan */</span></div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span> <span class="comment">/* J/2 == floor(((double)J) / 2.0) */</span></div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> N[0]=X(exp2i)(J/2+1); n[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[0];</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> N[1]=X(exp2i)(J/2+1); n[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[1];</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> nfft_init_guru(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>,2,N,M,n, m, MALLOC_F| FFTW_INIT,</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> FFTW_MEASURE);</div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>= ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</ [...]
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8 [...]
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span> FG_PSI;</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft bl [...]
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="cu [...]
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> </div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281" title="flags for precomputation, malloc">flags</a> & NSDFT)</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> {</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>=(<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier [...]
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span> init_index_sparse_to_full_2d(ths);</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span> }</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> }</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> <span class="comment">/*========================================================*/</span></div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span> <span class="comment">/* J >1, no precomputation at all!! */</span></div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> <span class="preprocessor">#ifdef GAUSSIAN</span></div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> nsfft_init_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths, <span class="keywordtype">int</span> J, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> snfft_flags)</div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span> {</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> <span class="keywordtype">int</span> r,rr,a,b;</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span> <span class="keywordtype">int</span> N[3];</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span> <span class="keywordtype">int</span> n[3];</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span> </div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> ths-><a class="code" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281" title="flags for precomputation, malloc">flags</a>=snfft_flags;</div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>=2;</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>=J;</div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span> ths-><a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>=M;</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>=6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1)+X(exp2i)(3*(J/2+1));</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> </div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span> <span class="comment">/* memory allocation */</span></div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = (<span class="keywordtype">double</span> _Complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" titl [...]
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span> </div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span> ths->x_102= (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(3*M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span> ths->x_201= (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(3*M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> ths->x_120= (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(3*M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> ths-><a class="code" href="structnsfft__plan.html#aee5ad936bb790f00bf0797c94e185549" title="coordinate exchanged nodes, d=3">x_021</a>= (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(3*M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> </div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>));</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>));</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> </div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> ths->set_fftw_plan1=(fftw_plan*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(((J+1)/2+1)*<span class="keyword">sizeof</span>(fftw_plan));</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span> ths->set_fftw_plan2=(fftw_plan*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(((J+1)/2+1)*<span class="keyword">sizeof</span>(fftw_plan));</div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span> </div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((X(log2i)(m)+1)*(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>)));</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span> ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a> = (<a class="code" href="structnfft__plan.html">nfft_plan</a>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((X(log2i)(m)+1)*(<span class="keyword">sizeof</span>(<a class="code" href="structnfft__plan.html">nfft_plan</a>)));</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span> </div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span> <span class="comment">/* planning the small nffts */</span></div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span> <span class="comment">/* r=0 */</span></div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span> N[0]=1; n[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[0];</div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> N[1]=1; n[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[1];</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span> N[2]=X(exp2i)(J); n[2]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[2];</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> </div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span> nfft_init_guru(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>,3,N,M,n,m, FG_PSI| MALLOC_X| MALLOC_F, FFTW_MEASURE);</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span> </div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span> nfft_precompute_one_psi(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span> </div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span> <span class="comment">/* malloc g1, g2 for maximal size */</span></div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a> = <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bd [...]
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a> = <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51b [...]
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> </div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan1 =</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span> fftw_plan_dft(3, n, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a cla [...]
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> FFTW_FORWARD, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>);</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan2 =</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span> fftw_plan_dft(3, n, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a cl [...]
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span> FFTW_BACKWARD, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>);</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span> </div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span> ths->set_fftw_plan1[0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan1;</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span> ths->set_fftw_plan2[0]=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan2;</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span> </div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> <span class="keywordflow">for</span>(rr=1;rr<=(J+1)/2;rr++)</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> {</div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> a=X(exp2i)(J-rr);</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span> b=X(exp2i)(rr);</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span> </div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span> r=<a class="code" href="group__nfftutil.html#ga9087991411f723f26723b2b26dbf3308" title="Mimimum of its two arguments.">NFFT_MIN</a>(rr,J-rr);</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> </div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span> n[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*X(exp2i)(r);</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span> <span class="keywordflow">if</span>(a<b)</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span> n[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*X(exp2i)(J-r);</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span> n[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*X(exp2i)(r);</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> n[2]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*X(exp2i)(J-r);</div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span> </div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span> ths->set_fftw_plan1[rr] =</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> fftw_plan_dft(3, n, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class [...]
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> FFTW_FORWARD, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>);</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span> ths->set_fftw_plan2[rr] =</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> fftw_plan_dft(3, n, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a clas [...]
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span> FFTW_BACKWARD, ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805" title="Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT.">fftw_flags</a>);</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> }</div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> </div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> <span class="comment">/* planning the 1d nffts */</span></div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span> <span class="keywordflow">for</span>(r=0;r<=X(log2i)(m);r++)</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span> {</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> N[0]=X(exp2i)(J-r); n[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[0];</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span> N[1]=X(exp2i)(J-r); n[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[1];</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> </div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span> <span class="keywordflow">if</span>(N[0]>m)</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> {</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span> nfft_init_guru(&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]),1,N,M,n,m, MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);</div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html#a [...]
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="curren [...]
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" [...]
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> nfft_init_guru(&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]),2,N,M,n,m, MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);</div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span> ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r].<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html#a [...]
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r].<a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="curren [...]
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r].<a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" [...]
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> }</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span> }</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> </div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> <span class="comment">/* center plan */</span></div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> <span class="comment">/* J/2 == floor(((double)J) / 2.0) */</span></div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> N[0]=X(exp2i)(J/2+1); n[0]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[0];</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> N[1]=X(exp2i)(J/2+1); n[1]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[1];</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> N[2]=X(exp2i)(J/2+1); n[2]=ths-><a class="code" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954" title="oversampling-factor">sigma</a>*N[2];</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span> nfft_init_guru(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>,3,N,M,n, m, MALLOC_F| FFTW_INIT,</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> FFTW_MEASURE);</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>= ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</ [...]
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8 [...]
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> FG_PSI;</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4" title="Number of equispaced samples of the window function for PRE_LIN_PSI.">K</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft bl [...]
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c" title="Precomputed data for the sparse matrix , size depends on precomputation scheme.">psi</a>=ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="cu [...]
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> </div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281" title="flags for precomputation, malloc">flags</a> & NSDFT)</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span> {</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>=(<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier [...]
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> init_index_sparse_to_full_3d(ths);</div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span> }</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> }</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> <span class="preprocessor">#ifdef GAUSSIAN</span></div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span> <span class="preprocessor"></span><span class="keywordtype">void</span> nsfft_init(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> J, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> flags)</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> {</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> ths-><a class="code" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe" title="dimension, rank; d = 2, 3">d</a>=d;</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> </div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe" title="dimension, rank; d = 2, 3">d</a>==2)</div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span> nsfft_init_2d(ths, J, M, m, flags);</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> nsfft_init_3d(ths, J, M, m, flags);</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> </div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> </div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> ths-><a class="code" href="structnsfft__plan.html#abbab5fc009e68a329bbebee4904e53a5" title="Pointer to the own transform.">mv_trafo</a> = (void (*) (<span class="keywordtype">void</span>* ))nsfft_trafo;</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> ths-><a class="code" href="structnsfft__plan.html#a9761ac166f3ec93197e8e409ba78fb4f" title="Pointer to the own adjoint.">mv_adjoint</a> = (void (*) (<span class="keywordtype">void</span>* ))nsfft_adjoint;</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span> }</div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> <span class="preprocessor"></span><span class="keywordtype">void</span> nsfft_init(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span> J, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> m, <span class="keywordtype">unsigned</span> flags)</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span> {</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span> UNUSED(ths);</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> UNUSED(d);</div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span> UNUSED(J);</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> UNUSED(M);</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> UNUSED(m);</div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> UNUSED(flags);</div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> fprintf(stderr,</div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> <span class="stringliteral">"\nError in kernel/nsfft_init: require GAUSSIAN window function\n"</span>);</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> }</div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsfft_finalize_2d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span> {</div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span> <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> </div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281" title="flags for precomputation, malloc">flags</a> & NSDFT)</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>);</div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span> </div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> <span class="comment">/* center plan */</span></div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8 [...]
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span> nfft_finalize(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> </div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> <span class="comment">/* the 1d nffts */</span></div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> <span class="keywordflow">for</span>(r=0;r<=X(log2i)(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>);r+ [...]
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span> {</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span> ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> =</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> ^ FG_PSI;</div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span> nfft_finalize(&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span> }</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span> </div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> <span class="comment">/* finalize the small nffts */</span></div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan2=ths->set_fftw_plan2[0];</div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan1=ths->set_fftw_plan1[0];</div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> </div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> <span class="keywordflow">for</span>(r=1;r<=ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>/2;r++)</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span> {</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span> fftw_destroy_plan(ths->set_fftw_plan2[r]);</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span> fftw_destroy_plan(ths->set_fftw_plan1[r]);</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> }</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span> </div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> <span class="comment">/* r=0 */</span></div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span> nfft_finalize(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> </div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>);</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span> </div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->set_fftw_plan2);</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->set_fftw_plan1);</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> </div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#aca6c9880cde07f3bc26dd7666c09a9d6" title="coordinate exchanged nodes, d = 2">x_transposed</a>);</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> </div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>);</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> }</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> </div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nsfft_finalize_3d(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> {</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span> </div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281" title="flags for precomputation, malloc">flags</a> & NSDFT)</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55" title="index conversation, overflow for d=3, J=9!">index_sparse_to_full</a>);</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span> </div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span> <span class="comment">/* center plan */</span></div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8 [...]
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> nfft_finalize(ths-><a class="code" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e" title="central nfft block">center_nfft_plan</a>);</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span> </div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span> <span class="comment">/* the 1d and 2d nffts */</span></div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span> <span class="keywordflow">for</span>(r=0;r<=X(log2i)(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>);r+ [...]
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span> {</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> <span class="keywordflow">if</span>(X(exp2i)(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>-r)>ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href=" [...]
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span> {</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span> ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r].<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html#a [...]
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span> nfft_finalize(&(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>[r]));</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span> ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r].<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> = ths-><a class="code" href="structnsfft__plan.html#a [...]
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span> nfft_finalize(&(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>[r]));</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> }</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span> }</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> </div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> <span class="comment">/* finalize the small nffts */</span></div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan2=ths->set_fftw_plan2[0];</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>->my_fftw_plan1=ths->set_fftw_plan1[0];</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span> </div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span> <span class="keywordflow">for</span>(r=1;r<=(ths-><a class="code" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52" title="problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1))">J</a>+1)/2;r++)</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span> {</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span> fftw_destroy_plan(ths->set_fftw_plan2[r]);</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span> fftw_destroy_plan(ths->set_fftw_plan1[r]);</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span> }</div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span> </div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> <span class="comment">/* r=0 */</span></div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span> nfft_finalize(ths-><a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>);</div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span> </div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc" title="nfft plans for short nffts">set_nfft_plan_1d</a>);</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b" title="nfft plans for short nffts">set_nfft_plan_2d</a>);</div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span> </div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->set_fftw_plan2);</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->set_fftw_plan1);</div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span> </div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->x_102);</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->x_201);</div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths->x_120);</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#aee5ad936bb790f00bf0797c94e185549" title="coordinate exchanged nodes, d=3">x_021</a>);</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span> </div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>);</div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> }</div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> </div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span> <span class="keywordtype">void</span> nsfft_finalize(<a class="code" href="structnsfft__plan.html">nsfft_plan</a> *ths)</div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span> {</div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe" title="dimension, rank; d = 2, 3">d</a>==2)</div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span> nsfft_finalize_2d(ths);</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span> nsfft_finalize_3d(ths);</div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/nsfft__test_8c_source.html b/doc/api/html/nsfft__test_8c_source.html
new file mode 100644
index 0000000..524418d
--- /dev/null
+++ b/doc/api/html/nsfft__test_8c_source.html
@@ -0,0 +1,260 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nsfft_test.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_390363ac6c75087990c53a11ba2c3b15.html">nsfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">nsfft_test.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: nsfft_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">static</span> <span class="keywordtype">void</span> accuracy_nsfft(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> J, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> m)</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <a class="code" href="structnsfft__plan.html">nsfft_plan</a> p;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">double</span> _Complex *swap_sndft_trafo, *swap_sndft_adjoint;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> nsfft_init(&p, d, J, M, m, NSDFT);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> swap_sndft_trafo=(<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(p.<a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>*</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> swap_sndft_adjoint=(<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(p.<a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>*</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> nsfft_init_random_nodes_coeffs(&p);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> nsfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_sndft_trafo,p.<a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> nsfft_trafo(&p);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> printf(<span class="stringliteral">"%5d\t %+.5E\t"</span>,J,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> X(error_l_infty_1_complex)(swap_sndft_trafo, p.<a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> p.<a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, p.<a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>));</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> fflush(stdout);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(p.<a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total [...]
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> nsfft_adjoint_direct(&p);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(swap_sndft_adjoint,p.<a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> nsfft_adjoint(&p);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> printf(<span class="stringliteral">"%+.5E\n"</span>,</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> X(error_l_infty_1_complex)(swap_sndft_adjoint, p.<a class="code" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>,</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> p.<a class="code" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505" title="Total number of Fourier coefficients.">N_total</a>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> p.<a class="code" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, p.<a class="code" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> fflush(stdout);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swap_sndft_adjoint);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swap_sndft_trafo);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> nsfft_finalize(&p);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keyword">static</span> <span class="keywordtype">void</span> time_nsfft(<span class="keywordtype">int</span> d, <span class="keywordtype">int</span> J, <span class="keywordtype">int</span> M, <span class="keywordtype">unsigned</span> test_nsdft, <span class="keywordtype">unsigned</span> test_nfft)</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> {</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">int</span> r, N[d], n[d];</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">double</span> t, t_nsdft, t_nfft, t_nsfft;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> ticks t0, t1;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <a class="code" href="structnsfft__plan.html">nsfft_plan</a> p;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> np;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">for</span>(r=0;r<d;r++)</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> N[r]= X(exp2i)(J+2);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> n[r]=(3*N[r])/2;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">/*n[r]=2*N[r];*/</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> nsfft_init(&p, d, J, M, 4, NSDFT);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> nsfft_init_random_nodes_coeffs(&p);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment">/* transforms */</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span>(test_nsdft)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> t_nsdft=0;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> r=0;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">while</span>(t_nsdft<0.1)</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> {</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> r++;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> t0 = getticks();</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> nsfft_trafo_direct(&p);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> t1 = getticks();</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> t_nsdft+=t;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> t_nsdft/=r;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> t_nsdft=nan(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span>(test_nfft)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> {</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> nfft_init_guru(&np,d,N,M,n,6, FG_PSI| MALLOC_F_HAT| MALLOC_F| FFTW_INIT,</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> FFTW_MEASURE);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> np.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>=p.<a class="code" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f" title="current nfft block">act_nfft_plan</a>-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles."> [...]
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">if</span>(np.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> nfft_precompute_one_psi(&np);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> nsfft_cp(&p, &np);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> t_nfft=0;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> r=0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">while</span>(t_nfft<0.1)</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> {</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> r++;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> t0 = getticks();</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&np);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> t1 = getticks();</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> t_nfft+=t;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> t_nfft/=r;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> nfft_finalize(&np);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> {</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> t_nfft=nan(<span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> t_nsfft=0;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> r=0;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">while</span>(t_nsfft<0.1)</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> {</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> r++;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> t0 = getticks();</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> nsfft_trafo(&p);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> t1 = getticks();</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> t_nsfft+=t;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> }</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> t_nsfft/=r;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> printf(<span class="stringliteral">"%d\t%.2e\t%.2e\t%.2e\n"</span>, J, t_nsdft, t_nfft, t_nsfft);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> fflush(stdout);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> nsfft_finalize(&p);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> }</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> {</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordtype">int</span> d, J, M;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">if</span>(argc<=2)</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> {</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> fprintf(stderr,<span class="stringliteral">"nsfft_test type d [first last trials]\n"</span>);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> }</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> d=atoi(argv[2]);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> fprintf(stderr,<span class="stringliteral">"Testing the nfft on the hyperbolic cross (nsfft).\n"</span>);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">if</span>(atoi(argv[1])==1)</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> {</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> fprintf(stderr,<span class="stringliteral">"Testing the accuracy of the nsfft vs. nsdft\n"</span>);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> fprintf(stderr,<span class="stringliteral">"Columns: d, E_{1,\\infty}(trafo) E_{1,\\infty}(adjoint)\n\n"</span>);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">for</span>(J=1; J<10; J++)</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> accuracy_nsfft(d, J, 1000, 6);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">if</span>(atoi(argv[1])==2)</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> {</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> fprintf(stderr,<span class="stringliteral">"Testing the computation time of the nsdft, nfft, and nsfft\n"</span>);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> fprintf(stderr,<span class="stringliteral">"Columns: d, J, M, t_nsdft, t_nfft, t_nsfft\n\n"</span>);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">for</span>(J=atoi(argv[3]); J<=atoi(argv[4]); J++)</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> {</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">if</span>(d==2)</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> M=(J+4)*X(exp2i)(J+1);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> M=6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1)+X(exp2i)(3*(J/2+1));</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">if</span>(d*(J+2)<=24)</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> time_nsfft(d, J, M, 1, 1);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">if</span>(d*(J+2)<=24)</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> time_nsfft(d, J, M, 0, 1);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> time_nsfft(d, J, M, 0, 0);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> }</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/open.png b/doc/api/html/open.png
new file mode 100644
index 0000000..30f75c7
Binary files /dev/null and b/doc/api/html/open.png differ
diff --git a/doc/api/html/polar__fft__test_8c.html b/doc/api/html/polar__fft__test_8c.html
new file mode 100644
index 0000000..0609ad0
--- /dev/null
+++ b/doc/api/html/polar__fft__test_8c.html
@@ -0,0 +1,88 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - polar_fft_test.c File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">polar_fft_test.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>NFFT-based polar FFT and inverse.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="polar__fft__test_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga307b67b4c00a1c756f140c7fa831cdae"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae">polar_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:ga307b67b4c00a1c756f140c7fa831cdae"><td class="mdescLeft"> </td><td class="mdescRight">Generates the points <img class="formulaInl" alt="$x_{t,j}$" src="form_115.png"/> with weights <img class="formulaInl" alt="$w_{t,j}$" src="form_116.png"/> for the polar grid with <img class="formulaInl" alt="$T$" src="form_117.png"/> angles and <img class="formulaInl" alt="$R$" src="form_118.png"/> offsets. <a href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756 [...]
+<tr class="memitem:gaf6ec0d6bb5bfea4829e551c9dc9a656e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf6ec0d6bb5bfea4829e551c9dc9a656e"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#gaf6ec0d6bb5bfea4829e551c9dc9a656e">polar_dft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:gaf6ec0d6bb5bfea4829e551c9dc9a656e"><td class="mdescLeft"> </td><td class="mdescRight">discrete polar FFT <br/></td></tr>
+<tr class="memitem:ga72ebda23ef48b6509833eea9a24fa839"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga72ebda23ef48b6509833eea9a24fa839"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#ga72ebda23ef48b6509833eea9a24fa839">polar_fft</a> (fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)</td></tr>
+<tr class="memdesc:ga72ebda23ef48b6509833eea9a24fa839"><td class="mdescLeft"> </td><td class="mdescRight">NFFT-based polar FFT. <br/></td></tr>
+<tr class="memitem:gad996d429207cf198e9027618e081ada0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad996d429207cf198e9027618e081ada0"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#gad996d429207cf198e9027618e081ada0">inverse_polar_fft</a> (fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int <a class="el" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e">max_i</a>, int m)</td></tr>
+<tr class="memdesc:gad996d429207cf198e9027618e081ada0"><td class="mdescLeft"> </td><td class="mdescRight">inverse NFFT-based polar FFT <br/></td></tr>
+<tr class="memitem:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__applications__polarFFT__polar.html#ga3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:ga3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">test program for various parameters <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>NFFT-based polar FFT and inverse. </p>
+<p>Computes the NFFT-based polar FFT and its inverse for various parameters. </p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2006 </dd></dl>
+
+<p>Definition in file <a class="el" href="polar__fft__test_8c_source.html">polar_fft_test.c</a>.</p>
+</div></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/polar__fft__test_8c_source.html b/doc/api/html/polar__fft__test_8c_source.html
new file mode 100644
index 0000000..36f759a
--- /dev/null
+++ b/doc/api/html/polar__fft__test_8c_source.html
@@ -0,0 +1,380 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - polar_fft_test.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_697d3e9fc07ca8e2f36d15eea53bc2fc.html">polarFFT</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">polar_fft_test.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="polar__fft__test_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: polar_fft_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae"> 78</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae" title="Generates the points with weights for the polar grid with angles and offsets.">polar_grid</a>(<span class="keywordtype">int</s [...]
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> {</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">int</span> t, r;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">double</span> W=(double)T*(((<span class="keywordtype">double</span>)R/2.0)*((double)R/2.0)+1.0/4.0);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">for</span>(t=-T/2; t<T/2; t++)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">for</span>(r=-R/2; r<R/2; r++)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> {</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> x[2*((t+T/2)*R+(r+R/2))+0] = (<span class="keywordtype">double</span>)r/R*cos(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*t/T);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)r/R*sin(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*t/T);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">if</span> (r==0)</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> w[(t+T/2)*R+(r+R/2)] = fabs((<span class="keywordtype">double</span>)r)/W;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">return</span> T*R; </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__polar.html#gaf6ec0d6bb5bfea4829e551c9dc9a656e"> 100</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__polar.html#gaf6ec0d6bb5bfea4829e551c9dc9a656e" title="discrete polar FFT">polar_dft</a>(fftw_complex *f_hat, <span class="keywordtype">int</span> NN, fftw_complex *f, <span class="keyw [...]
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> {</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordtype">int</span> j,k; </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan; </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">double</span> *x, *w; </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">int</span> M=T*R; </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> N[0]=NN; n[0]=2*N[0]; </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> N[1]=NN; n[1]=2*N[1]; </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <a class="code" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae" title="Generates the points with weights for the polar grid with angles and offsets.">polar_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> {</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> }</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = f_hat[k];</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> nfft_trafo_direct(&my_nfft_plan);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> f[j] = my_nfft_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__polar.html#ga72ebda23ef48b6509833eea9a24fa839"> 154</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__polar.html#ga72ebda23ef48b6509833eea9a24fa839" title="NFFT-based polar FFT.">polar_fft</a>(fftw_complex *f_hat, <span class="keywordtype">int</span> NN, fftw_complex *f, <span class="k [...]
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> {</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordtype">int</span> j,k; </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan; </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordtype">double</span> *x, *w; </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordtype">int</span> M=T*R; </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> N[0]=NN; n[0]=2*N[0]; </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> N[1]=NN; n[1]=2*N[1]; </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <a class="code" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae" title="Generates the points with weights for the polar grid with angles and offsets.">polar_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> {</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> nfft_precompute_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> nfft_precompute_full_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = f_hat[k];</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> f[j] = my_nfft_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[j];</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> }</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__polar.html#gad996d429207cf198e9027618e081ada0"> 218</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__polarFFT__polar.html#gad996d429207cf198e9027618e081ada0" title="inverse NFFT-based polar FFT">inverse_polar_fft</a>(fftw_complex *f, <span class="keywordtype">int</span> T, <span class="keywordt [...]
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> {</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordtype">int</span> j,k; </div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan; </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_infft_plan; </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordtype">double</span> *x, *w; </div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordtype">int</span> l; </div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordtype">int</span> M=T*R; </div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> N[0]=NN; n[0]=2*N[0]; </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> N[1]=NN; n[1]=2*N[1]; </div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> solver_init_advanced_complex(&my_infft_plan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT );</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <a class="code" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae" title="Generates the points with weights for the polar grid with angles and offsets.">polar_grid</a>(T,R,x,w);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> {</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j] = f[j];</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j] = w[j];</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> }</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> nfft_precompute_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> nfft_precompute_full_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">if</span>(my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0];j++)</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1];k++)</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> {</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]+k]=</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> (sqrt(pow((<span class="keywordtype">double</span>)(j-my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2),2.0)+pow((<span class="keywordtype">double</span>)(k-my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[1]/2),2.0))</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> >((double)(my_nfft_plan.<a class="code" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9" title="multi-bandwidth">N</a>[0]/2))?0:1);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> }</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = 0.0 + _Complex_I*0.0;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> solver_before_loop_complex(&my_infft_plan);</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">if</span> (max_i<1)</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> {</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> l=1;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k] = my_infft_plan.<a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>[k];</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> }</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> {</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">for</span>(l=1;l<=<a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>;l++)</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> {</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_infft_plan);</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> }</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> }</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> f_hat[k] = my_infft_plan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k];</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_infft_plan);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> }</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno"><a class="code" href="group__applications__polarFFT__polar.html#ga3c04138a5bfe5d72780bb7e82a18e627"> 314</a></span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> {</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordtype">int</span> N; </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keywordtype">int</span> T, R; </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordtype">int</span> M; </div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="keywordtype">double</span> *x, *w; </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> fftw_complex *f_hat, *f, *f_direct, *f_tilde;</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__fastsum.html#ga37a2a7cb4fb162d6e6e46ea614318a4e" title="max">max_i</a>; </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordtype">int</span> m = 1;</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordtype">double</span> temp1, temp2, E_max=0.0;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> FILE *fp1, *fp2;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordtype">char</span> filename[30];</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordflow">if</span>( argc!=4 )</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> {</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> printf(<span class="stringliteral">"polar_fft_test N T R \n"</span>);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> printf(<span class="stringliteral">"N polar FFT of size NxN \n"</span>);</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> printf(<span class="stringliteral">"T number of slopes \n"</span>);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> printf(<span class="stringliteral">"R number of offsets \n"</span>);</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> exit(-1);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> }</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> N = atoi(argv[1]);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> T = atoi(argv[2]);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> R = atoi(argv[3]);</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> printf(<span class="stringliteral">"N=%d, polar grid with T=%d, R=%d => "</span>,N,T,R);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*5*(T/2)*(R/2)*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(5*(T/2)*(R/2)*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> f_hat = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*N*N);</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> f = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*T*R);</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> f_direct = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*T*R);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> f_tilde = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex)*N*N);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> M=<a class="code" href="group__applications__polarFFT__polar.html#ga307b67b4c00a1c756f140c7fa831cdae" title="Generates the points with weights for the polar grid with angles and offsets.">polar_grid</a>(T,R,x,w); printf(<span class="stringliteral">"M=%d.\n"</span>,M);</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> fp1=fopen(<span class="stringliteral">"input_data_r.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> fp2=fopen(<span class="stringliteral">"input_data_i.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">if</span> (fp1==NULL)</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">for</span>(k=0;k<N*N;k++)</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> {</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> fscanf(fp1,<span class="stringliteral">"%le "</span>,&temp1);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> fscanf(fp2,<span class="stringliteral">"%le "</span>,&temp2);</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> f_hat[k]=temp1+ _Complex_I*temp2;</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> }</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> fclose(fp1);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> fclose(fp2);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <a class="code" href="group__applications__polarFFT__polar.html#gaf6ec0d6bb5bfea4829e551c9dc9a656e" title="discrete polar FFT">polar_dft</a>(f_hat,N,f_direct,T,R,m);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="comment">// polar_fft(f_hat,N,f_direct,T,R,12);</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> printf(<span class="stringliteral">"\nTest of the polar FFT: \n"</span>);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> fp1=fopen(<span class="stringliteral">"polar_fft_error.dat"</span>,<span class="stringliteral">"w+"</span>);</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keywordflow">for</span> (m=1; m<=12; m++)</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> {</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <a class="code" href="group__applications__polarFFT__polar.html#ga72ebda23ef48b6509833eea9a24fa839" title="NFFT-based polar FFT.">polar_fft</a>(f_hat,N,f,T,R,m);</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> E_max=X(error_l_infty_complex)(f_direct,f,M);</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> printf(<span class="stringliteral">"m=%2d: E_max = %e\n"</span>,m,E_max);</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> fprintf(fp1,<span class="stringliteral">"%e\n"</span>,E_max);</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> }</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> fclose(fp1);</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordflow">for</span> (m=3; m<=9; m+=3)</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> {</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> printf(<span class="stringliteral">"\nTest of the inverse polar FFT for m=%d: \n"</span>,m);</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> sprintf(filename,<span class="stringliteral">"polar_ifft_error%d.dat"</span>,m);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> fp1=fopen(filename,<span class="stringliteral">"w+"</span>);</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordflow">for</span> (max_i=0; max_i<=100; max_i+=10)</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> {</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <a class="code" href="group__applications__polarFFT__polar.html#gad996d429207cf198e9027618e081ada0" title="inverse NFFT-based polar FFT">inverse_polar_fft</a>(f_direct,T,R,f_tilde,N,max_i,m);</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="comment">/* E_max=0.0;</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="comment"> for(k=0;k<N*N;k++)</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="comment"> temp = cabs((f_hat[k]-f_tilde[k])/f_hat[k]);</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="comment"> if (temp>E_max) E_max=temp;</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="comment"> }</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> E_max=X(error_l_infty_complex)(f_hat,f_tilde,N*N);</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> printf(<span class="stringliteral">"%3d iterations: E_max = %e\n"</span>,max_i,E_max);</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> fprintf(fp1,<span class="stringliteral">"%e\n"</span>,E_max);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> }</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> fclose(fp1);</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> }</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_direct);</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_tilde);</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> }</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/quadratureS2_8c_source.html b/doc/api/html/quadratureS2_8c_source.html
new file mode 100644
index 0000000..351d306
--- /dev/null
+++ b/doc/api/html/quadratureS2_8c_source.html
@@ -0,0 +1,1160 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - quadratureS2.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_deedd863ca11d55d683e9872da0f56e1.html">quadratureS2</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">quadratureS2.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: quadratureS2.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">/* Include standard C headers. */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <time.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment">/* Include NFFT 3 utilities headers. */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">/* Include NFFT 3 library header. */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="code" href="group__applications__quadratureS2__test.html#ga7c6368b321bd9acd0149b030bb8275ed"> 47</a></span> <span class="keyword">enum</span> <span class="keywordtype">boolean</span> {NO = 0, YES = 1};</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="code" href="group__applications__quadratureS2__test.html#ga47f3fd319121e75dc73cd720c536f3c7"> 50</a></span> <span class="keyword">enum</span> <a class="code" href="group__applications__quadratureS2__test.html#ga47f3fd319121e75dc73cd720c536f3c7" title="Enumeration for test modes.">testtype</a> {ERROR = 0, TIMING = 1};</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="code" href="group__applications__quadratureS2__test.html#ga4cf30b0362e85bc0154ca2c52b2bc17e"> 53</a></span> <span class="keyword">enum</span> <a class="code" href="group__applications__quadratureS2__test.html#ga4cf30b0362e85bc0154ca2c52b2bc17e" title="Enumeration for quadrature grid types.">gridtype</a> {GRID_GAUSS_LEGENDRE = 0, GRID_CLENSHAW_CURTIS = 1,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> GRID_HEALPIX = 2, GRID_EQUIDISTRIBUTION = 3, GRID_EQUIDISTRIBUTION_UNIFORM = 4};</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"><a class="code" href="group__applications__quadratureS2__test.html#gaa7c9498e1664b6773fd8f9d850921e20"> 57</a></span> <span class="keyword">enum</span> <a class="code" href="group__applications__quadratureS2__test.html#gaa7c9498e1664b6773fd8f9d850921e20" title="Enumeration for test functions.">functiontype</a> {FUNCTION_RANDOM_BANDLIMITED = 0, FUNCTION_F1 = 1,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> FUNCTION_F2 = 2, FUNCTION_F3 = 3, FUNCTION_F4 = 4, FUNCTION_F5 = 5,</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> FUNCTION_F6 = 6};</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="group__applications__quadratureS2__test.html#ga811fe196a5d9d37857c2f8adeeaac3c6"> 62</a></span> <span class="keyword">enum</span> <a class="code" href="group__applications__quadratureS2__test.html#ga811fe196a5d9d37857c2f8adeeaac3c6" title="TODO Add comment here.">modes</a> {USE_GRID = 0, RANDOM = 1};</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="group__applications__quadratureS2__test.html#ga3c04138a5bfe5d72780bb7e82a18e627"> 72</a></span> <span class="keywordtype">int</span> main (<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> {</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">int</span> tc; </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">int</span> tc_max; </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">int</span> *NQ; </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">int</span> NQ_max; </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">int</span> *SQ; </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">int</span> SQ_max; </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">int</span> *RQ; </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">int</span> iNQ; </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">int</span> iNQ_max; </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">int</span> testfunction; </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordtype">int</span> N; </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">int</span> use_nfsft; </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">int</span> use_nfft; </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">int</span> use_fpt; </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">int</span> cutoff; </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">double</span> <a class="code" href="structnfsft__wisdom.html#ac367edaa1fae041e5b049cd81b44336b" title="The threshold /f$/f$.">threshold</a>; </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">int</span> <a class="code" href="group__applications__quadratureS2__test.html#ga4cf30b0362e85bc0154ca2c52b2bc17e" title="Enumeration for quadrature grid types.">gridtype</a>; </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">int</span> repetitions; </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordtype">int</span> mode; </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordtype">double</span> *w; </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordtype">double</span> *x_grid; </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">double</span> *x_compare; </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">double</span> _Complex *f_grid; </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">double</span> _Complex *f_compare; </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">double</span> _Complex *f; </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">double</span> _Complex *f_hat_gen; </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">double</span> _Complex *f_hat; </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan_adjoint; </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan; </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <a class="code" href="structnfsft__plan.html">nfsft_plan</a> plan_gen; </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">double</span> t_avg; </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">double</span> err_infty_avg; </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">double</span> err_2_avg; </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordtype">int</span> i; </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordtype">int</span> k; </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">int</span> n; </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordtype">int</span> d; </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordtype">int</span> m_theta; </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">int</span> m_phi; </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">int</span> m_total; </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordtype">double</span> *theta; </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordtype">double</span> *phi; </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> fftw_plan fplan; </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment">//int nside; /**< The size parameter for the HEALPix grid */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordtype">int</span> d2;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordtype">int</span> M;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordtype">double</span> theta_s;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordtype">double</span> x1,x2,x3,temp;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordtype">int</span> m_compare;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan_adjoint_ptr;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <a class="code" href="structnfsft__plan.html">nfsft_plan</a> *plan_ptr;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordtype">double</span> *w_temp;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordtype">int</span> testmode;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> ticks t0, t1;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment">/* Read the number of testcases. */</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> fscanf(stdin,<span class="stringliteral">"testcases=%d\n"</span>,&tc_max);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,tc_max);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment">/* Process each testcase. */</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">for</span> (tc = 0; tc < tc_max; tc++)</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> {</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment">/* Check if the fast transform shall be used. */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> fscanf(stdin,<span class="stringliteral">"nfsft=%d\n"</span>,&use_nfsft);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,use_nfsft);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> {</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="comment">/* Check if the NFFT shall be used. */</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> fscanf(stdin,<span class="stringliteral">"nfft=%d\n"</span>,&use_nfft);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,use_nfsft);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">if</span> (use_nfft != NO)</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> {</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="comment">/* Read the cut-off parameter. */</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> fscanf(stdin,<span class="stringliteral">"cutoff=%d\n"</span>,&cutoff);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,cutoff);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> }</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> {</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment">/* TODO remove this */</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment">/* Initialize unused variable with dummy value. */</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> cutoff = 1;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> }</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="comment">/* Check if the fast polynomial transform shall be used. */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> fscanf(stdin,<span class="stringliteral">"fpt=%d\n"</span>,&use_fpt);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,use_fpt);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">if</span> (use_fpt != NO)</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> {</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment">/* Read the NFSFT threshold parameter. */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> fscanf(stdin,<span class="stringliteral">"threshold=%lf\n"</span>,&threshold);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> fprintf(stdout,<span class="stringliteral">"%lf\n"</span>,threshold);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> }</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> {</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment">/* TODO remove this */</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment">/* Initialize unused variable with dummy value. */</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> threshold = 1000.0;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> }</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> }</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> {</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment">/* TODO remove this */</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment">/* Set dummy values. */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> use_nfft = NO;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> use_fpt = NO;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> cutoff = 3;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> threshold = 1000.0;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> }</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment">/* Read the testmode type. */</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> fscanf(stdin,<span class="stringliteral">"testmode=%d\n"</span>,&testmode);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,testmode);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">if</span> (testmode == ERROR)</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> {</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment">/* Read the quadrature grid type. */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> fscanf(stdin,<span class="stringliteral">"gridtype=%d\n"</span>,&gridtype);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,gridtype);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment">/* Read the test function. */</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> fscanf(stdin,<span class="stringliteral">"testfunction=%d\n"</span>,&testfunction);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,testfunction);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment">/* Check if random bandlimited function has been chosen. */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">if</span> (testfunction == FUNCTION_RANDOM_BANDLIMITED)</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> {</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="comment">/* Read the bandwidht. */</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> fscanf(stdin,<span class="stringliteral">"bandlimit=%d\n"</span>,&N);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,N);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> }</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> {</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> N = 1;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> }</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment">/* Read the number of repetitions. */</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> fscanf(stdin,<span class="stringliteral">"repetitions=%d\n"</span>,&repetitions);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,repetitions);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> fscanf(stdin,<span class="stringliteral">"mode=%d\n"</span>,&mode);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,mode);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> {</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="comment">/* Read the bandwidht. */</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> fscanf(stdin,<span class="stringliteral">"points=%d\n"</span>,&m_compare);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,m_compare);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> x_compare = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*m_compare*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> d = 0;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">while</span> (d < m_compare)</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> {</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> x1 = 2.0*(((double)rand())/RAND_MAX) - 1.0;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> x2 = 2.0*(((double)rand())/RAND_MAX) - 1.0;</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> x3 = 2.0*(((double)rand())/RAND_MAX) - 1.0;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> temp = sqrt(x1*x1+x2*x2+x3*x3);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">if</span> (temp <= 1)</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> {</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> x_compare[2*d+1] = acos(x3);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">if</span> (x_compare[2*d+1] == 0 || x_compare[2*d+1] == <a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> {</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> x_compare[2*d] = 0.0;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> }</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> {</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> x_compare[2*d] = atan2(x2/sin(x_compare[2*d+1]),x1/sin(x_compare[2*d+1]));</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> }</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> x_compare[2*d] *= 1.0/(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> x_compare[2*d+1] *= 1.0/(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> d++;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> }</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> f_compare = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_compare*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> f = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_compare*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> }</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> }</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="comment">/* Initialize maximum cut-off degree and grid size parameter. */</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> NQ_max = 0;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> SQ_max = 0;</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="comment">/* Read the number of cut-off degrees. */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> fscanf(stdin,<span class="stringliteral">"bandwidths=%d\n"</span>,&iNQ_max);</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> fprintf(stdout,<span class="stringliteral">"%d\n"</span>,iNQ_max);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="comment">/* Allocate memory for the cut-off degrees and grid size parameters. */</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> NQ = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(iNQ_max*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> SQ = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(iNQ_max*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">if</span> (testmode == TIMING)</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> {</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> RQ = (<span class="keywordtype">int</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(iNQ_max*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> }</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="comment">/* Read the cut-off degrees and grid size parameters. */</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">for</span> (iNQ = 0; iNQ < iNQ_max; iNQ++)</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> {</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">if</span> (testmode == TIMING)</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> {</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="comment">/* Read cut-off degree and grid size parameter. */</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> fscanf(stdin,<span class="stringliteral">"%d %d %d\n"</span>,&NQ[iNQ],&SQ[iNQ],&RQ[iNQ]);</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> fprintf(stdout,<span class="stringliteral">"%d %d %d\n"</span>,NQ[iNQ],SQ[iNQ],RQ[iNQ]);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> NQ_max = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(NQ_max,NQ[iNQ]);</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> SQ_max = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(SQ_max,SQ[iNQ]);</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> }</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> {</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="comment">/* Read cut-off degree and grid size parameter. */</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> fscanf(stdin,<span class="stringliteral">"%d %d\n"</span>,&NQ[iNQ],&SQ[iNQ]);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> fprintf(stdout,<span class="stringliteral">"%d %d\n"</span>,NQ[iNQ],SQ[iNQ]);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> NQ_max = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(NQ_max,NQ[iNQ]);</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> SQ_max = <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(SQ_max,SQ[iNQ]);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> }</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> }</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="comment">/* Do precomputation. */</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="comment">//fprintf(stderr,"NFSFT Precomputation\n");</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> nfsft_precompute(NQ_max, threshold,</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> ((use_nfsft==NO)?(NFSFT_NO_FAST_ALGORITHM):(0U)), 0U);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">if</span> (testmode == TIMING)</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> {</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment">/* Allocate data structures. */</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> f_hat = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(NFSFT_F_HAT_SIZE(NQ_max)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> f = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(SQ_max*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> x_grid = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*SQ_max*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordflow">for</span> (d = 0; d < SQ_max; d++)</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> {</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> f[d] = (((double)rand())/RAND_MAX)-0.5 + _Complex_I*((((double)rand())/RAND_MAX)-0.5);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> x_grid[2*d] = (((double)rand())/RAND_MAX) - 0.5;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> x_grid[2*d+1] = (((double)rand())/RAND_MAX) * 0.5;</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> }</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> }</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="comment">//fprintf(stderr,"Entering loop\n");</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="comment">/* Process all cut-off bandwidths. */</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">for</span> (iNQ = 0; iNQ < iNQ_max; iNQ++)</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> {</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keywordflow">if</span> (testmode == TIMING)</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> {</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> nfsft_init_guru(&plan,NQ[iNQ],SQ[iNQ], NFSFT_NORMALIZED |</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFTW_MEASURE | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> cutoff);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> plan.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = f_hat;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> plan.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a> = x_grid;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> plan.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = f;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> nfsft_precompute_x(&plan);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> t_avg = 0.0;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keywordflow">for</span> (i = 0; i < RQ[iNQ]; i++)</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> {</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> t0 = getticks();</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> {</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="comment">/* Execute the adjoint NFSFT transformation. */</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> nfsft_adjoint(&plan);</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> }</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> {</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="comment">/* Execute the adjoint direct NDSFT transformation. */</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> nfsft_adjoint_direct(&plan);</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> }</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> t1 = getticks();</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> t_avg += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> }</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> t_avg = t_avg/((double)RQ[iNQ]);</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> nfsft_finalize(&plan);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> fprintf(stdout,<span class="stringliteral">"%+le\n"</span>, t_avg);</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> fprintf(stderr,<span class="stringliteral">"%d: %4d %4d %+le\n"</span>, tc, NQ[iNQ], SQ[iNQ], t_avg);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> }</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> {</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="comment">/* Determine the maximum number of nodes. */</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="keywordflow">switch</span> (gridtype)</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> {</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">case</span> GRID_GAUSS_LEGENDRE:</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="comment">/* Calculate grid dimensions. */</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> m_theta = SQ[iNQ] + 1;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> m_phi = 2*SQ[iNQ] + 2;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> m_total = m_theta*m_phi;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="keywordflow">case</span> GRID_CLENSHAW_CURTIS:</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="comment">/* Calculate grid dimensions. */</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> m_theta = 2*SQ[iNQ] + 1;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> m_phi = 2*SQ[iNQ] + 2;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> m_total = m_theta*m_phi;</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keywordflow">case</span> GRID_HEALPIX:</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> m_theta = 1;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> m_phi = 12*SQ[iNQ]*SQ[iNQ];</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> m_total = m_theta * m_phi;</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment">//fprintf("HEALPix: SQ = %d, m_theta = %d, m_phi= %d, m");</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="keywordflow">case</span> GRID_EQUIDISTRIBUTION:</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keywordflow">case</span> GRID_EQUIDISTRIBUTION_UNIFORM:</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> m_theta = 2;</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="comment">//fprintf(stderr,"ed: m_theta = %d\n",m_theta);</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="keywordflow">for</span> (k = 1; k < SQ[iNQ]; k++)</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> {</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> m_theta += (int)floor((2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/acos((cos(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/(<span class="keywordtype">double</span>)SQ[iNQ])-</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> cos(k*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/(<span class="keywordtype">double</span>)SQ[iNQ])*cos(k*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/(<span class="keywordtype">double</span>)SQ[iNQ]))/</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> (sin(k*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/(<span class="keywordtype">double</span>)SQ[iNQ])*sin(k*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/(<span class="keywordtype">double</span>)SQ[iNQ]))));</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="comment">//fprintf(stderr,"ed: m_theta = %d\n",m_theta);</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> }</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="comment">//fprintf(stderr,"ed: m_theta final = %d\n",m_theta);</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> m_phi = 1;</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> m_total = m_theta * m_phi;</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> }</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="comment">/* Allocate memory for data structures. */</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> w = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_theta*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> x_grid = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="comment">//fprintf(stderr,"NQ = %d\n",NQ[iNQ]);</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="keywordflow">switch</span> (gridtype)</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> {</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="keywordflow">case</span> GRID_GAUSS_LEGENDRE:</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="comment">//fprintf(stderr,"Generating grid for NQ = %d, SQ = %d\n",NQ[iNQ],SQ[iNQ]);</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="comment">/* Read quadrature weights. */</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="keywordflow">for</span> (k = 0; k < m_theta; k++)</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> {</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> fscanf(stdin,<span class="stringliteral">"%le\n"</span>,&w[k]);</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> w[k] *= (2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/((<span class="keywordtype">double</span>)m_phi);</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> }</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="comment">//fprintf(stderr,"Allocating theta and phi\n");</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="comment">/* Allocate memory to store the grid's angles. */</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> theta = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_theta*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> phi = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_phi*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="comment">//if (theta == NULL || phi == NULL)</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="comment">//{</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="comment">//fprintf(stderr,"Couldn't allocate theta and phi\n");</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="comment">//}</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="comment">/* Read angles theta. */</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keywordflow">for</span> (k = 0; k < m_theta; k++)</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> {</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> fscanf(stdin,<span class="stringliteral">"%le\n"</span>,&theta[k]);</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> }</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="comment">/* Generate the grid angles phi. */</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="keywordflow">for</span> (n = 0; n < m_phi; n++)</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> {</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> phi[n] = n/((double)m_phi);</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> phi[n] -= ((phi[n]>=0.5)?(1.0):(0.0));</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> }</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="comment">//fprintf(stderr,"Generating grid nodes\n");</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="comment">/* Generate the grid's nodes. */</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> d = 0;</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keywordflow">for</span> (k = 0; k < m_theta; k++)</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> {</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keywordflow">for</span> (n = 0; n < m_phi; n++)</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> {</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> x_grid[2*d] = phi[n];</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> x_grid[2*d+1] = theta[k];</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> d++;</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> }</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> }</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="comment">//fprintf(stderr,"Freeing theta and phi\n");</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="comment">/* Free the arrays for the grid's angles. */</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(theta);</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(phi);</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keywordflow">case</span> GRID_CLENSHAW_CURTIS:</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="comment">/* Allocate memory to store the grid's angles. */</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> theta = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_theta*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> phi = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_phi*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="comment">/* Generate the grid angles theta. */</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="keywordflow">for</span> (k = 0; k < m_theta; k++)</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> {</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> theta[k] = k/((double)2*(m_theta-1));</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> }</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> </div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="comment">/* Generate the grid angles phi. */</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">for</span> (n = 0; n < m_phi; n++)</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> {</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> phi[n] = n/((double)m_phi);</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> phi[n] -= ((phi[n]>=0.5)?(1.0):(0.0));</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> }</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="comment">/* Generate quadrature weights. */</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> fplan = fftw_plan_r2r_1d(SQ[iNQ]+1, w, w, FFTW_REDFT00, 0U);</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keywordflow">for</span> (k = 0; k < SQ[iNQ]+1; k++)</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> {</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> w[k] = -2.0/(4*k*k-1);</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> }</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> fftw_execute(fplan);</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> w[0] *= 0.5;</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="keywordflow">for</span> (k = 0; k < SQ[iNQ]+1; k++)</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> {</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> w[k] *= (2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/((<span class="keywordtype">double</span>)(m_theta-1)*m_phi);</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> w[m_theta-1-k] = w[k];</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> }</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> fftw_destroy_plan(fplan);</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="comment">/* Generate the grid's nodes. */</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> d = 0;</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="keywordflow">for</span> (k = 0; k < m_theta; k++)</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> {</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="keywordflow">for</span> (n = 0; n < m_phi; n++)</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> {</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> x_grid[2*d] = phi[n];</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> x_grid[2*d+1] = theta[k];</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> d++;</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> }</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> }</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> </div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="comment">/* Free the arrays for the grid's angles. */</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(theta);</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(phi);</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="keywordflow">case</span> GRID_HEALPIX:</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> d = 0;</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="keywordflow">for</span> (k = 1; k <= SQ[iNQ]-1; k++)</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> {</div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keywordflow">for</span> (n = 0; n <= 4*k-1; n++)</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> {</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> x_grid[2*d+1] = 1 - (k*k)/((<span class="keywordtype">double</span>)(3.0*SQ[iNQ]*SQ[iNQ]));</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> x_grid[2*d] = ((n+0.5)/(4*k));</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> x_grid[2*d] -= (x_grid[2*d]>=0.5)?(1.0):(0.0);</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> d++;</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> }</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> }</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> d2 = d-1;</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keywordflow">for</span> (k = SQ[iNQ]; k <= 3*SQ[iNQ]; k++)</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> {</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="keywordflow">for</span> (n = 0; n <= 4*SQ[iNQ]-1; n++)</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> {</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> x_grid[2*d+1] = 2.0/(3*SQ[iNQ])*(2*SQ[iNQ]-k);</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> x_grid[2*d] = (n+((k%2==0)?(0.5):(0.0)))/(4*SQ[iNQ]);</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> x_grid[2*d] -= (x_grid[2*d]>=0.5)?(1.0):(0.0);</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> d++;</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> }</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> }</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">for</span> (k = 1; k <= SQ[iNQ]-1; k++)</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> {</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="keywordflow">for</span> (n = 0; n <= 4*k-1; n++)</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> {</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> x_grid[2*d+1] = -x_grid[2*d2+1];</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> x_grid[2*d] = x_grid[2*d2];</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> d++;</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> d2--;</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> }</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> }</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">for</span> (d = 0; d < m_total; d++)</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> {</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> x_grid[2*d+1] = acos(x_grid[2*d+1])/(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> }</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> w[0] = (4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/(m_total);</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="keywordflow">case</span> GRID_EQUIDISTRIBUTION:</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keywordflow">case</span> GRID_EQUIDISTRIBUTION_UNIFORM:</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="comment">/* TODO Compute the weights. */</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> </div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="keywordflow">if</span> (gridtype == GRID_EQUIDISTRIBUTION)</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> {</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> w_temp = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((SQ[iNQ]+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> fplan = fftw_plan_r2r_1d(SQ[iNQ]/2+1, w_temp, w_temp, FFTW_REDFT00, 0U);</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">for</span> (k = 0; k < SQ[iNQ]/2+1; k++)</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> {</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> w_temp[k] = -2.0/(4*k*k-1);</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> }</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> fftw_execute(fplan);</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> w_temp[0] *= 0.5;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="keywordflow">for</span> (k = 0; k < SQ[iNQ]/2+1; k++)</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> {</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> w_temp[k] *= (2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/((<span class="keywordtype">double</span>)(SQ[iNQ]));</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> w_temp[SQ[iNQ]-k] = w_temp[k];</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> }</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> fftw_destroy_plan(fplan);</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> }</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> d = 0;</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> x_grid[2*d] = -0.5;</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> x_grid[2*d+1] = 0.0;</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="keywordflow">if</span> (gridtype == GRID_EQUIDISTRIBUTION)</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> {</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> w[d] = w_temp[0];</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> }</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> {</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> w[d] = (4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/(m_total);</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> }</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> d = 1;</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> x_grid[2*d] = -0.5;</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> x_grid[2*d+1] = 0.5;</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="keywordflow">if</span> (gridtype == GRID_EQUIDISTRIBUTION)</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> {</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> w[d] = w_temp[SQ[iNQ]];</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> }</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> {</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> w[d] = (4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/(m_total);</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> }</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> d = 2;</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="keywordflow">for</span> (k = 1; k < SQ[iNQ]; k++)</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> {</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> theta_s = (double)k*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/(<span class="keywordtype">double</span>)SQ[iNQ];</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> M = (int)floor((2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/acos((cos(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>/(<span class="keywordtype">double</span>)SQ[iNQ])-</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> cos(theta_s)*cos(theta_s))/(sin(theta_s)*sin(theta_s))));</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="keywordflow">for</span> (n = 0; n < M; n++)</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> {</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> x_grid[2*d] = (n + 0.5)/M;</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> x_grid[2*d] -= (x_grid[2*d]>=0.5)?(1.0):(0.0);</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> x_grid[2*d+1] = theta_s/(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="keywordflow">if</span> (gridtype == GRID_EQUIDISTRIBUTION)</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> {</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> w[d] = w_temp[k]/((double)(M));</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> }</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> {</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> w[d] = (4.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)/(m_total);</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> }</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> d++;</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> }</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> }</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> </div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">if</span> (gridtype == GRID_EQUIDISTRIBUTION)</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> {</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w_temp);</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> }</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> }</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> </div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="comment">/* Allocate memory for grid values. */</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> f_grid = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> </div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> {</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> }</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> {</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> m_compare = m_total;</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> f_compare = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(m_compare*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> x_compare = x_grid;</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> f = f_grid;</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> }</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> </div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="comment">//fprintf(stderr,"Generating test function\n");</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="keywordflow">switch</span> (testfunction)</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> {</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="keywordflow">case</span> FUNCTION_RANDOM_BANDLIMITED:</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> f_hat_gen = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(NFSFT_F_HAT_SIZE(N)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="comment">//fprintf(stderr,"Generating random test function\n");</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="comment">/* Generate random function samples by sampling a bandlimited</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="comment"> * function. */</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> nfsft_init_guru(&plan_gen,N,m_total, NFSFT_NORMALIZED |</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> ((N>512)?(0U):(PRE_PHI_HUT | PRE_PSI)) | FFTW_INIT |</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> FFT_OUT_OF_PLACE, cutoff);</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> </div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> plan_gen.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = f_hat_gen;</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> plan_gen.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a> = x_grid;</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> plan_gen.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = f_grid;</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> </div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> nfsft_precompute_x(&plan_gen);</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="keywordflow">for</span> (k = 0; k < plan_gen.<a class="code" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8" title="Total number of Fourier coefficients.">N_total</a>; k++)</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> {</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> f_hat_gen[k] = 0.0;</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> }</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> </div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="keywordflow">for</span> (k = 0; k <= N; k++)</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> {</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keywordflow">for</span> (n = -k; n <= k; n++)</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> {</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> f_hat_gen[NFSFT_INDEX(k,n,&plan_gen)] =</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> (((double)rand())/RAND_MAX)-0.5 + _Complex_I*((((double)rand())/RAND_MAX)-0.5);</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> }</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> }</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> </div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> {</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="comment">/* Execute the NFSFT transformation. */</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> nfsft_trafo(&plan_gen);</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> }</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> {</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="comment">/* Execute the direct NDSFT transformation. */</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> nfsft_trafo_direct(&plan_gen);</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> }</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> </div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> nfsft_finalize(&plan_gen);</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> </div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> {</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> nfsft_init_guru(&plan_gen,N,m_compare, NFSFT_NORMALIZED |</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> ((N>512)?(0U):(PRE_PHI_HUT | PRE_PSI)) | FFTW_INIT |</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> FFT_OUT_OF_PLACE, cutoff);</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> plan_gen.<a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = f_hat_gen;</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> plan_gen.<a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a> = x_compare;</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> plan_gen.<a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = f_compare;</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> </div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> nfsft_precompute_x(&plan_gen);</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> {</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="comment">/* Execute the NFSFT transformation. */</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> nfsft_trafo(&plan_gen);</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> }</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> {</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="comment">/* Execute the direct NDSFT transformation. */</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> nfsft_trafo_direct(&plan_gen);</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> }</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> nfsft_finalize(&plan_gen);</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> }</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> {</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> memcpy(f_compare,f_grid,m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> }</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> </div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat_gen);</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> </div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> </div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="keywordflow">case</span> FUNCTION_F1:</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="keywordflow">for</span> (d = 0; d < m_total; d++)</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> {</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> x1 = sin(x_grid[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_grid[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> x3 = cos(x_grid[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> f_grid[d] = x1*x2*x3;</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> }</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> {</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="keywordflow">for</span> (d = 0; d < m_compare; d++)</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> {</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> x1 = sin(x_compare[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_compare[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> x3 = cos(x_compare[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> f_compare[d] = x1*x2*x3;</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> }</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> }</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> {</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> memcpy(f_compare,f_grid,m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> }</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> <span class="keywordflow">case</span> FUNCTION_F2:</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="keywordflow">for</span> (d = 0; d < m_total; d++)</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> {</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> x1 = sin(x_grid[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_grid[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> x3 = cos(x_grid[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> f_grid[d] = 0.1*exp(x1+x2+x3);</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> }</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> {</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="keywordflow">for</span> (d = 0; d < m_compare; d++)</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> {</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> x1 = sin(x_compare[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_compare[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> x3 = cos(x_compare[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> f_compare[d] = 0.1*exp(x1+x2+x3);</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> }</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> }</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> {</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> memcpy(f_compare,f_grid,m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> }</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> <span class="keywordflow">case</span> FUNCTION_F3:</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="keywordflow">for</span> (d = 0; d < m_total; d++)</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> {</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> x1 = sin(x_grid[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_grid[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> x3 = cos(x_grid[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> f_grid[d] = 0.1*temp;</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> }</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> {</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> <span class="keywordflow">for</span> (d = 0; d < m_compare; d++)</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> {</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> x1 = sin(x_compare[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_compare[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> x3 = cos(x_compare[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> f_compare[d] = 0.1*temp;</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> }</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> }</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> {</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> memcpy(f_compare,f_grid,m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> }</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> <span class="keywordflow">case</span> FUNCTION_F4:</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> <span class="keywordflow">for</span> (d = 0; d < m_total; d++)</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> {</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> x1 = sin(x_grid[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_grid[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> x3 = cos(x_grid[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> f_grid[d] = 1.0/(temp);</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> }</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> {</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> <span class="keywordflow">for</span> (d = 0; d < m_compare; d++)</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> {</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> x1 = sin(x_compare[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_compare[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> x3 = cos(x_compare[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> f_compare[d] = 1.0/(temp);</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> }</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> }</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> {</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> memcpy(f_compare,f_grid,m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> }</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="keywordflow">case</span> FUNCTION_F5:</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> <span class="keywordflow">for</span> (d = 0; d < m_total; d++)</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> {</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> x1 = sin(x_grid[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_grid[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> x3 = cos(x_grid[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> f_grid[d] = 0.1*sin(1+temp)*sin(1+temp);</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> }</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> {</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="keywordflow">for</span> (d = 0; d < m_compare; d++)</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> {</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> x1 = sin(x_compare[2*d+1]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>)*cos(x_compare[2*d]*2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>);</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> x3 = cos(x_compare[2*d+1]*2.0*PI);</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> f_compare[d] = 0.1*sin(1+temp)*sin(1+temp);</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> }</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> }</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> {</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> memcpy(f_compare,f_grid,m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> }</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> <span class="keywordflow">case</span> FUNCTION_F6:</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> <span class="keywordflow">for</span> (d = 0; d < m_total; d++)</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> {</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="keywordflow">if</span> (x_grid[2*d+1] <= 0.25)</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> {</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> f_grid[d] = 1.0;</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> }</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> {</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> f_grid[d] = 1.0/(sqrt(1+3*cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*x_grid[2*d+1])*cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*x_grid[2*d+1])));</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> }</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> }</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> {</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="keywordflow">for</span> (d = 0; d < m_compare; d++)</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> {</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="keywordflow">if</span> (x_compare[2*d+1] <= 0.25)</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> {</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> f_compare[d] = 1.0;</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> }</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> {</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> f_compare[d] = 1.0/(sqrt(1+3*cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*x_compare[2*d+1])*cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*x_compare[2*d+1])));</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> }</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> }</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> }</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> {</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> memcpy(f_compare,f_grid,m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> }</div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="comment">//fprintf(stderr,"Generating one function\n");</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="keywordflow">for</span> (d = 0; d < m_total; d++)</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> {</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> f_grid[d] = 1.0;</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> }</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> {</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="keywordflow">for</span> (d = 0; d < m_compare; d++)</div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> {</div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> f_compare[d] = 1.0;</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> }</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> }</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> {</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> memcpy(f_compare,f_grid,m_total*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> }</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> }</div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> </div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> <span class="comment">//fprintf(stderr,"Initializing trafo\n");</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> <span class="comment">/* Init transform plan. */</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> nfsft_init_guru(&plan_adjoint,NQ[iNQ],m_total, NFSFT_NORMALIZED |</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> ((NQ[iNQ]>512)?(0U):(PRE_PHI_HUT | PRE_PSI)) | FFTW_INIT |</div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> FFT_OUT_OF_PLACE, cutoff);</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> </div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> plan_adjoint_ptr = &plan_adjoint;</div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> </div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> {</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> nfsft_init_guru(&plan,NQ[iNQ],m_compare, NFSFT_NORMALIZED |</div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> ((use_nfft!=NO)?(0U):(NFSFT_USE_NDFT)) |</div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> ((use_fpt!=NO)?(0U):(NFSFT_USE_DPT)),</div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> ((NQ[iNQ]>512)?(0U):(PRE_PHI_HUT | PRE_PSI)) | FFTW_INIT |</div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> FFT_OUT_OF_PLACE, cutoff);</div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> plan_ptr = &plan;</div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> }</div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> {</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> plan_ptr = &plan_adjoint;</div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> }</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> </div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> f_hat = (<span class="keywordtype">double</span> _Complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(NFSFT_F_HAT_SIZE(NQ[iNQ])*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> </div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> plan_adjoint_ptr-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = f_hat;</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> plan_adjoint_ptr-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a> = x_grid;</div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> plan_adjoint_ptr-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = f_grid;</div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> </div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> plan_ptr-><a class="code" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a> = f_hat;</div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> plan_ptr-><a class="code" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90" title="the nodes for , ">x</a> = x_compare;</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> plan_ptr-><a class="code" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a> = f;</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> </div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> <span class="comment">//fprintf(stderr,"Precomputing for x\n");</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> nfsft_precompute_x(plan_adjoint_ptr);</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> <span class="keywordflow">if</span> (plan_adjoint_ptr != plan_ptr)</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> {</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> nfsft_precompute_x(plan_ptr);</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> }</div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> </div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> <span class="comment">/* Initialize cumulative time variable. */</span></div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> t_avg = 0.0;</div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> err_infty_avg = 0.0;</div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> err_2_avg = 0.0;</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> </div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> <span class="comment">/* Cycle through all runs. */</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="keywordflow">for</span> (i = 0; i < 1<span class="comment">/*repetitions*/</span>; i++)</div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> {</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> <span class="comment">//fprintf(stderr,"Copying original values\n");</span></div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> <span class="comment">/* Copy exact funtion values to working array. */</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> <span class="comment">//memcpy(f,f_grid,m_total*sizeof(double _Complex));</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> </div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="comment">/* Initialize time measurement. */</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> t0 = getticks();</div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> </div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> <span class="comment">//fprintf(stderr,"Multiplying with quadrature weights\n");</span></div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> <span class="comment">/* Multiplication with the quadrature weights. */</span></div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="comment">/*fprintf(stderr,"\n");*/</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> d = 0;</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> <span class="keywordflow">for</span> (k = 0; k < m_theta; k++)</div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> {</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> <span class="keywordflow">for</span> (n = 0; n < m_phi; n++)</div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> {</div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> <span class="comment">/*fprintf(stderr,"f_ref[%d] = %le + I*%le,\t f[%d] = %le + I*%le, \t w[%d] = %le\n",</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> <span class="comment"> d,creal(f_ref[d]),cimag(f_ref[d]),d,creal(f[d]),cimag(f[d]),k,</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="comment"> w[k]);*/</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> f_grid[d] *= w[k];</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> d++;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> }</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> }</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> </div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> t1 = getticks();</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> t_avg += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> </div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> </div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> t0 = getticks();</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="comment">/*fprintf(stderr,"\n");</span></div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="comment"> d = 0;</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="comment"> for (d = 0; d < grid_total; d++)</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> <span class="comment"> fprintf(stderr,"f[%d] = %le + I*%le, theta[%d] = %le, phi[%d] = %le\n",</span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="comment"> d,creal(f[d]),cimag(f[d]),d,x[2*d+1],d,x[2*d]);</span></div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="comment"> }*/</span></div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> </div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="comment">//fprintf(stderr,"Executing adjoint\n");</span></div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="comment">/* Check if the fast NFSFT algorithm shall be tested. */</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> {</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> <span class="comment">/* Execute the adjoint NFSFT transformation. */</span></div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> nfsft_adjoint(plan_adjoint_ptr);</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> }</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> {</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="comment">/* Execute the adjoint direct NDSFT transformation. */</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> nfsft_adjoint_direct(plan_adjoint_ptr);</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> }</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> </div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="comment">/* Multiplication with the Fourier-Legendre coefficients. */</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> <span class="comment">/*for (k = 0; k <= m[im]; k++)</span></div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="comment"> for (n = -k; n <= k; n++)</span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> <span class="comment"> fprintf(stderr,"f_hat[%d,%d] = %le\t + I*%le\n",k,n,</span></div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> <span class="comment"> creal(f_hat[NFSFT_INDEX(k,n,&plan_adjoint)]),</span></div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="comment"> cimag(f_hat[NFSFT_INDEX(k,n,&plan_adjoint)]));</span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="comment"> }</span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <span class="comment"> }*/</span></div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> </div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="comment">//fprintf(stderr,"Executing trafo\n");</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="keywordflow">if</span> (use_nfsft != NO)</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> {</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> <span class="comment">/* Execute the NFSFT transformation. */</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> nfsft_trafo(plan_ptr);</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> }</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> {</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="comment">/* Execute the direct NDSFT transformation. */</span></div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> nfsft_trafo_direct(plan_ptr);</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> }</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> </div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> t1 = getticks();</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> t_avg += nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> </div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> <span class="comment">//fprintf(stderr,"Finalizing\n");</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> <span class="comment">/* Finalize the NFSFT plans */</span></div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> nfsft_finalize(plan_adjoint_ptr);</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> <span class="keywordflow">if</span> (plan_ptr != plan_adjoint_ptr)</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> {</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> nfsft_finalize(plan_ptr);</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> }</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> </div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="comment">/* Free data arrays. */</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x_grid);</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> </div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> err_infty_avg += X(error_l_infty_complex)(f, f_compare, m_compare);</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> err_2_avg += X(error_l_2_complex)(f, f_compare, m_compare);</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> </div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_grid);</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> </div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> {</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> }</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> {</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_compare);</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> }</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> </div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="comment">/*for (d = 0; d < m_total; d++)</span></div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="comment"> fprintf(stderr,"f_ref[%d] = %le + I*%le,\t f[%d] = %le + I*%le\n",</span></div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="comment"> d,creal(f_ref[d]),cimag(f_ref[d]),d,creal(f[d]),cimag(f[d]));</span></div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="comment"> }*/</span></div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> }</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> </div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="comment">//fprintf(stderr,"Calculating the error\n");</span></div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> <span class="comment">//fflush(stderr);</span></div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> <span class="comment">/* Calculate average time needed. */</span></div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> t_avg = t_avg/((double)repetitions);</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> </div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <span class="comment">/* Calculate the average error. */</span></div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> err_infty_avg = err_infty_avg/((double)repetitions);</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> </div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <span class="comment">/* Calculate the average error. */</span></div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> err_2_avg = err_2_avg/((double)repetitions);</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> </div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> <span class="comment">/* Print out the error measurements. */</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> fprintf(stdout,<span class="stringliteral">"%+le %+le %+le\n"</span>, t_avg, err_infty_avg, err_2_avg);</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> fprintf(stderr,<span class="stringliteral">"%d: %4d %4d %+le %+le %+le\n"</span>, tc, NQ[iNQ], SQ[iNQ],</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> t_avg, err_infty_avg, err_2_avg);</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> }</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> } <span class="comment">/* for (im = 0; im < im_max; im++) - Process all cut-off</span></div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> <span class="comment"> * bandwidths.*/</span></div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> fprintf(stderr,<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> </div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="comment">/* Delete precomputed data. */</span></div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> nfsft_forget();</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> </div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> <span class="comment">/* Free memory for cut-off bandwidths and grid size parameters. */</span></div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(NQ);</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(SQ);</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <span class="keywordflow">if</span> (testmode == TIMING)</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> {</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(RQ);</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> }</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> </div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="keywordflow">if</span> (mode == RANDOM)</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> {</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x_compare);</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_compare);</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> }</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> </div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="keywordflow">if</span> (testmode == TIMING)</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> {</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> <span class="comment">/* Allocate data structures. */</span></div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f_hat);</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x_grid);</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> }</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> </div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> } <span class="comment">/* for (tc = 0; tc < tc_max; tc++) - Process each testcase. */</span></div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> </div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> <span class="comment">/* Return exit code for successful run. */</span></div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> }</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/radon_8c.html b/doc/api/html/radon_8c.html
new file mode 100644
index 0000000..78be6b7
--- /dev/null
+++ b/doc/api/html/radon_8c.html
@@ -0,0 +1,98 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - radon.c File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_0c7f2452bc84fa0fc4195fb15953ec53.html">radon</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">radon.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>NFFT-based discrete Radon transform.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+</div>
+<p><a href="radon_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a0091bbc07c9570a2ab0dac372c2104f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0091bbc07c9570a2ab0dac372c2104f1"></a>
+#define </td><td class="memItemRight" valign="bottom"><a class="el" href="radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1">KERNEL</a>(r) (1.0-fabs((double)(r))/((double)R/2))</td></tr>
+<tr class="memdesc:a0091bbc07c9570a2ab0dac372c2104f1"><td class="mdescLeft"> </td><td class="mdescRight">define weights of kernel function for discrete Radon transform <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a307b67b4c00a1c756f140c7fa831cdae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a307b67b4c00a1c756f140c7fa831cdae"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae">polar_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:a307b67b4c00a1c756f140c7fa831cdae"><td class="mdescLeft"> </td><td class="mdescRight">generates the points x with weights w for the polar grid with T angles and R offsets <br/></td></tr>
+<tr class="memitem:a9a5ff165ab1e23af77ab6f6108bb6310"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a5ff165ab1e23af77ab6f6108bb6310"></a>
+static int </td><td class="memItemRight" valign="bottom"><a class="el" href="radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310">linogram_grid</a> (int T, int R, double *x, double *w)</td></tr>
+<tr class="memdesc:a9a5ff165ab1e23af77ab6f6108bb6310"><td class="mdescLeft"> </td><td class="mdescRight">generates the points x with weights w for the linogram grid with T slopes and R offsets <br/></td></tr>
+<tr class="memitem:a01ba457f6edb3193453204cc702ac5ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01ba457f6edb3193453204cc702ac5ca"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="radon_8c.html#a01ba457f6edb3193453204cc702ac5ca">Radon_trafo</a> (int(*gridfcn)(), int T, int R, double *f, int NN, double *Rf)</td></tr>
+<tr class="memdesc:a01ba457f6edb3193453204cc702ac5ca"><td class="mdescLeft"> </td><td class="mdescRight">computes the NFFT-based discrete Radon transform of f on the grid given by gridfcn() with T angles and R offsets <br/></td></tr>
+<tr class="memitem:a3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="radon_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="memdesc:a3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">simple test program for the discrete Radon transform <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>NFFT-based discrete Radon transform. </p>
+<p>Computes the discrete Radon transform </p>
+<p class="formulaDsp">
+<img class="formulaDsp" alt="\[ R_{\theta_t} f\left(\frac{s}{R}\right) = \sum_{r \in I_R} w_r \; \sum_{k \in I_N^2} f_{k} \mathrm{e}^{-2\pi\mathrm{I} k \; (\frac{r}{R}\theta_t)} \, \mathrm{e}^{2\pi\mathrm{i} r s / R} \qquad(t \in I_T, s \in I_R). \]" src="form_134.png"/>
+</p>
+<p> by taking the 2D-NFFT of <img class="formulaInl" alt="$f_k$" src="form_137.png"/> ( <img class="formulaInl" alt="$k \in I_N^2$" src="form_138.png"/>) at the points <img class="formulaInl" alt="$\frac{r}{R}\theta_t$" src="form_135.png"/> of the polar or linogram grid followed by 1D-iFFTs for every direction <img class="formulaInl" alt="$t \in T$" src="form_139.png"/>, where <img class="formulaInl" alt="$w_r$" src="form_136.png"/> are the weights of the Dirichlet- or Fejer-kernel. </p>
+<dl class="section author"><dt>Author:</dt><dd>Markus Fenn </dd></dl>
+<dl class="section date"><dt>Date:</dt><dd>2005 </dd></dl>
+
+<p>Definition in file <a class="el" href="radon_8c_source.html">radon.c</a>.</p>
+</div></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/radon_8c_source.html b/doc/api/html/radon_8c_source.html
new file mode 100644
index 0000000..6502a10
--- /dev/null
+++ b/doc/api/html/radon_8c_source.html
@@ -0,0 +1,266 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - radon.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_0c7f2452bc84fa0fc4195fb15953ec53.html">radon</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">radon.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="radon_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: radon.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment">/*#define KERNEL(r) 1.0 */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1"> 55</a></span> <span class="preprocessor">#define KERNEL(r) (1.0-fabs((double)(r))/((double)R/2))</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"><a class="code" href="radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae"> 60</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae" title="generates the points x with weights w for the polar grid with T angles and R offsets">polar_grid</a>(<span class="keywordtype">int</span> T, <span class="keywordtype">int</span> R, <span c [...]
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> {</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">int</span> t, r;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">double</span> W=(double)T*(((<span class="keywordtype">double</span>)R/2.0)*((double)R/2.0)+1.0/4.0);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">for</span>(t=-T/2; t<T/2; t++)</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> {</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">for</span>(r=-R/2; r<R/2; r++)</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> {</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> x[2*((t+T/2)*R+(r+R/2))+0] = (<span class="keywordtype">double</span>)r/R*cos(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*t/T);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)r/R*sin(<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*t/T);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">if</span> (r==0)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> w[(t+T/2)*R+(r+R/2)] = fabs((<span class="keywordtype">double</span>)r)/W;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> }</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="code" href="radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310"> 84</a></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310" title="generates the points x with weights w for the linogram grid with T slopes and R offsets">linogram_grid</a>(<span class="keywordtype">int</span> T, <span class="keywordtype">int</span> R, < [...]
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> {</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">int</span> t, r;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">double</span> W=(double)T*(((<span class="keywordtype">double</span>)R/2.0)*((double)R/2.0)+1.0/4.0);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">for</span>(t=-T/2; t<T/2; t++)</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> {</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">for</span>(r=-R/2; r<R/2; r++)</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> {</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">if</span>(t<0)</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> x[2*((t+T/2)*R+(r+R/2))+0] = (<span class="keywordtype">double</span>)r/R;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)4*(t+T/4)/T*r/R;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> x[2*((t+T/2)*R+(r+R/2))+0] = -(<span class="keywordtype">double</span>)4*(t-T/4)/T*r/R;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> x[2*((t+T/2)*R+(r+R/2))+1] = (<span class="keywordtype">double</span>)r/R;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">if</span> (r==0)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> w[(t+T/2)*R+(r+R/2)] = fabs((<span class="keywordtype">double</span>)r)/W;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> }</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"><a class="code" href="radon_8c.html#a01ba457f6edb3193453204cc702ac5ca"> 116</a></span> <span class="keywordtype">int</span> <a class="code" href="radon_8c.html#a01ba457f6edb3193453204cc702ac5ca" title="computes the NFFT-based discrete Radon transform of f on the grid given by gridfcn() with T angles an...">Radon_trafo</a>(<span class="keywordtype">int</span> (*gridfcn)(), <span class="keywordtype">int</span> T, <span class [...]
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> {</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">int</span> j,k; </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_nfft_plan; </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> fftw_complex *<a class="code" href="group__applications__mri3d__construct__data__1d2d.html#gafa82bf5df93804a1760082b88492b8d5" title="fft makes an 1D-ftt for every knot through all layers">fft</a>; </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> fftw_plan my_fftw_plan; </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keywordtype">int</span> t,r; </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordtype">double</span> *x, *w; </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">int</span> N[2],n[2];</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">int</span> M=T*R;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> N[0]=NN; n[0]=2*N[0];</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> N[1]=NN; n[1]=2*N[1];</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> fft = (fftw_complex *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(R*<span class="keyword">sizeof</span>(fftw_complex));</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> my_fftw_plan = fftw_plan_dft_1d(R,fft,fft,FFTW_BACKWARD,FFTW_MEASURE);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> x = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(2*T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span> (x==NULL)</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> w = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">if</span> (w==NULL)</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> nfft_init_guru(&my_nfft_plan, 2, N, M, n, 4,</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> gridfcn(T,R,x,w);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">for</span>(j=0;j<my_nfft_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> {</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0] = x[2*j+0];</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1] = x[2*j+1];</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> }</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> nfft_precompute_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">if</span>(my_nfft_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> nfft_precompute_full_psi(&my_nfft_plan);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">for</span>(k=0;k<my_nfft_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> my_nfft_plan.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[k] = f[k] + _Complex_I*0.0;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&my_nfft_plan);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">for</span>(t=0; t<T; t++)</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> {</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> fft[0]=0.0;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">for</span>(r=-R/2+1; r<R/2; r++)</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> fft[r+R/2] = <a class="code" href="radon_8c.html#a0091bbc07c9570a2ab0dac372c2104f1" title="define weights of kernel function for discrete Radon transform">KERNEL</a>(r)*my_nfft_plan.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>[t*R+(r+R/2)];</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(fft, 1, &R);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> fftw_execute(my_fftw_plan);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(fft, 1, &R);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">for</span>(r=0; r<R; r++)</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> Rf[t*R+r] = creal(fft[r])/R;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment">/* for(r=0; r<R/2; r++)</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment"> Rf[t*R+(r+R/2)] = creal(cexp(-I*PI*r)*fft[r]);</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="comment"> for(r=0; r<R/2; r++)</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment"> Rf[t*R+r] = creal(cexp(-I*PI*r)*fft[r+R/2]);</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> }</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> fftw_destroy_plan(my_fftw_plan);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(fft);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> nfft_finalize(&my_nfft_plan);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"><a class="code" href="radon_8c.html#a3c04138a5bfe5d72780bb7e82a18e627"> 207</a></span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> {</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> int (*gridfcn)(); </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordtype">int</span> T, R; </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> FILE *fp;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordtype">int</span> N; </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordtype">double</span> *f, *Rf;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">if</span>( argc!=5 )</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> {</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> printf(<span class="stringliteral">"radon gridfcn N T R\n"</span>);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> printf(<span class="stringliteral">"gridfcn \"polar\" or \"linogram\" \n"</span>);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> printf(<span class="stringliteral">"N image size NxN \n"</span>);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> printf(<span class="stringliteral">"T number of slopes \n"</span>);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> printf(<span class="stringliteral">"R number of offsets \n"</span>);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> exit(-1);</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> }</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">if</span> (strcmp(argv[1],<span class="stringliteral">"polar"</span>) == 0)</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> gridfcn = <a class="code" href="radon_8c.html#a307b67b4c00a1c756f140c7fa831cdae" title="generates the points x with weights w for the polar grid with T angles and R offsets">polar_grid</a>;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> gridfcn = <a class="code" href="radon_8c.html#a9a5ff165ab1e23af77ab6f6108bb6310" title="generates the points x with weights w for the linogram grid with T slopes and R offsets">linogram_grid</a>;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> N = atoi(argv[2]);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> T = atoi(argv[3]);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> R = atoi(argv[4]);</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="comment">/*printf("N=%d, %s grid with T=%d, R=%d. \n",N,argv[1],T,R);*/</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> f = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(N*N*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> Rf = (<span class="keywordtype">double</span> *)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(T*R*(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)));</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> fp=fopen(<span class="stringliteral">"input_data.bin"</span>,<span class="stringliteral">"rb"</span>);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">if</span> (fp==NULL)</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> fread(f,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),N*N,fp);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> fclose(fp);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <a class="code" href="radon_8c.html#a01ba457f6edb3193453204cc702ac5ca" title="computes the NFFT-based discrete Radon transform of f on the grid given by gridfcn() with T angles an...">Radon_trafo</a>(gridfcn,T,R,f,N,Rf);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> fp=fopen(<span class="stringliteral">"sinogram_data.bin"</span>,<span class="stringliteral">"wb+"</span>);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">if</span> (fp==NULL)</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">return</span>(-1);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> fwrite(Rf,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>),T*R,fp);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> fclose(fp);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(f);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(Rf);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="keywordflow">return</span> EXIT_SUCCESS;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/reconstruct__data__2d1d_8c_source.html b/doc/api/html/reconstruct__data__2d1d_8c_source.html
new file mode 100644
index 0000000..9e89e08
--- /dev/null
+++ b/doc/api/html/reconstruct__data__2d1d_8c_source.html
@@ -0,0 +1,255 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - reconstruct_data_2d1d.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_fb8678d426210fc305fe5dfd30a163a5.html">mri3d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">reconstruct_data_2d1d.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: reconstruct_data_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="group__applications__mri3d__reconstruct__data__1d2d.html#gad67335b03b6fec43e0dff3512c8f6d68"> 40</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri3d__reconstruct__data__1d2d.html#gad67335b03b6fec43e0dff3512c8f6d68" title="reconstruct makes an inverse 2d-nfft for every slice">reconstruct</a>(<span class="keywordtype">cha [...]
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">int</span> j,k,l,z; <span class="comment">/* some variables */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">double</span> real,imag; <span class="comment">/* to read the real and imag part of a complex number */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_plan; <span class="comment">/* plan for the two dimensional nfft */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_iplan; <span class="comment">/* plan for the two dimensional infft */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> FILE* fin; <span class="comment">/* input file */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">int</span> my_N[2],my_n[2]; <span class="comment">/* to init the nfft */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">double</span> tmp, epsilon=0.0000003;<span class="comment">/* tmp to read the obsolent z from the input file</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment"> epsilon is the break criterium for</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment"> the iteration */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">unsigned</span> infft_flags = CGNR | PRECOMPUTE_DAMP; <span class="comment">/* flags for the infft */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment">/* initialise my_plan */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> my_N[0]=N;my_n[0]=ceil(N*1.2);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> my_N[1]=N; my_n[1]=ceil(N*1.2);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> nfft_init_guru(&my_plan, 2, my_N, M/Z, my_n, 6, PRE_PHI_HUT| PRE_PSI|</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> MALLOC_X| MALLOC_F_HAT| MALLOC_F|</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment">/* precompute lin psi if set */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">/* set the flags for the infft*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">if</span> (weight)</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> infft_flags = infft_flags | PRECOMPUTE_WEIGHT;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment">/* initialise my_iplan, advanced */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> solver_init_advanced_complex(&my_iplan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_plan), infft_flags );</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">/* get the weights */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> fin=fopen(<span class="stringliteral">"weights.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> {</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> fscanf(fin,<span class="stringliteral">"%le "</span>,&my_iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> fclose(fin);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment">/* get the damping factors */</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> {</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">for</span>(j=0;j<N;j++){</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">for</span>(k=0;k<N;k++) {</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">int</span> j2= j-N/2;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordtype">int</span> k2= k-N/2;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">double</span> r=sqrt(j2*j2+k2*k2);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">if</span>(r>(<span class="keywordtype">double</span>) N/2)</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=0.0;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=1.0;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> }</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment">/* open the input file */</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> fin=fopen(filename,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment">/* For every Layer*/</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">for</span>(z=0;z<Z;z++) {</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment">/* read x,y,freal and fimag from the knots */</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> {</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> fscanf(fin,<span class="stringliteral">"%le %le %le %le %le "</span>,&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0],&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1], &t [...]
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> &real,&imag);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j] = real + _Complex_I*imag;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment">/* precompute psi if set just one time because the knots equal each plane */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span>(z==0 && my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> nfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="comment">/* precompute full psi if set just one time because the knots equal each plane */</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">if</span>(z==0 && my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> nfft_precompute_full_psi(&my_plan);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]=0.0;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> solver_before_loop_complex(&my_iplan);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">for</span>(l=0;l<iteration;l++)</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> {</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment">/* break if dot_r_iter is smaller than epsilon*/</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a><epsilon)</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> fprintf(stderr,<span class="stringliteral">"%e, %i of %i\n"</span>,sqrt(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>),</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> iteration*z+l+1,iteration*Z);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++) {</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment">/* write every slice in the memory.</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment"> here we make an fftshift direct */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> mem[(Z*N*N/2+z*N*N+ k)%(Z*N*N)] = my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k];</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> fclose(fin);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment">/* finalize the infft */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment">/* finalize the nfft */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> nfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno"><a class="code" href="group__applications__mri3d__reconstruct__data__1d2d.html#gaa30709aaef018deecdd911083fadb877"> 156</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri3d__reconstruct__data__1d2d.html#gaa30709aaef018deecdd911083fadb877" title="print writes the memory back in a file output_real.dat for the real part and output_imag.dat for th [...]
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> {</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> FILE* fout_real;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> FILE* fout_imag;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> fout_real=fopen(<span class="stringliteral">"output_real.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> fout_imag=fopen(<span class="stringliteral">"output_imag.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">for</span>(i=0;i<Z;i++) {</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">for</span> (j=0;j<N*N;j++) {</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> fprintf(fout_real,<span class="stringliteral">"%le "</span>,creal(mem[(Z*N*N/2+i*N*N+ j)%(Z*N*N)]) /Z);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> fprintf(fout_imag,<span class="stringliteral">"%le "</span>,cimag(mem[(Z*N*N/2+i*N*N+ j)%(Z*N*N)]) /Z);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> fprintf(fout_real,<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> fprintf(fout_imag,<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> }</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> fclose(fout_real);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> fclose(fout_imag);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> }</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> {</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> fftw_complex *mem;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> fftw_plan plan;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordtype">int</span> N,M,Z;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">if</span> (argc <= 6) {</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> printf(<span class="stringliteral">"usage: ./reconstruct FILENAME N M Z ITER WEIGHTS\n"</span>);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> N=atoi(argv[2]);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> M=atoi(argv[3]);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> Z=atoi(argv[4]);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment">/* Allocate memory to hold every layer in memory after the</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment"> 2D-infft */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> mem = (fftw_complex*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(<span class="keyword">sizeof</span>(fftw_complex) * atoi(argv[2]) * atoi(argv[2]) * atoi(argv[4]));</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment">/* Create plan for the 1d-ifft */</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> plan = fftw_plan_many_dft(1, &Z, N*N,</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> mem, NULL,</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> N*N, 1,</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> mem, NULL,</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> N*N,1 ,</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> FFTW_BACKWARD, FFTW_MEASURE);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment">/* execute the 2d-infft's */</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <a class="code" href="group__applications__mri3d__reconstruct__data__1d2d.html#gad67335b03b6fec43e0dff3512c8f6d68" title="reconstruct makes an inverse 2d-nfft for every slice">reconstruct</a>(argv[1],N,M,Z,atoi(argv[5]),atoi(argv[6]),mem);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="comment">/* execute the 1d-fft's */</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> fftw_execute(plan);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment">/* write the memory back in files */</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <a class="code" href="group__applications__mri3d__reconstruct__data__1d2d.html#gaa30709aaef018deecdd911083fadb877" title="print writes the memory back in a file output_real.dat for the real part and output_imag.dat for the imaginary part">print</a>(N,M,Z, mem);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(mem);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> fftw_destroy_plan(plan);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/reconstruct__data__2d_8c_source.html b/doc/api/html/reconstruct__data__2d_8c_source.html
new file mode 100644
index 0000000..17f106b
--- /dev/null
+++ b/doc/api/html/reconstruct__data__2d_8c_source.html
@@ -0,0 +1,216 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - reconstruct_data_2d.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">reconstruct_data_2d.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: reconstruct_data_2d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="code" href="group__applications__mri2d__reconstruct__data__2d.html#ga75582a0ebe96f1391e90db0053ee981c"> 41</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__reconstruct__data__2d.html#ga75582a0ebe96f1391e90db0053ee981c" title="reconstruct makes an inverse 2d nfft">reconstruct</a>(<span class="keywordtype">char</span>* filename,< [...]
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">int</span> j,k,l; <span class="comment">/* some variables */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> ticks t0, t1;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">double</span> real,imag,t; <span class="comment">/* to read the real and imag part of a complex number */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_plan; <span class="comment">/* plan for the two dimensional nfft */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_iplan; <span class="comment">/* plan for the two dimensional infft */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> FILE* fin; <span class="comment">/* input file */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> FILE* fout_real; <span class="comment">/* output file */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> FILE* fout_imag; <span class="comment">/* output file */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">int</span> my_N[2],my_n[2]; <span class="comment">/* to init the nfft */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">double</span> epsilon=0.0000003; <span class="comment">/* epsilon is a the break criterium for</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment"> the iteration */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">unsigned</span> infft_flags = CGNR | PRECOMPUTE_DAMP; <span class="comment">/* flags for the infft*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">int</span> m = 6;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">double</span> <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a> = 2.0;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment">/* initialise my_plan */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> my_N[0]=N; my_n[0]=ceil(N*alpha);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> my_N[1]=N; my_n[1]=ceil(N*alpha);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> nfft_init_guru(&my_plan, 2, my_N, M, my_n, m, PRE_PHI_HUT| PRE_PSI|</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> MALLOC_X| MALLOC_F_HAT| MALLOC_F|</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">/* precompute lin psi if set */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment">/* set the flags for the infft*/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">if</span> (weight)</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> infft_flags = infft_flags | PRECOMPUTE_WEIGHT;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">/* initialise my_iplan, advanced */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> solver_init_advanced_complex(&my_iplan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)&my_plan, infft_flags );</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">/* get the weights */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> fin=fopen(<span class="stringliteral">"weights.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> fscanf(fin,<span class="stringliteral">"%le "</span>,&my_iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> fclose(fin);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment">/* get the damping factors */</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">for</span>(j=0;j<N;j++){</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">for</span>(k=0;k<N;k++) {</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">int</span> j2= j-N/2;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">int</span> k2= k-N/2;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">double</span> r=sqrt(j2*j2+k2*k2);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">if</span>(r>(<span class="keywordtype">double</span>) N/2)</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=0.0;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=1.0;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment">/* open the input file */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> fin=fopen(filename,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment">/* read x,y,freal and fimag from the knots */</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> {</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> fscanf(fin,<span class="stringliteral">"%le %le %le %le "</span>,&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0],&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1],</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> &real,&imag);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j] = real + _Complex_I*imag;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> fclose(fin);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment">/* precompute psi */</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> nfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment">/* precompute full psi */</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> nfft_precompute_full_psi(&my_plan);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]=0.0;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> t0 = getticks();</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> solver_before_loop_complex(&my_iplan);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">for</span>(l=0;l<iteration;l++)</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> {</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment">/* break if dot_r_iter is smaller than epsilon*/</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a><epsilon)</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> fprintf(stderr,<span class="stringliteral">"%e, %i of %i\n"</span>,sqrt(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>),</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> l+1,iteration);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> t1 = getticks();</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> t=nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> fout_real=fopen(<span class="stringliteral">"output_real.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> fout_imag=fopen(<span class="stringliteral">"output_imag.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++) {</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> fprintf(fout_real,<span class="stringliteral">"%le "</span>, creal(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]));</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> fprintf(fout_imag,<span class="stringliteral">"%le "</span>, cimag(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]));</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> }</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> fclose(fout_real);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> fclose(fout_imag);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment">/* finalize the infft */</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment">/* finalize the nfft */</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> nfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> }</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> {</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">if</span> (argc <= 5) {</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> printf(<span class="stringliteral">"usage: ./reconstruct_data_2d FILENAME N M ITER WEIGHTS\n"</span>);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <a class="code" href="group__applications__mri2d__reconstruct__data__2d.html#ga75582a0ebe96f1391e90db0053ee981c" title="reconstruct makes an inverse 2d nfft">reconstruct</a>(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/reconstruct__data__3d_8c_source.html b/doc/api/html/reconstruct__data__3d_8c_source.html
new file mode 100644
index 0000000..ad34c42
--- /dev/null
+++ b/doc/api/html/reconstruct__data__3d_8c_source.html
@@ -0,0 +1,214 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - reconstruct_data_3d.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_fb8678d426210fc305fe5dfd30a163a5.html">mri3d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">reconstruct_data_3d.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: reconstruct_data_3d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="code" href="group__applications__mri3d__reconstruct__data__3d.html#ga6a872b7d27169c9b01e09dcf45b9737d"> 40</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri3d__reconstruct__data__3d.html#ga6a872b7d27169c9b01e09dcf45b9737d" title="reconstruct makes an inverse 3d-nfft">reconstruct</a>(<span class="keywordtype">char</span>* filename,< [...]
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">int</span> j,k,z,l; <span class="comment">/* some variables */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">double</span> real,imag; <span class="comment">/* to read the real and imag part of a complex number */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> my_plan; <span class="comment">/* plan for the two dimensional nfft */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_iplan; <span class="comment">/* plan for the two dimensional infft */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> FILE* fin; <span class="comment">/* input file */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> FILE* fout_real; <span class="comment">/* output file (real part) */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> FILE* fout_imag; <span class="comment">/* output file (imag part) */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">int</span> my_N[3],my_n[3]; <span class="comment">/* to init the nfft */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">double</span> epsilon=0.0000003; <span class="comment">/* tmp to read the obsolent z from 700.acs</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment"> epsilon is a the break criterion for</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment"> the iteration */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">unsigned</span> infft_flags = CGNR | PRECOMPUTE_DAMP; <span class="comment">/* flags for the infft */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment">/* initialise my_plan, specific.</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment"> we don't precompute psi */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> my_N[0]=Z; my_n[0]=ceil(Z*1.2);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> my_N[1]=N; my_n[1]=ceil(N*1.2);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> my_N[2]=N; my_n[2]=ceil(N*1.2);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> nfft_init_guru(&my_plan, 3, my_N, M, my_n, 6,</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">/* precompute lin psi */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">if</span> (weight)</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> infft_flags = infft_flags | PRECOMPUTE_WEIGHT;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">/* initialise my_iplan, advanced */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> solver_init_advanced_complex(&my_iplan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_plan), infft_flags );</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment">/* get the weights */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> {</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> fin=fopen(<span class="stringliteral">"weights.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">for</span>(j=0;j<M;j++)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> {</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> fscanf(fin,<span class="stringliteral">"%le "</span>,&my_iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> fclose(fin);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> }</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment">/* get the damping factors */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> {</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">for</span>(j=0;j<N;j++){</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">for</span>(k=0;k<N;k++) {</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">for</span>(z=0;z<N;z++) {</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">int</span> j2= j-N/2;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">int</span> k2= k-N/2;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">int</span> z2= z-N/2;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">double</span> r=sqrt(j2*j2+k2*k2+z2*z2);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">if</span>(r>(<span class="keywordtype">double</span>) N/2)</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[z*N*N+j*N+k]=0.0;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[z*N*N+j*N+k]=1.0;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment">/* open the input file */</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> fin=fopen(filename,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment">/* open the output files */</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> fout_real=fopen(<span class="stringliteral">"output_real.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> fout_imag=fopen(<span class="stringliteral">"output_imag.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">/* read x,y,freal and fimag from the knots */</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">for</span>(j=0;j<M;j++)</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> fscanf(fin,<span class="stringliteral">"%le %le %le %le %le "</span>,&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1],&my_plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2], &my_ [...]
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> &real,&imag);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j] = real + _Complex_I*imag;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment">/* precompute psi */</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI)</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> nfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment">/* precompute full psi */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> nfft_precompute_full_psi(&my_plan);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]=0.0;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> solver_before_loop_complex(&my_iplan);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">for</span>(l=0;l<iteration;l++)</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> {</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment">/* break if dot_r_iter is smaller than epsilon*/</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a><epsilon)</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> fprintf(stderr,<span class="stringliteral">"%e, %i of %i\n"</span>,sqrt(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>),</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> l+1,iteration);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">for</span>(l=0;l<Z;l++)</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> {</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">for</span>(k=0;k<N*N;k++)</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> {</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment">/* write every Layer in the files */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> fprintf(fout_real,<span class="stringliteral">"%le "</span>,creal(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[ k+N*N*l ]));</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> fprintf(fout_imag,<span class="stringliteral">"%le "</span>,cimag(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[ k+N*N*l ]));</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> fprintf(fout_real,<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> fprintf(fout_imag,<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> fclose(fout_real);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> fclose(fout_imag);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> nfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> }</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> {</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">if</span> (argc <= 6) {</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> printf(<span class="stringliteral">"usage: ./reconstruct3D FILENAME N M Z ITER WEIGHTS\n"</span>);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <a class="code" href="group__applications__mri3d__reconstruct__data__3d.html#ga6a872b7d27169c9b01e09dcf45b9737d" title="reconstruct makes an inverse 3d-nfft">reconstruct</a>(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]),atoi(argv[6]));</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> }</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/reconstruct__data__inh__2d1d_8c_source.html b/doc/api/html/reconstruct__data__inh__2d1d_8c_source.html
new file mode 100644
index 0000000..82359d6
--- /dev/null
+++ b/doc/api/html/reconstruct__data__inh__2d1d_8c_source.html
@@ -0,0 +1,272 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - reconstruct_data_inh_2d1d.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">reconstruct_data_inh_2d1d.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: reconstruct_data_inh_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <limits.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__reconstruct__data__2d.html#ga75582a0ebe96f1391e90db0053ee981c" title="reconstruct makes an inverse 2d nfft">reconstruct</a>(<span class="keywordtype">char</span>* filename,<span class="keywordtype">int</span> N,<span class="keywordtype">int</span> M,<span class="keywordtype">int</span> ite [...]
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">int</span> j,k,l;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">double</span> time,min_time,max_time,min_inh,max_inh;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> ticks t0, t1;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">double</span> t,real,imag;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">double</span> w,epsilon=0.0000003; <span class="comment">/* epsilon is a the break criterium for</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment"> the iteration */</span>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <a class="code" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> my_plan;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_iplan;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> FILE* fp,*fw,*fout_real,*fout_imag,*finh,*ftime;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">int</span> my_N[3],my_n[3];</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">int</span> flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">unsigned</span> infft_flags = CGNR | PRECOMPUTE_DAMP;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">double</span> Ts;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">double</span> W,T;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">int</span> N3;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">int</span> m=2;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">double</span> sigma = 1.25;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> min_time=INT_MAX; max_time=INT_MIN;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">for</span>(j=0;j<M;j++)</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> {</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> fscanf(ftime,<span class="stringliteral">"%le "</span>,&time);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">if</span>(time<min_time)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> min_time = time;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">if</span>(time>max_time)</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> max_time = time;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> }</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> fclose(ftime);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> Ts=(min_time+max_time)/2.0;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> min_inh=INT_MAX; max_inh=INT_MIN;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> fscanf(finh,<span class="stringliteral">"%le "</span>,&w);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span>(w<min_inh)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> min_inh = w;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span>(w>max_inh)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> max_inh = w;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> fclose(finh);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> N3=ceil((<a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+(m)/(2*sigma))*4*sigma);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment">/* N3 has to be even */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">if</span>(N3%2!=0)</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> N3++;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> T=((max_time-min_time)/2.0)/(0.5-((double) (m))/N3);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> W=N3/T;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> my_N[0]=N; my_n[0]=ceil(N*sigma);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> my_N[1]=N; my_n[1]=ceil(N*sigma);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> my_N[2]=N3; my_n[2]=N3;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment">/* initialise nfft */</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> mri_inh_2d1d_init_guru(&my_plan, my_N, M, my_n, m, sigma, flags,</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment">/* precompute lin psi if set */</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">if</span>(my_plan.plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <a class="code" href="nfft3_8h.html#a3f91a7a005cc31a8b05f33fea0507ddc" title="create a lookup table, but NOT for each node good idea K=2^xx TODO: estimate K, call from init assume...">nfft_precompute_lin_psi</a>(&my_plan.plan);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">if</span> (weight)</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> infft_flags = infft_flags | PRECOMPUTE_WEIGHT;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment">/* initialise my_iplan, advanced */</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> solver_init_advanced_complex(&my_iplan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_plan), infft_flags );</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="comment">/* get the weights */</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> {</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> fw=fopen(<span class="stringliteral">"weights.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> {</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> fscanf(fw,<span class="stringliteral">"%le "</span>,&my_iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> }</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> fclose(fw);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment">/* get the damping factors */</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> {</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">for</span>(j=0;j<N;j++){</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">for</span>(k=0;k<N;k++) {</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">int</span> j2= j-N/2;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordtype">int</span> k2= k-N/2;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordtype">double</span> r=sqrt(j2*j2+k2*k2);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">if</span>(r>(<span class="keywordtype">double</span>) N/2)</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=0.0;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=1.0;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> fp=fopen(filename,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> {</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> fscanf(fp,<span class="stringliteral">"%le %le %le %le"</span>,&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+0],&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[2*j+1],& [...]
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]=real+ _Complex_I*imag;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> fscanf(ftime,<span class="stringliteral">"%le "</span>,&my_plan.t[j]);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> my_plan.t[j] = (my_plan.t[j]-Ts)/T;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> fclose(fp);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> fclose(ftime);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> {</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> fscanf(finh,<span class="stringliteral">"%le "</span>,&my_plan.w[j]);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> my_plan.w[j]/=W;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> fclose(finh);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">if</span>(my_plan.plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI) {</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> nfft_precompute_psi(&my_plan.plan);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> }</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">if</span>(my_plan.plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI) {</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> nfft_precompute_full_psi(&my_plan.plan);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> }</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> {</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[j]=0.0;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> }</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> t0 = getticks();</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> solver_before_loop_complex(&my_iplan);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">for</span>(l=0;l<iteration;l++)</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> {</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="comment">/* break if dot_r_iter is smaller than epsilon*/</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a><epsilon)</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> fprintf(stderr,<span class="stringliteral">"%e, %i of %i\n"</span>,sqrt(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>),</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> l+1,iteration);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> t1 = getticks();</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> fout_real=fopen(<span class="stringliteral">"output_real.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> fout_imag=fopen(<span class="stringliteral">"output_imag.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">for</span> (j=0;j<N*N;j++) {</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment">/* Verschiebung wieder herausrechnen */</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[j]*=cexp(-2.0*_Complex_I*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*Ts*my_plan.w[j]*W);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> fprintf(fout_real,<span class="stringliteral">"%le "</span>,creal(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[j]));</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> fprintf(fout_imag,<span class="stringliteral">"%le "</span>,cimag(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[j]));</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> }</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> fclose(fout_real);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> fclose(fout_imag);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> mri_inh_2d1d_finalize(&my_plan);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> }</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> {</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">if</span> (argc <= 5) {</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> printf(<span class="stringliteral">"usage: ./reconstruct_data_inh_2d1d FILENAME N M ITER WEIGHTS\n"</span>);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> }</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <a class="code" href="group__applications__mri2d__reconstruct__data__2d.html#ga75582a0ebe96f1391e90db0053ee981c" title="reconstruct makes an inverse 2d nfft">reconstruct</a>(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> }</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/reconstruct__data__inh__3d_8c_source.html b/doc/api/html/reconstruct__data__inh__3d_8c_source.html
new file mode 100644
index 0000000..36cc0fb
--- /dev/null
+++ b/doc/api/html/reconstruct__data__inh__3d_8c_source.html
@@ -0,0 +1,266 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - reconstruct_data_inh_3d.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">reconstruct_data_inh_3d.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: reconstruct_data_inh_3d.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <limits.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__reconstruct__data__2d.html#ga75582a0ebe96f1391e90db0053ee981c" title="reconstruct makes an inverse 2d nfft">reconstruct</a>(<span class="keywordtype">char</span>* filename,<span class="keywordtype">int</span> N,<span class="keywordtype">int</span> M,<span class="keywordtype">int</span> ite [...]
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">int</span> j,k,l;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> ticks t0, t1;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">double</span> time,min_time,max_time,min_inh,max_inh;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">double</span> t,real,imag;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">double</span> w,epsilon=0.0000003; <span class="comment">/* epsilon is a the break criterium for</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment"> the iteration */</span>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <a class="code" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> my_plan;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_iplan;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> FILE* fp,*fw,*fout_real,*fout_imag,*finh,*ftime;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">int</span> my_N[3],my_n[3];</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">int</span> flags = PRE_PHI_HUT| PRE_PSI |MALLOC_X| MALLOC_F_HAT|</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> MALLOC_F| FFTW_INIT| FFT_OUT_OF_PLACE;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">unsigned</span> infft_flags = CGNR | PRECOMPUTE_DAMP;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keywordtype">double</span> Ts;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">double</span> W;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">int</span> N3;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">int</span> m=2;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">double</span> sigma = 1.25;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> min_time=INT_MAX; max_time=INT_MIN;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">for</span>(j=0;j<M;j++)</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> {</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> fscanf(ftime,<span class="stringliteral">"%le "</span>,&time);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">if</span>(time<min_time)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> min_time = time;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">if</span>(time>max_time)</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> max_time = time;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> }</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> fclose(ftime);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> Ts=(min_time+max_time)/2.0;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> min_inh=INT_MAX; max_inh=INT_MIN;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> fscanf(finh,<span class="stringliteral">"%le "</span>,&w);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span>(w<min_inh)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> min_inh = w;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span>(w>max_inh)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> max_inh = w;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> fclose(finh);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> N3=ceil((<a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment">/* N3 has to be even */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">if</span>(N3%2!=0)</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> N3++;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> W= <a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(fabs(min_inh),fabs(max_inh))/(0.5-((double) m)/N3);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> my_N[0]=N;my_n[0]=ceil(N*sigma);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> my_N[1]=N; my_n[1]=ceil(N*sigma);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> my_N[2]=N3; my_n[2]=ceil(N3*sigma);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment">/* initialise nfft */</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> mri_inh_3d_init_guru(&my_plan, my_N, M, my_n, m, sigma, flags,</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> FFTW_MEASURE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span> (weight)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> infft_flags = infft_flags | PRECOMPUTE_WEIGHT;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment">/* initialise my_iplan, advanced */</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> solver_init_advanced_complex(&my_iplan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_plan), infft_flags );</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment">/* get the weights */</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> {</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> fw=fopen(<span class="stringliteral">"weights.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> {</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> fscanf(fw,<span class="stringliteral">"%le "</span>,&my_iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> fclose(fw);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment">/* get the damping factors */</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> {</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">for</span>(j=0;j<N;j++){</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">for</span>(k=0;k<N;k++) {</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">int</span> j2= j-N/2;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">int</span> k2= k-N/2;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordtype">double</span> r=sqrt(j2*j2+k2*k2);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">if</span>(r>(<span class="keywordtype">double</span>) N/2)</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=0.0;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=1.0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> }</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> }</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> fp=fopen(filename,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> {</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> fscanf(fp,<span class="stringliteral">"%le %le %le %le"</span>,&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+0],&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+1],& [...]
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]=real+ _Complex_I*imag;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> fscanf(ftime,<span class="stringliteral">"%le "</span>,&my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2]);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2] = (my_plan.plan.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[3*j+2]-Ts)*W/N3;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> }</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> fclose(fp);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> fclose(ftime);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> {</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> fscanf(finh,<span class="stringliteral">"%le "</span>,&my_plan.w[j]);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> my_plan.w[j]/=W;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> }</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> fclose(finh);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">if</span>(my_plan.plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_PSI) {</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> nfft_precompute_psi(&my_plan.plan);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">if</span>(my_plan.plan.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_FULL_PSI) {</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> nfft_precompute_full_psi(&my_plan.plan);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> }</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb86d92e12" title="Total number of Fourier coefficients.">N_total</a>;j++)</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> {</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[j]=0.0;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> }</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> t0 = getticks();</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> solver_before_loop_complex(&my_iplan);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">for</span>(l=0;l<iteration;l++)</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> {</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment">/* break if dot_r_iter is smaller than epsilon*/</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a><epsilon)</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> fprintf(stderr,<span class="stringliteral">"%e, %i of %i\n"</span>,sqrt(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>),</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> l+1,iteration);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> t1 = getticks();</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> fout_real=fopen(<span class="stringliteral">"output_real.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> fout_imag=fopen(<span class="stringliteral">"output_imag.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">for</span> (j=0;j<N*N;j++) {</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment">/* Verschiebung wieder herausrechnen */</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[j]*=cexp(-2.0*_Complex_I*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*Ts*my_plan.w[j]*W);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> fprintf(fout_real,<span class="stringliteral">"%le "</span>,creal(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[j]));</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> fprintf(fout_imag,<span class="stringliteral">"%le "</span>,cimag(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[j]));</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> }</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> fclose(fout_real);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> fclose(fout_imag);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> mri_inh_3d_finalize(&my_plan);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> }</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> {</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">if</span> (argc <= 5) {</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> printf(<span class="stringliteral">"usage: ./reconstruct_data_inh_3d FILENAME N M ITER WEIGHTS\n"</span>);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> }</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <a class="code" href="group__applications__mri2d__reconstruct__data__2d.html#ga75582a0ebe96f1391e90db0053ee981c" title="reconstruct makes an inverse 2d nfft">reconstruct</a>(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> }</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/reconstruct__data__inh__nnfft_8c_source.html b/doc/api/html/reconstruct__data__inh__nnfft_8c_source.html
new file mode 100644
index 0000000..79059dd
--- /dev/null
+++ b/doc/api/html/reconstruct__data__inh__nnfft_8c_source.html
@@ -0,0 +1,282 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - reconstruct_data_inh_nnfft.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_a6e4fee11f07c3b70486e88fe92cbbdc.html">applications</a></li><li class="navelem"><a class="el" href="dir_fcbc4f55ac8dbf86a30b1d7535946c2d.html">mri</a></li><li class="navelem"><a class="el" href="dir_899180af8ae9527aed19a2e763253fcc.html">mri2d</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">reconstruct_data_inh_nnfft.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: reconstruct_data_inh_nnfft.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <limits.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"><a class="code" href="group__applications__mri2d__construct__data__inh__nnfft.html#ga75582a0ebe96f1391e90db0053ee981c"> 42</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__applications__mri2d__construct__data__inh__nnfft.html#ga75582a0ebe96f1391e90db0053ee981c" title="reconstruct">reconstruct</a>(<span class="keywordtype">char</span>* filename,<span class="k [...]
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> {</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">int</span> j,k,l; <span class="comment">/* some variables */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <a class="code" href="structnnfft__plan.html">nnfft_plan</a> my_plan; <span class="comment">/* plan for the two dimensional nfft */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> my_iplan; <span class="comment">/* plan for the two dimensional infft */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> FILE* fin; <span class="comment">/* input file */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> FILE* finh;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> FILE* ftime;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> FILE* fout_real; <span class="comment">/* output file */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> FILE* fout_imag; <span class="comment">/* output file */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordtype">int</span> my_N[3],my_n[3]; <span class="comment">/* to init the nfft */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> ticks t0, t1;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">double</span> t,epsilon=0.0000003; <span class="comment">/* epsilon is a the break criterium for</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment"> the iteration */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">unsigned</span> infft_flags = CGNR | PRECOMPUTE_DAMP; <span class="comment">/* flags for the infft*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">double</span> time,min_time,max_time,min_inh,max_inh;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">double</span> real,imag;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">double</span> *w;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">double</span> Ts;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordtype">double</span> W;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">int</span> N3;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">int</span> m=2;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">double</span> sigma = 1.25;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> w = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(N*N*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> finh=fopen(<span class="stringliteral">"inh.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> min_time=INT_MAX; max_time=INT_MIN;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">for</span>(j=0;j<M;j++)</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> fscanf(ftime,<span class="stringliteral">"%le "</span>,&time);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span>(time<min_time)</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> min_time = time;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">if</span>(time>max_time)</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> max_time = time;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> fclose(ftime);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> Ts=(min_time+max_time)/2.0;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> min_inh=INT_MAX; max_inh=INT_MIN;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">for</span>(j=0;j<N*N;j++)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> {</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> fscanf(finh,<span class="stringliteral">"%le "</span>,&w[j]);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">if</span>(w[j]<min_inh)</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> min_inh = w[j];</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">if</span>(w[j]>max_inh)</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> max_inh = w[j];</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> fclose(finh);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> N3=ceil((<a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0)*4);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> W=<a class="code" href="group__nfftutil.html#gad2e3f0e1983de6d70f003545cc556ed3" title="Maximum of its two arguments.">NFFT_MAX</a>(fabs(min_inh),fabs(max_inh))*2.0;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> fprintf(stderr,<span class="stringliteral">"3: %i %e %e %e %e %e %e\n"</span>,N3,W,min_inh,max_inh,min_time,max_time,Ts);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment">/* initialise my_plan */</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> my_N[0]=N;my_n[0]=ceil(N*sigma);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> my_N[1]=N; my_n[1]=ceil(N*sigma);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> my_N[2]=N3; my_n[2]=ceil(N3*sigma);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> nnfft_init_guru(&my_plan, 3, N*N, M, my_N,my_n,m,</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> PRE_PSI| PRE_PHI_HUT| MALLOC_X| MALLOC_V| MALLOC_F_HAT| MALLOC_F );</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment">/* precompute lin psi if set */</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_LIN_PSI)</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <a class="code" href="nfft3_8h.html#a65983eef73b9f5740214bf720f62fcd6" title="create a lookup table">nnfft_precompute_lin_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment">/* set the flags for the infft*/</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keywordflow">if</span> (weight)</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> infft_flags = infft_flags | PRECOMPUTE_WEIGHT;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment">/* initialise my_iplan, advanced */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> solver_init_advanced_complex(&my_iplan,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&my_plan), infft_flags );</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment">/* get the weights */</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> {</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> fin=fopen(<span class="stringliteral">"weights.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> {</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> fscanf(fin,<span class="stringliteral">"%le "</span>,&my_iplan.<a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>[j]);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> fclose(fin);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment">/* get the damping factors */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> {</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">for</span>(j=0;j<N;j++){</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">for</span>(k=0;k<N;k++) {</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordtype">int</span> j2= j-N/2;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordtype">int</span> k2= k-N/2;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordtype">double</span> r=sqrt(j2*j2+k2*k2);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">if</span>(r>(<span class="keywordtype">double</span>) N/2)</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=0.0;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>[j*N+k]=1.0;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="comment">/* open the input file */</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> fin=fopen(filename,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> ftime=fopen(<span class="stringliteral">"readout_time.dat"</span>,<span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">for</span>(j=0;j<my_plan.<a class="code" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> {</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> fscanf(fin,<span class="stringliteral">"%le %le %le %le "</span>,&my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[3*j+0],&my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[3*j+1],&real,&imag);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>[j]=real+ _Complex_I*imag;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> fscanf(ftime,<span class="stringliteral">"%le "</span>,&my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[3*j+2]);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[3*j+2] = (my_plan.<a class="code" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d" title="nodes (in time/spatial domain)">x</a>[3*j+2]-Ts)*W/N3;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> }</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">for</span>(j=0;j<N;j++)</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> {</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordflow">for</span>(l=0;l<N;l++)</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> {</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[3*(N*j+l)+0]=(((<span class="keywordtype">double</span>) j) -(((<span class="keywordtype">double</span>) N)/2.0))/((<span class="keywordtype">double</span>) N);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[3*(N*j+l)+1]=(((<span class="keywordtype">double</span>) l) -(((<span class="keywordtype">double</span>) N)/2.0))/((<span class="keywordtype">double</span>) N);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> my_plan.<a class="code" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c" title="nodes (in fourier domain)">v</a>[3*(N*j+l)+2] = w[N*j+l]/W ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> }</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment">/* precompute psi */</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PSI) {</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> nnfft_precompute_psi(&my_plan);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_FULL_PSI)</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <a class="code" href="nfft3_8h.html#a78cf7bac65f6de46182ea1ff509c2af9" title="computes all entries of B explicitly">nnfft_precompute_full_psi</a>(&my_plan);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">if</span>(my_plan.<a class="code" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a" title="flags for precomputation, malloc">nnfft_flags</a> & PRE_PHI_HUT)</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <a class="code" href="nfft3_8h.html#a9e4663c2cdbff65da327400657528580" title="initialisation of direct transform">nnfft_precompute_phi_hut</a>(&my_plan);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment">/* init some guess */</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> {</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]=0.0;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> t0 = getticks();</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment">/* inverse trafo */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> solver_before_loop_complex(&my_iplan);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">for</span>(l=0;l<iteration;l++)</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> {</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment">/* break if dot_r_iter is smaller than epsilon*/</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">if</span>(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a><epsilon)</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> fprintf(stderr,<span class="stringliteral">"%e, %i of %i\n"</span>,sqrt(my_iplan.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>),</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> l+1,iteration);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> }</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> t1 = getticks();</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> fout_real=fopen(<span class="stringliteral">"output_real.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> fout_imag=fopen(<span class="stringliteral">"output_imag.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">for</span>(k=0;k<my_plan.<a class="code" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2" title="Total number of Fourier coefficients.">N_total</a>;k++) {</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]*=cexp(2.0*_Complex_I*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*Ts*w[k]);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> fprintf(fout_real,<span class="stringliteral">"%le "</span>, creal(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]));</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> fprintf(fout_imag,<span class="stringliteral">"%le "</span>, cimag(my_iplan.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]));</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> fclose(fout_real);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> fclose(fout_imag);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment">/* finalize the infft */</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&my_iplan);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment">/* finalize the nfft */</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> nnfft_finalize(&my_plan);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(w);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> }</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> {</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">if</span> (argc <= 5) {</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> printf(<span class="stringliteral">"usage: ./reconstruct_data_inh_nnfft FILENAME N M ITER WEIGHTS\n"</span>);</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> }</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <a class="code" href="group__applications__mri2d__construct__data__inh__nnfft.html#ga75582a0ebe96f1391e90db0053ee981c" title="reconstruct">reconstruct</a>(argv[1],atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]));</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/sinc_8c_source.html b/doc/api/html/sinc_8c_source.html
new file mode 100644
index 0000000..671f88c
--- /dev/null
+++ b/doc/api/html/sinc_8c_source.html
@@ -0,0 +1,97 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - sinc.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_7ab5cd9d6a44db3bf3b807f89e50cefe.html">util</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">sinc.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> R X(sinc)(<span class="keyword">const</span> R x)</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">/* Based on sinc function from Boost C++ library. */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">const</span> R b = EPSILON;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">const</span> R bs = SQRT(b);</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">const</span> R bs2 = SQRT(bs);</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keywordflow">if</span> (FABS(x) >= bs2)</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keywordflow">return</span> SIN(x)/x;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> R r = K(1.0);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordflow">if</span> (FABS(x) >= b)</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">const</span> R x2 = x * x;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> r -= x2 / K(6.0);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">if</span> (FABS(x) >= bs)</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> r += (x2 * x2) / K(120.0);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> }</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">return</span> r;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/solver_2simple__test_8c_source.html b/doc/api/html/solver_2simple__test_8c_source.html
new file mode 100644
index 0000000..52b333b
--- /dev/null
+++ b/doc/api/html/solver_2simple__test_8c_source.html
@@ -0,0 +1,196 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - simple_test.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_7af51a00587982c04b08a156fa91c254.html">solver</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">solver/simple_test.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">/* void simple_test_infft_1d(int N, int M, int iter) */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">/* { */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment">/* int k,l; /\**< index for nodes, freqencies,iter*\/ */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment">/* nfft_plan p; /\**< plan for the nfft *\/ */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">/* infft_plan ip; /\**< plan for the inverse nfft *\/ */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">/* /\** initialise an one dimensional plan *\/ */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">/* nfft_init_1d(&p, N, M); */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment">/* /\** init pseudo random nodes *\/ */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment">/* nfft_vrand_shifted_unit_double(p.x,p.M_total); */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment">/* /\** precompute psi, the entries of the matrix B *\/ */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">/* if(p.nfft_flags & PRE_ONE_PSI) */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment">/* nfft_precompute_one_psi(&p); */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment">/* /\** initialise inverse plan *\/ */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">/* infft_init(&ip,&p); */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment">/* /\** init pseudo random samples and show them *\/ */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment">/* nfft_vrand_unit_complex(ip.y,p.M_total); */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment">/* nfft_vpr_complex(ip.y,p.M_total,"Given data, vector y"); */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment">/* /\** initialise some guess f_hat_0 and solve *\/ */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment">/* for(k=0;k<p.N_total;k++) */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">/* ip.f_hat_iter[k]=0; */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment">/* nfft_vpr_complex(ip.f_hat_iter,p.N_total,"Initial guess, vector f_hat_iter"); */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment">/* NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment">/* nfft_trafo(&p); */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment">/* nfft_vpr_complex(p.f,p.M_total,"Data fit, vector f"); */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">/* NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment">/* infft_before_loop(&ip); */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment">/* printf("\n Residual r=%e\n",ip.dot_r_iter); */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment">/* for(l=0;l<iter;l++) */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">/* { */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">/* printf("\n********** Iteration l=%d **********\n",l); */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">/* infft_loop_one_step(&ip); */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">/* nfft_vpr_complex(ip.f_hat_iter,p.N_total, */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment">/* "Approximate solution, vector f_hat_iter"); */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment">/* NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">/* nfft_trafo(&p); */</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">/* nfft_vpr_complex(p.f,p.M_total,"Data fit, vector f"); */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment">/* NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment">/* printf("\n Residual r=%e\n",ip.dot_r_iter); */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment">/* } */</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment">/* infft_finalize(&ip); */</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment">/* nfft_finalize(&p); */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment">/* } */</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">static</span> <span class="keywordtype">void</span> simple_test_solver_nfft_1d(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> iter)</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> {</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">int</span> k,l; </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> p; </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> ip; </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> nfft_init_1d(&p, N, M);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(p.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number o [...]
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">if</span>(p.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> nfft_precompute_one_psi(&p);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> solver_init_complex(&ip,(<a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a>*)(&p));</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(ip.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_tot [...]
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(ip.<a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>,<span clas [...]
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">for</span>(k=0;k<p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>;k++)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>[k]=0;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_tota [...]
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeo [...]
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples." [...]
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeo [...]
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> solver_before_loop_complex(&ip);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> printf(<span class="stringliteral">"\n Residual r=%e\n"</span>,ip.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">for</span>(l=0;l<iter;l++)</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> {</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> printf(<span class="stringliteral">"\n********** Iteration l=%d **********\n"</span>,l);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(&ip);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,p.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_ [...]
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="stringliteral">"Approximate solution, vector f_hat_iter"</span>);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * s [...]
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&p);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <a class="code" href="group__nfftutil.html#ga52ad07055e22b83a016bdbf43d3884d0" title="Prints a vector of complex numbers.">nfft_vpr_complex</a>(p.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,p.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of sampl [...]
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ip.<a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>,p.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * s [...]
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> printf(<span class="stringliteral">"\n Residual r=%e\n"</span>,ip.<a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(&ip);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> nfft_finalize(&p);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> {</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> printf(<span class="stringliteral">"\n Computing a one dimensional inverse nfft\n"</span>);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> simple_test_solver_nfft_1d(8,4,5);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment">/* \} */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/solver_8c.html b/doc/api/html/solver_8c.html
new file mode 100644
index 0000000..f02b01e
--- /dev/null
+++ b/doc/api/html/solver_8c.html
@@ -0,0 +1,118 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - solver.c File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_58759e03702cf5d3134868f6de633189.html">solver</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">solver.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Implementation file for the solver module.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+</div>
+<p><a href="solver_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ad8962fc79683a67a84b10593d8e0103c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8962fc79683a67a84b10593d8e0103c"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_init_advanced_complex</b> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths, <a class="el" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a> *mv, unsigned flags)</td></tr>
+<tr class="memitem:a6662c51f86e40ded7773d1954ec77ca2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6662c51f86e40ded7773d1954ec77ca2"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_init_complex</b> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths, <a class="el" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a> *mv)</td></tr>
+<tr class="memitem:a54498806e5ab4046a2ef8fc426e5b141"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54498806e5ab4046a2ef8fc426e5b141"></a>
+void </td><td class="memItemRight" valign="bottom"><b>solver_before_loop_complex</b> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memitem:a7e818bcb6dd61e2a7aa5748c8ee9d339"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7e818bcb6dd61e2a7aa5748c8ee9d339"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a7e818bcb6dd61e2a7aa5748c8ee9d339">solver_loop_one_step_landweber_complex</a> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memdesc:a7e818bcb6dd61e2a7aa5748c8ee9d339"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step_landweber <br/></td></tr>
+<tr class="memitem:ab14e3227776d9378c195664f3ace8110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab14e3227776d9378c195664f3ace8110"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#ab14e3227776d9378c195664f3ace8110">solver_loop_one_step_steepest_descent_complex</a> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memdesc:ab14e3227776d9378c195664f3ace8110"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step_steepest_descent <br/></td></tr>
+<tr class="memitem:a376190a64969829c029532fd0957e184"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a376190a64969829c029532fd0957e184"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a376190a64969829c029532fd0957e184">solver_loop_one_step_cgnr_complex</a> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memdesc:a376190a64969829c029532fd0957e184"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step_cgnr <br/></td></tr>
+<tr class="memitem:a59278b7119c43bf23b9aaca6eae936e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59278b7119c43bf23b9aaca6eae936e5"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a59278b7119c43bf23b9aaca6eae936e5">solver_loop_one_step_cgne_complex</a> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memdesc:a59278b7119c43bf23b9aaca6eae936e5"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step_cgne <br/></td></tr>
+<tr class="memitem:a3b80b04ee3429b04c310992fb0a12420"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b80b04ee3429b04c310992fb0a12420"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a3b80b04ee3429b04c310992fb0a12420">solver_loop_one_step_complex</a> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memdesc:a3b80b04ee3429b04c310992fb0a12420"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step <br/></td></tr>
+<tr class="memitem:a2f44c78734390e47d72578f4c9cbe709"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f44c78734390e47d72578f4c9cbe709"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a2f44c78734390e47d72578f4c9cbe709">solver_finalize_complex</a> (<a class="el" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</td></tr>
+<tr class="memdesc:a2f44c78734390e47d72578f4c9cbe709"><td class="mdescLeft"> </td><td class="mdescRight">void solver_finalize <br/></td></tr>
+<tr class="memitem:a1a4544ab96d14c812e3b330c439c3d80"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a4544ab96d14c812e3b330c439c3d80"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a1a4544ab96d14c812e3b330c439c3d80">solver_init_advanced_double</a> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths, <a class="el" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a> *mv, unsigned flags)</td></tr>
+<tr class="memdesc:a1a4544ab96d14c812e3b330c439c3d80"><td class="mdescLeft"> </td><td class="mdescRight">void solver_finalize <br/></td></tr>
+<tr class="memitem:aa4893f8cbbcedc501a5c856c07706454"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4893f8cbbcedc501a5c856c07706454"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>solver_init_double</b> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths, <a class="el" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a> *mv)</td></tr>
+<tr class="memitem:ab9d1312a3daa0f574f0059d920ee9017"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9d1312a3daa0f574f0059d920ee9017"></a>
+static void </td><td class="memItemRight" valign="bottom"><b>solver_before_loop_double</b> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memitem:a30d6a3373083167e38181c964d6a4288"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a30d6a3373083167e38181c964d6a4288"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a30d6a3373083167e38181c964d6a4288">solver_loop_one_step_landweber_double</a> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memdesc:a30d6a3373083167e38181c964d6a4288"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step_landweber <br/></td></tr>
+<tr class="memitem:a6fef0b0a380ed017554c41b78fccc477"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fef0b0a380ed017554c41b78fccc477"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a6fef0b0a380ed017554c41b78fccc477">solver_loop_one_step_steepest_descent_double</a> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memdesc:a6fef0b0a380ed017554c41b78fccc477"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step_steepest_descent <br/></td></tr>
+<tr class="memitem:ae134ca120f6f4fcc96626c6a1acedfb6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae134ca120f6f4fcc96626c6a1acedfb6"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#ae134ca120f6f4fcc96626c6a1acedfb6">solver_loop_one_step_cgnr_double</a> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memdesc:ae134ca120f6f4fcc96626c6a1acedfb6"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step_cgnr <br/></td></tr>
+<tr class="memitem:a206a5fe70bfb6853a2a9a9551e12b2db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a206a5fe70bfb6853a2a9a9551e12b2db"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a206a5fe70bfb6853a2a9a9551e12b2db">solver_loop_one_step_cgne_double</a> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memdesc:a206a5fe70bfb6853a2a9a9551e12b2db"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step_cgne <br/></td></tr>
+<tr class="memitem:a89adea45056c1b5c8d90cfd87325be4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a89adea45056c1b5c8d90cfd87325be4e"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a89adea45056c1b5c8d90cfd87325be4e">solver_loop_one_step_double</a> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memdesc:a89adea45056c1b5c8d90cfd87325be4e"><td class="mdescLeft"> </td><td class="mdescRight">void solver_loop_one_step <br/></td></tr>
+<tr class="memitem:a6d04f270b539a9f48b3521ba973829bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d04f270b539a9f48b3521ba973829bf"></a>
+static void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver_8c.html#a6d04f270b539a9f48b3521ba973829bf">solver_finalize_double</a> (<a class="el" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</td></tr>
+<tr class="memdesc:a6d04f270b539a9f48b3521ba973829bf"><td class="mdescLeft"> </td><td class="mdescRight">void solver_finalize <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Implementation file for the solver module. </p>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition in file <a class="el" href="solver_8c_source.html">solver.c</a>.</p>
+</div></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/solver_8c_source.html b/doc/api/html/solver_8c_source.html
new file mode 100644
index 0000000..dd1c2cd
--- /dev/null
+++ b/doc/api/html/solver_8c_source.html
@@ -0,0 +1,760 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - solver.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_58759e03702cf5d3134868f6de633189.html">solver</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">solver.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="solver_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: solver.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">void</span> solver_init_advanced_complex(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a>* ths, <a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a> *mv, <span class="keywordtype">unsigned</span> flags)</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a> = mv;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> = flags;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> ths-><a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a> = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" [...]
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a> = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" [...]
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a> = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href=" [...]
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a> = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="st [...]
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & LANDWEBER)</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & STEEPEST_DESCENT)</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> {</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual vector update">v_iter</a> = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code [...]
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> }</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & CGNR)</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a> = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a> [...]
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual vector update">v_iter</a> = (fftw_complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code [...]
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> }</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & CGNE)</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> ths-><a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a [...]
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> ths-><a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-> [...]
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> }</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keywordtype">void</span> solver_init_complex(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a>* ths, <a class="code" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a> *mv)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> solver_init_advanced_complex(ths, mv, CGNR);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">void</span> solver_before_loop_complex(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a>* ths)</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52" title="Vector of Fourier coefficients, size is N_total * s [...]
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication"> [...]
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a56bf298c03c4aaeb6b4aaf7ed5cca57e" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication"> [...]
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <a class="code" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5" title="Updates .">nfft_upd_axpy_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>, -1.0, ths-><a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>, th [...]
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span>((!(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & LANDWEBER)) || (ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & NORMS_FOR_LANDWEBER))</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="it [...]
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a2cb2df3ae5db867f38cb75b7c88de7fe" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated resi [...]
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( ff [...]
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( fftw [...]
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix ve [...]
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#add14030aae4920f7ca71ecf1efde00a3" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix ve [...]
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">if</span>((!(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & LANDWEBER)) || (ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & NORMS_FOR_LANDWEBER))</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> {</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" t [...]
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="resid [...]
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & CGNE)</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> ths-><a class="code" href="structsolver__plan__complex.html#a0cced7bb2f3b85b75b765d796e2c741d" title="weighted dotproduct of p_hat_iter">dot_p_hat_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a>;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & CGNR)</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_i [...]
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> } <span class="comment">/* void solver_before_loop */</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"><a class="code" href="solver_8c.html#a7e818bcb6dd61e2a7aa5748c8ee9d339"> 120</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#a7e818bcb6dd61e2a7aa5748c8ee9d339" title="void solver_loop_one_step_landweber">solver_loop_one_step_landweber_complex</a>(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a>* ths)</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> {</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <a class="code" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e" title="Updates .">nfft_upd_xpawy_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_it [...]
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" tit [...]
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_ite [...]
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52" title="Vector of Fourier coefficients, size is N_total * s [...]
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">m [...]
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a56bf298c03c4aaeb6b4aaf7ed5cca57e" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">m [...]
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <a class="code" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5" title="Updates .">nfft_upd_axpy_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>, -1.0, ths-><a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>, th [...]
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & NORMS_FOR_LANDWEBER)</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> {</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="it [...]
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a2cb2df3ae5db867f38cb75b7c88de7fe" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated resi [...]
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( ff [...]
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( fftw [...]
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vec [...]
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#add14030aae4920f7ca71ecf1efde00a3" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vec [...]
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & NORMS_FOR_LANDWEBER)</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> {</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" t [...]
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="resid [...]
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> } <span class="comment">/* void solver_loop_one_step_landweber */</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"><a class="code" href="solver_8c.html#ab14e3227776d9378c195664f3ace8110"> 169</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#ab14e3227776d9378c195664f3ace8110" title="void solver_loop_one_step_steepest_descent">solver_loop_one_step_steepest_descent_complex</a>(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> {</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52" title="Vector of Fourier coefficients, size is N_total [...]
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52" title="Vector of Fourier coefficients, size is N_total * [...]
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual vector update">v_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv< [...]
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a56bf298c03c4aaeb6b4aaf7ed5cca57e" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual vector update">v_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv< [...]
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> ths-><a class="code" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de" title="weighted dotproduct of v_iter">dot_v_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title=" [...]
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> ths-><a class="code" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de" title="weighted dotproduct of v_iter">dot_v_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual ve [...]
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> / ths-><a class="code" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de" [...]
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <a class="code" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e" title="Updates .">nfft_upd_xpawy_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_it [...]
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" tit [...]
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_ite [...]
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>, -ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_it [...]
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a2cb2df3ae5db867f38cb75b7c88de7fe" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title=" [...]
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated re [...]
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( ff [...]
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( fftw [...]
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vec [...]
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#add14030aae4920f7ca71ecf1efde00a3" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vec [...]
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" [...]
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="res [...]
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> } <span class="comment">/* void solver_loop_one_step_steepest_descent */</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"><a class="code" href="solver_8c.html#a376190a64969829c029532fd0957e184"> 224</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#a376190a64969829c029532fd0957e184" title="void solver_loop_one_step_cgnr">solver_loop_one_step_cgnr_complex</a>(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> {</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52" title="Vector of Fourier coefficients, size is N_total [...]
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52" title="Vector of Fourier coefficients, size is N_total * [...]
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual vector update">v_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv< [...]
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a56bf298c03c4aaeb6b4aaf7ed5cca57e" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual vector update">v_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv< [...]
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> ths-><a class="code" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de" title="weighted dotproduct of v_iter">dot_v_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title=" [...]
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> ths-><a class="code" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de" title="weighted dotproduct of v_iter">dot_v_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual ve [...]
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> / ths-><a class="code" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de" [...]
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <a class="code" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e" title="Updates .">nfft_upd_xpawy_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_it [...]
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fouri [...]
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_ite [...]
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>, -ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_it [...]
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a2cb2df3ae5db867f38cb75b7c88de7fe" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title=" [...]
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated re [...]
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( ff [...]
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( fftw [...]
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vec [...]
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#add14030aae4920f7ca71ecf1efde00a3" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vec [...]
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> ths-><a class="code" href="structsolver__plan__complex.html#aadb97426a0e35fd46a65557c56b055ee" title="previous dot_z_hat_iter">dot_z_hat_iter_old</a> = ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a>;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" [...]
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="res [...]
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> ths-><a class="code" href="structsolver__plan__complex.html#af13036b1a6f6edabe3fd862f77cf5000" title="step size for search correction">beta_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> / ths-><a class="code" href="structsolver__plan__complex.html#aadb97426a0e35fd46a65557c56b055ee" [...]
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <a class="code" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5" title="Updates .">nfft_upd_axpy_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#af13036b1a6f6edabe3fd862f77cf5000" title="step size for search correction">beta_iter</a [...]
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> } <span class="comment">/* void solver_loop_one_step_cgnr */</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno"><a class="code" href="solver_8c.html#a59278b7119c43bf23b9aaca6eae936e5"> 287</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#a59278b7119c43bf23b9aaca6eae936e5" title="void solver_loop_one_step_cgne">solver_loop_one_step_cgne_complex</a>(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> {</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> / ths-><a class="code" href="structsolver__plan__complex.html#a0cced7bb2f3b85b75b765d796e2c741d" title=" [...]
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <a class="code" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e" title="Updates .">nfft_upd_xpawy_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_it [...]
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fouri [...]
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_ite [...]
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52" title="Vector of Fourier coefficients, size is N_total [...]
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52" title="Vector of Fourier coefficients, size is N_total * [...]
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a56bf298c03c4aaeb6b4aaf7ed5cca57e" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>, -ths-><a class="code" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02" title="step size for search direction">alpha_it [...]
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a2cb2df3ae5db867f38cb75b7c88de7fe" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> ths-><a class="code" href="structsolver__plan__complex.html#add3b6bc4149ba5371ef0b8bd91443e50" title="previous dot_r_iter">dot_r_iter_old</a> = ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a>;</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title=" [...]
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated re [...]
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> ths-><a class="code" href="structsolver__plan__complex.html#af13036b1a6f6edabe3fd862f77cf5000" title="step size for search correction">beta_iter</a> = ths-><a class="code" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe" title="weighted dotproduct of r_iter">dot_r_iter</a> / ths-><a class="code" href="structsolver__plan__complex.html#add3b6bc4149ba5371ef0b8bd91443e50" title=" [...]
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( ff [...]
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e" title="Vector of samples, size is M_total * sizeof( fftw [...]
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#add14030aae4920f7ca71ecf1efde00a3" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector mult [...]
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <a class="code" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5" title="Updates .">nfft_upd_axpy_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__complex.html#af13036b1a6f6edabe3fd862f77cf5000" title="step size for search correction">beta_iter</a [...]
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> ths-><a class="code" href="structsolver__plan__complex.html#a0cced7bb2f3b85b75b765d796e2c741d" title="weighted dotproduct of p_hat_iter">dot_p_hat_iter</a> = <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" [...]
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> ths-><a class="code" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> ths-><a class="code" href="structsolver__plan__complex.html#a0cced7bb2f3b85b75b765d796e2c741d" title="weighted dotproduct of p_hat_iter">dot_p_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="sea [...]
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> } <span class="comment">/* void solver_loop_one_step_cgne */</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno"><a class="code" href="solver_8c.html#a3b80b04ee3429b04c310992fb0a12420"> 339</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a3b80b04ee3429b04c310992fb0a12420" title="void solver_loop_one_step">solver_loop_one_step_complex</a>(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> {</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & LANDWEBER)</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <a class="code" href="solver_8c.html#a7e818bcb6dd61e2a7aa5748c8ee9d339" title="void solver_loop_one_step_landweber">solver_loop_one_step_landweber_complex</a>(ths);</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & STEEPEST_DESCENT)</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <a class="code" href="solver_8c.html#ab14e3227776d9378c195664f3ace8110" title="void solver_loop_one_step_steepest_descent">solver_loop_one_step_steepest_descent_complex</a>(ths);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & CGNR)</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <a class="code" href="solver_8c.html#a376190a64969829c029532fd0957e184" title="void solver_loop_one_step_cgnr">solver_loop_one_step_cgnr_complex</a>(ths);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & CGNE)</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <a class="code" href="solver_8c.html#a59278b7119c43bf23b9aaca6eae936e5" title="void solver_loop_one_step_cgne">solver_loop_one_step_cgne_complex</a>(ths);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> } <span class="comment">/* void solver_loop_one_step */</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"><a class="code" href="solver_8c.html#a2f44c78734390e47d72578f4c9cbe709"> 355</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a2f44c78734390e47d72578f4c9cbe709" title="void solver_finalize">solver_finalize_complex</a>(<a class="code" href="structsolver__plan__complex.html">solver_plan_complex</a> *ths)</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> {</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c" title="weighting factors">w</a>);</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce" title="damping factors">w_hat</a>);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & CGNR)</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> {</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual vector update">v_iter</a>);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03" title="residual of normal equation of first kind">z_hat_iter</a>);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> }</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942" title="iteration type">flags</a> & STEEPEST_DESCENT)</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5" title="residual vector update">v_iter</a>);</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce" title="search direction">p_hat_iter</a>);</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75" title="iterative solution">f_hat_iter</a>);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3" title="iterated residual vector">r_iter</a>);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde" title="right hand side, samples">y</a>);</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> } </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="comment">/****************************************************************************/</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="comment">/****************************************************************************/</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="comment">/****************************************************************************/</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno"><a class="code" href="solver_8c.html#a1a4544ab96d14c812e3b330c439c3d80"> 384</a></span> <span class="keywordtype">void</span> <a class="code" href="nfft3_8h.html#a1a4544ab96d14c812e3b330c439c3d80" title="void solver_finalize">solver_init_advanced_double</a>(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a>* ths, <a class="code" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a> *mv [...]
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> {</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a> = mv;</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> = flags;</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> ths-><a class="code" href="structsolver__plan__double.html#accc401c5912fe60922d4ce2b30132e18" title="right hand side, samples">y</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv [...]
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv [...]
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-& [...]
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-> [...]
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & LANDWEBER)</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>;</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & STEEPEST_DESCENT)</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> {</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vector update">v_iter</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication"> [...]
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> }</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & CGNR)</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> {</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vect [...]
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vector update">v_iter</a> = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication"> [...]
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> }</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & CGNE)</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>;</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> ths-><a class="code" href="structsolver__plan__double.html#adc2b7cea47756753ae9f8d5731f8d500" title="weighting factors">w</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a c [...]
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> ths-><a class="code" href="structsolver__plan__double.html#ab16ed4ac6cf04f57c4b1f194fbc09472" title="damping factors">w_hat</a> = (<span class="keywordtype">double</span>*) <a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a [...]
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> }</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="keyword">static</span> <span class="keywordtype">void</span> solver_init_double(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a>* ths, <a class="code" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a> *mv)</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> {</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <a class="code" href="nfft3_8h.html#a1a4544ab96d14c812e3b330c439c3d80" title="void solver_finalize">solver_init_advanced_double</a>(ths, mv, CGNR);</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> }</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="keyword">static</span> <span class="keywordtype">void</span> solver_before_loop_double(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a>* ths)</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> {</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac" title="Vector of Fourier coefficients, size is N_total * size [...]
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv< [...]
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a920771039e5cf889d6a29a243e6922e3" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv< [...]
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <a class="code" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3" title="Updates .">nfft_upd_axpy_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>, -1.0, ths-><a class="code" href="structsolver__plan__double.html#accc401c5912fe60922d4ce2b30132e18" title="right hand side, samples">y</a>, ths-& [...]
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keywordflow">if</span>((!(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & LANDWEBER)) || (ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & NORMS_FOR_LANDWEBER))</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> {</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="itera [...]
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#af540ad90ef6b30fab022c95e8a5dcd58" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residua [...]
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> }</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( doubl [...]
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( double [...]
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vecto [...]
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a92e4080bcb7241befa250be9d8f9a1cd" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vecto [...]
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keywordflow">if</span>((!(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & LANDWEBER)) || (ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & NORMS_FOR_LANDWEBER))</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> {</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" titl [...]
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual [...]
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> }</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & CGNE)</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> ths-><a class="code" href="structsolver__plan__double.html#a21f781633362300a145e71ea88febbae" title="weighted dotproduct of p_hat_iter">dot_p_hat_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a>;</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & CGNR)</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter [...]
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> } <span class="comment">/* void solver_before_loop */</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno"><a class="code" href="solver_8c.html#a30d6a3373083167e38181c964d6a4288"> 471</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#a30d6a3373083167e38181c964d6a4288" title="void solver_loop_one_step_landweber">solver_loop_one_step_landweber_double</a>(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a>* ths)</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> {</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <a class="code" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0" title="Updates .">nfft_upd_xpawy_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter< [...]
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title= [...]
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter</ [...]
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac" title="Vector of Fourier coefficients, size is N_total * size [...]
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</ [...]
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a920771039e5cf889d6a29a243e6922e3" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</ [...]
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <a class="code" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3" title="Updates .">nfft_upd_axpy_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>, -1.0, ths-><a class="code" href="structsolver__plan__double.html#accc401c5912fe60922d4ce2b30132e18" title="right hand side, samples">y</a>, ths-& [...]
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & NORMS_FOR_LANDWEBER)</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> {</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="itera [...]
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#af540ad90ef6b30fab022c95e8a5dcd58" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residua [...]
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> }</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( doubl [...]
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( double [...]
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector [...]
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a92e4080bcb7241befa250be9d8f9a1cd" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector [...]
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & NORMS_FOR_LANDWEBER)</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> {</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" titl [...]
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual [...]
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> }</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> } <span class="comment">/* void solver_loop_one_step_landweber */</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno"><a class="code" href="solver_8c.html#a6fef0b0a380ed017554c41b78fccc477"> 520</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#a6fef0b0a380ed017554c41b78fccc477" title="void solver_loop_one_step_steepest_descent">solver_loop_one_step_steepest_descent_double</a>(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> {</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac" title="Vector of Fourier coefficients, size is N_total * [...]
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac" title="Vector of Fourier coefficients, size is N_total * si [...]
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vector update">v_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a> [...]
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a920771039e5cf889d6a29a243e6922e3" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vector update">v_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a> [...]
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> ths-><a class="code" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890" title="weighted dotproduct of v_iter">dot_v_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="res [...]
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> ths-><a class="code" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890" title="weighted dotproduct of v_iter">dot_v_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vecto [...]
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> / ths-><a class="code" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890" ti [...]
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <a class="code" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0" title="Updates .">nfft_upd_xpawy_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter< [...]
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title= [...]
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter</ [...]
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>, -ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter< [...]
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#af540ad90ef6b30fab022c95e8a5dcd58" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="ite [...]
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated resid [...]
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( doubl [...]
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( double [...]
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector [...]
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a92e4080bcb7241befa250be9d8f9a1cd" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector [...]
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" ti [...]
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residu [...]
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> } <span class="comment">/* void solver_loop_one_step_steepest_descent */</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno"><a class="code" href="solver_8c.html#ae134ca120f6f4fcc96626c6a1acedfb6"> 575</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#ae134ca120f6f4fcc96626c6a1acedfb6" title="void solver_loop_one_step_cgnr">solver_loop_one_step_cgnr_double</a>(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> {</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac" title="Vector of Fourier coefficients, size is N_total * [...]
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac" title="Vector of Fourier coefficients, size is N_total * si [...]
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vector update">v_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a> [...]
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a920771039e5cf889d6a29a243e6922e3" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vector update">v_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a> [...]
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> ths-><a class="code" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890" title="weighted dotproduct of v_iter">dot_v_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="res [...]
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> ths-><a class="code" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890" title="weighted dotproduct of v_iter">dot_v_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vecto [...]
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> / ths-><a class="code" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890" ti [...]
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> </div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <a class="code" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0" title="Updates .">nfft_upd_xpawy_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter< [...]
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier [...]
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter</ [...]
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>, -ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter< [...]
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#af540ad90ef6b30fab022c95e8a5dcd58" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="ite [...]
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated resid [...]
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( doubl [...]
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( double [...]
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector [...]
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a92e4080bcb7241befa250be9d8f9a1cd" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <a class="code" href="group__nfftutil.html#ga4d8733560ed5e4cc3ff7ecadac62e83e" title="Swapping of two vectors.">NFFT_SWAP_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>,ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector [...]
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> </div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> ths-><a class="code" href="structsolver__plan__double.html#a35f2567cc25bcfce28dbb48eba5e49c9" title="previous dot_z_hat_iter">dot_z_hat_iter_old</a> = ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a>;</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" ti [...]
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residu [...]
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> ths-><a class="code" href="structsolver__plan__double.html#aebfe38cf3b3ca344bbfbb7b1cf41eca8" title="step size for search correction">beta_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea" title="weighted dotproduct of z_hat_iter">dot_z_hat_iter</a> / ths-><a class="code" href="structsolver__plan__double.html#a35f2567cc25bcfce28dbb48eba5e49c9" ti [...]
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <a class="code" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3" title="Updates .">nfft_upd_axpy_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#aebfe38cf3b3ca344bbfbb7b1cf41eca8" title="step size for search correction">beta_iter</a>, [...]
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> } <span class="comment">/* void solver_loop_one_step_cgnr */</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> </div>
+<div class="line"><a name="l00638"></a><span class="lineno"><a class="code" href="solver_8c.html#a206a5fe70bfb6853a2a9a9551e12b2db"> 638</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#a206a5fe70bfb6853a2a9a9551e12b2db" title="void solver_loop_one_step_cgne">solver_loop_one_step_cgne_double</a>(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> {</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> / ths-><a class="code" href="structsolver__plan__double.html#a21f781633362300a145e71ea88febbae" title="wei [...]
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <a class="code" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0" title="Updates .">nfft_upd_xpawy_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter< [...]
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier [...]
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter</ [...]
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> </div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac" title="Vector of Fourier coefficients, size is N_total * [...]
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac" title="Vector of Fourier coefficients, size is N_total * si [...]
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> </div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a920771039e5cf889d6a29a243e6922e3" title="Pointer to the own transform.">mv_trafo</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>, -ths-><a class="code" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b" title="step size for search direction">alpha_iter< [...]
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#af540ad90ef6b30fab022c95e8a5dcd58" title="Total number of samples.">M_total</a>);</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> ths-><a class="code" href="structsolver__plan__double.html#a5d47ba554ae4d190384eaca6250f7312" title="previous dot_r_iter">dot_r_iter_old</a> = ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a>;</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="ite [...]
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated resid [...]
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> </div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> ths-><a class="code" href="structsolver__plan__double.html#aebfe38cf3b3ca344bbfbb7b1cf41eca8" title="step size for search correction">beta_iter</a> = ths-><a class="code" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b" title="weighted dotproduct of r_iter">dot_r_iter</a> / ths-><a class="code" href="structsolver__plan__double.html#a5d47ba554ae4d190384eaca6250f7312" title="pre [...]
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> </div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="comment">/*-----------------*/</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( doubl [...]
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e" title="Vector of samples, size is M_total * sizeof( double [...]
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> </div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#a92e4080bcb7241befa250be9d8f9a1cd" title="Pointer to the own adjoint.">mv_adjoint</a>(ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multipl [...]
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> </div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <a class="code" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3" title="Updates .">nfft_upd_axpy_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>, ths-><a class="code" href="structsolver__plan__double.html#aebfe38cf3b3ca344bbfbb7b1cf41eca8" title="step size for search correction">beta_iter</a>, [...]
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> </div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> ths-><a class="code" href="structsolver__plan__double.html#a21f781633362300a145e71ea88febbae" title="weighted dotproduct of p_hat_iter">dot_p_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" ti [...]
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> ths-><a class="code" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404" title="matrix vector multiplication">mv</a>-><a class="code" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41" title="Total number of Fourier coefficients.">N_total</a>);</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> ths-><a class="code" href="structsolver__plan__double.html#a21f781633362300a145e71ea88febbae" title="weighted dotproduct of p_hat_iter">dot_p_hat_iter</a> = <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search [...]
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> } <span class="comment">/* void solver_loop_one_step_cgne */</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> </div>
+<div class="line"><a name="l00690"></a><span class="lineno"><a class="code" href="solver_8c.html#a89adea45056c1b5c8d90cfd87325be4e"> 690</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#a89adea45056c1b5c8d90cfd87325be4e" title="void solver_loop_one_step">solver_loop_one_step_double</a>(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> {</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & LANDWEBER)</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <a class="code" href="solver_8c.html#a30d6a3373083167e38181c964d6a4288" title="void solver_loop_one_step_landweber">solver_loop_one_step_landweber_double</a>(ths);</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> </div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & STEEPEST_DESCENT)</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <a class="code" href="solver_8c.html#a6fef0b0a380ed017554c41b78fccc477" title="void solver_loop_one_step_steepest_descent">solver_loop_one_step_steepest_descent_double</a>(ths);</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & CGNR)</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <a class="code" href="solver_8c.html#ae134ca120f6f4fcc96626c6a1acedfb6" title="void solver_loop_one_step_cgnr">solver_loop_one_step_cgnr_double</a>(ths);</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & CGNE)</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <a class="code" href="solver_8c.html#a206a5fe70bfb6853a2a9a9551e12b2db" title="void solver_loop_one_step_cgne">solver_loop_one_step_cgne_double</a>(ths);</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> } <span class="comment">/* void solver_loop_one_step */</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> </div>
+<div class="line"><a name="l00706"></a><span class="lineno"><a class="code" href="solver_8c.html#a6d04f270b539a9f48b3521ba973829bf"> 706</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="solver_8c.html#a6d04f270b539a9f48b3521ba973829bf" title="void solver_finalize">solver_finalize_double</a>(<a class="code" href="structsolver__plan__double.html">solver_plan_double</a> *ths)</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> {</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_WEIGHT)</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#adc2b7cea47756753ae9f8d5731f8d500" title="weighting factors">w</a>);</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & PRECOMPUTE_DAMP)</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#ab16ed4ac6cf04f57c4b1f194fbc09472" title="damping factors">w_hat</a>);</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> </div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & CGNR)</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> {</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vector update">v_iter</a>);</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48" title="residual of normal equation of first kind">z_hat_iter</a>);</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> }</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="keywordflow">if</span>(ths-><a class="code" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4" title="iteration type">flags</a> & STEEPEST_DESCENT)</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2" title="residual vector update">v_iter</a>);</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> </div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677" title="search direction">p_hat_iter</a>);</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1" title="iterative solution">f_hat_iter</a>);</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183" title="iterated residual vector">r_iter</a>);</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structsolver__plan__double.html#accc401c5912fe60922d4ce2b30132e18" title="right hand side, samples">y</a>);</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> } </div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/solver__adjoint_8h.html b/doc/api/html/solver__adjoint_8h.html
new file mode 100644
index 0000000..5edcaca
--- /dev/null
+++ b/doc/api/html/solver__adjoint_8h.html
@@ -0,0 +1,1052 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - solver_adjoint.h File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">solver_adjoint.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Header file for adjoint solver.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+</div>
+<p><a href="solver__adjoint_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html">infsft_adjoint_plan</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">TODO: different solvers. <a href="structinfsft__adjoint__plan.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html">infft_adjoint_plan</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for an adjoint transform plan. <a href="structinfft__adjoint__plan.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html">infct_adjoint_plan</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for an adjoint transform plan. <a href="structinfct__adjoint__plan.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html">infst_adjoint_plan</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for an adjoint transform plan. <a href="structinfst__adjoint__plan.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html">innfft_adjoint_plan</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for an adjoint transform plan. <a href="structinnfft__adjoint__plan.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html">imri_inh_2d1d_adjoint_plan</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for an adjoint transform plan. <a href="structimri__inh__2d1d__adjoint__plan.html#details">More...</a><br/></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html">imri_inh_3d_adjoint_plan</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for an adjoint transform plan. <a href="structimri__inh__3d__adjoint__plan.html#details">More...</a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ab0b31397c6f400b1f58af9f1c7b7b637"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637">MACRO_SOLVER_ADJOINT_PLAN</a>(MV, FLT, FLT_TYPE)</td></tr>
+<tr class="memdesc:ab0b31397c6f400b1f58af9f1c7b7b637"><td class="mdescLeft"> </td><td class="mdescRight">Include NFFT3 header. <a href="#ab0b31397c6f400b1f58af9f1c7b7b637"></a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a040cb361de66313ccbad17f746cc748d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a040cb361de66313ccbad17f746cc748d">infsft_adjoint_init</a> (adjointnfsft_plan *ths, <a class="el" href="structnfsft__plan.html">nfsft_plan</a> *mv)</td></tr>
+<tr class="memdesc:a040cb361de66313ccbad17f746cc748d"><td class="mdescLeft"> </td><td class="mdescRight">Simple initialisation. <a href="#a040cb361de66313ccbad17f746cc748d"></a><br/></td></tr>
+<tr class="memitem:a0a162589cc358719488082d0b3e42e0e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a0a162589cc358719488082d0b3e42e0e">infsft_adjoint_init_advanced</a> (adjointnfsft_plan *ths, <a class="el" href="structnfsft__plan.html">nfsft_plan</a>,*mv, unsigned adjointnfsft_flags)</td></tr>
+<tr class="memdesc:a0a162589cc358719488082d0b3e42e0e"><td class="mdescLeft"> </td><td class="mdescRight">Advanced initialisation. <a href="#a0a162589cc358719488082d0b3e42e0e"></a><br/></td></tr>
+<tr class="memitem:a26dbcae80a2db01144d523cb3d22a01d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a26dbcae80a2db01144d523cb3d22a01d">infsft_adjoint_before_loop</a> (adjointnfsft_plan *ths)</td></tr>
+<tr class="memdesc:a26dbcae80a2db01144d523cb3d22a01d"><td class="mdescLeft"> </td><td class="mdescRight">Setting up residuals before the actual iteration. <a href="#a26dbcae80a2db01144d523cb3d22a01d"></a><br/></td></tr>
+<tr class="memitem:a03fc19c8d3c7b8a49c8751a2a88e0d09"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a03fc19c8d3c7b8a49c8751a2a88e0d09">infsft_adjoint_loop_one_step</a> (adjointnfsft_plan *ths)</td></tr>
+<tr class="memdesc:a03fc19c8d3c7b8a49c8751a2a88e0d09"><td class="mdescLeft"> </td><td class="mdescRight">Doing one step in the iteration. <a href="#a03fc19c8d3c7b8a49c8751a2a88e0d09"></a><br/></td></tr>
+<tr class="memitem:adb479e2343fef9fbafdc5d8d65085aee"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#adb479e2343fef9fbafdc5d8d65085aee">infsft_adjoint_finalize</a> (adjointnfsft_plan *ths)</td></tr>
+<tr class="memdesc:adb479e2343fef9fbafdc5d8d65085aee"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the plan for the adjoint transform. <a href="#adb479e2343fef9fbafdc5d8d65085aee"></a><br/></td></tr>
+<tr class="memitem:ae93aa72dcb2528111f021c952482c244"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#ae93aa72dcb2528111f021c952482c244">infft_adjoint_init</a> (adjointnfft_plan *ths, <a class="el" href="structnfft__plan.html">nfft_plan</a> *mv)</td></tr>
+<tr class="memdesc:ae93aa72dcb2528111f021c952482c244"><td class="mdescLeft"> </td><td class="mdescRight">Simple initialisation. <a href="#ae93aa72dcb2528111f021c952482c244"></a><br/></td></tr>
+<tr class="memitem:adf47a7ff42ca521526db42b4d3a68f98"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#adf47a7ff42ca521526db42b4d3a68f98">infft_adjoint_init_advanced</a> (adjointnfft_plan *ths, <a class="el" href="structnfft__plan.html">nfft_plan</a>,*mv, unsigned adjointnfft_flags)</td></tr>
+<tr class="memdesc:adf47a7ff42ca521526db42b4d3a68f98"><td class="mdescLeft"> </td><td class="mdescRight">Advanced initialisation. <a href="#adf47a7ff42ca521526db42b4d3a68f98"></a><br/></td></tr>
+<tr class="memitem:a2a31ddf66394b88a4dd1545278e205b5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a2a31ddf66394b88a4dd1545278e205b5">infft_adjoint_before_loop</a> (adjointnfft_plan *ths)</td></tr>
+<tr class="memdesc:a2a31ddf66394b88a4dd1545278e205b5"><td class="mdescLeft"> </td><td class="mdescRight">Setting up residuals before the actual iteration. <a href="#a2a31ddf66394b88a4dd1545278e205b5"></a><br/></td></tr>
+<tr class="memitem:a219ff15a153205b04eec76860cb4d6eb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a219ff15a153205b04eec76860cb4d6eb">infft_adjoint_loop_one_step</a> (adjointnfft_plan *ths)</td></tr>
+<tr class="memdesc:a219ff15a153205b04eec76860cb4d6eb"><td class="mdescLeft"> </td><td class="mdescRight">Doing one step in the iteration. <a href="#a219ff15a153205b04eec76860cb4d6eb"></a><br/></td></tr>
+<tr class="memitem:a826591281cbec37c2a032eaecbbacf9d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a826591281cbec37c2a032eaecbbacf9d">infft_adjoint_finalize</a> (adjointnfft_plan *ths)</td></tr>
+<tr class="memdesc:a826591281cbec37c2a032eaecbbacf9d"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the plan for the adjoint transform. <a href="#a826591281cbec37c2a032eaecbbacf9d"></a><br/></td></tr>
+<tr class="memitem:a695c20cc98df4bbd370240bee9703e77"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a695c20cc98df4bbd370240bee9703e77">infct_adjoint_init</a> (adjointnfct_plan *ths, <a class="el" href="structnfct__plan.html">nfct_plan</a> *mv)</td></tr>
+<tr class="memdesc:a695c20cc98df4bbd370240bee9703e77"><td class="mdescLeft"> </td><td class="mdescRight">Simple initialisation. <a href="#a695c20cc98df4bbd370240bee9703e77"></a><br/></td></tr>
+<tr class="memitem:a4fcee80a5fbbe901b8d51717dc07ae24"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a4fcee80a5fbbe901b8d51717dc07ae24">infct_adjoint_init_advanced</a> (adjointnfct_plan *ths, <a class="el" href="structnfct__plan.html">nfct_plan</a>,*mv, unsigned adjointnfct_flags)</td></tr>
+<tr class="memdesc:a4fcee80a5fbbe901b8d51717dc07ae24"><td class="mdescLeft"> </td><td class="mdescRight">Advanced initialisation. <a href="#a4fcee80a5fbbe901b8d51717dc07ae24"></a><br/></td></tr>
+<tr class="memitem:a7bfc5594bbdc3d6c58fb10713a03bc40"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a7bfc5594bbdc3d6c58fb10713a03bc40">infct_adjoint_before_loop</a> (adjointnfct_plan *ths)</td></tr>
+<tr class="memdesc:a7bfc5594bbdc3d6c58fb10713a03bc40"><td class="mdescLeft"> </td><td class="mdescRight">Setting up residuals before the actual iteration. <a href="#a7bfc5594bbdc3d6c58fb10713a03bc40"></a><br/></td></tr>
+<tr class="memitem:a36eef8da31026b71a865108b095768cc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a36eef8da31026b71a865108b095768cc">infct_adjoint_loop_one_step</a> (adjointnfct_plan *ths)</td></tr>
+<tr class="memdesc:a36eef8da31026b71a865108b095768cc"><td class="mdescLeft"> </td><td class="mdescRight">Doing one step in the iteration. <a href="#a36eef8da31026b71a865108b095768cc"></a><br/></td></tr>
+<tr class="memitem:a48c89f97b3f452ee3aedb245d064f24e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a48c89f97b3f452ee3aedb245d064f24e">infct_adjoint_finalize</a> (adjointnfct_plan *ths)</td></tr>
+<tr class="memdesc:a48c89f97b3f452ee3aedb245d064f24e"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the plan for the adjoint transform. <a href="#a48c89f97b3f452ee3aedb245d064f24e"></a><br/></td></tr>
+<tr class="memitem:a332fad4381e89b483482e53fa39604e3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a332fad4381e89b483482e53fa39604e3">infst_adjoint_init</a> (adjointnfst_plan *ths, <a class="el" href="structnfst__plan.html">nfst_plan</a> *mv)</td></tr>
+<tr class="memdesc:a332fad4381e89b483482e53fa39604e3"><td class="mdescLeft"> </td><td class="mdescRight">Simple initialisation. <a href="#a332fad4381e89b483482e53fa39604e3"></a><br/></td></tr>
+<tr class="memitem:ac5ad72ccf1af482d623242389bc154b2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#ac5ad72ccf1af482d623242389bc154b2">infst_adjoint_init_advanced</a> (adjointnfst_plan *ths, <a class="el" href="structnfst__plan.html">nfst_plan</a>,*mv, unsigned adjointnfst_flags)</td></tr>
+<tr class="memdesc:ac5ad72ccf1af482d623242389bc154b2"><td class="mdescLeft"> </td><td class="mdescRight">Advanced initialisation. <a href="#ac5ad72ccf1af482d623242389bc154b2"></a><br/></td></tr>
+<tr class="memitem:a4a5720df6bfee236588f38e516e32c90"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a4a5720df6bfee236588f38e516e32c90">infst_adjoint_before_loop</a> (adjointnfst_plan *ths)</td></tr>
+<tr class="memdesc:a4a5720df6bfee236588f38e516e32c90"><td class="mdescLeft"> </td><td class="mdescRight">Setting up residuals before the actual iteration. <a href="#a4a5720df6bfee236588f38e516e32c90"></a><br/></td></tr>
+<tr class="memitem:a57df76147b89e6e204a465fd437fbaae"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a57df76147b89e6e204a465fd437fbaae">infst_adjoint_loop_one_step</a> (adjointnfst_plan *ths)</td></tr>
+<tr class="memdesc:a57df76147b89e6e204a465fd437fbaae"><td class="mdescLeft"> </td><td class="mdescRight">Doing one step in the iteration. <a href="#a57df76147b89e6e204a465fd437fbaae"></a><br/></td></tr>
+<tr class="memitem:a086451cc556027d5e909eb7d1c1249b7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a086451cc556027d5e909eb7d1c1249b7">infst_adjoint_finalize</a> (adjointnfst_plan *ths)</td></tr>
+<tr class="memdesc:a086451cc556027d5e909eb7d1c1249b7"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the plan for the adjoint transform. <a href="#a086451cc556027d5e909eb7d1c1249b7"></a><br/></td></tr>
+<tr class="memitem:ab4dcbe373e99d9c010034c6eecdfea86"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#ab4dcbe373e99d9c010034c6eecdfea86">innfft_adjoint_init</a> (adjointnnfft_plan *ths, <a class="el" href="structnnfft__plan.html">nnfft_plan</a> *mv)</td></tr>
+<tr class="memdesc:ab4dcbe373e99d9c010034c6eecdfea86"><td class="mdescLeft"> </td><td class="mdescRight">Simple initialisation. <a href="#ab4dcbe373e99d9c010034c6eecdfea86"></a><br/></td></tr>
+<tr class="memitem:aac4fe9056cb5a96170ba6122e20d116a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#aac4fe9056cb5a96170ba6122e20d116a">innfft_adjoint_init_advanced</a> (adjointnnfft_plan *ths, <a class="el" href="structnnfft__plan.html">nnfft_plan</a>,*mv, unsigned adjointnnfft_flags)</td></tr>
+<tr class="memdesc:aac4fe9056cb5a96170ba6122e20d116a"><td class="mdescLeft"> </td><td class="mdescRight">Advanced initialisation. <a href="#aac4fe9056cb5a96170ba6122e20d116a"></a><br/></td></tr>
+<tr class="memitem:a3c7be955a46b3d056b5d38324f2d2068"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a3c7be955a46b3d056b5d38324f2d2068">innfft_adjoint_before_loop</a> (adjointnnfft_plan *ths)</td></tr>
+<tr class="memdesc:a3c7be955a46b3d056b5d38324f2d2068"><td class="mdescLeft"> </td><td class="mdescRight">Setting up residuals before the actual iteration. <a href="#a3c7be955a46b3d056b5d38324f2d2068"></a><br/></td></tr>
+<tr class="memitem:a9e80774fcedbd2a50e4146290de9ce3f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a9e80774fcedbd2a50e4146290de9ce3f">innfft_adjoint_loop_one_step</a> (adjointnnfft_plan *ths)</td></tr>
+<tr class="memdesc:a9e80774fcedbd2a50e4146290de9ce3f"><td class="mdescLeft"> </td><td class="mdescRight">Doing one step in the iteration. <a href="#a9e80774fcedbd2a50e4146290de9ce3f"></a><br/></td></tr>
+<tr class="memitem:a1316a1ad32f611899e446cd98d3b0b0d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a1316a1ad32f611899e446cd98d3b0b0d">innfft_adjoint_finalize</a> (adjointnnfft_plan *ths)</td></tr>
+<tr class="memdesc:a1316a1ad32f611899e446cd98d3b0b0d"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the plan for the adjoint transform. <a href="#a1316a1ad32f611899e446cd98d3b0b0d"></a><br/></td></tr>
+<tr class="memitem:ae0f7ba8180888f8f70aff1b041f4ec57"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#ae0f7ba8180888f8f70aff1b041f4ec57">imri_inh_2d1d_adjoint_init</a> (adjointmri_inh_2d1d_plan *ths, <a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> *mv)</td></tr>
+<tr class="memdesc:ae0f7ba8180888f8f70aff1b041f4ec57"><td class="mdescLeft"> </td><td class="mdescRight">Simple initialisation. <a href="#ae0f7ba8180888f8f70aff1b041f4ec57"></a><br/></td></tr>
+<tr class="memitem:a61bb41310d86e96ad1912ce486930bea"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a61bb41310d86e96ad1912ce486930bea">imri_inh_2d1d_adjoint_init_advanced</a> (adjointmri_inh_2d1d_plan *ths, <a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a>,*mv, unsigned adjointmri_inh_2d1d_flags)</td></tr>
+<tr class="memdesc:a61bb41310d86e96ad1912ce486930bea"><td class="mdescLeft"> </td><td class="mdescRight">Advanced initialisation. <a href="#a61bb41310d86e96ad1912ce486930bea"></a><br/></td></tr>
+<tr class="memitem:a39cce38619ea8d9ce84326173e2d091b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a39cce38619ea8d9ce84326173e2d091b">imri_inh_2d1d_adjoint_before_loop</a> (adjointmri_inh_2d1d_plan *ths)</td></tr>
+<tr class="memdesc:a39cce38619ea8d9ce84326173e2d091b"><td class="mdescLeft"> </td><td class="mdescRight">Setting up residuals before the actual iteration. <a href="#a39cce38619ea8d9ce84326173e2d091b"></a><br/></td></tr>
+<tr class="memitem:a84b7c58708fe95ff8234638689a30302"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a84b7c58708fe95ff8234638689a30302">imri_inh_2d1d_adjoint_loop_one_step</a> (adjointmri_inh_2d1d_plan *ths)</td></tr>
+<tr class="memdesc:a84b7c58708fe95ff8234638689a30302"><td class="mdescLeft"> </td><td class="mdescRight">Doing one step in the iteration. <a href="#a84b7c58708fe95ff8234638689a30302"></a><br/></td></tr>
+<tr class="memitem:a7b403058cdba0d2918690b2d1d577912"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a7b403058cdba0d2918690b2d1d577912">imri_inh_2d1d_adjoint_finalize</a> (adjointmri_inh_2d1d_plan *ths)</td></tr>
+<tr class="memdesc:a7b403058cdba0d2918690b2d1d577912"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the plan for the adjoint transform. <a href="#a7b403058cdba0d2918690b2d1d577912"></a><br/></td></tr>
+<tr class="memitem:a6275d93dac2957a4acad3bda978c98cd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a6275d93dac2957a4acad3bda978c98cd">imri_inh_3d_adjoint_init</a> (adjointmri_inh_3d_plan *ths, <a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> *mv)</td></tr>
+<tr class="memdesc:a6275d93dac2957a4acad3bda978c98cd"><td class="mdescLeft"> </td><td class="mdescRight">Simple initialisation. <a href="#a6275d93dac2957a4acad3bda978c98cd"></a><br/></td></tr>
+<tr class="memitem:afb6ade8e78c1dfdc7e513c6e8fa7ffb6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#afb6ade8e78c1dfdc7e513c6e8fa7ffb6">imri_inh_3d_adjoint_init_advanced</a> (adjointmri_inh_3d_plan *ths, <a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a>,*mv, unsigned adjointmri_inh_3d_flags)</td></tr>
+<tr class="memdesc:afb6ade8e78c1dfdc7e513c6e8fa7ffb6"><td class="mdescLeft"> </td><td class="mdescRight">Advanced initialisation. <a href="#afb6ade8e78c1dfdc7e513c6e8fa7ffb6"></a><br/></td></tr>
+<tr class="memitem:a9a8864136de1ff61970eeed934350238"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a9a8864136de1ff61970eeed934350238">imri_inh_3d_adjoint_before_loop</a> (adjointmri_inh_3d_plan *ths)</td></tr>
+<tr class="memdesc:a9a8864136de1ff61970eeed934350238"><td class="mdescLeft"> </td><td class="mdescRight">Setting up residuals before the actual iteration. <a href="#a9a8864136de1ff61970eeed934350238"></a><br/></td></tr>
+<tr class="memitem:a7e65b366bd5003cef9c16e640591b972"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a7e65b366bd5003cef9c16e640591b972">imri_inh_3d_adjoint_loop_one_step</a> (adjointmri_inh_3d_plan *ths)</td></tr>
+<tr class="memdesc:a7e65b366bd5003cef9c16e640591b972"><td class="mdescLeft"> </td><td class="mdescRight">Doing one step in the iteration. <a href="#a7e65b366bd5003cef9c16e640591b972"></a><br/></td></tr>
+<tr class="memitem:a48c6fe11c01d742025c7eb7bf7ac9002"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="solver__adjoint_8h.html#a48c6fe11c01d742025c7eb7bf7ac9002">imri_inh_3d_adjoint_finalize</a> (adjointmri_inh_3d_plan *ths)</td></tr>
+<tr class="memdesc:a48c6fe11c01d742025c7eb7bf7ac9002"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the plan for the adjoint transform. <a href="#a48c6fe11c01d742025c7eb7bf7ac9002"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Header file for adjoint solver. </p>
+
+<p>Definition in file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+</div><hr/><h2>Macro Definition Documentation</h2>
+<a class="anchor" id="ab0b31397c6f400b1f58af9f1c7b7b637"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MACRO_SOLVER_ADJOINT_PLAN</td>
+ <td>(</td>
+ <td class="paramtype"> </td>
+ <td class="paramname">MV, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">FLT, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"> </td>
+ <td class="paramname">FLT_TYPE </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Include NFFT3 header. </p>
+
+<p>Definition at line <a class="el" href="solver__adjoint_8h_source.html#l00035">35</a> of file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a040cb361de66313ccbad17f746cc748d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infsft_adjoint_init </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfsft_plan * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structnfsft__plan.html">nfsft_plan</a> * </td>
+ <td class="paramname"><em>mv</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Simple initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a0a162589cc358719488082d0b3e42e0e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infsft_adjoint_init_advanced </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfsft_plan * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structnfsft__plan.html">nfsft_plan</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">* </td>
+ <td class="paramname"><em>mv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned </td>
+ <td class="paramname"><em>adjointnfsft_flags</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Advanced initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a26dbcae80a2db01144d523cb3d22a01d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infsft_adjoint_before_loop </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfsft_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Setting up residuals before the actual iteration. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="a03fc19c8d3c7b8a49c8751a2a88e0d09"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infsft_adjoint_loop_one_step </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfsft_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Doing one step in the iteration. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="adb479e2343fef9fbafdc5d8d65085aee"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infsft_adjoint_finalize </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfsft_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Destroys the plan for the adjoint transform. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="ae93aa72dcb2528111f021c952482c244"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infft_adjoint_init </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfft_plan * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structnfft__plan.html">nfft_plan</a> * </td>
+ <td class="paramname"><em>mv</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Simple initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="adf47a7ff42ca521526db42b4d3a68f98"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infft_adjoint_init_advanced </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfft_plan * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structnfft__plan.html">nfft_plan</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">* </td>
+ <td class="paramname"><em>mv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned </td>
+ <td class="paramname"><em>adjointnfft_flags</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Advanced initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a2a31ddf66394b88a4dd1545278e205b5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infft_adjoint_before_loop </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfft_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Setting up residuals before the actual iteration. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="a219ff15a153205b04eec76860cb4d6eb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infft_adjoint_loop_one_step </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfft_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Doing one step in the iteration. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="a826591281cbec37c2a032eaecbbacf9d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infft_adjoint_finalize </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfft_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Destroys the plan for the adjoint transform. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="a695c20cc98df4bbd370240bee9703e77"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infct_adjoint_init </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfct_plan * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structnfct__plan.html">nfct_plan</a> * </td>
+ <td class="paramname"><em>mv</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Simple initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a4fcee80a5fbbe901b8d51717dc07ae24"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infct_adjoint_init_advanced </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfct_plan * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structnfct__plan.html">nfct_plan</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">* </td>
+ <td class="paramname"><em>mv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned </td>
+ <td class="paramname"><em>adjointnfct_flags</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Advanced initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a7bfc5594bbdc3d6c58fb10713a03bc40"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infct_adjoint_before_loop </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfct_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Setting up residuals before the actual iteration. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="a36eef8da31026b71a865108b095768cc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infct_adjoint_loop_one_step </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfct_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Doing one step in the iteration. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="a48c89f97b3f452ee3aedb245d064f24e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infct_adjoint_finalize </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfct_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Destroys the plan for the adjoint transform. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="a332fad4381e89b483482e53fa39604e3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infst_adjoint_init </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfst_plan * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structnfst__plan.html">nfst_plan</a> * </td>
+ <td class="paramname"><em>mv</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Simple initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="ac5ad72ccf1af482d623242389bc154b2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infst_adjoint_init_advanced </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfst_plan * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structnfst__plan.html">nfst_plan</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">* </td>
+ <td class="paramname"><em>mv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned </td>
+ <td class="paramname"><em>adjointnfst_flags</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Advanced initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a4a5720df6bfee236588f38e516e32c90"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infst_adjoint_before_loop </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfst_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Setting up residuals before the actual iteration. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="a57df76147b89e6e204a465fd437fbaae"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infst_adjoint_loop_one_step </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfst_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Doing one step in the iteration. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="a086451cc556027d5e909eb7d1c1249b7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void infst_adjoint_finalize </td>
+ <td>(</td>
+ <td class="paramtype">adjointnfst_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Destroys the plan for the adjoint transform. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="ab4dcbe373e99d9c010034c6eecdfea86"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void innfft_adjoint_init </td>
+ <td>(</td>
+ <td class="paramtype">adjointnnfft_plan * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structnnfft__plan.html">nnfft_plan</a> * </td>
+ <td class="paramname"><em>mv</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Simple initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="aac4fe9056cb5a96170ba6122e20d116a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void innfft_adjoint_init_advanced </td>
+ <td>(</td>
+ <td class="paramtype">adjointnnfft_plan * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structnnfft__plan.html">nnfft_plan</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">* </td>
+ <td class="paramname"><em>mv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned </td>
+ <td class="paramname"><em>adjointnnfft_flags</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Advanced initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3c7be955a46b3d056b5d38324f2d2068"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void innfft_adjoint_before_loop </td>
+ <td>(</td>
+ <td class="paramtype">adjointnnfft_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Setting up residuals before the actual iteration. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="a9e80774fcedbd2a50e4146290de9ce3f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void innfft_adjoint_loop_one_step </td>
+ <td>(</td>
+ <td class="paramtype">adjointnnfft_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Doing one step in the iteration. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="a1316a1ad32f611899e446cd98d3b0b0d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void innfft_adjoint_finalize </td>
+ <td>(</td>
+ <td class="paramtype">adjointnnfft_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Destroys the plan for the adjoint transform. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="ae0f7ba8180888f8f70aff1b041f4ec57"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void imri_inh_2d1d_adjoint_init </td>
+ <td>(</td>
+ <td class="paramtype">adjointmri_inh_2d1d_plan * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> * </td>
+ <td class="paramname"><em>mv</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Simple initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a61bb41310d86e96ad1912ce486930bea"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void imri_inh_2d1d_adjoint_init_advanced </td>
+ <td>(</td>
+ <td class="paramtype">adjointmri_inh_2d1d_plan * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">* </td>
+ <td class="paramname"><em>mv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned </td>
+ <td class="paramname"><em>adjointmri_inh_2d1d_flags</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Advanced initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a39cce38619ea8d9ce84326173e2d091b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void imri_inh_2d1d_adjoint_before_loop </td>
+ <td>(</td>
+ <td class="paramtype">adjointmri_inh_2d1d_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Setting up residuals before the actual iteration. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="a84b7c58708fe95ff8234638689a30302"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void imri_inh_2d1d_adjoint_loop_one_step </td>
+ <td>(</td>
+ <td class="paramtype">adjointmri_inh_2d1d_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Doing one step in the iteration. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="a7b403058cdba0d2918690b2d1d577912"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void imri_inh_2d1d_adjoint_finalize </td>
+ <td>(</td>
+ <td class="paramtype">adjointmri_inh_2d1d_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Destroys the plan for the adjoint transform. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="a6275d93dac2957a4acad3bda978c98cd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void imri_inh_3d_adjoint_init </td>
+ <td>(</td>
+ <td class="paramtype">adjointmri_inh_3d_plan * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> * </td>
+ <td class="paramname"><em>mv</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Simple initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="afb6ade8e78c1dfdc7e513c6e8fa7ffb6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void imri_inh_3d_adjoint_init_advanced </td>
+ <td>(</td>
+ <td class="paramtype">adjointmri_inh_3d_plan * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">* </td>
+ <td class="paramname"><em>mv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned </td>
+ <td class="paramname"><em>adjointmri_inh_3d_flags</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Advanced initialisation. </p>
+
+</div>
+</div>
+<a class="anchor" id="a9a8864136de1ff61970eeed934350238"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void imri_inh_3d_adjoint_before_loop </td>
+ <td>(</td>
+ <td class="paramtype">adjointmri_inh_3d_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Setting up residuals before the actual iteration. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="a7e65b366bd5003cef9c16e640591b972"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void imri_inh_3d_adjoint_loop_one_step </td>
+ <td>(</td>
+ <td class="paramtype">adjointmri_inh_3d_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Doing one step in the iteration. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+<a class="anchor" id="a48c6fe11c01d742025c7eb7bf7ac9002"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void imri_inh_3d_adjoint_finalize </td>
+ <td>(</td>
+ <td class="paramtype">adjointmri_inh_3d_plan * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Destroys the plan for the adjoint transform. </p>
+<pre class="fragment"> </pre>
+</div>
+</div>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/solver__adjoint_8h_source.html b/doc/api/html/solver__adjoint_8h_source.html
new file mode 100644
index 0000000..a67c9a0
--- /dev/null
+++ b/doc/api/html/solver__adjoint_8h_source.html
@@ -0,0 +1,133 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - solver_adjoint.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">solver_adjoint.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="solver__adjoint_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: solver_adjoint.h 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifndef SOLVER_ADJOINT_H</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span><span class="preprocessor">#define SOLVER_ADJOINT_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * Macro for mangling an adjoint transform.</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> * temporary added 01.2007 by tim becker</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> \</div>
+<div class="line"><a name="l00035"></a><span class="lineno"><a class="code" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637"> 35</a></span> <span class="preprocessor">#define MACRO_SOLVER_ADJOINT_PLAN(MV, FLT, FLT_TYPE) \</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">typedef struct \</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">{ \</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor"> MV ## _plan *mv; \</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor"> unsigned flags; \</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"> double *w; \</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor"> double *w_hat; \</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"> FLT_TYPE *y_hat; \</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"> FLT_TYPE *f_iter; \</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"> FLT_TYPE *r_hat_iter; \</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor"> FLT_TYPE *z_iter; \</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor"> FLT_TYPE *p_iter; \</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor"> FLT_TYPE *v_hat_iter; \</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor"> double alpha_iter; \</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"> double beta_iter; \</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor"> double dot_r_hat_iter; \</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor"> double dot_r_hat_iter_old; \</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"> double dot_z_iter; \</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor"> double dot_z_iter_old; \</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"> double dot_p_iter; \</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor"> double dot_v_hat_iter; \</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor">} i ## MV ## _adjoint_plan; \</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor">void i ## MV ## _adjoint_init(adjoint ## MV ## _plan *ths, MV ## _plan *mv); \</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor">void i ## MV ## _adjoint_init_advanced(adjoint ## MV ## _plan *ths, MV ## _plan,\</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">*mv, unsigned adjoint ## MV ## _flags); \</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor">void i ## MV ## _adjoint_before_loop(adjoint ## MV ## _plan *ths); \</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor">void i ## MV ## _adjoint_loop_one_step(adjoint ## MV ## _plan *ths); \</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="preprocessor">\</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="structinfsft__adjoint__plan.html#a2c01ce7b85130d3069016e30b4a1685e"> 78</a></span> <span class="preprocessor">void i ## MV ## _adjoint_finalize(adjoint ## MV ## _plan *ths); \</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="code" href="structinfft__adjoint__plan.html#a0f6a4a61889385e975380802617ade31"> 79</a></span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="structinfct__adjoint__plan.html#a5b1da212f8c15d7ca209dbe347a5ec8f"> 80</a></span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="code" href="structinfst__adjoint__plan.html#a254d587d2d91f18fb55a2ccae89198a5"> 81</a></span> <a class="code" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637" title="Include NFFT3 header.">MACRO_SOLVER_ADJOINT_PLAN</a>(nfsft, complex, <span class="keywordtype">double</span> _Complex)</div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="code" href="structinnfft__adjoint__plan.html#a4a4aac08b2efbcbc13545a08bb397f52"> 82</a></span> <a class="code" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637" title="Include NFFT3 header.">MACRO_SOLVER_ADJOINT_PLAN</a>(nfft, complex, <span class="keywordtype">double</span> _Complex)</div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="structimri__inh__2d1d__adjoint__plan.html#a2e2d8f1f1a6a7500c1689cf5021abcde"> 83</a></span> <a class="code" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637" title="Include NFFT3 header.">MACRO_SOLVER_ADJOINT_PLAN</a>(nfct, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="code" href="structimri__inh__3d__adjoint__plan.html#a0efcec4db642e9066fbc64c1c70bc079"> 84</a></span> <a class="code" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637" title="Include NFFT3 header.">MACRO_SOLVER_ADJOINT_PLAN</a>(nfst, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>)</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <a class="code" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637" title="Include NFFT3 header.">MACRO_SOLVER_ADJOINT_PLAN</a>(nnfft, complex, <span class="keywordtype">double</span> _Complex)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <a class="code" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637" title="Include NFFT3 header.">MACRO_SOLVER_ADJOINT_PLAN</a>(mri_inh_2d1d, complex, <span class="keywordtype">double</span> _Complex)</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <a class="code" href="solver__adjoint_8h.html#ab0b31397c6f400b1f58af9f1c7b7b637" title="Include NFFT3 header.">MACRO_SOLVER_ADJOINT_PLAN</a>(mri_inh_3d, complex, <span class="keywordtype">double</span> _Complex)</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor"></span><span class="comment">/* solver_adjoint.h */</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structfastsum__plan__.html b/doc/api/html/structfastsum__plan__.html
new file mode 100644
index 0000000..dc3b4ac
--- /dev/null
+++ b/doc/api/html/structfastsum__plan__.html
@@ -0,0 +1,229 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fastsum_plan_ Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">fastsum_plan_ Struct Reference<div class="ingroups"><a class="el" href="group__applications__fastsum.html">Fast summation</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>plan for fast summation algorithm
+ <a href="structfastsum__plan__.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="fastsum_8h_source.html">fastsum.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ad70ee163a195c108d0a5510a8407a307"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#ad70ee163a195c108d0a5510a8407a307">d</a></td></tr>
+<tr class="memdesc:ad70ee163a195c108d0a5510a8407a307"><td class="mdescLeft"> </td><td class="mdescRight">api <a href="#ad70ee163a195c108d0a5510a8407a307"></a><br/></td></tr>
+<tr class="memitem:a179b7193adbfbecb48c91c11c42b2976"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a179b7193adbfbecb48c91c11c42b2976"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a179b7193adbfbecb48c91c11c42b2976">N_total</a></td></tr>
+<tr class="memdesc:a179b7193adbfbecb48c91c11c42b2976"><td class="mdescLeft"> </td><td class="mdescRight">number of source knots <br/></td></tr>
+<tr class="memitem:a1e80d12f6ed1d6a310dbd4fc429e6a2f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e80d12f6ed1d6a310dbd4fc429e6a2f"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a1e80d12f6ed1d6a310dbd4fc429e6a2f">M_total</a></td></tr>
+<tr class="memdesc:a1e80d12f6ed1d6a310dbd4fc429e6a2f"><td class="mdescLeft"> </td><td class="mdescRight">number of target knots <br/></td></tr>
+<tr class="memitem:ac764b85b6a7d88f44e24fcf065723087"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac764b85b6a7d88f44e24fcf065723087"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#ac764b85b6a7d88f44e24fcf065723087">alpha</a></td></tr>
+<tr class="memdesc:ac764b85b6a7d88f44e24fcf065723087"><td class="mdescLeft"> </td><td class="mdescRight">source coefficients <br/></td></tr>
+<tr class="memitem:a83abf01817c3c90d84e181369c7a172a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83abf01817c3c90d84e181369c7a172a"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a83abf01817c3c90d84e181369c7a172a">f</a></td></tr>
+<tr class="memdesc:a83abf01817c3c90d84e181369c7a172a"><td class="mdescLeft"> </td><td class="mdescRight">target evaluations <br/></td></tr>
+<tr class="memitem:a8220159dd047b9800820840154ec6b91"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8220159dd047b9800820840154ec6b91"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a8220159dd047b9800820840154ec6b91">x</a></td></tr>
+<tr class="memdesc:a8220159dd047b9800820840154ec6b91"><td class="mdescLeft"> </td><td class="mdescRight">source knots in d-ball with radius 1/4-eps_b/2 <br/></td></tr>
+<tr class="memitem:a6eb18076208d1ef3f012681ec73c0b51"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6eb18076208d1ef3f012681ec73c0b51"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a6eb18076208d1ef3f012681ec73c0b51">y</a></td></tr>
+<tr class="memdesc:a6eb18076208d1ef3f012681ec73c0b51"><td class="mdescLeft"> </td><td class="mdescRight">target knots in d-ball with radius 1/4-eps_b/2 <br/></td></tr>
+<tr class="memitem:aaf4ea39f8bed50a000d83eec53ee42b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf4ea39f8bed50a000d83eec53ee42b8"></a>
+kernel </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#aaf4ea39f8bed50a000d83eec53ee42b8">k</a></td></tr>
+<tr class="memdesc:aaf4ea39f8bed50a000d83eec53ee42b8"><td class="mdescLeft"> </td><td class="mdescRight">kernel function <br/></td></tr>
+<tr class="memitem:a37cbe7b34fce3f90419fb45ab74aaa34"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a37cbe7b34fce3f90419fb45ab74aaa34"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a37cbe7b34fce3f90419fb45ab74aaa34">kernel_param</a></td></tr>
+<tr class="memdesc:a37cbe7b34fce3f90419fb45ab74aaa34"><td class="mdescLeft"> </td><td class="mdescRight">parameters for kernel function <br/></td></tr>
+<tr class="memitem:ab8680533cc667f052c9c83275e0756fa"><td class="memItemLeft" align="right" valign="top">unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#ab8680533cc667f052c9c83275e0756fa">flags</a></td></tr>
+<tr class="memdesc:ab8680533cc667f052c9c83275e0756fa"><td class="mdescLeft"> </td><td class="mdescRight">flags precomp. <a href="#ab8680533cc667f052c9c83275e0756fa"></a><br/></td></tr>
+<tr class="memitem:a2ac8e8bdf57c75a916b1f4ef36ca513e"><td class="memItemLeft" align="right" valign="top">double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a2ac8e8bdf57c75a916b1f4ef36ca513e">pre_K</a></td></tr>
+<tr class="memdesc:a2ac8e8bdf57c75a916b1f4ef36ca513e"><td class="mdescLeft"> </td><td class="mdescRight">internal <a href="#a2ac8e8bdf57c75a916b1f4ef36ca513e"></a><br/></td></tr>
+<tr class="memitem:a271a9a4e952484997e902c5cbd5ff084"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a271a9a4e952484997e902c5cbd5ff084">n</a></td></tr>
+<tr class="memdesc:a271a9a4e952484997e902c5cbd5ff084"><td class="mdescLeft"> </td><td class="mdescRight">FS__ - fast summation. <a href="#a271a9a4e952484997e902c5cbd5ff084"></a><br/></td></tr>
+<tr class="memitem:a56edb14f8b403f24bbc1dc69dd3ee972"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56edb14f8b403f24bbc1dc69dd3ee972"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a56edb14f8b403f24bbc1dc69dd3ee972">b</a></td></tr>
+<tr class="memdesc:a56edb14f8b403f24bbc1dc69dd3ee972"><td class="mdescLeft"> </td><td class="mdescRight">expansion coefficients <br/></td></tr>
+<tr class="memitem:a236982e68b9354c7edb47eeff18e05bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a236982e68b9354c7edb47eeff18e05bf"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a236982e68b9354c7edb47eeff18e05bf">p</a></td></tr>
+<tr class="memdesc:a236982e68b9354c7edb47eeff18e05bf"><td class="mdescLeft"> </td><td class="mdescRight">degree of smoothness of regularization <br/></td></tr>
+<tr class="memitem:a9b371cdd9501d570bef3f6cf06edadf6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9b371cdd9501d570bef3f6cf06edadf6"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a9b371cdd9501d570bef3f6cf06edadf6">eps_I</a></td></tr>
+<tr class="memdesc:a9b371cdd9501d570bef3f6cf06edadf6"><td class="mdescLeft"> </td><td class="mdescRight">inner boundary <br/></td></tr>
+<tr class="memitem:a9823827b202d9acf44d46fa178f7bd46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9823827b202d9acf44d46fa178f7bd46"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a9823827b202d9acf44d46fa178f7bd46">eps_B</a></td></tr>
+<tr class="memdesc:a9823827b202d9acf44d46fa178f7bd46"><td class="mdescLeft"> </td><td class="mdescRight">outer boundary <br/></td></tr>
+<tr class="memitem:a7fe2c23ce795461e6bfadeb7986bf766"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7fe2c23ce795461e6bfadeb7986bf766"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a7fe2c23ce795461e6bfadeb7986bf766">mv1</a></td></tr>
+<tr class="memdesc:a7fe2c23ce795461e6bfadeb7986bf766"><td class="mdescLeft"> </td><td class="mdescRight">source nfft plan <br/></td></tr>
+<tr class="memitem:a1830fe7539e1a6085a50a370a982fc78"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1830fe7539e1a6085a50a370a982fc78"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a1830fe7539e1a6085a50a370a982fc78">mv2</a></td></tr>
+<tr class="memdesc:a1830fe7539e1a6085a50a370a982fc78"><td class="mdescLeft"> </td><td class="mdescRight">target nfft plan <br/></td></tr>
+<tr class="memitem:a29d4d3dc57d0b1713444efcfddf1b5ef"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a29d4d3dc57d0b1713444efcfddf1b5ef">Ad</a></td></tr>
+<tr class="memdesc:a29d4d3dc57d0b1713444efcfddf1b5ef"><td class="mdescLeft"> </td><td class="mdescRight">near field <a href="#a29d4d3dc57d0b1713444efcfddf1b5ef"></a><br/></td></tr>
+<tr class="memitem:a760ab108c17198a359fc95b61a1a05dc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a760ab108c17198a359fc95b61a1a05dc"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a760ab108c17198a359fc95b61a1a05dc">Add</a></td></tr>
+<tr class="memdesc:a760ab108c17198a359fc95b61a1a05dc"><td class="mdescLeft"> </td><td class="mdescRight">spline values <br/></td></tr>
+<tr class="memitem:a3f88fcb0751bfcc2984bea6f53133158"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3f88fcb0751bfcc2984bea6f53133158"></a>
+fftw_plan </td><td class="memItemRight" valign="bottom"><b>fft_plan</b></td></tr>
+<tr class="memitem:a7dda1c8a3d19bd1779404008eae2d0af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7dda1c8a3d19bd1779404008eae2d0af"></a>
+int </td><td class="memItemRight" valign="bottom"><b>box_count</b></td></tr>
+<tr class="memitem:a811624e77b0a69624162dc128711cfdf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a811624e77b0a69624162dc128711cfdf"></a>
+int </td><td class="memItemRight" valign="bottom"><b>box_count_per_dim</b></td></tr>
+<tr class="memitem:a6c2d81fd3daa6a1a511902968f8393de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6c2d81fd3daa6a1a511902968f8393de"></a>
+int * </td><td class="memItemRight" valign="bottom"><b>box_offset</b></td></tr>
+<tr class="memitem:a7d01da0676bf417fa9491754151f9511"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7d01da0676bf417fa9491754151f9511"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>box_x</b></td></tr>
+<tr class="memitem:a98f3ef5fd8a1d535eb1ef59382d0be9e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98f3ef5fd8a1d535eb1ef59382d0be9e"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><b>box_alpha</b></td></tr>
+<tr class="memitem:a53221f0e2ff6a760f0f927d795746e8d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53221f0e2ff6a760f0f927d795746e8d"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structfastsum__plan__.html#a53221f0e2ff6a760f0f927d795746e8d">MEASURE_TIME_t</a> [8]</td></tr>
+<tr class="memdesc:a53221f0e2ff6a760f0f927d795746e8d"><td class="mdescLeft"> </td><td class="mdescRight">Measured time for each step if MEASURE_TIME is set. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>plan for fast summation algorithm </p>
+
+<p>Definition at line <a class="el" href="fastsum_8h_source.html#l00071">71</a> of file <a class="el" href="fastsum_8h_source.html">fastsum.h</a>.</p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="ad70ee163a195c108d0a5510a8407a307"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int fastsum_plan_::d</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>api </p>
+<p>number of dimensions </p>
+
+<p>Definition at line <a class="el" href="fastsum_8h_source.html#l00075">75</a> of file <a class="el" href="fastsum_8h_source.html">fastsum.h</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsum_8c_source.html#l00363">BuildBox()</a>, <a class="el" href="fastsum_8c_source.html#l00775">fastsum_exact()</a>, <a class="el" href="fastsum_8c_source.html#l00600">fastsum_init_guru()</a>, <a class="el" href="fastsum_8c_source.html#l00802">fastsum_precompute()</a>, <a class="el" href="fastsum_8c_source.html#l00940">fastsum_trafo()</a>, and <a class="el" href="fastsum_8c_source.html#l00465">SearchBox()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab8680533cc667f052c9c83275e0756fa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned fastsum_plan_::flags</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>flags precomp. </p>
+<p>and approx.type </p>
+
+<p>Definition at line <a class="el" href="fastsum_8h_source.html#l00089">89</a> of file <a class="el" href="fastsum_8h_source.html">fastsum.h</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsum_8c_source.html#l00742">fastsum_finalize()</a>, <a class="el" href="fastsum_8c_source.html#l00600">fastsum_init_guru()</a>, <a class="el" href="fastsum_8c_source.html#l00802">fastsum_precompute()</a>, <a class="el" href="fastsum_8c_source.html#l00940">fastsum_trafo()</a>, and <a class="el" href="fastsum_8c_source.html#l00465">SearchBox()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2ac8e8bdf57c75a916b1f4ef36ca513e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double _Complex* fastsum_plan_::pre_K</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>internal </p>
+<p>DS_PRE - direct summation precomputed K(x_j-y_l) </p>
+
+<p>Definition at line <a class="el" href="fastsum_8h_source.html#l00094">94</a> of file <a class="el" href="fastsum_8h_source.html">fastsum.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a271a9a4e952484997e902c5cbd5ff084"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int fastsum_plan_::n</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>FS__ - fast summation. </p>
+<p>expansion degree </p>
+
+<p>Definition at line <a class="el" href="fastsum_8h_source.html#l00097">97</a> of file <a class="el" href="fastsum_8h_source.html">fastsum.h</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsum_8c_source.html#l00600">fastsum_init_guru()</a>, and <a class="el" href="fastsum_8c_source.html#l00802">fastsum_precompute()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a29d4d3dc57d0b1713444efcfddf1b5ef"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int fastsum_plan_::Ad</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>near field </p>
+<p>number of spline knots for nearfield computation of regularized kernel </p>
+
+<p>Definition at line <a class="el" href="fastsum_8h_source.html#l00108">108</a> of file <a class="el" href="fastsum_8h_source.html">fastsum.h</a>.</p>
+
+<p>Referenced by <a class="el" href="fastsum_8c_source.html#l00600">fastsum_init_guru()</a>, <a class="el" href="fastsum_8c_source.html#l00802">fastsum_precompute()</a>, <a class="el" href="fastsum_8c_source.html#l00940">fastsum_trafo()</a>, and <a class="el" href="fastsum_8c_source.html#l00465">SearchBox()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="fastsum_8h_source.html">fastsum.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structfgt__plan.html b/doc/api/html/structfgt__plan.html
new file mode 100644
index 0000000..99686e3
--- /dev/null
+++ b/doc/api/html/structfgt__plan.html
@@ -0,0 +1,105 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fgt_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">fgt_plan Struct Reference<div class="ingroups"><a class="el" href="group__applications__fastgauss.html">Fast Gauss transfrom with complex parameter</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Structure for the Gauss transform.
+ <a href="structfgt__plan.html#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afbd9662ab140a1c55ded8928b2be3e87"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbd9662ab140a1c55ded8928b2be3e87"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#afbd9662ab140a1c55ded8928b2be3e87">N</a></td></tr>
+<tr class="memdesc:afbd9662ab140a1c55ded8928b2be3e87"><td class="mdescLeft"> </td><td class="mdescRight">number of source nodes <br/></td></tr>
+<tr class="memitem:a64030dcfd57263db29ff440c6cdd26aa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a64030dcfd57263db29ff440c6cdd26aa"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#a64030dcfd57263db29ff440c6cdd26aa">M</a></td></tr>
+<tr class="memdesc:a64030dcfd57263db29ff440c6cdd26aa"><td class="mdescLeft"> </td><td class="mdescRight">number of target nodes <br/></td></tr>
+<tr class="memitem:a9c17084806d4d213bed15e6391c90d1a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c17084806d4d213bed15e6391c90d1a"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#a9c17084806d4d213bed15e6391c90d1a">alpha</a></td></tr>
+<tr class="memdesc:a9c17084806d4d213bed15e6391c90d1a"><td class="mdescLeft"> </td><td class="mdescRight">source coefficients <br/></td></tr>
+<tr class="memitem:a7efff13d6d5f6c21c134e06ffae7fff1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7efff13d6d5f6c21c134e06ffae7fff1"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#a7efff13d6d5f6c21c134e06ffae7fff1">f</a></td></tr>
+<tr class="memdesc:a7efff13d6d5f6c21c134e06ffae7fff1"><td class="mdescLeft"> </td><td class="mdescRight">target evaluations <br/></td></tr>
+<tr class="memitem:a081f3a5e595025f27b4bfd89a3f74869"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a081f3a5e595025f27b4bfd89a3f74869"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#a081f3a5e595025f27b4bfd89a3f74869">flags</a></td></tr>
+<tr class="memdesc:a081f3a5e595025f27b4bfd89a3f74869"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation and approximation type <br/></td></tr>
+<tr class="memitem:af6e97b6f971e4f89ceeac2bca9d69666"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6e97b6f971e4f89ceeac2bca9d69666"></a>
+double _Complex </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#af6e97b6f971e4f89ceeac2bca9d69666">sigma</a></td></tr>
+<tr class="memdesc:af6e97b6f971e4f89ceeac2bca9d69666"><td class="mdescLeft"> </td><td class="mdescRight">parameter of the Gaussian <br/></td></tr>
+<tr class="memitem:ac264aff49bf16f52fa94ebd9e559fc93"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac264aff49bf16f52fa94ebd9e559fc93"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#ac264aff49bf16f52fa94ebd9e559fc93">x</a></td></tr>
+<tr class="memdesc:ac264aff49bf16f52fa94ebd9e559fc93"><td class="mdescLeft"> </td><td class="mdescRight">source nodes in <img class="formulaInl" alt="$[-1/4,1/4]$" src="form_95.png"/> <br/></td></tr>
+<tr class="memitem:af80c5936eb966c0300dd3e5042b74056"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af80c5936eb966c0300dd3e5042b74056"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#af80c5936eb966c0300dd3e5042b74056">y</a></td></tr>
+<tr class="memdesc:af80c5936eb966c0300dd3e5042b74056"><td class="mdescLeft"> </td><td class="mdescRight">target nodes in <img class="formulaInl" alt="$[-1/4,1/4]$" src="form_95.png"/> <br/></td></tr>
+<tr class="memitem:ad7d9387df7df72e3d5d628d7e429c2a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad7d9387df7df72e3d5d628d7e429c2a2"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#ad7d9387df7df72e3d5d628d7e429c2a2">pre_cexp</a></td></tr>
+<tr class="memdesc:ad7d9387df7df72e3d5d628d7e429c2a2"><td class="mdescLeft"> </td><td class="mdescRight">precomputed values for dgt <br/></td></tr>
+<tr class="memitem:a2e6ad196b67db3b9811fdb8e777633b1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e6ad196b67db3b9811fdb8e777633b1"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#a2e6ad196b67db3b9811fdb8e777633b1">n</a></td></tr>
+<tr class="memdesc:a2e6ad196b67db3b9811fdb8e777633b1"><td class="mdescLeft"> </td><td class="mdescRight">expansion degree <br/></td></tr>
+<tr class="memitem:ac6eda4d64140b8d5d8ef93e55e5f9b73"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac6eda4d64140b8d5d8ef93e55e5f9b73"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#ac6eda4d64140b8d5d8ef93e55e5f9b73">p</a></td></tr>
+<tr class="memdesc:ac6eda4d64140b8d5d8ef93e55e5f9b73"><td class="mdescLeft"> </td><td class="mdescRight">period, at least 1 <br/></td></tr>
+<tr class="memitem:a0a52777ff0982564c930c107a92d29d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a52777ff0982564c930c107a92d29d4"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#a0a52777ff0982564c930c107a92d29d4">b</a></td></tr>
+<tr class="memdesc:a0a52777ff0982564c930c107a92d29d4"><td class="mdescLeft"> </td><td class="mdescRight">expansion coefficients <br/></td></tr>
+<tr class="memitem:aa610ca4d19d67b72eab19327b373e3e2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa610ca4d19d67b72eab19327b373e3e2"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#aa610ca4d19d67b72eab19327b373e3e2">nplan1</a></td></tr>
+<tr class="memdesc:aa610ca4d19d67b72eab19327b373e3e2"><td class="mdescLeft"> </td><td class="mdescRight">source nfft plan <br/></td></tr>
+<tr class="memitem:a456c907589235a56d6f733220a40a163"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a456c907589235a56d6f733220a40a163"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfgt__plan.html#a456c907589235a56d6f733220a40a163">nplan2</a></td></tr>
+<tr class="memdesc:a456c907589235a56d6f733220a40a163"><td class="mdescLeft"> </td><td class="mdescRight">target nfft plan <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Structure for the Gauss transform. </p>
+
+<p>Definition at line <a class="el" href="fastgauss_8c_source.html#l00072">72</a> of file <a class="el" href="fastgauss_8c_source.html">fastgauss.c</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="fastgauss_8c_source.html">fastgauss.c</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structfpt__data__.html b/doc/api/html/structfpt__data__.html
new file mode 100644
index 0000000..37ca641
--- /dev/null
+++ b/doc/api/html/structfpt__data__.html
@@ -0,0 +1,306 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fpt_data_ Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">fpt_data_ Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Holds data for a single cascade summation.
+ <a href="structfpt__data__.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="fpt_8h_source.html">fpt.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ae511611ff434c5134446a77ec6053854"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae511611ff434c5134446a77ec6053854"></a>
+<a class="el" href="fpt_8c.html#a4c7f62127651d301d4604b3a6519458d">fpt_step</a> ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#ae511611ff434c5134446a77ec6053854">steps</a></td></tr>
+<tr class="memdesc:ae511611ff434c5134446a77ec6053854"><td class="mdescLeft"> </td><td class="mdescRight">The cascade summation steps. <br/></td></tr>
+<tr class="memitem:aeed5a13bcd0301058d37d0446d735334"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#aeed5a13bcd0301058d37d0446d735334">k_start</a></td></tr>
+<tr class="memdesc:aeed5a13bcd0301058d37d0446d735334"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here. <a href="#aeed5a13bcd0301058d37d0446d735334"></a><br/></td></tr>
+<tr class="memitem:a8474f38ec1ed4d1c41235de523fc2519"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#a8474f38ec1ed4d1c41235de523fc2519">alphaN</a></td></tr>
+<tr class="memdesc:a8474f38ec1ed4d1c41235de523fc2519"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here. <a href="#a8474f38ec1ed4d1c41235de523fc2519"></a><br/></td></tr>
+<tr class="memitem:ae62530023226d004ccaa18f4e1565e8d"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#ae62530023226d004ccaa18f4e1565e8d">betaN</a></td></tr>
+<tr class="memdesc:ae62530023226d004ccaa18f4e1565e8d"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here. <a href="#ae62530023226d004ccaa18f4e1565e8d"></a><br/></td></tr>
+<tr class="memitem:a606df2fa8fb3173a8ced31366b0bcc8a"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#a606df2fa8fb3173a8ced31366b0bcc8a">gammaN</a></td></tr>
+<tr class="memdesc:a606df2fa8fb3173a8ced31366b0bcc8a"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here. <a href="#a606df2fa8fb3173a8ced31366b0bcc8a"></a><br/></td></tr>
+<tr class="memitem:ae7491902143322ce74a8cccfa5ec7b3e"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#ae7491902143322ce74a8cccfa5ec7b3e">alpha_0</a></td></tr>
+<tr class="memdesc:ae7491902143322ce74a8cccfa5ec7b3e"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here. <a href="#ae7491902143322ce74a8cccfa5ec7b3e"></a><br/></td></tr>
+<tr class="memitem:a4639c4494938cad8b0536191ca2eefaa"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#a4639c4494938cad8b0536191ca2eefaa">beta_0</a></td></tr>
+<tr class="memdesc:a4639c4494938cad8b0536191ca2eefaa"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here. <a href="#a4639c4494938cad8b0536191ca2eefaa"></a><br/></td></tr>
+<tr class="memitem:aa8dd07acd6d154b929423231b4b2847a"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#aa8dd07acd6d154b929423231b4b2847a">gamma_m1</a></td></tr>
+<tr class="memdesc:aa8dd07acd6d154b929423231b4b2847a"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here. <a href="#aa8dd07acd6d154b929423231b4b2847a"></a><br/></td></tr>
+<tr class="memitem:a048079e693b84da0013ed8edba95a2e7"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#a048079e693b84da0013ed8edba95a2e7">_alpha</a></td></tr>
+<tr class="memdesc:a048079e693b84da0013ed8edba95a2e7"><td class="mdescLeft"> </td><td class="mdescRight">< TODO Add comment here. <a href="#a048079e693b84da0013ed8edba95a2e7"></a><br/></td></tr>
+<tr class="memitem:aeb8f8f8eb1c0b93d135e8e083835edfb"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#aeb8f8f8eb1c0b93d135e8e083835edfb">_beta</a></td></tr>
+<tr class="memdesc:aeb8f8f8eb1c0b93d135e8e083835edfb"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here. <a href="#aeb8f8f8eb1c0b93d135e8e083835edfb"></a><br/></td></tr>
+<tr class="memitem:a1fb58e76d4d78d6ed0f71a040d7157dc"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#a1fb58e76d4d78d6ed0f71a040d7157dc">_gamma</a></td></tr>
+<tr class="memdesc:a1fb58e76d4d78d6ed0f71a040d7157dc"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here. <a href="#a1fb58e76d4d78d6ed0f71a040d7157dc"></a><br/></td></tr>
+<tr class="memitem:ad56b765b9faabb4071e844e7d1355151"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#ad56b765b9faabb4071e844e7d1355151">alpha</a></td></tr>
+<tr class="memdesc:ad56b765b9faabb4071e844e7d1355151"><td class="mdescLeft"> </td><td class="mdescRight">< TODO Add comment here. <a href="#ad56b765b9faabb4071e844e7d1355151"></a><br/></td></tr>
+<tr class="memitem:af28f490521ca26420df33a1f590363e3"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#af28f490521ca26420df33a1f590363e3">beta</a></td></tr>
+<tr class="memdesc:af28f490521ca26420df33a1f590363e3"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here. <a href="#af28f490521ca26420df33a1f590363e3"></a><br/></td></tr>
+<tr class="memitem:a13aaa57c27f3ab5eab4c28d47d501723"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__data__.html#a13aaa57c27f3ab5eab4c28d47d501723">gamma</a></td></tr>
+<tr class="memdesc:a13aaa57c27f3ab5eab4c28d47d501723"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here. <a href="#a13aaa57c27f3ab5eab4c28d47d501723"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Holds data for a single cascade summation. </p>
+
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00078">78</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="aeed5a13bcd0301058d37d0446d735334"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int fpt_data_::k_start</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment"> </pre>
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00081">81</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8474f38ec1ed4d1c41235de523fc2519"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double * fpt_data_::alphaN</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment"> </pre>
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00082">82</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae62530023226d004ccaa18f4e1565e8d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double * fpt_data_::betaN</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment"> </pre>
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00083">83</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a606df2fa8fb3173a8ced31366b0bcc8a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double * fpt_data_::gammaN</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment"> </pre>
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00084">84</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae7491902143322ce74a8cccfa5ec7b3e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double fpt_data_::alpha_0</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment"> </pre>
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00085">85</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4639c4494938cad8b0536191ca2eefaa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double fpt_data_::beta_0</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment"> </pre>
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00086">86</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa8dd07acd6d154b929423231b4b2847a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double fpt_data_::gamma_m1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment"> </pre>
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00087">87</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a048079e693b84da0013ed8edba95a2e7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double* fpt_data_::_alpha</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>< TODO Add comment here. </p>
+<pre class="fragment"> </pre><p> TODO Add comment here. </p>
+
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00089">89</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aeb8f8f8eb1c0b93d135e8e083835edfb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double* fpt_data_::_beta</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment"> </pre>
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00090">90</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1fb58e76d4d78d6ed0f71a040d7157dc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double* fpt_data_::_gamma</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment"> </pre>
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00091">91</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad56b765b9faabb4071e844e7d1355151"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double* fpt_data_::alpha</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>< TODO Add comment here. </p>
+<pre class="fragment"> </pre><p> TODO Add comment here. </p>
+
+<p>Definition at line <a class="el" href="fpt_8h_source.html#l00052">52</a> of file <a class="el" href="fpt_8h_source.html">fpt.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af28f490521ca26420df33a1f590363e3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double* fpt_data_::beta</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment"> </pre>
+<p>Definition at line <a class="el" href="fpt_8h_source.html#l00053">53</a> of file <a class="el" href="fpt_8h_source.html">fpt.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a13aaa57c27f3ab5eab4c28d47d501723"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double* fpt_data_::gamma</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment"> </pre>
+<p>Definition at line <a class="el" href="fpt_8h_source.html#l00054">54</a> of file <a class="el" href="fpt_8h_source.html">fpt.h</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following files:<ul>
+<li><a class="el" href="fpt_8c_source.html">fpt.c</a></li>
+<li><a class="el" href="fpt_8h_source.html">fpt.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structfpt__set__s__.html b/doc/api/html/structfpt__set__s__.html
new file mode 100644
index 0000000..cef3f8c
--- /dev/null
+++ b/doc/api/html/structfpt__set__s__.html
@@ -0,0 +1,151 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fpt_set_s_ Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">fpt_set_s_ Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Holds data for a set of cascade summations.
+ <a href="structfpt__set__s__.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="fpt_8h_source.html">fpt.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ab2272294463f288c3aaa4513bfeac758"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab2272294463f288c3aaa4513bfeac758"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#ab2272294463f288c3aaa4513bfeac758">flags</a></td></tr>
+<tr class="memdesc:ab2272294463f288c3aaa4513bfeac758"><td class="mdescLeft"> </td><td class="mdescRight">The flags. <br/></td></tr>
+<tr class="memitem:a2387122a1e670e2e61b1699458224804"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2387122a1e670e2e61b1699458224804"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a2387122a1e670e2e61b1699458224804">M</a></td></tr>
+<tr class="memdesc:a2387122a1e670e2e61b1699458224804"><td class="mdescLeft"> </td><td class="mdescRight">The number of DPT transforms. <br/></td></tr>
+<tr class="memitem:aa353a04683b31bed668ee490d5df1b81"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#aa353a04683b31bed668ee490d5df1b81">N</a></td></tr>
+<tr class="memdesc:aa353a04683b31bed668ee490d5df1b81"><td class="mdescLeft"> </td><td class="mdescRight">The transform length. <a href="#aa353a04683b31bed668ee490d5df1b81"></a><br/></td></tr>
+<tr class="memitem:a1d35166e05db58736e422850fe02edef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1d35166e05db58736e422850fe02edef"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a1d35166e05db58736e422850fe02edef">t</a></td></tr>
+<tr class="memdesc:a1d35166e05db58736e422850fe02edef"><td class="mdescLeft"> </td><td class="mdescRight">The exponent of N. <br/></td></tr>
+<tr class="memitem:a0509dfa979aa395a80d8f38b2f5fb760"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0509dfa979aa395a80d8f38b2f5fb760"></a>
+<a class="el" href="fpt_8c.html#a5141ba7ff5b14b5fbf7ee769943f1c10">fpt_data</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a0509dfa979aa395a80d8f38b2f5fb760">dpt</a></td></tr>
+<tr class="memdesc:a0509dfa979aa395a80d8f38b2f5fb760"><td class="mdescLeft"> </td><td class="mdescRight">The DPT transform data. <br/></td></tr>
+<tr class="memitem:a58a8f2867286e0be19dd89e8d41c033b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a58a8f2867286e0be19dd89e8d41c033b"></a>
+double ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a58a8f2867286e0be19dd89e8d41c033b">xcvecs</a></td></tr>
+<tr class="memdesc:a58a8f2867286e0be19dd89e8d41c033b"><td class="mdescLeft"> </td><td class="mdescRight">Array of pointers to arrays containing the Chebyshev nodes. <br/></td></tr>
+<tr class="memitem:a226e29e0f97627e77ec4fcebd0c49fdf"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a226e29e0f97627e77ec4fcebd0c49fdf">xc</a></td></tr>
+<tr class="memdesc:a226e29e0f97627e77ec4fcebd0c49fdf"><td class="mdescLeft"> </td><td class="mdescRight">Array for Chebychev-nodes. <a href="#a226e29e0f97627e77ec4fcebd0c49fdf"></a><br/></td></tr>
+<tr class="memitem:ad93080b29d1b51fe3fdda734b308a4f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad93080b29d1b51fe3fdda734b308a4f4"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><b>temp</b></td></tr>
+<tr class="memitem:a16cf21fa35d0a74d8f86e6b8c85352bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16cf21fa35d0a74d8f86e6b8c85352bb"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><b>work</b></td></tr>
+<tr class="memitem:a5a55e5634be8d74b828bfb5fbcbc6514"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5a55e5634be8d74b828bfb5fbcbc6514"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><b>result</b></td></tr>
+<tr class="memitem:abfc15a0e80ecd9063ef920582eb88a7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abfc15a0e80ecd9063ef920582eb88a7c"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><b>vec3</b></td></tr>
+<tr class="memitem:a4bf278d535fe4efee8b066bedf845d48"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4bf278d535fe4efee8b066bedf845d48"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><b>vec4</b></td></tr>
+<tr class="memitem:ae16f7eb81c5cc6e4519b81207096454f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae16f7eb81c5cc6e4519b81207096454f"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><b>z</b></td></tr>
+<tr class="memitem:a5f146823d105906abf0cdc4c5f9638dc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f146823d105906abf0cdc4c5f9638dc"></a>
+fftw_plan * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a5f146823d105906abf0cdc4c5f9638dc">plans_dct3</a></td></tr>
+<tr class="memdesc:a5f146823d105906abf0cdc4c5f9638dc"><td class="mdescLeft"> </td><td class="mdescRight">Transform plans for the fftw library. <br/></td></tr>
+<tr class="memitem:aead22ae71c82ad37da07f6166bf53fbc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aead22ae71c82ad37da07f6166bf53fbc"></a>
+fftw_plan * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#aead22ae71c82ad37da07f6166bf53fbc">plans_dct2</a></td></tr>
+<tr class="memdesc:aead22ae71c82ad37da07f6166bf53fbc"><td class="mdescLeft"> </td><td class="mdescRight">Transform plans for the fftw library. <br/></td></tr>
+<tr class="memitem:a15eafd93be80eeea02173a9042e303d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15eafd93be80eeea02173a9042e303d3"></a>
+fftw_r2r_kind * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a15eafd93be80eeea02173a9042e303d3">kinds</a></td></tr>
+<tr class="memdesc:a15eafd93be80eeea02173a9042e303d3"><td class="mdescLeft"> </td><td class="mdescRight">Transform kinds for fftw library. <br/></td></tr>
+<tr class="memitem:afd6508cc584ac06b9f679be441b6e7f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd6508cc584ac06b9f679be441b6e7f6"></a>
+fftw_r2r_kind * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#afd6508cc584ac06b9f679be441b6e7f6">kindsr</a></td></tr>
+<tr class="memdesc:afd6508cc584ac06b9f679be441b6e7f6"><td class="mdescLeft"> </td><td class="mdescRight">Transform kinds for fftw library. <br/></td></tr>
+<tr class="memitem:a26355113f8348c270cd02bc196fad681"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a26355113f8348c270cd02bc196fad681"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a26355113f8348c270cd02bc196fad681">lengths</a></td></tr>
+<tr class="memdesc:a26355113f8348c270cd02bc196fad681"><td class="mdescLeft"> </td><td class="mdescRight">Transform lengths for fftw library. <br/></td></tr>
+<tr class="memitem:a753c30d0a52e91d6e04da874261e7fdf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a753c30d0a52e91d6e04da874261e7fdf"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>xc_slow</b></td></tr>
+<tr class="memitem:a401070e7725566f06ae740e7e99a12a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a401070e7725566f06ae740e7e99a12a2"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__set__s__.html#a401070e7725566f06ae740e7e99a12a2">flags</a></td></tr>
+<tr class="memdesc:a401070e7725566f06ae740e7e99a12a2"><td class="mdescLeft"> </td><td class="mdescRight">The flags. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Holds data for a set of cascade summations. </p>
+
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00097">97</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="aa353a04683b31bed668ee490d5df1b81"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int fpt_set_s_::N</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>The transform length. </p>
+<p>Must be a power of two. </p>
+
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00101">101</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a226e29e0f97627e77ec4fcebd0c49fdf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double * fpt_set_s_::xc</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Array for Chebychev-nodes. </p>
+<pre class="fragment"> </pre>
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00108">108</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following files:<ul>
+<li><a class="el" href="fpt_8c_source.html">fpt.c</a></li>
+<li><a class="el" href="fpt_8h_source.html">fpt.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structfpt__step__.html b/doc/api/html/structfpt__step__.html
new file mode 100644
index 0000000..9773dba
--- /dev/null
+++ b/doc/api/html/structfpt__step__.html
@@ -0,0 +1,133 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - fpt_step_ Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">fpt_step_ Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Holds data for a single multiplication step in the cascade summation.
+ <a href="structfpt__step__.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="fpt_8h_source.html">fpt.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a71dc6483b4f3b958519bdafeae2c1dbf"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__step__.html#a71dc6483b4f3b958519bdafeae2c1dbf">stable</a></td></tr>
+<tr class="memdesc:a71dc6483b4f3b958519bdafeae2c1dbf"><td class="mdescLeft"> </td><td class="mdescRight">Indicates if the values contained represent a fast or a slow stabilized step. <a href="#a71dc6483b4f3b958519bdafeae2c1dbf"></a><br/></td></tr>
+<tr class="memitem:ac6767b7c6935b1f2af5dd54e2e8f690b"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__step__.html#ac6767b7c6935b1f2af5dd54e2e8f690b">Ns</a></td></tr>
+<tr class="memdesc:ac6767b7c6935b1f2af5dd54e2e8f690b"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here. <a href="#ac6767b7c6935b1f2af5dd54e2e8f690b"></a><br/></td></tr>
+<tr class="memitem:aeb754fe2aedc1f15cbb9c75c212772fb"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__step__.html#aeb754fe2aedc1f15cbb9c75c212772fb">ts</a></td></tr>
+<tr class="memdesc:aeb754fe2aedc1f15cbb9c75c212772fb"><td class="mdescLeft"> </td><td class="mdescRight">TODO Add comment here. <a href="#aeb754fe2aedc1f15cbb9c75c212772fb"></a><br/></td></tr>
+<tr class="memitem:a73bfb18a62b4b4db10c8ad32796fc1ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73bfb18a62b4b4db10c8ad32796fc1ca"></a>
+double ** </td><td class="memItemRight" valign="bottom"><b>a11</b></td></tr>
+<tr class="memitem:a71db335416c48adbc118782261264d54"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a71db335416c48adbc118782261264d54"></a>
+double ** </td><td class="memItemRight" valign="bottom"><b>a12</b></td></tr>
+<tr class="memitem:ac1c8fe4ca38b68dd3dd9a6c51ae456b1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1c8fe4ca38b68dd3dd9a6c51ae456b1"></a>
+double ** </td><td class="memItemRight" valign="bottom"><b>a21</b></td></tr>
+<tr class="memitem:a671d73e56c51c3c8daaa9678da341ce9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a671d73e56c51c3c8daaa9678da341ce9"></a>
+double ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__step__.html#a671d73e56c51c3c8daaa9678da341ce9">a22</a></td></tr>
+<tr class="memdesc:a671d73e56c51c3c8daaa9678da341ce9"><td class="mdescLeft"> </td><td class="mdescRight">The matrix components. <br/></td></tr>
+<tr class="memitem:affc3fb53919156a934a28c6350f7f540"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="affc3fb53919156a934a28c6350f7f540"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structfpt__step__.html#affc3fb53919156a934a28c6350f7f540">g</a></td></tr>
+<tr class="memdesc:affc3fb53919156a934a28c6350f7f540"><td class="mdescLeft"> </td><td class="mdescRight"><pre class="fragment"> </pre> <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Holds data for a single multiplication step in the cascade summation. </p>
+
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00064">64</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a71dc6483b4f3b958519bdafeae2c1dbf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool fpt_step_::stable</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Indicates if the values contained represent a fast or a slow stabilized step. </p>
+<pre class="fragment"> </pre>
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00066">66</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac6767b7c6935b1f2af5dd54e2e8f690b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int fpt_step_::Ns</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment"> </pre>
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00069">69</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aeb754fe2aedc1f15cbb9c75c212772fb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int fpt_step_::ts</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>TODO Add comment here. </p>
+<pre class="fragment"> </pre>
+<p>Definition at line <a class="el" href="fpt_8c_source.html#l00070">70</a> of file <a class="el" href="fpt_8c_source.html">fpt.c</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following files:<ul>
+<li><a class="el" href="fpt_8c_source.html">fpt.c</a></li>
+<li><a class="el" href="fpt_8h_source.html">fpt.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structimri__inh__2d1d__adjoint__plan.html b/doc/api/html/structimri__inh__2d1d__adjoint__plan.html
new file mode 100644
index 0000000..e98495c
--- /dev/null
+++ b/doc/api/html/structimri__inh__2d1d__adjoint__plan.html
@@ -0,0 +1,119 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - imri_inh_2d1d_adjoint_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">imri_inh_2d1d_adjoint_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Structure for an adjoint transform plan.
+ <a href="structimri__inh__2d1d__adjoint__plan.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a18f9b22f7f221aedc3dabab2cb07e633"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18f9b22f7f221aedc3dabab2cb07e633"></a>
+<a class="el" href="structmri__inh__2d1d__plan.html">mri_inh_2d1d_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a18f9b22f7f221aedc3dabab2cb07e633">mv</a></td></tr>
+<tr class="memdesc:a18f9b22f7f221aedc3dabab2cb07e633"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:adea4e1650ddadc3f0f7c1d833b6b7789"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adea4e1650ddadc3f0f7c1d833b6b7789"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#adea4e1650ddadc3f0f7c1d833b6b7789">flags</a></td></tr>
+<tr class="memdesc:adea4e1650ddadc3f0f7c1d833b6b7789"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a552e0603ee92be729e052bb6028a1fb4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a552e0603ee92be729e052bb6028a1fb4"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a552e0603ee92be729e052bb6028a1fb4">w</a></td></tr>
+<tr class="memdesc:a552e0603ee92be729e052bb6028a1fb4"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:aeb6a8106c1347dc7decf42e4520f70ab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeb6a8106c1347dc7decf42e4520f70ab"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aeb6a8106c1347dc7decf42e4520f70ab">w_hat</a></td></tr>
+<tr class="memdesc:aeb6a8106c1347dc7decf42e4520f70ab"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:aaed8db541ee689c5ec82bb8e18c4c8d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaed8db541ee689c5ec82bb8e18c4c8d1"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aaed8db541ee689c5ec82bb8e18c4c8d1">y_hat</a></td></tr>
+<tr class="memdesc:aaed8db541ee689c5ec82bb8e18c4c8d1"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:ae154ca7cd0d7ebc7e0db4b1f415b56fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae154ca7cd0d7ebc7e0db4b1f415b56fd"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#ae154ca7cd0d7ebc7e0db4b1f415b56fd">f_iter</a></td></tr>
+<tr class="memdesc:ae154ca7cd0d7ebc7e0db4b1f415b56fd"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a6088e9949fa966d839e8feadfb34596e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6088e9949fa966d839e8feadfb34596e"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a6088e9949fa966d839e8feadfb34596e">r_hat_iter</a></td></tr>
+<tr class="memdesc:a6088e9949fa966d839e8feadfb34596e"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a2e2d8f1f1a6a7500c1689cf5021abcde"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e2d8f1f1a6a7500c1689cf5021abcde"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a2e2d8f1f1a6a7500c1689cf5021abcde">z_iter</a></td></tr>
+<tr class="memdesc:a2e2d8f1f1a6a7500c1689cf5021abcde"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of \ first kind <br/></td></tr>
+<tr class="memitem:aafe496b74fca5e5d96ce258bb3da1ffc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aafe496b74fca5e5d96ce258bb3da1ffc"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aafe496b74fca5e5d96ce258bb3da1ffc">p_iter</a></td></tr>
+<tr class="memdesc:aafe496b74fca5e5d96ce258bb3da1ffc"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:af253d4b292aa7db655ca51dfdf598bf9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af253d4b292aa7db655ca51dfdf598bf9"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#af253d4b292aa7db655ca51dfdf598bf9">v_hat_iter</a></td></tr>
+<tr class="memdesc:af253d4b292aa7db655ca51dfdf598bf9"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:a740c87ac77f68578613d58e569deedb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a740c87ac77f68578613d58e569deedb2"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a740c87ac77f68578613d58e569deedb2">alpha_iter</a></td></tr>
+<tr class="memdesc:a740c87ac77f68578613d58e569deedb2"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:a7f3271035bca7b994475e565ab1ffb22"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f3271035bca7b994475e565ab1ffb22"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a7f3271035bca7b994475e565ab1ffb22">beta_iter</a></td></tr>
+<tr class="memdesc:a7f3271035bca7b994475e565ab1ffb22"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:a52eec6bb5ee2ae209ed90d44739c8769"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a52eec6bb5ee2ae209ed90d44739c8769"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a52eec6bb5ee2ae209ed90d44739c8769">dot_r_hat_iter</a></td></tr>
+<tr class="memdesc:a52eec6bb5ee2ae209ed90d44739c8769"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a846d92d450d33e64996d28c2054e3181"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a846d92d450d33e64996d28c2054e3181"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a846d92d450d33e64996d28c2054e3181">dot_r_hat_iter_old</a></td></tr>
+<tr class="memdesc:a846d92d450d33e64996d28c2054e3181"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:ac3ca8cbbcd9958d69b15b4696e14a2e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac3ca8cbbcd9958d69b15b4696e14a2e3"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#ac3ca8cbbcd9958d69b15b4696e14a2e3">dot_z_iter</a></td></tr>
+<tr class="memdesc:ac3ca8cbbcd9958d69b15b4696e14a2e3"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ z_hat_iter <br/></td></tr>
+<tr class="memitem:a92ceaf9529a44c28fd3b6d9d63c0c13f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92ceaf9529a44c28fd3b6d9d63c0c13f"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a92ceaf9529a44c28fd3b6d9d63c0c13f">dot_z_iter_old</a></td></tr>
+<tr class="memdesc:a92ceaf9529a44c28fd3b6d9d63c0c13f"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a00c75acfb362339a30d2809520fcd775"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00c75acfb362339a30d2809520fcd775"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#a00c75acfb362339a30d2809520fcd775">dot_p_iter</a></td></tr>
+<tr class="memdesc:a00c75acfb362339a30d2809520fcd775"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ p_hat_iter <br/></td></tr>
+<tr class="memitem:aed3f646cabd7b8ab1a480d7607ea45f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed3f646cabd7b8ab1a480d7607ea45f3"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__2d1d__adjoint__plan.html#aed3f646cabd7b8ab1a480d7607ea45f3">dot_v_hat_iter</a></td></tr>
+<tr class="memdesc:aed3f646cabd7b8ab1a480d7607ea45f3"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Structure for an adjoint transform plan. </p>
+
+<p>Definition at line <a class="el" href="solver__adjoint_8h_source.html#l00083">83</a> of file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structimri__inh__3d__adjoint__plan.html b/doc/api/html/structimri__inh__3d__adjoint__plan.html
new file mode 100644
index 0000000..be345e6
--- /dev/null
+++ b/doc/api/html/structimri__inh__3d__adjoint__plan.html
@@ -0,0 +1,119 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - imri_inh_3d_adjoint_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">imri_inh_3d_adjoint_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Structure for an adjoint transform plan.
+ <a href="structimri__inh__3d__adjoint__plan.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afa903e9a436fc17da89b08377a6a733e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa903e9a436fc17da89b08377a6a733e"></a>
+<a class="el" href="structmri__inh__3d__plan.html">mri_inh_3d_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#afa903e9a436fc17da89b08377a6a733e">mv</a></td></tr>
+<tr class="memdesc:afa903e9a436fc17da89b08377a6a733e"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:aadd41183d54818f3e8528affe40769bc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aadd41183d54818f3e8528affe40769bc"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#aadd41183d54818f3e8528affe40769bc">flags</a></td></tr>
+<tr class="memdesc:aadd41183d54818f3e8528affe40769bc"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:aa4cd6ea3040339a39047978a7c1f1c9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa4cd6ea3040339a39047978a7c1f1c9d"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#aa4cd6ea3040339a39047978a7c1f1c9d">w</a></td></tr>
+<tr class="memdesc:aa4cd6ea3040339a39047978a7c1f1c9d"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:aa53e43e9cd65db3ba08ed275cb62d456"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa53e43e9cd65db3ba08ed275cb62d456"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#aa53e43e9cd65db3ba08ed275cb62d456">w_hat</a></td></tr>
+<tr class="memdesc:aa53e43e9cd65db3ba08ed275cb62d456"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:a968843771644077babbdd687b6bbdb5d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a968843771644077babbdd687b6bbdb5d"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#a968843771644077babbdd687b6bbdb5d">y_hat</a></td></tr>
+<tr class="memdesc:a968843771644077babbdd687b6bbdb5d"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:a4207ca1175efe7865d6631ae5a704632"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4207ca1175efe7865d6631ae5a704632"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#a4207ca1175efe7865d6631ae5a704632">f_iter</a></td></tr>
+<tr class="memdesc:a4207ca1175efe7865d6631ae5a704632"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:acbea7a40d34bbca7688da41378140926"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbea7a40d34bbca7688da41378140926"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#acbea7a40d34bbca7688da41378140926">r_hat_iter</a></td></tr>
+<tr class="memdesc:acbea7a40d34bbca7688da41378140926"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a0efcec4db642e9066fbc64c1c70bc079"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0efcec4db642e9066fbc64c1c70bc079"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#a0efcec4db642e9066fbc64c1c70bc079">z_iter</a></td></tr>
+<tr class="memdesc:a0efcec4db642e9066fbc64c1c70bc079"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of \ first kind <br/></td></tr>
+<tr class="memitem:ade134a86a60d2538595acc2fafb83e41"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade134a86a60d2538595acc2fafb83e41"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#ade134a86a60d2538595acc2fafb83e41">p_iter</a></td></tr>
+<tr class="memdesc:ade134a86a60d2538595acc2fafb83e41"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:ad04d2974dedefdc45e176e5ea5399aab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad04d2974dedefdc45e176e5ea5399aab"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#ad04d2974dedefdc45e176e5ea5399aab">v_hat_iter</a></td></tr>
+<tr class="memdesc:ad04d2974dedefdc45e176e5ea5399aab"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:ae6e228dc1df00e0b3de8873f0de12675"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6e228dc1df00e0b3de8873f0de12675"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#ae6e228dc1df00e0b3de8873f0de12675">alpha_iter</a></td></tr>
+<tr class="memdesc:ae6e228dc1df00e0b3de8873f0de12675"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:ac622efae9216d5d4335118084c7fcbfa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac622efae9216d5d4335118084c7fcbfa"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#ac622efae9216d5d4335118084c7fcbfa">beta_iter</a></td></tr>
+<tr class="memdesc:ac622efae9216d5d4335118084c7fcbfa"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:af456205ec418161fe20de523e423bb51"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af456205ec418161fe20de523e423bb51"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#af456205ec418161fe20de523e423bb51">dot_r_hat_iter</a></td></tr>
+<tr class="memdesc:af456205ec418161fe20de523e423bb51"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:acce4b5401db74c6e9896a78eccc9ca1e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acce4b5401db74c6e9896a78eccc9ca1e"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#acce4b5401db74c6e9896a78eccc9ca1e">dot_r_hat_iter_old</a></td></tr>
+<tr class="memdesc:acce4b5401db74c6e9896a78eccc9ca1e"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:af91db19db24ca1c648d97ea516367f94"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af91db19db24ca1c648d97ea516367f94"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#af91db19db24ca1c648d97ea516367f94">dot_z_iter</a></td></tr>
+<tr class="memdesc:af91db19db24ca1c648d97ea516367f94"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ z_hat_iter <br/></td></tr>
+<tr class="memitem:a794d80ffe20e25a4d69340d925d8624c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a794d80ffe20e25a4d69340d925d8624c"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#a794d80ffe20e25a4d69340d925d8624c">dot_z_iter_old</a></td></tr>
+<tr class="memdesc:a794d80ffe20e25a4d69340d925d8624c"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a65805c60e7d3a18d9a8952da80286032"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65805c60e7d3a18d9a8952da80286032"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#a65805c60e7d3a18d9a8952da80286032">dot_p_iter</a></td></tr>
+<tr class="memdesc:a65805c60e7d3a18d9a8952da80286032"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ p_hat_iter <br/></td></tr>
+<tr class="memitem:ae251b00724c42f9c0f906e823c9e17f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae251b00724c42f9c0f906e823c9e17f8"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structimri__inh__3d__adjoint__plan.html#ae251b00724c42f9c0f906e823c9e17f8">dot_v_hat_iter</a></td></tr>
+<tr class="memdesc:ae251b00724c42f9c0f906e823c9e17f8"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Structure for an adjoint transform plan. </p>
+
+<p>Definition at line <a class="el" href="solver__adjoint_8h_source.html#l00084">84</a> of file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structinfct__adjoint__plan.html b/doc/api/html/structinfct__adjoint__plan.html
new file mode 100644
index 0000000..5b36279
--- /dev/null
+++ b/doc/api/html/structinfct__adjoint__plan.html
@@ -0,0 +1,119 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - infct_adjoint_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">infct_adjoint_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Structure for an adjoint transform plan.
+ <a href="structinfct__adjoint__plan.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a65d97330deb4cd9de78e4b9aa85afa62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65d97330deb4cd9de78e4b9aa85afa62"></a>
+<a class="el" href="structnfct__plan.html">nfct_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a65d97330deb4cd9de78e4b9aa85afa62">mv</a></td></tr>
+<tr class="memdesc:a65d97330deb4cd9de78e4b9aa85afa62"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:ad913ef9fc7d9bb8ca4f91f1abbf99949"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad913ef9fc7d9bb8ca4f91f1abbf99949"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#ad913ef9fc7d9bb8ca4f91f1abbf99949">flags</a></td></tr>
+<tr class="memdesc:ad913ef9fc7d9bb8ca4f91f1abbf99949"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:add093d84bfb7f6f5d5b5512e000efc68"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add093d84bfb7f6f5d5b5512e000efc68"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#add093d84bfb7f6f5d5b5512e000efc68">w</a></td></tr>
+<tr class="memdesc:add093d84bfb7f6f5d5b5512e000efc68"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:af14d4eb49aee59948ea57d30dbf4d628"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af14d4eb49aee59948ea57d30dbf4d628"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#af14d4eb49aee59948ea57d30dbf4d628">w_hat</a></td></tr>
+<tr class="memdesc:af14d4eb49aee59948ea57d30dbf4d628"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:a4a98ec178d9d74dab4e617beebc419a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a98ec178d9d74dab4e617beebc419a6"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a4a98ec178d9d74dab4e617beebc419a6">y_hat</a></td></tr>
+<tr class="memdesc:a4a98ec178d9d74dab4e617beebc419a6"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:af72ea2aed94d3e789dd064776fdf2919"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af72ea2aed94d3e789dd064776fdf2919"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#af72ea2aed94d3e789dd064776fdf2919">f_iter</a></td></tr>
+<tr class="memdesc:af72ea2aed94d3e789dd064776fdf2919"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a3bb77b67c3779716d767e76b8661efbc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3bb77b67c3779716d767e76b8661efbc"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a3bb77b67c3779716d767e76b8661efbc">r_hat_iter</a></td></tr>
+<tr class="memdesc:a3bb77b67c3779716d767e76b8661efbc"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a5b1da212f8c15d7ca209dbe347a5ec8f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b1da212f8c15d7ca209dbe347a5ec8f"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a5b1da212f8c15d7ca209dbe347a5ec8f">z_iter</a></td></tr>
+<tr class="memdesc:a5b1da212f8c15d7ca209dbe347a5ec8f"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of \ first kind <br/></td></tr>
+<tr class="memitem:a6c81df2130d05bcbbcd6646cd27b671e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6c81df2130d05bcbbcd6646cd27b671e"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a6c81df2130d05bcbbcd6646cd27b671e">p_iter</a></td></tr>
+<tr class="memdesc:a6c81df2130d05bcbbcd6646cd27b671e"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:af025d6f664c1ccdd552f61e68d58ec97"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af025d6f664c1ccdd552f61e68d58ec97"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#af025d6f664c1ccdd552f61e68d58ec97">v_hat_iter</a></td></tr>
+<tr class="memdesc:af025d6f664c1ccdd552f61e68d58ec97"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:a6e7a960d8661f6c459ebac7085e2587f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6e7a960d8661f6c459ebac7085e2587f"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a6e7a960d8661f6c459ebac7085e2587f">alpha_iter</a></td></tr>
+<tr class="memdesc:a6e7a960d8661f6c459ebac7085e2587f"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:a3e6ea22841cd010652beb76f554bdf92"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3e6ea22841cd010652beb76f554bdf92"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a3e6ea22841cd010652beb76f554bdf92">beta_iter</a></td></tr>
+<tr class="memdesc:a3e6ea22841cd010652beb76f554bdf92"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:adfc3485017bb92e57c229dc7f81e438b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adfc3485017bb92e57c229dc7f81e438b"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#adfc3485017bb92e57c229dc7f81e438b">dot_r_hat_iter</a></td></tr>
+<tr class="memdesc:adfc3485017bb92e57c229dc7f81e438b"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a98056f05d5a45569899df80b040b9872"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98056f05d5a45569899df80b040b9872"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a98056f05d5a45569899df80b040b9872">dot_r_hat_iter_old</a></td></tr>
+<tr class="memdesc:a98056f05d5a45569899df80b040b9872"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:ab848ecc31c17b9cd639e9834ee56816d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab848ecc31c17b9cd639e9834ee56816d"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#ab848ecc31c17b9cd639e9834ee56816d">dot_z_iter</a></td></tr>
+<tr class="memdesc:ab848ecc31c17b9cd639e9834ee56816d"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ z_hat_iter <br/></td></tr>
+<tr class="memitem:ad2417d37a566a0d26dea57f6f875ca12"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad2417d37a566a0d26dea57f6f875ca12"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#ad2417d37a566a0d26dea57f6f875ca12">dot_z_iter_old</a></td></tr>
+<tr class="memdesc:ad2417d37a566a0d26dea57f6f875ca12"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a50526d4b81b2dd8cf90e82ad162af3c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a50526d4b81b2dd8cf90e82ad162af3c5"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#a50526d4b81b2dd8cf90e82ad162af3c5">dot_p_iter</a></td></tr>
+<tr class="memdesc:a50526d4b81b2dd8cf90e82ad162af3c5"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ p_hat_iter <br/></td></tr>
+<tr class="memitem:ac1b772ccfa72ce8e522298aeef3b1e1b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1b772ccfa72ce8e522298aeef3b1e1b"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfct__adjoint__plan.html#ac1b772ccfa72ce8e522298aeef3b1e1b">dot_v_hat_iter</a></td></tr>
+<tr class="memdesc:ac1b772ccfa72ce8e522298aeef3b1e1b"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Structure for an adjoint transform plan. </p>
+
+<p>Definition at line <a class="el" href="solver__adjoint_8h_source.html#l00080">80</a> of file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structinfft__adjoint__plan.html b/doc/api/html/structinfft__adjoint__plan.html
new file mode 100644
index 0000000..b8afb56
--- /dev/null
+++ b/doc/api/html/structinfft__adjoint__plan.html
@@ -0,0 +1,119 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - infft_adjoint_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">infft_adjoint_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Structure for an adjoint transform plan.
+ <a href="structinfft__adjoint__plan.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a320424336d0f74f0d24cc67053dea7ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a320424336d0f74f0d24cc67053dea7ca"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a320424336d0f74f0d24cc67053dea7ca">mv</a></td></tr>
+<tr class="memdesc:a320424336d0f74f0d24cc67053dea7ca"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:a83f3fc443fbf5c40336a46a8c1bdfaf8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83f3fc443fbf5c40336a46a8c1bdfaf8"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a83f3fc443fbf5c40336a46a8c1bdfaf8">flags</a></td></tr>
+<tr class="memdesc:a83f3fc443fbf5c40336a46a8c1bdfaf8"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a67fabb54885946acaaad95a5a472b004"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67fabb54885946acaaad95a5a472b004"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a67fabb54885946acaaad95a5a472b004">w</a></td></tr>
+<tr class="memdesc:a67fabb54885946acaaad95a5a472b004"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:a76ad0c6eace967391553fd4939e70662"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a76ad0c6eace967391553fd4939e70662"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a76ad0c6eace967391553fd4939e70662">w_hat</a></td></tr>
+<tr class="memdesc:a76ad0c6eace967391553fd4939e70662"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:ab91fa7e8fa5668148a4cba86a97e415b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab91fa7e8fa5668148a4cba86a97e415b"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#ab91fa7e8fa5668148a4cba86a97e415b">y_hat</a></td></tr>
+<tr class="memdesc:ab91fa7e8fa5668148a4cba86a97e415b"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:a0b408ac6ce2906dc57ff0c2ff9d3f0d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b408ac6ce2906dc57ff0c2ff9d3f0d0"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a0b408ac6ce2906dc57ff0c2ff9d3f0d0">f_iter</a></td></tr>
+<tr class="memdesc:a0b408ac6ce2906dc57ff0c2ff9d3f0d0"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a314c60168395a677ea88ff67dcaa2ec9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a314c60168395a677ea88ff67dcaa2ec9"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a314c60168395a677ea88ff67dcaa2ec9">r_hat_iter</a></td></tr>
+<tr class="memdesc:a314c60168395a677ea88ff67dcaa2ec9"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a0f6a4a61889385e975380802617ade31"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f6a4a61889385e975380802617ade31"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a0f6a4a61889385e975380802617ade31">z_iter</a></td></tr>
+<tr class="memdesc:a0f6a4a61889385e975380802617ade31"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of \ first kind <br/></td></tr>
+<tr class="memitem:afa0571b6b2c75979bc6a8ea75dc13efc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa0571b6b2c75979bc6a8ea75dc13efc"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#afa0571b6b2c75979bc6a8ea75dc13efc">p_iter</a></td></tr>
+<tr class="memdesc:afa0571b6b2c75979bc6a8ea75dc13efc"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:a8f64e1af7dfd3cd41377d79113eb51e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f64e1af7dfd3cd41377d79113eb51e3"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a8f64e1af7dfd3cd41377d79113eb51e3">v_hat_iter</a></td></tr>
+<tr class="memdesc:a8f64e1af7dfd3cd41377d79113eb51e3"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:a9abf5757d92159acfd73366a4c4df7be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9abf5757d92159acfd73366a4c4df7be"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a9abf5757d92159acfd73366a4c4df7be">alpha_iter</a></td></tr>
+<tr class="memdesc:a9abf5757d92159acfd73366a4c4df7be"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:a09f8c30247659fc918d48521ba5ed5e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09f8c30247659fc918d48521ba5ed5e8"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a09f8c30247659fc918d48521ba5ed5e8">beta_iter</a></td></tr>
+<tr class="memdesc:a09f8c30247659fc918d48521ba5ed5e8"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:af3de3b55c6ddf2e27ed9fbe7ef164b04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3de3b55c6ddf2e27ed9fbe7ef164b04"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#af3de3b55c6ddf2e27ed9fbe7ef164b04">dot_r_hat_iter</a></td></tr>
+<tr class="memdesc:af3de3b55c6ddf2e27ed9fbe7ef164b04"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a38e5e1e241a0a4a54e83266223725ab6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38e5e1e241a0a4a54e83266223725ab6"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a38e5e1e241a0a4a54e83266223725ab6">dot_r_hat_iter_old</a></td></tr>
+<tr class="memdesc:a38e5e1e241a0a4a54e83266223725ab6"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:a6cca862303d84903e408f5a2ea02aa9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6cca862303d84903e408f5a2ea02aa9c"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a6cca862303d84903e408f5a2ea02aa9c">dot_z_iter</a></td></tr>
+<tr class="memdesc:a6cca862303d84903e408f5a2ea02aa9c"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ z_hat_iter <br/></td></tr>
+<tr class="memitem:aa78f22f1c5c917f665b2f1af3e7df191"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa78f22f1c5c917f665b2f1af3e7df191"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#aa78f22f1c5c917f665b2f1af3e7df191">dot_z_iter_old</a></td></tr>
+<tr class="memdesc:aa78f22f1c5c917f665b2f1af3e7df191"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a2ddddb18e229f9d2d4b9eb11c36d0529"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ddddb18e229f9d2d4b9eb11c36d0529"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a2ddddb18e229f9d2d4b9eb11c36d0529">dot_p_iter</a></td></tr>
+<tr class="memdesc:a2ddddb18e229f9d2d4b9eb11c36d0529"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ p_hat_iter <br/></td></tr>
+<tr class="memitem:a1a005f3e97b207a1d42cbc8e2ad3a5e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a005f3e97b207a1d42cbc8e2ad3a5e1"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfft__adjoint__plan.html#a1a005f3e97b207a1d42cbc8e2ad3a5e1">dot_v_hat_iter</a></td></tr>
+<tr class="memdesc:a1a005f3e97b207a1d42cbc8e2ad3a5e1"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Structure for an adjoint transform plan. </p>
+
+<p>Definition at line <a class="el" href="solver__adjoint_8h_source.html#l00079">79</a> of file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structinfsft__adjoint__plan.html b/doc/api/html/structinfsft__adjoint__plan.html
new file mode 100644
index 0000000..485c380
--- /dev/null
+++ b/doc/api/html/structinfsft__adjoint__plan.html
@@ -0,0 +1,120 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - infsft_adjoint_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">infsft_adjoint_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>TODO: different solvers.
+ <a href="structinfsft__adjoint__plan.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a791fe047a3b45cce8049e83d422b8414"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a791fe047a3b45cce8049e83d422b8414"></a>
+<a class="el" href="structnfsft__plan.html">nfsft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a791fe047a3b45cce8049e83d422b8414">mv</a></td></tr>
+<tr class="memdesc:a791fe047a3b45cce8049e83d422b8414"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:a6795cda9e0d83c5b5c7935b75d10dc1a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6795cda9e0d83c5b5c7935b75d10dc1a"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a6795cda9e0d83c5b5c7935b75d10dc1a">flags</a></td></tr>
+<tr class="memdesc:a6795cda9e0d83c5b5c7935b75d10dc1a"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a9738a7ae6eb6e9ac59018d7fe0b67b32"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9738a7ae6eb6e9ac59018d7fe0b67b32"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a9738a7ae6eb6e9ac59018d7fe0b67b32">w</a></td></tr>
+<tr class="memdesc:a9738a7ae6eb6e9ac59018d7fe0b67b32"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:a5830886454142e4825347a703f286c0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5830886454142e4825347a703f286c0a"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a5830886454142e4825347a703f286c0a">w_hat</a></td></tr>
+<tr class="memdesc:a5830886454142e4825347a703f286c0a"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:ac21eced87cb3a6eafd0d22f27e0eac03"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac21eced87cb3a6eafd0d22f27e0eac03"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#ac21eced87cb3a6eafd0d22f27e0eac03">y_hat</a></td></tr>
+<tr class="memdesc:ac21eced87cb3a6eafd0d22f27e0eac03"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:a9c5a261251ad90176392b2fafcd961de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c5a261251ad90176392b2fafcd961de"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a9c5a261251ad90176392b2fafcd961de">f_iter</a></td></tr>
+<tr class="memdesc:a9c5a261251ad90176392b2fafcd961de"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a781b1438bf0c8d47f51b30551f982426"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a781b1438bf0c8d47f51b30551f982426"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a781b1438bf0c8d47f51b30551f982426">r_hat_iter</a></td></tr>
+<tr class="memdesc:a781b1438bf0c8d47f51b30551f982426"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a2c01ce7b85130d3069016e30b4a1685e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c01ce7b85130d3069016e30b4a1685e"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a2c01ce7b85130d3069016e30b4a1685e">z_iter</a></td></tr>
+<tr class="memdesc:a2c01ce7b85130d3069016e30b4a1685e"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of \ first kind <br/></td></tr>
+<tr class="memitem:a6e1fc4f4d7adf8aa89cde17cf002f0f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6e1fc4f4d7adf8aa89cde17cf002f0f6"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a6e1fc4f4d7adf8aa89cde17cf002f0f6">p_iter</a></td></tr>
+<tr class="memdesc:a6e1fc4f4d7adf8aa89cde17cf002f0f6"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:ae1911bb7b195a6cdc51fc2c9dd5663d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae1911bb7b195a6cdc51fc2c9dd5663d5"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#ae1911bb7b195a6cdc51fc2c9dd5663d5">v_hat_iter</a></td></tr>
+<tr class="memdesc:ae1911bb7b195a6cdc51fc2c9dd5663d5"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:aad358c99ea10d70c4984bf9898820865"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad358c99ea10d70c4984bf9898820865"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#aad358c99ea10d70c4984bf9898820865">alpha_iter</a></td></tr>
+<tr class="memdesc:aad358c99ea10d70c4984bf9898820865"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:a7714746a66fd3657bd247062c9c5cb24"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7714746a66fd3657bd247062c9c5cb24"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a7714746a66fd3657bd247062c9c5cb24">beta_iter</a></td></tr>
+<tr class="memdesc:a7714746a66fd3657bd247062c9c5cb24"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:a90e95de22380d88f23720ffca653edeb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a90e95de22380d88f23720ffca653edeb"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a90e95de22380d88f23720ffca653edeb">dot_r_hat_iter</a></td></tr>
+<tr class="memdesc:a90e95de22380d88f23720ffca653edeb"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a228a2a746f7b7958efb3c4a4ef28e6ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a228a2a746f7b7958efb3c4a4ef28e6ce"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a228a2a746f7b7958efb3c4a4ef28e6ce">dot_r_hat_iter_old</a></td></tr>
+<tr class="memdesc:a228a2a746f7b7958efb3c4a4ef28e6ce"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:ad854541f2e09bc978461fff1c323b2a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad854541f2e09bc978461fff1c323b2a5"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#ad854541f2e09bc978461fff1c323b2a5">dot_z_iter</a></td></tr>
+<tr class="memdesc:ad854541f2e09bc978461fff1c323b2a5"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ z_hat_iter <br/></td></tr>
+<tr class="memitem:a681a3587b2e42a24f03bac812eb7a60e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a681a3587b2e42a24f03bac812eb7a60e"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a681a3587b2e42a24f03bac812eb7a60e">dot_z_iter_old</a></td></tr>
+<tr class="memdesc:a681a3587b2e42a24f03bac812eb7a60e"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a108504616c4e19b53638a80710f9308c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a108504616c4e19b53638a80710f9308c"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a108504616c4e19b53638a80710f9308c">dot_p_iter</a></td></tr>
+<tr class="memdesc:a108504616c4e19b53638a80710f9308c"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ p_hat_iter <br/></td></tr>
+<tr class="memitem:a990b893dd142cbc3ade6436bdd603e59"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a990b893dd142cbc3ade6436bdd603e59"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfsft__adjoint__plan.html#a990b893dd142cbc3ade6436bdd603e59">dot_v_hat_iter</a></td></tr>
+<tr class="memdesc:a990b893dd142cbc3ade6436bdd603e59"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>TODO: different solvers. </p>
+<p>Structure for an adjoint transform plan </p>
+
+<p>Definition at line <a class="el" href="solver__adjoint_8h_source.html#l00078">78</a> of file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structinfst__adjoint__plan.html b/doc/api/html/structinfst__adjoint__plan.html
new file mode 100644
index 0000000..dbfab1b
--- /dev/null
+++ b/doc/api/html/structinfst__adjoint__plan.html
@@ -0,0 +1,119 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - infst_adjoint_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">infst_adjoint_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Structure for an adjoint transform plan.
+ <a href="structinfst__adjoint__plan.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a02395790ff1d9e7ffc2e3fae3b927df0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02395790ff1d9e7ffc2e3fae3b927df0"></a>
+<a class="el" href="structnfst__plan.html">nfst_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a02395790ff1d9e7ffc2e3fae3b927df0">mv</a></td></tr>
+<tr class="memdesc:a02395790ff1d9e7ffc2e3fae3b927df0"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:a8771c95bc65a49fe974389825f005ec9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8771c95bc65a49fe974389825f005ec9"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a8771c95bc65a49fe974389825f005ec9">flags</a></td></tr>
+<tr class="memdesc:a8771c95bc65a49fe974389825f005ec9"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a5b64034f7c01c3ce0a7ab02fd8477bdc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b64034f7c01c3ce0a7ab02fd8477bdc"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a5b64034f7c01c3ce0a7ab02fd8477bdc">w</a></td></tr>
+<tr class="memdesc:a5b64034f7c01c3ce0a7ab02fd8477bdc"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:a00f860d5af6ada0c99a252b5d7548f5b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00f860d5af6ada0c99a252b5d7548f5b"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a00f860d5af6ada0c99a252b5d7548f5b">w_hat</a></td></tr>
+<tr class="memdesc:a00f860d5af6ada0c99a252b5d7548f5b"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:a52d2b0b0d208e673eada45dff01e9c13"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a52d2b0b0d208e673eada45dff01e9c13"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a52d2b0b0d208e673eada45dff01e9c13">y_hat</a></td></tr>
+<tr class="memdesc:a52d2b0b0d208e673eada45dff01e9c13"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:a53b03057778ae78ee06efd6b135e23fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53b03057778ae78ee06efd6b135e23fb"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a53b03057778ae78ee06efd6b135e23fb">f_iter</a></td></tr>
+<tr class="memdesc:a53b03057778ae78ee06efd6b135e23fb"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:abd086bc019b356986e38f3db8039051f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abd086bc019b356986e38f3db8039051f"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#abd086bc019b356986e38f3db8039051f">r_hat_iter</a></td></tr>
+<tr class="memdesc:abd086bc019b356986e38f3db8039051f"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a254d587d2d91f18fb55a2ccae89198a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a254d587d2d91f18fb55a2ccae89198a5"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a254d587d2d91f18fb55a2ccae89198a5">z_iter</a></td></tr>
+<tr class="memdesc:a254d587d2d91f18fb55a2ccae89198a5"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of \ first kind <br/></td></tr>
+<tr class="memitem:a53b6ba348be2011c1cfecdb9f16829fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53b6ba348be2011c1cfecdb9f16829fd"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a53b6ba348be2011c1cfecdb9f16829fd">p_iter</a></td></tr>
+<tr class="memdesc:a53b6ba348be2011c1cfecdb9f16829fd"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:a10da470b963e2d631f48e8eb81bad94e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10da470b963e2d631f48e8eb81bad94e"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a10da470b963e2d631f48e8eb81bad94e">v_hat_iter</a></td></tr>
+<tr class="memdesc:a10da470b963e2d631f48e8eb81bad94e"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:aef3f9b375d7e43fbcbea60380c5e9f34"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef3f9b375d7e43fbcbea60380c5e9f34"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#aef3f9b375d7e43fbcbea60380c5e9f34">alpha_iter</a></td></tr>
+<tr class="memdesc:aef3f9b375d7e43fbcbea60380c5e9f34"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:a0aa7b8faeab03acb6011b673882282ea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0aa7b8faeab03acb6011b673882282ea"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a0aa7b8faeab03acb6011b673882282ea">beta_iter</a></td></tr>
+<tr class="memdesc:a0aa7b8faeab03acb6011b673882282ea"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:a3dfbd628846af0683c8fc263f8cf6418"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3dfbd628846af0683c8fc263f8cf6418"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a3dfbd628846af0683c8fc263f8cf6418">dot_r_hat_iter</a></td></tr>
+<tr class="memdesc:a3dfbd628846af0683c8fc263f8cf6418"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:ae8dfd86274f0e3bba8c01730449d0474"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae8dfd86274f0e3bba8c01730449d0474"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#ae8dfd86274f0e3bba8c01730449d0474">dot_r_hat_iter_old</a></td></tr>
+<tr class="memdesc:ae8dfd86274f0e3bba8c01730449d0474"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:a2309d1161fdf96711f3251e41a65eef0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2309d1161fdf96711f3251e41a65eef0"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a2309d1161fdf96711f3251e41a65eef0">dot_z_iter</a></td></tr>
+<tr class="memdesc:a2309d1161fdf96711f3251e41a65eef0"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ z_hat_iter <br/></td></tr>
+<tr class="memitem:a9bdd6b4dfcb1b22bd010444ef34b5903"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9bdd6b4dfcb1b22bd010444ef34b5903"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a9bdd6b4dfcb1b22bd010444ef34b5903">dot_z_iter_old</a></td></tr>
+<tr class="memdesc:a9bdd6b4dfcb1b22bd010444ef34b5903"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a6dfb17d6feade963b31c16e6278aa6ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6dfb17d6feade963b31c16e6278aa6ee"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#a6dfb17d6feade963b31c16e6278aa6ee">dot_p_iter</a></td></tr>
+<tr class="memdesc:a6dfb17d6feade963b31c16e6278aa6ee"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ p_hat_iter <br/></td></tr>
+<tr class="memitem:ab4e8f85dfe25ba2b90f86d7d39362e5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4e8f85dfe25ba2b90f86d7d39362e5c"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinfst__adjoint__plan.html#ab4e8f85dfe25ba2b90f86d7d39362e5c">dot_v_hat_iter</a></td></tr>
+<tr class="memdesc:ab4e8f85dfe25ba2b90f86d7d39362e5c"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Structure for an adjoint transform plan. </p>
+
+<p>Definition at line <a class="el" href="solver__adjoint_8h_source.html#l00081">81</a> of file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structinnfft__adjoint__plan.html b/doc/api/html/structinnfft__adjoint__plan.html
new file mode 100644
index 0000000..ea4f1c7
--- /dev/null
+++ b/doc/api/html/structinnfft__adjoint__plan.html
@@ -0,0 +1,119 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - innfft_adjoint_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">innfft_adjoint_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Structure for an adjoint transform plan.
+ <a href="structinnfft__adjoint__plan.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:abb0996d6ed2cd627dc28fb7f5c18007a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abb0996d6ed2cd627dc28fb7f5c18007a"></a>
+<a class="el" href="structnnfft__plan.html">nnfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#abb0996d6ed2cd627dc28fb7f5c18007a">mv</a></td></tr>
+<tr class="memdesc:abb0996d6ed2cd627dc28fb7f5c18007a"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:a0d51c3ece7512b04408b5a2b94ee4a05"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d51c3ece7512b04408b5a2b94ee4a05"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a0d51c3ece7512b04408b5a2b94ee4a05">flags</a></td></tr>
+<tr class="memdesc:a0d51c3ece7512b04408b5a2b94ee4a05"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a20565dbd14d036eb348ca0276a4f411c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20565dbd14d036eb348ca0276a4f411c"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a20565dbd14d036eb348ca0276a4f411c">w</a></td></tr>
+<tr class="memdesc:a20565dbd14d036eb348ca0276a4f411c"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:a0545064b15a22a5a3ae285e6aded5f80"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0545064b15a22a5a3ae285e6aded5f80"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a0545064b15a22a5a3ae285e6aded5f80">w_hat</a></td></tr>
+<tr class="memdesc:a0545064b15a22a5a3ae285e6aded5f80"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:acd0758c4ed1c79b6d2f2eed33effb539"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd0758c4ed1c79b6d2f2eed33effb539"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#acd0758c4ed1c79b6d2f2eed33effb539">y_hat</a></td></tr>
+<tr class="memdesc:acd0758c4ed1c79b6d2f2eed33effb539"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:a74d132853f5b7e0a4b8e3918dae7fe8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74d132853f5b7e0a4b8e3918dae7fe8c"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a74d132853f5b7e0a4b8e3918dae7fe8c">f_iter</a></td></tr>
+<tr class="memdesc:a74d132853f5b7e0a4b8e3918dae7fe8c"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a4739f3543d8e4e7af745c017a163516f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4739f3543d8e4e7af745c017a163516f"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a4739f3543d8e4e7af745c017a163516f">r_hat_iter</a></td></tr>
+<tr class="memdesc:a4739f3543d8e4e7af745c017a163516f"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a4a4aac08b2efbcbc13545a08bb397f52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a4aac08b2efbcbc13545a08bb397f52"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a4a4aac08b2efbcbc13545a08bb397f52">z_iter</a></td></tr>
+<tr class="memdesc:a4a4aac08b2efbcbc13545a08bb397f52"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of \ first kind <br/></td></tr>
+<tr class="memitem:a74ee726c5c0916fde59e77ca51d319eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74ee726c5c0916fde59e77ca51d319eb"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a74ee726c5c0916fde59e77ca51d319eb">p_iter</a></td></tr>
+<tr class="memdesc:a74ee726c5c0916fde59e77ca51d319eb"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:a5078575d0bf816ed68ce3c762f578887"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5078575d0bf816ed68ce3c762f578887"></a>
+double _Complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a5078575d0bf816ed68ce3c762f578887">v_hat_iter</a></td></tr>
+<tr class="memdesc:a5078575d0bf816ed68ce3c762f578887"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:ae202e8af2161d1d64bb32e49fc16f5f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae202e8af2161d1d64bb32e49fc16f5f0"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#ae202e8af2161d1d64bb32e49fc16f5f0">alpha_iter</a></td></tr>
+<tr class="memdesc:ae202e8af2161d1d64bb32e49fc16f5f0"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:a444f54274b78ec9162683d2cc9cb3160"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a444f54274b78ec9162683d2cc9cb3160"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a444f54274b78ec9162683d2cc9cb3160">beta_iter</a></td></tr>
+<tr class="memdesc:a444f54274b78ec9162683d2cc9cb3160"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:aad7bfd0f7561ec252b26b1d183622f12"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad7bfd0f7561ec252b26b1d183622f12"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#aad7bfd0f7561ec252b26b1d183622f12">dot_r_hat_iter</a></td></tr>
+<tr class="memdesc:aad7bfd0f7561ec252b26b1d183622f12"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a0a0b243360667886af63d1ac26408f74"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a0b243360667886af63d1ac26408f74"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a0a0b243360667886af63d1ac26408f74">dot_r_hat_iter_old</a></td></tr>
+<tr class="memdesc:a0a0b243360667886af63d1ac26408f74"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:aae72bba8cc1a211c1b3931c969f95a85"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae72bba8cc1a211c1b3931c969f95a85"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#aae72bba8cc1a211c1b3931c969f95a85">dot_z_iter</a></td></tr>
+<tr class="memdesc:aae72bba8cc1a211c1b3931c969f95a85"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ z_hat_iter <br/></td></tr>
+<tr class="memitem:a669c48fd77d0d04bf0adc4ebedbd699f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a669c48fd77d0d04bf0adc4ebedbd699f"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a669c48fd77d0d04bf0adc4ebedbd699f">dot_z_iter_old</a></td></tr>
+<tr class="memdesc:a669c48fd77d0d04bf0adc4ebedbd699f"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a3d20a53eb3c0158cc401d7b0d640da07"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d20a53eb3c0158cc401d7b0d640da07"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a3d20a53eb3c0158cc401d7b0d640da07">dot_p_iter</a></td></tr>
+<tr class="memdesc:a3d20a53eb3c0158cc401d7b0d640da07"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of \ p_hat_iter <br/></td></tr>
+<tr class="memitem:a5d9a12eacf094e7f9e771add0a3874d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5d9a12eacf094e7f9e771add0a3874d5"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structinnfft__adjoint__plan.html#a5d9a12eacf094e7f9e771add0a3874d5">dot_v_hat_iter</a></td></tr>
+<tr class="memdesc:a5d9a12eacf094e7f9e771add0a3874d5"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Structure for an adjoint transform plan. </p>
+
+<p>Definition at line <a class="el" href="solver__adjoint_8h_source.html#l00082">82</a> of file <a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="solver__adjoint_8h_source.html">solver_adjoint.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structmri__inh__2d1d__plan.html b/doc/api/html/structmri__inh__2d1d__plan.html
new file mode 100644
index 0000000..ce1df36
--- /dev/null
+++ b/doc/api/html/structmri__inh__2d1d__plan.html
@@ -0,0 +1,87 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - mri_inh_2d1d_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">mri_inh_2d1d_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a25e2abd348fabee511856c61a7074c5b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25e2abd348fabee511856c61a7074c5b"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__2d1d__plan.html#a25e2abd348fabee511856c61a7074c5b">N_total</a></td></tr>
+<tr class="memdesc:a25e2abd348fabee511856c61a7074c5b"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a45f3f352231150e660ca1b8819d58d09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a45f3f352231150e660ca1b8819d58d09"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__2d1d__plan.html#a45f3f352231150e660ca1b8819d58d09">M_total</a></td></tr>
+<tr class="memdesc:a45f3f352231150e660ca1b8819d58d09"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ad34c95b6390628c8fcd223b77e37e5bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad34c95b6390628c8fcd223b77e37e5bf"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__2d1d__plan.html#ad34c95b6390628c8fcd223b77e37e5bf">f_hat</a></td></tr>
+<tr class="memdesc:ad34c95b6390628c8fcd223b77e37e5bf"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a985f125ad6a94361939572f8323872a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a985f125ad6a94361939572f8323872a0"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__2d1d__plan.html#a985f125ad6a94361939572f8323872a0">f</a></td></tr>
+<tr class="memdesc:a985f125ad6a94361939572f8323872a0"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a4cad33b38f4d5bc54b8d25d90913ab44"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cad33b38f4d5bc54b8d25d90913ab44"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__2d1d__plan.html#a4cad33b38f4d5bc54b8d25d90913ab44">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a4cad33b38f4d5bc54b8d25d90913ab44"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:afe427225384a2d226c3cb85cf9aa4042"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe427225384a2d226c3cb85cf9aa4042"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__2d1d__plan.html#afe427225384a2d226c3cb85cf9aa4042">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:afe427225384a2d226c3cb85cf9aa4042"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:ac911bea7fd2e5b81f3f7a917842d6bc7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac911bea7fd2e5b81f3f7a917842d6bc7"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> </td><td class="memItemRight" valign="bottom"><b>plan</b></td></tr>
+<tr class="memitem:a9776bd2e03278b7cbdef2b4dce19dbc1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9776bd2e03278b7cbdef2b4dce19dbc1"></a>
+int </td><td class="memItemRight" valign="bottom"><b>N3</b></td></tr>
+<tr class="memitem:a94c6285d9cfeb7e358dd4990245639e7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a94c6285d9cfeb7e358dd4990245639e7"></a>
+double </td><td class="memItemRight" valign="bottom"><b>sigma3</b></td></tr>
+<tr class="memitem:ae80cae06faca26a12bbbb896d5d7c527"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae80cae06faca26a12bbbb896d5d7c527"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>t</b></td></tr>
+<tr class="memitem:a22ed3402646ded705084299c84d97a62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22ed3402646ded705084299c84d97a62"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>w</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00504">504</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structmri__inh__3d__plan.html b/doc/api/html/structmri__inh__3d__plan.html
new file mode 100644
index 0000000..68de26a
--- /dev/null
+++ b/doc/api/html/structmri__inh__3d__plan.html
@@ -0,0 +1,87 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - mri_inh_3d_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">mri_inh_3d_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aa1b253e912e92b252c4992eb86d92e12"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1b253e912e92b252c4992eb86d92e12"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__3d__plan.html#aa1b253e912e92b252c4992eb86d92e12">N_total</a></td></tr>
+<tr class="memdesc:aa1b253e912e92b252c4992eb86d92e12"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ae90c4e1c541956b5902e7aafc193ad8b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae90c4e1c541956b5902e7aafc193ad8b"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__3d__plan.html#ae90c4e1c541956b5902e7aafc193ad8b">M_total</a></td></tr>
+<tr class="memdesc:ae90c4e1c541956b5902e7aafc193ad8b"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a91ed30b213dea4954d2d27c4d1334a50"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91ed30b213dea4954d2d27c4d1334a50"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__3d__plan.html#a91ed30b213dea4954d2d27c4d1334a50">f_hat</a></td></tr>
+<tr class="memdesc:a91ed30b213dea4954d2d27c4d1334a50"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a9e51f5f4ad46d4b120c452fc962a2385"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e51f5f4ad46d4b120c452fc962a2385"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__3d__plan.html#a9e51f5f4ad46d4b120c452fc962a2385">f</a></td></tr>
+<tr class="memdesc:a9e51f5f4ad46d4b120c452fc962a2385"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a780818802d5bfdc4d4174a3637254fd5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a780818802d5bfdc4d4174a3637254fd5"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__3d__plan.html#a780818802d5bfdc4d4174a3637254fd5">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a780818802d5bfdc4d4174a3637254fd5"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:afa2e143e704b701e9a0ee1d795f46b5b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa2e143e704b701e9a0ee1d795f46b5b"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmri__inh__3d__plan.html#afa2e143e704b701e9a0ee1d795f46b5b">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:afa2e143e704b701e9a0ee1d795f46b5b"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:ac8386842f48b212c4132a3b151d73402"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac8386842f48b212c4132a3b151d73402"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> </td><td class="memItemRight" valign="bottom"><b>plan</b></td></tr>
+<tr class="memitem:af12a214bc2e75f1188cd7ff1bb99f0ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af12a214bc2e75f1188cd7ff1bb99f0ff"></a>
+int </td><td class="memItemRight" valign="bottom"><b>N3</b></td></tr>
+<tr class="memitem:a88b160a5bf9943ebffc65365f2b7663f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a88b160a5bf9943ebffc65365f2b7663f"></a>
+double </td><td class="memItemRight" valign="bottom"><b>sigma3</b></td></tr>
+<tr class="memitem:ae7fe0fd3fb4509abc5a7a7c07df63a1b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7fe0fd3fb4509abc5a7a7c07df63a1b"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>t</b></td></tr>
+<tr class="memitem:aaf6f68ab1fa5e3b852487bf12dc483ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf6f68ab1fa5e3b852487bf12dc483ff"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>w</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00504">504</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structmrif__inh__2d1d__plan.html b/doc/api/html/structmrif__inh__2d1d__plan.html
new file mode 100644
index 0000000..ab28980
--- /dev/null
+++ b/doc/api/html/structmrif__inh__2d1d__plan.html
@@ -0,0 +1,87 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - mrif_inh_2d1d_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">mrif_inh_2d1d_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afad39dcd7d77c81247bcf5e4abc1cdaa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afad39dcd7d77c81247bcf5e4abc1cdaa"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__2d1d__plan.html#afad39dcd7d77c81247bcf5e4abc1cdaa">N_total</a></td></tr>
+<tr class="memdesc:afad39dcd7d77c81247bcf5e4abc1cdaa"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ac9fffb187c8a840eb83939ba4d710f13"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9fffb187c8a840eb83939ba4d710f13"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__2d1d__plan.html#ac9fffb187c8a840eb83939ba4d710f13">M_total</a></td></tr>
+<tr class="memdesc:ac9fffb187c8a840eb83939ba4d710f13"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a18fb340e9ead654552e45033c81ac637"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18fb340e9ead654552e45033c81ac637"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__2d1d__plan.html#a18fb340e9ead654552e45033c81ac637">f_hat</a></td></tr>
+<tr class="memdesc:a18fb340e9ead654552e45033c81ac637"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a3ab01f8b5f1b1368dbf3d7715ce46997"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ab01f8b5f1b1368dbf3d7715ce46997"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__2d1d__plan.html#a3ab01f8b5f1b1368dbf3d7715ce46997">f</a></td></tr>
+<tr class="memdesc:a3ab01f8b5f1b1368dbf3d7715ce46997"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:acdbe3a414d9c87baba03db3d873b864c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acdbe3a414d9c87baba03db3d873b864c"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__2d1d__plan.html#acdbe3a414d9c87baba03db3d873b864c">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:acdbe3a414d9c87baba03db3d873b864c"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:aea23a3331d423e70f2cbbeee71303906"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea23a3331d423e70f2cbbeee71303906"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__2d1d__plan.html#aea23a3331d423e70f2cbbeee71303906">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:aea23a3331d423e70f2cbbeee71303906"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a50fc144d7931e8db51c8b745096419c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a50fc144d7931e8db51c8b745096419c0"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> </td><td class="memItemRight" valign="bottom"><b>plan</b></td></tr>
+<tr class="memitem:ae083ca7967f0ac15dca241336782f353"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae083ca7967f0ac15dca241336782f353"></a>
+int </td><td class="memItemRight" valign="bottom"><b>N3</b></td></tr>
+<tr class="memitem:a7feb68d7fd4fe5590700ddf6aa64d27c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7feb68d7fd4fe5590700ddf6aa64d27c"></a>
+float </td><td class="memItemRight" valign="bottom"><b>sigma3</b></td></tr>
+<tr class="memitem:a601416c33ee05eb2cc89b3a03aa0bb0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a601416c33ee05eb2cc89b3a03aa0bb0b"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>t</b></td></tr>
+<tr class="memitem:a53834de9b90ac2eb35eb5bf5b00bdfac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53834de9b90ac2eb35eb5bf5b00bdfac"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>w</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00504">504</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structmrif__inh__3d__plan.html b/doc/api/html/structmrif__inh__3d__plan.html
new file mode 100644
index 0000000..0de08e7
--- /dev/null
+++ b/doc/api/html/structmrif__inh__3d__plan.html
@@ -0,0 +1,87 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - mrif_inh_3d_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">mrif_inh_3d_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a7d51e6be67c5f2bc4d1a996e10228258"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7d51e6be67c5f2bc4d1a996e10228258"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__3d__plan.html#a7d51e6be67c5f2bc4d1a996e10228258">N_total</a></td></tr>
+<tr class="memdesc:a7d51e6be67c5f2bc4d1a996e10228258"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a03c2aa160944a42e0f3116e7545ed20f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03c2aa160944a42e0f3116e7545ed20f"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__3d__plan.html#a03c2aa160944a42e0f3116e7545ed20f">M_total</a></td></tr>
+<tr class="memdesc:a03c2aa160944a42e0f3116e7545ed20f"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ac644cb0bbceb7ea8634ea94758da405d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac644cb0bbceb7ea8634ea94758da405d"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__3d__plan.html#ac644cb0bbceb7ea8634ea94758da405d">f_hat</a></td></tr>
+<tr class="memdesc:ac644cb0bbceb7ea8634ea94758da405d"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:aa762bd3f11d1558e792ff34dc710bcb3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa762bd3f11d1558e792ff34dc710bcb3"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__3d__plan.html#aa762bd3f11d1558e792ff34dc710bcb3">f</a></td></tr>
+<tr class="memdesc:aa762bd3f11d1558e792ff34dc710bcb3"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a4763b4f8f1b5f574d601289ab3cbcfa8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4763b4f8f1b5f574d601289ab3cbcfa8"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__3d__plan.html#a4763b4f8f1b5f574d601289ab3cbcfa8">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a4763b4f8f1b5f574d601289ab3cbcfa8"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:ac765b0a8797a3fd31b58133be9ff280b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac765b0a8797a3fd31b58133be9ff280b"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrif__inh__3d__plan.html#ac765b0a8797a3fd31b58133be9ff280b">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:ac765b0a8797a3fd31b58133be9ff280b"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a6c0f3d1e0a228a2484fdd9eeb3bdd0be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6c0f3d1e0a228a2484fdd9eeb3bdd0be"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> </td><td class="memItemRight" valign="bottom"><b>plan</b></td></tr>
+<tr class="memitem:ab63634a14a15edd68fbd75d25fe15b5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab63634a14a15edd68fbd75d25fe15b5e"></a>
+int </td><td class="memItemRight" valign="bottom"><b>N3</b></td></tr>
+<tr class="memitem:a1e9410e5e47340d676ceefb7168ab110"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e9410e5e47340d676ceefb7168ab110"></a>
+float </td><td class="memItemRight" valign="bottom"><b>sigma3</b></td></tr>
+<tr class="memitem:a36265c182dd339b4b38b7af8fa70f98c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36265c182dd339b4b38b7af8fa70f98c"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>t</b></td></tr>
+<tr class="memitem:a00ec124b509d9b222c9ce3cf2bb47ac8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00ec124b509d9b222c9ce3cf2bb47ac8"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>w</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00504">504</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structmril__inh__2d1d__plan.html b/doc/api/html/structmril__inh__2d1d__plan.html
new file mode 100644
index 0000000..f09afb6
--- /dev/null
+++ b/doc/api/html/structmril__inh__2d1d__plan.html
@@ -0,0 +1,87 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - mril_inh_2d1d_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">mril_inh_2d1d_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a4114df78a52f5e4a1a12a13678a9cb6c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4114df78a52f5e4a1a12a13678a9cb6c"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__2d1d__plan.html#a4114df78a52f5e4a1a12a13678a9cb6c">N_total</a></td></tr>
+<tr class="memdesc:a4114df78a52f5e4a1a12a13678a9cb6c"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a241e8def5a65484080b01871c12851b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a241e8def5a65484080b01871c12851b3"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__2d1d__plan.html#a241e8def5a65484080b01871c12851b3">M_total</a></td></tr>
+<tr class="memdesc:a241e8def5a65484080b01871c12851b3"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a70247e89a002d0e7b5c66d1e87b33645"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a70247e89a002d0e7b5c66d1e87b33645"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__2d1d__plan.html#a70247e89a002d0e7b5c66d1e87b33645">f_hat</a></td></tr>
+<tr class="memdesc:a70247e89a002d0e7b5c66d1e87b33645"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a3e2fef5b1bb862347511209994235597"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3e2fef5b1bb862347511209994235597"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__2d1d__plan.html#a3e2fef5b1bb862347511209994235597">f</a></td></tr>
+<tr class="memdesc:a3e2fef5b1bb862347511209994235597"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a7dbc7cd7b733b5850a59f35aa0f959d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7dbc7cd7b733b5850a59f35aa0f959d1"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__2d1d__plan.html#a7dbc7cd7b733b5850a59f35aa0f959d1">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a7dbc7cd7b733b5850a59f35aa0f959d1"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a6259dd5746b911632df1286d0654eabe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6259dd5746b911632df1286d0654eabe"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__2d1d__plan.html#a6259dd5746b911632df1286d0654eabe">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a6259dd5746b911632df1286d0654eabe"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:abbc8cab682b3da749c06f40e70bc475b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abbc8cab682b3da749c06f40e70bc475b"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> </td><td class="memItemRight" valign="bottom"><b>plan</b></td></tr>
+<tr class="memitem:ab27fdcb536441767bf95adb8cbfe6425"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab27fdcb536441767bf95adb8cbfe6425"></a>
+int </td><td class="memItemRight" valign="bottom"><b>N3</b></td></tr>
+<tr class="memitem:a71b071b164272b44056ef3b8db619eaf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a71b071b164272b44056ef3b8db619eaf"></a>
+long double </td><td class="memItemRight" valign="bottom"><b>sigma3</b></td></tr>
+<tr class="memitem:af38eb9a2453ec19d56017f6eda837e3f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af38eb9a2453ec19d56017f6eda837e3f"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>t</b></td></tr>
+<tr class="memitem:abca46d1b594697ace053934faacf1639"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abca46d1b594697ace053934faacf1639"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>w</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00504">504</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structmril__inh__3d__plan.html b/doc/api/html/structmril__inh__3d__plan.html
new file mode 100644
index 0000000..ccad9da
--- /dev/null
+++ b/doc/api/html/structmril__inh__3d__plan.html
@@ -0,0 +1,87 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - mril_inh_3d_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">mril_inh_3d_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a79e477483b67862d2dd7fcb5432f7651"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a79e477483b67862d2dd7fcb5432f7651"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__3d__plan.html#a79e477483b67862d2dd7fcb5432f7651">N_total</a></td></tr>
+<tr class="memdesc:a79e477483b67862d2dd7fcb5432f7651"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a9a1093b920fb4468b59c7120a7e1ceb5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a1093b920fb4468b59c7120a7e1ceb5"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__3d__plan.html#a9a1093b920fb4468b59c7120a7e1ceb5">M_total</a></td></tr>
+<tr class="memdesc:a9a1093b920fb4468b59c7120a7e1ceb5"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ae1f94471fa54c0a172ede3345d0a9a9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae1f94471fa54c0a172ede3345d0a9a9c"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__3d__plan.html#ae1f94471fa54c0a172ede3345d0a9a9c">f_hat</a></td></tr>
+<tr class="memdesc:ae1f94471fa54c0a172ede3345d0a9a9c"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:adb03497106fd0a995b70010f9cd9684b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb03497106fd0a995b70010f9cd9684b"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__3d__plan.html#adb03497106fd0a995b70010f9cd9684b">f</a></td></tr>
+<tr class="memdesc:adb03497106fd0a995b70010f9cd9684b"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a61eec020c68a2b36cff4acb6dd4dcf96"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61eec020c68a2b36cff4acb6dd4dcf96"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__3d__plan.html#a61eec020c68a2b36cff4acb6dd4dcf96">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a61eec020c68a2b36cff4acb6dd4dcf96"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a2d189c2b7f8b5bf635cce01354ef253e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d189c2b7f8b5bf635cce01354ef253e"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structmril__inh__3d__plan.html#a2d189c2b7f8b5bf635cce01354ef253e">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a2d189c2b7f8b5bf635cce01354ef253e"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a0e1db4b2be63bb1fffc9342986cfdc09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0e1db4b2be63bb1fffc9342986cfdc09"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> </td><td class="memItemRight" valign="bottom"><b>plan</b></td></tr>
+<tr class="memitem:ae596bbf35deb08eff8bfbbe0bbc13989"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae596bbf35deb08eff8bfbbe0bbc13989"></a>
+int </td><td class="memItemRight" valign="bottom"><b>N3</b></td></tr>
+<tr class="memitem:a26e17b2e0c29cf24a162afe4762964a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a26e17b2e0c29cf24a162afe4762964a5"></a>
+long double </td><td class="memItemRight" valign="bottom"><b>sigma3</b></td></tr>
+<tr class="memitem:a18aa5418abc97a758f5c07b8dabcff77"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18aa5418abc97a758f5c07b8dabcff77"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>t</b></td></tr>
+<tr class="memitem:a9688d8a0cdd89e17a71c45efd8ab3d46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9688d8a0cdd89e17a71c45efd8ab3d46"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>w</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00504">504</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfct__plan.html b/doc/api/html/structnfct__plan.html
new file mode 100644
index 0000000..9df2072
--- /dev/null
+++ b/doc/api/html/structnfct__plan.html
@@ -0,0 +1,147 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfct_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfct_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:af736d9e6e59e9a91276a48a50979fedb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af736d9e6e59e9a91276a48a50979fedb"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#af736d9e6e59e9a91276a48a50979fedb">FFTW_MANGLE_DOUBLE</a> (plan) my_fftw_r2r_plan</td></tr>
+<tr class="memdesc:af736d9e6e59e9a91276a48a50979fedb"><td class="mdescLeft"> </td><td class="mdescRight">fftw_plan <br/></td></tr>
+<tr class="memitem:a5ae19fdb6ea93d515109229f419c22df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ae19fdb6ea93d515109229f419c22df"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a5ae19fdb6ea93d515109229f419c22df">FFTW_MANGLE_DOUBLE</a> (r2r_kind)*r2r_kind</td></tr>
+<tr class="memdesc:a5ae19fdb6ea93d515109229f419c22df"><td class="mdescLeft"> </td><td class="mdescRight">r2r transform type (DCT-I) <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:abc66ae61c54a049868c62288623d4a6b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abc66ae61c54a049868c62288623d4a6b"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#abc66ae61c54a049868c62288623d4a6b">N_total</a></td></tr>
+<tr class="memdesc:abc66ae61c54a049868c62288623d4a6b"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ab201c4e89753b167954e7cb5f34a321d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab201c4e89753b167954e7cb5f34a321d"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#ab201c4e89753b167954e7cb5f34a321d">M_total</a></td></tr>
+<tr class="memdesc:ab201c4e89753b167954e7cb5f34a321d"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:af289164b09e85f75e8ed0eb3ded40d9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af289164b09e85f75e8ed0eb3ded40d9c"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#af289164b09e85f75e8ed0eb3ded40d9c">f_hat</a></td></tr>
+<tr class="memdesc:af289164b09e85f75e8ed0eb3ded40d9c"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( double ) <br/></td></tr>
+<tr class="memitem:acca00284f93bd33c00a1b099a6eec8cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acca00284f93bd33c00a1b099a6eec8cd"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#acca00284f93bd33c00a1b099a6eec8cd">f</a></td></tr>
+<tr class="memdesc:acca00284f93bd33c00a1b099a6eec8cd"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( double ) <br/></td></tr>
+<tr class="memitem:a5f9802e95bfc2ae69f22e91c1fe47778"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f9802e95bfc2ae69f22e91c1fe47778"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a5f9802e95bfc2ae69f22e91c1fe47778">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a5f9802e95bfc2ae69f22e91c1fe47778"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:aab8ee071a4e254cbf94a03689ed3127f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aab8ee071a4e254cbf94a03689ed3127f"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#aab8ee071a4e254cbf94a03689ed3127f">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:aab8ee071a4e254cbf94a03689ed3127f"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a998a428a06532646854e8add72c5ca63"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a998a428a06532646854e8add72c5ca63"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a998a428a06532646854e8add72c5ca63">d</a></td></tr>
+<tr class="memdesc:a998a428a06532646854e8add72c5ca63"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:ad4d0600d8b0ee9d41bff22a7d63e64cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4d0600d8b0ee9d41bff22a7d63e64cf"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#ad4d0600d8b0ee9d41bff22a7d63e64cf">N</a></td></tr>
+<tr class="memdesc:ad4d0600d8b0ee9d41bff22a7d63e64cf"><td class="mdescLeft"> </td><td class="mdescRight">cut-off-frequencies (kernel) <br/></td></tr>
+<tr class="memitem:a0ad3d47d659b3641bb90eca6e56f9047"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ad3d47d659b3641bb90eca6e56f9047"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a0ad3d47d659b3641bb90eca6e56f9047">n</a></td></tr>
+<tr class="memdesc:a0ad3d47d659b3641bb90eca6e56f9047"><td class="mdescLeft"> </td><td class="mdescRight">length of DCT-I <br/></td></tr>
+<tr class="memitem:a56c9f580f79fb7605ae21bcbb729a8b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56c9f580f79fb7605ae21bcbb729a8b9"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a56c9f580f79fb7605ae21bcbb729a8b9">sigma</a></td></tr>
+<tr class="memdesc:a56c9f580f79fb7605ae21bcbb729a8b9"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a15e9f66b0447148fcce4af9eafa2f9ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15e9f66b0447148fcce4af9eafa2f9ed"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a15e9f66b0447148fcce4af9eafa2f9ed">m</a></td></tr>
+<tr class="memdesc:a15e9f66b0447148fcce4af9eafa2f9ed"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:a63a852f63d54aa497bceeef5475cd9d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63a852f63d54aa497bceeef5475cd9d3"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nfct_full_psi_eps</b></td></tr>
+<tr class="memitem:af1c2c2fe35f5b574a39109bb7b176270"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af1c2c2fe35f5b574a39109bb7b176270"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#af1c2c2fe35f5b574a39109bb7b176270">b</a></td></tr>
+<tr class="memdesc:af1c2c2fe35f5b574a39109bb7b176270"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:ae2a2e493b2938fe9b22b0506765f30cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2a2e493b2938fe9b22b0506765f30cf"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#ae2a2e493b2938fe9b22b0506765f30cf">nfct_flags</a></td></tr>
+<tr class="memdesc:ae2a2e493b2938fe9b22b0506765f30cf"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:a407c06575335351e1b720b40f8b4f26c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a407c06575335351e1b720b40f8b4f26c"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a407c06575335351e1b720b40f8b4f26c">fftw_flags</a></td></tr>
+<tr class="memdesc:a407c06575335351e1b720b40f8b4f26c"><td class="mdescLeft"> </td><td class="mdescRight">flags for the fftw <br/></td></tr>
+<tr class="memitem:a5635e780f4c492f087754d71f16e07ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5635e780f4c492f087754d71f16e07ed"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a5635e780f4c492f087754d71f16e07ed">x</a></td></tr>
+<tr class="memdesc:a5635e780f4c492f087754d71f16e07ed"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:acd69baad39feaa27f34c063960b173f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd69baad39feaa27f34c063960b173f0"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#acd69baad39feaa27f34c063960b173f0">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:acd69baad39feaa27f34c063960b173f0"><td class="mdescLeft"> </td><td class="mdescRight">measured time for each step <br/></td></tr>
+<tr class="memitem:aa217dda883fc3533b95bf6ab6ccff888"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa217dda883fc3533b95bf6ab6ccff888"></a>
+double ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#aa217dda883fc3533b95bf6ab6ccff888">c_phi_inv</a></td></tr>
+<tr class="memdesc:aa217dda883fc3533b95bf6ab6ccff888"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:ad3886151e655110a1c5ba71a66439e2b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3886151e655110a1c5ba71a66439e2b"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#ad3886151e655110a1c5ba71a66439e2b">psi</a></td></tr>
+<tr class="memdesc:ad3886151e655110a1c5ba71a66439e2b"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:ab03d9f17b3fb46eb14439745e8f7994b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab03d9f17b3fb46eb14439745e8f7994b"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#ab03d9f17b3fb46eb14439745e8f7994b">size_psi</a></td></tr>
+<tr class="memdesc:ab03d9f17b3fb46eb14439745e8f7994b"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:adcd209b5cbbfae40c5490a1141b7acda"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adcd209b5cbbfae40c5490a1141b7acda"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#adcd209b5cbbfae40c5490a1141b7acda">psi_index_g</a></td></tr>
+<tr class="memdesc:adcd209b5cbbfae40c5490a1141b7acda"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a59633568fd7d1cb01df5f49f08ad352c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59633568fd7d1cb01df5f49f08ad352c"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a59633568fd7d1cb01df5f49f08ad352c">psi_index_f</a></td></tr>
+<tr class="memdesc:a59633568fd7d1cb01df5f49f08ad352c"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a88c6d97cb413daa4aa92bcb8f3536b7e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a88c6d97cb413daa4aa92bcb8f3536b7e"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>g</b></td></tr>
+<tr class="memitem:acf3167b1a9a1982581cbb69fa5a7e19e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf3167b1a9a1982581cbb69fa5a7e19e"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>g_hat</b></td></tr>
+<tr class="memitem:a597e9fd4dddb36748c5e33ee1f058835"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a597e9fd4dddb36748c5e33ee1f058835"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a597e9fd4dddb36748c5e33ee1f058835">g1</a></td></tr>
+<tr class="memdesc:a597e9fd4dddb36748c5e33ee1f058835"><td class="mdescLeft"> </td><td class="mdescRight">input of fftw <br/></td></tr>
+<tr class="memitem:ac4c375e593da728a4e7477f76ff12031"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4c375e593da728a4e7477f76ff12031"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#ac4c375e593da728a4e7477f76ff12031">g2</a></td></tr>
+<tr class="memdesc:ac4c375e593da728a4e7477f76ff12031"><td class="mdescLeft"> </td><td class="mdescRight">output of fftw <br/></td></tr>
+<tr class="memitem:a53242b3a71b8997bdcd173777146c427"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53242b3a71b8997bdcd173777146c427"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfct__plan.html#a53242b3a71b8997bdcd173777146c427">spline_coeffs</a></td></tr>
+<tr class="memdesc:a53242b3a71b8997bdcd173777146c427"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00261">261</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfctf__plan.html b/doc/api/html/structnfctf__plan.html
new file mode 100644
index 0000000..a811e3b
--- /dev/null
+++ b/doc/api/html/structnfctf__plan.html
@@ -0,0 +1,147 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfctf_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfctf_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a18d7721bf6d8ccbc5bb20e2dad30f9a3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18d7721bf6d8ccbc5bb20e2dad30f9a3"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a18d7721bf6d8ccbc5bb20e2dad30f9a3">FFTW_MANGLE_FLOAT</a> (plan) my_fftw_r2r_plan</td></tr>
+<tr class="memdesc:a18d7721bf6d8ccbc5bb20e2dad30f9a3"><td class="mdescLeft"> </td><td class="mdescRight">fftw_plan <br/></td></tr>
+<tr class="memitem:a3aef4c36c692ab0ac6e9ab69b32ac761"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3aef4c36c692ab0ac6e9ab69b32ac761"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a3aef4c36c692ab0ac6e9ab69b32ac761">FFTW_MANGLE_FLOAT</a> (r2r_kind)*r2r_kind</td></tr>
+<tr class="memdesc:a3aef4c36c692ab0ac6e9ab69b32ac761"><td class="mdescLeft"> </td><td class="mdescRight">r2r transform type (DCT-I) <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a618b4315972d4ef612c772649d470ff9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a618b4315972d4ef612c772649d470ff9"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a618b4315972d4ef612c772649d470ff9">N_total</a></td></tr>
+<tr class="memdesc:a618b4315972d4ef612c772649d470ff9"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a86276f6249784d5121d83453818709e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a86276f6249784d5121d83453818709e9"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a86276f6249784d5121d83453818709e9">M_total</a></td></tr>
+<tr class="memdesc:a86276f6249784d5121d83453818709e9"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a33bae90d163b1d848efc2c656bac6839"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a33bae90d163b1d848efc2c656bac6839"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a33bae90d163b1d848efc2c656bac6839">f_hat</a></td></tr>
+<tr class="memdesc:a33bae90d163b1d848efc2c656bac6839"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( float ) <br/></td></tr>
+<tr class="memitem:a5c695490725fbd63787fb76548de2908"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5c695490725fbd63787fb76548de2908"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a5c695490725fbd63787fb76548de2908">f</a></td></tr>
+<tr class="memdesc:a5c695490725fbd63787fb76548de2908"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( float ) <br/></td></tr>
+<tr class="memitem:a7a532e28539e1ac2f49413248ae76a67"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a532e28539e1ac2f49413248ae76a67"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a7a532e28539e1ac2f49413248ae76a67">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a7a532e28539e1ac2f49413248ae76a67"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a876dda7208fd0634f426c1e5cb04b77f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a876dda7208fd0634f426c1e5cb04b77f"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a876dda7208fd0634f426c1e5cb04b77f">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a876dda7208fd0634f426c1e5cb04b77f"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a1129b984a15339cca4fbbbc2190d43af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1129b984a15339cca4fbbbc2190d43af"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a1129b984a15339cca4fbbbc2190d43af">d</a></td></tr>
+<tr class="memdesc:a1129b984a15339cca4fbbbc2190d43af"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:ade6a750c99253ddfe82c08e439094507"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade6a750c99253ddfe82c08e439094507"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#ade6a750c99253ddfe82c08e439094507">N</a></td></tr>
+<tr class="memdesc:ade6a750c99253ddfe82c08e439094507"><td class="mdescLeft"> </td><td class="mdescRight">cut-off-frequencies (kernel) <br/></td></tr>
+<tr class="memitem:a9c8ffbb61c7f5ad5d0a5545bdff83270"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c8ffbb61c7f5ad5d0a5545bdff83270"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a9c8ffbb61c7f5ad5d0a5545bdff83270">n</a></td></tr>
+<tr class="memdesc:a9c8ffbb61c7f5ad5d0a5545bdff83270"><td class="mdescLeft"> </td><td class="mdescRight">length of DCT-I <br/></td></tr>
+<tr class="memitem:acfc4ccc79c6fa50199500a790cb833b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acfc4ccc79c6fa50199500a790cb833b2"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#acfc4ccc79c6fa50199500a790cb833b2">sigma</a></td></tr>
+<tr class="memdesc:acfc4ccc79c6fa50199500a790cb833b2"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a255a1e1526bba8643690e0aa9c5b90c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a255a1e1526bba8643690e0aa9c5b90c6"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a255a1e1526bba8643690e0aa9c5b90c6">m</a></td></tr>
+<tr class="memdesc:a255a1e1526bba8643690e0aa9c5b90c6"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:a7bc46d14287ec885bb855b8d13882b86"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7bc46d14287ec885bb855b8d13882b86"></a>
+float </td><td class="memItemRight" valign="bottom"><b>nfct_full_psi_eps</b></td></tr>
+<tr class="memitem:a6eb955f63212f63c0ac26894f8355caf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6eb955f63212f63c0ac26894f8355caf"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a6eb955f63212f63c0ac26894f8355caf">b</a></td></tr>
+<tr class="memdesc:a6eb955f63212f63c0ac26894f8355caf"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:a484df328b87ae06b6c47b03298e18dbd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a484df328b87ae06b6c47b03298e18dbd"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a484df328b87ae06b6c47b03298e18dbd">nfct_flags</a></td></tr>
+<tr class="memdesc:a484df328b87ae06b6c47b03298e18dbd"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:afd3bc700b6adca6d3dde831c9a7aae79"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd3bc700b6adca6d3dde831c9a7aae79"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#afd3bc700b6adca6d3dde831c9a7aae79">fftw_flags</a></td></tr>
+<tr class="memdesc:afd3bc700b6adca6d3dde831c9a7aae79"><td class="mdescLeft"> </td><td class="mdescRight">flags for the fftw <br/></td></tr>
+<tr class="memitem:acf91ba20ce671a5d4c971465fbd33b03"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf91ba20ce671a5d4c971465fbd33b03"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#acf91ba20ce671a5d4c971465fbd33b03">x</a></td></tr>
+<tr class="memdesc:acf91ba20ce671a5d4c971465fbd33b03"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:a3621b32cd8ea93b2bcb8db6ce40cd5bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3621b32cd8ea93b2bcb8db6ce40cd5bb"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a3621b32cd8ea93b2bcb8db6ce40cd5bb">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:a3621b32cd8ea93b2bcb8db6ce40cd5bb"><td class="mdescLeft"> </td><td class="mdescRight">measured time for each step <br/></td></tr>
+<tr class="memitem:a38d2c1dec96ad6d632133bc1dcbf82cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38d2c1dec96ad6d632133bc1dcbf82cb"></a>
+float ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a38d2c1dec96ad6d632133bc1dcbf82cb">c_phi_inv</a></td></tr>
+<tr class="memdesc:a38d2c1dec96ad6d632133bc1dcbf82cb"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:a748631060895d5106d11cdf4fce3ee60"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a748631060895d5106d11cdf4fce3ee60"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a748631060895d5106d11cdf4fce3ee60">psi</a></td></tr>
+<tr class="memdesc:a748631060895d5106d11cdf4fce3ee60"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:a2a01c089b030159c77a9bdcb46d1b183"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a01c089b030159c77a9bdcb46d1b183"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a2a01c089b030159c77a9bdcb46d1b183">size_psi</a></td></tr>
+<tr class="memdesc:a2a01c089b030159c77a9bdcb46d1b183"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a60f4fbcf2fb3a48a037e5cda4608f535"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a60f4fbcf2fb3a48a037e5cda4608f535"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a60f4fbcf2fb3a48a037e5cda4608f535">psi_index_g</a></td></tr>
+<tr class="memdesc:a60f4fbcf2fb3a48a037e5cda4608f535"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:aa33238f59c2282eea4b81d8ecbba1417"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa33238f59c2282eea4b81d8ecbba1417"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#aa33238f59c2282eea4b81d8ecbba1417">psi_index_f</a></td></tr>
+<tr class="memdesc:aa33238f59c2282eea4b81d8ecbba1417"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a09031fa0477e6b4ee2ac34a2cf1e85fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09031fa0477e6b4ee2ac34a2cf1e85fd"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>g</b></td></tr>
+<tr class="memitem:a278cf5e2a4d6bf386682bc1048de6e55"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a278cf5e2a4d6bf386682bc1048de6e55"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>g_hat</b></td></tr>
+<tr class="memitem:a44a225766135ec7d1bbe8e8e7631faa3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44a225766135ec7d1bbe8e8e7631faa3"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a44a225766135ec7d1bbe8e8e7631faa3">g1</a></td></tr>
+<tr class="memdesc:a44a225766135ec7d1bbe8e8e7631faa3"><td class="mdescLeft"> </td><td class="mdescRight">input of fftw <br/></td></tr>
+<tr class="memitem:a4a70d593fb1704dda85e2392c77ea3bc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a70d593fb1704dda85e2392c77ea3bc"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a4a70d593fb1704dda85e2392c77ea3bc">g2</a></td></tr>
+<tr class="memdesc:a4a70d593fb1704dda85e2392c77ea3bc"><td class="mdescLeft"> </td><td class="mdescRight">output of fftw <br/></td></tr>
+<tr class="memitem:a25a3208574495231141c9c407658f0cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25a3208574495231141c9c407658f0cf"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctf__plan.html#a25a3208574495231141c9c407658f0cf">spline_coeffs</a></td></tr>
+<tr class="memdesc:a25a3208574495231141c9c407658f0cf"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00261">261</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfctl__plan.html b/doc/api/html/structnfctl__plan.html
new file mode 100644
index 0000000..ae150f1
--- /dev/null
+++ b/doc/api/html/structnfctl__plan.html
@@ -0,0 +1,147 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfctl_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfctl_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a59134c76d93ffd73a6fc738babf5d443"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59134c76d93ffd73a6fc738babf5d443"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a59134c76d93ffd73a6fc738babf5d443">FFTW_MANGLE_LONG_DOUBLE</a> (plan) my_fftw_r2r_plan</td></tr>
+<tr class="memdesc:a59134c76d93ffd73a6fc738babf5d443"><td class="mdescLeft"> </td><td class="mdescRight">fftw_plan <br/></td></tr>
+<tr class="memitem:ad0a55579cc5f04b0af4cc28abd445083"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad0a55579cc5f04b0af4cc28abd445083"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#ad0a55579cc5f04b0af4cc28abd445083">FFTW_MANGLE_LONG_DOUBLE</a> (r2r_kind)*r2r_kind</td></tr>
+<tr class="memdesc:ad0a55579cc5f04b0af4cc28abd445083"><td class="mdescLeft"> </td><td class="mdescRight">r2r transform type (DCT-I) <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ac31afd2bc4a0fc94cd9ec08e302f84ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac31afd2bc4a0fc94cd9ec08e302f84ac"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#ac31afd2bc4a0fc94cd9ec08e302f84ac">N_total</a></td></tr>
+<tr class="memdesc:ac31afd2bc4a0fc94cd9ec08e302f84ac"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ac4ad3000c4c3293f3d86b90a926410a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4ad3000c4c3293f3d86b90a926410a9"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#ac4ad3000c4c3293f3d86b90a926410a9">M_total</a></td></tr>
+<tr class="memdesc:ac4ad3000c4c3293f3d86b90a926410a9"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:aede4fbbe9a7b666d5d5fbd62e62bf103"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aede4fbbe9a7b666d5d5fbd62e62bf103"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#aede4fbbe9a7b666d5d5fbd62e62bf103">f_hat</a></td></tr>
+<tr class="memdesc:aede4fbbe9a7b666d5d5fbd62e62bf103"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( long double ) <br/></td></tr>
+<tr class="memitem:ae09e0a759e136ad020a97e6c76efbb30"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae09e0a759e136ad020a97e6c76efbb30"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#ae09e0a759e136ad020a97e6c76efbb30">f</a></td></tr>
+<tr class="memdesc:ae09e0a759e136ad020a97e6c76efbb30"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( long double ) <br/></td></tr>
+<tr class="memitem:a42f0c32b080677a57f82ccf23d018da2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42f0c32b080677a57f82ccf23d018da2"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a42f0c32b080677a57f82ccf23d018da2">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a42f0c32b080677a57f82ccf23d018da2"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a99191484b327c3283f3aed8c3e9a3d70"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a99191484b327c3283f3aed8c3e9a3d70"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a99191484b327c3283f3aed8c3e9a3d70">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a99191484b327c3283f3aed8c3e9a3d70"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:aa42a9c638dec4cfa622f2e3f7e7c1dc3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa42a9c638dec4cfa622f2e3f7e7c1dc3"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#aa42a9c638dec4cfa622f2e3f7e7c1dc3">d</a></td></tr>
+<tr class="memdesc:aa42a9c638dec4cfa622f2e3f7e7c1dc3"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:a4497138b087187f70d19f107b1c80204"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4497138b087187f70d19f107b1c80204"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a4497138b087187f70d19f107b1c80204">N</a></td></tr>
+<tr class="memdesc:a4497138b087187f70d19f107b1c80204"><td class="mdescLeft"> </td><td class="mdescRight">cut-off-frequencies (kernel) <br/></td></tr>
+<tr class="memitem:a6d0bd4de4d2b90c38010bb4b8d77561b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d0bd4de4d2b90c38010bb4b8d77561b"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a6d0bd4de4d2b90c38010bb4b8d77561b">n</a></td></tr>
+<tr class="memdesc:a6d0bd4de4d2b90c38010bb4b8d77561b"><td class="mdescLeft"> </td><td class="mdescRight">length of DCT-I <br/></td></tr>
+<tr class="memitem:a629ae83677e311095d4c24ad4826e2ab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a629ae83677e311095d4c24ad4826e2ab"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a629ae83677e311095d4c24ad4826e2ab">sigma</a></td></tr>
+<tr class="memdesc:a629ae83677e311095d4c24ad4826e2ab"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a0a2a679bf0d1c90511a52c31f5a537f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a2a679bf0d1c90511a52c31f5a537f1"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a0a2a679bf0d1c90511a52c31f5a537f1">m</a></td></tr>
+<tr class="memdesc:a0a2a679bf0d1c90511a52c31f5a537f1"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:aaf6e2979bbcb2c173eb792e3a9155d0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf6e2979bbcb2c173eb792e3a9155d0b"></a>
+long double </td><td class="memItemRight" valign="bottom"><b>nfct_full_psi_eps</b></td></tr>
+<tr class="memitem:a01287f3f68aff7e5d7ce35d3163021e2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01287f3f68aff7e5d7ce35d3163021e2"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a01287f3f68aff7e5d7ce35d3163021e2">b</a></td></tr>
+<tr class="memdesc:a01287f3f68aff7e5d7ce35d3163021e2"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:a292db653f04805f907737a480f681888"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a292db653f04805f907737a480f681888"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a292db653f04805f907737a480f681888">nfct_flags</a></td></tr>
+<tr class="memdesc:a292db653f04805f907737a480f681888"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:afc96567eba0053563867b8e3a064902b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc96567eba0053563867b8e3a064902b"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#afc96567eba0053563867b8e3a064902b">fftw_flags</a></td></tr>
+<tr class="memdesc:afc96567eba0053563867b8e3a064902b"><td class="mdescLeft"> </td><td class="mdescRight">flags for the fftw <br/></td></tr>
+<tr class="memitem:a2f7f915bfefa105412cabfc368c26560"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f7f915bfefa105412cabfc368c26560"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a2f7f915bfefa105412cabfc368c26560">x</a></td></tr>
+<tr class="memdesc:a2f7f915bfefa105412cabfc368c26560"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:a2c6b9d81be06f2e557c410310420809f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c6b9d81be06f2e557c410310420809f"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a2c6b9d81be06f2e557c410310420809f">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:a2c6b9d81be06f2e557c410310420809f"><td class="mdescLeft"> </td><td class="mdescRight">measured time for each step <br/></td></tr>
+<tr class="memitem:a2b69489da0118e06cba24db6d73ea934"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b69489da0118e06cba24db6d73ea934"></a>
+long double ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a2b69489da0118e06cba24db6d73ea934">c_phi_inv</a></td></tr>
+<tr class="memdesc:a2b69489da0118e06cba24db6d73ea934"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:a59712f0b5712ba9020540b7bf355caea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59712f0b5712ba9020540b7bf355caea"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a59712f0b5712ba9020540b7bf355caea">psi</a></td></tr>
+<tr class="memdesc:a59712f0b5712ba9020540b7bf355caea"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:a1b8cf9260caf345c8ecb5e6de726387b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1b8cf9260caf345c8ecb5e6de726387b"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a1b8cf9260caf345c8ecb5e6de726387b">size_psi</a></td></tr>
+<tr class="memdesc:a1b8cf9260caf345c8ecb5e6de726387b"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a2e593f732ad26f9d681797a85a7293cf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e593f732ad26f9d681797a85a7293cf"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a2e593f732ad26f9d681797a85a7293cf">psi_index_g</a></td></tr>
+<tr class="memdesc:a2e593f732ad26f9d681797a85a7293cf"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a2ec8c4542c9fafbaf90b469ab8d06d59"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ec8c4542c9fafbaf90b469ab8d06d59"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a2ec8c4542c9fafbaf90b469ab8d06d59">psi_index_f</a></td></tr>
+<tr class="memdesc:a2ec8c4542c9fafbaf90b469ab8d06d59"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:ab041d9e3d108a94572dd0fc742f69023"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab041d9e3d108a94572dd0fc742f69023"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>g</b></td></tr>
+<tr class="memitem:a000c899ae773997e188f067537e1005b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a000c899ae773997e188f067537e1005b"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>g_hat</b></td></tr>
+<tr class="memitem:afbe6522294161b247058e61e9ef64d78"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbe6522294161b247058e61e9ef64d78"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#afbe6522294161b247058e61e9ef64d78">g1</a></td></tr>
+<tr class="memdesc:afbe6522294161b247058e61e9ef64d78"><td class="mdescLeft"> </td><td class="mdescRight">input of fftw <br/></td></tr>
+<tr class="memitem:a365bf7b6d6fa04bfb4206f8ec647eb14"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a365bf7b6d6fa04bfb4206f8ec647eb14"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a365bf7b6d6fa04bfb4206f8ec647eb14">g2</a></td></tr>
+<tr class="memdesc:a365bf7b6d6fa04bfb4206f8ec647eb14"><td class="mdescLeft"> </td><td class="mdescRight">output of fftw <br/></td></tr>
+<tr class="memitem:a38de3cc7a337907a01ae2701ea335d75"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38de3cc7a337907a01ae2701ea335d75"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfctl__plan.html#a38de3cc7a337907a01ae2701ea335d75">spline_coeffs</a></td></tr>
+<tr class="memdesc:a38de3cc7a337907a01ae2701ea335d75"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00261">261</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfft__mv__plan__complex.html b/doc/api/html/structnfft__mv__plan__complex.html
new file mode 100644
index 0000000..4e4933e
--- /dev/null
+++ b/doc/api/html/structnfft__mv__plan__complex.html
@@ -0,0 +1,77 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfft_mv_plan_complex Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfft_mv_plan_complex Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aea630b4e7cae1db0e17dd329a01c31a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea630b4e7cae1db0e17dd329a01c31a8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__complex.html#aea630b4e7cae1db0e17dd329a01c31a8">N_total</a></td></tr>
+<tr class="memdesc:aea630b4e7cae1db0e17dd329a01c31a8"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a2cb2df3ae5db867f38cb75b7c88de7fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2cb2df3ae5db867f38cb75b7c88de7fe"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__complex.html#a2cb2df3ae5db867f38cb75b7c88de7fe">M_total</a></td></tr>
+<tr class="memdesc:a2cb2df3ae5db867f38cb75b7c88de7fe"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a391146cff1e8fc3cb981bbbf806ede52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a391146cff1e8fc3cb981bbbf806ede52"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__complex.html#a391146cff1e8fc3cb981bbbf806ede52">f_hat</a></td></tr>
+<tr class="memdesc:a391146cff1e8fc3cb981bbbf806ede52"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a84fdb468f61a2f2a135d41ae0da1692e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a84fdb468f61a2f2a135d41ae0da1692e"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__complex.html#a84fdb468f61a2f2a135d41ae0da1692e">f</a></td></tr>
+<tr class="memdesc:a84fdb468f61a2f2a135d41ae0da1692e"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a56bf298c03c4aaeb6b4aaf7ed5cca57e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56bf298c03c4aaeb6b4aaf7ed5cca57e"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__complex.html#a56bf298c03c4aaeb6b4aaf7ed5cca57e">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a56bf298c03c4aaeb6b4aaf7ed5cca57e"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:add14030aae4920f7ca71ecf1efde00a3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add14030aae4920f7ca71ecf1efde00a3"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__complex.html#add14030aae4920f7ca71ecf1efde00a3">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:add14030aae4920f7ca71ecf1efde00a3"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfft__mv__plan__double.html b/doc/api/html/structnfft__mv__plan__double.html
new file mode 100644
index 0000000..09e9eec
--- /dev/null
+++ b/doc/api/html/structnfft__mv__plan__double.html
@@ -0,0 +1,77 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfft_mv_plan_double Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfft_mv_plan_double Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aed332691595037632eb9720cc7445e41"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed332691595037632eb9720cc7445e41"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__double.html#aed332691595037632eb9720cc7445e41">N_total</a></td></tr>
+<tr class="memdesc:aed332691595037632eb9720cc7445e41"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:af540ad90ef6b30fab022c95e8a5dcd58"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af540ad90ef6b30fab022c95e8a5dcd58"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__double.html#af540ad90ef6b30fab022c95e8a5dcd58">M_total</a></td></tr>
+<tr class="memdesc:af540ad90ef6b30fab022c95e8a5dcd58"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a238489d7a63fda4fc9677f56894e3cac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a238489d7a63fda4fc9677f56894e3cac"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__double.html#a238489d7a63fda4fc9677f56894e3cac">f_hat</a></td></tr>
+<tr class="memdesc:a238489d7a63fda4fc9677f56894e3cac"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( double ) <br/></td></tr>
+<tr class="memitem:aa850d9ba71b761a31d3a95aa9581ea5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa850d9ba71b761a31d3a95aa9581ea5e"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__double.html#aa850d9ba71b761a31d3a95aa9581ea5e">f</a></td></tr>
+<tr class="memdesc:aa850d9ba71b761a31d3a95aa9581ea5e"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( double ) <br/></td></tr>
+<tr class="memitem:a920771039e5cf889d6a29a243e6922e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a920771039e5cf889d6a29a243e6922e3"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__double.html#a920771039e5cf889d6a29a243e6922e3">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a920771039e5cf889d6a29a243e6922e3"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a92e4080bcb7241befa250be9d8f9a1cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92e4080bcb7241befa250be9d8f9a1cd"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__mv__plan__double.html#a92e4080bcb7241befa250be9d8f9a1cd">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a92e4080bcb7241befa250be9d8f9a1cd"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfft__plan.html b/doc/api/html/structnfft__plan.html
new file mode 100644
index 0000000..e13d293
--- /dev/null
+++ b/doc/api/html/structnfft__plan.html
@@ -0,0 +1,153 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfft_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfft_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a2310e54f3049b94d2bf08b67f689280c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2310e54f3049b94d2bf08b67f689280c"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a2310e54f3049b94d2bf08b67f689280c">FFTW_MANGLE_DOUBLE</a> (plan) my_fftw_plan1</td></tr>
+<tr class="memdesc:a2310e54f3049b94d2bf08b67f689280c"><td class="mdescLeft"> </td><td class="mdescRight">Forward FFTW plan. <br/></td></tr>
+<tr class="memitem:a02f777d558f0f4a3417000200472f1a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02f777d558f0f4a3417000200472f1a9"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a02f777d558f0f4a3417000200472f1a9">FFTW_MANGLE_DOUBLE</a> (plan) my_fftw_plan2</td></tr>
+<tr class="memdesc:a02f777d558f0f4a3417000200472f1a9"><td class="mdescLeft"> </td><td class="mdescRight">Backward FFTW plan. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ad33daddf76670c8731c759bf74ad0d22"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad33daddf76670c8731c759bf74ad0d22"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22">N_total</a></td></tr>
+<tr class="memdesc:ad33daddf76670c8731c759bf74ad0d22"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:adf33ce87c35b396c50d214d9bdeeefe6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adf33ce87c35b396c50d214d9bdeeefe6"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6">M_total</a></td></tr>
+<tr class="memdesc:adf33ce87c35b396c50d214d9bdeeefe6"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a23409aec68871e9a56f11711e2891691"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a23409aec68871e9a56f11711e2891691"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691">f_hat</a></td></tr>
+<tr class="memdesc:a23409aec68871e9a56f11711e2891691"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:afa27a166f809acf70ae27e5e6f28daa5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa27a166f809acf70ae27e5e6f28daa5"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5">f</a></td></tr>
+<tr class="memdesc:afa27a166f809acf70ae27e5e6f28daa5"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a9ebd66f2964cca6a02fc50d640df3557"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ebd66f2964cca6a02fc50d640df3557"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a9ebd66f2964cca6a02fc50d640df3557">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a9ebd66f2964cca6a02fc50d640df3557"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:abbe724645c96ef34c3e98d821f6648a3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abbe724645c96ef34c3e98d821f6648a3"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#abbe724645c96ef34c3e98d821f6648a3">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:abbe724645c96ef34c3e98d821f6648a3"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:ae39d4867eac948d96abbe3fc930b39a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae39d4867eac948d96abbe3fc930b39a8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#ae39d4867eac948d96abbe3fc930b39a8">d</a></td></tr>
+<tr class="memdesc:ae39d4867eac948d96abbe3fc930b39a8"><td class="mdescLeft"> </td><td class="mdescRight">dimension aka rank <br/></td></tr>
+<tr class="memitem:a307fb9647dee8b4a6acbd1ab26f67fa9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a307fb9647dee8b4a6acbd1ab26f67fa9"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a307fb9647dee8b4a6acbd1ab26f67fa9">N</a></td></tr>
+<tr class="memdesc:a307fb9647dee8b4a6acbd1ab26f67fa9"><td class="mdescLeft"> </td><td class="mdescRight">multi-bandwidth <br/></td></tr>
+<tr class="memitem:a09340f6465c23f3d94636f4f0da30f8a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09340f6465c23f3d94636f4f0da30f8a"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a09340f6465c23f3d94636f4f0da30f8a">sigma</a></td></tr>
+<tr class="memdesc:a09340f6465c23f3d94636f4f0da30f8a"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:aa8db04bb03357b831a1958f9a802e0ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8db04bb03357b831a1958f9a802e0ae"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae">n</a></td></tr>
+<tr class="memdesc:aa8db04bb03357b831a1958f9a802e0ae"><td class="mdescLeft"> </td><td class="mdescRight">FFTW length, equal to sigma*N, default is the power of 2 such that <img class="formulaInl" alt="$2\le\sigma<4$" src="form_0.png"/>. <br/></td></tr>
+<tr class="memitem:ad8a5fdac5bcf62d86479c800768fdeb7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8a5fdac5bcf62d86479c800768fdeb7"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7">n_total</a></td></tr>
+<tr class="memdesc:ad8a5fdac5bcf62d86479c800768fdeb7"><td class="mdescLeft"> </td><td class="mdescRight">Total size of FFTW. <br/></td></tr>
+<tr class="memitem:adbac137859fb87be7be73a5443de8cef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbac137859fb87be7be73a5443de8cef"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef">m</a></td></tr>
+<tr class="memdesc:adbac137859fb87be7be73a5443de8cef"><td class="mdescLeft"> </td><td class="mdescRight">Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN) <br/></td></tr>
+<tr class="memitem:a724949f4916b28f484eb447ee1a77f0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a724949f4916b28f484eb447ee1a77f0a"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a724949f4916b28f484eb447ee1a77f0a">b</a></td></tr>
+<tr class="memdesc:a724949f4916b28f484eb447ee1a77f0a"><td class="mdescLeft"> </td><td class="mdescRight">Shape parameter of the window function. <br/></td></tr>
+<tr class="memitem:a0b3735bcdd415a86126e0c86d47941a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b3735bcdd415a86126e0c86d47941a4"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a0b3735bcdd415a86126e0c86d47941a4">K</a></td></tr>
+<tr class="memdesc:a0b3735bcdd415a86126e0c86d47941a4"><td class="mdescLeft"> </td><td class="mdescRight">Number of equispaced samples of the window function for PRE_LIN_PSI. <br/></td></tr>
+<tr class="memitem:a2721da68a3a5b1846ecca8395d76bb1d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2721da68a3a5b1846ecca8395d76bb1d"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d">nfft_flags</a></td></tr>
+<tr class="memdesc:a2721da68a3a5b1846ecca8395d76bb1d"><td class="mdescLeft"> </td><td class="mdescRight">Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE. <br/></td></tr>
+<tr class="memitem:a530aea04dba32fb2a41287b4581b1805"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a530aea04dba32fb2a41287b4581b1805"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a530aea04dba32fb2a41287b4581b1805">fftw_flags</a></td></tr>
+<tr class="memdesc:a530aea04dba32fb2a41287b4581b1805"><td class="mdescLeft"> </td><td class="mdescRight">Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT. <br/></td></tr>
+<tr class="memitem:a7eb64fb5fedfba0ec75261e777e020c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7eb64fb5fedfba0ec75261e777e020c0"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0">x</a></td></tr>
+<tr class="memdesc:a7eb64fb5fedfba0ec75261e777e020c0"><td class="mdescLeft"> </td><td class="mdescRight">Nodes in time/spatial domain, size is <img class="formulaInl" alt="$dM$" src="form_1.png"/> doubles. <br/></td></tr>
+<tr class="memitem:a7c3e5504175fa292a6a5d0c0e1d7f848"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c3e5504175fa292a6a5d0c0e1d7f848"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a7c3e5504175fa292a6a5d0c0e1d7f848">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:a7c3e5504175fa292a6a5d0c0e1d7f848"><td class="mdescLeft"> </td><td class="mdescRight">Measured time for each step if MEASURE_TIME is set. <br/></td></tr>
+<tr class="memitem:aa5dd76324152be95967c0a4717e8e4ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa5dd76324152be95967c0a4717e8e4ce"></a>
+double ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#aa5dd76324152be95967c0a4717e8e4ce">c_phi_inv</a></td></tr>
+<tr class="memdesc:aa5dd76324152be95967c0a4717e8e4ce"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed data for the diagonal matrix <img class="formulaInl" alt="$D$" src="form_2.png"/>, size \ is <img class="formulaInl" alt="$N_0+\hdots+N_{d-1}$" src="form_3.png"/> doubles. <br/></td></tr>
+<tr class="memitem:a0330a1c3ae461fa9156ba0ecbe17bb7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0330a1c3ae461fa9156ba0ecbe17bb7c"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a0330a1c3ae461fa9156ba0ecbe17bb7c">psi</a></td></tr>
+<tr class="memdesc:a0330a1c3ae461fa9156ba0ecbe17bb7c"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed data for the sparse matrix <img class="formulaInl" alt="$B$" src="form_4.png"/>, size depends on precomputation scheme. <br/></td></tr>
+<tr class="memitem:a877d6cbe17ec77a9e66bdbea3cfafe0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a877d6cbe17ec77a9e66bdbea3cfafe0a"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a877d6cbe17ec77a9e66bdbea3cfafe0a">psi_index_g</a></td></tr>
+<tr class="memdesc:a877d6cbe17ec77a9e66bdbea3cfafe0a"><td class="mdescLeft"> </td><td class="mdescRight">Indices in source/target vector for PRE_FULL_PSI. <br/></td></tr>
+<tr class="memitem:a2ed144cf7d6043a93c07b6f6ba7bbe2a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ed144cf7d6043a93c07b6f6ba7bbe2a"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a2ed144cf7d6043a93c07b6f6ba7bbe2a">psi_index_f</a></td></tr>
+<tr class="memdesc:a2ed144cf7d6043a93c07b6f6ba7bbe2a"><td class="mdescLeft"> </td><td class="mdescRight">Indices in source/target vector for PRE_FULL_PSI. <br/></td></tr>
+<tr class="memitem:a844b51e453d6c80462eaad7844633539"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a844b51e453d6c80462eaad7844633539"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a844b51e453d6c80462eaad7844633539">g</a></td></tr>
+<tr class="memdesc:a844b51e453d6c80462eaad7844633539"><td class="mdescLeft"> </td><td class="mdescRight">Oversampled vector of samples, size is <a class="el" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7">n_total</a> double complex. <br/></td></tr>
+<tr class="memitem:a2dff6c2b829694a7d4cca5acc7c7d6d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2dff6c2b829694a7d4cca5acc7c7d6d5"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a2dff6c2b829694a7d4cca5acc7c7d6d5">g_hat</a></td></tr>
+<tr class="memdesc:a2dff6c2b829694a7d4cca5acc7c7d6d5"><td class="mdescLeft"> </td><td class="mdescRight">Zero-padded vector of Fourier coefficients, size is <a class="el" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7">n_total</a> fftw_complex. <br/></td></tr>
+<tr class="memitem:a2190e7201c55214d153b4d91eaa7efda"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2190e7201c55214d153b4d91eaa7efda"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda">g1</a></td></tr>
+<tr class="memdesc:a2190e7201c55214d153b4d91eaa7efda"><td class="mdescLeft"> </td><td class="mdescRight">Input of fftw. <br/></td></tr>
+<tr class="memitem:ad96e0aa935ea3589e999c131c43d8a78"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad96e0aa935ea3589e999c131c43d8a78"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78">g2</a></td></tr>
+<tr class="memdesc:ad96e0aa935ea3589e999c131c43d8a78"><td class="mdescLeft"> </td><td class="mdescRight">Output of fftw. <br/></td></tr>
+<tr class="memitem:a3aaf44c4f0769644075d9fc5ed60afa0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3aaf44c4f0769644075d9fc5ed60afa0"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a3aaf44c4f0769644075d9fc5ed60afa0">spline_coeffs</a></td></tr>
+<tr class="memdesc:a3aaf44c4f0769644075d9fc5ed60afa0"><td class="mdescLeft"> </td><td class="mdescRight">Input for de Boor algorithm if B_SPLINE or SINC_POWER is defined. <br/></td></tr>
+<tr class="memitem:a4d917887b76ddd9fadf30bc3b44b6735"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d917887b76ddd9fadf30bc3b44b6735"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfft__plan.html#a4d917887b76ddd9fadf30bc3b44b6735">index_x</a></td></tr>
+<tr class="memdesc:a4d917887b76ddd9fadf30bc3b44b6735"><td class="mdescLeft"> </td><td class="mdescRight">Index array for nodes x used when flag NFFT_SORT_NODES is set. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfftf__mv__plan__complex.html b/doc/api/html/structnfftf__mv__plan__complex.html
new file mode 100644
index 0000000..b6eca3a
--- /dev/null
+++ b/doc/api/html/structnfftf__mv__plan__complex.html
@@ -0,0 +1,77 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfftf_mv_plan_complex Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfftf_mv_plan_complex Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a65ce9742c15bad2711e8f8151bbf941c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65ce9742c15bad2711e8f8151bbf941c"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__complex.html#a65ce9742c15bad2711e8f8151bbf941c">N_total</a></td></tr>
+<tr class="memdesc:a65ce9742c15bad2711e8f8151bbf941c"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ab437c32f06548b3728bcb2b39681acd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab437c32f06548b3728bcb2b39681acd8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__complex.html#ab437c32f06548b3728bcb2b39681acd8">M_total</a></td></tr>
+<tr class="memdesc:ab437c32f06548b3728bcb2b39681acd8"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ad55a895ef394e9b74db36d028656b382"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad55a895ef394e9b74db36d028656b382"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__complex.html#ad55a895ef394e9b74db36d028656b382">f_hat</a></td></tr>
+<tr class="memdesc:ad55a895ef394e9b74db36d028656b382"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:ab3a2f060f60eb88cd268bc1bec2e5310"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3a2f060f60eb88cd268bc1bec2e5310"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__complex.html#ab3a2f060f60eb88cd268bc1bec2e5310">f</a></td></tr>
+<tr class="memdesc:ab3a2f060f60eb88cd268bc1bec2e5310"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a48e28caf604132d02999d1dc0f5dc9a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a48e28caf604132d02999d1dc0f5dc9a0"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__complex.html#a48e28caf604132d02999d1dc0f5dc9a0">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a48e28caf604132d02999d1dc0f5dc9a0"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:acbff2532fc4d66cf92321be33ef6498f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acbff2532fc4d66cf92321be33ef6498f"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__complex.html#acbff2532fc4d66cf92321be33ef6498f">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:acbff2532fc4d66cf92321be33ef6498f"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfftf__mv__plan__double.html b/doc/api/html/structnfftf__mv__plan__double.html
new file mode 100644
index 0000000..dc1e120
--- /dev/null
+++ b/doc/api/html/structnfftf__mv__plan__double.html
@@ -0,0 +1,77 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfftf_mv_plan_double Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfftf_mv_plan_double Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a1df474111c1d61261d53455e05bc6c63"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1df474111c1d61261d53455e05bc6c63"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__double.html#a1df474111c1d61261d53455e05bc6c63">N_total</a></td></tr>
+<tr class="memdesc:a1df474111c1d61261d53455e05bc6c63"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a37eb6ac713dbf1205f2dce0fa39107df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a37eb6ac713dbf1205f2dce0fa39107df"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__double.html#a37eb6ac713dbf1205f2dce0fa39107df">M_total</a></td></tr>
+<tr class="memdesc:a37eb6ac713dbf1205f2dce0fa39107df"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a109229f89032f01e4b2bece93297189c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a109229f89032f01e4b2bece93297189c"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__double.html#a109229f89032f01e4b2bece93297189c">f_hat</a></td></tr>
+<tr class="memdesc:a109229f89032f01e4b2bece93297189c"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( float ) <br/></td></tr>
+<tr class="memitem:a0b25cac2771ce5e3048ddc1b708e9005"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b25cac2771ce5e3048ddc1b708e9005"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__double.html#a0b25cac2771ce5e3048ddc1b708e9005">f</a></td></tr>
+<tr class="memdesc:a0b25cac2771ce5e3048ddc1b708e9005"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( float ) <br/></td></tr>
+<tr class="memitem:a130252f4a197b65416311097880cff4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a130252f4a197b65416311097880cff4f"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__double.html#a130252f4a197b65416311097880cff4f">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a130252f4a197b65416311097880cff4f"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a3d0e47cf55f04c89523abd46f361ef91"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d0e47cf55f04c89523abd46f361ef91"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__mv__plan__double.html#a3d0e47cf55f04c89523abd46f361ef91">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a3d0e47cf55f04c89523abd46f361ef91"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfftf__plan.html b/doc/api/html/structnfftf__plan.html
new file mode 100644
index 0000000..bbd5277
--- /dev/null
+++ b/doc/api/html/structnfftf__plan.html
@@ -0,0 +1,153 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfftf_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfftf_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a17fea72bdd4f446528716400f4522dac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a17fea72bdd4f446528716400f4522dac"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a17fea72bdd4f446528716400f4522dac">FFTW_MANGLE_FLOAT</a> (plan) my_fftw_plan1</td></tr>
+<tr class="memdesc:a17fea72bdd4f446528716400f4522dac"><td class="mdescLeft"> </td><td class="mdescRight">Forward FFTW plan. <br/></td></tr>
+<tr class="memitem:ae2ffec96887c5407fb31063a0139f678"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2ffec96887c5407fb31063a0139f678"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#ae2ffec96887c5407fb31063a0139f678">FFTW_MANGLE_FLOAT</a> (plan) my_fftw_plan2</td></tr>
+<tr class="memdesc:ae2ffec96887c5407fb31063a0139f678"><td class="mdescLeft"> </td><td class="mdescRight">Backward FFTW plan. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a65855ec1dec6f17eb46d6762ad6ff942"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65855ec1dec6f17eb46d6762ad6ff942"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a65855ec1dec6f17eb46d6762ad6ff942">N_total</a></td></tr>
+<tr class="memdesc:a65855ec1dec6f17eb46d6762ad6ff942"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a3823921949eded81bde776f57eba8052"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3823921949eded81bde776f57eba8052"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a3823921949eded81bde776f57eba8052">M_total</a></td></tr>
+<tr class="memdesc:a3823921949eded81bde776f57eba8052"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:aa967453b5ae5ba9e5b2056c884d2cda5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa967453b5ae5ba9e5b2056c884d2cda5"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#aa967453b5ae5ba9e5b2056c884d2cda5">f_hat</a></td></tr>
+<tr class="memdesc:aa967453b5ae5ba9e5b2056c884d2cda5"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a1c2e419705d6254801134bffe0695ae1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c2e419705d6254801134bffe0695ae1"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a1c2e419705d6254801134bffe0695ae1">f</a></td></tr>
+<tr class="memdesc:a1c2e419705d6254801134bffe0695ae1"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:ab09b1d93f60895791076e1e41241ecb0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab09b1d93f60895791076e1e41241ecb0"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#ab09b1d93f60895791076e1e41241ecb0">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:ab09b1d93f60895791076e1e41241ecb0"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a9f8b111e42ef7ba609879d4a6983695d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f8b111e42ef7ba609879d4a6983695d"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a9f8b111e42ef7ba609879d4a6983695d">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a9f8b111e42ef7ba609879d4a6983695d"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a35ff58e4549b1c5292fd03cb215debac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35ff58e4549b1c5292fd03cb215debac"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a35ff58e4549b1c5292fd03cb215debac">d</a></td></tr>
+<tr class="memdesc:a35ff58e4549b1c5292fd03cb215debac"><td class="mdescLeft"> </td><td class="mdescRight">dimension aka rank <br/></td></tr>
+<tr class="memitem:a27caa84ad525683d89b5963defadc98d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a27caa84ad525683d89b5963defadc98d"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a27caa84ad525683d89b5963defadc98d">N</a></td></tr>
+<tr class="memdesc:a27caa84ad525683d89b5963defadc98d"><td class="mdescLeft"> </td><td class="mdescRight">multi-bandwidth <br/></td></tr>
+<tr class="memitem:a20d669812b6acf9a8bda34cb659d61dd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20d669812b6acf9a8bda34cb659d61dd"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a20d669812b6acf9a8bda34cb659d61dd">sigma</a></td></tr>
+<tr class="memdesc:a20d669812b6acf9a8bda34cb659d61dd"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a6971ea46e4044daa773f19c8bd8d4a0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6971ea46e4044daa773f19c8bd8d4a0b"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a6971ea46e4044daa773f19c8bd8d4a0b">n</a></td></tr>
+<tr class="memdesc:a6971ea46e4044daa773f19c8bd8d4a0b"><td class="mdescLeft"> </td><td class="mdescRight">FFTW length, equal to sigma*N, default is the power of 2 such that <img class="formulaInl" alt="$2\le\sigma<4$" src="form_0.png"/>. <br/></td></tr>
+<tr class="memitem:a79aefed96e856d86d0fb74f873ae09ba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a79aefed96e856d86d0fb74f873ae09ba"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a79aefed96e856d86d0fb74f873ae09ba">n_total</a></td></tr>
+<tr class="memdesc:a79aefed96e856d86d0fb74f873ae09ba"><td class="mdescLeft"> </td><td class="mdescRight">Total size of FFTW. <br/></td></tr>
+<tr class="memitem:a9002bd9a063311155ae2a8c94c076e9d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9002bd9a063311155ae2a8c94c076e9d"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a9002bd9a063311155ae2a8c94c076e9d">m</a></td></tr>
+<tr class="memdesc:a9002bd9a063311155ae2a8c94c076e9d"><td class="mdescLeft"> </td><td class="mdescRight">Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN) <br/></td></tr>
+<tr class="memitem:a3ede2fe9c94e00ec59150ba2971facb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ede2fe9c94e00ec59150ba2971facb2"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a3ede2fe9c94e00ec59150ba2971facb2">b</a></td></tr>
+<tr class="memdesc:a3ede2fe9c94e00ec59150ba2971facb2"><td class="mdescLeft"> </td><td class="mdescRight">Shape parameter of the window function. <br/></td></tr>
+<tr class="memitem:aad0836b3e8e4a98b27729d960b593caa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad0836b3e8e4a98b27729d960b593caa"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#aad0836b3e8e4a98b27729d960b593caa">K</a></td></tr>
+<tr class="memdesc:aad0836b3e8e4a98b27729d960b593caa"><td class="mdescLeft"> </td><td class="mdescRight">Number of equispaced samples of the window function for PRE_LIN_PSI. <br/></td></tr>
+<tr class="memitem:adaaa66e5b89d9f65ce94b56617574518"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adaaa66e5b89d9f65ce94b56617574518"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#adaaa66e5b89d9f65ce94b56617574518">nfft_flags</a></td></tr>
+<tr class="memdesc:adaaa66e5b89d9f65ce94b56617574518"><td class="mdescLeft"> </td><td class="mdescRight">Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE. <br/></td></tr>
+<tr class="memitem:a880c04f5e9d485d84065b3c289cd5729"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a880c04f5e9d485d84065b3c289cd5729"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a880c04f5e9d485d84065b3c289cd5729">fftw_flags</a></td></tr>
+<tr class="memdesc:a880c04f5e9d485d84065b3c289cd5729"><td class="mdescLeft"> </td><td class="mdescRight">Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT. <br/></td></tr>
+<tr class="memitem:a4bcaa307f32321459187f8633a946a7e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4bcaa307f32321459187f8633a946a7e"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a4bcaa307f32321459187f8633a946a7e">x</a></td></tr>
+<tr class="memdesc:a4bcaa307f32321459187f8633a946a7e"><td class="mdescLeft"> </td><td class="mdescRight">Nodes in time/spatial domain, size is <img class="formulaInl" alt="$dM$" src="form_1.png"/> doubles. <br/></td></tr>
+<tr class="memitem:afb81143dbd42553ed90440afc406c909"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb81143dbd42553ed90440afc406c909"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#afb81143dbd42553ed90440afc406c909">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:afb81143dbd42553ed90440afc406c909"><td class="mdescLeft"> </td><td class="mdescRight">Measured time for each step if MEASURE_TIME is set. <br/></td></tr>
+<tr class="memitem:aa71f70b332bbb9868caad1db9f6cda02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa71f70b332bbb9868caad1db9f6cda02"></a>
+float ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#aa71f70b332bbb9868caad1db9f6cda02">c_phi_inv</a></td></tr>
+<tr class="memdesc:aa71f70b332bbb9868caad1db9f6cda02"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed data for the diagonal matrix <img class="formulaInl" alt="$D$" src="form_2.png"/>, size \ is <img class="formulaInl" alt="$N_0+\hdots+N_{d-1}$" src="form_3.png"/> doubles. <br/></td></tr>
+<tr class="memitem:a84402b4c947d57abef20e5f2db9110e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a84402b4c947d57abef20e5f2db9110e3"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a84402b4c947d57abef20e5f2db9110e3">psi</a></td></tr>
+<tr class="memdesc:a84402b4c947d57abef20e5f2db9110e3"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed data for the sparse matrix <img class="formulaInl" alt="$B$" src="form_4.png"/>, size depends on precomputation scheme. <br/></td></tr>
+<tr class="memitem:a04f8c8d2075057efa3b41381705084c6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a04f8c8d2075057efa3b41381705084c6"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a04f8c8d2075057efa3b41381705084c6">psi_index_g</a></td></tr>
+<tr class="memdesc:a04f8c8d2075057efa3b41381705084c6"><td class="mdescLeft"> </td><td class="mdescRight">Indices in source/target vector for PRE_FULL_PSI. <br/></td></tr>
+<tr class="memitem:ac0073e7c6389e9141d555bf58e2d0b59"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0073e7c6389e9141d555bf58e2d0b59"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#ac0073e7c6389e9141d555bf58e2d0b59">psi_index_f</a></td></tr>
+<tr class="memdesc:ac0073e7c6389e9141d555bf58e2d0b59"><td class="mdescLeft"> </td><td class="mdescRight">Indices in source/target vector for PRE_FULL_PSI. <br/></td></tr>
+<tr class="memitem:a35e6b39bfe06e5a6e56cde2458cf79a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35e6b39bfe06e5a6e56cde2458cf79a7"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a35e6b39bfe06e5a6e56cde2458cf79a7">g</a></td></tr>
+<tr class="memdesc:a35e6b39bfe06e5a6e56cde2458cf79a7"><td class="mdescLeft"> </td><td class="mdescRight">Oversampled vector of samples, size is <a class="el" href="structnfftf__plan.html#a79aefed96e856d86d0fb74f873ae09ba">n_total</a> double complex. <br/></td></tr>
+<tr class="memitem:aad01cb28079405090eaa1fce590c0c09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad01cb28079405090eaa1fce590c0c09"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#aad01cb28079405090eaa1fce590c0c09">g_hat</a></td></tr>
+<tr class="memdesc:aad01cb28079405090eaa1fce590c0c09"><td class="mdescLeft"> </td><td class="mdescRight">Zero-padded vector of Fourier coefficients, size is <a class="el" href="structnfftf__plan.html#a79aefed96e856d86d0fb74f873ae09ba">n_total</a> fftw_complex. <br/></td></tr>
+<tr class="memitem:a01420d5d785228ee24a4819d2b0454a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01420d5d785228ee24a4819d2b0454a2"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a01420d5d785228ee24a4819d2b0454a2">g1</a></td></tr>
+<tr class="memdesc:a01420d5d785228ee24a4819d2b0454a2"><td class="mdescLeft"> </td><td class="mdescRight">Input of fftw. <br/></td></tr>
+<tr class="memitem:a4fda15d8d9edaa8de0636b2a458bf763"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4fda15d8d9edaa8de0636b2a458bf763"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a4fda15d8d9edaa8de0636b2a458bf763">g2</a></td></tr>
+<tr class="memdesc:a4fda15d8d9edaa8de0636b2a458bf763"><td class="mdescLeft"> </td><td class="mdescRight">Output of fftw. <br/></td></tr>
+<tr class="memitem:a65c65de370e29b24ba0da097d20ee262"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65c65de370e29b24ba0da097d20ee262"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a65c65de370e29b24ba0da097d20ee262">spline_coeffs</a></td></tr>
+<tr class="memdesc:a65c65de370e29b24ba0da097d20ee262"><td class="mdescLeft"> </td><td class="mdescRight">Input for de Boor algorithm if B_SPLINE or SINC_POWER is defined. <br/></td></tr>
+<tr class="memitem:a1dadaac164fe9f9be856d47a53498335"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1dadaac164fe9f9be856d47a53498335"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftf__plan.html#a1dadaac164fe9f9be856d47a53498335">index_x</a></td></tr>
+<tr class="memdesc:a1dadaac164fe9f9be856d47a53498335"><td class="mdescLeft"> </td><td class="mdescRight">Index array for nodes x used when flag NFFT_SORT_NODES is set. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfftl__mv__plan__complex.html b/doc/api/html/structnfftl__mv__plan__complex.html
new file mode 100644
index 0000000..4d1dfdd
--- /dev/null
+++ b/doc/api/html/structnfftl__mv__plan__complex.html
@@ -0,0 +1,77 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfftl_mv_plan_complex Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfftl_mv_plan_complex Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a469c0077659dda97651e075da143a398"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a469c0077659dda97651e075da143a398"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__complex.html#a469c0077659dda97651e075da143a398">N_total</a></td></tr>
+<tr class="memdesc:a469c0077659dda97651e075da143a398"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:aa0175f63a2b2f5c80bb3153008315871"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0175f63a2b2f5c80bb3153008315871"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__complex.html#aa0175f63a2b2f5c80bb3153008315871">M_total</a></td></tr>
+<tr class="memdesc:aa0175f63a2b2f5c80bb3153008315871"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ae4b3786df2416012cf16d7ed4c097791"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae4b3786df2416012cf16d7ed4c097791"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__complex.html#ae4b3786df2416012cf16d7ed4c097791">f_hat</a></td></tr>
+<tr class="memdesc:ae4b3786df2416012cf16d7ed4c097791"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:adb5c2e9ba052f02fec78e550413aacfa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb5c2e9ba052f02fec78e550413aacfa"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__complex.html#adb5c2e9ba052f02fec78e550413aacfa">f</a></td></tr>
+<tr class="memdesc:adb5c2e9ba052f02fec78e550413aacfa"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a4d573c341aae7a4e034944772478658c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d573c341aae7a4e034944772478658c"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__complex.html#a4d573c341aae7a4e034944772478658c">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a4d573c341aae7a4e034944772478658c"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a5f31b4b9a03ac8f9a503c1ae42cad758"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f31b4b9a03ac8f9a503c1ae42cad758"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__complex.html#a5f31b4b9a03ac8f9a503c1ae42cad758">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a5f31b4b9a03ac8f9a503c1ae42cad758"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfftl__mv__plan__double.html b/doc/api/html/structnfftl__mv__plan__double.html
new file mode 100644
index 0000000..e1aa3eb
--- /dev/null
+++ b/doc/api/html/structnfftl__mv__plan__double.html
@@ -0,0 +1,77 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfftl_mv_plan_double Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfftl_mv_plan_double Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a63a371e62727c804a195cf2315b79a41"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63a371e62727c804a195cf2315b79a41"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__double.html#a63a371e62727c804a195cf2315b79a41">N_total</a></td></tr>
+<tr class="memdesc:a63a371e62727c804a195cf2315b79a41"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ac7366d2d09a0b3aed5884b50d10ef478"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac7366d2d09a0b3aed5884b50d10ef478"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__double.html#ac7366d2d09a0b3aed5884b50d10ef478">M_total</a></td></tr>
+<tr class="memdesc:ac7366d2d09a0b3aed5884b50d10ef478"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:add804289931e55388070ee495c3e5072"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add804289931e55388070ee495c3e5072"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__double.html#add804289931e55388070ee495c3e5072">f_hat</a></td></tr>
+<tr class="memdesc:add804289931e55388070ee495c3e5072"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( long double ) <br/></td></tr>
+<tr class="memitem:ae6c4a0204a54f2a37a0acf2b3f5a0c0c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6c4a0204a54f2a37a0acf2b3f5a0c0c"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__double.html#ae6c4a0204a54f2a37a0acf2b3f5a0c0c">f</a></td></tr>
+<tr class="memdesc:ae6c4a0204a54f2a37a0acf2b3f5a0c0c"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( long double ) <br/></td></tr>
+<tr class="memitem:aff66252bd97fa6d73d7e137d888bb625"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff66252bd97fa6d73d7e137d888bb625"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__double.html#aff66252bd97fa6d73d7e137d888bb625">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:aff66252bd97fa6d73d7e137d888bb625"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a804a64f2fb25ad91487fbcc186d784e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a804a64f2fb25ad91487fbcc186d784e0"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__mv__plan__double.html#a804a64f2fb25ad91487fbcc186d784e0">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a804a64f2fb25ad91487fbcc186d784e0"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfftl__plan.html b/doc/api/html/structnfftl__plan.html
new file mode 100644
index 0000000..ce02e31
--- /dev/null
+++ b/doc/api/html/structnfftl__plan.html
@@ -0,0 +1,153 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfftl_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfftl_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ab17581f82946cc39584acd6b059b7809"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab17581f82946cc39584acd6b059b7809"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#ab17581f82946cc39584acd6b059b7809">FFTW_MANGLE_LONG_DOUBLE</a> (plan) my_fftw_plan1</td></tr>
+<tr class="memdesc:ab17581f82946cc39584acd6b059b7809"><td class="mdescLeft"> </td><td class="mdescRight">Forward FFTW plan. <br/></td></tr>
+<tr class="memitem:a2e9e81a72c786bd7ed4eef099a5f8a5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e9e81a72c786bd7ed4eef099a5f8a5e"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a2e9e81a72c786bd7ed4eef099a5f8a5e">FFTW_MANGLE_LONG_DOUBLE</a> (plan) my_fftw_plan2</td></tr>
+<tr class="memdesc:a2e9e81a72c786bd7ed4eef099a5f8a5e"><td class="mdescLeft"> </td><td class="mdescRight">Backward FFTW plan. <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a747b6aee3ae47ad66391027bc13789af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a747b6aee3ae47ad66391027bc13789af"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a747b6aee3ae47ad66391027bc13789af">N_total</a></td></tr>
+<tr class="memdesc:a747b6aee3ae47ad66391027bc13789af"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a95e2db75883c6586f31b8db8c8bf8cf8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95e2db75883c6586f31b8db8c8bf8cf8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a95e2db75883c6586f31b8db8c8bf8cf8">M_total</a></td></tr>
+<tr class="memdesc:a95e2db75883c6586f31b8db8c8bf8cf8"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ad5cf4ad0369bdaf07f6acd801e6b9e5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5cf4ad0369bdaf07f6acd801e6b9e5e"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#ad5cf4ad0369bdaf07f6acd801e6b9e5e">f_hat</a></td></tr>
+<tr class="memdesc:ad5cf4ad0369bdaf07f6acd801e6b9e5e"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a53b53a1222f4acf29c778b933c9f130e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53b53a1222f4acf29c778b933c9f130e"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a53b53a1222f4acf29c778b933c9f130e">f</a></td></tr>
+<tr class="memdesc:a53b53a1222f4acf29c778b933c9f130e"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a0f05caab33b6f473626e74f44356e3fc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f05caab33b6f473626e74f44356e3fc"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a0f05caab33b6f473626e74f44356e3fc">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a0f05caab33b6f473626e74f44356e3fc"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a3d343b79e00dbb8cd4984143a03ddf53"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d343b79e00dbb8cd4984143a03ddf53"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a3d343b79e00dbb8cd4984143a03ddf53">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a3d343b79e00dbb8cd4984143a03ddf53"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a4c139d72e93078b54f4240ecd7f6454f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c139d72e93078b54f4240ecd7f6454f"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a4c139d72e93078b54f4240ecd7f6454f">d</a></td></tr>
+<tr class="memdesc:a4c139d72e93078b54f4240ecd7f6454f"><td class="mdescLeft"> </td><td class="mdescRight">dimension aka rank <br/></td></tr>
+<tr class="memitem:a36e045f670b95d68f5c2e04b55a1c220"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36e045f670b95d68f5c2e04b55a1c220"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a36e045f670b95d68f5c2e04b55a1c220">N</a></td></tr>
+<tr class="memdesc:a36e045f670b95d68f5c2e04b55a1c220"><td class="mdescLeft"> </td><td class="mdescRight">multi-bandwidth <br/></td></tr>
+<tr class="memitem:a149fdaed10fafdb3bf414110ad233b7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a149fdaed10fafdb3bf414110ad233b7c"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a149fdaed10fafdb3bf414110ad233b7c">sigma</a></td></tr>
+<tr class="memdesc:a149fdaed10fafdb3bf414110ad233b7c"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a58140f5f6ea4ca1c0305cbcec55437bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a58140f5f6ea4ca1c0305cbcec55437bd"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a58140f5f6ea4ca1c0305cbcec55437bd">n</a></td></tr>
+<tr class="memdesc:a58140f5f6ea4ca1c0305cbcec55437bd"><td class="mdescLeft"> </td><td class="mdescRight">FFTW length, equal to sigma*N, default is the power of 2 such that <img class="formulaInl" alt="$2\le\sigma<4$" src="form_0.png"/>. <br/></td></tr>
+<tr class="memitem:a58ea89cc9b78b32c8c1775e8b1277ad8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a58ea89cc9b78b32c8c1775e8b1277ad8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a58ea89cc9b78b32c8c1775e8b1277ad8">n_total</a></td></tr>
+<tr class="memdesc:a58ea89cc9b78b32c8c1775e8b1277ad8"><td class="mdescLeft"> </td><td class="mdescRight">Total size of FFTW. <br/></td></tr>
+<tr class="memitem:ac4741304d0030c88a8244dd1d8171b65"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac4741304d0030c88a8244dd1d8171b65"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#ac4741304d0030c88a8244dd1d8171b65">m</a></td></tr>
+<tr class="memdesc:ac4741304d0030c88a8244dd1d8171b65"><td class="mdescLeft"> </td><td class="mdescRight">Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN) <br/></td></tr>
+<tr class="memitem:a80c548cbcc4defbac2b544602a5baa85"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a80c548cbcc4defbac2b544602a5baa85"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a80c548cbcc4defbac2b544602a5baa85">b</a></td></tr>
+<tr class="memdesc:a80c548cbcc4defbac2b544602a5baa85"><td class="mdescLeft"> </td><td class="mdescRight">Shape parameter of the window function. <br/></td></tr>
+<tr class="memitem:ae6f8a76f202fe1816cfe1004a9ce9a0d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6f8a76f202fe1816cfe1004a9ce9a0d"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#ae6f8a76f202fe1816cfe1004a9ce9a0d">K</a></td></tr>
+<tr class="memdesc:ae6f8a76f202fe1816cfe1004a9ce9a0d"><td class="mdescLeft"> </td><td class="mdescRight">Number of equispaced samples of the window function for PRE_LIN_PSI. <br/></td></tr>
+<tr class="memitem:a375f14a65c5686803270dbb3cfd1c371"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a375f14a65c5686803270dbb3cfd1c371"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a375f14a65c5686803270dbb3cfd1c371">nfft_flags</a></td></tr>
+<tr class="memdesc:a375f14a65c5686803270dbb3cfd1c371"><td class="mdescLeft"> </td><td class="mdescRight">Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE. <br/></td></tr>
+<tr class="memitem:a4e0df1f491a4aa8f7373d776d705095f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e0df1f491a4aa8f7373d776d705095f"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a4e0df1f491a4aa8f7373d776d705095f">fftw_flags</a></td></tr>
+<tr class="memdesc:a4e0df1f491a4aa8f7373d776d705095f"><td class="mdescLeft"> </td><td class="mdescRight">Flags for the FFTW, default is FFTW_ESTIMATE | FFTW_DESTROY_INPUT. <br/></td></tr>
+<tr class="memitem:ad5695c30a05c03573082a1aac0394700"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5695c30a05c03573082a1aac0394700"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#ad5695c30a05c03573082a1aac0394700">x</a></td></tr>
+<tr class="memdesc:ad5695c30a05c03573082a1aac0394700"><td class="mdescLeft"> </td><td class="mdescRight">Nodes in time/spatial domain, size is <img class="formulaInl" alt="$dM$" src="form_1.png"/> doubles. <br/></td></tr>
+<tr class="memitem:ae8cf45feec672cd7e6f42a1b6a091a5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae8cf45feec672cd7e6f42a1b6a091a5c"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#ae8cf45feec672cd7e6f42a1b6a091a5c">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:ae8cf45feec672cd7e6f42a1b6a091a5c"><td class="mdescLeft"> </td><td class="mdescRight">Measured time for each step if MEASURE_TIME is set. <br/></td></tr>
+<tr class="memitem:afdcd5a1259a4fb7e7271efe30a207265"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afdcd5a1259a4fb7e7271efe30a207265"></a>
+long double ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#afdcd5a1259a4fb7e7271efe30a207265">c_phi_inv</a></td></tr>
+<tr class="memdesc:afdcd5a1259a4fb7e7271efe30a207265"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed data for the diagonal matrix <img class="formulaInl" alt="$D$" src="form_2.png"/>, size \ is <img class="formulaInl" alt="$N_0+\hdots+N_{d-1}$" src="form_3.png"/> doubles. <br/></td></tr>
+<tr class="memitem:a33955562ecf9b48f4283f869c77f96ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a33955562ecf9b48f4283f869c77f96ff"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a33955562ecf9b48f4283f869c77f96ff">psi</a></td></tr>
+<tr class="memdesc:a33955562ecf9b48f4283f869c77f96ff"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed data for the sparse matrix <img class="formulaInl" alt="$B$" src="form_4.png"/>, size depends on precomputation scheme. <br/></td></tr>
+<tr class="memitem:ad3ff1d5c721f0ec4e81aa341b29abc15"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3ff1d5c721f0ec4e81aa341b29abc15"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#ad3ff1d5c721f0ec4e81aa341b29abc15">psi_index_g</a></td></tr>
+<tr class="memdesc:ad3ff1d5c721f0ec4e81aa341b29abc15"><td class="mdescLeft"> </td><td class="mdescRight">Indices in source/target vector for PRE_FULL_PSI. <br/></td></tr>
+<tr class="memitem:a713765bd7f9b488ac995de023de2ead1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a713765bd7f9b488ac995de023de2ead1"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a713765bd7f9b488ac995de023de2ead1">psi_index_f</a></td></tr>
+<tr class="memdesc:a713765bd7f9b488ac995de023de2ead1"><td class="mdescLeft"> </td><td class="mdescRight">Indices in source/target vector for PRE_FULL_PSI. <br/></td></tr>
+<tr class="memitem:aa442607f39ed01885dbeb286b18b1b77"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa442607f39ed01885dbeb286b18b1b77"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#aa442607f39ed01885dbeb286b18b1b77">g</a></td></tr>
+<tr class="memdesc:aa442607f39ed01885dbeb286b18b1b77"><td class="mdescLeft"> </td><td class="mdescRight">Oversampled vector of samples, size is <a class="el" href="structnfftl__plan.html#a58ea89cc9b78b32c8c1775e8b1277ad8">n_total</a> double complex. <br/></td></tr>
+<tr class="memitem:af708c1c479196fb4e3ded3d289085b5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af708c1c479196fb4e3ded3d289085b5e"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#af708c1c479196fb4e3ded3d289085b5e">g_hat</a></td></tr>
+<tr class="memdesc:af708c1c479196fb4e3ded3d289085b5e"><td class="mdescLeft"> </td><td class="mdescRight">Zero-padded vector of Fourier coefficients, size is <a class="el" href="structnfftl__plan.html#a58ea89cc9b78b32c8c1775e8b1277ad8">n_total</a> fftw_complex. <br/></td></tr>
+<tr class="memitem:a71a99cd893a823d1a7edb139650b2afe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a71a99cd893a823d1a7edb139650b2afe"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a71a99cd893a823d1a7edb139650b2afe">g1</a></td></tr>
+<tr class="memdesc:a71a99cd893a823d1a7edb139650b2afe"><td class="mdescLeft"> </td><td class="mdescRight">Input of fftw. <br/></td></tr>
+<tr class="memitem:aea25feca0bccefe267c0a9eb75390ed6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea25feca0bccefe267c0a9eb75390ed6"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#aea25feca0bccefe267c0a9eb75390ed6">g2</a></td></tr>
+<tr class="memdesc:aea25feca0bccefe267c0a9eb75390ed6"><td class="mdescLeft"> </td><td class="mdescRight">Output of fftw. <br/></td></tr>
+<tr class="memitem:a971f190366e40c729899ff71d2a60682"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a971f190366e40c729899ff71d2a60682"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#a971f190366e40c729899ff71d2a60682">spline_coeffs</a></td></tr>
+<tr class="memdesc:a971f190366e40c729899ff71d2a60682"><td class="mdescLeft"> </td><td class="mdescRight">Input for de Boor algorithm if B_SPLINE or SINC_POWER is defined. <br/></td></tr>
+<tr class="memitem:ad98e162c23583ec8f010aacf9ec06767"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad98e162c23583ec8f010aacf9ec06767"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfftl__plan.html#ad98e162c23583ec8f010aacf9ec06767">index_x</a></td></tr>
+<tr class="memdesc:ad98e162c23583ec8f010aacf9ec06767"><td class="mdescLeft"> </td><td class="mdescRight">Index array for nodes x used when flag NFFT_SORT_NODES is set. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00173">173</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfsft__plan.html b/doc/api/html/structnfsft__plan.html
new file mode 100644
index 0000000..131b6a3
--- /dev/null
+++ b/doc/api/html/structnfsft__plan.html
@@ -0,0 +1,98 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfsft_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfsft_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a57fe4569f9109b92ed55caeddce686b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a57fe4569f9109b92ed55caeddce686b8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#a57fe4569f9109b92ed55caeddce686b8">N_total</a></td></tr>
+<tr class="memdesc:a57fe4569f9109b92ed55caeddce686b8"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ae83b4ef24662500a1c0374f9e0bf73ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae83b4ef24662500a1c0374f9e0bf73ed"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#ae83b4ef24662500a1c0374f9e0bf73ed">M_total</a></td></tr>
+<tr class="memdesc:ae83b4ef24662500a1c0374f9e0bf73ed"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:af3f147694cf5d7ac7b658288bf2cfb42"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3f147694cf5d7ac7b658288bf2cfb42"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#af3f147694cf5d7ac7b658288bf2cfb42">f_hat</a></td></tr>
+<tr class="memdesc:af3f147694cf5d7ac7b658288bf2cfb42"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:aebedb76f2df25603c548ae9672e970df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aebedb76f2df25603c548ae9672e970df"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#aebedb76f2df25603c548ae9672e970df">f</a></td></tr>
+<tr class="memdesc:aebedb76f2df25603c548ae9672e970df"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a01bf30c31f886ffa9d486c010a452051"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01bf30c31f886ffa9d486c010a452051"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#a01bf30c31f886ffa9d486c010a452051">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a01bf30c31f886ffa9d486c010a452051"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a14cc99f56f6a61958aef26f80aac6f12"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14cc99f56f6a61958aef26f80aac6f12"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#a14cc99f56f6a61958aef26f80aac6f12">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a14cc99f56f6a61958aef26f80aac6f12"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:ae5da5c37169612dcf2d66ff595ee4403"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae5da5c37169612dcf2d66ff595ee4403"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#ae5da5c37169612dcf2d66ff595ee4403">N</a></td></tr>
+<tr class="memdesc:ae5da5c37169612dcf2d66ff595ee4403"><td class="mdescLeft"> </td><td class="mdescRight">the bandwidth <img class="formulaInl" alt="$N$" src="form_5.png"/> <br/></td></tr>
+<tr class="memitem:af361cee5b4f7dabae68e53674861df90"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af361cee5b4f7dabae68e53674861df90"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#af361cee5b4f7dabae68e53674861df90">x</a></td></tr>
+<tr class="memdesc:af361cee5b4f7dabae68e53674861df90"><td class="mdescLeft"> </td><td class="mdescRight">the nodes <img class="formulaInl" alt="$\mathbf{x}(m) = \left(x_1,x_2\right) \in [-\frac{1}{2},\frac{1}{2}) \times [0,\frac{1}{2}]$" src="form_6.png"/> for <img class="formulaInl" alt="$m=0,\ldots, M-1$" src="form_7.png"/>, <img class="formulaInl" alt="$M \in \mathbb{N},$" src="form_8.png"/> <br/></td></tr>
+<tr class="memitem:a59d80818cb9c0dcaccc477954720772c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59d80818cb9c0dcaccc477954720772c"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#a59d80818cb9c0dcaccc477954720772c">t</a></td></tr>
+<tr class="memdesc:a59d80818cb9c0dcaccc477954720772c"><td class="mdescLeft"> </td><td class="mdescRight">the logarithm of NPT with respect to the basis 2 <br/></td></tr>
+<tr class="memitem:a5ad6e9d30dd23d5be94b9277e5068694"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ad6e9d30dd23d5be94b9277e5068694"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#a5ad6e9d30dd23d5be94b9277e5068694">flags</a></td></tr>
+<tr class="memdesc:a5ad6e9d30dd23d5be94b9277e5068694"><td class="mdescLeft"> </td><td class="mdescRight">the planner flags <br/></td></tr>
+<tr class="memitem:af21a62a31af4918fda1376612398369e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af21a62a31af4918fda1376612398369e"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#af21a62a31af4918fda1376612398369e">plan_nfft</a></td></tr>
+<tr class="memdesc:af21a62a31af4918fda1376612398369e"><td class="mdescLeft"> </td><td class="mdescRight">the internal NFFT plan <br/></td></tr>
+<tr class="memitem:a79156943fb3c87599ee7fa3bc157f548"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a79156943fb3c87599ee7fa3bc157f548"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#a79156943fb3c87599ee7fa3bc157f548">f_hat_intern</a></td></tr>
+<tr class="memdesc:a79156943fb3c87599ee7fa3bc157f548"><td class="mdescLeft"> </td><td class="mdescRight">Internally used pointer to spherical Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ae22ba52a7e414e15dc662c8ee2b5f2db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae22ba52a7e414e15dc662c8ee2b5f2db"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__plan.html#ae22ba52a7e414e15dc662c8ee2b5f2db">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:ae22ba52a7e414e15dc662c8ee2b5f2db"><td class="mdescLeft"> </td><td class="mdescRight">Measured time for each step if MEASURE_TIME is set. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00551">551</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfsft__wisdom.html b/doc/api/html/structnfsft__wisdom.html
new file mode 100644
index 0000000..69f49d5
--- /dev/null
+++ b/doc/api/html/structnfsft__wisdom.html
@@ -0,0 +1,123 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfsft_wisdom Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfsft_wisdom Struct Reference<div class="ingroups"><a class="el" href="group__nfsft.html">Nfsft</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Wisdom structure.
+ <a href="structnfsft__wisdom.html#details">More...</a></p>
+
+<p><code>#include <<a class="el" href="kernel_2nfsft_2api_8h_source.html">api.h</a>></code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:abb3162b2e1faa123a9ef70f1374aa740"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html#abb3162b2e1faa123a9ef70f1374aa740">initialized</a></td></tr>
+<tr class="memdesc:abb3162b2e1faa123a9ef70f1374aa740"><td class="mdescLeft"> </td><td class="mdescRight">Indicates wether the structure has been initialized. <a href="#abb3162b2e1faa123a9ef70f1374aa740"></a><br/></td></tr>
+<tr class="memitem:a267b5c83fbfef2212669a2f61960e3d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a267b5c83fbfef2212669a2f61960e3d4"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><b>flags</b></td></tr>
+<tr class="memitem:ac0d21110fe9475646b8174b1048cda51"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html#ac0d21110fe9475646b8174b1048cda51">N_MAX</a></td></tr>
+<tr class="memdesc:ac0d21110fe9475646b8174b1048cda51"><td class="mdescLeft"> </td><td class="mdescRight">Stores precomputation flags. <a href="#ac0d21110fe9475646b8174b1048cda51"></a><br/></td></tr>
+<tr class="memitem:ae6c31fe1bc09d2894948358c2bea27e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6c31fe1bc09d2894948358c2bea27e4"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html#ae6c31fe1bc09d2894948358c2bea27e4">T_MAX</a></td></tr>
+<tr class="memdesc:ae6c31fe1bc09d2894948358c2bea27e4"><td class="mdescLeft"> </td><td class="mdescRight">The logarithm /f$t = N_{{max}}/f$ of the maximum bandwidth. <br/></td></tr>
+<tr class="memitem:a755da8bd28cc1322415bd0ddcfceaf4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a755da8bd28cc1322415bd0ddcfceaf4e"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e">alpha</a></td></tr>
+<tr class="memdesc:a755da8bd28cc1322415bd0ddcfceaf4e"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$. <br/></td></tr>
+<tr class="memitem:a6bcfe5201d3fed513c2cdb37832ee255"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6bcfe5201d3fed513c2cdb37832ee255"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255">beta</a></td></tr>
+<tr class="memdesc:a6bcfe5201d3fed513c2cdb37832ee255"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$. <br/></td></tr>
+<tr class="memitem:a1703c0339b14ee1f0956d3e394f598e2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1703c0339b14ee1f0956d3e394f598e2"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2">gamma</a></td></tr>
+<tr class="memdesc:a1703c0339b14ee1f0956d3e394f598e2"><td class="mdescLeft"> </td><td class="mdescRight">Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$. <br/></td></tr>
+<tr class="memitem:ac367edaa1fae041e5b049cd81b44336b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac367edaa1fae041e5b049cd81b44336b"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html#ac367edaa1fae041e5b049cd81b44336b">threshold</a></td></tr>
+<tr class="memdesc:ac367edaa1fae041e5b049cd81b44336b"><td class="mdescLeft"> </td><td class="mdescRight">The threshold /f$/f$. <br/></td></tr>
+<tr class="memitem:a18de3dcf9ca2e2e577fccfcca712bfd2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18de3dcf9ca2e2e577fccfcca712bfd2"></a>
+<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsft__wisdom.html#a18de3dcf9ca2e2e577fccfcca712bfd2">set</a></td></tr>
+<tr class="memdesc:a18de3dcf9ca2e2e577fccfcca712bfd2"><td class="mdescLeft"> </td><td class="mdescRight">Structure for <em>discrete</em> <em>polynomial</em> <em>transform</em> (<em>DPT</em>) <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Wisdom structure. </p>
+
+<p>Definition at line <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00058">58</a> of file <a class="el" href="kernel_2nfsft_2api_8h_source.html">kernel/nfsft/api.h</a>.</p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="abb3162b2e1faa123a9ef70f1374aa740"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool nfsft_wisdom::initialized</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Indicates wether the structure has been initialized. </p>
+
+<p>Definition at line <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00061">61</a> of file <a class="el" href="kernel_2nfsft_2api_8h_source.html">kernel/nfsft/api.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac0d21110fe9475646b8174b1048cda51"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int nfsft_wisdom::N_MAX</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Stores precomputation flags. </p>
+<p>The maximum bandwidth /f$N_{{max}} {N}_0/f$ </p>
+
+<p>Definition at line <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00065">65</a> of file <a class="el" href="kernel_2nfsft_2api_8h_source.html">kernel/nfsft/api.h</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="kernel_2nfsft_2api_8h_source.html">kernel/nfsft/api.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfsftf__plan.html b/doc/api/html/structnfsftf__plan.html
new file mode 100644
index 0000000..13e9d72
--- /dev/null
+++ b/doc/api/html/structnfsftf__plan.html
@@ -0,0 +1,98 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfsftf_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfsftf_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a90ee6582e535312ac761e4e6fbaad0c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a90ee6582e535312ac761e4e6fbaad0c0"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a90ee6582e535312ac761e4e6fbaad0c0">N_total</a></td></tr>
+<tr class="memdesc:a90ee6582e535312ac761e4e6fbaad0c0"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a5df19929f38064f36893840388ef975e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5df19929f38064f36893840388ef975e"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a5df19929f38064f36893840388ef975e">M_total</a></td></tr>
+<tr class="memdesc:a5df19929f38064f36893840388ef975e"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a840547e30414a41c3751e2b418f76312"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a840547e30414a41c3751e2b418f76312"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a840547e30414a41c3751e2b418f76312">f_hat</a></td></tr>
+<tr class="memdesc:a840547e30414a41c3751e2b418f76312"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a7cfd191a4353a736bf9045c7e1d46f70"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7cfd191a4353a736bf9045c7e1d46f70"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a7cfd191a4353a736bf9045c7e1d46f70">f</a></td></tr>
+<tr class="memdesc:a7cfd191a4353a736bf9045c7e1d46f70"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a417f0b7f48ab77d5af34ed1da9ba95c9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a417f0b7f48ab77d5af34ed1da9ba95c9"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a417f0b7f48ab77d5af34ed1da9ba95c9">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a417f0b7f48ab77d5af34ed1da9ba95c9"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:af4deec395e0a4650b1e108677b787900"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4deec395e0a4650b1e108677b787900"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#af4deec395e0a4650b1e108677b787900">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:af4deec395e0a4650b1e108677b787900"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a09b711da345edffb8a71b5b8a8bca6d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09b711da345edffb8a71b5b8a8bca6d0"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a09b711da345edffb8a71b5b8a8bca6d0">N</a></td></tr>
+<tr class="memdesc:a09b711da345edffb8a71b5b8a8bca6d0"><td class="mdescLeft"> </td><td class="mdescRight">the bandwidth <img class="formulaInl" alt="$N$" src="form_5.png"/> <br/></td></tr>
+<tr class="memitem:a110084c9a750d175c70caa7a24d69ae7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a110084c9a750d175c70caa7a24d69ae7"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a110084c9a750d175c70caa7a24d69ae7">x</a></td></tr>
+<tr class="memdesc:a110084c9a750d175c70caa7a24d69ae7"><td class="mdescLeft"> </td><td class="mdescRight">the nodes <img class="formulaInl" alt="$\mathbf{x}(m) = \left(x_1,x_2\right) \in [-\frac{1}{2},\frac{1}{2}) \times [0,\frac{1}{2}]$" src="form_6.png"/> for <img class="formulaInl" alt="$m=0,\ldots, M-1$" src="form_7.png"/>, <img class="formulaInl" alt="$M \in \mathbb{N},$" src="form_8.png"/> <br/></td></tr>
+<tr class="memitem:ad5d65a033c50d321c6affc677e4f5226"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5d65a033c50d321c6affc677e4f5226"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#ad5d65a033c50d321c6affc677e4f5226">t</a></td></tr>
+<tr class="memdesc:ad5d65a033c50d321c6affc677e4f5226"><td class="mdescLeft"> </td><td class="mdescRight">the logarithm of NPT with respect to the basis 2 <br/></td></tr>
+<tr class="memitem:a67898ed2ead6812358feeace004b14fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67898ed2ead6812358feeace004b14fe"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a67898ed2ead6812358feeace004b14fe">flags</a></td></tr>
+<tr class="memdesc:a67898ed2ead6812358feeace004b14fe"><td class="mdescLeft"> </td><td class="mdescRight">the planner flags <br/></td></tr>
+<tr class="memitem:a87927611482f2fb3421ea2279993f94a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a87927611482f2fb3421ea2279993f94a"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#a87927611482f2fb3421ea2279993f94a">plan_nfft</a></td></tr>
+<tr class="memdesc:a87927611482f2fb3421ea2279993f94a"><td class="mdescLeft"> </td><td class="mdescRight">the internal NFFT plan <br/></td></tr>
+<tr class="memitem:aa0a6fb494d6378f656c83f191cd4ed1d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0a6fb494d6378f656c83f191cd4ed1d"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#aa0a6fb494d6378f656c83f191cd4ed1d">f_hat_intern</a></td></tr>
+<tr class="memdesc:aa0a6fb494d6378f656c83f191cd4ed1d"><td class="mdescLeft"> </td><td class="mdescRight">Internally used pointer to spherical Fourier coefficients. <br/></td></tr>
+<tr class="memitem:af36dbcf3d4f12bb85ac6c167aabf8768"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af36dbcf3d4f12bb85ac6c167aabf8768"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftf__plan.html#af36dbcf3d4f12bb85ac6c167aabf8768">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:af36dbcf3d4f12bb85ac6c167aabf8768"><td class="mdescLeft"> </td><td class="mdescRight">Measured time for each step if MEASURE_TIME is set. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00551">551</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfsftl__plan.html b/doc/api/html/structnfsftl__plan.html
new file mode 100644
index 0000000..4977cb8
--- /dev/null
+++ b/doc/api/html/structnfsftl__plan.html
@@ -0,0 +1,98 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfsftl_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfsftl_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a090c82bf91f18bc68a389c06fb347cec"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a090c82bf91f18bc68a389c06fb347cec"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#a090c82bf91f18bc68a389c06fb347cec">N_total</a></td></tr>
+<tr class="memdesc:a090c82bf91f18bc68a389c06fb347cec"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:aa1b43495afe03e88e419961428769246"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa1b43495afe03e88e419961428769246"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#aa1b43495afe03e88e419961428769246">M_total</a></td></tr>
+<tr class="memdesc:aa1b43495afe03e88e419961428769246"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ab9243951baccdf59de326cada1c08853"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9243951baccdf59de326cada1c08853"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#ab9243951baccdf59de326cada1c08853">f_hat</a></td></tr>
+<tr class="memdesc:ab9243951baccdf59de326cada1c08853"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:ad27b30233039fea75a9e1bc885324f3d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad27b30233039fea75a9e1bc885324f3d"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#ad27b30233039fea75a9e1bc885324f3d">f</a></td></tr>
+<tr class="memdesc:ad27b30233039fea75a9e1bc885324f3d"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:ab1a7dae6c0f2b18d4eda2e32195bba95"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1a7dae6c0f2b18d4eda2e32195bba95"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#ab1a7dae6c0f2b18d4eda2e32195bba95">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:ab1a7dae6c0f2b18d4eda2e32195bba95"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a162601fc8aa3248af806908e160d3c14"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a162601fc8aa3248af806908e160d3c14"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#a162601fc8aa3248af806908e160d3c14">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a162601fc8aa3248af806908e160d3c14"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a8740f26f76947fcc07a636002217a8db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8740f26f76947fcc07a636002217a8db"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#a8740f26f76947fcc07a636002217a8db">N</a></td></tr>
+<tr class="memdesc:a8740f26f76947fcc07a636002217a8db"><td class="mdescLeft"> </td><td class="mdescRight">the bandwidth <img class="formulaInl" alt="$N$" src="form_5.png"/> <br/></td></tr>
+<tr class="memitem:a59d00d103ebc0746d9cbf2d49077dfe8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59d00d103ebc0746d9cbf2d49077dfe8"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#a59d00d103ebc0746d9cbf2d49077dfe8">x</a></td></tr>
+<tr class="memdesc:a59d00d103ebc0746d9cbf2d49077dfe8"><td class="mdescLeft"> </td><td class="mdescRight">the nodes <img class="formulaInl" alt="$\mathbf{x}(m) = \left(x_1,x_2\right) \in [-\frac{1}{2},\frac{1}{2}) \times [0,\frac{1}{2}]$" src="form_6.png"/> for <img class="formulaInl" alt="$m=0,\ldots, M-1$" src="form_7.png"/>, <img class="formulaInl" alt="$M \in \mathbb{N},$" src="form_8.png"/> <br/></td></tr>
+<tr class="memitem:af5ba15c85f29ea8ba05a03c2f2fc2611"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af5ba15c85f29ea8ba05a03c2f2fc2611"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#af5ba15c85f29ea8ba05a03c2f2fc2611">t</a></td></tr>
+<tr class="memdesc:af5ba15c85f29ea8ba05a03c2f2fc2611"><td class="mdescLeft"> </td><td class="mdescRight">the logarithm of NPT with respect to the basis 2 <br/></td></tr>
+<tr class="memitem:a15d53809b4f86c20e7fd99ea1b71efcb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15d53809b4f86c20e7fd99ea1b71efcb"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#a15d53809b4f86c20e7fd99ea1b71efcb">flags</a></td></tr>
+<tr class="memdesc:a15d53809b4f86c20e7fd99ea1b71efcb"><td class="mdescLeft"> </td><td class="mdescRight">the planner flags <br/></td></tr>
+<tr class="memitem:a2c016b15b6b33c44b8218c43619ef784"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c016b15b6b33c44b8218c43619ef784"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#a2c016b15b6b33c44b8218c43619ef784">plan_nfft</a></td></tr>
+<tr class="memdesc:a2c016b15b6b33c44b8218c43619ef784"><td class="mdescLeft"> </td><td class="mdescRight">the internal NFFT plan <br/></td></tr>
+<tr class="memitem:ab3914490d1c4767c0127783cac5098e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3914490d1c4767c0127783cac5098e4"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#ab3914490d1c4767c0127783cac5098e4">f_hat_intern</a></td></tr>
+<tr class="memdesc:ab3914490d1c4767c0127783cac5098e4"><td class="mdescLeft"> </td><td class="mdescRight">Internally used pointer to spherical Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ae2870ad5b902cb4724c2ab47e5e012e1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2870ad5b902cb4724c2ab47e5e012e1"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsftl__plan.html#ae2870ad5b902cb4724c2ab47e5e012e1">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:ae2870ad5b902cb4724c2ab47e5e012e1"><td class="mdescLeft"> </td><td class="mdescRight">Measured time for each step if MEASURE_TIME is set. <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00551">551</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfsoft__plan__.html b/doc/api/html/structnfsoft__plan__.html
new file mode 100644
index 0000000..36bbed3
--- /dev/null
+++ b/doc/api/html/structnfsoft__plan__.html
@@ -0,0 +1,103 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfsoft_plan_ Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfsoft_plan_ Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afe5be91eec76b382189f9bd45b36477e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe5be91eec76b382189f9bd45b36477e"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#afe5be91eec76b382189f9bd45b36477e">N_total</a></td></tr>
+<tr class="memdesc:afe5be91eec76b382189f9bd45b36477e"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a7bfd60cd6391a97c141325fc090891b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7bfd60cd6391a97c141325fc090891b8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#a7bfd60cd6391a97c141325fc090891b8">M_total</a></td></tr>
+<tr class="memdesc:a7bfd60cd6391a97c141325fc090891b8"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a941c8dcaeeef8fed4b55c730d8fbdf80"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a941c8dcaeeef8fed4b55c730d8fbdf80"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#a941c8dcaeeef8fed4b55c730d8fbdf80">f_hat</a></td></tr>
+<tr class="memdesc:a941c8dcaeeef8fed4b55c730d8fbdf80"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a68290fc4238315c5cfacd4c0a08ee233"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a68290fc4238315c5cfacd4c0a08ee233"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#a68290fc4238315c5cfacd4c0a08ee233">f</a></td></tr>
+<tr class="memdesc:a68290fc4238315c5cfacd4c0a08ee233"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:ae7c72bdbce93cb99dcbd14d764d08502"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7c72bdbce93cb99dcbd14d764d08502"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#ae7c72bdbce93cb99dcbd14d764d08502">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:ae7c72bdbce93cb99dcbd14d764d08502"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a33d5fb830b3021ddb85320139be034b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a33d5fb830b3021ddb85320139be034b8"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#a33d5fb830b3021ddb85320139be034b8">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a33d5fb830b3021ddb85320139be034b8"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:af194431b610fd2f9f003dff236398383"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af194431b610fd2f9f003dff236398383"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#af194431b610fd2f9f003dff236398383">x</a></td></tr>
+<tr class="memdesc:af194431b610fd2f9f003dff236398383"><td class="mdescLeft"> </td><td class="mdescRight">input nodes <br/></td></tr>
+<tr class="memitem:af6fb25c58e986915105c73009bdaa35c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af6fb25c58e986915105c73009bdaa35c"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#af6fb25c58e986915105c73009bdaa35c">wig_coeffs</a></td></tr>
+<tr class="memdesc:af6fb25c58e986915105c73009bdaa35c"><td class="mdescLeft"> </td><td class="mdescRight">contains a set of SO(3) Fourier coefficients for fixed orders m and n <br/></td></tr>
+<tr class="memitem:a729b20c0d30b649d6bff36734d34af7f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a729b20c0d30b649d6bff36734d34af7f"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#a729b20c0d30b649d6bff36734d34af7f">cheby</a></td></tr>
+<tr class="memdesc:a729b20c0d30b649d6bff36734d34af7f"><td class="mdescLeft"> </td><td class="mdescRight">contains a set of Chebychev coefficients for fixed orders m and n <br/></td></tr>
+<tr class="memitem:ae31e501405bebb72dcfe9831b34be76c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae31e501405bebb72dcfe9831b34be76c"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#ae31e501405bebb72dcfe9831b34be76c">aux</a></td></tr>
+<tr class="memdesc:ae31e501405bebb72dcfe9831b34be76c"><td class="mdescLeft"> </td><td class="mdescRight">used when converting Chebychev to Fourier coeffcients <br/></td></tr>
+<tr class="memitem:ab0b32ee063950ce38adc6b0e5e40af02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab0b32ee063950ce38adc6b0e5e40af02"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#ab0b32ee063950ce38adc6b0e5e40af02">t</a></td></tr>
+<tr class="memdesc:ab0b32ee063950ce38adc6b0e5e40af02"><td class="mdescLeft"> </td><td class="mdescRight">the logaritm of NPT with respect to the basis 2 <br/></td></tr>
+<tr class="memitem:aad410ed6425a055fc9b948cfe0df2cca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad410ed6425a055fc9b948cfe0df2cca"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#aad410ed6425a055fc9b948cfe0df2cca">flags</a></td></tr>
+<tr class="memdesc:aad410ed6425a055fc9b948cfe0df2cca"><td class="mdescLeft"> </td><td class="mdescRight">the planner flags <br/></td></tr>
+<tr class="memitem:a06568ec06f0c56db50823c12f376061c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06568ec06f0c56db50823c12f376061c"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#a06568ec06f0c56db50823c12f376061c">p_nfft</a></td></tr>
+<tr class="memdesc:a06568ec06f0c56db50823c12f376061c"><td class="mdescLeft"> </td><td class="mdescRight">the internal NFFT plan <br/></td></tr>
+<tr class="memitem:a39a07d81bf6117dca5530d76beaf6b31"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39a07d81bf6117dca5530d76beaf6b31"></a>
+<a class="el" href="nfft3_8h.html#a73d630ac21d6474ba0693f124d465e15">fpt_set</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoft__plan__.html#a39a07d81bf6117dca5530d76beaf6b31">internal_fpt_set</a></td></tr>
+<tr class="memdesc:a39a07d81bf6117dca5530d76beaf6b31"><td class="mdescLeft"> </td><td class="mdescRight">the internal FPT plan <br/></td></tr>
+<tr class="memitem:a65128958f30b266d01000b588069108b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65128958f30b266d01000b588069108b"></a>
+int </td><td class="memItemRight" valign="bottom"><b>fpt_kappa</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00663">663</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfsoftf__plan__.html b/doc/api/html/structnfsoftf__plan__.html
new file mode 100644
index 0000000..dc0a3b9
--- /dev/null
+++ b/doc/api/html/structnfsoftf__plan__.html
@@ -0,0 +1,103 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfsoftf_plan_ Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfsoftf_plan_ Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aa3a702dbaed1e34d090e23b75c9949d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa3a702dbaed1e34d090e23b75c9949d6"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#aa3a702dbaed1e34d090e23b75c9949d6">N_total</a></td></tr>
+<tr class="memdesc:aa3a702dbaed1e34d090e23b75c9949d6"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a6fc89775998b5353b0f674b75b3638ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6fc89775998b5353b0f674b75b3638ae"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a6fc89775998b5353b0f674b75b3638ae">M_total</a></td></tr>
+<tr class="memdesc:a6fc89775998b5353b0f674b75b3638ae"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:aa6990fedf1965a967f3f718dd373f543"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6990fedf1965a967f3f718dd373f543"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#aa6990fedf1965a967f3f718dd373f543">f_hat</a></td></tr>
+<tr class="memdesc:aa6990fedf1965a967f3f718dd373f543"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a165dc6360c20f9eb19a55872cc29455a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a165dc6360c20f9eb19a55872cc29455a"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a165dc6360c20f9eb19a55872cc29455a">f</a></td></tr>
+<tr class="memdesc:a165dc6360c20f9eb19a55872cc29455a"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a0291622a1f08aff56cc126ca64364d85"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0291622a1f08aff56cc126ca64364d85"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a0291622a1f08aff56cc126ca64364d85">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a0291622a1f08aff56cc126ca64364d85"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a858269faf194eca2137b65f2a5a8c0fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a858269faf194eca2137b65f2a5a8c0fb"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a858269faf194eca2137b65f2a5a8c0fb">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a858269faf194eca2137b65f2a5a8c0fb"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a072fa8dcd38c95bec64c8e82af71afa7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a072fa8dcd38c95bec64c8e82af71afa7"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a072fa8dcd38c95bec64c8e82af71afa7">x</a></td></tr>
+<tr class="memdesc:a072fa8dcd38c95bec64c8e82af71afa7"><td class="mdescLeft"> </td><td class="mdescRight">input nodes <br/></td></tr>
+<tr class="memitem:a1d6f6e5b95a8f0ff13add5c23b382fb9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1d6f6e5b95a8f0ff13add5c23b382fb9"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a1d6f6e5b95a8f0ff13add5c23b382fb9">wig_coeffs</a></td></tr>
+<tr class="memdesc:a1d6f6e5b95a8f0ff13add5c23b382fb9"><td class="mdescLeft"> </td><td class="mdescRight">contains a set of SO(3) Fourier coefficients for fixed orders m and n <br/></td></tr>
+<tr class="memitem:a73e75b0a9f8ceebffe6923c90c04c312"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a73e75b0a9f8ceebffe6923c90c04c312"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a73e75b0a9f8ceebffe6923c90c04c312">cheby</a></td></tr>
+<tr class="memdesc:a73e75b0a9f8ceebffe6923c90c04c312"><td class="mdescLeft"> </td><td class="mdescRight">contains a set of Chebychev coefficients for fixed orders m and n <br/></td></tr>
+<tr class="memitem:a5f7c39509a2403a9bc17824be7a3c3a9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f7c39509a2403a9bc17824be7a3c3a9"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a5f7c39509a2403a9bc17824be7a3c3a9">aux</a></td></tr>
+<tr class="memdesc:a5f7c39509a2403a9bc17824be7a3c3a9"><td class="mdescLeft"> </td><td class="mdescRight">used when converting Chebychev to Fourier coeffcients <br/></td></tr>
+<tr class="memitem:a21641301ce6613d250e6d683c3fad9c2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21641301ce6613d250e6d683c3fad9c2"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a21641301ce6613d250e6d683c3fad9c2">t</a></td></tr>
+<tr class="memdesc:a21641301ce6613d250e6d683c3fad9c2"><td class="mdescLeft"> </td><td class="mdescRight">the logaritm of NPT with respect to the basis 2 <br/></td></tr>
+<tr class="memitem:a55301d3525d6457aebd0237871dee668"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55301d3525d6457aebd0237871dee668"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a55301d3525d6457aebd0237871dee668">flags</a></td></tr>
+<tr class="memdesc:a55301d3525d6457aebd0237871dee668"><td class="mdescLeft"> </td><td class="mdescRight">the planner flags <br/></td></tr>
+<tr class="memitem:a1be8436a257f63ab4c27441bf714671d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1be8436a257f63ab4c27441bf714671d"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a1be8436a257f63ab4c27441bf714671d">p_nfft</a></td></tr>
+<tr class="memdesc:a1be8436a257f63ab4c27441bf714671d"><td class="mdescLeft"> </td><td class="mdescRight">the internal NFFT plan <br/></td></tr>
+<tr class="memitem:a686809f1397b113322b77ef50c8c0ef7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a686809f1397b113322b77ef50c8c0ef7"></a>
+<a class="el" href="nfft3_8h.html#a74cbbcba4b36c9272b3e1b309f574308">fptf_set</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftf__plan__.html#a686809f1397b113322b77ef50c8c0ef7">internal_fpt_set</a></td></tr>
+<tr class="memdesc:a686809f1397b113322b77ef50c8c0ef7"><td class="mdescLeft"> </td><td class="mdescRight">the internal FPT plan <br/></td></tr>
+<tr class="memitem:a8c90aea24c280766f06ec042e21d9bb9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8c90aea24c280766f06ec042e21d9bb9"></a>
+int </td><td class="memItemRight" valign="bottom"><b>fpt_kappa</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00663">663</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfsoftl__plan__.html b/doc/api/html/structnfsoftl__plan__.html
new file mode 100644
index 0000000..564aaa2
--- /dev/null
+++ b/doc/api/html/structnfsoftl__plan__.html
@@ -0,0 +1,103 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfsoftl_plan_ Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfsoftl_plan_ Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a397e113cdbedc1e964657131c9a9dea3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a397e113cdbedc1e964657131c9a9dea3"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a397e113cdbedc1e964657131c9a9dea3">N_total</a></td></tr>
+<tr class="memdesc:a397e113cdbedc1e964657131c9a9dea3"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a33cddd8977c92ba6641a1c4a18318fd6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a33cddd8977c92ba6641a1c4a18318fd6"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a33cddd8977c92ba6641a1c4a18318fd6">M_total</a></td></tr>
+<tr class="memdesc:a33cddd8977c92ba6641a1c4a18318fd6"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ab280522456fe4f49ccb91d4aa195702d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab280522456fe4f49ccb91d4aa195702d"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#ab280522456fe4f49ccb91d4aa195702d">f_hat</a></td></tr>
+<tr class="memdesc:ab280522456fe4f49ccb91d4aa195702d"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a62073b403c90aa2b527d5f62f190112e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62073b403c90aa2b527d5f62f190112e"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a62073b403c90aa2b527d5f62f190112e">f</a></td></tr>
+<tr class="memdesc:a62073b403c90aa2b527d5f62f190112e"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:aeab94862046b7688470f3f1d78ca927d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeab94862046b7688470f3f1d78ca927d"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#aeab94862046b7688470f3f1d78ca927d">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:aeab94862046b7688470f3f1d78ca927d"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a2f7123e0975b4a7cd693d01abf117949"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f7123e0975b4a7cd693d01abf117949"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a2f7123e0975b4a7cd693d01abf117949">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a2f7123e0975b4a7cd693d01abf117949"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a92211c64713d72c3d3cf45ac39601214"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92211c64713d72c3d3cf45ac39601214"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a92211c64713d72c3d3cf45ac39601214">x</a></td></tr>
+<tr class="memdesc:a92211c64713d72c3d3cf45ac39601214"><td class="mdescLeft"> </td><td class="mdescRight">input nodes <br/></td></tr>
+<tr class="memitem:a452e16848e81fd0b072d4e3347345455"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a452e16848e81fd0b072d4e3347345455"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a452e16848e81fd0b072d4e3347345455">wig_coeffs</a></td></tr>
+<tr class="memdesc:a452e16848e81fd0b072d4e3347345455"><td class="mdescLeft"> </td><td class="mdescRight">contains a set of SO(3) Fourier coefficients for fixed orders m and n <br/></td></tr>
+<tr class="memitem:a681110b5c15effe7ef2781249e049119"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a681110b5c15effe7ef2781249e049119"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a681110b5c15effe7ef2781249e049119">cheby</a></td></tr>
+<tr class="memdesc:a681110b5c15effe7ef2781249e049119"><td class="mdescLeft"> </td><td class="mdescRight">contains a set of Chebychev coefficients for fixed orders m and n <br/></td></tr>
+<tr class="memitem:ae669348fbbb187c8c521f6a89c8f3720"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae669348fbbb187c8c521f6a89c8f3720"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#ae669348fbbb187c8c521f6a89c8f3720">aux</a></td></tr>
+<tr class="memdesc:ae669348fbbb187c8c521f6a89c8f3720"><td class="mdescLeft"> </td><td class="mdescRight">used when converting Chebychev to Fourier coeffcients <br/></td></tr>
+<tr class="memitem:acd18e8a2b89aacd8034b49033449f979"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd18e8a2b89aacd8034b49033449f979"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#acd18e8a2b89aacd8034b49033449f979">t</a></td></tr>
+<tr class="memdesc:acd18e8a2b89aacd8034b49033449f979"><td class="mdescLeft"> </td><td class="mdescRight">the logaritm of NPT with respect to the basis 2 <br/></td></tr>
+<tr class="memitem:a2f236235168535b9f9833bcc7e50e695"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f236235168535b9f9833bcc7e50e695"></a>
+unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a2f236235168535b9f9833bcc7e50e695">flags</a></td></tr>
+<tr class="memdesc:a2f236235168535b9f9833bcc7e50e695"><td class="mdescLeft"> </td><td class="mdescRight">the planner flags <br/></td></tr>
+<tr class="memitem:ac1230a81665ed7aa68cb7b4bc3a0c0c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1230a81665ed7aa68cb7b4bc3a0c0c1"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#ac1230a81665ed7aa68cb7b4bc3a0c0c1">p_nfft</a></td></tr>
+<tr class="memdesc:ac1230a81665ed7aa68cb7b4bc3a0c0c1"><td class="mdescLeft"> </td><td class="mdescRight">the internal NFFT plan <br/></td></tr>
+<tr class="memitem:a8cf750d58de22209962bd9cb96f48864"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8cf750d58de22209962bd9cb96f48864"></a>
+<a class="el" href="nfft3_8h.html#afa0a822edf2abbd8e1ab2cd0afd72efa">fptl_set</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfsoftl__plan__.html#a8cf750d58de22209962bd9cb96f48864">internal_fpt_set</a></td></tr>
+<tr class="memdesc:a8cf750d58de22209962bd9cb96f48864"><td class="mdescLeft"> </td><td class="mdescRight">the internal FPT plan <br/></td></tr>
+<tr class="memitem:a5738717c7006e1756863debb43395d5a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5738717c7006e1756863debb43395d5a"></a>
+int </td><td class="memItemRight" valign="bottom"><b>fpt_kappa</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00663">663</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfst__plan.html b/doc/api/html/structnfst__plan.html
new file mode 100644
index 0000000..0bb56af
--- /dev/null
+++ b/doc/api/html/structnfst__plan.html
@@ -0,0 +1,147 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfst_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfst_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ac3c18cc4dec9293352c508e9999ebf05"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac3c18cc4dec9293352c508e9999ebf05"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#ac3c18cc4dec9293352c508e9999ebf05">FFTW_MANGLE_DOUBLE</a> (plan) my_fftw_r2r_plan</td></tr>
+<tr class="memdesc:ac3c18cc4dec9293352c508e9999ebf05"><td class="mdescLeft"> </td><td class="mdescRight">fftw_plan forward <br/></td></tr>
+<tr class="memitem:abeeca1317cee53206b64c79f3de094c2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abeeca1317cee53206b64c79f3de094c2"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#abeeca1317cee53206b64c79f3de094c2">FFTW_MANGLE_DOUBLE</a> (r2r_kind)*r2r_kind</td></tr>
+<tr class="memdesc:abeeca1317cee53206b64c79f3de094c2"><td class="mdescLeft"> </td><td class="mdescRight">r2r transform type (dct-i) <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a5622220bff0d3174b4dcae2a91313eed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5622220bff0d3174b4dcae2a91313eed"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a5622220bff0d3174b4dcae2a91313eed">N_total</a></td></tr>
+<tr class="memdesc:a5622220bff0d3174b4dcae2a91313eed"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a3bf0f56c279404b80e795daf944d3d98"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3bf0f56c279404b80e795daf944d3d98"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a3bf0f56c279404b80e795daf944d3d98">M_total</a></td></tr>
+<tr class="memdesc:a3bf0f56c279404b80e795daf944d3d98"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a8e7ed6ed137f58dea8f3871d959f8d9c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8e7ed6ed137f58dea8f3871d959f8d9c"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a8e7ed6ed137f58dea8f3871d959f8d9c">f_hat</a></td></tr>
+<tr class="memdesc:a8e7ed6ed137f58dea8f3871d959f8d9c"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( double ) <br/></td></tr>
+<tr class="memitem:a314e2d828775d6aa93a26d7c40b7b931"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a314e2d828775d6aa93a26d7c40b7b931"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a314e2d828775d6aa93a26d7c40b7b931">f</a></td></tr>
+<tr class="memdesc:a314e2d828775d6aa93a26d7c40b7b931"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( double ) <br/></td></tr>
+<tr class="memitem:a4a3b2ecc26204b3087d1c19b7857943f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a3b2ecc26204b3087d1c19b7857943f"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a4a3b2ecc26204b3087d1c19b7857943f">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a4a3b2ecc26204b3087d1c19b7857943f"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:aedfe6da9afb5dc0457cc4f2197034fc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aedfe6da9afb5dc0457cc4f2197034fc0"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#aedfe6da9afb5dc0457cc4f2197034fc0">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:aedfe6da9afb5dc0457cc4f2197034fc0"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:aef00c63a4810c8e5b0eb4839d2c6abc8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef00c63a4810c8e5b0eb4839d2c6abc8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#aef00c63a4810c8e5b0eb4839d2c6abc8">d</a></td></tr>
+<tr class="memdesc:aef00c63a4810c8e5b0eb4839d2c6abc8"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:ac0ddde49b376d65b38d3cf1583cb0f6b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0ddde49b376d65b38d3cf1583cb0f6b"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#ac0ddde49b376d65b38d3cf1583cb0f6b">N</a></td></tr>
+<tr class="memdesc:ac0ddde49b376d65b38d3cf1583cb0f6b"><td class="mdescLeft"> </td><td class="mdescRight">bandwidth <br/></td></tr>
+<tr class="memitem:abee0aa8e104775a5b898715ea28703d2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abee0aa8e104775a5b898715ea28703d2"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#abee0aa8e104775a5b898715ea28703d2">n</a></td></tr>
+<tr class="memdesc:abee0aa8e104775a5b898715ea28703d2"><td class="mdescLeft"> </td><td class="mdescRight">length of DST-1 <br/></td></tr>
+<tr class="memitem:a7a8028a0e7348e5fa7717eebf07b76d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a8028a0e7348e5fa7717eebf07b76d1"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a7a8028a0e7348e5fa7717eebf07b76d1">sigma</a></td></tr>
+<tr class="memdesc:a7a8028a0e7348e5fa7717eebf07b76d1"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:ac3aacf128a897c132809411ef9d41d7d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac3aacf128a897c132809411ef9d41d7d"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#ac3aacf128a897c132809411ef9d41d7d">m</a></td></tr>
+<tr class="memdesc:ac3aacf128a897c132809411ef9d41d7d"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:a255445e279e22fb6224821011e117a7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a255445e279e22fb6224821011e117a7c"></a>
+double </td><td class="memItemRight" valign="bottom"><b>nfst_full_psi_eps</b></td></tr>
+<tr class="memitem:a49927bec2aa96ab8596740011fabb914"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49927bec2aa96ab8596740011fabb914"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a49927bec2aa96ab8596740011fabb914">b</a></td></tr>
+<tr class="memdesc:a49927bec2aa96ab8596740011fabb914"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:a2c43b9c7625ed9eb42223de391c048c9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c43b9c7625ed9eb42223de391c048c9"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a2c43b9c7625ed9eb42223de391c048c9">nfst_flags</a></td></tr>
+<tr class="memdesc:a2c43b9c7625ed9eb42223de391c048c9"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:a69d37e02b7a2868e3861c582e76e35d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69d37e02b7a2868e3861c582e76e35d8"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a69d37e02b7a2868e3861c582e76e35d8">fftw_flags</a></td></tr>
+<tr class="memdesc:a69d37e02b7a2868e3861c582e76e35d8"><td class="mdescLeft"> </td><td class="mdescRight">flags for the fftw <br/></td></tr>
+<tr class="memitem:a048ebad4f2abe3821988fa06a5e308d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a048ebad4f2abe3821988fa06a5e308d8"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a048ebad4f2abe3821988fa06a5e308d8">x</a></td></tr>
+<tr class="memdesc:a048ebad4f2abe3821988fa06a5e308d8"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:a74e5be807909e0a443ea9b48e0a7da4b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74e5be807909e0a443ea9b48e0a7da4b"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a74e5be807909e0a443ea9b48e0a7da4b">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:a74e5be807909e0a443ea9b48e0a7da4b"><td class="mdescLeft"> </td><td class="mdescRight">measured time for each step <br/></td></tr>
+<tr class="memitem:a2c42ae2c8ca95bb4c0c1dfc279bc2cab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c42ae2c8ca95bb4c0c1dfc279bc2cab"></a>
+double ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a2c42ae2c8ca95bb4c0c1dfc279bc2cab">c_phi_inv</a></td></tr>
+<tr class="memdesc:a2c42ae2c8ca95bb4c0c1dfc279bc2cab"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:a59c1ef7493650838cf31086a46ff2e3f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59c1ef7493650838cf31086a46ff2e3f"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a59c1ef7493650838cf31086a46ff2e3f">psi</a></td></tr>
+<tr class="memdesc:a59c1ef7493650838cf31086a46ff2e3f"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:a1780e54f9fed43e92c22a1e70274e7ad"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1780e54f9fed43e92c22a1e70274e7ad"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a1780e54f9fed43e92c22a1e70274e7ad">size_psi</a></td></tr>
+<tr class="memdesc:a1780e54f9fed43e92c22a1e70274e7ad"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a2d2a4a4d3c7ff12f35045b5466f41811"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d2a4a4d3c7ff12f35045b5466f41811"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a2d2a4a4d3c7ff12f35045b5466f41811">psi_index_g</a></td></tr>
+<tr class="memdesc:a2d2a4a4d3c7ff12f35045b5466f41811"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a028609e96fa5f10d4197e4b50312180c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a028609e96fa5f10d4197e4b50312180c"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a028609e96fa5f10d4197e4b50312180c">psi_index_f</a></td></tr>
+<tr class="memdesc:a028609e96fa5f10d4197e4b50312180c"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a7aef31878adb193e3b3741feb21d4455"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7aef31878adb193e3b3741feb21d4455"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>g</b></td></tr>
+<tr class="memitem:a1838fdef7d9a2c8b0a77f6d3f90cf687"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1838fdef7d9a2c8b0a77f6d3f90cf687"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>g_hat</b></td></tr>
+<tr class="memitem:a06cd5d11b13d590c9ab3a88d93b21fb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06cd5d11b13d590c9ab3a88d93b21fb2"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a06cd5d11b13d590c9ab3a88d93b21fb2">g1</a></td></tr>
+<tr class="memdesc:a06cd5d11b13d590c9ab3a88d93b21fb2"><td class="mdescLeft"> </td><td class="mdescRight">input of fftw <br/></td></tr>
+<tr class="memitem:a7b67e2cf657227ae46d13fa239d534f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b67e2cf657227ae46d13fa239d534f7"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a7b67e2cf657227ae46d13fa239d534f7">g2</a></td></tr>
+<tr class="memdesc:a7b67e2cf657227ae46d13fa239d534f7"><td class="mdescLeft"> </td><td class="mdescRight">output of fftw <br/></td></tr>
+<tr class="memitem:a23bec4401a652efc87ee6781061c9363"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a23bec4401a652efc87ee6781061c9363"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfst__plan.html#a23bec4401a652efc87ee6781061c9363">spline_coeffs</a></td></tr>
+<tr class="memdesc:a23bec4401a652efc87ee6781061c9363"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00338">338</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfstf__plan.html b/doc/api/html/structnfstf__plan.html
new file mode 100644
index 0000000..b250a65
--- /dev/null
+++ b/doc/api/html/structnfstf__plan.html
@@ -0,0 +1,147 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfstf_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfstf_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ad4f44281f0c352fc630442cb40597983"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4f44281f0c352fc630442cb40597983"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#ad4f44281f0c352fc630442cb40597983">FFTW_MANGLE_FLOAT</a> (plan) my_fftw_r2r_plan</td></tr>
+<tr class="memdesc:ad4f44281f0c352fc630442cb40597983"><td class="mdescLeft"> </td><td class="mdescRight">fftw_plan forward <br/></td></tr>
+<tr class="memitem:a013fbbcfb64ef4d8f0cc7345e584fa92"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a013fbbcfb64ef4d8f0cc7345e584fa92"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a013fbbcfb64ef4d8f0cc7345e584fa92">FFTW_MANGLE_FLOAT</a> (r2r_kind)*r2r_kind</td></tr>
+<tr class="memdesc:a013fbbcfb64ef4d8f0cc7345e584fa92"><td class="mdescLeft"> </td><td class="mdescRight">r2r transform type (dct-i) <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aea7fa284fa9aaa4e264c9c07844b5442"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea7fa284fa9aaa4e264c9c07844b5442"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#aea7fa284fa9aaa4e264c9c07844b5442">N_total</a></td></tr>
+<tr class="memdesc:aea7fa284fa9aaa4e264c9c07844b5442"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a936082c69e582e36fb51ae452cd08fc3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a936082c69e582e36fb51ae452cd08fc3"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a936082c69e582e36fb51ae452cd08fc3">M_total</a></td></tr>
+<tr class="memdesc:a936082c69e582e36fb51ae452cd08fc3"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ab57019bf0a7274b5a6f401fe2f6bcf2b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab57019bf0a7274b5a6f401fe2f6bcf2b"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#ab57019bf0a7274b5a6f401fe2f6bcf2b">f_hat</a></td></tr>
+<tr class="memdesc:ab57019bf0a7274b5a6f401fe2f6bcf2b"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( float ) <br/></td></tr>
+<tr class="memitem:a178dae9cc4b5869ef69fd148efe14f93"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a178dae9cc4b5869ef69fd148efe14f93"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a178dae9cc4b5869ef69fd148efe14f93">f</a></td></tr>
+<tr class="memdesc:a178dae9cc4b5869ef69fd148efe14f93"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( float ) <br/></td></tr>
+<tr class="memitem:aa960f82c35501acf5237b5ed49f7fe57"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa960f82c35501acf5237b5ed49f7fe57"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#aa960f82c35501acf5237b5ed49f7fe57">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:aa960f82c35501acf5237b5ed49f7fe57"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a604a83ef64c291c6f8b23d45f620f2c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a604a83ef64c291c6f8b23d45f620f2c7"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a604a83ef64c291c6f8b23d45f620f2c7">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a604a83ef64c291c6f8b23d45f620f2c7"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:aa792b04cd0fa4f09175773aaa48f6a69"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa792b04cd0fa4f09175773aaa48f6a69"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#aa792b04cd0fa4f09175773aaa48f6a69">d</a></td></tr>
+<tr class="memdesc:aa792b04cd0fa4f09175773aaa48f6a69"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:a3c13e4fbc7dba10012ac853e2cde12d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c13e4fbc7dba10012ac853e2cde12d0"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a3c13e4fbc7dba10012ac853e2cde12d0">N</a></td></tr>
+<tr class="memdesc:a3c13e4fbc7dba10012ac853e2cde12d0"><td class="mdescLeft"> </td><td class="mdescRight">bandwidth <br/></td></tr>
+<tr class="memitem:ade7cdc871c9633a324774001bd809f49"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade7cdc871c9633a324774001bd809f49"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#ade7cdc871c9633a324774001bd809f49">n</a></td></tr>
+<tr class="memdesc:ade7cdc871c9633a324774001bd809f49"><td class="mdescLeft"> </td><td class="mdescRight">length of DST-1 <br/></td></tr>
+<tr class="memitem:a8d8b3093a73c09aac44cd8f55708ef27"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8d8b3093a73c09aac44cd8f55708ef27"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a8d8b3093a73c09aac44cd8f55708ef27">sigma</a></td></tr>
+<tr class="memdesc:a8d8b3093a73c09aac44cd8f55708ef27"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a6d228a85b702490f205c8983c15e33fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d228a85b702490f205c8983c15e33fe"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a6d228a85b702490f205c8983c15e33fe">m</a></td></tr>
+<tr class="memdesc:a6d228a85b702490f205c8983c15e33fe"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:aec1470b7592bf2e11f0dc53e22b5ebd9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec1470b7592bf2e11f0dc53e22b5ebd9"></a>
+float </td><td class="memItemRight" valign="bottom"><b>nfst_full_psi_eps</b></td></tr>
+<tr class="memitem:a2ca69cf1b6dea39e81cba93d0d1667d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ca69cf1b6dea39e81cba93d0d1667d8"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a2ca69cf1b6dea39e81cba93d0d1667d8">b</a></td></tr>
+<tr class="memdesc:a2ca69cf1b6dea39e81cba93d0d1667d8"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:aa23ef32254d98b76dfadbe7fa439f8c3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa23ef32254d98b76dfadbe7fa439f8c3"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#aa23ef32254d98b76dfadbe7fa439f8c3">nfst_flags</a></td></tr>
+<tr class="memdesc:aa23ef32254d98b76dfadbe7fa439f8c3"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:a9da018cd24e707e57ed0c8cac82f5301"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9da018cd24e707e57ed0c8cac82f5301"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a9da018cd24e707e57ed0c8cac82f5301">fftw_flags</a></td></tr>
+<tr class="memdesc:a9da018cd24e707e57ed0c8cac82f5301"><td class="mdescLeft"> </td><td class="mdescRight">flags for the fftw <br/></td></tr>
+<tr class="memitem:ad0d1772e5947f4395cbfa0fc2ed39018"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad0d1772e5947f4395cbfa0fc2ed39018"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#ad0d1772e5947f4395cbfa0fc2ed39018">x</a></td></tr>
+<tr class="memdesc:ad0d1772e5947f4395cbfa0fc2ed39018"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:a369d8545639fccbf73f9daf7dcb94fe8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a369d8545639fccbf73f9daf7dcb94fe8"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a369d8545639fccbf73f9daf7dcb94fe8">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:a369d8545639fccbf73f9daf7dcb94fe8"><td class="mdescLeft"> </td><td class="mdescRight">measured time for each step <br/></td></tr>
+<tr class="memitem:a9d59ca4338fe39f2e22f4e5d3155deba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9d59ca4338fe39f2e22f4e5d3155deba"></a>
+float ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a9d59ca4338fe39f2e22f4e5d3155deba">c_phi_inv</a></td></tr>
+<tr class="memdesc:a9d59ca4338fe39f2e22f4e5d3155deba"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:a96d6ede1036cae0a4df7fbf7ba7b8034"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a96d6ede1036cae0a4df7fbf7ba7b8034"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a96d6ede1036cae0a4df7fbf7ba7b8034">psi</a></td></tr>
+<tr class="memdesc:a96d6ede1036cae0a4df7fbf7ba7b8034"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:a4c9f0923fcf290197cee1550dc9a3665"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c9f0923fcf290197cee1550dc9a3665"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a4c9f0923fcf290197cee1550dc9a3665">size_psi</a></td></tr>
+<tr class="memdesc:a4c9f0923fcf290197cee1550dc9a3665"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a3ece0ce2dd8ad2e41852ac59df3ad481"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ece0ce2dd8ad2e41852ac59df3ad481"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a3ece0ce2dd8ad2e41852ac59df3ad481">psi_index_g</a></td></tr>
+<tr class="memdesc:a3ece0ce2dd8ad2e41852ac59df3ad481"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:ad20fa3e6bdb829247c3585639a0b086d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad20fa3e6bdb829247c3585639a0b086d"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#ad20fa3e6bdb829247c3585639a0b086d">psi_index_f</a></td></tr>
+<tr class="memdesc:ad20fa3e6bdb829247c3585639a0b086d"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:afa9db1e0c10c4eaf94864be816839391"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa9db1e0c10c4eaf94864be816839391"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>g</b></td></tr>
+<tr class="memitem:a84a630a187fdba4ea9eb948c706d9cf9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a84a630a187fdba4ea9eb948c706d9cf9"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>g_hat</b></td></tr>
+<tr class="memitem:a279687997f16d0fb839928f472307b39"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a279687997f16d0fb839928f472307b39"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a279687997f16d0fb839928f472307b39">g1</a></td></tr>
+<tr class="memdesc:a279687997f16d0fb839928f472307b39"><td class="mdescLeft"> </td><td class="mdescRight">input of fftw <br/></td></tr>
+<tr class="memitem:a11f05420be226a83aed2e8c41a1b9bd3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a11f05420be226a83aed2e8c41a1b9bd3"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a11f05420be226a83aed2e8c41a1b9bd3">g2</a></td></tr>
+<tr class="memdesc:a11f05420be226a83aed2e8c41a1b9bd3"><td class="mdescLeft"> </td><td class="mdescRight">output of fftw <br/></td></tr>
+<tr class="memitem:a64c5addda16e3d789184af183900db21"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a64c5addda16e3d789184af183900db21"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstf__plan.html#a64c5addda16e3d789184af183900db21">spline_coeffs</a></td></tr>
+<tr class="memdesc:a64c5addda16e3d789184af183900db21"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00338">338</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnfstl__plan.html b/doc/api/html/structnfstl__plan.html
new file mode 100644
index 0000000..2c4fd75
--- /dev/null
+++ b/doc/api/html/structnfstl__plan.html
@@ -0,0 +1,147 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nfstl_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nfstl_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a2c07f20560a3969129916e3d30239227"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c07f20560a3969129916e3d30239227"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a2c07f20560a3969129916e3d30239227">FFTW_MANGLE_LONG_DOUBLE</a> (plan) my_fftw_r2r_plan</td></tr>
+<tr class="memdesc:a2c07f20560a3969129916e3d30239227"><td class="mdescLeft"> </td><td class="mdescRight">fftw_plan forward <br/></td></tr>
+<tr class="memitem:a6285132e89913685bc2f7366fd79e769"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6285132e89913685bc2f7366fd79e769"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a6285132e89913685bc2f7366fd79e769">FFTW_MANGLE_LONG_DOUBLE</a> (r2r_kind)*r2r_kind</td></tr>
+<tr class="memdesc:a6285132e89913685bc2f7366fd79e769"><td class="mdescLeft"> </td><td class="mdescRight">r2r transform type (dct-i) <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a87f57bdfd9ba4415370ec796329cc1de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a87f57bdfd9ba4415370ec796329cc1de"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a87f57bdfd9ba4415370ec796329cc1de">N_total</a></td></tr>
+<tr class="memdesc:a87f57bdfd9ba4415370ec796329cc1de"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:ae4d5aeae7ea312bf70720bafd4fb3882"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae4d5aeae7ea312bf70720bafd4fb3882"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#ae4d5aeae7ea312bf70720bafd4fb3882">M_total</a></td></tr>
+<tr class="memdesc:ae4d5aeae7ea312bf70720bafd4fb3882"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:aa0a56037700b7a3d428c77e353dc209e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0a56037700b7a3d428c77e353dc209e"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#aa0a56037700b7a3d428c77e353dc209e">f_hat</a></td></tr>
+<tr class="memdesc:aa0a56037700b7a3d428c77e353dc209e"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( long double ) <br/></td></tr>
+<tr class="memitem:ad4f7ff9f286c0203712d5f16b21e9e4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4f7ff9f286c0203712d5f16b21e9e4e"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#ad4f7ff9f286c0203712d5f16b21e9e4e">f</a></td></tr>
+<tr class="memdesc:ad4f7ff9f286c0203712d5f16b21e9e4e"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( long double ) <br/></td></tr>
+<tr class="memitem:adbe7e6be1061160223c10b6567efda40"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbe7e6be1061160223c10b6567efda40"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#adbe7e6be1061160223c10b6567efda40">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:adbe7e6be1061160223c10b6567efda40"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a1eca782b8267b78a6effc382c0a5b9f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1eca782b8267b78a6effc382c0a5b9f4"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a1eca782b8267b78a6effc382c0a5b9f4">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a1eca782b8267b78a6effc382c0a5b9f4"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a66ac609113d5f8debb056f3c62f6b14b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66ac609113d5f8debb056f3c62f6b14b"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a66ac609113d5f8debb056f3c62f6b14b">d</a></td></tr>
+<tr class="memdesc:a66ac609113d5f8debb056f3c62f6b14b"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:a83b7013eb7ce3b1743ba45a2546a36c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a83b7013eb7ce3b1743ba45a2546a36c0"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a83b7013eb7ce3b1743ba45a2546a36c0">N</a></td></tr>
+<tr class="memdesc:a83b7013eb7ce3b1743ba45a2546a36c0"><td class="mdescLeft"> </td><td class="mdescRight">bandwidth <br/></td></tr>
+<tr class="memitem:a10456ed98cb22787f2469e1d20903c8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10456ed98cb22787f2469e1d20903c8c"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a10456ed98cb22787f2469e1d20903c8c">n</a></td></tr>
+<tr class="memdesc:a10456ed98cb22787f2469e1d20903c8c"><td class="mdescLeft"> </td><td class="mdescRight">length of DST-1 <br/></td></tr>
+<tr class="memitem:a3c50de01911ed86a66d15ecd79874e21"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c50de01911ed86a66d15ecd79874e21"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a3c50de01911ed86a66d15ecd79874e21">sigma</a></td></tr>
+<tr class="memdesc:a3c50de01911ed86a66d15ecd79874e21"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a55a5e4a962d8e01d7c0282f916bacb8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55a5e4a962d8e01d7c0282f916bacb8c"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a55a5e4a962d8e01d7c0282f916bacb8c">m</a></td></tr>
+<tr class="memdesc:a55a5e4a962d8e01d7c0282f916bacb8c"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:ab730bc710eda01bdb01d1b4b5bfd91e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab730bc710eda01bdb01d1b4b5bfd91e5"></a>
+long double </td><td class="memItemRight" valign="bottom"><b>nfst_full_psi_eps</b></td></tr>
+<tr class="memitem:a8378f952b6e05cd58225877eee84f2e7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8378f952b6e05cd58225877eee84f2e7"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a8378f952b6e05cd58225877eee84f2e7">b</a></td></tr>
+<tr class="memdesc:a8378f952b6e05cd58225877eee84f2e7"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:a15bb194b8a4fe39aca1b5be9f38d7175"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15bb194b8a4fe39aca1b5be9f38d7175"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a15bb194b8a4fe39aca1b5be9f38d7175">nfst_flags</a></td></tr>
+<tr class="memdesc:a15bb194b8a4fe39aca1b5be9f38d7175"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:a0ab6b3ec18b7e0685277d5f6997aa54c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ab6b3ec18b7e0685277d5f6997aa54c"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a0ab6b3ec18b7e0685277d5f6997aa54c">fftw_flags</a></td></tr>
+<tr class="memdesc:a0ab6b3ec18b7e0685277d5f6997aa54c"><td class="mdescLeft"> </td><td class="mdescRight">flags for the fftw <br/></td></tr>
+<tr class="memitem:af663d590a277872d6e0e777cb410edbb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af663d590a277872d6e0e777cb410edbb"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#af663d590a277872d6e0e777cb410edbb">x</a></td></tr>
+<tr class="memdesc:af663d590a277872d6e0e777cb410edbb"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:a47c6a3aba310b4f18d7ba5a7107fc168"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47c6a3aba310b4f18d7ba5a7107fc168"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a47c6a3aba310b4f18d7ba5a7107fc168">MEASURE_TIME_t</a> [3]</td></tr>
+<tr class="memdesc:a47c6a3aba310b4f18d7ba5a7107fc168"><td class="mdescLeft"> </td><td class="mdescRight">measured time for each step <br/></td></tr>
+<tr class="memitem:a7fdb409271e18f5dec1ac622af10d32a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7fdb409271e18f5dec1ac622af10d32a"></a>
+long double ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a7fdb409271e18f5dec1ac622af10d32a">c_phi_inv</a></td></tr>
+<tr class="memdesc:a7fdb409271e18f5dec1ac622af10d32a"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:a3fb3fd27fa2c3c907c4f1e05a183598d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3fb3fd27fa2c3c907c4f1e05a183598d"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a3fb3fd27fa2c3c907c4f1e05a183598d">psi</a></td></tr>
+<tr class="memdesc:a3fb3fd27fa2c3c907c4f1e05a183598d"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:a975ebfbce1679c3ad3d8cc06e81c5645"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a975ebfbce1679c3ad3d8cc06e81c5645"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a975ebfbce1679c3ad3d8cc06e81c5645">size_psi</a></td></tr>
+<tr class="memdesc:a975ebfbce1679c3ad3d8cc06e81c5645"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a773fbd9160ac14e6972a4b5be1b5113d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a773fbd9160ac14e6972a4b5be1b5113d"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a773fbd9160ac14e6972a4b5be1b5113d">psi_index_g</a></td></tr>
+<tr class="memdesc:a773fbd9160ac14e6972a4b5be1b5113d"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a46d8f0fefc63d3ba6f1811f41bc9a7d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46d8f0fefc63d3ba6f1811f41bc9a7d8"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a46d8f0fefc63d3ba6f1811f41bc9a7d8">psi_index_f</a></td></tr>
+<tr class="memdesc:a46d8f0fefc63d3ba6f1811f41bc9a7d8"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a375013685c82f0bd1ee2260a1b247ab4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a375013685c82f0bd1ee2260a1b247ab4"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>g</b></td></tr>
+<tr class="memitem:af08d6d6a6f54e44d7f83f418bddfc605"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af08d6d6a6f54e44d7f83f418bddfc605"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>g_hat</b></td></tr>
+<tr class="memitem:ac54e606a9b0c7c6b526fb3d44d28482a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac54e606a9b0c7c6b526fb3d44d28482a"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#ac54e606a9b0c7c6b526fb3d44d28482a">g1</a></td></tr>
+<tr class="memdesc:ac54e606a9b0c7c6b526fb3d44d28482a"><td class="mdescLeft"> </td><td class="mdescRight">input of fftw <br/></td></tr>
+<tr class="memitem:a0e91b301bcd4ce83aecdda2b0f7712ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0e91b301bcd4ce83aecdda2b0f7712ed"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a0e91b301bcd4ce83aecdda2b0f7712ed">g2</a></td></tr>
+<tr class="memdesc:a0e91b301bcd4ce83aecdda2b0f7712ed"><td class="mdescLeft"> </td><td class="mdescRight">output of fftw <br/></td></tr>
+<tr class="memitem:a7abc2fedc757d9b2b5f985377f99bfe7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7abc2fedc757d9b2b5f985377f99bfe7"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnfstl__plan.html#a7abc2fedc757d9b2b5f985377f99bfe7">spline_coeffs</a></td></tr>
+<tr class="memdesc:a7abc2fedc757d9b2b5f985377f99bfe7"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00338">338</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnnfft__plan.html b/doc/api/html/structnnfft__plan.html
new file mode 100644
index 0000000..991049e
--- /dev/null
+++ b/doc/api/html/structnnfft__plan.html
@@ -0,0 +1,177 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nnfft_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nnfft_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a2ea309e4dfb994f4a9fe86d1440cafa2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ea309e4dfb994f4a9fe86d1440cafa2"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a2ea309e4dfb994f4a9fe86d1440cafa2">N_total</a></td></tr>
+<tr class="memdesc:a2ea309e4dfb994f4a9fe86d1440cafa2"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a5e60b36fd90e44a68a72f129a2b4be6c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5e60b36fd90e44a68a72f129a2b4be6c"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a5e60b36fd90e44a68a72f129a2b4be6c">M_total</a></td></tr>
+<tr class="memdesc:a5e60b36fd90e44a68a72f129a2b4be6c"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ab13f0f93fe991a5831ff78312f9b9e4b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab13f0f93fe991a5831ff78312f9b9e4b"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#ab13f0f93fe991a5831ff78312f9b9e4b">f_hat</a></td></tr>
+<tr class="memdesc:ab13f0f93fe991a5831ff78312f9b9e4b"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a773de7440f04f7d3e23419cd94caa2eb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a773de7440f04f7d3e23419cd94caa2eb"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a773de7440f04f7d3e23419cd94caa2eb">f</a></td></tr>
+<tr class="memdesc:a773de7440f04f7d3e23419cd94caa2eb"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:ac2beab555e72c8f10921db21dc094069"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2beab555e72c8f10921db21dc094069"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#ac2beab555e72c8f10921db21dc094069">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:ac2beab555e72c8f10921db21dc094069"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a0afd6961b8b0b24b526e034d89874c7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0afd6961b8b0b24b526e034d89874c7c"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a0afd6961b8b0b24b526e034d89874c7c">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a0afd6961b8b0b24b526e034d89874c7c"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a97241bcd9654d3e90a556806e7998ab6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97241bcd9654d3e90a556806e7998ab6"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a97241bcd9654d3e90a556806e7998ab6">d</a></td></tr>
+<tr class="memdesc:a97241bcd9654d3e90a556806e7998ab6"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:a6a3e11978f1e2c6279bd12785ef56b5d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a3e11978f1e2c6279bd12785ef56b5d"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a6a3e11978f1e2c6279bd12785ef56b5d">sigma</a></td></tr>
+<tr class="memdesc:a6a3e11978f1e2c6279bd12785ef56b5d"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a0a30183077239e2de76e5de626dc92e9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a30183077239e2de76e5de626dc92e9"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a0a30183077239e2de76e5de626dc92e9">a</a></td></tr>
+<tr class="memdesc:a0a30183077239e2de76e5de626dc92e9"><td class="mdescLeft"> </td><td class="mdescRight">1 + 2*m/N1 <br/></td></tr>
+<tr class="memitem:a43e0e3140a0afdd551a95228be7e4ed7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a43e0e3140a0afdd551a95228be7e4ed7"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a43e0e3140a0afdd551a95228be7e4ed7">N</a></td></tr>
+<tr class="memdesc:a43e0e3140a0afdd551a95228be7e4ed7"><td class="mdescLeft"> </td><td class="mdescRight">cut-off-frequencies <br/></td></tr>
+<tr class="memitem:a7467148139ddeaf34261c0c256f64643"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7467148139ddeaf34261c0c256f64643"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a7467148139ddeaf34261c0c256f64643">N1</a></td></tr>
+<tr class="memdesc:a7467148139ddeaf34261c0c256f64643"><td class="mdescLeft"> </td><td class="mdescRight">sigma*N <br/></td></tr>
+<tr class="memitem:add59b0dfe6fced5130efcafa613abfcb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add59b0dfe6fced5130efcafa613abfcb"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#add59b0dfe6fced5130efcafa613abfcb">aN1</a></td></tr>
+<tr class="memdesc:add59b0dfe6fced5130efcafa613abfcb"><td class="mdescLeft"> </td><td class="mdescRight">sigma*a*N <br/></td></tr>
+<tr class="memitem:a1c5322ebb6d93515fc8a9e922c8a66da"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c5322ebb6d93515fc8a9e922c8a66da"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a1c5322ebb6d93515fc8a9e922c8a66da">m</a></td></tr>
+<tr class="memdesc:a1c5322ebb6d93515fc8a9e922c8a66da"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:aa91e909254c1beb83e2e971df50b96ca"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa91e909254c1beb83e2e971df50b96ca"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#aa91e909254c1beb83e2e971df50b96ca">b</a></td></tr>
+<tr class="memdesc:aa91e909254c1beb83e2e971df50b96ca"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:a4ee39bebbff40746c2701ade2e13f1f8"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a4ee39bebbff40746c2701ade2e13f1f8">K</a></td></tr>
+<tr class="memdesc:a4ee39bebbff40746c2701ade2e13f1f8"><td class="mdescLeft"> </td><td class="mdescRight">number of precomp. <a href="#a4ee39bebbff40746c2701ade2e13f1f8"></a><br/></td></tr>
+<tr class="memitem:acb1a1fa5fdb73d2187e9e9d8e4415921"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#acb1a1fa5fdb73d2187e9e9d8e4415921">aN1_total</a></td></tr>
+<tr class="memdesc:acb1a1fa5fdb73d2187e9e9d8e4415921"><td class="mdescLeft"> </td><td class="mdescRight">aN1_total=aN1[0]* ... <a href="#acb1a1fa5fdb73d2187e9e9d8e4415921"></a><br/></td></tr>
+<tr class="memitem:a4dc1f0a5a0ead52ada3ba3b2d7eae75f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4dc1f0a5a0ead52ada3ba3b2d7eae75f"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a4dc1f0a5a0ead52ada3ba3b2d7eae75f">direct_plan</a></td></tr>
+<tr class="memdesc:a4dc1f0a5a0ead52ada3ba3b2d7eae75f"><td class="mdescLeft"> </td><td class="mdescRight">plan for the nfft <br/></td></tr>
+<tr class="memitem:a5414c3133e2342c971b7f4df711e6e9a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5414c3133e2342c971b7f4df711e6e9a"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a5414c3133e2342c971b7f4df711e6e9a">nnfft_flags</a></td></tr>
+<tr class="memdesc:a5414c3133e2342c971b7f4df711e6e9a"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:a6b2de2633dd4347692e96887f98c1020"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6b2de2633dd4347692e96887f98c1020"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a6b2de2633dd4347692e96887f98c1020">n</a></td></tr>
+<tr class="memdesc:a6b2de2633dd4347692e96887f98c1020"><td class="mdescLeft"> </td><td class="mdescRight">n=N1, for the window function <br/></td></tr>
+<tr class="memitem:ab5b545ac8b82dee7b2d1a3455ecca76d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5b545ac8b82dee7b2d1a3455ecca76d"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#ab5b545ac8b82dee7b2d1a3455ecca76d">x</a></td></tr>
+<tr class="memdesc:ab5b545ac8b82dee7b2d1a3455ecca76d"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:a040dd9e982de31aaf04d5f543af9a80c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a040dd9e982de31aaf04d5f543af9a80c"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a040dd9e982de31aaf04d5f543af9a80c">v</a></td></tr>
+<tr class="memdesc:a040dd9e982de31aaf04d5f543af9a80c"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in fourier domain) <br/></td></tr>
+<tr class="memitem:a9073b3c76f70f8b9caedac7f5574ce89"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9073b3c76f70f8b9caedac7f5574ce89"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a9073b3c76f70f8b9caedac7f5574ce89">c_phi_inv</a></td></tr>
+<tr class="memdesc:a9073b3c76f70f8b9caedac7f5574ce89"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:ad300032f78e794528caa54e8a84431a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad300032f78e794528caa54e8a84431a4"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#ad300032f78e794528caa54e8a84431a4">psi</a></td></tr>
+<tr class="memdesc:ad300032f78e794528caa54e8a84431a4"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:af2992b9cb57809fb90a68dbaea36d79a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2992b9cb57809fb90a68dbaea36d79a"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#af2992b9cb57809fb90a68dbaea36d79a">size_psi</a></td></tr>
+<tr class="memdesc:af2992b9cb57809fb90a68dbaea36d79a"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:aa0b2be91e59a45c809c68398ceb41232"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0b2be91e59a45c809c68398ceb41232"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#aa0b2be91e59a45c809c68398ceb41232">psi_index_g</a></td></tr>
+<tr class="memdesc:aa0b2be91e59a45c809c68398ceb41232"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a2ada74222958e630640e6456e9bd2a8d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ada74222958e630640e6456e9bd2a8d"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#a2ada74222958e630640e6456e9bd2a8d">psi_index_f</a></td></tr>
+<tr class="memdesc:a2ada74222958e630640e6456e9bd2a8d"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a86c8933dfbdbef02b98fd961bf00e01b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a86c8933dfbdbef02b98fd961bf00e01b"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><b>F</b></td></tr>
+<tr class="memitem:ac3e3c4b14a5227a96b8627faf6933652"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac3e3c4b14a5227a96b8627faf6933652"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfft__plan.html#ac3e3c4b14a5227a96b8627faf6933652">spline_coeffs</a></td></tr>
+<tr class="memdesc:ac3e3c4b14a5227a96b8627faf6933652"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a4ee39bebbff40746c2701ade2e13f1f8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int nnfft_plan::K</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>number of precomp. </p>
+<p>uniform psi </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+<p>Referenced by <a class="el" href="nnfft_8c_source.html#l00368">nnfft_precompute_lin_psi()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acb1a1fa5fdb73d2187e9e9d8e4415921"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int nnfft_plan::aN1_total</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>aN1_total=aN1[0]* ... </p>
+<p>*aN1[d-1] </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnnfftf__plan.html b/doc/api/html/structnnfftf__plan.html
new file mode 100644
index 0000000..a9f7d2f
--- /dev/null
+++ b/doc/api/html/structnnfftf__plan.html
@@ -0,0 +1,175 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nnfftf_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nnfftf_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afd4cb1ff03f227c4e9e1dd9da21ec34e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd4cb1ff03f227c4e9e1dd9da21ec34e"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#afd4cb1ff03f227c4e9e1dd9da21ec34e">N_total</a></td></tr>
+<tr class="memdesc:afd4cb1ff03f227c4e9e1dd9da21ec34e"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a6908aa62ea014b3b60e047a99f6adb2b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6908aa62ea014b3b60e047a99f6adb2b"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a6908aa62ea014b3b60e047a99f6adb2b">M_total</a></td></tr>
+<tr class="memdesc:a6908aa62ea014b3b60e047a99f6adb2b"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a068de2b177ffaad5b0091b0ecd2ca211"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a068de2b177ffaad5b0091b0ecd2ca211"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a068de2b177ffaad5b0091b0ecd2ca211">f_hat</a></td></tr>
+<tr class="memdesc:a068de2b177ffaad5b0091b0ecd2ca211"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:a458403c21a1083ede0d84a6d25c8cc8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a458403c21a1083ede0d84a6d25c8cc8c"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a458403c21a1083ede0d84a6d25c8cc8c">f</a></td></tr>
+<tr class="memdesc:a458403c21a1083ede0d84a6d25c8cc8c"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:aea4c2210478af70a540da01e0c0a1c7b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea4c2210478af70a540da01e0c0a1c7b"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#aea4c2210478af70a540da01e0c0a1c7b">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:aea4c2210478af70a540da01e0c0a1c7b"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:adcff4592ce1838e342b92633e9f8de42"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adcff4592ce1838e342b92633e9f8de42"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#adcff4592ce1838e342b92633e9f8de42">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:adcff4592ce1838e342b92633e9f8de42"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:ae6d3ce66c1d6d2fd0f507d83df91f549"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae6d3ce66c1d6d2fd0f507d83df91f549"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#ae6d3ce66c1d6d2fd0f507d83df91f549">d</a></td></tr>
+<tr class="memdesc:ae6d3ce66c1d6d2fd0f507d83df91f549"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:a858114a52835ef9cae070f6017625a4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a858114a52835ef9cae070f6017625a4c"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a858114a52835ef9cae070f6017625a4c">sigma</a></td></tr>
+<tr class="memdesc:a858114a52835ef9cae070f6017625a4c"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:ab0a39deb647f2a862caf5a6cfaf4939b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab0a39deb647f2a862caf5a6cfaf4939b"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#ab0a39deb647f2a862caf5a6cfaf4939b">a</a></td></tr>
+<tr class="memdesc:ab0a39deb647f2a862caf5a6cfaf4939b"><td class="mdescLeft"> </td><td class="mdescRight">1 + 2*m/N1 <br/></td></tr>
+<tr class="memitem:aefd2c40e607f75679bb61926881d4488"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aefd2c40e607f75679bb61926881d4488"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#aefd2c40e607f75679bb61926881d4488">N</a></td></tr>
+<tr class="memdesc:aefd2c40e607f75679bb61926881d4488"><td class="mdescLeft"> </td><td class="mdescRight">cut-off-frequencies <br/></td></tr>
+<tr class="memitem:a9f6a5274cee5803505df5ad65d4c12fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f6a5274cee5803505df5ad65d4c12fd"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a9f6a5274cee5803505df5ad65d4c12fd">N1</a></td></tr>
+<tr class="memdesc:a9f6a5274cee5803505df5ad65d4c12fd"><td class="mdescLeft"> </td><td class="mdescRight">sigma*N <br/></td></tr>
+<tr class="memitem:a405914d88ec36f1bf8438ebfed59f294"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a405914d88ec36f1bf8438ebfed59f294"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a405914d88ec36f1bf8438ebfed59f294">aN1</a></td></tr>
+<tr class="memdesc:a405914d88ec36f1bf8438ebfed59f294"><td class="mdescLeft"> </td><td class="mdescRight">sigma*a*N <br/></td></tr>
+<tr class="memitem:af7f40661f8b29323b5b0f1ad5a7290a4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af7f40661f8b29323b5b0f1ad5a7290a4"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#af7f40661f8b29323b5b0f1ad5a7290a4">m</a></td></tr>
+<tr class="memdesc:af7f40661f8b29323b5b0f1ad5a7290a4"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:adbd7faf4a853905d26899885e5ca3b38"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbd7faf4a853905d26899885e5ca3b38"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#adbd7faf4a853905d26899885e5ca3b38">b</a></td></tr>
+<tr class="memdesc:adbd7faf4a853905d26899885e5ca3b38"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:a9d2bd4132187064cf5f6c301f7ce5125"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a9d2bd4132187064cf5f6c301f7ce5125">K</a></td></tr>
+<tr class="memdesc:a9d2bd4132187064cf5f6c301f7ce5125"><td class="mdescLeft"> </td><td class="mdescRight">number of precomp. <a href="#a9d2bd4132187064cf5f6c301f7ce5125"></a><br/></td></tr>
+<tr class="memitem:a4bfc7abd18935616365f7925b2994e38"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a4bfc7abd18935616365f7925b2994e38">aN1_total</a></td></tr>
+<tr class="memdesc:a4bfc7abd18935616365f7925b2994e38"><td class="mdescLeft"> </td><td class="mdescRight">aN1_total=aN1[0]* ... <a href="#a4bfc7abd18935616365f7925b2994e38"></a><br/></td></tr>
+<tr class="memitem:a15fe2e694c1b999008600c1f4a5dc2be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15fe2e694c1b999008600c1f4a5dc2be"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a15fe2e694c1b999008600c1f4a5dc2be">direct_plan</a></td></tr>
+<tr class="memdesc:a15fe2e694c1b999008600c1f4a5dc2be"><td class="mdescLeft"> </td><td class="mdescRight">plan for the nfft <br/></td></tr>
+<tr class="memitem:acebd9e667d51a5293f977642f031724e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acebd9e667d51a5293f977642f031724e"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#acebd9e667d51a5293f977642f031724e">nnfft_flags</a></td></tr>
+<tr class="memdesc:acebd9e667d51a5293f977642f031724e"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:ae849996a09be847a35be6c1ea018d988"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae849996a09be847a35be6c1ea018d988"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#ae849996a09be847a35be6c1ea018d988">n</a></td></tr>
+<tr class="memdesc:ae849996a09be847a35be6c1ea018d988"><td class="mdescLeft"> </td><td class="mdescRight">n=N1, for the window function <br/></td></tr>
+<tr class="memitem:ae3c9275b5cafc753e2762406ba422378"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3c9275b5cafc753e2762406ba422378"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#ae3c9275b5cafc753e2762406ba422378">x</a></td></tr>
+<tr class="memdesc:ae3c9275b5cafc753e2762406ba422378"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:a62822fb1596e8eccd6d2edf62096323b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62822fb1596e8eccd6d2edf62096323b"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a62822fb1596e8eccd6d2edf62096323b">v</a></td></tr>
+<tr class="memdesc:a62822fb1596e8eccd6d2edf62096323b"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in fourier domain) <br/></td></tr>
+<tr class="memitem:a89b1d6ef566671d479eaaf4e50f666cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a89b1d6ef566671d479eaaf4e50f666cb"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a89b1d6ef566671d479eaaf4e50f666cb">c_phi_inv</a></td></tr>
+<tr class="memdesc:a89b1d6ef566671d479eaaf4e50f666cb"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:a10747f86b86f7fa64539b46914344877"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10747f86b86f7fa64539b46914344877"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a10747f86b86f7fa64539b46914344877">psi</a></td></tr>
+<tr class="memdesc:a10747f86b86f7fa64539b46914344877"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:a67aae8bda525717c1628aa53fca9b7de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67aae8bda525717c1628aa53fca9b7de"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a67aae8bda525717c1628aa53fca9b7de">size_psi</a></td></tr>
+<tr class="memdesc:a67aae8bda525717c1628aa53fca9b7de"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:aa6d0ce899b41da6981f6863fc242559d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6d0ce899b41da6981f6863fc242559d"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#aa6d0ce899b41da6981f6863fc242559d">psi_index_g</a></td></tr>
+<tr class="memdesc:aa6d0ce899b41da6981f6863fc242559d"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a3788434fa045ecd49dd89d116bb40c47"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3788434fa045ecd49dd89d116bb40c47"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#a3788434fa045ecd49dd89d116bb40c47">psi_index_f</a></td></tr>
+<tr class="memdesc:a3788434fa045ecd49dd89d116bb40c47"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a5f089ea9bae2fa4078bb84bd0aa86b64"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f089ea9bae2fa4078bb84bd0aa86b64"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><b>F</b></td></tr>
+<tr class="memitem:acb221c7694859d0828bcc1f56154cd69"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acb221c7694859d0828bcc1f56154cd69"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftf__plan.html#acb221c7694859d0828bcc1f56154cd69">spline_coeffs</a></td></tr>
+<tr class="memdesc:acb221c7694859d0828bcc1f56154cd69"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a9d2bd4132187064cf5f6c301f7ce5125"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int nnfftf_plan::K</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>number of precomp. </p>
+<p>uniform psi </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4bfc7abd18935616365f7925b2994e38"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int nnfftf_plan::aN1_total</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>aN1_total=aN1[0]* ... </p>
+<p>*aN1[d-1] </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnnfftl__plan.html b/doc/api/html/structnnfftl__plan.html
new file mode 100644
index 0000000..a2a832b
--- /dev/null
+++ b/doc/api/html/structnnfftl__plan.html
@@ -0,0 +1,175 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nnfftl_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nnfftl_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a0e0827be03d503291f4a6d76c7b690d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0e0827be03d503291f4a6d76c7b690d7"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a0e0827be03d503291f4a6d76c7b690d7">N_total</a></td></tr>
+<tr class="memdesc:a0e0827be03d503291f4a6d76c7b690d7"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a74e7fb29427e5a4d9b383ab278f513a2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74e7fb29427e5a4d9b383ab278f513a2"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a74e7fb29427e5a4d9b383ab278f513a2">M_total</a></td></tr>
+<tr class="memdesc:a74e7fb29427e5a4d9b383ab278f513a2"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a97bc689ffe1f4c8eb99ee43cf408c662"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97bc689ffe1f4c8eb99ee43cf408c662"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a97bc689ffe1f4c8eb99ee43cf408c662">f_hat</a></td></tr>
+<tr class="memdesc:a97bc689ffe1f4c8eb99ee43cf408c662"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a6aaa7904dbee73679d86060f1842a04e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6aaa7904dbee73679d86060f1842a04e"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a6aaa7904dbee73679d86060f1842a04e">f</a></td></tr>
+<tr class="memdesc:a6aaa7904dbee73679d86060f1842a04e"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:a39b1bdd9a3eacd4ff3b809eeef01f364"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39b1bdd9a3eacd4ff3b809eeef01f364"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a39b1bdd9a3eacd4ff3b809eeef01f364">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:a39b1bdd9a3eacd4ff3b809eeef01f364"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:aa6098f51f9c69196ca782a1b0f8feeba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6098f51f9c69196ca782a1b0f8feeba"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#aa6098f51f9c69196ca782a1b0f8feeba">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:aa6098f51f9c69196ca782a1b0f8feeba"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a14dac9d67ed25ff370516f66668a8ec6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14dac9d67ed25ff370516f66668a8ec6"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a14dac9d67ed25ff370516f66668a8ec6">d</a></td></tr>
+<tr class="memdesc:a14dac9d67ed25ff370516f66668a8ec6"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank <br/></td></tr>
+<tr class="memitem:a899c16c2e59f2566a9f17d84f64af952"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a899c16c2e59f2566a9f17d84f64af952"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a899c16c2e59f2566a9f17d84f64af952">sigma</a></td></tr>
+<tr class="memdesc:a899c16c2e59f2566a9f17d84f64af952"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a41260d5c377bdd918b4952b4730b6908"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41260d5c377bdd918b4952b4730b6908"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a41260d5c377bdd918b4952b4730b6908">a</a></td></tr>
+<tr class="memdesc:a41260d5c377bdd918b4952b4730b6908"><td class="mdescLeft"> </td><td class="mdescRight">1 + 2*m/N1 <br/></td></tr>
+<tr class="memitem:a7fb433be8689db7816a3667620a294f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7fb433be8689db7816a3667620a294f3"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a7fb433be8689db7816a3667620a294f3">N</a></td></tr>
+<tr class="memdesc:a7fb433be8689db7816a3667620a294f3"><td class="mdescLeft"> </td><td class="mdescRight">cut-off-frequencies <br/></td></tr>
+<tr class="memitem:a693c5d648b1781dce21d24636aac6554"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a693c5d648b1781dce21d24636aac6554"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a693c5d648b1781dce21d24636aac6554">N1</a></td></tr>
+<tr class="memdesc:a693c5d648b1781dce21d24636aac6554"><td class="mdescLeft"> </td><td class="mdescRight">sigma*N <br/></td></tr>
+<tr class="memitem:af262dc79891366e77bb15789aa24f2cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af262dc79891366e77bb15789aa24f2cd"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#af262dc79891366e77bb15789aa24f2cd">aN1</a></td></tr>
+<tr class="memdesc:af262dc79891366e77bb15789aa24f2cd"><td class="mdescLeft"> </td><td class="mdescRight">sigma*a*N <br/></td></tr>
+<tr class="memitem:a2082f917534e3a8590d5a19b4377a256"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2082f917534e3a8590d5a19b4377a256"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a2082f917534e3a8590d5a19b4377a256">m</a></td></tr>
+<tr class="memdesc:a2082f917534e3a8590d5a19b4377a256"><td class="mdescLeft"> </td><td class="mdescRight">cut-off parameter in time-domain <br/></td></tr>
+<tr class="memitem:ada085ec8f6099bfcaa7a193745689c9a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada085ec8f6099bfcaa7a193745689c9a"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#ada085ec8f6099bfcaa7a193745689c9a">b</a></td></tr>
+<tr class="memdesc:ada085ec8f6099bfcaa7a193745689c9a"><td class="mdescLeft"> </td><td class="mdescRight">shape parameters <br/></td></tr>
+<tr class="memitem:a574648230ce316a55282f362774aa615"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a574648230ce316a55282f362774aa615">K</a></td></tr>
+<tr class="memdesc:a574648230ce316a55282f362774aa615"><td class="mdescLeft"> </td><td class="mdescRight">number of precomp. <a href="#a574648230ce316a55282f362774aa615"></a><br/></td></tr>
+<tr class="memitem:aa791fcca6424d42640020e178e8319e7"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#aa791fcca6424d42640020e178e8319e7">aN1_total</a></td></tr>
+<tr class="memdesc:aa791fcca6424d42640020e178e8319e7"><td class="mdescLeft"> </td><td class="mdescRight">aN1_total=aN1[0]* ... <a href="#aa791fcca6424d42640020e178e8319e7"></a><br/></td></tr>
+<tr class="memitem:aa59e9ff1ad2fe1d90e077451831c6596"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa59e9ff1ad2fe1d90e077451831c6596"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#aa59e9ff1ad2fe1d90e077451831c6596">direct_plan</a></td></tr>
+<tr class="memdesc:aa59e9ff1ad2fe1d90e077451831c6596"><td class="mdescLeft"> </td><td class="mdescRight">plan for the nfft <br/></td></tr>
+<tr class="memitem:a1a9bf1751caf842fb44f70a4cbab8744"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a9bf1751caf842fb44f70a4cbab8744"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a1a9bf1751caf842fb44f70a4cbab8744">nnfft_flags</a></td></tr>
+<tr class="memdesc:a1a9bf1751caf842fb44f70a4cbab8744"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:ad8d9bc5c5ae9f1ee6c813839ff831d97"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8d9bc5c5ae9f1ee6c813839ff831d97"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#ad8d9bc5c5ae9f1ee6c813839ff831d97">n</a></td></tr>
+<tr class="memdesc:ad8d9bc5c5ae9f1ee6c813839ff831d97"><td class="mdescLeft"> </td><td class="mdescRight">n=N1, for the window function <br/></td></tr>
+<tr class="memitem:ad3c1a7dca6cddcecba876f1bb523e3b6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3c1a7dca6cddcecba876f1bb523e3b6"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#ad3c1a7dca6cddcecba876f1bb523e3b6">x</a></td></tr>
+<tr class="memdesc:ad3c1a7dca6cddcecba876f1bb523e3b6"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in time/spatial domain) <br/></td></tr>
+<tr class="memitem:a224d2ba2e9ba30535b394b1375ff0a88"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a224d2ba2e9ba30535b394b1375ff0a88"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a224d2ba2e9ba30535b394b1375ff0a88">v</a></td></tr>
+<tr class="memdesc:a224d2ba2e9ba30535b394b1375ff0a88"><td class="mdescLeft"> </td><td class="mdescRight">nodes (in fourier domain) <br/></td></tr>
+<tr class="memitem:ab9b9f0d173b9526d60c1ae8fbec1e1f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9b9f0d173b9526d60c1ae8fbec1e1f7"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#ab9b9f0d173b9526d60c1ae8fbec1e1f7">c_phi_inv</a></td></tr>
+<tr class="memdesc:ab9b9f0d173b9526d60c1ae8fbec1e1f7"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix D <br/></td></tr>
+<tr class="memitem:a8644e94ccefb0b3001442b4df86dae5d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8644e94ccefb0b3001442b4df86dae5d"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a8644e94ccefb0b3001442b4df86dae5d">psi</a></td></tr>
+<tr class="memdesc:a8644e94ccefb0b3001442b4df86dae5d"><td class="mdescLeft"> </td><td class="mdescRight">precomputed data, matrix B <br/></td></tr>
+<tr class="memitem:aed13a1f152cb6febf2ce643c204d8b9a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed13a1f152cb6febf2ce643c204d8b9a"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#aed13a1f152cb6febf2ce643c204d8b9a">size_psi</a></td></tr>
+<tr class="memdesc:aed13a1f152cb6febf2ce643c204d8b9a"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a4b53c60fb307d01e01931ef812974a3c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b53c60fb307d01e01931ef812974a3c"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a4b53c60fb307d01e01931ef812974a3c">psi_index_g</a></td></tr>
+<tr class="memdesc:a4b53c60fb307d01e01931ef812974a3c"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:abf4204a1a31afd35d490ca4ef42bd596"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf4204a1a31afd35d490ca4ef42bd596"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#abf4204a1a31afd35d490ca4ef42bd596">psi_index_f</a></td></tr>
+<tr class="memdesc:abf4204a1a31afd35d490ca4ef42bd596"><td class="mdescLeft"> </td><td class="mdescRight">only for thin B <br/></td></tr>
+<tr class="memitem:a5ab9f4d21b6828336f3eb8b92910f9b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ab9f4d21b6828336f3eb8b92910f9b3"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><b>F</b></td></tr>
+<tr class="memitem:a8f364097c04b46c203a4883af90b9eb0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f364097c04b46c203a4883af90b9eb0"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnnfftl__plan.html#a8f364097c04b46c203a4883af90b9eb0">spline_coeffs</a></td></tr>
+<tr class="memdesc:a8f364097c04b46c203a4883af90b9eb0"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a574648230ce316a55282f362774aa615"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int nnfftl_plan::K</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>number of precomp. </p>
+<p>uniform psi </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa791fcca6424d42640020e178e8319e7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int nnfftl_plan::aN1_total</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>aN1_total=aN1[0]* ... </p>
+<p>*aN1[d-1] </p>
+
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00400">400</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnsfft__plan.html b/doc/api/html/structnsfft__plan.html
new file mode 100644
index 0000000..752e119
--- /dev/null
+++ b/doc/api/html/structnsfft__plan.html
@@ -0,0 +1,129 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nsfft_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nsfft_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a979134567e97bfffbc022b8267f98f6d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a979134567e97bfffbc022b8267f98f6d"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a979134567e97bfffbc022b8267f98f6d">FFTW_MANGLE_DOUBLE</a> (plan)*set_fftw_plan1</td></tr>
+<tr class="memdesc:a979134567e97bfffbc022b8267f98f6d"><td class="mdescLeft"> </td><td class="mdescRight">fftw plan for the nfft blocks <br/></td></tr>
+<tr class="memitem:a937d2895eeeaa8aabb92359232498693"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a937d2895eeeaa8aabb92359232498693"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a937d2895eeeaa8aabb92359232498693">FFTW_MANGLE_DOUBLE</a> (plan)*set_fftw_plan2</td></tr>
+<tr class="memdesc:a937d2895eeeaa8aabb92359232498693"><td class="mdescLeft"> </td><td class="mdescRight">fftw plan for the nfft blocks <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a87e0123a3ccf6a42102e065dca2f8505"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a87e0123a3ccf6a42102e065dca2f8505"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a87e0123a3ccf6a42102e065dca2f8505">N_total</a></td></tr>
+<tr class="memdesc:a87e0123a3ccf6a42102e065dca2f8505"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a03da0fc6abab6b0d2e15053ef1f3109e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03da0fc6abab6b0d2e15053ef1f3109e"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a03da0fc6abab6b0d2e15053ef1f3109e">M_total</a></td></tr>
+<tr class="memdesc:a03da0fc6abab6b0d2e15053ef1f3109e"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:ae3e2fcefd21caff3aa1e978b522d4ee3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3e2fcefd21caff3aa1e978b522d4ee3"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#ae3e2fcefd21caff3aa1e978b522d4ee3">f_hat</a></td></tr>
+<tr class="memdesc:ae3e2fcefd21caff3aa1e978b522d4ee3"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:a7ffefff1410360f4264e12398db06787"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ffefff1410360f4264e12398db06787"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a7ffefff1410360f4264e12398db06787">f</a></td></tr>
+<tr class="memdesc:a7ffefff1410360f4264e12398db06787"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftw_complex ) <br/></td></tr>
+<tr class="memitem:abbab5fc009e68a329bbebee4904e53a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abbab5fc009e68a329bbebee4904e53a5"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#abbab5fc009e68a329bbebee4904e53a5">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:abbab5fc009e68a329bbebee4904e53a5"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a9761ac166f3ec93197e8e409ba78fb4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9761ac166f3ec93197e8e409ba78fb4f"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a9761ac166f3ec93197e8e409ba78fb4f">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a9761ac166f3ec93197e8e409ba78fb4f"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:ac5e6ad608ed1e1d39f17d1512703ddfe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac5e6ad608ed1e1d39f17d1512703ddfe"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#ac5e6ad608ed1e1d39f17d1512703ddfe">d</a></td></tr>
+<tr class="memdesc:ac5e6ad608ed1e1d39f17d1512703ddfe"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank; d = 2, 3 <br/></td></tr>
+<tr class="memitem:ad2186982dfb4c6df290c29a47d8e3c52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad2186982dfb4c6df290c29a47d8e3c52"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#ad2186982dfb4c6df290c29a47d8e3c52">J</a></td></tr>
+<tr class="memdesc:ad2186982dfb4c6df290c29a47d8e3c52"><td class="mdescLeft"> </td><td class="mdescRight">problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1)) <br/></td></tr>
+<tr class="memitem:a4b5a4d8e23b0309da9c51bdea4b7d954"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b5a4d8e23b0309da9c51bdea4b7d954"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a4b5a4d8e23b0309da9c51bdea4b7d954">sigma</a></td></tr>
+<tr class="memdesc:a4b5a4d8e23b0309da9c51bdea4b7d954"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a5fcea2cbb16bfdfc4a5a3f5142db3281"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fcea2cbb16bfdfc4a5a3f5142db3281"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a5fcea2cbb16bfdfc4a5a3f5142db3281">flags</a></td></tr>
+<tr class="memdesc:a5fcea2cbb16bfdfc4a5a3f5142db3281"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:a9112356adf28d6c7f6c5d57354b8fa55"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9112356adf28d6c7f6c5d57354b8fa55"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a9112356adf28d6c7f6c5d57354b8fa55">index_sparse_to_full</a></td></tr>
+<tr class="memdesc:a9112356adf28d6c7f6c5d57354b8fa55"><td class="mdescLeft"> </td><td class="mdescRight">index conversation, overflow for d=3, J=9! <br/></td></tr>
+<tr class="memitem:a0a1b5e59c9ff83bc7b2d2894f96edd23"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a1b5e59c9ff83bc7b2d2894f96edd23"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a0a1b5e59c9ff83bc7b2d2894f96edd23">r_act_nfft_plan</a></td></tr>
+<tr class="memdesc:a0a1b5e59c9ff83bc7b2d2894f96edd23"><td class="mdescLeft"> </td><td class="mdescRight">index of current nfft block <br/></td></tr>
+<tr class="memitem:a9a3f23953542f9909597f559a546422f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a3f23953542f9909597f559a546422f"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a9a3f23953542f9909597f559a546422f">act_nfft_plan</a></td></tr>
+<tr class="memdesc:a9a3f23953542f9909597f559a546422f"><td class="mdescLeft"> </td><td class="mdescRight">current nfft block <br/></td></tr>
+<tr class="memitem:a0d68f66b8d41342a0b6e820ee2fffb3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0d68f66b8d41342a0b6e820ee2fffb3e"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a0d68f66b8d41342a0b6e820ee2fffb3e">center_nfft_plan</a></td></tr>
+<tr class="memdesc:a0d68f66b8d41342a0b6e820ee2fffb3e"><td class="mdescLeft"> </td><td class="mdescRight">central nfft block <br/></td></tr>
+<tr class="memitem:aca7c2bc3da4c17412a72471576b76bcc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca7c2bc3da4c17412a72471576b76bcc"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#aca7c2bc3da4c17412a72471576b76bcc">set_nfft_plan_1d</a></td></tr>
+<tr class="memdesc:aca7c2bc3da4c17412a72471576b76bcc"><td class="mdescLeft"> </td><td class="mdescRight">nfft plans for short nffts <br/></td></tr>
+<tr class="memitem:a3f4e3d8adb31adbef7a3579e42311a3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3f4e3d8adb31adbef7a3579e42311a3b"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#a3f4e3d8adb31adbef7a3579e42311a3b">set_nfft_plan_2d</a></td></tr>
+<tr class="memdesc:a3f4e3d8adb31adbef7a3579e42311a3b"><td class="mdescLeft"> </td><td class="mdescRight">nfft plans for short nffts <br/></td></tr>
+<tr class="memitem:aca6c9880cde07f3bc26dd7666c09a9d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca6c9880cde07f3bc26dd7666c09a9d6"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#aca6c9880cde07f3bc26dd7666c09a9d6">x_transposed</a></td></tr>
+<tr class="memdesc:aca6c9880cde07f3bc26dd7666c09a9d6"><td class="mdescLeft"> </td><td class="mdescRight">coordinate exchanged nodes, d = 2 <br/></td></tr>
+<tr class="memitem:a56345708a95cbcd3ee2ebf472607f274"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56345708a95cbcd3ee2ebf472607f274"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>x_102</b></td></tr>
+<tr class="memitem:ad47d5d52d2abf71be638f1b6859c3080"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad47d5d52d2abf71be638f1b6859c3080"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>x_201</b></td></tr>
+<tr class="memitem:ab67c4a556040bc7699980cf02bf6c8a7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab67c4a556040bc7699980cf02bf6c8a7"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>x_120</b></td></tr>
+<tr class="memitem:aee5ad936bb790f00bf0797c94e185549"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee5ad936bb790f00bf0797c94e185549"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfft__plan.html#aee5ad936bb790f00bf0797c94e185549">x_021</a></td></tr>
+<tr class="memdesc:aee5ad936bb790f00bf0797c94e185549"><td class="mdescLeft"> </td><td class="mdescRight">coordinate exchanged nodes, d=3 <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00451">451</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnsfftf__plan.html b/doc/api/html/structnsfftf__plan.html
new file mode 100644
index 0000000..8901336
--- /dev/null
+++ b/doc/api/html/structnsfftf__plan.html
@@ -0,0 +1,129 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nsfftf_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nsfftf_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ac0a9dbecfd535a1c7b2c0cfec5b79925"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0a9dbecfd535a1c7b2c0cfec5b79925"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#ac0a9dbecfd535a1c7b2c0cfec5b79925">FFTW_MANGLE_FLOAT</a> (plan)*set_fftw_plan1</td></tr>
+<tr class="memdesc:ac0a9dbecfd535a1c7b2c0cfec5b79925"><td class="mdescLeft"> </td><td class="mdescRight">fftw plan for the nfft blocks <br/></td></tr>
+<tr class="memitem:a5ceb97a548f5a438ad46a12133b1b5e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ceb97a548f5a438ad46a12133b1b5e8"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a5ceb97a548f5a438ad46a12133b1b5e8">FFTW_MANGLE_FLOAT</a> (plan)*set_fftw_plan2</td></tr>
+<tr class="memdesc:a5ceb97a548f5a438ad46a12133b1b5e8"><td class="mdescLeft"> </td><td class="mdescRight">fftw plan for the nfft blocks <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afe49ebe4fbbb3bd90b12e939c06adfab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe49ebe4fbbb3bd90b12e939c06adfab"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#afe49ebe4fbbb3bd90b12e939c06adfab">N_total</a></td></tr>
+<tr class="memdesc:afe49ebe4fbbb3bd90b12e939c06adfab"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:a6a75a26e5d6476595bde5b03d6293a0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a75a26e5d6476595bde5b03d6293a0a"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a6a75a26e5d6476595bde5b03d6293a0a">M_total</a></td></tr>
+<tr class="memdesc:a6a75a26e5d6476595bde5b03d6293a0a"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a423d4a1555477e49a7cb3c26a4a5dfd1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a423d4a1555477e49a7cb3c26a4a5dfd1"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a423d4a1555477e49a7cb3c26a4a5dfd1">f_hat</a></td></tr>
+<tr class="memdesc:a423d4a1555477e49a7cb3c26a4a5dfd1"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:aa2cda7d4bb129ad3dfd6b89682c28cd6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2cda7d4bb129ad3dfd6b89682c28cd6"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#aa2cda7d4bb129ad3dfd6b89682c28cd6">f</a></td></tr>
+<tr class="memdesc:aa2cda7d4bb129ad3dfd6b89682c28cd6"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwf_complex ) <br/></td></tr>
+<tr class="memitem:ac698248a376958d67a10beecfdc3aa36"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac698248a376958d67a10beecfdc3aa36"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#ac698248a376958d67a10beecfdc3aa36">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:ac698248a376958d67a10beecfdc3aa36"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a8b4c8c903e7b24610e2d2e0c9bb62705"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8b4c8c903e7b24610e2d2e0c9bb62705"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a8b4c8c903e7b24610e2d2e0c9bb62705">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a8b4c8c903e7b24610e2d2e0c9bb62705"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:a161e392c8404d11f3237350b23e8c041"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a161e392c8404d11f3237350b23e8c041"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a161e392c8404d11f3237350b23e8c041">d</a></td></tr>
+<tr class="memdesc:a161e392c8404d11f3237350b23e8c041"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank; d = 2, 3 <br/></td></tr>
+<tr class="memitem:a24e51336c8b6f1814932e2bad306179b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a24e51336c8b6f1814932e2bad306179b"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a24e51336c8b6f1814932e2bad306179b">J</a></td></tr>
+<tr class="memdesc:a24e51336c8b6f1814932e2bad306179b"><td class="mdescLeft"> </td><td class="mdescRight">problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1)) <br/></td></tr>
+<tr class="memitem:ab7b68bdae0872917b559577ac2f53402"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab7b68bdae0872917b559577ac2f53402"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#ab7b68bdae0872917b559577ac2f53402">sigma</a></td></tr>
+<tr class="memdesc:ab7b68bdae0872917b559577ac2f53402"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:acd78e2fcc4a9c29700887aee1517214c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd78e2fcc4a9c29700887aee1517214c"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#acd78e2fcc4a9c29700887aee1517214c">flags</a></td></tr>
+<tr class="memdesc:acd78e2fcc4a9c29700887aee1517214c"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:a3e6968100cf6a0d5950ccdcb1744788f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3e6968100cf6a0d5950ccdcb1744788f"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a3e6968100cf6a0d5950ccdcb1744788f">index_sparse_to_full</a></td></tr>
+<tr class="memdesc:a3e6968100cf6a0d5950ccdcb1744788f"><td class="mdescLeft"> </td><td class="mdescRight">index conversation, overflow for d=3, J=9! <br/></td></tr>
+<tr class="memitem:a844f94caf050adea11133a52dcbaccdc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a844f94caf050adea11133a52dcbaccdc"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a844f94caf050adea11133a52dcbaccdc">r_act_nfft_plan</a></td></tr>
+<tr class="memdesc:a844f94caf050adea11133a52dcbaccdc"><td class="mdescLeft"> </td><td class="mdescRight">index of current nfft block <br/></td></tr>
+<tr class="memitem:a505021fefe68002ba73c78815166a73c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a505021fefe68002ba73c78815166a73c"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a505021fefe68002ba73c78815166a73c">act_nfft_plan</a></td></tr>
+<tr class="memdesc:a505021fefe68002ba73c78815166a73c"><td class="mdescLeft"> </td><td class="mdescRight">current nfft block <br/></td></tr>
+<tr class="memitem:aa01b9e613b9847fa4cc6278fcb3ae660"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa01b9e613b9847fa4cc6278fcb3ae660"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#aa01b9e613b9847fa4cc6278fcb3ae660">center_nfft_plan</a></td></tr>
+<tr class="memdesc:aa01b9e613b9847fa4cc6278fcb3ae660"><td class="mdescLeft"> </td><td class="mdescRight">central nfft block <br/></td></tr>
+<tr class="memitem:aaadc0908c69e235bc60ec3c7b28bca47"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaadc0908c69e235bc60ec3c7b28bca47"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#aaadc0908c69e235bc60ec3c7b28bca47">set_nfft_plan_1d</a></td></tr>
+<tr class="memdesc:aaadc0908c69e235bc60ec3c7b28bca47"><td class="mdescLeft"> </td><td class="mdescRight">nfft plans for short nffts <br/></td></tr>
+<tr class="memitem:a4ee3a7ef05c4fdbc161d24db51be3122"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ee3a7ef05c4fdbc161d24db51be3122"></a>
+<a class="el" href="structnfftf__plan.html">nfftf_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a4ee3a7ef05c4fdbc161d24db51be3122">set_nfft_plan_2d</a></td></tr>
+<tr class="memdesc:a4ee3a7ef05c4fdbc161d24db51be3122"><td class="mdescLeft"> </td><td class="mdescRight">nfft plans for short nffts <br/></td></tr>
+<tr class="memitem:a4d7e0553a450636fc65816e4977914bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d7e0553a450636fc65816e4977914bd"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a4d7e0553a450636fc65816e4977914bd">x_transposed</a></td></tr>
+<tr class="memdesc:a4d7e0553a450636fc65816e4977914bd"><td class="mdescLeft"> </td><td class="mdescRight">coordinate exchanged nodes, d = 2 <br/></td></tr>
+<tr class="memitem:a75d9522d68301da2204ef8bad0e25262"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a75d9522d68301da2204ef8bad0e25262"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>x_102</b></td></tr>
+<tr class="memitem:aa47dcf1f293427495c9dbfa3e9229bd9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa47dcf1f293427495c9dbfa3e9229bd9"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>x_201</b></td></tr>
+<tr class="memitem:a0ec93a3c77d2d0c5a0facf9655504320"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ec93a3c77d2d0c5a0facf9655504320"></a>
+float * </td><td class="memItemRight" valign="bottom"><b>x_120</b></td></tr>
+<tr class="memitem:a0c015fd2deca4e70105f0c68a6a69586"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0c015fd2deca4e70105f0c68a6a69586"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftf__plan.html#a0c015fd2deca4e70105f0c68a6a69586">x_021</a></td></tr>
+<tr class="memdesc:a0c015fd2deca4e70105f0c68a6a69586"><td class="mdescLeft"> </td><td class="mdescRight">coordinate exchanged nodes, d=3 <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00451">451</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structnsfftl__plan.html b/doc/api/html/structnsfftl__plan.html
new file mode 100644
index 0000000..f41523c
--- /dev/null
+++ b/doc/api/html/structnsfftl__plan.html
@@ -0,0 +1,129 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - nsfftl_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">nsfftl_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a9a426f13a97f82a480413cba913b7f2b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9a426f13a97f82a480413cba913b7f2b"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a9a426f13a97f82a480413cba913b7f2b">FFTW_MANGLE_LONG_DOUBLE</a> (plan)*set_fftw_plan1</td></tr>
+<tr class="memdesc:a9a426f13a97f82a480413cba913b7f2b"><td class="mdescLeft"> </td><td class="mdescRight">fftw plan for the nfft blocks <br/></td></tr>
+<tr class="memitem:aa7137e627728ebee120141e78066da51"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7137e627728ebee120141e78066da51"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#aa7137e627728ebee120141e78066da51">FFTW_MANGLE_LONG_DOUBLE</a> (plan)*set_fftw_plan2</td></tr>
+<tr class="memdesc:aa7137e627728ebee120141e78066da51"><td class="mdescLeft"> </td><td class="mdescRight">fftw plan for the nfft blocks <br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aa0e8f48c39f40e781da203659ec018ab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0e8f48c39f40e781da203659ec018ab"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#aa0e8f48c39f40e781da203659ec018ab">N_total</a></td></tr>
+<tr class="memdesc:aa0e8f48c39f40e781da203659ec018ab"><td class="mdescLeft"> </td><td class="mdescRight">Total number of Fourier coefficients. <br/></td></tr>
+<tr class="memitem:af95027b3922c48e54dc5e5417d3a45e8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af95027b3922c48e54dc5e5417d3a45e8"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#af95027b3922c48e54dc5e5417d3a45e8">M_total</a></td></tr>
+<tr class="memdesc:af95027b3922c48e54dc5e5417d3a45e8"><td class="mdescLeft"> </td><td class="mdescRight">Total number of samples. <br/></td></tr>
+<tr class="memitem:a93d9d361d56e03f44bc6a9d4265b9f43"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a93d9d361d56e03f44bc6a9d4265b9f43"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a93d9d361d56e03f44bc6a9d4265b9f43">f_hat</a></td></tr>
+<tr class="memdesc:a93d9d361d56e03f44bc6a9d4265b9f43"><td class="mdescLeft"> </td><td class="mdescRight">Vector of Fourier coefficients, size is N_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:ada472d5a0fb2afc32b4d1683c98185f6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada472d5a0fb2afc32b4d1683c98185f6"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#ada472d5a0fb2afc32b4d1683c98185f6">f</a></td></tr>
+<tr class="memdesc:ada472d5a0fb2afc32b4d1683c98185f6"><td class="mdescLeft"> </td><td class="mdescRight">Vector of samples, size is M_total * sizeof( fftwl_complex ) <br/></td></tr>
+<tr class="memitem:aad46757ac44a32dbb04d0e453454acac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad46757ac44a32dbb04d0e453454acac"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#aad46757ac44a32dbb04d0e453454acac">mv_trafo</a> )(void *)</td></tr>
+<tr class="memdesc:aad46757ac44a32dbb04d0e453454acac"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own transform. <br/></td></tr>
+<tr class="memitem:a658b4a71ff29aa1cc2febc66d6c175bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a658b4a71ff29aa1cc2febc66d6c175bd"></a>
+void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a658b4a71ff29aa1cc2febc66d6c175bd">mv_adjoint</a> )(void *)</td></tr>
+<tr class="memdesc:a658b4a71ff29aa1cc2febc66d6c175bd"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the own adjoint. <br/></td></tr>
+<tr class="memitem:aca82cd28238f0c1a5171eabd1d301f90"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca82cd28238f0c1a5171eabd1d301f90"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#aca82cd28238f0c1a5171eabd1d301f90">d</a></td></tr>
+<tr class="memdesc:aca82cd28238f0c1a5171eabd1d301f90"><td class="mdescLeft"> </td><td class="mdescRight">dimension, rank; d = 2, 3 <br/></td></tr>
+<tr class="memitem:a6e3abb9e765b8f40b0f398a85c07d8af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6e3abb9e765b8f40b0f398a85c07d8af"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a6e3abb9e765b8f40b0f398a85c07d8af">J</a></td></tr>
+<tr class="memdesc:a6e3abb9e765b8f40b0f398a85c07d8af"><td class="mdescLeft"> </td><td class="mdescRight">problem size, i.e., d=2: N_total=(J+4) 2^(J+1) d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1)) <br/></td></tr>
+<tr class="memitem:aa55c79623980b8334e9fcb50fa55ecd3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa55c79623980b8334e9fcb50fa55ecd3"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#aa55c79623980b8334e9fcb50fa55ecd3">sigma</a></td></tr>
+<tr class="memdesc:aa55c79623980b8334e9fcb50fa55ecd3"><td class="mdescLeft"> </td><td class="mdescRight">oversampling-factor <br/></td></tr>
+<tr class="memitem:a5c4750f9d7a5f0dbc4d51d06d6be08d3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5c4750f9d7a5f0dbc4d51d06d6be08d3"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a5c4750f9d7a5f0dbc4d51d06d6be08d3">flags</a></td></tr>
+<tr class="memdesc:a5c4750f9d7a5f0dbc4d51d06d6be08d3"><td class="mdescLeft"> </td><td class="mdescRight">flags for precomputation, malloc <br/></td></tr>
+<tr class="memitem:aaaf6f8d00374e91ec3baf983583b51bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaaf6f8d00374e91ec3baf983583b51bd"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#aaaf6f8d00374e91ec3baf983583b51bd">index_sparse_to_full</a></td></tr>
+<tr class="memdesc:aaaf6f8d00374e91ec3baf983583b51bd"><td class="mdescLeft"> </td><td class="mdescRight">index conversation, overflow for d=3, J=9! <br/></td></tr>
+<tr class="memitem:ad40799f013c6b35165c2bc76eb7cb32e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad40799f013c6b35165c2bc76eb7cb32e"></a>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#ad40799f013c6b35165c2bc76eb7cb32e">r_act_nfft_plan</a></td></tr>
+<tr class="memdesc:ad40799f013c6b35165c2bc76eb7cb32e"><td class="mdescLeft"> </td><td class="mdescRight">index of current nfft block <br/></td></tr>
+<tr class="memitem:a28eeabbe1dbef7ccf1c2b8c683a4b5dc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28eeabbe1dbef7ccf1c2b8c683a4b5dc"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a28eeabbe1dbef7ccf1c2b8c683a4b5dc">act_nfft_plan</a></td></tr>
+<tr class="memdesc:a28eeabbe1dbef7ccf1c2b8c683a4b5dc"><td class="mdescLeft"> </td><td class="mdescRight">current nfft block <br/></td></tr>
+<tr class="memitem:af26a51757ddb28c4bcb37a0426e83fc1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af26a51757ddb28c4bcb37a0426e83fc1"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#af26a51757ddb28c4bcb37a0426e83fc1">center_nfft_plan</a></td></tr>
+<tr class="memdesc:af26a51757ddb28c4bcb37a0426e83fc1"><td class="mdescLeft"> </td><td class="mdescRight">central nfft block <br/></td></tr>
+<tr class="memitem:a89a23c26f73280c5945e62f8966195fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a89a23c26f73280c5945e62f8966195fb"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a89a23c26f73280c5945e62f8966195fb">set_nfft_plan_1d</a></td></tr>
+<tr class="memdesc:a89a23c26f73280c5945e62f8966195fb"><td class="mdescLeft"> </td><td class="mdescRight">nfft plans for short nffts <br/></td></tr>
+<tr class="memitem:aa7ae0c8a9b2f404bd1f8ce4820d7cf43"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7ae0c8a9b2f404bd1f8ce4820d7cf43"></a>
+<a class="el" href="structnfftl__plan.html">nfftl_plan</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#aa7ae0c8a9b2f404bd1f8ce4820d7cf43">set_nfft_plan_2d</a></td></tr>
+<tr class="memdesc:aa7ae0c8a9b2f404bd1f8ce4820d7cf43"><td class="mdescLeft"> </td><td class="mdescRight">nfft plans for short nffts <br/></td></tr>
+<tr class="memitem:a28eb398ae77902fd1ec2e0604d2a77ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28eb398ae77902fd1ec2e0604d2a77ce"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a28eb398ae77902fd1ec2e0604d2a77ce">x_transposed</a></td></tr>
+<tr class="memdesc:a28eb398ae77902fd1ec2e0604d2a77ce"><td class="mdescLeft"> </td><td class="mdescRight">coordinate exchanged nodes, d = 2 <br/></td></tr>
+<tr class="memitem:ab4ce3bd81b5bab3e868227cbe2e50101"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4ce3bd81b5bab3e868227cbe2e50101"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>x_102</b></td></tr>
+<tr class="memitem:a233cf0ab307992432bcfcd6f34f20937"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a233cf0ab307992432bcfcd6f34f20937"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>x_201</b></td></tr>
+<tr class="memitem:a965b92ec4facc3db597e1fb4fb300aed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a965b92ec4facc3db597e1fb4fb300aed"></a>
+long double * </td><td class="memItemRight" valign="bottom"><b>x_120</b></td></tr>
+<tr class="memitem:a62e8e58fe1b84f82ac85301a091af3fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a62e8e58fe1b84f82ac85301a091af3fa"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structnsfftl__plan.html#a62e8e58fe1b84f82ac85301a091af3fa">x_021</a></td></tr>
+<tr class="memdesc:a62e8e58fe1b84f82ac85301a091af3fa"><td class="mdescLeft"> </td><td class="mdescRight">coordinate exchanged nodes, d=3 <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00451">451</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structs__param.html b/doc/api/html/structs__param.html
new file mode 100644
index 0000000..0d24e90
--- /dev/null
+++ b/doc/api/html/structs__param.html
@@ -0,0 +1,93 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - s_param Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">s_param Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a35ae7e155deb56cd9db0a478a90dcbce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35ae7e155deb56cd9db0a478a90dcbce"></a>
+int </td><td class="memItemRight" valign="bottom"><b>d</b></td></tr>
+<tr class="memitem:ab774ab29ddf684c1adf243b19e25858d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab774ab29ddf684c1adf243b19e25858d"></a>
+int </td><td class="memItemRight" valign="bottom"><b>trafo_adjoint</b></td></tr>
+<tr class="memitem:a5bb17952658c456879c4696d80acb205"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5bb17952658c456879c4696d80acb205"></a>
+int </td><td class="memItemRight" valign="bottom"><b>N</b></td></tr>
+<tr class="memitem:a3be96a7850c7510c9ee724a64af1059d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3be96a7850c7510c9ee724a64af1059d"></a>
+int </td><td class="memItemRight" valign="bottom"><b>M</b></td></tr>
+<tr class="memitem:afae0fd8933f96ca0d39f11d9f59e1b33"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afae0fd8933f96ca0d39f11d9f59e1b33"></a>
+double </td><td class="memItemRight" valign="bottom"><b>sigma</b></td></tr>
+<tr class="memitem:a43995e5d91ee2164a0a786e781067279"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a43995e5d91ee2164a0a786e781067279"></a>
+int </td><td class="memItemRight" valign="bottom"><b>m</b></td></tr>
+<tr class="memitem:ad9d83fdb05317d16f7cb4d16393b2bb3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad9d83fdb05317d16f7cb4d16393b2bb3"></a>
+int </td><td class="memItemRight" valign="bottom"><b>flags</b></td></tr>
+<tr class="memitem:a328a78e1413be0875f873f6516cab41d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a328a78e1413be0875f873f6516cab41d"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nfsft_flags</b></td></tr>
+<tr class="memitem:a0ddad8b8daeb96efa32047f9d56f5cb8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ddad8b8daeb96efa32047f9d56f5cb8"></a>
+int </td><td class="memItemRight" valign="bottom"><b>psi_flags</b></td></tr>
+<tr class="memitem:a467a593d75c1526916c37747db8ec234"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a467a593d75c1526916c37747db8ec234"></a>
+int </td><td class="memItemRight" valign="bottom"><b>L</b></td></tr>
+<tr class="memitem:ace7c761113b9019b7b8fc5fea042b713"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ace7c761113b9019b7b8fc5fea042b713"></a>
+int </td><td class="memItemRight" valign="bottom"><b>n</b></td></tr>
+<tr class="memitem:aef18bbac08d37dbab0b2cd464ad3bad0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef18bbac08d37dbab0b2cd464ad3bad0"></a>
+int </td><td class="memItemRight" valign="bottom"><b>p</b></td></tr>
+<tr class="memitem:a55b49785531ca10cee68118598cba53a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55b49785531ca10cee68118598cba53a"></a>
+char * </td><td class="memItemRight" valign="bottom"><b>kernel_name</b></td></tr>
+<tr class="memitem:a8538301f8439ae1af3c34e43a31bc0b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8538301f8439ae1af3c34e43a31bc0b7"></a>
+double </td><td class="memItemRight" valign="bottom"><b>c</b></td></tr>
+<tr class="memitem:a30bc71eb0fcf6fb9716b0576834ef810"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a30bc71eb0fcf6fb9716b0576834ef810"></a>
+double </td><td class="memItemRight" valign="bottom"><b>eps_I</b></td></tr>
+<tr class="memitem:ad9a9a16ea14ab79fef8e1d9ce46a9b8f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad9a9a16ea14ab79fef8e1d9ce46a9b8f"></a>
+double </td><td class="memItemRight" valign="bottom"><b>eps_B</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft__benchomp_8c_source.html#l00110">110</a> of file <a class="el" href="nfft__benchomp_8c_source.html">nfft_benchomp.c</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following files:<ul>
+<li><a class="el" href="nfft__benchomp_8c_source.html">nfft_benchomp.c</a></li>
+<li><a class="el" href="nfsft__benchomp_8c_source.html">nfsft_benchomp.c</a></li>
+<li><a class="el" href="fastsum__benchomp_8c_source.html">fastsum_benchomp.c</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structs__result.html b/doc/api/html/structs__result.html
new file mode 100644
index 0000000..095f58f
--- /dev/null
+++ b/doc/api/html/structs__result.html
@@ -0,0 +1,65 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - s_result Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">s_result Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aca01173e4ebcbb7307ae51a36a7d0a1c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aca01173e4ebcbb7307ae51a36a7d0a1c"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nthreads</b></td></tr>
+<tr class="memitem:a04dc463c2923a9e02349fd00d6ec39f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a04dc463c2923a9e02349fd00d6ec39f0"></a>
+<a class="el" href="structs__resval.html">s_resval</a> </td><td class="memItemRight" valign="bottom"><b>resval</b> [6]</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft__benchomp_8c_source.html#l00128">128</a> of file <a class="el" href="nfft__benchomp_8c_source.html">nfft_benchomp.c</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following files:<ul>
+<li><a class="el" href="nfft__benchomp_8c_source.html">nfft_benchomp.c</a></li>
+<li><a class="el" href="nfsft__benchomp_8c_source.html">nfsft_benchomp.c</a></li>
+<li><a class="el" href="fastsum__benchomp_8c_source.html">fastsum_benchomp.c</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structs__resval.html b/doc/api/html/structs__resval.html
new file mode 100644
index 0000000..9726000
--- /dev/null
+++ b/doc/api/html/structs__resval.html
@@ -0,0 +1,67 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - s_resval Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">s_resval Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aa7c46309a88aba50fd63402037d8dd3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7c46309a88aba50fd63402037d8dd3e"></a>
+double </td><td class="memItemRight" valign="bottom"><b>avg</b></td></tr>
+<tr class="memitem:a70afc1842566eb54e7519287c3d073be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a70afc1842566eb54e7519287c3d073be"></a>
+double </td><td class="memItemRight" valign="bottom"><b>min</b></td></tr>
+<tr class="memitem:a5b114ea67a970f09f68257e35b549dac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b114ea67a970f09f68257e35b549dac"></a>
+double </td><td class="memItemRight" valign="bottom"><b>max</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft__benchomp_8c_source.html#l00121">121</a> of file <a class="el" href="nfft__benchomp_8c_source.html">nfft_benchomp.c</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following files:<ul>
+<li><a class="el" href="nfft__benchomp_8c_source.html">nfft_benchomp.c</a></li>
+<li><a class="el" href="nfsft__benchomp_8c_source.html">nfsft_benchomp.c</a></li>
+<li><a class="el" href="fastsum__benchomp_8c_source.html">fastsum_benchomp.c</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structs__testset.html b/doc/api/html/structs__testset.html
new file mode 100644
index 0000000..bb5e687
--- /dev/null
+++ b/doc/api/html/structs__testset.html
@@ -0,0 +1,67 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - s_testset Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">s_testset Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:abac38e41e682993ccec030f7862d86fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abac38e41e682993ccec030f7862d86fa"></a>
+<a class="el" href="structs__param.html">s_param</a> </td><td class="memItemRight" valign="bottom"><b>param</b></td></tr>
+<tr class="memitem:a519427a984ec85acc3cb3dc5f3a724be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a519427a984ec85acc3cb3dc5f3a724be"></a>
+<a class="el" href="structs__result.html">s_result</a> * </td><td class="memItemRight" valign="bottom"><b>results</b></td></tr>
+<tr class="memitem:a641e1f292f908995f7a1df9fe725e48b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a641e1f292f908995f7a1df9fe725e48b"></a>
+int </td><td class="memItemRight" valign="bottom"><b>nresults</b></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft__benchomp_8c_source.html#l00134">134</a> of file <a class="el" href="nfft__benchomp_8c_source.html">nfft_benchomp.c</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following files:<ul>
+<li><a class="el" href="nfft__benchomp_8c_source.html">nfft_benchomp.c</a></li>
+<li><a class="el" href="nfsft__benchomp_8c_source.html">nfsft_benchomp.c</a></li>
+<li><a class="el" href="fastsum__benchomp_8c_source.html">fastsum_benchomp.c</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structsolver__plan__complex.html b/doc/api/html/structsolver__plan__complex.html
new file mode 100644
index 0000000..c63752b
--- /dev/null
+++ b/doc/api/html/structsolver__plan__complex.html
@@ -0,0 +1,113 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - solver_plan_complex Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">solver_plan_complex Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afc0da6d097e04c2e28302a3b749140e7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc0da6d097e04c2e28302a3b749140e7"></a>
+<a class="el" href="structnfft__mv__plan__complex.html">nfft_mv_plan_complex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#afc0da6d097e04c2e28302a3b749140e7">mv</a></td></tr>
+<tr class="memdesc:afc0da6d097e04c2e28302a3b749140e7"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:a5423b6885c0bd94b563c8cfd9370c942"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5423b6885c0bd94b563c8cfd9370c942"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#a5423b6885c0bd94b563c8cfd9370c942">flags</a></td></tr>
+<tr class="memdesc:a5423b6885c0bd94b563c8cfd9370c942"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a3bb04f250f17c2a4ab5d0b813b7ccf2c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3bb04f250f17c2a4ab5d0b813b7ccf2c"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#a3bb04f250f17c2a4ab5d0b813b7ccf2c">w</a></td></tr>
+<tr class="memdesc:a3bb04f250f17c2a4ab5d0b813b7ccf2c"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:a80a69f8b5ddbd33be7041e6c6b0758ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a80a69f8b5ddbd33be7041e6c6b0758ce"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#a80a69f8b5ddbd33be7041e6c6b0758ce">w_hat</a></td></tr>
+<tr class="memdesc:a80a69f8b5ddbd33be7041e6c6b0758ce"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:ae05e9da3d96651d6a5d6456004791bde"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae05e9da3d96651d6a5d6456004791bde"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#ae05e9da3d96651d6a5d6456004791bde">y</a></td></tr>
+<tr class="memdesc:ae05e9da3d96651d6a5d6456004791bde"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:afac00cb681323619324be8787ff04f75"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afac00cb681323619324be8787ff04f75"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#afac00cb681323619324be8787ff04f75">f_hat_iter</a></td></tr>
+<tr class="memdesc:afac00cb681323619324be8787ff04f75"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a384e2c5f7b782e8c1bc57981376e6ff3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a384e2c5f7b782e8c1bc57981376e6ff3"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#a384e2c5f7b782e8c1bc57981376e6ff3">r_iter</a></td></tr>
+<tr class="memdesc:a384e2c5f7b782e8c1bc57981376e6ff3"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:aa554f9fda690f73783217b257a5faa03"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa554f9fda690f73783217b257a5faa03"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#aa554f9fda690f73783217b257a5faa03">z_hat_iter</a></td></tr>
+<tr class="memdesc:aa554f9fda690f73783217b257a5faa03"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of first kind <br/></td></tr>
+<tr class="memitem:a779777407a3de6429583efe2ab067fce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a779777407a3de6429583efe2ab067fce"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#a779777407a3de6429583efe2ab067fce">p_hat_iter</a></td></tr>
+<tr class="memdesc:a779777407a3de6429583efe2ab067fce"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:af41e928a58e7c461ff45037d47c350b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af41e928a58e7c461ff45037d47c350b5"></a>
+fftw_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#af41e928a58e7c461ff45037d47c350b5">v_iter</a></td></tr>
+<tr class="memdesc:af41e928a58e7c461ff45037d47c350b5"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:aebd8c33327e8d7b6b63b41ba2f7c1a02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aebd8c33327e8d7b6b63b41ba2f7c1a02"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#aebd8c33327e8d7b6b63b41ba2f7c1a02">alpha_iter</a></td></tr>
+<tr class="memdesc:aebd8c33327e8d7b6b63b41ba2f7c1a02"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:af13036b1a6f6edabe3fd862f77cf5000"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af13036b1a6f6edabe3fd862f77cf5000"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#af13036b1a6f6edabe3fd862f77cf5000">beta_iter</a></td></tr>
+<tr class="memdesc:af13036b1a6f6edabe3fd862f77cf5000"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:a88b5453ab0159bede71240fb32828abe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a88b5453ab0159bede71240fb32828abe"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#a88b5453ab0159bede71240fb32828abe">dot_r_iter</a></td></tr>
+<tr class="memdesc:a88b5453ab0159bede71240fb32828abe"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:add3b6bc4149ba5371ef0b8bd91443e50"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add3b6bc4149ba5371ef0b8bd91443e50"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#add3b6bc4149ba5371ef0b8bd91443e50">dot_r_iter_old</a></td></tr>
+<tr class="memdesc:add3b6bc4149ba5371ef0b8bd91443e50"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:aba91d7700d200a0b15cecf8aafcef0df"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aba91d7700d200a0b15cecf8aafcef0df"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#aba91d7700d200a0b15cecf8aafcef0df">dot_z_hat_iter</a></td></tr>
+<tr class="memdesc:aba91d7700d200a0b15cecf8aafcef0df"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of z_hat_iter <br/></td></tr>
+<tr class="memitem:aadb97426a0e35fd46a65557c56b055ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aadb97426a0e35fd46a65557c56b055ee"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#aadb97426a0e35fd46a65557c56b055ee">dot_z_hat_iter_old</a></td></tr>
+<tr class="memdesc:aadb97426a0e35fd46a65557c56b055ee"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a0cced7bb2f3b85b75b765d796e2c741d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0cced7bb2f3b85b75b765d796e2c741d"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#a0cced7bb2f3b85b75b765d796e2c741d">dot_p_hat_iter</a></td></tr>
+<tr class="memdesc:a0cced7bb2f3b85b75b765d796e2c741d"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of p_hat_iter <br/></td></tr>
+<tr class="memitem:a0561b1d4bd014a175ef75d069cc592de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0561b1d4bd014a175ef75d069cc592de"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__complex.html#a0561b1d4bd014a175ef75d069cc592de">dot_v_iter</a></td></tr>
+<tr class="memdesc:a0561b1d4bd014a175ef75d069cc592de"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00763">763</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structsolver__plan__double.html b/doc/api/html/structsolver__plan__double.html
new file mode 100644
index 0000000..b4b756d
--- /dev/null
+++ b/doc/api/html/structsolver__plan__double.html
@@ -0,0 +1,113 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - solver_plan_double Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">solver_plan_double Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a114ce0569fe40dbbf97d8f5fbe125404"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a114ce0569fe40dbbf97d8f5fbe125404"></a>
+<a class="el" href="structnfft__mv__plan__double.html">nfft_mv_plan_double</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a114ce0569fe40dbbf97d8f5fbe125404">mv</a></td></tr>
+<tr class="memdesc:a114ce0569fe40dbbf97d8f5fbe125404"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:ad4f6df9d890d106438ed0d3d725bf5b4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4f6df9d890d106438ed0d3d725bf5b4"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#ad4f6df9d890d106438ed0d3d725bf5b4">flags</a></td></tr>
+<tr class="memdesc:ad4f6df9d890d106438ed0d3d725bf5b4"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:adc2b7cea47756753ae9f8d5731f8d500"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adc2b7cea47756753ae9f8d5731f8d500"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#adc2b7cea47756753ae9f8d5731f8d500">w</a></td></tr>
+<tr class="memdesc:adc2b7cea47756753ae9f8d5731f8d500"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:ab16ed4ac6cf04f57c4b1f194fbc09472"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab16ed4ac6cf04f57c4b1f194fbc09472"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#ab16ed4ac6cf04f57c4b1f194fbc09472">w_hat</a></td></tr>
+<tr class="memdesc:ab16ed4ac6cf04f57c4b1f194fbc09472"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:accc401c5912fe60922d4ce2b30132e18"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="accc401c5912fe60922d4ce2b30132e18"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#accc401c5912fe60922d4ce2b30132e18">y</a></td></tr>
+<tr class="memdesc:accc401c5912fe60922d4ce2b30132e18"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:a25db7056f50bf19ab3e3527050a415d1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25db7056f50bf19ab3e3527050a415d1"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a25db7056f50bf19ab3e3527050a415d1">f_hat_iter</a></td></tr>
+<tr class="memdesc:a25db7056f50bf19ab3e3527050a415d1"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a088f3b3f683ffc2b9c7e42b02fa17183"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a088f3b3f683ffc2b9c7e42b02fa17183"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a088f3b3f683ffc2b9c7e42b02fa17183">r_iter</a></td></tr>
+<tr class="memdesc:a088f3b3f683ffc2b9c7e42b02fa17183"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:aac8b0f141a85d329e39319f6c19f3e48"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac8b0f141a85d329e39319f6c19f3e48"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#aac8b0f141a85d329e39319f6c19f3e48">z_hat_iter</a></td></tr>
+<tr class="memdesc:aac8b0f141a85d329e39319f6c19f3e48"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of first kind <br/></td></tr>
+<tr class="memitem:a21913274af8b42c199546919e2999677"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21913274af8b42c199546919e2999677"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a21913274af8b42c199546919e2999677">p_hat_iter</a></td></tr>
+<tr class="memdesc:a21913274af8b42c199546919e2999677"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:a53d18b8e21062399f9232058704cd0b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a53d18b8e21062399f9232058704cd0b2"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a53d18b8e21062399f9232058704cd0b2">v_iter</a></td></tr>
+<tr class="memdesc:a53d18b8e21062399f9232058704cd0b2"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:ae35eb29827ce76741bd658714350735b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae35eb29827ce76741bd658714350735b"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#ae35eb29827ce76741bd658714350735b">alpha_iter</a></td></tr>
+<tr class="memdesc:ae35eb29827ce76741bd658714350735b"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:aebfe38cf3b3ca344bbfbb7b1cf41eca8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aebfe38cf3b3ca344bbfbb7b1cf41eca8"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#aebfe38cf3b3ca344bbfbb7b1cf41eca8">beta_iter</a></td></tr>
+<tr class="memdesc:aebfe38cf3b3ca344bbfbb7b1cf41eca8"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:a77a16ccb2a2a1091dd121d024a3dc53b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a77a16ccb2a2a1091dd121d024a3dc53b"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a77a16ccb2a2a1091dd121d024a3dc53b">dot_r_iter</a></td></tr>
+<tr class="memdesc:a77a16ccb2a2a1091dd121d024a3dc53b"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a5d47ba554ae4d190384eaca6250f7312"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5d47ba554ae4d190384eaca6250f7312"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a5d47ba554ae4d190384eaca6250f7312">dot_r_iter_old</a></td></tr>
+<tr class="memdesc:a5d47ba554ae4d190384eaca6250f7312"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:a495a0f084b43fea59c6328e085467cea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a495a0f084b43fea59c6328e085467cea"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a495a0f084b43fea59c6328e085467cea">dot_z_hat_iter</a></td></tr>
+<tr class="memdesc:a495a0f084b43fea59c6328e085467cea"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of z_hat_iter <br/></td></tr>
+<tr class="memitem:a35f2567cc25bcfce28dbb48eba5e49c9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35f2567cc25bcfce28dbb48eba5e49c9"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a35f2567cc25bcfce28dbb48eba5e49c9">dot_z_hat_iter_old</a></td></tr>
+<tr class="memdesc:a35f2567cc25bcfce28dbb48eba5e49c9"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a21f781633362300a145e71ea88febbae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21f781633362300a145e71ea88febbae"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a21f781633362300a145e71ea88febbae">dot_p_hat_iter</a></td></tr>
+<tr class="memdesc:a21f781633362300a145e71ea88febbae"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of p_hat_iter <br/></td></tr>
+<tr class="memitem:a364a63cb093efa72e618a349a58d1890"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a364a63cb093efa72e618a349a58d1890"></a>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolver__plan__double.html#a364a63cb093efa72e618a349a58d1890">dot_v_iter</a></td></tr>
+<tr class="memdesc:a364a63cb093efa72e618a349a58d1890"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00763">763</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structsolverf__plan__complex.html b/doc/api/html/structsolverf__plan__complex.html
new file mode 100644
index 0000000..67e7f37
--- /dev/null
+++ b/doc/api/html/structsolverf__plan__complex.html
@@ -0,0 +1,113 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - solverf_plan_complex Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">solverf_plan_complex Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a519286afbd99d020738a92e03c320a18"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a519286afbd99d020738a92e03c320a18"></a>
+<a class="el" href="structnfftf__mv__plan__complex.html">nfftf_mv_plan_complex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a519286afbd99d020738a92e03c320a18">mv</a></td></tr>
+<tr class="memdesc:a519286afbd99d020738a92e03c320a18"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:a2d7642432b4b627a4bf77d1c05216669"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d7642432b4b627a4bf77d1c05216669"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a2d7642432b4b627a4bf77d1c05216669">flags</a></td></tr>
+<tr class="memdesc:a2d7642432b4b627a4bf77d1c05216669"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a91f7e03dc8509952827333cc61ca9aa4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91f7e03dc8509952827333cc61ca9aa4"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a91f7e03dc8509952827333cc61ca9aa4">w</a></td></tr>
+<tr class="memdesc:a91f7e03dc8509952827333cc61ca9aa4"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:aece5ec597b25ea28c945d2559316fad8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aece5ec597b25ea28c945d2559316fad8"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#aece5ec597b25ea28c945d2559316fad8">w_hat</a></td></tr>
+<tr class="memdesc:aece5ec597b25ea28c945d2559316fad8"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:a522b2ad5b572dce6d786b26e221a14d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a522b2ad5b572dce6d786b26e221a14d6"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a522b2ad5b572dce6d786b26e221a14d6">y</a></td></tr>
+<tr class="memdesc:a522b2ad5b572dce6d786b26e221a14d6"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:abe0364fe67e48a336fca522a0cf6ee1b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe0364fe67e48a336fca522a0cf6ee1b"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#abe0364fe67e48a336fca522a0cf6ee1b">f_hat_iter</a></td></tr>
+<tr class="memdesc:abe0364fe67e48a336fca522a0cf6ee1b"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a4ca8ff73e59386ea3d5003c1ad27459d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ca8ff73e59386ea3d5003c1ad27459d"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a4ca8ff73e59386ea3d5003c1ad27459d">r_iter</a></td></tr>
+<tr class="memdesc:a4ca8ff73e59386ea3d5003c1ad27459d"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a4c8dbe5d5a4d910b93ae7f84215482c8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c8dbe5d5a4d910b93ae7f84215482c8"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a4c8dbe5d5a4d910b93ae7f84215482c8">z_hat_iter</a></td></tr>
+<tr class="memdesc:a4c8dbe5d5a4d910b93ae7f84215482c8"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of first kind <br/></td></tr>
+<tr class="memitem:ac62464d925e739f79c28059cd1e59faa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac62464d925e739f79c28059cd1e59faa"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#ac62464d925e739f79c28059cd1e59faa">p_hat_iter</a></td></tr>
+<tr class="memdesc:ac62464d925e739f79c28059cd1e59faa"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:a7e352320832a737577bd9ebe689a50bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7e352320832a737577bd9ebe689a50bd"></a>
+fftwf_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a7e352320832a737577bd9ebe689a50bd">v_iter</a></td></tr>
+<tr class="memdesc:a7e352320832a737577bd9ebe689a50bd"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:ac2ce57e2bfbc31f9262e5ce93562d899"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2ce57e2bfbc31f9262e5ce93562d899"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#ac2ce57e2bfbc31f9262e5ce93562d899">alpha_iter</a></td></tr>
+<tr class="memdesc:ac2ce57e2bfbc31f9262e5ce93562d899"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:abd007d004fedd5bb4b9eb919d8e928d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abd007d004fedd5bb4b9eb919d8e928d8"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#abd007d004fedd5bb4b9eb919d8e928d8">beta_iter</a></td></tr>
+<tr class="memdesc:abd007d004fedd5bb4b9eb919d8e928d8"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:a1bb6290598f2f4f1452a2de2c27f54af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1bb6290598f2f4f1452a2de2c27f54af"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a1bb6290598f2f4f1452a2de2c27f54af">dot_r_iter</a></td></tr>
+<tr class="memdesc:a1bb6290598f2f4f1452a2de2c27f54af"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a861d76266b51f96c015ed6e33505978d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a861d76266b51f96c015ed6e33505978d"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a861d76266b51f96c015ed6e33505978d">dot_r_iter_old</a></td></tr>
+<tr class="memdesc:a861d76266b51f96c015ed6e33505978d"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:adeec40c2b8450cd7486f8524c6dcc3d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adeec40c2b8450cd7486f8524c6dcc3d4"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#adeec40c2b8450cd7486f8524c6dcc3d4">dot_z_hat_iter</a></td></tr>
+<tr class="memdesc:adeec40c2b8450cd7486f8524c6dcc3d4"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of z_hat_iter <br/></td></tr>
+<tr class="memitem:a71e2482ed0eb34229fb166d6821d1a03"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a71e2482ed0eb34229fb166d6821d1a03"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a71e2482ed0eb34229fb166d6821d1a03">dot_z_hat_iter_old</a></td></tr>
+<tr class="memdesc:a71e2482ed0eb34229fb166d6821d1a03"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a3d2a5ea538a77dc4f2da9b53beab9c01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d2a5ea538a77dc4f2da9b53beab9c01"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a3d2a5ea538a77dc4f2da9b53beab9c01">dot_p_hat_iter</a></td></tr>
+<tr class="memdesc:a3d2a5ea538a77dc4f2da9b53beab9c01"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of p_hat_iter <br/></td></tr>
+<tr class="memitem:a46f2243aac9e8e4689ab7f06914d3f97"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46f2243aac9e8e4689ab7f06914d3f97"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__complex.html#a46f2243aac9e8e4689ab7f06914d3f97">dot_v_iter</a></td></tr>
+<tr class="memdesc:a46f2243aac9e8e4689ab7f06914d3f97"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00763">763</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structsolverf__plan__double.html b/doc/api/html/structsolverf__plan__double.html
new file mode 100644
index 0000000..342c8d1
--- /dev/null
+++ b/doc/api/html/structsolverf__plan__double.html
@@ -0,0 +1,113 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - solverf_plan_double Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">solverf_plan_double Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aaa4fedc5005e075e7f707770384be114"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa4fedc5005e075e7f707770384be114"></a>
+<a class="el" href="structnfftf__mv__plan__double.html">nfftf_mv_plan_double</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#aaa4fedc5005e075e7f707770384be114">mv</a></td></tr>
+<tr class="memdesc:aaa4fedc5005e075e7f707770384be114"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:a28ce886cb705632f8f866bfb5880795b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28ce886cb705632f8f866bfb5880795b"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a28ce886cb705632f8f866bfb5880795b">flags</a></td></tr>
+<tr class="memdesc:a28ce886cb705632f8f866bfb5880795b"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a63c0a528c6e9989c7b0fee6c02d1fbff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63c0a528c6e9989c7b0fee6c02d1fbff"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a63c0a528c6e9989c7b0fee6c02d1fbff">w</a></td></tr>
+<tr class="memdesc:a63c0a528c6e9989c7b0fee6c02d1fbff"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:ab1cada21b9034edfd3a1b2f77252f3be"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1cada21b9034edfd3a1b2f77252f3be"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#ab1cada21b9034edfd3a1b2f77252f3be">w_hat</a></td></tr>
+<tr class="memdesc:ab1cada21b9034edfd3a1b2f77252f3be"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:a31aa1269dccbcfad158f31c276b0399e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31aa1269dccbcfad158f31c276b0399e"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a31aa1269dccbcfad158f31c276b0399e">y</a></td></tr>
+<tr class="memdesc:a31aa1269dccbcfad158f31c276b0399e"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:aab9daf7841a5f6b3a059921713736e3c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aab9daf7841a5f6b3a059921713736e3c"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#aab9daf7841a5f6b3a059921713736e3c">f_hat_iter</a></td></tr>
+<tr class="memdesc:aab9daf7841a5f6b3a059921713736e3c"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a6261a160be099d721856fab16f31cf22"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6261a160be099d721856fab16f31cf22"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a6261a160be099d721856fab16f31cf22">r_iter</a></td></tr>
+<tr class="memdesc:a6261a160be099d721856fab16f31cf22"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:aeee7fa961ebdf43e0caf1108e6b5ada7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeee7fa961ebdf43e0caf1108e6b5ada7"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#aeee7fa961ebdf43e0caf1108e6b5ada7">z_hat_iter</a></td></tr>
+<tr class="memdesc:aeee7fa961ebdf43e0caf1108e6b5ada7"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of first kind <br/></td></tr>
+<tr class="memitem:a6987fb320cd6798faabe9dfd92a494f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6987fb320cd6798faabe9dfd92a494f2"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a6987fb320cd6798faabe9dfd92a494f2">p_hat_iter</a></td></tr>
+<tr class="memdesc:a6987fb320cd6798faabe9dfd92a494f2"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:a6ee0cddd36b16d6b8cc09baf6db05cf9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6ee0cddd36b16d6b8cc09baf6db05cf9"></a>
+float * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a6ee0cddd36b16d6b8cc09baf6db05cf9">v_iter</a></td></tr>
+<tr class="memdesc:a6ee0cddd36b16d6b8cc09baf6db05cf9"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:ae1d25f3ba1b23f7d5953991495c91ce3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae1d25f3ba1b23f7d5953991495c91ce3"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#ae1d25f3ba1b23f7d5953991495c91ce3">alpha_iter</a></td></tr>
+<tr class="memdesc:ae1d25f3ba1b23f7d5953991495c91ce3"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:a4b53103abc562b5c603b4b656d1992fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b53103abc562b5c603b4b656d1992fa"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a4b53103abc562b5c603b4b656d1992fa">beta_iter</a></td></tr>
+<tr class="memdesc:a4b53103abc562b5c603b4b656d1992fa"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:ae52e93514983b50204d70f660e720e04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae52e93514983b50204d70f660e720e04"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#ae52e93514983b50204d70f660e720e04">dot_r_iter</a></td></tr>
+<tr class="memdesc:ae52e93514983b50204d70f660e720e04"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a2ee1d6b53c866d65aaa948afcbdd871e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2ee1d6b53c866d65aaa948afcbdd871e"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a2ee1d6b53c866d65aaa948afcbdd871e">dot_r_iter_old</a></td></tr>
+<tr class="memdesc:a2ee1d6b53c866d65aaa948afcbdd871e"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:a845482517a34f22d7eb39bf1747e5dd6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a845482517a34f22d7eb39bf1747e5dd6"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a845482517a34f22d7eb39bf1747e5dd6">dot_z_hat_iter</a></td></tr>
+<tr class="memdesc:a845482517a34f22d7eb39bf1747e5dd6"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of z_hat_iter <br/></td></tr>
+<tr class="memitem:aa9672016211508805091ab645b489bbf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa9672016211508805091ab645b489bbf"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#aa9672016211508805091ab645b489bbf">dot_z_hat_iter_old</a></td></tr>
+<tr class="memdesc:aa9672016211508805091ab645b489bbf"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a2bf2a21b09e47a883f9665b4ec38f3c2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2bf2a21b09e47a883f9665b4ec38f3c2"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#a2bf2a21b09e47a883f9665b4ec38f3c2">dot_p_hat_iter</a></td></tr>
+<tr class="memdesc:a2bf2a21b09e47a883f9665b4ec38f3c2"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of p_hat_iter <br/></td></tr>
+<tr class="memitem:aaeae6a2f28ba0ded31baca1aa8c36431"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaeae6a2f28ba0ded31baca1aa8c36431"></a>
+float </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverf__plan__double.html#aaeae6a2f28ba0ded31baca1aa8c36431">dot_v_iter</a></td></tr>
+<tr class="memdesc:aaeae6a2f28ba0ded31baca1aa8c36431"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00763">763</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structsolverl__plan__complex.html b/doc/api/html/structsolverl__plan__complex.html
new file mode 100644
index 0000000..67a86b1
--- /dev/null
+++ b/doc/api/html/structsolverl__plan__complex.html
@@ -0,0 +1,113 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - solverl_plan_complex Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">solverl_plan_complex Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a3da97d0d8d896d9da6a95a68a6f65442"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3da97d0d8d896d9da6a95a68a6f65442"></a>
+<a class="el" href="structnfftl__mv__plan__complex.html">nfftl_mv_plan_complex</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#a3da97d0d8d896d9da6a95a68a6f65442">mv</a></td></tr>
+<tr class="memdesc:a3da97d0d8d896d9da6a95a68a6f65442"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:abd86575c07d53042297da1c54ebc9e1a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abd86575c07d53042297da1c54ebc9e1a"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#abd86575c07d53042297da1c54ebc9e1a">flags</a></td></tr>
+<tr class="memdesc:abd86575c07d53042297da1c54ebc9e1a"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a547382238a57e96f316bac4dd291af0d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a547382238a57e96f316bac4dd291af0d"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#a547382238a57e96f316bac4dd291af0d">w</a></td></tr>
+<tr class="memdesc:a547382238a57e96f316bac4dd291af0d"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:ad4d107f6ef642a2f8173d05d73bde405"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4d107f6ef642a2f8173d05d73bde405"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#ad4d107f6ef642a2f8173d05d73bde405">w_hat</a></td></tr>
+<tr class="memdesc:ad4d107f6ef642a2f8173d05d73bde405"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:afbcb92106789225f6d54be521797b97f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbcb92106789225f6d54be521797b97f"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#afbcb92106789225f6d54be521797b97f">y</a></td></tr>
+<tr class="memdesc:afbcb92106789225f6d54be521797b97f"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:affba771210ad63dfce92bed9a629e19f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="affba771210ad63dfce92bed9a629e19f"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#affba771210ad63dfce92bed9a629e19f">f_hat_iter</a></td></tr>
+<tr class="memdesc:affba771210ad63dfce92bed9a629e19f"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:aec8fcaf36c7ce234e76970dc4b4ec9c9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec8fcaf36c7ce234e76970dc4b4ec9c9"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#aec8fcaf36c7ce234e76970dc4b4ec9c9">r_iter</a></td></tr>
+<tr class="memdesc:aec8fcaf36c7ce234e76970dc4b4ec9c9"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:abe468b3b489a8707538f083713962fcc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe468b3b489a8707538f083713962fcc"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#abe468b3b489a8707538f083713962fcc">z_hat_iter</a></td></tr>
+<tr class="memdesc:abe468b3b489a8707538f083713962fcc"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of first kind <br/></td></tr>
+<tr class="memitem:aa7833544d06eb2d71042da5fa06b9c5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7833544d06eb2d71042da5fa06b9c5c"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#aa7833544d06eb2d71042da5fa06b9c5c">p_hat_iter</a></td></tr>
+<tr class="memdesc:aa7833544d06eb2d71042da5fa06b9c5c"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:a79c7f5b84aa9feddeafbcb9bde26de17"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a79c7f5b84aa9feddeafbcb9bde26de17"></a>
+fftwl_complex * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#a79c7f5b84aa9feddeafbcb9bde26de17">v_iter</a></td></tr>
+<tr class="memdesc:a79c7f5b84aa9feddeafbcb9bde26de17"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:ad149f66fa5dde187b3ef7860e593de01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad149f66fa5dde187b3ef7860e593de01"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#ad149f66fa5dde187b3ef7860e593de01">alpha_iter</a></td></tr>
+<tr class="memdesc:ad149f66fa5dde187b3ef7860e593de01"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:ab0f9266a50fc4a3acda9659b2c0920e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab0f9266a50fc4a3acda9659b2c0920e3"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#ab0f9266a50fc4a3acda9659b2c0920e3">beta_iter</a></td></tr>
+<tr class="memdesc:ab0f9266a50fc4a3acda9659b2c0920e3"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:aa2d90b37bc2a2ae2f9d0c90c9431abf1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2d90b37bc2a2ae2f9d0c90c9431abf1"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#aa2d90b37bc2a2ae2f9d0c90c9431abf1">dot_r_iter</a></td></tr>
+<tr class="memdesc:aa2d90b37bc2a2ae2f9d0c90c9431abf1"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:a6d564c417ab5b11a306e489df80f4e1e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d564c417ab5b11a306e489df80f4e1e"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#a6d564c417ab5b11a306e489df80f4e1e">dot_r_iter_old</a></td></tr>
+<tr class="memdesc:a6d564c417ab5b11a306e489df80f4e1e"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:ae487ec619578f4f6d4876d7bc059f22a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae487ec619578f4f6d4876d7bc059f22a"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#ae487ec619578f4f6d4876d7bc059f22a">dot_z_hat_iter</a></td></tr>
+<tr class="memdesc:ae487ec619578f4f6d4876d7bc059f22a"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of z_hat_iter <br/></td></tr>
+<tr class="memitem:af4efa34efc92f873c771df52d423f39e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4efa34efc92f873c771df52d423f39e"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#af4efa34efc92f873c771df52d423f39e">dot_z_hat_iter_old</a></td></tr>
+<tr class="memdesc:af4efa34efc92f873c771df52d423f39e"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a4941cd9e60935f7e39a0c86a52202c02"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4941cd9e60935f7e39a0c86a52202c02"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#a4941cd9e60935f7e39a0c86a52202c02">dot_p_hat_iter</a></td></tr>
+<tr class="memdesc:a4941cd9e60935f7e39a0c86a52202c02"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of p_hat_iter <br/></td></tr>
+<tr class="memitem:a14f62c3118e3c1c7a92dd9bf8877250c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14f62c3118e3c1c7a92dd9bf8877250c"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__complex.html#a14f62c3118e3c1c7a92dd9bf8877250c">dot_v_iter</a></td></tr>
+<tr class="memdesc:a14f62c3118e3c1c7a92dd9bf8877250c"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00763">763</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structsolverl__plan__double.html b/doc/api/html/structsolverl__plan__double.html
new file mode 100644
index 0000000..9ebf677
--- /dev/null
+++ b/doc/api/html/structsolverl__plan__double.html
@@ -0,0 +1,113 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - solverl_plan_double Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">solverl_plan_double Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a56e946ecb94fc633a9d518d347725c4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a56e946ecb94fc633a9d518d347725c4c"></a>
+<a class="el" href="structnfftl__mv__plan__double.html">nfftl_mv_plan_double</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a56e946ecb94fc633a9d518d347725c4c">mv</a></td></tr>
+<tr class="memdesc:a56e946ecb94fc633a9d518d347725c4c"><td class="mdescLeft"> </td><td class="mdescRight">matrix vector multiplication <br/></td></tr>
+<tr class="memitem:aa95251443f265effb6093d63b6536431"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa95251443f265effb6093d63b6536431"></a>
+unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#aa95251443f265effb6093d63b6536431">flags</a></td></tr>
+<tr class="memdesc:aa95251443f265effb6093d63b6536431"><td class="mdescLeft"> </td><td class="mdescRight">iteration type <br/></td></tr>
+<tr class="memitem:a0f45b9d16576986d6d6d9605f6891f3d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f45b9d16576986d6d6d9605f6891f3d"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a0f45b9d16576986d6d6d9605f6891f3d">w</a></td></tr>
+<tr class="memdesc:a0f45b9d16576986d6d6d9605f6891f3d"><td class="mdescLeft"> </td><td class="mdescRight">weighting factors <br/></td></tr>
+<tr class="memitem:aaa9d07d5f3ec0f7f7f0a6193927e1a94"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaa9d07d5f3ec0f7f7f0a6193927e1a94"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#aaa9d07d5f3ec0f7f7f0a6193927e1a94">w_hat</a></td></tr>
+<tr class="memdesc:aaa9d07d5f3ec0f7f7f0a6193927e1a94"><td class="mdescLeft"> </td><td class="mdescRight">damping factors <br/></td></tr>
+<tr class="memitem:a70307c6e59216c27cb4d78e7f172ab8c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a70307c6e59216c27cb4d78e7f172ab8c"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a70307c6e59216c27cb4d78e7f172ab8c">y</a></td></tr>
+<tr class="memdesc:a70307c6e59216c27cb4d78e7f172ab8c"><td class="mdescLeft"> </td><td class="mdescRight">right hand side, samples <br/></td></tr>
+<tr class="memitem:a0c38937dd8ad6734e94e08a2cd700628"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0c38937dd8ad6734e94e08a2cd700628"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a0c38937dd8ad6734e94e08a2cd700628">f_hat_iter</a></td></tr>
+<tr class="memdesc:a0c38937dd8ad6734e94e08a2cd700628"><td class="mdescLeft"> </td><td class="mdescRight">iterative solution <br/></td></tr>
+<tr class="memitem:a9715db1a24435d9dd2bc76371d92174e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9715db1a24435d9dd2bc76371d92174e"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a9715db1a24435d9dd2bc76371d92174e">r_iter</a></td></tr>
+<tr class="memdesc:a9715db1a24435d9dd2bc76371d92174e"><td class="mdescLeft"> </td><td class="mdescRight">iterated residual vector <br/></td></tr>
+<tr class="memitem:a0816054fdb0e07f4a68fc4aa5321c977"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0816054fdb0e07f4a68fc4aa5321c977"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a0816054fdb0e07f4a68fc4aa5321c977">z_hat_iter</a></td></tr>
+<tr class="memdesc:a0816054fdb0e07f4a68fc4aa5321c977"><td class="mdescLeft"> </td><td class="mdescRight">residual of normal equation of first kind <br/></td></tr>
+<tr class="memitem:a803178524d842ae2944fb5f3ce9d4939"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a803178524d842ae2944fb5f3ce9d4939"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a803178524d842ae2944fb5f3ce9d4939">p_hat_iter</a></td></tr>
+<tr class="memdesc:a803178524d842ae2944fb5f3ce9d4939"><td class="mdescLeft"> </td><td class="mdescRight">search direction <br/></td></tr>
+<tr class="memitem:ab469e8fc7e7bc6c4068794cddf69ce26"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab469e8fc7e7bc6c4068794cddf69ce26"></a>
+long double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#ab469e8fc7e7bc6c4068794cddf69ce26">v_iter</a></td></tr>
+<tr class="memdesc:ab469e8fc7e7bc6c4068794cddf69ce26"><td class="mdescLeft"> </td><td class="mdescRight">residual vector update <br/></td></tr>
+<tr class="memitem:a7ea0b68ab2ccfe01df7a3747a5fed15a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ea0b68ab2ccfe01df7a3747a5fed15a"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a7ea0b68ab2ccfe01df7a3747a5fed15a">alpha_iter</a></td></tr>
+<tr class="memdesc:a7ea0b68ab2ccfe01df7a3747a5fed15a"><td class="mdescLeft"> </td><td class="mdescRight">step size for search direction <br/></td></tr>
+<tr class="memitem:a1c60e5fd15da3722f9b8213d1634c86a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c60e5fd15da3722f9b8213d1634c86a"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a1c60e5fd15da3722f9b8213d1634c86a">beta_iter</a></td></tr>
+<tr class="memdesc:a1c60e5fd15da3722f9b8213d1634c86a"><td class="mdescLeft"> </td><td class="mdescRight">step size for search correction <br/></td></tr>
+<tr class="memitem:ab12b510e093f8ccfaa4c1e51b6cd31c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab12b510e093f8ccfaa4c1e51b6cd31c1"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#ab12b510e093f8ccfaa4c1e51b6cd31c1">dot_r_iter</a></td></tr>
+<tr class="memdesc:ab12b510e093f8ccfaa4c1e51b6cd31c1"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of r_iter <br/></td></tr>
+<tr class="memitem:afa3e321968bd1773368cebe1339add7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa3e321968bd1773368cebe1339add7c"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#afa3e321968bd1773368cebe1339add7c">dot_r_iter_old</a></td></tr>
+<tr class="memdesc:afa3e321968bd1773368cebe1339add7c"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_r_iter <br/></td></tr>
+<tr class="memitem:aefacac40db7773101ce75ba8247119b7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aefacac40db7773101ce75ba8247119b7"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#aefacac40db7773101ce75ba8247119b7">dot_z_hat_iter</a></td></tr>
+<tr class="memdesc:aefacac40db7773101ce75ba8247119b7"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of z_hat_iter <br/></td></tr>
+<tr class="memitem:aa991891a7df826b77fac977581f9077c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa991891a7df826b77fac977581f9077c"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#aa991891a7df826b77fac977581f9077c">dot_z_hat_iter_old</a></td></tr>
+<tr class="memdesc:aa991891a7df826b77fac977581f9077c"><td class="mdescLeft"> </td><td class="mdescRight">previous dot_z_hat_iter <br/></td></tr>
+<tr class="memitem:a2f43c87a598dff5b6e87960a07864148"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f43c87a598dff5b6e87960a07864148"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a2f43c87a598dff5b6e87960a07864148">dot_p_hat_iter</a></td></tr>
+<tr class="memdesc:a2f43c87a598dff5b6e87960a07864148"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of p_hat_iter <br/></td></tr>
+<tr class="memitem:a849c4c1c131a333885e581fec5a2dac0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a849c4c1c131a333885e581fec5a2dac0"></a>
+long double </td><td class="memItemRight" valign="bottom"><a class="el" href="structsolverl__plan__double.html#a849c4c1c131a333885e581fec5a2dac0">dot_v_iter</a></td></tr>
+<tr class="memdesc:a849c4c1c131a333885e581fec5a2dac0"><td class="mdescLeft"> </td><td class="mdescRight">weighted dotproduct of v_iter <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="nfft3_8h_source.html#l00763">763</a> of file <a class="el" href="nfft3_8h_source.html">nfft3.h</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="nfft3_8h_source.html">nfft3.h</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structtaylor__plan.html b/doc/api/html/structtaylor__plan.html
new file mode 100644
index 0000000..aae8afb
--- /dev/null
+++ b/doc/api/html/structtaylor__plan.html
@@ -0,0 +1,68 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - taylor_plan Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">taylor_plan Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afd71182be8b8fcfa66155b0be4fb94ee"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd71182be8b8fcfa66155b0be4fb94ee"></a>
+<a class="el" href="structnfft__plan.html">nfft_plan</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structtaylor__plan.html#afd71182be8b8fcfa66155b0be4fb94ee">p</a></td></tr>
+<tr class="memdesc:afd71182be8b8fcfa66155b0be4fb94ee"><td class="mdescLeft"> </td><td class="mdescRight">used for fftw and data <br/></td></tr>
+<tr class="memitem:a3d3e69bc61775fee556801bd66a47c19"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d3e69bc61775fee556801bd66a47c19"></a>
+int * </td><td class="memItemRight" valign="bottom"><a class="el" href="structtaylor__plan.html#a3d3e69bc61775fee556801bd66a47c19">idx0</a></td></tr>
+<tr class="memdesc:a3d3e69bc61775fee556801bd66a47c19"><td class="mdescLeft"> </td><td class="mdescRight">index of next neighbour of x_j on the oversampled regular grid <br/></td></tr>
+<tr class="memitem:a09164bdbcba8f9ecc7a58904574ff07b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09164bdbcba8f9ecc7a58904574ff07b"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b">deltax0</a></td></tr>
+<tr class="memdesc:a09164bdbcba8f9ecc7a58904574ff07b"><td class="mdescLeft"> </td><td class="mdescRight">distance to the grid point <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="taylor__nfft_8c_source.html#l00044">44</a> of file <a class="el" href="taylor__nfft_8c_source.html">taylor_nfft.c</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="taylor__nfft_8c_source.html">taylor_nfft.c</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/structwindow__funct__plan__.html b/doc/api/html/structwindow__funct__plan__.html
new file mode 100644
index 0000000..4812464
--- /dev/null
+++ b/doc/api/html/structwindow__funct__plan__.html
@@ -0,0 +1,76 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - window_funct_plan_ Struct Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li><a href="classes.html"><span>Data Structure Index</span></a></li>
+ <li><a href="functions.html"><span>Data Fields</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">window_funct_plan_ Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>window_funct_plan is a plan to use the window functions independent of the nfft
+ <a href="structwindow__funct__plan__.html#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ab5d5f5263d52634062dbdf5e2e89e51a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5d5f5263d52634062dbdf5e2e89e51a"></a>
+int </td><td class="memItemRight" valign="bottom"><b>d</b></td></tr>
+<tr class="memitem:abcd107b125dea15da3651fe055f3550b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abcd107b125dea15da3651fe055f3550b"></a>
+int </td><td class="memItemRight" valign="bottom"><b>m</b></td></tr>
+<tr class="memitem:af51cd5627d15508b5a6f9071cb5c05c8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af51cd5627d15508b5a6f9071cb5c05c8"></a>
+int </td><td class="memItemRight" valign="bottom"><b>n</b> [1]</td></tr>
+<tr class="memitem:a8ccb145d4e8fb4e395533f85b35bf0d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ccb145d4e8fb4e395533f85b35bf0d7"></a>
+double </td><td class="memItemRight" valign="bottom"><b>sigma</b> [1]</td></tr>
+<tr class="memitem:a327636fa511ff5be5dac22db28903c44"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a327636fa511ff5be5dac22db28903c44"></a>
+double * </td><td class="memItemRight" valign="bottom"><b>b</b></td></tr>
+<tr class="memitem:a59ddba27ebde497ae7cfcfc2dbdd2304"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59ddba27ebde497ae7cfcfc2dbdd2304"></a>
+double * </td><td class="memItemRight" valign="bottom"><a class="el" href="structwindow__funct__plan__.html#a59ddba27ebde497ae7cfcfc2dbdd2304">spline_coeffs</a></td></tr>
+<tr class="memdesc:a59ddba27ebde497ae7cfcfc2dbdd2304"><td class="mdescLeft"> </td><td class="mdescRight">input for de Boor algorithm, if B_SPLINE or SINC_2m is defined <br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>window_funct_plan is a plan to use the window functions independent of the nfft </p>
+
+<p>Definition at line <a class="el" href="mri_8c_source.html#l00037">37</a> of file <a class="el" href="mri_8c_source.html">mri.c</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="mri_8c_source.html">mri.c</a></li>
+</ul>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/tab_a.png b/doc/api/html/tab_a.png
new file mode 100644
index 0000000..3b725c4
Binary files /dev/null and b/doc/api/html/tab_a.png differ
diff --git a/doc/api/html/tab_b.png b/doc/api/html/tab_b.png
new file mode 100644
index 0000000..258c141
Binary files /dev/null and b/doc/api/html/tab_b.png differ
diff --git a/doc/api/html/tab_h.png b/doc/api/html/tab_h.png
new file mode 100644
index 0000000..4ca9102
Binary files /dev/null and b/doc/api/html/tab_h.png differ
diff --git a/doc/api/html/tab_s.png b/doc/api/html/tab_s.png
new file mode 100644
index 0000000..ab478c9
Binary files /dev/null and b/doc/api/html/tab_s.png differ
diff --git a/doc/api/html/tabs.css b/doc/api/html/tabs.css
new file mode 100644
index 0000000..2192056
--- /dev/null
+++ b/doc/api/html/tabs.css
@@ -0,0 +1,59 @@
+.tabs, .tabs2, .tabs3 {
+ background-image: url('tab_b.png');
+ width: 100%;
+ z-index: 101;
+ font-size: 13px;
+}
+
+.tabs2 {
+ font-size: 10px;
+}
+.tabs3 {
+ font-size: 9px;
+}
+
+.tablist {
+ margin: 0;
+ padding: 0;
+ display: table;
+}
+
+.tablist li {
+ float: left;
+ display: table-cell;
+ background-image: url('tab_b.png');
+ line-height: 36px;
+ list-style: none;
+}
+
+.tablist a {
+ display: block;
+ padding: 0 20px;
+ font-weight: bold;
+ background-image:url('tab_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color: #283A5D;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+ outline: none;
+}
+
+.tabs3 .tablist a {
+ padding: 0 10px;
+}
+
+.tablist a:hover {
+ background-image: url('tab_h.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+ text-decoration: none;
+}
+
+.tablist li.current a {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
diff --git a/doc/api/html/taylor__nfft_8c.html b/doc/api/html/taylor__nfft_8c.html
new file mode 100644
index 0000000..7a1ad3b
--- /dev/null
+++ b/doc/api/html/taylor__nfft_8c.html
@@ -0,0 +1,349 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - taylor_nfft.c File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">taylor_nfft.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Testing the nfft againt a Taylor expansion based version.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include "config.h"</code><br/>
+<code>#include <stdio.h></code><br/>
+<code>#include <math.h></code><br/>
+<code>#include <string.h></code><br/>
+<code>#include <stdlib.h></code><br/>
+<code>#include "<a class="el" href="nfft3util_8h_source.html">nfft3util.h</a>"</code><br/>
+<code>#include "<a class="el" href="nfft3_8h_source.html">nfft3.h</a>"</code><br/>
+<code>#include "infft.h"</code><br/>
+</div>
+<p><a href="taylor__nfft_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structtaylor__plan.html">taylor_plan</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a8aaec175a64f4ca7e15fcdcd355f56a2"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="taylor__nfft_8c.html#a8aaec175a64f4ca7e15fcdcd355f56a2">taylor_init</a> (<a class="el" href="structtaylor__plan.html">taylor_plan</a> *ths, int N, int M, int n, int m)</td></tr>
+<tr class="memdesc:a8aaec175a64f4ca7e15fcdcd355f56a2"><td class="mdescLeft"> </td><td class="mdescRight">Initialisation of a transform plan. <a href="#a8aaec175a64f4ca7e15fcdcd355f56a2"></a><br/></td></tr>
+<tr class="memitem:a13b127b1ecbbd640bd30123c635940a5"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="taylor__nfft_8c.html#a13b127b1ecbbd640bd30123c635940a5">taylor_precompute</a> (<a class="el" href="structtaylor__plan.html">taylor_plan</a> *ths)</td></tr>
+<tr class="memdesc:a13b127b1ecbbd640bd30123c635940a5"><td class="mdescLeft"> </td><td class="mdescRight">Precomputation of weights and indices in Taylor expansion. <a href="#a13b127b1ecbbd640bd30123c635940a5"></a><br/></td></tr>
+<tr class="memitem:a10f336e1a24851643775a0da2f338c65"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="taylor__nfft_8c.html#a10f336e1a24851643775a0da2f338c65">taylor_finalize</a> (<a class="el" href="structtaylor__plan.html">taylor_plan</a> *ths)</td></tr>
+<tr class="memdesc:a10f336e1a24851643775a0da2f338c65"><td class="mdescLeft"> </td><td class="mdescRight">Destroys a transform plan. <a href="#a10f336e1a24851643775a0da2f338c65"></a><br/></td></tr>
+<tr class="memitem:ada016505d50bb2473ce6061a342d7e20"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="taylor__nfft_8c.html#ada016505d50bb2473ce6061a342d7e20">taylor_trafo</a> (<a class="el" href="structtaylor__plan.html">taylor_plan</a> *ths)</td></tr>
+<tr class="memdesc:ada016505d50bb2473ce6061a342d7e20"><td class="mdescLeft"> </td><td class="mdescRight">Executes a Taylor-NFFT, see equation (1.1) in [Guide], computes fast and approximate by means of a Taylor expansion for j=0,...,M-1 f[j] = sum_{k in I_N^d} f_hat[k] * exp(-2 (pi) k x[j]) <a href="#ada016505d50bb2473ce6061a342d7e20"></a><br/></td></tr>
+<tr class="memitem:a7ef2d41455ffa60a2f001c4981d4cf97"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="taylor__nfft_8c.html#a7ef2d41455ffa60a2f001c4981d4cf97">taylor_time_accuracy</a> (int N, int M, int n, int m, int n_taylor, int m_taylor, unsigned test_accuracy)</td></tr>
+<tr class="memdesc:a7ef2d41455ffa60a2f001c4981d4cf97"><td class="mdescLeft"> </td><td class="mdescRight">Compares NDFT, NFFT, and Taylor-NFFT. <a href="#a7ef2d41455ffa60a2f001c4981d4cf97"></a><br/></td></tr>
+<tr class="memitem:a3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3c04138a5bfe5d72780bb7e82a18e627"></a>
+int </td><td class="memItemRight" valign="bottom"><b>main</b> (int argc, char **argv)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Testing the nfft againt a Taylor expansion based version. </p>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis</dd></dl>
+<p>References: Time and memory requirements of the Nonequispaced FFT </p>
+
+<p>Definition in file <a class="el" href="taylor__nfft_8c_source.html">taylor_nfft.c</a>.</p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a8aaec175a64f4ca7e15fcdcd355f56a2"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void taylor_init </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structtaylor__plan.html">taylor_plan</a> * </td>
+ <td class="paramname"><em>ths</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>N</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>M</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>n</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>m</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Initialisation of a transform plan. </p>
+<ul>
+<li>ths The pointer to a taylor plan </li>
+<li>N The multi bandwidth </li>
+<li>M The number of nodes </li>
+<li>n The fft length </li>
+<li>m The order of the Taylor expansion</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="taylor__nfft_8c_source.html#l00064">64</a> of file <a class="el" href="taylor__nfft_8c_source.html">taylor_nfft.c</a>.</p>
+
+<p>References <a class="el" href="taylor__nfft_8c_source.html#l00050">taylor_plan::deltax0</a>, <a class="el" href="taylor__nfft_8c_source.html#l00048">taylor_plan::idx0</a>, and <a class="el" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc()</a>.</p>
+
+<p>Referenced by <a class="el" href="taylor__nfft_8c_source.html#l00179">taylor_time_accuracy()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a13b127b1ecbbd640bd30123c635940a5"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void taylor_precompute </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structtaylor__plan.html">taylor_plan</a> * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Precomputation of weights and indices in Taylor expansion. </p>
+<ul>
+<li>ths The pointer to a taylor plan</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="taylor__nfft_8c_source.html#l00083">83</a> of file <a class="el" href="taylor__nfft_8c_source.html">taylor_nfft.c</a>.</p>
+
+<p>References <a class="el" href="taylor__nfft_8c_source.html#l00050">taylor_plan::deltax0</a>, <a class="el" href="taylor__nfft_8c_source.html#l00048">taylor_plan::idx0</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::M_total</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::n</a>, and <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::x</a>.</p>
+
+<p>Referenced by <a class="el" href="taylor__nfft_8c_source.html#l00179">taylor_time_accuracy()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a10f336e1a24851643775a0da2f338c65"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void taylor_finalize </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structtaylor__plan.html">taylor_plan</a> * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Destroys a transform plan. </p>
+<ul>
+<li>ths The pointer to a taylor plan</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis, Daniel Potts </dd></dl>
+
+<p>Definition at line <a class="el" href="taylor__nfft_8c_source.html#l00105">105</a> of file <a class="el" href="taylor__nfft_8c_source.html">taylor_nfft.c</a>.</p>
+
+<p>References <a class="el" href="taylor__nfft_8c_source.html#l00050">taylor_plan::deltax0</a>, <a class="el" href="taylor__nfft_8c_source.html#l00048">taylor_plan::idx0</a>, and <a class="el" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free()</a>.</p>
+
+<p>Referenced by <a class="el" href="taylor__nfft_8c_source.html#l00179">taylor_time_accuracy()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ada016505d50bb2473ce6061a342d7e20"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void taylor_trafo </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structtaylor__plan.html">taylor_plan</a> * </td>
+ <td class="paramname"><em>ths</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Executes a Taylor-NFFT, see equation (1.1) in [Guide], computes fast and approximate by means of a Taylor expansion for j=0,...,M-1 f[j] = sum_{k in I_N^d} f_hat[k] * exp(-2 (pi) k x[j]) </p>
+<ul>
+<li>ths The pointer to a taylor plan</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="taylor__nfft_8c_source.html#l00123">123</a> of file <a class="el" href="taylor__nfft_8c_source.html">taylor_nfft.c</a>.</p>
+
+<p>References <a class="el" href="taylor__nfft_8c_source.html#l00050">taylor_plan::deltax0</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::f</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::f_hat</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::g1</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::g2</a>, <a class="el" href="taylor__nfft_8c_source.html#l00048">taylor_plan::idx0</a>, <a class="el" href="nfft3_8h_source.html#l0 [...]
+
+<p>Referenced by <a class="el" href="taylor__nfft_8c_source.html#l00179">taylor_time_accuracy()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7ef2d41455ffa60a2f001c4981d4cf97"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void taylor_time_accuracy </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>N</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>M</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>n</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>n_taylor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>m_taylor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned </td>
+ <td class="paramname"><em>test_accuracy</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compares NDFT, NFFT, and Taylor-NFFT. </p>
+<ul>
+<li>N The bandwidth </li>
+<li>N The number of nodes </li>
+<li>n The FFT-size for the NFFT </li>
+<li>m The cut-off for window function </li>
+<li>n_taylor The FFT-size for the Taylor-NFFT </li>
+<li>m_taylor The order of the Taylor approximation </li>
+<li>test_accuracy Flag for NDFT computation</li>
+</ul>
+<dl class="section author"><dt>Author:</dt><dd>Stefan Kunis </dd></dl>
+
+<p>Definition at line <a class="el" href="taylor__nfft_8c_source.html#l00179">179</a> of file <a class="el" href="taylor__nfft_8c_source.html">taylor_nfft.c</a>.</p>
+
+<p>References <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::f</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::f_hat</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::M_total</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::N_total</a>, <a class="el" href="nfft3_8h_source.html#l00173">nfft_plan::nfft_flags</a>, <a class="el" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free()</a>, <a class="el" href="nfft3_8h.htm [...]
+
+</div>
+</div>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/taylor__nfft_8c_source.html b/doc/api/html/taylor__nfft_8c_source.html
new file mode 100644
index 0000000..766b451
--- /dev/null
+++ b/doc/api/html/taylor__nfft_8c_source.html
@@ -0,0 +1,321 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - taylor_nfft.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d28a4824dc47e487b107a5db32ef43c4.html">examples</a></li><li class="navelem"><a class="el" href="dir_8c2550e038f78045c202418cbfa07f80.html">nfft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">taylor_nfft.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="taylor__nfft_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: taylor_nfft.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"><a class="code" href="structtaylor__plan.html"> 44</a></span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> {</div>
+<div class="line"><a name="l00046"></a><span class="lineno"><a class="code" href="structtaylor__plan.html#afd71182be8b8fcfa66155b0be4fb94ee"> 46</a></span> <a class="code" href="structnfft__plan.html">nfft_plan</a> <a class="code" href="structtaylor__plan.html#afd71182be8b8fcfa66155b0be4fb94ee" title="used for fftw and data">p</a>; </div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="code" href="structtaylor__plan.html#a3d3e69bc61775fee556801bd66a47c19"> 48</a></span> <span class="keywordtype">int</span> *idx0; </div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="code" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b"> 50</a></span> <span class="keywordtype">double</span> *<a class="code" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b" title="distance to the grid point">deltax0</a>; </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> } <a class="code" href="structtaylor__plan.html">taylor_plan</a>;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"><a class="code" href="taylor__nfft_8c.html#a8aaec175a64f4ca7e15fcdcd355f56a2"> 64</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="taylor__nfft_8c.html#a8aaec175a64f4ca7e15fcdcd355f56a2" title="Initialisation of a transform plan.">taylor_init</a>(<a class="code" href="structtaylor__plan.html">taylor_plan</a> *ths, <span class="keywordtype">int</span> N, <span class [...]
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment">/* Note: no nfft precomputation! */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> nfft_init_guru((<a class="code" href="structnfft__plan.html">nfft_plan</a>*)ths, 1, &N, M, &n, m,</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> MALLOC_X| MALLOC_F_HAT| MALLOC_F|</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> FFTW_ESTIMATE| FFTW_PRESERVE_INPUT);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> ths-><a class="code" href="structtaylor__plan.html#a3d3e69bc61775fee556801bd66a47c19" title="index of next neighbour of x_j on the oversampled regular grid">idx0</a>=(<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> ths-><a class="code" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b" title="distance to the grid point">deltax0</a>=(<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> }</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="taylor__nfft_8c.html#a13b127b1ecbbd640bd30123c635940a5"> 83</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="taylor__nfft_8c.html#a13b127b1ecbbd640bd30123c635940a5" title="Precomputation of weights and indices in Taylor expansion.">taylor_precompute</a>(<a class="code" href="structtaylor__plan.html">taylor_plan</a> *ths)</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <a class="code" href="structnfft__plan.html">nfft_plan</a>* cths=(<a class="code" href="structnfft__plan.html">nfft_plan</a>*)ths;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">for</span>(j=0;j<cths-><a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>;j++)</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> {</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> ths-><a class="code" href="structtaylor__plan.html#a3d3e69bc61775fee556801bd66a47c19" title="index of next neighbour of x_j on the oversampled regular grid">idx0</a>[j] = ((int)round((cths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j]+0.5)*cths-><a class="code" href="structnfft__plan.html#aa8db04bb0 [...]
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> cths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0]/2)%cths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0];</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> ths-><a class="code" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b" title="distance to the grid point">deltax0</a>[j] = cths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>[j] - (round((cths-><a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in [...]
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> cths-><a class="code" href="structnfft__plan.html#aa8db04bb03357b831a1958f9a802e0ae" title="FFTW length, equal to sigma*N, default is the power of 2 such that .">n</a>[0] - 0.5);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> }</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"><a class="code" href="taylor__nfft_8c.html#a10f336e1a24851643775a0da2f338c65"> 105</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="taylor__nfft_8c.html#a10f336e1a24851643775a0da2f338c65" title="Destroys a transform plan.">taylor_finalize</a>(<a class="code" href="structtaylor__plan.html">taylor_plan</a> *ths)</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b" title="distance to the grid point">deltax0</a>);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ths-><a class="code" href="structtaylor__plan.html#a3d3e69bc61775fee556801bd66a47c19" title="index of next neighbour of x_j on the oversampled regular grid">idx0</a>);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> nfft_finalize((<a class="code" href="structnfft__plan.html">nfft_plan</a>*)ths);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"><a class="code" href="taylor__nfft_8c.html#ada016505d50bb2473ce6061a342d7e20"> 123</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="taylor__nfft_8c.html#ada016505d50bb2473ce6061a342d7e20" title="Executes a Taylor-NFFT, see equation (1.1) in [Guide], computes fast and approximate by means of a Ta...">taylor_trafo</a>(<a class="code" href="structtaylor__plan.html">tay [...]
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> {</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keywordtype">int</span> j,k,l,ll;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">double</span> _Complex *f, *f_hat, *g1;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">double</span> *deltax;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">int</span> *idx;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> *cths=(<a class="code" href="structnfft__plan.html">nfft_plan</a>*)ths;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">for</span>(j=0, f=cths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>; j<cths->M_total; j++)</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> *f++ = 0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">for</span>(k=0; k<cths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total size of FFTW.">n_total</a>; k++)</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> cths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>[k]=0;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">for</span>(k=-cths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>/2, g1=cths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>+cths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Total s [...]
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> f_hat=cths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>; k<0; k++)</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> (*g1++)=cpow( - 2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*k,cths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>)* (*f_hat++);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> cths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>[0]=cths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>[cths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of F [...]
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">for</span>(k=1, g1=cths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>+1, f_hat=cths-><a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>+cths-><a class="code" href="structnfft__plan.html#ad33dadd [...]
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> k<cths->N_total/2; k++)</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> (*g1++)=cpow( - 2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*k,cths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>)* (*f_hat++);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">for</span>(l=cths-><a class="code" href="structnfft__plan.html#adbac137859fb87be7be73a5443de8cef" title="Cut-off parameter of the window function, default value is 6 (KAISER_BESSEL), 9 (SINC_POWER), 11 (B_SPLINE), 12 (GAUSSIAN)">m</a>-1; l>=0; l--)</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> {</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">for</span>(k=-cths-><a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0d22" title="Total number of Fourier coefficients.">N_total</a>/2, g1=cths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>+cths-><a class="code" href="structnfft__plan.html#ad8a5fdac5bcf62d86479c800768fdeb7" title="Tot [...]
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> k<0; k++)</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> (*g1++) /= (-2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*k);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">for</span>(k=1, g1=cths-><a class="code" href="structnfft__plan.html#a2190e7201c55214d153b4d91eaa7efda" title="Input of fftw.">g1</a>+1; k<cths->N_total/2; k++)</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> (*g1++) /= (-2*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*_Complex_I*k);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> fftw_execute(cths->my_fftw_plan1);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> ll=(l==0?1:l);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">for</span>(j=0, f=cths-><a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, deltax=ths-><a class="code" href="structtaylor__plan.html#a09164bdbcba8f9ecc7a58904574ff07b" title="distance to the grid point">deltax0</a>, idx=ths-><a class="code" href="structtaylor__plan.html [...]
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> j++, f++)</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> (*f) = ((*f) * (*deltax++) + cths-><a class="code" href="structnfft__plan.html#ad96e0aa935ea3589e999c131c43d8a78" title="Output of fftw.">g2</a>[*idx++]) /ll;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> }</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"><a class="code" href="taylor__nfft_8c.html#a7ef2d41455ffa60a2f001c4981d4cf97"> 179</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="taylor__nfft_8c.html#a7ef2d41455ffa60a2f001c4981d4cf97" title="Compares NDFT, NFFT, and Taylor-NFFT.">taylor_time_accuracy</a>(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> M, <span class="keywordtype">int [...]
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordtype">int</span> m_taylor, <span class="keywordtype">unsigned</span> test_accuracy)</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> {</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordtype">int</span> r;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordtype">double</span> t_ndft, t_nfft, t_taylor, t;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordtype">double</span> _Complex *swapndft = NULL;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> ticks t0, t1;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <a class="code" href="structtaylor__plan.html">taylor_plan</a> tp;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <a class="code" href="structnfft__plan.html">nfft_plan</a> np;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> printf(<span class="stringliteral">"%d\t%d\t"</span>,N, M);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <a class="code" href="taylor__nfft_8c.html#a8aaec175a64f4ca7e15fcdcd355f56a2" title="Initialisation of a transform plan.">taylor_init</a>(&tp,N,M,n_taylor,m_taylor);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> nfft_init_guru(&np, 1, &N, M, &n, m,</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> PRE_PHI_HUT| PRE_FG_PSI|</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> FFTW_INIT| FFT_OUT_OF_PLACE,</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> FFTW_ESTIMATE| FFTW_DESTROY_INPUT);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> np.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>=tp.<a class="code" href="structtaylor__plan.html#afd71182be8b8fcfa66155b0be4fb94ee" title="used for fftw and data">p</a>.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> np.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>=tp.<a class="code" href="structtaylor__plan.html#afd71182be8b8fcfa66155b0be4fb94ee" title="used for fftw and data">p</a>.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, [...]
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> np.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>=tp.<a class="code" href="structtaylor__plan.html#afd71182be8b8fcfa66155b0be4fb94ee" title="used for fftw and data">p</a>.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw [...]
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">if</span>(test_accuracy)</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> swapndft=(<span class="keywordtype">double</span> _Complex*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> _Complex));</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <a class="code" href="group__nfftutil.html#gaa44184ac2c1452221508e7640f391c34" title="Inits a vector of random double numbers in .">nfft_vrand_shifted_unit_double</a>(np.<a class="code" href="structnfft__plan.html#a7eb64fb5fedfba0ec75261e777e020c0" title="Nodes in time/spatial domain, size is doubles.">x</a>, np.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total numbe [...]
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <a class="code" href="taylor__nfft_8c.html#a13b127b1ecbbd640bd30123c635940a5" title="Precomputation of weights and indices in Taylor expansion.">taylor_precompute</a>(&tp);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">if</span>(np.<a class="code" href="structnfft__plan.html#a2721da68a3a5b1846ecca8395d76bb1d" title="Flags for precomputation, (de)allocation, and FFTW usage, default setting is PRE_PHI_HUT | PRE_PSI | ...">nfft_flags</a> & PRE_ONE_PSI)</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> nfft_precompute_one_psi(&np);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <a class="code" href="group__nfftutil.html#ga5f53c8cd0b2f33200fce15ecf75a0685" title="Inits a vector of random complex numbers in .">nfft_vrand_unit_complex</a>(np.<a class="code" href="structnfft__plan.html#a23409aec68871e9a56f11711e2891691" title="Vector of Fourier coefficients, size is N_total * sizeof( fftw_complex )">f_hat</a>, np.<a class="code" href="structnfft__plan.html#ad33daddf76670c8731c759bf74ad0 [...]
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">if</span>(test_accuracy)</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> {</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(np.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> t_ndft=0;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> r=0;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">while</span>(t_ndft<0.01)</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> {</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> r++;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> t0 = getticks();</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> nfft_trafo_direct(&np);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> t1 = getticks();</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> t_ndft+=t;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> }</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> t_ndft/=r;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <a class="code" href="group__nfftutil.html#ga4df074728562efbb458f6662e649d1d5" title="Swapping of two vectors.">NFFT_SWAP_complex</a>(np.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>,swapndft);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> printf(<span class="stringliteral">"%.2e\t"</span>,t_ndft);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> }</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> printf(<span class="stringliteral">"nan\t\t"</span>);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> t_nfft=0;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> r=0;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">while</span>(t_nfft<0.01)</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> {</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> r++;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> t0 = getticks();</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <a class="code" href="nfft3_8h.html#a9f1e6bd9f7f956a8679e6b413c97b421" title="user routines">nfft_trafo</a>(&np);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> t1 = getticks();</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> t_nfft+=t;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> }</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> t_nfft/=r;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> printf(<span class="stringliteral">"%.2f\t%d\t%.2e\t"</span>,((<span class="keywordtype">double</span>)n)/N, m, t_nfft);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">if</span>(test_accuracy)</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> printf(<span class="stringliteral">"%.2e\t"</span>,X(error_l_infty_complex)(swapndft, np.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, np.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> printf(<span class="stringliteral">"nan\t\t"</span>);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> t_taylor=0;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> r=0;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">while</span>(t_taylor<0.01)</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> {</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> r++;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> t0 = getticks();</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <a class="code" href="taylor__nfft_8c.html#ada016505d50bb2473ce6061a342d7e20" title="Executes a Taylor-NFFT, see equation (1.1) in [Guide], computes fast and approximate by means of a Ta...">taylor_trafo</a>(&tp);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> t1 = getticks();</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> t = nfft_elapsed_seconds(t1,t0);</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> t_taylor+=t;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> }</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> t_taylor/=r;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> printf(<span class="stringliteral">"%.2f\t%d\t%.2e\t"</span>,((<span class="keywordtype">double</span>)n_taylor)/N,m_taylor,t_taylor);</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">if</span>(test_accuracy)</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> printf(<span class="stringliteral">"%.2e\n"</span>,X(error_l_infty_complex)(swapndft, np.<a class="code" href="structnfft__plan.html#afa27a166f809acf70ae27e5e6f28daa5" title="Vector of samples, size is M_total * sizeof( fftw_complex )">f</a>, np.<a class="code" href="structnfft__plan.html#adf33ce87c35b396c50d214d9bdeeefe6" title="Total number of samples.">M_total</a>));</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> printf(<span class="stringliteral">"nan\t\n"</span>);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> fflush(stdout);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">if</span>(test_accuracy)</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(swapndft);</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> nfft_finalize(&np);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <a class="code" href="taylor__nfft_8c.html#a10f336e1a24851643775a0da2f338c65" title="Destroys a transform plan.">taylor_finalize</a>(&tp);</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> }</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> {</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keywordtype">int</span> l,m,trial,N;</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">if</span>(argc<=2)</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> {</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> fprintf(stderr,<span class="stringliteral">"taylor_nfft type first last trials sigma_nfft sigma_taylor.\n"</span>);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> }</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> fprintf(stderr,<span class="stringliteral">"Testing the Nfft & a Taylor expansion based version.\n\n"</span>);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> fprintf(stderr,<span class="stringliteral">"Columns: N, M, t_ndft, sigma_nfft, m_nfft, t_nfft, e_nfft"</span>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> fprintf(stderr,<span class="stringliteral">", sigma_taylor, m_taylor, t_taylor, e_taylor\n"</span>);</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment">/* time vs. N=M */</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">if</span>(atoi(argv[1])==0)</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> {</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> fprintf(stderr,<span class="stringliteral">"Fixed target accuracy, timings.\n\n"</span>);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keywordflow">for</span>(l=atoi(argv[2]); l<=atoi(argv[3]); l++)</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keywordflow">for</span>(trial=0; trial<atoi(argv[4]); trial++)</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">if</span>(l<=10)</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <a class="code" href="taylor__nfft_8c.html#a7ef2d41455ffa60a2f001c4981d4cf97" title="Compares NDFT, NFFT, and Taylor-NFFT.">taylor_time_accuracy</a>((1U<< l), (1U<< l), (<span class="keywordtype">int</span>)(atof(argv[5])*</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> (1U<< l)), 6, (<span class="keywordtype">int</span>)(atof(argv[6])*(1U<< l)),</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> 6, 1);</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <a class="code" href="taylor__nfft_8c.html#a7ef2d41455ffa60a2f001c4981d4cf97" title="Compares NDFT, NFFT, and Taylor-NFFT.">taylor_time_accuracy</a>((1U<< l), (1U<< l), (<span class="keywordtype">int</span>)(atof(argv[5])*</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> (1U<< l)), 6, (<span class="keywordtype">int</span>)(atof(argv[6])*(1U<< l)),</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> 6, 0);</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> }</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="comment">/* error vs. m */</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keywordflow">if</span>(atoi(argv[1])==1)</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> {</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> N=atoi(argv[7]);</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> fprintf(stderr,<span class="stringliteral">"Fixed N=M=%d, error vs. m.\n\n"</span>,N);</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">for</span>(m=atoi(argv[2]); m<=atoi(argv[3]); m++)</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">for</span>(trial=0; trial<atoi(argv[4]); trial++)</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <a class="code" href="taylor__nfft_8c.html#a7ef2d41455ffa60a2f001c4981d4cf97" title="Compares NDFT, NFFT, and Taylor-NFFT.">taylor_time_accuracy</a>(N,N, (<span class="keywordtype">int</span>)(atof(argv[5])*N), m,</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> (<span class="keywordtype">int</span>)(atof(argv[6])*N), m, 1);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> }</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/ticks_8h_source.html b/doc/api/html/ticks_8h_source.html
new file mode 100644
index 0000000..2d623e4
--- /dev/null
+++ b/doc/api/html/ticks_8h_source.html
@@ -0,0 +1,84 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - ticks.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ticks.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: infft.h 3471 2010-04-08 21:43:41Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#ifndef TICKS_H_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"></span><span class="preprocessor">#define TICKS_H_</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "cycle.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#define TICKS_PER_SECOND 3109267833.0</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#ifndef HAVE_TICK_COUNTER</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"></span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> ticks;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"> #define getticks() 0U;</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"></span> INLINE_ELAPSED(__inline__)</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#endif </span><span class="comment">/* TICKS_H_ */</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/util_8c_source.html b/doc/api/html/util_8c_source.html
new file mode 100644
index 0000000..be8272a
--- /dev/null
+++ b/doc/api/html/util_8c_source.html
@@ -0,0 +1,1387 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - util.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_23ec12649285f9fabf3a6b7380226c28.html">util</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">util.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: util.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <sys/time.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "cstripack.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#ifdef HAVE_COMPLEX_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"></span><span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor"></span><span class="preprocessor">#include <omp.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="nfft3_8h.html">nfft3.h</a>"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">double</span> nfft_elapsed_seconds(ticks t1, ticks t0)</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> {</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> UNUSED(t1);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> UNUSED(t0);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">return</span> elapsed(t1,t0) / TICKS_PER_SECOND;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> }</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116"> 55</a></span> <span class="keywordtype">int</span> <a class="code" href="group__nfftutil.html#ga2752ca372ee2622f173a706e86e2b116" title="Computes integer .">nfft_prod_int</a>(<span class="keywordtype">int</span> *vec, <span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> {</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">int</span> t, prod;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> prod=1;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">for</span>(t=0; t<d; t++)</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> prod *= vec[t];</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">return</span> prod;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40"> 68</a></span> <span class="keywordtype">int</span> <a class="code" href="group__nfftutil.html#ga8adc6bf59ec10f16243030ee00ad4a40" title="Computes integer .">nfst_prod_minus_a_int</a>(<span class="keywordtype">int</span> *vec, <span class="keywordtype">int</span> a, <span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">int</span> t, prod;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> prod=1;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">for</span>(t=0; t<d; t++)</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> prod *= vec[t]-a;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">return</span> prod;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> }</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="code" href="group__nfftutil.html#gad979f626cc8397e26d1bd78a7ba342cd"> 81</a></span> <span class="keywordtype">int</span> <a class="code" href="group__nfftutil.html#gad979f626cc8397e26d1bd78a7ba342cd" title="Computes .">nfft_plain_loop</a>(<span class="keywordtype">int</span> *idx,<span class="keywordtype">int</span> *N,<span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> {</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">int</span> t,sum;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> sum = idx[0];</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">for</span> (t = 1; t < d; t++)</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> sum = sum * N[t] + idx[t];</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"><a class="code" href="group__nfftutil.html#gad7bad7074a695341742f57526f8695eb"> 94</a></span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#gad7bad7074a695341742f57526f8695eb" title="Computes double .">nfft_prod_real</a>(<span class="keywordtype">double</span> *vec,<span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> {</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">int</span> t;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">double</span> prod;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> prod=1.0;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">for</span>(t=0; t<d; t++)</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> prod*=vec[t];</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">return</span> prod;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keyword">static</span> <span class="keywordtype">void</span> bspline_help(<span class="keywordtype">int</span> k, <span class="keywordtype">double</span> x, <span class="keywordtype">double</span> *scratch, <span class="keywordtype">int</span> j, <span class="keywordtype">int</span> ug,</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">int</span> og, <span class="keywordtype">int</span> r)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> {</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">int</span> i; <span class="comment">/* row index of the de Boor scheme */</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">int</span> idx; <span class="comment">/* index in scratch */</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">double</span> a; <span class="comment">/* alpha of the de Boor scheme */</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment">/* computation of one column */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">for</span> (i = og + r - k + 1, idx = og; idx >= ug; i--, idx--)</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> {</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> a = ((R)(x - i)) / ((R)(k - j));</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> scratch[idx] = (1 - a) * scratch[idx-1] + a * scratch[idx];</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> } <span class="comment">/* bspline_help */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga2fd48f1f700153c050d27691c4b2a6cc"> 124</a></span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga2fd48f1f700153c050d27691c4b2a6cc" title="Computes the B-spline , scratch is used for de Boor's scheme.">nfft_bspline</a>(<span class="keywordtype">int</span> k, <span class="keywordtype">double</span> x, <span class="keywordtype">double</span [...]
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> {</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keywordtype">double</span> result_value; </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">int</span> r; </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">int</span> g1,g2; </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordtype">int</span> j,idx,ug,og; </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="keywordtype">double</span> a; </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> result_value=0.0;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span>(0<x && x<k)</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> {</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment">/* using symmetry around k/2 */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">if</span>((k-x)<x) x=k-x;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> r=(int)(ceil(x)-1.0);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">for</span>(idx=0; idx<k; idx++)</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> scratch[idx]=0.0;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> scratch[k-r-1]=1.0;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment">/* bounds of the algorithm */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> g1 = r;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> g2 = k - 1 - r;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> ug = g2;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="comment">/* g1<=g2 holds */</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">for</span>(j=1, og=g2+1; j<=g1; j++, og++)</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> {</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> a = (x - r + k - 1 - og)/(k - j);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> scratch[og] = (1 - a) * scratch[og-1];</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> bspline_help(k,x,scratch,j,ug+1,og-1,r);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> a = (x - r + k - 1 - ug)/(k - j);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> scratch[ug] = a * scratch[ug];</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> }</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">for</span>(og-- ; j<=g2; j++)</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> {</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> bspline_help(k,x,scratch,j,ug+1,og,r);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> a = (x - r + k - 1 - ug)/(k - j);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> scratch[ug] = a * scratch[ug];</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">for</span>( ; j<k; j++)</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> {</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> ug++;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> bspline_help(k,x,scratch,j,ug,og,r);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> }</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> result_value = scratch[k-1];</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> }</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">return</span>(result_value);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> } <span class="comment">/* bspline */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga135eb6c5a8ae1a84ea64c9099caac004" title="Computes the inner/dot product .">nfft_dot_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> {</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordtype">double</span> dot;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">for</span>(k=0,dot=0; k<n; k++)</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> dot+=conj(x[k])*x[k];</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">return</span> dot;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5"> 191</a></span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga02357d8d67d2591573089e49958855a5" title="Computes the inner/dot product .">nfft_dot_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> {</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="keywordtype">double</span> dot;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">for</span>(k=0,dot=0; k<n; k++)</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> dot+=x[k]*x[k];</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">return</span> dot;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> }</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#gac712b4a91652e20dc53719ce6fc1f9e1" title="Computes the weighted inner/dot product .">nfft_dot_w_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> *w, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> {</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordtype">double</span> dot;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">for</span>(k=0,dot=0.0; k<n; k++)</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> dot+=w[k]*conj(x[k])*x[k];</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">return</span> dot;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39"> 218</a></span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga69cceec47679c500072d3d60c6181b39" title="Computes the weighted inner/dot product .">nfft_dot_w_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *w, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> {</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keywordtype">double</span> dot;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">for</span>(k=0,dot=0.0; k<n; k++)</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> dot+=w[k]*x[k]*x[k];</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordflow">return</span> dot;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> }</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga68268fc9bfad5a7e7383098ac1715674" title="Computes the weighted inner/dot product .">nfft_dot_w_w2_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> *w2, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> {</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keywordtype">double</span> dot;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">for</span>(k=0,dot=0.0; k<n; k++)</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> dot+=w[k]*w2[k]*w2[k]*conj(x[k])*x[k];</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">return</span> dot;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> }</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keywordtype">double</span> <a class="code" href="group__nfftutil.html#ga9b59288597d159357fe86395e635a075" title="Computes the weighted inner/dot product .">nfft_dot_w2_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> *w2, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> {</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="keywordtype">double</span> dot;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">for</span>(k=0,dot=0.0; k<n; k++)</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> dot+=w2[k]*w2[k]*conj(x[k])*x[k];</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">return</span> dot;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> }</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga21fd5b4d5f6113538320188306611133" title="Copies .">nfft_cp_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> {</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> x[k]=y[k];</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> }</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"><a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2"> 270</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gab220a37bd6e58be7413507b17ca3bfe2" title="Copies .">nfft_cp_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> {</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> x[k]=y[k];</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> }</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga33409df91e7ad5e1dca3beaa63e0ef25" title="Copies .">nfft_cp_a_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> {</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> x[k]=a*y[k];</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> }</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga41f20c605269e701b3305e49010e0759"> 290</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga41f20c605269e701b3305e49010e0759" title="Copies .">nfft_cp_a_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> {</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> x[k]=a*y[k];</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> }</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga630054cb816785d766959a867965f619" title="Copies .">nfft_cp_w_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> {</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> x[k]=w[k]*y[k];</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> }</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099"> 311</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga27a75e17d21c508cacf81276ca531099" title="Copies .">nfft_cp_w_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> {</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> x[k]=w[k]*y[k];</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> }</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga676395f56bbf1c444d074a21753de8d5" title="Updates .">nfft_upd_axpy_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> {</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> x[k]=a*x[k]+y[k];</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> }</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3"> 333</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga7610a506bc5ab40a6e1d7937b36921a3" title="Updates .">nfft_upd_axpy_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> {</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> x[k]=a*x[k]+y[k];</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> }</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga1fde8da1b69413398fca44e2ef2fbdb4" title="Updates .">nfft_upd_xpay_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> {</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> x[k]+=a*y[k];</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> }</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064"> 354</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga2389c3b56a484a3f165b7d9203700064" title="Updates .">nfft_upd_xpay_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> {</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> x[k]+=a*y[k];</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga903a4b3ed369dcfe67b9379a238ed23d" title="Updates .">nfft_upd_axpby_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">double</span> b, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> {</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> x[k]=a*x[k]+b*y[k];</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> }</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga75e403e92875b0b919a555f8cede0e8d"> 376</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga75e403e92875b0b919a555f8cede0e8d" title="Updates .">nfft_upd_axpby_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *y, <span class="keywordtype">double</span> [...]
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> {</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> x[k]=a*x[k]+b*y[k];</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> }</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gad8e10773e59818c88a8ea2cb560b936e" title="Updates .">nfft_upd_xpawy_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> {</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> x[k]+=a*w[k]*y[k];</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> }</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno"><a class="code" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0"> 397</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gac5db5bbc58f772844cf0caf5fd9fafb0" title="Updates .">nfft_upd_xpawy_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> [...]
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> {</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> x[k]+=a*w[k]*y[k];</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> }</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga693919963b51cf396311b15660e04cd8" title="Updates .">nfft_upd_axpwy_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> _Complex *y, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> {</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> x[k]=a*x[k]+w[k]*y[k];</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> }</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno"><a class="code" href="group__nfftutil.html#gaf6777c4b8aa9f575f1600c51e8ae343a"> 419</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gaf6777c4b8aa9f575f1600c51e8ae343a" title="Updates .">nfft_upd_axpwy_double</a>(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> a, <span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> [...]
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> {</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keywordflow">for</span>(k=0;k<n;k++)</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> x[k]=a*x[k]+w[k]*y[k];</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> }</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gaa388b5ec231e02ac45e37b60fd62e770" title="Swaps each half over N[d]/2.">nfft_fftshift_complex</a>(<span class="keywordtype">double</span> _Complex *x, <span class="keywordtype">int</span> d, <span class="keywordtype">int</span>* N)</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> {</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keywordtype">int</span> d_pre, d_act, d_post;</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keywordtype">int</span> N_pre, N_act, N_post;</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keywordtype">int</span> k_pre, k_act, k_post;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="keywordtype">int</span> k,k_swap;</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="keywordtype">double</span> _Complex x_swap;</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keywordflow">for</span>(d_act=0;d_act<d;d_act++)</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> {</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">for</span>(d_pre=0, N_pre=1;d_pre<d_act;d_pre++)</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> N_pre*=N[d_pre];</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> N_act=N[d_act];</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keywordflow">for</span>(d_post=d_act+1, N_post=1;d_post<d;d_post++)</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> N_post*=N[d_post];</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="keywordflow">for</span>(k_pre=0;k_pre<N_pre;k_pre++)</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">for</span>(k_act=0;k_act<N_act/2;k_act++)</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="keywordflow">for</span>(k_post=0;k_post<N_post;k_post++)</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> {</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> k=(k_pre*N_act+k_act)*N_post+k_post;</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> k_swap=(k_pre*N_act+k_act+N_act/2)*N_post+k_post;</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> x_swap=x[k];</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> x[k]=x[k_swap];</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> x[k_swap]=x_swap;</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> }</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> }</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> }</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"><a class="code" href="group__nfftutil.html#gaa8e0581d802c4b7bb153682a4c156409"> 463</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gaa8e0581d802c4b7bb153682a4c156409" title="Prints a vector of integer numbers.">nfft_vpr_int</a>(<span class="keywordtype">int</span> *x, <span class="keywordtype">int</span> n, <span class="keywordtype">char</span> *text)</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> {</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="keywordflow">if</span>(text!=NULL)</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> {</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> printf (<span class="stringliteral">"\n %s, adr=%p\n"</span>, text, (<span class="keywordtype">void</span>*)x);</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="keywordflow">for</span> (k=0; k<n; k++)</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> {</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="keywordflow">if</span> (k%8==0)</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> printf(<span class="stringliteral">"%6d.\t"</span>, k);</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> printf(<span class="stringliteral">"%d,"</span>, x[k]);</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="keywordflow">if</span> (k%8==7)</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> }</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="keywordflow">if</span> (n%8!=0)</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> }</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="keywordflow">for</span> (k=0; k<n; k++)</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> printf(<span class="stringliteral">"%d,\n"</span>, x[k]);</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> fflush(stdout);</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> }</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="keywordtype">void</span> X(vpr_double)(R *x, <span class="keyword">const</span> <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">char</span> *text)</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> {</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keywordflow">if</span> (x == NULL)</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> {</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> printf(<span class="stringliteral">"null pointer\n"</span>);</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> fflush(stdout);</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> exit(-1);</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> }</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="keywordflow">if</span> (text != NULL)</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> {</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> printf (<span class="stringliteral">"\n %s, adr=%p\n"</span>, text, (<span class="keywordtype">void</span>*)x);</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> {</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keywordflow">if</span> (k%8 == 0)</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> printf(<span class="stringliteral">"%6d.\t"</span>, k);</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> printf(<span class="stringliteral">"%+.1"</span> FE <span class="stringliteral">","</span>, x[k]);</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="keywordflow">if</span> (k%8 == 7)</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> }</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="keywordflow">if</span> (n%8 != 0)</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> }</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> printf(<span class="stringliteral">"%+"</span> FE <span class="stringliteral">",\n"</span>, x[k]);</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> fflush(stdout);</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> }</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="keywordtype">void</span> X(vpr_complex)(C *x, <span class="keyword">const</span> <span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">char</span> *text)</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> {</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keywordflow">if</span>(text != NULL)</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> {</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> printf(<span class="stringliteral">"\n %s, adr=%p\n"</span>, text, (<span class="keywordtype">void</span>*)x);</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> {</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keywordflow">if</span> (k%4 == 0)</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> printf(<span class="stringliteral">"%6d.\t"</span>, k);</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> printf(<span class="stringliteral">"%+.1"</span> FE <span class="stringliteral">"%+.1"</span> FE <span class="stringliteral">"i,"</span>, CREAL(x[k]), CIMAG(x[k]));</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="keywordflow">if</span> (k%4==3)</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> }</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="keywordflow">if</span> (n%4!=0)</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> printf(<span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> }</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> printf(<span class="stringliteral">"%+"</span> FE <span class="stringliteral">"%+"</span> FE <span class="stringliteral">"i,\n"</span>, CREAL(x[k]), CIMAG(x[k]));</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> fflush(stdout);</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> }</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="keywordtype">void</span> X(vrand_unit_complex)(C *x, <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> {</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> x[k] = nfft_drand48() + II*nfft_drand48();</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> }</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="keywordtype">void</span> X(vrand_shifted_unit_double)(R *x, <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> {</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="keywordflow">for</span> (k = 0; k < n; k++)</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> x[k] = nfft_drand48() - K(0.5);</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> }</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="keywordtype">void</span> X(voronoi_weights_1d)(R *w, R *x, <span class="keyword">const</span> <span class="keywordtype">int</span> M)</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> {</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> </div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> w[0] = (x[1]-x[0])/K(2.0);</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="keywordflow">for</span>(j = 1; j < M-1; j++)</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> w[j] = (x[j+1]-x[j-1])/K(2.0);</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> w[M-1] = (x[M-1]-x[M-2])/K(2.0);</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> }</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> </div>
+<div class="line"><a name="l00581"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994"> 581</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga26a4ed487a23e99e01f111113be9f994" title="Computes voronoi weights for nodes on the sphere S^2.">nfft_voronoi_weights_S2</a>(<span class="keywordtype">double</span> *w, <span class="keywordtype">double</span> *xi, <span class="keywordtype">int</span [...]
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> {</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="keywordtype">double</span> *x;</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="keywordtype">double</span> *y;</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="keywordtype">double</span> *z;</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="keywordtype">int</span> el;</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="keywordtype">int</span> Mlocal = M;</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="keywordtype">int</span> lnew;</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="keywordtype">int</span> ier;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="keywordtype">int</span> *list;</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="keywordtype">int</span> *lptr;</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="keywordtype">int</span> *lend;</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="keywordtype">int</span> *near;</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="keywordtype">int</span> *next;</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="keywordtype">double</span> *dist;</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="keywordtype">int</span> *ltri;</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keywordtype">int</span> *listc;</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keywordtype">int</span> nb;</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="keywordtype">double</span> *xc;</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="keywordtype">double</span> *yc;</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="keywordtype">double</span> *zc;</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="keywordtype">double</span> *rc;</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="keywordtype">double</span> *vr;</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="keywordtype">int</span> lp;</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="keywordtype">int</span> lpl;</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="keywordtype">int</span> kv;</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="keywordtype">double</span> a;</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> </div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="comment">/* Allocate memory for auxilliary arrays. */</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> x = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> y = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> z = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(M * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> </div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> list = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((6*M-12+1)*<span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> lptr = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((6*M-12+1)*<span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> lend = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((M+1)*<span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> near = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((M+1)*<span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> next = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((M+1)*<span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> dist = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((M+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> ltri = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((6*M+1)*<span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> listc = (<span class="keywordtype">int</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((6*M-12+1)*<span class="keyword">sizeof</span>(int));</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> xc = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*M-4+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> yc = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*M-4+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> zc = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*M-4+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> rc = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>((2*M-4+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> vr = (<span class="keywordtype">double</span>*)<a class="code" href="nfft3_8h.html#aafe6167438c5de4d3d4c509f66a6694e">nfft_malloc</a>(3*(2*M-4+1)*<span class="keyword">sizeof</span>(double));</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="comment">/* Convert from spherical Coordinates in [0,1/2]x[-1/2,1/2) to Cartesian</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="comment"> * coordinates. */</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> {</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> x[k] = sin(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*xi[2*k+1])*cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*xi[2*k]);</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> y[k] = sin(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*xi[2*k+1])*sin(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*xi[2*k]);</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> z[k] = cos(2.0*<a class="code" href="group__nfftutil.html#ga598a3330b3c21701223ee0ca14316eca" title="Formerly known to be an irrational number.">PI</a>*xi[2*k+1]);</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> }</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="comment">/* Generate Delaunay triangulation. */</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> trmesh_(&Mlocal, x, y, z, list, lptr, lend, &lnew, near, next, dist, &ier);</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="comment">/* Check error flag. */</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">if</span> (ier == 0)</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> {</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="comment">/* Get Voronoi vertices. */</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> crlist_(&Mlocal, &Mlocal, x, y, z, list, lend, lptr, &lnew, ltri, listc, &nb, xc,</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> yc, zc, rc, &ier);</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> </div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="keywordflow">if</span> (ier == 0)</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> {</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="comment">/* Calcuate sizes of Voronoi regions. */</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="keywordflow">for</span> (k = 0; k < M; k++)</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> {</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="comment">/* Get last neighbour index. */</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> lpl = lend[k];</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> lp = lpl;</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> </div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> j = 0;</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> vr[3*j] = x[k];</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> vr[3*j+1] = y[k];</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> vr[3*j+2] = z[k];</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> </div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="keywordflow">do</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> {</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> j++;</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="comment">/* Get next neighbour. */</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> lp = lptr[lp-1];</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> kv = listc[lp-1];</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> vr[3*j] = xc[kv-1];</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> vr[3*j+1] = yc[kv-1];</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> vr[3*j+2] = zc[kv-1];</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="comment">/* fprintf(stderr, "lp = %ld\t", lp); */</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> } <span class="keywordflow">while</span> (lp != lpl);</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> a = 0;</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="keywordflow">for</span> (el = 0; el < j; el++)</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> {</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> a += areas_(vr, &vr[3*(el+1)],&vr[3*(((el+1)%j)+1)]);</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> }</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> </div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> w[k] = a;</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> }</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> }</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> }</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="comment">/* Deallocate memory. */</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(x);</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(y);</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(z);</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(list);</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(lptr);</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(lend);</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(near);</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(next);</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(dist);</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(ltri);</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(listc);</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(xc);</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(yc);</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(zc);</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(rc);</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <a class="code" href="nfft3_8h.html#ab8a0db03dda1317a8a3d922e0e4e8aaa">nfft_free</a>(vr);</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> }</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> </div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> R X(modified_fejer)(<span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> kk)</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> {</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="keywordflow">return</span> (K(2.0)/((R)(N*N))*(K(1.0)-FABS(K(2.0)*kk+K(1.0))/((R)N)));</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> }</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> </div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> R X(modified_jackson2)(<span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> kk)</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> {</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="keywordtype">int</span> kj;</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="keyword">const</span> R n=(N/K(2.0)+K(1.0))/K(2.0);</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> R result, k;</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="keywordflow">for</span> (result = K(0.0), kj = kk; kj <= kk+1; kj++)</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> {</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> k = ABS(kj);</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="keywordflow">if</span>(k/n < K(1.0))</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> result += K(1.0) - (K(3.0)*k + K(6.0)*n*POW(k,K(2.0))</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> - K(3.0)*POW(k,K(3.0)))/(K(2.0)*n*(K(2.0)*POW(n,K(2.0))+K(1.0)));</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> result+= (K(2.0)*n-k)*(POW(2*n-k,K(2.0))-K(1.0))/(K(2.0)</div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> *n*(K(2.0)*POW(n,K(2.0))+K(1.0)));</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> }</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> }</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> </div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> R X(modified_jackson4)(<span class="keyword">const</span> <span class="keywordtype">int</span> N, <span class="keyword">const</span> <span class="keywordtype">int</span> kk)</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> {</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="keywordtype">int</span> kj;</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="keyword">const</span> R n = (N/K(2.0)+K(3.0))/K(4.0), normalisation = (K(2416.0)*POW(n,K(7.0))</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> + K(1120.0)*POW(n,K(5.0)) + K(784.0)*POW(n,K(3.0)) + K(720.0)*n);</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> R result, k;</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> </div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> <span class="keywordflow">for</span> (result = K(0.0), kj = kk; kj <= kk + 1; kj++)</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> {</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> k = ABS(kj);</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="keywordflow">if</span> (k/n < K(1.0))</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> result += K(1.0) - (K(1260.0)*k + (K(1680.0)*POW(n, K(5.0))</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> + K(2240.0)*POW(n, K(3.0)) + K(2940.0)*n)*POW(k, K(2.0))</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> - K(1715.0)*POW(k, K(3.0)) - (K(560.0)*POW(n, K(3.0))</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> + K(1400.0)*n)*POW(k, K(4.0)) + K(490.0)*POW(k, K(5.0))</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> + K(140.0)*n*POW(k, K(6.0)) - K(35.0)*POW(k,K(7.0)))/normalisation;</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="keywordflow">if</span> ((K(1.0) <= k/n) && (k/n < K(2.0)))</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> result += ((K(2472.0)*POW(n, K(7.0)) + K(336.0)*POW(n, K(5.0))</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> + K(3528.0)*POW(n, K(3.0)) - K(1296.0)*n) - (K(392.0)*POW(n, K(6.0))</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> - K(3920.0)*POW(n, K(4.0)) + K(8232.0)*POW(n, K(2.0)) - K(756.0))*k</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> - (K(504.0)*POW(n, K(5.0)) + K(10080.0)*POW(n, K(3.0))</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> - K(5292.0)*n)*POW(k, K(2.0)) - (K(1960.0)*POW(n, K(4.0))</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> - K(7840.0)*POW(n, K(2.0)) + K(1029.0))*POW(k, K(3.0))</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> + (K(2520.0)*POW(n, K(3.0)) - K(2520.0)*n) * POW(k, K(4.0))</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> - (K(1176.0)*POW(n, K(2.0)) - K(294.0)) * POW(k, K(5.0))</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> + K(252.0)*n*POW(k, K(6.0)) - K(21.0)*POW(k, K(7.0)))/normalisation;</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> </div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="keywordflow">if</span> ((K(2.0) <= k/n) && (k/n < K(3.0)))</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> result += (-(K(1112.0)*POW(n, K(7.0)) - K(12880.0)*POW(n, K(5.0))</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> + K(7448.0)*POW(n, K(3.0)) - K(720.0)*n) + (K(12152.0)*POW(n, K(6.0))</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> - K(27440.0)*POW(n, K(4.0)) + K(8232.0)*POW(n, K(2.0)) - K(252.0))*k</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> - (K(19320.0)*POW(n, K(5.0)) - K(21280.0)*POW(n, K(3.0))</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> + K(2940.0)*n)*POW(k, K(2.0)) + (K(13720.0)*POW(n, K(4.0))</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> - K(7840.0)*POW(n, K(2.0)) + K(343.0))*POW(k, K(3.0))</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> - (K(5320.0)*POW(n, K(3.0)) - K(1400.0)*n)*POW(k, K(4.0))</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> + (K(1176.0)*POW(n, K(2.0)) - K(98.0))*POW(k, K(5.0))</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> - K(140.0)*n*POW(k, K(6.0)) + K(7.0) * POW(k, K(7.0)))/normalisation;</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> </div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <span class="keywordflow">if</span> ((K(3.0) <= k/n) && (k/n < K(4.0)))</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> result += ((4*n-k)*(POW(4*n-k, K(2.0)) - K(1.0))*(POW(4*n-k, K(2.0))</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> - K(4.0))*(POW(4*n-k, K(2.0)) - K(9.0)))/normalisation;</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> }</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> </div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> }</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> </div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> R X(modified_sobolev)(<span class="keyword">const</span> R mu, <span class="keyword">const</span> <span class="keywordtype">int</span> kk)</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> {</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> R result;</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="keywordtype">int</span> kj, k;</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> </div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="keywordflow">for</span> (result = K(0.0), kj = kk; kj <= kk+1; kj++)</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> {</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> k = ABS(kj);</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> result += K(1.0);</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> result += POW((<span class="keywordtype">double</span>)k,-K(2.0)*mu);</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> }</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> </div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> }</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> </div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> R X(modified_multiquadric)(<span class="keyword">const</span> R mu, <span class="keyword">const</span> R c, <span class="keyword">const</span> <span class="keywordtype">int</span> kk)</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> {</div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> R result;</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="keywordtype">int</span> kj, k;</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> </div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">for</span> (result = K(0.0), kj = kk; kj <= kk+1; kj++)</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> {</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> k = ABS(kj);</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> result += POW((<span class="keywordtype">double</span>)(k*k + c*c), -mu);</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> }</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> </div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> }</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> </div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> scaled_modified_bessel_i_series(<span class="keyword">const</span> R x, <span class="keyword">const</span> R <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated [...]
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nb, <span class="keyword">const</span> <span class="keywordtype">int</span> ize, R *b)</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> {</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="keyword">const</span> R enmten = K(4.0)*nfft_float_property(NFFT_R_MIN);</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> R tempa = K(1.0), empal = K(1.0) + <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>, halfx = K(0.0), tempb = K(0.0);</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="keywordtype">int</span> n, ncalc = nb;</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> </div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="keywordflow">if</span> (enmten < x)</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> halfx = x/K(2.0);</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> </div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> <span class="keywordflow">if</span> (alpha != K(0.0))</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> tempa = POW(halfx, alpha)/TGAMMA(empal);</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> </div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> <span class="keywordflow">if</span> (ize == 2)</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> tempa *= EXP(-x);</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> </div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="keywordflow">if</span> (K(1.0) < x + K(1.0))</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> tempb = halfx*halfx;</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> b[0] = tempa + tempa*tempb/empal;</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> </div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> <span class="keywordflow">if</span> (x != K(0.0) && b[0] == K(0.0))</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> ncalc = 0;</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> </div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="keywordflow">if</span> (nb == 1)</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> <span class="keywordflow">return</span> ncalc;</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> </div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> <span class="keywordflow">if</span> (K(0.0) < x)</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> {</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> R tempc = halfx, tover = (enmten + enmten)/x;</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> </div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="keywordflow">if</span> (tempb != K(0.0))</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> tover = enmten/tempb;</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> </div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="keywordflow">for</span> (n = 1; n < nb; n++)</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> {</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> tempa /= empal;</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> empal += K(1.0);</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> tempa *= tempc;</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> </div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> <span class="keywordflow">if</span> (tempa <= tover*empal)</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> tempa = K(0.0);</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> </div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> b[n] = tempa + tempa*tempb/empal;</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="keywordflow">if</span> (b[n] == K(0.0) && n < ncalc)</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> ncalc = n;</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> }</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> }</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <span class="keywordflow">for</span> (n = 1; n < nb; n++)</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> b[n] = K(0.0);</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> </div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="keywordflow">return</span> ncalc;</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> }</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> scaled_modified_bessel_i_normalize(<span class="keyword">const</span> R x,</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="keyword">const</span> R alpha, <span class="keyword">const</span> <span class="keywordtype">int</span> nb, <span class="keyword">const</span> <span class="keywordtype">int</span> ize, R *b, <span class="keyword">const</span> R sum_)</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> {</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> <span class="keyword">const</span> R enmten = K(4.0)*nfft_float_property(NFFT_R_MIN);</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> R sum = sum_, tempa;</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="keywordtype">int</span> n;</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> </div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> <span class="comment">/* Normalize, i.e., divide all b[n] by sum */</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="keywordflow">if</span> (alpha != K(0.0))</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> sum = sum * TGAMMA(K(1.0) + alpha) * POW(x/K(2.0), -alpha);</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> </div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> <span class="keywordflow">if</span> (ize == 1)</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> sum *= EXP(-x);</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> </div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> tempa = enmten;</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="keywordflow">if</span> (K(1.0) < sum)</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> tempa *= sum;</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> </div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="keywordflow">for</span> (n = 1; n <= nb; n++)</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> {</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="keywordflow">if</span> (b[n-1] < tempa)</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> b[n-1] = K(0.0);</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> b[n-1] /= sum;</div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> }</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> }</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> </div>
+<div class="line"><a name="l00950"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga2decee6fe50d50797a82737ba82cf97a"> 950</a></span> <span class="keywordtype">int</span> <a class="code" href="group__nfftutil.html#ga2decee6fe50d50797a82737ba82cf97a" title="Calculates the modified bessel function , possibly scaled by , for real non-negative with ...">nfft_smbi</a>(<span class="keyword">const</span> R x, <span class="keyword">const</span> R alpha, <span class="k [...]
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> {</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> <span class="comment">/* machine dependent parameters */</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="comment">/* NSIG - DECIMAL SIGNIFICANCE DESIRED. SHOULD BE SET TO */</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> <span class="comment">/* IFIX(ALOG10(2)*NBIT+1), WHERE NBIT IS THE NUMBER OF */</span></div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="comment">/* BITS IN THE MANTISSA OF A WORKING PRECISION VARIABLE. */</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> <span class="comment">/* SETTING NSIG LOWER WILL RESULT IN DECREASED ACCURACY */</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> <span class="comment">/* WHILE SETTING NSIG HIGHER WILL INCREASE CPU TIME */</span></div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="comment">/* WITHOUT INCREASING ACCURACY. THE TRUNCATION ERROR */</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> <span class="comment">/* IS LIMITED TO A RELATIVE ERROR OF T=.5*10**(-NSIG). */</span></div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="comment">/* ENTEN - 10.0 ** K, WHERE K IS THE LARGEST int SUCH THAT */</span></div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> <span class="comment">/* ENTEN IS MACHINE-REPRESENTABLE IN WORKING PRECISION. */</span></div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> <span class="comment">/* ENSIG - 10.0 ** NSIG. */</span></div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> <span class="comment">/* RTNSIG - 10.0 ** (-K) FOR THE SMALLEST int K SUCH THAT */</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> <span class="comment">/* K .GE. NSIG/4. */</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> <span class="comment">/* ENMTEN - THE SMALLEST ABS(X) SUCH THAT X/4 DOES NOT UNDERFLOW. */</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="comment">/* XLARGE - UPPER LIMIT ON THE MAGNITUDE OF X WHEN IZE=2. BEAR */</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> <span class="comment">/* IN MIND THAT IF ABS(X)=N, THEN AT LEAST N ITERATIONS */</span></div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> <span class="comment">/* OF THE BACKWARD RECURSION WILL BE EXECUTED. */</span></div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <span class="comment">/* EXPARG - LARGEST WORKING PRECISION ARGUMENT THAT THE LIBRARY */</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> <span class="comment">/* EXP ROUTINE CAN HANDLE AND UPPER LIMIT ON THE */</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> <span class="comment">/* MAGNITUDE OF X WHEN IZE=1. */</span></div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> <span class="keyword">const</span> <span class="keywordtype">int</span> nsig = MANT_DIG + 2;</div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> <span class="keyword">const</span> R enten = nfft_float_property(NFFT_R_MAX);</div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="keyword">const</span> R ensig = POW(K(10.0),(R)nsig);</div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="keyword">const</span> R rtnsig = POW(K(10.0),-CEIL((R)nsig/K(4.0)));</div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="keyword">const</span> R xlarge = K(1E4);</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> <span class="keyword">const</span> R exparg = FLOOR(LOG(POW(K(R_RADIX),K(DBL_MAX_EXP-1))));</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> </div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="comment">/* System generated locals */</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="keywordtype">int</span> l, n, nend, magx, nbmx, ncalc, nstart;</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> R p, em, en, sum, pold, test, empal, tempa, tempb, tempc, psave, plast, tover,</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> emp2al, psavel;</div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> </div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> magx = LRINT(FLOOR(x));</div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> </div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="comment">/* return if x, nb, or ize out of range */</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="keywordflow">if</span> ( nb <= 0 || x < K(0.0) || alpha < K(0.0) || K(1.0) <= alpha</div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> || ((ize != 1 || exparg < x) && (ize != 2 || xlarge < x)))</div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> <span class="keywordflow">return</span> (MIN(nb,0) - 1);</div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> </div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> <span class="comment">/* 2-term ascending series for small x */</span></div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="keywordflow">if</span> (x < rtnsig)</div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> <span class="keywordflow">return</span> scaled_modified_bessel_i_series(x,alpha,nb,ize,b);</div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> </div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> ncalc = nb;</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> <span class="comment">/* forward sweep, Olver's p-sequence */</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> </div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> nbmx = nb - magx;</div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> n = magx + 1;</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> </div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> en = (R) (n+n) + (alpha+<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>);</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> plast = K(1.0);</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> p = en/x;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> </div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="comment">/* significance test */</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> test = ensig + ensig;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> </div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="keywordflow">if</span> ((5*nsig) < (magx << 1))</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> test = SQRT(test*p);</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> test /= POW(K(1.585),(R)magx);</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="keywordflow">if</span> (3 <= nbmx)</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> {</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="comment">/* calculate p-sequence until n = nb-1 */</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> tover = enten/ensig;</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> nstart = magx+2;</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> nend = nb - 1;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> </div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> <span class="keywordflow">for</span> (n = nstart; n <= nend; n++)</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> {</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> en += K(2.0);</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> pold = plast;</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> plast = p;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> p = en*plast/x + pold;</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> <span class="keywordflow">if</span> (p > tover)</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> {</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> <span class="comment">/* divide p-sequence by tover to avoid overflow. Calculate p-sequence</span></div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="comment"> * until 1 <= |p| */</span></div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> tover = enten;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> p /= tover;</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> plast /= tover;</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> psave = p;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> psavel = plast;</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> nstart = n + 1;</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="keywordflow">do</span></div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> {</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> n++;</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> en += K(2.0);</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> pold = plast;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> plast = p;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> p = en*plast/x + pold;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> } <span class="keywordflow">while</span> (p <= K(1.0));</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> </div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> tempb = en/x;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> </div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="comment">/* Backward test. Find ncalc as the largest n such that test is passed. */</span></div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> test = pold*plast*(K(0.5) - K(0.5)/(tempb * tempb))/ensig;</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> p = plast*tover;</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> n--;</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> en -= K(2.0);</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> nend = MIN(nb,n);</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> </div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="keywordflow">for</span> (ncalc = nstart; ncalc <= nend; ncalc++)</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> {</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> pold = psavel;</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> psavel = psave;</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> psave = en*psavel/x + pold;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="keywordflow">if</span> (test < psave * psavel)</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> }</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> </div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> ncalc--;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="keywordflow">goto</span> L80;</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> }</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> }</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> </div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> n = nend;</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> en = (R) (n+n) + (alpha+<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>);</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> </div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="comment">/* special significance test for 2 <= nbmx */</span></div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> test = FMAX(test,SQRT(plast*ensig)*SQRT(p+p));</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> }</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> </div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="comment">/* calculate p-sequence until significance test is passed */</span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="keywordflow">do</span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> {</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> n++;</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> en += K(2.0);</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> pold = plast;</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> plast = p;</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> p = en*plast/x + pold;</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> } <span class="keywordflow">while</span> (p < test);</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> </div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="comment">/* Initialize backward recursion and normalization sum. */</span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> L80:</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> n++;</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> en += K(2.0);</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> tempb = K(0.0);</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> tempa = K(1.0)/p;</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> em = (R)(n-1);</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> empal = em + <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> emp2al = em - K(1.0) + (alpha+<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>);</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> sum = tempa*empal*emp2al/em;</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> nend = n-nb;</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> </div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="keywordflow">if</span> (nend < 0)</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> {</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <span class="comment">/* We have n <= nb. So store b[n] and set higher orders to zero */</span></div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> b[n-1] = tempa;</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> nend = -nend;</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <span class="keywordflow">for</span> (l = 1; l <= nend; ++l)</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> b[n-1 + l] = K(0.0);</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> }</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> {</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="keywordflow">if</span> (nend != 0)</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> {</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="comment">/* recur backward via difference equation, calculating b[n] until n = nb */</span></div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> <span class="keywordflow">for</span> (l = 1; l <= nend; ++l)</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> {</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> n--;</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> en -= K(2.0);</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> tempc = tempb;</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> tempb = tempa;</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> tempa = en*tempb/x + tempc;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> em -= K(1.0);</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> emp2al -= K(1.0);</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> </div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <span class="keywordflow">if</span> (n == 1)</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> </div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> <span class="keywordflow">if</span> (n == 2)</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> emp2al = K(1.0);</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> </div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> empal -= K(1.0);</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> sum = (sum + tempa*empal)*emp2al/em;</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> }</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> }</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> </div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> <span class="comment">/* store b[nb] */</span></div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> b[n-1] = tempa;</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> </div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> <span class="keywordflow">if</span> (nb <= 1)</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> {</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> sum = sum + sum + tempa;</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> <span class="keywordflow">return</span> ncalc;</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> }</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> </div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> <span class="comment">/* calculate and store b[nb-1] */</span></div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> n--;</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> en -= 2.0;</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> b[n-1] = en*tempa/x + tempb;</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> </div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="keywordflow">if</span> (n == 1)</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> {</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> sum = sum + sum + b[0];</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> <span class="keywordflow">return</span> ncalc;</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> }</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> </div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> em -= K(1.0);</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> emp2al -= K(1.0);</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> </div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="keywordflow">if</span> (n == 2)</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> emp2al = K(1.0);</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> </div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> empal -= K(1.0);</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> sum = (sum + b[n-1]*empal)*emp2al/em;</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> }</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> </div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> nend = n - 2;</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> </div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> <span class="keywordflow">if</span> (nend != 0)</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> {</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="comment">/* Calculate and store b[n] until n = 2. */</span></div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="keywordflow">for</span> (l = 1; l <= nend; ++l)</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> {</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> n--;</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> en -= K(2.0);</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> b[n-1] = en*b[n]/x + b[n+1];</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> em -= K(1.0);</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> emp2al -= K(1.0);</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> </div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="keywordflow">if</span> (n == 2)</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> emp2al = K(1.0);</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> </div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> empal -= K(1.0);</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> sum = (sum + b[n-1]*empal)*emp2al/em;</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> }</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> }</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> </div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="comment">/* calculate b[1] */</span></div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> b[0] = K(2.0)*empal*b[1]/x + b[2];</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> sum = sum + sum + b[0];</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> </div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> <span class="keywordflow">return</span> ncalc;</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> }</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> </div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <span class="keywordtype">void</span> nfft_assertion_failed(<span class="keyword">const</span> <span class="keywordtype">char</span> *s, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span> *file)</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> {</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> fflush(stdout);</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> fprintf(stderr, <span class="stringliteral">"nfft: %s:%d: assertion failed: %s\n"</span>, file, line, s);</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="preprocessor">#ifdef HAVE_ABORT</span></div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <span class="preprocessor"></span> <span class="comment">/* Use abort function. */</span></div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> abort();</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="preprocessor"></span> <span class="comment">/* Use exit function. */</span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> exit(EXIT_FAILURE);</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> </div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="comment">/* We declare drand48() and srand48() ourselves, if they are is not declared in</span></div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> <span class="comment"> * math.h (e.g. on SuSE 9.3), grrr. */</span></div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> <span class="preprocessor">#include "config.h"</span></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="preprocessor">#if HAVE_DECL_DRAND48 == 0</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> <span class="preprocessor"></span> <span class="keyword">extern</span> <span class="keywordtype">double</span> drand48(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="preprocessor"></span><span class="preprocessor">#if HAVE_DECL_SRAND48 == 0</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="preprocessor"></span> <span class="keyword">extern</span> <span class="keywordtype">void</span> srand48(<span class="keywordtype">long</span> <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="keywordtype">double</span> nfft_drand48(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> {</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="preprocessor">#ifdef HAVE_DRAND48</span></div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> <span class="preprocessor"></span> <span class="keywordflow">return</span> drand48();</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="preprocessor"></span> <span class="keywordflow">return</span> ((R)rand())/((R)RAND_MAX);</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> </div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="keywordtype">void</span> nfft_srand48(<span class="keywordtype">long</span> <span class="keywordtype">int</span> seed)</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> {</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="preprocessor">#ifdef HAVE_SRAND48</span></div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="preprocessor"></span> srand48(seed);</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="preprocessor"></span> srand((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)seed);</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> </div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> </div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> <span class="preprocessor">#define z_swap(_a_, _b_, _t_) do { (_t_) = (_a_); (_a_) = (_b_); (_b_) = (_t_); } while (0)</span></div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_sort_node_indices_sort_bubble(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> *keys)</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> {</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="keywordtype">int</span> i, j, ti;</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> </div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> <span class="keywordflow">for</span> (i = 0; i < n; ++i)</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> {</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> j = i;</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> <span class="keywordflow">while</span> (j > 0 && keys[2 * j + 0] < keys[2 * (j - 1) + 0])</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> {</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> z_swap(keys[2 * j + 0], keys[2 * (j - 1) + 0], ti);</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> z_swap(keys[2 * j + 1], keys[2 * (j - 1) + 1], ti);</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> --j;</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> }</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> }</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> }</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> </div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_sort_node_indices_radix_count(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> *keys, <span class="keywordtype">int</span> shift, <span class="keywordtype">int</span> mask, <span class="keywordtype">int</span> *counts)</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> {</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <span class="keywordtype">int</span> i, k;</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> </div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> <span class="keywordflow">for</span> (i = 0; i < n; ++i)</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> {</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> k = (keys[2 * i + 0] >> shift) & mask;</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> ++counts[k];</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> }</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> }</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> </div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> <span class="keyword">static</span> <span class="keywordtype">void</span> nfft_sort_node_indices_radix_rearrange(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> *keys_in, <span class="keywordtype">int</span> *keys_out, <span class="keywordtype">int</span> shift, <span class="keywordtype">int</span> mask, <span class="keywordtype">int</span> *displs)</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> {</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> <span class="keywordtype">int</span> i, k;</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> </div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> <span class="keywordflow">for</span> (i = 0; i < n; ++i)</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> {</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> k = (keys_in[2 * i + 0] >> shift) & mask;</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> keys_out[2 * displs[k] + 0] = keys_in[2 * i + 0];</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> keys_out[2 * displs[k] + 1] = keys_in[2 * i + 1];</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> ++displs[k];</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> }</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> }</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> </div>
+<div class="line"><a name="l01301"></a><span class="lineno"><a class="code" href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738"> 1301</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#gad93b94e3c7e9149f89819504c2b3c738" title="Radix sort for node indices.">nfft_sort_node_indices_radix_lsdf</a>(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> *keys0, <span class="keywordtype">int</span> *keys1, <span cla [...]
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> {</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="keyword">const</span> <span class="keywordtype">int</span> rwidth = 9;</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="keyword">const</span> <span class="keywordtype">int</span> radix_n = 1 << rwidth;</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> <span class="keyword">const</span> <span class="keywordtype">int</span> radix_mask = radix_n - 1;</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <span class="keyword">const</span> <span class="keywordtype">int</span> rhigh_in = rhigh;</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> </div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="keyword">const</span> <span class="keywordtype">int</span> tmax =</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> <span class="preprocessor"></span> omp_get_max_threads();</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> <span class="preprocessor"></span> 1;</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="keywordtype">int</span> *from, *to, *tmp;</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> </div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> <span class="keywordtype">int</span> i, k, l, h;</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> <span class="keywordtype">int</span> lcounts[tmax * radix_n];</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> </div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> <span class="keywordtype">int</span> tid = 0, tnum = 1;</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> </div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> </div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> from = keys0;</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> to = keys1;</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> </div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <span class="keywordflow">while</span> (rhigh >= 0)</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> {</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="preprocessor"></span><span class="preprocessor"> #pragma omp parallel private(tid, tnum, i, l, h)</span></div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="preprocessor"></span> {</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> tid = omp_get_thread_num();</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> tnum = omp_get_num_threads();</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="keywordflow">for</span> (i = 0; i < radix_n; ++i) lcounts[tid * radix_n + i] = 0;</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> </div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> l = (tid * n) / tnum;</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> h = ((tid + 1) * n) / tnum;</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> </div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> nfft_sort_node_indices_radix_count(h - l, from + (2 * l), rhigh_in - rhigh, radix_mask, &lcounts[tid * radix_n]);</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> k = 0;</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> <span class="keywordflow">for</span> (i = 0; i < radix_n; ++i)</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> {</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="keywordflow">for</span> (l = 0; l < tmax; ++l) lcounts[l * radix_n + i] = (k += lcounts[l * radix_n + i]) - lcounts[l * radix_n + i];</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> }</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> </div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> <span class="preprocessor"></span><span class="preprocessor"> #pragma omp parallel private(tid, tnum, i, l, h)</span></div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> <span class="preprocessor"></span> {</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> tid = omp_get_thread_num();</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> tnum = omp_get_num_threads();</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> l = (tid * n) / tnum;</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> h = ((tid + 1) * n) / tnum;</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> </div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> nfft_sort_node_indices_radix_rearrange(h - l, from + (2 * l), to, rhigh_in - rhigh, radix_mask, &lcounts[tid * radix_n]);</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="comment">/* print_keys(n, to);*/</span></div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> </div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> tmp = from;</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> from = to;</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> to = tmp;</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> </div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> rhigh -= rwidth;</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> }</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> </div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> <span class="keywordflow">if</span> (to == keys0) memcpy(to, from, n * 2 * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> }</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> </div>
+<div class="line"><a name="l01383"></a><span class="lineno"><a class="code" href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5"> 1383</a></span> <span class="keywordtype">void</span> <a class="code" href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5" title="Radix sort for node indices.">nfft_sort_node_indices_radix_msdf</a>(<span class="keywordtype">int</span> n, <span class="keywordtype">int</span> *keys0, <span class="keywordtype">int</span> *keys1, <span cla [...]
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> {</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> <span class="keyword">const</span> <span class="keywordtype">int</span> rwidth = 9;</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="keyword">const</span> <span class="keywordtype">int</span> radix_n = 1 << rwidth;</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> <span class="keyword">const</span> <span class="keywordtype">int</span> radix_mask = radix_n - 1;</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> </div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="keyword">const</span> <span class="keywordtype">int</span> tmax =</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> <span class="preprocessor"></span> omp_get_max_threads();</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> <span class="preprocessor"></span> 1;</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> <span class="keywordtype">int</span> i, k, l, h;</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> <span class="keywordtype">int</span> lcounts[tmax * radix_n];</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> </div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> <span class="keywordtype">int</span> counts[radix_n], displs[radix_n];</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> </div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> <span class="keywordtype">int</span> tid = 0, tnum = 1;</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> </div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> </div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> rhigh -= rwidth;</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> </div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> <span class="preprocessor"></span><span class="preprocessor"> #pragma omp parallel private(tid, tnum, i, l, h)</span></div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> <span class="preprocessor"></span> {</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> tid = omp_get_thread_num();</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> tnum = omp_get_num_threads();</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span> <span class="keywordflow">for</span> (i = 0; i < radix_n; ++i) lcounts[tid * radix_n + i] = 0;</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> </div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> l = (tid * n) / tnum;</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> h = ((tid + 1) * n) / tnum;</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> </div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> nfft_sort_node_indices_radix_count(h - l, keys0 + (2 * l), rhigh + 1, radix_mask, &lcounts[tid * radix_n]);</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> k = 0;</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> <span class="keywordflow">for</span> (i = 0; i < radix_n; ++i)</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> {</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> <span class="keywordflow">for</span> (l = 0; l < tmax; ++l) lcounts[l * radix_n + i] = (k += lcounts[l * radix_n + i]) - lcounts[l * radix_n + i];</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> </div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> displs[i] = lcounts[0 * radix_n + i];</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> <span class="keywordflow">if</span> (i > 0) counts[i - 1] = displs[i] - displs[i - 1];</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> }</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> counts[radix_n - 1] = n - displs[radix_n - 1];</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> </div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> <span class="preprocessor"></span><span class="preprocessor"> #pragma omp parallel private(tid, tnum, i, l, h)</span></div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> <span class="preprocessor"></span> {</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> tid = omp_get_thread_num();</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> tnum = omp_get_num_threads();</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> l = (tid * n) / tnum;</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> h = ((tid + 1) * n) / tnum;</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> </div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> nfft_sort_node_indices_radix_rearrange(h - l, keys0 + (2 * l), keys1, rhigh + 1, radix_mask, &lcounts[tid * radix_n]);</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> <span class="preprocessor"></span> }</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> memcpy(keys0, keys1, n * 2 * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> </div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> <span class="keywordflow">if</span> (rhigh >= 0)</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> {</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> <span class="keywordflow">for</span> (i = 0; i < radix_n; ++i)</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> {</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> <span class="keywordflow">if</span> (counts[i] > 1)</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> {</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> <span class="keywordflow">if</span> (counts[i] > 256)</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> <a class="code" href="group__nfftutil.html#ga60a5123a8026a06807e14502d7cedcd5" title="Radix sort for node indices.">nfft_sort_node_indices_radix_msdf</a>(counts[i], keys0 + 2 * displs[i], keys1 + 2 * displs[i], rhigh);</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> nfft_sort_node_indices_sort_bubble(counts[i], keys0 + 2 * displs[i]);</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> }</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> }</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> }</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> }</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> </div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> <span class="keywordtype">int</span> nfft_get_num_threads(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> {</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> <span class="preprocessor"></span> <span class="keywordflow">return</span> nfft_get_omp_num_threads();</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> <span class="preprocessor"></span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> </div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> <span class="preprocessor"></span><span class="keywordtype">int</span> nfft_get_omp_num_threads(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> {</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> <span class="keywordtype">int</span> nthreads;</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> <span class="preprocessor"> #pragma omp parallel default(shared)</span></div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> <span class="preprocessor"></span> {</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> <span class="keywordtype">int</span> n = omp_get_num_threads();</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> <span class="preprocessor"> #pragma omp master</span></div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> <span class="preprocessor"></span> {</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> nthreads = n;</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> }</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> }</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> <span class="keywordflow">return</span> nthreads;</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> }</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/wigner_8c_source.html b/doc/api/html/wigner_8c_source.html
new file mode 100644
index 0000000..fa41d84
--- /dev/null
+++ b/doc/api/html/wigner_8c_source.html
@@ -0,0 +1,432 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - wigner.c Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_8f3c7156d7272f1462551f3a6c5fabd1.html">nfsoft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">wigner.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: wigner.c 3896 2012-10-10 12:19:26Z tovo $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "infft.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "<a class="code" href="wigner_8h.html" title="Header file for functions related to Wigner-d/D functions.">wigner.h</a>"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "<a class="code" href="nfft3util_8h.html" title="Header file for utility functions used by the nfft3 library.">nfft3util.h</a>"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"><a class="code" href="wigner_8h.html#ab67e240f23c39daa7283fee9025a8f03"> 27</a></span> <span class="keywordtype">double</span> SO3_alpha(<span class="keyword">const</span> <span class="keywordtype">int</span> m1, <span class="keyword">const</span> <span class="keywordtype">int</span> m2, <span class="keyword">const</span> <span class="keywordtype">int</span> j)</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">const</span> <span class="keywordtype">int</span> M = MAX(ABS(m1),ABS(m2)), mini = MIN(ABS(m1),ABS(m2));</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keywordflow">if</span> (j < 0)</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keywordflow">return</span> K(0.0);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j == 0)</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keywordflow">if</span> (m1 == 0 && m2 == 0)</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keywordflow">return</span> K(1.0);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keywordflow">if</span> (m1 == m2)</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keywordflow">return</span> K(0.5);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordflow">return</span> IF((m1+m2)%2,K(0.0),K(-0.5));</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> }</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j < M - mini)</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">return</span> IF(j%2,K(0.5),K(-0.5));</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j < M)</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">return</span> K(0.5) * SIGNF((R)m1)*SIGNF((R)m2);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordflow">return</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> SQRT(((R)(j+1))/((R)(j+1-m1)))</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> * SQRT(((R)(2*j+1))/((R)(j+1+m1)))</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> * SQRT(((R)(j+1))/((R)(j+1-m2)))</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> * SQRT(((R)(2*j+1))/((R)(j+1+m2)));</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"><a class="code" href="wigner_8h.html#a6722aa3212be1361b531751a850056f6"> 54</a></span> <span class="keywordtype">double</span> SO3_beta(<span class="keyword">const</span> <span class="keywordtype">int</span> m1, <span class="keyword">const</span> <span class="keywordtype">int</span> m2, <span class="keyword">const</span> <span class="keywordtype">int</span> j)</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> {</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">if</span> (j < 0)</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">return</span> K(0.0);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j < MAX(ABS(m1),ABS(m2)))</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">return</span> K(0.5);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m1 == 0 || m2 == 0)</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">return</span> K(0.0);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">const</span> R m1a = FABS((R)m1), m2a = FABS((R)m2);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">return</span> -COPYSIGN(</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> ((SQRT(m1a)*SQRT(m2a))/((R)j))</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> * SQRT(m1a/((R)(j+1-m1)))</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> * SQRT(((R)(2*j+1))/((R)(j+1+m1)))</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> * SQRT(m2a/((R)(j+1-m2)))</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> * SQRT(((R)(2*j+1))/((R)(j+1+m2))),</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> SIGNF((R)m1)*SIGNF((R)m2));</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> }</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="code" href="wigner_8h.html#a6b13b24d727910800b9f1c0da29f5f73"> 75</a></span> <span class="keywordtype">double</span> SO3_gamma(<span class="keyword">const</span> <span class="keywordtype">int</span> m1, <span class="keyword">const</span> <span class="keywordtype">int</span> m2, <span class="keyword">const</span> <span class="keywordtype">int</span> j)</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">if</span> (MAX(ABS(m1),ABS(m2)) < j)</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">return</span> -(((R)(j+1))/((R)j)) * SQRT((((R)(j-m1))/((R)(j+1-m1)))</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> *(((R)(j+m1))/((R)(j+1+m1)))*(((R)(j-m2))/((R)(j+1-m2)))</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> *(((R)(j+m2))/((R)(j+1+m2))));</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j == -1)</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">return</span> IF(m1 > m2 || !((m1 + m2) % 2), K(1.0), K(-1.0))</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> * nfft_lambda2((R)ABS(m2 - m1),(R)ABS(m2 + m1));</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">return</span> K(0.0);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment">/*compute the coefficients for all degrees*/</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"><a class="code" href="wigner_8h.html#ae9c3c9a11f1da35bb0cfbed1fb828ad2"> 90</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_alpha_row(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-func [...]
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> {</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">double</span> *alpha_act = <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> *alpha_act++ = SO3_alpha(k, m, j);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"><a class="code" href="wigner_8h.html#a1b82e072be0c3e0d45426ed56e4e6a9d"> 98</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_beta_row(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-funct [...]
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keywordtype">double</span> *beta_act = <a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> *beta_act++ = SO3_beta(k, m, j);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"><a class="code" href="wigner_8h.html#a46516d6ec71efab3c80eecd459ad20ee"> 106</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_gamma_row(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-func [...]
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> {</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">double</span> *gamma_act = <a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> *gamma_act++ = SO3_gamma(k, m, j);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment">/*compute for all degrees l and orders k*/</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"><a class="code" href="wigner_8h.html#a9ab913c454dd078bed0db8b4aa9365e1"> 116</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_alpha_matrix(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-f [...]
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> {</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">int</span> i, j;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keywordtype">double</span> *alpha_act = <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">for</span> (i = -N; i <= N; i++)</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> {</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> {</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> *alpha_act = SO3_alpha(i, m, j);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> alpha_act++;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> }</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> }</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"><a class="code" href="wigner_8h.html#a742f6babb80797e003835bc66cfe9080"> 130</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_beta_matrix(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-fu [...]
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> {</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keywordtype">int</span> i, j;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">double</span> *alpha_act = <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">for</span> (i = -N; i <= N; i++)</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> {</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> {</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> *alpha_act = SO3_beta(i, m, j);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> alpha_act++;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"><a class="code" href="wigner_8h.html#aa9850cfec93784e536a728f13db4c5cb"> 144</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_gamma_matrix(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-f [...]
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> {</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keywordtype">int</span> i, j;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordtype">double</span> *alpha_act = <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">for</span> (i = -N; i <= N; i++)</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> {</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> {</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> *alpha_act = SO3_gamma(i, m, j);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> alpha_act++;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> }</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> }</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment">/*compute all 3termrecurrence coeffs*/</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"><a class="code" href="wigner_8h.html#aef802fd511b566392a8b2cbb9fcd6678"> 160</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_alpha_all(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-func [...]
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> {</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordtype">int</span> q;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordtype">int</span> i, j, m;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordtype">double</span> *alpha_act = <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> q = 0;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">for</span> (m = -N; m <= N; m++)</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> {</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">for</span> (i = -N; i <= N; i++)</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> {</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> {</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> *alpha_act = SO3_alpha(i, m, j);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> fprintf(stdout, <span class="stringliteral">"alpha_all_%d^[%d,%d]=%f\n"</span>, j, i, m,</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> SO3_alpha(i, m, j));</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> alpha_act++;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> q = q + 1;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> }</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> }</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"><a class="code" href="wigner_8h.html#aa981c92edca3fac2f04a7d3524b8425a"> 183</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_beta_all(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-funct [...]
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> {</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordtype">int</span> i, j, m;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordtype">double</span> *alpha_act = <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">for</span> (m = -N; m <= N; m++)</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> {</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">for</span> (i = -N; i <= N; i++)</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> {</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> {</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> *alpha_act = SO3_beta(i, m, j);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> alpha_act++;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> }</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> }</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"><a class="code" href="wigner_8h.html#a4ff3aa0c3afb226613100df410cbef7f"> 200</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> SO3_gamma_all(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-func [...]
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> {</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordtype">int</span> i, j, m;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordtype">double</span> *alpha_act = <a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keywordflow">for</span> (m = -N; m <= N; m++)</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> {</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">for</span> (i = -N; i <= N; i++)</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> {</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">for</span> (j = -1; j <= N; j++)</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> {</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> *alpha_act = SO3_gamma(i, m, j);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> alpha_act++;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> }</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> }</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"><a class="code" href="wigner_8h.html#a86975b8841ed9b6bb3e1484130658f19"> 217</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> eval_wigner(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> size, <span class="keywordtype">int</span> k, <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdo [...]
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>, <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title=" [...]
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> {</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="comment">/* Evaluate the wigner function d_{k,nleg} (l,x) for the vector</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment"> * of knots x[0], ..., x[size-1] by the Clenshaw algorithm</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keywordtype">int</span> i, j;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="keywordtype">double</span> a, b, x_val_act, a_old;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordtype">double</span> *x_act, *y_act;</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keywordtype">double</span> *alpha_act, *beta_act, *gamma_act;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> x_act = x;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> y_act = y;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> {</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> a = 1.0;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> b = 0.0;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> x_val_act = *x_act;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> {</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> *y_act = 1.0;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> {</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> alpha_act = &(alpha[k]);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> beta_act = &(beta[k]);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> gamma_act = &(gamma[k]);</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">for</span> (j = k; j > 1; j--)</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> {</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> a_old = a;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> a = b + a_old * ((*alpha_act) * x_val_act + (*beta_act));</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> b = a_old * (*gamma_act);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> alpha_act--;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> beta_act--;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> gamma_act--;</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> }</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> *y_act = (a * ((*alpha_act) * x_val_act + (*beta_act)) + b);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> }</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> x_act++;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> y_act++;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> }</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> }</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno"><a class="code" href="wigner_8h.html#ae5933af03f4536a70ddfc744f16c9c55"> 262</a></span> <span class="keyword">inline</span> <span class="keywordtype">int</span> eval_wigner_thresh(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> size, <span class="keywordtype">int</span> k,</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>, <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title= [...]
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> {</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keywordtype">int</span> i, j;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordtype">double</span> a, b, x_val_act, a_old;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="keywordtype">double</span> *x_act, *y_act;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keywordtype">double</span> *alpha_act, *beta_act, *gamma_act;</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="comment">/* Traverse all nodes. */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> x_act = x;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> y_act = y;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">for</span> (i = 0; i < size; i++)</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> {</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> a = 1.0;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> b = 0.0;</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> x_val_act = *x_act;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">if</span> (k == 0)</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> {</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> *y_act = 1.0;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> }</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> {</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> alpha_act = &(alpha[k]);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> beta_act = &(beta[k]);</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> gamma_act = &(gamma[k]);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">for</span> (j = k; j > 1; j--)</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> {</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> a_old = a;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> a = b + a_old * ((*alpha_act) * x_val_act + (*beta_act));</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> b = a_old * (*gamma_act);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> alpha_act--;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> beta_act--;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> gamma_act--;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> }</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> *y_act = (a * ((*alpha_act) * x_val_act + (*beta_act)) + b);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">if</span> (fabs(*y_act) > <a class="code" href="structnfsft__wisdom.html#ac367edaa1fae041e5b049cd81b44336b" title="The threshold /f$/f$.">threshold</a>)</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> {</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> }</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> }</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> x_act++;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> y_act++;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> }</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> }</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment">/************************************************************************/</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment">/* L2 normed wigner little d, WHERE THE DEGREE OF THE FUNCTION IS EQUAL</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment"> TO ONE OF ITS ORDERS. This is the function to use when starting the</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment"> three-term recurrence at orders (m1,m2)</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="comment"></span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="comment"> Note that, by definition, since I am starting the recurrence with this</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="comment"> function, that the degree j of the function is equal to max(abs(m1), abs(m2) ).</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno"><a class="code" href="wigner_8h.html#a6c43c1f82cf3efa9cb1343ec9dcd07ed"> 319</a></span> <span class="keywordtype">double</span> wigner_start(<span class="keywordtype">int</span> m1, <span class="keywordtype">int</span> m2, <span class="keywordtype">double</span> theta)</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> {</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordtype">int</span> i, l, delta;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keywordtype">int</span> cosPower, sinPower;</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordtype">int</span> absM1, absM2;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="keywordtype">double</span> dl, dm1, dm2, normFactor, sinSign;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keywordtype">double</span> dCP, dSP;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="keywordtype">double</span> max;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="keywordtype">double</span> min;</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> max = (double) (ABS(m1) > ABS(m2) ? ABS(m1) : ABS(m2));</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> min = (double) (ABS(m1) < ABS(m2) ? ABS(m1) : ABS(m2));</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> l = max;</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> delta = l - min;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> absM1 = ABS(m1);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> absM2 = ABS(m2);</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> dl = (double) l;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> dm1 = (double) m1;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> dm2 = (double) m2;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> sinSign = 1.;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> normFactor = 1.;</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">for</span> (i = 0; i < delta; i++)</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> normFactor *= SQRT((2. * dl - ((<span class="keywordtype">double</span>) i)) / (((double) i) + 1.));</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="comment">/* need to adjust to make the L2-norm equal to 1 */</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> normFactor *= SQRT((2. * dl + 1.) / 2.);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">if</span> (l == absM1)</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">if</span> (m1 >= 0)</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> {</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> cosPower = l + m2;</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> sinPower = l - m2;</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">if</span> ((l - m2) % 2)</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> sinSign = -1.;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> }</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> {</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> cosPower = l - m2;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> sinPower = l + m2;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> }</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m2 >= 0)</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> {</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> cosPower = l + m1;</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> sinPower = l - m1;</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> }</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> {</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> cosPower = l - m1;</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> sinPower = l + m1;</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">if</span> ((l + m1) % 2)</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> sinSign = -1.;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> }</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> dCP = (double) cosPower;</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> dSP = (double) sinPower;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">return</span> normFactor * sinSign * POW(sin(theta / 2), dSP) * POW(cos(theta / 2),</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> dCP);</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/wigner_8h.html b/doc/api/html/wigner_8h.html
new file mode 100644
index 0000000..2eb92e5
--- /dev/null
+++ b/doc/api/html/wigner_8h.html
@@ -0,0 +1,890 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - wigner.h File Reference
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_8f3c7156d7272f1462551f3a6c5fabd1.html">nfsoft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">wigner.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Header file for functions related to Wigner-d/D functions.
+<a href="#details">More...</a></p>
+
+<p><a href="wigner_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab67e240f23c39daa7283fee9025a8f03"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#ab67e240f23c39daa7283fee9025a8f03">SO3_alpha</a> (int k, int m, int l)</td></tr>
+<tr class="memdesc:ab67e240f23c39daa7283fee9025a8f03"><td class="mdescLeft"> </td><td class="mdescRight">Computes three-term recurrence coefficients <img class="formulaInl" alt="$\alpha_l^{km}$" src="form_58.png"/> of Wigner-d functions. <a href="#ab67e240f23c39daa7283fee9025a8f03"></a><br/></td></tr>
+<tr class="memitem:a6722aa3212be1361b531751a850056f6"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a6722aa3212be1361b531751a850056f6">SO3_beta</a> (int k, int m, int l)</td></tr>
+<tr class="memdesc:a6722aa3212be1361b531751a850056f6"><td class="mdescLeft"> </td><td class="mdescRight">Computes three-term recurrence coefficients <img class="formulaInl" alt="$\beta_l^{km}$" src="form_61.png"/> of Wigner-d functions. <a href="#a6722aa3212be1361b531751a850056f6"></a><br/></td></tr>
+<tr class="memitem:a6b13b24d727910800b9f1c0da29f5f73"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a6b13b24d727910800b9f1c0da29f5f73">SO3_gamma</a> (int k, int m, int l)</td></tr>
+<tr class="memdesc:a6b13b24d727910800b9f1c0da29f5f73"><td class="mdescLeft"> </td><td class="mdescRight">Computes three-term recurrence coefficients <img class="formulaInl" alt="$\gamma_l^{km}$" src="form_62.png"/> of Wigner-d functions. <a href="#a6b13b24d727910800b9f1c0da29f5f73"></a><br/></td></tr>
+<tr class="memitem:ae9c3c9a11f1da35bb0cfbed1fb828ad2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#ae9c3c9a11f1da35bb0cfbed1fb828ad2">SO3_alpha_row</a> (double *alpha, int N, int m, int n)</td></tr>
+<tr class="memdesc:ae9c3c9a11f1da35bb0cfbed1fb828ad2"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \alpha_{l}^{km}$" src="form_63.png"/> of Wigner-d functions for all degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. <a href="#ae9c3c9a11f1da35bb0cfbed1fb828ad2"></a><br/></td></tr>
+<tr class="memitem:a1b82e072be0c3e0d45426ed56e4e6a9d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a1b82e072be0c3e0d45426ed56e4e6a9d">SO3_beta_row</a> (double *beta, int N, int m, int n)</td></tr>
+<tr class="memdesc:a1b82e072be0c3e0d45426ed56e4e6a9d"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \beta_{l}^{km}$" src="form_66.png"/> of Wigner-d functions for all degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. <a href="#a1b82e072be0c3e0d45426ed56e4e6a9d"></a><br/></td></tr>
+<tr class="memitem:a46516d6ec71efab3c80eecd459ad20ee"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a46516d6ec71efab3c80eecd459ad20ee">SO3_gamma_row</a> (double *gamma, int N, int m, int n)</td></tr>
+<tr class="memdesc:a46516d6ec71efab3c80eecd459ad20ee"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \gamma_{l}^{km}$" src="form_67.png"/> of Wigner-d functions for all degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. <a href="#a46516d6ec71efab3c80eecd459ad20ee"></a><br/></td></tr>
+<tr class="memitem:a9ab913c454dd078bed0db8b4aa9365e1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a9ab913c454dd078bed0db8b4aa9365e1">SO3_alpha_matrix</a> (double *alpha, int N, int n)</td></tr>
+<tr class="memdesc:a9ab913c454dd078bed0db8b4aa9365e1"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \alpha_{l}^{km}$" src="form_63.png"/> of Wigner-d functions for all order <img class="formulaInl" alt="$ m = -N,\ldots,N $" src="form_68.png"/> and degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. <a href="#a9ab913c454dd078bed0db8b4aa9365e1"></a><br/></td></tr>
+<tr class="memitem:a742f6babb80797e003835bc66cfe9080"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a742f6babb80797e003835bc66cfe9080">SO3_beta_matrix</a> (double *beta, int N, int n)</td></tr>
+<tr class="memdesc:a742f6babb80797e003835bc66cfe9080"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \beta_{l}^{km}$" src="form_66.png"/> of Wigner-d functions for all order <img class="formulaInl" alt="$ m = -N,\ldots,N $" src="form_68.png"/> and degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. <a href="#a742f6babb80797e003835bc66cfe9080"></a><br/></td></tr>
+<tr class="memitem:aa9850cfec93784e536a728f13db4c5cb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#aa9850cfec93784e536a728f13db4c5cb">SO3_gamma_matrix</a> (double *gamma, int N, int n)</td></tr>
+<tr class="memdesc:aa9850cfec93784e536a728f13db4c5cb"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \gamma_{l}^{km}$" src="form_67.png"/> of Wigner-d functions for all order <img class="formulaInl" alt="$ m = -N,\ldots,N $" src="form_68.png"/> and degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. <a href="#aa9850cfec93784e536a728f13db4c5cb"></a><br/></td></tr>
+<tr class="memitem:aef802fd511b566392a8b2cbb9fcd6678"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#aef802fd511b566392a8b2cbb9fcd6678">SO3_alpha_all</a> (double *alpha, int N)</td></tr>
+<tr class="memdesc:aef802fd511b566392a8b2cbb9fcd6678"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\alpha_{l}^{km}$" src="form_69.png"/> of Wigner-d functions for all <img class="formulaInl" alt="$ k,m = -N,\ldots,N $" src="form_70.png"/> and <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. <a href="#aef802fd511b566392a8b2cbb9fcd6678"></a><br/></td></tr>
+<tr class="memitem:aa981c92edca3fac2f04a7d3524b8425a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#aa981c92edca3fac2f04a7d3524b8425a">SO3_beta_all</a> (double *beta, int N)</td></tr>
+<tr class="memdesc:aa981c92edca3fac2f04a7d3524b8425a"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\beta_{l}^{km}$" src="form_71.png"/> of Wigner-d functions for all <img class="formulaInl" alt="$ k,m = -N,\ldots,N $" src="form_70.png"/> and <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. <a href="#aa981c92edca3fac2f04a7d3524b8425a"></a><br/></td></tr>
+<tr class="memitem:a4ff3aa0c3afb226613100df410cbef7f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a4ff3aa0c3afb226613100df410cbef7f">SO3_gamma_all</a> (double *gamma, int N)</td></tr>
+<tr class="memdesc:a4ff3aa0c3afb226613100df410cbef7f"><td class="mdescLeft"> </td><td class="mdescRight">Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\gamma_{l}^{km}$" src="form_72.png"/> of Wigner-d functions for all <img class="formulaInl" alt="$ k,m = -N,\ldots,N $" src="form_70.png"/> and <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. <a href="#a4ff3aa0c3afb226613100df410cbef7f"></a><br/></td></tr>
+<tr class="memitem:a86975b8841ed9b6bb3e1484130658f19"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a86975b8841ed9b6bb3e1484130658f19">eval_wigner</a> (double *x, double *y, int size, int l, double *alpha, double *beta, double *gamma)</td></tr>
+<tr class="memdesc:a86975b8841ed9b6bb3e1484130658f19"><td class="mdescLeft"> </td><td class="mdescRight">Evaluates Wigner-d functions <img class="formulaInl" alt="$d_l^{km}(x,c)$" src="form_73.png"/> using the Clenshaw-algorithm. <a href="#a86975b8841ed9b6bb3e1484130658f19"></a><br/></td></tr>
+<tr class="memitem:ae5933af03f4536a70ddfc744f16c9c55"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#ae5933af03f4536a70ddfc744f16c9c55">eval_wigner_thresh</a> (double *x, double *y, int size, int l, double *alpha, double *beta, double *gamma, double threshold)</td></tr>
+<tr class="memdesc:ae5933af03f4536a70ddfc744f16c9c55"><td class="mdescLeft"> </td><td class="mdescRight">Evaluates Wigner-d functions <img class="formulaInl" alt="$d_l^{km}(x,c)$" src="form_73.png"/> using the Clenshaw-algorithm if it not exceeds a given threshold. <a href="#ae5933af03f4536a70ddfc744f16c9c55"></a><br/></td></tr>
+<tr class="memitem:a6c43c1f82cf3efa9cb1343ec9dcd07ed"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="wigner_8h.html#a6c43c1f82cf3efa9cb1343ec9dcd07ed">wigner_start</a> (int n1, int n2, double theta)</td></tr>
+<tr class="memdesc:a6c43c1f82cf3efa9cb1343ec9dcd07ed"><td class="mdescLeft"> </td><td class="mdescRight">A method used for debugging, gives the values to start the "old" three-term recurrence generates <img class="formulaInl" alt="$ d^{km}_l(cos(theta)) $" src="form_77.png"/> WHERE THE DEGREE l OF THE FUNCTION IS EQUAL TO THE MAXIMUM OF ITS ORDERS. <a href="#a6c43c1f82cf3efa9cb1343ec9dcd07ed"></a><br/></td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Header file for functions related to Wigner-d/D functions. </p>
+<dl class="section author"><dt>Author:</dt><dd>Antje Vollrath </dd></dl>
+
+<p>Definition in file <a class="el" href="wigner_8h_source.html">wigner.h</a>.</p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ab67e240f23c39daa7283fee9025a8f03"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double SO3_alpha </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>k</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>l</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Computes three-term recurrence coefficients <img class="formulaInl" alt="$\alpha_l^{km}$" src="form_58.png"/> of Wigner-d functions. </p>
+<ul>
+<li>k The order <img class="formulaInl" alt="$k$" src="form_45.png"/> </li>
+<li>m The order <img class="formulaInl" alt="$m$" src="form_59.png"/> </li>
+<li>l The degree <img class="formulaInl" alt="$l$" src="form_60.png"/> </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00027">27</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6722aa3212be1361b531751a850056f6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double SO3_beta </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>k</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>l</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Computes three-term recurrence coefficients <img class="formulaInl" alt="$\beta_l^{km}$" src="form_61.png"/> of Wigner-d functions. </p>
+<ul>
+<li>k The order <img class="formulaInl" alt="$k$" src="form_45.png"/> </li>
+<li>m The order <img class="formulaInl" alt="$m$" src="form_59.png"/> </li>
+<li>l The degree <img class="formulaInl" alt="$l$" src="form_60.png"/> </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00054">54</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6b13b24d727910800b9f1c0da29f5f73"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double SO3_gamma </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>k</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>l</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Computes three-term recurrence coefficients <img class="formulaInl" alt="$\gamma_l^{km}$" src="form_62.png"/> of Wigner-d functions. </p>
+<ul>
+<li>k The order <img class="formulaInl" alt="$k$" src="form_45.png"/> </li>
+<li>m The order <img class="formulaInl" alt="$m$" src="form_59.png"/> </li>
+<li>l The degree <img class="formulaInl" alt="$l$" src="form_60.png"/> </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00075">75</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae9c3c9a11f1da35bb0cfbed1fb828ad2"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void SO3_alpha_row </td>
+ <td>(</td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>alpha</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>N</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>n</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \alpha_{l}^{km}$" src="form_63.png"/> of Wigner-d functions for all degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/> </li>
+<li>m the first order </li>
+<li>n the second order </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00090">90</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00076">nfsft_wisdom::alpha</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1b82e072be0c3e0d45426ed56e4e6a9d"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void SO3_beta_row </td>
+ <td>(</td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>beta</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>N</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>n</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \beta_{l}^{km}$" src="form_66.png"/> of Wigner-d functions for all degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/> </li>
+<li>m the first order </li>
+<li>n the second order </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00098">98</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00082">nfsft_wisdom::beta</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a46516d6ec71efab3c80eecd459ad20ee"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void SO3_gamma_row </td>
+ <td>(</td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>gamma</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>N</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>n</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \gamma_{l}^{km}$" src="form_67.png"/> of Wigner-d functions for all degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/> </li>
+<li>m the first order </li>
+<li>n the second order </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00106">106</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00088">nfsft_wisdom::gamma</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9ab913c454dd078bed0db8b4aa9365e1"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void SO3_alpha_matrix </td>
+ <td>(</td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>alpha</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>N</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>n</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \alpha_{l}^{km}$" src="form_63.png"/> of Wigner-d functions for all order <img class="formulaInl" alt="$ m = -N,\ldots,N $" src="form_68.png"/> and degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/> </li>
+<li>n the second order </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00116">116</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00076">nfsft_wisdom::alpha</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a742f6babb80797e003835bc66cfe9080"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void SO3_beta_matrix </td>
+ <td>(</td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>beta</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>N</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>n</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \beta_{l}^{km}$" src="form_66.png"/> of Wigner-d functions for all order <img class="formulaInl" alt="$ m = -N,\ldots,N $" src="form_68.png"/> and degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/> </li>
+<li>n the second order </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00130">130</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00076">nfsft_wisdom::alpha</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa9850cfec93784e536a728f13db4c5cb"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void SO3_gamma_matrix </td>
+ <td>(</td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>gamma</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>N</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>n</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$ \gamma_{l}^{km}$" src="form_67.png"/> of Wigner-d functions for all order <img class="formulaInl" alt="$ m = -N,\ldots,N $" src="form_68.png"/> and degrees <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/> </li>
+<li>n the second order </li>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00144">144</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00076">nfsft_wisdom::alpha</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aef802fd511b566392a8b2cbb9fcd6678"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void SO3_alpha_all </td>
+ <td>(</td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>alpha</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>N</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\alpha_{l}^{km}$" src="form_69.png"/> of Wigner-d functions for all <img class="formulaInl" alt="$ k,m = -N,\ldots,N $" src="form_70.png"/> and <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/></li>
+</ul>
+<ul>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00160">160</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00076">nfsft_wisdom::alpha</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa981c92edca3fac2f04a7d3524b8425a"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void SO3_beta_all </td>
+ <td>(</td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>beta</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>N</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\beta_{l}^{km}$" src="form_71.png"/> of Wigner-d functions for all <img class="formulaInl" alt="$ k,m = -N,\ldots,N $" src="form_70.png"/> and <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/></li>
+</ul>
+<ul>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00183">183</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00076">nfsft_wisdom::alpha</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4ff3aa0c3afb226613100df410cbef7f"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void SO3_gamma_all </td>
+ <td>(</td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>gamma</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>N</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Compute three-term-recurrence coefficients <img class="formulaInl" alt="$\gamma_{l}^{km}$" src="form_72.png"/> of Wigner-d functions for all <img class="formulaInl" alt="$ k,m = -N,\ldots,N $" src="form_70.png"/> and <img class="formulaInl" alt="$ l= 0,\ldots,N $" src="form_64.png"/>. </p>
+<ul>
+<li>alpha A pointer to an array of doubles of size <img class="formulaInl" alt="$(2N+1)^2(N+1)$" src="form_65.png"/></li>
+</ul>
+<ul>
+<li>N The upper bound <img class="formulaInl" alt="$N$" src="form_5.png"/>. </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00200">200</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00076">nfsft_wisdom::alpha</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a86975b8841ed9b6bb3e1484130658f19"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void eval_wigner </td>
+ <td>(</td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>size</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>l</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>alpha</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>beta</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>gamma</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Evaluates Wigner-d functions <img class="formulaInl" alt="$d_l^{km}(x,c)$" src="form_73.png"/> using the Clenshaw-algorithm. </p>
+<ul>
+<li>x A pointer to an array of nodes where the function is to be evaluated </li>
+<li>y A pointer to an array where the function values are returned </li>
+<li>size The length of x and y </li>
+<li>l The degree <img class="formulaInl" alt="$l$" src="form_60.png"/> </li>
+<li>alpha A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\alpha_c^{km},\ldots,\alpha_{c+l}^{km}$" src="form_74.png"/> </li>
+<li>beta A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\beta_c^{km},\ldots,\beta_{c+l}^{km}$" src="form_75.png"/> </li>
+<li>gamma A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\gamma_c^{km},\ldots,\gamma_{c+l}^{km}$" src="form_76.png"/> </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00217">217</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae5933af03f4536a70ddfc744f16c9c55"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">int eval_wigner_thresh </td>
+ <td>(</td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>size</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>l</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>alpha</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>beta</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double * </td>
+ <td class="paramname"><em>gamma</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double </td>
+ <td class="paramname"><em>threshold</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Evaluates Wigner-d functions <img class="formulaInl" alt="$d_l^{km}(x,c)$" src="form_73.png"/> using the Clenshaw-algorithm if it not exceeds a given threshold. </p>
+<ul>
+<li>x A pointer to an array of nodes where the function is to be evaluated </li>
+<li>y A pointer to an array where the function values are returned </li>
+<li>size The length of x and y </li>
+<li>l The degree <img class="formulaInl" alt="$l$" src="form_60.png"/> </li>
+<li>alpha A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\alpha_c^{km},\ldots,\alpha_{c+l}^{km}$" src="form_74.png"/> </li>
+<li>beta A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\beta_c^{km},\ldots,\beta_{c+l}^{km}$" src="form_75.png"/> </li>
+<li>gamma A pointer to an array containing the recurrence coefficients <img class="formulaInl" alt="$\gamma_c^{km},\ldots,\gamma_{c+l}^{km}$" src="form_76.png"/> </li>
+<li>threshold The threshold </li>
+</ul>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00262">262</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+<p>References <a class="el" href="kernel_2nfsft_2api_8h_source.html#l00093">nfsft_wisdom::threshold</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6c43c1f82cf3efa9cb1343ec9dcd07ed"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double wigner_start </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>n1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>n2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double </td>
+ <td class="paramname"><em>theta</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>A method used for debugging, gives the values to start the "old" three-term recurrence generates <img class="formulaInl" alt="$ d^{km}_l(cos(theta)) $" src="form_77.png"/> WHERE THE DEGREE l OF THE FUNCTION IS EQUAL TO THE MAXIMUM OF ITS ORDERS. </p>
+<ul>
+<li>theta the argument of </li>
+<li>n1 the first order </li>
+<li>n2 the second order</li>
+</ul>
+<dl class="section return"><dt>Returns:</dt><dd>the function value <img class="formulaInl" alt="$ d^{km}_l(cos(theta)) $" src="form_77.png"/> </dd></dl>
+
+<p>Definition at line <a class="el" href="wigner_8c_source.html#l00319">319</a> of file <a class="el" href="wigner_8c_source.html">wigner.c</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/html/wigner_8h_source.html b/doc/api/html/wigner_8h_source.html
new file mode 100644
index 0000000..0a74167
--- /dev/null
+++ b/doc/api/html/wigner_8h_source.html
@@ -0,0 +1,95 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ NFFT 3.2.3 API Reference - wigner.h Source File
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ 3.2.3
+ </td>
+ </tr>
+ </table>
+<!-- Generated by Doxygen 1.8.1 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="annotated.html"><span>Data Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_dc43877d82dd332f9fb2071fcca799d6.html">kernel</a></li><li class="navelem"><a class="el" href="dir_8f3c7156d7272f1462551f3a6c5fabd1.html">nfsoft</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">wigner.h</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="wigner_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify it under</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * this program; if not, write to the Free Software Foundation, Inc., 51</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">/* $Id: wigner.h 3775 2012-06-02 16:39:48Z keiner $ */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#ifndef WIGNER_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"></span><span class="preprocessor">#define WIGNER_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">double</span> SO3_alpha(<span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> l);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">double</span> SO3_beta(<span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> l);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keywordtype">double</span> SO3_gamma(<span class="keywordtype">int</span> k, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> l);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">void</span> SO3_alpha_row(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> m, < [...]
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">void</span> SO3_beta_row(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> m, <sp [...]
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">void</span> SO3_gamma_row(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> m, < [...]
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">void</span> SO3_alpha_matrix(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> n [...]
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">void</span> SO3_beta_matrix(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">void</span> SO3_gamma_matrix(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> n [...]
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keywordtype">void</span> SO3_alpha_all(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">alpha</a>, <span class="keywordtype">int</span> N);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordtype">void</span> SO3_beta_all(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>, <span class="keywordtype">int</span> N);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">void</span> SO3_gamma_all(<span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">gamma</a>, <span class="keywordtype">int</span> N);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keywordtype">void</span> eval_wigner(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> size, <span class="keywordtype">int</span> l, <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots [...]
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>, <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title=" [...]
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keywordtype">int</span> eval_wigner_thresh(<span class="keywordtype">double</span> *x, <span class="keywordtype">double</span> *y, <span class="keywordtype">int</span> size, <span class="keywordtype">int</span> l, <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a755da8bd28cc1322415bd0ddcfceaf4e" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0, [...]
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a6bcfe5201d3fed513c2cdb37832ee255" title="Precomputed recursion coefficients /f$^n/f$ for /f$k = 0,/ldots, N_{{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions /f$P_k^n/f$.">beta</a>, <span class="keywordtype">double</span> *<a class="code" href="structnfsft__wisdom.html#a1703c0339b14ee1f0956d3e394f598e2" title=" [...]
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">double</span> wigner_start(<span class="keywordtype">int</span> n1, <span class="keywordtype">int</span> n2, <span class="keywordtype">double</span> theta);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+ <hr size="1"/>
+ Generated on Tue Apr 30 2013 by Doxygen 1.8.1
+ </body>
+</html>
diff --git a/doc/api/latex/images/sphere.eps b/doc/api/latex/images/sphere.eps
new file mode 100644
index 0000000..94c7537
--- /dev/null
+++ b/doc/api/latex/images/sphere.eps
@@ -0,0 +1,99 @@
+%!PS-Adobe-3.0 EPSF-3.0
%%Title: (sphere.pdf)
%%Version: 1 4
%%Creator: Adobe Acrobat 7.0
%%CreationDate: 26/10/06 22:12
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%ADO_ContainsXMP: MainFirst
%%BoundingBox: 0 0 345 326
%%HiResBoundingBox: 0.0 0.0 345.0 326.0
%%Pages: 0
%%DocumentProcessColors: Cyan Magenta Yellow Black
%%DocumentSuppliedResources:
%%+ procset (Adobe Acrobat - PDF operators) 1.2 0
%%+ procset (Adobe Acrobat - type operators) 1.2 0
%%EndComments
%%BeginProlog
%%EndProlog
%%BeginSetup
%ADOPrintSettings: L2 W0 VM op crd os scsa T h ef bg ucr sf ef r b fa pr seps ttf hb EF t2 irt Printer/PostScript Color Management 0
+
%%BeginResource: procset l2check 6.0 1
%%Copyright: Copyright 1993,2001 Adobe Systems Incorporated. All Rights Reserved.
systemdict /languagelevel known
{ systemdict /languagelevel get 1 eq }
{ true }
ifelse
{
initgraphics /Helvetica findfont 18 scalefont setfont
72 600 moveto (Error: This application does not support) dup show
72 580 moveto (printing to a PostScript Language Level 1 printer.) dup show
exch = =
/Times-Roman findfont 16 scalefont setfont
72 500 moveto (As a workaround, try selecting Print As Image from) show
72 480 moveto (the Advanced Print dialog.) show
showpage
quit
}
if
%%EndResource
%%BeginResource: file Pscript_CFF PSVER
userdict /ct_CffDict 6 dict put
ct_CffDict begin
/F0Subr
{
systemdict /internaldict known
{
1183615869 systemdict /internaldict get exec
/FlxProc known {save true} {false} ifelse
}
{
userdict /internaldict known not
{
userdict /internaldict
{
count 0 eq
{/internaldict errordict /invalidaccess get exec} if
dup type /integertype ne
{/internaldict errordict /invalidaccess get exec} if
dup 1183615869 eq
{pop 0}
{/internaldict errordict /invalidaccess get exec}
ifelse
}
dup 14 get 1 25 dict put
bind executeonly put
} if
1183615869 userdict /internaldict get exec
/FlxProc known {save true} {false} ifelse
} ifelse
[
systemdict /internaldict known not
{ 100 dict /begin cvx /mtx matrix /def cvx } if
systemdict /currentpacking known {currentpacking true setpacking} if
{
systemdict /internaldict known {
1183615869 systemdict /internaldict get exec
dup /$FlxDict known not {
dup dup length exch maxlength eq
{ pop userdict dup /$FlxDict known not
{ 100 dict begin /mtx matrix def
dup /$FlxDict currentdict put end } if }
{ 100 dict begin /mtx matrix def
dup /$FlxDict currentdict put end }
ifelse
} if /$FlxDict get begin } if
grestore
/exdef {exch def} def
/dmin exch abs 100 div def
/epX exdef /epY exdef
/c4y2 exdef /c4x2 exdef /c4y1 exdef /c4x1 exdef /c4y0 exdef /c4x0 exdef
/c3y2 exdef /c3x2 exdef /c3y1 exdef /c3x1 exdef /c3y0 exdef /c3x0 exdef
/c1y2 exdef /c1x2 exdef /c2x2 c4x2 def /c2y2 c4y2 def
/yflag c1y2 c3y2 sub abs c1x2 c3x2 sub abs gt def
/PickCoords {
{c1x0 c1y0 c1x1 c1y1 c1x2 c1y2 c2x0 c2y0 c2x1 c2y1 c2x2 c2y2}
{c3x0 c3y0 c3x1 c3y1 c3x2 c3y2 c4x0 c4y0 c4x1 c4y1 c4x2 c4y2}
ifelse
/y5 exdef /x5 exdef /y4 exdef /x4 exdef /y3 exdef /x3 exdef
/y2 exdef /x2 exdef /y1 exdef /x1 exdef /y0 exdef /x0 exdef
} def
mtx currentmatrix pop
mtx 0 get abs .00001 lt mtx 3 get abs .00001 lt or
{/flipXY -1 def}
{mtx 1 get abs .00001 lt mtx 2 get abs .00001 lt or
{/flipXY 1 def}
{/flipXY 0 def}
ifelse }
ifelse
/erosion 1 def
systemdict /internaldict known {
1183615869 systemdict /internaldict get exec dup
/erosion known
{/erosion get /erosion exch def}
{pop}
ifelse
} if
yflag
{
flipXY 0 eq c3y2 c4y2 eq or
{false PickCoords}
{
/shrink c3y2 c4y2 eq
{0}{c1y2 c4y2 sub c3y2 c4y2 sub div abs} ifelse def
/yshrink {c4y2 sub shrink mul c4y2 add} def
/c1y0 c3y0 yshrink def /c1y1 c3y1 yshrink def
/c2y0 c4y0 yshrink def /c2y1 c4y1 yshrink def
/c1x0 c3x0 def /c1x1 c3x1 def /c2x0 c4x0 def /c2x1 c4x1 def
/dY 0 c3y2 c1y2 sub round
dtransform flipXY 1 eq {exch} if pop abs def
dY dmin lt PickCoords
y2 c1y2 sub abs 0.001 gt {
c1x2 c1y2 transform flipXY 1 eq {exch} if
/cx exch def /cy exch def
/dY 0 y2 c1y2 sub round dtransform flipXY 1 eq {exch}
if pop def
dY round dup 0 ne
{/dY exdef }
{pop dY 0 lt {-1}{1} ifelse /dY exdef}
ifelse
/erode PaintType 2 ne erosion 0.5 ge and def
erode {/cy cy 0.5 sub def} if
/ey cy dY add def
/ey ey ceiling ey sub ey floor add def
erode {/ey ey 0.5 add def} if
ey cx flipXY 1 eq {exch} if itransform exch pop
y2 sub /eShift exch def
/y1 y1 eShift add def /y2 y2 eShift add def /y3 y3
eShift add def
} if
} ifelse
}
{
flipXY 0 eq c3x2 c4x2 eq or
{false PickCoords }
{ /shrink c3x2 c4x2 eq
{0}{c1x2 c4x2 sub c3x2 c4x2 sub div abs} ifelse def
/xshrink {c4x2 sub shrink mul c4x2 add} def
/c1x0 c3x0 xshrink def /c1x1 c3x1 xshrink def
/c2x0 c4x0 xshrink def /c2x1 c4x1 xshrink def
/c1y0 c3y0 def /c1y1 c3y1 def /c2y0 c4y0 def /c2y1 c4y1 def
/dX c3x2 c1x2 sub round 0 dtransform
flipXY -1 eq {exch} if pop abs def
dX dmin lt PickCoords
x2 c1x2 sub abs 0.001 gt {
c1x2 c1y2 transform flipXY -1 eq {exch} if
/cy exch def /cx exch def
/dX x2 c1x2 sub round 0 dtransform flipXY -1 eq {exch} if pop def
dX round dup 0 ne
{/dX exdef}
{pop dX 0 lt {-1}{1} ifelse /dX exdef}
ifelse
/erode PaintType 2 ne erosion .5 ge and def
erode {/cx cx .5 sub def} if
/ex cx dX add def
/ex ex ceiling ex sub ex floor add def
erode {/ex ex .5 add def} if
ex cy flipXY -1 eq {exch} if itransform pop
x2 sub /eShift exch def
/x1 x1 eShift add def /x2 x2 eShift add def /x3 x3 eShift add def
} if
} ifelse
} ifelse
x2 x5 eq y2 y5 eq or
{x5 y5 lineto }
{x0 y0 x1 y1 x2 y2 curveto
x3 y3 x4 y4 x5 y5 curveto}
ifelse
epY epX
}
systemdict /currentpacking known {exch setpacking} if
/exec cvx /end cvx
] cvx
executeonly
exch
{pop true exch restore}
{
systemdict /internaldict known not
{1183615869 userdict /internaldict get exec
exch /FlxProc exch put true}
{1183615869 systemdict /internaldict get exec
dup length exch maxlength eq
{false}
{1183615869 systemdict /internaldict get exec
exch /FlxProc exch put true}
ifelse}
ifelse
} ifelse
{
systemdict /internaldict known
{1183615869 systemdict /internaldict get exec /FlxProc get exec}
{1183615869 userdict /internaldict get exec /FlxProc get exec}
ifelse
} if
} executeonly def
/F1Subr
{gsave currentpoint newpath moveto} bind def
/F2Subr
{currentpoint grestore gsave currentpoint newpath moveto} bind def
/HSSubr
{
systemdict /internaldict known not
{pop 3}
{1183615869 systemdict /internaldict get exec
dup /startlock known
{/startlock get exec}
{dup /strtlck known
{/strtlck get exec}
{pop 3}
ifelse}
ifelse}
ifelse
} bind def
end
%%EndResource
%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.19 0
%%Copyright: Copyright 1987-2003 Adobe Systems Incorporated.
%%Version: 1.19 0
systemdict /languagelevel known dup
{ currentglobal false setglobal }
{ false }
ifelse
exch
userdict /Adobe_CoolType_Utility 2 copy known
{ 2 copy get dup maxlength 25 add dict copy }
{ 25 dict }
ifelse put
Adobe_CoolType_Utility
begin
/ct_Level2? exch def
/ct_Clone? 1183615869 internaldict dup
/CCRun known not
exch /eCCRun known not
ct_Level2? and or def
ct_Level2?
{ globaldict begin currentglobal true setglobal }
if
/ct_AddStdCIDMap
ct_Level2?
{ {
((Hex) 57 StartData
0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0
7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60
d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8
cc36 74f4 1144 b13b 77) 0 () /SubFileDecode filter cvx exec
} }
{ {
<BAB431EA07F209EB8C4348311481D9D3F76E3D15246555577D87BC510ED54E
118C39697FA9F6DB58128E60EB8A12FA24D7CDD2FA94D221FA9EC8DA3E5E6A1C
4ACECC8C2D39C54E7C946031DD156C3A6B4A09AD29E1867A> eexec
} }
ifelse bind def
userdict /cid_extensions known
dup { cid_extensions /cid_UpdateDB known and } if
{
cid_extensions
begin
/cid_GetCIDSystemInfo
{
1 index type /stringtype eq
{ exch cvn exch }
if
cid_extensions
begin
dup load 2 index known
{
2 copy
cid_GetStatusInfo
dup null ne
{
1 index load
3 index get
dup null eq
{ pop pop cid_UpdateDB }
{
exch
1 index /Created get eq
{ exch pop exch pop }
{ pop cid_UpdateDB }
ifelse
}
ifelse
}
{ pop cid_UpdateDB }
ifelse
}
{ cid_UpdateDB }
ifelse
end
} bind def
end
}
if
ct_Level2?
{ end setglobal }
if
/ct_UseNativeCapability? systemdict /composefont known def
/ct_MakeOCF 35 dict def
/ct_Vars 25 dict def
/ct_GlyphDirProcs 6 dict def
/ct_BuildCharDict 15 dict dup
begin
/charcode 2 string def
/dst_string 1500 string def
/nullstring () def
/usewidths? true def
end def
ct_Level2? { setglobal } { pop } ifelse
ct_GlyphDirProcs
begin
/GetGlyphDirectory
{
systemdict /languagelevel known
{ pop /CIDFont findresource /GlyphDirectory get }
{
1 index /CIDFont findresource /GlyphDirectory
get dup type /dicttype eq
{
dup dup maxlength exch length sub 2 index lt
{
dup length 2 index add dict copy 2 index
/CIDFont findresource/GlyphDirectory 2 index put
}
if
}
if
exch pop exch pop
}
ifelse
+
} def
/+
{
systemdict /languagelevel known
{
currentglobal false setglobal
3 dict begin
/vm exch def
}
{ 1 dict begin }
ifelse
/$ exch def
systemdict /languagelevel known
{
vm setglobal
/gvm currentglobal def
$ gcheck setglobal
}
if
? { $ begin } if
} def
/? { $ type /dicttype eq } def
/| {
userdict /Adobe_CoolType_Data known
{
Adobe_CoolType_Data /AddWidths? known
{
currentdict Adobe_CoolType_Data
begin
begin
AddWidths?
{
Adobe_CoolType_Data /CC 3 index put
? { def } { $ 3 1 roll put } ifelse
CC charcode exch 1 index 0 2 index 256 idiv put
1 index exch 1 exch 256 mod put
stringwidth 2 array astore
currentfont /Widths get exch CC exch put
}
{ ? { def } { $ 3 1 roll put } ifelse }
ifelse
end
end
}
{ ? { def } { $ 3 1 roll put } ifelse } ifelse
}
{ ? { def } { $ 3 1 roll put } ifelse }
ifelse
} def
/!
{
? { end } if
systemdict /languagelevel known
{ gvm setglobal }
if
end
} def
/: { string currentfile exch readstring pop } executeonly def
end
ct_MakeOCF
begin
/ct_cHexEncoding
[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
/ct_CID_STR_SIZE 8000 def
/ct_mkocfStr100 100 string def
/ct_defaultFontMtx [.001 0 0 .001 0 0] def
/ct_1000Mtx [1000 0 0 1000 0 0] def
/ct_raise {exch cvx exch errordict exch get exec stop} bind def
/ct_reraise
{ cvx $error /errorname get (Error: ) print dup ( ) cvs print
errordict exch get exec stop
} bind def
/ct_cvnsi
{
1 index add 1 sub 1 exch 0 4 1 roll
{
2 index exch get
exch 8 bitshift
add
}
for
exch pop
} bind def
/ct_GetInterval
{
Adobe_CoolType_Utility /ct_BuildCharDict get
begin
/dst_index 0 def
dup dst_string length gt
{ dup string /dst_string exch def }
if
1 index ct_CID_STR_SIZE idiv
/arrayIndex exch def
2 index arrayIndex get
2 index
arrayIndex ct_CID_STR_SIZE mul
sub
{
dup 3 index add 2 index length le
{
2 index getinterval
dst_string dst_index 2 index putinterval
length dst_index add /dst_index exch def
exit
}
{
1 index length 1 index sub
dup 4 1 roll
getinterval
dst_string dst_index 2 index putinterval
pop dup dst_index add /dst_index exch def
sub
/arrayIndex arrayIndex 1 add def
2 index dup length arrayIndex gt
{ arrayIndex get }
{
pop
exit
}
ifelse
0
}
ifelse
}
loop
pop pop pop
dst_string 0 dst_index getinterval
end
} bind def
ct_Level2?
{
/ct_resourcestatus
currentglobal mark true setglobal
{ /unknowninstancename /Category resourcestatus }
stopped
{ cleartomark setglobal true }
{ cleartomark currentglobal not exch setglobal }
ifelse
{
{
mark 3 1 roll /Category findresource
begin
ct_Vars /vm currentglobal put
({ResourceStatus} stopped) 0 () /SubFileDecode filter cvx exec
{ cleartomark false }
{ { 3 2 roll pop true } { cleartomark false } ifelse }
ifelse
ct_Vars /vm get setglobal
end
}
}
{ { resourcestatus } }
ifelse bind def
/CIDFont /Category ct_resourcestatus
{ pop pop }
{
currentglobal true setglobal
/Generic /Category findresource
dup length dict copy
dup /InstanceType /dicttype put
/CIDFont exch /Category defineresource pop
setglobal
}
ifelse
ct_UseNativeCapability?
{
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/CMapName /Identity-H def
/CMapVersion 1.000 def
/CMapType 1 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
1 begincidrange
<0000> <FFFF> 0
endcidrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
}
if
}
{
/ct_Category 2 dict begin
/CIDFont 10 dict def
/ProcSet 2 dict def
currentdict
end
def
/defineresource
{
ct_Category 1 index 2 copy known
{
get
dup dup maxlength exch length eq
{
dup length 10 add dict copy
ct_Category 2 index 2 index put
}
if
3 index 3 index put
pop exch pop
}
{ pop pop /defineresource /undefined ct_raise }
ifelse
} bind def
/findresource
{
ct_Category 1 index 2 copy known
{
get
2 index 2 copy known
{ get 3 1 roll pop pop}
{ pop pop /findresource /undefinedresource ct_raise }
ifelse
}
{ pop pop /findresource /undefined ct_raise }
ifelse
} bind def
/resourcestatus
{
ct_Category 1 index 2 copy known
{
get
2 index known
exch pop exch pop
{
0 -1 true
}
{
false
}
ifelse
}
{ pop pop /findresource /undefined ct_raise }
ifelse
} bind def
/ct_resourcestatus /resourcestatus load def
}
ifelse
/ct_CIDInit 2 dict
begin
/ct_cidfont_stream_init
{
{
dup (Binary) eq
{
pop
null
currentfile
ct_Level2?
{
{ cid_BYTE_COUNT () /SubFileDecode filter }
stopped
{ pop pop pop }
if
}
if
/readstring load
exit
}
if
dup (Hex) eq
{
pop
currentfile
ct_Level2?
{
{ null exch /ASCIIHexDecode filter /readstring }
stopped
{ pop exch pop (>) exch /readhexstring }
if
}
{ (>) exch /readhexstring }
ifelse
load
exit
}
if
/StartData /typecheck ct_raise
}
loop
cid_BYTE_COUNT ct_CID_STR_SIZE le
{
2 copy cid_BYTE_COUNT string exch exec
pop
1 array dup
3 -1 roll
0 exch put
}
{
cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi
dup array exch 2 sub 0 exch 1 exch
{
2 copy
5 index
ct_CID_STR_SIZE
string
6 index exec
pop
put
pop
}
for
2 index
cid_BYTE_COUNT ct_CID_STR_SIZE mod string
3 index exec
pop
1 index exch
1 index length 1 sub
exch put
}
ifelse
cid_CIDFONT exch /GlyphData exch put
2 index null eq
{
pop pop pop
}
{
pop /readstring load
1 string exch
{
3 copy exec
pop
dup length 0 eq
{
pop pop pop pop pop
true exit
}
if
4 index
eq
{
pop pop pop pop
false exit
}
if
}
loop
pop
}
ifelse
} bind def
/StartData
{
mark
{
currentdict
dup /FDArray get 0 get /FontMatrix get
0 get 0.001 eq
{
dup /CDevProc known not
{
/CDevProc 1183615869 internaldict /stdCDevProc 2 copy known
{ get }
{
pop pop
{ pop pop pop pop pop 0 -1000 7 index 2 div 880 }
}
ifelse
def
}
if
}
{
/CDevProc
{
pop pop pop pop pop
0
1 cid_temp /cid_CIDFONT get
/FDArray get 0 get
/FontMatrix get 0 get div
7 index 2 div
1 index 0.88 mul
} def
}
ifelse
/cid_temp 15 dict def
cid_temp
begin
/cid_CIDFONT exch def
3 copy pop
dup /cid_BYTE_COUNT exch def 0 gt
{
ct_cidfont_stream_init
FDArray
{
/Private get
dup /SubrMapOffset known
{
begin
/Subrs SubrCount array def
Subrs
SubrMapOffset
SubrCount
SDBytes
ct_Level2?
{
currentdict dup /SubrMapOffset undef
dup /SubrCount undef
/SDBytes undef
}
if
end
/cid_SD_BYTES exch def
/cid_SUBR_COUNT exch def
/cid_SUBR_MAP_OFFSET exch def
/cid_SUBRS exch def
cid_SUBR_COUNT 0 gt
{
GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval
0 cid_SD_BYTES ct_cvnsi
0 1 cid_SUBR_COUNT 1 sub
{
exch 1 index
1 add
cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add
GlyphData exch cid_SD_BYTES ct_GetInterval
0 cid_SD_BYTES ct_cvnsi
cid_SUBRS 4 2 roll
GlyphData exch
4 index
1 index
sub
ct_GetInterval
dup length string copy put
}
for
pop
}
if
}
{ pop }
ifelse
}
forall
}
if
cleartomark pop pop
end
CIDFontName currentdict /CIDFont defineresource pop
end end
}
stopped
{ cleartomark /StartData ct_reraise }
if
} bind def
currentdict
end def
/ct_saveCIDInit
{
/CIDInit /ProcSet ct_resourcestatus
{ true }
{ /CIDInitC /ProcSet ct_resourcestatus }
ifelse
{
pop pop
/CIDInit /ProcSet findresource
ct_UseNativeCapability?
{ pop null }
{ /CIDInit ct_CIDInit /ProcSet defineresource pop }
ifelse
}
{ /CIDInit ct_CIDInit /ProcSet defineresource pop null }
ifelse
ct_Vars exch /ct_oldCIDInit exch put
} bind def
/ct_restoreCIDInit
{
ct_Vars /ct_oldCIDInit get dup null ne
{ /CIDInit exch /ProcSet defineresource pop }
{ pop }
ifelse
} bind def
/ct_BuildCharSetUp
{
1 index
begin
CIDFont
begin
Adobe_CoolType_Utility /ct_BuildCharDict get
begin
/ct_dfCharCode exch def
/ct_dfDict exch def
CIDFirstByte ct_dfCharCode add
dup CIDCount ge
{ pop 0 }
if
/cid exch def
{
GlyphDirectory cid 2 copy known
{ get }
{ pop pop nullstring }
ifelse
dup length FDBytes sub 0 gt
{
dup
FDBytes 0 ne
{ 0 FDBytes ct_cvnsi }
{ pop 0 }
ifelse
/fdIndex exch def
dup length FDBytes sub FDBytes exch getinterval
/charstring exch def
exit
}
{
pop
cid 0 eq
{ /charstring nullstring def exit }
if
/cid 0 def
}
ifelse
}
loop
} def
/ct_SetCacheDevice
{
0 0 moveto
dup stringwidth
3 -1 roll
true charpath
pathbbox
0 -1000
7 index 2 div 880
setcachedevice2
0 0 moveto
} def
/ct_CloneSetCacheProc
{
1 eq
{
stringwidth
pop -2 div -880
0 -1000 setcharwidth
moveto
}
{
usewidths?
{
currentfont /Widths get cid
2 copy known
{ get exch pop aload pop }
{ pop pop stringwidth }
ifelse
}
{ stringwidth }
ifelse
setcharwidth
0 0 moveto
}
ifelse
} def
/ct_Type3ShowCharString
{
ct_FDDict fdIndex 2 copy known
{ get }
{
currentglobal 3 1 roll
1 index gcheck setglobal
ct_Type1FontTemplate dup maxlength dict copy
begin
FDArray fdIndex get
dup /FontMatrix 2 copy known
{ get }
{ pop pop ct_defaultFontMtx }
ifelse
/FontMatrix exch dup length array copy def
/Private get
/Private exch def
/Widths rootfont /Widths get def
/CharStrings 1 dict dup /.notdef
<d841272cf18f54fc13> dup length string copy put def
currentdict
end
/ct_Type1Font exch definefont
dup 5 1 roll put
setglobal
}
ifelse
dup /CharStrings get 1 index /Encoding get
ct_dfCharCode get charstring put
rootfont /WMode 2 copy known
{ get }
{ pop pop 0 }
ifelse
exch
1000 scalefont setfont
ct_str1 0 ct_dfCharCode put
ct_str1 exch ct_dfSetCacheProc
ct_SyntheticBold
{
currentpoint
ct_str1 show
newpath
moveto
ct_str1 true charpath
ct_StrokeWidth setlinewidth
stroke
}
{ ct_str1 show }
ifelse
} def
/ct_Type4ShowCharString
{
ct_dfDict ct_dfCharCode charstring
FDArray fdIndex get
dup /FontMatrix get dup ct_defaultFontMtx ct_matrixeq not
{ ct_1000Mtx matrix concatmatrix concat }
{ pop }
ifelse
/Private get
Adobe_CoolType_Utility /ct_Level2? get not
{
ct_dfDict /Private
3 -1 roll
{ put }
1183615869 internaldict /superexec get exec
}
if
1183615869 internaldict
Adobe_CoolType_Utility /ct_Level2? get
{ 1 index }
{ 3 index /Private get mark 6 1 roll }
ifelse
dup /RunInt known
{ /RunInt get }
{ pop /CCRun }
ifelse
get exec
Adobe_CoolType_Utility /ct_Level2? get not
{ cleartomark }
if
} bind def
/ct_BuildCharIncremental
{
{
Adobe_CoolType_Utility /ct_MakeOCF get begin
ct_BuildCharSetUp
ct_ShowCharString
}
stopped
{ stop }
if
end
end
end
end
} bind def
/BaseFontNameStr (BF00) def
/ct_Type1FontTemplate 14 dict
begin
/FontType 1 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/FontBBox [-250 -250 1250 1250] def
/Encoding ct_cHexEncoding def
/PaintType 0 def
currentdict
end def
/BaseFontTemplate 11 dict
begin
/FontMatrix [0.001 0 0 0.001 0 0] def
/FontBBox [-250 -250 1250 1250] def
/Encoding ct_cHexEncoding def
/BuildChar /ct_BuildCharIncremental load def
ct_Clone?
{
/FontType 3 def
/ct_ShowCharString /ct_Type3ShowCharString load def
/ct_dfSetCacheProc /ct_CloneSetCacheProc load def
/ct_SyntheticBold false def
/ct_StrokeWidth 1 def
}
{
/FontType 4 def
/Private 1 dict dup /lenIV 4 put def
/CharStrings 1 dict dup /.notdef <d841272cf18f54fc13> put def
/PaintType 0 def
/ct_ShowCharString /ct_Type4ShowCharString load def
}
ifelse
/ct_str1 1 string def
currentdict
end def
/BaseFontDictSize BaseFontTemplate length 5 add def
/ct_matrixeq
{
true 0 1 5
{
dup 4 index exch get exch 3 index exch get eq and
dup not
{ exit }
if
}
for
exch pop exch pop
} bind def
/ct_makeocf
{
15 dict
begin
exch /WMode exch def
exch /FontName exch def
/FontType 0 def
/FMapType 2 def
dup /FontMatrix known
{ dup /FontMatrix get /FontMatrix exch def }
{ /FontMatrix matrix def }
ifelse
/bfCount 1 index /CIDCount get 256 idiv 1 add
dup 256 gt { pop 256} if def
/Encoding
256 array 0 1 bfCount 1 sub { 2 copy dup put pop } for
bfCount 1 255 { 2 copy bfCount put pop } for
def
/FDepVector bfCount dup 256 lt { 1 add } if array def
BaseFontTemplate BaseFontDictSize dict copy
begin
/CIDFont exch def
CIDFont /FontBBox known
{ CIDFont /FontBBox get /FontBBox exch def }
if
CIDFont /CDevProc known
{ CIDFont /CDevProc get /CDevProc exch def }
if
currentdict
end
BaseFontNameStr 3 (0) putinterval
0 1 bfCount dup 256 eq { 1 sub } if
{
FDepVector exch
2 index BaseFontDictSize dict copy
begin
dup /CIDFirstByte exch 256 mul def
FontType 3 eq
{ /ct_FDDict 2 dict def }
if
currentdict
end
1 index 16
BaseFontNameStr 2 2 getinterval cvrs pop
BaseFontNameStr exch definefont
put
}
for
ct_Clone?
{ /Widths 1 index /CIDFont get /GlyphDirectory get length dict def }
if
FontName
currentdict
end
definefont
ct_Clone?
{
gsave
dup 1000 scalefont setfont
ct_BuildCharDict
begin
/usewidths? false def
currentfont /Widths get
begin
exch /CIDFont get /GlyphDirectory get
{
pop
dup charcode exch 1 index 0 2 index 256 idiv put
1 index exch 1 exch 256 mod put
stringwidth 2 array astore def
}
forall
end
/usewidths? true def
end
grestore
}
{ exch pop }
ifelse
} bind def
/ct_ComposeFont
{
ct_UseNativeCapability?
{
2 index /CMap ct_resourcestatus
{ pop pop exch pop }
{
/CIDInit /ProcSet findresource
begin
12 dict
begin
begincmap
/CMapName 3 index def
/CMapVersion 1.000 def
/CMapType 1 def
exch /WMode exch def
/CIDSystemInfo 3 dict dup
begin
/Registry (Adobe) def
/Ordering
CMapName ct_mkocfStr100 cvs
(Adobe-) search
{
pop pop
(-) search
{
dup length string copy
exch pop exch pop
}
{ pop (Identity)}
ifelse
}
{ pop (Identity) }
ifelse
def
/Supplement 0 def
end def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
1 begincidrange
<0000> <FFFF> 0
endcidrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
}
ifelse
composefont
}
{
3 2 roll pop
0 get /CIDFont findresource
ct_makeocf
}
ifelse
} bind def
/ct_MakeIdentity
{
ct_UseNativeCapability?
{
1 index /CMap ct_resourcestatus
{ pop pop }
{
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CMapName 2 index def
/CMapVersion 1.000 def
/CMapType 1 def
/CIDSystemInfo 3 dict dup
begin
/Registry (Adobe) def
/Ordering
CMapName ct_mkocfStr100 cvs
(Adobe-) search
{
pop pop
(-) search
{ dup length string copy exch pop exch pop }
{ pop (Identity) }
ifelse
}
{ pop (Identity) }
ifelse
def
/Supplement 0 def
end def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
1 begincidrange
<0000> <FFFF> 0
endcidrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
}
ifelse
composefont
}
{
exch pop
0 get /CIDFont findresource
ct_makeocf
}
ifelse
} bind def
currentdict readonly pop
end
end
%%EndResource
%%BeginFile: MMFauxFont.prc
%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated.
%%All Rights Reserved.
userdict /ct_EuroDict 10 dict put
ct_EuroDict begin
/ct_CopyFont
{
{ 1 index /FID ne {def} {pop pop} ifelse} forall
} def
/ct_GetGlyphOutline
{
gsave
initmatrix newpath
exch findfont dup
length 1 add dict
begin
ct_CopyFont
/Encoding Encoding dup length array copy
dup
4 -1 roll
0 exch put
def
currentdict
end
/ct_EuroFont exch definefont
1000 scalefont setfont
0 0 moveto
[
<00> stringwidth
<00> false charpath
pathbbox
[
{/m cvx} {/l cvx} {/c cvx} {/cp cvx} pathforall
grestore
counttomark 8 add
}
def
/ct_MakeGlyphProc
{
] cvx
/ct_PSBuildGlyph cvx
] cvx
} def
/ct_PSBuildGlyph
{
gsave
8 -1 roll pop
7 1 roll
6 -2 roll ct_FontMatrix transform 6 2 roll
4 -2 roll ct_FontMatrix transform 4 2 roll
ct_FontMatrix transform
currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
dup 9 1 roll
{
currentdict /StrokeWidth 2 copy known
{
get 2 div
0 ct_FontMatrix dtransform pop
5 1 roll
4 -1 roll 4 index sub
4 1 roll
3 -1 roll 4 index sub
3 1 roll
exch 4 index add exch
4 index add
5 -1 roll pop
}
{
pop pop
}
ifelse
}
if
setcachedevice
ct_FontMatrix concat
ct_PSPathOps begin
exec
end
{
currentdict /StrokeWidth 2 copy known
{ get }
{ pop pop 0 }
ifelse
setlinewidth stroke
}
{
fill
}
ifelse
grestore
} def
/ct_PSPathOps 4 dict dup begin
/m {moveto} def
/l {lineto} def
/c {curveto} def
/cp {closepath} def
end
def
/ct_matrix1000 [1000 0 0 1000 0 0] def
/ct_AddGlyphProc
{
2 index findfont dup length 4 add dict
begin
ct_CopyFont
/CharStrings CharStrings dup length 1 add dict copy
begin
3 1 roll def
currentdict
end
def
/ct_FontMatrix ct_matrix1000 FontMatrix matrix concatmatrix def
/ct_PSBuildGlyph /ct_PSBuildGlyph load def
/ct_PSPathOps /ct_PSPathOps load def
currentdict
end
definefont pop
}
def
systemdict /languagelevel known
{
/ct_AddGlyphToPrinterFont {
2 copy
ct_GetGlyphOutline 3 add -1 roll restore
ct_MakeGlyphProc
ct_AddGlyphProc
} def
}
{
/ct_AddGlyphToPrinterFont {
pop pop restore
Adobe_CTFauxDict /$$$FONTNAME get
/Euro
Adobe_CTFauxDict /$$$SUBSTITUTEBASE get
ct_EuroDict exch get
ct_AddGlyphProc
} def
} ifelse
/AdobeSansMM
{
556 0 24 -19 541 703
{
541 628 m
510 669 442 703 354 703 c
201 703 117 607 101 444 c
50 444 l
25 372 l
97 372 l
97 301 l
49 301 l
24 229 l
103 229 l
124 67 209 -19 350 -19 c
435 -19 501 25 509 32 c
509 131 l
492 105 417 60 343 60 c
267 60 204 127 197 229 c
406 229 l
430 301 l
191 301 l
191 372 l
455 372 l
479 444 l
194 444 l
201 531 245 624 348 624 c
433 624 484 583 509 534 c
cp
556 0 m
}
ct_PSBuildGlyph
} def
/AdobeSerifMM
{
500 0 10 -12 484 692
{
347 298 m
171 298 l
170 310 170 322 170 335 c
170 362 l
362 362 l
374 403 l
172 403 l
184 580 244 642 308 642 c
380 642 434 574 457 457 c
481 462 l
474 691 l
449 691 l
433 670 429 657 410 657 c
394 657 360 692 299 692 c
204 692 94 604 73 403 c
22 403 l
10 362 l
70 362 l
69 352 69 341 69 330 c
69 319 69 308 70 298 c
22 298 l
10 257 l
73 257 l
97 57 216 -12 295 -12 c
364 -12 427 25 484 123 c
458 142 l
425 101 384 37 316 37 c
256 37 189 84 173 257 c
335 257 l
cp
500 0 m
}
ct_PSBuildGlyph
} def
end
%%EndFile
/currentpacking where{pop currentpacking true setpacking}if
%%BeginResource: procset pdfvars 6.0 1
%%Copyright: Copyright 1987-2002 Adobe Systems Incorporated. All Rights Reserved.
%%Title: definition of dictionary of variables used by PDF & PDFText procsets
userdict /PDF 162 dict put
userdict /PDFVars 89 dict dup begin put
/docSetupDone false def
/InitAll 0 def
/TermAll 0 def
/DocInitAll 0 def
/DocTermAll 0 def
/_pdfEncodings 2 array def
/_pdf_str1 1 string def
/_pdf_i 0 def
/_pdf_na 0 def
/_pdf_showproc 0 def
/_italMtx [1 0 .212557 1 0 0] def
/_italMtx_WMode1 [1 -.212557 0 1 0 0] def
/_italMtxType0 [1 0 .1062785 1 0 0] def
/_italMtx_WMode1Type0 [1 -.1062785 0 1 0 0] def
/_basefont 0 def
/_basefonto 0 def
/_pdf_oldCIDInit null def
/_pdf_FontDirectory 30 dict def
/_categories 10 dict def
/_sa? true def
/_ColorSep5044? false def
/nulldict 0 dict def
/_processColors 0 def
/overprintstack null def
/_defaulttransfer currenttransfer def
/_defaultflatness currentflat def
/_defaulthalftone null def
/_defaultcolortransfer null def
/_defaultblackgeneration null def
/_defaultundercolorremoval null def
/_defaultcolortransfer null def
PDF begin
[/c/cs/cm/d/d0/f/h/i/j/J/l/m/M/n/q/Q/re/ri/S/sc/sh/Tf/w/W
/applyInterpFunc/applystitchFunc/domainClip/encodeInput
/initgs/int/limit/rangeClip
/defineRes/undefineRes/findRes/setSA/pl
/? /! /| /: /+ /GetGlyphDirectory
/pdf_flushFilters /pdf_readstring /pdf_dictOp /pdf_image /pdf_maskedImage
/pdf_shfill /pdf_sethalftone
] {null def} bind forall
end
end
%%EndResource
PDFVars begin PDF begin
%%BeginResource: procset pdfutil 6.0 1
%%Copyright: Copyright 1993-2001 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Basic utilities used by other PDF procsets
/bd {bind def} bind def
/ld {load def} bd
/bld {
dup length dict begin
{ null def } forall
bind
end
def
} bd
/dd { PDFVars 3 1 roll put } bd
/xdd { exch dd } bd
/Level2?
systemdict /languagelevel known
{ systemdict /languagelevel get 2 ge } { false } ifelse
def
/Level1? Level2? not def
/Level3?
systemdict /languagelevel known
{systemdict /languagelevel get 3 eq } { false } ifelse
def
/getifknown {
2 copy known { get true } { pop pop false } ifelse
} bd
/here {
currentdict exch getifknown
} bd
/isdefined? { where { pop true } { false } ifelse } bd
%%EndResource
%%BeginResource: procset pdf 6.0 1
%%Copyright: Copyright 1998-2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: General operators for PDF, common to all Language Levels.
/cm { matrix astore concat } bd
/d /setdash ld
/f /fill ld
/h /closepath ld
/i {dup 0 eq {pop _defaultflatness} if setflat} bd
/j /setlinejoin ld
/J /setlinecap ld
/M /setmiterlimit ld
/n /newpath ld
/S /stroke ld
/w /setlinewidth ld
/W /clip ld
/sg /setgray ld
/initgs {
0 setgray
[] 0 d
0 j
0 J
10 M
1 w
false setSA
/_defaulttransfer load settransfer
0 i
/RelativeColorimetric ri
newpath
} bd
/int {
dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul
exch pop add exch pop
} bd
/limit {
dup 2 index le { exch } if pop
dup 2 index ge { exch } if pop
} bd
/domainClip {
Domain aload pop 3 2 roll
limit
} [/Domain] bld
/applyInterpFunc {
0 1 DimOut 1 sub
{
dup C0 exch get exch
dup C1 exch get exch
3 1 roll
1 index sub
3 index
N exp mul add
exch
currentdict /Range_lo known
{
dup Range_lo exch get exch
Range_hi exch get
3 2 roll limit
}
{
pop
}
ifelse
exch
} for
pop
} [/DimOut /C0 /C1 /N /Range_lo /Range_hi] bld
/encodeInput {
NumParts 1 sub
0 1 2 index
{
dup Bounds exch get
2 index gt
{ exit }
{ dup
3 index eq
{ exit }
{ pop } ifelse
} ifelse
} for
3 2 roll pop
dup Bounds exch get exch
dup 1 add Bounds exch get exch
2 mul
dup Encode exch get exch
1 add Encode exch get
int
} [/NumParts /Bounds /Encode] bld
/rangeClip {
exch dup Range_lo exch get
exch Range_hi exch get
3 2 roll
limit
} [/Range_lo /Range_hi] bld
/applyStitchFunc {
Functions exch get exec
currentdict /Range_lo known {
0 1 DimOut 1 sub {
DimOut 1 add -1 roll
rangeClip
} for
} if
} [/Functions /Range_lo /DimOut] bld
/pdf_flushfilters
{
aload length
{ dup status
1 index currentfile ne and
{ dup flushfile closefile }
{ pop }
ifelse
} repeat
} bd
/pdf_readstring
{
1 index dup length 1 sub get
exch readstring pop
exch pdf_flushfilters
} bind def
/pdf_dictOp
{
3 2 roll
10 dict copy
begin
_Filters dup length 1 sub get def
currentdict exch exec
_Filters pdf_flushfilters
end
} [/_Filters] bld
/pdf_imagemask {{imagemask} /DataSource pdf_dictOp} bd
/pdf_shfill {{sh} /DataSource pdf_dictOp} bd
/pdf_sethalftone {{sethalftone} /Thresholds pdf_dictOp} bd
/masks [ 2#10000000
2#11000000
2#11100000
2#11110000
2#11111000
2#11111100
2#11111110
2#11111111 ] def
/addNBits
{
/numBits exch def
/byte exch def
OutBitOffset numBits add 8 gt
{
byte OutBitOffset 8 sub bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutByteIndex OutByteIndex 1 add def
/bitsDoneSoFar OutBitOffset def
/OutBitOffset numBits 8 OutBitOffset sub sub def
OutBitOffset 0 gt
{
byte bitsDoneSoFar bitshift
masks numBits bitsDoneSoFar sub get and
OutBuffer OutByteIndex 3 -1 roll put
} if
}
{
byte masks numBits 1 sub get and
OutBitOffset neg bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutBitOffset OutBitOffset numBits add def
OutBitOffset 8 eq
{
/OutBitOffset 0 def
/OutByteIndex OutByteIndex 1 add def
} if
} ifelse
} bind def
/DevNNFilter
{
/InBuffer Width NumComps mul BitsPerComponent mul 7 add 8 idiv string def
AllSource InBuffer readstring pop pop
/outlen Width NewNumComps mul BitsPerComponent mul 7 add 8 idiv def
/OutBuffer outlen string def
0 1 outlen 1 sub { OutBuffer exch 0 put } for
/InByteIndex 0 def
/InBitOffset 0 def
/OutByteIndex 0 def
/OutBitOffset 0 def
/KeepArray NumComps array def
0 1 NumComps 1 sub { KeepArray exch true put } for
DevNNones { KeepArray exch false put } forall
Width {
KeepArray
{
{
/bitsLeft BitsPerComponent def
{
bitsLeft 0 le { exit } if
/bitsToDo 8 InBitOffset sub dup bitsLeft gt { pop bitsLeft } if def
InBuffer InByteIndex get
InBitOffset bitshift
bitsToDo addNBits
/bitsLeft bitsLeft bitsToDo sub def
InBitOffset bitsToDo add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
} loop
}
{
InBitOffset BitsPerComponent add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
}
ifelse
}
forall
} repeat
OutBuffer
} bd
/pdf_image
{
20 dict copy
begin
/UnusedNones where { /UnusedNones get}{false} ifelse
{
/NumComps Decode length 2 div cvi def
/OrigDecode Decode def
/NumNones DevNNones length def
/NewNumComps NumComps NumNones sub def
/Decode NewNumComps 2 mul cvi array def
/devNNindx 0 def
/decIndx 0 def
/cmpIndx 0 def
NumComps {
cmpIndx DevNNones devNNindx get eq
{
/devNNindx devNNindx 1 add dup NumNones eq {pop 0} if def
}
{
Decode decIndx OrigDecode cmpIndx 2 mul get put
Decode decIndx 1 add OrigDecode cmpIndx 2 mul 1 add get put
/decIndx decIndx 2 add def
} ifelse
/cmpIndx cmpIndx 1 add def
} repeat
_Filters dup length 1 sub get /AllSource exch def
/DataSource { DevNNFilter } def
}
{ _Filters dup length 1 sub get /DataSource exch def }
ifelse
currentdict image
_Filters pdf_flushfilters
end
} bd
/pdf_maskedImage
{
10 dict copy begin
/miDict currentdict def
/DataDict DataDict 10 dict copy def
DataDict begin
/DataSource
_Filters dup length 1 sub get
def
miDict image
_Filters pdf_flushfilters
end
miDict /InterleaveType get 3 eq
{ MaskDict /DataSource get dup type /filetype eq { closefile } { pop } ifelse }
if
end
} [/miDict /DataDict /_Filters] bld
/RadialShade {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/r2 exch def
/c2y exch def
/c2x exch def
/r1 exch def
/c1y exch def
/c1x exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
c1x c2x eq
{
c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope c2y c1y sub c2x c1x sub div def
/theta slope 1 atan def
c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
c1x c1y translate
theta rotate
-90 rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
/max { 2 copy gt { pop } {exch pop} ifelse } bind def
/min { 2 copy lt { pop } {exch pop} ifelse } bind def
rampdict begin
40 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
c1x c1y translate
theta rotate
-90 rotate
/c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
/c1y 0 def
/c1x 0 def
/c2x 0 def
ext0 {
0 getrampcolor
c2y r2 add r1 sub 0.0001 lt
{
c1x c1y r1 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2y r1 add r2 le
{
c1x c1y r1 0 360 arc
fill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r1 neg def
/p1y c1y def
/p2x r1 def
/p2y c1y def
p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y p1x SS1 div neg def
/SS2 90 theta sub dup sin exch cos div def
/p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y p2x SS2 div neg def
r1 r2 gt
{
/L1maxX p1x yMin p1y sub SS1 div add def
/L2maxX p2x yMin p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
c1x c2x sub dup mul
c1y c2y sub dup mul
add 0.5 exp
0 dtransform
dup mul exch dup mul add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
/hires exch def
hires mul
/numpix exch def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
/xInc c2x c1x sub numsteps div def
/yInc c2y c1y sub numsteps div def
/rInc r2 r1 sub numsteps div def
/cx c1x def
/cy c1y def
/radius r1 def
newpath
xInc 0 eq yInc 0 eq rInc 0 eq and and
{
0 getrampcolor
cx cy radius 0 360 arc
stroke
NumSamples 1 sub getrampcolor
cx cy radius 72 hires div add 0 360 arc
0 setlinewidth
stroke
}
{
0
numsteps
{
dup
subsampling { round } if
getrampcolor
cx cy radius 0 360 arc
/cx cx xInc add def
/cy cy yInc add def
/radius radius rInc add def
cx cy radius 360 0 arcn
eofill
rampIndxInc add
}
repeat
pop
} ifelse
ext1 {
c2y r2 add r1 lt
{
c2x c2y r2 0 360 arc
fill
}
{
c2y r1 add r2 sub 0.0001 le
{
c2x c2y r2 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r2 neg def
/p1y c2y def
/p2x r2 def
/p2y c2y def
p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y c2y p1x SS1 div sub def
/SS2 90 theta sub dup sin exch cos div def
/p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y c2y p2x SS2 div sub def
r1 r2 lt
{
/L1maxX p1x yMax p1y sub SS1 div add def
/L2maxX p2x yMax p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
grestore
grestore
end
end
end
} ifelse
} bd
/GenStrips {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/y2 exch def
/x2 exch def
/y1 exch def
/x1 exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
x1 x2 eq
{
y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope y2 y1 sub x2 x1 sub div def
/theta slope 1 atan def
x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
x1 y1 translate
theta rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
rampdict begin
20 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
x1 y1 translate
theta rotate
/xStart 0 def
/xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
/ySpan yMax yMin sub def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
xStart 0 transform
xEnd 0 transform
3 -1 roll
sub dup mul
3 1 roll
sub dup mul
add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
mul
/numpix exch def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
ext0 {
0 getrampcolor
xMin xStart lt
{ xMin yMin xMin neg ySpan rectfill } if
} if
/xInc xEnd xStart sub numsteps div def
/x xStart def
0
numsteps
{
dup
subsampling { round } if
getrampcolor
x yMin xInc ySpan rectfill
/x x xInc add def
rampIndxInc add
}
repeat
pop
ext1 {
xMax xEnd gt
{ xEnd yMin xMax xEnd sub ySpan rectfill } if
} if
grestore
grestore
end
end
end
} ifelse
} bd
/currentdistillerparams where { pop currentdistillerparams /CoreDistVersion get 5000 lt}{true}ifelse
{
/PDFMark5 {cleartomark} bd
}
{
/PDFMark5 {pdfmark} bd
}ifelse
/ReadByPDFMark5
{
2 dict begin
/makerString exch def string /tmpString exch def
{
currentfile tmpString readline pop
makerString anchorsearch
{
pop pop cleartomark exit
}
{
3 copy /PUT PDFMark5 pop 2 copy (\n) /PUT PDFMark5
} ifelse
}loop
end
}bd
%%EndResource
%%BeginResource: procset pdflev2 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: PDF operators, with code specific for Level 2
/docinitialize {
PDF begin
/_defaulthalftone currenthalftone dd
/_defaultblackgeneration currentblackgeneration dd
/_defaultundercolorremoval currentundercolorremoval dd
/_defaultcolortransfer [currentcolortransfer] dd
/_defaulttransfer currenttransfer dd
end
PDFVars /docSetupDone true put
} bd
/initialize {
PDFVars /docSetupDone get {
_defaulthalftone sethalftone
/_defaultblackgeneration load setblackgeneration
/_defaultundercolorremoval load setundercolorremoval
_defaultcolortransfer aload pop setcolortransfer
} if
false setoverprint
} bd
/terminate { } bd
/c /curveto ld
/cs /setcolorspace ld
/l /lineto ld
/m /moveto ld
/q /gsave ld
/Q /grestore ld
/sc /setcolor ld
/setSA/setstrokeadjust ld
/re {
4 2 roll m
1 index 0 rlineto
0 exch rlineto
neg 0 rlineto
h
} bd
/concattransferfuncs {
[ 3 1 roll /exec load exch /exec load ] cvx
} bd
/concatandsettransfer {
/_defaulttransfer load concattransferfuncs settransfer
} bd
/concatandsetcolortransfer {
_defaultcolortransfer aload pop
8 -1 roll 5 -1 roll concattransferfuncs 7 1 roll
6 -1 roll 4 -1 roll concattransferfuncs 5 1 roll
4 -1 roll 3 -1 roll concattransferfuncs 3 1 roll
concattransferfuncs
setcolortransfer
} bd
/defineRes/defineresource ld
/undefineRes/undefineresource ld
/findRes/findresource ld
currentglobal
true systemdict /setglobal get exec
[/Function /ExtGState /Form /Shading /FunctionDictionary /MadePattern /PatternPrototype /DataSource /Image]
{ /Generic /Category findresource dup length dict copy /Category defineresource pop }
forall
systemdict /setglobal get exec
/ri
{
/findcolorrendering isdefined?
{
mark exch
findcolorrendering
counttomark 2 eq
{ type /booleantype eq
{ dup type /nametype eq
{ dup /ColorRendering resourcestatus
{ pop pop
dup /DefaultColorRendering ne
{
/ColorRendering findresource
setcolorrendering
} if
} if
} if
} if
} if
cleartomark
}
{ pop
} ifelse
} bd
/knownColorants? {
pop false
} bd
/getrampcolor {
cvi
/indx exch def
0 1 NumComp 1 sub {
dup
Samples exch get
dup type /stringtype eq { indx get } if
exch
Scaling exch get aload pop
3 1 roll
mul add
} for
setcolor
} bd
/sssetbackground { aload pop setcolor } bd
%%EndResource
%%BeginResource: procset pdftext 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Text operators for PDF
PDF /PDFText 78 dict dup begin put
/docinitialize
{
/resourcestatus where {
pop
/CIDParams /ProcSet resourcestatus {
pop pop
false /CIDParams /ProcSet findresource /SetBuildCompatible get exec
} if
} if
PDF begin
PDFText /_pdfDefineIdentity-H known
{ PDFText /_pdfDefineIdentity-H get exec}
if
end
} bd
/initialize {
PDFText begin
} bd
/terminate { end } bd
Level2?
{
/_safeput
{
3 -1 roll load 3 1 roll put
}
bd
}
{
/_safeput
{
2 index load dup dup length exch maxlength ge
{ dup length 5 add dict copy
3 index xdd
}
{ pop }
ifelse
3 -1 roll load 3 1 roll put
}
bd
}
ifelse
/pdf_has_composefont? systemdict /composefont known def
/CopyFont {
{
1 index /FID ne 2 index /UniqueID ne and
{ def } { pop pop } ifelse
} forall
} bd
/Type0CopyFont
{
exch
dup length dict
begin
CopyFont
[
exch
FDepVector
{
dup /FontType get 0 eq
{
1 index Type0CopyFont
/_pdfType0 exch definefont
}
{
/_pdfBaseFont exch
2 index exec
}
ifelse
exch
}
forall
pop
]
/FDepVector exch def
currentdict
end
} bd
Level2? {currentglobal true setglobal} if
/cHexEncoding
[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
Level2? {setglobal} if
/modEnc {
/_enc xdd
/_icode 0 dd
counttomark 1 sub -1 0
{
index
dup type /nametype eq
{
_enc _icode 3 -1 roll put
_icode 1 add
}
if
/_icode xdd
} for
cleartomark
_enc
} bd
/trEnc {
/_enc xdd
255 -1 0 {
exch dup -1 eq
{ pop /.notdef }
{ Encoding exch get }
ifelse
_enc 3 1 roll put
} for
pop
_enc
} bd
/TE {
/_i xdd
StandardEncoding 256 array copy modEnc
_pdfEncodings exch _i exch put
} bd
Level2?
{
/pdfPatchCStrings
{
currentdict /CharStrings known currentdict /FontType known and
{
FontType 1 eq CharStrings type /dicttype eq and
{
CharStrings /mu known CharStrings /mu1 known not and CharStrings wcheck and
{
CharStrings /mu get
type /stringtype eq
{
currentglobal
CharStrings /mu1
CharStrings /mu get
dup gcheck setglobal
dup length string copy
put
setglobal
} if
} if
} if
} if
} bd
}
{ /pdfPatchCStrings {} bd }
ifelse
/TZ
{
/_usePDFEncoding xdd
findfont
dup length 6 add dict
begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
/pdf_origFontName FontName def
/FontName exch def
currentdict /PaintType known
{ PaintType 2 eq {/PaintType 0 def} if }
if
_usePDFEncoding 0 ge
{
/Encoding _pdfEncodings _usePDFEncoding get def
pop
}
{
_usePDFEncoding -1 eq
{
counttomark 0 eq
{ pop }
{
Encoding 256 array copy
modEnc /Encoding exch def
}
ifelse
}
{
256 array
trEnc /Encoding exch def
}
ifelse
}
ifelse
pdf_EuroProcSet pdf_origFontName known
{
pdf_origFontName pdf_AddEuroGlyphProc
} if
Level2?
{
currentdict /pdf_origFontName undef
} if
FontName currentdict
end
definefont pop
}
bd
Level2?
{
/TZG
{
currentglobal true setglobal
2 index _pdfFontStatus
{
2 index findfont
false setglobal
3 index findfont
true setglobal
ne
{
2 index findfont dup rcheck
{
dup length dict begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
currentdict end
}
if
3 index exch definefont pop
}
if
} if
setglobal
TZ
} bd
}
{
/TZG {TZ} bd
} ifelse
Level2?
{
currentglobal false setglobal
userdict /pdftext_data 5 dict put
pdftext_data
begin
/saveStacks
{
pdftext_data
begin
/vmmode currentglobal def
false setglobal
count array astore /os exch def
end
countdictstack array dictstack pdftext_data exch /ds exch put
cleardictstack pdftext_data /dscount countdictstack put
pdftext_data /vmmode get setglobal
} bind def
/restoreStacks
{
pdftext_data /vmmode currentglobal put false setglobal
clear cleardictstack
pdftext_data /ds get dup
pdftext_data /dscount get 1 2 index length 1 sub
{ get begin dup } for
pop pop
pdftext_data /os get aload pop
pdftext_data /vmmode get setglobal
} bind def
/testForClonePrinterBug
{
currentglobal true setglobal
/undefinedCategory /Generic /Category findresource
dup length dict copy /Category defineresource pop
setglobal
pdftext_data /saveStacks get exec
pdftext_data /vmmode currentglobal put false setglobal
/undefined /undefinedCategory { resourcestatus } stopped
pdftext_data exch /bugFound exch put
pdftext_data /vmmode get setglobal
pdftext_data /restoreStacks get exec
pdftext_data /bugFound get
} bind def
end
setglobal
/pdf_resourcestatus
pdftext_data /testForClonePrinterBug get exec
{
{
pdftext_data /saveStacks get exec
pdftext_data /os get dup dup length 1 sub
dup 1 sub dup 0 lt { pop 0 } if
exch 1 exch { get exch dup } for
pop pop
{ resourcestatus }
stopped
{
clear cleardictstack pdftext_data /restoreStacks get exec
{ pop pop } stopped pop false
}
{
count array astore pdftext_data exch /results exch put
pdftext_data /restoreStacks get exec pop pop
pdftext_data /results get aload pop
}
ifelse
}
}
{ { resourcestatus } }
ifelse
bd
}
if
Level2?
{
/_pdfUndefineResource
{
currentglobal 3 1 roll
_pdf_FontDirectory 2 index 2 copy known
{undef}
{pop pop}
ifelse
1 index (pdf) exch _pdfConcatNames 1 index
1 index 1 _pdfConcatNames 1 index
5 index 1 _pdfConcatNames 1 index
4
{
2 copy pdf_resourcestatus
{
pop 2 lt
{2 copy findresource gcheck setglobal undefineresource}
{pop pop}
ifelse
}
{ pop pop}
ifelse
} repeat
setglobal
} bd
}
{
/_pdfUndefineResource { pop pop} bd
}
ifelse
Level2?
{
/_pdfFontStatus
{
currentglobal exch
/Font pdf_resourcestatus
{pop pop true}
{false}
ifelse
exch setglobal
} bd
}
{
/_pdfFontStatusString 50 string def
_pdfFontStatusString 0 (fonts/) putinterval
/_pdfFontStatus
{
FontDirectory 1 index known
{ pop true }
{
_pdfFontStatusString 6 42 getinterval
cvs length 6 add
_pdfFontStatusString exch 0 exch getinterval
{ status } stopped
{pop false}
{
{ pop pop pop pop true}
{ false }
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
Level2?
{
/_pdfCIDFontStatus
{
/CIDFont /Category pdf_resourcestatus
{
pop pop
/CIDFont pdf_resourcestatus
{pop pop true}
{false}
ifelse
}
{ pop false }
ifelse
} bd
}
if
/_pdfString100 100 string def
/_pdfComposeFontName
{
dup length 1 eq
{
0 get
1 index
type /nametype eq
{
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
2 index exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
exch pop
true
}
{
pop pop
false
}
ifelse
}
{
false
}
ifelse
dup {exch cvn exch} if
} bd
/_pdfConcatNames
{
exch
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
3 -1 roll exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
cvn
} bind def
/_pdfTextTempString 50 string def
/_pdfRegOrderingArray [(Adobe-Japan1) (Adobe-CNS1) (Adobe-Korea1) (Adobe-GB1)] def
/_pdf_CheckCIDSystemInfo
{
1 index _pdfTextTempString cvs
(Identity) anchorsearch
{
pop pop pop pop true
}
{
false
_pdfRegOrderingArray
{
2 index exch
anchorsearch
{ pop pop pop true exit}
{ pop }
ifelse
}
forall
exch pop
exch /CIDFont findresource
/CIDSystemInfo get
3 -1 roll /CMap findresource
/CIDSystemInfo get
exch
3 -1 roll
{
2 copy
/Supplement get
exch
dup type /dicttype eq
{/Supplement get}
{pop 0 }
ifelse
ge
}
{ true }
ifelse
{
dup /Registry get
2 index /Registry get eq
{
/Ordering get
exch /Ordering get
dup type /arraytype eq
{
1 index type /arraytype eq
{
true
1 index length 1 sub -1 0
{
dup 2 index exch get exch 3 index exch get ne
{ pop false exit}
if
} for
exch pop exch pop
}
{ pop pop false }
ifelse
}
{
eq
}
ifelse
}
{ pop pop false }
ifelse
}
{ pop pop false }
ifelse
}
ifelse
} bind def
pdf_has_composefont?
{
/_pdfComposeFont
{
2 copy _pdfComposeFontName not
{
2 index
}
if
(pdf) exch _pdfConcatNames
dup _pdfFontStatus
{ dup findfont 5 2 roll pop pop pop true}
{
4 1 roll
1 index /CMap pdf_resourcestatus
{
pop pop
true
}
{false}
ifelse
1 index true exch
{
_pdfCIDFontStatus not
{pop false exit}
if
}
forall
and
{
1 index 1 index 0 get _pdf_CheckCIDSystemInfo
{
3 -1 roll pop
2 index 3 1 roll
composefont true
}
{
pop pop exch pop false
}
ifelse
}
{
_pdfComposeFontName
{
dup _pdfFontStatus
{
exch pop
1 index exch
findfont definefont true
}
{
pop exch pop
false
}
ifelse
}
{
exch pop
false
}
ifelse
}
ifelse
{ true }
{
dup _pdfFontStatus
{ dup findfont true }
{ pop false }
ifelse
}
ifelse
}
ifelse
} bd
}
{
/_pdfComposeFont
{
_pdfComposeFontName not
{
dup
}
if
dup
_pdfFontStatus
{exch pop dup findfont true}
{
1 index
dup type /nametype eq
{pop}
{cvn}
ifelse
eq
{pop false}
{
dup _pdfFontStatus
{dup findfont true}
{pop false}
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
/_pdfStyleDicts 4 dict dup begin
/Adobe-Japan1 4 dict dup begin
Level2?
{
/Serif
/HeiseiMin-W3-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMin-W3}
{
/HeiseiMin-W3 _pdfCIDFontStatus
{/HeiseiMin-W3}
{/Ryumin-Light}
ifelse
}
ifelse
def
/SansSerif
/HeiseiKakuGo-W5-83pv-RKSJ-H _pdfFontStatus
{/HeiseiKakuGo-W5}
{
/HeiseiKakuGo-W5 _pdfCIDFontStatus
{/HeiseiKakuGo-W5}
{/GothicBBB-Medium}
ifelse
}
ifelse
def
/HeiseiMaruGo-W4-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMaruGo-W4}
{
/HeiseiMaruGo-W4 _pdfCIDFontStatus
{/HeiseiMaruGo-W4}
{
/Jun101-Light-RKSJ-H _pdfFontStatus
{ /Jun101-Light }
{ SansSerif }
ifelse
}
ifelse
}
ifelse
/RoundSansSerif exch def
/Default Serif def
}
{
/Serif /Ryumin-Light def
/SansSerif /GothicBBB-Medium def
{
(fonts/Jun101-Light-83pv-RKSJ-H) status
}stopped
{pop}{
{ pop pop pop pop /Jun101-Light }
{ SansSerif }
ifelse
/RoundSansSerif exch def
}ifelse
/Default Serif def
}
ifelse
end
def
/Adobe-Korea1 4 dict dup begin
/Serif /HYSMyeongJo-Medium def
/SansSerif /HYGoThic-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-GB1 4 dict dup begin
/Serif /STSong-Light def
/SansSerif /STHeiti-Regular def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-CNS1 4 dict dup begin
/Serif /MKai-Medium def
/SansSerif /MHei-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
end
def
/TZzero
{
/_wmode xdd
/_styleArr xdd
/_regOrdering xdd
3 copy
_pdfComposeFont
{
5 2 roll pop pop pop
}
{
[
0 1 _styleArr length 1 sub
{
_styleArr exch get
_pdfStyleDicts _regOrdering 2 copy known
{
get
exch 2 copy known not
{ pop /Default }
if
get
}
{
pop pop pop /Unknown
}
ifelse
}
for
]
exch pop
2 index 3 1 roll
_pdfComposeFont
{3 -1 roll pop}
{
findfont dup /FontName get exch
}
ifelse
}
ifelse
dup /WMode 2 copy known
{ get _wmode ne }
{ pop pop _wmode 1 eq}
ifelse
{
exch _wmode _pdfConcatNames
dup _pdfFontStatus
{ exch pop dup findfont false}
{ exch true }
ifelse
}
{
dup /FontType get 0 ne
}
ifelse
{
dup /FontType get 3 eq _wmode 1 eq and
{
_pdfVerticalRomanT3Font dup length 10 add dict copy
begin
/_basefont exch
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put dup 16#a5 /yen put dup 16#b4 /yen put}
if
def
FontName
currentdict
end
definefont
def
/Encoding _basefont /Encoding get def
/_fauxfont true def
}
{
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
FontType 0 ne
{
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put}
if
def
/_fauxfont true def
} if
} ifelse
/WMode _wmode def
dup dup /FontName exch def
currentdict
end
definefont pop
}
{
pop
}
ifelse
/_pdf_FontDirectory 3 1 roll _safeput
}
bd
Level2?
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
selectfont
} bd
}
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
exch findfont exch
dup type /arraytype eq
{makefont}
{scalefont}
ifelse
setfont
} bd
}
ifelse
/cshow where
{
pop /pdf_cshow /cshow load dd
/pdf_remove2 {pop pop} dd
}
{
/pdf_cshow {exch forall} dd
/pdf_remove2 {} dd
} ifelse
/pdf_xshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_yshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0 exch
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_xyshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
1 pop
{_pdf_na _pdf_i 1 add get} stopped
{ pop pop pop}
{
_pdf_x _pdf_y moveto
rmoveto
}
ifelse
}
ifelse
_pdf_i 2 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdfl1xs {/_pdf_showproc /show load dd pdf_xshow} bd
/pdfl1ys {/_pdf_showproc /show load dd pdf_yshow} bd
/pdfl1xys {/_pdf_showproc /show load dd pdf_xyshow} bd
Level2? _ColorSep5044? not and
{
/pdfxs {{xshow} stopped {pdfl1xs} if} bd
/pdfys {{yshow} stopped {pdfl1ys} if} bd
/pdfxys {{xyshow} stopped {pdfl1xys} if} bd
}
{
/pdfxs /pdfl1xs load dd
/pdfys /pdfl1ys load dd
/pdfxys /pdfl1xys load dd
} ifelse
/pdf_charpath {false charpath} bd
/pdf_xcharpath {/_pdf_showproc /pdf_charpath load dd pdf_xshow} bd
/pdf_ycharpath {/_pdf_showproc /pdf_charpath load dd pdf_yshow} bd
/pdf_xycharpath {/_pdf_showproc /pdf_charpath load dd pdf_xyshow} bd
/pdf_strokepath
{
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 false charpath
currentpoint S moveto
} bind
exch pdf_cshow
} bd
/pdf_xstrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xshow} bd
/pdf_ystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_yshow} bd
/pdf_xystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xyshow} bd
Level2? {currentglobal true setglobal} if
/d0/setcharwidth ld
/nND {{/.notdef} repeat} bd
/T3Defs {
/BuildChar
{
1 index /Encoding get exch get
1 index /BuildGlyph get exec
}
def
/BuildGlyph {
exch begin
GlyphProcs exch get exec
end
} def
/_pdfT3Font true def
} bd
/_pdfBoldRomanWidthProc
{
stringwidth 1 index 0 ne { exch .03 add exch }if setcharwidth
0 0
} bd
/_pdfType0WidthProc
{
dup stringwidth 0 0 moveto
2 index true charpath pathbbox
0 -1
7 index 2 div .88
setcachedevice2
pop
0 0
} bd
/_pdfType0WMode1WidthProc
{
dup stringwidth
pop 2 div neg -0.88
2 copy
moveto
0 -1
5 -1 roll true charpath pathbbox
setcachedevice
} bd
/_pdfBoldBaseFont
11 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/Encoding cHexEncoding def
/_setwidthProc /_pdfBoldRomanWidthProc load def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
pdf_has_composefont?
{
/_pdfBoldBaseCIDFont
11 dict begin
/CIDFontType 1 def
/CIDFontName /_pdfBoldBaseCIDFont def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_setwidthProc /_pdfType0WidthProc load def
/_bcstr2 2 string def
/BuildGlyph
{
exch begin
_basefont setfont
_bcstr2 1 2 index 256 mod put
_bcstr2 0 3 -1 roll 256 idiv put
_bcstr2 dup _setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
/_pdfDefineIdentity-H
{
/Identity-H /CMap PDFText /pdf_resourcestatus get exec
{
pop pop
}
{
/CIDInit/ProcSet findresource begin 12 dict begin
begincmap
/CIDSystemInfo
3 dict begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
currentdict
end
def
/CMapName /Identity-H def
/CMapVersion 1 def
/CMapType 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
CMapName currentdict/CMap defineresource pop
end
end
} ifelse
} def
} if
/_pdfVerticalRomanT3Font
10 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_pdfType0WidthProc
moveto
show
end
}bd
currentdict
end
def
Level2? {setglobal} if
/MakeBoldFont
{
dup /ct_SyntheticBold known
{
dup length 3 add dict begin
CopyFont
/ct_StrokeWidth .03 0 FontMatrix idtransform pop def
/ct_SyntheticBold true def
currentdict
end
definefont
}
{
dup dup length 3 add dict
begin
CopyFont
/PaintType 2 def
/StrokeWidth .03 0 FontMatrix idtransform pop def
/dummybold currentdict
end
definefont
dup /FontType get dup 9 ge exch 11 le and
{
_pdfBoldBaseCIDFont
dup length 3 add dict copy begin
dup /CIDSystemInfo get /CIDSystemInfo exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefont exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefonto exch def
currentdict
end
/CIDFont defineresource
}
{
_pdfBoldBaseFont
dup length 3 add dict copy begin
/_basefont exch def
/_basefonto exch def
currentdict
end
definefont
}
ifelse
}
ifelse
} bd
/MakeBold {
1 index
_pdf_FontDirectory 2 index 2 copy known
{get}
{exch pop}
ifelse
findfont
dup
/FontType get 0 eq
{
dup /WMode known {dup /WMode get 1 eq }{false} ifelse
version length 4 ge
and
{version 0 4 getinterval cvi 2015 ge }
{true}
ifelse
{/_pdfType0WidthProc}
{/_pdfType0WMode1WidthProc}
ifelse
_pdfBoldBaseFont /_setwidthProc 3 -1 roll load put
{MakeBoldFont} Type0CopyFont definefont
}
{
dup /_fauxfont known not 1 index /SubstMaster known not and
{
_pdfBoldBaseFont /_setwidthProc /_pdfBoldRomanWidthProc load put
MakeBoldFont
}
{
2 index 2 index eq
{ exch pop }
{
dup length dict begin
CopyFont
currentdict
end
definefont
}
ifelse
}
ifelse
}
ifelse
pop pop
dup /dummybold ne
{/_pdf_FontDirectory exch dup _safeput }
{ pop }
ifelse
}bd
/MakeItalic {
_pdf_FontDirectory exch 2 copy known
{get}
{exch pop}
ifelse
dup findfont
dup /FontInfo 2 copy known
{
get
/ItalicAngle 2 copy known
{get 0 eq }
{ pop pop true}
ifelse
}
{ pop pop true}
ifelse
{
exch pop
dup /FontType get 0 eq Level2? not and
{ dup /FMapType get 6 eq }
{ false }
ifelse
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1Type0 }
{ _italMtxType0 }
ifelse
}
{ pop pop _italMtxType0 }
ifelse
}
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1 }
{ _italMtx }
ifelse
}
{ pop pop _italMtx }
ifelse
}
ifelse
makefont
dup /FontType get 42 eq Level2? not or
{
dup length dict begin
CopyFont
currentdict
end
}
if
1 index exch
definefont pop
/_pdf_FontDirectory exch dup _safeput
}
{
pop
2 copy ne
{
/_pdf_FontDirectory 3 1 roll _safeput
}
{ pop pop }
ifelse
}
ifelse
}bd
/MakeBoldItalic {
/dummybold exch
MakeBold
/dummybold
MakeItalic
}bd
Level2?
{
/pdf_CopyDict
{1 index length add dict copy}
def
}
{
/pdf_CopyDict
{
1 index length add dict
1 index wcheck
{ copy }
{ begin
{def} forall
currentdict
end
}
ifelse
}
def
}
ifelse
/pdf_AddEuroGlyphProc
{
currentdict /CharStrings known
{
CharStrings /Euro known not
{
dup
/CharStrings
CharStrings 1 pdf_CopyDict
begin
/Euro pdf_EuroProcSet 4 -1 roll get def
currentdict
end
def
/pdf_PSBuildGlyph /pdf_PSBuildGlyph load def
/pdf_PathOps /pdf_PathOps load def
/Symbol eq Encoding 160 get /.notdef eq and
{
/Encoding Encoding dup length array copy
dup 160 /Euro put def
}
if
}
{ pop
}
ifelse
}
{ pop
}
ifelse
}
def
Level2? {currentglobal true setglobal} if
/pdf_PathOps 4 dict dup begin
/m {moveto} def
/l {lineto} def
/c {curveto} def
/cp {closepath} def
end
def
/pdf_PSBuildGlyph
{
gsave
8 -1 roll pop
7 1 roll
currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
dup 9 1 roll
{
currentdict /StrokeWidth 2 copy known
{
get 2 div
5 1 roll
4 -1 roll 4 index sub
4 1 roll
3 -1 roll 4 index sub
3 1 roll
exch 4 index add exch
4 index add
5 -1 roll pop
}
{
pop pop
}
ifelse
}
if
setcachedevice
pdf_PathOps begin
exec
end
{
currentdict /StrokeWidth 2 copy known
{ get }
{ pop pop 0 }
ifelse
setlinewidth stroke
}
{
fill
}
ifelse
grestore
} def
/pdf_EuroProcSet 13 dict def
pdf_EuroProcSet
begin
/Courier-Bold
{
600 0 6 -12 585 612
{
385 274 m
180 274 l
179 283 179 293 179 303 c
179 310 179 316 180 323 c
398 323 l
423 404 l
197 404 l
219 477 273 520 357 520 c
409 520 466 490 487 454 c
487 389 l
579 389 l
579 612 l
487 612 l
487 560 l
449 595 394 612 349 612 c
222 612 130 529 98 404 c
31 404 l
6 323 l
86 323 l
86 304 l
86 294 86 284 87 274 c
31 274 l
6 193 l
99 193 l
129 77 211 -12 359 -12 c
398 -12 509 8 585 77 c
529 145 l
497 123 436 80 356 80 c
285 80 227 122 198 193 c
360 193 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-BoldOblique /Courier-Bold load def
/Courier
{
600 0 17 -12 578 584
{
17 204 m
97 204 l
126 81 214 -12 361 -12 c
440 -12 517 17 578 62 c
554 109 l
501 70 434 43 366 43 c
266 43 184 101 154 204 c
380 204 l
400 259 l
144 259 l
144 270 143 281 143 292 c
143 299 143 307 144 314 c
418 314 l
438 369 l
153 369 l
177 464 249 529 345 529 c
415 529 484 503 522 463 c
522 391 l
576 391 l
576 584 l
522 584 l
522 531 l
473 566 420 584 348 584 c
216 584 122 490 95 369 c
37 369 l
17 314 l
87 314 l
87 297 l
87 284 88 272 89 259 c
37 259 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-Oblique /Courier load def
/Helvetica
{
556 0 24 -19 541 703
{
541 628 m
510 669 442 703 354 703 c
201 703 117 607 101 444 c
50 444 l
25 372 l
97 372 l
97 301 l
49 301 l
24 229 l
103 229 l
124 67 209 -19 350 -19 c
435 -19 501 25 509 32 c
509 131 l
492 105 417 60 343 60 c
267 60 204 127 197 229 c
406 229 l
430 301 l
191 301 l
191 372 l
455 372 l
479 444 l
194 444 l
201 531 245 624 348 624 c
433 624 484 583 509 534 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-Oblique /Helvetica load def
/Helvetica-Bold
{
556 0 12 -19 563 710
{
563 621 m
537 659 463 710 363 710 c
216 710 125 620 101 462 c
51 462 l
12 367 l
92 367 l
92 346 l
92 337 93 328 93 319 c
52 319 l
12 224 l
102 224 l
131 58 228 -19 363 -19 c
417 -19 471 -12 517 18 c
517 146 l
481 115 426 93 363 93 c
283 93 254 166 246 224 c
398 224 l
438 319 l
236 319 l
236 367 l
457 367 l
497 462 l
244 462 l
259 552 298 598 363 598 c
425 598 464 570 486 547 c
507 526 513 517 517 509 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-BoldOblique /Helvetica-Bold load def
/Symbol
{
750 0 20 -12 714 685
{
714 581 m
650 645 560 685 465 685 c
304 685 165 580 128 432 c
50 432 l
20 369 l
116 369 l
115 356 115 347 115 337 c
115 328 115 319 116 306 c
50 306 l
20 243 l
128 243 l
165 97 300 -12 465 -12 c
560 -12 635 25 685 65 c
685 155 l
633 91 551 51 465 51 c
340 51 238 131 199 243 c
555 243 l
585 306 l
184 306 l
183 317 182 326 182 336 c
182 346 183 356 184 369 c
614 369 l 644 432 l
199 432 l
233 540 340 622 465 622 c
555 622 636 580 685 520 c
cp
750 0 m
}
pdf_PSBuildGlyph
} def
/Times-Bold
{
500 0 16 -14 478 700
{
367 308 m
224 308 l
224 368 l
375 368 l
380 414 l
225 414 l
230 589 257 653 315 653 c
402 653 431 521 444 457 c
473 457 l
473 698 l
444 697 l
441 679 437 662 418 662 c
393 662 365 700 310 700 c
211 700 97 597 73 414 c
21 414 l
16 368 l
69 368 l
69 359 68 350 68 341 c
68 330 68 319 69 308 c
21 308 l
16 262 l
73 262 l
91 119 161 -14 301 -14 c
380 -14 443 50 478 116 c
448 136 l
415 84 382 40 323 40 c
262 40 231 77 225 262 c
362 262 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-BoldItalic
{
500 0 9 -20 542 686
{
542 686 m
518 686 l
513 673 507 660 495 660 c
475 660 457 683 384 683 c
285 683 170 584 122 430 c
58 430 l
34 369 l
105 369 l
101 354 92 328 90 312 c
34 312 l
9 251 l
86 251 l
85 238 84 223 84 207 c
84 112 117 -14 272 -14 c
326 -14 349 9 381 9 c
393 9 393 -10 394 -20 c
420 -20 l
461 148 l
429 148 l
416 109 362 15 292 15 c
227 15 197 55 197 128 c
197 162 204 203 216 251 c
378 251 l
402 312 l
227 312 l
229 325 236 356 241 369 c
425 369 l
450 430 l
255 430 l
257 435 264 458 274 488 c
298 561 337 654 394 654 c
437 654 484 621 484 530 c
484 516 l
516 516 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Italic
{
500 0 23 -10 595 692
{
399 317 m
196 317 l
199 340 203 363 209 386 c
429 386 l
444 424 l
219 424 l
246 514 307 648 418 648 c
448 648 471 638 492 616 c
529 576 524 529 527 479 c
549 475 l
595 687 l
570 687 l
562 674 558 664 542 664 c
518 664 474 692 423 692 c
275 692 162 551 116 424 c
67 424 l
53 386 l
104 386 l
98 363 93 340 90 317 c
37 317 l
23 279 l
86 279 l
85 266 85 253 85 240 c
85 118 137 -10 277 -10 c
370 -10 436 58 488 128 c
466 149 l
424 101 375 48 307 48 c
212 48 190 160 190 234 c
190 249 191 264 192 279 c
384 279 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Roman
{
500 0 10 -12 484 692
{
347 298 m
171 298 l
170 310 170 322 170 335 c
170 362 l
362 362 l
374 403 l
172 403 l
184 580 244 642 308 642 c
380 642 434 574 457 457 c
481 462 l
474 691 l
449 691 l
433 670 429 657 410 657 c
394 657 360 692 299 692 c
204 692 94 604 73 403 c
22 403 l
10 362 l
70 362 l
69 352 69 341 69 330 c
69 319 69 308 70 298 c
22 298 l
10 257 l
73 257 l
97 57 216 -12 295 -12 c
364 -12 427 25 484 123 c
458 142 l
425 101 384 37 316 37 c
256 37 189 84 173 257 c
335 257 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
end
Level2? {setglobal} if
currentdict readonly pop end
%%EndResource
PDFText begin
[39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
/guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
/hungarumlaut/ogonek/caron
0 TE
[1/dotlessi/caron 39/quotesingle 96/grave
127/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft
/quotedblright/bullet/endash/emdash/tilde/trademark/scaron
/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus
/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla
/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters
/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute
/ucircumflex/udieresis/yacute/thorn/ydieresis
1 TE
end
%%BeginResource: procset pdfasc.prc 6.0 1
%%Copyright: Copyright 1992-2003 Adobe Systems Incorporated. All Rights Reserved.
/ASR {
13 dict begin
/mirV? exch def
/mirH? exch def
/center? exch def
/autorotate? exch def
/angle exch def
/shrink exch def
/Pury exch def
/Purx exch def
/Plly exch def
/Pllx exch def
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury 0 eq Durx 0 eq and Dlly 0 eq Dllx 0 eq and and
{ shrink 0 gt { GClipBBox } { GPageBBox } ifelse }
{ ITransDBBox }
ifelse
/PHt Pury Plly sub def
/PW Purx Pllx sub def
/DHt Dury Dlly sub def
/DW Durx Dllx sub def
angle 90 eq angle 270 eq or
{
PHt /PHt PW def /PW exch def
} if
autorotate? PHt PW ne and DHt DW ne and
{
DHt DW ge
PHt PW ge
ne
{ /angle angle 90 add def
PHt /PHt PW def /PW exch def
}
if
} if
angle 0 ne
{
/angle angle 360 mod def
angle rotate
angle 90 eq
{ 0 DW neg translate }
if
angle 180 eq
{ DW neg DHt neg translate }
if
angle 270 eq
{ DHt neg 0 translate }
if
} if
center?
{
ITransBBox
Durx Dllx add 2 div Dury Dlly add 2 div
Purx Pllx add -2 div Pury Plly add -2 div
3 -1 roll add exch
3 -1 roll add exch
translate
}
{
ITransBBox
angle 0 eq
{Dllx Pllx sub Dury Pury sub}
if
angle 90 eq
{Durx Purx sub Dury Pury sub}
if
angle 180 eq
{Durx Purx sub Dlly Plly sub}
if
angle 270 eq
{Dllx Pllx sub Dlly Plly sub}
if
translate
}
ifelse
mirH? mirV? or
{
ITransBBox
mirH?
{
-1 1 scale
Durx Dllx add neg 0 translate
} if
mirV?
{
1 -1 scale
0 Dury Dlly add neg translate
} if
} if
shrink 0 ne
{
ITransBBox
Dury Dlly sub Pury Plly sub div
Durx Dllx sub Purx Pllx sub div
2 copy gt { exch } if pop
shrink 1 eq
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{
shrink 2 eq 1 index 1.0 lt and
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{ pop }
ifelse
}
ifelse
} if
end
} [/autorotate? /shrink? /mirH? /mirV? /angle /Pury /Purx /Plly /Pllx /Durx /Dury /Dllx /Dlly /PW /PHt /DW /DHt
/Devurx /Devury /Devllx /Devlly /pdfHt /pdfW]
bld
/GClipBBox
{
gsave newpath clippath pathbbox newpath grestore
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
ITransDBBox
} [/Durx /Dury /Dllx /Dlly]
bld
/GPageBBox
{
{
currentpagedevice /PageSize get aload pop
/Devury exch def /Devurx exch def
/Devllx 0 def /Devlly 0 def
ITransBBox
}
stopped
{ GClipBBox }
if
} [/Devurx /Devury /Devllx /Devlly ]
bld
/ITransDBBox
{
Durx Dury transform matrix defaultmatrix itransform
/Devury exch def
/Devurx exch def
Dllx Dlly transform matrix defaultmatrix itransform
/Devlly exch def
/Devllx exch def
Devury Devlly lt {/Devlly Devury /Devury Devlly def def} if
Devurx Devllx lt {/Devllx Devurx /Devurx Devllx def def} if
} [/Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
/ITransBBox
{
/um matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix def
Devllx Devlly um itransform
Devurx Devury um itransform
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury Dlly lt {/Dlly Dury /Dury Dlly def def} if
Durx Dllx lt {/Dllx Durx /Durx Dllx def def} if
} [ /um /Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
%%EndResource
currentdict readonly pop
end end
/currentpacking where {pop setpacking}if
PDFVars/DocInitAll{[PDF PDFText]{/docinitialize get exec}forall }put
+PDFVars/InitAll{[PDF PDFText]{/initialize get exec}forall initgs}put
+PDFVars/TermAll{[PDFText PDF]{/terminate get exec}forall}put
+PDFVars begin PDF begin
PDFVars/DocInitAll get exec PDFVars/InitAll get exec
[/NamespacePush PDFMark5
[/_objdef {Metadata_In_EPS} /type /stream /OBJ PDFMark5
[{Metadata_In_EPS} 3385 (% &end XMP packet& %) ReadByPDFMark5
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-701">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2006-10-26T22:12:35+02:00</xap:CreateDate>
+ <xap:ModifyDate>2006-10-26T22:12:35+02:00</xap:ModifyDate>
+ <xap:MetadataDate>2006-10-26T22:12:35+02:00</xap:MetadataDate>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/">
+ <xapMM:DocumentID>uuid:69FDC66D66D111DB80A0F3E4B52BCBBC</xapMM:DocumentID>
+ <xapMM:InstanceID>uuid:69FDC66D66D111DB80A0F3E4B52BCBBC</xapMM:InstanceID>
+ <xapMM:DerivedFrom rdf:parseType="Resource">
+ </xapMM:DerivedFrom>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/">
+ <pdfx:PTEX.Fullbanner>This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4</pdfx:PTEX.Fullbanner>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/eps</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?>
% &end XMP packet& %
[{Metadata_In_EPS} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT PDFMark5
[/Document 1 dict begin /Metadata {Metadata_In_EPS} def currentdict end /BDC PDFMark5
[/NamespacePop PDFMark5
PDFVars/TermAll get exec end end
PDF /docinitialize get exec
+
%%EndSetup
PDFVars begin PDF begin PDFVars/InitAll get exec
0.0 0.0 345.0 326.0 rectclip
q
0.0 0.0 m
345.0 0.0 l
345.0 326.0 l
0.0 326.0 l
h
W
n
q
1.0 0.0 0.0 1.0 -12.0 -26.0 cm
q
12.0 26.0 345.0 326.0 re
W
n
q
1.0 0.0 0.0 -1.0 0.0 0.0 cm
n
12.2451 -26.7217 m
12.2451 -26.7217 356.245 -26.7217 356.245 -26.7217 c
356.245 -26.7217 356.245 -351.722 356.245 -351.722 c
356.245 -351.722 12.2451 -351.722 12.2451 -351.722 c
12.2451 -351.722 12.2451 -26.7217 12.2451 -26.7217 c
h
W
n
q
n
0.0 0.0 m
0.0 0.0 368.5 0.0 368.5 0.0 c
368.5 0.0 368.5 -368.5 368.5 -368.5 c
368.5 -368.5 0.0 -368.5 0.0 -368.5 c
0.0 -368.5 0.0 0.0 0.0 0.0 c
h
W
n
0.216 w
2.6131 M
true setSA
n
341.75 -142.05 m
341.75 -142.05 26.7539 -226.453 26.7539 -226.453 c
26.7529 -142.05 m
26.7529 -142.05 341.751 -226.453 341.751 -226.453 c
184.252 -26.7529 m
184.252 -26.7529 184.252 -341.75 184.252 -341.75 c
[/DeviceRGB] cs 0.0 0.0 0.0 sc
S
n
183.908 -274.625 m
233.479 -274.625 273.907 -234.196 273.907 -184.626 c
273.907 -135.056 233.479 -94.6279 183.908 -94.6279 c
134.339 -94.6279 93.9092 -135.056 93.9092 -184.626 c
93.9092 -234.196 134.339 -274.625 183.908 -274.625 c
183.908 -274.625 183.908 -274.625 183.908 -274.625 c
h
1.0 1.0 1.0 sc
eofill
n
184.252 -274.25 m
233.822 -274.25 274.251 -233.821 274.251 -184.251 c
274.251 -134.681 233.822 -94.2529 184.252 -94.2529 c
134.683 -94.2529 94.2529 -134.681 94.2529 -184.251 c
94.2529 -233.821 134.683 -274.25 184.252 -274.25 c
184.252 -274.25 184.252 -274.25 184.252 -274.25 c
h
0.0 0.0 0.0 sc
S
0.5 w
n
203.322 -211.889 m
198.992 -223.866 191.714 -231.42 184.252 -231.42 c
S
0.216 w
[4.536 4.32001 ] 0.0 d
n
184.252 -94.2529 m
159.467 -94.2529 139.253 -134.681 139.253 -184.251 c
139.253 -233.821 159.467 -274.25 184.252 -274.25 c
S
[] 0.0 d
n
274.251 -184.251 m
274.251 -171.858 233.822 -161.751 184.252 -161.751 c
134.683 -161.751 94.2529 -171.858 94.2529 -184.251 c
S
[4.536 4.32001 ] 0.0 d
n
245.714 -167.862 m
245.714 -167.862 97.3701 -207.534 97.3701 -207.534 c
274.251 -184.251 m
274.251 -196.643 233.822 -206.751 184.252 -206.751 c
134.683 -206.751 94.2529 -196.643 94.2529 -184.251 c
S
n
341.75 -142.05 m
341.75 -142.05 334.991 -140.667 334.991 -140.667 c
334.991 -140.667 336.588 -146.628 336.588 -146.628 c
336.588 -146.628 341.75 -142.05 341.75 -142.05 c
341.75 -142.05 341.75 -142.05 341.75 -142.05 c
h
eofill
n
122.901 -167.8 m
122.901 -167.8 271.245 -207.388 271.245 -207.388 c
S
n
26.7539 -142.05 m
26.7539 -142.05 31.916 -146.626 31.916 -146.626 c
31.916 -146.626 33.5137 -140.665 33.5137 -140.665 c
33.5137 -140.665 26.7539 -142.05 26.7539 -142.05 c
26.7539 -142.05 26.7539 -142.05 26.7539 -142.05 c
h
eofill
0.5 w
[] 0.0 d
n
184.252 -184.251 m
184.252 -184.251 220.78 -236.75 220.78 -236.75 c
S
n
219.2 -237.85 m
219.806 -238.72 221.008 -238.938 221.88 -238.332 c
222.752 -237.724 222.966 -236.521 222.361 -235.651 c
221.756 -234.781 220.553 -234.563 219.681 -235.17 c
218.809 -235.777 218.595 -236.98 219.2 -237.85 c
219.2 -237.85 219.2 -237.85 219.2 -237.85 c
h
eofill
n
207.463 -173.769 m
200.537 -172.833 192.301 -172.271 184.252 -172.271 c
172.271 -172.271 160.104 -173.487 151.494 -175.501 c
228.156 -164.612 m
228.156 -164.612 184.252 -184.251 184.252 -184.251 c
S
0.216 w
n
184.252 -94.2529 m
209.037 -94.2529 229.252 -134.681 229.252 -184.251 c
229.252 -233.821 209.037 -274.25 184.252 -274.25 c
S
[4.536 4.32001 ] 0.0 d
n
184.252 -94.2529 m
184.252 -94.2529 184.252 -274.25 184.252 -274.25 c
S
n
184.252 -341.75 m
184.252 -341.75 181.168 -335.579 181.168 -335.579 c
181.168 -335.579 187.339 -335.579 187.339 -335.579 c
187.339 -335.579 184.252 -341.75 184.252 -341.75 c
184.252 -341.75 184.252 -341.75 184.252 -341.75 c
h
eofill
Q
1.0 0.0 0.0 -1.0 0.0 0.0 cm
true setSA
[/DeviceRGB] cs 0.0 0.0 0.0 sc
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H Initial
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_saveCIDInit
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
%%DocumentNeededResources: ProcSet (CIDInit)
%%IncludeResource: ProcSet (CIDInit)
%%BeginResource: CIDFont (STFBAA+CMMI12)
%%Title: (STFBAA+CMMI12 Adobe Identity 0)
%%Version: 0
/CIDInit /ProcSet findresource begin
14 dict begin
/CIDFontName /STFBAA+CMMI12 def
/CIDFontType 0 def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/FontBBox {-31 -250 1026 750} def
/FontInfo 5 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/FSType 4 def
end def
/CIDMapOffset 57 def
/FDBytes 1 def
/GDBytes 1 def
/CIDCount 121 def
/CDevProc {pop pop pop pop pop 0 -1000 7 index 2 div 880} def
/FDArray 1 array
dup 0
%ADOBeginFontDict
4 dict dup begin
/FontType 1 def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
%ADOBeginPrivateDict
/Private 12 dict dup begin
/BlueValues [-21 -0 431 441 452 463 683 704] def
/OtherBlues [-204 -194] def
/BlueScale 0.04379 def
/StdHW [22] def
/StdVW [65] def
/StemSnapH [22 29] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
/SubrMapOffset 0 def
/SDBytes 1 def
/SubrCount 5 def
end def
%ADOEndPrivateDict
end put
%ADOEndFontDict
def
/GlyphDirectory 1 dict def
ct_GlyphDirProcs begin
GlyphDirectory
+
0 <001C60D8A8C9B81F2CC3> |
!
end
ct_AddStdCIDMap
%%EndResource
ct_restoreCIDInit /STFBAA+CMMI12-Identity-H /Identity-H 0 [/STFBAA+CMMI12] ct_ComposeFont pop end end
+%ADOEndSubsetFont
+%%BeginResource: encoding
% Identity-H
%PDF_BeginEncoding: N8 (STFBAA+CMMI12-Identity-H)
+/N8 (STFBAA+CMMI12-Identity-H) /Identity-H [ (STFBAA+CMMI12) ]
+ /NoSubstitution [ /Serif ] 0 TZzero
+%%EndResource
214.132 215.992 m
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/STFBAA+CMMI12 1 GetGlyphDirectory
114 <001C60D8A8C9B7628037FFC34225CDB51C16B6280E0517770F69131E099
966F689816DBB94E394FAC1DD9A7C1A14C9636A7D2A8B72705C22612EFEFFA6E
5264FF4EBF61CD9C4DD8B27578E011E8DDEBF419CAC1F6A2F1FE994DF5C901FD
0BEA9E7C62177556CCE084E3BECB95D975A4D2F2A65A78E12C3AB4ACCE568AEB
738452E5B0C6CD2019C0B9AA154E192BB18B0CE92FA48AF13577432A54DCB746
56A4A13E51A965BFC9D023FADEC3106AF414E85A814E3E3249DD8D208FADB8DC
3FB27> |
!
end
end end
+%ADOEndSubsetFont
+/N8 11.955 Tf
(\000r) show
345.669 136.324 m
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/STFBAA+CMMI12 1 GetGlyphDirectory
120 <001C60D8A8C9B7EF325DF88715F012E085EB64F0A4FE8713D04CDEA9CB2
0E9B15249D56AC8A0C2E0E12761B3B972D802D5F8B18F4F576C2666702361F5C
2B48D78C52532223071C01FA681430DA735F1A7AE51C80B9138D3695956A62D9
B460B17A4E36DAB726D8A63568FAB7BE160BEDB176EF49099F6F41A5863B069F
194EE62B71BD3B36F4A3FC9946AAB077F14F50A9438F7F58BFD49954B5720AE5
7E171B43DB3AF9DBD54119DEA2A7A1C00079C808029D90A7EF0A91CB3EF0628D
6A42D1F0CCEC95B876569E8B0C44DA543AE071E278458104AF4D774998DBD764
C7F96602C> |
!
end
end end
+%ADOEndSubsetFont
+(\000x) show
%ADOBeginSubsetFont: EUOAAA+CMR8-Identity-H Initial
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_saveCIDInit
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
%%DocumentNeededResources: ProcSet (CIDInit)
%%IncludeResource: ProcSet (CIDInit)
%%BeginResource: CIDFont (EUOAAA+CMR8)
%%Title: (EUOAAA+CMR8 Adobe Identity 0)
%%Version: 0
/CIDInit /ProcSet findresource begin
14 dict begin
/CIDFontName /EUOAAA+CMR8 def
/CIDFontType 0 def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/FontBBox {-36 -250 1070 750} def
/FontInfo 5 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/FSType 4 def
end def
/CIDMapOffset 57 def
/FDBytes 1 def
/GDBytes 1 def
/CIDCount 52 def
/CDevProc {pop pop pop pop pop 0 -1000 7 index 2 div 880} def
/FDArray 1 array
dup 0
%ADOBeginFontDict
4 dict dup begin
/FontType 1 def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
%ADOBeginPrivateDict
/Private 13 dict dup begin
/BlueValues [-21 -0 431 446 665 675 683 704] def
/OtherBlues [-205 -194] def
/BlueScale 0.04379 def
/StdHW [28] def
/StdVW [76] def
/StemSnapH [28 33] def
/StemSnapV [76 92] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
/SubrMapOffset 0 def
/SDBytes 1 def
/SubrCount 5 def
end def
%ADOEndPrivateDict
end put
%ADOEndFontDict
def
/GlyphDirectory 1 dict def
ct_GlyphDirProcs begin
GlyphDirectory
+
0 <001C60D8A8C9B808980A> |
!
end
ct_AddStdCIDMap
%%EndResource
ct_restoreCIDInit /EUOAAA+CMR8-Identity-H /Identity-H 0 [/EUOAAA+CMR8] ct_ComposeFont pop end end
+%ADOEndSubsetFont
+%%BeginResource: encoding
% Identity-H
%PDF_BeginEncoding: N9 (EUOAAA+CMR8-Identity-H)
+/N9 (EUOAAA+CMR8-Identity-H) /Identity-H [ (EUOAAA+CMR8) ]
+ /NoSubstitution [ /Serif ] 0 TZzero
+%%EndResource
352.321 134.531 m
%ADOBeginSubsetFont: EUOAAA+CMR8-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/EUOAAA+CMR8 1 GetGlyphDirectory
50 <001C60D8A8C9B7883C479819BD474E9964F6BF369AAF487ABFE629F8A563
37D176F7C9556B1CAAE607CA6285C927013D8BDE6137B6739AFDAF8D7D8B1E86
BAFBB9D834592D58F996DFF88B929F1FABA7347C2BBDB5519BE210DDE834DD1D
CB9A84AA77E585DFD5A86708901622F6AC3CFFFF626D8C5FD08A157C4A8F19F7
F5FA2E61175441FDD6> |
!
end
end end
+%ADOEndSubsetFont
+/N9 7.96999 Tf
(\0002) show
12.6611 136.324 m
/N8 11.955 Tf
(\000x) show
19.313 134.531 m
%ADOBeginSubsetFont: EUOAAA+CMR8-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/EUOAAA+CMR8 1 GetGlyphDirectory
49 <001C60D8A8C9B7883C47E9695A643EC7CDC9D492AB150D29B838BCDE5298
51B4F36139BB3C5556B7F7E4934494C8CA669B61323ACA68A6240E429D123FC3
10871A43C3C2B8652E724507A70C99EC1FF6EE1EA351C2BAEF> |
!
end
end end
+%ADOEndSubsetFont
+/N9 7.96999 Tf
(\0001) show
180.665 346.329 m
/N8 11.955 Tf
(\000x) show
187.317 344.536 m
%ADOBeginSubsetFont: EUOAAA+CMR8-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/EUOAAA+CMR8 1 GetGlyphDirectory
51 <001C60D8A8C9B7883CBAA92B92A60ED97CC7706D34A36348BC2B93805C7C
1833580FAA27E95855649C4EE0492E1681D62AEDB7EC0D4D44FE91FF7AD4665F
D8D6994E56FB00B47353D8538086D2C46021ADFB3F80264F6C2EF23799D21E81
ACDE63FE62C97F7BE27D7DCE3B9BAF5B096FE9F9E10574C4FE3C149B03DD0A59
DE10D784DCCBFDFC6D3C5399775DC28DB91A04691B5B8F3D1C009DFAB49BB818
D90EA7C1> |
!
end
end end
+%ADOEndSubsetFont
+/N9 7.96999 Tf
(\0003) show
Q
1.0 0.0 0.0 -1.0 0.0 0.0 cm
0.216 w
2.6131 M
true setSA
n
84.2622 -157.449 m
84.2622 -157.449 122.901 -167.8 122.901 -167.8 c
[/DeviceRGB] cs 0.0 0.0 0.0 sc
S
4.0 M
n
282.892 -157.826 m
282.892 -157.826 245.092 -167.955 245.092 -167.955 c
S
1.0 0.0 0.0 -1.0 0.0 0.0 cm
188.661 211.324 m
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/STFBAA+CMMI12 1 GetGlyphDirectory
35 <001C60D8A8C9B7FA1301BE6180781D244B43F2F97D795A8C67AF297570B2
5D011F7553AE87DA67246C75A123D38A7E2A9E73C089D0155659C213520B6BF3
708CF9E463A551165DF528979C5D29939E4C663B7CB9ACD2D34590AACA015370
E594274B63269C8F1CFCDE8C91D720B13F6B93C2E0C4CB325FAAA90199F590A1
AC543010663224FE9AA5C2BA7CFE5A136E95946849176A836312B7F034FCF4D6
AC1AC7238CDCD1DE8CE95FDACABE12915BD7468460A9C53C13689C62E4957EFA
9AD8D18B2997483879F7A346270DF44C1AE41B892E443E6FAAAFC0E03E3402EC
ABE2B7246DA1D5670AD7110BF40E94066EA9490675CB0A81BEFFC608EFE8EB9C> |
!
end
end end
+%ADOEndSubsetFont
+/N8 11.955 Tf
(\000#) show
175.161 175.824 m
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/STFBAA+CMMI12 1 GetGlyphDirectory
39 <001C60D8A8C9B6747BB73B43E39C205190D75AB2FA80068C30CFF75B781B
8EF25B40D3CE1F8BF1235B5920904D98C1751ACD1ECE66AA5D36E6C1B0A82706
3C26C16EF05F21A86369CC9EEB5C4FBFDD1B1033971034EB6BB92D726AF889E8
FAEBC642112085AE58F32148895EE95BF45DBD1651424FB17E02ED87E805BC12
A8D7FC6BBCEE3EDEE61F46B81CD695594BD8913AA6E31AFF96FA2BC0EB511234
DC983CFE742ECE43A47058200D1BD7CA0237343381C2D71B3385B4C3D1> |
!
end
end end
+%ADOEndSubsetFont
+(\000') show
225.161 241.324 m
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/STFBAA+CMMI12 1 GetGlyphDirectory
24 <001C60D8A8C9B71063258B553F1B532EC10F40E30216C77B3F0B5660F268
1931B66B80D025CB05EB0F48CA6066E901D78AA8BDBA0138C54FFF8BC2753E84
22BAE3AE8CA07E859A4B65B4D5BD4727F3F9107AA32A4A57EB21B5630206288D
D3BEEDDAA3A69061629F0A34376B6E16CE06067FD5361A33C8D6231C3893FBC2
7DA84816540B60AC54A3B46F95C2017D13E3D6A05441ECC1CCFCC0E271B2EB89
2AA15AB9593923D3AFC1719CB0C359E9F3496DECE857F42C607298AB3F002EE3
10452C9265BCFBD8D84E2C48799C08153602DF1797D52F8C67BDFAEBA64E17B0
DD653E1C5FDC09B8B1BE444DD31C2CCE33B522DE3589EF9276F4E8BDDA185B4D
FFD3F802509F0BBF017DBB660603BE2B25606F1B38D53804373299EC38C0556E
CA9B2D754890C919EA4C2FFA9F42AAF4905ECF7BF321854AD8259B94818A6467
EBBE549BDD6FDF0210134D> |
!
end
end end
+%ADOEndSubsetFont
+(\000\030) show
Q
Q
Q
/STFBAA+CMMI12 /CIDFont _pdfUndefineResource
/STFBAA+CMMI12-Identity-H /Font _pdfUndefineResource
/N8 /Font _pdfUndefineResource
/EUOAAA+CMR8 /CIDFont _pdfUndefineResource
/EUOAAA+CMR8-Identity-H /Font _pdfUndefineResource
/N9 /Font _pdfUndefineResource
[/EMC PDFMark5
PDFVars/TermAll get exec end end
%%PageTrailer
%%Trailer
%%EOF
\ No newline at end of file
diff --git a/doc/api/latex/images/sphere.pdf b/doc/api/latex/images/sphere.pdf
new file mode 100755
index 0000000..ee88c7d
Binary files /dev/null and b/doc/api/latex/images/sphere.pdf differ
diff --git a/doc/logo/nfft_logo.tif b/doc/logo/nfft_logo.tif
new file mode 100644
index 0000000..76c053e
Binary files /dev/null and b/doc/logo/nfft_logo.tif differ
diff --git a/doc/tutorial/README b/doc/tutorial/README
new file mode 100644
index 0000000..a86b7bb
--- /dev/null
+++ b/doc/tutorial/README
@@ -0,0 +1,9 @@
+am 16.03.07 die Version 1490 zu TOMS geschickt.
+am 21.02.08 die Version 2153 zu TOMS geschickt mit den Files
+comments1.pdf comments2.pdf comments3.pdf
+
+am 07.09.08 die Version 2545 in ACM-TOMS Style umgeschrieben.
+zuvor die Aenderungen der 2. Gutachterrunde eingebaut.
+answer.tex - endgueltiger Brief an Editor in Chief und den Assoc. Editor.
+
+am 24.10.08 die Version 2577 mit dem Brief answer.tex eingereicht.
diff --git a/doc/tutorial/acmtrans.bst b/doc/tutorial/acmtrans.bst
new file mode 100644
index 0000000..bc80d4a
--- /dev/null
+++ b/doc/tutorial/acmtrans.bst
@@ -0,0 +1,1770 @@
+% "ACM Transactions" BibTeX style, acmtrans.bst
+% for BibTeX version 0.99c, LaTeX version 3.141
+% Revised 28-MARCH-1996
+% Revised 30-JUNE-1995
+% Revised 15-JAN-1996
+% $Header: acmtrans.bst,v 1.2 96/01/17 09:05:38 boyland Exp $
+%
+% Hacked by John T. Boyland at University of California, Berkeley
+% (with assistance by John R. Hauser)
+% Hacked by Andrew W. Appel and Rebecca L. Davies at Princeton University,
+% based on a "chicago.bst" by Glenn Paulley at U. Waterloo,
+% which was based on "newapa.bst" found at ymir.claremont.edu.
+%
+% Citation format: [author-last-name year]
+% [author-last-name and author-last-name year]
+% [author-last-name, author-last-name, and author-last-name year]
+% [author-last-name et al. year]
+% [author-last-name]
+% author-last-name [year]
+% [author-last-name and author-last-name]
+% [author-last-name et al.]
+% [year] or [year,year]
+% year or year,year
+%
+% Reference list ordering: alphabetical by author or whatever passes
+% for author in the absence of one.
+%
+% This BibTeX style has support for abbreviated author lists and for
+% year-only citations. This is done by having the citations
+% actually look like
+%
+% \citeauthoryear{full-author-info}{abbrev-author-info}{year}
+%
+% The LaTeX style has to have the following (or similar)
+%
+% \let\@internalcite\cite
+% \def\fullcite{\def\citeauthoryear##1##2##3{##1, ##3}\@internalcite}
+% \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite}
+% \def\shortcite{\def\citeauthoryear##1##2##3{##2, ##3}\@internalcite}
+% \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite}
+% \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite}
+%
+% These TeX macro definitions are found in acmtrans.sty. Additional
+% commands to manipulate different components of a citation can be defined
+% so that, for example, you can list author's names without parentheses
+% if using a citation as a noun or object in a sentence.
+%
+% Features of acmtrans.bst:
+% ========================
+%
+% - all authors appear last name first.
+% - all pages are listed xx-xx, (no pp.) and are at the end of the reference
+% - publishers are identified as publisher, address
+% - conferences papers (inproceedings) may give city of conference,
+% date of conference, and journal that the proceedings appear in.
+% - months abbreviated to max four letters (eg. Mar.)
+% - volume of a series indicated after the title of the series
+% - editors appear after edited title and are identified by a trailing "Eds."
+% not in parentheses. Editor names are not given in small caps.
+% (unless there is no author line)
+% - names terminated with a period even if there is no first name.
+% - editions are indicated trailing after the work, not in parentheses.
+% - "et al." citations have a protected period to avoid bad spacing (jrh)
+% - "address" required when publisher given
+% - series (roman) and volume are in a sentence separate from (book-)title
+%
+%
+% Features of chicago.bst:
+% =======================
+%
+% - full names used in citations, but abbreviated citations are available
+% (see above)
+% - if an entry has a "month", then the month and year are also printed
+% as part of that bibitem.
+% - all conjunctions use "and" instead of "\&"
+% - major modification from Chicago Manual of Style (13th ed.) is that
+% only the first author in a reference appears last name first-
+% additional authors appear as J. Q. Public.
+% - pages are listed as "pp. xx-xx" in all entry types except
+% article entries.
+% - book, inbook, and manual use "location: publisher" (or organization)
+% for address and publisher. All other types list publishers separately.
+% - "pp." are used to identify page numbers for all entry types except
+% articles.
+% - organization is used as a citation label if neither author nor editor
+% is present (for manuals).
+% - "et al." is used for long author and editor lists, or when "others"
+% is used.
+%
+% Modifications and bug fixes from newapa.bst:
+% ===========================================
+%
+% - added month, year to bib entries if month is present
+% - fixed bug with In proceedings, added necessary comma after title
+% - all conjunctions changed to "and" from "\&"
+% - fixed bug with author labels in my.full.label: "et al." now is
+% generated when "others" is an author name
+% - major modification from Chicago Manual of Style (13th ed.) is that
+% only the first author in a reference appears last name first-
+% additional authors appear as J. Q. Public.
+% - pages are listed as "pp. xx-xx" in all entry types except
+% article entries. Unnecessary (IMHO) "()" around page numbers
+% were removed, and page numbers now don't end with a period.
+% - created chicago.sty for use with this bibstyle (required).
+% - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume,
+% number, and /or pages. Renamed to format.jour.vol.
+% - fixed bug in formatting booktitles: additional period an error if
+% book has a volume.
+% - fixed bug: editors usually given redundant period before next clause
+% (format.editors.dot) removed.
+% - added label support for organizations, if both author and editor
+% are missing (from alpha.bst). If organization is too long, then
+% the key field is used for abbreviated citations.
+% - In proceedings or books of several volumes, no comma was written
+% between the "Volume x" and the page numbers (this was intentional
+% in newapa.bst). Fixed.
+% - Some journals may not have volumes/numbers, only month/year (eg.
+% IEEE Computer). Fixed bug in article style that assumed volume/number
+% was always present.
+%
+% Original documentation for newapa.sty:
+% =====================================
+%
+% This version was made by modifying the master file made by
+% Oren Patashnik (PATASHNIK at SCORE.STANFORD.EDU), and the 'named' BibTeX
+% style of Peter F. Patel-Schneider.
+%
+% Copyright (C) 1985, all rights reserved.
+% Copying of this file is authorized only if either
+% (1) you make absolutely no changes to your copy, including name, or
+% (2) if you do make changes, you name it something other than 'newapa.bst'.
+% There are undoubtably bugs in this style. If you make bug fixes,
+% improvements, etc. please let me know. My e-mail address is:
+% spencer at cgrg.ohio.state.edu or 71160.3141 at compuserve.com
+%
+% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst',
+% with lots of tweaking to make it look like APA style, along with tips
+% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ city % jtb: added
+ date % jtb: added
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ }
+ {}
+ { label.year extra.label sort.year sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t u }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+% Use a colon to separate output. Used only for address/publisher
+% combination in book/inbook types, address/institution for manuals,
+% and organization:publisher for proceedings (inproceedings).
+%
+FUNCTION {output.nonnull.colon}
+{ 's :=
+ output.state mid.sentence =
+ { ": " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.colon}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull.colon
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check.colon}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull.colon
+ if$
+}
+
+FUNCTION {output.year.check}
+{ year empty$
+ { "empty year in " cite$ * warning$ }
+ { write$
+ " " year * extra.label *
+ mid.sentence 'output.state :=
+ }
+ if$
+}
+
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+%
+% Emphasize the top string on the stack.
+%
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+%
+% Emphasize the top string on the stack, but add a trailing space.
+%
+FUNCTION {emphasize.space}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "\/}" * }
+ if$
+}
+
+%
+% Emphasize the top string on stack, add a trailing comma and space.
+%
+FUNCTION {emphasize.comma}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * ",\/}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+%
+% Format bibliographical entries with the first author last name first,
+% and subsequent authors with initials followed by last name.
+% All names are formatted in this routine.
+%
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr := % nameptr = 1;
+ s num.names$ 'numnames := % numnames = num.name$(s);
+ numnames 'namesleft :=
+ { namesleft #0 > }
+
+ { nameptr #1 =
+ {"{\sc " s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ * "}" * 't := }
+ {"{\sc " s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ * "}" * 't := }
+ if$
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "{\sc others}" =
+ { " {\sc et~al\mbox{.}}" * } % jrh: avoid spacing problems
+ { " {\sc and} " * t * } % from Chicago Manual of Style
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr := % nameptr += 1;
+ namesleft #1 - 'namesleft := % namesleft =- 1;
+ }
+ while$
+}
+
+FUNCTION {my.full.label}
+{ 's :=
+ #1 'nameptr := % nameptr = 1;
+ s num.names$ 'numnames := % numnames = num.name$(s);
+ numnames 'namesleft :=
+ { namesleft #0 > }
+
+ { s nameptr "{vv~}{ll}" format.name$ 't := % get the next name
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al\mbox{.}" * } % jrh: avoid spacing problems
+ { " and " * t * } % from Chicago Manual of Style
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr := % nameptr += 1;
+ namesleft #1 - 'namesleft := % namesleft =- 1;
+ }
+ while$
+
+}
+
+FUNCTION {format.names.fml}
+%
+% Format names in "familiar" format, with first initial followed by
+% last name. Like format.names, ALL names are formatted.
+% jtb: The names are NOT put in small caps
+%
+{ 's :=
+ #1 'nameptr := % nameptr = 1;
+ s num.names$ 'numnames := % numnames = num.name$(s);
+ numnames 'namesleft :=
+ { namesleft #0 > }
+
+ { "{" s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ * "}" * 't :=
+
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "{others}" =
+ { " {et~al\mbox{.}}" * }
+ { " {and} " * t * }
+% { " {\&} " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr := % nameptr += 1;
+ namesleft #1 - 'namesleft := % namesleft =- 1;
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names add.period$} % jtb: add period if none before
+ if$
+}
+
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+%
+% Format editor names for use in the "in" types: inbook, incollection,
+% inproceedings: first initial, then last names. When editors are the
+% LABEL for an entry, then format.editor is used which lists editors
+% by last name first.
+%
+FUNCTION {format.editors.fml}
+{ editor empty$
+ { "" }
+ { editor format.names.fml
+ editor num.names$ #1 >
+ { ", Eds." * } % jtb: removed parentheses
+ { ", Ed." * } % jtb: removed parentheses
+ if$
+ }
+ if$
+}
+
+%
+% Format editor names for use in labels, last names first.
+%
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", Eds." * } % jtb: removed parentheses
+ { ", Ed." * } % jtb: removed parentheses
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+}
+
+% Note that the APA style requres case changes
+% in article titles. The following does not
+% change cases. If you perfer it, uncomment the
+% following and comment out the above.
+
+%FUNCTION {format.title}
+%{ title empty$
+% { "" }
+% { title }
+% if$
+%}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.btitle}
+{ edition empty$
+ { title emphasize }
+ { title empty$
+ { title emphasize } % jtb: what is this supposed to do ?!?
+ { "{\em " title * "\/}, " * edition * " ed." * } % jtb: no parens for ed.
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.emphasize.booktitle}
+{ edition empty$
+ { booktitle emphasize }
+ { booktitle empty$
+ { booktitle emphasize } % jtb: what is this supposed to do ?!?
+ { "{\em " booktitle * "\/}, " * edition * " ed." * } % jtb: no ()s for ed.
+ if$
+ }
+ if$
+ }
+
+% jtb: if the preceding string (the title of the conference) is non-empty,
+% jtb: append the location, otherwise leave empty (so as to trigger the
+% jtb: error message in output.check
+FUNCTION {format.city}
+{ duplicate$ empty$
+ { }
+ { city empty$
+ { date empty$
+ { }
+ { " (" * date * ")" * }
+ if$
+ }
+ { date empty$
+ { " (" * city * ")" * }
+ { " (" * city * ", " * date * ")" * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+% jtb: If there is a series, this is added and the volume trails after it.
+% jtb: Otherwise, "Vol" is Capitalized.
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { series empty$
+ { "Vol." volume tie.or.space.connect}
+ { series ", " * "vol." volume tie.or.space.connect *}
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "Number" } % gnp - changed to mixed case always
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { pages n.dashify } % gnp - removed () % jtb: removed pp.
+ { pages }
+ if$
+ }
+ if$
+}
+
+% By Young (and Spencer)
+% GNP - fixed bugs with missing volume, number, and/or pages
+%
+% Format journal, volume, number, pages for article types.
+%
+FUNCTION {format.jour.vol}
+{ journal empty$
+ { "no journal in " cite$ * warning$
+ "" }
+ { journal emphasize.space }
+ if$
+ number empty$
+ { volume empty$
+ { "no number and no volume in " cite$ * warning$
+ "" * }
+ { "~{\em " * Volume * "}" * }
+ if$
+ }
+ { volume empty$
+ {"no volume for " cite$ * warning$
+ "~" * number * }
+ { "~" *
+ volume emphasize.comma
+ "~" * number * * }
+ if$
+ month empty$
+ {}
+ {" (" * month * ")" *}
+ if$
+ }
+ if$
+ pages empty$
+ {"page numbers missing in " cite$ * warning$
+ "" * } % gnp - place a null string on the stack for output
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ", " * pages n.dashify * } % gnp - removed pp. for articles
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "Chapter" } % gnp - changed to mixed case
+ { type "t" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ {"page numbers missing in " cite$ * warning$} % gnp - added check
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+% jtb: format for collections or proceedings not appearing in a journal
+FUNCTION {format.in.emphasize.booktitle}
+{ booktitle empty$
+ { "" }
+ { "In " format.emphasize.booktitle * }
+ if$
+}
+
+% jtb: format for proceedings appearing in a journal
+FUNCTION {format.in.booktitle}
+{ booktitle empty$
+ { "" }
+ { "In " booktitle * }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " format.emphasize.booktitle * }
+ % jtb: swapped editor location
+ { "In " format.emphasize.booktitle * ", " * format.editors.fml * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+% {pop$
+ {{ "" }
+ type "t" change.case$}
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Tech. Rep." }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ "See"
+ "\citeN{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al\mbox{.}" * } % jrh: avoid spacing problems
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al\mbox{.}" * } % jrh: avoid spacing problems
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \citeN{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ "See"
+ " \citeN{" * crossref * "}" *
+}
+
+% format.lab.names:
+%
+% determines "short" names for the abbreviated author information.
+% "Long" labels are created in calc.label, using the routine my.full.label
+% to format author and editor fields.
+%
+% There are 4 cases for labels. (n=3 in the example)
+% a) one author Foo
+% b) one to n Foo, Bar and Baz
+% c) use of "and others" Foo, Bar et al.
+% d) more than n Foo et al.
+%
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #2 > % change number to number of others allowed before
+ % forcing "et al".
+ { s #1 "{vv~}{ll}" format.name$ " et~al\mbox{.}" * } % jrh: \mbox{} added
+ {
+ numnames #1 - 'namesleft :=
+ #2 'nameptr :=
+ s #1 "{vv~}{ll}" format.name$
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al\mbox{.}" * } % jrh: avoid spacing problems
+ { " and " * s nameptr "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ { ", " * s nameptr "{vv~}{ll}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { "no key, author in " cite$ * warning$
+ cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { "no key, editor in " cite$ * warning$
+ cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+%
+% added - gnp. Provide label formatting by organization if author is null.
+%
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "no key, author or organization in " cite$ * warning$
+ cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { organization }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+%
+% added - gnp. Provide label formatting by organization if editor is null.
+%
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "no key, editor or organization in " cite$ * warning$
+ cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { organization }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "no key, author, or editor in " cite$ * warning$
+ cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+%
+% Changed - GNP. See also author.organization.sort, editor.organization.sort
+% Form label for BibTeX entry. The classification of which fields are used
+% for which type of entry (book, inbook, etc.) are taken from alpha.bst.
+% The change here from newapa is to also include organization as a
+% citation label if author or editor is missing.
+%
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+
+ author empty$ % generate the full label citation information.
+ { editor empty$
+ { organization empty$
+ { "no author, editor, or organization in " cite$ * warning$
+ "??" }
+ { organization }
+ if$
+ }
+ { editor my.full.label }
+ if$
+ }
+ { author my.full.label }
+ if$
+
+% leave label on the stack, to be popped when required.
+
+ "}{" * swap$ * "}{" *
+% year field.or.null purify$ #-1 #4 substring$ *
+%
+% save the year for sort processing afterwards (adding a, b, c, etc.)
+%
+ year field.or.null purify$ #-1 #4 substring$
+ 'label.year :=
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+
+ "\bibitem[\protect\citeauthoryear{" write$
+ calc.label write$
+ sort.year write$
+ "}]{" write$
+
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ crossref missing$
+ { format.jour.vol output
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors
+ "author and editor" output.check }
+ { format.authors
+ output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ output.year.check % added
+ new.block
+ format.btitle
+ "title" output.check
+ crossref missing$
+ { new.sentence % jtb: start a new sentence for series/volume
+ format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address "address" output.check % jtb: require address
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ howpublished output
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors
+ "author and editor" output.check
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ output.year.check % added
+ new.block
+ format.btitle
+ "title" output.check
+ crossref missing$
+ { new.sentence % jtb: start a new sentence for series/volume
+ format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address "address" output.check % jtb: require address
+ format.chapter.pages
+ "chapter and pages" output.check % jtb: moved from before publisher
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle
+ "booktitle" output.check
+ new.sentence % jtb: start a new sentence for series/volume
+ format.bvolume output
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address "address" output.check % jtb: require address
+ format.chapter.pages output % gnp - was special.output.nonnull
+% left out comma before page numbers
+ % jtb: moved from before publisher
+ }
+ { format.incoll.inproc.crossref
+ output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ crossref missing$
+ { journal missing$ % jtb: proceedings appearing in journals
+ { format.in.emphasize.booktitle format.city "booktitle" output.check
+ format.editors.fml output
+ new.sentence % jtb: start a new sentence for series/volume
+ format.bvolume output
+ format.number.series output
+ new.sentence
+ organization output
+ publisher "publisher" output.check % jtb: require publisher (?)
+ address "address" output.check % jtb: require address
+ format.pages output % jtb: moved from before publisher
+ }
+ % jtb: new:
+ { format.in.booktitle format.city "booktitle" output.check
+ format.editors.fml output
+ new.sentence
+ format.jour.vol output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { editor empty$
+ { organization "organization" output.check
+ organization format.key output } % if all else fails, use key
+ { format.editors "author and editor" output.check }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ output.year.check % added
+ new.block
+ format.btitle
+ "title" output.check
+ organization address new.block.checkb
+ % jtb: back to normal style: organization, address
+ organization "organization" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ "M.S.\ thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output % added
+ output.year.check % added
+ title howpublished new.block.checkb
+ format.title output
+ new.block
+ howpublished output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ format.thesis.type "Ph.D. thesis" output.nonnull
+ school "school" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output
+ organization format.key output } % gnp - changed from author format.key
+ { format.editors output.nonnull }
+ if$
+% author format.key output % gnp - removed (should be either
+% editor or organization
+ output.year.check % added (newapa)
+ new.block
+ format.btitle format.city "title" output.check % jtb: added city
+ new.sentence
+ format.bvolume output
+ format.number.series output
+ new.sentence
+ organization output
+ % jtb: normal order: publisher, address
+ publisher output
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ format.tr.number output % jtb: moved month ...
+ institution "institution" output.check
+ address output
+ new.sentence
+ month output % jtb: ... to here (no parens)
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."} % jtb: corrected: was "March"
+
+MACRO {apr} {"Apr."} % jtb: corrected: was "April"
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sept."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acmlett} {"ACM Lett. Program. Lang. Syst."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {ai} {"Artificial Intelligence"}
+
+MACRO {al} {"Ada Lett."}
+
+MACRO {acr} {"Adv. Comput. Res."}
+
+MACRO {bit} {"Bit"}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {cj} {"Comput. J."}
+
+MACRO {cn} {"Comput. Netw."}
+
+MACRO {cl} {"Comput. Lang."}
+
+MACRO {ibmjrd} {"IBM J. Res. and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ict} {"Inf. Contr."}
+
+MACRO {ieebcs} {"IEE/BCS Softw. Eng. J."}
+
+MACRO {ieees} {"IEEE Softw."}
+
+MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ieeetpds} {"IEEE Trans. Parall. Distrib. Syst."}
+
+MACRO {ieeetit} {"IEEE Trans. Inf. Theory"}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {icp} {"Inf. Comput."}
+
+MACRO {ist} {"Inf. Softw. Tech."}
+
+MACRO {ijsa} {"Int. J. Supercomput. Appl."}
+
+MACRO {ijpp} {"Int. J. Parallel Program."}
+
+MACRO {jlp} {"J. Logic Program."}
+
+MACRO {jfp} {"J. Funct. Program."}
+
+MACRO {jcss} {"J. Comput. Syst. Sci."}
+
+MACRO {jsmrp} {"J. Softw. Maint. Res. Pract."}
+
+MACRO {jss} {"J. Syst. Softw."}
+
+MACRO {jlc} {"J. Logic and Comput."}
+
+MACRO {jlsc} {"J. Lisp Symb. Comput."}
+
+MACRO {lpls} {"Lett. Program. Lang. Syst."}
+
+MACRO {mor} {"Math. Oper. Res."}
+
+MACRO {mscs} {"Math. Struct. Comput. Sci."}
+
+MACRO {mst} {"Math. Syst. Theor."} % jtb: was Math. Syst. Theory
+ % jtb: (if you ask me, I prefer the old way)
+MACRO {ngc} {"New Gen. Comput."}
+
+MACRO {scp} {"Sci. Comput. Program."}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {spe} {"Softw. Pract. Exper."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Graphics"}
+
+MACRO {toms} {"ACM Trans. Math. Softw."}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Program. Lang. Syst."}
+
+MACRO {tocl} {"ACM Trans. On Comp. Logic"}
+
+MACRO {tcs} {"Theor. Comput. Sci."} % jtb: was Theor. Comp. Sci.
+
+MACRO {tr} {"Tech. Rep."}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { " et~al" * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ "" }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { "missing author in " cite$ * warning$
+ editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+%
+% added - GNP. Stack author or organization for sorting (from alpha.bst).
+% Unlike alpha.bst, we need entire names, not abbreviations
+%
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { organization sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+%
+% added - GNP. Stack editor or organization for sorting (from alpha.bst).
+% Unlike alpha.bst, we need entire names, not abbreviations
+%
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { organization sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+%
+% Presort creates the bibentry's label via a call to calc.label, and then
+% sorts the entries based on entry type. Chicago.bst adds support for
+% including organizations as the sort key; the following is stolen from
+% alpha.bst.
+%
+{ calc.label sortify % recalculate bibitem label
+ year field.or.null purify$ #-1 #4 substring$ * % add year
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ #1 entry.max$ substring$ % added for newapa
+ 'sort.label := % added for newapa
+ sort.label % added for newapa
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT % by label, year, author/editor, title
+
+STRINGS { last.label next.extra }
+
+INTEGERS { last.extra.num }
+
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+%
+% Pass through all entries, comparing current entry to last one.
+% Need to concatenate year to the stack (done by calc.label) to determine
+% if two entries are the same (see presort)
+%
+{ last.label
+ calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
+ #1 entry.max$ substring$ = % are they equal?
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
+ #1 entry.max$ substring$ 'last.label := % assign to last.label
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label.year extra.label * 'sort.year :=
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.extra.label.stuff}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {bib.sort.order}
+{ sort.label
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {bib.sort.order}
+
+SORT % by sort.label, year, title --- giving final bib. order.
+
+FUNCTION {begin.bib}
+
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{}" write$ newline$
+}
+
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/tutorial/acmtrans2m.cls b/doc/tutorial/acmtrans2m.cls
new file mode 100644
index 0000000..442109c
--- /dev/null
+++ b/doc/tutorial/acmtrans2m.cls
@@ -0,0 +1,1460 @@
+% latex2e by nr 7/3/96
+% acmtrans.cls revised 4/19/96
+% revised again 31-JAN-1996 (see end of file)
+% revised 5-14-1997 :
+% Don't use sans-serif font in categories and descriptors
+% include latexsym by default
+% Define longpage and shortpage
+% Adjusted from the acmtrans2e.cls file to the needs of ACM TOCL by
+% Marco Aiello on June 14, 2000.
+% Further changes made by Frederic Goualard on Sep. 27, 2000
+% to take care of the indentation problem in the bibliography
+% arising without the use of the hyperref package.
+% Modularization to adapt to the needs of JACM, TOCL,
+% TODAES, TODS, TOGS, TOMS, AND TOPLAS, by Marco Aiello on
+% June 2001.
+% Here is the basic framework that is needed to convert your paper
+% into ACM Transactions format and bibliographic format. For a tutorial
+% introduction, see ``instructions.tex'' (compile it with LaTeX) that
+% accompanies the distribution of this style file.
+%
+% -> \documentclass{acmtrans2m}
+% -> \markboth{}{}
+% takes 2 arguments and it is for the left- and right-page headers:
+% the first set of braces is assigned for author's name(s)
+% and
+% the second set of braces is assigned for the title
+% (if the title is too long, contraction may be needed
+% -> \title{}
+% if the title is too long, it can be separated by \\
+% -> \author{}
+% author1 \\ author1 affiliation
+% \and
+% author2 \\ author2 affiliation
+% -> \begin{abstract}
+% -> \end{abstract}
+%
+% -> \category{}{}{}
+% takes 3 arguments for the Computing Reviews Classification Scheme.
+% ex: \category{D.3.3}{Programming Languages}{Language Constructs and
+% Features}[data types and structures]
+% the last argument, in square brackets, is optional.
+% -> \terms{} (ex: \terms{Human Factors, Languages})
+% -> \keywords{} (in alphabetical order \keywords{document processing, sequences,
+% string searching, subsequences, substrings})
+% -> \begin{document}
+%
+% -> \begin{bottomstuff}
+% similar to \thanks
+% for authors' addresses; research/grant statements
+% -> \end{bottomstuff}
+% -> \maketitle
+%
+% Now you can start the body of the paper; your figures, tables and
+% use all the latex constructs.
+%
+% -> \begin{acks}
+% acknowledgements
+% -> \end{acks}
+%
+% -> \bibliographystyle{acmtrans}
+% -> \bibliography{mybib_file}
+%
+% ****
+% If your paper has been accepted with a separate (electronic only)
+% appendix, you need to add the following control sequence:
+%
+%
+% body of appendix
+%!!!!!! \appendixhead has be cut into two: \appendixhead and \elecappendix
+%!!!!!! See end of file. (jtb)
+%
+% -> \end{document}
+%
+% Do not worry about the other definitions in this style file
+% Remember to compile: latex, bibtex, latex latex
+%
+% Bibliographic cite forms needed:
+%
+% \cite{key}
+% which produces citations with author list and year.
+% eg. [Brown 1978; Jarke, et al. 1985]
+% \citeA{key}
+% which produces citations with only the author list.
+% eg. [Brown; Jarke, et al.]
+% \citeN{key}
+% which produces citations with the author list and year, but
+% can be used as nouns in a sentence; no brackets appear around
+% the author names, but only around the year.
+% eg. Shneiderman [1978] states that......
+% \citeN should only be used for a single citation.
+% \citeNN{refkey1,refkey2} for author [ref1year; ref2year]
+% \citeyear{key}
+% which produces the year information only, within brackets.
+%
+% Abbreviated author lists use the ``et al.'' construct.
+%
+% The above are examples of required ACM bibliographic cite formats needed.
+% *******************
+% Here is the complete list of cite forms from the chicago bibliographic style
+%
+% \cite{key}
+% which produces citations with abbreviated author list and year.
+% \citeNP{key}
+% which produces citations with abbreviated author list and year.
+% \citeA{key}
+% which produces only the abbreviated author list.
+% \citeANP{key}
+% which produces only the abbreviated author list.
+% \citeN{key}
+% which produces the abbreviated author list and year, with only the
+% year in parentheses. Use with only one citation.
+% \citeyear{key}
+% which produces the year information only, within parentheses.
+% \citeyearNP{key}
+% which produces the year information only.
+%
+% Abbreviated author lists use the ``et al.'' construct.
+%
+% `NP' means `no parentheses'
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{acmtrans2m} [1996/07/03 ACM Transactions class based on <23 April 96>]
+\RequirePackage{latexsym}
+%aiellom{
+\RequirePackage{url}
+
+% Do not change the following! Use the appropriate acmtocl, acmtods, ... option
+\def\@acmVolume{V} %the volume
+\def\@acmNumber{N} %the number
+\def\@acmYear{YY} %the last two digits of the year,
+\def\@acmMonth{Month} %the month
+\def\@journalName{ACM Journal Name} %the name of the ACM journal
+\def\@journalNameShort{jn} %the acronym of the ACM journal
+\def\@permissionCodeOne{0000-0000} %the permission code of the ACM journal
+\def\@permissionCodeTwo{0000} %the permission code of the ACM journal part 2
+\def\@pageCode{\acmPageCode} %the first page of the article in 4 digits
+
+
+\newif\if at acmjacm
+\newif\if at acmtocl
+\newif\if at acmtodaes
+\newif\if at acmtods
+\newif\if at acmtogs
+\newif\if at acmtoms
+\newif\if at acmtoplas
+
+\DeclareOption{acmnow}{
+ \typeout{}
+ \typeout{Directly generating the Month and Year for footers from the clock.}
+ \def\@acmYear{\yearTwoDigits}
+ \def\@acmMonth{\monthWord}
+}
+
+\DeclareOption{acmjacm}{
+ \typeout{}
+ \typeout{Using ACM, JACM's option: 2001/06/01 by Marco Aiello et al.}
+ \typeout{}
+ %\global\@acmjacmfalse
+ \global\@acmtoclfalse
+ \global\@acmtodaesfalse
+ \global\@acmtodsfalse
+ \global\@acmtogsfalse
+ \global\@acmtomsfalse
+ \global\@acmtoplasfalse
+ \global\@acmjacmtrue
+ \def\@journalName{Journal of the ACM}
+ \def\@journalNameShort{jacm}
+ \def\@permissionCodeOne{0004-5411}
+ \def\@permissionCodeTwo{0100}
+}
+
+\DeclareOption{acmtocl}{
+ \typeout{}
+ \typeout{Using ACM, TOCL's option: 2001/06/01 by Marco Aiello et al.}
+ \typeout{}
+ \global\@acmjacmfalse
+ \global\@acmtoclfalse
+ \global\@acmtodaesfalse
+ \global\@acmtodsfalse
+ \global\@acmtogsfalse
+ \global\@acmtomsfalse
+ \global\@acmtoplasfalse
+ \global\@acmtocltrue
+ \def\@journalName{ACM Transactions on Computational Logic}
+ \def\@journalNameShort{tocl}
+ \def\@permissionCodeOne{1529-3785}
+ \def\@permissionCodeTwo{0700}
+}
+
+\DeclareOption{acmtodaes}{
+ \typeout{}
+ \typeout{Using ACM, TODAES option: 2001/06/01 by Marco Aiello et al.}
+ \typeout{}
+ \global\@acmjacmfalse
+ \global\@acmtoclfalse
+ %\global\@acmtodaesfalse
+ \global\@acmtodsfalse
+ \global\@acmtogsfalse
+ \global\@acmtomsfalse
+ \global\@acmtoplasfalse
+ \global\@acmtodaestrue
+ \def\@journalName{ACM Transactions on Design Automation of Electronic Systems}
+ \def\@journalNameShort{todaes}
+ \def\@permissionCodeOne{1084-4309}
+ \def\@permissionCodeTwo{0400}
+}
+
+\DeclareOption{acmtods}{
+ \typeout{}
+ \typeout{Using ACM, TODS's option: 2001/06/01 by Marco Aiello et al.}
+ \typeout{}
+ \global\@acmjacmfalse
+ \global\@acmtoclfalse
+ \global\@acmtodaesfalse
+ %\global\@acmtodsfalse
+ \global\@acmtogsfalse
+ \global\@acmtomsfalse
+ \global\@acmtoplasfalse
+ \global\@acmtodstrue
+ \def\@journalName{ACM Transactions on Database Systems}
+ \def\@journalNameShort{tods}
+ \def\@permissionCodeOne{0362-5915}
+ \def\@permissionCodeTwo{0300}
+}
+
+\DeclareOption{acmtogs}{
+ \typeout{}
+ \typeout{Using ACM, TOGS's option: 2001/06/01 by Marco Aiello et al.}
+ \typeout{}
+ \global\@acmjacmfalse
+ \global\@acmtoclfalse
+ \global\@acmtodaesfalse
+ \global\@acmtodsfalse
+ %\global\@acmtogsfalse
+ \global\@acmtomsfalse
+ \global\@acmtoplasfalse
+ \global\@acmtogstrue
+ \def\@journalName{ACM Transactions on Graphics}
+ \def\@journalNameShort{togs}
+ \def\@permissionCodeOne{0730-0301}
+ \def\@permissionCodeTwo{0100}
+}
+
+\DeclareOption{acmtoms}{
+ \typeout{}
+ \typeout{Using ACM, TOMS's option: 2001/06/01 by Marco Aiello et al.}
+ \typeout{}
+ \global\@acmjacmfalse
+ \global\@acmtoclfalse
+ \global\@acmtodaesfalse
+ \global\@acmtodsfalse
+ \global\@acmtogsfalse
+ %\global\@acmtomsfalse
+ \global\@acmtoplasfalse
+ \global\@acmtomstrue
+ \def\@journalName{ACM Transactions on Mathematical Software}
+ \def\@journalNameShort{toms}
+ \def\@permissionCodeOne{0098-3500}
+ \def\@permissionCodeTwo{1200}
+}
+
+\DeclareOption{acmtoplas}{
+ \typeout{}
+ \typeout{Using ACM, TOPLAS option: 2001/06/01 by Marco Aiello et al.}
+ \typeout{}
+ \global\@acmjacmfalse
+ \global\@acmtoclfalse
+ \global\@acmtodaesfalse
+ \global\@acmtodsfalse
+ \global\@acmtogsfalse
+ \global\@acmtomsfalse
+ %\global\@acmtoplasfalse
+ \global\@acmtoplastrue
+ \def\@journalName{ACM Transactions on Programming Languages and Systems}
+ \def\@journalNameShort{toplas}
+ \def\@permissionCodeOne{0164-0925}
+ \def\@permissionCodeTwo{0500}
+}
+%}aiellom
+
+
+
+\if at compatibility\else
+\DeclareOption{a4paper}
+ {\setlength\paperheight {297mm}%
+ \setlength\paperwidth {210mm}%
+ \def\special at paper{210mm,297mm}}
+\DeclareOption{a5paper}
+ {\setlength\paperheight {210mm}%
+ \setlength\paperwidth {148mm}%
+ \def\special at paper{148mm,210mm}}
+\DeclareOption{b5paper}
+ {\setlength\paperheight {250mm}%
+ \setlength\paperwidth {176mm}%
+ \setlength\voffset {-15mm}%
+ \setlength\hoffset {-20mm}%
+ \def\special at paper{176mm,250mm}}
+\DeclareOption{letterpaper}
+ {\setlength\paperheight {11in}%
+ \setlength\paperwidth {8.5in}%
+ \def\special at paper{8.5in,11in}}
+\DeclareOption{legalpaper}
+ {\setlength\paperheight {14in}%
+ \setlength\paperwidth {8.5in}%
+ \def\special at paper{8.5in,14in}}
+\DeclareOption{executivepaper}
+ {\setlength\paperheight {10.5in}%
+ \setlength\paperwidth {7.25in}%
+ \def\special at paper{7.25in,10.5in}}
+\DeclareOption{landscape}
+ {\setlength\@tempdima {\paperheight}%
+ \setlength\paperheight {\paperwidth}%
+ \setlength\paperwidth {\@tempdima}}
+\fi
+
+\DeclareOption{checkMargin}{\setlength\overfullrule{5pt}}
+\DeclareOption{final}{\setlength\overfullrule{0pt}}
+
+\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}
+\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue}
+
+\DeclareOption{10pt}{\def\@ptsize{0}} %needed for amssymbols.sty
+\DeclareOption{11pt}{\ClassError{acmtrans}{11pt style not supported}
+ {ACM transactions documents can be set in 10pt only}}
+\DeclareOption{12pt}{\ClassError{acmtrans}{11pt style not supported}
+ {ACM transactions documents can be set in 10pt only}}
+\newif\if at hyperref
+\DeclareOption{hyperref}{%
+ \def\pages{\pageref{@firstpg}--\pageref{@lastpg}}%
+ \def\mypage{\thepage}%
+ \def\@getpagenum#1#2#3#4{#2}%
+ \def\pdfinfo#1#2{\pdfmark{pdfmark=/DOCINFO,Title=#1,Author=#2}}
+ \global\@hyperreftrue
+ }
+\DeclareOption{nohyperref}{
+ \def\pages{\pageref{@firstpg}--\pageref{@lastpg}}%
+ \def\@getpagenum#1#2{#2}%
+ \def\mypage{\thepage}%
+ \def\pdfinfo#1#2{}%
+ \def\pdfbookmark#1#2{}%
+ \global\@hyperreffalse
+ }
+\DeclareOption{notfinal}{
+ \def\pages{BD}%
+ \def\mypage{TBD}%
+ \def\@getpagenum#1#2{#2}%
+ \def\pdfinfo#1#2{}%
+ \def\pdfbookmark#1#2{}%
+ }
+\DeclareOption{omitline}{\def\@abstractbottom{\relax}}
+\DeclareOption{dontomitline}{\def\@abstractbottom{\if at acmjacm\else\hbox{\vrule height .2pt width 30pc}\fi}}
+\ExecuteOptions{twoside,notfinal,10pt,dontomitline,nohyperref,letterpaper} % defaults
+
+
+
+\ProcessOptions
+
+%{aiellom to automatize the issue specific data
+\def\acmVolume#1{\def\@acmVolume{#1}}
+\def\acmNumber#1{\def\@acmNumber{#1}}
+\def\acmYear#1{\def\@acmYear{#1}}
+\def\acmMonth#1{\def\@acmMonth{#1}}
+
+
+% Command to get the year from the system and display the last two digits
+\newcommand{\ignoretwo}[2]{}
+\newcommand{\yearTwoDigits}{\expandafter\ignoretwo\the\year}
+%To transform the month number in its name in English
+\newcommand{\monthWord}{\ifnum\the\month=1 January\fi\ifnum\the\month=2 February\fi\ifnum\the\month=3 March\fi\ifnum\the\month=4 April\fi\ifnum\the\month=5 May\fi\ifnum\the\month=6 June\fi\ifnum\the\month=7 July\fi\ifnum\the\month=8 August\fi\ifnum\the\month=9 September\fi\ifnum\the\month=10 October\fi\ifnum\the\month=11 November\fi\ifnum\the\month=12 December\fi}
+% overright the \@setref definition, so that if a reference is undefined
+% then it returns a number 0 and then the usual double boldface
+% question marks ??
+% this is necessary for the \acmPageCode command, otherwise it gives an error
+% everytime the aux file is not there
+\def\@setref#1#2#3{%
+ \ifx#1\relax
+ \number 0\relax
+ \protect\G at refundefinedtrue
+ \nfss at text{\reset at font\bfseries ??}%
+ \@latex at warning{Reference `#3' on page \thepage \space undefined}%
+ \else
+ \expandafter#2#1\null
+ \fi}
+%make the code a four digits string based on the first page number
+\newcommand{\acmPageCode}{\bgroup
+ \newcount\c at tempo
+ \setcounter{tempo}{\number\pageref{@firstpg}}\ifnum \c at tempo<1000 0\fi\ifnum \c at tempo<100 0\fi\ifnum \c at tempo<10 0\fi\ifnum \c at tempo<1 0\fi\pageref{@firstpg}
+ \egroup
+}
+%}aiellom
+
+
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\renewcommand\normalsize{%
+ \@setfontsize\normalsize\@xpt\@xiipt
+ \abovedisplayskip 6pt plus2pt minus1pt\belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 6pt plus0pt minus 3pt
+ \belowdisplayshortskip 6pt plus0pt minus3pt\let\@listi\@listI}
+
+\newcommand\small{%
+ \@setfontsize\small\@ixpt{11pt}%
+ \abovedisplayskip 5pt plus 2pt minus 1pt\belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 5pt plus0pt minus2pt\belowdisplayshortskip 5pt plus0pt
+ minus 2pt
+ \def\@listi{\leftmargin\leftmargini \topsep 5pt plus 2pt minus 1pt\parsep 0pt
+ plus .7pt
+ \itemsep 1.6pt plus .8pt}}
+\newcommand\footnotesize{%
+% \@setfontsize\footnotesize\@viiipt{10pt}
+ \@setsize\footnotesize{10pt}\viiipt\@viiipt
+ \abovedisplayskip 4pt plus 1pt minus 0pt\belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 4pt plus 0pt minus 1pt\belowdisplayshortskip 4pt plus
+ 0pt minus 1pt
+ \def\@listi{\leftmargin\leftmargini \topsep 4pt plus 1pt minus
+ 0pt\parsep 0pt plus .5pt
+ \itemsep 1pt plus .7pt}}
+
+\newcommand\scriptsize{\@setfontsize\scriptsize\@viipt\@viiipt}
+\newcommand\tiny{\@setfontsize\tiny\@vpt\@vipt}
+\newcommand\large{\@setfontsize\large\@xiipt{14}}
+\newcommand\Large{\@setfontsize\Large\@xivpt{18}}
+\newcommand\LARGE{\@setfontsize\LARGE\@xviipt{20}}
+\newcommand\huge{\@setfontsize\huge\@xxpt{25}}
+\newcommand\Huge{\@setfontsize\Huge\@xxvpt{30}}
+
+\normalsize
+
+ \oddsidemargin .75in \evensidemargin .75in \marginparwidth .5in
+ \marginparsep .125in
+ \topmargin .25in \headheight 12pt\headsep 16pt
+ %% not in latex2e \footheight 10pt
+ \footskip 15pt
+
+\textheight 47pc \textwidth 30pc \columnsep 10pt \columnseprule 0pt
+% next five lines added by K.R. Apt, March 20, 01
+\advance\textheight-2.6pt
+\newdimen\normaltextheight
+\setlength\normaltextheight{\textheight}
+%\renewcommand\rmdefault{pnc}
+%\renewcommand\sfdefault{phv}
+
+
+\footnotesep 7pt
+\skip\footins 15pt plus 4pt minus 3pt
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep \floatsep
+\intextsep 1pc plus 1pc
+%%% not in 2e %% \@maxsep 1pc
+%%% not in 2e %% \@dblmaxsep 20pt
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@fptop 0pt plus 1fil \@fpsep 1pc plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 6pt
+
+\parskip 0pt plus .1pt \parindent 10pt \partopsep 0pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+
+\def\part{\@ucheadtrue
+ \@startsection{part}{9}{\z@}{-10pt plus -4pt minus
+ -2pt}{4pt}{\reset at font\normalsize\sffamily}}
+\def\section{\@ucheadtrue
+ \@startsection{section}{1}{\z@}{-10pt plus -4pt minus
+ -2pt}{4pt}{\reset at font\normalsize\sffamily}}
+\def\subsection{\@ucheadfalse
+ \@startsection{subsection}{2}{\z@}{-8pt plus -2pt minus
+ -1pt}{4pt}{\reset at font\normalsize\sffamily}}
+\def\subsubsection{\@ucheadfalse
+ \@startsection{subsubsection}{3}{\parindent}{6pt plus
+1pt}{-5pt}{\reset at font\normalsize\itshape}}
+\def\paragraph{\@ucheadfalse
+ \@startsection{paragraph}{3}{\parindent}{6pt plus
+1pt}{-5pt}{\reset at font\normalsize\itshape}}
+
+\renewcommand{\@seccntformat}[1]{\textup{\csname the#1\endcsname}}
+
+\gdef\@period{.}
+\def\@trivlist{\@topsepadd\topsep
+\if at noskipsec \gdef\@period{}\leavevmode\gdef\@period{.}\fi
+ \ifvmode \advance\@topsepadd\partopsep \else \unskip\par\fi
+ \if at inlabel \@noparitemtrue \@noparlisttrue
+ \else \@noparlistfalse \@topsep\@topsepadd \fi
+ \advance\@topsep \parskip
+ \leftskip\z@\rightskip\@rightskip \parfillskip\@flushglue
+ \@setpar{\if at newlist\else{\@@par}\fi} \global\@newlisttrue
+\@outerparskip\parskip}
+
+
+\def\@startsection#1#2#3#4#5#6{%
+ \if at noskipsec \leavevmode \fi
+ \par
+ \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@
+ \@tempskipa -\@tempskipa \@afterindentfalse
+ \fi
+ \if at nobreak
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty\addvspace\@tempskipa
+ \fi
+ \@ifstar
+ {\@ssect{#3}{#4}{#5}{#6}}%
+ {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c at secnumdepth
+ \let\@svsec\@empty
+ \else
+ \refstepcounter{#1}%
+ \if at uchead%
+ \protected at edef\@svsec{\@seccntformat{#1}.\quad\relax}%
+ \else%
+ \protected at edef\@svsec{\@seccntformat{#1}\quad\relax}%
+ \fi%
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup
+ #6{%
+ \@hangfrom{\hskip #3\relax\@svsec}%
+ \interlinepenalty \@M \if at uchead\MakeUppercase{#8}\else#8\fi \@@par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c at secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}%
+ \fi
+ #7}%
+ \else
+ \def\@svsechd{%
+ #6{\hskip #3\relax
+ \@svsec \if at uchead\Makeuppercase{#8}\else#8\fi}%
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c at secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}%
+ \fi
+ #7}}%
+ \fi
+ \@xsect{#5}}
+
+\def\@xsect#1{\@tempskipa #1\relax
+ \ifdim \@tempskipa>\z@
+ \par \nobreak
+ \vskip \@tempskipa
+ \@afterheading
+ \else \global\@nobreakfalse \global\@noskipsectrue
+ \everypar{\if at noskipsec \global\@noskipsecfalse
+ \clubpenalty\@M \hskip -\parindent
+ \begingroup \@svsechd\@period \endgroup \unskip
+ \hskip -#1
+ \else \clubpenalty \@clubpenalty
+ \everypar{}\fi}\fi\ignorespaces}
+\newif\if at uchead\@ucheadfalse
+
+
+\setcounter{secnumdepth}{3}
+\newcounter{secnumbookdepth}
+\setcounter{secnumbookdepth}{3}
+
+\newfont{\apbf}{cmbx9}
+
+\def\@withappendix#1{App--\number #1}
+
+\newcommand{\elecappendix}{
+}
+
+\def\appenheader{\global\@topnum\z@ \global\@botroom \textheight \begin{figure}
+\newfont{\sc}{cmcsc10}
+\parindent\z@
+\hbox{}
+\vskip -\textfloatsep
+\vskip 11pt
+\hrule height .2pt width 30pc
+\vskip 2pt\rule{0pt}{10pt}\ignorespaces}
+\def\endappenheader{\end{figure}\gdef\appendixhead{}}
+
+\def\@appsec{}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\@appsec{APPENDIX }
+ \def\thesection{\Alph{section}}
+ \def\theHsection{\Alph{section}}}
+
+
+
+\labelsep 5pt
+\settowidth{\leftmargini}{(9)} \addtolength\leftmargini\labelsep
+\settowidth{\leftmarginii}{(b)} \addtolength\leftmarginii\labelsep
+\leftmarginiii \leftmarginii
+\leftmarginiv \leftmarginii
+\leftmarginv \leftmarginii
+\leftmarginvi \leftmarginii
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini \parsep 0pt plus 1pt\topsep 6pt plus 2pt
+minus 2pt\itemsep 2pt plus 1pt minus .5pt}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt
+ \parsep 0pt plus .5pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt
+ \parsep 0pt plus .5pt
+ \itemsep \parsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+
+
+
+\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
+ {\csname label\@enumctr\endcsname}{\usecounter
+ {\@enumctr}\def\makelabel##1{##1\hss}}\fi}
+\def\longenum{\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
+ {\csname label\@enumctr\endcsname}{\usecounter
+ {\@enumctr}\labelwidth\z@}\fi}
+%\leftmargin\z@ \itemindent\parindent}\fi} - this indents each item in enumerate
+\let\endlongenum\endlist
+%%--------------------CHANGED: always roman parentheses. dave ---------------%%
+\def\labelenumi{{\rm (}\arabic{enumi}\/{\rm )}}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{{\rm (}\alph{enumii}\rm{)}}
+\def\theenumii{\alph{enumii}}
+\def\p at enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p at enumiii{\theenumi{\rm (}\theenumii{\rm )}}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p at enumiv{\p at enumiii\theenumiii}
+
+\def\p at enumiv{\p at enumiii\theenumiii}
+
+\def\itemize{\list{---\hskip -\labelsep}{\settowidth
+ {\leftmargin}{---}\labelwidth\leftmargin
+ \addtolength{\labelwidth}{-\labelsep}}}
+\let\enditemize\endlist
+\def\longitem{\list{---}{\labelwidth\z@
+ \leftmargin\z@ \itemindent\parindent \advance\itemindent\labelsep}}
+\let\endlongitem\endlist
+\def\verse{\let\\=\@centercr
+ \list{}{\leftmargin 2pc
+ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\leftmargin 2pc \listparindent .5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\leftmargin 2pc \rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\description{\list{}{\listparindent\parindent\labelwidth\z@
+ \leftmargin\z@ \itemindent\parindent\advance\itemindent\labelsep
+ \def\makelabel##1{\it ##1.}}}
+\let\enddescription\endlist
+
+\def\describe#1{\list{}{\listparindent\parindent\settowidth{\labelwidth}{#1}\leftmargin
+ \labelwidth\addtolength\leftmargin\labelsep\def\makelabel##1{##1\hfil}}}
+\let\enddescribe\endlist
+
+ \def\program{\ifx\@currsize\normalsize\small \else \rm \fi\tabbing}
+ \let\endprogram\endtabbing
+ \def\@begintheorem#1#2{\trivlist \item[\hskip 10pt\hskip
+ \labelsep{\sc{#1}\hskip 5pt\relax #2.}] \itshape}
+ % aiellom{: this is what makes the theorem environment with names
+ % ABOVE #1 is the word example, corollary, etc.
+ % #2 is the number
+ % \def\@opargbegintheorem#1#2#3{\trivlist
+ % \item[\hskip 10pt \hskip \labelsep{\sc #1\savebox\@tempboxa{#3}\ifdim
+ % \wd\@tempboxa>\z@ \hskip 5pt\relax \box\@tempboxa\fi.}] \itshape}
+ % is been changed to
+ % #1 is the word theorem, lemma, etc.
+ % #2 is the number
+ % #3 is the name of the theorem, lemma, etc.
+ \def\@opargbegintheorem#1#2#3{\trivlist
+ \item[\hskip 10pt \hskip
+\labelsep{\sc{#1}\savebox\@tempboxa{\sc{#3}}\ifdim
+ \wd\@tempboxa>\z@ \hskip 5pt\relax \sc{#2} \box\@tempboxa\fi.}]
+\itshape}
+ % aiellom}
+
+
+
+\newif\if at qeded\global\@qededfalse
+\def\proof{\global\@qededfalse\@ifnextchar[{\@xproof}{\@proof}}
+\def\endproof{\if at qeded\else\qed\fi\endtrivlist}
+\def\qed{\unskip\kern 10pt{\unitlength1pt\linethickness{.4pt}\framebox(6,6){}}
+\global\@qededtrue}
+\def\@proof{\trivlist \item[\hskip 10pt\hskip
+ \labelsep{\sc Proof.}]\ignorespaces}
+\def\@xproof[#1]{\trivlist \item[\hskip 10pt\hskip
+ \labelsep{\sc Proof #1.}]\ignorespaces}
+
+\def\newdef#1#2{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}\expandafter\xdef\csname
+the#1\endcsname{\@thmcounter{#1}}\global
+ \@namedef{#1}{\@defthm{#1}{#2}}\global
+ \@namedef{end#1}{\@endtheorem}}}
+\def\@defthm#1#2{\refstepcounter
+ {#1}\@ifnextchar[{\@ydefthm{#1}{#2}}{\@xdefthm{#1}{#2}}}
+\def\@xdefthm#1#2{\@begindef{#2}{\csname the#1\endcsname}\ignorespaces}
+\def\@ydefthm#1#2[#3]{\trivlist \item[\hskip 10pt\hskip
+ \labelsep{\it #2\savebox\@tempboxa{#3}\ifdim
+ \wd\@tempboxa>\z@ \ \box\@tempboxa\fi.}]\ignorespaces}
+\def\@begindef#1#2{\trivlist \item[\hskip 10pt\hskip
+ \labelsep{\it #1\ \rm #2.}]}
+
+\def\theequation{\arabic{equation}}
+
+\def\titlepage{\@restonecolfalse\if at twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c at page\z@}
+\def\endtitlepage{\if at restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 2.5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter{section}
+\newcounter{subsection}[section]
+\newcounter{subsubsection}[subsection]
+\newcounter{paragraph}[subsubsection]
+
+\def\thepart{\Roman{part}}
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection.\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+\def\l at part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l at section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+\def\l at subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l at subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\listoffigures{\section*{List of Figures\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+\def\l at figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l at table\l at figure
+
+
+\def\thebibliography#1{\par\footnotesize
+\@ucheadfalse
+\@startsection{subsection}{2}{\z@}{16pt plus 2pt minus
+ 1pt}{2pt}{\sf}*{REFERENCES}%
+\list{\arabic{enumi}.}{%
+ \settowidth{\labelwidth}{99.}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep \topsep \z@ \parsep 0pt plus .1pt
+ \itemsep \parsep
+ \usecounter{enumi}}%
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy
+ \widowpenalty=4500
+ \clubpenalty=4500
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+
+\newif\if at restonecol
+\def\theindex{\@restonecoltrue\if at twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if at restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule \@height 0.2\p@ \@width 47\p@
+ \kern 2.6\p@
+}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ $^{\@thefnmark}$#1}
+
+
+\setcounter{topnumber}{3}
+\def\topfraction{.99}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.5}
+\setcounter{totalnumber}{3}
+\def\textfraction{.01}
+\def\floatpagefraction{.85}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{\vskip 1pc \setbox\@tempboxa\hbox{#1.\hskip
+1em\relax #2}
+ \ifdim \wd\@tempboxa >\hsize #1. #2\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+\def\nocaption{\refstepcounter\@captype \par
+ \vskip 1pc \hbox to\hsize{\hfil \footnotesize Figure \thefigure
+ \hfil}}
+
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c at figure}
+\def\fps at figure{tbp}
+\def\ftype at figure{1}
+\def\ext at figure{lof}
+\def\fnum at figure{Fig.\ \thefigure}
+\def\figure{\let\normalsize\footnotesize \normalsize \@float{figure}}
+\let\endfigure\end at float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end at dblfloat}
+
+\newcounter{table}
+\def\thetable{\@Roman\c at table}
+\def\fps at table{tbp}
+\def\ftype at table{2}
+\def\ext at table{lot}
+\def\fnum at table{Table \thetable}
+\def\table{\let\normalsize\footnotesize \normalsize\@float{table}}
+\let\endtable\end at float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end at dblfloat}
+\def\acmtable#1{\@narrowfig #1\relax
+ \let\caption\@atcap \let\nocaption\@atnocap
+ \def\@tmpnf{}\@ifnextchar[{\@xntab}{\@ntab}}
+\def\endacmtable{\hbox to \textwidth{\hfil
+\vbox{\hsize \@narrowfig
+\box\@nfcapbox
+{\baselineskip 4pt \hbox{\vrule height .4pt width \hsize}}
+\vskip -1pt
+\box\@nfigbox\vskip -1pt
+{\baselineskip 4pt \hbox{\vrule height .4pt width \hsize}}}\hfil}
+\end at float}
+\def\@xntab[#1]{\def\@tmpnf{[#1]}\@ntab}
+\def\@ntab{\expandafter\table\@tmpnf
+ \setbox\@nfigbox\vbox\bgroup
+ \hsize \@narrowfig \@parboxrestore}
+\def\@atmakecap #1#2{\setbox\@tempboxa\hbox{#1.\hskip 1em\relax #2}
+ \ifdim \wd\@tempboxa >\hsize \sloppy #1.\hskip 1em\relax #2 \par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+\def\@atcap{\par\egroup\refstepcounter\@captype
+ \@dblarg{\@atcapx\@captype}}
+\long\def\@atcapx#1[#2]#3{\setbox\@nfcapbox\vbox {\hsize \wd\@nfigbox
+ \@parboxrestore
+ \@atmakecap{\csname fnum@#1\endcsname}{\ignorespaces #3}\par}}
+\def\@atnocap{\egroup \refstepcounter\@captype
+ \setbox\@nfcapbox\vbox {\hsize \wd\@nfigbox
+ \hbox to\hsize{\hfil \footnotesize Table \thetable\hfil}}}
+
+%
+%% Narrow figures
+%
+\def\narrowfig#1{\@narrowfig #1\relax
+ \let\caption\@nfcap \let\nocaption\@nfnocap
+ \def\@tmpnf{}\@ifnextchar[{\@xnfig}{\@nfig}}
+\def\endnarrowfig{\hbox to \textwidth{\if at nfeven
+ \box\@nfcapbox\hfil\box\@nfigbox
+ \else \box\@nfigbox\hfil\box\@nfcapbox\fi}\end at float}
+\def\@xnfig[#1]{\def\@tmpnf{[#1]}\@nfig}
+\def\@nfig{\expandafter\figure\@tmpnf
+ \setbox\@nfigbox\vbox\bgroup
+ \hsize \@narrowfig \@parboxrestore}
+\def\@nfmakecap #1#2{\setbox\@tempboxa\hbox{#1.\hskip 1em\relax #2}
+ \ifdim \wd\@tempboxa >\hsize \sloppy #1.\hskip 1em\relax #2 \par \else \hbox
+to\hsize{\if at nfeven\else\hfil\fi\box\@tempboxa\if at nfeven\hfil\fi}
+ \fi}
+\def\@nfcap{\par\egroup\refstepcounter\@captype
+ \@dblarg{\@nfcapx\@captype}}
+\long\def\@nfcapx#1[#2]#3{\@seteven
+ \setbox\@nfcapbox\vbox to \ht\@nfigbox
+ {\hsize \textwidth \advance\hsize -2pc \advance\hsize -\wd\@nfigbox
+ \@parboxrestore
+ \vfil
+ \@nfmakecap{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \vfil}}
+\def\@nfnocap{\egroup \refstepcounter\@captype \@seteven
+ \setbox\@nfcapbox\vbox to \ht\@nfigbox
+ {\hsize \textwidth \advance\hsize -2pc \advance\hsize -\wd\@nfigbox
+ \@parboxrestore
+ \vfil
+ \hbox to\hsize{\if at nfeven\else\hfil\fi
+ \footnotesize Figure \thefigure
+ \if at nfeven\hfil\fi}
+ \vfil}}
+\def\@seteven{\@nfeventrue
+ \@ifundefined{r@@nf\thefigure}{}{%
+ \edef\@tmpnf{\csname r@@nf\thefigure\endcsname}%
+ \edef\@tmpnf{\expandafter\@getpagenum\@tmpnf}%
+ \ifodd\@tmpnf\relax\@nfevenfalse\fi}%
+\label{@nf\thefigure}\edef\@tmpnfx{\if at nfeven e\else o\fi}
+\edef\@tmpnf{\write\@unused {\noexpand\ifodd \noexpand\c at page
+ \noexpand\if \@tmpnfx e\noexpand\@nfmsg{\thefigure} \noexpand\fi
+ \noexpand\else
+ \noexpand\if \@tmpnfx o\noexpand\@nfmsg{\thefigure}\noexpand\fi
+ \noexpand\fi }}\@tmpnf}
+\def\@nfmsg#1{Bad narrowfig: Figure #1 on page \thepage}
+
+\newdimen\@narrowfig
+\newbox\@nfigbox
+\newbox\@nfcapbox
+\newif\if at nfeven
+
+\def\and{\\ and\\}
+\def\maketitle{\newpage \thispagestyle{titlepage}\par
+ \begingroup \lineskip = \z@\null \vskip -30pt\relax
+ \parindent\z@ \LARGE {\raggedright \hyphenpenalty\@M
+ %\sf \@title \par
+ \@title \par
+ \global\firstfoot %aiellom
+ \global\runningfoot %aiellom
+}
+\label{@firstpg}
+{ \vskip 13.5pt\relax \normalsize \sf %vskip 13.5pt between title and author
+ \begingroup \addtolength{\baselineskip}{2pt}
+ \@author\par \vskip -2pt
+ \endgroup }
+ {\ifx \@categories\@empty
+ \else
+ \baselineskip 17pt\relax
+ \if at acmjacm\else\hbox{\vrule height .2pt width 30pc}\fi%to eliminate the lines for jacm
+ }
+ \vskip 8.5pt \footnotesize \box\@abstract \vskip 4pt\relax %vskip8.5 space above abstract
+ {\def\and{\unskip\/{\rm ; }}
+ Categories and Subject Descriptors: \@categories \fi}\par\vskip 4pt\relax
+ \box\@terms \vskip 4pt\relax
+ \box\@keywords \par
+ {\baselineskip 14pt\relax
+ \@abstractbottom
+ }
+ \vskip 23pt\relax
+ \endgroup
+\let\maketitle\relax
+ % \gdef\@author{}\gdef\@title{}
+ \gdef\@categories{}}
+
+
+\newbox\@abstract
+\newbox\@terms
+\newbox\@keywords
+\def\abstract{\global\setbox\@abstract=\vbox\bgroup \everypar{}
+ \footnotesize \hsize 30pc \parindent 10pt \noindent
+ \rule{0pt}{10pt}\ignorespaces}
+\def\endabstract{\egroup}
+
+\def\terms#1{\setbox\@terms=\vbox{\everypar{}
+ \footnotesize \hsize 30pc \parindent 0pt \noindent
+ General Terms: \ignorespaces #1}}
+\def\keywords#1{\setbox\@keywords=\vbox{\everypar{}
+ \footnotesize \hsize 30pc \parindent 0pt \noindent
+ Additional Key Words and Phrases: \ignorespaces #1}
+}
+
+\def\category#1#2#3{\@ifnextchar
+ [{\@category{#1}{#2}{#3}}{\@xcategory{#1}{#2}{#3}}}
+\def\@category#1#2#3[#4]{\edef\@tempa{\ifx \@categories\@empty
+ \else ; \fi}{\def\protect{\noexpand\protect
+ \noexpand}\def\and{\noexpand\and}\xdef\@categories{\@categories\@tempa #1
+[{\bf #2}]:
+ #3\kern\z at ---\hskip\z@{\it #4}}}}
+\def\@xcategory#1#2#3{\edef\@tempa{\ifx \@categories\@empty \else ;
+\fi}{\def\protect{\noexpand\protect\noexpand}\def\and{\noexpand
+ \and}\xdef\@categories{\@categories\@tempa #1 [{\bf #2}]: #3}}}
+\def\@categories{}
+\def\bottomstuff{\global\@topnum\z@ \global\@botroom \textheight \begin{figure}
+\parindent\z@
+\hbox{}
+\vskip -\textfloatsep
+\vskip 10pt
+\hrule height .2pt width 30pc
+\vskip 2pt\rule{0pt}{10pt}\ignorespaces}
+\def\endbottomstuff{\permission\end{figure}\gdef\permission{}}
+
+\newenvironment{ackslike}[1]
+ {\par \footnotesize
+ \@ucheadfalse
+ \@startsection{subsection}{2}{\z@}{-16pt plus -2pt minus -1pt}{2pt}{\sf}*
+ {\uppercase{#1}}\par\normalsize
+ \pdfbookmark{Acknowledgments}{Ack}
+ }
+ {\par}
+\newenvironment{acks}{\begin{ackslike}{ACKNOWLEDGMENTS}}{\end{ackslike}}
+
+\def\received{\par\footnotesize\addvspace{18pt plus 0pt minus
+4pt}\parindent\z@}
+%the line below replaced by the line that follows (K.R. Apt, July 11, 2000
+%\def\endreceived{\label{@lastpg}\hskip-2pt\par}
+\def\endreceived{\label{@lastpg}\hskip-2pt\par\normalsize}
+
+\mark{{}{}}
+
+\def\ps at myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\hfill \small\sf \rightmark\hskip
+19pt{\Large$\cdot$}\hskip 17pt\mypage}
+\def\@oddfoot{\hbox{}\hfill\tiny\@runningfoot}
+\def\@evenhead{\small\sf\mypage \hskip 17pt{\Large$\cdot$}\hskip 19pt\leftmark\hfill \hbox{}}
+\def\@evenfoot{\tiny\@runningfoot\hfill\hbox{}}
+\def\sectionmark##1{}\def\subsectionmark##1{}}
+\def\@runningfoot{}
+\def\runningfoot{\def\@runningfoot{\@journalName, Vol.\ \@acmVolume, No.\ \@acmNumber, \@acmMonth\ 20\@acmYear.}}
+\def\@firstfoot{}
+\def\firstfoot{\def\@firstfoot{\@journalName, Vol.\ \@acmVolume, No.\ \@acmNumber, \@acmMonth\ 20\@acmYear, Pages \pages.}}
+\def\ps at titlepage{\let\@mkboth\@gobbletwo
+\def\@oddhead{}\def\@oddfoot{\hbox{}\hfill
+\tiny\@firstfoot}\def\@evenhead{}\def\@evenfoot{\tiny\@firstfoot\hfill\hbox{}}}
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+\def\@marrayclassiv{\@addtopreamble{$\displaystyle \@nextchar$}}
+\def\@marrayclassz{\ifcase \@lastchclass \@acolampacol \or \@ampacol \or
+ \or \or \@addamp \or
+ \@acolampacol \or \@firstampfalse \@acol \fi
+\edef\@preamble{\@preamble
+ \ifcase \@chnum
+ \hfil$\relax\displaystyle\@sharp$\hfil \or $\relax\displaystyle\@sharp$\hfil
+ \or \hfil$\relax\displaystyle\@sharp$\fi}}
+\def\marray{\arraycolsep 2.5pt\let\@acol\@arrayacol \let\@classz\@marrayclassz
+ \let\@classiv\@marrayclassiv \let\\\@arraycr\def\@halignto{}\@tabarray}
+\def\endmarray{\crcr\egroup\egroup}
+
+
+\ps at myheadings \pagenumbering{arabic} \onecolumn
+
+%-----------------------BIBLIOGRAPHY STUFF-------------------------
+% this is adapted (November 1993) by Andrew Appel and Rebecca Davies from
+%
+%%% filename = "chicago.sty",
+%%% version = "4", % MODIFIED!
+%%% date = "31 August 1992",
+%%% time = "09:42:44 199",
+%%% author = "Glenn Paulley",
+%%% address = "Data Structuring Group
+%%% Department of Computer Science
+%%% University of Waterloo
+%%% Waterloo, Ontario, Canada
+%%% N2L 3G1",
+%%% telephone = "(519) 885-1211",
+%%% FAX = "(519) 885-1208",
+%%% email = "gnpaulle at bluebox.uwaterloo.ca",
+
+%%% ====================================================================
+%
+% this file: Modification of chicago.sty for new ACM bibliography
+% style, which is similar (but not identical) to the ``Chicago'' style.
+%
+% chicago.sty: Style file for use with bibtex style chicago.bst, for
+% bibliographies formatted according to the 13th Edition of the Chicago
+% Manual of Style.
+%
+% 'newapa.bst' was made from 'plain.bst', 'named.bst', and 'apalike.bst',
+% with lots of tweaking to make it look like APA style, along with tips
+% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
+% newapa.sty formed the basis of this style, chicago.sty. Author-date
+% references in newapa.bst formed the basis for chicago.bst. Chicagoa.bst
+% supports annotations.
+%
+% Version 4 (August, 1992):
+% - fixed chicago.bst and chicagoa.bst to handle long author lists in
+% sorting
+% - fixed chicago.bst and chicagoa.bst so that missing page numbers in
+% ``article'' entries are handled correctly
+% - modified chicago.sty to format entries with 2nd and subsequent lines
+% indented.
+%
+% Citation format: (author-last-name year)
+% (author-last-name and author-last-name year)
+% (author-last-name et al. year)
+% (author-last-name)
+% author-last-name
+% author-last-name (year)
+% (author-last-name and author-last-name)
+% (author-last-name et al.)
+% (year) or (year,year)
+% year or year,year
+%
+% Reference list ordering: alphabetical by author or whatever passes
+% for author in the absence of one.
+%
+% This BibTeX style has support for abbreviated author lists and for
+% year-only citations. This is done by having the citations
+% actually look like
+%
+% \citeauthoryear{full-author-info}{abbrev-author-info}{year}
+%
+% The LaTeX style has to have the following (or similar)
+%
+% \let\@internalcite\cite
+% \def\fullcite{\def\citeauthoryear##1##2##3{##1, ##3}\@internalcite}
+% \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite}
+% \def\shortcite{\def\citeauthoryear##1##2##3{##2, ##3}\@internalcite}
+% \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite}
+% \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite}
+%
+%
+% -------------------------------------------------------------------------
+%
+% Citation macros.
+%
+\let\@internalcite\cite
+
+\def\cite{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{[##1\if at tempswa , ##2\fi]}%
+ \def\citeauthoryear##1##2##3{##2 ##3}\@internalcite}
+\def\citeXNP#1#2{%
+ \def\@cite at label{#2}%
+ \def\@cite##1##2{##1\if at tempswa , ##2\fi}%
+ \def\citeauthoryear##1##2##3{\@cite at label}\@internalcite{#1}}
+% \def\@citeseppen{-1000}%
+% \def\@cite at label{#1}
+% \def\@cite##1##2{\if at tempswa ##2\fi}%
+% \def\citeauthoryear##1##2##3{##2 ##3}\@internalcite}
+\def\citeNP{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{##1\if at tempswa , ##2\fi}%
+ \def\citeauthoryear##1##2##3{##2 ##3}\@internalcite}
+\def\citeN{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{##1\if at tempswa , ##2]\else{]}\fi}%
+ \def\citeauthoryear##1##2##3{##2 [##3}\@citedata}
+\def\shortcite#1{\citeyear{#1}}
+\def\citeS#1{[\citeANP{#1} \citeyearNP{#1}]}
+\def\citeNS#1{\citeANP{#1} \citeyear{#1}}
+\def\citeNPS#1{\citeANP{#1} \citeyearNP{#1}}
+%testing year,year
+\def\citeNN{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{[##1\if at tempswa , ##2\fi]}%
+ \def\citeauthoryear##1##2##3{##3}\@citedata}
+
+\def\citeA{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{[##1\if at tempswa , ##2\fi]}%
+ \def\citeauthoryear##1##2##3{##2}\@internalcite}
+\def\citeANP{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{##1\if at tempswa , ##2\fi}%
+ \def\citeauthoryear##1##2##3{##2}\@internalcite}
+
+\def\citeyear{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{[##1\if at tempswa , ##2\fi]}%
+ \def\citeauthoryear##1##2##3{##3}\@citedata}
+\def\citeyearNP{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{##1\if at tempswa , ##2\fi}%
+ \def\citeauthoryear##1##2##3{##3}\@citedata}
+
+%
+% \@citedata and \@citedatax:
+%
+% Place commas in-between citations in the same \citeyear, \citeyearNP,
+% or \citeN command.
+% Use something like \citeN{ref1,ref2,ref3} and \citeN{ref4} for a list.
+%
+\def\@citedata{%
+ \@ifnextchar [{\@tempswatrue\@citedatax}%
+ {\@tempswafalse\@citedatax[]}%
+}
+
+\def\@citedatax[#1]#2{%
+\if at filesw\immediate\write\@auxout{\string\citation{#2}}\fi%
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do%
+ {\@citea\def\@citea{; }\@ifundefined% by Young
+ {b@\@citeb}{{\bf ?}%
+ \@warning{Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}%
+
+% don't box citations, separate with ; and a space
+% also, make the penalty between citations negative: a good place to break.
+%
+\def\@citex[#1]#2{%
+\if at filesw\immediate\write\@auxout{\string\citation{#2}}\fi%
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do%
+ {\@citea\def\@citea{; }\@ifundefined% by Young
+ {b@\@citeb}{{\bf ?}%
+ \@warning{Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}%
+
+% (from apalike.sty)
+% No labels in the bibliography.
+%
+\def\@biblabel#1{}
+
+% (from apalike.sty)
+% Set length of hanging indentation for bibliography entries.
+%
+\newlength{\bibhang}
+\setlength{\bibhang}{2em}
+
+% Indent second and subsequent lines of bibliographic entries. Stolen
+% from openbib.sty: \newblock is set to {}.
+
+\newdimen\bibindent
+\bibindent=1em
+\@ifundefined{refname}%
+ {\@ifundefined{chapter}%
+ {\newcommand{\refname}{\footnotesize REFERENCES}}%
+ {\newcommand{\refname}{\footnotesize BIBLIOGRAPHY}}%
+ }%
+ {}%
+\@ifundefined{chapter}%
+ {\def\thebibliography#1{\footnotesize \section*{\refname\@mkboth
+ {\uppercase{\refname}}{\uppercase{\refname}}}\list
+ {[\arabic{enumi}]}{
+ \settowidth\labelwidth{[#1]}
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \advance\leftmargin\bibindent
+ \itemindent -\bibindent
+ \listparindent \itemindent
+ \parsep \z@
+ \usecounter{enumi}}
+ \def\newblock{}
+ \sloppy
+ \sfcode`\.=1000\relax}}
+ {\def\thebibliography#1{\footnotesize \chapter*{\refname\@mkboth
+ {\uppercase{\refname}}{\uppercase{\refname}}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \advance\leftmargin\bibindent
+ \itemindent -\bibindent
+ \listparindent \itemindent
+ \parsep \z@
+ \usecounter{enumi}}
+ \def\newblock{}
+ \sloppy
+ \sfcode`\.=1000\relax}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% fixes to acm trans macro package
+% 31-JAN-1996
+% John Tang Boyland
+
+% newdef need to take the optional parameters of newtheorem
+\def\newdef#1{\@ifnextchar[{\@xnewdef{#1}}{\@ynewdef{#1}}}
+\def\@xnewdef#1[#2]#3{\newtheorem{italic@#1}[#2]{{\em #3}}\@newdef{#1}}
+\def\@ynewdef#1#2{\@ifnextchar[{\@xynewdef{#1}{#2}}{\@yynewdef{#1}{#2}}}
+\def\@xynewdef#1#2[#3]{\newtheorem{italic@#1}{{\em #2}}[#3]\@newdef{#1}}
+\def\@yynewdef#1#2{\newtheorem{italic@#1}{{\em #2}}\@newdef{#1}}
+% and now fix up definition, to change body to use roman font:
+\def\@newdef#1{\newenvironment{#1}{\@ifnextchar[{\@xstartdef{#1}}{\@ystartdef{#1}}}{\end{italic@#1}}}
+%changed by K.R. Apt on Sep. 27, 2000. It was: \def\@xstartdef#1[#2]{\begin{italic@#1}[#2]\rm}
+\def\@xstartdef#1[#2]{\begin{italic@#1}[{\em #2}]\rm}
+\def\@ystartdef#1{\begin{italic@#1}\rm}
+
+% footers produced too small (vpt), when ACM typsets them at 7.5pt (!).
+% A better compromise is viipt.
+\def\@oddfoot{\hbox{}\hfill\scriptsize\@runningfoot}
+\def\@evenfoot{\scriptsize\@runningfoot\hfill\hbox{}}
+
+% first footer was set to (vpt), when ACM typesets them at 6.5pt (!).
+% A better compromise is vipt.
+\def\firstfootsize{\@setsize\firstfootsize{7pt}\vipt\@vipt}
+\def\ps at titlepage{\let\@mkboth\@gobbletwo
+\def\@oddhead{}\def\@oddfoot{\hbox{}\hfill\firstfootsize\@firstfoot}%
+\def\@evenhead{}\def\@evenfoot{\firstfootsize\@firstfoot\hfill\hbox{}}}
+
+% new permission statement
+\long\def\permission{\par
+% linebreaks added to conform to the current style
+Permission to make digital/hard copy of all or part of this material without
+fee
+for personal or classroom use
+provided that the copies are not made or distributed for profit
+or commercial advantage, the ACM copyright/server notice, the title of the
+publication, and its date appear, and notice is given that copying is by
+permission of the ACM, Inc. To copy
+otherwise, to republish, to post on servers, or to redistribute to lists
+requires prior specific
+permission and/or a fee.\par
+\copyright\ 20\@acmYear\
+ACM \@permissionCodeOne/20\@acmYear/\@permissionCodeTwo-\@pageCode\$5.00 % aiellom
+}
+
+% make sure \permission doesn't get trashed
+\def\endbottomstuff{\permission\end{figure}}
+
+% alternate way of using citeyear
+% \def\shortcite#1{\citeyear{#1}
+% enumerations and longenums are wrong
+% 1. the second line in a paragraph of an enumerations in theorems
+% (or other trivlists) doesn't line up under the first
+% 1. the second line of a longenum doesn't properly wrap around
+% back to the left margin.
+
+% the original definition of \@listI doesn't set labelwidth
+\def\@listI{\leftmargin\leftmargini
+ \labelwidth\leftmargini\advance\labelwidth-\labelsep
+ \parsep 0pt plus 1pt
+ \topsep 6pt plus 2pt minus 2pt
+ \itemsep 2pt plus 1pt minus .5pt}
+\let\@listi\@listI
+\@listi
+
+% add set of \labelwidth and \itemindent
+\def\longenum{\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
+ {\csname label\@enumctr\endcsname}{\usecounter
+ {\@enumctr}\labelwidth\z@\leftmargin\z@
+ \itemindent\parindent \advance\itemindent\labelsep}\fi}
+
+% split electronic appendix into two parts:
+
+
+%aiellom{
+\def\appendixhead#1{\appendix
+\section*{ELECTRONIC APPENDIX}
+The electronic appendix for this article can be accessed in
+ the ACM Digital Library by visiting the following URL:$\;$
+ \url{http://www.acm.org/pubs/citations/journals/}{\tt \@journalNameShort /20\@acmYear-\@acmVolume-\@acmNumber/p\pageref{@firstpg}-#1}.
+% \quad \href{http://www.acm.org/tocl}{{\small http://www.acm.org/tocl} }
+}
+%aiellom}
+
+\long\def\elecappendix{
+\clearpage
+\makeatletter
+\pagenumbering{withappendix}
+\makeatother
+\appendix
+\par\noindent{\sc This document is the online-only appendix to:}\hfill \vskip 1em
+{\vbox{\Large\sf \parindent0pt\@title{}}}\vskip .5em
+\vbox{\sf \parindent0pt\@author{}}\vskip .5em\noindent
+\vskip 10pt\noindent
+{\firstfootsize
+\@journalName, Vol.\ \@acmVolume, No.\ \@acmNumber, \@acmMonth\ 20\@acmYear, Pages \pages.}
+\vskip 11pt\noindent
+\hrule height .2pt
+\par
+\bottomstuff
+\endbottomstuff
+}
+
+% provide for a single acknowledgment
+\def\ack{ \par \footnotesize
+\@ucheadfalse
+\@startsection{subsection}{2}{\z@}{-16pt plus -2pt minus
+ -1pt}{2pt}{\sf}*{ACKNOWLEDGMENT}\par\normalsize
+\pdfbookmark{Acknowledgment}{Ack}
+}
+\def\endack{\par}
+
+% provide both spellings of Acknowledgment(s)
+\let\acknowledgments\acks
+\let\endacknowledgments\endacks
+\let\acknowledgment\ack
+\let\endacknowledgment\endack
+
+\newcommand{\longpage}{\enlargethispage{\baselineskip}}
+\newcommand{\shortpage}{\enlargethispage{-\baselineskip}}
+
+
+% Don't indent bibliography and
+% override \refname (which sets fontsize):
+\def\thebibliography#1{
+ \footnotesize\section*{\footnotesize\sf{REFERENCES}\@mkboth
+ {\uppercase{\refname}}{\uppercase{\refname}}}%
+ \pdfbookmark{References}{Ref}
+ \list
+ {\@biblabel{\arabic{enumiv}}}{%
+ %\settowidth\labelwidth{[#1]}
+ \labelwidth 0pt
+ \leftmargin \bibindent
+ \labelsep 0pt
+ \if at hyperref
+ \itemindent -\bibindent
+ \fi
+ \listparindent -\bibindent
+ \labelsep -\bibindent
+ \usecounter{enumiv}%
+ \let\p at enumiv\@empty
+ \def\theenumiv{\arabic{enumiv}}}%
+ \def\newblock{\hskip .11em plus.33em minus.07em}%
+ \sloppy
+ \clubpenalty=4500
+ \widowpenalty=4500
+ \frenchspacing}
+\def\endthebibliography{%
+ \def\@noitemerr{\@warning{Empty `thebibliography' environment}}%
+ \endlist}
+\def\@lbibitem[#1]#2{\item[]\if at filesw
+ {\def\protect##1{\string ##1\space}\immediate
+ \write\@auxout{\string\bibcite{#2}{#1}}}\fi\hskip-1em\ignorespaces}
+% Fix cite so it doesn't repeat author lists in citations:
+
+\def\cite{\def\@citeseppen{-1000}%
+ \def\@cite##1##2{[##1\if at tempswa , ##2\fi]}%
+ \let\@lastauthor=\@noauthor
+ \let\citeauthoryear=\citeauthoryear at no@repeats\@internalcite}
+ %\def\citeauthoryear##1##2##3{##2 ##3}\@internalcite
+
+\def\@noauthor={\relax}
+\let\@lastauthor=\@noauthor
+\let\@currauthor=\@noauthor
+
+\def\citeauthoryear at no@repeats#1#2#3{%
+ \def\@currauthor{\csname @author #1\endcsname}%
+ \ifx\@lastauthor\@currauthor{#3}\else{#2 #3}\fi%
+ \let\@lastauthor=\@currauthor}
+
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
+\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}
+
+
+\if at hyperref
+ \let\pdfbookmark=\relax
+ \RequirePackage[pdfmark]{hyperref}
+\fi
+
+% \renewcommand{\thefootnote}{\arabic{footnote}\hspace{-3pt}}
+
+
diff --git a/doc/tutorial/answer.tex b/doc/tutorial/answer.tex
new file mode 100644
index 0000000..9c121cf
--- /dev/null
+++ b/doc/tutorial/answer.tex
@@ -0,0 +1,102 @@
+\documentclass[potts,head,fontsize=11pt,a4paper,twoside,english=true]{tucletter}
+
+\usepackage{amsfonts}
+\usepackage{amsmath}
+\usepackage{amssymb}
+% ISO Latin 1 input encoding
+\usepackage{t1enc}
+
+
+\begin{document}
+
+\setkomavar{signature}{Daniel Potts} % Unterschrift!
+\setkomavar{subject}{2nd revision of
+``Using NFFT~3 -- a software library for various nonequispaced fast
+ Fourier transforms''
+by J.~Keiner, S.~Kunis, and D.~Potts
+}
+
+\begin{letter}{Editor-in-Chief\\
+Prof. Ian Gladwell\\
+Department of Mathematics\\
+Southern Methodist University\\
+Dallas, TX 75275 USA}
+
+\opening{Dear Professor Gladwell,}
+
+we thank all three referees for their helpful comments and valuable
+suggestions. In the following we report on the changes.
+
+\textbf{Referee 1}
+No changes.
+
+\textbf{Referee 2}
+The structure of the paper has been kept, in particular Section 3.2 shows the
+typical workflow and details on the precomputation are still in the appendix.
+The following suggestions of the referee have been incorporated, 1), 4), 5),
+and 6).
+
+2) ``Usually $\hat f$ is for the FT of f and not vice versa. If you have a
+good reason for doing it like this, state it.'' and p.~3, sec 2.1 of the first
+report: \\
+The beginning of Section 2 now states that the FFT evaluates a
+trigonometric polynomial at equispaced nodes and that this point of view is
+most convenient for the generalisation to nonequispaced nodes.
+
+3) ``P.3, line -10: what do you mean by no additional memory?''
+The matrix entries are explicitly given and they are computed only when used.
+
+A more detailed cost analysis and performance analysis has been
+added, see the second issue of Referee 3.
+
+\newpage
+
+\textbf{Referee 3}
+On ``The major issues''
+\begin{enumerate}
+\item The Sections 3.2 and 3.4 clearly state how the nodes have to be set.
+\item A more detailed cost analysis and performance analysis has been
+added. In particular, Algorithm 2 and 3 give clear upper bounds on the number
+of arithmetic operations excluding the evaluation of the so called window
+function which is detailed in Appendix A.3. Section 5.1 specifies these costs
+under the tested default settings and gives a performance plot in Figure 5.1.
+\item The size of the 3D problems is considered to be reasonable on standard hardware, since an
+NFFT with $128^3$ Fourier coefficients, $128^3$ evaluation nodes, oversampling
+factor $2$ and disjoint FFTW-in/output arrays takes approximately
+\begin{equation*}
+ (128^3 + 2 \times (2\times 128)^3 + 128^3) \times 16 =576 \text{MByte}.
+\end{equation*}
+A NFFT of size $256^3$ would already take over $4\text{GByte}$ with these
+settings (the library can compute such a transform by using a smaller
+oversampling factor etc. at increased cost).
+\end{enumerate}
+
+On ``The minor issues''
+\begin{enumerate}
+ \item[1,2.] Done, except ``various $\rightarrow$ certain'', since
+ ``Nonequispaced FFT'' is typically associated with (2.3) and ``various''
+ refers to the fact that more general transforms are considered as well.
+ \item[3.] Done, but we kept the version number when referring to the library.
+ \item[4,5,6,7.] Done. However, we found no inconsistent vector notation and
+ the terminology ``adjoint'' (or transposed) and ``inverse'' is in
+ accordance with [19]
+\item[8.] We changed the section title. The statement on the complexity of the NDFT is correct.
+\item[9.] Done, a detailed description of the precomputation is given in
+ Appendix A.3, the naming system follows FFTW and does not use abbreviations
+ like LAPACK.
+\item[10.] It is more convenient to present first (up to Section 4) the
+ theoretical part and finally the numerical results (Section 5 and 6).
+ Test specifications are given in the second paragraph of Section 5.
+\item[11.] Citations now follow the bibliographystyle \verb"acmtrans".
+\end{enumerate}
+
+In addition, the layout of tables has been changed to be compliant with
+the ACM manuscript preparation guidelines.
+
+\bigskip
+
+Yours sincerely
+\closing{\vspace{0.0cm}}
+\end{letter}
+
+\end{document}
diff --git a/doc/tutorial/comments1.tex b/doc/tutorial/comments1.tex
new file mode 100755
index 0000000..cac6e53
--- /dev/null
+++ b/doc/tutorial/comments1.tex
@@ -0,0 +1,107 @@
+%==============================================================================
+\documentclass[11pt,a4paper,twoside,bibtotoc]{scrartcl}
+%==============================================================================
+
+% LaTeX packages
+\usepackage{a4wide}
+\usepackage{amsfonts}
+\usepackage{amsmath}
+\usepackage{theorem}
+\usepackage{color}
+\usepackage{graphicx}
+\usepackage{subfigure}
+\usepackage[boxed,Algorithm]{algorithm}
+\usepackage{algorithmic}
+\usepackage{multicol}
+%\usepackage{showkeys}
+
+% Allow for more figures on each side
+\renewcommand{\topfraction}{1}
+\renewcommand{\textfraction}{0}
+\setcounter{totalnumber}{4}
+
+% Shortcuts for maths symbols.
+\newcommand{\N}{\ensuremath{\mathbb{N}}}
+\newcommand{\T}{\ensuremath{\mathbb{T}}}
+\renewcommand{\S}{\ensuremath{\mathbb{S}}}
+\newcommand{\NZ}{\ensuremath{\mathbb{N}_{0}}}
+\newcommand{\Z}{\ensuremath{\mathbb{Z}}}
+\newcommand{\R}{\ensuremath{\mathbb{R}}}
+\newcommand{\Rp}{\ensuremath{\mathbb{R}^{+}}}
+\newcommand{\Rn}{\ensuremath{\mathbb{R}^n}}
+\newcommand{\Rnn}{\ensuremath{\mathbb{R}^{n \times n}}}
+\newcommand{\C}{\ensuremath{\mathbb{C}}}
+\newcommand{\nfft}{\textsf{NFFT}}
+\newcommand{\cO}{\ensuremath{\mathcal{O}}}
+\newcommand{\tT}{\ensuremath{\text{\tiny{T}}}}
+\newcommand{\ti}{\ensuremath{\text{\scriptsize{i}}}}
+\newcommand{\e}{{\ensuremath{\mathrm{e}}}}
+\newcommand{\eim}[1]{\ensuremath{\mathrm{e}^{-2\pi{\ti} #1}}}
+\newcommand{\eip}[1]{\ensuremath{\mathrm{e}^{ 2\pi{\ti} #1}}}
+\renewcommand{\mathbf}[1]{\ensuremath{\boldsymbol{#1}}}
+\newcommand{\ds}{\displaystyle}
+\newcommand{\sinc}{{\rm sinc}}
+\newcommand{\dist}{{\rm dist}}
+\newcommand{\adj}{{\vdash \hspace*{-1.72mm} \dashv}}
+\DeclareMathOperator{\diag}{diag}
+\DeclareMathOperator{\dd}{d}
+\newcommand{\bend}
+{
+ \hspace*{0ex} \hfill
+ \hbox{\vrule height 1.5ex \vbox{\hrule width 1.4ex \vskip
+ 1.4ex\hrule width 1.4ex} \vrule height 1.5ex}
+}
+
+\def\invisible#1{\textcolor{white}{#1}}
+
+% Environment Numbering
+\numberwithin{equation}{section}
+\numberwithin{table}{section}
+\numberwithin{figure}{section}
+
+%===============================================================================
+% Title Page
+%===============================================================================
+\begin{document}
+
+\begin{center}
+Answer to the Referee Report\\[2ex]
+{\Large
+``Using NFFT 3 -- a software library for various \\ nonequispaced fast
+ Fourier transforms'' }\\[2ex]
+by Jens Keiner, Stefan Kunis, and Daniel Potts
+\end{center}
+%===============================================================================
+
+First of all, we thank all three referees for their helpful comments and valuable
+suggestions.
+
+\section*{Referee 1}
+\label{sect:1}
+
+\begin{itemize}
+ \item
+ \begin{quote}
+ Referee:
+ I am not so familiar with the norms in TOMS, but it seems to me that
+ installation instructions (section 3.1) would not have longevity that
+ merits archiving, and could be relegated to the online code package.
+ \end{quote}
+ We do think that readers might appreciate brief installation instructions.
+ They have been shortened and moved to Appendix A.1.
+
+ \item
+ \begin{quote}
+ Referee:
+ As an optional note, it would be convenient if the CGNR routine allowed
+ a user-defined preconditioner.
+ \end{quote}
+ We appreciate the suggestion and are well aware that a variety of
+ Toeplitz-preconditioner are possible for the CGNR routine.
+ However, numerical experience (in line with theoretical results) suggests
+ that for reasonably well-distributed point sets, solving the weighted
+ normal equation works well with the used ``diagonal preconditioner''
+ $\mathbf{W}$ and $\mathbf{\hat W}$, already.
+\end{itemize}
+
+\end{document}
diff --git a/doc/tutorial/comments2.tex b/doc/tutorial/comments2.tex
new file mode 100755
index 0000000..5c6164b
--- /dev/null
+++ b/doc/tutorial/comments2.tex
@@ -0,0 +1,156 @@
+%==============================================================================
+\documentclass[11pt,a4paper,twoside,bibtotoc]{scrartcl}
+%==============================================================================
+
+% LaTeX packages
+\usepackage{a4wide}
+\usepackage{amsfonts}
+\usepackage{amsmath}
+\usepackage{theorem}
+\usepackage{color}
+\usepackage{graphicx}
+\usepackage{subfigure}
+\usepackage[boxed,Algorithm]{algorithm}
+\usepackage{algorithmic}
+\usepackage{multicol}
+%\usepackage{showkeys}
+
+% Allow for more figures on each side
+\renewcommand{\topfraction}{1}
+\renewcommand{\textfraction}{0}
+\setcounter{totalnumber}{4}
+
+% Shortcuts for maths symbols.
+\newcommand{\N}{\ensuremath{\mathbb{N}}}
+\newcommand{\T}{\ensuremath{\mathbb{T}}}
+\renewcommand{\S}{\ensuremath{\mathbb{S}}}
+\newcommand{\NZ}{\ensuremath{\mathbb{N}_{0}}}
+\newcommand{\Z}{\ensuremath{\mathbb{Z}}}
+\newcommand{\R}{\ensuremath{\mathbb{R}}}
+\newcommand{\Rp}{\ensuremath{\mathbb{R}^{+}}}
+\newcommand{\Rn}{\ensuremath{\mathbb{R}^n}}
+\newcommand{\Rnn}{\ensuremath{\mathbb{R}^{n \times n}}}
+\newcommand{\C}{\ensuremath{\mathbb{C}}}
+\newcommand{\nfft}{\textsf{NFFT}}
+\newcommand{\cO}{\ensuremath{\mathcal{O}}}
+\newcommand{\tT}{\ensuremath{\text{\tiny{T}}}}
+\newcommand{\ti}{\ensuremath{\text{\scriptsize{i}}}}
+\newcommand{\e}{{\ensuremath{\mathrm{e}}}}
+\newcommand{\eim}[1]{\ensuremath{\mathrm{e}^{-2\pi{\ti} #1}}}
+\newcommand{\eip}[1]{\ensuremath{\mathrm{e}^{ 2\pi{\ti} #1}}}
+\renewcommand{\mathbf}[1]{\ensuremath{\boldsymbol{#1}}}
+\newcommand{\ds}{\displaystyle}
+\newcommand{\sinc}{{\rm sinc}}
+\newcommand{\dist}{{\rm dist}}
+\newcommand{\adj}{{\vdash \hspace*{-1.72mm} \dashv}}
+\DeclareMathOperator{\diag}{diag}
+\DeclareMathOperator{\dd}{d}
+\newcommand{\bend}
+{
+ \hspace*{0ex} \hfill
+ \hbox{\vrule height 1.5ex \vbox{\hrule width 1.4ex \vskip
+ 1.4ex\hrule width 1.4ex} \vrule height 1.5ex}
+}
+
+\def\invisible#1{\textcolor{white}{#1}}
+
+% Environment Numbering
+\numberwithin{equation}{section}
+\numberwithin{table}{section}
+\numberwithin{figure}{section}
+
+%===============================================================================
+% Title Page
+%===============================================================================
+\begin{document}
+\begin{center}
+Answer to the Referee Report\\[2ex]
+{\Large
+``Using NFFT 3 -- a software library for various \\ nonequispaced fast
+ Fourier transforms'' }\\[2ex]
+by Jens Keiner, Stefan Kunis, and Daniel Potts
+\end{center}
+%===============================================================================
+
+First of all, we thank all three referees for their helpful comments and valuable
+suggestions.
+
+\section*{Referee 2}
+\label{sect:1}
+
+\begin{itemize}
+ \item
+ \begin{quote}
+ Referee: The performance of the
+ library is not comparable to high performance libraries such as FFTW but
+ it should still be reasonable for many applications. Improving performance
+ would still be desirable of course.
+ \end{quote}
+ We generally acknowledge that performance and software design improvements
+ are desirable. But NFFT 3 is for the major part the result of recent
+ research and as such has not been around for a long time.
+ \item
+ \begin{quote}
+ Referee: As I see it, there are 3 'layers' that are relevant for a
+ library: 1) underlying theory and algorithms (the math behind it)
+ 2) the actual implementation (what exact specifications have been used and
+ why, some pseudo code, what optimization techniques have been used, which
+ algorithms and why, arithmetic cost and performance analysis, maybe other
+ analyses, etc.) 3) how to install and use the library (Makefiles,
+ concrete code examples) In a library paper I would expect a short version
+ of 1) as background, 2) as the focus and then 3) very briefly.
+ \end{quote}
+ In the terminology of TOMS, this paper is a \emph{research paper} and not a
+ \emph{library paper}. The aim of the article is to give a mathematical
+ description of the algorithms implemented in the NFFT 3 software library
+ with some more mathematical background on the core NFFT algorithm. A second
+ goal is to mention some applications of the implemented methods.
+ The focus of this paper is not the description of technical details of the
+ implementation (code optimizations, software engineering concerns,...) and
+ the full programming interface.
+ \item
+ \begin{quote}
+ Referee:
+ As it is right now the authors put the emphasis on 3) (including details
+ on how to untar a file that is really way too much) and have some of 2)
+ in the appendix, but not enough. Also, the cost and performance analysis
+ is far too brief for a library paper.
+ \end{quote}
+ We have shortened the installation instructions. They have also been moved
+ to Appendix A.1.
+
+ As mentioned, our aim is not to describe all details of the implementation.
+ But we now summarise performance related tests in Section 5. The focus is
+ to observe how the NFFT algorithm does behave in comparison to the
+ direct implementation.
+
+ It is nevertheless true that more extensive numerical tests at a
+ mature state of the library are desirable. At the current stage, an
+ extensive and in-depth performance analysis is not available.
+ \item
+ \begin{quote}
+ Referee:
+ Concrete, I recommend (following my above numbering) to have a
+ background section on 1), then all relevant details on 2) (some of which are
+ not in the paper) and then a very short section, or appendix, on 3). (The
+ authors may want to look at some existing library papers of popular
+ libraries.) Further, there have to be more details on the relevant
+ implementation decisions, optimization techniques performed, and, most
+ important, a more extensive evaluation of operations count and runtime
+ performance (which should be given also in Gflop/s or pseudo Gflop/s, i.e.,
+ a number of ops is stipulated in case the exact one is not available).
+ \end{quote}
+ Section 2 has been extended to start with the classical discrete Fourier
+ transform (DFT) and mention more relevant properties of the NFFT algorithm.
+ Details are found in the Appendices A.2 and A.3.
+ \item
+ \begin{quote}
+ Referee: Detailed comments \ldots
+ \end{quote}
+ In the text, the library is now consistently denoted NFFT 3. We include the
+ major version number in the name since earlier versions offered
+ substantially less functionality. The rest of the comments have been
+ incorporated into the paper and all mentioned mistakes have been fixed.
+\end{itemize}
+
+\end{document}
diff --git a/doc/tutorial/comments3.tex b/doc/tutorial/comments3.tex
new file mode 100755
index 0000000..ec8ae19
--- /dev/null
+++ b/doc/tutorial/comments3.tex
@@ -0,0 +1,253 @@
+%==============================================================================
+\documentclass[11pt,a4paper,twoside,bibtotoc]{scrartcl}
+%==============================================================================
+
+% LaTeX packages
+\usepackage{a4wide}
+\usepackage{amsfonts}
+\usepackage{amsmath}
+\usepackage{theorem}
+\usepackage{color}
+\usepackage{graphicx}
+\usepackage{subfigure}
+\usepackage[boxed,Algorithm]{algorithm}
+\usepackage{algorithmic}
+\usepackage{multicol}
+%\usepackage{showkeys}
+
+% Allow for more figures on each side
+\renewcommand{\topfraction}{1}
+\renewcommand{\textfraction}{0}
+\setcounter{totalnumber}{4}
+
+% Shortcuts for maths symbols.
+\newcommand{\N}{\ensuremath{\mathbb{N}}}
+\newcommand{\T}{\ensuremath{\mathbb{T}}}
+\renewcommand{\S}{\ensuremath{\mathbb{S}}}
+\newcommand{\NZ}{\ensuremath{\mathbb{N}_{0}}}
+\newcommand{\Z}{\ensuremath{\mathbb{Z}}}
+\newcommand{\R}{\ensuremath{\mathbb{R}}}
+\newcommand{\Rp}{\ensuremath{\mathbb{R}^{+}}}
+\newcommand{\Rn}{\ensuremath{\mathbb{R}^n}}
+\newcommand{\Rnn}{\ensuremath{\mathbb{R}^{n \times n}}}
+\newcommand{\C}{\ensuremath{\mathbb{C}}}
+\newcommand{\nfft}{\textsf{NFFT}}
+\newcommand{\cO}{\ensuremath{\mathcal{O}}}
+\newcommand{\tT}{\ensuremath{\text{\tiny{T}}}}
+\newcommand{\ti}{\ensuremath{\text{\scriptsize{i}}}}
+\newcommand{\e}{{\ensuremath{\mathrm{e}}}}
+\newcommand{\eim}[1]{\ensuremath{\mathrm{e}^{-2\pi{\ti} #1}}}
+\newcommand{\eip}[1]{\ensuremath{\mathrm{e}^{ 2\pi{\ti} #1}}}
+\renewcommand{\mathbf}[1]{\ensuremath{\boldsymbol{#1}}}
+\newcommand{\ds}{\displaystyle}
+\newcommand{\sinc}{{\rm sinc}}
+\newcommand{\dist}{{\rm dist}}
+\newcommand{\adj}{{\vdash \hspace*{-1.72mm} \dashv}}
+\DeclareMathOperator{\diag}{diag}
+\DeclareMathOperator{\dd}{d}
+\newcommand{\bend}
+{
+ \hspace*{0ex} \hfill
+ \hbox{\vrule height 1.5ex \vbox{\hrule width 1.4ex \vskip
+ 1.4ex\hrule width 1.4ex} \vrule height 1.5ex}
+}
+
+\def\invisible#1{\textcolor{white}{#1}}
+
+% Environment Numbering
+\numberwithin{equation}{section}
+\numberwithin{table}{section}
+\numberwithin{figure}{section}
+
+%===============================================================================
+% Title Page
+%===============================================================================
+\begin{document}
+\begin{center}
+Answer to the Referee Report\\[2ex]
+{\Large
+``Using NFFT 3 -- a software library for various \\ nonequispaced fast
+ Fourier transforms'' }\\[2ex]
+by Jens Keiner, Stefan Kunis, and Daniel Potts
+\end{center}
+%===============================================================================
+
+First of all, we thank all three referees for their helpful comments and valuable
+suggestions.
+
+\section*{Referee 3}
+\label{sect:1}
+
+\begin{itemize}
+ \item
+ \begin{quote}
+ Referee:
+ The authors may consider to follow or mention the other commonly
+ recognized names, such as USFFT by many mathematicians
+ and NUFFT by engineers.
+ \end{quote}
+ %We now mention the alternative abbreviations USFFT and NUFFT on the first
+ %Ppage of the paper.
+ References and the alternative abbreviations USFFT and NUFFT are contained
+ in the Appendix ``Further NFFT approaches'' (now A.4).
+ \item
+ \begin{quote}
+ Referee:
+ This package does not take arbitrary sample nodes as it claims.
+ The samples are required to be on a Kronecker grid, which
+ may be non-equally spaced in each and every dimension involved.
+ \end{quote}
+ The software library \emph{does} take arbitrary sample nodes. We do not
+ require samples to be on a Kronecker grid or anything similar.
+ \item
+ \begin{quote}
+ Referee:
+ The package limits the data structure to linearized arrays,
+ which entails additional code and time for data re-formatting
+ for high-dimensional NUFFTs.
+ \end{quote}
+ Data structures are linear and we do not see this as a
+ substantial limitation. Like FFTW, we expect multi-dimensional data to be
+ stored as a consecutive block in row-major order ('C order').
+ Fixed-size arrays allocated by the user are amenable to convenient multiple
+ applications of the \verb"[]" operator, e.g. \verb"a[2][4][1]", but the use
+ of such arrays cannot recommended in general (e.g., they are allocated on
+ the stack). For dynamic arrays, the linear index has to be computed.
+
+ Additionally, for nonequispaced transforms, nodes can be
+ completely unstructured and multi-dimensional structures, like grids,
+ are special cases. Most often, nodes will not be aligned
+ and the most appropriate data structure for such nodes is, without further
+ assumptions, a linear array.
+
+ A current limitation is that (for now) we do not support strided
+ data (i.e., general FFTW-style i/o tensors) or vectors of transforms.
+ \item
+ \begin{quote}
+ Referee:
+ The algorithm description in Section 2.2 is unacceptable. It mentions the
+ arithmetic complexity only.
+ \end{quote}
+ Memory requirements strongly depend on the precomputation technique
+ employed. NFFT 3 offers different strategies here ranging from no
+ precomputation at all (everything evaluated on-line) to
+ full precomputation (can be expensive in terms of memory). In
+ Section 2.4 (which was 2.2), we now include a forward reference to
+ Appendix 2.3 where details are given.
+ \item
+ \begin{quote}
+ Referee:
+ It fails to specify the essential algorithm components. It
+ uses the standard FFT, which is preceded by a numerical
+ re-sampling step with arithmetic complexity proportional linearly
+ to the data size.
+ \end{quote}
+ The last paragraph of Section 2.4 (was 2.2) now briefly mentions
+ the essential components of the NFFT algorithm. For details, we still refer the
+ reader to Appendix A.2.
+ \item
+ \begin{quote}
+ Referee:
+ Unlike the FFT, the complexity grows fast with the dimensionality.
+ \end{quote}
+ A $d$-dimensional FFT of degree $N$ (in each dimension) has a complexity of
+ $\mathcal{O}(N^{d} \log N)$.
+ A $d$-dimensional NFFT of degree $N$ (in each dimension) with $M$ nodes has
+ a complexity of $\mathcal{O}(N^{d} \log N + |\log\varepsilon|^d M)$. Both
+ algorithms grow exponentially with the number of dimensions $d$. But it is
+ true that for the NFFT, also the constant $|\log\varepsilon|^d$ in front
+ of the number of nodes $M$ grows exponentially which does not happen in
+ the FFT.
+ \item
+ \begin{quote}
+ Referee:
+ In addition, an algorithm shall be described with companion
+ data structures and the features of algorithm parameters.
+ Specifically, the re-sampling factor shall be singled out at least
+ and explained.
+ \end{quote}
+ The last paragraph of Section 2.4 (was 2.2) now mentions the oversampling
+ factor and the truncation parameter. For details, we still refer the reader to
+ Appendix A.3. The chief aim of this article is to describe the math behind the NFFT
+ routines implemented in the NFFT 3 library, as well as basic usage principles
+ and applications. We do not think it would serve the purpose of
+ the paper to give details of the implementation and technical concerns.
+ \item
+ \begin{quote}
+ Referee:
+ There are many typos and grammar errors. (Need a professional
+ proof-reader to help out.)
+ \end{quote}
+ We have done our best to fix the mistakes.
+ \item
+ \begin{quote}
+ Referee:
+ Performance metrics and comparison objectives shall be clearly
+ noted.
+ \end{quote}
+ As mentioned, our aim is not to describe all details of the implementation.
+ But we now summarise performance related tests in Section 5. The focus is
+ to observe how the NFFT algorithm does behave in comparison to the
+ FFT and to the direct evaluation NDFT.
+
+ It is nevertheless true that more extensive numerical tests at a
+ mature state of the library are desirable. At the current stage, an
+ extensive and in-depth performance analysis is not available.
+ \item
+ \begin{quote}
+ Referee:
+ This manuscript uses more space on examples and applications.
+ It will serve the purpose of the paper if the examples and applications
+ are used to demonstrate the range of functions and their
+ parameters and the scope of performance tuning the library supports.
+ The complexity in terms of arithmetic operations explains
+ only why the fast algorithms are implemented, but does not say
+ how well they are implemented in this particular software library.
+ \end{quote}
+ Clearly, the numerical results support the theoretical complexity
+ and error estimates.
+ New columns in Table 5.2 have been added to show that the NFFT
+ is only a reasonable factor slower than the FFT.
+ Moreover, our library is open source (i.e., improvements are very welcome)
+ and it is to the best of our knowledge the only available implementation
+ (besides various \textsc{MatLab}-implementations).
+ \item
+ \begin{quote}
+ Referee:
+ There are two fundamental assumptions/limitations (a) the sample
+ locations for higher-dimensional FFTs on unequispaced be on
+ a Kronecker grid and (b) the sample data be in linearized and
+ consecutively packed data arrays.
+ \end{quote}
+ See comments above.
+ \item
+ \begin{quote}
+ Referee:
+ No README file or other documentation is found in the third
+ party code directory.
+ \end{quote}
+ Had been added in the meantime.
+ \item
+ \begin{quote}
+ Referee:
+ No explicit mention of using the third party code FFTW, although
+ it is mentioned in the installation section.
+ \end{quote}
+ We now mention the internal use FFTW in Sections 1 (first paragraph) and
+ 2.4 (last paragraph).
+ \item
+ \begin{quote}
+ Referee:
+ The input and output data structures for high-dimensional transforms
+ are not clear, especially, on each particular type of grids,
+ such Cartesian grid or spherical grid.
+ \end{quote}
+ The referee is right in that details of input and output data
+ structures for generalisations of the NFFT (NFSFT, NNFFT,...)
+ are not given explicitly. Details are found in the API
+ documentation acompanying the downloadable software package.
+ We do not think that it would improve the paper to mention
+ the same here.
+\end{itemize}
+
+\end{document}
diff --git a/doc/tutorial/images/accuracy1.eps b/doc/tutorial/images/accuracy1.eps
new file mode 100755
index 0000000..f304ee1
--- /dev/null
+++ b/doc/tutorial/images/accuracy1.eps
@@ -0,0 +1,503 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: accuracy1.eps
+%%CreationDate: 07/27/2004 11:00:44
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 40 199 555 602
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 40 199 555 602
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 273 113 6178 4841 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt 899 389 L
+ 899 4615 mt 899 4561 L
+ 899 389 mt 899 442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 826 4894 mt
+(0) s
+2684 4615 mt 2684 4561 L
+2684 389 mt 2684 442 L
+2611 4894 mt
+(5) s
+4469 4615 mt 4469 4561 L
+4469 389 mt 4469 442 L
+4323 4894 mt
+(10) s
+6255 4615 mt 6255 4561 L
+6255 389 mt 6255 442 L
+6109 4894 mt
+(15) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt
+(-15) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 3206 mt 952 3206 L
+6255 3206 mt 6201 3206 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3304 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3141 mt
+(-10) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 1797 mt 952 1797 L
+6255 1797 mt 6201 1797 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1895 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1732 mt
+(-5) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 389 mt 952 389 L
+6255 389 mt 6201 389 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 487 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 324 mt
+(0) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+gs 899 389 5357 4227 MR c np
+24 w
+357 2 357 5 357 -2 357 15 357 -19 357 16 357 -31 357 428
+357 638 357 530 357 502 357 529 357 566 357 307 899 565 15 MP stroke
+gr
+
+24 w
+gs 753 419 5291 3793 MR c np
+ 60 60 899 565 FO
+ 60 60 1256 872 FO
+ 60 60 1613 1438 FO
+ 60 60 1970 1967 FO
+ 60 60 2327 2469 FO
+ 60 60 2684 2999 FO
+ 60 60 3041 3637 FO
+ 60 60 3398 4065 FO
+ 60 60 3755 4034 FO
+ 60 60 4112 4050 FO
+ 60 60 4469 4031 FO
+ 60 60 4826 4046 FO
+ 60 60 5183 4044 FO
+ 60 60 5540 4049 FO
+ 60 60 5897 4051 FO
+gr
+
+gs 899 389 5357 4227 MR c np
+357 3 357 5 357 -1 357 77 357 313 357 363 357 319 357 348
+357 450 357 349 357 300 357 341 357 415 1256 770 14 MP stroke
+gs 1110 624 4934 3575 MR c np
+1214 728 mt 1298 812 L
+1298 728 mt 1214 812 L
+1571 1143 mt 1655 1227 L
+1655 1143 mt 1571 1227 L
+1928 1484 mt 2012 1568 L
+2012 1484 mt 1928 1568 L
+2285 1784 mt 2369 1868 L
+2369 1784 mt 2285 1868 L
+2642 2133 mt 2726 2217 L
+2726 2133 mt 2642 2217 L
+2999 2583 mt 3083 2667 L
+3083 2583 mt 2999 2667 L
+3356 2931 mt 3440 3015 L
+3440 2931 mt 3356 3015 L
+3713 3250 mt 3797 3334 L
+3797 3250 mt 3713 3334 L
+4070 3613 mt 4154 3697 L
+4154 3613 mt 4070 3697 L
+4427 3926 mt 4511 4010 L
+4511 3926 mt 4427 4010 L
+4784 4003 mt 4868 4087 L
+4868 4003 mt 4784 4087 L
+5141 4002 mt 5225 4086 L
+5225 4002 mt 5141 4086 L
+5498 4007 mt 5582 4091 L
+5582 4007 mt 5498 4091 L
+5855 4010 mt 5939 4094 L
+5939 4010 mt 5855 4094 L
+gr
+
+357 13 357 162 357 284 357 275 357 258 357 296 357 237 357 283
+357 363 357 264 357 250 357 280 357 358 357 340 899 389 15 MP stroke
+gr
+
+gs 753 243 5291 3956 MR c np
+ 839 389 mt 959 389 L
+ 899 329 mt 899 449 L
+1196 729 mt 1316 729 L
+1256 669 mt 1256 789 L
+1553 1087 mt 1673 1087 L
+1613 1027 mt 1613 1147 L
+1910 1367 mt 2030 1367 L
+1970 1307 mt 1970 1427 L
+2267 1617 mt 2387 1617 L
+2327 1557 mt 2327 1677 L
+2624 1881 mt 2744 1881 L
+2684 1821 mt 2684 1941 L
+2981 2244 mt 3101 2244 L
+3041 2184 mt 3041 2304 L
+3338 2527 mt 3458 2527 L
+3398 2467 mt 3398 2587 L
+3695 2764 mt 3815 2764 L
+3755 2704 mt 3755 2824 L
+4052 3060 mt 4172 3060 L
+4112 3000 mt 4112 3120 L
+4409 3318 mt 4529 3318 L
+4469 3258 mt 4469 3378 L
+4766 3593 mt 4886 3593 L
+4826 3533 mt 4826 3653 L
+5123 3877 mt 5243 3877 L
+5183 3817 mt 5183 3937 L
+5480 4039 mt 5600 4039 L
+5540 3979 mt 5540 4099 L
+5837 4052 mt 5957 4052 L
+5897 3992 mt 5897 4112 L
+gr
+
+gs 899 389 5357 4227 MR c np
+357 96 357 238 357 275 357 262 357 248 357 283 357 226 357 271
+357 347 357 257 357 241 357 264 357 330 1256 712 14 MP stroke
+gs 1110 566 4934 3631 MR c np
+0 j
+-69 119 -69 -119 138 0 1187 752 4 MP
+DP
+-69 119 -69 -119 138 0 1544 1082 4 MP
+DP
+-69 119 -69 -119 138 0 1901 1346 4 MP
+DP
+-69 119 -69 -119 138 0 2258 1587 4 MP
+DP
+-69 119 -69 -119 138 0 2615 1844 4 MP
+DP
+-69 119 -69 -119 138 0 2972 2191 4 MP
+DP
+-69 119 -69 -119 138 0 3329 2462 4 MP
+DP
+-69 119 -69 -119 138 0 3686 2688 4 MP
+DP
+-69 119 -69 -119 138 0 4043 2971 4 MP
+DP
+-69 119 -69 -119 138 0 4400 3219 4 MP
+DP
+-69 119 -69 -119 138 0 4757 3481 4 MP
+DP
+-69 119 -69 -119 138 0 5114 3756 4 MP
+DP
+-69 119 -69 -119 138 0 5471 3994 4 MP
+DP
+-69 119 -69 -119 138 0 5828 4090 4 MP
+DP
+gr
+
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/accuracy1.pdf b/doc/tutorial/images/accuracy1.pdf
new file mode 100644
index 0000000..ab63e6f
Binary files /dev/null and b/doc/tutorial/images/accuracy1.pdf differ
diff --git a/doc/tutorial/images/accuracy2.eps b/doc/tutorial/images/accuracy2.eps
new file mode 100755
index 0000000..6d3e887
--- /dev/null
+++ b/doc/tutorial/images/accuracy2.eps
@@ -0,0 +1,497 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: accuracy2.eps
+%%CreationDate: 07/27/2004 11:00:44
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 40 199 555 602
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 40 199 555 602
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 273 113 6178 4841 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt 899 389 L
+ 899 4615 mt 899 4561 L
+ 899 389 mt 899 442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 826 4894 mt
+(0) s
+2684 4615 mt 2684 4561 L
+2684 389 mt 2684 442 L
+2611 4894 mt
+(5) s
+4469 4615 mt 4469 4561 L
+4469 389 mt 4469 442 L
+4323 4894 mt
+(10) s
+6255 4615 mt 6255 4561 L
+6255 389 mt 6255 442 L
+6109 4894 mt
+(15) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt
+(-15) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 3206 mt 952 3206 L
+6255 3206 mt 6201 3206 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3304 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3141 mt
+(-10) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 1797 mt 952 1797 L
+6255 1797 mt 6201 1797 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1895 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1732 mt
+(-5) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 389 mt 952 389 L
+6255 389 mt 6201 389 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 487 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 324 mt
+(0) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+gs 899 389 5357 4227 MR c np
+24 w
+357 15 357 -27 357 -35 357 21 357 17 357 -25 357 11 357 416
+357 568 357 584 357 564 357 539 357 537 357 427 899 562 15 MP stroke
+gr
+
+24 w
+ 60 60 899 562 FO
+ 60 60 1256 989 FO
+ 60 60 1613 1526 FO
+ 60 60 1970 2065 FO
+ 60 60 2327 2629 FO
+ 60 60 2684 3213 FO
+ 60 60 3041 3781 FO
+ 60 60 3398 4197 FO
+ 60 60 3755 4208 FO
+ 60 60 4112 4183 FO
+ 60 60 4469 4200 FO
+ 60 60 4826 4221 FO
+ 60 60 5183 4186 FO
+ 60 60 5540 4159 FO
+ 60 60 5897 4174 FO
+gs 899 389 5357 4227 MR c np
+357 14 357 -27 357 -36 357 139 357 353 357 359 357 362 357 350
+357 361 357 369 357 365 357 367 357 338 1256 859 14 MP stroke
+gr
+
+1214 817 mt 1298 901 L
+1298 817 mt 1214 901 L
+1571 1155 mt 1655 1239 L
+1655 1155 mt 1571 1239 L
+1928 1522 mt 2012 1606 L
+2012 1522 mt 1928 1606 L
+2285 1887 mt 2369 1971 L
+2369 1887 mt 2285 1971 L
+2642 2256 mt 2726 2340 L
+2726 2256 mt 2642 2340 L
+2999 2617 mt 3083 2701 L
+3083 2617 mt 2999 2701 L
+3356 2967 mt 3440 3051 L
+3440 2967 mt 3356 3051 L
+3713 3329 mt 3797 3413 L
+3797 3329 mt 3713 3413 L
+4070 3688 mt 4154 3772 L
+4154 3688 mt 4070 3772 L
+4427 4041 mt 4511 4125 L
+4511 4041 mt 4427 4125 L
+4784 4180 mt 4868 4264 L
+4868 4180 mt 4784 4264 L
+5141 4144 mt 5225 4228 L
+5225 4144 mt 5141 4228 L
+5498 4117 mt 5582 4201 L
+5582 4117 mt 5498 4201 L
+5855 4131 mt 5939 4215 L
+5939 4131 mt 5855 4215 L
+gs 899 389 5357 4227 MR c np
+357 13 357 102 357 284 357 278 357 279 357 289 357 286 357 286
+357 281 357 300 357 298 357 324 357 370 357 384 899 399 15 MP stroke
+gr
+
+ 839 399 mt 959 399 L
+ 899 339 mt 899 459 L
+1196 783 mt 1316 783 L
+1256 723 mt 1256 843 L
+1553 1153 mt 1673 1153 L
+1613 1093 mt 1613 1213 L
+1910 1477 mt 2030 1477 L
+1970 1417 mt 1970 1537 L
+2267 1775 mt 2387 1775 L
+2327 1715 mt 2327 1835 L
+2624 2075 mt 2744 2075 L
+2684 2015 mt 2684 2135 L
+2981 2356 mt 3101 2356 L
+3041 2296 mt 3041 2416 L
+3338 2642 mt 3458 2642 L
+3398 2582 mt 3398 2702 L
+3695 2928 mt 3815 2928 L
+3755 2868 mt 3755 2988 L
+4052 3217 mt 4172 3217 L
+4112 3157 mt 4112 3277 L
+4409 3496 mt 4529 3496 L
+4469 3436 mt 4469 3556 L
+4766 3774 mt 4886 3774 L
+4826 3714 mt 4826 3834 L
+5123 4058 mt 5243 4058 L
+5183 3998 mt 5183 4118 L
+5480 4160 mt 5600 4160 L
+5540 4100 mt 5540 4220 L
+5837 4173 mt 5957 4173 L
+5897 4113 mt 5897 4233 L
+gs 899 389 5357 4227 MR c np
+357 41 357 257 357 271 357 265 357 270 357 276 357 274 357 274
+357 261 357 295 357 293 357 307 357 320 1256 770 14 MP stroke
+gr
+
+0 j
+-69 119 -69 -119 138 0 1187 810 4 MP
+DP
+-69 119 -69 -119 138 0 1544 1130 4 MP
+DP
+-69 119 -69 -119 138 0 1901 1437 4 MP
+DP
+-69 119 -69 -119 138 0 2258 1730 4 MP
+DP
+-69 119 -69 -119 138 0 2615 2025 4 MP
+DP
+-69 119 -69 -119 138 0 2972 2286 4 MP
+DP
+-69 119 -69 -119 138 0 3329 2560 4 MP
+DP
+-69 119 -69 -119 138 0 3686 2834 4 MP
+DP
+-69 119 -69 -119 138 0 4043 3110 4 MP
+DP
+-69 119 -69 -119 138 0 4400 3380 4 MP
+DP
+-69 119 -69 -119 138 0 4757 3645 4 MP
+DP
+-69 119 -69 -119 138 0 5114 3916 4 MP
+DP
+-69 119 -69 -119 138 0 5471 4173 4 MP
+DP
+-69 119 -69 -119 138 0 5828 4214 4 MP
+DP
+gs 899 389 5357 4227 MR c np
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/accuracy2.pdf b/doc/tutorial/images/accuracy2.pdf
new file mode 100644
index 0000000..287b3d6
Binary files /dev/null and b/doc/tutorial/images/accuracy2.pdf differ
diff --git a/doc/tutorial/images/accuracy3.eps b/doc/tutorial/images/accuracy3.eps
new file mode 100755
index 0000000..0546c5e
--- /dev/null
+++ b/doc/tutorial/images/accuracy3.eps
@@ -0,0 +1,497 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: accuracy3.eps
+%%CreationDate: 07/27/2004 11:00:45
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 40 199 555 602
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 40 199 555 602
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 273 113 6178 4841 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt 899 389 L
+ 899 4615 mt 899 4561 L
+ 899 389 mt 899 442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 826 4894 mt
+(0) s
+2684 4615 mt 2684 4561 L
+2684 389 mt 2684 442 L
+2611 4894 mt
+(5) s
+4469 4615 mt 4469 4561 L
+4469 389 mt 4469 442 L
+4323 4894 mt
+(10) s
+6255 4615 mt 6255 4561 L
+6255 389 mt 6255 442 L
+6109 4894 mt
+(15) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt
+(-15) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 3206 mt 952 3206 L
+6255 3206 mt 6201 3206 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3304 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3141 mt
+(-10) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 1797 mt 952 1797 L
+6255 1797 mt 6201 1797 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1895 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1732 mt
+(-5) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 389 mt 952 389 L
+6255 389 mt 6201 389 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 487 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 324 mt
+(0) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+gs 899 389 5357 4227 MR c np
+24 w
+357 -103 357 -74 357 21 357 8 357 -22 357 -38 357 335 357 533
+357 552 357 514 357 582 357 543 357 503 357 376 899 463 15 MP stroke
+gr
+
+24 w
+ 60 60 899 463 FO
+ 60 60 1256 839 FO
+ 60 60 1613 1342 FO
+ 60 60 1970 1885 FO
+ 60 60 2327 2467 FO
+ 60 60 2684 2981 FO
+ 60 60 3041 3533 FO
+ 60 60 3398 4066 FO
+ 60 60 3755 4401 FO
+ 60 60 4112 4363 FO
+ 60 60 4469 4341 FO
+ 60 60 4826 4349 FO
+ 60 60 5183 4370 FO
+ 60 60 5540 4296 FO
+ 60 60 5897 4193 FO
+gs 899 389 5357 4227 MR c np
+357 -60 357 -98 357 99 357 344 357 353 357 330 357 375 357 342
+357 353 357 336 357 416 357 343 357 371 1256 734 14 MP stroke
+gr
+
+1214 692 mt 1298 776 L
+1298 692 mt 1214 776 L
+1571 1063 mt 1655 1147 L
+1655 1063 mt 1571 1147 L
+1928 1406 mt 2012 1490 L
+2012 1406 mt 1928 1490 L
+2285 1822 mt 2369 1906 L
+2369 1822 mt 2285 1906 L
+2642 2158 mt 2726 2242 L
+2726 2158 mt 2642 2242 L
+2999 2511 mt 3083 2595 L
+3083 2511 mt 2999 2595 L
+3356 2853 mt 3440 2937 L
+3440 2853 mt 3356 2937 L
+3713 3228 mt 3797 3312 L
+3797 3228 mt 3713 3312 L
+4070 3558 mt 4154 3642 L
+4154 3558 mt 4070 3642 L
+4427 3911 mt 4511 3995 L
+4511 3911 mt 4427 3995 L
+4784 4255 mt 4868 4339 L
+4868 4255 mt 4784 4339 L
+5141 4354 mt 5225 4438 L
+5225 4354 mt 5141 4438 L
+5498 4256 mt 5582 4340 L
+5582 4256 mt 5498 4340 L
+5855 4196 mt 5939 4280 L
+5939 4196 mt 5855 4280 L
+gs 899 389 5357 4227 MR c np
+357 254 357 216 357 314 357 281 357 268 357 261 357 284 357 274
+357 285 357 255 357 331 357 285 357 317 357 314 899 389 15 MP stroke
+gr
+
+ 839 389 mt 959 389 L
+ 899 329 mt 899 449 L
+1196 703 mt 1316 703 L
+1256 643 mt 1256 763 L
+1553 1020 mt 1673 1020 L
+1613 960 mt 1613 1080 L
+1910 1305 mt 2030 1305 L
+1970 1245 mt 1970 1365 L
+2267 1636 mt 2387 1636 L
+2327 1576 mt 2327 1696 L
+2624 1891 mt 2744 1891 L
+2684 1831 mt 2684 1951 L
+2981 2176 mt 3101 2176 L
+3041 2116 mt 3041 2236 L
+3338 2450 mt 3458 2450 L
+3398 2390 mt 3398 2510 L
+3695 2734 mt 3815 2734 L
+3755 2674 mt 3755 2794 L
+4052 2995 mt 4172 2995 L
+4112 2935 mt 4112 3055 L
+4409 3263 mt 4529 3263 L
+4469 3203 mt 4469 3323 L
+4766 3544 mt 4886 3544 L
+4826 3484 mt 4826 3604 L
+5123 3858 mt 5243 3858 L
+5183 3798 mt 5183 3918 L
+5480 4074 mt 5600 4074 L
+5540 4014 mt 5540 4134 L
+5837 4328 mt 5957 4328 L
+5897 4268 mt 5897 4388 L
+gs 899 389 5357 4227 MR c np
+357 254 357 203 357 304 357 269 357 254 357 251 357 271 357 265
+357 271 357 243 357 319 357 275 357 294 1256 682 14 MP stroke
+gr
+
+0 j
+-69 119 -69 -119 138 0 1187 722 4 MP
+DP
+-69 119 -69 -119 138 0 1544 1016 4 MP
+DP
+-69 119 -69 -119 138 0 1901 1291 4 MP
+DP
+-69 119 -69 -119 138 0 2258 1610 4 MP
+DP
+-69 119 -69 -119 138 0 2615 1853 4 MP
+DP
+-69 119 -69 -119 138 0 2972 2124 4 MP
+DP
+-69 119 -69 -119 138 0 3329 2389 4 MP
+DP
+-69 119 -69 -119 138 0 3686 2660 4 MP
+DP
+-69 119 -69 -119 138 0 4043 2911 4 MP
+DP
+-69 119 -69 -119 138 0 4400 3165 4 MP
+DP
+-69 119 -69 -119 138 0 4757 3434 4 MP
+DP
+-69 119 -69 -119 138 0 5114 3738 4 MP
+DP
+-69 119 -69 -119 138 0 5471 3941 4 MP
+DP
+-69 119 -69 -119 138 0 5828 4195 4 MP
+DP
+gs 899 389 5357 4227 MR c np
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/accuracy3.pdf b/doc/tutorial/images/accuracy3.pdf
new file mode 100644
index 0000000..782b339
Binary files /dev/null and b/doc/tutorial/images/accuracy3.pdf differ
diff --git a/doc/tutorial/images/accuracy4.eps b/doc/tutorial/images/accuracy4.eps
new file mode 100755
index 0000000..3139cf7
--- /dev/null
+++ b/doc/tutorial/images/accuracy4.eps
@@ -0,0 +1,497 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: accuracy4.eps
+%%CreationDate: 07/27/2004 11:00:45
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 40 199 555 602
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 40 199 555 602
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 273 113 6178 4841 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt 899 389 L
+ 899 4615 mt 899 4561 L
+ 899 389 mt 899 442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 826 4894 mt
+(0) s
+2684 4615 mt 2684 4561 L
+2684 389 mt 2684 442 L
+2611 4894 mt
+(5) s
+4469 4615 mt 4469 4561 L
+4469 389 mt 4469 442 L
+4323 4894 mt
+(10) s
+6255 4615 mt 6255 4561 L
+6255 389 mt 6255 442 L
+6109 4894 mt
+(15) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt
+(-15) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 3206 mt 952 3206 L
+6255 3206 mt 6201 3206 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3304 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3141 mt
+(-10) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 1797 mt 952 1797 L
+6255 1797 mt 6201 1797 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1895 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1732 mt
+(-5) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 389 mt 952 389 L
+6255 389 mt 6201 389 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 487 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 324 mt
+(0) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+gs 899 389 5357 4227 MR c np
+24 w
+357 -15 357 -55 357 -31 357 84 357 -71 357 -70 357 176 357 543
+357 575 357 574 357 567 357 566 357 518 357 393 899 580 15 MP stroke
+gr
+
+24 w
+ 60 60 899 580 FO
+ 60 60 1256 973 FO
+ 60 60 1613 1491 FO
+ 60 60 1970 2057 FO
+ 60 60 2327 2624 FO
+ 60 60 2684 3198 FO
+ 60 60 3041 3773 FO
+ 60 60 3398 4316 FO
+ 60 60 3755 4492 FO
+ 60 60 4112 4422 FO
+ 60 60 4469 4351 FO
+ 60 60 4826 4435 FO
+ 60 60 5183 4404 FO
+ 60 60 5540 4349 FO
+ 60 60 5897 4334 FO
+gs 899 389 5357 4227 MR c np
+357 -45 357 -9 357 13 357 342 357 360 357 364 357 361 357 361
+357 347 357 352 357 355 357 361 357 428 1256 806 14 MP stroke
+gr
+
+1214 764 mt 1298 848 L
+1298 764 mt 1214 848 L
+1571 1192 mt 1655 1276 L
+1655 1192 mt 1571 1276 L
+1928 1553 mt 2012 1637 L
+2012 1553 mt 1928 1637 L
+2285 1908 mt 2369 1992 L
+2369 1908 mt 2285 1992 L
+2642 2260 mt 2726 2344 L
+2726 2260 mt 2642 2344 L
+2999 2607 mt 3083 2691 L
+3083 2607 mt 2999 2691 L
+3356 2968 mt 3440 3052 L
+3440 2968 mt 3356 3052 L
+3713 3329 mt 3797 3413 L
+3797 3329 mt 3713 3413 L
+4070 3693 mt 4154 3777 L
+4154 3693 mt 4070 3777 L
+4427 4053 mt 4511 4137 L
+4511 4053 mt 4427 4137 L
+4784 4395 mt 4868 4479 L
+4868 4395 mt 4784 4479 L
+5141 4408 mt 5225 4492 L
+5225 4408 mt 5141 4492 L
+5498 4399 mt 5582 4483 L
+5582 4399 mt 5498 4483 L
+5855 4354 mt 5939 4438 L
+5939 4354 mt 5855 4438 L
+gs 899 389 5357 4227 MR c np
+357 305 357 285 357 260 357 260 357 266 357 279 357 326 357 296
+357 241 357 285 357 311 357 283 357 440 357 289 899 439 15 MP stroke
+gr
+
+ 839 439 mt 959 439 L
+ 899 379 mt 899 499 L
+1196 728 mt 1316 728 L
+1256 668 mt 1256 788 L
+1553 1168 mt 1673 1168 L
+1613 1108 mt 1613 1228 L
+1910 1451 mt 2030 1451 L
+1970 1391 mt 1970 1511 L
+2267 1762 mt 2387 1762 L
+2327 1702 mt 2327 1822 L
+2624 2047 mt 2744 2047 L
+2684 1987 mt 2684 2107 L
+2981 2288 mt 3101 2288 L
+3041 2228 mt 3041 2348 L
+3338 2584 mt 3458 2584 L
+3398 2524 mt 3398 2644 L
+3695 2910 mt 3815 2910 L
+3755 2850 mt 3755 2970 L
+4052 3189 mt 4172 3189 L
+4112 3129 mt 4112 3249 L
+4409 3455 mt 4529 3455 L
+4469 3395 mt 4469 3515 L
+4766 3715 mt 4886 3715 L
+4826 3655 mt 4826 3775 L
+5123 3975 mt 5243 3975 L
+5183 3915 mt 5183 4035 L
+5480 4260 mt 5600 4260 L
+5540 4200 mt 5540 4320 L
+5837 4565 mt 5957 4565 L
+5897 4505 mt 5897 4625 L
+gs 899 389 5357 4227 MR c np
+357 282 357 277 357 249 357 246 357 256 357 266 357 316 357 286
+357 228 357 271 357 311 357 273 357 401 1256 694 14 MP stroke
+gr
+
+0 j
+-69 119 -69 -119 138 0 1187 734 4 MP
+DP
+-69 119 -69 -119 138 0 1544 1135 4 MP
+DP
+-69 119 -69 -119 138 0 1901 1408 4 MP
+DP
+-69 119 -69 -119 138 0 2258 1719 4 MP
+DP
+-69 119 -69 -119 138 0 2615 1990 4 MP
+DP
+-69 119 -69 -119 138 0 2972 2218 4 MP
+DP
+-69 119 -69 -119 138 0 3329 2504 4 MP
+DP
+-69 119 -69 -119 138 0 3686 2820 4 MP
+DP
+-69 119 -69 -119 138 0 4043 3086 4 MP
+DP
+-69 119 -69 -119 138 0 4400 3342 4 MP
+DP
+-69 119 -69 -119 138 0 4757 3588 4 MP
+DP
+-69 119 -69 -119 138 0 5114 3837 4 MP
+DP
+-69 119 -69 -119 138 0 5471 4114 4 MP
+DP
+-69 119 -69 -119 138 0 5828 4396 4 MP
+DP
+gs 899 389 5357 4227 MR c np
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/accuracy4.pdf b/doc/tutorial/images/accuracy4.pdf
new file mode 100644
index 0000000..e31fdfb
Binary files /dev/null and b/doc/tutorial/images/accuracy4.pdf differ
diff --git a/doc/tutorial/images/accuracy5.eps b/doc/tutorial/images/accuracy5.eps
new file mode 100755
index 0000000..cc05392
--- /dev/null
+++ b/doc/tutorial/images/accuracy5.eps
@@ -0,0 +1,497 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: accuracy5.eps
+%%CreationDate: 07/27/2004 11:00:45
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 40 199 555 602
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 40 199 555 602
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 273 113 6178 4841 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt 899 389 L
+ 899 4615 mt 899 4561 L
+ 899 389 mt 899 442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 826 4894 mt
+(0) s
+2684 4615 mt 2684 4561 L
+2684 389 mt 2684 442 L
+2611 4894 mt
+(5) s
+4469 4615 mt 4469 4561 L
+4469 389 mt 4469 442 L
+4323 4894 mt
+(10) s
+6255 4615 mt 6255 4561 L
+6255 389 mt 6255 442 L
+6109 4894 mt
+(15) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt
+(-15) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 3206 mt 952 3206 L
+6255 3206 mt 6201 3206 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3304 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3141 mt
+(-10) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 1797 mt 952 1797 L
+6255 1797 mt 6201 1797 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1895 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1732 mt
+(-5) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 389 mt 952 389 L
+6255 389 mt 6201 389 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 487 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 324 mt
+(0) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+gs 899 389 5357 4227 MR c np
+24 w
+357 -100 357 -32 357 -29 357 -2 357 -48 357 -5 357 371 357 543
+357 546 357 541 357 515 357 559 357 465 357 397 899 426 15 MP stroke
+gr
+
+24 w
+ 60 60 899 426 FO
+ 60 60 1256 823 FO
+ 60 60 1613 1288 FO
+ 60 60 1970 1847 FO
+ 60 60 2327 2362 FO
+ 60 60 2684 2903 FO
+ 60 60 3041 3449 FO
+ 60 60 3398 3992 FO
+ 60 60 3755 4363 FO
+ 60 60 4112 4358 FO
+ 60 60 4469 4310 FO
+ 60 60 4826 4308 FO
+ 60 60 5183 4279 FO
+ 60 60 5540 4247 FO
+ 60 60 5897 4147 FO
+gs 899 389 5357 4227 MR c np
+357 -129 357 -75 357 -85 357 254 357 303 357 426 357 368 357 356
+357 363 357 368 357 336 357 389 357 339 1256 727 14 MP stroke
+gr
+
+1214 685 mt 1298 769 L
+1298 685 mt 1214 769 L
+1571 1024 mt 1655 1108 L
+1655 1024 mt 1571 1108 L
+1928 1413 mt 2012 1497 L
+2012 1413 mt 1928 1497 L
+2285 1749 mt 2369 1833 L
+2369 1749 mt 2285 1833 L
+2642 2117 mt 2726 2201 L
+2726 2117 mt 2642 2201 L
+2999 2480 mt 3083 2564 L
+3083 2480 mt 2999 2564 L
+3356 2836 mt 3440 2920 L
+3440 2836 mt 3356 2920 L
+3713 3204 mt 3797 3288 L
+3797 3204 mt 3713 3288 L
+4070 3630 mt 4154 3714 L
+4154 3630 mt 4070 3714 L
+4427 3933 mt 4511 4017 L
+4511 3933 mt 4427 4017 L
+4784 4187 mt 4868 4271 L
+4868 4187 mt 4784 4271 L
+5141 4102 mt 5225 4186 L
+5225 4102 mt 5141 4186 L
+5498 4027 mt 5582 4111 L
+5582 4027 mt 5498 4111 L
+5855 3898 mt 5939 3982 L
+5939 3898 mt 5855 3982 L
+gs 899 389 5357 4227 MR c np
+357 262 357 269 357 276 357 256 357 260 357 275 357 249 357 278
+357 283 357 276 357 266 357 303 357 285 357 312 899 389 15 MP stroke
+gr
+
+ 839 389 mt 959 389 L
+ 899 329 mt 899 449 L
+1196 701 mt 1316 701 L
+1256 641 mt 1256 761 L
+1553 986 mt 1673 986 L
+1613 926 mt 1613 1046 L
+1910 1289 mt 2030 1289 L
+1970 1229 mt 1970 1349 L
+2267 1555 mt 2387 1555 L
+2327 1495 mt 2327 1615 L
+2624 1831 mt 2744 1831 L
+2684 1771 mt 2684 1891 L
+2981 2114 mt 3101 2114 L
+3041 2054 mt 3041 2174 L
+3338 2392 mt 3458 2392 L
+3398 2332 mt 3398 2452 L
+3695 2641 mt 3815 2641 L
+3755 2581 mt 3755 2701 L
+4052 2916 mt 4172 2916 L
+4112 2856 mt 4112 2976 L
+4409 3176 mt 4529 3176 L
+4469 3116 mt 4469 3236 L
+4766 3432 mt 4886 3432 L
+4826 3372 mt 4826 3492 L
+5123 3708 mt 5243 3708 L
+5183 3648 mt 5183 3768 L
+5480 3977 mt 5600 3977 L
+5540 3917 mt 5540 4037 L
+5837 4239 mt 5957 4239 L
+5897 4179 mt 5897 4299 L
+gs 899 389 5357 4227 MR c np
+357 251 357 257 357 263 357 245 357 246 357 264 357 238 357 267
+357 271 357 267 357 258 357 287 357 268 1256 683 14 MP stroke
+gr
+
+0 j
+-69 119 -69 -119 138 0 1187 723 4 MP
+DP
+-69 119 -69 -119 138 0 1544 991 4 MP
+DP
+-69 119 -69 -119 138 0 1901 1278 4 MP
+DP
+-69 119 -69 -119 138 0 2258 1536 4 MP
+DP
+-69 119 -69 -119 138 0 2615 1803 4 MP
+DP
+-69 119 -69 -119 138 0 2972 2074 4 MP
+DP
+-69 119 -69 -119 138 0 3329 2341 4 MP
+DP
+-69 119 -69 -119 138 0 3686 2579 4 MP
+DP
+-69 119 -69 -119 138 0 4043 2843 4 MP
+DP
+-69 119 -69 -119 138 0 4400 3089 4 MP
+DP
+-69 119 -69 -119 138 0 4757 3334 4 MP
+DP
+-69 119 -69 -119 138 0 5114 3597 4 MP
+DP
+-69 119 -69 -119 138 0 5471 3854 4 MP
+DP
+-69 119 -69 -119 138 0 5828 4105 4 MP
+DP
+gs 899 389 5357 4227 MR c np
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/accuracy5.pdf b/doc/tutorial/images/accuracy5.pdf
new file mode 100644
index 0000000..10e1225
Binary files /dev/null and b/doc/tutorial/images/accuracy5.pdf differ
diff --git a/doc/tutorial/images/accuracy6.eps b/doc/tutorial/images/accuracy6.eps
new file mode 100755
index 0000000..4b8ef2b
--- /dev/null
+++ b/doc/tutorial/images/accuracy6.eps
@@ -0,0 +1,497 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: accuracy6.eps
+%%CreationDate: 07/27/2004 11:00:45
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 40 199 555 602
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 40 199 555 602
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 273 113 6178 4841 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt 899 389 L
+ 899 4615 mt 899 4561 L
+ 899 389 mt 899 442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 826 4894 mt
+(0) s
+2684 4615 mt 2684 4561 L
+2684 389 mt 2684 442 L
+2611 4894 mt
+(5) s
+4469 4615 mt 4469 4561 L
+4469 389 mt 4469 442 L
+4323 4894 mt
+(10) s
+6255 4615 mt 6255 4561 L
+6255 389 mt 6255 442 L
+6109 4894 mt
+(15) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt
+(-15) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 3206 mt 952 3206 L
+6255 3206 mt 6201 3206 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3304 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3141 mt
+(-10) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 1797 mt 952 1797 L
+6255 1797 mt 6201 1797 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1895 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1732 mt
+(-5) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 389 mt 952 389 L
+6255 389 mt 6201 389 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 487 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 324 mt
+(0) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+gs 899 389 5357 4227 MR c np
+24 w
+357 -88 357 10 357 -72 357 102 357 -57 357 2 357 251 357 551
+357 532 357 524 357 542 357 527 357 531 357 442 899 502 15 MP stroke
+gr
+
+24 w
+ 60 60 899 502 FO
+ 60 60 1256 944 FO
+ 60 60 1613 1475 FO
+ 60 60 1970 2002 FO
+ 60 60 2327 2544 FO
+ 60 60 2684 3068 FO
+ 60 60 3041 3600 FO
+ 60 60 3398 4151 FO
+ 60 60 3755 4402 FO
+ 60 60 4112 4404 FO
+ 60 60 4469 4347 FO
+ 60 60 4826 4449 FO
+ 60 60 5183 4377 FO
+ 60 60 5540 4387 FO
+ 60 60 5897 4299 FO
+gs 899 389 5357 4227 MR c np
+357 -86 357 -27 357 -70 357 330 357 300 357 471 357 363 357 340
+357 317 357 391 357 361 357 347 357 418 1256 808 14 MP stroke
+gr
+
+1214 766 mt 1298 850 L
+1298 766 mt 1214 850 L
+1571 1184 mt 1655 1268 L
+1655 1184 mt 1571 1268 L
+1928 1531 mt 2012 1615 L
+2012 1531 mt 1928 1615 L
+2285 1892 mt 2369 1976 L
+2369 1892 mt 2285 1976 L
+2642 2283 mt 2726 2367 L
+2726 2283 mt 2642 2367 L
+2999 2600 mt 3083 2684 L
+3083 2600 mt 2999 2684 L
+3356 2940 mt 3440 3024 L
+3440 2940 mt 3356 3024 L
+3713 3303 mt 3797 3387 L
+3797 3303 mt 3713 3387 L
+4070 3774 mt 4154 3858 L
+4154 3774 mt 4070 3858 L
+4427 4074 mt 4511 4158 L
+4511 4074 mt 4427 4158 L
+4784 4404 mt 4868 4488 L
+4868 4404 mt 4784 4488 L
+5141 4334 mt 5225 4418 L
+5225 4334 mt 5141 4418 L
+5498 4307 mt 5582 4391 L
+5582 4307 mt 5498 4391 L
+5855 4221 mt 5939 4305 L
+5939 4221 mt 5855 4305 L
+gs 899 389 5357 4227 MR c np
+357 284 357 219 357 331 357 280 357 266 357 270 357 267 357 271
+357 264 357 297 357 283 357 268 357 338 357 308 899 497 15 MP stroke
+gr
+
+ 839 497 mt 959 497 L
+ 899 437 mt 899 557 L
+1196 805 mt 1316 805 L
+1256 745 mt 1256 865 L
+1553 1143 mt 1673 1143 L
+1613 1083 mt 1613 1203 L
+1910 1411 mt 2030 1411 L
+1970 1351 mt 1970 1471 L
+2267 1694 mt 2387 1694 L
+2327 1634 mt 2327 1754 L
+2624 1991 mt 2744 1991 L
+2684 1931 mt 2684 2051 L
+2981 2255 mt 3101 2255 L
+3041 2195 mt 3041 2315 L
+3338 2526 mt 3458 2526 L
+3398 2466 mt 3398 2586 L
+3695 2793 mt 3815 2793 L
+3755 2733 mt 3755 2853 L
+4052 3063 mt 4172 3063 L
+4112 3003 mt 4112 3123 L
+4409 3329 mt 4529 3329 L
+4469 3269 mt 4469 3389 L
+4766 3609 mt 4886 3609 L
+4826 3549 mt 4826 3669 L
+5123 3940 mt 5243 3940 L
+5183 3880 mt 5183 4000 L
+5480 4159 mt 5600 4159 L
+5540 4099 mt 5540 4219 L
+5837 4443 mt 5957 4443 L
+5897 4383 mt 5897 4503 L
+gs 899 389 5357 4227 MR c np
+357 307 357 211 357 318 357 274 357 251 357 266 357 254 357 263
+357 247 357 299 357 273 357 237 357 326 1256 778 14 MP stroke
+gr
+
+0 j
+-69 119 -69 -119 138 0 1187 818 4 MP
+DP
+-69 119 -69 -119 138 0 1544 1144 4 MP
+DP
+-69 119 -69 -119 138 0 1901 1381 4 MP
+DP
+-69 119 -69 -119 138 0 2258 1654 4 MP
+DP
+-69 119 -69 -119 138 0 2615 1953 4 MP
+DP
+-69 119 -69 -119 138 0 2972 2200 4 MP
+DP
+-69 119 -69 -119 138 0 3329 2463 4 MP
+DP
+-69 119 -69 -119 138 0 3686 2717 4 MP
+DP
+-69 119 -69 -119 138 0 4043 2983 4 MP
+DP
+-69 119 -69 -119 138 0 4400 3234 4 MP
+DP
+-69 119 -69 -119 138 0 4757 3508 4 MP
+DP
+-69 119 -69 -119 138 0 5114 3826 4 MP
+DP
+-69 119 -69 -119 138 0 5471 4037 4 MP
+DP
+-69 119 -69 -119 138 0 5828 4344 4 MP
+DP
+gs 899 389 5357 4227 MR c np
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/accuracy6.pdf b/doc/tutorial/images/accuracy6.pdf
new file mode 100644
index 0000000..00811af
Binary files /dev/null and b/doc/tutorial/images/accuracy6.pdf differ
diff --git a/doc/tutorial/images/front_pic1.eps b/doc/tutorial/images/front_pic1.eps
new file mode 100755
index 0000000..f6a0e69
--- /dev/null
+++ b/doc/tutorial/images/front_pic1.eps
@@ -0,0 +1,240 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: front_pic1.eps
+%%CreationDate: 07/26/2004 11:13:52
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 92 223 543 573
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 92 223 543 573
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 899 460 5405 4199 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+gs 899 389 5357 4227 MR c np
+24 w
+gr
+
+24 w
+0 sg
+ 60 60 1434 1938 FO
+ 60 60 1702 4441 FO
+ 60 60 1970 4512 FO
+ 60 60 2238 1564 FO
+ 60 60 2505 871 FO
+ 60 60 2773 654 FO
+ 60 60 3041 707 FO
+ 60 60 3309 1418 FO
+ 60 60 3577 3020 FO
+ 60 60 3844 1089 FO
+ 60 60 4112 1713 FO
+ 60 60 4380 2268 FO
+ 60 60 4648 4250 FO
+ 60 60 4916 2270 FO
+ 60 60 5183 1743 FO
+ 60 60 5451 2808 FO
+gs 899 389 5357 4227 MR c np
+0 -564 1434 2502 2 MP stroke
+0 1939 1702 2502 2 MP stroke
+0 2010 1970 2502 2 MP stroke
+0 -938 2238 2502 2 MP stroke
+0 -1631 2505 2502 2 MP stroke
+0 -1848 2773 2502 2 MP stroke
+0 -1795 3041 2502 2 MP stroke
+0 -1084 3309 2502 2 MP stroke
+0 518 3577 2502 2 MP stroke
+0 -1413 3844 2502 2 MP stroke
+0 -789 4112 2502 2 MP stroke
+0 -234 4380 2502 2 MP stroke
+0 1748 4648 2502 2 MP stroke
+0 -232 4916 2502 2 MP stroke
+0 -759 5183 2502 2 MP stroke
+0 306 5451 2502 2 MP stroke
+5356 0 899 2502 2 MP stroke
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/front_pic1.pdf b/doc/tutorial/images/front_pic1.pdf
new file mode 100644
index 0000000..1ed6920
Binary files /dev/null and b/doc/tutorial/images/front_pic1.pdf differ
diff --git a/doc/tutorial/images/front_pic2.eps b/doc/tutorial/images/front_pic2.eps
new file mode 100755
index 0000000..d3ad0a9
--- /dev/null
+++ b/doc/tutorial/images/front_pic2.eps
@@ -0,0 +1,257 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: front_pic2.eps
+%%CreationDate: 07/26/2004 11:13:52
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 92 243 543 547
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 92 243 543 547
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 899 772 5405 3646 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+gs 899 389 5357 4227 MR c np
+DO
+24 w
+0 sg
+54 -32 54 -86 53 -109 54 -90 53 -28 54 67 53 174 54 270
+54 330 53 334 54 277 53 162 54 8 53 -159 54 -309 53 -414
+54 -451 54 -417 53 -314 54 -161 53 11 54 174 53 297 54 358
+53 347 54 272 54 145 53 -5 54 -151 53 -264 54 -320 53 -313
+54 -239 54 -113 53 45 54 209 53 356 54 461 53 515 54 508
+53 449 54 350 54 226 53 102 54 -8 53 -86 54 -127 53 -126
+54 -92 53 -33 54 33 54 92 53 126 54 127 53 86 54 8
+53 -102 54 -226 54 -350 53 -449 54 -508 53 -515 54 -461 53 -356
+54 -209 53 -45 54 113 54 239 53 313 54 320 53 264 54 151
+53 5 54 -145 53 -272 54 -347 54 -358 53 -297 54 -174 53 -11
+54 161 53 314 54 417 54 451 53 414 54 309 53 159 54 -8
+53 -162 54 -277 53 -334 54 -330 54 -270 53 -174 54 -67 53 28
+54 90 53 109 54 86 952 3476 100 MP stroke
+53 32 899 3444 2 MP stroke
+SO
+gr
+
+24 w
+0 sg
+ 60 60 3208 1056 FO
+ 60 60 5501 2344 FO
+ 60 60 3400 1153 FO
+ 60 60 2432 2872 FO
+ 60 60 1248 3644 FO
+ 60 60 4417 4197 FO
+ 60 60 4274 3594 FO
+ 60 60 4817 2801 FO
+ 60 60 6013 3785 FO
+ 60 60 2877 3611 FO
+ 60 60 1270 3561 FO
+ 60 60 5545 2191 FO
+ 60 60 2477 3056 FO
+ 60 60 3862 966 FO
+ 60 60 5088 4256 FO
+ 60 60 1274 3544 FO
+gs 899 389 5357 4227 MR c np
+0 -1747 3208 2803 2 MP stroke
+0 -459 5501 2803 2 MP stroke
+0 -1650 3400 2803 2 MP stroke
+0 69 2432 2803 2 MP stroke
+0 841 1248 2803 2 MP stroke
+0 1394 4417 2803 2 MP stroke
+0 791 4274 2803 2 MP stroke
+0 -2 4817 2803 2 MP stroke
+0 982 6013 2803 2 MP stroke
+0 808 2877 2803 2 MP stroke
+0 758 1270 2803 2 MP stroke
+0 -612 5545 2803 2 MP stroke
+0 253 2477 2803 2 MP stroke
+0 -1837 3862 2803 2 MP stroke
+0 1453 5088 2803 2 MP stroke
+0 741 1274 2803 2 MP stroke
+5356 0 899 2803 2 MP stroke
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/front_pic2.pdf b/doc/tutorial/images/front_pic2.pdf
new file mode 100644
index 0000000..32a8851
Binary files /dev/null and b/doc/tutorial/images/front_pic2.pdf differ
diff --git a/doc/tutorial/images/glacier1.eps b/doc/tutorial/images/glacier1.eps
new file mode 100755
index 0000000..85fc084
--- /dev/null
+++ b/doc/tutorial/images/glacier1.eps
@@ -0,0 +1,27242 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: glacier1.eps
+%%CreationDate: 09/01/2004 09:56:03
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 92 227 543 592
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 92 227 543 592
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 2.08333 def
+portraitMode 0037 1275 csm
+
+ 155 41 939 761 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+gs 0 0 1200 901 MR c np
+/picstr 1200 string def
+gs
+1200 436 scale
+1200 436 8
+[1200 0 0 436 0 0] L1i
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C7274767261FFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7F81847F796C6155FFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C87898C89877F766A5C51FFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF898F92949289847C746A57FFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E92949A9A948F877F79716154FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87929A9C9E9C94928C877C726657FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F929A9EA49E9C9A948F877F746A5CFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C8C9A9EA4A6A49E9C9992897F746C5F51FFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87999EA4A9A9A6A39E9A928981766C6155FFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F929CA4ABB1ABA6A4A19C928981797167574FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8799A4ABB1B4AEA9A6A49C9489847C726A5D4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C929CA6B1B7B7B1AEA9A49C9489847C726A5F55FFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8994A1ACB7BEB9B6B1AEA69C948C857C746C6457FFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A929CA6B1BEC1BEB7B1AEA69E948E877F766C675C4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89949EABB7C1C1BEB9B6AEA69E948F877F7671675F54FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E9AA4AEBCC6C1BEB9B3AEA69E998F877F76726A6157FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF87929CA9B6C1CCC1BEB9B3AEA69E9992877F79726A6157FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF8C99A4AEBCC6CCC1BBB9B3B1A99E9A92877F7C746C615C4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF81929CA6B4C1CCCCC1BBB9B3B1A9A39A9289817C746C665D54FFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF89949EA9B9C6D3CCC1B9B7B3B1A9A39C9289817C746C675F55FFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF7F8F9CA4AEBCCCD4CCC1B9B6B1B1A9A49C9289847F76716A5F574FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF87949EA6B4C4D1D4CCC1B9B6B1B1A9A49C948C857F76726A61574FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF7C8C9AA1A9B7C6D7D9CCC4B9B6B1AEA9A49C948E877F79726A615951FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF85949CA4AEBCCCD9D4CCC1B9B6B1AEA9A49C948E877F7C746C615C54FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF8C949EA6B1C1CFD9D4CCC1B9B6B1AEA9A49C948F877F7C746C665D554F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF849299A1A9B6C4D1D9D3C8C0B9B3B1AEA9A49C969287817C746C675F554F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF89949CA4AEB7C4D1D4D1C6BEB9B3B1AEA9A49C999289817C76716A5F5751
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF7F92949CA6AEB9C6D3D3CFC6BBB9B3B1AEABA49E999289817C76726A615754
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF8992999EA6B1B9C6D3CFCCC6BBB9B3B1AEA9A69E9A9289847F79726A615955
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF7C8F949AA4A9B1BCC6D1CFC9C1BBB9B3B1AEA9A69E9A9289847F79746C665D55
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF8992949CA4A9B4BECBCFCCC6C1BBB9B1B1AEA9A49E9A9289877F7C746C675F55
+51FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF7C8F949A9CA4ABB7BFCCCCC6C6C1BBB9B1AEAEA6A49E9A928C877F7C7471675F57
+54FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF8992949C9EA6AEB7C4CCC8C6C1BEBBB7B1AEABA6A49E9A948C877F7C76726A6157
+544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF6A8C949A9CA3A6AEB9C4C6C6C1BEBBB9B7B1AEABA6A49E9A948E87817C76726A615C
+554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF8792949A9CA4A9B1B9C1C6C4BEBBB9B9B6B1AEA9A6A49E9A948E87817C76726C665F
+5551FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF678994999C9EA6A9B1B9C1C1C1BEB9B9B6B1AEAEA9A6A49C9A948F87817F79746C675F
+5751FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF878F949A9CA3A6A9AEB7BEBEBEB9B9B6B3B1AEABA9A6A39C9A948F89817F79746C6761
+57544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFF678992999C9CA4A6A9AEB7B9B9B9B7B6B1B1AEAEA9A6A4A19C99928F89817F7C74716A61
+59544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFF878F94999C9EA4A6A9AEB6B9B7B7B3B1B1AEAEABA9A6A49E9C99928E89817F7C74726A61
+5D554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF678994949A9C9EA4A6A9AEB6B6B3B1B1B1AEAEABA9A6A6A49E9C96928E89847F7C76726A66
+5F574FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF879294949A9C9EA4A6ABAEB1B1B1B1B1AEAEABA9A6A6A6A49E9A94928C87847F7C76726C67
+5F57514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF81899294999C9C9EA4A6ABAEB1B1AEAEAEAEABA9A6A6A6A4A19C9A94928C87847F7C76726C67
+5F59544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF879292949A9A9C9EA4A6A9AEAEAEAEAEAEABA9A6A6A6A4A49E9C9994928987817F7C74726C67
+615C554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF818C9294949A9A9C9EA3A6A6ABABABA9A9A9A9A6A6A6A4A4A39E9C94928F8987817F7C74726C67
+615D574FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF8992949494999A9C9EA1A4A6A9A9A9A9A9A6A6A6A6A4A4A19E9C9A94928E8987817F7974726C67
+615F574F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+848F94949494999A9C9C9EA4A6A6A6A6A6A6A6A6A6A4A39E9E9C9C99948F898987817F7974726C6A
+615F57514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C
+8C9294949494949A9C9C9EA1A4A4A4A4A4A4A4A4A4A39E9E9C9C9A94928E898785817C7974726C6A
+615F59544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87
+92949499949494999A9C9E9EA3A3A3A3A4A4A4A4A39E9E9C9C9A9994928C8987847F7C7974726C6A
+645F5C554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8E
+94949996949494949A9C9C9E9E9E9E9E9EA19E9E9E9E9C9C9A9994928F898787817F7C7974726C6A
+665F5C574F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8792
+94999A9494949494999A9C9C9C9C9C9C9E9E9E9C9C9C9C9A999494928E8987847F7F7C7674726C6A
+66615D57544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF849294
+969A99949494949494999A9C9C9C9C9C9C9C9C9C9C9A9A999494928F8C8987817F7C7C7674716C6A
+66615D57554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8F9499
+9A9A99949494949494949A9A9A9A9A9A9C9A9A9A999994949492928E898785817F7C7974746E6A6A
+64615F57554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF748992999A
+9C9A969494929492949494949496999A9A9994949494949292928E898987847F7C7C7674726C6A6A
+61615F5955514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8492949A9C
+9A9A949494929292929494949494949494949492929292928F8E8C898787817F7C767474726C6A67
+61615F5955544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F92949A9C9C
+9A99949492929292929292929494949494929292928F8F8E8C89898787847F7F7C767472716C6A66
+615F5F5957554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF798C94999C9C9C
+9A99949292928F928F8F92929292929292928F8F8F8E8E898989878784817F7C7C7472726C6A6761
+615F5F5957554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6789949A9C9E9C9C
+9A9492928F8E8E8C8C8E8F8F8F92928F8F8E8E8F8E8E8C8989878784817F7F7C7974726C6C6A6761
+615F5F595755514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87929A9C9E9E9C9A
+9A94928F8E8C898989898C8C8E8E8E8E8E8E8E8E8E8C8989898787847F7F7F7C7674726C6A6A6661
+5F5F5D5C5754544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878E969E9EA19E9C9A
+94928F8E8989898789898989898C8E8E8E8E8E8E8E8C898989878785817F7C7C7674726C6A676661
+5F5D5C595754544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848E949CA3A3A49E9C9A
+948F8E898987878787898989898C8E8E8E8E8E8E8E8E898989878787847F7C7C7674726C6A616161
+5F5D5C595754544F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818E949CA4A4A4A49E9C94
+928E8989878784858787898989898C8E8E8E8E8E8E8E8C898989878785817F7C767474716A665F5F
+5D5C5957575551514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F89949CA4A6A4A6A49E9C94
+8F8989878581818787878989898C8E8F8F8F8E8E8E8E8E898989878787847F7C797674726C6A615D
+5C595757575551514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F89949EA4A6A6A6A6A49E9992
+898987857F7F818787878989898E8F8F928F8F8E8E8E8E8C898989878785817F7C7674726C6A665F
+5757575755554F514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C89949EA4A6ABA9A6A6A69C948F
+8987857F7F7F8587878989898E8E8F9292928F8E8E8E8E8E898989878787817F7F7C7674726C6761
+5C5757555555514F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF676A6A6C72726C6757
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7989949CA4A6ABAEAEA9A9A39A9289
+87857F7C7F84878789898C8E8F9292929292928F8E8E8E8E8C898987878784817F7C7C7674716A66
+5F5755555554544F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5972727274767C7C797674716A
+4F55FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7687949CA4A6ABB1B1AEAEA69E949287
+8781797C81878789898E8F9292929494949492928F8F8F8E8C89898987878584817F7C7C7674716C
+675F54555551554F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF676A5757747C79797C7C7F8181817F7C7C7674
+726C61FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7987929CA4A9AEB1B3B3B1ACA49C928987
+81767C7F8787898C8E8F929294949494949494929292928F8E8C898987878784817F7F7C79767471
+6C675D515451544F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727C7F7C767F848484817F818787878784847F7F7F7C
+767471675FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF768C999CA4A6AEB1B6B9B7B1A99E99928781
+7C797F8789898E8F9292929494949494949494949292928F8E8C89898987878584817F7F7C797674
+716C675C4F544F514F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF5F6C744F6C7F878184898E8E8E87878989898989898787878581817F
+7F76726C66614FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76929A9EA4A6AEB1B7B9BBB3AEA69C948C847F
+767F878C8E8F9292949494949999999999999994949492928F8E89898987878784817F7F7C7C7674
+726E6C6657514F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF67616A747F877F7C7C858E928F89878E9294928C898E9292928C8989898787878781
+7F7C74746C6A6659FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79949C9EA4A9AEB1B9BBBBB9B1ABA49C92878174
+7F878E9292949494969999999A9A9A9A9A9A9A9994949492928F8C898987878784817F7F7F7C7B76
+74726C6A6157514F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF5F6C7C7C7F7C7C878E898C89858E949494928C92999994928C929294928F8C8E898989898785
+817F7976746C6C6761FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F949C9EA6ABAEB3B9BBBBBBB7AEA69E998E857F7F
+878E929494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949492928F8E898987878584817F7F7C7B76
+7472716C6A5F574F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7974
+7C817C898781878E8F94928C8F9492949994949A94969A9999949292949494928E8F8F8E8C898787
+81817C79767274746C6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C949CA4A6AEB1B6B9BBBBBBBBB3AEA69C9289817987
+8C9294999C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9994949492928F8E8987878784817F7F7C7976
+7472726C6A675F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8789877F
+818992928F898C929A9A949292949C9C9A99999A9C9C9C9A9A9A9494999494928F8F928F8E898987
+85847F7C7C79767676726A61FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF929CA4A9AEB1B9BBBBBBBBBBBBB1A9A49A8E877C8589
+92949A9C9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9994949492928E8989878784817F7F7C7976
+747472716C6A615F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF748794929289
+89929494949292999C9C9A94949A9C9E9C9A9A9C9C9C9C9A9A9A9A9999999494929292928F8C8987
+8784847F7F7C7C7C7B76726A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF929CA4ABB1B3B9BBBEC1C0BBBBB9B1A69E9489817F8992
+949A9C9EA3A4A4A4A4A4A4A39E9E9E9E9C9C9C9C9A9A9994949492928F8C89878784817F7C7C7976
+7474726C6C6A665F574F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7176879A99949494
+929A99949A9A949C9C9C9C9A949C9E9E9C9C9A9C9C9E9C9C9A9A9A9A9A99949492929292928E8989
+878785817F7F7C7C7C7C76726C5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E9CA4ABB1B9BBBEC0C1C1C0BBBBB9AEA69C928779878F94
+9A9CA1A4A6A6A6A6A6A6A4A4A4A3A19E9E9C9C9C9C9A9996949492928F8C89878784817F7C7C7976
+7472716C6C6A66615C554F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8189929A9E9C949A9C
+9C9C9A999A9C9C9E9E9C9C9C9A9C9E9E9E9C9A9C9E9E9E9C9C9C9C9A9A99999494949492928F8C89
+87878785817F7F7F7F7F7F76726A5CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF899AA4ABB3B9BBC0C1C1C4C6C1BBBBB6AEA3948981818E9499
+9CA3A6A6A9A9A9A9A9A9A6A6A6A6A4A39E9E9C9C9C9A9A99949492928F8C89878784817F7C7C7674
+74726E6C6A6A66615F574F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF898F999EA6A49E9C9C9C
+9E9E9C9A9C9EA1A19E9E9C9C9C9E9E9E9E9E9C9C9E9E9E9C9C9C9C9C9A9A99969494949292928E89
+8987878785817F7F7F7F7F7F76726A5CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF8794A4ABB3BBBEC1C1C6C6C6C6C1BBBBB1A69C9287798992969C
+9EA6A9A9AEAEAEAEAEAEAEACABA6A4A4A49E9E9C9C9C9A99949492928E89898787847F7F7C797674
+72726C6C6A6A66615F59554F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F92929CA4A6A6A49E9C9E
+9E9E9E9C9C9EA4A49E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9E9C9C9C9C9A9A9A999494949492928F8C
+8987878787848181848181847F76726A59FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF7F929EABB3B9C1C1C6C6C6C6C8C6C1BEB9AEA49A8E858492949A9E
+A4A9AEAEB1B6B6B6B6B4B1B1B1ABA6A6A4A49E9E9C9C9A9A999494928F89898787817F7C7C767474
+72716C6A6A6766615F5C574F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF769499999EA6A6A6A6A39EA4
+9E9E9E9C9E9EA4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A99969494949292928E
+898987878787848485858587857F76746757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF748E9CA9B1B9C1C6C6C6C9C9C9CCC8C6C0B6A99E94897189929A9CA3
+A6AEB4B6B7B9BCBCBCB9B7B6B4AEA9A6A6A4A39E9E9C9A9A999494928F89898785817F7C79767472
+726C6C6A6A6764615F5D57544F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C899C9C9CA3A9A6A6A6A6A4A4
+A19E9E9E9EA3A4A4A4A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A999494949492928F
+8C898987878787858787878787847F76746757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF717C879AA6B1B9BEC6C8C8CCCFCFCFCFC9C4BBB1A69C9287848F949C9EA6
+ABB1B7BCBEBEBFBFBEBEBEB9B7B1AEA9A6A6A4A19E9C9C9A99969492928C8987847F7F7C76747472
+716C6A6A676761615F5F5C574F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74879CA3A3A3A6A9A6A6A6A6A6A4
+A39E9EA19EA4A4A4A4A49E9E9E9E9E9EA19E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9994949494929292
+8E89898989878787878789878787847F79746657FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF747F7C94A4AEB9BEC4CCCFCFCFCFCFCFCFC6C0B9AEA3998C728992999CA4A9
+AEB6BCBFC4C4C6C6C6C1C1C0B9B6AEABA9A6A6A49E9E9C9A9A9994928F898987817F7C7976747272
+6C6C6A6A676661615F5F5C57544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8F9AA4A4A6A6A9A9A6A6A6A6A6A4
+A49E9EA3A3A4A4A4A4A4A3A19E9E9EA1A39E9E9E9E9EA19E9E9E9C9C9C9C9A9A9994949494949292
+8F8C89898989878787898989898989847F7C74664FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF79856C899EABB7BFC4CCD1D1D1D3D3D3D3CCC4BEB1A69C9287818E949A9EA6AE
+B1B9BFC6C6CBCCCCC9C6C6C1BEB7B1AEAEA9A6A4A49E9C9C9A9994928E898987817F7C767472726C
+6C6A6A67676661615F5F5D59554F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F89949CA4A4A6A9A9A9A6A6A6A6A6A6
+A4A1A1A3A4A4A4A4A4A4A4A3A19E9EA1A3A19E9E9EA1A39E9E9E9E9C9C9C9C9A9994949494949292
+928E8989898989878989898989898989857F7C74664FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF76878E7F9AA6B4BEC6C9D1D4D4D4D4D4D4CFC6BFB9AEA49A8F72878F949CA4ABB1
+B7BEC6CCCFCFCFCFCCC8C6C1BEB9B6B1AEAEA9A6A4A39E9C9A9994928E898787847F7974726C6C6C
+6A6A6A67666661615F5F5D5C574F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C878C999EA4A4A6A9A9A9A6A6A6A6A6A6
+A4A3A1A3A4A4A4A4A4A4A4A4A39EA1A3A4A3A19E9EA1A3A19E9E9E9C9C9C9C9A9994949494949292
+928F8C89898989898989898C8C8C8C8C89877F7B746657FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF74898F928E9EACB9C6CCD1D4D9D9D9D9D4D1CFC6BEB6A99E94897F8992999EA6AEB6
+B9C1C8CFD1D1D1CFCFC9C6C6C1BEB7B6B1B1AEA9A6A49E9C9A9494928C898787817C76746C6A6A6A
+6A6A6766616461615F5F5C5C57554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76898E949C9EA4A4A6A9A9A9A9A6A6A6A6A6
+A4A4A3A4A4A4A4A6A4A4A4A4A3A1A1A3A4A4A39E9EA3A3A19E9E9E9E9C9C9C9A9A94949494949492
+92928E8C8C89898989898C8E8F8F8F8F8E89857F79746657FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF748E8F928199A6B4C1CCD1D7D9DEDFD9D9D3CFCCC1B9B1A69C9287878E949CA1A6B1B9
+BEC6CCD3D3D3D3D1CFCCC8C6C6BEB9B9B6B1AEABA6A49E9C9A9994928E898787817C76726C6A6666
+66676766616161615F5F5C5C57554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF748792949A9E9EA4A4A6A6A6A6A6A6A6A6A6A6
+A4A4A3A4A4A4A4A6A6A4A4A4A4A3A3A3A4A4A3A1A1A3A4A39E9E9E9E9C9C9C9A9A96949494949492
+92928F8E8C8C8989898C8E8F8F92928F8F8C89857F79746A5CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF6C7F8E929294929EACBCC9D4D9DCE1DFDCD9D4CFCCC6BEB6AEA3998E7F8992949CA4ABB4BB
+C1C8CFD4D4D4D4D3CFCFCCC8C6C1BEB9B9B6B1ABA6A49E9C9A9994928E8987847F7C76726A676161
+61646661616161615F5F5C5C5957514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79878E92949A9C9EA4A4A6A6A6A6A6A6A6A6A6A6
+A4A4A4A4A4A4A4A6A6A6A4A4A4A3A3A4A4A4A4A3A1A3A4A39E9E9E9E9E9C9C9A9A99949494949492
+9292928F8E8E8C8C8C8E8E8F929292928F8E8989877F7C746C61FFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF6A76898E9294948794A4B4C4D1D9DFE1E1DFDCD9D3CFC9C4B9B1A69C9489848C929A9EA6AEB7C0
+C6CCD3D7D9D9D9D4D3CFCCCCC6C6C1BEB9B3AEA9A6A49E9C9A9994928E8987817F76726C6A61615F
+5F616161615F61615F5F5C595957544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F85898E92949A9C9EA3A4A6A6A6A6A6A6A6A6A6A6
+A6A4A4A4A4A4A6A6A6A6A4A4A4A4A3A4A4A4A4A3A3A4A3A19E9E9E9E9E9C9C9C9A99949494949492
+9292928F8F8E8E8E8C8E8F9292929292928F8C898987847F76726C66FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A
+7484898E929494968F9CABBCC9D9DFDFE1E1DFD9D9D1CCC6BEB7AEA49A8F7C878F949CA4A9B1B9C1
+C8CFD4D9D9D9D9D4D4D1CFCCC9C6C1BEB9B3AEA9A6A39E9C9A9494928987847F7C746C6A66615F5C
+5D5F6161615F5F5F5F5D5C595957544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8187898F92949A9C9C9EA4A6A6A6A6A6A6A6A6A6A6
+A6A4A4A4A4A4A6A6A6A6A6A4A4A4A4A4A4A4A4A4A3A4A3A19E9E9E9E9E9C9C9C9A99949494949492
+929292928F8F8F8F8E8F92929292929292928F8F8E898987857F7C76726C675FFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF747F
+898E8F92949A996194A4B1C1D1DFDFDFE1DFDCD9D7CFC8C6BEB1A99E94897F8992999EA6ACB6BEC6
+CCD3D9D9D9D9D9D9D4D3CFCFC9C6C1BBB9B1AEA9A6A19C9C9994928F8987817C76726C67615F5C59
+57595D5F5F5F5F5F5F5D5C575757554F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F85898C929294999A9C9EA3A4A6A6A6A6A4A6A6A6A6
+A6A4A4A4A4A4A6A6A6A6A6A4A4A4A4A4A4A4A4A4A3A3A19E9E9E9E9E9C9C9C9C9A99949494949492
+92929292928F8F8F8F8F92929292949292929292928F8C898989878787817F76726C675FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57796E7276FF
+546E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C878F
+929294999A9A9A899CA9B9C6D4DFDFE1E1DFDCD9D4CFC6C1B9AEA69C9279858C949CA1A6AEB9C1C8
+CFD4D9DCDCDEDCD9D7D4D1CCC8C6C1BBB7B1AEA6A49E9C9A9694928E89877F76746C6A66615C5757
+5757575D5F5F5F5D5F5D5C595757554F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C818789898F9294949A9C9C9EA4A4A4A4A4A4A6A6A6A6
+A6A4A4A4A4A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9C9C9C9C9A99949494949492
+9292929292928F9292929292929494949494949494929292928F8C8C89898987878584817F7F7C54
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A6C76848E8F897F7C8489
+897C6C61FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C878F92
+94949A9A9C9A9A929EB1BECCD7DFDFE1E1DFD9D9D3CCC6BEB6AB9E998E7F878F949CA4A9B4BCC6CC
+D3D9DCDFDFDFDED9D9D4CFCCC8C6C0BBB6B1ABA6A49E9C9A94928F8987817C746C6A6A675F5D5755
+545557575D5F5F5C5D5D5C595757574F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F818587898F929494999A9C9EA1A4A4A4A4A4A4A6A6A6
+A6A4A4A4A4A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9C9C9A99949494949292
+9292929292928F9292929294949494949494949494949694949492929292928F8E89898989878785
+7F797471FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A7F817F879294929492878E92
+8E897C6C6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74898F9294
+999A9C9C9C9A8794A6B6C1CCD9DFDFE1E1DFD9D9D1C9C1B9AEA69C92878189929A9EA6AEB7BEC8CF
+D4D9DFDFE1E1DFD9D4D3CFCCC6C1C0B9B6B1ABA6A49E9C9994928E89857C726C6C7172726C675F55
+54515557595D5D5C5C5C5C59575757544F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F7C7F7F8587898E92929494999A9C9EA1A3A4A4A4A4A6A6A6
+A6A4A4A4A4A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A3A19E9E9E9E9E9C9C9C9C9C9A9A969494949292
+9292929292929292929292949494949499999A9A9A9A9A9A9A9A9A9A9A9994949492929292928F8E
+8987817F7C74716C5555FFFFFFFFFFFFFFFFFFFFFFFF6C74767F878F929494929C9A94999A949A94
+928C8776746CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A898F929499
+9C9C9C9C9C9C8C9CAEB9C4D1DCDFDFE1E1DCD9D4CFC6BEB6ABA3998F7C878E949CA4A9B1BCC4CCD3
+D9DFE1E1E1E1DCD9D4D1CFC9C6C1BEB9B3AEA9A6A19C9A94928F89877F726C727476767676746C61
+55514F5557595C5C5759595C575757544F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF6C76797C7F8487898C8F929294999A9C9C9E9EA1A4A4A4A4A6A6
+A6A4A4A4A4A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A3A19E9E9E9E9C9C9C9C9C9C9A9A999494929292
+929292929292929292929494969999999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A99
+9494928E8987817C7C7976747474747476747679797C7F848589929494999C9E9E9C9A9A9C9C9C9A
+94928C877C76715FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A878F92949A9C
+9C9C9C9C9C8192A4B1BBC6D3DFDFE1E1DFDCD9D4CCC4B9B1A69C94897F8792999EA6AEB6BEC6CFD4
+D9E1E1E1DFDFD9D9D3D1CFC8C6C1BBB9B1AEA6A49E9C9A94928E87817474797C7F7F7F7F7F7C766C
+61554F545557575957575959575757554F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF7474797C7F848787898E8F929494999A9C9E9E9EA1A4A4A4A6A6
+A6A6A4A4A4A6A6A6A6A4A6A6A6A4A4A4A4A4A4A3A19E9E9E9E9E9C9C9C9C9C9C9A9A999494929292
+929292949492929292949494999A9A9A9A9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9A9A949492928E89898787818181818181848487898E929294949C9C9A9C9EA4A4A19C9C9E9E9E9C
+9A949289877C746A57FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A858F92949A9C9C
+9C9C9C9C9C8799A6B1BECCD4E1E1E1E1DFDCD9D1C6BEB6ACA49A8F768189929CA3A9AEB9C1CCD3D9
+DFE1DFDFDFDCD9D4D3CFCCC8C6C1BBB9B1A9A6A49E9C94928F898479797F84898989898787817F76
+6C61544F5555575757575757595757554F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF6E6C747B7F8184878789898E929294949A9A9C9C9E9EA3A4A4A4A6
+A6A6A4A4A4A6A6A6A4A4A6A6A6A6A4A4A4A4A4A3A19E9E9E9E9C9C9C9C9C9C9A9A9A999494929292
+9292929494929292949494999A9A9A9A9C9C9C9E9E9E9E9E9E9EA1A3A3A4A4A4A3A3A3A3A3A39E9E
+9C9C9C9A9996949292928F8E8C8E8E8E8E8E8E929294949A9CA1A39E9C9EA4A6A4A4A39EA1A39E9E
+9C99948F898179716151FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818E92949A9C9C9E
+9E9E9E9C7C8E9CABB7C1CCD9E1E1E1E1DFD9D3CCC4B9B1A69E94897C878F949CA4ABB1BCC6CFD4D9
+DCDFDFDCDCD9D9D4D1CFCCC6C4C0B9B6AEA9A4A19C9A94928E876A7F87898F92929292928C89877F
+746A5F4F4F55555757575757575757554F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF6A6A6C72747B7F7F8181858787898C8F929494999A9C9C9C9EA1A4A4A4A4
+A4A4A4A4A4A6A6A6A4A4A4A6A6A6A4A4A4A4A4A19E9E9E9E9E9C9C9C9C9C9C9A9A9A999494949292
+92929494949492929494969A9A9C9C9C9C9C9E9EA1A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3
+A3A39E9E9C9C9C9A9A999494949494949499999A9C9A9A9C9EA4A4A4A3A3A6A6A4A6A6A3A4A4A19E
+9E9C99928E877F746A59FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8C92949A9C9C9E9E
+9E9E9C9C8494A1AEB9C6CFD9E1E1E1E1DCD4CFC6BEB7AEA49A92877F89929A9EA6AEB6BEC6D1D4D9
+DCDCDCD9D9D9D9D3CFCFCCC6C1BBB9B1AEA6A49E9C96928F89717F89929499999A9A999494928E87
+7C7161574F4F55555557575757575555544F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF6A616AFF5F797974767474797C7F7F7F818184878789898E92929494999A9C9C9E9EA3A4A4A4
+A4A4A4A4A4A4A6A6A4A4A4A4A6A6A4A4A4A4A4A19E9E9E9E9E9C9C9C9C9C9A9A9A9A999494949292
+92949494949494949494999A9C9C9C9C9C9E9EA1A3A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A4A4A4A4A3A19E9E9C9C9C9C9C9C9A9C9EA1A19E9E9EA4A6A6A6A6A6A6A6A6A6A6A6A6A4A4A1
+9E9E9C949289847C716455FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67848C92949A9C9C9E9E9E
+9E9C9C9A899AA4B1BEC6D3DFE1E1E1DFD9D1CCC4BCB1A69E948C79848C949CA3A9B1B9C1CCCFD3D9
+D9D9D9D9D9D9D4D3CFCCC8C6C0B9B6B1A9A6A39E9A94928E72818F949A9E9E9E9E9E9E9C9C9A948E
+81746A5D514F51555555555757575755544F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74
+87847F74747F87877F7C7C7F7F8184817F81818184878787898C8F929294949A9A9C9C9E9EA4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A6A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9C9C9A9A9A99999494949292
+929494949494949494999A9A9C9C9C9C9C9E9EA3A4A4A4A4A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9
+A9A9ABA9A9A6A6A6A6A4A4A4A4A4A49E9C9EA3A4A6A6A4A4A9A6A6A6A9A9A9A6A6A6A6A6A6A6A4A4
+A19E9C9A948F877F746A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72898C92949A9C9C9E9EA3A1
+9E9C9A7C929CA6B6C1CCD4DFE1E1DFD9D3CCC6BEB7AEA49C92897C878F949CA4AEB3BEC4CCCFD3D4
+D9D9D9D9D4D4D4D1CFCCC6C1BEB9B1AEA6A49E9C99928F8984929A9CA4A6A6A6A6A4A4A4A49E9A94
+897C7161554F4F515555555557575755544F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A617489
+898789898189898787817F8487878784818181818485878789898E8F929494999A9C9C9E9EA3A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9C9A9A9A9999969494949492
+949494949494949494999A9C9C9C9E9E9E9EA1A4A4A4A6A6A6A6A6A9A9A9ABABABABABABACAEAEAE
+AEAEAEAEAEAEA9A9A9A6A6A6A9A9A6A49EA3A4A6A6A9A9A6ABA9A6A9A9ABA9A9A6A6A6A6A6A6A4A4
+A39E9E9C999289857F746A59FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C7C898E92949A9C9C9E9EA3A39E
+9C9C9A87949CABB9C6CFD9E1DFDFDCD4CFC6C1B9B1A99E998F847F89929A9EA6AEB9BEC6CCCFD1D4
+D9D9D4D4D4D3D3CFCCC6C6BEB9B6B1ABA6A49E9A94928C84929C9EA4A9ABABABABA9A6A6A6A49E9A
+9487766A5C544F4F5155555555575755544F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B8789928E94
+9289898E928F8C898989858789898787848184848485878787898C8F92929494999A9C9C9E9EA3A3
+A3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9A9A9A9A9999949494949492
+9494949494969999999A9A9C9C9E9E9E9E9EA3A4A6A6A6A6A6A6A9A9A9ABAEAEAEAEAEAEAEAEB1B4
+B4B4B6B6B4B4AEAEAEABA6A9ABAEABA9A6A6A6A6A6A9ABAEAEABA9A9ABABABA9A9A6A6A9A6A6A6A4
+A4A39E9E9C948F89817C726657FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72747C87898F92949A9C9C9E9EA3A39E9E
+9C9A998999A1AEBCC6D1D9DFDCD9D9D1CCC6BEB6AEA69C948979848C949CA1A9B1B9BEC6CCCFD1D4
+D4D4D4D4D3D1CFCFC8C6C1BEB7B1AEA9A49E9C99948F85929CA3A6ABAEAEAEAEAEAEAEABA9A6A49C
+998E7F7261554F4F4F51555555555755554F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87898F949A9A
+94928F9292928F8C898989898989898785848484858487878789898C8F929294949A9C9C9C9E9EA1
+A1A1A1A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9A9A9A999996949494949494
+949494949499999A9A9A9C9C9C9E9EA1A1A1A4A4A6A6A6A6A9A9A9A9ABAEAEAEAEAEB1B1B1B1B6B7
+B7B7B9BCBCB7B6B1B1AEABABAEAEAEAEA9A6A9A9A9ABAEAEAEAEA9A9ABAEABABA9A9A9A9A9A6A6A6
+A4A4A39E9C9A948E87817C716155FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C797F87898F8F9294999A9C9C9E9EA3A3A19E9C
+9C9A7B929AA4B1BECCD3D9DCD9D9D4CFC6C1B9B1A9A39A92857F878F949CA4ABB1B9BEC6CCCFCFD4
+D4D3D3D1CFCFCCCCC6C1BEB9B6B1ABA6A49E9C94928C8F9AA4A6AEB1B6B6B6B6B6B1B1AEAEA9A69E
+9C9487766759544F4F4F51555555555555514F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848C8E92999A9A
+999492949292928F8E8E8E8C898989878787858584848487878789898E92929494999A9C9C9E9E9E
+9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9C9C9A9A9A999994949494949494
+949494949699999A9A9A9C9C9C9EA3A3A4A4A4A6A6A6A9A9A9A9ABABAEAEAEAEAEAEB1B6B6B7B9BC
+BCBEBEC1BEBEB9B6B3B1AEAEAEAEAEAEAEABAEABA9AEAEB1AEAEABABAEAEAEABABA9A9A9A9A9A6A6
+A6A4A4A19E9C999289877F766C5F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F878787899292929292949A9A9C9C9C9EA3A3A19E9E9C
+9A9485949CA6B6C1C9D1D9D9D9D4D3CCC1BBB3AEA69C94897F7F89929A9EA6AEB6BBC1C6CCCFCFD3
+D3D1CFCFCCCCC8C6C4C0B9B7B1AEA9A49E9C9A948F8E9AA4ABAEB4B9B9B9B9B9B9B7B3B3B1AEA9A4
+9E998E7F715F554F4F4F4F515555555554514F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67929292949A9A99
+99949494928F92928F8F8E89898989898787878484848485878787898C8F929294949A9A9C9C9E9E
+9E9E9E9EA1A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9C9C9A9A99999694949494949494
+9494949499999A9A9A9C9C9C9C9EA3A4A4A4A4A6A6A6A9A9A9ABAEAEAEAEAEB1B1B1B6B9B9B9BEC1
+C1C4C6C6C6C1BEB9B9B3B1B1B1B1AEAEAEAEAEAEABAEB1B1B1AEAEAEAEAEAEABABA9A9ABABA9A9A6
+A6A6A4A49E9C9A949289857F766A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7681898F929494949499999A9C9C9C9C9C9EA1A3A19E9E9C9C
+96928E949EABB9C4C8CFD9D7D4D3CFC6BEB9B1A9A39A928779848C949CA1A6AEB9BBC1C6CCCFCFD1
+CFCFCCCCC8C6C6C6C1BEB9B6AEABA6A49E9C94928794A3AEB1B7B9BEBEBEC1BEBEB9B9B7B3B1AEA6
+A39C9287766757514F4F4F4F5455555554544F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF879494999A9A9A99
+94949494928F8F9292928E8989898989898787848481818487878789898E8F929494999A9C9C9C9E
+9E9E9E9E9EA1A3A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9C9C9A9A99999494949494949494
+94949494999A9A9A9A9C9C9C9C9EA3A4A4A4A6A6A6A6A9A9ABAEAEAEAEAEB1B1B1B3B7B9BBBEC1C6
+C6C6C8C8C6C4C1BBBBB9B3B1B1B1AEAEAEB1B1AEAEAEB1B1B1B1AEAEAEAEAEAEABABABABABABA9A9
+A6A6A6A4A19E9C99948F89857F766A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF79848E9299999A9A9A9A9C9C9C9C9C9C9C9C9E9EA19E9E9E9C9A
+9476929A9EAEB9C1C8CFD4D4D3CFCCC1B9B3ABA49C948E7F7F8792999CA4A9B1B9BEC1C8CCCCCFCF
+CCCCC8C6C6C4C1C1BEB9B6B1AEA9A49E9C9A947B949EABB6B9BEC1C6C6C6C6C4C1C0BBB9B9B3B1AB
+A69E94897F6E5F554F4F4F4F4F54555554544F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF599494949999999999
+94949492928F8F8F928F8E898989898989878784818181848587878789898E92929494999A9C9C9C
+9C9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9A99949494949494949494
+94949494999A9A9A9A9C9C9C9E9EA1A4A4A6A6A6A6A9A9A9ABAEAEAEAEB1B1B1B1B7B9BEC0C1C6C6
+C9CCCCCCC6C6C1BBBBB9B9B3B3B1AEB1B1B1B1B1AEB1B1B1B1B1AEAEAEAEAEAEAEABAEAEAEAEABA9
+A9A6A6A6A49E9E9A94928F89877F766A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF7F878F999A9A9A9C9C9C9C9E9E9E9E9C9C9C9E9E9E9E9E9E9C9A99
+9281929CA4B1B9C1C6CFD4D1CFCFC6BEB7AEA6A19A9287767F89929A9EA4ABB1B9BEC6C6C8C8CCC8
+C6C6C6C4C1C1BEBEBBB7B1AEA9A6A49E9C9992899CA6B3B9BEC1C6C6C6C6C6C6C4C1C0BBB9B7B3AE
+A6A49A8F857666574F4F4F4F4F5154555451514F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D8E9294949494949494
+94949292928F8E8F8F8F8E898989898987878784818181818487878789898C8F929294999A9A9C9C
+9C9C9E9E9E9EA1A3A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9A99949494949494949494
+94949494999A9A9A9A9A9C9C9E9EA1A4A4A6A6A6A6A9A9ABABAEAEAEB1B1B1B1B6B9BBBEC1C6C6C8
+CCCCCCCCC6C6C1BEBBB9B9B9B6B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAB
+A9A9A6A6A4A49E9C9A94928F89847C746C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF727F8C949A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9A94
+9289949CA6B1BEC1C6CFD1CFCFCCC1B9B1ABA49C948F8179848C949C9EA6AEB6BBC1C4C6C6C6C6C6
+C6C1C1C1BEBEBBB9B9B3AEABA6A49E9C9A947C9AA6AEB9BEC1C6C9C9C9CCCCC8C6C6C1BEBBB9B6B1
+ABA69C94877C6C5F554F4F4F4F4F5154544F514F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87929292929492929294
+949492928F8F8E8E8E8E8C898989898787878784817F7F81848587878789898E929294949A9A9C9C
+9C9C9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9A99949494949494949494
+94949494969A9A9A9A9A9C9C9E9E9EA4A4A4A6A6A9A9A9ABAEAEAEAEB1B1B1B1B6B9BBC0C4C6C8CC
+CFCFCFCFC8C6C1BEBBB9B9B9B7B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAE
+ABA9A9A6A6A4A39E9C9A94928F89847F76726657FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF6C748192999A9C9C9C9C9E9EA4A39E9E9E9E9E9E9E9E9E9E9E9E9E9C9A9992
+748F969EA9B1BEC1C6CCCFCCCCC6BEB6AEA69E9A92897C7F8792999CA3A6AEB9BBBEC1C1C1C1C1C1
+C1BEBEBEBBB9B9B7B3B1AEA6A6A39E9C99748FA4ACB7C1C4C6CCCFCCCFCFCFCCC8C6C4C0BEB9B7B1
+AEA9A394897F7461574F4F4F4F4F4F51544F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C898F9292929292929292
+929292928F8E8C8C8C8C898989898787878787847F7F7F7F818485878787898C8F929294999A9A9C
+9C9C9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9C9C9C9C9A9A969494949494949494
+9494949494999A9A9A9A9C9C9C9E9EA3A4A4A6A6A9A9A9ABAEAEAEAEB1B1B1B3B7B9BEC1C6C6CCCC
+CFCFD1CFC8C6C1BEBBB9B9B9B9B6B1B1B1B1B1B1B1B3B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAE
+AEABA9A9A6A6A49E9E9C9C96929289877F79726A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF6C6C747C818E94999A9C9E9E9E9EA3A4A4A3A19EA1A3A39E9E9E9E9E9E9C9C9C9A948F
+81929AA1A9B4BEC1C6CCCCC9C6C1B9B1A9A49C948F87747F89949A9EA4A9B1B7B9BEC1BEBEBEBEBE
+BEBBB9B9B9B7B6B3B1AEA9A6A49E9C9A94879CA9B4BEC6C6CCCFCFCFCFCFCFCFCCC9C6C1BEBBB7B1
+AEA9A69A8F84796A5F554F4F4F4F4F4F51514F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76818C8C8C8C8F8F8E8E8E8F
+9292928F8E8C89898989898989878787878787817F7F7F7F81818487878789898E92929499999A9A
+9C9C9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9C9A9A949494949294949494
+949494949499999A9A9A9C9C9C9E9EA3A4A4A6A6A6A9ABABAEAEAEB1B1B1B1B3B9B9BEC1C6C8CCCF
+D1D3D3CFC9C6C1BEB9B9B9B9B9B6B3B1B1B1B1B1B1B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAE
+AEAEABA9A6A6A4A4A39E9E9C9994928C87847F79746A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+7474767C7C7F84878E92949A9A9C9E9E9EA3A4A4A4A4A3A1A1A3A4A39E9E9E9E9E9C9C9C9A969289
+89949CA4A9B6BEC1C6CCC8C6C6BEB6AEA69E9A92897F79878F949C9EA6AEB1B6B9B9BEBBB9B9B9B9
+B9B9B9B6B6B3B1B1AEABA6A49E9C9C9A8199A6B1BCC4CCCCCFD1D3D3D3D3D3D1CFCCC6C1C1BEB9B1
+AEABA69C92877C7161574F4F4F4F4F4F4F544F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8787878789898C89898E8E
+8F928F8E8C8C89898989898987878787878785817F7F7F7F7F818485878787898C8F929494999A9A
+9C9C9E9E9E9E9E9EA4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9C9C9C9C9C9A9A949494929292949494
+949494949494999A9A9A9C9C9C9E9EA1A4A4A6A6A6A9A9ABAEAEAEB1B1B1B1B6B9BBC0C1C6CCCFCF
+D3D4D4CFCCC6C1BEB9B9B9B9B9B6B3B1B1B1B1B1B3B3B3B3B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAE
+AEAEAEA9A9A6A6A4A4A4A19E9C9C99928E898987857C76726A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767F
+7F8187898F92929292949A9C9C9E9EA3A4A4A4A4A4A4A4A3A3A4A3A19E9E9E9E9C9C9C9A99948E76
+8C949CA4ABB6BEC1C6C8C6C4C1B9B1A9A39C948F87797F8992999C9EA6ABB1B3B6B9B9B9B7B7B7B7
+B7B6B3B1B1B1AEAEA9A6A49E9E9C9A9692A1AEB9C1CCCFD1D1D4D4D4D4D4D4D3D1CFC9C6C1BEB9B1
+AEABA69E94897F766A5F554F4F4F4F4F4F514F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767F8181818787878989898C8E
+8E8E8E8C8C8989898989898787878787878785817F7F7F7F7F7F818487878789898E92929496999A
+9C9C9C9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9C9C9C9C9C9A9A949492929292949494
+94929494949496999A9A9A9C9C9E9EA1A4A4A6A6A6A9A9ABAEAEAEB1B1B1B3B7B9BBC1C6C8CCCFD1
+D4D4D4CFCCC6C1BEB9B9B9B9B9B6B3B3B1B1B1B1B3B3B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAE
+AEAEAEABA9A6A6A6A4A4A4A4A19E9C9A94928F8E898987878181817F7C746C576657575F5F5F5F61
+6167676A6C7474767C7F816C4F54666C616A717474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF798489
+8E92929294949494969A9C9E9EA1A4A4A4A4A4A4A4A4A4A3A4A39E9E9E9E9E9C9C9C9C9A94928981
+8F999EA6AEB6BEC1C6C6C4C1BEB4ACA49E9A948C8174818C929A9CA4A6ABB1B1B3B9B7B6B3B3B3B3
+B3B1B1B1AEAEABA9A6A4A39E9C9C99899CABB7BFC8D3D3D4D4D9D9D9D9D9D9D4D4D1CCC6C6BEB9B3
+B1ABA69E9A8E81796C61574F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797C7C7F818787898989898C8E
+8E8E8C8C898989898989878787878787878785817F7F7F7F7F7F818184878789898C8F9294949999
+9A9C9C9E9E9E9E9EA3A4A4A3A3A4A4A4A4A39E9E9E9E9E9C9C9C9C9C9A9A99949492929292929494
+9292929494949496999A9A9C9C9E9E9EA4A4A4A6A6A9A9ABAEAEAEB1B1B1B3B9B9BEC1C6C9CFD1D3
+D4D9D4D1CCC6C4C0B9B9B9B9B9B7B6B3B3B1B1B1B3B3B3B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEAEAE
+AEAEAEACA9A9A6A6A6A6A4A4A4A4A49E9C9A94949292928E8989898989898989878989898E898987
+8787817F84878181878987898E928F877C7C7F817C7F814F4F6154FFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A79898E92
+949494949699999A9C9EA1A3A4A4A4A4A4A4A4A6A4A4A4A3A19E9E9E9E9E9C9C9C9C9A94928C8487
+929A9EA6AEB7BEC1C4C1BEBEB7AEA69E9C9992897C7C878F949A9EA4A6ABB1B1B3B6B3B1B1B1B1B1
+B1AEAEAEABA9A9A6A4A19E9C9C9A8194A4B7BEC6D1D7D9D9D9DCDCDCD9D9D9D9D9D3CFC8C6C1B9B6
+B1AEA6A39A92877C746A5F544F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7674767C7F81878989898989898E
+8E8E8C89898989898987878787878787878584817F7F7F7F7F7F7F818487878789898F9294949499
+9A9C9C9E9E9E9E9EA3A4A4A3A1A3A4A4A49E9E9E9E9E9E9C9C9C9C9C9A9A99949492929292929292
+929292929494949496999A9C9C9C9E9EA3A4A4A6A6A9A9ABAEAEAEB1B1B1B3B9BBBEC1C6CCCFD3D4
+D9D9D4D1CCC8C6C0BBB9B9B9B9B7B6B3B3B3B1B1B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEAE
+AEAEAEAEABA9A9A6A6A6A6A6A4A4A4A4A19E9C9C9A9A9A94949292929292928F8F8F929292949494
+999A9C999994928E9292929294949499948E928C878789898979665F57FFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727F89929494
+9499999A9A9C9C9C9EA4A4A4A4A4A4A4A4A6A6A6A6A4A4A19E9E9E9E9C9C9C9C9C9A99928F877989
+949C9EA6AEB9BBBEC1BEBEB9B4ABA49E9C948F85747F8992949C9EA4A6ABAEB1B1B1B1B1AEAEAEAE
+AEAEABA9A9A6A6A4A19E9E9C9A9992A1AEBEC6CFD4D9D9DCDFDFDFDFDFDEDCD9D9D4CFCCC6C1BBB6
+B1AEA6A49C92897F746C61574F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74727981818487898C8E8E8E8E8C8C
+8E8E8E89898989898787878787878785858481817F7F7F7F7F7F7F818184878789898E9292949496
+999A9C9E9E9E9E9EA1A4A3A19EA3A4A4A39E9E9E9E9E9C9C9C9C9C9A9A9994949492929292929292
+929292929294949494999A9C9C9C9E9EA3A4A4A6A6A6A9ABAEAEAEB1B1B1B1B7B9BEC1C6CCCFD1D3
+D4D7D4CFCCC6C6C0BBB9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEAEAEAEAE
+AEAEAEAEABA9A9A9A9A6A6A6A6A6A6A4A4A19E9E9E9E9E9E9C9C9A9A9A9996949494999A99999A9C
+9C9C9C9E9E9E9E9C9C9A99999A9A9A9A9C9E9C94928E92928C897F726C66FFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76878F9494969A
+9A9A9C9C9C9E9E9EA3A4A4A4A4A4A4A6A6A6A6A6A6A4A49E9E9E9E9C9C9C9C9C9A999492897F818E
+949CA3A9B1B9B9BEBEBEB9B7AEA69E9C9A92897F76858C92999CA3A4A6ABAEAEB1B1AEAEAEAEABAB
+A9A9A6A6A6A6A4A19E9C9C9C99879CABB9C4CCD1D9D9DCDCDFDFDFDFDFDFDFDCD9D9D3CFC8C1BEB7
+B1AEA6A49C9489817671665D544F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727F87878989898F8F8F9292928F8F
+8E8E8E898989898989878787878785858481817F7F7F7F7F7F7F7F7F8184878789898C8F92949494
+999A9C9C9E9E9E9EA1A4A3A19E9EA3A49E9E9C9C9C9C9C9C9C9C9C9A99949494929292928F929292
+929292929292949494999A9C9C9C9E9EA1A4A4A6A6A6A9A9ABAEAEB1B1B1B1B6B9BBC0C6C6CCCFD1
+D3D4D3CFC9C6C1C0BBB9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B1B3B3B1B1B1B1B1B1B1AEAEAEAEAE
+AEAEAEAEABABABA9A9A9A9A6A6A6A6A6A4A4A3A3A4A4A4A4A4A4A3A19E9E9C9C9C9C9C9C9C9C9C9E
+9E9E9EA4A1A3A4A4A4A19E9C9E9E9C9C9E9E9E9E9A949994928F8E857F7267FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F7F898F94949A9A9C
+9C9C9E9E9E9E9EA3A4A4A4A4A6A6A6A6A6A6A6A6A4A4A39E9E9E9C9C9C9C9C9A9994928C84748792
+999CA4A9B1B7B9B9BCB9B7B1A9A49E9C968F87797C8992949A9EA4A6A6ABAEAEAEAEAEAEABA9A9A9
+A6A6A6A6A4A4A19E9C9C9A9A7C9AA6B4C1C6CCD3D9D9DCDCDFDFDFDFDFDFDFDFDCD9D4D1CCC6BEB9
+B1AEA9A49C94898479726A5F574F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C7276848E89898E8F929292929292929292
+8F8E8E8C89898989898787878785848481817F7F7F7F7C7F7F7F7F7F7F8185878989898E92929494
+949A9C9C9E9E9E9E9EA3A19E9E9EA1A19E9E9C9C9C9C9C9C9C9C9A9A99949492929292928F8F9292
+929292929292929494999A9A9C9C9C9EA1A4A4A6A6A6A9A9ABAEAEAEB1B1B1B3B9B9BEC1C6CCCCCF
+CFD1CFCCC8C6C1BEB9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B1B1B3B1B1B1B1B1B1B1AEAEAEAEAE
+AEAEAEAEAEABABABABA9A9A9A9A6A6A6A6A4A4A4A4A4A6A4A4A4A4A4A4A4A4A4A4A4A4A4A39EA3A3
+A3A4A4A4A4A4A4A4A4A4A6A4A4A39E9EA3A39E9E9E9C9C999492928F897C7267FFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF6C76767471716A675FFFFFFFFFFFFFFFFFFFFFFFFFFF6C7F878C8F94999A9C9C9E
+9E9E9E9EA1A1A3A4A4A6A6A6A6A6A6A6A6A6A6A6A4A4A19E9E9C9C9C9C9A9A9694928E877F7C8992
+9A9EA4ABB1B6B7B9B9B6B1AEA6A19C9A94898174818C92949C9EA4A6A9A9ABAEAEAEABA9A9A6A6A6
+A6A4A4A4A4A19E9C9C9A99948FA1ACBCC6C6CFD4D9D9DCDEDFE1E1E1E1E1DFDFDFDCD9D3CFC6C1BC
+B3AEA9A49C948C877C726C6159514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7F878E9492928E9292949494929494949492
+928F8E8C8989898989878787858484817F7F7F7F7F7C7C7F7F7F7F7F7F8184878989898E8F929494
+94999A9C9C9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9A9A99949494929292928F8F8F8F92
+929292929292929494969A9A9C9C9C9E9EA4A4A4A6A6A9A9ABAEAEAEB1B1B1B1B7B9BBC1C6C6CCCC
+CFCFCFCCC6C6C1BEB9B9B9B9B9B9B6B3B3B3B3B1B3B3B3B3B3B1B1B1B3B1B1B1B1B1B1AEAEAEAEAE
+AEAEAEAEAEAEAEABABABABABA9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A19E9E9C9C999494928E877C726AFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF6E7F8487858587877F7C7C76726C6766615F616A727C7F84898E9294999A9C9C9E9E
+9EA1A3A3A4A4A4A4A6A6A6A6A6A6A6A6A6A6A4A4A4A4A19E9C9C9C9C9A9A9694928F898179858C94
+9A9EA6AEB1B3B3B7B6B1AEABA49E9C9492877C7C878F94999CA1A4A6A6A9A9ABABA9A9A6A6A6A6A4
+A4A4A4A39E9E9C9A9A9694879CA9B4BFCCC9CFD4D9D9DCDFDFE1E1E1E1E1E1E1E1DFD9D4D1CCC6BE
+B6B1A9A49E948E877F746C675F554F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8987878E94999494929494969694949494949494
+92928F8E8989898989878787848484817F7F7F7F7C7C7C7C7C7F7F7F7F7F8187878989898F929494
+94969A9A9C9C9E9E9E9E9E9E9E9E9E9E9E9C9C9A9C9C9C9C9C9A99949494929292928F8F8E8E8F8F
+92929292929292949494999A9C9C9C9C9EA3A4A4A6A6A9A9A9AEAEAEB1B1B1B1B6B9B9BEC1C6C6C9
+CCCCCCC8C6C1C1BEB9B9B9B9B9B9B6B3B3B3B3B1B3B3B3B3B1B1B1B1B1B3B1B1B1B1B1AEAEAEAEAE
+AEAEAEAEAEAEAEAEABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A39E9E9C9C9994929289877C746AFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF7284899292929292928F8E8C898987848181818184878789898F92949A9C9C9C9E9EA3
+A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A39E9C9C9C9C9A9A999492928C877F76878F96
+9C9EA6AEB1B1B1B6B1AEAEA6A39C9A948C84767F8C92949A9EA4A4A6A6A6A9A9A9A6A6A6A6A6A4A4
+A4A39E9E9E9C9C9A94947F94A6AEB9C6CFCFD1D9D9DCDCDFDFE1E1E1E1E4E1E1E1E1DCD9D4CFC6C1
+B9B1ABA69E948E877F746E6A5F57514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494928E949C9A9999949499999999999999969494
+9492928F8C898989898987878484817F7F7F7C7C7C7C7C7C7C7C7F7F7F7F8184878989898E929294
+9494999A9A9C9C9E9E9E9E9E9E9E9C9C9C9C9C9A9A9C9C9C9A9A999494929292928F8F8F8E8E8E8F
+92929292929292949494999A9A9C9C9C9E9EA4A4A6A6A6A9A9ABAEAEAEB1B1B1B3B7B9BBC1C1C6C6
+C8C9CCC6C4C1C0BBB9B9B9B9B9B9B6B3B3B3B3B1B1B3B3B3B1B1B1B1B1B1B3B1B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEABABABABABABABABABA9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A9A6A6A6A6A6A9
+A9A9ABA9A9A9A9A9A6A6A9A6A6A6A6A6A6A6A6A4A4A39E9E9C9A9994928F89877C746A4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFF74879294949494949494949292928F8C8989898989898C8F929494999A9C9C9C9E9EA3A4
+A4A4A4A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A49E9E9C9C9C9A9A999494928E89847C7F899299
+9CA3A6ABAEB1B1B1AEAEA9A49E9A9492877F76878F92949C9EA3A4A4A6A6A6A6A6A6A6A6A6A4A4A3
+9E9E9E9E9C9C9A9694928EA1AEB7C1CCCFCFD3D9D9DCDCDFDFE1E1E1E4E6E4E4E4E4DFD9D4D1CCC4
+B9B1AEA6A3998F877F76716A615D554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87949A9A9C9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A999694
+949492928F8C8989898987878581817F7F7C7C7C7C7C7C7C7C7C7C7C7C7F7F84878789898C8F9292
+949494999A9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A999494929292928F8F8E8E8E8E8E
+8F92929292929292949499999A9A9C9C9E9EA1A4A6A6A6A9A9A9ABAEAEAEAEB1B1B6B9B9BEC1C1C6
+C6C6C6C6C1C1BEBBB9B7B7B9B9B9B7B6B3B3B1B1B1B1B3B3B1B1B1B1B1B1B1B3B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABABA9A9A9A9A9A9A9A9A6A9A9A9A9A9A9A6A9
+A9ABABABABABA9A9A9A9A9A9A9A6A6A6A6A6A6A6A4A49E9E9C9C9A9994928C87847C746A4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF5F7F8E9494999A9A9A9A9A9A99949494949292929292929494949499999A9C9C9E9E9EA3A4A4
+A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A39E9E9C9C9C9A9A999694928F8987817C878C949A
+9EA3A6A9AEAEAEAEABA9A6A19C99928C857B7F899294999C9E9EA4A4A6A6A6A6A6A4A4A4A4A4A39E
+9E9E9C9C9C9A999492879AABB7BEC6D3D3D3D4D9D9DCDCDFE1E1E4E4E6E6E6E6E6E6E1DED9D4CCC6
+BEB6AEA9A49A92877F76726A665F574F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F929C9C9C9E9EA39E9C9A9A9C9A9C9C9C9C9C9A9A9A9996
+94949492928F8C89898987878584817F7F7C7C7C7C7C7979797C7C7C7C7F7F8184878989898E9292
+92949494999A9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9994929292928F8F8E8E8E8E8E8E
+8E8F929292928F9294949699999A9A9C9C9E9EA3A4A6A6A6A6A9ABAEAEAEAEAEB1B3B7B9BBBEC1C1
+C6C6C6C4C1C0BEB9B9B7B7B7B9B9B7B6B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABABABABABABABA9A9A9A9A9A9A9A9A9A9A9A9
+A9ABABABABABABABA9A9A9A9A9A9A9A6A6A6A6A6A6A4A39E9E9C9C9A94948F8987817C746A4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F878989878787878481FFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF5C878C94999A9C9C9C9E9E9C9C9C9C9A9A9A9999999494949999999A9A9C9C9E9E9E9EA3A4A4A6
+A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A19E9E9E9C9C9A9A9A999494928F8C89857F7F878F949C
+9EA3A6A9AEAEAEABA9A6A49C9A9492897F74878E9294999C9E9EA3A4A4A4A4A4A4A4A4A4A4A49E9E
+9C9C9C9C9A9994949292A4B7BEC6CCD4D4D4D4D9D9DCDEDFE1E1E4E6E6E7E7E6E6E7E4DFD9D9D1C6
+BEB7B1ABA69C92877F76726C676159554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A6A6C6A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F899A9C9C9C9EA3A39E9E9C9C9C9C9C9C9C9C9C9C9A9A9A99
+9694949492928F8C898989878784817F7F7C7C7C797979797676797C7C7C7F7F81858789898E9292
+9294949494999A9A9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9999949292928F8F8E8E8E8E8E8E8E
+8E8E8F92928F8F929294949494999A9A9C9C9E9EA4A6A6A6A6A9A9ABABAEAEAEB1B1B3B9B9BBBEC1
+C1C1C1C1C0BEBEB9B9B7B6B7B7B7B6B6B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABABABABABABABABABABABABA9A9A9A9A9A9A9
+ABABABABABABABABABABABA9A9A9A9A6A6A6A6A6A6A4A4A19E9C9C9A9994928E89877F7C746C61FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76818C8F9292928F8E8C8989877F7CFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C
+81898E929A9C9C9E9EA1A3A4A19E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9C9C9C9E9EA3A3A4A4A4A6A6
+A6A6A6A6A6A6A6A6A4A4A4A4A4A4A3A3A19E9E9C9C9C9C9A9A99949492928E8987847F858992999C
+9EA3A4A9A9ABABA9A6A49E9C94928E877C7F898F9294999C9C9EA1A4A4A4A4A4A3A1A3A4A4A19E9C
+9C9C9C9A99949492899CAEBEC6CFD4D9D9D9D9D9D9DCDFDFE1E4E6E6E7E7E7E7E7E7E6E1DFD9D3CC
+C1B9B1AEA69E94898179726C67615D574F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF6C72747676746A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF6C89949E9E9E9E9EA4A39E9E9C9C9C9C9C9C9C9C9C9C9C9A9A9A
+999694949492928E8C8989878784817F7F7C7C7C79797676767676797C7C7C7F7F848787898C8F92
+929294949494999A9A9A9A9A9C9C9C9C9A9A9A9A9A9A9A9A999994949492928F8E8E8E8E8E8E8E8E
+8E8E8E8F8F8F8F8F929494949494999A9A9C9C9EA1A4A6A6A6A6A9A9A9ABABAEAEB1B3B6B9B9BBC0
+C0C1C1C1BEBEBBB9B9B7B6B6B6B6B6B3B3B3B1B1B1B1B1B1B1B1B1B1B1AEB1B1B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABABABABABABABABABABABABABABA9A9A9A9
+ABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A49E9E9C9C9A9994928C87847F7C76716A
+61FFFFFFFFFFFFFFFFFFFFFFFFFFFF747C848E949499999994949492928F89847F7C74FFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F7F7C797976726A665FFFFFFFFFFFFFFFFFFFFF597F85
+8992949A9C9EA1A4A4A4A4A4A4A39E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9EA1A4A4A4A4A4A4A6A6
+A6A6A6A6A6A6A6A4A4A4A4A3A3A1A19E9E9E9C9C9C9A9A9999949494928F8989878481878C929A9C
+9EA3A4A9A9A9A9A6A49E9C99948F898174858C929494999C9C9E9EA1A1A3A39E9E9E9EA1A19E9C9C
+9C9C9C9A9494927C99A6B9C1C9D1D9D9D9D9D9D9DCDCDFDFE1E4E6E7E7E7ECECECECE7E4DFDCD4CC
+C4B9B3AEA6A49A8F877B726C67615F57544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF7274767C7C767472665DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF89949EA4A39E9EA3A3A19E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9A
+9A9996949494928F8E8C89898785817F7F7F7C7C7976767676767676797C7C7F7F81848789898E92
+929292949494949999999A9A9A9A9C9A9A9A9A9A9A9A9A9A999694949492928F8E8E8E8E8E8E8E8E
+8E8C8E8E8F8F8E8E92929294949494999A9A9C9C9EA3A4A6A6A6A6A6A9A9A9ABAEB1B1B3B7B9BBBE
+BEBEBEC0BEBBB9B9B9B6B6B6B6B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1AEAEAEB1B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEABABA9A9ABABABABABABABABABABABABABABABABABABABABABABABABABABABA9
+ABABABABABABABABABABABABABABA9A6A6A6A6A6A6A6A4A4A19E9E9C9C9A94928F898787817C7974
+6C6A61FFFFFFFFFFFFFFFFFFFF6A79878C929A9C9C9E9E9E9C9C9C9A9A96928E8987817C76FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF767C8187898787878987847F7C74726C6A6A5757767C7F87898E
+92999C9E9E9EA3A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9C9C9C9C9C9E9E9EA1A4A4A4A4A4A4A6A6A6
+A6A6A6A6A6A6A6A4A4A3A3A19E9E9E9E9E9C9C9A9A9A9999949494928F8C8989878484898F949A9C
+9EA1A4A6A6A6A6A49E9C9A94928C877C7F878E9294999A9A9C9C9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9A9A9494928F8EA4B1C1C4CCD1D9D9D9D9D9D9D9DCDFDFE1E4E6E7E7ECECECECECECE6E1DCD9CF
+C6BEB7B1A9A49C92897F726C67615F57554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF72747C7C79767674726C6159FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF89949A9EA3A3A4A3A4A39E9E9E9E9E9C9C9C9C9E9E9C9C9C9C9C9A
+9A9A9996949492928F8E8C89878784817F7F7C7C7976767676767476797C7C7C7F7F818587898C8F
+92929292949494949496999A9A9A9A9A9A9A9A9A9A9A9A9996949494949292928E8E8E8E8E8E8E8E
+8C898C8E8F8E8E8E8F929292929294949A9A9A9C9C9EA4A4A4A6A6A6A6A6A9ABAEAEB1B1B3B7B9BB
+BBBBBEBEBBB9B9B9B7B6B3B6B3B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEABABA9A9A9A9A9A9ABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A39E9E9C9C9A9994928F8C8987817F7C
+7976746C6A67676666676C727C858E94999C9E9EA1A4A4A4A4A4A4A19E9E9C9994928C87847C7672
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF7C8187898E9292928F8C8C89878484817F7F7F7F7F8487898F9494
+999C9C9E9EA1A3A4A4A4A4A4A6A4A4A3A19E9E9EA19E9E9E9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A6
+A6A6A6A6A6A6A6A4A4A39E9E9E9E9E9E9C9C9A9A9A999694949492928E8989878785878992949C9C
+9EA1A4A4A4A4A49E9C9A94928F89817481898F9494999A9A9C9C9C9E9E9E9E9C9C9C9C9E9C9C9C9A
+9A9A969492927C9CABB7C6C6CCD3D9D9D9D9D9D9D9DCDFDFE1E4E6E7E7ECECECECECECE6E1DFD9D1
+C6BEB9B1ACA69E948C81766C67615F5957544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF6C74767C7976767676747272675F57FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF8F949C9E9EA1A3A3A3A19E9E9E9E9E9E9C9C9C9E9E9E9C9C9C9C9C
+9A9A9A99969494928F8F8E8C898785817F7F7C7C797676767474747676797C7C7C7F7F848787898E
+8F929292949494949494999A9A9A9A9A9A9A9A9A9A9A9A9994949494949292928F8E8E8E8E8E8E8C
+8C89898C8E8E8E8E8E8F929292929494999A9A9A9C9E9EA3A4A4A6A6A6A6A6A9ABAEAEB1B1B6B9B9
+B9BBBBBBBBB9B9B9B7B6B3B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEABA9A9A9A9A9A9A9A9A9A9A9A9A9ABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A39E9E9E9C9C9A9494928F8C89878781
+7F7F7C7C7C7C7C7C7F7F7F87899294999C9E9EA1A4A4A4A4A4A4A4A4A4A4A4A39E9C99948F89847F
+79726CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF81878C9292929494949292928F89898989898989898C8F929494999A
+9A9C9E9E9EA1A4A4A6A6A6A6A6A6A4A4A4A3A4A4A4A4A39E9E9EA1A3A3A4A4A4A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A4A4A4A19E9E9E9E9E9C9C9C9A99999494949492928F8E8989878787898E92999C9C
+9CA1A4A4A4A49E9C9C9994928C877C7F878C929494999A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A
+9A999492927294A1AEBEC6C6CCD3D4D7D7D7D9D9D9DCDFDFE1E4E7E7ECECECECECECECE7E4DFD9D3
+CCC1B9B3AEA6A1998F877B6C67615F5C57554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF676A6A7276797676747674747474726C665F54FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF8992999E9E9E9E9EA1A39E9E9E9E9E9E9E9E9C9E9E9E9E9E9C9C9C9C
+9C9A9A9A99969492928F8F8E898987847F7F7F7C7C767674747474747676797C7C7F7F818587898C
+8F8F9292949494949494999A9A9A9A9A9A9A9A9A9A9A9A999494949494949292928F8E8E8E8E8E8E
+898989898C8E8E8E8E8E8F8F8F92929494999A9A9C9C9E9EA3A4A6A6A6A6A6A9A9AEAEAEB1B3B6B9
+B9B9B9B9B9B9B9B7B6B6B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEABAEAEABABABABABAEAE
+AEAEAEAEABABA9A9A9A6A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9ABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A4A19E9E9C9C9C9A9494928F8C898989
+8785848481818484858787899294999A9C9EA3A4A4A4A6A6A6A6A6A6A4A4A4A4A4A4A39E9C96928C
+87817C746E67FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF7F8E9292949494949494949494949494929292929292929494999A9C9C
+9C9EA1A1A1A3A4A4A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A3A3A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A4A4A4A4A39E9E9E9E9C9C9C9C9A9A99949494949292928E8C89898787878C8F949A9A9C
+9C9EA3A19E9E9C9C9A94928E89817484898E92949496999A9A9C9C9C9C9C9C9C9C9C9C9A9A9A9A99
+999492928C8C9EA9B4C4C8C8CCD3D4D4D4D4D9D9D9DCDFDFE1E4E7E7ECECECECECECECE7E4E1DCD4
+CCC6BBB7B1A9A49C92897F7267615F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF6A6C727272727274747474747472727474747472716A615CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF818F949A9E9E9E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C
+9C9C9A9A9A99949492928F8F8C898787817F7F7C7C797674747474747476797C7C7C7F7F84878789
+8E8F9292929494949494999A9A9A9A9A9A9A9A9A9A9A9A99949494949494929292928F8F8E8E8E8E
+89898989898C8E8E8E8E8E8E8F9292949494999A9C9C9C9E9EA4A4A4A6A6A6A9A9ABAEAEB1B1B3B6
+B9B9B9B9B9B9B7B6B6B3B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEABABABABA9A9A9A9A9A9A9AB
+AEAEAEABABA9A9A9A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9ABABABABABABABABABABAB
+ABABABABABABABABABABABABABABABA9A6A6A6A6A6A6A6A4A4A19E9E9C9C9C9A9A949492928F8E8C
+8989898989898989898E8F92949A9C9C9EA3A4A4A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A49E9E9C9C
+94928987817C726A61FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF677F92929494949499999A9A9A9A9999969494949494949494999A9C9C9E9E
+9E9EA3A3A4A4A4A4A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A4A4A4A4A4A4A19E9E9C9C9C9C9C9C9A99949494929292928F8E8C89898787898E92949A9A9C
+9C9E9E9E9E9C9C9A94928F89877C7F87898F9294949499999A9A9A9A9A9C9C9C9A9A9A9A9A999996
+9494928E8799A6AEBCC6CCC9CFD4D4D4D4D4D9D9D9DCDFDFE1E4E7ECECECECECECECECECE6E1DFD9
+CFC6BEB9B1ABA69C948F87766A615F5D5757554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72
+767F7C7C7C7C7C767474727272726E6C7272727472726C6A6157FFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF6C8992949C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9C9C9A9A9A99949292928F8E898987847F7F7C7C79767474747474747676797C7C7F7F81858789
+8C8E8F9292949494949494999A9A9A9A9A9A9A9A9A9A9A9999949494949492929292928F8E8E8E8E
+8C89898989898C8E8E8E8E8E8F9292929494999A9A9C9C9E9EA1A4A4A4A6A6A6A9A9ABAEAEB1B1B3
+B6B7B9B9B9B7B6B3B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEABABABA9A9A9A9A9A9A9A6A6A6A9
+A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9ABABABABABABABABABAB
+ABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A39E9E9C9C9C9C9A99949494929292
+8F8E8E8F8F8F9292929494999A9C9E9EA4A4A4A6A6A6A6A9A9A9A6A6A6A6A6A6A6A6A6A4A4A19E9E
+9C9C9A99949289857F766C675FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF74899294949499999A9A9A9C9C9C9C9C9A9A9A999A9A9A9A9A9A9C9C9E9EA3A4
+A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A4A4A4A4A4A6A6A6A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A4A4A4A4A4A39E9E9E9C9C9C9C9C9A9A99949492929292928F8E8C8C8987898C8F92999A9A9A
+9C9E9E9C9C9C9A9994928E8981748587898F929494949699999999999A9A9A9A9A9A9A9999969494
+94928F7C92A4AEB7BFCCCCCCCFD4D4D4D4D4D9D9D9DCDFDFE1E4E7ECECECECEEEEECECECE6E1DFD9
+D1C8C1B9B3AEA69E9A92897F6C615F5C575755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C81
+8787878785847F7C79747472716C6C6A6C6C71727272716C675F54FFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF7F8E92949A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9C9C9C9C9A9A9A94949292928F8C898787817F7C7C7C76767474747474747676797C7F7F81848787
+898E8F9292949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A99969494949292929292928F8E8E8E
+8C8989898989898C8E8E8E8E8E9292929494969A9A9C9C9C9E9EA3A4A4A6A6A6A9A9ABAEAEAEB1B1
+B3B6B6B7B7B6B3B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEABABABA9A9A9A9A9A6A6A6A6A6A6A6A6
+A6A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9ABABABABABABABABABAB
+ABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A39E9E9E9C9C9C9C9A999994949494
+929292929292929494969A9C9C9E9EA4A4A4A6A6A6A6A9A9A9A9A9A9A9A9A6A6A6A6A6A6A4A4A4A1
+9E9C9C9C9A99949492928E877F79726C61FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF5D7F878E9494999A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9EA3A4A4A4
+A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A4A4A4A4A3A39E9E9C9C9C9C9C9A9A99949494929292928F8F8E8E898989898E9294999A9A9A
+9C9C9C9C9C9A9A94928F89877C7F8787898F9292949494999694949499999A9A9999999694949494
+928F89899CAEB6BEC6CFCFCFCFD3D3D3D4D4D4D9D9DCDFDFE1E4E7ECECECEEEEEEEEECECE7E4E1D9
+D3CCC4BBB6AEA6A39C948E8774665D57575555544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848789
+8C8C89898987847F7C7974726E6C6A676A6A6C72727272716A6157FFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF7C898C9294949A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9EA39E9E9E9E9E
+9C9C9C9C9C9A9A9994949292928E89898785817F7C7C79767474747474747476767C7C7F7F818587
+898E8F9292949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A999994949492929292928F8E8E8E
+8E898989898989898C8E8E8E8E8F9292949494999A9C9C9C9E9EA1A4A4A6A6A6A9A9ABAEAEAEAEB1
+B1B3B3B6B6B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEAEABABABABA9A9A9A9A9A6A6A6A6A6A6A6A4A4A6
+A6A6A6A6A6A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9ABABABABABABABABABAB
+ABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A4A19E9E9E9C9C9C9C9A9A9A999994
+94949494949494969A9A9C9E9E9EA3A4A4A6A6A6A6A9A9A9ABABABA9A9A9A9A9A9A9A6A6A6A6A6A4
+A39E9E9C9C9C9A9A94949492928F8C89877F746C675FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFF5C7F8487899294999A9C9C9C9C9C9E9E9E9E9E9E9E9E9C9E9E9E9E9E9E9E9EA3A4A4A4A4
+A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A4A4A3A3A1A19E9E9E9C9C9C9A9A9A9A99949492929292928F8F8F8E8989898E8F929499999A9A
+9A9C9C9C9A999494928C898176848789898E92929494949494949494949494999494949494949292
+8F8C8794A6B6BEC4CCD1CFCFCFD3D3D3D3D4D4D9D9DCDFDFE1E6E7ECECECEEF1F1EEEEECE7E6E1DF
+D4CFC4BBB3AEA6A49C9492897F6C5F57575555554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF879294
+949292928E898785817C76746C6A6766676A6C6C727272726C675F54FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF768789898E929494999A9A9C9C9E9E9E9E9E9E9E9E9E9E9E9EA1A3A19E9E9E9E
+9E9C9C9C9C9C9A9A9994949292928E8C8987847F7C7C7976747474747474747476767C7F7F818487
+898C8F9292929494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949492929292928F8E8E8E
+8E89898989898989898C8E8E8E8F9292949494999A9A9C9C9E9EA1A4A4A4A6A6A9A9ABAEAEAEAEB1
+B1B1B1B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEABABA9A9A9A9A9A6A6A6A6A6A6A6A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9ABABABABABABABABAB
+ABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A6A4A4A19E9E9E9E9E9C9C9C9C9C9A9A9A
+9999969999999A9A9C9C9E9E9EA3A4A6A6A6A6A6A6A9A9ABABABABABABABABA9A9A9A9A9A6A6A6A6
+A4A4A39E9E9E9C9C9C9A9A969494928F8E8C89898787857F766C5757FFFFFFFFFFFFFFFFFFFFFFFF
+FF5C7C7F8187898F9294999A9C9C9C9C9C9E9E9E9EA1A3A19E9E9E9E9E9E9EA1A1A3A3A4A4A4A4A4
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A4A4A3A19E9E9E9E9E9C9C9C9A9A9A99999494949292929292928F8F8C89898C8F9292949999999A
+9A9A9A9A999494928F89877C7F848789898E92929494949494949492949494949494949292928F8E
+897294A4B1B9BEC6CFCFD1D1D1D1D1D3D3D4D4D9D9DCDFE1E1E6E7ECECEEF1F2F2F1EEECECE6E1DF
+D4CCC1BBB3AEA6A49E99928E8974615757555554514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848C949A
+99999994928E8987847F7C74716A66616166676C6E727272726A6659FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF81878989898F929294999A9A9C9C9C9E9E9E9E9E9E9E9E9E9EA3A4A3A19E9E9E
+9E9E9E9E9E9C9C9C9A9994949292928E898785817F7C7976767474747474747474767C7C7F818487
+898C8E8F9292949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A96949492929292928F8E8E8E
+8C8C89898989898989898C8E8E8F9292929494999A9A9C9C9E9E9EA3A4A4A6A6A6A9ABAEAEAEAEAE
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEABABA9A9A9A9A9A6A6A6A6A6A6A6A4A4A4A4A4A3A3A3
+A4A4A4A3A39E9E9E9EA1A3A3A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9ABABABABABABABABAB
+ABABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A39E9E9E9E9E9E9E9C9C9C9C9C9A
+9A9A9A9A9A9C9C9C9E9EA3A4A4A4A6A6A6A6A9A9A9A9A9ABABABABABABABABABABABABA9A9A9A9A9
+A6A6A4A4A3A3A19E9E9E9C9C9A9994949492928F8C89898989878784817F7F7C7C7C797676797B7C
+7C818787898F929494999A9C9C9C9C9C9E9EA3A4A4A4A4A4A39EA1A1A3A3A4A4A4A4A4A4A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4
+A4A39E9E9E9E9E9E9E9C9C9C9A999994949494929292929292928F8E8989898E8F9292949499999A
+9A9A9A999494928F8C877F7981858989898E9292929494949292929292929294929292928F8E8C89
+87929EABB7B9BEC6CFCFCFCFCFD1D1D1D1D3D4D9D9DCDFE1E1E6E7ECECEEF1F2F2F1EEEEECE6E1DC
+D4CCC1BBB3AEA6A49E9A9492897F6C5C55555554544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C87929A9C
+9C9C9C9A94928E8987847F76726A61615F61666A6C727272726C6A6154FFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF7C81878789898E8F929494969A9A9C9C9E9E9E9E9E9E9E9E9EA1A3A4A4A3A19E9E
+9E9E9E9E9E9E9C9C9C9A9994949292928E8987847F7F7C7676747474747474747476767C7F818487
+87898E8F9292949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494929292928F8F8E8E8C
+8C898989898989898989898C8E8E8F9292949496999A9A9C9C9E9EA3A4A4A6A6A6A9A9ABABAEAEAE
+AEB1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEABABA9A9A9A9A6A6A6A6A6A6A6A4A4A4A4A4A3A19E9EA1
+A1A3A19E9E9E9E9E9E9E9E9E9E9EA1A4A4A4A4A4A6A6A6A6A6A6A6A6A6A9A9ABABABABABABABABAB
+ABABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A3A19E9E9E9E9E9E9E9E9E9C9C9C
+9C9C9C9C9C9C9C9C9EA3A4A4A6A6A6A6A6A9A9A9A9A9ABABABABABABABABABABABABABABABABABAB
+A9A6A6A6A6A4A4A4A4A4A39E9E9C9C9A9A9A9994949292928F8E8989898987878787848184848787
+898C8F92929494999A9A9C9C9C9C9C9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4
+A39E9E9E9E9E9E9C9C9C9C9A9A999494949494929292929292928F8C89898E8F9292949494969999
+9A9999949494928E89857C7C81878989898E9292929492929292929292929292928F8E8E89898987
+7F9AA4AEB9B9C1C6CFCFCFCFCFCFCFCFD1D3D4D9D9DCDFE1E1E6E7ECEEF1F2F2F2F2F1EEECE6E1D9
+D4CCC1B9B3AEA6A49E9C96928E89766157545554514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848E999C9E
+9E9E9E9C9A94928E89877F7C746C665F5D5F61676C6C727272726C6759FFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF6A7F8184878789898F9292949494999A9C9C9E9E9E9E9E9E9E9EA3A4A4A4A4A3A19E
+9E9EA1A1A19E9E9C9C9C9A9994949492928C8985817F7C7976747474747474747474767C7C7F8185
+87898E8F9292929494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949492928F8F8E8E8E8C
+8989898989898989898989898C8E8E8F9292949499999A9C9C9E9EA1A4A4A4A6A6A6A9ABABABABAE
+AEAEAEB1B1B1B1B1AEAEB1B1B1AEAEAEAEABA9A9A9A6A6A6A6A6A6A6A4A4A4A4A4A3A19E9E9E9E9E
+9E9E9E9E9E9C9C9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABABABABAB
+ABABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A4A3A3A19E9E9E9E9E9E9E9E9E9E
+9C9C9E9E9E9E9E9E9EA4A4A4A6A6A6A6A9A9A9A9A9A9ABABABABABABABABABABABABABABABABABAB
+A9A9A6A6A6A6A6A6A6A6A6A4A4A39E9E9E9E9C9C9A9A9994949492929292928F8F8F8E8E8F8F9292
+929294949494999A9C9C9C9C9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A3A3A1
+9E9E9E9E9E9C9C9C9C9C9C9A99949494949292929292929292928E8C8C8C8F929292949494949999
+9994949494928F89877F767F87898989898F92929292929292928F8F8F8F8F8E8E8C89898987876A
+949CABB6B9B9C1C8CCCCCCCFCFCFCFCFCFD3D4D9D9DCDFE1E1E6E7ECEEF1F2F2F2F2EEECE7E4DFD9
+D3C8C1B9B3AEA9A49E9E9A94928E816C5D5454554F514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C89949C9EA3
+A4A4A19E9C9A94928E89857F7672675F5C575F616A6C727272726E6A6154FFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF7C7F7F81848787898E8F92949494949A9C9C9C9E9E9E9E9E9EA1A3A4A4A4A4A4A3A3
+A3A3A3A3A4A19E9E9C9C9C9A99949494928F8987847F7F7C7674747474747474747476797C7F8184
+8789898F9292929494949494969A9A9A9A9A9A9A9A9A9A9A9A9A9A999994949492928F8E8E8E8E8C
+898989898989898989898989898C8E8E8F9294949496999A9C9C9EA1A4A4A4A4A6A6A9A9A9ABABAE
+AEAEAEAEAEB1AEAEAEAEAEB1B1AEAEAEAEABA9A9A6A6A6A6A6A4A4A4A4A4A3A39E9E9E9E9E9E9E9E
+9E9E9E9C9C9C9C9C9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A6A6A6A6A9A9ABABABABABABABAB
+ABABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A6A4A4A4A4A3A3A1A19E9E9E9E9E9E9E
+9E9E9E9EA19E9E9EA3A4A4A4A6A6A6A6A9A9ABABABABABABABABABABABABABABABABABABABABABAB
+A9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A39E9E9C9C9C9A9A9A9A9A9A9A9994949494949494
+949499999A9A9C9C9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A19E9E9E
+9E9E9C9C9C9C9C9C9C9C9A9A999494929292929292929292928F8E8E8C8F92929292949494949499
+9494949492928C8984797C81878787898C8F8F929292928F8F8F8E8E8E8C8C898989878785817F8F
+9CA4AEB9BEBEC1C8CCCCCCCCCFCFCFCFCFD3D4D9D9DCDFE1E1E6E9ECEEF1F2F2F2F1EEECE7E1DFD9
+D1C8C1B9B1AEA9A49E9E9C969492897666574F51514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85929A9EA4A6
+A6A6A4A4A19C9C96928E89817C746A5F5C57595F666A6E727474726C675CFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF767C7C7C7C7F858789898E9292949494999A9C9C9C9E9E9E9E9EA3A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A19E9E9C9C9C9A99949492928C8785817F7C7976747474747474747476767C7C7F81
+8787898E8F929294949494949499999A9A9A9A9A9A999A9A9A9A9999949494949292928F8E8E8E8C
+89898989898989898989898989898C8E8E9292949494969A9A9C9C9EA3A4A4A4A4A6A6A6A9A9A9AB
+ABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA9A9A6A6A6A6A4A4A4A4A3A19E9E9E9E9E9C9C9C9E9E
+9E9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9EA3A4A4A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABABABAB
+ABABABABABABABABABABABABABABABABABA9A6A6A6A6A6A6A6A4A4A4A4A4A4A4A3A3A1A19E9E9E9E
+9E9EA1A3A4A4A3A1A4A4A4A6A6A6A6A6A9A9ABABABABABABABABABABABABABABABABABABABABABAB
+A9A9A9A9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A39E9E9E9C9C9C9C9C9C9C9A9A999A9994969999
+9A9A9C9C9C9C9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A19E9E9E9C
+9C9C9C9C9C9C9C9C9A9A9A99949494929292929292929292928E8E8E8E8F92929294949494949494
+94949492928E89877F797F85878789898C8E8F928F8F8F8E8E8E8C8C89898989898787817F7F8799
+A4ABB6C0BEBEC1C8C8C9CCCCCCCFCFCFCFD3D4D7D9DCDFE1E4E6ECECEEF1F2F2F2F1EEECE6E1DED7
+CFC6C1B9B1AEA6A4A19E9C9A949292816C5D544F514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF798E949EA4A6A9
+ABA9A6A6A4A19E9C99928C877F766C615957575C616A6C727272726C6A6154FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFF74767674767C7F818787898C8F92929494949A9C9C9C9E9E9E9EA1A3A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A19E9E9C9C9C9A999494928E8987847F7F7C7676747474747474747476797C7F7F
+848789898E92929294949494949499999A9A9A9A9999999A9A9A9996949494949292928F8E8E8E8E
+8989898989898989898987898989898C8E8F9292949494999A9A9C9E9EA3A4A4A4A6A6A6A6A6A9A9
+A9ABABAEAEAEAEAEAEAEAEAEAEAEAEAEABA9A9A9A6A6A6A4A4A4A4A39E9E9E9E9E9C9C9C9C9C9C9C
+9C9C9C9C9A9C9C9C9C9C9C9E9E9E9E9E9EA3A4A4A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABABABAB
+ABABABABABABABABABABABABABABABABABA9A9A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A3A3A3A19E9E
+9E9EA3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABABABABABABABABABABABABABABABABAB
+ABA9A9A9A9A9A9A9A9A9A6A6A6A4A4A4A4A4A4A4A4A39E9E9E9C9C9C9C9C9C9C9A9A9A9A9A9A9C9C
+9C9C9C9E9E9E9E9E9E9E9E9E9E9EA1A1A3A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9C9C9C
+9C9C9C9C9C9C9A9A9A9A99999494929292929292929292928F8E8E8E8F9292929292949494949494
+949492928F898781767F8187878789898C8E8E8F8E8E8E8E8E8C8989898989898784817F7C81929E
+A9B1B9C1C1C1C1C6C8C8C8C8CCCCCCCFCFD1D4D4D9DCDFE1E4E7ECECEEF2F2F2F2F1EEECE6E1DCD4
+CFC6C1B9B1AEA6A4A39E9E9C9A94928E7664574F4F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87949CA4A6ABAE
+AEAEA9A9A6A4A19E9C949289847C74675C5755575F666A6C727272716A6759FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF6A74727174767C7F81858789898E9292949494999A9C9C9C9E9E9EA3A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A39E9C9C9C9C9A9994928F898785817F7C7976747474747474747676797C7C7F
+818787898C8F9292929294949494949999999A999994969999999994949494949292928F8F8E8E8E
+8C898989898989898987878789898989898E8F929292949496999A9C9E9EA1A4A4A4A4A6A6A6A6A6
+A6A9A9ABABAEAEAEABABABAEAEAEAEABABA9A9A6A6A6A6A4A4A4A39E9E9E9E9C9C9C9C9C9C9C9C9C
+9C9C9C9A9A9A9A9A9C9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABABABAB
+ABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A3A3A1
+A1A1A3A4A4A4A4A4A4A4A6A6A6A6A6A6A6A9A9ABABABABABABABABABABABABABABABABABABABABAB
+ABA9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A4A4A4A4A4A39E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9E
+9E9E9E9E9E9E9E9E9E9E9E9EA3A3A3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A19E9E9C9C9C9C
+9C9C9C9C9A9A9A9A999996949494929292929292929292928F8E8E8E8F9292929292929494949494
+949292928C89847C7C7F818787898989898C8E8E8E8E8E8E8E89898989878787847F7F7C7F8E9AA6
+AEB9C1C6C1C1C1C6C6C6C6C8C9CCCCCCCFD1D4D4D9DCDFE1E4E7ECECEEF2F2F2F2F1EEECE4DFD9D4
+CFC6BEB6AEABA6A4A49E9E9E9C9A949284715C544F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C929AA3A6AEAEB1
+B1AEAEAEA9A6A4A19E9A9492897F766C5F5754575C616A6C717272726C6A6155FFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF6C6A6C727476797C7C7F848787898C8F92929494999A9C9C9C9E9EA1A3A4A4A4A4A4A4A4A4A4
+A4A6A6A6A6A4A4A4A49E9E9C9C9C9A9994928F898987817F7F7C76767474747474767676767C7C7F
+7F848789898E929292929294949494949499999996949494999994949494949292929292928F8E8E
+8C89898989898989898787878787898989898C8E8F9292929494999A9C9C9E9EA1A4A4A4A4A6A6A4
+A6A6A6A9A9ABABABA9A9A9ABABA9A9A9A9A9A9A6A6A6A6A4A4A4A19E9E9E9C9C9C9C9A9C9C9C9C9C
+9C9C9A9A9A9A9A9A9C9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A6A6A6A6A9A9ABABABABABABAB
+ABABABA9ABABABABABABABABABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A3A3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A9A9ABABABABABABABABABABABABABABABABABABABABAB
+ABA9A9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A4A4A4A39E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9EA1A4A4A3A3A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A1A1A19E9E9C9C9C9C9C
+9C9A9A9A9A9A99999694949494929292929292929292928F8E8E8E8E8F9292929292929294949492
+9292928E89877F767F7F858789898989898C8E8E8E8E8E8E8C898987878785817F7F7C76899AA4AB
+B4B9C1C4C6C6C6C6C6C6C6C6C8CCCCCCCFD1D3D4D9DCDFE1E4E7ECECF1F2F2F2F1EEECE7E4DFD9D3
+CCC4BCB4AEABA6A4A49E9EA19E9C99948E7C67574F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87949EA6AEB1B6B6
+B6B1B1AEAEA9A6A4A39E9A948F877F7467575455575F666A6C7272726C6A6759FFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A
+6A6A6C6E7274767C7C7C7C7F84878789898E92929494999A9A9C9C9E9EA3A4A4A4A4A4A4A4A4A4A4
+A6A6A6A6A6A6A4A4A4A39E9E9C9C9C9A9492928C8987847F7F7C7976767474747476767676797C7C
+7F818787898C8F929292929294949494949499999494949494969494949494929292929292928F8F
+8C8989898989898989878787878787878989898C8E8F8F92929494999A9C9C9C9E9EA1A4A4A4A4A4
+A4A6A6A6A6A9ABA9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A4A4A4A39E9E9E9C9C9C9C9A9A9A9A9A9A9C
+9C9C9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9EA3A4A4A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABABAB
+ABABA9A9A9A9A9ABABABABABABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A9A9ABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABA9A9A9ABA9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9EA1A3A1A19EA3A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A1A19E9E9E9E9E9E9C9C9C9C9A9A
+9A9A9A99999994949494949492929292929292929292928F8E8E8E8E8F8F92929292929292949292
+92928F8987817C7C7F84878789898989898E8E8E8E8E8C8C898989878784817F7F7C6E89949EA9AB
+B4B9C1C1C1C4C4C6C6C6C6C6C8C8CCCCCFD1D3D4D9DCDFE1E4E7ECECF1F2F2F2F1EEECE7E1DFD9CF
+C6C1B9B1AEA9A6A4A49EA1A3A19C9A949285725F544F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76929CA4ABB1B6B9B9
+B9B6B3B1AEAEA9A6A6A49C9A948C847C6C5F554F555C61676A6E7272716A6A5F55FFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C72727272
+72727274767C7C7C7C7C7C7F81878787898C92929494999A9A9C9C9E9EA1A4A4A4A4A4A4A4A4A4A4
+A6A6A6A6A6A6A6A4A4A39E9E9C9C9C9A9494928E8987847F7F7C7C79767474747476767676797C7C
+7F7F848789898E8F8F9292929292949494949494949494949494949494949292929292929292928F
+8E89898989898989898787878787878787878789898C8C8E8F92929494999A9C9C9C9C9EA3A3A3A1
+A3A4A4A4A4A6A6A6A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A19E9E9E9C9C9C9C9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9EA3A4A4A4A4A4A4A6A6A6A6A6A6A9A9A9ABABABABABAB
+ABABA9A9A9A9A9A9A9ABABABABABABA9A9A6A6A6A6A4A4A6A6A4A4A4A3A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A9A9ABABABABABABABABABABABABABABABABABABABAB
+ABABABABA9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A19E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A1A19E9E9E9E9E9E9E9E9C9C9A9A9A9A9A
+9A999996949494949494929292929292929292929292928E8E8E8E8E8E8F8F929292929292929292
+8F8F8C89847F797C81878789898989898C8E8E8E898989898989878785817F7F7C7484929CA4A9AE
+B6BBC1C1C1C1C1C4C6C6C6C6C6C8C9CCCFCFD3D4D9DCDFE1E4E7ECECF1F2F2F2F1EEECE6E1D9D3CC
+C4BEB7AEAEA9A6A4A4A1A3A4A39C9A94948E7C6A574F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87949EA9B1B6B9BEBB
+B9B9B7B3B1B1AEA9A6A6A19C9A9489817667575455575F646A6C7271716C6A6759FFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A6A6C6C6C74767674747474
+747676797C7C7C7C7C7C7F7F8185878789898F92949496999A9C9C9E9EA1A3A4A4A4A4A4A4A4A4A6
+A6A6A6A6A6A6A6A4A4A39E9E9E9C9C9A9694928E898787817F7C7C7C767674747474767676797C7C
+7F7F81878989898E8F9292929292929494949494949494949494949494949492929292929292928F
+8E8C89898989898989898787858787878787878789898989898E8F9294949499999A9A9C9C9E9E9E
+9E9E9E9EA3A4A4A4A6A6A6A6A6A6A6A4A4A4A4A4A4A3A3A19E9E9E9E9C9C9C9C9A9A99999999999A
+9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9EA1A3A3A4A4A4A4A6A6A6A6A6A6A9A9A9A9A9ABABABAB
+ABABA9A9A9A9A9A9A9A9A9A9ABABABA9A9A6A6A6A6A4A4A4A4A4A4A4A3A3A3A3A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9ABABABABABABABABABABABABABABABABAB
+ABABABABA9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A39E9E9E9E9EA1A1A39E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A3A4A4A4A4A4A4A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A1A19E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9999
+999494949494949492929292929292929292929292928F8E8E8E8E8E8E8E8F8F929292929292928F
+8E8C89877F767C7F858787898989898C8E8E8E8C8989898987878785847F7C79748492969EA9AEAE
+B6BEC0C1C1C1C1C4C4C4C6C6C6C6C8CCCFCFD3D4D9DCDFE1E6E7ECECF1F2F2F2F1EEECE6DFD9CFC6
+C1B9B6AEABA9A6A4A4A3A4A4A19E9A99949284725F544F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E9AA4AEB3B9BEC1C0
+BEBBB9B9B6B1B1AEABA9A6A39C9A92897F715F554F555C61676A6C71716C6C6A5F55FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72727274767676767676747679
+7C7C7C7C7C7C7C7C7C7F7F7F8184878787898E92929494999A9C9C9E9E9EA1A3A4A4A4A4A4A4A4A6
+A6A6A6A6A6A6A6A6A4A4A19E9E9C9C9A9994928F898987817F7F7C7C797676747474767676767C7C
+7F7F81858789898C8E8F92929292929494949494949494949494949494949492929292929292928F
+8E8C8989898989898989878787878587878585878789898989898C8E92929494949494999A9C9C9C
+9C9C9C9C9E9E9E9EA3A4A4A4A4A4A4A4A4A3A3A19E9E9E9E9E9C9C9C9C9C9C9A9A9A999494969999
+999999999A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9EA1A1A3A4A4A6A6A6A6A6A6A6A9A6A6A9A9A9ABAB
+ABA9A9A9A6A9A9A9A9A9A9A9A9A9A9A9A9A6A6A6A4A4A4A4A4A4A4A3A19EA1A1A3A3A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9ABABABABABABABABABABABABABAB
+ABABABABA9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A3A1A1A3A3A3A3A4A39E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A3A3A3A3A4A4A4A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A3A3A3A3A3A3A1A1A19E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9999999494
+949494949494929292929292929292929292929292928F8E8E8E8E8E8E8E8E8F8F8F929292928F8E
+8C898781767C7F84878789898989898E8E8E8C8989878787878785817F7C79747F8E969CA4AEAEB1
+B6BEBEC1C1C1C1C1C1C4C4C6C6C6C8CCCFCFD3D4D9DCDFE1E6E7ECECF1F2F2F2F1EEE7E1DCD4CCC6
+BEB9B1AEA9A6A6A4A3A4A4A49E9E9C9A9492897666594F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85949EA9B1B9BBC1C1C1
+C0BEBEB9B9B7B1B1AEABA9A49E9C9992897C6A594F54575F616A6C6E6E6E6C6A6759FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72747476797676767676767679767C
+7F7F7C7C7C7C7C7F7F7F7F7F8184858787898C8F92949496999A9C9C9E9E9EA3A4A4A4A4A4A4A4A6
+A6A6A6A6A6A6A6A6A4A4A19E9E9C9C9C9A9492928C8987847F7F7C7C79767676747476767676797C
+7F7F81858789898C8E8F929292929294949494949494949494949494949494929292929292929292
+8F8E89898989898989898987878787858585858787898989898989898C8F92929292929494999A9A
+9A9A9C9C9C9C9C9C9C9E9E9E9E9EA1A19E9E9E9E9E9C9C9C9C9C9C9C9C9A9A9A9A99949494949494
+94949699999999999A9A9C9C9C9E9E9E9E9E9E9E9E9E9EA1A4A4A6A6A6A6A6A6A6A6A6A6A6A9A9A9
+A9A9A9A6A6A6A6A6A9A9A6A6A6A6A9A6A6A6A6A4A4A4A4A4A4A4A4A39E9E9E9E9EA1A1A3A4A4A4A4
+A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9ABABABABABABABABABAB
+ABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A3A4A4A4A4A4A4A39E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A19E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A3A3A3A3A3A3A1A1A1A1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9A9A9994949494
+9494949492929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8F8F8F92928F8E8C
+8987846C797F81878789898989898C8E8E8E8989898787878585847F7C79747C89969CA4A9AEB1B1
+B6BBBEC0C0C1C1C1C1C1C1C6C6C6C6CCCCCFD3D4D9DCDFE1E6E7ECECF1F2F2F1EEECE6DFD9D1C8C1
+B9B6B1AEA9A6A6A4A4A4A4A39E9E9C99948F897F6C59544F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF899AA4AEB7B9BEC4C6C6
+C1C1C0BEBCB9B7B3B1AEABA6A49E9C948F877461554F55595F676A6C6C6C6C6C6A5F55FFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7476797C7C7976767676767676797C7C
+7F7F7F7C7C7C7C7C7F7F7F7F818184878789898F92949494999A9C9C9E9E9EA1A3A4A4A4A4A4A4A6
+A6A6A6A6A6A6A6A6A4A4A39E9E9C9C9C9A9494928E8987857F7F7C79797676767476767676767B7C
+7F7F8185878989898E8F929292929292949494949494949494949494949494949292929292929292
+8F8E8C8989898989898989898787878785858585878789898989898989898C8E8F8F929292949494
+949496999A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A99999999949494949494
+9494949494949699999A9C9C9C9C9C9C9E9E9E9E9E9E9E9EA3A4A4A6A6A6A6A6A6A6A6A6A6A6A6A9
+A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A3A3A3A4A4A3A19E9E9E9E9E9E9EA1A4A4A4A4
+A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9A9A9ABABABABAB
+ABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E
+9E9E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A1A1
+A1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9A9694949494
+94929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8C89
+89857F797F81858787898989898C8E8E8E8C89898787858585847F7C79747F89949CA4A6AEB1B1B3
+B7B9BBBEC0C0C1C1C1C1C1C4C6C6C6C8CCCFD1D4D9DCDFE1E6E7ECECF1F2F2EEECECE1DCD7CFC6BE
+B9B1AEAEA9A6A4A4A4A4A4A19E9E9C99928E87817461574F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81929CA6B1B9BEC1C6C6C6
+C6C4C1C1BEBEB9B7B6B1AEABA6A4A39C948C7F6C5C4F51575D61676C6C6C716C6C6759FFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76797C7C7C7C7C76767676767676797C7C
+7C7F7F7C7C7C7C7C7F7F7F7F7F8184858787898E9292949494999A9C9E9E9E9EA1A3A4A4A4A4A4A6
+A6A6A6A6A6A6A6A4A4A4A39E9E9E9C9C9A9694928F898987817F7C79767676767676767676767C7C
+7F7F8185878789898C8E929292929292949494949494949494949494949494949292929292929292
+8F8E8E8C89898989898989898989878787878585878787878989898989898989898C8E8F8F929292
+92929294949494949494949499999A9A9A9A9A9A9A9A9A9999949494969694949694949494949494
+9494949494949494999A9A9C9C9C9C9C9C9C9E9E9E9E9E9E9EA3A4A4A4A6A6A6A6A4A4A4A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A19EA1A1A1A3A39E9E9E9E9E9E9E9EA1A4A4A4A4
+A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9A9A9A9
+A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E
+9E9E9E9E9E9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A3A3A3A3A3A1A1A19E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A969494949292
+9292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8E8E8E8989
+877F797F818487878989898C8C8E8E8E8C89898787878585857F7C7976818C949C9EA4A9AEB1B3B6
+B9B9BBBBBEC0C1C1C1C1C1C1C6C6C6C8CCCFD1D4D9D9DFE1E6E7ECECEEF2F1ECECE7DFD9D3CCC1B9
+B6B1AEABA9A6A4A4A4A4A4A19E9C9A94928C87817C7159544F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8794A3ABB6BEC1C6C8C8C8
+C6C6C6C6C1BEBEB9B7B6B1AEA9A6A69E9A92877967574F54575F666A6C6C6E6E6C6C5F55FFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76767C7C7C797C79797976767676767676797C
+7C7C7C7C7C7C7C7C7F7F7F7F7F7F81848787898C8F92929494969A9C9C9E9E9E9EA1A3A4A4A4A4A4
+A6A6A6A6A6A6A6A4A4A4A49E9E9E9C9C9C9A94928F8C8987817F7C79767676767676767676797C7C
+7F7F8185878789898C8E8F9292929292949494949494949494949494949494949292929292929292
+928F8E8E8C898989898989898989898787878785858787878789898989898989898989898C8E8F8F
+8F8F8F92929292929492929292949494949496969494949494949494949494949494949494949494
+9494949494949494999A9A9C9C9C9C9C9C9C9C9C9C9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A6A6
+A6A6A6A6A4A4A6A6A6A6A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4
+A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9
+A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E
+9E9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9EA1A19E9EA1A1A19E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A94949292929292
+92929292929292929292929292929292928F8E8E8E8E8E8C8C8E8E8E8E8C89898E8E8E8E8E8C8987
+81797F818487878989898C8E8E8E8E8E89898987878584847F7C7C767F89949C9EA1A6AEB1B1B3B6
+B9B9B9BBBBBEC0C1C1C1C1C1C4C6C6C8CCCFD1D4D9D9DFE1E6E7ECECEEF1EEECECE6DFD9CFC6BEB9
+B3B1AEA9A6A6A4A4A4A4A49E9E9C9A94928987817C7466514F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8F9CA6AEB9BEC4C8CCCCCC
+CCC8C6C6C6C1BEBBB9B7B3B1AEABA9A49C948C7F725F514F555C61676C6C6C726E6C675C4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76767C7C7C79767679767676767676767676767B
+797C7C7C7C7C7C7C7F7F7F7F7F7F8181858789898E8F929294949A9A9C9C9E9E9E9EA1A3A4A4A4A4
+A4A6A6A6A6A6A4A4A4A4A4A19E9E9C9C9C9A9492928E8987847F7C79767676767676767979797C7C
+7F7F818787878989898E8F9292929292929494949494949494949494949494949292929292929292
+928F8E8E8E8E89898989898989898989878787878785878787878989898989898989898989898C8C
+8C8C8C8C8E8F8F929292929292929292929294949494949494949494949494949494949494949494
+949494949494949494999A9A9A9C9C9C9C9C9C9C9C9C9C9E9E9E9E9EA1A3A4A4A4A4A3A4A4A4A4A4
+A4A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4
+A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9
+A9A9A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A999494929292929292
+9292929292929292929292929292928F8F8E8E8E8E8E8C898C8C8E8E8C89898C8E8E8E8E8E898784
+767F818487878789898C8E8E8E8E8E8C898987878581817F7F7C797C8F949CA4A4A4A9AEB1B1B3B6
+B9B9B9BBBBBBC0C1C1C1C1C1C1C6C6C6C9CCCFD4D9D9DFE1E6E7ECECEEEEECECECE1D9D4CCC4BBB6
+B1AEABA9A6A6A4A4A4A4A39E9E9C9994928987847C746A5E4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87949EABB6BEC1C6CCCFCFCF
+CCCCCCCCC6C6C1C0BEB9B7B3B1AEAEA9A19A92877C6A574F51575F666A6C6C72726C6C6157FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C7F7F7C76767676767676767676767474747679
+79797C7C7C7C7C7C7C7F7F7F7F7F7F8184858789898E92929494999A9A9C9C9E9E9E9EA1A3A4A4A4
+A4A4A6A6A6A6A4A4A4A4A4A39E9E9E9C9C9C9994928F8C8987817F7C76767476767679797B7C7C7C
+7F7F848787878989898E8F9292929292929494949494949494949494949494949492929292929292
+928F8E8E8E8E8C898989898989898989898987878787878587878789898989898989898989898989
+898989898C8C8C8E8F8F8F8F8F8F9292929292929292929292929292929292949494949494949494
+949494949494949494999A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9E9E9E9EA1A3A3A1A1A1A3A3A4A4
+A4A4A4A4A4A3A4A4A4A4A3A1A1A3A3A3A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A4A4A4
+A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A39E9E9C9C9C
+9C9C9C9C9C9C9C9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A99999999949492929292929292
+92929292928F8F9292929292928F8F8E8E8E8E8E8E8C898989898C8C8989898E8E8E8E8E89878576
+7F848587878789898C8E8E8E8E8E8E898987878784817F7F7F7C7692999CA3A6A6A6A9AEB1B1B3B6
+B9B9B9BBBBBBC0C1C1C1C1C1C1C4C6C6C8CCCFD3D4D9DFE1E6E7ECECEEECECECE7E1D9D1C8C1B9B3
+B1AEABA9A6A6A4A4A4A4A19E9E9C99928F8987817C746A61544F4F4F4F4F4F4F4F4F4F4F4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B8C99A4AEB9C0C6CCCFCFCFCF
+CFCFCFCFCCC6C6C1C0BBB9B7B1B1AEABA49C94897F7461554F555761676C6C7172716C675D54FFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C7F7F7C7C76747474747676767674747474747676
+767676797C7C7C7C7C7C7F7F7C7F7F8181848787898C8F92929494999A9C9C9C9E9E9E9EA1A3A4A4
+A4A4A4A6A6A4A4A4A4A4A4A39E9E9E9E9C9C9A9492928F8987847F7C767474747676767C7C7C7C7C
+7F7F848787878789898E8F8F92929292929494949494949494949494949494949492929292929292
+928F8E8E8E8E8C898989898989898989898989898787878787878789898989898989898989898989
+89898989898989898C8C8E8E8E8E8F8F8F8F8F929292929292929292929292929292929292949494
+949494949494949494969999999A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9EA1A3A3
+A3A4A4A3A19E9EA1A1A39E9E9E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4
+A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A19E9E9E9E9C9C9C9C
+9C9C9C9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9999999996949494949292928F8F8F9292
+9292928F8F8E8F8F92928F8F8E8E8E8E8E8E8E8E898989898989898989898C8E8E8E8E8C8971767F
+85878787898989898E8E8E8E8E8E8C8989878784817F7F7F7C748E9C9EA4A9A9A9A9AEB1B1B1B3B6
+B9B9B9BBBBBBBEC0C1C1C1C1C1C4C6C6C8CCCFD3D4D9DFE1E6E7ECECECECECECE6DFD4CFC6BEB9B3
+B1AEA9A6A6A4A4A4A4A39E9E9C9A94928E8989847F72675D594F4F4F4F4F4F4F4F4F4F4F4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85929CA6B1BBC1C6CFD1D1D1D3
+D1D1CFCFCCC9C6C4C1BEBBB9B6B1B1ABA69E9A8F85796C5D4F4F555F616A6C717272716C6157FFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C7F7F7C7C7974747474747474747474747474747476
+76767676797C7C7C7C7C7C7C7C7F7F7F8184858789898C8F92929494999A9C9C9E9E9E9E9EA1A3A4
+A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9C9994928F8E89877F7C79767474747676797C7C7C7C
+7F81848787878989898E8F9292929292929494949494949494949494949494949492929292929292
+92928F8E8E8E8E898989898989898989898989898987878787878789898989898989898989898989
+89898989898989898989898C8C8C8E8E8E8E8E8F8F8F8F8F8F8F9292929292929292929292929292
+929494949494949494949494969999999A9A9A9A9A9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9EA1
+A1A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A1A3
+A3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A1A19E9E9E9E9E9E9E9E9C9C9C9C9C
+9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A99999999999494949494949492928F8F8E8E8F8F92
+8F8F8F8E8E8E8E8F8F8F8E8E8E8E8E8E8E8E8C89898989898989898989898E8E8E8E8C8974797F85
+878789898989898C8E8E8E8E8E8C8989878785817F7F7F7C748E9C9EA4A6ABAEAEAEAEB1B1B1B3B6
+B9B9B9BBBBBBBBC0C0C1C1C1C1C1C6C6C6CCCFD3D4D9DFE1E6E7E9ECECECECE7E4D9D3CCC6BEB9B1
+AEABA9A6A6A4A4A4A3A19E9E9C9994928989877F76726A5F55514F4F4F4F4F4F4F4F4F4F4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89949CA9B6C1C6CCCFD3D3D3D3
+D3D3D1CFCFCCC8C6C6C1BEB9B7B3B1AEA69E9A94897F746A574F545761676C6E7272726E675F54FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C7F7F7F7C797674747272727274747474747474747474
+76767676797C79797C7C7C7C7C7C7F7F7F8184858789898E8F92949494999A9C9C9E9E9E9E9EA1A3
+A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9C9A9492928F8987817F7C767474747676797C7C7C7C
+7F81848787898989898E929292929292929294949494949494949494949494949492929292929292
+92928F8E8E8E8E8C8989898989898989898989898989898787878789898989898989898989898989
+898989898989898989898989898989898C8C8E8E8E8E8E8E8E8F8F8F8F8F92929292929292929292
+9292929292949494949494949494949999999A9A9A9A9A9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E
+9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1
+A1A3A3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A3A3A39E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A
+9A9A9A9A9A9A9A9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9A9A9A9A9A9A9A9A9C9C9C
+9C9C9A9A9A9A9A9A9A9A9A9A9A999999999999969494949494949494949492928E8E8E8E8E8E8F8F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898C8E8E8C8989747C7F8587
+89898989898C8E8E8E8E8E8E8E898989878784817F7F7C748E999EA1A6A9AEAEAEAEAEB1B1B1B3B6
+B7B9B9B9BBBBBBBEC0C0C0C1C1C1C4C6C6CCCFD1D4D9DFE1E6E7E7ECECECE7E7E1D9D1C9C1BBB6B1
+AEA9A9A6A6A4A4A4A19E9E9E9C94928E8987817C76716A6157544F4F4F4F4F4F4F4F4F4F4F4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8F99A1AEB9C1C8CFD3D4D4D4D4
+D4D4D3D3CFCFC9C6C6C4C1BEB9B6B1AEA6A19C948E84796C61544F555F616A6E727272726C6157FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74797C7C7C7C7C797674727272727272727474747474747474
+7676767676797979797C7C7C7C7C7C7F7F7F8184878789898F9292949494999A9C9C9E9E9E9E9EA1
+A3A3A4A4A4A4A4A4A4A4A4A4A3A1A19E9E9E9C9C9994928F8987817F7C76747474747676797C7C7C
+7F81848787898989898E929292929292929294949494949494949494949494949492929292929292
+92928F8E8E8E8E8C8989898989898989898989898989898989878989898989898989898989898989
+89898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292
+9292929292929292949494949494949494969999999A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E9E9E9E9E9E
+9E9EA1A3A3A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A6
+A6A4A4A4A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A
+999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999999999999999A9999999999969499999A9A9A
+9A9A9A9999999A9999999999999996949494949494949494949494929292928E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989898E8E8E8989767C81878989
+89898C8C8E8F8F8F8E8E8E8E8C8989878784817F7F7C7489949CA3A4A6AEAEAEAEAEAEB1B1B1B3B6
+B7B9B9B9B9BBBBBEBEBEC0C0C1C1C1C6C6C9CFD1D4D9DFE1E4E6E7ECECE9E7E6DFD7CFC6C1B9B6B1
+AEA9A6A6A6A4A4A39E9E9E9C9A94928989847F7C79746C6159544F4F4F4F4F4F4F4F4F4F4F4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87929AA4B1BEC6CCD1D4D4D4D4D4
+D7D4D4D3D1CFCCC9C8C6C1BEB9B9B3AEA6A39C9992877F746A5C4F545761676C71727272716A5F55
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF7476797C7C7C7C7C767674727272727171727274747474747474
+747676767676767676797C7C7C7C7C7F7F7F8181848787898E9292949494999A9C9C9C9C9E9E9E9E
+9EA3A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9C9A9994928F8987847F7C79747472747476767C7C7C
+7F7F8487878989898C8E929292929292929294949494949494949494949494949292929292929292
+9292928F8E8E8E8E8C8C898989898989898989898989898989898989898989898989898989898989
+8989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292
+92929292929292929292929494949494949494969999999A9A9A9A9A9C9C9C9C9C9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9E9E9E9E
+9E9E9E9EA19EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A999999
+999494999A9A9A9A9A9A9A9999999999999999969494949494949494949494949494949494999996
+9494949494949499969494949494949494949494949494929292929292928F8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898C8E8E8C89797F8487898989
+8C8E8E8F8F92928F8E8E8E8E8989878785817F7F7C7487929AA4A4A6A9AEAEAEAEAEAEB1B1B1B3B6
+B7B9B9B9B9B9BBBBBEBEBEBEC0C1C1C4C6C9CFD1D4D9DFE1E4E6E7ECECE7E7E4DCD4CCC6C0B9B3B1
+ABA9A6A6A4A4A3A19E9E9E9C99928F89877F7C7674726C665F54514F4F4F4F4F4F4F4F4F4F4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7689949CABB7C6C8CFD3D9D9D9D9D9
+D9D9D7D4D3CFCFCCCCC6C6C1BBB9B3AEA9A49C9A948981796C61574F555D616A6C717272726E645D
+5C4FFFFFFFFFFFFFFFFFFFFFFF727476797C7C7C7C76767474727271716E6E6C7172727272747474
+747476767676767676797C7C7C7C7C7C7F7F7F8184858789898F9292949494999A9C9C9C9E9E9E9E
+9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9C9A9994928F8987857F7C7974747272747476797C7C
+7C7F8487878789898C8F929292929292929292949494949494949494949494929292929292929292
+9292928F8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989898989898989
+8989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292
+929292929292929292929292929294949494949494949999999A9A9A9A9A9C9C9C9E9E9E9E9E9E9E
+9C9E9E9E9E9E9E9E9E9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9E9E
+9E9E9E9E9E9E9E9EA1A3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4
+A4A4A4A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A999999999494
+94949494969999999999999996949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494929292929292929292928F8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898E8E8E897C7F878789898C8E
+8E8F8F929292928F8E8E8E8C8989878784817F7C748492999EA6A6A9AEAEAEAEAEAEAEB1B1B1B1B3
+B7B9B9B9B9B9BBBBBBBBBEBEC0C1C1C1C6C8CCCFD4D9DEE1E4E6E7ECE7E6E6E1D9D3CCC6BEB9B1AE
+A9A9A6A6A4A4A19E9E9E9C9C94928C89817C76726E6C6C675F574F4F4F4F4F4F4F4F4F4F4F4F4FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818E99A3AEBEC8CCD1D4D9D9D9D9D9
+D9D9D9D4D4D3CFCFCCCCC6C1BEB9B3AEA9A49E9C948E877F746A5F51545761676C6C727272726A61
+575F5C55FFFFFFFFFFFFFFFF7274747676797C7C767674747472716C6C6C6C6C6C71727272747474
+74747476767676767676797C7C797C7C7C7F7F7F81848787898E9292929494999A9C9C9C9E9E9E9E
+9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A49E9E9C9A9994928F8C89857F7C797472716E72727476797C
+7C7F8184878787898C8F8F9292929292929292949494949494949494949494949292929292929292
+9292928F8E8E8E8E8E8E8E8C8C898989898989898989898989898989898989898989898989898989
+89898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292
+92929292929292929292929292929294949494949494949499999A9A9A9A9A9C9C9C9E9E9E9E9E9E
+9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C
+9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4
+A4A4A39E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A999999999999969494949494
+94949494949494969494949494949494949494949494949494949494949292929292929292929292
+929292929292949494949494949492929292929292929292928F8F8F8F8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898C8E8E6C7C818789898C8E8E8F
+8F92929292928F8E8E8E8C8989878784817F7C747F92999EA6A9A9AEAEAEAEAEAEAEAEAEB1B1B1B3
+B6B9B9B9B9B9B9BBBBBBBBBBBEC1C1C1C6C6CCCFD3D9DCE1E1E4E6E7E6E4E1DFD9CFC8C1BEB7B1AE
+A9A9A6A6A4A4A19E9E9C9C9A948F89857F676A6C6C67666A5F59514F4F4F4F4F4F4F4F4F4F4F4FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87929CA6B4C4CCCFD4D9D9D9D9D9D9
+D9D9D9D9D4D4D3CFCFCCC6C1C0B9B3AEA9A49E9C99928981766C61574F555D616A6C6C7272727267
+5F515F5F5CFFFFFFFFFFFF717272747476767679767474747272726C6C6C6C6C6C6C6E7272727474
+7474747676767676767676797979797C7C7C7F7F81848787898C8F92929494999A9A9C9C9E9E9E9E
+9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9C9A9994928F898987817F7C74726E6C6C7274767679
+7C7C7F81848787898C8E8E8F92929292929292949494949494949494949494949292929292929292
+929292928F8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989898989
+898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292
+92929292929292929292929292929292949494949494949494999A9A9A9A9A9C9C9C9E9E9E9E9E9C
+9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9C9C9C9C9C9C
+9C9C9C9E9C9C9C9C9C9E9E9E9EA1A3A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A4A4A4A3A3A3
+A3A3A19E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9A9999999999999999999694949494949494949494
+94929292949494949494949494949494949494949292929292929292929292929292929292929292
+929292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898E8E747F8487898C8E8F8F8F92
+9292929292928E8E8E8E8989898785817F7C747989999CA4A6A9ABAEAEAEAEAEAEAEAEAEB1B1B1B1
+B3B7B9B9B9B9B9B9BBBBBBBBBEC0C1C1C4C6CCCFD1D4D9DFE1E1E6E6E4E1E1DCD4CFC6C1BBB6B1AE
+A9A6A6A6A4A49E9E9E9C9C99928E87816C747676726A5F61615C554F4F4F4F4F4F4F4F4F4F4F4FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C89949EACBCC8CFD3D4D9DCDCDCDCDC
+DCDCD9D9D9D4D3D1CFCCC6C1C0B9B3AEA9A6A19C99948C877C746A5F55545761676A6C727272726C
+64595F5F5F5F5C57FFFF6C6A6C6C71727474767676747472727272716C6C6C6C6C6C6C6C71727274
+747474747676747474747676797676797C7C7F7F8184858787898E9292949494999A9C9C9C9E9E9E
+9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9C9A9494928E898987817F7C76746E6A6C6C72747676
+797C7C7F81848787898C8E8E8F8F9292929292949494949494949494949494949292929292929292
+929292928F8F8E8E8E8E8E8F8F8E8E8C8C8C8C8C8E8C8C8989898989898989898989898989898989
+898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8F8F8F8E8F8F92929292929292
+92929292929292929292929292929292949494949494949494999A9A9A9A9A9C9C9C9C9C9E9E9C9C
+9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9C9C9C9A
+9A9C9C9C9C9C9C9C9C9C9C9E9E9E9E9EA1A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E
+9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A999996949494949494949494949494949494949292
+92929292929294949494949494929292929292929292929292929292928F8F8F8F8E8E8E8F8F8F8F
+8F8F8F8F8E8F8F929292929292929292928F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E898989898989898989898989898989898C8E747F85898C8E8F8F92929292
+92929292928F8E8E8E8C89898787847F7C767C89949C9EA6A9A9AEAEAEAEAEAEAEAEAEAEB1B1B1B1
+B1B6B7B9B9B9B9B9B9B9BBBBBBC0C1C1C1C6C8CCCFD4D9DCDFE1E1E4E1E1DFD9D3CCC6BEB9B3B1AB
+A9A6A6A6A4A39E9E9C9C9C9492896A72767F857C746C615F5F5C574F4F4F4F4F4F4F4F4F4F4F4F4F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818E9AA4B4C1CFD3D4D9DCDCDEDFDFDF
+DFDFDCD9D9D4D3D1CFCCC6C1BEB9B1AEA9A6A39C9A99928981766C615751555D616A6C6C72727272
+6A61555F5F5F5F5F5D5C5C61676A6C717272747474747472727272726C6C6A6A6A6A6A6C6C6E7272
+747474747474747474747476767676767C7C7F7F7F81858787898C9292949494999A9C9C9C9E9E9E
+9E9EA1A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9C9A9492928C898787817F7C7674716C6A6C6C727476
+76797C7C7F81848789898C8C8E8F9292929292929494949494949494949494949494929292929292
+9292929292928F8F8E8E8F8F8F8F8E8F8F8F8F8F8F8E8E8C8C8989898C8C8C8C8C89898989898989
+8C8989898989898989898C8C8989898C8E8F8F8E8E8E8E8E8E8E8F9292928F8F9292929292929292
+9292929292929292929292929292929294949494949494949494999A9A9A9A9A9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9A9A9A9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A
+9A9A9A9C9C9A9A9A9C9C9C9C9C9C9E9E9E9E9EA1A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E
+9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9A96949494949494949494949494949494929292929292
+9292929292929492929292929292929292929292929292928F8E8E8E8C8C8C89898989898C8E8E8E
+8E8E8E8C8C8C8E8F8F9292928F8F8F8F8F8E8E8E8E8C8C8E8E8E8E8E8E8E8C8C8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898E6A7F87898E8F8F929292929292
+92929292928F8F8E8E89898787817F7C767C89949C9EA4A9A9ABAEAEAEAEAEAEAEAEAEAEB1B1AEB1
+B1B3B6B6B9B9B9B9B9B9B9BBBBBEC0C1C1C6C8CCCFD3D9D9DFDFE1E1DFDFD9D4D1C8C1BEB9B3AEA9
+A9A6A6A4A4A19E9E9C9C9A948F6C747C7F87847F746C675F5F5D57544F4F4F4F4F4F4F4F4F4F4F4F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7487929CABB7C6D3D4D9DCDFDFDFDFDFDF
+DFDFDCD9D9D4D3D1CFCCC6C1BEB9B1AEA9A6A49E9C9A948C877F746A5F554F575F666A6C72727474
+6E675F5F6161616161615F5F61676A6C71727272727472727171716E6E6C6A6A6A6A6A6A6C6C7172
+72747474747474747474747476767676797C7C7F7F8184878789898F92929494999A9C9C9C9E9E9E
+9E9EA1A4A4A4A4A4A4A4A4A4A4A4A19E9E9C9C9A9694928E898787817F7C7674726C6A6A6C6C7274
+7676797C7C7F8187878989898C8F9292929292929294949494949494949494949494949292929292
+929292929292928F8F8F8F929292929292929292928F8F8E8E8E8E8E8E8F8F8F8E8C8C898C8C8C8E
+8E8E8C8C89898C8C8E8E8E8E8E8E8C8E8F8F928F929292928F8F9292929292929292929494929292
+9292929292929292929292929292929292949494949494949494999A9A9A9A9A9C9A9A9A9C9C9C9C
+9A9A9A9A9A9A9A9C9C9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A99999A9A9A9999
+9499999A9A9A99999A9A9A9C9C9C9C9C9C9E9E9E9E9E9E9EA1A3A4A4A4A4A4A4A4A3A19E9E9E9E9E
+9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A999694949494949494949494949292929292929292929292
+928F8F929292929292929292929292929292928F8F8F8F8E8C898989898989898987898989898989
+898989898989898C8C8E8F8E8E8E8E8E8C8C8C8989898C8E8E8E8E8C8C8989898C8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E898989898989898989898989898989898C767F87898C8F9292929292929292
+9292929292928F8E8C898987817F7C767F89929C9EA3A6A9ABABAEAEAEAEAEAEAEAEAEAEB1AEAEAE
+B1B1B3B3B6B7B9B9B9B9B9BBBBBBC0C1C1C4C6C9CCD1D4D9DCDFDFDFDFDCD9D3CFC6C1B9B6B1AEA9
+A9A6A6A4A4A19E9C9C9C99926C747C848787847F76716A615F5F57554F4F4F4F4F4F4F4F4F4F4F4F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8994A4AEBECCD4D9D9DFDFDFDFDFDFDF
+DFDFDCD9D9D4D3D1CFCCC6C1BEB9B1AEA9A6A49E9C9C999289847C72675D55555C61676A6C727474
+746C665961616161616161616166676A6C6C7172727272716E6C6C6C6C6C6C6A6A6A6A6A6A6C6C71
+7274747474747474747474747676767676797C7F7F8184878787898F92929494999A9A9C9C9E9E9E
+9E9E9EA3A3A4A4A4A4A4A4A4A4A3A19E9E9C9C9A9994928F8C8987847F7C7974726C6A6A6A6C6C72
+7476767B7C7F7F84878789898C8E8F92929292929292929494949494949494949494949494929292
+929292929292929292929292929292929292929292928F8F8F8F8F9292929292928F8E8E8E8F8F8F
+92928F8F8E8E8E8F8F929292928F8F8F8F9292929292929292929292929292929292949494949494
+9292929292929292929292929292929292929494949494949494999994999A9A9A9A99999A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A99969999999994
+94949494999494949499999A9A9A9C9C9C9C9C9C9C9C9C9C9E9E9E9E9EA1A1A3A39E9E9E9E9E9E9E
+9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A99949494949492929292929292929292929292928F8F8F8F
+8E8E8F8F92929292929292928F8F8F8F8F8F8F8E8E8E8E8989898787878787878787878787898989
+898989898989898989898C8C8C8C8989898989898989898C8C89898989898989898C8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8C89898989898989898989898989898C8E767F87898C8F929292929494929292
+9292929292928F8E898987817F7C767F89929A9EA4A6A9ABABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEB1B1B1B3B3B6B7B9B9B9B9BBBBBEC0C1C1C6C8CCCFD3D4D9DCDCDCD9D9D4CFCCC6BEB9B3B1AEA9
+A6A6A6A4A49E9E9C9C9C6A72747C84878787817F79726C665F5F5C55544F4F4F4F4F4F4F4F4F4F4F
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818F9CA6B6C4D1D9D9DCDFDFDFDFDFDFDF
+DFDFDCD9D9D4D3D1CFC9C6C1BEB7B1AEA9A6A4A39E9C9A948F877F766C615755575F646A6C727474
+74726A6655616461616161676667676A6C6C6C6E6E6C6C6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6C6C
+7172747474747474747474747476767676767C7F7F8184878787898E92929494969A9A9C9C9C9E9E
+9E9E9EA1A1A3A4A4A4A4A4A4A4A19E9E9E9E9C9A969492928F898987817F7C74726C6A676A6A6C6E
+727476797C7C7F8185878989898E8F92929292929292929294949494949494949494949494949492
+92929294949292929292929292929292949492929292929292929292929292929292928F92929292
+92929292928F92929292929292929292929292929494949494949494949492929494949494949494
+94949492929292929292929292929292929292929494949494949494949494999999949494999999
+999999999999999A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9A9A9A9A9996949494999494
+94949494949494949494949499999A9A9A9C9C9C9C9A9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C
+9C9C9C9C9C9A9A9999999999999999999694949292929292929292929292928F8F8F8F8F8E8E8E8E
+8C8C8E8F928F8F8F8F8F8F8F8E8E8E8E8E8E8C8C8989898987878787878787878787858587878787
+8787878787878789898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E
+8E8E8E8E8E8E8E8C89898989898989898989898989898C8E7681878C8E9292929294949494949292
+92929292928F8E8C8987817F7C767F89929A9EA4A6A9ABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEB1B1B1B1B3B3B6B7B9B9BBBBBBC0C1C1C6C6C9CFD1D4D9D9D9D9D9D9D3CFC6C1BEB6B1AEABA9
+A6A6A4A4A39E9E9C9C6C72767C8487878785817F7C726C6A615F5D57554F4F4F4F4F4F4F4F4F4F4F
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7687949EAEBCC6D4D9D9DFDFDFDFDFDFDFDF
+DFDFDCD9D9D4D3CFCFC9C6C1BEB6AEAEA9A6A4A49E9E9C99928C857C746A5F57515961666C717474
+74746E6A61616666666666676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A67676A6A6A6A6C
+6C7272747474747272747474747476767676797C7F7F81848787898C9292949494999A9C9C9C9C9E
+9E9E9E9E9EA1A3A3A4A4A4A4A39E9E9E9E9E9C9A99949492928F8C8987817C7674716A67676A6A6C
+717474797C7C7F7F81878789898C8F92929292929292929294949494949494949494949494949494
+92929494949494929494949494929494949494949292929292929292929294949494929292929292
+94949492929292929292949494949492929494949494949494949494949494949494949994949494
+94949494949492929292929292929292929292929292949494949494949494949494949494949494
+949494949699999999999999999A9A9A9A9A9A9A9A9A9A9A9C9C9A9A9A9999999994949494949494
+94949494949494929292949494949499999A9A9A9999999A9A9A9A9C9C9C9C9C9C9C9C9A9A9A9A9A
+9A9A9A9A9A9999999996969494949494949494929292929292928F8F8F8F8F8E8E8E8E8C8C8C8989
+898C8E8E8E8E8E8E8E8E8E8C8C898989898989898787878787858585858585858585858585878787
+878787878787878789898989898989898989898989898989898989898989898989898C8E8E8E8E8E
+8E8E8E8E8E8E8E89898989898989898989898989898E6A7C81878C92929292929494949494949492
+929292928F8E8E8987847F7F767C89929A9EA4A6A9AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAB
+AEAEAEB1B1B1B1B1B3B3B6B9B9BBBBBEC0C1C4C6C8CCCFD3D4D9D9D9D4D4CFC9C6C1B9B3B1AEABA9
+A6A4A4A4A39E9E9C7274767C818787878584817F7C74716C645F5F5755514F4F4F4F4F4F4F4F4F4F
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8999A4B1BECCD9D9DCDFDFDFDFDFDFDFDF
+DFDFDCD9D9D4D3CFCCC8C6C1B9B6AEAEA9A6A6A4A49E9C9A9492897F7671665C55555F616A6C7274
+7474746C6A5F6167676767676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6A676A6A6A6A6A
+6C6E72727272727272747474747474767676767C7C7F81818787898C8F92929494999A9C9C9C9C9C
+9C9E9E9E9E9E9EA1A3A3A4A4A19E9E9E9E9E9C9C9A9A99949492928F8E87817C76746C6A67676A6A
+6C7274767C7C7C7F7F858789898C8E8F929292929292929294949494949494949494949494949494
+94949494949494949494949494949494949494949494929294949494949494949494949494949492
+94949494949494949494949494949494949494949494969996949494949494949699999999999994
+94949494949494949292929292929292929292929292929292929292929292929494949292929494
+949494949494949494949496999999999999999A9A9A9A9A9A9A9999949496999494949494949494
+94929292949492929292929292949494949494949494949494949999999A9A9A9A9A9A9A9A9A9A99
+99999999999494949494949494949494949292928F8F8F8F8F8F8E8E8E8E8C8C8C89898989898989
+89898C8C8C8989898989898989898787878787878585848484818184848585858585858585878785
+8585858585878787878787878789898989898989898989898989898989898989898C8E8E8E8E8E8E
+8E8E8E8E8E8E8C8989898989898989898989898C8E767F87898E9292929294949494949494949492
+92928F8F8E8C898784817F767C87949A9EA4A6A9AEAEAEAEAEB1AEAEAEAEAEAEAEAEAEAEABABABAB
+ABAEAEAEAEB1B1B1B1B1B3B6B9B9BBBBBEC1C1C6C6C9CFCFD4D4D4D4D3D1CCC6C1BEB7B1AEAEA9A6
+A6A4A4A3A19E717274797C81878787858481817F7C76726C67615F5957554F4F4F4F4F4F4F4F4F4F
+4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858F9CA6B6C4D1D9D9DCDFDFE1E1E1E1E1E1
+DFDFDCD9D9D4D3CFCCC6C4BEB9B1AEAEA9A6A6A6A49E9C9A94928C857C726A5F5755575F666C7274
+747474726C6A576467676767676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A67676A6A6A6A
+6A6C6E72727272727272747474747476767676797C7F7F81848789898F92929294949A9A9A9A9A9C
+9C9C9E9E9E9E9E9E9EA1A3A39E9E9E9E9E9E9C9C9C9C9C9A99949494928E877F7C76726C6A67676A
+6C6C7274767C7C7F7F848789898C8E8F929292929292929294949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494999A99999999969494999A9A9A9A9A9A9999
+99969494949494949494929292929292929292929292929292929292929292929292929292929292
+92929294949494949494949494949494949699999999999999999494949494949494949494949492
+92929292929292929292929292929292929292929292929294949494949494949494949494949494
+9494949494949494949494949494949492928F8F8E8E8E8E8E8C8C8C898989898989898989898987
+8989898989878787878787878787858584848481818181817F7F8181848484848485858585858585
+8585858585858787878787878787898989898989898989898989898989898989898E8E8E8E8E8E8E
+8E8E8E8E8E8C8989898989898989898989898E8E7C8187898F929292949494949496999694949492
+928F8E8E89898785817F767C87929A9EA4A9ABAEAEB1B1AEB1B1AEAEAEAEAEAEAEABAEABABA9A9A9
+A9A9ABAEAEAEAEB1B1B1B1B3B6B9B9BBBBBEC1C1C6C6CCCFD1D3D1CFCFCFC6C4BEB9B6B1AEABA9A6
+A4A4A4A19E727274767C7F8484848584817F7F7F7C76726C6A66615D57554F4F4F4F4F4F4F4F4F4F
+4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C89949EABB9C6D4D9DCDFE1E1E1E1E1E1E1E1
+DFDFD9D9D9D4D1CFC9C6C1BEB7B1AEAEA9A9A6A6A6A39E9C94928E877F746C675F57545C616A7174
+74767676726C66556467676A6A6A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6767676A6A6A
+6A6C6C6E72727272727272747474747476767676797C7F7F818787898C8E9292929499999A9A9A9A
+9C9C9C9C9E9E9E9E9E9E9EA19E9E9E9E9E9E9E9C9C9E9E9C9C9A9A99949289877F7C74726A6A6767
+6A6C727476797C7F7F81878989898E8F929292929292929292949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949499999A9A9A9A99999999999A9A9A9A9A9A9A9A
+9A999994949494949494949494929292929292928F8F9292928F8F8F8F8F8F929292928F8E8E8F8F
+8F929292949494949494949494949494949494949494969994949494949494949494949292929292
+92929292929292928F8F8F8F8F92929292928F8F8F8F929292929292929294949494949494949494
+94949292929494949494929292929292928F8E8E8C8C8C8989898989898989898989878787878787
+8787878787878585848484848481818181817F7F7F7F7F7F7F7F7F81818181818184858585858585
+85858585858585858585858787898989898989898989898989898989898989898C8E8E8E8E8E8E8E
+8E8E8E8E8E89898989898989898989898C8E767F85898E8F92949494949494949999999994949492
+928F8E89898787847F797C8792999EA4A9AEAEB1B1B1B1B1B1B1B1AEAEAEAEAEAEABABA9A9A9A9A9
+A9A9A9ABABAEAEAEAEB1B1B1B3B6B9B9B9BBBEC1C1C6C6CCCCCFCFCCCCC8C6C1BBB7B1AEAEA9A6A6
+A4A4A371727474767C7F7F81818181817F7F7F7F7C74726E6A67615F5755544F4F4F4F4F4F4F4F4F
+4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818C99A4AEBECCD9DCDFDFE1E1E1E1E1E1E1E1
+DFDFD9D9D4D3CFCCC6C4C0B9B6AEAEAEA9A9A9A6A6A49E9C99928E878179726A615C55515F676C72
+7476767674726C616166676A6A6A6A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A67676767676A6A
+6A6A6C6C71717171716E72727472727474747474767B7C7F8184878989898E929294949494999999
+9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA39E9E9C9C9C99928F89847F79746C6A6767
+6A6A6C7274767C7C7F81858789898C8E929292929292929292949494949494949494949494949699
+94949494999996949494949494949494949494949494949494949494949494949494949494949494
+949494949494949494949494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A969494949494949494949292929292928F8F8E8F8F8F8F8E8E8E8E8E8F8F8F8F8E8E8E8E8E
+8E8E8F9292929292929294949494949494949494949494949494929292949494949292929292928F
+8F8F8F8F9292928F8F8E8E8E8F8F8F8F8F8E8E8C8C8C8E8E8F8F8F8F929292929292929292929292
+929292929292929292929292929292928E8C89898989898989898989898787878787878787878785
+85858585848181818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585858585
+858585858585858585858787878989898989898989898989898989898989898C8E8E8E8E8E8E8E8E
+8E8E8E8E8C8989898989898989898C8E747C7F87898F929294949494949499999A9A9A9994949292
+8F8E8C898987857F7C7C878E949EA4A9AEB1B1B1B6B3B1B1B1B1B1AEAEAEAEAEAEABA9A9A9A9A6A6
+A6A6A9A9A9ABABAEAEAEAEB1B1B3B6B9B9B9B9BEBFC1C4C6CCCCC8C6C6C6C1BEB9B3AEAEABA9A6A4
+A46E72727474767C7F7F7F7F817F7F7F7F7F7F7C7C7674716C6A615F5957554F4F4F4F4F4F4F4F4F
+4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7687929CA6B4C1D1DCDFDFE1E1E1E1E1E1E1E1E1
+DFDCD9D9D4D1CFC9C6C1BEB9B1AEAEABA9A9A6A6A4A39E9C99948F89817C746C675F575551616A72
+747676767674726C5F6166676A6A6A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6767676767676A
+6A6A6A6C6C6E6E6C6C6C6E72727272727274747474767C7C7F8184878789898E9292929494949494
+999A9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A19E9C9A94928C87817C76726C6A67
+676A6A6C7274797C7F7F848789898C8E8F9292929292929292949494949494949999969494949999
+99949496999A99999494949494949494949494949699949494949494949494949494949494949494
+9494949494949494949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A999494949494949494949292929292928F8E8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8F929292929292929292929292949494949494949492929292929292929292928F928F8F8E
+8E8E8E8E8F8F8F8F8E8E8C8C8E8E8E8C8C898989898989898C8C8C8C8E8E8E8E8E8F8F8F8F8F8F8F
+8F8E8E8E8F9292929292928F8F8F8E8E898989898989898987878787878787878787858585858585
+8585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181818181818485858585858585
+858585858585858585878787898989898989898989898989898989898989898E8E8E8E8E8E8E8E8E
+8E8E8E8E8C89898989898989898C727C7F8789898F9292949494969999999A9A9A9A999494949292
+8F8E898987857F7C7C818C949CA4A9AEB1B3B6B7B9B6B3B1B1B1B1AEAEAEAEAEABABA9A9A6A6A6A6
+A6A6A6A6A9A9A9ABABAEAEAEB1B1B3B6B7B9B9B9BEBEC1C4C6C6C6C6C4C1BEB9B6B1AEAEA9A6A6A4
+727274747476797C7C7F7F7F7F7F7F7F7F7C7C7C7C7674726C6A66615D5755514F4F4F4F4F4F4F4F
+4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F89949EABB7C4D3DCDFDFE1E1E1E1E1E1E1E1E1
+DFDCD9D4D3CFCCC6C4C0B9B6B1AEAEA9A9A6A6A4A4A19E9C99948F89847C76726A615D575551676C
+72747676797974726C5F6166676A6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A67676767676767
+6A6A6A6A6C6C6C6C6C6C6C7172727272727274747476767C7F7F8184858787898E92929292929494
+9494999A9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9EA1A3A4A4A4A4A49E9C99948F89877F7C74726A67
+67676A6A6E74767C7C7F81878789898E8F929292929292929292949494949499999A99999499999A
+9A999699999A9A999994949494949699949494949999999694949494949496999494949494949494
+9494949494949494949494949494949494949499999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999
+9A9A9A99949494949494949494929292929292928F8E8E8E8E8E8E8E8E8E8C898C8C8C8E8E8E8E8E
+8E8E8E8F8F9292929292929292929292929292929292929292929292929292928F8F8E8F8F8F8E8E
+8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989898989898989898989898C
+8C8C89898C8E8E8E8E8E8C8C89898989898989878787878787878787878585858585858585858585
+85858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184848484848485858585858585858585
+85858585878787878787878989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8C89898989895F767C818487898E929494949499999A9A9A9A9A9A9A9A999494929292
+8E8C898785817C7C7F89929CA4A6AEB1B3B6B7B9B9B7B6B3B1B1B1AEAEAEAEAEABA9A9A9A6A6A6A6
+A6A6A6A6A6A6A9A9A9ABABAEAEB1B1B3B6B6B6B9B9B9BEBFC1C1C1C1BEBEBBB9B1AEAEABA9A67172
+747476767676797C7C7C7F7F7F7F7F7F7C7C7C7C7C7674726C6A67615F5757544F4F4F4F4F4F4F4F
+4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848C99A4AEBCC9D9DFDFE1E1E1E1E1E1E1E1E1DF
+DED9D9D4D1CFCCC6C1BBB9B3AEAEABA9A6A6A4A4A49E9C9A99928F89877F76726A665F575755516A
+7174767979797674746A5F6166676A6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A676767676767
+676A6A6A6A6C6C6C6C6C6C6C7172727171717274747476797C7C7F7F81848787898C8E8F8F929294
+949494999A9C9C9C9C9E9E9E9E9E9E9EA3A1A19EA1A4A4A4A4A4A39E9C9A94928C87847C76746E6A
+6767676A6C7274797C7F81848789898C8F8F9292929292929292949494949496999A9A9999999A9A
+9A9A99999A9A9A9A999996949494999999969499999A9A9999969494949499999999969494949494
+94949494949494949494949494949999999494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999
+99999996949494949494949494929292929292928F8E8E8E8E8E8E8E8E8E8C89898989898C8C8C8C
+8E8E8E8E8E8F8F8F8F8F8F929292929292929292929292928F8F8F8F8F92928F8F8E8E8E8E8E8E8E
+8E8E8E8C898C8C8C8C89898989898989898989898989898989898989898989898787878787878989
+89898989898989898989898989898787878787878787878785858585858585858585858584848481
+818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858585858585858585858585858585
+858585878787878787878989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8C8989727C7F8489898C8F9294949499999A9A9A9C9C9C9A9A9A9A9A96949492928F
+8E898785817F7C7F87929AA1A6AEB1B6B7B7B9B9B9B6B6B3B1B1B1AEAEAEAEABABA9A9A6A6A6A6A4
+A4A4A4A6A6A6A6A6A9A9A9ABAEAEB1B1B1B1B3B6B7B9B9BEBEBEBEBEBBB9B9B3B1AEABA9A6727476
+7C7C7C7C7976797C7C7C7F7C7F7F7C7C7C7C7C7C7C7674726E6A67615F5C57554F4F4F4F4F4F4F4F
+4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C87929CA6B1BFCCD9DFE1E1E1E1E1E1E1E1E1E1DF
+DCD9D7D3CFCCC8C4C0BBB7B1AEABA9A6A6A6A4A4A19E9C9A94928F89877F79746C67615C57555566
+6C727479797C7C7674746A5F6166676A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A676767676767
+67676A6A6A6A6C6C6C6C6C6C6C716E6E6E6C717272747476797C7C7C7F7F8185878989898C8F9292
+94949494999A9C9C9C9E9E9E9E9E9EA1A4A3A3A3A3A4A4A4A4A4A39E9E9C9A948F89877F7C76726C
+676767676A6C7276797C7F818787898C8E8F8F92929292929292949494949494999A9A9A99999A9A
+9A9A9A9A9A9A9A9A9A9A99999499999A9A9999999A9A9A9A9A9999949499999A9A99999996949494
+9494949494949494949494949499999A9999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494
+9496999494949494949494949292929292929292928F8E8E8E8E8E8E8E8C89898989898989898989
+898C8C8C8C8E8E8E8E8E8E8F8F8F8F8F9292929292928F8E8E8E8E8E8E8F8F8F8E8E8E8E8E8E8E8E
+8E8E8C89898989898989898989898989898989898987878787878787878787878785878787878787
+89898989898787878787878787878787878787878584858585858585858585848484818181817F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181818485858585858585858585858585858585
+8585878787878989898989898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E6E767F8789898F8F9292949494999A9A9A9C9C9C9C9C9C9C9A9A9A9994949492928E
+898784817F7C7F878F9A9EA6ABAEB6B9B9B9B9B9B9B6B3B3B1B1B1AEAEAEAEABA9A9A9A6A6A6A6A4
+A4A4A4A4A4A6A6A6A6A6A9A9A9AEAEB1B1B1B1B1B6B6B7B9B9B9B9B9B9B7B6B1AEABA97274767C7F
+81817F7C7C76767C7C7C7C7C7C7C7C7C7C7C7C7C7C767472716C6A61615D5755544F4F4F4F4F4F4F
+4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F89929EA9B7C4D1DFDFE1E1E1E1E1E1E1E1E1E1DF
+D9D9D4D1CFCCC6C1BBB9B3AEABA9A9A6A6A4A4A19E9E9C9A94928F8987817C746C6A615F59575555
+6A7172767C7C7C7C7976746A5F6166676A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6A6767676767
+6767676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C717272747476797C7C7C7F7F8484878789898C8F92
+9292949494999A9C9C9C9E9E9E9E9E9EA3A3A3A4A4A4A4A4A4A3A19E9E9C9A94928987847F7B7472
+6C676767676A6C7476797C7F848789898C8E8F8F929292929292949494949494999A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9999999A9A9A9A99999A9A9A9A9A9A999999999A9A9A9A9A9A99999994
+94949494949494949999969494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694
+94949494949494949494949292929292929292928F8F8E8E8E8E8E8E8C8989898989898989898989
+898989898989898C8C8C8C8E8E8E8E8E8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8C8C89898989898989898989898989898989898787878787878787878787878585858585858787
+87878787878787878787878787878585848484818184848585858484848181817F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184848484858585878787878787878787878787878787
+8787878787898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E7F818789898F929294949494999A9A9C9C9C9C9C9E9C9C9C9C9A9A9A99949492928F8E
+8987817F7C7F848E949EA4ABAEB4B9BBB9B9B9B9B9B6B3B1B1B1B1AEAEAEABABA9A9A6A6A6A6A4A4
+A4A3A3A4A4A4A4A6A6A6A6A6A9A9AEAEAEAEAEB1B1B1B3B6B6B6B7B6B3B3B1B1AEA974767C7F8187
+87817F7C7C79797C7C7C7C7C7C7C7C7C7C7C7C7C79767472726C6A66615F5757554F4F4F4F4F4F4F
+4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72858E94A3AEB9C6D4DFE1E1E1E1E1E1E1E1DFDFDFDC
+D9D9D4CFCCC8C6C0BBB7B1ABA9A9A6A6A4A4A39E9E9E9C9A9492928987847C746E6A615F5D575757
+556C7274797C7C7C7C7976766C616166676A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6767676767
+676767676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C71727274747676797C7C7F818184878789898E8F
+9292929494969A9C9C9C9E9E9E9E9E9E9EA1A1A3A3A3A4A4A4A39E9E9C9C9A96928E8987817C7974
+726A6767676A6A717476797C7F85878789898E8E8F8F92929292929494949494999A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A99999A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9999
+99969494949494969999999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994
+949494949494949494949292929292929292928F8F8E8E8E8E8E8E8C898989898989898989898989
+898989898989898989898989898C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8C8989898989898989898989898987878787878787878585858585878787858585858585858587
+878787878585858584848484848181818181817F81818484848181817F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858585878787878787878787878787878787878787
+8787878789898989898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E84878C929292949999999A9A9A9A9C9C9C9C9E9E9E9E9E9C9C9C9C9A9994949492928F89
+87847F7F7F8489949CA4A9B1B4B7BEBEBBB9BBB9B7B6B3B1B1B1B1AEAEABA9A9A9A9A6A6A6A6A4A4
+A4A3A1A3A3A4A4A4A4A6A6A6A6A9A9ABABAEAEAEAEB1B1B1B1B3B3B1B1B1AEAEA97C7C7C81878989
+87847F7F7C7C797C7C7C7C7C7C7C7C7C7C7C797979767474726C6A67615F5C5755514F4F4F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F87929AA6B1BECCD9DFE1E1E4E1E1E1E1E1DFDFDFDC
+D9D4D3CFCCC6C1BEB9B3AEA9A9A6A6A6A4A4A19E9E9C9C9A9494928F89877F76726A615F5D5C5757
+57546C74767C7C7C7C7C7979796C674F66676A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6767676767
+67676767676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C71727274747676797C7C7F818184878789898E
+929292929494999A9C9C9E9E9E9E9E9E9E9E9E9EA1A1A3A3A4A19E9E9C9C9C99948F8987857F7C76
+746E6A6767676A6C7274767C7F8185878789898E8E8F8F92929292949494949494999A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+99999999949494999A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994
+9494949494949494949492929292929292928F8F8E8E8E8E8E8E8C89898989898989898989898989
+898989898989898989898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8C898989898989898989898989898787878787878787858585858484848484848484848484848484
+8484848181818181818181817F7F7F7F7F7F7F7F7F81817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F8181818181848585858587878787878989898989898989898989898989
+89898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E76878C9294999A9A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9C9C9C9C9A99949492928F8E89
+87817F7F8489949CA3A6AEB6B9B9BEBEBBBBBBB9B7B3B3B1B1B1AEAEABA9A9A9A6A6A6A6A6A4A4A4
+A3A19E9EA1A3A3A4A4A4A4A4A6A6A6A9A9A9A9ABABAEAEAEB1B1B1B1AEAEAEAB7F7F7F7F87898C89
+8784817F7C7C7C7C7C7C7C7C7C7C7C7C7C7979797976747472716A6761615F5755544F4F4F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8189929CA9B3C1CFD9E1E1E4E4E4E1E1E1E1DFDFDCD9
+D9D4D1CFC8C6C0BBB7B1ABA9A6A6A6A4A4A39E9E9E9C9C9A999494928E898179726A615F5D5C5757
+5757547274767C7C7C7F7C7C7C7972675F666A6C6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A67676767
+67676767676A6A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C71727474747476767C7C7F7F818487878989
+8E8F9292929494999A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9EA3A39E9E9C9C9C9A94928E8987857F7C
+76726C6A6767676A6C7274767C7F8184878789898C8E8F8F929292949494949494999A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A99999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9996
+9494949494949494949292929292929292928F8E8E8E8E8E8E8C8989898989898989898989898989
+8989898989898989898989898989898989898989898989898C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8C
+898989898989898989898989898787878585858585858585858484817F818181818181818181817F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F8184848585858587878787878789898989898989898989898989898989
+8989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E7B8792949A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A96949492928F8987
+847F7F8489929A9EA6AEB3B9BBBEC1C1BEBBBBB9B7B3B1B1B1B1AEAEA9A9A9A6A6A6A6A6A4A4A4A4
+A39E9E9E9E9EA1A3A3A4A4A4A4A6A6A6A6A6A6A6A9A9ABAEAEAEAEAEAEAB7F7F7F818787898C8C89
+8784817F7C7C7C7C7C7C7C7C7C7C7C7B797979797676747472716C6A66615F5957554F4F4F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C858C94A1ABB7C4D1DFE1E1E4E4E4E1E1E1DFDFDFDCD9
+D9D3CFCCC6C1BEB9B3AEA9A6A6A4A4A4A4A19E9E9C9C9C9C9A9994949289877F746C645F5F5C5957
+575757517274797C7C7C7F7F7F7C766E675F676A6C6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A67676767
+6767676767676A6A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6E72727474747476767C7F7F7F8184878789
+898C8E8F929294949A9A9C9C9C9C9C9E9E9E9E9E9E9E9E9EA3A39E9E9E9C9C9A9492928E8987847F
+7C74726C6A6767676A6E7274767C7F8184878789898C8E8E8F9292949494949494999A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A999A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+94949494949494949494929292929292928F8E8E8E8E8E8E8E898989898989898989898989898989
+89898989898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8C89
+8989898989898989898989898787878585858585848184848484817F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181818181
+7F7F7F7F7F7F7F7F7F7F81848585858587878787878787898989898989898C8C8C8C8C8C8C8C8C8C
+8C8C8C8C8C8C8C8C8C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+7C8992949A9C9C9E9E9E9E9E9E9E9E9EA1A1A3A3A4A3A3A1A19E9E9C9C9C9A99949492928F8E8985
+7F7F818792949EA6ABB1B9BBC0C1C4C1C0BBBBB9B7B3B1B1B1AEAEABA9A6A6A6A6A6A4A4A4A4A4A3
+A19E9E9E9E9E9E9EA1A1A3A3A4A4A4A4A6A6A6A6A6A6A9A9ABABABA96E818184848587898C8C8C89
+8785817F7F7C7C7C7C7C7C7C7C7C7979797976767676747472716C6A6661615C5755514F4F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F87929AA4AEB9C6D4E1E1E4E4E4E4E1E1E1DFDFDFD9D9
+D4D1CCC6C1BEB9B7B1ABA6A6A4A4A4A4A39E9E9E9E9E9E9C9C9C9A9A948F89847972675F5D595957
+575757555172747C7C7C7F7F7F7C7C746C6A5F676A6C6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A676767
+666666666666676A6A6A6A6A6C6C6C6C6C6C6C6C6C6C6C7172747474747476797C7F7F7F81848787
+8989898E8F929494999A9A9A9C9C9C9C9C9C9E9E9E9E9E9EA1A4A19E9E9C9C9C999492928E898781
+7F7974726C6A67676A6C717274767C7F7F84878989898C8E8F9292929494949494999A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9A9A9A9A9A9A9C9C9C9A9A9A9A9A9A9A9C
+9C9C9C9A9A9A9A9A9A9C9C9C9C9C9C9A9A9A9A9A9A9A9A9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A99
+949494949494949494949492929292928F8F8E8E8E8E8E8E8E8C8989898989898989898989898989
+8989898989898989898989898989898989898989898989898989898989898E8E8E8C898C8C8C8989
+898989898989898989898987878785858585858481817F7F7F817F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181848484858481
+817F81818181818181848485858585878787898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E6C
+8992949A9C9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9C9C9A9A99949492928E898781
+7F7F878F949CA4A9B1B9BBC0C1C4C1C1BEBBB9B9B6B3B1B1B1AEAEABA9A6A6A6A4A4A4A4A3A3A19E
+9E9E9E9E9E9E9E9E9E9E9EA1A3A3A3A4A4A4A4A4A4A6A6A6A9A9A674848481858787898C8C8C8989
+898784817F7F7C7C7C7C7C7C79797979797676767676747472726C6A6764615F5755544F4F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8189929CA6B1BECCD9E1E1E4E6E6E4E1E1E1DFDFD9D9D4
+D1CFC8C6C1BEB9B3AEA9A6A4A4A3A4A4A3A19EA1A4A3A19E9E9E9C9C9A948F897F746C615C595757
+57575957556C72767C7C7C7C7F7C7C79746C6A5F676C6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A676767
+66616164646666676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6E7272747474747676797C7F7F7F7F8485
+878789898C8E9294949499999A9A9A9C9C9C9C9C9C9C9E9EA1A4A19E9E9E9C9C9A999492928F8987
+817F7974726C6A6A6A6C71727476797C7F8185878989898C8E8F9292949494949494999A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9A9A9A9A9A9C9C9C9C9C9A9A9A9A9A9C
+9C9C9C9C9C9A9A9A9C9C9C9C9C9C9C9C9C9C9A9A9A9A9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A99
+99999694949494949494949494949292928F8E8E8E8E8E8E8E8E8989898989898989898989898989
+8989898989898989898989898989898989898989898989898989898989898C8E8C89898989898989
+8989898989898989898987878787858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818184848585878787878484
+8484848484858585858787878787878787898989898989898C8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F
+8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E87
+8F949A9C9E9EA3A4A4A4A4A4A4A4A4A4A4A4A6A6A6A4A4A4A39E9E9C9C9A99949494928F8987817F
+7F878E949CA4A9AEB6BBBBC0C1C6C1C1BEBBB9B9B6B1B1B1AEAEAEA9A6A6A6A4A4A4A4A39E9E9E9E
+9E9E9C9C9E9E9E9E9E9E9E9E9E9EA1A1A3A3A3A3A4A4A4A664727C84858584878789898C8C898989
+898784817F7F7C7C7C7C7B7979797976767676767676747472726C6A6766615F5957554F4F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C878C949EA9B3C1CFDCE1E4E6E6E4E4E1E1DFDFDCD9D4D3
+CFCCC6C1BEB9B7B1ABA6A4A4A1A1A1A4A4A4A3A4A6A4A4A4A4A39E9E9E9A948E857C72675F575757
+57575C5957557174767C7C7C7C7C7C7C7674716C5F6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6767
+6766616161616164676A6A6A6C6C6C6C6C6C6C6C6C6C6C6C7172747474747476797C7C7C7F7F7F81
+8487878989898E92929494949699999A9A9A9C9C9C9C9E9E9EA3A3A3A19E9E9C9C9A999492928F89
+87817C7974716C6A6A6C6C727274767C7C7F81878789898C8E8F9292949494949494999A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9A9A9C9C9C9C9C9C9C9C9A9A9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A
+9A9A9999999994949494949494949292928F8F8F8F8E8E8E8E8E8C89898989898989898989898989
+898989898989898989898989898989898989898989898989898989898989898C8989898989898989
+89898989898989898987878787858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818484858585858587878787878785
+87878787878787878787878787878787878989898989898C8E8E8E8E8E8F92929292929292929292
+929292928F8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F929292928F8F8E8E8E8E8E8E8E8E8E8E8E878C
+929A9C9EA3A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A3A19E9C9C9A99949492928C89847F7C
+8489949CA4A6AEB1B9BEC0C1C1C4C1C0BBBBB9B7B3B1B1AEAEAEABA9A6A6A4A4A4A3A19E9E9E9E9C
+9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9EA1A1A1A3616A71767C7F818587878789898C8C89898989
+878784817F7F7F7C7C7C7C7979797676767676767676747472726E6C6A6661615D5755514F4F4F4F
+4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F878F99A3AEB9C6D1DFE1E4E6E6E4E1E1DFDEDCD9D4D3CF
+CCC6C4C0BBB9B3AEA9A4A39E9E9EA1A4A4A4A4A6A6A6A6A6A6A6A4A4A49E9A92897F766C615C5757
+5757595C5C57556C72747676767C7C7C797674726C61556A6A6C6C6C6C6C6C6C6C6C6C6C6A6A6767
+676661616161616164676A6A6A6C6C6C6C6C6C6C6C6C6C6C717272747474747676797C7C7C7F7F7F
+7F8185878789898E8F92929294949494999A9A9C9C9C9C9E9EA3A4A4A3A19E9C9C9C9A999492928E
+8987817C76746E6C6A6C6C71727474767C7F7F84878989898E8F9292949494949494999A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A
+9A9A9A9A9A999999999694949494949292929292928F8F8F8F8F8E89898989898989898989898989
+89898987878789898989898989898989898989898989898989898989898989898989898989898989
+89898989898989898787878785858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181858585858585858787878987878787
+878787878787878789898989898989898989898C8E8E8E8E8E8E8E8E8E8F92929292929292929292
+92929292928F8E8E8E8E8E8E8E8E8E8F8F9292929292929292928F8E8E8E8E8E8E8E8E8E8E818992
+999C9EA1A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A39E9C9C9A999494928E89857F7C81
+89929CA3A6AEB1B7BBC1C1C1C4C1C1C0BBB9B9B6B3B1AEAEAEABA9A9A6A6A4A4A4A39E9E9E9C9C9C
+9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E676C7274797F7F7F818487878789898C8989898989
+878784817F7F7F7C7C7C7C7976767676767676767676747474726E6C6A6764615F5755544F4F4F4F
+4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF768489929AA4AEB9C6D4E1E1E4E6E4E1E1DFDFD9D9D9D3CFCC
+C8C6C1BBB9B6B1ABA6A39E9E9E9EA3A4A4A4A6A6A9ABABA9A9A6A6A6A6A49C9992877C726A5F5755
+5757595D5C5957546C71727474767B7C79767674726C6457676A6A6A6C6C6C6C6C6C6C6C6C6A6A67
+67676461616161616166676A6A6C6C6C6C6C6C6C6C6C6C6C6C72727474747474767676797C7C7C7F
+7F7F818487878989898C8E929294949494999A9C9C9C9C9E9EA1A4A4A4A39E9E9E9C9C9A99949292
+8E89877F7C7672716C6C6C6E72727476797C7F81858789898C8F9292929494949494999A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9C9C9A9A9A9A9C9C9C9C9E9C9C9C9C9C9C9C9C9C9E9C9C9C9C9C9C9C9C
+9E9E9E9C9C9C9C9C9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C
+9C9A9A9A9A9A9A9A9A999999949494929292929292929292928F8E8C898989898989898989898989
+89898987878787878989898989898989898989898989898989898989898989898989898989898989
+8989898989898987878787858585858585858481818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818184858585858587878787898987878787
+8789898989898989898989898989898989898C8E8E8E8E8E8F8F8F8F8F9292929292929292929292
+92929292928F8F8F8F8F8F8E8E8E8F9292929292929292929292928F8E8E8E8E8E8E8E8E7C899294
+9C9C9EA4A4A6A6A6A9A9A9A9A9A9A9A9A9A9A9A9A9A6A6A6A4A39E9C9A999494928F89877F7C7F89
+929CA1A6ABB1B6B9BEC1C1C1C6C1C1BEBBB9B9B6B1B1AEAEABA9A9A6A6A6A4A4A3A19E9E9E9C9C9C
+9C9A9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E676C7274797F7F7F7F81818487878789898C8989898989
+878785817F7F7F7F7C7C7C797676767676767676747474747472716C6A6766615F5957554F4F4F4F
+4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8789949CA6B1BECCD9E1E4E4E6E4E1DFDFDCD9D9D4D1CCC8
+C6C1BEBBB7B1AEA9A49E9E9E9E9EA4A4A6A6A6ABAEAEAEAEAEABA9A9A9A6A39C9489817671665C55
+5557575C5D5D5957546A6C717274767679767679767471675D66676A6A6C6C6C6C6C6C6C6C6A6A6A
+6A67666161616161616166676A6A6C6C6C6C6C6C6C6C6C6C6C7172747474747474747676797C7C7C
+7C7F7F7F818587878789898E929294949496999A9C9C9C9E9EA1A4A4A4A4A39E9E9E9C9C9A999492
+928E89847F7C7472716C6C6C72727474767C7F7F848787898C8E8F9292949494949496999A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9C9C9C9A9A9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9E9E9E9C9C9C9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C
+9C9C9C9A9A9A9A9A9A9A9A99949494949292929292929292928F8F8E8C8989898989898989898989
+89898787878787878989898989898989898989898989898989898989898989898989898989898989
+898989898989898787878585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F81818181818181817F7F7F7F7F7F7F7F8181818184848485858787878787878789898989898989
+8989898989898989898989898989898C8C8C8E8E8E8E8E8F92929292929292929292929292929292
+929292929292929292928F8E8E8F929292929292929292929292928F8E8E8E8E8E8E8E76878F949C
+9C9EA4A4A6A6A6A9A9A9A9A9A9A9A9A9A9ABABA9A9A9A6A6A4A19E9C9A999492928C877F7C7F8792
+9A9EA6ABB1B6B9BEC1C4C1C1C6C1C0BBBBB9B7B3B1B1AEABA9A9A6A6A6A4A4A4A39E9E9E9C9C9C9C
+9A9A9A9A9A9C9C9C9C9C9C9E9E9E9E71727274767F8181817F818181848587878989898989898989
+878785817F7F7F7F7C7C7C797676767676767676747474747472716C6A6A6761615D5755514F4F4F
+4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F878F949EA9B3C1CCD9E1E4E4E6E1DFDFDCD9D9D4D3CFC9C6
+C1C0BBB9B3B1ABA6A19E9E9E9EA1A4A4A6A9ABAEB1B1B1B1B1AEAEAEABA6A49E9C92877C766C6157
+555555595D5D5D5C5754616A6C727474767976797C7674726A5F6167676A6A6C6C6C6C6C6C6C6A6A
+6A6A676461616161616166676A6A6C6C6C6C6C6C6C6C6C6E7171727274747474747474767676797C
+7C7C7F7F7F818587878789898F9292949494999A9A9C9C9E9E9EA3A4A4A4A3A39E9E9E9C9A9A9994
+92928C87817C797472726C6C7172747476797C7F81858789898E8F8F92949494949494999A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9C9C9C9C9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9EA1A3A19E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C
+9C9C9C9A9A9A9A9A9A9A9A9A9994949494949494949292929292928F8E8E8E8E8C8C8C8C89898989
+89898787878787878789898989898989898989898989898989898989898989898989898989898989
+89898989898989898787878787878787878787878787858481818181818181818181848484848484
+848484848484848481817F7F81818181848484858585858787878787878789898989898989898989
+8989898C8C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292929292929292929292
+929292929292929292928F8F8F8F9292929292929292929292928F8E8E8E8E8E8E8E8E818E949A9E
+9EA1A4A6A6A6A9A9ABABABABABABABACAEAEAEABABA9A6A6A49E9C9A9A9494928E89817C7F878F96
+9EA6ABAEB6B9BEC1C6C6C6C4C4C1C0BBB9B9B6B1B1AEAEA9A9A6A6A6A6A4A4A3A19E9E9E9C9C9C9A
+9A9A9A9A9A9A9A9C9C9C9C9C9E7C7976767C7C7F8785848181818181848587878989898989898989
+87878584817F7F7F7C7C7C797676767676767676767474747472716C6C6A6764615F5755554F4F4F
+4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8489929AA3AEB9C1CFD9E1E4E6E6E1DFDFD9D9D4D4CFCCC6C4
+C1BBB9B6B1AEA6A49E9E9E9E9EA3A4A6A9AEAEB4B6B7B7B7B6B1AEAEAEA9A49E9C968C817C746A5D
+555155575C5F5F5F5D57545F676A6C72747676767C7C7674726A614F64676A6A6A6A6A6C6C6C6A6A
+6A6A67676161616161616166676A6C6C6C6C6C6C6C6C6C6C72727272747474747474747474767679
+7C7C7C7C7F7F8185878787898E9292949494999A9A9C9C9C9E9EA3A4A4A3A1A3A39E9E9C9A9A9A99
+94928E89857F7C76747272716E72727474767C7C7F818787898C8E8F92929494949494999A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9C9E9E9E9E9E9E9E9E9EA1A3
+A3A19E9E9E9E9EA1A3A4A3A3A1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9C9C9C9A9A9A9A9A9A9A9A9A999494949494949494949494949292928F8F8F8F8E8E8E8E8C898989
+89898987878787878989898989898989898989898989898989898989898989898989898989898989
+89898989898989898787878787878787878787878787878585858585858585878787878787878787
+878787858585858584818484848485858585858585858587878989898989898989898989898C8C8C
+8C8E8E8E8E8E8F8F929292929292929292928F8F8F8F8F9292929292929292929292929292929292
+92929292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E7F8992999C9E
+A3A4A6A6A6A9A9ABAEAEAEAEAEAEAEAEAEAEAEAEABA9A6A4A39E9C9A9994928F89847F7C848C949C
+A4ABAEB6B9BEC1C6C6C6C6C6C1C1BEBBB9B6B3B1AEAEABA9A6A6A6A6A4A4A4A39E9E9E9C9C9C9C9A
+9A9A9A9A9A9A9A9A9A9C9C9C8781817F7F8185878787858481818184848587878789898989898989
+87878784817F7F7F7F7C7C797676767676767676767474747472726C6C6A6766615F5957554F4F4F
+4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8789929CA4AEB9C4D1DCE1E4E6E4E1DFDCD9D9D4D3CFC8C6C1
+BEBBB9B1AEA9A69E9E9E9E9E9EA4A6A9AEB1B6B7B9B9B9B9B9B6B1B1AEA9A6A39C9A92877F797266
+57544F55595D5F5F5F5D57555C646A6C727474767679797674726C614F6166676A6A6A6A6C6C6A6A
+6A6A6A676761616161616166676A6A6C6C6C6C6C6C6C6C6C71727272727474747474747474747676
+76797C7C7C7F7F81858787898C8F9292949496999A9C9C9C9E9EA1A4A4A39EA1A3A49E9C9A9A9A9A
+94928F8987817F7C76747472717272747476797C7F7F848789898C8E8F929294949494999A9A9A9A
+9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9EA19E9E9E9EA1A3A4
+A4A3A3A19E9E9EA3A4A4A4A4A4A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9C9C9C9A9A9A9A9A9A9A9A999694949494949494949494949494929292928F8F8F8F8F8F8C8989
+89898989898787898989898989898989898989898989898989898989898989898989898989898989
+89898989898989898989898989898989898989898787878787878787878787878787878787878787
+878787878585858585858585858585858585858585858787898989898989898C8C8C8E8E8E8E8E8E
+8F8F8F8F8F9292929292929292949494929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E798792949CA3A4
+A4A6A6A6A9A9ABAEAEAEAEAEAEAEAEAEAEAEAEAEAEA9A6A4A19E9C9A94949289877F797F89929CA3
+A9AEB6B9BEC1C6C6C6C6C6C6C1C0BBB9B6B3B1AEAEABA9A6A6A6A4A4A4A4A3A19E9E9E9E9C9C9A9A
+9A9A9A9A9A9A9A9A9A9C9C8989878787848789898787878481818484858585878787898989898987
+87878784817F7F7F7F7C7C7C7976767676767676767474747472726C6C6A6A6761615D5755544F4F
+4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF7681878E949CA6B1BBC6D3DFE1E4E6E4E1DCD9D9D4D3CFCCC6C1C0
+BBB9B6B1ABA6A49E9E9E9E9EA3A6A9AEB1B6B9BEBEBEBEBEB9B9B3B3AEABA6A49E9C948E857C766C
+5F554F4F575C5F5F5F5F5D57545761676C717274767679767674726C61575F616667676A6A6C6C6A
+6A6A6A67676764616161616166676A6A6A6C6C6C6C6C6C6C6E727274747474747474747474747476
+767679797C7C7F7F81858789898C8F92929494999A9C9C9C9C9E9EA4A3A19E9EA1A39E9C9C9A9A9A
+9994928C8987817F7C767474727272747476767C7C7F81878789898C8E8F929494949496999A9A9A
+9A9A9A9A9A9A9A9A9C9C9C9C9C9E9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A1A19E9EA3A4A4
+A4A4A4A3A3A1A1A3A4A4A4A4A4A4A4A3A3A1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9C9C9C9C9A9A9A9A9A9A9A9A9A9999999996949494949494949494949292929292929292928F8E8E
+8E8E8C8C898989898989898989898989898989898989898989898989898989898989898989898989
+89898989898989898989898989898989898989898987878787878787878787878787878989898989
+8987878785858585858585858585858585878787878787878989898989898C8E8E8E8E8F8F8F8F8F
+92929292929294949494949494949494949492929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8C8C848E949C9EA4A6
+A6A9A9A9ABAEAEAEAEB1B1B1B1B1B1B1B1B1AEAEAEA9A6A49E9C9A9494928E877F797C87929A9EA6
+AEB6B9BEC1C4C6C8C6C6C6C4C1BEBBB9B3B1AEAEABA9A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9C9A
+9A9A9A9A9A9A9A9A768792928E898989898C89898787878584848485858585878787898989898787
+87878784817F7F7F7F7F7C7C7976767676767676767474747472726E6C6A6A6764615F5755554F4F
+4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF7C858992999EA9B1BEC6D4DFE1E4E6E1DFDCD9D7D4D1CFC8C6C1BE
+B9B9B1AEA9A49E9C9C9E9EA3A4A9AEB1B6B9BEC1C1C1C1C1BEB9B9B3B1AEA9A49E9C949289817C74
+6759544F54575D5F61615F5D5754575F666A6E7274767676767472716A61575F5F6166676A6A6A6A
+6A6A6A6A6767676461616161666767676A6A6C6C6C6C6C6C6C717274747474747474747474747474
+76767676797C7C7F7F81858789898C8F929294949A9A9C9C9C9C9EA1A39E9E9E9E9E9E9E9C9A9A9A
+9994928E8987857F7C79767474727272747476797C7F7F84878989898C8F92929494949499999A9A
+9A9A9A9A9A9A9A9A9C9C9C9C9E9E9E9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9EA1A3A4A3A1A1A3A4A4
+A4A4A4A4A4A3A3A4A4A4A4A4A4A4A4A4A4A4A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949494929292929292929292929292
+92928F8F8F8E8E8C8C89898989898989898989898989898989898989898989898989898989898989
+89898989898989898989898989898989898989898989898989898989898989898989898989898989
+89898787878585858585858787878787878787878787898989898989898C8E8E8E8E8F9292929292
+92929292929494949494949496969694949492929292929292929292929292929292929292929292
+92929292929292929292929292929292929292928F8E8E8E8E8E8E8E8C8C89897F89949A9EA4A6A9
+ABAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1AEAEABA6A4A39E9C9A94928F8984797C878E999EA6AE
+B3B9BBC1C1C6C6C9C6C6C6C1BEBBB9B6B1AEAEABA9A6A6A6A4A4A4A4A4A4A19E9E9E9E9E9C9C9C9A
+9A9A9A9A9A9A74747F8E9494928E8C8E92928C898987878785848585858585858787878989878787
+87878784817F7F7F7F7F7C7C7C76767676767676767474747474726E6C6A6A6766615F5957554F4F
+4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF7F8789929AA3ABB6BECCD4DEE1E4E6E1DFD9D9D4D1CFCCC6C1C0BB
+B9B6B1ABA6A49E9C9C9EA1A4A6AEB1B6B9BEC1C4C6C6C6C6C1BEB9B6B1AEA9A6A49E9A928C877F76
+6C61574F4F575C5F5F61615F5D5754575F616A6C72747474747474726C6A5F555D5F616167676A6A
+6A6A6A6A6A6767676661616161666767676A6A6C6C6C6C6C6C6E7272747474747474747474747474
+76767676767C7C7C7F7F81858789898E8F929294949A9A9C9C9C9E9E9E9E9E9E9E9E9E9C9C9A9A9A
+9994928F8C8987817F7C797674747472747476797C7C7F8187878989898E8F92949494949499999A
+9A9A9A9A9A9A9A9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A19E9E9EA3A4A4A4A4A3A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949494949494929292929292929292
+92929292929292928F8F8E8E8C8C8989898989898989898989898989898989898989898989898989
+89898989898989898989898989898989898989898989898989898989898989898989898989898989
+898987878787878787878787878787878989898989898989898989898C8E8E8E8E8E8F9292929292
+92929292929494949494949699999994949494949494949494949494949492929292929292929292
+929292929292929292929292929292929292928F8F8E8E8E8E8C8C898989897B8792999CA4A6A9AE
+AEAEAEAEB1B1B1B1B3B6B6B6B6B6B3B3B6B1AEAEABA6A4A19E9C99949289877C76818C949CA6ABB1
+B7B9BEC1C6C6C8C9C6C6C6C1BEBBB9B3B1AEABA9A6A6A6A4A4A4A4A4A4A39E9E9E9E9E9E9E9C9C9A
+9A9A9A9A9A8584818994949494928F9292928E898989878787858585858585858787878987878787
+87878785817F7F7F7F7F7C7C7C7976767676767676747474747472716C6C6A6A6761615D5755544F
+4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF7984878E949CA4AEB9C1CCD9DEE1E1E4DFDCD9D4D3CFCCC8C6C1BEB9
+B7B1AEA9A49E9C9C9C9EA4A6ABB1B6B9BEC1C6C6C6C6C8C6C1C0BBB9B3B1ABA6A49E9C948F89847C
+746A5D544F54575D5F6161615F5F5754555D61676C717274747272726E6A675D515C5F616166676A
+6A67676A6A6A6A6A6766616161646767676A6A6A6C6C6C6C6C6C7172747474747474747474747474
+7476767676797C7C7F7F7F81878789898C8E8F929494999A9C9C9C9C9E9E9E9E9E9E9E9C9C9A9A9A
+999494928E8987857F7F7C7676767474747476767C7C7F7F8487898989898E929294949494949699
+9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A3A3A1A1A3A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949494949494949494949494949494
+929292929292929292929292928F8F8E8E8C8C898989898989898989898989898989898989898989
+89898989898989898989898989898989898989898989898C8C8C8C8C8C8C8C8C8989898989898989
+89898987878787878787898989898989898989898989898C8C8C8C8E8E8E8E8E8E8F929292929292
+9294949494949494949494999A9A9999949494949494949494949494949492929292929292929292
+92929292929292929292929292928F8F8F8F8F8E8E8E8C8C8989898989896A848C949CA3A6ABAEB1
+B1B1B1B1B1B3B3B6B7B9B9B9B9B9B7B7B6B1B1AEABA6A49E9C9A94928E877F747F89949CA4A9B1B7
+B9BEC1C6C6C6C9C8C6C6C6C1BEB9B7B1AEABA9A6A6A6A4A4A3A1A1A1A1A19E9E9E9C9C9C9E9C9C9C
+9A9A9A9A898C9292929A99949494929292928F8C8989878787858585858585858587878787878787
+8787878584817F7F7F7F7C7C7C7976767676767676767474747472716C6C6A6A6764615F5755554F
+4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF7F878992999CA6AEB9C4CFD9DCDFE1E1DFD9D4D3CFCFC9C6C1BEBBB9
+B6B1ABA6A39E9C9C9EA3A6A9AEB3B9BBC1C6C8C8C9CCCCC8C6C1BEB9B6B1AEA9A6A19C99928E877F
+796C61574F4F55595F61666661615F5755555D61676A6C72727271716C6C6A64594F595F5F616667
+676767676A6A6A6A6A6766666666666767676A6A6A6A6C6C6C6C6C72727474747474747474747474
+7476767676767C7C7C7C7F7F8487878989898E8F929294999A9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A
+999494928F898987817F7C7C7976767474747476797C7C7F8185878989898C8F9292949494949496
+999A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A3A3A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949494949494949494949494
+94949494949492929292929292929292928F8F8F8E8E8C8989898989898989898989898989898989
+898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8C8989898989898989
+89898989878989898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E8F8F8F8F92929292929292
+9494949494949494949496999A9A9A99949494949494949494949494949494929292929292929292
+9292929292928F8F8F8F8F8F8F8F8E8E8E8E8C8C898989898989898787877F89929C9EA6ABAEB1B3
+B6B3B3B3B6B7B9B9B9B9B9B9B9B9B9B9B7B3B1AEA9A6A39E9C9A94928984797C89949CA3A6AEB6B9
+BEC1C6C6C6C8CCC8C6C6C1C0BBB9B3B1AEA9A6A6A4A4A4A19E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C
+9A9A9A87898E92949A9A99949494949492928F8E8989898787878585858585858585878787878787
+8787878784817F7F7F7F7C7C7C7C79767676767676767474747472716C6C6A6A6766615F59575551
+4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF7681878C929A9EA6B1BBC6D1D9D9DFDFDFD9D9D4D1CFCCC6C6C1BBB9B7
+B1AEA6A49E9C9C9C9EA4A9AEB1B9BBC1C6C6CCCCCCCFCCCCC6C6C0B9B7B1AEA9A6A49E9C94928984
+7C746A5F544F4F575C5F61676764615F5957575C5F666A6C6E6C6C6C6C6C6A67615751595F5F6164
+6767676767676A6A6A6A67676767676767676A6A6A6A6A6C6C6C6C6C717272747474747474747474
+747476767676797C7C7C7C7F7F8185878789898C8F929294949A9A9A9A9C9C9C9C9C9C9C9A9A9A99
+999494928F8E898787817F7C7C79767674747476797C7C7F7F8487878989898E9292929294949494
+999A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C
+9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949494949494949494949494
+949494949494949494949492929292929292929292928F8F8E8E8989898989898989898989898989
+8989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8C89898989898989
+89898989898989898989898C8C8C8E8E8E8E8E8F8E8E8E8E8E8E8E8E8F9292929292929292929294
+94949494949494949696999A9A9A9A999999999994949494949494949494929292929292928F8F8F
+8F8F8F8F8F8F8E8E8E8E8E8E8E8C8C8C8989898989898989878787878779878F999EA4A9AEB1B3B9
+B9B9B9B9B9B9B9B9BBBBBBBEBBBBBBBBB9B3B1AEA9A4A19E9C99928E877C7C87929A9EA6ACB1B9BE
+C1C4C6C8C8C9CCC8C6C6C1BEB9B6B1AEA9A6A6A4A4A3A19E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9A
+9A677F8C8E8F92969A9A99949494949492928F8E8989898787878585858585858585878787878787
+8787878584817F7F7F7F7C7C7C7C79767676767676767474747472726C6C6A6A6A6761615D575554
+4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF7C87898F949CA3A9B3BEC6D1D9D9DCDFDCD9D4D1CFCCC8C6C1BEBBB9B3
+AEA9A69E9C9C9C9EA3A6ABB1B6B9C1C6C6CCCFCFCFCFCFCCCCC6C1BBB9B3AEA9A6A49E9C99948E87
+7F766C61594F4F55595D6167676761615F5C59595F61666A6C6C6C6C6C6C6A6A66615754575D5F61
+616767676767676A6A6A6767676767676767676A6A6A6A6C6C6C6C6C6C6E72727474747474747474
+747676767676797C7C7C7C7C7F7F818487878789898E929294949999999A9A9C9C9C9C9C9A9A9999
+96949492928E898987847F7F7C7C7C7674747476767C7C7F7F8185878789898C8F92929292949494
+999A9A9A9A9A9A9A9A9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494949494949494949494949494949494949494
+949494949494949494949494949494949292929292929292928F8E89898989898989898989898989
+8989898989898989898C8C8C8C8C8C8C8C8C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8C89898989898989
+8989898989898C8C8C8E8E8E8E8F8F8F8F8F92928F8E8E8E8E8E8E8F929292929292929292929294
+94949999999999999999999A9A9A9A9A99999999999494949494949494929292929292928F8E8E8E
+8E8E8E8E8E8E8E8E8E8C898989898989898989898989878787878785747F8C949CA4A9AEB1B6B7B9
+B9B9B9B9B9B9BBBBBBBEC0C0C0BEBBBBB9B3B1ABA6A49E9C9A9492897F7C8792999CA4A9B1B7BEC1
+C4C6C9CCCCCCCCC8C6C6C1BBB7B1AEA9A6A4A4A39E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9A
+5F7F8C8F92929499999999949494949492928F8E8C89898987878785858585858585858787878787
+8787858584817F7F7F7F7F7C7C7C7C767676767676767474747472726C6C6A6A6A6764615F595755
+4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF7F878992999CA4AEB6BEC6D1D4D9D9DCD9D4D3CFCCC8C6C1C0BBB9B3B1
+AEA6A49E9C9A9C9EA4A9AEB6B9BEC6C6CCCFD1D1D3D3D1CFCCC6C1BEB9B6B1ABA6A4A39E9A949289
+847C72675F554F4F575C5F6167676761615F5F5D5F6161676A6A6A6A6A6A6A6A67615F5755595D5F
+61616767676767676A6A6A67676767676767676A6A6A6A6A6C6C6C6C6C6C6E727274747474747474
+76767676767676797C7C7C7C7C7C7F7F8185878789898E8F929294949496999A9A9A9A9A9A9A9999
+94949492928F8C898787847F7F7C7C7B76747476767B7C7C7F7F8187878789898E92929292929494
+999A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1A3A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949492929292928F8E8E8C8C8C8C89898989898989
+89898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989
+898C8C8C8E8E8E8E8E8E8F8F8F929292929292928F8F8E8E8E8F8F8F929292929292949494949494
+9499999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494929292929292928F8E8E8E
+8E8E8E8E8E8E8E8E8C898989898989898989898989898787858484817C87929AA3A6AEB1B6B7B9BB
+BBBBBBBBBBBBBBBEC0C1C1C1C1C0C0BBB9B3B1A9A6A49E9C99928E856C878F999CA3A6AEB6B9C1C4
+C6C8CCCCCCCCCCC6C6C1BEB9B3B1ABA6A4A4A19E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9A9A9A9C9A74
+7F89898E929494949494949494949492928F8F8E8E89898987878785858585858585858787878787
+8785858484817F7F7F7F7F7C7C7C7C797676767674747474747472726E6C6A6A6A6766615F5C5755
+514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF7C85878E949A9EA6AEB9C1C8D3D4D4D9D9D4D4CFCFC9C6C4C1BBB9B6B1AE
+A9A49E9C9C9C9EA3A6AEB1B9BEC4C6CCCFD3D3D4D4D4D3D1CFCCC6C0BBB6B1AEA9A6A49E9C99948F
+877F766C615C544F54595D5F6667676766615F5F5F616166676A6A6A6A6A6A6A6A67615F55555C5F
+5F61616767676767676A6A6767676767676767676A6A6A6A6C6C6C6C6C6C6C727274747474747474
+76767676767676797B7C7C7C7C7C7C7F7F8184878789898C8F929292949494999A9A9A9A9A999994
+94949492928F8E8989878784817F7F7C7976767676797C7C7F7F8184878787898C8F929292929494
+96999A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9EA1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949292928F8F8F8E8E8E8E8E8E8C8C8C8C8C
+898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8C8C8E8E
+8E8E8E8E8E8E8E8E8E8F92929292929292929292928F8F8F8F929292929292929292949494949494
+94999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494929292929292928F8E8E8E8E
+8E8E8E8E8E8E8E8E8989898989878789898989898987878481817F76848F969EA6ACB1B7B7B9BEBE
+BEBEBEBEBEBEC0C1C1C1C4C4C1C1C1BBB7B3AEA9A4A19C9A9492897F878E949CA3A6AEB1B9BEC6C6
+C8CCCFCFCFCFC8C6C1BEB9B6B1AEA9A6A49E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A767F
+878989898E9294949494949494949492928F8E8E8E89898989878787858585858585858587878787
+8585848484817F7F7F7F7F7C7C7C7C797676767674747474747474726E6C6A6A6A6A6761615D5755
+544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF7F87898F949C9EA6B1B9C1C8D3D3D4D9D4D4D1CFCCC6C6C1BEBBB9B1AEA9
+A6A19C9C9A9C9EA4ABB1B9BEC1C6CCCFD3D4D4D7D9D4D4D3D1CCC6C1BBB9B1AEA9A6A4A49E9C9992
+89847C72675F574F4F575C5F6167676A6767616161616166676A6A6C6C6C6C6C6A6A67615D55555D
+5F6161666767676767676A6A67676767676767676A6A6A6A6A6C6C6C6C6C6C717272747474747474
+747676767676767676797C7C7C7C7C7C7C7F7F8487878789898E9292929494949999999999999694
+9494949292928F8C8987878784817F7F7C79767676797C7C7F7F818487878789898E8F8F92929494
+94999A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A3A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949494949494949494949494949494
+949494949494949494949494949494949494949494949494929292928F8F8F8F8F8F8F8E8E8E8E8E
+8E8E8E8E8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F92929292929292929292929292929292929292929292929294949494949494
+999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9996949494949494949292928F8F8F8F8E8E8E8E8E
+8E8E8E8E8C8C8C8C8989898787878787898989878785817F7F7F747F89949CA4ABB1B7B9B9BEC0C1
+C1C0C0BEBEC0C1C1C6C6C6C6C6C4C1BBB7B1AEA9A49E9C99928E728992949CA3A6ABB1B7BEC1C6C8
+CCCFCFCFCFCCC6C1C1B9B7B1AEA9A6A49E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A99997F8487
+89898989898F92929494949494949292928F8E8E8E8C898989878787858585858585858587878785
+8585848481817F7F7F7F7F7C7C7C7C7C767676767474747474747472716C6C6A6A6A6764615F5C57
+554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF7684878992999CA3A9B1B9C1C8D1D3D3D4D3D1CFCCC8C6C1C0BBB9B3AEABA6
+A49E9C9C9A9CA4A6AEB6BEC1C6CCCFD3D4D9D9D9D9D9D4D4D3CCC6C1BBB9B3AEABA9A6A49E9C9A94
+8F877F766C615D554F4F575D5F64676A6A6A676661616166676A6A6A6C6C6C6C6C6C6A67615C5557
+5F5F61616767676767676767676767676A6A6A6A6A6A6A6A6A6C6C6C6C6C6C6C7272747474747474
+7476767676767676767679797C7C7C797C7C7F7F8185878789898C8F929292949494949494969494
+9494949292928F8E898987878784817F7F7C767676797C7C7F7F7F818587878989898E8F92929494
+9499999A9A9A9A9A9A9A9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A3A4
+A4A4A4A4A4A4A4A4A3A1A3A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E9E9E9E9E9C9C9C9C9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949494949494949494949494949494
+949494949494949494949494949494949494949494949494929292929292929292928F8F8F8F8F8F
+8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F92929292929292929292929292929292929292929292949494999999999999
+999A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999999949494929292929292928F8E8E8E8E8E8C8C8C8C
+8989898989898989898987878787878787878584817F7F7C7C6A7C87929AA3A9AEB7BEBEBEC1C1C1
+C1C1C1C1C1C1C1C6C6C6C6C6C6C6C1BBB6B1AEA6A39E9A94926C87949A9CA3A6ABB1B4B9BEC6C6CC
+CCCFCFCFCFCCC4C1BEB9B1AEA9A6A4A19E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A99968187898E
+8989898989898F929292929294929292928F8E8E8E8C898989898787878585858585858587878585
+858584818181817F7F7F7F7C7C7C7C7C767676767474747474747472716C6C6A6A6A6766615F5D57
+55514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF7C87898F949A9CA4AEB3B9C1C9CFD1D3D3D1CFCCC9C6C4C1BEB9B9B1AEA9A4
+9E9C9C9C9C9EA6ACB4B9C1C6CCCFD3D4D9D9D9D9D9D9D9D4D3CFC8C1C0B9B6B1AEABA6A6A49E9C9A
+948C877C726A6157514F55575D61676A6A6A6A6A676666676A6A6A6A6C6C6E71716C6A6A615F5955
+575F6161666767676767676767676767676A6A6A6A6A6A6A6A6A6C6C6C6C6C6C7172747474747474
+747476767676767676767676797B7979797C7C7C7F8184878789898C8E8F92929494949494949494
+9494949292928F8E8E898989878785817F7C7C7979797C7C7C7F7F818487878989898E8F92929294
+949499999A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A3A4A4A4A4A4A4A4A4A3A3
+A3A4A4A4A4A4A4A3A19E9EA1A19E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9E9C9C9C9A9A9A
+9A9A9A9A9A9A9A9A99999A9A99949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494929292929292929292929292929292
+92929292928F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8F8F8F8F8F92929292929292929292929292929292949494949494949494999A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949292929292928F8E8E8E8E8E8C89898989
+8989898989898989898787858484848584817F7F7C7C79766C76818E949EA6AEB6BCC1C1C1C1C6C6
+C6C6C4C1C1C1C6C6C8C8C9C8C8C6C1BEB6B1ABA69E9C99947C89949A9EA4A6A9AEB3B7BCC1C6C9CC
+CFCFCFCFCFC6C1BEB9B6B1ABA6A4A39E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9981898E928F
+8E8C89898789898F92929292929292928F8E8E8E8E8C898989898787878585858585858585878585
+858584818181817F7F7F7F7C7C7C7C7C767676767474747474747472716C6C6A6A6A6A6761615F59
+5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF7F878992949C9EA6AEB3B9C1CCCFCFCFCFCFCCC9C6C6C1BEBBB9B3AEA9A6A3
+9E9C9C9A9EA4A9B1B9BEC4C8CFD3D4D9D9D9D9DCD9D9D9D4D3CFC9C6C1BBB9B1AEAEA9A6A6A39E9C
+9992897F766C665F574F4F55595F61676A6A6A6A6A6767676A6A6C6C6C6C727272716C6A67615F57
+545C5F61666767676767666666666767676A6A6A6A6A6A6A6A6A6C6C6C6C6C6C6C72727474747474
+7474767676767676767676767679767676797C7C7C7F7F8487878989898E8F929294949494949494
+9494929292928F8E8E8C8989898987817F7F7C7C7B7C7C7C7C7F7F818487878789898C8E8F929294
+94949499999A9A9A9A9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A1A3A4A4A4A4A4A3A19E
+A1A1A3A3A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A
+9A9A9A9A9A9A9A999999999999949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494929292929292929292929292
+929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8F8F8F92929292929292929292929292929294949494949494949494949494999A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949492929292928F8F8F8E8E8E8E8C8989898989
+898987878787878787858481817F7F7F7F7F7C7976747472767C89949CA4AEB4B9C1C6C6C6C6C6C6
+C6C6C6C6C6C6C6C8CCCCCCCCC9C8C1BEB7AEA9A49E9A947F89999C9EA4A9ABAEB1B9B9BEC6C8CCCF
+CFCFCFCFCFC6C1BBB9B1AEA9A6A49E9E9C9C9A9A9C9C9C9C9C9C9C9C9C9C9C9C9A9A81898F929492
+928F89898787898C8E8F92929292928F8F8E8E8E8E8C898989898987878785858585858585858585
+8585858181817F7F7F7F7F7C7C7C7C7C797676767474747474747472726C6C6A6A6A6A6764615F5D
+5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF7C84898E94999C9EA6AEB6BBC1CCCCCFCFCFCCC9C6C6C1C1BBB9B7B1AEA6A49E
+9C9C9A9CA3A6AEB6BEC1C6CCD1D4D4D9DCDCDCDCDCD9D9D7D4CFCCC6C1BEB9B6B1AEAEA9A6A4A19E
+9A948E877C746A615C554F51575C6166676A6C6C6A6A6A6A6A6A6C6C6C6E727272726E6C6A615F5C
+574F5F6166676767676766616464666767676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C71727474747474
+7474747676767676767676767676767676767B7C7C7C7F7F8185878789898E8F9292929292929494
+9494929292928F8E8E8E8C8989898784817F7F7C7C7C7C7C7C7F7F818485878789898C8E8F929294
+9494949499999A9A9A9A9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A3A3A4A4A4A39E9E
+9E9EA1A1A3A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A
+9A9A9A9A9A9A9A999494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949292929292
+92929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F
+92929292929292929292929294949494949494949494949494949494949499999A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A99969494949494949292928F8F8F8E8E8E8E8E8E8E898989898989
+898787878787878584817F7F7F7F7F7F7C7C7674746E74767687929AA3A9B1B9BEC6C8C8C8C8C8C8
+C8C6C6C6C6C6C8CCCCCFCFCCCCC9C4BCB3AEA69E9C9A8589999EA4A6A9AEAEB1B7B9BEC1C6CCCFCF
+D1CFCFCFCCC6BEB9B3AEA9A6A4A19E9C9C9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C7F898F92949494
+94928E8787878789898E8F929292928F8E8E8E8E8E8E898989898987878785858585858585858585
+85858581817F7F7F7F7F7F7F7C7C7C7C797676767674747474747472726C6C6A6A6A6A6766615F5F
+595754514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF7F878992949A9CA4A6AEB7BEC1C9CCCCCFCCCCC8C6C4C1BEB9B9B3AEA9A4A39E
+9C9A9C9EA6A9B1B9C1C6CCCFD4D4D9D9DCDCDCDFDCDCD9D9D4D1CCC6C1C0B9B7B3B1AEABA9A6A49E
+9C949289817672675F57514F55575F61676A6C6C6C6A6A6A6A6A6C6E727272727474726E6C6A665F
+5C55575F61676A6A6A6767616161616667676A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6E727274747474
+747476767676767676767676767676767676797C7C7C7C7F7F8484878789898E8F92929292929292
+929292929292928F8E8E8E8C89898787817F7F7F7C7C7C7C7C7F7F81818487878989898E8F929292
+9494949494999A9A9A9A9A9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A3A3A3A19E9E
+9E9E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9A9A9C9C9C9C9C9C9C9A9A9A9A
+9A9A9A9A9A9A99969494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+92929292929292929292928F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92
+929292929292929292949494949494949494949494949494969999999999999A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9999999999949494929292929292928F8E8C8C8C8C8C898989898989898989
+87878785858484817F7F7C7C7C7C7C7C767472716A747976818C949EA6AEB7BEC4C8C9C9C9C9C8C8
+C8C8C8C8C8C8CCCCCFCFCFCFCFC8C1B9B1A9A49E9C8C949CA4A6A9AEB1B1B6B7B9BEC1C4C9CCCFD1
+D3D1CFCFC9C4BEB7B1AEA6A6A49E9C9C9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C7F898F9294999A9C
+9A948F898784878789898E8F8F928F8E8E8E8E8E8E8E898989898989878787858585858585858585
+85858584817F7F7F7F7F7F7F7C7C7C7C797676767674747474747472726E6C6C6A6A6A676661615F
+5C5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF7981878C92949A9EA4A9B1B9BEC6C8C9CCCCC9C8C6C4C1C0BBB9B6B1AEA6A49E9C
+9A9C9CA4A6AEB6BEC6C9CFD3D4D9D9DCDFDFDFDFDFDCD9D9D4D3CFC8C6C1BBB9B6B1B1AEABA6A6A1
+9C99948F877C746C645D554F4F55595F64676A6C6C6C6C6C6C6C6C6E7272747474747472716C6A66
+5F59545961666A6A6A6A67666161616166676A6A6A6A6A6C6C6C6C6C6C6E71717171727274747476
+767676767676767676767676767676767676767C7C7C7C7C7F818184878789898C8F929292929292
+9292929292928F8F8E8E8E8C8989878784817F7F7F7C7C7C7C7F8181848487878789898C8F929292
+9494949494999A9A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9EA19E9E9E9E
+9E9E9E9E9E9E9E9E9C9C9C9C9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9C9A9A9A9A9A
+9A999999999999949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+949292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F92
+9292929292929292929494949494949494949699999999999999999A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A99949494949494929292929292928F8E8C8989898989898989898989898987
+8784818181817F7F7C7C7C797674747472727171797C797C89929CA4AEB6B9C1C6CCCCCCCCCCC9C8
+C8C8C8C8C8CCCCCFD1CFCFCFCCC6BEB7AEA6A39C929A9EA4A6ABAEB1B3B9B9BBBEC1C6C6CCCFCFD3
+D3D1CFCFC6C1B9B3AEA9A6A49E9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C7F898F92949A9A9C9C
+9C9492898781848787898C8E8F8F8F8E8C8E8E8E8E8E8C8989898989878787858585858585858585
+85858584817F7F7F7F7F7F7F7C7C7C7C797676767674747474747474726E6C6C6A6A6A676661615F
+5D5757544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF7C85898F94999C9EA6A9B1B9BEC6C6C8C8C8C6C6C6C1C0BBB9B7B1AEA9A49E9C9A
+9C9C9EA6ABB1B9C1C8CCD1D4D9D9D9DFDFDFDFDFDFDEDCD9D4D3CFC9C6C1BEBBB9B6B1AEAEA9A6A4
+9E9A9492898176726A6159554F51575D61676A6C6C6C6C6C6C6C6C71727474747474747474716C6A
+666157545F646A6A6A6A6A6A666161616166676A6A6A6A6C6C6C6C6C6C6E72727272727272747476
+76767676767676767676767676767676767676797C7C7C7C7F7F818184878789898C8F8F8F8F8F92
+92929292928F8F8F8E8E8C8C898987878781817F7F7F7C7C7F7F8184848587878789898C8E8F9292
+949494949494999A9A9A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9E9E9E9E9E9E9E9E9E9C
+9C9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9E9E9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A999494949494949494949494949292929292949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292929292929292928F8E8F8F8F8F8F8F8F8F8F8F8F8F8F9292929292
+929292929292929294949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A99949494949494949292928F8F8F8F8E8C898989898989898787878787878785
+81817F7F7F7F7C7976747472727274747472767C7F7C76848F9AA3ABB1B9BEC4C9CCCCCCCCCCC9C9
+C9C9C9C9C8CCCFCFD3CFCFCFCCC4BCB1AEA69E899A9CA4A9ABAEB1B3B6B9BBBEC1C6C6CCCFCFD3D4
+D4D1CFCCC6BEB7B1ABA6A4A19E9C9C9A9C9C9E9E9E9E9E9E9E9E9E9E9E9E76898E92949A9C9C9E9E
+9C9A948F898181858789898C8E8E8E8C8C8E8E8E8E8E8C8989898989898787878585858585858585
+85858584817F7F7F7F7F7F7F7C7C7C7C7B767676767474747474747472716C6C6A6A6A6A6761615F
+5F5C5755514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF727F878C92949A9CA3A6ABB1B9BEC4C6C6C6C6C6C6C1C0BBBBB9B3B1ABA6A39E9C9A
+9C9EA4A9AEB6BEC6CCCFD4D9D9D9DCDFDFDFDFDFDFDFDCD9D4D3CFCCC6C1C0BBB9B6B1B1AEABA6A4
+9E9C969289877C746C675F57544F55575F61676A6C6C6C717171727272747474747474747474726C
+6A665F575161676A6C6C6C6A6766615F6161676A6A6A6A6C6C6C6C6C6C6C71727272727274747476
+7676767676767676767676767676767676767676797C7C7C7C7F7F818184878789898C8E8E8E8E8F
+8F8F9292928F8F8E8E8C8C8989898987878481817F7F7C7F7F7F8184858787878789898C8E8F9292
+949494949494999A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C
+9C9C9C9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9C9C9C9A9A9A9A9A9A99999A9A9A9A9A9A
+99969494949494949494949494929292929292929494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949292929292929292929292929292929292928F8F929292929292929292929292929292929292
+929292929292929494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A99999494949494949292928F8E8E8E8E8E89898989898989878787878787858481
+7F7F7F7F7C7976747472727274767674767F7F7F7F7C7F89949EA6AEB7BEC1C6CCCFCCCCCCCCCCCC
+CCCCCCC9C9CCCFD1D3CFCFCCC8C1B9B1A9A47F969EA4A9AEAEAEB1B6B9B9BEC1C1C6C8CCCFD1D3D4
+D3CFCFC8C1B9B3AEA9A4A39E9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E72878C9294999C9E9EA3A3
+9E9C949289877F84878789898C8C8C8C898C8E8E8E8E8C8989898989898787878585858585858585
+85858584817F7F7F7F7F7F7F7C7C7C7C7C767676767474747474747472716C6C6C6A6A6A6764615F
+5F5D5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF7C81898E92949A9EA4A6AEB3B9BEC1C6C6C6C6C4C1C1BEBBB9B3B1AEA6A49E9C9C9C
+9EA1A6AEB4B9C1C6CFD3D9DCDCDCDFDFE1E1E1E1DFDFDED9D4D3CFCCC6C1C0BBB9B6B1B1AEABA6A4
+A39C9A928E877F76726A615D554F4F555C61666A6C71717272727272727474747476767674747472
+6C6A6661574F666A6C6C6C6C6A67665F5F61616A6A6C6C6C6C6C6C6C6C6C71727274747474747474
+767676767676767676767676767676767676767676797C7C7C7F7F7F81818485878989898C8C8C8E
+8E8E8F928F8F8E8E8C8C898989898987878584817F7F7F7F7F7F818487878787878989898E8F9292
+929494949494999A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9A9A9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A999999999999999999
+99949494949494949494949494929292929292929494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494929292929292929292929292929292929292929292929292929292929292
+9292929494949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+9999999999999999949494929292929292928F8C8C8C89898989898989898787878585848481817F
+7F7C7C79767674747476797C7C797B7F8181847F7C7687929CA6ACB6BEC1C6CCCFCFCFCFCFCCCCCC
+CCCCCCCCCCCFD1D3D4CFCCCCC6BEB7AEA6768EA3A4A6AEB1B1B1B3B9B9BBBEC1C6C6CCCFCFD3D4D4
+D1CFCCC6BEB9B1ABA6A49E9C9C9C9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E84899294999C9EA1A4A6A4
+A39C99928E8781818787898989898C8C89898E8E8E8E8C8989898989898987878785858585858585
+85858584817F7F7F7F7F7F7F7C7C7C7C7C767676767674747474747472716C6C6C6A6A6A6766615F
+5F5D5957554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF7F87899294999C9EA4A9AEB3B9BEC1C1C4C6C1C1C1BEBBB9B7B1AEA9A69E9C9C9A9C
+9EA4ABB1B9BEC4CCD3D4D9DFDFDFDFE1E1E1E1E1DFDFDCD9D4D3CFCCC6C1C0BBB9B6B1AEAEA9A6A4
+A19E9A948F89817C746C676159554F51555F61676A71717272727474747474767676767676767474
+726C6A6661575F6A6A6C6C6C6C6A67615F5F61676A6A6C6C6C6C6C6C6C6C6C727274747474747474
+76767676767676767676767676767676767676767676797C7C7C7F7F7F8181848587898989898989
+8C8E8E8F8F8E8E8E8C8989898989898787858584817F7F7F7F7F818485878787878789898C8F9292
+929494949494999A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9A9A9A9A9A9A9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A999494949494949496
+94949494949494949494949494949494949292949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494929292929292929292929292929292929292929292929494929292929292
+92929294949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+949494949494949494949492929292928F8E898989898989898989898987878784818181817F7F7F
+7C7976767676767C7F7F7F7F7F7F81858787817F797F8C96A1ABB4BCC4C6C6CCD1CFCFCFCFCFCCCC
+CCCCCCCCCCCFD3D4D4CFCCCCC4BCB1AEA4879CA6A9AEB1B3B3B1B7B9B9BEC0C1C6C8CCCFD1D3D4D4
+CFCCC9C4BCB6AEA9A49E9E9C9C9C9A9C9C9E9E9EA19E9E9E9E9E9E9E7F898F94999C9C9EA4A6A6A6
+A49E9A94928985818587878989898C8989898C8E8E8E8C8989898989898987878785858585858585
+85858585817F7F7F7F7F7F7F7C7C7C7C7C797676767674747474747472726C6C6C6A6A6A67666161
+5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF7C7F878C92949A9CA1A6ABB1B3B9BEC1C1C1C1C1C0BEBBB9B9B3AEABA6A49E9C9C9A9C
+A3A6AEB6BEC4C8D1D4D9DEDFE1E1E1E1E1E1E1DFDFDFD9D9D4D1CFCCC6C1C0BBB9B6B1AEAEA9A6A4
+9E9C9A949289857F76726A665F57554F51575F646A6C727274747474747476767676767679797676
+74746C6A666157616A6C6C6C6C6C6A67615F5F61676A6C6C6C6C6C6E6E7171717274747474747476
+7676767979797976767676767676767676767676767676767B7C7C7F7F7F7F818185878989898989
+898C8E8E8F8E8E8C89898989898989878787858481817F7F7F7F7F8185878787878989898C8E8F92
+9294949494949499999A9A9A9A9A99999A9A9A9A9C9C9C9C9C9C9A9A9A9C9C9C9C9C9C9C9C9A9A9A
+9A9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9C9C9A9A9A9A9A9A9A99999A9A99969494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949292929292929292949494949494949494949494949494949292929292
+92929494949494949494949499999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9996
+94949494949494949492929292928F8F8C89898989898987878787878787878481817F7F7F7F7C79
+767679797C7C7F8484848484848787878787817C7C87929CA6AEB7BFC6CCCCD1D3D1CFCFCFCFCCCC
+CCCCCCCCCFD1D4D4D3CFCCC8C1B9B1A98194A6AEB1B3B9B9B7B6B9B9BBBEC1C4C6C9CCCFD3D4D4D3
+CFCCC6C1B9B1AEA6A39E9C9C9A9A9C9C9C9E9EA3A39E9E9E9E9C9C7C898F92949A9C9EA4A6A9A9A6
+A4A19C94928C878484878787898989898989898E8E8C8C8989898989898989878785858585858585
+85858584817F7F7F7F7F7F7F7F7C7C7C7C797676767674747474747472726C6C6C6C6A6A67666161
+5F5F5D5757544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF7F84898F92949A9EA4A6AEB1B3B9BEBEC0C1C1C0BEBEBBB9B7B1AEA6A49E9E9C9C9C9E
+A4ACB4B9C1C6CCD4D9DCDFE1E1E1E1E1E1E1E1DFDFDCD9D9D4CFCFCCC6C1C0BBB9B6B1AEAEA9A6A4
+9E9C9A94928C877F79746C67615D57514F545D61676A7172747474747676767676767979797C7C79
+7676746E6A676157676A6C6C6C6C6C6A665F5F61666A6C6C6E717171717272727272747474767676
+76767C7C7C7C7C797976767676767676767676767676767676797C7C7C7F7F7F7F81858787878989
+89898C8E8E8E8C8C89898989898987878787858584817F7F7F7F7F8184878787898989898C8E8F92
+929292949494949499999A9A9A9A999699999A9A9A9A9C9A9A9A9A9A9A9A9A9A9C9C9C9C9A9A9A9A
+9A9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999699999999949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949292929292
+929494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994
+949494949494949492928F8F8F8E8E8989898787878787878787878785858581817F7F7C7C7C7979
+7C7C7F7F84878787878787878789898987857F76848E9AA4AEB6BEC6CCCFD1D4D4D3D1D1CFCFCFCC
+CCCCCCCCCFD3D4D9D3CFCCC6BEB6AE7F92A4B1B3B7B9BBB9B9B9B9BBBEBEC1C6C6CCCFD1D3D4D9D3
+CCC8C6BEB6AEA9A49E9E9C9A9A9A9C9C9E9E9EA3A19E9E9C9C9C66878E9294999C9EA4A6A9ABA9A6
+A6A49C96928F898784878787898989898989898C8E8C8C8989898989898989878785858585858585
+8585848484817F7F7F7F7F7F7F7C7C7C7C797676767676747474747472726E6C6C6C6A6A67666161
+5F5F5D5957554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFF767F87899294999C9EA4A9AEB1B3B9BBBEBEC0C0BEBEBBB9B9B3AEA9A6A49E9C9C9A9CA4
+A6AEB7BEC6CCD1D7D9DFE1E1E1E1E1E1E1E1DFDFDEDCD9D4D3CFCFCCC6C1C0BBB9B6B1AEAEA9A6A4
+9E9C9A94928C877F7C746E6A665F59554F4F575F61676C727474767676767979797979797C7C7C7C
+7C797674726C6A61596A6A6C6C6C6C6A6A646161616A6A6C6E727272727272727272747476767676
+76797C7C7C7C7C7C7C7C79797976767676767676767676767676797C7C7C7C7F7F7F818587878789
+8989898C8E8C8C898989898989878787878785858584817F7F7F7F818487878789898989898E8F92
+92929292949494949496999999999994949999999A9A9A9A99999999999A9A9A9A9A9C9C9A9A9999
+999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A999494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+9494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494
+9492929292929292928F8E8E8E8C8989878787878787858585858585858584817F7F7C7C7C7C7C7F
+7F8185878989898C8C898989898E8C8987817C7F89949EA9B1BCC4CCCFD1D3D4D4D3D3D1CFCFCFCC
+CCCCCCCCCFD3D4D9D3CFC9C6BCB1A9929EABB1B6B9BBBBBBBBBBBBBBBEC1C1C6C8CCCFD1D4D4D9D1
+CCC6C1B9B1AEA6A49E9C9A9A9A9A9C9C9E9E9EA19E9E9C9C9C9C87899294949A9EA3A6A6ABABA9A9
+A6A69E9A929289878785878789898989898989898C8C898989898989898989878785858585858585
+8584848484817F7F7F7F7F7F7F7C7C7C7C797676767676747474747474726E6C6C6C6A6A67666161
+5F5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFF7C81878E92949A9C9EA6A9AEB1B3B7BBBBBBBEBEBBBBB9B9B6B1AEA6A4A39E9C9C9CA1A6
+AEB6BEC1C8CFD4D9DCDFE1E1E1E1E1E1E1E1DFDFDCD9D9D4D1CFCCC9C6C1C0BBB9B6B1AEABA6A6A3
+9E9C9A94928E89817C74726A67615F57554F4F595F666A717474767679797C7C7C797C7C7C7C7C7C
+7C7C7C7974726C6A615C6A6A6C6C6C6C6A6A616164676A6C6C727272727272727272747476767679
+79797C7C7F7F7F7C7C7C7C7C7C7976767676767676767676767676797C7C7C7C7C7F7F8185858787
+898989898C8C89898989898987878787878785858584817F7F7F7F818485878787898989898C8E8F
+929292929294949494949494949494949494949999999A99969494949999999A9A9A9A9A9A999996
+999999999A9A9A9A9A9A9A9A9A9A9A999999999999999A9A99949494949494949494949494949494
+94949494949494949494949494949494999999999999999999969494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+9494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494
+949292929292928F8E8C8C89898987878787858585858585858585858584817F7F7C7C7C7F7F7F81
+878789898E8F928F8F8F8E8E8F8E8989857F7987929AA4AEB9BEC6CFCFD1D4D4D4D4D3D1CFCFCFCF
+CFCFCFCFD1D4D9D9D3CFC8C1B7AE8E9AA6B1B1B6B9BBBBBBBBBBBBC0C1C1C6C6CCCFCFD3D4D9D4CF
+CCC6BEB7AEA9A69E9C9C9A9A9A9C9C9C9E9E9E9E9E9C9C9C9C85899292949A9C9EA4A6ABAEAEA9A9
+A6A69E9A92928E898787878789898989898989898C89898989898989898989878785858585858585
+8584848481817F7F7F7F7F7F7F7C7C7C7C7B767676767676747474747472716C6C6C6C6A6A676161
+5F5F5F5D5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF727F85898F92969A9EA4A6A9AEB1B3B7B9B9BBBBBBBBBBB9B7B3AEA9A6A49E9E9C9C9EA4A9
+B1B9C1C6CCD1D7D9DCDFE1E1E1E1E1DFDFDFDFDCDCD9D9D4D1CFCCC8C6C1C1BBB9B9B3B1ABA9A6A4
+9E9C9994928E89847F76726C67615F5C57554F545D61676C727476797C7C7C7C7C7C7C7C7C7C7C7F
+7F7C7C7C7C7674716A665C6A6C6C6C6C6C6A676664676A6C6C717272727272747474747474767979
+7C7C7C7C7F7F7F7F7F7F7F7C7C7C7B767679797676767676767676767979797C7C7C7F7F81848485
+87898989898989898989898787878787878785858484817F7F7F7F7F8185878787898989898C8E8E
+8F8F92929292929494949494949494949494949494999999949494949494969999999A9A9A999494
+94949499999999999A9A9A9A9A9A9A99949494949699999999949494949494949494949494949494
+94949494949494949494949494949496999A9A9A9A9A9A9999999999999999999694949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494969699999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494
+9292929292928F8C898989898987878585858585858585858585858584817F7F7F7F7F8184878787
+898C8F9292929292929292928F8E89878176818C949EA9B6B9C1CCCFCFD3D4D4D4D4D3D1CFCFCFCF
+CFCFCFCFD1D4D9D4CFCCC6BCB487949EA9B6B6B9B9BBBBBBBBBBBEC0C1C1C6C8CCCFD1D4D4D9D4CF
+C8C1B9B1A9A6A49E9C9C9A9A9A9C9C9C9C9E9E9E9C9C9C9A8189929294999C9EA1A6A9AEAEAEA9A9
+A6A6A39C94928F898987878789898989898989898989898989898989898989878785858585858585
+8585848181817F7F7F7F7F7F7F7C7C7C7C7C767676767676747474747472716C6C6C6C6A6A676461
+5F5F5F5D5957554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF7C8187899294999C9EA4A6ABAEB1B3B7B9B9B9BBBBBBB9B9B6B1AEA9A4A49E9C9C9CA3A6AE
+B6BEC6C8CFD4D9D9DCE1E1E1E1E1E1DFDFDFDFDCD9D9D4D3CFCFCCC8C6C1C1BBBBB9B3B1AEA9A6A4
+9E9C9A94928F89877F7C746E6A615F5F5757544F575F616A6C7474767C7C7C7F7F7C7C7C7C7F7F7F
+7F7F7F7C7C7C7974726C675F4F6C6C6C6C6C6A6A66676A6A6C6E727274747474747474747476797C
+7C7C7C7C7F7F7F7F7F7F7F7F7F7C7C7B79797C7976767676767676767676767679797C7C7F7F8181
+8587898989898989898987878787878787858584848181817F7F7F7F818485878787898989898C8E
+8E8F8F92929292929494949492929292949494949494949494949494949494949499999999999494
+9494949494949699999999999A9A9996949494949494949494949494949494949494949494949494
+949494949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999999999969494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949496999999
+999999999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494
+9292928F8F8E89898989898787878585858585858585858585858584817F8181848587878989898E
+8F9292949494929292929292928E89847C7C89929CA6B1B9BEC6CCCFCFD3D4D4D4D4D3D1D1CFCFCF
+CFCFCFCFD3D4D9D1CCC6C1B77C999CA4B1B7B7B9BBBEBBBBBBBBC0C1C1C6C6C9CCCFD3D4D9D9D4CF
+C6BEB7AEA6A49E9C9C9A9A9A9A9C9C9C9C9E9E9C9C9A9A7F89929294949A9C9EA3A6AEB1B1AEABA9
+A6A6A39C94928F8E8987878787898989898989898989898989898989898989878787858585858585
+8585848181817F7F7F7F7F7F7F7C7C7C7C7C767676767676747474747472716C6C6C6C6A6A676661
+615F5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF7F84898E92949A9C9EA4A6ABAEB1B3B7B9B9B9B9B9B9B9B6B1AEABA6A49E9E9E9E9EA4A9B1
+B9C1C8CCD1D4D9D9DFE1E1E1E1E1E1DFDFDFDCD9D9D9D4D3CFCFCCC8C6C4C1BEBBB9B6B1AEA9A6A4
+A39E9C9994928C89847F79746C665F5D5C5757514F575F666A7274767C7C7F7F7F7F7C7C7F7F7F7F
+817F7F7F7F7F7F7C76746E6A5F516C6C6C6C6C6A6A676A6A6C6E727274747474747474747476767C
+7C7C7C7C7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C797676767676767676767676767676797C7C7F7F
+8185878787878989898787878787878785858484818181817F7F7F7F7F8184858787878989898989
+8C8E8F8F929292929292949292929292929494949494949494949494949494949494949499949494
+94949494949494949494969999999994949494949494949494949494949494949494949494949494
+949494949494949494949999999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999999
+99999694949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494999999999999999A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999969494929292
+92928F8E8C8989898787878787858585858585858585858585858584818485878789898C8E8F9292
+9294949494949494949292929289877F76878F99A1ABB6BEC1C6CFD1D1D3D4D4D4D4D3D3D1CFCFCF
+CFCFCFCFD3D4D9CFC8C4BE728E9EA4A9B6B9B9B9BBBEBEBEBBBEC0C1C4C6C8CCCFD1D3D4D7D9D1C8
+C1B9B4ABA6A39E9C9C9A9A9A9A9C9C9C9C9E9C9C9C9A7C8792929494999A9C9EA4A9AEB1B1AEABA9
+A6A6A39C9692928E8989878787898989898989898989898989898989898989898787858585858585
+8585848181817F7F7F7F7F7F7F7C7C7C7C7C797676767676767474747472726C6C6C6C6A6A676661
+615F5F5F5D5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF7C7F87898F94999A9CA3A6A9ABAEB1B3B6B7B9B9B9B9B9B7B3B1AEA9A4A39E9E9E9EA3A6AEB6
+BEC6CCCFD3D9D9DCDFE1E1E1E1E1E1DFDFDFDCD9D9D4D4D1CFCCC9C8C6C4C1BEBBB9B6B1AEA9A6A4
+A49E9C9A94928F8987817C76726A615F5C5757554F545C5F676C74767C7F7F7F7F7F7F7F7F7F7F81
+8181818181817F7F7C7674726A61546C6C6C6C6A6A6A6A6A6C6E7172747474747474747474747679
+7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C797676767676767676767474747676767C7C7F
+7F818587878787878787878787878785858484818181817F7F7F7F7F7F7F81848587878787898989
+898C8E8E8F8F92929292929292929292929292949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494999A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A999999999996949494949494949494949494949494949494949494949494949494949494949494
+949494949494949494949494949494949494949494949494949494949494999A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999994949492929292
+928F8E8C898989878787878585858585858585858585878787878785878789898E8F929292929494
+9494999999949494949492928E87817C7F89949CA6AEBCC1C4CCD3D3D3D4D4D4D4D4D3D3D1CFCFCF
+D1D1D1D1D3D4D4CCC6C172849EA6ABB1B9B9B9BBBEC0C0BEBEC0C1C1C6C6C8CCCFD1D1D4D4D4CCC6
+BEB7AEA6A49E9C9C9C9A9A9A9A9A9C9C9C9C9C9C9A76878F929494969A9C9EA1A6A9AEB3B1AEAEA9
+A6A4A39C9994928F8C89878787898989898989898989898989898989898989898787858585858585
+85858481817F7F7F7F7F7F7F7F7F7C7C7C7C797676767676767474747472726C6C6C6C6A6A6A6764
+615F5F5F5D5957554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF7F84878C9294999C9EA4A6A9AEB1B1B3B6B6B7B9B9B9B7B3B1AEA9A6A49E9E9E9E9EA4A9B1B9
+BFC6CFD1D4D9DCDEDFE1E1E1E1E1DFDFDFDCD9D9D9D4D3D1CFCCC8C6C6C4C1C0BBB9B7B1AEA9A6A6
+A4A19C9C9994928E8987817C76716A5F59575757554F555C616A7276797C7F7F7F7F7F7F7F7F8184
+84848484848484817F7F7C76746C61556C6C6C6C6C6A6A6A6C717272727474747474747474747676
+797C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C79767676767676767674747474747676797C
+7F7F818485878787878787878787858585848181817F7F7F7F7F7F7F7F7F7F818485878787878989
+89898C8C8E8F8F929292929292929292929292929292949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9999999999999996949494949494949494949494949494949494949494949494949494
+949494949494949494949494949494949494949494949494949494949494999A9A9A9A9A9A9A9A9A
+9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494929292929292
+928F8E89898987878785858585858585858787878787878787878787898E8F929292929494949494
+999A9A9A999994949494929289857C7C87929AA4ACB7C1C6C6CFD3D3D3D4D4D4D4D4D3D3D1CFCFD1
+D1D1D1D1D3D4D1C8C184929EA6AEB1B9BBBBBBBEC0C0C0C0C0C0C1C4C6C6CCCFD1D1D1D3D4D1C6C1
+B9B1ABA49E9E9C9C9A9A9A999A9A9C9C9C9C9C9C9A878F92949494999A9C9EA3A6AEB1B3B1AEAEA9
+A6A4A19C9A94928F8E89898787898989898989898989898989898989898989898787858585858585
+858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C797676767676767474747472726E6C6C6C6A6A6A6766
+615F5F5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF767F85898F92949A9C9EA4A6A9AEB1B1B3B3B3B6B7B6B6B3B1AEABA6A4A3A19E9EA1A3A6AEB3BE
+C4CCD1D4D9DCDEDFE1E1E1E1E1E1DFDFDEDCD9D9D9D4D3CFCFCCC8C6C6C4C1C0BBBBB7B1AEABA9A6
+A4A49E9C9A9A9492928E89847F766E675F57575757554F575F676C74797C7F7F7F7F817F81818484
+878787878787878584817F7C79746C5F546C6C6C6C6C6A6A6C717272727474747474747474747476
+76797C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7C7C7F7C7C7C7B79767676767676747474747474747679
+7C7F7F81848484858787878787858585858481817F7F7F7F7F7F7F7F7F7F7F7F8184858787878789
+898989898C8E8E8F8F92929292929292929292929292929294949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949499999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9999999999999996949494949494949494949494949494949494949494
+9494949494949494949494949494949494949494949494949494949494999A9A9A9A9A9A9A9A9A9C
+9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99969494949292928F8F8F
+8E8E8C8989878787858585858587878787878787878789898989898E92929294949494949499999A
+9A9A9C9A9A9994949494928C877F76848E949EA6B4BCC6C6CCD1D4D4D4D4D4D4D4D4D4D3D1CFD1D3
+D3D3D3D3D3D7CFC689929CA6A9AEB3B9BBBBBEC0C0C0C0C0C0C1C1C6C6C8CCCFD3D1CFD3D4CCC4BE
+B7AEA6A19E9C9C9A9A9A99999A9A9A9C9C9C9C9A7F8E9294949494999A9C9EA4A9AEB1B3B1B1AEA9
+A6A4A19C9A9492928E8C898987898989898989898989898989898989898989898787858585858585
+858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C797676767676767474747474726E6C6C6C6C6A6A6766
+61615F5F5F5D5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF7C8187899294949A9CA1A4A6A9AEAEB1B1B3B3B3B3B3B3B1AEABA9A6A4A4A39EA3A4A4ABB1B9BF
+C6CFD3D4D9DCDFDFE1E1E1E1E1E1DFDFDCD9D9D9D7D4D3CFCFCCC8C6C6C6C1C1BEBBB9B3B1AEA9A6
+A6A4A39E9C9C9A949494928C877F766C665D57555757555459616A7276797C7F7F7F818181848487
+8787878787878787878484817F7C766C5F6C6C6C6C6C6C6C6C717272727474747474747474747474
+7676797C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C797979797676767474747474747476
+797C7F7F7F8184818484858785858585858584817F7F7F7F7F7F7F7F7F7F7F7F8184858585878787
+89898989898C8C8E8E8F8F9292929292929292929292929292929494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999999999996969494949494949494949494949494
+9494949494949494949494949494949494949494949494949499999999999A9A9A9A9A9A9A9A9A9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949292928F8E8E8E
+8C8C8989898787858587878787878787878789898989898C8E8F9292949494949499999A9A9A9A9C
+9C9C9C9A9A99999494928F89817C7F89949CA4AEB7C1C6CCCFD4D4D4D4D4D4D4D4D4D4D3D1D1D1D3
+D3D3D3D3D4D4CC8C9299A4AEAEB1B6BBBBBBC0C0C1C1C0C0C0C1C4C6C6C9CFCFD3D1CFD1D1CBC1B9
+B1A9A49E9C9C9C9A9A9994999A9A9A9C9C9A9A7C8E9292949494999A9C9CA3A6A9AEB3B3B1B1AEA9
+A6A4A19C9A9492928F8E898989898989898989898989898989898989898989898787858585858585
+858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C79767676767676747474747472716C6C6C6C6A6A6A67
+64615F5F5F5D5957554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+727F85878E9294999C9EA3A6A6ABAEAEB1B1B1B1B3B1B1B1B1AEA9A6A4A4A4A3A3A4A4A6AEB3BBC4
+CCD3D4D9DCDFDFE1E1E1E1E1E1DFDFDCDCD9D9D9D4D4D1CFCCC9C6C6C6C6C1C1C0BBB9B6B1AEABA9
+A6A6A4A39E9E9C9C9C9C9A948F8981766C615C5555555554555D646C7476797C7F7F818484858587
+878789898989898987878787847F7C766A5D6C6C6C6C6C6C6C717274747474747474747474747474
+747676797C7C7C7F7F7F7F7F7F7F7F817F7F7F7F7F7F7F7C7C7C797C7C7976767474747474747474
+76767C7F7F7F81818181818484858585858584817F7F7F7F7F7F7F7F7F7F7F7F8184858585878787
+898989898989898C8C8E8E8F8F929292929292929292929292929292929494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999494949494949494949494949494
+9494949494949494949494949494949494949494949494949999999A9A9A9A9A9A9A9A9A9A9A9C9C
+9C9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9999999999949492929292928F8E8C8989
+898989898787878787878787898989898989898C8E8E8F92929292949494999A9A9A9A9A9C9C9C9C
+9C9C9C9A9A9A9994928F89877F7C87929AA3ABB4BEC6CCCFD3D4D4D4D4D4D4D4D4D4D4D3D1D1D3D3
+D4D4D4D4D461879C9C9EA6AEAEB1B9BBBBBBBEC0C1C1C1C1C1C1C6C6C6CCCFD1D3D1CFCFCFC6BEB6
+AEA6A19E9C9C9A9A999494999A9A9A9A9A9A7F899292949494999A9A9C9EA4A6ABB1B3B3B1B1AEA9
+A6A49E9C9A9494928F8E898989898989898989898989898989898989898989898787858585858585
+858585817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C767676767676747474747472716C6C6C6C6A6A6A67
+66615F5F5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+7C8187898F9294999C9EA4A6A9ABAEAEB1B1B1B1B1B1B1B1AEA9A6A4A4A4A4A4A4A4A6A9B1B9BEC6
+D1D4D9D9DFDFDFE1E1E1E1E1DFDFDFDCD9D9D9D4D4D3D1CFCCC8C6C6C6C6C4C1C1C0BBB9B3B1AEAB
+A9A6A6A4A4A19E9E9E9C9C9A9492897F746C61595555555551575F676C74767C7F7F7F8185858787
+87898989898989898989878787877F7C7266596C6C6E6E6E6E727274747474747474747474747474
+74747676797C7C7C7F7F7F7F7F7F8181817F7F7F7F7F7F7F7C7C7C7C7C7C79767474747474747474
+7476797C7F7F7F817F7F7F8184848585858584817F7F7F7F7F7F7F7F7F7F7F7F7F81848585858787
+8989898989898989898E8E8E8F8F8F92929292929292929292929292929292929494949494949494
+94949494949494949494949494949494949494949494949292929294949494949494949494949494
+9494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949494
+949494949494949494949494949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9C9C
+9C9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A99999996969494949292929292928F8E898989
+898989898787878787898989898C8C8E8E8E8F8F9292929294949496999A9A9C9C9C9C9C9C9C9C9C
+9C9C9C9C9A999494928E877F76848E949EA6AEB9C1C8CCCFD1D4D4D4D4D4D4D4D4D4D3D3D1D1D3D4
+D4D4D4D4717FA3A4A4A4AEB1B1B3B9BBBBBBBEC0C1C1C1C1C1C4C6C6C8CCCFD3D3D1CFCFCCC1B9B1
+ABA49E9C9C9A9A999494969A9A9A9A9A9A7F899292949494999A9A9A9CA3A6A9AEB1B3B3B3B1AEA9
+A6A49E9C9A9694928F8E8E8989898989898989898989898989898989898989898787878585858585
+85858581817F7F7F7F7F7F7F7F7F7C7C7C7C7C797676767676767474747472716C6C6C6C6A6A6A67
+6661615F5F5F5C5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+7F8587899294949A9C9EA4A6A9ABAEAEAEB1B1B1B1B1B1AEABA6A6A4A4A4A4A4A4A6A6AEB3BBC1CC
+D4D9D9DCDFDFDFE1E1E1E1E1DFDFDCD9D9D9D9D4D4D3CFCFCCC8C8C6C6C6C6C1C1C0BEB9B6B1AEAE
+ABA9A6A6A6A4A4A4A19E9E9C9A9492877C726A5F57555555554F59616A7174767C7F7F8184878787
+8989898C8E8C8989898989898987817C766C61576C71717171727274747474747474767474747474
+7474767676797C7C7C7F7F7F7F7F818481817F7F7F817F7F7F7C7C7C7C7C7C767674747474747474
+7474767B7C7F7F7F7F7F7F7F81848485858584817F7F7F7F7F7F7F7F7F7F7F7F7F81848585858787
+8789898989898989898C8E8E8E8E8F8F8F9292929292929292929292929292929292929494949494
+94949494949494949494949494949494949494949494949292929292929292929292929292929494
+9494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949494
+9494949494949494949494949494949494949494949494999A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C
+9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9996949494949494929292928F8F8F8E8C898989
+8989898989878989898C8E8F8F8F929292929292929494949499999A9A9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9A9A9994928F8981767F89949CA4AEB4BCC4C9CCCFD1D3D3D3D3D3D3D4D4D4D3D1D1D1D3D3
+D4D38F969EA6ABAEAEAEB3B3B3B3B9BBBBBBBEC0C1C1C1C1C1C6C6C6CCCFD1D4D3D1CFCFC6BEB6AE
+A9A49E9C9A9A99949494999A9A9C9C9C7C898E92949494999A9A9A9C9EA4A6ABB1B3B3B3B3B1AEA9
+A6A49E9C9A999492928F8E8C89898989898989898989898989898989898989898987878585858585
+85858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C797676767676767474747472726C6C6C6C6A6A6A6A
+6764615F5F5F5D5957554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C
+8187898E9294949A9C9EA4A6A9ABAEAEAEB1B1B1B1AEAEAEA9A6A6A4A4A4A4A4A6A6A9B1B9C0C6CF
+D4D9D9DCDFDFDFE1E1E1DFDFDFDEDCD9D9D9D4D4D3D3CFCFCCC8C8C8C6C6C6C6C1C1C0B9B9B3B1AE
+AEA9A9A9A6A6A6A6A4A4A39E9C9A928E857972675F5754555555555D666C7274797C7F8184878787
+8989898E8E8E8C89898989898989877F7C746A5F5471727272727274747474747676767674747474
+747476767676797C7C7C7F7F7F7F8184848181818181817F7F7F7F7C7C7C7C797674747474747474
+747476797C7C7F7F7F7F7F7F7F81818485848481817F7F7F7F7F7F7F7F7F7F7F7F81848585858587
+8789898989898989898C8E8E8E8E8E8E8F8F92929292929292929292929292929292929292929494
+94949494949494949494949494929294949494949494929292929292929292929292929292929292
+929494949494949494949499999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949494
+9494949494949494949494949494949494949496969699999A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C
+9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9994949494949292928F8F8F8E8E8E8C89898989
+89898989898989898E8F92929292929294949494949494999A9A9C9C9C9C9C9E9E9E9E9E9C9C9E9E
+9C9C9C9A9994948F89847C7B87929AA1A9B1B6BEC6CCCCCFD1D3D3D3D3D3D3D3D3D3D3D1CFCFD1D3
+D489949CA4ABAEB1B1B6B9B7B7B7BBBBBBBBBEC0C1C1C1C1C4C6C6C8CCCFD3D4D3D1CFCCC4B9B1AB
+A69E9C9C9A9994949494999A9C9C9C81898C92949496999A9A9A9C9CA3A6A9AEB1B3B3B3B3B1AEA9
+A6A49E9C9C999492928F8E8C89898989898989898989898989898989898989898987878585858585
+85858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7676767676767474747472726C6C6C6C6A6A6A6A
+6766615F5F5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F
+8487898F9294969C9EA1A4A6A9ABAEAEAEAEAEB1AEAEAEA9A6A6A4A4A4A4A4A4A6A6AEB3BBC1C8D1
+D9D9D9DCDFDFDFDFDFDFDFDFDFDCD9D9D9D9D4D4D3D1CFCFCCC9C9C8C8C6C6C6C4C1C1BEB9B6B1AE
+AEABABABA9A6A6A6A6A6A4A49E9C948F897F766C675F5751555555575F676C72767C7F8184878787
+89898C8E8E8E8E8C898C8C8C898987847F7672675D6C727272727274747476767676767676747474
+74747476767676797C7C7C7F7F7F7F8185848181818181817F7F7F7F7F7F7F7C7676747474747474
+74747676797C7C7F7F7F7F7F7F7F818184848181817F7F7F7F7F7F7F7F7F7F7F7F7F818485858587
+878989898989898989898E8E8E8E8E8E8E8E8F929292929292929292929292929292929292929292
+92929494949494949494949494929292929292929292929292929292929292929292929292929292
+929494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494949494949494949494
+94949494949494949494949494949494949499999999999A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9E
+9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9994949494949492928F8E8E8E8C8C89898989898989
+8989898989898C8E929292949494949494949496999A9A9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E
+9C9C9C9A99949289877C76848E949EA6AEB6B9C1C9CCCCCFD1D1D1D1D1D1D1D3D3D3D1CFCFCFD1D3
+7C9C9C9EA6AEAEB1B3B7B9B9B9B9BBBBBBBBBBC0C1C1C1C1C6C6C6C8CCCFD3D4D1CFCCC6BEB6AEA9
+A49E9C9A9994949494999A9C9C9C81898F92949499999A9A9C9C9C9EA4A6ABAEB3B3B3B3B3B1AEA9
+A6A49E9C9C9A9494928F8F8E8C898989898989898989898989898989898989898987878585858585
+8585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676767474747472726E6C6C6C6A6A6A6A
+676661615F5F5F5C5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7981
+87898C929294999C9EA3A4A6A9ABAEAEAEAEAEAEAEAEABA9A6A4A4A4A4A4A4A6A6A9B1B7BEC4CCD3
+D9D9D9DFDFDFDFDFDFDFDFDFDCDCD9D9D9D4D4D3D3D1CFCFCCCCCCC9C8C8C6C6C6C1C1BEB9B6B1B1
+AEAEAEAEABA9A9A9A9A6A6A6A49C949289877F746A665F575455555557616A6C74767C8184858787
+8989898E8E8E8E8C8C8C8E8E8C8989877F7C746C6457727272727274767676767679767976767474
+7476767676767676797C7C7C7F7F7F8184858481848484848181817F7F7F7F7C7C76767474747474
+74747476797C7C7C7F7F7F7F7F7F7F81818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858587
+878789898989898989898C8E8E8E8E8E8E8E8F929292929292929292929292929292929292929292
+92929292929294949494949492929292929292929292929292929292929292929292929292929292
+929294949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949494
+949494949494949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A99999994949492929292928F8E8C8C89898989898989898989
+8989898C8C8E8F929294949494969999999A9A9A9A9C9C9C9C9C9E9E9E9EA1A3A4A39E9E9E9E9E9E
+9C9C9A9A949289877F767F89949CA4ABB6B9BEC4CCCCCCCFCFCFCFCFD1D1D1D1D1D1D1CFCFCFCF72
+92A6A4A4ABB1AEB1B3B9B9B9BBBBBBBBBBBBBBC0C1C1C1C1C6C6C8CCCFCFD3D3CFCCCCC4B9B1A9A6
+9E9C9A999494949494999A9C9C81899294949499999A9A9A9C9C9EA3A6A9AEB1B6B3B3B3B3B1AEAB
+A6A49E9C9C9A969492928F8E8C898989898989898989898989898989898989898987878585858585
+8585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676767474747472726E6C6C6C6C6A6A6A
+6A6764615F5F5F5D5957554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F84
+87898E9292949A9C9EA4A6A6A9ABAEAEAEAEAEAEAEABA9A6A6A4A4A4A4A4A4A6A9AEB1B9C1C6CFD4
+D9D9DCDFDFDFDFDFDFDFDFDFDCD9D9D9D7D4D4D3D3D1CFCFCCCCCCCCC9C8C8C6C6C4C1BEB9B6B3B1
+B1AEAEAEAEAEAEAEA9A9A6A6A49E9A928E878179726A615D555555555559616A7174797F81858787
+898989898E8E8E8E8C8E8E8E8C898987847F79746A6155727272747476767679797C7B7979767676
+767676767676767676797C7C7C7F7F8184858584848485858484848181817F7F7C7C767674747474
+7474747676797C7C7C7F7F7F7F7F7F7F8181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858585
+87878989898989898989898E8E8E8E8E8E8E8F929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949494949494949494
+9494949494949494949494949494949494999A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9E9E
+9E9E9E9E9E9E9C9C9C9C9C9C9C9A9A999494949292929292928F8C89898989898989898989898989
+8C8C8E8E8F9292949499999A9A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9EA3A4A4A4A4A3A19E9E9E9E9C
+9C9C9A94928E877F767C87929A9EA6B1B9BEC1C6CCCCCCCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF6C87
+A4ABA9A6B1B3B1B1B6B9B9B9BBBBBBBBBBBBBBC0C0C1C1C1C6C6C8CCCFD1D4D1CFCCC6BEB6AEA6A4
+9E9C9A9494949494949A9A9C858992949499999A9A9A9A9C9C9C9EA4A6ABAEB3B6B3B3B3B1B1AEAB
+A6A49E9E9C9A999492928F8E8E898989898989898989898989898989898989898987878585858585
+858585858481817F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676747474747472716C6C6C6C6A6A6A
+6A6766615F5F5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767F87
+89898F9294949A9C9EA4A6A6A9ABAEAEAEAEAEAEABA9A9A6A4A4A4A4A4A4A6A6A9AEB7BEC4C8CFD9
+D9D9DCDFDFDFDFDFDFDFDFDCDCD9D9D9D4D4D4D3D1CFCFCCCCCCCCCCCCC9C8C6C6C6C1C0B9B7B3B1
+B1B1B1B1AEAEAEAEABA9A9A6A49E9C949289847F746C6A615C55555555545C666A72767C81848787
+878989898C8E8E8E8C8E8E8E8E8C898787817C76726A5F72747474747679797C7C7C7C7C7C797676
+76767676767676767676797C7C7C7F7F8485858585858587878787858484817F7F7C7C7674747474
+747474767676797C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585
+87878989898989898989898C8E8E8E8E8E8E8E8F9292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292928F92929292929292929292929292929292
+92929294949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949494949494
+9494949494949494949699999999999999999A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9E9E9E
+9E9E9E9E9E9E9C9C9C9C9C9C9A9A9994949492929292928F8E898989898989898989898989898C8E
+8E8E8F92929494999A9A9A9A9C9C9C9C9C9C9C9C9C9E9E9E9EA1A3A4A4A4A4A4A4A4A39E9E9E9E9C
+9C9A94928F89817C79848E949CA6AEB7BEC1C6CCCCCCCCCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF879A
+B6B1AEAEB6B6B1B1B6B9B9B9BBBBBBBBBBBBBBBEC0C1C1C4C6C8CCCCCFD3D4CFCCC8C4BCB1A9A49E
+9C9A999494949494999A74878E94949499999A9A9A9A9A9C9C9EA3A6A9AEB1B6B6B3B3B3B1B1AEAB
+A6A4A19E9C9C99949292928F8E8C8989898989898989898989898989898989898987878585858585
+858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676747474747472726C6C6C6C6A6A6A
+6A676661615F5F5F5C5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8487
+898E929294999C9C9EA4A6A6A9ABAEAEAEAEABABA9A9A6A6A4A4A4A4A4A6A6A9ABB1B9C1C6CCD3D9
+D9D9DCDFDFDFDFDFDFDFDFDCD9D9D9D4D4D4D4D3D1CFCFCCCCCCCCCCCCCCC8C8C6C6C1C0BBB9B6B3
+B1B1B1B1B1B1AEAEABA9A9A6A49E9C949289877F7C726C67615957555555545F676C74767F848787
+87878789898E8E8C8C8C8E8E8E8E8C8987857F7C746E66597274747476797C7C7C7C7C7C7C7C7C79
+7676767676767676767676797C7C7C7F818585858585858787878787858484817F7F7C7C76767474
+74747474767676797C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585
+87878789898989898989898C8E8E8E8E8E8E8E8F8F8F929292929292929292929292929292929292
+929292929292929292929292929292929292929292928F8E8F929292929292929292929292929292
+92929294949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949494949494
+94949494949494949699999999999999999A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9E9E9E
+9E9E9E9E9E9C9C9C9A9A9A9A9A9994949292928F8F8F8F8C898989898989898989898989898C8E8F
+8F92929494949A9A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A39E9E9E9C9C
+9A99948F89857C767F89929AA3ABB1BBC1C6C8CCCCCCCCCFCFCFCFCFCFCFCFCFCFCFCFCFCF92A4B6
+BBB9B7B3B9B7B3B3B7B9B9B9BBBBBBBBBBBBBBBEC0C1C1C6C6C8CCCFCFD3D4CFC8C6C1B7AEA6A39E
+9C9994949494949499748592949499999A9A9A9A9A9A9A9C9C9EA4A6ABAEB3B9B6B3B3B3B1B1AEA9
+A6A4A39E9C9C9A949492928F8E8C8989898989898989898989898989898989898987878585858585
+858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C76767676767474747472726E6C6C6C6C6A6A
+6A676761615F5F5F5D5957554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767F8789
+898F9292949A9C9E9EA4A6A6A9ABABAEAEABABA9A9A9A6A4A4A4A4A4A6A6A6A9AEB6BEC4C8CFD4D9
+D9DCDFDFDFDFDFDFDFDCDCD9D9D9D9D4D4D3D3D3D1CFCFCCCCCCCFCCCCCCC9C8C6C6C1C0BBB9B9B6
+B3B3B1B1B1B1B1AEAEA9A9A6A49E9C94928C87817C74726C675F5957555555545F6771747C7F8587
+8787878789898C8C898C8E8E8E8E8E898787847F79746C615574747476797C7C7C7F7F7F7F7C7C7C
+797676767676767676767676797C7C7F7F848585858585858787878787858481817F7F7C7C767674
+7474747476767676797C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585
+8587878989898989898989898E8E8E8E8E8E8C8E8E8F8F8F92929292929292929292929292929292
+9292929292929292929292929292929292929292928F8E8E8E8F9292929292929292929292929292
+9292929494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494949494949494949494949494
+9494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9E9E9E9E9E9E9E
+9E9E9E9E9C9C9C9A9A9A9A9A99949492928F8E8E8E8E8C89898989898989898989898989898E8F92
+9292949494999A9A9C9C9C9C9E9E9E9E9E9E9EA1A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9C9C9A
+9994928C877F767F8992999EA6AEB9C0C1C6C8CCCCCCCCCCCCCCCCCCCFCFCFCFCFCFCFCF99A4AEB9
+BBBBBBB9B9B9B6B3B9B9B9BBBBBBBBBBBBBBBBBEC0C1C1C6C6CCCCCFD1D3D3CFC6C4BEB1A9A49E9C
+9A949494949494967485929494999A9A9A9A9A9A9A9A9C9C9EA3A6A9AEB1B6B9B6B3B3B1B1B1AEA9
+A6A4A39E9C9C9A949492928F8F8E8C89898989898989898989898989898989898987878785858585
+85858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676747474747472716C6C6C6C6A6A
+6A676766615F5F5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C818789
+8C8F9294969A9C9E9EA4A6A6A9ABABAEABABA9A9A9A6A6A4A4A4A4A6A6A6A9AEB1B9BFC6CCD3D9D9
+DCDCDFDFDFDFDCDCDCDCDCD9D9D9D4D4D3D3D3D3D1CFCFCCCFCFCFCFCCCCC9C8C6C6C1C0BBB9B9B6
+B3B3B3B1B1B1B1AEAEA9A9A6A49E9A94928E89847F79746E6A645F595755555554616A72767C8184
+848587878789898989898C8E8E8E8C89898787817C76726A5F51747476797C7F7F7F7F7F7F7F7F7C
+7C797676767676767474747676797C7C7F81848585858585878787878785858481817F7F7C7C7976
+7674747676767676797C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81848585
+8587878989898789898989898C8E8E8E8E8E8C8C8C8E8E8E8F8F8F929292929292928F8F8F8F8F92
+9292929292929292929292928F8F8F8F8F8F8F8F8F8F8E8E8E8F9292929292929292929292929292
+9292929294949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949494949494
+94949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9C
+9C9C9C9C9C9C9A9999999994949492928F8E8C8C8989898989898989898989898989898C8C8E8F92
+9292949496999A9C9C9C9C9E9E9EA1A3A3A4A4A4A4A4A4A4A4A4A4A6A4A4A4A4A4A4A19E9E9C9A9A
+94928E877F767C878E949CA4ABB1B9C1C1C6C8CCCCCCCCCCCCCCCCCCCCCCCCCCCCCFCF929CA6B1BB
+BBBBBBBBBBB9B9B6B9B9B9BBBBBBBBBBBBBBBBBEC0C1C1C6C8CCCFCFD1D4D1CCC6C1B9AEA6A39E9C
+999494949494946787929494999A9A9A9A9A99999A9A9C9C9EA4A6ABAEB3B9B9B6B6B3B1B1AEAEA9
+A6A6A49E9C9C9A99949292928F8E8C89898989898989898989898989898989898989878785858585
+85858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676747474747472726C6C6C6C6A6A
+6A67676661615F5F5F5C5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727C878789
+8E8F9294999C9C9E9EA4A6A6A9A9ABABABA9A9A9A6A6A4A4A4A4A6A6A6A6ABAEB1BCC4C8CFD4D9D9
+DCDCDFDEDCDCDCDCD9D9D9D9D9D7D4D4D3D3D3D1CFCFCFCFCFCFCFCFCCCCCCC8C6C6C1C0BBB9B9B7
+B6B6B3B3B3B1B1AEAEABA6A6A39E9A94928E89857F7974726C6A615F595557555555616C74767C7F
+81848485878789898989898C8E8C8C89898787857F7C746E665C747476797C7F7F7F7F7F7F7F7F7F
+7F7C797676767474747474747676797C7C7F81848585858587878787878585858481817F7F7C7C7C
+7976767676767676797B7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81848585
+85878787898787878989898989898C8E8E8C898989898C8C8E8E8E8F8F8F9292928F8F8E8E8E8E8F
+8F8F8F8F929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292929292929292
+929292929494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949494949494949494949494
+94949499999999999A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C
+9C9C9C9C9C9A9996949494949492928F8E8C89898989898989898989898989898C8C8E8E8F929292
+94949494999A9A9C9C9C9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A4A4A4A3A3A19E9E9C9C9A96
+948E8781767C8789929AA1A6AEB6BBC1C1C6C8C9C9C9CCCCCCCCCCCCCCCCCCCCCCCC859E9EA6B1BB
+BBBBBBBBBBBBB9B7B9B9B9BBBBBBBBBBBBBBBBBEC0C1C1C6C8CCCFCFD3D4CFC9C6BEB4ABA49E9C9A
+99949494949494878E9494999A9A9A9A999996999A9C9C9C9EA4A9AEB1B6B9B7B6B3B3B1B1AEAEA9
+A6A6A49E9C9C9C99949292928F8F8E8C898989898989898989898989898989898989878785858585
+85858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7B7676767676747474747272716C6C6C6C6A
+6A6A676761615F5F5F5D5957554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7F87898C
+8F9292949A9C9C9EA1A4A6A6A9A9ABABA9A9A9A6A6A6A4A4A4A6A6A6A6A9AEB1B7BEC6CCD1D4D9D9
+DCDFDEDCDCDCD9D9D9D9D9D9D9D4D4D3D3D3D1D1CFCFCFCFCFCFCFCFCCCCCCC8C8C6C1C0BBBBB9B9
+B7B7B6B6B3B3B1AEAEA9A6A49E9C9A94928C89847F7C74746C6A67615D575557575555666C74767C
+7F81818484878789898989898C8C898989898787857F79746A61577474797C7F7F7F81818181817F
+7F7F7C797676747474747474747676797C7C7F81848585848487878787858585858481817F7F7C7C
+7C7B767676767679797C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818485
+858587878787878787878989898989898C898989898989898C8C8C8E8E8E8F8F8E8E8C8C8C8C8C8E
+8E8E8E8F8F8F8F8F8F8F928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292929292929292
+929292929494949494949494949494999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999
+999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949494949494949494
+949499999999999A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C
+9C9C9C9C9A9994949494949292928F8F8E89898989898989898989898989898C8E8F8F8F92929494
+949494999A9A9C9C9C9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A6A6A6A4A4A3A19E9E9E9C9C9A9994
+8F89817676848992999EA4A9AEB6BBC1C1C6C8C8C8C8C8C8C8C9C9CCCCCCCCC8C97694A6A6ABB6BB
+BBBBBBBBBBBBB9B9B9B9B9BBBBBBBBBBBBBBBBC0C0C1C4C6C9CFCFD1D3D4CFC6C1B9AEA69E9C9C9A
+949494949494878992999A9A9A9A9A99969494999A9C9C9EA4A6ABAEB1B9B9B7B6B3B3B1B1AEAEA9
+A6A6A49E9C9C9C9A94949292928F8E8C898989898989898989898989898989898989878785858585
+85858585858585817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7676767676747474747472716C6C6C6C6A
+6A6A676766615F5F5F5F5C5755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8487898E
+8F9294999C9C9E9EA3A4A6A6A9A9ABA9A9A9A6A6A6A6A4A4A6A6A6A6A6ABAEB1B9C1C8CFD3D9D9D9
+DCDFDCDCDCDCD9D9D9D9D9D9D4D4D4D3D1D1D1D1CFCFCFCFCFCFCFCFCCCCCCC9C8C6C1C0BBBBB9B9
+B9B9B7B6B3B1B1AEABA6A6A49E9C9A94928C87817F7C7474716C6A645F5D575757575755676C7476
+7C7F7F7F7F84878789898989898989898989878785817C7672675D5174767C7C7F7F818181848481
+817F7F7C797676747474747474747476767C7C7F81848484848487878785858585858481817F7F7F
+7C7C7976767676797C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818184
+8485878787878787878787878989898989898989898989898989898C8C8C8C8C8989898989898989
+8C8C8C8C8E8E8E8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8F92929292929292929292929292
+9292929294949494949494949494949494969999999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9996
+99999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949494949494949494
+9494999A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9C9C9C9C
+9A9A9A9A99949494929292928F8E8E8E8C89898989898989898989898989898E8F8F929292949494
+9494999A9A9C9C9C9E9E9EA1A4A4A4A4A4A4A6A6A4A4A4A4A4A6A6A4A4A19E9E9E9E9C9C9A94948F
+89847976818992949CA3A6AEB1B9BEC1C1C6C6C6C8C8C8C8C8C8C8CCCCCCCCC87287A4ABABAEB9BB
+BBBBBBBBBBBBB9B9B9B9BBBBBBBBBBBBBBBBBEC0C0C1C4C6C9CCCFCFD3D1CCC4BBB6ABA49E9C9A99
+9494949494848C92999A9A9A9A9999949494999A9A9C9C9EA6A9AEB1B3B9B9B7B6B3B1B1B1AEAEA9
+A6A6A49E9C9C9C9A94949292928F8E8E898989898989898989898989898989898989878787858585
+8585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7676767676747474747472726C6C6C6C6A
+6A6A67676661615F5F5F5C5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7F85898C8F
+9292949A9C9C9E9EA3A4A6A6A9A9A9A9A9A6A6A6A6A6A4A6A6A6A6A6A9AEB1B6BEC4CCCFD4D9D9DC
+DCDFDCDCDCD9D9D9D9D9D9D9D4D4D3D1D1D1D1D1CFCFCFCFCFCFCFCFCFCCCCC9C8C6C1BEBBBBB9B9
+B9B9B9B6B1B1AEABA9A6A49E9C9A96928F8987817C7C7674726C6C6A615F5C575757575757676C74
+767C7F7C7C7F818587878989898989898989878785847F79746C615774767C7C7F7F818184848584
+81817F7F7C797674747474747274747474767C7C7F81848481848487858585858585858481817F7F
+7F7C7C79767676797C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81
+81848585858585858587878787878989898989898787898989898989898989898989898989898989
+8989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8F928F8F8F8F92929292929292929292929292
+92929294949494949494949494949494949494949494969999999999999A9A9A9A9A9A9A9A999694
+94949494999A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494949494949494949494949494949494
+9494999A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A
+9A9A9A9694949292928F8F8E8E8C8C8989898989898989898989898989898C8E8F92929294949496
+99999A9A9C9C9C9E9E9E9EA3A4A4A6A6A6A6A6A6A4A4A4A4A4A4A4A4A39E9E9E9E9C9C9A94929289
+847C767F878F949A9EA6ABAEB1B9BEC1C1C6C6C6C6C6C6C6C6C6C8C9CCCCC87F8994B1B1B1B1BBBB
+BBBBBBBBBBBBB9B9B9B9BBBBBBBBBBBBBBBBBEC0C1C1C6C6CCCCCCCFCFCCC6BEB9B1A69E9C9A9996
+94949494818E92999A9A9A9A999694949494999A9C9C9EA4A6AEB1B1B7BBB9B7B3B3B1B1AEAEABA9
+A6A4A49E9C9C9C9A9994929292928F8E8C8989898989898989898989898989898989878787858585
+8585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676747474747272716C6C6C6C
+6A6A67676761615F5F5F5D5957554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8187898E8F
+9294949A9C9C9E9EA4A4A6A6A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A9A9AEB1B7BEC6CCD1D4DCDCDC
+DCDFDCD9D9D9D9D9D9D9D4D4D4D4D3D1D1D1D1CFCFCFCFCFCFCFCFCFCFCCCCC8C6C6C1BEBBBBBBB9
+B9B9B6B1B1AEAEA9A6A4A39E9C9A94928E89877F7C797674726E6C6A67615F5C57595C595C57546C
+7274767C7C7C7F818487878989898989898987878581817C76726A5F55767C7C7F7F818484858585
+8481817F7F7C797674747474727272747474767C7C7F7F8181818484858585858585858584817F7F
+7F7F7C7C797676797C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+81818481818181818484858787878787878989878787878787898989898989898989898989898989
+89898989898989898E8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949496999999999999999A9A999494
+9494949496999A9A9A9A9A9A9A999999999999949494949494949494949494949494949494949494
+9494999A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9A
+999994949492928F8E8C8C8989898989898989898989898989898C8C8E8E8E8F9292929494949999
+999A9C9C9C9E9E9EA1A1A1A3A4A4A6A6A6A6A6A6A4A4A4A4A4A4A4A39E9E9E9E9C9C9A94928F8984
+7C767C878E949A9EA4A9AEB1B6BBBEC1C1C6C6C6C6C6C6C6C6C6C6C8C9C9C894A3AEB9B7B6B6BBBB
+BBBBBBBBBBBBB9B9B9B9BBBBBBBBBBBBBBBBBEC0C1C1C6C6CCC9C9CCCFC6C4B9B6ACA49C9C9A9994
+9494727F899494999A9A9A9A9994949494969A9A9C9EA3A6A9B1B1B6B9BBB9B7B3B3B1B1AEAEABA9
+A6A4A49E9E9C9C9A9994949292928F8E8C8989898989898989898989898989898989898787858585
+8585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676747474747472716C6C6C6C
+6A6A67676766615F5F5F5F595755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C84878C8F92
+9294999A9C9C9EA1A4A4A6A6A9A9A9A6A6A6A6A6A6A6A6A6A6A6A9A9ABAEB1B9C1C6CFD3D9DCDCDC
+DEDEDCD9D9D9D9D7D4D4D4D4D4D3D3D1D1D1D1CFCFCFCFCFCFCFCFCFCFCCCCC8C6C6C1BEBBBBBBBB
+B9B6B3B1AEAEABA6A6A49E9C9A9694928C87857F7C767472726C6C6A6A66615F5C5C5D5D5D5F5C55
+6A71727476767C7F8184858787878989898787878581817F7C746C615774797C7F7F7F8185858585
+858481817F7F7C79767474747472717272747476797C7C7F7F7F8184858585858585858584817F7F
+7F7F7C7C7C797676797C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F81817F7F7F818181848485878787878787878787878787878787878989898989898989898989
+89898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949496999999949494
+9494949494999A9A9A9A9A9A9A999494949494949494949494949494949494949494949494949494
+949496999A9A9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9A99
+9994949492928E8C8989898989898987878789898989898989898E8E8F8F8F8F929292949496999A
+9A9C9C9C9E9E9EA3A3A4A4A4A4A4A6A6A6A6A6A6A4A4A4A4A4A4A49E9E9E9C9C9C9994928F89847C
+767C878C92999CA4A6ABB1B3B9BBBEC1C1C6C6C6C6C6C6C6C6C6C6C8C9C89AA4ABB6B9B9BBBBBBBB
+BBBBBBBBBBBBB9B9B9B9BBBBBBBBBBBBBBBBC0C0C1C1C6C6CCC8C6C9CCC4BEB7AEA69E9C9A999494
+9494818C929494999A9A9A9A9994949494999A9C9EA1A4A9AEB1B6B9B9BBB9B6B3B3B1B1AEAEABA9
+A6A4A49E9E9C9C9A9994949292928F8F8E8C89898C89898989898989898989898989898787878585
+8585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676747474747472726C6C6C6C
+6A6A6767676661615F5F5F5C5755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C8185898E8F92
+92949A9C9C9E9EA1A4A4A6A6A6A9A9A6A6A6A6A6A6A6A6A6A6A6A9A9AEB1B3B9C1C9CFD4D9DCDCDC
+DFDCDCD9D9D9D9D4D4D4D4D4D4D3D1D1D1D1D1CFCFCFCFCFCFD1CFCFCFCCCCC8C6C6C1C0BBBBBBB9
+B7B3B1AEAEABA9A6A4A39E9C9C9994928987817F79747472726C6C6C6A6761615F5D5D5F5F5F5F5D
+57676C717274767C7F7F7F84878787878787878784817F7F7C76726A5F55767C7C7F7F8184858585
+85858481817F7F7C7B7674747472726C6E72727476767C7C7F7F7F8184858585858585858581817F
+7F7F7F7C7C7C7979797C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F818485858587878787878785858587878787878787878789898989898989
+8989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+9494949494999A9A9A9A9A9A99969494949494949494949494949494949494949494949494949494
+949494999A9A9A9A9A9A9A9A9A9A9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9996
+949492928F8E898989898989878787878787878989898989898C8E8F929292929292949494999A9A
+9C9C9C9E9E9EA3A4A4A4A4A4A4A6A6A6A6A6A6A6A4A4A4A4A4A49E9E9C9C9C9C9994928F89847C76
+7C858992999CA3A6ABAEB1B6B9BBBEC1C1C4C4C6C6C6C6C6C6C6C6C6C8949CA6AEB9B9B9BBBBBBBB
+BBBBBBBBBBBBB9B9B9BBBBBBBBBBBBBBBBBEC0C0C1C1C6C8C9C6C6C8C6BFB9B1ABA49C9C99949494
+94858992929494999A9A9A9994949494949A9C9C9EA4A6AEB1B3B9B9BBB9B9B6B3B1B1B1AEAEABA9
+A6A4A49E9E9C9C9A9A9494929292928F8E8C89898C8C898989898989898989898989898787878585
+8585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676767474747472726E6C6C6C
+6C6A6A67676761615F5F5F5D595755514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797C8187898F9292
+94999A9C9C9E9EA3A4A4A6A6A6A9A6A6A6A6A6A6A6A6A6A6A6A6A9ABAEB1B7BEC6CCD1D4DCDEDEDF
+DFDCDCD9D9D9D4D4D4D4D4D4D4D3D1D1D1D1D1CFCFCFCFCFD1D1CFCFCFCCC9C8C6C4C1C0BEBBB9B9
+B6B1B1AEABA9A6A6A49E9E9C9C9994928F89847C76747271716C6C6C6A6A66615F5F5F5F615F5F5F
+5F5C556A6C6C7274767C7F7F848787878787878484817F7F7F7C746E665C547C7C7F7F8184858585
+8585858481817F7F7C7C7676747472716C6C6E72747476797C7C7F7F81848585858585858584817F
+7F7F7F7F7C7C7C797B7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F8184858585858587878585858585858585878787878787878789898989
+898989898989898989898989898E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292
+92929292929292949494949494949494949494949494949494949494949494949494949494949494
+94949494949499999999999999949494949494949494949494949494949494949494949494949494
+949494999A9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A999494
+92928F8E8C898989878787878787878787878989898989898C8E8F92929292929294949696999A9C
+9C9C9C9E9EA1A3A4A4A4A4A4A4A6A6A6A6A6A6A4A4A4A4A4A4A19E9C9C9C9A9994928E87817C767C
+848992949CA1A6A9AEB1B1B7B9BBBBC0C1C1C1C1C1C1C1C1C1C6C6C689A3A3A6B1B9B9B9BBBBBBBB
+BBBBBBBBBBBBBBB9B9BBBBBBBBBBBBBBBBBEC0C1C1C4C6C8C8C6C6C6C1BEB6AEA69E9C9A94949494
+85898E9292949499999A9A9994949494999A9C9EA4A6A9AEB3B7B9BBBBB9B9B6B3B1B1B1AEAEABA9
+A6A4A49E9E9C9C9A9A9694949292928F8E8E898C8C8C898989898989898989898989898987878785
+8585858585858585817F7F7F7F7F7F7F7C7C7C7C7C7C7C79767676767676747474747472716C6C6C
+6C6A6A67676766615F5F5F5F595755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7F84898E8F9294
+94999A9C9C9E9EA3A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9AEB1B3B9BFC6CFD3D9DEDFDFDF
+DFDCD9D9D9D9D4D4D4D4D4D4D3D3D1D1D1D1CFCFCFCFCFCFD1D1CFCFCFCCC8C6C6C1C1C0BBB9B9B6
+B3B1AEABA9A6A6A4A39E9C9C9C9994949289857F7674726C6C6C6C6C6A6A676661615F5F61616161
+615F5D5761676A7274767C7C7F8485858585848481817F7F7F7C76726C6157797C7C7F8184858585
+858587858481817F7F7C7C79767474726C6C6C6C72747474767C7C7F7F818485858585858584817F
+7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F8184858585858585858585858585858585858585878787878789898989
+898989898989898989898989898C8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292
+92929292929292929292929294949494949494949494949494949494949494949494949494949494
+94949494949494949494949694949494949494949494949494949494949494949494949494949494
+94949494999A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A99949492
+8F8E8989898787878787878585858587878989898989898C8E8F92929292929494949999999A9A9C
+9C9C9E9E9EA3A4A4A4A4A4A4A6A6A6A6A6A6A6A4A4A4A4A3A19E9E9C9C9A9994928C87817C767C84
+898F949C9EA4A6A9AEB1B3B9B9BBBBBEC1C1C1C1C1C1C1C1C1C1C17F99A6A6ABB3B9B9B9BBBBBBBB
+BBBBBBBBBBBBBBBBB9BBBBBBBBBBBBBBBBBEC0C1C1C6C6C8C6C6C4C6BEB9B1ABA49E9A999494947F
+878992929494949499999994949494999A9C9EA3A6A9AEB1B9B9B9BEBBB9B9B6B3B1B1B1AEAEABA9
+A6A4A49E9E9C9C9A9A999494929292928F8E8C8C8C8E898989898989898989898989898987878785
+8585858585858585817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C767676767676747474747472716C6C6C
+6C6A6A6767676661615F5F5F5C575554514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C8187898E929294
+949A9A9C9C9E9EA4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9AEB1B3B9C1C8CFD4D9DFDFDFDF
+DCD9D9D9D9D4D4D4D4D3D3D3D3D3D1D1D1D1CFCFCFCFCFCFD1D1CFCFCFCCC8C6C6C1C0BBBBB9B7B3
+B1AEAEA9A6A6A4A39E9E9C9C9A9A9494928C877F76726C6C6A6C6C6C6A6A6A676461616161616461
+6664615F5C5761676C7274797C7F7F81818181817F7F7F7F7F7C797471675F557C7C7F7F81858585
+85878787878484817F7F7F7C79767472716C6A6A6C72747474767C7C7F7F8184858585858585817F
+7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F81848485858585858585858585858585858585858585878787898989
+89898989898989898989898989898E8E8E8E8E8E8E8E8E8F92929292929292929292929292929292
+92929292929292929292929292929294949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949492929294949494949494949494
+94949494999A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9A999999999999999492928E
+89898787878787878585858585858787878989898989898C8E8F92929294949494999A9A9A9A9C9C
+9C9C9E9EA1A3A4A4A6A6A6A6A6A6A6A6A6A6A4A4A3A19E9E9E9E9C9C9A96949289877F7C767C8187
+8E949A9CA3A6A6ABAEB1B3B9B9B9BBBBBEBEBEC0BEBEBEBEBEC0768EA4ABABAEB9B9B9BBBBBBBBBB
+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBC0C0C1C1C6C6C8C6C6C1C1B9B3AEA6A39C9A9494947C87
+898F929294949494969494949494999A9C9C9EA4A6AEB1B7B9B9BBC0BBB9B9B6B3B1B1B1AEAEABA9
+A6A4A49E9E9C9C9C9A999494949292928F8E8C8C8E8E8C8989898989898989898989898989878785
+858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C767676767676767474747472716C6C6C
+6C6A6A6A67676761615F5F5F5D595755544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7F84878C8F929294
+969A9C9C9E9EA1A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9ABAEB1B6BEC6CCD1D4D9DFDCDCDC
+DCD9D9D9D7D4D4D3D3D3D3D3D3D1D1D1D1D1CFCFCFCFCFCFD1D1CFCFCFCCC8C6C6C1BEBBB9B9B3B1
+B1AEA9A6A6A4A19E9E9C9C9C9A9A9494928C877F79726C6A6A6A6C6A6A6A6A6A6761616161616667
+676A6766615F5D57666C717476797C7F7F7F7F7F7F7F7F7C7C7C7C74726C615C4F7C7C7F7F848585
+878787878787858481817F7F7C7C767472716A6A6A6C71727474767C7C7F7F818485858585858481
+7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F818181848485858585858585858585858585858585878787878789
+89898989898989898989898989898C8C8C8C8E8E8E8E8E8E8F8F8F8F8F8F92929292929292929292
+92929292929292929292929292929294949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949292929294949494949494949494
+9494949496999A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9A9A99999696949494928F8C89
+898787878784848485858585858787878989898989898C8E8F929292949494999A9A9A9A9A9A9C9C
+9C9E9E9EA3A4A4A4A6A6A6A6A6A6A6A6A6A6A4A49E9E9E9E9C9C9C9A99948F89877F7C767C7F878C
+92999C9EA4A6A9AEB1B1B3B9B9B9B9BBBEBEBEBEBEBEBEBEBEBE879AB1B1B1B1BBBBBBBBBBBBBBBB
+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBEC0C0C1C1C6C6C6C6C1C1BBB7B1A9A69E9A999494798789
+8E929294949494949494949499999A9C9C9EA4A6ABB1B6B9BBBEBEC1BBB9B9B6B3B1B1B1AEAEABA9
+A6A4A49E9E9C9C9C9A999494949292928F8F8E8E8E8E8C8989898989898989898989898989878787
+858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C767676767676767474747472716C6C6C
+6C6A6A6A67676766615F5F5F5F59575555544F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C8187898C8F929494
+999A9C9C9E9EA3A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9AEB1B3B9BEC6CFD3D9DCDCDCDCDC
+D9D9D9D9D4D4D3D3D3D3D3D3D3D1D1D1D1D1CFCFCFCFCFD1D1D1D1CFCFCCC8C6C4C1BEB9B9B6B1B1
+AEABA9A6A4A19E9E9C9C9C9C9A9994948F8987817C746C6A67676A6A6A6A6A6A6A67666664616767
+6A6A6A6A6A6766615F5C6A6C727474767C7F7F7F7F7F7C7C7C7C7C7674726A6157767C7C7F818787
+87878787878787858481817F7F7C7C7674726C6A67676A6C727474767C7C7F7F8184858585858584
+81817F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181848485858585858585858585858585858787878787
+87878787898989898989898989898989898989898C8C8C8E8E8E8E8E8E8F8F8F8F8F8F9292929292
+92929292929292929292929292929292949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949292929294949494949494949494
+9494949499999A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9A99969494949494928F8C8987
+8787858481818181848585858787878989898C8C8C8C8E8F92929294949496999A9A9C9C9C9C9C9C
+9C9E9E9EA1A4A4A4A6A6A6A6A6A6A6A6A6A4A49E9E9C9C9C9C9C9A94928F89857F7C767C7F878992
+949A9CA3A6A6ABAEB1B1B6B9B9B9B9B9BBBBBBBBBBB9B9B9B9899AA6B6B6B6B6BBBBBBBBBBBBB9B9
+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBEC0C1C1C1C6C6C6C1C1BEB9B1ACA6A39C9A96947984898C
+8F92929494949494949699999A9A9C9C9EA4A6A9AEB6B9BEBEBEC1C1BEB9B9B6B3B1B1B1AEAEABA9
+A6A4A49E9E9C9C9C9A99949494929292928F8E8E8E8E8E8C89898989898989898989898989878787
+858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676767474747472726C6C6C
+6C6A6A6A6767676661615F5F5F5C575555544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F8487898E92929494
+999A9C9C9E9EA3A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9ABAEB1B6B9C1C8CFD3D9DEDCDCDCDC
+D9D9D9D4D4D4D3D3D3D3D1D1D1D1D1D1D1D1CFCFCFCFCFD1D1D1D1CFCFCCC8C6C1C1BBB9B7B3B1AE
+AEA9A6A4A39E9E9C9C9C9C9A9A9994928E89877F7C746C6A6766676A6A6A6A6A6A6767676767676A
+6A6C6C6C6C6C6A6A6761615F576C727274797C7C7C7C7C7C7C79797674726E675F55767C7F7F8487
+878787878987878787848481817F7C7C7674726C6766676A6C717274767C7F7F7F81848585858585
+8481817F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181848485858585858585858585858585878787
+878787878787878787898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F92
+92929292929292929292929292929292949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949492929292929292929292949494949494949494
+94949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949492928E898787
+858584817F7F81848585858587878989898C8E8E8E8F8F8F929292949494999A9A9C9C9C9C9C9C9C
+9E9E9E9EA1A3A4A4A6A6A6A6A6A6A6A6A4A4A19E9C9C9C9A9A9A94928E89857F7C79797F87898F94
+9A9C9EA4A6A9AEAEB1B3B6B9B9B9B9B9B9B9B9B9B9B9B9B95F9AA9B3B9B9BBBBBBBBBBBBBBBBB9B9
+B9BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBEC0C1C1C1C6C6C4C1BEB9B6AEA6A49E9A99947981898C8F
+929294949494949499999A9A9A9C9C9EA4A6A9AEB1B9BEC1C1C1C1C1BEB9B9B6B3B1B1B1AEAEA9A9
+A6A4A49E9E9C9C9C9A99949494949292928F8E8E8E8E8E8C89898989898989898989898989898787
+858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676767474747472726C6C6C
+6C6A6A6A6A67676761615F5F5F5D57575555514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C818789898E92929494
+999A9C9C9E9EA4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9AEAEB1B7BBC4CCCFD4D9DFDCDCDCD9
+D9D9D9D4D4D3D3D1D1D1D1D1D1D1D1D1D1D1D1CFCFCFCFD1D1D1D1CFCCCCC6C6C1C0BBB9B6B1B1AE
+A9A6A6A49E9C9C9C9C9C9C9A9994928F8C8984557674716A676466676A6A6A6A6A6A67676767676A
+6A6C71727272726E6C6A6A66615F5D6C7172747676767C79797676767674716A61594F767C7F8185
+87878789898989898787858585847F7C7C7674726A676466676A6E7274797C7F7F81818485858585
+8584817F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181848484858585858585858585858585
+85858587878787878789898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F
+92929292929292929292929292929292929294949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949292929292929292929292949494949494949494
+949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949292928F89898785
+858584818181848585858587878789898C8E8F8F8F929292929294949499999A9C9C9C9C9C9C9C9C
+9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A19E9E9C9C9A999694928C87857F7C79797F8789929499
+9C9EA4A6A9ABAEAEB1B3B6B9B9B9B9B9B9B9B9B9B9B7B7B79AA4AEB9B9B9BBBBBBBBBBBBBBBBB9B9
+B9B9B9BBBBBBBBBBBBBBBBBBBBBBBBBBC0C0C1C1C1C6C6C1BEBBB7B1ABA49E9C9A99617F878C8F92
+92949494949494969A9A9A9C9C9C9EA4A6A9AEB1B7BEC1C1C1C4C6C1BEB9B9B6B3B1B1B1AEAEA9A9
+A6A4A4A19E9E9C9C9A9999949494929292928F8E8E8E8E8E89898989898989898989898989898787
+858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7B7676767676767474747472726E6C6C
+6C6C6A6A6A67676766615F5F5F5F59575555544F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F8487898C8F92929496
+9A9C9C9E9EA1A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9ABAEB1B3B9BEC6CCD1D4D9DFDCD9D9D9
+D9D9D4D4D3D3D1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCFCFD1D1D1D1CFCCCCC6C6C1BEB9B7B3B1AEAB
+A6A6A49E9E9C9C9C9C9A9A9694928E87877255675F71726A6764616667676A6A6A6A6767676A6A6A
+6C6C7272747474747472716C6A676661615F6C7274747676767676747474726C675F5774797C7F84
+8787898989898989898987878787847F7F7C7974716A666161676A6C7274797C7F7F818184858585
+858584817F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181818484848485858585858585
+85858585858585878787898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F
+92929292929292929292929292929292929292929292949494949494949494949494949494949494
+94949494949494949494949494949494949494949492929292929292929292949494949494949494
+949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949292928E8C89878585
+858584848485858585858787878989898E8E8F92929292929292949494999A9A9C9C9C9E9E9E9C9E
+9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A39E9E9C9A99949494928C87857F7C7C797F87899294999A
+9CA1A4A6A9ABAEAEB1B1B6B6B6B7B7B6B7B7B9B7B6B6B3929CA6B1B9B9B9B9BBBBBBBBBBBBBBB9B9
+B9B9B9B9BBBBBBBBBBBBBBBBBBBBBBBEC0C0C1C1C1C6C6BEB9B9B1AEA6A19C9C9A5F7F878E8F9292
+94949494949494999A9C9C9C9C9EA4A6A9AEB1B6B9C0C6C6C6C6C6C1BEB9B9B6B1B1B1AEAEAEA9A9
+A6A4A4A19E9E9C9C9A9A99949494949292928F8E8E8E8E8E8C898989898989898989898989898787
+858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767474747474726E6C6C
+6C6C6A6A6A6767676661615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C818787898E8F92949499
+9A9C9C9E9EA3A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9AEAEB1B6B9C1C6CFD3D9DCDEDCD9D9D9
+D9D7D4D4D3D1D1D1CFD1D1D1D1D1D1D1D1D1D1CFCFD1D1D1D1D1D1CFCCCCC6C4C1BEB9B6B1AEAEA9
+A6A4A19E9C9C9C9C9A9A9494928E87817474726A61596A6A676161616666676A6A6A6A6A676A6A6A
+6C6E72747476767676767472726C6C6A6A6761615F597474747474747474726C6A615C54767C7F81
+8487898989898C8C8C89898989898787847F7C7C746E6A646161666A6C7274797C7F7F7F81848585
+858484817F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181818181848484858585
+858585858585858787878787898989898989898989898989898C8C8C8C8E8E8E8E8E8E8E8E8E8E8F
+92929292929292929292929292929292929292929292929292929292949494949494949494949494
+94949494949494929292929292929494949494949494949494949494949494949494949494949494
+9494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949492928F8E898987858585
+8585858585858585858787878989898C8E8F92929292929292949494999A9A9A9C9C9C9E9E9E9E9C
+9C9E9E9E9EA1A4A4A4A4A4A4A4A4A4A39E9E9C9A99949492928C87817F7C79797F87899294949A9C
+9EA4A6A6A9ABAEAEB1B1B3B3B6B6B6B3B3B3B6B3B3B1899CA3A9B6B9B9B9B9BBBBBBBBBBBBBBB9B9
+B9B9B9B9B9BBBBBBBBBBBBBBBBBBBBBEC0C1C1C1C1C6C1BEB9B6AEA9A49E9C9A617F87898F929494
+949494949494999A9C9C9C9E9EA4A6A9AEB1B3B9BEC1C6C6C6C6C1C1BEB9B9B6B1B1B1AEAEAEA9A6
+A6A4A4A19E9E9C9C9A9A99969494949292928F8F8E8E8E8E8C898989898989898989898989898787
+858585858585858585817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767676747474747472716C6C
+6C6C6A6A6A6A67676761615F5F5F5D57575555514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F848789898E9292949499
+9A9C9C9E9EA3A4A6A6A6A6A4A6A6A6A6A6A6A6A6A6A6A9ABAEB1B3B9BBC1CCCFD4D9DCDCDCD9D9D9
+D9D4D4D3D1CFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCCC9C6C1C1BBB9B1B1AEA9A6
+A4A39E9C9C9C9A9A999494928E8981747C76726A675F55676661616161646467676A6A6A6A6A6A6A
+6C71727476797C7C7C7C7C7674747272716C6C6A6766615F727472747472726E6A675F5774767C7F
+8487898989898C8E8E8F8E8C8C8989898787817F7C746C6A616161646A6C7276797C7C7F7F818484
+848481817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181818184
+8485858585858585878787878787878787878989898989898989898989898C8C8C8E8E8E8E8E8E8E
+8F8F9292929292929292929292929292929292929292929292929292949494949494949494949494
+94949494949494929292929292929292929494949494949494949494949494949494949494949494
+9499999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949492928F8C89898785858585
+85858585858587878787878989898C8E8F9292929292929294949494999A9A9A9A9C9C9C9E9E9E9C
+9C9C9C9C9E9EA3A3A3A4A4A4A3A3A19E9C9C9A94949292928987817F7C767B7F87899294949A9C9E
+9EA4A6A6A9ABAEAEB1B1B3B3B3B3B3B1B1B1B1B1B17F94A4A6AEB9B9B9B9B9BBBBBBBBBBBBB9B9B9
+B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBEC0C1C1C1C4C6C1BBB7B1ABA6A19E9C727F85898E92949494
+9494949496999A9C9C9E9E9EA4A6A9AEB1B1B7B9C1C6C6C6C6C6C1C0BBB9B9B6B1B1B1AEAEAEA9A6
+A6A4A4A19E9E9C9C9A9A9999949494929292928F8E8E8E8E8E8C8989898989898989898989898787
+878585858585858585817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7676767676747474747472716C6C
+6C6C6A6A6A6A67676766615F5F5F5F59575555544F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C818787898E8F9292949499
+9A9C9C9E9EA4A4A6A6A6A4A4A6A6A6A6A6A6A6A6A6A9A9AEAEB1B3B9BEC6CCD1D4D9DFDCDCD9D9D9
+D4D4D4D3D1CFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCCC9C6C1C0BBB6B1AEABA9A6
+A49E9E9C9C9A9A949494928E8476767C7674726C6A6159556161616161616166676A6A6A6A6A6A6C
+6C72727476797C7F7F7C7C7C7C7B767674747472716C6A6764615771727272726C6A615C5574797F
+81878789898C8E8E8F8F92928F8E8E8C898987817F7C746C6A616161666A6C7274767C7C7F7F8181
+8181817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81
+84858585858585858585858787878787878787878787898989898989898989898989898C8C8C8E8E
+8E8E8F8F8F8F8F929292929292929292929292929292929292929292929494949494949494949294
+94949494949492929292929292929292929294949494949494949494949494949494949494949494
+94999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949492928F8C8987878785858585
+858587878787878787878989898C8E8F8F92929292929292949494999A9A9A9A9A9C9C9C9E9E9C9C
+9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9C9C9A949492928F89877F7C7C767C7F87899294999A9C9C9E
+A4A6A6A6A9ABAEAEAEB1B1B1B1B1B1B1B1B1B1AE798EA4A9AEB1BBB9B9B9B9B9B9BBBBBBBBB9B9B9
+B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBEC0C1C1C1C4C1BEB9B3AEA9A49E9C727F84878C8F92949494
+96999999999A9C9C9E9EA1A4A6A9AEAEB1B7B9BEC4C8C6C6C6C6C1BEBBB9B9B6B1B1AEAEAEAEA9A6
+A6A4A4A39E9E9C9C9C9A9A99949494949292928F8E8E8E8E8E8C8989898989898989898989898787
+87858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767474747472716C6C
+6C6C6A6A6A6A6767676661615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F8487898C8F92929494969A
+9C9C9C9EA1A4A4A6A6A4A4A4A4A6A6A6A6A6A6A6A9A9ABAEAEB1B6B9C0C6CFD3D9D9DFDCD9D9D9D4
+D4D3D3D1CFCFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCCC8C6C1BEB9B3AEAEA9A6A4
+9E9E9C9C9A9A99949292898476767C79767472716C676157545F5F5F5F61616166676A6A6A6A6C6C
+71727474767C7C7F7F7F7F7F7F7F7C7C7C7B7676767472716C6A615C6C71716E6C6A665F574F767C
+7F858789898C8E8F8F9292929292928F8F8E8987817F7C746C6A616161676A6E7474767C7C7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81
+8184858585858585858585858585858587878787878789898989898989898989898989898989898C
+8E8E8E8E8E8E8F8F8F8F8F9292929292929292929292929292929292929494949494949494929292
+92929292929292929292929292929292929494949494949494949494949494949494949494949494
+999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999999999999999494928E89898787878585858585
+878787878787898989898989898C8E8F9292929292929294949496999A9A9A9A9A9C9C9C9E9E9C9C
+9C9C9C9C9C9C9C9E9E9E9E9E9E9E9C9A999494928F8E89877F7C7C76797F878992949A9C9C9C9EA3
+A4A6A6A9A9ABAEAEAEB1B1B1B1B1B1AEAEAEAE7C899CA9AEB1B7BBB9B9B9B9B9B9B9B9BBBBB9B9B9
+B9B9B9B9B9B9B9B9B9B9BBBBBBBBBBBEC0C0C1C1C1C1B9B7B1AEA69E9E9C7C87898C8F9294949999
+999A9A9A9A9C9C9E9EA1A4A6A9AEAEB4B7B9BEC1C6CCC8C6C6C6C1BEB9B9B9B6B1B1AEAEAEAEA9A6
+A6A4A4A39E9E9C9C9C9A9A9999949494929292928F8E8E8E8E8E8989898989898989898989898987
+87858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767474747472726E6C
+6C6C6C6A6A6A6A67676761615F5F5F5D57575555514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C818789898E8F92929494999A
+9C9C9E9EA3A4A4A6A4A4A4A4A4A6A6A6A6A6A6A6A9A9ABAEB1B3B9BBC1C8CFD4D9D9DCD9D9D9D4D4
+D3D3D1CFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCCC8C6C1BBB7B1AEABA6A6A3
+9E9C9C9A9A9994948F898474767C7C767474726E6C6A615F574F5D5C5F5F5F6161676A6A6A6A6C6C
+71727476797C7F7F818181818181817F7F7F7F7C7C7C797674726C675F4F6C6C6C6A67615C557479
+7F818789898C8E8F9292929292949292928F8E8987817F7C746C6A616164676A71727476797C7C7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+8181848484848585858585858585858585858585878787898989898989898989898989898989898C
+8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F92929292929292929292929292929294949494949492929292
+92929292929292929292929292929292949494949494949494949494949494949494949999999694
+94999A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494928F8989878784818484858787
+8787898989898989898989898C8E8F9292929292929294949494999A9A9A9A9A9A9A9C9C9C9C9C9C
+9C9A9C9C9C9C9C9C9C9C9C9C9C9C9A999492928E8989877F7C7C79767F878992949A9C9C9E9EA1A4
+A6A6A6A9A9ABAEAEAEAEAEB1B1AEAEAEAEAEAB899CA6AEB1B7BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9BBBBBBBBBEBEBEC1C1BEB9B1AEA9A49E9C7C87898E9292929494999A
+9A9A9A9A9C9C9E9EA3A4A6A9AEAEB1B7B9BEC1C4C8CCC9C6C6C6C1BEB9B9B7B6B1B1AEAEAEAEA9A6
+A6A4A4A39E9E9C9C9C9C9A9A99949494949292928F8E8E8E8E8E8C89898989898989898989898987
+87858585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7676767676747474747472716C
+6C6C6C6A6A6A6A67676766615F5F5F5F59575555544F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F8487898C8F9292949494999A
+9C9C9E9EA3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A9ABAEAEB1B6B9BBC6CCD1D4D9D9D9D9D9D4D4D3
+D3D1D1CFCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCFCCC6C1BEB9B6AEABA9A6A49E
+9C9C9A9A99949492898476767C7C79767472726C6C6A6A645F5754575D5F5F5F6161676A6A6A6C6C
+72747476797C7F7F8184858484848585848481817F7F7F7C7C7974726A61556C6A6A6A615F575176
+7C7F858989898E8F929292929294949492928F898985817F79746C6A6661666A6C6E727476797C7C
+7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F8181818181848484848585858585858585858587878789898989898989898989898989898989
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292929292929292929292929492929292
+9292929292929292929292929292929294949494949494949494949494949494949494999A9A9994
+94999999999A9A9A9A9A9A9A9A9A9A9A99949494949494949494928F898987848181818485878789
+898989898989898C8C8C8C8C8E8F929292929292929294949499999A9A9A9A9A9A9A9C9C9C9C9C9C
+9A9A9A9A9A9A9A9A9A9C9C9C9C9A9694928F898987857F7C7C7B767F858992949A9C9C9E9E9EA3A4
+A6A6A6A9A9ABAEAEAEAEAEAEAEAEAEAEABA98E9AA4AEAEB1B9BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9BBBBBEBBBEBEBEB9B6AEA9A6A19C7C87898F9292929494999A9A
+9C9C9C9C9E9EA1A4A4A6A6ABAEB1B6B9BEC1C6C6CCCFCCC8C6C6C1BBB9B9B7B6B1B1AEAEAEAEA9A6
+A6A4A4A39E9E9C9C9C9C9A9A99969494949292928F8F8E8E8E8E8C89898989898989898989898987
+87858585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676747474747472726C
+6C6C6C6A6A6A6A6767676661615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C818789898E8F92929494999A9A
+9C9C9E9EA4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9A9ABAEB1B1B7B9C0C6CCD1D4D9D9D9D9D4D4D3D3
+CFCFCFCFCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCFCCC6C1BBB7B1AEA9A6A49E9C
+9C9A9A999494928C8779767C7C7C7974727272716C6C6C6A665F5754575C5D5F5F61676A6A6A6A6C
+727474767C7C7F818485878787858787878787858484817F7F7F7C79746C66556A6A6A66615C554F
+7C7F818789898C8E929292929494949494928F8E8987857F7C7974716A6761676A6C6C7274747679
+797C7C7C7F7F7F7F7F7F7F7F7C7F7F7F7F7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F818181818184848585858585858587878787878789898989898989898989898989
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292929292929292
+92929292929292929292929292929292949494949494949494949494949494949494999A9A9A9994
+9494969699999999999999999A9A9994949494949494929292928E89898781817F7F818587878989
+89898C8C8C8E8E8E8E8E8E8E8F929292929292929294949494999A9A9A9A9A9A9A9A9A9C9C9C9C9A
+9A999A9A9A9A9A9A9A999A9A999494928F898987847F7C7C7C797F84898F92999C9C9E9E9EA3A4A6
+A6A6A6A6A9A9ABAEAEAEAEAEAEAEABABA9A6949CA6AEAEB3B9BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9BBBBB9BBBEB9B7B1ABA6A49E7C85898F9294949494999A9A9C
+9C9C9C9E9EA3A4A4A6A6ABAEB1B6B9BEC1C6C6CCCFCFCCC8C8C6C1BBB9B9B7B6B1B1AEAEAEAEA9A6
+A6A6A4A49E9E9C9C9C9C9A9A9A99949494929292928F8E8E8E8E8E8C898989898989898989898987
+87858585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676747474747472726E
+6C6C6C6C6A6A6A6A67676761615F5F5F5D57575555514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F8487898C8F9292949494999A9C
+9C9C9EA1A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9A9AEAEB1B3B9BBC1C6CFD1D4D9D9D9D4D4D4D3CF
+CFCFCFCFCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCCC6C1BEB9B6AEABA6A6A49E9C
+9A9A999494928C877C767C7C7C79747474747272726E6C6C6A665F5755575C5D5F5F61676A6A6A6C
+727476767C7C7F81858787878787878789898987878787878787817F7C766C6757676767615F5754
+747C7F8187898C8E8F929294949494949492928F8C8987847F7C7974726C6A66676A6C6C71727476
+76797C7C7C7F7F7F7F7F7F7C7C7C7F7F7F7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F81848585858585858585878787878787898989898989898989898989
+8989898C8C8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292929292929292
+9292929292929292929292929292929294949494949494949494949494949494949496999A9A9994
+94949494949494949496969999969494949292929292928F8F8C898787817F7F7F81848787898989
+8C8E8E8E8F8F8F8F8F8F8F9292929292929292929494949494999A9A9A9A9A9A9A9A9A9C9C9C9C9A
+9A999999999999999494949494949292898785817F7C7C7C7C7F84898F92949A9C9E9EA1A3A4A4A6
+A6A6A6A6A9A9ABAEAEAEAEAEAEABA9A9A6929AA3ABB1B1B3B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9BBB9B9B9B9B7B1AEA9A49E6681898F9294949496999A9C9C9C
+9E9E9EA1A4A4A6A6A6A9AEB1B6B9BBC1C4C6CCCFD1CFCCCCC6C1BEBBB9B9B7B6B1B1AEAEAEAEA9A6
+A6A6A4A49E9E9E9C9C9C9C9A9A99949494949292928F8E8E8E8E8E8C898989898989898989898987
+87858585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C797676767674747474747271
+6C6C6C6C6A6A6A6A67676766615F5F5F5F59575555544F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C818787898E9292949494999A9A9C
+9C9E9EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9ABAEB1B1B6B9BBC1C8CFD1D4D9D9D9D4D4D3D1CF
+CFCFCFCFCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1CFCFCCCCC6C1BBB9B1AEA9A6A49E9C9A
+9A999494928E897F76797C7C7C747474747474747472716C6C6A645F575557595C5F61676A6A6A6C
+727476797C7F7F818587878787878789898989898989898989898787817F767261556667615F5955
+4F747C7F8187898E8F8F929294949494949292928E898987817F7C7974726C6A676A6A6C6C717274
+7676797C7C7C7C7F7F7C7C7C7C7C7C7F7F7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F818181817F81818485858585858585858585858787898989898989898989898989
+898989898989898C8C8E8E8E8E8E8E8E8E8F92929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929294949494949494949494949494949999999994
+949494949494949494949494949494929292929292928F8E898787847F7F7F7F818487878789898C
+8E8F8F8F929292929292929292949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9996949494949494949494949292928C87857F7F7C7C7C7C7F84898E92949A9C9E9EA1A4A4A4A6A6
+A6A6A6A6A9A9ABAEAEAEAEAEABA9A9A9899A9EA6B1B1B1B6B9B9B9B9B9B7B9B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B4AEA9A6A36A81878E9294999999999A9C9C9C9E
+9EA1A4A4A6A6A6A9A9AEB1B3B9BBBEC1C6C8CCCFCFCFCCC9C6C1BEB9B9B7B6B6B1B1AEAEAEAEA9A6
+A6A6A4A4A19E9E9C9C9C9C9A9A9994949494929292928F8E8E8E8E8E898989898989898989898987
+87858585858585858585817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767674747474747272
+6C6C6C6C6A6A6A6A6767676661615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F848789898E92929494999A9A9C9C
+9C9E9EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9ABAEB1B3B9B9BBC1C8CFD1D4D9D9D4D4D3D1CFCF
+CFCCCCCCCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1D1D1D1D1CFCCCCC8C4BEB9B6B1A9A6A4A39E9C9A
+999494948F89817C7C7C7C7C7474747476767676767474726C6C6A615F575557575D5F61676A6A6C
+7274767C7C7F7F818487878787898989898C8C8C8C8C8C8C8C8E8E8987857F7672614F6161615D57
+546C747C7F8487898E8E8F9294949494949292928F8C898787817F7C7C74726C6A6A6A6A6C6E7274
+74747676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F8181817F7F81818484848181848587878585858585858585878787878989898989898989898989
+8989898989898989898E8E8E8E8E8E8E8E8E8F8F8F8F929292929292929292929292929292929292
+92929292929292929292929292929292929292929294949494949494949494949494949496999494
+94949494949494949494949494929292929292928E8C898987847F7F7F7F7F818485878789898C8E
+8F92929292929292929292949494949494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A
+99949494949494949292929292928C8784817F7C7C7C797C81898E92949A9C9E9E9EA3A4A4A4A6A6
+A6A6A6A6A9A9ABABABABAEABA9A9A97F949EA4A9B1B1B3B6B9B9B9B9B7B7B7B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B7B9B9B9B9B9B9B9B9B9B7B6B6B1ABA6A49E81898E929499999A9A9A9C9C9C9E9E
+A3A4A4A6A6A9A9ABAEAEB1B7B9BEC1C6C6C8CCCFCFCFCCC8C6C1BEB9B9B7B6B3B1B1AEAEAEABA9A6
+A6A6A4A4A19E9E9E9C9C9C9C9A9994949494949292928F8E8E8E8E8E8C8989898989898989898987
+87878585858585858585817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767676747474747272
+6E6C6C6C6C6A6A6A6A67676761615F5F5F5D57575555514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C818587898C8F92929494999A9A9C9C
+9C9E9EA4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9A9AEAEB1B3B9BBC0C6CCCFD3D4D9D4D4D3D1CFCFCC
+CCCCCCCCCFCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1D1CFCFCFCCC8C6C1BEB9B1AEA9A6A49E9C9A99
+9694949289857C7C7C7C7C747476797C7C7C7C7C7C7C767474726E6A645F555557595D61676A6A6C
+7174767C7C7F7F8184878787898989898E8F8F8F8F92929292928F8E8C89857F766C5F4F61615F59
+555172747C7F8487898E8E929294949492929292928E89898784817F7C7974726C6A6A6A6C6C7172
+7474747676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81817F7F7F
+81818484818181848587858584858787878787878785858587878787898989898989898989898989
+8989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F92929292929292929292929292
+92929292929292929292929292929292929292929292949494949494949494949494949494949494
+9494949494929292929494929292928F8E8C8C89898787847F7F7F7F7F7F7F818587878989898E8F
+9292929292929292929294949494949494949494949494949494999A9A9A9A9A9A9A9A9999999999
+949494949494949292928F8E8E898784817F7F7C7B767C81898E92949A9C9C9E9EA1A4A4A4A4A6A6
+A6A6A6A6A6A9A9ABABABABA9A9A6768C9EA4A9AEB3B3B3B7B9B9B9B7B6B6B7B7B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B6B6B7B9B9B9B9B9B9B7B6B3B1AEA6A4A181878C9294969A9A9A9A9C9C9E9EA1A4
+A4A6A6A6A9ABAEAEAEB1B6B9BBBEC1C6C8C9CFD1CFCFCCC8C6C1BBB9B9B7B6B3B1B1AEAEAEABA9A9
+A6A6A4A4A19E9E9E9C9C9C9C9A9994949494949292928F8F8E8E8E8E8C8989898989898989898987
+8787858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676747474747472
+716C6C6C6C6A6A6A6A67676766615F5F5F5F59575555544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797F858787898E8F929494999A9A9C9C9C
+9E9EA1A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9A9AEB1B1B6B9BBC1C6CCCFD3D4D4D4D3D1CFCFCFCC
+CCCCCCCCCFCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1D1CFCFCFCCC9C8C6C0B9B6B1ABA6A49E9C9C9996
+9494928E877F7C7C7C7C7674797C7F7F7F81817F7F7F7C7C797674726C665F5455575C5F61676A6A
+6E7274797C7F7F8184858787898989898E8F929292929294949292928F8E89847C746A5C4F5F5F5D
+57554F71747C7F8587898E8F9292949292929292928F8C89878785817F7C7974726E6C6A6A6C6E72
+72747474767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181817F7F7F7F7F8181818181817F7F7F818184848484
+84858785858484858787878787878787878787878787878787878789898989898989898989898989
+8989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F92929292929292
+92929292929292929292929292929292929292929292929292949494949494949494949494949494
+949494949492929292929292928F8E8C898989878785817F7F7F7F7F7F7F848787878989898C8E8F
+9292929494949494949494949494949494949494949494949494999A9A9A9A9A9A9A999994949496
+94949492929292928F8E8C89898784817F7F7C79767C81898F9294999A9C9E9E9EA3A4A4A4A4A4A6
+A6A6A6A6A6A6A9A9A9A9A9A9A6A68799A4A9AEB1B3B6B7B9B9B9B7B6B6B6B6B7B7B7B9B9B9B9B9B9
+B9B9B9B9B9B9B9B6B3B6B6B6B6B6B7B6B3B1B1AEA9A6A37F87899294949A9A9C9C9C9C9E9EA3A4A4
+A6A6A9A9ABAEAEB1B1B6B9BBBEC1C6C8C8CCCFD1CFCCCCC6C4C0BBB9B9B7B6B3B1B1AEAEAEABA9A9
+A6A6A4A4A39E9E9E9E9C9C9C9A9A9694949494929292928F8E8E8E8E8E8C89898989898989898989
+8787878585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676747474747472
+726C6C6C6C6A6A6A6A6767676661615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C81858789898E92929494999A9C9C9C9C
+9E9EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9ABAEB1B3B9B9BEC1C6CCCFD3D4D4D3D3D1CFCFCCCC
+CCCCCCCCCFCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1CFCFCFCFCCC8C6C1BEB9B3AEA9A4A39E9C9A9994
+94928F877F7C7C7C7C79767C7F818485878787858484817F7F7C7B76726A645C4F55575D61676A6A
+6C7274797C7F7F7F81848787898989898E929292929294949494949292928E89817C7267554F5F5F
+5755516A6E747C7F8587898E9292949292929292928F8E8989898787847F7C7674726E6C6A6C6C71
+72747474747476767C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F81818181818181848484848181818184848585848484818184848585878787
+87878787878787878787878787878787898989898787878787878989898989898989898989898989
+898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F92
+92929292929292929292929292929292929292929292929292929292929294949494949494949494
+94949494929292929292928F8E8E89898987878785817F7F7F7F7F7F81848787878989898C8E8F92
+929294949494949494949494949494949494949494949494949496999A9A9A9A9A9A999494949494
+9494949292928F8E8C89898787817F7F7F7C7B797C81878E9294999A9C9C9E9EA1A4A4A4A4A4A4A4
+A4A4A4A4A6A6A6A6A6A6A6A6A68594A3A6A9AEB1B3B3B6B9B9B7B6B6B3B6B6B6B6B7B7B9B9B9B9B9
+B9B9B9B9B9B9B7B3B3B3B3B3B3B3B3B1B1AEAEABA6A37F87898F9294999C9C9C9C9C9E9EA1A4A6A6
+A6A9A9ABAEB1B1B1B6B7B9BBC1C1C6C9CCCCCFCFCFCCC9C6C1BEB9B9B7B6B6B3B1B1AEAEABABA9A9
+A6A6A4A4A39E9E9E9E9C9C9C9A9A9694949494949292928F8E8E8E8E8E8C89898989898989898989
+8787878585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7B7676767676767474747472
+726E6C6C6C6C6A6A6A6A67676761615F5F5F5D57575555514F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B7F858587898C8F929294949A9A9C9C9C9E
+9E9EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9ABAEB1B3B9BBC0C4C6CFCFD3D4D4D3D1CFCFCCCCCC
+CCCCCCCCCCCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1CFCFCFCFCCC6C6C1BBB7B1ABA6A49E9C9C999494
+928F89817C7C7C7C7C7C7F8487878989898987878787878784817F7C76726A61574F575C5F61676A
+6C7274767C7C7F7F81848787898989898E929292929294949494949492928F89877F767161514F5D
+5C57544F676C747C7F8487898F9292929292929292928F8E8C89898787847F7C7674726E6C6C6C6E
+7272747474747676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F8181848484848184858585858585878787878787878785878787878787878787
+89898787878787878787898989878789898989898989898787898989898989898989898989898989
+89898989898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F
+8F8F8F8F8F8F8F8F8F92929292929292929292929292929292929292929294949494949292929292
+92929292929292929292928F8E8C89898987878584817F7F7F7F818187878989898989898E8F9292
+92949494949494949494949494949494949494949494949494949499999999999999969494949494
+94949292928F8E8C89898785817F7F7F7C7C7C7C7F878E9294999A9C9C9E9E9EA3A4A4A4A4A4A4A4
+A4A4A4A4A4A6A6A6A6A6A4A466929CA4A6ABB1B1B1B3B6B7B7B6B6B3B3B3B6B6B6B6B7B7B7B9B9B9
+B9B9B9B9B9B9B7B3B1B1B1B1B1B1B1AEAEABA9A6A47C87898F9294969A9C9C9C9C9E9EA1A4A6A6A9
+A9ABAEAEB1B1B3B6B7B9BBC0C1C6C8CCCCCFCFCFCFCCC8C6C1BEB9B9B7B6B3B3B1B1AEAEABABA9A9
+A6A6A4A4A39E9E9E9E9C9C9C9A9A9994949494949292928F8F8E8E8E8E8E89898989898989898989
+898787858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7676767676767474747474
+72716C6C6C6C6A6A6A6A67676766615F5F5F5F59575555544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C81858787898C8F929494999A9C9C9C9E9E
+9E9EA4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9A9AEAEB1B6B9BBC1C6C8CFCFD1D3D3D1CFCFCFCCCCCC
+C9C9CCCCCCCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1CFCFCFCCC8C6C1BEB9B3AEA9A4A19E9C9A949494
+928C877F7C7C7C7C71818789898E8F8F8F8E8E8C898989898787847F7C74716A5F5554575D5F676A
+6C7174767C7C7F7F818487878789898C8E8F929294949494949494949492928E89877F746C5F4F4F
+5C5755514F676C747C818789898F92929292929292928F8F8E8C89898787817F7C7674726E6C6C6C
+7172747474747476797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F
+7F7F7F7F7F7F81818484858585858585858585858585878787878787878787878787878787878789
+89898989898987878789898989898989898989898989898989898989898989898989898989898989
+8989898989898989898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F9292929292929292929292929292949494929292929292
+929292929292929292928F8E8C89898987878584817F7F818184848787898989898C8C8C8E8F9292
+92949494949494969999999999999996949494949494949494949494949494969999949494929494
+949292928F8F8E898787848181817F7F7C7C7C7F87899294999A9C9C9C9E9E9EA3A3A3A3A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A39E8E99A1A6A6AEB1B1B1B1B3B6B6B3B3B3B3B3B3B3B6B6B6B6B7B7B7B9
+B9B9B9B9B9B9B6B3B1B1B1B1AEB1AEABA9A6A6A47C85898E929494999A9C9C9C9E9EA1A4A4A6A9AB
+AEAEAEB1B1B3B7B9B9BBBEC1C6C6CCCCCFCFD1CFCFCCC8C6C1BEB9B9B7B6B3B3B1B1AEAEABABA9A9
+A6A6A4A4A39E9E9E9E9E9C9C9C9A999494949494929292928F8E8E8E8E8E8C898989898989898989
+898787878585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7676767676767474747474
+72716C6C6C6C6A6A6A6A6767676661615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727C7F85858789898E8F929494999A9C9C9E9E9E
+9EA1A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9A9AEB1B1B7B9BEC1C6CCCCCFCFD1D3D1CFCFCCCCC9C9
+C8C8C9CCCCCFCFCFCFCFCFCFD1D1D1D1D1D1D1D1CFCFCFCCC6C6C1BBB7B1ABA6A49E9C9C99949492
+8F87817C7C7C7C6C85898E92929294949494929292928F8E898989847F7C746C665D5455595F616A
+6A6E7274797C7F7F818185878789898C8E8F929294949494949494949494928F89878179726A574F
+4F5755544F5D676C747C8187898C9292929292929292928F8F8E8E89898787817F79747272716E71
+717272747474747676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F7F7F7F7F818485858585858585858585858585878787878787898787878787898989898989
+89898989898989898989898989898989898989898989898989898989898989898989898989898989
+89898989898989898989898989898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292949494929292929292
+9292929292929292928F8E8C89898987878784817F818184858787878789898C8E8E8E8E8F929292
+94949494949494999A9A9A9A9A999999999999999996949494949494949494949494949494929292
+929292928F8E898987858484817F7F7C7C7C7F87899294949A9C9C9C9E9E9E9EA1A1A1A1A1A1A3A3
+A3A3A4A4A4A4A3A19E9E9E89929CA6A6A9AEB1B1B1B1B3B3B3B3B3B1B3B3B3B3B3B6B6B6B6B6B7B7
+B9B7B7B9B9B9B6B1B1B1AEAEAEAEABA6A6A4A37F87898E929494999A9C9C9C9E9EA1A4A4A6A9ABAE
+AEAEB1B1B3B6B9B9BBBEC1C1C6C8CCCFCFCFD1CFCCCCC6C4C0BBB9B9B7B6B3B3B1B1AEAEABA9A9A9
+A6A6A6A4A39E9E9E9E9E9C9C9C9A999494949494929292928F8F8E8E8E8E8C898989898989898989
+89878787858585858585858481817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676767674747474
+72726C6C6C6C6C6A6A6A6A67676661615F5F5F5D57575555514F4F4F4F4F4F4F4F4FFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767F81858787898C8F92929494999A9C9C9E9E9E
+9EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9ABAEB1B3B9BBC0C4C6CCCCCFCFCFD1CFCFCFCCCCC8C8
+C8C8C9CCCCCFCFCFCFCFCFD1D1D1D1D1D1D1D1CFCFCFCCC8C6C1BEB9B6AEA9A49E9E9C9A94949292
+89847F7C7C7C7C848992949494999A9A9A9A9A9999949492928F8E89857F76726A61574F575C5F67
+6A6C7274767C7C7F7F818487878989898E8F92929294949494949494949492928C89857F746C6151
+4F4F57554F4F5D6772767F8487898E9292929292929292928F8F8E8E8C8987857F7C797474727272
+727272747476767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F7F7F7F7F818184848485858585858585858585858787878787878787898789898989898787
+87898989898989898989898989898989898989898989898989898989898989898989898989898989
+898989898989898989898989898989898989898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292929292929292
+92929292929292928F8F8E898989878787848481848487878787878989898C8E8F8F8F9292929292
+94949494949499999A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949492929292
+9292928F8C89898785858584817F7C7C7C7F8789929294999A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9C8492999EA6A9ABAEB1B1B1B1B1B3B3B1B1B1B1B1B3B3B3B3B3B6B6B6B6B7
+B7B6B6B6B7B6B3B1B1AEAEAEABA9A6A6A4A17F87898F929494999A9C9C9C9E9EA1A4A4A6A6A9AEAE
+AEB1B1B1B6B9B9BBBEC0C1C4C6CCCFCFCFD1CFCFCCC9C6C1BEB9B9B7B6B6B3B3B1B1AEABABA9A9A9
+A6A6A6A4A49E9E9E9E9E9C9C9C9A99949494949492929292928F8E8E8E8E8E8C8989898989898989
+89898787878585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676767674747474
+72726C6C6C6C6C6A6A6A6A67676761615F5F5F5F59575555544F4F4F4F4F4F4F4F4F4FFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF747C7F84858789898E8F929294949A9C9C9C9E9E9E
+9EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9AEAEB1B3B9BBC1C6C6CCCCCCCFCFCFCFCFCCCCC8C8C8
+C8C8C9CCCCCCCFCFCFCFCFD1D1D1D1D1D1D1D1CFCFCFCCC6C1C0BBB7B1AEA6A39E9C9C999494928C
+87817C7C7C7C7F899294999A9C9C9C9C9C9C9C9C9C9C9A999494928F89817C746C675F574F595D61
+6A6C7274767C7C7F7F818487878789898C8F92929294949494949494949292928F89877F7C726A5C
+4F4F4F55544F4F5F6A72767F8787898E8F9292929292929292928F8E8E8C8987847F7C7974747472
+727272747476767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F7F7F7F7F7F7F81818184858585858585858585858585858787878787878787878989878787
+87878787878989898989898987878789898989898987878787878989898989898989898987898989
+898989898989898989898989898989898989898989898989898989898989898989898C8C8C8C8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F929292929292929292929292929292929292
+92929292929292928F8E8C898989878787878485878787878989898989898E8F8F92929292929294
+949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494949494949494929292928F
+8F8F8E8989898785858584817F7C7C7C7F87898F9494949A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9C9C9C9C7C8F949EA6A6A9AEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B6B6B6B6
+B6B3B3B6B6B3B1B1AEAEABABA9A6A6A4A17F878C92929494999A9C9C9C9E9EA1A4A4A6A6A9ABAEB1
+B1B1B1B3B7B9B9BBBEC1C1C6C6CCCFCFCFD1CFCFCCC8C6C1BEB9B9B7B6B3B3B1B1B1AEABABA9A9A9
+A6A6A6A4A4A19E9E9E9E9C9C9C9A99949494949492929292928F8E8E8E8E8E8C8989898989898989
+89898787878585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676767674747474
+72726E6C6C6C6C6A6A6A6A6767676161615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767F81858789898C8F92929494999A9C9C9E9E9E9E
+9EA4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9ABAEAEB1B6B9BEC1C4C6C8CCCCCFCFCFCFCCCCC9C8C8C8
+C8C8C8CCCCCCCFCFCFCFCFD1D1D1D1D1D1D1D1CFCFCCC6C6C1BEB9B6B1A9A49E9E9C9A9494928F89
+847F7C7C7C79898F949A9C9E9E9EA1A3A39E9E9EA3A39E9C9A9994928C877F76726A615C55575C5F
+666C717474797C7F7F818487878789898C8E8F929294949494949494949292928F8987817C766C66
+574F4F4F554F4F545F6A74797F8787898C8F9292928F929292928F8E8E8E8C8987817F7C79767474
+7472747474747679797B7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F8181848585858585858585858585858585858587878787878787878787
+87878787878787878989898787878787878787898787878787878787878989898989898787878787
+89898989898989898989898989898989898989898989898989898989898989898989898989898989
+898C8C8C8C8C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F9292929292929292929292929292
+929292929292928F8E8E8989898987878787878787878989898989898C8C8E8F9292929292929494
+9494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949292928F8E
+8E8C8989878787858585817F7F7C7C8187898E9294969A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E
+9C9C9C9C9C9C9A9A7487949CA3A6A9ABAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B6B6
+B3B3B3B3B3B1B1AEAEABA9A9A6A6A4A37F878C929294949A9A9C9C9E9E9EA3A4A4A6A6A9ABAEAEB1
+B1B3B3B6B9B9BBBEC0C1C1C6C6CCCFCFCFD1CFCFCCC8C6C1BEB9B9B7B6B3B3B1B1B1AEABA9A9A9A9
+A6A6A6A4A4A19E9E9E9E9E9C9C9A99949494949492929292928F8F8E8E8E8E8E8989898989898989
+8989878787858585858585858581817F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676767674747474
+72726E6C6C6C6C6C6A6A6A6A67676461615F5F5F5D57575555514F4F4F4F4F4F4F4F4F4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF747C7F818587898C8E9292929494999A9C9C9E9E9E9E
+A1A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A9AEAEB1B1B7B9BEC1C4C6C8C8CCCCCCCCCFCCCCC8C8C8C8
+C8C8C8CCCCCCCFCFCFCFCFD1D1D1D1D1D1D1CFCFCCC8C6C1BEB9B7B1AEA6A49E9C9C999492928985
+7F7F7C7C74878F949A9C9EA4A4A4A6A6A6A4A4A4A4A4A4A39E9C9C949289847C746C6A5F574F575D
+616A6C7274767C7F7F818185878789898C8E8F929294949494949494929292928F8987847F79726A
+5F544F4F4F544F4F55616C747C7F858789898F92928F8F8F92928F8E8E8E8E898784817F7C7C7676
+74747474747476767B7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F81848585858585858585858585858585858585858587878787878785
+85858587878787878787878787878787878787878787878787878787878787878789878787878787
+87878787898989898989898989878787898989898989898989898989898989898989898989898989
+8989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292
+92929292929292928F8E8C89898989878787878789898989898C8E8E8E8E8F929292929292929494
+9494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949292928F8E8E
+898989898787878785817F7F7C7F8187898F9294999A9A9C9C9C9E9E9E9E9E9E9E9E9E9C9C9E9E9C
+9C9C9C9A9A9999948792999EA4A6A9AEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3
+B3B1B1B1B1B1AEAEABA9A6A6A6A4A37C898C929494969A9A9C9C9E9E9EA3A4A4A6A6A9A9AEAEB1B1
+B3B6B7B7B9BBBBBEC1C1C1C6C8CCCFCFCFD1CFCCCCC6C6C1BBB9B9B7B6B3B3B1B1B1AEABA9A9A9A6
+A6A6A6A4A4A19E9E9E9E9E9C9C9A9994949494949292929292928F8E8E8E8E8E8C89898989898989
+8989898787878585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676767674747474
+7472716C6C6C6C6C6A6A6A6A67676661615F5F5F5F59575555544F4F4F4F4F4F4F4F4F4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767F7F848789898E8F9292949494999A9C9C9E9E9E9E
+A3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A9ABAEAEB1B3B9BBBEC1C4C6C6C8C8CCCCCCCCCCC8C8C8C8C8
+C8C8C8C9CCCCCFCFCFCFD1D1D1D1D1CFCFCFCFCCC8C6C4C1BBB9B6B1ABA69E9E9C9A9492928E8781
+7F7C7C7C848E949A9EA1A4A6A6A9A9A9A9A6A6A6A6A6A6A6A4A39C9A948E877F76726A665F554F59
+5F666A717274797C7F7F818487878989898E8F929292949494949492929292928F8C89857F7C766E
+66594F4F4F4F4F4F4F55616C747C7F848789898E8E8F8E8F8F928F8F8E8E8C89898781817F7F7C76
+7674747474747476797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F81818484858585858585858584858585858585858585858585878585
+85858585858585878787878787858585858587878787878585858585878787878787878787858587
+87878787878787878989898987878787878787878789898989898989898989898989898989898989
+898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292929292929292
+92929292929292928F8F8E8C898989898787898989898C8E8E8E8F8F8F8F92929292929292949494
+94949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494929292928F8E8C
+898989898987878784817F7C7F81878E92929494999A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9C9C
+9C9A99999494948792949C9EA6A9ABAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3
+B1B1B1B1B1AEAEAEA9A6A6A6A4A47C878C929494969A9A9C9C9E9EA1A4A4A4A6A6A6A9AEAEB1B1B3
+B6B9B9B9B9BBBEC0C1C1C6C6C8CCCFCFCFCFCFCCC9C6C6C1BBB9B7B6B6B3B3B1B1B1AEABA9A9A9A6
+A6A6A6A4A4A39E9E9E9E9E9C9C9A9A96949494949492929292928F8E8E8E8E8E8C89898989898989
+898989878787858585858585858481817F7F7F7F7F7F7F7C7C7C7C7C7C7C76767676767674747474
+7472716C6C6C6C6C6A6A6A6A6767666161615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C7F818587898C8F9292949494969A9C9C9E9E9E9E9E
+A3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A9AEAEB1B1B3B9BBC0C1C4C6C6C6C8C8C9CCCCC9C8C6C6C8C8
+C8C8C8C9CCCCCCCFCFCFD1D1CFCFCFCFCFCFCCC8C6C6C1BEB9B6B1AEA9A49E9C9C9994928F89847F
+7F7C7C7F89929A9EA3A4A6A6A9ABAEAEAEA9A6A9A9A6A6A6A6A69E9C949289847C746C6A61595457
+5D61676C7274767C7F7F818487878789898C8F9292929494949492929292928F8F8C8987817F7974
+6A61554F4F4F4F4F4F4F57616C747C7F8487878989898C8E8F8F8F8E8E8C898989878481817F7C7C
+767674747474747676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181818484848585858481818484848585858585858585858485
+85858585858585858585858785858585858585858587858585858585858585858787878785858585
+85858587878787878787878787878787878787878787878787878989898989898989898989898989
+898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F9292929292929292929292
+9292929292929292928F8E898989898989898989898C8E8E8E8E8F92929292929292929292949494
+9494949499999A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949292928F8E8C89
+8989898989878784817F7C7C81878E92929499999A9A9C9C9C9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A
+9A9994949492848C949A9EA4A6A9ABAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1AEAEB1B1B1B1B1B1B1
+B1B1B1B1AEAEAEABA9A6A4A4A37F87898F9294999A9C9C9C9E9EA3A4A4A6A6A6A6A9ABAEB1B1B3B6
+B9B9B9B9BBBBBEC1C1C4C6C6C8CCCFCFD1CFCFCCC8C6C4C0BBB9B7B6B3B3B1B1B1B1AEABA9A9A9A6
+A6A6A6A4A4A39E9E9E9E9E9C9C9A9A9994949494949292929292928F8E8E8E8E8E8C898989898989
+898989898787878585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C79767676767676747474
+7472716C6C6C6C6C6C6A6A6A6A67666161615F5F5F5D57575555514F4F4F4F4F4F4F4F4F4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72767F7F848789898E8F9292949494999A9C9C9E9E9E9E9E
+A4A4A4A4A4A4A4A4A4A4A6A6A6A6A9ABAEAEB1B1B6B9BBC0C1C4C6C6C6C6C8C8C9C9C8C6C6C6C8C8
+C8C8C8C8CCCCCCCFCFCFCFCFCFCFCFCFCCCCC9C6C6C1BEBBB9B1AEABA6A39E9C9A94928F89877F7F
+7C7C748792969CA1A4A6A9A9ABAEAEAEAEAEABABA9A9A6A6A6A6A49E9A948E877F76726C675F574F
+575F616A717274797C7F818485878789898C8E8F92929494949492929292928F8E8C8987857F7C74
+71675C514F4F4F4F4F4F4F57646C74797F8185878789898C8E8E8E8E8C8989898987878481817F7C
+7976767474747474767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818184848481817F8181818184848485858585848181
+84848485858585858585858585858585858585858585858585858585858585858585858585858585
+85858585858585878787878787878585858585878787878787878787878787878989898989898989
+89898989898989898989898989898C8C8C8C8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F92929292
+92929292929292928F8E8C8989898989898989898C8E8E8E8E8F9292929292929292929292929494
+9494949494999A9A9A9A9A9A9A9A9A9A9A9A9A999994949494949494949494949292928F8E8C8989
+898989898787857F7C7C7C81878C9294949A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9A9A99
+99949292927F89929A9CA3A6A6A9AEAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1AEAEAEAEAEAEAEB1B1B1
+B1B1AEAEAEAEABA9A6A4A4A17F85898F9294999A9C9C9C9E9EA4A4A6A6A6A6A9A9A9AEAEB1B1B3B7
+B9B9B9BBBBBEC0C1C4C6C6C6C8CCCFCFD1CFCFCCC8C6C1C0BBB9B7B6B3B3B1B1B1B1AEABA9A9A9A6
+A6A6A6A4A4A39E9E9E9E9E9C9C9A9A9994949494949292929292928F8E8E8E8E8E8C898989898989
+898989898787878585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C79767676767676747474
+7472726C6C6C6C6C6C6A6A6A6A67666161615F5F5F5F59575555544F4F4F4F4F4F4F4F4F4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C7F818787898C8E929294949494999A9C9C9E9E9E9EA1
+A4A4A4A4A4A4A4A4A4A4A6A6A6A6A9ABAEB1B1B1B6B9BBC0C1C4C6C6C6C6C6C8C8C8C8C6C6C6C8C8
+C8C8C8C8CCCCCCCCCFCFCFCFCFCCCCCCCCC9C6C6C4C1BBB9B3B1ABA6A49E9C9A9994928C89847F7C
+7C7C818E949C9EA4A6A9AEABAEAEB1B1B1AEAEAEABA9A9A9A9A6A6A39C999289847C74716A615C55
+4F5C5F676C7274767C7F7F818587878989898E8F9292929294929292929292928F8E898987817F79
+726C61554F4F4F4F4F4F4F4F59666C74797C7F8487878789898E8E8C8C8989898987878584817F7F
+7C7B79767674747476767676797B7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181817F7F7F7F7F7F8181818184848481817F
+81818181848484858585858585858584848585858585858585858585858585858585858585858585
+85858585858585858585858787858585858585858585858585878787878787878787878787878787
+8989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F
+8F8F8F8F8F8F8F8F8E8C898989898989898989898E8E8E8E8F929292929292929292929292929494
+9494949494999A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494929292928F8E8E8C89
+8989898787847F7C7C7C81878C9294969A9A9A9A9A9C9C9C9E9E9E9E9E9C9C9C9C9C9C9C9A9A9994
+9492928F8C89929A9C9EA4A6A9ABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEABABA9A9A6A6A4A17F84898F9294999A9C9C9C9E9EA3A4A6A6A6A9A9ABABAEAEB1B1B1B3B7
+B9B9B9BBBBBEC1C1C6C6C6C6C8CCCFCFD1CFCCCCC8C6C1C0BBB9B7B6B3B3B1B1B1B1AEABA9A9A6A6
+A6A6A6A4A4A39E9E9E9E9E9C9C9C9A9996949494949292929292928F8F8E8E8E8E8E898989898989
+89898989878787858585858585858481817F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767676747474
+7472726C6C6C6C6C6C6A6A6A6A6767616161615F5F5F5C575555554F4F4F4F4F4F4F4F4F4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74797F7F848789898E8F9292949494949A9A9C9C9E9E9E9EA3
+A4A4A4A4A4A4A4A4A4A4A6A6A6A9ABAEAEB1B1B3B7B9BBC0C1C4C6C6C6C6C6C6C8C6C6C6C6C6C8C8
+C8C8C6C8C8CCCCCCCCCCCCCCCCCCCCC9C8C6C6C4C1BEB9B7B1AEA9A6A39E9C9A94928F89877F7F7C
+7C7F8992999CA4A6A9AEAEAEAEAEB1B1B1B1AEAEAEABA9A9A9A9A6A49E9A948E877F76746C675F57
+51575D616A6E7274797C7F818487878989898C8F9292929292929292929292928F8E8C8987857F7C
+7471675C544F4F4F514F4F4F5159666C74767C7F8185878789898C8C89898989898787878784817F
+7C7C7C7976767474767676767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181817F7F
+7F7F7F7F818181818484848585858484818184848485858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858585878787878787878787
+8787878787878787898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8C898989898989898989898C8E8E8E8E8F929292929292929292929292929294
+949494949494999A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949292928F8E8E8E8E8C
+89898987817F7F7F7F81878C9294999A9A9C9C9C9C9C9C9C9E9E9E9E9C9C9C9C9C9C9A9A99949494
+92928E898792999C9EA4A6A6A9ABAEAEAEAEAEAEAEAEAEAEAEABAEAEAEAEAEAEAEAEAEABABAEAEAB
+ABABA9A9A6A6A6A6A4A17C87898E9294999A9C9C9C9E9EA3A4A6A6A9A9ABABAEAEAEAEB1B1B1B6B9
+B9B9BBBBBBBEC1C1C6C6C6C6C8CCCFCFCFCFCCC9C6C6C1BEBBB9B7B6B3B1B1B1B1AEAEABA9A9A6A6
+A6A6A6A4A4A39E9E9E9E9E9C9C9C9A999994949494929292929292928F8E8E8E8E8E8C8989898989
+89898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767676747474
+7472726C6C6C6C6C6C6C6A6A6A6A67646161615F5F5F5D59575555514F4F4F4F4F4F4F4F4F4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C7F818787898E8E8F9294949494969A9C9C9E9E9E9E9EA1
+A3A4A4A4A4A4A4A4A4A4A6A6A9A9ABAEAEB1B1B3B9B9BBC0C1C1C4C6C6C6C6C6C6C6C6C6C6C6C6C6
+C6C6C6C6C8C8C9C9CCCCCCCCC9C8C8C8C6C6C4C1BEBBB9B1AEA9A6A49E9C9A9994928C87817F7C7C
+798792949CA1A6A9AEB1B1AEAEB1B1B1B1B1B1B1AEAEAEAEABA9A6A6A49C999289847C74726A645D
+554F575F666C7274767C7F7F8487878789898C8E8F92929292929292929292928F8E8C898987817F
+79726C61574F4F4F4F4F4F4F4F5559666C72767C7F7F848787898989898989898989878787878581
+7F7C7C7C797676767676767676767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7F7F7F7F7F7F7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F81818181848484817F7F81818181848484858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858585858585858585858587
+878787878787878787898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8C
+8C8C8C8C8C8C898989898989898989898989898E8E8E8E8F92929292929292929292929292929294
+949494949494999A9A9A9A9A9A9A9A9A9A9A9994949494949494949494949292928F8E8E8E8E8E89
+898987817F7F7F7F7F878C929494999A9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9A9A9994949492
+8F8C897C8F949C9EA1A6A9A6A9ABAEAEAEAEAEAEAEAEABAEABABABABAEABABABABABA9A9A9A9A9A9
+A9A9A6A6A6A4A4A4A17987898E9294999A9C9C9C9E9EA3A4A6A6A9ABAEAEAEAEAEB1B1B1B3B3B6B9
+B9B9BBBBBBC0C1C1C6C6C6C6C8CCCFCFCFCFCCC8C6C4C1BBBBB9B7B3B3B1B1B1B1AEAEAEA9A9A6A6
+A6A6A6A6A4A49E9E9E9E9E9C9C9C9A9A9994949494929292929292928F8E8E8E8E8E8C8989898989
+89898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C7C7B7676767676747474
+7472726E6C6C6C6C6C6C6A6A6A6A67666161615F5F5F5F59575755544F4F4F4F4F4F4F4F4F4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF767C7F7F8587898C8E8E929294949494999A9C9C9E9E9E9E9EA1
+A3A4A4A4A4A4A4A4A4A6A6A6A9ABAEAEAEB1B1B6B9BBBBC0C1C1C1C1C4C6C6C6C6C6C6C6C6C6C6C6
+C6C6C6C6C6C8C8C8C8C9C8C8C8C6C6C6C6C4C1C0BBB9B3B1ABA6A49E9C9C9A94928F89877F7F7C7C
+848E949C9EA4A6ABAEB1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEABA9A6A49E9C948E877F79746C6A61
+5954555C616A6C7274797C7F8185878789898C8E8F9292929292929292929292928F8E898989857F
+7C746E675D554F4F4F544F4F4F4F555C666A7274797C7F8185878789898989898989898787878784
+817F7C7C7C7C79767676767676767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7F7F7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F8181817F7F7F7F7F7F7F818181818484848585858585858585858585
+85858585858585858585858585858585858585858484848484858585858585858585858585858585
+85858585858587878789898989898989898989898989898C8C8C8C8E8E8E8E8E8E8E8E8E8C898989
+8989898989898989898989898989898989898C8E8E8E8E8F92929292929292929292929292929292
+949494949494999999999A9A9A9A9A9A9A999494949494949494949494949292928F8E8E8E8E8C89
+8987847F7F7F7F7F878C929494999A9A9C9C9C9C9C9C9C9E9E9E9E9C9C9C9C9A9A9994949492928F
+8C89728C929A9EA1A4A6A9A9A9ABAEAEAEAEAEAEAEAEABABA9A9A9A9A9A9A9A9A9A9A9A9A6A6A6A6
+A6A6A4A4A4A3A1A17C87898E9294969A9C9C9E9EA1A4A4A6A6A9ABAEAEAEAEB1B1B1B1B3B3B6B7B9
+B9B9BBBBBBC0C1C1C6C6C6C6C8CCCFCFCFCCCCC8C6C1C1BBB9B9B6B3B3B1B1B1B1AEAEAEABA9A6A6
+A6A6A6A6A4A4A19E9E9E9E9C9C9C9A9A999994949492929292929292928F8E8E8E8E8E8C89898989
+8989898989898787858585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676747474
+747472716C6C6C6C6C6C6A6A6A6A6766616161615F5F5F5C575757554F4F4F4F4F4F4F4F4F4F4FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF767F7F818789898E8E8F929294949494999A9C9C9E9E9E9E9E9E
+A3A4A4A4A4A4A4A4A4A6A6A9A9ABAEAEAEB1B1B6B9BBBBBEC1C1C1C1C1C4C6C6C6C6C6C4C6C6C6C6
+C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C4C1BEBBB9B6B1AEA9A4A19C9C9A9494928C87817F7C7C7F
+89929A9EA4A6A9AEB1B3B3B1B1B1B1B1B1B1B1B1B1B1AEAEAEABA9A6A6A49C999289847C76726C66
+5F574F575F666A7274767C7F7F8487878989898E8F9292929292929292929292928F8E8989898784
+7F79726A6157514F4F4F554F4F4F54555D666A7274767C7F81848787878787898989898987878787
+847F7F7F7C7C7C79767676767676767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181818184848485858585858585
+84848484858585858585858585858484858585848181818181818184848484848585858585858585
+8585858585858587878787878789898989898989898989898989898989898C8C8C8C8C8C89898989
+89898989898989898989898989898989898C8E8E8E8E8E8F8F929292929292929292929292929292
+9494949494949496969999999A9A9A9A999994949494949494949494949292928F8E8E8E8E8C8989
+8785817F7F7F7F87898F929494999A9C9C9C9E9E9E9E9E9E9E9E9E9C9C9C9A9A9994949492928E89
+89858792999CA1A4A6A9A9A9A9ABAEAEAEAEAEAEAEABABA9A9A9A6A9A9A6A6A6A6A6A6A6A6A6A6A4
+A4A4A4A19E9E9E7F87898E9294949A9C9C9E9EA3A4A4A6A6A9ABAEAEAEAEB1B1B1B1B3B3B6B6B9B9
+B9BBBBBBBBC0C1C1C6C6C6C6C8CCCCCFCFCCC8C6C6C1C0BBB9B9B6B3B3B1B1B1B1AEAEAEABA9A6A6
+A6A6A6A6A4A4A19E9E9E9E9E9C9C9A9A9A9994949494929292929292928F8E8E8E8E8E8C89898989
+8989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676747474
+747472726C6C6C6C6C6C6A6A6A6A6767646161615F5F5F5D59575755514F4F4F4F4F4F4F4F4F4FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+gr
+gs
+0 436 translate
+ 1200 436 scale
+1200 436 8
+[1200 0 0 436 0 0] L1i
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF767C7F7F8587898C8E8E8F9294949494969A9A9C9C9E9E9E9E9E9E
+A1A3A4A4A4A4A4A4A4A6A6A9A9ABAEAEAEB1B3B7B9BBBBBBC0C1C1C1C1C1C4C6C6C4C4C1C4C6C6C6
+C6C4C6C6C6C6C6C6C6C6C6C6C6C6C1C1C1BEBBB9B7B1AEA9A6A39E9C9A9494928E89857F7C7C7687
+8F999CA1A6A9ABAEB1B3B3B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEABA9A6A49E9C948E877F7C746E6A
+615C554F5961676C7274797C7F8487878789898C8E8F92929292929292929292928F8E8C89898987
+817C746E675F554F4F4F54544F4F4F55575F646A6E74767C7F818487878787878989898989898787
+87817F7F7F7C7C7C7C7976767679767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7C7C7C
+7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181848484858584
+8481818181848484858585858584848181818481817F7F7F7F7F7F81818181818181818484848484
+85858585858585858787878787878787878789898989898989898989898989898989898989898989
+89898989898989898989898989898989898C8E8E8E8E8E8E8F929292929292929292929292929292
+9494949494949494949494999A9A9A9A9994949494949494949494949292928F8E8E8E8E8E898989
+87817F7F7F8185898F929294999A9A9C9C9C9E9E9E9E9C9C9C9C9C9C9C9A9A9994949292928E8987
+857F8E949C9EA4A6A6A9A9A9A9ABABAEAEAEAEABABA9A9A9A9A6A6A6A6A6A6A6A4A4A4A4A4A4A4A3
+A39E9E9E9C9C7F878C8F9292949A9C9C9E9EA1A4A6A6A6A6A9AEAEAEAEB1B1B1B1B3B3B6B6B7B9B9
+B9BBBBBBBBC0C1C1C4C6C6C6C8C9CCCFCCCCC8C6C6C1BEBBB9B9B6B3B1B1B1B1B1AEAEAEABA9A6A6
+A6A6A6A6A4A4A19E9E9E9E9E9C9C9A9A9A9996949494929292929292928F8E8E8E8E8E8C89898989
+898989898989878787858585858585858481817F7F7F7F7F7C7C7C7C7C7C7C7C7C76767676767474
+74747272716C6C6C6C6C6A6A6A6A6767666161615F5F5F5F59575755544F4F4F4F4F4F4F4F4F4FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF74797F7F848789898E8E8E929294949494999A9C9C9E9E9E9E9E9E9E
+A1A4A4A4A4A4A4A4A6A6A6A9A9ABABAEAEB1B3B7B9BBBBBBC0C0C1C1C1C1C1C4C4C1C1C1C1C4C4C4
+C1C1C4C6C6C6C6C6C6C6C6C4C1C1C1BEBEBBB9B7B1B1ABA6A49E9C9A969492928987817F7C76848C
+949C9EA4A6A9AEB1B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEA9A6A4A39C999289847F76726C
+675F574F555F646A7174767C7F8185878789898C8E8F9292929292929292929292928F8E8C8C8987
+847F76726A61594F4F4F5155514F4F4F55575F666A7274767C7F7F81858787878789898989898989
+8785817F7F7F7F7C7C7C7979797979797676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181818481
+817F7F7F7F818181818184848484817F7F7F81817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181818181
+81818184848484848585858787878787878789898989898989898989898989898989898989898989
+8989898989898989898989898989898989898C8E8E8E8E8E8F929292929292929292929292929294
+9494949494949494949494999A9A9A999694949494949494949494949292928F8E8E8E8E8C898987
+84817F7F8184898E92929494999A9A9C9C9C9E9E9E9E9C9C9C9C9C9C9C9A9A999494928F8E898785
+7C87929A9EA4A4A6A9A9A9A9ABABABABABAEABA9A9A9A9A6A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E
+9E9E9C9C7481878E8F9292949A9C9C9E9EA1A4A6A6A9A9A9ABAEAEAEB1B1B1B1B3B3B3B6B7B9B9B9
+B9BBBBBBBEC0C1C1C4C6C6C6C8C9CCCCCCC8C6C6C4C1BBBBB9B9B6B3B1B1B1B1B1AEAEAEABA9A9A6
+A6A6A6A6A4A4A19E9E9E9E9E9C9C9A9A9A9A99949494949292929292928F8E8E8E8E8E8E8C898989
+898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767474
+74747472716C6C6C6C6C6A6A6A6A676767616161615F5F5F5C575757554F4F4F4F4F4F4F4F4F4F4F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF767C7F81878789898E8E8F9292949494999A9A9C9C9E9E9E9E9E9E9E
+A1A4A4A4A4A4A4A4A6A6A6A9A9ABABAEAEB1B3B7B9BBBBBBBEC0C0C1C1C1C1C1C1C1C1C1C1C1C1C1
+C1C1C1C4C6C6C6C4C1C1C1C1C0BEBEBEB9B9B7B1B1AEA9A6A39E9A999494928E89847F7F7B7F8992
+9A9CA3A6A9ABAEB1B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEABA6A6A49E9C948E87817C7471
+6A615C554F5761676C72767C7F7F8587878989898E8F9292929292929292929292928F8F8E8E8C89
+87817C746C665F574F4F4F55554F4F4F51575961676C7274767C7F7F848487878787878989898989
+87878481817F7F7F7C7C7C7C7C7C7C7C7979797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81
+7F7F7F7F7F7F7F7F7F7F818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F818181848585858585858585878787898989898989898989898989898989898989898989
+8989898989898989898989898989898989898C8E8E8E8E8F92929292929292929292929292929494
+949494949494949494949494999A9A999494949494949494949494929292928F8F8E8E8C89898787
+8481818485878C92929494999A9A9C9C9C9E9E9E9E9C9C9C9C9C9C9C9A9A99949492928E8987877C
+818F949C9EA3A4A6A6A9A9A9A9A9A9ABABABA9A9A9A6A6A6A6A6A4A4A4A4A49E9E9C9C9C9C9C9C9C
+9C9C9A7487898E8F929294999C9C9E9EA1A4A4A6A9A9ABACAEAEAEB1B1B1B1B3B3B6B6B6B7B9B9B9
+B9BBBBBBBEC0C1C1C4C6C6C6C6C8CCCCC9C8C6C6C1C1BBBBB9B9B6B3B1B1B1B1AEAEAEAEABA9A9A6
+A6A6A6A6A4A4A39E9E9E9E9E9C9C9A9A9A9A99949494949292929292928F8E8E8E8E8E8E8C898989
+898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767474
+74747472726E6C6C6C6C6C6A6A6A6A6767646161615F5F5F5D59575755514F4F4F4F4F4F4F4F4F4F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF767C7F7F848789898C8E8E9292929494999A9A9A9C9C9E9E9E9E9E9E9E
+A3A4A4A4A4A4A4A4A6A6A6A9A9A9ABAEAEB1B3B7B9B9BBBBBBBEBEC0C0C1C1C1C1C1C1C1C1C1C1C1
+C1C1C1C1C1C1C1C1C1C1C0BEBEB9B9B9B7B6B1B1AEA9A6A49E9C9A9494928F8987817F7C7C879294
+9C9EA4A6ABAEAEB1B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEACA9A6A4A19C999289857F7672
+6C675F5751545F646A7174797C7F8487878789898C8E8F9292929292929292929292928F8F8F8E89
+87857F76726A615C544F4F5455544F4F4F54575D616A6C7476797C7F818184858787878789898987
+8787878481817F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181817F7F7F
+7F7F8181818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F81818485858585858585878787878789898989898989898989898989898989898989
+8989898989898989898989898989898989898E8E8E8E8E8F92929292929292929292929292929494
+94949494949494949494949499999994949494949494949494949292929292928F8E8E8989898787
+8584848787899292949494999A9A9C9C9C9E9E9E9E9C9C9C9A9A9A9A9A99969494928F8989877F7F
+8C92999C9EA3A4A6A6A6A6A6A6A9A9A9A9A9A9A9A6A6A6A6A6A4A4A19E9E9E9E9C9C9A9A9A9A9999
+999A7C87898C92929494999C9C9E9EA1A4A4A6A6A9ABAEAEAEB1B1B1B1B1B3B3B6B6B6B6B7B9B9B9
+BBBBBBBBC0C0C1C1C1C6C6C6C6C8CCC9C8C6C6C4C1C0BBB9B9B7B6B3B1B1B1B1AEAEAEAEABA9A9A6
+A6A6A6A6A4A4A39E9E9E9E9E9C9C9A9A9A9A9996949494929292929292928E8E8E8E8E8E8E898989
+898989898989898987878585858585858585817F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767674
+7474747472716C6C6C6C6C6A6A6A6A6767666161615F5F5F5F5C575755554F4F4F4F4F4F4F4F4F4F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF747C7C7F81878989898E8E8F9292949494999A9A9A9C9C9E9E9E9E9E9E9E
+A4A4A4A4A4A4A4A4A6A6A6A9A9A9ABAEB1B1B3B7B9B9BBBBBBBBBEBEC0C0C1C1C1C1C1C1C1C1C1C0
+C0C0C1C1C1C0BEBEBEBEBEBBB9B9B7B6B6B1B1AEABA9A6A39E9C949492928E89847F7F76818E929A
+9EA3A6A9AEAEB1B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEA9A6A6A49E9A948E87817C74
+726A615D554F5761676C72767C7F8184878789898C8E8F92929292929292929292929292928F8F8E
+8987817C746C665F574F4F4F5555514F4F4F55575F666A7274767C7C7F8181848587878787878787
+8787878584817F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F8181818181818184848484818181
+818181848584848481818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F818484848485858585858787878787878989898989898989898989898989898989
+89898989898989898989898989898989898C8E8E8E8E8F9292929292929292949494949292949494
+94949494949494949494949494949494949494949494949494949292929292928F8E8C8989878785
+85858787898F92929494999A9A9C9C9C9E9E9E9E9C9C9C9A9A9A9A9A9A999494928F8C89877F7F89
+92949A9C9EA1A4A4A6A6A6A6A6A6A6A6A9A6A6A6A6A6A6A4A4A4A19E9E9E9C9C9C9A999494949494
+947F87898C92929494999A9C9E9EA3A4A4A4A6A9ABAEAEAEAEB1B1B1B1B3B3B6B6B7B7B6B9B9B9B9
+BBBBBBBBBEC0C1C1C1C6C6C6C6C8C9C8C6C6C6C1C1BEBBB9B9B7B3B1B1B1B1B1AEAEAEAEABA9A9A6
+A6A6A6A6A4A4A39E9E9E9E9E9C9C9A9A9A9A9A99949494949292929292928F8E8E8E8E8E8E8C8989
+898989898989898987878785858585858585817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C767676767674
+7474747472726C6C6C6C6C6A6A6A6A676767616161615F5F5F5C575757554F4F4F4F4F4F4F4F4F4F
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF767C7F7F85878989898E8F9292929494999A9A9A9C9C9E9E9E9E9E9E9EA1
+A4A4A4A4A4A4A4A6A6A6A6A6A9A9ABAEB1B1B3B7B9B9BBBBBBBBBBBBBEC0C0C1C1C1C1C1C0C0C0BE
+BEBEBEC0BEBEBEBEBBB9B9B9B7B6B6B1B1B1AEABA9A6A49E9C9A9494928F89877F7F7C7F8992949C
+9EA4A9ABAEB1B1B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEABA9A6A49E9C999289877F79
+746C675F57544F5C616A7174797C7F8185878989898E8F9292929292929292929292929292928F8F
+8C89877F76726A615C554F4F545555514F4F4F555761676A7274767C7C7F7F818184858787878787
+878785848481817F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7F7C7C7C7C7F7F7F7F7F7F7F7F7F7F8181818181818184848484818485858585858484
+8484848585858585858584848484818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7F7F7F7F
+7F7F7F7F7F7F7F7F8181818184858585858585878787878789898989898989898989898989898989
+898989898989898989898989898989898C8E8E8E8E8F929292929292929494949494949494949494
+949494949494949494949494949494949494949494949494949292929292928F8E8C898987878585
+858787898E9292949494999A9A9C9C9C9E9E9E9E9C9C9C9A9A9A9A9A99969492928E89878579878E
+92949C9E9EA1A3A4A4A4A4A6A6A6A6A6A6A6A6A6A6A4A4A4A4A19E9C9C9C9C9A9A99949292929292
+7F87898E92929494999A9C9E9EA3A4A4A6A6A6A9ABAEAEAEB1B1B1B1B3B3B6B6B7B9B7B7B9B9B9B9
+BBBBBBBBBEC0C1C1C1C4C6C6C6C8C8C6C6C6C4C1C1BBBBB9B9B6B3B1B1B1B1B1AEAEAEAEABA9A9A6
+A6A6A6A6A4A4A39E9E9E9E9E9C9C9C9A9A9A9A99949494949292929292928F8E8E8E8E8E8E8C8989
+89898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C7C767676767676
+7474747472726E6C6C6C6C6A6A6A6A676767646161615F5F5F5D59575755514F4F4F4F4F4F4F4F4F
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF747C7F7F81878989898C8E8F92929294949A9A9A9A9C9C9E9E9E9E9E9E9EA3
+A4A4724F4F4F4FA6A6A6A6A6A9A9ABAEB1B1B3B9B9B9BBBBBBBBBBBBBBBEC0C0C1C1C0C0BEBEBEBE
+BBBBBEBEBEB9B9B9B9B9B9B7B6B1B1AEAEAEABA9A6A4A39E9C999492928C89817F7C7C878F949A9E
+A4A6ABAEAEB1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEA9A6A4A39E9A948E87817C
+76726A615D574F555F666C7274797F7F84878789898C8E929292929292929292929292929292928F
+8E8989817C746C665F57514F4F555555514F4F51555D61676C7274767C7C7F7F8181848484848585
+858584848181817F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F818181818181818484848484818485858585858585858585858585
+8585858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C
+7C7C7F7F7F7F7F7F7F7F7F7F81848585858585858587878789898989898989898989898989898989
+898989898989898989898989898989898E8E8E8E8E8F929292929292949494949494949494949494
+949494949494949494949494949494949494949494949494949292929292928F8E89898987878585
+878789898F92929494999A9A9C9C9C9E9E9E9E9C9C9C9A9A9A9A9A9A999494928F8989876A858992
+949A9C9C9E9EA1A3A4A4A4A4A4A4A6A6A6A4A4A4A4A4A3A39E9E9C9C9A9A9A99949492928F8F8E7F
+878C8F92929494999A9C9EA1A3A4A4A6A6A6A9ABABAEAEAEB1B1B1B1B3B3B6B9B9B9B9B7B9B9B9BB
+BBBBBBBBBEC0C1C1C1C4C6C6C6C6C6C6C6C6C1C1C0BBBBB9B9B6B3B1B1B1B1AEAEAEAEAEABA9A9A6
+A6A6A6A6A6A4A49E9E9E9E9E9C9C9C9A9A9A9A99949494949492929292928F8E8E8E8E8E8E8E8C89
+89898989898989898987878785858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676
+747474747472716C6C6C6C6A6A6A6A676767666161615F5F5F5F5C575757554F4F4F4F4F4F4F4F4F
+4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF767C7F8185878989898E8F9292929494999A9A9A9A9C9C9E9E9E9E9E9E7F89
+94949494928F89847FA6A6A6A9A9ABAEB1B1B3B9B9B9B9B9B9B9BBBBBBBBBBBEC0C0BEBEBEBBBBBB
+BBBBBBBBB9B9B9B9B7B7B6B1B1AEAEAEABABA9A6A6A49E9C9A9494928F89877F7F76818992999CA3
+A6ABAEAEB1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEABA6A6A49E9C969289877F
+79746C676157544F5761676C72767C7F81848789898C8E8F92929292929292929292929292929292
+8F8C89877F76726A615D574F4F515555554F4F4F54575F616A6C7274767C7C7F7F7F818184818181
+81818481817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7F7F7C7C7C7C7C7C7C7C7F7F7C7F7C7C7C7C7C7C7F7C7C7C7F7F7F7F7F7F7F7F7F
+7F7F7F7F81817F818181848181818484858484848485858585858585858585858585858585858585
+858585858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C
+7C7C7C7F7F7F7F7F7F7F7F7F81818485858585858787878789898989898989898C8C89898989898C
+8C89898989898989898989898989898C8E8E8E8E8F92929292929292949494949696949494949494
+9494949494949494949494949494949494949494949494949292929292928F8E8C89898787858585
+8787898E9292949494999A9A9C9C9C9E9E9E9E9C9C9C9A9A9A9A9A99949492928E89877F84898F92
+949A9C9C9C9C9E9E9E9EA3A4A4A4A4A4A4A4A4A3A19E9E9E9C9C9A9A9494949494928F8E8C897F87
+898F92929494999A9C9E9EA4A4A4A6A6A6A6A9ABAEAEAEAEB1B1B1B3B3B3B6B7B9B9B9B9B9B9B9BB
+BBBBBBBBBEC0C1C1C1C4C4C6C6C6C6C6C6C4C1C1BEBBB9B9B7B6B3B1B1B1B1AEAEAEAEAEABA9A9A6
+A6A6A6A6A6A4A49E9E9E9E9E9C9C9C9A9A9A9A99949494949492929292928F8E8E8E8E8E8E8E8C89
+89898989898989898987878785858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676
+747474747472726C6C6C6C6A6A6A6A6A676767616161615F5F5F5C575757554F4F4F4F4F4F4F4F4F
+4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF767C7F7F84878989898C8F929292929494999A9A9A9C9C9C9E9E9E9E76858E97
+9E9C9C9A9A99928987816CA6A9ABAEAEB1B1B3B7B9B9B9B9B9B9B9BBBBBBBBBEBEBEBBBBBBBBBBBB
+B9B9B9B9B9B7B6B6B3B3B1B1AEAEABA9A9A9A6A6A49E9E9C9A9494928987817F7C7F8792949C9EA6
+A9AEB1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEACA9A6A4A39E9A948F8981
+7C74726A665F574F545C616A6C74767C7F84878989898E8F92929292929292929292929292929292
+928E8987847C74726A5F57544F4F555555554F4F4F55575F666A6C727476797C7C7F7F7F81817F7F
+7F8181817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7F7F7F7F7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181818181
+81818484848481818485858584848485858585858585858585858585858585858585858585858585
+8585858585858585858585858585858585848181818181818181818181817F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585858787878789898989898989898C8E8E8E8E8E8E8E8E
+8C8989898989898989898989898C8C8E8E8E8E8F9292929292949494949499999999999999999999
+9694949494949494949494949494949494949494949494929292929292928F8E8989878785858587
+87898C8F92929494999A9A9C9C9C9E9E9E9E9C9C9C9C9A9A9A9A9A999494928F8987847F878C9294
+949A9C9A9A9C9C9C9C9C9E9C9E9EA4A4A3A19E9E9E9E9C9C9C9A94949292928F8F8C898989768789
+8F92929494999A9C9C9EA3A4A4A6A6A6A9A9A9ABAEAEAEB1B1B1B1B3B3B3B6B7B9B9B9B9B9B9B9BB
+BBBBBBBBBBC0C1C1C1C1C1C6C6C6C6C4C1C1C1C0BBBBB9B9B7B3B1B1B1B1B1AEAEAEAEABABA9A9A6
+A6A6A6A6A6A4A4A19E9E9E9E9E9C9C9A9A9A9A99949494949492929292928F8E8E8E8E8E8E8E8E89
+89898989898989898987878785858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676
+767474747472726E6C6C6C6C6A6A6A6A676767666161615F5F5F5D59575755544F4F4F4F4F4F4F4F
+4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF747C7C7F8185878989898E8F929292929494999A9A9A9C9C9E9E9E9E768F929AA1
+A6A4A39E9E9E9A949292816CA9ABAEAEB1B1B3B6B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBBB9B9B9
+B9B9B9B9B6B3B1B1B1B1B1AEAEABA9A6A6A6A4A49E9E9C9A9994928E89857F7C79878C949A9EA4A6
+AEB1B1B1B1B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEA9A6A6A49E9C96928987
+7F76746C6A615C554F555D616A6E74797C81878789898C8F92929292929292929292929292929292
+928F8989877F7C746C665D554F4F51555555544F4F5155595F666A6C72747476797C7C7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F
+7F7F7F7F7F7F7F7F817F7F7F7F7F7F81818181848485858584848484818184848484848485858584
+84848485858584848585858585858585858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585848484848484848484818181818181817F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F81818485858585878789898989898989898C8E8F8F8F8F8F8F8F8F
+8E8C89898989898989898C8C8E8E8E8E8E8E8E8F92929294949494949496999A9A9A9A9A9A9A9A99
+99999999999696949494949494949494949494949494949292929292928F8E898989878785858587
+89898E9292949494999A9A9C9C9C9E9E9E9E9E9C9C9C9A9A9A9A999494928F8C89847C87898F9294
+999C9A9A999A9A9A9A9C9A9A9A9C9C9C9E9E9E9C9C9C9C9A999494928F8C8989898787877487898E
+92929494999A9C9C9E9EA4A4A4A6A6A6A9A9ABAEAEAEAEB1B1B1B1B3B3B3B6B7B9B9B9B9B9B9B9BB
+BBBBBBBBBBC0C0C1C1C1C1C4C6C6C4C1C1C1C0BEBBBBB9B9B6B3B1B1B1B1AEAEAEAEAEABABA9A9A6
+A6A6A6A6A6A4A4A19E9E9E9E9E9C9C9A9A9A9A99949494949492929292928F8E8E8E8E8E8E8E8E8C
+89898989898989898989878787858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C797676767676
+76747474747472716C6C6C6C6A6A6A6A67676766616161615F5F5F5C575757554F4F4F4F4F4F4F4F
+4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF767C7F7F85878789898C8F929292929294969A9A9A9A9C9C9E9E9E768F9EA1A4AE
+AEABA9A6A6A6A49C9C9C947F745FAEAEB1B1B3B6B9B9B9B9B9B9B9B9B9B9BBBBBBBBB9B9B9B9B9B9
+B9B9B9B6B3B1B1B1B1AEAEAEABA9A6A6A4A4A4A39E9C9C9A94928F8987817F79848992999CA1A6AB
+B1B6B3B3B3B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEABA9A6A6A39C9A948E87
+817C74726A665F57514F575F676A72767C7F848789898C8E8F929292929292929292929292929292
+928F8C8987847F76726A6157514F4F545557554F4F4F54575D61666A6C7172747676797C7C7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7C7C7F7F7F
+7F7F81817F7F7F818181818181848485858787878787878787878787878587878787878787878787
+85848585858585858585858585858585858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858587878787878787878785858585848484848481
+81818181817F7F7F7F7F7F7F7F818184858585858787878989898989898C8E8E8F9292929292928F
+8E8E89898989898989898E8E8E8E8E8E8E8E8F92929294949494949494999A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9999999999949494949494949494949494949292929292928F8E8C898987878585858787
+898E9292949494999A9A9C9C9C9E9E9E9E9E9E9C9C9C9C9A9A9A999494928E89857687898E929494
+9A9A9994949494949999949494949999999A9A9A9A9A999494928F8C898787878481816781898E92
+929494999A9C9C9C9EA3A4A4A6A6A6A6A9A9ABAEAEAEAEB1B1B1B3B3B3B3B6B7B9B9B9B9B9B9BBBB
+BBBBBBBBBBBEC0C1C1C1C1C1C4C1C1C1C1C0BEBBBBB9B9B9B6B3B1B1B1B1AEAEAEAEAEABABA9A9A9
+A6A6A6A6A6A4A4A19E9E9E9E9E9C9C9A9A9A9A99949494949492929292928F8E8E8E8E8E8E8E8E8C
+89898989898989898989878787858585858585817F7F7F7F7F7F7F7F7C7C7C7C7C7C797676767676
+76747474747472726C6C6C6C6A6A6A6A6A676767616161615F5F5F5C575757554F4F4F4F4F4F4F4F
+4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF767C7F7F81858789898C8E92929292929494999A9A9A9A9C9C9E9E768FA6AEAEAEB9
+B6B1AEAEAEABA9A6A6A6A49E94895FAEAEB1B1B3B7B9B9B9B9B9B9B9B9B9B9BBB9B9B9B9B9B9B9B9
+B7B7B6B3B1B1AEAEAEAEAEABA9A6A6A4A4A39E9E9C9C9A9494928E89847F7C7F878F949A9EA4A9AE
+B3B9B7B6B6B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEABA9A9A6A49E9C969289
+857F76746C6A615D57514F575F676C74797C818789898C8E8F929292929292929292929292929292
+92928E8987847F7C746E675F554F4F4F555757554F4F4F55575F61666A6C7172747476767C7C7F7C
+7C7C7C7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F
+7F818184818181818484858587878787878787878787878787898989878787878787878987878787
+87878785858585858585858585858585858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858787878787878787878787878787878787878787
+858787878785848481817F8181848485858585858587878989898989898C8E8F929292929292928F
+8E8C898989898989898C8E8E8E8E8E8E8E8F9292929494949494949499999A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A99949494949494949494949494949292929292928F8E89898787858585878789
+898F9292949494999A9A9C9C9C9E9E9E9E9E9E9E9C9C9C9A9A999494928F8C877481898E92929494
+94949494929292929492929292929292929292929292928F898989878784817F7F7F7F7F878C9292
+9494949A9C9C9E9E9EA4A4A4A6A6A6A9A9ABABAEAEAEAEB1B1B1B3B3B3B3B3B6B9B9B9B9B9B9B9BB
+BBBBBBBBBBBEC0C1C1C1C1C1C1C1C1C1C0BEBEBBB9B9B9B7B3B3B1B1B1B1AEAEAEAEAEABA9A9A9A6
+A6A6A6A6A6A4A4A39E9E9E9E9E9C9C9A9A9A9A9994949494949492929292928E8E8E8E8E8E8E8E8E
+8C898989898989898989898787858585858585817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7676767676
+76747474747472726E6C6C6C6C6A6A6A6A676767666161615F5F5F5D59575755544F4F4F4F4F4F4F
+4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF74797C7F8185858789898E8F92929292929494999A9A9A9C9C9E9E768EA6B9B9BEBEC1
+BEB9B7B6B3B1B1AEAEACA6A49E9C945FAEB1B1B3B6B9B9B9B7B7B7B9B9B9B9B9B9B9B9B9B9B7B7B6
+B6B6B3B1B1AEAEABABA9A9A9A6A6A4A39E9E9E9C9C9A9994928F8987817C7C878C92999CA4A6AEB1
+B7B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEABA9A6A49E9C9A948E
+877F7C76726C675F59554F4F5C616A71747C7F848789898E8F929292929292929292929292929292
+92928E898785817F79746C61594F4F4F54555757544F4F4F55575F5F646A6C6E72747474767C7C7C
+7C7C7C7C7C7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F
+81818485848484848485858787878787878787898989878789898989898989878787898989898987
+87878787878585858585858585858585858585858585858585858585858585858585858585858585
+85858585858585858585858585858587878787878787898989898987878787878989898989898787
+878787898987878787858484848585858585858587878787898989898C8E8F929292929292928F8E
+8C898989898989898C8E8E8E8E8E8F8F8F8F92929294949494949494999A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9994949494949494949494949292929292928F8E8C89898787858585878789
+8E9292949494999A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9C9A9A999494928E89817F89898E92929294
+949292928F8E8E8F8E898989898989898989898989898987858481817F7F7C7C7C7C7C87898F9292
+9494999C9C9E9E9EA3A4A4A6A6A6A6A9A9ABAEAEAEAEAEB1B1B1B3B3B3B3B3B6B9B9B9B9B9B9B9BB
+BBBBBBBBBBBEC0C1C1C1C1C1C1C1C0C0BEBEBBBBB9B9B9B7B3B1B1B1B1B1AEAEAEAEABABA9A9A9A6
+A6A6A6A6A4A4A4A39E9E9E9E9E9C9C9A9A9A9A9A96949494949492929292928F8E8E8E8E8E8E8E8E
+8C89898989898989898989878785858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7676767676
+7676747474747472716C6C6C6C6A6A6A6A67676766616161615F5F5F5C57575755514F4F4F4F4F4F
+4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFF767C7F7F84858787898C8F92929292929494949A9A9A9A9C9C9E7689A3B9C1C6C6C6C6
+C1BEBBB9B9B9B7B7B7B4AEA6A49E9A8959B1B1B3B6B9B9B7B7B6B6B7B9B9B9B9B9B9B7B7B6B6B6B3
+B3B3B1B1AEAEABA9A9A6A6A6A6A4A39E9E9C9C9C9A9994928F8987817F74848992949A9EA4A9AEB3
+B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEABABA9A6A49E9C9492
+89847C79746E6A615F57544F555F666A72767C818789898C8E8F9292929292929292929292929292
+92928F89898787817C76716A5F554F4F4F55575757554F515155575F5F616A6A6C72747474767C7C
+7C7C7C7C7C7C7C7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F81
+81848585858585848585858787878989878789898989898989898989898989898989898989898989
+89878787878787878585858585858585858585858585858585858585858585858585858585858585
+8585858585858585858585858585878787878787878989898989898989898989898C8E8C8C898989
+8989898989898989898787878787878787858587878787898989898C8E8F8F929292929292928F8E
+8989898989898C8C8E8E8F8F8F8F92929292929294949494949494999A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A99949494949494949494949492929292928F8F8F8C898987878585858789898C
+8F9292949494999A9A9C9C9C9E9E9E9E9E9E9E9C9C9C9A9A999494928F89847C8789898E8F929292
+928F8E8C8989898987878584818181848485878787847F7F7F7C7C7C7C797676767C85898E929294
+94969A9C9E9E9EA1A4A4A4A6A6A6A9A9A9ABAEAEAEAEAEB1B1B1B3B3B3B3B3B6B7B9B9B9B9B9B9BB
+BBBBBBBBBBBBC0C1C1C1C1C1C1C0C0BBBBBBBBB9B9B9B9B6B3B1B1B1B1AEAEAEAEAEABABA9A9A9A6
+A6A6A6A6A4A4A4A39E9E9E9E9E9C9C9A9A9A9A9A99949494949492929292928F8E8E8E8E8E8E8E8E
+8C89898989898989898989878785858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676
+7676747474747472726C6C6C6C6C6A6A6A6A676767616161615F5F5F5D5757575554514F4F4F4F4F
+4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFF747C7C7F8185858789898E9292929292949494999A9A9A9A9C9C76899EB6C1C6C8CCCCCC
+C6C4C1C1BFBEBEBEBCBCB4ABA6A49C947B51B1B1B6B7B7B6B6B6B3B6B6B7B9B9B7B6B6B6B3B3B3B1
+B1B1B1AEAEABA9A6A6A6A6A6A4A49E9E9C9C9C9A9A9494928E89857F7C7F878E92999CA3A6ABB1B3
+B9B7B7B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEABABA9A6A49E9C9A92
+8C877F7C76726C67615D554F4F575F676C747C7F848789898E8E8F92929292929292929292929292
+92928F8C898987877F7B746C665C514F4F5155575757554F545455575D5F61676A6C72727474767C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F81
+81848585858585858585858587878989898989898989898989898989898989898989898989898989
+89898989878787878785858585858585858585858585858585858585858585858585858585858585
+8585858585858585878787878787878789898989878989898989898989898989898E8E8E8E8E8E8E
+8C8C8C898989898989898989898787878787878787878989898989898E8F929292929292928F8E8C
+8C8989898C8E8E8E8E8F9292929292929292929294949494949494999A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A999994949494949494949494949292928F8F8E8E8E898989878785858789898E8F
+9292949494999A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9C9A9A999492928C877F8489898C8E8F92928F
+8E8C8987878784817F7F7F7C7C79797979797C7C797676767676767674747474618189898F929494
+94999C9C9E9E9EA3A4A4A6A6A6A6A9A9ABABAEAEAEAEAEAEB1B1B3B3B3B3B3B6B7B9B9B9B9B9B9BB
+BBBBBBBBBBBBBEC0C0C0C0C0C0BEBBBBBBBBB9B9B9B9B9B6B3B1B1B1B1AEAEAEAEAEABA9A9A9A6A6
+A6A6A6A6A4A4A4A39E9E9E9E9E9C9C9C9A9A9A9A99949494949492929292928F8E8E8E8E8E8E8E8E
+8E89898989898989898989878785858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676
+767674747474747472716C6C6C6C6A6A6A6A676767666161615F5F5F5D5957575554514F4F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF74767C7F7F85858789898E8E9292929294949494999A9A9A9A9C7C899CAEBECCCCCFCFCFCF
+CCC6C6C6C6C4C4C6C4C1B9B1ABA69E9A926CB1B1B3B6B6B6B6B3B3B3B6B6B7B6B6B3B3B3B1B1B1B1
+B1B1AEAEABA9A6A6A6A4A4A4A49E9E9C9C9A9A9A9994928E89877F7C7C878C92949A9EA4A9AEB1B7
+B9B7B7B7B7B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEABABA9A6A39E9A94
+8F89847C76746C6A615F59554F5457616A72767C81878789898E8E8F8F9292929292929292929292
+9292928E8C898987817C76726A61554F4F4F5557575757554F555557575C5F61676A6C7272747476
+797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+81848585858585858585858587878789898989898989898989898989898989898989898989898989
+89898987878789878787858585858585858585858585858585858585858585858585858585858585
+8585858585858587878787878787878989898989898989898989898C8C8C8C898C8E8F8F8F8F8F8F
+8E8E8E8E8C8C8C8C8E8E8C89898989898787878787898989898989898C8E8F8F8F8F92928F8C898C
+8C8C8C8E8E8E8E8E8F9292929292929292929294949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9994949494949494929292929292928F8E8E8E8E8C8989878785858789898E8F92
+9294949999999A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9A9A999494928C877F7F8789898C8E8E8F8E8C
+89898784817F7F7C7976767674747472727272727272727474747472727272727F87898E92949496
+9A9A9C9E9E9EA1A4A4A4A6A6A6A6A9A9ABAEAEAEAEAEAEAEB1B1B1B3B3B3B3B6B7B9B9B9B9B9B9BB
+BBBBBBBBBBBBBBBEBEBEBEBEBEBBBBBBBBB9B9B9B9B9B7B3B1B1B1B1B1AEAEAEAEABABA9A9A9A6A6
+A6A6A6A4A4A4A4A49E9E9E9E9E9C9C9C9A9A9A9A99949494949492929292928F8F8E8E8E8E8E8E8E
+8E89898989898989898989878787858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676
+767674747474747472716C6C6C6C6A6A6A6A67676766616161615F5F5F5C57575755544F4F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF767C7F7F84858787898C8E8F9292929294949494999A9A9A9C61929EABB7C4D1D1D3D4D4D3
+CFCCCCCCCCCCCCCCCCC8BEB6AEABA49C948E6672716A6661B3B3B3B3B3B3B6B3B3B1B1B1B1B1B1B1
+AEAEAEABA9A6A6A4A4A4A4A39E9E9C9C9C9A999994928F8987817F7484898F94999CA3A6ABAEB1B9
+B9B6B6B6B7B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEABABA6A49E9C99
+9289877F7C74726A67615F57514F555C616A72767F84878789898E8E8F9292929292929292929292
+929292928E8C8989877F7C76716A5D554F4F4F55575757575554555557595D5F61676A6C72727474
+76767C7C7C7C7C7C7C7C7F7F7F7F7F7C7C7F7F7F7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+81818585858585858585858587878789898989898989898989898989898989898989898989898989
+89898787878787878787858585858585858585858585858585858585858585858585858585858585
+8585858585858787878789898989898989898989898989898989898C8E8E8E8E8E8F8F9292929292
+8F8F8F8F8E8E8E8F8F928F8F8E8C89898989878789898989898989898C8E8E8E8C8C8E8C8C898989
+8C8E8E8E8E8E8E8E8F9292929292929292929494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9996949494949494949292929292928F8F8E8E8E8E8989878785878789898F929294
+949499999A9A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9C9A999494928C897F7C84898989898C8E8E8989
+8987847F7F7C7C7676767474747272716C6C6C6C6C717171716E6C6C6C6C6C7F84898C8F9294999A
+9A9C9C9E9E9EA3A4A4A4A6A6A6A9A9A9ABAEAEAEAEAEAEAEB1B1B1B3B3B3B3B6B7B9B9B9B9B9B9BB
+BBBBBBBBB9BBBBBBBBBBBBBBBBBBB9BBB9B9B9B9B9B7B6B3B1B1B1B1AEAEAEAEAEABABABA9A9A6A6
+A6A6A6A4A4A4A4A4A19E9E9E9E9C9C9C9A9A9A9A9994949494949292929292928F8E8E8E8E8E8E8E
+8E89898989898989898989898787858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C76767676
+767674747474747472726E6C6C6C6C6A6A6A6A676767616161615F5F5F5D5757575555544F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF767C7C7F8185858789898E8E9292929294949494969A9A9A9A6194A4ABB4BECCD4D4D9D9D9D9
+D4D1D1D3D1D1D4D4D2CCC4B9B6AEA69E9A92816176767676726A675CB1B3B3B1B1B1B1B1B1B1AEAE
+AEAEABA9A6A6A6A4A3A19E9E9E9E9C9C9A9A999494928E89857F7C7F898E92949A9EA4A9AEB1B3B9
+B7B6B6B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEABABA9A6A19C9A
+948F89817C76746C6A645F59554F4F555F676C747C7F85878789898C8E8F92929292929292929292
+92929292928E8C8989857F7C746C61574F4F4F5455575759575555555557595D5F61676A6C727474
+7476797C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F818485858585858585858585878787878789898989898989898989898989898989898989898989
+89878787878787878787858585858585858585858585858585858585858585858585858585858585
+85858585858787878789898989898989898989898989898989898C8E8E8E8E8E8E8E8F9292929292
+9292928F8F8F8F8F92929292928F8E8C898989898989898989898989898C89898989898989898989
+8E8E8E8E8E8E8E8F9292929292929292929294949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A999A9A9A9994949494949494929292929292928F8E8E8E8E8C898987878787898C9292929494
+94999A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9A999494928E898179818787898989898C898989
+87847F7F7C7C7C7C797676767474747272716C6C6C6C6C6C6C6C6C6C6C6C7C8589898E9294949A9C
+9C9C9E9E9EA1A4A4A4A6A6A6A6A9A9ABAEAEAEAEAEAEAEAEB1B1B1B3B3B3B3B3B6B9B9B9B9B9B9B9
+BBBBBBBBB9B9BBB9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B1B1B1B1AEAEAEAEAEABABABA9A9A6A6
+A6A6A6A4A4A4A4A4A19E9E9E9E9E9C9C9A9A9A9A9994949494949292929292928F8F8E8E8E8E8E8E
+8E8C89898989898989898989878785858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C79767676
+76767474747474747472716C6C6C6C6A6A6A6A676767666161615F5F5F5D5957575555554F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF74767C7F7F84858789898E8E8E9292929294949494999A9A9A619CA4ABB1BCC8D4D9D9DCDFDCD9
+D9D7D9D9D9D9D9D9D9D1C8BEB9B1ABA49C948F79577F7C7674726A6A5F57B1B1B1B1B1AEAEAEAEAE
+AEABA9A6A6A6A4A49E9E9E9E9C9C9C9C9A999494928E89877F7C7C87898F94999C9EA6ABAEB1B6B9
+B7B6B3B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEABA9A6A49E9C
+999289877F7974726A67615F57544F5157616A72747C7F84878789898E8F92929292929292929292
+9292929292928E8C8989857F79746A5F554F4F4F5557575C595755575555575C5F5F61676A6C7274
+7476767C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F818185858585858585858585858787878787878789898989898989898989898989878787898989
+87878787858585878785858585858585858585858585858585858585858585858585858585858585
+858585858787878789898989898989898989898989898989898C8E8E8E8E8E8E8E8E8F8F8F929292
+9292929292929292929292929292928E8C898989898989898989898989898989878989898989898C
+8E8E8E8E8E8E8F929292929292929292929494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A999999999994949494949494949292929292928F8E8E8E8C8C898987878587898C929294949499
+9A9A9A9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9A9494928F8984797F8587878989898989898987
+84818181817F7F7F7C7C7C7C7C79767674747272727272716C6E717171798589898E929294999A9C
+9C9C9E9E9EA3A4A4A4A6A6A6A9A9A9ABAEAEAEAEAEAEAEAEB1B1B1B3B3B3B3B3B6B9B9B9B9B9B9B9
+BBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B9B6B6B3B3B1B1B1B1AEAEAEAEABABABABA9A6A6A6
+A6A6A6A4A4A4A4A4A19E9E9E9E9E9C9C9A9A9A9A999494949494929292929292928F8E8E8E8E8E8E
+8E8C89898989898989898989878785858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C79767676
+76767474747474747472726C6C6C6C6A6A6A6A67676766616161615F5F5F5C57575755554F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF767C7F7F81858787898C8E8E8F9292929294949494999A9A9A92A4ABB4B9C1CED9DFE1E1E1E1DF
+DFDCDFDFDFDFE1E1E1D9CFC6BBB6AEA69E9A928F71547C797674716C6C6159B1B1AEAEAEAEAEAEAB
+ABA9A9A6A6A4A4A19E9E9C9C9C9C9C9A9A9994928F8987847C7684898E92949A9CA4A9AEB1B3B9B9
+B6B6B3B3B3B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEAEA9A6A49E9C
+9A948F89817C76726C6A665F5C554F4F545D616A72767C7F81878789898F92929292929292929292
+929292929292928F8E8989857F76726657514F4F515557595C5C5757575757575D5F5F61676A6C72
+747676797C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F8184858585858585858585858585858787878787878989898989878787878987878787878787
+87878785858585858585858585858585858585858585858585858585858585858585858585858585
+8585858787878789898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8F8F8F92
+9292929292929292929292929292928F8E8C8C898989898989898989878787878787898989898C8E
+8E8E8E8E8E8E8F92929292929292949494949494949494949499999A9A9A9A9A9A9A9A9A9A9A9A9A
+999994949494949494949494949292929292928F8F8E898989898989878587898C9294949494999A
+9A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9A9994928F89877C7C818787878989898989898987
+858587878787848181817F7F7F7C7C79767676767474727274747474748587898E929294949A9C9C
+9C9E9E9EA1A4A4A4A6A6A6A6A9A9ABABAEAEAEAEAEAEAEAEB1B1B1B3B3B3B3B3B6B7B9B9B9B9B9B9
+BBBBBBBBB9B9B9B9B7B7B7B9B9B7B7B9B9B7B6B7B6B6B3B1B1B1B1B1AEAEAEAEABABABABA9A9A6A6
+A6A6A6A4A4A4A4A4A19E9E9E9E9E9C9C9A9A9A9A999494949494929292929292928F8E8E8E8E8E8E
+8E8C8989898989898989898987878585858585858481817F7F7F7F7F7F7F7F7C7C7C7C7C7C797676
+76767674747474747472726C6C6C6C6C6A6A6A6A676767646161615F5F5F5D5757575555544F4F4F
+4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+767C7C7F8185858789898E8E8E8F92929294949494949A9A9A5FA1ABB4B9C1C9D7E1E4E6E6E6E4E4
+E1E1E1E4E6E6E6E6E4D9CFC6C0B9B1ABA49C999287667C7C76747472716C675FAEAEAEAEABABABA9
+A9A9A6A6A4A4A19E9E9C9C9C9C9C9C9A999492928E89877F747F87898F92949A9EA6A9AEB1B3B9B7
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEAEABA9A6A49E
+9C999289877F7974716A67615F57544F4F575F676C72767C7F818787898C8F929292929292929292
+92929292929292928F8E8989847C766C61554F4F4F5557575C5D595757575759595D5F5F61676A6C
+7274747676797C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F8184858585858585858585858585858585878787878787878987878787878787878787878787
+87878585858585858585858585858585858585858585858585858585858585858585858585858585
+85858787878789898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92
+929292929292929292929292929292928F8E8E8E8C8C898989898989878787878787878989898C8E
+8E8E8E8E8E8E8F92929292929494949494949494949494949494999999999999999999999A9A9A9A
+999494949494949494949494929292929292928F8E8C898989898787878789899294949499999A9C
+9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9A94949289877C7C7F858787898989898989898987
+8789898989878787878785847F7F7F7C7C7C7C7C76767676767676768187898E92929494999A9C9C
+9C9E9E9EA3A4A4A4A6A6A6A6A9A9ABAEAEAEAEAEAEAEAEAEAEB1B1B3B3B3B3B3B6B7B7B7B9B9B9B9
+BBBBBBB9B9B9B9B7B6B6B6B6B6B6B6B7B7B6B6B6B6B3B3B1B1B1B1AEAEAEAEAEABABABABA9A9A6A6
+A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9A9A9A9A9A949494949494929292929292928F8E8E8E8E8E
+8E8C8989898989898989898987878585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C797676
+76767674747474747472726E6C6C6C6C6A6A6A6A676767666161615F5F5F5D5957575555554F4F4F
+4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76
+767C7F7F8485878789898E8E8F9292929294949494999A9A5F9CA6B1B9C1C8D1DFE7E7ECECECE7E7
+E6E6E6E7E6E6E6E6E1D9CFC6C0BBB6AEA6A19C94927C617C7674747472716C665FAEABABA9A9A9A9
+A6A6A6A4A4A39E9E9E9C9C9C9C9C9A999494928E89877F747C85898E9294999CA1A6A9AEB1B6B7B7
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEAEABA9A6A49E
+9C9A948F89817C74726C6A665F5C554F4F5159616A6C74767C7F848789898E929292929292929292
+929292929292929292928E8987817C746A5C4F4F4F4F55575C5D5D595959595C5D5D5F5F5F61676A
+6C6E72747476797C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F81848485858585858585858585858585858585878787878787878787878787878785858587
+87858585858585858585858585858585858585858585858585858585858585858585858585858585
+85878787878989898989898989898989898989898989898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8F
+929292929292929292929292929292928F8E8E8E8E8C89898989898987878787878789898989898C
+8E8E8E8E8E8E8F8F9292929294949494949494949494949494949494949494949496969999999999
+9694949494949494949494949292928F8F8F8F8E8C898989878787858789898F92949999999A9C9C
+9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9A9994928C877F747C84878789898989898989898989
+89898E8C8C89898989878784817F7F7F7F7F7F7C7C7C7C7C7C7C7C7F87898E92929494999A9C9C9C
+9E9E9EA1A4A4A4A6A6A6A6A9A9A9ABAEAEAEAEAEAEAEAEAEAEB1B1B1B3B3B3B3B6B6B6B7B7B7B9B9
+B9BBB9B9B9B9B7B6B3B3B3B3B3B3B3B6B6B6B6B6B6B3B3B1B1B1B1AEAEAEAEAEABABABABA9A9A6A6
+A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9A9A9A9A9A969494949494929292929292928F8E8E8E8E8E
+8E8C8989898989898989898987878585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7676
+76767674747474747474726E6C6C6C6C6A6A6A6A67676767616161615F5F5F5C5757575555514F4F
+4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7476
+7C7F7F8185858789898C8E8E929292929294949494999A5F9AA4AEB9C1C8D1D9E4ECECEEEEECECE7
+E7E7E7E7E6E6E6E6E1D9CFC6C0BBB9B1ABA69E9A9492765E767674747272716A615CA9A9A9A6A6A6
+A6A6A4A4A39E9E9E9C9C9C9A9A9A999494928F8987817C798187898F92949A9CA4A6ABAEB1B6B7B6
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEA9A6A6A4
+9E9C969289877F7674716A67615F57554F4F545F616A7174797C7F8587898C8F9292929292929292
+92929292929292929492928E89877F797266554F4F4F5457595D5F5D5C5C5C5C5D5F5F5F5F5F6166
+6A6C6C71727476797C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F81818184848585858585858585858585858585858585878787878585858587878585858585
+85858585858585858585858585858585858585858585858585858585858585858585858585858585
+8587878789898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8F
+929292929292929292929292929292928F8E8E8E8E8E8C898989898989878787878989898989898C
+8E8E8E8E8E8E8E8F9292929294949494949494949494949494949494949494949494949494949494
+94949494949494949494949292928F8E8E8E8E8C898989878785878789898F9294999A9A9A9C9C9C
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A94928E8984727C818787878989898989898989898C
+8E8F8F8F8E8E8C89898787848484848484817F7F7F7F7F7F81817C87898E92929494999A9C9C9C9E
+9E9E9EA3A4A4A4A6A6A6A6A9A9ABABAEAEAEAEAEAEAEAEAEAEB1B1B1B3B3B3B3B6B6B6B6B6B6B7B9
+B9B9B9B9B7B6B6B3B1B1B1B1B1B3B3B3B3B3B3B6B6B3B1B1B1B1B1AEAEAEAEABABABABABA9A9A6A6
+A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9C9A9A9A9A999494949494929292929292928F8F8E8E8E8E
+8E8E898989898989898989898787858585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7976
+7676767474747474747472716C6C6C6C6C6A6A6A6A676767646161615F5F5F5D5957575555544F4F
+4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767C
+7C7F7F8585878989898E8E8F929292929294949494999A94A1ABB4BEC8CED9E4ECF2F2F1EEECECEC
+E7E7E7E7E7E6E6E6E1D9CFC4C0BBB9B6AEA9A49C9A948E74597674747472726E676157A6A6A6A6A6
+A6A4A4A39E9E9E9E9C9C9A9A99949494928F8C87847F747F84898C9294999C9EA4A6ABAEB1B6B6B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEA9A9A6A4
+A39E9A948F87817C74726C6A66615F57514F4F555F676C72747C7F818789898E9292929292929292
+92929292929292929494928F8989877F766C5F514F4F4F55575C5F5F5F5D5D5D5F5F615F5F616161
+666A6A6C6E727474767C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F81818485858585858585858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858585858585858585858585
+858787878989898989898989898989898989898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E
+8F8F92929292929292929292929292928F8F8E8E8E8E8C8989898989898989898989898989898C8E
+8E8E8E8E8E8E8F8F9292929294949494949494949494949494949494949494949494949494949494
+949494949494949494949292928F8F8E8C8989898989878785878789898E92949A9A9A9A9C9C9C9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C99928F898476797F858787898989898989898C8E8F92
+9292928F8F8E8C8989878787878787878784818184878787897281898C92929494999A9C9C9C9E9E
+9EA1A3A4A4A4A6A6A6A6A9A9A9ABABABAEAEAEAEAEAEAEAEAEB1B1B1B1B3B3B3B3B3B6B6B6B6B6B9
+B9B9B7B6B3B3B3B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B1B1B1B1AEAEAEAEAEABABABABABA9A9A6A6
+A6A6A6A6A4A4A4A4A39E9E9E9E9E9C9C9C9A9A9A9A99949494949492929292929292928F8E8E8E8E
+8E8E898989898989898989898787878585858585858584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7976
+7676767474747474747472716C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5957575555554F4F
+4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76767C
+7F7F848587878989898E8F929292929294949494969A599CA6B4BCC4CED7E1ECF2F2F2F2F1EEECEC
+ECECECECE7E6E6E6DFD7CCC6C0BBB9B6B1AEA6A19C9A948C74747474747272726C6A615CA6A6A4A4
+A4A4A39E9E9E9E9E9C9C9A94949492928F8C89877F767C8187898F92949A9C9EA4A9AEAEB1B3B6B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEABA9A6A6
+A49E9C949289877F7674716C6A615F59554F4F515761676C72767C7F8187898C8F92929292929292
+9292929292929292949494928E8989847C746A574F4F4F54575C5F5F5F5F5F5F5F5F6161615F6161
+61666A6C6C71727474767C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F818185858585858585858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858585858585858585858585
+858587878789898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8F8F8F8F9292929292929292928F8F8E8E8E8E8E8E8C8C898989898989898989898989898E8E
+8E8E8E8E8E8E8F929292929292949494949494949494949494949494949494949494949494949494
+949494949494949494949292928F8E8C8989898989878787878789898E9294999A9C9C9C9C9C9C9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A949289877C797F858787898989898C8E8E8F92929292
+929292928F8E8E8989898787898989878787878789898E928F7F87898F929494999A9C9C9C9E9EA1
+A3A4A4A4A4A4A6A6A6A6A9A9ABABABABAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B3B3B3B3B3B6B6B6B6
+B9B6B6B3B3B3B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B1B1B1B1AEAEAEAEAEABABABABABABA9A6A6
+A6A6A6A6A4A4A4A4A49E9E9E9E9E9C9C9C9A9A9A9A99949494949494929292929292928F8E8E8E8E
+8E8E89898989898989898989898787858585858585858481817F7F7F7F7F7F7F7C7C7C7C7C7C7C76
+7676767674747474747472716C6C6C6C6C6A6A6A6A6A676767616161615F5F5F5C5757575555514F
+4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7F
+7F818585878989898C8E92929292929494949494995C9AA4AEB7C4CCD4DFE6ECF2F2F2F2F2F2EEEC
+ECECECECE7E6E6E4DFD4CCC6C0BBB9B6B3B1ABA49E9C9992896C747474747272726C6A615FA4A4A4
+A39E9E9E9E9E9C9C9C9A96949292928F8C89878174797F87898E9294969A9EA3A6A9AEB1B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEABA9A9A6
+A6A49E9A948F87817C74726C6A67615F57544F4F5559616A6E74767C7F8587898E8F929292929292
+9292929292929292929494928F8C89877F767161554F4F4F55595D5F5F5F5F5F5F5F616166616161
+6666666A6C6C72727474767B7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F8184858585858585858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858585858585858585858585
+85858787878989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8F8F8F8F9292929292928F8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898C8E
+8E8E8E8E8E8F92929292929292949494949494949494949494949494949494949494949494949494
+9494949494949494949292928F8E8C8989898787878787858789898E9294949A9C9C9C9C9C9C9E9E
+9EA1A1A1A1A1A1A1A1A19E9E9E9E9C9C9C99928C877F797F848789898C8E8E8F9292929292929294
+94929292928F8E8E89898989898989898787898C8F9292927C87898F9294949A9A9C9C9E9E9EA3A4
+A4A4A4A4A4A4A6A6A6A6A9A9ABABABABAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B3B3B3B3B3B3B6
+B6B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B1B1B1B1AEAEAEAEABABABABABABABA9A6A6
+A6A6A6A6A4A4A4A4A4A19E9E9E9E9C9C9C9A9A9A9A9994949494949492929292929292928F8E8E8E
+8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C79
+7676767674747474747472726C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5D5957575555544F
+4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7C7F
+7F848587898989898E8F9292929292949494949499949EA9B4BEC8D3DCE1E7ECF2F4F2F2F2F2F1EC
+ECECECECE7E6E6E1DCD4CCC6C1BBB9B6B3B1AEA9A49E9C94928961747474747272726C6A665FA39E
+9E9E9E9E9C9C9C9C9A999492928F8E8989877F7C767F85898C8F9294999C9EA4A6A9AEB1B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEA9A9A6
+A6A49E9C949289877F7674726C6A61615D57544F4F555D646A7274797F8187898C8E8F9292929292
+929292929292929292949494928E8989857C746A574F4F4F54575C5F5F5F5F5F5F5F616166676661
+666767676A6C717272747476797C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F8184848585858585858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858585858585858585858585
+858787878789898989898989898989898989898989898989898989898989898C8C8C8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F8F8F8F92928F8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898C8E
+8E8E8E8E8E8F92929292929294949494949494949494949494949494949494949494949494949494
+94929292929292929292928F8F8E89898987878787858787898C8F929294999A9C9C9C9C9C9C9E9E
+A1A4A4A3A3A3A3A3A3A39E9E9E9C9C9C9A948F8981797F8587898E8F8F9292929292929294949494
+94929292928F8F8E8C8C8989898C8C8989898E8F9292926C84898E9294949A9A9C9C9E9EA1A3A4A4
+A4A6A6A6A6A6A6A6A6A6A9A9A9ABABABAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B3B3B3B3B3
+B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3B1B1B1B1AEAEAEAEAEABABABABABABABA9A6A6
+A6A6A6A6A4A4A4A4A4A19E9E9E9E9E9C9C9A9A9A9A9994949494949494929292929292928F8E8E8E
+8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7F7C7C7C7C7C7C7C79
+7676767676747474747472726C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5C57575755554F
+4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76797C7F7F
+818587878989898C8E9292929292949494949494929CA4AEBCC6CFD9DFE1E7EEF2F4F4F2F2F2F2EE
+EEECECECE7E6E6E1D9D4CCC6C1BBB9B7B3B1B1AEA6A49E9C948E7F57747474747474716C6A66619E
+9E9C9C9C9C9C9C9A999494928F8C8987857F7C767C8187898E8F92949A9EA4A6A9ABAEB1B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEABA9A9
+A6A6A49E9A948F89817C74726C6A6761615C55514F4F575F666C72767C7F8487898E8E8F92929292
+929292929292929292929494928F8C89877F766C61554F4F51555C5D5F5F5F615F5F6161676A6A67
+67676A6A6A6A6C72727474767676797C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F81818184848585858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858585858585858587858585
+87878787898989898989898989898989898989898989898989898989898989898989898C8C8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898C
+8E8E8E8E8E8E8F929292929494949494949494949494949494949494949494949494949494949494
+92929292929292929292928F8E8C898987878785878787898C8F929294949A9C9C9C9C9E9E9E9EA1
+A4A4A4A4A4A4A4A4A4A39E9E9C9C9C9A94928984768187898C8F9292929294949494949494949494
+9494929292928F8F8E8C8C8C8E8E8E8C8E8E8F929294947F878C8F9294999A9C9C9E9EA3A4A4A4A4
+A6A6A6A6A6A6A6A6A6A6A9A9A9A9ABABABAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B3B3
+B1B1B1AEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEABABABABABABABA9A9A6
+A6A6A6A6A4A4A4A4A4A19E9E9E9E9E9C9C9A9A9A9A9994949494949494929292929292928F8F8E8E
+8E8E8C89898989898989898989878787858585858585858581817F7F7F7F7F7F7C7C7C7C7C7C7C7C
+7976767676747474747472726E6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5C575757555551
+4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76797C7F7F7F
+8485878989898C8E8F929292929494949494948E999EA9B6C4CFD4D9DFE4E9F1F4F4F4F2F4F4F2F2
+F1EEEEECECE6E6E1D9D4C8C6C1BBB9B7B6B3B1B1ABA6A49E9A928971747472747474726C6C6A6761
+579C9C9C9C9C9A999494928F8C8987847F7C767C7F87898C8E8E92969C9EA4A9A9AEB1B1B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAEABA9
+A9A6A69E9C969289877F7674726C6A66615F5755514F51575F676C74767C7F8587898E8E8F929292
+92929292929292929292949292928E8989847C726A59514F4F55575D5F5F5F6161616164676A6A6A
+6A6A6A6A6A6A6C717272747476767676797C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F81818485858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858585858585858787878787
+878787898989898989898989898989898989898989898989898989898989898989898989898E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8E8C8C8C8C8C89898989898989
+8C8E8E8E8E8E8F8F9292929494949494949494949494949494949494949494929292949494949492
+929292929292928F8F8F8F8E8C898989878785878789898E8F92929494999A9C9C9E9E9E9E9EA1A4
+A4A4A4A4A4A4A4A4A49E9E9C9C9C9A99928C87768187898E92929494949494949694949494949494
+949492929292928F8F8E8E8E8E8E8E8E8F8F929294947C87898F9294999A9C9E9EA3A4A4A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9ABABAEAEAEAEAEAEAEAEAEB1B1B1B1B1AEB1B1B1B1B1B1B1
+B1B1AEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEABABABABABABABABA9A9A6
+A6A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9A9A9A9A999494949494949492929292929292928F8E8E
+8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C7C
+7976767676747474747474726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5D595757555554
+4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7C7F7F81
+8587898989898E8E8F92929294949494949494949CA6AEBCC6CFD4D9E1E6ECF2F4F4F4F4F4F4F4F2
+F2F1F1ECECE7E6DFD9D3C9C6C1BBB9B9B6B3B1B1AEABA6A49C948F875F727272747474726C6C6A6A
+615F9C9C9C9A999494928F8C8987847F7C74767C848789898C8F949A9CA4A6A9ABAEB1B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAEAEAB
+A9A6A6A49E9A948F89817C74726C6A6764615F57554F4F555C616A7274797F818789898E8F8F9292
+92928F92929292929292929292928F8C89877F746C5F554F4F54555C5F5F5F5F61616164676A6A6A
+6A6A6A6A6A6A6C717272747476767676767C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F81817F7F7F818485858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858585858585858787878787878787878787
+878789898989898989898989898989898989898989898989898989898989898989898989898C8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292928F8F8F8F8F8F8F8F8E8E8E8E8E8C898989898989
+8C8E8E8E8E8E8F929292929494949494949494949494949494949494949494929292929292929292
+92928F8F8F8F8F8E8E8E8E8C898987878785878789898E9292929494999A9C9C9C9E9E9E9EA1A4A4
+A4A4A4A4A4A4A4A4A39E9C9C9C9A99948F897481878C8F929494949499999A9A9A99969494949494
+94949492929292928F8E8E8E8E8E8E8E92929294947984898C9294949A9C9E9EA4A4A4A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9ABABABAEAEAEAEAEAEAEAEB1B1B1AEAEAEAEB1B1B1B1B1
+B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1AEAEAEAEABABABABABABABA9A9A9A6
+A6A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9A9A9A9A9A9694949494949494929292929292928F8E8E
+8E8E8E8C89898989898989898989878787858585858585858481817F7F7F7F7F7C7C7C7C7C7C7C7C
+7C7676767676747474747472716C6C6C6C6C6C6A6A6A6A67676766616161615F5F5F5C5757575555
+4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7C7F7F7F84
+87878989898E8E8E929292929494949494948E9AA4ABB7C1CCD1D9DEE1E6ECF2F4F4F4F4F4F4F4F4
+F2F2F2ECECE7E4DFD9D1C9C6C1BBB9B9B7B3B1B1B1AEABA6A19C948976577272727474726E716C6C
+6C6661579A999494928F8C8987847F7F76767C7F878789898C92949C9EA4A9ABAEAEB1B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEAEAB
+A9A9A6A69E9C94928C877F7674726C6766615F5C57554F4F555D616A72767C7F848789898E8F8F8F
+928F8F9292929292929292929292928E89878179726759514F4F55575D5F5F5F6161616166676A6A
+6A6C6C6C6C6C6C71727272747476767679797C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F81818184818181818484858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858585858585858787878785878787878787878787898989
+89898989898989898989898989898989898989898989898989898989898989898989898989898E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292928F8E8E8E8E8E8C898989898989
+8C8E8E8E8E8F92929292929292929294949494949494949494949494949492929292929292929292
+928F8F8E8E8C8C8C8C8C89898987878785878787898E92929494949A9A9C9C9C9C9E9E9EA1A4A4A4
+A6A6A6A6A4A4A4A49E9E9C9C9A99949289817F878C92929499999A9A9A9A9A9A9A9A999494949494
+949492929292928F8E8E8E8E8E8E8E8F92929494948187898E9294999C9C9EA4A4A6A6A6A9A9A6A6
+A9A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9ABABABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1AEAEAEAEAEAEABABABABABABABA9A9A9A6
+A6A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9A9A9A9A9A969494949494949492929292929292928F8E
+8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C
+7C7976767676747474747472716C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5D5757575555
+544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72767C7C7F7F7F8185
+878989898C8E8E8F92929292949494949461949EA6B1BEC6CCD3D9DFE4E7ECF2F4F4F4F4F4F7F4F4
+F4F4F2ECECE7E1DCD4CFC9C6C1BBB9B9B7B6B1B1B1B1AEABA69E9A92876C7272727474747272726C
+716C6A6A615C94928F8C898784817F7976797F84878787898E949A9CA3A6ABAEAEB1B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEAE
+ABA9A9A6A49E9A948F89817C76746C6A6766615F5D57544F4F575F666C74767C7F8587898C8E8E8E
+8F8F8F8F929292928F9292929292928F8987847C746C61554F4F5455595F5F5F6161616166676A6A
+6C6C6C6C6C6C6C7272727474747676797C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+817F7F7F7F8181848485858484848485858585858585858585858585858585858585858585858585
+85858585858585858585858585858585858787878585878787878787878787898987878789898989
+89898989898989898989898989898989898989898989898989898989898989898989898989898C8C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292929292929292929292928F8E8E8E8E8E8C898989898C
+8E8E8E8E8E8F9292929292929292929292929292929292929292929494929292928F8F8F8F8F928F
+8E8E8C89898989898989898787858585878787898C9292929494999A9C9C9C9C9E9E9EA3A4A4A4A6
+A6A6A6A6A6A4A4A39E9C9C9A96949289877F878C929294999A9A9A9C9C9C9C9C9A9A999694949494
+949492929292928F8E8E8E8E8E8E8E92929294947F87898C8F94949A9C9EA3A4A6A6A9A9A9A9A9A9
+A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9ABABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1AEAEAEAEAEAEAEABABABABABABABABA9A9A9A6
+A6A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9C9A9A9A9A999494949494949494929292929292928F8E
+8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C7C
+7C7976767676747474747472726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5D5957575555
+554F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74797C7C7F7F7F8487
+878989898E8E8E8F9292929294949494998F9AA4AEB7C0C6CFD4D9E1E6E9ECF2F4F4F7F7F7F7F7F4
+F4F2F2ECECE7E1DCD4CFCCC6C1BBB9B9B9B6B3B1B1B1B1AEA9A49C948C7F61727272747472727272
+7274726C6A665F8F8C898784817F7976767C7F848487878992949C9EA4A9ABAEB1B1B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEAE
+AEABA9A6A49E9C96928C877F7C74726A6A6761615F5D57514F4F575F676E74767C81878789898C8C
+8E8E8E8E8F92928F8F9292929292928F8C89877F7672675C514F5155575D5F5F5F61616161676A6A
+6C6C6C6C6C6C6C7272747474747476797C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181
+81818181818184848585858585858585858585858585858585858585858585858585858785858585
+85878787878585858585858787878585878787878787878787898787878789898989898989898989
+89898989898989898989898989898989898989898989898989898989898989898989898989898989
+898C8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292929292928F8E8E8E8E8E8E8C8C8C8C8E
+8E8E8E8E8F8F92929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E
+89898989898989898989878785858585878789898F92929494999A9C9C9C9C9C9E9EA1A4A4A4A6A6
+A6A6A6A6A4A4A49E9C9C9A9494928C877C87899294949A9C9C9C9C9C9C9C9C9C9A9A999994949494
+9492929292928F8E8E8E8E8E8E8E8F92929494798487898E9294999C9C9EA4A6A6A9A9A9A9A9ABAB
+A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9ABABABAEAEAEAEAEAEAEAEABABABABABAEAEAE
+AEABABABABABABABABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A9A9A6
+A6A6A6A6A4A4A4A4A3A19E9E9E9E9E9C9C9C9A9A9A9A999494949494949494929292929292928F8E
+8E8E8E8E8C89898989898989898989878787858585858585858581817F7F7F7F7F7C7C7C7C7C7C7C
+7C7C7976767676747474747472716C6C6C6C6C6C6A6A6A6A67676766616161615F5F5F5C57575755
+55514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7C7F7F7F818587
+8989898E8E8E8F9292929294949494965F949EA6B1B9C1C8D1D9DCE1E6ECEEF2F4F4F7F7F7F7F7F4
+F4F2F2ECECE7E1DCD4CFC9C6C1BBBBB9B9B6B3B3B1B1B1B1AEA69E9A9287765C7172747474727474
+747474726C6C67615487847F7F797679767F7F7F7F85878C929A9CA1A6A9AEAEB1B1B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAE
+AEABA9A9A6A49E9A948F89847C76746C6A6766615F5F5C57514F545C616A7174797F848787898989
+8C8C8E8E8F8F928F8F8F929292928F8F8E8987817C746C5F554F4F5555595F5F5F6161616166676A
+6A6C6C6E6E71727272747474747476767C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818184
+84858484818484858585858585878785858587878787878585858585858787858585878787878787
+87878787878787878585878787878787878787878787878789898989898989898989898989898989
+89898989898989898989898989898989898989898989898989898989898989898989898989898989
+89898C8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8F929292929292929292929292929292929292929292929292928F8E8C8C8C8C8C8989
+898989898787878787878785858585878789898E92929494949A9C9C9E9E9E9E9E9EA3A4A4A6A6A6
+A6A6A6A4A4A49E9E9C9A9492928C877984898F92949A9C9C9C9C9C9C9C9C9C9C9C9A999494949494
+9492929292928F8E8E8E8E8E8E8F9292929474818789898F92949A9C9EA3A4A6A6A9A9A9A9A9A9A9
+A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9ABABABAEAEAEAEAEAEAEABA9A9A9A9ABABAB
+ABABABABABABABABABABABABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A9A6A6
+A6A6A6A4A4A4A4A4A3A19E9E9E9E9E9C9C9C9A9A9A9A99949494949494949492929292929292928E
+8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C
+7C7C7976767676747474747472726C6C6C6C6C6C6C6A6A6A6A676767646161615F5F5F5D57575755
+55544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7C7F7F7F81858587
+89898C8E8E8E929292929294949494618F9AA4AEB6BBC4CCD3D9DFE4E7ECF2F4F4F4F7F7F7F7F7F4
+F4F2F2ECECE6E1D9D4CFC9C6C1BBBBB9B9B7B6B3B3B1B1B1AEABA49C948E87715572727474747474
+7474747472726C6A64597F7F7C747C747C7C7C7C7F848992999C9EA4A6ABAEAEB1B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AE
+AEAEABA9A6A4A19C99928C877F7C74726A6A676461615F5C55514F555D616A72747C7F8487878989
+8989898C8E8F8F8F8E8F8F9292928F8F8E8987847F76716657544F4F55575C5F5F6161616166676A
+6A6C6C71717272727474747476767676797C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818484
+85878785848487878787858587878787878787878787878787878585878787878787878787878787
+87878989878787878787878787878989898989898989878989898989898989898C8C8C8989898989
+8989898989898C8C8989898989898989898989898989898989898989898989898989898989898989
+8989898E8E8E8E8E8E8E8E8E8F929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8F92929292929292929292929292929292929292928F8F8F8E8C8989898989898987
+87878787878787878787858585858789898C8E9292929494969A9C9C9E9E9E9E9EA1A4A4A4A6A6A6
+A6A6A6A4A39E9E9C9A9994928E877F7F898F92949A9C9C9C9C9C9C9C9C9C9C9C9A9A999494949494
+92929292928F8E8E8E8E8E8E8E8F929292947F8789898C9294999A9E9EA4A6A6A6A9A9A9A9A9A9A9
+A9A9A6A6A6A6A6A6A6A6A4A6A6A6A6A6A6A6A6A9A9A9A9A9ABABABAEAEAEAEABABA9A9A9A9A9A9A9
+A9A9A9A9A9ABABABABABABABABABAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABA9A9A9A6A6
+A6A6A6A4A4A4A4A3A39E9E9E9E9E9C9C9C9C9A9A9A9A99949494949494949492929292929292928F
+8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C7C
+7C7C7B76767676767474747472726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5D59575755
+55554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7C7C7F7F7F84858787
+898C8E8E8E8F92929292929494949489949EA9B1B9BEC6CFD4D9E1E6ECECF2F4F4F7F7F7F7F7F7F4
+F4F2F1ECECE6E1D9D4CFC9C6C1BBBBB9B9B9B6B6B3B3B1B1AEAEA9A39A9289856A54727272727474
+74747476747474716C67617C717B74747476767C81878F949C9EA3A4A9AEAEB1B1B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1
+AEAEAEA9A6A6A49E9A948F89857F79746C6A67666161615F59554F4F575F676C72767C8184878787
+898989898E8E8F8F8E8E8F92928F8F8F8E8C89857F7C746A5F554F4F5457575D5F5F61616161676A
+6A6C6C71727274747474767676767679797C7C7C7C7C7C7F7F7F7F7F7F81817F7F7F7F8181848485
+87878787878787878787878787878787878787878989898989878787878787878787878989898989
+89898989898989878989898989898989898989898989898989898C898989898C8E8E8E8E8C8C8C89
+8989898C8C8E8E8E8E8E8C8C89898989898989898989898989898989898989898989898989898989
+8989898C8E8E8E8E8E8E8E8F8F92929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8F8F929292929292929292929292929292929292928F8E8E8C89898989898989878787
+858481818184848484818484858789898E8F929292949494999A9C9C9E9E9E9E9EA3A4A4A4A6A6A6
+A6A6A6A49E9E9C9A9994928C877F7C878E92949A9C9C9E9E9E9C9E9E9C9C9C9C9A99949494949494
+92929292928F8E8E8E8E8E8E8F929292927C8589898C8F92949A9C9EA1A4A6A6A9A9ABA9A9A6A9A9
+A9A6A6A6A6A6A6A6A6A6A4A4A4A6A6A6A6A6A6A6A9A9A9A9A9ABABABABAEAEABA9A9A9A9A9A9A9A9
+A9A9A9A9A9ABABABABABABABABABABAEAEAEAEAEAEAEABAEAEAEAEABABABABABABABA9A9A9A9A6A6
+A6A6A6A4A4A4A4A3A19E9E9E9E9E9C9C9C9C9A9A9A9A99949494949494949492929292929292928F
+8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C
+7C7C7C7676767676747474747472716C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5C575757
+5555514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767B7C7C7F7F7F8185858789
+898E8E8E8F9292929292949494945F8E9AA4AEB6B9C1C6CFD4DCE1E7ECEEF2F4F4F7F7F9F9F9F7F4
+F4F2F1ECECE6E1D9D4CFC9C6C1BBBBB9B9B9B7B6B6B3B3B1B1AEAEA69E9992897C64717272727474
+747474767674767474726C6A665D6C6A6A6C747C8789929A9EA1A4A6ABAEAEB1B1B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1
+AEAEAEABA9A6A4A19C99928C87817C74716A6767666161615F57554F4F575F676C72767F7F818587
+878989898C8E8E8E8E8E8E8F8F8F8F8E8E8C8987817F766C6157514F4F55575C5F5F616161616667
+6A6A6C717272747476767676767979797C7C7C7C7C7C7F7F7F7F7F81818184818181818184848587
+87878787878787878787878789898989898989898989898989898989898989898989898989898989
+8C8C898989898989898989898989898C8C8E8C8C8989898C8C8E8E8E8C8C8C8E8E8F8F8F8E8E8E8E
+8C8E8E8F8F8F8F8F8F8F8E8E8E8E8C8C8C8989898989898989898989898989898989898989898989
+8989898C8E8E8E8E8E8E8E8E8F92929292929292949494929292929292928F8F8E8E8E8E8E8E8E8E
+8E8E8E8E8E8F929292929292929292929292929292929292928F8E8C898989878787878787878481
+7F7F7F7F7F7F7F7F7F818184858789898E8F929292949494999A9C9C9C9E9E9E9EA3A4A4A6A6A6A6
+A6A6A4A39E9C9C9994928C877F79848992949A9C9C9E9E9E9E9E9C9C9C9C9C9A9A99949494949492
+9292928F8F8E8E8E8E8E8E8E8F929292748187898C8E9294969C9EA1A4A4A6A6A9A9A9A9A6A6A6A6
+A6A6A6A6A6A6A6A6A6A4A4A4A4A4A6A6A6A6A6A6A6A9A9A9A9A9A9ABABABABABA9A9A6A9A9A9A9A9
+A9A9A9A9A9ABABABABABABABABABABABAEAEAEAEAEABABABAEAEAEABA9ABABABABABA9A9A9A6A6A6
+A6A6A4A4A4A4A4A3A19E9E9E9E9E9C9C9C9C9A9A9A9A99949494949494949492929292929292928F
+8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C
+7C7C7C7976767676747474747472726C6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5D595757
+5555544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7276767C7C7F7F7F818585878989
+8C8E8E8E9292929292929494949489929EA9B1B7BBC4CCD3D9DFE4E7ECF1F2F4F4F7F7F9F9F9F7F4
+F4F2EEECE9E6DFD9D3CFC9C6C1BBBBBBB9B9B9B7B6B6B3B1B1AEAEA9A49C948F8776617172727274
+747474767976797C797674726C6C6A6C74747F87898E949C9EA4A6A9ABAEAEB1B1B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1
+B1AEAEAEA9A6A6A49E9C949289877F79726C6A6767616161615F57554F5459616A6C747C7F7F8184
+87878989898C8E8E8E8E8E8F8F8F8E8E8E8C8987847F79726A5D554F4F5157595D5F5F6161616667
+6A6A6C6C727274747676767979797C7C7C7C7C7F7F7F7F7F7F7F8181818485858585858585878787
+8787898987878787898989898989898989898C8C8989898C8C8E8C898989898989898C8C8989898C
+8E8E8E8C8989898C8C8C8E8E8C89898C8E8F8E8E8E8E8E8E8F8F8F8F8E8E8E8E8F9292928F8F8F8F
+8E8F8F9292929292928F8F8F8F8F8F8F8E8E8E8E8E8F8E8E8C898989898989898989898989898989
+89898C8E8E8E8E8E8E8E8E8E8F9292929292929294949492929292929292928F8E8E8E8E8E8E8E8E
+8E8E8E8E8F92929292929292929292928F8F8F8F8F8F8F8F8E8C8989898787878484848481817F7F
+7F7C7C7C7C7C7C7F7F7F8181878789898E92929294949499999A9C9C9C9E9E9EA1A4A4A4A6A6A6A6
+A6A6A49E9E9C9A949289877F7681899294999C9C9EA3A19E9E9C9C9C9C9C9C9A9A96949494949492
+92928F8E8E8E8E8E8E8E8E8F929292927F8789898E8F92949A9C9EA4A4A6A6A6A9A9A9A9A6A6A6A6
+A6A6A6A6A4A4A6A6A6A4A4A4A4A4A4A6A6A6A6A6A6A6A9A9A9A9A9A9A9ABABABA9A9A6A6A6A6A6A6
+A6A6A6A6A9A9ABABABABABABABABABABABAEAEAEAEABA9ABABAEABABA9A9ABABABABA9A9A9A6A6A6
+A6A6A4A4A4A4A3A19E9E9E9E9E9C9C9C9C9C9A9A9A9A99949494949494949492929292929292928F
+8E8E8E8E8E8E8E898989898989898989898787878585858585858584817F7F7F7F7F7F7C7C7C7C7C
+7C7C7C797676767676747474747272716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F595757
+5755554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76767C7C7F7F7F7F858587878989
+8E8E8E8F929292929294949494618E99A4AEB1B9BEC6CCD4D9DFE6E7ECF1F2F4F4F7F7F9F9F9F7F4
+F2F2EEECE7E4DFD9D3CFC8C6C1BEBBBBB9B9B9B9B7B6B3B1B1AEAEABA6A19A948C87746171727274
+7474747679797C7C7C797676747476747C7F87898E92999C9EA4A6A9ABAEB1B1B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1
+B1B1AEAEABA9A6A49E9C99948F89847F746C6A676766646461615F57554F555C616A71767C7C7F81
+8487898989898C8E8E8E8E8E8F8E8E8E8C8C898987817C746C6157514F4F55575C5F5F6161616167
+6A6A6C6C71727474767679797C7C7C7C7C7F7F7F7F7F7F7F7F818184848587878787878787878787
+8789898989898789898989898C8C8989898C8E8E8C8C898C8E8E8E8E8C8C8989898C8E8E8E8C8C8C
+8E8F8E8E8E8E8E8E8F8F8F8E8E8E8C8E8F8F8F8F8F8F8F92929292928F8F8F8F8F9292929292928F
+8F8F929292929292929292929292929292928F8F929292928F8F8E8C898C8C8E8E8C8C8989898989
+8C8C8E8E8E8E8E8E8E8E8E8E8F8F929292929292949494949292929292928F8E8E8E8E8E8E8E8E8E
+8E8E8E8F9292929292929292929292928F8E8E8E8E8E8E8C89898987878784817F7F7F7F7F7C7C79
+76767676797C7C7C7F7F7F818787898C8F929294949494999A9A9C9C9C9E9E9EA3A4A4A4A6A6A6A6
+A6A4A19E9C9A94948E877F747F878F94969C9C9EA1A39E9E9E9C9C9C9C9C9A9A9994949494949292
+928F8E8E8E8E8E8E8E8E8E8F9292927C8789898E8F9294999C9EA3A4A6A6A6A6A9A9A9A9A6A6A6A6
+A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6
+A6A6A6A6A9A9ABABABABABABABABABABABABAEAEABABA9A9ABABABABA9A9A9ABABA9A9A9A9A6A6A6
+A6A6A4A4A4A4A3A19E9E9E9E9E9C9C9C9C9C9A9A9A9A9A969494949494949492929292929292928F
+8E8E8E8E8E8E8E8C8989898989898989898987878785858585858584817F7F7F7F7F7F7F7C7C7C7C
+7C7C7C797676767676747474747472716C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5C5757
+575555514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7C7C7F7F7F84858587898989
+8E8E8F9292929292949494949489929CA6AEB6B9C1C6CFD4DCE1E6ECECF2F4F4F4F7F9F9F9F9F7F4
+F2F2EEECE7E4DFD9D3CFC8C6C1BEBBBBB9B9B9B9B9B7B6B3B1B1AEAEA9A69E99928C877C6A717272
+74747476797C7C7C7C7C797C7C767C7F8187878C92949A9C9EA4A6A9ABAEB1B1B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1
+B1B1B1AEAEA9A6A4A39E9C94928C878179726C6A676766666666615D57544F555D646A72767C7C7F
+8185878989898C8E8E8E8E8E8E8E8E8C8C89898987817F7972675D554F4F5157595D5F6161616166
+676A6A6C717274747476797C7C7C7C7C7F7F7F818181818181818484858787878787898787878787
+89898989898989898989898C8E8E8E8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8E8E8F8E8E8E8E
+8F8F8F8F8F8F8F929292928F8F8F8E8E8F9292928F8F9292929292929292928F9292929292929292
+9292929292929292929292929292929292929292929292929292928F8F8E8F8F8F8F8E8C8C8E8E8E
+8F8F8E8E8E8E8E8E8E8E8E8E8E8F9292929292929494949292929292928F8E8E8E8E8E8E8F8F8F8F
+8F8F8F8F92929292929292929292928F8E8C8C8C8C8C89898987878784817F7F7C7C7C7976747474
+7472747476797C7F7F7F81858789898E929292949494999A9A9C9C9C9C9E9EA1A4A4A4A4A6A4A4A4
+A4A39E9C9A96948F897F767F878C92949A9C9E9E9E9E9E9E9C9C9C9A9A9A9A9A9994949494949292
+8F8E8E8E8E8E8C8C8E8E8F929292748489898C8F9292949A9C9EA4A4A6A6A6A6A9A9A9A6A6A6A6A6
+A6A6A6A4A4A4A4A4A4A4A4A3A4A4A4A4A4A4A6A6A6A6A6A6A6A9A9A6A6A6A9A9A6A6A6A6A6A6A6A6
+A6A6A6A6A9A9ABABABABABABABABABABA9ABABAEABABA9A9ABABABA9A9A9A9ABABA9A9A9A6A6A6A6
+A6A4A4A4A4A4A39E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A999494949494949494929292929292928F
+8E8E8E8E8E8E8E8C8989898989898989898987878785858585858584817F7F7F7F7F7F7F7C7C7C7C
+7C7C7C797676767676747474747472726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5D5957
+575555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74767C7C7C7F7F7F818585878989898C
+8E8E8F929292929494949494878E94A1A9B1B7BEC1CCD1D9DEE1E7ECECF2F4F4F7F7F9F9F9F9F7F4
+F2F1ECECE7E1DFD9D3CFC8C6C1BEBBBBB9B9B9B9B9B9B6B3B1B1AEAEABA9A49C96928E89856A7172
+74747476797C7C7C7C7F7C7C7F7C7F858789898E92999C9EA1A4A6A9ABAEB1B1B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1
+B1B1B1AEAEABA9A6A49E9E9A949289877F746C6A67676767666666615D57514F575F676C74767C7C
+7F8487878989898C8E8E8E8E8E8E8C8C8989898989857F7C746A6157514F4F55575D5F5F61616166
+676A6A6C6C7272747476797C7C7C7C7F7F7F81848484848484848485878787878789898989878789
+898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F
+8F9292928F8F929292929292928F8F8F929292929292929292929292929292929292929292929292
+92929292929292929292929292929494949494929494949292929292929292929292928F8F8F9292
+928F8F8F8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292928F8E8E8E8F8F8F92929292
+92929292929292929292929292928F8E8E89898989898787878584817F7F7C7C797674747271716E
+6E727474767C7C7F7F81858789898E8F929294949494999A9A9C9C9C9E9E9EA3A4A4A4A4A4A4A4A3
+A19E9C9C9994928981767C87898F94999C9C9E9E9E9E9E9E9C9C9C9A9A9A9A999494949494929292
+8F8E8E8E8C8989898C8E929292927F87898C8E8F9294999C9EA3A4A4A6A6A6A6A9A9A9A6A6A6A6A6
+A6A6A4A4A4A4A4A4A4A4A4A3A3A3A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A9A9ABABABABABABABABABA9A9ABABABA9A9A9A9ABABA9A9A9A9A9ABA9A9A9A6A6A6A6
+A6A4A4A4A4A3A19E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A999494949494949494929292929292928F
+8E8E8E8E8E8E8E8E8C89898989898989898989878787858585858585817F7F7F7F7F7F7F7F7C7C7C
+7C7C7C79767676767676747474747472716C6C6C6C6C6C6A6A6A6A67676766616161615F5F5F5C57
+575755554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7476797C7C7F7F7F81858587878989898E
+8E8E9292929294949494949489929CA4ABB1B9BEC6CCD3D9DFE4E7ECEEF2F4F4F7F7F9F9F9F9F7F4
+F2F1ECECE7E1DED9D3CFC8C6C1C0BBBBB9B9B9B9B9B9B7B3B1B1AEAEAEA9A6A39C9A94928E896C72
+7274747676797C7C7C7F7F7F7F84858787898E92949A9C9EA3A4A6A9ABAEB1B1B1B3B3B3B3B3B3B3
+B3B3B1B3B3B3B3B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1
+B1B1B1B1AEAEA9A6A4A49E9C9A948E89817C746C6A67676767676766615D554F4F575F676E74767C
+7F818487878989898C8E8E8E8E8E8C8C898989898987817C766C665C554F4F51575C5F5F61616161
+676A6A6C6C7172747476767C7C7C7C7F7F8184858587878787878587878787878989898989898989
+8989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292928F8F
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929494949494949494949494949494949494949292929292929492929292929292
+929292928F8F8E8E8E8E8E8E8E8E8F929292929292929292929292928F8E8E8F8F92929292929292
+929292929292929292929292928F8F8E8C8989898787878584817F7F7C7C767474726C6A6A6A6C6E
+727476797C7C7F7F81858789898C8F929292949494999A9A9C9C9C9C9E9EA1A4A4A4A4A4A4A39E9E
+9E9C9C9A94928981767C84898F92949A9C9C9E9E9E9E9E9E9C9C9A9A9A9A9A99949494949292928F
+8E8E8E8C898989898E8F9292927C8789898E8E9292949A9C9EA4A4A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A3A3A4A4A4A4A3A19EA1A3A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4
+A4A4A6A6A6A6A9A9A9A9ABABABABABABA9A9A9ABABA9A9A9A9A9ABA9A9A9A9A9A9A9A9A6A6A6A6A6
+A6A4A4A4A4A3A19E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9994949494949494949292929292929292
+8E8E8E8E8E8E8E8E8C89898989898989898989878787858585858585817F7F7F7F7F7F7F7F7C7C7C
+7C7C7C7C767676767676747474747472726C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5C57
+57575555544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7476767C7C7F7F7F7F848587878989898C8E
+8E8F929292929494949494948E949EA6AEB6B9C1C6CFD4D9DFE6E7ECEEF2F4F4F7F7F9F9FAF9F7F4
+F2EEECECE7E1DCD9D3CFC8C6C1C0BBBBB9B9B9B9B9B9B7B6B3B1B1AEAEABA9A6A49E9A94928F876C
+7272747476797C7F7F7F817F84858787898C8F92949A9C9EA4A6A6A9AEAEB1B1B1B1B3B3B3B3B3B3
+B3B1B1B1B3B3B3B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1
+B1B1B1B1AEAEABA9A6A4A39E9C949289877F76716A67676767676767645F59554F515C616A727476
+7C7F818587898989898E8E8E8E8C8C89898989898987847F79726A5F554F4F4F55575C5F61616161
+66676A6A6C7172747476767C7C7C7F7F7F8485858587878787878787878787898989898989898989
+89898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929494949494949494949494949494949494949494949292949494949492929292
+9292929292928F8F8F8E8E8E8E8E8F8F8F8F9292929292929292928F8F8E8F929292929292929292
+949492929292929292929292928F8E8989898787878481817F7F7C7C7674726E6C6C727272727274
+7676797C7C7F7F81858789898C8E92929294949496999A9A9C9C9C9E9E9EA3A4A4A4A4A4A19E9E9E
+9C9C9A94928E84767C81898E9294999A9C9C9C9E9E9E9C9C9C9C9A9A9A9A9994949494929292928E
+8E8C89898989898C8F929292748489898E8E8F9294999C9EA1A4A4A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A3A19EA1A3A3A4A4A19E9E9EA19EA3A4A4A4A4A4A4A4A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A6A6A6A9A9A9A9ABABABABA9A9A9A9A9ABA9A9A9A9A9A9A9A9A6A9A9A9A9A9A6A6A6A6A6
+A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9994949494949494949292929292929292
+8F8E8E8E8E8E8E8E8E8989898989898989898987878785858585858584817F7F7F7F7F7F7F7C7C7C
+7C7C7C7C767676767676767474747472726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5D59
+57575555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7476767C7C7C7F7F7F84858587898989898E8E
+8E8F92929292949494949487929AA4A9AEB7BEC4CCCFD4DCE1E6ECECF1F2F4F4F7F7F9F9F9F9F7F4
+F2EEECECE6E1DCD4D3CFC8C6C1C0BBBBB9B9B9B9B9B9B9B6B3B1B1B1AEAEA9A6A6A49E9C9A948C85
+6A7272747476797C7F7F818485878789898E9294999A9C9EA4A6A6A9AEAEB1B1B1B1B1B1B3B3B3B3
+B3B1B1B1B3B3B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1
+B1B1B1B1B1AEAEA9A6A6A49E9C9A948F89857C746C6A67676767676A67615F57554F555D646A7274
+767C7F8187878989898C8E8E8E8C8989898989898989857F7C746A6459554F4F5457595F5F616161
+66676A6A6C6C72727476797C7C7F7F7F7F8185858585878789878787878789898989898989898989
+898C8C898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929494949492949494949494949494949494949494949494949494949494949494949494949494
+94929292929292928F8F8F8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8E8E8E8F929292949494949494
+9494949492929292929292928F8E8C8987878784817F7F7F7C797674726E7174767C7C7676767676
+797C7C7F7F7F8184878789898E92929294949494999A9A9A9C9C9C9C9E9EA1A1A1A3A39E9E9E9C9C
+9A9A94928E8776797F878C929496999A9C9C9C9E9C9C9C9C9C9A9A9A9A9A949494929292928F8F8E
+8C8989898989898E8F928F8F7F89898C8E8E8F92949A9C9EA4A4A4A6A6A6A6A6A6A6A6A6A6A4A4A4
+A3A19E9E9E9E9EA1A3A3A19E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A6A6A9A9A9A9A9A9ABABA9A9A9A9A9A9A9A9A6A9A9A9A9A9A6A6A9A9A9A9A6A6A6A6A6
+A4A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9994949494949494949292929292929292
+8F8E8E8E8E8E8E8E8E8C89898989898989898989878785858585858584817F7F7F7F7F7F7F7F7C7C
+7C7C7C7C79767676767676747474747472716C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5C
+5757575555514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7476797C7C7C7F7F7F81858587898989898C8E8E
+8E9292929294949494949489949CA4A9B1B9BEC6CCD1D9DCE1E7ECECF2F2F4F4F7F7F9F9F9F9F4F4
+F2EEECECE6E1D9D4D1CFC8C6C1C0BBBBBBBBB9B9B9B9B9B6B3B1B1B1B1AEABA9A9A9A6A49C9A9289
+816172727476797C7F7F8184878787898C8E9294999C9C9EA4A6A6A9AEAEB1B1B1B1B1B1B3B3B3B3
+B3B1B1B1B1B3B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B1B1B1B1B1AEAEABA9A6A6A49E9C99928E87817C726A67676767676A6A67615F57544F575F676C72
+74797C7F8487878989898C8E8E8E8989898989898987877F7C766C675F554F4F4F55575C5F616161
+61676A6A6C6C71727476797C7C7F7F7F7F8184858585878789898787878989898989898989898989
+898C8E8C8C898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F92929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+94949492929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929294949494949494
+94949494929292929292928F8E8E8987878481817F7F7C7C7974727172767C7F817F7F7F7C7C7C7C
+797C7F7F7F8181858789898E8F92929294949499999A9A9A9C9C9C9C9C9E9E9E9E9E9E9E9C9C9A9A
+9994928C8779767F8789929494999A9A9C9C9C9C9C9C9C9C9C9A9A9A9A949492929292928F8E8C89
+8989898989898C8E8E8F8E7C87898C8E8E8E9292949A9C9EA4A4A6A6A6A6A6A6A6A6A6A6A4A4A4A3
+A19E9E9E9E9E9E9E9EA19E9E9E9E9E9E9E9EA3A3A3A1A1A3A4A3A3A3A1A1A3A3A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A6A6A6A9A9A9A9A9A9A9A9A6A9A9A9A9A9A6A6A9A9A9A9A6A6A9A9A9A6A6A6A6A6A4
+A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9994949494949494949292929292929292
+8F8E8E8E8E8E8E8E8E8C89898989898989898989878787858585858584817F7F7F7F7F7F7F7F7C7C
+7C7C7C7C79767676767676747474747472726C6C6C6C6C6C6C6A6A6A6A676767646161615F5F5F5D
+5757575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7476797C7C7C7F7F7F81858587878989898C8E8E8E
+8F9292929294949494947F8F9A9EA6AEB1B9C1C6CFD3D9DFE4E7ECECF2F4F4F4F7F9F9FAF9F7F4F4
+F2ECECECE6DFD9D4D1CFC8C6C1C1BBBBBBBBBBB9B9B9B9B6B3B3B1B1B1AEAEABA9A9A9A6A49C9992
+877F57727274767C7F7F8184878787898E8F9294999C9C9EA4A6A6A9ACAEB1B1B1B1B1B1B1B3B3B3
+B3B1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B1B1B1B1AEAEABA9A9A6A4A19E9C949289877F766C6A676767676A6A67665F5D554F4F575F676C
+72767C7F8185878989898C8E8E8E898989898989878787817C76726A6159554F4F5155575F616161
+6166676A6C6C71727476797C7C7F7F7F7F8184858585878787898989898989898989898989898989
+8C8E8E8E8E8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92949494949494949494949494949494949494949494949494949494949494949494949494949494
+9494949292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F9292929494949494949494
+949494929292929292928F8E8C8989878481817F7F7C7C76747272747C7F8587878784817F7F7F7C
+7C7C7F7F7F8184858789898E8F929294949494999A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9A9A9994
+94928E8779767F85898F9294999A9A9A9A9C9C9C9C9C9C9A9A9A9A9A9494929292928F8F8E898987
+878789898989898C8E8E768489898E8E8E8F9294999C9EA1A4A4A6A6A6A6A6A4A4A4A4A4A4A4A4A1
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A1A1A1A1A1A1
+A1A3A3A3A4A4A6A6A6A6A9A9A9A9A9A9A9A6A6A9A9A9A6A6A6A6A9A9A6A6A6A6A9A9A6A6A6A6A6A4
+A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9994949494949494949292929292929292
+8F8E8E8E8E8E8E8E8E8E89898989898989898989878787858585858584817F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7976767676767674747474747472716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F
+5957575555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7474767C7C7C7F7F7F7F84858787898989898E8E8E8F
+9292929292949494949487929C9EA6AEB6BBC1C8CFD4D9DFE6ECECEEF2F4F4F7F7F9F9FAF9F7F4F4
+F1ECECE7E4DFD9D4D1CFC8C6C1C1BEBBBBBBBBBBB9B9B9B7B3B3B3B1B1B1AEAEABABABABA6A49C94
+8E857171727476797C7F8184878789898E929294999C9EA1A4A6A6A9ABAEAEB1B1B1B1B1B1B1B3B3
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1B1AEAEABA9A9A6A49E9C9A948F89847C746C6A676767676A6A67615F59554F4F59616A
+6E74767C7F8187878989898E8E8E8C8989898987878787847F79746C675F574F4F4F55575C5F6161
+6166676A6A6C6E727274797C7F7F7F7F7F818185858585878789898989898989898989898989898C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+949494929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8F9292929292929494949494949494
+9494949292928F8F8F8E8C898987878581817F7C7C7974747474797F81878989898987878584817F
+7F7C7C7F7F8181848789898E8F929494949494999A9A9A9A9A9C9C9C9C9C9C9C9C9C9A9A99949492
+9289877C767F85878C9294999A9A9A9A9A9A9A9A9A9A9A9A9A999996949292928F8F8E8C89878787
+878787898989898C8E8E7F89898E8E8E8E8F92949A9C9EA4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9E9E9E9E9E9E9E9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E
+9E9E9EA1A1A4A4A6A6A6A6A6A9A9A9A9A6A6A6A9A9A9A6A6A6A6A9A9A6A6A6A6A6A9A6A6A6A6A6A4
+A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A96949494949494949292929292929292
+8F8E8E8E8E8E8E8E8E8E89898989898989898989898787858585858584817F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7976767676767674747474747472726C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F
+5C5757575555514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7474767C7C7F7F7F7F7F81858587898989898E8E8E8E92
+9292929294949494949489949CA4A9B1B7BEC1C9CFD4D9E1E6ECECF1F2F4F4F7F7F9F9FAF9F7F4F2
+F1ECECE7E4DFD9D4D1CFC8C6C1C1BEBBBBBBBBBBB9B9B9B7B6B3B3B3B1B1AEAEAEAEAEAEABA6A49C
+92897F61717274767C7F8184878789898F929294999C9EA3A4A4A6A6ABAEAEAEB1B1B1B1B1B1B1B3
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1B1AEAEABABA9A6A4A39E9C99928C878179726A6A676767676A6766615F57554F545C66
+6A7274797F7F84878789898E8E8E8C8989898787878787847F7C746E6A6159544F4F5155575F6161
+6161676A6A6C6C727274767C7C7F7F7F7F7F81848585858787898989898989898989898989898C8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929294
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+949494929292929292929292928F8E8E8E8E8E8E8E8E8E8E8F929292929292949494949494949494
+94949292928F8F8E8C89898987878481817F7C7B76767676767C7F848789898E8E8C898987878784
+817F7F7F7F7F81848787898E92929494949494999A9A9A9A9A9A9A9A9A9A9A9A9A99969494928F8C
+87847C767F8587899294949A9A9A9A999999999A9A9A9A99999694949292928F8E8E898987858787
+878789898989898E8E7C87898C8E8E8E8E9294949A9C9EA4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A19E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E
+9E9E9E9E9EA3A4A6A6A6A6A6A6A9A9A9A6A6A6A6A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A49E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A99949494949494949492929292929292
+8F8E8E8E8E8E8E8E8E8E8C898989898989898989898787858585858584817F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7C79767676767674747474747472726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F
+5D5957575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7274767C7C7C7F7F7F7F81858587898989898C8E8E8E8F92
+9292929294949494947F929A9EA4ABB1B9BEC6CCD1D9DCE1E7ECECF2F2F4F4F7F7F9F9FAF9F7F4F2
+F1ECECE7E4DFD9D4D1CFC8C6C1C1BEBBBBBBBBBBB9B9B9B7B6B6B3B3B3B1B1AEAEAEAEAEAEABA69E
+998F877457727476797C7F818587898C8F929294999C9CA1A4A4A6A6A9AEAEAEAEB1B1B1B1B1B1B1
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B1B1B1AEAEAEABABA9A6A49E9C9A949289877F76716A676767676A6A67615F5D57514F555F
+676C72767C7F81858789898C8E8E8C8989878787878787847F7C76726C675F574F4F4F55575C5F61
+616166676A6C6C717274767C7C7F7F7F7F7F818485858587878789898989898989898989898C8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929294
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+949492929292929292929292928F8F8F8F8E8E8E8E8E8E8F92929292949494949494949494949494
+94949292928F8E89898987878481817F7F7F7C7979797C7C7F848787898C8E8F92928E8989898787
+85848181817F8184858789898F92949494949499999A9A9A9A9A9A9A99949494949292928E898784
+7F76767F8487878E92949A9A9A999994949496999A99999494949492928F8E8E8C89878785858587
+8789898989898C8E7987898C8E8E8E8E8F9294999C9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9C9C9C9C9C9C9C9C9A9A9A9A9A9C9C9C9E9E9E9E9E9E
+9E9E9E9E9E9EA4A4A6A6A6A6A6A6A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A49E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A99949494949494949492929292929292
+8F8E8E8E8E8E8E8E8E8E8C89898989898989898989878785858585858584817F7F7F7F7F7F7F7F7F
+7C7C7C7C7C7976767676767474747474747472716C6C6C6C6C6C6A6A6A6A67676766616161615F5F
+5F5C57575755554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7476767C7C7C7F7F7F7F81858587878989898C8E8E8E8F9292
+92929292949494949485949C9EA6AEB3B9C0C6CCD3D9DFE4E7ECEEF2F2F4F4F7F7F9F9FAF9F7F4F2
+EEECECE6E1DFD9D4D1CCC8C6C4C1C0BBBBBBBBBBB9B9B9B7B6B6B6B3B3B3B1B1AEAEAEAEAEAEABA6
+9C94897F664F7274767C7F818487898C8F929294999A9C9EA4A4A6A6A9AEAEAEAEAEB1B1B1B1B1B1
+B1B1B1B1B1B1B1B1B1AEB1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B1B1B1AEAEAEABABA9A6A49E9C99948F89817C746C6A67676767676766615F5C574F4F55
+616A6C74767C7F818787898C8E8E8E898987878787878784817C76746C6A6159544F4F4F55575F61
+616166676A6A6C6E727274797C7F7F7F7F7F81818585858587878989898989898989898989898E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F92929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292929292928F8F8F8F8F8F8F92929294949494949494949494949494
+949292928F8E8C89878785817F7F7F7F7F7C7C7C7C7C7F81878989898C8E8F9292928F8F8C898987
+87878584817F7F81848787898C92929494949494999A9A9A9A99999994929292928E8C8987817F79
+72797F848787899294999999999694949494949999949494949292928F8E8C898987858585858587
+8789898989898E8E8189898E8E8E8E8E9294969A9C9EA4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A39E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9C9C9C9C9C9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E
+9E9E9E9E9E9EA1A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A19E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A99949494949494949492929292929292
+928E8E8E8E8E8E8E8E8E8C89898989898989898989878785858585858584817F7F7F7F7F7F7F7F7F
+7C7C7C7C7C7B76767676767674747474747472726C6C6C6C6C6C6C6A6A6A6A676767616161615F5F
+5F5C5757575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFF7476767C7C7C7F7F7F7F7F84858787898989898E8E8E8F929292
+92929294949494949489999C9EA6AEB6B9C1C6CFD4D9DFE4ECECEEF2F4F4F4F7F9F9FAFAF9F7F4F2
+EEECECE6E1DCD9D4D1CCC8C6C4C1C0BBBBBBBBBBBBB9B9B7B6B6B6B6B3B3B3B1B1B1B1AEAEAEAEA9
+A39A8F87765F717474797C7F848789898F929294999A9C9EA4A4A6A6A9ABAEAEAEAEAEB1B1B1B1B1
+B1B1B1B1B1B1B1B1B1AEAEB1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1AEAEAEAEABA9A6A4A19C9A94928C877F79746C6A676767676766615F5F5955514F
+57666A7274797C818487898C8E8E8E898987878787878784817F7974726A665F574F4F4F54575C5F
+616164676A6A6C6C727274767C7C7F7F7F7F7F818485858587878989898989898989898989898C8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F9292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292929292929292929292929292929494949494949494949494949494
+9292928F8E8E8987878484817F7F7F7F7F7C7C7C7F8187878989898C8E8F9292928F8F8E8C898989
+87878784817F7F8181848787898E929294949494999A9A9A9999949492928E8C898987817F7C7472
+797F818789898F949496999994949494949494949494949292928F8E8C8989898785858585858787
+89898989898C8E7F89898E8E8E8E8E8F92949A9C9C9EA4A4A4A3A3A3A1A19E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9C9C9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E
+9E9E9E9E9E9E9EA3A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A99949494949494949492929292929292
+928F8E8E8E8E8E8E8E8E8C8989898989898989898987878585858585858481817F7F7F7F7F7F7F7F
+7F7C7C7C7C7C7976767676767474747474747272716C6C6C6C6C6C6A6A6A6A676767666161615F5F
+5F5D5957575555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF7476767C7C7C7F7F7F7F7F84858587898989898E8E8E8F92929292
+92929294949494947C929A9CA3A9B1B7BBC1C6CFD4D9E1E6ECECEEF2F4F4F7F7F9F9FAF9F9F7F4F2
+EEECE9E6E1DCD9D4D1CCC8C6C4C1C0BEBBBBBBBBBBB9B9B9B7B6B6B6B6B3B3B3B1B1B1B1AEAEAEAB
+A69C94897F6C57727476797F818787898E929294999A9C9EA4A4A6A6A9A9AEAEAEAEAEAEB1B1B1B1
+B1B1B1AEB1B1B1B1B1AEAEB1B1B1B1B1B1B1B3B3B3B3B3B3B3B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1AEAEAEAEABA9A6A49E9C9A949289857F76726C6A676766666661615F5F575551
+4F5C676C7274797F818789898E8E8C898989878787878784817F7C74726C676159544F4F4F55575F
+5F616166676A6C6C717274767C7C7F7F7F7F7F818485858587878789898989898989898989898C8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949292929292929292929292929292929292929292929292949494949494949494949494949494
+9292928F8C8989878585848481817F7F7F7F7F818587878989898C8E8F8F9292928F8E8E8C898989
+89878781817F7F7F7F7F818789898E929292929294949999949494928F8C898787847F7C76727279
+7F818789898E9294949494949494949494949494949492928F8E8C89898989878585848485878789
+898989898C8E7C87898C8E8E8E8E8E9294999A9C9EA1A4A4A19EA19E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E
+9E9E9E9E9E9E9EA1A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A39E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A99949494949494949492929292929292
+928F8E8E8E8E8E8E8E8E8E8989898989898989898987878585858585858584817F7F7F7F7F7F7F7F
+7F7C7C7C7C7C7976767676767474747474747472716C6C6C6C6C6C6A6A6A6A6A676767616161615F
+5F5F5C5757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF6C7476767C7C7C7F7F7F7F7F81858587898989898E8E8E8E9292929292
+929292949494949484949A9EA4A9B1B7BEC1C8CFD4DCE1E6ECECF1F2F4F4F7F7F9F9FAF9F9F7F4F2
+EEECE7E4E1DCD9D4D1CCC8C6C6C1C0BEBBBBBBBBBBB9B9B9B7B7B6B6B6B6B3B3B3B1B1B1B1AEAEAB
+A6A49A8F877C6A547274767C7F8587898C8F9294949A9C9EA3A4A6A6A6A9ABAEAEAEAEAEB1B1B1B1
+B1B1AEAEB1B1B1B1AEAEAEAEB1B1B1B1B1B1B1B3B3B3B3B3B3B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1AEAEAEAEABA9A6A6A39E9C99948F89847C76726A6A676764646461615F5D5755
+514F5F666A72747C7F8487898E8E8C8C8989878787878584817F7C76746C6A615D574F4F4F51575C
+5F616166676A6A6C6E727274797C7F7F7F7F7F81818585858587878989898989898989898989898E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929494
+94949494949494949494949494949494949494949294949494949494949494949494949494949494
+94949492929292929292929292929292929494929292929494949494949494949494949494949492
+928F8E8989878785858585848481817F818485878789898C8E8E8E8E8F8F92928F8F8E8C89898989
+878785817F7F7F7F7F7F7F818787898C8F8F92929294949492928F8C89878784817C767471747C7F
+81878989899292949494949494949292929494949492928E8C898989898787878581818185878789
+898989898E6A8489898E8E8E8E8E8F92949A9C9C9EA4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9C9C9C9C9E9E9EA3
+A1A19E9E9E9E9E9EA3A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A4A4A6A6A6A6A4A4A6A6A6A6A4A4A4A4
+A4A4A4A4A4A4A39E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A99949494949494949492929292929292
+928F8E8E8E8E8E8E8E8E8E8989898989898989898987878785858585858584817F7F7F7F7F7F7F7F
+7F7C7C7C7C7C7C79767676767474747474747472726E6C6C6C6C6C6A6A6A6A6A676767646161615F
+5F5F5D5757575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFF6C7476767C7C7C7F7F7F7F7F81858587878989898C8E8E8E8F9292929292
+929294949494949489949C9EA6ABB1B9BEC4C9D1D9DEE1E6ECECF1F2F4F4F7F7F9F9FAF9F9F7F4F2
+ECECE7E4DFD9D9D4CFCCC8C6C6C1C1C0BEBBBBBBBBB9B9B9B9B9B7B6B6B6B6B3B3B3B1B1B1B1AEAE
+A9A69E948C857C67717474797C7F8787898E9292949A9C9EA3A4A4A6A6A9ABAEAEAEAEAEAEB1B1AE
+AEAEAEAEAEB1B1B1AEAEAEAEAEB1B1B1B1B1B1B1B3B3B3B3B3B1B1B1B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEA9A9A6A49E9C9A94928E87817C74716A6A676661616161615F5C57
+55544F5F666C72767F8187898E8C8C898989878787858584817F7C7674726A675F59544F4F4F5557
+5F5F6164676A6A6C6C727274767C7C7F7F7F7F7F818485858587878989898989898989898989898C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+94949494949494949494929294949494949494929292929294949494949494949494929494949494
+9494949494949292929292929292929292949494949494949494949494949494949494949492928F
+8E8C89898787878585858585848481848587878789898C8E8E8E8E8E8E8F8F8F8F8E8C8989898987
+8784817F7F7F7C7C7C7C7C7F7F8187898C8E8E8F8F929292928E898787847F7F79747272767C7F81
+878789898E92929494949494929292929292929292928F8E8989898787878784817F818487878989
+8989898C8E7F89898E8E8E8E8E8E9294999A9C9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9A9A9A9C9C9C9C9C9C9C9C9E9EA1A3
+A4A3A3A19E9E9E9EA1A4A4A4A4A6A6A6A6A6A4A4A6A6A6A6A4A4A6A6A6A6A4A4A6A6A6A6A4A4A4A4
+A4A4A4A4A4A4A39E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9999949494949494949492929292929292
+928F8E8E8E8E8E8E8E8E8E898989898989898989898987878585858585858584817F7F7F7F7F7F7F
+7F7F7C7C7C7C7C7976767676747474747474747472716C6C6C6C6C6A6A6A6A6A676767666161615F
+5F5F5D5957575555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF6A67676767676766616161616161615F5F5F5DFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFF6A72747676797C7C7F7F7F7F7F8185858787898989898E8E8E8F929292929292
+929294949494947C92999C9EA6AEB3B9BEC6CCD3D9DFE1E7ECECF2F2F4F4F7F7F9F9FAF9F9F7F4F2
+ECECE7E1DFD9D4D3CFCCC8C6C6C1C1C0BEBEBBBBBBB9B9B9B9B9B9B7B7B6B6B6B3B3B3B1B1B1AEAE
+A9A6A49C92898179617274767C7F8487898C929294999C9EA1A4A4A4A6A6A9ABAEABABAEAEAEAEAE
+AEAEAEAEAEAEB1B1AEAEAEAEAEB1B1B1B1B1B1B1B3B3B3B3B3B1B1B1B1B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1B1AEAEAEAEABA9A6A6A49E9C9A94928C877F7C74716A676761616161615F5F5C
+5755544F5F666E747C7F8487898C89898989878785858484817F7C7974726C6A615F57514F4F5157
+5D5F6161676A6A6C6C727274767C7C7F7F7F7F7F818485858587878789898989898989898989898C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929294949494949492929292929294949492929292929292929294949494949492929292949494
+94949494949494949492929292929292949494949494949494949494949494949494929292928F8E
+8989898787878785858587878785858787878789898C8E8E8E8E8E8E8E8E8E8E8E8C898989898787
+84817F7F7C7C7C79767676797C7C7F84878789898C8E8E8E8C8987817F7C7974747474797C7F8187
+8789898C8F929294949492929292928F8F8F9292928F8E8C898987878784817F7F81848787898989
+89898C8E7F87898C8E8E8E8E8E8F92949A9C9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E
+9EA1A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9C9C9C9C9C9C9C9E9E9EA3A4
+A4A4A4A3A19E9E9E9EA3A4A4A4A4A6A6A6A6A4A4A4A6A6A6A4A4A4A6A6A4A4A4A4A6A6A6A4A4A4A4
+A3A4A4A4A4A4A39E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9999949494949494949492929292929292
+928F8E8E8E8E8E8E8E8E8E8C8989898989898989898987878585858585858584817F7F7F7F7F7F7F
+7F7F7C7C7C7C7C7B76767676767474747474747472726C6C6C6C6C6A6A6A6A6A6A67676761616161
+5F5F5F5C5757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF6A6A6A6A6A6A676767676767676766616161616161615F5F5F5F57FFFFFFFFFFFF
+FFFFFFFFFFFFFF6C72747676797C7C7C7F7F7F7F7F8485858789898989898E8E8E92929292929292
+9292949494949484929A9CA3A6AEB3B9C1C6CCD3D9DFE1E7ECEEF2F2F4F4F7F7F9F9FAF9F9F7F4F2
+ECECE6E1DFD9D4D3CFCCC9C6C6C1C1C0BEBEBBBBBBB9B9B9B9B9B9B9B7B7B6B6B3B3B3B3B1B1B1AE
+ABA6A4A39A92897F765F7274767C7F8587898F9294949A9C9EA4A4A4A4A6A9ABABABABABAEAEAEAE
+AEAEAEAEAEAEAEB1AEAEAEAEAEAEB1B1B1B1B1B1B1B3B3B3B1B1B1B1B1B1B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1B1AEAEAEAEABA9A6A6A4A39E9C99949289877F79746C6A676661616161615F5F
+59575555515F6A71767F8187898C898989898787878484847F7F7C7C74726E6A675F5955514F4F55
+575F616166676A6C6C72727476797C7F7F7F7F7F8181858585858787898989898989898989898989
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929294949292929292929292929292929292929292929292929494949292929292929294
+949494949494949494949494949492949494949494949494949494949494949292929292928F8E8C
+8989898987878787878787878787878787898989898E8E8E8E8E8E8E8E8E8E8E8C89898989878787
+84817F7C7C7976767474747476767C7C7F8184878787878787817F7C7674747474797C7F81858787
+8789898E8F92929294929292928F8F8E8E8E8F8F8F8E8C898787878581817F7F7F84878787898989
+89898E7C87898C8E8E8E8E8E8F9294999C9C9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E
+9EA1A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9C9C9C9C9C9C9C9C9E9E9EA3A4
+A4A4A4A4A39E9E9E9EA3A4A4A4A4A4A6A6A4A4A4A4A4A6A4A4A4A4A4A6A4A4A4A4A4A6A4A4A4A4A3
+A3A4A4A4A4A4A39E9E9E9E9E9E9C9C9C9C9C9A9A9A9A999996949494949494949494929292929292
+928F8E8E8E8E8E8E8E8E8E8C898989898989898989898787858585858585858481817F7F7F7F7F7F
+7F7F7F7C7C7C7C7C79767676767474747474747472726E6C6C6C6C6C6A6A6A6A6A67676766616161
+5F5F5F5D5957575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF6C6C6C6A6A6A6A6A6A6A6A6A6A676767676767676766616161616161615F5F5F5F5F57FFFF
+FFFFFFFFFF6C6C74747676797C7C7C7F7F7F7F7F8485858789898989898C8E8E8F92929292929292
+9294949494949489949A9EA4A9AEB6B9C1C6CFD4D9DFE4E7ECEEF2F4F4F4F7F9F9FAFAF9F9F7F4F2
+ECECE6E1DFD9D4D3CFCCC9C6C6C1C1C1C0C0BEBBBBB9B9B9B9B9B9B9B9B7B7B6B6B3B3B3B3B1B1AE
+ABA6A6A49E9A92877F74577274767C8187898C9294949A9C9EA4A4A4A4A6A6ABA9A9A9ABAEABAEAE
+AEAEAEABABAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B3B3B1B1B1B1B1B1B1B3B3B3B3B3B3B3B3B1
+B3B3B3B3B1B1B1B1AEAEAEAEAEAEABA9A6A6A4A19C9A96928F89857F76726A67666161616161615F
+5D5757555554616C72797F848789898989898987878484817F7F7C7C7674726C6A615F57544F4F4F
+575D5F6166676A6A6E72747476797C7C7F7F7F7F7F81848585858787898989898989898989898989
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9494949494949494949494949494949494949494949494949494949494949292929292928F8E8E8E
+8C8989898987878787898787878787898989898C8E8E8E8F8F8F8F8F8F8F8F8F8E8C898989878787
+84817F7C7C7676747472727272747474767C7C7F7F7F7F7F7C7C7674747474797C7F818587878789
+89898C8F929292929292928F8F8E8E8E8E8E8E8E8E8C8987878584817F7F7F7F8185878789898989
+898C6A8189898E8E8E8E8E8E9292949A9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9C9C9C9C9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9C9C9C9C9C9C9C9E9E9EA1A4A4
+A4A4A4A4A39E9E9E9E9EA3A4A4A4A4A4A6A4A4A4A4A4A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3
+A1A3A4A4A4A3A39E9E9E9E9E9C9C9C9C9C9C9A9A9A9A999994949494949494949494929292929292
+928F8E8E8E8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F7F
+7F7F7F7C7C7C7C7C7976767676747474747474747472716C6C6C6C6C6A6A6A6A6A67676766616161
+615F5F5F5C57575755554F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6A6A6A6A676767676767676661616161616161616161616166
+67676A6A6C7274747676797C7C7C7F7F7F7F7F818585878989898989898E8E8E8F92929292929292
+949494949494768E949C9EA4A9B1B7BBC1C8CFD4D9DFE4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F2
+ECECE6E1DFD9D4D3CFCCCCC6C6C4C1C1C0C0BEBBBBB9B9B9B9B9B9B9B9B9B7B7B6B3B3B3B3B1B1AE
+AEA9A6A6A49E998F877C716C7274767F8487898E9294999C9EA3A3A3A3A4A6A6A9A9A9A9ABA9A9AB
+AEAEABA9A9ABAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B3B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B1
+B1B3B3B3B1B1B1B1AEAEAEAEAEAEABA9A6A6A4A49E9C9A94928F89847C746C6A676461616161615F
+5F5C57575555554F6C747C7F8587898989898987878581817F7F7C7C7674726C6A675F5C55544F4F
+55595F6161676A6A6C72747476797C7C7F7F7F7F7F81848585858787878989898989898989898989
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8F8F9292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+94949494949494949494949494949494949494949494949494949494949292929292928F8E8E8E8E
+8E8C8989898987898989898787898989898C8E8E8F8F9292929292929292928F8E8C898989878787
+85817F7C7C76747472716C6C6C6C6C6E72727474767676747272747476797C7F8184858787878989
+898C8E8F8F92929292928F8E8E8E8E8E8E8E8E8C8989878784817F7F7F7F7F818487878989898989
+8C8C7F87898E8F8F8E8E8E8F9294999C9C9C9C9C9C9A9A999A9A99999499999A9A9C9C9C9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9C9C9C9C9E9E9E9E9E9EA3A4A4
+A4A6A4A4A39E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3
+9EA1A3A4A4A3A19E9E9E9E9E9C9C9C9C9C9C9A9A9A9A999994949494949494949494929292929292
+92928E8E8E8E8E8E8E8E8E8C89898989898989898989878787858585858585858481817F7F7F7F7F
+7F7F7F7C7C7C7C7C7C79767676767474747474747472726E6C6C6C6C6A6A6A6A6A6A676767646161
+615F5F5F5C5757575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF747271
+6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6A6A6A6A6767676767676767676767676767676767
+6A6A6C6E7274747676797C7C7C7F7F7F7F81818585878789898989898C8E8E8E9292929292929294
+9494949494948192999C9EA6ABB1B9BEC1C8CFD9DCDFE4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F1
+ECECE6E1DFD9D4D3CFCFCCC8C6C4C1C1C0C0BEBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B1B1B1
+AEA9A6A6A6A49E948E87796A6C72747C7F8787898F94949A9C9E9E9E9EA4A6A6A6A9A9A9A9A9A9A9
+ABABA9A9A6A9AEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B3B3B1
+B1B1B3B3B1B1B1B1AEAEAEAEAEAEAEABA9A6A6A4A39E9C9A94928E89847C726C6A66616161616161
+5F5F5C57575555554F71767F8185878989898987878781817F7F7C7C7674726E6C67615F5755544F
+51575D616166676A6C72747476767C7C7F7F7F7F7F81818585858587878989898989898989898989
+898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8F8F8F9292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+94949494949494949494949494949494949494949494949494949494949292929292928F8E8E8E8E
+8E8E8C8989898989898989898989898C8E8E8F929292929292929292929292928F8E8C8989898787
+87847F7F7F7C79767472716C6C6C6A6A6A6C6C6C6C6C6E72727476797C7F7F818185878789898989
+8C8E8E8E8F8F92928F8E8E8C8C8C8E8E8C8C8989898785817F7F7F7F7F7F81848787878989898989
+8C7F87898C8F8F8F8E8E8E9294949A9C9C9C9C9C9A999494949494949494999A9A9A9C9C9C9C9E9E
+9E9E9E9C9C9C9C9C9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9C9A9A9C9C9C9C9C9C9C9E9EA1A4A4A4
+A6A6A6A4A4A19E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1
+9E9EA3A4A4A3A19E9E9E9E9C9C9C9C9C9C9A9A9A9A9A999494949494949494949494929292929292
+92928F8E8E8E8E8E8E8E8E8E89898989898989898989898787858585858585858584817F7F7F7F7F
+7F7F7F7F7C7C7C7C7C7976767676747474747474747472716C6C6C6C6A6A6A6A6A6A676767666161
+615F5F5F5D5957575555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7474747272
+716C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6A6A6A6A6A6A6A6767676A6A6A6A6A6A6C
+6C6C727474747676797C7C7C7F7F7F7F8181858587878989898989898E8E8E8F9292929292929494
+94949494949489929A9CA3A6AEB1B9BEC6CCD1D9DCE1E4E7ECF1F2F4F4F7F7F9F9FAF9F9F7F7F4F1
+ECE9E6E1DFD9D4D3CFCFCCC8C6C6C1C1C1C0BEBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B1B1B1
+AEABA9A6A6A4A49C948C8176616C72767C8187898C92949A9C9C9E9E9EA3A4A4A4A6A6A6A6A6A6A6
+A9A9A9A6A6A9A9ABAEAEAEAEAEAEAEAEAEB1AEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B3B1B1
+B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEABA9A6A6A6A4A19E9C9A94928E897F76716A67616161616161
+5F5F5F5957575557554F72767F81878989898789878784817F7F7C7C767674726C6A665F5C555551
+4F55595F6166676A6C7174747676797C7C7F7F7F7F7F818485858587878989898989898989898989
+898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8F8F8F929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92949494949494949494949499999999999999949494949494949494929292929292928F8E8E8E8E
+8E8E8C8C8C8C8C8C8C898989898C8E8E8E8F92929292929494949492929292928F8E8C8989898987
+878584817F7F7F7C7C7676747472716C6C6E717272747476767C7C7F7F8181848487878989898C8E
+8E8E8E8E8E8F8F8F8E8C8989898C8C89898989898784817F7F7F7F7F7F7F8185878789898989898C
+7C8487898E92928E8E8E8F9294999C9C9C9C9A9A99949494949494949494949999999A9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9C9C9C9E9C9C9C9C9A9A9A9A9C9C9C9C9C9C9E9E9EA3A4A4
+A6A6A6A4A4A19E9E9E9E9E9E9EA3A4A4A4A4A4A3A3A4A4A4A4A3A3A4A4A4A4A3A3A4A4A4A4A4A3A1
+9E9EA1A3A3A19E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A999494949494949494949494929292929292
+92928F8E8E8E8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F7F
+7F7F7F7F7C7C7C7C7C7B76767676767474747474747472726C6C6C6C6A6A6A6A6A6A6A6767676161
+61615F5F5F5C5757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7474747472
+727272716E6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6C6C6C
+6C747474747676797C7C7C7F7F7F7F8484858587878989898989898E8E8E8E929292929292929494
+94949494949489949A9EA4A6AEB3B9C0C6CCD3D9DEE1E6E7ECF1F2F4F4F7F7F9F9FAF9F9F7F4F2F1
+ECE7E6E1DFD9D7D3CFCFCCC8C6C6C1C1C1C0BEBBBBBBBBB9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B1B1
+AEAEABA9A6A6A4A49C94897F74556C72767C8487898F94999A9A9C9C9E9E9E9E9EA4A6A6A6A6A4A6
+A6A6A6A6A6A6A9A9A9AEABABABABABAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B3B1B1
+B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEA9A9A6A6A6A49E9E9C9A94928C877F74716A676161616161
+5F5F5F5D57575755575755747C7F818789878787878785817F7F7C7C797674726E6A67615F575555
+4F54575D6164676A6A6C72747476797C7C7F7F7F7F81818485858587878789898989898989898989
+898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8F8F9292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929494949494949494949496999A9A9A9A9A9A999494949494949494929292929292928F8F8E8E8E
+8E8E8F8F8F8F8F8E8C89898C8E8E8E8E8F929292929494949494949494949292928F8E8C89898989
+87878787878584817F7F7F7C7C797676747676767676797C7C7F7F81848587878789898C8C8E8E8E
+8E8E8E8E8E8E8E8C898989898989898989898787847F7F7C7C7F7F7F7F818487878787898989898C
+8187898E8F928F8E8E8E9294949A9A9C9C9A9A969494949492949292949494949496999A9A9A9C9C
+9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9C9C9C9C9C9C9C9C9A9A9A9A9A9C9C9C9C9C9C9E9E9EA3A4A4
+A6A6A6A4A4A39E9E9E9E9E9E9EA1A3A4A4A4A4A3A3A4A4A4A4A3A1A3A4A4A4A3A3A4A4A4A4A3A19E
+9E9E9EA3A3A19E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9494949494949494949494929292929292
+92928F8F8E8E8E8E8E8E8E8E8C89898989898989898989878787858585858585858581817F7F7F7F
+7F7F7F7F7C7C7C7C7C7C79767676767474747474747472726E6C6C6C6C6A6A6A6A6A6A6767676461
+61615F5F5F5D5757575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7474747474
+7474747272716C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6A6A6A6A6C6C6C6C7172
+747474767676797C7C7C7F7F7F7F8185858585878989898989898C8E8E8E8F929292929292949494
+94949494947C8E949C9EA4A9AEB6B9C1C6CFD4D9DFE1E6E9ECF2F2F4F4F7F7F9FAFAF9F9F7F4F2F1
+ECE7E6E1DFD9D7D3CFCFCCC8C6C6C4C1C1C0C0BBBBBBBBBBB9B9B9B9B9B9B9B9B6B3B3B3B3B3B1B1
+AEAEAEABA9A6A6A4A19C92877C6C6A6C74797F85878C929494999A9C9C9E9C9C9C9EA4A4A4A4A4A4
+A6A6A6A6A6A6A6A6A9A9ABABABA9A9ABAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B3B3B3B1B1
+B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEABA9A9A6A6A4A39E9E9C9A949289847C74716A6661616161
+615F5F5F5D57575557575755747C7F8487878787878787847F7F7C7C79767472716C6A665F5C5555
+515155595F61666A6C6C72747476767C7C7F7F7F8181818485858787878789898989898989898989
+89898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F92929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292949494949494949494999A9A9A9A9A9A9A99949494949494949292929292929292928F8F8E8F
+8F8F929292928F8F8E8C8E8E8E8E8E8E92929494949494999A99999494949292928F8E8C8C8C8C89
+8989898989898987878584817F7F7F7F7F7C7C7C7C7C7F7F7F8184858787898989898E8E8E8E8E8E
+8E8E8E8E8E8C898989898989898989898787847F7F7C7C7C7F7F7F7F81848587878787898989897F
+87898E8F92928F8E8E8E92949A9A9A9A9A9A94949292929292929292949494949494949699999A9A
+9A9C9A9A9A9C9C9C9C9C9C9C9C9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9C9C9C9E9EA1A4A4
+A4A4A4A4A4A39E9E9E9E9E9E9E9EA1A3A4A4A3A19EA3A4A4A3A19EA3A4A4A4A3A1A3A4A4A4A3A19E
+9E9E9EA1A19E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9694949494949494949494929292929292
+9292928F8E8E8E8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F7F
+7F7F7F7F7C7C7C7C7C7C7976767676747474747474747472716C6C6C6C6A6A6A6A6A6A6767676661
+61615F5F5F5F5957575555554F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7474747474
+7474747472727271716E6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6C6C6C6C6C6C6C6C72727474
+7474767676797C7C7C7F7F7F7F8185858585878789898989898C8E8E8E8F92929292929292949494
+9494949494878F969C9EA6A9B1B6BEC1C8CFD4D9DFE1E6ECECF2F4F4F4F7F9F9FAF9F9F9F7F4F2EE
+ECE7E6E1DFD9D7D3CFCFCCC8C6C6C4C1C1C1C0BBBBBBBBBBBBB9B9B9B9B9B9B9B6B3B3B3B3B3B1B1
+B1AEAEAEABA9A6A6A49E9A8E8174616A71747C7F87898E92949494999A9C9C9C9C9C9E9EA1A3A1A3
+A4A4A4A4A4A4A4A6A6A6A9A9A9A9A9ABAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B3B1B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEABABA9A9A6A6A49E9E9E9C99928E897F7974716A66616161
+615F5F5F5F5C57575757575755767F7F81878787878987847F7F7F7C79767474726E6A67615F5755
+554F55575D61666A6C6C7174747676797C7C7F7F8184848485878787878789898989898989898989
+89898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F92929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292928F8F8F929292929292928F8F8F8F92929292929292929292
+9292949494949494949499999A9A9A9A9A9A9A9994949494949492929292929292929292928F8F92
+929292929292928F8E8E8E8E8E8E8F929294949494969A9A9C9A9A999494949292928F8F8E8E8E8E
+8E8E8E8E8E8E8E8E898989878787878584848181818181858587878789898C8E8E8E8E8E8E8E8C8C
+8E8E8E8C898989898989898989878787847F7F7F7C7C7C7F7F7F7F7F818184848787878989897F87
+898C8F92928F8E8E8E8F94949A9A9A9A9A94949292928F8F8F929292929294949494949494949499
+9A9A9A99999A9A9C9C9A9A9A9C9C9C9C9C9C9C9A9A9A99999999999A9A9A9A9A9A9C9C9E9E9EA4A4
+A4A4A4A4A4A39E9E9E9E9E9E9E9E9EA1A3A4A3A19EA1A3A4A3A19EA1A3A4A3A19EA1A3A4A3A19E9E
+9E9E9E9EA19E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9994949494949494949494929292929292
+9292928F8F8E8E8E8E8E8E8E8E8C89898989898989898989878787858585858585858481817F7F7F
+7F7F7F7F7F7C7C7C7C7C7C79767676767474747474747472726C6C6C6C6C6A6A6A6A6A6767676661
+6161615F5F5F5C5757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7674747474
+74747474747474747272726E6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C727474747474
+747676767B7C7C7C7F7F7F7F8185858585858789898989898C8E8E8E8F9292929292929292949494
+949494949489929A9CA3A6ABB1B7BEC6C9CFD4D9DFE1E6ECECF2F4F4F7F7F9F9FAF9F9F7F7F4F2EE
+ECE7E6E1DFD9D9D4D1CFCCC9C6C6C4C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B6B3B3B3B3B3B1B1
+B1B1AEAEAEABA9A6A4A39E94897C72556C72767C818789898F9294949499999A9A9A9C9C9E9E9E9E
+9EA1A3A3A3A4A4A4A4A6A6A9A9A9A9A9A9ABABABABAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEABABABA9A9A6A4A4A19E9E9C949289877F79746C6A666161
+61615F5F5F5F5957575759595755797C7F84878787878787817F7F7C7B76767472716C6A665F5957
+55515455595F61676A6C7272747476797C7C7F7F8184858585858787878989898989898989898989
+89898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8F8F92929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292928F8E8E8F8F8F9292928F8F8E8E8F8F8F9292929292929292
+92929494949494949496999A9A9A9A9A9A9A99949494949494949292929292929292929292929292
+929292929292928F8E8E8E8E8E8F929294949494999A9A9C9C9C9A9A99999494949292929292928F
+8F8F8F929292928F8E8C898989898989898989878787878789898989898C8E8E8E8E8E8E8C898989
+8C8C89898989898989898987878787817F7F7C7C7C7C7C7C7F7F7F7F7F8184878787898989798587
+8C8E9292928E8E8E8E9294999A9A9A9A949492928F8F8E8E8F8F8F8F929292929492929292949494
+949999949494999A9A9A99999A9A999A9A9A9A9A9999949496999999999999999A9A9C9C9E9EA3A4
+A4A4A4A4A3A3A19E9E9E9E9E9E9E9E9EA1A3A19E9E9EA1A3A39E9E9EA1A3A39E9E9EA3A4A3A19E9E
+9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9994949494949494949494949292929292
+929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F
+7F7F7F7F7F7C7C7C7C7C7C7976767676747474747474747472716C6C6C6C6A6A6A6A6A6767676661
+6161615F5F5F5D5957575555554F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7674747474
+747474747474747474747272716C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C71727274747474747474
+7676767C7C7C7C7F7F7F7F818585858585878789898989898E8E8E8F929292929292929294949494
+94949494798C949C9EA4A6AEB1B9BEC6CCD1D9DCDFE4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F2EE
+ECE7E6E1DFD9D9D4D1CFCCC9C6C6C4C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B7B6B3B3B3B3B1B1
+B1B1B1AEAEAEABA9A6A49E9C9284766A676C74767C818587898C9292949494949494999A9C9C9C9C
+9E9E9E9E9E9EA1A3A4A4A6A6A6A6A6A9A9A9A9A9ABABAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEABABABA9A9A6A4A3A19E9C9A948F89847F76746C676461
+61615F5F5F5F5D595757575C5C5755797C7F87878787898784817F7F7C76767472726C6A67615F57
+57555155575D61676A6C7272747476767C7C7F7F7F81848585858787898989898989898989898989
+8989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8F8E8E8E8E8F8F9292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292928F8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8F92929292929292
+929292949494949494999A9A9A9A9A9A9A9A99949494949494929292929292929292929292929292
+9494949492928F8E8E8E8E8F92929294949496999A9A9C9C9C9C9C9C9A9A99949494949494949292
+92929292929292928F8E8E8E8E8C89898989898989898989898989898C8E8E8E8E8E8C8989898989
+8989898989898989898787878785817F7C7C79797C7C7C7C7C7C7F7F818485878789898989818789
+8E8F92928F8E8E8E929494999A9A9A999492928F8E8C8C8E8E8E8E8E8E8F92929292929292929294
+9494949492949499949694949494949494949494949494949494949494949699999A9C9C9C9EA1A4
+A3A3A1A19EA3A19E9E9E9E9E9E9E9E9E9EA1A19E9E9E9EA1A19E9E9E9EA3A19E9E9EA1A3A39E9E9E
+9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9994949494949494949494949292929292
+929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F7F
+7F7F7F7F7F7C7C7C7C7C7C7C76767676767474747474747472726C6C6C6C6A6A6A6A6A6767676761
+616161615F5F5F5C5757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7676747474
+747474747474747474747472727272727272716E6C6C6C717171716E727474747474747474767676
+76797C7C7C7C7F7F7F7F818585858585858789898989898E8E8E8E92929292929292929294949494
+94949494878F949C9EA4A9AEB3B9C1C6CCD3D9DCE1E4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F4F4F2EE
+ECE7E6E1DFD9D9D4D1CFCCCCC6C6C4C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B7B6B3B3B3B3B1B1
+B1B1B1B1AEAEAEA9A6A6A49E99897F725F6A6C72767C7F818787898F929292929294949499999A9C
+9C9C9C9C9E9E9E9E9EA3A4A6A6A6A6A6A6A6A6A9A9A9ABAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A6A6A4A49E9E9C99928E87817C76726C6761
+6161615F5F5F5F5D5C5957595D5C5957797C7F878787878787817F7F7C7976747472716C6A645F5C
+5755515555595F616A6C717274747676797C7C7F7F81848585858787878989898989898989898989
+8989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8E8F8E8E8E8E
+8F8F8F8F8E8F8F929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8F8E8E8E8E8F929292929292
+929292949494949494999A9A9A9A9A9A9A9994949494949494949294949492929292929292929494
+9494949292928F8E8E8E8E8F929294949999999A9C9C9C9C9C9C9C9C9C9A9A999994949494949494
+929292949494949292929292928F8E8C89898989898989898989898C8E8E8E8C8C89898989898989
+898989898989898787878784817F7C7C76767676767676797C7C7C7F81858787898989897F87898E
+8F92928F8E8E8E8F9294969A9A9A9A9492928F8E8C89898C8C8C8C89898E8F92928F8F8E8F8F9292
+9292929292929292929292929292928F9292929292929292929294949494949494999A9C9C9E9EA1
+A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA19E9E9E9EA1A19E9E9E
+9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9994949494949494949494929292929292
+92929292928F8E8E8E8E8E8E8E8E8E89898989898989898989898787858585858585858584817F7F
+7F7F7F7F7F7C7C7C7C7C7C7C79767676767474747474747472726E6C6C6C6C6A6A6A6A6A67676764
+616161615F5F5F5D5757575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7676767474
+74747474747474747474747474747474747272727272747472727274747474747474747476767676
+7C7C7C7C7C7F7F7F7F818585858585858787898989898E8E8E8E8F92929292929292929494949494
+949494948792999CA1A6A9B1B6B9C1C6CFD4D9DFE1E6E7ECF1F2F4F4F7F7F9F9FAF9F9F7F4F2F2EC
+ECE7E4E1DFD9D9D4D1CFCCCCC8C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B7B6B3B3B3B3B1B1
+B1B1B1B1B1AEAEAEA9A6A49E9C9287796C576A6E72747C7C7F848789898E8F8F929292929494969A
+9A9C9C9C9C9C9C9C9E9EA1A4A4A6A6A6A6A6A6A6A6A9A9ABAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1
+AEAEAEB1B1AEAEAEAEAEAEAEAEAEAEAEAEABABABA9A9A9A6A4A4A19E9C9C949289877F7C74726A66
+616161615F5F5F5F5D5C5C595C5F5D5C57767C81878787878785817F7C7C76747472726C6A67615D
+5757555455575D61676A6E7272747476797C7C7F7F81848585858587878989898989898989898989
+898989898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292928F8F8E8E8E8E8F8F8F8F8E8F
+8F9292928F8F92929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292928F8F8F8F8F8E8E8E8E8F8F8F8F8F8F8F929292929292
+92929294949494949496999A9A9A9A9A9A9994949494949494949494949494929292949494949494
+94949492928F8E8E8E8E8F929294969A9A9A9A9C9C9C9E9E9E9E9C9C9C9C9C9A9A99999696969494
+94929494949494929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+898989898987878787847F7F7C7B76747474747474747476797C7F818587878789898C7C87898E8F
+92928F8E8E8E8E929494999A9A9A9994928F8E8C8989898C8989898989898C8E8E8E8C898C8E8E8F
+928E8C8E8E8E8E8C89898C8E8E8C898989898C8C8C8E8E8E8F8F8F92929294949494999A9C9C9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9994949494949494949494929292929292
+92929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F
+7F7F7F7F7F7C7C7C7C7C7C7C7976767676747474747474747472716C6C6C6C6A6A6A6A6A67676766
+616161615F5F5F5D595757555555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7676767676
+7676767474747474747474747474747474747474747474747474747474747474747474767676767C
+7C7C7C7C7F7F7F7F818485858585858787898989898C8E8E8E8E8F92929292929292929494949494
+9494947689929A9CA3A6ABB1B7BEC1C8CFD4D9DFE1E6E7ECF2F4F4F4F7F9F9FAFAF9F9F7F4F2F1EC
+ECE7E4E1DFD9D9D4D3CFCFCCC8C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B7B6B3B3B3B3B3B1
+B1B1B1B1B1B1AEAEABA9A6A39C998E7F746A666A6C7274767C7F81878789898C8E8F8F9292929494
+99999A9A9A9C9C9C9C9C9EA1A4A4A4A6A6A6A6A6A6A6A9A9ABABABAEAEAEAEAEAEAEB1B1B1B1B1B1
+AEAEAEAEB1AEAEAEAEAEAEAEAEAEAEAEAEABABABA9A9A9A6A6A4A49E9E9C9A948E87877F7B74716A
+666161615F5F5F5F5F5D5D5C5C5D5F5F5D57797F848587878787847F7F7C76747472726C6C67615F
+5C5755555557595F616A6C7272747476797C7C7F7F7F818485858787878989898989898989898989
+8989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292929292928F8F8F8F8F9292928F8F
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929294949494929292929292929292929292928F8F8F9292928F8F92929292929292
+92929292949494949494999999999999999494949494949494949494949494949494949494949494
+94949292928F8E8E8E8F929294969A9A9A9A9C9C9C9E9E9E9E9E9E9C9C9C9C9C9A9A999999999994
+9494949494949494929292929292928F8F8F8F8F8E8E8E8E8E8E8E8C898989898987898989898989
+8989898987878784817F7C797674747271717172727476797C7F81858787878989897987898E8F92
+92928E8E8E8E8F9294999A9A9A9994928E8C898989898C8C8989898989898989898989898989898C
+8989878789898987878587878787858587878787898989898989898C8E9292929294949A9A9C9C9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9994949494949494949492929292929292
+92929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989898787878585858585858584817F7F
+7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767474747474747472726C6C6C6C6C6A6A6A6A67676766
+61616161615F5F5F5C5757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7676767676
+76767676747676767474747474747474747474747474747474747474747476767676767676797C7C
+7C7F7F7F7F7F7F818485858585858787898989898C8E8E8E8E8E9292929292929292949494949494
+949494848E949C9EA4A6AEB1B9BEC6CCCFD4D9DFE1E6ECECF2F4F4F7F7F9F9FAF9F9F7F7F4F2F1EC
+ECE7E4E1DFD9D9D4D3CFCFCCC8C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B6B6B6B3B3B3B1
+B1B1B1B1B1B1B1AEAEA9A6A49E9A94897F7461676A6C7274767B7C7F8487878989898C8E8F929294
+94949499999A9A9A9C9C9C9EA1A3A4A4A4A4A4A4A6A6A6A9A9ABABABAEAEAEAEAEAEAEB1B1B1B1B1
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABA9A9A6A6A6A6A4A19E9C9C94928987847F79746C
+6A666161615F5F5F5F5F5F5F5D5D5F5F5F5D574F7F848587878785817F7C79747472726E6C6A665F
+5D5957555555575D61676C7172747476797C7C7C7F7F818485878787878789898989898989898989
+89898C8E8E8E8E8E8E8E8F8F8E8E8E8E8F8F8F8E8E8E8F9292929292929292928F8F929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929494949494949492929292929292929292929292929292929292929292929292
+92929292949494949494949496999999999494949494949494949494949494949494949494949494
+949492928F8E8E8E8E929294999A9A9C9C9C9C9C9E9E9E9E9E9E9E9C9C9C9C9C9C9C9A9A9A9A9A9A
+999494949494949492929292929292929292928F8E8E8E8E8E8E8C89898987878787878989898989
+898989898787817F7C76747474716C6C6C6C6C7172767C7C7F81848787878989897485878C8E9292
+928F8E8E8E8F9294949A9A9A9994948F8C89898789898C8989898989898989898989878787878987
+87878481818484817F7F7F7C7C7C7F7F7F7F7F818184848787878789898C8F92929294949A9C9C9C
+9C9C9C9C9E9E9E9E9E9C9E9E9E9E9E9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A96949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8C898989898989898989898987878785858585858584817F7F
+7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676747474747474747472716C6C6C6C6A6A6A6A67676766
+61616161615F5F5F5D595757555554514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7979767676
+7676767676767676767474747474747474747474747474747474747676767676767676767C7C7C7C
+7F7F7F7F7F7F818485858585858787898989898C8E8E8E8E8E8F9292929292929294949494949494
+9494948792949C9EA4A9AEB3B9C0C6CCD1D9DCDFE1E7ECECF2F4F4F7F7F9F9FAF9F9F7F7F4F2F1EC
+ECE7E4E1DFD9D9D4D3CFCFCCC8C6C6C1C1C1C0C0BBBBBBBBBBBBB9B9B9B9B9B9B9B6B6B6B6B3B3B3
+B1B1B1B1B1B1B1B1AEAEA9A6A19C9992877C6C59676A6C6E7274767C7F818487878989898C8E8F92
+92949494949499999A9C9C9C9E9EA1A4A4A4A4A4A4A6A6A6A9A9ABABABAEAEAEAEAEAEAEB1B1B1AE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA9A9A9A6A6A6A6A4A39E9C9C9A948E8987817C7672
+6C67616161615F5F5F5F5F5F5F5F5D5F5F5F5D5C54818485878787847F7F7C76747472716C6A6761
+5F5C5755555757595F646A6E72727474767C7C7F7F7F818487878787878789898989898989898989
+898C8E8E8E8E8E8E8E8E8F928F8F8E8F8F92928F8F8F8F9292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929494949292949494949494949494949492929294949494949292929292929292929294929292
+92929292929494949494949494949494949494949494949494949494949494949494949494949494
+949292928F8E8E8F929294999A9C9C9C9C9C9C9E9EA1A1A1A19E9E9C9C9E9E9E9C9C9C9A9A9A9A9A
+9A999494949494949492929292929292929292928F8E8E8E8E8E8989898787878787898989898989
+8989898785817F797472726E6A6A6C6E72747476767C7C7F81848787878989898C8187898E8F9292
+928F8E8E8E9292949A9A9A999694928989878789898C8C8C89898989898989898987878787858481
+817F7F7F7F7C7C7C7C7C7C7B79797C7C7C7C7C7C7C7C7F7F818485878789898E8F929294949A9A9C
+9C9C9C9C9C9E9E9E9C9C9C9E9E9E9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9996949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E898989898989898989898987878785858585858585817F7F
+7F7F7F7F7F7F7C7C7C7C7C7C7C7C76767676767474747474747472726C6C6C6C6A6A6A6A67676767
+6161616161615F5F5F5C575757555554514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7976767676
+76767676767676767676767476767676747474747676767676767676767676767676767C7C7C7C7F
+7F7F7F7F7F818485858585858587898989898C8E8E8E8E8E8E8F9292929292929494949494949494
+9494798992999CA1A6A9AEB6B9C1C6CFD3D9DCDFE4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F2F1EC
+ECE7E4E1DFD9D9D4D3CFCFCCC8C6C6C4C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B7B6B6B6B6B3B3
+B3B1B1B1B1B1B1B1AEAEABA6A49E9C999287766A54676A6A6C7274767C7F7F818587878989898E8F
+9292929294949494999A9C9C9C9E9EA1A3A3A3A4A4A4A6A6A6A9A9A9ABABAEAEAEAEAEAEAEAEB1AE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA9A9A6A6A6A6A6A4A49E9E9C9A9492898987817C76
+726C67616161615F5F5F5F5F5F5F5F5F5F615F5D5D558184878787857F7F7C76747472716C6C6A61
+5F5D5957555757575F61676C72727474767C7C7F7F7F818487878787878989898989898989898989
+8C8E8E8E8E8E8E8E8E8F8F9292928F8F92929292928F929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494929292929494949492
+92929292929292949494949494949494949494949494949494949494949494969999949494949494
+9492928F8E8E8F929294969A9C9C9C9C9C9E9E9EA3A3A3A4A19E9E9E9E9E9E9E9C9C9C9C9C9C9C9A
+9A9994949494949494929292929292929292928F8E8E8E8E8E8C8989878787878789898C8C898989
+898987847F7C747271677274747474767676767C7C7C7F7F84858787878989897F87898E8F929292
+928E8E8E8F9294949A9A999994928E898787878989898C8C89898989898989898787848181817F7F
+7C7C7C7C7C79797979767676767676767676797979797C7C7F7F7F81848787898C8E8F929494999A
+9C9C9C9C9C9C9E9E9C9C9C9C9E9E9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9999949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E89898989898989898989898987878785858585858584817F
+7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767474747474747472726E6C6C6C6C6A6A6A6A676767
+6661616161615F5F5F5C575757555555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C79767676
+767676767676767676767676767676767676767676767676767676767676767676797C7C7C7C7F7F
+7F7F7F81818485858585858587898989898C8E8E8E8E8E8E8F929292929292929494949494949494
+94947F89949A9EA4A6ABB1B7BBC1C8CFD3D9DCE1E4E7ECF1F2F4F4F7F7F9F9FAF9F9F7F7F4F2F1EC
+ECE6E4E1DFD9D9D4D3CFCFCCC8C6C6C4C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B7B7B7B6B6B6B3
+B3B3B1B1B1B1B1B1AEAEAEA9A69E9C9A948F81746761676A6A6C7274767C7C7F818185878789898C
+8E8F92929292949494999A9C9C9C9E9E9E9E9EA3A3A4A4A6A6A6A6A9A9ABABAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABA9A9A9A6A6A6A6A6A4A4A39E9C9C99928E8987877F7C
+74726A666161615F5F5F5F5F5F5F5F5F5F61615F5F5F578184878787817F7C79747472726C6C6A66
+615F5C59575757575D5F666A6E72747476797C7F7F7F81848787878789898989898C89898989898C
+8E8E8E8E8E8E8E8E8F8F929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92949494949494949494949494949494949494949494949499949494949494949492929494949494
+94929292929292929494949494949494949494949494949494949494969999999A99949494949494
+9292928F8F8F929294949A9C9C9C9C9C9E9E9EA4A4A4A4A4A39E9E9E9E9E9E9E9C9C9C9C9C9C9C9C
+9A99999494949494949492929292929292928F8E8E8E8E8E8C89898987878789898C8E8E8C898989
+8787817F76727274767C7C7C7C7F7C7C7C7C7C7C7C7F7F7F818487878787877F87898E8F92929292
+8F8E8E8E8F92949A9A9A999494928987858789898989898E8C898989898989878784817F7F7F7F7C
+7C7C797676767676767676767676767676767676767676797C7C7C7F7F81878789898C8F92949499
+9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9C9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A999996949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E89898989898989898989898987878785858585858584817F
+7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767474747474747472716C6C6C6C6A6A6A6A676767
+6661616161615F5F5F5D595757555555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7B797979
+797976767676767676767676767676767676767676767676767676767676767C7C7C7C7C7C7F7F7F
+7F7F8484848585858585858789898989898E8E8E8E8E8E8F92929292929292949494949494949494
+9494848F949A9EA4A6AEB1B9BEC6C8CFD4D9DFE1E6E7ECF1F2F4F4F7F7F9F9FAF9F9F7F7F4F2F1EC
+ECE6E4E1DFD9D9D4D3CFCFCCC8C6C6C4C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B7B7B6B6B6
+B3B3B3B1B1B1B1B1B1AEAEABA6A49E9C9A94897F74616166676A6C727476797C7F7F818487878989
+898C8E8F8F9292929494999A9A9C9C9E9E9E9E9EA1A3A4A4A6A6A6A6A9A9ABABAEAEAEABAEAEAEAE
+AEAEAEAEAEABAEAEAEAEAEAEABAEAEAEAEABA9A9A9A6A6A6A6A6A6A4A49E9E9C9A94928E8989857F
+7C74716A666161615F5F5F5F5F5F5F5F5F5F61615F5F5F5781858787817F7F7C767472726C6C6A67
+615F5D5C57575757595F61676C72727474767C7F7F7F818487878789898989898C8C8E8C89898C8E
+8E8E8E8E8E8E8E8F8F92929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+94949494949494949494949494949494949494949494949999999994949494949494949494949494
+94949494929292929294949494949494949494949494949494949999999A9A9A9A99949494949494
+9292928F92929294949A9A9C9C9C9E9E9E9EA3A4A4A4A4A4A3A19E9E9E9E9E9E9E9C9C9C9C9C9C9C
+9A9A999494949494949492929292929292928F8E8E8E8E8C89898989898789898E8E8E8C89898787
+847F7C74667F7F8184818184858584817F7F7F7F7F7F7F7F8184858787877C87898E8F9292929292
+8F8E8E8E9294969A9A999494928C87878587878989898C8E8E8C8989898987878784817F7F7F7C7C
+7B79767676767676767676767676767676767676767676767676797C7C7F81878789898E8F929494
+999999999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A999994949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989898989878785858585858584817F
+7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767474747474747472726E6C6C6C6C6A6A6A6A6767
+676161616161615F5F5F5C575757555555544F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C797676767676767676767676767676767676767676767676767676797C7C7C7C7C7C7F7F7F7F
+7F8485858585858585858787898989898C8E8E8E8E8E8F9292929292929292949494949494949494
+947C8792949C9EA4A9AEB3B9BEC6CCCFD4D9DFE1E6E9ECF2F4F4F4F7F9F9FAFAF9F9F7F4F4F2F1EC
+E9E6E4E1DFD9D9D4D3CFCFCCC8C6C6C4C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B7B6B6
+B6B3B3B3B1B1B1B1B1AEAEABA9A6A39E9C9A948C81745F6166676A6C727476797C7C7F8184878787
+898989898C8E9292929494999A9A9C9C9E9E9E9E9EA1A3A4A4A4A6A6A6A9A9ABABABABABABAEAEAE
+AEAEABABABA9ABAEAEAEAEABABABABAEABABA9A9A6A6A6A6A6A6A6A4A4A19E9C9A9492928E898784
+7F79746C67646161615F5F5F5F5F5F5F61616161615F5F5F57558487847F7F7C767474726E6C6A6A
+615F5F5D5C575959575F61676A6C727474767C7F7F818184878789898989898C8C8E8E8E8C8C8C8E
+8E8E8E8E8E8E8F8F9292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9494949494949494949494949494949494949494949496999A9A9994949494949494949494949494
+9494949494949292949494949494949494949494949494999999999A9A9A9A9A9A99949494949492
+9292929292929494999A9C9C9E9E9E9E9E9EA3A4A4A4A4A4A4A3A1A1A1A39E9E9E9E9E9E9E9C9C9C
+9A9A999694949494949494929292929292928F8E8E8E8E898989898989898C8F8F8E8E8989878581
+7F76727C8185878787878787878585858584817F7F7F7F7F7F7F8181817C87898E8F929292929292
+8E8E8E8F92949A9A999494928F89878185878787898C8E8E8E8C8989898787878784817F7F7F7C7C
+7C7976767676767676767674747474747474747476767676767676767C7C7F81858789898E929294
+94969696969A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9C9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9C9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A99999694949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989898989878787858585858584817F
+7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676747474747474747472716C6C6C6C6A6A6A6A6767
+676661616161615F5F5F5D575757555555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C7C797676767676767676767676767676767676767676767679797C7C7C7C7C7C7F7F7F7F7F81
+848585858585858585878789898989898E8E8E8E8E8F929292929292929292949494949494949494
+947F8992999CA1A6A9AEB3B9C1C6CCD1D4D9DFE1E6ECECF2F4F4F7F7F9F9FAF9F9F7F7F4F4F2F1EC
+E7E6E1E1DFD9D9D4D3CFCFCCC8C6C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B7B7B6
+B6B6B3B3B3B1B1B1B1AEAEACABA6A49E9E9C9A948F84715D6161676A6C727474767C7C7F7F818485
+87878789898C8E8F92929494999A9A9C9C9E9E9E9E9E9EA1A4A4A4A6A6A6A9A9ABABA9A9A9ABABAB
+ABABABABA9A9A9ABABABABABA9ABABABABA9A9A9A6A6A6A6A6A6A6A4A4A39E9E9C999492928F8987
+847C76726C676161615F5F5F5F5F5F5F61616161616161615F595781847F7F7C79767472716C6C6A
+66615F5D5D59595C595D5F646A6C72747476797C7F8184858787898989898C8C8E8E8E8E8E8E8E8E
+8E8E8E8E8E8F8F929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9494949494949494949494949494949494949494949494999A9A9994949494949494949494949494
+9494949494949494949494949494949494949499999999999A9A9A9A9A9A9A9A9994949494949492
+92929292929494999A9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A4A3A3A3A4A39E9E9E9E9E9E9E9C9C9C
+9C9A9A9994949494949494929292929292928F8F8E8E8C89898989898C8E8F928F8E8C898785817C
+74747C8787898C8C89898787878785858481817F7F7F7F7C7C7C7C7C7C87898E8F9292929292928F
+8E8E8E9294969999949492928987848187878787898E8E8E8E898989878787878481817F7F7F7F7C
+7C7C7976767676767676747474747474747474747476767676747474767C7F7F818787898C8F9292
+9494949494969A9A9A9C9A9C9C9C9C9C9C9C9C9C9C9E9E9E9C9C9C9E9E9E9E9C9E9E9E9E9E9C9C9C
+9C9C9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A99999494949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989898989878787858585858584817F
+7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C76767676767474747474747472726C6C6C6C6A6A6A6A6A67
+67676161616161615F5F5F5C575757555555514F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C7C7C79797C7C7C797976767676767676767676767676767C7C7C7C7C7C7C7C7F7F7F7F7F8184
+8585858585858585878789898989898C8E8E8E8E8E92929292929292929294949494949494949494
+94858F949A9EA4A6ABB1B6BBC1C6CCD1D9DCDFE4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F4F2EEEC
+E7E6E1E1DFD9D9D4D3CFCFCCC8C6C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B7B7
+B6B6B3B3B3B3B1B1B1AEAEAEABA9A6A49E9C9C9A99927F6C5F6161676A6C71727476797C7F7F7F7F
+818487878789898E8F92929294969A9A9C9C9E9E9E9E9E9EA1A4A4A4A6A6A6A9A9A9A9A9A9A9A9A9
+A9A9A9A9A9A9A9A9A9ABA9A9A9A9A9ABABA9A9A6A6A6A6A6A6A6A6A4A4A39E9E9C9A949494928F89
+87817C74716A676161615F5F5F5F5F5F6161616161616161615F5D57817F7F7C7C767472716C6C6A
+67615F5F5F5D5C5C5C5C5F61676A6C727476797C7F81848587878989898C8C8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8F92929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9494949494949494949494949494949494949494949494999A9A9999949494949494949494949494
+94949494949494949494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A9994949494949292
+929292929494999A9C9C9E9E9E9E9EA1A1A3A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9E9E9E9C9C
+9C9A9A999494949494949494929292929292928F8E8E8C8C898C8E8F929292928F8E8987857F7B6C
+767F8789898C8C89898987878787858481817F7F7F7C7C7C7976767C87898E8F9292929292928F8E
+8E8E8F92949699969494928E87857F8187878789898C8E8E8C8989898787878481817F7F7F7C7C7C
+7C79767676767676747474747474747474747474747476747474747474767C7F7F848787898C8F92
+929494949494969A9A9A9A9A9C9C9C9C9A9C9C9C9C9C9E9E9C9C9C9E9E9E9C9C9C9E9E9E9E9C9C9C
+9C9C9C9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9999999494949494949494949492929292929292
+929292929292928E8E8E8E8E8E8E8E8E8C898989898989898989898989898787858585858584817F
+7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676747474747474747272716C6C6C6C6A6A6A6A67
+67676661616161615F5F5F5C575757555555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7979767676767679797979767C7C7C7C7C7C7C7C7C7F7F7F7F7F818585
+8585858585858587878989898989898E8E8E8E8E8F92929292929292929294949494949494949494
+7C8792949C9EA4A6AEB1B9BBC1C6CFD3D9DCDFE4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F4F2EEEC
+E7E6E1E1DFD9D9D4D3CFCFCCC8C6C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7
+B7B6B3B3B3B3B1B1B1AEAEAEAEA9A9A6A49E9E9C9A998F7C675F5F61676A6C6C727476767C7C7C7F
+7F7F8185878789898E8E8F92929496999A9A9C9C9E9E9E9E9EA1A4A4A4A6A6A6A6A6A6A6A6A9A6A6
+A6A6A6A6A6A6A6A6A9A9A9A9A6A6A9A9A9A9A9A6A6A6A6A6A6A6A6A4A4A39E9E9C9A96949494928E
+89857F79746C6A676161615F5F5F6161616166666464616161615F5F597F7F7C7C797472726C6C6A
+6A64615F5F5F5D5D5D5C5F61676A6C717474767C7F7F818487878989898C8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8F8F92929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929494949494949494949494949494949494949494949499999A9996949494949494949494949494
+949494949494949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A999494949494949292
+9292949494999A9C9C9E9E9EA1A1A3A3A3A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C
+9C9C9A99999494949494949492929292929292928F8F8F8F8F9292929292928F8E8987847C766E7C
+84878989898C898989898787878584817F7F7F7C7C7C7B7674747F87898C8F9292929292928F8E8E
+8E8E92949494999494928F8987817F848485878989898C8C8989878787858481817F7F7F7C7C7C79
+767676767676767474747474747474747474747474747474747474747476797C7F81848789898C8F
+929292929494949699999A9A9A9C9C9C9A9A9C9C9C9C9C9C9C9C9C9C9E9E9C9C9C9E9E9E9C9C9C9C
+9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949492929292929292
+929292929292928F8E8E8E8E8E8E8E8E8C898989898989898989898989898787858585858585817F
+7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767474747474747472716C6C6C6C6A6A6A6A67
+67676661616161615F5F5F5D595757555555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C797976797C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F81858585
+8585858585858787898989898989898E8E8E8E8F9292929292929292929494949494949494949494
+7F8992949C9EA4A9AEB1B9BEC1C8CFD3D9DCE1E4E7ECF1F2F4F4F7F7F9F9FAF9F9F7F7F4F4F2EEEC
+E7E6E1E1DFDCD9D4D3CFCFCCC8C6C6C6C1C1C1C0C0BBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9
+B7B6B3B3B3B3B3B1B1AEAEAEAEABA9A6A6A4A39E9C9C948974615F6161676A6C6C72747476797C7C
+7C7F7F818487878989898C8E9292949494999A9C9C9C9C9C9E9E9EA3A4A4A6A6A6A4A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A6A6A6A6A6A6A6A6A6A4A49E9E9C9C9A9494949492
+8987847C76726C6A676161615F5F616161616767666666666661615F5F594F7C7C7C7674726E6C6A
+6A66615F5F5F5F5F5D5D5F5F646A6A6C7274767C7C7F818487878789898C8E8E8E8E8E8E8E8E8E8E
+8E8E8E8F8F9292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292949494949494949494949494949494949494949496999994949494949494949494949494
+949494949494949494949494949494949496999A9A9A9A9A9A9A9A9A9A9A9A999494949494929292
+92949494949A9C9C9E9EA3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9C
+9C9C9A9A9994949494949494949292929292929292929292929292929292928F8C87817C6C747F81
+8789898C8C8C8989898787878584817F7F7F7C7976747472747F87898C8E8F92929292928F8E8E8E
+8E8F92949494949494928987817F81848485878989898989898787848181817F7F7F7F7C7C7C7976
+767676767674747474747474747474747474747474747474747474747474767C7C7F81878789898C
+8F929292929494949699999A9A9A9C9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9C9C9C9C
+9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A999996949494949494949494949494929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8989898989898989898989898987878585858585858181
+7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676767474747474747472726E6C6C6C6C6A6A6A6A
+6767676161616161615F5F5F5C575757555555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F8185858585
+85858585858787898989898989898E8E8E8E8F929292929292929292949494949494949494949494
+858F92999CA3A6A9AEB3B9BEC6C8CFD4D9DFE1E6E7ECF1F2F4F4F7F7F9F9FAF9F9F7F7F4F4F2EEEC
+E7E6E1E1DFDCD9D4D3CFCFCCC8C6C6C6C4C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B6B3B3B3B3B3B1B1AEAEAEAEACA9A6A6A6A4A49E9C9A9484715C5F61646A6A6C6C727474767679
+7C7C7C7F81848787878989898E9292949494969A9C9C9C9C9C9E9E9EA1A4A4A4A4A4A4A4A6A6A6A6
+A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A6A6A6A4A4A19E9C9C9A9694949492
+8E89877F7C74726C6A6661615F5F6161616166676767676767666161615F597C7C79767472716C6A
+6A6761615F5F5F5F5F5F5F5F61676A6C717274797C7F818485878789898C8E8E8E8E8E8E8E8E8E8E
+8E8E8E8F929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292928F9292929292929292928F9292929292929292929292929292929292929292929292
+92929292929292949494949494949494949494949494949494949494949494949494949494949494
+9494949494949494949494949499969696999A9A9A9A9A9A9A9A9A9A9A9A99969494949494929294
+949494949A9A9C9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9E9C9C9C9C9C
+9C9A9A9A99999494949494949492929292929292929292929294929292928F89877F7672767F8187
+898C8C8C8989898987878785817F7F7F7C7C767474726C768587898E8F8F9292929292928E8E8E8E
+8F92949494949494928E87847F7F818181858787878787878785817F7F7F7F7F7F7F7C7C7C797676
+76767676767674747474747474747474747474747476747474747474747474767C7F7F8487878989
+8C8E929292929494949499999A9A9C9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A999994949494949494949494949494929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8989898989898989898989898987878585858585858481
+7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676747474747474747472716C6C6C6C6A6A6A6A
+6767676661616161615F5F5F5D575757555555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F848585858585
+858587878787898989898989898E8E8E8E8F9292929292929292929494949494949494949494947C
+8992949A9EA4A6ABB1B6BBC0C6CCCFD4D9DFE1E6E9ECF2F4F4F4F7F9F9FAFAF9F9F7F4F4F4F2EEEC
+E7E6E1E1DFDCD9D4D1CFCFCCC8C6C6C6C4C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B6B3B3B3B3B3B1B1B1AEAEAEAEABA9A6A9A6A6A49E9C94927F6A5F5F6166676A6C6E7274747676
+797B7C7C7F7F848487878789898E8F92929294949A9A9C9C9C9C9C9C9EA1A4A39E9E9EA3A4A4A4A4
+A4A4A4A4A4A4A4A4A4A6A6A6A6A4A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A19E9C9C9C9A99999494
+8F8987857F7974716C6A616161615F6161616467676767676767666161615F597C79797674716C6C
+6A6766615F5F5F5F5F5F5F5F61676A6C6C7274767C7C7F818587878989898E8E8E8E8E8E8E8E8E8E
+8E8E8E8F929292929292929292929292929292929292929292929292929292929292929292929292
+8F929292928F8F8F8F8F92929292928F8F8F8F929292929292929292929292929292929292929292
+92929292929292929292949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949499999999999A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494949494
+949499999A9C9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9C9C9C9C9C9C
+9C9A9A9A9A9994949494949494949292929292929292949494949492928E89877F74747C7F818789
+8989898989898987878785817F7C7C7C797674726C727C87898C8F8F929292929292928F8E8E8E8F
+92929499949494929289857F7F7F7F7F818787878785848484817F7F7F7F7F7F7F7C7C7B79767676
+7676767676767474747474747474747474747676767676747474747474747476797C7F8185878789
+898C8F929292929494949499999A9A9A9A999A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A99999694949494949494949494949494929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8C89898989898989898989898987878585858585858481
+817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7B7676767676767474747474747472726C6C6C6C6C6A6A6A
+6A6767676161616161615F5F5F5C575757555555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F8184858585858585
+8587878787898989898989898E8E8E8E8E9292929292929292929494949494949494949494949481
+8C92949C9EA4A6AEB1B9BBC1C6CCD1D4D9DFE1E6ECECF2F4F4F7F7F9F9FAF9F9F7F7F4F4F4F2ECEC
+E7E6E1E1DFDCD9D4D3CFCFCCC8C6C6C6C4C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B7B3B3B3B3B3B1B1B1AEAEAEAEABA9A9A9A9A9A6A49E9A948C76645F616166676A6C7172747474
+7676797C7C7F81818184858787898C8F9292929494999A9A9A9C9C9C9C9E9E9E9E9C9C9E9EA1A1A1
+A3A1A19E9EA1A3A4A4A4A4A4A4A4A4A4A6A6A6A6A4A4A4A4A4A4A4A4A4A4A39E9C9C9C9A9A999494
+928E8987817C7674726C6761616161616166666667676767676767666161615F5776767674726C6C
+6A6A6761615F5F5F5F5F5F5F61666A6A6C717274797C7F818487878789898C8E8E8E8E8E8E8E8E8E
+8E8E8E8E8F92929292929292929292929292929292929292929292929292929292928F929292928F
+8F8F8F928F8F8E8E8E8F8F8F9292928F8E8E8E8F8F8F929292929292929292929292929292929292
+92929292929292929292929292949494949494949494949494949494949494949494949494949494
+949494949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A96949494949494949494
+96999A9A9C9C9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A19E9E9E9E9E9E9C9C9C9C9C9C
+9A9A9A9A9A99969494949494949492929294949494949494949492928E89877F71747C7F84878789
+89898989898987878785847F7F7C7C7676747274798487898F929292929292929292928F8E8E8E8F
+92949999969492928C87817F7F7F7F7F81878585848181817F7F7F7F7F7F7F7F7C7C7C7C79797676
+7676767674747474747474747474747474767676767676767474747474747476767C7C7F81878787
+89898E92929292929494949499999A9A9A99999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9A9A9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A99999494949494949494949494949494929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8C89898989898989898989898987878785858585858584
+817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7676767676767474747474747472726C6C6C6C6C6A6A6A
+6A6767676661616161615F5F5F5C575757555555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F818485858585858585
+87878787898989898989898E8E8E8E8E8F9292929292929292929494949494949494949494949487
+8F92999C9EA4A9AEB1B9BEC1C6CCD3D9DCDFE4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F4F2F2ECEC
+E7E6E1E1DFDCD9D4D3CFCFCCC8C6C6C6C4C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B7B6B3B3B3B3B1B1B1B1AEAEAEAEABA9A9A9ABA9A4A19C949287745F5F616166676A6C72727474
+7476767C7C7C7F817F7F81858787898C8E8F9292949494999A9A9A9A9A9C9C9C9C9C9C9C9C9E9E9E
+9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9C9C9C9C9A999494
+948F8989877F7C7674726C67616161616166676667676767676767676661615F5D57767674726E6C
+6A6A67666161615F5F5F5F5F6161676A6C6C7274767C7C7F8187878789898C8E8E8E8E8E8E8E8E8E
+8E8E8E8E8F8F9292929292928F9292929292929292929292929292928F929292928F8F8F8F928F8F
+8E8E8E8F8F8E8E8E8E8E8E8E8F8F8F8E8E8E8E8E8E8E8F8F8F929292929292929292929292929292
+92929292929292929292929292929292949494949494949494949494949494949494949494949494
+9494949494949499969494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949499
+999A9A9C9C9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1A1A19E9E9E9E9E9E9C9C9C9C9C9A9A
+9A9A9A9A9A9A9994949494949494949494949494949494949492928F89877C74747C7F8185878789
+89898989898987878584817F7F7C797674747C7F87898C9292929292929292929292928E8E8E8F92
+92949A999494928F87817F7F7F7F7F818485858581817F7F7F7F7F7F7F7F7C7C7C7C7C7C79767676
+767676767674747474747474747476767676767676767676767474747474747676797C7F81848787
+87898C8F929292929494949494999A9A999999999A9A9C9C9C9C9A9C9C9C9C9C9C9C9C9C9C9C9C9C
+9A9A9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9999969494949494949494949494949494929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989878785858585858584
+817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7976767676767674747474747472726E6C6C6C6C6A6A6A
+6A6767676661616161615F5F5F5D595757555555554F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7C7C7F7F7F7F7F7F7F7F81858585858585858587
+898987898989898989898E8E8E8E8E8E929292929292929292949494949494949494949494947C89
+8F949A9CA3A6A9AEB3B9BEC1C6CFD3D9DCE1E4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F4F2F2ECEC
+E7E6E1E1DFDCD9D4D3CFCFCCC8C6C6C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B7B6B3B3B3B3B1B1B1B1B1AEAEAEAEABABABABA9A6A49E9A948F816C6161616166676A6C727274
+747476797C7C7F7F7F7F7F8187878789898C8E8F9292949494969696999A9C9C9C9A9A9A9C9C9C9C
+9E9E9E9C9C9E9E9E9E9EA3A3A3A1A3A3A4A4A4A4A4A4A4A3A3A3A3A1A1A1A19E9C9C9C9A9A999494
+94928E8987847F797674716A67616161616467676767676767676767676661615F5C55767674726C
+6C6A6A676161616161615F616164676A6C6C717274767C7F818587878989898C8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8F8F9292928F8F8F8F929292929292928F929292928F8F8F8F928F8F8E8E8F8F8F8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F929292929292929292929292
+92929292929292929292929292929292929294949494949494949494949494949494949494949494
+9494949494949999999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A969494949494949499999A
+9A9A9C9C9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A
+9A9A9A9A9A9A99969494949494949494949494949494949494928F89877F76767C7F818587878989
+898989898987878784817F7F7F7C79797C7F8487898F9292949494949292929292928F8E8E8F9292
+94999A9494929289857F7F7F7C7F7F8181848584817F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676
+767676767676747474747474767676767676767676767676767674747474747676797C7C7F818587
+8789898E8F9292929294949494969999999694999A9A9A9C9C9C9A9A9C9C9C9C9A9C9C9C9C9C9C9A
+9A9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949494929292929292
+92929292929292928E8E8E8E8E8E8E8E8E8E8C898989898989898989898989878785858585858585
+84817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676767674747474747474726E6C6C6C6C6C6A6A
+6A6A6767676461616161615F5F5F5C575757555555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F8185858585858585878789
+8989898989898989898E8E8E8E8E8E8F92929292929292929294949494949494949494949494818C
+92949A9EA4A6ABB1B6BBC0C6C8CFD4D9DCE1E4E7ECF1F2F4F4F7F7F9F9FAF9F9F7F7F4F4F2F1ECEC
+E7E4E1E1DFDCD9D4D3CFCFCCC8C6C6C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B7B6B3B3B3B3B1B1B1B1B1B1AEAEAEAEABAEAEABA9A6A39C99928C7C6C6161616164676A6C7172
+747476797C7C7F7F7F7F7F81848787878989898E8F929294949494949494999A9A999A9A9A9A9C9C
+9C9C9C9C9C9C9C9E9E9E9E9E9E9E9EA1A3A4A4A3A3A1A19E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9694
+9492928C8987817C7C7674716A67646161616667676767676767676767676661615F59557474726E
+6C6A6A6766616161616161616166676A6C6C71727476797C7F848787898989898C8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E8F8F929292928F8F8F8F928F8F8E8E8F8F8F8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F929292929292929292
+92929292929292929292929292929292929292929294949494949492929294949494949494949494
+949494949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949699999A9A
+9A9C9C9E9EA1A1A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A
+9A9A9A9A9A9A9A9994949494949494949494949494949494928F89877F76797C7F81848787898989
+8989898987878784817F7F7F7F7F7F818587898E92929494949494929292929292928F8E8F929294
+949A999492928E87817C7C7C7F7F7F7F818181817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676
+7676767676767676767476767676767676767676767676767676767474747476797C7C7C7F7F8485
+8787898C8E8F9292929294949494969999949496999A9A9A9C9A9A9A9A9C9C9C9A9A9C9C9C9C9C9A
+9A9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A999996949494949494949494949494949492929292929292
+92929292929292928F8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989878785858585858585
+84817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C797676767676767674747474747472716C6C6C6C6C6A6A
+6A6A6767676661616161615F5F5F5D595757575555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F81848585858585858587878989
+89898989898989898E8E8E8E8E8E8E8F92929292929292929494949494949494949494949472878E
+92949C9EA4A6AEB1B7BBC1C6C9CFD4D9DFE1E6E7ECF2F2F4F4F7F7F9FAFAF9F9F7F7F4F4F2F1ECEC
+E7E4E1E1DFDCD9D4D3CFCFCCC8C6C6C6C6C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B7B6B3B3B3B3B3B1B1B1B1B1B1AEAEAEAEAEAEABA9A6A49E9C949289796C61616161666A6C6C71
+727476767B7C7C7F7F7F7F7F81858787898989898C8F92929294949494949496949999999A9A9A9A
+9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9EA1A1A19E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A999994
+9492928F8987857F7C7C76746C6A67616161666767676A6A6A6A6A6A6A6A676661615F5955747472
+6C6C6A6A67616161616161616166676A6A6C6E727274797C7F81878787898989898C8C8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8F8F8E8E8E8E8E8E8F8F928F8F8E8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F929292929292
+92929292929292929292929292929292929292929292929494949292929292929494949494949494
+9494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949499999A9A9A9C
+9C9C9E9EA3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9C9C9C9C9C9C9C9A9A9A9A9A
+9A9A9A9A9A9A9A99969496999999999999949494949494949289877F767C7F818485878787898989
+89898987878784818181818181848789898F9292949494949994949292929292928F8E8F92929294
+999A9494928F89847F7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C797676
+7676767676767676767676767676767676767676767676767676767674747476797C7C7C7C7F8184
+858789898E8E8F9292929294949494999494949499999A9A9A9A9A9A9A9C9C9A9A9A9C9C9C9C9A9A
+9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A999994949494949494949494949494949492929292929292
+92929292929292928F8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989878785858585858585
+8481817F7F7F7F7F7F7F7F7F7C7C7C7C7C797676767676767674747474747472716C6C6C6C6C6C6A
+6A6A6A67676761616161615F5F5F5F5C575757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7C7C7C7F7F7F7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585858585858787898989
+898989898989898E8E8E8E8E8E8E8F929292929292929292949494949494949494949494947C898F
+94999C9EA6A9AEB1B9BBC1C6CCCFD4D9DFE1E6ECECF2F4F4F4F7F9F9FAF9F9F7F7F4F4F4F2F1ECEC
+E7E4E1E1DFDCD9D4D3CFCFCCC8C6C6C6C6C4C1C1C0C0BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9
+B9B9B6B3B3B3B3B3B1B1B1B1B1B1B1AEAEAEAEAEAEABA9A6A49E9A948F877C7166616166676A6C6C
+71727476797C7C7C7F7F7F7F8184878787898989898C8F9292929292949494949494949999999A9A
+9A9A9A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A999994
+949292928E8987817F7F7C76726C6A666161646767676A6A6A6A6A6A6A6A6A676661615F59557472
+716C6A6A67666161616161616161676A6A6C6C727274767C7F818587878789898989898C8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F929292
+92929292929292929292929292929292929292929292929292929292929292929292949494949494
+9494949499999A9A9C9C9C9C9A9A9A9A9A9A9C9C9A9A9A9A9A9A9A999494949499999A9A9A9C9C9C
+9C9C9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A999999999A9A9A9A999494949494928F89877C767C7F81858787878989898989
+89898787878787878585858787898C8F929494949496999A94949492929292928F8E8E8F92929494
+999994928F89877F7C7C797C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976
+7676767676767676767676767676767676767676767676767676767674747676797C7C7C7C7F7F81
+848787898C8E8F8F9292929294949494949494949499999A9A9A9A999A9A9C9A9A9A9A9C9C9C9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999694949494949494949494949494949292929292929292
+929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989878787858585858585
+8584817F7F7F7F7F7F7F7F7F7C7C7C7C7C797676767676767674747474747472726C6C6C6C6C6C6A
+6A6A6A67676766616161615F5F5F5F5C575757575555554F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818585858585858585878789898989
+8989898989898E8E8E8E8E8E8E8F9292929292929292929294949494949494949494949494818992
+949A9CA3A6A9AEB3B9BEC1C6CCD1D4D9DFE1E6ECECF2F4F4F7F7F9F9FAF9F9F7F7F4F4F4F2EEECE9
+E7E4E1E1DFDCD9D4D3D1CFCCC9C8C6C6C6C4C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9
+B9B9B6B6B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEABA9A6A6A39C99928C897F7467616167676A6C
+6C72747676797C7C7C7F7F7F818485878789898989898E8F92929292929294949494949494969999
+9A9A9A9A9A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A99999694
+949292928F8C8987817F7F7C74726C6A666161666767676A6A6A6A6A6A6A6A6A676661615F575472
+726C6C6A6A67666464616161616166676A6C6C71727476797C7F848787878787898989898C8C8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F
+9292929292929292928F929292929292929292929292929292929292929292929292929294949494
+94949496999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A99949699999A9A9A9A9C9C9C9C
+9C9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949292928E89877C747C7F8185878789898989898989
+8989898787878787878787898E9292949494999A9A9A9A99949492929292928F8E8E8E9292949499
+999494928C89817C79767C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7B767676
+7676767676767676767676767676767676767676767676767676767676767676797C7C7C7C7C7F81
+81848789898C8E8F8F92929292949494949494949494999A9A9A9A999A9A9A9A9A9A9A9A9C9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494949494949494949494949494949292929292929292
+929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989878787858585858585
+858481817F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676767676747474747472726C6C6C6C6C6C6A
+6A6A6A67676766616161615F5F5F5F5D595757575755554F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585858585858587878989898989
+89898989898E8E8E8E8E8E8E8F929292929292929292929494949494949494949494949476878E92
+949A9EA4A6ABB1B6BBC0C4C6CCD3D9DCDFE4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F4F2F2EEECE7
+E6E4E1E1DFDCD9D4D3D1CFCCC9C8C6C6C6C4C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9
+B9B9B6B6B6B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEA9A9A6A49E9C94928E8984766A6164676A6A
+6C6C72747676797C7C7C7F7F7F8184878789898989898C8E8F929292929292929494949494949496
+9999999A9A9A9A9C9C9C9C9C9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A99999494
+94949292928E898785817F7C7674716A676161666767676A6A6A6A6C6C6C6C6A6A676661615F5754
+72716C6C6A67666666666664646166676A6A6C6E727274797C7F8184858787878789898989898C8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F
+8F8F8F92929292928F8F8F8F8F929292929292929292929292929292929292929292929292949494
+949494999A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9999999A9A9A9A9C9C9C9C9C9C
+9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A19E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949492928E898579747C7F818587878989898989898989
+89898987878989898989898F92949496999A9C9C9C9A9A999494929292928F8E8E8E8F9294949494
+9994928E89877F79767C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7B797676
+7676797C7C797679797976767676767676767676767676767676767676767676767C7C7C7C7C7F7F
+8184878789898C8E8F8F92929294949494949494949496999A9A9999999A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999969494949494949494949494949494949292929292929292
+9292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898787858585858585
+858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676767676747474747472726E6C6C6C6C6C6C
+6A6A6A6A67676764616161615F5F5F5F5C575757575555544F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858585858585858787898989898989
+898989898E8E8E8E8E8E8E8F9292929292929292929294949494949494949494949494947C898F92
+949C9EA4A6AEB1B7BBC0C6C8CFD3D9DCE1E4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F4F2F2EEECE7
+E6E4E1E1DFDCD9D4D4D1CFCCCCC8C6C6C6C4C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9
+B9B9B7B6B6B6B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEABA9A6A6A49E9C9492928E877C72675D676A
+6A6C6E72747676797C7C7C7F7F818487878789898989898C8E8F9292929292929292949494949494
+94969999999A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A999999949494
+9494929292928C898785817F7C76726C6A6764616767676A6A6A6A6A6C6C6C6C6A6A676661615F57
+51726C6C6A6A676766666666666666676A6A6C6C727274767C7C7F8184858787878989898989898E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8F8F8F8F928F8F8E8E8E8E8F8F8F9292929292928F8F8F929292929292929292929292929494
+949499999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9E9E
+9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9C9C9C9C9A9A9A9A999494928F8C878179747C7F8185858787898989898989898C
+89898989898C8E8C8C8E929494999A9A9C9C9E9C9C9A99949492929292928E8E8E8E929494949494
+9492928987817C767C7C7C7C7F7F7F7F7F7F7F81818181817F7F8181817F7F7F7F7F7C7C7C7C7979
+797C7C7C7C7C79797C7C7976767676767676767676767676767676767676767679797C7C7C7C7F7F
+818185878989898C8E8F92929292949494949494949494999999999699999A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949494949292929292929292
+9292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898787878585858585
+858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6C6C
+6A6A6A6A67676766616161615F5F5F5F5D595757575755554F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585858585858587878789898989898989
+8989898E8E8E8E8E8E8E8F9292929292929292929294949494949494949494949494949481899294
+999CA1A6A9AEB1B9BBC1C6C8CFD4D9DEE1E4E7ECEEF2F4F4F7F7F9F9FAF9F9F7F7F4F4F2F1ECECE7
+E6E4E1E1DFDCD9D4D4D1CFCFCCC8C6C6C6C4C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9
+B9B9B7B7B6B6B6B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEA9A6A6A4A49E9C999492928E877C72675F
+6A6A6C7274747676797C7C7F7F8184858787898989898C8E8E8F9292929292929292929294949494
+949494949999999A9A9A9A9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9C9A99949699949494
+9494929292928F89878785817F7C74726C6A6666666767676A6A6A6A6C6C6C6C6C6A6A676661615D
+57516E6C6C6A6A676767676767666667676A6C6C71727476797C7F7F81848487878989898989898C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8F8F8F8E8E8E8E8E8E8E8F8F8F9292928F8F8E8F8F8F92929292929292929292929494
+9494999A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E
+9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9C9C9C9C9C9C9C9C9A9A9A9A9694928F89877F7674797F818585878789898989898C8C8E8E
+8E8E8C8E8F8F8F8F8F9294999A9C9C9C9E9E9C9C9C9A999494929292928F8E8E8E8F929494949494
+94928E89857C767C7C7C7C7F7F7F7F7F81818484858584818184848481817F7F7F7F7F7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C79767676767676767676767676767676767676797979797C7C7C7C7C7F
+7F818487878989898C8E8F929292929494949494949494949999999494999A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A999996949494949494949494949494949494949292929292929292
+9292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898787878585858585
+85858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676767676747474747472726C6C6C6C6C6C
+6C6A6A6A6A676767616161615F5F5F5F5F5C575757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858585858585858787898989898989898989
+89898E8E8E8E8E8E8E8F9292929292929292929294949494949494949494949494949476878C9294
+9A9CA3A6A9AEB3B9BBC1C6C9CFD4D9DFE1E6E7ECEEF2F4F4F7F9F9FAFAF9F9F7F4F4F4F2F1ECECE7
+E6E4E1E1DFDCD9D4D4D3CFCFCCC8C6C6C6C6C1C1C1C0BEBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9
+B9B9B9B7B7B6B6B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEABA9A6A6A4A49E9C9A949492928E877C76
+7164576C7274747676797C7F7F7F818487878989898C8E8E8E8F9292929292929292929292929494
+9494949494949999999A9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494
+949492929292928E898787857F7C7974716C6767676767676A6A6A6A6C6C6C6E6C6C6A6A6A66615F
+5C57516C6C6A6A676767676767676767676A6C6C71727474767C7C7F7F818487878789898989898C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8F8F9292929292929292929494
+9499999A9A9A9A9C9C9C9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9E9E9E9E
+9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9C9C9C9C9C9C9C9C9C9A9A9994928E89877F7674767C8185858787898989898C8E8F8F9292
+928F92929292929292949A9C9C9C9E9E9E9E9C9C9A9A949492929292928F8E8E8E92949494949494
+928F89877F76767C7C7C7C7F7F818184848585858585858485858585848481817F7F7F7C7C7C7F7F
+7F7F7F7F7F7C7C7C7C7C7C7C76797976767676767676767676767676797979797C7C7C7C7C7C7C7F
+7F818487878989898C8E8E8F929292929494949494949494949996949494999A9A9A9A9A9A9A9A9A
+9A9A9A9A9A999A9A9A9A9A9A9A999994949494949494949494949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898987878785858585
+85858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C76767676767676767474747472726E6C6C6C6C6C
+6C6A6A6A6A676767666161615F5F5F5F5F5D575757575555554F4F4F4F4F4F4F4F4F4F4F4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F81817F8184858585858585878585878789898989898989898989
+898E8E8E8E8E8E8E8F92929292929292929292949494949494949494949494949494947C898F9294
+9A9EA4A6ABB1B6B9BEC1C6CCCFD4D9DFE1E6E7ECEEF2F4F7F7F9F9FAF9F9F7F7F4F4F4F2EEECECE7
+E6E4E1E1DFDCD9D9D4D3CFCFCCC8C6C6C6C6C1C1C1C0BEBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9
+B9B9B9B9B7B7B6B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEABA9A6A6A6A4A4A19C9C9A99949292928F
+897F746E665774747676797C7F7F818487878789898C8E8E8E8E8F92929292929292929292929292
+94949494949494949999999A9A9A9A9A9A9999999999999999999999999999999994949494949494
+949492929292928F8C898787847F7C76746E6A67676767676A6A6A6A6A6C7171716C6C6C6A6A6661
+5F5C576C6C6C6A6A67676767676767676A6A6C6C71727474767C7C7F7F8184858787898989898989
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F9292929292929294
+9494999A9A9A9A9C9C9C9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9E9E9E9EA1
+A3A3A4A4A4A4A4A4A4A4A4A6A4A4A4A39E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9C9C9C9C9C9C9C9C9C9C9A9494928E89857F7674767C7F848587878989898C8E8F9292929292
+9292929494949494999A9C9E9E9E9E9E9E9E9C9C9A999492929292928F8E8E8E8F92949494949494
+928E89857C747C7C7C7C7F7F81848787878785858587878585858585858484817F7F7C7C7F7F8481
+7F7F7F7F7F7F7F7C7C7C7C7C7979797976767676767676767676797979797C7C7C7C7C7C7C7C7C7F
+7F81848787878989898C8E8F8F929292929494949494949494969494949499999A9A9A9A9A9A9A9A
+9A9A9A9A9A999A9A9A9A9A9A99999694949494949494949494949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898987878785858585
+8585858581817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676767676747474747472716C6C6C6C6C
+6C6C6A6A6A6A676767616161615F5F5F5F5F59575757575555514F4F4F4F4F4F4F4F4F4F4FFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F81848181848585858585858787878787898989898989898989898C
+8E8E8E8E8E8E8E8F9292929292929292929292949494949494949494949494949494948189929499
+9C9EA4A6AEB1B6BBC0C1C6CCD1D7D9DFE1E6E7ECF1F2F4F7F7F9F9FAF9F9F7F7F4F4F2F2EEECECE7
+E6E4E1DFDFDCD9D9D4D3CFCFCCC8C6C6C6C6C1C1C1C0BEBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9
+B9B9B9B9B9B7B7B6B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEAEA9A9A6A6A6A4A4A49E9E9C9A99949494
+94949492897F715F7476767C7C7F7F818487878989898C8C8E8E8F8F929292929292929292929292
+929294949494949494949999999A9A99999694949494949494949494949494949494949494949494
+94929292929292928F89898987817F7C76726C6A67676767676A6A6A6A6C6C7272716C6C6C6C6A66
+615F5C576C6C6C6A676767676767676A6A6A6C6C72727474767C7C7F7F7F81848787898989898989
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C89
+8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8E8E8F8F8F929292929292
+949494999A9A9A9A9C9C9C9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9E9EA1A3A3
+A4A4A4A4A4A4A4A4A6A6A6A6A4A4A4A39E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9C9C9C9C9E9C9C9C9C9A9492928E89857F7674767C7F848587878989898E8F92929294949494
+949494949499999A9C9C9E9E9EA1A19E9E9E9C9C99949292929292928F8E8E8F9294949494949492
+8F89877F747C7C7C7C7F7F8187878787878787878787878785878787878784817F7F7F8187878784
+818181817F7F7F7C7C7C7C7C7C7B7C7C7976767676767676797979797C7C7C7C7C7C7C7C7C7C7C7F
+7F8181858787878989898C8E8F8F929292949494949494949494949494949499999A9A9A9A9A9A9A
+9A9A9A9A9999999A9A9A9A9A99999494949494949494949494949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989878787858585
+8585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7B76767676767676747474747472726E6C6C6C6C
+6C6C6A6A6A6A676767666161615F5F5F5F5F5C575757575555544F4F4F4F4F4F4F4F4F4F4F4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F818485848485858585858587878787878789898989898989898989898E
+8E8E8E8E8E8E8E92929292929292929292929294949494949494949494949494949479878C92949A
+9C9EA4A9AEB1B7BBC0C4C6CCD3D9DCDFE4E7E9ECF1F2F4F7F7F9F9FAF9F9F7F7F4F4F4F2EEECECE7
+E6E4E1DFDFDCD9D9D4D3D1CFCCC8C6C6C6C6C4C1C1C0C0BEBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9
+B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEABA9A6A6A6A6A4A4A4A4A39E9C9C9A9A
+9A9999999996927F715974767C7F7F7F81848789898989898C8E8E8F8F9292929292929292929292
+92929294949494949494949499999999949494949494949494949494949494949494949292929294
+9292929292929292928E898987847F7F7C74726C6A6A6A6A6A6A6A6A6A6C6C717272716C6C6C6C6A
+66615F5C556C6C6A6A676767676767676A6A6C6C72727476767C7C7C7F7F81848787878989898989
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989
+89898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8C8C898C8C8E8E8F8F8F92929292
+9294949499999A9A9C9C9C9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9E9EA3A4A4
+A4A4A4A4A4A6A6A6A6A6A6A6A4A4A3A19E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9C9C9C9C9C9C9C9C9C9A9694928E89857F7674767C7F8185858789898C8E929294949494999494
+9496999A9A9A9C9C9E9EA1A3A4A4A4A3A39E9C9A94949292929292928E8E8F929494949494949492
+8C898176767C7C7C7F818487878789898787878787878787878787878787817F818185878C898787
+85848484817F7F7F7C7C7C7C7C7C7C7C7C7976767676797979797C7C7C7C7C7C7C7C7C7C7C7F7F7F
+7F7F8184878787898989898C8E8F929292929494949494949494949494949494999A9A9A9A999A9A
+9A9A9A9A999999999A9A9A9999969494949494949494949494949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989878787858585
+858585858481817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676767676747474747472716C6C6C6C
+6C6C6A6A6A6A67676766616161615F5F5F5F5D595757575755554F4F4F4F4F4F4F4F4F4F4F4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F817F7F7F
+7F7F7F7F7F817F7F7F81848585858585858585858587878987878989898989898989898989898C8E
+8E8E8E8E8E8E8F9292929292929292929292949494949494949494949494949494947C898E92949A
+9C9EA4A9AEB1B9BBC1C6C8CFD3D9DCE1E4E7ECECF1F2F4F7F7F9F9FAF9F9F7F7F4F4F4F2EEECECE7
+E6E4E1DFDFDCD9D9D4D3D1CFCCC9C8C6C6C6C4C1C1C1C0BEBEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9
+B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEABA9A9A9A6A6A6A6A6A6A6A4A4A19E9E
+9E9C9C9C9C9C9A96927C6774797C7F7F7F81878787898989898C8E8E8E8F8F929292929292929292
+92929294949494949494949494949994949494949494949494949494949492929292929292929292
+9292929292929292928F8E898987817F7F7974726C6A6A6A6A6A6A6A6A6A6C71727272716E716E6C
+6A67615F5C556C6C6A6A6767676767676A6A6C6C7272747476797C7C7F7F81848587878989898989
+898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989
+89898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898C8E8C898989898C8C8E8E8F8F8F9292
+92929294949496999A9C9C9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9E9EA1A4A4A4
+A4A4A4A6A6A6A6A6A6A6A6A4A4A39E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9C9C9C9C9A9A9A9A9994928E89857F7976767C7F8185858789898C8F9292949496999A9A9999
+9A9A9A9C9C9C9C9E9EA4A4A4A4A4A4A4A19E9C9A949292929292928F8E8E9292949494949494928E
+89877C7479797F7F848787898989898989878989898989898989898787858181848789928F898987
+8787878584817F7F7F7C7C7C7C7C7C7C7C797676797979797B7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F
+7F7F818485878787898989898E8E8F929292929494949492949494949494949496999A9A9999999A
+9A9A9A99999694999A9A9A9999949494949494949494949494949494949494949492929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989898787858585
+858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676767676747474747472726C6C6C6C
+6C6C6C6A6A6A6A676767646161615F5F5F5F5F5C575757575555544F4F4F4F4F4F4F4F4F4F4FFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF817F7F8181
+817F7F81848181818485858585858585858585878787898989898989898989898989898989898E8E
+8E8E8E8E8E8E9292929292929292929292929494949494949494949494949494947481898F94999C
+9EA1A6A9AEB3B9BBC1C6C8CFD4D9DFE1E6E7ECECF1F2F4F7F7F9F9FAF9F9F7F7F4F4F4F2EEECECE7
+E6E4E1DFDFDCD9D9D4D3D1CFCCC9C8C6C6C6C4C1C1C1C0BEBEBEBEBBBBBBBBBBBBB9B9B9B9B9B9B9
+B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEABABA9A9A6A6A6A6A6A6A6A6A6A4A4
+A4A3A1A19E9E9C9C9A947C61767C7C7F7F7F848787878989898C8E8E8E8E8F929292929292929292
+929292949494949494949494949494949494949292929292929292929292929292929292928F8F92
+929292929292929292928F8C898987817F7C7674726C6A6A6A6A6A6A6A6A6C6C727272727172726E
+6C6A67665F59546C6A6A6A67676767676A6A6C6C7272747476797C7C7F7F7F818487878989898989
+898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+8989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E
+8E8E8E8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8C8C898989898989898989898989898C8E8E8F8F8F
+9292929292949494949A9A9C9C9C9C9C9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9E9EA3A4A4A4
+A4A4A6A6A6A6A6A6A6A6A4A4A39E9E9E9E9C9C9C9A9A9A9A999999999A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9C9C9C9A9A99999494928E89877F7C76767C7C7F8585858789898F92949494999A9A9C9A9A9A
+9C9C9C9C9C9E9EA1A4A4A4A6A6A6A4A39E9C9C99949292929292928F8E8F92949494949494928F89
+877F7476767F8187878989898989898989898989898C8C898989898987858487878C9294928E8989
+8987878784817F7F7F7C7C7C7C7C7C7C7C7C797979797B7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F
+7F7F818485858787878989898C8E8E8F929292929494929294949494949494949499999A9999999A
+9A9A9A9999949499999A999996949494949494949494949494949494949494949492929292929292
+929292929292928E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989898787858585
+858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676767676747474747472716C6C6C
+6C6C6C6A6A6A6A676767666161615F5F5F5F5F5D595757575555554F4F4F4F4F4F4F4F4F4F4F4FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8181848484
+818184858584848585858585858585858585878787898989898989898989898989898989898C8E8E
+8E8E8E8E8E8F9292929292929292929292949494949494949494949494949494947C878C9294999C
+9EA3A6ABB1B3B9BBC1C6CCCFD4D9DFE1E6E7ECECF1F2F4F7F9F9FAFAF9F9F7F7F7F4F4F2EEECECE7
+E6E4E1DFDFDCD9D9D4D3D1CFCCCCC8C6C6C6C4C1C1C1C0C0C0BEBEBBBBBBBBBBBBB9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEABABABA9A9A9A9A9A9A9A9A9A9A9A9
+A6A6A6A6A4A39E9C9C9A8F746A767C7C7F7F81848787878989898E8E8E8E8F929292929292929292
+92929292949494949494949494949494949492929292929292929292928F8F8F8F8F8F8E8E8E8E8F
+9292928F8F9292929292928E89898784817F7C7674726C6A6A6A6A6A6A6A6C6C7172747272727272
+6E6C6A6A665F57516C6C6A6A676767676A6A6C6C7172747476767C7C7C7F7F818487878789898989
+898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+8989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F
+8E8E8E8E8E8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898C8E8E8F
+8F8F9292929292949494999A9A9A9A9A9A96999A9A9A9A9A9C9C9C9C9C9C9C9C9E9E9E9EA3A4A4A4
+A4A4A6A6A6A6A6A6A4A4A4A39E9E9E9E9E9C9C9A9A999999969496999A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9994949494928F8987817C79767C7C7F8485858789898E929494999A9A9C9C9C9C9C9C
+9C9C9E9E9E9EA3A4A6A6A6A6A6A4A49E9E9C9A949292929292928F8F8F9292949494949492928E89
+847976767C8187898989898C8C8C89898989898C8E8E8E8C89898987878587878C929A9494928E8C
+898787878584817F7F7F7C7C7C7C7C7C7C7C7B79797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F81848585878787878989898C8E8F8F9292929494929292949494949494949494999999949699
+9A9A9999969494949999999994949494949494949494949494949494949494949492929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989898787858585
+858585858585817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767676767676747474747472726C6C6C
+6C6C6C6C6A6A6A6A676767616161615F5F5F5F5F5C575757575555514F4F4F4F4F4F4F4F4F4F4FFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8485858585
+848585858585858585858585858585858787878989898989898989898989898989898989898E8E8E
+8E8E8E8E8E8F9292929292929292929294949494949494949494949494949494947F898E92949A9C
+9EA4A6AEB1B6B9BEC1C6CCD1D4D9DFE1E6E7ECECF1F2F4F7F9F9FAFAF9F9F9F7F7F4F4F2EEECECE7
+E6E4E1DFDFDCD9D9D4D3D1CFCFCCC8C6C6C6C4C1C1C1C0C0C0C0C0BBBBBBBBBBBBBBB9B9B9B9B9B9
+B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEABABABA9A9A9A9A9A9A9A9A9ABAB
+AEABA9A9A6A6A4A19E9C9989766E797C7C7C7F818587878789898C8E8E8F8F929292929292929292
+929292929494949494949494949494949494929292928F8F8F8F8F8F8F8E8E8E8C8C8C8C8C8C8C8C
+8F92928F8E8F92929292928E8989898784817F7C7474716C6C6C6C6C6C6C6C6C7172747472727272
+726E6C6A6A665F574F6C6C6A6A6A6A6A6A6A6A6C6E7272747476797C7C7F81818485878789898989
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8E8F9292928F
+8F8F8F8E8F8F929292928F8F8F8E8E8E8E8E8E8E8C89898989898989898989898989898989898C8E
+8E8F8F8F9292929292949494999999969494999A9A9A9A9A9C9C9C9C9C9E9E9E9E9E9EA1A4A4A4A4
+A4A4A6A6A6A6A4A4A4A4A39E9E9E9E9C9C9C9C9A999994949494949999999999999A9A9A9A9A9A9A
+9A9A9A9A9994949292928E8987817F7C767C7C7F8185858587898C929294999A9C9C9C9C9C9C9C9C
+9E9E9E9EA1A4A4A6A6A6A6A6A6A4A19E9C9C9994929292929292928F9292949494949494928F8987
+7C7476797F848989898C8E8E8E8E8C898C8E8E8E8F8F8E8E8C89898787878789929A9C9A9492928F
+89898787878481817F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F81858585878787898989898C8E8F9292929292929292929494949494949494969996949499
+999A9999949494949699999494949494949494949494949494949494949494949492929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898787878585
+85858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C76767676767676767474747472726E6C6C
+6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5D575757575555554F4F4F4F4F4F4F4F4F4F4F4F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585858585
+8585858585858585858585858585858787878989898989898989898989898989898989898E8E8E8E
+8E8E8E8E8F9292929292929292929294949494949494949494949494949494947681898F94969A9C
+9EA4A6AEB1B7BBC0C1C6CCD1D9DCDFE1E6E7ECECF2F2F4F7F9F9FAFAFAF9F9F7F7F4F4F2EEECECE7
+E6E4E1DFDFDCD9D9D4D3D1CFCFCCC8C6C6C6C6C1C1C1C0C0C0C0C0BBBBBBBBBBBBBBB9B9B9B9B9B9
+B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEAEAEAEABABAEAEAEAEABABABABAEAE
+AEAEAEAEABA9A6A4A39C9A94877C746C7C7C7C7F8187878789898C8E8E8F92929292929292929292
+929292929292949494949494949494949492929292928F8E8E8E8E8E8E8989898989898989898989
+8C8E8F8E8C8E92929292928F8C89898787847F7C797472716C6C6C6C6C6C6C6C6C72727474727474
+72726E6C6A67615F574F6C6C6A6A6A6A6A6A6A6C6C7272747476797C7C7F8181848487878989898C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+898C898989898C8E8E8E8E8E8E8E8F8F8E8E8E8E8E8E8E8E8F8E8E8E8E8F92928F8F8F9292929292
+92928F8F8F92929292929292928F8F8F8E8E8E8E8E8989898989898989898989898989898989898C
+8E8E8E8F8F8F929292929294949494949496999A9A9A9A9C9C9C9C9E9E9E9E9E9E9E9EA3A4A4A4A4
+A4A4A6A4A4A4A4A4A4A49E9E9C9C9C9C9C9C9A9A999494949494949499969494999A9A9A9A9A9A9A
+9A9A999494949292928E8987847F7C797C7F7F818585858787898F9294999A9C9C9C9E9E9C9C9C9E
+9EA1A3A4A4A4A6A6A6A6A6A6A4A39E9C9C9A949492929292929292929294949494949494928C897F
+7476767F8187898C8E8E8F8F8F8E8E8E8F92928F928F8F8E89898787878989929A9E9C9C9A94928F
+8C898987878784817F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F8184858585878789898989898E8E8F92929292929292929494949494949494949994949494
+99999996949494949499999494949494949494949494949494949494949494949492929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898987878585
+85858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676767676747474747472716C6C
+6C6C6C6C6C6A6A6A6A676767616161615F5F5F5F5F59575757575555514F4F4F4F4F4F4F4F4F4F4F
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585858585
+85858585858585858585858585878787898989898989898989898989898989898989898E8E8E8E8E
+8E8E8E8F929292929292929292929494949494949494949494949494949494947C87899294999C9E
+9EA4A9AEB1B9BBC0C6C8CFD3D9DCDFE4E7E9ECEEF2F4F7F7F9F9FAFAFAF9F9F7F7F4F4F2EEECECE7
+E6E4E1DFDFDCD9D9D4D3D3CFCFCCC8C6C6C6C6C1C1C1C1C1C0C0C0BEBBBBBBBBBBBBB9B9B9B9B9B9
+B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEABAEAEAEAEAEAEABAEAEAE
+AEAEB1AEAEAEA9A6A49E9C9A94897F76724F7C7F818587878989898E8F8F92929292929292929292
+9292929292929292949494949494949492929292928F8F8E8C8C8C8C898989898989898989898989
+89898C8E898C8F929292928F8E8989898787817F7C767472716C6C6C6C6C6C6C6C71727474747474
+7472726E6C6A67615D556C6C6C6A6A6A6A6A6A6C6C7172747476797C7F7F8184848587878789898C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+8C8E8E8C8C8C8E8E8F8E8E8E8E8F92928F8F8F8E8E8E8E8F8F8F8F8F8F8F92929292929292929292
+9292929292929292929292929292928F8F928F8F8E8C8C898989898989898989898989898989898C
+8E8E8E8E8E8E8F8F929292949494949494999A9A9A9A9A9C9C9C9E9E9E9E9E9EA1A1A3A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A19E9C9C9C9C9C9C9C9A9996949494949494949494949496999A9A9A999999
+999994949492928F8C8987847F7F7C797F7F818585858587898E9294949A9C9C9E9E9E9E9C9C9E9E
+A4A4A4A4A6A6A6A9A9A9A9A6A49E9E9C9A999492929292929292929294949494949494928F89877C
+74767C81878C8E8E8F8F9292928F8F929292929292928F8E898989878989929A9E9E9E9E9C9A9492
+8E89898787878584817F7F7F7C7C7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F8184858585878789898989898C8E8F8F929292929292929294949494949494949494949494
+96999994949494949494949494949494949494949494949494949494949494949292929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898987878585
+85858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C76767676767676747474747472726E6C
+6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C575757575555544F4F4F4F4F4F4F4F4F4F4F
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585858585
+8585858585858585858585878787898989898989898989898989898989898989898C8E8E8E8E8E8E
+8E8F8F92929292929292929292929494949494949494949494949494949494727F878E92949A9C9E
+A3A6A9AEB3B9BBC1C6CCCFD3D9DCE1E4E7ECECEEF2F4F7F7F9F9FAFAFAF9F9F7F7F4F2F2EEECECE7
+E6E4E1DFDFD9D9D9D4D3D3CFCFCCC8C6C6C6C6C1C1C1C1C1C1C0C0BEBBBBBBBBBBBBB9B9B9B9B9B9
+B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEB1B1B1B1AEAEABA6A49E9C9A9489817C74617C7F8487878789898C8E8F92929292929292929292
+92929292929292929292949494949492929292928F8F8E8E8C898989898989878787878787878787
+8989898989898E8F92928F8F8F898989898784817F7C7674726E6C6C6C6C6C6C6C71727474747474
+747472726C6C6A666159546C6C6C6A6A6A6A6A6A6C6E72727474767C7F7F81848587878787898989
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8E8C8C8C
+8E8E8F8E8E8E8E8F8F8F8F8F8F8F929292928F8F8F8F8F92929292928F9292929292929292929492
+9292929292929292949492929292929292929292928F8E8E8C8C8C8C8C8E8E8C8C89898989898989
+8E8E8E8E8E8E8E8E8F9292929494949496999A9A9A9A9A9C9C9E9E9E9E9E9EA1A3A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A3A19E9C9C9C9C9C9C9A9A9A999494949494949494949494949499999999999694
+94949492928F8E8C898784817F7C7C7F7F7F848585858787898F92949A9C9C9E9E9E9E9E9E9E9EA4
+A4A6A6A6A6A6A9ABA9A9A9A6A49E9C9C9A949492929292929292929494949494949492928C877F74
+767C8187898E8F8F9292929292929294949494929292928E898989898C8F949CA4A4A39E9E9C9492
+8F89898987878784817F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F
+7F7F7F8184858585878789898989898C8E8E8F8F9292929292929292949494949494949494949494
+94999494949494949494949494949494949494949494949494949494949494949292929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898987878585
+85858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676767676747474747472716C
+6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5F5D595757575755554F4F4F4F4F4F4F4F4F4F4F
+4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585858585
+85858585858585858585878787898989898989898989898989898989898989898C8E8E8E8E8E8E8E
+8F9292929292929292929292929494949494949494949494949494949494947984898F92949A9C9E
+A4A6ABB1B3B9BBC1C6CCCFD4D9DFE1E6E7ECECEEF2F4F7F7F9FAFAFAFAF9F9F7F7F4F2F2EEECECE7
+E6E4E1DFDFD9D9D9D4D3D3D1CFCCC9C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9
+B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEB1AEAEAEAEAEAE
+B1B1B1B1B1B1AEAEA9A6A49E9C9A968C877F7C71578185878789898C8E8F92929292929292929292
+929292929292929292929292949494929292928F8F8E8E8C89898989898987878785858585858587
+8787898989898C8E8F8F8F8F8E8C8989898787847F7C7C7674726E6E6E6E6E717171727274747474
+74747472726C6A67615F574F6C6C6C6A6A6A6A6A6C6C72727474767C7F7F81848787878787898989
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8E8E8E8E8E8E8F8E8E8E8E8F8F928F8F8E8E8E8E
+8E8F8F8F8F8F8F92929292928F929292929292929292929292929292929292929292929292949494
+94949292929292949494949492929292929494949292928F8F8E8F8F8F8F8F8E8E8C8C898989898C
+8C8E8E8F8F8F8E8E8F92929294949494999A9A9C9C9C9C9C9C9E9E9E9E9E9EA4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A3A1A19E9E9C9C9C9C9A9A9A9A99969494949494949494949494949494949494949494
+949492928F8E89898785817F7C7C7C7F81818585858787898E9294999A9C9E9E9E9E9E9E9E9EA4A6
+A6A6A6A9A9A9ABAEABA9A9A6A39C9C9A969492929292928F8F929294949494949494928E89877976
+7C8187898E8F929292929294949494949494949292928F8E8989898C92949CA1A4A4A4A4A19C9492
+8F8C89898787878584817F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F7F8185858587878789898989898E8E8E8F9292929292929292929494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494929292929292929292
+9292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898987878585
+85858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7976767676767676747474747472726E
+6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C575757575555544F4F4F4F4F4F4F4F4F4F
+4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585858585
+858585858585858587878789898989898989898989898989898989898989898C8E8E8E8E8E8E8E8F
+929292929292929292929292929494949494949494949494949494949494947C87899294999C9E9E
+A4A6ABB1B6B9C0C1C6CCD1D4D9DFE1E6E7ECECF1F2F4F7F9F9FAFAFAFAF9F9F7F7F4F2F2EEECECE7
+E6E4E1DFDFD9D9D9D4D3D3D1CFCCC9C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9
+B9B9B9B9B9B9B9B7B6B6B6B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEB1B1AEAEAEB1B1
+B1B1B1B1B1B1B1AEAEA9A6A39E9C9A998F89847F76668587878989898E8F92929292929292949492
+9292929292929292929292929292929292928F8F8E8E8C8989898989878787858481818181818181
+84878787898989898E8F8F8E8E8E8C8989898785817F7C7C76747271717171727272727274747474
+7474747472726C6A67615F556C6C6C6C6C6C6C6C6C6C7172747476797C7F81848787878789898989
+8C8E8E8E8E8E8E8E8E8E8F8E8E8E8E8F8F8F8F8F8E8E8E8E8E8F8F8F8F8F8F92929292928F8F8F8F
+8F8F9292929292929292929292929292929292929292929294929292929292949494929294949494
+949494949292949494949494949494929494949494949292929292929292928F8F8E8E8E8E8E8E8E
+8E8E8F8F92928F8F8F929292949494999A9A9C9C9C9C9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4
+A4A4A3A3A19E9E9E9E9C9C9A9A9A9A9A999996949494949494949494949494949494949494949494
+9292928F8C89898785817F7F7C7C7F81818585858587898C9294949A9C9C9E9E9E9E9E9E9EA4A6A6
+A9A9A9ABAEAEAEAEAEABA6A49E9C9A999492929292928F8E929294949494949494928F89877F767C
+7F8787898E8F929292949494949494969494949492928F8C89898C8F92999EA4A6A6A4A4A49C9992
+928E8989898787878481817F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F
+7F7F7F7F8184858585878789898989898E8E8E8E8F92929292929292929494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494929292929292929292
+9292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898987878585
+85858585858585817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676767674747474747271
+6C6C6C6C6C6C6A6A6A6A67676766616161615F5F5F5F5D595757575755554F4F4F4F4F4F4F4F4F4F
+4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585858585
+8585858585858787878989898989898989898989898989898989898989898E8E8E8E8E8E8E8E8F92
+929292929292929292929292949494949494949494949494949494949494747F878E92949A9C9EA3
+A4A6AEB1B6BBC0C6C8CFD3D4D9DFE1E6E7ECECF1F2F4F7F9F9FAFAFAFAF9F9F7F7F4F2F2EEECECE7
+E6E4E1DFDFD9D9D9D4D4D3D1CFCCCCC8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B7B6B6B6B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAEAEAEAEAEB1B1B1B1B1B1B1B1
+B1B1B1B1B1B1B1AEAEABA6A4A39E9C9C9A928C87817C724F878789898C8E8F929292929294949494
+9292929292929292929292929292929292928F8E8E8C8989898989878787858481817F7F7F7F7F7F
+8184878787878989898E8F8E8E8C8C898989898784817F7C79767472727272727272727274747474
+747474747472716C6A665F594F6C6C6C6C6C6C6C6C6C7172747474767C7F7F818587878989898989
+898E8E8E8F8F8E8E8E8F8F8F8F8F8F8F929292928F8F8F8F8F8F9292929292929292929292929292
+92929292929292949492929292929292949492929294949494949492929292949494949494949494
+94949494949494949494949494949494949494949494949492929292929292928F8F8F8E8F8F8F92
+8F8F8F929292929292929294949494999A9A9C9C9C9C9C9C9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4
+A4A3A19E9E9E9E9E9C9C9A9A9A999999949494949494949292929294949494949494949494949292
+928F8E8989898787847F7F7F7F7F8184858585858789898F9294999C9C9E9E9E9E9E9E9EA3A6A6A9
+ABAEAEAEAEAEAEAEABA9A6A39C9C999494929292928F8E8F929294949494949494928E898574797F
+8789898E8F92929494949494999999999494949494928F8C8C898F92949CA1A6A6A6A6A6A49E9A94
+928F8989898987878584817F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F
+7F7F7F7F8184858585878789898989898C8E8E8E8F8F929292929292929294949494949494949494
+94949494949494949494949494949494949494949494949494949494949492929292929292929292
+92929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898987878585
+85858585858585817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C797676767676767674747474747272
+6C6C6C6C6C6C6C6A6A6A6A676767646161615F5F5F5F5F5C575757575555514F4F4F4F4F4F4F4F4F
+4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585858585
+858585858787878789898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8F9292
+9292929292929292929292929494949494949494949494949494949494947C84898F92949A9C9EA4
+A6A9AEB1B9BBC1C6C9CFD3D9DCDFE4E6E7ECECF2F2F4F7F9F9FAFAFAFAF9F9F9F7F4F2F2EEECECE7
+E6E4E1DFDFD9D9D7D4D4D3D1CFCFCCC8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBB9B9B9B9B9
+B9B9B9B9B9B9B9B9B7B7B6B6B6B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEAEAEAEB1B1B1B1B1B1B1B1
+B1B1B1B1B1B1B1AEAEAEABA6A4A39E9E9C9C949289857F765E8789898C8E8F929292929292949494
+92929292929292929292929292929292928F8F8E8C89898989898787878584817F7F7F7F7F7F7F7F
+7F7F84858787878789898E8E8C8C8C8C8989898787847F7F7C767474727272727272727272747474
+747474747474726C6A67615F554F6C6C6C6C6C6C6C6C6C72727474767C7F7F818487878989898989
+8C8E8E8F928F8F8F8F8F9292928F8F92929292929292929292929292929292949492929292929292
+92929292929494949494949292929294949494949494949494949494949294949494949494949494
+949494949494949494949494949494949494949494949494949492949292929292928F8F8F929292
+9292929292929292929292949494999A9A9C9C9C9C9E9E9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4
+A39E9E9E9E9E9E9C9C9A9A9999999494949494949492929292929294949494949292929292929292
+8F8E898989878785817F7F7F7F8184848585858787898E9294969A9C9E9E9E9E9E9E9EA3A4A6ABAE
+AEAEAEAEAEB1AEAEA9A9A49E9C9A9494949292928F8E8E8F9292949494949494928F898774767F87
+898C8E8F929494949496999A9A999A999994949494928F8E8E8E8F92999EA4A6A6A6A6A6A49E9C94
+928F8C8989898787878481817F7F7F7F7F7F7C7C7F7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F
+7F7F7F7F8184858585878789898989898C8E8E8E8E8F929292929292929292949494949494949494
+94949494949494949494949494949494949494949494949494949494949292929292929292929292
+92929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898987878785
+8585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767676747474747472
+716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5D575757575555554F4F4F4F4F4F4F4F4F
+4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585858585
+8585878787878989898989898989898989898989898989898C89898C8E8E8E8E8E8E8E8E8F929292
+9292929292929292929292949494949494949494949494949494949494947C87899294999C9C9EA4
+A6A9AEB1B9BBC1C6CCCFD4D9DCE1E4E7ECECEEF2F4F7F7F9F9FAFAFAFAFAF9F9F7F4F2F2EEECECE7
+E6E4E1DFDFD9D9D7D4D4D3D1CFCFCCC8C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B7B7B6B6B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEAEAEB1B1B1B1B1B1B1B1
+B3B3B1B1B1B1B1AEAEAEABABA6A6A4A19E9C9C9A928C878176678989898E8F929292929292949494
+949292929292929292929292929292928F8F8E8C8C898989898787878584817F7F7F7C7C7C7C7C7C
+7C7F7F81848485878789898E8C89898C8C8989898785817F7C7C7674747272727272747474747474
+74747474747474726C6A666159546C6C6C6C6C6C6C6C6E71727476767C7C7F81848787878989898C
+8E8E8F8F9292928F8F92929292929292929292929292929292929292929494949494949492929294
+94949494949494949494949494929494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949492929292929292929292
+9292929292929292929294949496999A9A9C9C9C9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4
+A39E9E9E9E9E9C9C9A9999969494949494949292929292929292929292929292929292929292928F
+8E8C898987878784817F7F7F818587878787878789898F92949A9C9C9EA3A19E9EA1A4A4A6A9AEAE
+B1B1B1B1B1B1AEABA9A6A39C9A9994949292928F8E8F8F9292949494949494928F89877F747F8589
+8E8F929294949496999A9A9C9A9A9A9A9994949494928E8E8E8F92949CA1A6A6A6A9A6A6A49E9C94
+92928E8C89898987878584817F7F7F7F7F7F7C7F7F7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F
+7F7F7F7F8184858585878789898989898C8E8E8E8E8E8F9292929292929292949494949494949494
+94949494949494949494949494949494949494949494949494949494949292929292929292929292
+92929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989878785
+8585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767676747474747472
+726C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5F5F59575757575555514F4F4F4F4F4F4F4F
+4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8787878585
+87878787898989898989898989898989898989898989898E8E8C8C8E8E8E8E8E8E8E8E8F92929292
+9292929292929292929294949494949494949494949494949494949494767F878E92949A9C9EA1A4
+A6ABAEB6B9C0C1C6CCD1D4D9DEE1E4E7ECECEEF2F4F7F7F9F9FAFAFAFAF9F9F7F7F4F2F2EEECECE7
+E6E4E1DFDED9D9D7D4D4D3D1CFCFCCC8C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B7B7B6B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEB1B1B1B1B1B1B1B1B1
+B3B3B3B3B1B1B1AEAEAEABABABA6A6A4A39E9E9E9C94928E84797189898C8E8F9292929292929494
+9292929292929292929292929292928F8F8E8E8C898989898987878481817F7F7F7C7C7C7C797979
+7C7C7C7F81818185878789898C89898C8C898989898784817F7C7976747474747474747474747474
+74747474767474726E6C67615F574F6C6C6C6C7171717171727476767C7C7F81818587878989898E
+8E8F8F92929292929292929292929292929294929292929494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949292929292929292
+929292929294949494949494999A9A9C9C9C9C9E9E9E9E9E9E9EA1A1A3A3A4A4A4A4A4A4A4A4A4A4
+A19E9E9E9C9C9C9A9996949494949494929292929292929292929292929292929292929292928F8F
+8E89898987878784818181818587878787878789898E9294999A9C9EA1A4A19E9EA4A4A6A9AEB1B1
+B1B1B1B1B1B1AEA9A6A49E9C99949492928F8F8E8F92929292949494949492928E8981747C87898F
+929294949499999A9A9C9C9C9C9C9A9A99999494928F8E8E8E8F92999CA4A6A6A9A9A9A6A49E9C99
+94928E8C8989898787878584817F7F817F7F7F7F7F7F7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F8185858587878789898989898E8E8E8E8E8F8F92929292929292929494949494949494
+94949494949494949494949494949494949494949494949494949494929292929292929292929292
+92929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989878787
+8585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767676767474747472
+72716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C575757575555544F4F4F4F4F4F4F4F
+4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8787878787
+8787898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8F929292929292
+92929292929292929294949494949494949494949494949494949494947C84898F92949A9C9EA4A4
+A9AEB1B6BBC0C6C8CFD3D4D9DFE1E6E7ECECF1F2F4F7F9F9FAFAFAFAFAF9F9F7F7F4F2F2EEECECE7
+E6E4E1DFDED9D9D7D4D4D3D3CFCFCCC8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1
+B3B3B3B3B3B1B1B1AEAEAEABABABA6A6A4A3A19E9E9E9C948F857C6C898C8E8F9292929292929294
+92929292929292929292929292928F8F8E8E8C8989898989878784817F7F7F7F7C7C7C7976767676
+767676797C7F7F8185878789898989898C8C8989898787847F7F7C79767474747474747474747474
+7474767676767474726C6A676159554F6C6C6C7172727272727274767C7C7F7F818487878989898C
+8F8F9292929292929292929294929292929494949492949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949492929292929294
+94929292949494949494999A9A9A9C9C9C9C9C9E9E9EA1A1A1A3A3A3A4A4A4A4A4A4A4A4A4A4A4A3
+9E9E9C9C9C9C9A999494949494949292929292929292929292929292929292929292929292928F8E
+8C89898989878784848181848787878787878989899294949A9C9E9EA3A4A39EA3A4A6A6ABAEB1B1
+B3B3B1B1B1B1AEA9A6A39C9A949492928F8E8E8F92929292949494949494928F8987747C87898F92
+94949494999A9A9C9C9C9C9C9C9C9C9A9A999494928E8E8E8F92949A9EA4A6A6A9A9A9A6A49E9C9A
+94928F8E8C89898987878784817F8181817F7F7F7F7F7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F8184858585878789898989898C8E8E8E8E8E8F8F929292929292929294949494949494
+94949494949494949494949494949494949494949494949494949494929292929292929292929292
+9292929292928E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989878787
+858585858585858481817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767676767474747474
+72716C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5F5D59575757575555514F4F4F4F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8787878789
+89898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292
+92929292929292929494949494949494949494949494949494949494767F87899294999C9C9EA4A6
+A9AEB1B7BBC1C6CCCFD3D7D9DFE1E6E7ECECF1F2F4F7F9F9F9FAFAFAFAF9F9F7F7F4F2F1ECECECE7
+E6E4E1DFDED9D9D4D4D4D3D3CFCFCCC8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3
+B3B3B3B3B3B1B1B1AEAEAEAEABABABA9A6A4A4A4A19EA19E9A8F87796A898C8F9292929292929292
+92929292929292929292929292928F8E8E8C898989898987878784817F7F7F7C7C79767676747474
+74747474767C7F7F8184878789898989898C898989898785817F7C7C767674747474747474747474
+767676767676747472716C6A615F57546C6C6C7172727272727274767C7C7F7F818487878789898C
+8E8F9292929292929292929494949492949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949292929494
+9494949494949496999A9A9A9C9C9C9C9C9C9E9E9EA3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A1
+9E9C9C9C9C9C9A949494949492929292929292929292929292929292929292929292929292928F8E
+8E8C8989898787848484848787878787878789898E9294999C9C9E9EA4A4A3A1A4A6A6A9AEB1B3B6
+B6B6B3B1B1AEABA6A49E9C999492928F8E8E8E8F92929494949494949492928C877F7C87898E9294
+949496999A9C9C9C9E9E9E9E9E9C9C9A9A9994928F8E8E8E9294969C9EA4A6A6A6A9A9A6A49E9C9A
+9492928E8C8989898787878584818181817F7F7F7F7F7F7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F818485858587878989898989898C8E8E8E8E8E8F929292929292929294949492929494
+94949494949494949494949494949494949494949494949494949492929292929292929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989898787
+878585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C767676767676767674747474
+72726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C57575757555554514F4F4F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8787898989
+8989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292
+92929292929292949494949494949494949494949494949494949494797F878C92949A9C9EA1A4A6
+ABAEB1B9BEC1C6CCCFD3D9D9DFE1E6E7ECECF1F2F4F7F7F9F9FAFAFAFAF9F9F7F7F4F2F1ECECECE7
+E6E4E1DFDCD9D9D7D4D4D3D3CFCFCCC8C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B3B3B1B1B1B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEABABABA9A6A6A4A4A4A4A4A49A9287766A898E8F92929292929292
+929292929292929292929292928F8E8E8C89898989898787878784817F7F7C7C7C79767474747272
+7171727274767C7F7F7F848787898989898989898989898784817F7C797676747474747474767676
+767676767676747472726C6A67615D554F6C6C6E72727272727274767C7C7F7F8184858787898989
+8E8F9292929292929292929494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949492929292949494949494929292
+92949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494999A9A9C9C9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A39E
+9E9C9C9C9C9A99949494929292929292929292929292929292929292929292929292929292928F8F
+8E8C89898787878787858787898787878789898C9294969A9C9E9EA1A4A4A4A4A4A6A9AEB1B3B6B9
+B9B9B6B1B1AEABA6A39C999492928F8E8E8E8F92929494949494949494928E89817C85898E929494
+9999999A9C9C9E9E9E9E9E9E9E9C9C9A9A9694928E8E8E8F92949A9CA4A4A6A6A6A9A9A6A49E9C9A
+9492928F8E8C8989898787878481818181817F7F7F7F7F7F7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F818485858587878989898989898C8E8E8E8E8E8E8F9292929292929292949492929494
+94949494949494949494949494949494949494949494949494949292929292929292929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989898787
+87858585858585858481817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767676767674747474
+7472716C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5F5D59575757575555544F4F4F4F4F4F
+4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898989
+89898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292
+929292929292929494949494949494949494949494949494949494947C84898F92949A9C9EA3A4A6
+ABB1B6B9BEC4C6CCCFD4D9DCDFE4E7E9ECEEF2F4F4F7F7F9F9FAFAFAFAF9F9F7F7F4F2F1ECECECE7
+E6E4E1DFDCD9D9D9D4D4D3D3CFCFCCC8C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B3B3B3B1B1B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEAEACABABA9A6A6A6A4A4A4A4A39C928474678C8E9292928F8F8F92
+9292929292929292929292928F8F8E8C8989898989878787878584817F7F7F7C7C7676747272716C
+6C6C6C6C6E72767C7C7C7F8485878789898989898989898787847F7F7C7B79767474747676767676
+76767679767676747472716C6A645F59554F6C6C7272727274747474797C7F7F7F81848787898989
+8C8F9292929292929292929494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949492929494949292929292929294949492929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949499999A9A9C9C9C9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A19E9E
+9C9C9C9A9A999494949292929292929292929292929292929292929292929292929292929292928F
+8F8C89898787878787878789898989898989898F92949A9C9C9E9EA3A4A4A4A4A6A9ABAEB1B6B9B9
+B9B9B7B3B1AEA6A49E9C949492928E8E8E8E8F929494949494949494928F89857684898E92929499
+999A9A9C9C9E9E9E9E9E9EA19E9E9C9A999494928E8E8E92949A9C9EA4A4A6A6A6A6A6A6A49E9C9A
+9494928F8E8C8989898787878584818484817F7F7F7F7F7F7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F81848585858787898989898989898C8E8E8E8E8E8F8F92929292929292929292929294
+94949494949494949494949494949494949494949494949494949292929292929292929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989898987
+87878585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7676767676767674747474
+7472726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C57575757555555544F4F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898989
+89898989898989898989898C8989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9292929292929292
+929292929292929494949494949494949494949494949494949494767F87899294999C9C9EA4A6A9
+AEB1B6B9C0C6C8CCD1D4D9DCE1E4E7ECECEEF2F4F7F7F7F9F9FAFAFAF9F9F7F7F4F4F2F1ECECECE7
+E6E4E1DFDCD9D9D9D4D4D4D3CFCFCCC8C8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBB9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEABABA9A9A6A6A6A6A6A4A19C927F715C8C8F8F8F8F8E8F8F
+8F92929292928F8F8F8F928F8F8E8C89898989898787878785848481817F7F7C7C76747472726C6C
+6A6A6A6A6A6C727476797C7F8185878789898989898989898785817F7C7C7C797676767676767676
+76797979797676747472726C6A67615F57546C6C7172747474747474767C7C7F7F81848787878989
+8C8E8F92929292929292929294949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949492929292929292929292929292929292929292
+92929292929294949494949494949494949494949494949494949494949494929494949494949494
+949494949496999A9A9C9C9C9C9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A1A19E9E9E9C
+9C9A9A9A9A9994949292929292929292929292929292929292929292949494929292929292929292
+8F8C898987878787878789898989898989898C9294999A9C9E9E9EA4A4A4A4A6A9ABAEB1B6B9B9BB
+BBB9B6B1AEA9A69E9C999492928F8E8E8E8E92949494949494949492928C877481898E929494999A
+9A9A9C9C9C9E9E9E9EA1A3A4A19E9C9A9994928F8E8E8F92999C9EA3A4A4A6A6A6A6A6A6A49E9C9A
+9494928F8F8E8C8989898787878484848481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F81858585878787898989898989898C8E8E8E8E8E8F92929292929292929292929292
+94949292949494949494949494949494949494949494949494929292929292929292929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898987
+8787858585858585858481817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767676747474
+747472716C6C6C6C6C6C6C6A6A6A67676766616161615F5F5F5F5D59575757555555554F4F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898989
+898989898989898989898C8C8C898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292
+9292929292929494949494949494949494949494949494949494947C7F878C92949A9C9C9EA4A6A9
+AEB1B7BBC1C6C8CFD1D4D9DFE1E6E7ECECEEF2F4F7F7F7F9F9FAFAFAF9F9F7F7F4F4F2F1ECECECE7
+E6E4E1DFDCD9D9D9D4D4D4D3CFCFCCC9C8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBB9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEABABA9A9A6A6A6A6A6A49E9C89766C8989898C8C8E8E8E
+8F8F8F928F8F8F8E8E8F8F8F8E8C89898989898989878787848181817F7F7F7C7C76747472726E6C
+6A676767676A6C727476767C7F8184858787898989898989898784817F7C7C7C7976767676767679
+79797C7C7C7976747472726E6C6A66615D554F6C7172747474747474767C7C7F7F81848587878989
+898E8F92929292929292929292949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949492929292949292929292929292929292929292929292929292
+92929292929292929494949494949492929494949494949494929494949492929292949494949494
+9494949494999A9A9A9C9C9C9E9E9E9E9EA3A4A4A6A6A6A6A6A4A4A4A4A4A4A3A19E9E9E9E9E9C9C
+9A9A9A99999494949292929292929292929292929292929294949494949494949292929292929292
+8F8C898989878787878989898989898989898F92949A9C9C9E9EA1A4A4A4A4A6A9AEB1B3B9B9B9BB
+B9B7B3B1ABA6A49E9A949492928F8E8E8E92949494949494949494928E877F7F878E929494999A9A
+9C9C9C9C9E9EA1A1A3A4A4A49E9E9C9A9994928E8E8E92949A9C9EA4A4A4A4A6A6A6A6A4A49E9C9A
+949492928F8E8C8989898787878584848484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F8181848585858787898989898989898C8E8E8E8E8E8E8F929292929292929292929292
+94929292929494949494949494949494949294949494949494929292929292929292929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989
+8787858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767676747474
+747472726E6C6C6C6C6C6C6A6A6A6A676767646161615F5F5F5F5F5C57575757555555544F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898989
+89898989898989898C8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292
+9292929292929494949494949494949494949494949494949494767C84898E92949A9C9C9EA4A6AB
+AEB3B9BEC1C6C9CFD3D4D9DFE1E6E7ECECF1F2F4F7F7F7F9F9FAFAFAF9F9F7F7F4F4F2F1ECECECE7
+E6E4E1DFDCD9D9D9D4D4D4D3CFCFCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEABABABA9A9A9A6A6A4A39E9281746A8989898989898C
+8E8E8F8E8E8C8C8C8C8E8E8E8E8C898989898989898787878581817F7F7F7F7F7C7676747472726C
+6A6766616161676A6E7274767C7F7F818587878789898989898787847F7F7C7C7C79767676797979
+7B7C7C7C7C7C7976747472716C6A67615F59556C6C7272747474747476797C7F7F7F818487878989
+898C8F92929292929292929292929294949494949494949494949494949494949494949494949494
+94949494949494949492929294949292929292929292929292929292929292929292929292929292
+92929292929292929292949494949292929292929494949492929292949492929292929494949494
+9494949499999A9A9C9C9C9C9E9E9EA3A3A4A4A6A6A6A6A6A6A4A4A4A4A4A4A19E9E9E9E9E9C9C9C
+9A999996949494929292929292929292929292929292949494949494949494949492949494929292
+8F898989898989878989898989898989898C9294999C9C9E9EA3A3A4A4A4A6A9AEAEB1B7B9B9B9BB
+B9B3B1AEA9A49E9C999492928F8E8E8E8F929494999994949494928F89847F878C9294999A9A9C9C
+9C9C9E9E9EA3A3A4A4A4A4A49E9E9C9A94928F8E8E8F92969C9EA3A4A4A4A4A6A6A6A4A4A19E9C9A
+999494928F8F8E8C8989898787878484858581817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F8181818184858585878789898989898989898C8E8E8E8E8E8F8F9292929292929292929292
+92929292929494949292949494949494929292949494949492929292929292929292929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989
+8787878585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767676767474
+74747472716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5D57575757555555554F4F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898989
+8989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F92929292929292929292
+9292929292949494949494949494949494949494949494949494767F87899294999A9C9CA1A4A9AE
+B1B6B9BEC1C6CCCFD3D9D9DFE1E6E7ECECF1F2F4F7F7F7F9F9F9FAFAF9F9F7F7F4F4F2F1ECECECE7
+E6E4E1DFDCD9D9D9D4D4D4D1CFCFCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBB9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1B1B1B1AEAEAEAEAEAEAEAEABABABA9A9A9A9A6A49E9A897C725F878787878989
+898C8C898989898989898C8C8C898989898989898989878785848181817F7F7F7C7C797676747472
+6C6A6761615F61666A6C7274767C7F7F7F8587878787898989898785817F7F7C7C7C7C797979797C
+7C7C7C7C7C7C7C79747472726C6C6A67615D57546C7172747474747676797C7C7F7F818487878789
+898C8E8F929292929292929292929292949494949494949494949494949494949494949494949494
+94949492929494949292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292949492929292929292929292929292949494
+94949496999A9A9C9C9C9C9E9E9EA1A4A4A4A6A6A6A6A6A6A6A4A4A4A4A4A39E9E9E9E9E9C9C9C9A
+9A969494949494929292929292929292929292929294949494949494949494949494949494929292
+8E898989898989898989898989898989898F92949A9C9E9EA3A4A4A4A4A4A6ABAEB1B3B9B9B9B9B9
+B6B1AEABA6A19C9A949492928F8E8E8F929494999999969494929289877C84899294969A9C9C9C9C
+9E9E9E9EA3A4A4A4A4A4A4A49E9E9C9A94928E8E8E92949A9C9EA4A4A4A4A4A6A6A4A4A49E9E9C9C
+99949492928F8E8C8989898787878585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F81818181818485858587878989898989898989898C8E8E8E8E8E8F9292929292929292929292
+92929292929294949292949494949494929292949494949292929292929292929292929292929292
+929292929292928E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989
+898787858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767676767474
+74747472726C6C6C6C6C6C6C6A6A6A6A676767646161615F5F5F5F5F5C57575757555555514F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898989
+898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292929292
+92929292949494949494949494949494949494949492949494927C81898C92949A9C9C9EA3A6A9AE
+B1B6B9C0C4C6CCCFD4D9DCDFE4E6E7ECECF2F2F4F7F7F7F9F9F9FAFAF9F9F7F7F4F4F2F1ECECECE7
+E6E1E1DFDCD9D9D9D4D4D4D1CFCFCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1B1B1B1B1AEAEAEAEAEAEAEAEABABABABABABA6A6A19C94817971598184878787
+87898989898989898989898989898989898989898989878787848485858481817F7F7F7C7C797674
+74726C6A615F5D5F61676A6C74767B7C7F7F85878787898989898787847F7F7F7F7C7C7C797C7C7C
+7C7C7C7C7C7C7C7C767472726E6C6A6A615F5C554F6C727474767676767C7C7C7F7F818485878789
+89898E8F8F9292929292929292929292949494949494949494949494949494949494949494929494
+94949492929292949292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292949494
+949494999A9A9A9C9C9C9C9E9E9EA3A4A4A4A6A6A6A6A6A6A4A4A4A4A4A4A19E9E9E9C9C9C9C9C9A
+9994949494929292929292929292929292929292949494949696949494949494949494949492928F
+8E8C89898989898989898989898989898E9294999C9C9EA3A4A4A4A4A4A6A9AEB1B1B6B9B9B9B9B9
+B3B1AEA6A49E9C999494928F8E8E8F929494999A9A99949492928C877681878F94949A9C9C9C9E9E
+9EA1A3A4A4A4A4A4A4A4A4A49E9E9C9994928E8E8E92949C9EA4A4A4A4A4A4A4A4A4A4A39E9E9C9C
+99949492928F8F8E8C8989898787878585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F8181818184848485858587878989898989898989898C8E8E8E8E8E8E8F92929292929292929292
+92929292929292929292929494949492929292929494949292929292929292929292929292929292
+9292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989898989
+898787858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C797676767676767674
+7474747472716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5D57575757555555554F4F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89898C8C89
+89898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292929292929292
+92929294949494949494949494949494949494949292929492767F87898E92949A9C9C9EA4A6A9AE
+B1B9BBC1C6C8CCCFD4D9DCE1E4E7ECECEEF2F4F7F7F7F7F7F9F9FAFAF9F9F7F4F4F4F2F1ECECE9E7
+E6E1E1DFDCD9D9D9D7D4D4D1CFCFCCCCC8C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEABAEAEAEA9A6A49C99897F766C577F818485
+87878787878787878989898989898989898989898989898787878787878787858481817F7F7F7F7C
+767474716A665F595C5F666A6C7274767C7F7F85878787898989898787817F7F7F7F7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C79747472726C6C6A67615F57546C717474747676767C7C7F7F7F7F8184878789
+89898C8E8E8F8F929292929292929292929494949494949494949494949494949494949494929292
+94949292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929494
+94949496999A9C9C9C9C9E9E9EA1A3A4A4A6A6A6A6A6A6A6A4A4A4A4A4A39E9E9E9C9C9C9C9C9A9A
+9994949292929292929292929292929292929292949496999999949494949494949494949292928F
+8E8E8C8C8989898989898989898989898F92949A9C9E9EA4A4A4A4A4A6A6ABAEB1B3B9B9B9B9B9B7
+B1AEA9A69E9C9A9694928F8E8E8F92929494999A9A949492928E87747F878C94949A9C9C9E9E9EA1
+A4A4A4A6A4A6A6A6A6A6A4A49E9C9A94928F8E8C8F949A9EA4A6A4A4A4A4A4A4A4A4A19E9E9C9C9C
+9A94949292928F8E8C8989898787878585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+81818181848484858585858787878989898989898989898C8E8E8E8E8E8F8F929292929292929292
+92929292929292929292929294949292929292929494929292929292929292929292929292929292
+9292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989898989
+89878785858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767676767674
+7474747472726C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5F5F5957575757555555514F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C8E8E8E8C
+8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292929292929292929292929292
+929294949494949494949494949494929294949292929292927C7F89899294999A9C9C9EA4A6ABB1
+B3B9BBC1C6C8CFD1D4D9DCE1E4E7ECECEEF2F4F7F7F7F7F7F9F9FAF9F9F7F7F4F4F4F2F1ECECE9E7
+E6E1E1DFDCD9D9D9D7D4D4D1CFCFCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEABA6A49E9A94877F746A547F7F81
+8484858787878787878787898989898989898989898989878787878787898987878785848484817F
+7F7C7976746C675F59575D61676C7274767C7F818485878789898989878481817F7F7F7F7C7C7C7C
+7C7C7C7C7C7C7C7C7C76747472726C6A6A66615D574F6C7274747676797C7C7F7F7F7F8184878787
+8989898C8E8E8F8F8F92929292929292929494949492929294949494949494929294949492929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292928F92929292929292929292929292929292929494
+94949494999A9C9C9C9C9E9E9EA3A4A4A4A6A6A6A6A6A6A4A4A4A4A4A4A39E9E9C9C9C9C9C9C9A99
+94949492929292929292929292929292929292949494999A9A99969494949694949494949292928F
+8F8E8E8C8C898989898989898989898E9294999C9C9EA3A4A4A4A4A6A6A9AEB1B3B6B9B9B9B9B9B3
+B1AEA6A49E9C9A9494928E8E8E92929494949A9A969492928F89747C878C92949A9C9C9E9EA1A3A4
+A4A6A6A6A6A6A6A6A6A6A4A39E9C9A94928E8C8992949CA3A6A6A4A4A4A4A4A4A4A39E9E9E9C9C9C
+9A94949292928F8F8E8C8989898787878585858584817F7F7F7F7F817F7F7F7F7F7F7F7F7F7F7F81
+8181818484848585858585858787898989898989898989898C8E8E8E8E8E8F929292929292929292
+92929292929292929292929294949292929292929294929292929292929292929292929292929292
+92929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989
+89878785858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7976767676767676
+747474747472716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C57575757555555554F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292929292929292929292
+949494949494949494949494949492929292929292929292767C85898C9294999A9C9C9EA6A9AEB1
+B3B9BEC1C6C9CFD3D4D9DFE1E6E7ECECEEF2F4F7F7F7F7F7F9F9FAF9F9F7F7F4F4F2F2F1ECECE9E7
+E6E1E1DFDCD9D9D9D9D4D4D1CFCFCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEA9A6A19C9492877F7467517C7F
+81818184848585878787878787878989898989898989898989878787898989898989878787878785
+847F7C7C7C76726A615957595F676C7274767C7F818484878989898787858181817F7F7F7F7C7C7C
+7C7F7F7F7C7C7C7C7C7C767474726E6A6A67615F59544F7172747476797C7C7F7F7F7F8184858787
+89898989898C8E8E8F8F929292929292929494949292929292929494949492929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F9292929292929292928F92929292928F8F8F929292929292928F929292929292929494
+94949494999A9A9C9C9C9E9EA1A3A4A4A6A6A6A6A6A6A6A4A4A4A4A3A3A19E9E9C9C9C9C9A9A9A99
+949492929292929292929292929292929294949494999A9A9A9A9999999999969494949292929292
+8F8E8E8E8E8C8C89898989898989898F92949A9C9E9EA4A4A4A4A4A6A6ABB1B3B6B9B9B9B9B9B9B1
+AEA9A69E9C9A9994928E8E8E8F929294949999999492928F89877C878C9294999A9C9E9EA3A4A4A4
+A6A6A9A9A9A6A9A6A6A6A4A19E9C9994928E898C929A9EA6A9A6A6A4A4A4A3A3A3A19E9E9C9C9C9C
+9A9494929292928F8E8C8989898787878585858584817F7F7F7F8181817F7F7F7F7F7F7F7F818181
+8181848484858585858585858787898989898989898989898C8E8E8E8E8E8E8F9292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989
+8987878585858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767676
+747474747472726C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5F5D59575757575555554F4F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929294
+949494949494949494949494949292929292929292929292767F87898E92949A9C9C9EA3A6A9AEB1
+B6B9BEC1C6CCCFD3D7D9DFE1E6E7ECECF1F2F4F7F7F7F7F7F9F9FAF9F9F7F7F4F4F2F2F1ECECE9E7
+E6E1E1DFDCD9D9D9D9D4D4D1CFCFCCCCC9C8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEA9A6A49C99948F877C74617C7F
+7F7F7F81818184848585878787878787878989898989898989898989898989898989898989898987
+8785817F7F7C76716A615955575F676C7172767C7F81818587898787878781818481817F7F7F7F7C
+7F7F7F7F7F7C7C7C7C7C79747474726C6A6A67615F574F6C72727476797C7C7F7F7F7F7F81848787
+8989898989898C8E8E8E8F8F92929292929292929292929292929292949492929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F8F8F8F9292929292928F8F8F92928F8F8E8E8F8F92929292928F8F9292929292929294
+94949494999A9A9C9C9C9E9EA1A4A4A4A6A6A6A6A6A6A6A4A4A3A1A19E9E9E9C9C9C9A9A9A999994
+949492929292929292929292929294949494949494999A9A9A9A99999A9A9A999494949492929292
+8F8E8E8E8E8E8C8C8989898989898E9294999C9C9EA1A4A4A4A4A4A6A9AEB1B6B9B9BBB9B9B9B3B1
+ABA6A49E9C9994928F8E8E8E929294949496999494928E89877C84899294999A9C9C9EA3A4A4A6A6
+A6A9ABABA9A9A9A9A6A6A49E9C9A94928E89898E949CA3A9A9A6A6A4A4A4A3A1A19E9E9E9C9C9C9C
+9A9494929292928F8F8E8C8989898787878585858584817F7F81818181817F7F7F7F7F7F81818181
+818484848585858585858585878789898989898989898989898E8E8E8E8E8E8F8F92929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989
+8987878785858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C79767676767676
+76747474747272716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C57575757555555544F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292929292929292929494
+9494949494949494949494929292929292929292929292747C8189898F94969A9C9C9EA4A6ABAEB1
+B7B9BEC1C6CCCFD3D9D9DFE1E6E7ECECF1F2F4F7F7F7F7F7F9F9F9F9F9F7F7F4F4F2F2F1ECECE7E7
+E6E1E1DFDCD9D9D9D9D4D4D1CFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEABA6A49E9A94948E877C74617C
+7F7F7F7F7F7F8181818484858587878787878787878989898989898989898C89898989898C8C8987
+878785847F7F7C766E6A615C55575F666A6C72767C7F81848787878787878484848481817F7F7F7F
+7F7F7F7F7F7F7C7C7C7C7976747474716C6A6A66615C544F6E727474767C7C7F7F7F7F7F81848787
+8789898989898C8E8E8E8E8F92929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292928F8F
+8F92928F8E8E8E8E8F8F8F92928F8E8E8E8F8F8F8E8E8E8E8E8F8F92928F8F8E8F8F929292929292
+9494949494999A9C9C9C9E9E9EA3A4A4A6A6A6A6A6A6A4A4A4A19E9E9E9E9E9C9C9C9A9A99999494
+9492929292929292929292929494949494949494999A9A9A9A9A9A9A9A9A9A99949494949292928F
+8E8E8E8E8E8E8E8C8989898989898F9494999C9E9EA3A4A4A4A4A6A6ABB1B3B7B9BBBBB9B9B6B1AE
+A9A49E9C9A9494928E8E8E8F9294949494949694928F89877981899294949A9C9C9EA1A4A4A6A6A6
+A9AEAEAEAEABA9A6A6A4A39E9C9994928C898992969CA4ABA9A9A6A6A4A4A39E9E9E9E9C9C9C9C9C
+9A949494929292928F8E8C8989898787878585858584817F8181818184817F7F7F7F7F8181818181
+848484858585858585858585878789898989898989898989898E8E8E8E8E8E8E8F92929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989
+898787878585858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767676
+76747474747472726C6C6C6C6C6C6C6A6A6A6A676767616161615F5F5F5F5D59575757575555554F
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292949494
+9494949494949494949494929292929292929292929292767F87898C9294999A9C9C9EA4A6AEB1B3
+B9BBC0C4C6CCCFD4D9DCDFE4E7E9ECEEF2F4F4F7F7F7F7F7F9F9F9F9F9F7F4F4F4F2F2F1ECECE7E7
+E6E1E1DFDCD9D9D9D9D4D4D1CFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEA9A69E9C9A99948C857C745F
+7C7C7C7F7F7F7F7F7F818184858585858787878787898989898989898989898C8989898989898989
+87878784817F7C7C746C6A615D55575F666A6C74767C7F818487878787878784848484818181817F
+7F7F7F7F7F7F7F7C7C7C7C76767474726E6C6A6A645F574F6C71727474797C7F7F7F7F7F81848587
+878989898989898E8E8E8E8F92929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292928F8F9292928F8F8E
+8E8F8F8F8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8C8E8E8F8F92929292
+9292949494999A9A9C9C9E9E9EA3A4A4A6A6A6A6A6A6A4A4A39E9E9E9E9E9E9C9C9A9A9994949494
+9492929292929292929292949494949496999999999A9A9A9A9A9A9A9A9A9A99999494949492928F
+8E8E8E8E8E8E8E8989898989898E9294949A9C9E9EA3A4A4A4A4A6A9AEB1B7B9B9BBB9B9B6B3AEA9
+A6A39C9A9694928F8E8E8E929494949494949492928C89767F879294949A9C9C9E9EA4A4A6A6A6A9
+AEAEAEAEAEAEA9A6A6A4A19E9A94928E89898C929A9EA6ABA9A9A6A6A6A4A4A19E9E9E9C9C9C9C9C
+9A949494929292928F8F8E8C898989878787858585858481818181848481817F7F7F818181818184
+848485858585858585858585878787898989898989898989898C8E8E8E8E8E8E8E8F929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898989
+898987878585858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C797676767676
+7676747474747272716C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C5757575755555554
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292929292929292929494949494
+94949494949494949494929292929292929292929292927C7F87898E9294999A9C9EA3A6A9AEB1B6
+B9BBC1C6C8CFD1D4D9DCE1E4E7ECECEEF2F4F4F7F7F7F7F7F7F9F9F9F7F7F4F4F4F2F2F1ECECE7E7
+E6E1E1DFDCD9D9D9D9D4D3D1CFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEA9A6A49E9C9A99948C847C74
+617C7C7C7C7F7F7F7F7F818485858585858585878787898989878989898989898989898989898989
+8987878481817F7C79746C67615D55575F616A6C74767C7F7F818587878787858484848481818481
+817F7F7F817F7F7F7C7C7C7C79767474726C6C6A67615F574F6E727274767C7C7F7F7F7F7F818487
+878989898989898C8E8E8E8E8F929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292928F8F8F8F8F8F8F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8E8E8E8E8C8C8C8C8E8E8F8F9292
+929292929494999A9C9C9C9E9EA3A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9C9C9C9C9A999494949492
+92929292929292929292949494969999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9996949492928F8E
+8E8E8E8E8E8E8C898989898989929294969C9C9EA1A4A4A4A4A6A6A9AEB3B9B9B9B9B9B6B3B1AEA6
+A49E9C9994928F8E8E8E929294949494949494928E89727F878E9294999A9C9E9EA3A4A6A6A9A9AE
+AEB1B1AEAEAEA9A6A6A49E9C9994928989898F949CA4A9ABA9A9A6A6A6A4A4A19E9E9C9C9C9C9C9C
+9A96949492929292928F8E8C898989878787858587878481818184848484817F7F81818181848484
+848585858585858585858585858787898989898989898989898C8E8E8E8E8E8E8E8F8F9292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898989
+89898787858585858585858585858581817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767676
+7676747474747472726C6C6C6C6C6C6A6A6A6A6A676767616161615F5F5F5F5D5957575757555555
+4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292949494949494
+94949494949494949494929292929292929292929292767C8489898F9494999A9C9EA4A6A9AEB1B7
+B9BEC1C6C9CFD1D4D9DFE1E6E7ECECEEF2F4F4F7F7F7F7F7F7F9F9F9F7F7F4F4F2F2F2F1ECECE7E7
+E4E1E1DFDCD9D9D9D9D4D3D1CFCFCCCCCCC8C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEA9A6A6A49E9C9A99948C847C
+7461797C7C7C7C7C7F7F818184858585858585858787898987878787878989898989878789898989
+87878781817F7F7C7C76746C67615F55575D616A6C74767C7F7F8185878585848484848584848484
+81817F8181817F7F7F7F7C7C7C7C767674726C6C6A67615D574F71727474767C7F7F7F7F7F818487
+878789898989898C8E8E8E8E8F929292929292929292929292929292929292929292929292929292
+9292929292928F8F8F929292929292928F8F8F929292929292928F8F8F92928F8E8E8E8E8F8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8C89898C8E8E8C8989898C8E8E8F8F8F
+92929292929494999A9C9C9E9EA1A4A4A4A4A4A4A4A4A4A39E9E9E9C9C9C9C9C9A9A999494949292
+92929292929292929292949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949492928F8F
+8E8E8E8E8E8E8989898989898E929294999C9E9EA1A4A4A4A4A6A9AEB1B6B9B9B9B9B6B1B1AEA9A6
+A19C999492928F8E8E8F9294949494949494928F89857C85899294969A9C9C9EA1A4A4A6A6A9ABAE
+AEB1B1B1AEAEA9A6A6A39E9C94928E898989929A9EA4ABABABA9A6A6A6A4A4A19E9E9C9C9C9C9C9C
+9A99949492929292928F8E8E8C898989878787878787858481848484858481818181818184848484
+858585858585858585858585858787898989898989898989898C8E8E8E8E8E8E8E8E8F9292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898989
+89898787858585858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7676767676
+7676767474747472726E6C6C6C6C6C6C6A6A6A6A676767666161615F5F5F5F5F5C57575757555555
+544F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292929292929292929294949494949494
+94949494949494949492929292929292929292929292767F87898C9294949A9C9C9EA4A6ABB1B3B9
+B9BEC1C6CCCFD3D4D9DFE1E6E7ECECEEF2F4F4F7F7F7F7F7F7F9F9F9F7F7F4F4F2F2F2EEECECE7E7
+E4E1E1DFDCD9D9D9D9D4D3D1CFCFCCCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEABA6A6A6A49E9C9C99948C85
+7C74617679797C7C7F7F7F8181848485858585858787878787878787878787898987878787878987
+878784817F7F7F7F7C7674726C6A615F55575D616A6C74767C7F7F81848584818181818484848485
+848181818181817F7F7F7F7F7F7C7C767474716C6A6A66615D556C72747476797C7F7F7F7F818485
+87878989898989898E8E8E8E8F8F8F92929292929292929292929292929292929292929292929292
+8F8F9292928F8F8E8E8F8F8F9292928F8F8E8E8F8F8F9292928F8E8E8E8F8F8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8C89898C8C8C89898989898C8989898989898C8E8E8F
+8F92929292929494999A9C9C9E9EA3A4A4A4A4A4A4A4A4A19E9E9C9C9C9C9C9C9A99949494929292
+929292929292929292949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494929292928F
+8F8E8E8E8E8E898989898989929294949A9C9E9EA3A4A4A4A6A6A9AEB1B6B7B9B9B9B3B1AEA9A6A4
+9E9A9492928F8E8E8F9294949494949494928F89877981898F94949A9C9C9E9EA4A4A6A6A9ABAEAE
+B1B1B1B1B1AEA9A6A49E9C99948F8989898F949CA1A6ABABABA9A9A6A6A4A4A39E9E9C9C9C9C9C9A
+9A99949492929292928F8E8E8C898989878787878787878484848485858584818181818484848585
+85858585858585858585858585878789898989898989898989898E8E8E8E8E8E8E8E8E8F92929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+89898787878585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676
+767676747474747472726C6C6C6C6C6C6A6A6A6A6A676767616161615F5F5F5F5D59575757555555
+554F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292929494949494949494
+949494949494949494929292929292929292929292747C8187898F9294999A9C9EA1A6A9AEB1B3B9
+BBC0C1C6CCCFD3D9D9DFE1E6E7ECECEEF2F4F4F7F7F7F7F7F7F9F9F9F7F7F4F4F2F2F1EEECECE7E7
+E4E1E1DFDCDCD9D9D9D4D3D1CFCFCCCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEABA9A6A6A6A39E9C9C99948C
+877F766176767C7C7C7F7F7F7F818181848485858787878787878587878787878787878787878787
+878481817F7F7F7C7C797674716C6A615F57555C616A6C72747C7C7F8181817F7F81818184858585
+85848181848481817F817F7F7F7F7F7C767472716C6A6A665F5C546C727474767C7C7F7F7F7F8184
+87878989898989898C8E8E8E8E8E8F8F8F92929292929292929292929292929292928F929292928F
+8F8E8F8F8F8F8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8C8989898C8C898989898989898989898989898989898989898C8C8E
+8E8F8F929292929494999A9C9C9EA1A4A4A4A4A3A3A19E9E9E9C9C9C9C9C9A9A9A99949492929292
+929292929292929292949496999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949292929292
+8F8F8E8E8E8C89898989898F929294999A9C9E9EA4A4A4A6A6A9ABAEB1B7B7B7B9B6B1AEABA6A49E
+9C9492928F8E8E8F929294949494949492928C87767F898E92949A9C9C9E9EA3A4A6A6A9ABAEAEAE
+B1B1B1B1B1AEA9A6A39E9C94928C898989929A9EA4A9ABABABA9A9A6A6A4A4A39E9E9C9C9C9C9C9A
+9A99949492929292928F8E8E8E8C8989898787878787878584848585858584818181848484858585
+85858585858585858585858585878789898989898989898989898E8E8E8E8E8E8E8E8E8F8F92928F
+8F929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+89898787878585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C76767676
+767676767474747472726E6C6C6C6C6C6A6A6A6A6A676767666161615F5F5F5F5F5C575757575555
+55514F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292929292929292929294949494949494949494
+949494949494949492929292929292929292929292767F848789929494999A9C9EA3A6A9AEB1B6B9
+BBC1C6C8CFD1D4D9DCDFE4E6E7ECECEEF2F4F4F7F7F7F7F7F7F7F7F7F7F7F4F4F2F2F1EEECECE7E6
+E4E1E1DFDCDCD9D9D9D4D3D1CFCFCFCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEAEAEABA9A6A6A6A4A49E9C9C9994
+8E8984766A76797C7C7C7F7F7F7F7F7F818181848485878787858585858587878787878787878787
+84817F7F7F7F7C7C7C7B767474726C6A665F57555C61676C72747C7C7F7F7F7F7F7F7F8181848585
+85858484848584848181848181817F7C7C7674726E6C6A67645F59516E747474767C7F7F7F7F8184
+87878789898989898C8E8E8E8E8E8E8E8F8F8F92929292929292929292929292928F8F8F8F8F8F8F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8E8E8E8E8E8E8F8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989898989898C
+8C8E8E8F8F8F9292929494999A9C9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9994949492929292
+9292929292929294949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999949494929292929292
+928F8E8E8E89898989898C8F9292949A9C9E9EA1A4A4A6A6A6A9AEAEB3B6B6B6B7B1AEAEA9A4A19C
+9992928F8E8E8E929294949494949492928E87747F878C9294999C9C9E9EA1A4A6A6A9ABAEAEB1B1
+B1B1B1B1B1AEA6A49E9C9A948F8989898F949CA3A6ABABABABA9A9A6A4A4A4A39E9E9C9C9C9C9A9A
+9A9994949292929292928E8E8E8C8989898787878787878784858585858585848184848485858585
+85858585858585858585858585878787898989898989898989898C8E8E8E8E8E8E8E8E8E8F928F8F
+8F929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+89898987878785858585858585858584817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676
+76767676747474747472716C6C6C6C6C6A6A6A6A6A6A676767616161615F5F5F5F5D595757575555
+55554F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292929294949494949494949494
+9494949494949492929292929292929292929292927C7F87898C929494999C9C9EA4A6A9AEB1B7B9
+BEC1C6C9CFD3D4D9DCE1E4E7ECECEEF1F2F4F4F7F7F7F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECE7E6
+E4E1E1DFDCDCD9D9D9D4D3D1CFCFCFCCCCC9C8C6C6C6C4C1C1C1C1C1C1C1C0BBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B6B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEAEAEAEA9A9A6A6A6A4A49E9C9C99
+99928E84766C76797C7C7C7C7C7F7F7F7F7F7F818181848485858585858584858787878584848484
+817F7F7F7F7F7C7C797676747474716C6A665F57555961676C7274767B7C7C7F7F7F7F7F81818485
+8585858485858584848484848481817F7C7B7674726E6C6A67645F574F72747476797C7F7F7F8184
+8587878989898989898E8E8E8E8E8E8E8E8E8E8F8F929292929292928F8F8F92928F8E8E8E8E8F8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989898989898989898989898989898989
+898C8E8E8E8E8E8F92929494949A9A9C9C9C9C9E9E9C9C9C9C9C9A9A9A9A99999494949292929292
+8F8F8F9292949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99969494949494929292929292
+928F8E8E8C89898989898E929294999A9C9E9EA3A4A4A6A6A9ABAEB1B3B6B6B3B3B1AEA9A6A49E9A
+94928F8E8E8E8F9292949494949492928E89717C87899294949A9C9E9EA3A4A6A6A9ABAEAEB1B1B1
+B1B1B3B1AEA9A6A39E9C94928C898989929A9EA4A9ABABABABA9A9A6A4A4A4A49E9E9E9C9C9C9A9A
+9A9994949492929292928F8E8E8E8C89898987878787878785858585858585858484848585858585
+85858585858585858585858585858787898989898989898989898C8E8E8E8E8E8E8E8E8E8E8F8F8F
+8E8F9292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+89898987878785858585858585858585817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C767676
+76767676767474747472726E6C6C6C6C6A6A6A6A6A6A676767666161615F5F5F5F5F5C5757575755
+5555514F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F8F929292929292929292929292929292929292929494949494949494949494
+9494949494949292929292929292929292929292767F8187898E9294949A9C9EA1A4A6A9AEB3B9BB
+BEC1C6CCCFD3D4D9DEE1E4E7ECECEEF1F2F4F4F7F7F7F7F7F7F7F7F7F7F4F4F2F2F2F1EEECECE7E6
+E4E1E1DFDCDCD9D9D9D4D3D1CFCFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B6B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAEAEAEABA9A9A6A6A6A4A49E9C9C
+9A9C999285766A7676797C7C7C7C7C7C7F7F7F7F7F8181818484858585848484848585848481817F
+7F7F7F7F7F7C7C7976767676747474716C6A645F5755575F666A6E747476797C7C7C7F7F7F818184
+8585858585858585848485858584847F7F7C79767474726C6A6A645F594F727474767C7C7F7F7F81
+8487878789898989898C8E8E8E8E8E8E8E8E8E8E8E8F8F8F9292928F8E8E8E8F8F8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8E8F8F9292928F8F8F8F8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989878989
+8989898C8989898E8F9292929294949A9A9A9C9C9C9C9C9C9A9A9A9A999994949494949292929292
+8E8E8F92929494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949492929292929292
+928E8E8E89898989898E8F9292949A9C9C9E9EA4A4A6A6A9A9AEAEB1B3B3B3B3B1AEA9A6A49E9C94
+928F8E8E8E8E8F92929494949492928F89857984898F92949A9C9EA3A4A4A4A6A9ABAEAEB1B1B1B1
+B3B3B1B1AEA6A49E9C9A948F8989898C949C9EA6ABABABABABA9A9A6A4A4A4A4A19E9E9C9C9A9A9A
+9A9994949492929292928F8E8E8E8C89898987878787878787858585858585858484858585858585
+85858585858585858585858585858787898989898989898989898C8E8E8E8E8E8E8E8E8E8E8F8F8F
+8E8F8F92928F8F929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989
+8989898987878785858585858585858581817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C797676
+7676767676747474747472716C6C6C6C6C6A6A6A6A6A6A676767616161615F5F5F5F5D5757575755
+5555554F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8F8E8E8E8E8F8F9292929292929292929292929292929292929292929494949494949494949494
+9494949494929292929292929292929292929292797F858789929294969A9C9EA3A6A6ABB1B3B9BB
+C0C4C6CCD1D4D9D9DFE1E6E7ECECEEF1F2F4F4F7F7F7F7F7F7F7F7F7F7F4F4F2F2F2F1EEECECE7E6
+E4E1E1DFDCDCD9D9D9D4D3D1CFCFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEA9A9A6A6A6A6A4A49E9C
+9C9C9C9C8F7F744F76767679797C7C7C7C7C7F7F7F7F7F7F81818184848481818181848181817F7F
+7F7F7F7C7C7C7C797676747474747472716C6A645F5955575F646A6C72747476797C7C7C7F7F8181
+848585858585858585858585858585847F7F7C79767474726E6C6A645F594F717274767C7C7F7F81
+8487878789898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8E8F8F92928F8F8F929292929292928F8F8F8F8E8E
+8E8E8E8E8E8F8F8F8E8E8E8E8C898989898989898989898989898989898989898989898987878789
+89898989898989898E8F92929292929494999A9A9C9A9A9A9A9A999994949494949492929292928F
+8E8F9292949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949492929292929292
+8F8E8E8E898989898C8F929294999A9C9E9EA1A4A4A6A6A9ABAEAEB1B3B3B3B1AEABA6A49E9C9994
+8F8E8E8E8E8F92929494949292928F89877681878E9294999C9EA3A4A4A4A6A9ABAEAEB1B1B3B3B3
+B1B1B1AEA9A6A49E9C94928C89898992999CA4A6ABABABABABA9A9A6A4A4A4A3A19E9E9C9C9A9A9A
+9A9A96949492929292928F8E8E8E8E8C898989878787878787858585858585858585858585858585
+8585858585858585858585858585878789898989898989898989898E8E8E8E8E8E8E8E8E8E8E8F8E
+8E8E8F928F8F8F929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989
+8989898987878785858585858585858584817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7676
+7676767676767474747472726E6C6C6C6C6A6A6A6A6A6A676767666161615F5F5F5F5F5C57575757
+555555514F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8F
+8F8F8F8E8E8F92929292929292929292929292929292929292929292949494949494949494949494
+94949494929292929292929292929292929292767C8187898C929494999C9C9EA4A6A9AEB1B6B9BE
+C1C6C8CFD3D4D9D9DFE1E6E7ECECEEF1F2F4F4F4F7F7F7F7F7F7F7F7F7F4F4F2F2F1EEECECECE7E6
+E4E1E1DFDCD9D9D9D9D4D3D1CFCFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEABA9A9A6A6A6A6A4A49E
+9E9E9E9E9A897C72747476767676797C7C7C7C7C7C7F7F7F7F7F7F818181817F7F818181817F7F7F
+7F7F7C7C7C7C7C79767474747474747472716C6A645F5957575F61676A6C727474767C7C7C7F7F81
+81848585858585858585858585858585817F7F7C7976747472716C6A66615C51717474797C7F7F81
+818587878989898989898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F928F8F8F8F929292929292929292929292929292928F9292
+928F8E8E8F9292928F8F8F8E8E8E8C8C898989898989898989898989898989898989898787878787
+8789898989898989898E8F8F92929294949494999A9A9A999999949494949494929292929292928F
+8F9292929494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949292929292929292
+8E8E8E8C8989898C8E929294949A9C9C9E9EA3A4A4A6A6ABAEAEB1B1B3B1B1AEABA6A49E9C9A9492
+8E8E8E8E8E8F929294949492928F8987747F878C9294949A9C9EA4A4A6A6A9ABAEAEB1B1B3B3B3B1
+B1B1B1AEA9A49E9C9A948F89898989929A9EA4A9ABABABABABA9A6A6A4A4A4A3A19E9E9C9C9A9A9A
+9A9A99949492929292928F8E8E8E8E8C898989878787898787878585858585858585858585858585
+8585858585858585858585858585878789898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8F8F8F8E8F9292929292929292929292929292929292929292929292929292929292929292
+929292928E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+8989898989878787858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976
+767676767676747474747472716C6C6C6C6A6A6A6A6A6A6A676766616161615F5F5F5F5D57575757
+555555554F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8F8F92
+92928F8F929292929292929292929292929292929292929292929292949494949494949494949494
+94949494929292929292929292929292929292767F8487898F9294949A9C9EA1A4A6A9AEB1B7B9BE
+C1C6CCCFD3D4D9DCDFE1E6E7ECECEEF2F2F4F4F4F7F7F7F7F7F7F7F7F7F4F4F2F2F1EEECECECE7E6
+E4E1DFDFDCD9D9D9D9D4D3D1CFCFCFCCCCCCC8C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEAEAEAEABA9A9A9A6A6A6A6A6A4
+A3A3A49E9C94877C6C747676767676797C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7C7C7C7C797676767474747474747472726E6C6A66615C57595F61676A6C6E72747679797C7F7F
+8181848585858585858585858585848481817F7F7C7676747472716C6A67615C54727476797C7F7F
+818487878789898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F
+8F8F8F8E8E8E8E8E8E8F8F8F8F8F8F929292928F9292929292929292929494929292929292929292
+92929292929292929292928F8F8F8F8E8C8C89898989898989898989898989898989898987878787
+878989898989898989898E8E8F92929494949494969999999494949494949492929292929292928F
+92929294949494949499999A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494929292929292928F
+8E8E8E898989898E8F929294999A9C9C9E9EA3A4A6A6A9ABAEB1B1B1B1AEAEABA6A49E9C9C99928E
+8E8E8E8E8F929294949492928E8987817C8789929294999C9EA4A4A6A6A9A9AEAEB1B1B3B3B3B3B1
+B1B1B1ABA6A49E9C94928C8989898E949CA1A6ABABABABABA9A9A6A6A4A4A3A19E9E9E9C9C9C9A9A
+9A9A99949494929292928F8E8E8E8E8E8C8989898789898787878585858585858585858585858585
+8585858585858585858585858585878787898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8F8F8F8E8F8F92928F8F929292929292929292929292929292929292929292929292929292
+929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+8989898989878787858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C76
+767676767676747474747472726E6C6C6C6C6A6A6A6A6A6A676767666161615F5F5F5F5F5C575757
+57555555514FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F929292
+92928F92929292929292929292929292929292929292929292929294949494949494949494949494
+949494929292929292929292929292929292747C81878789929294949A9C9EA3A4A6A9AEB1B9BBC0
+C1C6CCCFD3D4D9DCDFE4E7E9ECEEF1F2F2F4F4F4F7F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECECE7E6
+E4E1DFDFDCD9D9D9D9D4D3D1CFCFCFCCCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEA9A9A9A9A6A6A6A6A6
+A4A4A4A39E9C9285766A7476767676767C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7C76767474747474727272727272726C6C6A67615D595C5F6166676A6C72747476797C7F
+7F818184858585858585858585848481817F7F7F7C7C7976767472716C6A67615D547274767C7C7F
+81848587878989898989898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8F8F8F
+9292928F8F8F8E8F8F92929292929292929292929292929292929292929494949494929292929494
+949492929292929292929292929292928F8E8E8C8C898C8989898989898989898989898989878787
+8787898989898989898C8E8E8F929292929292949494949494949494949492929292929292929292
+92929494949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949492929292929292928F
+8E8E8C8989898E8F929294949A9C9C9E9EA1A4A4A6A6A9AEAEB1B1B1AEAEA9A6A4A19C9C9994928E
+8E8E8E8F929292949494928E8987847984898F9294999A9C9EA4A6A6A9A9AEAEB1B1B1B3B3B3B3B1
+B1B1AEA9A69E9C9A948F89898789929A9EA4A6ABABABABABA9A9A6A6A4A4A3A19E9E9E9C9C9C9A9A
+9A9A99949494949292928F8E8E8E8E8E8C8989898989898987878785858585858585858585858585
+8585858585858585858585858587878787898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8F8E8E8E8F92928F8F929292929292929292929292929292929292929292929292929292
+929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+8989898989898787858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C79
+76767676767676747474747472716C6C6C6C6A6A6A6A6A6A6A676766616161615F5F5F5F5D575757
+57555555554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292929292929292929292929292949494949494949494949494949494
+949494929292929292929292929292929292767F8487898E929494999C9C9EA4A6A6A9AEB3B9BBC1
+C4C8CCD1D4D4D9DCE1E4E7ECECEEF1F2F2F4F4F7F7F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECECE7E6
+E4E1DFDFDCD9D9D9D9D4D3D1CFCFCFCFCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEABA9A9A9A9A6A6A6A9
+A6A6A6A49E9C9A8F81746A747476767679797C7C7C7C7C7C7C7C7C7C7C7F7F7F7C7C7C7F7F7F7C7C
+7C7C7C7979767474747272727272717172727272716C6A67615F5C5C5F5F61666A6C71727476797C
+7F7F81818485858585858585848481817F7F7F7F7F7C7C7979767474726C6A67615D557274797C7F
+81818587878989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8E8F8F929292929292
+92929292928F92929292929292929294929292929292929494949292949494949494949494929494
+9494949494949492929292929494949292928F8F8E8E8E8E8E898989898989898989898989898787
+87878989898989898C8E8E8E8F929292929292929494949494949494949492929292929292929292
+9294949494949494949499999A9A9A9A9A9A9A9A9A9A9A9A99949494949494929292929292928F8E
+8E8E8989898E8F92929494999A9C9C9E9EA3A4A4A6A6A9AEAEAEAEAEABA9A6A4A19E9C9994928E8E
+8E8E8F929292929494928F8989847481878E9294949A9C9EA4A6A6A9A9AEAEAEB1B1B1B3B3B3B3B1
+B1B1AEA6A49E9C99928C8987878E949C9EA6A9ABABABABABA9A9A6A6A4A4A39E9E9E9E9C9C9C9A9A
+9A9A9994949494929292928F8E8E8E8E8E8C89898989898987878785858585858585858585858585
+8585858585858585858585858787878787898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8F8F8F8E8F9292929292929292929292929292929292929292929292929292
+9292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+898989898989878785858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C
+76767676767676767474747472726E6C6C6C6C6A6A6A6A6A6A676767666161615F5F5F5F5F5C5757
+575755555551FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292929292929292929292929294949494949494949494949494949494
+949494929292929292929292929292929292797F8787898F9294949A9C9EA1A4A6A9ABB1B3B9BEC1
+C6C8CFD1D4D9D9DFE1E6E7ECECEEF1F2F2F4F4F7F7F7F7F7F7F7F7F7F4F4F2F2F2F1EEECECECE7E6
+E4E1DFDFDCD9D9D9D9D4D3D3D1CFCFCFCCCCC9C8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEABABA9A9A9A9A6A6A9
+A9A9A6A4A39E9A94897F724F74747476767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7B79767676747472716E6C6C6C6C6C6E72727272726E6C6A615F5D5D5F5F6166676A6C72747679
+7C7F7F8181818585858585848481817F7F7F7F7F7F7F7C7C7C79767474726C6A67615F5574767C7F
+7F818487878789898989898C8E8E8E8E8E8E8E8E8E8F8E8E8E8E8F8F928F8F929292929292929292
+92929292929292929292929294949494949494929292949494949494949494949494949494949494
+9494949494949494949494949494949494929292929292928F8F8F8E8E8E8E8E8C8C8E8E8E898989
+898989898989898C8E8E8E8E8E8F9292929292929294949494949494949292929292929292929294
+94949494949494949494969A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494929292929292928F8E
+8E8C89898C8E8F929294969A9A9C9C9E9EA3A4A4A6A9ABAEAEAEAEABA9A6A49E9E9C9994928F8E8E
+8E8F92929292949492928C89877F7F878C9292949A9C9C9EA4A6A9A9ABAEAEAEB1B1B3B3B3B3B1B1
+B1AEA9A6A19C9A948F8987878992999CA3A6ABABABABABA9A9A9A6A6A4A4A19E9E9E9E9C9C9C9A9A
+9A9A9994949494949292928F8E8E8E8E8E8C89898989898989878787858587858585858585858585
+8585858585858585858585878787878787898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8F8F8F8E8F8F92928F8F929292929292929292929292929292929292929292
+92928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989
+898989898989878787858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C
+7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A6A676766616161615F5F5F5F5D5757
+575755555555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292929292929292929292929494949494949494949494949494949494
+9494929292929292929292929292929292767C81878989929494969A9C9EA3A4A6A9AEB1B6B9BEC1
+C6CCCFD3D4D9D9DFE1E6E7ECECEEF1F2F2F4F4F7F7F7F7F7F7F7F7F7F4F4F2F2F1EEECECECECE7E6
+E4E1DFDFDCD9D9D9D9D4D3D3D1CFCFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEABABA9A9A9A9A9A9
+A9ABA9A6A49E9C9A94877C724F74747476767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C79767676767474726E6C6C6C6C6A6A6C6C7172727272716C6A645F5F5F5F5F6164676A6C6C7476
+797C7F7F7F7F81848585848481817F7F7F7F7F7F7F7F7C7C7C7C7C76747472716C6A675F5776797C
+7F81848587878989898989898E8E8E8E8E8E8E8E8E8F8F8F8F8E8F92929292929292929294949494
+94949292929294949494949494949494949494949492949494949494949494949494949494949494
+9494949494949494949494949496949494949494929292929292929292928F8F8F8F8F8F8E8E8C89
+8989898989898C8E8E8E8E8E8E8F9292929292929294949494949494949292929292929292929294
+94949494949494949494999A9A9A9A9A9A9A9A9A9A9A9A999494949494949292929292928F8E8E8E
+8E8C898C8E8E92929494999A9C9C9C9E9EA4A4A6A6A9A9AEABABABA9A6A49E9E9C9A94928F8E8E8E
+8F92929292929492928E89877F7C84898F9294999A9C9EA4A6A6A9ABAEAEAEB1B1B1B3B3B3B3B1B1
+AEAEA6A49E9C99928C8987878E949A9EA4A9ABABABABABA9A9A9A6A6A4A4A19E9E9E9E9C9C9C9A9A
+9A9A999494949494929292928F8E8E8E8E8E8C898989898989878787858787878585858585858585
+858585858585858585858787878787878789898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8F8E8E8E8F92928F8F929292929292929292929292929292929292929292
+92928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989
+89898989898987878785858585858585858584817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C
+7C76767676767676767474747472726E6C6C6C6C6A6A6A6A6A6A676767666161615F5F5F5F5F5C57
+575757555555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292929292929292929294949494949494949494949494949494949494
+9492929292929292929292929292929292767F8587898E929494999C9C9EA4A6A6A9AEB1B7B9BEC1
+C6CCCFD3D4D9D9DFE1E6E7ECECEEF2F2F2F4F4F7F7F7F7F7F7F7F7F7F4F4F2F2F1EEECECECECE7E6
+E4E1DFDFDCD9D9D9D9D4D3D3D1CFCFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEABABA9A9A9A9A9
+A9ABA9A6A4A19C9C9992847C725F74747676767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C797676747474726E6C6A6A6A6A6A6A6A6C7172747272726C6A64615F5F5F5F6161676A6A6C74
+76797C7C7F7F7F7F81848181817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C79767474726E6C6A5F57767C
+7F7F818587878989898989898C8E8E8E8E8E8E8E8F9292928F8F9292929292949494949294949494
+94949494949294949494949494949494949494949494949494949494949494949494949494949494
+9494949494949494949499999999999994949494949494949292949492929292929292928F8F8E8E
+8C8C8C8C8C8C8E8E8F8F8F8F8E8F9292929292929292949494949494929292929292929292929494
+949494949494949494969A9A9A9A9A9A9A9A9A9A9999999994949494949492929292928F8E8E8E8E
+8E8C8C8E8E8F92929494999A9C9C9E9EA1A4A4A6A6A6A9ABA9A9A9A6A4A19E9C9A9492928F8E8E8F
+92929292929292928E8987817481898E9294949A9C9CA1A4A6A9ABAEAEAEAEB1B1B1B3B3B3B1B1B1
+AEA9A6A19C9A94928987878992949C9EA6A9ABABABABA9A9A9A6A6A6A4A4A19E9E9E9E9C9C9C9A9A
+9A9A9A9694949494949292928F8E8E8E8E8E8C898989898989898787878787878585858585858585
+858585858585858585878787878787878787898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F9292929292929292929292929292929292929292
+928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989
+89898989898989878785858585858585858584817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C
+7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A6A676767616161615F5F5F5F5D57
+575757555555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292929292929292929494949494949494949494949494949494949494
+92929292929292929292929292929292767C818789898F9294969A9C9EA1A4A6A9ABAEB1B9BBC0C4
+C6CCCFD3D4D9DCDFE4E6E7ECECF1F2F2F4F4F4F7F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECECECE7E6
+E4E1DFDFDCD9D9D9D7D4D3D3D1CFCFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEABABA9A9A9A9
+ABABA9A9A6A49E9C9A948E817C745F747474767676797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7976747272716C6A6A64616666676A6C7272727272726C6A6661615F5F5F616166676A6C
+7276767C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767472716C675F557C
+7F7F8184878787898989898C8E8E8E8E8E8E8E8F8F92929292929292929294949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494999A9A9A9A999996949699999994949494949494929292929292928F8F8E
+8E8E8E8E8F8F8E8F8F92928F8F8F9292929292929294949494949494929292929292929292929494
+949494949494949494999A9A9A9A9A9A9A99999999949494949494949492929292928F8E8E8E8E8E
+8E8E8E8E8E8F929494969A9A9C9C9E9EA3A4A4A6A6A6A9A9A9A6A6A4A39E9C9A9492928F8E8E8F92
+929292929292928E898781797F87898F9294999C9C9EA4A6A9A9AEAEAEAEAEB1B1B3B3B1B1B1B1AE
+AEA6A49E9C99928E8787878C92999CA4A6ABABABABABA9A9A9A6A6A6A4A4A39E9E9E9C9C9C9C9A9A
+9A9A9A999494949494929292928F8E8E8E8E8E8C8989898989898787878787878785858585858787
+858585858585858587878787878787878789898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8F8F9292928F929292929292928F92929292929292
+8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+8989898989898987878585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C
+7C7C76767676767676767474747472726E6C6C6C6C6A6A6A6A6A6A676767666161615F5F5F5F5F5C
+575757575555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292929292929294949494949494949494949494949494949494949292
+92929292929292929292929292929292767F8487898C929494999A9C9EA3A4A6A9AEAEB3B9BBC1C6
+C8CCD1D4D4D9DCE1E4E7E7ECECF1F2F2F4F4F7F7F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECECECE7E6
+E4E1DFDFDCD9D9D9D4D4D4D3D1CFCFCFCCCCCCC8C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEABABA9A9A9
+ABABA9A9A6A4A49E9C999489847C744F7474747476767679797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C79767674726E6C6A66615F6161676A6E7272727272726C6A676661615F5F616166676A
+6C72747679797C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C797674726C6A615C54
+7C7F81848587878989898C8E8E8E8E8E8E8E8F8F9292929292929292929494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494999A9A9A9A9A9A999494999A9A999494949494949494949292929292928F
+8F8F9292928F8F8F9292929292929292929292929494949494949494929292929292929292949494
+9494949494949494969A9A9A9A9A9A999996949494949494949494929292929292928E8E8E8E8E8E
+8E8E8E8E8E92929494999A9C9C9C9E9EA4A4A6A6A6A6A9A6A6A6A4A39E9C9A969492928F8E8F9292
+929292928F8F8E8987817C7C84898E9294999A9C9EA3A4A6A9ABAEAEAEAEB1B1B1B3B1B1B1B1AEAE
+ABA6A39C9A9492898785898E949A9EA4A6A9ABABABABA9A9A9A6A6A6A4A4A39E9E9E9C9C9C9C9C9A
+9A9A9A999494949494929292928F8E8E8E8E8E8C8989898989898987878787878785858585878787
+858585858585858787878787878787878989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8F92928F8F9292929292928F8F8F929292929292
+8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+8989898989898987878585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C
+7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A6A676767616161615F5F5F5F5D
+575757575555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292929292929494949494949494949494949494949494949494949292
+929292929292929292929292929292717C7F8789898E9294969A9C9C9EA4A6A6A9AEB1B3B9BEC1C6
+C8CFD1D4D9D9DFE1E6E7E7ECECF1F2F2F4F4F7F7F7F7F7F7F7F7F7F4F4F2F2F2F1EEECECECECE7E6
+E4E1DFDFD9D9D9D9D4D4D4D3D1CFCFCFCCCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAEAEAEAEAEAEABABA9AB
+ABABA9A9A6A6A4A39E9C94928E877F76717474747476767676767C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7974726C6A67615F5F5F61666A6E7272727274726C6C6A676661616161616467
+6A6C727474767679797C7C7C7C7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C767472726C676157
+7C7F7F818487878989898C8E8E8E8E8E8E8F8F929292929292929292949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+9494949494949494949499999A9A9A9A9A999494999A9A9994949494949494949494949292929292
+8F8F9292929292929292929292929292929292929494949494949494949292929292929292949494
+9494949494949494999A9A9A9A9A9A9994949494949494949492929292929292928F8E8E8E8E8E8E
+8E8E8E8E8F92929494999A9C9C9E9EA1A4A4A6A6A6A6A6A6A6A4A39E9C9A99949492928E8E929292
+9292928F8E8C8987817C747F878C9292949A9C9C9EA4A6A9ABAEAEAEAEAEB1B1B1B1B1B1B1B1AEAE
+A9A49E9C99928E8987878992949C9EA4A6A9A9A9ABA9A9A9A6A6A6A6A4A4A39E9E9C9C9C9C9C9C9A
+9A9A9999949494949492929292928F8E8E8E8E8E8C89898989898987878787878787858587878787
+878585858585858787878787878787898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8F8F8F8F8F8F92929292928F8F8F92929292928F
+8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+898989898989898787858585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C
+7C7C7C76767676767676767474747472726E6C6C6C6C6A6A6A6A6A6A676767666161615F5F5F5F5F
+5C5757575755FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292929294949494949494949494949494949494949494949494949292
+929292929292929292929292929292767F8487898C8F9294999A9C9C9EA4A6A9ABAEB1B6B9BEC1C6
+CCCFD3D4D9D9DFE1E6E7E7ECECF1F2F2F4F4F7F7F7F7F7F7F7F7F7F4F4F2F2F2EEECECECECECE7E6
+E4E1DFDFD9D9D9D9D4D4D4D3D1CFCFCFCFCCCCC8C8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEAEAEAEAEAEAEABABAB
+ABABA9A9A6A6A6A4A39C9A949492898179727474747476767676797C7C7C7C7C7C7F7F7C7C7C7C7F
+7F7C7C7C7C7C7C7C7C7C7674726C6A5F5C595F61666C717272747474726C6C6C6A67616161616164
+676A6C72747474767676797C7C7C7C7C7F7F7C7C7C7C7C7C7C7C7C7C7C7C7B7976747472716A665F
+547F7F818487878789898C8E8E8E8E8E8E8F92929292929292929292929494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949999999A9A9A99949499999A9996949494949494949494949492929292
+92929292929292929292929292929292929292949494949494949494949292929292929494949494
+9494949494949496999A9A9A9A9A999494949494949494949492929292929292928E8E8E8E8E8E8E
+8E8E8E8F92929494969A9A9C9C9E9EA3A4A4A6A6A6A6A6A6A4A49E9C9C99949492928F8E8F929292
+92928F8E8C8987817C747C87898F9294999A9C9EA3A4A6A9AEAEAEAEB1B1B1B1B3B1B1B1B1AEAEAB
+A6A49C9A9492898785878992949C9EA4A6A9A9A9A9A9A9A9A6A6A6A6A6A4A49E9E9E9C9C9C9C9A9A
+9A9A9999949494949492929292928F8E8E8E8E8E8C89898989898989878787878787858787878787
+87858585858587878787878787878989898989898989898989898989898E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8F929292928F8F8F8F8F9292928F8F
+8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+898989898989898787858585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C
+7C7C7C7976767676767676747474747472726C6C6C6C6A6A6A6A6A6A6A676767616161615F5F5F5F
+5D5757575755FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929292949494949494949494949494949494949494949494949494929292
+92929292929292929292929292928F797F8789898E9294949A9A9C9C9EA4A6A9AEAEB1B7B9BEC1C6
+CCCFD3D4D9D9DFE1E6E7E9ECECF1F2F2F4F4F7F7F7F7F7F7F7F7F7F4F4F2F2F1EEECECECECECE7E6
+E4E1DFDFD9D9D9D9D4D4D4D3D1D1CFCFCFCCCCC9C8C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBB
+BBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEABAB
+ABABABA9A6A6A6A6A49E9C9A9999948E877F746C747476767676767C7C7C7C7C7F7F7F7F7F7C7F7F
+7F7F7F7C7F7F7F7F7F7F7F7C79746C675F57575D5F676C7172747474747272716C6A676664616161
+66676A6C717274747476767679797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C79797676747472716C6761
+594F7F81848587878989898E8E8E8E8E8F8F92929292929292929292929494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+949494949494949494949494949999999A9996949496999994949494949494949494949494949292
+92929292929292929292949494949492929292949494949494949494949492929292949494949494
+94949494949494999A9A9A9A9A9A9994949494949494949492929292929292928F8E8E8E8E8E8E8E
+8E8E8F9292929494999A9C9C9C9E9EA4A4A6A6A6A6A6A4A4A49E9C9C9A94949292928F8E8F929292
+928F8E8C8987847F767681878C9294949A9C9C9EA4A6A9ABAEAEB1B1B1B1B1B1B3B1B1B1AEAEABA9
+A49E9C99928E898787898E92999C9EA4A6A6A9A9A9A9A9A6A6A6A6A6A4A4A4A19E9E9C9C9C9C9A9A
+9A99999994949494949292929292928F8E8E8E8E8E8C898989898989878787878787878787878787
+87878585858787878787878787898989898989898989898989898989898E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8F92928F8F8F8E8E8F9292928F8F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989
+89898989898989878787858585858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C
+7C7C7C7C7676767676767676747474747272716C6C6C6C6A6A6A6A6A6A676767666161615F5F5F5F
+5F5C57575757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292929294949494949494949494949494949494949494949494949494929292
+9292929292929292929292928F8F767C8187898C8F9294969A9C9C9EA3A4A6A9AEB1B3B9BBC0C4C6
+CCCFD3D4D9DCDFE4E6E7E9ECECF1F2F4F4F4F7F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECECECE9E7E6
+E4E1DFDFD9D9D9D9D4D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBBBBBB
+BBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B6B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAB
+ABABABA9A9A6A6A6A6A49E9C9C9C9C9A9289817671747476767676797C7C7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7C746E675F55575C61676E7274767676747472726C6A6A67666666
+6666676A6C7172747474747476797C7C7C7C7C7C7C7C7C7C7C7C7C797976767676747472716C6A61
+5F557C7F818487878789898C8E8E8E8E8F9292929292929292929292929494949494949494929494
+94949494949494929494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949499999994949494949494949494949494949494949494949492
+92929292949494929294949494949494949494949494949494949494949494929294949494949494
+94949494949496999A9A9A9A9A9994949494949494949492929292929292928F8E8E8E8E8E8E8E8E
+8E8F929292929494999A9C9C9E9EA1A4A4A6A6A6A6A4A4A39E9E9C9A94949292928F8E8F92929292
+8F8E8C8987847F76767F87898F9294999C9C9EA3A4A6ABAEAEAEB1B1B1B1B1B1B1B1B1B1AEAEABA6
+A49C9A94928C878787898E92999C9EA4A6A6A6A9A9A6A6A6A6A6A6A6A4A4A4A19E9E9C9C9C9A9A9A
+9A99999494949494949492929292928F8E8E8E8E8E8C898989898989898787878787878787878787
+87878585878787878787878789898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8F8F8F8F8F8E8E8E8E8F928F8F8F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989
+89898989898989898787858585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C
+7C7C7C7C7976767676767676747474747472726C6C6C6C6A6A6A6A6A6A6A676767616161615F5F5F
+5F5D59575757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929292949494949494949494949494949494949494949494949494949492929292
+92929292929292929292928F8E8E767F8587898E8F9494999A9C9C9EA4A6A9ABAEB1B6B9BBC1C6C8
+CCD1D4D4D9DCE1E4E6E7E9ECECF1F2F4F4F4F7F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECECECE7E7E6
+E4E1DFDFD9D9D9D9D7D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAEAEAEAEAEAEAEAE
+ABABABA9A9A9A6A6A6A6A49E9C9C9C9C9C948E877C746776767676767C7C7C7F7F7F7F7F7F7F7F7F
+81817F7F7F7F7F8181818181817F7C746C675C54575C616A71727479767674747472716C6A6A6767
+6A6A6A6A6C6C7274747474747676797C7C7C7C7C7C7C7C7C7C7C797676767676747474726E6C6A66
+5F594F7F7F8487878787898C8E8E8E8E8F9292929292929292929292929292929494949492929292
+92949494949492929292949494949494929292929494949494949292929294949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94929294949494949494949494949494949494949494949494949494949494949494949494949494
+949494949494999A9A9A9A9A9A999494949494949494949292929292928F8F8E8E8E8E8E8E8F8F8E
+8F929292929494969A9A9C9C9E9EA3A4A4A6A6A4A4A4A19E9E9C9A99949292928F8E8E8F9292928F
+8E8C8989877F79747C81878E9294969A9C9E9EA4A6A9ABAEAEB1B1B1B1B1B1B1B1B1B1AEAEABA9A4
+9E9C96928E89878587898F92999C9EA4A4A6A6A6A6A6A6A6A6A6A6A4A4A4A4A39E9E9C9C9C9A9A9A
+9A9996949494949494949292929292928F8E8E8E8E8E8C8989898989898787898987878787878787
+878787878787878787878789898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8E8E8E8E8F8F8F8F8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989
+8989898989898989878785858585858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C
+7C7C7C7C7C7676767676767676747474747272716C6C6C6C6A6A6A6A6A6A676767666161615F5F5F
+5F5F5C575757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292929494949494949494949494949494949494949494949494949494949292929292
+929292929292929292928F8E8E767C8187898C8F929494999A9C9C9EA4A6A9AEAEB1B7B9BEC1C6C8
+CFD1D4D7D9DEE1E4E7E7E9ECECF1F2F4F4F4F7F7F7F7F7F7F7F7F4F4F2F2F2F1EEECECECECE7E7E6
+E4E1DFDED9D9D9D9D4D4D3D3D1CFCFCFCCCCCCC9C8C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAE
+AEABABA9A9A9A9A6A6A6A6A49E9E9E9E9E9C9A928984766A76767676797C7C7F7F7F7F7F7F7F7F81
+81818181818181818484858481817F7C746C665951555D616C7174797C797676767474726C6C6A6A
+6A6A6C6C6C6C7272747474747476797C7C7C7C7C7C7C7C7C7C7C797676767674747472726C6C6A67
+615F554F7F81848587878789898E8E8E8E8F92929292929292929292929292929292949492929292
+92929294949492929292929294949494929292929292949494949292929292929494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949294949494949494949499969494949494949496999494949494949494949494949494949494
+949494949494999A9A9A9A9A999494949494949492929292929292928F8E8E8E8E8E8E8F8F928F8F
+92929292929494999A9C9C9E9E9EA4A4A4A6A4A4A39E9E9E9C9C99949492928F8E8E8E9292928F8E
+898989877F7C747C7F87898F92949A9C9C9EA3A4A6A9AEAEAEB1B1B1B1B1B1B3B1B1B1AEABA9A6A4
+9C9A949289878587878992949A9CA3A4A4A6A6A6A6A6A6A6A6A6A6A4A4A4A4A39E9E9C9C9C9A9A9A
+9A9994949494949494949292929292928F8E8E8E8E8E8C8989898989898989898987878787878787
+898787878787878787878989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8E8E8E8E8F8F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989
+898989898989898987878585858585858585858585858481817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C
+7C7C7C7C7C7976767676767676747474747472726C6C6C6C6A6A6A6A6A6A6A676767616161615F5F
+5F5F5D595757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292949494949494949494949494949494949494949494949494949494929292929292
+9292929292929292928F8E8E8E767F8587898E8F9294949A9A9C9C9EA4A6A9AEB1B3B9BBBEC1C6C9
+CFD3D4D9D9DFE1E6E7E7ECECECF1F2F4F4F4F7F7F7F7F7F7F7F7F4F4F2F2F2EEECECECECECE7E7E6
+E4E1DFDEDCD9D9D9D4D4D3D1D1CFCFCFCCCCCCC8C8C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAE
+AEACABABA9A9A9A9A6A6A6A6A4A4A39E9E9E9E9E9A92877C6C747676767C7C7C7F7F7F7F7F7F8181
+84848584848484848485878784847F7F7C746C615751575F676C72767C7C79797979767472716C6C
+6A6A6C6C6E6E727474747474767676797C7C7C7C7C7C7C7C7C7C7C7976767676747472726C6C6A67
+615F59547C7F7F81848587878989898C8E8E8F8F9292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949999999999999999999999999494949494949494949494949494949494
+9494949499999A9A9A9A9A9A9994949494949492929292929292928F8E8E8E8E8E8E8F9292929292
+92929292929494999A9C9C9E9EA1A4A4A4A4A4A19E9E9E9C9C9A949492928F8E8E8E8F92928F8E89
+8989877F7C74767C84898E9294999A9C9E9EA4A6A9ABAEAEAEB1B1B1B3B3B3B1B1B1AEAEA9A9A69E
+9C94928E89878587878C92949C9EA1A4A4A4A6A6A6A6A6A6A4A4A4A4A4A4A3A19E9E9C9C9C9A9A9A
+9A999494949494949494929292929292928F8E8E8E8E8E8C89898989898989898989878787878789
+8987878787878787878989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8E8E8E8E8F8F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989
+898989898989898987878585858585858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C
+7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A676767666161615F5F
+5F5F5F5C5757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929494949494949494949494949494949494949494949494949494949292929292929292
+92929292929292928F8E8E8E767C818789898E929294969A9C9C9EA1A4A6A9AEB1B3B9BBC0C1C6CC
+CFD3D4D9D9DFE1E6E7E7ECECECF1F2F4F4F4F7F7F7F7F7F7F7F7F4F4F2F2F1EEECECECECECE7E7E6
+E4E1DFDEDCD9D9D9D4D4D3D1CFCFCFCFCCCCCCC8C8C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAE
+AEAEABABABA9A9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9A897C6A747476797C7C7F7F7F7F7F818184
+8485878787878787858787878785817F7C79726A615754575F6A7274797C7C7C7C7C7C767474726E
+6C6C6C717272727474747676767679797C7C7C7C7C7C7C7C7C7C7C7C7B797676747472726E6C6A6A
+665F5D574F7C7C7F7F81848787878989898C8E8E8F8F8F9292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292949494
+94949494929292949494949494949292949494949494949494949494949494949494949494949494
+9494949494949996949496999A9A9A9A9A9A9A9A9A9A999994949494949494949494949494949494
+949496999A9A9A9A9A9A9A999494949494949292929292929292928F8E8E8E8E8E8F929292929292
+92929292949499999A9C9C9E9EA1A4A4A4A4A19E9E9C9C9C9A999492928F8E8E8E8E8F8F8F8C8989
+89857F7C76747C7F87898F92949A9C9C9EA4A4A6A9ABAEAEAEB1B1B3B3B3B3B1B1B1AEABA9A6A49E
+9A948F8987858787899294999C9E9EA3A4A4A6A6A4A4A4A4A4A4A4A4A4A4A3A19E9E9C9C9C9A9A9A
+9A999494949494949494929292929292928F8E8E8E8E8E8C89898989898989898989878787878789
+8989878787878787878989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989
+89898989898989898787858585858585858585858585858481817F7F7F7F7F7F7F7F7F7C7C7C7C7C
+7C7C7C7C7C7C7976767676767676747474747472726C6C6C6C6C6A6A6A6A6A6A676767616161615F
+5F5F5F5D5957FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929294949494949494949494949494949494949494949494949494949494949292929292929292
+929292929292928F8E8E8E8E767F8487898C8F929494999A9C9C9EA3A4A6ABAEB1B6B9BBC1C4C6CC
+CFD3D4D9DCDFE1E6E7E7ECECECF1F2F2F4F4F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECECECE9E7E7E6
+E4E1DFDCDCD9D9D9D4D4D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAE
+AEAEAEABABABA9A9A9A9A6A6A6A6A6A6A4A4A4A4A4A4A49987766A7476797C7C7C7F7F7F81818484
+858787878787878787878787878785817F7C76726A5F555457616C72767C7C7C7C7F7C7C79767472
+72716E71727272747476767679797C7C7C7C7C7C7F7F7C7C7C7C7C7C7C7C797676747472716C6A67
+66615F575576797C7F7F7F81848787878989898C8E8E8F8F8F929292929292928F92929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+94949492929292929294949494949292929494949494949492949494949492929494949494949494
+949494949499999999999A9A9A9A9A9A9A9A9A9A9A9A999494949494949494949494949494949494
+9499999A9A9A9A9A9A9A9A9994949494949492929292929292928F8E8E8E8E8E8F92929292929292
+92929292949499999A9C9E9E9EA1A3A4A4A39E9E9C9C9A9A99949492928F8E8E8E8E8F8E8C898989
+857F7C76747C7F84898E9294999A9C9EA1A4A6A6A9ABAEAEB1B1B1B1B3B3B3B1B1B1AEABA6A69E9C
+94928E87858585878E92949A9C9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A3A39E9E9E9E9C9C9A9A9A
+9A99949494949494949492929292929292928F8E8E8E8E8E8C898989898989898989898787878989
+8989878787878787898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989
+89898989898989898787878585858585858585858585858584817F7F7F7F7F7F7F7F7F7C7C7C7C7C
+7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A676767666161615F
+5F5F5F5F5C57FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92949494949494949494949494949494949494949494949494949494949494949292929292929292
+92929292928F8F8E8E8E8E747C7F8587898E8F929494999A9C9C9EA4A6A9ABB1B3B9BBBEC1C6C8CC
+D1D4D4D9DCDFE4E6E7E7ECECECF1F2F2F4F4F7F7F7F7F7F7F7F4F4F4F2F2F1EEECECECECE7E7E7E6
+E4E1DFDEDCD9D9D9D4D4D3D1CFCFCFCCCCCCC9C8C6C6C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEAEAEAEAEAEAEAE
+AEAEAEAEABABABA9A9A9A9A6A6A6A9A6A6A6A6A4A4A4A4A39484746A7676797C7C7F7F8181848485
+878787878789898987878787878787847F7F7B746C675F54545C666C74767C7F7F7F7F7F7C7C7674
+747472727272747474767979797C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7C7C7C7976747472726E6A67
+66615F5C574F74767C7C7F7F7F818487878789898C8C8E8E8F8F8F92929292928F8F8F8F92929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929492929292929292929494929292929292949494949492929294949292929292949494949494
+9494949494999A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9A999494949494949494949494999994949496
+999A9A9A9A9A9A9A9A9A999494949494949292929292929292928F8E8E8E8F929292929292929292
+92929294949494999A9C9E9E9E9EA3A4A49E9E9C9C9A9994949492928F8E8E8E8E8E8E8C89898787
+7F7C7674767F7F87899292949A9C9E9EA4A4A6A6ABAEAEAEB1B1B1B1B3B3B3B1B1AEAEA9A6A49E9A
+948F89878584848992949A9C9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9C9C9A9A9A
+9A99949494949494949492929292929292928F8E8E8E8E8E8C898989898989898989898787898989
+8989898787878789898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989
+89898989898989898987878585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C
+7C7C7C7C7C7C7C7976767676767676747474747472726C6C6C6C6C6A6A6A6A6A6A67676761616161
+5F5F5F5F5D59FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929294
+94949494949494949494949494949494949494949494949494949494949494929292929292929292
+929292928F8E8E8E8E8E8E767C818789898E92929494999A9C9E9EA4A6A9AEB1B3B9BBC0C1C6C8CF
+D1D4D7D9DCE1E4E6E7E7ECECECF1F2F2F4F4F4F7F7F7F7F7F7F4F4F2F2F2F1EEECECECECE7E7E7E6
+E4E1DFDFDCD9D9D9D4D4D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1AEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEABABABA9A9A9A9A9A9A9A9A9A9A6A6A6A6A6A49E9281746A76797B7C7F7F7F81848587
+87878787898989898989898989878787817F7C76746C675C4F545F6772747C7F7F7F7F817F7F7C79
+76767474747474747476797C7C7C7C7C7F7F818181817F7F7F7F7F7F7F7F7C797676747472716C6A
+6661615F57544F7476797C7C7F7F8184848787898989898C8E8E8E8F8F92928F8F8E8E8F8F8F9292
+9292929292928F9292929292929292928F9292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929294949292929292929292929292929494949494
+9494949494999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9A9494949494949494949499999A9994949999
+9A9A9A9A9A9A9A9A9A9A9994949494949492929292929292928F8E8E8F8F92929292929292929292
+92929294949494999A9C9C9E9E9EA1A3A19E9C9C9A999494949292928F8E8E8E8E8E8C8989878781
+7C7674767C7F84898E9294999C9C9EA3A4A6A6A9ABAEAEAEAEB1B1B1B3B3B1B1B1AEAEA9A6A19C96
+928C87858581858992949A9C9E9E9EA1A4A4A3A3A3A3A3A3A1A1A1A1A1A39E9E9E9E9E9C9C9A9A9A
+9A9A969494949494949494929292929292928F8E8E8E8E8E8E8C8989898989898989898989898989
+8989898787878989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+89898989898989898987878585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C7C
+7C7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A67676766616161
+5F5F5F5F5F5CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292949494
+94949494949494949494949494949494949494949494949494949494949494929292929292929292
+9292928F8E8E8E8E8E8E8E797F8487898C8F929494949A9A9C9EA3A4A6A9AEB1B6B9BBC1C4C6C9CF
+D3D4D9D9DFE1E6E7E7E9ECECECF1F2F2F4F4F4F7F7F7F7F7F7F4F4F2F2F2EEECECECECECE7E7E6E6
+E4E1DFDEDCD9D9D9D4D4D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEABABABA9A9A9A9A9A9A9ABA9A9A9A9A9A6A4A39C8E8174667676797C7F7F81848787
+8787878789898989898989898989878785817F7C76746C675F4F575F6A74767C7F7F7F8184817F7C
+7C7976767674747676767C7C7C7C7F7F7F818484848484848181817F7F7F7F7C7976747472726E6A
+6764615F59554F6C727476797C7F7F818184858789898989898C8C8E8E8F8F8F8E8E8E8E8E8E8F8F
+8F929292928F8F8F8F8F92929292928F8F8F8F8F9292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292949494
+9494949494999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9994949494949494949494999A9A9999999A9A
+9A9A9A9A9A9A9A9A9A999494949494949292929292929292928F8F8F929292929292929292929292
+92929294949494999A9C9C9E9E9E9E9E9E9C9C9A999494949292928F8E8E8E8E8E8C89898787817C
+7676767B7F7F87899294949A9C9E9EA4A6A6A9A9ABAEAEAEAEB1B1B1B3B3B1B1B1AEA9A6A49E9A94
+8F89878581818792949A9C9E9E9E9E9EA3A1A19E9E9EA1A19E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A
+9A9A999494949494949494929292929292928F8E8E8E8E8E8E8C8989898989898989898989898989
+898989898789898989898989898989898989898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+89898989898989898987878585858585858585858585858585817F7F7F7F7F7F7F7F7F7F7F7C7C7C
+7C7C7C7C7C7C7C7C7976767676767676747474747472726E6C6C6C6C6A6A6A6A6A6A676767646161
+615F5F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494949494949494949494949492929292929292929292
+92928F8E8E8E8E8E8E8E767C7F8587898C8F929494999A9C9C9EA4A6A6ABAEB1B7B9BBC1C6C6CCCF
+D3D4D9D9DFE1E6E7E7ECECECEEF1F2F2F4F4F4F7F7F7F7F7F7F4F4F2F2F1EEECECECECECE7E7E6E6
+E4E1DFDCDCD9D9D9D4D4D1CFCFCFCFCCCCC9C8C8C6C6C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEABABABA9A9A9A9ABABABABABABA9A9A6A6A49E9A8C7F725F76767C7C7F81818587
+8787878989898989898C8C8C898989878784817F7C76746C675F4F57616C74797C8181818787847F
+7C7C7C7C79797676797C7C7C7C7F7F7F818485878787878787858481817F7F7F7C7976747472716C
+6A6661615D57544F6C727476797C7F7F7F818185878989898989898C8C8E8E8E8E8E8E8E8E8E8E8E
+8F8F8F92928F8E8E8E8E8F8F8F92928F8E8E8E8F8F8F8F9292929292928F8F8F9292929292929292
+929292929292929292928F9292929292929292929292929292929292929292929292929292929494
+949494949496999A9C9C9C9E9E9E9C9C9C9C9C9C9A99949494949494949494969A9A9A9A999A9A9A
+9A9A9A9A9A9A9A9A9A999494949494929292929292929292928F9292929292929292929292929292
+92929292949494999A9C9C9C9E9E9E9E9C9C9A999494949292928F8E8E8E8E8E8989898787847F76
+76767B7F7F84898E9294999C9C9EA4A4A6A6A9ABAEAEAEAEAEB1B1B1B1B3B1B1AEA9A6A49E9C9992
+8C8785847F818992949A9C9E9E9E9E9EA1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A
+9A9A99949494949494949492929292929292928E8E8E8E8E8E8E8C89898989898989898989898989
+898989898989898989898989898989898989898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+8989898989898989898787858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7C7C7C
+7C7C7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A676767666161
+615F5F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494949494949494949494949292929292929292929292
+92928F8E8E8E8E8E8E8E767F818787898E92949496999A9C9EA1A4A6A9AEB1B3B9BBC0C1C6C8CCCF
+D3D4D9D9DFE1E6E7E7ECECECEEF1F2F2F4F4F4F7F7F7F7F7F4F4F4F2F2F1EEECECECECE9E7E7E6E6
+E1E1DFDCDCD9D9D9D4D4D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEABABABABABABABAEAEAEAEAEAEABA9A6A4A39E948779745774767C7F7F818487
+87878989898989898C8E8E8E8E8C8989878787847F7C76746C675F4F5C6672747C7F818187878784
+7F7F7C7C7C7C7C7C7C7C7C7F7F7F7F8184858787878787878787878484817F7F7F7C7C767674726C
+6A6764615F59554F6A6C727476797C7F7F7F7F818587878989898989898C8C8E8E8E8E8E8E8E8E8E
+8E8E8E8F8F8E8E8E8E8E8E8E8F8F8F8E8E8E8E8E8E8E8F8F8F929292928F8E8E8F8F8F9292929292
+9292929292929292928F8F8F8F9292929292929292929292928F8F92929292929292929292929292
+949494949494999A9C9C9C9E9E9E9E9C9C9C9C9C9A94949494949494949494999A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9994949494949492929292929292929292929292929292929292929292929292
+92929292949494999C9C9C9C9C9C9E9C9C9C9A9494929292928F8E8E8E8E8E8989898787847F7676
+76797C7F8187899292949A9C9EA1A4A6A6A9ABAEAEAEAEAEAEB1B1B1B1B1B1AEABA6A4A39C9A948F
+8987857F7F878F94999C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A
+9A9A99949494949494949492929292929292928F8E8E8E8E8E8E8C89898989898989898989898989
+898989898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+8989898989898989898787858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7C7C
+7C7C7C7C7C7C7C7C7C7976767676767676747474747472726E6C6C6C6C6A6A6A6A6A6A6767676461
+61615F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494949494949494949494929292929292929292929292
+928F8E8E8E8E8E8E8E767C7F848789898E929494999A9A9C9EA3A4A6A9AEB1B6B9BBC0C1C6C8CCD1
+D3D4D9DCDFE1E6E7E7ECECECEEF1F2F2F2F4F4F7F7F7F7F7F4F4F4F2F2F1EEECECECECE7E7E7E6E6
+E1E1DFDCDCD9D9D9D4D4D3D1CFCFCFCCCCC9C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEABABABAEAEAEAEAEAEAEAEAEAEA9A6A6A49E9C92817C745574797C7F818487
+878789898989898C8E8E8F8F8F8F8E898989878784817F7C74726A5F4F5F6774767C818487878987
+84817F7F7F7F7F7F7C7C7F7F7F81818487878789898989898987878785848181817F7F7C79767472
+6C6761615F5C57514F6A6C727476797C7F7F7F7F8185878787898989898989898C8C8E8E8E8E8E8E
+8E8C8C8E8E8E8E8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8F8F8F8F9292
+9292928F8F8F8F928F8F8E8E8F8F8F929292928F8F8F92928F8F8E8F8F9292929292929292929292
+929294949494999A9A9C9C9C9E9E9E9C9C9C9C9A9994949494949999949494999A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9994949494929292929292929292929292929292929292929292929292929292
+929292929494999A9A9C9C9C9C9C9C9C9A9A9494929292928F8E8E8E8E8C8989898787847C767676
+767C7F7F84898E9294999C9C9EA4A4A6A9A9AEAEAEAEAEAEAEAEB1B1B1B1AEAEA9A6A49E9C94928C
+8787817F818992949A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9E9C9C9C9C9C9A9A
+9A9A99949494949494949492929292929292928F8E8E8E8E8E8E8E8C898989898989898989898989
+898989898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+8989898989898989898787878585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7C7C
+7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A6A67676661
+6161615F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494949494949494949292929292929292929292929292
+928F8E8E8E8E8E8C89767F7F8487898C8F9494999A9A9C9C9EA4A6A6ABAEB1B7B9BBC1C6C6CCCFD1
+D4D4D9DCDFE1E6E7E7ECECECEEF1F2F2F2F4F4F7F7F7F4F4F4F4F2F2F2F1EEECECECECE7E7E6E6E4
+E1E1DFDCD9D9D9D9D4D4D3D1CFCFCFCCCCC9C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEABAEAEAEAEAEAEAEAEAEAEAEABA9A6A4A39E9A89817C6C51747B7C7F8185
+8787878989898C8E8E8E8F8F92928F8E8C8C8989878784817F79746C614F5F6C74797F8487878989
+878481817F7F7F7F7F7F7F7F818184878787898989898989898989878787878584817F7F7C7C7674
+726A645F5F5D57554F616A6C727476797C7C7F7F7F818787878789898989898989898C8C8E8E8E8E
+8C8989898C8C8E8E8E8E8C89898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8E8E8E8E8E8F8F8F
+92928F8F8E8E8F8F8F8E8E8E8E8E8F8F8F928F8F8E8E8F8F8F8E8E8E8E8F8F929292928F8F929292
+929292949494999A9A9C9C9C9E9E9C9C9C9C9C9A9494949496999A999694999A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A969494929292929292929292929292929292929292929292929292929292928F
+8F9292949494999A9A9C9C9C9C9C9C9A9994949292928F8E8E8E8E8E8C8989898787817C76767676
+7C7F7F8187898F92949A9C9EA3A4A6A6A9ABAEAEAEAEAEAEAEAEB1B1B1AEAEA9A6A49E9C99948F89
+87847F7F878C92949A9C9C9C9C9C9C9E9E9E9E9E9C9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A
+9A9A99949494949494949492929292929292928F8E8E8E8E8E8E8E8C898989898989898989898989
+898989898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C898989898989898989
+8989898989898989898987878585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7C7C7C7C7C7C7C7676767676767676747474747272716C6C6C6C6A6A6A6A6A6A67676766
+6161615F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494949494949494949292929292929292929292929292
+8F8E8E8E8E8E8E89767C7F818787898E929494999A9A9C9EA1A4A6A9AEB1B3B9B9BBC1C6C8CCCFD3
+D4D9D9DCDFE1E6E7E9ECECECEEF1F2F2F2F4F4F4F4F4F4F4F4F4F2F2F2EEECECECECECE7E7E6E6E4
+E1E1DFDCD9D9D9D9D4D4D3D1CFCFCFCCCCC9C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1AEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA9A6A6A49E9C9289817C6A72767C7F7F84
+85878789898C8C8E8E8F8F92929292928F8F8E8C8989878784817C747266576172767C7F87878789
+89878784848481818181818184848787878989898C8C8C8C8989898989878787878584817F7C7C76
+746C67615D5C57554F4F616A6C727476797C7C7F7F818485878789898989898989898989898C8C8C
+8989898989898C8C8E8C8989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8C8C8E8E8E8E8E8E8E8E8F8F92928F8F8E8F8F92
+92929292949494999A9A9C9C9E9E9C9C9C9C9A9694949699999A9A999999999A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9994949492929292929292929292929294929292929292929292928F9292928F8E
+8F92929494999A9A9A9A9C9C9A9A9A9694949292928F8E8E8E8E8E8C8989878787817C767679767C
+7C7F7F85898E9292949A9C9EA4A4A6A6A9AEAEAEAEAEAEAEAEAEB1B1B1AEA9A6A4A19C9A94928987
+877F7C81878E92949A9C9C9C9C9C9C9C9E9E9E9C9C9C9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A
+9A9A99949494949494949492929292929292928F8E8E8E8E8E8E8E8E8C8989898989898989898989
+898989898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C89898989898989898989
+8989898989898989898987878585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726C6C6C6C6A6A6A6A6A6A6A676767
+616161615F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494949494949494949494949494949494949492929292929292929292929292928F
+8F8E8E8E8E8E8C89767F7F848789898F9294999A9A9C9C9EA4A4A6A9AEB1B6B9BBC0C1C6C8CCCFD3
+D4D9D9DCDFE4E6E7ECECECECEEF1F2F2F2F4F4F4F4F4F4F4F4F4F2F2F1EEECECECECECE7E7E6E6E4
+E1E1DFDCD9D9D9D9D4D4D3D1CFCFCFCCCCCCC8C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABA9A6A4A49E9C928981796474767C7F7F
+84878787898C8E8E8F8F9292929292929292928F8F8E8C898987877F7C746C616774767F84878789
+898987878787858585848485858787878989898C8E8E8E8E8E8E8E8C8989898987878787847F7F7C
+76746C645F595757544F5F666A6C727476797C7F7F81818587878789898989898989898989898989
+898989898989898989898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898C8E8E8E8E8E8E8E8E8E8F8F8F8E8E8E8E8F
+8F9292929494949999999A9C9E9C9C9C9A9A99949499999A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A99949492929292929292929292949494949492929292929292928F8F8F928F8E8E
+9292929494999A9A9A9A9C9A9A9994949292928F8F8E8E8E8E8E898989878785817F76767C767C7C
+7F7F84878C8F9294999C9CA1A4A4A6A9ABAEAEAEAEAEAEAEAEAEAEB1AEABA9A6A49E9C99948F8987
+817C7F84898E92949A9A9C9C9C9C9C9C9C9E9E9C9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A
+9A9999969494949494949292929292929292928F8E8E8E8E8E8E8E8E8C8989898989898989898989
+8989898989898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8989898989898989898989
+898989898989898989898787858585858585858585858585858581817F7F7F7F7F7F7F7F7F7F7F7F
+7C7C7C7C7C7C7C7C7C7C7C7C7676767676767676747474747472716C6C6C6C6A6A6A6A6A6A676767
+666161615F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494949494949494929292929292929292929292928F8E
+8E8E8E8E8E8E89747C7F818787898E929494999A9C9C9E9EA4A6A6ABAEB1B6B9BBC0C4C6CCCFCFD3
+D4D9D9DFE1E4E6E7ECECECECEEF1F2F2F2F4F4F4F4F4F4F4F4F4F2F2F1EEECECECECE9E7E7E6E6E4
+E1E1DFDCD9D9D9D9D4D4D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABA9A6A6A49E9C9992897F765F74797C7F
+7F84878789898E8F8F92929292929494949292929292928F8E898989877F79746A54747C7F878789
+898C898987878787878787878787878989898C8E8E8F8F8F8F8F8F8F8F8E8C89898989898785817F
+7C76726A615C5755554F4F5F676A6C727476797C7F7F818487878789898989898989898989898989
+898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898C8E8E8E8E8E8C8C8E8E8E8E8C8C8E8E
+8F8F9292929494969494999A9C9C9C9A9A999694999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9999949494929292929292929294949494949494929292929292928F8E8E8F8F8E8E8F
+9292949496999A9A9A9A9A9A9994949292928F8E8E8E8E8E8C898989878785817F76767C79797C7F
+7F8187898E8F9294999C9EA3A4A6A6A9AEAEAEAEAEAEAEAEAEAEAEB1AEA9A6A49E9C9A94928C8984
+7F7C7F8787898F9294999A9A9A9C9C9C9C9C9C9C9C9C9C9C9E9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A
+999999949494949494929292929292929292928F8E8E8E8E8E8E8E8E8E8C89898989898989898989
+89898989898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8989898989898989898989
+898989898989898989898787858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F
+7F7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726C6C6C6C6C6A6A6A6A6A6A6767
+67616161615FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494949494949494949494949494949494949494949292929292929292929292928F8E8E
+8E8E8E8E8E8C89767F7F848789898E9294969A9A9C9C9EA3A4A6A9AEB1B3B7B9BBC1C6C8CCCFD1D3
+D4D9D9DFE1E4E6E7ECECECECEEF1F2F2F2F4F4F4F4F4F4F4F4F4F2F2F1EEECECECECE7E7E7E6E6E4
+E1E1DFDCD9D9D9D9D4D4D3D1CFCFCFCFCCCCC8C8C6C6C6C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABA9A6A6A39E9C948F877C725574797C
+7F7F848787898E8F8F92929292949494949494949292949492928E8E8C89857F766C57767C818789
+89898C89878789878787878787878989898C8E8E8F8F8F929292929292928F8F8E8C8C8989878781
+7F7C766E675F5755554F4F4F616A6C6E7274767B7C7F818485878789898989898989898989898989
+898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F
+8F8F8E8E8E8E8E8E8E8F8F8E8E8E8E8E8E8E8E8C898989898C8E8E8E8E8C89898C8E8E8C89898C8C
+8E8E8F8F92949494949494999A9C9A9A99999494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A99999494949492929292929294949494949494949494949292929292928E8E8E8E8E8E8E92
+92929494999A9A9A9A9A9999949492928F8F8E8E8E8E8E8C898989878784817F76767C797C7C7C81
+818487898E9292949A9C9EA4A4A6A6A9AEAEAEAEAEAEAEAEAEAEAEAEABA6A6A39E9C99928F89877F
+7C7C818187898C8F929494949A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9C9C9C9C9C9A9A9A9A
+99999494949494949492929292929292929292928E8E8E8E8E8E8E8E8E8C89898989898989898989
+898989898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C898989898989898989898989
+89898989898989898989878785858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F
+7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A6767
+67666161615FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494949494949494949494949494949494949292929292929292929292928F8E8E8E
+8E8E8E8E8E8974797F818787898E8F9294999A9C9C9C9EA4A6A6A9AEB1B3B9B9BBC1C6C8CCCFD1D4
+D4D9DCDFE1E4E6E7ECECECECEEF2F2F2F2F2F4F4F4F4F4F4F4F2F2F2F1EEECECECECE7E7E6E6E4E4
+E1E1DFDCD9D9D9D9D4D4D3D1D1CFCFCFCCCCC8C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABA9A9A6A49E9C9C948F857C6A747679
+7C7F818487898C8F929292929494949494949494949494949494929292928F877F767259767F8789
+89898989898989898989898989898989898E8F8F8F8F92929292929292929292928F8F8E8E898987
+847F7C746C615C5555544F4F57616A6C717274797C7F7F8184878787898989898989898989898989
+89898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8F8F92
+92928F8F8E8E8E8E8F928F8F8F8E8E8E8E8E8E8C89898989898E8E8E8E8C898989898C8989898989
+8C8E8E8F929294949492949494999996949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A99999494949494929292929494949494949494949494949492929292928F8E8E8E8E8E8E8F92
+92949494999A9A9A999999949492928F8E8E8E8E8E8E8C898989898787817F79797C7C7C7C7C7F81
+8187898C8F9294999C9C9EA4A4A6A6A9AEAEAEAEAEAEAEAEAEAEAEAEA9A6A49E9C9A94928C89847C
+7C7F7C7F848789898E929294999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9C9C9C9C9A9A9A99
+99999494949494949492929292929292929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989
+898989898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+89898989898989898989878787858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F
+7F7F7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726E6C6C6C6C6A6A6A6A6A6A67
+676764616161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494949494949292929292929292929292928F8E8E8E8E
+8E8E8E8E8989767C7F848789898E929494999A9C9C9EA1A4A6A6ABAEB1B3B9BBBEC1C6C9CCCFD3D4
+D9D9DCDFE1E4E6E7ECECECEEF1F2F2F2F2F2F4F4F4F4F4F4F2F2F2F1EEECECECECECE7E7E6E6E4E4
+E1E1DFDCD9D9D9D7D4D4D3D3D1CFCFCFCCCCC9C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA9A6A6A39E9C9C94898176617476
+7C7C7F818787898E929292929494999999999999969499999A9A99949492929289847C725C7C8187
+8989898C898989898C898989898989898E8E8F9292929292929492929292949492929292928F8E89
+87857F7C726A5F5755544F4F4F57646A6C7274797C7C7F8184858787898989898989898989898989
+898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F92928F8F8F9292
+929292928F8F8F8F8F9292928F8F8F8E8E8E8E8E89898989898C8E8E8E8C898989898C8C89898989
+8C8E8E8E8F9292929292929294949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+999994949494949292929292949494949494949494949494949492929292928E8E8E898C8E8E9292
+92949496999A99999994949492928F8E8E8E8E8E8E8E898989898787847F7C7C7C7C7C7C7F7F8184
+8787898E9292949A9C9EA3A4A6A6A6A9AEAEAEAEAEAEAEAEAEAEAEABA6A6A39E9C94928E89877F76
+7C7C7C7C7F848789898C8F9294969A9A9A9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9C9C9C9A9A9A9A99
+99949494949494949492929292929292929292928F8E8E8E8E8E8E8E8E8E8C898989898989898989
+8989898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+8989898989898989898989878785858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F
+7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A6A6A67
+676766616161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494949494949494949494949494949292929292929292929292928F8E8E8E8E8E8E
+8E8E8C898972767F7F8787898E8F929494999A9C9C9EA3A4A6A9AEAEB1B6B9BBC0C1C6CCCFCFD3D4
+D9D9DCDFE1E4E6E7ECECECEEF1F2F2F2F2F2F4F4F2F2F2F2F2F2F2F1EEECECECECECE7E7E6E6E4E1
+E1E1DFDCD9D9D9D4D4D4D3D3D1CFCFCFCCCCC9C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9
+B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1
+B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA9A6A49E9E9C9C92877C725774
+767C7F7F8487898C8F9292929494999A9A9A9A9A9A9A9A9A9A9C9C9A9A949494948E877C725C7F85
+898989898C89898C8E8989898989898C8E8F9292929292929494949494949494949494929292928F
+8989857F766E675D55544F4F4F515C676C7174797C7F7F7F81848787878989898989898989898989
+8989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F92929292928F9292
+9292929292928F8F929292929292928F8F8E8E8E8C8C8C8C8C8C8E8E8E8C89898989898C89898989
+898E8E8E8E8E8F92928F9292929494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+9994949494929292929294949494949494949494949494949492929292928F8E8C8989898C8F9292
+949494949999969494949492928E8E8E8E8E8E8E8E8C8989898987857F7C7C7C7C7C7C7F7F818485
+8789898E9294999C9C9EA4A4A6A6A6A9AEAEAEAEAEAEAEAEAEAEABA9A6A49E9C9A948F8987817C79
+797C7C7C7C7F858789898E92929494999A9A9A9A9A9A9A9C9C9C9C9C9A9A9A9A9A9C9C9A9A9A9999
+9694949494949494949292929292929292929292928F8E8E8E8E8E8E8E8E8E8C8989898989898989
+89898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989
+8989898989898989898989878787858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F
+7F7F7F7C7C7C7C7C7C7C7C7C7C7C7976767676767676767474747472726E6C6C6C6C6A6A6A6A6A67
+676767666161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494949292929292929292929292928F8E8E8E8E8E8E8E
+8E8C898989767C7F848789898E929294949A9C9C9E9EA4A6A6A9AEB1B1B6B9BBC0C4C6CCCFCFD3D4
+D9D9DFDFE1E4E6E7ECECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE9E7E7E6E6E4E1
+E1E1DFDCD9D9D9D4D4D4D3D3D1CFCFCFCCCCC9C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0BBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7
+B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1
+B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA6A6A49E9E9E9A8E81766672
+74767C7F818789898E9292929494999A9A9A9A9A9A9A9C9C9C9C9C9E9C9A999494948E847671577F
+8787878989898C8E8E8C8989898C8C8E8F9292929292929294949494949496999694949494929292
+928C87817C746A61574F514F4F4F555F6A6C74767C7C7F7F81848787878989898989898989898989
+8989898989898989898989898C898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292929292929292
+92929292929292929292929292929292928F8F8E8E8E8E8F8F8F8E8E8E8E89898989898C89898989
+898C8E8E8E8E8E8E8E8F9292929494949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994
+949494949492929292949494949494949494949494949494949292928F8F8E8C898989898C8F9292
+94949494949494949492928F8E8E8E8E8E8E8E8E8E898989878785817C7C7C7F7F7C7C7F7F858587
+89898C9294949A9C9E9EA4A4A6A6A9A9AEAEAEAEAEAEAEAEABABA9A6A4A19C9A94928E89857F7679
+7C7F7F7F7F7F818787898E8F929494949999999A9A9A9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9999
+9494949494949494949492929292929292929292928F8E8E8E8E8E8E8E8E8E8C89898C8C89898989
+898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989
+898989898989898989898987878785858585858585858585858585858584817F7F7F7F7F7F7F7F7F
+7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726C6C6C6C6A6A6A6A6A67
+676767676161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494949494949494949494949494949492929292929292929292928F8E8E8E8E8E8E8E8E
+8C89898974767C7F8587898E8F929494999A9C9C9EA1A4A6A9A9AEB1B3B7B9BBC1C6C8CCCFD1D3D4
+D9D9DFE1E1E4E6E7ECECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE7E7E7E6E4E4E1
+E1E1DFDCD9D9D9D4D4D4D3D3D1CFCFCFCCCCCCC8C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C0BBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1
+B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA9A6A4A4A19E9E94877C745C
+7274767C7F8487898C8F92949494999A9C9C9C9C9C9C9C9C9C9C9E9E9E9C9C9A9A9994897F766C55
+7F878787898C8E8E8E8E8C898C8C8E8F92929294949492949494969694999A9A9A9A999694949494
+928F89877F7672675F554F4F4F4F4F555F6A72747B7C7F7F81818487878989898989898989898989
+89898989898989898989898C8E8C8C898C8E8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292
+929292929292929292929292929292929292928F8F8F929292928F8F8E8E8C8C8C8C8C8C8C898989
+898C8E8E8E8E8E8E8E8F8F929292949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494
+9494949492929294949494949494949494949494949494949292928F8E8C8989898989898E929294
+9494949494949492928F8E8E8E8E8E8E8E8E8E8E8C8989878785817C7C7C7F7F7F7C7F7F84858787
+898C8F9294999C9C9EA3A4A4A6A6A9ABAEAEAEAEAEAEAEABA9A9A6A6A49E9C99948F89877F79747C
+7F8181818181848587898C8E929294949496999999999A9A9C9C9C9A9A9A9A9A9A9A9A9A9A999996
+949494949494949494949292929292929292929292928F8E8E8E8E8E8E8E8E8E8C8C8C8E89898989
+8989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989
+898989898989898989898989878787858585858585858585858585858584817F7F7F7F7F7F7F7F7F
+7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7676767676767676747474747472716C6C6C6C6A6A6A6A6A
+676767676661FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494929292929292929292928F8F8E8E8E8E8E8E8E8E8C
+89898989767C7F818789898E92929494999A9C9C9EA4A4A6A9ABAEB1B3B9B9BBC1C6C8CCCFD1D4D4
+D9DCDFE1E1E4E6E7ECECECEEF2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE7E7E6E6E4E4E1
+E1E1DFDCD9D9D9D4D4D4D3D1D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1
+B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA9A6A4A4A39E9A8C81796A
+577274797C7F8589898E92929494999A9C9C9C9C9C9C9C9E9E9E9E9E9E9E9C9C9C9A9992877F7467
+517F878789898E8E8E8E8E8C8C8E8E8F929292949494949494999999999A9A9C9C9A9A9999999494
+94928C87817C746C6157514F4F4F4F4F57616C72767C7C7F7F818184878789898989898989898989
+89898989898C8E8C8C898C8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292
+92929292929292929292929292929292929292928F8F92929292928F8F8E8E8E8E8E8E8F8E8C8C89
+8C8E8E8E8E8E8E8E8F8F92929292949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9996949494
+949494949294949494949494949494949494949494949492928F8F8E8C898989878789898F929294
+94949494949492928F8E8E8E8E8E8C8E8E8E8C898989878784817F7C7C7F7F7F7C7F7F8185858789
+898E9294949A9C9E9EA4A4A6A6A6A9ABABAEAEAEAEAEABA9A9A6A6A49E9C9A94928E89847C767C81
+87878787858487878789898E8F9292949494949494999A9A9A9C9A9A9A9A9A9A9A9A9A9A9A999994
+949494949494949494949292929292929292929292928F8E8E8E8E8E8E8E8E8E8C8C8C8E8C898989
+8989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+89898989898989898989898987878785858585858585858585858585858584817F7F7F7F7F7F7F7F
+7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726C6C6C6C6C6A6A6A6A
+676767676761FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949494949494929292929292929292928E8E8E8E8E8E8E8E8E8989
+89898974767C7F8587898E8F92929494999A9C9E9EA4A6A6A9ABAEB1B3B9BBBEC1C6C9CCCFD3D4D9
+D9DCDFE1E1E4E6E7ECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECECE7E7E6E6E4E4E1
+E1DFDFDCD9D9D7D4D4D4D3D1CFCFCFCFCCCCC9C8C8C6C6C6C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA6A6A4A49E9C92877F76
+614F72767C7F8187898C8F929494999A9C9C9C9C9C9C9C9E9E9EA1A1A1A1A19E9E9C9A9492877C74
+647C7F878789898E8E8E8E8E8E8E8E929292949494949494999A9A9A9A9A9C9C9C9C9A9A9A9A9A94
+94928F89877F7C726A5F554F4F4F4F4F4F57616C74767C7F7F7F7F81848787898989898989898989
+8C8C8C898C8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292
+92929292929292929292929292929292929292929292929292929292928F8F8F9292928F8F8E8E8C
+8C8E8F8F8E8E8E8E8F92929292949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9694949494
+9494949494949494949494949494949994949494949492928F8E8C89898987878787898E92929494
+949494949292928F8E8E8E8E8C89898C8E8C898989878784817F7C7C7F7F7F7F7F7F818585878989
+8E8F9294999C9C9EA1A4A4A6A6A6A9A9ABAEAEAEAEAEA9A9A6A6A49E9E9C99948F89877F797C8189
+89898989878787878789898E8F929292949494949494999A9A9A9A9A9A9A9A9A9A9A9A9A99999694
+94949494949494949494929292929292929292929292928F8E8E8E8E8E8E8E8E8E8C8E8E8E898989
+89898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+8989898989898989898989898987878785858585858585858585858585858481817F7F7F7F7F7F7F
+7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A6A
+676767676766FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494949494949494949494949494929292929292929292928F8E8E8E8E8E8E8E8E898989
+898989767C7F818789898F92929494949A9A9C9EA3A4A6A6A9AEAEB1B6B9BBC0C1C6CCCFCFD3D4D9
+D9DCDFE1E1E4E6E7ECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE9E7E7E6E6E4E1E1
+E1DFDFDCD9D9D4D4D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABA9A6A6A4A19C9989847C
+715F6E74767C7F8789898F929494999A9A9C9C9E9E9C9E9E9EA3A3A3A3A3A4A39E9E9C99948E857C
+74617C818787898C8E8E8E8E8E8E8F929294949494969494999A9A9C9A9A9C9C9E9C9C9A9A9A9A99
+9492928E87847F766C6659544F4F4F4F4F4F5C666C74797C7C7F7F7F818487878787898989898989
+898C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F929292929292
+9292929292929292929292929292929292929292929292929292929292928F8F92929292928F8F8E
+8E8F8F8F8F8F8E8F9292929294949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494
+94949494949494949494949494999999969494949492928F8E8C8989898787878789898F92929494
+9494929292928F8E8E8E8E8C8989898989898987878785817F7C7C7C7F7F7F7F7F7F85858787898C
+8F9294969A9C9E9EA3A4A4A6A6A9A9A9ABAEAEAEABABA9A6A6A4A19E9C9A94928E89817C767F898F
+8F8E8C8C898787878989898E8F92929292949494949496999A9A9A9A9A9A9A9A9A9A9A9A99999494
+94949494949494949494929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989
+8C8C89898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+8989898989898989898989898987878785858585858585858585858585858584817F7F7F7F7F7F7F
+7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726E6C6C6C6C6A6A6A
+6A6767676767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494949494949494949494949492929292929292929292928E8E8E8E8E8E8E8E8C898989
+898787767C7F8587898E8F92929494999A9C9C9EA4A6A6A9A9AEB1B1B7B9BBC1C4C6CCCFCFD3D4D9
+D9DFDFE1E4E4E6E7ECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE7E7E7E6E6E4E1E1
+E1DFDFDCD9D9D4D4D4D3D3D1CFCFCFCCCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABA9A6A6A49E9A92877F
+796A5C7174797F8487898E929294999A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A4A4A39E9C9A94928C84
+7C72617C858789898C8E8E8E8E8F8F9292949494949999999A9A9A9C9C9C9C9E9E9E9C9C9C9C9C9A
+9494928F89877F7C746A5F554F4F4F4F4F4F4F5C676C7476797C7C7F7F8184878787878787898989
+898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F92929292
+92929292929292929292929292929292929292929292929292929292929292929292929292928F8F
+8E8F9292928F8F8F92929294949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494
+949494949494949494949499999A9A9A9994949492928F8C898989878787858787898E9292929292
+92929292928F8F8E8E8E8C8989898989898987878585847F7F7F7F7F7F7F7F7F7F8485878789898E
+9292949A9C9C9E9EA3A4A6A6A6A6A9A9ABABABABABA9A6A6A4A19E9C9A9494928C877F767C879294
+9494928E8C89898989898C8E8E9292929292929494949499999A9A9A99999A9A9A9A9A9999969494
+9494949494949494949492929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8C89
+8C8C898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989
+898989898989898989898989898987878785858585858585858585858585858481817F7F7F7F7F7F
+7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C6A6A6A
+6A6767676767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494949494949494949492929292929292929292928F8E8E8E8E8E8E8E8E89898989
+8787767C7C8187898C8F9292949496999A9C9EA1A4A6A6A9A9AEB1B3B9BBBEC1C6C8CCCFD1D3D4D9
+D9DFE1E1E4E4E6E7ECECEEEEF1F2F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE7E7E7E6E4E4E1E1
+E1DFDFDCD9D9D4D4D4D3D1D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0C0BBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A6A49E9C948E87
+7C74665772747C7F87898C8F929494999A9C9C9E9E9E9E9EA4A4A4A4A4A4A4A4A4A39E9C9A949289
+817C72617F878789898E8E8E8E8F8F929294949499999A9A9A9A9A9C9C9C9C9E9E9E9E9C9C9C9C9A
+999492928E89847F766E665C544F4F4F4F4F4F4F59616C727476797C7C7F81848587878787878989
+8989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F9292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+8F8F92929292929292929294949499999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494
+9494949494949494949699999A9A9A9994949492928F8C89898987878585878789898E9292929292
+9292928F8F8E8E8E8E8E898989898989898787858584817F7F7F7F7F7F7F7F7F8185858789898C8F
+9294969A9C9E9EA1A4A4A6A6A6A6A9A9A9ABABABA9A6A6A4A19E9C9A9994928F89817C7B84929499
+9C9A94928F8C8989898C8E8E8F8F92929292929494949494999A9A9999999A9A9A9A9A9999949494
+9494949494949494949492929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C
+8C8E8C8989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+898989898989898989898989898989878785858585858585858585858585858584817F7F7F7F7F7F
+7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7B7676767676767676747474747272716C6C6C6C6A6A
+6A6A67676767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494949494949494929292929292929292929292928E8E8E8E8E8E8E8E8C89898989
+8785767C7F8587898E8F92929494999A9A9C9EA4A4A6A6A9ABAEB1B6B9BBC0C1C6C8CCCFD1D4D4D9
+DCDFE1E1E4E6E6E7ECECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F2EEEEECECECECE7E7E6E6E4E4E1E1
+E1DFDFDCD9D9D4D4D4D3D1CFCFCFCFCCCCC9C8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0BBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A6A4A19C999289
+817C6E5F5472767F8487898E929294999A9C9C9C9E9E9EA3A4A4A4A4A4A4A4A6A4A4A39E9C9A9492
+89817972617F878789898E8E8E8F92929294949699999A9A9A9A9A9C9C9C9E9E9E9E9E9C9C9C9C9A
+999492928F89877F7C746A61554F4F4F4F4F4F545457616A6C7274767C7C7F818484858787878989
+8989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F
+9292929292928F8F9292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929294949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494
+949494949494949494999A9A9A9A9A99949492928F8C8989878787858587878989898E8F92929292
+928F8F8E8E8E8E8E8E8C8989898989898987878584817F7F7F7F7F7F7F7F7F818585878989898E92
+92949A9C9C9E9EA3A4A4A6A6A6A6A9A9A9ABA9A9A6A6A4A39E9C9A9994928F8C877F767F8F999A9C
+9E9E9A92928F8E8E8E8E8E8F8F8F9292929292949494949494999A999996999A9A9A999994949494
+949494949494949494949492929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8C
+8E8E8E89898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C898989898989898989898989
+89898989898989898989898989898987878585858585858585858585858585858581817F7F7F7F7F
+7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726C6C6C6C6C6A
+6A6A6A676767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494949292929292929292929292928F8E8E8E8E8E8E8E8E8989898987
+87767C7C818789898F92929494999A9A9C9C9EA4A6A6A6A9ABAEB1B7B9BBC1C4C6C9CCCFD3D4D9D9
+DCDFE1E1E4E6E6E7ECECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECECE7E7E6E6E4E4E1E1
+DFDFDFDCD9D9D4D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A6A6A49E9A948E
+877F766A596C747C8187898C8F9294949A9C9C9C9E9EA1A3A4A4A4A6A6A6A6A6A6A4A4A39E9C9A94
+928981797261848787898C8E8E8E929292949499999A9A9A9A9A9A9A9C9C9E9E9E9E9E9E9C9C9C9C
+9A9494928F8C89847F7972675C544F4F4F4F4F4F555559616A6C7174767C7C7F7F81818487878789
+89898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8E8E8E8E8E8E8E8E
+8F8F8F92928F8F8E8F8F929292929292929292929292929292929292929292929292929292929292
+92929292929292929294949494999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A96949494949494
+9494949494949494969A9A9A9A9999949494928F8C8989878785848485878789898C8E8F8F928F8F
+8E8E8E8E8E8E8E8E8C8989898989898987878584817F7F7F7F7F7F7F7F7F818585878789898C8F92
+94999A9C9C9E9EA3A4A4A4A6A6A6A6A9A9A9A9A6A6A4A39E9C9C9A9494928E877F797C89949A9C9E
+A4A19C9492928F8F8F8E8F8F8F929292929292949494949494999999969499999A99999994949494
+949494949494949494949292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8C
+8E8E8E8C8989898C89898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C89898989898989898989898989
+89898989898989898989898989898987878585858585858585858585858585858584817F7F7F7F7F
+7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7676767676767676747474747472716C6C6C6C6A
+6A6A6A676767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494949494949492929292929292929292928F8F8E8E8E8E8E8E8E8E898989898987
+85767C7F8487898C8F92949494999A9C9C9EA3A4A6A6A9A9AEB1B3B9B9BEC1C6C6CCCFCFD3D4D9D9
+DCDFE1E1E4E6E6E7ECECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE9E7E7E6E6E4E1E1E1
+DFDFDFDCD9D9D4D4D3D3D1CFCFCFCCCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEACABABABA9A9A6A49E9C9992
+89847C7261576E767F8487898F929494999C9C9C9E9EA3A4A4A4A4A6A6A6A6A6A6A6A4A4A39E9C99
+928F8981796E5F878789898E8E8E8F92929494969A9A9A9A9C9A9A9A9C9C9E9E9E9E9E9E9E9C9C9C
+9A999492928E89877F7C746C61574F4F4F4F4F4F5455575C616A6A6C72767C7C7F7F818181878789
+898989898989898989898989898C8C8E8E8E8E8E8E8C8C8C8E8E8C8989898C8C8E8E8E8E8E8C8C8C
+8E8E8F8F8F8F8E8E8E8E8F8F92929292929292929292929292929292929292929292929292929292
+92929292949494949494949499999A9A9A9A9A9A9C9C9C9A9A9A9A9A9A9A9A9A9994949494949494
+9494949494949494999A9A9A9999949494928F8C898787878481818487878989898E8E8E8F8F8E8E
+8E8E8E8E8E8E8C8989898989898989878785847F7F7F7F7F7F7F7F7F7F7F848587878989898E8F92
+949A9C9C9C9EA1A3A4A4A4A6A6A6A6A6A9A6A6A6A4A39E9C9C9A9494928F89847C7985929A9C9EA1
+A4A19E99949292928F8F8F8F92929292929292949494949494949999949494999A99999494949494
+94949494949494949492929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E89898C8C898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+89898989898989898989898989898987878585858585858585858585858585858585817F7F7F7F7F
+7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726E6C6C6C6C
+6A6A6A6A6767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949494949494929292929292929292928F8E8E8E8E8E8E8E8E8C89898989898787
+767C7C818787898E92929494999A9A9C9C9EA4A4A6A6A9A9AEB1B6B9BBC0C1C6C8CCCFCFD3D4D9D9
+DFDFE1E4E4E6E7E7ECECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE7E7E7E6E6E4E1E1E1
+DFDFDFDCD9D9D4D4D3D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A6A49E9C9A94
+8F87817C6C5D6A72797F84878C929294999A9C9C9E9EA1A4A4A4A4A6A6A6A6A6A6A6A6A6A4A39E9C
+94928F8981766C5C8787898C8E8E8F9292949494999A9A9C9C9C9A9A9C9C9E9E9E9E9E9E9E9E9C9C
+9C9A9494928F8C89847F7672675D514F4F4F4F4F4F5557595F666A6C717476797C7F7F7F7F818587
+878989898989898989898989898989898C8C8E8E8C8989898C8C8989898989898C8C8E8E8C898989
+8C8C8E8E8F8E8E8E8E8E8E8E8F8F9292929292929292929292929292929292929292929292929292
+9292929494949494949499999A9A9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9994949494949494
+9494949494949494999A999994949494928F8C8987878584817F8487878989898C8E8E8E8E8C8C8C
+8E8E8E8E8C898989898989898987878785847F7F7F7F7F7F7F7F7F7F7F84858587898989898E9294
+999A9C9C9E9E9EA3A4A4A4A6A6A6A6A6A6A6A6A4A49E9C9C9A9994928F8C877F767F8C999C9E9EA4
+A4A19E9C94949492928F8F9292929292929292929494949494949494949494969999969494949494
+94949494949494949492929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8C8C8C8E8C89898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898989
+8989898989898989898989898989898787878585858585858585858585858585858584817F7F7F7F
+7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472716C6C6C6C
+6A6A6A6A6767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494949494949494929292929292929292928F8E8E8E8E8E8E8E8E8C8989898989878785
+767C7F818789898E92929494999A9C9C9EA1A4A4A6A6A9ABAEB1B7B9BBC1C4C6C8CCCFD1D4D4D9D9
+DFDFE1E4E4E6E7E7ECECECEEF1F2F2F2F2F2F2F2F2F2F2F2F2F1EEECECECECE7E7E6E6E4E4E1E1E1
+DFDFDEDCD9D9D4D4D3D1D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BEBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A6A6A39C9A99
+9489877F7467576C747C8187898F9294949A9C9C9E9EA1A4A4A4A6A6A6A6A6A9A9A6A6A6A6A4A39C
+9A94928F897F746A578787898C8E8F9292949494999A9A9C9C9C9C9A9C9C9C9E9E9E9E9E9E9E9E9C
+9C9A969492928E89877F7C746C61574F4F4F4F4F4F54575C5F61676A6C727476797C7F7F7F7F8185
+8787878989898989898989898989898989898C8C8989898989898989898989898989898C89898989
+89898C8C8E8E8E8E8E8E8E8E8E8F8F8F929292929292929292929292929292929292929292929292
+929294949494949999999A9A9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A999494949494949494
+949494949494949499999494949494928F8E89878784817F7F8185878989898C8E8E8C8C89898989
+8C8E8C8989898989898989898787858584817F7F7F7F7F7F7F7F7F7F81858587898989898C8F9294
+9A9A9C9C9E9E9EA1A3A4A4A4A6A6A6A6A6A4A4A49E9E9C9A999494928E8981797C87929C9E9EA4A6
+A4A19E9C9994949292928F9292929292929292929494949494949494949494949999949494949494
+9494949494949494929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8C8C8E8C89898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+8989898989898989898989898989898987878585858585858585858585858585858584817F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7B7676767676767676747474747472716C6C6C
+6C6A6A6A6A67FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494949494949494929292929292929292928F8E8E8E8E8E8E8E8C898989898987878576
+797C7F8487898C8F929294999A9A9C9C9EA3A4A4A6A6A9AEB1B3B9B9BEC1C4C6C8CCCFD1D4D7D9DC
+DFDFE1E4E6E6E7E7ECECECEEEEF1F2F2F2F2F2F2F2F2F2F2F2EEECECECECECE7E7E6E6E4E4E1E1E1
+DFDFDCD9D9D9D4D3D3D1CFCFCFCFCCCCCCC8C6C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A6A49E9C9A
+949289847C6C5F546C747F848789929494999C9C9E9EA1A4A4A4A6A6A6A6A6A9A9A9A6A6A6A6A4A1
+9C9A94928F897C7266548789898E8F8F92929494999A9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E
+9C9A999492928E8989847C7672675D4F4F4F4F4F4F4F575C5F5F646A6C71727476797C7C7F7F7F81
+85878787898989898989898989898989898989898989898989898989898989898989898989898989
+89898989898C8E8E8E8E8E8E8E8E8E8F8F9292929292929292929292929292929292929292929292
+92929494949499999A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A999494949494949494
+949494949494949494949494949492928E89878584817F7F81858789898C8C8C8C89898989898989
+8C898989898989898989898787858585817F7F7F7F81818181817F81858587878989898C8E929499
+9A9C9C9C9E9E9E9EA3A4A4A4A6A4A4A6A4A4A49E9E9C9C9A9494928E89877C76848F9A9EA1A4A4A6
+A4A19E9C9A9994929292929292929292929292929494949494949494949494949496949494949494
+9494949494949494929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8C8E8E8E8C8989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+8989898989898989898989898989898987878585858585858585858585858585858584817F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767676747474747472726C6C6C
+6C6C6A6A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494949492929292929292929292928F8E8E8E8E8E8E8E8E89898989898787858476
+7C7F818787898C8F929494999A9C9C9C9EA3A4A6A6A9ABAEB1B6B9BBC0C1C6C6C9CCCFD3D4D9D9DC
+DFDFE1E4E6E6E7E7ECECECECEEF1F2F2F2F2F2F2F2F2F2F2F1EEECECECECECE7E7E6E6E4E1E1E1DF
+DFDFDCD9D9D9D4D3D3D1CFCFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABA9A9A6A49E9C9A
+99948E877F7467596A71797F85898F9294999A9C9C9E9EA3A4A4A6A6A6A6A9A9A9A9A9A9A6A6A6A4
+A19C9A94928E84766C5F8787898C8E8F8F929494999A9A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E
+9C9C9A9494928F8C89877F79746A61574F4F4F4F4F4F55575F5F61676A6C727476797C7C7C7F7F81
+84858787898989898989898989898989898989898989898989898989898989898989898989898989
+898989898989898C8E8E8E8E8E8E8E8E8E8F8F929292928F8F8F9292929292929292929292929292
+929494949496999A9A9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A969494949494949494
+9494949494949494949494949292928E898785817F7F7F818587898C8C8989898989898989898989
+898989898989898989898987878585847F7F7F7F84848481817F8185858787898989898E92949499
+9A9C9C9C9E9E9E9EA1A4A4A4A4A4A4A4A4A39E9E9C9C9A9994928F89877F747F89949E9EA4A4A6A6
+A4A19E9C9C9A94949292929292929292929292929494949494949494949494949494949494949494
+949494949494949292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E89898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+8989898989898989898989898989898987878585858585858585858585858585858584817F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767674747474747472716C6C
+6C6C6A6A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494929292929292929292929292928F8E8E8E8E8E8E8E8C89898989878785857679
+7C7F818789898E92929494999A9C9C9E9EA4A4A6A6A9ABAEB1B7B9BBC0C1C6C6CCCFCFD3D4D9D9DC
+DFE1E1E4E6E7E7E7ECECECECEEF1F2F2F2F2F2F2F2F2F2F2F1EEECECECECE9E7E7E6E6E4E1E1E1DF
+DFDFDCD9D9D9D4D3D3D1CFCFCFCFCFCCCCC8C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABA9A9A6A6A49E9C
+9A949289817C6C5F556A747C8187899294949A9C9C9E9EA3A4A4A6A6A6A6A9A9A9ABABA9A9A6A6A4
+A4A19C9A9492897F746A578789898C8E8F929494999A9A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E
+9C9C9A999492928E8987817C7672675C4F4F4F4F4F4F54575C5F61676A6C71727476797C7C7F7F81
+81848787878989898989898989898989898989898989898989898989898989898989898989898989
+89898989898989898C8C8E8E8E8E8E8E8E8E8E8F8F928F8F8E8F8F92929292929292929292929292
+9494949494999A9A9A9C9C9C9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A99949494949494949494
+94949494949494949494929292928E898785817F7F7F818787898989898989898989898989898989
+898989898989898989898787858584817F7F7F8485848484817F84858587898989898E8F9294949A
+9A9C9C9C9C9E9E9EA1A3A4A4A4A4A4A3A19E9E9C9C9A999492928C8984797C87929C9EA1A4A6A6A6
+A49E9E9C9C9A99949292929292929292929292929294949494949494949494949494949494949494
+949494949494929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+8989898989898989898989898989898987878585858585858585858585858585858585817F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767674747474747472726E6C
+6C6C6C6A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94949494949494949292929292929292929292928F8E8E8E8E8E8E8E8E898989898787858584767C
+7F7F848789898E929294949A9A9C9C9EA1A4A4A6A6A9AEB1B3B9B9BEC1C1C6C8CCCFCFD3D4D9D9DC
+DFE1E1E4E6E7E7E9ECECECECEEF1F2F2F2F2F2F2F2F1F1F1F1EEECECECECE7E7E7E6E4E4E1E1E1DF
+DFDFDCD9D9D9D4D3D1D1CFCFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABA9A9A6A6A49E9C
+9A99948C877F74675C516C747F85898E9494999C9C9E9EA3A4A4A6A6A6A9A9A9ABABAEABABA9A6A6
+A4A4A19C99928E877C7261518787898E8E929294969A9A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E
+9E9C9C999494928F8987847F79746A61574F4F4F4F4F4F55595F61676A6C6C727476797C7C7F7F7F
+81848787878989898989898989898989898989898989898989898989898989898989898989878989
+898989898989898989898C8C8E8E8E8E8E8E8E8E8F8F8F8E8E8E8E8F8F9292929292929292929294
+9494949499999A9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A99949494949494949494
+949494949494949494929292928E8987857F7F7F7F81878789898989898989898989898989898989
+8989898989898989898787858585818181818485858585817F84858587898989898C8F929494999A
+9A9C9C9C9C9E9E9E9EA3A4A4A4A4A39E9E9E9C9C9C9A9494928E89877C76818C949E9EA3A4A6A6A6
+A49E9E9C9C9A99949492929292929292929292929292949494949494949494949494949494949494
+94949494949492929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989
+8989898989898989898989898989898987878785858585858585858585858585858585817F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676767674747474747472726C
+6C6C6C6A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494949292929292929292929292928F8E8E8E8E8E8E8E8E8C898989898787858476797C
+7F818787898C8F929294999A9C9C9E9EA3A4A4A6A9ABAEB1B6B9BBBEC1C4C6C8CCCFD1D4D4D9D9DC
+DFE1E1E4E6E7E7ECECECECECEEF1F2F2F2F2F1F1F1F1F1F1F1EEECECECECE7E7E6E6E4E4E1E1E1DF
+DFDEDCD9D9D7D4D3D1CFCFCFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABA9A9A6A6A6A39E
+9C9A949289817C6C61576771798187899294999A9C9C9EA3A4A4A6A6A6A9A9A9ABABAEAEAEABA9A6
+A6A4A49E9C9492897F746C5C848587898E8F929494999A9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E
+9E9C9C9A9494928F8C89877F7C7471665C4F4F4F4F4F4F54575D61666A6C6C72747676797C7C7F81
+81818587878989898989898989898989898989898989898989898989898987878989898987878787
+8989898989898989898989898C8C8E8E8E8E8C8C8E8E8F8E8E8E8E8E8F8F92929292929292929294
+94949496999A9A9C9C9C9C9E9E9E9E9E9E9EA19E9E9E9E9C9C9A9A9A9A9994949494949494949494
+9494949494949494949292928F8987857F7F7F818487878989898989898989898989898989898989
+89898989898989878787858585848484848485858585848184858587898989898C8F92929494999A
+9A9C9C9C9C9E9E9E9EA1A3A4A3A39E9E9C9C9C9A9A9494928F898781747C89929C9EA1A4A4A6A6A4
+A49E9E9C9C9A9A949494929292929292929292929292949494949494949494949494949494949494
+94949494949292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989
+898989898989898989898989898989898987878585858585858585858585858585858584817F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C767676767676747474747474747271
+6C6C6C6C6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949492929292929292929292928F8E8E8E8E8E8E8E8E8C89898989878785847F767C7F
+7F848789898E92929494999A9C9C9E9EA3A4A6A6A9AEAEB1B6B9BBBEC1C6C6C8CCCFD1D4D7D9D9DC
+DFE1E1E4E6E7E7E9ECECECECEEEEF2F1F1F1F1F1F1F1F1EEEEECECECECECE7E7E6E6E4E4E1E1DFDF
+DFDCDCD9D9D7D4D3D1CFCFCFCFCFCFCCCCC9C8C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A6A6A6A49E
+9C9A969289857F746A5D546A727F84878E94949A9C9C9EA1A4A4A6A6A6A9A9A9ABAEAEAEAEAEABA9
+A6A6A4A49C99928E877C7267578184878C8E929294999A9C9C9C9E9C9C9C9C9E9E9E9E9E9E9E9E9E
+9E9C9C9A999492928E8987817C76746A5F574F4F4F4F4F4F575C5F61676A6E72747476797C7C7F81
+81848587878789898989898989898989898989898989898989898989898787878787878787878787
+87878989898989898989898989898C8E8E8E8C898C8C8E8E8E8E8E8E8E8E8F8F9292929292929294
+949494999A9A9A9C9C9C9C9E9E9EA3A3A3A3A3A19E9E9C9C9C9A9A9A9A9994949494949494949494
+949494949494949492928F8E8989877F7F7F81848787898989898989898989898989898989898989
+898989898987878785858585858585858585858585858181858587878989898C8E8F929294949A9A
+9A9A9C9C9C9E9E9E9E9EA3A3A19E9E9C9C9C9A9A9994928F8C89857C76878F999E9EA3A4A6A6A6A4
+A49E9E9C9C9A9A999494929292929292929292929292929494949494949494949494949494949494
+9494949494929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+898989898989898989898989898989898987878585858585858585858585858585858584817F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C797676767676747474747474747272
+6E6C6C6C6C6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494929292929292929292928F8F8E8E8E8E8E8E8E8E8C89898989898785847F76767C7F
+818787898E8F92929494999A9C9C9E9EA4A4A6A9ABAEB1B3B7B9BBC0C1C6C6C9CCCFD3D4D9D9D9DC
+DFE1E1E4E6E7E7E7ECECECECECEEF1F1F1F1F1EEEEEEEEEEEEECECECECE9E7E7E6E6E4E1E1E1DFDF
+DFDCDCD9D9D7D4D3D1CFCFCFCFCFCFCCCCC9C8C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A6A6A6A49E
+9E9C99948F87817C6C61574F6C747F87899294999A9C9EA1A4A4A6A6A6A9A9ABABAEAEAEAEAEAEAB
+A9A6A6A49E9C94928981766C614F7F85898E929294999A9C9C9C9C9E9C9C9C9E9E9E9E9E9E9E9E9E
+9E9C9C9C9A9494928F8987847F79746C615C4F4F4F4F4F4F54575F61666A6C72747476797C7C7F81
+84858787878789898989898989898989898989898989898989898989898787878787878787878787
+878787878989898989898989898989898C8C898989898C8E8E8E8E8E8E8E8E8F8F92929292929292
+949499999A9A9C9C9C9C9E9E9EA1A4A4A4A4A3A19E9E9C9C9A9A9A9A9A9694949494949494949494
+949494949494949492928F8C89877F7C7F7F84878787898989898989898989898989898989898989
+898989898987878585858585858585858585858585848485858787898989898E8F92929494999A9A
+9A9A9C9C9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A999492928E89877F767F89929C9EA1A4A4A6A6A6A4
+A49E9E9C9C9A9A999494949292929292929292929292929294949494949494949494949494949494
+9494949492929292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+89898989898989898989898989898989898787858585858585858585858585858585858584817F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7976767676747474747474747472
+726C6C6C6C6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949494929292929292929292928F8E8E8E8E8E8E8E8E8989898989898787847F7F767C7F7F
+8487898C8E92929494949A9A9C9C9EA1A4A4A6A9ABAEB1B3B9B9BBC0C1C6C6CCCFCFD3D4D9D9D9DC
+DFE1E1E6E6E7E7E7ECECECECECEEF1F1EEEEEEEEEEEEEEEEEEECECECECE7E7E7E6E6E4E1E1E1DFDF
+DFDCD9D9D9D4D4D3D1CFCFCFCFCFCFCCCCCCC8C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A6A6A6A4A4
+9E9C9A949289847F746A5F55666C7C84878E94949A9A9C9EA4A4A6A6A6A9A9ABABAEAEAEAEAEAEAE
+A9A9A6A4A39C9A928E877F746A5C7F8187898F9294949A9A9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9E
+9E9C9C9C9A9694928F8C89857F7C74726A5F574F4F4F4F4F4F555C5F616A6C717474767C7C7F7F81
+84878787878789898989898989898989898989898989898989898989898987878585878787858585
+8587878787898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8F8F9292929292
+949496999A9A9C9C9C9C9E9E9EA3A4A3A3A1A19E9E9E9C9C9A9A9A9A999494949494949494949494
+9494949494949492928F8C8987817C7F7F8185878789898989898989898989898989898989898989
+8989898987878585858585858585858585878785858585858787898989898E8F9292929494999A9A
+9A9A9C9C9E9E9E9E9E9E9E9E9E9E9C9A9A99999494928E8987817479878F969E9EA3A4A6A6A6A4A4
+A49E9E9C9C9C9A999494949492929292929292929292929294949494929494949494949494949494
+949494949292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+8989898989898989898989898989898989878785858585858585858585858585858585858481817F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7B76767676767474747474747474
+72716C6C6C6CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949492929292929292929292928E8E8E8E8E8E8E8C898989898989878785817F76767C7F81
+8787898E8F92929494999A9C9C9E9EA3A4A6A6A9AEAEB1B6B9B9BEC1C1C6C8CCCFD1D3D4D9D9DCDC
+DFE1E1E6E6E7E7E7ECECECECECEEEEEEEEEEEEEEEEEEECECECECECECECE7E7E7E6E4E4E1E1E1DFDF
+DEDCD9D9D9D4D4D3D1CFCFCFCFCFCFCCCCCCC8C8C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A4A4
+9E9C9A96948E877F7B6E61595467747F87899294999A9C9EA3A4A4A6A6A9A9ABAEAEAEAEAEB1AEAE
+AEA9A6A6A49E9C94928985797266577F84878C929294999A9C9C9C9C9E9C9E9E9E9E9E9E9E9C9C9E
+9E9C9C9C9A999492928E8987817C76726C615C514F4F4F4F4F54575F61676A717476797C7C7F7F81
+85878787878989898989898989898989898989898989898989898989898987878787858585858787
+878585878789898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8F8F92929292
+949494999A9A9C9C9C9E9E9EA1A3A39E9E9E9E9E9E9C9C9C9A9A9999949494949494949494949494
+9494949494949492928E8987817C7C7F818587878989898989898989898787878789898989898989
+89898987878785858585858585858587878785858585878787898989898C8F9292929294949A9A9A
+9A9C9C9C9E9E9C9C9C9C9C9E9E9C9C9A99999494928F8989847C76818C929C9EA1A4A4A6A6A6A4A4
+A49E9E9C9C9C9A999494949492929292929292929292929292949492929494949494949494949494
+949494929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989
+8989898989898989898989898989898989878785858585858585858585858585858585858584817F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C79767676767674747474747474
+72726E6C6C6CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494929292929292929292928F8E8E8E8E8E8E8C898989898987878585847F7F767C7F7F84
+87898C8F9292949494999A9C9C9E9EA3A4A6A9ABAEB1B1B6B9BBBEC1C4C6C8CCCFD1D4D4D9D9DCDE
+DFE1E1E6E6E6E7E7ECECECECECEEEEEEEEEEECECECECECECECECECECECE7E7E6E6E4E4E1E1E1DFDF
+DCDCD9D9D9D4D4D3D1CFCFCFCFCFCFCFCCCCC8C8C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABA9A9A9A6A6A4A4
+A19E9C99949289847F746A5F575F6C7981878C9294999C9C9EA4A4A6A6A9A9ABAEAEAEAEB1B1B1AE
+AEABA9A6A4A19C9A948E897F746C5F4F7F85898F9294949A9A9C9C9C9C9E9E9E9E9E9E9E9C9C9C9C
+9E9E9C9C9A9A9494928F8987817F79746E665F55514F4F4F4F5155595F666A6C72767C7C7F7F7F81
+85878787898989898989898989898989898989898989898989898989898989878787878787878787
+8787878787878989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8F8F9292
+94949499999A9C9C9C9E9E9EA3A4A19E9E9E9E9E9E9C9C9A9A999694949494949494949494949494
+94949494949292928E8987817F7C7F84878787878989898989898787878787878787898989898989
+898989878785858585858585858587878787858585878787898989898C8E929292929494999A9A9A
+9A9C9C9E9E9C9C9C9C9C9C9C9C9C9A99949494928F8C89877F747C8792999E9EA3A4A6A6A6A4A4A4
+A49E9E9E9C9C9A999494949494929292929292929292929292949492929294949494949494949494
+94949292929292929292929292929292929292929292929292929292929292928E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989
+89898989898989898989898989898989898787878585858585858585858585858585858585848181
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C797676767674747474747474
+7472716C6C6CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949492929292929292929292928E8E8E8E8E8E8C89898989898987858585817F76767C7F8187
+89898E8F9292949494999A9C9C9E9EA4A6A6A9AEAEB1B3B7B9BBBEC1C6C6C8CCCFD1D4D9D9D9DCDF
+DFE1E1E4E6E6E7E7E9ECECECECEEEEECECECECECECECECECECECECECECE7E7E6E6E4E1E1E1DFDFDF
+DCDCD9D9D9D4D4D3D1CFCFCFCFCFCFCCCCCCC9C8C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABA9A9A9A6A6A4A4
+A39E9C9A94928C877F7C71665C5564727F84898E94969A9C9EA4A4A6A6A9A9ABAEAEAEAEB1B1B1B1
+AEAEA9A6A4A39E9C949289877C726A5C7C7F8789929494949A9C9C9C9C9C9E9E9E9E9E9E9C9C9C9C
+9C9E9C9C9A9A999492928C89847F7C74726A6159544F4F4F4F4F55575D616A6C7274797C7F7F8181
+85878789898989898989898989898989898989898989898989898989898989898987878787878787
+878787878787898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8F8F92
+9294949499999A9C9C9E9EA1A3A39E9E9E9E9E9E9C9C9C9A99949494949494949494949494949494
+949494949292928F8987847F7C818587878789898989898989878787878585878789898989898989
+8989878787878585858585858587878987858585878787878989898C8E8F929292929494999A9A9A
+9A9C9C9C9C9C9C9C9C9C9C9C9C9A9994949492928E89877F7474848E949C9E9EA4A4A6A6A6A4A4A4
+A4A19E9E9C9C9A9A9694949494929292929292929292929292929292929292949494929494949494
+94949292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989
+89898989898989898989898989898989898987878585858585858585858585858585858585858481
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7F7F7C7C7C7C7C7C7C7C797676767676747474747474
+747472716C6CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494949292929292929292928F8F8E8E8E8E8E8C89898989898987878585817F7C767C7F7F8487
+898C8F9292949494949A9A9C9C9EA1A4A6A9ABAEAEB1B3B9B9BBC0C1C6C6C9CCCFD3D4D9D9D9DCDF
+DFE1E1E4E6E6E7E7E9ECECECECECECECECECECECECECECECECECECECE9E7E7E6E6E4E1E1E1DFDFDF
+DCDCD9D9D9D4D4D3D1CFCFCFCFCFCFCCCCCCC8C8C6C6C6C6C4C1C1C1C1C1C1C1C0C0BBBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABA9A9A9A6A6A4A4
+A39E9C9A94949289847F746A6157516A747F87899294999C9C9EA4A6A6A9A9ABAEAEAEAEB1B1B1B1
+AEAEABA9A6A49E9C9A948F8981767164577F81898F929494949A9C9C9C9C9C9E9E9E9E9C9C9C9C9C
+9C9C9C9C9A9A999492928E89877F7C76726C665F57544F4F4F4F5455595F676A7274797C7F818181
+8787898989898989898989898989898989898989898989898989898C8C8989898989898989898989
+8989878787898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8F
+9292949494969A9A9C9C9E9EA4A19E9E9E9C9C9C9C9C9A9A99949494949494949494949494949494
+9494949292928F8C89847F7C7F878787898989898989898987878585858587878989898989898989
+8989878787878585858585858787898787858587878787898989898E8E929292929294949A9A9A9A
+9C9C9C9C9C9C9C9A9A9A9A9A9A9994949492928E8987817C767F8992999C9E9EA4A4A6A6A4A4A4A4
+A3A19E9E9C9C9A9A9994949494949292929292929292929292929292929292949492929294949494
+94929292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+89898989898989898989898989898989898987878585858585858585858585858585858585858584
+817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7976767676747474747474
+747472726E6CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949292929292929292928F8E8E8E8E8E8E8E89898989898989878585817F7F76767C7F818789
+898C8F9294949494999A9C9C9E9EA1A4A6A9ABAEAEB1B3B9B9BBC1C1C6C8CCCFCFD3D4D9D9D9DCDF
+DFE1E1E4E6E6E7E7E7ECECECECECECECECECECECECECECECECECECECE7E7E7E6E4E4E1E1E1DFDFDF
+DCD9D9D9D9D4D4D3D1CFCFCFCFCFCFCCCCCCC8C8C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABA9A9A9A9A6A6A6A4
+A39E9E9C9994928C877F7C71675D555F6C7981878992949A9C9EA4A6A6A6A9ABAEAEAEAEB1B1B1B1
+B1AEAEA9A6A4A39E9C949289877C746A5F4F7F878992929294999A9C9C9C9C9C9E9E9E9C9C9C9C9C
+9C9C9C9C9C9A999494928F8987817C76746C6A6159554F4F4F4F4F55575D616A6C74767C7F7F8184
+87878989898989898989898C8C8C898989898989898C8C8C8E8E8E8E8E8E8C898989898989898989
+8989898789898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E
+8F9294949494999A9A9C9C9E9E9E9E9C9C9C9C9C9C9C9A9994949494949494949494949494949494
+94949492928F8C89877F7C7F85878989898989898989898787878585858787878989898989898989
+89898987878585858585878787898787878787878989898989898E8E8F92929292949499999A9A9A
+9C9C9C9C9C9C9A9A9A9999999494949492928E8987847C7676858E949A9E9E9EA4A6A4A4A4A4A4A4
+A39E9E9E9C9C9A9A9994949494949492929292929292929292929292929292929492929294949494
+94929292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+89898989898989898989898989898989898987878585858585858585858585858585858585858584
+817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C79767676767474747474
+74747472716CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94929292929292929292928F8E8E8E8E8E8E8E8C898989898989878785817F7F74767C7F7F848789
+898E929294949494999A9C9C9E9EA3A4A6A9AEAEAEB1B6B9BBBEC1C1C6C8CCCFD1D3D4D9D9DCDCDF
+DFE1E1E4E6E6E7E7E7ECECECECECECECECECECECECECECECECECECECE7E7E6E6E4E4E1E1E1DFDFDE
+DCD9D9D9D9D4D4D3D1CFCFCFCFCFCFCCCCC9C8C6C6C6C6C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABA9A9A9A6A6A6A6A4
+A49E9E9C9A94929289847F746C61595461727C81878F94999C9CA1A6A6A6A9ABAEAEAEB1B1B1B1B1
+B1AEAEABA6A6A4A19C9A948F8981766C66577C81878C929292949A9A9C9C9C9C9E9E9C9C9C9C9C9C
+9C9C9C9C9C9A99949492928C87847F7B74726A665F57554F4F4F4F54555C5F666C72747C7F7F8184
+878787898989898989898C8E8E8E8E8C8C8C8C8E8E8E8E8F8F8F928F8F8E8E8E8C8989898C8C8E8C
+898989898989898989898989898989898E8C8989898C8E8C898989898989898E8E8E8E8E8E8E8E8E
+8E92929494949494999A9A9C9C9C9C9C9C9C9C9C9C9A9A9994949494949494949494949494949494
+949492928F8E89877F7C7F8487898989898989898989898787858585878787898989898989898989
+898989878785858585878789898987878787878989898989898E8E8E8F9292929294949699999A9A
+9C9C9C9C9A9A9A999996949494949292928E8987857F74747F878F949C9E9E9EA4A4A4A4A4A4A4A3
+A19E9E9E9C9C9C9A9994949494949492929292929292929292929292929292929292929292949494
+92929292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+89898989898989898989898989898989898987878585858585858585858585858585858585858584
+817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C79767676767674747474
+747474747271FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+929292929292929292928F8E8E8E8E8E8E8E8E898989898989878784817F7F7F76767C7F81878989
+898E929294949494999A9C9C9E9EA3A6A6ABAEAEB1B1B6B9BBBEC1C4C6C8CCCFD1D3D4D9D9DCDEDF
+DFE1E1E4E6E6E7E7E7ECECECECECECECECECECECECECECECECECECECE7E7E6E6E4E4E1E1DFDFDFDC
+DCD9D9D9D9D4D4D3D1D1CFCFCFCFCFCCCCC9C8C6C6C6C6C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A9A6A6A6A6A4
+A4A19E9C9A9494928C877F7C72675F574F6A747F848992949A9C9EA4A6A6A9ABAEAEAEB1B1B1B1B1
+B1B1AEABA9A6A4A49E9C999289857C726A5F557F84898C929294949A9C9C9C9C9C9E9C9C9C9C9C9A
+9C9C9C9C9C9A99949494928E89877F7C76726C6A615C55514F4F4F5155575F616A6C74767C7F8181
+8487878989898989898C8E8E8E8E8E8E8E8F8F8F8F8F8F8F92929292928F8F8E8E8E8C898C8E8E8E
+8C8C89898989898989898989898989898C8E8C898C8E8E8E8C8989898989898C8E8E8E8E8E8E8E8E
+8E8F9292949494949494999A9A9A9A9A9A9C9C9A9A9A9A9694949494949494949494949494949494
+9492928F8E8987817C7F848789898989898989898989878785878787878789898989898989898989
+898987878785858787878989898987878787898989898989898E8E8E929292929294949499999A9A
+9A9C9C9A9A9A999994949494949292928F8987857F76767C8489929A9E9E9EA1A4A4A4A4A4A4A4A3
+9E9E9E9E9C9C9C9A9994949494949494929292929292929292929292929292929292929292949492
+92929292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989
+89898989898989898989898989898989898987878785858585858585858585858585858585858584
+817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C797676767674747474
+747474747272FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949492
+929292929292929292928E8E8E8E8E8E8E8E8C8989898989878785817F7F7F71767C7F7F84878989
+8C8F9292949494949A9A9C9E9E9EA4A6A9ABAEAEB1B3B7B9BBC0C1C6C6C9CCCFD1D3D4D9D9DCDFDF
+DFE1E1E4E4E6E6E7E7ECECECECECECECECECECECECECECECECECECE9E7E7E6E6E4E1E1E1DFDFDFDC
+DCD9D9D9D9D4D4D3D3D1CFCFCFCFCCCCCCC8C8C6C6C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBBBB
+BBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A9A6A6A6A6A4
+A4A19E9E9C9994929289847F746C615D555F6C767F878E94999A9EA3A6A6A9A9ABAEAEB1B1B1B1B1
+B1B1AEAEA9A6A6A4A19C9A948E877F746C6659547F85898E8F9294969A9C9C9C9C9C9C9C9C9C9C9A
+9C9C9C9C9C9A9A969494928F8987817F7974716A665F57554F4F4F4F55575C5F666A7274797F7F7F
+8184878789898989898C8E8E8E8E8E8E8F8F929292929292929292929292928F8E8E8E8C8E8E8E8E
+8E8E8C898989898989898989898989898C8E8E8E8E8E8E8E8E8C8C898989898C8E8E8E8E8E8E8E8E
+8E8E8F929292929294949494949994999A9A9A9A9A99999494949494949494949494949494949494
+94928F8E8987847C7F818789898C8C89898989898987878787878787898989898989898989898989
+8987878787878787878989898989898987898989898989898C8E8E8F92929292949494949499999A
+9A9A9A9A999994949494949292928F8E8989877F7976747F8589929A9C9E9EA3A4A4A3A3A3A3A3A1
+9E9E9E9E9E9C9C9A9994949494949494949292929292929292929292929292929292929292929492
+92929292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989
+89898989898989898989898989898989898989878785858585858585858585858585858585858585
+817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7976767676747474
+747474747472FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949492
+9292929292929292928F8E8E8E8E8E8E8E89898989898987878584817F7F7C76767C7F8187898989
+8E8F9294949494999A9C9C9E9EA1A4A6A9ABAEAEB1B3B9B9BBC0C1C6C6CCCFCFD3D4D4D9D9DCDFDF
+E1E1E1E4E4E6E6E7E7E9ECECECECECECECECECECECECECECECECECE7E7E7E6E6E4E1E1E1DFDFDFDC
+D9D9D9D9D9D4D4D3D3D1CFCFCFCFCCCCCCC8C8C6C6C6C6C6C4C1C1C1C1C1C1C1C0BBBBBBBBBBBBBB
+BBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A4
+A4A19E9E9C9A9494928C877F7C72675F575161717C818992949A9C9EA4A6A9A9ABAEAEB1B1B1B1B1
+B1B1AEAEABA9A6A6A49E9C949289817C726A5F577B7F87898E8F9294999A9C9C9C9C9C9C9C9C9A9A
+9A9C9C9C9C9A9A99949492928987847F7C76726C6A615D57514F4F4F5455595F61676C72767C7F7F
+7F8184878789898989898E8E8E8E8E8F8F92929292929292929292929292928F8E8E8E8E8E8E8E8E
+8E8C8989898989898989898989898989898E8E8C8C8E8E8E8E8E8E8C89898C8C8E8E8E8E8E8E8E8E
+8E8E8F92929292929292949494949494999A9A999996949494949494949494949494949494949494
+928F8C8989857F7F818789898C8E8C8C898989898987878787898989898989898989898989898989
+8989878787878789898989898989898989898989898989898E8E8F9292929292949494949496999A
+9A9A9A999694949494949292928F8C898787817C79767C7F878C929A9C9C9E9EA3A1A19E9E9E9E9E
+9E9E9E9E9C9C9C9A9A94949494949494949292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292928E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989
+89898989898989898989898989898989898989878785858585858585858585858585858585858585
+84817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7976767676767474
+747474747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949292
+9292929292929292928E8E8E8E8E8E8C89898989898987878585817F7F7C74767C7F7F8587898989
+8E929294949494999A9C9C9EA1A3A4A6A9AEAEAEB1B6B9B9BEC1C1C6C8CCCFCFD3D4D4D9D9DCDFDF
+E1E1E1E4E4E6E6E7E7E7ECECECECECECECECECECECECECECECECECE7E7E6E6E4E4E1E1E1DFDFDEDC
+D9D9D9D9D7D4D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A4
+A4A39E9E9C9A9694929289847C746C665F574F67747F878C94999C9EA3A6A9A9ABAEAEB1B1B1B1B1
+B1B1B1AEAEABA9A6A4A19C9A9289877F746C665C547C8187898E929294999A9C9C9C9C9C9C9A9A9A
+9A9A9C9C9A9A9A99949492928E8985817C76746E6A665F59554F4F4F4F55575F61676A7274767C7F
+7F7F81858787878989898C8E8E8E8E8F9292929292929292929292929292928F8E8E8E8E8E8E8E8E
+8C898989898989898989898989898989898C8C8C898C8E8E8E8E8E8E8C898C8E8E8E8E8E8E8E8E8E
+8E8E8F9292928F8F8F92929494949494999999969494949494949494949494949494949494949492
+8F8C8989877F7F818587898E8E8E8E8C8989898989898989898989898C8C8E8E8C89898989898989
+89898987878789898989898989898989898989898989898C8E8F9292929292949494949494949999
+9A99999494949494929292928E89898787817C7976767C7F878C94949A9C9C9E9E9E9E9E9E9E9E9E
+9E9E9E9C9C9C9C9A9A99949494949494949492929294929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989
+89898989898989898989898989898989898989878785858585858585858585858585858585858585
+84817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C79767676767674
+747474747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949292
+92929292929292928F8E8E8E8E8E8C89898989898987878585847F7F7C7C76797C7F81878989898C
+8F9292949494999A9A9C9E9EA3A4A4A6ABAEAEB1B1B6B9BBBEC1C4C6C8CCCFD1D3D4D4D9D9DCDFDF
+E1E1E1E1E4E6E6E7E7E7ECECECECECECECECECECECECECECECECE9E7E7E6E4E4E1E1E1DFDFDFDCDC
+D9D9D9D9D4D4D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B9B9B9B9B7B6B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A4
+A4A39E9E9C9C999494928C877F79726A615C545F6A7C81898F949A9C9EA4A6A9ABAEAEAEB1B1B3B1
+B1B1B1AEAEABA9A9A6A49E9A948F877F79726A6157747F8187898E929294999A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A99949492928F8987817F7C74726C6A615F57544F4F4F54575F61666A6C7474797C
+7F7F7F818587878789898C8E8E8E8E8F92929292929292929292929292928F8F8E8E8E8E8E8E8E8C
+89898989898989898989898989898989898C8C898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E
+8E8E8E8F92928F8E8E8F929292949494949494949494999494949494949494949494949494949292
+8E898987817F818487898E8E8E8E89898989898989898989898C8C8E8E8E8E8E8C8C898989898989
+89898989898989898989898989898989898989898989898E8F929292929292949494949494949499
+99969494949492929292928E89878787817C7C7674797C81878E9294999C9C9C9E9E9E9E9E9E9E9E
+9E9E9E9C9C9C9C9A9A99949494949494949492929494949292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292928F8E8E8F8F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989
+89898989898989898989898989898989898989878785858585858585858585858585858585858585
+84817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C797676767674
+747474747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494929292
+9292929292928F8E8E8E8E8E8E8E8989898989898987858585817F7C7C74767C7F7F85878989898E
+8F9294949496999A9C9C9EA3A4A4A6A9ABAEAEB1B3B7B9BBBEC1C6C6C8CCCFD1D3D4D4D9D9DCDFDF
+DFE1E1E1E4E6E6E7E7E7ECECECECECECECECECECECECE9E9E9E7E7E7E6E6E4E1E1E1E1DFDFDFDCDC
+D9D9D9D9D4D4D4D3D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B7B9B9B7B6B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A4
+A4A39E9E9C9C9A9494928F89817C746C675F575461727F878992999C9EA3A6A9ABAEAEAEB1B1B3B3
+B1B1B1AEAEAEABA9A6A49E9C949289847C746C675D54767F8187898E9292949A9A9A9A9A9A9A9A99
+999A9A9A9A9A9999949494928F8987847F7C76726E6A67615D57544F4F51555C61666A6C7274767C
+7C7F7F81848587878989898C8E8E8E8E8F929292929292928F929292928F8F8E8E8E8E8E8E8E8C89
+8989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F
+8F8E8E8F9292928F8F9292929292949494949494999999999494949494949494949494949492928F
+8E8987847F818487898E8E8E8C898989898989898989898C8E8E8E8E8E8E8E8E8E8C898989898989
+898989898989898989898989898989898989898989898C8E8F929292929292949494949494949499
+9494949494929292928F8F89898787817C7C7C7476767C81878C9292949A9C9C9C9E9C9C9C9C9C9C
+9E9E9C9C9C9C9C9C9A99949494949494949494929494949292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292928F8E8F8F8F8F8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989
+89898989898989898989898989898989898989878787858585858585858585858585858585858585
+8481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C797676767676
+747474747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494929292
+92929292928F8E8E8E8E8E8E8E8C89898989898987878585847F7C7C7C76797C7F81878789898C8F
+9292949494999A9A9C9EA1A4A4A4A6A9ABAEAEB1B3B9B9BBC0C1C6C6C9CCCFD1D3D4D4D9D9DCDFDF
+DFE1E1E1E4E4E6E6E7E7ECECECECECECECECE9E9E7E7E7E7E7E7E7E7E6E4E4E1E1E1E1DFDFDFDCD9
+D9D9D9D9D4D4D4D3D1D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B7B7B7B6B6B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A6
+A4A39E9E9C9C9A9994949289857F79726A615F5751677981878F949A9C9EA4A6ABAEAEAEB1B1B1B3
+B3B1B1B1AEAEAEABA9A6A49E9A928C877F76726A61576C767F8187898F929496999999999A9A9A99
+99999A9A9A9A999994949492928C8787817F7974726C6A665F5755544F4F55575F616A6C7174767C
+7C7F7F7F818487878789898C8E8E8E8E8F8F8F929292928F8F8F8F928F8F8E8E8E8E8E8E8E8C8C89
+898989898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E8E8E8F8F9292
+8F8F8F8F929292929292929292949494969999999A9A9A999494949494949494949494949292928E
+8C89857F7F8587898C8E8E8C89898989898989898989898E8E8E8E8E8E8C8C898989898989898989
+898989898C8E8C8C898989898989898989898989898C8E8F92929292929294949494949494949494
+94949492929292928F8E89898785857F7C7C767474797F8187898E9294969A9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9A99949494949494949494949494949492929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292929292928F8F8F928F8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989
+89898989898989898989898989898989898989898787858585858585858585858585858585858585
+8584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7976767676
+767474747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9492929292
+929292928F8E8E8E8E8E8E8E8E8989898989898987858584817F7C7C74767C7F7F85878989898E92
+92929494999A9A9C9C9EA3A4A4A6A6A9ABAEB1B1B3B9B9BBC1C1C6C6CCCFCFD3D3D4D4D9D9DCDFDF
+DFE1E1E1E4E4E6E6E7E7E9ECECECE9E9E7E7E7E7E7E7E7E7E7E7E7E6E6E4E1E1E1DFDFDFDFDEDCD9
+D9D9D9D7D4D4D4D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C0C0BBBBBBBBBBBB
+BBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B7B7B6B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A6
+A4A49E9E9E9C9C9A9494928E87817C746C67615C555F717F858992969A9CA3A6ABAEAEAEB1B1B1B1
+B3B1B1B1AEAEAEAEABA6A49E9C948F87817C746C665D5571797F8187898F929494949696999A9999
+9699999A9A99999494949492928E8987847F7C76726C6A67615F5755544F51555961676A6C727476
+7C7C7F7F81848787878989898E8E8E8E8E8E8F8F8F928F8F8E8E8E8F8F8E8E8E8E8E8E8E8C8C8989
+8989898989898989898787898989898787898989898989898989898C8E8E8E8E8E8E8E8E8F8F9292
+92928F92929292929494949494949494999A9A9A9A9A999494949494949494949494949292928F8E
+89877F7F858789898E8E8C89898989898989898989898C8E8E8E8E8E8E8989898989898989898989
+8989898C8E8E8E8C8C89898989898989898989898C8E8F9292929292929294949494949494949494
+9494929292928F8E8E8989878585817F7C797472747C7F818787898F9294999A9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9A9A99949494949494949494949494949492929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292929292928F8F8F928F8F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+89898989898989898989898989898989898989898787858585858585858585858585858585858585
+858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C79767676
+767474747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9492929292
+929292928E8E8E8E8E8E8E8E8C89898989898787858585817F7C7C7676797C7F81858789898C8F92
+92929496999A9C9C9E9EA4A4A4A6A6A9AEAEB1B3B6B9BBBEC1C1C6C8CCCFD1D3D4D4D4D9D9DCDFDF
+DFE1E1E1E4E4E6E6E7E7E7ECE9E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E4E4E1E1DFDFDFDFDFDCDCD9
+D9D9D9D4D4D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0BBBBBBBBBBBB
+BBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B6B6B6B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B3B3
+B3B3B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABA9A6A6A6A6A6A6
+A4A4A19E9E9C9C9A9994949289847F76726A6661595566767F878C949A9C9EA4A9AEAEAEB1B1B1B1
+B1B3B1B1B1AEAEAEABA9A6A39C969289857F76716A5F5766727B7F84878C92949494949496999999
+9494999A9999969494949492928E8987847F7C7674716C6A665F595755514F55575F646A6C727476
+7C7C7F7F81818587878989898C8E8E8E8E8E8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989
+898989898989898987878787878987878787898989898989898989898C8E8E8E8E8E8E8F8F929292
+929292929292929494949494949494999A9A9A9A9A9A9994949494949494949494929292928F8E89
+87817C848787898C8E8989898989898989898989898C8E8E8E8E8E8E8C8989898989898989898989
+898C8E8E8E8E8E8E8C8C8989898989898989898C8E8F929292929292929294949494949294949494
+929292928F8F8E8C8989878585847F7F7C767274767C7F818787898C929294999A9A9C9C9C9C9C9C
+9C9C9C9C9C9C9C9A9A99949494949494949494949494949492929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292928F9292928F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+89898989898989898989898989898989898989898787858585858585858585858585858585858585
+85858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C767676
+767674747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+9292928F8E8E8E8E8E8E8E8E89898989898787858585817F7F7C7676767C7F7F858787898C8E9292
+929494999A9A9C9C9EA3A4A4A6A6A9ABAEB1B1B3B7B9BBBEC1C4C6C8CCCFD1D3D4D4D4D9D9DCDFDF
+DFE1E1E1E1E4E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E4E1E1E1DFDFDFDFDFDCDCD9
+D9D9D9D4D4D4D3D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B6B6B6B6B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B3
+B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABA9A6A6A6A6A6A6
+A4A4A19E9E9C9C9A9A9494928C87817C746E6A645F57546C7C81878F949A9CA4A6ABAEAEB1B1B1B1
+B1B1B3B1B1B1AEAEAEA9A6A49E9A948E877F79726C665D5567727C7F87898E929494949494969994
+949496999999949494949492928F898787817F7C74726C6A67615F5755554F4F555961676A6E7274
+797C7F7F81818487878789898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+89898989898989878787878787878787878787878989898989898989898C8C8E8E8E8E8F92929292
+929292929292949494949494949496999A9A9A9A9A9A96949494949494949494949292928F8E8987
+847C81878789898E898989898989878989898989898C8E8E8E8E8E8C89898989898989898989898C
+8E8E8E8E8E8E8E8E8E8C8C898989898989898C8E8F92929292929292929292949494929292949492
+9292928F8E8E89898987858585817F7C74747476797C7F818787898C8E929494999A9A9C9C9C9C9A
+9C9C9C9C9C9C9A9A9A99969494949494949494949494949492929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292929292929292928F
+8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+89898989898989898989898989898989898989898787858585858585858585858585858585858585
+85858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C797676
+767676747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+9292928E8E8E8E8E8E8E8E8C898989898787858585817F7F7C767676797C7F84858789898E8F9292
+929494999A9C9C9C9EA4A4A4A6A6A9AEAEB1B1B6B9B9BBC0C1C6C6C9CCCFD1D3D4D4D7D9D9DCDEDF
+DFDFE1E1E1E4E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E4E1E1E1DFDFDFDFDFDFDCDCD9
+D9D9D9D4D4D4D3D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B6B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1
+B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABA9A6A6A6A6A6A6
+A4A4A19E9E9C9C9C9A9994928F89847F79726C67615F574F747F848992999C9EA6A9AEAEB1B1B1B1
+B1B1B3B1B1B1B1AEAEA9A9A49E9C949289847C746E6A5F57516A727C8187898F9292949494949694
+949494999996949494949494928F898987847F7C76746C6C6A665F5C5755554F51575F616A6C7274
+767C7F7F8484858787878989898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8C8E8E8E8C8989898989
+898989898989878787878787878787878787878787898989898789898989898C8E8E8E8F92929292
+9292929292929494949499999999999A9A9A9A9A9A999494949494949494949492928F8F8E898985
+7F7F878789898E89898989898787878787898989898C8C8E8E8C8C898989898989898989898C8E8E
+8E8E8E8E8E8E8E8E8E8E8E8989898989898C8E8F9292929292929292929292929492929292929292
+928F8F8E8C89898987878585847F7F767C7F7F7C7C7C7F81878989898E8F929494999A9A9C9C9C9A
+9A9C9C9C9C9A9A9A9A99999494949494949494949494949492929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989
+89898989898989898989898989898989898989898787878585858585858585858585858585858585
+8585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7976
+767676747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92928F8E8E8E8E8E8E8E8E898989898787858585817F7F7C797676767C7F7F858587898C8F929292
+9294949A9A9C9C9EA1A4A4A6A6A9A9AEB1B1B3B6B9B9BBC0C1C6C6CCCFCFD1D3D4D4D9D9D9DCDCDF
+DFDFE1E1E1E4E4E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6E4E4E1E1DFDFDFDFDFDFDFDCD9D9
+D9D9D9D4D4D4D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6
+A4A4A39E9E9C9C9C9A9A9494928987817C74716A66615C556A797F878E949A9EA4A6ABAEB1B1B1B1
+B1B1B1B3B1B1B1AEAEABA9A6A39C96928C877F76726C645F555F6A747F84878C9292929494949494
+949494949994949494949494928F8C898785817F7C74726C6A67615F5C5755544F55595F676C7274
+767C7C7F8485878787878789898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898C8C898989898987
+89898989878787878787858585878787858587878787898987878787898989898C8E8E8E8F929292
+929292929294949494999A9A9A9A999A9A9A9A9A9A969494949494949494949492928F8E8989877F
+7F848789898E8E8989898987878787878789898989898C8C898989898989898989898989898E8E8E
+8E8E8E8E8E8E8E8E8E8E8989898989898C8E8E8F9292929292929292929292929292929292929292
+8F8E8E898989898787858584817F727F8487817F7F7F7F84878989898E8F929294949A9A9C9C9A9A
+9A9A9C9C9C9A9A9A9999969494949494949494949494949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989
+89898989898989898989898989898989898989898987878585858585858585858585858585858585
+8585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C79
+767676767474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92928E8E8E8E8E8E8E8E8C8989898987878585817F7F7F7C766C767C7C7F84858789898C8F929292
+9494999A9C9C9C9EA1A4A4A6A6A9A9AEB1B1B6B7B9B9BEC1C1C6C8CCCFCFD1D3D4D4D9D9D9DCDCDF
+DFDFE1E1E1E4E4E6E6E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E4E1E1E1DFDFDFDFDFDFDCDCD9D9
+D9D9D7D4D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6
+A4A4A39E9E9C9C9C9C9A9994928E89857F79746C6A645F59546C7C818992999CA3A6A9AEAEB1B1B1
+B1B1B1B1B3B1B1B1AEABA9A6A49E9A948F89817C746C6A615954616C767F87898E92929294949494
+94929494949494949494949492928E898787817F7C76726C6C6A665F5D5957554F4F575D616A7274
+76797C7F8187878787878989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898787
+8787898787878787878585858585858584848485878787878787878787898989898C8C8E8F929292
+929292929494949499999A9A9A9A9A9A9A9A9A9A99949494949494949494949492928E8C8987817F
+818789898E8E8C89898987878587878787898989898989898989898989898989898989898C8E8E8E
+8E8E8E8E8E8E8E8E8E8E8989898989898E8E8E929292929292929292929292929292929292928F8F
+8E8C898989878787858585817F7F7F878C87878481818185878989898C8E92929494999A9A9C9A9A
+9A9A9C9C9A9A9A9A9999949494949494949494949494949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989
+89898989898989898989898989898989898989898987878585858585858585858585858585858585
+8585858585817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C79
+767676767674FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+928F8E8E8E8E8E8E8E8C8989898987878585847F7F7F7C767676767C7C7F85858789898E92929292
+9494999A9C9C9E9EA3A4A4A6A6A9ABAEB1B3B6B7B9BBBEC1C4C6C8CCCFCFD3D4D4D4D9D9D9DCDCDF
+DFDFE1E1E1E4E4E6E6E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E4E4E1E1E1DFDFDFDFDFDFDCD9D9D9
+D9D9D4D4D4D3D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BEBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6
+A4A4A39E9E9C9C9C9C9A9A94928F8987817C76726C67615F574F747C878E949C9EA6A6ABAEB1B1B1
+B1B1B1B1B1B3B1B1AEAEA9A6A69E9C949289857C74726C665F575166727C8187898F929292949494
+94929294949494949494949492928F898987847F7C7974716C6A67615F5D5757554F51575F676C74
+76797C7F818787878789898989898C8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989878787
+87878787878787858484858585858584848181848587878787878787878789898989898C8F929292
+92929294949494999A9A9A9C9C9C9C9A9A9A9A9A999494949494949494949492928F8E8989847F7F
+8789898C8E8E8989898787858585878789898989898989898989898989898989898989898E8E8E8E
+8E8E8E8E8E8E8E8E8E8989898989898E8E8E8F92929292929292929292929292928F8F92928F8E8E
+89898989878785858585847F7F818E94928C898787878787878989898C8E8F92929499999A9A9A9A
+999A9A9C9A9A9A999996949494949494949494949494949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989
+89898989898989898989898989898989898989898987878585858585858585858585858585858585
+858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C
+797676767676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+928E8E8E8E8E8E8E89898989898987878585817F7F7C7B7674767C7C7F8185878989898F92929292
+9494999A9C9C9E9EA4A4A6A6A6A9ABAEB1B3B6B9B9BBBEC1C6C6C8CCCFCFD3D4D4D4D9D9D9D9DCDF
+DFDFE1E1E1E1E4E6E6E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E6E4E4E1E1DFDFDFDCDCDCDCDCD9D9D9
+D9D4D4D4D4D3D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABA9A9A6A6A6A6A6
+A6A4A39E9E9E9C9C9C9C9A9492928F89877F79746E6A67615D556A797F878F9A9EA4A6A9AEAEB1B1
+B1B1B1B1B1B3B1B1AEAEABA9A6A39C99928E877F76746C6A615C55596A747F84878C8F9292949494
+92929292949494949494949492928F8C898785817F7C76726C6C6A66615F5C5757544F555D616A72
+76797C7F8187878789898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898787
+85878787878785848481848485858484818181818484858787878787878787878989898C8E8F9292
+929292949494969A9C9C9C9C9C9C9C9A9A9A9A99949494949494949494949292928E8C89877F7F84
+8789898E8E8C89898787858585858787898989898989898989898989898989898989898C8E8E8E8E
+8E8E8E8E8E8E8E8E8E89898989898C8E8E8E929292929292929292928F9292928F8E8F8F8F8E8C89
+89898787878585858585817F7F89999A94928C8989878787878989898C8E8F92929494999A9A9A9A
+999A9A9A9A9A9A999994949494949494949494949494949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989
+89898989898989898989898989898989898989898987878785858585858585858585858585858585
+858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C
+7C7976767676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+8F8E8E8E8E8E8C89898989898987878585847F7F7C7C767476767C7C7F84878789898C8F92929294
+94949A9A9C9C9EA1A4A4A6A6A9A9AEB1B1B3B6B9B9BBC0C1C6C6C8CCCFCFD3D4D4D7D9D9D9D9DCDE
+DFDFDFE1E1E1E4E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E1E1E1DFDFDFDCDCDCDCD9D9D9D9
+D7D4D4D4D4D3D1CFCFCFCFCCCCC9C8C8C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABA9A9A6A6A6A6A6
+A6A4A49E9E9E9C9C9C9C9A9994928F8E89847C76726C6A665F5955717C8189949CA3A6A9ABAEAEB1
+B1B1B1B1B1B1B1B1AEAEABA9A6A49E9A949289817C74726A645F57515F6C767F87898C8F92929292
+9292929294949494949494949292928E898987817F7C7674716C6A6A615F5F595757544F575F676C
+74797C7F81878789898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898787
+87858587878585848181818184848181817F7F7F8181848587858484858787878789898C8E8F9292
+929294949494999A9C9C9C9C9C9C9C9C9A9A9A999494949494949494949292928F8E8987817F8187
+89898C8E8E89898787858585858787898989898787878989898989898989898989898C8E8E8E8E8E
+8E8E8E8E8E8E8E8E8989898989898E8E8E8F9292929292929292928F8F8F8F8F8E8E8E8E8E898989
+898787858585858585847F7C89949C9A9A94928E8C8989878789898C8C8E8F9292949496999A9A99
+99999A9A9A9A99999694949494949494949494949494949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+89898989898989898989898989898989898989898989878787858585858585858585858585858585
+858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C
+7C7C79767676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292928F8F
+8E8E8E8E8E8E89898989898989878585847F7F7C7C767676767C7C7F8185878989898E9292929294
+94999A9C9C9E9EA1A4A4A6A6A9A9AEB1B3B6B7B9B9BEC1C1C6C6C9CCCFCFD3D4D4D9D9D9D9D9DCDC
+DFDFDFE1E1E1E4E4E6E6E6E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E1E1E1DFDFDFDCDCDCD9D9D9D9D9
+D4D4D4D4D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1
+B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A9A6A6A6A6A6
+A6A4A4A19E9E9E9C9C9C9C9A9492928F89877F7C74726C67615F5754747F87929C9EA4A6A9AEAEAE
+B1B1B1B1B1B1B1B1B1AEABA9A6A49E9C94928C877F76746C67615C554F616C798187898E92929292
+928F8F9292949494949494949492928F8C8987847F7F7C74726C6C6A67615F5D575755544F57616A
+72767C7F81878989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C898989898989898787
+878787858585858581817F81848481817F7F7F7F7F8181848484848184858787878789898E8F9292
+9294949494949A9C9C9C9C9C9C9C9C9C9A9A999494949494949494949292928F8E8987847F818787
+89898E8E8C89878785858585878789898987878787878989898989898989898989898E8E8E8E8E8E
+8E8E8E8E8E8E8E8E89898989898C8E8E8F9292929292928F92928F8E8E8F8E8E8E8E8E8C89898989
+8787858585858585848174878F9A9C9C9A9994928E8989898989898C8E8E8F929292949499999A99
+9999999A9A9A99999494949494949494949494949494949494929292929492929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+89898989898989898989898989898989898989898989878787858585858585858585858585858585
+858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C
+7C7C79767676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292928E8E
+8E8E8E8E8E8C898989898989878785847F7F7C7C7C767476767C7C7F8187878989898E9292929494
+94999A9C9C9E9EA3A4A4A6A6A9ABAEB1B3B6B7B9BBBEC1C1C6C8C9CCCFCFD3D4D4D9D9D9D9D9DCDC
+DFDFDFE1E1E1E4E4E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E1E1E1DFDFDCDCDCDCD9D9D9D9D4
+D4D4D3D3D3D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BEBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1
+B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABA9A9A9A6A6A6A6A6
+A6A4A4A19E9E9E9C9C9C9C9A969492928F89847C76746C6A67615D556A767F89949EA4A6A9ABAEAE
+B1B1B1B1B1B1B1B1B1AEAEA9A9A6A39C99928E877F7974726A615F57545767727C8487898E8F9292
+8F8F8E8F92929292929494949492928F8E898787817F7C7674716C6A6A615F5F5D57575554515964
+6C74797F7F85878789898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C898989898989
+878787878787858584818181818484817F7F7F7F7F7F7F818184818181848487878789898C8E8F92
+9294949494999A9C9C9C9C9E9E9C9C9C9A9A9994949494949494929292928F8E8C89858181858789
+898C8E8E89898785858585858787898987878787878787898989898989898989898C8E8E8E8E8E8E
+8E8E8E8E8E8E8E8989898989898E8E8F9292929292928F8F8F8F8E8E8E8E8E8E8E8E8C8989898987
+8785858585858585816E848C949E9E9C9A9A94948F89898989898C8E8E8E8E8F9292949494999999
+9494999A9A9999969494949494949494949494949494949494949292949492929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989
+89898989898989898989898989898989898989898989898787878585858585858585858585858585
+858585858585817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C
+7C7C7C797676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92928E8E8E
+8E8E8E8E8E898989898989898785847F7F7F7C7C767476767C7C7F7F84878989898C8F9292949494
+999A9A9C9C9E9EA4A4A6A6A6A9ABAEB1B3B6B9B9BBBEC1C4C6C8CCCCCFCFD3D4D4D7D9D9D9D9DCDC
+DFDFDFE1E1E1E4E4E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E1E1DFDFDFDCDCD9D9D9D9D9D7D4
+D4D4D3D3D3D3D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAE
+B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABA9A9A9A6A6A6A6A6
+A6A4A4A39E9E9E9E9C9C9C9A99949292928C877F7C74726C6A665F5955717C84929C9EA4A6A9ABAE
+AEB1B1B1B1B1B1B1B1AEAEABA9A6A49E9A948F89817C76726C67615C554F596A747C8787898C8F8F
+8F8E8C8E8F929292929294949492928F8E898987847F7C7974726C6C6A67615F5F5C59575554555D
+6A72767C7F818487878989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8C8C89898989
+89898787878787878484848484848481817F7F7F7F7F7F7F818181817F81818485878789898E8E8F
+9292949494999A9C9C9C9C9C9C9C9C9C9A9994949494949494929292928F8E8C8987848184878789
+898E8E8C898787858585858787898989878785858787878789898989898C8C8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E89898989898C8E8F9292929292928F8E8F8F8E8E8E8E8E8E8E8C89898989898987
+85858585858585847F7F89949C9E9E9C9C9A9994928E8C8989898E8E8E8E8E8F9292949494949996
+949496999A9999949494949494949494949494949494949494949492949494929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989
+89898989898989898989898989898989898989898989898987878785858585858585858585858585
+85858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C
+7C7C7C7C7976FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF928E8E8E8E
+8E8E8E8E8C8989898989898787847F7F7F7C7C76767476767C7C7F8185878989898E8F9292949496
+999A9C9C9C9EA1A4A4A6A6A9A9AEAEB1B3B6B9B9BBC0C1C6C6C8CCCCCFCFD3D4D4D4D9D9D9D9D9DC
+DFDFDFE1E1E1E1E4E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E1E1E1DFDFDFDCDCD9D9D9D9D9D4D4
+D4D3D3D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAE
+AEB1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A9A6A6A6A6A6A6
+A6A4A4A3A19E9E9E9C9C9C9A9A949292928F89817C76746C6A67615F5751747F89949EA4A6A9A9AE
+AEAEB1B1B1B1B1B1B1B1AEABA9A6A49E9C949289877F7974716A615F57554F5F6A747F878789898E
+8E8C8C8C8E92929292929294949292928E8C8987847F7F7C7674716C6A6A645F5F5F5C5957555557
+5F6C74767C7F818485878789898989898C8E8E8E8E8E8F8F8F8E8E8F8F92928F8F8F8E8E8E8E8E8E
+8C8989898989898787878787878785848481817F7F7F7F7F7F7F7F7F7F7F81818485878789898E8E
+8F92929496999A9C9C9C9C9C9C9C9C9A9A99949494949492929292928F8E89898785818487878989
+8E8E8E89898785858585858789898987878585858587878989898989898E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E89898989898C8E8F9292929292928F8E8E8E8E8E8E8E8C8C8E8C8989898989898787
+85858585858584817C89929AA1A39E9E9C9A9994928F8E8C8C8C8E8E8E8E8E8F9292929494949694
+94949499999994949494949494949494949494949494949494949494949494929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989
+89898989898989898989898989898989898989898989898987878785858585858585858585858585
+8585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C
+7C7C7C7C7C79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8E8E8E8E
+8E8E8E8E898989898987878584817F7F7F7C76767476767C7C7F7F85878989898E8F929294949499
+9A9A9C9C9E9EA1A4A4A6A6A9ABAEB1B1B3B7B9B9BBC0C1C6C6C8CCCCCFCFD3D4D4D4D9D9D9D9D9DC
+DEDFDFDFE1E1E1E4E4E4E4E4E4E4E4E4E4E4E4E1E1E1E1E1E1E1E1E1DFDFDFDCD9D9D9D9D9D4D4D4
+D3D3D3D3D3D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C0C0C0C0C1C0BEBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAE
+AEAEB1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABA9A9A9A6A6A6A6A6A6
+A6A4A4A4A39E9E9E9E9C9C9C9A999492929289877F7C74726C6A67615D556A7685929CA1A4A6A9AB
+ABAEAEB1B1B1B1B1B1B1AEAEA9A6A49E9C99928E877F7C76726C67615D575155616C767F87878989
+8C8C89898C8E8F9292929294929292928F8C898787817F7C7974726C6C6A6761615F5F5C5C575555
+57616C72767C7F7F81858787878989898C8E8E8E8E8F8F92928F8F8F92929292928F8F8F8E8F8F8F
+8F8E8C898C8C8989878787878787878785848181817F8181817F7F7F7F7F7F81818485878789898C
+8E92929294999A9C9C9C9C9C9C9C9C9A9994949494949292929292928E8C8987878484878789898E
+8E8E8C898787858585858787898987878785858587878989898989898C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8C898989898C8E8F9292929292928F8E8E8E8E8E8E8E8C89898C898989898989878785
+8585858585858176878E949C9E9E9E9E9C9C999494928F8E8E8E8E8E8E8E8E8F9292929494949494
+94949494999994949494949494949494949494949494949494949494949494949292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989
+89898989898989898989898989898989898989898989898989878785858585858585858585858585
+8585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C
+7C7C7C7C7C7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8C8989898987878585817F7F7F7C7676747476767C7F7F81858789898C8E9292929494999A
+9A9C9C9C9E9EA3A4A4A6A6A9AEAEB1B3B6B9B9BBBEC1C1C6C8C9CCCCCFCFD3D4D4D4D9D9D9D9D9DC
+DCDFDFDFE1E1E1E4E4E4E4E4E4E4E4E1E1E1E1E1E1E1E1E1E1E1E1E1DFDFDEDCD9D9D9D9D7D4D4D3
+D3D1D1D1D1D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C0C0C0C0C0C0BEBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABA9A9A9A6A6A6A6A6A6
+A6A4A4A4A3A19E9E9E9C9C9C9A99949492928F87817C76746C6A6A645F5955747F89949EA4A6A6A9
+A9AEAEAEB1B1B1B1B1AEAEAEABA6A4A19C9A948F89817C79746E6A665F595551576772797F878789
+89898989898C8F8F92929292929292928F8E898987847F7C7B7674726C6C6A6661615F5D5D595757
+575D666C7276797C7F81858787878789898C8E8E8E8E8F929292929292929292929292928F8F9292
+92928F8E8E8E8E8C8989898989878787878784848481818481817F7F7F7F7F7F7F81818487878989
+8C8E8F929294999A9A9A9C9C9C9A9A9A96949494929292929292928F8E8989878585878789898E8E
+8E8C898987848484848787898787878585858587878789898989898C8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E898989898C8E8F9292929292928F8E8E8E8E8E8E8E8989898989898989898787878585
+85858585858474848992949C9E9E9E9E9E9C9A9494928F8F8E8E8E8E8E8E8E8F9292929294949494
+94949494969494949494949494949494949494949494949494949494949494949492929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89
+89898989898989898989898989898989898989898989898989878787858585858585858585858585
+858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E898989898787858584817F7F7C7976747476767C7C7F7F85878789898E8F92929494999A9A
+9C9C9C9C9E9EA4A4A6A6A9ABAEB1B1B3B6B9B9BBBEC1C4C6C8C9CCCCCFCFD3D4D4D4D7D9D9D9D9DC
+DCDFDFDFE1E1E1E4E4E4E4E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDCDCD9D9D9D9D4D4D4D3
+D3D1D1D1D1D1CFCFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C0C0C0C0C0BEBBBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABA9A9A6A6A6A6A6A6A6
+A6A6A4A4A4A39E9E9E9C9C9C9A99949494929289857F7C74726C6A67615F575176818E9AA1A4A6A6
+A6A9AEAEB1B1B1B1B1AEAEAEABA9A6A39E9A949289877F7C76726C67615F5755545F6A747C7F8787
+89898989898C8E8E8F929292929292928F8E89898785817F7C7674726E6C6A676161615F5D5D5957
+57575F676C7274767C7F818587878787898C8E8E8E8E8F9292929292929292929292929292929292
+9292928F8F8F8E8E8E8989898989898787878787878585858484817F7F7F7F7F7F7F818184858787
+89898E8F9292949494999A9A9A9A999694949292929292929292928E8C89878785878789898E8E8E
+8C89898785818181848787878785858585858787878989898989898E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8C8989898E8E8F9292929292928F8E8E8E8E8E8E8E898989898989878787878785858585
+8585858585747F878C92999C9C9E9C9C9C9C9A94949292928F8E8E8E8E8E8E8E9292929292949494
+94949494949494949494949494949494949494949494949494949494949494949492929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C
+89898989898989898989898989898989898989898989898989898787858585858585858585858585
+85858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8C8989898987878585817F7F7F7C7674747676797C7F7F84858789898C8F9292929494999A9A
+9C9C9C9E9EA1A4A4A6A6A9AEAEB1B1B3B7B9BBBBC0C1C6C6C8CCCCCFCFCFD3D4D4D4D4D9D9D9D9DC
+DCDFDFDFE1E1E1E4E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFDFDCDCD9D9D9D9D9D4D4D4D3
+D1D1D1D1D1CFCFCFCFCCCCC9C8C6C6C6C6C6C6C6C6C6C1C1C1C1C0BEBEBEC0BEBBBBBBBBBBBBBBBB
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABA9A9A6A6A6A6A6A6A6
+A6A6A4A4A4A3A19E9E9E9C9C9A9994949492928E87817C76746C6C6A67615D576C7C87929CA4A6A6
+A6A6ABAEAEB1B1B1B1AEAEAEABA9A6A49E9C96928C87817C76746C6A66615C575457616C747C8187
+8789898989898C8E8F8F9292929292928F8E8C898787817F7C797674726C6C6A666161615F5F5D5C
+5C5D5D61676C7274767C7F818485878787898C8C8E8E8E8F8F929292929292929292929292929292
+92929292928F8E8E8E8E8C8989898989878787878787878787858481817F7F7F7F7F7F8181848587
+8789898C8E8F92929294949494949494929292929292929292928F8E89898785878789898C8E8E8C
+8989878581817F848787878785858585878787878989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8C89898E8E8F9292929292928F8E8E8E8E8E8E8E89898989898987878787878585858585
+85858585817C84898F949A9C9C9C9C9C9C9C9A94949292928F8F8E8E8E8E8E8E8F92929292949494
+94949494949494949494949494949494949494949494949494949494949494949494929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+89898989898989898989898989898989898989898989898989898787858585858585858585858585
+85858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8C8989898987878585847F7F7F7C7676747476767C7C7F8185858789898E929292929494999A9C
+9C9C9E9E9EA1A4A4A6A6ABAEAEB1B3B6B9B9BBBEC0C1C6C6C8CCCCCFCFCFD3D3D4D4D4D9D9D9D9D9
+DCDEDFDFE1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDCD9D9D9D9D9D9D4D4D4D3
+D1CFCFCFCFCFCFCFCCCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C0C0BBBEBEBEBEBBBBBBBBBBBBBBB9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1AEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABA9A6A6A6A6A6A6A6
+A6A6A4A4A4A4A39E9E9E9C9C9A9994949494928F89857F7C74726C6C6A665F5955747F89949EA4A4
+A6A6A9ABAEAEB1B1AEAEAEAEAEA9A6A49E9C9A948E87847F7B74726C6A615F575555576471767F84
+878789898989898C8E8F9292929292928F8E8C898987847F7C7C767472716C6A67666161615F5F5F
+5F5F5F5F666A6C7274767C7F8184848587898989898C8E8E8E8F8F92929292929292929292929292
+8F8F8F92928F8E8E8E8C8C8C8C89898989878787878787878787858481817F7F81817F7F7F818485
+85878789898C8E8F929292949494929292929292929292928F8F8E8C898787858789898C8E8E8E89
+898787817F7F818587878585858587878787898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8C8E8E8E9292929292928F8E8E8E8E8E8E8E8989898989878787878785858585858585
+85858481767F84898E94999A9A9C9C9C9C9C9A9994949292928F8E8E8E8E8E8E8F92929292929494
+94949494949494949494949494949494949494949494949494949494949494949494929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8C898989898989898989898989898989898989898989898989898787858585858585858585858585
+8585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8C898989898987858585817F7F7C7976747476767C7C7F7F84858789898E8F9292929294949A9C9C
+9C9E9E9E9EA3A4A4A6A9AEAEB1B1B3B7B9BBBBBEC1C1C6C6C8CCCCCFCFCFD3D3D4D4D4D9D9D9D9D9
+DCDCDFDFDFE1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDCDCD9D9D9D9D9D4D4D4D3D3
+D1CFCFCFCFCFCFCCCCCCCCC8C8C6C6C6C6C6C6C6C6C4C1C1C1C0BEBBBBBBBBBBBBBBBBBBBBBBBBB9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABA9A6A6A6A6A6A6A6
+A6A6A4A4A4A4A3A19E9E9C9C9A9A9694949492928C87817C76746C6C6A67615F575179858F9AA3A4
+A4A4A6A9AEAEAEB1AEAEAEAEAEABA6A49E9C9A948F89877F7C76746C6A67615D5755555F6A72797F
+85878787898989898E8E8F929292928F8F8E8C89898785817F7C797674726C6C6A6764616161615F
+5F5F5F6161676A6C7274767C7F8181848787898989898E8E8E8E8E8F8F929292929292929292928F
+8F8E8F8F928F8E8E8C8C89898C8C898989898787878987878787878584818181818181817F818485
+85858787878989898C8E8F9292929292929292929292928F8E8E8E898987858789898C8E8E8E8C89
+8787847F7F7F8485858585858787878989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F929292928F8F8E8E8E8E8E8E8C898989898987878585858585858585858585
+85817F747C7F85898E9294999A9A9C9C9C9A9A999494929292928F8E8E8E8E8E8F92929292929294
+94949494949494949494949494949494949494949494949494949494949494949494949292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8C8989898989898989898989898989898989898989898989898787858585858585858585858585
+8585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E89
+898989898987878585847F7F7C7C7674747676767C7C7F81858587898C8E929292929494999A9C9C
+9C9E9E9E9EA4A4A6A6A9AEAEB1B1B3B9B9BBBBC0C1C1C6C6C8CCCCCFCFD1D3D3D4D4D4D9D9D9D9D9
+DCDCDFDFDFE1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDCDCD9D9D9D9D9D9D4D4D4D3D3
+D1CFCFCFCFCFCCCCCCCCCCC8C8C6C6C6C6C4C4C4C6C1C1C1C1C0BEBBBBBBBBBBBBBBBBBBBBBBBBB9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B7B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B3B3B3B3B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABA9A9A6A6A6A6A6A6
+A6A6A4A4A4A4A4A19E9E9C9C9A9A9994949494928E89857F7C74726C6C6A66615D574F7C87929CA1
+A3A4A6A6ABAEAEB1AEAEAEAEABABA9A6A39E9A94928987817C7974726C6A665F5D575557616C747C
+7F878787878989898C8E8F8F9292928F8F8E8C89898787817F7C79767474716C6A6A676666616161
+6161616164676A6C7274767B7C7F81848587878989898C8E8E8E8E8E8E8F8F8F9292929292928F8F
+8E8E8E8E8F8F8E8C8C898989898C8C89898989898787878789878787858484818484848181818184
+858587858787878989898E8F8F928F8F9292929292928F8E8E8E8C8987878789898C8E8E8E8E8989
+87847F7F7F818585858585878787898989898989898989898E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8F929292928F8E8E8E8E8E8E8C89898989898787858585858585858585858585
+817F72747C7F84898E92929494999A9A9A9A9A999494929292928F8F8E8E8E8F8F92929292929294
+94949494949494949494949494949494949494949494949494949494949494949494949292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8989898989898989898989898989898989898989898989898787878585858585858585858585
+8585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8989
+8989898987878585847F7F7C7C7676747476767C7C7F7F85858789898E8E929292929494999A9C9C
+9E9E9E9EA1A4A4A6A6A9AEB1B1B1B6B9BBBBBEC0C1C1C6C6C8CCCFCFCFD1D3D3D4D4D4D7D9D9D9D9
+DCDCDFDFDFE1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDFDFDFDCD9D9D9D9D9D9D9D4D4D4D3D1
+D1CFCFCFCFCFCCCCCCCCC9C8C6C6C6C6C4C1C4C4C4C1C1C1C1C0BEBBBBBBBBBBBBBBBBBBBBBBBBB9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B7B7B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B3B3B1B1B1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABA9A9A6A6A6A6A6A6
+A6A6A4A4A4A4A4A39E9E9C9C9A9A9996949494928F8987817C76746C6C6A67645F5C55747F89949C
+9EA1A4A6A9AEAEAEAEAEAEAEABABA9A6A49E9C99928E89847F7C76726E6A67615F5C57555C667276
+7C81858787878989898C8E8F8F8F8F8F8F8E8E89898987847F7F7C797674726C6C6A6A6766666461
+6161616166676A6C727474767C7F7F818487878789898C8E8E8E8E8E8E8E8E8F8F8F9292928F8F8E
+8E8C8C8C8E8E8C8C8989898989898989898989878787878787898787858585848485858484818484
+85878787878585878789898C8E8F8E8F9292929292928E8E8E8E8989878787898C8E8E8E8E8E8989
+877F7C7F818485858585878789898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8F929292928F8E8E8E8E8E8E8C8989878789878785858585858585858585858584
+816A6E74797F8187898E92949494999A9A9A9994949492929292928F8E8E8F8F8F92929292929292
+94949494949494949494949494949494949494949494949494949494949494949494949492929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8C89898989898989898989898989898989898989898989898987878585858585858585858585
+8585858585858585858585817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8C8989
+89898787878585847F7F7C7C7C7674747676767C7C7F81858787898C8E8F9292929294949A9A9C9C
+9E9E9E9EA3A4A4A6A6ABAEB1B1B3B6B9BBBBC0C0C1C1C6C6C9CCCFCFCFD1D1D3D4D4D4D4D9D9D9D9
+DCDCDFDFDFDFE1E1E1E1E1E1E1DFDFDFDFDFDFDFDFDFDFDFDFDFDCDCD9D9D9D9D4D4D4D4D4D4D3D1
+CFCFCFCFCFCCCCCCCCCCC9C8C6C6C6C6C4C1C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBBBBBBBBBBB9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B7B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B3B1B1B1B1AEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABA9A9A6A6A6A6A6A6
+A6A6A4A4A4A4A4A39E9E9C9C9C9A9A9994949492928E89857F7C74726C6C6A67615F575176818994
+9C9EA3A6A9A9AEAEAEAEAEAEABA9A9A6A49E9C99949289877F7C7974726C6A66615F5C57575F6A74
+797F81848587878989898C8E8E8E8F8F8E8E8E8989898787817F7C79767674726C6C6A6767676766
+6666646166676A6C727474767C7C7F81848587878989898E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8E8E
+8C8989898C8E8C898989898989898989898987878787878787878787878585858585858585848485
+878787878787878787878989898C8E8F92929292928F8E8E8E8C8987878789898E8E8E8E8E8C8987
+817F7C7F848585858587878989898989898989898C8C8C8E8E8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8F92929292928F8E8E8E8E8E8C898987878787878485858585858585858584856767
+676A6C72767C7F87898C8F929294949999999694949492929292928F8F8E8F8F9292929292929292
+94949494949494949494949494949494949494949494949494949494949494949494949492929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292928F8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8C898989898989898989898989898989898989898989898987878785858585858585858585
+858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E898989
+898787858585847F7F7F7C7C7674747676767C7C7F7F85858789898E8E8F9292929494969A9C9C9E
+9E9E9E9EA4A4A6A6A9AEAEB1B1B3B7B9BBBBC0C1C1C1C6C6C9CCCFCFCFCFD1D3D3D4D4D4D9D9D9D9
+D9DCDEDFDFDFDFE1E1E1DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDEDCD9D9D9D9D4D4D4D4D4D4D3D3D1
+CFCFCFCFCCCCCCC9C9C9C8C8C6C6C6C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBBBBBBBBB9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABA9A9A6A6A6A6A6A6
+A6A6A4A4A4A4A4A39E9E9C9C9C9A9A9999949492928F8C87817F79746E6C6A6A66615D57517C848C
+949C9EA4A6A9ABAEAEAEAEABABA9A9A6A49E9C9A94928C87817C7C7674716C6A61615F595759616C
+747B7F81848587898989898C8C8C8E8E8E8E8E8C89898787847F7C7C797674726C6C6A6A67676767
+6767676767676A6C71747476797C7F7F818587878789898C8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8C
+89898989898989898989898787898989898787878787878587878787878585858585858585858587
+8787878787878787878989898C8E8F92929292928F8E8E8E8E8989878789898E8E8E8E8E8C898985
+7F7C7F81848485858587878989898989898C8C8E8E8E8E8E8E8E8E8F92928F8E8E8E8E8F8E8E8E8E
+8E8E8E8E8E8F9292929292928E8E8E8E8E8C89898787878785818484848585858585856A6A6A6A6A
+6A6A6C72747C7F8487898E8F929494949494949494949292929292928F8F8F8F9292929292929292
+92949494949494949494949494949494949494949494949494949494949494949494949494929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292928F8F8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8C8989898989898989898989898989898989898989898989878787858585858585858585
+858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7C7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8C898989
+8987878585847F7F7F7C7C797674747676797C7F7F84858789898E8E8E929292949494999A9C9C9E
+9E9E9EA3A4A6A6A6A9AEAEB1B1B3B9B9BBBEC0C1C1C1C6C6C9CCCFCFCFCFD1D3D3D4D4D4D9D9D9D9
+D9DCDCDCDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDCD9D9D9D9D7D4D4D4D4D4D4D3D3D1
+CFCFCFCCCCCCC9C8C8C8C8C8C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBBBBBBBBB9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B3B3B3B1B1B1B1B1B1B1B1B1B1AEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABA9A9A6A6A6A6A6A6
+A6A6A4A4A4A4A4A49E9E9C9C9C9A9A9A9994949492928E89877F7C76726C6C6A67665F59556A7C85
+8C949EA4A6A6A9ABAEAEAEABABA9A9A6A4A19C9A99948F89857F7C7674726C6A6761615F5C575D67
+72747C7F818187878989898989898C8C8E8E8E8C89898787847F7F7C7C767674726C6C6A67676767
+6767676767676A6C6C7274767C7C7F7F818587878789898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89
+89898989898989898989878787878989878787878787858585878787878585858585858585858787
+8787878989898987898989898E8F8F92929292928F8E8E8E8C89898989898E8E8E8E8E8E8989877F
+7C7F7F8181848585878789898989898E8E8E8F8E8E8E8E8E8E8E8F9292928F8F8F8F8F8F8F8E8E8E
+8E8E8E8F8F9292929292928F8E8E8E8E8C898987878787858181818184858585858474767C7F7972
+6C6C6C7274797F818789898E92929494949494949494949292929292928F8F929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292928F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8C8989898989898989898989898989898989898989898989878787878585858585858585
+858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7C7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C89898989
+8787858584817F7F7C7C7C7674747676767C7C7F81858587898C8E8E8F929292949499999A9C9C9E
+9E9E9EA4A4A6A6A6A9AEB1B1B1B6B9B9BBBEC0C1C1C4C6C6C9CCCFCFCFCFD1D3D3D4D4D4D9D9D9D9
+D9DCDCDCDCDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDCDCD9D9D9D9D4D4D4D4D4D4D4D3D1D1
+CFCFCFCCCCC9C8C8C8C8C8C6C6C6C6C4C1C1C1C1C1C1C1C0C0BEBBBBBBBBBBBBBBBBBBBBBBB9B9B9
+B9B9B9B9B9B9B9B9B9B9B7B7B9B9B7B6B3B3B3B3B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A6A6A6A6A6A6
+A6A4A4A4A4A4A4A4A19E9E9C9C9C9A9A9999949492928F8C87817F79746E6C6A6A67615F57546C7C
+878E999EA4A6A9A9ABAEAEABABA9A9A6A6A39E9C9A949289877F7C7C7674726C6A6761615F59595F
+6A72767C7F81848787878989898989898C8E8E8C8989878785817F7C7C79767472716C6A6A6A6A6A
+6A6A6A6767676A6C6C7274767C7C7F7F81878787878989898C8E8E8E8E8E8E8E8E8E8E8E8E8C8989
+89898987898989898987878787878787878787878785858585858787858585858585858585878787
+878789898989898989898C8E8E8F92929292928F8E8E8E8E89898989898C8E8E8E8E8E898987817C
+7C7F7F7F818587878789898989898C8E8F8F8F8E8E8E8E8E8E8F8F9292929292929292928F8E8E8E
+8E8E8F92929292929292928E8E8E8E8C89898787858584817F7F7F8485858585847F848789857C74
+7271717274767C818587898E92929294949494949494929292929292928F92929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292928F8F92928F8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8C89898989898989898989898989898989898989898989898787878585858585858585
+85858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7C7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898989
+87878585817F7F7F7C7C7674747476767C7C7F7F84858789898C8E8E8F9292949494999A9A9C9C9E
+9E9EA3A4A6A6A6A9ABAEB1B1B1B6B9B9BBBEC0C1C1C4C6C6C9CCCCCFCFCFD1D1D3D4D4D4D7D9D9D9
+D9DCDCDCDCDCDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDEDCD9D9D9D9D9D4D4D4D4D4D4D3D1D1CF
+CFCFCFCCCCC9C8C8C8C8C8C6C6C6C6C4C1C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBBBBBBBBBBB9B9B9
+B9B9B9B9B9B9B9B9B9B7B6B7B7B7B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B3B1B1B1B1B1B1B1B1B1AEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A6A6A6A6A6A6
+A6A4A4A4A4A4A4A4A19E9E9C9C9C9A9A9A9994949492928E89877F7C76726C6C6A6A67615D554F72
+7F87929CA4A6A6A9A9ABABABA9A9A9A6A6A49E9C9A94928E87817F7C7674726C6A6766615F5F595D
+616C74767C7F81848787878789898989898C8E8E8989878787847F7C7C7C797674726C6C6A6A6A6A
+6A6A6A6A6A6A6A6C6C727476797C7F7F84878787898989898C8E8E8E8E8E8E8E8E8E8E8E8C898989
+89898787878789898787878787878787878787878584858585858585858585858585858587878787
+87898989898989898C8E8F8F8F9292929292928F8E8E8E8C898989898C8E8E8E8E8E898987877F7C
+7F7F7F81858787878989898989898E8F9292928F8E8E8F8F8F8F929292929292929292928F8F8E8E
+8F8F92929292929292928F8E8E8E8C89898787858584817F7F7F818585858481878C929492877F79
+7474727476797C7F848789898F929292949494949492929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949492
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292928F8F92928F8F8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8C898989898989898989898989898989898989898989898987878785858585858585
+8585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898987
+878585847F7F7F7C7C797674747676767C7C7F8185878789898E8E8F9292949494999A9A9C9C9E9E
+9E9EA4A4A6A6A6A9AEAEB1B1B3B6B9B9BBBEC1C1C1C6C6C6C9CCCCCFCFCFCFD1D3D3D4D4D4D9D9D9
+D9D9D9D9DCDCDEDFDFDFDFDFDFDFDFDFDFDFDEDEDCDCDCDCD9D9D9D9D9D7D4D4D4D4D4D3D3D1CFCF
+CFCFCCCCCCC8C8C6C6C6C8C6C6C6C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBBBBBBBBBB9B9B9
+B9B9B9B9B9B9B9B9B9B7B6B6B6B7B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A6A6A6A6A6A6
+A4A4A4A4A4A4A4A4A19E9E9C9C9C9C9A9A9999949492928F8C87817F7974726C6C6A6A615F595561
+767F89949EA4A6A6A9A9A9ABA9A9A9A6A6A49E9C9C99948F89877F7C7C7674726C6A6766615F5D57
+5F676C74767C7F818587878787878989898C8E8E898989878784817F7C7C79767474716C6A6A6A6A
+6A6A6A6A6A6A6A6C6C727274767C7F7F848787898989898C8C8E8E8E8E8E8E8E8E8E8E8C8C898989
+89878787878787878787878785848484848585858484848485858584858585858585858787878787
+89898989898C8E8E8F8F9292929292929292928F8F8E8E898989898C8E8E8E8E8E8C8989877F7C7C
+7F7F81858787898989898989898C8F929292928F8F8F9292929292929292929292929292928F8F8F
+929292929292929292928F8E8E8C898987878585847F7F7F7F8184848484818C929A9E9E9489877C
+76747474767C7C7F818787898E8F9292929294949492929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949492
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292928F8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989878787858585858585
+858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898987
+858585817F7F7F7C7C7674747676767C7C7F7F81858789898C8E8E9292929494999A9A9A9C9C9E9E
+9EA1A4A6A6A6A9A9AEAEB1B1B3B6B9B9BBBEC1C1C1C6C6C6C9CCCCCFCFCFCFD1D3D3D4D4D4D9D9D9
+D9D9D9D9D9DCDCDFDFDFDFDFDFDEDEDCDCDCDCDCDCDCDCDCD9D9D9D9D9D4D4D4D4D4D3D3D1CFCFCF
+CFCFCCCCCCC8C8C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9BBB9B9B9
+B9B9B9B9B9B9B9B9B9B7B6B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6
+A4A4A4A4A4A4A4A4A39E9E9C9C9C9C9C9A9A9994949492928E89877F7C7672716C6C6A67615F5754
+6679818E9AA4A4A6A6A9A9A9A9A9A9A6A4A4A39E9C9A94928C87817F7C7674726E6A6A6766615F5D
+5D616A7174797C7F818587878787878989898C8E8C8989878784817F7C7C7C797674726E6C6A6A6A
+6A6A6A6A6A6A6A6C6C717274767C7F81848787898989898C8E8E8E8E8E8E8E8E8E8E8E8C89898989
+89898787878787878787878584848181818181848481818184858484848485858585878787878789
+898989898C8E8F8F9292929292929292929292928F8E8C8989898C8E8E8E8E8E8E898987847C7C7F
+7F81858787898989898989898C8E8F92929292929292929292929292929292929292929292928F92
+9292929292929292928F8E8E8C898987878585847F7F7F7F7F818181817F9292969CA49E998E8781
+7C797676797C7C7F7F8487898C8F8F92929294949292929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292928F8F8F8F928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989878787878585858585
+858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898787
+8585847F7F7F7C7C767674747676767C7C7F7F84878989898C8E8F9292949496999A9A9A9C9C9E9E
+9EA4A4A6A6A6A9ABAEB1B1B1B3B6B9B9BBBEC1C1C4C6C6C6CCCCCCCFCFCFCFD1D3D3D4D4D4D9D9D9
+D9D9D9D9D9D9DCDCDFDFDEDCDCDCDCDCDCDCDCDCDCDCDCD9D9D9D9D9D9D4D4D4D3D3D3D1CFCFCFCF
+CFCFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B6B6B3B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B3B1B1B1B1B1B1B1B1B1AEB1B1B1B1AEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEACABABABABABABABABABABABABA9A9A9A9A6A6A6A6A6
+A4A4A4A4A4A4A4A4A39E9E9E9C9C9C9C9A9A9999949492928F8C87817C797472716C6C6A645F5D55
+556C7C87929CA4A4A6A6A6A6A9A9A6A6A4A4A39E9C9A94928F89847F7C7C7674726C6A6A6764615F
+5D5F616C7274797F7F818485878787898989898C8C8989878785817F7F7C7C79767674726C6C6A6A
+6A6A6A6A6A6A6A6C6E72727474797C7F8487878789898C8E8E8E8E8E8E8E8E8E8E8E8E8E89898989
+8989878787858587878785848481817F7F7F818181817F8181848481818184858585858787878989
+8989898C8E8F8F929292929292929294929292928F8E8989898C8E8E8E8E8E8E8C8987857F7C7C7F
+818787898989898989898C8E8E8F9292929292929292929292929292929292929292929292929292
+9292929292929292928F8E8C898989878585847F7F7F7F7F7F7F7F817F8994949CA3A6A19A928987
+7C7C7C7B7C7C7F7F7F818789898E8F92929292929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292928F8F92928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8F8E8E8E8E8E8E8E8F8F8F928F8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989898989898787878585858585
+85858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898785
+8584817F7F7C7C797674747676767C7C7F7F8185878989898E8F9292929494999A9A9A9C9C9C9E9E
+A1A4A6A6A6A9A9AEAEB1B1B1B3B6B9B9BBC0C1C1C4C6C6C8C9CCCCCFCFCFCFD1D3D3D4D4D4D7D9D9
+D9D9D9D9D9D9DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD9D9D9D9D9D9D9D4D4D4D3D3D3D1CFCFCFCF
+CFCFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B7B6B3B3B3B3B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEB1B1B1AEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6
+A4A4A4A4A4A4A4A4A39E9E9E9E9C9C9C9C9A9A9994949492928E89847F7C7474726E6C6A67615F59
+555C747F89949EA4A6A6A6A6A6A9A6A6A4A4A39E9E9C9994928987817F7C7674726E6C6A6A676161
+5F5F61676E72767C7F818184848587878989898C8C898987878584817F7C7C7C79767472726C6C6C
+6C6C6C6C6C6C6C6C6E72727274767C7F818587878989898E8E8E8E8E8E8F8F8E8E8E8E8E8C898989
+89898987878787858585858584817F7F7F7F7F7F817F7F7F7F8181817F8181848585858787898989
+89898C8E8E8F929292929494949494949492928F8E8C89898C8E8E8E8E8E8E8E898787817C7C7F81
+8587898989898989898C8E8E8E8F9292929292929292929292929292929292929292929292929292
+92929292929292928F8E8C898989878785847F7F7F7F7F7F7F7F7F7F849C9C9C9EA6A6A39C948987
+817F7C7C7C7C7F7F81818587898C8E8F929292929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8F8F8F8E8E8E8E8E8F8F8F9292928F8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989898987878785858585
+8585858585858585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989878585
+85817F7F7F7C7C767674767676797C7C7F7F84878989898C8E929292929494999A9A9A9C9C9E9E9E
+A4A4A6A6A9A9ABAEAEB1B1B3B6B7B9B9BBC0C1C1C6C6C6C8C9CCCCCCCFCFCFD1D1D3D4D4D4D4D9D9
+D9D9D9D9D9D9D9DCDCDCDCDCDCDCDCDCDCD9D9D9D9D9D9D9D9D9D4D4D4D4D4D3D3D3D1CFCFCFCFCF
+CFCCCCCCC8C8C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEB1AEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6
+A6A4A4A4A4A4A4A4A39E9E9E9E9C9C9C9C9A9A9999949492928E8987817C767472726E6C6A64615F
+57516176818E99A1A4A6A6A6A6A6A6A6A6A4A49E9E9C9A94928E87847F7C7C7674726C6C6A6A6761
+615F61666A7174767C7F7F8181848487878989898C898987878784817F7F7C7C7C76767472726C6C
+6C6C6C6C6C6C6C6C7172727274767C7F7F8587878989898C8E8E8E8E8F8F8F8F8F8E8E8E8E8C8989
+89898989878787878785858584817F7F7F7F7F7F7F7F7F7F7F7F817F7F7F7F818484858787878989
+898C8E8E8F929292929494949494949492928F8E8E8C898C8E8E8E8E8E8E8E8C8987847F7C7C7F84
+8787898989898989898C8E8E8F929292929292929292929292929292929292929292929292929292
+929292929292928F8E8C898989898785847F7F7F7F7F7F7F7F7F7F819AA4A4A4A4A9A6A49E948E89
+87817F7C7F7F7F7F8181848789898E8F8F9292929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8F8F8F8F8E8E8E8E8F8F8F929292928F8F8F8F928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989878787858585
+858585858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8987858585
+847F7F7F7C7C767674767676767C7C7F7F8185878989898E8F9292929294969A9A9A9A9C9C9E9EA3
+A4A6A6A6A9A9AEAEAEB1B1B3B6B7B9B9BBC0C1C1C6C6C6C8C8CCCCCCCFCFCFCFD1D3D3D4D4D4D9D9
+D9D9D9D9D9D9D9DCDCDCDCDCD9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D4D4D4D3D3D1CFCFCFCFCFCF
+CFCCCCCCC8C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B1B1B1B3B3B1B1B1B1B1B1B1B1B1AEB1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A9A6A6A6A6A6A6
+A6A4A4A4A4A4A4A4A49E9E9E9E9E9C9C9C9A9A9A99969494928F8C87847F7C767472726C6A676161
+5C574F6A7C87929AA4A4A4A4A4A6A6A6A6A4A4A19E9C9A94928F8987817F7C7674726E6C6C6A6767
+61616161676C7274767C7F7F7F8181848789898989898989878784817F7F7F7C7C7976747472726C
+6C6C6C6C6C6C6C6C7172727474767C7F7F8487878789898C8E8E8E8F8F929292928F8F8F8E8E8C8C
+898989898989878787878785858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181848587878989
+898E8E8F8F9292929294949494949492928F8E8E8E8E8C8E8E8E8E8E8E8E8E8987847F7C7C7F8185
+878989878789898989898C8E8E8F9292929292929292929292929292929292929292929292929292
+92929292928F8F8E8E898989898787847F7F7F7F7F7F7F7F7F7C879AA6A4A6A6A6ABA6A49E9A9289
+8784817F7F7F7F7F8184848787898E8E8F9292929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8F8E8E8E8E8E8E8E
+8F8F8F928F8F8E8E8E8F8F9292929292928F8F8F928F8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989878787878585
+85858585858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8785858584
+7F7F7F7C7C7C7676767676767C7C7C7F7F84878789898C8E929292929494999A9A9A9A9C9C9E9EA4
+A4A6A6A6A9ABAEAEB1B1B1B3B6B9B9BBBBC0C1C4C6C6C6C8C8CCCCCCCFCFCFCFD1D3D3D4D4D4D7D9
+D9D9D9D9D9D9D9DCDCD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D7D4D4D4D4D4D4D3D3D1CFCFCFCFCFCF
+CFCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B1B1B1B1B3B1B1B1B1B1B1B1B1B1AEAEB1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6
+A6A4A4A4A4A4A4A4A4A19E9E9E9E9C9C9C9A9A9A9A999494928F8C89877F7C79747472716C6A6761
+5F595457727F89929CA4A4A3A3A4A4A6A6A4A4A19E9E9C9994928C87847F7C7C7674726E6C6C6A6A
+67646161666A6C7274797C7F7F7F81818587898989898989878784817F7F7F7C7C7C797674747272
+6E6C6C6C6C6C6C6C7172747474767C7F7F818587878989898E8E8E8F929292929292929292928F8E
+8E8E8E8E8C898989898989878787878784817F7F7F817F7C7C7F7F7F7F7F7F7F7F81818487878989
+898C8F8F9292929294949494949492928F8E8E8E8E8E8E8E8E8E8E8E8E8E8C89857F7C7C7F7F8487
+878987878789898989898E8E8E8F8F92929292929292929292929292929292929292929292929292
+92929292928E8E8E8C8989898787847F7F7F7F7F7F7F7F7F7C8794A3A6A4A6ABAEAEA6A49E9C928E
+898784817F8181818184848587898E8E8F8F92929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8F8F8F8E8E8E8E8E8E
+8F8F9292928F8E8E8F8F8F929292929292928F9292928F8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989898989898787878585
+85858585858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858585847F
+7F7F7C7C7C767676767676767C7C7F7F8185878989898E8F929292929494999A9A9A9C9C9E9EA1A4
+A4A6A6A9A9ABAEAEB1B1B1B3B6B9B9BBBBC0C1C4C6C6C6C8C8C9CCCCCFCFCFCFD1D3D3D4D4D4D4D7
+D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D4D4D4D3D3D1CFCFCFCFCCCCCC
+CCCCCCC9C8C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEB1AEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6
+A6A4A4A4A4A4A4A4A3A19E9E9E9E9E9C9C9A9A9A9A99949492928E8987847F7C767472726C6A6766
+615F574F5C747F89949CA19E9EA1A4A4A6A4A4A19E9E9C9A94928F8987817F7C797472726E6C6A6A
+6A67666461676A6C72747C7C7F7F7F7F818787878989898987878584817F7F7F7C7C797676747472
+726E6E6E6E6E71717172747476767C7F7F818587878989898E8E8F92929292929292929292929292
+8F8F8F8F8F8E8C8989898989878787878785818181817F7F7C7C7F7F7F7C7C7F7F7F7F8184878789
+898C8E8F92929294949494949292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8C8987817F7C7C7F818787
+8987878789898989898C8E8E8E8F9292929292929292929292929292929292929292929292929292
+929292928F8E8E8E8989898787847F7F7F7F7F7F7F7F7C7C84929CA9A9A6A6ABAEAEA6A49E9C9492
+89878784818184848184858787898E8E8E8F92929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949492929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292928F8E8E8E8E8E8F8F8F8F8E8E8E8E8F
+8F8F929292928F8F8F8F9292929292929292929292928F8F8F8F928F8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989898989898989898989898987878785
+8585858585858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585847F7F
+7F7C7C7C767674767676767C7C7C7F7F85858789898E8E8F9292929294949A9A9A9A9C9C9E9EA3A4
+A4A6A6A9A9AEAEAEB1B1B3B6B7B9B9BBBBC0C1C4C6C6C6C6C8C9CCCCCCCFCFCFD1D1D3D4D4D4D4D4
+D7D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D4D4D4D4D3D1CFCFCFCFCCCCCCCC
+CCCCCCC8C8C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6
+A6A4A4A4A4A4A4A4A3A19E9E9E9E9E9C9C9A9A9A9A9A949494928F8989877F7C79747472716C6A67
+665F5C554F6179848C949C9E9E9EA1A4A4A4A4A39E9E9C9C9994928987847F7C7C767472726C6C6A
+6A6A6A6766666A6C7174767C7C7F7F7F7F848787878789898787858481817F7F7C7C7C7976747474
+72727171717171727272747476767C7F7F818587878789898E8F8F92929292949292929294949292
+9292929292928F8E8E8E8E8C89898989898787848484847F7F7C7F7F7F7C7C7C7F7F7F7F81858789
+89898E8F929292949494949292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8C8987817F7C7C7F7F848787
+87858787898989898C8E8E8E8E8F9292929292929292929292929292929292929292929292929292
+929292928E8E8E8C89898787847F7F7C7C7F7F7F7F7C7C7C929CA6AEA9A6A9ABAEAEA9A49E9C9992
+8E878787848585858585878787898C8E8E8E8F929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292928F8E8E8E8F8F8F928F8E8E8E8F8F
+8F92929292928F8F8F92929292929292929292929292928F8F8F928F8F8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989878787
+858585858585858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8584817F7F
+7C7C7C76767676767676797C7C7F7F84858789898C8E8E929292929494999A9A9A9C9C9C9E9EA3A4
+A6A6A6A9ABAEAEAEB1B1B3B6B7B9B9BBBBC0C1C4C6C6C6C6C8C8CCCCCCCFCFCFCFD1D3D3D4D4D4D4
+D4D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D7D4D4D4D4D4D4D3D1D1CFCFCFCFCCCCCCCC
+CCCCC9C8C6C6C6C6C4C4C4C4C4C1C1C1C1C1C1C1C0C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1B3B3B1B1B1B1B1B1B1B1B1AEB1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6
+A6A4A4A4A4A4A4A3A39E9E9E9E9E9E9C9C9A9A9A9A9A969494928F8C8987847F7C767472726E6A6A
+67615F5951516A7C878F949C9C9C9E9EA4A4A4A39E9E9C9C9A94928E8987817F7C79747472726C6C
+6C6C6A6A6766676A6C7274767B7C7C7F7F818587878787898787858584817F7F7F7C7C7979767674
+747272727272727272727474767C7C7F7F818787878789898E8F9292929294949494929494949494
+929292929292928F8F8F8F8E8E8989898989878787878784817F7F7F7F7F7C7C7F7F7F7F7F818487
+89898C8E8E8E8F92929292928F928E8E8E8E8E8E8E8E8E8E8E8E8E8C8989847F7C7C7F7F81878787
+85878789898989898C8E8E8E8F929292929292929292929292929292929292929292929292929292
+9292928F8E8E8C89898787847F7F7C7C7F7F7F7C7C7C7C899AA4AEB1AEA6A9AEAEAEA9A49E9C9994
+8F898987878787878787878787898C8E8E8E8F929292929292929292929292929292929292929292
+92929292949494949494949494949494949494949494949494949494949494949494949494949494
+94949494929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292928F8F8E8F8F8F92928F8F8E8E8F8F
+929292929292928F8F9292929292929292929292929292928F9292928F8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989898787
+87858585858585858585858585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85817F7F7F
+7C7C79767676767676767C7C7C7F8185858789898E8E8F929292949494999A9A9C9C9C9C9E9EA4A4
+A6A6A9A9ABAEAEB1B1B1B3B6B9B9B9BBBBC0C1C4C6C6C6C6C8C8CCCCCCCFCFCFCFD1D3D3D3D3D4D4
+D4D4D4D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D7D4D4D4D4D4D4D4D4D3D3D1CFCFCFCFCFCCCCCCCC
+CCCCC9C8C6C6C6C6C4C1C1C4C4C1C1C1C0C0C0C1C0C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1B1B3B1B1B1B1B1B1B1B1B1AEAEB1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6
+A6A4A4A4A4A4A4A3A19E9E9E9E9E9E9C9C9C9A9A9A9A99949492928E8989877F7C79747472716C6A
+6A66615D575157727C878F949C9C9C9E9EA3A4A39E9E9C9C9A94928F8987817F7C7C76747472726C
+6C6C6C6C6A67666A6A6C7274767C7C7C7F7F818587878787878787858481817F7F7C7C7C7C797676
+747472727272727272727476767C7C7F7F848787878989898E929292929294949494949494949494
+949494949292929292928F8F8E8E8C8989898989878787878581817F7F7F7F7C7F7F7F7F7F7F8184
+8789898C8C898C8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989877F7C7C7C7F7F84878785
+8587878989898989898C8E8F8F929292929292929292929292929292929292929494949292929292
+9292928F8E8C89898787847F7C7C7C7F7F7F7C7B7979819AA4AEB7B1AEA9A9AEAEAEA9A6A19C9A94
+928C898987878787878787878789898E8E8E8F929292929292929292929292929292929292929292
+92929292949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292928F8E8F8F929292928F8E8F8F8F
+92929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989898989898787
+8787858585858585858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF847F7F7F7C
+7C79767676767676767C7C7C7F7F84858789898C8E8E8F929294949494999A9C9C9C9C9E9EA1A4A4
+A6A6A9A9ABAEAEB1B1B1B3B6B9B9B9BBBBC0C1C4C6C6C6C6C8C8C9CCCCCFCFCFCFD1D3D3D3D3D3D4
+D4D4D4D7D9D9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D4D4D4D3D3D3D3D3D1CFCFCFCFCFCFCCCCCCCC
+CCCCC9C8C6C6C6C6C4C1C1C1C1C1C1C1C0C0C0C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9
+B9B9B7B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6
+A6A6A4A4A4A4A4A39E9E9E9E9E9E9E9C9C9C9A9A9A9A99949492928E8C8987847F7C767472726E6C
+6A67615F5C554F5F747F898F949A9C9C9E9EA3A39E9E9C9C9C9994928C8985817F7C797474747272
+6C6E6E6C6C6A67676A6A6C7274767C7C7F7F7F8184858787878787858584817F7F7F7C7C7C7C7976
+767474727272727272727476767C7C7F7F848787898989898E929292929494949494949494949494
+9494949494949292929292928F8F8E8C8C8989898987878787858481817F7F7F7F7F7F7F7F7F7F7F
+81878789898989898989898989898C8E8E8E8E8E8E8E8E8E8E8C898987817F7C7C7F7F8185858585
+878789898989898989898C8E8F8F9292929292929292929292929292929494949494949292929292
+92928F8E8989898787847F7C7C7C7C7C7C7C7976767692A4ABB4B9B1AEABA9AEAEABA9A6A39C9A94
+928E898989898989878787878989898E8E8E8E929292929292929292929292929292929292929292
+92929292949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292928F8F8F8F92929292928F8F8F92
+92929292929292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989898989898989898989898987
+878785858585858585858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF817F7F7F7C
+7C76767676767676767C7C7F7F8185878789898E8E8E929292949494969A9C9C9C9C9E9E9EA3A4A4
+A6A6A9ABAEAEAEB1B1B3B6B7B9B9BBBBBBC0C1C1C6C6C6C6C6C8C9CCCCCCCFCFCFD1D1D3D3D3D3D3
+D4D4D4D4D9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D4D4D4D3D3D3D3D3D1CFCFCFCFCFCFCCCCCCC9C9
+C9C9C8C8C6C6C6C6C1C1C1C1C1C1C1C1C0C0C0C0C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9
+B9B7B7B7B7B9B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6
+A6A6A4A4A4A4A4A19E9E9E9E9E9E9E9C9C9C9A9A9A9A99949492928F8E8989877F7C79747472716C
+6C6A66615F57555566747F878E949A9C9C9E9EA3A19E9E9C9C9A94928E8987847F7F7C7674747472
+727171716C6C6A6A6A6A6C717474767C7C7F7F818184848587878785858584817F7F7F7C7C7C7C79
+767674747472727474747476797C7C7F81848787898989898E929292949494949494949494949494
+949494949494949292929292928F8E8E8E8C8989898987878787858481817F7F7F7F7F7F7F7F7F7F
+7F81848787878787878787898989898C8E8E8E8E8E8E8E8E8C898987847F7C7C7F7F7F8484858585
+878989898989898989898C8E8E8F9292929292929292929292929494949494949494949492929292
+92928F8989898787847F7C7C7C7C7C7C7C767676768EA1A9B4BCB9B1B1AEA9ABABABA9A6A39C9A99
+94928E8C89898989898787898989898E8E8E8E8F9292929292929292929292929292929292929292
+92929292949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949492929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292928F8F9292929292928F8F9292
+9292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989
+87878785858585858585858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7C7C
+76767676767676767C7C7C7F7F8585878989898E8E8F929294949494999A9C9C9C9E9E9E9EA3A4A6
+A6A6A9ABAEAEAEB1B1B3B6B7B9B9BBBBBBC0C1C1C4C6C6C6C6C8C9CCCCCCCFCFCFCFD1D3D1D1D1D3
+D3D4D4D4D4D9D7D4D4D4D9D9D9D9D9D9D4D4D4D4D4D3D3D3D3D3D3D3D1CFCFCFCFCFCFCCCCCCC8C8
+C8C8C8C6C6C6C6C4C1C1C1C1C1C1C1C0C0BEBEBEC0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9
+B9B7B6B6B7B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B3
+B3B1B1B1B1B1B1B1B1B1AEAEB1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABA9A9A9A9A6A6A6A6A6A6A6A6A6
+A6A6A4A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9A9A9A9A9994949492928F8C8987847F7C767472726E
+6C6A6A615F5F5755576A767F878F949A9C9C9E9EA19E9E9C9C9A94928E898785817F7C7976747474
+72727272716C6C6A6A6A6A6C717474797C7C7F7F7F7F818485878785858584817F7F7F7C7F7C7C7C
+797676747474747474747476797C7C7F818487878989898C8E929292949494949494949494949494
+949494949494949492929292928F8E8E8E8E8C898989898987878787848481817F7F7F7F7F7F7F7F
+7F7F7F7F81848587878787898989898E8E8E8E8E8E8E8E8C898987877F7C7C7C7F7F818184858587
+87898989898989898989898C8E8F9292929292929494949494949494949494949494949494929292
+928F8989898787847F7C7C7C7C79797976767676899CABAEB7C1BCB1B1AEA9ABABABA9A6A49E9C99
+94928F8E8C8989898989898989898C8E8E8E8E8F9292929292929292929292929292929292929292
+92929292949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949492929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292928F8E8E8E8F8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989
+8987878785858585858585858585858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7C7C7C
+76767676767676797C7C7F7F8485878989898C8E8F92929294949494999A9C9C9E9E9E9EA1A4A4A6
+A6A9A9ABAEAEB1B1B1B3B6B9B9B9BBBBBEC0C1C1C4C6C6C6C6C8C8CCCCCCCFCFCFCFD1D1D1D1D1D3
+D3D4D4D4D4D4D4D4D4D4D4D9D7D7D4D4D4D4D3D3D3D3D3D1D1D1D1D1CFCFCFCFCFCFCFCCCCC9C8C8
+C8C8C8C6C6C6C6C4C1C1C1C1C1C1C1C0BEBEBEBEBEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9
+B9B6B6B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1
+B3B1B1B1B1B1B1B1B1AEAEAEAEB1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6
+A6A4A4A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9A9A9A9A9994949492928F8E8989877F7C7976747271
+6C6C6A67615F5D57555C6A7C818992999A9C9C9C9E9E9E9C9C9A96928F8C8987847F7F7C76767474
+7472727272716C6C6A6A6A6A6C727476797C7C7F7F7F7F8184848585858584817F7F7F7F7F7F7C7C
+7C7B76767474747474747476797C7C7F818487878989898C8E8F9292949494949494949494949494
+94949494949494949292929292928E8E8E8E8C89898989898987878787858481817F7F7F7F7F7F7F
+7F7F7F7F7F8181848787878789898C8E8E8E8E8E8E8E8E89898787817C7C7C7F7F7F818185858787
+878789898989898989898E8F8F929292949494949494949494949494949494949494949492929292
+8F8C89878787817F7C7C7C7976767676767676879AA9B4B7BEC6BEB3B1AEABA9A9ABA6A6A49E9C9A
+9694928F8E8C89898989898989898C8E8E8E8E8F9292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494929292949292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292928F8F8E8E8F8F8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989898989
+8989878785858585858585858585858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7C7C76
+767676767676767C7C7C7F818585878989898E8F92929294949494969A9A9C9C9E9E9E9EA3A4A4A6
+A6A9A9ABAEAEB1B1B3B3B6B9B9B9BBBBBEC0C1C1C4C6C6C6C6C8C8C9CCCCCFCFCFCFD1D1D1CFD1D3
+D3D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D1D1D1D1D1D1D1D1CFCFCFCCCCCCCCCCCCCCC8C8C8
+C8C8C8C6C6C6C6C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9BBB9B9B9B9B9B9B9B9B9B9B9B9
+B7B6B3B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1
+B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6
+A6A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9494949292928F8C8987847F7C76747272
+6E6C6A6A64615F5C57555F717C818992999A9A9C9C9E9E9C9C9A9994928E898785817F7C79767674
+747472727272726C6C6A6A6A6A6C7274767C7C7C7C7C7F7F81818485858484817F7F7F7F7F7F7F7F
+7C7C79767674747474747476797C7C7F8185878789898C8E8F8F9292929494949494949494949494
+949492929294949492929292928F8F8E8E8E8E898989898989898787878785848481817F7F7F8181
+7F7F7F7F818184848787878989898E8E8E8E8E8E8E8E8C898787817C7C7C7F7F7F7F7F8485858787
+87878989898989898C8E929292929292949494949494949494949494949494949494949492929292
+8E89878785817F7C7C7C76767674767674746694A4B4BCBEC4C6BEB3B1AEABA9A9A9A6A6A49E9C9A
+999492928F8E8C8989898989898C8E8E8E8E8E8F9292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494929292949492929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292928F8E8F8F8F8F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989
+898987878585858585858585858585858585858585858585858584817F7F7F817F7F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7C7C7976
+7676767676767C7C7C7F7F8585878989898C8E8F92929294949494999A9C9C9E9E9E9E9EA3A4A4A6
+A6A9ABAEAEAEB1B1B3B6B7B9B9BBBBBBC0C1C1C1C1C6C6C6C6C6C8C9CCCCCCCFCFCFCFCFCFCFD1D1
+D3D3D3D3D4D4D4D3D3D4D4D4D4D4D4D4D4D3D1D1D1D1D1D1D1D1CFCFCFCFCCCCCCCCCCCCC9C8C6C6
+C6C8C6C6C6C6C4C1C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9
+B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1
+B1B1B1B1AEB1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9694949492928F8E898987817C79767472
+716C6C6A6761615F5C575761727C848992949A9A9C9C9E9C9C9A9994928E898787847F7F7C7B7976
+74747472727272726E6C6A6A6A6A6E72747679797C7C7C7C7F81818484848481817F7F7F7F7F7F7F
+7C7C7C797674747474747476797C7F7F81878789898C8E8F92929292929494949494949494949494
+9494929292929492929292928F8F8E8E8E8E8E8C898989898989898987878787858481817F818181
+81817F818184858787878989898C8E8E8E8E8E8E8E8E898987857F7C7C7C7F7F7F7F818484858587
+878989898989898E8F9292929292929494949494949494949494949494949494949494929292928E
+89878785817F7C7C7B76767474767674747692A1B1C1C4C6CCCBBEB6B1AEABA9A9A9A6A6A4A19C9C
+9A949292928E8E8C898989898C8E8E8E8E8E8E8F9292929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949294949492929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292928F8F8F928F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989
+89898787878585858585858585858585858585858585858585858584817F8181817F7F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7676
+7676767676797C7C7F7F818585878989898E8F9292929294949494999A9C9C9E9E9E9E9EA4A4A6A6
+A6A9ABAEAEB1B1B1B3B6B7B9B9BBBBBBC0C1C1C1C1C4C6C6C6C6C8C9CCCCCCCFCFCFCFCFCFCFCFD1
+D3D3D3D3D3D3D3D3D3D3D4D4D4D4D4D4D3D3D1CFCFCFCFCFCFCFCFCFCFCCCCCCCCCCCCC9C8C6C6C6
+C6C6C6C6C6C4C4C1C1C1C0C0C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B9B9B9
+B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B3B3B3B1B1B1B1B1
+B1B1B1B1AEAEB1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9A9A9A9A999494949292928F8C8987847F7C767472
+726E6C6A6A66615F5F59555967747F878C9494999A9C9C9C9C9A9994928F89898785817F7C7C7C79
+767674747474747272716C6C6A6A6C72727474767679797C7C7F7F8181848181817F7F7F7F7F7F7F
+7F7C7C797676747474767676797C7F7F81878989898E8F9292929292929494949494949494949494
+94929292929292929292928F8F8E8E8C898C8E8C8989898989898989898787878785848481818484
+8484818184858787878989898C8E8E8E8E8E8E8E8E8C8987877F7C7C7C7F7F7F7F81818181848587
+87898989898C8E8F92929292929294949494949494949494949494949494949494949492928F8F89
+898787817F7C7C79767674747474747476899CACBCC8CCCFD1CCC1B7B1AEAEA9A9A9A6A4A4A39E9C
+9A999492928F8F8E8C8C898C8E8E8E8F8E8E8E8E9292929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292928F8F9292928F8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989
+898989878785858585858585858585858585858585858585858585858481818184817F7F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C767676
+76767676797C7C7C7F7F8485878789898C8E9292929294949494999A9A9C9C9E9E9E9EA1A4A4A6A6
+A9A9ABAEAEB1B1B1B3B6B9B9B9BBBBBEC0C1C1C1C1C4C6C6C6C6C8C8CCCCCCCCCFCFCFCFCFCFCFD1
+D3D3D3D3D3D3D1D1D3D3D4D4D4D4D4D3D3D1CFCFCFCFCFCFCFCFCFCFCCCCCCCCCCCCCCC8C8C6C6C6
+C6C6C6C6C6C1C1C1C1C1C0C0C0C0C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B7B7B7B7
+B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B3B1B1B1B1B1
+B1B1B1AEAEAEAEB1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9A9A9A9A99949494949292928E898987817F7B7674
+72726C6C6A6766615F5D57575D6A767F878E9494999A9C9C9C9A9994928F8C898987847F7F7C7C7C
+79767674747474747272716C6C6C6C6C72727474747676767C7C7F7F81818181817F7F7F7F7F7F7F
+7F7C7C7C7976747676767676797C7F7F818789898C8E8F9292949492929494949494949494949494
+929292929292929292928F8F8E8E8C8989898C8E8989898989898989898987878787878584848485
+8787858485878787878989898E8E8E8E8E8E8E8E8C898987817C7C7C7F7F7F7F7F81818181848787
+878989898C8F8F92929294949494949494949494949494949494949494949494949492928F8E8989
+878784817C7C79767674747474747476879AA9B9C8D1D4D4D4CCC4B9B1AEAEA9A9A9A6A4A4A39E9C
+9A999494928F8F8F8E8C8C8C8E8E8E8F8F8E8E8E8F92929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292928F8F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989
+89898987878585858585858585858585858585858585858585858585858481848484817F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C79767676
+767676767C7C7C7F7F818585878989898E8F9292929294949499999A9C9C9E9E9E9E9EA3A4A4A6A6
+A9A9AEAEAEB1B1B3B3B7B9B9B9BBBBBEC0C0C1C1C1C4C6C6C6C6C8C8C9CCCCCCCCCFCFCFCFCFCFD1
+D3D1D1D1D1D1D1D1D1D3D3D3D3D3D3D3D1CFCFCFCFCFCFCFCFCFCFCFCCCCCCCCCCCCC8C8C6C6C6C6
+C6C6C6C6C1C1C1C1C1C1C0C0C0C0C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B7
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1
+B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4
+A4A4A4A4A4A4A4A49E9E9E9E9E9E9E9E9C9C9C9A9A9A9A99949494949292928F898987847F7C7674
+7272716C6C6A6766615F5D57575F6C767F878F9494999A9C9C9A999492928E89898787817F7F7C7C
+7C79767674747474727272716C6C6C6C7171727274747476767C7C7F7F7F81817F7F7F7F7F7F7F7F
+7F7F7C7C7C76767676767676797C7C7F8187898C8E8E8F9294949494949494949494929294949492
+929292928F8F9292928F8F8E8E8C89898989898C8989898989898989898989898787878787858587
+87878787878787878989898C8E8E8E8E8E8E8E8C898987817F7C7C7F7F7F7F7F7F7F7F7F81858787
+8787898E8F929292929494949494949494949494949494949494949494949494949492928F8C8989
+8787817C7C797674747474747476767F94A6B7C4D4D4D4D4D3CCC4B9B1B1AEA9A9A6A6A4A4A39E9C
+9C9A94949292928F8F8E8E8E8E8E8F8F8F8E8E8E8F92929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292929292929292928F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989
+89898987878585858585858585858585858585858585858585858585858584848584817F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C76767676
+7676767C7C7C7F7F7F8485878789898E8E8F92929292949494999A9A9C9C9E9E9E9E9EA3A4A6A6A6
+A9ABAEAEAEB1B1B3B6B7B9B9BBBBBBBBC0C0C1C1C1C1C6C6C6C6C6C8C9CCCCCCCCCCCFCFCFCFCFD1
+D1D1D1D1D1CFCFCFCFD1D3D3D3D1D1D1D1CFCFCFCFCFCFCFCFCFCFCCCCC9C9C9C9C9C8C6C6C6C6C6
+C6C6C6C4C1C1C1C1C1C0C0BEBEBEC0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B6B6
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1AEB1
+B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEABAEAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4
+A4A4A4A4A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9A9A9A9A99949494949492928F8C898987817F7C76
+7472726C6C6A6A6761615F5D575C6172798189929494999A9A9A999492928F8989898784817F7F7C
+7C7C79767674747474727272726C6C6C6C6E6E717272747474767C7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7C7C79767676767676767C7C7F818789898E8F8F9294949494949494949492929292929492
+9292928F8F8F8F92928F8E8E8C898989898989898989898989898989898989898989878787878787
+87878787878787898989898C8E8E8E8E8E8C89898987847F7C7C7C7F7F7F7F7F7F7F7F8184878787
+87898E92929292929294949494949494949494949494949494949494949494949492928F8C898987
+87847F7C797474727274747676767C92A4AEBCCCD4D3D3D3D1CCC4B9B1B1AEA9A9A6A6A4A4A39E9E
+9C9A9994949292928F8F8E8E8E8F8F8F928F8E8E8F92929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989
+89898987878785858585858585858585858585858585858585858585858585858584817F7F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7676767676
+7679797C7C7C7F7F8185858789898C8E8E92929292949494999A9A9A9C9C9E9E9E9EA1A4A4A6A6A6
+A9ABAEAEB1B1B1B3B6B7B9B9BBBBBBBBBEC0C1C1C1C1C4C6C6C6C6C8C9CCCCCCCCCCCCCFCFCFCFCF
+D1D1CFCFCFCFCFCFCFCFD1D1D1D1CFCFCFCFCFCFCFCFCFCFCFCFCCCCCCC8C8C8C8C8C6C6C6C6C6C6
+C6C6C4C1C1C1C1C1C1C0BEBEBEBEBEBBBBBBB9BBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B6B6
+B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B3B3B3B3B1B1B1B1B1B1B1B1B1AEAE
+B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEACABABAEAEAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9A9A9A9A9994949494949292928E898987847F7C79
+747472716C6C6A676661615F5C575D67747C818992949499999A969492928F8C89898787817F7F7F
+7C7C7C79767674747474727272726E6E6E6C6C6C717274747474767C7C7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7C7C7C79767679767676797C7F818787898C8F929294949494949494949492929292929292
+9292928F8E8E8E8F8F8F8E8E89898989898989898989898989898989898989898989898987878787
+8789898987878989898989898C8E8C8C8989898987857F7C7C7C7F7F7F7F7F7F7F7F7F8485858787
+898E9292929292929494949494949494949494949494949494949494949494949292928E89898787
+847F7C79747272727474767679748E9EAEB4C1CCD4D1D1D1CFCCC1B9B3B1AEA9A9A6A6A6A4A39E9E
+9C9A999494929292928F8F8E8E8F8F92928F8E8E8F92929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949492929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989
+8989898987878785858585858585858585858585858585858585858585858585858584817F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7976767676
+79767C7C7C7F7F7F8485858789898E8E8F929292949494999A9A9A9C9C9C9E9E9EA1A3A4A4A6A6A9
+A9ABAEAEB1B1B1B3B6B9B9B9B9BBBBBBBEC0C1C1C1C1C4C6C6C6C6C8C8CCC9C9C9CCCCCCCFCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCCCCCCC8C8C8C8C8C8C6C6C6C6C6C6
+C6C4C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B3B3B1B1B1B1B1B1B1B1AEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEABABABABAEABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9A9A9A9A9A96949494949492928E89898987817F7C
+767472726C6C6A6A676661615F5C595F6A747C858C929494949696949292928E8989898785817F7F
+7F7C7C7C7C797676747474747472727171716C6C6C727274747474767C7C7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7C7C7C797979767676797C7F7F848789898E929292929494949494949292929292929292
+929292928F8E8E8E8E8E8E8E8C898989898989898989898787898989898989898989898989898787
+8989898989898989898989898C89898989898787877F7C7C7C7F7F7F7F7F7F7F7F7F818585878789
+8E8F92929494949494949494949494949494949494949494949494949492929292928E8989878784
+7F7C7974726C74747476797C7C899CACB7B7C4D1D4CFCFCFCFCCC1B9B3B1AEABA9A6A6A6A4A49E9E
+9C9C9A969492929292928F8F8F8F8F9292928F8E8F92929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989
+8989898987878787858585858585858585858585858585858585858585858585858584817F7F7F7F
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7676767679
+7C7C7C7C7F7F7F8185858789898C8E8E8F9292949494949A9A9A9A9C9C9E9E9EA1A3A4A4A4A6A6A9
+A9AEAEAEB1B1B3B3B7B9B9B9B9BBBBBBBEC0C0C1C1C1C4C6C6C6C6C8C8C9C8C8C8C9CCCCCCCFCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCCCCC9C8C8C8C8C8C6C6C6C6C6C6C6
+C6C1C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B7B7B9B9B9B6B6B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEABABABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9A9A9A9A9A99949494949492928F8C898987857F7C
+79767472716C6C6A6A6761615F5F5C5C5F6C747F878F9292949494949492928F8C8989878784817F
+7F7F7F7C7C7C7976767474747474727272726E6C6C6E727274747474767C7C7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7C7C79797C797676797C7C7F818787898C8F9292929292949494929292929294929292
+929292928F8F8F8E8E8E8E8E8C898989898989898989878787878989898989898989898989898989
+89898989898989898989898C8C898989878787847F7C7C7C7C7F7F7F7F7F7F7F7F8184858787898E
+8F92929294949494949494949494949494949494949494949494949494929292928E89898787847F
+7C79746E6E747474767C7C7F819AA9B9BCBCC6D4D3CFCFCFCFC8C1B9B3B1AEABA9A6A6A6A4A4A19E
+9C9C9A99949492929292928F8F8F929292928F8E8F92929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989
+8989898989878787878585858585858585858585858585858585858585858585858584817F7F8181
+7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7676767B7C
+797C7C7C7F7F7F8485878789898E8E8F929292949494999A9A9A9A9C9C9E9EA1A3A4A4A4A6A6A6A9
+ABAEAEAEB1B1B3B6B7B9B9B9B9BBBBBBBBBEC0C1C1C1C1C6C6C6C6C6C8C8C8C8C8C9CCCCCCCCCFCF
+CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCCCCCCCCCCCCCCCCCCCCC9C8C6C6C6C6C6C6C6C6C4C4C4C4
+C4C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B7B7B7B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1AEB1B1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEABABABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9A9A9A9A99949494949492928F8E89898987817F
+7C767472726E6C6A6A676661615F5F5C5F616E767F898F92929294949492928F8C89898987858181
+7F7F7F7F7C7C7C7976747474747472727272726C6C6C71727274747476797C7C7C7F7F7F7F7F7F7F
+7F7F7F7F7F7C7C7C7C7C7C7976767C7C7F7F848789898E8F92929292929294929292929494949492
+9292929292928F8F8F8E8E8E8E898989898989898989878787878787898989898989898989898989
+89898C8C8C8C8C8C8C8C8C8C898989878785847F7C7C7C7C7F7F7F7F7F7F7F7F8184878787898C8E
+8F9292949494949494949494949999999999999994949494949494949292928F8E89898787847F7C
+79746C727474767C7C7F7F7C94A7B4C4C4BECCD9D3CFCCCCCCC8C1B9B3B1AEABA9A6A6A6A4A4A19E
+9E9C9C9A9494929292929292928F92929292928F8F92929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949292929492929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898989898989
+89898989898987878787858585858585858585858585858585858585858585858585858481818181
+81817F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7679797C7C
+7C7C7C7F7F7F8185858789898C8E8E8F929294949494999A9A9A9A9C9C9E9EA3A4A4A4A4A6A6A9A9
+ABAEAEB1B1B1B3B6B9B9B9B9B9BBBBBBBBBEC0C1C1C1C1C4C6C6C6C6C8C8C8C6C8C8CCCCCCCCCCCF
+CFCFCFCFCFCFCFCFCFCFCFCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8C6C6C6C6C6C6C6C6C4C4C4C4C4
+C4C1C1C1C0C0C0C0C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B7B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEB1B1AEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEABABABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9A9A9A9A99949494949492928F8E89898989857F
+7C79767472716C6C6A6A676666615F5F5F5F6A727C84898F929292949492928F8E8C898989878484
+81817F7F7F7C7C7B7676747474747472727272716C6C6C71727272727476797C7C7F7F7F7F7F7F7F
+7F7F7F7F7F7F7C7C7C7C7C7C79797C7C7F7F81858789898E8F929292929292929292949494949494
+949292929292929292928F8E8E8C898989898989898987878787878787878989898989898C8C8989
+89898C8E8E8E8E8E8E8E8E898989878784817F7C7C7C7C7F7F7F7F7F7F7F7F818485878789898E8F
+9292929494949494949494949499999A9A9A9A9A999494949494949492928F8E89898787817F7C79
+746C7274767B7C7F7F7F7692A1B1C1D1CCC4CCD9D1CCCCCCC9C6BEB9B3B1AEABA9A6A6A6A4A4A19E
+9E9C9C9A9994949292929292929292929292928F8F8F929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949292929494929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989
+89898989898989878787878585858585858585858585858585858585858585858585858584818184
+8481817F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797C797C7C
+7C7C7C7F7F818585878989898E8E8F92929294949494999A9A9A9C9C9E9EA1A4A4A4A4A4A6A6A9A9
+ABAEAEB1B1B1B3B6B9B9B9B9B9B9BBBBBBBEC0C0C1C1C1C4C6C6C6C6C8C6C6C6C8C8C9CCCCCCCCCC
+CFCFCFCFCFCFCFCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9C9C9C9C8C8C6C6C6C6C6C6C6C4C1C1C1C1C1
+C1C1C1C1C0C0C0C0C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B6B6B6B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEABABABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9994949494949292928E8C8989898784
+7F7C767472726E6C6A6A67666666615F5F5F616C747F85898E8F92929292928F8E8C898989878785
+8481817F7F7F7C7C797676747474747472727472716C6C6C71727272727476797C7C7F7F7F7F7F7F
+7F7F7F7F7F7F7F7C7C7C7C7C7C797C7C7F7F7F81878989898E8F9292929292929292949494949494
+9494949292929292929292928F8E8C8C8989898989898987878585878787878989898989898C8E8C
+8C8C8E8E8E8E8E8E8E8E8C8989878785817F7C7C7C7C7F7F7F7F7F7F7F7F818585878789898C8E8F
+929294949494949494949494999A9A9A9A9A9A9A999494949494949292928E8C898987817F7C7972
+6C7476797C7C7F7F81728F9CACBECED7D1CCD1D4D1CCC9C8C8C6BEB9B3B1AEABA9A9A6A6A4A4A19E
+9E9C9C9A9994949494929292929292929292928F8F92929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949492949494929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989
+89898989898989898787878785858585858585858585858585858585858585858585858585848484
+858481817F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C7F7F7F848587878989898E8F92929294949494969A9A9A9A9C9C9E9EA3A4A4A4A4A6A6A6A9AB
+AEAEAEB1B1B3B6B7B9B9B9B9B9B9BBBBBBBBC0C0C1C1C1C4C6C6C6C6C6C6C6C6C6C8C9C9C9C9CCCC
+CCCFCFCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8C8C8C8C8C6C6C6C6C6C6C6C4C1C1C1C1C1C1
+C1C1C1C0C0BEBEBEC0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B6B6B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEABABABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9994949494949292928F8E8C89898987
+817F7C767472726C6C6A6A6767676461615F616771767F87898E8F92929292928E8E8C8989898787
+858481817F7F7C7C7C797674767674747474747272716C6C6C6C727272747476797C7F7F7F7F7F81
+817F7F7F7F7F7F7C7C7C7C7C7C797C7C7F7F7F81858789898C8E8F92929292929294949494949494
+94949494949292929294949292928F8E8C89898989898987878787858787878789898989898C8E8E
+8E8E8E8E8E8E8E8E8E8C8989878787847F7C7C7C7C7F7F7F7F7F7F7F7F81858585878989898E8F92
+929294949494949494949494999A9A9A9A9A9A999694949494949492928E89898987847F7C797274
+74797C7C7C7F81846C899AA6B9C8D9DFD9D4D4D4CFCCC8C6C6C6BEB9B3B1AEAEA9A9A6A6A4A4A39E
+9E9E9C9C9A9694949494929292929292929292928F92929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292928F8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898989
+89898989898989898987878785858585858585858585858585858585858585858585858585858485
+85858481817FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7C7F7F818585878989898C8E9292929294949494999A9A9A9A9C9C9E9EA3A4A4A4A4A6A6A6A9AB
+AEAEAEB1B1B3B6B7B9B9B9B9B9BBBBBBBBBBBEC0C1C1C1C1C6C6C6C6C6C6C6C6C6C8C9C9C8C8C9CC
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8C8C6C6C6C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1
+C1C1C1C0BEBEBEBEBEBBBBBBB9B9B9BBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAB
+AEAEAEAEABABABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9994949494949492928F8E8C89898987
+847F7C79747472716C6C6A6767676661616161616A727C7F87898E8F929292928F8E8C8989898787
+878584817F7F7F7C7C797676767676747474747472726E6C6C6C6C727272747476797C7F7F7F7F81
+81817F7F7F7F7F7F7C7C7C7F7C7C7C7C7F7F7F8184878989898E8F92929292929294949494949494
+949494949494949294949494949292928F8E8C898989898987878787878787878989898989898E8E
+8E8E8E8E8E8E8E8E8C8989878785847F7C7C7C7C7F7F7F7F7F7F7F7F7F848585878789898F8F9292
+92949494949494949494949496999A999999999994949494949492928E89898987847F7C766C7476
+797C7C7C7F8185858797A4B1C4D7E6E4DFD9D9D4CFC9C6C6C6C6BEB9B3B1AEAEA9A9A9A6A4A4A39E
+9E9E9C9C9A9994949494949292929292929292929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292928F8F8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898989
+89898989898989898989878787858585858585858585858585858585858585858585858585858585
+858585848481FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7F7F81858587878989898E8F9292929294949494999A9A9A9C9C9C9EA1A4A4A4A4A4A6A6A9A9AB
+AEAEB1B1B1B3B6B9B9B9B9B9B9BBBBBBBBBBBEC0C1C1C1C1C4C6C6C6C6C6C6C6C6C8C8C8C8C8C8C9
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9C9C9C9C8C6C6C6C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1
+C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B7B7B9B9B9B6B6B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B1B1B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEB1B1AEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABAB
+ABAEAEAEABABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A99949494949492928F8F8E8C898989
+87817F7C767472726E6C6A6A6767676661616161676C747C7F87898C8E8F92928F8E8E8C89898987
+87878584817F7F7F7C7C797676767676747474747472726C6C6C6C6C7172727474767C7C7F7F7F81
+8181817F7F7F7F7F7F7C7F7F7C7C7C7F7F7F818184878789898C8F92929292929294949494949494
+94949494949494949494949494949292928E8E8C8C89898989898787878787878989898989898C8E
+8E8E8E8E8E8E8E8E8987878584817F7C7C7C7C7F7F7F7F7F7F7F7F7F818585878789898F92929292
+9294949494949494949494949499999999969494949494949492928E89898787847F7C7672747676
+7C7C7C7F8185858792A1AEBED1DFE9E6E1DCD9D4CFC8C6C6C4C1BBB9B6B1AEAEA9A9A9A6A6A4A39E
+9E9E9E9C9A9A94949494949494929292929292929292929292929292929292929292929292929292
+92929294949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949492929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292928F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+89898989898989898989898787878585858585858585858585858585858585858585858585858585
+858585858584FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7C7F7F848585878989898E8E9292929294949494969A9A9A9A9C9C9E9EA1A4A4A4A4A4A6A6A9A9AB
+AEAEB1B1B1B3B6B9B9B9B9B9B9BBBBBBBBBBBEC0C0C1C1C1C4C6C6C6C6C6C6C6C6C8C8C8C8C6C8C8
+C9CCCCCCCCCCCCCCCCCCC9C9C9C9C9C9C8C8C8C8C6C6C6C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1
+C1C1C0C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B7B7B7B7B7B6B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEB1AEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABAB
+ABABAEABABABABABABABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9994949494949292928F8E8C898989
+87857F7C79767472716C6C6A6A6A6A6761616161666771747C8187898C8E8F928F8E8E8E89898989
+87878784817F7F7F7C7C7C797676767674747474747472716C6C6A6C6C7172747474797C7F7F7F7F
+8184817F7F7F7F7F7F7F7F7F7F7C7C7F7F81818184878789898C8E8F929292929292949494949494
+94949494949494949494949494949494928F8F8E8E8C898989898987878787878789898989898989
+8C8E8E8E8E8E8E8989878481817F7F7F7C7C7F7F7F7F7F7F7F7F7F7F8485858789898F9292929292
+92929494949494949494949494949494949494949494949492928E89898787847F7C767476767C7C
+7C7F7F818485818F9CABB9C8D4DFE7E4DFD9D9D3CFC8C6C1C1C1BBB9B6B1B1AEA9A9A9A6A6A4A3A1
+9E9E9E9C9C9A99949494949494949292929292929292929292929292929292929292929292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949492929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292928F8F92928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989
+89898989898989898989898987878585858585858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7C
+7F7F848585878789898C8E8F9292929294949494999A9A9A9A9C9C9E9EA3A4A4A4A4A6A6A6A9ABAE
+AEAEB1B1B3B6B7B9B9B9B9B9B9BBBBBBBBBBBBC0C0C1C1C1C4C6C6C6C6C6C6C6C6C6C8C6C6C6C6C8
+C8C9CCCCCCCCC9C9C9C9C9C8C8C8C8C8C8C8C8C6C6C6C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C1
+C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEB1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABAB
+ABABABABABABABABABABABABABABABA9ABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9999949494949292928F8F8E8C8989
+8987847F7C767472726E6C6A6A6A6A676664616164676A72767C8189898C8E928F8E8E8E8C898989
+8787878584817F7F7F7C7C7B767979767674747674747272716C6C6A6C6C71727474767C7F7F7F7F
+818484817F7F7F7F7F7F7F7F7F7F7F7F7F8181848587878989898E8F929292929292949494949494
+9494949494949494949494949494949492928F8F8E8E8E8C89898989898787878787878989898989
+89898989898C8C898785817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8185858789898F929292929292
+9292949494949494949494949494949494949494949492928F8E89898787847F7C6A74767C7C7C7F
+7F818184857F8C9AA6B7C1C9D4E1E6E1DFD9D4D1CCC6C4C1C1C1BBB9B6B1B1AEABA9A9A6A6A4A4A1
+9E9E9E9C9C9A99999494949494949292929492929292929292929292929292929292949292929292
+92929494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292928F929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989
+89898989898989898989898987878585858585858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7F
+7F818585858789898C8E8E8F9292929294949494999A9A9A9C9C9C9E9EA4A4A4A4A4A6A6A6A9ABAE
+AEB1B1B1B3B6B7B9B9B9B9B9BBBBBBBBBBBBBBBEC0C1C1C1C1C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
+C8C8C9C9C9C9C8C8C8C8C8C8C8C8C8C8C8C8C6C6C6C6C4C4C4C4C4C4C4C4C1C1C1C0C0C0C0C0C0C0
+C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEB1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABAB
+ABABABABABABABABABABABABABABABA9A9ABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4
+A4A4A4A4A4A4A49E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9996949494929292928F8E8E8989
+898987817F7C767472726C6C6A6A6A6A676666666666676C72767F8489898C8F8F8E8E8E8E8C8989
+898787878481817F7F7F7C7C797979797676767676747472726E6C6A6A6C6C71727476797C7F7F7F
+81848481817F7F7F7F7F7F7F7F7F7F7F7F8184848587878989898C8F929292929292949494949494
+94949494949494949494949494949494949292928F8E8E8E8C898989898989878787878787878787
+878787898989878785817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8185858789898E92929292929292
+92929294949494949494949494949494949494929292928F8E89878785817F7974767C7C7C7F7F81
+818484847F8994A4B1BEC6CCD9E1E4DFDCD9D4CFCCC6C4C1C0BEBBB9B6B1B1AEABA9A9A9A6A4A4A3
+9E9E9E9E9C9C9A999994949494949492949494929292929292929292929292929294949292929292
+92949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+89898989898989898989898987878585858585858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7C7F
+7F858585858789898E8E8E9292929294949494949A9A9A9A9C9C9E9EA1A4A4A4A4A4A6A6A9A9ABAE
+AEB1B1B1B3B6B7B9B9B9B9B9BBBBBBBBBBBBBBBEC0C1C1C1C1C4C6C6C6C6C6C6C6C6C6C6C6C6C6C6
+C6C8C8C8C8C8C8C8C8C8C8C8C6C6C6C6C6C6C6C6C6C4C4C4C4C1C1C1C1C1C1C1C0C0C0C0C0C0C0C0
+C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B6B3B3B3B3B3B3B3B3B3B3B1B1
+B1B3B3B3B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEB1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABAB
+ABABABABABABABABABABABABABABA9A9A9A9ABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4
+A4A4A4A4A4A4A4A19E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9994949494929292928F8E8C89
+898987847F7C79747472716C6C6A6A6A6A676666666667676C74797F8789898E8E8F8E8E8E8C8989
+898987878784817F7F7F7C7C7C7C7C7C797676767676747472716C6C6A6C6C6C727474767C7C7F7F
+8181848481817F7F7F7F7F7F8181817F818485858587878789898C8E8F9292929292929494949494
+94949494949494949494949494949494929292928F8E8E8E8E8C8989898989878787878787878785
+858587878787858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8185858787898E8F92929292929292
+929292929292929292929292929292929292929292928F8C89878784817F7974797C7C7F7F7F8184
+8481817F8994A1ABB7C4CCCFD9E4E1DFD9D4D3CFC9C6C1C1C0BBBBB9B6B1B1AEABA9A9A9A6A4A4A3
+A19E9E9E9C9C9A999999969494949492949494929292929292929292929292929294949492929292
+92949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989
+89898989898989898989898987878785858585858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C7F7F
+818585858789898C8E8E8F9292929294949494999A9A9A9A9C9C9E9EA3A4A4A4A4A4A6A6A9A9AEAE
+AEB1B1B1B3B6B6B7B9B9B9B9BBBBBBBBBBBBBBBEC0C0C1C1C1C4C6C4C4C4C6C6C6C6C6C6C6C6C6C6
+C6C6C8C8C8C8C8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C1C1C1C1C1C1C1C1C1C1C1C0BEBEBEBEBEBEBE
+C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1
+B1B1B1B1B3B3B3B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEB1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABAB
+ABABABABABABABABABABABABABABA9A9A9A9A9ABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4
+A4A4A4A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9999949494949292928F8F8E8C
+89898987817F7C767472726E6C6A6A6A6A67676767676767676C747C7F87898C8E8E8E8E8E8E8C89
+89898787878584817F7F7F7C7C7C7C7C7C797676767674747472716C6C6A6C6C6C7274767C7C7F7F
+7F81818484817F7F7F7F7F818181848484858585858587878989898E8F9292929292929494949494
+94949494949494949494949494949492929292928F8E8E8E8E8C8989898989898787858484818181
+81818184848181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7F8184858787898C8E92929292928F8F8F
+8F92929292929292929292929292929292929292928F8C898787817F7F79767C7C7F7F7F7F7F8181
+817F7F8C99A1ABB4BECCCFCFD9E6E1DCD9D4D1CFC8C4C1C1C0BBBBB9B6B3B1AEABABA9A9A6A6A4A4
+A39E9E9E9E9C9A9A9A99999994949494949494949292929292929292929292929494949492929292
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949492929294929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989
+89898989898989898989898989878785858585858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7F7F7F
+848585878789898E8E8E8F9292929294949494999A9A9A9C9C9C9E9EA3A4A4A4A4A6A6A6A9ABAEAE
+AEB1B1B1B3B3B6B7B9B9B9B9BBBBBBBBBBBBBBBBC0C0C1C1C1C1C4C4C1C1C6C6C6C6C6C6C6C6C6C6
+C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C4C1C1C1C1C1C1C1C1C1C1C0BEBEBEBEBEBEBEBE
+BEBBBBBBB9B9B9B9B9B9B9B9B9B7B7B7B7B7B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABAB
+ABABABABABABABABABABABABABABA9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9994949494929292928F8E8C
+89898987857F7C79767472716C6C6A6A6A6A676767676767676A71747C848989898C8E8E8E8E8E8C
+8989898787878481817F7F7F7C7C7C7C7C797676767676747472726E6C6A6A6A6C6E7274767C7C7F
+7F7F81848584817F7F7F81818184848485858585858587878989898C8F9292929292929494949494
+94949494949494949494949494949292929292928F8E8E8E8E8E89898989898987878784817F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7F7F8485858789898E8F92928F8F8F8E8E8E
+8F929292929292929292929292929292928F8F8F8F8C898787817F7F76767C7F7F7F7F7F7F7F817F
+7F7C8999A1ABB4B9C6D3D4D1DCE4DFD9D4D3CFCCC6C1C1C1C0BBBBB9B7B3B1AEAEABA9A9A6A6A4A4
+A3A19E9E9E9C9C9A9A9A999994949494949494949292929492929292929292929494949494929292
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949492929494929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+89898989898989898989898989878787858585858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7F7F81
+8585878789898C8E8E8F9292929294949494949A9A9A9C9C9C9E9EA1A4A4A4A4A4A6A6A9A9ABAEAE
+B1B1B1B1B3B3B6B7B9B9B9B9BBBBB9B9BBBBBBBBBEC0C1C1C1C1C1C1C1C1C4C6C6C6C6C6C6C6C6C6
+C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C4C4C4C4C1C1C1C1C1C1C1C1C1C1C0BEBBBBBBBBBBBBBBBB
+BBBBBBB9B9B9B9B9B9B9B9B9B9B7B6B6B6B7B7B7B7B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1
+B1B1B1B1B1B1B1B1B1B1AEAEB1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABAB
+ABABABABABABABABABABABABABA9A9A9A6A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9996949494949292928F8F8E
+8C89898987847F7C76747272716C6A6A6A6A67676767676767676C72767F87898989898E8E8E8E8C
+898989898787878481817F7F7C7C7C7C7C7C797676767676747472726C6C6A6A6A6C7274767C7C7C
+7F7F7F818484817F7F8181818484858585858585858587878789898C8E8F8F929292929494949494
+9494949494949494949494949494929292929292928F8E8E8E8E8C89898989898787878584817F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7F7F8485858789898C8E8F8F8F8E8E8E8C8C8E
+8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E89898787817F7C76767C7F7F7F7F7F7F7F7F7F7C
+7C8999A1ABB4BCC1CED9D9D4DFE1DFD9D4D1CFCCC6C1C1C1BEBBBBB9B7B3B1AEAEABABA9A6A6A4A4
+A3A19E9E9E9C9C9A9A9A9A9999949494949494949492929494929292929292949494949494929294
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494929494949292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989
+89898989898989898989898989898787878585858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7F7F7F84
+8585878989898C8E8E8F9292929294949494999A9A9C9C9C9C9E9EA3A4A4A4A4A4A6A6A9A9ABAEAE
+AEB1B1B1B1B3B6B6B9B9B9B9BBB9B9B9B9BBBBBBBEC0C0C0C1C1C1C1C1C1C4C6C6C6C6C6C6C6C4C4
+C6C6C6C6C6C6C6C6C6C6C4C4C4C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C0C0BBBBBBBBBBBBBBBBBB
+BBBBB9B9B9B9B9B9B9B9B9B9B9B6B6B6B6B6B6B6B6B6B6B3B3B3B3B3B3B1B1B3B3B3B3B3B3B1B1B1
+B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABAEAEAEABABABABAB
+ABABABABABABABABABABABABABA9A9A9A6A6A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9994949494929292928F8E
+8E8C89898987817F7C767472726C6C6A6A6A6A6767676A676767676C747C7F87898989898E8E8E8E
+8C8989898787878584817F7F7F7C7C7C7C7C7C797676767674747472716C6C6A6A6A6C7274767C7C
+7C7F7F7F818484817F818184848585858585858585858587878989898E8E8F8F9292929294949494
+9494949494949494949494949492929292929292928F8E8E8E8E8C8989898989878787878481817F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818585878789898E8E8F8E8E8C898989898C
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8C8989898785817F7C76767C7F7F7F7F7F7F7F7F7C7C7F
+8999A4ABB4C1C4C9D7DFDCD9DFE1DCD9D3CFCFCCC6C1C1C1BEBBBBB9B7B3B1AEAEABABA9A9A6A6A4
+A4A39E9E9E9E9C9C9A9A9A9A99949494949494949492949494929292929294949494949494949294
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949492929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989
+89898989898989898989898989898987878785858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F8185
+8587898989898E8E8E9292929292949494999A9A9C9C9C9C9E9E9EA3A4A4A4A4A6A6A6A9ABAEAEAE
+AEB1B1B1B1B3B3B6B7B9B9B9B9B9B9B9B9BBBBBBBEC0C0C0C0C1C1C1C1C1C4C6C6C6C6C4C4C4C4C1
+C4C6C6C6C6C4C4C4C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C0BBBBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B6B6B6B6B6B6B6B3B3B3B3B3B1B1B1B1B1B1B3B3B3B1B1B1
+B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABAEAEABABABABAB
+ABABABABABABABABABABABABA9A9A9A6A6A6A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A999494949494929292928F
+8E8C89898987857F7C79767472716C6C6A6A6A6A67676A6A6767676A71747C81898989898C8E8E8E
+8E898989898787878584817F7F7F7C7C7C7C7C7B7676767676747472726E6C6C6C6C6C727476797C
+7C7F7F7F818181817F7F8184858585858585858585858587878989898C8C8E8E8F92929294949494
+949494949494949494949494929292929292929292928F8E8E8C898989898987878787858584817F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8485858789898C8E8E8E8C8989898989898C
+8E8E8E8E8E8E8E8C89898989898989898989878787857F7C7C76767C7F7F7F7F7F7F7F7C7C6E7F89
+94A3ACB4C1C8CED7DCE1DFDFE1DFD9D4D1CFCCC8C6C1C1C0BEBBBBB9B9B3B1AEAEAEABABA9A6A6A4
+A4A3A19E9E9E9C9C9C9C9A9A99969494949494949492949494949292929294949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949492929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989
+89898989898989898989898989898989878787858585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F8485
+87878989898C8E8E8F92929292949494999A9A9A9C9C9C9E9E9E9EA4A4A4A4A4A6A6A6A9ABAEAEAE
+AEB1B1B1B1B3B3B6B7B9B9B9B9B9B9B9B9BBBBBBBBBEBEBEC0C0C1C1C1C1C1C4C4C4C4C4C1C1C1C1
+C1C4C4C4C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C0C0C0BEBBBBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B6B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1
+AEB1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEACAEAEAEAEAEABABABABAEABABABABAB
+ABABABABABABABABABABABABA9A9A9A6A6A6A6A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A999494949494949292928F
+8F8E8C89898987817F7C767472726E6C6A6A6A6A67676A6A6A6767676A72767F87878989898E8E8E
+8E8C898989898787878481817F7F7C7C7C7C7C7C797676767676747472726C6C6C6C6C6C72747679
+7C7C7F7F7F8181817F7F81848585858585858585858585878787898989898C8E8E8F929294949494
+9492949494949494949494949292929292929292928F8F8E8C898989898989878787858585848181
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818585878789898E8E8C898989898989898989
+8C8E8E8E8E8E8E89898989898989898787878584847F7C7976767C7C7F7F7F7F7F7C7C79747F8994
+A3AEB7C1C9D1D7DEE4E6E1E1E1DFD9D4CFCCC9C6C1C1C1C0BBBBBBB9B9B3B1B1AEAEABABA9A6A6A6
+A4A4A19E9E9E9C9C9C9C9A9A9A999494949494949494949494949292929494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+89898989898989898989898989898989898787878585858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F818585
+87898989898E8E8E8F929292949494999A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A9A9ABAEAEAE
+AEAEB1B1B1B3B3B6B7B9B9B9B9B9B9B9B9BBBBBBBBBEBBBBBEC0C0C1C1C1C1C1C4C1C1C1C1C1C1C1
+C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C0C0C0C0C0C0C0C0C0C0C0C0C0BEBBBBBBBBBBBBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1
+AEAEAEB1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABAEAEAEAEAEAEAEABABAEAEAEABABABABABABABABABABAB
+ABABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9994949494949492929292
+8F8E8E8C8C898987817F7C767472726C6C6A6A6A6A67676A6A676767676C747C7F87878789898E8E
+8E8C898989898787878584817F7F7F7C7C7C7C7C7C797676767674747472716C6C6C6C6C72747676
+7C7C7C7F7F7F817F7F7F8184858585858585858585858585878787898989898C8E8F929292949494
+92929292949494949494949292929292929292928F8F8E8C8C898989898989878787858585858481
+817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858787898C8E8C89898989878787898989
+898C8E8E8E8E8C898989898989878787858481817F7C7674767C7C7F7F7F7F7C7C7C76798189929E
+AEB7C1CCD4D9E1E6ECE7E6E4E1DCD9D3CFCCC8C6C1C1C1C0BBBBBBB9B9B3B1B1AEAEAEABA9A9A6A6
+A4A4A39E9E9E9E9C9C9C9C9A9A999694949494949494949494949492929494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+89898989898989898989898989898989898987878787858585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F81858587
+898989898E8E8E8E929292949494949A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A9A9AEAEAEAE
+AEAEB1B1B1B3B3B6B6B7B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBC0C0C0C1C1C1C1C1C1C1C1C1C1C1
+C1C1C1C1C1C1C1C1C1C1C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0BEBBBBBBBBBBBBBBBBBBBBBBBB
+B9B9B9B9B7B7B7B7B7B7B9B9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1AE
+AEAEAEAEAEAEB1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABAEAEAEAEAEAEABABABAEAEABABABABABABABABABABAB
+ABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4
+A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9994949494949494929292
+928F8E8E8E8C8987847F7C79747472716C6C6A6A6A6767676A6A6767676A72747C81878787898C8E
+8E8C89898989898787858584817F7F7F7C7C7C7C7C7B7676767676747472726E6C6C6C6C6C727476
+797C7C7C7F7F7F7F7F7F81818585858585858585858585858787878789898989898E929292929292
+92929292929294949494929292928F8F9292928F8F8E8E8C89898989898989898787878585858584
+81817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818585878789898E8C8989898787878787878989
+898C8C8989898989898787878787878584817F7F7C7674767C7C7F7F7F7C7C7C76727C84899299A6
+B6C1C8D3D9DCE1E6E7E6E4E1DFD9D4CFCCC8C6C6C1C1C0C0BBBBBBB9B7B3B1B1AEAEAEABABA9A6A6
+A4A4A3A19E9E9E9C9C9C9C9A9A999994949494949494949494949492949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989
+89898989898989898989898989898989898989878787878585858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F85858587
+8989898C8E8E8E8F929294949494999A9A9A9A9C9C9E9E9E9E9EA4A4A4A4A4A6A6A6A9ABAEAEAEAE
+AEAEB1B1B3B3B3B3B6B7B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBEC0C0C0C1C1C1C1C1C1C1C1C1C1
+C1C1C1C1C1C0C0C0C0C0C0C0C0C0C0C0C0C0BEBEBEBEBEBEBEBEBEBBBBBBB9B9B9B9B9B9B9B9B9B9
+B9B9B9B7B6B6B6B6B7B7B7B7B6B3B3B3B3B3B3B1B1B1B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1AE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEACAEAEAEAEABABABABABABAEAEAEAEABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4
+A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9994949494949494949292
+928F8F8F8F8E898987817F7C767472726E6C6A6A6A6767676A6A6767676A6C74767F81878789898E
+8E8E8989898989878785858481817F7F7F7C7C7C7C7C797676767676747472726C6E6E6E6E727476
+76797C7C7C7F7F7F7F7F7F818485858585858585858585858587878787898989898C8F9292929292
+92929292929292929292929292928F8F8F8F928F8E8E8C8989898989898989878787878585858585
+8481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818487878989898C89898987878785878787898989
+898989898989898987878787878585847F7F7C767474767C7C7F7F7F7C7C7674747F878992949EB1
+BEC6CCD4DCDCE1E6E7E6E1E1DFD9D4CFCCC8C6C4C1C0C0C0BBBBBBB9B7B3B1B1AEAEAEABABA9A9A6
+A6A4A4A39E9E9E9E9C9C9C9C9A9A9994949494969494949494949492949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949492929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989
+89898989898989898989898989898989898989898787878785858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8485858789
+89898C8E8E8E8F92929294949494999A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A9A9ABAEAEAEAE
+AEB1B1B1B3B3B3B3B6B7B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBEC0BEC0C0C1C1C1C1C1C1C1C1C1
+C1C0C0C0C0C0C0C0C0C0C0BEBEBEBEBEBEBEBEBEBEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9
+B9B9B9B7B6B6B6B6B6B6B6B6B6B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1AEB1B1B1B1B1B1B1B1AE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEABABABAEAEABABABABABABABABAEAEABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4
+A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A96949494949494949292
+92928F8F8F8F8C898987817F7C767472716C6C6A6A676767676A6A6A6A6A6C72747C7F8187878989
+8E8E8989898989878787858584817F7F7F7C7C7C7C7C7C7976767676747474727271717171727476
+7676797C7C7C7F7F7F7F7F81848585858585858585858585858585878787878989898C8F8F8F8F8F
+8F8F8F929292929292928F8F928F8E8E8E8E8F8E8E8C898989898989898989878787858585858585
+858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F81848787898989898989898787858585878789898989
+8989898989898987878785848481817F7C7C767474767C7C7C7F7C7C79746E7681898F92949CA9B9
+C6C6CFD9DCDCE1E4E6E4E1DFDCD9D3CFCCC6C6C1C1C0C0BEBBBBBBB9B7B3B1B1AEAEAEAEABA9A9A6
+A6A4A4A3A19E9E9E9C9C9C9C9A9A9999949499999494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949492929292
+92929292929292929492929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89
+89898989898989898989898989898989898989898987878787858585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585878989
+89898E8E8E8F92929294949494949A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A9A9ABAEAEAEAE
+AEB1B1B1B3B3B3B3B6B6B9B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBEBEBBBEC0C0C1C1C1C1C1C1C0C0
+C0C0C0C0C0C0BEBEBEBEBEBEBEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B9B9B6B3B3B3B3B6B6B6B6B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEB1B1B1B1AEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEABABABABAEABABABABABABABABABAEABABABABABABABABABABABABABABABABAB
+ABABABABABA9ABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4
+A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A99949494949494949492
+92928F8F92928E8C8987847F7C79747472716C6C6A6A6767676A6A6A6A6A6C7174767C7F84878789
+8C8E8C8989898989878785858584817F7F7F7C7C7C7C7C7976767676767674747272727272727274
+767676797C7C7F7F7F7F7F818485858585858585858585858585858587878787878989898E8E8E8C
+8E8E8F8F8F8F8F8F8F8E8E8F8F8F8E8C8C8C8E8E8C89898989898989898987878785858585858585
+8584817F7F7F7F7C7C7C7C7C7C7F7F7F7F8184858789898989898987878785858587878989898989
+8989898989898987878784817F7F7F7C7C76746E767C7C7C7C7C797672727C858E9292999CA4B1BF
+CCCCD4DCDFDCE1E4E4E1DFDFD9D4D1CCC8C6C6C1C0C0BEBBBBBBB9B9B7B3B1B1B1AEAEAEABABA9A6
+A6A6A4A4A19E9E9E9E9C9C9C9A9A9A99999499999694949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494929292
+94929292929292949494929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292928F8E8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C
+89898989898989898989898989898989898989898989878787878585858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8585878989
+898C8E8E8F9292929294949494999A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A6A6A6A9ABAEAEAEAEAE
+AEB1B1B3B3B3B3B3B3B6B7B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBBBBBBBEC0C0C1C1C0C0C0C0C0
+C0C0BEBEBEBEBEBEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9
+B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEB1AEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABA9A9A9ABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4
+A4A4A4A4A3A39E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A99949494949494949492
+9292929292928F8E898987817F7C767472726C6C6A6A676767676A6A6A6A6C6C7274767C7F848787
+898C8C8989898989878785858484817F7F7F7F7C7C7C7C7C79767676767676747472727272727474
+767676767B7C7C7F7F7F7F7F81848585858585858585858585858585858587878787898989898989
+8C8C8E8E8E8E8E8C8C8C8C8E8E8E8C898989898C8989898989898989898987878785858585858585
+84817F7F7F7F7C7C7C7C7C7C7F7F7F7F818485878789898989898787858585858787878989898989
+89898989898987878784817F7F7F7C7C767272767C7C7C7C7C76726C747F87929494999CA1ABBCC6
+CFCFD9DFDFDCDFE4E1E1DFDCD9D4CFC9C8C6C1C1C0C0BEBBBBBBB9B9B7B3B3B1B1AEAEAEAEABA9A9
+A6A6A4A4A39E9E9E9E9C9C9C9C9A9A99999999999994949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494929294
+94949292929292949494929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292928F8F8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8C898989898989898989898989898989898989898989898987878785858585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8587898989
+898E8E8E929292929494949494999A9A9A9A9C9C9E9E9E9EA1A4A4A4A4A4A6A6A9A9ABAEAEAEAEAE
+AEB1B1B3B3B1B1B3B3B6B7B9B9B9B9B9B9B9B9BBBBB9B9BBBBBBBBBBBBBBBBBEBEC0C0C0C0C0C0BE
+BEBEBEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9
+B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEABABAEAEAEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABA9A9A9A9ABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4
+A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A99949494949494949494
+929292929292928F8C898987817C7B767472716C6C6A6A676767676A6A6A6A6C7174767C7F818587
+89898C8989898989878785848484817F7F7F7F7C7C7C7C7C7C797676797976767474747272727474
+76767676797C7C7F7F7F7F7F81848585858585858585858585858585858585878787878789898989
+8989898C89898989898989898C8C8C89898989898989898789898989898989878787858585858584
+817F7F7F7F7F7C7C7C7C7C7C7F7F7F81858585878989898989878785858585858787898989898989
+898989898987878784817F7F7F7C76747272767C7C7C7C76746C727C81899294999A9CA3A6B4C1D1
+D4D4D9E1DFDCDFE1E1DFDCD9D7D3CFC8C6C6C1C0C0C0BBBBBBBBB9B9B7B3B3B1B1AEAEAEAEABABA9
+A6A6A4A4A3A19E9E9E9C9C9C9C9A9A9A9A99999A9994949494999494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949292929294949494949292929492929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292928F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8C8989898989898989898989898989898989898989898989878787878585858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8587898989
+8C8E8E8F9292929294949494949A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A9A9ABAEAEAEAEAE
+B1B1B1B3B1B1B1B1B3B6B6B9B9B9B9B9B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBEBEC0C0BEBEBEBE
+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B7B9B9B9B9B9B9
+B9B9B6B3B3B1B1B1B1B1B1B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEABABABABAEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABA9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4
+A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A99949494949494949494
+94929292929292928E898987847F7C79747472716C6C6A676767676A6A6A6A6C6C7274767C7F8187
+87898C8C89898989878787848481817F7F7F7F7F7C7C7C7C7C79797979797C797676747474747474
+76767676797C7C7F7F7F7F7F81848585858585858585858585858585858585858587878787878789
+89898989898989898989898989898989898989898989878787878787878787878787858484848181
+7F7F7F7F7C7C7C7C7C7C7C7F7F7F8184858587878989898787878485858585878789898989898989
+898989898787878581817F7C7976747174767C7C7C7C746C71767F878C92999C9C9EA4A6AEBCC9D9
+D9D9DFE4E1DEDFE1DFDFDCD9D4D1CCC8C6C6C1C0C0BEBBBBBBBBB9B9B7B6B3B1B1AEAEAEAEABABA9
+A6A6A4A4A4A39E9E9E9E9C9C9C9C9A9A9A9A999A9999949496999494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949492929294949494949492949494929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292928F8F8F92928F8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8C89898989898989898989898989898989898989898989898787878785858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8789898989
+8E8E8E8F9292929294949494999A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A6A6A6A9A9ABABAEAEAEAE
+B1B1B1B1B1B1B1B1B3B3B6B7B9B9B9B7B9B9B9B9B9B9B9B9BBBBBBBBBBBBBBBBBBBEBEBEBBBBBBBB
+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB9B9B9B7B7B7B7B7B7B7B7B7B7B7B7
+B7B7B6B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEB1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABA9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A6A6A6A6A6A4A4A4A4A4A4A4
+A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A99949494949494949494
+94929292929292928F8E898987817F7C767472726E6C6A6A676767676A6A6A6A6C7174767C7F7F84
+8787898C8C89898989878784818181817F7F7F7F7C7C7C7C7C7C79797C7C7C7C7976767474747474
+74767676767C7C7C7F7F7F7F7F818585858585858585858585858585858585858585858787878787
+878989898989898787878989898989898987878789898787878787878787878787858481817F7F7F
+7F7F7C7C7C7C7C7C7C7C7F7F7F7F8485858787898989878785848484848587878989898989898989
+8989898787878584817F7C7974746E74797C7C7C76726C747C7F878E929A9C9EA1A4A6AEB7C4D1DF
+DFDFE1E4E1DFDFDFDFDCD9D9D3CFCCC6C6C4C1C0C0BEBBBBBBBBB9B9B7B6B3B1B1AEAEAEAEAEABA9
+A9A6A4A4A4A3A19E9E9E9C9C9C9C9A9A9A9A9A9A9A99949499999694949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949496949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949492929494949494949492949494949292929492929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292928F9292928F8F8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8C898989898989898989898989898989898989898989898987878787858585858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8789898989
+8E8E8E929292929494949494999A9A9A9A9C9C9E9E9E9E9EA4A4A4A4A4A6A6A6A9ABABABAEAEAEAE
+B1B1B1B1B1B1B1B1B3B3B6B7B9B7B7B6B9B9B9B9B9B9B9B9BBBBBBBBBBBBB9BBBBBBBBBBBBBBBBBB
+BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B6B6B6B6B6B6B6B6B6B6B6
+B6B6B6B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEB1AEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABAEAE
+AEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABA9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A6A6A6A6A4A4A4A4A4A4A4
+A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A969494949494949494
+9494929292929292928F8C8989857F7C79767472716C6C6A6A676767676A6A6A6A6C7274767C7F81
+858789898C8C8989898787848181817F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C79767674747474
+7476767676797C7C7F7F7F7F7F818485858585858585858585858585858585858585858585878787
+87878787898987878787878787898989878787878787878785858585858787878784817F7F7F7F7C
+7C7C7C7C7C7C7C7C7C7F7F7F7F818587878787878787878581818181848789898C8C8C8C89898989
+89898987878584817F7C7974746C74797C7979746C74797F848992949A9EA4A4A6ABAEB4BECCD9E4
+E4E1E6E6E1DFDFDFDCD9D9D4D1CFC8C6C6C1C1C0C0BEBBBBBBBBB9B9B7B6B3B1B1AEAEAEAEAEABAB
+A9A6A6A4A4A4A19E9E9E9E9C9C9C9C9C9A9A9A9A9A99969699999994949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949499949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949292929494929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8C8989898989898989898989898989898989898989898989878787878785858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF898989898C
+8E8E8F9292929294949494949A9A9A9A9C9C9E9E9E9E9EA1A4A4A4A4A4A6A6A9A9ABABABAEAEAEAE
+B1B1B1B1B1B1B1B1B3B3B6B7B7B6B6B6B7B9B9B9B9B9B9B9B9BBBBB9B9B9B9B9BBBBBBBBBBBBBBBB
+BBBBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B6B6B6B6B6B6B6B6B6B6
+B6B6B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEACAEAEAEAEAEAEAEAEAEABABABAB
+AEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABA9A9A9A6A6A6A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A6A6A4A4A4A4A4A4A4A4
+A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+949494929292929292928E898987847F7C76747472716C6C6A676767676A6A6A6A6C7274767C7C7F
+84878989898C8C898987878581817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7976767474
+7476767676797C7C7F7F7F7F7F818485858585858585858585858585858585858585858585858585
+878787878787878787878787878787878787878787878785848181848484848484817F7F7F7C7C7C
+7C7C7C7C7C7C7C7C7F7F7F7F8185878789878787878784817F7F7F848789898E8E8E8E8E8C898989
+898987878784817F7C7974726C74767676767472797F81878992999C9EA6A6A6A9AEB6BCC8D7E4E7
+E7E7E7E6E1DFDFDCD9D9D9D3CFCCC6C6C4C1C0BEC0BEBBBBBBB9B9B9B7B6B3B1B1B1AEAEAEAEAEAB
+A9A6A6A4A4A4A39E9E9E9E9C9C9C9C9C9C9C9A9A9A9A9999999A9996949494949494949494949494
+94949494949494949494949494949494949494949494969494949494949699969494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949492949494929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8C89898989898989898989898989898989898989898989898987878787858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8989898C8E
+8E8E8F9292929494949494999A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A9A9ABABABABAEAEAE
+B1B1B1B1B1B1B1B1B1B3B6B6B6B6B6B6B7B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9BBBBBBBBBBBBBB
+BBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABAEAEAEAEAEAEABABABABAB
+ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABA9A9A9A6A6A6A6A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A6A4A4A4A4A4A4A4A4
+A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+949494929292929292928F8C898987817F7C76747272716C6A6A676767676A6A6A6A6C7274767C7F
+81878789898C8C898987878584817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C79767676
+7676767676767C7C7C7F7F7F7F7F8185858585858585858585858585858585858585858585858585
+85858787878787878585858787878787878785848485858481817F7F7F7F7F7F7F7F7F7F7C7C7C7C
+7C7C7C7C7C7C7C7C7F7F818485878789878787878584817F7F7F848789898C8E8E8E8E8E8C898989
+89878787847F7F7C7674726C74767676746C767C7F858789929A9EA4A6A9ABACAEB6BCC4D1DFECEC
+ECECECE6E4E1DFD9D9D9D4D1CFCCC6C6C1C1BEBEBEBEBBBBBBB9B9B9B7B6B3B1B1B1AEAEAEAEAEAB
+A9A6A6A4A4A4A3A19E9E9E9C9C9C9C9C9C9C9C9A9A9A9999999A9999949494949494949494949494
+94949494949494949494949494949494949494949496999494949494949999999494949496949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292928F8E8E8E8F8F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989878787858585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89898C8E8E
+8E8F929292949494949494999A9A9A9A9C9C9E9E9E9E9EA4A4A4A4A4A6A6A6A9ABABABABABAEAEAE
+AEB1B1B1AEB1B1B1B1B3B3B6B6B3B3B6B7B9B9B9B7B7B9B9B9B9B9B9B9B9B9B9B9B9BBBBBBBBBBBB
+BBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3B3
+B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABAEAEAEAEABABABABAB
+ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA9A9ABAB
+ABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+94949494929292929292928E898987857F7C79767472726C6C6A67676767676A6A6A6C717476797F
+7F84878989898C898987878784817F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7F7C7C7C7C7976
+767676767979797C7C7F7F7F7F7F8184858585858585858585858585858585858585858585858585
+858585858587878585858585858485878784848181818181817F7F7F7F7F7F7F7F7F7C7C7C7C7C7C
+7C7C7C7C7C7F7F7F7F8185858587878787858585817F7F7C7F818789898C8E8E8E8E8E8E8E898989
+878787847F7C7C76746E727476767674747C7F8487898C929AA3A4A6ABAEAEB1B6BCC4CCD9E4EEEC
+ECECE7E6E1DFDCD9D9D4D4CFCCC8C6C4C1C1BBBBBEBBBBBBBBB9B9B9B7B6B3B1B1B1AEAEAEAEAEAB
+A9A9A6A4A4A4A4A39E9E9E9E9C9C9C9C9C9C9C9C9A9A9A99999A9A99949494949494949494949494
+94949494949494949494949494999694949494949499999694949494969999999994949499949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949492929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292928F8E8F8F8F8F8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989898787878585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89898E8E8E
+8F929292949494949494949A9A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A9A9ABABABABABAEAEAE
+AEB1AEAEAEAEB1B1B1B3B3B3B3B3B3B6B6B9B7B7B6B7B9B9B9B9B9B9B9B9B9B9B9B9B9BBBBBBB9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B1B1B1B1B1B1B1B1B1B1B1B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEB1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABAEAEAEAEAEAEABABABABABABABABAEAEABABABABAB
+ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA9A9A9AB
+ABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+94949494949292929292928F89898987847F7C79767474726C6C6A676767676A6A6A6A6C7274767C
+7F818787898989898989878784817F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7C7C7C79
+7676797979797C7C7C7F7F7F7F7F8184858585858585858585858585858585858585858585858585
+85858585858585858585858584818184848481817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7F7F7F7F8185858587878787858584817F7F7C7F81878989898E8E8E8E8E8E8E8C898989
+878785817F7C76726C727476767472797F8487898C8F92999EA6A9ACAEB1B1B6B9C1C6D3DEE7EEEC
+ECECE7E4E1DFD9D9D9D4D3CFCCC6C6C1C1C0BBBBBBBBBBBBBBB9B9B9B9B6B3B1B1B1AEAEAEAEAEAB
+A9A9A6A6A4A4A4A3A19E9E9E9C9C9C9C9C9C9C9C9C9A9A999A9A9A99999494949494949494969494
+9494949494949494949494949499999494949494999999999494949499999A9A9994949699999494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949492929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292929292928F8F8F928F8F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989898987878585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF898E8E8E8E
+92929294949494949494999A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A9A9ABABABABABABAEAE
+AEAEAEAEAEAEB1B1B1B1B3B3B3B3B3B3B6B7B6B6B6B7B9B9B9B9B9B9B9B9B9B7B9B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B1B1B1B1B1B1B1B1B1B1B1B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABACAEAEAEABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABABABABABABABA9A9ABABABABABABABABA9A9ABABABA9A9A9A9A9
+ABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+94949494949292929292928F8C89898987817F7C79767474716C6A67676767676A6A6A6A6C727479
+7F7F848789898989898987878584817F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7C7C7C
+7C7979797C7C7C7C7C7C7F7F7F7F7F81848585858585858585858585858585858585858585858585
+85858585858584818484848481817F8181817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7F7F7F7F8184858585878787878584817F7C7C7F7F848789898C8E8E8E8E8E8E8C89898987
+87847F7F7C74716C747476766E767F8487898E8F9292949EA6A9AEB1B1B6B9B9C1C6CFD4DFE9EEEC
+ECECE7E4E1DFD9D9D4D4D3CFC9C6C4C1C1C0BBBBBBBBBBBBBBB9B9B9B9B6B3B1B1B1AEAEAEAEAEAE
+A9A9A6A6A4A4A4A4A19E9E9E9E9C9C9C9C9C9C9C9C9A9A999A9A9A9A999494949494949494999494
+949494949494949494949494999999999494949499999A999994949699999A9A9999949999999494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292929292928F8F9292928F
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E898989898989898989898989898989898989898989898989898987878585858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C8E8E8E8F
+929292949494949494999A9A9A9A9A9C9C9E9E9E9E9EA4A4A4A4A4A6A6A6A9A9ABABABABABABAEAE
+AEAEAEAEAEAEB1B1B1B1B3B3B1B1B3B3B6B6B6B6B6B6B9B9B9B9B9B9B7B7B7B6B7B9B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B7B7B7B7B7B7B7B7B6B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEABAEAEAEAEAEAEAEAEABABABABABABABABAEABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABABABABABABABA9A9A9A9ABABABABABABA9A9A9ABABA9A9A9A9A9
+A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9694949494949494
+94949494949492929292928F8E89898987857F7F7C797674726C6C67676767676767676A6C717476
+7C7F81878789898989898787878481817F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7C
+7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F81818485858585858585858585858585858585858585858585
+858585858584818181818181817F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7F7F7F7F81848585858787878785817F7F7C7C7C7F818789898C8E8E8E8E8E8E8E8989898785
+817F7C7674716C74747676767F8487898F92929294999CA4A9AEB1B6B7B9BBBEC6CCD1D9E1ECEEEC
+ECECE6E1DFDCD9D9D4D3D1CFC8C6C1C1C0BBBBBBBBBBBBBBBBB9B9B9B9B6B3B1B1B1AEAEAEAEAEAE
+A9A9A6A6A4A4A4A4A39E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A999994949494949499999694
+94949494949494949494949499999A999494949999999A9A99949499999A9A9A9A99999999999994
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989898987878785858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8F92
+9292929494949494999A9A9A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A6A9A9ABABABABABABAEAE
+AEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B3B6B6B3B3B3B6B7B9B9B9B7B7B7B6B6B6B6B7B9B9B9B9B9B9
+B9B9B9B9B9B9B9B9B7B7B7B7B7B7B7B7B6B6B6B6B6B6B6B6B6B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEABABABABABAEAEAEAEABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABA9A9ABABABA9A9A9A9A9A9ABABABABA9A9A9A9A9ABA9A9A6A9A9
+A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3
+A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494
+9494949494949492929292928F8C89898987847F7F7C797674726C6A676767676767676A6A6C7274
+797F81858787898989898987878784817F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F
+7F7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F818184848585858585858585858585858585858585858484
+858585848481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C7F7F7F7F7F818585858787878784817F7F7C7C7C7F81878989898E8E8E8E8E8E8E8C8989878581
+7F7C76746E72747676727F8487898E92929294949A9CA3A9AEB1B7B9BBBEC0C4C9CFD4D9E4ECEEEC
+ECECE6E1DFDCD9D4D4D3CFCCC8C6C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B6B3B1B1B1AEAEAEAEAEAE
+ABA9A6A6A6A4A4A4A3A19E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9994949494949499999994
+94949494949494949494949999999A9999949499999A9A9A99999999999A9A9A9A9999999A9A9996
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989898989878787858585
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8F9292
+92929494949494999A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A9A9A9ABABABABABABAE
+AEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B3B3B3B3B3B3B6B7B7B7B7B6B6B6B6B6B3B3B6B7B9B9B9B9B9
+B9B9B9B7B7B7B7B7B7B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABAEAEAEAEAE
+AEAEAEAEAEAEABABABABABABABAEAEABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABA9A9A9ABABA9A9A9A9A9A9A9ABABABA9A9A9A9A9A9A9A9A6A6A9
+A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3
+A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494
+9494949494949492929292928F8E8C89898987817F7F7C797674726C6A676766666666676A6A6C72
+767C7F84878787898989898787878584817F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F8181817F7F
+7F7F7F7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F81818485858585858585858585858585858585848481
+8484848481817F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7F7F7F7F7F8184858585858785817F7F7C7C7C7C7F81858789898C8E8E8E8E8E8E8C898987857F7C
+7974746C72747676768187898C8F92949494949A9C9EA6AEB3B7B9BEC0C1C4C8CFD4D9DCE6F2ECEC
+ECE7E6E1DFD9D9D4D3D1CFCCC6C6C1C1BEBBBBBBBBBBBBBBB9B9B9B9B9B6B3B3B1B1AEAEAEAEAEAE
+ABA9A6A6A6A4A4A4A4A39E9E9E9E9C9C9C9E9E9C9C9C9A9A9A9A9A9A9A9996949494949999999994
+949494999494949494949499999A9A9A99949999999A9A9A9A9999999A9A9A9A9A9A99999A9A9A99
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949492929294929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989898989898989878787878785
+858585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8F9292
+929294949494999A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A6A6A6A6A9A9A9ABABABABABABAE
+AEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B3B3B3B1B1B3B6B7B6B6B6B6B6B3B3B3B3B3B3B6B7B9B9B9B7
+B7B7B7B7B6B6B6B6B6B6B6B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1
+B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABAEAE
+AEAEAEAEAEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABA9A9A9A9A9A9A9A9A6A6A9A9A9A9A9ABA9A9A6A9A9A9A9A9A6A6A6
+A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494
+9494949494949492929292928F8E8E8E8C898787847F7F7C7674726E6A67676666666666676A6C72
+74767C8185878789898989898787878481817F7F7F7C7C7C7C7C7C7C7C7C7C7C7F7F818181818181
+7F7F7F7F7F7C7F7F7F7F7F7F7F7F7F7F7F7F7F81848585858585858585858585858585858584817F
+81818181817F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F
+7F7F7F7F8184858585858584817F7F7C7C7C7C7F81858789898C8E8E8E8E8E8E8E898987847F7C76
+74746C747476767C8489898F92949499999A9A9C9EA6AEB3B9BBBEC1C1C6C6CCD3D9DCDFE7F1ECEC
+ECE7E4DFDCD9D7D4D3CFCFCCC6C4C1C1BEBBBBBBBBBBBBBBB9B9B9B9B9B7B3B3B1B1AEAEAEAEAEAE
+ABA9A6A6A6A6A4A4A4A3A19E9E9E9C9C9C9E9E9C9C9C9C9A9A9A9A9A9A9A999494949499999A9999
+949496999494949494949999999A9A9A999999999A9A9A9A9A9999999A9A9A9A9A9A999A9A9A9A99
+96949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949492929494949292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989898987878787
+878585858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E929292
+929494949494999A9A9A9A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A6A6A6A9A9ABABABABABABAE
+AEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B6B6B6B6B3B3B3B3B3B3B1B3B3B6B6B7B7B7
+B6B6B6B6B6B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1AEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABAB
+ABAEAEAEAEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA9AB
+ABABABABABABABABA9A9ABABABA9A9A9A9A9A9A9A9A6A6A6A9A9A9A9A9A9A9A6A6A9A9A9A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494
+9494949494949492929292928F8F8F8E8E89898787817F7C7C7674726C6A67676161616167676A6C
+72747C7F8487878789898989898787878481817F7F7C7C7C7C7C7C7C7C7C7C7C7C7F7F8181848484
+8181817F7F7F7F7F7F7F7F7F81817F7F7F7F7F81818585858585858585858585858585858584817F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C797676797C7C7C7C7C7F7F
+7F7F7F81848585858584817F7F7F7C7C7C7C7F8487878989898E8E8E8E8C8C89898987847F7C7974
+7471747476767F87898E929494999A9C9C9C9EA1A4A9B1B9BBC0C1C6C6C8CCD1D7DCE1E4ECF1ECEC
+ECE7E4DFDCD9D4D3D1CFCFCCC6C4C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B7B6B3B1B1AEAEAEAEAEAE
+ABA9A6A6A6A6A4A4A4A4A19E9E9E9E9C9C9E9E9C9C9C9C9A9A9A9A9A9A9A999694949699999A9A99
+9494999999949494949499999A9A9A9A9A9999999A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A
+99949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494929494949492929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989898989898989878787
+878785858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8F929292
+9294949494949A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A9A9ABABABABABABAE
+AEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B3B3B6B3B3B3B3B3B3B1B1B1B1B1B3B3B6B6B6B6
+B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABACAEAEAEAEAEAEAEAEAEAEABABABABABABABAB
+ABABABABAEABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA9A9
+A9ABABABABABABABA9A9A9A9ABA9A9A6A9A9A9A9A6A6A6A6A6A9A9A9A9A9A9A6A6A6A9A9A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494
+949494949494949292929292928F8F8F8F8E89898785817F7C797674726C6A676661616164676A6C
+7274767C7F85878787898989898787878584817F7F7F7C7C7C7C7C7C7C7C7C7C7C7F7F8184848485
+85848481817F7F7F7F7F81818181817F7F8181818484858585858585858585858585858585858481
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C79797C7C7C7C7C7C7F7F7F
+7F7F81848585848481817F7F7F7C7C7C7C7F8487878789898C8E8E8E8C8989898787817F7C797472
+72747676727F87898F9294999A9C9C9C9C9EA4A6A9B1B9BBC0C1C6C8CCCCCFD4D9E1E4E7ECF1ECEC
+ECE6E1DFD9D9D4D3CFCFCCC9C6C1C1C0BBBBBBBBBBBBBBBBB9B9B9B9B9B7B6B3B1B1AEAEAEAEAEAE
+ABA9A9A6A6A6A4A4A4A4A3A19E9E9E9C9E9E9E9E9C9C9C9C9A9A9A9A9A9A9999949499999A9A9A99
+9996999999949494949999999A9A9A9A9A99999A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A
+99969494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949492929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989898987
+878787878585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8F929292
+9294949494999A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABABAB
+AEAEAEAEAEAEAEAEB1B1AEAEAEB1B1B1B1B1B1B1B1B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B3B6B6B3
+B3B3B3B3B3B3B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABAEAEAEAEAEABABABABABABABABAB
+ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA9A9
+A9A9A9ABABABABA9A9A9A9A9A9A9A9A6A6A6A9A9A6A6A6A6A6A6A6A9A9A9A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494
+94949494949494929292929292928F8F928F8C89878784817F7C797474716C6A666161616166676A
+6E7274797F8185878787898989898787878584817F7F7F7C7C7C7C7C7C7C7C7C7C7F7F8184848587
+878785848481817F7F81818184848481818181848485858585858585858585858585858585858481
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F
+7F8184848481817F7F7F7F7F7C7C7C7C7F8487878789898C8E8E8E8C8989898787847F7C79767274
+747676747F878E9294999C9C9C9E9E9E9EA4A6A9AEB6BBC0C1C6C6CCCFCFD4D9DFE4E7ECF1F1ECEC
+ECE6E1DFD9D9D4D1CFCFCCC8C6C1C1C0BBBBBBBBBBBBBBBBB9B9B9B9B9B7B6B3B1B1B1AEAEAEAEAE
+ABA9A9A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A99949699999A9A9A9A
+99999999999994949499999A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A999494949499949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292928F8F8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989898989
+898787878787FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F92929292
+9494949494999A9A9A9A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A6A6A6A6A9ABABABABABABABAB
+AEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B3B3B3
+B3B3B3B3B3B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABAEABABABABABABABABAB
+ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA9ABABABABA9A9A9
+A9A9A9A9ABABABA9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A999994949494949494
+94949494949494949292929292928F9292928E89898787817F7F7C7674726E6A676461616161666A
+6C7274767C7F8184858789898989898787878481817F7F7C7C7C7C7C7C797C7C7C7F7F8184858787
+87878787878584818181818484858584818184858585858585858585858585858585858585858584
+817F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F
+7F8181817F7F7F7F7F7F7F7C7C7C7F7F818587878989898E8E8E8E8989898787857F7C7976727474
+76767C81898E9294999C9E9E9EA1A4A4A4A6A9AEB1B9BEC1C6C8CCCFD3D4D9DFE4E7ECEEF2F1ECEC
+E7E6E1DCD9D4D3CFCFCCCCC8C6C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B7B6B3B1B1B1AEAEAEAEAE
+ABA9A9A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A999999999A9A9A9A9A
+9999999A9A9994949999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A999994949699949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292928F8F8E8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989898989898989898989
+898989878787FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F92929292
+94949494949A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A9A9ABABABABABABABAB
+AEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B3B3
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA9A9A9ABABA9A9A6
+A9A9A9A9A9A9A9A9A9A6A6A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A99999994949494949494
+9494949494949494929292929292929292928F8C89898785817F7C7C7674726C6A67616161616167
+6A6C7274767C7F81848587898989898787878584817F7F7F7C7C7C7C79797C7C7C7F7F7F81858787
+87878787878785848184848485858585848485858585858585858585858585858585858585858584
+81817F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7C7C7C7F7F8185878989898C8C8E8E8E8C8989878787817C7C7674747676
+767C85898F9294999C9E9EA3A4A4A4A6A6A9AEB1B7BEC1C6C8CCCFD3D4D9DFE1E7ECECF2F2EEECEC
+E7E4DFDCD9D4D3CFCCCCC8C6C6C1C1BEBBBBBBBBBBBBBBB9B9B9B9B9B9B7B6B3B1B1B1AEAEAEAEAE
+ABA9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9999999A9A9A9A9A
+9A99999A9A99999499999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9994949999999494949496949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292928F8F8F8F928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989898989
+898989898787FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+94949494999A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A9A9ABABABABABABABAB
+ABAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1AEB1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEB1B1B1B1B1
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEABABABABABABABABABAB
+ABABABABABABAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABABABABABABABABABABABA9A9ABABABABABABABABA9A9A9A9A9A9A9A6
+A6A6A9A9A9A9A9A9A9A6A6A6A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A99999494949494949494
+949494949494949492929292929292929292928E8989898784817F7C7C7674726C6A666161616166
+676C717274797C7F81848787898989898787878584817F7F7C7C7C7C7979797C7C7C7F7F81848787
+87878789878787858484858785858585858585858585858585858585858585858585858585858585
+84817F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7C7C7C7C7C7F81858789898C8E8E8E8E8E8C8989898787817F7B767474767674
+7F878E929294999C9EA4A4A4A4A6A6A6A9AEB1B6B9C0C6C8CCCFD3D4D9DCE1E6ECECEEF2F2ECECE9
+E7E1DFD9D9D4D1CFCCC9C8C6C4C1C1BEBBBBBBBBBBBBBBB9B9B9B9B9B9B7B6B3B1B1B1AEAEAEAEAE
+ABA9A9A6A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9A9A9A9A9A9A9A99999A9A9A9A9A9A
+9A999A9A9A9A999699999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9999969999999694949499949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949492929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292928F8F9292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929294
+94949494999A9A9A9A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A6A6A6A6A9ABABABABABABABABAB
+ABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEB1B1B1B1B1
+B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABABABAB
+ABABABABABABABABABABABABABABAEAEAEABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABA9A9A9A9ABABABABABABABABABABA9A9A9A9ABABABABABA9A9A9A9A9A9A9A9A6
+A6A6A6A6A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A99969494949494949494
+949494949494949492929292929292929292928E898989878784817F7F7B7474716C6A6661616161
+666A6C7274767C7C7F818487898989898987878784817F7F7C7C7C7C7C76767C7C7C7F7F81848787
+87878989898787878785878787878585858787858585858585858585858585858585858585858585
+8481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7C7C7C7C7C7C7C7F81878789898E8E8E8E8E8E8E8989898787847F7974747476767681
+898F9294949A9C9EA4A6A6A6A6A6A9A9AEB1B3B9BEC1C6CCCFD1D4D9DCE1E4E7ECECEEF2EEECECE7
+E6E1DFD9D4D3CFCFCCC8C6C6C4C1C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B6B3B1B1B1AEAEAEAEAE
+AEA9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9C9A9A999A9A9A9A9A9A
+9A9A9A9A9A9A9999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9999999A9A9994949699969494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929294
+949494969A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A9A9ABABABABABABABABAB
+ABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEB1B1B1B1B1
+B1B1B1B1B1B1B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABAB
+ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA9A9ABABAB
+ABABABABABABABABA9A9A9A9A9A9ABABABABABABABABA9A9A9A9A9A9ABABABA9A9A6A9A9A9A9A6A6
+A6A6A6A6A6A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A969494949494949494
+949494949494949492929292929292929292928F8C898989878785817F7C797472716A6764616161
+61676A6C7274767C7C7F8185878989898987878784817F7F7C7C7C7C7C7976797C7C7F7F81848587
+87898989898987878787878787878785878787878785858585858585858585858585858585858585
+8584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7C7C7C7C7C7C7C7C7F81878789898C8E8E8E8E8E8E8C89898787857F7674747676767C8489
+929294999A9C9EA4A6A6A6A6A9A9ABAEB1B1B7BCC1C6CCCFD1D4D9DCDFE1E6E7ECECEEF2EEECE9E7
+E4E1DCD9D4D3CFCCCCC8C6C6C1C1C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B6B3B1B1B1AEAEAEAEAE
+AEA9A9A9A6A6A6A6A6A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9C9A9A999A9A9A9A9A9A
+9A9A9A9A9A9A9A99999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9999999A9A9996949999999494949496949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929494
+949494999A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A9A9ABABABABABABABABAB
+ABABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1
+B1B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABAB
+ABABABABABABABABABABABABABABA9ABABABABABABABABABABABABABABABABABABABABA9A9A9A9A9
+ABABABABABABABABA9A9A9A9A9A9A9A9A9ABABABABA9A9A9A9A9A9A9A9A9A9A9A9A6A6A6A9A9A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+949494949494949492929292929292929292928F8E89898989878787847F7C7674726C6A67616161
+6164676A6C7274767C7F7F81878789898989878785817F7F7C7C7C7C7C7976797C7C7F7F7F818587
+87898989898989878787878787878787878787878787878585858585858585858585858585858585
+858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7C7C7C7C7C7C7C7C7F81878789898C8E8E8E8E8E8E8C89898987857F7674747674747C878992
+94949A9C9C9EA4A6A9A9A9A9ABAEAEB1B1B7B9BEC4C9CFD1D4D9D9DFE1E1E6ECECECEEF2ECECE7E6
+E1DFD9D9D4D1CFCCC9C6C6C6C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B6B3B1B1B1AEAEAEAEAE
+AEABA9A9A9A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9C9C9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A999A9A9A9A99969999999994949499949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8989898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292949494
+949494999A9A9A9A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A6A6A6A6A9A9A9ABABABABABABABAB
+ABABAEAEAEAEABAEAEAEAEAEAEAEAEAEAEAEAEB1B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEB1B1B1B1
+B1AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABAB
+ABABABABABABABABABABABABABA9A9A9A9A9A9A9A9ABABABABABABABABABABABABABA9A9A9A9A9A9
+A9A9A9ABABABABA9A9A9A6A9A9A9A9A9A9A9A9ABABA9A9A6A6A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+949494949494949494929292929292929292928F8E8C89898989898787847F7C7674726C6A666161
+6161666A6C717274797C7F7F84878789898787878584817F7F7C7C7C7C7C76797C7C7F7F7F818487
+87898989898989898787878787898787878787898787878787878585858585858585858585858585
+85858481818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7C7C7C7C7C7C7C7C7F8487878989898E8E8E8E8E8E8E89898987847F7974747474798187899294
+999A9C9C9EA3A6A9AEAEAEAEAEB1B1B3B7B9BEC1C6CCCFD3D7D9DCDFE1E4E7ECECECEEF1ECE9E7E4
+E1DFD9D4D3CFCFCCC8C6C6C4C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B6B3B1B1B1AEAEAEAEAE
+AEABA9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9C9A9A9C9C9C9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9999999A9A9994949999999494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949492
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9294949494
+9494969A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A6A9A9A9ABABABABABABABAB
+ABABAEAEABABABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEB1AEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABAB
+ABABABABABABABABABABABABABA9A9A9A9A9A9A9A9A9A9A9A9ABABABABABABABABABA9A9A9A9A9A9
+A9A9A9A9A9A9ABA9A9A6A6A6A6A9A9A9A9A9A9A9A9A9A9A6A6A6A6A6A9A9A9A9A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+94949494949494949492929292929292929292928F8E8E8C8C8989898787817F7C7674716C6A6661
+616161666A6C727476797C7F81848789878787878784817F7F7C7C7C7C7C79797C7F7F7F7F818487
+87878989898989898989878789898987878789898989878787878787858585858585858585858585
+8585858484848484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7C7C7C7C7C7C7C7F7F8487878789898C8E8E8E8E8E8E8C898987847F7C747474747C87898E92949A
+9C9C9E9EA3A6A9AEAEAEAEAEB1B1B3B7B9BBC1C6CCCFD3D4D9DCDFE1E4E6E7ECECECEEEEECE7E6E4
+E1DED9D4D3CFCCC9C8C6C6C1C1C1BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B6B3B3B1B1AEAEAEAEAE
+AEABA9A9A9A9A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9C9A9C9C9C9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A99999A9A9999949999999694949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949492
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292928F8F8E8E8E8E8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494999A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A6A6A9A9ABABABA9A9ABABAB
+ABABABABABABABAEAEAEAEAEAEAEABABAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABA9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9ABABABABA9A9A9A6A6A6A9
+A9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A9A9A9A9A9A9A6A6A6A6A6A6A6A6A9A9A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A4A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999494949494949494
+94949494949494949492929292929292929292928F8E8F8E8E8C8C89898787817C7974726E6A6761
+61616161676A6C7274767C7C7F818787878787878784817F7F7C7C7C7C7C7C797C7F7F7F7F818485
+87878989898989898989898989898989898989898989898987878787878787878585858585858585
+858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C
+7C7C7C7C7C7C7F7F8185878789898C8E8E8E8E8C8C89898787817F76747474727F87899294999C9C
+9C9E9EA4A4A6AEB1B1B1B1B1B3B6B9B9BBC0C6C8CFD1D4D9D9DFE1E4E6E6ECECECECEEECECE7E4E1
+DFDCD9D4D1CFCCC8C6C6C6C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B7B3B3B1B1AEAEAEAEAE
+AEABABA9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A999A9A9A9A999999999A9994949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292928F8F8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494999A9A9A9A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9ABABAB
+ABABABABABABABABAEAEAEAEABABABABAEAEAEAEAEAEAEAEAEAEAEABABAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEAEAEAEAEAEAEAEABABABABABABABABABABABABABABABABABABABABABABABABABABABAB
+ABABABABABABABABABABABABA9A9A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A6A6A6A6A6
+A6A6A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A4A6A6A6A6A6A4A4A4A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9694949494949494
+94949494949494949492929292929292929292928F8F8F8F8F8E8E8E898987857F7C7674726C6A66
+6161616164676A6E7274767C7F7F8487878787878784817F7F7F7F7C7C7C7C7C7C7F7F7F7F7F8185
+87878989898989898989898989898989898989898989898989898987878787878787878785858585
+85858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C
+7C7C7C7C7C7F7F818487878989898E8E8E8E898989898787817C76747474717C878E92949A9C9C9E
+9EA3A4A6A6ABAEB1B1B1B1B3B6B9B9BBC0C1C6CCCFD3D4D9DCDFE1E6E7E7ECECECECEEECE7E6E4E1
+DFD9D4D4D1CFCCC8C6C6C4C1C1C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B7B6B3B1B1B1AEAEAEAE
+AEABABA9A9A9A6A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999A9A9999949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292929292929292929292929292929292929292929292929292929292
+92949292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292928F8F8E8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94999A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9ABAB
+ABABABABABABABABAEAEABABABABABABABAEAEAEAEAEAEAEABABABABABAEAEAEAEAEAEAEAEAEAEAE
+AEAEAEAEAEABABABABABABABABABABABABABA9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9
+A9A9A9A9A9A9A9A9ABABABABA9A9A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9A6A6A6A6A6
+A6A6A6A6A6A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A4A4A6A6A6A4A4A4A4A4A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494
+9494949494949494949292929292929292929292928F8F92928F8F8E8C898787847F7C7674726C6A
+6661616161666A6C717474797C7F818487878787878581817F7F7F7F7F7F7C7C7C7F7F7F7F818184
+87878789898989898989898989898989898989898989898989898989898987878787878787858585
+8585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C
+7C7C7C7C7F7F818487878789898C8E8E8E8C89898787847F7C74747474727C878E92999A9C9E9EA1
+A4A4A6A6A9AEB1B1B3B3B3B6B9BBBBC0C1C6C8CFD3D4D9DCDFE1E4E7E7ECECECECECEEECE7E6E1DF
+DCD9D4D3CFCCC9C6C6C6C1C1C1C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B7B6B3B1B1B1AEAEAEAE
+AEAEABABA9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A99949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292929292929292929292929292929292929292929292929292929292
+94949492929292949292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292928F8F8F92928F8F8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+94999A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9ABAB
+A9A9ABABABABABABABABABABABABABABABAEAEAEAEABABABABABA9A9A9ABAEAEAEAEAEAEAEAEAEAE
+ACABABABABABABABABABA9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9
+A9A9A9A9A9A9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A6A6A6A6A6A6A6A4A6A6A6A6A4
+A4A4A4A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A4A4A4A4A3A19E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494
+949494949494949494949292929292929292929292928F9292928F8F8E89898787817F797472716A
+676461616161666A6C7274767B7C7F81858787878585848181817F7F7F7F7C7C7C7F7F8181818184
+85878789898989898989898989898989898989898989898989898989898989898989898787878585
+858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C
+7C7C7F7F7F818485878789898C8E8E8E8C89898787817F7C74747474747C878F94999C9C9EA1A4A4
+A6A6A6A9ABAEB1B3B6B6B7B9BBBBC0C1C6C6CCD1D4D9D9DFE1E4E6E7ECECECECECECECECE7E4E1DF
+D9D9D4D1CFCCC8C6C6C4C1C1C1C0BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B1B1B1B1AEAEAE
+AEAEABABA9A9A9A6A6A6A6A6A4A4A4A4A19E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949292929292929292929292929292929292929292929292929292929292929292929292929294
+94949494929292949292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292928F929292928F8F8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949A9A9A9A9A9A9A9C9C9C9E9E9E9EA1A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A9A9A6A6A6A9A9A9A9
+A9A9A9ABABABABABABA9A9A9ABABABABABAEAEABABABABA9A9A9A9A9A9ABAEAEAEAEAEAEABABABAB
+ABABABABA9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9
+A9A9A9A9A9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A4A4A6A6A6A6A6A6A6A6A4A6A6A6A6A4A4A4A4A4A6A6A6A6A6A6A4A4A6A6A6A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1A3A4A4A3A19E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999994949494949494
+9494949494949494949492929292929292929292929292929292928F8E8E898987857F7C7674726C
+6A676161616161676A6C7274767C7F7F81848585858585848181817F7F7F7F7C7C7F7F8181848484
+85878789898989898989898989898989898989898989898989898989898989898989898787878585
+858585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C
+7F7F7F8181848587878989898E8E8E8E89898987817F7C74747472767F878E94999C9E9EA3A4A6A6
+A6A9A9ABAEB1B6B6B7B7B9BBBBC0C1C6C6CCCFD3D7D9DCDFE1E6E7ECECECECECECECECE7E6E1DFDC
+D9D9D4D1CFCCC8C6C6C1C1C1C1BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B1B1B1B1AEAEAE
+AEAEAEABABA9A9A9A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949492929292929292929292929292929292929292929292929292929292929292929292929294
+94949494929294949492929292949292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292928F8E8E8E8E8F8F8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C898989898989898989898989
+898989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+999A9A9A9A9A9A9A9C9C9E9E9E9E9EA3A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9
+A9A9A9ABABABABA9A9A9A9A9ABABABABABABABABA9A9A9A9A9A9A9A9A9ABAEAEABABABABABABABA9
+A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A4A4A4A6A6A6A6A6A6A6A4A4A4A6A6A4A4A4A4A4A4A6A6A6A6A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19EA1A3A4A3A19E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999694949494949494
+949494949494949494949292929292929292929292929292929292928F8E8C898787817F79767472
+6C6A6661616161666A6C717274797C7F7F8184858585858481818481817F7F7F7F7F7F8184848485
+87878787898989898989898989898989898989898989898989898989898989898989898987878785
+85858585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7F
+7F818484858587878789898C8E8E8E8C898987847F7C747474727C81858C92999C9EA3A4A4A6A6A6
+A9ABAEAEB1B3B7B9B9B9B9BBC0C1C6C6C9CFD1D4D9DCDFE1E4E7ECECECECECECECECECE7E4E1DFDC
+D9D4D3CFCFC9C6C6C6C1C1C1C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B1B1B1B1B1AEAE
+AEAEAEABABA9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949492929292929292929292929292929292929292929292929292929292929292929292929494
+94949494949494949494929294949492929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292928F8E8E8F8F8F8F8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C89898989898989898989
+8989898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+999A9A9A9A9A9A9C9C9C9E9E9E9E9EA3A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A9A9
+A6A9A9ABABA9A9A9A9A9A9A9ABABABABABABA9A9A9A9A9A9A9A9A6A9A9A9ABABABABABA9A9A9A9A9
+A9A9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A4A6A6A6A6A4A4A4A4A4A4A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9EA1A3A19E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494949494949494
+949494949494949494949292929292929292929292929292929292928F8F8E8C8987847F7C797472
+716A676664616161666A6C727476797C7F7F8184858585858484848481817F7F7F7F7F8484858587
+878787878989898989898989898989898C8989898989898989898989898989898989898987878785
+858585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7F7F
+8184858585878787898989898C8E8C898987847F7C767674767F84878992949C9EA4A4A6A6A6A9A9
+ABAEAEB1B3B6B9B9B9B9BBBEC1C6C6C9CFCFD4D9D9DFE1E4E6E7ECECECECECECECECECE6E4DFDFD9
+D9D4D3CFCCC8C6C6C4C1C1C0C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B1B1B1B1B1AEAE
+AEAEAEAEABA9A9A9A9A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494929292929492929292929292929292929292929292929292929294949292929292949494
+94949494949494949494949294949494929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292929292928F8F8F92928F8F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989
+89898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949496
+9A9A9A9A9A9A9A9C9C9E9E9E9E9EA1A3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A9A6A6
+A6A9A9A9A9A9A9A9A9A6A9A9A9ABABA9A9A9A9A9A9A9A9A6A6A6A6A6A9A9ABA9A9A9A9A9A9A9A9A9
+A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A6A6A6A6A6A6A6
+A6A6A4A4A6A6A6A4A4A4A4A4A4A4A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A4A3A19E9E9E9EA1A19E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494
+94949494949494949494929292929292929292929292929292929292928F8F8C898787817F7C7674
+726C6A676666616161676A6C7274767C7C7F81818485858585848485848181818181818485878787
+8787878789898989898989898989898C8E8C8C898989898989898989898989898989898989878787
+8585858585858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7F7F
+818585858587878989898989898C89898987817C7676747C7F87878992949C9EA4A6A6A6A9A9A9AB
+AEB1B1B3B6B9B9B9BBBEBEC1C4C6C9CCCFD3D7D9DEDFE1E4E6E7ECECECECECECECECE7E6E1DFDED9
+D9D4D1CFCCC8C6C6C1C1C1C0C0BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B1B1B1B1B1B1AE
+AEAEAEAEABABA9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9C9E9C9C9C9C9A9A9A9A
+9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949292949492929292929292929292929292929292929292929294949292929292949494
+94949494949494949494949494949494949292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292928F92929292928F8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989
+898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949499
+9A9A9A9A9A9A9A9C9C9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A9A9A9A9A9A6A6A6A6A9A9A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A9A9A9A9A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A6A6A6A6A6
+A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494
+9494949494949494949494929292929292929292929292929292929292928F8E898987847F7C7976
+74716C6A6767666161666A6C717274767C7F7F818485858585848585858481818481848587878787
+87878789898989898989898989898C8E8E8E8E8C8C89898989898989898989898989898989898787
+878585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7F7F81
+8485858587878989898989898C8C898987817C7674747F8787898C92949A9EA4A6A6A9A9A9ABABAE
+AEB1B3B6B9B9BBBBBEBEC1C1C6C8CCCFD3D4D9DCDFE1E1E4E7E9ECECECECECECECECE7E4E1DFDCD9
+D4D3CFCFC9C6C6C6C1C1C0C0BEBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B6B6B3B1B1B1B1B1B1AE
+AEAEAEAEAEABA9A9A9A9A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9C9C9E9E9C9C9C9A9A9A9A
+9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949292949494929292929292929292929292929292929292929494949492929294949494
+94949494949494949494949494949494949492929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292929292929292928F
+8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989898989
+8989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949499
+9A9A9A9A9A9A9C9C9C9E9E9E9E9E9EA1A3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A9A9A9A6A6A6A6A6A6A9A9A9A9A9A9A9A6A6A6A6A6A6A6A6A6A6A9A9A9A9A9A9A9A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A6A6A6A6A6A6A4A4A4A4A4A4A6A6A6
+A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1A1A3A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999994949494949494949494
+9494949494949494949494929292929292929292929292929292929292928F8E89898785817F7C79
+74726E6A676767646161666A6C727476797C7F7F8184858585858585858584848484858787878787
+878789898989898989898989898C8E8E8E8E8E8E8E8E8C8C89898989898989898989898989898787
+87858585858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7F7F8184
+85858587878789898989898C8C8989877F7C767476818789898F8F949A9CA4A6A9A9A9ABABAEAEAE
+B1B3B6B9B9BBBEBEBEC1C1C6C8CCCFD3D4D9D9DCDFE1E4E6E7ECECECECECECECECE7E6E1DFDCD9D9
+D4D3CFCCC8C6C6C6C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B6B3B3B1B1B1B1B1AE
+AEAEAEAEAEABABA9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9C9C9C9E9E9C9C9C9C9A9A9C
+9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949292929292929292929292929292929292949494949494929494949494
+94949494949494949494949494949494949492929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989898989
+89FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF949494999A
+9A9A9A9A9A9A9C9C9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A9A6A6A6A6A6A6A6A6A9A9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A9A9A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A4A6A6A6A6A6A6A6A6A4A4A4A4A4A4A6A6A6A4A4A4A4A4A4A4A4A6
+A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19EA1A3A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9E9E9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999694949494949494949494
+9494949494949494949492929292929292929292929292929292929292928F8E8C898787817F7C7C
+7674726C6A676767616166676A6C7274767C7C7F8181848585858585858585848485878787878787
+8989898989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8C898989898989898989898989878787
+858585858585858585848484817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C797C7C7C7C7F7F7F7F818485
+85858787878989898989898C898987817C79747F87898C8E929294999C9EA4A9A9ABABAEAEAEAEB1
+B1B6B9B9BBBBBEC0C1C1C6C6CCCFD1D4D7D9DCDFE1E1E4E6E7ECECECECECECE9E7E7E4E1DFDCD9D9
+D4D1CFCCC8C6C6C4C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B6B3B3B1B1B1B1B1AE
+AEAEAEAEAEABABA9A9A9A6A6A6A6A6A4A4A4A4A19E9E9E9E9E9E9E9E9E9C9E9E9E9C9C9C9C9A9A9C
+9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949292929292929292929292929292929294949494949494949494949494
+94949494949494949494949494949494949494929292929492929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92928F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF949494999A
+9A9A9A9A9A9A9C9C9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4
+A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A6A6A6A6A6A4A4A4A4A4A4A4A4A4A6A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9EA1A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9C9E9E9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494949494949494949494
+9494949494949494949292929292929292929292929292929292929292928F8E8C89898785817F7C
+797472716C6A6767666164676A6C717274767C7F7F81848485858585858585848587878787878789
+89898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E898989898989898989898987878785
+85858585858585848181817F7F7F7F7F7F7F7F7F7F7F7F7C7C797676797C7C7F7F7F818184848585
+858787878989898989898C898987817C79748787898E92929294999C9EA4A6A9ABAEAEAEAEAEB1B1
+B6B7B9B9BBBEC1C1C1C6C6C9CCCFD3D4D9D9DFDFE1E4E6E6E7ECECECECECECE7E7E6E1DFDCD9D9D4
+D3CFCFCCC6C6C6C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B1B1B1B1AE
+AEAEAEAEAEABABABA9A9A9A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9C9C9C
+9C9C9C9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949492929292929292929292929292929294949494949494949494949494
+94949494949494949494949494949494949494949292949494929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949A9A
+9A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9C9E9E9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494
+949494949494949492929292929292929292929292929292929292929292928F8C8989878784817F
+7C7674726E6A6767676464676A6A6C727476797C7F7F818485858585858585858787878787878989
+898989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989898989898787878585
+85858585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7C7B767676797C7C7C7F7F7F81848585858585
+8587878789898989898C8C8987847F7C7C8789898F92929494999C9EA3A6A9AEAEAEAEAEB1B1B1B3
+B7B9B9BBBEC1C1C1C6C6C8CCCFD1D4D9D9DCDFDFE1E4E6E7E7ECECECECECE7E7E7E4E1DFD9D9D9D4
+D3CFCCC8C6C6C6C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B1B1B1B1B1
+AEAEAEAEAEABABABA9A9A9A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C
+9C9C9C9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494949994949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494929292929292929292929292929494949494949494949494949494
+94949494949494949494949494949494949494949494949494949292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494999A9A
+9A9A9A9A9A9C9C9E9E9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A3A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C
+9C9C9C9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999996949494949494949494949494
+949494949494949492929292929292929292929292929292929292929292928F8E8989898787817F
+7F797472726C6A6767676666676A6C6C7274767C7C7F7F8184858585858585878787878787898989
+8989898989898989898C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989898989878787858585
+858585858484817F7F7F7F7F7F7F7F7F7F7C7C7C7C7676797C7C7C7C7F7F7F7F8184858585858585
+8587878787898989898C8987847F7C7F898C8E92929494949A9C9C9EA4A6ABAEAEAEB1B1B1B1B3B7
+B9B9BBBEC0C1C4C6C6C8CCCFCFD3D4D9DCDFDFE1E4E6E6E7ECECECECECE9E7E7E6E1DFDCD9D9D4D4
+D1CFCCC8C6C6C6C1C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B6B6B3B3B3B3B3B1B1B1B1
+AEAEAEAEAEABABABABA9A9A6A6A6A6A6A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C
+9C9C9C9A9A9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494999996949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949292929292929292929292949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949492929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8CFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494999A9A
+9A9A9A9A9A9C9C9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A4A4A4A6A6A6A6
+A6A6A6A6A4A6A6A6A6A6A6A6A6A6A6A6A4A4A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6
+A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A4A4A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A4A4A4A4A4A4A4A4A3A4A4A4A4A3A1A1A3A4A4A4A4
+A4A4A4A3A4A4A4A4A3A1A3A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C
+9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999994949494949494949494949494
+949494949494949292929292929292929292929292929292929292929292928F8E89898989878581
+7F7C767472716C6767676766676A6A6C717274797C7F7F8181848585858587878787878789898989
+8989898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898787878787878785858585
+8581818181817F7F7F7F7F7F7F7F7F7C7C7C79767676797C7C7F7F7F7F7F81818485858585858585
+8585878787898989898987817F7C7F89929292929494999A9C9C9EA4A6A9AEAEAEB1B1B1B1B3B6B9
+B9BBBEC0C1C1C6C6C8C9CCCFD1D4D9D9DCDFE1E1E4E6E7E7ECECECECECE7E7E6E6E1DFDCD9D9D4D3
+CFCFCCC6C6C6C4C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B1B1B1B1
+AEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999696999999949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949292929494929292929292949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8EFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94969A9A9A
+9A9A9A9A9C9C9C9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A6A6A6A6A4A4A4A4A4A6A6A6A6
+A6A6A4A4A4A6A6A6A6A6A6A6A6A6A4A4A4A4A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A6
+A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A6A6A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A3A4A4A4A4A4A4A4A4A4A3A4A4A4A4A3A1A1A3A3A4A4A4A4A4A3A1A3A4A4A4A39E9EA1A3A4A4A4
+A4A4A3A1A3A4A4A4A39EA1A3A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C
+9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999694949494949494949494949494
+949494949494929292929292929292929292929292929292929292929292928F8E8C898989898784
+817F797472726C6A6767676767676A6C6C7274767C7C7F7F81818485858587878787878989898989
+89898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898787878787878785858585
+84817F7F7F7F7F7F7F7F7F7F7F7F7C7C767676797C7C7C7C7F7F7F81818484858585858585858585
+85858587878787878787817F7C8189929494949494999A9C9C9EA3A6A9AEAEB1B1B1B1B3B3B6B9B9
+BBBBC0C1C1C6C6C6C9CCCFCFD3D4D9DCDFE1E1E4E6E6E7E7ECECECECE7E7E7E6E4E1DFD9D9D4D4D3
+CFCCC9C6C6C6C4C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1B1
+AEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A4A4A4A4A39E9E9E9EA19E9E9E9E9E9E9E9E9E9C9C9C9C
+9C9C9C9C9C9C9C9C9C9A9A9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999A99999494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949492929494949292929294949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949292929294929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8EFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94999A9A9A
+9A9A9A9A9C9C9E9E9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A6A6A4A4A4A4A4A4A4A6A6A6A6
+A4A4A4A4A4A6A6A6A6A6A6A4A4A4A4A4A4A4A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A4A4A4A4A4A4A4
+A4A3A3A4A4A4A4A4A4A4A4A1A3A4A4A4A39E9E9EA1A3A4A4A4A4A39EA1A3A3A3A19E9E9EA1A3A3A4
+A4A4A39EA1A3A4A3A19E9E9EA3A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C
+9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494949494949494949494949494
+949494949494929292929292929292929292929292929292929292929292928F8E8E8C8989898787
+817F7C767472716A6767676767676A6A6C6E7274797C7F7F7F818485858587878787898989898989
+898989898989898C8E8E8E8E8E8E8E8E8E8E8E8C898C8C8C89898989878787878585858585858584
+817F7F7F7F7F7F7F7F7F7F7F7C7C7C7676797C7C7C7F7F7F7F7F8184878787878785858585858585
+8585858787878787817F7F6C81899494949494999A9A9C9C9EA3A4A6ABAEB1B1B1B1B3B3B6B9B9BB
+BBC0C1C1C6C6C6C8CCCFCFD3D4D9D9DFDFE1E4E6E6E7E7E9ECECECE9E7E7E6E6E1DFDCD9D9D4D3D1
+CFCCC8C6C6C4C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1B1
+AEAEAEAEAEAEABABABA9A9A6A6A6A6A6A6A6A4A4A4A3A19E9E9EA1A19E9E9E9E9E9E9E9E9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9A9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999A9A999494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949292929494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949492929494949292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8EFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94999A9A9A
+9A9A9A9A9C9C9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A6A4A4
+A4A4A4A4A4A4A6A6A6A4A4A4A4A4A4A4A4A4A4A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A4A4A4A4A4A1A1A3A3A4A4A4A4A4
+A3A1A1A1A3A4A4A4A4A4A3A1A1A3A3A3A19E9E9E9EA1A3A3A4A3A19E9E9EA1A39E9E9E9E9E9EA1A3
+A4A3A19E9EA1A3A39E9E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C
+9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949494
+94949494949292929292929292929292929292929292929292929292929292928E8E8E8C89898987
+84817F797472726C6A6767676767676A6A6C7274767C7C7F7F7F8185858585878789898989898989
+8989898989898C8E8E8E8E8E8E8C8C8C8E8E8C898989898989898787878785858585858585858481
+7F7F7F7F7F7F7F7F7F7C7C7C7C7976797C7F7F7F7F7F7F7F81848787878787878785858585858585
+848484818181817F7F7C72818C9294999999999A9A9C9C9EA1A4A6A9AEAEB1B1B1B1B3B7B9B9BBBB
+C0C1C1C6C6C6C8CCCCCFD1D4D7D9DCDFE1E1E4E6E6E7E7ECE9E7E7E7E7E6E6E4E1DFDCD9D4D4D3D1
+CFCCC6C6C4C1C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1B1
+AEAEAEAEAEAEABABABABA9A6A6A6A6A6A6A6A4A4A4A4A39E9E9EA3A39E9E9E9E9E9E9E9E9E9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A999994949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949492929494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949492929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8EFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF999A9A9A9A
+9A9A9A9C9C9C9E9E9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A6A4A4A4A4A4A4A4A4A4A4A4A4A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A3A3A3A3A4A4A4A4A4A4A4A4A4A4A3A1A3A3A4A4A4A4A4A3A19E9EA1A3A3A4A4A4
+A39E9E9EA1A3A3A4A4A4A19E9E9EA1A39E9E9E9E9E9E9EA1A3A39E9E9E9E9EA19E9E9E9E9E9E9EA1
+A3A39E9E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C
+9A9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999996949494949494949494949494949494
+94949494929292929292929292929292929292929292929292929292929292928F8E8E8C89898987
+87817F7C7674726C6A6A6767676767676A6C6E7274797C7C7F7F8184858585878789898989898989
+89898989898C8E8E8E8E8E8E8C8989898C8C8989898989878787878787858585858585858584817F
+7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7F7F7F7F7F7F81818487878789898987878585858584848181
+81817F7F7C7C7C7C7C74818C92949A9A9A9A9A9C9C9C9E9EA4A6A6A9AEAEB1B1B1B3B6B9B9BBBBBE
+C1C1C4C6C6C8CCCCCFCFD3D4D9D9DFDFE1E4E4E6E6E7E7ECE7E7E7E7E6E6E4E1E1DFD9D9D4D4D3CF
+CFCCC6C6C4C1C1C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1B1
+AEAEAEAEAEAEABABABABA9A6A6A6A6A6A6A6A6A4A4A4A3A19EA1A3A3A19E9E9E9E9E9E9E9E9C9C9C
+9C9E9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9996949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8EFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF999A9A9A9A
+9A9A9A9C9C9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A4A4A4
+A4A4A4A4A4A4A4A39EA1A1A3A3A3A4A4A4A4A4A4A3A19E9EA1A3A3A4A4A4A19E9E9E9E9EA1A3A3A3
+A19E9E9E9E9EA1A3A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9EA1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E
+A1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9E9C9C9C9C9C9A
+9A9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999994949494949494949494949494949494
+94949494929292929292929292929292929292929292929292929292929292928F8E8E8E8C898987
+87847F7C797474726C6A6767676767676A6A6C7274767C7C7F7F8184858585878789898989898989
+898989898C8E8E8E8E8E8E8C89898989898989898987878785858585858585858484848181817F7F
+7F7F7F7F7F7F7C7C7C7C7C7C7C7C7F7F7F7F7F7F81848587878989898987878785858584817F7F7F
+7F7F7F7C7C7C7C7C79818992949A9C9C9C9C9C9C9C9E9EA4A6A6A9ABAEB1B1B1B3B6B7B9B9BBBEC1
+C1C4C6C6C8CCCCCFCFD1D4D9D9DCDFE1E1E4E4E6E7E7E7ECE7E7E7E7E6E4E1E1DFDCD9D9D4D3D1CF
+CCC9C6C6C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1B1
+AEAEAEAEAEAEABABABABA9A6A6A6A6A6A6A6A6A4A4A4A4A19EA1A3A4A39E9E9E9E9E9E9E9E9E9C9C
+9C9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8EFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9C9C9C9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A3A3A3A3A3A1A1A1A1A19E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A3A1A1A1A1A3A3A3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39EA1A1A3A3A3
+A4A4A4A4A4A4A3A19E9E9E9EA1A1A3A3A4A4A4A4A39E9E9E9E9EA1A1A3A3A19E9E9E9E9E9E9EA1A3
+9E9E9E9E9E9E9E9EA1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E9E9E9C9C9C9C9C9A
+9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494949494949494949494949494949494
+94949492929292929292929292929292929292929292929292929292929292928F8E8E8E8E898989
+8785817F7C7674726C6A6A6767676767676A6C717476797C7F7F8184858585878787898989898989
+8989898C8C8E8E8E8E8E8C89898989898989898987878785858585858585858584817F7F7F7F7F7F
+7F7F7F7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F8184878787878789898987878785858584817F7F7F7F
+7F7C7C7C7C7C7C7C81899294999C9C9C9C9C9C9C9E9EA4A4A6A6A9ABAEB1B1B1B3B6B9B9BBBEC0C1
+C4C6C6C8CCCCCFCFD1D3D4D9D9DCDFE1E1E4E6E6E7E7E9ECE7E7E7E7E4E1E1E1DFDCD9D4D4D3CFCF
+CCC8C6C6C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1B1
+AEAEAEAEAEAEABABABABA9A6A6A6A6A6A6A6A6A6A4A4A4A3A1A3A3A4A3A19E9E9E9E9E9E9E9E9C9C
+9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999494
+94949694949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949492
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8EFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9C9C9E9E9E9E9E9E9E9E9E9E9EA1A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3
+A3A3A3A3A1A1A19E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A19E9E9E9E9E9EA1A1A1A1A3A3A3A3A4A4A4A4A4A4A4A4A4A4A19E9E9E9E9EA1
+A1A3A3A3A4A4A39E9E9E9E9E9E9E9EA1A1A3A3A3A19E9E9E9E9E9E9EA1A19E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9E9C9C9C9C9C9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99969494949494949494949494949494949494
+949492929292929292929292929292929292929292929292929292929292928F8F8E8E8E8E898989
+8787817F7C797674716C6A6767676767676A6A6C7274797C7F7F7F81848585858787898989898989
+89898C8C8E8E8E8E8E8C89898989898787878787878787858585858585858484817F7F7F7F7F7F7F
+7F7F7C7C7C7C7C7C7C7F7F7F7F7F8181818487878787878789898989878785858584817F7F7F7F7F
+7F7C7C7C7C727C84898F949A9C9E9C9C9C9C9C9C9EA3A4A6A6A9ABAEAEB1B1B3B6B9B9BBBEC0C1C1
+C6C6C8C9CCCFCFD1D3D4D7D9DCDCDFE1E1E4E6E6E7E7ECECE7E7E7E6E4E1E1DFDFD9D9D4D4D1CFCF
+CCC8C6C4C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1B1
+AEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A3A1A3A4A4A4A19E9E9E9E9E9E9E9E9E9C
+9E9E9E9C9C9C9C9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9A9A9A9C9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999694
+94969994949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8EFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9C9C9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A1A1
+A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9EA1A1A1A3A3A3A3A4A4A4A4A3A19E9E9E9E9E9E
+9E9EA1A1A3A3A19E9E9E9E9E9E9E9E9E9E9EA1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A99999A9A9A9A9A9999949494949494949494949494949494949494
+9494929292929292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8C8989
+8787847F7F7C7674726C6A6A67676767676A6A6C7274767C7C7F7F81848585858787898989898989
+89898C8C8E8E8E8E8C8C898989898787878787878787858585858481818181817F7F7F7F7F7F7F7F
+7F7F7F7C7C7C7C7F7F7F7F81818484858787878989898989898989878785858584817F7F7F81817F
+7F7F7C7C797F87898F949A9C9C9E9C9C9C9C9C9EA1A4A4A6A9A9AEAEB1B1B1B3B7B9B9BBBEC1C1C6
+C6C8C9CCCCCFCFD3D4D4D9D9DCDFDFE1E1E4E6E6E7E7ECE9E7E7E7E6E1E1DFDFDCD9D7D4D3D1CFCC
+CCC6C6C4C1C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1B1
+AEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A4A3A3A4A4A4A3A19E9E9E9E9E9E9E9E9C
+9E9E9E9E9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9C9C9C9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9994
+94999999949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8EFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9EA1A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A3A3A4A4A4A4A4A4A4A4A4A4A3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A1A19E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3
+A3A3A3A4A4A4A4A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A1A1A3A3A3A19E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A99999A9A9A9A999996949494949494949494949494949494949494
+94929292929292929292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8C8989
+878785817F7C797474716C6A6A6A6A6A6A6A6A6C7174767C7C7F7F81848585858787878989898989
+898989898C8E8E8E8C898989898787878787878787858585858481817F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F818487878787878787898989898989898787878585858181818184848181
+7F7C6C7C8187898F949A9C9C9E9E9E9C9C9E9E9EA4A4A6A6A9ABAEAEB1B1B3B6B9B9BBBEC1C1C6C6
+C6C8CCCCCFCFD3D3D4D4D9DCDCDFE1E1E4E4E6E6E7E7ECE7E7E7E6E4E1E1DFDCD9D9D4D4D3CFCFCC
+CCC6C6C4C1C1C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1B1
+B1AEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A6A4A4A4A3A3A4A4A4A4A19E9E9E9E9E9E9E9E9E
+9E9E9E9E9C9C9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9A9A9A9A9C9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999
+99999999969494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949292929292949292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292928F8F8E8E8E8EFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A4A4A3A3A3A4A4A4A4A4A4A4A3A3A4A4A4A4A4A4A4A4
+A4A3A3A1A3A4A4A4A4A4A4A4A3A3A3A19EA1A4A4A4A4A4A4A4A4A4A3A3A3A1A19E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A1A1A1A1A19E9E9E9E9E9E9E9E9E9E9E9E9EA1A1
+A1A1A1A1A1A1A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA19E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9E9C9C9C9E9E9E9C9C9C9C9C9C9C9C9C9C9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A999996999A9A9A999994949494949494949494949494949494949494
+929292929292929292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8989
+878787847F7F7C7674726C6A6A6A6A6A6A6A6C6C717274797C7F7F7F818585858587878989898989
+8989898989898C8C898989898787878785858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F81858787878787878789898989898987878787858585858484848787848481
+7F617F8489898F949A9C9C9C9E9E9E9C9E9E9EA3A4A6A6A9ABAEAEB1B1B3B6B9B9B9BBC0C1C6C6C6
+C8C9CCCFCFD1D3D4D4D9D9DCDFDFE1E1E4E4E6E7E7E7ECE7E7E6E6E4E1DFDFDCD9D9D4D3D1CFCFCC
+C8C6C6C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B3B3B3B3B3B3B3B3B1B1
+B1AEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9C9E9E9E9E9C9C9C9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9A9A9A9C9C9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+99999A9A999494949494949494949494949494949494949494949494969494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949492929294949492929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292928F8F8EFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9EA1A3A3A19EA3A4A4A4A4A4A3A3A1A3A4A4A4A4A4A4A3A3
+A1A19E9EA1A3A4A4A4A4A3A3A19E9E9E9E9EA3A4A4A4A4A4A3A3A1A19E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9C9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E9E9C9C9C9C9C9E9C9C9C9C9C9A9C9C9C9C9C9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9999969496999A99999494949494949494949494949494949494949494
+929292929292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8989
+89878785817F7C7974726E6C6A6A6A6A6A6A6C6C717274767C7C7F7F818485858587878989898989
+89898989898989898989898787878785858585858585858481817F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F81848787878989898989898989898787878787878585858585858787878785847F
+7C8587898C9294999A9C9C9C9E9E9E9E9EA1A4A4A4A6A9A9AEAEAEB1B1B3B7B9B9BBBBC1C1C6C6C8
+C9CCCCCFCFD3D4D4D9D9D9DEDFDFE1E1E4E6E6E7E7E9ECE7E7E6E4E1E1DFDCD9D9D4D4D3CFCFCCCC
+C8C6C6C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1
+B1AEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E
+9E9E9E9E9E9C9E9E9E9E9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9A9A
+9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+999A9A9A999994949494949494949494949494949494949494949494999994949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494929494949494929292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9EA1A19E9E9EA1A4A4A4A3A3A19E9EA1A4A4A4A4A3A3A19E
+9E9E9E9E9EA3A4A3A3A1A19E9E9E9E9E9E9EA1A4A3A3A3A1A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9C9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9E9E9E9E
+9C9C9E9E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E9E9E9E9E9E9E9C9E9E9E
+9E9E9C9C9E9E9E9E9E9E9E9E9E9C9C9C9C9C9E9C9C9C9C9C9C9C9C9C9C9A9A9A9C9C9C9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9999949494969999969494949494949494949494949494949494949492
+9292929292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8C89
+89878787847F7C7C7674726C6C6A6A6A6A6A6C6C717274767C7C7F7F818485858587878989898989
+898989898989878787878787878785858585848484848481817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F81818485878789898989898989898989878787858585858585858587878787878784747F
+87898C8E9294999A9C9C9C9E9E9E9E9EA3A4A4A4A6A6A9ABAEAEB1B1B3B6B9B9BBBBC0C1C6C6C6C8
+CCCCCFCFD1D4D4D9D9D9DCDFDFE1E1E1E4E6E6E7E7E7E7E7E6E6E4E1DFDFDCD9D9D4D4D1CFCFCCC9
+C6C6C4C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1
+B1AEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9A
+9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+999A9A9A9A9994949494949494949494949494949994949494949499999994949494969494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949292929292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA1A3A3A3A19E9E9E9E9EA3A4A3A3A19E9E9E
+9E9E9E9E9EA1A3A19E9E9E9E9E9E9E9E9E9EA1A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9C9C9E9E9E9E9E9E9E9E9C9C9C9C9E9E9E9E9E9E
+9C9C9C9C9E9E9E9E9E9E9C9C9C9C9E9E9E9E9E9E9C9C9E9E9E9C9C9C9C9C9E9E9E9E9E9E9C9C9E9E
+9E9C9C9C9C9C9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9C9C9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A999994949494949999949494949494949494949494949494949494949292
+92929292929292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8C89
+8989878785817F7C767472716C6A6A6A6A6A6A6C71727476797C7F7F818485858587878789898989
+8989898987878787878787878785858585848181818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F81818484858787878989898C8C8C8C898989898787858585858585878787878789878785798489
+8F8F929294949A9C9C9C9C9E9E9E9EA4A4A4A6A6A6A9ABAEAEB1B1B3B6B7B9B9BBBBC1C1C6C6C8C9
+CCCCCFCFD3D4D9D9D9DCDFDFDFE1E1E4E4E6E6E6E7E7E7E6E6E4E1E1DFDCD9D9D7D4D3D1CFCCCCC8
+C6C6C4C1C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1
+B1AEAEAEAEAEAEABABABABA9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9A9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9999949494949494949494949494969994949494949499999999949494999994949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949492929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA3A19E9E9E9E9E9E9EA3A3A19E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9E
+9E9E9C9C9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C9E9E9E9C
+9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9E9E9E9E9C9C9C9C9C9E9C9C9C9C9C9C9C9E9E9E9C9C9C9C9E
+9E9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A999694949494949494949494949494949494949494949494949494949292
+929292929292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8C89
+8989898787817F7C7C7674726C6C6A6A6A6A6A6C6E727474797C7F7F7F8184858585878789898989
+898989878787878585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+81848585858587878989898C8C8C898989898987878785858587878787878989898787877987898F
+9292949494999A9C9C9E9E9E9E9EA3A4A6A6A6A6A6A9ABAEAEB1B1B3B7B9B9BBBBC0C1C4C6C6C8CC
+CCCFCFD1D3D4D9D9DCDCDFDFE1E1E1E4E4E6E6E6E6E7E6E6E4E4E1E1DFDCD9D9D4D4D3CFCFCCCCC8
+C6C6C4C1C1C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1B1
+B1AEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9A9C9C9C9C9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A999994949494969494949494949999999494949499999A9A99999499999996949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA19E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E
+9E9E9C9C9C9C9C9C9C9C9C9C9C9C9E9C9C9C9C9C9C9C9C9C9C9C9C9E9E9C9C9C9C9C9C9C9C9C9E9C
+9C9C9C9C9C9C9C9C9E9C9C9C9C9C9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9E9C9C9C9C9C
+9C9C9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A999A9A9A9A9A99999494949494949494949494949494949494949494949494949494929292
+929292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8C8C89
+8989898987847F7F7C797674726C6C6A6A6A6A6C6C727476767C7C7F7F8184858585878787898989
+8989878787878585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81
+81858585858787898989898989898989898987878785858587878787898989898987847B87898F92
+94949496999A9C9E9E9E9E9E9EA1A4A4A6A6A6A6A9ABAEAEB1B1B3B6B9B9BBBBC0C1C1C6C6C8CCCC
+CFCFCFD3D4D9D9D9DCDCDFDFE1E1E1E4E6E6E6E6E6E6E6E4E4E1E1DFDFD9D9D9D4D3D1CFCFCCC9C6
+C6C6C4C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B1
+B1AEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9A9C9C9C9C9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9994949499999494949494969999999994949699999A9A9A999699999A99949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949292929292929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9E9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9E9E9C9C9C9C9A9A9A9C9C9C9A9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9999999A9A9A9999949494949494949494949494949494949494949494949494949492929292
+9292929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8C8C8989
+898989898787817F7F7C767472716C6A6A6A676A6C727476767C7C7F7F8184858585878787878789
+89878787878585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81
+8485858587878789898989898989898989878787858585858787898989898989878176898C8F9494
+949499999A9C9C9E9E9E9EA1A1A4A4A6A6A6A6A9A9AEAEB1B1B3B6B7B9B9BBBEC1C1C4C6C8C9CCCC
+CFCFD1D3D4D9D9D9DCDFDFDFE1E1E1E4E6E6E4E4E6E6E4E4E1E1E1DFDCD9D9D4D4D3CFCFCCCCC9C6
+C6C6C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1
+B1AEAEAEAEAEAEABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A39E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9A9C9C9C9C9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A999994949999999494949499999A9A99949499999A9A9A9A9A99999A9A99999494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9C9C9C9E9C9C9C9A9A9A9A9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9A9A9A9A9C9C9C9C9C9C9C9C9C9C9A9A9A9A9C9C9C9C9C9C9C9C9C9C9A9A9C9C9C9C9C9C
+9C9C9A9A9C9C9C9C9C9C9C9C9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9A9C9C9C9C9C9C9C9C9C9C9A9A9A9A9C9A9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A99999696999A9A9999949494949494949494949494949494949494949494949494949292929292
+92929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8C8C898989
+898989898787847F7F7C7C7674726C6C6A6A676A6C717476797C7C7F7F7F81858585858587878787
+878787878585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184
+85858587878789898989898989898989878787858585858787898989898787877F76878F92949494
+99999A9A9C9C9E9E9E9EA1A3A4A4A6A6A6A9A9A9ABAEAEB1B1B3B6B9B9BBBEC1C1C4C6C6C8CCCCCF
+CFCFD1D3D4D9D9D9DCDFDFDFE1E1E4E4E6E6E4E4E6E4E4E1E1E1DFDFDCD9D9D4D4D1CFCFCCCCC8C6
+C6C4C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1
+B1AEAEAEAEAEAEABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9E9E9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A999699999A999694949999999A9A9A999699999A9A9A9A9A99999A9A9A999994
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C
+9C9C9C9C9A9A9A9A9A9A9A9A9C9C9C9C9C9A9A9A9A9A9A9A9A9C9C9C9C9C9C9A9A9A9A9A9C9C9C9C
+9C9A9A9A9A9A9C9C9C9C9C9A9A9A9A9C9C9C9C9C9C9A9A9C9C9C9C9A9A9A9A9C9C9C9C9C9C9A9A9C
+9C9C9C9A9A9A9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A999994949699999994949494949494949494949494949494949494949494949494949292929292
+929292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8C8C89898989
+89898987878785817F7F7C797674726C6A6A67676A6E7274767B7C7C7F7F81848585858585878787
+8787878585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485
+858587878789898989898989898989898787878787878787878989878787878174858F9494949699
+999A9A9C9C9E9E9EA1A3A3A4A4A4A6A9A9A9A9ABAEAEB1B1B3B6B9B9B9BBC0C1C4C6C6C8C9CCCFCF
+CFD1D3D4D4D9D9DCDCDFDFDFE1E1E4E4E6E6E4E4E4E4E1E1E1DFDFDCD9D9D7D4D3D1CFCCCCC9C8C6
+C6C4C1C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1
+B1AEAEAEAEAEAEABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A39E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9E9E9C9C9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9999999A9A99949499999A9A9A9A9999999A9A9A9A9A9A9A9A9A9A9A9A9996
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949492929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9C9C9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C
+9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C
+9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9A9A9A9A9A9A9A9C9C
+9A9A9A9A9A9A9A9A9C9C9A9A9A9A9A9A9A9C9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9C9C9C9C9A9A9A
+9C9C9A9A9A9A9A9A9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+99999494949496999694949494949494949494949494949494949494949494949494929292929292
+9292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8C8989898989
+8989878787878784817F7F7C7674726C6C6A6A676A6C727476797C7C7F7F81848485858585858585
+87878585858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81848585
+8585878789898989898989898989898987878787878789898787878787857F74848E94949499999A
+9A9A9C9C9C9EA1A3A3A4A4A4A4A6A6A9A9A9A9AEAEB1B1B1B6B7B9B9BBBEC1C1C6C6C8C8CCCCCFCF
+D1D3D3D4D9D9D9DCDCDFDFE1E1E1E4E4E6E6E4E1E4E1E1E1DFDFDFDCD9D9D4D4D3CFCFCCCCC8C8C6
+C6C4C1C1C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3B1
+B1B1AEAEAEAEAEABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9E9E9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A99999A9A9A999999999A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+94949494999494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494929292929292929292929292929292929292929292
+929292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C
+9C9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999999A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9A9A9A9A
+9A9A9A9A9A9A9A9A9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+99969494949494969494949494949494949494949494949494949494949494949492929292929292
+9292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+898989878787878581817F7C797674716C6A6A6A6A6C717274767C7C7F7F7F818184858585848184
+848485858585858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8184858585
+85878787898989898989898989898989898789898989898987878785817C74818C949499999A9A9A
+9A9C9C9C9EA1A3A4A4A4A4A4A6A6A9A9A9ABABAEAEB1B1B3B6B9B9BBBBC0C1C6C6C6C8CCCCCFCFCF
+D1D3D4D4D9D9D9DCDFDFDFE1E1E1E4E6E6E4E4E1E1E1E1DFDFDFDCD9D9D9D4D3D1CFCFCCC9C8C6C6
+C6C4C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B3B3B3B3B3B3B3B3B1
+B1B1AEAEAEAEAEABABABABABABA9A9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A39E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9E9E9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A999A9A9A9A9999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+99949496999994949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949492929292929292929292929292929292929292
+9292929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C
+9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9C9C9C9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A999999999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A99949699999999999A
+9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99
+99949494949494949494949494949494949494949494949494949494949494949492929292929292
+92929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+898989878787878784817F7C797674726C6A6A6A6A6A6E727476797C7F7F7F7F8181848484818181
+8181818184848484848484817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858585
+87878789898989898989898989898989898989898989898787847F7C7674818C9299999A9A9A9A9C
+9C9C9C9E9EA4A4A4A4A4A4A6A6A9A9ABABABAEAEB1B1B3B6B9B9B9BBBEC1C1C6C6C8C9CCCCCFCFD1
+D3D4D4D4D9D9D9DCDFDFDFE1E1E1E4E6E6E4E4E1E1E1DFDFDFDCD9D9D9D4D4D3CFCFCCCCC8C8C6C6
+C6C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1
+B1B1AEAEAEAEAEABABABABABABA9A9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E
+9C9C9C9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+99999499999996949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494929292929292929292929292929292929292
+92929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9E9E9E9E9E9C9C9C9C9C
+9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9996949494949699999999999999999A9A9A9A9A9A99969494949494969999
+9999999A9A9A9A9A9A9A9A9A9999999999999A9A9A9A9A9A9A9A999999999A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999A9A9A9A99999A9A9A9A9999
+94949494949494949494949494949494949494949494949494949494949494949292929292929292
+929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989
+898989878787858584817F7F7C767474716C6A6A6A6A6C727274767C7C7C7F7F7F7F818181817F7F
+7F7F7F7F818181818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81848585858587
+878789898989898989898989898989898989898989878785817F7C747681899294999A9A9A9C9C9C
+9C9C9E9EA3A4A4A4A4A4A6A6A6A9ABABABAEAEB1B1B1B3B7B9B9BBBBC0C1C4C6C6C8CCCCCFCFCFD3
+D3D4D4D9D9D9DCDCDFDFDFE1E1E4E4E6E6E4E1E1E1DFDFDFDCDCD9D9D9D4D4D1CFCFCCC9C8C6C6C6
+C4C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1
+B1B1AEAEAEAEAEACABABABABABABA9A9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A39E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9C9C9E9E9E9C9C9C9C9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A999699999A99949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949292929292949492929292929292929292
+92929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9E9E9E9E9C9C9C9C9C9C9C9C
+9C9A9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999999999999999999999A9A9A9A
+9A9A9A9A9A9A9A9A9A99949494949494949494949494969999999999999A99949494949494949494
+949699999999999A9A9A9A9A9994949496999999999A9A9A9A9A9994969999999A9A9A9A9A9A9A9A
+99999A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999999A9A999996999A9A9A9996
+94949494949494949494949494949494949494949494949494949494949494929292929292929292
+9292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989
+898989878787858585817F7F7C767474726C6A6A6A6A6C71727474797C7C7C7C7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181858585858787
+87898989898989898989898989898989878787878787847F7C76727981898F94999A9A9A9C9C9C9C
+9C9C9EA1A4A4A4A4A6A6A6A6A9A9ABAEAEAEAEB1B1B3B6B9B9BBBBBBC0C1C6C6C8CCCCCFCFCFD1D3
+D4D4D7D9D9D9DCDCDFDFE1E1E1E1E4E6E4E4E1E1DFDFDFDCDCD9D9D9D7D4D3D1CFCCCCC8C8C6C6C6
+C4C1C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1
+B1B1AEAEAEAEAEAEABABABABABABA9A9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A3A19E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9C9E9E9E9E9C9C9C9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A99999A9A9A999494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494929294949494929292929292929292
+929292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9C9C9C9C9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9E9E9C9C9C9C9C9C9C9C9A9A
+9A9A9A9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9999999999999999999999999999999999999999999999999999999999
+99999999999999999994949494949494949494949494949494949496969994949494949494949494
+949494949496999999999A9996949494949494969999999A9A9996949494949999999A9A9A9A9A9A
+999999999A9A9A9A9A9A9999999A9A9A9A9A9A9A999A9A9A9A9A9999999A9A9A9A9A9A9A999A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99969496999A99999496999A999994
+94949494949494949494949494949494949494949494949494949494949492929292929292929292
+92929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+89898989878785858584817F7C79767474716C6A6A6C6C7172747476797B7C7C7C7C7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818184858585858787
+878789898989898989898989898987878787878785817F7C74747C81898F92949A9A9A9C9C9C9C9C
+9E9E9EA3A4A4A6A6A6A6A6A6A9ABAEAEAEAEB1B1B3B6B9B9B9BBBBBEC1C1C6C6C9CCCCCFCFD1D3D4
+D4D4D9D9D9D9DCDEDFDFE1E1E1E1E4E4E4E1E1E1DFDFDFDCD9D9D9D9D4D4D3CFCFCCCCC8C6C6C6C6
+C4C1C1C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B1
+B1B1AEAEAEAEAEAEABABABABABABABA9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A19E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9E9E9E9C9C9C9C9E9C9C9C9C9A9A9A9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A999A9A9A9A999994949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949492929292929292
+9292929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9C9C9C9C9E9E9E9C9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A
+9A9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A99999999999999999996969494949494949494949494949494949494949494949494949494
+94949494949494969694949494949494949494949494949494949494949494949494949494949494
+949494949494949494969999949494949494949494949699999994949494949494969999999A9A99
+9694949999999A9A9A9999949999999A9A9A9A9A9999999A9A9996949999999A9A9A9A9A99999A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A99999494949699999494949499999494
+94949494949494949494949494949494949494949494949294949494949492929292929292929292
+92929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+89898989878785858584817F7C79767474726C6C6C6C6C71727474747676797C7C7C7C7C7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818485858585858587
+87878789898989898989898989878787858585847F7F7C76767C81898F92949A9A9A9A9C9C9C9E9E
+9E9E9EA3A4A4A6A6A6A6A6A9A9ABAEAEAEB1B1B1B3B7B9B9BBBBBEC0C1C4C6C8CCCCCFCFCFD1D3D4
+D4D4D9D9D9D9DCDFDFDFE1E1E1E1E4E4E1E1E1DFDFDFDCDCD9D9D9D9D4D3D1CFCFCCC9C6C6C6C6C6
+C4C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3
+B1B1AEAEAEAEAEAEABABABABABABABA9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A3A19E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9E9E9C9C9C9C9C9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9996949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494929292929292
+92929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9C9C9C9C9E9C9C9C9C9E9E9E9E9E9C9C9C9C9C9C9C9C9A9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999A9A9A9A9A9A9A9A9A9A9A9A9A999999
+99999999969494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494929292929294949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949499999999
+94949494949699999999949494949999999A9A999694999999999494949499999A9A9A9999999999
+9A9A9A9A9A9A999A9A9A9A9A99999A9A9A9A99999A9A9A9999949494949494949494949494969494
+94949494949494949494949494949494949494949494929292949494949292929292929292929292
+929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+89898989878785858584817F7F7C76747474726C6C6C6C72727474767676797C7C7C7C7C7C7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181818184848585858585858585
+878787898989898989898989898787858585857F7F7C79797C84898E92949A9A9A9A9A9C9C9E9E9E
+9E9EA1A4A4A6A6A6A6A6A6A9A9ABAEAEAEB1B1B3B6B9B9B9BBBBC0C1C1C6C6C8CCCFCFCFD1D3D3D4
+D4D9D9D9D9DCDCDFDFDFE1E1E1E1E4E4E1E1E1DFDFDEDCD9D9D9D9D4D4D3CFCFCFCCC8C6C6C6C6C6
+C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3
+B1B1AEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A19E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9C9C9C9C9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A99949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949492929292
+92929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9C9C9C9C9C9C9C9C9E9E9E9C9C9C9C9C9C9C9C9A9A9A9A9C9C9C9C9C9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999994999A9A9A9A9A9A9A9A9999999999999694
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949492929292929292929292929294949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949994
+94949494949494969996949494949494999999999494949499949494949494969999999994949499
+999A9A9A9A9A99999A9A9A999999999A9A999996999A9A9999949494949494949494949494949494
+94949494949494949494949494949494949494949494929292929494929292929292929292929292
+9292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C89898989
+89898989878787858585817F7F7C7B76747474726E6C6C7272747476767676797C7C7C7C7C7C7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818485858587878787878585858585
+858787878989898989898989878785858585817F7C7C7C7F84898C9294999A9A9A9A9C9C9C9E9E9E
+9EA1A3A4A4A6A6A6A6A9A9A9A9AEAEAEB1B1B3B6B7B9B9BBBBBEC0C1C1C6C6C8CCCFCFCFD1D3D4D4
+D4D9D9D9D9DCDCDFDFE1E1E1E1E1E4E1E1E1DFDFDFDCDCD9D9D9D9D4D3D1CFCFCFCCC8C6C6C6C6C4
+C1C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3
+B1B1AEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1
+9E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A999494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494929292
+929292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999969494949496999A9A9A999999999996949494949494
+94949494949494949494949494949494949494949494949494949494949492929292929292929292
+92929292929292949494949494949292929292929292929292929292929292929494949494949494
+94949494949292929494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949699949494949494949494949494949499999694949494
+99999A9A9A999999999A9A9996949999999994949699999994949494949494949494949494949494
+94949494949494949494949494949494949494949492929292929292929292929292929292929292
+92929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8989898989
+8989898989878785858584817F7F7C767474747472716C7272747476767676767C7C7C7C7C7C7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818184858787878787878787878785858585
+858787878989898989898987878785858584817F7F7F7F848789929494999A9A9A9A9C9C9E9E9EA1
+A3A3A4A4A4A6A6A9A9A9A9A9ABAEAEB1B1B1B3B7B9B9BBBBBEC0C1C1C4C6C6C9CCCFCFCFD1D3D4D4
+D4D9D9D9D9DCDEDFDFE1E1E1E1E1E4E1E1DFDFDFDCDCD9D9D9D9D4D4D3D1CFCFCCCCC8C6C6C6C4C4
+C1C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3
+B1B1AEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A1
+9E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A999994949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949492
+9292929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9C9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A99999996949494949494949499999999969494949494949494949494
+94949494949494949494949494949494949494949494949494949494949492929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292949494
+94949494929292929292929294949494949494949494929294949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494969494949494
+94949999999994949699999994949496999694949494999494949494949494949494949494949494
+94949494949494949494949494949494949494949292929292929292929292929292929292929292
+929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989898989
+8989898989878785858584817F7F7C7C76747474747272727474747476767676797C7C7C7C7C7C7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818487878787878787878989898987878785858585
+8787878989898989898987878787858584817F7F7F818487898F9294999A9A9A9A9C9C9C9E9EA1A3
+A4A4A4A4A6A6A6A9A9A9A9ABABAEAEB1B1B3B6B9B9BBBBBBC0C1C1C1C6C6C8CCCFCFCFD1D3D3D4D4
+D4D9D9D9D9DCDFDFDFE1E1E1E1E1E1E1E1DFDFDFDCD9D9D9D9D9D4D4D3CFCFCFCCC9C8C6C6C6C4C4
+C1C1C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B3B3B3B3B3B3B3B3
+B1B1B1AEAEAEAEAEAEABABABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3
+A19E9EA1A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9999949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94929292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9C9C9A9A9A9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A
+9A9A9A9A9A9A9A9A9A99999996949494949494949494949496949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949292929292929292929292
+929292929292929292929292929292929292929292929292928F8F92929292929292929292929292
+92949492929292929292929292929294949494949494929292929294949494949494949492949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949499999694949494999494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494929292929292929292929292929292929292929292
+929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989898989
+8989898989878785858584817F7F7F7C797674747474747474747676767679797C7C7C7C7C7C7C7C
+7F7F7F7F7F7F7F7F7F81818181818181818484878789898989898989898989898787878585858587
+87878989898989898989898787878784817F7F81848787898E929494999A9A9C9C9C9C9C9E9EA3A4
+A4A4A4A4A6A6A6A9A9ABABABAEAEB1B1B3B6B9B9B9BBBBBEC0C1C1C6C6C6C8CCCFCFCFD1D3D3D4D4
+D9D9D9D9DCDCDFDFDFE1E1E1E1E1E1E1DFDFDFDCDCD9D9D9D9D4D4D3D1CFCFCCCCC9C6C6C6C4C1C1
+C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B3B3B3B3B3B3B3B3
+B1B1B1AEAEAEAEAEAEACABABABABABA9A9A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A19E9EA1A3A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A99969494949496949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949292929292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999A
+9A9A9A9A9A9A99999996949494949494949494949494949494949494949494949492949494949494
+9494949494949494949494949494949494949494949492929292929292929292929292928F8F8F8F
+8F8F8F8F8F8F8F8F8F9292929292929292929292929292928F8F8F8F8F8F8F8F9292929292929292
+92929292929292929292929292929292929294949492929292929292929494949494949492929294
+94949494949492929494949494949494949494949494949494949494949494949494949494949494
+94949494969494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949492929494949494929292929292929292929292929292929292929292
+9292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+898989898987878785858584817F7F7C7C79767474747476767676767676797C7C7C7C7C7C7C7C7C
+7F7F7F7F7F7F7F7F8184848484848485858787878989898989898989898989878787858585878787
+878989898989898989898989878785817F7F81848789898E8F9294999A9A9C9C9C9C9C9E9EA1A4A4
+A4A4A4A6A6A6A9A9ABABAEAEAEB1B1B1B3B7B9B9BBBBBEC0C1C1C4C6C6C6C9CCCFCFCFD1D3D4D4D4
+D9D9D9D9DCDCDFDFE1E1E1E1E1E1E1E1DFDFDCDCD9D9D9D9D9D4D4D3CFCFCFCCCCC8C6C6C4C1C1C1
+C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3
+B1B1B1AEAEAEAEAEAEAEABABABABABA9A9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A3A19EA3A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A999494949499949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+949494949292929292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999996949699
+9A9A9A99999996949494949494949494949494949494949494949494949292929292929494949494
+94949494949494949492929292929292929292929292929292929292929292929292928F8E8E8E8E
+8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F92929292928F8F8E8E8E8E8E8E8E8F8F8F8F8F929292
+92929292929292929292929292929292929292929292929292929292929292929494949292929292
+92949494949292929292949494949494929294949494949494949494949494949294949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949292929294949492929292929292929292929292929292929292929292
+92929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+898989898989878785858584817F7F7F7C7C79767676767676767676767676797C7C7C7C7C7C7C7F
+7F7F7F7F7F7F7F818485858585858787878787878989898C89898989898989878787878787878787
+8789898989898989898989878785848484848587898C8F92929494999A9C9C9C9C9C9E9E9EA3A4A4
+A6A6A6A6A6A6A9A9ABAEAEAEAEB1B1B3B6B9B9B9BBBBC0C1C1C1C6C6C6C8CCCCCFCFCFD1D3D4D4D4
+D9D9D9D9DCDEDFDFE1E1E1E1E1E1E1DFDFDFDCD9D9D9D9D9D4D4D3D1CFCFCCCCCCC8C6C6C1C1C1C1
+C1C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3
+B1B1B1AEAEAEAEAEAEAEAEABABABABABA9A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A1A1A3A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9E9C9C9C9C9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A999994949999999494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+9494949494949292929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999949494949499
+9A999996949494949494949494949494949494949494949494929292929292929292929494949494
+949292929292929292929292929292929292929292929292929292929292929292928F8E8E8E8E8E
+8C8C8C8C8C8C8C8C8C8C8E8E8E8E8E8E8E8E8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F
+8F8F9292929292929292929292928F92929292929292929292929292929292929292929292929292
+92929292929292929292929294949492929292929494949494949294949494929292929494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949292
+94949494929494949494949292929292949292929292929292929292929292929292929292929292
+929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989898989
+89898989898987878585858481817F7F7F7C7C7C7976767679767676767676767C7C7C7C7C7C7F7F
+7F7F7F7F7F7F818485858585858787878789898989898C8E89898989898989898787878789898989
+89898989898989898989878787878787878787898E8F92929494969A9A9C9C9C9E9E9E9E9EA3A4A4
+A6A6A6A6A6A6A9ABAEAEAEAEB1B1B3B6B7B9B9BBBBBEC0C1C1C6C6C6C8C8CCCFCFCFD1D3D3D4D4D4
+D9D9D9D9DCDCDFDFDFE1E1E1E1E1DFDFDFDCDCD9D9D9D9D7D4D4D3CFCFCCCCCCC9C8C6C6C1C1C1C1
+C1C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3
+B1B1B1AEAEAEAEAEAEAEAEABABABABABA9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A3A1A3A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999969999999994949494949494949494949494949494949494
+94949494949494949494999994949494969994949494949494949494949494949494949494949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999969494949494949496
+99949494949494949494949494949494949494949492929292929292929292929292929292929292
+92929292929292929292929292929292928F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E8E8E
+8C8989898989898989898989898C8C8C8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8C8C8C8E8E8E
+8E8F8F8F8F8F929292929292928F8F8F8F8F929292929292929292928F9292929292929292929292
+92929292929292929292929292929292929292929292949494929292929492929292929294949494
+94949294949494949494949494949494949494949494949494949494949494949494949494929292
+92949492929294949494929292929292929292929292929292929292929292929292929292929292
+9292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989898989
+8989898989898787858585858481817F7F7F7C7C7C7B7979797C7976767679797C7C7C7C7F7F7F7F
+817F7F7F7F818485858587878787878989898989898C8E8E8C898989898989898989898989898989
+8989898989898989898987878787878989898C8E8F9294949496999A9C9C9C9E9E9E9E9EA1A4A4A6
+A6A6A6A6A6A9A9ABAEAEAEB1B1B3B3B6B9B9B9BBBBBEC1C1C4C6C6C6C8CCCCCFCFCFD1D3D3D4D4D9
+D9D9D9D9DCDCDFDFDFE1DFDFDFDFDFDFDEDCD9D9D9D9D9D4D4D4D1CFCFCCCCCCC8C6C6C6C1C1C1C1
+C1C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3
+B1B1B1AEAEAEAEAEAEAEAEAEABABABABA9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A3A3A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999A9A9996949494949494949494949494949494949494
+94949494949494949496999999949494999999949494999996949494969994949494969994949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+94949494949494949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A9999999494949494949494949494
+94949494949494949494949494949494949292929292929292929292929292929292929292929292
+9292929292928F8F8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C
+8989898989898989898989898989898989898989898C8C8C8C8E8E8E8E8E8E8E8C89898989898C8C
+8C8E8E8E8E8F8F8F8F8F9292928F8E8E8E8E8F8F8F9292929292928F8E8F8F8F9292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929494
+94929292929494949494949494949494949494949494949494949494949494949494949492929292
+92929492929292929492929292929292929292929292929292929292929292929292929292929292
+9292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+898989898989878787858585858484817F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F81
+8184818181848587878787878787898989898C8C8C8E8E8E8E8C8989898989898989898989898989
+8C8C8C8C8C8E8C898989898787898989898E8E8F9294949499999A9A9C9C9C9E9E9E9EA1A3A4A4A6
+A6A6A6A6A9A9A9ABAEAEAEB1B1B3B6B7B9B9B9BBBBC0C1C1C6C6C6C8C9CCCCCFCFCFD1D3D4D4D4D9
+D9D9D9D9DCDCDFDFDFDFDFDFDFDFDFDFDCDCD9D9D9D9D4D4D4D3D1CFCCCCCCC9C8C6C6C4C1C1C1C1
+C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3
+B3B1B1AEAEAEAEAEAEAEAEAEABABABABA9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A3A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A99969494949494949494949494949494949494
+94949994949494949499999A99999499999A99999496999A99969494999999949494999999949494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+949494949494949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999999A9A9A9A9A99999994949494949494949494949494
+9494949494949494949494949494929292929292929292929292929292929292929292929292928F
+8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8C8C8C8C8C8C8C8C8C8C8C8C89898989898989898989898989
+898989898989878787898989898989898989898989898989898989898C8C8C8E8C89898989898989
+8989898C8C8C8E8E8E8F8F8F8F8E8E8E8E8E8E8E8E8F8F8F92928F8F8E8E8E8F8F8F929292929292
+928F8F92929292929292929292929292929292929292929292929292929292929292929292929294
+92929292929294949494949492949494949492949494949292929494949492929494949492929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+89898989898989878785858585858484817F7F7F7F7C7C7C7C7C7C7F7C7C7C7C7C7C7F7F7F7F8181
+848585858584878787878789898989898C8E8E8E8E8E8E8E8E8C898989898C8C8C8C8E8E8E8E8E8E
+8E8E8E8E8E8E8C89898989898989898C8E8F8F92949499999A9A9A9A9C9C9E9E9EA1A3A3A4A4A4A6
+A6A9A9A9A9A9ABAEAEAEB1B1B1B3B6B7B9B9B9BBBBC0C1C6C6C6C8C8CCCCCFCFCFCFD1D3D4D4D4D9
+D9D9D9D9D9DCDFDFDFDFDFDFDFDFDFDCDCD9D9D9D9D7D4D4D4D3CFCFCCCCC9C8C8C6C6C4C1C1C1C1
+C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3
+B3B1B1AEAEAEAEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A3A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9C9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A999494949494949494949494949494949494
+949699999494949499999A9A9A999999999A9A999999999A9A999699999A99999499999A99999494
+94949494949494949494949494949494949494949494949494949494949494949494949494949494
+9494949494949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9999969494999A9A9A999996949494949494949494949494949494
+9494949494949494949494929292929292929292929292929292929292929292928F8F8F8F8F8F8E
+8E8E8E8E8E8C8C8C8C8C8C8989898989898989898989898989898989898989898989898989898989
+89898989898787878787878787878787878789898989898989898989898989898989898989898989
+898989898989898C8C8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8F8F8F8E8E8E8E8E8E8E8F8F8F929292
+8F8F8E8F8F9292929292928F8F92929292929292929292929292928F929292929292929292929292
+92929292929292929494949292929494949292929294949292929294949292929294949292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+8F8F92929292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89898989
+898989898989898787878785858585858481817F7F7F7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F818184
+8585858585878787898989898989898C8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8E8E8E8F8F8F8F8F8F
+8F8E8E8E8E8E8E8C89898989898C8E8F8F9292929494999A9A9A9C9C9C9C9E9EA3A3A4A4A4A4A6A6
+A6A9A9A9A9A9ABAEAEAEB1B1B1B3B6B9B9B9BBBBBEC1C1C6C6C6C8C9CCCCCFCFCFD1D3D3D4D4D7D9
+D9D9D9D9D9DCDEDFDFDFDFDCDCDCDCDCD9D9D9D9D9D4D4D4D3D1CFCFCCCCC8C8C6C6C6C1C1C1C1C1
+C1C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3
+B3B1B1AEAEAEAEAEAEAEAEAEABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A3A19E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9C9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999994949496999494949494969494949494
+9499999999949496999A9A9A9A9A99999A9A9A9A99999A9A9A9A99999A9A9A9A9999999A9A9A9996
+94949494949994949494949494949494949494949494949494949494949494949494949494949494
+9494949494949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9999969494949499999999949494949494949494949494949494949494
+949494949494949492929292929292929292929292929292929292928F8F8F8F8F8E8E8E8E8E8E8E
+8E8E8E8C898989898989898989898989898989898989898989898989898989898989898989898989
+89898989898787878787878787878787878787878787878787898989898989898989898989898989
+89898989898989898989898C8C8E8E8E8E8E8C8989898C8C8E8E8E8E8E8E8E8E8E8C8E8E8F8F8F92
+8F8E8E8E8E8F8F8F92928F8F8E8F8F9292929292928F8F9292928F8F8F8F92929292929292929292
+92929292929292929294929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292929292929292929292928F
+8F8F8F9292928F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89898989
+89898989898989898787878785858585858481817F7F7F7F7C7F7F7F7F7F7F7F7F7F7F7F81818485
+8585858587878787898989898989898E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F9292929292
+928F8E8E8E8E8E8E8C898C8C8E8F8F929292929494969A9A9C9C9C9C9C9E9E9EA3A4A4A4A4A4A6A6
+A6A9A9A9ABABABAEAEB1B1B1B3B6B7B9B9B9BBBBC0C1C4C6C6C6C8C9CCCCCFCFCFD1D3D3D4D4D9D9
+D9D9D9D9D9DCDCDFDFDFDCDCDCDCDCDCD9D9D9D9D4D4D4D4D3CFCFCCCCC9C8C8C6C6C6C1C1C1C1C1
+C1C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3
+B3B1B1AEAEAEAEAEAEAEAEAEABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A39E9E9EA1A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9C9C9C
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949499999994949496999494949494
+99999A9A99999499999A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A999A9A9A9A9A999A9A9A9A9A99
+96949494999999949494949494949494949494949494949494949494949494949494949494949494
+94949494949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A9A9A9999999494949494949494969494949494949494949494949494949494949494
+9494949494929292929292929292929292929292929292928F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E89898989898989898989898989898787878787878787878787878787878787878787878787
+87878787878787858585858585858585878787878787878787878787878787898989898989898989
+89898989898989898989898989898C8C8C8C898989898989898C8C8E8E8E8E8E8C898C8C8E8E8E8F
+8E8E8C8C8C8E8E8F8F8F8F8E8E8E8E8F8F9292928F8F8F8F8F928F8E8E8E8F8F92929292928F8F92
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292928F8F
+8F8E8F8F928F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989
+8989898989898989898787878785858585858484817F7F7F7F7F7F7F7F7F7F7F7F7F7F8181848585
+85858587878787898989898989898C8E8E8E8E8E8E8E8E8E8E8E8F8F929292929292929292929292
+928F8E8E8E8E8E8E8E8E8E8E8E8F92929292949494999A9C9C9C9C9C9C9E9EA1A4A4A4A4A4A6A6A6
+A9A9ABABABAEAEAEAEB1B1B1B3B6B7B9B9B9BBBBC0C1C6C6C6C6C8CCCCCCCFCFCFD1D3D4D4D4D9D9
+D9D9D9D9D9DCDCDFDFDCDCD9D9D9D9D9D9D9D9D7D4D4D4D3D1CFCFCCC9C8C8C6C6C6C6C1C1C0C0C1
+C1C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3
+B3B1B1B1AEAEAEAEAEAEAEAEABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A3A19E9EA1A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9C9C9C
+9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999996999A9999949499999994949496
+99999A9A9A9999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+99999496999A99999494949494949494949494949494949494949494949494949494949494949494
+949494949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A9A9A
+9A9A9A9A9A9A99999994949494949494949494949494949494949494949494949492949494949494
+94949292929292929292929292929292929292928F8F8F8F8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8C89898989898989898989898989878787878787878787878787878787878787878787878787
+87878787878785858585858585858585858585848485858587878787878787878787878789898989
+898989898989898789898989898989898989898989898989898989898C8C8E8C89898989898C8C8E
+8E8C8989898C8C8E8E8F8E8E8C8C8C8E8E8F8F8F8F8E8E8E8F8F8F8E8E8E8E8F8F8F92928F8F8F8F
+92929292929292929292929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292929292929292929292928F8F
+8E8E8E8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C898989
+89898989898989898989878787878585858585858481817F7F7F7F817F7F7F7F7F81818484858585
+858587878787898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F92929292929292929292929292
+8F8E8E8E8E8E8E8E8E8E8E8E8F9292929494949494999A9C9C9C9C9E9E9E9EA3A4A4A6A6A6A6A6A6
+A9A9ABAEAEAEAEAEAEB1B1B1B3B6B9B9B9BBBBBEC1C1C6C6C6C8C8CCCCCFCFCFD1D1D3D4D4D4D9D9
+D9D9D9D9D9DCDCDFDFDCD9D9D9D9D9D9D9D9D9D4D4D4D3D3CFCFCCCCC8C8C6C6C6C6C4C1C1C0C0C0
+C1C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3
+B3B1B1B1AEAEAEAEAEAEAEAEABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A39E9EA1A3A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C
+9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999A9A99999699999999949499
+999A9A9A9A9A99999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A999999999A9A999996949494949999949494949494949494949494949494949494949494949494
+9494949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9999999A9A
+9A9A9A9A999996949494949494949494949494949494949494949494949494929292929494949492
+92929292929292929292929292929292928F8F8F8E8E8E8C8C8C8989898E8E8E8E8E8E8E8E8C8C8C
+8C898989898989898989898989898987878785858585858484848484848484848484848484848484
+84848484848484858585858585858585858584848181818484848485858787878787878787878787
+8989898989898787878787878989898989898989898989898989898989898989898989898989898C
+8C898989898989898C8E8E8C8989898C8C8E8E8F8E8E8C8C8E8E8E8E8E8E8E8E8E8F8F8F8F8E8E8E
+8F8F92929292928F9292929292929292929292929292929292929292929292929292929292929292
+9292929292929292929292929292929292929292929292929292929292928F9292929292928F8F8E
+8E8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989
+898989898989898989898987878787878585858585848481817F81818181817F8181848485858585
+8587878787898989898989898C8E8E8E8E8E8E8E8E8E8E8E8E8F929292929292929292929292928F
+8F8E8E8E8E8E8F8F8F8E8E8F9292929494949494999A9A9C9C9E9E9E9E9E9EA4A4A4A6A6A6A6A6A6
+A9ABAEAEAEAEAEAEB1B1B1B3B3B6B9B9BBBBBBC0C1C4C6C6C6C8C9CCCCCFCFCFD1D3D3D4D4D7D9D9
+D9D9D9D9D9D9DCDFDCDCD9D9D9D9D9D9D9D9D4D4D4D4D3D1CFCFCCC9C8C6C6C6C6C6C1C1C0C0C0C0
+C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3
+B3B1B1B1AEAEAEAEAEAEAEAEAEABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A3A1A1A3A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C
+9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9999999A9A99999699
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A99999A9A9A9A9A99999494949999999694949494949494949494949494949494949494949494
+9494949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9694999A9A
+9A999999949494949494949494949494949494949494949494949494929292929292929494929292
+929292929292929292929292928F8F8F8E8E8E8E8C8C898989898989898C8E8C8C8C898989898989
+89898989898989898989878787878787878785858585848181818181818181818181818181818181
+81818181818181818181818184848484848484817F7F7F8181818181818484848485858787878787
+87878787878787878787878787878787898989898989898987878989898989898989898989898989
+898989898989898989898C8989898989898C8C8E8E8C89898C8C8E8E8E8E8E8E8C8E8E8F8E8E8E8E
+8E8F8F9292928F8F8F8F929292929292929292929292929292929292929292929292929292929292
+92929292929292929292929292929292929292929292929292929292928F8F8F929292928F8F8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E898989
+89898989898989898989898989878787878585858585858481818184848481818184848585858585
+87878787898989898989898C8E8E8E8E8E8E8E8E8E8F8F8F8F92929292929292929292929292928F
+8E8E8E8F8F8F92928F8E8E8F92929494949499999A9A9C9C9C9E9E9E9E9EA1A4A4A6A6A6A6A6A6A9
+A9ABAEAEAEAEAEAEB1B1B1B3B6B7B9B9BBBBC0C1C1C6C6C6C6C8C9CCCCCFCFCFD1D3D4D4D4D7D9D9
+D9D9D9D9D9D9DCDCDCD9D9D9D9D9D9D9D9D9D4D4D4D3D3D1CFCCCCC8C8C6C6C6C6C6C1C1C0C0C0C0
+C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3
+B3B1B1B1AEAEAEAEAEAEAEAEAEABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A3A1A3A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C
+9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A999999
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A99999499999A9A9999949494949494949494949494949494949494949494
+94949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494999A99
+99999494949494949494949494949494949494949494949494949292929292929292929292929292
+928F92929292929292928F8F8F8E8E8E8C8C89898989898989898989898989898989898989898989
+89898787878787878787878787878787878585858584817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F8181818181817F7F7F7F7F7F7F7F7F7F8181818181848484858587
+87878787878787878585858787878787878787898989898787878787878989898989898989898989
+898989898989898989898989898989898989898C8C89898989898C8C8E8E8E8C8C8C8C8E8E8E8E8E
+8E8E8E8F8F8F8F8E8E8F8F9292929292928F92929292928F92929292928F92929292929292929292
+9292929292929292929292929292928F8F92929292928F92929292928F8F8E8F8F92928F8F8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989
+89898989898989898989898989898787878785858585858585848484858585848484878787878587
+87878789898989898989898C8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292928F
+8F8F8F9292929292928F8F929292949499999A9A9A9A9C9C9E9E9E9EA1A3A3A4A4A6A6A6A6A6A6A9
+A9ABAEAEAEAEAEAEB1B1B1B3B6B7B9B9BBBEC0C1C1C6C6C6C8C8CCCCCCCFCFCFD1D3D3D4D4D4D9D9
+D9D9D9D9D9D9D9DCD9D9D9D9D9D9D9D9D9D4D4D4D3D3D1CFCFCCC9C8C6C6C6C6C6C4C1C1C0BEBEC0
+C0C0BEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3
+B3B1B1B1AEAEAEAEAEAEAEAEAEABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A3A3A4A4A4A4A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C
+9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9999999A9A9A9A99999694949494949494949494949494949494949494
+949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494999996
+94949494949494949494949494949494949494949494949292929292929292929292929292928F8F
+8F8F92929292928F8F8F8E8E8E8C8C89898989898989898989898989898989898989898787878787
+878787878787878787878585858484848484848481817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F818181818184
+84848585878787858585858584858787878787878787878787878787878787878989898989898787
+898989898989898989898989898989898989898989898989898989898C8C8C8C8989898C8E8E8E8E
+8E8E8C8E8E8F8E8E8E8E8E8F8F9292928F8F8F9292928F8F8F9292928F8F8F929292928F8F929292
+928F92929292928F9292929292928F8F8E8F9292928F8F8F9292928F8F8F8E8E8F8F8F8F8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C8989
+89898989898989898989898989898987878787878585858585858485858585858587878787878787
+878789898989898989898C8E8E8E8E8E8E8E8E8F8F92929292929292929292929292929292929292
+92929292929292929292929292949494999A9A9A9C9C9C9C9E9EA1A3A3A4A4A4A6A6A6A6A6A6A6A9
+ABAEAEAEAEB1B1B1B1B1B3B3B6B9B9BBBEC0C1C1C1C6C6C6C8C8CCCCCFCFCFCFD1D3D3D4D4D4D9D9
+D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D4D3D1D1CFCFCCC8C6C6C6C6C6C4C1C1C1C0BEBEBE
+C0C0BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3
+B3B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C9C
+9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9999949494949494969694949494949494949494
+949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9496949494
+9494949494949494949494949494949494949494949292929292929292929292929292928F8F8E8E
+8E8F8F928F8F8F8E8E8C8C8989898989898989898989898989898989898987878787878787878787
+87858585848484848481818181818181817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7C7C7C7C7F7F7F7F7F7F7F7F7F7F81
+81818184848485858585858484818484858587878787878787878587878787878787898989878787
+8787878989898987878789898989898989898989898989898989898989898C8989898989898C8E8E
+8E8C8C8C8E8E8E8E8E8E8E8E8F8F928F8F8E8E8F8F8F8F8E8E8F8F928F8F8F8F92928F8F8F8F9292
+8F8F8F8F9292928F8F929292928F8F8E8E8E8F8F8F8F8E8F8F92928F8F8E8E8E8E8F8F8F8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8989
+89898989898989898989898989898989898787878785858585858585858585858787878787878787
+8789898989898989898C8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292929292
+929292929292929292929292929494999A9A9C9C9C9C9C9C9E9EA3A4A4A4A4A4A6A6A6A6A6A6A9A9
+ABAEAEAEB1B1B1B1B1B1B3B6B7B9B9BBBEC1C1C1C6C6C6C6C8C9CCCCCFCFCFCFD1D3D3D4D4D4D9D9
+D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D3D3D1CFCFCFCCC8C6C6C6C6C6C1C1C1C1C0BEBBBE
+BEBEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3
+B3B3B1B1AEAEAEAEAEAEAEAEAEABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A4A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9C
+9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999694949494999999949494949494949494
+9494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494949492929292949494949292929292929292929292929292928F8F8E8E8E8E8E
+8E8E8F8F8E8E8C8C8989898989898989898989898989898989878787878787878787878585848484
+848181818181817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7C79797979797979797C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F
+7F7F7F81818181848484848481818181818484848587878785848484848587878787878787878787
+87878787878987878787878787898989898787878989898989898989898989898989898989898C8C
+8C8C8989898C8E8E8E8E8E8E8E8E8F8F8F8E8E8E8F8F8F8E8E8E8F8F8F8E8E8E8F8F8F8E8E8F8F8F
+8F8E8E8F8F928F8F8F8F92928F8F8F8E8E8E8E8F8F8E8E8E8F8F8F8F8E8E8E8E8E8E8F8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89
+89898989898989898989898989898989898987878787878585858787878785878787878789898989
+89898989898989898C8E8E8E8E8E8F8F8F8F8F929292929292929292929292929292929292929292
+929292929292929292929494949494999A9C9C9C9C9C9C9E9EA1A4A4A4A4A4A4A6A6A6A6A6A6A9A9
+ABAEAEB1B1B1B1B1B1B1B3B6B7B9B9BBC0C1C1C1C4C6C6C6C8CCCCCCCFCFCFCFCFD1D3D4D4D4D9D9
+D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D4D4D4D3D3D1CFCFCFCCCCC8C6C6C6C6C4C1C1C1C0C0BEBBBB
+BEBEBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B3B3B3B3B3B3B3B3B3
+B3B3B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E
+9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999949499999A99999994949494949494
+94FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949494929292929292929492929292929292929292929292928F8F8F8E8E8E8E8E8E8E
+8E8E8E8C8C8989898989898989898989898989898987878787878787878585848484818181818181
+7F7F7F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
+7976767676767676767676767676797979797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F
+7F7F7F7F7F7F7F7F818181817F7F7F7F7F8181818184848584848181818184848587878787878785
+85878787878787878787878787878789878787878787898989898989898989898989898989898989
+8C89898989898C8C8E8E8E8C8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8F8E8E8E8E8E8F8E8E8E8E8E8F
+8F8E8E8E8F8F8F8E8E8E8F928F8F8E8E8E8E8E8E8E8E8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C89
+89898989898989898989898989898989898989898787878787878787878787878787878989898989
+898989898989898C8E8E8E8E8E8F8F92929292929292929292929292929292929292929292929292
+9292929292929292949494949494969A9A9C9C9C9C9C9E9E9EA3A4A4A4A4A4A6A6A6A6A6A6A6A9AB
+AEAEAEB1B1B1B1B1B1B3B3B6B9B9BBBBC0C1C1C1C4C6C6C8C8CCCCCFCFCFCFCFCFD1D3D3D4D4D7D7
+D7D7D7D7D7D9D9D9D9D9D7D9D9D9D4D4D4D4D3D1D1CFCFCFCCC9C8C6C6C6C6C4C1C1C1C0C0BBBBBB
+BBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3
+B3B3B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9E9EA1A39E9E9E9E9EA19E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9E
+9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999999A9A9A9A9999999494949494
+94FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9494949494949292929292929292929292929292929292929292928F8F8F8E8E8E8E8E8E8E8E8E8E
+8C8C898989898989898989898989898989878787878787878785848484818181817F7F7F7F7F7F7F
+7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7B7979797979767676767676767676767676767676767676
+767676767676767676767474747476767676767676767979797C7C7C7C7C7976767979797C7C7C7C
+7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181818481817F7F8181818184848587878584
+81848485878787878785858787878787878787878787878789898987878789898989898989898989
+89898989898989898C8E8C8C89898C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8F8E8E8E8E8E8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89
+89898989898989898989898989898989898989898989878787878787878787878787898989898989
+898989898989898C8E8E8E8E8E8F9292929292929292929292929292929292929292929292929292
+9292929292949494949494949499999A9C9C9C9E9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A6A9A9AB
+AEAEAEB1B1B1B1B1B3B3B6B7B9B9BBBBC0C1C1C1C4C6C6C8C9CCCCCFCFCFCFCFCFD1D3D3D4D4D4D4
+D4D4D4D4D4D4D9D9D9D7D4D4D4D4D4D4D4D3D3D1CFCFCFCFCCC9C8C6C6C6C6C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1AEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9EA1A3A19E9E9E9EA39E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9E9E
+9E9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A999996949494
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+949494929292929292929292929292929292929292929292928F8F8E8E8E8E8E8E8E8E8E8E8C8C89
+898989898989898989898989898787878787878785858484818181817F7F7F7F7F7F7F7F7F7C7C7C
+7C7C7C7C7C7C7C7B7979797676767676767676767474747474747474747474747474747474747474
+74747474747474747674747474747474747474747474767676767676797976767676767676767979
+7B7C7C7C7C7C7C7C7F7F7F7F7F7F7C7C7C7F7F7F7F7F7F7F817F7F7F7F7F7F7F7F81818184848481
+81818184848587878584848485858787878787858787878787878787878787878989898989898989
+8989898989898989898C8C898989898C8C8E8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E89
+89898989898989898989898989898989898989898989898987878789898989878789898989898989
+89898C8989898C8E8E8E8E8E8F929292929292929292929292929292929292929292929292929292
+92929494949494949494969999999A9A9C9C9C9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A6A6A9A9A9AB
+AEAEB1B1B1B3B3B3B3B3B6B7B9B9BBBBC0C1C1C1C6C6C6C8C9CCCCCFCFCFCFCFCFD1D3D3D4D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D1CFCFCFCFCCCCC8C6C6C6C6C4C1C1C1C1C0BEBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1AEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A39E9EA3A4A39E9E9EA1A3A19E9E9E9EA19E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999996FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949494
+9492929292929292929292929292928F8F92929292928F8F8F8E8E8E8E8E8E8E8E8E8C8C89898989
+89898989898989898989878787878787858584848181817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C
+79797976767676767676747474747474747474747472727272727272727272727272727272727272
+72727272727274747474747474747472727272727474747474747474767676767676767674747676
+76767679797C7C7C7C7C7C7C7F7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181
+7F7F7F81818184848481818181848485878785858585878787878787878787878787898989878787
+89898989898989898989898989898989898C8E8E8E8C898C8E8E8E8C8C8C8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C
+89898989898989898989898989898989898989898989898989898989898989898989898989898989
+898C8E8E8E8E8E8E8E8E8E8F8F929292929292929292929292929292929292929292929292929494
+94949494949494949999999A9A9A9A9A9C9C9E9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A9A9A9A9ABAE
+AEAEB1B1B1B3B3B3B3B3B6B9B9B9BBBBC0C0C1C1C6C6C6C8CCCCCCCFCFCFCFCFCFD1D1D3D4D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D1D1CFCFCFCFCCCCC8C6C6C6C6C4C1C1C1C0C0BEBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1A1A3A4A4A19E9EA1A3A39E9E9EA1A3A19E9E
+9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9C9C9C9C9A9A9A9A9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99FF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494949292
+9292929292929292929292928F8F8F8E8F8F92928F8F8E8E8E8E8E8E8E8E8E8E8C89898989898989
+898989898989898787878787878584848181817F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C797676
+7676747474747474747474747474747474747272716E6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
+6C6C6C6C6C6E6E717171727272727272716E6E717172727272727274747474747474747474747474
+7474767676767679797C7C7C7C7C7C7C79797C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
+7F7F7F7F7F7F818181817F7F7F818184848585858585858587878787878585878787878787878787
+878789898989898989898989898989898989898C8C8989898C8C8C8C89898C8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8C
+89898989898989898989898989898989898989898989898989898989898989898989898989898989
+8C8E8E8E8E8E8E8E8E8E8E8F92929292929292929292929292929292929292929292929292949494
+94949494949499999A9A9A9A9A9C9C9C9C9C9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A9A9A9A9A9ABAE
+AEAEB1B1B1B3B3B3B3B6B6B9B9B9BBBBBEC0C1C1C6C6C8C8CCCCCFCFCFCFCFCFCFCFD1D3D4D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D1CFCFCFCFCCCCCCC8C6C6C6C6C4C1C1C1C0C0BBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A1A3A4A4A3A1A1A3A4A3A19E9EA1A3A39E9E
+9E9EA3A19E9E9E9EA19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9C9C9C9C9C9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9492929292
+929292929292929292928F8F8E8E8E8E8E8F8F8F8E8E8E8E8E8E8E8E8E8C89898989898989898989
+8989898987878787878585848481817F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C7C7C7C7976767676
+767474747474747474747474727272727272716C6C6C6C6C6C6C6C6C6C6C6C6C6A6A6A6A6A6A6A6A
+6A6A6A6A6A6A6A6A6A6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6E7172727272727474747472727272
+747474747474747676767679797B797976767679797B7C7C7C7C7C7C7F7F7F7C7C7C7C7F7F7F7F7F
+7F7F7F7F7F7F7F7F817F7F7F7F7F7F81818484858585858484858787858585858587878787878787
+87878789898989898989898989898989898989898989898989898C898989898C8C8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8C89898989898989898989898989898989898989898989898989898989898989898989898989898C
+8E8E8E8E8E8E8E8E8E8E8F9292929292929292929292929292929292929292929292929294949494
+949494949494999A9A9A9A9A9C9C9C9C9C9E9E9E9E9E9EA3A4A4A4A4A4A4A6A6A9A9A9A9ABABABAE
+AEB1B1B1B3B3B3B3B3B6B7B9B9B9BBBBBEC0C1C1C6C6C8C9CCCCCFCFCFCFCFCFCFCFD1D3D4D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D1CFCFCFCFCCCCCCC9C8C6C6C6C6C4C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A4A4A4A4A3A1A3A4A4A39E9EA3A4A3A19E
+9EA1A3A39E9E9E9EA3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9C9C9C9C9A9A9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292929292928F8F8E8E8E8E8E8E8E8E8E8C8C8E8E8E8E8E8C8C898989898989878789898989
+8787878787878584848181817F7F7F7F7F7F7F7F7C7C7C7C7C7C7C7C7C7C7C797976767676747474
+7474747472727272716E6C6C6C6C6C6A6A6A6A6A6A6A676767676767676666666666666666666767
+676766616161646666676767676A6A6A6A6A6A6A6A6A6A6A6A6A6C6C6C6C6C6E7172727272727171
+717272727274747474747476767676767676767676767679797C7C7C7C7C7C7C7C7C7C7C7C7C7F7F
+7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8181818484848181818485858585858585878787878785
+8787878787898989898989898989898989898989898989898989898989898989898C8E8E8E8C8C8E
+8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8C898989898989898989898989898989898989898989898989898989898989898C898989898C8E
+8E8E8E8E8E8E8E8E8E8F929292929292929292929292929292929292929292929292929294949494
+9494949494999A9A9A9A9A9C9C9C9C9C9C9E9E9E9E9E9EA3A4A4A4A6A6A6A6A6A9A9ABABABABAEAE
+AEB1B1B1B3B3B3B3B3B6B9B9B9BBBBBBBEC0C1C1C6C6C8C8CCCCCCCFCFCFCFCFCFCFD1D3D3D4D4D4
+D4D4D4D4D4D4D4D4D4D4D4D4D4D3D3D1D1CFCFCFCCCCCCC9C8C6C6C6C6C6C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3
+B3B3B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A3A3A4A4A4A4A1A1A3A4A4A39E
+9EA1A3A3A19E9EA1A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+92929292928F8F8F8E8E8E8E8E8E8E8E8E8C8989898C8E8E8C898989898989878787878787878787
+87878785848481817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7C7B7976767676747474747474727272
+71716C6C6C6C6A6A6A6A676766616161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF5F5F616161616661616164666767676A6A6A6A6A6C6C6C6C6C6C6C
+6C6C6C6E717272727272747474747474767676767674747676767679797C7C7C7C7979797C7C7C7C
+7C7F7F7F7F7C7C7C7F7F7F7F7F7F7F7F7F7F7F81818181817F818181848585858484848587878585
+858587878787878989898987878989898989898989898989898989898989898989898C8E8C8C8989
+8C8E8E8C898C8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8C8C898989898989898989898989898989898989898989898989898989898C8E8E8C8C8C8E8E
+8E8E8E8E8F8E8E8E8F8F929292929292929292929292929292929292929292929292929494949494
+9494949494999A9A9A9A9A9C9C9C9C9E9E9E9E9E9E9EA1A4A4A6A6A6A6A6A6A6A9ABABABABABAEAE
+AEB1B1B1B3B3B3B3B3B6B9B9B9BBBBBBBEC0C1C1C6C6C8C8CCCCCCCFCFCFCFCFCFCFD1D3D3D3D3D3
+D3D3D3D3D3D4D4D4D4D4D4D4D4D3D3D1CFCFCFCFCCCCCCC8C8C6C6C6C6C4C1C1C1C1C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3
+B3B1B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A3A1A3A4A4A3A1
+A1A3A4A4A39E9EA1A3A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+9292928F8F8E8E8E8E8E8E8E8E8E8C8C898989898989898989898989878787878785878787878787
+85848481817F7F7F7F7F7F7F7F7F7F7F7C7C7C7C7C79797676767474747474727272716E6C6C6C6A
+6A6A676661FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F5F6161616667676A6A6A6A6A6A
+6A6A6A6A6C6C6C6C6E7172727272747474747474747474747474767676767979797676767679797C
+7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F817F7F7F7F81818184848481818184858585
+85858585878787878789878787878989898989898989898989898989898989898989898C8C898989
+898C8C8989898C8E8E8C898C8E8E8E8C8C8C8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8C89898989898989898989898989898989898989898989898989898C8C8E8E8E8E8E8E8E
+8E8E8E8F8F8F8F8F8F92929292929292929292929292929292929292949494949494949494949494
+94949496999A9A9A9A9A9C9C9C9E9E9E9E9E9E9E9E9EA3A4A4A6A6A6A6A6A6A9A9ABABABABABAEAE
+B1B1B1B3B3B3B3B3B6B7B9B9B9BBBBBBC0C0C1C1C6C6C6C8C9CCCCCFCFCFCFCFCFCFD1D3D3D3D3D3
+D3D3D3D3D3D3D3D3D3D3D3D3D3D3D1CFCFCFCFCCCCCCC9C8C6C6C6C6C6C4C1C1C1C0C0BEBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3B3B3
+B3B1B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A4A3A4A4A4A4A3
+A1A3A4A4A3A1A1A3A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292929292
+8F8F8F8E8E8E8E8E8E8E8E8E8C898989898989898989898989878787878787858585858787858481
+81817F7F7F7F7F7F7F7F7F7F7C7C7C7C7C7976767674747474747272716E6C6C6C6A6A676661FFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F616161666767
+67676767676A6A6A6A6C6C6C6C717272727274747474747474747474747476767676767676767676
+79797C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81818181817F8181848485
+85858585858587878787878787878787898989898989898989898989898989898989898989898989
+898989898989898C8C8989898C8C8C8C89898C8E8E8C8C8C8E8E8E8E8C8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8C898989898989898989898989898989898989898989898989898C8E8E8E8E8E8E8E8E
+8E8E8E8F929292929292929292929292929292929292929494949494949494949494949494949494
+999999999A9A9A9A9A9A9C9C9E9E9E9E9E9E9EA1A3A3A4A4A4A6A6A6A6A6A6A9A9ABABABABAEAEAE
+B1B1B1B3B3B3B3B3B6B7B9B9B9BBBBBEC0C1C1C1C6C6C6C8C9CCCCCFCFCFCFCFCFCFCFD1D3D3D3D3
+D3D3D3D3D3D3D3D3D3D3D3D3D3D1CFCFCFCFCCCCCCC9C8C8C6C6C6C6C6C4C1C1C1C0C0BBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B3B3B3B3B3B3B3B3B3B3B3
+B3B1B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A4A4A4A4A4
+A3A4A4A4A4A3A1A3A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9292928F8F
+8E8E8E8E8E8E8E8E8E8C8C898989898989898989898987878787878785858585858585848181817F
+7F7F7F7C7C7C7C7C7C7C7C7C7C79767676747474747272726E6C6C6A6A676666FFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F
+6161646767676767676A6A6A6A6C6C6C6C6E71727272747474747272747474747476767676767676
+767676797B7C7C7C7C7C7C7C7C7C7C7F7F7F7F7C7C7F7F7F7F7F7F7F7F7F7F81817F7F7F7F818184
+84858585858585878787878787878787878989898987878989898989898989898989898989898989
+89898989898989898989898989898C898989898C8C8C89898C8E8E8C8C8C8E8E8E8E8C8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8C89898989898C89898989898C898989898C8C8C8989898C8E8E8E8E8E8E8E8E8E
+8E8E8F92929292929292929292929292929292929292929494949494949494949494949494949494
+999A9A9A9A9A9A9A9A9C9C9E9E9E9E9E9E9EA3A3A4A4A4A4A6A6A6A6A6A6A6A9ABABABABABAEAEAE
+B1B1B1B3B3B3B3B3B6B9B9B9BBBBBBBEC0C1C1C1C6C6C6C8C9CCCCCCCFCFCFCFCFCFCFD1D3D3D3D3
+D3D3D3D3D3D3D3D3D3D3D3D3D1D1CFCFCFCFCCCCCCC8C8C6C6C6C6C6C4C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3
+B3B1B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A3A4A4A4A4A4A3A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9C9C9C9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8E8E
+8E8E8E8E8E8E8E8C898989898989898989898989878787878785858585858585848181817F7F7F7F
+7C7C7C7C7C7C7C7C7C7B797676747474747272716C6C6A6A6767FFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFF5F5F5F6161666767676767676A6A6A6C6C6C6C6E717272727271727272727474747474767676
+767676767676797C7C7C7B79797C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F81
+81848485858585848587878785858787878787898787878789898989898989898989898989898989
+898989898989898989898989898989898989898989898989898C8C8C89898C8E8E8C8C8C8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8C8989898C8E8C8989898C8E8C8C898C8C8E8E8E8C8C8E8E8E8E8E8E8E8E8E8E
+8E8F9292929292929292929292929292929292929294949494949494949494949494949494949499
+9A9A9A9A9A9A9A9C9C9C9E9E9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABAEAEB1
+B1B1B3B3B3B3B3B6B7B9B9B9BBBBBBBEC0C1C1C1C6C6C6C8C8CCCCCCCFCFCFCFCFCFCFD1D1D1D1D1
+D1D1D1D1D1D1D1D3D3D3D3D3D1CFCFCFCFCCCCCCC8C8C6C6C6C6C6C4C1C1C1C1C1C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B3B3B3B3B3B3B3B3B3B3B3B3
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEABABABABABABABA9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A3A4A4A4A4A4A39E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9C9C9C9C9E9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8E8E8C8C8989898989898989898989878787878785858585858585848181817F7F7F7F7C7C7C
+7C7C7C7C7C7C797676767474747272716C6C6A6A67FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFF5F5F5F61616667676767676A6A6A6C6C6C6C716E6C6C6C6E717272727474747474
+7674747474767676797979767676797C7C7C7C7C7C7C7C7C7C7F7F7F7F7C7C7F7F7F7F7F7F7F7F7F
+7F818184858484848484858585858585878787878787878787878989898989898989898989898989
+898989898989898989898989898989898989898989898989898989898989898C8C8C898C8C8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8C8C8E8E8E8E8C8C8E8E8E8E8C8C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8F8F9292929292929292929292929292929292929494949494949494949494949494949494949499
+9A9A9A9A9A9A9C9C9C9C9E9E9E9E9E9E9EA3A4A4A4A4A4A6A6A6A6A6A6A6A9A9ABABABABAEAEAEB1
+B1B1B3B3B3B3B3B6B7B9B9B9BBBBBBC0C1C1C1C4C6C6C6C8C8CCCCCCCCCCCCCCCFCFCFD1D1D1D1D1
+D1D1D1D1D1D1D1D1D1D1D1D1CFCFCFCFCCCCCCC9C8C8C6C6C6C6C4C1C1C1C1C1C0C0BEBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B6B6B6B3B3B3B3B3B3B3B3B3B3B3
+B1B1B1B1B1AEAEAEAEAEAEAEAEAEAEABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9C9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E8E8E
+8E8E8C8989898989898989898989898787878785858585858585848481817F7F7F7F7C7C7C7C7C7C
+7C7C7C7976767474747272716C6C6A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFF5F5F5F61616667676767676A6A6A6C6C6C6C6C6C6C6C6E717272727474
+7474747474747474767676767676767679797C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7F7F7F7F7F7F7F
+7F7F8181818181818184848585858585858587878787878787878789898989898989898989898989
+8989898989898989898989898989898989898989898989898989898989898989898989898C8C8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E
+8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F
+8F92929292929292929292929292929292929494949494949494949494949494949494949499999A
+9A9A9A9A9A9C9C9C9C9E9E9E9E9E9E9EA1A4A4A4A4A4A4A6A6A6A6A6A6A9A9ABABABABABAEAEAEB1
+B1B1B3B3B3B3B3B6B9B9B9BBBBBBBEC0C1C1C1C4C6C6C6C6C8C9CCCCCCCCCCCCCFCFCFCFCFCFCFD1
+D1D1D1D1D1D1D1D1D1D1D1D1CFCFCFCCCCCCC9C8C8C6C6C6C6C6C1C1C1C1C1C1C0C0BBBBBBBBBBBB
+BBBBBBBBBBBBBBB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B7B6B6B6B3B3B3B3B3B3B3B3B3B3
+B1B1B1B1AEAEAEAEAEAEAEAEAEAEAEABABABABABABA9A9A9A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4
+A4A4A4A4A4A4A4A4A4A4A4A4A4A3A19E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E
+9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+gr
+gs
+0 872 translate
+ 1200 29 scale
+1200 29 8
+[1200 0 0 29 0 0] L1i
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+gr
+
+end
+
+eplot
+%%EndObject
+
+gr
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/glacier1.pdf b/doc/tutorial/images/glacier1.pdf
new file mode 100644
index 0000000..c5a145e
Binary files /dev/null and b/doc/tutorial/images/glacier1.pdf differ
diff --git a/doc/tutorial/images/glacier2.eps b/doc/tutorial/images/glacier2.eps
new file mode 100755
index 0000000..36b3b9f
--- /dev/null
+++ b/doc/tutorial/images/glacier2.eps
@@ -0,0 +1,39895 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: glacier2.eps
+%%CreationDate: 09/01/2004 09:56:05
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 89 224 546 586
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 89 224 546 586
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 863 305 5477 4347 MR c np
+284 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+gs 899 389 5357 4227 MR c np
+0 sg
+2828 -992 mt 2809 -978 L
+2809 -978 mt 2791 -964 L
+2791 -964 mt 2774 -953 L
+2774 -953 mt 2751 -937 L
+2751 -937 mt 2740 -929 L
+2740 -929 mt 2709 -909 L
+2709 -909 mt 2705 -906 L
+2705 -906 mt 2670 -884 L
+2670 -884 mt 2666 -882 L
+2666 -882 mt 2635 -862 L
+2635 -862 mt 2623 -854 L
+2623 -854 mt 2600 -840 L
+2600 -840 mt 2580 -827 L
+2580 -827 mt 2565 -818 L
+2565 -818 mt 2535 -799 L
+2535 -799 mt 2530 -796 L
+2530 -796 mt 2496 -775 L
+2496 -775 mt 2489 -772 L
+2489 -772 mt 2461 -756 L
+2461 -756 mt 2440 -744 L
+2440 -744 mt 2426 -737 L
+2426 -737 mt 2391 -718 L
+2391 -718 mt 2387 -717 L
+2387 -717 mt 2356 -701 L
+2356 -701 mt 2331 -689 L
+2331 -689 mt 2321 -685 L
+2321 -685 mt 2286 -669 L
+2286 -669 mt 2271 -661 L
+2271 -661 mt 2251 -653 L
+2251 -653 mt 2217 -637 L
+2217 -637 mt 2209 -634 L
+2209 -634 mt 2182 -622 L
+2182 -622 mt 2147 -607 L
+2147 -607 mt 2145 -606 L
+2145 -606 mt 2112 -592 L
+2112 -592 mt 2080 -579 L
+2080 -579 mt 2077 -578 L
+2077 -578 mt 2042 -563 L
+2042 -563 mt 2014 -551 L
+2014 -551 mt 2007 -549 L
+2007 -549 mt 1972 -535 L
+1972 -535 mt 1946 -524 L
+1946 -524 mt 1938 -521 L
+1938 -521 mt 1903 -507 L
+1903 -507 mt 1876 -496 L
+1876 -496 mt 1868 -494 L
+1868 -494 mt 1833 -481 L
+1833 -481 mt 1801 -469 L
+1801 -469 mt 1798 -468 L
+1798 -468 mt 1763 -456 L
+1763 -456 mt 1728 -443 L
+1728 -443 mt 1723 -441 L
+1723 -441 mt 1694 -431 L
+1694 -431 mt 1659 -418 L
+1659 -418 mt 1647 -414 L
+1647 -414 mt 1624 -406 L
+1624 -406 mt 1589 -393 L
+1589 -393 mt 1573 -386 L
+1573 -386 mt 1554 -379 L
+1554 -379 mt 1519 -366 L
+1519 -366 mt 1502 -359 L
+1502 -359 mt 1484 -352 L
+1484 -352 mt 1449 -338 L
+1449 -338 mt 1434 -331 L
+1434 -331 mt 1415 -324 L
+1415 -324 mt 1380 -309 L
+1380 -309 mt 1368 -304 L
+1368 -304 mt 1345 -294 L
+1345 -294 mt 1310 -278 L
+1310 -278 mt 1305 -276 L
+1305 -276 mt 1275 -263 L
+1275 -263 mt 1243 -249 L
+1243 -249 mt 1240 -248 L
+1240 -248 mt 1205 -232 L
+1205 -232 mt 1181 -221 L
+1181 -221 mt 1170 -217 L
+1170 -217 mt 1136 -201 L
+1136 -201 mt 1120 -194 L
+1120 -194 mt 1101 -185 L
+1101 -185 mt 1066 -168 L
+1066 -168 mt 1061 -166 L
+1061 -166 mt 1031 -152 L
+1031 -152 mt 1005 -139 L
+1005 -139 mt 996 -135 L
+ 996 -135 mt 961 -117 L
+ 961 -117 mt 950 -111 L
+ 950 -111 mt 926 -99 L
+ 926 -99 mt 899 -84 L
+ 899 -84 mt 892 -80 L
+ 892 -80 mt 857 -60 L
+ 857 -60 mt 850 -56 L
+ 850 -56 mt 822 -40 L
+ 822 -40 mt 802 -29 L
+ 802 -29 mt 787 -20 L
+ 787 -20 mt 757 -1 L
+ 757 -1 mt 752 1 L
+ 752 1 mt 717 22 L
+ 717 22 mt 713 25 L
+ 713 25 mt 682 45 L
+ 682 45 mt 670 53 L
+ 670 53 mt 647 68 L
+ 647 68 mt 630 80 L
+ 630 80 mt 613 92 L
+ 613 92 mt 591 108 L
+ 591 108 mt 578 118 L
+ 578 118 mt 555 135 L
+ 555 135 mt 543 145 L
+ 543 145 mt 522 163 L
+ 522 163 mt 508 175 L
+ 508 175 mt 490 190 L
+ 490 190 mt 473 206 L
+ 473 206 mt 460 218 L
+ 460 218 mt 438 239 L
+ 438 239 mt 431 245 L
+ 431 245 mt 404 273 L
+ 404 273 mt 403 274 L
+ 403 274 mt 378 300 L
+ 378 300 mt 368 310 L
+ 368 310 mt 352 328 L
+ 352 328 mt 334 348 L
+ 334 348 mt 327 355 L
+ 327 355 mt 302 383 L
+ 302 383 mt 299 386 L
+ 299 386 mt 277 411 L
+ 277 411 mt 264 425 L
+ 264 425 mt 253 438 L
+ 253 438 mt 229 465 L
+ 229 465 mt 228 466 L
+ 228 466 mt 204 493 L
+ 204 493 mt 194 505 L
+ 194 505 mt 180 521 L
+ 180 521 mt 159 545 L
+ 159 545 mt 156 548 L
+ 156 548 mt 133 576 L
+ 133 576 mt 124 586 L
+ 124 586 mt 110 603 L
+ 110 603 mt 90 628 L
+ 90 628 mt 87 631 L
+ 87 631 mt 65 658 L
+ 65 658 mt 55 671 L
+ 55 671 mt 43 686 L
+ 43 686 mt 22 713 L
+ 22 713 mt 20 716 L
+ 20 716 mt 2 741 L
+ 2 741 mt -14 764 L
+ -14 764 mt -17 768 L
+ -17 768 mt -37 796 L
+ -37 796 mt -49 813 L
+ -49 813 mt -56 823 L
+ -56 823 mt -75 851 L
+ -75 851 mt -84 864 L
+ -84 864 mt -94 878 L
+ -94 878 mt -112 906 L
+-112 906 mt -119 917 L
+-119 917 mt -130 933 L
+-130 933 mt -147 961 L
+-147 961 mt -154 972 L
+-154 972 mt -164 988 L
+-164 988 mt -180 1016 L
+-180 1016 mt -188 1029 L
+-188 1029 mt -197 1043 L
+-197 1043 mt -214 1071 L
+-214 1071 mt -223 1087 L
+-223 1087 mt -230 1098 L
+-230 1098 mt -247 1126 L
+-247 1126 mt -258 1143 L
+-258 1143 mt -265 1153 L
+-265 1153 mt -283 1181 L
+-283 1181 mt -293 1195 L
+-293 1195 mt -303 1208 L
+-303 1208 mt -323 1236 L
+-323 1236 mt -328 1243 L
+-328 1243 mt -344 1263 L
+-344 1263 mt -363 1287 L
+-363 1287 mt -366 1291 L
+-366 1291 mt -390 1318 L
+-390 1318 mt -398 1328 L
+-398 1328 mt -414 1346 L
+-414 1346 mt -433 1365 L
+-433 1365 mt -441 1373 L
+-441 1373 mt -467 1400 L
+-467 1400 mt -469 1401 L
+-469 1401 mt -500 1428 L
+-500 1428 mt -502 1431 L
+-502 1431 mt -535 1456 L
+-535 1456 mt -537 1458 L
+-537 1458 mt -572 1482 L
+-572 1482 mt -574 1484 L
+-574 1484 mt -607 1503 L
+-607 1503 mt -622 1511 L
+-622 1511 mt -642 1521 L
+-642 1521 mt -677 1535 L
+-677 1535 mt -686 1539 L
+-686 1539 mt -711 1547 L
+-711 1547 mt -746 1555 L
+-746 1555 mt -781 1560 L
+-781 1560 mt -816 1563 L
+-816 1563 mt -851 1562 L
+-851 1562 mt -886 1559 L
+2862 6023 mt 2879 6007 L
+2879 6007 mt 2893 5996 L
+2893 5996 mt 2914 5974 L
+2914 5974 mt 2920 5968 L
+2920 5968 mt 2943 5941 L
+2943 5941 mt 2949 5931 L
+2949 5931 mt 2962 5913 L
+2962 5913 mt 2975 5886 L
+2975 5886 mt 2978 5858 L
+2978 5858 mt 2970 5831 L
+2970 5831 mt 2949 5805 L
+2949 5805 mt 2947 5803 L
+2947 5803 mt 2914 5777 L
+2914 5777 mt 2913 5776 L
+2913 5776 mt 2879 5755 L
+2879 5755 mt 2868 5748 L
+2868 5748 mt 2844 5737 L
+2844 5737 mt 2813 5721 L
+2813 5721 mt 2809 5719 L
+2809 5719 mt 2774 5704 L
+2774 5704 mt 2750 5693 L
+2750 5693 mt 2740 5689 L
+2740 5689 mt 2705 5677 L
+2705 5677 mt 2676 5665 L
+2676 5665 mt 2670 5664 L
+2670 5664 mt 2635 5652 L
+2635 5652 mt 2600 5639 L
+2600 5639 mt 2597 5638 L
+2597 5638 mt 2565 5627 L
+2565 5627 mt 2530 5615 L
+2530 5615 mt 2517 5610 L
+2517 5610 mt 2496 5603 L
+2496 5603 mt 2461 5591 L
+2461 5591 mt 2439 5583 L
+2439 5583 mt 2426 5579 L
+2426 5579 mt 2391 5566 L
+2391 5566 mt 2361 5555 L
+2361 5555 mt 2356 5554 L
+2356 5554 mt 2321 5541 L
+2321 5541 mt 2286 5528 L
+2286 5528 mt 2286 5528 L
+2286 5528 mt 2251 5516 L
+2251 5516 mt 2217 5503 L
+2217 5503 mt 2211 5500 L
+2211 5500 mt 2182 5490 L
+2182 5490 mt 2147 5476 L
+2147 5476 mt 2138 5473 L
+2138 5473 mt 2112 5463 L
+2112 5463 mt 2077 5450 L
+2077 5450 mt 2066 5445 L
+2066 5445 mt 2042 5436 L
+2042 5436 mt 2007 5423 L
+2007 5423 mt 1996 5418 L
+1996 5418 mt 1972 5409 L
+1972 5409 mt 1938 5395 L
+1938 5395 mt 1927 5390 L
+1927 5390 mt 1903 5381 L
+1903 5381 mt 1868 5367 L
+1868 5367 mt 1858 5363 L
+1858 5363 mt 1833 5353 L
+1833 5353 mt 1798 5338 L
+1798 5338 mt 1791 5335 L
+1791 5335 mt 1763 5324 L
+1763 5324 mt 1728 5309 L
+1728 5309 mt 1726 5308 L
+1726 5308 mt 1694 5294 L
+1694 5294 mt 1663 5280 L
+1663 5280 mt 1659 5279 L
+1659 5279 mt 1624 5263 L
+1624 5263 mt 1603 5253 L
+1603 5253 mt 1589 5246 L
+1589 5246 mt 1554 5228 L
+1554 5228 mt 1549 5225 L
+1549 5225 mt 1519 5210 L
+1519 5210 mt 1498 5198 L
+1498 5198 mt 1484 5190 L
+1484 5190 mt 1451 5170 L
+1451 5170 mt 1449 5169 L
+1449 5169 mt 1415 5147 L
+1415 5147 mt 1408 5143 L
+1408 5143 mt 1380 5124 L
+1380 5124 mt 1368 5115 L
+1368 5115 mt 1345 5099 L
+1345 5099 mt 1330 5088 L
+1330 5088 mt 1310 5072 L
+1310 5072 mt 1295 5060 L
+1295 5060 mt 1275 5044 L
+1275 5044 mt 1263 5033 L
+1263 5033 mt 1240 5013 L
+1240 5013 mt 1232 5005 L
+1232 5005 mt 1205 4979 L
+1205 4979 mt 1204 4978 L
+1204 4978 mt 1177 4950 L
+1177 4950 mt 1170 4943 L
+1170 4943 mt 1152 4923 L
+1152 4923 mt 1136 4904 L
+1136 4904 mt 1128 4895 L
+1128 4895 mt 1106 4868 L
+1106 4868 mt 1101 4861 L
+1101 4861 mt 1084 4840 L
+1084 4840 mt 1066 4815 L
+1066 4815 mt 1064 4813 L
+1064 4813 mt 1044 4785 L
+1044 4785 mt 1031 4766 L
+1031 4766 mt 1026 4758 L
+1026 4758 mt 1008 4730 L
+1008 4730 mt 996 4711 L
+ 996 4711 mt 991 4703 L
+ 991 4703 mt 974 4675 L
+ 974 4675 mt 961 4652 L
+ 961 4652 mt 958 4648 L
+ 958 4648 mt 943 4620 L
+ 943 4620 mt 927 4592 L
+ 927 4592 mt 926 4591 L
+ 926 4591 mt 912 4565 L
+ 912 4565 mt 897 4537 L
+ 897 4537 mt 892 4528 L
+ 892 4528 mt 881 4510 L
+ 881 4510 mt 866 4482 L
+ 866 4482 mt 857 4464 L
+ 857 4464 mt 852 4455 L
+ 852 4455 mt 837 4427 L
+ 837 4427 mt 823 4400 L
+ 823 4400 mt 822 4398 L
+ 822 4398 mt 809 4372 L
+ 809 4372 mt 795 4345 L
+ 795 4345 mt 787 4327 L
+ 787 4327 mt 782 4317 L
+ 782 4317 mt 769 4290 L
+ 769 4290 mt 757 4262 L
+ 757 4262 mt 752 4252 L
+ 752 4252 mt 744 4235 L
+ 744 4235 mt 731 4207 L
+ 731 4207 mt 719 4180 L
+ 719 4180 mt 717 4176 L
+ 717 4176 mt 706 4152 L
+ 706 4152 mt 693 4125 L
+ 693 4125 mt 682 4103 L
+ 682 4103 mt 679 4097 L
+ 679 4097 mt 665 4070 L
+ 665 4070 mt 650 4042 L
+ 650 4042 mt 647 4037 L
+ 647 4037 mt 635 4015 L
+ 635 4015 mt 618 3987 L
+ 618 3987 mt 613 3978 L
+ 613 3978 mt 601 3960 L
+ 601 3960 mt 582 3932 L
+ 582 3932 mt 578 3926 L
+ 578 3926 mt 562 3905 L
+ 562 3905 mt 543 3880 L
+ 543 3880 mt 541 3877 L
+ 541 3877 mt 518 3850 L
+ 518 3850 mt 508 3838 L
+ 508 3838 mt 493 3822 L
+ 493 3822 mt 473 3801 L
+ 473 3801 mt 467 3795 L
+ 467 3795 mt 440 3767 L
+ 440 3767 mt 438 3765 L
+ 438 3765 mt 411 3740 L
+ 411 3740 mt 403 3732 L
+ 403 3732 mt 381 3712 L
+ 381 3712 mt 368 3701 L
+ 368 3701 mt 350 3685 L
+ 350 3685 mt 334 3671 L
+ 334 3671 mt 317 3657 L
+ 317 3657 mt 299 3643 L
+ 299 3643 mt 281 3630 L
+ 281 3630 mt 264 3617 L
+ 264 3617 mt 244 3602 L
+ 244 3602 mt 229 3592 L
+ 229 3592 mt 204 3575 L
+ 204 3575 mt 194 3568 L
+ 194 3568 mt 162 3547 L
+ 162 3547 mt 159 3545 L
+ 159 3545 mt 124 3523 L
+ 124 3523 mt 119 3519 L
+ 119 3519 mt 90 3501 L
+ 90 3501 mt 74 3492 L
+ 74 3492 mt 55 3480 L
+ 55 3480 mt 29 3464 L
+ 29 3464 mt 20 3459 L
+ 20 3459 mt -14 3437 L
+ -14 3437 mt -15 3437 L
+ -15 3437 mt -49 3417 L
+ -49 3417 mt -61 3409 L
+ -61 3409 mt -84 3396 L
+ -84 3396 mt -108 3382 L
+-108 3382 mt -119 3375 L
+-119 3375 mt -154 3355 L
+-154 3355 mt -154 3354 L
+-154 3354 mt -188 3335 L
+-188 3335 mt -202 3327 L
+-202 3327 mt -223 3315 L
+-223 3315 mt -251 3299 L
+-251 3299 mt -258 3296 L
+-258 3296 mt -293 3277 L
+-293 3277 mt -302 3272 L
+-302 3272 mt -328 3258 L
+-328 3258 mt -356 3244 L
+-356 3244 mt -363 3241 L
+-363 3241 mt -398 3224 L
+-398 3224 mt -414 3217 L
+-414 3217 mt -433 3209 L
+-433 3209 mt -467 3195 L
+-467 3195 mt -482 3189 L
+-482 3189 mt -502 3182 L
+-502 3182 mt -537 3171 L
+-537 3171 mt -572 3162 L
+-572 3162 mt -574 3162 L
+-574 3162 mt -607 3155 L
+-607 3155 mt -642 3150 L
+-642 3150 mt -677 3147 L
+-677 3147 mt -711 3146 L
+-711 3146 mt -746 3148 L
+-746 3148 mt -781 3152 L
+-781 3152 mt -816 3160 L
+-816 3160 mt -824 3162 L
+-824 3162 mt -851 3170 L
+-851 3170 mt -886 3182 L
+4031 6023 mt 4030 6022 L
+4030 6022 mt 3995 6006 L
+3995 6006 mt 3970 5996 L
+3970 5996 mt 3960 5991 L
+3960 5991 mt 3925 5975 L
+3925 5975 mt 3910 5968 L
+3910 5968 mt 3890 5958 L
+3890 5958 mt 3855 5942 L
+3855 5942 mt 3851 5941 L
+3851 5941 mt 3821 5926 L
+3821 5926 mt 3792 5913 L
+3792 5913 mt 3786 5910 L
+3786 5910 mt 3751 5893 L
+3751 5893 mt 3733 5886 L
+3733 5886 mt 3716 5877 L
+3716 5877 mt 3681 5859 L
+3681 5859 mt 3679 5858 L
+3679 5858 mt 3646 5839 L
+3646 5839 mt 3632 5831 L
+3632 5831 mt 3611 5813 L
+3611 5813 mt 3598 5803 L
+3598 5803 mt 3579 5776 L
+3579 5776 mt 3577 5764 L
+3577 5764 mt 3573 5748 L
+3573 5748 mt 3577 5731 L
+3577 5731 mt 3578 5721 L
+3578 5721 mt 3590 5693 L
+3590 5693 mt 3607 5665 L
+3607 5665 mt 3611 5660 L
+3611 5660 mt 3626 5638 L
+3626 5638 mt 3646 5613 L
+3646 5613 mt 3648 5610 L
+3648 5610 mt 3669 5583 L
+3669 5583 mt 3681 5569 L
+3681 5569 mt 3692 5555 L
+3692 5555 mt 3715 5528 L
+3715 5528 mt 3716 5527 L
+3716 5527 mt 3739 5500 L
+3739 5500 mt 3751 5488 L
+3751 5488 mt 3763 5473 L
+3763 5473 mt 3786 5448 L
+3786 5448 mt 3788 5445 L
+3788 5445 mt 3813 5418 L
+3813 5418 mt 3821 5410 L
+3821 5410 mt 3838 5390 L
+3838 5390 mt 3855 5371 L
+3855 5371 mt 3863 5363 L
+3863 5363 mt 3887 5335 L
+3887 5335 mt 3890 5332 L
+3890 5332 mt 3911 5308 L
+3911 5308 mt 3925 5291 L
+3925 5291 mt 3933 5280 L
+3933 5280 mt 3955 5253 L
+3955 5253 mt 3960 5247 L
+3960 5247 mt 3976 5225 L
+3976 5225 mt 3995 5200 L
+3995 5200 mt 3997 5198 L
+3997 5198 mt 4016 5170 L
+4016 5170 mt 4030 5151 L
+4030 5151 mt 4036 5143 L
+4036 5143 mt 4054 5115 L
+4054 5115 mt 4065 5100 L
+4065 5100 mt 4073 5088 L
+4073 5088 mt 4090 5060 L
+4090 5060 mt 4100 5046 L
+4100 5046 mt 4107 5033 L
+4107 5033 mt 4124 5005 L
+4124 5005 mt 4134 4988 L
+4134 4988 mt 4140 4978 L
+4140 4978 mt 4156 4950 L
+4156 4950 mt 4169 4926 L
+4169 4926 mt 4171 4923 L
+4171 4923 mt 4186 4895 L
+4186 4895 mt 4200 4868 L
+4200 4868 mt 4204 4860 L
+4204 4860 mt 4214 4840 L
+4214 4840 mt 4228 4813 L
+4228 4813 mt 4239 4788 L
+4239 4788 mt 4241 4785 L
+4241 4785 mt 4253 4758 L
+4253 4758 mt 4264 4730 L
+4264 4730 mt 4274 4703 L
+4274 4703 mt 4274 4702 L
+4274 4702 mt 4282 4675 L
+4282 4675 mt 4289 4648 L
+4289 4648 mt 4294 4620 L
+4294 4620 mt 4295 4592 L
+4295 4592 mt 4290 4565 L
+4290 4565 mt 4282 4537 L
+4282 4537 mt 4274 4513 L
+4274 4513 mt 4273 4510 L
+4273 4510 mt 4263 4482 L
+4263 4482 mt 4253 4455 L
+4253 4455 mt 4243 4427 L
+4243 4427 mt 4239 4410 L
+4239 4410 mt 4237 4400 L
+4237 4400 mt 4234 4372 L
+4234 4372 mt 4235 4345 L
+4235 4345 mt 4239 4318 L
+4239 4318 mt 4239 4317 L
+4239 4317 mt 4247 4290 L
+4247 4290 mt 4255 4262 L
+4255 4262 mt 4262 4235 L
+4262 4235 mt 4272 4207 L
+4272 4207 mt 4274 4201 L
+4274 4201 mt 4284 4180 L
+4284 4180 mt 4300 4152 L
+4300 4152 mt 4309 4140 L
+4309 4140 mt 4323 4125 L
+4323 4125 mt 4344 4105 L
+4344 4105 mt 4356 4097 L
+4356 4097 mt 4379 4084 L
+4379 4084 mt 4413 4072 L
+4413 4072 mt 4448 4071 L
+4448 4071 mt 4483 4075 L
+4483 4075 mt 4518 4089 L
+4518 4089 mt 4533 4097 L
+4533 4097 mt 4553 4109 L
+4553 4109 mt 4573 4125 L
+4573 4125 mt 4588 4136 L
+4588 4136 mt 4605 4152 L
+4605 4152 mt 4623 4170 L
+4623 4170 mt 4632 4180 L
+4632 4180 mt 4655 4207 L
+4655 4207 mt 4657 4211 L
+4657 4211 mt 4674 4235 L
+4674 4235 mt 4692 4262 L
+4692 4262 mt 4692 4263 L
+4692 4263 mt 4710 4290 L
+4710 4290 mt 4727 4312 L
+4727 4312 mt 4731 4317 L
+4731 4317 mt 4752 4345 L
+4752 4345 mt 4762 4356 L
+4762 4356 mt 4777 4372 L
+4777 4372 mt 4797 4392 L
+4797 4392 mt 4807 4400 L
+4807 4400 mt 4832 4421 L
+4832 4421 mt 4841 4427 L
+4841 4427 mt 4867 4447 L
+4867 4447 mt 4878 4455 L
+4878 4455 mt 4902 4472 L
+4902 4472 mt 4915 4482 L
+4915 4482 mt 4936 4499 L
+4936 4499 mt 4951 4510 L
+4951 4510 mt 4971 4526 L
+4971 4526 mt 4985 4537 L
+4985 4537 mt 5006 4555 L
+5006 4555 mt 5015 4565 L
+5015 4565 mt 5041 4591 L
+5041 4591 mt 5042 4592 L
+5042 4592 mt 5067 4620 L
+5067 4620 mt 5076 4628 L
+5076 4628 mt 5095 4648 L
+5095 4648 mt 5111 4661 L
+5111 4661 mt 5127 4675 L
+5127 4675 mt 5146 4688 L
+5146 4688 mt 5167 4703 L
+5167 4703 mt 5181 4711 L
+5181 4711 mt 5215 4730 L
+5215 4730 mt 5215 4730 L
+5215 4730 mt 5250 4747 L
+5250 4747 mt 5273 4758 L
+5273 4758 mt 5285 4763 L
+5285 4763 mt 5320 4777 L
+5320 4777 mt 5342 4785 L
+5342 4785 mt 5355 4790 L
+5355 4790 mt 5390 4802 L
+5390 4802 mt 5425 4813 L
+5425 4813 mt 5425 4813 L
+5425 4813 mt 5459 4823 L
+5459 4823 mt 5494 4832 L
+5494 4832 mt 5526 4840 L
+5526 4840 mt 5529 4841 L
+5529 4841 mt 5564 4849 L
+5564 4849 mt 5599 4856 L
+5599 4856 mt 5634 4862 L
+5634 4862 mt 5666 4868 L
+5666 4868 mt 5669 4868 L
+5669 4868 mt 5704 4873 L
+5704 4873 mt 5738 4877 L
+5738 4877 mt 5773 4881 L
+5773 4881 mt 5808 4884 L
+5808 4884 mt 5843 4886 L
+5843 4886 mt 5878 4888 L
+5878 4888 mt 5913 4889 L
+5913 4889 mt 5948 4889 L
+5948 4889 mt 5983 4888 L
+5983 4888 mt 6017 4887 L
+6017 4887 mt 6052 4885 L
+6052 4885 mt 6087 4881 L
+6087 4881 mt 6122 4877 L
+6122 4877 mt 6157 4872 L
+6157 4872 mt 6182 4868 L
+6182 4868 mt 6192 4866 L
+6192 4866 mt 6227 4859 L
+6227 4859 mt 6261 4851 L
+6261 4851 mt 6296 4842 L
+6296 4842 mt 6302 4840 L
+6302 4840 mt 6331 4832 L
+6331 4832 mt 6366 4820 L
+6366 4820 mt 6385 4813 L
+6385 4813 mt 6401 4807 L
+6401 4807 mt 6436 4792 L
+6436 4792 mt 6450 4785 L
+6450 4785 mt 6471 4775 L
+6471 4775 mt 6504 4758 L
+6504 4758 mt 6506 4757 L
+6506 4757 mt 6540 4736 L
+6540 4736 mt 6550 4730 L
+6550 4730 mt 6575 4713 L
+6575 4713 mt 6590 4703 L
+6590 4703 mt 6610 4687 L
+6610 4687 mt 6626 4675 L
+6626 4675 mt 6645 4659 L
+6645 4659 mt 6658 4648 L
+6658 4648 mt 6680 4628 L
+6680 4628 mt 6689 4620 L
+6689 4620 mt 6715 4595 L
+6715 4595 mt 6717 4592 L
+6717 4592 mt 6744 4565 L
+6744 4565 mt 6750 4559 L
+6750 4559 mt 6771 4537 L
+6771 4537 mt 6785 4523 L
+6785 4523 mt 6797 4510 L
+6797 4510 mt 6819 4485 L
+6819 4485 mt 6822 4482 L
+6822 4482 mt 6847 4455 L
+6847 4455 mt 6854 4447 L
+6854 4447 mt 6872 4427 L
+6872 4427 mt 6889 4409 L
+6889 4409 mt 6897 4400 L
+6897 4400 mt 6922 4372 L
+6922 4372 mt 6924 4371 L
+6924 4371 mt 6948 4345 L
+6948 4345 mt 6959 4333 L
+6959 4333 mt 6973 4317 L
+6973 4317 mt 6994 4294 L
+6994 4294 mt 6998 4290 L
+6998 4290 mt 7023 4262 L
+7023 4262 mt 7029 4255 L
+7029 4255 mt 7047 4235 L
+7047 4235 mt 7063 4216 L
+7063 4216 mt 7071 4207 L
+7071 4207 mt 7094 4180 L
+7094 4180 mt 7098 4175 L
+7098 4175 mt 7117 4152 L
+7117 4152 mt 7133 4133 L
+7133 4133 mt 7140 4125 L
+7140 4125 mt 7162 4097 L
+7162 4097 mt 7168 4090 L
+7168 4090 mt 7184 4070 L
+7184 4070 mt 7203 4046 L
+7203 4046 mt 7206 4042 L
+7206 4042 mt 7227 4015 L
+7227 4015 mt 7238 4000 L
+7238 4000 mt 7248 3987 L
+7248 3987 mt 7269 3960 L
+7269 3960 mt 7273 3954 L
+7273 3954 mt 7290 3932 L
+7290 3932 mt 7308 3909 L
+7308 3909 mt 7311 3905 L
+7311 3905 mt 7333 3877 L
+7333 3877 mt 7342 3865 L
+7342 3865 mt 7354 3850 L
+7354 3850 mt 7376 3822 L
+7376 3822 mt 7377 3820 L
+7377 3820 mt 7397 3795 L
+7397 3795 mt 7412 3774 L
+7412 3774 mt 7418 3767 L
+7418 3767 mt 7439 3740 L
+7439 3740 mt 7447 3729 L
+7447 3729 mt 7460 3712 L
+7460 3712 mt 7481 3685 L
+7481 3685 mt 7482 3683 L
+7482 3683 mt 7503 3657 L
+7503 3657 mt 7517 3639 L
+7517 3639 mt 7525 3630 L
+7525 3630 mt 7547 3602 L
+7547 3602 mt 7552 3597 L
+7552 3597 mt 7571 3575 L
+7571 3575 mt 7587 3556 L
+7587 3556 mt 7595 3547 L
+7595 3547 mt 7619 3519 L
+7619 3519 mt 7621 3517 L
+7621 3517 mt 7645 3492 L
+7645 3492 mt 7656 3479 L
+7656 3479 mt 7671 3464 L
+7671 3464 mt 7691 3443 L
+7691 3443 mt 7698 3437 L
+7698 3437 mt 7725 3409 L
+7725 3409 mt 7726 3409 L
+7726 3409 mt 7755 3382 L
+7755 3382 mt 7761 3376 L
+7761 3376 mt 7785 3354 L
+7785 3354 mt 7796 3344 L
+7796 3344 mt 7817 3327 L
+7817 3327 mt 7831 3315 L
+7831 3315 mt 7850 3299 L
+7850 3299 mt 7865 3287 L
+7865 3287 mt 7886 3272 L
+7886 3272 mt 7900 3261 L
+7900 3261 mt 7925 3244 L
+7925 3244 mt 7935 3237 L
+7935 3237 mt 7969 3217 L
+7969 3217 mt 7970 3216 L
+7970 3216 mt 8005 3198 L
+4092 -992 mt 4100 -989 L
+4100 -989 mt 4134 -973 L
+4134 -973 mt 4153 -964 L
+4153 -964 mt 4169 -957 L
+4169 -957 mt 4204 -941 L
+4204 -941 mt 4213 -937 L
+4213 -937 mt 4239 -925 L
+4239 -925 mt 4273 -909 L
+4273 -909 mt 4274 -909 L
+4274 -909 mt 4309 -893 L
+4309 -893 mt 4333 -882 L
+4333 -882 mt 4344 -877 L
+4344 -877 mt 4379 -862 L
+4379 -862 mt 4397 -854 L
+4397 -854 mt 4413 -847 L
+4413 -847 mt 4448 -833 L
+4448 -833 mt 4463 -827 L
+4463 -827 mt 4483 -819 L
+4483 -819 mt 4518 -805 L
+4518 -805 mt 4532 -799 L
+4532 -799 mt 4553 -791 L
+4553 -791 mt 4588 -777 L
+4588 -777 mt 4600 -772 L
+4600 -772 mt 4623 -762 L
+4623 -762 mt 4657 -747 L
+4657 -747 mt 4665 -744 L
+4665 -744 mt 4692 -732 L
+4692 -732 mt 4727 -717 L
+4727 -717 mt 4728 -717 L
+4728 -717 mt 4762 -701 L
+4762 -701 mt 4788 -689 L
+4788 -689 mt 4797 -685 L
+4797 -685 mt 4832 -669 L
+4832 -669 mt 4847 -661 L
+4847 -661 mt 4867 -653 L
+4867 -653 mt 4902 -636 L
+4902 -636 mt 4906 -634 L
+4906 -634 mt 4936 -620 L
+4936 -620 mt 4965 -606 L
+4965 -606 mt 4971 -603 L
+4971 -603 mt 5006 -587 L
+5006 -587 mt 5023 -579 L
+5023 -579 mt 5041 -570 L
+5041 -570 mt 5076 -554 L
+5076 -554 mt 5081 -551 L
+5081 -551 mt 5111 -537 L
+5111 -537 mt 5138 -524 L
+5138 -524 mt 5146 -520 L
+5146 -520 mt 5181 -504 L
+5181 -504 mt 5195 -496 L
+5195 -496 mt 5215 -487 L
+5215 -487 mt 5250 -470 L
+5250 -470 mt 5252 -469 L
+5252 -469 mt 5285 -453 L
+5285 -453 mt 5308 -441 L
+5308 -441 mt 5320 -436 L
+5320 -436 mt 5355 -418 L
+5355 -418 mt 5364 -414 L
+5364 -414 mt 5390 -401 L
+5390 -401 mt 5418 -386 L
+5418 -386 mt 5425 -383 L
+5425 -383 mt 5459 -365 L
+5459 -365 mt 5472 -359 L
+5472 -359 mt 5494 -347 L
+5494 -347 mt 5524 -331 L
+5524 -331 mt 5529 -329 L
+5529 -329 mt 5564 -310 L
+5564 -310 mt 5576 -304 L
+5576 -304 mt 5599 -292 L
+5599 -292 mt 5626 -276 L
+5626 -276 mt 5634 -272 L
+5634 -272 mt 5669 -253 L
+5669 -253 mt 5676 -249 L
+5676 -249 mt 5704 -233 L
+5704 -233 mt 5724 -221 L
+5724 -221 mt 5738 -213 L
+5738 -213 mt 5771 -194 L
+5771 -194 mt 5773 -192 L
+5773 -192 mt 5808 -171 L
+5808 -171 mt 5816 -166 L
+5816 -166 mt 5843 -149 L
+5843 -149 mt 5860 -139 L
+5860 -139 mt 5878 -127 L
+5878 -127 mt 5902 -111 L
+5902 -111 mt 5913 -104 L
+5913 -104 mt 5943 -84 L
+5943 -84 mt 5948 -81 L
+5948 -81 mt 5983 -57 L
+5983 -57 mt 5983 -56 L
+5983 -56 mt 6017 -32 L
+6017 -32 mt 6022 -29 L
+6022 -29 mt 6052 -7 L
+6052 -7 mt 6060 -1 L
+6060 -1 mt 6087 19 L
+6087 19 mt 6096 25 L
+6096 25 mt 6122 46 L
+6122 46 mt 6131 53 L
+6131 53 mt 6157 73 L
+6157 73 mt 6166 80 L
+6166 80 mt 6192 101 L
+6192 101 mt 6200 108 L
+6200 108 mt 6227 130 L
+6227 130 mt 6233 135 L
+6233 135 mt 6261 160 L
+6261 160 mt 6265 163 L
+6265 163 mt 6296 190 L
+6296 190 mt 6297 190 L
+6297 190 mt 6328 218 L
+6328 218 mt 6331 221 L
+6331 221 mt 6359 245 L
+6359 245 mt 6366 251 L
+6366 251 mt 6390 273 L
+6390 273 mt 6401 283 L
+6401 283 mt 6421 300 L
+6421 300 mt 6436 314 L
+6436 314 mt 6451 328 L
+6451 328 mt 6471 346 L
+6471 346 mt 6482 355 L
+6482 355 mt 6506 377 L
+6506 377 mt 6512 383 L
+6512 383 mt 6540 408 L
+6540 408 mt 6543 411 L
+6543 411 mt 6574 438 L
+6574 438 mt 6575 439 L
+6575 439 mt 6605 466 L
+6605 466 mt 6610 470 L
+6610 470 mt 6636 493 L
+6636 493 mt 6645 501 L
+6645 501 mt 6667 521 L
+6667 521 mt 6680 532 L
+6680 532 mt 6698 548 L
+6698 548 mt 6715 563 L
+6715 563 mt 6729 576 L
+6729 576 mt 6750 595 L
+6750 595 mt 6759 603 L
+6759 603 mt 6785 626 L
+6785 626 mt 6789 631 L
+6789 631 mt 6819 658 L
+6819 658 mt 6819 658 L
+6819 658 mt 6849 686 L
+6849 686 mt 6854 690 L
+6854 690 mt 6879 713 L
+6879 713 mt 6889 722 L
+6889 722 mt 6909 741 L
+6909 741 mt 6924 754 L
+6924 754 mt 6939 768 L
+6939 768 mt 6959 786 L
+6959 786 mt 6969 796 L
+6969 796 mt 6994 819 L
+6994 819 mt 6999 823 L
+6999 823 mt 7028 851 L
+7028 851 mt 7029 851 L
+7029 851 mt 7057 878 L
+7057 878 mt 7063 884 L
+7063 884 mt 7087 906 L
+7087 906 mt 7098 917 L
+7098 917 mt 7116 933 L
+7116 933 mt 7133 950 L
+7133 950 mt 7145 961 L
+7145 961 mt 7168 983 L
+7168 983 mt 7174 988 L
+7174 988 mt 7203 1016 L
+7203 1016 mt 7203 1016 L
+7203 1016 mt 7233 1043 L
+7233 1043 mt 7238 1048 L
+7238 1048 mt 7263 1071 L
+7263 1071 mt 7273 1080 L
+7273 1080 mt 7293 1098 L
+7293 1098 mt 7308 1111 L
+7308 1111 mt 7324 1126 L
+7324 1126 mt 7342 1142 L
+7342 1142 mt 7357 1153 L
+7357 1153 mt 7377 1171 L
+7377 1171 mt 7390 1181 L
+7390 1181 mt 7412 1199 L
+7412 1199 mt 7424 1208 L
+7424 1208 mt 7447 1227 L
+7447 1227 mt 7459 1236 L
+7459 1236 mt 7482 1254 L
+7482 1254 mt 7494 1263 L
+7494 1263 mt 7517 1281 L
+7517 1281 mt 7530 1291 L
+7530 1291 mt 7552 1307 L
+7552 1307 mt 7567 1318 L
+7567 1318 mt 7587 1334 L
+7587 1334 mt 7604 1346 L
+7604 1346 mt 7621 1359 L
+7621 1359 mt 7643 1373 L
+7643 1373 mt 7656 1383 L
+7656 1383 mt 7683 1401 L
+7683 1401 mt 7691 1406 L
+7691 1406 mt 7726 1428 L
+7726 1428 mt 7726 1428 L
+7726 1428 mt 7761 1449 L
+7761 1449 mt 7773 1456 L
+7773 1456 mt 7796 1469 L
+7796 1469 mt 7823 1484 L
+7823 1484 mt 7831 1487 L
+7831 1487 mt 7865 1504 L
+7865 1504 mt 7881 1511 L
+7881 1511 mt 7900 1520 L
+7900 1520 mt 7935 1533 L
+7935 1533 mt 7954 1539 L
+7954 1539 mt 7970 1544 L
+7970 1544 mt 8005 1552 L
+-886 1726 mt -853 1731 L
+-853 1731 mt -851 1731 L
+-851 1731 mt -816 1734 L
+-816 1734 mt -781 1732 L
+-781 1732 mt -775 1731 L
+-775 1731 mt -746 1727 L
+-746 1727 mt -711 1718 L
+-711 1718 mt -677 1707 L
+-677 1707 mt -670 1704 L
+-670 1704 mt -642 1691 L
+-642 1691 mt -613 1676 L
+-613 1676 mt -607 1673 L
+-607 1673 mt -572 1651 L
+-572 1651 mt -569 1649 L
+-569 1649 mt -537 1625 L
+-537 1625 mt -533 1621 L
+-533 1621 mt -502 1595 L
+-502 1595 mt -501 1594 L
+-501 1594 mt -472 1566 L
+-472 1566 mt -467 1562 L
+-467 1562 mt -445 1539 L
+-445 1539 mt -433 1526 L
+-433 1526 mt -419 1511 L
+-419 1511 mt -398 1487 L
+-398 1487 mt -395 1484 L
+-395 1484 mt -371 1456 L
+-371 1456 mt -363 1446 L
+-363 1446 mt -349 1428 L
+-349 1428 mt -328 1401 L
+-328 1401 mt -328 1401 L
+-328 1401 mt -308 1373 L
+-308 1373 mt -293 1353 L
+-293 1353 mt -288 1346 L
+-288 1346 mt -269 1318 L
+-269 1318 mt -258 1302 L
+-258 1302 mt -251 1291 L
+-251 1291 mt -234 1263 L
+-234 1263 mt -223 1246 L
+-223 1246 mt -217 1236 L
+-217 1236 mt -201 1208 L
+-201 1208 mt -188 1187 L
+-188 1187 mt -185 1181 L
+-185 1181 mt -170 1153 L
+-170 1153 mt -155 1126 L
+-155 1126 mt -154 1122 L
+-154 1122 mt -141 1098 L
+-141 1098 mt -126 1071 L
+-126 1071 mt -119 1058 L
+-119 1058 mt -111 1043 L
+-111 1043 mt -96 1016 L
+ -96 1016 mt -84 994 L
+ -84 994 mt -80 988 L
+ -80 988 mt -65 961 L
+ -65 961 mt -49 934 L
+ -49 934 mt -48 933 L
+ -48 933 mt -32 906 L
+ -32 906 mt -14 878 L
+ -14 878 mt -14 878 L
+ -14 878 mt 2 851 L
+ 2 851 mt 20 824 L
+ 20 824 mt 21 823 L
+ 21 823 mt 39 796 L
+ 39 796 mt 55 774 L
+ 55 774 mt 58 768 L
+ 58 768 mt 78 741 L
+ 78 741 mt 90 725 L
+ 90 725 mt 98 713 L
+ 98 713 mt 119 686 L
+ 119 686 mt 124 679 L
+ 124 679 mt 140 658 L
+ 140 658 mt 159 634 L
+ 159 634 mt 162 631 L
+ 162 631 mt 184 603 L
+ 184 603 mt 194 591 L
+ 194 591 mt 207 576 L
+ 207 576 mt 229 549 L
+ 229 549 mt 230 548 L
+ 230 548 mt 253 521 L
+ 253 521 mt 264 508 L
+ 264 508 mt 277 493 L
+ 277 493 mt 299 468 L
+ 299 468 mt 300 466 L
+ 300 466 mt 324 438 L
+ 324 438 mt 334 428 L
+ 334 428 mt 349 411 L
+ 349 411 mt 368 388 L
+ 368 388 mt 373 383 L
+ 373 383 mt 398 355 L
+ 398 355 mt 403 350 L
+ 403 350 mt 423 328 L
+ 423 328 mt 438 312 L
+ 438 312 mt 450 300 L
+ 450 300 mt 473 277 L
+ 473 277 mt 477 273 L
+ 477 273 mt 505 245 L
+ 505 245 mt 508 243 L
+ 508 243 mt 535 218 L
+ 535 218 mt 543 211 L
+ 543 211 mt 567 190 L
+ 567 190 mt 578 182 L
+ 578 182 mt 601 163 L
+ 601 163 mt 613 154 L
+ 613 154 mt 637 135 L
+ 637 135 mt 647 128 L
+ 647 128 mt 676 108 L
+ 676 108 mt 682 104 L
+ 682 104 mt 717 80 L
+ 717 80 mt 717 80 L
+ 717 80 mt 752 58 L
+ 752 58 mt 760 53 L
+ 760 53 mt 787 36 L
+ 787 36 mt 805 25 L
+ 805 25 mt 822 15 L
+ 822 15 mt 851 -1 L
+ 851 -1 mt 857 -4 L
+ 857 -4 mt 892 -24 L
+ 892 -24 mt 900 -29 L
+ 900 -29 mt 926 -43 L
+ 926 -43 mt 951 -56 L
+ 951 -56 mt 961 -62 L
+ 961 -62 mt 996 -80 L
+ 996 -80 mt 1004 -84 L
+1004 -84 mt 1031 -97 L
+1031 -97 mt 1061 -111 L
+1061 -111 mt 1066 -114 L
+1066 -114 mt 1101 -130 L
+1101 -130 mt 1120 -139 L
+1120 -139 mt 1136 -146 L
+1136 -146 mt 1170 -161 L
+1170 -161 mt 1182 -166 L
+1182 -166 mt 1205 -176 L
+1205 -176 mt 1240 -191 L
+1240 -191 mt 1246 -194 L
+1246 -194 mt 1275 -206 L
+1275 -206 mt 1310 -221 L
+1310 -221 mt 1311 -221 L
+1311 -221 mt 1345 -236 L
+1345 -236 mt 1377 -249 L
+1377 -249 mt 1380 -250 L
+1380 -250 mt 1415 -264 L
+1415 -264 mt 1447 -276 L
+1447 -276 mt 1449 -277 L
+1449 -277 mt 1484 -291 L
+1484 -291 mt 1519 -304 L
+1519 -304 mt 1519 -304 L
+1519 -304 mt 1554 -317 L
+1554 -317 mt 1589 -329 L
+1589 -329 mt 1596 -331 L
+1596 -331 mt 1624 -341 L
+1624 -341 mt 1659 -353 L
+1659 -353 mt 1676 -359 L
+1676 -359 mt 1694 -365 L
+1694 -365 mt 1728 -376 L
+1728 -376 mt 1759 -386 L
+1759 -386 mt 1763 -388 L
+1763 -388 mt 1798 -399 L
+1798 -399 mt 1833 -411 L
+1833 -411 mt 1843 -414 L
+1843 -414 mt 1868 -422 L
+1868 -422 mt 1903 -434 L
+1903 -434 mt 1925 -441 L
+1925 -441 mt 1938 -446 L
+1938 -446 mt 1972 -458 L
+1972 -458 mt 2002 -469 L
+2002 -469 mt 2007 -471 L
+2007 -471 mt 2042 -484 L
+2042 -484 mt 2077 -496 L
+2077 -496 mt 2077 -497 L
+2077 -497 mt 2112 -510 L
+2112 -510 mt 2147 -522 L
+2147 -522 mt 2151 -524 L
+2151 -524 mt 2182 -536 L
+2182 -536 mt 2217 -548 L
+2217 -548 mt 2225 -551 L
+2225 -551 mt 2251 -561 L
+2251 -561 mt 2286 -574 L
+2286 -574 mt 2300 -579 L
+2300 -579 mt 2321 -587 L
+2321 -587 mt 2356 -600 L
+2356 -600 mt 2374 -606 L
+2374 -606 mt 2391 -613 L
+2391 -613 mt 2426 -626 L
+2426 -626 mt 2445 -634 L
+2445 -634 mt 2461 -640 L
+2461 -640 mt 2496 -655 L
+2496 -655 mt 2512 -661 L
+2512 -661 mt 2530 -669 L
+2530 -669 mt 2565 -685 L
+2565 -685 mt 2576 -689 L
+2576 -689 mt 2600 -700 L
+2600 -700 mt 2635 -716 L
+2635 -716 mt 2637 -717 L
+2637 -717 mt 2670 -732 L
+2670 -732 mt 2698 -744 L
+2698 -744 mt 2705 -747 L
+2705 -747 mt 2740 -762 L
+2740 -762 mt 2762 -772 L
+2762 -772 mt 2774 -777 L
+2774 -777 mt 2809 -792 L
+2809 -792 mt 2829 -799 L
+2829 -799 mt 2844 -806 L
+2844 -806 mt 2879 -819 L
+2879 -819 mt 2898 -827 L
+2898 -827 mt 2914 -833 L
+2914 -833 mt 2949 -847 L
+2949 -847 mt 2968 -854 L
+2968 -854 mt 2984 -860 L
+2984 -860 mt 3019 -873 L
+3019 -873 mt 3042 -882 L
+3042 -882 mt 3053 -886 L
+3053 -886 mt 3088 -898 L
+3088 -898 mt 3123 -909 L
+3123 -909 mt 3123 -909 L
+3123 -909 mt 3158 -920 L
+3158 -920 mt 3193 -929 L
+3193 -929 mt 3227 -937 L
+3227 -937 mt 3228 -937 L
+3228 -937 mt 3263 -944 L
+3263 -944 mt 3298 -950 L
+3298 -950 mt 3332 -955 L
+3332 -955 mt 3367 -958 L
+3367 -958 mt 3402 -960 L
+3402 -960 mt 3437 -962 L
+3437 -962 mt 3472 -961 L
+3472 -961 mt 3507 -961 L
+3507 -961 mt 3542 -959 L
+3542 -959 mt 3577 -956 L
+3577 -956 mt 3611 -953 L
+3611 -953 mt 3646 -950 L
+3646 -950 mt 3681 -946 L
+3681 -946 mt 3716 -941 L
+3716 -941 mt 3744 -937 L
+3744 -937 mt 3751 -936 L
+3751 -936 mt 3786 -930 L
+3786 -930 mt 3821 -924 L
+3821 -924 mt 3855 -917 L
+3855 -917 mt 3890 -910 L
+3890 -910 mt 3895 -909 L
+3895 -909 mt 3925 -902 L
+3925 -902 mt 3960 -894 L
+3960 -894 mt 3995 -885 L
+3995 -885 mt 4007 -882 L
+4007 -882 mt 4030 -876 L
+4030 -876 mt 4065 -866 L
+4065 -866 mt 4100 -855 L
+4100 -855 mt 4102 -854 L
+4102 -854 mt 4134 -844 L
+4134 -844 mt 4169 -833 L
+4169 -833 mt 4188 -827 L
+4188 -827 mt 4204 -822 L
+4204 -822 mt 4239 -810 L
+4239 -810 mt 4271 -799 L
+4271 -799 mt 4274 -798 L
+4274 -798 mt 4309 -787 L
+4309 -787 mt 4344 -776 L
+4344 -776 mt 4356 -772 L
+4356 -772 mt 4379 -764 L
+4379 -764 mt 4413 -753 L
+4413 -753 mt 4441 -744 L
+4441 -744 mt 4448 -742 L
+4448 -742 mt 4483 -731 L
+4483 -731 mt 4518 -719 L
+4518 -719 mt 4526 -717 L
+4526 -717 mt 4553 -708 L
+4553 -708 mt 4588 -695 L
+4588 -695 mt 4605 -689 L
+4605 -689 mt 4623 -683 L
+4623 -683 mt 4657 -670 L
+4657 -670 mt 4680 -661 L
+4680 -661 mt 4692 -657 L
+4692 -657 mt 4727 -643 L
+4727 -643 mt 4750 -634 L
+4750 -634 mt 4762 -629 L
+4762 -629 mt 4797 -615 L
+4797 -615 mt 4817 -606 L
+4817 -606 mt 4832 -600 L
+4832 -600 mt 4867 -586 L
+4867 -586 mt 4882 -579 L
+4882 -579 mt 4902 -571 L
+4902 -571 mt 4936 -556 L
+4936 -556 mt 4946 -551 L
+4946 -551 mt 4971 -540 L
+4971 -540 mt 5006 -525 L
+5006 -525 mt 5008 -524 L
+5008 -524 mt 5041 -509 L
+5041 -509 mt 5069 -496 L
+5069 -496 mt 5076 -494 L
+5076 -494 mt 5111 -478 L
+5111 -478 mt 5130 -469 L
+5130 -469 mt 5146 -462 L
+5146 -462 mt 5181 -446 L
+5181 -446 mt 5191 -441 L
+5191 -441 mt 5215 -430 L
+5215 -430 mt 5250 -414 L
+5250 -414 mt 5251 -414 L
+5251 -414 mt 5285 -398 L
+5285 -398 mt 5309 -386 L
+5309 -386 mt 5320 -381 L
+5320 -381 mt 5355 -364 L
+5355 -364 mt 5366 -359 L
+5366 -359 mt 5390 -348 L
+5390 -348 mt 5422 -331 L
+5422 -331 mt 5425 -330 L
+5425 -330 mt 5459 -313 L
+5459 -313 mt 5477 -304 L
+5477 -304 mt 5494 -295 L
+5494 -295 mt 5529 -277 L
+5529 -277 mt 5530 -276 L
+5530 -276 mt 5564 -259 L
+5564 -259 mt 5583 -249 L
+5583 -249 mt 5599 -240 L
+5599 -240 mt 5633 -221 L
+5633 -221 mt 5634 -221 L
+5634 -221 mt 5669 -202 L
+5669 -202 mt 5683 -194 L
+5683 -194 mt 5704 -182 L
+5704 -182 mt 5730 -166 L
+5730 -166 mt 5738 -162 L
+5738 -162 mt 5773 -141 L
+5773 -141 mt 5776 -139 L
+5776 -139 mt 5808 -119 L
+5808 -119 mt 5821 -111 L
+5821 -111 mt 5843 -97 L
+5843 -97 mt 5863 -84 L
+5863 -84 mt 5878 -74 L
+5878 -74 mt 5904 -56 L
+5904 -56 mt 5913 -50 L
+5913 -50 mt 5944 -29 L
+5944 -29 mt 5948 -26 L
+5948 -26 mt 5983 -1 L
+5983 -1 mt 5983 -1 L
+5983 -1 mt 6017 23 L
+6017 23 mt 6020 25 L
+6020 25 mt 6052 50 L
+6052 50 mt 6056 53 L
+6056 53 mt 6087 77 L
+6087 77 mt 6092 80 L
+6092 80 mt 6122 105 L
+6122 105 mt 6126 108 L
+6126 108 mt 6157 133 L
+6157 133 mt 6159 135 L
+6159 135 mt 6192 162 L
+6192 162 mt 6192 163 L
+6192 163 mt 6224 190 L
+6224 190 mt 6227 192 L
+6227 192 mt 6256 218 L
+6256 218 mt 6261 223 L
+6261 223 mt 6287 245 L
+6287 245 mt 6296 254 L
+6296 254 mt 6318 273 L
+6318 273 mt 6331 285 L
+6331 285 mt 6348 300 L
+6348 300 mt 6366 317 L
+6366 317 mt 6378 328 L
+6378 328 mt 6401 349 L
+6401 349 mt 6409 355 L
+6409 355 mt 6436 381 L
+6436 381 mt 6439 383 L
+6439 383 mt 6469 411 L
+6469 411 mt 6471 412 L
+6471 412 mt 6499 438 L
+6499 438 mt 6506 444 L
+6506 444 mt 6530 466 L
+6530 466 mt 6540 475 L
+6540 475 mt 6560 493 L
+6560 493 mt 6575 506 L
+6575 506 mt 6591 521 L
+6591 521 mt 6610 538 L
+6610 538 mt 6622 548 L
+6622 548 mt 6645 569 L
+6645 569 mt 6652 576 L
+6652 576 mt 6680 601 L
+6680 601 mt 6682 603 L
+6682 603 mt 6712 631 L
+6712 631 mt 6715 633 L
+6715 633 mt 6742 658 L
+6742 658 mt 6750 665 L
+6750 665 mt 6772 686 L
+6772 686 mt 6785 697 L
+6785 697 mt 6802 713 L
+6802 713 mt 6819 729 L
+6819 729 mt 6832 741 L
+6832 741 mt 6854 762 L
+6854 762 mt 6861 768 L
+6861 768 mt 6889 794 L
+6889 794 mt 6891 796 L
+6891 796 mt 6920 823 L
+6920 823 mt 6924 827 L
+6924 827 mt 6949 851 L
+6949 851 mt 6959 860 L
+6959 860 mt 6978 878 L
+6978 878 mt 6994 894 L
+6994 894 mt 7006 906 L
+7006 906 mt 7029 928 L
+7029 928 mt 7034 933 L
+7034 933 mt 7063 961 L
+7063 961 mt 7063 962 L
+7063 962 mt 7091 988 L
+7091 988 mt 7098 996 L
+7098 996 mt 7119 1016 L
+7119 1016 mt 7133 1030 L
+7133 1030 mt 7147 1043 L
+7147 1043 mt 7168 1064 L
+7168 1064 mt 7175 1071 L
+7175 1071 mt 7203 1098 L
+7203 1098 mt 7203 1098 L
+7203 1098 mt 7231 1126 L
+7231 1126 mt 7238 1132 L
+7238 1132 mt 7260 1153 L
+7260 1153 mt 7273 1165 L
+7273 1165 mt 7289 1181 L
+7289 1181 mt 7308 1198 L
+7308 1198 mt 7319 1208 L
+7319 1208 mt 7342 1229 L
+7342 1229 mt 7350 1236 L
+7350 1236 mt 7377 1260 L
+7377 1260 mt 7381 1263 L
+7381 1263 mt 7412 1291 L
+7412 1291 mt 7412 1291 L
+7412 1291 mt 7444 1318 L
+7444 1318 mt 7447 1322 L
+7447 1322 mt 7475 1346 L
+7475 1346 mt 7482 1352 L
+7482 1352 mt 7506 1373 L
+7506 1373 mt 7517 1383 L
+7517 1383 mt 7538 1401 L
+7538 1401 mt 7552 1413 L
+7552 1413 mt 7570 1428 L
+7570 1428 mt 7587 1443 L
+7587 1443 mt 7603 1456 L
+7603 1456 mt 7621 1472 L
+7621 1472 mt 7636 1484 L
+7636 1484 mt 7656 1500 L
+7656 1500 mt 7671 1511 L
+7671 1511 mt 7691 1528 L
+7691 1528 mt 7706 1539 L
+7706 1539 mt 7726 1555 L
+7726 1555 mt 7742 1566 L
+7742 1566 mt 7761 1581 L
+7761 1581 mt 7779 1594 L
+7779 1594 mt 7796 1606 L
+7796 1606 mt 7819 1621 L
+7819 1621 mt 7831 1629 L
+7831 1629 mt 7862 1649 L
+7862 1649 mt 7865 1651 L
+7865 1651 mt 7900 1671 L
+7900 1671 mt 7911 1676 L
+7911 1676 mt 7935 1689 L
+7935 1689 mt 7969 1704 L
+7969 1704 mt 7970 1704 L
+7970 1704 mt 8005 1717 L
+-886 2946 mt -874 2942 L
+-874 2942 mt -851 2933 L
+-851 2933 mt -816 2923 L
+-816 2923 mt -781 2918 L
+-781 2918 mt -746 2918 L
+-746 2918 mt -711 2921 L
+-711 2921 mt -677 2929 L
+-677 2929 mt -642 2939 L
+-642 2939 mt -636 2942 L
+-636 2942 mt -607 2953 L
+-607 2953 mt -572 2968 L
+-572 2968 mt -571 2969 L
+-571 2969 mt -537 2986 L
+-537 2986 mt -518 2997 L
+-518 2997 mt -502 3005 L
+-502 3005 mt -470 3024 L
+-470 3024 mt -467 3025 L
+-467 3025 mt -433 3046 L
+-433 3046 mt -424 3052 L
+-424 3052 mt -398 3068 L
+-398 3068 mt -380 3079 L
+-380 3079 mt -363 3090 L
+-363 3090 mt -337 3107 L
+-337 3107 mt -328 3112 L
+-328 3112 mt -294 3134 L
+-294 3134 mt -293 3135 L
+-293 3135 mt -258 3159 L
+-258 3159 mt -254 3162 L
+-254 3162 mt -223 3183 L
+-223 3183 mt -214 3189 L
+-214 3189 mt -188 3206 L
+-188 3206 mt -174 3217 L
+-174 3217 mt -154 3231 L
+-154 3231 mt -134 3244 L
+-134 3244 mt -119 3255 L
+-119 3255 mt -94 3272 L
+ -94 3272 mt -84 3279 L
+ -84 3279 mt -54 3299 L
+ -54 3299 mt -49 3303 L
+ -49 3303 mt -14 3327 L
+ -14 3327 mt -14 3327 L
+ -14 3327 mt 20 3350 L
+ 20 3350 mt 26 3354 L
+ 26 3354 mt 55 3374 L
+ 55 3374 mt 67 3382 L
+ 67 3382 mt 90 3397 L
+ 90 3397 mt 108 3409 L
+ 108 3409 mt 124 3420 L
+ 124 3420 mt 149 3437 L
+ 149 3437 mt 159 3443 L
+ 159 3443 mt 191 3464 L
+ 191 3464 mt 194 3467 L
+ 194 3467 mt 229 3490 L
+ 229 3490 mt 231 3492 L
+ 231 3492 mt 264 3515 L
+ 264 3515 mt 270 3519 L
+ 270 3519 mt 299 3540 L
+ 299 3540 mt 308 3547 L
+ 308 3547 mt 334 3566 L
+ 334 3566 mt 344 3575 L
+ 344 3575 mt 368 3594 L
+ 368 3594 mt 379 3602 L
+ 379 3602 mt 403 3623 L
+ 403 3623 mt 411 3630 L
+ 411 3630 mt 438 3653 L
+ 438 3653 mt 442 3657 L
+ 442 3657 mt 473 3685 L
+ 473 3685 mt 473 3685 L
+ 473 3685 mt 501 3712 L
+ 501 3712 mt 508 3719 L
+ 508 3719 mt 529 3740 L
+ 529 3740 mt 543 3755 L
+ 543 3755 mt 554 3767 L
+ 554 3767 mt 578 3793 L
+ 578 3793 mt 579 3795 L
+ 579 3795 mt 601 3822 L
+ 601 3822 mt 613 3836 L
+ 613 3836 mt 623 3850 L
+ 623 3850 mt 642 3877 L
+ 642 3877 mt 647 3885 L
+ 647 3885 mt 660 3905 L
+ 660 3905 mt 677 3932 L
+ 677 3932 mt 682 3941 L
+ 682 3941 mt 692 3960 L
+ 692 3960 mt 707 3987 L
+ 707 3987 mt 717 4007 L
+ 717 4007 mt 721 4015 L
+ 721 4015 mt 734 4042 L
+ 734 4042 mt 746 4070 L
+ 746 4070 mt 752 4082 L
+ 752 4082 mt 759 4097 L
+ 759 4097 mt 770 4125 L
+ 770 4125 mt 782 4152 L
+ 782 4152 mt 787 4164 L
+ 787 4164 mt 793 4180 L
+ 793 4180 mt 805 4207 L
+ 805 4207 mt 816 4235 L
+ 816 4235 mt 822 4249 L
+ 822 4249 mt 827 4262 L
+ 827 4262 mt 839 4290 L
+ 839 4290 mt 851 4317 L
+ 851 4317 mt 857 4330 L
+ 857 4330 mt 863 4345 L
+ 863 4345 mt 876 4372 L
+ 876 4372 mt 890 4400 L
+ 890 4400 mt 892 4404 L
+ 892 4404 mt 903 4427 L
+ 903 4427 mt 918 4455 L
+ 918 4455 mt 926 4472 L
+ 926 4472 mt 932 4482 L
+ 932 4482 mt 947 4510 L
+ 947 4510 mt 961 4536 L
+ 961 4536 mt 962 4537 L
+ 962 4537 mt 977 4565 L
+ 977 4565 mt 992 4592 L
+ 992 4592 mt 996 4599 L
+ 996 4599 mt 1008 4620 L
+1008 4620 mt 1024 4648 L
+1024 4648 mt 1031 4660 L
+1031 4660 mt 1040 4675 L
+1040 4675 mt 1057 4703 L
+1057 4703 mt 1066 4716 L
+1066 4716 mt 1075 4730 L
+1075 4730 mt 1093 4758 L
+1093 4758 mt 1101 4768 L
+1101 4768 mt 1113 4785 L
+1113 4785 mt 1133 4813 L
+1133 4813 mt 1136 4816 L
+1136 4816 mt 1155 4840 L
+1155 4840 mt 1170 4859 L
+1170 4859 mt 1177 4868 L
+1177 4868 mt 1202 4895 L
+1202 4895 mt 1205 4899 L
+1205 4899 mt 1227 4923 L
+1227 4923 mt 1240 4936 L
+1240 4936 mt 1254 4950 L
+1254 4950 mt 1275 4970 L
+1275 4970 mt 1283 4978 L
+1283 4978 mt 1310 5001 L
+1310 5001 mt 1315 5005 L
+1315 5005 mt 1345 5030 L
+1345 5030 mt 1348 5033 L
+1348 5033 mt 1380 5056 L
+1380 5056 mt 1385 5060 L
+1385 5060 mt 1415 5081 L
+1415 5081 mt 1424 5088 L
+1424 5088 mt 1449 5104 L
+1449 5104 mt 1467 5115 L
+1467 5115 mt 1484 5126 L
+1484 5126 mt 1512 5143 L
+1512 5143 mt 1519 5147 L
+1519 5147 mt 1554 5166 L
+1554 5166 mt 1563 5170 L
+1563 5170 mt 1589 5184 L
+1589 5184 mt 1618 5198 L
+1618 5198 mt 1624 5201 L
+1624 5201 mt 1659 5217 L
+1659 5217 mt 1678 5225 L
+1678 5225 mt 1694 5232 L
+1694 5232 mt 1728 5247 L
+1728 5247 mt 1743 5253 L
+1743 5253 mt 1763 5261 L
+1763 5261 mt 1798 5275 L
+1798 5275 mt 1812 5280 L
+1812 5280 mt 1833 5289 L
+1833 5289 mt 1868 5302 L
+1868 5302 mt 1884 5308 L
+1884 5308 mt 1903 5315 L
+1903 5315 mt 1938 5328 L
+1938 5328 mt 1959 5335 L
+1959 5335 mt 1972 5340 L
+1972 5340 mt 2007 5352 L
+2007 5352 mt 2038 5363 L
+2038 5363 mt 2042 5364 L
+2042 5364 mt 2077 5376 L
+2077 5376 mt 2112 5387 L
+2112 5387 mt 2122 5390 L
+2122 5390 mt 2147 5399 L
+2147 5399 mt 2182 5409 L
+2182 5409 mt 2212 5418 L
+2212 5418 mt 2217 5419 L
+2217 5419 mt 2251 5430 L
+2251 5430 mt 2286 5439 L
+2286 5439 mt 2309 5445 L
+2309 5445 mt 2321 5449 L
+2321 5449 mt 2356 5458 L
+2356 5458 mt 2391 5467 L
+2391 5467 mt 2414 5473 L
+2414 5473 mt 2426 5476 L
+2426 5476 mt 2461 5485 L
+2461 5485 mt 2496 5493 L
+2496 5493 mt 2530 5500 L
+2530 5500 mt 2530 5501 L
+2530 5501 mt 2565 5508 L
+2565 5508 mt 2600 5515 L
+2600 5515 mt 2635 5522 L
+2635 5522 mt 2670 5527 L
+2670 5527 mt 2674 5528 L
+2674 5528 mt 2705 5533 L
+2705 5533 mt 2740 5537 L
+2740 5537 mt 2774 5541 L
+2774 5541 mt 2809 5544 L
+2809 5544 mt 2844 5547 L
+2844 5547 mt 2879 5549 L
+2879 5549 mt 2914 5551 L
+2914 5551 mt 2949 5552 L
+2949 5552 mt 2984 5553 L
+2984 5553 mt 3019 5553 L
+3019 5553 mt 3053 5552 L
+3053 5552 mt 3088 5550 L
+3088 5550 mt 3123 5548 L
+3123 5548 mt 3158 5545 L
+3158 5545 mt 3193 5540 L
+3193 5540 mt 3228 5535 L
+3228 5535 mt 3261 5528 L
+3261 5528 mt 3263 5528 L
+3263 5528 mt 3298 5519 L
+3298 5519 mt 3332 5509 L
+3332 5509 mt 3359 5500 L
+3359 5500 mt 3367 5498 L
+3367 5498 mt 3402 5484 L
+3402 5484 mt 3429 5473 L
+3429 5473 mt 3437 5469 L
+3437 5469 mt 3472 5453 L
+3472 5453 mt 3486 5445 L
+3486 5445 mt 3507 5435 L
+3507 5435 mt 3536 5418 L
+3536 5418 mt 3542 5415 L
+3542 5415 mt 3577 5394 L
+3577 5394 mt 3582 5390 L
+3582 5390 mt 3611 5371 L
+3611 5371 mt 3623 5363 L
+3623 5363 mt 3646 5347 L
+3646 5347 mt 3663 5335 L
+3663 5335 mt 3681 5322 L
+3681 5322 mt 3700 5308 L
+3700 5308 mt 3716 5296 L
+3716 5296 mt 3736 5280 L
+3736 5280 mt 3751 5269 L
+3751 5269 mt 3770 5253 L
+3770 5253 mt 3786 5239 L
+3786 5239 mt 3801 5225 L
+3801 5225 mt 3821 5207 L
+3821 5207 mt 3830 5198 L
+3830 5198 mt 3855 5172 L
+3855 5172 mt 3857 5170 L
+3857 5170 mt 3883 5143 L
+3883 5143 mt 3890 5134 L
+3890 5134 mt 3907 5115 L
+3907 5115 mt 3925 5093 L
+3925 5093 mt 3930 5088 L
+3930 5088 mt 3951 5060 L
+3951 5060 mt 3960 5049 L
+3960 5049 mt 3972 5033 L
+3972 5033 mt 3992 5005 L
+3992 5005 mt 3995 5002 L
+3995 5002 mt 4011 4978 L
+4011 4978 mt 4030 4950 L
+4030 4950 mt 4030 4950 L
+4030 4950 mt 4047 4923 L
+4047 4923 mt 4064 4895 L
+4064 4895 mt 4065 4894 L
+4065 4894 mt 4080 4868 L
+4080 4868 mt 4096 4840 L
+4096 4840 mt 4100 4833 L
+4100 4833 mt 4111 4813 L
+4111 4813 mt 4126 4785 L
+4126 4785 mt 4134 4768 L
+4134 4768 mt 4140 4758 L
+4140 4758 mt 4154 4730 L
+4154 4730 mt 4167 4703 L
+4167 4703 mt 4169 4697 L
+4169 4697 mt 4180 4675 L
+4180 4675 mt 4191 4648 L
+4191 4648 mt 4202 4620 L
+4202 4620 mt 4204 4611 L
+4204 4611 mt 4208 4592 L
+4208 4592 mt 4206 4565 L
+4206 4565 mt 4204 4555 L
+4204 4555 mt 4200 4537 L
+4200 4537 mt 4191 4510 L
+4191 4510 mt 4179 4482 L
+4179 4482 mt 4169 4461 L
+4169 4461 mt 4166 4455 L
+4166 4455 mt 4153 4427 L
+4153 4427 mt 4144 4400 L
+4144 4400 mt 4140 4372 L
+4140 4372 mt 4138 4345 L
+4138 4345 mt 4143 4317 L
+4143 4317 mt 4150 4290 L
+4150 4290 mt 4155 4262 L
+4155 4262 mt 4158 4235 L
+4158 4235 mt 4158 4207 L
+4158 4207 mt 4157 4180 L
+4157 4180 mt 4156 4152 L
+4156 4152 mt 4157 4125 L
+4157 4125 mt 4161 4097 L
+4161 4097 mt 4167 4070 L
+4167 4070 mt 4169 4047 L
+4169 4047 mt 4170 4042 L
+4170 4042 mt 4172 4015 L
+4172 4015 mt 4171 3987 L
+4171 3987 mt 4172 3960 L
+4172 3960 mt 4171 3932 L
+4171 3932 mt 4176 3905 L
+4176 3905 mt 4183 3877 L
+4183 3877 mt 4193 3850 L
+4193 3850 mt 4204 3822 L
+4204 3822 mt 4204 3821 L
+4204 3821 mt 4216 3795 L
+4216 3795 mt 4228 3767 L
+4228 3767 mt 4239 3747 L
+4239 3747 mt 4245 3740 L
+4245 3740 mt 4274 3716 L
+4274 3716 mt 4279 3712 L
+4279 3712 mt 4309 3697 L
+4309 3697 mt 4333 3685 L
+4333 3685 mt 4344 3680 L
+4344 3680 mt 4379 3667 L
+4379 3667 mt 4408 3657 L
+4408 3657 mt 4413 3655 L
+4413 3655 mt 4448 3647 L
+4448 3647 mt 4483 3647 L
+4483 3647 mt 4518 3656 L
+4518 3656 mt 4519 3657 L
+4519 3657 mt 4553 3676 L
+4553 3676 mt 4562 3685 L
+4562 3685 mt 4588 3710 L
+4588 3710 mt 4590 3712 L
+4590 3712 mt 4604 3740 L
+4604 3740 mt 4618 3767 L
+4618 3767 mt 4623 3776 L
+4623 3776 mt 4632 3795 L
+4632 3795 mt 4645 3822 L
+4645 3822 mt 4656 3850 L
+4656 3850 mt 4657 3853 L
+4657 3853 mt 4668 3877 L
+4668 3877 mt 4684 3905 L
+4684 3905 mt 4692 3917 L
+4692 3917 mt 4703 3932 L
+4703 3932 mt 4722 3960 L
+4722 3960 mt 4727 3967 L
+4727 3967 mt 4742 3987 L
+4742 3987 mt 4762 4011 L
+4762 4011 mt 4765 4015 L
+4765 4015 mt 4788 4042 L
+4788 4042 mt 4797 4053 L
+4797 4053 mt 4810 4070 L
+4810 4070 mt 4832 4095 L
+4832 4095 mt 4833 4097 L
+4833 4097 mt 4854 4125 L
+4854 4125 mt 4867 4143 L
+4867 4143 mt 4872 4152 L
+4872 4152 mt 4885 4180 L
+4885 4180 mt 4899 4207 L
+4899 4207 mt 4902 4212 L
+4902 4212 mt 4916 4235 L
+4916 4235 mt 4936 4258 L
+4936 4258 mt 4941 4262 L
+4941 4262 mt 4970 4290 L
+4970 4290 mt 4971 4291 L
+4971 4291 mt 5000 4317 L
+5000 4317 mt 5006 4324 L
+5006 4324 mt 5026 4345 L
+5026 4345 mt 5041 4363 L
+5041 4363 mt 5048 4372 L
+5048 4372 mt 5071 4400 L
+5071 4400 mt 5076 4405 L
+5076 4405 mt 5096 4427 L
+5096 4427 mt 5111 4441 L
+5111 4441 mt 5125 4455 L
+5125 4455 mt 5146 4481 L
+5146 4481 mt 5146 4482 L
+5146 4482 mt 5154 4510 L
+5154 4510 mt 5156 4537 L
+5156 4537 mt 5162 4565 L
+5162 4565 mt 5174 4592 L
+5174 4592 mt 5181 4602 L
+5181 4602 mt 5193 4620 L
+5193 4620 mt 5215 4640 L
+5215 4640 mt 5226 4648 L
+5226 4648 mt 5250 4664 L
+5250 4664 mt 5270 4675 L
+5270 4675 mt 5285 4683 L
+5285 4683 mt 5320 4701 L
+5320 4701 mt 5324 4703 L
+5324 4703 mt 5355 4717 L
+5355 4717 mt 5386 4730 L
+5386 4730 mt 5390 4732 L
+5390 4732 mt 5425 4745 L
+5425 4745 mt 5459 4758 L
+5459 4758 mt 5459 4758 L
+5459 4758 mt 5494 4770 L
+5494 4770 mt 5529 4780 L
+5529 4780 mt 5545 4785 L
+5545 4785 mt 5564 4790 L
+5564 4790 mt 5599 4799 L
+5599 4799 mt 5634 4808 L
+5634 4808 mt 5658 4813 L
+5658 4813 mt 5669 4815 L
+5669 4815 mt 5704 4821 L
+5704 4821 mt 5738 4827 L
+5738 4827 mt 5773 4832 L
+5773 4832 mt 5808 4836 L
+5808 4836 mt 5843 4840 L
+5843 4840 mt 5850 4840 L
+5850 4840 mt 5878 4842 L
+5878 4842 mt 5913 4844 L
+5913 4844 mt 5948 4845 L
+5948 4845 mt 5983 4845 L
+5983 4845 mt 6017 4844 L
+6017 4844 mt 6052 4843 L
+6052 4843 mt 6082 4840 L
+6082 4840 mt 6087 4840 L
+6087 4840 mt 6122 4836 L
+6122 4836 mt 6157 4831 L
+6157 4831 mt 6192 4825 L
+6192 4825 mt 6227 4818 L
+6227 4818 mt 6248 4813 L
+6248 4813 mt 6261 4809 L
+6261 4809 mt 6296 4800 L
+6296 4800 mt 6331 4789 L
+6331 4789 mt 6341 4785 L
+6341 4785 mt 6366 4776 L
+6366 4776 mt 6401 4762 L
+6401 4762 mt 6410 4758 L
+6410 4758 mt 6436 4745 L
+6436 4745 mt 6465 4730 L
+6465 4730 mt 6471 4727 L
+6471 4727 mt 6506 4706 L
+6506 4706 mt 6511 4703 L
+6511 4703 mt 6540 4682 L
+6540 4682 mt 6551 4675 L
+6551 4675 mt 6575 4656 L
+6575 4656 mt 6586 4648 L
+6586 4648 mt 6610 4627 L
+6610 4627 mt 6618 4620 L
+6618 4620 mt 6645 4595 L
+6645 4595 mt 6648 4592 L
+6648 4592 mt 6675 4565 L
+6675 4565 mt 6680 4560 L
+6680 4560 mt 6702 4537 L
+6702 4537 mt 6715 4523 L
+6715 4523 mt 6727 4510 L
+6727 4510 mt 6750 4484 L
+6750 4484 mt 6751 4482 L
+6751 4482 mt 6776 4455 L
+6776 4455 mt 6785 4445 L
+6785 4445 mt 6800 4427 L
+6800 4427 mt 6819 4404 L
+6819 4404 mt 6823 4400 L
+6823 4400 mt 6847 4372 L
+6847 4372 mt 6854 4363 L
+6854 4363 mt 6870 4345 L
+6870 4345 mt 6889 4322 L
+6889 4322 mt 6894 4317 L
+6894 4317 mt 6917 4290 L
+6917 4290 mt 6924 4282 L
+6924 4282 mt 6940 4262 L
+6940 4262 mt 6959 4240 L
+6959 4240 mt 6963 4235 L
+6963 4235 mt 6986 4207 L
+6986 4207 mt 6994 4198 L
+6994 4198 mt 7008 4180 L
+7008 4180 mt 7029 4154 L
+7029 4154 mt 7030 4152 L
+7030 4152 mt 7052 4125 L
+7052 4125 mt 7063 4110 L
+7063 4110 mt 7073 4097 L
+7073 4097 mt 7094 4070 L
+7094 4070 mt 7098 4064 L
+7098 4064 mt 7114 4042 L
+7114 4042 mt 7133 4016 L
+7133 4016 mt 7134 4015 L
+7134 4015 mt 7154 3987 L
+7154 3987 mt 7168 3967 L
+7168 3967 mt 7173 3960 L
+7173 3960 mt 7192 3932 L
+7192 3932 mt 7203 3917 L
+7203 3917 mt 7212 3905 L
+7212 3905 mt 7231 3877 L
+7231 3877 mt 7238 3868 L
+7238 3868 mt 7251 3850 L
+7251 3850 mt 7271 3822 L
+7271 3822 mt 7273 3820 L
+7273 3820 mt 7291 3795 L
+7291 3795 mt 7308 3771 L
+7308 3771 mt 7310 3767 L
+7310 3767 mt 7329 3740 L
+7329 3740 mt 7342 3720 L
+7342 3720 mt 7348 3712 L
+7348 3712 mt 7367 3685 L
+7367 3685 mt 7377 3669 L
+7377 3669 mt 7386 3657 L
+7386 3657 mt 7404 3630 L
+7404 3630 mt 7412 3618 L
+7412 3618 mt 7423 3602 L
+7423 3602 mt 7442 3575 L
+7442 3575 mt 7447 3567 L
+7447 3567 mt 7462 3547 L
+7462 3547 mt 7482 3519 L
+7482 3519 mt 7482 3519 L
+7482 3519 mt 7502 3492 L
+7502 3492 mt 7517 3472 L
+7517 3472 mt 7523 3464 L
+7523 3464 mt 7544 3437 L
+7544 3437 mt 7552 3427 L
+7552 3427 mt 7565 3409 L
+7565 3409 mt 7587 3382 L
+7587 3382 mt 7587 3382 L
+7587 3382 mt 7609 3354 L
+7609 3354 mt 7621 3338 L
+7621 3338 mt 7631 3327 L
+7631 3327 mt 7653 3299 L
+7653 3299 mt 7656 3295 L
+7656 3295 mt 7676 3272 L
+7676 3272 mt 7691 3253 L
+7691 3253 mt 7699 3244 L
+7699 3244 mt 7722 3217 L
+7722 3217 mt 7726 3213 L
+7726 3213 mt 7747 3189 L
+7747 3189 mt 7761 3173 L
+7761 3173 mt 7771 3162 L
+7771 3162 mt 7796 3135 L
+7796 3135 mt 7797 3134 L
+7797 3134 mt 7824 3107 L
+7824 3107 mt 7831 3100 L
+7831 3100 mt 7852 3079 L
+7852 3079 mt 7865 3067 L
+7865 3067 mt 7883 3052 L
+7883 3052 mt 7900 3037 L
+7900 3037 mt 7916 3024 L
+7916 3024 mt 7935 3009 L
+7935 3009 mt 7954 2997 L
+7954 2997 mt 7970 2985 L
+7970 2985 mt 7997 2969 L
+7997 2969 mt 8005 2964 L
+-886 1984 mt -851 1994 L
+-851 1994 mt -816 1997 L
+-816 1997 mt -781 1993 L
+-781 1993 mt -746 1982 L
+-746 1982 mt -739 1979 L
+-739 1979 mt -711 1966 L
+-711 1966 mt -688 1951 L
+-688 1951 mt -677 1945 L
+-677 1945 mt -648 1924 L
+-648 1924 mt -642 1920 L
+-642 1920 mt -613 1896 L
+-613 1896 mt -607 1892 L
+-607 1892 mt -581 1869 L
+-581 1869 mt -572 1861 L
+-572 1861 mt -551 1841 L
+-551 1841 mt -537 1828 L
+-537 1828 mt -523 1814 L
+-523 1814 mt -502 1794 L
+-502 1794 mt -495 1786 L
+-495 1786 mt -469 1759 L
+-469 1759 mt -467 1756 L
+-467 1756 mt -446 1731 L
+-446 1731 mt -433 1715 L
+-433 1715 mt -423 1704 L
+-423 1704 mt -402 1676 L
+-402 1676 mt -398 1671 L
+-398 1671 mt -382 1649 L
+-382 1649 mt -363 1623 L
+-363 1623 mt -362 1621 L
+-362 1621 mt -343 1594 L
+-343 1594 mt -328 1573 L
+-328 1573 mt -323 1566 L
+-323 1566 mt -305 1539 L
+-305 1539 mt -293 1522 L
+-293 1522 mt -286 1511 L
+-286 1511 mt -268 1484 L
+-268 1484 mt -258 1469 L
+-258 1469 mt -250 1456 L
+-250 1456 mt -233 1428 L
+-233 1428 mt -223 1413 L
+-223 1413 mt -217 1401 L
+-217 1401 mt -200 1373 L
+-200 1373 mt -188 1353 L
+-188 1353 mt -184 1346 L
+-184 1346 mt -169 1318 L
+-169 1318 mt -154 1291 L
+-154 1291 mt -154 1290 L
+-154 1290 mt -140 1263 L
+-140 1263 mt -126 1236 L
+-126 1236 mt -119 1221 L
+-119 1221 mt -112 1208 L
+-112 1208 mt -99 1181 L
+ -99 1181 mt -86 1153 L
+ -86 1153 mt -84 1149 L
+ -84 1149 mt -73 1126 L
+ -73 1126 mt -60 1098 L
+ -60 1098 mt -49 1076 L
+ -49 1076 mt -46 1071 L
+ -46 1071 mt -33 1043 L
+ -33 1043 mt -19 1016 L
+ -19 1016 mt -14 1007 L
+ -14 1007 mt -4 988 L
+ -4 988 mt 10 961 L
+ 10 961 mt 20 944 L
+ 20 944 mt 26 933 L
+ 26 933 mt 42 906 L
+ 42 906 mt 55 885 L
+ 55 885 mt 58 878 L
+ 58 878 mt 75 851 L
+ 75 851 mt 90 829 L
+ 90 829 mt 93 823 L
+ 93 823 mt 111 796 L
+ 111 796 mt 124 776 L
+ 124 776 mt 130 768 L
+ 130 768 mt 149 741 L
+ 149 741 mt 159 727 L
+ 159 727 mt 169 713 L
+ 169 713 mt 189 686 L
+ 189 686 mt 194 679 L
+ 194 679 mt 210 658 L
+ 210 658 mt 229 634 L
+ 229 634 mt 231 631 L
+ 231 631 mt 253 603 L
+ 253 603 mt 264 590 L
+ 264 590 mt 275 576 L
+ 275 576 mt 298 548 L
+ 298 548 mt 299 547 L
+ 299 547 mt 321 521 L
+ 321 521 mt 334 505 L
+ 334 505 mt 344 493 L
+ 344 493 mt 368 466 L
+ 368 466 mt 368 465 L
+ 368 465 mt 391 438 L
+ 391 438 mt 403 424 L
+ 403 424 mt 415 411 L
+ 415 411 mt 438 385 L
+ 438 385 mt 440 383 L
+ 440 383 mt 465 355 L
+ 465 355 mt 473 347 L
+ 473 347 mt 491 328 L
+ 491 328 mt 508 311 L
+ 508 311 mt 518 300 L
+ 518 300 mt 543 277 L
+ 543 277 mt 547 273 L
+ 547 273 mt 577 245 L
+ 577 245 mt 578 244 L
+ 578 244 mt 608 218 L
+ 608 218 mt 613 214 L
+ 613 214 mt 642 190 L
+ 642 190 mt 647 186 L
+ 647 186 mt 679 163 L
+ 679 163 mt 682 160 L
+ 682 160 mt 717 136 L
+ 717 136 mt 717 135 L
+ 717 135 mt 752 112 L
+ 752 112 mt 759 108 L
+ 759 108 mt 787 90 L
+ 787 90 mt 802 80 L
+ 802 80 mt 822 68 L
+ 822 68 mt 847 53 L
+ 847 53 mt 857 47 L
+ 857 47 mt 892 27 L
+ 892 27 mt 895 25 L
+ 895 25 mt 926 8 L
+ 926 8 mt 944 -1 L
+ 944 -1 mt 961 -10 L
+ 961 -10 mt 996 -28 L
+ 996 -28 mt 997 -29 L
+ 997 -29 mt 1031 -46 L
+1031 -46 mt 1053 -56 L
+1053 -56 mt 1066 -63 L
+1066 -63 mt 1101 -79 L
+1101 -79 mt 1112 -84 L
+1112 -84 mt 1136 -95 L
+1136 -95 mt 1170 -110 L
+1170 -110 mt 1174 -111 L
+1174 -111 mt 1205 -125 L
+1205 -125 mt 1239 -139 L
+1239 -139 mt 1240 -139 L
+1240 -139 mt 1275 -154 L
+1275 -154 mt 1306 -166 L
+1306 -166 mt 1310 -168 L
+1310 -168 mt 1345 -182 L
+1345 -182 mt 1376 -194 L
+1376 -194 mt 1380 -195 L
+1380 -195 mt 1415 -209 L
+1415 -209 mt 1448 -221 L
+1448 -221 mt 1449 -222 L
+1449 -222 mt 1484 -235 L
+1484 -235 mt 1519 -247 L
+1519 -247 mt 1525 -249 L
+1525 -249 mt 1554 -259 L
+1554 -259 mt 1589 -271 L
+1589 -271 mt 1606 -276 L
+1606 -276 mt 1624 -282 L
+1624 -282 mt 1659 -293 L
+1659 -293 mt 1692 -304 L
+1692 -304 mt 1694 -304 L
+1694 -304 mt 1728 -315 L
+1728 -315 mt 1763 -326 L
+1763 -326 mt 1782 -331 L
+1782 -331 mt 1798 -336 L
+1798 -336 mt 1833 -347 L
+1833 -347 mt 1868 -358 L
+1868 -358 mt 1872 -359 L
+1872 -359 mt 1903 -368 L
+1903 -368 mt 1938 -379 L
+1938 -379 mt 1961 -386 L
+1961 -386 mt 1972 -390 L
+1972 -390 mt 2007 -401 L
+2007 -401 mt 2042 -413 L
+2042 -413 mt 2046 -414 L
+2046 -414 mt 2077 -424 L
+2077 -424 mt 2112 -436 L
+2112 -436 mt 2130 -441 L
+2130 -441 mt 2147 -447 L
+2147 -447 mt 2182 -459 L
+2182 -459 mt 2214 -469 L
+2214 -469 mt 2217 -470 L
+2217 -470 mt 2251 -481 L
+2251 -481 mt 2286 -492 L
+2286 -492 mt 2300 -496 L
+2300 -496 mt 2321 -503 L
+2321 -503 mt 2356 -514 L
+2356 -514 mt 2388 -524 L
+2388 -524 mt 2391 -525 L
+2391 -525 mt 2426 -536 L
+2426 -536 mt 2461 -547 L
+2461 -547 mt 2475 -551 L
+2475 -551 mt 2496 -558 L
+2496 -558 mt 2530 -570 L
+2530 -570 mt 2557 -579 L
+2557 -579 mt 2565 -582 L
+2565 -582 mt 2600 -595 L
+2600 -595 mt 2634 -606 L
+2634 -606 mt 2635 -607 L
+2635 -607 mt 2670 -620 L
+2670 -620 mt 2705 -632 L
+2705 -632 mt 2709 -634 L
+2709 -634 mt 2740 -645 L
+2740 -645 mt 2774 -658 L
+2774 -658 mt 2785 -661 L
+2785 -661 mt 2809 -670 L
+2809 -670 mt 2844 -682 L
+2844 -682 mt 2864 -689 L
+2864 -689 mt 2879 -694 L
+2879 -694 mt 2914 -706 L
+2914 -706 mt 2949 -716 L
+2949 -716 mt 2949 -717 L
+2949 -717 mt 2984 -727 L
+2984 -727 mt 3019 -738 L
+3019 -738 mt 3042 -744 L
+3042 -744 mt 3053 -747 L
+3053 -747 mt 3088 -757 L
+3088 -757 mt 3123 -766 L
+3123 -766 mt 3149 -772 L
+3149 -772 mt 3158 -774 L
+3158 -774 mt 3193 -782 L
+3193 -782 mt 3228 -789 L
+3228 -789 mt 3263 -795 L
+3263 -795 mt 3289 -799 L
+3289 -799 mt 3298 -801 L
+3298 -801 mt 3332 -805 L
+3332 -805 mt 3367 -810 L
+3367 -810 mt 3402 -813 L
+3402 -813 mt 3437 -816 L
+3437 -816 mt 3472 -817 L
+3472 -817 mt 3507 -818 L
+3507 -818 mt 3542 -819 L
+3542 -819 mt 3577 -818 L
+3577 -818 mt 3611 -817 L
+3611 -817 mt 3646 -815 L
+3646 -815 mt 3681 -813 L
+3681 -813 mt 3716 -811 L
+3716 -811 mt 3751 -807 L
+3751 -807 mt 3786 -804 L
+3786 -804 mt 3821 -799 L
+3821 -799 mt 3824 -799 L
+3824 -799 mt 3855 -795 L
+3855 -795 mt 3890 -790 L
+3890 -790 mt 3925 -785 L
+3925 -785 mt 3960 -779 L
+3960 -779 mt 3995 -772 L
+3995 -772 mt 3999 -772 L
+3999 -772 mt 4030 -765 L
+4030 -765 mt 4065 -758 L
+4065 -758 mt 4100 -750 L
+4100 -750 mt 4124 -744 L
+4124 -744 mt 4134 -742 L
+4134 -742 mt 4169 -733 L
+4169 -733 mt 4204 -725 L
+4204 -725 mt 4236 -717 L
+4236 -717 mt 4239 -716 L
+4239 -716 mt 4274 -707 L
+4274 -707 mt 4309 -698 L
+4309 -698 mt 4344 -690 L
+4344 -690 mt 4346 -689 L
+4346 -689 mt 4379 -681 L
+4379 -681 mt 4413 -672 L
+4413 -672 mt 4448 -663 L
+4448 -663 mt 4452 -661 L
+4452 -661 mt 4483 -653 L
+4483 -653 mt 4518 -643 L
+4518 -643 mt 4549 -634 L
+4549 -634 mt 4553 -633 L
+4553 -633 mt 4588 -623 L
+4588 -623 mt 4623 -612 L
+4623 -612 mt 4638 -606 L
+4638 -606 mt 4657 -600 L
+4657 -600 mt 4692 -589 L
+4692 -589 mt 4720 -579 L
+4720 -579 mt 4727 -576 L
+4727 -576 mt 4762 -564 L
+4762 -564 mt 4796 -551 L
+4796 -551 mt 4797 -551 L
+4797 -551 mt 4832 -538 L
+4832 -538 mt 4867 -524 L
+4867 -524 mt 4867 -524 L
+4867 -524 mt 4902 -510 L
+4902 -510 mt 4936 -496 L
+4936 -496 mt 4936 -496 L
+4936 -496 mt 4971 -482 L
+4971 -482 mt 5002 -469 L
+5002 -469 mt 5006 -467 L
+5006 -467 mt 5041 -453 L
+5041 -453 mt 5068 -441 L
+5068 -441 mt 5076 -438 L
+5076 -438 mt 5111 -423 L
+5111 -423 mt 5132 -414 L
+5132 -414 mt 5146 -408 L
+5146 -408 mt 5181 -393 L
+5181 -393 mt 5196 -386 L
+5196 -386 mt 5215 -378 L
+5215 -378 mt 5250 -362 L
+5250 -362 mt 5258 -359 L
+5258 -359 mt 5285 -347 L
+5285 -347 mt 5318 -331 L
+5318 -331 mt 5320 -331 L
+5320 -331 mt 5355 -314 L
+5355 -314 mt 5377 -304 L
+5377 -304 mt 5390 -298 L
+5390 -298 mt 5425 -281 L
+5425 -281 mt 5434 -276 L
+5434 -276 mt 5459 -264 L
+5459 -264 mt 5489 -249 L
+5489 -249 mt 5494 -246 L
+5494 -246 mt 5529 -228 L
+5529 -228 mt 5543 -221 L
+5543 -221 mt 5564 -210 L
+5564 -210 mt 5595 -194 L
+5595 -194 mt 5599 -192 L
+5599 -192 mt 5634 -173 L
+5634 -173 mt 5645 -166 L
+5645 -166 mt 5669 -153 L
+5669 -153 mt 5694 -139 L
+5694 -139 mt 5704 -133 L
+5704 -133 mt 5738 -112 L
+5738 -112 mt 5740 -111 L
+5740 -111 mt 5773 -91 L
+5773 -91 mt 5785 -84 L
+5785 -84 mt 5808 -69 L
+5808 -69 mt 5827 -56 L
+5827 -56 mt 5843 -46 L
+5843 -46 mt 5869 -29 L
+5869 -29 mt 5878 -22 L
+5878 -22 mt 5908 -1 L
+5908 -1 mt 5913 1 L
+5913 1 mt 5947 25 L
+5947 25 mt 5948 26 L
+5948 26 mt 5983 52 L
+5983 52 mt 5984 53 L
+5984 53 mt 6017 78 L
+6017 78 mt 6020 80 L
+6020 80 mt 6052 105 L
+6052 105 mt 6055 108 L
+6055 108 mt 6087 133 L
+6087 133 mt 6089 135 L
+6089 135 mt 6122 162 L
+6122 162 mt 6123 163 L
+6123 163 mt 6155 190 L
+6155 190 mt 6157 192 L
+6157 192 mt 6187 218 L
+6187 218 mt 6192 222 L
+6192 222 mt 6218 245 L
+6218 245 mt 6227 253 L
+6227 253 mt 6249 273 L
+6249 273 mt 6261 284 L
+6261 284 mt 6280 300 L
+6280 300 mt 6296 316 L
+6296 316 mt 6310 328 L
+6310 328 mt 6331 348 L
+6331 348 mt 6339 355 L
+6339 355 mt 6366 380 L
+6366 380 mt 6369 383 L
+6369 383 mt 6399 411 L
+6399 411 mt 6401 412 L
+6401 412 mt 6429 438 L
+6429 438 mt 6436 444 L
+6436 444 mt 6459 466 L
+6459 466 mt 6471 476 L
+6471 476 mt 6489 493 L
+6489 493 mt 6506 508 L
+6506 508 mt 6519 521 L
+6519 521 mt 6540 540 L
+6540 540 mt 6550 548 L
+6550 548 mt 6575 572 L
+6575 572 mt 6580 576 L
+6580 576 mt 6610 603 L
+6610 603 mt 6610 604 L
+6610 604 mt 6640 631 L
+6640 631 mt 6645 635 L
+6645 635 mt 6670 658 L
+6670 658 mt 6680 668 L
+6680 668 mt 6700 686 L
+6700 686 mt 6715 700 L
+6715 700 mt 6729 713 L
+6729 713 mt 6750 732 L
+6750 732 mt 6759 741 L
+6759 741 mt 6785 765 L
+6785 765 mt 6788 768 L
+6788 768 mt 6817 796 L
+6817 796 mt 6819 798 L
+6819 798 mt 6846 823 L
+6846 823 mt 6854 831 L
+6854 831 mt 6875 851 L
+6875 851 mt 6889 865 L
+6889 865 mt 6903 878 L
+6903 878 mt 6924 899 L
+6924 899 mt 6931 906 L
+6931 906 mt 6959 933 L
+6959 933 mt 6959 933 L
+6959 933 mt 6987 961 L
+6987 961 mt 6994 968 L
+6994 968 mt 7014 988 L
+7014 988 mt 7029 1003 L
+7029 1003 mt 7042 1016 L
+7042 1016 mt 7063 1038 L
+7063 1038 mt 7069 1043 L
+7069 1043 mt 7096 1071 L
+7096 1071 mt 7098 1074 L
+7098 1074 mt 7122 1098 L
+7122 1098 mt 7133 1110 L
+7133 1110 mt 7149 1126 L
+7149 1126 mt 7168 1146 L
+7168 1146 mt 7175 1153 L
+7175 1153 mt 7202 1181 L
+7202 1181 mt 7203 1182 L
+7203 1182 mt 7229 1208 L
+7229 1208 mt 7238 1217 L
+7238 1217 mt 7257 1236 L
+7257 1236 mt 7273 1252 L
+7273 1252 mt 7285 1263 L
+7285 1263 mt 7308 1286 L
+7308 1286 mt 7313 1291 L
+7313 1291 mt 7341 1318 L
+7341 1318 mt 7342 1320 L
+7342 1320 mt 7369 1346 L
+7369 1346 mt 7377 1354 L
+7377 1354 mt 7397 1373 L
+7397 1373 mt 7412 1389 L
+7412 1389 mt 7425 1401 L
+7425 1401 mt 7447 1423 L
+7447 1423 mt 7452 1428 L
+7452 1428 mt 7480 1456 L
+7480 1456 mt 7482 1458 L
+7482 1458 mt 7507 1484 L
+7507 1484 mt 7517 1493 L
+7517 1493 mt 7535 1511 L
+7535 1511 mt 7552 1528 L
+7552 1528 mt 7562 1539 L
+7562 1539 mt 7587 1563 L
+7587 1563 mt 7590 1566 L
+7590 1566 mt 7617 1594 L
+7617 1594 mt 7621 1599 L
+7621 1599 mt 7644 1621 L
+7644 1621 mt 7656 1634 L
+7656 1634 mt 7671 1649 L
+7671 1649 mt 7691 1670 L
+7691 1670 mt 7697 1676 L
+7697 1676 mt 7724 1704 L
+7724 1704 mt 7726 1706 L
+7726 1706 mt 7751 1731 L
+7751 1731 mt 7761 1742 L
+7761 1742 mt 7778 1759 L
+7778 1759 mt 7796 1777 L
+7796 1777 mt 7805 1786 L
+7805 1786 mt 7831 1813 L
+7831 1813 mt 7831 1814 L
+7831 1814 mt 7859 1841 L
+7859 1841 mt 7865 1849 L
+7865 1849 mt 7886 1869 L
+7886 1869 mt 7900 1884 L
+7900 1884 mt 7914 1896 L
+7914 1896 mt 7935 1916 L
+7935 1916 mt 7945 1924 L
+7945 1924 mt 7970 1945 L
+7970 1945 mt 7981 1951 L
+7981 1951 mt 8005 1968 L
+-886 2580 mt -851 2567 L
+-851 2567 mt -816 2562 L
+-816 2562 mt -781 2566 L
+-781 2566 mt -746 2577 L
+-746 2577 mt -733 2584 L
+-733 2584 mt -711 2594 L
+-711 2594 mt -685 2612 L
+-685 2612 mt -677 2617 L
+-677 2617 mt -650 2639 L
+-650 2639 mt -642 2645 L
+-642 2645 mt -619 2667 L
+-619 2667 mt -607 2677 L
+-607 2677 mt -590 2694 L
+-590 2694 mt -572 2711 L
+-572 2711 mt -561 2722 L
+-561 2722 mt -537 2745 L
+-537 2745 mt -533 2749 L
+-533 2749 mt -505 2777 L
+-505 2777 mt -502 2779 L
+-502 2779 mt -478 2804 L
+-478 2804 mt -467 2814 L
+-467 2814 mt -450 2832 L
+-450 2832 mt -433 2849 L
+-433 2849 mt -423 2859 L
+-423 2859 mt -398 2884 L
+-398 2884 mt -395 2887 L
+-395 2887 mt -366 2914 L
+-366 2914 mt -363 2917 L
+-363 2917 mt -337 2942 L
+-337 2942 mt -328 2950 L
+-328 2950 mt -307 2969 L
+-307 2969 mt -293 2982 L
+-293 2982 mt -276 2997 L
+-276 2997 mt -258 3012 L
+-258 3012 mt -244 3024 L
+-244 3024 mt -223 3042 L
+-223 3042 mt -212 3052 L
+-212 3052 mt -188 3071 L
+-188 3071 mt -179 3079 L
+-179 3079 mt -154 3100 L
+-154 3100 mt -146 3107 L
+-146 3107 mt -119 3129 L
+-119 3129 mt -113 3134 L
+-113 3134 mt -84 3158 L
+ -84 3158 mt -79 3162 L
+ -79 3162 mt -49 3186 L
+ -49 3186 mt -45 3189 L
+ -45 3189 mt -14 3214 L
+ -14 3214 mt -10 3217 L
+ -10 3217 mt 20 3241 L
+ 20 3241 mt 24 3244 L
+ 24 3244 mt 55 3268 L
+ 55 3268 mt 60 3272 L
+ 60 3272 mt 90 3294 L
+ 90 3294 mt 97 3299 L
+ 97 3299 mt 124 3319 L
+ 124 3319 mt 135 3327 L
+ 135 3327 mt 159 3344 L
+ 159 3344 mt 173 3354 L
+ 173 3354 mt 194 3369 L
+ 194 3369 mt 212 3382 L
+ 212 3382 mt 229 3394 L
+ 229 3394 mt 251 3409 L
+ 251 3409 mt 264 3419 L
+ 264 3419 mt 290 3437 L
+ 290 3437 mt 299 3443 L
+ 299 3443 mt 328 3464 L
+ 328 3464 mt 334 3469 L
+ 334 3469 mt 364 3492 L
+ 364 3492 mt 368 3495 L
+ 368 3495 mt 400 3519 L
+ 400 3519 mt 403 3522 L
+ 403 3522 mt 434 3547 L
+ 434 3547 mt 438 3551 L
+ 438 3551 mt 466 3575 L
+ 466 3575 mt 473 3580 L
+ 473 3580 mt 498 3602 L
+ 498 3602 mt 508 3611 L
+ 508 3611 mt 528 3630 L
+ 528 3630 mt 543 3643 L
+ 543 3643 mt 558 3657 L
+ 558 3657 mt 578 3676 L
+ 578 3676 mt 586 3685 L
+ 586 3685 mt 613 3712 L
+ 613 3712 mt 613 3712 L
+ 613 3712 mt 637 3740 L
+ 637 3740 mt 647 3751 L
+ 647 3751 mt 661 3767 L
+ 661 3767 mt 682 3795 L
+ 682 3795 mt 682 3795 L
+ 682 3795 mt 701 3822 L
+ 701 3822 mt 717 3847 L
+ 717 3847 mt 719 3850 L
+ 719 3850 mt 735 3877 L
+ 735 3877 mt 750 3905 L
+ 750 3905 mt 752 3908 L
+ 752 3908 mt 764 3932 L
+ 764 3932 mt 777 3960 L
+ 777 3960 mt 787 3983 L
+ 787 3983 mt 789 3987 L
+ 789 3987 mt 800 4015 L
+ 800 4015 mt 812 4042 L
+ 812 4042 mt 822 4068 L
+ 822 4068 mt 822 4070 L
+ 822 4070 mt 833 4097 L
+ 833 4097 mt 843 4125 L
+ 843 4125 mt 853 4152 L
+ 853 4152 mt 857 4162 L
+ 857 4162 mt 863 4180 L
+ 863 4180 mt 873 4207 L
+ 873 4207 mt 883 4235 L
+ 883 4235 mt 892 4256 L
+ 892 4256 mt 894 4262 L
+ 894 4262 mt 905 4290 L
+ 905 4290 mt 916 4317 L
+ 916 4317 mt 926 4342 L
+ 926 4342 mt 928 4345 L
+ 928 4345 mt 940 4372 L
+ 940 4372 mt 953 4400 L
+ 953 4400 mt 961 4418 L
+ 961 4418 mt 966 4427 L
+ 966 4427 mt 980 4455 L
+ 980 4455 mt 994 4482 L
+ 994 4482 mt 996 4487 L
+ 996 4487 mt 1008 4510 L
+1008 4510 mt 1023 4537 L
+1023 4537 mt 1031 4551 L
+1031 4551 mt 1038 4565 L
+1038 4565 mt 1054 4592 L
+1054 4592 mt 1066 4613 L
+1066 4613 mt 1070 4620 L
+1070 4620 mt 1086 4648 L
+1086 4648 mt 1101 4672 L
+1101 4672 mt 1103 4675 L
+1103 4675 mt 1120 4703 L
+1120 4703 mt 1136 4726 L
+1136 4726 mt 1138 4730 L
+1138 4730 mt 1158 4758 L
+1158 4758 mt 1170 4775 L
+1170 4775 mt 1178 4785 L
+1178 4785 mt 1200 4813 L
+1200 4813 mt 1205 4820 L
+1205 4820 mt 1222 4840 L
+1222 4840 mt 1240 4860 L
+1240 4860 mt 1247 4868 L
+1247 4868 mt 1273 4895 L
+1273 4895 mt 1275 4898 L
+1275 4898 mt 1300 4923 L
+1300 4923 mt 1310 4932 L
+1310 4932 mt 1330 4950 L
+1330 4950 mt 1345 4963 L
+1345 4963 mt 1362 4978 L
+1362 4978 mt 1380 4992 L
+1380 4992 mt 1397 5005 L
+1397 5005 mt 1415 5018 L
+1415 5018 mt 1435 5033 L
+1435 5033 mt 1449 5043 L
+1449 5043 mt 1475 5060 L
+1475 5060 mt 1484 5066 L
+1484 5066 mt 1519 5087 L
+1519 5087 mt 1520 5088 L
+1520 5088 mt 1554 5107 L
+1554 5107 mt 1569 5115 L
+1569 5115 mt 1589 5126 L
+1589 5126 mt 1623 5143 L
+1623 5143 mt 1624 5143 L
+1624 5143 mt 1659 5160 L
+1659 5160 mt 1682 5170 L
+1682 5170 mt 1694 5175 L
+1694 5175 mt 1728 5190 L
+1728 5190 mt 1748 5198 L
+1748 5198 mt 1763 5204 L
+1763 5204 mt 1798 5218 L
+1798 5218 mt 1819 5225 L
+1819 5225 mt 1833 5231 L
+1833 5231 mt 1868 5244 L
+1868 5244 mt 1894 5253 L
+1894 5253 mt 1903 5256 L
+1903 5256 mt 1938 5268 L
+1938 5268 mt 1972 5279 L
+1972 5279 mt 1976 5280 L
+1976 5280 mt 2007 5291 L
+2007 5291 mt 2042 5301 L
+2042 5301 mt 2065 5308 L
+2065 5308 mt 2077 5312 L
+2077 5312 mt 2112 5322 L
+2112 5322 mt 2147 5331 L
+2147 5331 mt 2163 5335 L
+2163 5335 mt 2182 5340 L
+2182 5340 mt 2217 5349 L
+2217 5349 mt 2251 5358 L
+2251 5358 mt 2275 5363 L
+2275 5363 mt 2286 5365 L
+2286 5365 mt 2321 5373 L
+2321 5373 mt 2356 5380 L
+2356 5380 mt 2391 5387 L
+2391 5387 mt 2408 5390 L
+2408 5390 mt 2426 5394 L
+2426 5394 mt 2461 5400 L
+2461 5400 mt 2496 5406 L
+2496 5406 mt 2530 5412 L
+2530 5412 mt 2565 5417 L
+2565 5417 mt 2572 5418 L
+2572 5418 mt 2600 5422 L
+2600 5422 mt 2635 5426 L
+2635 5426 mt 2670 5429 L
+2670 5429 mt 2705 5432 L
+2705 5432 mt 2740 5434 L
+2740 5434 mt 2774 5435 L
+2774 5435 mt 2809 5436 L
+2809 5436 mt 2844 5436 L
+2844 5436 mt 2879 5435 L
+2879 5435 mt 2914 5434 L
+2914 5434 mt 2949 5432 L
+2949 5432 mt 2984 5430 L
+2984 5430 mt 3019 5427 L
+3019 5427 mt 3053 5424 L
+3053 5424 mt 3088 5419 L
+3088 5419 mt 3099 5418 L
+3099 5418 mt 3123 5415 L
+3123 5415 mt 3158 5409 L
+3158 5409 mt 3193 5402 L
+3193 5402 mt 3228 5394 L
+3228 5394 mt 3244 5390 L
+3244 5390 mt 3263 5386 L
+3263 5386 mt 3298 5375 L
+3298 5375 mt 3332 5364 L
+3332 5364 mt 3335 5363 L
+3335 5363 mt 3367 5351 L
+3367 5351 mt 3402 5337 L
+3402 5337 mt 3406 5335 L
+3406 5335 mt 3437 5322 L
+3437 5322 mt 3466 5308 L
+3466 5308 mt 3472 5305 L
+3472 5305 mt 3507 5287 L
+3507 5287 mt 3519 5280 L
+3519 5280 mt 3542 5268 L
+3542 5268 mt 3567 5253 L
+3567 5253 mt 3577 5248 L
+3577 5248 mt 3611 5226 L
+3611 5226 mt 3613 5225 L
+3613 5225 mt 3646 5203 L
+3646 5203 mt 3654 5198 L
+3654 5198 mt 3681 5179 L
+3681 5179 mt 3693 5170 L
+3693 5170 mt 3716 5152 L
+3716 5152 mt 3728 5143 L
+3728 5143 mt 3751 5123 L
+3751 5123 mt 3760 5115 L
+3760 5115 mt 3786 5092 L
+3786 5092 mt 3790 5088 L
+3790 5088 mt 3817 5060 L
+3817 5060 mt 3821 5057 L
+3821 5057 mt 3843 5033 L
+3843 5033 mt 3855 5019 L
+3855 5019 mt 3868 5005 L
+3868 5005 mt 3890 4978 L
+3890 4978 mt 3891 4978 L
+3891 4978 mt 3913 4950 L
+3913 4950 mt 3925 4934 L
+3925 4934 mt 3933 4923 L
+3933 4923 mt 3953 4895 L
+3953 4895 mt 3960 4885 L
+3960 4885 mt 3972 4868 L
+3972 4868 mt 3989 4840 L
+3989 4840 mt 3995 4831 L
+3995 4831 mt 4006 4813 L
+4006 4813 mt 4022 4785 L
+4022 4785 mt 4030 4772 L
+4030 4772 mt 4038 4758 L
+4038 4758 mt 4053 4730 L
+4053 4730 mt 4065 4708 L
+4065 4708 mt 4068 4703 L
+4068 4703 mt 4082 4675 L
+4082 4675 mt 4095 4648 L
+4095 4648 mt 4100 4638 L
+4100 4638 mt 4108 4620 L
+4108 4620 mt 4116 4592 L
+4116 4592 mt 4116 4565 L
+4116 4565 mt 4110 4537 L
+4110 4537 mt 4100 4510 L
+4100 4510 mt 4100 4509 L
+4100 4509 mt 4086 4482 L
+4086 4482 mt 4070 4455 L
+4070 4455 mt 4065 4443 L
+4065 4443 mt 4057 4427 L
+4057 4427 mt 4047 4400 L
+4047 4400 mt 4041 4372 L
+4041 4372 mt 4039 4345 L
+4039 4345 mt 4047 4317 L
+4047 4317 mt 4058 4290 L
+4058 4290 mt 4065 4266 L
+4065 4266 mt 4066 4262 L
+4066 4262 mt 4068 4235 L
+4068 4235 mt 4071 4207 L
+4071 4207 mt 4073 4180 L
+4073 4180 mt 4074 4152 L
+4074 4152 mt 4073 4125 L
+4073 4125 mt 4073 4097 L
+4073 4097 mt 4072 4070 L
+4072 4070 mt 4069 4042 L
+4069 4042 mt 4065 4025 L
+4065 4025 mt 4062 4015 L
+4062 4015 mt 4054 3987 L
+4054 3987 mt 4045 3960 L
+4045 3960 mt 4038 3932 L
+4038 3932 mt 4035 3905 L
+4035 3905 mt 4036 3877 L
+4036 3877 mt 4041 3850 L
+4041 3850 mt 4045 3822 L
+4045 3822 mt 4048 3795 L
+4048 3795 mt 4051 3767 L
+4051 3767 mt 4051 3740 L
+4051 3740 mt 4051 3712 L
+4051 3712 mt 4051 3685 L
+4051 3685 mt 4055 3657 L
+4055 3657 mt 4065 3636 L
+4065 3636 mt 4071 3630 L
+4071 3630 mt 4100 3612 L
+4100 3612 mt 4121 3602 L
+4121 3602 mt 4134 3595 L
+4134 3595 mt 4169 3579 L
+4169 3579 mt 4178 3575 L
+4178 3575 mt 4204 3559 L
+4204 3559 mt 4221 3547 L
+4221 3547 mt 4239 3533 L
+4239 3533 mt 4253 3519 L
+4253 3519 mt 4274 3495 L
+4274 3495 mt 4276 3492 L
+4276 3492 mt 4295 3464 L
+4295 3464 mt 4309 3442 L
+4309 3442 mt 4312 3437 L
+4312 3437 mt 4328 3409 L
+4328 3409 mt 4342 3382 L
+4342 3382 mt 4344 3378 L
+4344 3378 mt 4356 3354 L
+4356 3354 mt 4369 3327 L
+4369 3327 mt 4379 3310 L
+4379 3310 mt 4413 3305 L
+4413 3305 mt 4448 3327 L
+4448 3327 mt 4448 3327 L
+4448 3327 mt 4483 3352 L
+4483 3352 mt 4487 3354 L
+4487 3354 mt 4518 3377 L
+4518 3377 mt 4524 3382 L
+4524 3382 mt 4553 3405 L
+4553 3405 mt 4558 3409 L
+4558 3409 mt 4584 3437 L
+4584 3437 mt 4588 3441 L
+4588 3441 mt 4605 3464 L
+4605 3464 mt 4623 3492 L
+4623 3492 mt 4623 3492 L
+4623 3492 mt 4638 3519 L
+4638 3519 mt 4656 3547 L
+4656 3547 mt 4657 3550 L
+4657 3550 mt 4673 3575 L
+4673 3575 mt 4692 3602 L
+4692 3602 mt 4692 3603 L
+4692 3603 mt 4710 3630 L
+4710 3630 mt 4727 3656 L
+4727 3656 mt 4728 3657 L
+4728 3657 mt 4744 3685 L
+4744 3685 mt 4762 3712 L
+4762 3712 mt 4762 3713 L
+4762 3713 mt 4777 3740 L
+4777 3740 mt 4795 3767 L
+4795 3767 mt 4797 3771 L
+4797 3771 mt 4811 3795 L
+4811 3795 mt 4830 3822 L
+4830 3822 mt 4832 3825 L
+4832 3825 mt 4850 3850 L
+4850 3850 mt 4867 3868 L
+4867 3868 mt 4874 3877 L
+4874 3877 mt 4899 3905 L
+4899 3905 mt 4902 3908 L
+4902 3908 mt 4921 3932 L
+4921 3932 mt 4936 3952 L
+4936 3952 mt 4942 3960 L
+4942 3960 mt 4959 3987 L
+4959 3987 mt 4971 4011 L
+4971 4011 mt 4973 4015 L
+4973 4015 mt 4986 4042 L
+4986 4042 mt 4999 4070 L
+4999 4070 mt 5006 4083 L
+5006 4083 mt 5014 4097 L
+5014 4097 mt 5033 4125 L
+5033 4125 mt 5041 4135 L
+5041 4135 mt 5056 4152 L
+5056 4152 mt 5076 4171 L
+5076 4171 mt 5087 4180 L
+5087 4180 mt 5111 4199 L
+5111 4199 mt 5122 4207 L
+5122 4207 mt 5146 4225 L
+5146 4225 mt 5157 4235 L
+5157 4235 mt 5181 4255 L
+5181 4255 mt 5186 4262 L
+5186 4262 mt 5207 4290 L
+5207 4290 mt 5215 4303 L
+5215 4303 mt 5223 4317 L
+5223 4317 mt 5238 4345 L
+5238 4345 mt 5250 4371 L
+5250 4371 mt 5251 4372 L
+5251 4372 mt 5260 4400 L
+5260 4400 mt 5265 4427 L
+5265 4427 mt 5267 4455 L
+5267 4455 mt 5265 4482 L
+5265 4482 mt 5261 4510 L
+5261 4510 mt 5260 4537 L
+5260 4537 mt 5264 4565 L
+5264 4565 mt 5285 4592 L
+5285 4592 mt 5285 4592 L
+5285 4592 mt 5320 4619 L
+5320 4619 mt 5321 4620 L
+5321 4620 mt 5355 4642 L
+5355 4642 mt 5365 4648 L
+5365 4648 mt 5390 4661 L
+5390 4661 mt 5419 4675 L
+5419 4675 mt 5425 4678 L
+5425 4678 mt 5459 4693 L
+5459 4693 mt 5482 4703 L
+5482 4703 mt 5494 4708 L
+5494 4708 mt 5529 4721 L
+5529 4721 mt 5556 4730 L
+5556 4730 mt 5564 4733 L
+5564 4733 mt 5599 4744 L
+5599 4744 mt 5634 4754 L
+5634 4754 mt 5649 4758 L
+5649 4758 mt 5669 4763 L
+5669 4763 mt 5704 4771 L
+5704 4771 mt 5738 4778 L
+5738 4778 mt 5773 4784 L
+5773 4784 mt 5778 4785 L
+5778 4785 mt 5808 4790 L
+5808 4790 mt 5843 4795 L
+5843 4795 mt 5878 4798 L
+5878 4798 mt 5913 4801 L
+5913 4801 mt 5948 4803 L
+5948 4803 mt 5983 4804 L
+5983 4804 mt 6017 4804 L
+6017 4804 mt 6052 4803 L
+6052 4803 mt 6087 4800 L
+6087 4800 mt 6122 4797 L
+6122 4797 mt 6157 4792 L
+6157 4792 mt 6192 4786 L
+6192 4786 mt 6195 4785 L
+6195 4785 mt 6227 4778 L
+6227 4778 mt 6261 4770 L
+6261 4770 mt 6296 4760 L
+6296 4760 mt 6302 4758 L
+6302 4758 mt 6331 4748 L
+6331 4748 mt 6366 4734 L
+6366 4734 mt 6375 4730 L
+6375 4730 mt 6401 4718 L
+6401 4718 mt 6430 4703 L
+6430 4703 mt 6436 4700 L
+6436 4700 mt 6471 4679 L
+6471 4679 mt 6476 4675 L
+6476 4675 mt 6506 4655 L
+6506 4655 mt 6516 4648 L
+6516 4648 mt 6540 4628 L
+6540 4628 mt 6550 4620 L
+6550 4620 mt 6575 4598 L
+6575 4598 mt 6581 4592 L
+6581 4592 mt 6609 4565 L
+6609 4565 mt 6610 4564 L
+6610 4564 mt 6636 4537 L
+6636 4537 mt 6645 4528 L
+6645 4528 mt 6661 4510 L
+6661 4510 mt 6680 4488 L
+6680 4488 mt 6685 4482 L
+6685 4482 mt 6708 4455 L
+6708 4455 mt 6715 4447 L
+6715 4447 mt 6731 4427 L
+6731 4427 mt 6750 4405 L
+6750 4405 mt 6754 4400 L
+6754 4400 mt 6776 4372 L
+6776 4372 mt 6785 4361 L
+6785 4361 mt 6798 4345 L
+6798 4345 mt 6819 4317 L
+6819 4317 mt 6819 4317 L
+6819 4317 mt 6841 4290 L
+6841 4290 mt 6854 4273 L
+6854 4273 mt 6863 4262 L
+6863 4262 mt 6885 4235 L
+6885 4235 mt 6889 4229 L
+6889 4229 mt 6906 4207 L
+6906 4207 mt 6924 4184 L
+6924 4184 mt 6927 4180 L
+6927 4180 mt 6948 4152 L
+6948 4152 mt 6959 4138 L
+6959 4138 mt 6969 4125 L
+6969 4125 mt 6989 4097 L
+6989 4097 mt 6994 4090 L
+6994 4090 mt 7008 4070 L
+7008 4070 mt 7027 4042 L
+7027 4042 mt 7029 4040 L
+7029 4040 mt 7046 4015 L
+7046 4015 mt 7063 3989 L
+7063 3989 mt 7065 3987 L
+7065 3987 mt 7083 3960 L
+7083 3960 mt 7098 3936 L
+7098 3936 mt 7101 3932 L
+7101 3932 mt 7119 3905 L
+7119 3905 mt 7133 3883 L
+7133 3883 mt 7137 3877 L
+7137 3877 mt 7155 3850 L
+7155 3850 mt 7168 3830 L
+7168 3830 mt 7174 3822 L
+7174 3822 mt 7192 3795 L
+7192 3795 mt 7203 3778 L
+7203 3778 mt 7210 3767 L
+7210 3767 mt 7228 3740 L
+7228 3740 mt 7238 3725 L
+7238 3725 mt 7246 3712 L
+7246 3712 mt 7263 3685 L
+7263 3685 mt 7273 3669 L
+7273 3669 mt 7280 3657 L
+7280 3657 mt 7296 3630 L
+7296 3630 mt 7308 3611 L
+7308 3611 mt 7313 3602 L
+7313 3602 mt 7329 3575 L
+7329 3575 mt 7342 3552 L
+7342 3552 mt 7346 3547 L
+7346 3547 mt 7363 3519 L
+7363 3519 mt 7377 3496 L
+7377 3496 mt 7380 3492 L
+7380 3492 mt 7398 3464 L
+7398 3464 mt 7412 3442 L
+7412 3442 mt 7415 3437 L
+7415 3437 mt 7434 3409 L
+7434 3409 mt 7447 3389 L
+7447 3389 mt 7452 3382 L
+7452 3382 mt 7470 3354 L
+7470 3354 mt 7482 3336 L
+7482 3336 mt 7488 3327 L
+7488 3327 mt 7507 3299 L
+7507 3299 mt 7517 3284 L
+7517 3284 mt 7525 3272 L
+7525 3272 mt 7543 3244 L
+7543 3244 mt 7552 3231 L
+7552 3231 mt 7561 3217 L
+7561 3217 mt 7579 3189 L
+7579 3189 mt 7587 3178 L
+7587 3178 mt 7598 3162 L
+7598 3162 mt 7615 3134 L
+7615 3134 mt 7621 3125 L
+7621 3125 mt 7634 3107 L
+7634 3107 mt 7651 3079 L
+7651 3079 mt 7656 3072 L
+7656 3072 mt 7670 3052 L
+7670 3052 mt 7688 3024 L
+7688 3024 mt 7691 3019 L
+7691 3019 mt 7707 2997 L
+7707 2997 mt 7725 2969 L
+7725 2969 mt 7726 2968 L
+7726 2968 mt 7745 2942 L
+7745 2942 mt 7761 2919 L
+7761 2919 mt 7764 2914 L
+7764 2914 mt 7784 2887 L
+7784 2887 mt 7796 2869 L
+7796 2869 mt 7803 2859 L
+7803 2859 mt 7823 2832 L
+7823 2832 mt 7831 2820 L
+7831 2820 mt 7842 2804 L
+7842 2804 mt 7861 2777 L
+7861 2777 mt 7865 2770 L
+7865 2770 mt 7880 2749 L
+7880 2749 mt 7899 2722 L
+7899 2722 mt 7900 2719 L
+7900 2719 mt 7919 2694 L
+7919 2694 mt 7935 2673 L
+7935 2673 mt 7941 2667 L
+7941 2667 mt 7965 2639 L
+7965 2639 mt 7970 2633 L
+7970 2633 mt 7994 2612 L
+7994 2612 mt 8005 2602 L
+7796 2144 mt 7800 2171 L
+7800 2171 mt 7804 2199 L
+7804 2199 mt 7806 2226 L
+7806 2226 mt 7806 2254 L
+7806 2254 mt 7804 2281 L
+7804 2281 mt 7802 2309 L
+7802 2309 mt 7797 2336 L
+7797 2336 mt 7796 2345 L
+7796 2345 mt 7792 2364 L
+7792 2364 mt 7786 2391 L
+7786 2391 mt 7779 2419 L
+7779 2419 mt 7772 2446 L
+7772 2446 mt 7764 2474 L
+7764 2474 mt 7761 2484 L
+7761 2484 mt 7756 2502 L
+7756 2502 mt 7748 2529 L
+7748 2529 mt 7740 2557 L
+7740 2557 mt 7732 2584 L
+7732 2584 mt 7726 2602 L
+7726 2602 mt 7723 2612 L
+7723 2612 mt 7714 2639 L
+7714 2639 mt 7704 2667 L
+7704 2667 mt 7694 2694 L
+7694 2694 mt 7691 2700 L
+7691 2700 mt 7683 2722 L
+7683 2722 mt 7672 2749 L
+7672 2749 mt 7659 2777 L
+7659 2777 mt 7656 2783 L
+7656 2783 mt 7647 2804 L
+7647 2804 mt 7633 2832 L
+7633 2832 mt 7621 2855 L
+7621 2855 mt 7619 2859 L
+7619 2859 mt 7605 2887 L
+7605 2887 mt 7591 2914 L
+7591 2914 mt 7587 2923 L
+7587 2923 mt 7577 2942 L
+7577 2942 mt 7563 2969 L
+7563 2969 mt 7552 2990 L
+7552 2990 mt 7548 2997 L
+7548 2997 mt 7534 3024 L
+7534 3024 mt 7520 3052 L
+7520 3052 mt 7517 3058 L
+7517 3058 mt 7506 3079 L
+7506 3079 mt 7492 3107 L
+7492 3107 mt 7482 3125 L
+7482 3125 mt 7477 3134 L
+7477 3134 mt 7462 3162 L
+7462 3162 mt 7447 3189 L
+7447 3189 mt 7447 3189 L
+7447 3189 mt 7432 3217 L
+7432 3217 mt 7416 3244 L
+7416 3244 mt 7412 3251 L
+7412 3251 mt 7400 3272 L
+7400 3272 mt 7384 3299 L
+7384 3299 mt 7377 3310 L
+7377 3310 mt 7368 3327 L
+7368 3327 mt 7352 3354 L
+7352 3354 mt 7342 3370 L
+7342 3370 mt 7335 3382 L
+7335 3382 mt 7319 3409 L
+7319 3409 mt 7308 3430 L
+7308 3430 mt 7303 3437 L
+7303 3437 mt 7288 3464 L
+7288 3464 mt 7273 3491 L
+7273 3491 mt 7272 3492 L
+7272 3492 mt 7257 3519 L
+7257 3519 mt 7242 3547 L
+7242 3547 mt 7238 3555 L
+7238 3555 mt 7227 3575 L
+7227 3575 mt 7213 3602 L
+7213 3602 mt 7203 3620 L
+7203 3620 mt 7198 3630 L
+7198 3630 mt 7182 3657 L
+7182 3657 mt 7168 3682 L
+7168 3682 mt 7167 3685 L
+7167 3685 mt 7151 3712 L
+7151 3712 mt 7134 3740 L
+7134 3740 mt 7133 3741 L
+7133 3741 mt 7117 3767 L
+7117 3767 mt 7100 3795 L
+7100 3795 mt 7098 3797 L
+7098 3797 mt 7083 3822 L
+7083 3822 mt 7066 3850 L
+7066 3850 mt 7063 3853 L
+7063 3853 mt 7049 3877 L
+7049 3877 mt 7032 3905 L
+7032 3905 mt 7029 3910 L
+7029 3910 mt 7015 3932 L
+7015 3932 mt 6998 3960 L
+6998 3960 mt 6994 3966 L
+6994 3966 mt 6981 3987 L
+6981 3987 mt 6963 4015 L
+6963 4015 mt 6959 4021 L
+6959 4021 mt 6945 4042 L
+6945 4042 mt 6927 4070 L
+6927 4070 mt 6924 4074 L
+6924 4074 mt 6908 4097 L
+6908 4097 mt 6889 4125 L
+6889 4125 mt 6889 4125 L
+6889 4125 mt 6870 4152 L
+6870 4152 mt 6854 4173 L
+6854 4173 mt 6850 4180 L
+6850 4180 mt 6830 4207 L
+6830 4207 mt 6819 4222 L
+6819 4222 mt 6810 4235 L
+6810 4235 mt 6790 4262 L
+6790 4262 mt 6785 4270 L
+6785 4270 mt 6770 4290 L
+6770 4290 mt 6750 4317 L
+6750 4317 mt 6749 4317 L
+6749 4317 mt 6729 4345 L
+6729 4345 mt 6715 4364 L
+6715 4364 mt 6709 4372 L
+6709 4372 mt 6688 4400 L
+6688 4400 mt 6680 4410 L
+6680 4410 mt 6667 4427 L
+6667 4427 mt 6645 4454 L
+6645 4454 mt 6645 4455 L
+6645 4455 mt 6622 4482 L
+6622 4482 mt 6610 4497 L
+6610 4497 mt 6599 4510 L
+6599 4510 mt 6575 4536 L
+6575 4536 mt 6574 4537 L
+6574 4537 mt 6547 4565 L
+6547 4565 mt 6540 4571 L
+6540 4571 mt 6517 4592 L
+6517 4592 mt 6506 4602 L
+6506 4602 mt 6484 4620 L
+6484 4620 mt 6471 4630 L
+6471 4630 mt 6446 4648 L
+6446 4648 mt 6436 4654 L
+6436 4654 mt 6401 4675 L
+6401 4675 mt 6401 4675 L
+6401 4675 mt 6366 4693 L
+6366 4693 mt 6344 4703 L
+6344 4703 mt 6331 4708 L
+6331 4708 mt 6296 4721 L
+6296 4721 mt 6268 4730 L
+6268 4730 mt 6261 4732 L
+6261 4732 mt 6227 4741 L
+6227 4741 mt 6192 4749 L
+6192 4749 mt 6157 4755 L
+6157 4755 mt 6135 4758 L
+6135 4758 mt 6122 4759 L
+6122 4759 mt 6087 4763 L
+6087 4763 mt 6052 4765 L
+6052 4765 mt 6017 4765 L
+6017 4765 mt 5983 4764 L
+5983 4764 mt 5948 4763 L
+5948 4763 mt 5913 4759 L
+5913 4759 mt 5896 4758 L
+5896 4758 mt 5878 4755 L
+5878 4755 mt 5843 4750 L
+5843 4750 mt 5808 4744 L
+5808 4744 mt 5773 4737 L
+5773 4737 mt 5743 4730 L
+5743 4730 mt 5738 4729 L
+5738 4729 mt 5704 4720 L
+5704 4720 mt 5669 4710 L
+5669 4710 mt 5643 4703 L
+5643 4703 mt 5634 4700 L
+5634 4700 mt 5599 4688 L
+5599 4688 mt 5565 4675 L
+5565 4675 mt 5564 4675 L
+5564 4675 mt 5529 4659 L
+5529 4659 mt 5505 4648 L
+5505 4648 mt 5494 4642 L
+5494 4642 mt 5459 4623 L
+5459 4623 mt 5453 4620 L
+5453 4620 mt 5425 4604 L
+5425 4604 mt 5405 4592 L
+5405 4592 mt 5390 4576 L
+5390 4576 mt 5382 4565 L
+5382 4565 mt 5375 4537 L
+5375 4537 mt 5372 4510 L
+5372 4510 mt 5371 4482 L
+5371 4482 mt 5369 4455 L
+5369 4455 mt 5366 4427 L
+5366 4427 mt 5360 4400 L
+5360 4400 mt 5355 4382 L
+5355 4382 mt 5352 4372 L
+5352 4372 mt 5344 4345 L
+5344 4345 mt 5334 4317 L
+5334 4317 mt 5325 4290 L
+5325 4290 mt 5320 4276 L
+5320 4276 mt 5315 4262 L
+5315 4262 mt 5306 4235 L
+5306 4235 mt 5296 4207 L
+5296 4207 mt 5285 4186 L
+5285 4186 mt 5282 4180 L
+5282 4180 mt 5265 4152 L
+5265 4152 mt 5250 4133 L
+5250 4133 mt 5243 4125 L
+5243 4125 mt 5215 4101 L
+5215 4101 mt 5211 4097 L
+5211 4097 mt 5181 4077 L
+5181 4077 mt 5170 4070 L
+5170 4070 mt 5146 4054 L
+5146 4054 mt 5132 4042 L
+5132 4042 mt 5111 4023 L
+5111 4023 mt 5104 4015 L
+5104 4015 mt 5082 3987 L
+5082 3987 mt 5076 3979 L
+5076 3979 mt 5063 3960 L
+5063 3960 mt 5043 3932 L
+5043 3932 mt 5041 3930 L
+5041 3930 mt 5019 3905 L
+5019 3905 mt 5006 3892 L
+5006 3892 mt 4992 3877 L
+4992 3877 mt 4971 3856 L
+4971 3856 mt 4966 3850 L
+4966 3850 mt 4942 3822 L
+4942 3822 mt 4936 3816 L
+4936 3816 mt 4920 3795 L
+4920 3795 mt 4902 3769 L
+4902 3769 mt 4900 3767 L
+4900 3767 mt 4881 3740 L
+4881 3740 mt 4867 3717 L
+4867 3717 mt 4864 3712 L
+4864 3712 mt 4847 3685 L
+4847 3685 mt 4832 3660 L
+4832 3660 mt 4830 3657 L
+4830 3657 mt 4811 3630 L
+4811 3630 mt 4797 3609 L
+4797 3609 mt 4792 3602 L
+4792 3602 mt 4772 3575 L
+4772 3575 mt 4762 3559 L
+4762 3559 mt 4754 3547 L
+4754 3547 mt 4738 3519 L
+4738 3519 mt 4727 3500 L
+4727 3500 mt 4722 3492 L
+4722 3492 mt 4707 3464 L
+4707 3464 mt 4692 3438 L
+4692 3438 mt 4692 3437 L
+4692 3437 mt 4673 3409 L
+4673 3409 mt 4657 3389 L
+4657 3389 mt 4651 3382 L
+4651 3382 mt 4625 3354 L
+4625 3354 mt 4623 3352 L
+4623 3352 mt 4596 3327 L
+4596 3327 mt 4588 3319 L
+4588 3319 mt 4567 3299 L
+4567 3299 mt 4553 3285 L
+4553 3285 mt 4539 3272 L
+4539 3272 mt 4518 3250 L
+4518 3250 mt 4513 3244 L
+4513 3244 mt 4485 3217 L
+4485 3217 mt 4483 3215 L
+4483 3215 mt 4455 3189 L
+4455 3189 mt 4448 3183 L
+4448 3183 mt 4422 3162 L
+4422 3162 mt 4413 3155 L
+4413 3155 mt 4387 3134 L
+4387 3134 mt 4379 3128 L
+4379 3128 mt 4347 3107 L
+4347 3107 mt 4344 3104 L
+4344 3104 mt 4309 3085 L
+4309 3085 mt 4294 3079 L
+4294 3079 mt 4274 3074 L
+4274 3074 mt 4239 3079 L
+4239 3079 mt 4238 3079 L
+4238 3079 mt 4204 3104 L
+4204 3104 mt 4202 3107 L
+4202 3107 mt 4190 3134 L
+4190 3134 mt 4184 3162 L
+4184 3162 mt 4180 3189 L
+4180 3189 mt 4172 3217 L
+4172 3217 mt 4169 3225 L
+4169 3225 mt 4162 3244 L
+4162 3244 mt 4151 3272 L
+4151 3272 mt 4137 3299 L
+4137 3299 mt 4134 3305 L
+4134 3305 mt 4123 3327 L
+4123 3327 mt 4106 3354 L
+4106 3354 mt 4100 3364 L
+4100 3364 mt 4084 3382 L
+4084 3382 mt 4065 3402 L
+4065 3402 mt 4056 3409 L
+4056 3409 mt 4030 3428 L
+4030 3428 mt 4016 3437 L
+4016 3437 mt 3995 3449 L
+3995 3449 mt 3970 3464 L
+3970 3464 mt 3960 3471 L
+3960 3471 mt 3938 3492 L
+3938 3492 mt 3925 3508 L
+3925 3508 mt 3920 3519 L
+3920 3519 mt 3918 3547 L
+3918 3547 mt 3922 3575 L
+3922 3575 mt 3925 3587 L
+3925 3587 mt 3929 3602 L
+3929 3602 mt 3935 3630 L
+3935 3630 mt 3942 3657 L
+3942 3657 mt 3949 3685 L
+3949 3685 mt 3955 3712 L
+3955 3712 mt 3959 3740 L
+3959 3740 mt 3960 3756 L
+3960 3756 mt 3961 3767 L
+3961 3767 mt 3960 3783 L
+3960 3783 mt 3960 3795 L
+3960 3795 mt 3956 3822 L
+3956 3822 mt 3953 3850 L
+3953 3850 mt 3949 3877 L
+3949 3877 mt 3947 3905 L
+3947 3905 mt 3949 3932 L
+3949 3932 mt 3954 3960 L
+3954 3960 mt 3960 3986 L
+3960 3986 mt 3960 3987 L
+3960 3987 mt 3969 4015 L
+3969 4015 mt 3975 4042 L
+3975 4042 mt 3980 4070 L
+3980 4070 mt 3983 4097 L
+3983 4097 mt 3984 4125 L
+3984 4125 mt 3984 4152 L
+3984 4152 mt 3982 4180 L
+3982 4180 mt 3979 4207 L
+3979 4207 mt 3973 4235 L
+3973 4235 mt 3964 4262 L
+3964 4262 mt 3960 4274 L
+3960 4274 mt 3954 4290 L
+3954 4290 mt 3944 4317 L
+3944 4317 mt 3942 4345 L
+3942 4345 mt 3950 4372 L
+3950 4372 mt 3959 4400 L
+3959 4400 mt 3960 4403 L
+3960 4403 mt 3968 4427 L
+3968 4427 mt 3979 4455 L
+3979 4455 mt 3990 4482 L
+3990 4482 mt 3995 4495 L
+3995 4495 mt 4001 4510 L
+4001 4510 mt 4011 4537 L
+4011 4537 mt 4017 4565 L
+4017 4565 mt 4018 4592 L
+4018 4592 mt 4013 4620 L
+4013 4620 mt 4002 4648 L
+4002 4648 mt 3995 4663 L
+3995 4663 mt 3989 4675 L
+3989 4675 mt 3975 4703 L
+3975 4703 mt 3960 4730 L
+3960 4730 mt 3960 4730 L
+3960 4730 mt 3944 4758 L
+3944 4758 mt 3927 4785 L
+3927 4785 mt 3925 4787 L
+3925 4787 mt 3909 4813 L
+3909 4813 mt 3890 4839 L
+3890 4839 mt 3890 4840 L
+3890 4840 mt 3870 4868 L
+3870 4868 mt 3855 4886 L
+3855 4886 mt 3848 4895 L
+3848 4895 mt 3825 4923 L
+3825 4923 mt 3821 4928 L
+3821 4928 mt 3800 4950 L
+3800 4950 mt 3786 4966 L
+3786 4966 mt 3774 4978 L
+3774 4978 mt 3751 5000 L
+3751 5000 mt 3746 5005 L
+3746 5005 mt 3716 5032 L
+3716 5032 mt 3715 5033 L
+3715 5033 mt 3682 5060 L
+3682 5060 mt 3681 5061 L
+3681 5061 mt 3646 5087 L
+3646 5087 mt 3645 5088 L
+3645 5088 mt 3611 5111 L
+3611 5111 mt 3605 5115 L
+3605 5115 mt 3577 5134 L
+3577 5134 mt 3561 5143 L
+3561 5143 mt 3542 5154 L
+3542 5154 mt 3512 5170 L
+3512 5170 mt 3507 5173 L
+3507 5173 mt 3472 5191 L
+3472 5191 mt 3458 5198 L
+3458 5198 mt 3437 5208 L
+3437 5208 mt 3402 5224 L
+3402 5224 mt 3399 5225 L
+3399 5225 mt 3367 5239 L
+3367 5239 mt 3332 5253 L
+3332 5253 mt 3332 5253 L
+3332 5253 mt 3298 5265 L
+3298 5265 mt 3263 5277 L
+3263 5277 mt 3252 5280 L
+3252 5280 mt 3228 5288 L
+3228 5288 mt 3193 5297 L
+3193 5297 mt 3158 5306 L
+3158 5306 mt 3149 5308 L
+3149 5308 mt 3123 5314 L
+3123 5314 mt 3088 5320 L
+3088 5320 mt 3053 5326 L
+3053 5326 mt 3019 5331 L
+3019 5331 mt 2986 5335 L
+2986 5335 mt 2984 5336 L
+2984 5336 mt 2949 5340 L
+2949 5340 mt 2914 5343 L
+2914 5343 mt 2879 5346 L
+2879 5346 mt 2844 5348 L
+2844 5348 mt 2809 5349 L
+2809 5349 mt 2774 5350 L
+2774 5350 mt 2740 5350 L
+2740 5350 mt 2705 5349 L
+2705 5349 mt 2670 5348 L
+2670 5348 mt 2635 5346 L
+2635 5346 mt 2600 5344 L
+2600 5344 mt 2565 5341 L
+2565 5341 mt 2530 5337 L
+2530 5337 mt 2515 5335 L
+2515 5335 mt 2496 5333 L
+2496 5333 mt 2461 5329 L
+2461 5329 mt 2426 5324 L
+2426 5324 mt 2391 5319 L
+2391 5319 mt 2356 5313 L
+2356 5313 mt 2324 5308 L
+2324 5308 mt 2321 5307 L
+2321 5307 mt 2286 5301 L
+2286 5301 mt 2251 5295 L
+2251 5295 mt 2217 5287 L
+2217 5287 mt 2185 5280 L
+2185 5280 mt 2182 5280 L
+2182 5280 mt 2147 5272 L
+2147 5272 mt 2112 5263 L
+2112 5263 mt 2077 5254 L
+2077 5254 mt 2073 5253 L
+2073 5253 mt 2042 5245 L
+2042 5245 mt 2007 5235 L
+2007 5235 mt 1976 5225 L
+1976 5225 mt 1972 5224 L
+1972 5224 mt 1938 5213 L
+1938 5213 mt 1903 5202 L
+1903 5202 mt 1891 5198 L
+1891 5198 mt 1868 5190 L
+1868 5190 mt 1833 5177 L
+1833 5177 mt 1814 5170 L
+1814 5170 mt 1798 5165 L
+1798 5165 mt 1763 5151 L
+1763 5151 mt 1743 5143 L
+1743 5143 mt 1728 5137 L
+1728 5137 mt 1694 5122 L
+1694 5122 mt 1678 5115 L
+1678 5115 mt 1659 5106 L
+1659 5106 mt 1624 5090 L
+1624 5090 mt 1620 5088 L
+1620 5088 mt 1589 5072 L
+1589 5072 mt 1569 5060 L
+1569 5060 mt 1554 5052 L
+1554 5052 mt 1522 5033 L
+1522 5033 mt 1519 5031 L
+1519 5031 mt 1484 5008 L
+1484 5008 mt 1479 5005 L
+1479 5005 mt 1449 4984 L
+1449 4984 mt 1441 4978 L
+1441 4978 mt 1415 4958 L
+1415 4958 mt 1405 4950 L
+1405 4950 mt 1380 4929 L
+1380 4929 mt 1372 4923 L
+1372 4923 mt 1345 4898 L
+1345 4898 mt 1342 4895 L
+1342 4895 mt 1314 4868 L
+1314 4868 mt 1310 4863 L
+1310 4863 mt 1288 4840 L
+1288 4840 mt 1275 4826 L
+1275 4826 mt 1264 4813 L
+1264 4813 mt 1241 4785 L
+1241 4785 mt 1240 4784 L
+1240 4784 mt 1220 4758 L
+1220 4758 mt 1205 4738 L
+1205 4738 mt 1200 4730 L
+1200 4730 mt 1180 4703 L
+1180 4703 mt 1170 4687 L
+1170 4687 mt 1162 4675 L
+1162 4675 mt 1145 4648 L
+1145 4648 mt 1136 4632 L
+1136 4632 mt 1128 4620 L
+1128 4620 mt 1112 4592 L
+1112 4592 mt 1101 4572 L
+1101 4572 mt 1097 4565 L
+1097 4565 mt 1082 4537 L
+1082 4537 mt 1067 4510 L
+1067 4510 mt 1066 4508 L
+1066 4508 mt 1053 4482 L
+1053 4482 mt 1039 4455 L
+1039 4455 mt 1031 4439 L
+1031 4439 mt 1025 4427 L
+1025 4427 mt 1012 4400 L
+1012 4400 mt 1000 4372 L
+1000 4372 mt 996 4363 L
+ 996 4363 mt 988 4345 L
+ 988 4345 mt 977 4317 L
+ 977 4317 mt 967 4290 L
+ 967 4290 mt 961 4275 L
+ 961 4275 mt 957 4262 L
+ 957 4262 mt 947 4235 L
+ 947 4235 mt 938 4207 L
+ 938 4207 mt 929 4180 L
+ 929 4180 mt 926 4171 L
+ 926 4171 mt 920 4152 L
+ 920 4152 mt 911 4125 L
+ 911 4125 mt 903 4097 L
+ 903 4097 mt 894 4070 L
+ 894 4070 mt 892 4063 L
+ 892 4063 mt 885 4042 L
+ 885 4042 mt 875 4015 L
+ 875 4015 mt 865 3987 L
+ 865 3987 mt 857 3963 L
+ 857 3963 mt 855 3960 L
+ 855 3960 mt 845 3932 L
+ 845 3932 mt 833 3905 L
+ 833 3905 mt 822 3878 L
+ 822 3878 mt 821 3877 L
+ 821 3877 mt 808 3850 L
+ 808 3850 mt 794 3822 L
+ 794 3822 mt 787 3810 L
+ 787 3810 mt 777 3795 L
+ 777 3795 mt 759 3767 L
+ 759 3767 mt 752 3757 L
+ 752 3757 mt 740 3740 L
+ 740 3740 mt 718 3712 L
+ 718 3712 mt 717 3712 L
+ 717 3712 mt 693 3685 L
+ 693 3685 mt 682 3673 L
+ 682 3673 mt 667 3657 L
+ 667 3657 mt 647 3637 L
+ 647 3637 mt 639 3630 L
+ 639 3630 mt 613 3604 L
+ 613 3604 mt 610 3602 L
+ 610 3602 mt 579 3575 L
+ 579 3575 mt 578 3573 L
+ 578 3573 mt 548 3547 L
+ 548 3547 mt 543 3543 L
+ 543 3543 mt 516 3519 L
+ 516 3519 mt 508 3513 L
+ 508 3513 mt 483 3492 L
+ 483 3492 mt 473 3484 L
+ 473 3484 mt 449 3464 L
+ 449 3464 mt 438 3456 L
+ 438 3456 mt 413 3437 L
+ 413 3437 mt 403 3429 L
+ 403 3429 mt 377 3409 L
+ 377 3409 mt 368 3403 L
+ 368 3403 mt 340 3382 L
+ 340 3382 mt 334 3377 L
+ 334 3377 mt 303 3354 L
+ 303 3354 mt 299 3352 L
+ 299 3352 mt 265 3327 L
+ 265 3327 mt 264 3326 L
+ 264 3326 mt 229 3300 L
+ 229 3300 mt 229 3299 L
+ 229 3299 mt 194 3273 L
+ 194 3273 mt 193 3272 L
+ 193 3272 mt 159 3246 L
+ 159 3246 mt 157 3244 L
+ 157 3244 mt 124 3218 L
+ 124 3218 mt 123 3217 L
+ 123 3217 mt 90 3189 L
+ 90 3189 mt 90 3189 L
+ 90 3189 mt 58 3162 L
+ 58 3162 mt 55 3159 L
+ 55 3159 mt 27 3134 L
+ 27 3134 mt 20 3128 L
+ 20 3128 mt -3 3107 L
+ -3 3107 mt -14 3096 L
+ -14 3096 mt -32 3079 L
+ -32 3079 mt -49 3063 L
+ -49 3063 mt -61 3052 L
+ -61 3052 mt -84 3030 L
+ -84 3030 mt -90 3024 L
+ -90 3024 mt -117 2997 L
+-117 2997 mt -119 2995 L
+-119 2995 mt -144 2969 L
+-144 2969 mt -154 2960 L
+-154 2960 mt -171 2942 L
+-171 2942 mt -188 2923 L
+-188 2923 mt -196 2914 L
+-196 2914 mt -221 2887 L
+-221 2887 mt -223 2884 L
+-223 2884 mt -244 2859 L
+-244 2859 mt -258 2842 L
+-258 2842 mt -267 2832 L
+-267 2832 mt -288 2804 L
+-288 2804 mt -293 2797 L
+-293 2797 mt -308 2777 L
+-308 2777 mt -328 2749 L
+-328 2749 mt -328 2749 L
+-328 2749 mt -347 2722 L
+-347 2722 mt -363 2697 L
+-363 2697 mt -365 2694 L
+-365 2694 mt -383 2667 L
+-383 2667 mt -398 2641 L
+-398 2641 mt -399 2639 L
+-399 2639 mt -415 2612 L
+-415 2612 mt -429 2584 L
+-429 2584 mt -433 2577 L
+-433 2577 mt -444 2557 L
+-444 2557 mt -457 2529 L
+-457 2529 mt -467 2505 L
+-467 2505 mt -469 2502 L
+-469 2502 mt -481 2474 L
+-481 2474 mt -492 2446 L
+-492 2446 mt -500 2419 L
+-500 2419 mt -502 2412 L
+-502 2412 mt -508 2391 L
+-508 2391 mt -514 2364 L
+-514 2364 mt -519 2336 L
+-519 2336 mt -521 2309 L
+-521 2309 mt -522 2281 L
+-522 2281 mt -521 2254 L
+-521 2254 mt -518 2226 L
+-518 2226 mt -514 2199 L
+-514 2199 mt -509 2171 L
+-509 2171 mt -502 2147 L
+-502 2147 mt -501 2144 L
+-501 2144 mt -494 2116 L
+-494 2116 mt -484 2089 L
+-484 2089 mt -473 2061 L
+-473 2061 mt -467 2050 L
+-467 2050 mt -461 2034 L
+-461 2034 mt -448 2006 L
+-448 2006 mt -434 1979 L
+-434 1979 mt -433 1976 L
+-433 1976 mt -420 1951 L
+-420 1951 mt -405 1924 L
+-405 1924 mt -398 1911 L
+-398 1911 mt -390 1896 L
+-390 1896 mt -374 1869 L
+-374 1869 mt -363 1849 L
+-363 1849 mt -359 1841 L
+-359 1841 mt -343 1814 L
+-343 1814 mt -328 1786 L
+-328 1786 mt -328 1786 L
+-328 1786 mt -313 1759 L
+-313 1759 mt -298 1731 L
+-298 1731 mt -293 1722 L
+-293 1722 mt -283 1704 L
+-283 1704 mt -268 1676 L
+-268 1676 mt -258 1658 L
+-258 1658 mt -253 1649 L
+-253 1649 mt -239 1621 L
+-239 1621 mt -223 1594 L
+-223 1594 mt -223 1594 L
+-223 1594 mt -208 1566 L
+-208 1566 mt -193 1539 L
+-193 1539 mt -188 1530 L
+-188 1530 mt -179 1511 L
+-179 1511 mt -164 1484 L
+-164 1484 mt -154 1464 L
+-154 1464 mt -149 1456 L
+-149 1456 mt -135 1428 L
+-135 1428 mt -121 1401 L
+-121 1401 mt -119 1396 L
+-119 1396 mt -108 1373 L
+-108 1373 mt -95 1346 L
+ -95 1346 mt -84 1323 L
+ -84 1323 mt -82 1318 L
+ -82 1318 mt -69 1291 L
+ -69 1291 mt -57 1263 L
+ -57 1263 mt -49 1246 L
+ -49 1246 mt -45 1236 L
+ -45 1236 mt -33 1208 L
+ -33 1208 mt -21 1181 L
+ -21 1181 mt -14 1165 L
+ -14 1165 mt -9 1153 L
+ -9 1153 mt 1 1126 L
+ 1 1126 mt 13 1098 L
+ 13 1098 mt 20 1084 L
+ 20 1084 mt 26 1071 L
+ 26 1071 mt 39 1043 L
+ 39 1043 mt 52 1016 L
+ 52 1016 mt 55 1011 L
+ 55 1011 mt 66 988 L
+ 66 988 mt 81 961 L
+ 81 961 mt 90 945 L
+ 90 945 mt 96 933 L
+ 96 933 mt 111 906 L
+ 111 906 mt 124 883 L
+ 124 883 mt 127 878 L
+ 127 878 mt 144 851 L
+ 144 851 mt 159 826 L
+ 159 826 mt 161 823 L
+ 161 823 mt 179 796 L
+ 179 796 mt 194 772 L
+ 194 772 mt 197 768 L
+ 197 768 mt 216 741 L
+ 216 741 mt 229 722 L
+ 229 722 mt 235 713 L
+ 235 713 mt 255 686 L
+ 255 686 mt 264 673 L
+ 264 673 mt 275 658 L
+ 275 658 mt 296 631 L
+ 296 631 mt 299 627 L
+ 299 627 mt 317 603 L
+ 317 603 mt 334 583 L
+ 334 583 mt 339 576 L
+ 339 576 mt 361 548 L
+ 361 548 mt 368 540 L
+ 368 540 mt 384 521 L
+ 384 521 mt 403 498 L
+ 403 498 mt 407 493 L
+ 407 493 mt 431 466 L
+ 431 466 mt 438 457 L
+ 438 457 mt 454 438 L
+ 454 438 mt 473 417 L
+ 473 417 mt 478 411 L
+ 478 411 mt 503 383 L
+ 503 383 mt 508 378 L
+ 508 378 mt 529 355 L
+ 529 355 mt 543 341 L
+ 543 341 mt 556 328 L
+ 556 328 mt 578 306 L
+ 578 306 mt 584 300 L
+ 584 300 mt 613 274 L
+ 613 274 mt 614 273 L
+ 614 273 mt 645 245 L
+ 645 245 mt 647 244 L
+ 647 244 mt 679 218 L
+ 679 218 mt 682 215 L
+ 682 215 mt 715 190 L
+ 715 190 mt 717 189 L
+ 717 189 mt 752 164 L
+ 752 164 mt 754 163 L
+ 754 163 mt 787 141 L
+ 787 141 mt 795 135 L
+ 795 135 mt 822 118 L
+ 822 118 mt 839 108 L
+ 839 108 mt 857 97 L
+ 857 97 mt 885 80 L
+ 885 80 mt 892 76 L
+ 892 76 mt 926 56 L
+ 926 56 mt 933 53 L
+ 933 53 mt 961 37 L
+ 961 37 mt 984 25 L
+ 984 25 mt 996 19 L
+ 996 19 mt 1031 1 L
+1031 1 mt 1038 -1 L
+1038 -1 mt 1066 -15 L
+1066 -15 mt 1096 -29 L
+1096 -29 mt 1101 -31 L
+1101 -31 mt 1136 -47 L
+1136 -47 mt 1158 -56 L
+1158 -56 mt 1170 -62 L
+1170 -62 mt 1205 -76 L
+1205 -76 mt 1223 -84 L
+1223 -84 mt 1240 -91 L
+1240 -91 mt 1275 -105 L
+1275 -105 mt 1292 -111 L
+1292 -111 mt 1310 -118 L
+1310 -118 mt 1345 -132 L
+1345 -132 mt 1364 -139 L
+1364 -139 mt 1380 -145 L
+1380 -145 mt 1415 -158 L
+1415 -158 mt 1439 -166 L
+1439 -166 mt 1449 -170 L
+1449 -170 mt 1484 -182 L
+1484 -182 mt 1519 -194 L
+1519 -194 mt 1519 -194 L
+1519 -194 mt 1554 -205 L
+1554 -205 mt 1589 -216 L
+1589 -216 mt 1605 -221 L
+1605 -221 mt 1624 -227 L
+1624 -227 mt 1659 -238 L
+1659 -238 mt 1694 -248 L
+1694 -248 mt 1696 -249 L
+1696 -249 mt 1728 -258 L
+1728 -258 mt 1763 -268 L
+1763 -268 mt 1791 -276 L
+1791 -276 mt 1798 -278 L
+1798 -278 mt 1833 -288 L
+1833 -288 mt 1868 -298 L
+1868 -298 mt 1889 -304 L
+1889 -304 mt 1903 -308 L
+1903 -308 mt 1938 -318 L
+1938 -318 mt 1972 -328 L
+1972 -328 mt 1986 -331 L
+1986 -331 mt 2007 -338 L
+2007 -338 mt 2042 -348 L
+2042 -348 mt 2077 -358 L
+2077 -358 mt 2081 -359 L
+2081 -359 mt 2112 -368 L
+2112 -368 mt 2147 -378 L
+2147 -378 mt 2175 -386 L
+2175 -386 mt 2182 -389 L
+2182 -389 mt 2217 -399 L
+2217 -399 mt 2251 -409 L
+2251 -409 mt 2270 -414 L
+2270 -414 mt 2286 -419 L
+2286 -419 mt 2321 -428 L
+2321 -428 mt 2356 -438 L
+2356 -438 mt 2370 -441 L
+2370 -441 mt 2391 -447 L
+2391 -447 mt 2426 -457 L
+2426 -457 mt 2461 -466 L
+2461 -466 mt 2470 -469 L
+2470 -469 mt 2496 -476 L
+2496 -476 mt 2530 -486 L
+2530 -486 mt 2565 -496 L
+2565 -496 mt 2565 -496 L
+2565 -496 mt 2600 -507 L
+2600 -507 mt 2635 -518 L
+2635 -518 mt 2656 -524 L
+2656 -524 mt 2670 -528 L
+2670 -528 mt 2705 -539 L
+2705 -539 mt 2740 -550 L
+2740 -550 mt 2744 -551 L
+2744 -551 mt 2774 -561 L
+2774 -561 mt 2809 -572 L
+2809 -572 mt 2832 -579 L
+2832 -579 mt 2844 -583 L
+2844 -583 mt 2879 -593 L
+2879 -593 mt 2914 -603 L
+2914 -603 mt 2926 -606 L
+2926 -606 mt 2949 -613 L
+2949 -613 mt 2984 -622 L
+2984 -622 mt 3019 -631 L
+3019 -631 mt 3031 -634 L
+3031 -634 mt 3053 -639 L
+3053 -639 mt 3088 -648 L
+3088 -648 mt 3123 -655 L
+3123 -655 mt 3154 -661 L
+3154 -661 mt 3158 -662 L
+3158 -662 mt 3193 -669 L
+3193 -669 mt 3228 -675 L
+3228 -675 mt 3263 -681 L
+3263 -681 mt 3298 -686 L
+3298 -686 mt 3316 -689 L
+3316 -689 mt 3332 -691 L
+3332 -691 mt 3367 -696 L
+3367 -696 mt 3402 -700 L
+3402 -700 mt 3437 -703 L
+3437 -703 mt 3472 -706 L
+3472 -706 mt 3507 -708 L
+3507 -708 mt 3542 -710 L
+3542 -710 mt 3577 -711 L
+3577 -711 mt 3611 -711 L
+3611 -711 mt 3646 -710 L
+3646 -710 mt 3681 -709 L
+3681 -709 mt 3716 -708 L
+3716 -708 mt 3751 -706 L
+3751 -706 mt 3786 -703 L
+3786 -703 mt 3821 -700 L
+3821 -700 mt 3855 -697 L
+3855 -697 mt 3890 -693 L
+3890 -693 mt 3922 -689 L
+3922 -689 mt 3925 -689 L
+3925 -689 mt 3960 -684 L
+3960 -684 mt 3995 -679 L
+3995 -679 mt 4030 -674 L
+4030 -674 mt 4065 -668 L
+4065 -668 mt 4099 -661 L
+4099 -661 mt 4100 -661 L
+4100 -661 mt 4134 -655 L
+4134 -655 mt 4169 -649 L
+4169 -649 mt 4204 -642 L
+4204 -642 mt 4239 -635 L
+4239 -635 mt 4244 -634 L
+4244 -634 mt 4274 -628 L
+4274 -628 mt 4309 -621 L
+4309 -621 mt 4344 -614 L
+4344 -614 mt 4379 -607 L
+4379 -607 mt 4381 -606 L
+4381 -606 mt 4413 -600 L
+4413 -600 mt 4448 -592 L
+4448 -592 mt 4483 -583 L
+4483 -583 mt 4500 -579 L
+4500 -579 mt 4518 -575 L
+4518 -575 mt 4553 -566 L
+4553 -566 mt 4588 -556 L
+4588 -556 mt 4605 -551 L
+4605 -551 mt 4623 -547 L
+4623 -547 mt 4657 -537 L
+4657 -537 mt 4692 -526 L
+4692 -526 mt 4699 -524 L
+4699 -524 mt 4727 -515 L
+4727 -515 mt 4762 -504 L
+4762 -504 mt 4784 -496 L
+4784 -496 mt 4797 -492 L
+4797 -492 mt 4832 -480 L
+4832 -480 mt 4862 -469 L
+4862 -469 mt 4867 -467 L
+4867 -467 mt 4902 -454 L
+4902 -454 mt 4936 -441 L
+4936 -441 mt 4936 -441 L
+4936 -441 mt 4971 -428 L
+4971 -428 mt 5006 -414 L
+5006 -414 mt 5007 -414 L
+5007 -414 mt 5041 -400 L
+5041 -400 mt 5076 -386 L
+5076 -386 mt 5076 -386 L
+5076 -386 mt 5111 -372 L
+5111 -372 mt 5144 -359 L
+5144 -359 mt 5146 -358 L
+5146 -358 mt 5181 -344 L
+5181 -344 mt 5209 -331 L
+5209 -331 mt 5215 -329 L
+5215 -329 mt 5250 -314 L
+5250 -314 mt 5273 -304 L
+5273 -304 mt 5285 -299 L
+5285 -299 mt 5320 -283 L
+5320 -283 mt 5335 -276 L
+5335 -276 mt 5355 -267 L
+5355 -267 mt 5390 -251 L
+5390 -251 mt 5394 -249 L
+5394 -249 mt 5425 -234 L
+5425 -234 mt 5451 -221 L
+5451 -221 mt 5459 -217 L
+5459 -217 mt 5494 -200 L
+5494 -200 mt 5507 -194 L
+5507 -194 mt 5529 -182 L
+5529 -182 mt 5560 -166 L
+5560 -166 mt 5564 -164 L
+5564 -164 mt 5599 -145 L
+5599 -145 mt 5611 -139 L
+5611 -139 mt 5634 -126 L
+5634 -126 mt 5660 -111 L
+5660 -111 mt 5669 -107 L
+5669 -107 mt 5704 -86 L
+5704 -86 mt 5707 -84 L
+5707 -84 mt 5738 -65 L
+5738 -65 mt 5752 -56 L
+5752 -56 mt 5773 -43 L
+5773 -43 mt 5795 -29 L
+5795 -29 mt 5808 -20 L
+5808 -20 mt 5836 -1 L
+5836 -1 mt 5843 3 L
+5843 3 mt 5876 25 L
+5876 25 mt 5878 27 L
+5878 27 mt 5913 52 L
+5913 52 mt 5914 53 L
+5914 53 mt 5948 78 L
+5948 78 mt 5951 80 L
+5951 80 mt 5983 104 L
+5983 104 mt 5987 108 L
+5987 108 mt 6017 132 L
+6017 132 mt 6022 135 L
+6022 135 mt 6052 160 L
+6052 160 mt 6056 163 L
+6056 163 mt 6087 189 L
+6087 189 mt 6089 190 L
+6089 190 mt 6121 218 L
+6121 218 mt 6122 219 L
+6122 219 mt 6152 245 L
+6152 245 mt 6157 249 L
+6157 249 mt 6183 273 L
+6183 273 mt 6192 280 L
+6192 280 mt 6214 300 L
+6214 300 mt 6227 312 L
+6227 312 mt 6244 328 L
+6244 328 mt 6261 344 L
+6261 344 mt 6274 355 L
+6274 355 mt 6296 377 L
+6296 377 mt 6303 383 L
+6303 383 mt 6331 409 L
+6331 409 mt 6333 411 L
+6333 411 mt 6362 438 L
+6362 438 mt 6366 442 L
+6366 442 mt 6392 466 L
+6392 466 mt 6401 474 L
+6401 474 mt 6422 493 L
+6422 493 mt 6436 506 L
+6436 506 mt 6451 521 L
+6451 521 mt 6471 539 L
+6471 539 mt 6481 548 L
+6481 548 mt 6506 571 L
+6506 571 mt 6511 576 L
+6511 576 mt 6540 603 L
+6540 603 mt 6541 603 L
+6541 603 mt 6571 631 L
+6571 631 mt 6575 635 L
+6575 635 mt 6601 658 L
+6601 658 mt 6610 667 L
+6610 667 mt 6630 686 L
+6630 686 mt 6645 700 L
+6645 700 mt 6660 713 L
+6660 713 mt 6680 732 L
+6680 732 mt 6689 741 L
+6689 741 mt 6715 765 L
+6715 765 mt 6718 768 L
+6718 768 mt 6747 796 L
+6747 796 mt 6750 798 L
+6750 798 mt 6776 823 L
+6776 823 mt 6785 831 L
+6785 831 mt 6805 851 L
+6805 851 mt 6819 865 L
+6819 865 mt 6833 878 L
+6833 878 mt 6854 900 L
+6854 900 mt 6860 906 L
+6860 906 mt 6888 933 L
+6888 933 mt 6889 935 L
+6889 935 mt 6915 961 L
+6915 961 mt 6924 970 L
+6924 970 mt 6942 988 L
+6942 988 mt 6959 1005 L
+6959 1005 mt 6969 1016 L
+6969 1016 mt 6994 1041 L
+6994 1041 mt 6996 1043 L
+6996 1043 mt 7022 1071 L
+7022 1071 mt 7029 1078 L
+7029 1078 mt 7048 1098 L
+7048 1098 mt 7063 1115 L
+7063 1115 mt 7073 1126 L
+7073 1126 mt 7098 1153 L
+7098 1153 mt 7099 1153 L
+7099 1153 mt 7124 1181 L
+7124 1181 mt 7133 1191 L
+7133 1191 mt 7150 1208 L
+7150 1208 mt 7168 1229 L
+7168 1229 mt 7175 1236 L
+7175 1236 mt 7201 1263 L
+7201 1263 mt 7203 1266 L
+7203 1266 mt 7226 1291 L
+7226 1291 mt 7238 1303 L
+7238 1303 mt 7252 1318 L
+7252 1318 mt 7273 1341 L
+7273 1341 mt 7278 1346 L
+7278 1346 mt 7303 1373 L
+7303 1373 mt 7308 1378 L
+7308 1378 mt 7329 1401 L
+7329 1401 mt 7342 1416 L
+7342 1416 mt 7354 1428 L
+7354 1428 mt 7377 1455 L
+7377 1455 mt 7378 1456 L
+7378 1456 mt 7403 1484 L
+7403 1484 mt 7412 1495 L
+7412 1495 mt 7427 1511 L
+7427 1511 mt 7447 1535 L
+7447 1535 mt 7450 1539 L
+7450 1539 mt 7474 1566 L
+7474 1566 mt 7482 1576 L
+7482 1576 mt 7496 1594 L
+7496 1594 mt 7517 1619 L
+7517 1619 mt 7519 1621 L
+7519 1621 mt 7541 1649 L
+7541 1649 mt 7552 1663 L
+7552 1663 mt 7562 1676 L
+7562 1676 mt 7582 1704 L
+7582 1704 mt 7587 1709 L
+7587 1709 mt 7603 1731 L
+7603 1731 mt 7621 1758 L
+7621 1758 mt 7622 1759 L
+7622 1759 mt 7641 1786 L
+7641 1786 mt 7656 1810 L
+7656 1810 mt 7659 1814 L
+7659 1814 mt 7676 1841 L
+7676 1841 mt 7691 1868 L
+7691 1868 mt 7692 1869 L
+7692 1869 mt 7707 1896 L
+7707 1896 mt 7721 1924 L
+7721 1924 mt 7726 1935 L
+7726 1935 mt 7734 1951 L
+7734 1951 mt 7746 1979 L
+7746 1979 mt 7756 2006 L
+7756 2006 mt 7761 2019 L
+7761 2019 mt 7766 2034 L
+7766 2034 mt 7776 2061 L
+7776 2061 mt 7784 2089 L
+7784 2089 mt 7790 2116 L
+7790 2116 mt 7796 2144 L
+7796 2144 mt 7796 2144 L
+7621 2069 mt 7625 2089 L
+7625 2089 mt 7628 2116 L
+7628 2116 mt 7630 2144 L
+7630 2144 mt 7631 2171 L
+7631 2171 mt 7631 2199 L
+7631 2199 mt 7631 2226 L
+7631 2226 mt 7629 2254 L
+7629 2254 mt 7627 2281 L
+7627 2281 mt 7625 2309 L
+7625 2309 mt 7621 2336 L
+7621 2336 mt 7621 2336 L
+7621 2336 mt 7618 2364 L
+7618 2364 mt 7614 2391 L
+7614 2391 mt 7610 2419 L
+7610 2419 mt 7605 2446 L
+7605 2446 mt 7600 2474 L
+7600 2474 mt 7595 2502 L
+7595 2502 mt 7589 2529 L
+7589 2529 mt 7587 2540 L
+7587 2540 mt 7583 2557 L
+7583 2557 mt 7577 2584 L
+7577 2584 mt 7570 2612 L
+7570 2612 mt 7562 2639 L
+7562 2639 mt 7554 2667 L
+7554 2667 mt 7552 2674 L
+7552 2674 mt 7545 2694 L
+7545 2694 mt 7536 2722 L
+7536 2722 mt 7526 2749 L
+7526 2749 mt 7517 2773 L
+7517 2773 mt 7516 2777 L
+7516 2777 mt 7505 2804 L
+7505 2804 mt 7493 2832 L
+7493 2832 mt 7482 2859 L
+7482 2859 mt 7482 2859 L
+7482 2859 mt 7470 2887 L
+7470 2887 mt 7458 2914 L
+7458 2914 mt 7447 2939 L
+7447 2939 mt 7446 2942 L
+7446 2942 mt 7434 2969 L
+7434 2969 mt 7422 2997 L
+7422 2997 mt 7412 3018 L
+7412 3018 mt 7410 3024 L
+7410 3024 mt 7397 3052 L
+7397 3052 mt 7385 3079 L
+7385 3079 mt 7377 3095 L
+7377 3095 mt 7372 3107 L
+7372 3107 mt 7359 3134 L
+7359 3134 mt 7346 3162 L
+7346 3162 mt 7342 3168 L
+7342 3168 mt 7332 3189 L
+7332 3189 mt 7319 3217 L
+7319 3217 mt 7308 3238 L
+7308 3238 mt 7304 3244 L
+7304 3244 mt 7290 3272 L
+7290 3272 mt 7276 3299 L
+7276 3299 mt 7273 3305 L
+7273 3305 mt 7261 3327 L
+7261 3327 mt 7246 3354 L
+7246 3354 mt 7238 3370 L
+7238 3370 mt 7232 3382 L
+7232 3382 mt 7217 3409 L
+7217 3409 mt 7203 3436 L
+7203 3436 mt 7202 3437 L
+7202 3437 mt 7188 3464 L
+7188 3464 mt 7174 3492 L
+7174 3492 mt 7168 3505 L
+7168 3505 mt 7161 3519 L
+7161 3519 mt 7147 3547 L
+7147 3547 mt 7133 3575 L
+7133 3575 mt 7133 3575 L
+7133 3575 mt 7120 3602 L
+7120 3602 mt 7106 3630 L
+7106 3630 mt 7098 3643 L
+7098 3643 mt 7091 3657 L
+7091 3657 mt 7076 3685 L
+7076 3685 mt 7063 3707 L
+7063 3707 mt 7061 3712 L
+7061 3712 mt 7045 3740 L
+7045 3740 mt 7029 3767 L
+7029 3767 mt 7029 3768 L
+7029 3768 mt 7014 3795 L
+7014 3795 mt 6998 3822 L
+6998 3822 mt 6994 3829 L
+6994 3829 mt 6982 3850 L
+6982 3850 mt 6966 3877 L
+6966 3877 mt 6959 3889 L
+6959 3889 mt 6950 3905 L
+6950 3905 mt 6934 3932 L
+6934 3932 mt 6924 3949 L
+6924 3949 mt 6917 3960 L
+6917 3960 mt 6901 3987 L
+6901 3987 mt 6889 4006 L
+6889 4006 mt 6884 4015 L
+6884 4015 mt 6867 4042 L
+6867 4042 mt 6854 4061 L
+6854 4061 mt 6849 4070 L
+6849 4070 mt 6831 4097 L
+6831 4097 mt 6819 4115 L
+6819 4115 mt 6813 4125 L
+6813 4125 mt 6795 4152 L
+6795 4152 mt 6785 4167 L
+6785 4167 mt 6776 4180 L
+6776 4180 mt 6758 4207 L
+6758 4207 mt 6750 4219 L
+6750 4219 mt 6739 4235 L
+6739 4235 mt 6720 4262 L
+6720 4262 mt 6715 4270 L
+6715 4270 mt 6702 4290 L
+6702 4290 mt 6683 4317 L
+6683 4317 mt 6680 4321 L
+6680 4321 mt 6664 4345 L
+6664 4345 mt 6645 4372 L
+6645 4372 mt 6645 4372 L
+6645 4372 mt 6625 4400 L
+6625 4400 mt 6610 4420 L
+6610 4420 mt 6605 4427 L
+6605 4427 mt 6584 4455 L
+6584 4455 mt 6575 4466 L
+6575 4466 mt 6563 4482 L
+6563 4482 mt 6540 4508 L
+6540 4508 mt 6539 4510 L
+6539 4510 mt 6514 4537 L
+6514 4537 mt 6506 4546 L
+6506 4546 mt 6486 4565 L
+6486 4565 mt 6471 4578 L
+6471 4578 mt 6455 4592 L
+6455 4592 mt 6436 4607 L
+6436 4607 mt 6418 4620 L
+6418 4620 mt 6401 4632 L
+6401 4632 mt 6375 4648 L
+6375 4648 mt 6366 4652 L
+6366 4652 mt 6331 4670 L
+6331 4670 mt 6319 4675 L
+6319 4675 mt 6296 4684 L
+6296 4684 mt 6261 4696 L
+6261 4696 mt 6238 4703 L
+6238 4703 mt 6227 4706 L
+6227 4706 mt 6192 4714 L
+6192 4714 mt 6157 4720 L
+6157 4720 mt 6122 4724 L
+6122 4724 mt 6087 4727 L
+6087 4727 mt 6052 4728 L
+6052 4728 mt 6017 4728 L
+6017 4728 mt 5983 4726 L
+5983 4726 mt 5948 4723 L
+5948 4723 mt 5913 4718 L
+5913 4718 mt 5878 4712 L
+5878 4712 mt 5843 4706 L
+5843 4706 mt 5829 4703 L
+5829 4703 mt 5808 4698 L
+5808 4698 mt 5773 4689 L
+5773 4689 mt 5738 4679 L
+5738 4679 mt 5726 4675 L
+5726 4675 mt 5704 4668 L
+5704 4668 mt 5669 4656 L
+5669 4656 mt 5645 4648 L
+5645 4648 mt 5634 4643 L
+5634 4643 mt 5599 4630 L
+5599 4630 mt 5577 4620 L
+5577 4620 mt 5564 4612 L
+5564 4612 mt 5538 4592 L
+5538 4592 mt 5529 4583 L
+5529 4583 mt 5512 4565 L
+5512 4565 mt 5498 4537 L
+5498 4537 mt 5494 4524 L
+5494 4524 mt 5490 4510 L
+5490 4510 mt 5488 4482 L
+5488 4482 mt 5487 4455 L
+5487 4455 mt 5485 4427 L
+5485 4427 mt 5480 4400 L
+5480 4400 mt 5471 4372 L
+5471 4372 mt 5460 4345 L
+5460 4345 mt 5459 4344 L
+5459 4344 mt 5448 4317 L
+5448 4317 mt 5437 4290 L
+5437 4290 mt 5429 4262 L
+5429 4262 mt 5425 4247 L
+5425 4247 mt 5421 4235 L
+5421 4235 mt 5415 4207 L
+5415 4207 mt 5409 4180 L
+5409 4180 mt 5403 4152 L
+5403 4152 mt 5398 4125 L
+5398 4125 mt 5392 4097 L
+5392 4097 mt 5390 4089 L
+5390 4089 mt 5384 4070 L
+5384 4070 mt 5375 4042 L
+5375 4042 mt 5364 4015 L
+5364 4015 mt 5355 3994 L
+5355 3994 mt 5351 3987 L
+5351 3987 mt 5331 3960 L
+5331 3960 mt 5320 3947 L
+5320 3947 mt 5302 3932 L
+5302 3932 mt 5285 3921 L
+5285 3921 mt 5251 3905 L
+5251 3905 mt 5250 3904 L
+5250 3904 mt 5215 3892 L
+5215 3892 mt 5181 3879 L
+5181 3879 mt 5177 3877 L
+5177 3877 mt 5146 3865 L
+5146 3865 mt 5116 3850 L
+5116 3850 mt 5111 3848 L
+5111 3848 mt 5076 3828 L
+5076 3828 mt 5068 3822 L
+5068 3822 mt 5041 3803 L
+5041 3803 mt 5031 3795 L
+5031 3795 mt 5006 3772 L
+5006 3772 mt 5002 3767 L
+5002 3767 mt 4978 3740 L
+4978 3740 mt 4971 3731 L
+4971 3731 mt 4957 3712 L
+4957 3712 mt 4936 3685 L
+4936 3685 mt 4936 3685 L
+4936 3685 mt 4917 3657 L
+4917 3657 mt 4902 3637 L
+4902 3637 mt 4897 3630 L
+4897 3630 mt 4877 3602 L
+4877 3602 mt 4867 3589 L
+4867 3589 mt 4856 3575 L
+4856 3575 mt 4836 3547 L
+4836 3547 mt 4832 3541 L
+4832 3541 mt 4817 3519 L
+4817 3519 mt 4800 3492 L
+4800 3492 mt 4797 3487 L
+4797 3487 mt 4783 3464 L
+4783 3464 mt 4768 3437 L
+4768 3437 mt 4762 3427 L
+4762 3427 mt 4752 3409 L
+4752 3409 mt 4733 3382 L
+4733 3382 mt 4727 3374 L
+4727 3374 mt 4711 3354 L
+4711 3354 mt 4692 3335 L
+4692 3335 mt 4684 3327 L
+4684 3327 mt 4657 3301 L
+4657 3301 mt 4655 3299 L
+4655 3299 mt 4627 3272 L
+4627 3272 mt 4623 3267 L
+4623 3267 mt 4602 3244 L
+4602 3244 mt 4588 3228 L
+4588 3228 mt 4578 3217 L
+4578 3217 mt 4559 3189 L
+4559 3189 mt 4553 3181 L
+4553 3181 mt 4538 3162 L
+4538 3162 mt 4518 3138 L
+4518 3138 mt 4514 3134 L
+4514 3134 mt 4484 3107 L
+4484 3107 mt 4483 3106 L
+4483 3106 mt 4449 3079 L
+4449 3079 mt 4448 3079 L
+4448 3079 mt 4413 3054 L
+4413 3054 mt 4410 3052 L
+4410 3052 mt 4379 3029 L
+4379 3029 mt 4371 3024 L
+4371 3024 mt 4344 3005 L
+4344 3005 mt 4330 2997 L
+4330 2997 mt 4309 2983 L
+4309 2983 mt 4287 2969 L
+4287 2969 mt 4274 2961 L
+4274 2961 mt 4239 2943 L
+4239 2943 mt 4237 2942 L
+4237 2942 mt 4204 2930 L
+4204 2930 mt 4169 2925 L
+4169 2925 mt 4134 2936 L
+4134 2936 mt 4124 2942 L
+4124 2942 mt 4100 2963 L
+4100 2963 mt 4093 2969 L
+4093 2969 mt 4073 2997 L
+4073 2997 mt 4065 3009 L
+4065 3009 mt 4054 3024 L
+4054 3024 mt 4034 3052 L
+4034 3052 mt 4030 3057 L
+4030 3057 mt 4011 3079 L
+4011 3079 mt 3995 3102 L
+3995 3102 mt 3991 3107 L
+3991 3107 mt 3973 3134 L
+3973 3134 mt 3960 3153 L
+3960 3153 mt 3953 3162 L
+3953 3162 mt 3933 3189 L
+3933 3189 mt 3925 3199 L
+3925 3199 mt 3908 3217 L
+3908 3217 mt 3890 3233 L
+3890 3233 mt 3876 3244 L
+3876 3244 mt 3855 3258 L
+3855 3258 mt 3831 3272 L
+3831 3272 mt 3821 3278 L
+3821 3278 mt 3786 3296 L
+3786 3296 mt 3780 3299 L
+3780 3299 mt 3751 3317 L
+3751 3317 mt 3738 3327 L
+3738 3327 mt 3716 3351 L
+3716 3351 mt 3713 3354 L
+3713 3354 mt 3705 3382 L
+3705 3382 mt 3703 3409 L
+3703 3409 mt 3707 3437 L
+3707 3437 mt 3715 3464 L
+3715 3464 mt 3716 3466 L
+3716 3466 mt 3734 3492 L
+3734 3492 mt 3751 3511 L
+3751 3511 mt 3760 3519 L
+3760 3519 mt 3785 3547 L
+3785 3547 mt 3786 3548 L
+3786 3548 mt 3807 3575 L
+3807 3575 mt 3821 3597 L
+3821 3597 mt 3824 3602 L
+3824 3602 mt 3839 3630 L
+3839 3630 mt 3852 3657 L
+3852 3657 mt 3855 3666 L
+3855 3666 mt 3863 3685 L
+3863 3685 mt 3873 3712 L
+3873 3712 mt 3880 3740 L
+3880 3740 mt 3884 3767 L
+3884 3767 mt 3884 3795 L
+3884 3795 mt 3881 3822 L
+3881 3822 mt 3875 3850 L
+3875 3850 mt 3867 3877 L
+3867 3877 mt 3858 3905 L
+3858 3905 mt 3855 3922 L
+3855 3922 mt 3854 3932 L
+3854 3932 mt 3851 3960 L
+3851 3960 mt 3853 3987 L
+3853 3987 mt 3855 3995 L
+3855 3995 mt 3862 4015 L
+3862 4015 mt 3874 4042 L
+3874 4042 mt 3884 4070 L
+3884 4070 mt 3890 4097 L
+3890 4097 mt 3890 4099 L
+3890 4099 mt 3895 4125 L
+3895 4125 mt 3897 4152 L
+3897 4152 mt 3898 4180 L
+3898 4180 mt 3896 4207 L
+3896 4207 mt 3891 4235 L
+3891 4235 mt 3890 4238 L
+3890 4238 mt 3882 4262 L
+3882 4262 mt 3867 4290 L
+3867 4290 mt 3855 4311 L
+3855 4311 mt 3851 4317 L
+3851 4317 mt 3846 4345 L
+3846 4345 mt 3855 4366 L
+3855 4366 mt 3858 4372 L
+3858 4372 mt 3873 4400 L
+3873 4400 mt 3885 4427 L
+3885 4427 mt 3890 4442 L
+3890 4442 mt 3895 4455 L
+3895 4455 mt 3905 4482 L
+3905 4482 mt 3914 4510 L
+3914 4510 mt 3922 4537 L
+3922 4537 mt 3925 4553 L
+3925 4553 mt 3928 4565 L
+3928 4565 mt 3931 4592 L
+3931 4592 mt 3926 4620 L
+3926 4620 mt 3925 4623 L
+3925 4623 mt 3916 4648 L
+3916 4648 mt 3903 4675 L
+3903 4675 mt 3890 4699 L
+3890 4699 mt 3888 4703 L
+3888 4703 mt 3873 4730 L
+3873 4730 mt 3855 4757 L
+3855 4757 mt 3855 4758 L
+3855 4758 mt 3836 4785 L
+3836 4785 mt 3821 4807 L
+3821 4807 mt 3816 4813 L
+3816 4813 mt 3795 4840 L
+3795 4840 mt 3786 4851 L
+3786 4851 mt 3771 4868 L
+3771 4868 mt 3751 4890 L
+3751 4890 mt 3746 4895 L
+3746 4895 mt 3718 4923 L
+3718 4923 mt 3716 4925 L
+3716 4925 mt 3688 4950 L
+3688 4950 mt 3681 4956 L
+3681 4956 mt 3656 4978 L
+3656 4978 mt 3646 4985 L
+3646 4985 mt 3620 5005 L
+3620 5005 mt 3611 5012 L
+3611 5012 mt 3581 5033 L
+3581 5033 mt 3577 5035 L
+3577 5035 mt 3542 5057 L
+3542 5057 mt 3537 5060 L
+3537 5060 mt 3507 5078 L
+3507 5078 mt 3488 5088 L
+3488 5088 mt 3472 5096 L
+3472 5096 mt 3437 5114 L
+3437 5114 mt 3433 5115 L
+3433 5115 mt 3402 5130 L
+3402 5130 mt 3373 5143 L
+3373 5143 mt 3367 5145 L
+3367 5145 mt 3332 5160 L
+3332 5160 mt 3306 5170 L
+3306 5170 mt 3298 5173 L
+3298 5173 mt 3263 5186 L
+3263 5186 mt 3229 5198 L
+3229 5198 mt 3228 5198 L
+3228 5198 mt 3193 5209 L
+3193 5209 mt 3158 5219 L
+3158 5219 mt 3134 5225 L
+3134 5225 mt 3123 5228 L
+3123 5228 mt 3088 5236 L
+3088 5236 mt 3053 5244 L
+3053 5244 mt 3019 5250 L
+3019 5250 mt 3001 5253 L
+3001 5253 mt 2984 5256 L
+2984 5256 mt 2949 5261 L
+2949 5261 mt 2914 5265 L
+2914 5265 mt 2879 5269 L
+2879 5269 mt 2844 5272 L
+2844 5272 mt 2809 5275 L
+2809 5275 mt 2774 5276 L
+2774 5276 mt 2740 5278 L
+2740 5278 mt 2705 5278 L
+2705 5278 mt 2670 5278 L
+2670 5278 mt 2635 5277 L
+2635 5277 mt 2600 5276 L
+2600 5276 mt 2565 5274 L
+2565 5274 mt 2530 5272 L
+2530 5272 mt 2496 5269 L
+2496 5269 mt 2461 5266 L
+2461 5266 mt 2426 5262 L
+2426 5262 mt 2391 5258 L
+2391 5258 mt 2356 5254 L
+2356 5254 mt 2349 5253 L
+2349 5253 mt 2321 5249 L
+2321 5249 mt 2286 5244 L
+2286 5244 mt 2251 5238 L
+2251 5238 mt 2217 5232 L
+2217 5232 mt 2184 5225 L
+2184 5225 mt 2182 5225 L
+2182 5225 mt 2147 5218 L
+2147 5218 mt 2112 5210 L
+2112 5210 mt 2077 5202 L
+2077 5202 mt 2063 5198 L
+2063 5198 mt 2042 5193 L
+2042 5193 mt 2007 5183 L
+2007 5183 mt 1972 5173 L
+1972 5173 mt 1963 5170 L
+1963 5170 mt 1938 5163 L
+1938 5163 mt 1903 5152 L
+1903 5152 mt 1876 5143 L
+1876 5143 mt 1868 5140 L
+1868 5140 mt 1833 5128 L
+1833 5128 mt 1798 5115 L
+1798 5115 mt 1798 5115 L
+1798 5115 mt 1763 5102 L
+1763 5102 mt 1729 5088 L
+1729 5088 mt 1728 5088 L
+1728 5088 mt 1694 5072 L
+1694 5072 mt 1667 5060 L
+1667 5060 mt 1659 5056 L
+1659 5056 mt 1624 5039 L
+1624 5039 mt 1613 5033 L
+1613 5033 mt 1589 5020 L
+1589 5020 mt 1564 5005 L
+1564 5005 mt 1554 4999 L
+1554 4999 mt 1520 4978 L
+1520 4978 mt 1519 4977 L
+1519 4977 mt 1484 4953 L
+1484 4953 mt 1480 4950 L
+1480 4950 mt 1449 4927 L
+1449 4927 mt 1444 4923 L
+1444 4923 mt 1415 4899 L
+1415 4899 mt 1411 4895 L
+1411 4895 mt 1380 4868 L
+1380 4868 mt 1380 4867 L
+1380 4867 mt 1352 4840 L
+1352 4840 mt 1345 4833 L
+1345 4833 mt 1326 4813 L
+1326 4813 mt 1310 4795 L
+1310 4795 mt 1302 4785 L
+1302 4785 mt 1279 4758 L
+1279 4758 mt 1275 4752 L
+1275 4752 mt 1258 4730 L
+1258 4730 mt 1240 4705 L
+1240 4705 mt 1238 4703 L
+1238 4703 mt 1220 4675 L
+1220 4675 mt 1205 4653 L
+1205 4653 mt 1202 4648 L
+1202 4648 mt 1185 4620 L
+1185 4620 mt 1170 4596 L
+1170 4596 mt 1169 4592 L
+1169 4592 mt 1153 4565 L
+1153 4565 mt 1138 4537 L
+1138 4537 mt 1136 4534 L
+1136 4534 mt 1123 4510 L
+1123 4510 mt 1109 4482 L
+1109 4482 mt 1101 4467 L
+1101 4467 mt 1095 4455 L
+1095 4455 mt 1082 4427 L
+1082 4427 mt 1069 4400 L
+1069 4400 mt 1066 4392 L
+1066 4392 mt 1057 4372 L
+1057 4372 mt 1046 4345 L
+1046 4345 mt 1035 4317 L
+1035 4317 mt 1031 4305 L
+1031 4305 mt 1026 4290 L
+1026 4290 mt 1016 4262 L
+1016 4262 mt 1008 4235 L
+1008 4235 mt 999 4207 L
+ 999 4207 mt 996 4196 L
+ 996 4196 mt 992 4180 L
+ 992 4180 mt 984 4152 L
+ 984 4152 mt 976 4125 L
+ 976 4125 mt 969 4097 L
+ 969 4097 mt 961 4070 L
+ 961 4070 mt 961 4069 L
+ 961 4069 mt 954 4042 L
+ 954 4042 mt 946 4015 L
+ 946 4015 mt 938 3987 L
+ 938 3987 mt 930 3960 L
+ 930 3960 mt 926 3948 L
+ 926 3948 mt 921 3932 L
+ 921 3932 mt 912 3905 L
+ 912 3905 mt 903 3877 L
+ 903 3877 mt 892 3850 L
+ 892 3850 mt 892 3848 L
+ 892 3848 mt 880 3822 L
+ 880 3822 mt 867 3795 L
+ 867 3795 mt 857 3775 L
+ 857 3775 mt 852 3767 L
+ 852 3767 mt 835 3740 L
+ 835 3740 mt 822 3720 L
+ 822 3720 mt 816 3712 L
+ 816 3712 mt 795 3685 L
+ 795 3685 mt 787 3675 L
+ 787 3675 mt 772 3657 L
+ 772 3657 mt 752 3636 L
+ 752 3636 mt 746 3630 L
+ 746 3630 mt 718 3602 L
+ 718 3602 mt 717 3601 L
+ 717 3601 mt 689 3575 L
+ 689 3575 mt 682 3569 L
+ 682 3569 mt 658 3547 L
+ 658 3547 mt 647 3538 L
+ 647 3538 mt 626 3519 L
+ 626 3519 mt 613 3508 L
+ 613 3508 mt 593 3492 L
+ 593 3492 mt 578 3479 L
+ 578 3479 mt 560 3464 L
+ 560 3464 mt 543 3451 L
+ 543 3451 mt 526 3437 L
+ 526 3437 mt 508 3423 L
+ 508 3423 mt 491 3409 L
+ 491 3409 mt 473 3395 L
+ 473 3395 mt 456 3382 L
+ 456 3382 mt 438 3369 L
+ 438 3369 mt 420 3354 L
+ 420 3354 mt 403 3342 L
+ 403 3342 mt 383 3327 L
+ 383 3327 mt 368 3316 L
+ 368 3316 mt 347 3299 L
+ 347 3299 mt 334 3289 L
+ 334 3289 mt 311 3272 L
+ 311 3272 mt 299 3262 L
+ 299 3262 mt 276 3244 L
+ 276 3244 mt 264 3234 L
+ 264 3234 mt 242 3217 L
+ 242 3217 mt 229 3206 L
+ 229 3206 mt 209 3189 L
+ 209 3189 mt 194 3177 L
+ 194 3177 mt 177 3162 L
+ 177 3162 mt 159 3146 L
+ 159 3146 mt 147 3134 L
+ 147 3134 mt 124 3113 L
+ 124 3113 mt 117 3107 L
+ 117 3107 mt 90 3080 L
+ 90 3080 mt 89 3079 L
+ 89 3079 mt 61 3052 L
+ 61 3052 mt 55 3045 L
+ 55 3045 mt 34 3024 L
+ 34 3024 mt 20 3009 L
+ 20 3009 mt 8 2997 L
+ 8 2997 mt -14 2971 L
+ -14 2971 mt -16 2969 L
+ -16 2969 mt -40 2942 L
+ -40 2942 mt -49 2931 L
+ -49 2931 mt -64 2914 L
+ -64 2914 mt -84 2891 L
+ -84 2891 mt -87 2887 L
+ -87 2887 mt -109 2859 L
+-109 2859 mt -119 2847 L
+-119 2847 mt -130 2832 L
+-130 2832 mt -150 2804 L
+-150 2804 mt -154 2799 L
+-154 2799 mt -170 2777 L
+-170 2777 mt -187 2749 L
+-187 2749 mt -188 2747 L
+-188 2747 mt -204 2722 L
+-204 2722 mt -220 2694 L
+-220 2694 mt -223 2688 L
+-223 2688 mt -235 2667 L
+-235 2667 mt -249 2639 L
+-249 2639 mt -258 2619 L
+-258 2619 mt -262 2612 L
+-262 2612 mt -274 2584 L
+-274 2584 mt -285 2557 L
+-285 2557 mt -293 2535 L
+-293 2535 mt -295 2529 L
+-295 2529 mt -305 2502 L
+-305 2502 mt -314 2474 L
+-314 2474 mt -321 2446 L
+-321 2446 mt -328 2419 L
+-328 2419 mt -328 2419 L
+-328 2419 mt -333 2391 L
+-333 2391 mt -338 2364 L
+-338 2364 mt -341 2336 L
+-341 2336 mt -343 2309 L
+-343 2309 mt -344 2281 L
+-344 2281 mt -344 2254 L
+-344 2254 mt -342 2226 L
+-342 2226 mt -339 2199 L
+-339 2199 mt -336 2171 L
+-336 2171 mt -331 2144 L
+-331 2144 mt -328 2130 L
+-328 2130 mt -325 2116 L
+-325 2116 mt -318 2089 L
+-318 2089 mt -311 2061 L
+-311 2061 mt -302 2034 L
+-302 2034 mt -293 2007 L
+-293 2007 mt -293 2006 L
+-293 2006 mt -283 1979 L
+-283 1979 mt -273 1951 L
+-273 1951 mt -262 1924 L
+-262 1924 mt -258 1914 L
+-258 1914 mt -251 1896 L
+-251 1896 mt -240 1869 L
+-240 1869 mt -229 1841 L
+-229 1841 mt -223 1828 L
+-223 1828 mt -217 1814 L
+-217 1814 mt -206 1786 L
+-206 1786 mt -194 1759 L
+-194 1759 mt -188 1745 L
+-188 1745 mt -183 1731 L
+-183 1731 mt -171 1704 L
+-171 1704 mt -160 1676 L
+-160 1676 mt -154 1663 L
+-154 1663 mt -147 1649 L
+-147 1649 mt -135 1621 L
+-135 1621 mt -123 1594 L
+-123 1594 mt -119 1585 L
+-119 1585 mt -110 1566 L
+-110 1566 mt -98 1539 L
+ -98 1539 mt -85 1511 L
+ -85 1511 mt -84 1508 L
+ -84 1508 mt -73 1484 L
+ -73 1484 mt -61 1456 L
+ -61 1456 mt -49 1428 L
+ -49 1428 mt -49 1428 L
+ -49 1428 mt -37 1401 L
+ -37 1401 mt -26 1373 L
+ -26 1373 mt -14 1346 L
+ -14 1346 mt -14 1346 L
+ -14 1346 mt -3 1318 L
+ -3 1318 mt 7 1291 L
+ 7 1291 mt 18 1263 L
+ 18 1263 mt 20 1258 L
+ 20 1258 mt 28 1236 L
+ 28 1236 mt 39 1208 L
+ 39 1208 mt 50 1181 L
+ 50 1181 mt 55 1168 L
+ 55 1168 mt 60 1153 L
+ 60 1153 mt 71 1126 L
+ 71 1126 mt 83 1098 L
+ 83 1098 mt 90 1082 L
+ 90 1082 mt 94 1071 L
+ 94 1071 mt 106 1043 L
+ 106 1043 mt 119 1016 L
+ 119 1016 mt 124 1006 L
+ 124 1006 mt 133 988 L
+ 133 988 mt 147 961 L
+ 147 961 mt 159 937 L
+ 159 937 mt 161 933 L
+ 161 933 mt 176 906 L
+ 176 906 mt 192 878 L
+ 192 878 mt 194 875 L
+ 194 875 mt 208 851 L
+ 208 851 mt 225 823 L
+ 225 823 mt 229 817 L
+ 229 817 mt 242 796 L
+ 242 796 mt 260 768 L
+ 260 768 mt 264 762 L
+ 264 762 mt 278 741 L
+ 278 741 mt 297 713 L
+ 297 713 mt 299 710 L
+ 299 710 mt 316 686 L
+ 316 686 mt 334 662 L
+ 334 662 mt 336 658 L
+ 336 658 mt 357 631 L
+ 357 631 mt 368 615 L
+ 368 615 mt 378 603 L
+ 378 603 mt 399 576 L
+ 399 576 mt 403 571 L
+ 403 571 mt 422 548 L
+ 422 548 mt 438 528 L
+ 438 528 mt 444 521 L
+ 444 521 mt 467 493 L
+ 467 493 mt 473 486 L
+ 473 486 mt 490 466 L
+ 490 466 mt 508 445 L
+ 508 445 mt 514 438 L
+ 514 438 mt 538 411 L
+ 538 411 mt 543 406 L
+ 543 406 mt 564 383 L
+ 564 383 mt 578 368 L
+ 578 368 mt 590 355 L
+ 590 355 mt 613 333 L
+ 613 333 mt 618 328 L
+ 618 328 mt 647 300 L
+ 647 300 mt 647 300 L
+ 647 300 mt 679 273 L
+ 679 273 mt 682 270 L
+ 682 270 mt 712 245 L
+ 712 245 mt 717 241 L
+ 717 241 mt 748 218 L
+ 748 218 mt 752 215 L
+ 752 215 mt 787 190 L
+ 787 190 mt 787 190 L
+ 787 190 mt 822 167 L
+ 822 167 mt 828 163 L
+ 828 163 mt 857 145 L
+ 857 145 mt 872 135 L
+ 872 135 mt 892 123 L
+ 892 123 mt 918 108 L
+ 918 108 mt 926 103 L
+ 926 103 mt 961 83 L
+ 961 83 mt 967 80 L
+ 967 80 mt 996 65 L
+ 996 65 mt 1019 53 L
+1019 53 mt 1031 47 L
+1031 47 mt 1066 30 L
+1066 30 mt 1075 25 L
+1075 25 mt 1101 13 L
+1101 13 mt 1135 -1 L
+1135 -1 mt 1136 -1 L
+1136 -1 mt 1170 -16 L
+1170 -16 mt 1200 -29 L
+1200 -29 mt 1205 -31 L
+1205 -31 mt 1240 -45 L
+1240 -45 mt 1269 -56 L
+1269 -56 mt 1275 -59 L
+1275 -59 mt 1310 -72 L
+1310 -72 mt 1342 -84 L
+1342 -84 mt 1345 -85 L
+1345 -85 mt 1380 -98 L
+1380 -98 mt 1415 -110 L
+1415 -110 mt 1419 -111 L
+1419 -111 mt 1449 -122 L
+1449 -122 mt 1484 -133 L
+1484 -133 mt 1502 -139 L
+1502 -139 mt 1519 -144 L
+1519 -144 mt 1554 -155 L
+1554 -155 mt 1589 -166 L
+1589 -166 mt 1591 -166 L
+1591 -166 mt 1624 -176 L
+1624 -176 mt 1659 -186 L
+1659 -186 mt 1687 -194 L
+1687 -194 mt 1694 -196 L
+1694 -196 mt 1728 -205 L
+1728 -205 mt 1763 -215 L
+1763 -215 mt 1789 -221 L
+1789 -221 mt 1798 -224 L
+1798 -224 mt 1833 -233 L
+1833 -233 mt 1868 -242 L
+1868 -242 mt 1894 -249 L
+1894 -249 mt 1903 -251 L
+1903 -251 mt 1938 -260 L
+1938 -260 mt 1972 -269 L
+1972 -269 mt 2000 -276 L
+2000 -276 mt 2007 -278 L
+2007 -278 mt 2042 -287 L
+2042 -287 mt 2077 -296 L
+2077 -296 mt 2106 -304 L
+2106 -304 mt 2112 -306 L
+2112 -306 mt 2147 -315 L
+2147 -315 mt 2182 -324 L
+2182 -324 mt 2211 -331 L
+2211 -331 mt 2217 -333 L
+2217 -333 mt 2251 -342 L
+2251 -342 mt 2286 -351 L
+2286 -351 mt 2317 -359 L
+2317 -359 mt 2321 -360 L
+2321 -360 mt 2356 -369 L
+2356 -369 mt 2391 -377 L
+2391 -377 mt 2426 -386 L
+2426 -386 mt 2427 -386 L
+2427 -386 mt 2461 -395 L
+2461 -395 mt 2496 -404 L
+2496 -404 mt 2530 -413 L
+2530 -413 mt 2536 -414 L
+2536 -414 mt 2565 -422 L
+2565 -422 mt 2600 -431 L
+2600 -431 mt 2635 -440 L
+2635 -440 mt 2640 -441 L
+2640 -441 mt 2670 -449 L
+2670 -449 mt 2705 -459 L
+2705 -459 mt 2740 -468 L
+2740 -468 mt 2743 -469 L
+2743 -469 mt 2774 -478 L
+2774 -478 mt 2809 -487 L
+2809 -487 mt 2844 -496 L
+2844 -496 mt 2845 -496 L
+2845 -496 mt 2879 -505 L
+2879 -505 mt 2914 -514 L
+2914 -514 mt 2949 -523 L
+2949 -523 mt 2953 -524 L
+2953 -524 mt 2984 -531 L
+2984 -531 mt 3019 -539 L
+3019 -539 mt 3053 -547 L
+3053 -547 mt 3074 -551 L
+3074 -551 mt 3088 -555 L
+3088 -555 mt 3123 -562 L
+3123 -562 mt 3158 -568 L
+3158 -568 mt 3193 -575 L
+3193 -575 mt 3217 -579 L
+3217 -579 mt 3228 -581 L
+3228 -581 mt 3263 -586 L
+3263 -586 mt 3298 -591 L
+3298 -591 mt 3332 -596 L
+3332 -596 mt 3367 -600 L
+3367 -600 mt 3402 -604 L
+3402 -604 mt 3423 -606 L
+3423 -606 mt 3437 -608 L
+3437 -608 mt 3472 -611 L
+3472 -611 mt 3507 -614 L
+3507 -614 mt 3542 -616 L
+3542 -616 mt 3577 -617 L
+3577 -617 mt 3611 -619 L
+3611 -619 mt 3646 -619 L
+3646 -619 mt 3681 -619 L
+3681 -619 mt 3716 -618 L
+3716 -618 mt 3751 -617 L
+3751 -617 mt 3786 -616 L
+3786 -616 mt 3821 -614 L
+3821 -614 mt 3855 -611 L
+3855 -611 mt 3890 -608 L
+3890 -608 mt 3910 -606 L
+3910 -606 mt 3925 -605 L
+3925 -605 mt 3960 -602 L
+3960 -602 mt 3995 -598 L
+3995 -598 mt 4030 -593 L
+4030 -593 mt 4065 -589 L
+4065 -589 mt 4100 -584 L
+4100 -584 mt 4134 -579 L
+4134 -579 mt 4137 -579 L
+4137 -579 mt 4169 -574 L
+4169 -574 mt 4204 -569 L
+4204 -569 mt 4239 -564 L
+4239 -564 mt 4274 -558 L
+4274 -558 mt 4309 -552 L
+4309 -552 mt 4314 -551 L
+4314 -551 mt 4344 -547 L
+4344 -547 mt 4379 -540 L
+4379 -540 mt 4413 -534 L
+4413 -534 mt 4448 -527 L
+4448 -527 mt 4462 -524 L
+4462 -524 mt 4483 -520 L
+4483 -520 mt 4518 -512 L
+4518 -512 mt 4553 -504 L
+4553 -504 mt 4584 -496 L
+4584 -496 mt 4588 -496 L
+4588 -496 mt 4623 -487 L
+4623 -487 mt 4657 -478 L
+4657 -478 mt 4690 -469 L
+4690 -469 mt 4692 -468 L
+4692 -468 mt 4727 -458 L
+4727 -458 mt 4762 -448 L
+4762 -448 mt 4783 -441 L
+4783 -441 mt 4797 -437 L
+4797 -437 mt 4832 -426 L
+4832 -426 mt 4867 -414 L
+4867 -414 mt 4868 -414 L
+4868 -414 mt 4902 -402 L
+4902 -402 mt 4936 -390 L
+4936 -390 mt 4946 -386 L
+4946 -386 mt 4971 -377 L
+4971 -377 mt 5006 -364 L
+5006 -364 mt 5021 -359 L
+5021 -359 mt 5041 -351 L
+5041 -351 mt 5076 -338 L
+5076 -338 mt 5093 -331 L
+5093 -331 mt 5111 -325 L
+5111 -325 mt 5146 -311 L
+5146 -311 mt 5164 -304 L
+5164 -304 mt 5181 -297 L
+5181 -297 mt 5215 -283 L
+5215 -283 mt 5231 -276 L
+5231 -276 mt 5250 -269 L
+5250 -269 mt 5285 -254 L
+5285 -254 mt 5296 -249 L
+5296 -249 mt 5320 -238 L
+5320 -238 mt 5355 -223 L
+5355 -223 mt 5358 -221 L
+5358 -221 mt 5390 -207 L
+5390 -207 mt 5417 -194 L
+5417 -194 mt 5425 -190 L
+5425 -190 mt 5459 -174 L
+5459 -174 mt 5474 -166 L
+5474 -166 mt 5494 -156 L
+5494 -156 mt 5528 -139 L
+5528 -139 mt 5529 -138 L
+5529 -138 mt 5564 -120 L
+5564 -120 mt 5581 -111 L
+5581 -111 mt 5599 -101 L
+5599 -101 mt 5630 -84 L
+5630 -84 mt 5634 -82 L
+5634 -82 mt 5669 -62 L
+5669 -62 mt 5678 -56 L
+5678 -56 mt 5704 -41 L
+5704 -41 mt 5723 -29 L
+5723 -29 mt 5738 -19 L
+5738 -19 mt 5765 -1 L
+5765 -1 mt 5773 3 L
+5773 3 mt 5806 25 L
+5806 25 mt 5808 27 L
+5808 27 mt 5843 51 L
+5843 51 mt 5846 53 L
+5846 53 mt 5878 76 L
+5878 76 mt 5884 80 L
+5884 80 mt 5913 102 L
+5913 102 mt 5921 108 L
+5921 108 mt 5948 129 L
+5948 129 mt 5956 135 L
+5956 135 mt 5983 156 L
+5983 156 mt 5991 163 L
+5991 163 mt 6017 185 L
+6017 185 mt 6025 190 L
+6025 190 mt 6052 214 L
+6052 214 mt 6057 218 L
+6057 218 mt 6087 244 L
+6087 244 mt 6089 245 L
+6089 245 mt 6120 273 L
+6120 273 mt 6122 275 L
+6122 275 mt 6151 300 L
+6151 300 mt 6157 306 L
+6157 306 mt 6181 328 L
+6181 328 mt 6192 338 L
+6192 338 mt 6211 355 L
+6211 355 mt 6227 370 L
+6227 370 mt 6240 383 L
+6240 383 mt 6261 403 L
+6261 403 mt 6269 411 L
+6269 411 mt 6296 436 L
+6296 436 mt 6299 438 L
+6299 438 mt 6328 466 L
+6328 466 mt 6331 469 L
+6331 469 mt 6357 493 L
+6357 493 mt 6366 501 L
+6366 501 mt 6387 521 L
+6387 521 mt 6401 534 L
+6401 534 mt 6416 548 L
+6416 548 mt 6436 566 L
+6436 566 mt 6446 576 L
+6446 576 mt 6471 599 L
+6471 599 mt 6475 603 L
+6475 603 mt 6505 631 L
+6505 631 mt 6506 631 L
+6506 631 mt 6534 658 L
+6534 658 mt 6540 664 L
+6540 664 mt 6564 686 L
+6564 686 mt 6575 696 L
+6575 696 mt 6593 713 L
+6593 713 mt 6610 729 L
+6610 729 mt 6623 741 L
+6623 741 mt 6645 762 L
+6645 762 mt 6652 768 L
+6652 768 mt 6680 795 L
+6680 795 mt 6681 796 L
+6681 796 mt 6709 823 L
+6709 823 mt 6715 829 L
+6715 829 mt 6738 851 L
+6738 851 mt 6750 863 L
+6750 863 mt 6766 878 L
+6766 878 mt 6785 897 L
+6785 897 mt 6793 906 L
+6793 906 mt 6819 932 L
+6819 932 mt 6820 933 L
+6820 933 mt 6847 961 L
+6847 961 mt 6854 968 L
+6854 968 mt 6874 988 L
+6874 988 mt 6889 1004 L
+6889 1004 mt 6901 1016 L
+6901 1016 mt 6924 1040 L
+6924 1040 mt 6927 1043 L
+6927 1043 mt 6953 1071 L
+6953 1071 mt 6959 1078 L
+6959 1078 mt 6978 1098 L
+6978 1098 mt 6994 1116 L
+6994 1116 mt 7003 1126 L
+7003 1126 mt 7027 1153 L
+7027 1153 mt 7029 1155 L
+7029 1155 mt 7052 1181 L
+7052 1181 mt 7063 1194 L
+7063 1194 mt 7077 1208 L
+7077 1208 mt 7098 1233 L
+7098 1233 mt 7101 1236 L
+7101 1236 mt 7125 1263 L
+7125 1263 mt 7133 1273 L
+7133 1273 mt 7149 1291 L
+7149 1291 mt 7168 1314 L
+7168 1314 mt 7172 1318 L
+7172 1318 mt 7196 1346 L
+7196 1346 mt 7203 1354 L
+7203 1354 mt 7220 1373 L
+7220 1373 mt 7238 1394 L
+7238 1394 mt 7244 1401 L
+7244 1401 mt 7267 1428 L
+7267 1428 mt 7273 1436 L
+7273 1436 mt 7289 1456 L
+7289 1456 mt 7308 1479 L
+7308 1479 mt 7311 1484 L
+7311 1484 mt 7333 1511 L
+7333 1511 mt 7342 1523 L
+7342 1523 mt 7355 1539 L
+7355 1539 mt 7376 1566 L
+7376 1566 mt 7377 1568 L
+7377 1568 mt 7396 1594 L
+7396 1594 mt 7412 1616 L
+7412 1616 mt 7416 1621 L
+7416 1621 mt 7435 1649 L
+7435 1649 mt 7447 1667 L
+7447 1667 mt 7453 1676 L
+7453 1676 mt 7471 1704 L
+7471 1704 mt 7482 1722 L
+7482 1722 mt 7488 1731 L
+7488 1731 mt 7504 1759 L
+7504 1759 mt 7517 1781 L
+7517 1781 mt 7520 1786 L
+7520 1786 mt 7534 1814 L
+7534 1814 mt 7548 1841 L
+7548 1841 mt 7552 1849 L
+7552 1849 mt 7561 1869 L
+7561 1869 mt 7573 1896 L
+7573 1896 mt 7583 1924 L
+7583 1924 mt 7587 1934 L
+7587 1934 mt 7593 1951 L
+7593 1951 mt 7601 1979 L
+7601 1979 mt 7609 2006 L
+7609 2006 mt 7615 2034 L
+7615 2034 mt 7620 2061 L
+7620 2061 mt 7621 2069 L
+7482 1954 mt 7488 1979 L
+7488 1979 mt 7494 2006 L
+7494 2006 mt 7499 2034 L
+7499 2034 mt 7503 2061 L
+7503 2061 mt 7506 2089 L
+7506 2089 mt 7508 2116 L
+7508 2116 mt 7509 2144 L
+7509 2144 mt 7509 2171 L
+7509 2171 mt 7509 2199 L
+7509 2199 mt 7507 2226 L
+7507 2226 mt 7505 2254 L
+7505 2254 mt 7503 2281 L
+7503 2281 mt 7500 2309 L
+7500 2309 mt 7497 2336 L
+7497 2336 mt 7494 2364 L
+7494 2364 mt 7490 2391 L
+7490 2391 mt 7486 2419 L
+7486 2419 mt 7482 2446 L
+7482 2446 mt 7482 2447 L
+7482 2447 mt 7478 2474 L
+7478 2474 mt 7473 2502 L
+7473 2502 mt 7468 2529 L
+7468 2529 mt 7462 2557 L
+7462 2557 mt 7456 2584 L
+7456 2584 mt 7449 2612 L
+7449 2612 mt 7447 2620 L
+7447 2620 mt 7442 2639 L
+7442 2639 mt 7434 2667 L
+7434 2667 mt 7426 2694 L
+7426 2694 mt 7417 2722 L
+7417 2722 mt 7412 2735 L
+7412 2735 mt 7407 2749 L
+7407 2749 mt 7398 2777 L
+7398 2777 mt 7388 2804 L
+7388 2804 mt 7377 2832 L
+7377 2832 mt 7377 2832 L
+7377 2832 mt 7367 2859 L
+7367 2859 mt 7356 2887 L
+7356 2887 mt 7346 2914 L
+7346 2914 mt 7342 2922 L
+7342 2922 mt 7335 2942 L
+7335 2942 mt 7324 2969 L
+7324 2969 mt 7312 2997 L
+7312 2997 mt 7308 3008 L
+7308 3008 mt 7301 3024 L
+7301 3024 mt 7289 3052 L
+7289 3052 mt 7278 3079 L
+7278 3079 mt 7273 3091 L
+7273 3091 mt 7266 3107 L
+7266 3107 mt 7254 3134 L
+7254 3134 mt 7241 3162 L
+7241 3162 mt 7238 3170 L
+7238 3170 mt 7229 3189 L
+7229 3189 mt 7216 3217 L
+7216 3217 mt 7203 3244 L
+7203 3244 mt 7203 3245 L
+7203 3245 mt 7190 3272 L
+7190 3272 mt 7177 3299 L
+7177 3299 mt 7168 3318 L
+7168 3318 mt 7164 3327 L
+7164 3327 mt 7150 3354 L
+7150 3354 mt 7136 3382 L
+7136 3382 mt 7133 3389 L
+7133 3389 mt 7123 3409 L
+7123 3409 mt 7110 3437 L
+7110 3437 mt 7098 3461 L
+7098 3461 mt 7097 3464 L
+7097 3464 mt 7084 3492 L
+7084 3492 mt 7071 3519 L
+7071 3519 mt 7063 3536 L
+7063 3536 mt 7058 3547 L
+7058 3547 mt 7045 3575 L
+7045 3575 mt 7032 3602 L
+7032 3602 mt 7029 3609 L
+7029 3609 mt 7019 3630 L
+7019 3630 mt 7005 3657 L
+7005 3657 mt 6994 3678 L
+6994 3678 mt 6990 3685 L
+6990 3685 mt 6976 3712 L
+6976 3712 mt 6961 3740 L
+6961 3740 mt 6959 3744 L
+6959 3744 mt 6947 3767 L
+6947 3767 mt 6932 3795 L
+6932 3795 mt 6924 3809 L
+6924 3809 mt 6917 3822 L
+6917 3822 mt 6902 3850 L
+6902 3850 mt 6889 3874 L
+6889 3874 mt 6887 3877 L
+6887 3877 mt 6872 3905 L
+6872 3905 mt 6856 3932 L
+6856 3932 mt 6854 3936 L
+6854 3936 mt 6841 3960 L
+6841 3960 mt 6824 3987 L
+6824 3987 mt 6819 3996 L
+6819 3996 mt 6808 4015 L
+6808 4015 mt 6791 4042 L
+6791 4042 mt 6785 4053 L
+6785 4053 mt 6775 4070 L
+6775 4070 mt 6758 4097 L
+6758 4097 mt 6750 4110 L
+6750 4110 mt 6741 4125 L
+6741 4125 mt 6723 4152 L
+6723 4152 mt 6715 4166 L
+6715 4166 mt 6706 4180 L
+6706 4180 mt 6688 4207 L
+6688 4207 mt 6680 4221 L
+6680 4221 mt 6671 4235 L
+6671 4235 mt 6654 4262 L
+6654 4262 mt 6645 4276 L
+6645 4276 mt 6636 4290 L
+6636 4290 mt 6619 4317 L
+6619 4317 mt 6610 4331 L
+6610 4331 mt 6601 4345 L
+6601 4345 mt 6584 4372 L
+6584 4372 mt 6575 4385 L
+6575 4385 mt 6565 4400 L
+6565 4400 mt 6546 4427 L
+6546 4427 mt 6540 4436 L
+6540 4436 mt 6527 4455 L
+6527 4455 mt 6506 4482 L
+6506 4482 mt 6505 4482 L
+6505 4482 mt 6482 4510 L
+6482 4510 mt 6471 4522 L
+6471 4522 mt 6457 4537 L
+6457 4537 mt 6436 4557 L
+6436 4557 mt 6428 4565 L
+6428 4565 mt 6401 4587 L
+6401 4587 mt 6394 4592 L
+6394 4592 mt 6366 4612 L
+6366 4612 mt 6353 4620 L
+6353 4620 mt 6331 4632 L
+6331 4632 mt 6299 4648 L
+6299 4648 mt 6296 4649 L
+6296 4649 mt 6261 4662 L
+6261 4662 mt 6227 4672 L
+6227 4672 mt 6213 4675 L
+6213 4675 mt 6192 4680 L
+6192 4680 mt 6157 4686 L
+6157 4686 mt 6122 4690 L
+6122 4690 mt 6087 4692 L
+6087 4692 mt 6052 4692 L
+6052 4692 mt 6017 4691 L
+6017 4691 mt 5983 4688 L
+5983 4688 mt 5948 4683 L
+5948 4683 mt 5913 4677 L
+5913 4677 mt 5905 4675 L
+5905 4675 mt 5878 4669 L
+5878 4669 mt 5843 4659 L
+5843 4659 mt 5808 4649 L
+5808 4649 mt 5805 4648 L
+5805 4648 mt 5773 4637 L
+5773 4637 mt 5738 4625 L
+5738 4625 mt 5726 4620 L
+5726 4620 mt 5704 4610 L
+5704 4610 mt 5671 4592 L
+5671 4592 mt 5669 4591 L
+5669 4591 mt 5634 4565 L
+5634 4565 mt 5633 4565 L
+5633 4565 mt 5612 4537 L
+5612 4537 mt 5605 4510 L
+5605 4510 mt 5603 4482 L
+5603 4482 mt 5603 4455 L
+5603 4455 mt 5601 4427 L
+5601 4427 mt 5599 4416 L
+5599 4416 mt 5596 4400 L
+5596 4400 mt 5587 4372 L
+5587 4372 mt 5575 4345 L
+5575 4345 mt 5564 4322 L
+5564 4322 mt 5562 4317 L
+5562 4317 mt 5550 4290 L
+5550 4290 mt 5541 4262 L
+5541 4262 mt 5533 4235 L
+5533 4235 mt 5529 4216 L
+5529 4216 mt 5527 4207 L
+5527 4207 mt 5523 4180 L
+5523 4180 mt 5518 4152 L
+5518 4152 mt 5514 4125 L
+5514 4125 mt 5510 4097 L
+5510 4097 mt 5506 4070 L
+5506 4070 mt 5500 4042 L
+5500 4042 mt 5494 4019 L
+5494 4019 mt 5493 4015 L
+5493 4015 mt 5484 3987 L
+5484 3987 mt 5474 3960 L
+5474 3960 mt 5461 3932 L
+5461 3932 mt 5459 3930 L
+5459 3930 mt 5444 3905 L
+5444 3905 mt 5425 3879 L
+5425 3879 mt 5423 3877 L
+5423 3877 mt 5395 3850 L
+5395 3850 mt 5390 3844 L
+5390 3844 mt 5360 3822 L
+5360 3822 mt 5355 3818 L
+5355 3818 mt 5320 3798 L
+5320 3798 mt 5314 3795 L
+5314 3795 mt 5285 3781 L
+5285 3781 mt 5254 3767 L
+5254 3767 mt 5250 3765 L
+5250 3765 mt 5215 3750 L
+5215 3750 mt 5189 3740 L
+5189 3740 mt 5181 3736 L
+5181 3736 mt 5146 3721 L
+5146 3721 mt 5128 3712 L
+5128 3712 mt 5111 3703 L
+5111 3703 mt 5084 3685 L
+5084 3685 mt 5076 3679 L
+5076 3679 mt 5049 3657 L
+5049 3657 mt 5041 3651 L
+5041 3651 mt 5017 3630 L
+5017 3630 mt 5006 3621 L
+5006 3621 mt 4988 3602 L
+4988 3602 mt 4971 3585 L
+4971 3585 mt 4962 3575 L
+4962 3575 mt 4937 3547 L
+4937 3547 mt 4936 3547 L
+4936 3547 mt 4913 3519 L
+4913 3519 mt 4902 3505 L
+4902 3505 mt 4891 3492 L
+4891 3492 mt 4871 3464 L
+4871 3464 mt 4867 3459 L
+4867 3459 mt 4851 3437 L
+4851 3437 mt 4832 3410 L
+4832 3410 mt 4831 3409 L
+4831 3409 mt 4812 3382 L
+4812 3382 mt 4797 3362 L
+4797 3362 mt 4792 3354 L
+4792 3354 mt 4770 3327 L
+4770 3327 mt 4762 3318 L
+4762 3318 mt 4745 3299 L
+4745 3299 mt 4727 3281 L
+4727 3281 mt 4719 3272 L
+4719 3272 mt 4692 3246 L
+4692 3246 mt 4691 3244 L
+4691 3244 mt 4665 3217 L
+4665 3217 mt 4657 3209 L
+4657 3209 mt 4642 3189 L
+4642 3189 mt 4625 3162 L
+4625 3162 mt 4623 3158 L
+4623 3158 mt 4608 3134 L
+4608 3134 mt 4588 3107 L
+4588 3107 mt 4588 3107 L
+4588 3107 mt 4561 3079 L
+4561 3079 mt 4553 3072 L
+4553 3072 mt 4527 3052 L
+4527 3052 mt 4518 3045 L
+4518 3045 mt 4488 3024 L
+4488 3024 mt 4483 3021 L
+4483 3021 mt 4448 2998 L
+4448 2998 mt 4447 2997 L
+4447 2997 mt 4413 2973 L
+4413 2973 mt 4409 2969 L
+4409 2969 mt 4379 2946 L
+4379 2946 mt 4373 2942 L
+4373 2942 mt 4344 2920 L
+4344 2920 mt 4336 2914 L
+4336 2914 mt 4309 2896 L
+4309 2896 mt 4293 2887 L
+4293 2887 mt 4274 2875 L
+4274 2875 mt 4246 2859 L
+4246 2859 mt 4239 2855 L
+4239 2855 mt 4204 2836 L
+4204 2836 mt 4194 2832 L
+4194 2832 mt 4169 2820 L
+4169 2820 mt 4134 2806 L
+4134 2806 mt 4127 2804 L
+4127 2804 mt 4100 2796 L
+4100 2796 mt 4065 2792 L
+4065 2792 mt 4030 2801 L
+4030 2801 mt 4025 2804 L
+4025 2804 mt 3995 2829 L
+3995 2829 mt 3993 2832 L
+3993 2832 mt 3966 2859 L
+3966 2859 mt 3960 2865 L
+3960 2865 mt 3937 2887 L
+3937 2887 mt 3925 2897 L
+3925 2897 mt 3904 2914 L
+3904 2914 mt 3890 2925 L
+3890 2925 mt 3867 2942 L
+3867 2942 mt 3855 2950 L
+3855 2950 mt 3826 2969 L
+3826 2969 mt 3821 2973 L
+3821 2973 mt 3786 2994 L
+3786 2994 mt 3781 2997 L
+3781 2997 mt 3751 3015 L
+3751 3015 mt 3733 3024 L
+3733 3024 mt 3716 3034 L
+3716 3034 mt 3682 3052 L
+3682 3052 mt 3681 3053 L
+3681 3053 mt 3646 3072 L
+3646 3072 mt 3632 3079 L
+3632 3079 mt 3611 3091 L
+3611 3091 mt 3581 3107 L
+3581 3107 mt 3577 3109 L
+3577 3109 mt 3542 3129 L
+3542 3129 mt 3531 3134 L
+3531 3134 mt 3507 3151 L
+3507 3151 mt 3490 3162 L
+3490 3162 mt 3472 3186 L
+3472 3186 mt 3469 3189 L
+3469 3189 mt 3467 3217 L
+3467 3217 mt 3472 3226 L
+3472 3226 mt 3479 3244 L
+3479 3244 mt 3495 3272 L
+3495 3272 mt 3507 3294 L
+3507 3294 mt 3509 3299 L
+3509 3299 mt 3524 3327 L
+3524 3327 mt 3540 3354 L
+3540 3354 mt 3542 3357 L
+3542 3357 mt 3556 3382 L
+3556 3382 mt 3576 3409 L
+3576 3409 mt 3577 3410 L
+3577 3410 mt 3597 3437 L
+3597 3437 mt 3611 3455 L
+3611 3455 mt 3619 3464 L
+3619 3464 mt 3642 3492 L
+3642 3492 mt 3646 3497 L
+3646 3497 mt 3666 3519 L
+3666 3519 mt 3681 3536 L
+3681 3536 mt 3692 3547 L
+3692 3547 mt 3716 3573 L
+3716 3573 mt 3717 3575 L
+3717 3575 mt 3741 3602 L
+3741 3602 mt 3751 3615 L
+3751 3615 mt 3761 3630 L
+3761 3630 mt 3777 3657 L
+3777 3657 mt 3786 3675 L
+3786 3675 mt 3790 3685 L
+3790 3685 mt 3800 3712 L
+3800 3712 mt 3807 3740 L
+3807 3740 mt 3810 3767 L
+3810 3767 mt 3810 3795 L
+3810 3795 mt 3804 3822 L
+3804 3822 mt 3793 3850 L
+3793 3850 mt 3786 3864 L
+3786 3864 mt 3779 3877 L
+3779 3877 mt 3766 3905 L
+3766 3905 mt 3757 3932 L
+3757 3932 mt 3751 3955 L
+3751 3955 mt 3749 3960 L
+3749 3960 mt 3747 3987 L
+3747 3987 mt 3751 3995 L
+3751 3995 mt 3760 4015 L
+3760 4015 mt 3779 4042 L
+3779 4042 mt 3786 4053 L
+3786 4053 mt 3796 4070 L
+3796 4070 mt 3809 4097 L
+3809 4097 mt 3818 4125 L
+3818 4125 mt 3821 4140 L
+3821 4140 mt 3823 4152 L
+3823 4152 mt 3826 4180 L
+3826 4180 mt 3826 4207 L
+3826 4207 mt 3821 4235 L
+3821 4235 mt 3821 4236 L
+3821 4236 mt 3807 4262 L
+3807 4262 mt 3786 4286 L
+3786 4286 mt 3782 4290 L
+3782 4290 mt 3754 4317 L
+3754 4317 mt 3751 4328 L
+3751 4328 mt 3743 4345 L
+3743 4345 mt 3751 4359 L
+3751 4359 mt 3757 4372 L
+3757 4372 mt 3782 4400 L
+3782 4400 mt 3786 4405 L
+3786 4405 mt 3802 4427 L
+3802 4427 mt 3816 4455 L
+3816 4455 mt 3821 4466 L
+3821 4466 mt 3828 4482 L
+3828 4482 mt 3837 4510 L
+3837 4510 mt 3844 4537 L
+3844 4537 mt 3848 4565 L
+3848 4565 mt 3851 4592 L
+3851 4592 mt 3846 4620 L
+3846 4620 mt 3836 4648 L
+3836 4648 mt 3823 4675 L
+3823 4675 mt 3821 4679 L
+3821 4679 mt 3808 4703 L
+3808 4703 mt 3790 4730 L
+3790 4730 mt 3786 4737 L
+3786 4737 mt 3771 4758 L
+3771 4758 mt 3751 4784 L
+3751 4784 mt 3750 4785 L
+3750 4785 mt 3727 4813 L
+3727 4813 mt 3716 4825 L
+3716 4825 mt 3701 4840 L
+3701 4840 mt 3681 4860 L
+3681 4860 mt 3673 4868 L
+3673 4868 mt 3646 4892 L
+3646 4892 mt 3643 4895 L
+3643 4895 mt 3611 4921 L
+3611 4921 mt 3609 4923 L
+3609 4923 mt 3577 4947 L
+3577 4947 mt 3572 4950 L
+3572 4950 mt 3542 4971 L
+3542 4971 mt 3531 4978 L
+3531 4978 mt 3507 4993 L
+3507 4993 mt 3485 5005 L
+3485 5005 mt 3472 5012 L
+3472 5012 mt 3437 5031 L
+3437 5031 mt 3433 5033 L
+3433 5033 mt 3402 5048 L
+3402 5048 mt 3375 5060 L
+3375 5060 mt 3367 5064 L
+3367 5064 mt 3332 5079 L
+3332 5079 mt 3311 5088 L
+3311 5088 mt 3298 5093 L
+3298 5093 mt 3263 5107 L
+3263 5107 mt 3239 5115 L
+3239 5115 mt 3228 5119 L
+3228 5119 mt 3193 5131 L
+3193 5131 mt 3158 5142 L
+3158 5142 mt 3157 5143 L
+3157 5143 mt 3123 5153 L
+3123 5153 mt 3088 5162 L
+3088 5162 mt 3053 5170 L
+3053 5170 mt 3053 5170 L
+3053 5170 mt 3019 5178 L
+3019 5178 mt 2984 5184 L
+2984 5184 mt 2949 5190 L
+2949 5190 mt 2914 5196 L
+2914 5196 mt 2898 5198 L
+2898 5198 mt 2879 5200 L
+2879 5200 mt 2844 5204 L
+2844 5204 mt 2809 5208 L
+2809 5208 mt 2774 5210 L
+2774 5210 mt 2740 5213 L
+2740 5213 mt 2705 5214 L
+2705 5214 mt 2670 5215 L
+2670 5215 mt 2635 5215 L
+2635 5215 mt 2600 5215 L
+2600 5215 mt 2565 5214 L
+2565 5214 mt 2530 5213 L
+2530 5213 mt 2496 5211 L
+2496 5211 mt 2461 5209 L
+2461 5209 mt 2426 5207 L
+2426 5207 mt 2391 5203 L
+2391 5203 mt 2356 5200 L
+2356 5200 mt 2339 5198 L
+2339 5198 mt 2321 5196 L
+2321 5196 mt 2286 5191 L
+2286 5191 mt 2251 5186 L
+2251 5186 mt 2217 5181 L
+2217 5181 mt 2182 5175 L
+2182 5175 mt 2159 5170 L
+2159 5170 mt 2147 5168 L
+2147 5168 mt 2112 5161 L
+2112 5161 mt 2077 5153 L
+2077 5153 mt 2042 5144 L
+2042 5144 mt 2036 5143 L
+2036 5143 mt 2007 5135 L
+2007 5135 mt 1972 5126 L
+1972 5126 mt 1938 5116 L
+1938 5116 mt 1937 5115 L
+1937 5115 mt 1903 5105 L
+1903 5105 mt 1868 5094 L
+1868 5094 mt 1851 5088 L
+1851 5088 mt 1833 5082 L
+1833 5082 mt 1798 5069 L
+1798 5069 mt 1776 5060 L
+1776 5060 mt 1763 5055 L
+1763 5055 mt 1728 5041 L
+1728 5041 mt 1710 5033 L
+1710 5033 mt 1694 5025 L
+1694 5025 mt 1659 5008 L
+1659 5008 mt 1653 5005 L
+1653 5005 mt 1624 4990 L
+1624 4990 mt 1602 4978 L
+1602 4978 mt 1589 4970 L
+1589 4970 mt 1557 4950 L
+1557 4950 mt 1554 4948 L
+1554 4948 mt 1519 4925 L
+1519 4925 mt 1516 4923 L
+1516 4923 mt 1484 4899 L
+1484 4899 mt 1479 4895 L
+1479 4895 mt 1449 4871 L
+1449 4871 mt 1445 4868 L
+1445 4868 mt 1415 4840 L
+1415 4840 mt 1415 4840 L
+1415 4840 mt 1387 4813 L
+1387 4813 mt 1380 4805 L
+1380 4805 mt 1361 4785 L
+1361 4785 mt 1345 4767 L
+1345 4767 mt 1337 4758 L
+1337 4758 mt 1315 4730 L
+1315 4730 mt 1310 4724 L
+1310 4724 mt 1294 4703 L
+1294 4703 mt 1275 4676 L
+1275 4676 mt 1275 4675 L
+1275 4675 mt 1256 4648 L
+1256 4648 mt 1240 4622 L
+1240 4622 mt 1239 4620 L
+1239 4620 mt 1222 4592 L
+1222 4592 mt 1207 4565 L
+1207 4565 mt 1205 4563 L
+1205 4563 mt 1191 4537 L
+1191 4537 mt 1176 4510 L
+1176 4510 mt 1170 4498 L
+1170 4498 mt 1162 4482 L
+1162 4482 mt 1149 4455 L
+1149 4455 mt 1136 4427 L
+1136 4427 mt 1136 4427 L
+1136 4427 mt 1123 4400 L
+1123 4400 mt 1112 4372 L
+1112 4372 mt 1101 4345 L
+1101 4345 mt 1101 4344 L
+1101 4344 mt 1091 4317 L
+1091 4317 mt 1082 4290 L
+1082 4290 mt 1073 4262 L
+1073 4262 mt 1066 4237 L
+1066 4237 mt 1065 4235 L
+1065 4235 mt 1058 4207 L
+1058 4207 mt 1051 4180 L
+1051 4180 mt 1044 4152 L
+1044 4152 mt 1038 4125 L
+1038 4125 mt 1032 4097 L
+1032 4097 mt 1031 4093 L
+1031 4093 mt 1026 4070 L
+1026 4070 mt 1020 4042 L
+1020 4042 mt 1014 4015 L
+1014 4015 mt 1007 3987 L
+1007 3987 mt 1001 3960 L
+1001 3960 mt 996 3938 L
+ 996 3938 mt 995 3932 L
+ 995 3932 mt 988 3905 L
+ 988 3905 mt 980 3877 L
+ 980 3877 mt 972 3850 L
+ 972 3850 mt 962 3822 L
+ 962 3822 mt 961 3819 L
+ 961 3819 mt 952 3795 L
+ 952 3795 mt 940 3767 L
+ 940 3767 mt 926 3741 L
+ 926 3741 mt 926 3740 L
+ 926 3740 mt 910 3712 L
+ 910 3712 mt 892 3685 L
+ 892 3685 mt 892 3684 L
+ 892 3684 mt 871 3657 L
+ 871 3657 mt 857 3639 L
+ 857 3639 mt 848 3630 L
+ 848 3630 mt 823 3602 L
+ 823 3602 mt 822 3601 L
+ 822 3601 mt 795 3575 L
+ 795 3575 mt 787 3567 L
+ 787 3567 mt 765 3547 L
+ 765 3547 mt 752 3536 L
+ 752 3536 mt 733 3519 L
+ 733 3519 mt 717 3506 L
+ 717 3506 mt 701 3492 L
+ 701 3492 mt 682 3477 L
+ 682 3477 mt 667 3464 L
+ 667 3464 mt 647 3449 L
+ 647 3449 mt 633 3437 L
+ 633 3437 mt 613 3421 L
+ 613 3421 mt 598 3409 L
+ 598 3409 mt 578 3393 L
+ 578 3393 mt 563 3382 L
+ 563 3382 mt 543 3366 L
+ 543 3366 mt 528 3354 L
+ 528 3354 mt 508 3339 L
+ 508 3339 mt 492 3327 L
+ 492 3327 mt 473 3312 L
+ 473 3312 mt 456 3299 L
+ 456 3299 mt 438 3285 L
+ 438 3285 mt 421 3272 L
+ 421 3272 mt 403 3258 L
+ 403 3258 mt 386 3244 L
+ 386 3244 mt 368 3231 L
+ 368 3231 mt 351 3217 L
+ 351 3217 mt 334 3203 L
+ 334 3203 mt 318 3189 L
+ 318 3189 mt 299 3173 L
+ 299 3173 mt 285 3162 L
+ 285 3162 mt 264 3143 L
+ 264 3143 mt 254 3134 L
+ 254 3134 mt 229 3111 L
+ 229 3111 mt 225 3107 L
+ 225 3107 mt 196 3079 L
+ 196 3079 mt 194 3077 L
+ 194 3077 mt 169 3052 L
+ 169 3052 mt 159 3042 L
+ 159 3042 mt 142 3024 L
+ 142 3024 mt 124 3005 L
+ 124 3005 mt 117 2997 L
+ 117 2997 mt 93 2969 L
+ 93 2969 mt 90 2965 L
+ 90 2965 mt 69 2942 L
+ 69 2942 mt 55 2924 L
+ 55 2924 mt 46 2914 L
+ 46 2914 mt 24 2887 L
+ 24 2887 mt 20 2881 L
+ 20 2881 mt 3 2859 L
+ 3 2859 mt -14 2835 L
+ -14 2835 mt -17 2832 L
+ -17 2832 mt -36 2804 L
+ -36 2804 mt -49 2785 L
+ -49 2785 mt -55 2777 L
+ -55 2777 mt -72 2749 L
+ -72 2749 mt -84 2729 L
+ -84 2729 mt -88 2722 L
+ -88 2722 mt -103 2694 L
+-103 2694 mt -117 2667 L
+-117 2667 mt -119 2664 L
+-119 2664 mt -131 2639 L
+-131 2639 mt -143 2612 L
+-143 2612 mt -154 2584 L
+-154 2584 mt -154 2584 L
+-154 2584 mt -164 2557 L
+-164 2557 mt -173 2529 L
+-173 2529 mt -182 2502 L
+-182 2502 mt -188 2476 L
+-188 2476 mt -189 2474 L
+-189 2474 mt -196 2446 L
+-196 2446 mt -201 2419 L
+-201 2419 mt -206 2391 L
+-206 2391 mt -209 2364 L
+-209 2364 mt -212 2336 L
+-212 2336 mt -214 2309 L
+-214 2309 mt -215 2281 L
+-215 2281 mt -215 2254 L
+-215 2254 mt -214 2226 L
+-214 2226 mt -212 2199 L
+-212 2199 mt -209 2171 L
+-209 2171 mt -205 2144 L
+-205 2144 mt -201 2116 L
+-201 2116 mt -196 2089 L
+-196 2089 mt -190 2061 L
+-190 2061 mt -188 2057 L
+-188 2057 mt -183 2034 L
+-183 2034 mt -176 2006 L
+-176 2006 mt -168 1979 L
+-168 1979 mt -160 1951 L
+-160 1951 mt -154 1932 L
+-154 1932 mt -151 1924 L
+-151 1924 mt -142 1896 L
+-142 1896 mt -133 1869 L
+-133 1869 mt -123 1841 L
+-123 1841 mt -119 1829 L
+-119 1829 mt -114 1814 L
+-114 1814 mt -104 1786 L
+-104 1786 mt -94 1759 L
+ -94 1759 mt -84 1731 L
+ -84 1731 mt -84 1730 L
+ -84 1730 mt -74 1704 L
+ -74 1704 mt -64 1676 L
+ -64 1676 mt -54 1649 L
+ -54 1649 mt -49 1636 L
+ -49 1636 mt -43 1621 L
+ -43 1621 mt -33 1594 L
+ -33 1594 mt -22 1566 L
+ -22 1566 mt -14 1545 L
+ -14 1545 mt -12 1539 L
+ -12 1539 mt -1 1511 L
+ -1 1511 mt 8 1484 L
+ 8 1484 mt 18 1456 L
+ 18 1456 mt 20 1453 L
+ 20 1453 mt 29 1428 L
+ 29 1428 mt 39 1401 L
+ 39 1401 mt 49 1373 L
+ 49 1373 mt 55 1357 L
+ 55 1357 mt 59 1346 L
+ 59 1346 mt 68 1318 L
+ 68 1318 mt 78 1291 L
+ 78 1291 mt 88 1263 L
+ 88 1263 mt 90 1258 L
+ 90 1258 mt 97 1236 L
+ 97 1236 mt 107 1208 L
+ 107 1208 mt 117 1181 L
+ 117 1181 mt 124 1160 L
+ 124 1160 mt 127 1153 L
+ 127 1153 mt 137 1126 L
+ 137 1126 mt 148 1098 L
+ 148 1098 mt 159 1071 L
+ 159 1071 mt 159 1070 L
+ 159 1070 mt 171 1043 L
+ 171 1043 mt 183 1016 L
+ 183 1016 mt 194 992 L
+ 194 992 mt 196 988 L
+ 196 988 mt 209 961 L
+ 209 961 mt 223 933 L
+ 223 933 mt 229 923 L
+ 229 923 mt 238 906 L
+ 238 906 mt 253 878 L
+ 253 878 mt 264 860 L
+ 264 860 mt 269 851 L
+ 269 851 mt 285 823 L
+ 285 823 mt 299 801 L
+ 299 801 mt 302 796 L
+ 302 796 mt 319 768 L
+ 319 768 mt 334 746 L
+ 334 746 mt 337 741 L
+ 337 741 mt 355 713 L
+ 355 713 mt 368 694 L
+ 368 694 mt 374 686 L
+ 374 686 mt 394 658 L
+ 394 658 mt 403 646 L
+ 403 646 mt 414 631 L
+ 414 631 mt 435 603 L
+ 435 603 mt 438 599 L
+ 438 599 mt 456 576 L
+ 456 576 mt 473 555 L
+ 473 555 mt 478 548 L
+ 478 548 mt 501 521 L
+ 501 521 mt 508 512 L
+ 508 512 mt 523 493 L
+ 523 493 mt 543 470 L
+ 543 470 mt 547 466 L
+ 547 466 mt 571 438 L
+ 571 438 mt 578 430 L
+ 578 430 mt 596 411 L
+ 596 411 mt 613 392 L
+ 613 392 mt 622 383 L
+ 622 383 mt 647 357 L
+ 647 357 mt 649 355 L
+ 649 355 mt 678 328 L
+ 678 328 mt 682 324 L
+ 682 324 mt 709 300 L
+ 709 300 mt 717 293 L
+ 717 293 mt 742 273 L
+ 742 273 mt 752 265 L
+ 752 265 mt 778 245 L
+ 778 245 mt 787 239 L
+ 787 239 mt 816 218 L
+ 816 218 mt 822 214 L
+ 822 214 mt 857 191 L
+ 857 191 mt 857 190 L
+ 857 190 mt 892 168 L
+ 892 168 mt 901 163 L
+ 901 163 mt 926 147 L
+ 926 147 mt 947 135 L
+ 947 135 mt 961 127 L
+ 961 127 mt 996 108 L
+ 996 108 mt 997 108 L
+ 997 108 mt 1031 90 L
+1031 90 mt 1051 80 L
+1051 80 mt 1066 73 L
+1066 73 mt 1101 56 L
+1101 56 mt 1108 53 L
+1108 53 mt 1136 40 L
+1136 40 mt 1170 26 L
+1170 26 mt 1171 25 L
+1171 25 mt 1205 11 L
+1205 11 mt 1239 -1 L
+1239 -1 mt 1240 -2 L
+1240 -2 mt 1275 -15 L
+1275 -15 mt 1310 -28 L
+1310 -28 mt 1312 -29 L
+1312 -29 mt 1345 -41 L
+1345 -41 mt 1380 -53 L
+1380 -53 mt 1390 -56 L
+1390 -56 mt 1415 -65 L
+1415 -65 mt 1449 -76 L
+1449 -76 mt 1475 -84 L
+1475 -84 mt 1484 -87 L
+1484 -87 mt 1519 -97 L
+1519 -97 mt 1554 -108 L
+1554 -108 mt 1567 -111 L
+1567 -111 mt 1589 -118 L
+1589 -118 mt 1624 -127 L
+1624 -127 mt 1659 -137 L
+1659 -137 mt 1667 -139 L
+1667 -139 mt 1694 -146 L
+1694 -146 mt 1728 -155 L
+1728 -155 mt 1763 -164 L
+1763 -164 mt 1774 -166 L
+1774 -166 mt 1798 -172 L
+1798 -172 mt 1833 -181 L
+1833 -181 mt 1868 -190 L
+1868 -190 mt 1886 -194 L
+1886 -194 mt 1903 -198 L
+1903 -198 mt 1938 -206 L
+1938 -206 mt 1972 -215 L
+1972 -215 mt 2001 -221 L
+2001 -221 mt 2007 -223 L
+2007 -223 mt 2042 -231 L
+2042 -231 mt 2077 -239 L
+2077 -239 mt 2112 -247 L
+2112 -247 mt 2119 -249 L
+2119 -249 mt 2147 -255 L
+2147 -255 mt 2182 -263 L
+2182 -263 mt 2217 -272 L
+2217 -272 mt 2236 -276 L
+2236 -276 mt 2251 -280 L
+2251 -280 mt 2286 -288 L
+2286 -288 mt 2321 -297 L
+2321 -297 mt 2352 -304 L
+2352 -304 mt 2356 -305 L
+2356 -305 mt 2391 -313 L
+2391 -313 mt 2426 -321 L
+2426 -321 mt 2461 -329 L
+2461 -329 mt 2470 -331 L
+2470 -331 mt 2496 -337 L
+2496 -337 mt 2530 -345 L
+2530 -345 mt 2565 -353 L
+2565 -353 mt 2589 -359 L
+2589 -359 mt 2600 -362 L
+2600 -362 mt 2635 -370 L
+2635 -370 mt 2670 -378 L
+2670 -378 mt 2705 -386 L
+2705 -386 mt 2706 -386 L
+2706 -386 mt 2740 -394 L
+2740 -394 mt 2774 -402 L
+2774 -402 mt 2809 -410 L
+2809 -410 mt 2825 -414 L
+2825 -414 mt 2844 -418 L
+2844 -418 mt 2879 -427 L
+2879 -427 mt 2914 -435 L
+2914 -435 mt 2945 -441 L
+2945 -441 mt 2949 -442 L
+2949 -442 mt 2984 -450 L
+2984 -450 mt 3019 -457 L
+3019 -457 mt 3053 -465 L
+3053 -465 mt 3075 -469 L
+3075 -469 mt 3088 -472 L
+3088 -472 mt 3123 -478 L
+3123 -478 mt 3158 -485 L
+3158 -485 mt 3193 -491 L
+3193 -491 mt 3228 -496 L
+3228 -496 mt 3229 -496 L
+3229 -496 mt 3263 -502 L
+3263 -502 mt 3298 -507 L
+3298 -507 mt 3332 -511 L
+3332 -511 mt 3367 -515 L
+3367 -515 mt 3402 -519 L
+3402 -519 mt 3437 -523 L
+3437 -523 mt 3449 -524 L
+3449 -524 mt 3472 -526 L
+3472 -526 mt 3507 -529 L
+3507 -529 mt 3542 -532 L
+3542 -532 mt 3577 -534 L
+3577 -534 mt 3611 -535 L
+3611 -535 mt 3646 -537 L
+3646 -537 mt 3681 -537 L
+3681 -537 mt 3716 -538 L
+3716 -538 mt 3751 -537 L
+3751 -537 mt 3786 -537 L
+3786 -537 mt 3821 -535 L
+3821 -535 mt 3855 -534 L
+3855 -534 mt 3890 -532 L
+3890 -532 mt 3925 -530 L
+3925 -530 mt 3960 -527 L
+3960 -527 mt 3995 -524 L
+3995 -524 mt 3998 -524 L
+3998 -524 mt 4030 -521 L
+4030 -521 mt 4065 -518 L
+4065 -518 mt 4100 -515 L
+4100 -515 mt 4134 -511 L
+4134 -511 mt 4169 -507 L
+4169 -507 mt 4204 -503 L
+4204 -503 mt 4239 -499 L
+4239 -499 mt 4257 -496 L
+4257 -496 mt 4274 -494 L
+4274 -494 mt 4309 -489 L
+4309 -489 mt 4344 -484 L
+4344 -484 mt 4379 -479 L
+4379 -479 mt 4413 -473 L
+4413 -473 mt 4438 -469 L
+4438 -469 mt 4448 -467 L
+4448 -467 mt 4483 -461 L
+4483 -461 mt 4518 -454 L
+4518 -454 mt 4553 -447 L
+4553 -447 mt 4578 -441 L
+4578 -441 mt 4588 -439 L
+4588 -439 mt 4623 -432 L
+4623 -432 mt 4657 -423 L
+4657 -423 mt 4692 -415 L
+4692 -415 mt 4695 -414 L
+4695 -414 mt 4727 -406 L
+4727 -406 mt 4762 -396 L
+4762 -396 mt 4795 -386 L
+4795 -386 mt 4797 -386 L
+4797 -386 mt 4832 -376 L
+4832 -376 mt 4867 -365 L
+4867 -365 mt 4885 -359 L
+4885 -359 mt 4902 -354 L
+4902 -354 mt 4936 -342 L
+4936 -342 mt 4967 -331 L
+4967 -331 mt 4971 -330 L
+4971 -330 mt 5006 -318 L
+5006 -318 mt 5041 -306 L
+5041 -306 mt 5046 -304 L
+5046 -304 mt 5076 -293 L
+5076 -293 mt 5111 -280 L
+5111 -280 mt 5120 -276 L
+5120 -276 mt 5146 -267 L
+5146 -267 mt 5181 -253 L
+5181 -253 mt 5192 -249 L
+5192 -249 mt 5215 -240 L
+5215 -240 mt 5250 -226 L
+5250 -226 mt 5261 -221 L
+5261 -221 mt 5285 -211 L
+5285 -211 mt 5320 -196 L
+5320 -196 mt 5325 -194 L
+5325 -194 mt 5355 -181 L
+5355 -181 mt 5387 -166 L
+5387 -166 mt 5390 -165 L
+5390 -165 mt 5425 -149 L
+5425 -149 mt 5445 -139 L
+5445 -139 mt 5459 -132 L
+5459 -132 mt 5494 -114 L
+5494 -114 mt 5500 -111 L
+5500 -111 mt 5529 -97 L
+5529 -97 mt 5553 -84 L
+5553 -84 mt 5564 -78 L
+5564 -78 mt 5599 -59 L
+5599 -59 mt 5603 -56 L
+5603 -56 mt 5634 -39 L
+5634 -39 mt 5651 -29 L
+5651 -29 mt 5669 -18 L
+5669 -18 mt 5696 -1 L
+5696 -1 mt 5704 3 L
+5704 3 mt 5738 25 L
+5738 25 mt 5738 25 L
+5738 25 mt 5773 49 L
+5773 49 mt 5779 53 L
+5779 53 mt 5808 73 L
+5808 73 mt 5819 80 L
+5819 80 mt 5843 98 L
+5843 98 mt 5856 108 L
+5856 108 mt 5878 124 L
+5878 124 mt 5893 135 L
+5893 135 mt 5913 151 L
+5913 151 mt 5928 163 L
+5928 163 mt 5948 179 L
+5948 179 mt 5962 190 L
+5962 190 mt 5983 207 L
+5983 207 mt 5995 218 L
+5995 218 mt 6017 237 L
+6017 237 mt 6028 245 L
+6028 245 mt 6052 267 L
+6052 267 mt 6059 273 L
+6059 273 mt 6087 298 L
+6087 298 mt 6090 300 L
+6090 300 mt 6120 328 L
+6120 328 mt 6122 330 L
+6122 330 mt 6150 355 L
+6150 355 mt 6157 362 L
+6157 362 mt 6179 383 L
+6179 383 mt 6192 395 L
+6192 395 mt 6209 411 L
+6209 411 mt 6227 428 L
+6227 428 mt 6238 438 L
+6238 438 mt 6261 460 L
+6261 460 mt 6267 466 L
+6267 466 mt 6296 493 L
+6296 493 mt 6296 493 L
+6296 493 mt 6325 521 L
+6325 521 mt 6331 526 L
+6331 526 mt 6354 548 L
+6354 548 mt 6366 559 L
+6366 559 mt 6384 576 L
+6384 576 mt 6401 592 L
+6401 592 mt 6413 603 L
+6413 603 mt 6436 625 L
+6436 625 mt 6442 631 L
+6442 631 mt 6471 658 L
+6471 658 mt 6471 658 L
+6471 658 mt 6500 686 L
+6500 686 mt 6506 691 L
+6506 691 mt 6530 713 L
+6530 713 mt 6540 723 L
+6540 723 mt 6559 741 L
+6559 741 mt 6575 757 L
+6575 757 mt 6588 768 L
+6588 768 mt 6610 790 L
+6610 790 mt 6616 796 L
+6616 796 mt 6645 823 L
+6645 823 mt 6645 823 L
+6645 823 mt 6673 851 L
+6673 851 mt 6680 857 L
+6680 857 mt 6701 878 L
+6701 878 mt 6715 892 L
+6715 892 mt 6729 906 L
+6729 906 mt 6750 927 L
+6750 927 mt 6756 933 L
+6756 933 mt 6783 961 L
+6783 961 mt 6785 963 L
+6785 963 mt 6809 988 L
+6809 988 mt 6819 999 L
+6819 999 mt 6835 1016 L
+6835 1016 mt 6854 1036 L
+6854 1036 mt 6861 1043 L
+6861 1043 mt 6887 1071 L
+6887 1071 mt 6889 1073 L
+6889 1073 mt 6912 1098 L
+6912 1098 mt 6924 1112 L
+6924 1112 mt 6937 1126 L
+6937 1126 mt 6959 1151 L
+6959 1151 mt 6961 1153 L
+6961 1153 mt 6985 1181 L
+6985 1181 mt 6994 1191 L
+6994 1191 mt 7008 1208 L
+7008 1208 mt 7029 1232 L
+7029 1232 mt 7032 1236 L
+7032 1236 mt 7055 1263 L
+7055 1263 mt 7063 1274 L
+7063 1274 mt 7078 1291 L
+7078 1291 mt 7098 1316 L
+7098 1316 mt 7100 1318 L
+7100 1318 mt 7123 1346 L
+7123 1346 mt 7133 1359 L
+7133 1359 mt 7145 1373 L
+7145 1373 mt 7167 1401 L
+7167 1401 mt 7168 1402 L
+7168 1402 mt 7189 1428 L
+7189 1428 mt 7203 1447 L
+7203 1447 mt 7210 1456 L
+7210 1456 mt 7231 1484 L
+7231 1484 mt 7238 1494 L
+7238 1494 mt 7251 1511 L
+7251 1511 mt 7271 1539 L
+7271 1539 mt 7273 1541 L
+7273 1541 mt 7290 1566 L
+7290 1566 mt 7308 1592 L
+7308 1592 mt 7309 1594 L
+7309 1594 mt 7327 1621 L
+7327 1621 mt 7342 1646 L
+7342 1646 mt 7344 1649 L
+7344 1649 mt 7361 1676 L
+7361 1676 mt 7376 1704 L
+7376 1704 mt 7377 1706 L
+7377 1706 mt 7391 1731 L
+7391 1731 mt 7405 1759 L
+7405 1759 mt 7412 1773 L
+7412 1773 mt 7419 1786 L
+7419 1786 mt 7432 1814 L
+7432 1814 mt 7443 1841 L
+7443 1841 mt 7447 1851 L
+7447 1851 mt 7454 1869 L
+7454 1869 mt 7464 1896 L
+7464 1896 mt 7473 1924 L
+7473 1924 mt 7481 1951 L
+7481 1951 mt 7482 1954 L
+7377 1916 mt 7380 1924 L
+7380 1924 mt 7387 1951 L
+7387 1951 mt 7393 1979 L
+7393 1979 mt 7398 2006 L
+7398 2006 mt 7402 2034 L
+7402 2034 mt 7405 2061 L
+7405 2061 mt 7407 2089 L
+7407 2089 mt 7408 2116 L
+7408 2116 mt 7409 2144 L
+7409 2144 mt 7408 2171 L
+7408 2171 mt 7407 2199 L
+7407 2199 mt 7406 2226 L
+7406 2226 mt 7403 2254 L
+7403 2254 mt 7401 2281 L
+7401 2281 mt 7398 2309 L
+7398 2309 mt 7395 2336 L
+7395 2336 mt 7391 2364 L
+7391 2364 mt 7388 2391 L
+7388 2391 mt 7384 2419 L
+7384 2419 mt 7380 2446 L
+7380 2446 mt 7377 2460 L
+7377 2460 mt 7375 2474 L
+7375 2474 mt 7370 2502 L
+7370 2502 mt 7365 2529 L
+7365 2529 mt 7359 2557 L
+7359 2557 mt 7353 2584 L
+7353 2584 mt 7346 2612 L
+7346 2612 mt 7342 2625 L
+7342 2625 mt 7339 2639 L
+7339 2639 mt 7331 2667 L
+7331 2667 mt 7323 2694 L
+7323 2694 mt 7314 2722 L
+7314 2722 mt 7308 2740 L
+7308 2740 mt 7305 2749 L
+7305 2749 mt 7295 2777 L
+7295 2777 mt 7286 2804 L
+7286 2804 mt 7276 2832 L
+7276 2832 mt 7273 2841 L
+7273 2841 mt 7266 2859 L
+7266 2859 mt 7257 2887 L
+7257 2887 mt 7246 2914 L
+7246 2914 mt 7238 2936 L
+7238 2936 mt 7236 2942 L
+7236 2942 mt 7225 2969 L
+7225 2969 mt 7214 2997 L
+7214 2997 mt 7203 3024 L
+7203 3024 mt 7203 3025 L
+7203 3025 mt 7192 3052 L
+7192 3052 mt 7181 3079 L
+7181 3079 mt 7169 3107 L
+7169 3107 mt 7168 3110 L
+7168 3110 mt 7158 3134 L
+7158 3134 mt 7146 3162 L
+7146 3162 mt 7134 3189 L
+7134 3189 mt 7133 3192 L
+7133 3192 mt 7122 3217 L
+7122 3217 mt 7110 3244 L
+7110 3244 mt 7098 3271 L
+7098 3271 mt 7098 3272 L
+7098 3272 mt 7086 3299 L
+7086 3299 mt 7073 3327 L
+7073 3327 mt 7063 3348 L
+7063 3348 mt 7061 3354 L
+7061 3354 mt 7048 3382 L
+7048 3382 mt 7036 3409 L
+7036 3409 mt 7029 3425 L
+7029 3425 mt 7023 3437 L
+7023 3437 mt 7011 3464 L
+7011 3464 mt 6999 3492 L
+6999 3492 mt 6994 3504 L
+6994 3504 mt 6987 3519 L
+6987 3519 mt 6974 3547 L
+6974 3547 mt 6962 3575 L
+6962 3575 mt 6959 3581 L
+6959 3581 mt 6949 3602 L
+6949 3602 mt 6936 3630 L
+6936 3630 mt 6924 3654 L
+6924 3654 mt 6923 3657 L
+6923 3657 mt 6909 3685 L
+6909 3685 mt 6896 3712 L
+6896 3712 mt 6889 3725 L
+6889 3725 mt 6882 3740 L
+6882 3740 mt 6868 3767 L
+6868 3767 mt 6854 3795 L
+6854 3795 mt 6854 3795 L
+6854 3795 mt 6840 3822 L
+6840 3822 mt 6826 3850 L
+6826 3850 mt 6819 3862 L
+6819 3862 mt 6812 3877 L
+6812 3877 mt 6797 3905 L
+6797 3905 mt 6785 3927 L
+6785 3927 mt 6782 3932 L
+6782 3932 mt 6766 3960 L
+6766 3960 mt 6751 3987 L
+6751 3987 mt 6750 3989 L
+6750 3989 mt 6735 4015 L
+6735 4015 mt 6719 4042 L
+6719 4042 mt 6715 4050 L
+6715 4050 mt 6703 4070 L
+6703 4070 mt 6687 4097 L
+6687 4097 mt 6680 4109 L
+6680 4109 mt 6671 4125 L
+6671 4125 mt 6654 4152 L
+6654 4152 mt 6645 4167 L
+6645 4167 mt 6638 4180 L
+6638 4180 mt 6621 4207 L
+6621 4207 mt 6610 4226 L
+6610 4226 mt 6605 4235 L
+6605 4235 mt 6589 4262 L
+6589 4262 mt 6575 4286 L
+6575 4286 mt 6573 4290 L
+6573 4290 mt 6557 4317 L
+6557 4317 mt 6541 4345 L
+6541 4345 mt 6540 4346 L
+6540 4346 mt 6525 4372 L
+6525 4372 mt 6508 4400 L
+6508 4400 mt 6506 4403 L
+6506 4403 mt 6490 4427 L
+6490 4427 mt 6471 4455 L
+6471 4455 mt 6471 4456 L
+6471 4456 mt 6451 4482 L
+6451 4482 mt 6436 4500 L
+6436 4500 mt 6428 4510 L
+6428 4510 mt 6402 4537 L
+6402 4537 mt 6401 4538 L
+6401 4538 mt 6371 4565 L
+6371 4565 mt 6366 4569 L
+6366 4569 mt 6333 4592 L
+6333 4592 mt 6331 4594 L
+6331 4594 mt 6296 4614 L
+6296 4614 mt 6282 4620 L
+6282 4620 mt 6261 4629 L
+6261 4629 mt 6227 4640 L
+6227 4640 mt 6192 4648 L
+6192 4648 mt 6192 4648 L
+6192 4648 mt 6157 4653 L
+6157 4653 mt 6122 4657 L
+6122 4657 mt 6087 4658 L
+6087 4658 mt 6052 4658 L
+6052 4658 mt 6017 4655 L
+6017 4655 mt 5983 4650 L
+5983 4650 mt 5972 4648 L
+5972 4648 mt 5948 4642 L
+5948 4642 mt 5913 4632 L
+5913 4632 mt 5878 4622 L
+5878 4622 mt 5872 4620 L
+5872 4620 mt 5843 4606 L
+5843 4606 mt 5816 4592 L
+5816 4592 mt 5808 4587 L
+5808 4587 mt 5774 4565 L
+5774 4565 mt 5773 4565 L
+5773 4565 mt 5746 4537 L
+5746 4537 mt 5738 4521 L
+5738 4521 mt 5734 4510 L
+5734 4510 mt 5730 4482 L
+5730 4482 mt 5729 4455 L
+5729 4455 mt 5727 4427 L
+5727 4427 mt 5720 4400 L
+5720 4400 mt 5708 4372 L
+5708 4372 mt 5704 4364 L
+5704 4364 mt 5693 4345 L
+5693 4345 mt 5676 4317 L
+5676 4317 mt 5669 4305 L
+5669 4305 mt 5660 4290 L
+5660 4290 mt 5647 4262 L
+5647 4262 mt 5636 4235 L
+5636 4235 mt 5634 4228 L
+5634 4228 mt 5628 4207 L
+5628 4207 mt 5622 4180 L
+5622 4180 mt 5618 4152 L
+5618 4152 mt 5615 4125 L
+5615 4125 mt 5613 4097 L
+5613 4097 mt 5609 4070 L
+5609 4070 mt 5604 4042 L
+5604 4042 mt 5599 4025 L
+5599 4025 mt 5596 4015 L
+5596 4015 mt 5587 3987 L
+5587 3987 mt 5576 3960 L
+5576 3960 mt 5564 3935 L
+5564 3935 mt 5563 3932 L
+5563 3932 mt 5548 3905 L
+5548 3905 mt 5530 3877 L
+5530 3877 mt 5529 3876 L
+5529 3876 mt 5510 3850 L
+5510 3850 mt 5494 3831 L
+5494 3831 mt 5486 3822 L
+5486 3822 mt 5459 3795 L
+5459 3795 mt 5459 3795 L
+5459 3795 mt 5428 3767 L
+5428 3767 mt 5425 3764 L
+5425 3764 mt 5393 3740 L
+5393 3740 mt 5390 3737 L
+5390 3737 mt 5357 3712 L
+5357 3712 mt 5355 3710 L
+5355 3710 mt 5322 3685 L
+5322 3685 mt 5320 3683 L
+5320 3683 mt 5287 3657 L
+5287 3657 mt 5285 3656 L
+5285 3656 mt 5250 3631 L
+5250 3631 mt 5248 3630 L
+5248 3630 mt 5215 3607 L
+5215 3607 mt 5207 3602 L
+5207 3602 mt 5181 3585 L
+5181 3585 mt 5163 3575 L
+5163 3575 mt 5146 3563 L
+5146 3563 mt 5121 3547 L
+5121 3547 mt 5111 3540 L
+5111 3540 mt 5082 3519 L
+5082 3519 mt 5076 3514 L
+5076 3514 mt 5049 3492 L
+5049 3492 mt 5041 3485 L
+5041 3485 mt 5021 3464 L
+5021 3464 mt 5006 3450 L
+5006 3450 mt 4993 3437 L
+4993 3437 mt 4971 3416 L
+4971 3416 mt 4965 3409 L
+4965 3409 mt 4936 3384 L
+4936 3384 mt 4934 3382 L
+4934 3382 mt 4905 3354 L
+4905 3354 mt 4902 3351 L
+4902 3351 mt 4878 3327 L
+4878 3327 mt 4867 3315 L
+4867 3315 mt 4852 3299 L
+4852 3299 mt 4832 3278 L
+4832 3278 mt 4826 3272 L
+4826 3272 mt 4798 3244 L
+4798 3244 mt 4797 3243 L
+4797 3243 mt 4770 3217 L
+4770 3217 mt 4762 3210 L
+4762 3210 mt 4742 3189 L
+4742 3189 mt 4727 3173 L
+4727 3173 mt 4718 3162 L
+4718 3162 mt 4701 3134 L
+4701 3134 mt 4692 3120 L
+4692 3120 mt 4686 3107 L
+4686 3107 mt 4669 3079 L
+4669 3079 mt 4657 3065 L
+4657 3065 mt 4646 3052 L
+4646 3052 mt 4623 3030 L
+4623 3030 mt 4615 3024 L
+4615 3024 mt 4588 3004 L
+4588 3004 mt 4577 2997 L
+4577 2997 mt 4553 2981 L
+4553 2981 mt 4534 2969 L
+4534 2969 mt 4518 2959 L
+4518 2959 mt 4492 2942 L
+4492 2942 mt 4483 2936 L
+4483 2936 mt 4453 2914 L
+4453 2914 mt 4448 2911 L
+4448 2911 mt 4416 2887 L
+4416 2887 mt 4413 2885 L
+4413 2885 mt 4379 2860 L
+4379 2860 mt 4378 2859 L
+4378 2859 mt 4344 2836 L
+4344 2836 mt 4336 2832 L
+4336 2832 mt 4309 2815 L
+4309 2815 mt 4291 2804 L
+4291 2804 mt 4274 2793 L
+4274 2793 mt 4246 2777 L
+4246 2777 mt 4239 2772 L
+4239 2772 mt 4204 2750 L
+4204 2750 mt 4202 2749 L
+4202 2749 mt 4169 2727 L
+4169 2727 mt 4161 2722 L
+4161 2722 mt 4134 2703 L
+4134 2703 mt 4119 2694 L
+4119 2694 mt 4100 2681 L
+4100 2681 mt 4071 2667 L
+4071 2667 mt 4065 2663 L
+4065 2663 mt 4030 2650 L
+4030 2650 mt 3995 2644 L
+3995 2644 mt 3960 2645 L
+3960 2645 mt 3925 2658 L
+3925 2658 mt 3911 2667 L
+3911 2667 mt 3890 2680 L
+3890 2680 mt 3873 2694 L
+3873 2694 mt 3855 2708 L
+3855 2708 mt 3838 2722 L
+3838 2722 mt 3821 2735 L
+3821 2735 mt 3799 2749 L
+3799 2749 mt 3786 2759 L
+3786 2759 mt 3755 2777 L
+3755 2777 mt 3751 2779 L
+3751 2779 mt 3716 2797 L
+3716 2797 mt 3700 2804 L
+3700 2804 mt 3681 2813 L
+3681 2813 mt 3646 2827 L
+3646 2827 mt 3632 2832 L
+3632 2832 mt 3611 2839 L
+3611 2839 mt 3577 2851 L
+3577 2851 mt 3550 2859 L
+3550 2859 mt 3542 2862 L
+3542 2862 mt 3507 2874 L
+3507 2874 mt 3472 2885 L
+3472 2885 mt 3468 2887 L
+3468 2887 mt 3437 2898 L
+3437 2898 mt 3402 2912 L
+3402 2912 mt 3396 2914 L
+3396 2914 mt 3367 2926 L
+3367 2926 mt 3332 2940 L
+3332 2940 mt 3328 2942 L
+3328 2942 mt 3298 2955 L
+3298 2955 mt 3267 2969 L
+3267 2969 mt 3263 2972 L
+3263 2972 mt 3228 2989 L
+3228 2989 mt 3211 2997 L
+3211 2997 mt 3193 3008 L
+3193 3008 mt 3167 3024 L
+3167 3024 mt 3158 3033 L
+3158 3033 mt 3143 3052 L
+3143 3052 mt 3132 3079 L
+3132 3079 mt 3144 3107 L
+3144 3107 mt 3158 3122 L
+3158 3122 mt 3169 3134 L
+3169 3134 mt 3193 3155 L
+3193 3155 mt 3200 3162 L
+3200 3162 mt 3228 3184 L
+3228 3184 mt 3233 3189 L
+3233 3189 mt 3263 3212 L
+3263 3212 mt 3268 3217 L
+3268 3217 mt 3298 3240 L
+3298 3240 mt 3303 3244 L
+3303 3244 mt 3332 3266 L
+3332 3266 mt 3340 3272 L
+3340 3272 mt 3367 3292 L
+3367 3292 mt 3378 3299 L
+3378 3299 mt 3402 3318 L
+3402 3318 mt 3412 3327 L
+3412 3327 mt 3437 3349 L
+3437 3349 mt 3442 3354 L
+3442 3354 mt 3468 3382 L
+3468 3382 mt 3472 3386 L
+3472 3386 mt 3494 3409 L
+3494 3409 mt 3507 3424 L
+3507 3424 mt 3519 3437 L
+3519 3437 mt 3542 3462 L
+3542 3462 mt 3544 3464 L
+3544 3464 mt 3569 3492 L
+3569 3492 mt 3577 3501 L
+3577 3501 mt 3593 3519 L
+3593 3519 mt 3611 3542 L
+3611 3542 mt 3616 3547 L
+3616 3547 mt 3640 3575 L
+3640 3575 mt 3646 3582 L
+3646 3582 mt 3665 3602 L
+3665 3602 mt 3681 3621 L
+3681 3621 mt 3689 3630 L
+3689 3630 mt 3709 3657 L
+3709 3657 mt 3716 3670 L
+3716 3670 mt 3724 3685 L
+3724 3685 mt 3733 3712 L
+3733 3712 mt 3738 3740 L
+3738 3740 mt 3737 3767 L
+3737 3767 mt 3730 3795 L
+3730 3795 mt 3717 3822 L
+3717 3822 mt 3716 3824 L
+3716 3824 mt 3697 3850 L
+3697 3850 mt 3681 3872 L
+3681 3872 mt 3677 3877 L
+3677 3877 mt 3657 3905 L
+3657 3905 mt 3646 3922 L
+3646 3922 mt 3640 3932 L
+3640 3932 mt 3629 3960 L
+3629 3960 mt 3635 3987 L
+3635 3987 mt 3646 3999 L
+3646 3999 mt 3661 4015 L
+3661 4015 mt 3681 4031 L
+3681 4031 mt 3694 4042 L
+3694 4042 mt 3716 4064 L
+3716 4064 mt 3721 4070 L
+3721 4070 mt 3740 4097 L
+3740 4097 mt 3751 4122 L
+3751 4122 mt 3752 4125 L
+3752 4125 mt 3760 4152 L
+3760 4152 mt 3765 4180 L
+3765 4180 mt 3763 4207 L
+3763 4207 mt 3754 4235 L
+3754 4235 mt 3751 4238 L
+3751 4238 mt 3730 4262 L
+3730 4262 mt 3716 4273 L
+3716 4273 mt 3690 4290 L
+3690 4290 mt 3681 4296 L
+3681 4296 mt 3650 4317 L
+3650 4317 mt 3646 4326 L
+3646 4326 mt 3636 4345 L
+3636 4345 mt 3646 4359 L
+3646 4359 mt 3654 4372 L
+3654 4372 mt 3681 4392 L
+3681 4392 mt 3691 4400 L
+3691 4400 mt 3716 4422 L
+3716 4422 mt 3722 4427 L
+3722 4427 mt 3743 4455 L
+3743 4455 mt 3751 4471 L
+3751 4471 mt 3757 4482 L
+3757 4482 mt 3767 4510 L
+3767 4510 mt 3774 4537 L
+3774 4537 mt 3777 4565 L
+3777 4565 mt 3779 4592 L
+3779 4592 mt 3775 4620 L
+3775 4620 mt 3764 4648 L
+3764 4648 mt 3751 4673 L
+3751 4673 mt 3750 4675 L
+3750 4675 mt 3732 4703 L
+3732 4703 mt 3716 4725 L
+3716 4725 mt 3713 4730 L
+3713 4730 mt 3690 4758 L
+3690 4758 mt 3681 4768 L
+3681 4768 mt 3666 4785 L
+3666 4785 mt 3646 4805 L
+3646 4805 mt 3638 4813 L
+3638 4813 mt 3611 4837 L
+3611 4837 mt 3608 4840 L
+3608 4840 mt 3577 4865 L
+3577 4865 mt 3574 4868 L
+3574 4868 mt 3542 4891 L
+3542 4891 mt 3536 4895 L
+3536 4895 mt 3507 4915 L
+3507 4915 mt 3494 4923 L
+3494 4923 mt 3472 4936 L
+3472 4936 mt 3447 4950 L
+3447 4950 mt 3437 4956 L
+3437 4956 mt 3402 4974 L
+3402 4974 mt 3394 4978 L
+3394 4978 mt 3367 4991 L
+3367 4991 mt 3335 5005 L
+3335 5005 mt 3332 5006 L
+3332 5006 mt 3298 5021 L
+3298 5021 mt 3269 5033 L
+3269 5033 mt 3263 5035 L
+3263 5035 mt 3228 5048 L
+3228 5048 mt 3195 5060 L
+3195 5060 mt 3193 5061 L
+3193 5061 mt 3158 5073 L
+3158 5073 mt 3123 5084 L
+3123 5084 mt 3109 5088 L
+3109 5088 mt 3088 5094 L
+3088 5094 mt 3053 5103 L
+3053 5103 mt 3019 5111 L
+3019 5111 mt 3001 5115 L
+3001 5115 mt 2984 5119 L
+2984 5119 mt 2949 5126 L
+2949 5126 mt 2914 5132 L
+2914 5132 mt 2879 5137 L
+2879 5137 mt 2844 5142 L
+2844 5142 mt 2837 5143 L
+2837 5143 mt 2809 5146 L
+2809 5146 mt 2774 5150 L
+2774 5150 mt 2740 5153 L
+2740 5153 mt 2705 5155 L
+2705 5155 mt 2670 5157 L
+2670 5157 mt 2635 5158 L
+2635 5158 mt 2600 5159 L
+2600 5159 mt 2565 5159 L
+2565 5159 mt 2530 5159 L
+2530 5159 mt 2496 5158 L
+2496 5158 mt 2461 5157 L
+2461 5157 mt 2426 5155 L
+2426 5155 mt 2391 5153 L
+2391 5153 mt 2356 5150 L
+2356 5150 mt 2321 5147 L
+2321 5147 mt 2287 5143 L
+2287 5143 mt 2286 5143 L
+2286 5143 mt 2251 5138 L
+2251 5138 mt 2217 5133 L
+2217 5133 mt 2182 5128 L
+2182 5128 mt 2147 5122 L
+2147 5122 mt 2114 5115 L
+2114 5115 mt 2112 5115 L
+2112 5115 mt 2077 5107 L
+2077 5107 mt 2042 5099 L
+2042 5099 mt 2007 5091 L
+2007 5091 mt 1996 5088 L
+1996 5088 mt 1972 5081 L
+1972 5081 mt 1938 5072 L
+1938 5072 mt 1903 5061 L
+1903 5061 mt 1901 5060 L
+1901 5060 mt 1868 5050 L
+1868 5050 mt 1833 5038 L
+1833 5038 mt 1819 5033 L
+1819 5033 mt 1798 5025 L
+1798 5025 mt 1763 5011 L
+1763 5011 mt 1749 5005 L
+1749 5005 mt 1728 4997 L
+1728 4997 mt 1694 4980 L
+1694 4980 mt 1688 4978 L
+1688 4978 mt 1659 4963 L
+1659 4963 mt 1636 4950 L
+1636 4950 mt 1624 4943 L
+1624 4943 mt 1589 4923 L
+1589 4923 mt 1589 4922 L
+1589 4922 mt 1554 4899 L
+1554 4899 mt 1548 4895 L
+1548 4895 mt 1519 4874 L
+1519 4874 mt 1511 4868 L
+1511 4868 mt 1484 4846 L
+1484 4846 mt 1477 4840 L
+1477 4840 mt 1449 4816 L
+1449 4816 mt 1446 4813 L
+1446 4813 mt 1418 4785 L
+1418 4785 mt 1415 4781 L
+1415 4781 mt 1393 4758 L
+1393 4758 mt 1380 4742 L
+1380 4742 mt 1369 4730 L
+1369 4730 mt 1348 4703 L
+1348 4703 mt 1345 4698 L
+1345 4698 mt 1328 4675 L
+1328 4675 mt 1310 4649 L
+1310 4649 mt 1309 4648 L
+1309 4648 mt 1291 4620 L
+1291 4620 mt 1275 4594 L
+1275 4594 mt 1274 4592 L
+1274 4592 mt 1258 4565 L
+1258 4565 mt 1243 4537 L
+1243 4537 mt 1240 4532 L
+1240 4532 mt 1228 4510 L
+1228 4510 mt 1214 4482 L
+1214 4482 mt 1205 4465 L
+1205 4465 mt 1200 4455 L
+1200 4455 mt 1188 4427 L
+1188 4427 mt 1176 4400 L
+1176 4400 mt 1170 4387 L
+1170 4387 mt 1164 4372 L
+1164 4372 mt 1154 4345 L
+1154 4345 mt 1144 4317 L
+1144 4317 mt 1136 4290 L
+1136 4290 mt 1136 4290 L
+1136 4290 mt 1127 4262 L
+1127 4262 mt 1120 4235 L
+1120 4235 mt 1114 4207 L
+1114 4207 mt 1108 4180 L
+1108 4180 mt 1102 4152 L
+1102 4152 mt 1101 4145 L
+1101 4145 mt 1097 4125 L
+1097 4125 mt 1092 4097 L
+1092 4097 mt 1087 4070 L
+1087 4070 mt 1083 4042 L
+1083 4042 mt 1078 4015 L
+1078 4015 mt 1074 3987 L
+1074 3987 mt 1069 3960 L
+1069 3960 mt 1066 3939 L
+1066 3939 mt 1065 3932 L
+1065 3932 mt 1060 3905 L
+1060 3905 mt 1055 3877 L
+1055 3877 mt 1048 3850 L
+1048 3850 mt 1041 3822 L
+1041 3822 mt 1033 3795 L
+1033 3795 mt 1031 3788 L
+1031 3788 mt 1024 3767 L
+1024 3767 mt 1012 3740 L
+1012 3740 mt 999 3712 L
+ 999 3712 mt 996 3706 L
+ 996 3706 mt 984 3685 L
+ 984 3685 mt 967 3657 L
+ 967 3657 mt 961 3650 L
+ 961 3650 mt 947 3630 L
+ 947 3630 mt 926 3605 L
+ 926 3605 mt 924 3602 L
+ 924 3602 mt 899 3575 L
+ 899 3575 mt 892 3568 L
+ 892 3568 mt 870 3547 L
+ 870 3547 mt 857 3535 L
+ 857 3535 mt 840 3519 L
+ 840 3519 mt 822 3504 L
+ 822 3504 mt 807 3492 L
+ 807 3492 mt 787 3476 L
+ 787 3476 mt 773 3464 L
+ 773 3464 mt 752 3448 L
+ 752 3448 mt 738 3437 L
+ 738 3437 mt 717 3421 L
+ 717 3421 mt 703 3409 L
+ 703 3409 mt 682 3394 L
+ 682 3394 mt 667 3382 L
+ 667 3382 mt 647 3367 L
+ 647 3367 mt 631 3354 L
+ 631 3354 mt 613 3341 L
+ 613 3341 mt 595 3327 L
+ 595 3327 mt 578 3314 L
+ 578 3314 mt 559 3299 L
+ 559 3299 mt 543 3287 L
+ 543 3287 mt 523 3272 L
+ 523 3272 mt 508 3260 L
+ 508 3260 mt 488 3244 L
+ 488 3244 mt 473 3233 L
+ 473 3233 mt 453 3217 L
+ 453 3217 mt 438 3205 L
+ 438 3205 mt 418 3189 L
+ 418 3189 mt 403 3177 L
+ 403 3177 mt 385 3162 L
+ 385 3162 mt 368 3147 L
+ 368 3147 mt 353 3134 L
+ 353 3134 mt 334 3116 L
+ 334 3116 mt 323 3107 L
+ 323 3107 mt 299 3084 L
+ 299 3084 mt 294 3079 L
+ 294 3079 mt 266 3052 L
+ 266 3052 mt 264 3050 L
+ 264 3050 mt 239 3024 L
+ 239 3024 mt 229 3013 L
+ 229 3013 mt 214 2997 L
+ 214 2997 mt 194 2975 L
+ 194 2975 mt 189 2969 L
+ 189 2969 mt 166 2942 L
+ 166 2942 mt 159 2934 L
+ 159 2934 mt 143 2914 L
+ 143 2914 mt 124 2890 L
+ 124 2890 mt 122 2887 L
+ 122 2887 mt 101 2859 L
+ 101 2859 mt 90 2843 L
+ 90 2843 mt 81 2832 L
+ 81 2832 mt 62 2804 L
+ 62 2804 mt 55 2793 L
+ 55 2793 mt 44 2777 L
+ 44 2777 mt 27 2749 L
+ 27 2749 mt 20 2737 L
+ 20 2737 mt 11 2722 L
+ 11 2722 mt -3 2694 L
+ -3 2694 mt -14 2672 L
+ -14 2672 mt -17 2667 L
+ -17 2667 mt -30 2639 L
+ -30 2639 mt -42 2612 L
+ -42 2612 mt -49 2593 L
+ -49 2593 mt -53 2584 L
+ -53 2584 mt -62 2557 L
+ -62 2557 mt -71 2529 L
+ -71 2529 mt -79 2502 L
+ -79 2502 mt -84 2480 L
+ -84 2480 mt -85 2474 L
+ -85 2474 mt -91 2446 L
+ -91 2446 mt -96 2419 L
+ -96 2419 mt -100 2391 L
+-100 2391 mt -104 2364 L
+-104 2364 mt -106 2336 L
+-106 2336 mt -107 2309 L
+-107 2309 mt -108 2281 L
+-108 2281 mt -108 2254 L
+-108 2254 mt -107 2226 L
+-107 2226 mt -106 2199 L
+-106 2199 mt -104 2171 L
+-104 2171 mt -101 2144 L
+-101 2144 mt -97 2116 L
+ -97 2116 mt -93 2089 L
+ -93 2089 mt -88 2061 L
+ -88 2061 mt -84 2038 L
+ -84 2038 mt -83 2034 L
+ -83 2034 mt -77 2006 L
+ -77 2006 mt -71 1979 L
+ -71 1979 mt -64 1951 L
+ -64 1951 mt -56 1924 L
+ -56 1924 mt -49 1900 L
+ -49 1900 mt -48 1896 L
+ -48 1896 mt -40 1869 L
+ -40 1869 mt -31 1841 L
+ -31 1841 mt -22 1814 L
+ -22 1814 mt -14 1789 L
+ -14 1789 mt -13 1786 L
+ -13 1786 mt -4 1759 L
+ -4 1759 mt 3 1731 L
+ 3 1731 mt 12 1704 L
+ 12 1704 mt 20 1682 L
+ 20 1682 mt 22 1676 L
+ 22 1676 mt 31 1649 L
+ 31 1649 mt 40 1621 L
+ 40 1621 mt 49 1594 L
+ 49 1594 mt 55 1576 L
+ 55 1576 mt 58 1566 L
+ 58 1566 mt 67 1539 L
+ 67 1539 mt 75 1511 L
+ 75 1511 mt 84 1484 L
+ 84 1484 mt 90 1467 L
+ 90 1467 mt 93 1456 L
+ 93 1456 mt 102 1428 L
+ 102 1428 mt 110 1401 L
+ 110 1401 mt 119 1373 L
+ 119 1373 mt 124 1356 L
+ 124 1356 mt 127 1346 L
+ 127 1346 mt 136 1318 L
+ 136 1318 mt 144 1291 L
+ 144 1291 mt 153 1263 L
+ 153 1263 mt 159 1244 L
+ 159 1244 mt 162 1236 L
+ 162 1236 mt 171 1208 L
+ 171 1208 mt 180 1181 L
+ 180 1181 mt 189 1153 L
+ 189 1153 mt 194 1140 L
+ 194 1140 mt 199 1126 L
+ 199 1126 mt 209 1098 L
+ 209 1098 mt 220 1071 L
+ 220 1071 mt 229 1049 L
+ 229 1049 mt 231 1043 L
+ 231 1043 mt 243 1016 L
+ 243 1016 mt 256 988 L
+ 256 988 mt 264 971 L
+ 264 971 mt 269 961 L
+ 269 961 mt 282 933 L
+ 282 933 mt 297 906 L
+ 297 906 mt 299 902 L
+ 299 902 mt 311 878 L
+ 311 878 mt 326 851 L
+ 326 851 mt 334 838 L
+ 334 838 mt 342 823 L
+ 342 823 mt 358 796 L
+ 358 796 mt 368 779 L
+ 368 779 mt 375 768 L
+ 375 768 mt 393 741 L
+ 393 741 mt 403 724 L
+ 403 724 mt 411 713 L
+ 411 713 mt 429 686 L
+ 429 686 mt 438 673 L
+ 438 673 mt 449 658 L
+ 449 658 mt 469 631 L
+ 469 631 mt 473 625 L
+ 473 625 mt 489 603 L
+ 489 603 mt 508 579 L
+ 508 579 mt 511 576 L
+ 511 576 mt 532 548 L
+ 532 548 mt 543 535 L
+ 543 535 mt 555 521 L
+ 555 521 mt 577 493 L
+ 577 493 mt 578 493 L
+ 578 493 mt 601 466 L
+ 601 466 mt 613 452 L
+ 613 452 mt 625 438 L
+ 625 438 mt 647 414 L
+ 647 414 mt 651 411 L
+ 651 411 mt 678 383 L
+ 678 383 mt 682 378 L
+ 682 378 mt 706 355 L
+ 706 355 mt 717 345 L
+ 717 345 mt 736 328 L
+ 736 328 mt 752 315 L
+ 752 315 mt 769 300 L
+ 769 300 mt 787 286 L
+ 787 286 mt 804 273 L
+ 804 273 mt 822 260 L
+ 822 260 mt 842 245 L
+ 842 245 mt 857 235 L
+ 857 235 mt 883 218 L
+ 883 218 mt 892 212 L
+ 892 212 mt 926 190 L
+ 926 190 mt 926 190 L
+ 926 190 mt 961 170 L
+ 961 170 mt 973 163 L
+ 973 163 mt 996 150 L
+ 996 150 mt 1023 135 L
+1023 135 mt 1031 131 L
+1031 131 mt 1066 114 L
+1066 114 mt 1078 108 L
+1078 108 mt 1101 97 L
+1101 97 mt 1136 81 L
+1136 81 mt 1138 80 L
+1138 80 mt 1170 66 L
+1170 66 mt 1203 53 L
+1203 53 mt 1205 52 L
+1205 52 mt 1240 38 L
+1240 38 mt 1275 25 L
+1275 25 mt 1275 25 L
+1275 25 mt 1310 12 L
+1310 12 mt 1345 0 L
+1345 0 mt 1353 -1 L
+1353 -1 mt 1380 -10 L
+1380 -10 mt 1415 -21 L
+1415 -21 mt 1438 -29 L
+1438 -29 mt 1449 -32 L
+1449 -32 mt 1484 -43 L
+1484 -43 mt 1519 -53 L
+1519 -53 mt 1532 -56 L
+1532 -56 mt 1554 -63 L
+1554 -63 mt 1589 -72 L
+1589 -72 mt 1624 -81 L
+1624 -81 mt 1634 -84 L
+1634 -84 mt 1659 -90 L
+1659 -90 mt 1694 -99 L
+1694 -99 mt 1728 -107 L
+1728 -107 mt 1746 -111 L
+1746 -111 mt 1763 -115 L
+1763 -115 mt 1798 -124 L
+1798 -124 mt 1833 -132 L
+1833 -132 mt 1865 -139 L
+1865 -139 mt 1868 -139 L
+1868 -139 mt 1903 -147 L
+1903 -147 mt 1938 -155 L
+1938 -155 mt 1972 -163 L
+1972 -163 mt 1990 -166 L
+1990 -166 mt 2007 -170 L
+2007 -170 mt 2042 -178 L
+2042 -178 mt 2077 -185 L
+2077 -185 mt 2112 -192 L
+2112 -192 mt 2120 -194 L
+2120 -194 mt 2147 -199 L
+2147 -199 mt 2182 -207 L
+2182 -207 mt 2217 -214 L
+2217 -214 mt 2249 -221 L
+2249 -221 mt 2251 -222 L
+2251 -222 mt 2286 -230 L
+2286 -230 mt 2321 -237 L
+2321 -237 mt 2356 -245 L
+2356 -245 mt 2374 -249 L
+2374 -249 mt 2391 -253 L
+2391 -253 mt 2426 -260 L
+2426 -260 mt 2461 -268 L
+2461 -268 mt 2496 -275 L
+2496 -275 mt 2502 -276 L
+2502 -276 mt 2530 -282 L
+2530 -282 mt 2565 -290 L
+2565 -290 mt 2600 -297 L
+2600 -297 mt 2634 -304 L
+2634 -304 mt 2635 -304 L
+2635 -304 mt 2670 -311 L
+2670 -311 mt 2705 -319 L
+2705 -319 mt 2740 -326 L
+2740 -326 mt 2767 -331 L
+2767 -331 mt 2774 -333 L
+2774 -333 mt 2809 -340 L
+2809 -340 mt 2844 -347 L
+2844 -347 mt 2879 -354 L
+2879 -354 mt 2903 -359 L
+2903 -359 mt 2914 -361 L
+2914 -361 mt 2949 -368 L
+2949 -368 mt 2984 -375 L
+2984 -375 mt 3019 -382 L
+3019 -382 mt 3042 -386 L
+3042 -386 mt 3053 -389 L
+3053 -389 mt 3088 -395 L
+3088 -395 mt 3123 -401 L
+3123 -401 mt 3158 -407 L
+3158 -407 mt 3193 -413 L
+3193 -413 mt 3198 -414 L
+3198 -414 mt 3228 -419 L
+3228 -419 mt 3263 -424 L
+3263 -424 mt 3298 -429 L
+3298 -429 mt 3332 -433 L
+3332 -433 mt 3367 -437 L
+3367 -437 mt 3402 -441 L
+3402 -441 mt 3405 -441 L
+3405 -441 mt 3437 -445 L
+3437 -445 mt 3472 -448 L
+3472 -448 mt 3507 -451 L
+3507 -451 mt 3542 -454 L
+3542 -454 mt 3577 -457 L
+3577 -457 mt 3611 -459 L
+3611 -459 mt 3646 -461 L
+3646 -461 mt 3681 -462 L
+3681 -462 mt 3716 -463 L
+3716 -463 mt 3751 -464 L
+3751 -464 mt 3786 -464 L
+3786 -464 mt 3821 -463 L
+3821 -463 mt 3855 -462 L
+3855 -462 mt 3890 -461 L
+3890 -461 mt 3925 -460 L
+3925 -460 mt 3960 -459 L
+3960 -459 mt 3995 -457 L
+3995 -457 mt 4030 -455 L
+4030 -455 mt 4065 -453 L
+4065 -453 mt 4100 -450 L
+4100 -450 mt 4134 -448 L
+4134 -448 mt 4169 -445 L
+4169 -445 mt 4204 -442 L
+4204 -442 mt 4209 -441 L
+4209 -441 mt 4239 -438 L
+4239 -438 mt 4274 -435 L
+4274 -435 mt 4309 -431 L
+4309 -431 mt 4344 -426 L
+4344 -426 mt 4379 -422 L
+4379 -422 mt 4413 -417 L
+4413 -417 mt 4432 -414 L
+4432 -414 mt 4448 -411 L
+4448 -411 mt 4483 -406 L
+4483 -406 mt 4518 -400 L
+4518 -400 mt 4553 -394 L
+4553 -394 mt 4588 -387 L
+4588 -387 mt 4590 -386 L
+4590 -386 mt 4623 -380 L
+4623 -380 mt 4657 -372 L
+4657 -372 mt 4692 -364 L
+4692 -364 mt 4714 -359 L
+4714 -359 mt 4727 -356 L
+4727 -356 mt 4762 -347 L
+4762 -347 mt 4797 -338 L
+4797 -338 mt 4820 -331 L
+4820 -331 mt 4832 -328 L
+4832 -328 mt 4867 -318 L
+4867 -318 mt 4902 -308 L
+4902 -308 mt 4913 -304 L
+4913 -304 mt 4936 -297 L
+4936 -297 mt 4971 -286 L
+4971 -286 mt 4999 -276 L
+4999 -276 mt 5006 -274 L
+5006 -274 mt 5041 -262 L
+5041 -262 mt 5076 -250 L
+5076 -250 mt 5080 -249 L
+5080 -249 mt 5111 -238 L
+5111 -238 mt 5146 -225 L
+5146 -225 mt 5156 -221 L
+5156 -221 mt 5181 -212 L
+5181 -212 mt 5215 -199 L
+5215 -199 mt 5228 -194 L
+5228 -194 mt 5250 -185 L
+5250 -185 mt 5285 -171 L
+5285 -171 mt 5296 -166 L
+5296 -166 mt 5320 -156 L
+5320 -156 mt 5355 -141 L
+5355 -141 mt 5359 -139 L
+5359 -139 mt 5390 -125 L
+5390 -125 mt 5419 -111 L
+5419 -111 mt 5425 -109 L
+5425 -109 mt 5459 -92 L
+5459 -92 mt 5476 -84 L
+5476 -84 mt 5494 -74 L
+5494 -74 mt 5529 -56 L
+5529 -56 mt 5529 -56 L
+5529 -56 mt 5564 -37 L
+5564 -37 mt 5579 -29 L
+5579 -29 mt 5599 -17 L
+5599 -17 mt 5627 -1 L
+5627 -1 mt 5634 2 L
+5634 2 mt 5669 24 L
+5669 24 mt 5671 25 L
+5671 25 mt 5704 46 L
+5704 46 mt 5714 53 L
+5714 53 mt 5738 69 L
+5738 69 mt 5755 80 L
+5755 80 mt 5773 93 L
+5773 93 mt 5794 108 L
+5794 108 mt 5808 118 L
+5808 118 mt 5831 135 L
+5831 135 mt 5843 144 L
+5843 144 mt 5867 163 L
+5867 163 mt 5878 171 L
+5878 171 mt 5902 190 L
+5902 190 mt 5913 199 L
+5913 199 mt 5936 218 L
+5936 218 mt 5948 228 L
+5948 228 mt 5968 245 L
+5968 245 mt 5983 258 L
+5983 258 mt 6000 273 L
+6000 273 mt 6017 288 L
+6017 288 mt 6031 300 L
+6031 300 mt 6052 319 L
+6052 319 mt 6062 328 L
+6062 328 mt 6087 351 L
+6087 351 mt 6092 355 L
+6092 355 mt 6121 383 L
+6121 383 mt 6122 384 L
+6122 384 mt 6150 411 L
+6150 411 mt 6157 417 L
+6157 417 mt 6179 438 L
+6179 438 mt 6192 450 L
+6192 450 mt 6208 466 L
+6208 466 mt 6227 483 L
+6227 483 mt 6237 493 L
+6237 493 mt 6261 516 L
+6261 516 mt 6266 521 L
+6266 521 mt 6295 548 L
+6295 548 mt 6296 549 L
+6296 549 mt 6324 576 L
+6324 576 mt 6331 583 L
+6331 583 mt 6353 603 L
+6353 603 mt 6366 616 L
+6366 616 mt 6382 631 L
+6382 631 mt 6401 649 L
+6401 649 mt 6410 658 L
+6410 658 mt 6436 682 L
+6436 682 mt 6439 686 L
+6439 686 mt 6468 713 L
+6468 713 mt 6471 715 L
+6471 715 mt 6497 741 L
+6497 741 mt 6506 749 L
+6506 749 mt 6526 768 L
+6526 768 mt 6540 782 L
+6540 782 mt 6554 796 L
+6554 796 mt 6575 816 L
+6575 816 mt 6583 823 L
+6583 823 mt 6610 850 L
+6610 850 mt 6611 851 L
+6611 851 mt 6639 878 L
+6639 878 mt 6645 884 L
+6645 884 mt 6667 906 L
+6667 906 mt 6680 919 L
+6680 919 mt 6694 933 L
+6694 933 mt 6715 955 L
+6715 955 mt 6721 961 L
+6721 961 mt 6747 988 L
+6747 988 mt 6750 991 L
+6750 991 mt 6773 1016 L
+6773 1016 mt 6785 1028 L
+6785 1028 mt 6799 1043 L
+6799 1043 mt 6819 1066 L
+6819 1066 mt 6824 1071 L
+6824 1071 mt 6849 1098 L
+6849 1098 mt 6854 1104 L
+6854 1104 mt 6873 1126 L
+6873 1126 mt 6889 1144 L
+6889 1144 mt 6897 1153 L
+6897 1153 mt 6921 1181 L
+6921 1181 mt 6924 1185 L
+6924 1185 mt 6944 1208 L
+6944 1208 mt 6959 1226 L
+6959 1226 mt 6967 1236 L
+6967 1236 mt 6990 1263 L
+6990 1263 mt 6994 1269 L
+6994 1269 mt 7012 1291 L
+7012 1291 mt 7029 1313 L
+7029 1313 mt 7033 1318 L
+7033 1318 mt 7055 1346 L
+7055 1346 mt 7063 1357 L
+7063 1357 mt 7076 1373 L
+7076 1373 mt 7097 1401 L
+7097 1401 mt 7098 1403 L
+7098 1403 mt 7117 1428 L
+7117 1428 mt 7133 1451 L
+7133 1451 mt 7137 1456 L
+7137 1456 mt 7157 1484 L
+7157 1484 mt 7168 1500 L
+7168 1500 mt 7176 1511 L
+7176 1511 mt 7195 1539 L
+7195 1539 mt 7203 1552 L
+7203 1552 mt 7213 1566 L
+7213 1566 mt 7230 1594 L
+7230 1594 mt 7238 1607 L
+7238 1607 mt 7247 1621 L
+7247 1621 mt 7263 1649 L
+7263 1649 mt 7273 1667 L
+7273 1667 mt 7278 1676 L
+7278 1676 mt 7293 1704 L
+7293 1704 mt 7306 1731 L
+7306 1731 mt 7308 1734 L
+7308 1734 mt 7319 1759 L
+7319 1759 mt 7331 1786 L
+7331 1786 mt 7342 1814 L
+7342 1814 mt 7342 1814 L
+7342 1814 mt 7353 1841 L
+7353 1841 mt 7363 1869 L
+7363 1869 mt 7372 1896 L
+7372 1896 mt 7377 1916 L
+7308 1976 mt 7308 1979 L
+7308 1979 mt 7312 2006 L
+7312 2006 mt 7316 2034 L
+7316 2034 mt 7318 2061 L
+7318 2061 mt 7320 2089 L
+7320 2089 mt 7321 2116 L
+7321 2116 mt 7321 2144 L
+7321 2144 mt 7320 2171 L
+7320 2171 mt 7319 2199 L
+7319 2199 mt 7317 2226 L
+7317 2226 mt 7315 2254 L
+7315 2254 mt 7312 2281 L
+7312 2281 mt 7309 2309 L
+7309 2309 mt 7308 2320 L
+7308 2320 mt 7306 2336 L
+7306 2336 mt 7302 2364 L
+7302 2364 mt 7298 2391 L
+7298 2391 mt 7294 2419 L
+7294 2419 mt 7289 2446 L
+7289 2446 mt 7284 2474 L
+7284 2474 mt 7278 2502 L
+7278 2502 mt 7273 2529 L
+7273 2529 mt 7273 2529 L
+7273 2529 mt 7266 2557 L
+7266 2557 mt 7260 2584 L
+7260 2584 mt 7253 2612 L
+7253 2612 mt 7245 2639 L
+7245 2639 mt 7238 2666 L
+7238 2666 mt 7238 2667 L
+7238 2667 mt 7229 2694 L
+7229 2694 mt 7221 2722 L
+7221 2722 mt 7212 2749 L
+7212 2749 mt 7203 2776 L
+7203 2776 mt 7203 2777 L
+7203 2777 mt 7194 2804 L
+7194 2804 mt 7184 2832 L
+7184 2832 mt 7175 2859 L
+7175 2859 mt 7168 2878 L
+7168 2878 mt 7165 2887 L
+7165 2887 mt 7155 2914 L
+7155 2914 mt 7145 2942 L
+7145 2942 mt 7134 2969 L
+7134 2969 mt 7133 2972 L
+7133 2972 mt 7124 2997 L
+7124 2997 mt 7113 3024 L
+7113 3024 mt 7102 3052 L
+7102 3052 mt 7098 3061 L
+7098 3061 mt 7091 3079 L
+7091 3079 mt 7080 3107 L
+7080 3107 mt 7069 3134 L
+7069 3134 mt 7063 3147 L
+7063 3147 mt 7057 3162 L
+7057 3162 mt 7046 3189 L
+7046 3189 mt 7034 3217 L
+7034 3217 mt 7029 3230 L
+7029 3230 mt 7023 3244 L
+7023 3244 mt 7011 3272 L
+7011 3272 mt 6999 3299 L
+6999 3299 mt 6994 3312 L
+6994 3312 mt 6988 3327 L
+6988 3327 mt 6976 3354 L
+6976 3354 mt 6964 3382 L
+6964 3382 mt 6959 3395 L
+6959 3395 mt 6953 3409 L
+6953 3409 mt 6941 3437 L
+6941 3437 mt 6930 3464 L
+6930 3464 mt 6924 3477 L
+6924 3477 mt 6918 3492 L
+6918 3492 mt 6906 3519 L
+6906 3519 mt 6894 3547 L
+6894 3547 mt 6889 3559 L
+6889 3559 mt 6882 3575 L
+6882 3575 mt 6870 3602 L
+6870 3602 mt 6857 3630 L
+6857 3630 mt 6854 3636 L
+6854 3636 mt 6845 3657 L
+6845 3657 mt 6832 3685 L
+6832 3685 mt 6819 3711 L
+6819 3711 mt 6819 3712 L
+6819 3712 mt 6806 3740 L
+6806 3740 mt 6793 3767 L
+6793 3767 mt 6785 3785 L
+6785 3785 mt 6780 3795 L
+6780 3795 mt 6766 3822 L
+6766 3822 mt 6753 3850 L
+6753 3850 mt 6750 3855 L
+6750 3855 mt 6739 3877 L
+6739 3877 mt 6724 3905 L
+6724 3905 mt 6715 3922 L
+6715 3922 mt 6710 3932 L
+6710 3932 mt 6695 3960 L
+6695 3960 mt 6680 3987 L
+6680 3987 mt 6680 3987 L
+6680 3987 mt 6664 4015 L
+6664 4015 mt 6649 4042 L
+6649 4042 mt 6645 4049 L
+6645 4049 mt 6634 4070 L
+6634 4070 mt 6618 4097 L
+6618 4097 mt 6610 4111 L
+6610 4111 mt 6602 4125 L
+6602 4125 mt 6586 4152 L
+6586 4152 mt 6575 4172 L
+6575 4172 mt 6571 4180 L
+6571 4180 mt 6556 4207 L
+6556 4207 mt 6541 4235 L
+6541 4235 mt 6540 4235 L
+6540 4235 mt 6526 4262 L
+6526 4262 mt 6511 4290 L
+6511 4290 mt 6506 4301 L
+6506 4301 mt 6497 4317 L
+6497 4317 mt 6482 4345 L
+6482 4345 mt 6471 4366 L
+6471 4366 mt 6467 4372 L
+6467 4372 mt 6452 4400 L
+6452 4400 mt 6436 4427 L
+6436 4427 mt 6436 4428 L
+6436 4428 mt 6418 4455 L
+6418 4455 mt 6401 4479 L
+6401 4479 mt 6399 4482 L
+6399 4482 mt 6376 4510 L
+6376 4510 mt 6366 4520 L
+6366 4520 mt 6349 4537 L
+6349 4537 mt 6331 4553 L
+6331 4553 mt 6316 4565 L
+6316 4565 mt 6296 4578 L
+6296 4578 mt 6270 4592 L
+6270 4592 mt 6261 4597 L
+6261 4597 mt 6227 4609 L
+6227 4609 mt 6192 4617 L
+6192 4617 mt 6170 4620 L
+6170 4620 mt 6157 4622 L
+6157 4622 mt 6122 4624 L
+6122 4624 mt 6087 4624 L
+6087 4624 mt 6052 4623 L
+6052 4623 mt 6022 4620 L
+6022 4620 mt 6017 4619 L
+6017 4619 mt 5983 4608 L
+5983 4608 mt 5948 4593 L
+5948 4593 mt 5947 4592 L
+5947 4592 mt 5913 4572 L
+5913 4572 mt 5901 4565 L
+5901 4565 mt 5880 4537 L
+5880 4537 mt 5878 4528 L
+5878 4528 mt 5873 4510 L
+5873 4510 mt 5870 4482 L
+5870 4482 mt 5872 4455 L
+5872 4455 mt 5874 4427 L
+5874 4427 mt 5873 4400 L
+5873 4400 mt 5865 4372 L
+5865 4372 mt 5849 4345 L
+5849 4345 mt 5843 4337 L
+5843 4337 mt 5828 4317 L
+5828 4317 mt 5808 4293 L
+5808 4293 mt 5805 4290 L
+5805 4290 mt 5787 4262 L
+5787 4262 mt 5773 4235 L
+5773 4235 mt 5773 4235 L
+5773 4235 mt 5762 4207 L
+5762 4207 mt 5753 4180 L
+5753 4180 mt 5746 4152 L
+5746 4152 mt 5740 4125 L
+5740 4125 mt 5738 4119 L
+5738 4119 mt 5733 4097 L
+5733 4097 mt 5724 4070 L
+5724 4070 mt 5715 4042 L
+5715 4042 mt 5704 4015 L
+5704 4015 mt 5703 4015 L
+5703 4015 mt 5690 3987 L
+5690 3987 mt 5675 3960 L
+5675 3960 mt 5669 3948 L
+5669 3948 mt 5660 3932 L
+5660 3932 mt 5644 3905 L
+5644 3905 mt 5634 3888 L
+5634 3888 mt 5627 3877 L
+5627 3877 mt 5608 3850 L
+5608 3850 mt 5599 3838 L
+5599 3838 mt 5586 3822 L
+5586 3822 mt 5564 3797 L
+5564 3797 mt 5562 3795 L
+5562 3795 mt 5536 3767 L
+5536 3767 mt 5529 3760 L
+5529 3760 mt 5507 3740 L
+5507 3740 mt 5494 3727 L
+5494 3727 mt 5477 3712 L
+5477 3712 mt 5459 3697 L
+5459 3697 mt 5445 3685 L
+5445 3685 mt 5425 3667 L
+5425 3667 mt 5414 3657 L
+5414 3657 mt 5390 3635 L
+5390 3635 mt 5384 3630 L
+5384 3630 mt 5356 3602 L
+5356 3602 mt 5355 3600 L
+5355 3600 mt 5329 3575 L
+5329 3575 mt 5320 3565 L
+5320 3565 mt 5301 3547 L
+5301 3547 mt 5285 3531 L
+5285 3531 mt 5272 3519 L
+5272 3519 mt 5250 3499 L
+5250 3499 mt 5242 3492 L
+5242 3492 mt 5215 3467 L
+5215 3467 mt 5212 3464 L
+5212 3464 mt 5182 3437 L
+5182 3437 mt 5181 3435 L
+5181 3435 mt 5154 3409 L
+5154 3409 mt 5146 3401 L
+5146 3401 mt 5127 3382 L
+5127 3382 mt 5111 3365 L
+5111 3365 mt 5100 3354 L
+5100 3354 mt 5076 3330 L
+5076 3330 mt 5072 3327 L
+5072 3327 mt 5043 3299 L
+5043 3299 mt 5041 3298 L
+5041 3298 mt 5013 3272 L
+5013 3272 mt 5006 3265 L
+5006 3265 mt 4984 3244 L
+4984 3244 mt 4971 3232 L
+4971 3232 mt 4956 3217 L
+4956 3217 mt 4936 3199 L
+4936 3199 mt 4926 3189 L
+4926 3189 mt 4902 3168 L
+4902 3168 mt 4894 3162 L
+4894 3162 mt 4867 3142 L
+4867 3142 mt 4857 3134 L
+4857 3134 mt 4832 3116 L
+4832 3116 mt 4823 3107 L
+4823 3107 mt 4797 3079 L
+4797 3079 mt 4797 3079 L
+4797 3079 mt 4777 3052 L
+4777 3052 mt 4762 3034 L
+4762 3034 mt 4754 3024 L
+4754 3024 mt 4727 2998 L
+4727 2998 mt 4726 2997 L
+4726 2997 mt 4692 2969 L
+4692 2969 mt 4692 2969 L
+4692 2969 mt 4657 2946 L
+4657 2946 mt 4650 2942 L
+4650 2942 mt 4623 2925 L
+4623 2925 mt 4604 2914 L
+4604 2914 mt 4588 2903 L
+4588 2903 mt 4562 2887 L
+4562 2887 mt 4553 2881 L
+4553 2881 mt 4523 2859 L
+4523 2859 mt 4518 2856 L
+4518 2856 mt 4483 2832 L
+4483 2832 mt 4483 2832 L
+4483 2832 mt 4448 2811 L
+4448 2811 mt 4436 2804 L
+4436 2804 mt 4413 2792 L
+4413 2792 mt 4383 2777 L
+4383 2777 mt 4379 2774 L
+4379 2774 mt 4344 2755 L
+4344 2755 mt 4335 2749 L
+4335 2749 mt 4309 2731 L
+4309 2731 mt 4294 2722 L
+4294 2722 mt 4274 2708 L
+4274 2708 mt 4252 2694 L
+4252 2694 mt 4239 2685 L
+4239 2685 mt 4213 2667 L
+4213 2667 mt 4204 2660 L
+4204 2660 mt 4180 2639 L
+4180 2639 mt 4169 2630 L
+4169 2630 mt 4147 2612 L
+4147 2612 mt 4134 2601 L
+4134 2601 mt 4113 2584 L
+4113 2584 mt 4100 2574 L
+4100 2574 mt 4075 2557 L
+4075 2557 mt 4065 2550 L
+4065 2550 mt 4031 2529 L
+4031 2529 mt 4030 2529 L
+4030 2529 mt 3995 2512 L
+3995 2512 mt 3971 2502 L
+3971 2502 mt 3960 2497 L
+3960 2497 mt 3925 2487 L
+3925 2487 mt 3890 2480 L
+3890 2480 mt 3855 2480 L
+3855 2480 mt 3821 2489 L
+3821 2489 mt 3790 2502 L
+3790 2502 mt 3786 2504 L
+3786 2504 mt 3751 2527 L
+3751 2527 mt 3748 2529 L
+3748 2529 mt 3716 2553 L
+3716 2553 mt 3711 2557 L
+3711 2557 mt 3681 2579 L
+3681 2579 mt 3673 2584 L
+3673 2584 mt 3646 2602 L
+3646 2602 mt 3628 2612 L
+3628 2612 mt 3611 2621 L
+3611 2621 mt 3577 2636 L
+3577 2636 mt 3569 2639 L
+3569 2639 mt 3542 2650 L
+3542 2650 mt 3507 2662 L
+3507 2662 mt 3490 2667 L
+3490 2667 mt 3472 2672 L
+3472 2672 mt 3437 2683 L
+3437 2683 mt 3404 2694 L
+3404 2694 mt 3402 2695 L
+3402 2695 mt 3367 2707 L
+3367 2707 mt 3332 2719 L
+3332 2719 mt 3325 2722 L
+3325 2722 mt 3298 2732 L
+3298 2732 mt 3263 2745 L
+3263 2745 mt 3252 2749 L
+3252 2749 mt 3228 2759 L
+3228 2759 mt 3193 2772 L
+3193 2772 mt 3181 2777 L
+3181 2777 mt 3158 2786 L
+3158 2786 mt 3123 2799 L
+3123 2799 mt 3112 2804 L
+3112 2804 mt 3088 2814 L
+3088 2814 mt 3053 2831 L
+3053 2831 mt 3052 2832 L
+3052 2832 mt 3019 2853 L
+3019 2853 mt 3010 2859 L
+3010 2859 mt 2984 2883 L
+2984 2883 mt 2981 2887 L
+2981 2887 mt 2964 2914 L
+2964 2914 mt 2955 2942 L
+2955 2942 mt 2949 2969 L
+2949 2969 mt 2950 2997 L
+2950 2997 mt 2955 3024 L
+2955 3024 mt 2967 3052 L
+2967 3052 mt 2984 3079 L
+2984 3079 mt 2984 3079 L
+2984 3079 mt 3006 3107 L
+3006 3107 mt 3019 3118 L
+3019 3118 mt 3035 3134 L
+3035 3134 mt 3053 3148 L
+3053 3148 mt 3070 3162 L
+3070 3162 mt 3088 3176 L
+3088 3176 mt 3107 3189 L
+3107 3189 mt 3123 3201 L
+3123 3201 mt 3145 3217 L
+3145 3217 mt 3158 3225 L
+3158 3225 mt 3186 3244 L
+3186 3244 mt 3193 3249 L
+3193 3249 mt 3228 3271 L
+3228 3271 mt 3229 3272 L
+3229 3272 mt 3263 3293 L
+3263 3293 mt 3273 3299 L
+3273 3299 mt 3298 3315 L
+3298 3315 mt 3315 3327 L
+3315 3327 mt 3332 3338 L
+3332 3338 mt 3355 3354 L
+3355 3354 mt 3367 3364 L
+3367 3364 mt 3390 3382 L
+3390 3382 mt 3402 3392 L
+3402 3392 mt 3422 3409 L
+3422 3409 mt 3437 3423 L
+3437 3423 mt 3452 3437 L
+3452 3437 mt 3472 3457 L
+3472 3457 mt 3479 3464 L
+3479 3464 mt 3506 3492 L
+3506 3492 mt 3507 3493 L
+3507 3493 mt 3530 3519 L
+3530 3519 mt 3542 3533 L
+3542 3533 mt 3553 3547 L
+3553 3547 mt 3575 3575 L
+3575 3575 mt 3577 3577 L
+3577 3577 mt 3597 3602 L
+3597 3602 mt 3611 3618 L
+3611 3618 mt 3621 3630 L
+3621 3630 mt 3644 3657 L
+3644 3657 mt 3646 3660 L
+3646 3660 mt 3660 3685 L
+3660 3685 mt 3668 3712 L
+3668 3712 mt 3666 3740 L
+3666 3740 mt 3658 3767 L
+3658 3767 mt 3646 3786 L
+3646 3786 mt 3640 3795 L
+3640 3795 mt 3614 3822 L
+3614 3822 mt 3611 3825 L
+3611 3825 mt 3590 3850 L
+3590 3850 mt 3577 3865 L
+3577 3865 mt 3566 3877 L
+3566 3877 mt 3544 3905 L
+3544 3905 mt 3542 3908 L
+3542 3908 mt 3528 3932 L
+3528 3932 mt 3520 3960 L
+3520 3960 mt 3526 3987 L
+3526 3987 mt 3542 4004 L
+3542 4004 mt 3552 4015 L
+3552 4015 mt 3577 4030 L
+3577 4030 mt 3597 4042 L
+3597 4042 mt 3611 4050 L
+3611 4050 mt 3644 4070 L
+3644 4070 mt 3646 4071 L
+3646 4071 mt 3675 4097 L
+3675 4097 mt 3681 4105 L
+3681 4105 mt 3694 4125 L
+3694 4125 mt 3704 4152 L
+3704 4152 mt 3707 4180 L
+3707 4180 mt 3702 4207 L
+3702 4207 mt 3685 4235 L
+3685 4235 mt 3681 4238 L
+3681 4238 mt 3646 4262 L
+3646 4262 mt 3645 4262 L
+3645 4262 mt 3611 4278 L
+3611 4278 mt 3588 4290 L
+3588 4290 mt 3577 4298 L
+3577 4298 mt 3554 4317 L
+3554 4317 mt 3546 4345 L
+3546 4345 mt 3558 4372 L
+3558 4372 mt 3577 4389 L
+3577 4389 mt 3591 4400 L
+3591 4400 mt 3611 4413 L
+3611 4413 mt 3634 4427 L
+3634 4427 mt 3646 4437 L
+3646 4437 mt 3666 4455 L
+3666 4455 mt 3681 4475 L
+3681 4475 mt 3686 4482 L
+3686 4482 mt 3699 4510 L
+3699 4510 mt 3708 4537 L
+3708 4537 mt 3714 4565 L
+3714 4565 mt 3716 4584 L
+3716 4584 mt 3717 4592 L
+3717 4592 mt 3716 4596 L
+3716 4596 mt 3710 4620 L
+3710 4620 mt 3696 4648 L
+3696 4648 mt 3681 4672 L
+3681 4672 mt 3679 4675 L
+3679 4675 mt 3659 4703 L
+3659 4703 mt 3646 4718 L
+3646 4718 mt 3636 4730 L
+3636 4730 mt 3611 4756 L
+3611 4756 mt 3610 4758 L
+3610 4758 mt 3581 4785 L
+3581 4785 mt 3577 4789 L
+3577 4789 mt 3547 4813 L
+3547 4813 mt 3542 4817 L
+3542 4817 mt 3510 4840 L
+3510 4840 mt 3507 4842 L
+3507 4842 mt 3472 4865 L
+3472 4865 mt 3468 4868 L
+3468 4868 mt 3437 4886 L
+3437 4886 mt 3421 4895 L
+3421 4895 mt 3402 4905 L
+3402 4905 mt 3368 4923 L
+3368 4923 mt 3367 4923 L
+3367 4923 mt 3332 4940 L
+3332 4940 mt 3309 4950 L
+3309 4950 mt 3298 4955 L
+3298 4955 mt 3263 4970 L
+3263 4970 mt 3242 4978 L
+3242 4978 mt 3228 4983 L
+3228 4983 mt 3193 4996 L
+3193 4996 mt 3167 5005 L
+3167 5005 mt 3158 5008 L
+3158 5008 mt 3123 5020 L
+3123 5020 mt 3088 5030 L
+3088 5030 mt 3079 5033 L
+3079 5033 mt 3053 5040 L
+3053 5040 mt 3019 5049 L
+3019 5049 mt 2984 5057 L
+2984 5057 mt 2971 5060 L
+2971 5060 mt 2949 5065 L
+2949 5065 mt 2914 5072 L
+2914 5072 mt 2879 5078 L
+2879 5078 mt 2844 5084 L
+2844 5084 mt 2816 5088 L
+2816 5088 mt 2809 5089 L
+2809 5089 mt 2774 5093 L
+2774 5093 mt 2740 5097 L
+2740 5097 mt 2705 5100 L
+2705 5100 mt 2670 5103 L
+2670 5103 mt 2635 5105 L
+2635 5105 mt 2600 5107 L
+2600 5107 mt 2565 5108 L
+2565 5108 mt 2530 5108 L
+2530 5108 mt 2496 5108 L
+2496 5108 mt 2461 5108 L
+2461 5108 mt 2426 5107 L
+2426 5107 mt 2391 5105 L
+2391 5105 mt 2356 5103 L
+2356 5103 mt 2321 5100 L
+2321 5100 mt 2286 5097 L
+2286 5097 mt 2251 5093 L
+2251 5093 mt 2217 5089 L
+2217 5089 mt 2209 5088 L
+2209 5088 mt 2182 5084 L
+2182 5084 mt 2147 5078 L
+2147 5078 mt 2112 5072 L
+2112 5072 mt 2077 5065 L
+2077 5065 mt 2057 5060 L
+2057 5060 mt 2042 5057 L
+2042 5057 mt 2007 5049 L
+2007 5049 mt 1972 5040 L
+1972 5040 mt 1948 5033 L
+1948 5033 mt 1938 5030 L
+1938 5030 mt 1903 5020 L
+1903 5020 mt 1868 5008 L
+1868 5008 mt 1859 5005 L
+1859 5005 mt 1833 4997 L
+1833 4997 mt 1798 4984 L
+1798 4984 mt 1783 4978 L
+1783 4978 mt 1763 4970 L
+1763 4970 mt 1728 4954 L
+1728 4954 mt 1720 4950 L
+1720 4950 mt 1694 4937 L
+1694 4937 mt 1666 4923 L
+1666 4923 mt 1659 4919 L
+1659 4919 mt 1624 4899 L
+1624 4899 mt 1618 4895 L
+1618 4895 mt 1589 4876 L
+1589 4876 mt 1576 4868 L
+1576 4868 mt 1554 4852 L
+1554 4852 mt 1539 4840 L
+1539 4840 mt 1519 4824 L
+1519 4824 mt 1505 4813 L
+1505 4813 mt 1484 4794 L
+1484 4794 mt 1475 4785 L
+1475 4785 mt 1449 4759 L
+1449 4759 mt 1448 4758 L
+1448 4758 mt 1423 4730 L
+1423 4730 mt 1415 4720 L
+1415 4720 mt 1400 4703 L
+1400 4703 mt 1380 4676 L
+1380 4676 mt 1379 4675 L
+1379 4675 mt 1359 4648 L
+1359 4648 mt 1345 4625 L
+1345 4625 mt 1342 4620 L
+1342 4620 mt 1324 4592 L
+1324 4592 mt 1310 4568 L
+1310 4568 mt 1308 4565 L
+1308 4565 mt 1293 4537 L
+1293 4537 mt 1278 4510 L
+1278 4510 mt 1275 4504 L
+1275 4504 mt 1264 4482 L
+1264 4482 mt 1250 4455 L
+1250 4455 mt 1240 4433 L
+1240 4433 mt 1238 4427 L
+1238 4427 mt 1226 4400 L
+1226 4400 mt 1215 4372 L
+1215 4372 mt 1205 4346 L
+1205 4346 mt 1205 4345 L
+1205 4345 mt 1195 4317 L
+1195 4317 mt 1187 4290 L
+1187 4290 mt 1180 4262 L
+1180 4262 mt 1173 4235 L
+1173 4235 mt 1170 4224 L
+1170 4224 mt 1167 4207 L
+1167 4207 mt 1162 4180 L
+1162 4180 mt 1157 4152 L
+1157 4152 mt 1153 4125 L
+1153 4125 mt 1149 4097 L
+1149 4097 mt 1146 4070 L
+1146 4070 mt 1143 4042 L
+1143 4042 mt 1140 4015 L
+1140 4015 mt 1137 3987 L
+1137 3987 mt 1136 3969 L
+1136 3969 mt 1135 3960 L
+1135 3960 mt 1132 3932 L
+1132 3932 mt 1130 3905 L
+1130 3905 mt 1126 3877 L
+1126 3877 mt 1123 3850 L
+1123 3850 mt 1118 3822 L
+1118 3822 mt 1112 3795 L
+1112 3795 mt 1105 3767 L
+1105 3767 mt 1101 3752 L
+1101 3752 mt 1097 3740 L
+1097 3740 mt 1086 3712 L
+1086 3712 mt 1074 3685 L
+1074 3685 mt 1066 3670 L
+1066 3670 mt 1059 3657 L
+1059 3657 mt 1042 3630 L
+1042 3630 mt 1031 3614 L
+1031 3614 mt 1022 3602 L
+1022 3602 mt 999 3575 L
+ 999 3575 mt 996 3571 L
+ 996 3571 mt 973 3547 L
+ 973 3547 mt 961 3536 L
+ 961 3536 mt 944 3519 L
+ 944 3519 mt 926 3504 L
+ 926 3504 mt 913 3492 L
+ 913 3492 mt 892 3475 L
+ 892 3475 mt 879 3464 L
+ 879 3464 mt 857 3447 L
+ 857 3447 mt 844 3437 L
+ 844 3437 mt 822 3420 L
+ 822 3420 mt 807 3409 L
+ 807 3409 mt 787 3394 L
+ 787 3394 mt 770 3382 L
+ 770 3382 mt 752 3369 L
+ 752 3369 mt 733 3354 L
+ 733 3354 mt 717 3343 L
+ 717 3343 mt 695 3327 L
+ 695 3327 mt 682 3318 L
+ 682 3318 mt 658 3299 L
+ 658 3299 mt 647 3292 L
+ 647 3292 mt 621 3272 L
+ 621 3272 mt 613 3266 L
+ 613 3266 mt 584 3244 L
+ 584 3244 mt 578 3239 L
+ 578 3239 mt 549 3217 L
+ 549 3217 mt 543 3212 L
+ 543 3212 mt 513 3189 L
+ 513 3189 mt 508 3185 L
+ 508 3185 mt 479 3162 L
+ 479 3162 mt 473 3157 L
+ 473 3157 mt 446 3134 L
+ 446 3134 mt 438 3127 L
+ 438 3127 mt 415 3107 L
+ 415 3107 mt 403 3097 L
+ 403 3097 mt 384 3079 L
+ 384 3079 mt 368 3064 L
+ 368 3064 mt 355 3052 L
+ 355 3052 mt 334 3030 L
+ 334 3030 mt 328 3024 L
+ 328 3024 mt 302 2997 L
+ 302 2997 mt 299 2994 L
+ 299 2994 mt 277 2969 L
+ 277 2969 mt 264 2954 L
+ 264 2954 mt 253 2942 L
+ 253 2942 mt 230 2914 L
+ 230 2914 mt 229 2912 L
+ 229 2912 mt 209 2887 L
+ 209 2887 mt 194 2867 L
+ 194 2867 mt 189 2859 L
+ 189 2859 mt 169 2832 L
+ 169 2832 mt 159 2817 L
+ 159 2817 mt 150 2804 L
+ 150 2804 mt 132 2777 L
+ 132 2777 mt 124 2764 L
+ 124 2764 mt 115 2749 L
+ 115 2749 mt 100 2722 L
+ 100 2722 mt 90 2703 L
+ 90 2703 mt 85 2694 L
+ 85 2694 mt 71 2667 L
+ 71 2667 mt 58 2639 L
+ 58 2639 mt 55 2631 L
+ 55 2631 mt 46 2612 L
+ 46 2612 mt 36 2584 L
+ 36 2584 mt 26 2557 L
+ 26 2557 mt 20 2535 L
+ 20 2535 mt 18 2529 L
+ 18 2529 mt 10 2502 L
+ 10 2502 mt 4 2474 L
+ 4 2474 mt 0 2446 L
+ 0 2446 mt -5 2419 L
+ -5 2419 mt -9 2391 L
+ -9 2391 mt -11 2364 L
+ -11 2364 mt -13 2336 L
+ -13 2336 mt -14 2320 L
+ -14 2320 mt -15 2309 L
+ -15 2309 mt -15 2281 L
+ -15 2281 mt -15 2254 L
+ -15 2254 mt -15 2226 L
+ -15 2226 mt -14 2207 L
+ -14 2207 mt -14 2199 L
+ -14 2199 mt -12 2171 L
+ -12 2171 mt -10 2144 L
+ -10 2144 mt -7 2116 L
+ -7 2116 mt -3 2089 L
+ -3 2089 mt 0 2061 L
+ 0 2061 mt 4 2034 L
+ 4 2034 mt 10 2006 L
+ 10 2006 mt 15 1979 L
+ 15 1979 mt 20 1961 L
+ 20 1961 mt 22 1951 L
+ 22 1951 mt 29 1924 L
+ 29 1924 mt 36 1896 L
+ 36 1896 mt 44 1869 L
+ 44 1869 mt 52 1841 L
+ 52 1841 mt 55 1833 L
+ 55 1833 mt 60 1814 L
+ 60 1814 mt 68 1786 L
+ 68 1786 mt 76 1759 L
+ 76 1759 mt 85 1731 L
+ 85 1731 mt 90 1715 L
+ 90 1715 mt 93 1704 L
+ 93 1704 mt 101 1676 L
+ 101 1676 mt 109 1649 L
+ 109 1649 mt 117 1621 L
+ 117 1621 mt 124 1597 L
+ 124 1597 mt 125 1594 L
+ 125 1594 mt 133 1566 L
+ 133 1566 mt 141 1539 L
+ 141 1539 mt 148 1511 L
+ 148 1511 mt 156 1484 L
+ 156 1484 mt 159 1470 L
+ 159 1470 mt 163 1456 L
+ 163 1456 mt 170 1428 L
+ 170 1428 mt 178 1401 L
+ 178 1401 mt 185 1373 L
+ 185 1373 mt 193 1346 L
+ 193 1346 mt 194 1341 L
+ 194 1341 mt 200 1318 L
+ 200 1318 mt 208 1291 L
+ 208 1291 mt 216 1263 L
+ 216 1263 mt 224 1236 L
+ 224 1236 mt 229 1218 L
+ 229 1218 mt 232 1208 L
+ 232 1208 mt 240 1181 L
+ 240 1181 mt 249 1153 L
+ 249 1153 mt 258 1126 L
+ 258 1126 mt 264 1111 L
+ 264 1111 mt 268 1098 L
+ 268 1098 mt 279 1071 L
+ 279 1071 mt 289 1043 L
+ 289 1043 mt 299 1021 L
+ 299 1021 mt 301 1016 L
+ 301 1016 mt 313 988 L
+ 313 988 mt 325 961 L
+ 325 961 mt 334 944 L
+ 334 944 mt 338 933 L
+ 338 933 mt 352 906 L
+ 352 906 mt 366 878 L
+ 366 878 mt 368 874 L
+ 368 874 mt 381 851 L
+ 381 851 mt 396 823 L
+ 396 823 mt 403 811 L
+ 403 811 mt 412 796 L
+ 412 796 mt 428 768 L
+ 428 768 mt 438 753 L
+ 438 753 mt 446 741 L
+ 446 741 mt 463 713 L
+ 463 713 mt 473 699 L
+ 473 699 mt 482 686 L
+ 482 686 mt 501 658 L
+ 501 658 mt 508 649 L
+ 508 649 mt 521 631 L
+ 521 631 mt 541 603 L
+ 541 603 mt 543 601 L
+ 543 601 mt 562 576 L
+ 562 576 mt 578 556 L
+ 578 556 mt 584 548 L
+ 584 548 mt 606 521 L
+ 606 521 mt 613 513 L
+ 613 513 mt 629 493 L
+ 629 493 mt 647 472 L
+ 647 472 mt 653 466 L
+ 653 466 mt 678 438 L
+ 678 438 mt 682 433 L
+ 682 433 mt 704 411 L
+ 704 411 mt 717 398 L
+ 717 398 mt 732 383 L
+ 732 383 mt 752 364 L
+ 752 364 mt 762 355 L
+ 762 355 mt 787 334 L
+ 787 334 mt 794 328 L
+ 794 328 mt 822 305 L
+ 822 305 mt 828 300 L
+ 828 300 mt 857 279 L
+ 857 279 mt 865 273 L
+ 865 273 mt 892 255 L
+ 892 255 mt 905 245 L
+ 905 245 mt 926 232 L
+ 926 232 mt 949 218 L
+ 949 218 mt 961 210 L
+ 961 210 mt 996 190 L
+ 996 190 mt 996 190 L
+ 996 190 mt 1031 171 L
+1031 171 mt 1046 163 L
+1046 163 mt 1066 153 L
+1066 153 mt 1101 136 L
+1101 136 mt 1102 135 L
+1102 135 mt 1136 120 L
+1136 120 mt 1164 108 L
+1164 108 mt 1170 105 L
+1170 105 mt 1205 91 L
+1205 91 mt 1233 80 L
+1233 80 mt 1240 77 L
+1240 77 mt 1275 64 L
+1275 64 mt 1309 53 L
+1309 53 mt 1310 52 L
+1310 52 mt 1345 41 L
+1345 41 mt 1380 29 L
+1380 29 mt 1393 25 L
+1393 25 mt 1415 19 L
+1415 19 mt 1449 8 L
+1449 8 mt 1484 -1 L
+1484 -1 mt 1487 -1 L
+1487 -1 mt 1519 -10 L
+1519 -10 mt 1554 -19 L
+1554 -19 mt 1589 -28 L
+1589 -28 mt 1591 -29 L
+1591 -29 mt 1624 -37 L
+1624 -37 mt 1659 -45 L
+1659 -45 mt 1694 -53 L
+1694 -53 mt 1706 -56 L
+1706 -56 mt 1728 -61 L
+1728 -61 mt 1763 -69 L
+1763 -69 mt 1798 -77 L
+1798 -77 mt 1831 -84 L
+1831 -84 mt 1833 -84 L
+1833 -84 mt 1868 -92 L
+1868 -92 mt 1903 -99 L
+1903 -99 mt 1938 -106 L
+1938 -106 mt 1964 -111 L
+1964 -111 mt 1972 -113 L
+1972 -113 mt 2007 -120 L
+2007 -120 mt 2042 -127 L
+2042 -127 mt 2077 -133 L
+2077 -133 mt 2105 -139 L
+2105 -139 mt 2112 -140 L
+2112 -140 mt 2147 -147 L
+2147 -147 mt 2182 -153 L
+2182 -153 mt 2217 -160 L
+2217 -160 mt 2250 -166 L
+2250 -166 mt 2251 -167 L
+2251 -167 mt 2286 -174 L
+2286 -174 mt 2321 -181 L
+2321 -181 mt 2356 -188 L
+2356 -188 mt 2386 -194 L
+2386 -194 mt 2391 -195 L
+2391 -195 mt 2426 -202 L
+2426 -202 mt 2461 -209 L
+2461 -209 mt 2496 -216 L
+2496 -216 mt 2526 -221 L
+2526 -221 mt 2530 -222 L
+2530 -222 mt 2565 -229 L
+2565 -229 mt 2600 -235 L
+2600 -235 mt 2635 -242 L
+2635 -242 mt 2670 -248 L
+2670 -248 mt 2672 -249 L
+2672 -249 mt 2705 -255 L
+2705 -255 mt 2740 -261 L
+2740 -261 mt 2774 -268 L
+2774 -268 mt 2809 -274 L
+2809 -274 mt 2822 -276 L
+2822 -276 mt 2844 -280 L
+2844 -280 mt 2879 -287 L
+2879 -287 mt 2914 -293 L
+2914 -293 mt 2949 -299 L
+2949 -299 mt 2976 -304 L
+2976 -304 mt 2984 -305 L
+2984 -305 mt 3019 -311 L
+3019 -311 mt 3053 -318 L
+3053 -318 mt 3088 -324 L
+3088 -324 mt 3123 -329 L
+3123 -329 mt 3135 -331 L
+3135 -331 mt 3158 -335 L
+3158 -335 mt 3193 -341 L
+3193 -341 mt 3228 -346 L
+3228 -346 mt 3263 -351 L
+3263 -351 mt 3298 -356 L
+3298 -356 mt 3321 -359 L
+3321 -359 mt 3332 -360 L
+3332 -360 mt 3367 -365 L
+3367 -365 mt 3402 -369 L
+3402 -369 mt 3437 -373 L
+3437 -373 mt 3472 -376 L
+3472 -376 mt 3507 -379 L
+3507 -379 mt 3542 -383 L
+3542 -383 mt 3577 -385 L
+3577 -385 mt 3590 -386 L
+3590 -386 mt 3611 -388 L
+3611 -388 mt 3646 -390 L
+3646 -390 mt 3681 -392 L
+3681 -392 mt 3716 -393 L
+3716 -393 mt 3751 -394 L
+3751 -394 mt 3786 -395 L
+3786 -395 mt 3821 -396 L
+3821 -396 mt 3855 -396 L
+3855 -396 mt 3890 -396 L
+3890 -396 mt 3925 -395 L
+3925 -395 mt 3960 -395 L
+3960 -395 mt 3995 -394 L
+3995 -394 mt 4030 -393 L
+4030 -393 mt 4065 -392 L
+4065 -392 mt 4100 -390 L
+4100 -390 mt 4134 -388 L
+4134 -388 mt 4169 -386 L
+4169 -386 mt 4170 -386 L
+4170 -386 mt 4204 -384 L
+4204 -384 mt 4239 -382 L
+4239 -382 mt 4274 -379 L
+4274 -379 mt 4309 -375 L
+4309 -375 mt 4344 -372 L
+4344 -372 mt 4379 -368 L
+4379 -368 mt 4413 -364 L
+4413 -364 mt 4448 -359 L
+4448 -359 mt 4449 -359 L
+4449 -359 mt 4483 -354 L
+4483 -354 mt 4518 -349 L
+4518 -349 mt 4553 -343 L
+4553 -343 mt 4588 -337 L
+4588 -337 mt 4619 -331 L
+4619 -331 mt 4623 -331 L
+4623 -331 mt 4657 -324 L
+4657 -324 mt 4692 -317 L
+4692 -317 mt 4727 -309 L
+4727 -309 mt 4748 -304 L
+4748 -304 mt 4762 -301 L
+4762 -301 mt 4797 -292 L
+4797 -292 mt 4832 -283 L
+4832 -283 mt 4858 -276 L
+4858 -276 mt 4867 -274 L
+4867 -274 mt 4902 -264 L
+4902 -264 mt 4936 -254 L
+4936 -254 mt 4953 -249 L
+4953 -249 mt 4971 -243 L
+4971 -243 mt 5006 -233 L
+5006 -233 mt 5040 -221 L
+5040 -221 mt 5041 -221 L
+5041 -221 mt 5076 -210 L
+5076 -210 mt 5111 -198 L
+5111 -198 mt 5122 -194 L
+5122 -194 mt 5146 -185 L
+5146 -185 mt 5181 -173 L
+5181 -173 mt 5198 -166 L
+5198 -166 mt 5215 -160 L
+5215 -160 mt 5250 -146 L
+5250 -146 mt 5269 -139 L
+5269 -139 mt 5285 -132 L
+5285 -132 mt 5320 -118 L
+5320 -118 mt 5335 -111 L
+5335 -111 mt 5355 -103 L
+5355 -103 mt 5390 -87 L
+5390 -87 mt 5396 -84 L
+5396 -84 mt 5425 -70 L
+5425 -70 mt 5454 -56 L
+5454 -56 mt 5459 -53 L
+5459 -53 mt 5494 -36 L
+5494 -36 mt 5507 -29 L
+5507 -29 mt 5529 -17 L
+5529 -17 mt 5558 -1 L
+5558 -1 mt 5564 1 L
+5564 1 mt 5599 22 L
+5599 22 mt 5605 25 L
+5605 25 mt 5634 43 L
+5634 43 mt 5649 53 L
+5649 53 mt 5669 65 L
+5669 65 mt 5692 80 L
+5692 80 mt 5704 88 L
+5704 88 mt 5732 108 L
+5732 108 mt 5738 112 L
+5738 112 mt 5771 135 L
+5771 135 mt 5773 137 L
+5773 137 mt 5808 163 L
+5808 163 mt 5808 163 L
+5808 163 mt 5843 190 L
+5843 190 mt 5843 190 L
+5843 190 mt 5877 218 L
+5877 218 mt 5878 218 L
+5878 218 mt 5911 245 L
+5911 245 mt 5913 247 L
+5913 247 mt 5943 273 L
+5943 273 mt 5948 277 L
+5948 277 mt 5975 300 L
+5975 300 mt 5983 308 L
+5983 308 mt 6005 328 L
+6005 328 mt 6017 339 L
+6017 339 mt 6035 355 L
+6035 355 mt 6052 371 L
+6052 371 mt 6065 383 L
+6065 383 mt 6087 404 L
+6087 404 mt 6094 411 L
+6094 411 mt 6122 437 L
+6122 437 mt 6123 438 L
+6123 438 mt 6151 466 L
+6151 466 mt 6157 471 L
+6157 471 mt 6180 493 L
+6180 493 mt 6192 504 L
+6192 504 mt 6209 521 L
+6209 521 mt 6227 537 L
+6227 537 mt 6238 548 L
+6238 548 mt 6261 571 L
+6261 571 mt 6267 576 L
+6267 576 mt 6295 603 L
+6295 603 mt 6296 604 L
+6296 604 mt 6324 631 L
+6324 631 mt 6331 638 L
+6331 638 mt 6352 658 L
+6352 658 mt 6366 671 L
+6366 671 mt 6381 686 L
+6381 686 mt 6401 705 L
+6401 705 mt 6409 713 L
+6409 713 mt 6436 739 L
+6436 739 mt 6438 741 L
+6438 741 mt 6466 768 L
+6466 768 mt 6471 772 L
+6471 772 mt 6495 796 L
+6495 796 mt 6506 806 L
+6506 806 mt 6523 823 L
+6523 823 mt 6540 840 L
+6540 840 mt 6551 851 L
+6551 851 mt 6575 875 L
+6575 875 mt 6579 878 L
+6579 878 mt 6607 906 L
+6607 906 mt 6610 909 L
+6610 909 mt 6634 933 L
+6634 933 mt 6645 945 L
+6645 945 mt 6661 961 L
+6661 961 mt 6680 981 L
+6680 981 mt 6687 988 L
+6687 988 mt 6713 1016 L
+6713 1016 mt 6715 1018 L
+6715 1018 mt 6738 1043 L
+6738 1043 mt 6750 1056 L
+6750 1056 mt 6764 1071 L
+6764 1071 mt 6785 1094 L
+6785 1094 mt 6788 1098 L
+6788 1098 mt 6813 1126 L
+6813 1126 mt 6819 1134 L
+6819 1134 mt 6837 1153 L
+6837 1153 mt 6854 1174 L
+6854 1174 mt 6860 1181 L
+6860 1181 mt 6883 1208 L
+6883 1208 mt 6889 1216 L
+6889 1216 mt 6906 1236 L
+6906 1236 mt 6924 1259 L
+6924 1259 mt 6928 1263 L
+6928 1263 mt 6949 1291 L
+6949 1291 mt 6959 1303 L
+6959 1303 mt 6971 1318 L
+6971 1318 mt 6991 1346 L
+6991 1346 mt 6994 1349 L
+6994 1349 mt 7012 1373 L
+7012 1373 mt 7029 1397 L
+7029 1397 mt 7032 1401 L
+7032 1401 mt 7051 1428 L
+7051 1428 mt 7063 1446 L
+7063 1446 mt 7070 1456 L
+7070 1456 mt 7089 1484 L
+7089 1484 mt 7098 1498 L
+7098 1498 mt 7107 1511 L
+7107 1511 mt 7125 1539 L
+7125 1539 mt 7133 1553 L
+7133 1553 mt 7142 1566 L
+7142 1566 mt 7158 1594 L
+7158 1594 mt 7168 1612 L
+7168 1612 mt 7174 1621 L
+7174 1621 mt 7189 1649 L
+7189 1649 mt 7203 1676 L
+7203 1676 mt 7203 1676 L
+7203 1676 mt 7217 1704 L
+7217 1704 mt 7230 1731 L
+7230 1731 mt 7238 1750 L
+7238 1750 mt 7242 1759 L
+7242 1759 mt 7253 1786 L
+7253 1786 mt 7263 1814 L
+7263 1814 mt 7273 1841 L
+7273 1841 mt 7273 1842 L
+7273 1842 mt 7281 1869 L
+7281 1869 mt 7290 1896 L
+7290 1896 mt 7297 1924 L
+7297 1924 mt 7303 1951 L
+7303 1951 mt 7308 1976 L
+7238 2031 mt 7238 2034 L
+7238 2034 mt 7240 2061 L
+7240 2061 mt 7241 2089 L
+7241 2089 mt 7242 2116 L
+7242 2116 mt 7242 2144 L
+7242 2144 mt 7241 2171 L
+7241 2171 mt 7240 2199 L
+7240 2199 mt 7238 2223 L
+7238 2223 mt 7238 2226 L
+7238 2226 mt 7235 2254 L
+7235 2254 mt 7232 2281 L
+7232 2281 mt 7229 2309 L
+7229 2309 mt 7225 2336 L
+7225 2336 mt 7221 2364 L
+7221 2364 mt 7217 2391 L
+7217 2391 mt 7212 2419 L
+7212 2419 mt 7206 2446 L
+7206 2446 mt 7203 2464 L
+7203 2464 mt 7201 2474 L
+7201 2474 mt 7195 2502 L
+7195 2502 mt 7189 2529 L
+7189 2529 mt 7182 2557 L
+7182 2557 mt 7175 2584 L
+7175 2584 mt 7168 2608 L
+7168 2608 mt 7167 2612 L
+7167 2612 mt 7159 2639 L
+7159 2639 mt 7151 2667 L
+7151 2667 mt 7143 2694 L
+7143 2694 mt 7134 2722 L
+7134 2722 mt 7133 2725 L
+7133 2725 mt 7126 2749 L
+7126 2749 mt 7117 2777 L
+7117 2777 mt 7108 2804 L
+7108 2804 mt 7098 2832 L
+7098 2832 mt 7098 2832 L
+7098 2832 mt 7089 2859 L
+7089 2859 mt 7079 2887 L
+7079 2887 mt 7070 2914 L
+7070 2914 mt 7063 2931 L
+7063 2931 mt 7059 2942 L
+7059 2942 mt 7049 2969 L
+7049 2969 mt 7039 2997 L
+7039 2997 mt 7029 3023 L
+7029 3023 mt 7028 3024 L
+7028 3024 mt 7018 3052 L
+7018 3052 mt 7007 3079 L
+7007 3079 mt 6996 3107 L
+6996 3107 mt 6994 3112 L
+6994 3112 mt 6985 3134 L
+6985 3134 mt 6974 3162 L
+6974 3162 mt 6962 3189 L
+6962 3189 mt 6959 3198 L
+6959 3198 mt 6951 3217 L
+6951 3217 mt 6940 3244 L
+6940 3244 mt 6929 3272 L
+6929 3272 mt 6924 3283 L
+6924 3283 mt 6918 3299 L
+6918 3299 mt 6907 3327 L
+6907 3327 mt 6896 3354 L
+6896 3354 mt 6889 3370 L
+6889 3370 mt 6885 3382 L
+6885 3382 mt 6874 3409 L
+6874 3409 mt 6863 3437 L
+6863 3437 mt 6854 3458 L
+6854 3458 mt 6852 3464 L
+6852 3464 mt 6841 3492 L
+6841 3492 mt 6829 3519 L
+6829 3519 mt 6819 3543 L
+6819 3543 mt 6818 3547 L
+6818 3547 mt 6806 3575 L
+6806 3575 mt 6794 3602 L
+6794 3602 mt 6785 3624 L
+6785 3624 mt 6782 3630 L
+6782 3630 mt 6770 3657 L
+6770 3657 mt 6758 3685 L
+6758 3685 mt 6750 3702 L
+6750 3702 mt 6745 3712 L
+6745 3712 mt 6733 3740 L
+6733 3740 mt 6720 3767 L
+6720 3767 mt 6715 3778 L
+6715 3778 mt 6707 3795 L
+6707 3795 mt 6694 3822 L
+6694 3822 mt 6681 3850 L
+6681 3850 mt 6680 3851 L
+6680 3851 mt 6667 3877 L
+6667 3877 mt 6653 3905 L
+6653 3905 mt 6645 3920 L
+6645 3920 mt 6639 3932 L
+6639 3932 mt 6625 3960 L
+6625 3960 mt 6610 3987 L
+6610 3987 mt 6610 3987 L
+6610 3987 mt 6595 4015 L
+6595 4015 mt 6580 4042 L
+6580 4042 mt 6575 4050 L
+6575 4050 mt 6565 4070 L
+6565 4070 mt 6549 4097 L
+6549 4097 mt 6540 4113 L
+6540 4113 mt 6534 4125 L
+6534 4125 mt 6519 4152 L
+6519 4152 mt 6506 4177 L
+6506 4177 mt 6504 4180 L
+6504 4180 mt 6490 4207 L
+6490 4207 mt 6477 4235 L
+6477 4235 mt 6471 4247 L
+6471 4247 mt 6463 4262 L
+6463 4262 mt 6450 4290 L
+6450 4290 mt 6437 4317 L
+6437 4317 mt 6436 4320 L
+6436 4320 mt 6424 4345 L
+6424 4345 mt 6411 4372 L
+6411 4372 mt 6401 4393 L
+6401 4393 mt 6398 4400 L
+6398 4400 mt 6383 4427 L
+6383 4427 mt 6367 4455 L
+6367 4455 mt 6366 4457 L
+6366 4457 mt 6349 4482 L
+6349 4482 mt 6331 4504 L
+6331 4504 mt 6327 4510 L
+6327 4510 mt 6299 4537 L
+6299 4537 mt 6296 4540 L
+6296 4540 mt 6261 4565 L
+6261 4565 mt 6261 4565 L
+6261 4565 mt 6227 4580 L
+6227 4580 mt 6192 4587 L
+6192 4587 mt 6157 4591 L
+6157 4591 mt 6122 4591 L
+6122 4591 mt 6087 4588 L
+6087 4588 mt 6052 4581 L
+6052 4581 mt 6017 4570 L
+6017 4570 mt 6011 4565 L
+6011 4565 mt 5991 4537 L
+5991 4537 mt 5983 4510 L
+5983 4510 mt 5983 4508 L
+5983 4508 mt 5981 4482 L
+5981 4482 mt 5983 4469 L
+5983 4469 mt 5984 4455 L
+5984 4455 mt 5989 4427 L
+5989 4427 mt 5993 4400 L
+5993 4400 mt 5993 4372 L
+5993 4372 mt 5986 4345 L
+5986 4345 mt 5983 4337 L
+5983 4337 mt 5973 4317 L
+5973 4317 mt 5957 4290 L
+5957 4290 mt 5948 4272 L
+5948 4272 mt 5942 4262 L
+5942 4262 mt 5928 4235 L
+5928 4235 mt 5916 4207 L
+5916 4207 mt 5913 4199 L
+5913 4199 mt 5904 4180 L
+5904 4180 mt 5893 4152 L
+5893 4152 mt 5883 4125 L
+5883 4125 mt 5878 4110 L
+5878 4110 mt 5873 4097 L
+5873 4097 mt 5859 4070 L
+5859 4070 mt 5843 4042 L
+5843 4042 mt 5843 4042 L
+5843 4042 mt 5829 4015 L
+5829 4015 mt 5812 3987 L
+5812 3987 mt 5808 3982 L
+5808 3982 mt 5791 3960 L
+5791 3960 mt 5773 3936 L
+5773 3936 mt 5771 3932 L
+5771 3932 mt 5751 3905 L
+5751 3905 mt 5738 3888 L
+5738 3888 mt 5731 3877 L
+5731 3877 mt 5710 3850 L
+5710 3850 mt 5704 3842 L
+5704 3842 mt 5688 3822 L
+5688 3822 mt 5669 3801 L
+5669 3801 mt 5663 3795 L
+5663 3795 mt 5636 3767 L
+5636 3767 mt 5634 3766 L
+5634 3766 mt 5607 3740 L
+5607 3740 mt 5599 3732 L
+5599 3732 mt 5577 3712 L
+5577 3712 mt 5564 3700 L
+5564 3700 mt 5547 3685 L
+5547 3685 mt 5529 3670 L
+5529 3670 mt 5515 3657 L
+5515 3657 mt 5494 3639 L
+5494 3639 mt 5483 3630 L
+5483 3630 mt 5459 3607 L
+5459 3607 mt 5454 3602 L
+5454 3602 mt 5427 3575 L
+5427 3575 mt 5425 3572 L
+5425 3572 mt 5402 3547 L
+5402 3547 mt 5390 3533 L
+5390 3533 mt 5377 3519 L
+5377 3519 mt 5355 3494 L
+5355 3494 mt 5353 3492 L
+5353 3492 mt 5328 3464 L
+5328 3464 mt 5320 3454 L
+5320 3454 mt 5304 3437 L
+5304 3437 mt 5285 3414 L
+5285 3414 mt 5281 3409 L
+5281 3409 mt 5258 3382 L
+5258 3382 mt 5250 3372 L
+5250 3372 mt 5236 3354 L
+5236 3354 mt 5217 3327 L
+5217 3327 mt 5215 3325 L
+5215 3325 mt 5196 3299 L
+5196 3299 mt 5181 3278 L
+5181 3278 mt 5175 3272 L
+5175 3272 mt 5153 3244 L
+5153 3244 mt 5146 3235 L
+5146 3235 mt 5130 3217 L
+5130 3217 mt 5111 3196 L
+5111 3196 mt 5104 3189 L
+5104 3189 mt 5076 3162 L
+5076 3162 mt 5076 3161 L
+5076 3161 mt 5047 3134 L
+5047 3134 mt 5041 3129 L
+5041 3129 mt 5015 3107 L
+5015 3107 mt 5006 3100 L
+5006 3100 mt 4977 3079 L
+4977 3079 mt 4971 3076 L
+4971 3076 mt 4936 3056 L
+4936 3056 mt 4929 3052 L
+4929 3052 mt 4902 3037 L
+4902 3037 mt 4884 3024 L
+4884 3024 mt 4867 3012 L
+4867 3012 mt 4849 2997 L
+4849 2997 mt 4832 2982 L
+4832 2982 mt 4818 2969 L
+4818 2969 mt 4797 2952 L
+4797 2952 mt 4784 2942 L
+4784 2942 mt 4762 2923 L
+4762 2923 mt 4751 2914 L
+4751 2914 mt 4727 2894 L
+4727 2894 mt 4718 2887 L
+4718 2887 mt 4692 2863 L
+4692 2863 mt 4687 2859 L
+4687 2859 mt 4658 2832 L
+4658 2832 mt 4657 2831 L
+4657 2831 mt 4627 2804 L
+4627 2804 mt 4623 2801 L
+4623 2801 mt 4590 2777 L
+4590 2777 mt 4588 2775 L
+4588 2775 mt 4553 2751 L
+4553 2751 mt 4549 2749 L
+4549 2749 mt 4518 2731 L
+4518 2731 mt 4499 2722 L
+4499 2722 mt 4483 2714 L
+4483 2714 mt 4448 2698 L
+4448 2698 mt 4439 2694 L
+4439 2694 mt 4413 2683 L
+4413 2683 mt 4379 2668 L
+4379 2668 mt 4377 2667 L
+4377 2667 mt 4344 2651 L
+4344 2651 mt 4322 2639 L
+4322 2639 mt 4309 2631 L
+4309 2631 mt 4279 2612 L
+4279 2612 mt 4274 2608 L
+4274 2608 mt 4245 2584 L
+4245 2584 mt 4239 2579 L
+4239 2579 mt 4212 2557 L
+4212 2557 mt 4204 2551 L
+4204 2551 mt 4177 2529 L
+4177 2529 mt 4169 2523 L
+4169 2523 mt 4138 2502 L
+4138 2502 mt 4134 2499 L
+4134 2499 mt 4100 2478 L
+4100 2478 mt 4091 2474 L
+4091 2474 mt 4065 2461 L
+4065 2461 mt 4031 2446 L
+4031 2446 mt 4030 2446 L
+4030 2446 mt 3995 2432 L
+3995 2432 mt 3961 2419 L
+3961 2419 mt 3960 2419 L
+3960 2419 mt 3925 2406 L
+3925 2406 mt 3890 2393 L
+3890 2393 mt 3886 2391 L
+3886 2391 mt 3855 2380 L
+3855 2380 mt 3821 2366 L
+3821 2366 mt 3814 2364 L
+3814 2364 mt 3786 2352 L
+3786 2352 mt 3752 2336 L
+3752 2336 mt 3751 2336 L
+3751 2336 mt 3716 2333 L
+3716 2333 mt 3696 2336 L
+3696 2336 mt 3681 2342 L
+3681 2342 mt 3649 2364 L
+3649 2364 mt 3646 2366 L
+3646 2366 mt 3617 2391 L
+3617 2391 mt 3611 2397 L
+3611 2397 mt 3582 2419 L
+3582 2419 mt 3577 2423 L
+3577 2423 mt 3542 2445 L
+3542 2445 mt 3538 2446 L
+3538 2446 mt 3507 2457 L
+3507 2457 mt 3472 2469 L
+3472 2469 mt 3455 2474 L
+3455 2474 mt 3437 2479 L
+3437 2479 mt 3402 2489 L
+3402 2489 mt 3367 2500 L
+3367 2500 mt 3362 2502 L
+3362 2502 mt 3332 2511 L
+3332 2511 mt 3298 2523 L
+3298 2523 mt 3280 2529 L
+3280 2529 mt 3263 2535 L
+3263 2535 mt 3228 2548 L
+3228 2548 mt 3205 2557 L
+3205 2557 mt 3193 2561 L
+3193 2561 mt 3158 2575 L
+3158 2575 mt 3135 2584 L
+3135 2584 mt 3123 2589 L
+3123 2589 mt 3088 2602 L
+3088 2602 mt 3065 2612 L
+3065 2612 mt 3053 2616 L
+3053 2616 mt 3019 2630 L
+3019 2630 mt 2997 2639 L
+2997 2639 mt 2984 2644 L
+2984 2644 mt 2949 2661 L
+2949 2661 mt 2939 2667 L
+2939 2667 mt 2914 2680 L
+2914 2680 mt 2892 2694 L
+2892 2694 mt 2879 2703 L
+2879 2703 mt 2857 2722 L
+2857 2722 mt 2844 2734 L
+2844 2734 mt 2832 2749 L
+2832 2749 mt 2816 2777 L
+2816 2777 mt 2809 2796 L
+2809 2796 mt 2807 2804 L
+2807 2804 mt 2804 2832 L
+2804 2832 mt 2805 2859 L
+2805 2859 mt 2809 2887 L
+2809 2887 mt 2809 2889 L
+2809 2889 mt 2815 2914 L
+2815 2914 mt 2823 2942 L
+2823 2942 mt 2830 2969 L
+2830 2969 mt 2836 2997 L
+2836 2997 mt 2843 3024 L
+2843 3024 mt 2844 3029 L
+2844 3029 mt 2852 3052 L
+2852 3052 mt 2869 3079 L
+2869 3079 mt 2879 3090 L
+2879 3090 mt 2897 3107 L
+2897 3107 mt 2914 3119 L
+2914 3119 mt 2934 3134 L
+2934 3134 mt 2949 3143 L
+2949 3143 mt 2975 3162 L
+2975 3162 mt 2984 3167 L
+2984 3167 mt 3017 3189 L
+3017 3189 mt 3019 3190 L
+3019 3190 mt 3053 3213 L
+3053 3213 mt 3059 3217 L
+3059 3217 mt 3088 3238 L
+3088 3238 mt 3097 3244 L
+3097 3244 mt 3123 3265 L
+3123 3265 mt 3133 3272 L
+3133 3272 mt 3158 3290 L
+3158 3290 mt 3172 3299 L
+3172 3299 mt 3193 3314 L
+3193 3314 mt 3213 3327 L
+3213 3327 mt 3228 3336 L
+3228 3336 mt 3258 3354 L
+3258 3354 mt 3263 3357 L
+3263 3357 mt 3298 3378 L
+3298 3378 mt 3303 3382 L
+3303 3382 mt 3332 3402 L
+3332 3402 mt 3342 3409 L
+3342 3409 mt 3367 3428 L
+3367 3428 mt 3379 3437 L
+3379 3437 mt 3402 3457 L
+3402 3457 mt 3410 3464 L
+3410 3464 mt 3436 3492 L
+3436 3492 mt 3437 3494 L
+3437 3494 mt 3459 3519 L
+3459 3519 mt 3472 3536 L
+3472 3536 mt 3481 3547 L
+3481 3547 mt 3501 3575 L
+3501 3575 mt 3507 3581 L
+3507 3581 mt 3519 3602 L
+3519 3602 mt 3542 3629 L
+3542 3629 mt 3542 3630 L
+3542 3630 mt 3562 3657 L
+3562 3657 mt 3577 3679 L
+3577 3679 mt 3580 3685 L
+3580 3685 mt 3584 3712 L
+3584 3712 mt 3577 3740 L
+3577 3740 mt 3577 3740 L
+3577 3740 mt 3555 3767 L
+3555 3767 mt 3542 3781 L
+3542 3781 mt 3527 3795 L
+3527 3795 mt 3507 3816 L
+3507 3816 mt 3502 3822 L
+3502 3822 mt 3481 3850 L
+3481 3850 mt 3472 3862 L
+3472 3862 mt 3463 3877 L
+3463 3877 mt 3449 3905 L
+3449 3905 mt 3438 3932 L
+3438 3932 mt 3437 3934 L
+3437 3934 mt 3427 3960 L
+3427 3960 mt 3428 3987 L
+3428 3987 mt 3437 4002 L
+3437 4002 mt 3446 4015 L
+3446 4015 mt 3472 4035 L
+3472 4035 mt 3484 4042 L
+3484 4042 mt 3507 4053 L
+3507 4053 mt 3542 4070 L
+3542 4070 mt 3542 4070 L
+3542 4070 mt 3577 4087 L
+3577 4087 mt 3594 4097 L
+3594 4097 mt 3611 4112 L
+3611 4112 mt 3625 4125 L
+3625 4125 mt 3640 4152 L
+3640 4152 mt 3641 4180 L
+3641 4180 mt 3627 4207 L
+3627 4207 mt 3611 4220 L
+3611 4220 mt 3593 4235 L
+3593 4235 mt 3577 4244 L
+3577 4244 mt 3542 4261 L
+3542 4261 mt 3539 4262 L
+3539 4262 mt 3507 4285 L
+3507 4285 mt 3501 4290 L
+3501 4290 mt 3479 4317 L
+3479 4317 mt 3472 4341 L
+3472 4341 mt 3471 4345 L
+3471 4345 mt 3472 4350 L
+3472 4350 mt 3477 4372 L
+3477 4372 mt 3501 4400 L
+3501 4400 mt 3507 4404 L
+3507 4404 mt 3536 4427 L
+3536 4427 mt 3542 4432 L
+3542 4432 mt 3577 4455 L
+3577 4455 mt 3577 4455 L
+3577 4455 mt 3608 4482 L
+3608 4482 mt 3611 4487 L
+3611 4487 mt 3626 4510 L
+3626 4510 mt 3639 4537 L
+3639 4537 mt 3646 4563 L
+3646 4563 mt 3647 4565 L
+3647 4565 mt 3651 4592 L
+3651 4592 mt 3646 4610 L
+3646 4610 mt 3644 4620 L
+3644 4620 mt 3629 4648 L
+3629 4648 mt 3611 4673 L
+3611 4673 mt 3610 4675 L
+3610 4675 mt 3586 4703 L
+3586 4703 mt 3577 4713 L
+3577 4713 mt 3559 4730 L
+3559 4730 mt 3542 4746 L
+3542 4746 mt 3527 4758 L
+3527 4758 mt 3507 4774 L
+3507 4774 mt 3491 4785 L
+3491 4785 mt 3472 4798 L
+3472 4798 mt 3449 4813 L
+3449 4813 mt 3437 4820 L
+3437 4820 mt 3403 4840 L
+3403 4840 mt 3402 4841 L
+3402 4841 mt 3367 4859 L
+3367 4859 mt 3351 4868 L
+3351 4868 mt 3332 4877 L
+3332 4877 mt 3298 4893 L
+3298 4893 mt 3293 4895 L
+3293 4895 mt 3263 4908 L
+3263 4908 mt 3228 4922 L
+3228 4922 mt 3226 4923 L
+3226 4923 mt 3193 4935 L
+3193 4935 mt 3158 4947 L
+3158 4947 mt 3150 4950 L
+3150 4950 mt 3123 4959 L
+3123 4959 mt 3088 4970 L
+3088 4970 mt 3063 4978 L
+3063 4978 mt 3053 4981 L
+3053 4981 mt 3019 4990 L
+3019 4990 mt 2984 4999 L
+2984 4999 mt 2959 5005 L
+2959 5005 mt 2949 5008 L
+2949 5008 mt 2914 5015 L
+2914 5015 mt 2879 5022 L
+2879 5022 mt 2844 5029 L
+2844 5029 mt 2819 5033 L
+2819 5033 mt 2809 5034 L
+2809 5034 mt 2774 5040 L
+2774 5040 mt 2740 5044 L
+2740 5044 mt 2705 5048 L
+2705 5048 mt 2670 5052 L
+2670 5052 mt 2635 5055 L
+2635 5055 mt 2600 5057 L
+2600 5057 mt 2565 5059 L
+2565 5059 mt 2535 5060 L
+2535 5060 mt 2530 5060 L
+2530 5060 mt 2496 5061 L
+2496 5061 mt 2461 5061 L
+2461 5061 mt 2426 5061 L
+2426 5061 mt 2397 5060 L
+2397 5060 mt 2391 5060 L
+2391 5060 mt 2356 5059 L
+2356 5059 mt 2321 5057 L
+2321 5057 mt 2286 5054 L
+2286 5054 mt 2251 5051 L
+2251 5051 mt 2217 5047 L
+2217 5047 mt 2182 5042 L
+2182 5042 mt 2147 5037 L
+2147 5037 mt 2123 5033 L
+2123 5033 mt 2112 5031 L
+2112 5031 mt 2077 5024 L
+2077 5024 mt 2042 5017 L
+2042 5017 mt 2007 5009 L
+2007 5009 mt 1994 5005 L
+1994 5005 mt 1972 5000 L
+1972 5000 mt 1938 4990 L
+1938 4990 mt 1903 4980 L
+1903 4980 mt 1895 4978 L
+1895 4978 mt 1868 4969 L
+1868 4969 mt 1833 4957 L
+1833 4957 mt 1814 4950 L
+1814 4950 mt 1798 4944 L
+1798 4944 mt 1763 4930 L
+1763 4930 mt 1748 4923 L
+1748 4923 mt 1728 4914 L
+1728 4914 mt 1694 4896 L
+1694 4896 mt 1692 4895 L
+1692 4895 mt 1659 4877 L
+1659 4877 mt 1644 4868 L
+1644 4868 mt 1624 4855 L
+1624 4855 mt 1602 4840 L
+1602 4840 mt 1589 4831 L
+1589 4831 mt 1564 4813 L
+1564 4813 mt 1554 4804 L
+1554 4804 mt 1531 4785 L
+1531 4785 mt 1519 4774 L
+1519 4774 mt 1501 4758 L
+1501 4758 mt 1484 4740 L
+1484 4740 mt 1475 4730 L
+1475 4730 mt 1451 4703 L
+1451 4703 mt 1449 4701 L
+1449 4701 mt 1429 4675 L
+1429 4675 mt 1415 4656 L
+1415 4656 mt 1408 4648 L
+1408 4648 mt 1390 4620 L
+1390 4620 mt 1380 4604 L
+1380 4604 mt 1373 4592 L
+1373 4592 mt 1356 4565 L
+1356 4565 mt 1345 4545 L
+1345 4545 mt 1341 4537 L
+1341 4537 mt 1326 4510 L
+1326 4510 mt 1312 4482 L
+1312 4482 mt 1310 4478 L
+1310 4478 mt 1299 4455 L
+1299 4455 mt 1286 4427 L
+1286 4427 mt 1275 4401 L
+1275 4401 mt 1275 4400 L
+1275 4400 mt 1264 4372 L
+1264 4372 mt 1254 4345 L
+1254 4345 mt 1245 4317 L
+1245 4317 mt 1240 4301 L
+1240 4301 mt 1237 4290 L
+1237 4290 mt 1230 4262 L
+1230 4262 mt 1223 4235 L
+1223 4235 mt 1218 4207 L
+1218 4207 mt 1213 4180 L
+1213 4180 mt 1209 4152 L
+1209 4152 mt 1206 4125 L
+1206 4125 mt 1205 4114 L
+1205 4114 mt 1204 4097 L
+1204 4097 mt 1202 4070 L
+1202 4070 mt 1200 4042 L
+1200 4042 mt 1199 4015 L
+1199 4015 mt 1199 3987 L
+1199 3987 mt 1198 3960 L
+1198 3960 mt 1198 3932 L
+1198 3932 mt 1197 3905 L
+1197 3905 mt 1196 3877 L
+1196 3877 mt 1195 3850 L
+1195 3850 mt 1193 3822 L
+1193 3822 mt 1190 3795 L
+1190 3795 mt 1186 3767 L
+1186 3767 mt 1180 3740 L
+1180 3740 mt 1173 3712 L
+1173 3712 mt 1170 3706 L
+1170 3706 mt 1163 3685 L
+1163 3685 mt 1151 3657 L
+1151 3657 mt 1136 3630 L
+1136 3630 mt 1136 3629 L
+1136 3629 mt 1119 3602 L
+1119 3602 mt 1101 3578 L
+1101 3578 mt 1098 3575 L
+1098 3575 mt 1075 3547 L
+1075 3547 mt 1066 3538 L
+1066 3538 mt 1048 3519 L
+1048 3519 mt 1031 3504 L
+1031 3504 mt 1018 3492 L
+1018 3492 mt 996 3474 L
+ 996 3474 mt 984 3464 L
+ 984 3464 mt 961 3447 L
+ 961 3447 mt 949 3437 L
+ 949 3437 mt 926 3420 L
+ 926 3420 mt 912 3409 L
+ 912 3409 mt 892 3395 L
+ 892 3395 mt 874 3382 L
+ 874 3382 mt 857 3370 L
+ 857 3370 mt 835 3354 L
+ 835 3354 mt 822 3346 L
+ 822 3346 mt 795 3327 L
+ 795 3327 mt 787 3321 L
+ 787 3321 mt 756 3299 L
+ 756 3299 mt 752 3297 L
+ 752 3297 mt 717 3272 L
+ 717 3272 mt 717 3272 L
+ 717 3272 mt 682 3247 L
+ 682 3247 mt 678 3244 L
+ 678 3244 mt 647 3222 L
+ 647 3222 mt 641 3217 L
+ 641 3217 mt 613 3196 L
+ 613 3196 mt 604 3189 L
+ 604 3189 mt 578 3169 L
+ 578 3169 mt 569 3162 L
+ 569 3162 mt 543 3141 L
+ 543 3141 mt 534 3134 L
+ 534 3134 mt 508 3113 L
+ 508 3113 mt 501 3107 L
+ 501 3107 mt 473 3083 L
+ 473 3083 mt 469 3079 L
+ 469 3079 mt 439 3052 L
+ 439 3052 mt 438 3051 L
+ 438 3051 mt 410 3024 L
+ 410 3024 mt 403 3017 L
+ 403 3017 mt 383 2997 L
+ 383 2997 mt 368 2981 L
+ 368 2981 mt 357 2969 L
+ 357 2969 mt 334 2942 L
+ 334 2942 mt 333 2942 L
+ 333 2942 mt 310 2914 L
+ 310 2914 mt 299 2900 L
+ 299 2900 mt 288 2887 L
+ 288 2887 mt 268 2859 L
+ 268 2859 mt 264 2854 L
+ 264 2854 mt 248 2832 L
+ 248 2832 mt 230 2804 L
+ 230 2804 mt 229 2803 L
+ 229 2803 mt 212 2777 L
+ 212 2777 mt 196 2749 L
+ 196 2749 mt 194 2746 L
+ 194 2746 mt 180 2722 L
+ 180 2722 mt 165 2694 L
+ 165 2694 mt 159 2682 L
+ 159 2682 mt 151 2667 L
+ 151 2667 mt 139 2639 L
+ 139 2639 mt 127 2612 L
+ 127 2612 mt 124 2604 L
+ 124 2604 mt 117 2584 L
+ 117 2584 mt 107 2557 L
+ 107 2557 mt 99 2529 L
+ 99 2529 mt 92 2502 L
+ 92 2502 mt 90 2490 L
+ 90 2490 mt 86 2474 L
+ 86 2474 mt 81 2446 L
+ 81 2446 mt 76 2419 L
+ 76 2419 mt 73 2391 L
+ 73 2391 mt 70 2364 L
+ 70 2364 mt 68 2336 L
+ 68 2336 mt 67 2309 L
+ 67 2309 mt 66 2281 L
+ 66 2281 mt 66 2254 L
+ 66 2254 mt 67 2226 L
+ 67 2226 mt 68 2199 L
+ 68 2199 mt 69 2171 L
+ 69 2171 mt 71 2144 L
+ 71 2144 mt 74 2116 L
+ 74 2116 mt 77 2089 L
+ 77 2089 mt 81 2061 L
+ 81 2061 mt 86 2034 L
+ 86 2034 mt 90 2013 L
+ 90 2013 mt 91 2006 L
+ 91 2006 mt 96 1979 L
+ 96 1979 mt 102 1951 L
+ 102 1951 mt 109 1924 L
+ 109 1924 mt 116 1896 L
+ 116 1896 mt 123 1869 L
+ 123 1869 mt 124 1864 L
+ 124 1864 mt 130 1841 L
+ 130 1841 mt 138 1814 L
+ 138 1814 mt 145 1786 L
+ 145 1786 mt 153 1759 L
+ 153 1759 mt 159 1736 L
+ 159 1736 mt 161 1731 L
+ 161 1731 mt 168 1704 L
+ 168 1704 mt 176 1676 L
+ 176 1676 mt 183 1649 L
+ 183 1649 mt 190 1621 L
+ 190 1621 mt 194 1606 L
+ 194 1606 mt 197 1594 L
+ 197 1594 mt 204 1566 L
+ 204 1566 mt 210 1539 L
+ 210 1539 mt 217 1511 L
+ 217 1511 mt 223 1484 L
+ 223 1484 mt 229 1459 L
+ 229 1459 mt 230 1456 L
+ 230 1456 mt 236 1428 L
+ 236 1428 mt 242 1401 L
+ 242 1401 mt 249 1373 L
+ 249 1373 mt 255 1346 L
+ 255 1346 mt 262 1318 L
+ 262 1318 mt 264 1311 L
+ 264 1311 mt 269 1291 L
+ 269 1291 mt 276 1263 L
+ 276 1263 mt 283 1236 L
+ 283 1236 mt 291 1208 L
+ 291 1208 mt 299 1181 L
+ 299 1181 mt 299 1180 L
+ 299 1180 mt 307 1153 L
+ 307 1153 mt 316 1126 L
+ 316 1126 mt 325 1098 L
+ 325 1098 mt 334 1074 L
+ 334 1074 mt 335 1071 L
+ 335 1071 mt 345 1043 L
+ 345 1043 mt 356 1016 L
+ 356 1016 mt 367 988 L
+ 367 988 mt 368 986 L
+ 368 986 mt 379 961 L
+ 379 961 mt 392 933 L
+ 392 933 mt 403 909 L
+ 403 909 mt 405 906 L
+ 405 906 mt 419 878 L
+ 419 878 mt 433 851 L
+ 433 851 mt 438 841 L
+ 438 841 mt 448 823 L
+ 448 823 mt 463 796 L
+ 463 796 mt 473 779 L
+ 473 779 mt 479 768 L
+ 479 768 mt 496 741 L
+ 496 741 mt 508 722 L
+ 508 722 mt 514 713 L
+ 514 713 mt 532 686 L
+ 532 686 mt 543 670 L
+ 543 670 mt 551 658 L
+ 551 658 mt 570 631 L
+ 570 631 mt 578 621 L
+ 578 621 mt 591 603 L
+ 591 603 mt 612 576 L
+ 612 576 mt 613 575 L
+ 613 575 mt 633 548 L
+ 633 548 mt 647 531 L
+ 647 531 mt 656 521 L
+ 656 521 mt 679 493 L
+ 679 493 mt 682 489 L
+ 682 489 mt 703 466 L
+ 703 466 mt 717 451 L
+ 717 451 mt 729 438 L
+ 729 438 mt 752 415 L
+ 752 415 mt 756 411 L
+ 756 411 mt 785 383 L
+ 785 383 mt 787 381 L
+ 787 381 mt 816 355 L
+ 816 355 mt 822 351 L
+ 822 351 mt 850 328 L
+ 850 328 mt 857 322 L
+ 857 322 mt 886 300 L
+ 886 300 mt 892 296 L
+ 892 296 mt 925 273 L
+ 925 273 mt 926 272 L
+ 926 272 mt 961 250 L
+ 961 250 mt 968 245 L
+ 968 245 mt 996 229 L
+ 996 229 mt 1015 218 L
+1015 218 mt 1031 209 L
+1031 209 mt 1066 191 L
+1066 191 mt 1066 190 L
+1066 190 mt 1101 173 L
+1101 173 mt 1123 163 L
+1123 163 mt 1136 157 L
+1136 157 mt 1170 142 L
+1170 142 mt 1187 135 L
+1187 135 mt 1205 128 L
+1205 128 mt 1240 115 L
+1240 115 mt 1260 108 L
+1260 108 mt 1275 102 L
+1275 102 mt 1310 90 L
+1310 90 mt 1341 80 L
+1341 80 mt 1345 79 L
+1345 79 mt 1380 68 L
+1380 68 mt 1415 58 L
+1415 58 mt 1434 53 L
+1434 53 mt 1449 48 L
+1449 48 mt 1484 39 L
+1484 39 mt 1519 30 L
+1519 30 mt 1538 25 L
+1538 25 mt 1554 21 L
+1554 21 mt 1589 13 L
+1589 13 mt 1624 5 L
+1624 5 mt 1654 -1 L
+1654 -1 mt 1659 -2 L
+1659 -2 mt 1694 -10 L
+1694 -10 mt 1728 -17 L
+1728 -17 mt 1763 -25 L
+1763 -25 mt 1783 -29 L
+1783 -29 mt 1798 -32 L
+1798 -32 mt 1833 -39 L
+1833 -39 mt 1868 -46 L
+1868 -46 mt 1903 -52 L
+1903 -52 mt 1924 -56 L
+1924 -56 mt 1938 -59 L
+1938 -59 mt 1972 -65 L
+1972 -65 mt 2007 -72 L
+2007 -72 mt 2042 -78 L
+2042 -78 mt 2075 -84 L
+2075 -84 mt 2077 -84 L
+2077 -84 mt 2112 -90 L
+2112 -90 mt 2147 -96 L
+2147 -96 mt 2182 -102 L
+2182 -102 mt 2217 -108 L
+2217 -108 mt 2237 -111 L
+2237 -111 mt 2251 -114 L
+2251 -114 mt 2286 -120 L
+2286 -120 mt 2321 -126 L
+2321 -126 mt 2356 -133 L
+2356 -133 mt 2389 -139 L
+2389 -139 mt 2391 -139 L
+2391 -139 mt 2426 -146 L
+2426 -146 mt 2461 -152 L
+2461 -152 mt 2496 -158 L
+2496 -158 mt 2530 -164 L
+2530 -164 mt 2542 -166 L
+2542 -166 mt 2565 -170 L
+2565 -170 mt 2600 -176 L
+2600 -176 mt 2635 -182 L
+2635 -182 mt 2670 -188 L
+2670 -188 mt 2702 -194 L
+2702 -194 mt 2705 -194 L
+2705 -194 mt 2740 -200 L
+2740 -200 mt 2774 -206 L
+2774 -206 mt 2809 -212 L
+2809 -212 mt 2844 -217 L
+2844 -217 mt 2869 -221 L
+2869 -221 mt 2879 -223 L
+2879 -223 mt 2914 -229 L
+2914 -229 mt 2949 -234 L
+2949 -234 mt 2984 -240 L
+2984 -240 mt 3019 -245 L
+3019 -245 mt 3041 -249 L
+3041 -249 mt 3053 -251 L
+3053 -251 mt 3088 -256 L
+3088 -256 mt 3123 -262 L
+3123 -262 mt 3158 -267 L
+3158 -267 mt 3193 -272 L
+3193 -272 mt 3220 -276 L
+3220 -276 mt 3228 -277 L
+3228 -277 mt 3263 -283 L
+3263 -283 mt 3298 -287 L
+3298 -287 mt 3332 -292 L
+3332 -292 mt 3367 -296 L
+3367 -296 mt 3402 -301 L
+3402 -301 mt 3432 -304 L
+3432 -304 mt 3437 -304 L
+3437 -304 mt 3472 -308 L
+3472 -308 mt 3507 -312 L
+3507 -312 mt 3542 -315 L
+3542 -315 mt 3577 -318 L
+3577 -318 mt 3611 -321 L
+3611 -321 mt 3646 -323 L
+3646 -323 mt 3681 -325 L
+3681 -325 mt 3716 -327 L
+3716 -327 mt 3751 -329 L
+3751 -329 mt 3786 -330 L
+3786 -330 mt 3818 -331 L
+3818 -331 mt 3821 -331 L
+3821 -331 mt 3855 -332 L
+3855 -332 mt 3890 -333 L
+3890 -333 mt 3925 -334 L
+3925 -334 mt 3960 -334 L
+3960 -334 mt 3995 -334 L
+3995 -334 mt 4030 -334 L
+4030 -334 mt 4065 -334 L
+4065 -334 mt 4100 -333 L
+4100 -333 mt 4134 -332 L
+4134 -332 mt 4154 -331 L
+4154 -331 mt 4169 -331 L
+4169 -331 mt 4204 -329 L
+4204 -329 mt 4239 -327 L
+4239 -327 mt 4274 -325 L
+4274 -325 mt 4309 -323 L
+4309 -323 mt 4344 -320 L
+4344 -320 mt 4379 -317 L
+4379 -317 mt 4413 -313 L
+4413 -313 mt 4448 -309 L
+4448 -309 mt 4483 -305 L
+4483 -305 mt 4493 -304 L
+4493 -304 mt 4518 -301 L
+4518 -301 mt 4553 -296 L
+4553 -296 mt 4588 -290 L
+4588 -290 mt 4623 -284 L
+4623 -284 mt 4657 -278 L
+4657 -278 mt 4666 -276 L
+4666 -276 mt 4692 -271 L
+4692 -271 mt 4727 -264 L
+4727 -264 mt 4762 -257 L
+4762 -257 mt 4797 -249 L
+4797 -249 mt 4797 -249 L
+4797 -249 mt 4832 -241 L
+4832 -241 mt 4867 -232 L
+4867 -232 mt 4902 -223 L
+4902 -223 mt 4907 -221 L
+4907 -221 mt 4936 -213 L
+4936 -213 mt 4971 -203 L
+4971 -203 mt 5003 -194 L
+5003 -194 mt 5006 -193 L
+5006 -193 mt 5041 -182 L
+5041 -182 mt 5076 -171 L
+5076 -171 mt 5090 -166 L
+5090 -166 mt 5111 -159 L
+5111 -159 mt 5146 -148 L
+5146 -148 mt 5170 -139 L
+5170 -139 mt 5181 -135 L
+5181 -135 mt 5215 -123 L
+5215 -123 mt 5245 -111 L
+5245 -111 mt 5250 -109 L
+5250 -109 mt 5285 -95 L
+5285 -95 mt 5313 -84 L
+5313 -84 mt 5320 -81 L
+5320 -81 mt 5355 -66 L
+5355 -66 mt 5376 -56 L
+5376 -56 mt 5390 -50 L
+5390 -50 mt 5425 -34 L
+5425 -34 mt 5434 -29 L
+5434 -29 mt 5459 -16 L
+5459 -16 mt 5488 -1 L
+5488 -1 mt 5494 1 L
+5494 1 mt 5529 20 L
+5529 20 mt 5539 25 L
+5539 25 mt 5564 40 L
+5564 40 mt 5586 53 L
+5586 53 mt 5599 61 L
+5599 61 mt 5630 80 L
+5630 80 mt 5634 83 L
+5634 83 mt 5669 106 L
+5669 106 mt 5672 108 L
+5672 108 mt 5704 130 L
+5704 130 mt 5711 135 L
+5711 135 mt 5738 155 L
+5738 155 mt 5749 163 L
+5749 163 mt 5773 181 L
+5773 181 mt 5786 190 L
+5786 190 mt 5808 208 L
+5808 208 mt 5821 218 L
+5821 218 mt 5843 236 L
+5843 236 mt 5855 245 L
+5855 245 mt 5878 265 L
+5878 265 mt 5888 273 L
+5888 273 mt 5913 295 L
+5913 295 mt 5919 300 L
+5919 300 mt 5948 325 L
+5948 325 mt 5951 328 L
+5951 328 mt 5981 355 L
+5981 355 mt 5983 357 L
+5983 357 mt 6010 383 L
+6010 383 mt 6017 390 L
+6017 390 mt 6040 411 L
+6040 411 mt 6052 423 L
+6052 423 mt 6068 438 L
+6068 438 mt 6087 456 L
+6087 456 mt 6097 466 L
+6097 466 mt 6122 490 L
+6122 490 mt 6126 493 L
+6126 493 mt 6154 521 L
+6154 521 mt 6157 523 L
+6157 523 mt 6183 548 L
+6183 548 mt 6192 557 L
+6192 557 mt 6211 576 L
+6211 576 mt 6227 590 L
+6227 590 mt 6240 603 L
+6240 603 mt 6261 624 L
+6261 624 mt 6268 631 L
+6268 631 mt 6296 658 L
+6296 658 mt 6296 658 L
+6296 658 mt 6325 686 L
+6325 686 mt 6331 692 L
+6331 692 mt 6353 713 L
+6353 713 mt 6366 726 L
+6366 726 mt 6381 741 L
+6381 741 mt 6401 761 L
+6401 761 mt 6409 768 L
+6409 768 mt 6436 795 L
+6436 795 mt 6437 796 L
+6437 796 mt 6465 823 L
+6465 823 mt 6471 829 L
+6471 829 mt 6493 851 L
+6493 851 mt 6506 863 L
+6506 863 mt 6521 878 L
+6521 878 mt 6540 898 L
+6540 898 mt 6548 906 L
+6548 906 mt 6575 933 L
+6575 933 mt 6575 933 L
+6575 933 mt 6602 961 L
+6602 961 mt 6610 969 L
+6610 969 mt 6629 988 L
+6629 988 mt 6645 1006 L
+6645 1006 mt 6655 1016 L
+6655 1016 mt 6680 1043 L
+6680 1043 mt 6680 1043 L
+6680 1043 mt 6705 1071 L
+6705 1071 mt 6715 1081 L
+6715 1081 mt 6730 1098 L
+6730 1098 mt 6750 1121 L
+6750 1121 mt 6754 1126 L
+6754 1126 mt 6778 1153 L
+6778 1153 mt 6785 1161 L
+6785 1161 mt 6801 1181 L
+6801 1181 mt 6819 1203 L
+6819 1203 mt 6824 1208 L
+6824 1208 mt 6847 1236 L
+6847 1236 mt 6854 1245 L
+6854 1245 mt 6869 1263 L
+6869 1263 mt 6889 1290 L
+6889 1290 mt 6890 1291 L
+6890 1291 mt 6911 1318 L
+6911 1318 mt 6924 1336 L
+6924 1336 mt 6931 1346 L
+6931 1346 mt 6951 1373 L
+6951 1373 mt 6959 1384 L
+6959 1384 mt 6971 1401 L
+6971 1401 mt 6990 1428 L
+6990 1428 mt 6994 1435 L
+6994 1435 mt 7008 1456 L
+7008 1456 mt 7026 1484 L
+7026 1484 mt 7029 1488 L
+7029 1488 mt 7043 1511 L
+7043 1511 mt 7060 1539 L
+7060 1539 mt 7063 1545 L
+7063 1545 mt 7076 1566 L
+7076 1566 mt 7091 1594 L
+7091 1594 mt 7098 1607 L
+7098 1607 mt 7106 1621 L
+7106 1621 mt 7121 1649 L
+7121 1649 mt 7133 1674 L
+7133 1674 mt 7134 1676 L
+7134 1676 mt 7147 1704 L
+7147 1704 mt 7159 1731 L
+7159 1731 mt 7168 1753 L
+7168 1753 mt 7170 1759 L
+7170 1759 mt 7181 1786 L
+7181 1786 mt 7191 1814 L
+7191 1814 mt 7200 1841 L
+7200 1841 mt 7203 1853 L
+7203 1853 mt 7208 1869 L
+7208 1869 mt 7215 1896 L
+7215 1896 mt 7221 1924 L
+7221 1924 mt 7227 1951 L
+7227 1951 mt 7232 1979 L
+7232 1979 mt 7235 2006 L
+7235 2006 mt 7238 2031 L
+7168 2056 mt 7168 2061 L
+7168 2061 mt 7169 2089 L
+7169 2089 mt 7170 2116 L
+7170 2116 mt 7169 2144 L
+7169 2144 mt 7168 2171 L
+7168 2171 mt 7168 2178 L
+7168 2178 mt 7167 2199 L
+7167 2199 mt 7165 2226 L
+7165 2226 mt 7162 2254 L
+7162 2254 mt 7159 2281 L
+7159 2281 mt 7155 2309 L
+7155 2309 mt 7151 2336 L
+7151 2336 mt 7147 2364 L
+7147 2364 mt 7142 2391 L
+7142 2391 mt 7136 2419 L
+7136 2419 mt 7133 2432 L
+7133 2432 mt 7130 2446 L
+7130 2446 mt 7124 2474 L
+7124 2474 mt 7118 2502 L
+7118 2502 mt 7111 2529 L
+7111 2529 mt 7103 2557 L
+7103 2557 mt 7098 2573 L
+7098 2573 mt 7095 2584 L
+7095 2584 mt 7087 2612 L
+7087 2612 mt 7079 2639 L
+7079 2639 mt 7071 2667 L
+7071 2667 mt 7063 2689 L
+7063 2689 mt 7062 2694 L
+7062 2694 mt 7053 2722 L
+7053 2722 mt 7044 2749 L
+7044 2749 mt 7035 2777 L
+7035 2777 mt 7029 2796 L
+7029 2796 mt 7026 2804 L
+7026 2804 mt 7017 2832 L
+7017 2832 mt 7007 2859 L
+7007 2859 mt 6997 2887 L
+6997 2887 mt 6994 2897 L
+6994 2897 mt 6988 2914 L
+6988 2914 mt 6978 2942 L
+6978 2942 mt 6968 2969 L
+6968 2969 mt 6959 2993 L
+6959 2993 mt 6957 2997 L
+6957 2997 mt 6947 3024 L
+6947 3024 mt 6937 3052 L
+6937 3052 mt 6926 3079 L
+6926 3079 mt 6924 3084 L
+6924 3084 mt 6915 3107 L
+6915 3107 mt 6904 3134 L
+6904 3134 mt 6893 3162 L
+6893 3162 mt 6889 3173 L
+6889 3173 mt 6882 3189 L
+6882 3189 mt 6872 3217 L
+6872 3217 mt 6861 3244 L
+6861 3244 mt 6854 3261 L
+6854 3261 mt 6850 3272 L
+6850 3272 mt 6840 3299 L
+6840 3299 mt 6829 3327 L
+6829 3327 mt 6819 3352 L
+6819 3352 mt 6819 3354 L
+6819 3354 mt 6808 3382 L
+6808 3382 mt 6798 3409 L
+6798 3409 mt 6788 3437 L
+6788 3437 mt 6785 3445 L
+6785 3445 mt 6777 3464 L
+6777 3464 mt 6766 3492 L
+6766 3492 mt 6755 3519 L
+6755 3519 mt 6750 3534 L
+6750 3534 mt 6744 3547 L
+6744 3547 mt 6733 3575 L
+6733 3575 mt 6721 3602 L
+6721 3602 mt 6715 3617 L
+6715 3617 mt 6709 3630 L
+6709 3630 mt 6697 3657 L
+6697 3657 mt 6685 3685 L
+6685 3685 mt 6680 3697 L
+6680 3697 mt 6673 3712 L
+6673 3712 mt 6661 3740 L
+6661 3740 mt 6649 3767 L
+6649 3767 mt 6645 3775 L
+6645 3775 mt 6636 3795 L
+6636 3795 mt 6623 3822 L
+6623 3822 mt 6610 3849 L
+6610 3849 mt 6610 3850 L
+6610 3850 mt 6597 3877 L
+6597 3877 mt 6583 3905 L
+6583 3905 mt 6575 3920 L
+6575 3920 mt 6569 3932 L
+6569 3932 mt 6555 3960 L
+6555 3960 mt 6540 3986 L
+6540 3986 mt 6540 3987 L
+6540 3987 mt 6525 4015 L
+6525 4015 mt 6510 4042 L
+6510 4042 mt 6506 4050 L
+6506 4050 mt 6495 4070 L
+6495 4070 mt 6479 4097 L
+6479 4097 mt 6471 4114 L
+6471 4114 mt 6465 4125 L
+6465 4125 mt 6451 4152 L
+6451 4152 mt 6437 4180 L
+6437 4180 mt 6436 4182 L
+6436 4182 mt 6424 4207 L
+6424 4207 mt 6411 4235 L
+6411 4235 mt 6401 4257 L
+6401 4257 mt 6399 4262 L
+6399 4262 mt 6386 4290 L
+6386 4290 mt 6375 4317 L
+6375 4317 mt 6366 4339 L
+6366 4339 mt 6364 4345 L
+6364 4345 mt 6353 4372 L
+6353 4372 mt 6343 4400 L
+6343 4400 mt 6332 4427 L
+6332 4427 mt 6331 4428 L
+6331 4428 mt 6318 4455 L
+6318 4455 mt 6301 4482 L
+6301 4482 mt 6296 4488 L
+6296 4488 mt 6278 4510 L
+6278 4510 mt 6261 4526 L
+6261 4526 mt 6249 4537 L
+6249 4537 mt 6227 4551 L
+6227 4551 mt 6192 4558 L
+6192 4558 mt 6157 4557 L
+6157 4557 mt 6122 4554 L
+6122 4554 mt 6087 4538 L
+6087 4538 mt 6086 4537 L
+6086 4537 mt 6068 4510 L
+6068 4510 mt 6064 4482 L
+6064 4482 mt 6065 4455 L
+6065 4455 mt 6068 4427 L
+6068 4427 mt 6071 4400 L
+6071 4400 mt 6070 4372 L
+6070 4372 mt 6066 4345 L
+6066 4345 mt 6060 4317 L
+6060 4317 mt 6052 4290 L
+6052 4290 mt 6052 4289 L
+6052 4289 mt 6045 4262 L
+6045 4262 mt 6038 4235 L
+6038 4235 mt 6032 4207 L
+6032 4207 mt 6026 4180 L
+6026 4180 mt 6019 4152 L
+6019 4152 mt 6017 4144 L
+6017 4144 mt 6012 4125 L
+6012 4125 mt 6003 4097 L
+6003 4097 mt 5992 4070 L
+5992 4070 mt 5983 4050 L
+5983 4050 mt 5978 4042 L
+5978 4042 mt 5961 4015 L
+5961 4015 mt 5948 3994 L
+5948 3994 mt 5943 3987 L
+5943 3987 mt 5922 3960 L
+5922 3960 mt 5913 3948 L
+5913 3948 mt 5900 3932 L
+5900 3932 mt 5879 3905 L
+5879 3905 mt 5878 3904 L
+5878 3904 mt 5858 3877 L
+5858 3877 mt 5843 3859 L
+5843 3859 mt 5835 3850 L
+5835 3850 mt 5810 3822 L
+5810 3822 mt 5808 3821 L
+5808 3821 mt 5780 3795 L
+5780 3795 mt 5773 3789 L
+5773 3789 mt 5747 3767 L
+5747 3767 mt 5738 3761 L
+5738 3761 mt 5712 3740 L
+5712 3740 mt 5704 3733 L
+5704 3733 mt 5677 3712 L
+5677 3712 mt 5669 3706 L
+5669 3706 mt 5641 3685 L
+5641 3685 mt 5634 3679 L
+5634 3679 mt 5606 3657 L
+5606 3657 mt 5599 3651 L
+5599 3651 mt 5573 3630 L
+5573 3630 mt 5564 3622 L
+5564 3622 mt 5541 3602 L
+5541 3602 mt 5529 3590 L
+5529 3590 mt 5513 3575 L
+5513 3575 mt 5494 3555 L
+5494 3555 mt 5487 3547 L
+5487 3547 mt 5463 3519 L
+5463 3519 mt 5459 3516 L
+5459 3516 mt 5439 3492 L
+5439 3492 mt 5425 3474 L
+5425 3474 mt 5417 3464 L
+5417 3464 mt 5396 3437 L
+5396 3437 mt 5390 3428 L
+5390 3428 mt 5377 3409 L
+5377 3409 mt 5358 3382 L
+5358 3382 mt 5355 3378 L
+5355 3378 mt 5338 3354 L
+5338 3354 mt 5320 3328 L
+5320 3328 mt 5319 3327 L
+5319 3327 mt 5302 3299 L
+5302 3299 mt 5286 3272 L
+5286 3272 mt 5285 3269 L
+5285 3269 mt 5270 3244 L
+5270 3244 mt 5251 3217 L
+5251 3217 mt 5250 3215 L
+5250 3215 mt 5230 3189 L
+5230 3189 mt 5215 3173 L
+5215 3173 mt 5205 3162 L
+5205 3162 mt 5181 3138 L
+5181 3138 mt 5177 3134 L
+5177 3134 mt 5148 3107 L
+5148 3107 mt 5146 3105 L
+5146 3105 mt 5116 3079 L
+5116 3079 mt 5111 3075 L
+5111 3075 mt 5079 3052 L
+5079 3052 mt 5076 3050 L
+5076 3050 mt 5041 3029 L
+5041 3029 mt 5032 3024 L
+5032 3024 mt 5006 3012 L
+5006 3012 mt 4976 2997 L
+4976 2997 mt 4971 2995 L
+4971 2995 mt 4936 2976 L
+4936 2976 mt 4925 2969 L
+4925 2969 mt 4902 2955 L
+4902 2955 mt 4882 2942 L
+4882 2942 mt 4867 2931 L
+4867 2931 mt 4845 2914 L
+4845 2914 mt 4832 2903 L
+4832 2903 mt 4813 2887 L
+4813 2887 mt 4797 2871 L
+4797 2871 mt 4785 2859 L
+4785 2859 mt 4762 2835 L
+4762 2835 mt 4759 2832 L
+4759 2832 mt 4733 2804 L
+4733 2804 mt 4727 2798 L
+4727 2798 mt 4705 2777 L
+4705 2777 mt 4692 2764 L
+4692 2764 mt 4675 2749 L
+4675 2749 mt 4657 2733 L
+4657 2733 mt 4645 2722 L
+4645 2722 mt 4623 2701 L
+4623 2701 mt 4615 2694 L
+4615 2694 mt 4588 2669 L
+4588 2669 mt 4584 2667 L
+4584 2667 mt 4553 2643 L
+4553 2643 mt 4546 2639 L
+4546 2639 mt 4518 2623 L
+4518 2623 mt 4495 2612 L
+4495 2612 mt 4483 2605 L
+4483 2605 mt 4448 2589 L
+4448 2589 mt 4438 2584 L
+4438 2584 mt 4413 2572 L
+4413 2572 mt 4387 2557 L
+4387 2557 mt 4379 2552 L
+4379 2552 mt 4344 2530 L
+4344 2530 mt 4343 2529 L
+4343 2529 mt 4309 2507 L
+4309 2507 mt 4301 2502 L
+4301 2502 mt 4274 2484 L
+4274 2484 mt 4258 2474 L
+4258 2474 mt 4239 2463 L
+4239 2463 mt 4210 2446 L
+4210 2446 mt 4204 2443 L
+4204 2443 mt 4169 2427 L
+4169 2427 mt 4151 2419 L
+4151 2419 mt 4134 2413 L
+4134 2413 mt 4100 2400 L
+4100 2400 mt 4078 2391 L
+4078 2391 mt 4065 2386 L
+4065 2386 mt 4030 2372 L
+4030 2372 mt 4011 2364 L
+4011 2364 mt 3995 2357 L
+3995 2357 mt 3960 2339 L
+3960 2339 mt 3955 2336 L
+3955 2336 mt 3925 2320 L
+3925 2320 mt 3904 2309 L
+3904 2309 mt 3890 2300 L
+3890 2300 mt 3856 2281 L
+3856 2281 mt 3855 2281 L
+3855 2281 mt 3821 2262 L
+3821 2262 mt 3804 2254 L
+3804 2254 mt 3786 2245 L
+3786 2245 mt 3751 2229 L
+3751 2229 mt 3744 2226 L
+3744 2226 mt 3716 2214 L
+3716 2214 mt 3681 2203 L
+3681 2203 mt 3659 2199 L
+3659 2199 mt 3646 2196 L
+3646 2196 mt 3611 2195 L
+3611 2195 mt 3588 2199 L
+3588 2199 mt 3577 2201 L
+3577 2201 mt 3542 2214 L
+3542 2214 mt 3515 2226 L
+3515 2226 mt 3507 2230 L
+3507 2230 mt 3472 2245 L
+3472 2245 mt 3449 2254 L
+3449 2254 mt 3437 2258 L
+3437 2258 mt 3402 2270 L
+3402 2270 mt 3367 2279 L
+3367 2279 mt 3354 2281 L
+3354 2281 mt 3332 2286 L
+3332 2286 mt 3298 2293 L
+3298 2293 mt 3263 2298 L
+3263 2298 mt 3228 2304 L
+3228 2304 mt 3201 2309 L
+3201 2309 mt 3193 2310 L
+3193 2310 mt 3158 2318 L
+3158 2318 mt 3123 2328 L
+3123 2328 mt 3099 2336 L
+3099 2336 mt 3088 2340 L
+3088 2340 mt 3053 2354 L
+3053 2354 mt 3032 2364 L
+3032 2364 mt 3019 2370 L
+3019 2370 mt 2984 2387 L
+2984 2387 mt 2976 2391 L
+2976 2391 mt 2949 2406 L
+2949 2406 mt 2925 2419 L
+2925 2419 mt 2914 2425 L
+2914 2425 mt 2879 2446 L
+2879 2446 mt 2879 2446 L
+2879 2446 mt 2844 2469 L
+2844 2469 mt 2838 2474 L
+2838 2474 mt 2809 2495 L
+2809 2495 mt 2802 2502 L
+2802 2502 mt 2774 2523 L
+2774 2523 mt 2768 2529 L
+2768 2529 mt 2740 2555 L
+2740 2555 mt 2738 2557 L
+2738 2557 mt 2712 2584 L
+2712 2584 mt 2705 2592 L
+2705 2592 mt 2688 2612 L
+2688 2612 mt 2670 2636 L
+2670 2636 mt 2668 2639 L
+2668 2639 mt 2654 2667 L
+2654 2667 mt 2648 2694 L
+2648 2694 mt 2647 2722 L
+2647 2722 mt 2652 2749 L
+2652 2749 mt 2660 2777 L
+2660 2777 mt 2670 2803 L
+2670 2803 mt 2670 2804 L
+2670 2804 mt 2682 2832 L
+2682 2832 mt 2693 2859 L
+2693 2859 mt 2705 2886 L
+2705 2886 mt 2705 2887 L
+2705 2887 mt 2717 2914 L
+2717 2914 mt 2728 2942 L
+2728 2942 mt 2738 2969 L
+2738 2969 mt 2740 2973 L
+2740 2973 mt 2748 2997 L
+2748 2997 mt 2755 3024 L
+2755 3024 mt 2762 3052 L
+2762 3052 mt 2771 3079 L
+2771 3079 mt 2774 3085 L
+2774 3085 mt 2790 3107 L
+2790 3107 mt 2809 3122 L
+2809 3122 mt 2827 3134 L
+2827 3134 mt 2844 3143 L
+2844 3143 mt 2879 3162 L
+2879 3162 mt 2879 3162 L
+2879 3162 mt 2914 3181 L
+2914 3181 mt 2929 3189 L
+2929 3189 mt 2949 3201 L
+2949 3201 mt 2976 3217 L
+2976 3217 mt 2984 3222 L
+2984 3222 mt 3019 3244 L
+3019 3244 mt 3019 3244 L
+3019 3244 mt 3053 3271 L
+3053 3271 mt 3055 3272 L
+3055 3272 mt 3087 3299 L
+3087 3299 mt 3088 3300 L
+3088 3300 mt 3118 3327 L
+3118 3327 mt 3123 3333 L
+3123 3333 mt 3147 3354 L
+3147 3354 mt 3158 3365 L
+3158 3365 mt 3177 3382 L
+3177 3382 mt 3193 3398 L
+3193 3398 mt 3208 3409 L
+3208 3409 mt 3228 3428 L
+3228 3428 mt 3240 3437 L
+3240 3437 mt 3263 3458 L
+3263 3458 mt 3271 3464 L
+3271 3464 mt 3298 3488 L
+3298 3488 mt 3303 3492 L
+3303 3492 mt 3328 3519 L
+3328 3519 mt 3332 3527 L
+3332 3527 mt 3343 3547 L
+3343 3547 mt 3347 3575 L
+3347 3575 mt 3344 3602 L
+3344 3602 mt 3339 3630 L
+3339 3630 mt 3332 3648 L
+3332 3648 mt 3329 3657 L
+3329 3657 mt 3322 3685 L
+3322 3685 mt 3318 3712 L
+3318 3712 mt 3323 3740 L
+3323 3740 mt 3328 3767 L
+3328 3767 mt 3332 3780 L
+3332 3780 mt 3336 3795 L
+3336 3795 mt 3340 3822 L
+3340 3822 mt 3345 3850 L
+3345 3850 mt 3348 3877 L
+3348 3877 mt 3349 3905 L
+3349 3905 mt 3343 3932 L
+3343 3932 mt 3334 3960 L
+3334 3960 mt 3332 3975 L
+3332 3975 mt 3331 3987 L
+3331 3987 mt 3332 3991 L
+3332 3991 mt 3344 4015 L
+3344 4015 mt 3367 4038 L
+3367 4038 mt 3373 4042 L
+3373 4042 mt 3402 4061 L
+3402 4061 mt 3418 4070 L
+3418 4070 mt 3437 4080 L
+3437 4080 mt 3472 4096 L
+3472 4096 mt 3475 4097 L
+3475 4097 mt 3507 4116 L
+3507 4116 mt 3523 4125 L
+3523 4125 mt 3542 4147 L
+3542 4147 mt 3546 4152 L
+3546 4152 mt 3544 4180 L
+3544 4180 mt 3542 4183 L
+3542 4183 mt 3517 4207 L
+3517 4207 mt 3507 4213 L
+3507 4213 mt 3476 4235 L
+3476 4235 mt 3472 4238 L
+3472 4238 mt 3443 4262 L
+3443 4262 mt 3437 4269 L
+3437 4269 mt 3417 4290 L
+3417 4290 mt 3402 4312 L
+3402 4312 mt 3399 4317 L
+3399 4317 mt 3390 4345 L
+3390 4345 mt 3393 4372 L
+3393 4372 mt 3402 4387 L
+3402 4387 mt 3411 4400 L
+3411 4400 mt 3437 4424 L
+3437 4424 mt 3441 4427 L
+3441 4427 mt 3472 4449 L
+3472 4449 mt 3480 4455 L
+3480 4455 mt 3507 4473 L
+3507 4473 mt 3519 4482 L
+3519 4482 mt 3542 4502 L
+3542 4502 mt 3550 4510 L
+3550 4510 mt 3570 4537 L
+3570 4537 mt 3577 4551 L
+3577 4551 mt 3582 4565 L
+3582 4565 mt 3587 4592 L
+3587 4592 mt 3580 4620 L
+3580 4620 mt 3577 4627 L
+3577 4627 mt 3563 4648 L
+3563 4648 mt 3542 4673 L
+3542 4673 mt 3540 4675 L
+3540 4675 mt 3511 4703 L
+3511 4703 mt 3507 4707 L
+3507 4707 mt 3477 4730 L
+3477 4730 mt 3472 4734 L
+3472 4734 mt 3437 4758 L
+3437 4758 mt 3437 4758 L
+3437 4758 mt 3402 4779 L
+3402 4779 mt 3391 4785 L
+3391 4785 mt 3367 4798 L
+3367 4798 mt 3340 4813 L
+3340 4813 mt 3332 4816 L
+3332 4816 mt 3298 4833 L
+3298 4833 mt 3282 4840 L
+3282 4840 mt 3263 4849 L
+3263 4849 mt 3228 4863 L
+3228 4863 mt 3217 4868 L
+3217 4868 mt 3193 4877 L
+3193 4877 mt 3158 4890 L
+3158 4890 mt 3142 4895 L
+3142 4895 mt 3123 4902 L
+3123 4902 mt 3088 4913 L
+3088 4913 mt 3057 4923 L
+3057 4923 mt 3053 4924 L
+3053 4924 mt 3019 4934 L
+3019 4934 mt 2984 4943 L
+2984 4943 mt 2957 4950 L
+2957 4950 mt 2949 4952 L
+2949 4952 mt 2914 4961 L
+2914 4961 mt 2879 4968 L
+2879 4968 mt 2844 4976 L
+2844 4976 mt 2833 4978 L
+2833 4978 mt 2809 4982 L
+2809 4982 mt 2774 4988 L
+2774 4988 mt 2740 4994 L
+2740 4994 mt 2705 4999 L
+2705 4999 mt 2670 5003 L
+2670 5003 mt 2648 5005 L
+2648 5005 mt 2635 5007 L
+2635 5007 mt 2600 5010 L
+2600 5010 mt 2565 5012 L
+2565 5012 mt 2530 5014 L
+2530 5014 mt 2496 5016 L
+2496 5016 mt 2461 5017 L
+2461 5017 mt 2426 5017 L
+2426 5017 mt 2391 5017 L
+2391 5017 mt 2356 5016 L
+2356 5016 mt 2321 5015 L
+2321 5015 mt 2286 5013 L
+2286 5013 mt 2251 5010 L
+2251 5010 mt 2217 5007 L
+2217 5007 mt 2206 5005 L
+2206 5005 mt 2182 5002 L
+2182 5002 mt 2147 4998 L
+2147 4998 mt 2112 4992 L
+2112 4992 mt 2077 4986 L
+2077 4986 mt 2042 4979 L
+2042 4979 mt 2038 4978 L
+2038 4978 mt 2007 4971 L
+2007 4971 mt 1972 4962 L
+1972 4962 mt 1938 4953 L
+1938 4953 mt 1928 4950 L
+1928 4950 mt 1903 4943 L
+1903 4943 mt 1868 4932 L
+1868 4932 mt 1842 4923 L
+1842 4923 mt 1833 4919 L
+1833 4919 mt 1798 4906 L
+1798 4906 mt 1772 4895 L
+1772 4895 mt 1763 4891 L
+1763 4891 mt 1728 4875 L
+1728 4875 mt 1715 4868 L
+1715 4868 mt 1694 4856 L
+1694 4856 mt 1666 4840 L
+1666 4840 mt 1659 4836 L
+1659 4836 mt 1624 4813 L
+1624 4813 mt 1624 4813 L
+1624 4813 mt 1589 4787 L
+1589 4787 mt 1587 4785 L
+1587 4785 mt 1554 4758 L
+1554 4758 mt 1554 4757 L
+1554 4757 mt 1525 4730 L
+1525 4730 mt 1519 4723 L
+1519 4723 mt 1500 4703 L
+1500 4703 mt 1484 4684 L
+1484 4684 mt 1477 4675 L
+1477 4675 mt 1456 4648 L
+1456 4648 mt 1449 4638 L
+1449 4638 mt 1437 4620 L
+1437 4620 mt 1419 4592 L
+1419 4592 mt 1415 4585 L
+1415 4585 mt 1403 4565 L
+1403 4565 mt 1387 4537 L
+1387 4537 mt 1380 4523 L
+1380 4523 mt 1373 4510 L
+1373 4510 mt 1359 4482 L
+1359 4482 mt 1346 4455 L
+1346 4455 mt 1345 4453 L
+1345 4453 mt 1334 4427 L
+1334 4427 mt 1322 4400 L
+1322 4400 mt 1312 4372 L
+1312 4372 mt 1310 4368 L
+1310 4368 mt 1302 4345 L
+1302 4345 mt 1293 4317 L
+1293 4317 mt 1285 4290 L
+1285 4290 mt 1278 4262 L
+1278 4262 mt 1275 4249 L
+1275 4249 mt 1272 4235 L
+1272 4235 mt 1267 4207 L
+1267 4207 mt 1263 4180 L
+1263 4180 mt 1260 4152 L
+1260 4152 mt 1258 4125 L
+1258 4125 mt 1256 4097 L
+1256 4097 mt 1256 4070 L
+1256 4070 mt 1256 4042 L
+1256 4042 mt 1257 4015 L
+1257 4015 mt 1258 3987 L
+1258 3987 mt 1260 3960 L
+1260 3960 mt 1262 3932 L
+1262 3932 mt 1264 3905 L
+1264 3905 mt 1266 3877 L
+1266 3877 mt 1267 3850 L
+1267 3850 mt 1268 3822 L
+1268 3822 mt 1268 3795 L
+1268 3795 mt 1267 3767 L
+1267 3767 mt 1264 3740 L
+1264 3740 mt 1259 3712 L
+1259 3712 mt 1253 3685 L
+1253 3685 mt 1243 3657 L
+1243 3657 mt 1240 3650 L
+1240 3650 mt 1232 3630 L
+1232 3630 mt 1217 3602 L
+1217 3602 mt 1205 3585 L
+1205 3585 mt 1199 3575 L
+1199 3575 mt 1177 3547 L
+1177 3547 mt 1170 3539 L
+1170 3539 mt 1152 3519 L
+1152 3519 mt 1136 3503 L
+1136 3503 mt 1124 3492 L
+1124 3492 mt 1101 3472 L
+1101 3472 mt 1092 3464 L
+1092 3464 mt 1066 3445 L
+1066 3445 mt 1056 3437 L
+1056 3437 mt 1031 3419 L
+1031 3419 mt 1018 3409 L
+1018 3409 mt 996 3394 L
+ 996 3394 mt 978 3382 L
+ 978 3382 mt 961 3371 L
+ 961 3371 mt 937 3354 L
+ 937 3354 mt 926 3347 L
+ 926 3347 mt 896 3327 L
+ 896 3327 mt 892 3324 L
+ 892 3324 mt 857 3301 L
+ 857 3301 mt 855 3299 L
+ 855 3299 mt 822 3278 L
+ 822 3278 mt 813 3272 L
+ 813 3272 mt 787 3254 L
+ 787 3254 mt 772 3244 L
+ 772 3244 mt 752 3231 L
+ 752 3231 mt 732 3217 L
+ 732 3217 mt 717 3207 L
+ 717 3207 mt 693 3189 L
+ 693 3189 mt 682 3182 L
+ 682 3182 mt 655 3162 L
+ 655 3162 mt 647 3156 L
+ 647 3156 mt 619 3134 L
+ 619 3134 mt 613 3129 L
+ 613 3129 mt 584 3107 L
+ 584 3107 mt 578 3102 L
+ 578 3102 mt 551 3079 L
+ 551 3079 mt 543 3073 L
+ 543 3073 mt 519 3052 L
+ 519 3052 mt 508 3042 L
+ 508 3042 mt 488 3024 L
+ 488 3024 mt 473 3010 L
+ 473 3010 mt 460 2997 L
+ 460 2997 mt 438 2975 L
+ 438 2975 mt 433 2969 L
+ 433 2969 mt 408 2942 L
+ 408 2942 mt 403 2937 L
+ 403 2937 mt 384 2914 L
+ 384 2914 mt 368 2895 L
+ 368 2895 mt 362 2887 L
+ 362 2887 mt 341 2859 L
+ 341 2859 mt 334 2849 L
+ 334 2849 mt 321 2832 L
+ 321 2832 mt 303 2804 L
+ 303 2804 mt 299 2798 L
+ 299 2798 mt 285 2777 L
+ 285 2777 mt 269 2749 L
+ 269 2749 mt 264 2740 L
+ 264 2740 mt 253 2722 L
+ 253 2722 mt 239 2694 L
+ 239 2694 mt 229 2674 L
+ 229 2674 mt 225 2667 L
+ 225 2667 mt 213 2639 L
+ 213 2639 mt 201 2612 L
+ 201 2612 mt 194 2592 L
+ 194 2592 mt 191 2584 L
+ 191 2584 mt 182 2557 L
+ 182 2557 mt 174 2529 L
+ 174 2529 mt 167 2502 L
+ 167 2502 mt 161 2474 L
+ 161 2474 mt 159 2464 L
+ 159 2464 mt 156 2446 L
+ 156 2446 mt 152 2419 L
+ 152 2419 mt 149 2391 L
+ 149 2391 mt 146 2364 L
+ 146 2364 mt 144 2336 L
+ 144 2336 mt 143 2309 L
+ 143 2309 mt 142 2281 L
+ 142 2281 mt 142 2254 L
+ 142 2254 mt 142 2226 L
+ 142 2226 mt 143 2199 L
+ 143 2199 mt 145 2171 L
+ 145 2171 mt 147 2144 L
+ 147 2144 mt 150 2116 L
+ 150 2116 mt 154 2089 L
+ 154 2089 mt 158 2061 L
+ 158 2061 mt 159 2051 L
+ 159 2051 mt 162 2034 L
+ 162 2034 mt 167 2006 L
+ 167 2006 mt 173 1979 L
+ 173 1979 mt 178 1951 L
+ 178 1951 mt 185 1924 L
+ 185 1924 mt 191 1896 L
+ 191 1896 mt 194 1884 L
+ 194 1884 mt 198 1869 L
+ 198 1869 mt 204 1841 L
+ 204 1841 mt 211 1814 L
+ 211 1814 mt 218 1786 L
+ 218 1786 mt 225 1759 L
+ 225 1759 mt 229 1744 L
+ 229 1744 mt 232 1731 L
+ 232 1731 mt 239 1704 L
+ 239 1704 mt 246 1676 L
+ 246 1676 mt 253 1649 L
+ 253 1649 mt 259 1621 L
+ 259 1621 mt 264 1599 L
+ 264 1599 mt 265 1594 L
+ 265 1594 mt 271 1566 L
+ 271 1566 mt 277 1539 L
+ 277 1539 mt 282 1511 L
+ 282 1511 mt 288 1484 L
+ 288 1484 mt 293 1456 L
+ 293 1456 mt 299 1429 L
+ 299 1429 mt 299 1428 L
+ 299 1428 mt 304 1401 L
+ 304 1401 mt 310 1373 L
+ 310 1373 mt 316 1346 L
+ 316 1346 mt 322 1318 L
+ 322 1318 mt 328 1291 L
+ 328 1291 mt 334 1265 L
+ 334 1265 mt 334 1263 L
+ 334 1263 mt 341 1236 L
+ 341 1236 mt 347 1208 L
+ 347 1208 mt 355 1181 L
+ 355 1181 mt 363 1153 L
+ 363 1153 mt 368 1134 L
+ 368 1134 mt 371 1126 L
+ 371 1126 mt 379 1098 L
+ 379 1098 mt 389 1071 L
+ 389 1071 mt 398 1043 L
+ 398 1043 mt 403 1030 L
+ 403 1030 mt 409 1016 L
+ 409 1016 mt 420 988 L
+ 420 988 mt 431 961 L
+ 431 961 mt 438 945 L
+ 438 945 mt 443 933 L
+ 443 933 mt 456 906 L
+ 456 906 mt 469 878 L
+ 469 878 mt 473 870 L
+ 473 870 mt 483 851 L
+ 483 851 mt 497 823 L
+ 497 823 mt 508 804 L
+ 508 804 mt 512 796 L
+ 512 796 mt 528 768 L
+ 528 768 mt 543 744 L
+ 543 744 mt 545 741 L
+ 545 741 mt 562 713 L
+ 562 713 mt 578 689 L
+ 578 689 mt 580 686 L
+ 580 686 mt 598 658 L
+ 598 658 mt 613 638 L
+ 613 638 mt 618 631 L
+ 618 631 mt 638 603 L
+ 638 603 mt 647 591 L
+ 647 591 mt 659 576 L
+ 659 576 mt 681 548 L
+ 681 548 mt 682 547 L
+ 682 547 mt 704 521 L
+ 704 521 mt 717 505 L
+ 717 505 mt 727 493 L
+ 727 493 mt 752 466 L
+ 752 466 mt 752 466 L
+ 752 466 mt 779 438 L
+ 779 438 mt 787 430 L
+ 787 430 mt 807 411 L
+ 807 411 mt 822 397 L
+ 822 397 mt 837 383 L
+ 837 383 mt 857 366 L
+ 857 366 mt 869 355 L
+ 869 355 mt 892 338 L
+ 892 338 mt 905 328 L
+ 905 328 mt 926 312 L
+ 926 312 mt 943 300 L
+ 943 300 mt 961 288 L
+ 961 288 mt 986 273 L
+ 986 273 mt 996 266 L
+ 996 266 mt 1031 246 L
+1031 246 mt 1032 245 L
+1032 245 mt 1066 227 L
+1066 227 mt 1084 218 L
+1084 218 mt 1101 209 L
+1101 209 mt 1136 193 L
+1136 193 mt 1141 190 L
+1141 190 mt 1170 178 L
+1170 178 mt 1205 164 L
+1205 164 mt 1207 163 L
+1207 163 mt 1240 150 L
+1240 150 mt 1275 138 L
+1275 138 mt 1284 135 L
+1284 135 mt 1310 127 L
+1310 127 mt 1345 116 L
+1345 116 mt 1373 108 L
+1373 108 mt 1380 106 L
+1380 106 mt 1415 96 L
+1415 96 mt 1449 87 L
+1449 87 mt 1476 80 L
+1476 80 mt 1484 78 L
+1484 78 mt 1519 70 L
+1519 70 mt 1554 61 L
+1554 61 mt 1589 54 L
+1589 54 mt 1592 53 L
+1592 53 mt 1624 46 L
+1624 46 mt 1659 38 L
+1659 38 mt 1694 31 L
+1694 31 mt 1722 25 L
+1722 25 mt 1728 24 L
+1728 24 mt 1763 17 L
+1763 17 mt 1798 10 L
+1798 10 mt 1833 4 L
+1833 4 mt 1868 -1 L
+1868 -1 mt 1868 -1 L
+1868 -1 mt 1903 -7 L
+1903 -7 mt 1938 -14 L
+1938 -14 mt 1972 -19 L
+1972 -19 mt 2007 -25 L
+2007 -25 mt 2029 -29 L
+2029 -29 mt 2042 -31 L
+2042 -31 mt 2077 -36 L
+2077 -36 mt 2112 -42 L
+2112 -42 mt 2147 -47 L
+2147 -47 mt 2182 -52 L
+2182 -52 mt 2208 -56 L
+2208 -56 mt 2217 -57 L
+2217 -57 mt 2251 -63 L
+2251 -63 mt 2286 -68 L
+2286 -68 mt 2321 -74 L
+2321 -74 mt 2356 -79 L
+2356 -79 mt 2382 -84 L
+2382 -84 mt 2391 -85 L
+2391 -85 mt 2426 -91 L
+2426 -91 mt 2461 -97 L
+2461 -97 mt 2496 -103 L
+2496 -103 mt 2530 -109 L
+2530 -109 mt 2547 -111 L
+2547 -111 mt 2565 -114 L
+2565 -114 mt 2600 -120 L
+2600 -120 mt 2635 -125 L
+2635 -125 mt 2670 -131 L
+2670 -131 mt 2705 -136 L
+2705 -136 mt 2722 -139 L
+2722 -139 mt 2740 -141 L
+2740 -141 mt 2774 -147 L
+2774 -147 mt 2809 -152 L
+2809 -152 mt 2844 -157 L
+2844 -157 mt 2879 -162 L
+2879 -162 mt 2906 -166 L
+2906 -166 mt 2914 -167 L
+2914 -167 mt 2949 -172 L
+2949 -172 mt 2984 -178 L
+2984 -178 mt 3019 -183 L
+3019 -183 mt 3053 -188 L
+3053 -188 mt 3088 -193 L
+3088 -193 mt 3096 -194 L
+3096 -194 mt 3123 -198 L
+3123 -198 mt 3158 -203 L
+3158 -203 mt 3193 -208 L
+3193 -208 mt 3228 -213 L
+3228 -213 mt 3263 -217 L
+3263 -217 mt 3292 -221 L
+3292 -221 mt 3298 -222 L
+3298 -222 mt 3332 -227 L
+3332 -227 mt 3367 -231 L
+3367 -231 mt 3402 -235 L
+3402 -235 mt 3437 -239 L
+3437 -239 mt 3472 -243 L
+3472 -243 mt 3507 -247 L
+3507 -247 mt 3527 -249 L
+3527 -249 mt 3542 -250 L
+3542 -250 mt 3577 -253 L
+3577 -253 mt 3611 -256 L
+3611 -256 mt 3646 -259 L
+3646 -259 mt 3681 -262 L
+3681 -262 mt 3716 -264 L
+3716 -264 mt 3751 -266 L
+3751 -266 mt 3786 -268 L
+3786 -268 mt 3821 -270 L
+3821 -270 mt 3855 -272 L
+3855 -272 mt 3890 -274 L
+3890 -274 mt 3925 -275 L
+3925 -275 mt 3960 -276 L
+3960 -276 mt 3971 -276 L
+3971 -276 mt 3995 -277 L
+3995 -277 mt 4030 -278 L
+4030 -278 mt 4065 -278 L
+4065 -278 mt 4100 -278 L
+4100 -278 mt 4134 -278 L
+4134 -278 mt 4169 -277 L
+4169 -277 mt 4204 -277 L
+4204 -277 mt 4217 -276 L
+4217 -276 mt 4239 -276 L
+4239 -276 mt 4274 -274 L
+4274 -274 mt 4309 -272 L
+4309 -272 mt 4344 -270 L
+4344 -270 mt 4379 -268 L
+4379 -268 mt 4413 -265 L
+4413 -265 mt 4448 -262 L
+4448 -262 mt 4483 -258 L
+4483 -258 mt 4518 -254 L
+4518 -254 mt 4553 -250 L
+4553 -250 mt 4562 -249 L
+4562 -249 mt 4588 -245 L
+4588 -245 mt 4623 -240 L
+4623 -240 mt 4657 -235 L
+4657 -235 mt 4692 -228 L
+4692 -228 mt 4727 -222 L
+4727 -222 mt 4730 -221 L
+4730 -221 mt 4762 -215 L
+4762 -215 mt 4797 -208 L
+4797 -208 mt 4832 -200 L
+4832 -200 mt 4860 -194 L
+4860 -194 mt 4867 -192 L
+4867 -192 mt 4902 -184 L
+4902 -184 mt 4936 -175 L
+4936 -175 mt 4967 -166 L
+4967 -166 mt 4971 -165 L
+4971 -165 mt 5006 -155 L
+5006 -155 mt 5041 -145 L
+5041 -145 mt 5061 -139 L
+5061 -139 mt 5076 -134 L
+5076 -134 mt 5111 -123 L
+5111 -123 mt 5146 -111 L
+5146 -111 mt 5146 -111 L
+5146 -111 mt 5181 -100 L
+5181 -100 mt 5215 -87 L
+5215 -87 mt 5224 -84 L
+5224 -84 mt 5250 -74 L
+5250 -74 mt 5285 -60 L
+5285 -60 mt 5294 -56 L
+5294 -56 mt 5320 -46 L
+5320 -46 mt 5355 -31 L
+5355 -31 mt 5359 -29 L
+5359 -29 mt 5390 -15 L
+5390 -15 mt 5417 -1 L
+5417 -1 mt 5425 1 L
+5425 1 mt 5459 19 L
+5459 19 mt 5472 25 L
+5472 25 mt 5494 37 L
+5494 37 mt 5522 53 L
+5522 53 mt 5529 57 L
+5529 57 mt 5564 78 L
+5564 78 mt 5568 80 L
+5568 80 mt 5599 99 L
+5599 99 mt 5612 108 L
+5612 108 mt 5634 122 L
+5634 122 mt 5653 135 L
+5653 135 mt 5669 146 L
+5669 146 mt 5692 163 L
+5692 163 mt 5704 171 L
+5704 171 mt 5730 190 L
+5730 190 mt 5738 197 L
+5738 197 mt 5765 218 L
+5765 218 mt 5773 224 L
+5773 224 mt 5800 245 L
+5800 245 mt 5808 252 L
+5808 252 mt 5833 273 L
+5833 273 mt 5843 281 L
+5843 281 mt 5866 300 L
+5866 300 mt 5878 311 L
+5878 311 mt 5897 328 L
+5897 328 mt 5913 342 L
+5913 342 mt 5928 355 L
+5928 355 mt 5948 374 L
+5948 374 mt 5958 383 L
+5958 383 mt 5983 406 L
+5983 406 mt 5987 411 L
+5987 411 mt 6016 438 L
+6016 438 mt 6017 439 L
+6017 439 mt 6045 466 L
+6045 466 mt 6052 473 L
+6052 473 mt 6073 493 L
+6073 493 mt 6087 507 L
+6087 507 mt 6101 521 L
+6101 521 mt 6122 541 L
+6122 541 mt 6130 548 L
+6130 548 mt 6157 575 L
+6157 575 mt 6158 576 L
+6158 576 mt 6186 603 L
+6186 603 mt 6192 609 L
+6192 609 mt 6214 631 L
+6214 631 mt 6227 643 L
+6227 643 mt 6242 658 L
+6242 658 mt 6261 677 L
+6261 677 mt 6270 686 L
+6270 686 mt 6296 712 L
+6296 712 mt 6298 713 L
+6298 713 mt 6326 741 L
+6326 741 mt 6331 746 L
+6331 746 mt 6353 768 L
+6353 768 mt 6366 781 L
+6366 781 mt 6381 796 L
+6381 796 mt 6401 816 L
+6401 816 mt 6409 823 L
+6409 823 mt 6436 850 L
+6436 850 mt 6436 851 L
+6436 851 mt 6464 878 L
+6464 878 mt 6471 885 L
+6471 885 mt 6491 906 L
+6491 906 mt 6506 920 L
+6506 920 mt 6518 933 L
+6518 933 mt 6540 956 L
+6540 956 mt 6545 961 L
+6545 961 mt 6572 988 L
+6572 988 mt 6575 992 L
+6575 992 mt 6598 1016 L
+6598 1016 mt 6610 1029 L
+6610 1029 mt 6623 1043 L
+6623 1043 mt 6645 1067 L
+6645 1067 mt 6649 1071 L
+6649 1071 mt 6673 1098 L
+6673 1098 mt 6680 1106 L
+6680 1106 mt 6698 1126 L
+6698 1126 mt 6715 1146 L
+6715 1146 mt 6722 1153 L
+6722 1153 mt 6745 1181 L
+6745 1181 mt 6750 1187 L
+6750 1187 mt 6768 1208 L
+6768 1208 mt 6785 1229 L
+6785 1229 mt 6790 1236 L
+6790 1236 mt 6812 1263 L
+6812 1263 mt 6819 1273 L
+6819 1273 mt 6833 1291 L
+6833 1291 mt 6854 1318 L
+6854 1318 mt 6854 1319 L
+6854 1319 mt 6874 1346 L
+6874 1346 mt 6889 1367 L
+6889 1367 mt 6894 1373 L
+6894 1373 mt 6913 1401 L
+6913 1401 mt 6924 1417 L
+6924 1417 mt 6932 1428 L
+6932 1428 mt 6949 1456 L
+6949 1456 mt 6959 1471 L
+6959 1471 mt 6967 1484 L
+6967 1484 mt 6983 1511 L
+6983 1511 mt 6994 1529 L
+6994 1529 mt 6999 1539 L
+6999 1539 mt 7015 1566 L
+7015 1566 mt 7029 1592 L
+7029 1592 mt 7029 1594 L
+7029 1594 mt 7044 1621 L
+7044 1621 mt 7057 1649 L
+7057 1649 mt 7063 1662 L
+7063 1662 mt 7070 1676 L
+7070 1676 mt 7082 1704 L
+7082 1704 mt 7094 1731 L
+7094 1731 mt 7098 1743 L
+7098 1743 mt 7105 1759 L
+7105 1759 mt 7115 1786 L
+7115 1786 mt 7124 1814 L
+7124 1814 mt 7132 1841 L
+7132 1841 mt 7133 1845 L
+7133 1845 mt 7140 1869 L
+7140 1869 mt 7146 1896 L
+7146 1896 mt 7152 1924 L
+7152 1924 mt 7157 1951 L
+7157 1951 mt 7161 1979 L
+7161 1979 mt 7164 2006 L
+7164 2006 mt 7167 2034 L
+7167 2034 mt 7168 2056 L
+7098 2005 mt 7098 2006 L
+7098 2006 mt 7101 2034 L
+7101 2034 mt 7102 2061 L
+7102 2061 mt 7103 2089 L
+7103 2089 mt 7103 2116 L
+7103 2116 mt 7102 2144 L
+7102 2144 mt 7101 2171 L
+7101 2171 mt 7099 2199 L
+7099 2199 mt 7098 2210 L
+7098 2210 mt 7097 2226 L
+7097 2226 mt 7094 2254 L
+7094 2254 mt 7091 2281 L
+7091 2281 mt 7087 2309 L
+7087 2309 mt 7082 2336 L
+7082 2336 mt 7077 2364 L
+7077 2364 mt 7071 2391 L
+7071 2391 mt 7065 2419 L
+7065 2419 mt 7063 2426 L
+7063 2426 mt 7059 2446 L
+7059 2446 mt 7052 2474 L
+7052 2474 mt 7045 2502 L
+7045 2502 mt 7037 2529 L
+7037 2529 mt 7029 2557 L
+7029 2557 mt 7029 2558 L
+7029 2558 mt 7021 2584 L
+7021 2584 mt 7012 2612 L
+7012 2612 mt 7003 2639 L
+7003 2639 mt 6994 2667 L
+6994 2667 mt 6994 2668 L
+6994 2668 mt 6985 2694 L
+6985 2694 mt 6976 2722 L
+6976 2722 mt 6967 2749 L
+6967 2749 mt 6959 2771 L
+6959 2771 mt 6957 2777 L
+6957 2777 mt 6947 2804 L
+6947 2804 mt 6937 2832 L
+6937 2832 mt 6928 2859 L
+6928 2859 mt 6924 2869 L
+6924 2869 mt 6918 2887 L
+6918 2887 mt 6908 2914 L
+6908 2914 mt 6898 2942 L
+6898 2942 mt 6889 2966 L
+6889 2966 mt 6888 2969 L
+6888 2969 mt 6878 2997 L
+6878 2997 mt 6868 3024 L
+6868 3024 mt 6857 3052 L
+6857 3052 mt 6854 3060 L
+6854 3060 mt 6847 3079 L
+6847 3079 mt 6836 3107 L
+6836 3107 mt 6826 3134 L
+6826 3134 mt 6819 3151 L
+6819 3151 mt 6815 3162 L
+6815 3162 mt 6805 3189 L
+6805 3189 mt 6794 3217 L
+6794 3217 mt 6785 3243 L
+6785 3243 mt 6784 3244 L
+6784 3244 mt 6774 3272 L
+6774 3272 mt 6764 3299 L
+6764 3299 mt 6755 3327 L
+6755 3327 mt 6750 3341 L
+6750 3341 mt 6745 3354 L
+6745 3354 mt 6735 3382 L
+6735 3382 mt 6726 3409 L
+6726 3409 mt 6716 3437 L
+6716 3437 mt 6715 3439 L
+6715 3439 mt 6706 3464 L
+6706 3464 mt 6695 3492 L
+6695 3492 mt 6684 3519 L
+6684 3519 mt 6680 3531 L
+6680 3531 mt 6674 3547 L
+6674 3547 mt 6662 3575 L
+6662 3575 mt 6651 3602 L
+6651 3602 mt 6645 3615 L
+6645 3615 mt 6639 3630 L
+6639 3630 mt 6627 3657 L
+6627 3657 mt 6615 3685 L
+6615 3685 mt 6610 3695 L
+6610 3695 mt 6603 3712 L
+6603 3712 mt 6590 3740 L
+6590 3740 mt 6578 3767 L
+6578 3767 mt 6575 3772 L
+6575 3772 mt 6565 3795 L
+6565 3795 mt 6552 3822 L
+6552 3822 mt 6540 3846 L
+6540 3846 mt 6539 3850 L
+6539 3850 mt 6525 3877 L
+6525 3877 mt 6511 3905 L
+6511 3905 mt 6506 3916 L
+6506 3916 mt 6498 3932 L
+6498 3932 mt 6483 3960 L
+6483 3960 mt 6471 3983 L
+6471 3983 mt 6468 3987 L
+6468 3987 mt 6453 4015 L
+6453 4015 mt 6437 4042 L
+6437 4042 mt 6436 4044 L
+6436 4044 mt 6421 4070 L
+6421 4070 mt 6406 4097 L
+6406 4097 mt 6401 4106 L
+6401 4106 mt 6391 4125 L
+6391 4125 mt 6378 4152 L
+6378 4152 mt 6366 4179 L
+6366 4179 mt 6366 4180 L
+6366 4180 mt 6354 4207 L
+6354 4207 mt 6341 4235 L
+6341 4235 mt 6331 4255 L
+6331 4255 mt 6327 4262 L
+6327 4262 mt 6313 4290 L
+6313 4290 mt 6303 4317 L
+6303 4317 mt 6296 4342 L
+6296 4342 mt 6295 4345 L
+6295 4345 mt 6290 4372 L
+6290 4372 mt 6286 4400 L
+6286 4400 mt 6280 4427 L
+6280 4427 mt 6270 4455 L
+6270 4455 mt 6261 4468 L
+6261 4468 mt 6250 4482 L
+6250 4482 mt 6227 4505 L
+6227 4505 mt 6216 4510 L
+6216 4510 mt 6192 4519 L
+6192 4519 mt 6162 4510 L
+6162 4510 mt 6157 4507 L
+6157 4507 mt 6136 4482 L
+6136 4482 mt 6129 4455 L
+6129 4455 mt 6130 4427 L
+6130 4427 mt 6132 4400 L
+6132 4400 mt 6132 4372 L
+6132 4372 mt 6131 4345 L
+6131 4345 mt 6129 4317 L
+6129 4317 mt 6125 4290 L
+6125 4290 mt 6122 4276 L
+6122 4276 mt 6119 4262 L
+6119 4262 mt 6113 4235 L
+6113 4235 mt 6107 4207 L
+6107 4207 mt 6102 4180 L
+6102 4180 mt 6096 4152 L
+6096 4152 mt 6090 4125 L
+6090 4125 mt 6087 4112 L
+6087 4112 mt 6084 4097 L
+6084 4097 mt 6076 4070 L
+6076 4070 mt 6067 4042 L
+6067 4042 mt 6056 4015 L
+6056 4015 mt 6052 4006 L
+6052 4006 mt 6043 3987 L
+6043 3987 mt 6029 3960 L
+6029 3960 mt 6017 3938 L
+6017 3938 mt 6013 3932 L
+6013 3932 mt 5995 3905 L
+5995 3905 mt 5983 3885 L
+5983 3885 mt 5977 3877 L
+5977 3877 mt 5958 3850 L
+5958 3850 mt 5948 3835 L
+5948 3835 mt 5938 3822 L
+5938 3822 mt 5914 3795 L
+5914 3795 mt 5913 3793 L
+5913 3793 mt 5883 3767 L
+5883 3767 mt 5878 3763 L
+5878 3763 mt 5845 3740 L
+5845 3740 mt 5843 3738 L
+5843 3738 mt 5808 3717 L
+5808 3717 mt 5800 3712 L
+5800 3712 mt 5773 3698 L
+5773 3698 mt 5750 3685 L
+5750 3685 mt 5738 3678 L
+5738 3678 mt 5704 3658 L
+5704 3658 mt 5703 3657 L
+5703 3657 mt 5669 3635 L
+5669 3635 mt 5660 3630 L
+5660 3630 mt 5634 3610 L
+5634 3610 mt 5624 3602 L
+5624 3602 mt 5599 3581 L
+5599 3581 mt 5592 3575 L
+5592 3575 mt 5565 3547 L
+5565 3547 mt 5564 3547 L
+5564 3547 mt 5540 3519 L
+5540 3519 mt 5529 3506 L
+5529 3506 mt 5517 3492 L
+5517 3492 mt 5495 3464 L
+5495 3464 mt 5494 3463 L
+5494 3463 mt 5475 3437 L
+5475 3437 mt 5459 3413 L
+5459 3413 mt 5457 3409 L
+5457 3409 mt 5439 3382 L
+5439 3382 mt 5425 3357 L
+5425 3357 mt 5423 3354 L
+5423 3354 mt 5407 3327 L
+5407 3327 mt 5393 3299 L
+5393 3299 mt 5390 3292 L
+5390 3292 mt 5380 3272 L
+5380 3272 mt 5367 3244 L
+5367 3244 mt 5355 3218 L
+5355 3218 mt 5355 3217 L
+5355 3217 mt 5338 3189 L
+5338 3189 mt 5320 3168 L
+5320 3168 mt 5315 3162 L
+5315 3162 mt 5287 3134 L
+5287 3134 mt 5285 3133 L
+5285 3133 mt 5256 3107 L
+5256 3107 mt 5250 3102 L
+5250 3102 mt 5225 3079 L
+5225 3079 mt 5215 3071 L
+5215 3071 mt 5194 3052 L
+5194 3052 mt 5181 3039 L
+5181 3039 mt 5161 3024 L
+5161 3024 mt 5146 3014 L
+5146 3014 mt 5114 2997 L
+5114 2997 mt 5111 2996 L
+5111 2996 mt 5076 2981 L
+5076 2981 mt 5047 2969 L
+5047 2969 mt 5041 2967 L
+5041 2967 mt 5006 2951 L
+5006 2951 mt 4988 2942 L
+4988 2942 mt 4971 2933 L
+4971 2933 mt 4937 2914 L
+4937 2914 mt 4936 2914 L
+4936 2914 mt 4902 2892 L
+4902 2892 mt 4895 2887 L
+4895 2887 mt 4867 2864 L
+4867 2864 mt 4862 2859 L
+4862 2859 mt 4835 2832 L
+4835 2832 mt 4832 2828 L
+4832 2828 mt 4810 2804 L
+4810 2804 mt 4797 2789 L
+4797 2789 mt 4786 2777 L
+4786 2777 mt 4762 2750 L
+4762 2750 mt 4761 2749 L
+4761 2749 mt 4734 2722 L
+4734 2722 mt 4727 2713 L
+4727 2713 mt 4709 2694 L
+4709 2694 mt 4692 2674 L
+4692 2674 mt 4685 2667 L
+4685 2667 mt 4663 2639 L
+4663 2639 mt 4657 2630 L
+4657 2630 mt 4643 2612 L
+4643 2612 mt 4625 2584 L
+4625 2584 mt 4623 2580 L
+4623 2580 mt 4605 2557 L
+4605 2557 mt 4588 2529 L
+4588 2529 mt 4588 2529 L
+4588 2529 mt 4561 2502 L
+4561 2502 mt 4553 2496 L
+4553 2496 mt 4518 2475 L
+4518 2475 mt 4515 2474 L
+4515 2474 mt 4483 2463 L
+4483 2463 mt 4448 2452 L
+4448 2452 mt 4432 2446 L
+4432 2446 mt 4413 2440 L
+4413 2440 mt 4379 2427 L
+4379 2427 mt 4361 2419 L
+4361 2419 mt 4344 2412 L
+4344 2412 mt 4309 2395 L
+4309 2395 mt 4301 2391 L
+4301 2391 mt 4274 2380 L
+4274 2380 mt 4239 2366 L
+4239 2366 mt 4232 2364 L
+4232 2364 mt 4204 2354 L
+4204 2354 mt 4169 2344 L
+4169 2344 mt 4145 2336 L
+4145 2336 mt 4134 2333 L
+4134 2333 mt 4100 2322 L
+4100 2322 mt 4065 2310 L
+4065 2310 mt 4062 2309 L
+4062 2309 mt 4030 2294 L
+4030 2294 mt 4007 2281 L
+4007 2281 mt 3995 2274 L
+3995 2274 mt 3969 2254 L
+3969 2254 mt 3960 2247 L
+3960 2247 mt 3935 2226 L
+3935 2226 mt 3925 2219 L
+3925 2219 mt 3898 2199 L
+3898 2199 mt 3890 2193 L
+3890 2193 mt 3855 2174 L
+3855 2174 mt 3849 2171 L
+3849 2171 mt 3821 2155 L
+3821 2155 mt 3802 2144 L
+3802 2144 mt 3786 2134 L
+3786 2134 mt 3756 2116 L
+3756 2116 mt 3751 2113 L
+3751 2113 mt 3716 2091 L
+3716 2091 mt 3712 2089 L
+3712 2089 mt 3681 2072 L
+3681 2072 mt 3654 2061 L
+3654 2061 mt 3646 2058 L
+3646 2058 mt 3611 2046 L
+3611 2046 mt 3577 2038 L
+3577 2038 mt 3543 2034 L
+3543 2034 mt 3542 2034 L
+3542 2034 mt 3537 2034 L
+3537 2034 mt 3507 2035 L
+3507 2035 mt 3472 2041 L
+3472 2041 mt 3437 2050 L
+3437 2050 mt 3403 2061 L
+3403 2061 mt 3402 2062 L
+3402 2062 mt 3367 2073 L
+3367 2073 mt 3332 2083 L
+3332 2083 mt 3311 2089 L
+3311 2089 mt 3298 2092 L
+3298 2092 mt 3263 2101 L
+3263 2101 mt 3228 2107 L
+3228 2107 mt 3193 2113 L
+3193 2113 mt 3173 2116 L
+3173 2116 mt 3158 2119 L
+3158 2119 mt 3123 2125 L
+3123 2125 mt 3088 2132 L
+3088 2132 mt 3053 2140 L
+3053 2140 mt 3039 2144 L
+3039 2144 mt 3019 2149 L
+3019 2149 mt 2984 2160 L
+2984 2160 mt 2950 2171 L
+2950 2171 mt 2949 2172 L
+2949 2172 mt 2914 2185 L
+2914 2185 mt 2882 2199 L
+2882 2199 mt 2879 2200 L
+2879 2200 mt 2844 2216 L
+2844 2216 mt 2825 2226 L
+2825 2226 mt 2809 2234 L
+2809 2234 mt 2774 2253 L
+2774 2253 mt 2773 2254 L
+2773 2254 mt 2740 2274 L
+2740 2274 mt 2728 2281 L
+2728 2281 mt 2705 2296 L
+2705 2296 mt 2686 2309 L
+2686 2309 mt 2670 2321 L
+2670 2321 mt 2649 2336 L
+2649 2336 mt 2635 2348 L
+2635 2348 mt 2617 2364 L
+2617 2364 mt 2600 2380 L
+2600 2380 mt 2589 2391 L
+2589 2391 mt 2565 2418 L
+2565 2418 mt 2565 2419 L
+2565 2419 mt 2545 2446 L
+2545 2446 mt 2530 2471 L
+2530 2471 mt 2529 2474 L
+2529 2474 mt 2517 2502 L
+2517 2502 mt 2508 2529 L
+2508 2529 mt 2504 2557 L
+2504 2557 mt 2503 2584 L
+2503 2584 mt 2505 2612 L
+2505 2612 mt 2509 2639 L
+2509 2639 mt 2515 2667 L
+2515 2667 mt 2523 2694 L
+2523 2694 mt 2530 2715 L
+2530 2715 mt 2533 2722 L
+2533 2722 mt 2547 2749 L
+2547 2749 mt 2563 2777 L
+2563 2777 mt 2565 2779 L
+2565 2779 mt 2582 2804 L
+2582 2804 mt 2600 2832 L
+2600 2832 mt 2600 2832 L
+2600 2832 mt 2616 2859 L
+2616 2859 mt 2630 2887 L
+2630 2887 mt 2635 2897 L
+2635 2897 mt 2644 2914 L
+2644 2914 mt 2655 2942 L
+2655 2942 mt 2664 2969 L
+2664 2969 mt 2670 2991 L
+2670 2991 mt 2672 2997 L
+2672 2997 mt 2680 3024 L
+2680 3024 mt 2684 3052 L
+2684 3052 mt 2684 3079 L
+2684 3079 mt 2689 3107 L
+2689 3107 mt 2705 3129 L
+2705 3129 mt 2709 3134 L
+2709 3134 mt 2740 3153 L
+2740 3153 mt 2756 3162 L
+2756 3162 mt 2774 3169 L
+2774 3169 mt 2809 3183 L
+2809 3183 mt 2825 3189 L
+2825 3189 mt 2844 3198 L
+2844 3198 mt 2879 3214 L
+2879 3214 mt 2884 3217 L
+2884 3217 mt 2914 3234 L
+2914 3234 mt 2932 3244 L
+2932 3244 mt 2949 3256 L
+2949 3256 mt 2971 3272 L
+2971 3272 mt 2984 3283 L
+2984 3283 mt 3004 3299 L
+3004 3299 mt 3019 3314 L
+3019 3314 mt 3031 3327 L
+3031 3327 mt 3053 3354 L
+3053 3354 mt 3054 3354 L
+3054 3354 mt 3072 3382 L
+3072 3382 mt 3086 3409 L
+3086 3409 mt 3088 3415 L
+3088 3415 mt 3098 3437 L
+3098 3437 mt 3106 3464 L
+3106 3464 mt 3112 3492 L
+3112 3492 mt 3116 3519 L
+3116 3519 mt 3116 3547 L
+3116 3547 mt 3115 3575 L
+3115 3575 mt 3112 3602 L
+3112 3602 mt 3109 3630 L
+3109 3630 mt 3105 3657 L
+3105 3657 mt 3099 3685 L
+3099 3685 mt 3094 3712 L
+3094 3712 mt 3092 3740 L
+3092 3740 mt 3100 3767 L
+3100 3767 mt 3119 3795 L
+3119 3795 mt 3123 3798 L
+3123 3798 mt 3148 3822 L
+3148 3822 mt 3158 3831 L
+3158 3831 mt 3178 3850 L
+3178 3850 mt 3193 3866 L
+3193 3866 mt 3202 3877 L
+3202 3877 mt 3219 3905 L
+3219 3905 mt 3228 3932 L
+3228 3932 mt 3228 3932 L
+3228 3932 mt 3231 3960 L
+3231 3960 mt 3235 3987 L
+3235 3987 mt 3247 4015 L
+3247 4015 mt 3263 4037 L
+3263 4037 mt 3267 4042 L
+3267 4042 mt 3295 4070 L
+3295 4070 mt 3298 4072 L
+3298 4072 mt 3328 4097 L
+3328 4097 mt 3332 4103 L
+3332 4103 mt 3357 4125 L
+3357 4125 mt 3367 4139 L
+3367 4139 mt 3380 4152 L
+3380 4152 mt 3384 4180 L
+3384 4180 mt 3369 4207 L
+3369 4207 mt 3367 4209 L
+3367 4209 mt 3347 4235 L
+3347 4235 mt 3332 4255 L
+3332 4255 mt 3328 4262 L
+3328 4262 mt 3312 4290 L
+3312 4290 mt 3302 4317 L
+3302 4317 mt 3299 4345 L
+3299 4345 mt 3303 4372 L
+3303 4372 mt 3313 4400 L
+3313 4400 mt 3332 4423 L
+3332 4423 mt 3336 4427 L
+3336 4427 mt 3367 4451 L
+3367 4451 mt 3373 4455 L
+3373 4455 mt 3402 4471 L
+3402 4471 mt 3421 4482 L
+3421 4482 mt 3437 4491 L
+3437 4491 mt 3467 4510 L
+3467 4510 mt 3472 4513 L
+3472 4513 mt 3499 4537 L
+3499 4537 mt 3507 4547 L
+3507 4547 mt 3518 4565 L
+3518 4565 mt 3525 4592 L
+3525 4592 mt 3518 4620 L
+3518 4620 mt 3507 4634 L
+3507 4634 mt 3495 4648 L
+3495 4648 mt 3472 4669 L
+3472 4669 mt 3465 4675 L
+3465 4675 mt 3437 4696 L
+3437 4696 mt 3427 4703 L
+3427 4703 mt 3402 4719 L
+3402 4719 mt 3383 4730 L
+3383 4730 mt 3367 4739 L
+3367 4739 mt 3332 4757 L
+3332 4757 mt 3331 4758 L
+3331 4758 mt 3298 4774 L
+3298 4774 mt 3274 4785 L
+3274 4785 mt 3263 4790 L
+3263 4790 mt 3228 4806 L
+3228 4806 mt 3211 4813 L
+3211 4813 mt 3193 4820 L
+3193 4820 mt 3158 4833 L
+3158 4833 mt 3139 4840 L
+3139 4840 mt 3123 4846 L
+3123 4846 mt 3088 4857 L
+3088 4857 mt 3056 4868 L
+3056 4868 mt 3053 4869 L
+3053 4869 mt 3019 4879 L
+3019 4879 mt 2984 4889 L
+2984 4889 mt 2962 4895 L
+2962 4895 mt 2949 4899 L
+2949 4899 mt 2914 4908 L
+2914 4908 mt 2879 4916 L
+2879 4916 mt 2850 4923 L
+2850 4923 mt 2844 4924 L
+2844 4924 mt 2809 4931 L
+2809 4931 mt 2774 4938 L
+2774 4938 mt 2740 4944 L
+2740 4944 mt 2705 4950 L
+2705 4950 mt 2704 4950 L
+2704 4950 mt 2670 4955 L
+2670 4955 mt 2635 4960 L
+2635 4960 mt 2600 4963 L
+2600 4963 mt 2565 4967 L
+2565 4967 mt 2530 4970 L
+2530 4970 mt 2496 4972 L
+2496 4972 mt 2461 4974 L
+2461 4974 mt 2426 4975 L
+2426 4975 mt 2391 4975 L
+2391 4975 mt 2356 4975 L
+2356 4975 mt 2321 4974 L
+2321 4974 mt 2286 4973 L
+2286 4973 mt 2251 4971 L
+2251 4971 mt 2217 4968 L
+2217 4968 mt 2182 4964 L
+2182 4964 mt 2147 4960 L
+2147 4960 mt 2112 4955 L
+2112 4955 mt 2085 4950 L
+2085 4950 mt 2077 4949 L
+2077 4949 mt 2042 4942 L
+2042 4942 mt 2007 4935 L
+2007 4935 mt 1972 4926 L
+1972 4926 mt 1959 4923 L
+1959 4923 mt 1938 4917 L
+1938 4917 mt 1903 4907 L
+1903 4907 mt 1868 4896 L
+1868 4896 mt 1866 4895 L
+1866 4895 mt 1833 4883 L
+1833 4883 mt 1798 4870 L
+1798 4870 mt 1794 4868 L
+1794 4868 mt 1763 4854 L
+1763 4854 mt 1735 4840 L
+1735 4840 mt 1728 4837 L
+1728 4837 mt 1694 4818 L
+1694 4818 mt 1685 4813 L
+1685 4813 mt 1659 4796 L
+1659 4796 mt 1643 4785 L
+1643 4785 mt 1624 4771 L
+1624 4771 mt 1607 4758 L
+1607 4758 mt 1589 4742 L
+1589 4742 mt 1575 4730 L
+1575 4730 mt 1554 4709 L
+1554 4709 mt 1548 4703 L
+1548 4703 mt 1523 4675 L
+1523 4675 mt 1519 4670 L
+1519 4670 mt 1502 4648 L
+1502 4648 mt 1484 4623 L
+1484 4623 mt 1482 4620 L
+1482 4620 mt 1464 4592 L
+1464 4592 mt 1449 4568 L
+1449 4568 mt 1448 4565 L
+1448 4565 mt 1432 4537 L
+1432 4537 mt 1418 4510 L
+1418 4510 mt 1415 4503 L
+1415 4503 mt 1404 4482 L
+1404 4482 mt 1392 4455 L
+1392 4455 mt 1380 4427 L
+1380 4427 mt 1380 4427 L
+1380 4427 mt 1369 4400 L
+1369 4400 mt 1358 4372 L
+1358 4372 mt 1349 4345 L
+1349 4345 mt 1345 4333 L
+1345 4333 mt 1340 4317 L
+1340 4317 mt 1332 4290 L
+1332 4290 mt 1325 4262 L
+1325 4262 mt 1319 4235 L
+1319 4235 mt 1314 4207 L
+1314 4207 mt 1311 4180 L
+1311 4180 mt 1310 4171 L
+1310 4171 mt 1308 4152 L
+1308 4152 mt 1307 4125 L
+1307 4125 mt 1307 4097 L
+1307 4097 mt 1308 4070 L
+1308 4070 mt 1310 4042 L
+1310 4042 mt 1310 4039 L
+1310 4039 mt 1312 4015 L
+1312 4015 mt 1316 3987 L
+1316 3987 mt 1320 3960 L
+1320 3960 mt 1325 3932 L
+1325 3932 mt 1330 3905 L
+1330 3905 mt 1335 3877 L
+1335 3877 mt 1339 3850 L
+1339 3850 mt 1344 3822 L
+1344 3822 mt 1345 3812 L
+1345 3812 mt 1347 3795 L
+1347 3795 mt 1349 3767 L
+1349 3767 mt 1349 3740 L
+1349 3740 mt 1348 3712 L
+1348 3712 mt 1345 3689 L
+1345 3689 mt 1344 3685 L
+1344 3685 mt 1338 3657 L
+1338 3657 mt 1329 3630 L
+1329 3630 mt 1317 3602 L
+1317 3602 mt 1310 3589 L
+1310 3589 mt 1302 3575 L
+1302 3575 mt 1283 3547 L
+1283 3547 mt 1275 3537 L
+1275 3537 mt 1260 3519 L
+1260 3519 mt 1240 3499 L
+1240 3499 mt 1234 3492 L
+1234 3492 mt 1205 3467 L
+1205 3467 mt 1203 3464 L
+1203 3464 mt 1170 3439 L
+1170 3439 mt 1168 3437 L
+1168 3437 mt 1136 3414 L
+1136 3414 mt 1129 3409 L
+1129 3409 mt 1101 3391 L
+1101 3391 mt 1087 3382 L
+1087 3382 mt 1066 3369 L
+1066 3369 mt 1044 3354 L
+1044 3354 mt 1031 3347 L
+1031 3347 mt 999 3327 L
+ 999 3327 mt 996 3325 L
+ 996 3325 mt 961 3303 L
+ 961 3303 mt 955 3299 L
+ 955 3299 mt 926 3282 L
+ 926 3282 mt 911 3272 L
+ 911 3272 mt 892 3260 L
+ 892 3260 mt 867 3244 L
+ 867 3244 mt 857 3238 L
+ 857 3238 mt 824 3217 L
+ 824 3217 mt 822 3215 L
+ 822 3215 mt 787 3193 L
+ 787 3193 mt 782 3189 L
+ 782 3189 mt 752 3169 L
+ 752 3169 mt 741 3162 L
+ 741 3162 mt 717 3145 L
+ 717 3145 mt 702 3134 L
+ 702 3134 mt 682 3120 L
+ 682 3120 mt 665 3107 L
+ 665 3107 mt 647 3094 L
+ 647 3094 mt 629 3079 L
+ 629 3079 mt 613 3066 L
+ 613 3066 mt 595 3052 L
+ 595 3052 mt 578 3037 L
+ 578 3037 mt 563 3024 L
+ 563 3024 mt 543 3006 L
+ 543 3006 mt 533 2997 L
+ 533 2997 mt 508 2972 L
+ 508 2972 mt 505 2969 L
+ 505 2969 mt 478 2942 L
+ 478 2942 mt 473 2936 L
+ 473 2936 mt 453 2914 L
+ 453 2914 mt 438 2896 L
+ 438 2896 mt 430 2887 L
+ 430 2887 mt 409 2859 L
+ 409 2859 mt 403 2851 L
+ 403 2851 mt 389 2832 L
+ 389 2832 mt 370 2804 L
+ 370 2804 mt 368 2801 L
+ 368 2801 mt 353 2777 L
+ 353 2777 mt 337 2749 L
+ 337 2749 mt 334 2744 L
+ 334 2744 mt 321 2722 L
+ 321 2722 mt 307 2694 L
+ 307 2694 mt 299 2677 L
+ 299 2677 mt 293 2667 L
+ 293 2667 mt 281 2639 L
+ 281 2639 mt 270 2612 L
+ 270 2612 mt 264 2595 L
+ 264 2595 mt 260 2584 L
+ 260 2584 mt 251 2557 L
+ 251 2557 mt 243 2529 L
+ 243 2529 mt 236 2502 L
+ 236 2502 mt 231 2474 L
+ 231 2474 mt 229 2464 L
+ 229 2464 mt 226 2446 L
+ 226 2446 mt 222 2419 L
+ 222 2419 mt 219 2391 L
+ 219 2391 mt 216 2364 L
+ 216 2364 mt 214 2336 L
+ 214 2336 mt 213 2309 L
+ 213 2309 mt 213 2281 L
+ 213 2281 mt 213 2254 L
+ 213 2254 mt 213 2226 L
+ 213 2226 mt 215 2199 L
+ 215 2199 mt 217 2171 L
+ 217 2171 mt 219 2144 L
+ 219 2144 mt 222 2116 L
+ 222 2116 mt 226 2089 L
+ 226 2089 mt 229 2071 L
+ 229 2071 mt 230 2061 L
+ 230 2061 mt 235 2034 L
+ 235 2034 mt 240 2006 L
+ 240 2006 mt 246 1979 L
+ 246 1979 mt 251 1951 L
+ 251 1951 mt 257 1924 L
+ 257 1924 mt 263 1896 L
+ 263 1896 mt 264 1894 L
+ 264 1894 mt 270 1869 L
+ 270 1869 mt 276 1841 L
+ 276 1841 mt 282 1814 L
+ 282 1814 mt 288 1786 L
+ 288 1786 mt 295 1759 L
+ 295 1759 mt 299 1742 L
+ 299 1742 mt 301 1731 L
+ 301 1731 mt 307 1704 L
+ 307 1704 mt 313 1676 L
+ 313 1676 mt 319 1649 L
+ 319 1649 mt 325 1621 L
+ 325 1621 mt 330 1594 L
+ 330 1594 mt 334 1575 L
+ 334 1575 mt 335 1566 L
+ 335 1566 mt 340 1539 L
+ 340 1539 mt 345 1511 L
+ 345 1511 mt 350 1484 L
+ 350 1484 mt 355 1456 L
+ 355 1456 mt 360 1428 L
+ 360 1428 mt 365 1401 L
+ 365 1401 mt 368 1380 L
+ 368 1380 mt 370 1373 L
+ 370 1373 mt 375 1346 L
+ 375 1346 mt 380 1318 L
+ 380 1318 mt 385 1291 L
+ 385 1291 mt 391 1263 L
+ 391 1263 mt 396 1236 L
+ 396 1236 mt 403 1208 L
+ 403 1208 mt 403 1206 L
+ 403 1206 mt 409 1181 L
+ 409 1181 mt 417 1153 L
+ 417 1153 mt 424 1126 L
+ 424 1126 mt 432 1098 L
+ 432 1098 mt 438 1080 L
+ 438 1080 mt 441 1071 L
+ 441 1071 mt 450 1043 L
+ 450 1043 mt 460 1016 L
+ 460 1016 mt 470 988 L
+ 470 988 mt 473 981 L
+ 473 981 mt 481 961 L
+ 481 961 mt 492 933 L
+ 492 933 mt 505 906 L
+ 505 906 mt 508 899 L
+ 508 899 mt 517 878 L
+ 517 878 mt 531 851 L
+ 531 851 mt 543 827 L
+ 543 827 mt 545 823 L
+ 545 823 mt 559 796 L
+ 559 796 mt 575 768 L
+ 575 768 mt 578 763 L
+ 578 763 mt 591 741 L
+ 591 741 mt 608 713 L
+ 608 713 mt 613 706 L
+ 613 706 mt 626 686 L
+ 626 686 mt 644 658 L
+ 644 658 mt 647 654 L
+ 647 654 mt 664 631 L
+ 664 631 mt 682 606 L
+ 682 606 mt 684 603 L
+ 684 603 mt 705 576 L
+ 705 576 mt 717 561 L
+ 717 561 mt 727 548 L
+ 727 548 mt 750 521 L
+ 750 521 mt 752 519 L
+ 752 519 mt 774 493 L
+ 774 493 mt 787 479 L
+ 787 479 mt 800 466 L
+ 800 466 mt 822 443 L
+ 822 443 mt 827 438 L
+ 827 438 mt 856 411 L
+ 856 411 mt 857 410 L
+ 857 410 mt 888 383 L
+ 888 383 mt 892 380 L
+ 892 380 mt 922 355 L
+ 922 355 mt 926 352 L
+ 926 352 mt 959 328 L
+ 959 328 mt 961 327 L
+ 961 327 mt 996 303 L
+ 996 303 mt 1001 300 L
+1001 300 mt 1031 282 L
+1031 282 mt 1047 273 L
+1047 273 mt 1066 262 L
+1066 262 mt 1098 245 L
+1098 245 mt 1101 244 L
+1101 244 mt 1136 227 L
+1136 227 mt 1157 218 L
+1157 218 mt 1170 212 L
+1170 212 mt 1205 198 L
+1205 198 mt 1225 190 L
+1225 190 mt 1240 185 L
+1240 185 mt 1275 173 L
+1275 173 mt 1307 163 L
+1307 163 mt 1310 162 L
+1310 162 mt 1345 151 L
+1345 151 mt 1380 142 L
+1380 142 mt 1405 135 L
+1405 135 mt 1415 133 L
+1415 133 mt 1449 124 L
+1449 124 mt 1484 116 L
+1484 116 mt 1519 108 L
+1519 108 mt 1521 108 L
+1521 108 mt 1554 100 L
+1554 100 mt 1589 93 L
+1589 93 mt 1624 86 L
+1624 86 mt 1650 80 L
+1650 80 mt 1659 79 L
+1659 79 mt 1694 72 L
+1694 72 mt 1728 65 L
+1728 65 mt 1763 59 L
+1763 59 mt 1796 53 L
+1796 53 mt 1798 52 L
+1798 52 mt 1833 46 L
+1833 46 mt 1868 40 L
+1868 40 mt 1903 35 L
+1903 35 mt 1938 29 L
+1938 29 mt 1964 25 L
+1964 25 mt 1972 24 L
+1972 24 mt 2007 19 L
+2007 19 mt 2042 14 L
+2042 14 mt 2077 9 L
+2077 9 mt 2112 4 L
+2112 4 mt 2147 0 L
+2147 0 mt 2161 -1 L
+2161 -1 mt 2182 -4 L
+2182 -4 mt 2217 -9 L
+2217 -9 mt 2251 -13 L
+2251 -13 mt 2286 -18 L
+2286 -18 mt 2321 -23 L
+2321 -23 mt 2356 -28 L
+2356 -28 mt 2362 -29 L
+2362 -29 mt 2391 -33 L
+2391 -33 mt 2426 -38 L
+2426 -38 mt 2461 -44 L
+2461 -44 mt 2496 -49 L
+2496 -49 mt 2530 -55 L
+2530 -55 mt 2542 -56 L
+2542 -56 mt 2565 -60 L
+2565 -60 mt 2600 -65 L
+2600 -65 mt 2635 -70 L
+2635 -70 mt 2670 -75 L
+2670 -75 mt 2705 -80 L
+2705 -80 mt 2733 -84 L
+2733 -84 mt 2740 -85 L
+2740 -85 mt 2774 -90 L
+2774 -90 mt 2809 -94 L
+2809 -94 mt 2844 -99 L
+2844 -99 mt 2879 -104 L
+2879 -104 mt 2914 -109 L
+2914 -109 mt 2934 -111 L
+2934 -111 mt 2949 -113 L
+2949 -113 mt 2984 -118 L
+2984 -118 mt 3019 -122 L
+3019 -122 mt 3053 -127 L
+3053 -127 mt 3088 -132 L
+3088 -132 mt 3123 -136 L
+3123 -136 mt 3143 -139 L
+3143 -139 mt 3158 -141 L
+3158 -141 mt 3193 -145 L
+3193 -145 mt 3228 -150 L
+3228 -150 mt 3263 -155 L
+3263 -155 mt 3298 -159 L
+3298 -159 mt 3332 -164 L
+3332 -164 mt 3352 -166 L
+3352 -166 mt 3367 -168 L
+3367 -168 mt 3402 -172 L
+3402 -172 mt 3437 -176 L
+3437 -176 mt 3472 -180 L
+3472 -180 mt 3507 -184 L
+3507 -184 mt 3542 -188 L
+3542 -188 mt 3577 -191 L
+3577 -191 mt 3605 -194 L
+3605 -194 mt 3611 -194 L
+3611 -194 mt 3646 -197 L
+3646 -197 mt 3681 -201 L
+3681 -201 mt 3716 -203 L
+3716 -203 mt 3751 -206 L
+3751 -206 mt 3786 -209 L
+3786 -209 mt 3821 -212 L
+3821 -212 mt 3855 -214 L
+3855 -214 mt 3890 -216 L
+3890 -216 mt 3925 -218 L
+3925 -218 mt 3960 -220 L
+3960 -220 mt 3984 -221 L
+3984 -221 mt 3995 -222 L
+3995 -222 mt 4030 -223 L
+4030 -223 mt 4065 -224 L
+4065 -224 mt 4100 -225 L
+4100 -225 mt 4134 -226 L
+4134 -226 mt 4169 -226 L
+4169 -226 mt 4204 -226 L
+4204 -226 mt 4239 -226 L
+4239 -226 mt 4274 -225 L
+4274 -225 mt 4309 -224 L
+4309 -224 mt 4344 -223 L
+4344 -223 mt 4375 -221 L
+4375 -221 mt 4379 -221 L
+4379 -221 mt 4413 -219 L
+4413 -219 mt 4448 -217 L
+4448 -217 mt 4483 -214 L
+4483 -214 mt 4518 -210 L
+4518 -210 mt 4553 -207 L
+4553 -207 mt 4588 -202 L
+4588 -202 mt 4623 -198 L
+4623 -198 mt 4649 -194 L
+4649 -194 mt 4657 -193 L
+4657 -193 mt 4692 -187 L
+4692 -187 mt 4727 -182 L
+4727 -182 mt 4762 -175 L
+4762 -175 mt 4797 -169 L
+4797 -169 mt 4809 -166 L
+4809 -166 mt 4832 -162 L
+4832 -162 mt 4867 -154 L
+4867 -154 mt 4902 -146 L
+4902 -146 mt 4932 -139 L
+4932 -139 mt 4936 -138 L
+4936 -138 mt 4971 -129 L
+4971 -129 mt 5006 -119 L
+5006 -119 mt 5034 -111 L
+5034 -111 mt 5041 -109 L
+5041 -109 mt 5076 -99 L
+5076 -99 mt 5111 -88 L
+5111 -88 mt 5124 -84 L
+5124 -84 mt 5146 -77 L
+5146 -77 mt 5181 -65 L
+5181 -65 mt 5206 -56 L
+5206 -56 mt 5215 -53 L
+5215 -53 mt 5250 -40 L
+5250 -40 mt 5279 -29 L
+5279 -29 mt 5285 -26 L
+5285 -26 mt 5320 -12 L
+5320 -12 mt 5344 -1 L
+5344 -1 mt 5355 3 L
+5355 3 mt 5390 19 L
+5390 19 mt 5403 25 L
+5403 25 mt 5425 36 L
+5425 36 mt 5457 53 L
+5457 53 mt 5459 54 L
+5459 54 mt 5494 73 L
+5494 73 mt 5507 80 L
+5507 80 mt 5529 93 L
+5529 93 mt 5553 108 L
+5553 108 mt 5564 115 L
+5564 115 mt 5596 135 L
+5596 135 mt 5599 137 L
+5599 137 mt 5634 161 L
+5634 161 mt 5636 163 L
+5636 163 mt 5669 186 L
+5669 186 mt 5675 190 L
+5675 190 mt 5704 212 L
+5704 212 mt 5712 218 L
+5712 218 mt 5738 239 L
+5738 239 mt 5747 245 L
+5747 245 mt 5773 267 L
+5773 267 mt 5781 273 L
+5781 273 mt 5808 296 L
+5808 296 mt 5814 300 L
+5814 300 mt 5843 326 L
+5843 326 mt 5845 328 L
+5845 328 mt 5876 355 L
+5876 355 mt 5878 357 L
+5878 357 mt 5907 383 L
+5907 383 mt 5913 389 L
+5913 389 mt 5936 411 L
+5936 411 mt 5948 422 L
+5948 422 mt 5965 438 L
+5965 438 mt 5983 455 L
+5983 455 mt 5994 466 L
+5994 466 mt 6017 489 L
+6017 489 mt 6022 493 L
+6022 493 mt 6050 521 L
+6050 521 mt 6052 523 L
+6052 523 mt 6078 548 L
+6078 548 mt 6087 557 L
+6087 557 mt 6106 576 L
+6106 576 mt 6122 591 L
+6122 591 mt 6134 603 L
+6134 603 mt 6157 626 L
+6157 626 mt 6162 631 L
+6162 631 mt 6190 658 L
+6190 658 mt 6192 660 L
+6192 660 mt 6217 686 L
+6217 686 mt 6227 695 L
+6227 695 mt 6245 713 L
+6245 713 mt 6261 730 L
+6261 730 mt 6272 741 L
+6272 741 mt 6296 765 L
+6296 765 mt 6300 768 L
+6300 768 mt 6327 796 L
+6327 796 mt 6331 800 L
+6331 800 mt 6354 823 L
+6354 823 mt 6366 835 L
+6366 835 mt 6381 851 L
+6381 851 mt 6401 870 L
+6401 870 mt 6409 878 L
+6409 878 mt 6436 906 L
+6436 906 mt 6436 906 L
+6436 906 mt 6463 933 L
+6463 933 mt 6471 941 L
+6471 941 mt 6490 961 L
+6490 961 mt 6506 977 L
+6506 977 mt 6516 988 L
+6516 988 mt 6540 1014 L
+6540 1014 mt 6542 1016 L
+6542 1016 mt 6568 1043 L
+6568 1043 mt 6575 1051 L
+6575 1051 mt 6594 1071 L
+6594 1071 mt 6610 1089 L
+6610 1089 mt 6618 1098 L
+6618 1098 mt 6643 1126 L
+6643 1126 mt 6645 1129 L
+6645 1129 mt 6667 1153 L
+6667 1153 mt 6680 1169 L
+6680 1169 mt 6690 1181 L
+6690 1181 mt 6713 1208 L
+6713 1208 mt 6715 1211 L
+6715 1211 mt 6735 1236 L
+6735 1236 mt 6750 1254 L
+6750 1254 mt 6757 1263 L
+6757 1263 mt 6778 1291 L
+6778 1291 mt 6785 1299 L
+6785 1299 mt 6799 1318 L
+6799 1318 mt 6819 1346 L
+6819 1346 mt 6819 1346 L
+6819 1346 mt 6839 1373 L
+6839 1373 mt 6854 1396 L
+6854 1396 mt 6858 1401 L
+6858 1401 mt 6876 1428 L
+6876 1428 mt 6889 1449 L
+6889 1449 mt 6894 1456 L
+6894 1456 mt 6911 1484 L
+6911 1484 mt 6924 1506 L
+6924 1506 mt 6927 1511 L
+6927 1511 mt 6943 1539 L
+6943 1539 mt 6957 1566 L
+6957 1566 mt 6959 1569 L
+6959 1569 mt 6972 1594 L
+6972 1594 mt 6985 1621 L
+6985 1621 mt 6994 1640 L
+6994 1640 mt 6998 1649 L
+6998 1649 mt 7010 1676 L
+7010 1676 mt 7022 1704 L
+7022 1704 mt 7029 1720 L
+7029 1720 mt 7033 1731 L
+7033 1731 mt 7043 1759 L
+7043 1759 mt 7053 1786 L
+7053 1786 mt 7061 1814 L
+7061 1814 mt 7063 1821 L
+7063 1821 mt 7069 1841 L
+7069 1841 mt 7076 1869 L
+7076 1869 mt 7082 1896 L
+7082 1896 mt 7088 1924 L
+7088 1924 mt 7092 1951 L
+7092 1951 mt 7096 1979 L
+7096 1979 mt 7098 2005 L
+7029 1934 mt 7031 1951 L
+7031 1951 mt 7034 1979 L
+7034 1979 mt 7037 2006 L
+7037 2006 mt 7039 2034 L
+7039 2034 mt 7040 2061 L
+7040 2061 mt 7040 2089 L
+7040 2089 mt 7040 2116 L
+7040 2116 mt 7039 2144 L
+7039 2144 mt 7038 2171 L
+7038 2171 mt 7036 2199 L
+7036 2199 mt 7033 2226 L
+7033 2226 mt 7030 2254 L
+7030 2254 mt 7029 2260 L
+7029 2260 mt 7026 2281 L
+7026 2281 mt 7021 2309 L
+7021 2309 mt 7016 2336 L
+7016 2336 mt 7011 2364 L
+7011 2364 mt 7004 2391 L
+7004 2391 mt 6998 2419 L
+6998 2419 mt 6994 2435 L
+6994 2435 mt 6991 2446 L
+6991 2446 mt 6983 2474 L
+6983 2474 mt 6975 2502 L
+6975 2502 mt 6967 2529 L
+6967 2529 mt 6959 2555 L
+6959 2555 mt 6958 2557 L
+6958 2557 mt 6950 2584 L
+6950 2584 mt 6940 2612 L
+6940 2612 mt 6931 2639 L
+6931 2639 mt 6924 2659 L
+6924 2659 mt 6921 2667 L
+6921 2667 mt 6912 2694 L
+6912 2694 mt 6902 2722 L
+6902 2722 mt 6891 2749 L
+6891 2749 mt 6889 2755 L
+6889 2755 mt 6881 2777 L
+6881 2777 mt 6871 2804 L
+6871 2804 mt 6860 2832 L
+6860 2832 mt 6854 2847 L
+6854 2847 mt 6850 2859 L
+6850 2859 mt 6839 2887 L
+6839 2887 mt 6829 2914 L
+6829 2914 mt 6819 2940 L
+6819 2940 mt 6819 2942 L
+6819 2942 mt 6809 2969 L
+6809 2969 mt 6799 2997 L
+6799 2997 mt 6789 3024 L
+6789 3024 mt 6785 3035 L
+6785 3035 mt 6778 3052 L
+6778 3052 mt 6768 3079 L
+6768 3079 mt 6758 3107 L
+6758 3107 mt 6750 3129 L
+6750 3129 mt 6748 3134 L
+6748 3134 mt 6738 3162 L
+6738 3162 mt 6728 3189 L
+6728 3189 mt 6718 3217 L
+6718 3217 mt 6715 3228 L
+6715 3228 mt 6709 3244 L
+6709 3244 mt 6700 3272 L
+6700 3272 mt 6691 3299 L
+6691 3299 mt 6682 3327 L
+6682 3327 mt 6680 3335 L
+6680 3335 mt 6674 3354 L
+6674 3354 mt 6665 3382 L
+6665 3382 mt 6656 3409 L
+6656 3409 mt 6646 3437 L
+6646 3437 mt 6645 3440 L
+6645 3440 mt 6637 3464 L
+6637 3464 mt 6627 3492 L
+6627 3492 mt 6616 3519 L
+6616 3519 mt 6610 3534 L
+6610 3534 mt 6605 3547 L
+6605 3547 mt 6594 3575 L
+6594 3575 mt 6582 3602 L
+6582 3602 mt 6575 3618 L
+6575 3618 mt 6570 3630 L
+6570 3630 mt 6558 3657 L
+6558 3657 mt 6545 3685 L
+6545 3685 mt 6540 3695 L
+6540 3695 mt 6532 3712 L
+6532 3712 mt 6519 3740 L
+6519 3740 mt 6506 3767 L
+6506 3767 mt 6506 3768 L
+6506 3768 mt 6492 3795 L
+6492 3795 mt 6479 3822 L
+6479 3822 mt 6471 3838 L
+6471 3838 mt 6465 3850 L
+6465 3850 mt 6451 3877 L
+6451 3877 mt 6437 3905 L
+6437 3905 mt 6436 3908 L
+6436 3908 mt 6423 3932 L
+6423 3932 mt 6408 3960 L
+6408 3960 mt 6401 3972 L
+6401 3972 mt 6392 3987 L
+6392 3987 mt 6374 4015 L
+6374 4015 mt 6366 4026 L
+6366 4026 mt 6354 4042 L
+6354 4042 mt 6335 4070 L
+6335 4070 mt 6331 4076 L
+6331 4076 mt 6316 4097 L
+6316 4097 mt 6303 4125 L
+6303 4125 mt 6296 4144 L
+6296 4144 mt 6293 4152 L
+6293 4152 mt 6284 4180 L
+6284 4180 mt 6274 4207 L
+6274 4207 mt 6261 4224 L
+6261 4224 mt 6241 4235 L
+6241 4235 mt 6227 4242 L
+6227 4242 mt 6210 4235 L
+6210 4235 mt 6192 4224 L
+6192 4224 mt 6182 4207 L
+6182 4207 mt 6169 4180 L
+6169 4180 mt 6160 4152 L
+6160 4152 mt 6157 4137 L
+6157 4137 mt 6155 4125 L
+6155 4125 mt 6151 4097 L
+6151 4097 mt 6147 4070 L
+6147 4070 mt 6137 4042 L
+6137 4042 mt 6124 4015 L
+6124 4015 mt 6122 4010 L
+6122 4010 mt 6112 3987 L
+6112 3987 mt 6100 3960 L
+6100 3960 mt 6087 3932 L
+6087 3932 mt 6087 3932 L
+6087 3932 mt 6073 3905 L
+6073 3905 mt 6060 3877 L
+6060 3877 mt 6052 3859 L
+6052 3859 mt 6048 3850 L
+6048 3850 mt 6036 3822 L
+6036 3822 mt 6022 3795 L
+6022 3795 mt 6017 3787 L
+6017 3787 mt 6002 3767 L
+6002 3767 mt 5983 3746 L
+5983 3746 mt 5976 3740 L
+5976 3740 mt 5948 3717 L
+5948 3717 mt 5940 3712 L
+5940 3712 mt 5913 3696 L
+5913 3696 mt 5891 3685 L
+5891 3685 mt 5878 3679 L
+5878 3679 mt 5843 3664 L
+5843 3664 mt 5827 3657 L
+5827 3657 mt 5808 3649 L
+5808 3649 mt 5773 3633 L
+5773 3633 mt 5766 3630 L
+5766 3630 mt 5738 3616 L
+5738 3616 mt 5714 3602 L
+5714 3602 mt 5704 3596 L
+5704 3596 mt 5672 3575 L
+5672 3575 mt 5669 3572 L
+5669 3572 mt 5638 3547 L
+5638 3547 mt 5634 3543 L
+5634 3543 mt 5611 3519 L
+5611 3519 mt 5599 3506 L
+5599 3506 mt 5587 3492 L
+5587 3492 mt 5567 3464 L
+5567 3464 mt 5564 3460 L
+5564 3460 mt 5547 3437 L
+5547 3437 mt 5530 3409 L
+5530 3409 mt 5529 3408 L
+5529 3408 mt 5514 3382 L
+5514 3382 mt 5500 3354 L
+5500 3354 mt 5494 3340 L
+5494 3340 mt 5488 3327 L
+5488 3327 mt 5478 3299 L
+5478 3299 mt 5469 3272 L
+5469 3272 mt 5460 3244 L
+5460 3244 mt 5459 3243 L
+5459 3243 mt 5448 3217 L
+5448 3217 mt 5434 3189 L
+5434 3189 mt 5425 3174 L
+5425 3174 mt 5417 3162 L
+5417 3162 mt 5393 3134 L
+5393 3134 mt 5390 3131 L
+5390 3131 mt 5361 3107 L
+5361 3107 mt 5355 3102 L
+5355 3102 mt 5325 3079 L
+5325 3079 mt 5320 3076 L
+5320 3076 mt 5292 3052 L
+5292 3052 mt 5285 3046 L
+5285 3046 mt 5263 3024 L
+5263 3024 mt 5250 3012 L
+5250 3012 mt 5233 2997 L
+5233 2997 mt 5215 2983 L
+5215 2983 mt 5194 2969 L
+5194 2969 mt 5181 2962 L
+5181 2962 mt 5146 2949 L
+5146 2949 mt 5120 2942 L
+5120 2942 mt 5111 2939 L
+5111 2939 mt 5076 2928 L
+5076 2928 mt 5044 2914 L
+5044 2914 mt 5041 2913 L
+5041 2913 mt 5006 2894 L
+5006 2894 mt 4991 2887 L
+4991 2887 mt 4971 2876 L
+4971 2876 mt 4942 2859 L
+4942 2859 mt 4936 2856 L
+4936 2856 mt 4906 2832 L
+4906 2832 mt 4902 2827 L
+4902 2827 mt 4879 2804 L
+4879 2804 mt 4867 2790 L
+4867 2790 mt 4855 2777 L
+4855 2777 mt 4832 2749 L
+4832 2749 mt 4832 2748 L
+4832 2748 mt 4810 2722 L
+4810 2722 mt 4797 2706 L
+4797 2706 mt 4787 2694 L
+4787 2694 mt 4766 2667 L
+4766 2667 mt 4762 2660 L
+4762 2660 mt 4749 2639 L
+4749 2639 mt 4733 2612 L
+4733 2612 mt 4727 2600 L
+4727 2600 mt 4719 2584 L
+4719 2584 mt 4707 2557 L
+4707 2557 mt 4697 2529 L
+4697 2529 mt 4692 2514 L
+4692 2514 mt 4688 2502 L
+4688 2502 mt 4680 2474 L
+4680 2474 mt 4668 2446 L
+4668 2446 mt 4657 2433 L
+4657 2433 mt 4639 2419 L
+4639 2419 mt 4623 2409 L
+4623 2409 mt 4588 2393 L
+4588 2393 mt 4583 2391 L
+4583 2391 mt 4553 2376 L
+4553 2376 mt 4525 2364 L
+4525 2364 mt 4518 2360 L
+4518 2360 mt 4483 2345 L
+4483 2345 mt 4460 2336 L
+4460 2336 mt 4448 2332 L
+4448 2332 mt 4413 2321 L
+4413 2321 mt 4379 2311 L
+4379 2311 mt 4370 2309 L
+4370 2309 mt 4344 2302 L
+4344 2302 mt 4309 2293 L
+4309 2293 mt 4274 2285 L
+4274 2285 mt 4259 2281 L
+4259 2281 mt 4239 2275 L
+4239 2275 mt 4204 2265 L
+4204 2265 mt 4169 2255 L
+4169 2255 mt 4166 2254 L
+4166 2254 mt 4134 2243 L
+4134 2243 mt 4100 2229 L
+4100 2229 mt 4095 2226 L
+4095 2226 mt 4065 2209 L
+4065 2209 mt 4051 2199 L
+4051 2199 mt 4030 2182 L
+4030 2182 mt 4018 2171 L
+4018 2171 mt 3995 2150 L
+3995 2150 mt 3988 2144 L
+3988 2144 mt 3962 2116 L
+3962 2116 mt 3960 2113 L
+3960 2113 mt 3940 2089 L
+3940 2089 mt 3925 2067 L
+3925 2067 mt 3921 2061 L
+3921 2061 mt 3900 2034 L
+3900 2034 mt 3890 2022 L
+3890 2022 mt 3874 2006 L
+3874 2006 mt 3855 1993 L
+3855 1993 mt 3823 1979 L
+3823 1979 mt 3821 1978 L
+3821 1978 mt 3786 1969 L
+3786 1969 mt 3751 1962 L
+3751 1962 mt 3716 1954 L
+3716 1954 mt 3711 1951 L
+3711 1951 mt 3681 1938 L
+3681 1938 mt 3660 1924 L
+3660 1924 mt 3646 1914 L
+3646 1914 mt 3621 1896 L
+3621 1896 mt 3611 1889 L
+3611 1889 mt 3580 1869 L
+3580 1869 mt 3577 1866 L
+3577 1866 mt 3542 1847 L
+3542 1847 mt 3524 1841 L
+3524 1841 mt 3507 1834 L
+3507 1834 mt 3472 1828 L
+3472 1828 mt 3437 1827 L
+3437 1827 mt 3402 1831 L
+3402 1831 mt 3367 1838 L
+3367 1838 mt 3355 1841 L
+3355 1841 mt 3332 1847 L
+3332 1847 mt 3298 1856 L
+3298 1856 mt 3263 1863 L
+3263 1863 mt 3231 1869 L
+3231 1869 mt 3228 1869 L
+3228 1869 mt 3193 1873 L
+3193 1873 mt 3158 1876 L
+3158 1876 mt 3123 1877 L
+3123 1877 mt 3088 1876 L
+3088 1876 mt 3053 1875 L
+3053 1875 mt 3019 1874 L
+3019 1874 mt 2984 1873 L
+2984 1873 mt 2949 1873 L
+2949 1873 mt 2914 1874 L
+2914 1874 mt 2879 1878 L
+2879 1878 mt 2844 1883 L
+2844 1883 mt 2809 1891 L
+2809 1891 mt 2792 1896 L
+2792 1896 mt 2774 1902 L
+2774 1902 mt 2740 1915 L
+2740 1915 mt 2720 1924 L
+2720 1924 mt 2705 1931 L
+2705 1931 mt 2670 1948 L
+2670 1948 mt 2664 1951 L
+2664 1951 mt 2635 1967 L
+2635 1967 mt 2615 1979 L
+2615 1979 mt 2600 1987 L
+2600 1987 mt 2566 2006 L
+2566 2006 mt 2565 2006 L
+2565 2006 mt 2530 2026 L
+2530 2026 mt 2515 2034 L
+2515 2034 mt 2496 2045 L
+2496 2045 mt 2468 2061 L
+2468 2061 mt 2461 2067 L
+2461 2067 mt 2431 2089 L
+2431 2089 mt 2426 2094 L
+2426 2094 mt 2403 2116 L
+2403 2116 mt 2391 2132 L
+2391 2132 mt 2383 2144 L
+2383 2144 mt 2367 2171 L
+2367 2171 mt 2356 2193 L
+2356 2193 mt 2354 2199 L
+2354 2199 mt 2342 2226 L
+2342 2226 mt 2331 2254 L
+2331 2254 mt 2321 2281 L
+2321 2281 mt 2321 2281 L
+2321 2281 mt 2316 2309 L
+2316 2309 mt 2316 2336 L
+2316 2336 mt 2320 2364 L
+2320 2364 mt 2321 2366 L
+2321 2366 mt 2328 2391 L
+2328 2391 mt 2336 2419 L
+2336 2419 mt 2343 2446 L
+2343 2446 mt 2350 2474 L
+2350 2474 mt 2356 2502 L
+2356 2502 mt 2356 2503 L
+2356 2503 mt 2363 2529 L
+2363 2529 mt 2372 2557 L
+2372 2557 mt 2383 2584 L
+2383 2584 mt 2391 2602 L
+2391 2602 mt 2395 2612 L
+2395 2612 mt 2408 2639 L
+2408 2639 mt 2422 2667 L
+2422 2667 mt 2426 2675 L
+2426 2675 mt 2435 2694 L
+2435 2694 mt 2450 2722 L
+2450 2722 mt 2461 2740 L
+2461 2740 mt 2466 2749 L
+2466 2749 mt 2486 2777 L
+2486 2777 mt 2496 2789 L
+2496 2789 mt 2508 2804 L
+2508 2804 mt 2530 2831 L
+2530 2831 mt 2531 2832 L
+2531 2832 mt 2551 2859 L
+2551 2859 mt 2565 2881 L
+2565 2881 mt 2569 2887 L
+2569 2887 mt 2583 2914 L
+2583 2914 mt 2594 2942 L
+2594 2942 mt 2600 2969 L
+2600 2969 mt 2600 2969 L
+2600 2969 mt 2604 2997 L
+2604 2997 mt 2606 3024 L
+2606 3024 mt 2606 3052 L
+2606 3052 mt 2600 3079 L
+2600 3079 mt 2600 3080 L
+2600 3080 mt 2593 3107 L
+2593 3107 mt 2595 3134 L
+2595 3134 mt 2600 3143 L
+2600 3143 mt 2618 3162 L
+2618 3162 mt 2635 3172 L
+2635 3172 mt 2670 3187 L
+2670 3187 mt 2675 3189 L
+2675 3189 mt 2705 3200 L
+2705 3200 mt 2740 3212 L
+2740 3212 mt 2752 3217 L
+2752 3217 mt 2774 3227 L
+2774 3227 mt 2809 3244 L
+2809 3244 mt 2810 3244 L
+2810 3244 mt 2844 3267 L
+2844 3267 mt 2852 3272 L
+2852 3272 mt 2879 3295 L
+2879 3295 mt 2884 3299 L
+2884 3299 mt 2911 3327 L
+2911 3327 mt 2914 3331 L
+2914 3331 mt 2933 3354 L
+2933 3354 mt 2949 3379 L
+2949 3379 mt 2951 3382 L
+2951 3382 mt 2963 3409 L
+2963 3409 mt 2972 3437 L
+2972 3437 mt 2979 3464 L
+2979 3464 mt 2984 3486 L
+2984 3486 mt 2985 3492 L
+2985 3492 mt 2992 3519 L
+2992 3519 mt 2999 3547 L
+2999 3547 mt 3006 3575 L
+3006 3575 mt 3014 3602 L
+3014 3602 mt 3018 3630 L
+3018 3630 mt 3017 3657 L
+3017 3657 mt 3010 3685 L
+3010 3685 mt 3000 3712 L
+3000 3712 mt 2990 3740 L
+2990 3740 mt 2985 3767 L
+2985 3767 mt 2987 3795 L
+2987 3795 mt 2999 3822 L
+2999 3822 mt 3019 3846 L
+3019 3846 mt 3021 3850 L
+3021 3850 mt 3053 3877 L
+3053 3877 mt 3054 3877 L
+3054 3877 mt 3084 3905 L
+3084 3905 mt 3088 3910 L
+3088 3910 mt 3103 3932 L
+3103 3932 mt 3112 3960 L
+3112 3960 mt 3114 3987 L
+3114 3987 mt 3116 4015 L
+3116 4015 mt 3116 4042 L
+3116 4042 mt 3116 4070 L
+3116 4070 mt 3113 4097 L
+3113 4097 mt 3109 4125 L
+3109 4125 mt 3100 4152 L
+3100 4152 mt 3088 4180 L
+3088 4180 mt 3088 4180 L
+3088 4180 mt 3081 4207 L
+3081 4207 mt 3074 4235 L
+3074 4235 mt 3076 4262 L
+3076 4262 mt 3080 4290 L
+3080 4290 mt 3088 4311 L
+3088 4311 mt 3090 4317 L
+3090 4317 mt 3103 4345 L
+3103 4345 mt 3122 4372 L
+3122 4372 mt 3123 4374 L
+3123 4374 mt 3148 4400 L
+3148 4400 mt 3158 4407 L
+3158 4407 mt 3183 4427 L
+3183 4427 mt 3193 4433 L
+3193 4433 mt 3228 4455 L
+3228 4455 mt 3228 4455 L
+3228 4455 mt 3263 4472 L
+3263 4472 mt 3283 4482 L
+3283 4482 mt 3298 4488 L
+3298 4488 mt 3332 4503 L
+3332 4503 mt 3348 4510 L
+3348 4510 mt 3367 4518 L
+3367 4518 mt 3402 4535 L
+3402 4535 mt 3406 4537 L
+3406 4537 mt 3437 4562 L
+3437 4562 mt 3440 4565 L
+3440 4565 mt 3456 4592 L
+3456 4592 mt 3448 4620 L
+3448 4620 mt 3437 4630 L
+3437 4630 mt 3415 4648 L
+3415 4648 mt 3402 4657 L
+3402 4657 mt 3374 4675 L
+3374 4675 mt 3367 4679 L
+3367 4679 mt 3332 4697 L
+3332 4697 mt 3321 4703 L
+3321 4703 mt 3298 4714 L
+3298 4714 mt 3265 4730 L
+3265 4730 mt 3263 4731 L
+3263 4731 mt 3228 4747 L
+3228 4747 mt 3203 4758 L
+3203 4758 mt 3193 4762 L
+3193 4762 mt 3158 4776 L
+3158 4776 mt 3135 4785 L
+3135 4785 mt 3123 4790 L
+3123 4790 mt 3088 4802 L
+3088 4802 mt 3058 4813 L
+3058 4813 mt 3053 4814 L
+3053 4814 mt 3019 4825 L
+3019 4825 mt 2984 4836 L
+2984 4836 mt 2969 4840 L
+2969 4840 mt 2949 4846 L
+2949 4846 mt 2914 4855 L
+2914 4855 mt 2879 4864 L
+2879 4864 mt 2866 4868 L
+2866 4868 mt 2844 4873 L
+2844 4873 mt 2809 4881 L
+2809 4881 mt 2774 4889 L
+2774 4889 mt 2742 4895 L
+2742 4895 mt 2740 4896 L
+2740 4896 mt 2705 4902 L
+2705 4902 mt 2670 4908 L
+2670 4908 mt 2635 4913 L
+2635 4913 mt 2600 4918 L
+2600 4918 mt 2565 4922 L
+2565 4922 mt 2560 4923 L
+2560 4923 mt 2530 4926 L
+2530 4926 mt 2496 4929 L
+2496 4929 mt 2461 4931 L
+2461 4931 mt 2426 4933 L
+2426 4933 mt 2391 4935 L
+2391 4935 mt 2356 4935 L
+2356 4935 mt 2321 4935 L
+2321 4935 mt 2286 4935 L
+2286 4935 mt 2251 4933 L
+2251 4933 mt 2217 4931 L
+2217 4931 mt 2182 4928 L
+2182 4928 mt 2147 4924 L
+2147 4924 mt 2140 4923 L
+2140 4923 mt 2112 4919 L
+2112 4919 mt 2077 4913 L
+2077 4913 mt 2042 4907 L
+2042 4907 mt 2007 4900 L
+2007 4900 mt 1988 4895 L
+1988 4895 mt 1972 4892 L
+1972 4892 mt 1938 4883 L
+1938 4883 mt 1903 4873 L
+1903 4873 mt 1888 4868 L
+1888 4868 mt 1868 4861 L
+1868 4861 mt 1833 4849 L
+1833 4849 mt 1812 4840 L
+1812 4840 mt 1798 4834 L
+1798 4834 mt 1763 4819 L
+1763 4819 mt 1752 4813 L
+1752 4813 mt 1728 4800 L
+1728 4800 mt 1702 4785 L
+1702 4785 mt 1694 4780 L
+1694 4780 mt 1660 4758 L
+1660 4758 mt 1659 4756 L
+1659 4756 mt 1625 4730 L
+1625 4730 mt 1624 4729 L
+1624 4729 mt 1595 4703 L
+1595 4703 mt 1589 4697 L
+1589 4697 mt 1569 4675 L
+1569 4675 mt 1554 4658 L
+1554 4658 mt 1546 4648 L
+1546 4648 mt 1526 4620 L
+1526 4620 mt 1519 4610 L
+1519 4610 mt 1507 4592 L
+1507 4592 mt 1491 4565 L
+1491 4565 mt 1484 4553 L
+1484 4553 mt 1476 4537 L
+1476 4537 mt 1462 4510 L
+1462 4510 mt 1449 4484 L
+1449 4484 mt 1449 4482 L
+1449 4482 mt 1436 4455 L
+1436 4455 mt 1425 4427 L
+1425 4427 mt 1415 4401 L
+1415 4401 mt 1414 4400 L
+1414 4400 mt 1404 4372 L
+1404 4372 mt 1395 4345 L
+1395 4345 mt 1386 4317 L
+1386 4317 mt 1380 4297 L
+1380 4297 mt 1377 4290 L
+1377 4290 mt 1370 4262 L
+1370 4262 mt 1364 4235 L
+1364 4235 mt 1360 4207 L
+1360 4207 mt 1357 4180 L
+1357 4180 mt 1355 4152 L
+1355 4152 mt 1354 4125 L
+1354 4125 mt 1356 4097 L
+1356 4097 mt 1358 4070 L
+1358 4070 mt 1362 4042 L
+1362 4042 mt 1367 4015 L
+1367 4015 mt 1374 3987 L
+1374 3987 mt 1380 3964 L
+1380 3964 mt 1381 3960 L
+1381 3960 mt 1389 3932 L
+1389 3932 mt 1398 3905 L
+1398 3905 mt 1406 3877 L
+1406 3877 mt 1415 3850 L
+1415 3850 mt 1415 3850 L
+1415 3850 mt 1423 3822 L
+1423 3822 mt 1430 3795 L
+1430 3795 mt 1435 3767 L
+1435 3767 mt 1439 3740 L
+1439 3740 mt 1440 3712 L
+1440 3712 mt 1440 3685 L
+1440 3685 mt 1436 3657 L
+1436 3657 mt 1430 3630 L
+1430 3630 mt 1421 3602 L
+1421 3602 mt 1415 3587 L
+1415 3587 mt 1409 3575 L
+1409 3575 mt 1393 3547 L
+1393 3547 mt 1380 3528 L
+1380 3528 mt 1374 3519 L
+1374 3519 mt 1350 3492 L
+1350 3492 mt 1345 3487 L
+1345 3487 mt 1321 3464 L
+1321 3464 mt 1310 3455 L
+1310 3455 mt 1287 3437 L
+1287 3437 mt 1275 3429 L
+1275 3429 mt 1248 3409 L
+1248 3409 mt 1240 3405 L
+1240 3405 mt 1205 3383 L
+1205 3383 mt 1204 3382 L
+1204 3382 mt 1170 3362 L
+1170 3362 mt 1157 3354 L
+1157 3354 mt 1136 3342 L
+1136 3342 mt 1109 3327 L
+1109 3327 mt 1101 3323 L
+1101 3323 mt 1066 3303 L
+1066 3303 mt 1060 3299 L
+1060 3299 mt 1031 3283 L
+1031 3283 mt 1011 3272 L
+1011 3272 mt 996 3263 L
+ 996 3263 mt 964 3244 L
+ 964 3244 mt 961 3243 L
+ 961 3243 mt 926 3222 L
+ 926 3222 mt 918 3217 L
+ 918 3217 mt 892 3201 L
+ 892 3201 mt 873 3189 L
+ 873 3189 mt 857 3179 L
+ 857 3179 mt 829 3162 L
+ 829 3162 mt 822 3157 L
+ 822 3157 mt 787 3135 L
+ 787 3135 mt 786 3134 L
+ 786 3134 mt 752 3111 L
+ 752 3111 mt 745 3107 L
+ 745 3107 mt 717 3087 L
+ 717 3087 mt 707 3079 L
+ 707 3079 mt 682 3061 L
+ 682 3061 mt 670 3052 L
+ 670 3052 mt 647 3033 L
+ 647 3033 mt 636 3024 L
+ 636 3024 mt 613 3004 L
+ 613 3004 mt 604 2997 L
+ 604 2997 mt 578 2973 L
+ 578 2973 mt 574 2969 L
+ 574 2969 mt 546 2942 L
+ 546 2942 mt 543 2939 L
+ 543 2939 mt 520 2914 L
+ 520 2914 mt 508 2901 L
+ 508 2901 mt 496 2887 L
+ 496 2887 mt 473 2859 L
+ 473 2859 mt 473 2859 L
+ 473 2859 mt 453 2832 L
+ 453 2832 mt 438 2811 L
+ 438 2811 mt 434 2804 L
+ 434 2804 mt 416 2777 L
+ 416 2777 mt 403 2755 L
+ 403 2755 mt 400 2749 L
+ 400 2749 mt 384 2722 L
+ 384 2722 mt 370 2694 L
+ 370 2694 mt 368 2691 L
+ 368 2691 mt 357 2667 L
+ 357 2667 mt 345 2639 L
+ 345 2639 mt 334 2612 L
+ 334 2612 mt 334 2611 L
+ 334 2611 mt 324 2584 L
+ 324 2584 mt 315 2557 L
+ 315 2557 mt 308 2529 L
+ 308 2529 mt 301 2502 L
+ 301 2502 mt 299 2489 L
+ 299 2489 mt 296 2474 L
+ 296 2474 mt 291 2446 L
+ 291 2446 mt 287 2419 L
+ 287 2419 mt 284 2391 L
+ 284 2391 mt 282 2364 L
+ 282 2364 mt 281 2336 L
+ 281 2336 mt 280 2309 L
+ 280 2309 mt 279 2281 L
+ 279 2281 mt 280 2254 L
+ 280 2254 mt 281 2226 L
+ 281 2226 mt 283 2199 L
+ 283 2199 mt 285 2171 L
+ 285 2171 mt 288 2144 L
+ 288 2144 mt 292 2116 L
+ 292 2116 mt 296 2089 L
+ 296 2089 mt 299 2073 L
+ 299 2073 mt 301 2061 L
+ 301 2061 mt 306 2034 L
+ 306 2034 mt 311 2006 L
+ 311 2006 mt 317 1979 L
+ 317 1979 mt 322 1951 L
+ 322 1951 mt 328 1924 L
+ 328 1924 mt 334 1896 L
+ 334 1896 mt 334 1896 L
+ 334 1896 mt 339 1869 L
+ 339 1869 mt 345 1841 L
+ 345 1841 mt 351 1814 L
+ 351 1814 mt 356 1786 L
+ 356 1786 mt 362 1759 L
+ 362 1759 mt 368 1731 L
+ 368 1731 mt 368 1728 L
+ 368 1728 mt 373 1704 L
+ 373 1704 mt 378 1676 L
+ 378 1676 mt 383 1649 L
+ 383 1649 mt 388 1621 L
+ 388 1621 mt 393 1594 L
+ 393 1594 mt 398 1566 L
+ 398 1566 mt 402 1539 L
+ 402 1539 mt 403 1531 L
+ 403 1531 mt 407 1511 L
+ 407 1511 mt 411 1484 L
+ 411 1484 mt 415 1456 L
+ 415 1456 mt 419 1428 L
+ 419 1428 mt 423 1401 L
+ 423 1401 mt 428 1373 L
+ 428 1373 mt 432 1346 L
+ 432 1346 mt 436 1318 L
+ 436 1318 mt 438 1306 L
+ 438 1306 mt 441 1291 L
+ 441 1291 mt 446 1263 L
+ 446 1263 mt 451 1236 L
+ 451 1236 mt 457 1208 L
+ 457 1208 mt 463 1181 L
+ 463 1181 mt 469 1153 L
+ 469 1153 mt 473 1138 L
+ 473 1138 mt 476 1126 L
+ 476 1126 mt 484 1098 L
+ 484 1098 mt 492 1071 L
+ 492 1071 mt 500 1043 L
+ 500 1043 mt 508 1021 L
+ 508 1021 mt 510 1016 L
+ 510 1016 mt 519 988 L
+ 519 988 mt 529 961 L
+ 529 961 mt 540 933 L
+ 540 933 mt 543 927 L
+ 543 927 mt 552 906 L
+ 552 906 mt 564 878 L
+ 564 878 mt 577 851 L
+ 577 851 mt 578 849 L
+ 578 849 mt 590 823 L
+ 590 823 mt 605 796 L
+ 605 796 mt 613 781 L
+ 613 781 mt 620 768 L
+ 620 768 mt 636 741 L
+ 636 741 mt 647 722 L
+ 647 722 mt 653 713 L
+ 653 713 mt 670 686 L
+ 670 686 mt 682 668 L
+ 682 668 mt 689 658 L
+ 689 658 mt 708 631 L
+ 708 631 mt 717 619 L
+ 717 619 mt 729 603 L
+ 729 603 mt 750 576 L
+ 750 576 mt 752 573 L
+ 752 573 mt 772 548 L
+ 772 548 mt 787 531 L
+ 787 531 mt 796 521 L
+ 796 521 mt 820 493 L
+ 820 493 mt 822 492 L
+ 822 492 mt 846 466 L
+ 846 466 mt 857 455 L
+ 857 455 mt 874 438 L
+ 874 438 mt 892 422 L
+ 892 422 mt 904 411 L
+ 904 411 mt 926 392 L
+ 926 392 mt 937 383 L
+ 937 383 mt 961 365 L
+ 961 365 mt 974 355 L
+ 974 355 mt 996 340 L
+ 996 340 mt 1014 328 L
+1014 328 mt 1031 317 L
+1031 317 mt 1059 300 L
+1059 300 mt 1066 296 L
+1066 296 mt 1101 277 L
+1101 277 mt 1110 273 L
+1110 273 mt 1136 260 L
+1136 260 mt 1169 245 L
+1169 245 mt 1170 245 L
+1170 245 mt 1205 230 L
+1205 230 mt 1239 218 L
+1239 218 mt 1240 218 L
+1240 218 mt 1275 206 L
+1275 206 mt 1310 195 L
+1310 195 mt 1328 190 L
+1328 190 mt 1345 186 L
+1345 186 mt 1380 177 L
+1380 177 mt 1415 168 L
+1415 168 mt 1439 163 L
+1439 163 mt 1449 160 L
+1449 160 mt 1484 153 L
+1484 153 mt 1519 146 L
+1519 146 mt 1554 138 L
+1554 138 mt 1569 135 L
+1569 135 mt 1589 131 L
+1589 131 mt 1624 125 L
+1624 125 mt 1659 118 L
+1659 118 mt 1694 111 L
+1694 111 mt 1713 108 L
+1713 108 mt 1728 105 L
+1728 105 mt 1763 99 L
+1763 99 mt 1798 93 L
+1798 93 mt 1833 87 L
+1833 87 mt 1868 82 L
+1868 82 mt 1880 80 L
+1880 80 mt 1903 77 L
+1903 77 mt 1938 72 L
+1938 72 mt 1972 67 L
+1972 67 mt 2007 63 L
+2007 63 mt 2042 59 L
+2042 59 mt 2077 54 L
+2077 54 mt 2090 53 L
+2090 53 mt 2112 50 L
+2112 50 mt 2147 46 L
+2147 46 mt 2182 42 L
+2182 42 mt 2217 38 L
+2217 38 mt 2251 34 L
+2251 34 mt 2286 30 L
+2286 30 mt 2321 26 L
+2321 26 mt 2324 25 L
+2324 25 mt 2356 21 L
+2356 21 mt 2391 17 L
+2391 17 mt 2426 12 L
+2426 12 mt 2461 7 L
+2461 7 mt 2496 2 L
+2496 2 mt 2526 -1 L
+2526 -1 mt 2530 -2 L
+2530 -2 mt 2565 -7 L
+2565 -7 mt 2600 -11 L
+2600 -11 mt 2635 -16 L
+2635 -16 mt 2670 -20 L
+2670 -20 mt 2705 -25 L
+2705 -25 mt 2736 -29 L
+2736 -29 mt 2740 -29 L
+2740 -29 mt 2774 -34 L
+2774 -34 mt 2809 -38 L
+2809 -38 mt 2844 -43 L
+2844 -43 mt 2879 -47 L
+2879 -47 mt 2914 -51 L
+2914 -51 mt 2949 -56 L
+2949 -56 mt 2955 -56 L
+2955 -56 mt 2984 -60 L
+2984 -60 mt 3019 -64 L
+3019 -64 mt 3053 -68 L
+3053 -68 mt 3088 -72 L
+3088 -72 mt 3123 -76 L
+3123 -76 mt 3158 -81 L
+3158 -81 mt 3182 -84 L
+3182 -84 mt 3193 -85 L
+3193 -85 mt 3228 -89 L
+3228 -89 mt 3263 -94 L
+3263 -94 mt 3298 -98 L
+3298 -98 mt 3332 -102 L
+3332 -102 mt 3367 -107 L
+3367 -107 mt 3402 -111 L
+3402 -111 mt 3405 -111 L
+3405 -111 mt 3437 -115 L
+3437 -115 mt 3472 -119 L
+3472 -119 mt 3507 -123 L
+3507 -123 mt 3542 -127 L
+3542 -127 mt 3577 -131 L
+3577 -131 mt 3611 -134 L
+3611 -134 mt 3646 -138 L
+3646 -138 mt 3655 -139 L
+3655 -139 mt 3681 -141 L
+3681 -141 mt 3716 -145 L
+3716 -145 mt 3751 -148 L
+3751 -148 mt 3786 -152 L
+3786 -152 mt 3821 -155 L
+3821 -155 mt 3855 -158 L
+3855 -158 mt 3890 -161 L
+3890 -161 mt 3925 -164 L
+3925 -164 mt 3960 -166 L
+3960 -166 mt 3962 -166 L
+3962 -166 mt 3995 -168 L
+3995 -168 mt 4030 -170 L
+4030 -170 mt 4065 -172 L
+4065 -172 mt 4100 -174 L
+4100 -174 mt 4134 -175 L
+4134 -175 mt 4169 -176 L
+4169 -176 mt 4204 -177 L
+4204 -177 mt 4239 -177 L
+4239 -177 mt 4274 -178 L
+4274 -178 mt 4309 -177 L
+4309 -177 mt 4344 -177 L
+4344 -177 mt 4379 -176 L
+4379 -176 mt 4413 -174 L
+4413 -174 mt 4448 -173 L
+4448 -173 mt 4483 -170 L
+4483 -170 mt 4518 -168 L
+4518 -168 mt 4533 -166 L
+4533 -166 mt 4553 -164 L
+4553 -164 mt 4588 -161 L
+4588 -161 mt 4623 -157 L
+4623 -157 mt 4657 -153 L
+4657 -153 mt 4692 -148 L
+4692 -148 mt 4727 -143 L
+4727 -143 mt 4751 -139 L
+4751 -139 mt 4762 -137 L
+4762 -137 mt 4797 -131 L
+4797 -131 mt 4832 -125 L
+4832 -125 mt 4867 -118 L
+4867 -118 mt 4897 -111 L
+4897 -111 mt 4902 -110 L
+4902 -110 mt 4936 -102 L
+4936 -102 mt 4971 -94 L
+4971 -94 mt 5006 -85 L
+5006 -85 mt 5009 -84 L
+5009 -84 mt 5041 -75 L
+5041 -75 mt 5076 -65 L
+5076 -65 mt 5105 -56 L
+5105 -56 mt 5111 -55 L
+5111 -55 mt 5146 -44 L
+5146 -44 mt 5181 -32 L
+5181 -32 mt 5191 -29 L
+5191 -29 mt 5215 -20 L
+5215 -20 mt 5250 -7 L
+5250 -7 mt 5266 -1 L
+5266 -1 mt 5285 5 L
+5285 5 mt 5320 20 L
+5320 20 mt 5332 25 L
+5332 25 mt 5355 36 L
+5355 36 mt 5390 52 L
+5390 52 mt 5391 53 L
+5391 53 mt 5425 70 L
+5425 70 mt 5445 80 L
+5445 80 mt 5459 88 L
+5459 88 mt 5494 108 L
+5494 108 mt 5494 108 L
+5494 108 mt 5529 129 L
+5529 129 mt 5539 135 L
+5539 135 mt 5564 151 L
+5564 151 mt 5581 163 L
+5581 163 mt 5599 175 L
+5599 175 mt 5621 190 L
+5621 190 mt 5634 199 L
+5634 199 mt 5659 218 L
+5659 218 mt 5669 225 L
+5669 225 mt 5695 245 L
+5695 245 mt 5704 252 L
+5704 252 mt 5730 273 L
+5730 273 mt 5738 280 L
+5738 280 mt 5763 300 L
+5763 300 mt 5773 309 L
+5773 309 mt 5795 328 L
+5795 328 mt 5808 339 L
+5808 339 mt 5826 355 L
+5826 355 mt 5843 371 L
+5843 371 mt 5857 383 L
+5857 383 mt 5878 403 L
+5878 403 mt 5886 411 L
+5886 411 mt 5913 435 L
+5913 435 mt 5915 438 L
+5915 438 mt 5944 466 L
+5944 466 mt 5948 469 L
+5948 469 mt 5973 493 L
+5973 493 mt 5983 503 L
+5983 503 mt 6001 521 L
+6001 521 mt 6017 537 L
+6017 537 mt 6029 548 L
+6029 548 mt 6052 572 L
+6052 572 mt 6056 576 L
+6056 576 mt 6084 603 L
+6084 603 mt 6087 606 L
+6087 606 mt 6112 631 L
+6112 631 mt 6122 641 L
+6122 641 mt 6139 658 L
+6139 658 mt 6157 676 L
+6157 676 mt 6166 686 L
+6166 686 mt 6192 712 L
+6192 712 mt 6193 713 L
+6193 713 mt 6220 741 L
+6220 741 mt 6227 747 L
+6227 747 mt 6247 768 L
+6247 768 mt 6261 783 L
+6261 783 mt 6274 796 L
+6274 796 mt 6296 818 L
+6296 818 mt 6301 823 L
+6301 823 mt 6328 851 L
+6328 851 mt 6331 854 L
+6331 854 mt 6355 878 L
+6355 878 mt 6366 889 L
+6366 889 mt 6382 906 L
+6382 906 mt 6401 925 L
+6401 925 mt 6409 933 L
+6409 933 mt 6435 961 L
+6435 961 mt 6436 961 L
+6436 961 mt 6462 988 L
+6462 988 mt 6471 998 L
+6471 998 mt 6488 1016 L
+6488 1016 mt 6506 1034 L
+6506 1034 mt 6514 1043 L
+6514 1043 mt 6540 1071 L
+6540 1071 mt 6540 1072 L
+6540 1072 mt 6565 1098 L
+6565 1098 mt 6575 1110 L
+6575 1110 mt 6589 1126 L
+6589 1126 mt 6610 1150 L
+6610 1150 mt 6613 1153 L
+6613 1153 mt 6637 1181 L
+6637 1181 mt 6645 1191 L
+6645 1191 mt 6660 1208 L
+6660 1208 mt 6680 1233 L
+6680 1233 mt 6682 1236 L
+6682 1236 mt 6704 1263 L
+6704 1263 mt 6715 1277 L
+6715 1277 mt 6726 1291 L
+6726 1291 mt 6746 1318 L
+6746 1318 mt 6750 1323 L
+6750 1323 mt 6767 1346 L
+6767 1346 mt 6785 1371 L
+6785 1371 mt 6786 1373 L
+6786 1373 mt 6805 1401 L
+6805 1401 mt 6819 1423 L
+6819 1423 mt 6823 1428 L
+6823 1428 mt 6841 1456 L
+6841 1456 mt 6854 1478 L
+6854 1478 mt 6858 1484 L
+6858 1484 mt 6874 1511 L
+6874 1511 mt 6889 1539 L
+6889 1539 mt 6889 1539 L
+6889 1539 mt 6903 1566 L
+6903 1566 mt 6917 1594 L
+6917 1594 mt 6924 1608 L
+6924 1608 mt 6930 1621 L
+6930 1621 mt 6943 1649 L
+6943 1649 mt 6954 1676 L
+6954 1676 mt 6959 1688 L
+6959 1688 mt 6965 1704 L
+6965 1704 mt 6976 1731 L
+6976 1731 mt 6985 1759 L
+6985 1759 mt 6994 1784 L
+6994 1784 mt 6994 1786 L
+6994 1786 mt 7003 1814 L
+7003 1814 mt 7010 1841 L
+7010 1841 mt 7017 1869 L
+7017 1869 mt 7022 1896 L
+7022 1896 mt 7027 1924 L
+7027 1924 mt 7029 1934 L
+6959 1864 mt 6960 1869 L
+6960 1869 mt 6965 1896 L
+6965 1896 mt 6970 1924 L
+6970 1924 mt 6973 1951 L
+6973 1951 mt 6976 1979 L
+6976 1979 mt 6979 2006 L
+6979 2006 mt 6980 2034 L
+6980 2034 mt 6981 2061 L
+6981 2061 mt 6981 2089 L
+6981 2089 mt 6981 2116 L
+6981 2116 mt 6980 2144 L
+6980 2144 mt 6978 2171 L
+6978 2171 mt 6975 2199 L
+6975 2199 mt 6972 2226 L
+6972 2226 mt 6968 2254 L
+6968 2254 mt 6964 2281 L
+6964 2281 mt 6959 2309 L
+6959 2309 mt 6959 2310 L
+6959 2310 mt 6954 2336 L
+6954 2336 mt 6947 2364 L
+6947 2364 mt 6941 2391 L
+6941 2391 mt 6934 2419 L
+6934 2419 mt 6926 2446 L
+6926 2446 mt 6924 2453 L
+6924 2453 mt 6918 2474 L
+6918 2474 mt 6909 2502 L
+6909 2502 mt 6900 2529 L
+6900 2529 mt 6891 2557 L
+6891 2557 mt 6889 2562 L
+6889 2562 mt 6881 2584 L
+6881 2584 mt 6872 2612 L
+6872 2612 mt 6862 2639 L
+6862 2639 mt 6854 2658 L
+6854 2658 mt 6851 2667 L
+6851 2667 mt 6840 2694 L
+6840 2694 mt 6830 2722 L
+6830 2722 mt 6819 2746 L
+6819 2746 mt 6818 2749 L
+6818 2749 mt 6807 2777 L
+6807 2777 mt 6795 2804 L
+6795 2804 mt 6785 2830 L
+6785 2830 mt 6784 2832 L
+6784 2832 mt 6773 2859 L
+6773 2859 mt 6761 2887 L
+6761 2887 mt 6750 2914 L
+6750 2914 mt 6750 2916 L
+6750 2916 mt 6740 2942 L
+6740 2942 mt 6729 2969 L
+6729 2969 mt 6719 2997 L
+6719 2997 mt 6715 3007 L
+6715 3007 mt 6708 3024 L
+6708 3024 mt 6698 3052 L
+6698 3052 mt 6688 3079 L
+6688 3079 mt 6680 3103 L
+6680 3103 mt 6679 3107 L
+6679 3107 mt 6669 3134 L
+6669 3134 mt 6660 3162 L
+6660 3162 mt 6652 3189 L
+6652 3189 mt 6645 3212 L
+6645 3212 mt 6643 3217 L
+6643 3217 mt 6635 3244 L
+6635 3244 mt 6628 3272 L
+6628 3272 mt 6620 3299 L
+6620 3299 mt 6612 3327 L
+6612 3327 mt 6610 3333 L
+6610 3333 mt 6604 3354 L
+6604 3354 mt 6596 3382 L
+6596 3382 mt 6588 3409 L
+6588 3409 mt 6579 3437 L
+6579 3437 mt 6575 3448 L
+6575 3448 mt 6570 3464 L
+6570 3464 mt 6560 3492 L
+6560 3492 mt 6550 3519 L
+6550 3519 mt 6540 3543 L
+6540 3543 mt 6539 3547 L
+6539 3547 mt 6527 3575 L
+6527 3575 mt 6515 3602 L
+6515 3602 mt 6506 3622 L
+6506 3622 mt 6502 3630 L
+6502 3630 mt 6488 3657 L
+6488 3657 mt 6474 3685 L
+6474 3685 mt 6471 3691 L
+6471 3691 mt 6459 3712 L
+6459 3712 mt 6444 3740 L
+6444 3740 mt 6436 3755 L
+6436 3755 mt 6429 3767 L
+6429 3767 mt 6414 3795 L
+6414 3795 mt 6401 3819 L
+6401 3819 mt 6399 3822 L
+6399 3822 mt 6385 3850 L
+6385 3850 mt 6372 3877 L
+6372 3877 mt 6366 3888 L
+6366 3888 mt 6358 3905 L
+6358 3905 mt 6344 3932 L
+6344 3932 mt 6331 3952 L
+6331 3952 mt 6325 3960 L
+6325 3960 mt 6301 3987 L
+6301 3987 mt 6296 3992 L
+6296 3992 mt 6267 4015 L
+6267 4015 mt 6261 4019 L
+6261 4019 mt 6227 4022 L
+6227 4022 mt 6216 4015 L
+6216 4015 mt 6192 3998 L
+6192 3998 mt 6184 3987 L
+6184 3987 mt 6166 3960 L
+6166 3960 mt 6157 3944 L
+6157 3944 mt 6151 3932 L
+6151 3932 mt 6138 3905 L
+6138 3905 mt 6125 3877 L
+6125 3877 mt 6122 3868 L
+6122 3868 mt 6115 3850 L
+6115 3850 mt 6105 3822 L
+6105 3822 mt 6094 3795 L
+6094 3795 mt 6087 3782 L
+6087 3782 mt 6079 3767 L
+6079 3767 mt 6062 3740 L
+6062 3740 mt 6052 3727 L
+6052 3727 mt 6040 3712 L
+6040 3712 mt 6017 3688 L
+6017 3688 mt 6013 3685 L
+6013 3685 mt 5983 3661 L
+5983 3661 mt 5976 3657 L
+5976 3657 mt 5948 3642 L
+5948 3642 mt 5915 3630 L
+5915 3630 mt 5913 3629 L
+5913 3629 mt 5878 3617 L
+5878 3617 mt 5843 3605 L
+5843 3605 mt 5835 3602 L
+5835 3602 mt 5808 3592 L
+5808 3592 mt 5773 3577 L
+5773 3577 mt 5768 3575 L
+5768 3575 mt 5738 3559 L
+5738 3559 mt 5720 3547 L
+5720 3547 mt 5704 3536 L
+5704 3536 mt 5683 3519 L
+5683 3519 mt 5669 3507 L
+5669 3507 mt 5654 3492 L
+5654 3492 mt 5634 3470 L
+5634 3470 mt 5630 3464 L
+5630 3464 mt 5610 3437 L
+5610 3437 mt 5599 3417 L
+5599 3417 mt 5595 3409 L
+5595 3409 mt 5581 3382 L
+5581 3382 mt 5569 3354 L
+5569 3354 mt 5564 3340 L
+5564 3340 mt 5559 3327 L
+5559 3327 mt 5551 3299 L
+5551 3299 mt 5545 3272 L
+5545 3272 mt 5538 3244 L
+5538 3244 mt 5530 3217 L
+5530 3217 mt 5529 3214 L
+5529 3214 mt 5520 3189 L
+5520 3189 mt 5509 3162 L
+5509 3162 mt 5494 3137 L
+5494 3137 mt 5493 3134 L
+5493 3134 mt 5470 3107 L
+5470 3107 mt 5459 3097 L
+5459 3097 mt 5438 3079 L
+5438 3079 mt 5425 3070 L
+5425 3070 mt 5397 3052 L
+5397 3052 mt 5390 3047 L
+5390 3047 mt 5360 3024 L
+5360 3024 mt 5355 3020 L
+5355 3020 mt 5329 2997 L
+5329 2997 mt 5320 2988 L
+5320 2988 mt 5300 2969 L
+5300 2969 mt 5285 2957 L
+5285 2957 mt 5266 2942 L
+5266 2942 mt 5250 2931 L
+5250 2931 mt 5219 2914 L
+5219 2914 mt 5215 2913 L
+5215 2913 mt 5181 2901 L
+5181 2901 mt 5146 2892 L
+5146 2892 mt 5129 2887 L
+5129 2887 mt 5111 2881 L
+5111 2881 mt 5076 2866 L
+5076 2866 mt 5062 2859 L
+5062 2859 mt 5041 2849 L
+5041 2849 mt 5007 2832 L
+5007 2832 mt 5006 2831 L
+5006 2831 mt 4971 2810 L
+4971 2810 mt 4964 2804 L
+4964 2804 mt 4936 2780 L
+4936 2780 mt 4933 2777 L
+4933 2777 mt 4906 2749 L
+4906 2749 mt 4902 2744 L
+4902 2744 mt 4884 2722 L
+4884 2722 mt 4867 2700 L
+4867 2700 mt 4863 2694 L
+4863 2694 mt 4845 2667 L
+4845 2667 mt 4832 2646 L
+4832 2646 mt 4827 2639 L
+4827 2639 mt 4815 2612 L
+4815 2612 mt 4804 2584 L
+4804 2584 mt 4797 2563 L
+4797 2563 mt 4795 2557 L
+4795 2557 mt 4791 2529 L
+4791 2529 mt 4789 2502 L
+4789 2502 mt 4788 2474 L
+4788 2474 mt 4787 2446 L
+4787 2446 mt 4783 2419 L
+4783 2419 mt 4769 2391 L
+4769 2391 mt 4762 2383 L
+4762 2383 mt 4745 2364 L
+4745 2364 mt 4727 2347 L
+4727 2347 mt 4715 2336 L
+4715 2336 mt 4692 2315 L
+4692 2315 mt 4685 2309 L
+4685 2309 mt 4657 2283 L
+4657 2283 mt 4656 2281 L
+4656 2281 mt 4627 2254 L
+4627 2254 mt 4623 2250 L
+4623 2250 mt 4594 2226 L
+4594 2226 mt 4588 2221 L
+4588 2221 mt 4562 2199 L
+4562 2199 mt 4553 2188 L
+4553 2188 mt 4538 2171 L
+4538 2171 mt 4522 2144 L
+4522 2144 mt 4518 2133 L
+4518 2133 mt 4511 2116 L
+4511 2116 mt 4504 2089 L
+4504 2089 mt 4497 2061 L
+4497 2061 mt 4484 2034 L
+4484 2034 mt 4483 2032 L
+4483 2032 mt 4448 2009 L
+4448 2009 mt 4442 2006 L
+4442 2006 mt 4413 1999 L
+4413 1999 mt 4379 1993 L
+4379 1993 mt 4344 1989 L
+4344 1989 mt 4309 1984 L
+4309 1984 mt 4274 1981 L
+4274 1981 mt 4257 1979 L
+4257 1979 mt 4239 1976 L
+4239 1976 mt 4204 1970 L
+4204 1970 mt 4172 1951 L
+4172 1951 mt 4169 1949 L
+4169 1949 mt 4147 1924 L
+4147 1924 mt 4134 1911 L
+4134 1911 mt 4122 1896 L
+4122 1896 mt 4100 1874 L
+4100 1874 mt 4094 1869 L
+4094 1869 mt 4065 1849 L
+4065 1849 mt 4047 1841 L
+4047 1841 mt 4030 1834 L
+4030 1834 mt 3995 1826 L
+3995 1826 mt 3960 1818 L
+3960 1818 mt 3933 1814 L
+3933 1814 mt 3925 1813 L
+3925 1813 mt 3890 1807 L
+3890 1807 mt 3855 1803 L
+3855 1803 mt 3821 1799 L
+3821 1799 mt 3786 1794 L
+3786 1794 mt 3751 1787 L
+3751 1787 mt 3747 1786 L
+3747 1786 mt 3716 1776 L
+3716 1776 mt 3681 1759 L
+3681 1759 mt 3680 1759 L
+3680 1759 mt 3646 1740 L
+3646 1740 mt 3634 1731 L
+3634 1731 mt 3611 1715 L
+3611 1715 mt 3597 1704 L
+3597 1704 mt 3577 1687 L
+3577 1687 mt 3564 1676 L
+3564 1676 mt 3542 1656 L
+3542 1656 mt 3532 1649 L
+3532 1649 mt 3507 1628 L
+3507 1628 mt 3496 1621 L
+3496 1621 mt 3472 1604 L
+3472 1604 mt 3451 1594 L
+3451 1594 mt 3437 1585 L
+3437 1585 mt 3402 1571 L
+3402 1571 mt 3384 1566 L
+3384 1566 mt 3367 1561 L
+3367 1561 mt 3332 1556 L
+3332 1556 mt 3298 1552 L
+3298 1552 mt 3263 1548 L
+3263 1548 mt 3228 1543 L
+3228 1543 mt 3203 1539 L
+3203 1539 mt 3193 1537 L
+3193 1537 mt 3158 1529 L
+3158 1529 mt 3123 1520 L
+3123 1520 mt 3091 1511 L
+3091 1511 mt 3088 1510 L
+3088 1510 mt 3053 1502 L
+3053 1502 mt 3019 1493 L
+3019 1493 mt 2984 1487 L
+2984 1487 mt 2960 1484 L
+2960 1484 mt 2949 1482 L
+2949 1482 mt 2914 1480 L
+2914 1480 mt 2879 1479 L
+2879 1479 mt 2844 1479 L
+2844 1479 mt 2809 1482 L
+2809 1482 mt 2791 1484 L
+2791 1484 mt 2774 1485 L
+2774 1485 mt 2740 1490 L
+2740 1490 mt 2705 1495 L
+2705 1495 mt 2670 1500 L
+2670 1500 mt 2635 1506 L
+2635 1506 mt 2610 1511 L
+2610 1511 mt 2600 1513 L
+2600 1513 mt 2565 1519 L
+2565 1519 mt 2530 1525 L
+2530 1525 mt 2496 1530 L
+2496 1530 mt 2461 1533 L
+2461 1533 mt 2426 1534 L
+2426 1534 mt 2391 1533 L
+2391 1533 mt 2356 1532 L
+2356 1532 mt 2321 1530 L
+2321 1530 mt 2286 1528 L
+2286 1528 mt 2251 1527 L
+2251 1527 mt 2217 1530 L
+2217 1530 mt 2182 1536 L
+2182 1536 mt 2173 1539 L
+2173 1539 mt 2147 1549 L
+2147 1549 mt 2122 1566 L
+2122 1566 mt 2112 1574 L
+2112 1574 mt 2094 1594 L
+2094 1594 mt 2077 1614 L
+2077 1614 mt 2073 1621 L
+2073 1621 mt 2058 1649 L
+2058 1649 mt 2044 1676 L
+2044 1676 mt 2042 1681 L
+2042 1681 mt 2034 1704 L
+2034 1704 mt 2026 1731 L
+2026 1731 mt 2020 1759 L
+2020 1759 mt 2015 1786 L
+2015 1786 mt 2012 1814 L
+2012 1814 mt 2009 1841 L
+2009 1841 mt 2007 1863 L
+2007 1863 mt 2007 1869 L
+2007 1869 mt 2006 1896 L
+2006 1896 mt 2005 1924 L
+2005 1924 mt 2004 1951 L
+2004 1951 mt 2005 1979 L
+2005 1979 mt 2007 1998 L
+2007 1998 mt 2009 2006 L
+2009 2006 mt 2017 2034 L
+2017 2034 mt 2026 2061 L
+2026 2061 mt 2031 2089 L
+2031 2089 mt 2028 2116 L
+2028 2116 mt 2015 2144 L
+2015 2144 mt 2007 2155 L
+2007 2155 mt 1998 2171 L
+1998 2171 mt 1983 2199 L
+1983 2199 mt 1976 2226 L
+1976 2226 mt 1980 2254 L
+1980 2254 mt 1992 2281 L
+1992 2281 mt 2007 2305 L
+2007 2305 mt 2011 2309 L
+2011 2309 mt 2037 2336 L
+2037 2336 mt 2042 2342 L
+2042 2342 mt 2069 2364 L
+2069 2364 mt 2077 2371 L
+2077 2371 mt 2103 2391 L
+2103 2391 mt 2112 2398 L
+2112 2398 mt 2138 2419 L
+2138 2419 mt 2147 2426 L
+2147 2426 mt 2172 2446 L
+2172 2446 mt 2182 2455 L
+2182 2455 mt 2202 2474 L
+2202 2474 mt 2217 2489 L
+2217 2489 mt 2227 2502 L
+2227 2502 mt 2247 2529 L
+2247 2529 mt 2251 2535 L
+2251 2535 mt 2265 2557 L
+2265 2557 mt 2282 2584 L
+2282 2584 mt 2286 2592 L
+2286 2592 mt 2298 2612 L
+2298 2612 mt 2313 2639 L
+2313 2639 mt 2321 2652 L
+2321 2652 mt 2330 2667 L
+2330 2667 mt 2348 2694 L
+2348 2694 mt 2356 2706 L
+2356 2706 mt 2367 2722 L
+2367 2722 mt 2388 2749 L
+2388 2749 mt 2391 2752 L
+2391 2752 mt 2412 2777 L
+2412 2777 mt 2426 2792 L
+2426 2792 mt 2436 2804 L
+2436 2804 mt 2461 2830 L
+2461 2830 mt 2462 2832 L
+2462 2832 mt 2487 2859 L
+2487 2859 mt 2496 2870 L
+2496 2870 mt 2508 2887 L
+2508 2887 mt 2525 2914 L
+2525 2914 mt 2530 2927 L
+2530 2927 mt 2537 2942 L
+2537 2942 mt 2542 2969 L
+2542 2969 mt 2541 2997 L
+2541 2997 mt 2537 3024 L
+2537 3024 mt 2533 3052 L
+2533 3052 mt 2530 3061 L
+2530 3061 mt 2526 3079 L
+2526 3079 mt 2517 3107 L
+2517 3107 mt 2511 3134 L
+2511 3134 mt 2514 3162 L
+2514 3162 mt 2530 3188 L
+2530 3188 mt 2532 3189 L
+2532 3189 mt 2565 3211 L
+2565 3211 mt 2576 3217 L
+2576 3217 mt 2600 3228 L
+2600 3228 mt 2635 3243 L
+2635 3243 mt 2639 3244 L
+2639 3244 mt 2670 3258 L
+2670 3258 mt 2697 3272 L
+2697 3272 mt 2705 3277 L
+2705 3277 mt 2739 3299 L
+2739 3299 mt 2740 3300 L
+2740 3300 mt 2768 3327 L
+2768 3327 mt 2774 3334 L
+2774 3334 mt 2790 3354 L
+2790 3354 mt 2809 3382 L
+2809 3382 mt 2809 3382 L
+2809 3382 mt 2826 3409 L
+2826 3409 mt 2841 3437 L
+2841 3437 mt 2844 3443 L
+2844 3443 mt 2855 3464 L
+2855 3464 mt 2867 3492 L
+2867 3492 mt 2879 3517 L
+2879 3517 mt 2880 3519 L
+2880 3519 mt 2894 3547 L
+2894 3547 mt 2907 3575 L
+2907 3575 mt 2914 3589 L
+2914 3589 mt 2920 3602 L
+2920 3602 mt 2928 3630 L
+2928 3630 mt 2930 3657 L
+2930 3657 mt 2925 3685 L
+2925 3685 mt 2915 3712 L
+2915 3712 mt 2914 3713 L
+2914 3713 mt 2902 3740 L
+2902 3740 mt 2889 3767 L
+2889 3767 mt 2879 3795 L
+2879 3795 mt 2879 3796 L
+2879 3796 mt 2871 3822 L
+2871 3822 mt 2864 3850 L
+2864 3850 mt 2857 3877 L
+2857 3877 mt 2846 3905 L
+2846 3905 mt 2844 3907 L
+2844 3907 mt 2826 3932 L
+2826 3932 mt 2809 3947 L
+2809 3947 mt 2792 3960 L
+2792 3960 mt 2774 3971 L
+2774 3971 mt 2746 3987 L
+2746 3987 mt 2740 3991 L
+2740 3991 mt 2705 4009 L
+2705 4009 mt 2696 4015 L
+2696 4015 mt 2670 4030 L
+2670 4030 mt 2652 4042 L
+2652 4042 mt 2635 4056 L
+2635 4056 mt 2623 4070 L
+2623 4070 mt 2609 4097 L
+2609 4097 mt 2606 4125 L
+2606 4125 mt 2613 4152 L
+2613 4152 mt 2626 4180 L
+2626 4180 mt 2635 4193 L
+2635 4193 mt 2646 4207 L
+2646 4207 mt 2670 4235 L
+2670 4235 mt 2670 4235 L
+2670 4235 mt 2699 4262 L
+2699 4262 mt 2705 4267 L
+2705 4267 mt 2737 4290 L
+2737 4290 mt 2740 4291 L
+2740 4291 mt 2774 4309 L
+2774 4309 mt 2792 4317 L
+2792 4317 mt 2809 4325 L
+2809 4325 mt 2844 4339 L
+2844 4339 mt 2857 4345 L
+2857 4345 mt 2879 4354 L
+2879 4354 mt 2914 4371 L
+2914 4371 mt 2915 4372 L
+2915 4372 mt 2949 4391 L
+2949 4391 mt 2962 4400 L
+2962 4400 mt 2984 4413 L
+2984 4413 mt 3008 4427 L
+3008 4427 mt 3019 4433 L
+3019 4433 mt 3053 4453 L
+3053 4453 mt 3057 4455 L
+3057 4455 mt 3088 4472 L
+3088 4472 mt 3109 4482 L
+3109 4482 mt 3123 4489 L
+3123 4489 mt 3158 4504 L
+3158 4504 mt 3171 4510 L
+3171 4510 mt 3193 4519 L
+3193 4519 mt 3228 4532 L
+3228 4532 mt 3244 4537 L
+3244 4537 mt 3263 4545 L
+3263 4545 mt 3298 4556 L
+3298 4556 mt 3320 4565 L
+3320 4565 mt 3332 4571 L
+3332 4571 mt 3362 4592 L
+3362 4592 mt 3353 4620 L
+3353 4620 mt 3332 4633 L
+3332 4633 mt 3298 4648 L
+3298 4648 mt 3298 4648 L
+3298 4648 mt 3263 4664 L
+3263 4664 mt 3243 4675 L
+3243 4675 mt 3228 4682 L
+3228 4682 mt 3193 4700 L
+3193 4700 mt 3187 4703 L
+3187 4703 mt 3158 4716 L
+3158 4716 mt 3126 4730 L
+3126 4730 mt 3123 4731 L
+3123 4731 mt 3088 4745 L
+3088 4745 mt 3057 4758 L
+3057 4758 mt 3053 4759 L
+3053 4759 mt 3019 4771 L
+3019 4771 mt 2984 4782 L
+2984 4782 mt 2975 4785 L
+2975 4785 mt 2949 4793 L
+2949 4793 mt 2914 4803 L
+2914 4803 mt 2879 4813 L
+2879 4813 mt 2879 4813 L
+2879 4813 mt 2844 4822 L
+2844 4822 mt 2809 4830 L
+2809 4830 mt 2774 4839 L
+2774 4839 mt 2768 4840 L
+2768 4840 mt 2740 4846 L
+2740 4846 mt 2705 4854 L
+2705 4854 mt 2670 4861 L
+2670 4861 mt 2635 4867 L
+2635 4867 mt 2630 4868 L
+2630 4868 mt 2600 4872 L
+2600 4872 mt 2565 4878 L
+2565 4878 mt 2530 4882 L
+2530 4882 mt 2496 4886 L
+2496 4886 mt 2461 4890 L
+2461 4890 mt 2426 4893 L
+2426 4893 mt 2391 4895 L
+2391 4895 mt 2385 4895 L
+2385 4895 mt 2356 4896 L
+2356 4896 mt 2321 4897 L
+2321 4897 mt 2286 4897 L
+2286 4897 mt 2251 4896 L
+2251 4896 mt 2230 4895 L
+2230 4895 mt 2217 4895 L
+2217 4895 mt 2182 4892 L
+2182 4892 mt 2147 4889 L
+2147 4889 mt 2112 4884 L
+2112 4884 mt 2077 4879 L
+2077 4879 mt 2042 4873 L
+2042 4873 mt 2015 4868 L
+2015 4868 mt 2007 4866 L
+2007 4866 mt 1972 4858 L
+1972 4858 mt 1938 4849 L
+1938 4849 mt 1906 4840 L
+1906 4840 mt 1903 4839 L
+1903 4839 mt 1868 4828 L
+1868 4828 mt 1833 4815 L
+1833 4815 mt 1827 4813 L
+1827 4813 mt 1798 4801 L
+1798 4801 mt 1766 4785 L
+1766 4785 mt 1763 4784 L
+1763 4784 mt 1728 4765 L
+1728 4765 mt 1716 4758 L
+1716 4758 mt 1694 4743 L
+1694 4743 mt 1675 4730 L
+1675 4730 mt 1659 4717 L
+1659 4717 mt 1641 4703 L
+1641 4703 mt 1624 4686 L
+1624 4686 mt 1613 4675 L
+1613 4675 mt 1589 4648 L
+1589 4648 mt 1589 4648 L
+1589 4648 mt 1568 4620 L
+1568 4620 mt 1554 4599 L
+1554 4599 mt 1550 4592 L
+1550 4592 mt 1533 4565 L
+1533 4565 mt 1519 4539 L
+1519 4539 mt 1518 4537 L
+1518 4537 mt 1505 4510 L
+1505 4510 mt 1492 4482 L
+1492 4482 mt 1484 4464 L
+1484 4464 mt 1480 4455 L
+1480 4455 mt 1470 4427 L
+1470 4427 mt 1460 4400 L
+1460 4400 mt 1450 4372 L
+1450 4372 mt 1449 4371 L
+1449 4371 mt 1441 4345 L
+1441 4345 mt 1432 4317 L
+1432 4317 mt 1423 4290 L
+1423 4290 mt 1415 4262 L
+1415 4262 mt 1415 4259 L
+1415 4259 mt 1409 4235 L
+1409 4235 mt 1404 4207 L
+1404 4207 mt 1401 4180 L
+1401 4180 mt 1400 4152 L
+1400 4152 mt 1400 4125 L
+1400 4125 mt 1403 4097 L
+1403 4097 mt 1407 4070 L
+1407 4070 mt 1414 4042 L
+1414 4042 mt 1415 4040 L
+1415 4040 mt 1422 4015 L
+1422 4015 mt 1432 3987 L
+1432 3987 mt 1443 3960 L
+1443 3960 mt 1449 3945 L
+1449 3945 mt 1456 3932 L
+1456 3932 mt 1469 3905 L
+1469 3905 mt 1483 3877 L
+1483 3877 mt 1484 3874 L
+1484 3874 mt 1497 3850 L
+1497 3850 mt 1509 3822 L
+1509 3822 mt 1519 3797 L
+1519 3797 mt 1520 3795 L
+1520 3795 mt 1529 3767 L
+1529 3767 mt 1536 3740 L
+1536 3740 mt 1540 3712 L
+1540 3712 mt 1541 3685 L
+1541 3685 mt 1539 3657 L
+1539 3657 mt 1535 3630 L
+1535 3630 mt 1528 3602 L
+1528 3602 mt 1519 3575 L
+1519 3575 mt 1519 3574 L
+1519 3574 mt 1507 3547 L
+1507 3547 mt 1492 3519 L
+1492 3519 mt 1484 3509 L
+1484 3509 mt 1472 3492 L
+1472 3492 mt 1449 3466 L
+1449 3466 mt 1448 3464 L
+1448 3464 mt 1417 3437 L
+1417 3437 mt 1415 3435 L
+1415 3435 mt 1380 3409 L
+1380 3409 mt 1380 3409 L
+1380 3409 mt 1345 3387 L
+1345 3387 mt 1336 3382 L
+1336 3382 mt 1310 3368 L
+1310 3368 mt 1286 3354 L
+1286 3354 mt 1275 3349 L
+1275 3349 mt 1240 3332 L
+1240 3332 mt 1231 3327 L
+1231 3327 mt 1205 3315 L
+1205 3315 mt 1175 3299 L
+1175 3299 mt 1170 3297 L
+1170 3297 mt 1136 3280 L
+1136 3280 mt 1119 3272 L
+1119 3272 mt 1101 3263 L
+1101 3263 mt 1066 3245 L
+1066 3245 mt 1065 3244 L
+1065 3244 mt 1031 3226 L
+1031 3226 mt 1014 3217 L
+1014 3217 mt 996 3207 L
+ 996 3207 mt 965 3189 L
+ 965 3189 mt 961 3187 L
+ 961 3187 mt 926 3167 L
+ 926 3167 mt 918 3162 L
+ 918 3162 mt 892 3146 L
+ 892 3146 mt 872 3134 L
+ 872 3134 mt 857 3125 L
+ 857 3125 mt 828 3107 L
+ 828 3107 mt 822 3103 L
+ 822 3103 mt 787 3080 L
+ 787 3080 mt 785 3079 L
+ 785 3079 mt 752 3057 L
+ 752 3057 mt 745 3052 L
+ 745 3052 mt 717 3031 L
+ 717 3031 mt 708 3024 L
+ 708 3024 mt 682 3004 L
+ 682 3004 mt 673 2997 L
+ 673 2997 mt 647 2975 L
+ 647 2975 mt 641 2969 L
+ 641 2969 mt 613 2943 L
+ 613 2943 mt 611 2942 L
+ 611 2942 mt 583 2914 L
+ 583 2914 mt 578 2908 L
+ 578 2908 mt 558 2887 L
+ 558 2887 mt 543 2869 L
+ 543 2869 mt 534 2859 L
+ 534 2859 mt 513 2832 L
+ 513 2832 mt 508 2825 L
+ 508 2825 mt 493 2804 L
+ 493 2804 mt 475 2777 L
+ 475 2777 mt 473 2773 L
+ 473 2773 mt 459 2749 L
+ 459 2749 mt 444 2722 L
+ 444 2722 mt 438 2711 L
+ 438 2711 mt 429 2694 L
+ 429 2694 mt 416 2667 L
+ 416 2667 mt 405 2639 L
+ 405 2639 mt 403 2636 L
+ 403 2636 mt 394 2612 L
+ 394 2612 mt 384 2584 L
+ 384 2584 mt 376 2557 L
+ 376 2557 mt 368 2530 L
+ 368 2530 mt 368 2529 L
+ 368 2529 mt 362 2502 L
+ 362 2502 mt 357 2474 L
+ 357 2474 mt 353 2446 L
+ 353 2446 mt 349 2419 L
+ 349 2419 mt 347 2391 L
+ 347 2391 mt 345 2364 L
+ 345 2364 mt 343 2336 L
+ 343 2336 mt 343 2309 L
+ 343 2309 mt 343 2281 L
+ 343 2281 mt 344 2254 L
+ 344 2254 mt 346 2226 L
+ 346 2226 mt 348 2199 L
+ 348 2199 mt 351 2171 L
+ 351 2171 mt 355 2144 L
+ 355 2144 mt 359 2116 L
+ 359 2116 mt 364 2089 L
+ 364 2089 mt 368 2066 L
+ 368 2066 mt 369 2061 L
+ 369 2061 mt 375 2034 L
+ 375 2034 mt 380 2006 L
+ 380 2006 mt 386 1979 L
+ 386 1979 mt 392 1951 L
+ 392 1951 mt 397 1924 L
+ 397 1924 mt 402 1896 L
+ 402 1896 mt 403 1892 L
+ 403 1892 mt 408 1869 L
+ 408 1869 mt 413 1841 L
+ 413 1841 mt 418 1814 L
+ 418 1814 mt 423 1786 L
+ 423 1786 mt 428 1759 L
+ 428 1759 mt 433 1731 L
+ 433 1731 mt 438 1704 L
+ 438 1704 mt 438 1702 L
+ 438 1702 mt 443 1676 L
+ 443 1676 mt 447 1649 L
+ 447 1649 mt 451 1621 L
+ 451 1621 mt 455 1594 L
+ 455 1594 mt 459 1566 L
+ 459 1566 mt 463 1539 L
+ 463 1539 mt 467 1511 L
+ 467 1511 mt 470 1484 L
+ 470 1484 mt 473 1463 L
+ 473 1463 mt 474 1456 L
+ 474 1456 mt 478 1428 L
+ 478 1428 mt 481 1401 L
+ 481 1401 mt 484 1373 L
+ 484 1373 mt 488 1346 L
+ 488 1346 mt 491 1318 L
+ 491 1318 mt 495 1291 L
+ 495 1291 mt 499 1263 L
+ 499 1263 mt 504 1236 L
+ 504 1236 mt 508 1215 L
+ 508 1215 mt 509 1208 L
+ 509 1208 mt 515 1181 L
+ 515 1181 mt 521 1153 L
+ 521 1153 mt 527 1126 L
+ 527 1126 mt 534 1098 L
+ 534 1098 mt 541 1071 L
+ 541 1071 mt 543 1066 L
+ 543 1066 mt 549 1043 L
+ 549 1043 mt 558 1016 L
+ 558 1016 mt 567 988 L
+ 567 988 mt 577 961 L
+ 577 961 mt 578 958 L
+ 578 958 mt 587 933 L
+ 587 933 mt 598 906 L
+ 598 906 mt 609 878 L
+ 609 878 mt 613 871 L
+ 613 871 mt 621 851 L
+ 621 851 mt 635 823 L
+ 635 823 mt 647 798 L
+ 647 798 mt 649 796 L
+ 649 796 mt 663 768 L
+ 663 768 mt 679 741 L
+ 679 741 mt 682 735 L
+ 682 735 mt 696 713 L
+ 696 713 mt 714 686 L
+ 714 686 mt 717 680 L
+ 717 680 mt 732 658 L
+ 732 658 mt 752 631 L
+ 752 631 mt 752 630 L
+ 752 630 mt 772 603 L
+ 772 603 mt 787 585 L
+ 787 585 mt 794 576 L
+ 794 576 mt 816 548 L
+ 816 548 mt 822 542 L
+ 822 542 mt 840 521 L
+ 840 521 mt 857 502 L
+ 857 502 mt 865 493 L
+ 865 493 mt 892 466 L
+ 892 466 mt 892 466 L
+ 892 466 mt 920 438 L
+ 920 438 mt 926 433 L
+ 926 433 mt 952 411 L
+ 952 411 mt 961 403 L
+ 961 403 mt 987 383 L
+ 987 383 mt 996 376 L
+ 996 376 mt 1025 355 L
+1025 355 mt 1031 352 L
+1031 352 mt 1066 330 L
+1066 330 mt 1069 328 L
+1069 328 mt 1101 310 L
+1101 310 mt 1119 300 L
+1119 300 mt 1136 292 L
+1136 292 mt 1170 276 L
+1170 276 mt 1178 273 L
+1178 273 mt 1205 262 L
+1205 262 mt 1240 249 L
+1240 249 mt 1251 245 L
+1251 245 mt 1275 238 L
+1275 238 mt 1310 227 L
+1310 227 mt 1345 218 L
+1345 218 mt 1347 218 L
+1347 218 mt 1380 210 L
+1380 210 mt 1415 203 L
+1415 203 mt 1449 196 L
+1449 196 mt 1476 190 L
+1476 190 mt 1484 189 L
+1484 189 mt 1519 182 L
+1519 182 mt 1554 176 L
+1554 176 mt 1589 169 L
+1589 169 mt 1624 163 L
+1624 163 mt 1624 163 L
+1624 163 mt 1659 157 L
+1659 157 mt 1694 150 L
+1694 150 mt 1728 144 L
+1728 144 mt 1763 139 L
+1763 139 mt 1783 135 L
+1783 135 mt 1798 133 L
+1798 133 mt 1833 128 L
+1833 128 mt 1868 123 L
+1868 123 mt 1903 118 L
+1903 118 mt 1938 114 L
+1938 114 mt 1972 110 L
+1972 110 mt 1992 108 L
+1992 108 mt 2007 106 L
+2007 106 mt 2042 103 L
+2042 103 mt 2077 99 L
+2077 99 mt 2112 96 L
+2112 96 mt 2147 92 L
+2147 92 mt 2182 89 L
+2182 89 mt 2217 85 L
+2217 85 mt 2251 82 L
+2251 82 mt 2264 80 L
+2264 80 mt 2286 78 L
+2286 78 mt 2321 74 L
+2321 74 mt 2356 70 L
+2356 70 mt 2391 66 L
+2391 66 mt 2426 62 L
+2426 62 mt 2461 58 L
+2461 58 mt 2496 53 L
+2496 53 mt 2500 53 L
+2500 53 mt 2530 49 L
+2530 49 mt 2565 45 L
+2565 45 mt 2600 41 L
+2600 41 mt 2635 36 L
+2635 36 mt 2670 32 L
+2670 32 mt 2705 28 L
+2705 28 mt 2730 25 L
+2730 25 mt 2740 24 L
+2740 24 mt 2774 20 L
+2774 20 mt 2809 16 L
+2809 16 mt 2844 12 L
+2844 12 mt 2879 8 L
+2879 8 mt 2914 4 L
+2914 4 mt 2949 0 L
+2949 0 mt 2969 -1 L
+2969 -1 mt 2984 -3 L
+2984 -3 mt 3019 -7 L
+3019 -7 mt 3053 -10 L
+3053 -10 mt 3088 -14 L
+3088 -14 mt 3123 -18 L
+3123 -18 mt 3158 -22 L
+3158 -22 mt 3193 -26 L
+3193 -26 mt 3217 -29 L
+3217 -29 mt 3228 -30 L
+3228 -30 mt 3263 -34 L
+3263 -34 mt 3298 -38 L
+3298 -38 mt 3332 -42 L
+3332 -42 mt 3367 -47 L
+3367 -47 mt 3402 -51 L
+3402 -51 mt 3437 -55 L
+3437 -55 mt 3448 -56 L
+3448 -56 mt 3472 -59 L
+3472 -59 mt 3507 -63 L
+3507 -63 mt 3542 -67 L
+3542 -67 mt 3577 -72 L
+3577 -72 mt 3611 -76 L
+3611 -76 mt 3646 -80 L
+3646 -80 mt 3679 -84 L
+3679 -84 mt 3681 -84 L
+3681 -84 mt 3716 -88 L
+3716 -88 mt 3751 -92 L
+3751 -92 mt 3786 -96 L
+3786 -96 mt 3821 -100 L
+3821 -100 mt 3855 -104 L
+3855 -104 mt 3890 -107 L
+3890 -107 mt 3925 -110 L
+3925 -110 mt 3935 -111 L
+3935 -111 mt 3960 -113 L
+3960 -113 mt 3995 -116 L
+3995 -116 mt 4030 -119 L
+4030 -119 mt 4065 -121 L
+4065 -121 mt 4100 -124 L
+4100 -124 mt 4134 -126 L
+4134 -126 mt 4169 -128 L
+4169 -128 mt 4204 -129 L
+4204 -129 mt 4239 -131 L
+4239 -131 mt 4274 -131 L
+4274 -131 mt 4309 -132 L
+4309 -132 mt 4344 -132 L
+4344 -132 mt 4379 -132 L
+4379 -132 mt 4413 -131 L
+4413 -131 mt 4448 -130 L
+4448 -130 mt 4483 -128 L
+4483 -128 mt 4518 -126 L
+4518 -126 mt 4553 -124 L
+4553 -124 mt 4588 -121 L
+4588 -121 mt 4623 -118 L
+4623 -118 mt 4657 -114 L
+4657 -114 mt 4679 -111 L
+4679 -111 mt 4692 -110 L
+4692 -110 mt 4727 -105 L
+4727 -105 mt 4762 -100 L
+4762 -100 mt 4797 -95 L
+4797 -95 mt 4832 -89 L
+4832 -89 mt 4861 -84 L
+4861 -84 mt 4867 -83 L
+4867 -83 mt 4902 -76 L
+4902 -76 mt 4936 -68 L
+4936 -68 mt 4971 -60 L
+4971 -60 mt 4987 -56 L
+4987 -56 mt 5006 -52 L
+5006 -52 mt 5041 -42 L
+5041 -42 mt 5076 -33 L
+5076 -33 mt 5090 -29 L
+5090 -29 mt 5111 -23 L
+5111 -23 mt 5146 -12 L
+5146 -12 mt 5179 -1 L
+5179 -1 mt 5181 -1 L
+5181 -1 mt 5215 10 L
+5215 10 mt 5250 23 L
+5250 23 mt 5255 25 L
+5255 25 mt 5285 37 L
+5285 37 mt 5320 52 L
+5320 52 mt 5322 53 L
+5322 53 mt 5355 68 L
+5355 68 mt 5381 80 L
+5381 80 mt 5390 85 L
+5390 85 mt 5425 103 L
+5425 103 mt 5434 108 L
+5434 108 mt 5459 122 L
+5459 122 mt 5482 135 L
+5482 135 mt 5494 143 L
+5494 143 mt 5527 163 L
+5527 163 mt 5529 164 L
+5529 164 mt 5564 188 L
+5564 188 mt 5568 190 L
+5568 190 mt 5599 212 L
+5599 212 mt 5607 218 L
+5607 218 mt 5634 238 L
+5634 238 mt 5644 245 L
+5644 245 mt 5669 265 L
+5669 265 mt 5679 273 L
+5679 273 mt 5704 293 L
+5704 293 mt 5713 300 L
+5713 300 mt 5738 322 L
+5738 322 mt 5746 328 L
+5746 328 mt 5773 352 L
+5773 352 mt 5777 355 L
+5777 355 mt 5808 383 L
+5808 383 mt 5808 383 L
+5808 383 mt 5838 411 L
+5838 411 mt 5843 415 L
+5843 415 mt 5867 438 L
+5867 438 mt 5878 448 L
+5878 448 mt 5896 466 L
+5896 466 mt 5913 482 L
+5913 482 mt 5924 493 L
+5924 493 mt 5948 516 L
+5948 516 mt 5952 521 L
+5952 521 mt 5980 548 L
+5980 548 mt 5983 550 L
+5983 550 mt 6008 576 L
+6008 576 mt 6017 585 L
+6017 585 mt 6035 603 L
+6035 603 mt 6052 620 L
+6052 620 mt 6063 631 L
+6063 631 mt 6087 656 L
+6087 656 mt 6090 658 L
+6090 658 mt 6117 686 L
+6117 686 mt 6122 691 L
+6122 691 mt 6144 713 L
+6144 713 mt 6157 727 L
+6157 727 mt 6170 741 L
+6170 741 mt 6192 763 L
+6192 763 mt 6197 768 L
+6197 768 mt 6223 796 L
+6223 796 mt 6227 799 L
+6227 799 mt 6250 823 L
+6250 823 mt 6261 835 L
+6261 835 mt 6277 851 L
+6277 851 mt 6296 871 L
+6296 871 mt 6303 878 L
+6303 878 mt 6330 906 L
+6330 906 mt 6331 907 L
+6331 907 mt 6356 933 L
+6356 933 mt 6366 944 L
+6366 944 mt 6383 961 L
+6383 961 mt 6401 980 L
+6401 980 mt 6409 988 L
+6409 988 mt 6435 1016 L
+6435 1016 mt 6436 1017 L
+6436 1017 mt 6461 1043 L
+6461 1043 mt 6471 1054 L
+6471 1054 mt 6487 1071 L
+6487 1071 mt 6506 1092 L
+6506 1092 mt 6512 1098 L
+6512 1098 mt 6537 1126 L
+6537 1126 mt 6540 1130 L
+6540 1130 mt 6561 1153 L
+6561 1153 mt 6575 1170 L
+6575 1170 mt 6585 1181 L
+6585 1181 mt 6608 1208 L
+6608 1208 mt 6610 1211 L
+6610 1211 mt 6631 1236 L
+6631 1236 mt 6645 1254 L
+6645 1254 mt 6653 1263 L
+6653 1263 mt 6674 1291 L
+6674 1291 mt 6680 1298 L
+6680 1298 mt 6695 1318 L
+6695 1318 mt 6715 1345 L
+6715 1345 mt 6716 1346 L
+6716 1346 mt 6735 1373 L
+6735 1373 mt 6750 1394 L
+6750 1394 mt 6754 1401 L
+6754 1401 mt 6773 1428 L
+6773 1428 mt 6785 1447 L
+6785 1447 mt 6790 1456 L
+6790 1456 mt 6807 1484 L
+6807 1484 mt 6819 1506 L
+6819 1506 mt 6823 1511 L
+6823 1511 mt 6838 1539 L
+6838 1539 mt 6852 1566 L
+6852 1566 mt 6854 1571 L
+6854 1571 mt 6865 1594 L
+6865 1594 mt 6878 1621 L
+6878 1621 mt 6889 1647 L
+6889 1647 mt 6890 1649 L
+6890 1649 mt 6901 1676 L
+6901 1676 mt 6912 1704 L
+6912 1704 mt 6922 1731 L
+6922 1731 mt 6924 1739 L
+6924 1739 mt 6931 1759 L
+6931 1759 mt 6939 1786 L
+6939 1786 mt 6947 1814 L
+6947 1814 mt 6954 1841 L
+6954 1841 mt 6959 1864 L
+6924 2025 mt 6924 2034 L
+6924 2034 mt 6925 2061 L
+6925 2061 mt 6925 2089 L
+6925 2089 mt 6924 2116 L
+6924 2116 mt 6924 2122 L
+6924 2122 mt 6923 2144 L
+6923 2144 mt 6921 2171 L
+6921 2171 mt 6918 2199 L
+6918 2199 mt 6914 2226 L
+6914 2226 mt 6910 2254 L
+6910 2254 mt 6905 2281 L
+6905 2281 mt 6900 2309 L
+6900 2309 mt 6894 2336 L
+6894 2336 mt 6889 2354 L
+6889 2354 mt 6887 2364 L
+6887 2364 mt 6880 2391 L
+6880 2391 mt 6872 2419 L
+6872 2419 mt 6864 2446 L
+6864 2446 mt 6855 2474 L
+6855 2474 mt 6854 2476 L
+6854 2476 mt 6846 2502 L
+6846 2502 mt 6836 2529 L
+6836 2529 mt 6826 2557 L
+6826 2557 mt 6819 2574 L
+6819 2574 mt 6816 2584 L
+6816 2584 mt 6805 2612 L
+6805 2612 mt 6794 2639 L
+6794 2639 mt 6785 2662 L
+6785 2662 mt 6782 2667 L
+6782 2667 mt 6771 2694 L
+6771 2694 mt 6759 2722 L
+6759 2722 mt 6750 2741 L
+6750 2741 mt 6746 2749 L
+6746 2749 mt 6733 2777 L
+6733 2777 mt 6721 2804 L
+6721 2804 mt 6715 2817 L
+6715 2817 mt 6708 2832 L
+6708 2832 mt 6695 2859 L
+6695 2859 mt 6683 2887 L
+6683 2887 mt 6680 2893 L
+6680 2893 mt 6671 2914 L
+6671 2914 mt 6659 2942 L
+6659 2942 mt 6648 2969 L
+6648 2969 mt 6645 2976 L
+6645 2976 mt 6637 2997 L
+6637 2997 mt 6626 3024 L
+6626 3024 mt 6616 3052 L
+6616 3052 mt 6610 3069 L
+6610 3069 mt 6607 3079 L
+6607 3079 mt 6598 3107 L
+6598 3107 mt 6590 3134 L
+6590 3134 mt 6583 3162 L
+6583 3162 mt 6576 3189 L
+6576 3189 mt 6575 3190 L
+6575 3190 mt 6569 3217 L
+6569 3217 mt 6562 3244 L
+6562 3244 mt 6556 3272 L
+6556 3272 mt 6550 3299 L
+6550 3299 mt 6543 3327 L
+6543 3327 mt 6540 3338 L
+6540 3338 mt 6536 3354 L
+6536 3354 mt 6529 3382 L
+6529 3382 mt 6522 3409 L
+6522 3409 mt 6514 3437 L
+6514 3437 mt 6506 3462 L
+6506 3462 mt 6505 3464 L
+6505 3464 mt 6495 3492 L
+6495 3492 mt 6485 3519 L
+6485 3519 mt 6474 3547 L
+6474 3547 mt 6471 3554 L
+6471 3554 mt 6461 3575 L
+6461 3575 mt 6447 3602 L
+6447 3602 mt 6436 3623 L
+6436 3623 mt 6432 3630 L
+6432 3630 mt 6416 3657 L
+6416 3657 mt 6401 3681 L
+6401 3681 mt 6398 3685 L
+6398 3685 mt 6379 3712 L
+6379 3712 mt 6366 3730 L
+6366 3730 mt 6358 3740 L
+6358 3740 mt 6337 3767 L
+6337 3767 mt 6331 3776 L
+6331 3776 mt 6315 3795 L
+6315 3795 mt 6296 3822 L
+6296 3822 mt 6296 3822 L
+6296 3822 mt 6280 3850 L
+6280 3850 mt 6273 3877 L
+6273 3877 mt 6266 3905 L
+6266 3905 mt 6261 3913 L
+6261 3913 mt 6227 3916 L
+6227 3916 mt 6218 3905 L
+6218 3905 mt 6202 3877 L
+6202 3877 mt 6192 3863 L
+6192 3863 mt 6186 3850 L
+6186 3850 mt 6177 3822 L
+6177 3822 mt 6162 3795 L
+6162 3795 mt 6157 3788 L
+6157 3788 mt 6146 3767 L
+6146 3767 mt 6130 3740 L
+6130 3740 mt 6122 3728 L
+6122 3728 mt 6112 3712 L
+6112 3712 mt 6092 3685 L
+6092 3685 mt 6087 3678 L
+6087 3678 mt 6069 3657 L
+6069 3657 mt 6052 3639 L
+6052 3639 mt 6042 3630 L
+6042 3630 mt 6017 3610 L
+6017 3610 mt 6003 3602 L
+6003 3602 mt 5983 3591 L
+5983 3591 mt 5948 3579 L
+5948 3579 mt 5933 3575 L
+5933 3575 mt 5913 3568 L
+5913 3568 mt 5878 3557 L
+5878 3557 mt 5849 3547 L
+5849 3547 mt 5843 3545 L
+5843 3545 mt 5808 3531 L
+5808 3531 mt 5782 3519 L
+5782 3519 mt 5773 3515 L
+5773 3515 mt 5738 3494 L
+5738 3494 mt 5736 3492 L
+5736 3492 mt 5704 3465 L
+5704 3465 mt 5703 3464 L
+5703 3464 mt 5680 3437 L
+5680 3437 mt 5669 3419 L
+5669 3419 mt 5663 3409 L
+5663 3409 mt 5651 3382 L
+5651 3382 mt 5640 3354 L
+5640 3354 mt 5634 3335 L
+5634 3335 mt 5631 3327 L
+5631 3327 mt 5624 3299 L
+5624 3299 mt 5617 3272 L
+5617 3272 mt 5610 3244 L
+5610 3244 mt 5603 3217 L
+5603 3217 mt 5599 3202 L
+5599 3202 mt 5595 3189 L
+5595 3189 mt 5586 3162 L
+5586 3162 mt 5575 3134 L
+5575 3134 mt 5564 3113 L
+5564 3113 mt 5560 3107 L
+5560 3107 mt 5538 3079 L
+5538 3079 mt 5529 3071 L
+5529 3071 mt 5506 3052 L
+5506 3052 mt 5494 3043 L
+5494 3043 mt 5468 3024 L
+5468 3024 mt 5459 3018 L
+5459 3018 mt 5431 2997 L
+5431 2997 mt 5425 2991 L
+5425 2991 mt 5399 2969 L
+5399 2969 mt 5390 2961 L
+5390 2961 mt 5368 2942 L
+5368 2942 mt 5355 2930 L
+5355 2930 mt 5336 2914 L
+5336 2914 mt 5320 2901 L
+5320 2901 mt 5302 2887 L
+5302 2887 mt 5285 2875 L
+5285 2875 mt 5256 2859 L
+5256 2859 mt 5250 2856 L
+5250 2856 mt 5215 2841 L
+5215 2841 mt 5191 2832 L
+5191 2832 mt 5181 2826 L
+5181 2826 mt 5146 2806 L
+5146 2806 mt 5142 2804 L
+5142 2804 mt 5111 2778 L
+5111 2778 mt 5109 2777 L
+5109 2777 mt 5081 2749 L
+5081 2749 mt 5076 2744 L
+5076 2744 mt 5051 2722 L
+5051 2722 mt 5041 2714 L
+5041 2714 mt 5014 2694 L
+5014 2694 mt 5006 2689 L
+5006 2689 mt 4976 2667 L
+4976 2667 mt 4971 2664 L
+4971 2664 mt 4946 2639 L
+4946 2639 mt 4936 2624 L
+4936 2624 mt 4930 2612 L
+4930 2612 mt 4929 2584 L
+4929 2584 mt 4934 2557 L
+4934 2557 mt 4936 2546 L
+4936 2546 mt 4941 2529 L
+4941 2529 mt 4947 2502 L
+4947 2502 mt 4948 2474 L
+4948 2474 mt 4944 2446 L
+4944 2446 mt 4936 2424 L
+4936 2424 mt 4935 2419 L
+4935 2419 mt 4924 2391 L
+4924 2391 mt 4908 2364 L
+4908 2364 mt 4902 2356 L
+4902 2356 mt 4883 2336 L
+4883 2336 mt 4867 2322 L
+4867 2322 mt 4852 2309 L
+4852 2309 mt 4832 2292 L
+4832 2292 mt 4819 2281 L
+4819 2281 mt 4797 2265 L
+4797 2265 mt 4783 2254 L
+4783 2254 mt 4762 2240 L
+4762 2240 mt 4744 2226 L
+4744 2226 mt 4727 2216 L
+4727 2216 mt 4703 2199 L
+4703 2199 mt 4692 2192 L
+4692 2192 mt 4669 2171 L
+4669 2171 mt 4657 2159 L
+4657 2159 mt 4644 2144 L
+4644 2144 mt 4626 2116 L
+4626 2116 mt 4623 2109 L
+4623 2109 mt 4613 2089 L
+4613 2089 mt 4605 2061 L
+4605 2061 mt 4599 2034 L
+4599 2034 mt 4591 2006 L
+4591 2006 mt 4588 1997 L
+4588 1997 mt 4579 1979 L
+4579 1979 mt 4556 1951 L
+4556 1951 mt 4553 1949 L
+4553 1949 mt 4518 1929 L
+4518 1929 mt 4500 1924 L
+4500 1924 mt 4483 1919 L
+4483 1919 mt 4448 1914 L
+4448 1914 mt 4413 1909 L
+4413 1909 mt 4379 1901 L
+4379 1901 mt 4364 1896 L
+4364 1896 mt 4344 1888 L
+4344 1888 mt 4309 1873 L
+4309 1873 mt 4302 1869 L
+4302 1869 mt 4274 1850 L
+4274 1850 mt 4263 1841 L
+4263 1841 mt 4239 1815 L
+4239 1815 mt 4238 1814 L
+4238 1814 mt 4215 1786 L
+4215 1786 mt 4204 1774 L
+4204 1774 mt 4188 1759 L
+4188 1759 mt 4169 1741 L
+4169 1741 mt 4155 1731 L
+4155 1731 mt 4134 1717 L
+4134 1717 mt 4109 1704 L
+4109 1704 mt 4100 1699 L
+4100 1699 mt 4065 1686 L
+4065 1686 mt 4030 1677 L
+4030 1677 mt 4024 1676 L
+4024 1676 mt 3995 1670 L
+3995 1670 mt 3960 1666 L
+3960 1666 mt 3925 1663 L
+3925 1663 mt 3890 1661 L
+3890 1661 mt 3855 1658 L
+3855 1658 mt 3821 1654 L
+3821 1654 mt 3797 1649 L
+3797 1649 mt 3786 1646 L
+3786 1646 mt 3751 1629 L
+3751 1629 mt 3736 1621 L
+3736 1621 mt 3716 1611 L
+3716 1611 mt 3683 1594 L
+3683 1594 mt 3681 1593 L
+3681 1593 mt 3646 1571 L
+3646 1571 mt 3640 1566 L
+3640 1566 mt 3611 1544 L
+3611 1544 mt 3605 1539 L
+3605 1539 mt 3577 1511 L
+3577 1511 mt 3576 1511 L
+3576 1511 mt 3550 1484 L
+3550 1484 mt 3542 1472 L
+3542 1472 mt 3529 1456 L
+3529 1456 mt 3508 1428 L
+3508 1428 mt 3507 1426 L
+3507 1426 mt 3477 1401 L
+3477 1401 mt 3472 1398 L
+3472 1398 mt 3437 1382 L
+3437 1382 mt 3405 1373 L
+3405 1373 mt 3402 1373 L
+3402 1373 mt 3367 1368 L
+3367 1368 mt 3332 1365 L
+3332 1365 mt 3298 1363 L
+3298 1363 mt 3263 1361 L
+3263 1361 mt 3228 1357 L
+3228 1357 mt 3193 1352 L
+3193 1352 mt 3164 1346 L
+3164 1346 mt 3158 1345 L
+3158 1345 mt 3123 1335 L
+3123 1335 mt 3088 1325 L
+3088 1325 mt 3064 1318 L
+3064 1318 mt 3053 1315 L
+3053 1315 mt 3019 1307 L
+3019 1307 mt 2984 1300 L
+2984 1300 mt 2949 1296 L
+2949 1296 mt 2914 1294 L
+2914 1294 mt 2879 1293 L
+2879 1293 mt 2844 1292 L
+2844 1292 mt 2818 1291 L
+2818 1291 mt 2809 1291 L
+2809 1291 mt 2774 1289 L
+2774 1289 mt 2740 1288 L
+2740 1288 mt 2705 1287 L
+2705 1287 mt 2670 1287 L
+2670 1287 mt 2635 1287 L
+2635 1287 mt 2600 1287 L
+2600 1287 mt 2565 1287 L
+2565 1287 mt 2530 1286 L
+2530 1286 mt 2496 1283 L
+2496 1283 mt 2461 1280 L
+2461 1280 mt 2426 1274 L
+2426 1274 mt 2391 1268 L
+2391 1268 mt 2363 1263 L
+2363 1263 mt 2356 1262 L
+2356 1262 mt 2321 1257 L
+2321 1257 mt 2286 1252 L
+2286 1252 mt 2251 1249 L
+2251 1249 mt 2217 1248 L
+2217 1248 mt 2182 1248 L
+2182 1248 mt 2147 1250 L
+2147 1250 mt 2112 1253 L
+2112 1253 mt 2077 1259 L
+2077 1259 mt 2054 1263 L
+2054 1263 mt 2042 1266 L
+2042 1266 mt 2007 1277 L
+2007 1277 mt 1972 1290 L
+1972 1290 mt 1971 1291 L
+1971 1291 mt 1938 1308 L
+1938 1308 mt 1921 1318 L
+1921 1318 mt 1903 1332 L
+1903 1332 mt 1888 1346 L
+1888 1346 mt 1868 1369 L
+1868 1369 mt 1865 1373 L
+1865 1373 mt 1851 1401 L
+1851 1401 mt 1841 1428 L
+1841 1428 mt 1835 1456 L
+1835 1456 mt 1833 1464 L
+1833 1464 mt 1830 1484 L
+1830 1484 mt 1825 1511 L
+1825 1511 mt 1821 1539 L
+1821 1539 mt 1816 1566 L
+1816 1566 mt 1812 1594 L
+1812 1594 mt 1808 1621 L
+1808 1621 mt 1806 1649 L
+1806 1649 mt 1805 1676 L
+1805 1676 mt 1807 1704 L
+1807 1704 mt 1809 1731 L
+1809 1731 mt 1811 1759 L
+1811 1759 mt 1811 1786 L
+1811 1786 mt 1807 1814 L
+1807 1814 mt 1801 1841 L
+1801 1841 mt 1798 1852 L
+1798 1852 mt 1794 1869 L
+1794 1869 mt 1789 1896 L
+1789 1896 mt 1789 1924 L
+1789 1924 mt 1797 1951 L
+1797 1951 mt 1798 1953 L
+1798 1953 mt 1814 1979 L
+1814 1979 mt 1833 2004 L
+1833 2004 mt 1835 2006 L
+1835 2006 mt 1853 2034 L
+1853 2034 mt 1860 2061 L
+1860 2061 mt 1856 2089 L
+1856 2089 mt 1840 2116 L
+1840 2116 mt 1833 2125 L
+1833 2125 mt 1817 2144 L
+1817 2144 mt 1798 2169 L
+1798 2169 mt 1797 2171 L
+1797 2171 mt 1786 2199 L
+1786 2199 mt 1792 2226 L
+1792 2226 mt 1798 2234 L
+1798 2234 mt 1811 2254 L
+1811 2254 mt 1833 2272 L
+1833 2272 mt 1844 2281 L
+1844 2281 mt 1868 2299 L
+1868 2299 mt 1880 2309 L
+1880 2309 mt 1903 2326 L
+1903 2326 mt 1915 2336 L
+1915 2336 mt 1938 2357 L
+1938 2357 mt 1945 2364 L
+1945 2364 mt 1972 2389 L
+1972 2389 mt 1975 2391 L
+1975 2391 mt 2006 2419 L
+2006 2419 mt 2007 2420 L
+2007 2420 mt 2038 2446 L
+2038 2446 mt 2042 2450 L
+2042 2450 mt 2069 2474 L
+2069 2474 mt 2077 2481 L
+2077 2481 mt 2101 2502 L
+2101 2502 mt 2112 2511 L
+2112 2511 mt 2133 2529 L
+2133 2529 mt 2147 2540 L
+2147 2540 mt 2164 2557 L
+2164 2557 mt 2182 2575 L
+2182 2575 mt 2190 2584 L
+2190 2584 mt 2210 2612 L
+2210 2612 mt 2217 2622 L
+2217 2622 mt 2228 2639 L
+2228 2639 mt 2246 2667 L
+2246 2667 mt 2251 2675 L
+2251 2675 mt 2265 2694 L
+2265 2694 mt 2286 2719 L
+2286 2719 mt 2288 2722 L
+2288 2722 mt 2313 2749 L
+2313 2749 mt 2321 2757 L
+2321 2757 mt 2341 2777 L
+2341 2777 mt 2356 2792 L
+2356 2792 mt 2368 2804 L
+2368 2804 mt 2391 2828 L
+2391 2828 mt 2395 2832 L
+2395 2832 mt 2422 2859 L
+2422 2859 mt 2426 2863 L
+2426 2863 mt 2448 2887 L
+2448 2887 mt 2461 2902 L
+2461 2902 mt 2469 2914 L
+2469 2914 mt 2481 2942 L
+2481 2942 mt 2483 2969 L
+2483 2969 mt 2477 2997 L
+2477 2997 mt 2466 3024 L
+2466 3024 mt 2461 3043 L
+2461 3043 mt 2457 3052 L
+2457 3052 mt 2448 3079 L
+2448 3079 mt 2438 3107 L
+2438 3107 mt 2432 3134 L
+2432 3134 mt 2432 3162 L
+2432 3162 mt 2439 3189 L
+2439 3189 mt 2457 3217 L
+2457 3217 mt 2461 3221 L
+2461 3221 mt 2487 3244 L
+2487 3244 mt 2496 3250 L
+2496 3250 mt 2530 3272 L
+2530 3272 mt 2530 3272 L
+2530 3272 mt 2565 3293 L
+2565 3293 mt 2577 3299 L
+2577 3299 mt 2600 3315 L
+2600 3315 mt 2617 3327 L
+2617 3327 mt 2635 3342 L
+2635 3342 mt 2647 3354 L
+2647 3354 mt 2670 3381 L
+2670 3381 mt 2670 3382 L
+2670 3382 mt 2694 3409 L
+2694 3409 mt 2705 3423 L
+2705 3423 mt 2716 3437 L
+2716 3437 mt 2737 3464 L
+2737 3464 mt 2740 3468 L
+2740 3468 mt 2756 3492 L
+2756 3492 mt 2774 3519 L
+2774 3519 mt 2774 3520 L
+2774 3520 mt 2791 3547 L
+2791 3547 mt 2808 3575 L
+2808 3575 mt 2809 3577 L
+2809 3577 mt 2823 3602 L
+2823 3602 mt 2836 3630 L
+2836 3630 mt 2844 3657 L
+2844 3657 mt 2844 3672 L
+2844 3672 mt 2844 3685 L
+2844 3685 mt 2844 3685 L
+2844 3685 mt 2834 3712 L
+2834 3712 mt 2816 3740 L
+2816 3740 mt 2809 3749 L
+2809 3749 mt 2792 3767 L
+2792 3767 mt 2774 3785 L
+2774 3785 mt 2762 3795 L
+2762 3795 mt 2740 3812 L
+2740 3812 mt 2721 3822 L
+2721 3822 mt 2705 3831 L
+2705 3831 mt 2670 3846 L
+2670 3846 mt 2657 3850 L
+2657 3850 mt 2635 3858 L
+2635 3858 mt 2600 3868 L
+2600 3868 mt 2572 3877 L
+2572 3877 mt 2565 3880 L
+2565 3880 mt 2530 3895 L
+2530 3895 mt 2511 3905 L
+2511 3905 mt 2496 3915 L
+2496 3915 mt 2475 3932 L
+2475 3932 mt 2461 3949 L
+2461 3949 mt 2454 3960 L
+2454 3960 mt 2441 3987 L
+2441 3987 mt 2434 4015 L
+2434 4015 mt 2431 4042 L
+2431 4042 mt 2433 4070 L
+2433 4070 mt 2439 4097 L
+2439 4097 mt 2449 4125 L
+2449 4125 mt 2461 4149 L
+2461 4149 mt 2462 4152 L
+2462 4152 mt 2477 4180 L
+2477 4180 mt 2494 4207 L
+2494 4207 mt 2496 4210 L
+2496 4210 mt 2512 4235 L
+2512 4235 mt 2530 4259 L
+2530 4259 mt 2533 4262 L
+2533 4262 mt 2555 4290 L
+2555 4290 mt 2565 4302 L
+2565 4302 mt 2581 4317 L
+2581 4317 mt 2600 4335 L
+2600 4335 mt 2612 4345 L
+2612 4345 mt 2635 4362 L
+2635 4362 mt 2653 4372 L
+2653 4372 mt 2670 4382 L
+2670 4382 mt 2705 4396 L
+2705 4396 mt 2715 4400 L
+2715 4400 mt 2740 4407 L
+2740 4407 mt 2774 4414 L
+2774 4414 mt 2809 4420 L
+2809 4420 mt 2844 4425 L
+2844 4425 mt 2855 4427 L
+2855 4427 mt 2879 4432 L
+2879 4432 mt 2914 4442 L
+2914 4442 mt 2947 4455 L
+2947 4455 mt 2949 4456 L
+2949 4456 mt 2984 4473 L
+2984 4473 mt 3001 4482 L
+3001 4482 mt 3019 4492 L
+3019 4492 mt 3053 4510 L
+3053 4510 mt 3054 4510 L
+3054 4510 mt 3088 4527 L
+3088 4527 mt 3109 4537 L
+3109 4537 mt 3123 4545 L
+3123 4545 mt 3158 4563 L
+3158 4563 mt 3163 4565 L
+3163 4565 mt 3193 4589 L
+3193 4589 mt 3197 4592 L
+3197 4592 mt 3193 4620 L
+3193 4620 mt 3193 4620 L
+3193 4620 mt 3158 4644 L
+3158 4644 mt 3153 4648 L
+3153 4648 mt 3123 4664 L
+3123 4664 mt 3104 4675 L
+3104 4675 mt 3088 4683 L
+3088 4683 mt 3053 4699 L
+3053 4699 mt 3046 4703 L
+3046 4703 mt 3019 4714 L
+3019 4714 mt 2984 4727 L
+2984 4727 mt 2974 4730 L
+2974 4730 mt 2949 4738 L
+2949 4738 mt 2914 4750 L
+2914 4750 mt 2887 4758 L
+2887 4758 mt 2879 4760 L
+2879 4760 mt 2844 4770 L
+2844 4770 mt 2809 4779 L
+2809 4779 mt 2785 4785 L
+2785 4785 mt 2774 4788 L
+2774 4788 mt 2740 4796 L
+2740 4796 mt 2705 4804 L
+2705 4804 mt 2670 4812 L
+2670 4812 mt 2668 4813 L
+2668 4813 mt 2635 4820 L
+2635 4820 mt 2600 4826 L
+2600 4826 mt 2565 4833 L
+2565 4833 mt 2530 4839 L
+2530 4839 mt 2522 4840 L
+2522 4840 mt 2496 4844 L
+2496 4844 mt 2461 4848 L
+2461 4848 mt 2426 4852 L
+2426 4852 mt 2391 4856 L
+2391 4856 mt 2356 4858 L
+2356 4858 mt 2321 4860 L
+2321 4860 mt 2286 4860 L
+2286 4860 mt 2251 4860 L
+2251 4860 mt 2217 4859 L
+2217 4859 mt 2182 4857 L
+2182 4857 mt 2147 4855 L
+2147 4855 mt 2112 4851 L
+2112 4851 mt 2077 4846 L
+2077 4846 mt 2042 4840 L
+2042 4840 mt 2042 4840 L
+2042 4840 mt 2007 4834 L
+2007 4834 mt 1972 4826 L
+1972 4826 mt 1938 4817 L
+1938 4817 mt 1922 4813 L
+1922 4813 mt 1903 4807 L
+1903 4807 mt 1868 4796 L
+1868 4796 mt 1840 4785 L
+1840 4785 mt 1833 4782 L
+1833 4782 mt 1798 4767 L
+1798 4767 mt 1778 4758 L
+1778 4758 mt 1763 4750 L
+1763 4750 mt 1728 4730 L
+1728 4730 mt 1728 4730 L
+1728 4730 mt 1694 4706 L
+1694 4706 mt 1689 4703 L
+1689 4703 mt 1659 4677 L
+1659 4677 mt 1656 4675 L
+1656 4675 mt 1630 4648 L
+1630 4648 mt 1624 4640 L
+1624 4640 mt 1608 4620 L
+1608 4620 mt 1590 4592 L
+1590 4592 mt 1589 4591 L
+1589 4591 mt 1574 4565 L
+1574 4565 mt 1560 4537 L
+1560 4537 mt 1554 4525 L
+1554 4525 mt 1547 4510 L
+1547 4510 mt 1535 4482 L
+1535 4482 mt 1524 4455 L
+1524 4455 mt 1519 4442 L
+1519 4442 mt 1514 4427 L
+1514 4427 mt 1505 4400 L
+1505 4400 mt 1497 4372 L
+1497 4372 mt 1488 4345 L
+1488 4345 mt 1484 4334 L
+1484 4334 mt 1479 4317 L
+1479 4317 mt 1469 4290 L
+1469 4290 mt 1460 4262 L
+1460 4262 mt 1453 4235 L
+1453 4235 mt 1449 4217 L
+1449 4217 mt 1448 4207 L
+1448 4207 mt 1444 4180 L
+1444 4180 mt 1443 4152 L
+1443 4152 mt 1445 4125 L
+1445 4125 mt 1449 4097 L
+1449 4097 mt 1449 4095 L
+1449 4095 mt 1456 4070 L
+1456 4070 mt 1465 4042 L
+1465 4042 mt 1478 4015 L
+1478 4015 mt 1484 4001 L
+1484 4001 mt 1492 3987 L
+1492 3987 mt 1509 3960 L
+1509 3960 mt 1519 3945 L
+1519 3945 mt 1529 3932 L
+1529 3932 mt 1550 3905 L
+1550 3905 mt 1554 3899 L
+1554 3899 mt 1572 3877 L
+1572 3877 mt 1589 3855 L
+1589 3855 mt 1594 3850 L
+1594 3850 mt 1613 3822 L
+1613 3822 mt 1624 3801 L
+1624 3801 mt 1627 3795 L
+1627 3795 mt 1638 3767 L
+1638 3767 mt 1644 3740 L
+1644 3740 mt 1647 3712 L
+1647 3712 mt 1647 3685 L
+1647 3685 mt 1645 3657 L
+1645 3657 mt 1641 3630 L
+1641 3630 mt 1635 3602 L
+1635 3602 mt 1628 3575 L
+1628 3575 mt 1624 3561 L
+1624 3561 mt 1619 3547 L
+1619 3547 mt 1608 3519 L
+1608 3519 mt 1595 3492 L
+1595 3492 mt 1589 3482 L
+1589 3482 mt 1578 3464 L
+1578 3464 mt 1556 3437 L
+1556 3437 mt 1554 3435 L
+1554 3435 mt 1528 3409 L
+1528 3409 mt 1519 3403 L
+1519 3403 mt 1490 3382 L
+1490 3382 mt 1484 3378 L
+1484 3378 mt 1449 3358 L
+1449 3358 mt 1442 3354 L
+1442 3354 mt 1415 3341 L
+1415 3341 mt 1383 3327 L
+1383 3327 mt 1380 3326 L
+1380 3326 mt 1345 3312 L
+1345 3312 mt 1315 3299 L
+1315 3299 mt 1310 3298 L
+1310 3298 mt 1275 3284 L
+1275 3284 mt 1246 3272 L
+1246 3272 mt 1240 3270 L
+1240 3270 mt 1205 3256 L
+1205 3256 mt 1180 3244 L
+1180 3244 mt 1170 3241 L
+1170 3241 mt 1136 3225 L
+1136 3225 mt 1118 3217 L
+1118 3217 mt 1101 3209 L
+1101 3209 mt 1066 3191 L
+1066 3191 mt 1062 3189 L
+1062 3189 mt 1031 3173 L
+1031 3173 mt 1010 3162 L
+1010 3162 mt 996 3155 L
+ 996 3155 mt 961 3135 L
+ 961 3135 mt 960 3134 L
+ 960 3134 mt 926 3115 L
+ 926 3115 mt 913 3107 L
+ 913 3107 mt 892 3094 L
+ 892 3094 mt 866 3079 L
+ 866 3079 mt 857 3073 L
+ 857 3073 mt 822 3052 L
+ 822 3052 mt 822 3052 L
+ 822 3052 mt 787 3029 L
+ 787 3029 mt 780 3024 L
+ 780 3024 mt 752 3004 L
+ 752 3004 mt 742 2997 L
+ 742 2997 mt 717 2978 L
+ 717 2978 mt 707 2969 L
+ 707 2969 mt 682 2949 L
+ 682 2949 mt 674 2942 L
+ 674 2942 mt 647 2917 L
+ 647 2917 mt 644 2914 L
+ 644 2914 mt 617 2887 L
+ 617 2887 mt 613 2881 L
+ 613 2881 mt 593 2859 L
+ 593 2859 mt 578 2841 L
+ 578 2841 mt 570 2832 L
+ 570 2832 mt 550 2804 L
+ 550 2804 mt 543 2794 L
+ 543 2794 mt 531 2777 L
+ 531 2777 mt 514 2749 L
+ 514 2749 mt 508 2737 L
+ 508 2737 mt 499 2722 L
+ 499 2722 mt 485 2694 L
+ 485 2694 mt 473 2668 L
+ 473 2668 mt 472 2667 L
+ 472 2667 mt 460 2639 L
+ 460 2639 mt 450 2612 L
+ 450 2612 mt 441 2584 L
+ 441 2584 mt 438 2576 L
+ 438 2576 mt 432 2557 L
+ 432 2557 mt 425 2529 L
+ 425 2529 mt 419 2502 L
+ 419 2502 mt 415 2474 L
+ 415 2474 mt 411 2446 L
+ 411 2446 mt 408 2419 L
+ 408 2419 mt 406 2391 L
+ 406 2391 mt 405 2364 L
+ 405 2364 mt 404 2336 L
+ 404 2336 mt 404 2309 L
+ 404 2309 mt 405 2281 L
+ 405 2281 mt 407 2254 L
+ 407 2254 mt 409 2226 L
+ 409 2226 mt 412 2199 L
+ 412 2199 mt 416 2171 L
+ 416 2171 mt 421 2144 L
+ 421 2144 mt 426 2116 L
+ 426 2116 mt 431 2089 L
+ 431 2089 mt 437 2061 L
+ 437 2061 mt 438 2056 L
+ 438 2056 mt 443 2034 L
+ 443 2034 mt 449 2006 L
+ 449 2006 mt 455 1979 L
+ 455 1979 mt 460 1951 L
+ 460 1951 mt 466 1924 L
+ 466 1924 mt 471 1896 L
+ 471 1896 mt 473 1884 L
+ 473 1884 mt 476 1869 L
+ 476 1869 mt 481 1841 L
+ 481 1841 mt 485 1814 L
+ 485 1814 mt 490 1786 L
+ 490 1786 mt 494 1759 L
+ 494 1759 mt 498 1731 L
+ 498 1731 mt 502 1704 L
+ 502 1704 mt 506 1676 L
+ 506 1676 mt 508 1661 L
+ 508 1661 mt 510 1649 L
+ 510 1649 mt 513 1621 L
+ 513 1621 mt 517 1594 L
+ 517 1594 mt 520 1566 L
+ 520 1566 mt 523 1539 L
+ 523 1539 mt 527 1511 L
+ 527 1511 mt 530 1484 L
+ 530 1484 mt 533 1456 L
+ 533 1456 mt 535 1428 L
+ 535 1428 mt 538 1401 L
+ 538 1401 mt 540 1373 L
+ 540 1373 mt 543 1350 L
+ 543 1350 mt 543 1346 L
+ 543 1346 mt 546 1318 L
+ 546 1318 mt 549 1291 L
+ 549 1291 mt 553 1263 L
+ 553 1263 mt 556 1236 L
+ 556 1236 mt 561 1208 L
+ 561 1208 mt 566 1181 L
+ 566 1181 mt 571 1153 L
+ 571 1153 mt 577 1126 L
+ 577 1126 mt 578 1122 L
+ 578 1122 mt 583 1098 L
+ 583 1098 mt 590 1071 L
+ 590 1071 mt 597 1043 L
+ 597 1043 mt 605 1016 L
+ 605 1016 mt 613 991 L
+ 613 991 mt 613 988 L
+ 613 988 mt 622 961 L
+ 622 961 mt 632 933 L
+ 632 933 mt 642 906 L
+ 642 906 mt 647 893 L
+ 647 893 mt 653 878 L
+ 653 878 mt 665 851 L
+ 665 851 mt 678 823 L
+ 678 823 mt 682 814 L
+ 682 814 mt 691 796 L
+ 691 796 mt 706 768 L
+ 706 768 mt 717 748 L
+ 717 748 mt 721 741 L
+ 721 741 mt 738 713 L
+ 738 713 mt 752 691 L
+ 752 691 mt 756 686 L
+ 756 686 mt 775 658 L
+ 775 658 mt 787 641 L
+ 787 641 mt 795 631 L
+ 795 631 mt 815 603 L
+ 815 603 mt 822 595 L
+ 822 595 mt 837 576 L
+ 837 576 mt 857 552 L
+ 857 552 mt 860 548 L
+ 860 548 mt 883 521 L
+ 883 521 mt 892 512 L
+ 892 512 mt 909 493 L
+ 909 493 mt 926 475 L
+ 926 475 mt 936 466 L
+ 936 466 mt 961 442 L
+ 961 442 mt 966 438 L
+ 966 438 mt 996 412 L
+ 996 412 mt 999 411 L
+ 999 411 mt 1031 386 L
+1031 386 mt 1036 383 L
+1036 383 mt 1066 363 L
+1066 363 mt 1078 355 L
+1078 355 mt 1101 342 L
+1101 342 mt 1127 328 L
+1127 328 mt 1136 323 L
+1136 323 mt 1170 307 L
+1170 307 mt 1185 300 L
+1185 300 mt 1205 292 L
+1205 292 mt 1240 279 L
+1240 279 mt 1260 273 L
+1260 273 mt 1275 268 L
+1275 268 mt 1310 258 L
+1310 258 mt 1345 250 L
+1345 250 mt 1367 245 L
+1367 245 mt 1380 243 L
+1380 243 mt 1415 236 L
+1415 236 mt 1449 230 L
+1449 230 mt 1484 224 L
+1484 224 mt 1519 218 L
+1519 218 mt 1522 218 L
+1522 218 mt 1554 213 L
+1554 213 mt 1589 207 L
+1589 207 mt 1624 201 L
+1624 201 mt 1659 195 L
+1659 195 mt 1686 190 L
+1686 190 mt 1694 189 L
+1694 189 mt 1728 183 L
+1728 183 mt 1763 178 L
+1763 178 mt 1798 172 L
+1798 172 mt 1833 168 L
+1833 168 mt 1868 163 L
+1868 163 mt 1870 163 L
+1870 163 mt 1903 159 L
+1903 159 mt 1938 155 L
+1938 155 mt 1972 152 L
+1972 152 mt 2007 149 L
+2007 149 mt 2042 146 L
+2042 146 mt 2077 143 L
+2077 143 mt 2112 141 L
+2112 141 mt 2147 138 L
+2147 138 mt 2176 135 L
+2176 135 mt 2182 135 L
+2182 135 mt 2217 132 L
+2217 132 mt 2251 129 L
+2251 129 mt 2286 126 L
+2286 126 mt 2321 122 L
+2321 122 mt 2356 119 L
+2356 119 mt 2391 115 L
+2391 115 mt 2426 112 L
+2426 112 mt 2461 108 L
+2461 108 mt 2463 108 L
+2463 108 mt 2496 104 L
+2496 104 mt 2530 100 L
+2530 100 mt 2565 97 L
+2565 97 mt 2600 93 L
+2600 93 mt 2635 89 L
+2635 89 mt 2670 85 L
+2670 85 mt 2705 82 L
+2705 82 mt 2717 80 L
+2717 80 mt 2740 78 L
+2740 78 mt 2774 74 L
+2774 74 mt 2809 70 L
+2809 70 mt 2844 67 L
+2844 67 mt 2879 63 L
+2879 63 mt 2914 60 L
+2914 60 mt 2949 56 L
+2949 56 mt 2982 53 L
+2982 53 mt 2984 53 L
+2984 53 mt 3019 49 L
+3019 49 mt 3053 46 L
+3053 46 mt 3088 43 L
+3088 43 mt 3123 39 L
+3123 39 mt 3158 35 L
+3158 35 mt 3193 32 L
+3193 32 mt 3228 28 L
+3228 28 mt 3252 25 L
+3252 25 mt 3263 24 L
+3263 24 mt 3298 20 L
+3298 20 mt 3332 16 L
+3332 16 mt 3367 12 L
+3367 12 mt 3402 7 L
+3402 7 mt 3437 3 L
+3437 3 mt 3472 0 L
+3472 0 mt 3479 -1 L
+3479 -1 mt 3507 -5 L
+3507 -5 mt 3542 -9 L
+3542 -9 mt 3577 -14 L
+3577 -14 mt 3611 -19 L
+3611 -19 mt 3646 -23 L
+3646 -23 mt 3681 -28 L
+3681 -28 mt 3687 -29 L
+3687 -29 mt 3716 -33 L
+3716 -33 mt 3751 -37 L
+3751 -37 mt 3786 -42 L
+3786 -42 mt 3821 -46 L
+3821 -46 mt 3855 -50 L
+3855 -50 mt 3890 -54 L
+3890 -54 mt 3907 -56 L
+3907 -56 mt 3925 -58 L
+3925 -58 mt 3960 -62 L
+3960 -62 mt 3995 -65 L
+3995 -65 mt 4030 -69 L
+4030 -69 mt 4065 -72 L
+4065 -72 mt 4100 -75 L
+4100 -75 mt 4134 -78 L
+4134 -78 mt 4169 -80 L
+4169 -80 mt 4204 -83 L
+4204 -83 mt 4224 -84 L
+4224 -84 mt 4239 -85 L
+4239 -85 mt 4274 -86 L
+4274 -86 mt 4309 -88 L
+4309 -88 mt 4344 -89 L
+4344 -89 mt 4379 -89 L
+4379 -89 mt 4413 -89 L
+4413 -89 mt 4448 -88 L
+4448 -88 mt 4483 -87 L
+4483 -87 mt 4518 -86 L
+4518 -86 mt 4553 -84 L
+4553 -84 mt 4560 -84 L
+4560 -84 mt 4588 -82 L
+4588 -82 mt 4623 -79 L
+4623 -79 mt 4657 -76 L
+4657 -76 mt 4692 -73 L
+4692 -73 mt 4727 -69 L
+4727 -69 mt 4762 -65 L
+4762 -65 mt 4797 -60 L
+4797 -60 mt 4822 -56 L
+4822 -56 mt 4832 -55 L
+4832 -55 mt 4867 -49 L
+4867 -49 mt 4902 -43 L
+4902 -43 mt 4936 -36 L
+4936 -36 mt 4967 -29 L
+4967 -29 mt 4971 -28 L
+4971 -28 mt 5006 -20 L
+5006 -20 mt 5041 -11 L
+5041 -11 mt 5076 -2 L
+5076 -2 mt 5077 -1 L
+5077 -1 mt 5111 7 L
+5111 7 mt 5146 18 L
+5146 18 mt 5170 25 L
+5170 25 mt 5181 29 L
+5181 29 mt 5215 41 L
+5215 41 mt 5248 53 L
+5248 53 mt 5250 54 L
+5250 54 mt 5285 68 L
+5285 68 mt 5315 80 L
+5315 80 mt 5320 83 L
+5320 83 mt 5355 99 L
+5355 99 mt 5373 108 L
+5373 108 mt 5390 116 L
+5390 116 mt 5425 135 L
+5425 135 mt 5425 135 L
+5425 135 mt 5459 155 L
+5459 155 mt 5472 163 L
+5472 163 mt 5494 177 L
+5494 177 mt 5516 190 L
+5516 190 mt 5529 199 L
+5529 199 mt 5556 218 L
+5556 218 mt 5564 224 L
+5564 224 mt 5594 245 L
+5594 245 mt 5599 249 L
+5599 249 mt 5630 273 L
+5630 273 mt 5634 276 L
+5634 276 mt 5665 300 L
+5665 300 mt 5669 304 L
+5669 304 mt 5698 328 L
+5698 328 mt 5704 333 L
+5704 333 mt 5730 355 L
+5730 355 mt 5738 363 L
+5738 363 mt 5761 383 L
+5761 383 mt 5773 394 L
+5773 394 mt 5791 411 L
+5791 411 mt 5808 427 L
+5808 427 mt 5820 438 L
+5820 438 mt 5843 460 L
+5843 460 mt 5849 466 L
+5849 466 mt 5878 493 L
+5878 493 mt 5878 493 L
+5878 493 mt 5906 521 L
+5906 521 mt 5913 528 L
+5913 528 mt 5933 548 L
+5933 548 mt 5948 563 L
+5948 563 mt 5961 576 L
+5961 576 mt 5983 598 L
+5983 598 mt 5988 603 L
+5988 603 mt 6015 631 L
+6015 631 mt 6017 633 L
+6017 633 mt 6042 658 L
+6042 658 mt 6052 669 L
+6052 669 mt 6068 686 L
+6068 686 mt 6087 705 L
+6087 705 mt 6095 713 L
+6095 713 mt 6121 741 L
+6121 741 mt 6122 741 L
+6122 741 mt 6148 768 L
+6148 768 mt 6157 778 L
+6157 778 mt 6174 796 L
+6174 796 mt 6192 814 L
+6192 814 mt 6200 823 L
+6200 823 mt 6226 851 L
+6226 851 mt 6227 851 L
+6227 851 mt 6253 878 L
+6253 878 mt 6261 888 L
+6261 888 mt 6279 906 L
+6279 906 mt 6296 924 L
+6296 924 mt 6305 933 L
+6305 933 mt 6331 961 L
+6331 961 mt 6331 961 L
+6331 961 mt 6357 988 L
+6357 988 mt 6366 998 L
+6366 998 mt 6383 1016 L
+6383 1016 mt 6401 1035 L
+6401 1035 mt 6409 1043 L
+6409 1043 mt 6434 1071 L
+6434 1071 mt 6436 1072 L
+6436 1072 mt 6460 1098 L
+6460 1098 mt 6471 1110 L
+6471 1110 mt 6485 1126 L
+6485 1126 mt 6506 1149 L
+6506 1149 mt 6510 1153 L
+6510 1153 mt 6534 1181 L
+6534 1181 mt 6540 1189 L
+6540 1189 mt 6557 1208 L
+6557 1208 mt 6575 1230 L
+6575 1230 mt 6580 1236 L
+6580 1236 mt 6603 1263 L
+6603 1263 mt 6610 1273 L
+6610 1273 mt 6625 1291 L
+6625 1291 mt 6645 1317 L
+6645 1317 mt 6646 1318 L
+6646 1318 mt 6666 1346 L
+6666 1346 mt 6680 1365 L
+6680 1365 mt 6686 1373 L
+6686 1373 mt 6705 1401 L
+6705 1401 mt 6715 1415 L
+6715 1415 mt 6724 1428 L
+6724 1428 mt 6741 1456 L
+6741 1456 mt 6750 1470 L
+6750 1470 mt 6758 1484 L
+6758 1484 mt 6774 1511 L
+6774 1511 mt 6785 1531 L
+6785 1531 mt 6789 1539 L
+6789 1539 mt 6803 1566 L
+6803 1566 mt 6816 1594 L
+6816 1594 mt 6819 1602 L
+6819 1602 mt 6828 1621 L
+6828 1621 mt 6840 1649 L
+6840 1649 mt 6851 1676 L
+6851 1676 mt 6854 1686 L
+6854 1686 mt 6861 1704 L
+6861 1704 mt 6870 1731 L
+6870 1731 mt 6879 1759 L
+6879 1759 mt 6887 1786 L
+6887 1786 mt 6889 1795 L
+6889 1795 mt 6894 1814 L
+6894 1814 mt 6901 1841 L
+6901 1841 mt 6906 1869 L
+6906 1869 mt 6911 1896 L
+6911 1896 mt 6915 1924 L
+6915 1924 mt 6918 1951 L
+6918 1951 mt 6921 1979 L
+6921 1979 mt 6923 2006 L
+6923 2006 mt 6924 2025 L
+6854 1868 mt 6854 1869 L
+6854 1869 mt 6859 1896 L
+6859 1896 mt 6863 1924 L
+6863 1924 mt 6866 1951 L
+6866 1951 mt 6868 1979 L
+6868 1979 mt 6870 2006 L
+6870 2006 mt 6871 2034 L
+6871 2034 mt 6872 2061 L
+6872 2061 mt 6871 2089 L
+6871 2089 mt 6870 2116 L
+6870 2116 mt 6868 2144 L
+6868 2144 mt 6866 2171 L
+6866 2171 mt 6862 2199 L
+6862 2199 mt 6858 2226 L
+6858 2226 mt 6854 2250 L
+6854 2250 mt 6854 2254 L
+6854 2254 mt 6848 2281 L
+6848 2281 mt 6842 2309 L
+6842 2309 mt 6836 2336 L
+6836 2336 mt 6829 2364 L
+6829 2364 mt 6821 2391 L
+6821 2391 mt 6819 2396 L
+6819 2396 mt 6812 2419 L
+6812 2419 mt 6804 2446 L
+6804 2446 mt 6794 2474 L
+6794 2474 mt 6785 2501 L
+6785 2501 mt 6784 2502 L
+6784 2502 mt 6774 2529 L
+6774 2529 mt 6763 2557 L
+6763 2557 mt 6752 2584 L
+6752 2584 mt 6750 2589 L
+6750 2589 mt 6740 2612 L
+6740 2612 mt 6728 2639 L
+6728 2639 mt 6715 2667 L
+6715 2667 mt 6715 2667 L
+6715 2667 mt 6702 2694 L
+6702 2694 mt 6688 2722 L
+6688 2722 mt 6680 2738 L
+6680 2738 mt 6674 2749 L
+6674 2749 mt 6660 2777 L
+6660 2777 mt 6645 2804 L
+6645 2804 mt 6645 2804 L
+6645 2804 mt 6630 2832 L
+6630 2832 mt 6616 2859 L
+6616 2859 mt 6610 2871 L
+6610 2871 mt 6602 2887 L
+6602 2887 mt 6588 2914 L
+6588 2914 mt 6575 2941 L
+6575 2941 mt 6575 2942 L
+6575 2942 mt 6562 2969 L
+6562 2969 mt 6550 2997 L
+6550 2997 mt 6540 3023 L
+6540 3023 mt 6540 3024 L
+6540 3024 mt 6530 3052 L
+6530 3052 mt 6522 3079 L
+6522 3079 mt 6515 3107 L
+6515 3107 mt 6509 3134 L
+6509 3134 mt 6506 3152 L
+6506 3152 mt 6504 3162 L
+6504 3162 mt 6499 3189 L
+6499 3189 mt 6494 3217 L
+6494 3217 mt 6489 3244 L
+6489 3244 mt 6485 3272 L
+6485 3272 mt 6480 3299 L
+6480 3299 mt 6475 3327 L
+6475 3327 mt 6471 3349 L
+6471 3349 mt 6470 3354 L
+6470 3354 mt 6464 3382 L
+6464 3382 mt 6457 3409 L
+6457 3409 mt 6450 3437 L
+6450 3437 mt 6442 3464 L
+6442 3464 mt 6436 3481 L
+6436 3481 mt 6432 3492 L
+6432 3492 mt 6421 3519 L
+6421 3519 mt 6408 3547 L
+6408 3547 mt 6401 3561 L
+6401 3561 mt 6393 3575 L
+6393 3575 mt 6377 3602 L
+6377 3602 mt 6366 3618 L
+6366 3618 mt 6357 3630 L
+6357 3630 mt 6335 3657 L
+6335 3657 mt 6331 3661 L
+6331 3661 mt 6306 3685 L
+6306 3685 mt 6296 3693 L
+6296 3693 mt 6263 3712 L
+6263 3712 mt 6261 3713 L
+6261 3713 mt 6227 3724 L
+6227 3724 mt 6193 3712 L
+6193 3712 mt 6192 3712 L
+6192 3712 mt 6165 3685 L
+6165 3685 mt 6157 3677 L
+6157 3677 mt 6140 3657 L
+6140 3657 mt 6122 3636 L
+6122 3636 mt 6117 3630 L
+6117 3630 mt 6094 3602 L
+6094 3602 mt 6087 3595 L
+6087 3595 mt 6064 3575 L
+6064 3575 mt 6052 3565 L
+6052 3565 mt 6022 3547 L
+6022 3547 mt 6017 3545 L
+6017 3545 mt 5983 3531 L
+5983 3531 mt 5948 3520 L
+5948 3520 mt 5946 3519 L
+5946 3519 mt 5913 3509 L
+5913 3509 mt 5878 3496 L
+5878 3496 mt 5869 3492 L
+5869 3492 mt 5843 3480 L
+5843 3480 mt 5811 3464 L
+5811 3464 mt 5808 3463 L
+5808 3463 mt 5773 3438 L
+5773 3438 mt 5772 3437 L
+5772 3437 mt 5747 3409 L
+5747 3409 mt 5738 3395 L
+5738 3395 mt 5731 3382 L
+5731 3382 mt 5720 3354 L
+5720 3354 mt 5711 3327 L
+5711 3327 mt 5704 3306 L
+5704 3306 mt 5701 3299 L
+5701 3299 mt 5692 3272 L
+5692 3272 mt 5682 3244 L
+5682 3244 mt 5672 3217 L
+5672 3217 mt 5669 3206 L
+5669 3206 mt 5663 3189 L
+5663 3189 mt 5654 3162 L
+5654 3162 mt 5645 3134 L
+5645 3134 mt 5634 3107 L
+5634 3107 mt 5634 3107 L
+5634 3107 mt 5617 3079 L
+5617 3079 mt 5599 3055 L
+5599 3055 mt 5596 3052 L
+5596 3052 mt 5566 3024 L
+5566 3024 mt 5564 3023 L
+5564 3023 mt 5529 2997 L
+5529 2997 mt 5529 2997 L
+5529 2997 mt 5494 2971 L
+5494 2971 mt 5492 2969 L
+5492 2969 mt 5461 2942 L
+5461 2942 mt 5459 2940 L
+5459 2940 mt 5432 2914 L
+5432 2914 mt 5425 2907 L
+5425 2907 mt 5401 2887 L
+5401 2887 mt 5390 2877 L
+5390 2877 mt 5368 2859 L
+5368 2859 mt 5355 2848 L
+5355 2848 mt 5334 2832 L
+5334 2832 mt 5320 2819 L
+5320 2819 mt 5300 2804 L
+5300 2804 mt 5285 2788 L
+5285 2788 mt 5274 2777 L
+5274 2777 mt 5259 2749 L
+5259 2749 mt 5256 2722 L
+5256 2722 mt 5260 2694 L
+5260 2694 mt 5267 2667 L
+5267 2667 mt 5271 2639 L
+5271 2639 mt 5270 2612 L
+5270 2612 mt 5263 2584 L
+5263 2584 mt 5250 2558 L
+5250 2558 mt 5249 2557 L
+5249 2557 mt 5226 2529 L
+5226 2529 mt 5215 2518 L
+5215 2518 mt 5196 2502 L
+5196 2502 mt 5181 2489 L
+5181 2489 mt 5162 2474 L
+5162 2474 mt 5146 2460 L
+5146 2460 mt 5131 2446 L
+5131 2446 mt 5111 2428 L
+5111 2428 mt 5103 2419 L
+5103 2419 mt 5078 2391 L
+5078 2391 mt 5076 2389 L
+5076 2389 mt 5057 2364 L
+5057 2364 mt 5041 2342 L
+5041 2342 mt 5037 2336 L
+5037 2336 mt 5016 2309 L
+5016 2309 mt 5006 2299 L
+5006 2299 mt 4989 2281 L
+4989 2281 mt 4971 2267 L
+4971 2267 mt 4955 2254 L
+4955 2254 mt 4936 2242 L
+4936 2242 mt 4911 2226 L
+4911 2226 mt 4902 2221 L
+4902 2221 mt 4867 2203 L
+4867 2203 mt 4858 2199 L
+4858 2199 mt 4832 2187 L
+4832 2187 mt 4797 2172 L
+4797 2172 mt 4795 2171 L
+4795 2171 mt 4762 2156 L
+4762 2156 mt 4743 2144 L
+4743 2144 mt 4727 2131 L
+4727 2131 mt 4713 2116 L
+4713 2116 mt 4696 2089 L
+4696 2089 mt 4692 2082 L
+4692 2082 mt 4684 2061 L
+4684 2061 mt 4677 2034 L
+4677 2034 mt 4670 2006 L
+4670 2006 mt 4662 1979 L
+4662 1979 mt 4657 1965 L
+4657 1965 mt 4653 1951 L
+4653 1951 mt 4641 1924 L
+4641 1924 mt 4626 1896 L
+4626 1896 mt 4623 1892 L
+4623 1892 mt 4600 1869 L
+4600 1869 mt 4588 1859 L
+4588 1859 mt 4554 1841 L
+4554 1841 mt 4553 1841 L
+4553 1841 mt 4518 1828 L
+4518 1828 mt 4483 1818 L
+4483 1818 mt 4467 1814 L
+4467 1814 mt 4448 1809 L
+4448 1809 mt 4413 1799 L
+4413 1799 mt 4380 1786 L
+4380 1786 mt 4379 1785 L
+4379 1785 mt 4344 1767 L
+4344 1767 mt 4333 1759 L
+4333 1759 mt 4309 1737 L
+4309 1737 mt 4303 1731 L
+4303 1731 mt 4281 1704 L
+4281 1704 mt 4274 1694 L
+4274 1694 mt 4261 1676 L
+4261 1676 mt 4242 1649 L
+4242 1649 mt 4239 1644 L
+4239 1644 mt 4219 1621 L
+4219 1621 mt 4204 1604 L
+4204 1604 mt 4192 1594 L
+4192 1594 mt 4169 1575 L
+4169 1575 mt 4155 1566 L
+4155 1566 mt 4134 1554 L
+4134 1554 mt 4100 1540 L
+4100 1540 mt 4093 1539 L
+4093 1539 mt 4065 1532 L
+4065 1532 mt 4030 1526 L
+4030 1526 mt 3995 1522 L
+3995 1522 mt 3960 1520 L
+3960 1520 mt 3925 1518 L
+3925 1518 mt 3890 1516 L
+3890 1516 mt 3856 1511 L
+3856 1511 mt 3855 1511 L
+3855 1511 mt 3821 1503 L
+3821 1503 mt 3786 1490 L
+3786 1490 mt 3772 1484 L
+3772 1484 mt 3751 1472 L
+3751 1472 mt 3727 1456 L
+3727 1456 mt 3716 1447 L
+3716 1447 mt 3695 1428 L
+3695 1428 mt 3681 1414 L
+3681 1414 mt 3670 1401 L
+3670 1401 mt 3647 1373 L
+3647 1373 mt 3646 1373 L
+3646 1373 mt 3626 1346 L
+3626 1346 mt 3611 1329 L
+3611 1329 mt 3602 1318 L
+3602 1318 mt 3577 1297 L
+3577 1297 mt 3566 1291 L
+3566 1291 mt 3542 1279 L
+3542 1279 mt 3507 1267 L
+3507 1267 mt 3493 1263 L
+3493 1263 mt 3472 1258 L
+3472 1258 mt 3437 1251 L
+3437 1251 mt 3402 1245 L
+3402 1245 mt 3367 1239 L
+3367 1239 mt 3347 1236 L
+3347 1236 mt 3332 1233 L
+3332 1233 mt 3298 1226 L
+3298 1226 mt 3263 1219 L
+3263 1219 mt 3228 1210 L
+3228 1210 mt 3221 1208 L
+3221 1208 mt 3193 1200 L
+3193 1200 mt 3158 1190 L
+3158 1190 mt 3128 1181 L
+3128 1181 mt 3123 1180 L
+3123 1180 mt 3088 1170 L
+3088 1170 mt 3053 1162 L
+3053 1162 mt 3019 1157 L
+3019 1157 mt 2984 1154 L
+2984 1154 mt 2965 1153 L
+2965 1153 mt 2949 1152 L
+2949 1152 mt 2914 1149 L
+2914 1149 mt 2879 1147 L
+2879 1147 mt 2844 1146 L
+2844 1146 mt 2809 1146 L
+2809 1146 mt 2774 1147 L
+2774 1147 mt 2740 1148 L
+2740 1148 mt 2705 1148 L
+2705 1148 mt 2670 1147 L
+2670 1147 mt 2635 1144 L
+2635 1144 mt 2600 1140 L
+2600 1140 mt 2565 1136 L
+2565 1136 mt 2530 1131 L
+2530 1131 mt 2501 1126 L
+2501 1126 mt 2496 1125 L
+2496 1125 mt 2461 1115 L
+2461 1115 mt 2426 1107 L
+2426 1107 mt 2391 1100 L
+2391 1100 mt 2372 1098 L
+2372 1098 mt 2356 1097 L
+2356 1097 mt 2321 1095 L
+2321 1095 mt 2286 1095 L
+2286 1095 mt 2251 1096 L
+2251 1096 mt 2217 1097 L
+2217 1097 mt 2195 1098 L
+2195 1098 mt 2182 1099 L
+2182 1099 mt 2147 1103 L
+2147 1103 mt 2112 1107 L
+2112 1107 mt 2077 1113 L
+2077 1113 mt 2042 1121 L
+2042 1121 mt 2021 1126 L
+2021 1126 mt 2007 1129 L
+2007 1129 mt 1972 1140 L
+1972 1140 mt 1938 1152 L
+1938 1152 mt 1933 1153 L
+1933 1153 mt 1903 1166 L
+1903 1166 mt 1871 1181 L
+1871 1181 mt 1868 1183 L
+1868 1183 mt 1833 1203 L
+1833 1203 mt 1825 1208 L
+1825 1208 mt 1798 1227 L
+1798 1227 mt 1787 1236 L
+1787 1236 mt 1763 1258 L
+1763 1258 mt 1758 1263 L
+1758 1263 mt 1737 1291 L
+1737 1291 mt 1728 1307 L
+1728 1307 mt 1724 1318 L
+1724 1318 mt 1717 1346 L
+1717 1346 mt 1713 1373 L
+1713 1373 mt 1711 1401 L
+1711 1401 mt 1709 1428 L
+1709 1428 mt 1704 1456 L
+1704 1456 mt 1698 1484 L
+1698 1484 mt 1694 1498 L
+1694 1498 mt 1690 1511 L
+1690 1511 mt 1679 1539 L
+1679 1539 mt 1667 1566 L
+1667 1566 mt 1659 1587 L
+1659 1587 mt 1656 1594 L
+1656 1594 mt 1650 1621 L
+1650 1621 mt 1649 1649 L
+1649 1649 mt 1653 1676 L
+1653 1676 mt 1659 1696 L
+1659 1696 mt 1661 1704 L
+1661 1704 mt 1669 1731 L
+1669 1731 mt 1674 1759 L
+1674 1759 mt 1673 1786 L
+1673 1786 mt 1669 1814 L
+1669 1814 mt 1663 1841 L
+1663 1841 mt 1659 1856 L
+1659 1856 mt 1655 1869 L
+1655 1869 mt 1649 1896 L
+1649 1896 mt 1646 1924 L
+1646 1924 mt 1648 1951 L
+1648 1951 mt 1654 1979 L
+1654 1979 mt 1659 1999 L
+1659 1999 mt 1661 2006 L
+1661 2006 mt 1666 2034 L
+1666 2034 mt 1666 2061 L
+1666 2061 mt 1661 2089 L
+1661 2089 mt 1659 2096 L
+1659 2096 mt 1654 2116 L
+1654 2116 mt 1647 2144 L
+1647 2144 mt 1644 2171 L
+1644 2171 mt 1648 2199 L
+1648 2199 mt 1659 2220 L
+1659 2220 mt 1661 2226 L
+1661 2226 mt 1688 2254 L
+1688 2254 mt 1694 2258 L
+1694 2258 mt 1725 2281 L
+1725 2281 mt 1728 2284 L
+1728 2284 mt 1763 2306 L
+1763 2306 mt 1768 2309 L
+1768 2309 mt 1798 2327 L
+1798 2327 mt 1813 2336 L
+1813 2336 mt 1833 2350 L
+1833 2350 mt 1853 2364 L
+1853 2364 mt 1868 2376 L
+1868 2376 mt 1886 2391 L
+1886 2391 mt 1903 2409 L
+1903 2409 mt 1912 2419 L
+1912 2419 mt 1937 2446 L
+1937 2446 mt 1938 2448 L
+1938 2448 mt 1961 2474 L
+1961 2474 mt 1972 2486 L
+1972 2486 mt 1987 2502 L
+1987 2502 mt 2007 2522 L
+2007 2522 mt 2016 2529 L
+2016 2529 mt 2042 2550 L
+2042 2550 mt 2051 2557 L
+2051 2557 mt 2077 2574 L
+2077 2574 mt 2091 2584 L
+2091 2584 mt 2112 2600 L
+2112 2600 mt 2124 2612 L
+2124 2612 mt 2147 2638 L
+2147 2638 mt 2147 2639 L
+2147 2639 mt 2167 2667 L
+2167 2667 mt 2182 2684 L
+2182 2684 mt 2189 2694 L
+2189 2694 mt 2213 2722 L
+2213 2722 mt 2217 2725 L
+2217 2725 mt 2240 2749 L
+2240 2749 mt 2251 2760 L
+2251 2760 mt 2268 2777 L
+2268 2777 mt 2286 2794 L
+2286 2794 mt 2297 2804 L
+2297 2804 mt 2321 2830 L
+2321 2830 mt 2323 2832 L
+2323 2832 mt 2348 2859 L
+2348 2859 mt 2356 2869 L
+2356 2869 mt 2372 2887 L
+2372 2887 mt 2391 2907 L
+2391 2907 mt 2397 2914 L
+2397 2914 mt 2412 2942 L
+2412 2942 mt 2408 2969 L
+2408 2969 mt 2394 2997 L
+2394 2997 mt 2391 3003 L
+2391 3003 mt 2376 3024 L
+2376 3024 mt 2362 3052 L
+2362 3052 mt 2356 3063 L
+2356 3063 mt 2345 3079 L
+2345 3079 mt 2330 3107 L
+2330 3107 mt 2321 3134 L
+2321 3134 mt 2321 3134 L
+2321 3134 mt 2321 3137 L
+2321 3137 mt 2323 3162 L
+2323 3162 mt 2335 3189 L
+2335 3189 mt 2353 3217 L
+2353 3217 mt 2356 3220 L
+2356 3220 mt 2378 3244 L
+2378 3244 mt 2391 3256 L
+2391 3256 mt 2409 3272 L
+2409 3272 mt 2426 3286 L
+2426 3286 mt 2442 3299 L
+2442 3299 mt 2461 3315 L
+2461 3315 mt 2476 3327 L
+2476 3327 mt 2496 3342 L
+2496 3342 mt 2512 3354 L
+2512 3354 mt 2530 3368 L
+2530 3368 mt 2548 3382 L
+2548 3382 mt 2565 3395 L
+2565 3395 mt 2582 3409 L
+2582 3409 mt 2600 3427 L
+2600 3427 mt 2610 3437 L
+2610 3437 mt 2633 3464 L
+2633 3464 mt 2635 3467 L
+2635 3467 mt 2652 3492 L
+2652 3492 mt 2669 3519 L
+2669 3519 mt 2670 3521 L
+2670 3521 mt 2686 3547 L
+2686 3547 mt 2703 3575 L
+2703 3575 mt 2705 3578 L
+2705 3578 mt 2719 3602 L
+2719 3602 mt 2734 3630 L
+2734 3630 mt 2740 3645 L
+2740 3645 mt 2744 3657 L
+2744 3657 mt 2746 3685 L
+2746 3685 mt 2740 3697 L
+2740 3697 mt 2732 3712 L
+2732 3712 mt 2705 3735 L
+2705 3735 mt 2696 3740 L
+2696 3740 mt 2670 3752 L
+2670 3752 mt 2635 3765 L
+2635 3765 mt 2629 3767 L
+2629 3767 mt 2600 3776 L
+2600 3776 mt 2565 3787 L
+2565 3787 mt 2541 3795 L
+2541 3795 mt 2530 3798 L
+2530 3798 mt 2496 3812 L
+2496 3812 mt 2469 3822 L
+2469 3822 mt 2461 3826 L
+2461 3826 mt 2426 3842 L
+2426 3842 mt 2410 3850 L
+2410 3850 mt 2391 3861 L
+2391 3861 mt 2364 3877 L
+2364 3877 mt 2356 3883 L
+2356 3883 mt 2327 3905 L
+2327 3905 mt 2321 3910 L
+2321 3910 mt 2295 3932 L
+2295 3932 mt 2286 3942 L
+2286 3942 mt 2267 3960 L
+2267 3960 mt 2251 3981 L
+2251 3981 mt 2246 3987 L
+2246 3987 mt 2236 4015 L
+2236 4015 mt 2237 4042 L
+2237 4042 mt 2249 4070 L
+2249 4070 mt 2251 4073 L
+2251 4073 mt 2268 4097 L
+2268 4097 mt 2286 4119 L
+2286 4119 mt 2290 4125 L
+2290 4125 mt 2315 4152 L
+2315 4152 mt 2321 4159 L
+2321 4159 mt 2338 4180 L
+2338 4180 mt 2356 4202 L
+2356 4202 mt 2360 4207 L
+2360 4207 mt 2381 4235 L
+2381 4235 mt 2391 4249 L
+2391 4249 mt 2401 4262 L
+2401 4262 mt 2419 4290 L
+2419 4290 mt 2426 4299 L
+2426 4299 mt 2439 4317 L
+2439 4317 mt 2461 4341 L
+2461 4341 mt 2464 4345 L
+2464 4345 mt 2495 4372 L
+2495 4372 mt 2496 4373 L
+2496 4373 mt 2530 4400 L
+2530 4400 mt 2531 4400 L
+2531 4400 mt 2565 4421 L
+2565 4421 mt 2576 4427 L
+2576 4427 mt 2600 4440 L
+2600 4440 mt 2630 4455 L
+2630 4455 mt 2635 4457 L
+2635 4457 mt 2670 4471 L
+2670 4471 mt 2705 4481 L
+2705 4481 mt 2712 4482 L
+2712 4482 mt 2740 4487 L
+2740 4487 mt 2774 4490 L
+2774 4490 mt 2809 4491 L
+2809 4491 mt 2844 4493 L
+2844 4493 mt 2879 4497 L
+2879 4497 mt 2914 4505 L
+2914 4505 mt 2930 4510 L
+2930 4510 mt 2949 4516 L
+2949 4516 mt 2984 4532 L
+2984 4532 mt 2994 4537 L
+2994 4537 mt 3019 4552 L
+3019 4552 mt 3038 4565 L
+3038 4565 mt 3053 4585 L
+3053 4585 mt 3059 4592 L
+3059 4592 mt 3055 4620 L
+3055 4620 mt 3053 4621 L
+3053 4621 mt 3021 4648 L
+3021 4648 mt 3019 4649 L
+3019 4649 mt 2984 4665 L
+2984 4665 mt 2959 4675 L
+2959 4675 mt 2949 4679 L
+2949 4679 mt 2914 4692 L
+2914 4692 mt 2884 4703 L
+2884 4703 mt 2879 4704 L
+2879 4704 mt 2844 4715 L
+2844 4715 mt 2809 4724 L
+2809 4724 mt 2789 4730 L
+2789 4730 mt 2774 4734 L
+2774 4734 mt 2740 4743 L
+2740 4743 mt 2705 4752 L
+2705 4752 mt 2684 4758 L
+2684 4758 mt 2670 4761 L
+2670 4761 mt 2635 4770 L
+2635 4770 mt 2600 4779 L
+2600 4779 mt 2573 4785 L
+2573 4785 mt 2565 4787 L
+2565 4787 mt 2530 4794 L
+2530 4794 mt 2496 4801 L
+2496 4801 mt 2461 4807 L
+2461 4807 mt 2426 4812 L
+2426 4812 mt 2420 4813 L
+2420 4813 mt 2391 4816 L
+2391 4816 mt 2356 4820 L
+2356 4820 mt 2321 4822 L
+2321 4822 mt 2286 4824 L
+2286 4824 mt 2251 4825 L
+2251 4825 mt 2217 4825 L
+2217 4825 mt 2182 4824 L
+2182 4824 mt 2147 4821 L
+2147 4821 mt 2112 4818 L
+2112 4818 mt 2077 4814 L
+2077 4814 mt 2070 4813 L
+2070 4813 mt 2042 4808 L
+2042 4808 mt 2007 4802 L
+2007 4802 mt 1972 4794 L
+1972 4794 mt 1938 4786 L
+1938 4786 mt 1935 4785 L
+1935 4785 mt 1903 4776 L
+1903 4776 mt 1868 4764 L
+1868 4764 mt 1851 4758 L
+1851 4758 mt 1833 4751 L
+1833 4751 mt 1798 4735 L
+1798 4735 mt 1788 4730 L
+1788 4730 mt 1763 4717 L
+1763 4717 mt 1739 4703 L
+1739 4703 mt 1728 4696 L
+1728 4696 mt 1700 4675 L
+1700 4675 mt 1694 4669 L
+1694 4669 mt 1670 4648 L
+1670 4648 mt 1659 4634 L
+1659 4634 mt 1647 4620 L
+1647 4620 mt 1629 4592 L
+1629 4592 mt 1624 4584 L
+1624 4584 mt 1613 4565 L
+1613 4565 mt 1600 4537 L
+1600 4537 mt 1589 4511 L
+1589 4511 mt 1589 4510 L
+1589 4510 mt 1578 4482 L
+1578 4482 mt 1567 4455 L
+1567 4455 mt 1558 4427 L
+1558 4427 mt 1554 4408 L
+1554 4408 mt 1552 4400 L
+1552 4400 mt 1546 4372 L
+1546 4372 mt 1539 4345 L
+1539 4345 mt 1529 4317 L
+1529 4317 mt 1519 4294 L
+1519 4294 mt 1518 4290 L
+1518 4290 mt 1507 4262 L
+1507 4262 mt 1497 4235 L
+1497 4235 mt 1490 4207 L
+1490 4207 mt 1486 4180 L
+1486 4180 mt 1485 4152 L
+1485 4152 mt 1488 4125 L
+1488 4125 mt 1494 4097 L
+1494 4097 mt 1504 4070 L
+1504 4070 mt 1518 4042 L
+1518 4042 mt 1519 4040 L
+1519 4040 mt 1536 4015 L
+1536 4015 mt 1554 3992 L
+1554 3992 mt 1558 3987 L
+1558 3987 mt 1585 3960 L
+1585 3960 mt 1589 3956 L
+1589 3956 mt 1618 3932 L
+1618 3932 mt 1624 3927 L
+1624 3927 mt 1659 3905 L
+1659 3905 mt 1660 3905 L
+1660 3905 mt 1694 3882 L
+1694 3882 mt 1701 3877 L
+1701 3877 mt 1728 3854 L
+1728 3854 mt 1734 3850 L
+1734 3850 mt 1756 3822 L
+1756 3822 mt 1763 3803 L
+1763 3803 mt 1767 3795 L
+1767 3795 mt 1770 3767 L
+1770 3767 mt 1767 3740 L
+1767 3740 mt 1763 3721 L
+1763 3721 mt 1762 3712 L
+1762 3712 mt 1755 3685 L
+1755 3685 mt 1748 3657 L
+1748 3657 mt 1741 3630 L
+1741 3630 mt 1735 3602 L
+1735 3602 mt 1729 3575 L
+1729 3575 mt 1728 3572 L
+1728 3572 mt 1722 3547 L
+1722 3547 mt 1714 3519 L
+1714 3519 mt 1704 3492 L
+1704 3492 mt 1694 3466 L
+1694 3466 mt 1693 3464 L
+1693 3464 mt 1679 3437 L
+1679 3437 mt 1662 3409 L
+1662 3409 mt 1659 3405 L
+1659 3405 mt 1640 3382 L
+1640 3382 mt 1624 3366 L
+1624 3366 mt 1611 3354 L
+1611 3354 mt 1589 3340 L
+1589 3340 mt 1566 3327 L
+1566 3327 mt 1554 3321 L
+1554 3321 mt 1519 3305 L
+1519 3305 mt 1507 3299 L
+1507 3299 mt 1484 3291 L
+1484 3291 mt 1449 3279 L
+1449 3279 mt 1426 3272 L
+1426 3272 mt 1415 3269 L
+1415 3269 mt 1380 3259 L
+1380 3259 mt 1345 3249 L
+1345 3249 mt 1331 3244 L
+1331 3244 mt 1310 3238 L
+1310 3238 mt 1275 3227 L
+1275 3227 mt 1246 3217 L
+1246 3217 mt 1240 3215 L
+1240 3215 mt 1205 3203 L
+1205 3203 mt 1171 3189 L
+1171 3189 mt 1170 3189 L
+1170 3189 mt 1136 3175 L
+1136 3175 mt 1107 3162 L
+1107 3162 mt 1101 3159 L
+1101 3159 mt 1066 3142 L
+1066 3142 mt 1051 3134 L
+1051 3134 mt 1031 3124 L
+1031 3124 mt 999 3107 L
+ 999 3107 mt 996 3105 L
+ 996 3105 mt 961 3086 L
+ 961 3086 mt 950 3079 L
+ 950 3079 mt 926 3066 L
+ 926 3066 mt 902 3052 L
+ 902 3052 mt 892 3046 L
+ 892 3046 mt 857 3025 L
+ 857 3025 mt 856 3024 L
+ 856 3024 mt 822 3003 L
+ 822 3003 mt 812 2997 L
+ 812 2997 mt 787 2980 L
+ 787 2980 mt 773 2969 L
+ 773 2969 mt 752 2954 L
+ 752 2954 mt 737 2942 L
+ 737 2942 mt 717 2926 L
+ 717 2926 mt 704 2914 L
+ 704 2914 mt 682 2894 L
+ 682 2894 mt 675 2887 L
+ 675 2887 mt 649 2859 L
+ 649 2859 mt 647 2858 L
+ 647 2858 mt 625 2832 L
+ 625 2832 mt 613 2816 L
+ 613 2816 mt 604 2804 L
+ 604 2804 mt 584 2777 L
+ 584 2777 mt 578 2766 L
+ 578 2766 mt 567 2749 L
+ 567 2749 mt 551 2722 L
+ 551 2722 mt 543 2704 L
+ 543 2704 mt 538 2694 L
+ 538 2694 mt 525 2667 L
+ 525 2667 mt 513 2639 L
+ 513 2639 mt 508 2624 L
+ 508 2624 mt 503 2612 L
+ 503 2612 mt 494 2584 L
+ 494 2584 mt 486 2557 L
+ 486 2557 mt 480 2529 L
+ 480 2529 mt 474 2502 L
+ 474 2502 mt 473 2494 L
+ 473 2494 mt 470 2474 L
+ 470 2474 mt 467 2446 L
+ 467 2446 mt 464 2419 L
+ 464 2419 mt 463 2391 L
+ 463 2391 mt 462 2364 L
+ 462 2364 mt 462 2336 L
+ 462 2336 mt 463 2309 L
+ 463 2309 mt 465 2281 L
+ 465 2281 mt 468 2254 L
+ 468 2254 mt 471 2226 L
+ 471 2226 mt 473 2215 L
+ 473 2215 mt 476 2199 L
+ 476 2199 mt 480 2171 L
+ 480 2171 mt 486 2144 L
+ 486 2144 mt 492 2116 L
+ 492 2116 mt 498 2089 L
+ 498 2089 mt 505 2061 L
+ 505 2061 mt 508 2047 L
+ 508 2047 mt 511 2034 L
+ 511 2034 mt 518 2006 L
+ 518 2006 mt 524 1979 L
+ 524 1979 mt 529 1951 L
+ 529 1951 mt 535 1924 L
+ 535 1924 mt 540 1896 L
+ 540 1896 mt 543 1878 L
+ 543 1878 mt 544 1869 L
+ 544 1869 mt 548 1841 L
+ 548 1841 mt 552 1814 L
+ 552 1814 mt 556 1786 L
+ 556 1786 mt 560 1759 L
+ 560 1759 mt 563 1731 L
+ 563 1731 mt 566 1704 L
+ 566 1704 mt 570 1676 L
+ 570 1676 mt 573 1649 L
+ 573 1649 mt 576 1621 L
+ 576 1621 mt 578 1603 L
+ 578 1603 mt 579 1594 L
+ 579 1594 mt 582 1566 L
+ 582 1566 mt 584 1539 L
+ 584 1539 mt 587 1511 L
+ 587 1511 mt 589 1484 L
+ 589 1484 mt 591 1456 L
+ 591 1456 mt 593 1428 L
+ 593 1428 mt 595 1401 L
+ 595 1401 mt 596 1373 L
+ 596 1373 mt 598 1346 L
+ 598 1346 mt 600 1318 L
+ 600 1318 mt 602 1291 L
+ 602 1291 mt 605 1263 L
+ 605 1263 mt 608 1236 L
+ 608 1236 mt 612 1208 L
+ 612 1208 mt 613 1202 L
+ 613 1202 mt 616 1181 L
+ 616 1181 mt 620 1153 L
+ 620 1153 mt 626 1126 L
+ 626 1126 mt 631 1098 L
+ 631 1098 mt 638 1071 L
+ 638 1071 mt 644 1043 L
+ 644 1043 mt 647 1032 L
+ 647 1032 mt 652 1016 L
+ 652 1016 mt 659 988 L
+ 659 988 mt 667 961 L
+ 667 961 mt 676 933 L
+ 676 933 mt 682 916 L
+ 682 916 mt 686 906 L
+ 686 906 mt 696 878 L
+ 696 878 mt 707 851 L
+ 707 851 mt 717 828 L
+ 717 828 mt 719 823 L
+ 719 823 mt 733 796 L
+ 733 796 mt 747 768 L
+ 747 768 mt 752 759 L
+ 752 759 mt 763 741 L
+ 763 741 mt 779 713 L
+ 779 713 mt 787 702 L
+ 787 702 mt 797 686 L
+ 797 686 mt 817 658 L
+ 817 658 mt 822 651 L
+ 822 651 mt 837 631 L
+ 837 631 mt 857 604 L
+ 857 604 mt 858 603 L
+ 858 603 mt 879 576 L
+ 879 576 mt 892 561 L
+ 892 561 mt 902 548 L
+ 902 548 mt 926 521 L
+ 926 521 mt 926 520 L
+ 926 520 mt 951 493 L
+ 951 493 mt 961 483 L
+ 961 483 mt 979 466 L
+ 979 466 mt 996 450 L
+ 996 450 mt 1010 438 L
+1010 438 mt 1031 421 L
+1031 421 mt 1045 411 L
+1045 411 mt 1066 396 L
+1066 396 mt 1085 383 L
+1085 383 mt 1101 373 L
+1101 373 mt 1132 355 L
+1132 355 mt 1136 354 L
+1136 354 mt 1170 336 L
+1170 336 mt 1189 328 L
+1189 328 mt 1205 321 L
+1205 321 mt 1240 308 L
+1240 308 mt 1265 300 L
+1265 300 mt 1275 297 L
+1275 297 mt 1310 288 L
+1310 288 mt 1345 280 L
+1345 280 mt 1380 274 L
+1380 274 mt 1387 273 L
+1387 273 mt 1415 269 L
+1415 269 mt 1449 264 L
+1449 264 mt 1484 259 L
+1484 259 mt 1519 254 L
+1519 254 mt 1554 250 L
+1554 250 mt 1582 245 L
+1582 245 mt 1589 244 L
+1589 244 mt 1624 239 L
+1624 239 mt 1659 233 L
+1659 233 mt 1694 228 L
+1694 228 mt 1728 222 L
+1728 222 mt 1756 218 L
+1756 218 mt 1763 217 L
+1763 217 mt 1798 212 L
+1798 212 mt 1833 207 L
+1833 207 mt 1868 203 L
+1868 203 mt 1903 199 L
+1903 199 mt 1938 196 L
+1938 196 mt 1972 194 L
+1972 194 mt 2007 192 L
+2007 192 mt 2028 190 L
+2028 190 mt 2042 190 L
+2042 190 mt 2077 188 L
+2077 188 mt 2112 186 L
+2112 186 mt 2147 184 L
+2147 184 mt 2182 181 L
+2182 181 mt 2217 179 L
+2217 179 mt 2251 176 L
+2251 176 mt 2286 173 L
+2286 173 mt 2321 170 L
+2321 170 mt 2356 167 L
+2356 167 mt 2391 164 L
+2391 164 mt 2405 163 L
+2405 163 mt 2426 161 L
+2426 161 mt 2461 158 L
+2461 158 mt 2496 155 L
+2496 155 mt 2530 152 L
+2530 152 mt 2565 148 L
+2565 148 mt 2600 145 L
+2600 145 mt 2635 142 L
+2635 142 mt 2670 138 L
+2670 138 mt 2698 135 L
+2698 135 mt 2705 135 L
+2705 135 mt 2740 131 L
+2740 131 mt 2774 128 L
+2774 128 mt 2809 125 L
+2809 125 mt 2844 121 L
+2844 121 mt 2879 118 L
+2879 118 mt 2914 115 L
+2914 115 mt 2949 112 L
+2949 112 mt 2984 109 L
+2984 109 mt 2999 108 L
+2999 108 mt 3019 106 L
+3019 106 mt 3053 103 L
+3053 103 mt 3088 100 L
+3088 100 mt 3123 97 L
+3123 97 mt 3158 94 L
+3158 94 mt 3193 91 L
+3193 91 mt 3228 87 L
+3228 87 mt 3263 83 L
+3263 83 mt 3286 80 L
+3286 80 mt 3298 79 L
+3298 79 mt 3332 75 L
+3332 75 mt 3367 70 L
+3367 70 mt 3402 66 L
+3402 66 mt 3437 61 L
+3437 61 mt 3472 56 L
+3472 56 mt 3498 53 L
+3498 53 mt 3507 52 L
+3507 52 mt 3542 47 L
+3542 47 mt 3577 42 L
+3577 42 mt 3611 36 L
+3611 36 mt 3646 31 L
+3646 31 mt 3681 26 L
+3681 26 mt 3686 25 L
+3686 25 mt 3716 21 L
+3716 21 mt 3751 16 L
+3751 16 mt 3786 11 L
+3786 11 mt 3821 6 L
+3821 6 mt 3855 1 L
+3855 1 mt 3882 -1 L
+3882 -1 mt 3890 -2 L
+3890 -2 mt 3925 -7 L
+3925 -7 mt 3960 -11 L
+3960 -11 mt 3995 -15 L
+3995 -15 mt 4030 -19 L
+4030 -19 mt 4065 -23 L
+4065 -23 mt 4100 -27 L
+4100 -27 mt 4119 -29 L
+4119 -29 mt 4134 -30 L
+4134 -30 mt 4169 -34 L
+4169 -34 mt 4204 -37 L
+4204 -37 mt 4239 -40 L
+4239 -40 mt 4274 -42 L
+4274 -42 mt 4309 -44 L
+4309 -44 mt 4344 -46 L
+4344 -46 mt 4379 -47 L
+4379 -47 mt 4413 -48 L
+4413 -48 mt 4448 -48 L
+4448 -48 mt 4483 -48 L
+4483 -48 mt 4518 -47 L
+4518 -47 mt 4553 -46 L
+4553 -46 mt 4588 -44 L
+4588 -44 mt 4623 -42 L
+4623 -42 mt 4657 -40 L
+4657 -40 mt 4692 -37 L
+4692 -37 mt 4727 -34 L
+4727 -34 mt 4762 -30 L
+4762 -30 mt 4776 -29 L
+4776 -29 mt 4797 -26 L
+4797 -26 mt 4832 -22 L
+4832 -22 mt 4867 -16 L
+4867 -16 mt 4902 -10 L
+4902 -10 mt 4936 -4 L
+4936 -4 mt 4949 -1 L
+4949 -1 mt 4971 2 L
+4971 2 mt 5006 10 L
+5006 10 mt 5041 18 L
+5041 18 mt 5068 25 L
+5068 25 mt 5076 27 L
+5076 27 mt 5111 37 L
+5111 37 mt 5146 47 L
+5146 47 mt 5164 53 L
+5164 53 mt 5181 58 L
+5181 58 mt 5215 70 L
+5215 70 mt 5243 80 L
+5243 80 mt 5250 83 L
+5250 83 mt 5285 97 L
+5285 97 mt 5309 108 L
+5309 108 mt 5320 113 L
+5320 113 mt 5355 129 L
+5355 129 mt 5367 135 L
+5367 135 mt 5390 147 L
+5390 147 mt 5417 163 L
+5417 163 mt 5425 167 L
+5425 167 mt 5459 188 L
+5459 188 mt 5463 190 L
+5463 190 mt 5494 210 L
+5494 210 mt 5506 218 L
+5506 218 mt 5529 234 L
+5529 234 mt 5545 245 L
+5545 245 mt 5564 259 L
+5564 259 mt 5582 273 L
+5582 273 mt 5599 286 L
+5599 286 mt 5617 300 L
+5617 300 mt 5634 314 L
+5634 314 mt 5651 328 L
+5651 328 mt 5669 343 L
+5669 343 mt 5683 355 L
+5683 355 mt 5704 373 L
+5704 373 mt 5714 383 L
+5714 383 mt 5738 405 L
+5738 405 mt 5745 411 L
+5745 411 mt 5773 437 L
+5773 437 mt 5774 438 L
+5774 438 mt 5803 466 L
+5803 466 mt 5808 470 L
+5808 470 mt 5832 493 L
+5832 493 mt 5843 504 L
+5843 504 mt 5860 521 L
+5860 521 mt 5878 539 L
+5878 539 mt 5887 548 L
+5887 548 mt 5913 574 L
+5913 574 mt 5915 576 L
+5915 576 mt 5942 603 L
+5942 603 mt 5948 609 L
+5948 609 mt 5968 631 L
+5968 631 mt 5983 645 L
+5983 645 mt 5995 658 L
+5995 658 mt 6017 682 L
+6017 682 mt 6021 686 L
+6021 686 mt 6047 713 L
+6047 713 mt 6052 718 L
+6052 718 mt 6074 741 L
+6074 741 mt 6087 755 L
+6087 755 mt 6100 768 L
+6100 768 mt 6122 792 L
+6122 792 mt 6126 796 L
+6126 796 mt 6152 823 L
+6152 823 mt 6157 829 L
+6157 829 mt 6178 851 L
+6178 851 mt 6192 866 L
+6192 866 mt 6203 878 L
+6203 878 mt 6227 903 L
+6227 903 mt 6229 906 L
+6229 906 mt 6255 933 L
+6255 933 mt 6261 940 L
+6261 940 mt 6281 961 L
+6281 961 mt 6296 977 L
+6296 977 mt 6307 988 L
+6307 988 mt 6331 1014 L
+6331 1014 mt 6333 1016 L
+6333 1016 mt 6358 1043 L
+6358 1043 mt 6366 1052 L
+6366 1052 mt 6384 1071 L
+6384 1071 mt 6401 1089 L
+6401 1089 mt 6409 1098 L
+6409 1098 mt 6434 1126 L
+6434 1126 mt 6436 1128 L
+6436 1128 mt 6459 1153 L
+6459 1153 mt 6471 1166 L
+6471 1166 mt 6484 1181 L
+6484 1181 mt 6506 1206 L
+6506 1206 mt 6508 1208 L
+6508 1208 mt 6531 1236 L
+6531 1236 mt 6540 1247 L
+6540 1247 mt 6554 1263 L
+6554 1263 mt 6575 1290 L
+6575 1290 mt 6576 1291 L
+6576 1291 mt 6597 1318 L
+6597 1318 mt 6610 1335 L
+6610 1335 mt 6618 1346 L
+6618 1346 mt 6638 1373 L
+6638 1373 mt 6645 1383 L
+6645 1383 mt 6658 1401 L
+6658 1401 mt 6676 1428 L
+6676 1428 mt 6680 1435 L
+6680 1435 mt 6694 1456 L
+6694 1456 mt 6710 1484 L
+6710 1484 mt 6715 1491 L
+6715 1491 mt 6726 1511 L
+6726 1511 mt 6741 1539 L
+6741 1539 mt 6750 1555 L
+6750 1555 mt 6755 1566 L
+6755 1566 mt 6768 1594 L
+6768 1594 mt 6781 1621 L
+6781 1621 mt 6785 1631 L
+6785 1631 mt 6792 1649 L
+6792 1649 mt 6803 1676 L
+6803 1676 mt 6812 1704 L
+6812 1704 mt 6819 1726 L
+6819 1726 mt 6821 1731 L
+6821 1731 mt 6829 1759 L
+6829 1759 mt 6837 1786 L
+6837 1786 mt 6844 1814 L
+6844 1814 mt 6849 1841 L
+6849 1841 mt 6854 1868 L
+6819 2024 mt 6820 2034 L
+6820 2034 mt 6820 2061 L
+6820 2061 mt 6819 2074 L
+6819 2074 mt 6819 2089 L
+6819 2089 mt 6818 2116 L
+6818 2116 mt 6815 2144 L
+6815 2144 mt 6812 2171 L
+6812 2171 mt 6809 2199 L
+6809 2199 mt 6804 2226 L
+6804 2226 mt 6799 2254 L
+6799 2254 mt 6794 2281 L
+6794 2281 mt 6787 2309 L
+6787 2309 mt 6785 2319 L
+6785 2319 mt 6780 2336 L
+6780 2336 mt 6772 2364 L
+6772 2364 mt 6764 2391 L
+6764 2391 mt 6755 2419 L
+6755 2419 mt 6750 2435 L
+6750 2435 mt 6746 2446 L
+6746 2446 mt 6736 2474 L
+6736 2474 mt 6725 2502 L
+6725 2502 mt 6715 2526 L
+6715 2526 mt 6714 2529 L
+6714 2529 mt 6702 2557 L
+6702 2557 mt 6689 2584 L
+6689 2584 mt 6680 2604 L
+6680 2604 mt 6676 2612 L
+6676 2612 mt 6662 2639 L
+6662 2639 mt 6648 2667 L
+6648 2667 mt 6645 2672 L
+6645 2672 mt 6633 2694 L
+6633 2694 mt 6617 2722 L
+6617 2722 mt 6610 2733 L
+6610 2733 mt 6601 2749 L
+6601 2749 mt 6584 2777 L
+6584 2777 mt 6575 2791 L
+6575 2791 mt 6567 2804 L
+6567 2804 mt 6550 2832 L
+6550 2832 mt 6540 2847 L
+6540 2847 mt 6533 2859 L
+6533 2859 mt 6516 2887 L
+6516 2887 mt 6506 2905 L
+6506 2905 mt 6500 2914 L
+6500 2914 mt 6484 2942 L
+6484 2942 mt 6471 2969 L
+6471 2969 mt 6471 2969 L
+6471 2969 mt 6458 2997 L
+6458 2997 mt 6448 3024 L
+6448 3024 mt 6440 3052 L
+6440 3052 mt 6436 3070 L
+6436 3070 mt 6434 3079 L
+6434 3079 mt 6429 3107 L
+6429 3107 mt 6425 3134 L
+6425 3134 mt 6423 3162 L
+6423 3162 mt 6420 3189 L
+6420 3189 mt 6418 3217 L
+6418 3217 mt 6415 3244 L
+6415 3244 mt 6413 3272 L
+6413 3272 mt 6410 3299 L
+6410 3299 mt 6407 3327 L
+6407 3327 mt 6403 3354 L
+6403 3354 mt 6401 3369 L
+6401 3369 mt 6399 3382 L
+6399 3382 mt 6393 3409 L
+6393 3409 mt 6387 3437 L
+6387 3437 mt 6379 3464 L
+6379 3464 mt 6368 3492 L
+6368 3492 mt 6366 3497 L
+6366 3497 mt 6355 3519 L
+6355 3519 mt 6339 3547 L
+6339 3547 mt 6331 3559 L
+6331 3559 mt 6320 3575 L
+6320 3575 mt 6297 3602 L
+6297 3602 mt 6296 3602 L
+6296 3602 mt 6264 3630 L
+6264 3630 mt 6261 3631 L
+6261 3631 mt 6227 3642 L
+6227 3642 mt 6192 3630 L
+6192 3630 mt 6192 3630 L
+6192 3630 mt 6163 3602 L
+6163 3602 mt 6157 3596 L
+6157 3596 mt 6138 3575 L
+6138 3575 mt 6122 3557 L
+6122 3557 mt 6112 3547 L
+6112 3547 mt 6087 3525 L
+6087 3525 mt 6080 3519 L
+6080 3519 mt 6052 3500 L
+6052 3500 mt 6035 3492 L
+6035 3492 mt 6017 3483 L
+6017 3483 mt 5983 3469 L
+5983 3469 mt 5970 3464 L
+5970 3464 mt 5948 3455 L
+5948 3455 mt 5913 3439 L
+5913 3439 mt 5909 3437 L
+5909 3437 mt 5878 3419 L
+5878 3419 mt 5862 3409 L
+5862 3409 mt 5843 3395 L
+5843 3395 mt 5829 3382 L
+5829 3382 mt 5808 3355 L
+5808 3355 mt 5808 3354 L
+5808 3354 mt 5794 3327 L
+5794 3327 mt 5783 3299 L
+5783 3299 mt 5773 3279 L
+5773 3279 mt 5770 3272 L
+5770 3272 mt 5757 3244 L
+5757 3244 mt 5744 3217 L
+5744 3217 mt 5738 3203 L
+5738 3203 mt 5733 3189 L
+5733 3189 mt 5722 3162 L
+5722 3162 mt 5711 3134 L
+5711 3134 mt 5704 3118 L
+5704 3118 mt 5699 3107 L
+5699 3107 mt 5684 3079 L
+5684 3079 mt 5669 3055 L
+5669 3055 mt 5667 3052 L
+5667 3052 mt 5645 3024 L
+5645 3024 mt 5634 3012 L
+5634 3012 mt 5617 2997 L
+5617 2997 mt 5599 2982 L
+5599 2982 mt 5582 2969 L
+5582 2969 mt 5564 2957 L
+5564 2957 mt 5543 2942 L
+5543 2942 mt 5529 2930 L
+5529 2930 mt 5512 2914 L
+5512 2914 mt 5494 2896 L
+5494 2896 mt 5485 2887 L
+5485 2887 mt 5459 2863 L
+5459 2863 mt 5455 2859 L
+5455 2859 mt 5425 2833 L
+5425 2833 mt 5423 2832 L
+5423 2832 mt 5392 2804 L
+5392 2804 mt 5390 2802 L
+5390 2802 mt 5366 2777 L
+5366 2777 mt 5355 2759 L
+5355 2759 mt 5349 2749 L
+5349 2749 mt 5340 2722 L
+5340 2722 mt 5338 2694 L
+5338 2694 mt 5340 2667 L
+5340 2667 mt 5345 2639 L
+5345 2639 mt 5351 2612 L
+5351 2612 mt 5355 2594 L
+5355 2594 mt 5357 2584 L
+5357 2584 mt 5358 2557 L
+5358 2557 mt 5355 2529 L
+5355 2529 mt 5355 2529 L
+5355 2529 mt 5347 2502 L
+5347 2502 mt 5334 2474 L
+5334 2474 mt 5320 2450 L
+5320 2450 mt 5317 2446 L
+5317 2446 mt 5294 2419 L
+5294 2419 mt 5285 2410 L
+5285 2410 mt 5264 2391 L
+5264 2391 mt 5250 2380 L
+5250 2380 mt 5229 2364 L
+5229 2364 mt 5215 2355 L
+5215 2355 mt 5189 2336 L
+5189 2336 mt 5181 2331 L
+5181 2331 mt 5153 2309 L
+5153 2309 mt 5146 2302 L
+5146 2302 mt 5123 2281 L
+5123 2281 mt 5111 2271 L
+5111 2271 mt 5093 2254 L
+5093 2254 mt 5076 2240 L
+5076 2240 mt 5059 2226 L
+5059 2226 mt 5041 2212 L
+5041 2212 mt 5024 2199 L
+5024 2199 mt 5006 2185 L
+5006 2185 mt 4987 2171 L
+4987 2171 mt 4971 2160 L
+4971 2160 mt 4944 2144 L
+4944 2144 mt 4936 2139 L
+4936 2139 mt 4902 2119 L
+4902 2119 mt 4897 2116 L
+4897 2116 mt 4867 2094 L
+4867 2094 mt 4858 2089 L
+4858 2089 mt 4832 2067 L
+4832 2067 mt 4825 2061 L
+4825 2061 mt 4797 2038 L
+4797 2038 mt 4793 2034 L
+4793 2034 mt 4765 2006 L
+4765 2006 mt 4762 2004 L
+4762 2004 mt 4742 1979 L
+4742 1979 mt 4727 1955 L
+4727 1955 mt 4725 1951 L
+4725 1951 mt 4717 1924 L
+4717 1924 mt 4709 1896 L
+4709 1896 mt 4702 1869 L
+4702 1869 mt 4693 1841 L
+4693 1841 mt 4692 1838 L
+4692 1838 mt 4682 1814 L
+4682 1814 mt 4668 1786 L
+4668 1786 mt 4657 1769 L
+4657 1769 mt 4646 1759 L
+4646 1759 mt 4623 1742 L
+4623 1742 mt 4595 1731 L
+4595 1731 mt 4588 1729 L
+4588 1729 mt 4553 1721 L
+4553 1721 mt 4518 1715 L
+4518 1715 mt 4483 1708 L
+4483 1708 mt 4464 1704 L
+4464 1704 mt 4448 1700 L
+4448 1700 mt 4413 1687 L
+4413 1687 mt 4392 1676 L
+4392 1676 mt 4379 1667 L
+4379 1667 mt 4364 1649 L
+4364 1649 mt 4347 1621 L
+4347 1621 mt 4344 1614 L
+4344 1614 mt 4334 1594 L
+4334 1594 mt 4320 1566 L
+4320 1566 mt 4309 1544 L
+4309 1544 mt 4306 1539 L
+4306 1539 mt 4289 1511 L
+4289 1511 mt 4274 1487 L
+4274 1487 mt 4271 1484 L
+4271 1484 mt 4249 1456 L
+4249 1456 mt 4239 1447 L
+4239 1447 mt 4214 1428 L
+4214 1428 mt 4204 1423 L
+4204 1423 mt 4169 1407 L
+4169 1407 mt 4147 1401 L
+4147 1401 mt 4134 1398 L
+4134 1398 mt 4100 1395 L
+4100 1395 mt 4065 1392 L
+4065 1392 mt 4030 1390 L
+4030 1390 mt 3995 1386 L
+3995 1386 mt 3960 1378 L
+3960 1378 mt 3945 1373 L
+3945 1373 mt 3925 1367 L
+3925 1367 mt 3890 1352 L
+3890 1352 mt 3880 1346 L
+3880 1346 mt 3855 1332 L
+3855 1332 mt 3836 1318 L
+3836 1318 mt 3821 1307 L
+3821 1307 mt 3801 1291 L
+3801 1291 mt 3786 1278 L
+3786 1278 mt 3769 1263 L
+3769 1263 mt 3751 1250 L
+3751 1250 mt 3730 1236 L
+3730 1236 mt 3716 1228 L
+3716 1228 mt 3681 1211 L
+3681 1211 mt 3676 1208 L
+3676 1208 mt 3646 1198 L
+3646 1198 mt 3611 1187 L
+3611 1187 mt 3592 1181 L
+3592 1181 mt 3577 1176 L
+3577 1176 mt 3542 1167 L
+3542 1167 mt 3507 1157 L
+3507 1157 mt 3494 1153 L
+3494 1153 mt 3472 1147 L
+3472 1147 mt 3437 1136 L
+3437 1136 mt 3407 1126 L
+3407 1126 mt 3402 1124 L
+3402 1124 mt 3367 1112 L
+3367 1112 mt 3332 1100 L
+3332 1100 mt 3327 1098 L
+3327 1098 mt 3298 1088 L
+3298 1088 mt 3263 1076 L
+3263 1076 mt 3248 1071 L
+3248 1071 mt 3228 1063 L
+3228 1063 mt 3193 1051 L
+3193 1051 mt 3171 1043 L
+3171 1043 mt 3158 1039 L
+3158 1039 mt 3123 1027 L
+3123 1027 mt 3088 1017 L
+3088 1017 mt 3084 1016 L
+3084 1016 mt 3053 1007 L
+3053 1007 mt 3019 1000 L
+3019 1000 mt 2984 994 L
+2984 994 mt 2949 989 L
+2949 989 mt 2942 988 L
+2942 988 mt 2914 985 L
+2914 985 mt 2879 984 L
+2879 984 mt 2844 984 L
+2844 984 mt 2809 984 L
+2809 984 mt 2774 984 L
+2774 984 mt 2740 985 L
+2740 985 mt 2705 984 L
+2705 984 mt 2670 983 L
+2670 983 mt 2635 980 L
+2635 980 mt 2600 976 L
+2600 976 mt 2565 971 L
+2565 971 mt 2530 967 L
+2530 967 mt 2496 964 L
+2496 964 mt 2467 961 L
+2467 961 mt 2461 960 L
+2461 960 mt 2426 958 L
+2426 958 mt 2391 956 L
+2391 956 mt 2356 958 L
+2356 958 mt 2321 960 L
+2321 960 mt 2316 961 L
+2316 961 mt 2286 964 L
+2286 964 mt 2251 969 L
+2251 969 mt 2217 974 L
+2217 974 mt 2182 979 L
+2182 979 mt 2147 984 L
+2147 984 mt 2120 988 L
+2120 988 mt 2112 989 L
+2112 989 mt 2077 995 L
+2077 995 mt 2042 1002 L
+2042 1002 mt 2007 1009 L
+2007 1009 mt 1977 1016 L
+1977 1016 mt 1972 1017 L
+1972 1017 mt 1938 1026 L
+1938 1026 mt 1903 1036 L
+1903 1036 mt 1883 1043 L
+1883 1043 mt 1868 1049 L
+1868 1049 mt 1833 1063 L
+1833 1063 mt 1819 1071 L
+1819 1071 mt 1798 1081 L
+1798 1081 mt 1771 1098 L
+1771 1098 mt 1763 1103 L
+1763 1103 mt 1731 1126 L
+1731 1126 mt 1728 1128 L
+1728 1128 mt 1696 1153 L
+1696 1153 mt 1694 1156 L
+1694 1156 mt 1664 1181 L
+1664 1181 mt 1659 1186 L
+1659 1186 mt 1636 1208 L
+1636 1208 mt 1624 1223 L
+1624 1223 mt 1613 1236 L
+1613 1236 mt 1598 1263 L
+1598 1263 mt 1591 1291 L
+1591 1291 mt 1591 1318 L
+1591 1318 mt 1596 1346 L
+1596 1346 mt 1602 1373 L
+1602 1373 mt 1608 1401 L
+1608 1401 mt 1610 1428 L
+1610 1428 mt 1607 1456 L
+1607 1456 mt 1596 1484 L
+1596 1484 mt 1589 1494 L
+1589 1494 mt 1577 1511 L
+1577 1511 mt 1554 1536 L
+1554 1536 mt 1551 1539 L
+1551 1539 mt 1521 1566 L
+1521 1566 mt 1519 1569 L
+1519 1569 mt 1496 1594 L
+1496 1594 mt 1484 1621 L
+1484 1621 mt 1484 1621 L
+1484 1621 mt 1481 1649 L
+1481 1649 mt 1484 1676 L
+1484 1676 mt 1484 1681 L
+1484 1681 mt 1486 1704 L
+1486 1704 mt 1490 1731 L
+1490 1731 mt 1494 1759 L
+1494 1759 mt 1500 1786 L
+1500 1786 mt 1505 1814 L
+1505 1814 mt 1507 1841 L
+1507 1841 mt 1507 1869 L
+1507 1869 mt 1506 1896 L
+1506 1896 mt 1507 1924 L
+1507 1924 mt 1511 1951 L
+1511 1951 mt 1517 1979 L
+1517 1979 mt 1519 1991 L
+1519 1991 mt 1522 2006 L
+1522 2006 mt 1528 2034 L
+1528 2034 mt 1533 2061 L
+1533 2061 mt 1538 2089 L
+1538 2089 mt 1542 2116 L
+1542 2116 mt 1547 2144 L
+1547 2144 mt 1552 2171 L
+1552 2171 mt 1554 2184 L
+1554 2184 mt 1557 2199 L
+1557 2199 mt 1567 2226 L
+1567 2226 mt 1589 2254 L
+1589 2254 mt 1589 2254 L
+1589 2254 mt 1624 2281 L
+1624 2281 mt 1624 2281 L
+1624 2281 mt 1659 2302 L
+1659 2302 mt 1669 2309 L
+1669 2309 mt 1694 2323 L
+1694 2323 mt 1717 2336 L
+1717 2336 mt 1728 2343 L
+1728 2343 mt 1763 2364 L
+1763 2364 mt 1763 2364 L
+1763 2364 mt 1798 2387 L
+1798 2387 mt 1804 2391 L
+1804 2391 mt 1833 2418 L
+1833 2418 mt 1834 2419 L
+1834 2419 mt 1853 2446 L
+1853 2446 mt 1866 2474 L
+1866 2474 mt 1868 2483 L
+1868 2483 mt 1874 2502 L
+1874 2502 mt 1883 2529 L
+1883 2529 mt 1897 2557 L
+1897 2557 mt 1903 2563 L
+1903 2563 mt 1928 2584 L
+1928 2584 mt 1938 2589 L
+1938 2589 mt 1972 2606 L
+1972 2606 mt 1983 2612 L
+1983 2612 mt 2007 2621 L
+2007 2621 mt 2042 2639 L
+2042 2639 mt 2042 2639 L
+2042 2639 mt 2077 2665 L
+2077 2665 mt 2079 2667 L
+2079 2667 mt 2106 2694 L
+2106 2694 mt 2112 2700 L
+2112 2700 mt 2133 2722 L
+2133 2722 mt 2147 2734 L
+2147 2734 mt 2162 2749 L
+2162 2749 mt 2182 2768 L
+2182 2768 mt 2191 2777 L
+2191 2777 mt 2217 2803 L
+2217 2803 mt 2218 2804 L
+2218 2804 mt 2242 2832 L
+2242 2832 mt 2251 2844 L
+2251 2844 mt 2263 2859 L
+2263 2859 mt 2279 2887 L
+2279 2887 mt 2286 2907 L
+2286 2907 mt 2289 2914 L
+2289 2914 mt 2287 2942 L
+2287 2942 mt 2286 2943 L
+2286 2943 mt 2270 2969 L
+2270 2969 mt 2251 2993 L
+2251 2993 mt 2247 2997 L
+2247 2997 mt 2223 3024 L
+2223 3024 mt 2217 3032 L
+2217 3032 mt 2199 3052 L
+2199 3052 mt 2182 3078 L
+2182 3078 mt 2181 3079 L
+2181 3079 mt 2175 3107 L
+2175 3107 mt 2181 3134 L
+2181 3134 mt 2182 3136 L
+2182 3136 mt 2198 3162 L
+2198 3162 mt 2217 3185 L
+2217 3185 mt 2220 3189 L
+2220 3189 mt 2246 3217 L
+2246 3217 mt 2251 3223 L
+2251 3223 mt 2273 3244 L
+2273 3244 mt 2286 3256 L
+2286 3256 mt 2304 3272 L
+2304 3272 mt 2321 3287 L
+2321 3287 mt 2336 3299 L
+2336 3299 mt 2356 3316 L
+2356 3316 mt 2369 3327 L
+2369 3327 mt 2391 3346 L
+2391 3346 mt 2401 3354 L
+2401 3354 mt 2426 3375 L
+2426 3375 mt 2435 3382 L
+2435 3382 mt 2461 3402 L
+2461 3402 mt 2470 3409 L
+2470 3409 mt 2496 3430 L
+2496 3430 mt 2504 3437 L
+2504 3437 mt 2530 3463 L
+2530 3463 mt 2532 3464 L
+2532 3464 mt 2554 3492 L
+2554 3492 mt 2565 3512 L
+2565 3512 mt 2569 3519 L
+2569 3519 mt 2580 3547 L
+2580 3547 mt 2591 3575 L
+2591 3575 mt 2600 3595 L
+2600 3595 mt 2604 3602 L
+2604 3602 mt 2617 3630 L
+2617 3630 mt 2623 3657 L
+2623 3657 mt 2616 3685 L
+2616 3685 mt 2600 3699 L
+2600 3699 mt 2584 3712 L
+2584 3712 mt 2565 3722 L
+2565 3722 mt 2530 3738 L
+2530 3738 mt 2528 3740 L
+2528 3740 mt 2496 3753 L
+2496 3753 mt 2463 3767 L
+2463 3767 mt 2461 3768 L
+2461 3768 mt 2426 3783 L
+2426 3783 mt 2400 3795 L
+2400 3795 mt 2391 3799 L
+2391 3799 mt 2356 3816 L
+2356 3816 mt 2344 3822 L
+2344 3822 mt 2321 3835 L
+2321 3835 mt 2294 3850 L
+2294 3850 mt 2286 3854 L
+2286 3854 mt 2251 3874 L
+2251 3874 mt 2246 3877 L
+2246 3877 mt 2217 3894 L
+2217 3894 mt 2195 3905 L
+2195 3905 mt 2182 3913 L
+2182 3913 mt 2150 3932 L
+2150 3932 mt 2147 3935 L
+2147 3935 mt 2119 3960 L
+2119 3960 mt 2112 3970 L
+2112 3970 mt 2101 3987 L
+2101 3987 mt 2093 4015 L
+2093 4015 mt 2092 4042 L
+2092 4042 mt 2098 4070 L
+2098 4070 mt 2109 4097 L
+2109 4097 mt 2112 4102 L
+2112 4102 mt 2127 4125 L
+2127 4125 mt 2147 4150 L
+2147 4150 mt 2149 4152 L
+2149 4152 mt 2175 4180 L
+2175 4180 mt 2182 4187 L
+2182 4187 mt 2204 4207 L
+2204 4207 mt 2217 4221 L
+2217 4221 mt 2231 4235 L
+2231 4235 mt 2251 4258 L
+2251 4258 mt 2255 4262 L
+2255 4262 mt 2278 4290 L
+2278 4290 mt 2286 4300 L
+2286 4300 mt 2301 4317 L
+2301 4317 mt 2321 4338 L
+2321 4338 mt 2327 4345 L
+2327 4345 mt 2356 4369 L
+2356 4369 mt 2360 4372 L
+2360 4372 mt 2391 4394 L
+2391 4394 mt 2400 4400 L
+2400 4400 mt 2426 4414 L
+2426 4414 mt 2451 4427 L
+2451 4427 mt 2461 4432 L
+2461 4432 mt 2496 4450 L
+2496 4450 mt 2505 4455 L
+2505 4455 mt 2530 4467 L
+2530 4467 mt 2560 4482 L
+2560 4482 mt 2565 4485 L
+2565 4485 mt 2600 4502 L
+2600 4502 mt 2618 4510 L
+2618 4510 mt 2635 4517 L
+2635 4517 mt 2670 4530 L
+2670 4530 mt 2694 4537 L
+2694 4537 mt 2705 4541 L
+2705 4541 mt 2740 4547 L
+2740 4547 mt 2774 4551 L
+2774 4551 mt 2809 4554 L
+2809 4554 mt 2844 4558 L
+2844 4558 mt 2875 4565 L
+2875 4565 mt 2879 4567 L
+2879 4567 mt 2913 4592 L
+2913 4592 mt 2900 4620 L
+2900 4620 mt 2879 4635 L
+2879 4635 mt 2860 4648 L
+2860 4648 mt 2844 4654 L
+2844 4654 mt 2809 4664 L
+2809 4664 mt 2774 4672 L
+2774 4672 mt 2763 4675 L
+2763 4675 mt 2740 4681 L
+2740 4681 mt 2705 4691 L
+2705 4691 mt 2674 4703 L
+2674 4703 mt 2670 4704 L
+2670 4704 mt 2635 4715 L
+2635 4715 mt 2600 4727 L
+2600 4727 mt 2590 4730 L
+2590 4730 mt 2565 4737 L
+2565 4737 mt 2530 4747 L
+2530 4747 mt 2496 4756 L
+2496 4756 mt 2487 4758 L
+2487 4758 mt 2461 4763 L
+2461 4763 mt 2426 4770 L
+2426 4770 mt 2391 4776 L
+2391 4776 mt 2356 4781 L
+2356 4781 mt 2321 4785 L
+2321 4785 mt 2320 4785 L
+2320 4785 mt 2286 4788 L
+2286 4788 mt 2251 4790 L
+2251 4790 mt 2217 4790 L
+2217 4790 mt 2182 4790 L
+2182 4790 mt 2147 4789 L
+2147 4789 mt 2112 4786 L
+2112 4786 mt 2104 4785 L
+2104 4785 mt 2077 4782 L
+2077 4782 mt 2042 4777 L
+2042 4777 mt 2007 4771 L
+2007 4771 mt 1972 4764 L
+1972 4764 mt 1948 4758 L
+1948 4758 mt 1938 4755 L
+1938 4755 mt 1903 4745 L
+1903 4745 mt 1868 4733 L
+1868 4733 mt 1859 4730 L
+1859 4730 mt 1833 4720 L
+1833 4720 mt 1798 4704 L
+1798 4704 mt 1796 4703 L
+1796 4703 mt 1763 4685 L
+1763 4685 mt 1748 4675 L
+1748 4675 mt 1728 4662 L
+1728 4662 mt 1711 4648 L
+1711 4648 mt 1694 4630 L
+1694 4630 mt 1685 4620 L
+1685 4620 mt 1665 4592 L
+1665 4592 mt 1659 4580 L
+1659 4580 mt 1651 4565 L
+1651 4565 mt 1640 4537 L
+1640 4537 mt 1630 4510 L
+1630 4510 mt 1624 4487 L
+1624 4487 mt 1622 4482 L
+1622 4482 mt 1614 4455 L
+1614 4455 mt 1604 4427 L
+1604 4427 mt 1601 4400 L
+1601 4400 mt 1603 4372 L
+1603 4372 mt 1600 4345 L
+1600 4345 mt 1590 4317 L
+1590 4317 mt 1589 4315 L
+1589 4315 mt 1576 4290 L
+1576 4290 mt 1558 4262 L
+1558 4262 mt 1554 4257 L
+1554 4257 mt 1543 4235 L
+1543 4235 mt 1534 4207 L
+1534 4207 mt 1528 4180 L
+1528 4180 mt 1527 4152 L
+1527 4152 mt 1531 4125 L
+1531 4125 mt 1540 4097 L
+1540 4097 mt 1554 4070 L
+1554 4070 mt 1554 4070 L
+1554 4070 mt 1575 4042 L
+1575 4042 mt 1589 4027 L
+1589 4027 mt 1604 4015 L
+1604 4015 mt 1624 3998 L
+1624 3998 mt 1641 3987 L
+1641 3987 mt 1659 3976 L
+1659 3976 mt 1694 3961 L
+1694 3961 mt 1696 3960 L
+1696 3960 mt 1728 3947 L
+1728 3947 mt 1759 3932 L
+1759 3932 mt 1763 3930 L
+1763 3930 mt 1798 3910 L
+1798 3910 mt 1808 3905 L
+1808 3905 mt 1833 3887 L
+1833 3887 mt 1848 3877 L
+1848 3877 mt 1868 3857 L
+1868 3857 mt 1876 3850 L
+1876 3850 mt 1890 3822 L
+1890 3822 mt 1892 3795 L
+1892 3795 mt 1887 3767 L
+1887 3767 mt 1877 3740 L
+1877 3740 mt 1868 3723 L
+1868 3723 mt 1862 3712 L
+1862 3712 mt 1848 3685 L
+1848 3685 mt 1836 3657 L
+1836 3657 mt 1833 3648 L
+1833 3648 mt 1827 3630 L
+1827 3630 mt 1819 3602 L
+1819 3602 mt 1812 3575 L
+1812 3575 mt 1805 3547 L
+1805 3547 mt 1798 3521 L
+1798 3521 mt 1798 3519 L
+1798 3519 mt 1788 3492 L
+1788 3492 mt 1778 3464 L
+1778 3464 mt 1765 3437 L
+1765 3437 mt 1763 3433 L
+1763 3433 mt 1750 3409 L
+1750 3409 mt 1732 3382 L
+1732 3382 mt 1728 3376 L
+1728 3376 mt 1711 3354 L
+1711 3354 mt 1694 3334 L
+1694 3334 mt 1686 3327 L
+1686 3327 mt 1659 3302 L
+1659 3302 mt 1655 3299 L
+1655 3299 mt 1624 3278 L
+1624 3278 mt 1614 3272 L
+1614 3272 mt 1589 3259 L
+1589 3259 mt 1555 3244 L
+1555 3244 mt 1554 3244 L
+1554 3244 mt 1519 3234 L
+1519 3234 mt 1484 3224 L
+1484 3224 mt 1452 3217 L
+1452 3217 mt 1449 3216 L
+1449 3216 mt 1415 3210 L
+1415 3210 mt 1380 3203 L
+1380 3203 mt 1345 3194 L
+1345 3194 mt 1326 3189 L
+1326 3189 mt 1310 3185 L
+1310 3185 mt 1275 3175 L
+1275 3175 mt 1240 3165 L
+1240 3165 mt 1229 3162 L
+1229 3162 mt 1205 3155 L
+1205 3155 mt 1170 3142 L
+1170 3142 mt 1152 3134 L
+1152 3134 mt 1136 3128 L
+1136 3128 mt 1101 3112 L
+1101 3112 mt 1090 3107 L
+1090 3107 mt 1066 3095 L
+1066 3095 mt 1036 3079 L
+1036 3079 mt 1031 3076 L
+1031 3076 mt 996 3057 L
+ 996 3057 mt 986 3052 L
+ 986 3052 mt 961 3038 L
+ 961 3038 mt 936 3024 L
+ 936 3024 mt 926 3019 L
+ 926 3019 mt 892 2999 L
+ 892 2999 mt 887 2997 L
+ 887 2997 mt 857 2979 L
+ 857 2979 mt 842 2969 L
+ 842 2969 mt 822 2957 L
+ 822 2957 mt 800 2942 L
+ 800 2942 mt 787 2932 L
+ 787 2932 mt 764 2914 L
+ 764 2914 mt 752 2905 L
+ 752 2905 mt 731 2887 L
+ 731 2887 mt 717 2873 L
+ 717 2873 mt 703 2859 L
+ 703 2859 mt 682 2837 L
+ 682 2837 mt 677 2832 L
+ 677 2832 mt 655 2804 L
+ 655 2804 mt 647 2794 L
+ 647 2794 mt 635 2777 L
+ 635 2777 mt 617 2749 L
+ 617 2749 mt 613 2741 L
+ 613 2741 mt 601 2722 L
+ 601 2722 mt 587 2694 L
+ 587 2694 mt 578 2673 L
+ 578 2673 mt 575 2667 L
+ 575 2667 mt 563 2639 L
+ 563 2639 mt 553 2612 L
+ 553 2612 mt 545 2584 L
+ 545 2584 mt 543 2576 L
+ 543 2576 mt 537 2557 L
+ 537 2557 mt 531 2529 L
+ 531 2529 mt 527 2502 L
+ 527 2502 mt 523 2474 L
+ 523 2474 mt 520 2446 L
+ 520 2446 mt 519 2419 L
+ 519 2419 mt 518 2391 L
+ 518 2391 mt 518 2364 L
+ 518 2364 mt 519 2336 L
+ 519 2336 mt 521 2309 L
+ 521 2309 mt 524 2281 L
+ 524 2281 mt 528 2254 L
+ 528 2254 mt 533 2226 L
+ 533 2226 mt 538 2199 L
+ 538 2199 mt 543 2179 L
+ 543 2179 mt 545 2171 L
+ 545 2171 mt 551 2144 L
+ 551 2144 mt 559 2116 L
+ 559 2116 mt 566 2089 L
+ 566 2089 mt 574 2061 L
+ 574 2061 mt 578 2045 L
+ 578 2045 mt 581 2034 L
+ 581 2034 mt 588 2006 L
+ 588 2006 mt 594 1979 L
+ 594 1979 mt 600 1951 L
+ 600 1951 mt 605 1924 L
+ 605 1924 mt 610 1896 L
+ 610 1896 mt 613 1879 L
+ 613 1879 mt 614 1869 L
+ 614 1869 mt 618 1841 L
+ 618 1841 mt 621 1814 L
+ 621 1814 mt 623 1786 L
+ 623 1786 mt 626 1759 L
+ 626 1759 mt 628 1731 L
+ 628 1731 mt 631 1704 L
+ 631 1704 mt 634 1676 L
+ 634 1676 mt 637 1649 L
+ 637 1649 mt 639 1621 L
+ 639 1621 mt 642 1594 L
+ 642 1594 mt 644 1566 L
+ 644 1566 mt 646 1539 L
+ 646 1539 mt 647 1524 L
+ 647 1524 mt 648 1511 L
+ 648 1511 mt 650 1484 L
+ 650 1484 mt 651 1456 L
+ 651 1456 mt 651 1428 L
+ 651 1428 mt 652 1401 L
+ 652 1401 mt 653 1373 L
+ 653 1373 mt 653 1346 L
+ 653 1346 mt 654 1318 L
+ 654 1318 mt 655 1291 L
+ 655 1291 mt 657 1263 L
+ 657 1263 mt 659 1236 L
+ 659 1236 mt 662 1208 L
+ 662 1208 mt 665 1181 L
+ 665 1181 mt 669 1153 L
+ 669 1153 mt 674 1126 L
+ 674 1126 mt 679 1098 L
+ 679 1098 mt 682 1083 L
+ 682 1083 mt 685 1071 L
+ 685 1071 mt 691 1043 L
+ 691 1043 mt 698 1016 L
+ 698 1016 mt 705 988 L
+ 705 988 mt 712 961 L
+ 712 961 mt 717 943 L
+ 717 943 mt 720 933 L
+ 720 933 mt 729 906 L
+ 729 906 mt 738 878 L
+ 738 878 mt 748 851 L
+ 748 851 mt 752 842 L
+ 752 842 mt 760 823 L
+ 760 823 mt 773 796 L
+ 773 796 mt 787 769 L
+ 787 769 mt 787 768 L
+ 787 768 mt 803 741 L
+ 803 741 mt 820 713 L
+ 820 713 mt 822 711 L
+ 822 711 mt 839 686 L
+ 839 686 mt 857 661 L
+ 857 661 mt 858 658 L
+ 858 658 mt 879 631 L
+ 879 631 mt 892 614 L
+ 892 614 mt 900 603 L
+ 900 603 mt 921 576 L
+ 921 576 mt 926 569 L
+ 926 569 mt 943 548 L
+ 943 548 mt 961 527 L
+ 961 527 mt 967 521 L
+ 967 521 mt 992 493 L
+ 992 493 mt 996 489 L
+ 996 489 mt 1021 466 L
+1021 466 mt 1031 457 L
+1031 457 mt 1054 438 L
+1054 438 mt 1066 429 L
+1066 429 mt 1092 411 L
+1092 411 mt 1101 405 L
+1101 405 mt 1136 384 L
+1136 384 mt 1137 383 L
+1137 383 mt 1170 365 L
+1170 365 mt 1192 355 L
+1192 355 mt 1205 349 L
+1205 349 mt 1240 336 L
+1240 336 mt 1266 328 L
+1266 328 mt 1275 325 L
+1275 325 mt 1310 316 L
+1310 316 mt 1345 310 L
+1345 310 mt 1380 305 L
+1380 305 mt 1415 301 L
+1415 301 mt 1419 300 L
+1419 300 mt 1449 297 L
+1449 297 mt 1484 294 L
+1484 294 mt 1519 291 L
+1519 291 mt 1554 287 L
+1554 287 mt 1589 283 L
+1589 283 mt 1624 278 L
+1624 278 mt 1658 273 L
+1658 273 mt 1659 273 L
+1659 273 mt 1694 267 L
+1694 267 mt 1728 262 L
+1728 262 mt 1763 256 L
+1763 256 mt 1798 251 L
+1798 251 mt 1833 247 L
+1833 247 mt 1842 245 L
+1842 245 mt 1868 243 L
+1868 243 mt 1903 239 L
+1903 239 mt 1938 237 L
+1938 237 mt 1972 235 L
+1972 235 mt 2007 234 L
+2007 234 mt 2042 233 L
+2042 233 mt 2077 233 L
+2077 233 mt 2112 232 L
+2112 232 mt 2147 230 L
+2147 230 mt 2182 229 L
+2182 229 mt 2217 227 L
+2217 227 mt 2251 224 L
+2251 224 mt 2286 222 L
+2286 222 mt 2321 219 L
+2321 219 mt 2333 218 L
+2333 218 mt 2356 216 L
+2356 216 mt 2391 213 L
+2391 213 mt 2426 211 L
+2426 211 mt 2461 208 L
+2461 208 mt 2496 205 L
+2496 205 mt 2530 203 L
+2530 203 mt 2565 200 L
+2565 200 mt 2600 197 L
+2600 197 mt 2635 194 L
+2635 194 mt 2670 191 L
+2670 191 mt 2677 190 L
+2677 190 mt 2705 188 L
+2705 188 mt 2740 185 L
+2740 185 mt 2774 182 L
+2774 182 mt 2809 179 L
+2809 179 mt 2844 176 L
+2844 176 mt 2879 173 L
+2879 173 mt 2914 171 L
+2914 171 mt 2949 168 L
+2949 168 mt 2984 166 L
+2984 166 mt 3019 164 L
+3019 164 mt 3033 163 L
+3033 163 mt 3053 161 L
+3053 161 mt 3088 159 L
+3088 159 mt 3123 156 L
+3123 156 mt 3158 153 L
+3158 153 mt 3193 150 L
+3193 150 mt 3228 146 L
+3228 146 mt 3263 143 L
+3263 143 mt 3298 138 L
+3298 138 mt 3320 135 L
+3320 135 mt 3332 134 L
+3332 134 mt 3367 129 L
+3367 129 mt 3402 124 L
+3402 124 mt 3437 119 L
+3437 119 mt 3472 114 L
+3472 114 mt 3507 108 L
+3507 108 mt 3510 108 L
+3510 108 mt 3542 103 L
+3542 103 mt 3577 97 L
+3577 97 mt 3611 92 L
+3611 92 mt 3646 86 L
+3646 86 mt 3681 81 L
+3681 81 mt 3683 80 L
+3683 80 mt 3716 75 L
+3716 75 mt 3751 70 L
+3751 70 mt 3786 64 L
+3786 64 mt 3821 59 L
+3821 59 mt 3855 53 L
+3855 53 mt 3860 53 L
+3860 53 mt 3890 48 L
+3890 48 mt 3925 43 L
+3925 43 mt 3960 38 L
+3960 38 mt 3995 33 L
+3995 33 mt 4030 29 L
+4030 29 mt 4056 25 L
+4056 25 mt 4065 24 L
+4065 24 mt 4100 20 L
+4100 20 mt 4134 15 L
+4134 15 mt 4169 11 L
+4169 11 mt 4204 7 L
+4204 7 mt 4239 4 L
+4239 4 mt 4274 1 L
+4274 1 mt 4309 -1 L
+4309 -1 mt 4309 -1 L
+4309 -1 mt 4344 -4 L
+4344 -4 mt 4379 -5 L
+4379 -5 mt 4413 -7 L
+4413 -7 mt 4448 -8 L
+4448 -8 mt 4483 -8 L
+4483 -8 mt 4518 -8 L
+4518 -8 mt 4553 -8 L
+4553 -8 mt 4588 -7 L
+4588 -7 mt 4623 -6 L
+4623 -6 mt 4657 -4 L
+4657 -4 mt 4692 -2 L
+4692 -2 mt 4707 -1 L
+4707 -1 mt 4727 0 L
+4727 0 mt 4762 2 L
+4762 2 mt 4797 6 L
+4797 6 mt 4832 10 L
+4832 10 mt 4867 14 L
+4867 14 mt 4902 20 L
+4902 20 mt 4934 25 L
+4934 25 mt 4936 26 L
+4936 26 mt 4971 32 L
+4971 32 mt 5006 40 L
+5006 40 mt 5041 48 L
+5041 48 mt 5062 53 L
+5062 53 mt 5076 56 L
+5076 56 mt 5111 65 L
+5111 65 mt 5146 76 L
+5146 76 mt 5161 80 L
+5161 80 mt 5181 87 L
+5181 87 mt 5215 99 L
+5215 99 mt 5240 108 L
+5240 108 mt 5250 112 L
+5250 112 mt 5285 126 L
+5285 126 mt 5305 135 L
+5305 135 mt 5320 142 L
+5320 142 mt 5355 159 L
+5355 159 mt 5361 163 L
+5361 163 mt 5390 178 L
+5390 178 mt 5411 190 L
+5411 190 mt 5425 198 L
+5425 198 mt 5456 218 L
+5456 218 mt 5459 220 L
+5459 220 mt 5494 244 L
+5494 244 mt 5497 245 L
+5497 245 mt 5529 269 L
+5529 269 mt 5535 273 L
+5535 273 mt 5564 295 L
+5564 295 mt 5571 300 L
+5571 300 mt 5599 323 L
+5599 323 mt 5605 328 L
+5605 328 mt 5634 352 L
+5634 352 mt 5638 355 L
+5638 355 mt 5669 383 L
+5669 383 mt 5669 383 L
+5669 383 mt 5700 411 L
+5700 411 mt 5704 414 L
+5704 414 mt 5730 438 L
+5730 438 mt 5738 446 L
+5738 446 mt 5759 466 L
+5759 466 mt 5773 480 L
+5773 480 mt 5787 493 L
+5787 493 mt 5808 514 L
+5808 514 mt 5815 521 L
+5815 521 mt 5842 548 L
+5842 548 mt 5843 549 L
+5843 549 mt 5869 576 L
+5869 576 mt 5878 584 L
+5878 584 mt 5896 603 L
+5896 603 mt 5913 620 L
+5913 620 mt 5923 631 L
+5923 631 mt 5948 657 L
+5948 657 mt 5949 658 L
+5949 658 mt 5975 686 L
+5975 686 mt 5983 693 L
+5983 693 mt 6001 713 L
+6001 713 mt 6017 730 L
+6017 730 mt 6027 741 L
+6027 741 mt 6052 768 L
+6052 768 mt 6053 768 L
+6053 768 mt 6078 796 L
+6078 796 mt 6087 805 L
+6087 805 mt 6104 823 L
+6104 823 mt 6122 842 L
+6122 842 mt 6130 851 L
+6130 851 mt 6155 878 L
+6155 878 mt 6157 880 L
+6157 880 mt 6181 906 L
+6181 906 mt 6192 917 L
+6192 917 mt 6206 933 L
+6206 933 mt 6227 955 L
+6227 955 mt 6232 961 L
+6232 961 mt 6257 988 L
+6257 988 mt 6261 993 L
+6261 993 mt 6283 1016 L
+6283 1016 mt 6296 1030 L
+6296 1030 mt 6309 1043 L
+6309 1043 mt 6331 1068 L
+6331 1068 mt 6334 1071 L
+6334 1071 mt 6360 1098 L
+6360 1098 mt 6366 1106 L
+6366 1106 mt 6385 1126 L
+6385 1126 mt 6401 1144 L
+6401 1144 mt 6409 1153 L
+6409 1153 mt 6434 1181 L
+6434 1181 mt 6436 1183 L
+6436 1183 mt 6458 1208 L
+6458 1208 mt 6471 1223 L
+6471 1223 mt 6482 1236 L
+6482 1236 mt 6506 1263 L
+6506 1263 mt 6506 1263 L
+6506 1263 mt 6528 1291 L
+6528 1291 mt 6540 1306 L
+6540 1306 mt 6550 1318 L
+6550 1318 mt 6571 1346 L
+6571 1346 mt 6575 1352 L
+6575 1352 mt 6592 1373 L
+6592 1373 mt 6610 1400 L
+6610 1400 mt 6611 1401 L
+6611 1401 mt 6630 1428 L
+6630 1428 mt 6645 1452 L
+6645 1452 mt 6648 1456 L
+6648 1456 mt 6664 1484 L
+6664 1484 mt 6680 1510 L
+6680 1510 mt 6680 1511 L
+6680 1511 mt 6695 1539 L
+6695 1539 mt 6709 1566 L
+6709 1566 mt 6715 1578 L
+6715 1578 mt 6722 1594 L
+6722 1594 mt 6735 1621 L
+6735 1621 mt 6746 1649 L
+6746 1649 mt 6750 1659 L
+6750 1659 mt 6756 1676 L
+6756 1676 mt 6765 1704 L
+6765 1704 mt 6774 1731 L
+6774 1731 mt 6782 1759 L
+6782 1759 mt 6785 1770 L
+6785 1770 mt 6789 1786 L
+6789 1786 mt 6795 1814 L
+6795 1814 mt 6800 1841 L
+6800 1841 mt 6805 1869 L
+6805 1869 mt 6809 1896 L
+6809 1896 mt 6813 1924 L
+6813 1924 mt 6815 1951 L
+6815 1951 mt 6817 1979 L
+6817 1979 mt 6819 2006 L
+6819 2006 mt 6819 2024 L
+6750 1822 mt 6753 1841 L
+6753 1841 mt 6758 1869 L
+6758 1869 mt 6761 1896 L
+6761 1896 mt 6764 1924 L
+6764 1924 mt 6767 1951 L
+6767 1951 mt 6769 1979 L
+6769 1979 mt 6770 2006 L
+6770 2006 mt 6770 2034 L
+6770 2034 mt 6770 2061 L
+6770 2061 mt 6769 2089 L
+6769 2089 mt 6767 2116 L
+6767 2116 mt 6764 2144 L
+6764 2144 mt 6761 2171 L
+6761 2171 mt 6757 2199 L
+6757 2199 mt 6752 2226 L
+6752 2226 mt 6750 2238 L
+6750 2238 mt 6746 2254 L
+6746 2254 mt 6740 2281 L
+6740 2281 mt 6734 2309 L
+6734 2309 mt 6726 2336 L
+6726 2336 mt 6718 2364 L
+6718 2364 mt 6715 2374 L
+6715 2374 mt 6709 2391 L
+6709 2391 mt 6700 2419 L
+6700 2419 mt 6690 2446 L
+6690 2446 mt 6680 2471 L
+6680 2471 mt 6679 2474 L
+6679 2474 mt 6667 2502 L
+6667 2502 mt 6655 2529 L
+6655 2529 mt 6645 2550 L
+6645 2550 mt 6642 2557 L
+6642 2557 mt 6628 2584 L
+6628 2584 mt 6613 2612 L
+6613 2612 mt 6610 2616 L
+6610 2616 mt 6597 2639 L
+6597 2639 mt 6580 2667 L
+6580 2667 mt 6575 2675 L
+6575 2675 mt 6563 2694 L
+6563 2694 mt 6544 2722 L
+6544 2722 mt 6540 2727 L
+6540 2727 mt 6524 2749 L
+6524 2749 mt 6506 2775 L
+6506 2775 mt 6504 2777 L
+6504 2777 mt 6483 2804 L
+6483 2804 mt 6471 2821 L
+6471 2821 mt 6462 2832 L
+6462 2832 mt 6441 2859 L
+6441 2859 mt 6436 2867 L
+6436 2867 mt 6421 2887 L
+6421 2887 mt 6401 2914 L
+6401 2914 mt 6401 2914 L
+6401 2914 mt 6382 2942 L
+6382 2942 mt 6366 2969 L
+6366 2969 mt 6366 2970 L
+6366 2970 mt 6353 2997 L
+6353 2997 mt 6344 3024 L
+6344 3024 mt 6339 3052 L
+6339 3052 mt 6337 3079 L
+6337 3079 mt 6337 3107 L
+6337 3107 mt 6337 3134 L
+6337 3134 mt 6337 3162 L
+6337 3162 mt 6338 3189 L
+6338 3189 mt 6338 3217 L
+6338 3217 mt 6338 3244 L
+6338 3244 mt 6338 3272 L
+6338 3272 mt 6338 3299 L
+6338 3299 mt 6337 3327 L
+6337 3327 mt 6335 3354 L
+6335 3354 mt 6332 3382 L
+6332 3382 mt 6331 3389 L
+6331 3389 mt 6328 3409 L
+6328 3409 mt 6322 3437 L
+6322 3437 mt 6314 3464 L
+6314 3464 mt 6302 3492 L
+6302 3492 mt 6296 3501 L
+6296 3501 mt 6282 3519 L
+6282 3519 mt 6261 3538 L
+6261 3538 mt 6237 3547 L
+6237 3547 mt 6227 3553 L
+6227 3553 mt 6208 3547 L
+6208 3547 mt 6192 3542 L
+6192 3542 mt 6168 3519 L
+6168 3519 mt 6157 3510 L
+6157 3510 mt 6139 3492 L
+6139 3492 mt 6122 3475 L
+6122 3475 mt 6110 3464 L
+6110 3464 mt 6087 3444 L
+6087 3444 mt 6076 3437 L
+6076 3437 mt 6052 3419 L
+6052 3419 mt 6036 3409 L
+6036 3409 mt 6017 3396 L
+6017 3396 mt 5997 3382 L
+5997 3382 mt 5983 3371 L
+5983 3371 mt 5962 3354 L
+5962 3354 mt 5948 3342 L
+5948 3342 mt 5930 3327 L
+5930 3327 mt 5913 3309 L
+5913 3309 mt 5904 3299 L
+5904 3299 mt 5882 3272 L
+5882 3272 mt 5878 3265 L
+5878 3265 mt 5866 3244 L
+5866 3244 mt 5849 3217 L
+5849 3217 mt 5843 3208 L
+5843 3208 mt 5832 3189 L
+5832 3189 mt 5813 3162 L
+5813 3162 mt 5808 3156 L
+5808 3156 mt 5796 3134 L
+5796 3134 mt 5778 3107 L
+5778 3107 mt 5773 3102 L
+5773 3102 mt 5758 3079 L
+5758 3079 mt 5738 3054 L
+5738 3054 mt 5737 3052 L
+5737 3052 mt 5718 3024 L
+5718 3024 mt 5704 3007 L
+5704 3007 mt 5695 2997 L
+5695 2997 mt 5669 2973 L
+5669 2973 mt 5664 2969 L
+5664 2969 mt 5634 2948 L
+5634 2948 mt 5625 2942 L
+5625 2942 mt 5599 2923 L
+5599 2923 mt 5588 2914 L
+5588 2914 mt 5564 2893 L
+5564 2893 mt 5558 2887 L
+5558 2887 mt 5531 2859 L
+5531 2859 mt 5529 2858 L
+5529 2858 mt 5501 2832 L
+5501 2832 mt 5494 2826 L
+5494 2826 mt 5471 2804 L
+5471 2804 mt 5459 2792 L
+5459 2792 mt 5444 2777 L
+5444 2777 mt 5425 2749 L
+5425 2749 mt 5425 2749 L
+5425 2749 mt 5412 2722 L
+5412 2722 mt 5407 2694 L
+5407 2694 mt 5406 2667 L
+5406 2667 mt 5410 2639 L
+5410 2639 mt 5417 2612 L
+5417 2612 mt 5425 2584 L
+5425 2584 mt 5425 2584 L
+5425 2584 mt 5432 2557 L
+5432 2557 mt 5437 2529 L
+5437 2529 mt 5441 2502 L
+5441 2502 mt 5441 2474 L
+5441 2474 mt 5438 2446 L
+5438 2446 mt 5432 2419 L
+5432 2419 mt 5425 2396 L
+5425 2396 mt 5423 2391 L
+5423 2391 mt 5412 2364 L
+5412 2364 mt 5398 2336 L
+5398 2336 mt 5390 2323 L
+5390 2323 mt 5380 2309 L
+5380 2309 mt 5355 2281 L
+5355 2281 mt 5355 2281 L
+5355 2281 mt 5320 2255 L
+5320 2255 mt 5318 2254 L
+5318 2254 mt 5285 2239 L
+5285 2239 mt 5250 2230 L
+5250 2230 mt 5231 2226 L
+5231 2226 mt 5215 2220 L
+5215 2220 mt 5184 2199 L
+5184 2199 mt 5181 2193 L
+5181 2193 mt 5172 2171 L
+5172 2171 mt 5169 2144 L
+5169 2144 mt 5176 2116 L
+5176 2116 mt 5181 2102 L
+5181 2102 mt 5184 2089 L
+5184 2089 mt 5191 2061 L
+5191 2061 mt 5194 2034 L
+5194 2034 mt 5191 2006 L
+5191 2006 mt 5181 1979 L
+5181 1979 mt 5181 1978 L
+5181 1978 mt 5160 1951 L
+5160 1951 mt 5146 1941 L
+5146 1941 mt 5111 1925 L
+5111 1925 mt 5104 1924 L
+5104 1924 mt 5076 1919 L
+5076 1919 mt 5041 1918 L
+5041 1918 mt 5006 1919 L
+5006 1919 mt 4971 1922 L
+4971 1922 mt 4957 1924 L
+4957 1924 mt 4936 1926 L
+4936 1926 mt 4902 1931 L
+4902 1931 mt 4867 1932 L
+4867 1932 mt 4832 1926 L
+4832 1926 mt 4828 1924 L
+4828 1924 mt 4797 1906 L
+4797 1906 mt 4788 1896 L
+4788 1896 mt 4773 1869 L
+4773 1869 mt 4766 1841 L
+4766 1841 mt 4764 1814 L
+4764 1814 mt 4765 1786 L
+4765 1786 mt 4768 1759 L
+4768 1759 mt 4771 1731 L
+4771 1731 mt 4772 1704 L
+4772 1704 mt 4768 1676 L
+4768 1676 mt 4762 1664 L
+4762 1664 mt 4750 1649 L
+4750 1649 mt 4727 1634 L
+4727 1634 mt 4692 1623 L
+4692 1623 mt 4680 1621 L
+4680 1621 mt 4657 1618 L
+4657 1618 mt 4623 1616 L
+4623 1616 mt 4588 1616 L
+4588 1616 mt 4553 1615 L
+4553 1615 mt 4518 1613 L
+4518 1613 mt 4483 1604 L
+4483 1604 mt 4463 1594 L
+4463 1594 mt 4448 1583 L
+4448 1583 mt 4435 1566 L
+4435 1566 mt 4419 1539 L
+4419 1539 mt 4413 1526 L
+4413 1526 mt 4407 1511 L
+4407 1511 mt 4395 1484 L
+4395 1484 mt 4381 1456 L
+4381 1456 mt 4379 1451 L
+4379 1451 mt 4365 1428 L
+4365 1428 mt 4344 1407 L
+4344 1407 mt 4337 1401 L
+4337 1401 mt 4309 1383 L
+4309 1383 mt 4290 1373 L
+4290 1373 mt 4274 1366 L
+4274 1366 mt 4239 1353 L
+4239 1353 mt 4220 1346 L
+4220 1346 mt 4204 1340 L
+4204 1340 mt 4169 1328 L
+4169 1328 mt 4140 1318 L
+4140 1318 mt 4134 1316 L
+4134 1316 mt 4100 1305 L
+4100 1305 mt 4065 1294 L
+4065 1294 mt 4055 1291 L
+4055 1291 mt 4030 1279 L
+4030 1279 mt 4002 1263 L
+4002 1263 mt 3995 1258 L
+3995 1258 mt 3968 1236 L
+3968 1236 mt 3960 1228 L
+3960 1228 mt 3939 1208 L
+3939 1208 mt 3925 1196 L
+3925 1196 mt 3906 1181 L
+3906 1181 mt 3890 1169 L
+3890 1169 mt 3864 1153 L
+3864 1153 mt 3855 1149 L
+3855 1149 mt 3821 1133 L
+3821 1133 mt 3801 1126 L
+3801 1126 mt 3786 1121 L
+3786 1121 mt 3751 1110 L
+3751 1110 mt 3716 1101 L
+3716 1101 mt 3706 1098 L
+3706 1098 mt 3681 1092 L
+3681 1092 mt 3646 1081 L
+3646 1081 mt 3614 1071 L
+3614 1071 mt 3611 1070 L
+3611 1070 mt 3577 1056 L
+3577 1056 mt 3545 1043 L
+3545 1043 mt 3542 1042 L
+3542 1042 mt 3507 1026 L
+3507 1026 mt 3486 1016 L
+3486 1016 mt 3472 1008 L
+3472 1008 mt 3437 989 L
+3437 989 mt 3436 988 L
+3436 988 mt 3402 968 L
+3402 968 mt 3390 961 L
+3390 961 mt 3367 945 L
+3367 945 mt 3348 933 L
+3348 933 mt 3332 922 L
+3332 922 mt 3307 906 L
+3307 906 mt 3298 899 L
+3298 899 mt 3263 880 L
+3263 880 mt 3258 878 L
+3258 878 mt 3228 861 L
+3228 861 mt 3209 851 L
+3209 851 mt 3193 836 L
+3193 836 mt 3178 823 L
+3178 823 mt 3158 803 L
+3158 803 mt 3151 796 L
+3151 796 mt 3123 769 L
+3123 769 mt 3123 768 L
+3123 768 mt 3088 741 L
+3088 741 mt 3088 741 L
+3088 741 mt 3053 722 L
+3053 722 mt 3029 713 L
+3029 713 mt 3019 710 L
+3019 710 mt 2984 703 L
+2984 703 mt 2949 700 L
+2949 700 mt 2914 702 L
+2914 702 mt 2879 706 L
+2879 706 mt 2844 711 L
+2844 711 mt 2831 713 L
+2831 713 mt 2809 717 L
+2809 717 mt 2774 722 L
+2774 722 mt 2740 726 L
+2740 726 mt 2705 728 L
+2705 728 mt 2670 730 L
+2670 730 mt 2635 730 L
+2635 730 mt 2600 730 L
+2600 730 mt 2565 728 L
+2565 728 mt 2530 726 L
+2530 726 mt 2496 723 L
+2496 723 mt 2461 723 L
+2461 723 mt 2426 726 L
+2426 726 mt 2391 733 L
+2391 733 mt 2367 741 L
+2367 741 mt 2356 745 L
+2356 745 mt 2321 760 L
+2321 760 mt 2302 768 L
+2302 768 mt 2286 776 L
+2286 776 mt 2251 792 L
+2251 792 mt 2242 796 L
+2242 796 mt 2217 806 L
+2217 806 mt 2182 816 L
+2182 816 mt 2147 823 L
+2147 823 mt 2141 823 L
+2141 823 mt 2112 826 L
+2112 826 mt 2077 827 L
+2077 827 mt 2042 826 L
+2042 826 mt 2007 824 L
+2007 824 mt 1983 823 L
+1983 823 mt 1972 823 L
+1972 823 mt 1938 821 L
+1938 821 mt 1903 823 L
+1903 823 mt 1897 823 L
+1897 823 mt 1868 828 L
+1868 828 mt 1833 838 L
+1833 838 mt 1805 851 L
+1805 851 mt 1798 854 L
+1798 854 mt 1763 878 L
+1763 878 mt 1763 878 L
+1763 878 mt 1735 906 L
+1735 906 mt 1728 911 L
+1728 911 mt 1710 933 L
+1710 933 mt 1694 950 L
+1694 950 mt 1685 961 L
+1685 961 mt 1661 988 L
+1661 988 mt 1659 991 L
+1659 991 mt 1637 1016 L
+1637 1016 mt 1624 1029 L
+1624 1029 mt 1610 1043 L
+1610 1043 mt 1589 1062 L
+1589 1062 mt 1580 1071 L
+1580 1071 mt 1554 1093 L
+1554 1093 mt 1548 1098 L
+1548 1098 mt 1519 1123 L
+1519 1123 mt 1516 1126 L
+1516 1126 mt 1487 1153 L
+1487 1153 mt 1484 1156 L
+1484 1156 mt 1463 1181 L
+1463 1181 mt 1449 1205 L
+1449 1205 mt 1448 1208 L
+1448 1208 mt 1440 1236 L
+1440 1236 mt 1439 1263 L
+1439 1263 mt 1444 1291 L
+1444 1291 mt 1449 1306 L
+1449 1306 mt 1454 1318 L
+1454 1318 mt 1467 1346 L
+1467 1346 mt 1482 1373 L
+1482 1373 mt 1484 1380 L
+1484 1380 mt 1494 1401 L
+1494 1401 mt 1497 1428 L
+1497 1428 mt 1487 1456 L
+1487 1456 mt 1484 1459 L
+1484 1459 mt 1456 1484 L
+1456 1484 mt 1449 1487 L
+1449 1487 mt 1415 1495 L
+1415 1495 mt 1380 1498 L
+1380 1498 mt 1345 1500 L
+1345 1500 mt 1310 1506 L
+1310 1506 mt 1292 1511 L
+1292 1511 mt 1275 1519 L
+1275 1519 mt 1243 1539 L
+1243 1539 mt 1240 1541 L
+1240 1541 mt 1221 1566 L
+1221 1566 mt 1213 1594 L
+1213 1594 mt 1213 1621 L
+1213 1621 mt 1219 1649 L
+1219 1649 mt 1229 1676 L
+1229 1676 mt 1239 1704 L
+1239 1704 mt 1240 1706 L
+1240 1706 mt 1251 1731 L
+1251 1731 mt 1262 1759 L
+1262 1759 mt 1274 1786 L
+1274 1786 mt 1275 1788 L
+1275 1788 mt 1287 1814 L
+1287 1814 mt 1301 1841 L
+1301 1841 mt 1310 1857 L
+1310 1857 mt 1317 1869 L
+1317 1869 mt 1334 1896 L
+1334 1896 mt 1345 1913 L
+1345 1913 mt 1351 1924 L
+1351 1924 mt 1367 1951 L
+1367 1951 mt 1380 1974 L
+1380 1974 mt 1382 1979 L
+1382 1979 mt 1395 2006 L
+1395 2006 mt 1408 2034 L
+1408 2034 mt 1415 2048 L
+1415 2048 mt 1421 2061 L
+1421 2061 mt 1435 2089 L
+1435 2089 mt 1449 2111 L
+1449 2111 mt 1452 2116 L
+1452 2116 mt 1466 2144 L
+1466 2144 mt 1474 2171 L
+1474 2171 mt 1479 2199 L
+1479 2199 mt 1484 2215 L
+1484 2215 mt 1487 2226 L
+1487 2226 mt 1503 2254 L
+1503 2254 mt 1519 2270 L
+1519 2270 mt 1531 2281 L
+1531 2281 mt 1554 2298 L
+1554 2298 mt 1572 2309 L
+1572 2309 mt 1589 2319 L
+1589 2319 mt 1621 2336 L
+1621 2336 mt 1624 2338 L
+1624 2338 mt 1659 2357 L
+1659 2357 mt 1671 2364 L
+1671 2364 mt 1694 2378 L
+1694 2378 mt 1714 2391 L
+1714 2391 mt 1728 2402 L
+1728 2402 mt 1751 2419 L
+1751 2419 mt 1763 2434 L
+1763 2434 mt 1773 2446 L
+1773 2446 mt 1783 2474 L
+1783 2474 mt 1783 2502 L
+1783 2502 mt 1777 2529 L
+1777 2529 mt 1769 2557 L
+1769 2557 mt 1763 2576 L
+1763 2576 mt 1761 2584 L
+1761 2584 mt 1759 2612 L
+1759 2612 mt 1763 2629 L
+1763 2629 mt 1768 2639 L
+1768 2639 mt 1798 2665 L
+1798 2665 mt 1802 2667 L
+1802 2667 mt 1833 2677 L
+1833 2677 mt 1868 2683 L
+1868 2683 mt 1903 2688 L
+1903 2688 mt 1938 2693 L
+1938 2693 mt 1944 2694 L
+1944 2694 mt 1972 2701 L
+1972 2701 mt 2007 2715 L
+2007 2715 mt 2019 2722 L
+2019 2722 mt 2042 2736 L
+2042 2736 mt 2059 2749 L
+2059 2749 mt 2077 2762 L
+2077 2762 mt 2095 2777 L
+2095 2777 mt 2112 2790 L
+2112 2790 mt 2127 2804 L
+2127 2804 mt 2147 2830 L
+2147 2830 mt 2148 2832 L
+2148 2832 mt 2149 2859 L
+2149 2859 mt 2147 2863 L
+2147 2863 mt 2131 2887 L
+2131 2887 mt 2112 2905 L
+2112 2905 mt 2099 2914 L
+2099 2914 mt 2077 2930 L
+2077 2930 mt 2067 2942 L
+2067 2942 mt 2050 2969 L
+2050 2969 mt 2042 2990 L
+2042 2990 mt 2040 2997 L
+2040 2997 mt 2036 3024 L
+2036 3024 mt 2038 3052 L
+2038 3052 mt 2042 3074 L
+2042 3074 mt 2043 3079 L
+2043 3079 mt 2054 3107 L
+2054 3107 mt 2069 3134 L
+2069 3134 mt 2077 3145 L
+2077 3145 mt 2090 3162 L
+2090 3162 mt 2112 3185 L
+2112 3185 mt 2116 3189 L
+2116 3189 mt 2146 3217 L
+2146 3217 mt 2147 3218 L
+2147 3218 mt 2177 3244 L
+2177 3244 mt 2182 3249 L
+2182 3249 mt 2206 3272 L
+2206 3272 mt 2217 3281 L
+2217 3281 mt 2239 3299 L
+2239 3299 mt 2251 3309 L
+2251 3309 mt 2274 3327 L
+2274 3327 mt 2286 3337 L
+2286 3337 mt 2307 3354 L
+2307 3354 mt 2321 3366 L
+2321 3366 mt 2340 3382 L
+2340 3382 mt 2356 3396 L
+2356 3396 mt 2373 3409 L
+2373 3409 mt 2391 3424 L
+2391 3424 mt 2406 3437 L
+2406 3437 mt 2426 3456 L
+2426 3456 mt 2435 3464 L
+2435 3464 mt 2460 3492 L
+2460 3492 mt 2461 3493 L
+2461 3493 mt 2480 3519 L
+2480 3519 mt 2495 3547 L
+2495 3547 mt 2496 3547 L
+2496 3547 mt 2508 3575 L
+2508 3575 mt 2517 3602 L
+2517 3602 mt 2522 3630 L
+2522 3630 mt 2520 3657 L
+2520 3657 mt 2504 3685 L
+2504 3685 mt 2496 3691 L
+2496 3691 mt 2466 3712 L
+2466 3712 mt 2461 3715 L
+2461 3715 mt 2426 3734 L
+2426 3734 mt 2415 3740 L
+2415 3740 mt 2391 3751 L
+2391 3751 mt 2359 3767 L
+2359 3767 mt 2356 3769 L
+2356 3769 mt 2321 3787 L
+2321 3787 mt 2306 3795 L
+2306 3795 mt 2286 3805 L
+2286 3805 mt 2254 3822 L
+2254 3822 mt 2251 3823 L
+2251 3823 mt 2217 3840 L
+2217 3840 mt 2191 3850 L
+2191 3850 mt 2182 3853 L
+2182 3853 mt 2147 3864 L
+2147 3864 mt 2112 3869 L
+2112 3869 mt 2077 3866 L
+2077 3866 mt 2050 3850 L
+2050 3850 mt 2042 3844 L
+2042 3844 mt 2023 3822 L
+2023 3822 mt 2007 3807 L
+2007 3807 mt 1996 3795 L
+1996 3795 mt 1972 3767 L
+1972 3767 mt 1972 3767 L
+1972 3767 mt 1953 3740 L
+1953 3740 mt 1938 3712 L
+1938 3712 mt 1937 3712 L
+1937 3712 mt 1924 3685 L
+1924 3685 mt 1912 3657 L
+1912 3657 mt 1903 3632 L
+1903 3632 mt 1902 3630 L
+1902 3630 mt 1894 3602 L
+1894 3602 mt 1886 3575 L
+1886 3575 mt 1877 3547 L
+1877 3547 mt 1868 3519 L
+1868 3519 mt 1868 3519 L
+1868 3519 mt 1858 3492 L
+1858 3492 mt 1847 3464 L
+1847 3464 mt 1834 3437 L
+1834 3437 mt 1833 3435 L
+1833 3435 mt 1819 3409 L
+1819 3409 mt 1802 3382 L
+1802 3382 mt 1798 3377 L
+1798 3377 mt 1783 3354 L
+1783 3354 mt 1763 3328 L
+1763 3328 mt 1762 3327 L
+1762 3327 mt 1738 3299 L
+1738 3299 mt 1728 3290 L
+1728 3290 mt 1708 3272 L
+1708 3272 mt 1694 3261 L
+1694 3261 mt 1671 3244 L
+1671 3244 mt 1659 3237 L
+1659 3237 mt 1624 3219 L
+1624 3219 mt 1620 3217 L
+1620 3217 mt 1589 3205 L
+1589 3205 mt 1554 3194 L
+1554 3194 mt 1540 3189 L
+1540 3189 mt 1519 3184 L
+1519 3184 mt 1484 3175 L
+1484 3175 mt 1449 3167 L
+1449 3167 mt 1424 3162 L
+1424 3162 mt 1415 3160 L
+1415 3160 mt 1380 3152 L
+1380 3152 mt 1345 3144 L
+1345 3144 mt 1310 3135 L
+1310 3135 mt 1305 3134 L
+1305 3134 mt 1275 3128 L
+1275 3128 mt 1240 3120 L
+1240 3120 mt 1205 3111 L
+1205 3111 mt 1194 3107 L
+1194 3107 mt 1170 3098 L
+1170 3098 mt 1136 3083 L
+1136 3083 mt 1128 3079 L
+1128 3079 mt 1101 3066 L
+1101 3066 mt 1073 3052 L
+1073 3052 mt 1066 3048 L
+1066 3048 mt 1031 3030 L
+1031 3030 mt 1021 3024 L
+1021 3024 mt 996 3011 L
+ 996 3011 mt 969 2997 L
+ 969 2997 mt 961 2993 L
+ 961 2993 mt 926 2974 L
+ 926 2974 mt 917 2969 L
+ 917 2969 mt 892 2955 L
+ 892 2955 mt 868 2942 L
+ 868 2942 mt 857 2935 L
+ 857 2935 mt 825 2914 L
+ 825 2914 mt 822 2912 L
+ 822 2912 mt 788 2887 L
+ 788 2887 mt 787 2886 L
+ 787 2886 mt 756 2859 L
+ 756 2859 mt 752 2855 L
+ 752 2855 mt 728 2832 L
+ 728 2832 mt 717 2819 L
+ 717 2819 mt 704 2804 L
+ 704 2804 mt 683 2777 L
+ 683 2777 mt 682 2775 L
+ 682 2775 mt 665 2749 L
+ 665 2749 mt 649 2722 L
+ 649 2722 mt 647 2719 L
+ 647 2719 mt 634 2694 L
+ 634 2694 mt 622 2667 L
+ 622 2667 mt 613 2642 L
+ 613 2642 mt 611 2639 L
+ 611 2639 mt 602 2612 L
+ 602 2612 mt 594 2584 L
+ 594 2584 mt 587 2557 L
+ 587 2557 mt 581 2529 L
+ 581 2529 mt 578 2505 L
+ 578 2505 mt 577 2502 L
+ 577 2502 mt 574 2474 L
+ 574 2474 mt 572 2446 L
+ 572 2446 mt 571 2419 L
+ 571 2419 mt 572 2391 L
+ 572 2391 mt 573 2364 L
+ 573 2364 mt 575 2336 L
+ 575 2336 mt 578 2314 L
+ 578 2314 mt 578 2309 L
+ 578 2309 mt 583 2281 L
+ 583 2281 mt 588 2254 L
+ 588 2254 mt 594 2226 L
+ 594 2226 mt 602 2199 L
+ 602 2199 mt 610 2171 L
+ 610 2171 mt 613 2162 L
+ 613 2162 mt 618 2144 L
+ 618 2144 mt 627 2116 L
+ 627 2116 mt 636 2089 L
+ 636 2089 mt 645 2061 L
+ 645 2061 mt 647 2054 L
+ 647 2054 mt 654 2034 L
+ 654 2034 mt 662 2006 L
+ 662 2006 mt 669 1979 L
+ 669 1979 mt 675 1951 L
+ 675 1951 mt 680 1924 L
+ 680 1924 mt 682 1906 L
+ 682 1906 mt 684 1896 L
+ 684 1896 mt 687 1869 L
+ 687 1869 mt 689 1841 L
+ 689 1841 mt 691 1814 L
+ 691 1814 mt 692 1786 L
+ 692 1786 mt 694 1759 L
+ 694 1759 mt 695 1731 L
+ 695 1731 mt 698 1704 L
+ 698 1704 mt 700 1676 L
+ 700 1676 mt 703 1649 L
+ 703 1649 mt 705 1621 L
+ 705 1621 mt 708 1594 L
+ 708 1594 mt 710 1566 L
+ 710 1566 mt 712 1539 L
+ 712 1539 mt 713 1511 L
+ 713 1511 mt 713 1484 L
+ 713 1484 mt 712 1456 L
+ 712 1456 mt 711 1428 L
+ 711 1428 mt 710 1401 L
+ 710 1401 mt 709 1373 L
+ 709 1373 mt 709 1346 L
+ 709 1346 mt 708 1318 L
+ 708 1318 mt 709 1291 L
+ 709 1291 mt 709 1263 L
+ 709 1263 mt 710 1236 L
+ 710 1236 mt 712 1208 L
+ 712 1208 mt 715 1181 L
+ 715 1181 mt 717 1161 L
+ 717 1161 mt 718 1153 L
+ 718 1153 mt 722 1126 L
+ 722 1126 mt 727 1098 L
+ 727 1098 mt 732 1071 L
+ 732 1071 mt 738 1043 L
+ 738 1043 mt 744 1016 L
+ 744 1016 mt 750 988 L
+ 750 988 mt 752 980 L
+ 752 980 mt 756 961 L
+ 756 961 mt 763 933 L
+ 763 933 mt 771 906 L
+ 771 906 mt 779 878 L
+ 779 878 mt 787 856 L
+ 787 856 mt 789 851 L
+ 789 851 mt 800 823 L
+ 800 823 mt 813 796 L
+ 813 796 mt 822 779 L
+ 822 779 mt 828 768 L
+ 828 768 mt 844 741 L
+ 844 741 mt 857 721 L
+ 857 721 mt 862 713 L
+ 862 713 mt 881 686 L
+ 881 686 mt 892 671 L
+ 892 671 mt 901 658 L
+ 901 658 mt 921 631 L
+ 921 631 mt 926 624 L
+ 926 624 mt 942 603 L
+ 942 603 mt 961 577 L
+ 961 577 mt 962 576 L
+ 962 576 mt 983 548 L
+ 983 548 mt 996 533 L
+ 996 533 mt 1007 521 L
+1007 521 mt 1031 495 L
+1031 495 mt 1033 493 L
+1033 493 mt 1063 466 L
+1063 466 mt 1066 464 L
+1066 464 mt 1099 438 L
+1099 438 mt 1101 437 L
+1101 437 mt 1136 414 L
+1136 414 mt 1142 411 L
+1142 411 mt 1170 394 L
+1170 394 mt 1193 383 L
+1193 383 mt 1205 377 L
+1205 377 mt 1240 363 L
+1240 363 mt 1265 355 L
+1265 355 mt 1275 352 L
+1275 352 mt 1310 343 L
+1310 343 mt 1345 338 L
+1345 338 mt 1380 335 L
+1380 335 mt 1415 333 L
+1415 333 mt 1449 332 L
+1449 332 mt 1484 330 L
+1484 330 mt 1519 329 L
+1519 329 mt 1530 328 L
+1530 328 mt 1554 326 L
+1554 326 mt 1589 323 L
+1589 323 mt 1624 319 L
+1624 319 mt 1659 314 L
+1659 314 mt 1694 309 L
+1694 309 mt 1728 303 L
+1728 303 mt 1741 300 L
+1741 300 mt 1763 297 L
+1763 297 mt 1798 291 L
+1798 291 mt 1833 286 L
+1833 286 mt 1868 282 L
+1868 282 mt 1903 279 L
+1903 279 mt 1938 277 L
+1938 277 mt 1972 277 L
+1972 277 mt 2007 277 L
+2007 277 mt 2042 278 L
+2042 278 mt 2077 279 L
+2077 279 mt 2112 280 L
+2112 280 mt 2147 280 L
+2147 280 mt 2182 279 L
+2182 279 mt 2217 277 L
+2217 277 mt 2251 275 L
+2251 275 mt 2275 273 L
+2275 273 mt 2286 272 L
+2286 272 mt 2321 269 L
+2321 269 mt 2356 266 L
+2356 266 mt 2391 263 L
+2391 263 mt 2426 261 L
+2426 261 mt 2461 259 L
+2461 259 mt 2496 257 L
+2496 257 mt 2530 255 L
+2530 255 mt 2565 253 L
+2565 253 mt 2600 251 L
+2600 251 mt 2635 249 L
+2635 249 mt 2670 245 L
+2670 245 mt 2670 245 L
+2670 245 mt 2705 242 L
+2705 242 mt 2740 239 L
+2740 239 mt 2774 236 L
+2774 236 mt 2809 233 L
+2809 233 mt 2844 231 L
+2844 231 mt 2879 229 L
+2879 229 mt 2914 227 L
+2914 227 mt 2949 226 L
+2949 226 mt 2984 224 L
+2984 224 mt 3019 223 L
+3019 223 mt 3053 221 L
+3053 221 mt 3088 220 L
+3088 220 mt 3115 218 L
+3115 218 mt 3123 217 L
+3123 217 mt 3158 215 L
+3158 215 mt 3193 212 L
+3193 212 mt 3228 208 L
+3228 208 mt 3263 204 L
+3263 204 mt 3298 199 L
+3298 199 mt 3332 194 L
+3332 194 mt 3353 190 L
+3353 190 mt 3367 188 L
+3367 188 mt 3402 183 L
+3402 183 mt 3437 177 L
+3437 177 mt 3472 171 L
+3472 171 mt 3507 165 L
+3507 165 mt 3520 163 L
+3520 163 mt 3542 159 L
+3542 159 mt 3577 153 L
+3577 153 mt 3611 147 L
+3611 147 mt 3646 141 L
+3646 141 mt 3680 135 L
+3680 135 mt 3681 135 L
+3681 135 mt 3716 129 L
+3716 129 mt 3751 123 L
+3751 123 mt 3786 117 L
+3786 117 mt 3821 112 L
+3821 112 mt 3842 108 L
+3842 108 mt 3855 106 L
+3855 106 mt 3890 100 L
+3890 100 mt 3925 94 L
+3925 94 mt 3960 88 L
+3960 88 mt 3995 83 L
+3995 83 mt 4011 80 L
+4011 80 mt 4030 77 L
+4030 77 mt 4065 72 L
+4065 72 mt 4100 67 L
+4100 67 mt 4134 62 L
+4134 62 mt 4169 57 L
+4169 57 mt 4199 53 L
+4199 53 mt 4204 52 L
+4204 52 mt 4239 48 L
+4239 48 mt 4274 44 L
+4274 44 mt 4309 40 L
+4309 40 mt 4344 37 L
+4344 37 mt 4379 34 L
+4379 34 mt 4413 32 L
+4413 32 mt 4448 30 L
+4448 30 mt 4483 29 L
+4483 29 mt 4518 28 L
+4518 28 mt 4553 28 L
+4553 28 mt 4588 28 L
+4588 28 mt 4623 29 L
+4623 29 mt 4657 29 L
+4657 29 mt 4692 31 L
+4692 31 mt 4727 33 L
+4727 33 mt 4762 35 L
+4762 35 mt 4797 38 L
+4797 38 mt 4832 41 L
+4832 41 mt 4867 45 L
+4867 45 mt 4902 50 L
+4902 50 mt 4920 53 L
+4920 53 mt 4936 55 L
+4936 55 mt 4971 61 L
+4971 61 mt 5006 68 L
+5006 68 mt 5041 76 L
+5041 76 mt 5060 80 L
+5060 80 mt 5076 84 L
+5076 84 mt 5111 93 L
+5111 93 mt 5146 103 L
+5146 103 mt 5161 108 L
+5161 108 mt 5181 114 L
+5181 114 mt 5215 126 L
+5215 126 mt 5239 135 L
+5239 135 mt 5250 140 L
+5250 140 mt 5285 154 L
+5285 154 mt 5303 163 L
+5303 163 mt 5320 171 L
+5320 171 mt 5355 189 L
+5355 189 mt 5358 190 L
+5358 190 mt 5390 208 L
+5390 208 mt 5405 218 L
+5405 218 mt 5425 230 L
+5425 230 mt 5449 245 L
+5449 245 mt 5459 253 L
+5459 253 mt 5488 273 L
+5488 273 mt 5494 277 L
+5494 277 mt 5525 300 L
+5525 300 mt 5529 304 L
+5529 304 mt 5560 328 L
+5560 328 mt 5564 332 L
+5564 332 mt 5593 355 L
+5593 355 mt 5599 361 L
+5599 361 mt 5625 383 L
+5625 383 mt 5634 391 L
+5634 391 mt 5656 411 L
+5656 411 mt 5669 423 L
+5669 423 mt 5686 438 L
+5686 438 mt 5704 455 L
+5704 455 mt 5715 466 L
+5715 466 mt 5738 488 L
+5738 488 mt 5743 493 L
+5743 493 mt 5771 521 L
+5771 521 mt 5773 523 L
+5773 523 mt 5799 548 L
+5799 548 mt 5808 558 L
+5808 558 mt 5825 576 L
+5825 576 mt 5843 594 L
+5843 594 mt 5852 603 L
+5852 603 mt 5878 630 L
+5878 630 mt 5878 631 L
+5878 631 mt 5904 658 L
+5904 658 mt 5913 667 L
+5913 667 mt 5930 686 L
+5930 686 mt 5948 705 L
+5948 705 mt 5956 713 L
+5956 713 mt 5981 741 L
+5981 741 mt 5983 742 L
+5983 742 mt 6007 768 L
+6007 768 mt 6017 780 L
+6017 780 mt 6032 796 L
+6032 796 mt 6052 818 L
+6052 818 mt 6058 823 L
+6058 823 mt 6083 851 L
+6083 851 mt 6087 855 L
+6087 855 mt 6108 878 L
+6108 878 mt 6122 893 L
+6122 893 mt 6134 906 L
+6134 906 mt 6157 931 L
+6157 931 mt 6159 933 L
+6159 933 mt 6184 961 L
+6184 961 mt 6192 969 L
+6192 969 mt 6209 988 L
+6209 988 mt 6227 1007 L
+6227 1007 mt 6235 1016 L
+6235 1016 mt 6260 1043 L
+6260 1043 mt 6261 1045 L
+6261 1045 mt 6285 1071 L
+6285 1071 mt 6296 1083 L
+6296 1083 mt 6310 1098 L
+6310 1098 mt 6331 1121 L
+6331 1121 mt 6336 1126 L
+6336 1126 mt 6361 1153 L
+6361 1153 mt 6366 1159 L
+6366 1159 mt 6385 1181 L
+6385 1181 mt 6401 1198 L
+6401 1198 mt 6410 1208 L
+6410 1208 mt 6434 1236 L
+6434 1236 mt 6436 1238 L
+6436 1238 mt 6458 1263 L
+6458 1263 mt 6471 1279 L
+6471 1279 mt 6481 1291 L
+6481 1291 mt 6503 1318 L
+6503 1318 mt 6506 1321 L
+6506 1321 mt 6525 1346 L
+6525 1346 mt 6540 1367 L
+6540 1367 mt 6546 1373 L
+6546 1373 mt 6566 1401 L
+6566 1401 mt 6575 1415 L
+6575 1415 mt 6585 1428 L
+6585 1428 mt 6603 1456 L
+6603 1456 mt 6610 1468 L
+6610 1468 mt 6620 1484 L
+6620 1484 mt 6636 1511 L
+6636 1511 mt 6645 1528 L
+6645 1528 mt 6651 1539 L
+6651 1539 mt 6665 1566 L
+6665 1566 mt 6678 1594 L
+6678 1594 mt 6680 1599 L
+6680 1599 mt 6690 1621 L
+6690 1621 mt 6701 1649 L
+6701 1649 mt 6711 1676 L
+6711 1676 mt 6715 1688 L
+6715 1688 mt 6720 1704 L
+6720 1704 mt 6728 1731 L
+6728 1731 mt 6736 1759 L
+6736 1759 mt 6742 1786 L
+6742 1786 mt 6748 1814 L
+6748 1814 mt 6750 1822 L
+1589 4112 mt 1597 4097 L
+1597 4097 mt 1619 4070 L
+1619 4070 mt 1624 4065 L
+1624 4065 mt 1652 4042 L
+1652 4042 mt 1659 4037 L
+1659 4037 mt 1694 4017 L
+1694 4017 mt 1697 4015 L
+1697 4015 mt 1728 3999 L
+1728 3999 mt 1754 3987 L
+1754 3987 mt 1763 3983 L
+1763 3983 mt 1798 3966 L
+1798 3966 mt 1813 3960 L
+1813 3960 mt 1833 3950 L
+1833 3950 mt 1868 3935 L
+1868 3935 mt 1878 3932 L
+1878 3932 mt 1903 3923 L
+1903 3923 mt 1938 3915 L
+1938 3915 mt 1972 3914 L
+1972 3914 mt 2006 3932 L
+2006 3932 mt 2007 3934 L
+2007 3934 mt 2016 3960 L
+2016 3960 mt 2016 3987 L
+2016 3987 mt 2013 4015 L
+2013 4015 mt 2013 4042 L
+2013 4042 mt 2016 4070 L
+2016 4070 mt 2021 4097 L
+2021 4097 mt 2030 4125 L
+2030 4125 mt 2042 4152 L
+2042 4152 mt 2042 4153 L
+2042 4153 mt 2058 4180 L
+2058 4180 mt 2077 4207 L
+2077 4207 mt 2077 4208 L
+2077 4208 mt 2099 4235 L
+2099 4235 mt 2112 4251 L
+2112 4251 mt 2122 4262 L
+2122 4262 mt 2146 4290 L
+2146 4290 mt 2147 4291 L
+2147 4291 mt 2171 4317 L
+2171 4317 mt 2182 4329 L
+2182 4329 mt 2198 4345 L
+2198 4345 mt 2217 4363 L
+2217 4363 mt 2228 4372 L
+2228 4372 mt 2251 4388 L
+2251 4388 mt 2269 4400 L
+2269 4400 mt 2286 4409 L
+2286 4409 mt 2321 4427 L
+2321 4427 mt 2323 4427 L
+2323 4427 mt 2356 4442 L
+2356 4442 mt 2388 4455 L
+2388 4455 mt 2391 4456 L
+2391 4456 mt 2426 4469 L
+2426 4469 mt 2457 4482 L
+2457 4482 mt 2461 4484 L
+2461 4484 mt 2496 4500 L
+2496 4500 mt 2514 4510 L
+2514 4510 mt 2530 4519 L
+2530 4519 mt 2565 4537 L
+2565 4537 mt 2565 4537 L
+2565 4537 mt 2600 4557 L
+2600 4557 mt 2615 4565 L
+2615 4565 mt 2635 4580 L
+2635 4580 mt 2653 4592 L
+2653 4592 mt 2657 4620 L
+2657 4620 mt 2635 4643 L
+2635 4643 mt 2630 4648 L
+2630 4648 mt 2600 4664 L
+2600 4664 mt 2579 4675 L
+2579 4675 mt 2565 4681 L
+2565 4681 mt 2530 4694 L
+2530 4694 mt 2508 4703 L
+2508 4703 mt 2496 4707 L
+2496 4707 mt 2461 4717 L
+2461 4717 mt 2426 4727 L
+2426 4727 mt 2412 4730 L
+2412 4730 mt 2391 4735 L
+2391 4735 mt 2356 4741 L
+2356 4741 mt 2321 4747 L
+2321 4747 mt 2286 4751 L
+2286 4751 mt 2251 4754 L
+2251 4754 mt 2217 4756 L
+2217 4756 mt 2182 4757 L
+2182 4757 mt 2147 4756 L
+2147 4756 mt 2112 4754 L
+2112 4754 mt 2077 4751 L
+2077 4751 mt 2042 4746 L
+2042 4746 mt 2007 4741 L
+2007 4741 mt 1972 4733 L
+1972 4733 mt 1959 4730 L
+1959 4730 mt 1938 4725 L
+1938 4725 mt 1903 4715 L
+1903 4715 mt 1868 4703 L
+1868 4703 mt 1866 4703 L
+1866 4703 mt 1833 4689 L
+1833 4689 mt 1802 4675 L
+1802 4675 mt 1798 4673 L
+1798 4673 mt 1763 4653 L
+1763 4653 mt 1755 4648 L
+1755 4648 mt 1728 4627 L
+1728 4627 mt 1721 4620 L
+1721 4620 mt 1701 4592 L
+1701 4592 mt 1694 4576 L
+1694 4576 mt 1688 4565 L
+1688 4565 mt 1679 4537 L
+1679 4537 mt 1672 4510 L
+1672 4510 mt 1671 4482 L
+1671 4482 mt 1674 4455 L
+1674 4455 mt 1680 4427 L
+1680 4427 mt 1691 4400 L
+1691 4400 mt 1694 4392 L
+1694 4392 mt 1703 4372 L
+1703 4372 mt 1705 4345 L
+1705 4345 mt 1694 4320 L
+1694 4320 mt 1693 4317 L
+1693 4317 mt 1671 4290 L
+1671 4290 mt 1659 4279 L
+1659 4279 mt 1641 4262 L
+1641 4262 mt 1624 4247 L
+1624 4247 mt 1612 4235 L
+1612 4235 mt 1591 4207 L
+1591 4207 mt 1589 4203 L
+1589 4203 mt 1582 4180 L
+1582 4180 mt 1580 4152 L
+1580 4152 mt 1584 4125 L
+1584 4125 mt 1589 4112 L
+6715 1896 mt 6715 1896 L
+6715 1896 mt 6717 1924 L
+6717 1924 mt 6720 1951 L
+6720 1951 mt 6721 1979 L
+6721 1979 mt 6722 2006 L
+6722 2006 mt 6722 2034 L
+6722 2034 mt 6721 2061 L
+6721 2061 mt 6719 2089 L
+6719 2089 mt 6717 2116 L
+6717 2116 mt 6715 2138 L
+6715 2138 mt 6714 2144 L
+6714 2144 mt 6711 2171 L
+6711 2171 mt 6706 2199 L
+6706 2199 mt 6701 2226 L
+6701 2226 mt 6695 2254 L
+6695 2254 mt 6689 2281 L
+6689 2281 mt 6681 2309 L
+6681 2309 mt 6680 2314 L
+6680 2314 mt 6674 2336 L
+6674 2336 mt 6665 2364 L
+6665 2364 mt 6656 2391 L
+6656 2391 mt 6646 2419 L
+6646 2419 mt 6645 2421 L
+6645 2421 mt 6635 2446 L
+6635 2446 mt 6623 2474 L
+6623 2474 mt 6611 2502 L
+6611 2502 mt 6610 2503 L
+6610 2503 mt 6597 2529 L
+6597 2529 mt 6582 2557 L
+6582 2557 mt 6575 2569 L
+6575 2569 mt 6567 2584 L
+6567 2584 mt 6550 2612 L
+6550 2612 mt 6540 2626 L
+6540 2626 mt 6531 2639 L
+6531 2639 mt 6511 2667 L
+6511 2667 mt 6506 2674 L
+6506 2674 mt 6490 2694 L
+6490 2694 mt 6471 2717 L
+6471 2717 mt 6467 2722 L
+6467 2722 mt 6442 2749 L
+6442 2749 mt 6436 2756 L
+6436 2756 mt 6416 2777 L
+6416 2777 mt 6401 2793 L
+6401 2793 mt 6389 2804 L
+6389 2804 mt 6366 2828 L
+6366 2828 mt 6362 2832 L
+6362 2832 mt 6335 2859 L
+6335 2859 mt 6331 2863 L
+6331 2863 mt 6306 2887 L
+6306 2887 mt 6296 2897 L
+6296 2897 mt 6274 2914 L
+6274 2914 mt 6261 2926 L
+6261 2926 mt 6236 2942 L
+6236 2942 mt 6227 2950 L
+6227 2950 mt 6195 2969 L
+6195 2969 mt 6192 2973 L
+6192 2973 mt 6157 2990 L
+6157 2990 mt 6122 2981 L
+6122 2981 mt 6101 2969 L
+6101 2969 mt 6087 2967 L
+6087 2967 mt 6052 2964 L
+6052 2964 mt 6017 2966 L
+6017 2966 mt 6009 2969 L
+6009 2969 mt 5983 2987 L
+5983 2987 mt 5968 2997 L
+5968 2997 mt 5948 3013 L
+5948 3013 mt 5920 3024 L
+5920 3024 mt 5913 3028 L
+5913 3028 mt 5878 3030 L
+5878 3030 mt 5858 3024 L
+5858 3024 mt 5843 3021 L
+5843 3021 mt 5808 3003 L
+5808 3003 mt 5801 2997 L
+5801 2997 mt 5773 2979 L
+5773 2979 mt 5762 2969 L
+5762 2969 mt 5738 2955 L
+5738 2955 mt 5719 2942 L
+5719 2942 mt 5704 2933 L
+5704 2933 mt 5672 2914 L
+5672 2914 mt 5669 2912 L
+5669 2912 mt 5634 2888 L
+5634 2888 mt 5632 2887 L
+5632 2887 mt 5601 2859 L
+5601 2859 mt 5599 2857 L
+5599 2857 mt 5573 2832 L
+5573 2832 mt 5564 2823 L
+5564 2823 mt 5544 2804 L
+5544 2804 mt 5529 2789 L
+5529 2789 mt 5517 2777 L
+5517 2777 mt 5497 2749 L
+5497 2749 mt 5494 2744 L
+5494 2744 mt 5483 2722 L
+5483 2722 mt 5475 2694 L
+5475 2694 mt 5471 2667 L
+5471 2667 mt 5473 2639 L
+5473 2639 mt 5478 2612 L
+5478 2612 mt 5486 2584 L
+5486 2584 mt 5494 2563 L
+5494 2563 mt 5497 2557 L
+5497 2557 mt 5506 2529 L
+5506 2529 mt 5514 2502 L
+5514 2502 mt 5518 2474 L
+5518 2474 mt 5519 2446 L
+5519 2446 mt 5519 2419 L
+5519 2419 mt 5519 2391 L
+5519 2391 mt 5520 2364 L
+5520 2364 mt 5520 2336 L
+5520 2336 mt 5520 2309 L
+5520 2309 mt 5518 2281 L
+5518 2281 mt 5511 2254 L
+5511 2254 mt 5501 2226 L
+5501 2226 mt 5494 2209 L
+5494 2209 mt 5489 2199 L
+5489 2199 mt 5476 2171 L
+5476 2171 mt 5465 2144 L
+5465 2144 mt 5459 2129 L
+5459 2129 mt 5454 2116 L
+5454 2116 mt 5444 2089 L
+5444 2089 mt 5434 2061 L
+5434 2061 mt 5425 2035 L
+5425 2035 mt 5424 2034 L
+5424 2034 mt 5409 2006 L
+5409 2006 mt 5393 1979 L
+5393 1979 mt 5390 1974 L
+5390 1974 mt 5373 1951 L
+5373 1951 mt 5355 1930 L
+5355 1930 mt 5350 1924 L
+5350 1924 mt 5320 1896 L
+5320 1896 mt 5320 1896 L
+5320 1896 mt 5285 1872 L
+5285 1872 mt 5279 1869 L
+5279 1869 mt 5250 1852 L
+5250 1852 mt 5227 1841 L
+5227 1841 mt 5215 1836 L
+5215 1836 mt 5181 1827 L
+5181 1827 mt 5146 1823 L
+5146 1823 mt 5111 1823 L
+5111 1823 mt 5076 1826 L
+5076 1826 mt 5041 1832 L
+5041 1832 mt 5006 1839 L
+5006 1839 mt 4995 1841 L
+4995 1841 mt 4971 1847 L
+4971 1847 mt 4936 1855 L
+4936 1855 mt 4902 1858 L
+4902 1858 mt 4867 1851 L
+4867 1851 mt 4850 1841 L
+4850 1841 mt 4832 1823 L
+4832 1823 mt 4827 1814 L
+4827 1814 mt 4823 1786 L
+4823 1786 mt 4827 1759 L
+4827 1759 mt 4832 1742 L
+4832 1742 mt 4835 1731 L
+4835 1731 mt 4844 1704 L
+4844 1704 mt 4854 1676 L
+4854 1676 mt 4861 1649 L
+4861 1649 mt 4862 1621 L
+4862 1621 mt 4853 1594 L
+4853 1594 mt 4832 1573 L
+4832 1573 mt 4819 1566 L
+4819 1566 mt 4797 1559 L
+4797 1559 mt 4762 1554 L
+4762 1554 mt 4727 1554 L
+4727 1554 mt 4692 1553 L
+4692 1553 mt 4657 1553 L
+4657 1553 mt 4623 1550 L
+4623 1550 mt 4588 1545 L
+4588 1545 mt 4567 1539 L
+4567 1539 mt 4553 1533 L
+4553 1533 mt 4519 1511 L
+4519 1511 mt 4518 1510 L
+4518 1510 mt 4497 1484 L
+4497 1484 mt 4483 1457 L
+4483 1457 mt 4483 1456 L
+4483 1456 mt 4470 1428 L
+4470 1428 mt 4455 1401 L
+4455 1401 mt 4448 1390 L
+4448 1390 mt 4435 1373 L
+4435 1373 mt 4413 1354 L
+4413 1354 mt 4401 1346 L
+4401 1346 mt 4379 1332 L
+4379 1332 mt 4350 1318 L
+4350 1318 mt 4344 1315 L
+4344 1315 mt 4309 1299 L
+4309 1299 mt 4287 1291 L
+4287 1291 mt 4274 1284 L
+4274 1284 mt 4239 1267 L
+4239 1267 mt 4233 1263 L
+4233 1263 mt 4204 1241 L
+4204 1241 mt 4200 1236 L
+4200 1236 mt 4184 1208 L
+4184 1208 mt 4169 1183 L
+4169 1183 mt 4168 1181 L
+4168 1181 mt 4146 1153 L
+4146 1153 mt 4134 1142 L
+4134 1142 mt 4117 1126 L
+4117 1126 mt 4100 1113 L
+4100 1113 mt 4080 1098 L
+4080 1098 mt 4065 1089 L
+4065 1089 mt 4032 1071 L
+4032 1071 mt 4030 1070 L
+4030 1070 mt 3995 1054 L
+3995 1054 mt 3968 1043 L
+3968 1043 mt 3960 1041 L
+3960 1041 mt 3925 1030 L
+3925 1030 mt 3890 1021 L
+3890 1021 mt 3871 1016 L
+3871 1016 mt 3855 1012 L
+3855 1012 mt 3821 1002 L
+3821 1002 mt 3786 992 L
+3786 992 mt 3774 988 L
+3774 988 mt 3751 980 L
+3751 980 mt 3716 966 L
+3716 966 mt 3704 961 L
+3704 961 mt 3681 949 L
+3681 949 mt 3652 933 L
+3652 933 mt 3646 930 L
+3646 930 mt 3611 906 L
+3611 906 mt 3611 906 L
+3611 906 mt 3577 878 L
+3577 878 mt 3577 878 L
+3577 878 mt 3548 851 L
+3548 851 mt 3542 844 L
+3542 844 mt 3523 823 L
+3523 823 mt 3507 801 L
+3507 801 mt 3503 796 L
+3503 796 mt 3484 768 L
+3484 768 mt 3472 754 L
+3472 754 mt 3460 741 L
+3460 741 mt 3437 718 L
+3437 718 mt 3433 713 L
+3433 713 mt 3402 688 L
+3402 688 mt 3399 686 L
+3399 686 mt 3367 663 L
+3367 663 mt 3360 658 L
+3360 658 mt 3332 643 L
+3332 643 mt 3310 631 L
+3310 631 mt 3298 625 L
+3298 625 mt 3263 611 L
+3263 611 mt 3240 603 L
+3240 603 mt 3228 599 L
+3228 599 mt 3193 589 L
+3193 589 mt 3158 581 L
+3158 581 mt 3137 576 L
+3137 576 mt 3123 573 L
+3123 573 mt 3088 567 L
+3088 567 mt 3053 562 L
+3053 562 mt 3019 559 L
+3019 559 mt 2984 557 L
+2984 557 mt 2949 557 L
+2949 557 mt 2914 558 L
+2914 558 mt 2879 561 L
+2879 561 mt 2844 565 L
+2844 565 mt 2809 570 L
+2809 570 mt 2775 576 L
+2775 576 mt 2774 576 L
+2774 576 mt 2740 583 L
+2740 583 mt 2705 590 L
+2705 590 mt 2670 598 L
+2670 598 mt 2638 603 L
+2638 603 mt 2635 604 L
+2635 604 mt 2600 607 L
+2600 607 mt 2565 608 L
+2565 608 mt 2530 607 L
+2530 607 mt 2496 607 L
+2496 607 mt 2461 610 L
+2461 610 mt 2426 614 L
+2426 614 mt 2391 620 L
+2391 620 mt 2356 626 L
+2356 626 mt 2327 631 L
+2327 631 mt 2321 632 L
+2321 632 mt 2286 638 L
+2286 638 mt 2251 643 L
+2251 643 mt 2217 647 L
+2217 647 mt 2182 650 L
+2182 650 mt 2147 651 L
+2147 651 mt 2112 652 L
+2112 652 mt 2077 652 L
+2077 652 mt 2042 653 L
+2042 653 mt 2007 656 L
+2007 656 mt 1994 658 L
+1994 658 mt 1972 661 L
+1972 661 mt 1938 669 L
+1938 669 mt 1903 678 L
+1903 678 mt 1879 686 L
+1879 686 mt 1868 689 L
+1868 689 mt 1833 699 L
+1833 699 mt 1798 708 L
+1798 708 mt 1777 713 L
+1777 713 mt 1763 717 L
+1763 717 mt 1728 724 L
+1728 724 mt 1694 730 L
+1694 730 mt 1659 737 L
+1659 737 mt 1644 741 L
+1644 741 mt 1624 748 L
+1624 748 mt 1589 767 L
+1589 767 mt 1587 768 L
+1587 768 mt 1560 796 L
+1560 796 mt 1554 806 L
+1554 806 mt 1544 823 L
+1544 823 mt 1532 851 L
+1532 851 mt 1521 878 L
+1521 878 mt 1519 883 L
+1519 883 mt 1510 906 L
+1510 906 mt 1496 933 L
+1496 933 mt 1484 949 L
+1484 949 mt 1476 961 L
+1476 961 mt 1449 987 L
+1449 987 mt 1448 988 L
+1448 988 mt 1415 1016 L
+1415 1016 mt 1415 1016 L
+1415 1016 mt 1380 1043 L
+1380 1043 mt 1379 1043 L
+1379 1043 mt 1346 1071 L
+1346 1071 mt 1345 1073 L
+1345 1073 mt 1327 1098 L
+1327 1098 mt 1318 1126 L
+1318 1126 mt 1315 1153 L
+1315 1153 mt 1316 1181 L
+1316 1181 mt 1318 1208 L
+1318 1208 mt 1320 1236 L
+1320 1236 mt 1323 1263 L
+1323 1263 mt 1327 1291 L
+1327 1291 mt 1330 1318 L
+1330 1318 mt 1328 1346 L
+1328 1346 mt 1311 1373 L
+1311 1373 mt 1310 1374 L
+1310 1374 mt 1275 1395 L
+1275 1395 mt 1260 1401 L
+1260 1401 mt 1240 1408 L
+1240 1408 mt 1205 1422 L
+1205 1422 mt 1191 1428 L
+1191 1428 mt 1170 1439 L
+1170 1439 mt 1145 1456 L
+1145 1456 mt 1136 1463 L
+1136 1463 mt 1116 1484 L
+1116 1484 mt 1101 1504 L
+1101 1504 mt 1097 1511 L
+1097 1511 mt 1085 1539 L
+1085 1539 mt 1079 1566 L
+1079 1566 mt 1077 1594 L
+1077 1594 mt 1077 1621 L
+1077 1621 mt 1080 1649 L
+1080 1649 mt 1084 1676 L
+1084 1676 mt 1090 1704 L
+1090 1704 mt 1097 1731 L
+1097 1731 mt 1101 1745 L
+1101 1745 mt 1105 1759 L
+1105 1759 mt 1115 1786 L
+1115 1786 mt 1126 1814 L
+1126 1814 mt 1136 1836 L
+1136 1836 mt 1138 1841 L
+1138 1841 mt 1152 1869 L
+1152 1869 mt 1168 1896 L
+1168 1896 mt 1170 1900 L
+1170 1900 mt 1186 1924 L
+1186 1924 mt 1205 1951 L
+1205 1951 mt 1205 1952 L
+1205 1952 mt 1225 1979 L
+1225 1979 mt 1240 2002 L
+1240 2002 mt 1243 2006 L
+1243 2006 mt 1260 2034 L
+1260 2034 mt 1275 2060 L
+1275 2060 mt 1276 2061 L
+1276 2061 mt 1291 2089 L
+1291 2089 mt 1309 2116 L
+1309 2116 mt 1310 2118 L
+1310 2118 mt 1328 2144 L
+1328 2144 mt 1345 2165 L
+1345 2165 mt 1349 2171 L
+1349 2171 mt 1369 2199 L
+1369 2199 mt 1380 2211 L
+1380 2211 mt 1389 2226 L
+1389 2226 mt 1409 2254 L
+1409 2254 mt 1415 2259 L
+1415 2259 mt 1435 2281 L
+1435 2281 mt 1449 2293 L
+1449 2293 mt 1471 2309 L
+1471 2309 mt 1484 2318 L
+1484 2318 mt 1513 2336 L
+1513 2336 mt 1519 2341 L
+1519 2341 mt 1554 2362 L
+1554 2362 mt 1557 2364 L
+1557 2364 mt 1589 2384 L
+1589 2384 mt 1603 2391 L
+1603 2391 mt 1624 2406 L
+1624 2406 mt 1644 2419 L
+1644 2419 mt 1659 2432 L
+1659 2432 mt 1675 2446 L
+1675 2446 mt 1691 2474 L
+1691 2474 mt 1688 2502 L
+1688 2502 mt 1678 2529 L
+1678 2529 mt 1668 2557 L
+1668 2557 mt 1659 2581 L
+1659 2581 mt 1657 2584 L
+1657 2584 mt 1648 2612 L
+1648 2612 mt 1642 2639 L
+1642 2639 mt 1642 2667 L
+1642 2667 mt 1651 2694 L
+1651 2694 mt 1659 2705 L
+1659 2705 mt 1673 2722 L
+1673 2722 mt 1694 2739 L
+1694 2739 mt 1711 2749 L
+1711 2749 mt 1728 2759 L
+1728 2759 mt 1763 2775 L
+1763 2775 mt 1768 2777 L
+1768 2777 mt 1798 2790 L
+1798 2790 mt 1828 2804 L
+1828 2804 mt 1833 2807 L
+1833 2807 mt 1868 2827 L
+1868 2827 mt 1876 2832 L
+1876 2832 mt 1903 2854 L
+1903 2854 mt 1908 2859 L
+1908 2859 mt 1924 2887 L
+1924 2887 mt 1930 2914 L
+1930 2914 mt 1932 2942 L
+1932 2942 mt 1935 2969 L
+1935 2969 mt 1938 2981 L
+1938 2981 mt 1940 2997 L
+1940 2997 mt 1946 3024 L
+1946 3024 mt 1952 3052 L
+1952 3052 mt 1960 3079 L
+1960 3079 mt 1972 3107 L
+1972 3107 mt 1972 3108 L
+1972 3108 mt 1987 3134 L
+1987 3134 mt 2005 3162 L
+2005 3162 mt 2007 3164 L
+2007 3164 mt 2029 3189 L
+2029 3189 mt 2042 3202 L
+2042 3202 mt 2057 3217 L
+2057 3217 mt 2077 3235 L
+2077 3235 mt 2087 3244 L
+2087 3244 mt 2112 3267 L
+2112 3267 mt 2118 3272 L
+2118 3272 mt 2147 3296 L
+2147 3296 mt 2151 3299 L
+2151 3299 mt 2182 3322 L
+2182 3322 mt 2188 3327 L
+2188 3327 mt 2217 3347 L
+2217 3347 mt 2226 3354 L
+2226 3354 mt 2251 3375 L
+2251 3375 mt 2260 3382 L
+2260 3382 mt 2286 3404 L
+2286 3404 mt 2292 3409 L
+2292 3409 mt 2321 3434 L
+2321 3434 mt 2325 3437 L
+2325 3437 mt 2356 3464 L
+2356 3464 mt 2357 3464 L
+2357 3464 mt 2385 3492 L
+2385 3492 mt 2391 3499 L
+2391 3499 mt 2407 3519 L
+2407 3519 mt 2424 3547 L
+2424 3547 mt 2426 3550 L
+2426 3550 mt 2436 3575 L
+2436 3575 mt 2443 3602 L
+2443 3602 mt 2445 3630 L
+2445 3630 mt 2437 3657 L
+2437 3657 mt 2426 3670 L
+2426 3670 mt 2414 3685 L
+2414 3685 mt 2391 3701 L
+2391 3701 mt 2374 3712 L
+2374 3712 mt 2356 3722 L
+2356 3722 mt 2323 3740 L
+2323 3740 mt 2321 3740 L
+2321 3740 mt 2286 3758 L
+2286 3758 mt 2265 3767 L
+2265 3767 mt 2251 3773 L
+2251 3773 mt 2217 3787 L
+2217 3787 mt 2186 3795 L
+2186 3795 mt 2182 3796 L
+2182 3796 mt 2147 3799 L
+2147 3799 mt 2124 3795 L
+2124 3795 mt 2112 3792 L
+2112 3792 mt 2077 3775 L
+2077 3775 mt 2067 3767 L
+2067 3767 mt 2042 3747 L
+2042 3747 mt 2034 3740 L
+2034 3740 mt 2011 3712 L
+2011 3712 mt 2007 3705 L
+2007 3705 mt 1996 3685 L
+1996 3685 mt 1986 3657 L
+1986 3657 mt 1978 3630 L
+1978 3630 mt 1972 3607 L
+1972 3607 mt 1971 3602 L
+1971 3602 mt 1963 3575 L
+1963 3575 mt 1953 3547 L
+1953 3547 mt 1942 3519 L
+1942 3519 mt 1938 3510 L
+1938 3510 mt 1929 3492 L
+1929 3492 mt 1914 3464 L
+1914 3464 mt 1903 3443 L
+1903 3443 mt 1899 3437 L
+1899 3437 mt 1883 3409 L
+1883 3409 mt 1868 3386 L
+1868 3386 mt 1865 3382 L
+1865 3382 mt 1847 3354 L
+1847 3354 mt 1833 3333 L
+1833 3333 mt 1829 3327 L
+1829 3327 mt 1810 3299 L
+1810 3299 mt 1798 3285 L
+1798 3285 mt 1786 3272 L
+1786 3272 mt 1763 3252 L
+1763 3252 mt 1754 3244 L
+1754 3244 mt 1728 3226 L
+1728 3226 mt 1715 3217 L
+1715 3217 mt 1694 3204 L
+1694 3204 mt 1667 3189 L
+1667 3189 mt 1659 3185 L
+1659 3185 mt 1624 3171 L
+1624 3171 mt 1598 3162 L
+1598 3162 mt 1589 3159 L
+1589 3159 mt 1554 3149 L
+1554 3149 mt 1519 3139 L
+1519 3139 mt 1503 3134 L
+1503 3134 mt 1484 3129 L
+1484 3129 mt 1449 3119 L
+1449 3119 mt 1415 3111 L
+1415 3111 mt 1396 3107 L
+1396 3107 mt 1380 3103 L
+1380 3103 mt 1345 3095 L
+1345 3095 mt 1310 3088 L
+1310 3088 mt 1275 3082 L
+1275 3082 mt 1258 3079 L
+1258 3079 mt 1240 3077 L
+1240 3077 mt 1205 3068 L
+1205 3068 mt 1170 3054 L
+1170 3054 mt 1165 3052 L
+1165 3052 mt 1136 3038 L
+1136 3038 mt 1109 3024 L
+1109 3024 mt 1101 3020 L
+1101 3020 mt 1066 3001 L
+1066 3001 mt 1059 2997 L
+1059 2997 mt 1031 2982 L
+1031 2982 mt 1004 2969 L
+1004 2969 mt 996 2965 L
+ 996 2965 mt 961 2949 L
+ 961 2949 mt 947 2942 L
+ 947 2942 mt 926 2932 L
+ 926 2932 mt 892 2914 L
+ 892 2914 mt 892 2914 L
+ 892 2914 mt 857 2893 L
+ 857 2893 mt 847 2887 L
+ 847 2887 mt 822 2869 L
+ 822 2869 mt 809 2859 L
+ 809 2859 mt 787 2839 L
+ 787 2839 mt 779 2832 L
+ 779 2832 mt 753 2804 L
+ 753 2804 mt 752 2803 L
+ 752 2803 mt 730 2777 L
+ 730 2777 mt 717 2758 L
+ 717 2758 mt 711 2749 L
+ 711 2749 mt 694 2722 L
+ 694 2722 mt 682 2698 L
+ 682 2698 mt 680 2694 L
+ 680 2694 mt 667 2667 L
+ 667 2667 mt 657 2639 L
+ 657 2639 mt 648 2612 L
+ 648 2612 mt 647 2609 L
+ 647 2609 mt 640 2584 L
+ 640 2584 mt 634 2557 L
+ 634 2557 mt 629 2529 L
+ 629 2529 mt 626 2502 L
+ 626 2502 mt 624 2474 L
+ 624 2474 mt 623 2446 L
+ 623 2446 mt 623 2419 L
+ 623 2419 mt 624 2391 L
+ 624 2391 mt 627 2364 L
+ 627 2364 mt 630 2336 L
+ 630 2336 mt 635 2309 L
+ 635 2309 mt 641 2281 L
+ 641 2281 mt 647 2258 L
+ 647 2258 mt 648 2254 L
+ 648 2254 mt 657 2226 L
+ 657 2226 mt 667 2199 L
+ 667 2199 mt 677 2171 L
+ 677 2171 mt 682 2159 L
+ 682 2159 mt 689 2144 L
+ 689 2144 mt 700 2116 L
+ 700 2116 mt 712 2089 L
+ 712 2089 mt 717 2075 L
+ 717 2075 mt 723 2061 L
+ 723 2061 mt 734 2034 L
+ 734 2034 mt 743 2006 L
+ 743 2006 mt 751 1979 L
+ 751 1979 mt 752 1976 L
+ 752 1976 mt 758 1951 L
+ 758 1951 mt 762 1924 L
+ 762 1924 mt 765 1896 L
+ 765 1896 mt 766 1869 L
+ 766 1869 mt 765 1841 L
+ 765 1841 mt 765 1814 L
+ 765 1814 mt 764 1786 L
+ 764 1786 mt 764 1759 L
+ 764 1759 mt 765 1731 L
+ 765 1731 mt 767 1704 L
+ 767 1704 mt 769 1676 L
+ 769 1676 mt 773 1649 L
+ 773 1649 mt 777 1621 L
+ 777 1621 mt 780 1594 L
+ 780 1594 mt 783 1566 L
+ 783 1566 mt 785 1539 L
+ 785 1539 mt 784 1511 L
+ 784 1511 mt 782 1484 L
+ 782 1484 mt 779 1456 L
+ 779 1456 mt 775 1428 L
+ 775 1428 mt 771 1401 L
+ 771 1401 mt 768 1373 L
+ 768 1373 mt 766 1346 L
+ 766 1346 mt 764 1318 L
+ 764 1318 mt 763 1291 L
+ 763 1291 mt 763 1263 L
+ 763 1263 mt 763 1236 L
+ 763 1236 mt 763 1208 L
+ 763 1208 mt 764 1181 L
+ 764 1181 mt 767 1153 L
+ 767 1153 mt 771 1126 L
+ 771 1126 mt 776 1098 L
+ 776 1098 mt 781 1071 L
+ 781 1071 mt 786 1043 L
+ 786 1043 mt 787 1040 L
+ 787 1040 mt 792 1016 L
+ 792 1016 mt 797 988 L
+ 797 988 mt 801 961 L
+ 801 961 mt 806 933 L
+ 806 933 mt 812 906 L
+ 812 906 mt 819 878 L
+ 819 878 mt 822 870 L
+ 822 870 mt 828 851 L
+ 828 851 mt 840 823 L
+ 840 823 mt 853 796 L
+ 853 796 mt 857 789 L
+ 857 789 mt 868 768 L
+ 868 768 mt 885 741 L
+ 885 741 mt 892 730 L
+ 892 730 mt 903 713 L
+ 903 713 mt 923 686 L
+ 923 686 mt 926 682 L
+ 926 682 mt 945 658 L
+ 945 658 mt 961 635 L
+ 961 635 mt 965 631 L
+ 965 631 mt 984 603 L
+ 984 603 mt 996 585 L
+ 996 585 mt 1002 576 L
+1002 576 mt 1023 548 L
+1023 548 mt 1031 538 L
+1031 538 mt 1046 521 L
+1046 521 mt 1066 500 L
+1066 500 mt 1073 493 L
+1073 493 mt 1101 470 L
+1101 470 mt 1107 466 L
+1107 466 mt 1136 445 L
+1136 445 mt 1147 438 L
+1147 438 mt 1170 424 L
+1170 424 mt 1195 411 L
+1195 411 mt 1205 405 L
+1205 405 mt 1240 390 L
+1240 390 mt 1261 383 L
+1261 383 mt 1275 378 L
+1275 378 mt 1310 370 L
+1310 370 mt 1345 365 L
+1345 365 mt 1380 365 L
+1380 365 mt 1415 366 L
+1415 366 mt 1449 368 L
+1449 368 mt 1484 369 L
+1484 369 mt 1519 370 L
+1519 370 mt 1554 369 L
+1554 369 mt 1589 367 L
+1589 367 mt 1624 363 L
+1624 363 mt 1659 359 L
+1659 359 mt 1677 355 L
+1677 355 mt 1694 353 L
+1694 353 mt 1728 346 L
+1728 346 mt 1763 339 L
+1763 339 mt 1798 332 L
+1798 332 mt 1820 328 L
+1820 328 mt 1833 326 L
+1833 326 mt 1868 321 L
+1868 321 mt 1903 318 L
+1903 318 mt 1938 317 L
+1938 317 mt 1972 319 L
+1972 319 mt 2007 322 L
+2007 322 mt 2042 326 L
+2042 326 mt 2065 328 L
+2065 328 mt 2077 329 L
+2077 329 mt 2112 332 L
+2112 332 mt 2147 334 L
+2147 334 mt 2182 334 L
+2182 334 mt 2217 333 L
+2217 333 mt 2251 330 L
+2251 330 mt 2271 328 L
+2271 328 mt 2286 327 L
+2286 327 mt 2321 323 L
+2321 323 mt 2356 319 L
+2356 319 mt 2391 315 L
+2391 315 mt 2426 312 L
+2426 312 mt 2461 311 L
+2461 311 mt 2496 310 L
+2496 310 mt 2530 310 L
+2530 310 mt 2565 311 L
+2565 311 mt 2600 310 L
+2600 310 mt 2635 308 L
+2635 308 mt 2670 305 L
+2670 305 mt 2699 300 L
+2699 300 mt 2705 300 L
+2705 300 mt 2740 295 L
+2740 295 mt 2774 291 L
+2774 291 mt 2809 288 L
+2809 288 mt 2844 286 L
+2844 286 mt 2879 286 L
+2879 286 mt 2914 285 L
+2914 285 mt 2949 286 L
+2949 286 mt 2984 286 L
+2984 286 mt 3019 286 L
+3019 286 mt 3053 285 L
+3053 285 mt 3088 285 L
+3088 285 mt 3123 283 L
+3123 283 mt 3158 281 L
+3158 281 mt 3193 278 L
+3193 278 mt 3228 274 L
+3228 274 mt 3236 273 L
+3236 273 mt 3263 269 L
+3263 269 mt 3298 263 L
+3298 263 mt 3332 256 L
+3332 256 mt 3367 249 L
+3367 249 mt 3386 245 L
+3386 245 mt 3402 242 L
+3402 242 mt 3437 235 L
+3437 235 mt 3472 229 L
+3472 229 mt 3507 222 L
+3507 222 mt 3531 218 L
+3531 218 mt 3542 216 L
+3542 216 mt 3577 210 L
+3577 210 mt 3611 203 L
+3611 203 mt 3646 197 L
+3646 197 mt 3681 190 L
+3681 190 mt 3681 190 L
+3681 190 mt 3716 184 L
+3716 184 mt 3751 178 L
+3751 178 mt 3786 171 L
+3786 171 mt 3821 165 L
+3821 165 mt 3830 163 L
+3830 163 mt 3855 158 L
+3855 158 mt 3890 152 L
+3890 152 mt 3925 145 L
+3925 145 mt 3960 139 L
+3960 139 mt 3979 135 L
+3979 135 mt 3995 133 L
+3995 133 mt 4030 126 L
+4030 126 mt 4065 120 L
+4065 120 mt 4100 114 L
+4100 114 mt 4134 108 L
+4134 108 mt 4136 108 L
+4136 108 mt 4169 102 L
+4169 102 mt 4204 97 L
+4204 97 mt 4239 92 L
+4239 92 mt 4274 87 L
+4274 87 mt 4309 83 L
+4309 83 mt 4328 80 L
+4328 80 mt 4344 79 L
+4344 79 mt 4379 75 L
+4379 75 mt 4413 72 L
+4413 72 mt 4448 69 L
+4448 69 mt 4483 67 L
+4483 67 mt 4518 66 L
+4518 66 mt 4553 64 L
+4553 64 mt 4588 64 L
+4588 64 mt 4623 63 L
+4623 63 mt 4657 64 L
+4657 64 mt 4692 64 L
+4692 64 mt 4727 65 L
+4727 65 mt 4762 67 L
+4762 67 mt 4797 69 L
+4797 69 mt 4832 72 L
+4832 72 mt 4867 75 L
+4867 75 mt 4902 79 L
+4902 79 mt 4908 80 L
+4908 80 mt 4936 84 L
+4936 84 mt 4971 90 L
+4971 90 mt 5006 96 L
+5006 96 mt 5041 103 L
+5041 103 mt 5062 108 L
+5062 108 mt 5076 111 L
+5076 111 mt 5111 120 L
+5111 120 mt 5146 130 L
+5146 130 mt 5164 135 L
+5164 135 mt 5181 141 L
+5181 141 mt 5215 153 L
+5215 153 mt 5240 163 L
+5240 163 mt 5250 167 L
+5250 167 mt 5285 182 L
+5285 182 mt 5302 190 L
+5302 190 mt 5320 199 L
+5320 199 mt 5355 218 L
+5355 218 mt 5355 218 L
+5355 218 mt 5390 239 L
+5390 239 mt 5401 245 L
+5401 245 mt 5425 261 L
+5425 261 mt 5442 273 L
+5442 273 mt 5459 285 L
+5459 285 mt 5480 300 L
+5480 300 mt 5494 311 L
+5494 311 mt 5516 328 L
+5516 328 mt 5529 339 L
+5529 339 mt 5549 355 L
+5549 355 mt 5564 368 L
+5564 368 mt 5581 383 L
+5581 383 mt 5599 399 L
+5599 399 mt 5612 411 L
+5612 411 mt 5634 430 L
+5634 430 mt 5642 438 L
+5642 438 mt 5669 463 L
+5669 463 mt 5672 466 L
+5672 466 mt 5700 493 L
+5700 493 mt 5704 496 L
+5704 496 mt 5728 521 L
+5728 521 mt 5738 531 L
+5738 531 mt 5755 548 L
+5755 548 mt 5773 567 L
+5773 567 mt 5782 576 L
+5782 576 mt 5808 603 L
+5808 603 mt 5809 603 L
+5809 603 mt 5834 631 L
+5834 631 mt 5843 640 L
+5843 640 mt 5860 658 L
+5860 658 mt 5878 677 L
+5878 677 mt 5886 686 L
+5886 686 mt 5911 713 L
+5911 713 mt 5913 715 L
+5913 715 mt 5936 741 L
+5936 741 mt 5948 753 L
+5948 753 mt 5961 768 L
+5961 768 mt 5983 791 L
+5983 791 mt 5987 796 L
+5987 796 mt 6012 823 L
+6012 823 mt 6017 829 L
+6017 829 mt 6037 851 L
+6037 851 mt 6052 868 L
+6052 868 mt 6062 878 L
+6062 878 mt 6087 906 L
+6087 906 mt 6087 906 L
+6087 906 mt 6112 933 L
+6112 933 mt 6122 944 L
+6122 944 mt 6137 961 L
+6137 961 mt 6157 983 L
+6157 983 mt 6162 988 L
+6162 988 mt 6187 1016 L
+6187 1016 mt 6192 1021 L
+6192 1021 mt 6212 1043 L
+6212 1043 mt 6227 1059 L
+6227 1059 mt 6237 1071 L
+6237 1071 mt 6261 1098 L
+6261 1098 mt 6262 1098 L
+6262 1098 mt 6287 1126 L
+6287 1126 mt 6296 1136 L
+6296 1136 mt 6312 1153 L
+6312 1153 mt 6331 1174 L
+6331 1174 mt 6337 1181 L
+6337 1181 mt 6362 1208 L
+6362 1208 mt 6366 1213 L
+6366 1213 mt 6386 1236 L
+6386 1236 mt 6401 1253 L
+6401 1253 mt 6410 1263 L
+6410 1263 mt 6434 1291 L
+6434 1291 mt 6436 1293 L
+6436 1293 mt 6457 1318 L
+6457 1318 mt 6471 1336 L
+6471 1336 mt 6479 1346 L
+6479 1346 mt 6500 1373 L
+6500 1373 mt 6506 1380 L
+6506 1380 mt 6521 1401 L
+6521 1401 mt 6540 1428 L
+6540 1428 mt 6540 1429 L
+6540 1429 mt 6559 1456 L
+6559 1456 mt 6575 1483 L
+6575 1483 mt 6576 1484 L
+6576 1484 mt 6592 1511 L
+6592 1511 mt 6607 1539 L
+6607 1539 mt 6610 1544 L
+6610 1544 mt 6621 1566 L
+6621 1566 mt 6634 1594 L
+6634 1594 mt 6645 1618 L
+6645 1618 mt 6646 1621 L
+6646 1621 mt 6657 1649 L
+6657 1649 mt 6667 1676 L
+6667 1676 mt 6676 1704 L
+6676 1704 mt 6680 1717 L
+6680 1717 mt 6684 1731 L
+6684 1731 mt 6691 1759 L
+6691 1759 mt 6697 1786 L
+6697 1786 mt 6703 1814 L
+6703 1814 mt 6708 1841 L
+6708 1841 mt 6711 1869 L
+6711 1869 mt 6715 1896 L
+6227 3163 mt 6229 3189 L
+6229 3189 mt 6233 3217 L
+6233 3217 mt 6236 3244 L
+6236 3244 mt 6240 3272 L
+6240 3272 mt 6244 3299 L
+6244 3299 mt 6247 3327 L
+6247 3327 mt 6247 3354 L
+6247 3354 mt 6246 3382 L
+6246 3382 mt 6241 3409 L
+6241 3409 mt 6232 3437 L
+6232 3437 mt 6227 3444 L
+6227 3444 mt 6221 3437 L
+6221 3437 mt 6204 3409 L
+6204 3409 mt 6192 3387 L
+6192 3387 mt 6189 3382 L
+6189 3382 mt 6178 3354 L
+6178 3354 mt 6167 3327 L
+6167 3327 mt 6157 3302 L
+6157 3302 mt 6156 3299 L
+6156 3299 mt 6149 3272 L
+6149 3272 mt 6144 3244 L
+6144 3244 mt 6141 3217 L
+6141 3217 mt 6140 3189 L
+6140 3189 mt 6142 3162 L
+6142 3162 mt 6148 3134 L
+6148 3134 mt 6157 3112 L
+6157 3112 mt 6192 3112 L
+6192 3112 mt 6207 3134 L
+6207 3134 mt 6226 3162 L
+6226 3162 mt 6227 3163 L
+1694 4092 mt 1714 4070 L
+1714 4070 mt 1728 4059 L
+1728 4059 mt 1753 4042 L
+1753 4042 mt 1763 4037 L
+1763 4037 mt 1798 4017 L
+1798 4017 mt 1804 4015 L
+1804 4015 mt 1833 4002 L
+1833 4002 mt 1868 3992 L
+1868 3992 mt 1903 3995 L
+1903 3995 mt 1931 4015 L
+1931 4015 mt 1938 4027 L
+1938 4027 mt 1943 4042 L
+1943 4042 mt 1947 4070 L
+1947 4070 mt 1950 4097 L
+1950 4097 mt 1954 4125 L
+1954 4125 mt 1960 4152 L
+1960 4152 mt 1968 4180 L
+1968 4180 mt 1972 4193 L
+1972 4193 mt 1978 4207 L
+1978 4207 mt 1994 4235 L
+1994 4235 mt 2007 4253 L
+2007 4253 mt 2014 4262 L
+2014 4262 mt 2041 4290 L
+2041 4290 mt 2042 4291 L
+2042 4291 mt 2070 4317 L
+2070 4317 mt 2077 4324 L
+2077 4324 mt 2099 4345 L
+2099 4345 mt 2112 4357 L
+2112 4357 mt 2128 4372 L
+2128 4372 mt 2147 4388 L
+2147 4388 mt 2162 4400 L
+2162 4400 mt 2182 4414 L
+2182 4414 mt 2204 4427 L
+2204 4427 mt 2217 4434 L
+2217 4434 mt 2251 4450 L
+2251 4450 mt 2262 4455 L
+2262 4455 mt 2286 4464 L
+2286 4464 mt 2321 4477 L
+2321 4477 mt 2338 4482 L
+2338 4482 mt 2356 4489 L
+2356 4489 mt 2391 4500 L
+2391 4500 mt 2416 4510 L
+2416 4510 mt 2426 4514 L
+2426 4514 mt 2461 4531 L
+2461 4531 mt 2473 4537 L
+2473 4537 mt 2496 4552 L
+2496 4552 mt 2515 4565 L
+2515 4565 mt 2530 4583 L
+2530 4583 mt 2539 4592 L
+2539 4592 mt 2533 4620 L
+2533 4620 mt 2530 4622 L
+2530 4622 mt 2496 4648 L
+2496 4648 mt 2496 4648 L
+2496 4648 mt 2461 4664 L
+2461 4664 mt 2435 4675 L
+2435 4675 mt 2426 4678 L
+2426 4678 mt 2391 4689 L
+2391 4689 mt 2356 4699 L
+2356 4699 mt 2341 4703 L
+2341 4703 mt 2321 4707 L
+2321 4707 mt 2286 4713 L
+2286 4713 mt 2251 4718 L
+2251 4718 mt 2217 4722 L
+2217 4722 mt 2182 4724 L
+2182 4724 mt 2147 4724 L
+2147 4724 mt 2112 4723 L
+2112 4723 mt 2077 4720 L
+2077 4720 mt 2042 4716 L
+2042 4716 mt 2007 4710 L
+2007 4710 mt 1972 4703 L
+1972 4703 mt 1970 4703 L
+1970 4703 mt 1938 4695 L
+1938 4695 mt 1903 4685 L
+1903 4685 mt 1874 4675 L
+1874 4675 mt 1868 4673 L
+1868 4673 mt 1833 4659 L
+1833 4659 mt 1810 4648 L
+1810 4648 mt 1798 4642 L
+1798 4642 mt 1763 4621 L
+1763 4621 mt 1762 4620 L
+1762 4620 mt 1734 4592 L
+1734 4592 mt 1728 4580 L
+1728 4580 mt 1723 4565 L
+1723 4565 mt 1720 4537 L
+1720 4537 mt 1721 4510 L
+1721 4510 mt 1728 4490 L
+1728 4490 mt 1733 4482 L
+1733 4482 mt 1761 4455 L
+1761 4455 mt 1763 4453 L
+1763 4453 mt 1798 4427 L
+1798 4427 mt 1798 4427 L
+1798 4427 mt 1829 4400 L
+1829 4400 mt 1833 4393 L
+1833 4393 mt 1846 4372 L
+1846 4372 mt 1851 4345 L
+1851 4345 mt 1843 4317 L
+1843 4317 mt 1833 4305 L
+1833 4305 mt 1821 4290 L
+1821 4290 mt 1798 4272 L
+1798 4272 mt 1785 4262 L
+1785 4262 mt 1763 4248 L
+1763 4248 mt 1742 4235 L
+1742 4235 mt 1728 4225 L
+1728 4225 mt 1705 4207 L
+1705 4207 mt 1694 4193 L
+1694 4193 mt 1683 4180 L
+1683 4180 mt 1673 4152 L
+1673 4152 mt 1676 4125 L
+1676 4125 mt 1689 4097 L
+1689 4097 mt 1694 4092 L
+6645 1749 mt 6647 1759 L
+6647 1759 mt 6654 1786 L
+6654 1786 mt 6659 1814 L
+6659 1814 mt 6663 1841 L
+6663 1841 mt 6667 1869 L
+6667 1869 mt 6670 1896 L
+6670 1896 mt 6672 1924 L
+6672 1924 mt 6674 1951 L
+6674 1951 mt 6675 1979 L
+6675 1979 mt 6675 2006 L
+6675 2006 mt 6675 2034 L
+6675 2034 mt 6673 2061 L
+6673 2061 mt 6671 2089 L
+6671 2089 mt 6669 2116 L
+6669 2116 mt 6665 2144 L
+6665 2144 mt 6661 2171 L
+6661 2171 mt 6657 2199 L
+6657 2199 mt 6651 2226 L
+6651 2226 mt 6645 2254 L
+6645 2254 mt 6645 2254 L
+6645 2254 mt 6638 2281 L
+6638 2281 mt 6631 2309 L
+6631 2309 mt 6622 2336 L
+6622 2336 mt 6613 2364 L
+6613 2364 mt 6610 2373 L
+6610 2373 mt 6604 2391 L
+6604 2391 mt 6593 2419 L
+6593 2419 mt 6582 2446 L
+6582 2446 mt 6575 2460 L
+6575 2460 mt 6569 2474 L
+6569 2474 mt 6555 2502 L
+6555 2502 mt 6540 2529 L
+6540 2529 mt 6540 2529 L
+6540 2529 mt 6524 2557 L
+6524 2557 mt 6506 2584 L
+6506 2584 mt 6506 2584 L
+6506 2584 mt 6486 2612 L
+6486 2612 mt 6471 2631 L
+6471 2631 mt 6463 2639 L
+6463 2639 mt 6439 2667 L
+6439 2667 mt 6436 2670 L
+6436 2670 mt 6411 2694 L
+6411 2694 mt 6401 2704 L
+6401 2704 mt 6381 2722 L
+6381 2722 mt 6366 2735 L
+6366 2735 mt 6348 2749 L
+6348 2749 mt 6331 2762 L
+6331 2762 mt 6311 2777 L
+6311 2777 mt 6296 2787 L
+6296 2787 mt 6269 2804 L
+6269 2804 mt 6261 2810 L
+6261 2810 mt 6227 2829 L
+6227 2829 mt 6219 2832 L
+6219 2832 mt 6192 2841 L
+6192 2841 mt 6157 2838 L
+6157 2838 mt 6127 2832 L
+6127 2832 mt 6122 2831 L
+6122 2831 mt 6087 2825 L
+6087 2825 mt 6052 2823 L
+6052 2823 mt 6017 2828 L
+6017 2828 mt 6009 2832 L
+6009 2832 mt 5983 2846 L
+5983 2846 mt 5961 2859 L
+5961 2859 mt 5948 2867 L
+5948 2867 mt 5913 2885 L
+5913 2885 mt 5908 2887 L
+5908 2887 mt 5878 2895 L
+5878 2895 mt 5843 2897 L
+5843 2897 mt 5808 2894 L
+5808 2894 mt 5773 2889 L
+5773 2889 mt 5764 2887 L
+5764 2887 mt 5738 2881 L
+5738 2881 mt 5704 2867 L
+5704 2867 mt 5689 2859 L
+5689 2859 mt 5669 2847 L
+5669 2847 mt 5650 2832 L
+5650 2832 mt 5634 2818 L
+5634 2818 mt 5619 2804 L
+5619 2804 mt 5599 2784 L
+5599 2784 mt 5591 2777 L
+5591 2777 mt 5568 2749 L
+5568 2749 mt 5564 2743 L
+5564 2743 mt 5552 2722 L
+5552 2722 mt 5542 2694 L
+5542 2694 mt 5536 2667 L
+5536 2667 mt 5534 2639 L
+5534 2639 mt 5537 2612 L
+5537 2612 mt 5544 2584 L
+5544 2584 mt 5554 2557 L
+5554 2557 mt 5564 2530 L
+5564 2530 mt 5565 2529 L
+5565 2529 mt 5572 2502 L
+5572 2502 mt 5576 2474 L
+5576 2474 mt 5579 2446 L
+5579 2446 mt 5581 2419 L
+5581 2419 mt 5584 2391 L
+5584 2391 mt 5590 2364 L
+5590 2364 mt 5597 2336 L
+5597 2336 mt 5599 2329 L
+5599 2329 mt 5604 2309 L
+5604 2309 mt 5608 2281 L
+5608 2281 mt 5608 2254 L
+5608 2254 mt 5604 2226 L
+5604 2226 mt 5599 2208 L
+5599 2208 mt 5596 2199 L
+5596 2199 mt 5586 2171 L
+5586 2171 mt 5573 2144 L
+5573 2144 mt 5564 2125 L
+5564 2125 mt 5560 2116 L
+5560 2116 mt 5546 2089 L
+5546 2089 mt 5532 2061 L
+5532 2061 mt 5529 2055 L
+5529 2055 mt 5518 2034 L
+5518 2034 mt 5502 2006 L
+5502 2006 mt 5494 1994 L
+5494 1994 mt 5485 1979 L
+5485 1979 mt 5465 1951 L
+5465 1951 mt 5459 1944 L
+5459 1944 mt 5444 1924 L
+5444 1924 mt 5425 1899 L
+5425 1899 mt 5422 1896 L
+5422 1896 mt 5396 1869 L
+5396 1869 mt 5390 1864 L
+5390 1864 mt 5361 1841 L
+5361 1841 mt 5355 1837 L
+5355 1837 mt 5322 1814 L
+5322 1814 mt 5320 1812 L
+5320 1812 mt 5285 1790 L
+5285 1790 mt 5279 1786 L
+5279 1786 mt 5250 1773 L
+5250 1773 mt 5215 1764 L
+5215 1764 mt 5181 1762 L
+5181 1762 mt 5146 1765 L
+5146 1765 mt 5111 1770 L
+5111 1770 mt 5076 1776 L
+5076 1776 mt 5041 1783 L
+5041 1783 mt 5025 1786 L
+5025 1786 mt 5006 1790 L
+5006 1790 mt 4971 1796 L
+4971 1796 mt 4936 1798 L
+4936 1798 mt 4902 1788 L
+4902 1788 mt 4899 1786 L
+4899 1786 mt 4885 1759 L
+4885 1759 mt 4889 1731 L
+4889 1731 mt 4900 1704 L
+4900 1704 mt 4902 1699 L
+4902 1699 mt 4912 1676 L
+4912 1676 mt 4926 1649 L
+4926 1649 mt 4936 1626 L
+4936 1626 mt 4938 1621 L
+4938 1621 mt 4943 1594 L
+4943 1594 mt 4936 1567 L
+4936 1567 mt 4936 1566 L
+4936 1566 mt 4914 1539 L
+4914 1539 mt 4902 1529 L
+4902 1529 mt 4867 1512 L
+4867 1512 mt 4861 1511 L
+4861 1511 mt 4832 1507 L
+4832 1507 mt 4797 1506 L
+4797 1506 mt 4762 1505 L
+4762 1505 mt 4727 1505 L
+4727 1505 mt 4692 1504 L
+4692 1504 mt 4657 1501 L
+4657 1501 mt 4623 1494 L
+4623 1494 mt 4600 1484 L
+4600 1484 mt 4588 1476 L
+4588 1476 mt 4567 1456 L
+4567 1456 mt 4553 1436 L
+4553 1436 mt 4548 1428 L
+4548 1428 mt 4535 1401 L
+4535 1401 mt 4521 1373 L
+4521 1373 mt 4518 1369 L
+4518 1369 mt 4503 1346 L
+4503 1346 mt 4483 1321 L
+4483 1321 mt 4481 1318 L
+4481 1318 mt 4452 1291 L
+4452 1291 mt 4448 1287 L
+4448 1287 mt 4424 1263 L
+4424 1263 mt 4413 1240 L
+4413 1240 mt 4411 1236 L
+4411 1236 mt 4401 1208 L
+4401 1208 mt 4399 1181 L
+4399 1181 mt 4396 1153 L
+4396 1153 mt 4389 1126 L
+4389 1126 mt 4379 1108 L
+4379 1108 mt 4373 1098 L
+4373 1098 mt 4349 1071 L
+4349 1071 mt 4344 1066 L
+4344 1066 mt 4317 1043 L
+4317 1043 mt 4309 1037 L
+4309 1037 mt 4279 1016 L
+4279 1016 mt 4274 1012 L
+4274 1012 mt 4239 992 L
+4239 992 mt 4232 988 L
+4232 988 mt 4204 974 L
+4204 974 mt 4176 961 L
+4176 961 mt 4169 957 L
+4169 957 mt 4134 940 L
+4134 940 mt 4118 933 L
+4118 933 mt 4100 925 L
+4100 925 mt 4065 911 L
+4065 911 mt 4048 906 L
+4048 906 mt 4030 899 L
+4030 899 mt 3995 888 L
+3995 888 mt 3969 878 L
+3969 878 mt 3960 875 L
+3960 875 mt 3925 859 L
+3925 859 mt 3908 851 L
+3908 851 mt 3890 840 L
+3890 840 mt 3863 823 L
+3863 823 mt 3855 817 L
+3855 817 mt 3828 796 L
+3828 796 mt 3821 788 L
+3821 788 mt 3801 768 L
+3801 768 mt 3786 752 L
+3786 752 mt 3776 741 L
+3776 741 mt 3751 717 L
+3751 717 mt 3747 713 L
+3747 713 mt 3716 691 L
+3716 691 mt 3709 686 L
+3709 686 mt 3681 671 L
+3681 671 mt 3656 658 L
+3656 658 mt 3646 654 L
+3646 654 mt 3611 640 L
+3611 640 mt 3589 631 L
+3589 631 mt 3577 626 L
+3577 626 mt 3542 612 L
+3542 612 mt 3524 603 L
+3524 603 mt 3507 596 L
+3507 596 mt 3472 581 L
+3472 581 mt 3460 576 L
+3460 576 mt 3437 566 L
+3437 566 mt 3402 552 L
+3402 552 mt 3392 548 L
+3392 548 mt 3367 539 L
+3367 539 mt 3332 528 L
+3332 528 mt 3307 521 L
+3307 521 mt 3298 518 L
+3298 518 mt 3263 509 L
+3263 509 mt 3228 502 L
+3228 502 mt 3193 496 L
+3193 496 mt 3171 493 L
+3171 493 mt 3158 491 L
+3158 491 mt 3123 487 L
+3123 487 mt 3088 483 L
+3088 483 mt 3053 480 L
+3053 480 mt 3019 478 L
+3019 478 mt 2984 476 L
+2984 476 mt 2949 476 L
+2949 476 mt 2914 476 L
+2914 476 mt 2879 478 L
+2879 478 mt 2844 479 L
+2844 479 mt 2809 480 L
+2809 480 mt 2774 480 L
+2774 480 mt 2740 477 L
+2740 477 mt 2705 474 L
+2705 474 mt 2670 471 L
+2670 471 mt 2635 474 L
+2635 474 mt 2600 486 L
+2600 486 mt 2586 493 L
+2586 493 mt 2565 500 L
+2565 500 mt 2530 511 L
+2530 511 mt 2497 521 L
+2497 521 mt 2496 521 L
+2496 521 mt 2461 528 L
+2461 528 mt 2426 535 L
+2426 535 mt 2391 542 L
+2391 542 mt 2356 548 L
+2356 548 mt 2355 548 L
+2355 548 mt 2321 552 L
+2321 552 mt 2286 555 L
+2286 555 mt 2251 557 L
+2251 557 mt 2217 557 L
+2217 557 mt 2182 557 L
+2182 557 mt 2147 557 L
+2147 557 mt 2112 558 L
+2112 558 mt 2077 560 L
+2077 560 mt 2042 564 L
+2042 564 mt 2007 571 L
+2007 571 mt 1993 576 L
+1993 576 mt 1972 581 L
+1972 581 mt 1938 592 L
+1938 592 mt 1912 603 L
+1912 603 mt 1903 607 L
+1903 607 mt 1868 623 L
+1868 623 mt 1853 631 L
+1853 631 mt 1833 640 L
+1833 640 mt 1798 655 L
+1798 655 mt 1788 658 L
+1788 658 mt 1763 665 L
+1763 665 mt 1728 670 L
+1728 670 mt 1694 670 L
+1694 670 mt 1659 667 L
+1659 667 mt 1624 666 L
+1624 666 mt 1589 667 L
+1589 667 mt 1554 674 L
+1554 674 mt 1523 686 L
+1523 686 mt 1519 688 L
+1519 688 mt 1484 710 L
+1484 710 mt 1481 713 L
+1481 713 mt 1455 741 L
+1455 741 mt 1449 749 L
+1449 749 mt 1436 768 L
+1436 768 mt 1421 796 L
+1421 796 mt 1415 808 L
+1415 808 mt 1406 823 L
+1406 823 mt 1390 851 L
+1390 851 mt 1380 864 L
+1380 864 mt 1368 878 L
+1368 878 mt 1345 901 L
+1345 901 mt 1339 906 L
+1339 906 mt 1310 927 L
+1310 927 mt 1301 933 L
+1301 933 mt 1275 952 L
+1275 952 mt 1265 961 L
+1265 961 mt 1240 982 L
+1240 982 mt 1235 988 L
+1235 988 mt 1217 1016 L
+1217 1016 mt 1205 1042 L
+1205 1042 mt 1205 1043 L
+1205 1043 mt 1200 1071 L
+1200 1071 mt 1199 1098 L
+1199 1098 mt 1200 1126 L
+1200 1126 mt 1204 1153 L
+1204 1153 mt 1205 1158 L
+1205 1158 mt 1211 1181 L
+1211 1181 mt 1216 1208 L
+1216 1208 mt 1219 1236 L
+1219 1236 mt 1218 1263 L
+1218 1263 mt 1209 1291 L
+1209 1291 mt 1205 1297 L
+1205 1297 mt 1188 1318 L
+1188 1318 mt 1170 1332 L
+1170 1332 mt 1153 1346 L
+1153 1346 mt 1136 1357 L
+1136 1357 mt 1113 1373 L
+1113 1373 mt 1101 1382 L
+1101 1382 mt 1078 1401 L
+1078 1401 mt 1066 1411 L
+1066 1411 mt 1048 1428 L
+1048 1428 mt 1031 1448 L
+1031 1448 mt 1024 1456 L
+1024 1456 mt 1007 1484 L
+1007 1484 mt 998 1511 L
+ 998 1511 mt 996 1518 L
+ 996 1518 mt 990 1539 L
+ 990 1539 mt 987 1566 L
+ 987 1566 mt 986 1594 L
+ 986 1594 mt 985 1621 L
+ 985 1621 mt 984 1649 L
+ 984 1649 mt 984 1676 L
+ 984 1676 mt 985 1704 L
+ 985 1704 mt 988 1731 L
+ 988 1731 mt 993 1759 L
+ 993 1759 mt 996 1773 L
+ 996 1773 mt 999 1786 L
+ 999 1786 mt 1006 1814 L
+1006 1814 mt 1015 1841 L
+1015 1841 mt 1026 1869 L
+1026 1869 mt 1031 1881 L
+1031 1881 mt 1037 1896 L
+1037 1896 mt 1048 1924 L
+1048 1924 mt 1060 1951 L
+1060 1951 mt 1066 1966 L
+1066 1966 mt 1071 1979 L
+1071 1979 mt 1082 2006 L
+1082 2006 mt 1093 2034 L
+1093 2034 mt 1101 2054 L
+1101 2054 mt 1103 2061 L
+1103 2061 mt 1114 2089 L
+1114 2089 mt 1124 2116 L
+1124 2116 mt 1134 2144 L
+1134 2144 mt 1136 2148 L
+1136 2148 mt 1149 2171 L
+1149 2171 mt 1167 2199 L
+1167 2199 mt 1170 2203 L
+1170 2203 mt 1197 2226 L
+1197 2226 mt 1205 2232 L
+1205 2232 mt 1240 2251 L
+1240 2251 mt 1245 2254 L
+1245 2254 mt 1275 2267 L
+1275 2267 mt 1304 2281 L
+1304 2281 mt 1310 2284 L
+1310 2284 mt 1345 2301 L
+1345 2301 mt 1357 2309 L
+1357 2309 mt 1380 2322 L
+1380 2322 mt 1400 2336 L
+1400 2336 mt 1415 2349 L
+1415 2349 mt 1434 2364 L
+1434 2364 mt 1449 2379 L
+1449 2379 mt 1465 2391 L
+1465 2391 mt 1484 2412 L
+1484 2412 mt 1490 2419 L
+1490 2419 mt 1511 2446 L
+1511 2446 mt 1519 2457 L
+1519 2457 mt 1530 2474 L
+1530 2474 mt 1540 2502 L
+1540 2502 mt 1544 2529 L
+1544 2529 mt 1547 2557 L
+1547 2557 mt 1551 2584 L
+1551 2584 mt 1554 2604 L
+1554 2604 mt 1555 2612 L
+1555 2612 mt 1556 2639 L
+1556 2639 mt 1558 2667 L
+1558 2667 mt 1565 2694 L
+1565 2694 mt 1579 2722 L
+1579 2722 mt 1589 2736 L
+1589 2736 mt 1599 2749 L
+1599 2749 mt 1624 2772 L
+1624 2772 mt 1629 2777 L
+1629 2777 mt 1659 2799 L
+1659 2799 mt 1667 2804 L
+1667 2804 mt 1694 2823 L
+1694 2823 mt 1707 2832 L
+1707 2832 mt 1728 2849 L
+1728 2849 mt 1742 2859 L
+1742 2859 mt 1763 2879 L
+1763 2879 mt 1771 2887 L
+1771 2887 mt 1798 2914 L
+1798 2914 mt 1798 2914 L
+1798 2914 mt 1823 2942 L
+1823 2942 mt 1833 2953 L
+1833 2953 mt 1846 2969 L
+1846 2969 mt 1864 2997 L
+1864 2997 mt 1868 3003 L
+1868 3003 mt 1879 3024 L
+1879 3024 mt 1888 3052 L
+1888 3052 mt 1894 3079 L
+1894 3079 mt 1901 3107 L
+1901 3107 mt 1903 3111 L
+1903 3111 mt 1911 3134 L
+1911 3134 mt 1922 3162 L
+1922 3162 mt 1934 3189 L
+1934 3189 mt 1938 3196 L
+1938 3196 mt 1951 3217 L
+1951 3217 mt 1972 3232 L
+1972 3232 mt 1988 3244 L
+1988 3244 mt 2007 3254 L
+2007 3254 mt 2030 3272 L
+2030 3272 mt 2042 3281 L
+2042 3281 mt 2063 3299 L
+2063 3299 mt 2077 3312 L
+2077 3312 mt 2095 3327 L
+2095 3327 mt 2112 3340 L
+2112 3340 mt 2132 3354 L
+2132 3354 mt 2147 3364 L
+2147 3364 mt 2175 3382 L
+2175 3382 mt 2182 3386 L
+2182 3386 mt 2213 3409 L
+2213 3409 mt 2217 3412 L
+2217 3412 mt 2247 3437 L
+2247 3437 mt 2251 3441 L
+2251 3441 mt 2279 3464 L
+2279 3464 mt 2286 3470 L
+2286 3470 mt 2310 3492 L
+2310 3492 mt 2321 3503 L
+2321 3503 mt 2335 3519 L
+2335 3519 mt 2354 3547 L
+2354 3547 mt 2356 3551 L
+2356 3551 mt 2367 3575 L
+2367 3575 mt 2374 3602 L
+2374 3602 mt 2375 3630 L
+2375 3630 mt 2363 3657 L
+2363 3657 mt 2356 3663 L
+2356 3663 mt 2331 3685 L
+2331 3685 mt 2321 3690 L
+2321 3690 mt 2286 3708 L
+2286 3708 mt 2275 3712 L
+2275 3712 mt 2251 3722 L
+2251 3722 mt 2217 3733 L
+2217 3733 mt 2182 3739 L
+2182 3739 mt 2147 3736 L
+2147 3736 mt 2112 3723 L
+2112 3723 mt 2097 3712 L
+2097 3712 mt 2077 3694 L
+2077 3694 mt 2070 3685 L
+2070 3685 mt 2054 3657 L
+2054 3657 mt 2043 3630 L
+2043 3630 mt 2042 3627 L
+2042 3627 mt 2035 3602 L
+2035 3602 mt 2028 3575 L
+2028 3575 mt 2019 3547 L
+2019 3547 mt 2008 3519 L
+2008 3519 mt 2007 3517 L
+2007 3517 mt 1995 3492 L
+1995 3492 mt 1980 3464 L
+1980 3464 mt 1972 3453 L
+1972 3453 mt 1964 3437 L
+1964 3437 mt 1948 3409 L
+1948 3409 mt 1938 3391 L
+1938 3391 mt 1932 3382 L
+1932 3382 mt 1917 3354 L
+1917 3354 mt 1903 3328 L
+1903 3328 mt 1902 3327 L
+1902 3327 mt 1892 3299 L
+1892 3299 mt 1882 3272 L
+1882 3272 mt 1868 3253 L
+1868 3253 mt 1861 3244 L
+1861 3244 mt 1833 3226 L
+1833 3226 mt 1819 3217 L
+1819 3217 mt 1798 3205 L
+1798 3205 mt 1771 3189 L
+1771 3189 mt 1763 3186 L
+1763 3186 mt 1728 3169 L
+1728 3169 mt 1715 3162 L
+1715 3162 mt 1694 3153 L
+1694 3153 mt 1659 3139 L
+1659 3139 mt 1647 3134 L
+1647 3134 mt 1624 3125 L
+1624 3125 mt 1589 3114 L
+1589 3114 mt 1565 3107 L
+1565 3107 mt 1554 3104 L
+1554 3104 mt 1519 3094 L
+1519 3094 mt 1484 3084 L
+1484 3084 mt 1469 3079 L
+1469 3079 mt 1449 3074 L
+1449 3074 mt 1415 3065 L
+1415 3065 mt 1380 3056 L
+1380 3056 mt 1360 3052 L
+1360 3052 mt 1345 3048 L
+1345 3048 mt 1310 3042 L
+1310 3042 mt 1275 3037 L
+1275 3037 mt 1240 3031 L
+1240 3031 mt 1214 3024 L
+1214 3024 mt 1205 3022 L
+1205 3022 mt 1170 3006 L
+1170 3006 mt 1153 2997 L
+1153 2997 mt 1136 2986 L
+1136 2986 mt 1106 2969 L
+1106 2969 mt 1101 2967 L
+1101 2967 mt 1066 2949 L
+1066 2949 mt 1048 2942 L
+1048 2942 mt 1031 2935 L
+1031 2935 mt 996 2922 L
+ 996 2922 mt 978 2914 L
+ 978 2914 mt 961 2908 L
+ 961 2908 mt 926 2893 L
+ 926 2893 mt 915 2887 L
+ 915 2887 mt 892 2875 L
+ 892 2875 mt 866 2859 L
+ 866 2859 mt 857 2853 L
+ 857 2853 mt 829 2832 L
+ 829 2832 mt 822 2825 L
+ 822 2825 mt 800 2804 L
+ 800 2804 mt 787 2790 L
+ 787 2790 mt 776 2777 L
+ 776 2777 mt 756 2749 L
+ 756 2749 mt 752 2744 L
+ 752 2744 mt 738 2722 L
+ 738 2722 mt 724 2694 L
+ 724 2694 mt 717 2680 L
+ 717 2680 mt 711 2667 L
+ 711 2667 mt 701 2639 L
+ 701 2639 mt 692 2612 L
+ 692 2612 mt 686 2584 L
+ 686 2584 mt 682 2567 L
+ 682 2567 mt 680 2557 L
+ 680 2557 mt 676 2529 L
+ 676 2529 mt 674 2502 L
+ 674 2502 mt 672 2474 L
+ 672 2474 mt 672 2446 L
+ 672 2446 mt 673 2419 L
+ 673 2419 mt 676 2391 L
+ 676 2391 mt 680 2364 L
+ 680 2364 mt 682 2350 L
+ 682 2350 mt 685 2336 L
+ 685 2336 mt 692 2309 L
+ 692 2309 mt 701 2281 L
+ 701 2281 mt 711 2254 L
+ 711 2254 mt 717 2239 L
+ 717 2239 mt 723 2226 L
+ 723 2226 mt 736 2199 L
+ 736 2199 mt 751 2171 L
+ 751 2171 mt 752 2169 L
+ 752 2169 mt 767 2144 L
+ 767 2144 mt 782 2116 L
+ 782 2116 mt 787 2107 L
+ 787 2107 mt 798 2089 L
+ 798 2089 mt 813 2061 L
+ 813 2061 mt 822 2046 L
+ 822 2046 mt 830 2034 L
+ 830 2034 mt 847 2006 L
+ 847 2006 mt 857 1984 L
+ 857 1984 mt 860 1979 L
+ 860 1979 mt 868 1951 L
+ 868 1951 mt 870 1924 L
+ 870 1924 mt 866 1896 L
+ 866 1896 mt 860 1869 L
+ 860 1869 mt 857 1858 L
+ 857 1858 mt 853 1841 L
+ 853 1841 mt 848 1814 L
+ 848 1814 mt 843 1786 L
+ 843 1786 mt 841 1759 L
+ 841 1759 mt 840 1731 L
+ 840 1731 mt 842 1704 L
+ 842 1704 mt 846 1676 L
+ 846 1676 mt 853 1649 L
+ 853 1649 mt 857 1636 L
+ 857 1636 mt 862 1621 L
+ 862 1621 mt 872 1594 L
+ 872 1594 mt 879 1566 L
+ 879 1566 mt 883 1539 L
+ 883 1539 mt 881 1511 L
+ 881 1511 mt 874 1484 L
+ 874 1484 mt 861 1456 L
+ 861 1456 mt 857 1450 L
+ 857 1450 mt 848 1428 L
+ 848 1428 mt 836 1401 L
+ 836 1401 mt 829 1373 L
+ 829 1373 mt 826 1346 L
+ 826 1346 mt 824 1318 L
+ 824 1318 mt 822 1291 L
+ 822 1291 mt 822 1291 L
+ 822 1291 mt 820 1263 L
+ 820 1263 mt 817 1236 L
+ 817 1236 mt 815 1208 L
+ 815 1208 mt 814 1181 L
+ 814 1181 mt 817 1153 L
+ 817 1153 mt 821 1126 L
+ 821 1126 mt 822 1121 L
+ 822 1121 mt 827 1098 L
+ 827 1098 mt 833 1071 L
+ 833 1071 mt 838 1043 L
+ 838 1043 mt 842 1016 L
+ 842 1016 mt 845 988 L
+ 845 988 mt 848 961 L
+ 848 961 mt 850 933 L
+ 850 933 mt 853 906 L
+ 853 906 mt 857 890 L
+ 857 890 mt 859 878 L
+ 859 878 mt 867 851 L
+ 867 851 mt 880 823 L
+ 880 823 mt 892 801 L
+ 892 801 mt 894 796 L
+ 894 796 mt 909 768 L
+ 909 768 mt 926 741 L
+ 926 741 mt 926 740 L
+ 926 740 mt 947 713 L
+ 947 713 mt 961 695 L
+ 961 695 mt 970 686 L
+ 970 686 mt 991 658 L
+ 991 658 mt 996 652 L
+ 996 652 mt 1010 631 L
+1010 631 mt 1026 603 L
+1026 603 mt 1031 594 L
+1031 594 mt 1041 576 L
+1041 576 mt 1061 548 L
+1061 548 mt 1066 543 L
+1066 543 mt 1084 521 L
+1084 521 mt 1101 505 L
+1101 505 mt 1116 493 L
+1116 493 mt 1136 478 L
+1136 478 mt 1154 466 L
+1154 466 mt 1170 455 L
+1170 455 mt 1198 438 L
+1198 438 mt 1205 434 L
+1205 434 mt 1240 418 L
+1240 418 mt 1260 411 L
+1260 411 mt 1275 405 L
+1275 405 mt 1310 395 L
+1310 395 mt 1345 392 L
+1345 392 mt 1380 397 L
+1380 397 mt 1415 403 L
+1415 403 mt 1449 410 L
+1449 410 mt 1458 411 L
+1458 411 mt 1484 414 L
+1484 414 mt 1519 418 L
+1519 418 mt 1554 418 L
+1554 418 mt 1589 418 L
+1589 418 mt 1624 415 L
+1624 415 mt 1657 411 L
+1657 411 mt 1659 410 L
+1659 410 mt 1694 404 L
+1694 404 mt 1728 396 L
+1728 396 mt 1763 386 L
+1763 386 mt 1774 383 L
+1774 383 mt 1798 377 L
+1798 377 mt 1833 368 L
+1833 368 mt 1868 360 L
+1868 360 mt 1903 356 L
+1903 356 mt 1938 356 L
+1938 356 mt 1972 362 L
+1972 362 mt 2007 372 L
+2007 372 mt 2042 382 L
+2042 382 mt 2047 383 L
+2047 383 mt 2077 392 L
+2077 392 mt 2112 400 L
+2112 400 mt 2147 403 L
+2147 403 mt 2182 403 L
+2182 403 mt 2217 401 L
+2217 401 mt 2251 397 L
+2251 397 mt 2286 391 L
+2286 391 mt 2321 384 L
+2321 384 mt 2328 383 L
+2328 383 mt 2356 378 L
+2356 378 mt 2391 372 L
+2391 372 mt 2426 367 L
+2426 367 mt 2461 364 L
+2461 364 mt 2496 365 L
+2496 365 mt 2530 371 L
+2530 371 mt 2565 383 L
+2565 383 mt 2565 383 L
+2565 383 mt 2600 398 L
+2600 398 mt 2635 403 L
+2635 403 mt 2670 392 L
+2670 392 mt 2681 383 L
+2681 383 mt 2705 374 L
+2705 374 mt 2740 357 L
+2740 357 mt 2745 355 L
+2745 355 mt 2774 349 L
+2774 349 mt 2809 345 L
+2809 345 mt 2844 345 L
+2844 345 mt 2879 347 L
+2879 347 mt 2914 349 L
+2914 349 mt 2949 352 L
+2949 352 mt 2984 355 L
+2984 355 mt 2984 355 L
+2984 355 mt 3019 358 L
+3019 358 mt 3053 360 L
+3053 360 mt 3088 361 L
+3088 361 mt 3123 362 L
+3123 362 mt 3158 360 L
+3158 360 mt 3193 358 L
+3193 358 mt 3212 355 L
+3212 355 mt 3228 354 L
+3228 354 mt 3263 348 L
+3263 348 mt 3298 338 L
+3298 338 mt 3328 328 L
+3328 328 mt 3332 327 L
+3332 327 mt 3367 316 L
+3367 316 mt 3402 305 L
+3402 305 mt 3418 300 L
+3418 300 mt 3437 296 L
+3437 296 mt 3472 288 L
+3472 288 mt 3507 281 L
+3507 281 mt 3542 275 L
+3542 275 mt 3550 273 L
+3550 273 mt 3577 268 L
+3577 268 mt 3611 261 L
+3611 261 mt 3646 254 L
+3646 254 mt 3681 247 L
+3681 247 mt 3689 245 L
+3689 245 mt 3716 240 L
+3716 240 mt 3751 233 L
+3751 233 mt 3786 226 L
+3786 226 mt 3821 219 L
+3821 219 mt 3826 218 L
+3826 218 mt 3855 212 L
+3855 212 mt 3890 205 L
+3890 205 mt 3925 198 L
+3925 198 mt 3960 190 L
+3960 190 mt 3960 190 L
+3960 190 mt 3995 183 L
+3995 183 mt 4030 176 L
+4030 176 mt 4065 169 L
+4065 169 mt 4094 163 L
+4094 163 mt 4100 162 L
+4100 162 mt 4134 155 L
+4134 155 mt 4169 148 L
+4169 148 mt 4204 142 L
+4204 142 mt 4239 136 L
+4239 136 mt 4243 135 L
+4243 135 mt 4274 130 L
+4274 130 mt 4309 125 L
+4309 125 mt 4344 120 L
+4344 120 mt 4379 116 L
+4379 116 mt 4413 112 L
+4413 112 mt 4448 108 L
+4448 108 mt 4450 108 L
+4450 108 mt 4483 105 L
+4483 105 mt 4518 103 L
+4518 103 mt 4553 101 L
+4553 101 mt 4588 99 L
+4588 99 mt 4623 98 L
+4623 98 mt 4657 97 L
+4657 97 mt 4692 97 L
+4692 97 mt 4727 98 L
+4727 98 mt 4762 99 L
+4762 99 mt 4797 100 L
+4797 100 mt 4832 102 L
+4832 102 mt 4867 105 L
+4867 105 mt 4899 108 L
+4899 108 mt 4902 108 L
+4902 108 mt 4936 112 L
+4936 112 mt 4971 117 L
+4971 117 mt 5006 123 L
+5006 123 mt 5041 129 L
+5041 129 mt 5068 135 L
+5068 135 mt 5076 137 L
+5076 137 mt 5111 146 L
+5111 146 mt 5146 155 L
+5146 155 mt 5169 163 L
+5169 163 mt 5181 167 L
+5181 167 mt 5215 179 L
+5215 179 mt 5243 190 L
+5243 190 mt 5250 193 L
+5250 193 mt 5285 209 L
+5285 209 mt 5302 218 L
+5302 218 mt 5320 227 L
+5320 227 mt 5352 245 L
+5352 245 mt 5355 247 L
+5355 247 mt 5390 269 L
+5390 269 mt 5396 273 L
+5396 273 mt 5425 292 L
+5425 292 mt 5436 300 L
+5436 300 mt 5459 318 L
+5459 318 mt 5472 328 L
+5472 328 mt 5494 346 L
+5494 346 mt 5506 355 L
+5506 355 mt 5529 375 L
+5529 375 mt 5539 383 L
+5539 383 mt 5564 405 L
+5564 405 mt 5570 411 L
+5570 411 mt 5599 437 L
+5599 437 mt 5600 438 L
+5600 438 mt 5629 466 L
+5629 466 mt 5634 470 L
+5634 470 mt 5658 493 L
+5658 493 mt 5669 504 L
+5669 504 mt 5686 521 L
+5686 521 mt 5704 539 L
+5704 539 mt 5713 548 L
+5713 548 mt 5738 575 L
+5738 575 mt 5739 576 L
+5739 576 mt 5766 603 L
+5766 603 mt 5773 611 L
+5773 611 mt 5791 631 L
+5791 631 mt 5808 649 L
+5808 649 mt 5817 658 L
+5817 658 mt 5842 686 L
+5842 686 mt 5843 687 L
+5843 687 mt 5867 713 L
+5867 713 mt 5878 726 L
+5878 726 mt 5892 741 L
+5892 741 mt 5913 764 L
+5913 764 mt 5916 768 L
+5916 768 mt 5941 796 L
+5941 796 mt 5948 803 L
+5948 803 mt 5966 823 L
+5966 823 mt 5983 841 L
+5983 841 mt 5991 851 L
+5991 851 mt 6016 878 L
+6016 878 mt 6017 880 L
+6017 880 mt 6041 906 L
+6041 906 mt 6052 919 L
+6052 919 mt 6066 933 L
+6066 933 mt 6087 957 L
+6087 957 mt 6090 961 L
+6090 961 mt 6115 988 L
+6115 988 mt 6122 996 L
+6122 996 mt 6140 1016 L
+6140 1016 mt 6157 1035 L
+6157 1035 mt 6165 1043 L
+6165 1043 mt 6190 1071 L
+6190 1071 mt 6192 1073 L
+6192 1073 mt 6214 1098 L
+6214 1098 mt 6227 1112 L
+6227 1112 mt 6239 1126 L
+6239 1126 mt 6261 1151 L
+6261 1151 mt 6264 1153 L
+6264 1153 mt 6289 1181 L
+6289 1181 mt 6296 1189 L
+6296 1189 mt 6314 1208 L
+6314 1208 mt 6331 1228 L
+6331 1228 mt 6339 1236 L
+6339 1236 mt 6363 1263 L
+6363 1263 mt 6366 1267 L
+6366 1267 mt 6387 1291 L
+6387 1291 mt 6401 1307 L
+6401 1307 mt 6410 1318 L
+6410 1318 mt 6433 1346 L
+6433 1346 mt 6436 1349 L
+6436 1349 mt 6455 1373 L
+6455 1373 mt 6471 1394 L
+6471 1394 mt 6476 1401 L
+6476 1401 mt 6496 1428 L
+6496 1428 mt 6506 1442 L
+6506 1442 mt 6515 1456 L
+6515 1456 mt 6533 1484 L
+6533 1484 mt 6540 1496 L
+6540 1496 mt 6549 1511 L
+6549 1511 mt 6565 1539 L
+6565 1539 mt 6575 1559 L
+6575 1559 mt 6579 1566 L
+6579 1566 mt 6592 1594 L
+6592 1594 mt 6604 1621 L
+6604 1621 mt 6610 1638 L
+6610 1638 mt 6615 1649 L
+6615 1649 mt 6624 1676 L
+6624 1676 mt 6633 1704 L
+6633 1704 mt 6641 1731 L
+6641 1731 mt 6645 1749 L
+1763 4563 mt 1768 4537 L
+1768 4537 mt 1787 4510 L
+1787 4510 mt 1798 4500 L
+1798 4500 mt 1821 4482 L
+1821 4482 mt 1833 4475 L
+1833 4475 mt 1861 4455 L
+1861 4455 mt 1868 4450 L
+1868 4450 mt 1894 4427 L
+1894 4427 mt 1903 4417 L
+1903 4417 mt 1919 4400 L
+1919 4400 mt 1938 4375 L
+1938 4375 mt 1941 4372 L
+1941 4372 mt 1972 4354 L
+1972 4354 mt 2007 4357 L
+2007 4357 mt 2040 4372 L
+2040 4372 mt 2042 4374 L
+2042 4374 mt 2077 4398 L
+2077 4398 mt 2079 4400 L
+2079 4400 mt 2112 4423 L
+2112 4423 mt 2118 4427 L
+2118 4427 mt 2147 4445 L
+2147 4445 mt 2164 4455 L
+2164 4455 mt 2182 4464 L
+2182 4464 mt 2217 4480 L
+2217 4480 mt 2222 4482 L
+2222 4482 mt 2251 4494 L
+2251 4494 mt 2286 4507 L
+2286 4507 mt 2296 4510 L
+2296 4510 mt 2321 4519 L
+2321 4519 mt 2356 4531 L
+2356 4531 mt 2372 4537 L
+2372 4537 mt 2391 4547 L
+2391 4547 mt 2418 4565 L
+2418 4565 mt 2426 4582 L
+2426 4582 mt 2433 4592 L
+2433 4592 mt 2426 4602 L
+2426 4602 mt 2417 4620 L
+2417 4620 mt 2391 4636 L
+2391 4636 mt 2364 4648 L
+2364 4648 mt 2356 4651 L
+2356 4651 mt 2321 4662 L
+2321 4662 mt 2286 4673 L
+2286 4673 mt 2278 4675 L
+2278 4675 mt 2251 4681 L
+2251 4681 mt 2217 4687 L
+2217 4687 mt 2182 4691 L
+2182 4691 mt 2147 4692 L
+2147 4692 mt 2112 4691 L
+2112 4691 mt 2077 4689 L
+2077 4689 mt 2042 4685 L
+2042 4685 mt 2007 4679 L
+2007 4679 mt 1986 4675 L
+1986 4675 mt 1972 4672 L
+1972 4672 mt 1938 4664 L
+1938 4664 mt 1903 4654 L
+1903 4654 mt 1883 4648 L
+1883 4648 mt 1868 4642 L
+1868 4642 mt 1833 4627 L
+1833 4627 mt 1819 4620 L
+1819 4620 mt 1798 4606 L
+1798 4606 mt 1779 4592 L
+1779 4592 mt 1763 4565 L
+1763 4565 mt 1763 4565 L
+1763 4565 mt 1763 4563 L
+6610 1784 mt 6611 1786 L
+6611 1786 mt 6616 1814 L
+6616 1814 mt 6620 1841 L
+6620 1841 mt 6623 1869 L
+6623 1869 mt 6626 1896 L
+6626 1896 mt 6628 1924 L
+6628 1924 mt 6629 1951 L
+6629 1951 mt 6629 1979 L
+6629 1979 mt 6629 2006 L
+6629 2006 mt 6628 2034 L
+6628 2034 mt 6627 2061 L
+6627 2061 mt 6624 2089 L
+6624 2089 mt 6621 2116 L
+6621 2116 mt 6618 2144 L
+6618 2144 mt 6613 2171 L
+6613 2171 mt 6610 2188 L
+6610 2188 mt 6608 2199 L
+6608 2199 mt 6602 2226 L
+6602 2226 mt 6596 2254 L
+6596 2254 mt 6589 2281 L
+6589 2281 mt 6581 2309 L
+6581 2309 mt 6575 2326 L
+6575 2326 mt 6572 2336 L
+6572 2336 mt 6563 2364 L
+6563 2364 mt 6553 2391 L
+6553 2391 mt 6542 2419 L
+6542 2419 mt 6540 2422 L
+6540 2422 mt 6529 2446 L
+6529 2446 mt 6516 2474 L
+6516 2474 mt 6506 2493 L
+6506 2493 mt 6501 2502 L
+6501 2502 mt 6484 2529 L
+6484 2529 mt 6471 2549 L
+6471 2549 mt 6465 2557 L
+6465 2557 mt 6444 2584 L
+6444 2584 mt 6436 2594 L
+6436 2594 mt 6420 2612 L
+6420 2612 mt 6401 2631 L
+6401 2631 mt 6392 2639 L
+6392 2639 mt 6366 2661 L
+6366 2661 mt 6359 2667 L
+6359 2667 mt 6331 2687 L
+6331 2687 mt 6320 2694 L
+6320 2694 mt 6296 2709 L
+6296 2709 mt 6272 2722 L
+6272 2722 mt 6261 2727 L
+6261 2727 mt 6227 2742 L
+6227 2742 mt 6192 2746 L
+6192 2746 mt 6157 2743 L
+6157 2743 mt 6122 2739 L
+6122 2739 mt 6087 2736 L
+6087 2736 mt 6052 2737 L
+6052 2737 mt 6017 2742 L
+6017 2742 mt 5987 2749 L
+5987 2749 mt 5983 2751 L
+5983 2751 mt 5948 2765 L
+5948 2765 mt 5918 2777 L
+5918 2777 mt 5913 2779 L
+5913 2779 mt 5878 2791 L
+5878 2791 mt 5843 2801 L
+5843 2801 mt 5826 2804 L
+5826 2804 mt 5808 2807 L
+5808 2807 mt 5773 2809 L
+5773 2809 mt 5741 2804 L
+5741 2804 mt 5738 2804 L
+5738 2804 mt 5704 2788 L
+5704 2788 mt 5687 2777 L
+5687 2777 mt 5669 2763 L
+5669 2763 mt 5655 2749 L
+5655 2749 mt 5634 2727 L
+5634 2727 mt 5630 2722 L
+5630 2722 mt 5615 2694 L
+5615 2694 mt 5604 2667 L
+5604 2667 mt 5599 2648 L
+5599 2648 mt 5597 2639 L
+5597 2639 mt 5597 2612 L
+5597 2612 mt 5599 2602 L
+5599 2602 mt 5603 2584 L
+5603 2584 mt 5612 2557 L
+5612 2557 mt 5620 2529 L
+5620 2529 mt 5626 2502 L
+5626 2502 mt 5627 2474 L
+5627 2474 mt 5628 2446 L
+5628 2446 mt 5631 2419 L
+5631 2419 mt 5633 2391 L
+5633 2391 mt 5634 2390 L
+5634 2390 mt 5640 2364 L
+5640 2364 mt 5650 2336 L
+5650 2336 mt 5661 2309 L
+5661 2309 mt 5669 2288 L
+5669 2288 mt 5671 2281 L
+5671 2281 mt 5679 2254 L
+5679 2254 mt 5682 2226 L
+5682 2226 mt 5681 2199 L
+5681 2199 mt 5675 2171 L
+5675 2171 mt 5669 2155 L
+5669 2155 mt 5664 2144 L
+5664 2144 mt 5651 2116 L
+5651 2116 mt 5636 2089 L
+5636 2089 mt 5634 2085 L
+5634 2085 mt 5620 2061 L
+5620 2061 mt 5605 2034 L
+5605 2034 mt 5599 2024 L
+5599 2024 mt 5589 2006 L
+5589 2006 mt 5572 1979 L
+5572 1979 mt 5564 1967 L
+5564 1967 mt 5553 1951 L
+5553 1951 mt 5532 1924 L
+5532 1924 mt 5529 1921 L
+5529 1921 mt 5508 1896 L
+5508 1896 mt 5494 1884 L
+5494 1884 mt 5479 1869 L
+5479 1869 mt 5459 1852 L
+5459 1852 mt 5447 1841 L
+5447 1841 mt 5425 1823 L
+5425 1823 mt 5413 1814 L
+5413 1814 mt 5390 1795 L
+5390 1795 mt 5379 1786 L
+5379 1786 mt 5355 1767 L
+5355 1767 mt 5343 1759 L
+5343 1759 mt 5320 1743 L
+5320 1743 mt 5299 1731 L
+5299 1731 mt 5285 1725 L
+5285 1725 mt 5250 1716 L
+5250 1716 mt 5215 1713 L
+5215 1713 mt 5181 1715 L
+5181 1715 mt 5146 1720 L
+5146 1720 mt 5111 1726 L
+5111 1726 mt 5085 1731 L
+5085 1731 mt 5076 1733 L
+5076 1733 mt 5041 1740 L
+5041 1740 mt 5006 1744 L
+5006 1744 mt 4971 1740 L
+4971 1740 mt 4958 1731 L
+4958 1731 mt 4954 1704 L
+4954 1704 mt 4966 1676 L
+4966 1676 mt 4971 1665 L
+4971 1665 mt 4981 1649 L
+4981 1649 mt 4992 1621 L
+4992 1621 mt 4999 1594 L
+4999 1594 mt 4998 1566 L
+4998 1566 mt 4988 1539 L
+4988 1539 mt 4971 1514 L
+4971 1514 mt 4968 1511 L
+4968 1511 mt 4936 1487 L
+4936 1487 mt 4929 1484 L
+4929 1484 mt 4902 1472 L
+4902 1472 mt 4867 1464 L
+4867 1464 mt 4832 1463 L
+4832 1463 mt 4797 1463 L
+4797 1463 mt 4762 1463 L
+4762 1463 mt 4727 1461 L
+4727 1461 mt 4692 1457 L
+4692 1457 mt 4688 1456 L
+4688 1456 mt 4657 1448 L
+4657 1448 mt 4625 1428 L
+4625 1428 mt 4623 1426 L
+4623 1426 mt 4603 1401 L
+4603 1401 mt 4588 1374 L
+4588 1374 mt 4587 1373 L
+4587 1373 mt 4572 1346 L
+4572 1346 mt 4558 1318 L
+4558 1318 mt 4553 1308 L
+4553 1308 mt 4544 1291 L
+4544 1291 mt 4536 1263 L
+4536 1263 mt 4535 1236 L
+4535 1236 mt 4546 1208 L
+4546 1208 mt 4553 1196 L
+4553 1196 mt 4562 1181 L
+4562 1181 mt 4573 1153 L
+4573 1153 mt 4578 1126 L
+4578 1126 mt 4572 1098 L
+4572 1098 mt 4557 1071 L
+4557 1071 mt 4553 1065 L
+4553 1065 mt 4531 1043 L
+4531 1043 mt 4518 1032 L
+4518 1032 mt 4498 1016 L
+4498 1016 mt 4483 1005 L
+4483 1005 mt 4462 988 L
+4462 988 mt 4448 978 L
+4448 978 mt 4426 961 L
+4426 961 mt 4413 951 L
+4413 951 mt 4389 933 L
+4389 933 mt 4379 925 L
+4379 925 mt 4352 906 L
+4352 906 mt 4344 900 L
+4344 900 mt 4313 878 L
+4313 878 mt 4309 875 L
+4309 875 mt 4274 851 L
+4274 851 mt 4274 850 L
+4274 850 mt 4239 825 L
+4239 825 mt 4237 823 L
+4237 823 mt 4204 797 L
+4204 797 mt 4202 796 L
+4202 796 mt 4169 768 L
+4169 768 mt 4169 768 L
+4169 768 mt 4134 741 L
+4134 741 mt 4134 741 L
+4134 741 mt 4100 716 L
+4100 716 mt 4096 713 L
+4096 713 mt 4065 693 L
+4065 693 mt 4052 686 L
+4052 686 mt 4030 674 L
+4030 674 mt 3998 658 L
+3998 658 mt 3995 657 L
+3995 657 mt 3960 642 L
+3960 642 mt 3933 631 L
+3933 631 mt 3925 628 L
+3925 628 mt 3890 616 L
+3890 616 mt 3855 605 L
+3855 605 mt 3849 603 L
+3849 603 mt 3821 595 L
+3821 595 mt 3786 585 L
+3786 585 mt 3752 576 L
+3752 576 mt 3751 575 L
+3751 575 mt 3716 566 L
+3716 566 mt 3681 556 L
+3681 556 mt 3651 548 L
+3651 548 mt 3646 547 L
+3646 547 mt 3611 537 L
+3611 537 mt 3577 526 L
+3577 526 mt 3560 521 L
+3560 521 mt 3542 514 L
+3542 514 mt 3507 502 L
+3507 502 mt 3483 493 L
+3483 493 mt 3472 489 L
+3472 489 mt 3437 474 L
+3437 474 mt 3420 466 L
+3420 466 mt 3402 452 L
+3402 452 mt 3387 438 L
+3387 438 mt 3381 411 L
+3381 411 mt 3397 383 L
+3397 383 mt 3402 379 L
+3402 379 mt 3437 358 L
+3437 358 mt 3445 355 L
+3445 355 mt 3472 348 L
+3472 348 mt 3507 343 L
+3507 343 mt 3542 338 L
+3542 338 mt 3577 333 L
+3577 333 mt 3599 328 L
+3599 328 mt 3611 326 L
+3611 326 mt 3646 317 L
+3646 317 mt 3681 307 L
+3681 307 mt 3708 300 L
+3708 300 mt 3716 299 L
+3716 299 mt 3751 291 L
+3751 291 mt 3786 283 L
+3786 283 mt 3821 276 L
+3821 276 mt 3834 273 L
+3834 273 mt 3855 269 L
+3855 269 mt 3890 261 L
+3890 261 mt 3925 253 L
+3925 253 mt 3954 245 L
+3954 245 mt 3960 244 L
+3960 244 mt 3995 236 L
+3995 236 mt 4030 227 L
+4030 227 mt 4065 219 L
+4065 219 mt 4069 218 L
+4069 218 mt 4100 211 L
+4100 211 mt 4134 203 L
+4134 203 mt 4169 195 L
+4169 195 mt 4193 190 L
+4193 190 mt 4204 188 L
+4204 188 mt 4239 181 L
+4239 181 mt 4274 174 L
+4274 174 mt 4309 168 L
+4309 168 mt 4337 163 L
+4337 163 mt 4344 162 L
+4344 162 mt 4379 156 L
+4379 156 mt 4413 151 L
+4413 151 mt 4448 147 L
+4448 147 mt 4483 143 L
+4483 143 mt 4518 139 L
+4518 139 mt 4553 137 L
+4553 137 mt 4570 135 L
+4570 135 mt 4588 134 L
+4588 134 mt 4623 132 L
+4623 132 mt 4657 131 L
+4657 131 mt 4692 130 L
+4692 130 mt 4727 130 L
+4727 130 mt 4762 130 L
+4762 130 mt 4797 130 L
+4797 130 mt 4832 132 L
+4832 132 mt 4867 134 L
+4867 134 mt 4892 135 L
+4892 135 mt 4902 136 L
+4902 136 mt 4936 139 L
+4936 139 mt 4971 144 L
+4971 144 mt 5006 149 L
+5006 149 mt 5041 155 L
+5041 155 mt 5076 162 L
+5076 162 mt 5078 163 L
+5078 163 mt 5111 171 L
+5111 171 mt 5146 180 L
+5146 180 mt 5176 190 L
+5176 190 mt 5181 192 L
+5181 192 mt 5215 205 L
+5215 205 mt 5247 218 L
+5247 218 mt 5250 219 L
+5250 219 mt 5285 236 L
+5285 236 mt 5303 245 L
+5303 245 mt 5320 255 L
+5320 255 mt 5350 273 L
+5350 273 mt 5355 276 L
+5355 276 mt 5390 299 L
+5390 299 mt 5392 300 L
+5392 300 mt 5425 324 L
+5425 324 mt 5430 328 L
+5430 328 mt 5459 352 L
+5459 352 mt 5464 355 L
+5464 355 mt 5494 381 L
+5494 381 mt 5497 383 L
+5497 383 mt 5528 411 L
+5528 411 mt 5529 412 L
+5529 412 mt 5558 438 L
+5558 438 mt 5564 443 L
+5564 443 mt 5588 466 L
+5588 466 mt 5599 476 L
+5599 476 mt 5616 493 L
+5616 493 mt 5634 510 L
+5634 510 mt 5644 521 L
+5644 521 mt 5669 545 L
+5669 545 mt 5671 548 L
+5671 548 mt 5698 576 L
+5698 576 mt 5704 582 L
+5704 582 mt 5724 603 L
+5724 603 mt 5738 619 L
+5738 619 mt 5749 631 L
+5749 631 mt 5773 658 L
+5773 658 mt 5774 658 L
+5774 658 mt 5798 686 L
+5798 686 mt 5808 697 L
+5808 697 mt 5823 713 L
+5823 713 mt 5843 736 L
+5843 736 mt 5847 741 L
+5847 741 mt 5872 768 L
+5872 768 mt 5878 775 L
+5878 775 mt 5896 796 L
+5896 796 mt 5913 815 L
+5913 815 mt 5921 823 L
+5921 823 mt 5945 851 L
+5945 851 mt 5948 854 L
+5948 854 mt 5970 878 L
+5970 878 mt 5983 892 L
+5983 892 mt 5995 906 L
+5995 906 mt 6017 931 L
+6017 931 mt 6019 933 L
+6019 933 mt 6044 961 L
+6044 961 mt 6052 970 L
+6052 970 mt 6069 988 L
+6069 988 mt 6087 1009 L
+6087 1009 mt 6093 1016 L
+6093 1016 mt 6118 1043 L
+6118 1043 mt 6122 1048 L
+6122 1048 mt 6142 1071 L
+6142 1071 mt 6157 1087 L
+6157 1087 mt 6167 1098 L
+6167 1098 mt 6192 1126 L
+6192 1126 mt 6192 1126 L
+6192 1126 mt 6216 1153 L
+6216 1153 mt 6227 1165 L
+6227 1165 mt 6241 1181 L
+6241 1181 mt 6261 1204 L
+6261 1204 mt 6266 1208 L
+6266 1208 mt 6291 1236 L
+6291 1236 mt 6296 1242 L
+6296 1242 mt 6316 1263 L
+6316 1263 mt 6331 1281 L
+6331 1281 mt 6340 1291 L
+6340 1291 mt 6364 1318 L
+6364 1318 mt 6366 1320 L
+6366 1320 mt 6388 1346 L
+6388 1346 mt 6401 1362 L
+6401 1362 mt 6410 1373 L
+6410 1373 mt 6432 1401 L
+6432 1401 mt 6436 1406 L
+6436 1406 mt 6452 1428 L
+6452 1428 mt 6471 1454 L
+6471 1454 mt 6472 1456 L
+6472 1456 mt 6490 1484 L
+6490 1484 mt 6506 1509 L
+6506 1509 mt 6507 1511 L
+6507 1511 mt 6523 1539 L
+6523 1539 mt 6537 1566 L
+6537 1566 mt 6540 1573 L
+6540 1573 mt 6550 1594 L
+6550 1594 mt 6562 1621 L
+6562 1621 mt 6573 1649 L
+6573 1649 mt 6575 1656 L
+6575 1656 mt 6582 1676 L
+6582 1676 mt 6591 1704 L
+6591 1704 mt 6599 1731 L
+6599 1731 mt 6605 1759 L
+6605 1759 mt 6610 1784 L
+ 752 2304 mt 762 2281 L
+ 762 2281 mt 777 2254 L
+ 777 2254 mt 787 2238 L
+ 787 2238 mt 795 2226 L
+ 795 2226 mt 816 2199 L
+ 816 2199 mt 822 2192 L
+ 822 2192 mt 841 2171 L
+ 841 2171 mt 857 2153 L
+ 857 2153 mt 868 2144 L
+ 868 2144 mt 890 2116 L
+ 890 2116 mt 892 2115 L
+ 892 2115 mt 918 2089 L
+ 918 2089 mt 926 2084 L
+ 926 2084 mt 938 2089 L
+ 938 2089 mt 961 2104 L
+ 961 2104 mt 973 2116 L
+ 973 2116 mt 995 2144 L
+ 995 2144 mt 996 2145 L
+ 996 2145 mt 1014 2171 L
+1014 2171 mt 1031 2197 L
+1031 2197 mt 1032 2199 L
+1032 2199 mt 1052 2226 L
+1052 2226 mt 1066 2244 L
+1066 2244 mt 1074 2254 L
+1074 2254 mt 1101 2278 L
+1101 2278 mt 1105 2281 L
+1105 2281 mt 1136 2301 L
+1136 2301 mt 1149 2309 L
+1149 2309 mt 1170 2319 L
+1170 2319 mt 1205 2333 L
+1205 2333 mt 1215 2336 L
+1215 2336 mt 1240 2346 L
+1240 2346 mt 1275 2360 L
+1275 2360 mt 1283 2364 L
+1283 2364 mt 1308 2391 L
+1308 2391 mt 1310 2405 L
+1310 2405 mt 1313 2419 L
+1313 2419 mt 1313 2446 L
+1313 2446 mt 1315 2474 L
+1315 2474 mt 1327 2502 L
+1327 2502 mt 1345 2520 L
+1345 2520 mt 1355 2529 L
+1355 2529 mt 1380 2545 L
+1380 2545 mt 1395 2557 L
+1395 2557 mt 1415 2571 L
+1415 2571 mt 1428 2584 L
+1428 2584 mt 1449 2610 L
+1449 2610 mt 1450 2612 L
+1450 2612 mt 1466 2639 L
+1466 2639 mt 1476 2667 L
+1476 2667 mt 1484 2691 L
+1484 2691 mt 1485 2694 L
+1485 2694 mt 1497 2722 L
+1497 2722 mt 1514 2749 L
+1514 2749 mt 1519 2755 L
+1519 2755 mt 1537 2777 L
+1537 2777 mt 1554 2794 L
+1554 2794 mt 1565 2804 L
+1565 2804 mt 1589 2826 L
+1589 2826 mt 1596 2832 L
+1596 2832 mt 1624 2857 L
+1624 2857 mt 1626 2859 L
+1626 2859 mt 1653 2887 L
+1653 2887 mt 1659 2894 L
+1659 2894 mt 1677 2914 L
+1677 2914 mt 1694 2934 L
+1694 2934 mt 1700 2942 L
+1700 2942 mt 1727 2969 L
+1727 2969 mt 1728 2970 L
+1728 2970 mt 1757 2997 L
+1757 2997 mt 1763 3003 L
+1763 3003 mt 1783 3024 L
+1783 3024 mt 1798 3049 L
+1798 3049 mt 1800 3052 L
+1800 3052 mt 1805 3079 L
+1805 3079 mt 1798 3093 L
+1798 3093 mt 1782 3107 L
+1782 3107 mt 1763 3112 L
+1763 3112 mt 1728 3108 L
+1728 3108 mt 1723 3107 L
+1723 3107 mt 1694 3097 L
+1694 3097 mt 1659 3086 L
+1659 3086 mt 1638 3079 L
+1638 3079 mt 1624 3074 L
+1624 3074 mt 1589 3063 L
+1589 3063 mt 1554 3055 L
+1554 3055 mt 1542 3052 L
+1542 3052 mt 1519 3045 L
+1519 3045 mt 1484 3036 L
+1484 3036 mt 1449 3027 L
+1449 3027 mt 1438 3024 L
+1438 3024 mt 1415 3019 L
+1415 3019 mt 1380 3012 L
+1380 3012 mt 1345 3005 L
+1345 3005 mt 1310 2999 L
+1310 2999 mt 1296 2997 L
+1296 2997 mt 1275 2993 L
+1275 2993 mt 1240 2983 L
+1240 2983 mt 1208 2969 L
+1208 2969 mt 1205 2968 L
+1205 2968 mt 1170 2945 L
+1170 2945 mt 1165 2942 L
+1165 2942 mt 1136 2924 L
+1136 2924 mt 1113 2914 L
+1113 2914 mt 1101 2909 L
+1101 2909 mt 1066 2897 L
+1066 2897 mt 1031 2888 L
+1031 2888 mt 1028 2887 L
+1028 2887 mt 996 2879 L
+ 996 2879 mt 961 2869 L
+ 961 2869 mt 934 2859 L
+ 934 2859 mt 926 2856 L
+ 926 2856 mt 892 2838 L
+ 892 2838 mt 882 2832 L
+ 882 2832 mt 857 2812 L
+ 857 2812 mt 848 2804 L
+ 848 2804 mt 822 2778 L
+ 822 2778 mt 821 2777 L
+ 821 2777 mt 799 2749 L
+ 799 2749 mt 787 2731 L
+ 787 2731 mt 781 2722 L
+ 781 2722 mt 766 2694 L
+ 766 2694 mt 754 2667 L
+ 754 2667 mt 752 2662 L
+ 752 2662 mt 744 2639 L
+ 744 2639 mt 736 2612 L
+ 736 2612 mt 730 2584 L
+ 730 2584 mt 725 2557 L
+ 725 2557 mt 722 2529 L
+ 722 2529 mt 721 2502 L
+ 721 2502 mt 720 2474 L
+ 720 2474 mt 721 2446 L
+ 721 2446 mt 723 2419 L
+ 723 2419 mt 727 2391 L
+ 727 2391 mt 733 2364 L
+ 733 2364 mt 740 2336 L
+ 740 2336 mt 750 2309 L
+ 750 2309 mt 752 2304 L
+ 892 1071 mt 898 1043 L
+ 898 1043 mt 902 1016 L
+ 902 1016 mt 901 988 L
+ 901 988 mt 898 961 L
+ 898 961 mt 895 933 L
+ 895 933 mt 896 906 L
+ 896 906 mt 899 878 L
+ 899 878 mt 909 851 L
+ 909 851 mt 924 823 L
+ 924 823 mt 926 819 L
+ 926 819 mt 939 796 L
+ 939 796 mt 953 768 L
+ 953 768 mt 961 756 L
+ 961 756 mt 973 741 L
+ 973 741 mt 996 713 L
+ 996 713 mt 996 713 L
+ 996 713 mt 1023 686 L
+1023 686 mt 1031 676 L
+1031 676 mt 1045 658 L
+1045 658 mt 1060 631 L
+1060 631 mt 1066 612 L
+1066 612 mt 1069 603 L
+1069 603 mt 1083 576 L
+1083 576 mt 1101 550 L
+1101 550 mt 1102 548 L
+1102 548 mt 1127 521 L
+1127 521 mt 1136 514 L
+1136 514 mt 1165 493 L
+1165 493 mt 1170 489 L
+1170 489 mt 1204 466 L
+1204 466 mt 1205 465 L
+1205 465 mt 1240 447 L
+1240 447 mt 1263 438 L
+1263 438 mt 1275 434 L
+1275 434 mt 1310 425 L
+1310 425 mt 1345 426 L
+1345 426 mt 1375 438 L
+1375 438 mt 1380 440 L
+1380 440 mt 1415 456 L
+1415 456 mt 1442 466 L
+1442 466 mt 1449 469 L
+1449 469 mt 1484 478 L
+1484 478 mt 1519 482 L
+1519 482 mt 1554 484 L
+1554 484 mt 1589 485 L
+1589 485 mt 1624 484 L
+1624 484 mt 1659 481 L
+1659 481 mt 1694 475 L
+1694 475 mt 1721 466 L
+1721 466 mt 1728 463 L
+1728 463 mt 1763 450 L
+1763 450 mt 1786 438 L
+1786 438 mt 1798 433 L
+1798 433 mt 1833 417 L
+1833 417 mt 1847 411 L
+1847 411 mt 1868 403 L
+1868 403 mt 1903 393 L
+1903 393 mt 1938 396 L
+1938 396 mt 1963 411 L
+1963 411 mt 1972 424 L
+1972 424 mt 1986 438 L
+1986 438 mt 1994 466 L
+1994 466 mt 1981 493 L
+1981 493 mt 1972 499 L
+1972 499 mt 1945 521 L
+1945 521 mt 1938 524 L
+1938 524 mt 1903 545 L
+1903 545 mt 1899 548 L
+1899 548 mt 1868 567 L
+1868 567 mt 1853 576 L
+1853 576 mt 1833 586 L
+1833 586 mt 1802 603 L
+1802 603 mt 1798 605 L
+1798 605 mt 1763 620 L
+1763 620 mt 1728 629 L
+1728 629 mt 1694 625 L
+1694 625 mt 1659 617 L
+1659 617 mt 1624 609 L
+1624 609 mt 1591 603 L
+1591 603 mt 1589 603 L
+1589 603 mt 1554 599 L
+1554 599 mt 1519 600 L
+1519 600 mt 1503 603 L
+1503 603 mt 1484 606 L
+1484 606 mt 1449 618 L
+1449 618 mt 1431 631 L
+1431 631 mt 1415 644 L
+1415 644 mt 1402 658 L
+1402 658 mt 1382 686 L
+1382 686 mt 1380 689 L
+1380 689 mt 1365 713 L
+1365 713 mt 1349 741 L
+1349 741 mt 1345 747 L
+1345 747 mt 1332 768 L
+1332 768 mt 1312 796 L
+1312 796 mt 1310 798 L
+1310 798 mt 1289 823 L
+1289 823 mt 1275 838 L
+1275 838 mt 1262 851 L
+1262 851 mt 1240 871 L
+1240 871 mt 1232 878 L
+1232 878 mt 1205 904 L
+1205 904 mt 1203 906 L
+1203 906 mt 1176 933 L
+1176 933 mt 1170 940 L
+1170 940 mt 1153 961 L
+1153 961 mt 1136 988 L
+1136 988 mt 1136 990 L
+1136 990 mt 1126 1016 L
+1126 1016 mt 1119 1043 L
+1119 1043 mt 1115 1071 L
+1115 1071 mt 1112 1098 L
+1112 1098 mt 1109 1126 L
+1109 1126 mt 1105 1153 L
+1105 1153 mt 1101 1181 L
+1101 1181 mt 1101 1183 L
+1101 1183 mt 1096 1208 L
+1096 1208 mt 1088 1236 L
+1088 1236 mt 1077 1263 L
+1077 1263 mt 1066 1281 L
+1066 1281 mt 1060 1291 L
+1060 1291 mt 1038 1318 L
+1038 1318 mt 1031 1325 L
+1031 1325 mt 1011 1346 L
+1011 1346 mt 996 1360 L
+ 996 1360 mt 978 1373 L
+ 978 1373 mt 961 1385 L
+ 961 1385 mt 926 1396 L
+ 926 1396 mt 893 1373 L
+ 893 1373 mt 895 1346 L
+ 895 1346 mt 896 1318 L
+ 896 1318 mt 896 1291 L
+ 896 1291 mt 892 1275 L
+ 892 1275 mt 889 1263 L
+ 889 1263 mt 881 1236 L
+ 881 1236 mt 870 1208 L
+ 870 1208 mt 865 1181 L
+ 865 1181 mt 868 1153 L
+ 868 1153 mt 875 1126 L
+ 875 1126 mt 884 1098 L
+ 884 1098 mt 892 1071 L
+ 892 1071 mt 892 1071 L
+1833 4551 mt 1840 4537 L
+1840 4537 mt 1868 4512 L
+1868 4512 mt 1870 4510 L
+1870 4510 mt 1903 4486 L
+1903 4486 mt 1908 4482 L
+1908 4482 mt 1938 4462 L
+1938 4462 mt 1951 4455 L
+1951 4455 mt 1972 4443 L
+1972 4443 mt 2007 4435 L
+2007 4435 mt 2042 4440 L
+2042 4440 mt 2077 4454 L
+2077 4454 mt 2078 4455 L
+2078 4455 mt 2112 4472 L
+2112 4472 mt 2133 4482 L
+2133 4482 mt 2147 4489 L
+2147 4489 mt 2182 4506 L
+2182 4506 mt 2190 4510 L
+2190 4510 mt 2217 4522 L
+2217 4522 mt 2251 4537 L
+2251 4537 mt 2254 4537 L
+2254 4537 mt 2286 4556 L
+2286 4556 mt 2303 4565 L
+2303 4565 mt 2315 4592 L
+2315 4592 mt 2291 4620 L
+2291 4620 mt 2286 4622 L
+2286 4622 mt 2251 4638 L
+2251 4638 mt 2221 4648 L
+2221 4648 mt 2217 4649 L
+2217 4649 mt 2182 4656 L
+2182 4656 mt 2147 4659 L
+2147 4659 mt 2112 4659 L
+2112 4659 mt 2077 4656 L
+2077 4656 mt 2042 4652 L
+2042 4652 mt 2011 4648 L
+2011 4648 mt 2007 4647 L
+2007 4647 mt 1972 4640 L
+1972 4640 mt 1938 4632 L
+1938 4632 mt 1903 4622 L
+1903 4622 mt 1898 4620 L
+1898 4620 mt 1868 4606 L
+1868 4606 mt 1841 4592 L
+1841 4592 mt 1833 4579 L
+1833 4579 mt 1827 4565 L
+1827 4565 mt 1833 4551 L
+2077 3418 mt 2112 3433 L
+2112 3433 mt 2118 3437 L
+2118 3437 mt 2147 3453 L
+2147 3453 mt 2164 3464 L
+2164 3464 mt 2182 3475 L
+2182 3475 mt 2206 3492 L
+2206 3492 mt 2217 3500 L
+2217 3500 mt 2241 3519 L
+2241 3519 mt 2251 3528 L
+2251 3528 mt 2268 3547 L
+2268 3547 mt 2286 3574 L
+2286 3574 mt 2286 3575 L
+2286 3575 mt 2292 3602 L
+2292 3602 mt 2287 3630 L
+2287 3630 mt 2286 3630 L
+2286 3630 mt 2251 3656 L
+2251 3656 mt 2250 3657 L
+2250 3657 mt 2217 3665 L
+2217 3665 mt 2182 3665 L
+2182 3665 mt 2152 3657 L
+2152 3657 mt 2147 3654 L
+2147 3654 mt 2127 3630 L
+2127 3630 mt 2112 3607 L
+2112 3607 mt 2110 3602 L
+2110 3602 mt 2104 3575 L
+2104 3575 mt 2098 3547 L
+2098 3547 mt 2089 3519 L
+2089 3519 mt 2077 3493 L
+2077 3493 mt 2077 3492 L
+2077 3492 mt 2070 3464 L
+2070 3464 mt 2064 3437 L
+2064 3437 mt 2077 3418 L
+6575 1830 mt 6577 1841 L
+6577 1841 mt 6580 1869 L
+6580 1869 mt 6582 1896 L
+6582 1896 mt 6584 1924 L
+6584 1924 mt 6584 1951 L
+6584 1951 mt 6584 1979 L
+6584 1979 mt 6584 2006 L
+6584 2006 mt 6582 2034 L
+6582 2034 mt 6580 2061 L
+6580 2061 mt 6578 2089 L
+6578 2089 mt 6575 2108 L
+6575 2108 mt 6574 2116 L
+6574 2116 mt 6570 2144 L
+6570 2144 mt 6566 2171 L
+6566 2171 mt 6560 2199 L
+6560 2199 mt 6554 2226 L
+6554 2226 mt 6547 2254 L
+6547 2254 mt 6540 2279 L
+6540 2279 mt 6540 2281 L
+6540 2281 mt 6532 2309 L
+6532 2309 mt 6523 2336 L
+6523 2336 mt 6513 2364 L
+6513 2364 mt 6506 2384 L
+6506 2384 mt 6503 2391 L
+6503 2391 mt 6491 2419 L
+6491 2419 mt 6478 2446 L
+6478 2446 mt 6471 2460 L
+6471 2460 mt 6463 2474 L
+6463 2474 mt 6447 2502 L
+6447 2502 mt 6436 2517 L
+6436 2517 mt 6428 2529 L
+6428 2529 mt 6406 2557 L
+6406 2557 mt 6401 2562 L
+6401 2562 mt 6380 2584 L
+6380 2584 mt 6366 2597 L
+6366 2597 mt 6349 2612 L
+6349 2612 mt 6331 2626 L
+6331 2626 mt 6310 2639 L
+6310 2639 mt 6296 2648 L
+6296 2648 mt 6261 2664 L
+6261 2664 mt 6253 2667 L
+6253 2667 mt 6227 2674 L
+6227 2674 mt 6192 2677 L
+6192 2677 mt 6157 2676 L
+6157 2676 mt 6122 2675 L
+6122 2675 mt 6087 2675 L
+6087 2675 mt 6052 2678 L
+6052 2678 mt 6017 2682 L
+6017 2682 mt 5983 2689 L
+5983 2689 mt 5961 2694 L
+5961 2694 mt 5948 2697 L
+5948 2697 mt 5913 2705 L
+5913 2705 mt 5878 2710 L
+5878 2710 mt 5843 2711 L
+5843 2711 mt 5808 2708 L
+5808 2708 mt 5773 2700 L
+5773 2700 mt 5759 2694 L
+5759 2694 mt 5738 2684 L
+5738 2684 mt 5710 2667 L
+5710 2667 mt 5704 2661 L
+5704 2661 mt 5683 2639 L
+5683 2639 mt 5672 2612 L
+5672 2612 mt 5673 2584 L
+5673 2584 mt 5677 2557 L
+5677 2557 mt 5680 2529 L
+5680 2529 mt 5682 2502 L
+5682 2502 mt 5681 2474 L
+5681 2474 mt 5680 2446 L
+5680 2446 mt 5681 2419 L
+5681 2419 mt 5685 2391 L
+5685 2391 mt 5692 2364 L
+5692 2364 mt 5703 2336 L
+5703 2336 mt 5704 2334 L
+5704 2334 mt 5716 2309 L
+5716 2309 mt 5730 2281 L
+5730 2281 mt 5738 2266 L
+5738 2266 mt 5745 2254 L
+5745 2254 mt 5754 2226 L
+5754 2226 mt 5759 2199 L
+5759 2199 mt 5760 2171 L
+5760 2171 mt 5755 2144 L
+5755 2144 mt 5746 2116 L
+5746 2116 mt 5738 2102 L
+5738 2102 mt 5731 2089 L
+5731 2089 mt 5715 2061 L
+5715 2061 mt 5704 2044 L
+5704 2044 mt 5697 2034 L
+5697 2034 mt 5680 2006 L
+5680 2006 mt 5669 1989 L
+5669 1989 mt 5662 1979 L
+5662 1979 mt 5645 1951 L
+5645 1951 mt 5634 1936 L
+5634 1936 mt 5626 1924 L
+5626 1924 mt 5604 1896 L
+5604 1896 mt 5599 1890 L
+5599 1890 mt 5579 1869 L
+5579 1869 mt 5564 1856 L
+5564 1856 mt 5546 1841 L
+5546 1841 mt 5529 1829 L
+5529 1829 mt 5507 1814 L
+5507 1814 mt 5494 1806 L
+5494 1806 mt 5466 1786 L
+5466 1786 mt 5459 1782 L
+5459 1782 mt 5430 1759 L
+5430 1759 mt 5425 1754 L
+5425 1754 mt 5396 1731 L
+5396 1731 mt 5390 1727 L
+5390 1727 mt 5357 1704 L
+5357 1704 mt 5355 1703 L
+5355 1703 mt 5320 1684 L
+5320 1684 mt 5295 1676 L
+5295 1676 mt 5285 1673 L
+5285 1673 mt 5250 1669 L
+5250 1669 mt 5215 1669 L
+5215 1669 mt 5181 1673 L
+5181 1673 mt 5155 1676 L
+5155 1676 mt 5146 1677 L
+5146 1677 mt 5111 1681 L
+5111 1681 mt 5076 1680 L
+5076 1680 mt 5058 1676 L
+5058 1676 mt 5041 1649 L
+5041 1649 mt 5044 1621 L
+5044 1621 mt 5047 1594 L
+5047 1594 mt 5049 1566 L
+5049 1566 mt 5045 1539 L
+5045 1539 mt 5041 1526 L
+5041 1526 mt 5035 1511 L
+5035 1511 mt 5014 1484 L
+5014 1484 mt 5006 1476 L
+5006 1476 mt 4979 1456 L
+4979 1456 mt 4971 1451 L
+4971 1451 mt 4936 1435 L
+4936 1435 mt 4917 1428 L
+4917 1428 mt 4902 1424 L
+4902 1424 mt 4867 1418 L
+4867 1418 mt 4832 1416 L
+4832 1416 mt 4797 1416 L
+4797 1416 mt 4762 1415 L
+4762 1415 mt 4727 1409 L
+4727 1409 mt 4703 1401 L
+4703 1401 mt 4692 1396 L
+4692 1396 mt 4662 1373 L
+4662 1373 mt 4657 1368 L
+4657 1368 mt 4641 1346 L
+4641 1346 mt 4627 1318 L
+4627 1318 mt 4623 1306 L
+4623 1306 mt 4617 1291 L
+4617 1291 mt 4614 1263 L
+4614 1263 mt 4619 1236 L
+4619 1236 mt 4623 1229 L
+4623 1229 mt 4634 1208 L
+4634 1208 mt 4653 1181 L
+4653 1181 mt 4657 1174 L
+4657 1174 mt 4670 1153 L
+4670 1153 mt 4680 1126 L
+4680 1126 mt 4683 1098 L
+4683 1098 mt 4678 1071 L
+4678 1071 mt 4666 1043 L
+4666 1043 mt 4657 1031 L
+4657 1031 mt 4645 1016 L
+4645 1016 mt 4623 992 L
+4623 992 mt 4619 988 L
+4619 988 mt 4589 961 L
+4589 961 mt 4588 959 L
+4588 959 mt 4560 933 L
+4560 933 mt 4553 926 L
+4553 926 mt 4532 906 L
+4532 906 mt 4518 891 L
+4518 891 mt 4505 878 L
+4505 878 mt 4483 856 L
+4483 856 mt 4478 851 L
+4478 851 mt 4449 823 L
+4449 823 mt 4448 823 L
+4448 823 mt 4417 796 L
+4417 796 mt 4413 792 L
+4413 792 mt 4383 768 L
+4383 768 mt 4379 765 L
+4379 765 mt 4347 741 L
+4347 741 mt 4344 738 L
+4344 738 mt 4310 713 L
+4310 713 mt 4309 712 L
+4309 712 mt 4274 687 L
+4274 687 mt 4272 686 L
+4272 686 mt 4239 663 L
+4239 663 mt 4231 658 L
+4231 658 mt 4204 641 L
+4204 641 mt 4186 631 L
+4186 631 mt 4169 622 L
+4169 622 mt 4134 606 L
+4134 606 mt 4128 603 L
+4128 603 mt 4100 592 L
+4100 592 mt 4065 580 L
+4065 580 mt 4053 576 L
+4053 576 mt 4030 568 L
+4030 568 mt 3995 557 L
+3995 557 mt 3966 548 L
+3966 548 mt 3960 546 L
+3960 546 mt 3925 536 L
+3925 536 mt 3890 526 L
+3890 526 mt 3866 521 L
+3866 521 mt 3855 518 L
+3855 518 mt 3821 510 L
+3821 510 mt 3786 502 L
+3786 502 mt 3751 493 L
+3751 493 mt 3751 493 L
+3751 493 mt 3716 482 L
+3716 482 mt 3681 467 L
+3681 467 mt 3678 466 L
+3678 466 mt 3651 438 L
+3651 438 mt 3655 411 L
+3655 411 mt 3681 385 L
+3681 385 mt 3682 383 L
+3682 383 mt 3716 362 L
+3716 362 mt 3736 355 L
+3736 355 mt 3751 351 L
+3751 351 mt 3786 344 L
+3786 344 mt 3821 339 L
+3821 339 mt 3855 332 L
+3855 332 mt 3872 328 L
+3872 328 mt 3890 324 L
+3890 324 mt 3925 314 L
+3925 314 mt 3960 303 L
+3960 303 mt 3967 300 L
+3967 300 mt 3995 292 L
+3995 292 mt 4030 282 L
+4030 282 mt 4061 273 L
+4061 273 mt 4065 272 L
+4065 272 mt 4100 263 L
+4100 263 mt 4134 253 L
+4134 253 mt 4165 245 L
+4165 245 mt 4169 244 L
+4169 244 mt 4204 236 L
+4204 236 mt 4239 227 L
+4239 227 mt 4274 219 L
+4274 219 mt 4279 218 L
+4279 218 mt 4309 212 L
+4309 212 mt 4344 204 L
+4344 204 mt 4379 198 L
+4379 198 mt 4413 191 L
+4413 191 mt 4419 190 L
+4419 190 mt 4448 186 L
+4448 186 mt 4483 181 L
+4483 181 mt 4518 176 L
+4518 176 mt 4553 173 L
+4553 173 mt 4588 169 L
+4588 169 mt 4623 167 L
+4623 167 mt 4657 164 L
+4657 164 mt 4688 163 L
+4688 163 mt 4692 163 L
+4692 163 mt 4727 161 L
+4727 161 mt 4762 161 L
+4762 161 mt 4797 160 L
+4797 160 mt 4832 161 L
+4832 161 mt 4867 162 L
+4867 162 mt 4889 163 L
+4889 163 mt 4902 164 L
+4902 164 mt 4936 166 L
+4936 166 mt 4971 170 L
+4971 170 mt 5006 174 L
+5006 174 mt 5041 180 L
+5041 180 mt 5076 187 L
+5076 187 mt 5091 190 L
+5091 190 mt 5111 195 L
+5111 195 mt 5146 205 L
+5146 205 mt 5181 216 L
+5181 216 mt 5185 218 L
+5185 218 mt 5215 230 L
+5215 230 mt 5250 245 L
+5250 245 mt 5251 245 L
+5251 245 mt 5285 263 L
+5285 263 mt 5304 273 L
+5304 273 mt 5320 283 L
+5320 283 mt 5348 300 L
+5348 300 mt 5355 305 L
+5355 305 mt 5387 328 L
+5387 328 mt 5390 330 L
+5390 330 mt 5423 355 L
+5423 355 mt 5425 357 L
+5425 357 mt 5456 383 L
+5456 383 mt 5459 386 L
+5459 386 mt 5487 411 L
+5487 411 mt 5494 417 L
+5494 417 mt 5517 438 L
+5517 438 mt 5529 449 L
+5529 449 mt 5547 466 L
+5547 466 mt 5564 482 L
+5564 482 mt 5575 493 L
+5575 493 mt 5599 517 L
+5599 517 mt 5603 521 L
+5603 521 mt 5630 548 L
+5630 548 mt 5634 552 L
+5634 552 mt 5656 576 L
+5656 576 mt 5669 589 L
+5669 589 mt 5682 603 L
+5682 603 mt 5704 627 L
+5704 627 mt 5707 631 L
+5707 631 mt 5732 658 L
+5732 658 mt 5738 666 L
+5738 666 mt 5756 686 L
+5756 686 mt 5773 706 L
+5773 706 mt 5779 713 L
+5779 713 mt 5803 741 L
+5803 741 mt 5808 746 L
+5808 746 mt 5827 768 L
+5827 768 mt 5843 786 L
+5843 786 mt 5851 796 L
+5851 796 mt 5875 823 L
+5875 823 mt 5878 826 L
+5878 826 mt 5900 851 L
+5900 851 mt 5913 866 L
+5913 866 mt 5924 878 L
+5924 878 mt 5948 905 L
+5948 905 mt 5948 906 L
+5948 906 mt 5973 933 L
+5973 933 mt 5983 944 L
+5983 944 mt 5998 961 L
+5998 961 mt 6017 983 L
+6017 983 mt 6022 988 L
+6022 988 mt 6047 1016 L
+6047 1016 mt 6052 1022 L
+6052 1022 mt 6071 1043 L
+6071 1043 mt 6087 1061 L
+6087 1061 mt 6096 1071 L
+6096 1071 mt 6120 1098 L
+6120 1098 mt 6122 1101 L
+6122 1101 mt 6144 1126 L
+6144 1126 mt 6157 1140 L
+6157 1140 mt 6169 1153 L
+6169 1153 mt 6192 1179 L
+6192 1179 mt 6194 1181 L
+6194 1181 mt 6218 1208 L
+6218 1208 mt 6227 1218 L
+6227 1218 mt 6243 1236 L
+6243 1236 mt 6261 1256 L
+6261 1256 mt 6268 1263 L
+6268 1263 mt 6293 1291 L
+6293 1291 mt 6296 1295 L
+6296 1295 mt 6317 1318 L
+6317 1318 mt 6331 1334 L
+6331 1334 mt 6342 1346 L
+6342 1346 mt 6365 1373 L
+6365 1373 mt 6366 1375 L
+6366 1375 mt 6387 1401 L
+6387 1401 mt 6401 1419 L
+6401 1419 mt 6409 1428 L
+6409 1428 mt 6429 1456 L
+6429 1456 mt 6436 1466 L
+6436 1466 mt 6448 1484 L
+6448 1484 mt 6465 1511 L
+6465 1511 mt 6471 1521 L
+6471 1521 mt 6481 1539 L
+6481 1539 mt 6496 1566 L
+6496 1566 mt 6506 1586 L
+6506 1586 mt 6509 1594 L
+6509 1594 mt 6521 1621 L
+6521 1621 mt 6532 1649 L
+6532 1649 mt 6540 1673 L
+6540 1673 mt 6541 1676 L
+6541 1676 mt 6550 1704 L
+6550 1704 mt 6557 1731 L
+6557 1731 mt 6563 1759 L
+6563 1759 mt 6569 1786 L
+6569 1786 mt 6573 1814 L
+6573 1814 mt 6575 1830 L
+ 787 2363 mt 797 2336 L
+ 797 2336 mt 811 2309 L
+ 811 2309 mt 822 2292 L
+ 822 2292 mt 830 2281 L
+ 830 2281 mt 855 2254 L
+ 855 2254 mt 857 2253 L
+ 857 2253 mt 892 2228 L
+ 892 2228 mt 897 2226 L
+ 897 2226 mt 926 2216 L
+ 926 2216 mt 955 2226 L
+ 955 2226 mt 961 2228 L
+ 961 2228 mt 992 2254 L
+ 992 2254 mt 996 2257 L
+ 996 2257 mt 1021 2281 L
+1021 2281 mt 1031 2290 L
+1031 2290 mt 1054 2309 L
+1054 2309 mt 1066 2318 L
+1066 2318 mt 1092 2336 L
+1092 2336 mt 1101 2342 L
+1101 2342 mt 1136 2363 L
+1136 2363 mt 1138 2364 L
+1138 2364 mt 1170 2384 L
+1170 2384 mt 1182 2391 L
+1182 2391 mt 1201 2419 L
+1201 2419 mt 1205 2446 L
+1205 2446 mt 1205 2474 L
+1205 2474 mt 1205 2476 L
+1205 2476 mt 1208 2502 L
+1208 2502 mt 1218 2529 L
+1218 2529 mt 1238 2557 L
+1238 2557 mt 1240 2559 L
+1240 2559 mt 1275 2583 L
+1275 2583 mt 1277 2584 L
+1277 2584 mt 1310 2600 L
+1310 2600 mt 1332 2612 L
+1332 2612 mt 1345 2619 L
+1345 2619 mt 1371 2639 L
+1371 2639 mt 1380 2648 L
+1380 2648 mt 1394 2667 L
+1394 2667 mt 1410 2694 L
+1410 2694 mt 1415 2703 L
+1415 2703 mt 1423 2722 L
+1423 2722 mt 1438 2749 L
+1438 2749 mt 1449 2767 L
+1449 2767 mt 1457 2777 L
+1457 2777 mt 1480 2804 L
+1480 2804 mt 1484 2809 L
+1484 2809 mt 1506 2832 L
+1506 2832 mt 1519 2846 L
+1519 2846 mt 1532 2859 L
+1532 2859 mt 1554 2887 L
+1554 2887 mt 1554 2887 L
+1554 2887 mt 1570 2914 L
+1570 2914 mt 1581 2942 L
+1581 2942 mt 1578 2969 L
+1578 2969 mt 1554 2983 L
+1554 2983 mt 1519 2985 L
+1519 2985 mt 1484 2982 L
+1484 2982 mt 1449 2978 L
+1449 2978 mt 1415 2974 L
+1415 2974 mt 1385 2969 L
+1385 2969 mt 1380 2968 L
+1380 2968 mt 1345 2961 L
+1345 2961 mt 1310 2953 L
+1310 2953 mt 1275 2942 L
+1275 2942 mt 1275 2942 L
+1275 2942 mt 1240 2924 L
+1240 2924 mt 1226 2914 L
+1226 2914 mt 1205 2901 L
+1205 2901 mt 1181 2887 L
+1181 2887 mt 1170 2881 L
+1170 2881 mt 1136 2868 L
+1136 2868 mt 1108 2859 L
+1108 2859 mt 1101 2857 L
+1101 2857 mt 1066 2848 L
+1066 2848 mt 1031 2842 L
+1031 2842 mt 996 2837 L
+ 996 2837 mt 969 2832 L
+ 969 2832 mt 961 2830 L
+ 961 2830 mt 926 2819 L
+ 926 2819 mt 900 2804 L
+ 900 2804 mt 892 2799 L
+ 892 2799 mt 867 2777 L
+ 867 2777 mt 857 2765 L
+ 857 2765 mt 843 2749 L
+ 843 2749 mt 823 2722 L
+ 823 2722 mt 822 2720 L
+ 822 2720 mt 807 2694 L
+ 807 2694 mt 795 2667 L
+ 795 2667 mt 787 2644 L
+ 787 2644 mt 785 2639 L
+ 785 2639 mt 778 2612 L
+ 778 2612 mt 773 2584 L
+ 773 2584 mt 770 2557 L
+ 770 2557 mt 768 2529 L
+ 768 2529 mt 768 2502 L
+ 768 2502 mt 768 2474 L
+ 768 2474 mt 770 2446 L
+ 770 2446 mt 774 2419 L
+ 774 2419 mt 779 2391 L
+ 779 2391 mt 787 2364 L
+ 787 2364 mt 787 2363 L
+ 926 1167 mt 932 1153 L
+ 932 1153 mt 952 1126 L
+ 952 1126 mt 961 1110 L
+ 961 1110 mt 978 1098 L
+ 978 1098 mt 996 1072 L
+ 996 1072 mt 1013 1098 L
+1013 1098 mt 1007 1126 L
+1007 1126 mt 996 1148 L
+ 996 1148 mt 992 1153 L
+ 992 1153 mt 962 1181 L
+ 962 1181 mt 961 1181 L
+ 961 1181 mt 926 1184 L
+ 926 1184 mt 924 1181 L
+ 924 1181 mt 926 1167 L
+ 961 857 mt 963 851 L
+ 963 851 mt 977 823 L
+ 977 823 mt 991 796 L
+ 991 796 mt 996 786 L
+ 996 786 mt 1007 768 L
+1007 768 mt 1029 741 L
+1029 741 mt 1031 739 L
+1031 739 mt 1056 713 L
+1056 713 mt 1066 703 L
+1066 703 mt 1083 686 L
+1083 686 mt 1100 658 L
+1100 658 mt 1101 655 L
+1101 655 mt 1107 631 L
+1107 631 mt 1115 603 L
+1115 603 mt 1130 576 L
+1130 576 mt 1136 569 L
+1136 569 mt 1153 548 L
+1153 548 mt 1170 533 L
+1170 533 mt 1187 521 L
+1187 521 mt 1205 508 L
+1205 508 mt 1231 493 L
+1231 493 mt 1240 488 L
+1240 488 mt 1275 476 L
+1275 476 mt 1310 479 L
+1310 479 mt 1333 493 L
+1333 493 mt 1345 512 L
+1345 512 mt 1349 521 L
+1349 521 mt 1348 548 L
+1348 548 mt 1345 560 L
+1345 560 mt 1341 576 L
+1341 576 mt 1335 603 L
+1335 603 mt 1328 631 L
+1328 631 mt 1318 658 L
+1318 658 mt 1310 676 L
+1310 676 mt 1306 686 L
+1306 686 mt 1291 713 L
+1291 713 mt 1275 737 L
+1275 737 mt 1273 741 L
+1273 741 mt 1252 768 L
+1252 768 mt 1240 782 L
+1240 782 mt 1228 796 L
+1228 796 mt 1205 822 L
+1205 822 mt 1204 823 L
+1204 823 mt 1177 851 L
+1177 851 mt 1170 857 L
+1170 857 mt 1150 878 L
+1150 878 mt 1136 893 L
+1136 893 mt 1122 906 L
+1122 906 mt 1101 927 L
+1101 927 mt 1093 933 L
+1093 933 mt 1069 961 L
+1069 961 mt 1066 966 L
+1066 966 mt 1044 988 L
+1044 988 mt 1033 1016 L
+1033 1016 mt 1031 1028 L
+1031 1028 mt 1023 1016 L
+1023 1016 mt 996 992 L
+ 996 992 mt 995 988 L
+ 995 988 mt 978 961 L
+ 978 961 mt 961 943 L
+ 961 943 mt 956 933 L
+ 956 933 mt 950 906 L
+ 950 906 mt 954 878 L
+ 954 878 mt 961 857 L
+1938 4524 mt 1959 4510 L
+1959 4510 mt 1972 4503 L
+1972 4503 mt 2007 4492 L
+2007 4492 mt 2042 4493 L
+2042 4493 mt 2077 4503 L
+2077 4503 mt 2094 4510 L
+2094 4510 mt 2112 4518 L
+2112 4518 mt 2147 4534 L
+2147 4534 mt 2155 4537 L
+2155 4537 mt 2182 4553 L
+2182 4553 mt 2202 4565 L
+2202 4565 mt 2212 4592 L
+2212 4592 mt 2182 4616 L
+2182 4616 mt 2175 4620 L
+2175 4620 mt 2147 4626 L
+2147 4626 mt 2112 4625 L
+2112 4625 mt 2077 4620 L
+2077 4620 mt 2074 4620 L
+2074 4620 mt 2042 4614 L
+2042 4614 mt 2007 4610 L
+2007 4610 mt 1972 4605 L
+1972 4605 mt 1938 4592 L
+1938 4592 mt 1938 4592 L
+1938 4592 mt 1904 4565 L
+1904 4565 mt 1921 4537 L
+1921 4537 mt 1938 4524 L
+6506 1692 mt 6509 1704 L
+6509 1704 mt 6516 1731 L
+6516 1731 mt 6522 1759 L
+6522 1759 mt 6527 1786 L
+6527 1786 mt 6531 1814 L
+6531 1814 mt 6534 1841 L
+6534 1841 mt 6537 1869 L
+6537 1869 mt 6539 1896 L
+6539 1896 mt 6540 1924 L
+6540 1924 mt 6540 1951 L
+6540 1951 mt 6540 1979 L
+6540 1979 mt 6539 2006 L
+6539 2006 mt 6537 2034 L
+6537 2034 mt 6534 2061 L
+6534 2061 mt 6531 2089 L
+6531 2089 mt 6527 2116 L
+6527 2116 mt 6523 2144 L
+6523 2144 mt 6518 2171 L
+6518 2171 mt 6512 2199 L
+6512 2199 mt 6506 2226 L
+6506 2226 mt 6506 2228 L
+6506 2228 mt 6499 2254 L
+6499 2254 mt 6491 2281 L
+6491 2281 mt 6483 2309 L
+6483 2309 mt 6474 2336 L
+6474 2336 mt 6471 2346 L
+6471 2346 mt 6464 2364 L
+6464 2364 mt 6453 2391 L
+6453 2391 mt 6441 2419 L
+6441 2419 mt 6436 2429 L
+6436 2429 mt 6427 2446 L
+6427 2446 mt 6411 2474 L
+6411 2474 mt 6401 2489 L
+6401 2489 mt 6392 2502 L
+6392 2502 mt 6370 2529 L
+6370 2529 mt 6366 2534 L
+6366 2534 mt 6344 2557 L
+6344 2557 mt 6331 2568 L
+6331 2568 mt 6311 2584 L
+6311 2584 mt 6296 2594 L
+6296 2594 mt 6266 2612 L
+6266 2612 mt 6261 2614 L
+6261 2614 mt 6227 2624 L
+6227 2624 mt 6192 2626 L
+6192 2626 mt 6157 2625 L
+6157 2625 mt 6122 2624 L
+6122 2624 mt 6087 2625 L
+6087 2625 mt 6052 2627 L
+6052 2627 mt 6017 2630 L
+6017 2630 mt 5983 2634 L
+5983 2634 mt 5948 2635 L
+5948 2635 mt 5913 2634 L
+5913 2634 mt 5878 2628 L
+5878 2628 mt 5843 2616 L
+5843 2616 mt 5832 2612 L
+5832 2612 mt 5808 2600 L
+5808 2600 mt 5787 2584 L
+5787 2584 mt 5773 2570 L
+5773 2570 mt 5765 2557 L
+5765 2557 mt 5756 2529 L
+5756 2529 mt 5751 2502 L
+5751 2502 mt 5747 2474 L
+5747 2474 mt 5742 2446 L
+5742 2446 mt 5741 2419 L
+5741 2419 mt 5745 2391 L
+5745 2391 mt 5752 2364 L
+5752 2364 mt 5763 2336 L
+5763 2336 mt 5773 2315 L
+5773 2315 mt 5777 2309 L
+5777 2309 mt 5792 2281 L
+5792 2281 mt 5807 2254 L
+5807 2254 mt 5808 2251 L
+5808 2251 mt 5818 2226 L
+5818 2226 mt 5826 2199 L
+5826 2199 mt 5833 2171 L
+5833 2171 mt 5837 2144 L
+5837 2144 mt 5834 2116 L
+5834 2116 mt 5826 2089 L
+5826 2089 mt 5816 2061 L
+5816 2061 mt 5808 2045 L
+5808 2045 mt 5801 2034 L
+5801 2034 mt 5784 2006 L
+5784 2006 mt 5773 1990 L
+5773 1990 mt 5766 1979 L
+5766 1979 mt 5747 1951 L
+5747 1951 mt 5738 1940 L
+5738 1940 mt 5727 1924 L
+5727 1924 mt 5708 1896 L
+5708 1896 mt 5704 1890 L
+5704 1890 mt 5688 1869 L
+5688 1869 mt 5669 1845 L
+5669 1845 mt 5666 1841 L
+5666 1841 mt 5639 1814 L
+5639 1814 mt 5634 1809 L
+5634 1809 mt 5601 1786 L
+5601 1786 mt 5599 1785 L
+5599 1785 mt 5564 1766 L
+5564 1766 mt 5548 1759 L
+5548 1759 mt 5529 1749 L
+5529 1749 mt 5498 1731 L
+5498 1731 mt 5494 1729 L
+5494 1729 mt 5459 1708 L
+5459 1708 mt 5453 1704 L
+5453 1704 mt 5425 1685 L
+5425 1685 mt 5411 1676 L
+5411 1676 mt 5390 1663 L
+5390 1663 mt 5361 1649 L
+5361 1649 mt 5355 1646 L
+5355 1646 mt 5320 1634 L
+5320 1634 mt 5285 1627 L
+5285 1627 mt 5250 1624 L
+5250 1624 mt 5215 1623 L
+5215 1623 mt 5181 1624 L
+5181 1624 mt 5146 1623 L
+5146 1623 mt 5133 1621 L
+5133 1621 mt 5111 1609 L
+5111 1609 mt 5105 1594 L
+5105 1594 mt 5105 1566 L
+5105 1566 mt 5103 1539 L
+5103 1539 mt 5096 1511 L
+5096 1511 mt 5083 1484 L
+5083 1484 mt 5076 1473 L
+5076 1473 mt 5062 1456 L
+5062 1456 mt 5041 1436 L
+5041 1436 mt 5032 1428 L
+5032 1428 mt 5006 1410 L
+5006 1410 mt 4990 1401 L
+4990 1401 mt 4971 1391 L
+4971 1391 mt 4936 1376 L
+4936 1376 mt 4927 1373 L
+4927 1373 mt 4902 1365 L
+4902 1365 mt 4867 1357 L
+4867 1357 mt 4832 1351 L
+4832 1351 mt 4797 1347 L
+4797 1347 mt 4788 1346 L
+4788 1346 mt 4762 1342 L
+4762 1342 mt 4727 1329 L
+4727 1329 mt 4714 1318 L
+4714 1318 mt 4695 1291 L
+4695 1291 mt 4693 1263 L
+4693 1263 mt 4704 1236 L
+4704 1236 mt 4720 1208 L
+4720 1208 mt 4727 1197 L
+4727 1197 mt 4739 1181 L
+4739 1181 mt 4754 1153 L
+4754 1153 mt 4762 1131 L
+4762 1131 mt 4764 1126 L
+4764 1126 mt 4770 1098 L
+4770 1098 mt 4770 1071 L
+4770 1071 mt 4766 1043 L
+4766 1043 mt 4762 1034 L
+4762 1034 mt 4754 1016 L
+4754 1016 mt 4736 988 L
+4736 988 mt 4727 976 L
+4727 976 mt 4714 961 L
+4714 961 mt 4692 938 L
+4692 938 mt 4687 933 L
+4687 933 mt 4659 906 L
+4659 906 mt 4657 904 L
+4657 904 mt 4632 878 L
+4632 878 mt 4623 869 L
+4623 869 mt 4606 851 L
+4606 851 mt 4588 832 L
+4588 832 mt 4580 823 L
+4580 823 mt 4553 796 L
+4553 796 mt 4553 795 L
+4553 795 mt 4526 768 L
+4526 768 mt 4518 761 L
+4518 761 mt 4496 741 L
+4496 741 mt 4483 729 L
+4483 729 mt 4465 713 L
+4465 713 mt 4448 699 L
+4448 699 mt 4431 686 L
+4431 686 mt 4413 672 L
+4413 672 mt 4395 658 L
+4395 658 mt 4379 645 L
+4379 645 mt 4358 631 L
+4358 631 mt 4344 620 L
+4344 620 mt 4319 603 L
+4319 603 mt 4309 597 L
+4309 597 mt 4274 577 L
+4274 577 mt 4271 576 L
+4271 576 mt 4239 561 L
+4239 561 mt 4210 548 L
+4210 548 mt 4204 546 L
+4204 546 mt 4169 533 L
+4169 533 mt 4134 522 L
+4134 522 mt 4131 521 L
+4131 521 mt 4100 511 L
+4100 511 mt 4065 500 L
+4065 500 mt 4042 493 L
+4042 493 mt 4030 488 L
+4030 488 mt 3995 475 L
+3995 475 mt 3973 466 L
+3973 466 mt 3960 456 L
+3960 456 mt 3934 438 L
+3934 438 mt 3934 411 L
+3934 411 mt 3959 383 L
+3959 383 mt 3960 382 L
+3960 382 mt 3995 358 L
+3995 358 mt 4001 355 L
+4001 355 mt 4030 343 L
+4030 343 mt 4065 331 L
+4065 331 mt 4075 328 L
+4075 328 mt 4100 320 L
+4100 320 mt 4134 308 L
+4134 308 mt 4159 300 L
+4159 300 mt 4169 297 L
+4169 297 mt 4204 287 L
+4204 287 mt 4239 277 L
+4239 277 mt 4251 273 L
+4251 273 mt 4274 267 L
+4274 267 mt 4309 257 L
+4309 257 mt 4344 248 L
+4344 248 mt 4355 245 L
+4355 245 mt 4379 240 L
+4379 240 mt 4413 232 L
+4413 232 mt 4448 226 L
+4448 226 mt 4483 219 L
+4483 219 mt 4492 218 L
+4492 218 mt 4518 214 L
+4518 214 mt 4553 209 L
+4553 209 mt 4588 205 L
+4588 205 mt 4623 201 L
+4623 201 mt 4657 198 L
+4657 198 mt 4692 195 L
+4692 195 mt 4727 193 L
+4727 193 mt 4762 191 L
+4762 191 mt 4791 190 L
+4791 190 mt 4797 190 L
+4797 190 mt 4832 190 L
+4832 190 mt 4867 190 L
+4867 190 mt 4898 190 L
+4898 190 mt 4902 190 L
+4902 190 mt 4936 192 L
+4936 192 mt 4971 195 L
+4971 195 mt 5006 199 L
+5006 199 mt 5041 204 L
+5041 204 mt 5076 211 L
+5076 211 mt 5107 218 L
+5107 218 mt 5111 219 L
+5111 219 mt 5146 228 L
+5146 228 mt 5181 240 L
+5181 240 mt 5194 245 L
+5194 245 mt 5215 254 L
+5215 254 mt 5250 270 L
+5250 270 mt 5255 273 L
+5255 273 mt 5285 289 L
+5285 289 mt 5304 300 L
+5304 300 mt 5320 311 L
+5320 311 mt 5346 328 L
+5346 328 mt 5355 335 L
+5355 335 mt 5382 355 L
+5382 355 mt 5390 362 L
+5390 362 mt 5416 383 L
+5416 383 mt 5425 391 L
+5425 391 mt 5447 411 L
+5447 411 mt 5459 422 L
+5459 422 mt 5477 438 L
+5477 438 mt 5494 454 L
+5494 454 mt 5506 466 L
+5506 466 mt 5529 488 L
+5529 488 mt 5535 493 L
+5535 493 mt 5562 521 L
+5562 521 mt 5564 522 L
+5564 522 mt 5589 548 L
+5589 548 mt 5599 558 L
+5599 558 mt 5616 576 L
+5616 576 mt 5634 595 L
+5634 595 mt 5641 603 L
+5641 603 mt 5666 631 L
+5666 631 mt 5669 634 L
+5669 634 mt 5690 658 L
+5690 658 mt 5704 675 L
+5704 675 mt 5713 686 L
+5713 686 mt 5736 713 L
+5736 713 mt 5738 716 L
+5738 716 mt 5760 741 L
+5760 741 mt 5773 757 L
+5773 757 mt 5783 768 L
+5783 768 mt 5806 796 L
+5806 796 mt 5808 798 L
+5808 798 mt 5830 823 L
+5830 823 mt 5843 839 L
+5843 839 mt 5854 851 L
+5854 851 mt 5878 878 L
+5878 878 mt 5878 878 L
+5878 878 mt 5902 906 L
+5902 906 mt 5913 918 L
+5913 918 mt 5926 933 L
+5926 933 mt 5948 957 L
+5948 957 mt 5951 961 L
+5951 961 mt 5975 988 L
+5975 988 mt 5983 996 L
+5983 996 mt 6000 1016 L
+6000 1016 mt 6017 1035 L
+6017 1035 mt 6024 1043 L
+6024 1043 mt 6049 1071 L
+6049 1071 mt 6052 1075 L
+6052 1075 mt 6073 1098 L
+6073 1098 mt 6087 1115 L
+6087 1115 mt 6097 1126 L
+6097 1126 mt 6121 1153 L
+6121 1153 mt 6122 1154 L
+6122 1154 mt 6145 1181 L
+6145 1181 mt 6157 1194 L
+6157 1194 mt 6170 1208 L
+6170 1208 mt 6192 1232 L
+6192 1232 mt 6195 1236 L
+6195 1236 mt 6220 1263 L
+6220 1263 mt 6227 1270 L
+6227 1270 mt 6245 1291 L
+6245 1291 mt 6261 1309 L
+6261 1309 mt 6270 1318 L
+6270 1318 mt 6295 1346 L
+6295 1346 mt 6296 1348 L
+6296 1348 mt 6319 1373 L
+6319 1373 mt 6331 1388 L
+6331 1388 mt 6342 1401 L
+6342 1401 mt 6364 1428 L
+6364 1428 mt 6366 1431 L
+6366 1431 mt 6385 1456 L
+6385 1456 mt 6401 1478 L
+6401 1478 mt 6405 1484 L
+6405 1484 mt 6423 1511 L
+6423 1511 mt 6436 1532 L
+6436 1532 mt 6440 1539 L
+6440 1539 mt 6455 1566 L
+6455 1566 mt 6469 1594 L
+6469 1594 mt 6471 1598 L
+6471 1598 mt 6481 1621 L
+6481 1621 mt 6492 1649 L
+6492 1649 mt 6501 1676 L
+6501 1676 mt 6506 1692 L
+ 822 2438 mt 825 2419 L
+ 825 2419 mt 832 2391 L
+ 832 2391 mt 842 2364 L
+ 842 2364 mt 857 2337 L
+ 857 2337 mt 857 2336 L
+ 857 2336 mt 882 2309 L
+ 882 2309 mt 892 2301 L
+ 892 2301 mt 926 2285 L
+ 926 2285 mt 961 2292 L
+ 961 2292 mt 986 2309 L
+ 986 2309 mt 996 2314 L
+ 996 2314 mt 1025 2336 L
+1025 2336 mt 1031 2340 L
+1031 2340 mt 1065 2364 L
+1065 2364 mt 1066 2364 L
+1066 2364 mt 1101 2389 L
+1101 2389 mt 1104 2391 L
+1104 2391 mt 1127 2419 L
+1127 2419 mt 1135 2446 L
+1135 2446 mt 1136 2451 L
+1136 2451 mt 1138 2474 L
+1138 2474 mt 1141 2502 L
+1141 2502 mt 1149 2529 L
+1149 2529 mt 1163 2557 L
+1163 2557 mt 1170 2568 L
+1170 2568 mt 1184 2584 L
+1184 2584 mt 1205 2604 L
+1205 2604 mt 1215 2612 L
+1215 2612 mt 1240 2631 L
+1240 2631 mt 1253 2639 L
+1253 2639 mt 1275 2654 L
+1275 2654 mt 1292 2667 L
+1292 2667 mt 1310 2682 L
+1310 2682 mt 1323 2694 L
+1323 2694 mt 1345 2720 L
+1345 2720 mt 1346 2722 L
+1346 2722 mt 1365 2749 L
+1365 2749 mt 1380 2771 L
+1380 2771 mt 1383 2777 L
+1383 2777 mt 1398 2804 L
+1398 2804 mt 1415 2831 L
+1415 2831 mt 1415 2832 L
+1415 2832 mt 1431 2859 L
+1431 2859 mt 1442 2887 L
+1442 2887 mt 1418 2914 L
+1418 2914 mt 1415 2915 L
+1415 2915 mt 1392 2914 L
+1392 2914 mt 1380 2913 L
+1380 2913 mt 1345 2904 L
+1345 2904 mt 1310 2892 L
+1310 2892 mt 1298 2887 L
+1298 2887 mt 1275 2877 L
+1275 2877 mt 1240 2860 L
+1240 2860 mt 1239 2859 L
+1239 2859 mt 1205 2844 L
+1205 2844 mt 1177 2832 L
+1177 2832 mt 1170 2829 L
+1170 2829 mt 1136 2819 L
+1136 2819 mt 1101 2811 L
+1101 2811 mt 1068 2804 L
+1068 2804 mt 1066 2804 L
+1066 2804 mt 1031 2799 L
+1031 2799 mt 996 2795 L
+ 996 2795 mt 961 2788 L
+ 961 2788 mt 926 2777 L
+ 926 2777 mt 925 2777 L
+ 925 2777 mt 892 2750 L
+ 892 2750 mt 891 2749 L
+ 891 2749 mt 867 2722 L
+ 867 2722 mt 857 2707 L
+ 857 2707 mt 849 2694 L
+ 849 2694 mt 836 2667 L
+ 836 2667 mt 826 2639 L
+ 826 2639 mt 822 2622 L
+ 822 2622 mt 819 2612 L
+ 819 2612 mt 816 2584 L
+ 816 2584 mt 815 2557 L
+ 815 2557 mt 815 2529 L
+ 815 2529 mt 816 2502 L
+ 816 2502 mt 818 2474 L
+ 818 2474 mt 820 2446 L
+ 820 2446 mt 822 2438 L
+1066 783 mt 1080 768 L
+1080 768 mt 1100 741 L
+1100 741 mt 1101 740 L
+1101 740 mt 1127 713 L
+1127 713 mt 1136 700 L
+1136 700 mt 1148 686 L
+1148 686 mt 1160 658 L
+1160 658 mt 1168 631 L
+1168 631 mt 1170 624 L
+1170 624 mt 1186 603 L
+1186 603 mt 1205 576 L
+1205 576 mt 1205 575 L
+1205 575 mt 1240 563 L
+1240 563 mt 1257 576 L
+1257 576 mt 1261 603 L
+1261 603 mt 1258 631 L
+1258 631 mt 1250 658 L
+1250 658 mt 1240 685 L
+1240 685 mt 1240 686 L
+1240 686 mt 1219 713 L
+1219 713 mt 1205 730 L
+1205 730 mt 1193 741 L
+1193 741 mt 1170 768 L
+1170 768 mt 1170 768 L
+1170 768 mt 1146 796 L
+1146 796 mt 1136 807 L
+1136 807 mt 1118 823 L
+1118 823 mt 1101 844 L
+1101 844 mt 1093 851 L
+1093 851 mt 1066 875 L
+1066 875 mt 1033 851 L
+1033 851 mt 1043 823 L
+1043 823 mt 1058 796 L
+1058 796 mt 1066 783 L
+6471 1711 mt 6476 1731 L
+6476 1731 mt 6481 1759 L
+6481 1759 mt 6486 1786 L
+6486 1786 mt 6489 1814 L
+6489 1814 mt 6492 1841 L
+6492 1841 mt 6494 1869 L
+6494 1869 mt 6496 1896 L
+6496 1896 mt 6496 1924 L
+6496 1924 mt 6496 1951 L
+6496 1951 mt 6495 1979 L
+6495 1979 mt 6493 2006 L
+6493 2006 mt 6491 2034 L
+6491 2034 mt 6488 2061 L
+6488 2061 mt 6484 2089 L
+6484 2089 mt 6480 2116 L
+6480 2116 mt 6475 2144 L
+6475 2144 mt 6471 2168 L
+6471 2168 mt 6470 2171 L
+6470 2171 mt 6464 2199 L
+6464 2199 mt 6457 2226 L
+6457 2226 mt 6450 2254 L
+6450 2254 mt 6443 2281 L
+6443 2281 mt 6436 2303 L
+6436 2303 mt 6434 2309 L
+6434 2309 mt 6425 2336 L
+6425 2336 mt 6415 2364 L
+6415 2364 mt 6404 2391 L
+6404 2391 mt 6401 2398 L
+6401 2398 mt 6391 2419 L
+6391 2419 mt 6376 2446 L
+6376 2446 mt 6366 2462 L
+6366 2462 mt 6358 2474 L
+6358 2474 mt 6337 2502 L
+6337 2502 mt 6331 2508 L
+6331 2508 mt 6310 2529 L
+6310 2529 mt 6296 2541 L
+6296 2541 mt 6275 2557 L
+6275 2557 mt 6261 2566 L
+6261 2566 mt 6227 2579 L
+6227 2579 mt 6192 2581 L
+6192 2581 mt 6157 2580 L
+6157 2580 mt 6122 2577 L
+6122 2577 mt 6087 2574 L
+6087 2574 mt 6052 2570 L
+6052 2570 mt 6017 2566 L
+6017 2566 mt 5983 2559 L
+5983 2559 mt 5973 2557 L
+5973 2557 mt 5948 2548 L
+5948 2548 mt 5913 2534 L
+5913 2534 mt 5900 2529 L
+5900 2529 mt 5878 2517 L
+5878 2517 mt 5858 2502 L
+5858 2502 mt 5843 2486 L
+5843 2486 mt 5835 2474 L
+5835 2474 mt 5821 2446 L
+5821 2446 mt 5813 2419 L
+5813 2419 mt 5813 2391 L
+5813 2391 mt 5818 2364 L
+5818 2364 mt 5827 2336 L
+5827 2336 mt 5840 2309 L
+5840 2309 mt 5843 2303 L
+5843 2303 mt 5854 2281 L
+5854 2281 mt 5866 2254 L
+5866 2254 mt 5877 2226 L
+5877 2226 mt 5878 2223 L
+5878 2223 mt 5887 2199 L
+5887 2199 mt 5896 2171 L
+5896 2171 mt 5901 2144 L
+5901 2144 mt 5900 2116 L
+5900 2116 mt 5896 2089 L
+5896 2089 mt 5891 2061 L
+5891 2061 mt 5884 2034 L
+5884 2034 mt 5878 2011 L
+5878 2011 mt 5876 2006 L
+5876 2006 mt 5870 1979 L
+5870 1979 mt 5865 1951 L
+5865 1951 mt 5858 1924 L
+5858 1924 mt 5848 1896 L
+5848 1896 mt 5843 1886 L
+5843 1886 mt 5835 1869 L
+5835 1869 mt 5820 1841 L
+5820 1841 mt 5808 1823 L
+5808 1823 mt 5803 1814 L
+5803 1814 mt 5787 1786 L
+5787 1786 mt 5773 1763 L
+5773 1763 mt 5770 1759 L
+5770 1759 mt 5750 1731 L
+5750 1731 mt 5738 1720 L
+5738 1720 mt 5711 1704 L
+5711 1704 mt 5704 1700 L
+5704 1700 mt 5669 1689 L
+5669 1689 mt 5634 1682 L
+5634 1682 mt 5606 1676 L
+5606 1676 mt 5599 1675 L
+5599 1675 mt 5564 1668 L
+5564 1668 mt 5529 1659 L
+5529 1659 mt 5503 1649 L
+5503 1649 mt 5494 1645 L
+5494 1645 mt 5459 1629 L
+5459 1629 mt 5442 1621 L
+5442 1621 mt 5425 1615 L
+5425 1615 mt 5390 1603 L
+5390 1603 mt 5359 1594 L
+5359 1594 mt 5355 1592 L
+5355 1592 mt 5320 1584 L
+5320 1584 mt 5285 1577 L
+5285 1577 mt 5250 1570 L
+5250 1570 mt 5239 1566 L
+5239 1566 mt 5215 1555 L
+5215 1555 mt 5193 1539 L
+5193 1539 mt 5181 1521 L
+5181 1521 mt 5174 1511 L
+5174 1511 mt 5159 1484 L
+5159 1484 mt 5146 1462 L
+5146 1462 mt 5142 1456 L
+5142 1456 mt 5122 1428 L
+5122 1428 mt 5111 1415 L
+5111 1415 mt 5097 1401 L
+5097 1401 mt 5076 1382 L
+5076 1382 mt 5064 1373 L
+5064 1373 mt 5041 1356 L
+5041 1356 mt 5024 1346 L
+5024 1346 mt 5006 1335 L
+5006 1335 mt 4977 1318 L
+4977 1318 mt 4971 1315 L
+4971 1315 mt 4936 1296 L
+4936 1296 mt 4926 1291 L
+4926 1291 mt 4902 1275 L
+4902 1275 mt 4884 1263 L
+4884 1263 mt 4867 1246 L
+4867 1246 mt 4858 1236 L
+4858 1236 mt 4845 1208 L
+4845 1208 mt 4840 1181 L
+4840 1181 mt 4839 1153 L
+4839 1153 mt 4841 1126 L
+4841 1126 mt 4843 1098 L
+4843 1098 mt 4843 1071 L
+4843 1071 mt 4841 1043 L
+4841 1043 mt 4834 1016 L
+4834 1016 mt 4832 1008 L
+4832 1008 mt 4824 988 L
+4824 988 mt 4810 961 L
+4810 961 mt 4797 939 L
+4797 939 mt 4793 933 L
+4793 933 mt 4771 906 L
+4771 906 mt 4762 896 L
+4762 896 mt 4745 878 L
+4745 878 mt 4727 863 L
+4727 863 mt 4713 851 L
+4713 851 mt 4692 834 L
+4692 834 mt 4680 823 L
+4680 823 mt 4657 806 L
+4657 806 mt 4647 796 L
+4647 796 mt 4623 776 L
+4623 776 mt 4614 768 L
+4614 768 mt 4588 747 L
+4588 747 mt 4580 741 L
+4580 741 mt 4553 717 L
+4553 717 mt 4549 713 L
+4549 713 mt 4523 686 L
+4523 686 mt 4518 680 L
+4518 680 mt 4496 658 L
+4496 658 mt 4483 643 L
+4483 643 mt 4470 631 L
+4470 631 mt 4448 609 L
+4448 609 mt 4442 603 L
+4442 603 mt 4413 580 L
+4413 580 mt 4408 576 L
+4408 576 mt 4379 554 L
+4379 554 mt 4370 548 L
+4370 548 mt 4344 532 L
+4344 532 mt 4325 521 L
+4325 521 mt 4309 512 L
+4309 512 mt 4274 496 L
+4274 496 mt 4266 493 L
+4266 493 mt 4239 483 L
+4239 483 mt 4204 470 L
+4204 470 mt 4191 466 L
+4191 466 mt 4169 456 L
+4169 456 mt 4134 439 L
+4134 439 mt 4131 438 L
+4131 438 mt 4111 411 L
+4111 411 mt 4133 383 L
+4133 383 mt 4134 382 L
+4134 382 mt 4169 359 L
+4169 359 mt 4177 355 L
+4177 355 mt 4204 345 L
+4204 345 mt 4239 333 L
+4239 333 mt 4251 328 L
+4251 328 mt 4274 320 L
+4274 320 mt 4309 307 L
+4309 307 mt 4328 300 L
+4328 300 mt 4344 295 L
+4344 295 mt 4379 285 L
+4379 285 mt 4413 275 L
+4413 275 mt 4421 273 L
+4421 273 mt 4448 267 L
+4448 267 mt 4483 259 L
+4483 259 mt 4518 252 L
+4518 252 mt 4553 246 L
+4553 246 mt 4560 245 L
+4560 245 mt 4588 241 L
+4588 241 mt 4623 237 L
+4623 237 mt 4657 233 L
+4657 233 mt 4692 229 L
+4692 229 mt 4727 225 L
+4727 225 mt 4762 223 L
+4762 223 mt 4797 220 L
+4797 220 mt 4832 218 L
+4832 218 mt 4845 218 L
+4845 218 mt 4867 217 L
+4867 217 mt 4902 217 L
+4902 217 mt 4936 218 L
+4936 218 mt 4938 218 L
+4938 218 mt 4971 220 L
+4971 220 mt 5006 223 L
+5006 223 mt 5041 227 L
+5041 227 mt 5076 234 L
+5076 234 mt 5111 242 L
+5111 242 mt 5124 245 L
+5124 245 mt 5146 251 L
+5146 251 mt 5181 264 L
+5181 264 mt 5203 273 L
+5203 273 mt 5215 278 L
+5215 278 mt 5250 296 L
+5250 296 mt 5259 300 L
+5259 300 mt 5285 316 L
+5285 316 mt 5304 328 L
+5304 328 mt 5320 339 L
+5320 339 mt 5342 355 L
+5342 355 mt 5355 365 L
+5355 365 mt 5376 383 L
+5376 383 mt 5390 395 L
+5390 395 mt 5408 411 L
+5408 411 mt 5425 426 L
+5425 426 mt 5437 438 L
+5437 438 mt 5459 459 L
+5459 459 mt 5466 466 L
+5466 466 mt 5494 493 L
+5494 493 mt 5494 493 L
+5494 493 mt 5522 521 L
+5522 521 mt 5529 528 L
+5529 528 mt 5549 548 L
+5549 548 mt 5564 564 L
+5564 564 mt 5575 576 L
+5575 576 mt 5599 601 L
+5599 601 mt 5601 603 L
+5601 603 mt 5625 631 L
+5625 631 mt 5634 641 L
+5634 641 mt 5648 658 L
+5648 658 mt 5669 683 L
+5669 683 mt 5671 686 L
+5671 686 mt 5694 713 L
+5694 713 mt 5704 726 L
+5704 726 mt 5716 741 L
+5716 741 mt 5738 768 L
+5738 768 mt 5738 768 L
+5738 768 mt 5761 796 L
+5761 796 mt 5773 811 L
+5773 811 mt 5784 823 L
+5784 823 mt 5807 851 L
+5807 851 mt 5808 852 L
+5808 852 mt 5831 878 L
+5831 878 mt 5843 892 L
+5843 892 mt 5855 906 L
+5855 906 mt 5878 932 L
+5878 932 mt 5879 933 L
+5879 933 mt 5904 961 L
+5904 961 mt 5913 971 L
+5913 971 mt 5928 988 L
+5928 988 mt 5948 1010 L
+5948 1010 mt 5952 1016 L
+5952 1016 mt 5977 1043 L
+5977 1043 mt 5983 1050 L
+5983 1050 mt 6001 1071 L
+6001 1071 mt 6017 1090 L
+6017 1090 mt 6025 1098 L
+6025 1098 mt 6049 1126 L
+6049 1126 mt 6052 1130 L
+6052 1130 mt 6073 1153 L
+6073 1153 mt 6087 1170 L
+6087 1170 mt 6097 1181 L
+6097 1181 mt 6121 1208 L
+6121 1208 mt 6122 1209 L
+6122 1209 mt 6146 1236 L
+6146 1236 mt 6157 1248 L
+6157 1248 mt 6171 1263 L
+6171 1263 mt 6192 1286 L
+6192 1286 mt 6197 1291 L
+6197 1291 mt 6222 1318 L
+6222 1318 mt 6227 1323 L
+6227 1323 mt 6247 1346 L
+6247 1346 mt 6261 1362 L
+6261 1362 mt 6272 1373 L
+6272 1373 mt 6296 1401 L
+6296 1401 mt 6296 1401 L
+6296 1401 mt 6319 1428 L
+6319 1428 mt 6331 1443 L
+6331 1443 mt 6341 1456 L
+6341 1456 mt 6362 1484 L
+6362 1484 mt 6366 1489 L
+6366 1489 mt 6381 1511 L
+6381 1511 mt 6398 1539 L
+6398 1539 mt 6401 1543 L
+6401 1543 mt 6414 1566 L
+6414 1566 mt 6428 1594 L
+6428 1594 mt 6436 1610 L
+6436 1610 mt 6441 1621 L
+6441 1621 mt 6452 1649 L
+6452 1649 mt 6461 1676 L
+6461 1676 mt 6469 1704 L
+6469 1704 mt 6471 1711 L
+ 892 2386 mt 907 2364 L
+ 907 2364 mt 926 2347 L
+ 926 2347 mt 961 2349 L
+ 961 2349 mt 996 2364 L
+ 996 2364 mt 996 2364 L
+ 996 2364 mt 1031 2386 L
+1031 2386 mt 1038 2391 L
+1038 2391 mt 1066 2419 L
+1066 2419 mt 1066 2419 L
+1066 2419 mt 1078 2446 L
+1078 2446 mt 1082 2474 L
+1082 2474 mt 1084 2502 L
+1084 2502 mt 1090 2529 L
+1090 2529 mt 1101 2556 L
+1101 2556 mt 1101 2557 L
+1101 2557 mt 1117 2584 L
+1117 2584 mt 1136 2608 L
+1136 2608 mt 1139 2612 L
+1139 2612 mt 1166 2639 L
+1166 2639 mt 1170 2644 L
+1170 2644 mt 1196 2667 L
+1196 2667 mt 1205 2677 L
+1205 2677 mt 1224 2694 L
+1224 2694 mt 1240 2714 L
+1240 2714 mt 1247 2722 L
+1247 2722 mt 1262 2749 L
+1262 2749 mt 1263 2777 L
+1263 2777 mt 1240 2783 L
+1240 2783 mt 1205 2781 L
+1205 2781 mt 1170 2777 L
+1170 2777 mt 1167 2777 L
+1167 2777 mt 1136 2771 L
+1136 2771 mt 1101 2765 L
+1101 2765 mt 1066 2759 L
+1066 2759 mt 1031 2754 L
+1031 2754 mt 996 2750 L
+ 996 2750 mt 994 2749 L
+ 994 2749 mt 961 2741 L
+ 961 2741 mt 926 2726 L
+ 926 2726 mt 920 2722 L
+ 920 2722 mt 892 2694 L
+ 892 2694 mt 892 2694 L
+ 892 2694 mt 879 2667 L
+ 879 2667 mt 867 2639 L
+ 867 2639 mt 861 2612 L
+ 861 2612 mt 861 2584 L
+ 861 2584 mt 864 2557 L
+ 864 2557 mt 867 2529 L
+ 867 2529 mt 869 2502 L
+ 869 2502 mt 871 2474 L
+ 871 2474 mt 874 2446 L
+ 874 2446 mt 879 2419 L
+ 879 2419 mt 889 2391 L
+ 889 2391 mt 892 2386 L
+6436 1736 mt 6440 1759 L
+6440 1759 mt 6444 1786 L
+6444 1786 mt 6447 1814 L
+6447 1814 mt 6449 1841 L
+6449 1841 mt 6451 1869 L
+6451 1869 mt 6452 1896 L
+6452 1896 mt 6452 1924 L
+6452 1924 mt 6451 1951 L
+6451 1951 mt 6450 1979 L
+6450 1979 mt 6447 2006 L
+6447 2006 mt 6444 2034 L
+6444 2034 mt 6441 2061 L
+6441 2061 mt 6437 2089 L
+6437 2089 mt 6436 2095 L
+6436 2095 mt 6432 2116 L
+6432 2116 mt 6427 2144 L
+6427 2144 mt 6421 2171 L
+6421 2171 mt 6415 2199 L
+6415 2199 mt 6408 2226 L
+6408 2226 mt 6401 2253 L
+6401 2253 mt 6401 2254 L
+6401 2254 mt 6393 2281 L
+6393 2281 mt 6384 2309 L
+6384 2309 mt 6376 2336 L
+6376 2336 mt 6366 2363 L
+6366 2363 mt 6366 2364 L
+6366 2364 mt 6355 2391 L
+6355 2391 mt 6341 2419 L
+6341 2419 mt 6331 2436 L
+6331 2436 mt 6325 2446 L
+6325 2446 mt 6304 2474 L
+6304 2474 mt 6296 2482 L
+6296 2482 mt 6276 2502 L
+6276 2502 mt 6261 2514 L
+6261 2514 mt 6233 2529 L
+6233 2529 mt 6227 2532 L
+6227 2532 mt 6192 2535 L
+6192 2535 mt 6157 2530 L
+6157 2530 mt 6150 2529 L
+6150 2529 mt 6122 2521 L
+6122 2521 mt 6087 2508 L
+6087 2508 mt 6072 2502 L
+6072 2502 mt 6052 2490 L
+6052 2490 mt 6027 2474 L
+6027 2474 mt 6017 2468 L
+6017 2468 mt 5983 2446 L
+5983 2446 mt 5983 2446 L
+5983 2446 mt 5948 2430 L
+5948 2430 mt 5929 2419 L
+5929 2419 mt 5913 2407 L
+5913 2407 mt 5899 2391 L
+5899 2391 mt 5890 2364 L
+5890 2364 mt 5893 2336 L
+5893 2336 mt 5904 2309 L
+5904 2309 mt 5913 2289 L
+5913 2289 mt 5917 2281 L
+5917 2281 mt 5930 2254 L
+5930 2254 mt 5944 2226 L
+5944 2226 mt 5948 2219 L
+5948 2219 mt 5958 2199 L
+5958 2199 mt 5968 2171 L
+5968 2171 mt 5972 2144 L
+5972 2144 mt 5970 2116 L
+5970 2116 mt 5966 2089 L
+5966 2089 mt 5965 2061 L
+5965 2061 mt 5963 2034 L
+5963 2034 mt 5964 2006 L
+5964 2006 mt 5970 1979 L
+5970 1979 mt 5978 1951 L
+5978 1951 mt 5983 1939 L
+5983 1939 mt 5988 1924 L
+5988 1924 mt 5998 1896 L
+5998 1896 mt 6007 1869 L
+6007 1869 mt 6013 1841 L
+6013 1841 mt 6016 1814 L
+6016 1814 mt 6016 1786 L
+6016 1786 mt 6013 1759 L
+6013 1759 mt 6009 1731 L
+6009 1731 mt 6002 1704 L
+6002 1704 mt 5993 1676 L
+5993 1676 mt 5983 1652 L
+5983 1652 mt 5980 1649 L
+5980 1649 mt 5958 1621 L
+5958 1621 mt 5948 1611 L
+5948 1611 mt 5929 1594 L
+5929 1594 mt 5913 1581 L
+5913 1581 mt 5890 1566 L
+5890 1566 mt 5878 1559 L
+5878 1559 mt 5843 1542 L
+5843 1542 mt 5834 1539 L
+5834 1539 mt 5808 1530 L
+5808 1530 mt 5773 1522 L
+5773 1522 mt 5738 1519 L
+5738 1519 mt 5704 1521 L
+5704 1521 mt 5669 1526 L
+5669 1526 mt 5634 1535 L
+5634 1535 mt 5618 1539 L
+5618 1539 mt 5599 1543 L
+5599 1543 mt 5564 1548 L
+5564 1548 mt 5529 1551 L
+5529 1551 mt 5494 1550 L
+5494 1550 mt 5459 1549 L
+5459 1549 mt 5425 1547 L
+5425 1547 mt 5390 1544 L
+5390 1544 mt 5355 1539 L
+5355 1539 mt 5351 1539 L
+5351 1539 mt 5320 1531 L
+5320 1531 mt 5285 1516 L
+5285 1516 mt 5276 1511 L
+5276 1511 mt 5250 1485 L
+5250 1485 mt 5249 1484 L
+5249 1484 mt 5232 1456 L
+5232 1456 mt 5216 1428 L
+5216 1428 mt 5215 1427 L
+5215 1427 mt 5199 1401 L
+5199 1401 mt 5181 1375 L
+5181 1375 mt 5179 1373 L
+5179 1373 mt 5154 1346 L
+5154 1346 mt 5146 1337 L
+5146 1337 mt 5125 1318 L
+5125 1318 mt 5111 1306 L
+5111 1306 mt 5091 1291 L
+5091 1291 mt 5076 1279 L
+5076 1279 mt 5054 1263 L
+5054 1263 mt 5041 1253 L
+5041 1253 mt 5020 1236 L
+5020 1236 mt 5006 1224 L
+5006 1224 mt 4989 1208 L
+4989 1208 mt 4971 1188 L
+4971 1188 mt 4966 1181 L
+4966 1181 mt 4949 1153 L
+4949 1153 mt 4937 1126 L
+4937 1126 mt 4936 1125 L
+4936 1125 mt 4927 1098 L
+4927 1098 mt 4918 1071 L
+4918 1071 mt 4909 1043 L
+4909 1043 mt 4902 1022 L
+4902 1022 mt 4900 1016 L
+4900 1016 mt 4890 988 L
+4890 988 mt 4880 961 L
+4880 961 mt 4868 933 L
+4868 933 mt 4867 930 L
+4867 930 mt 4853 906 L
+4853 906 mt 4834 878 L
+4834 878 mt 4832 876 L
+4832 876 mt 4810 851 L
+4810 851 mt 4797 838 L
+4797 838 mt 4779 823 L
+4779 823 mt 4762 812 L
+4762 812 mt 4737 796 L
+4737 796 mt 4727 791 L
+4727 791 mt 4692 772 L
+4692 772 mt 4687 768 L
+4687 768 mt 4657 752 L
+4657 752 mt 4642 741 L
+4642 741 mt 4623 728 L
+4623 728 mt 4604 713 L
+4604 713 mt 4588 699 L
+4588 699 mt 4575 686 L
+4575 686 mt 4555 658 L
+4555 658 mt 4553 652 L
+4553 652 mt 4540 631 L
+4540 631 mt 4527 603 L
+4527 603 mt 4518 587 L
+4518 587 mt 4509 576 L
+4509 576 mt 4483 551 L
+4483 551 mt 4480 548 L
+4480 548 mt 4448 528 L
+4448 528 mt 4436 521 L
+4436 521 mt 4413 508 L
+4413 508 mt 4386 493 L
+4386 493 mt 4379 489 L
+4379 489 mt 4344 469 L
+4344 469 mt 4337 466 L
+4337 466 mt 4309 444 L
+4309 444 mt 4298 438 L
+4298 438 mt 4283 411 L
+4283 411 mt 4298 383 L
+4298 383 mt 4309 376 L
+4309 376 mt 4332 355 L
+4332 355 mt 4344 350 L
+4344 350 mt 4379 334 L
+4379 334 mt 4393 328 L
+4393 328 mt 4413 321 L
+4413 321 mt 4448 310 L
+4448 310 mt 4483 301 L
+4483 301 mt 4484 300 L
+4484 300 mt 4518 293 L
+4518 293 mt 4553 286 L
+4553 286 mt 4588 279 L
+4588 279 mt 4623 273 L
+4623 273 mt 4625 273 L
+4625 273 mt 4657 268 L
+4657 268 mt 4692 263 L
+4692 263 mt 4727 259 L
+4727 259 mt 4762 254 L
+4762 254 mt 4797 251 L
+4797 251 mt 4832 247 L
+4832 247 mt 4860 245 L
+4860 245 mt 4867 245 L
+4867 245 mt 4902 243 L
+4902 243 mt 4936 243 L
+4936 243 mt 4971 244 L
+4971 244 mt 4993 245 L
+4993 245 mt 5006 246 L
+5006 246 mt 5041 250 L
+5041 250 mt 5076 256 L
+5076 256 mt 5111 264 L
+5111 264 mt 5142 273 L
+5142 273 mt 5146 274 L
+5146 274 mt 5181 287 L
+5181 287 mt 5212 300 L
+5212 300 mt 5215 302 L
+5215 302 mt 5250 321 L
+5250 321 mt 5262 328 L
+5262 328 mt 5285 343 L
+5285 343 mt 5303 355 L
+5303 355 mt 5320 369 L
+5320 369 mt 5338 383 L
+5338 383 mt 5355 398 L
+5355 398 mt 5369 411 L
+5369 411 mt 5390 430 L
+5390 430 mt 5399 438 L
+5399 438 mt 5425 463 L
+5425 463 mt 5427 466 L
+5427 466 mt 5454 493 L
+5454 493 mt 5459 499 L
+5459 499 mt 5481 521 L
+5481 521 mt 5494 534 L
+5494 534 mt 5508 548 L
+5508 548 mt 5529 570 L
+5529 570 mt 5534 576 L
+5534 576 mt 5560 603 L
+5560 603 mt 5564 608 L
+5564 608 mt 5584 631 L
+5584 631 mt 5599 648 L
+5599 648 mt 5608 658 L
+5608 658 mt 5630 686 L
+5630 686 mt 5634 691 L
+5634 691 mt 5651 713 L
+5651 713 mt 5669 736 L
+5669 736 mt 5672 741 L
+5672 741 mt 5693 768 L
+5693 768 mt 5704 781 L
+5704 781 mt 5715 796 L
+5715 796 mt 5737 823 L
+5737 823 mt 5738 825 L
+5738 825 mt 5760 851 L
+5760 851 mt 5773 867 L
+5773 867 mt 5783 878 L
+5783 878 mt 5806 906 L
+5806 906 mt 5808 908 L
+5808 908 mt 5831 933 L
+5831 933 mt 5843 947 L
+5843 947 mt 5855 961 L
+5855 961 mt 5878 986 L
+5878 986 mt 5880 988 L
+5880 988 mt 5904 1016 L
+5904 1016 mt 5913 1025 L
+5913 1025 mt 5929 1043 L
+5929 1043 mt 5948 1065 L
+5948 1065 mt 5953 1071 L
+5953 1071 mt 5976 1098 L
+5976 1098 mt 5983 1106 L
+5983 1106 mt 6000 1126 L
+6000 1126 mt 6017 1146 L
+6017 1146 mt 6024 1153 L
+6024 1153 mt 6047 1181 L
+6047 1181 mt 6052 1187 L
+6052 1187 mt 6071 1208 L
+6071 1208 mt 6087 1226 L
+6087 1226 mt 6096 1236 L
+6096 1236 mt 6121 1263 L
+6121 1263 mt 6122 1265 L
+6122 1265 mt 6146 1291 L
+6146 1291 mt 6157 1302 L
+6157 1302 mt 6172 1318 L
+6172 1318 mt 6192 1339 L
+6192 1339 mt 6198 1346 L
+6198 1346 mt 6224 1373 L
+6224 1373 mt 6227 1377 L
+6227 1377 mt 6248 1401 L
+6248 1401 mt 6261 1416 L
+6261 1416 mt 6273 1428 L
+6273 1428 mt 6296 1456 L
+6296 1456 mt 6296 1457 L
+6296 1457 mt 6317 1484 L
+6317 1484 mt 6331 1502 L
+6331 1502 mt 6338 1511 L
+6338 1511 mt 6356 1539 L
+6356 1539 mt 6366 1555 L
+6366 1555 mt 6373 1566 L
+6373 1566 mt 6388 1594 L
+6388 1594 mt 6400 1621 L
+6400 1621 mt 6401 1622 L
+6401 1622 mt 6411 1649 L
+6411 1649 mt 6421 1676 L
+6421 1676 mt 6429 1704 L
+6429 1704 mt 6435 1731 L
+6435 1731 mt 6436 1736 L
+ 926 2568 mt 933 2557 L
+ 933 2557 mt 938 2529 L
+ 938 2529 mt 939 2502 L
+ 939 2502 mt 939 2474 L
+ 939 2474 mt 941 2446 L
+ 941 2446 mt 950 2419 L
+ 950 2419 mt 961 2412 L
+ 961 2412 mt 980 2419 L
+ 980 2419 mt 996 2427 L
+ 996 2427 mt 1012 2446 L
+1012 2446 mt 1020 2474 L
+1020 2474 mt 1022 2502 L
+1022 2502 mt 1026 2529 L
+1026 2529 mt 1031 2540 L
+1031 2540 mt 1035 2557 L
+1035 2557 mt 1046 2584 L
+1046 2584 mt 1063 2612 L
+1063 2612 mt 1066 2618 L
+1066 2618 mt 1075 2639 L
+1075 2639 mt 1084 2667 L
+1084 2667 mt 1066 2691 L
+1066 2691 mt 1054 2694 L
+1054 2694 mt 1031 2695 L
+1031 2695 mt 998 2694 L
+ 998 2694 mt 996 2694 L
+ 996 2694 mt 961 2681 L
+ 961 2681 mt 942 2667 L
+ 942 2667 mt 926 2653 L
+ 926 2653 mt 918 2639 L
+ 918 2639 mt 909 2612 L
+ 909 2612 mt 921 2584 L
+ 921 2584 mt 926 2568 L
+6401 1781 mt 6402 1786 L
+6402 1786 mt 6404 1814 L
+6404 1814 mt 6405 1841 L
+6405 1841 mt 6406 1869 L
+6406 1869 mt 6407 1896 L
+6407 1896 mt 6406 1924 L
+6406 1924 mt 6405 1951 L
+6405 1951 mt 6403 1979 L
+6403 1979 mt 6401 1997 L
+6401 1997 mt 6400 2006 L
+6400 2006 mt 6396 2034 L
+6396 2034 mt 6392 2061 L
+6392 2061 mt 6387 2089 L
+6387 2089 mt 6382 2116 L
+6382 2116 mt 6376 2144 L
+6376 2144 mt 6371 2171 L
+6371 2171 mt 6366 2190 L
+6366 2190 mt 6364 2199 L
+6364 2199 mt 6356 2226 L
+6356 2226 mt 6348 2254 L
+6348 2254 mt 6340 2281 L
+6340 2281 mt 6333 2309 L
+6333 2309 mt 6331 2313 L
+6331 2313 mt 6324 2336 L
+6324 2336 mt 6315 2364 L
+6315 2364 mt 6304 2391 L
+6304 2391 mt 6296 2407 L
+6296 2407 mt 6290 2419 L
+6290 2419 mt 6271 2446 L
+6271 2446 mt 6261 2456 L
+6261 2456 mt 6233 2474 L
+6233 2474 mt 6227 2478 L
+6227 2478 mt 6192 2479 L
+6192 2479 mt 6174 2474 L
+6174 2474 mt 6157 2469 L
+6157 2469 mt 6122 2450 L
+6122 2450 mt 6116 2446 L
+6116 2446 mt 6087 2428 L
+6087 2428 mt 6075 2419 L
+6075 2419 mt 6052 2404 L
+6052 2404 mt 6032 2391 L
+6032 2391 mt 6017 2381 L
+6017 2381 mt 5996 2364 L
+5996 2364 mt 5983 2341 L
+5983 2341 mt 5980 2336 L
+5980 2336 mt 5979 2309 L
+5979 2309 mt 5983 2296 L
+5983 2296 mt 5986 2281 L
+5986 2281 mt 5998 2254 L
+5998 2254 mt 6013 2226 L
+6013 2226 mt 6017 2218 L
+6017 2218 mt 6027 2199 L
+6027 2199 mt 6036 2171 L
+6036 2171 mt 6042 2144 L
+6042 2144 mt 6043 2116 L
+6043 2116 mt 6044 2089 L
+6044 2089 mt 6045 2061 L
+6045 2061 mt 6048 2034 L
+6048 2034 mt 6052 2012 L
+6052 2012 mt 6053 2006 L
+6053 2006 mt 6059 1979 L
+6059 1979 mt 6066 1951 L
+6066 1951 mt 6074 1924 L
+6074 1924 mt 6081 1896 L
+6081 1896 mt 6086 1869 L
+6086 1869 mt 6087 1862 L
+6087 1862 mt 6089 1841 L
+6089 1841 mt 6090 1814 L
+6090 1814 mt 6090 1786 L
+6090 1786 mt 6089 1759 L
+6089 1759 mt 6087 1745 L
+6087 1745 mt 6085 1731 L
+6085 1731 mt 6080 1704 L
+6080 1704 mt 6072 1676 L
+6072 1676 mt 6062 1649 L
+6062 1649 mt 6052 1629 L
+6052 1629 mt 6048 1621 L
+6048 1621 mt 6029 1594 L
+6029 1594 mt 6017 1581 L
+6017 1581 mt 6002 1566 L
+6002 1566 mt 5983 1550 L
+5983 1550 mt 5967 1539 L
+5967 1539 mt 5948 1525 L
+5948 1525 mt 5924 1511 L
+5924 1511 mt 5913 1504 L
+5913 1504 mt 5878 1485 L
+5878 1485 mt 5874 1484 L
+5874 1484 mt 5843 1469 L
+5843 1469 mt 5812 1456 L
+5812 1456 mt 5808 1455 L
+5808 1455 mt 5773 1445 L
+5773 1445 mt 5738 1438 L
+5738 1438 mt 5704 1434 L
+5704 1434 mt 5669 1433 L
+5669 1433 mt 5634 1435 L
+5634 1435 mt 5599 1439 L
+5599 1439 mt 5564 1445 L
+5564 1445 mt 5529 1453 L
+5529 1453 mt 5519 1456 L
+5519 1456 mt 5494 1466 L
+5494 1466 mt 5459 1477 L
+5459 1477 mt 5425 1482 L
+5425 1482 mt 5390 1482 L
+5390 1482 mt 5355 1471 L
+5355 1471 mt 5334 1456 L
+5334 1456 mt 5320 1435 L
+5320 1435 mt 5317 1428 L
+5317 1428 mt 5309 1401 L
+5309 1401 mt 5300 1373 L
+5300 1373 mt 5285 1346 L
+5285 1346 mt 5285 1346 L
+5285 1346 mt 5266 1318 L
+5266 1318 mt 5250 1295 L
+5250 1295 mt 5247 1291 L
+5247 1291 mt 5223 1263 L
+5223 1263 mt 5215 1254 L
+5215 1254 mt 5197 1236 L
+5197 1236 mt 5181 1220 L
+5181 1220 mt 5166 1208 L
+5166 1208 mt 5146 1192 L
+5146 1192 mt 5132 1181 L
+5132 1181 mt 5111 1164 L
+5111 1164 mt 5098 1153 L
+5098 1153 mt 5076 1135 L
+5076 1135 mt 5067 1126 L
+5067 1126 mt 5041 1101 L
+5041 1101 mt 5038 1098 L
+5038 1098 mt 5014 1071 L
+5014 1071 mt 5006 1064 L
+5006 1064 mt 4990 1043 L
+4990 1043 mt 4971 1021 L
+4971 1021 mt 4968 1016 L
+4968 1016 mt 4950 988 L
+4950 988 mt 4936 963 L
+4936 963 mt 4935 961 L
+4935 961 mt 4923 933 L
+4923 933 mt 4910 906 L
+4910 906 mt 4902 888 L
+4902 888 mt 4896 878 L
+4896 878 mt 4878 851 L
+4878 851 mt 4867 835 L
+4867 835 mt 4856 823 L
+4856 823 mt 4832 800 L
+4832 800 mt 4827 796 L
+4827 796 mt 4797 776 L
+4797 776 mt 4784 768 L
+4784 768 mt 4762 759 L
+4762 759 mt 4727 746 L
+4727 746 mt 4716 741 L
+4716 741 mt 4692 733 L
+4692 733 mt 4657 717 L
+4657 717 mt 4651 713 L
+4651 713 mt 4623 694 L
+4623 694 mt 4614 686 L
+4614 686 mt 4593 658 L
+4593 658 mt 4588 643 L
+4588 643 mt 4583 631 L
+4583 631 mt 4578 603 L
+4578 603 mt 4573 576 L
+4573 576 mt 4560 548 L
+4560 548 mt 4553 539 L
+4553 539 mt 4534 521 L
+4534 521 mt 4518 509 L
+4518 509 mt 4491 493 L
+4491 493 mt 4483 488 L
+4483 488 mt 4448 469 L
+4448 469 mt 4442 466 L
+4442 466 mt 4413 446 L
+4413 446 mt 4404 438 L
+4404 438 mt 4380 411 L
+4380 411 mt 4403 383 L
+4403 383 mt 4413 379 L
+4413 379 mt 4448 361 L
+4448 361 mt 4458 355 L
+4458 355 mt 4483 346 L
+4483 346 mt 4518 336 L
+4518 336 mt 4551 328 L
+4551 328 mt 4553 328 L
+4553 328 mt 4588 320 L
+4588 320 mt 4623 313 L
+4623 313 mt 4657 306 L
+4657 306 mt 4685 300 L
+4685 300 mt 4692 299 L
+4692 299 mt 4727 293 L
+4727 293 mt 4762 287 L
+4762 287 mt 4797 282 L
+4797 282 mt 4832 277 L
+4832 277 mt 4866 273 L
+4866 273 mt 4867 273 L
+4867 273 mt 4902 270 L
+4902 270 mt 4936 268 L
+4936 268 mt 4971 268 L
+4971 268 mt 5006 269 L
+5006 269 mt 5041 272 L
+5041 272 mt 5045 273 L
+5045 273 mt 5076 277 L
+5076 277 mt 5111 285 L
+5111 285 mt 5146 296 L
+5146 296 mt 5158 300 L
+5158 300 mt 5181 309 L
+5181 309 mt 5215 326 L
+5215 326 mt 5219 328 L
+5219 328 mt 5250 347 L
+5250 347 mt 5263 355 L
+5263 355 mt 5285 371 L
+5285 371 mt 5300 383 L
+5300 383 mt 5320 400 L
+5320 400 mt 5332 411 L
+5332 411 mt 5355 433 L
+5355 433 mt 5361 438 L
+5361 438 mt 5388 466 L
+5388 466 mt 5390 468 L
+5390 468 mt 5414 493 L
+5414 493 mt 5425 504 L
+5425 504 mt 5440 521 L
+5440 521 mt 5459 541 L
+5459 541 mt 5467 548 L
+5467 548 mt 5493 576 L
+5493 576 mt 5494 577 L
+5494 577 mt 5519 603 L
+5519 603 mt 5529 614 L
+5529 614 mt 5544 631 L
+5544 631 mt 5564 655 L
+5564 655 mt 5567 658 L
+5567 658 mt 5589 686 L
+5589 686 mt 5599 700 L
+5599 700 mt 5609 713 L
+5609 713 mt 5629 741 L
+5629 741 mt 5634 748 L
+5634 748 mt 5649 768 L
+5649 768 mt 5669 796 L
+5669 796 mt 5669 796 L
+5669 796 mt 5689 823 L
+5689 823 mt 5704 841 L
+5704 841 mt 5711 851 L
+5711 851 mt 5733 878 L
+5733 878 mt 5738 884 L
+5738 884 mt 5756 906 L
+5756 906 mt 5773 925 L
+5773 925 mt 5780 933 L
+5780 933 mt 5805 961 L
+5805 961 mt 5808 964 L
+5808 964 mt 5830 988 L
+5830 988 mt 5843 1003 L
+5843 1003 mt 5854 1016 L
+5854 1016 mt 5878 1042 L
+5878 1042 mt 5879 1043 L
+5879 1043 mt 5903 1071 L
+5903 1071 mt 5913 1082 L
+5913 1082 mt 5927 1098 L
+5927 1098 mt 5948 1123 L
+5948 1123 mt 5950 1126 L
+5950 1126 mt 5973 1153 L
+5973 1153 mt 5983 1165 L
+5983 1165 mt 5996 1181 L
+5996 1181 mt 6017 1206 L
+6017 1206 mt 6019 1208 L
+6019 1208 mt 6043 1236 L
+6043 1236 mt 6052 1246 L
+6052 1246 mt 6068 1263 L
+6068 1263 mt 6087 1284 L
+6087 1284 mt 6094 1291 L
+6094 1291 mt 6120 1318 L
+6120 1318 mt 6122 1321 L
+6122 1321 mt 6146 1346 L
+6146 1346 mt 6157 1357 L
+6157 1357 mt 6172 1373 L
+6172 1373 mt 6192 1394 L
+6192 1394 mt 6198 1401 L
+6198 1401 mt 6224 1428 L
+6224 1428 mt 6227 1432 L
+6227 1432 mt 6248 1456 L
+6248 1456 mt 6261 1472 L
+6261 1472 mt 6271 1484 L
+6271 1484 mt 6293 1511 L
+6293 1511 mt 6296 1516 L
+6296 1516 mt 6313 1539 L
+6313 1539 mt 6331 1566 L
+6331 1566 mt 6331 1567 L
+6331 1567 mt 6346 1594 L
+6346 1594 mt 6360 1621 L
+6360 1621 mt 6366 1636 L
+6366 1636 mt 6371 1649 L
+6371 1649 mt 6381 1676 L
+6381 1676 mt 6388 1704 L
+6388 1704 mt 6394 1731 L
+6394 1731 mt 6398 1759 L
+6398 1759 mt 6401 1781 L
+6331 1653 mt 6339 1676 L
+6339 1676 mt 6346 1704 L
+6346 1704 mt 6351 1731 L
+6351 1731 mt 6354 1759 L
+6354 1759 mt 6356 1786 L
+6356 1786 mt 6357 1814 L
+6357 1814 mt 6358 1841 L
+6358 1841 mt 6358 1869 L
+6358 1869 mt 6358 1896 L
+6358 1896 mt 6357 1924 L
+6357 1924 mt 6356 1951 L
+6356 1951 mt 6353 1979 L
+6353 1979 mt 6349 2006 L
+6349 2006 mt 6344 2034 L
+6344 2034 mt 6339 2061 L
+6339 2061 mt 6333 2089 L
+6333 2089 mt 6331 2100 L
+6331 2100 mt 6328 2116 L
+6328 2116 mt 6322 2144 L
+6322 2144 mt 6315 2171 L
+6315 2171 mt 6308 2199 L
+6308 2199 mt 6300 2226 L
+6300 2226 mt 6296 2237 L
+6296 2237 mt 6290 2254 L
+6290 2254 mt 6281 2281 L
+6281 2281 mt 6273 2309 L
+6273 2309 mt 6267 2336 L
+6267 2336 mt 6262 2364 L
+6262 2364 mt 6261 2365 L
+6261 2365 mt 6246 2391 L
+6246 2391 mt 6227 2414 L
+6227 2414 mt 6192 2416 L
+6192 2416 mt 6157 2403 L
+6157 2403 mt 6137 2391 L
+6137 2391 mt 6122 2382 L
+6122 2382 mt 6097 2364 L
+6097 2364 mt 6087 2355 L
+6087 2355 mt 6068 2336 L
+6068 2336 mt 6053 2309 L
+6053 2309 mt 6052 2304 L
+6052 2304 mt 6050 2281 L
+6050 2281 mt 6052 2273 L
+6052 2273 mt 6058 2254 L
+6058 2254 mt 6072 2226 L
+6072 2226 mt 6084 2199 L
+6084 2199 mt 6087 2191 L
+6087 2191 mt 6094 2171 L
+6094 2171 mt 6101 2144 L
+6101 2144 mt 6103 2116 L
+6103 2116 mt 6106 2089 L
+6106 2089 mt 6109 2061 L
+6109 2061 mt 6113 2034 L
+6113 2034 mt 6118 2006 L
+6118 2006 mt 6122 1985 L
+6122 1985 mt 6123 1979 L
+6123 1979 mt 6128 1951 L
+6128 1951 mt 6131 1924 L
+6131 1924 mt 6133 1896 L
+6133 1896 mt 6136 1869 L
+6136 1869 mt 6138 1841 L
+6138 1841 mt 6139 1814 L
+6139 1814 mt 6139 1786 L
+6139 1786 mt 6138 1759 L
+6138 1759 mt 6136 1731 L
+6136 1731 mt 6131 1704 L
+6131 1704 mt 6124 1676 L
+6124 1676 mt 6122 1670 L
+6122 1670 mt 6114 1649 L
+6114 1649 mt 6102 1621 L
+6102 1621 mt 6087 1594 L
+6087 1594 mt 6087 1593 L
+6087 1593 mt 6066 1566 L
+6066 1566 mt 6052 1550 L
+6052 1550 mt 6040 1539 L
+6040 1539 mt 6017 1520 L
+6017 1520 mt 6004 1511 L
+6004 1511 mt 5983 1498 L
+5983 1498 mt 5959 1484 L
+5959 1484 mt 5948 1477 L
+5948 1477 mt 5913 1457 L
+5913 1457 mt 5910 1456 L
+5910 1456 mt 5878 1440 L
+5878 1440 mt 5855 1428 L
+5855 1428 mt 5843 1423 L
+5843 1423 mt 5808 1410 L
+5808 1410 mt 5778 1401 L
+5778 1401 mt 5773 1400 L
+5773 1400 mt 5738 1394 L
+5738 1394 mt 5704 1390 L
+5704 1390 mt 5669 1389 L
+5669 1389 mt 5634 1390 L
+5634 1390 mt 5599 1392 L
+5599 1392 mt 5564 1396 L
+5564 1396 mt 5529 1400 L
+5529 1400 mt 5523 1401 L
+5523 1401 mt 5494 1405 L
+5494 1405 mt 5459 1409 L
+5459 1409 mt 5425 1405 L
+5425 1405 mt 5416 1401 L
+5416 1401 mt 5390 1374 L
+5390 1374 mt 5390 1373 L
+5390 1373 mt 5383 1346 L
+5383 1346 mt 5377 1318 L
+5377 1318 mt 5372 1291 L
+5372 1291 mt 5367 1263 L
+5367 1263 mt 5361 1236 L
+5361 1236 mt 5355 1219 L
+5355 1219 mt 5350 1208 L
+5350 1208 mt 5332 1181 L
+5332 1181 mt 5320 1167 L
+5320 1167 mt 5306 1153 L
+5306 1153 mt 5285 1136 L
+5285 1136 mt 5270 1126 L
+5270 1126 mt 5250 1114 L
+5250 1114 mt 5222 1098 L
+5222 1098 mt 5215 1095 L
+5215 1095 mt 5181 1079 L
+5181 1079 mt 5163 1071 L
+5163 1071 mt 5146 1064 L
+5146 1064 mt 5111 1047 L
+5111 1047 mt 5105 1043 L
+5105 1043 mt 5076 1030 L
+5076 1030 mt 5054 1016 L
+5054 1016 mt 5041 1008 L
+5041 1008 mt 5017 988 L
+5017 988 mt 5006 979 L
+5006 979 mt 4992 961 L
+4992 961 mt 4973 933 L
+4973 933 mt 4971 931 L
+4971 931 mt 4956 906 L
+4956 906 mt 4940 878 L
+4940 878 mt 4936 871 L
+4936 871 mt 4924 851 L
+4924 851 mt 4910 823 L
+4910 823 mt 4902 809 L
+4902 809 mt 4892 796 L
+4892 796 mt 4867 769 L
+4867 769 mt 4866 768 L
+4866 768 mt 4832 746 L
+4832 746 mt 4821 741 L
+4821 741 mt 4797 731 L
+4797 731 mt 4762 720 L
+4762 720 mt 4737 713 L
+4737 713 mt 4727 711 L
+4727 711 mt 4692 700 L
+4692 700 mt 4661 686 L
+4661 686 mt 4657 683 L
+4657 683 mt 4631 658 L
+4631 658 mt 4623 642 L
+4623 642 mt 4618 631 L
+4618 631 mt 4617 603 L
+4617 603 mt 4621 576 L
+4621 576 mt 4621 548 L
+4621 548 mt 4611 521 L
+4611 521 mt 4593 493 L
+4593 493 mt 4588 487 L
+4588 487 mt 4563 466 L
+4563 466 mt 4553 457 L
+4553 457 mt 4528 438 L
+4528 438 mt 4518 426 L
+4518 426 mt 4505 411 L
+4505 411 mt 4518 395 L
+4518 395 mt 4547 383 L
+4547 383 mt 4553 382 L
+4553 382 mt 4588 369 L
+4588 369 mt 4623 357 L
+4623 357 mt 4628 355 L
+4628 355 mt 4657 348 L
+4657 348 mt 4692 340 L
+4692 340 mt 4727 331 L
+4727 331 mt 4738 328 L
+4738 328 mt 4762 323 L
+4762 323 mt 4797 315 L
+4797 315 mt 4832 308 L
+4832 308 mt 4867 302 L
+4867 302 mt 4874 300 L
+4874 300 mt 4902 297 L
+4902 297 mt 4936 293 L
+4936 293 mt 4971 291 L
+4971 291 mt 5006 291 L
+5006 291 mt 5041 293 L
+5041 293 mt 5076 298 L
+5076 298 mt 5086 300 L
+5086 300 mt 5111 306 L
+5111 306 mt 5146 317 L
+5146 317 mt 5172 328 L
+5172 328 mt 5181 332 L
+5181 332 mt 5215 350 L
+5215 350 mt 5224 355 L
+5224 355 mt 5250 374 L
+5250 374 mt 5263 383 L
+5263 383 mt 5285 402 L
+5285 402 mt 5295 411 L
+5295 411 mt 5320 434 L
+5320 434 mt 5324 438 L
+5324 438 mt 5350 466 L
+5350 466 mt 5355 471 L
+5355 471 mt 5375 493 L
+5375 493 mt 5390 510 L
+5390 510 mt 5400 521 L
+5400 521 mt 5425 548 L
+5425 548 mt 5425 548 L
+5425 548 mt 5450 576 L
+5450 576 mt 5459 585 L
+5459 585 mt 5477 603 L
+5477 603 mt 5494 621 L
+5494 621 mt 5504 631 L
+5504 631 mt 5527 658 L
+5527 658 mt 5529 661 L
+5529 661 mt 5548 686 L
+5548 686 mt 5564 709 L
+5564 709 mt 5567 713 L
+5567 713 mt 5585 741 L
+5585 741 mt 5599 762 L
+5599 762 mt 5603 768 L
+5603 768 mt 5622 796 L
+5622 796 mt 5634 813 L
+5634 813 mt 5641 823 L
+5641 823 mt 5661 851 L
+5661 851 mt 5669 861 L
+5669 861 mt 5682 878 L
+5682 878 mt 5704 905 L
+5704 905 mt 5704 906 L
+5704 906 mt 5728 933 L
+5728 933 mt 5738 945 L
+5738 945 mt 5752 961 L
+5752 961 mt 5773 984 L
+5773 984 mt 5777 988 L
+5777 988 mt 5802 1016 L
+5802 1016 mt 5808 1022 L
+5808 1022 mt 5827 1043 L
+5827 1043 mt 5843 1061 L
+5843 1061 mt 5852 1071 L
+5852 1071 mt 5876 1098 L
+5876 1098 mt 5878 1101 L
+5878 1101 mt 5898 1126 L
+5898 1126 mt 5913 1144 L
+5913 1144 mt 5921 1153 L
+5921 1153 mt 5942 1181 L
+5942 1181 mt 5948 1188 L
+5948 1188 mt 5964 1208 L
+5964 1208 mt 5983 1230 L
+5983 1230 mt 5987 1236 L
+5987 1236 mt 6011 1263 L
+6011 1263 mt 6017 1270 L
+6017 1270 mt 6036 1291 L
+6036 1291 mt 6052 1308 L
+6052 1308 mt 6063 1318 L
+6063 1318 mt 6087 1343 L
+6087 1343 mt 6090 1346 L
+6090 1346 mt 6116 1373 L
+6116 1373 mt 6122 1379 L
+6122 1379 mt 6143 1401 L
+6143 1401 mt 6157 1415 L
+6157 1415 mt 6170 1428 L
+6170 1428 mt 6192 1451 L
+6192 1451 mt 6196 1456 L
+6196 1456 mt 6221 1484 L
+6221 1484 mt 6227 1490 L
+6227 1490 mt 6244 1511 L
+6244 1511 mt 6261 1532 L
+6261 1532 mt 6266 1539 L
+6266 1539 mt 6286 1566 L
+6286 1566 mt 6296 1583 L
+6296 1583 mt 6303 1594 L
+6303 1594 mt 6317 1621 L
+6317 1621 mt 6329 1649 L
+6329 1649 mt 6331 1653 L
+6296 1682 mt 6302 1704 L
+6302 1704 mt 6305 1731 L
+6305 1731 mt 6306 1759 L
+6306 1759 mt 6305 1786 L
+6305 1786 mt 6304 1814 L
+6304 1814 mt 6303 1841 L
+6303 1841 mt 6302 1869 L
+6302 1869 mt 6302 1896 L
+6302 1896 mt 6302 1924 L
+6302 1924 mt 6300 1951 L
+6300 1951 mt 6296 1974 L
+6296 1974 mt 6296 1979 L
+6296 1979 mt 6289 2006 L
+6289 2006 mt 6281 2034 L
+6281 2034 mt 6273 2061 L
+6273 2061 mt 6267 2089 L
+6267 2089 mt 6262 2116 L
+6262 2116 mt 6261 2120 L
+6261 2120 mt 6257 2144 L
+6257 2144 mt 6250 2171 L
+6250 2171 mt 6241 2199 L
+6241 2199 mt 6228 2226 L
+6228 2226 mt 6227 2230 L
+6227 2230 mt 6208 2254 L
+6208 2254 mt 6192 2275 L
+6192 2275 mt 6167 2281 L
+6167 2281 mt 6157 2285 L
+6157 2285 mt 6154 2281 L
+6154 2281 mt 6135 2254 L
+6135 2254 mt 6136 2226 L
+6136 2226 mt 6145 2199 L
+6145 2199 mt 6153 2171 L
+6153 2171 mt 6157 2154 L
+6157 2154 mt 6159 2144 L
+6159 2144 mt 6163 2116 L
+6163 2116 mt 6166 2089 L
+6166 2089 mt 6169 2061 L
+6169 2061 mt 6173 2034 L
+6173 2034 mt 6177 2006 L
+6177 2006 mt 6181 1979 L
+6181 1979 mt 6183 1951 L
+6183 1951 mt 6184 1924 L
+6184 1924 mt 6183 1896 L
+6183 1896 mt 6184 1869 L
+6184 1869 mt 6185 1841 L
+6185 1841 mt 6186 1814 L
+6186 1814 mt 6186 1786 L
+6186 1786 mt 6186 1759 L
+6186 1759 mt 6184 1731 L
+6184 1731 mt 6180 1704 L
+6180 1704 mt 6173 1676 L
+6173 1676 mt 6163 1649 L
+6163 1649 mt 6157 1636 L
+6157 1636 mt 6151 1621 L
+6151 1621 mt 6137 1594 L
+6137 1594 mt 6122 1572 L
+6122 1572 mt 6118 1566 L
+6118 1566 mt 6096 1539 L
+6096 1539 mt 6087 1530 L
+6087 1530 mt 6068 1511 L
+6068 1511 mt 6052 1498 L
+6052 1498 mt 6032 1484 L
+6032 1484 mt 6017 1474 L
+6017 1474 mt 5985 1456 L
+5985 1456 mt 5983 1454 L
+5983 1454 mt 5948 1435 L
+5948 1435 mt 5936 1428 L
+5936 1428 mt 5913 1415 L
+5913 1415 mt 5882 1401 L
+5882 1401 mt 5878 1399 L
+5878 1399 mt 5843 1383 L
+5843 1383 mt 5812 1373 L
+5812 1373 mt 5808 1372 L
+5808 1372 mt 5773 1363 L
+5773 1363 mt 5738 1357 L
+5738 1357 mt 5704 1354 L
+5704 1354 mt 5669 1352 L
+5669 1352 mt 5634 1352 L
+5634 1352 mt 5599 1353 L
+5599 1353 mt 5564 1354 L
+5564 1354 mt 5529 1355 L
+5529 1355 mt 5494 1352 L
+5494 1352 mt 5477 1346 L
+5477 1346 mt 5459 1334 L
+5459 1334 mt 5450 1318 L
+5450 1318 mt 5442 1291 L
+5442 1291 mt 5437 1263 L
+5437 1263 mt 5433 1236 L
+5433 1236 mt 5430 1208 L
+5430 1208 mt 5425 1181 L
+5425 1181 mt 5425 1179 L
+5425 1179 mt 5415 1153 L
+5415 1153 mt 5398 1126 L
+5398 1126 mt 5390 1116 L
+5390 1116 mt 5371 1098 L
+5371 1098 mt 5355 1086 L
+5355 1086 mt 5331 1071 L
+5331 1071 mt 5320 1065 L
+5320 1065 mt 5285 1047 L
+5285 1047 mt 5275 1043 L
+5275 1043 mt 5250 1034 L
+5250 1034 mt 5215 1022 L
+5215 1022 mt 5196 1016 L
+5196 1016 mt 5181 1011 L
+5181 1011 mt 5146 1000 L
+5146 1000 mt 5113 988 L
+5113 988 mt 5111 988 L
+5111 988 mt 5076 972 L
+5076 972 mt 5059 961 L
+5059 961 mt 5041 949 L
+5041 949 mt 5025 933 L
+5025 933 mt 5006 912 L
+5006 912 mt 5002 906 L
+5002 906 mt 4981 878 L
+4981 878 mt 4971 865 L
+4971 865 mt 4963 851 L
+4963 851 mt 4950 823 L
+4950 823 mt 4938 796 L
+4938 796 mt 4936 792 L
+4936 792 mt 4923 768 L
+4923 768 mt 4902 742 L
+4902 742 mt 4900 741 L
+4900 741 mt 4867 718 L
+4867 718 mt 4856 713 L
+4856 713 mt 4832 704 L
+4832 704 mt 4797 693 L
+4797 693 mt 4770 686 L
+4770 686 mt 4762 683 L
+4762 683 mt 4727 674 L
+4727 674 mt 4692 661 L
+4692 661 mt 4688 658 L
+4688 658 mt 4665 631 L
+4665 631 mt 4664 603 L
+4664 603 mt 4674 576 L
+4674 576 mt 4684 548 L
+4684 548 mt 4687 521 L
+4687 521 mt 4683 493 L
+4683 493 mt 4672 466 L
+4672 466 mt 4659 438 L
+4659 438 mt 4659 411 L
+4659 411 mt 4692 397 L
+4692 397 mt 4710 383 L
+4710 383 mt 4727 376 L
+4727 376 mt 4762 363 L
+4762 363 mt 4784 355 L
+4784 355 mt 4797 352 L
+4797 352 mt 4832 341 L
+4832 341 mt 4867 332 L
+4867 332 mt 4883 328 L
+4883 328 mt 4902 324 L
+4902 324 mt 4936 318 L
+4936 318 mt 4971 314 L
+4971 314 mt 5006 312 L
+5006 312 mt 5041 314 L
+5041 314 mt 5076 318 L
+5076 318 mt 5111 326 L
+5111 326 mt 5117 328 L
+5117 328 mt 5146 338 L
+5146 338 mt 5181 354 L
+5181 354 mt 5183 355 L
+5183 355 mt 5215 375 L
+5215 375 mt 5226 383 L
+5226 383 mt 5250 402 L
+5250 402 mt 5260 411 L
+5260 411 mt 5285 435 L
+5285 435 mt 5288 438 L
+5288 438 mt 5313 466 L
+5313 466 mt 5320 474 L
+5320 474 mt 5336 493 L
+5336 493 mt 5355 516 L
+5355 516 mt 5359 521 L
+5359 521 mt 5382 548 L
+5382 548 mt 5390 558 L
+5390 558 mt 5406 576 L
+5406 576 mt 5425 595 L
+5425 595 mt 5432 603 L
+5432 603 mt 5459 629 L
+5459 629 mt 5461 631 L
+5461 631 mt 5487 658 L
+5487 658 mt 5494 667 L
+5494 667 mt 5508 686 L
+5508 686 mt 5525 713 L
+5525 713 mt 5529 720 L
+5529 720 mt 5541 741 L
+5541 741 mt 5557 768 L
+5557 768 mt 5564 780 L
+5564 780 mt 5573 796 L
+5573 796 mt 5590 823 L
+5590 823 mt 5599 837 L
+5599 837 mt 5608 851 L
+5608 851 mt 5627 878 L
+5627 878 mt 5634 887 L
+5634 887 mt 5648 906 L
+5648 906 mt 5669 931 L
+5669 931 mt 5671 933 L
+5671 933 mt 5695 961 L
+5695 961 mt 5704 970 L
+5704 970 mt 5720 988 L
+5720 988 mt 5738 1008 L
+5738 1008 mt 5746 1016 L
+5746 1016 mt 5772 1043 L
+5772 1043 mt 5773 1045 L
+5773 1045 mt 5797 1071 L
+5797 1071 mt 5808 1083 L
+5808 1083 mt 5822 1098 L
+5822 1098 mt 5843 1123 L
+5843 1123 mt 5845 1126 L
+5845 1126 mt 5867 1153 L
+5867 1153 mt 5878 1169 L
+5878 1169 mt 5887 1181 L
+5887 1181 mt 5907 1208 L
+5907 1208 mt 5913 1217 L
+5913 1217 mt 5926 1236 L
+5926 1236 mt 5948 1263 L
+5948 1263 mt 5948 1263 L
+5948 1263 mt 5971 1291 L
+5971 1291 mt 5983 1304 L
+5983 1304 mt 5996 1318 L
+5996 1318 mt 6017 1340 L
+6017 1340 mt 6023 1346 L
+6023 1346 mt 6051 1373 L
+6051 1373 mt 6052 1375 L
+6052 1375 mt 6077 1401 L
+6077 1401 mt 6087 1410 L
+6087 1410 mt 6105 1428 L
+6105 1428 mt 6122 1444 L
+6122 1444 mt 6134 1456 L
+6134 1456 mt 6157 1478 L
+6157 1478 mt 6162 1484 L
+6162 1484 mt 6187 1511 L
+6187 1511 mt 6192 1516 L
+6192 1516 mt 6211 1539 L
+6211 1539 mt 6227 1556 L
+6227 1556 mt 6234 1566 L
+6234 1566 mt 6254 1594 L
+6254 1594 mt 6261 1606 L
+6261 1606 mt 6270 1621 L
+6270 1621 mt 6283 1649 L
+6283 1649 mt 6295 1676 L
+6295 1676 mt 6296 1682 L
+5913 1345 mt 5913 1346 L
+5913 1346 mt 5913 1346 L
+5913 1346 mt 5909 1346 L
+5909 1346 mt 5878 1342 L
+5878 1342 mt 5843 1335 L
+5843 1335 mt 5808 1329 L
+5808 1329 mt 5773 1325 L
+5773 1325 mt 5738 1322 L
+5738 1322 mt 5704 1319 L
+5704 1319 mt 5692 1318 L
+5692 1318 mt 5669 1317 L
+5669 1317 mt 5634 1315 L
+5634 1315 mt 5599 1315 L
+5599 1315 mt 5564 1312 L
+5564 1312 mt 5529 1305 L
+5529 1305 mt 5508 1291 L
+5508 1291 mt 5494 1269 L
+5494 1269 mt 5492 1263 L
+5492 1263 mt 5487 1236 L
+5487 1236 mt 5485 1208 L
+5485 1208 mt 5481 1181 L
+5481 1181 mt 5475 1153 L
+5475 1153 mt 5464 1126 L
+5464 1126 mt 5459 1117 L
+5459 1117 mt 5447 1098 L
+5447 1098 mt 5425 1073 L
+5425 1073 mt 5422 1071 L
+5422 1071 mt 5390 1044 L
+5390 1044 mt 5389 1043 L
+5389 1043 mt 5355 1022 L
+5355 1022 mt 5343 1016 L
+5343 1016 mt 5320 1006 L
+5320 1006 mt 5285 993 L
+5285 993 mt 5272 988 L
+5272 988 mt 5250 982 L
+5250 982 mt 5215 973 L
+5215 973 mt 5181 965 L
+5181 965 mt 5166 961 L
+5166 961 mt 5146 956 L
+5146 956 mt 5111 943 L
+5111 943 mt 5093 933 L
+5093 933 mt 5076 923 L
+5076 923 mt 5054 906 L
+5054 906 mt 5041 894 L
+5041 894 mt 5027 878 L
+5027 878 mt 5006 852 L
+5006 852 mt 5005 851 L
+5005 851 mt 4991 823 L
+4991 823 mt 4982 796 L
+4982 796 mt 4971 771 L
+4971 771 mt 4970 768 L
+4970 768 mt 4952 741 L
+4952 741 mt 4936 721 L
+4936 721 mt 4929 713 L
+4929 713 mt 4902 690 L
+4902 690 mt 4892 686 L
+4892 686 mt 4867 675 L
+4867 675 mt 4832 663 L
+4832 663 mt 4818 658 L
+4818 658 mt 4797 648 L
+4797 648 mt 4762 633 L
+4762 633 mt 4757 631 L
+4757 631 mt 4738 603 L
+4738 603 mt 4744 576 L
+4744 576 mt 4755 548 L
+4755 548 mt 4762 531 L
+4762 531 mt 4766 521 L
+4766 521 mt 4772 493 L
+4772 493 mt 4773 466 L
+4773 466 mt 4774 438 L
+4774 438 mt 4785 411 L
+4785 411 mt 4797 403 L
+4797 403 mt 4824 383 L
+4824 383 mt 4832 379 L
+4832 379 mt 4867 365 L
+4867 365 mt 4894 355 L
+4894 355 mt 4902 353 L
+4902 353 mt 4936 344 L
+4936 344 mt 4971 337 L
+4971 337 mt 5006 333 L
+5006 333 mt 5041 333 L
+5041 333 mt 5076 337 L
+5076 337 mt 5111 345 L
+5111 345 mt 5138 355 L
+5138 355 mt 5146 359 L
+5146 359 mt 5181 377 L
+5181 377 mt 5190 383 L
+5190 383 mt 5215 402 L
+5215 402 mt 5226 411 L
+5226 411 mt 5250 435 L
+5250 435 mt 5254 438 L
+5254 438 mt 5278 466 L
+5278 466 mt 5285 476 L
+5285 476 mt 5299 493 L
+5299 493 mt 5319 521 L
+5319 521 mt 5320 523 L
+5320 523 mt 5338 548 L
+5338 548 mt 5355 570 L
+5355 570 mt 5359 576 L
+5359 576 mt 5383 603 L
+5383 603 mt 5390 611 L
+5390 611 mt 5410 631 L
+5410 631 mt 5425 642 L
+5425 642 mt 5443 658 L
+5443 658 mt 5459 673 L
+5459 673 mt 5469 686 L
+5469 686 mt 5483 713 L
+5483 713 mt 5494 736 L
+5494 736 mt 5497 741 L
+5497 741 mt 5510 768 L
+5510 768 mt 5523 796 L
+5523 796 mt 5529 809 L
+5529 809 mt 5536 823 L
+5536 823 mt 5551 851 L
+5551 851 mt 5564 873 L
+5564 873 mt 5568 878 L
+5568 878 mt 5586 906 L
+5586 906 mt 5599 923 L
+5599 923 mt 5607 933 L
+5607 933 mt 5630 961 L
+5630 961 mt 5634 965 L
+5634 965 mt 5655 988 L
+5655 988 mt 5669 1002 L
+5669 1002 mt 5681 1016 L
+5681 1016 mt 5704 1038 L
+5704 1038 mt 5709 1043 L
+5709 1043 mt 5737 1071 L
+5737 1071 mt 5738 1072 L
+5738 1072 mt 5763 1098 L
+5763 1098 mt 5773 1109 L
+5773 1109 mt 5788 1126 L
+5788 1126 mt 5808 1150 L
+5808 1150 mt 5811 1153 L
+5811 1153 mt 5830 1181 L
+5830 1181 mt 5843 1203 L
+5843 1203 mt 5847 1208 L
+5847 1208 mt 5860 1236 L
+5860 1236 mt 5872 1263 L
+5872 1263 mt 5878 1278 L
+5878 1278 mt 5884 1291 L
+5884 1291 mt 5899 1318 L
+5899 1318 mt 5913 1345 L
+5773 1188 mt 5785 1208 L
+5785 1208 mt 5794 1236 L
+5794 1236 mt 5786 1263 L
+5786 1263 mt 5773 1272 L
+5773 1272 mt 5738 1279 L
+5738 1279 mt 5704 1278 L
+5704 1278 mt 5669 1276 L
+5669 1276 mt 5634 1273 L
+5634 1273 mt 5599 1269 L
+5599 1269 mt 5583 1263 L
+5583 1263 mt 5564 1254 L
+5564 1254 mt 5548 1236 L
+5548 1236 mt 5539 1208 L
+5539 1208 mt 5534 1181 L
+5534 1181 mt 5529 1158 L
+5529 1158 mt 5528 1153 L
+5528 1153 mt 5520 1126 L
+5520 1126 mt 5509 1098 L
+5509 1098 mt 5494 1075 L
+5494 1075 mt 5492 1071 L
+5492 1071 mt 5469 1043 L
+5469 1043 mt 5459 1034 L
+5459 1034 mt 5437 1016 L
+5437 1016 mt 5425 1006 L
+5425 1006 mt 5394 988 L
+5394 988 mt 5390 986 L
+5390 986 mt 5355 970 L
+5355 970 mt 5325 961 L
+5325 961 mt 5320 959 L
+5320 959 mt 5285 948 L
+5285 948 mt 5250 940 L
+5250 940 mt 5215 933 L
+5215 933 mt 5215 933 L
+5215 933 mt 5181 924 L
+5181 924 mt 5146 912 L
+5146 912 mt 5131 906 L
+5131 906 mt 5111 895 L
+5111 895 mt 5085 878 L
+5085 878 mt 5076 870 L
+5076 870 mt 5061 851 L
+5061 851 mt 5043 823 L
+5043 823 mt 5041 819 L
+5041 819 mt 5033 796 L
+5033 796 mt 5023 768 L
+5023 768 mt 5006 742 L
+5006 742 mt 5006 741 L
+5006 741 mt 4985 713 L
+4985 713 mt 4971 699 L
+4971 699 mt 4960 686 L
+4960 686 mt 4936 666 L
+4936 666 mt 4925 658 L
+4925 658 mt 4902 644 L
+4902 644 mt 4873 631 L
+4873 631 mt 4867 626 L
+4867 626 mt 4837 603 L
+4837 603 mt 4832 595 L
+4832 595 mt 4821 576 L
+4821 576 mt 4820 548 L
+4820 548 mt 4824 521 L
+4824 521 mt 4831 493 L
+4831 493 mt 4832 489 L
+4832 489 mt 4836 466 L
+4836 466 mt 4843 438 L
+4843 438 mt 4862 411 L
+4862 411 mt 4867 408 L
+4867 408 mt 4902 387 L
+4902 387 mt 4908 383 L
+4908 383 mt 4936 371 L
+4936 371 mt 4971 360 L
+4971 360 mt 4997 355 L
+4997 355 mt 5006 354 L
+5006 354 mt 5041 352 L
+5041 352 mt 5075 355 L
+5075 355 mt 5076 356 L
+5076 356 mt 5111 365 L
+5111 365 mt 5146 379 L
+5146 379 mt 5152 383 L
+5152 383 mt 5181 402 L
+5181 402 mt 5192 411 L
+5192 411 mt 5215 433 L
+5215 433 mt 5221 438 L
+5221 438 mt 5243 466 L
+5243 466 mt 5250 476 L
+5250 476 mt 5263 493 L
+5263 493 mt 5279 521 L
+5279 521 mt 5285 531 L
+5285 531 mt 5295 548 L
+5295 548 mt 5311 576 L
+5311 576 mt 5320 591 L
+5320 591 mt 5328 603 L
+5328 603 mt 5349 631 L
+5349 631 mt 5355 637 L
+5355 637 mt 5376 658 L
+5376 658 mt 5390 669 L
+5390 669 mt 5415 686 L
+5415 686 mt 5425 694 L
+5425 694 mt 5436 713 L
+5436 713 mt 5447 741 L
+5447 741 mt 5458 768 L
+5458 768 mt 5459 772 L
+5459 772 mt 5467 796 L
+5467 796 mt 5476 823 L
+5476 823 mt 5486 851 L
+5486 851 mt 5494 871 L
+5494 871 mt 5497 878 L
+5497 878 mt 5510 906 L
+5510 906 mt 5527 933 L
+5527 933 mt 5529 936 L
+5529 936 mt 5547 961 L
+5547 961 mt 5564 980 L
+5564 980 mt 5571 988 L
+5571 988 mt 5599 1015 L
+5599 1015 mt 5600 1016 L
+5600 1016 mt 5629 1043 L
+5629 1043 mt 5634 1047 L
+5634 1047 mt 5660 1071 L
+5660 1071 mt 5669 1077 L
+5669 1077 mt 5692 1098 L
+5692 1098 mt 5704 1108 L
+5704 1108 mt 5723 1126 L
+5723 1126 mt 5738 1143 L
+5738 1143 mt 5748 1153 L
+5748 1153 mt 5769 1181 L
+5769 1181 mt 5773 1188 L
+5111 460 mt 5115 466 L
+5115 466 mt 5122 493 L
+5122 493 mt 5123 521 L
+5123 521 mt 5116 548 L
+5116 548 mt 5111 555 L
+5111 555 mt 5076 559 L
+5076 559 mt 5044 548 L
+5044 548 mt 5041 546 L
+5041 546 mt 5019 521 L
+5019 521 mt 5007 493 L
+5007 493 mt 5013 466 L
+5013 466 mt 5029 438 L
+5029 438 mt 5041 430 L
+5041 430 mt 5076 433 L
+5076 433 mt 5086 438 L
+5086 438 mt 5111 460 L
+gr
+
+0 sg
+24 W
+4390 4604 PD
+24 W
+4388 4604 PD
+24 W
+4375 4586 PD
+24 W
+4365 4567 PD
+24 W
+4358 4546 PD
+24 W
+4350 4528 PD
+24 W
+4342 4509 PD
+24 W
+4336 4492 PD
+24 W
+4332 4473 PD
+24 W
+4336 4454 PD
+24 W
+4351 4436 PD
+24 W
+4358 4417 PD
+24 W
+4364 4399 PD
+24 W
+4365 4380 PD
+24 W
+4360 4362 PD
+24 W
+4362 4344 PD
+24 W
+4370 4326 PD
+24 W
+4367 4307 PD
+24 W
+4359 4289 PD
+24 W
+4356 4270 PD
+24 W
+4382 4254 PD
+24 W
+4398 4236 PD
+24 W
+4404 4217 PD
+24 W
+4412 4200 PD
+24 W
+4415 4180 PD
+24 W
+4423 4162 PD
+24 W
+4451 4158 PD
+24 W
+4478 4173 PD
+24 W
+4488 4191 PD
+24 W
+4499 4209 PD
+24 W
+4528 4223 PD
+24 W
+4549 4241 PD
+24 W
+4552 4259 PD
+24 W
+4559 4277 PD
+24 W
+4581 4296 PD
+24 W
+4600 4314 PD
+24 W
+4620 4331 PD
+24 W
+4625 4349 PD
+24 W
+4632 4367 PD
+24 W
+4660 4384 PD
+24 W
+4665 4402 PD
+24 W
+4673 4421 PD
+24 W
+4688 4439 PD
+24 W
+4689 4458 PD
+24 W
+4690 4477 PD
+24 W
+4696 4496 PD
+24 W
+4697 4514 PD
+24 W
+4727 4515 PD
+24 W
+4754 4512 PD
+24 W
+4782 4507 PD
+24 W
+4810 4513 PD
+24 W
+4809 4531 PD
+24 W
+4818 4550 PD
+24 W
+4842 4568 PD
+24 W
+4838 4586 PD
+24 W
+4866 4592 PD
+24 W
+4893 4591 PD
+24 W
+4921 4593 PD
+24 W
+4948 4590 PD
+24 W
+4975 4601 PD
+24 W
+4293 4609 PD
+24 W
+4300 4591 PD
+24 W
+4305 4572 PD
+24 W
+4300 4553 PD
+24 W
+4297 4534 PD
+24 W
+4293 4516 PD
+24 W
+4284 4498 PD
+24 W
+4273 4480 PD
+24 W
+4263 4461 PD
+24 W
+4251 4441 PD
+24 W
+4239 4423 PD
+24 W
+4233 4405 PD
+24 W
+4225 4386 PD
+24 W
+4219 4367 PD
+24 W
+4215 4348 PD
+24 W
+4215 4329 PD
+24 W
+4220 4309 PD
+24 W
+4222 4291 PD
+24 W
+4221 4270 PD
+24 W
+4217 4251 PD
+24 W
+4215 4233 PD
+24 W
+4212 4212 PD
+24 W
+4207 4195 PD
+24 W
+4194 4176 PD
+24 W
+4186 4156 PD
+24 W
+4182 4136 PD
+24 W
+4179 4118 PD
+24 W
+4189 4100 PD
+24 W
+4209 4082 PD
+24 W
+4219 4063 PD
+24 W
+4222 4046 PD
+24 W
+4217 4027 PD
+24 W
+4204 4009 PD
+24 W
+4201 3991 PD
+24 W
+4207 3973 PD
+24 W
+4204 3955 PD
+24 W
+4192 3937 PD
+24 W
+4189 3919 PD
+24 W
+4197 3901 PD
+24 W
+4204 3884 PD
+24 W
+4214 3864 PD
+24 W
+4221 3846 PD
+24 W
+4225 3827 PD
+24 W
+4235 3807 PD
+24 W
+4250 3788 PD
+24 W
+4247 3770 PD
+24 W
+4229 3753 PD
+24 W
+4233 3734 PD
+24 W
+4262 3716 PD
+24 W
+4290 3708 PD
+24 W
+4319 3698 PD
+24 W
+4346 3689 PD
+24 W
+4375 3685 PD
+24 W
+4404 3688 PD
+24 W
+4432 3685 PD
+24 W
+4459 3676 PD
+24 W
+4487 3689 PD
+24 W
+4517 3698 PD
+24 W
+4544 3698 PD
+24 W
+4571 3710 PD
+24 W
+4580 3728 PD
+24 W
+4588 3747 PD
+24 W
+4596 3765 PD
+24 W
+4607 3783 PD
+24 W
+4626 3802 PD
+24 W
+4648 3820 PD
+24 W
+4656 3839 PD
+24 W
+4655 3858 PD
+24 W
+4656 3875 PD
+24 W
+4668 3894 PD
+24 W
+4678 3912 PD
+24 W
+4693 3931 PD
+24 W
+4705 3949 PD
+24 W
+4714 3968 PD
+24 W
+4720 3987 PD
+24 W
+4724 4006 PD
+24 W
+4733 4024 PD
+24 W
+4751 4042 PD
+24 W
+4761 4060 PD
+24 W
+4768 4079 PD
+24 W
+4771 4097 PD
+24 W
+4779 4117 PD
+24 W
+4807 4133 PD
+24 W
+4834 4137 PD
+24 W
+4844 4157 PD
+24 W
+4839 4176 PD
+24 W
+4830 4194 PD
+24 W
+4821 4212 PD
+24 W
+4815 4231 PD
+24 W
+4807 4250 PD
+24 W
+4835 4261 PD
+24 W
+4848 4279 PD
+24 W
+4853 4297 PD
+24 W
+4856 4316 PD
+24 W
+4856 4336 PD
+24 W
+4871 4354 PD
+24 W
+4899 4350 PD
+24 W
+4926 4338 PD
+24 W
+4953 4334 PD
+24 W
+4973 4353 PD
+24 W
+4953 4372 PD
+24 W
+4959 4390 PD
+24 W
+4977 4408 PD
+24 W
+5000 4426 PD
+24 W
+5011 4444 PD
+24 W
+5018 4463 PD
+24 W
+5029 4481 PD
+24 W
+5056 4472 PD
+24 W
+5084 4486 PD
+24 W
+5111 4492 PD
+24 W
+5141 4495 PD
+24 W
+5119 4513 PD
+24 W
+5116 4531 PD
+24 W
+5131 4550 PD
+24 W
+5133 4568 PD
+24 W
+5160 4582 PD
+24 W
+5162 4600 PD
+24 W
+4209 4607 PD
+24 W
+4208 4607 PD
+24 W
+4207 4588 PD
+24 W
+4209 4570 PD
+24 W
+4207 4551 PD
+24 W
+4199 4532 PD
+24 W
+4195 4513 PD
+24 W
+4193 4493 PD
+24 W
+4186 4473 PD
+24 W
+4176 4455 PD
+24 W
+4160 4437 PD
+24 W
+4149 4418 PD
+24 W
+4145 4400 PD
+24 W
+4143 4380 PD
+24 W
+4144 4361 PD
+24 W
+4121 4344 PD
+24 W
+4116 4325 PD
+24 W
+4136 4307 PD
+24 W
+4143 4289 PD
+24 W
+4143 4272 PD
+24 W
+4140 4252 PD
+24 W
+4136 4234 PD
+24 W
+4130 4215 PD
+24 W
+4125 4197 PD
+24 W
+4124 4178 PD
+24 W
+4120 4159 PD
+24 W
+4116 4139 PD
+24 W
+4114 4121 PD
+24 W
+4111 4102 PD
+24 W
+4109 4084 PD
+24 W
+4104 4064 PD
+24 W
+4101 4046 PD
+24 W
+4096 4029 PD
+24 W
+4083 4010 PD
+24 W
+4070 3991 PD
+24 W
+4061 3972 PD
+24 W
+4046 3954 PD
+24 W
+4038 3935 PD
+24 W
+4034 3915 PD
+24 W
+4035 3898 PD
+24 W
+4040 3879 PD
+24 W
+4043 3861 PD
+24 W
+4049 3842 PD
+24 W
+4052 3823 PD
+24 W
+4047 3805 PD
+24 W
+4050 3787 PD
+24 W
+4050 3768 PD
+24 W
+4053 3750 PD
+24 W
+4048 3732 PD
+24 W
+4046 3715 PD
+24 W
+4041 3696 PD
+24 W
+4041 3678 PD
+24 W
+4042 3659 PD
+24 W
+4049 3641 PD
+24 W
+4050 3637 PD
+24 W
+4077 3630 PD
+24 W
+4105 3624 PD
+24 W
+4133 3617 PD
+24 W
+4160 3610 PD
+24 W
+4186 3601 PD
+24 W
+4213 3591 PD
+24 W
+4241 3576 PD
+24 W
+4268 3562 PD
+24 W
+4296 3553 PD
+24 W
+4325 3544 PD
+24 W
+4352 3530 PD
+24 W
+4368 3511 PD
+24 W
+4387 3494 PD
+24 W
+4401 3476 PD
+24 W
+4429 3478 PD
+24 W
+4456 3479 PD
+24 W
+4483 3477 PD
+24 W
+4511 3476 PD
+24 W
+4510 3475 PD
+24 W
+4536 3494 PD
+24 W
+4549 3512 PD
+24 W
+4563 3529 PD
+24 W
+4578 3548 PD
+24 W
+4600 3567 PD
+24 W
+4628 3576 PD
+24 W
+4652 3595 PD
+24 W
+4663 3614 PD
+24 W
+4679 3633 PD
+24 W
+4697 3651 PD
+24 W
+4711 3669 PD
+24 W
+4729 3689 PD
+24 W
+4746 3708 PD
+24 W
+4756 3727 PD
+24 W
+4764 3745 PD
+24 W
+4780 3764 PD
+24 W
+4793 3782 PD
+24 W
+4803 3801 PD
+24 W
+4813 3819 PD
+24 W
+4823 3836 PD
+24 W
+4833 3854 PD
+24 W
+4850 3872 PD
+24 W
+4869 3891 PD
+24 W
+4883 3910 PD
+24 W
+4897 3928 PD
+24 W
+4910 3946 PD
+24 W
+4920 3965 PD
+24 W
+4929 3985 PD
+24 W
+4936 4002 PD
+24 W
+4938 4020 PD
+24 W
+4944 4039 PD
+24 W
+4950 4057 PD
+24 W
+4957 4076 PD
+24 W
+4965 4095 PD
+24 W
+4972 4114 PD
+24 W
+4982 4134 PD
+24 W
+4988 4152 PD
+24 W
+4997 4170 PD
+24 W
+5007 4188 PD
+24 W
+5031 4206 PD
+24 W
+5041 4226 PD
+24 W
+5044 4244 PD
+24 W
+5045 4263 PD
+24 W
+5051 4282 PD
+24 W
+5070 4300 PD
+24 W
+5087 4319 PD
+24 W
+5098 4338 PD
+24 W
+5103 4357 PD
+24 W
+5108 4375 PD
+24 W
+5113 4393 PD
+24 W
+5120 4411 PD
+24 W
+5147 4416 PD
+24 W
+5159 4397 PD
+24 W
+5149 4379 PD
+24 W
+5138 4359 PD
+24 W
+5131 4341 PD
+24 W
+5128 4323 PD
+24 W
+5139 4305 PD
+24 W
+5167 4296 PD
+24 W
+5173 4314 PD
+24 W
+5177 4333 PD
+24 W
+5202 4351 PD
+24 W
+5219 4369 PD
+24 W
+5227 4387 PD
+24 W
+5232 4407 PD
+24 W
+5239 4425 PD
+24 W
+5242 4443 PD
+24 W
+5249 4461 PD
+24 W
+5243 4480 PD
+24 W
+5237 4499 PD
+24 W
+5234 4518 PD
+24 W
+5233 4535 PD
+24 W
+5239 4553 PD
+24 W
+5249 4571 PD
+24 W
+5246 4590 PD
+24 W
+5244 4608 PD
+24 W
+4118 4607 PD
+24 W
+4117 4607 PD
+24 W
+4117 4588 PD
+24 W
+4125 4571 PD
+24 W
+4125 4553 PD
+24 W
+4122 4535 PD
+24 W
+4114 4516 PD
+24 W
+4104 4499 PD
+24 W
+4095 4479 PD
+24 W
+4081 4460 PD
+24 W
+4071 4442 PD
+24 W
+4063 4424 PD
+24 W
+4053 4406 PD
+24 W
+4046 4388 PD
+24 W
+4036 4369 PD
+24 W
+4028 4352 PD
+24 W
+4019 4334 PD
+24 W
+4016 4316 PD
+24 W
+4043 4317 PD
+24 W
+4063 4298 PD
+24 W
+4061 4280 PD
+24 W
+4049 4260 PD
+24 W
+4041 4240 PD
+24 W
+4035 4222 PD
+24 W
+4034 4203 PD
+24 W
+4039 4184 PD
+24 W
+4041 4166 PD
+24 W
+4033 4147 PD
+24 W
+4025 4129 PD
+24 W
+4022 4110 PD
+24 W
+4021 4091 PD
+24 W
+4019 4072 PD
+24 W
+4016 4053 PD
+24 W
+4010 4035 PD
+24 W
+4008 4017 PD
+24 W
+4003 3998 PD
+24 W
+3994 3980 PD
+24 W
+3981 3962 PD
+24 W
+3979 3945 PD
+24 W
+3971 3926 PD
+24 W
+3951 3909 PD
+24 W
+3952 3890 PD
+24 W
+3955 3869 PD
+24 W
+3951 3850 PD
+24 W
+3951 3832 PD
+24 W
+3953 3814 PD
+24 W
+3957 3796 PD
+24 W
+3959 3779 PD
+24 W
+3963 3760 PD
+24 W
+3961 3741 PD
+24 W
+3958 3723 PD
+24 W
+3955 3705 PD
+24 W
+3952 3687 PD
+24 W
+3949 3669 PD
+24 W
+3945 3650 PD
+24 W
+3941 3632 PD
+24 W
+3941 3614 PD
+24 W
+3942 3595 PD
+24 W
+3944 3577 PD
+24 W
+3938 3559 PD
+24 W
+3933 3541 PD
+24 W
+3934 3529 PD
+24 W
+3951 3523 PD
+24 W
+3978 3510 PD
+24 W
+4006 3499 PD
+24 W
+4034 3490 PD
+24 W
+4062 3478 PD
+24 W
+4088 3469 PD
+24 W
+4115 3461 PD
+24 W
+4142 3449 PD
+24 W
+4170 3433 PD
+24 W
+4197 3417 PD
+24 W
+4225 3400 PD
+24 W
+4250 3382 PD
+24 W
+4262 3364 PD
+24 W
+4275 3346 PD
+24 W
+4291 3327 PD
+24 W
+4306 3308 PD
+24 W
+4329 3290 PD
+24 W
+4353 3272 PD
+24 W
+4380 3262 PD
+24 W
+4407 3249 PD
+24 W
+4408 3278 PD
+24 W
+4427 3296 PD
+24 W
+4445 3314 PD
+24 W
+4461 3332 PD
+24 W
+4488 3348 PD
+24 W
+4515 3348 PD
+24 W
+4542 3363 PD
+24 W
+4569 3381 PD
+24 W
+4588 3400 PD
+24 W
+4610 3418 PD
+24 W
+4628 3435 PD
+24 W
+4649 3453 PD
+24 W
+4657 3471 PD
+24 W
+4664 3489 PD
+24 W
+4685 3508 PD
+24 W
+4703 3526 PD
+24 W
+4714 3546 PD
+24 W
+4728 3564 PD
+24 W
+4753 3583 PD
+24 W
+4775 3601 PD
+24 W
+4795 3620 PD
+24 W
+4812 3638 PD
+24 W
+4825 3658 PD
+24 W
+4836 3676 PD
+24 W
+4846 3695 PD
+24 W
+4854 3713 PD
+24 W
+4867 3731 PD
+24 W
+4880 3749 PD
+24 W
+4894 3767 PD
+24 W
+4908 3786 PD
+24 W
+4920 3805 PD
+24 W
+4932 3824 PD
+24 W
+4947 3843 PD
+24 W
+4961 3861 PD
+24 W
+4972 3881 PD
+24 W
+4981 3899 PD
+24 W
+4994 3918 PD
+24 W
+5014 3936 PD
+24 W
+5023 3953 PD
+24 W
+5029 3972 PD
+24 W
+5038 3993 PD
+24 W
+5044 4011 PD
+24 W
+5049 4029 PD
+24 W
+5055 4048 PD
+24 W
+5063 4066 PD
+24 W
+5074 4085 PD
+24 W
+5084 4103 PD
+24 W
+5095 4122 PD
+24 W
+5114 4140 PD
+24 W
+5139 4157 PD
+24 W
+5165 4165 PD
+24 W
+5194 4169 PD
+24 W
+5219 4187 PD
+24 W
+5241 4205 PD
+24 W
+5251 4224 PD
+24 W
+5248 4243 PD
+24 W
+5246 4261 PD
+24 W
+5244 4279 PD
+24 W
+5248 4297 PD
+24 W
+5256 4315 PD
+24 W
+5280 4333 PD
+24 W
+5291 4352 PD
+24 W
+5294 4369 PD
+24 W
+5312 4388 PD
+24 W
+5328 4406 PD
+24 W
+5345 4425 PD
+24 W
+5361 4444 PD
+24 W
+5372 4462 PD
+24 W
+5385 4482 PD
+24 W
+5395 4501 PD
+24 W
+5401 4519 PD
+24 W
+5403 4539 PD
+24 W
+5402 4558 PD
+24 W
+5400 4576 PD
+24 W
+5407 4594 PD
+24 W
+4022 4609 PD
+24 W
+4021 4609 PD
+24 W
+4023 4591 PD
+24 W
+4024 4572 PD
+24 W
+4021 4553 PD
+24 W
+4020 4535 PD
+24 W
+4020 4516 PD
+24 W
+4010 4496 PD
+24 W
+4001 4477 PD
+24 W
+3992 4458 PD
+24 W
+3986 4440 PD
+24 W
+3980 4422 PD
+24 W
+3973 4403 PD
+24 W
+3967 4384 PD
+24 W
+3963 4366 PD
+24 W
+3964 4348 PD
+24 W
+3935 4340 PD
+24 W
+3908 4340 PD
+24 W
+3920 4322 PD
+24 W
+3939 4302 PD
+24 W
+3945 4282 PD
+24 W
+3946 4262 PD
+24 W
+3945 4243 PD
+24 W
+3944 4223 PD
+24 W
+3943 4204 PD
+24 W
+3942 4183 PD
+24 W
+3941 4163 PD
+24 W
+3938 4144 PD
+24 W
+3933 4126 PD
+24 W
+3929 4107 PD
+24 W
+3927 4089 PD
+24 W
+3924 4069 PD
+24 W
+3917 4051 PD
+24 W
+3909 4032 PD
+24 W
+3902 4015 PD
+24 W
+3874 3997 PD
+24 W
+3866 3978 PD
+24 W
+3879 3960 PD
+24 W
+3880 3942 PD
+24 W
+3871 3923 PD
+24 W
+3858 3906 PD
+24 W
+3866 3888 PD
+24 W
+3876 3868 PD
+24 W
+3879 3850 PD
+24 W
+3882 3832 PD
+24 W
+3878 3812 PD
+24 W
+3869 3793 PD
+24 W
+3873 3774 PD
+24 W
+3877 3756 PD
+24 W
+3872 3738 PD
+24 W
+3864 3721 PD
+24 W
+3858 3701 PD
+24 W
+3851 3682 PD
+24 W
+3845 3663 PD
+24 W
+3841 3645 PD
+24 W
+3837 3625 PD
+24 W
+3833 3605 PD
+24 W
+3829 3588 PD
+24 W
+3821 3570 PD
+24 W
+3813 3551 PD
+24 W
+3802 3532 PD
+24 W
+3781 3513 PD
+24 W
+3760 3495 PD
+24 W
+3750 3478 PD
+24 W
+4280 3086 PD
+24 W
+4280 3084 PD
+24 W
+4308 3101 PD
+24 W
+4337 3118 PD
+24 W
+4363 3137 PD
+24 W
+4384 3156 PD
+24 W
+4405 3175 PD
+24 W
+4427 3193 PD
+24 W
+4452 3212 PD
+24 W
+4481 3227 PD
+24 W
+4509 3243 PD
+24 W
+4533 3261 PD
+24 W
+4556 3280 PD
+24 W
+4578 3300 PD
+24 W
+4603 3320 PD
+24 W
+4628 3338 PD
+24 W
+4652 3357 PD
+24 W
+4673 3376 PD
+24 W
+4692 3393 PD
+24 W
+4711 3412 PD
+24 W
+4727 3431 PD
+24 W
+4741 3449 PD
+24 W
+4756 3467 PD
+24 W
+4770 3485 PD
+24 W
+4784 3504 PD
+24 W
+4797 3522 PD
+24 W
+4809 3542 PD
+24 W
+4824 3562 PD
+24 W
+4836 3579 PD
+24 W
+4854 3598 PD
+24 W
+4860 3616 PD
+24 W
+4869 3635 PD
+24 W
+4890 3654 PD
+24 W
+4908 3672 PD
+24 W
+4922 3690 PD
+24 W
+4922 3709 PD
+24 W
+4928 3726 PD
+24 W
+4955 3740 PD
+24 W
+4969 3757 PD
+24 W
+4973 3776 PD
+24 W
+4976 3795 PD
+24 W
+4989 3814 PD
+24 W
+5007 3833 PD
+24 W
+5034 3851 PD
+24 W
+5058 3869 PD
+24 W
+5077 3888 PD
+24 W
+5093 3905 PD
+24 W
+5099 3923 PD
+24 W
+5104 3942 PD
+24 W
+5113 3961 PD
+24 W
+5127 3979 PD
+24 W
+5140 3997 PD
+24 W
+5159 4015 PD
+24 W
+5188 4031 PD
+24 W
+5213 4050 PD
+24 W
+5241 4052 PD
+24 W
+5268 4057 PD
+24 W
+5293 4076 PD
+24 W
+5303 4095 PD
+24 W
+5312 4113 PD
+24 W
+5315 4132 PD
+24 W
+5313 4150 PD
+24 W
+5317 4168 PD
+24 W
+5345 4173 PD
+24 W
+5356 4192 PD
+24 W
+5365 4210 PD
+24 W
+5373 4229 PD
+24 W
+5380 4247 PD
+24 W
+5390 4267 PD
+24 W
+5402 4286 PD
+24 W
+5420 4305 PD
+24 W
+5439 4324 PD
+24 W
+5458 4343 PD
+24 W
+5480 4362 PD
+24 W
+5505 4380 PD
+24 W
+5523 4398 PD
+24 W
+5528 4417 PD
+24 W
+5530 4436 PD
+24 W
+5539 4455 PD
+24 W
+5550 4473 PD
+24 W
+5555 4491 PD
+24 W
+5551 4512 PD
+24 W
+5553 4530 PD
+24 W
+5563 4548 PD
+24 W
+5569 4567 PD
+24 W
+5579 4586 PD
+24 W
+5590 4605 PD
+24 W
+3745 3465 PD
+24 W
+3756 3446 PD
+24 W
+3768 3428 PD
+24 W
+3789 3410 PD
+24 W
+3817 3393 PD
+24 W
+3845 3380 PD
+24 W
+3872 3366 PD
+24 W
+3899 3353 PD
+24 W
+3927 3340 PD
+24 W
+3957 3325 PD
+24 W
+3985 3309 PD
+24 W
+4014 3293 PD
+24 W
+4043 3277 PD
+24 W
+4070 3260 PD
+24 W
+4098 3243 PD
+24 W
+4122 3225 PD
+24 W
+4148 3207 PD
+24 W
+4167 3189 PD
+24 W
+4176 3171 PD
+24 W
+4185 3153 PD
+24 W
+4197 3135 PD
+24 W
+4211 3117 PD
+24 W
+4227 3100 PD
+24 W
+4253 3090 PD
+24 W
+3949 4611 PD
+24 W
+3948 4610 PD
+24 W
+3952 4591 PD
+24 W
+3943 4572 PD
+24 W
+3938 4553 PD
+24 W
+3935 4534 PD
+24 W
+3933 4516 PD
+24 W
+3929 4497 PD
+24 W
+3927 4479 PD
+24 W
+3912 4460 PD
+24 W
+3902 4441 PD
+24 W
+3900 4423 PD
+24 W
+3908 4404 PD
+24 W
+3896 4385 PD
+24 W
+3876 4367 PD
+24 W
+3849 4352 PD
+24 W
+3822 4341 PD
+24 W
+3795 4328 PD
+24 W
+3824 4315 PD
+24 W
+3851 4302 PD
+24 W
+3874 4282 PD
+24 W
+3876 4263 PD
+24 W
+3875 4246 PD
+24 W
+3872 4227 PD
+24 W
+3868 4209 PD
+24 W
+3864 4189 PD
+24 W
+3858 4170 PD
+24 W
+3854 4151 PD
+24 W
+3852 4133 PD
+24 W
+3848 4114 PD
+24 W
+3843 4096 PD
+24 W
+3841 4076 PD
+24 W
+3833 4058 PD
+24 W
+3815 4040 PD
+24 W
+3798 4021 PD
+24 W
+3775 4003 PD
+24 W
+3756 3985 PD
+24 W
+3781 3967 PD
+24 W
+3792 3949 PD
+24 W
+3785 3931 PD
+24 W
+3780 3913 PD
+24 W
+3775 3895 PD
+24 W
+3784 3877 PD
+24 W
+3795 3857 PD
+24 W
+3800 3839 PD
+24 W
+3804 3821 PD
+24 W
+3802 3803 PD
+24 W
+3799 3784 PD
+24 W
+3798 3766 PD
+24 W
+3791 3747 PD
+24 W
+3788 3729 PD
+24 W
+3784 3710 PD
+24 W
+3782 3692 PD
+24 W
+3776 3673 PD
+24 W
+3765 3653 PD
+24 W
+3758 3635 PD
+24 W
+3753 3616 PD
+24 W
+3745 3597 PD
+24 W
+3735 3579 PD
+24 W
+3719 3559 PD
+24 W
+3707 3542 PD
+24 W
+3693 3523 PD
+24 W
+3677 3505 PD
+24 W
+3662 3486 PD
+24 W
+3647 3468 PD
+24 W
+3636 3448 PD
+24 W
+3628 3430 PD
+24 W
+3619 3410 PD
+24 W
+3608 3392 PD
+24 W
+3598 3374 PD
+24 W
+3597 3352 PD
+24 W
+3596 3352 PD
+24 W
+3587 3333 PD
+24 W
+3599 3315 PD
+24 W
+3614 3296 PD
+24 W
+3640 3279 PD
+24 W
+3668 3259 PD
+24 W
+3693 3242 PD
+24 W
+3720 3228 PD
+24 W
+3748 3213 PD
+24 W
+3775 3199 PD
+24 W
+3804 3184 PD
+24 W
+3833 3168 PD
+24 W
+3852 3149 PD
+24 W
+3868 3132 PD
+24 W
+3884 3112 PD
+24 W
+3900 3094 PD
+24 W
+3927 3076 PD
+24 W
+3956 3064 PD
+24 W
+3984 3054 PD
+24 W
+4014 3047 PD
+24 W
+4042 3036 PD
+24 W
+4070 3025 PD
+24 W
+4093 3006 PD
+24 W
+4110 2987 PD
+24 W
+4125 2969 PD
+24 W
+4136 2951 PD
+24 W
+4163 2944 PD
+24 W
+4170 2926 PD
+24 W
+4175 2922 PD
+24 W
+4198 2927 PD
+24 W
+4227 2940 PD
+24 W
+4254 2957 PD
+24 W
+4277 2974 PD
+24 W
+4303 2993 PD
+24 W
+4330 3010 PD
+24 W
+4358 3029 PD
+24 W
+4380 3046 PD
+24 W
+4400 3064 PD
+24 W
+4423 3082 PD
+24 W
+4452 3097 PD
+24 W
+4479 3114 PD
+24 W
+4480 3132 PD
+24 W
+4506 3139 PD
+24 W
+4533 3150 PD
+24 W
+4542 3169 PD
+24 W
+4556 3186 PD
+24 W
+4555 3205 PD
+24 W
+4574 3224 PD
+24 W
+4596 3242 PD
+24 W
+4616 3260 PD
+24 W
+4638 3279 PD
+24 W
+4659 3298 PD
+24 W
+4685 3317 PD
+24 W
+4713 3329 PD
+24 W
+4740 3345 PD
+24 W
+4757 3364 PD
+24 W
+4770 3383 PD
+24 W
+4779 3403 PD
+24 W
+4792 3421 PD
+24 W
+4803 3440 PD
+24 W
+4814 3458 PD
+24 W
+4828 3476 PD
+24 W
+4845 3494 PD
+24 W
+4865 3512 PD
+24 W
+4882 3530 PD
+24 W
+4904 3548 PD
+24 W
+4930 3559 PD
+24 W
+4948 3578 PD
+24 W
+4955 3597 PD
+24 W
+4973 3615 PD
+24 W
+4990 3634 PD
+24 W
+5006 3652 PD
+24 W
+5025 3670 PD
+24 W
+5043 3689 PD
+24 W
+5061 3706 PD
+24 W
+5069 3724 PD
+24 W
+5059 3742 PD
+24 W
+5076 3761 PD
+24 W
+5098 3779 PD
+24 W
+5127 3798 PD
+24 W
+5156 3812 PD
+24 W
+5185 3823 PD
+24 W
+5213 3836 PD
+24 W
+5241 3850 PD
+24 W
+5269 3865 PD
+24 W
+5291 3883 PD
+24 W
+5309 3901 PD
+24 W
+5337 3911 PD
+24 W
+5358 3931 PD
+24 W
+5368 3951 PD
+24 W
+5378 3971 PD
+24 W
+5392 3989 PD
+24 W
+5403 4007 PD
+24 W
+5416 4027 PD
+24 W
+5431 4046 PD
+24 W
+5443 4063 PD
+24 W
+5454 4081 PD
+24 W
+5466 4101 PD
+24 W
+5478 4120 PD
+24 W
+5492 4138 PD
+24 W
+5504 4156 PD
+24 W
+5516 4176 PD
+24 W
+5528 4196 PD
+24 W
+5537 4214 PD
+24 W
+5547 4235 PD
+24 W
+5555 4253 PD
+24 W
+5564 4272 PD
+24 W
+5573 4291 PD
+24 W
+5587 4309 PD
+24 W
+5604 4328 PD
+24 W
+5620 4346 PD
+24 W
+5633 4363 PD
+24 W
+5649 4383 PD
+24 W
+5664 4401 PD
+24 W
+5671 4419 PD
+24 W
+5673 4440 PD
+24 W
+5675 4457 PD
+24 W
+5672 4477 PD
+24 W
+5672 4495 PD
+24 W
+5673 4514 PD
+24 W
+5688 4533 PD
+24 W
+5708 4552 PD
+24 W
+5727 4571 PD
+24 W
+5735 4590 PD
+24 W
+3870 4600 PD
+24 W
+3860 4581 PD
+24 W
+3858 4562 PD
+24 W
+3856 4544 PD
+24 W
+3852 4525 PD
+24 W
+3851 4507 PD
+24 W
+3848 4488 PD
+24 W
+3833 4469 PD
+24 W
+3823 4450 PD
+24 W
+3826 4432 PD
+24 W
+3826 4414 PD
+24 W
+3811 4395 PD
+24 W
+3782 4381 PD
+24 W
+3754 4370 PD
+24 W
+3727 4357 PD
+24 W
+3700 4347 PD
+24 W
+3676 4329 PD
+24 W
+3703 4324 PD
+24 W
+3730 4310 PD
+24 W
+3758 4296 PD
+24 W
+3787 4281 PD
+24 W
+3807 4263 PD
+24 W
+3809 4244 PD
+24 W
+3801 4226 PD
+24 W
+3790 4206 PD
+24 W
+3787 4188 PD
+24 W
+3781 4169 PD
+24 W
+3774 4148 PD
+24 W
+3771 4130 PD
+24 W
+3769 4110 PD
+24 W
+3761 4092 PD
+24 W
+3751 4073 PD
+24 W
+3744 4055 PD
+24 W
+3730 4037 PD
+24 W
+3702 4019 PD
+24 W
+3675 4002 PD
+24 W
+3653 3984 PD
+24 W
+3661 3966 PD
+24 W
+3688 3961 PD
+24 W
+3716 3954 PD
+24 W
+3727 3936 PD
+24 W
+3708 3917 PD
+24 W
+3694 3899 PD
+24 W
+3691 3881 PD
+24 W
+3697 3862 PD
+24 W
+3704 3844 PD
+24 W
+3712 3826 PD
+24 W
+3720 3807 PD
+24 W
+3723 3788 PD
+24 W
+3722 3770 PD
+24 W
+3723 3751 PD
+24 W
+3720 3733 PD
+24 W
+3715 3715 PD
+24 W
+3708 3697 PD
+24 W
+3700 3678 PD
+24 W
+3690 3661 PD
+24 W
+3676 3642 PD
+24 W
+3661 3623 PD
+24 W
+3650 3605 PD
+24 W
+3636 3588 PD
+24 W
+3625 3569 PD
+24 W
+3616 3551 PD
+24 W
+3608 3533 PD
+24 W
+3596 3515 PD
+24 W
+3581 3496 PD
+24 W
+3564 3477 PD
+24 W
+3548 3458 PD
+24 W
+3535 3439 PD
+24 W
+3521 3422 PD
+24 W
+3508 3403 PD
+24 W
+3498 3385 PD
+24 W
+3489 3367 PD
+24 W
+3478 3348 PD
+24 W
+3469 3329 PD
+24 W
+3465 3312 PD
+24 W
+3450 3293 PD
+24 W
+3425 3275 PD
+24 W
+3398 3261 PD
+24 W
+3377 3242 PD
+24 W
+3370 3220 PD
+24 W
+3366 3222 PD
+24 W
+3349 3204 PD
+24 W
+3355 3186 PD
+24 W
+3374 3168 PD
+24 W
+3399 3149 PD
+24 W
+3427 3130 PD
+24 W
+3450 3112 PD
+24 W
+3475 3093 PD
+24 W
+3498 3073 PD
+24 W
+3522 3054 PD
+24 W
+3543 3035 PD
+24 W
+3566 3017 PD
+24 W
+3590 2997 PD
+24 W
+3619 2978 PD
+24 W
+3646 2964 PD
+24 W
+3673 2953 PD
+24 W
+3703 2943 PD
+24 W
+3733 2932 PD
+24 W
+3761 2924 PD
+24 W
+3790 2914 PD
+24 W
+3819 2906 PD
+24 W
+3846 2900 PD
+24 W
+3873 2892 PD
+24 W
+3902 2880 PD
+24 W
+3931 2867 PD
+24 W
+3959 2847 PD
+24 W
+3973 2828 PD
+24 W
+3986 2810 PD
+24 W
+3990 2791 PD
+24 W
+3995 2773 PD
+24 W
+4005 2755 PD
+24 W
+4022 2737 PD
+24 W
+4042 2722 PD
+24 W
+4050 2727 PD
+24 W
+4066 2747 PD
+24 W
+4090 2764 PD
+24 W
+4117 2778 PD
+24 W
+4146 2792 PD
+24 W
+4172 2808 PD
+24 W
+4197 2826 PD
+24 W
+4220 2845 PD
+24 W
+4236 2863 PD
+24 W
+4255 2881 PD
+24 W
+4283 2896 PD
+24 W
+4310 2908 PD
+24 W
+4339 2925 PD
+24 W
+4362 2944 PD
+24 W
+4379 2962 PD
+24 W
+4394 2980 PD
+24 W
+4413 2999 PD
+24 W
+4435 3017 PD
+24 W
+4463 3025 PD
+24 W
+4490 3034 PD
+24 W
+4514 3053 PD
+24 W
+4537 3071 PD
+24 W
+4564 3088 PD
+24 W
+4586 3106 PD
+24 W
+4607 3125 PD
+24 W
+4624 3142 PD
+24 W
+4631 3161 PD
+24 W
+4635 3180 PD
+24 W
+4648 3198 PD
+24 W
+4675 3215 PD
+24 W
+4702 3231 PD
+24 W
+4731 3251 PD
+24 W
+4750 3270 PD
+24 W
+4767 3288 PD
+24 W
+4785 3308 PD
+24 W
+4804 3327 PD
+24 W
+4821 3346 PD
+24 W
+4838 3365 PD
+24 W
+4859 3383 PD
+24 W
+4882 3401 PD
+24 W
+4907 3420 PD
+24 W
+4936 3433 PD
+24 W
+4962 3451 PD
+24 W
+4968 3469 PD
+24 W
+4974 3487 PD
+24 W
+4990 3506 PD
+24 W
+5005 3524 PD
+24 W
+5020 3543 PD
+24 W
+5036 3564 PD
+24 W
+5058 3583 PD
+24 W
+5085 3601 PD
+24 W
+5113 3617 PD
+24 W
+5136 3635 PD
+24 W
+5153 3653 PD
+24 W
+5172 3672 PD
+24 W
+5201 3672 PD
+24 W
+5223 3690 PD
+24 W
+5237 3708 PD
+24 W
+5250 3727 PD
+24 W
+5270 3746 PD
+24 W
+5296 3765 PD
+24 W
+5324 3779 PD
+24 W
+5352 3795 PD
+24 W
+5375 3813 PD
+24 W
+5394 3831 PD
+24 W
+5410 3849 PD
+24 W
+5431 3869 PD
+24 W
+5454 3888 PD
+24 W
+5473 3907 PD
+24 W
+5485 3926 PD
+24 W
+5497 3944 PD
+24 W
+5511 3961 PD
+24 W
+5526 3979 PD
+24 W
+5541 3998 PD
+24 W
+5558 4017 PD
+24 W
+5570 4034 PD
+24 W
+5582 4053 PD
+24 W
+5593 4071 PD
+24 W
+5607 4091 PD
+24 W
+5618 4110 PD
+24 W
+5624 4128 PD
+24 W
+5633 4147 PD
+24 W
+5642 4168 PD
+24 W
+5650 4186 PD
+24 W
+5659 4204 PD
+24 W
+5669 4223 PD
+24 W
+5677 4241 PD
+24 W
+5687 4261 PD
+24 W
+5699 4279 PD
+24 W
+5716 4298 PD
+24 W
+5728 4315 PD
+24 W
+5742 4333 PD
+24 W
+5760 4351 PD
+24 W
+5781 4371 PD
+24 W
+5797 4389 PD
+24 W
+5797 4408 PD
+24 W
+5799 4426 PD
+24 W
+5795 4444 PD
+24 W
+5795 4463 PD
+24 W
+5809 4481 PD
+24 W
+5826 4501 PD
+24 W
+5848 4520 PD
+24 W
+5860 4538 PD
+24 W
+5868 4558 PD
+24 W
+5873 4577 PD
+24 W
+5880 4595 PD
+24 W
+3788 4603 PD
+24 W
+3787 4603 PD
+24 W
+3772 4584 PD
+24 W
+3772 4566 PD
+24 W
+3779 4547 PD
+24 W
+3782 4527 PD
+24 W
+3780 4509 PD
+24 W
+3776 4491 PD
+24 W
+3758 4473 PD
+24 W
+3754 4454 PD
+24 W
+3747 4435 PD
+24 W
+3730 4416 PD
+24 W
+3706 4397 PD
+24 W
+3678 4381 PD
+24 W
+3651 4367 PD
+24 W
+3623 4361 PD
+24 W
+3597 4351 PD
+24 W
+3592 4333 PD
+24 W
+3587 4315 PD
+24 W
+3614 4307 PD
+24 W
+3641 4298 PD
+24 W
+3668 4285 PD
+24 W
+3695 4272 PD
+24 W
+3723 4257 PD
+24 W
+3733 4239 PD
+24 W
+3734 4221 PD
+24 W
+3730 4201 PD
+24 W
+3723 4181 PD
+24 W
+3718 4162 PD
+24 W
+3712 4143 PD
+24 W
+3706 4124 PD
+24 W
+3699 4105 PD
+24 W
+3691 4085 PD
+24 W
+3679 4067 PD
+24 W
+3659 4048 PD
+24 W
+3632 4034 PD
+24 W
+3605 4024 PD
+24 W
+3577 4008 PD
+24 W
+3559 3990 PD
+24 W
+3556 3970 PD
+24 W
+3574 3952 PD
+24 W
+3585 3934 PD
+24 W
+3575 3916 PD
+24 W
+3582 3898 PD
+24 W
+3604 3879 PD
+24 W
+3617 3860 PD
+24 W
+3600 3842 PD
+24 W
+3597 3823 PD
+24 W
+3617 3805 PD
+24 W
+3636 3787 PD
+24 W
+3647 3769 PD
+24 W
+3647 3751 PD
+24 W
+3647 3733 PD
+24 W
+3655 3715 PD
+24 W
+3666 3695 PD
+24 W
+3662 3677 PD
+24 W
+3635 3659 PD
+24 W
+3619 3640 PD
+24 W
+3606 3622 PD
+24 W
+3593 3604 PD
+24 W
+3579 3587 PD
+24 W
+3567 3567 PD
+24 W
+3553 3549 PD
+24 W
+3543 3531 PD
+24 W
+3530 3511 PD
+24 W
+3517 3493 PD
+24 W
+3502 3475 PD
+24 W
+3485 3456 PD
+24 W
+3467 3437 PD
+24 W
+3449 3418 PD
+24 W
+3432 3400 PD
+24 W
+3413 3381 PD
+24 W
+3395 3362 PD
+24 W
+3378 3343 PD
+24 W
+3363 3323 PD
+24 W
+3348 3306 PD
+24 W
+3331 3286 PD
+24 W
+3313 3268 PD
+24 W
+3293 3250 PD
+24 W
+3267 3232 PD
+24 W
+3245 3214 PD
+24 W
+3220 3195 PD
+24 W
+3198 3178 PD
+24 W
+3177 3159 PD
+24 W
+3156 3140 PD
+24 W
+3130 3122 PD
+24 W
+3119 3104 PD
+24 W
+3111 3098 PD
+24 W
+3113 3084 PD
+24 W
+3116 3066 PD
+24 W
+3124 3048 PD
+24 W
+3130 3030 PD
+24 W
+3133 3011 PD
+24 W
+3145 2991 PD
+24 W
+3165 2973 PD
+24 W
+3192 2956 PD
+24 W
+3206 2938 PD
+24 W
+3216 2920 PD
+24 W
+3233 2902 PD
+24 W
+3260 2891 PD
+24 W
+3290 2878 PD
+24 W
+3315 2860 PD
+24 W
+3343 2841 PD
+24 W
+3370 2826 PD
+24 W
+3397 2811 PD
+24 W
+3425 2794 PD
+24 W
+3454 2777 PD
+24 W
+3481 2764 PD
+24 W
+3510 2757 PD
+24 W
+3538 2750 PD
+24 W
+3566 2742 PD
+24 W
+3596 2734 PD
+24 W
+3626 2725 PD
+24 W
+3653 2717 PD
+24 W
+3680 2708 PD
+24 W
+3710 2702 PD
+24 W
+3737 2695 PD
+24 W
+3765 2687 PD
+24 W
+3795 2673 PD
+24 W
+3812 2656 PD
+24 W
+3827 2637 PD
+24 W
+3840 2617 PD
+24 W
+3847 2598 PD
+24 W
+3851 2580 PD
+24 W
+3858 2560 PD
+24 W
+3859 2543 PD
+24 W
+3864 2524 PD
+24 W
+3870 2506 PD
+24 W
+3873 2500 PD
+24 W
+3900 2506 PD
+24 W
+3927 2517 PD
+24 W
+3957 2525 PD
+24 W
+3984 2543 PD
+24 W
+4000 2561 PD
+24 W
+4010 2580 PD
+24 W
+4031 2598 PD
+24 W
+4053 2616 PD
+24 W
+4079 2635 PD
+24 W
+4101 2654 PD
+24 W
+4117 2673 PD
+24 W
+4145 2687 PD
+24 W
+4160 2706 PD
+24 W
+4181 2724 PD
+24 W
+4205 2743 PD
+24 W
+4228 2760 PD
+24 W
+4257 2776 PD
+24 W
+4283 2790 PD
+24 W
+4311 2808 PD
+24 W
+4339 2826 PD
+24 W
+4367 2845 PD
+24 W
+4385 2864 PD
+24 W
+4402 2882 PD
+24 W
+4422 2901 PD
+24 W
+4448 2921 PD
+24 W
+4474 2940 PD
+24 W
+4501 2958 PD
+24 W
+4528 2975 PD
+24 W
+4556 2994 PD
+24 W
+4580 3013 PD
+24 W
+4605 3031 PD
+24 W
+4632 3050 PD
+24 W
+4660 3068 PD
+24 W
+4681 3086 PD
+24 W
+4680 3104 PD
+24 W
+4688 3124 PD
+24 W
+4702 3144 PD
+24 W
+4721 3164 PD
+24 W
+4741 3181 PD
+24 W
+4770 3197 PD
+24 W
+4800 3214 PD
+24 W
+4826 3233 PD
+24 W
+4853 3251 PD
+24 W
+4880 3270 PD
+24 W
+4901 3289 PD
+24 W
+4921 3308 PD
+24 W
+4950 3326 PD
+24 W
+4979 3334 PD
+24 W
+5006 3347 PD
+24 W
+5035 3356 PD
+24 W
+5062 3375 PD
+24 W
+5075 3393 PD
+24 W
+5088 3411 PD
+24 W
+5110 3430 PD
+24 W
+5135 3448 PD
+24 W
+5158 3467 PD
+24 W
+5177 3486 PD
+24 W
+5195 3506 PD
+24 W
+5210 3524 PD
+24 W
+5230 3544 PD
+24 W
+5246 3562 PD
+24 W
+5263 3580 PD
+24 W
+5281 3598 PD
+24 W
+5300 3617 PD
+24 W
+5315 3635 PD
+24 W
+5332 3653 PD
+24 W
+5351 3673 PD
+24 W
+5369 3692 PD
+24 W
+5389 3712 PD
+24 W
+5409 3732 PD
+24 W
+5430 3750 PD
+24 W
+5453 3769 PD
+24 W
+5477 3788 PD
+24 W
+5501 3807 PD
+24 W
+5523 3827 PD
+24 W
+5543 3845 PD
+24 W
+5567 3865 PD
+24 W
+5582 3883 PD
+24 W
+5598 3902 PD
+24 W
+5614 3921 PD
+24 W
+5629 3940 PD
+24 W
+5645 3958 PD
+24 W
+5664 3978 PD
+24 W
+5681 3998 PD
+24 W
+5701 4016 PD
+24 W
+5717 4034 PD
+24 W
+5733 4053 PD
+24 W
+5746 4071 PD
+24 W
+5762 4092 PD
+24 W
+5773 4110 PD
+24 W
+5785 4129 PD
+24 W
+5794 4147 PD
+24 W
+5803 4166 PD
+24 W
+5812 4185 PD
+24 W
+5823 4203 PD
+24 W
+5831 4223 PD
+24 W
+5834 4243 PD
+24 W
+5839 4262 PD
+24 W
+5847 4281 PD
+24 W
+5861 4300 PD
+24 W
+5877 4318 PD
+24 W
+5897 4338 PD
+24 W
+5914 4355 PD
+24 W
+5930 4375 PD
+24 W
+5933 4393 PD
+24 W
+5930 4411 PD
+24 W
+5927 4429 PD
+24 W
+5927 4449 PD
+24 W
+5932 4468 PD
+24 W
+5944 4486 PD
+24 W
+5962 4507 PD
+24 W
+5975 4525 PD
+24 W
+5993 4545 PD
+24 W
+6005 4564 PD
+24 W
+6012 4583 PD
+24 W
+6024 4600 PD
+24 W
+3730 4603 PD
+24 W
+3718 4585 PD
+24 W
+3714 4567 PD
+24 W
+3713 4548 PD
+24 W
+3715 4529 PD
+24 W
+3711 4510 PD
+24 W
+3695 4492 PD
+24 W
+3686 4472 PD
+24 W
+3688 4454 PD
+24 W
+3682 4434 PD
+24 W
+3662 4416 PD
+24 W
+3634 4411 PD
+24 W
+3607 4408 PD
+24 W
+3579 4392 PD
+24 W
+3567 4373 PD
+24 W
+3538 4369 PD
+24 W
+3510 4352 PD
+24 W
+3525 4334 PD
+24 W
+3534 4316 PD
+24 W
+3529 4298 PD
+24 W
+3542 4279 PD
+24 W
+3571 4274 PD
+24 W
+3600 4266 PD
+24 W
+3629 4253 PD
+24 W
+3657 4244 PD
+24 W
+3666 4225 PD
+24 W
+3666 4207 PD
+24 W
+3665 4189 PD
+24 W
+3660 4169 PD
+24 W
+3655 4150 PD
+24 W
+3653 4131 PD
+24 W
+3646 4113 PD
+24 W
+3630 4095 PD
+24 W
+3602 4083 PD
+24 W
+3574 4067 PD
+24 W
+3547 4055 PD
+24 W
+3518 4043 PD
+24 W
+3490 4025 PD
+24 W
+3471 4007 PD
+24 W
+3457 3988 PD
+24 W
+3467 3970 PD
+24 W
+3488 3952 PD
+24 W
+3493 3934 PD
+24 W
+3492 3916 PD
+24 W
+3492 3898 PD
+24 W
+3520 3881 PD
+24 W
+3529 3862 PD
+24 W
+3525 3845 PD
+24 W
+3517 3826 PD
+24 W
+3526 3808 PD
+24 W
+3545 3789 PD
+24 W
+3557 3771 PD
+24 W
+3566 3753 PD
+24 W
+3571 3735 PD
+24 W
+3578 3716 PD
+24 W
+3579 3696 PD
+24 W
+3571 3678 PD
+24 W
+3562 3659 PD
+24 W
+3547 3641 PD
+24 W
+3522 3622 PD
+24 W
+3510 3604 PD
+24 W
+3508 3586 PD
+24 W
+3510 3567 PD
+24 W
+3499 3547 PD
+24 W
+3482 3529 PD
+24 W
+3461 3510 PD
+24 W
+3436 3491 PD
+24 W
+3420 3472 PD
+24 W
+3405 3455 PD
+24 W
+3386 3436 PD
+24 W
+3366 3416 PD
+24 W
+3348 3398 PD
+24 W
+3336 3380 PD
+24 W
+3318 3362 PD
+24 W
+3290 3343 PD
+24 W
+3268 3325 PD
+24 W
+3247 3307 PD
+24 W
+3222 3288 PD
+24 W
+3198 3270 PD
+24 W
+3172 3253 PD
+24 W
+3144 3237 PD
+24 W
+3116 3219 PD
+24 W
+3097 3199 PD
+24 W
+3078 3181 PD
+24 W
+3056 3163 PD
+24 W
+3030 3145 PD
+24 W
+3002 3129 PD
+24 W
+2993 3110 PD
+24 W
+2986 3090 PD
+24 W
+2970 3072 PD
+24 W
+2945 3053 PD
+24 W
+2929 3035 PD
+24 W
+2924 3017 PD
+24 W
+2918 2999 PD
+24 W
+2911 2980 PD
+24 W
+2910 2966 PD
+24 W
+2909 2962 PD
+24 W
+2908 2944 PD
+24 W
+2907 2926 PD
+24 W
+2890 2907 PD
+24 W
+2883 2889 PD
+24 W
+2879 2872 PD
+24 W
+2878 2854 PD
+24 W
+2885 2836 PD
+24 W
+2899 2817 PD
+24 W
+2916 2798 PD
+24 W
+2939 2781 PD
+24 W
+2961 2763 PD
+24 W
+2976 2745 PD
+24 W
+2987 2727 PD
+24 W
+3010 2710 PD
+24 W
+3040 2698 PD
+24 W
+3068 2686 PD
+24 W
+3096 2672 PD
+24 W
+3126 2655 PD
+24 W
+3151 2636 PD
+24 W
+3181 2616 PD
+24 W
+3207 2598 PD
+24 W
+3237 2579 PD
+24 W
+3266 2563 PD
+24 W
+3294 2549 PD
+24 W
+3321 2535 PD
+24 W
+3349 2521 PD
+24 W
+3377 2504 PD
+24 W
+3405 2489 PD
+24 W
+3432 2480 PD
+24 W
+3460 2473 PD
+24 W
+3490 2470 PD
+24 W
+3520 2464 PD
+24 W
+3547 2459 PD
+24 W
+3575 2456 PD
+24 W
+3604 2449 PD
+24 W
+3627 2431 PD
+24 W
+3642 2413 PD
+24 W
+3650 2395 PD
+24 W
+3659 2377 PD
+24 W
+3665 2360 PD
+24 W
+3669 2341 PD
+24 W
+3676 2324 PD
+24 W
+3704 2315 PD
+24 W
+3732 2320 PD
+24 W
+3745 2325 PD
+24 W
+3744 2338 PD
+24 W
+3767 2356 PD
+24 W
+3791 2374 PD
+24 W
+3819 2391 PD
+24 W
+3849 2407 PD
+24 W
+3878 2422 PD
+24 W
+3908 2436 PD
+24 W
+3937 2449 PD
+24 W
+3967 2464 PD
+24 W
+3996 2480 PD
+24 W
+4025 2494 PD
+24 W
+4053 2505 PD
+24 W
+4081 2522 PD
+24 W
+4109 2539 PD
+24 W
+4126 2557 PD
+24 W
+4145 2576 PD
+24 W
+4172 2593 PD
+24 W
+4190 2611 PD
+24 W
+4208 2629 PD
+24 W
+4214 2648 PD
+24 W
+4230 2666 PD
+24 W
+4257 2678 PD
+24 W
+4283 2694 PD
+24 W
+4310 2711 PD
+24 W
+4328 2729 PD
+24 W
+4333 2747 PD
+24 W
+4350 2764 PD
+24 W
+4377 2782 PD
+24 W
+4407 2795 PD
+24 W
+4434 2810 PD
+24 W
+4462 2826 PD
+24 W
+4490 2845 PD
+24 W
+4508 2864 PD
+24 W
+4519 2882 PD
+24 W
+4538 2901 PD
+24 W
+4557 2919 PD
+24 W
+4586 2936 PD
+24 W
+4614 2946 PD
+24 W
+4642 2956 PD
+24 W
+4670 2968 PD
+24 W
+4696 2986 PD
+24 W
+4719 3004 PD
+24 W
+4744 3022 PD
+24 W
+4767 3040 PD
+24 W
+4787 3058 PD
+24 W
+4784 3076 PD
+24 W
+4804 3095 PD
+24 W
+4831 3114 PD
+24 W
+4859 3125 PD
+24 W
+4886 3114 PD
+24 W
+4913 3125 PD
+24 W
+4936 3144 PD
+24 W
+4960 3163 PD
+24 W
+4988 3177 PD
+24 W
+5015 3194 PD
+24 W
+5037 3212 PD
+24 W
+5066 3230 PD
+24 W
+5087 3248 PD
+24 W
+5109 3267 PD
+24 W
+5134 3287 PD
+24 W
+5151 3305 PD
+24 W
+5166 3323 PD
+24 W
+5181 3342 PD
+24 W
+5195 3361 PD
+24 W
+5205 3380 PD
+24 W
+5217 3398 PD
+24 W
+5233 3416 PD
+24 W
+5253 3435 PD
+24 W
+5266 3453 PD
+24 W
+5285 3473 PD
+24 W
+5302 3492 PD
+24 W
+5318 3511 PD
+24 W
+5336 3529 PD
+24 W
+5354 3548 PD
+24 W
+5370 3567 PD
+24 W
+5382 3585 PD
+24 W
+5383 3602 PD
+24 W
+5407 3620 PD
+24 W
+5429 3640 PD
+24 W
+5451 3658 PD
+24 W
+5476 3676 PD
+24 W
+5500 3694 PD
+24 W
+5519 3712 PD
+24 W
+5542 3731 PD
+24 W
+5561 3749 PD
+24 W
+5579 3767 PD
+24 W
+5599 3786 PD
+24 W
+5623 3803 PD
+24 W
+5646 3822 PD
+24 W
+5664 3840 PD
+24 W
+5679 3859 PD
+24 W
+5694 3878 PD
+24 W
+5707 3896 PD
+24 W
+5724 3914 PD
+24 W
+5742 3933 PD
+24 W
+5763 3952 PD
+24 W
+5788 3970 PD
+24 W
+5815 3986 PD
+24 W
+5832 4006 PD
+24 W
+5832 4024 PD
+24 W
+5841 4043 PD
+24 W
+5863 4061 PD
+24 W
+5885 4081 PD
+24 W
+5894 4098 PD
+24 W
+5903 4118 PD
+24 W
+5912 4138 PD
+24 W
+5922 4157 PD
+24 W
+5932 4177 PD
+24 W
+5939 4195 PD
+24 W
+5946 4212 PD
+24 W
+5950 4231 PD
+24 W
+5957 4249 PD
+24 W
+5965 4269 PD
+24 W
+5972 4288 PD
+24 W
+5982 4305 PD
+24 W
+5995 4324 PD
+24 W
+6010 4341 PD
+24 W
+6028 4360 PD
+24 W
+6041 4378 PD
+24 W
+6041 4396 PD
+24 W
+6045 4414 PD
+24 W
+6051 4432 PD
+24 W
+6057 4452 PD
+24 W
+6064 4471 PD
+24 W
+6074 4491 PD
+24 W
+6089 4509 PD
+24 W
+6100 4528 PD
+24 W
+6108 4546 PD
+24 W
+6122 4564 PD
+24 W
+3658 4601 PD
+24 W
+3657 4601 PD
+24 W
+3639 4583 PD
+24 W
+3633 4564 PD
+24 W
+3629 4545 PD
+24 W
+3625 4527 PD
+24 W
+3622 4508 PD
+24 W
+3620 4489 PD
+24 W
+3614 4470 PD
+24 W
+3596 4453 PD
+24 W
+3569 4442 PD
+24 W
+3540 4432 PD
+24 W
+3524 4414 PD
+24 W
+3515 4397 PD
+24 W
+3488 4380 PD
+24 W
+3460 4366 PD
+24 W
+3432 4354 PD
+24 W
+3430 4336 PD
+24 W
+3456 4321 PD
+24 W
+3470 4303 PD
+24 W
+3467 4285 PD
+24 W
+3481 4268 PD
+24 W
+3480 4249 PD
+24 W
+3490 4230 PD
+24 W
+3518 4225 PD
+24 W
+3545 4234 PD
+24 W
+3572 4218 PD
+24 W
+3575 4199 PD
+24 W
+3575 4180 PD
+24 W
+3576 4160 PD
+24 W
+3574 4143 PD
+24 W
+3562 4125 PD
+24 W
+3546 4107 PD
+24 W
+3517 4090 PD
+24 W
+3489 4086 PD
+24 W
+3461 4074 PD
+24 W
+3437 4056 PD
+24 W
+3410 4042 PD
+24 W
+3382 4029 PD
+24 W
+3364 4010 PD
+24 W
+3349 3991 PD
+24 W
+3363 3973 PD
+24 W
+3381 3954 PD
+24 W
+3409 3935 PD
+24 W
+3429 3918 PD
+24 W
+3427 3900 PD
+24 W
+3416 3882 PD
+24 W
+3413 3864 PD
+24 W
+3427 3845 PD
+24 W
+3413 3828 PD
+24 W
+3396 3810 PD
+24 W
+3409 3792 PD
+24 W
+3424 3774 PD
+24 W
+3420 3756 PD
+24 W
+3413 3736 PD
+24 W
+3409 3718 PD
+24 W
+3408 3699 PD
+24 W
+3405 3681 PD
+24 W
+3400 3661 PD
+24 W
+3393 3643 PD
+24 W
+3386 3625 PD
+24 W
+3381 3607 PD
+24 W
+3376 3588 PD
+24 W
+3375 3571 PD
+24 W
+3378 3552 PD
+24 W
+3385 3532 PD
+24 W
+3387 3512 PD
+24 W
+3382 3494 PD
+24 W
+3371 3475 PD
+24 W
+3355 3456 PD
+24 W
+3328 3439 PD
+24 W
+3301 3423 PD
+24 W
+3286 3404 PD
+24 W
+3268 3387 PD
+24 W
+3242 3369 PD
+24 W
+3215 3358 PD
+24 W
+3190 3339 PD
+24 W
+3169 3321 PD
+24 W
+3145 3302 PD
+24 W
+3124 3285 PD
+24 W
+3103 3266 PD
+24 W
+3088 3248 PD
+24 W
+3071 3230 PD
+24 W
+3048 3211 PD
+24 W
+3019 3201 PD
+24 W
+2991 3189 PD
+24 W
+2968 3171 PD
+24 W
+2944 3153 PD
+24 W
+2916 3136 PD
+24 W
+2888 3127 PD
+24 W
+2862 3113 PD
+24 W
+2844 3095 PD
+24 W
+2830 3076 PD
+24 W
+2828 3058 PD
+24 W
+2827 3039 PD
+24 W
+2824 3018 PD
+24 W
+2820 2999 PD
+24 W
+2811 2981 PD
+24 W
+2802 2963 PD
+24 W
+2795 2945 PD
+24 W
+2779 2925 PD
+24 W
+2764 2906 PD
+24 W
+2754 2888 PD
+24 W
+2743 2869 PD
+24 W
+2731 2850 PD
+24 W
+2725 2831 PD
+24 W
+2720 2813 PD
+24 W
+2709 2794 PD
+24 W
+2697 2776 PD
+24 W
+2688 2759 PD
+24 W
+2683 2740 PD
+24 W
+2678 2724 PD
+24 W
+2676 2722 PD
+24 W
+2667 2703 PD
+24 W
+2668 2685 PD
+24 W
+2671 2667 PD
+24 W
+2678 2649 PD
+24 W
+2683 2629 PD
+24 W
+2692 2610 PD
+24 W
+2697 2592 PD
+24 W
+2705 2575 PD
+24 W
+2709 2555 PD
+24 W
+2716 2536 PD
+24 W
+2723 2518 PD
+24 W
+2734 2499 PD
+24 W
+2761 2496 PD
+24 W
+2777 2478 PD
+24 W
+2780 2459 PD
+24 W
+2788 2441 PD
+24 W
+2818 2427 PD
+24 W
+2845 2418 PD
+24 W
+2872 2402 PD
+24 W
+2899 2383 PD
+24 W
+2926 2367 PD
+24 W
+2954 2348 PD
+24 W
+2982 2334 PD
+24 W
+3011 2317 PD
+24 W
+3039 2301 PD
+24 W
+3069 2282 PD
+24 W
+3097 2269 PD
+24 W
+3124 2260 PD
+24 W
+3152 2254 PD
+24 W
+3180 2251 PD
+24 W
+3207 2248 PD
+24 W
+3237 2244 PD
+24 W
+3264 2243 PD
+24 W
+3294 2241 PD
+24 W
+3323 2238 PD
+24 W
+3352 2232 PD
+24 W
+3381 2228 PD
+24 W
+3409 2223 PD
+24 W
+3435 2217 PD
+24 W
+3464 2211 PD
+24 W
+3492 2197 PD
+24 W
+3520 2182 PD
+24 W
+3540 2162 PD
+24 W
+3560 2144 PD
+24 W
+3582 2127 PD
+24 W
+3599 2144 PD
+24 W
+3610 2150 PD
+24 W
+3629 2161 PD
+24 W
+3658 2172 PD
+24 W
+3688 2184 PD
+24 W
+3714 2199 PD
+24 W
+3737 2219 PD
+24 W
+3754 2237 PD
+24 W
+3772 2256 PD
+24 W
+3798 2258 PD
+24 W
+3818 2276 PD
+24 W
+3835 2293 PD
+24 W
+3862 2308 PD
+24 W
+3889 2318 PD
+24 W
+3918 2332 PD
+24 W
+3944 2349 PD
+24 W
+3971 2367 PD
+24 W
+3998 2382 PD
+24 W
+4026 2399 PD
+24 W
+4056 2412 PD
+24 W
+4084 2426 PD
+24 W
+4113 2442 PD
+24 W
+4140 2460 PD
+24 W
+4162 2478 PD
+24 W
+4178 2496 PD
+24 W
+4198 2516 PD
+24 W
+4217 2533 PD
+24 W
+4244 2546 PD
+24 W
+4264 2564 PD
+24 W
+4275 2583 PD
+24 W
+4292 2601 PD
+24 W
+4318 2619 PD
+24 W
+4345 2633 PD
+24 W
+4373 2650 PD
+24 W
+4402 2659 PD
+24 W
+4425 2678 PD
+24 W
+4448 2695 PD
+24 W
+4476 2711 PD
+24 W
+4504 2727 PD
+24 W
+4532 2746 PD
+24 W
+4551 2764 PD
+24 W
+4577 2783 PD
+24 W
+4602 2802 PD
+24 W
+4624 2820 PD
+24 W
+4638 2838 PD
+24 W
+4652 2857 PD
+24 W
+4670 2876 PD
+24 W
+4693 2894 PD
+24 W
+4722 2912 PD
+24 W
+4749 2927 PD
+24 W
+4777 2945 PD
+24 W
+4793 2962 PD
+24 W
+4820 2972 PD
+24 W
+4837 2990 PD
+24 W
+4844 3008 PD
+24 W
+4873 3027 PD
+24 W
+4901 3041 PD
+24 W
+4929 3048 PD
+24 W
+4958 3055 PD
+24 W
+4986 3058 PD
+24 W
+5015 3071 PD
+24 W
+5033 3089 PD
+24 W
+5053 3107 PD
+24 W
+5082 3123 PD
+24 W
+5109 3142 PD
+24 W
+5137 3160 PD
+24 W
+5164 3173 PD
+24 W
+5185 3192 PD
+24 W
+5203 3210 PD
+24 W
+5219 3229 PD
+24 W
+5235 3248 PD
+24 W
+5251 3265 PD
+24 W
+5267 3285 PD
+24 W
+5278 3303 PD
+24 W
+5288 3321 PD
+24 W
+5303 3341 PD
+24 W
+5318 3362 PD
+24 W
+5334 3383 PD
+24 W
+5347 3404 PD
+24 W
+5359 3424 PD
+24 W
+5369 3445 PD
+24 W
+5379 3466 PD
+24 W
+5392 3486 PD
+24 W
+5407 3505 PD
+24 W
+5431 3526 PD
+24 W
+5447 3546 PD
+24 W
+5462 3565 PD
+24 W
+5479 3584 PD
+24 W
+5498 3602 PD
+24 W
+5522 3620 PD
+24 W
+5549 3638 PD
+24 W
+5575 3657 PD
+24 W
+5595 3676 PD
+24 W
+5616 3694 PD
+24 W
+5638 3712 PD
+24 W
+5660 3730 PD
+24 W
+5684 3751 PD
+24 W
+5707 3770 PD
+24 W
+5731 3788 PD
+24 W
+5758 3808 PD
+24 W
+5783 3826 PD
+24 W
+5805 3845 PD
+24 W
+5824 3864 PD
+24 W
+5839 3884 PD
+24 W
+5853 3902 PD
+24 W
+5863 3920 PD
+24 W
+5877 3938 PD
+24 W
+5898 3957 PD
+24 W
+5916 3976 PD
+24 W
+5934 3996 PD
+24 W
+5953 4015 PD
+24 W
+5967 4034 PD
+24 W
+5985 4054 PD
+24 W
+6001 4073 PD
+24 W
+6016 4092 PD
+24 W
+6033 4114 PD
+24 W
+6046 4131 PD
+24 W
+6060 4151 PD
+24 W
+6069 4169 PD
+24 W
+6067 4188 PD
+24 W
+6069 4206 PD
+24 W
+6074 4225 PD
+24 W
+6076 4246 PD
+24 W
+6084 4265 PD
+24 W
+6094 4283 PD
+24 W
+6106 4302 PD
+24 W
+6111 4320 PD
+24 W
+6114 4339 PD
+24 W
+6116 4358 PD
+24 W
+6121 4379 PD
+24 W
+6126 4399 PD
+24 W
+6129 4418 PD
+24 W
+6136 4437 PD
+24 W
+6145 4455 PD
+24 W
+6158 4474 PD
+24 W
+6174 4492 PD
+24 W
+6191 4510 PD
+24 W
+6208 4529 PD
+24 W
+6222 4548 PD
+24 W
+3578 4605 PD
+24 W
+3577 4605 PD
+24 W
+3568 4586 PD
+24 W
+3565 4567 PD
+24 W
+3559 4549 PD
+24 W
+3550 4531 PD
+24 W
+3536 4512 PD
+24 W
+3516 4492 PD
+24 W
+3493 4474 PD
+24 W
+3471 4456 PD
+24 W
+3443 4437 PD
+24 W
+3416 4418 PD
+24 W
+3390 4398 PD
+24 W
+3370 4379 PD
+24 W
+3359 4360 PD
+24 W
+3359 4341 PD
+24 W
+3361 4323 PD
+24 W
+3371 4303 PD
+24 W
+3368 4286 PD
+24 W
+3376 4267 PD
+24 W
+3403 4256 PD
+24 W
+3397 4237 PD
+24 W
+3380 4219 PD
+24 W
+3376 4202 PD
+24 W
+3403 4191 PD
+24 W
+3431 4183 PD
+24 W
+3460 4172 PD
+24 W
+3473 4155 PD
+24 W
+3461 4136 PD
+24 W
+3433 4119 PD
+24 W
+3407 4107 PD
+24 W
+3378 4089 PD
+24 W
+3356 4071 PD
+24 W
+3327 4067 PD
+24 W
+3315 4049 PD
+24 W
+3288 4034 PD
+24 W
+3288 4017 PD
+24 W
+3260 4001 PD
+24 W
+3257 3983 PD
+24 W
+3283 3969 PD
+24 W
+3298 3951 PD
+24 W
+3325 3944 PD
+24 W
+3342 3926 PD
+24 W
+3338 3909 PD
+24 W
+3310 3892 PD
+24 W
+3301 3874 PD
+24 W
+3284 3855 PD
+24 W
+3276 3838 PD
+24 W
+3270 3820 PD
+24 W
+3259 3802 PD
+24 W
+3234 3784 PD
+24 W
+3240 3765 PD
+24 W
+3220 3746 PD
+24 W
+3209 3728 PD
+24 W
+3205 3710 PD
+24 W
+3204 3692 PD
+24 W
+3205 3673 PD
+24 W
+3212 3653 PD
+24 W
+3219 3635 PD
+24 W
+3214 3617 PD
+24 W
+3206 3599 PD
+24 W
+3213 3581 PD
+24 W
+3226 3563 PD
+24 W
+3221 3544 PD
+24 W
+3209 3525 PD
+24 W
+3196 3507 PD
+24 W
+3182 3489 PD
+24 W
+3180 3471 PD
+24 W
+3169 3453 PD
+24 W
+3153 3434 PD
+24 W
+3148 3417 PD
+24 W
+3144 3399 PD
+24 W
+3131 3380 PD
+24 W
+3113 3361 PD
+24 W
+3101 3342 PD
+24 W
+3089 3324 PD
+24 W
+3069 3305 PD
+24 W
+3041 3286 PD
+24 W
+3028 3267 PD
+24 W
+3010 3249 PD
+24 W
+2983 3235 PD
+24 W
+2954 3226 PD
+24 W
+2926 3218 PD
+24 W
+2906 3200 PD
+24 W
+2885 3182 PD
+24 W
+2856 3169 PD
+24 W
+2829 3160 PD
+24 W
+2799 3152 PD
+24 W
+2769 3144 PD
+24 W
+2742 3131 PD
+24 W
+2720 3113 PD
+24 W
+2723 3095 PD
+24 W
+2731 3077 PD
+24 W
+2735 3058 PD
+24 W
+2733 3039 PD
+24 W
+2727 3020 PD
+24 W
+2716 3001 PD
+24 W
+2701 2983 PD
+24 W
+2688 2963 PD
+24 W
+2680 2944 PD
+24 W
+2670 2926 PD
+24 W
+2660 2907 PD
+24 W
+2650 2888 PD
+24 W
+2642 2868 PD
+24 W
+2632 2849 PD
+24 W
+2624 2831 PD
+24 W
+2611 2813 PD
+24 W
+2595 2796 PD
+24 W
+2576 2778 PD
+24 W
+2561 2759 PD
+24 W
+2548 2740 PD
+24 W
+2533 2721 PD
+24 W
+2520 2702 PD
+24 W
+2509 2683 PD
+24 W
+2498 2665 PD
+24 W
+2486 2646 PD
+24 W
+2476 2627 PD
+24 W
+2468 2609 PD
+24 W
+2459 2591 PD
+24 W
+2450 2577 PD
+24 W
+2440 2572 PD
+24 W
+2430 2553 PD
+24 W
+2423 2534 PD
+24 W
+2419 2516 PD
+24 W
+2417 2498 PD
+24 W
+2422 2480 PD
+24 W
+2429 2461 PD
+24 W
+2434 2442 PD
+24 W
+2439 2424 PD
+24 W
+2444 2406 PD
+24 W
+2450 2388 PD
+24 W
+2458 2369 PD
+24 W
+2469 2351 PD
+24 W
+2481 2332 PD
+24 W
+2494 2313 PD
+24 W
+2504 2295 PD
+24 W
+2515 2277 PD
+24 W
+2529 2259 PD
+24 W
+2550 2241 PD
+24 W
+2578 2225 PD
+24 W
+2605 2214 PD
+24 W
+2633 2204 PD
+24 W
+2662 2190 PD
+24 W
+2690 2176 PD
+24 W
+2720 2159 PD
+24 W
+2748 2143 PD
+24 W
+2775 2128 PD
+24 W
+2803 2114 PD
+24 W
+2831 2101 PD
+24 W
+2858 2089 PD
+24 W
+2886 2076 PD
+24 W
+2915 2062 PD
+24 W
+2946 2050 PD
+24 W
+2975 2039 PD
+24 W
+3001 2030 PD
+24 W
+3028 2024 PD
+24 W
+3057 2018 PD
+24 W
+3086 2016 PD
+24 W
+3114 2013 PD
+24 W
+3142 2009 PD
+24 W
+3170 2007 PD
+24 W
+3198 2006 PD
+24 W
+3229 2003 PD
+24 W
+3256 1999 PD
+24 W
+3285 1996 PD
+24 W
+3314 1990 PD
+24 W
+3342 1984 PD
+24 W
+3371 1975 PD
+24 W
+3399 1968 PD
+24 W
+3426 1958 PD
+24 W
+3453 1949 PD
+24 W
+3479 1935 PD
+24 W
+3503 1917 PD
+24 W
+3507 1914 PD
+24 W
+3531 1920 PD
+24 W
+3557 1939 PD
+24 W
+3568 1957 PD
+24 W
+3583 1975 PD
+24 W
+3602 1994 PD
+24 W
+3625 2011 PD
+24 W
+3648 2029 PD
+24 W
+3675 2043 PD
+24 W
+3702 2052 PD
+24 W
+3714 2072 PD
+24 W
+3721 2090 PD
+24 W
+3733 2108 PD
+24 W
+3751 2128 PD
+24 W
+3774 2147 PD
+24 W
+3801 2157 PD
+24 W
+3814 2175 PD
+24 W
+3834 2193 PD
+24 W
+3862 2194 PD
+24 W
+3890 2194 PD
+24 W
+3901 2212 PD
+24 W
+3918 2230 PD
+24 W
+3944 2248 PD
+24 W
+3954 2267 PD
+24 W
+3963 2286 PD
+24 W
+3988 2304 PD
+24 W
+4012 2322 PD
+24 W
+4039 2337 PD
+24 W
+4066 2353 PD
+24 W
+4095 2371 PD
+24 W
+4124 2383 PD
+24 W
+4153 2389 PD
+24 W
+4180 2393 PD
+24 W
+4208 2407 PD
+24 W
+4227 2425 PD
+24 W
+4253 2444 PD
+24 W
+4281 2458 PD
+24 W
+4308 2471 PD
+24 W
+4320 2489 PD
+24 W
+4336 2507 PD
+24 W
+4364 2523 PD
+24 W
+4387 2541 PD
+24 W
+4402 2559 PD
+24 W
+4417 2578 PD
+24 W
+4444 2593 PD
+24 W
+4472 2595 PD
+24 W
+4476 2614 PD
+24 W
+4493 2631 PD
+24 W
+4524 2637 PD
+24 W
+4552 2647 PD
+24 W
+4574 2665 PD
+24 W
+4584 2682 PD
+24 W
+4600 2702 PD
+24 W
+4618 2721 PD
+24 W
+4638 2740 PD
+24 W
+4663 2760 PD
+24 W
+4689 2780 PD
+24 W
+4710 2798 PD
+24 W
+4726 2816 PD
+24 W
+4742 2834 PD
+24 W
+4762 2854 PD
+24 W
+4779 2873 PD
+24 W
+4799 2891 PD
+24 W
+4822 2909 PD
+24 W
+4850 2927 PD
+24 W
+4878 2943 PD
+24 W
+4908 2958 PD
+24 W
+4937 2970 PD
+24 W
+4966 2984 PD
+24 W
+4993 2996 PD
+24 W
+5021 3003 PD
+24 W
+5049 3012 PD
+24 W
+5075 3023 PD
+24 W
+5103 3036 PD
+24 W
+5130 3053 PD
+24 W
+5155 3070 PD
+24 W
+5183 3088 PD
+24 W
+5210 3105 PD
+24 W
+5237 3123 PD
+24 W
+5261 3141 PD
+24 W
+5284 3159 PD
+24 W
+5306 3177 PD
+24 W
+5324 3196 PD
+24 W
+5334 3214 PD
+24 W
+5337 3233 PD
+24 W
+5337 3250 PD
+24 W
+5345 3269 PD
+24 W
+5354 3289 PD
+24 W
+5367 3309 PD
+24 W
+5381 3329 PD
+24 W
+5397 3348 PD
+24 W
+5408 3367 PD
+24 W
+5417 3385 PD
+24 W
+5429 3404 PD
+24 W
+5439 3422 PD
+24 W
+5451 3442 PD
+24 W
+5466 3463 PD
+24 W
+5480 3483 PD
+24 W
+5499 3502 PD
+24 W
+5517 3520 PD
+24 W
+5534 3538 PD
+24 W
+5547 3556 PD
+24 W
+5568 3576 PD
+24 W
+5586 3594 PD
+24 W
+5607 3612 PD
+24 W
+5634 3631 PD
+24 W
+5661 3648 PD
+24 W
+5688 3664 PD
+24 W
+5718 3683 PD
+24 W
+5745 3699 PD
+24 W
+5774 3714 PD
+24 W
+5802 3731 PD
+24 W
+5823 3749 PD
+24 W
+5838 3767 PD
+24 W
+5861 3786 PD
+24 W
+5883 3804 PD
+24 W
+5896 3823 PD
+24 W
+5908 3841 PD
+24 W
+5923 3859 PD
+24 W
+5939 3878 PD
+24 W
+5958 3897 PD
+24 W
+5981 3916 PD
+24 W
+6000 3933 PD
+24 W
+6017 3951 PD
+24 W
+6032 3970 PD
+24 W
+6041 3987 PD
+24 W
+6049 4006 PD
+24 W
+6057 4024 PD
+24 W
+6074 4043 PD
+24 W
+6093 4062 PD
+24 W
+6116 4080 PD
+24 W
+6111 4099 PD
+24 W
+6112 4119 PD
+24 W
+6115 4139 PD
+24 W
+6121 4157 PD
+24 W
+6132 4175 PD
+24 W
+6140 4192 PD
+24 W
+6147 4210 PD
+24 W
+6151 4229 PD
+24 W
+6160 4247 PD
+24 W
+6168 4265 PD
+24 W
+6170 4283 PD
+24 W
+6171 4301 PD
+24 W
+6172 4319 PD
+24 W
+6180 4337 PD
+24 W
+6188 4357 PD
+24 W
+6198 4375 PD
+24 W
+6208 4393 PD
+24 W
+6216 4411 PD
+24 W
+6219 4431 PD
+24 W
+6221 4449 PD
+24 W
+6229 4468 PD
+24 W
+3507 4607 PD
+24 W
+3499 4589 PD
+24 W
+3499 4571 PD
+24 W
+3490 4551 PD
+24 W
+3477 4532 PD
+24 W
+3449 4513 PD
+24 W
+3420 4501 PD
+24 W
+3392 4485 PD
+24 W
+3365 4470 PD
+24 W
+3339 4451 PD
+24 W
+3320 4432 PD
+24 W
+3304 4413 PD
+24 W
+3292 4395 PD
+24 W
+3288 4378 PD
+24 W
+3287 4359 PD
+24 W
+3270 4341 PD
+24 W
+3249 4324 PD
+24 W
+3237 4305 PD
+24 W
+3245 4287 PD
+24 W
+3252 4267 PD
+24 W
+3253 4249 PD
+24 W
+3244 4230 PD
+24 W
+3230 4211 PD
+24 W
+3207 4193 PD
+24 W
+3183 4174 PD
+24 W
+3181 4156 PD
+24 W
+3184 4138 PD
+24 W
+3212 4142 PD
+24 W
+3242 4147 PD
+24 W
+3270 4147 PD
+24 W
+3281 4128 PD
+24 W
+3272 4110 PD
+24 W
+3251 4091 PD
+24 W
+3231 4072 PD
+24 W
+3206 4054 PD
+24 W
+3198 4036 PD
+24 W
+3200 4019 PD
+24 W
+3172 4015 PD
+24 W
+3156 3996 PD
+24 W
+3163 3978 PD
+24 W
+3168 3959 PD
+24 W
+3192 3940 PD
+24 W
+3192 3922 PD
+24 W
+3182 3904 PD
+24 W
+3163 3885 PD
+24 W
+3145 3867 PD
+24 W
+3129 3848 PD
+24 W
+3109 3829 PD
+24 W
+3094 3810 PD
+24 W
+3078 3792 PD
+24 W
+3069 3774 PD
+24 W
+3068 3755 PD
+24 W
+3073 3737 PD
+24 W
+3082 3718 PD
+24 W
+3090 3698 PD
+24 W
+3094 3679 PD
+24 W
+3096 3660 PD
+24 W
+3096 3642 PD
+24 W
+3095 3623 PD
+24 W
+3094 3603 PD
+24 W
+3090 3583 PD
+24 W
+3087 3565 PD
+24 W
+3087 3545 PD
+24 W
+3084 3526 PD
+24 W
+3082 3508 PD
+24 W
+3076 3488 PD
+24 W
+3069 3468 PD
+24 W
+3064 3449 PD
+24 W
+3058 3430 PD
+24 W
+3050 3410 PD
+24 W
+3041 3392 PD
+24 W
+3031 3374 PD
+24 W
+3019 3354 PD
+24 W
+3005 3334 PD
+24 W
+2990 3315 PD
+24 W
+2969 3296 PD
+24 W
+2948 3276 PD
+24 W
+2928 3258 PD
+24 W
+2905 3239 PD
+24 W
+2878 3229 PD
+24 W
+2850 3222 PD
+24 W
+2822 3207 PD
+24 W
+2793 3193 PD
+24 W
+2763 3188 PD
+24 W
+2734 3190 PD
+24 W
+2705 3184 PD
+24 W
+2676 3170 PD
+24 W
+2647 3162 PD
+24 W
+2620 3159 PD
+24 W
+2606 3140 PD
+24 W
+2603 3122 PD
+24 W
+2598 3104 PD
+24 W
+2622 3086 PD
+24 W
+2650 3072 PD
+24 W
+2673 3054 PD
+24 W
+2665 3036 PD
+24 W
+2637 3018 PD
+24 W
+2618 2999 PD
+24 W
+2619 2980 PD
+24 W
+2625 2962 PD
+24 W
+2621 2944 PD
+24 W
+2612 2925 PD
+24 W
+2598 2906 PD
+24 W
+2588 2887 PD
+24 W
+2577 2869 PD
+24 W
+2564 2850 PD
+24 W
+2546 2831 PD
+24 W
+2527 2812 PD
+24 W
+2505 2794 PD
+24 W
+2488 2775 PD
+24 W
+2469 2756 PD
+24 W
+2457 2737 PD
+24 W
+2448 2719 PD
+24 W
+2434 2700 PD
+24 W
+2422 2682 PD
+24 W
+2410 2664 PD
+24 W
+2393 2645 PD
+24 W
+2376 2626 PD
+24 W
+2359 2607 PD
+24 W
+2339 2589 PD
+24 W
+2322 2570 PD
+24 W
+2307 2551 PD
+24 W
+2294 2533 PD
+24 W
+2288 2515 PD
+24 W
+2283 2494 PD
+24 W
+2279 2475 PD
+24 W
+2271 2458 PD
+24 W
+2260 2449 PD
+24 W
+2253 2439 PD
+24 W
+2243 2419 PD
+24 W
+2229 2400 PD
+24 W
+2214 2381 PD
+24 W
+2200 2362 PD
+24 W
+2190 2343 PD
+24 W
+2185 2326 PD
+24 W
+2185 2308 PD
+24 W
+2195 2290 PD
+24 W
+2216 2272 PD
+24 W
+2229 2253 PD
+24 W
+2238 2235 PD
+24 W
+2242 2216 PD
+24 W
+2244 2197 PD
+24 W
+2247 2179 PD
+24 W
+2249 2161 PD
+24 W
+2253 2142 PD
+24 W
+2257 2124 PD
+24 W
+2262 2106 PD
+24 W
+2270 2088 PD
+24 W
+2279 2070 PD
+24 W
+2292 2051 PD
+24 W
+2309 2032 PD
+24 W
+2326 2013 PD
+24 W
+2352 1995 PD
+24 W
+2380 1979 PD
+24 W
+2407 1967 PD
+24 W
+2437 1959 PD
+24 W
+2465 1949 PD
+24 W
+2491 1934 PD
+24 W
+2512 1914 PD
+24 W
+2534 1894 PD
+24 W
+2552 1876 PD
+24 W
+2577 1855 PD
+24 W
+2605 1838 PD
+24 W
+2634 1819 PD
+24 W
+2662 1802 PD
+24 W
+2689 1784 PD
+24 W
+2718 1766 PD
+24 W
+2748 1751 PD
+24 W
+2776 1739 PD
+24 W
+2804 1728 PD
+24 W
+2831 1720 PD
+24 W
+2860 1713 PD
+24 W
+2890 1706 PD
+24 W
+2917 1701 PD
+24 W
+2946 1696 PD
+24 W
+2977 1696 PD
+24 W
+3004 1697 PD
+24 W
+3032 1702 PD
+24 W
+3060 1707 PD
+24 W
+3087 1714 PD
+24 W
+3114 1722 PD
+24 W
+3143 1732 PD
+24 W
+3173 1736 PD
+24 W
+3202 1737 PD
+24 W
+3229 1735 PD
+24 W
+3256 1734 PD
+24 W
+3284 1732 PD
+24 W
+3312 1736 PD
+24 W
+3339 1739 PD
+24 W
+3365 1739 PD
+24 W
+3392 1725 PD
+24 W
+3419 1708 PD
+24 W
+3447 1694 PD
+24 W
+3474 1687 PD
+24 W
+3476 1688 PD
+24 W
+3490 1708 PD
+24 W
+3507 1726 PD
+24 W
+3530 1744 PD
+24 W
+3545 1763 PD
+24 W
+3564 1782 PD
+24 W
+3583 1800 PD
+24 W
+3610 1819 PD
+24 W
+3614 1839 PD
+24 W
+3615 1856 PD
+24 W
+3631 1875 PD
+24 W
+3655 1894 PD
+24 W
+3668 1912 PD
+24 W
+3678 1930 PD
+24 W
+3693 1951 PD
+24 W
+3715 1971 PD
+24 W
+3741 1988 PD
+24 W
+3768 1985 PD
+24 W
+3795 1985 PD
+24 W
+3825 2004 PD
+24 W
+3845 2022 PD
+24 W
+3847 2040 PD
+24 W
+3850 2058 PD
+24 W
+3865 2076 PD
+24 W
+3883 2095 PD
+24 W
+3900 2114 PD
+24 W
+3917 2131 PD
+24 W
+3933 2150 PD
+24 W
+3951 2169 PD
+24 W
+3980 2171 PD
+24 W
+3991 2192 PD
+24 W
+4000 2213 PD
+24 W
+4014 2232 PD
+24 W
+4032 2250 PD
+24 W
+4059 2267 PD
+24 W
+4088 2279 PD
+24 W
+4116 2286 PD
+24 W
+4147 2296 PD
+24 W
+4175 2307 PD
+24 W
+4205 2323 PD
+24 W
+4233 2337 PD
+24 W
+4263 2352 PD
+24 W
+4290 2370 PD
+24 W
+4316 2380 PD
+24 W
+4331 2399 PD
+24 W
+4351 2416 PD
+24 W
+4379 2429 PD
+24 W
+4406 2428 PD
+24 W
+4415 2446 PD
+24 W
+4442 2455 PD
+24 W
+4470 2458 PD
+24 W
+4499 2460 PD
+24 W
+4523 2478 PD
+24 W
+4536 2496 PD
+24 W
+4564 2505 PD
+24 W
+4581 2524 PD
+24 W
+4577 2543 PD
+24 W
+4574 2560 PD
+24 W
+4601 2573 PD
+24 W
+4616 2591 PD
+24 W
+4628 2610 PD
+24 W
+4635 2628 PD
+24 W
+4646 2647 PD
+24 W
+4664 2665 PD
+24 W
+4682 2682 PD
+24 W
+4699 2701 PD
+24 W
+4718 2720 PD
+24 W
+4741 2740 PD
+24 W
+4760 2758 PD
+24 W
+4781 2776 PD
+24 W
+4802 2794 PD
+24 W
+4818 2814 PD
+24 W
+4832 2833 PD
+24 W
+4848 2851 PD
+24 W
+4872 2871 PD
+24 W
+4900 2887 PD
+24 W
+4927 2905 PD
+24 W
+4955 2912 PD
+24 W
+4982 2919 PD
+24 W
+5009 2933 PD
+24 W
+5023 2951 PD
+24 W
+5051 2959 PD
+24 W
+5079 2964 PD
+24 W
+5108 2966 PD
+24 W
+5136 2970 PD
+24 W
+5164 2982 PD
+24 W
+5191 2996 PD
+24 W
+5212 3015 PD
+24 W
+5219 3033 PD
+24 W
+5234 3052 PD
+24 W
+5261 3070 PD
+24 W
+5291 3086 PD
+24 W
+5320 3103 PD
+24 W
+5347 3122 PD
+24 W
+5374 3135 PD
+24 W
+5377 3153 PD
+24 W
+5394 3171 PD
+24 W
+5415 3190 PD
+24 W
+5422 3208 PD
+24 W
+5435 3226 PD
+24 W
+5444 3245 PD
+24 W
+5454 3265 PD
+24 W
+5461 3284 PD
+24 W
+5466 3304 PD
+24 W
+5470 3323 PD
+24 W
+5478 3342 PD
+24 W
+5490 3361 PD
+24 W
+5502 3379 PD
+24 W
+5512 3398 PD
+24 W
+5522 3418 PD
+24 W
+5540 3435 PD
+24 W
+5557 3453 PD
+24 W
+5567 3472 PD
+24 W
+5580 3491 PD
+24 W
+5595 3510 PD
+24 W
+5611 3530 PD
+24 W
+5629 3549 PD
+24 W
+5652 3569 PD
+24 W
+5679 3587 PD
+24 W
+5706 3601 PD
+24 W
+5734 3614 PD
+24 W
+5763 3631 PD
+24 W
+5790 3648 PD
+24 W
+5820 3665 PD
+24 W
+5849 3680 PD
+24 W
+5877 3698 PD
+24 W
+5902 3717 PD
+24 W
+5926 3735 PD
+24 W
+5950 3755 PD
+24 W
+5975 3773 PD
+24 W
+5993 3791 PD
+24 W
+6006 3809 PD
+24 W
+6015 3827 PD
+24 W
+6024 3846 PD
+24 W
+6032 3866 PD
+24 W
+6042 3885 PD
+24 W
+6055 3903 PD
+24 W
+6067 3921 PD
+24 W
+6094 3934 PD
+24 W
+6112 3953 PD
+24 W
+6118 3972 PD
+24 W
+6118 3991 PD
+24 W
+6125 4009 PD
+24 W
+6148 4026 PD
+24 W
+6177 4037 PD
+24 W
+6187 4056 PD
+24 W
+6185 4075 PD
+24 W
+6186 4095 PD
+24 W
+6187 4112 PD
+24 W
+6187 4130 PD
+24 W
+6193 4150 PD
+24 W
+6221 4162 PD
+24 W
+6229 4182 PD
+24 W
+6229 4199 PD
+24 W
+6240 4217 PD
+24 W
+3439 4606 PD
+24 W
+3438 4606 PD
+24 W
+3418 4588 PD
+24 W
+3399 4570 PD
+24 W
+3373 4552 PD
+24 W
+3343 4541 PD
+24 W
+3316 4534 PD
+24 W
+3289 4526 PD
+24 W
+3262 4518 PD
+24 W
+3233 4507 PD
+24 W
+3205 4494 PD
+24 W
+3177 4480 PD
+24 W
+3149 4468 PD
+24 W
+3122 4454 PD
+24 W
+3096 4435 PD
+24 W
+3073 4416 PD
+24 W
+3044 4404 PD
+24 W
+3015 4397 PD
+24 W
+2993 4378 PD
+24 W
+2977 4359 PD
+24 W
+2963 4340 PD
+24 W
+2940 4322 PD
+24 W
+2911 4305 PD
+24 W
+2883 4292 PD
+24 W
+2855 4287 PD
+24 W
+2827 4281 PD
+24 W
+2799 4270 PD
+24 W
+2771 4258 PD
+24 W
+2743 4243 PD
+24 W
+2731 4224 PD
+24 W
+2725 4207 PD
+24 W
+2720 4188 PD
+24 W
+2692 4176 PD
+24 W
+2664 4169 PD
+24 W
+2648 4149 PD
+24 W
+2644 4131 PD
+24 W
+2648 4113 PD
+24 W
+2662 4095 PD
+24 W
+2690 4084 PD
+24 W
+2718 4077 PD
+24 W
+2747 4071 PD
+24 W
+2776 4063 PD
+24 W
+2806 4055 PD
+24 W
+2836 4046 PD
+24 W
+2863 4037 PD
+24 W
+2892 4029 PD
+24 W
+2922 4019 PD
+24 W
+2950 4008 PD
+24 W
+2978 3999 PD
+24 W
+3008 3990 PD
+24 W
+3035 3982 PD
+24 W
+3061 3964 PD
+24 W
+3062 3946 PD
+24 W
+3055 3928 PD
+24 W
+3056 3910 PD
+24 W
+3028 3913 PD
+24 W
+3010 3894 PD
+24 W
+2983 3890 PD
+24 W
+2989 3872 PD
+24 W
+2965 3854 PD
+24 W
+2955 3833 PD
+24 W
+2950 3815 PD
+24 W
+2947 3797 PD
+24 W
+2945 3779 PD
+24 W
+2949 3761 PD
+24 W
+2960 3742 PD
+24 W
+2976 3725 PD
+24 W
+2998 3707 PD
+24 W
+3016 3689 PD
+24 W
+3025 3671 PD
+24 W
+3027 3652 PD
+24 W
+3023 3634 PD
+24 W
+3014 3615 PD
+24 W
+3000 3596 PD
+24 W
+2985 3578 PD
+24 W
+2974 3560 PD
+24 W
+2964 3541 PD
+24 W
+2953 3522 PD
+24 W
+2946 3503 PD
+24 W
+2938 3484 PD
+24 W
+2929 3466 PD
+24 W
+2922 3447 PD
+24 W
+2914 3428 PD
+24 W
+2903 3408 PD
+24 W
+2889 3391 PD
+24 W
+2863 3371 PD
+24 W
+2839 3353 PD
+24 W
+2819 3336 PD
+24 W
+2806 3316 PD
+24 W
+2805 3298 PD
+24 W
+2795 3280 PD
+24 W
+2773 3262 PD
+24 W
+2751 3244 PD
+24 W
+2724 3232 PD
+24 W
+2696 3226 PD
+24 W
+2670 3215 PD
+24 W
+2642 3199 PD
+24 W
+2614 3201 PD
+24 W
+2584 3197 PD
+24 W
+2556 3192 PD
+24 W
+2529 3187 PD
+24 W
+2513 3168 PD
+24 W
+2511 3149 PD
+24 W
+2510 3131 PD
+24 W
+2523 3112 PD
+24 W
+2550 3095 PD
+24 W
+2569 3077 PD
+24 W
+2578 3059 PD
+24 W
+2549 3045 PD
+24 W
+2526 3027 PD
+24 W
+2537 3010 PD
+24 W
+2549 2992 PD
+24 W
+2551 2972 PD
+24 W
+2547 2954 PD
+24 W
+2537 2936 PD
+24 W
+2526 2918 PD
+24 W
+2513 2900 PD
+24 W
+2499 2881 PD
+24 W
+2483 2862 PD
+24 W
+2462 2843 PD
+24 W
+2444 2824 PD
+24 W
+2424 2806 PD
+24 W
+2405 2788 PD
+24 W
+2384 2770 PD
+24 W
+2362 2751 PD
+24 W
+2343 2732 PD
+24 W
+2326 2713 PD
+24 W
+2308 2694 PD
+24 W
+2293 2676 PD
+24 W
+2279 2657 PD
+24 W
+2264 2639 PD
+24 W
+2251 2620 PD
+24 W
+2242 2602 PD
+24 W
+2229 2584 PD
+24 W
+2212 2567 PD
+24 W
+2195 2549 PD
+24 W
+2177 2531 PD
+24 W
+2159 2513 PD
+24 W
+2141 2494 PD
+24 W
+2126 2476 PD
+24 W
+2115 2458 PD
+24 W
+2102 2440 PD
+24 W
+2086 2422 PD
+24 W
+2071 2405 PD
+24 W
+2058 2387 PD
+24 W
+2044 2369 PD
+24 W
+2034 2351 PD
+24 W
+2024 2331 PD
+24 W
+2016 2312 PD
+24 W
+2012 2293 PD
+24 W
+2012 2275 PD
+24 W
+2013 2272 PD
+24 W
+2010 2257 PD
+24 W
+2007 2239 PD
+24 W
+2008 2221 PD
+24 W
+2011 2203 PD
+24 W
+2017 2184 PD
+24 W
+2021 2166 PD
+24 W
+2036 2147 PD
+24 W
+2055 2128 PD
+24 W
+2059 2110 PD
+24 W
+2052 2092 PD
+24 W
+2041 2074 PD
+24 W
+2030 2055 PD
+24 W
+2019 2035 PD
+24 W
+2013 2017 PD
+24 W
+2017 1999 PD
+24 W
+2024 1980 PD
+24 W
+2033 1961 PD
+24 W
+2043 1942 PD
+24 W
+2052 1925 PD
+24 W
+2059 1907 PD
+24 W
+2063 1889 PD
+24 W
+2066 1871 PD
+24 W
+2067 1853 PD
+24 W
+2070 1834 PD
+24 W
+2074 1815 PD
+24 W
+2080 1796 PD
+24 W
+2086 1777 PD
+24 W
+2094 1758 PD
+24 W
+2102 1739 PD
+24 W
+2114 1721 PD
+24 W
+2141 1705 PD
+24 W
+2168 1693 PD
+24 W
+2195 1684 PD
+24 W
+2224 1674 PD
+24 W
+2253 1662 PD
+24 W
+2283 1649 PD
+24 W
+2310 1636 PD
+24 W
+2339 1622 PD
+24 W
+2369 1607 PD
+24 W
+2396 1593 PD
+24 W
+2425 1580 PD
+24 W
+2453 1569 PD
+24 W
+2484 1558 PD
+24 W
+2513 1548 PD
+24 W
+2544 1539 PD
+24 W
+2575 1530 PD
+24 W
+2602 1520 PD
+24 W
+2632 1512 PD
+24 W
+2658 1505 PD
+24 W
+2686 1499 PD
+24 W
+2717 1494 PD
+24 W
+2747 1488 PD
+24 W
+2773 1483 PD
+24 W
+2800 1477 PD
+24 W
+2830 1470 PD
+24 W
+2856 1467 PD
+24 W
+2885 1463 PD
+24 W
+2914 1461 PD
+24 W
+2944 1461 PD
+24 W
+2973 1459 PD
+24 W
+3000 1459 PD
+24 W
+3030 1459 PD
+24 W
+3057 1461 PD
+24 W
+3086 1466 PD
+24 W
+3113 1470 PD
+24 W
+3140 1476 PD
+24 W
+3169 1482 PD
+24 W
+3197 1488 PD
+24 W
+3224 1492 PD
+24 W
+3252 1496 PD
+24 W
+3283 1501 PD
+24 W
+3312 1504 PD
+24 W
+3342 1504 PD
+24 W
+3371 1508 PD
+24 W
+3399 1510 PD
+24 W
+3430 1511 PD
+24 W
+3439 1513 PD
+24 W
+3457 1525 PD
+24 W
+3484 1536 PD
+24 W
+3504 1554 PD
+24 W
+3520 1572 PD
+24 W
+3536 1591 PD
+24 W
+3550 1609 PD
+24 W
+3566 1627 PD
+24 W
+3580 1644 PD
+24 W
+3592 1663 PD
+24 W
+3601 1681 PD
+24 W
+3628 1691 PD
+24 W
+3643 1711 PD
+24 W
+3659 1730 PD
+24 W
+3686 1742 PD
+24 W
+3712 1760 PD
+24 W
+3727 1778 PD
+24 W
+3750 1797 PD
+24 W
+3779 1806 PD
+24 W
+3806 1821 PD
+24 W
+3831 1839 PD
+24 W
+3848 1857 PD
+24 W
+3868 1875 PD
+24 W
+3883 1895 PD
+24 W
+3911 1908 PD
+24 W
+3928 1926 PD
+24 W
+3933 1945 PD
+24 W
+3946 1964 PD
+24 W
+3958 1983 PD
+24 W
+3970 2001 PD
+24 W
+3978 2018 PD
+24 W
+3987 2038 PD
+24 W
+3993 2058 PD
+24 W
+4002 2076 PD
+24 W
+4012 2095 PD
+24 W
+4023 2113 PD
+24 W
+4036 2131 PD
+24 W
+4063 2143 PD
+24 W
+4080 2162 PD
+24 W
+4089 2181 PD
+24 W
+4111 2198 PD
+24 W
+4134 2216 PD
+24 W
+4161 2214 PD
+24 W
+4175 2232 PD
+24 W
+4196 2251 PD
+24 W
+4224 2264 PD
+24 W
+4253 2279 PD
+24 W
+4282 2288 PD
+24 W
+4312 2299 PD
+24 W
+4339 2308 PD
+24 W
+4366 2317 PD
+24 W
+4394 2328 PD
+24 W
+4422 2345 PD
+24 W
+4451 2359 PD
+24 W
+4478 2369 PD
+24 W
+4495 2387 PD
+24 W
+4506 2405 PD
+24 W
+4533 2420 PD
+24 W
+4561 2424 PD
+24 W
+4587 2435 PD
+24 W
+4616 2426 PD
+24 W
+4642 2423 PD
+24 W
+4669 2441 PD
+24 W
+4670 2459 PD
+24 W
+4670 2478 PD
+24 W
+4668 2496 PD
+24 W
+4663 2513 PD
+24 W
+4690 2528 PD
+24 W
+4691 2546 PD
+24 W
+4718 2563 PD
+24 W
+4715 2582 PD
+24 W
+4720 2599 PD
+24 W
+4738 2617 PD
+24 W
+4756 2635 PD
+24 W
+4756 2652 PD
+24 W
+4769 2671 PD
+24 W
+4785 2688 PD
+24 W
+4806 2706 PD
+24 W
+4822 2724 PD
+24 W
+4839 2743 PD
+24 W
+4854 2762 PD
+24 W
+4869 2780 PD
+24 W
+4891 2798 PD
+24 W
+4894 2817 PD
+24 W
+4916 2835 PD
+24 W
+4938 2854 PD
+24 W
+4966 2862 PD
+24 W
+4994 2865 PD
+24 W
+5023 2874 PD
+24 W
+5046 2892 PD
+24 W
+5056 2912 PD
+24 W
+5084 2922 PD
+24 W
+5112 2927 PD
+24 W
+5139 2928 PD
+24 W
+5165 2922 PD
+24 W
+5192 2925 PD
+24 W
+5220 2942 PD
+24 W
+5243 2960 PD
+24 W
+5272 2979 PD
+24 W
+5292 2999 PD
+24 W
+5305 3018 PD
+24 W
+5323 3035 PD
+24 W
+5343 3053 PD
+24 W
+5370 3070 PD
+24 W
+5398 3079 PD
+24 W
+5424 3084 PD
+24 W
+5438 3102 PD
+24 W
+5453 3121 PD
+24 W
+5473 3139 PD
+24 W
+5483 3157 PD
+24 W
+5487 3176 PD
+24 W
+5493 3194 PD
+24 W
+5506 3214 PD
+24 W
+5519 3233 PD
+24 W
+5526 3250 PD
+24 W
+5530 3269 PD
+24 W
+5532 3288 PD
+24 W
+5535 3306 PD
+24 W
+5539 3325 PD
+24 W
+5550 3345 PD
+24 W
+5562 3363 PD
+24 W
+5571 3382 PD
+24 W
+5579 3400 PD
+24 W
+5587 3420 PD
+24 W
+5598 3439 PD
+24 W
+5614 3459 PD
+24 W
+5632 3479 PD
+24 W
+5649 3497 PD
+24 W
+5675 3516 PD
+24 W
+5697 3535 PD
+24 W
+5716 3553 PD
+24 W
+5736 3572 PD
+24 W
+5766 3588 PD
+24 W
+5794 3601 PD
+24 W
+5823 3614 PD
+24 W
+5850 3631 PD
+24 W
+5879 3643 PD
+24 W
+5908 3652 PD
+24 W
+5938 3667 PD
+24 W
+5968 3686 PD
+24 W
+5996 3705 PD
+24 W
+6017 3722 PD
+24 W
+6037 3741 PD
+24 W
+6051 3759 PD
+24 W
+6068 3778 PD
+24 W
+6082 3796 PD
+24 W
+6106 3815 PD
+24 W
+6112 3833 PD
+24 W
+6112 3852 PD
+24 W
+6115 3869 PD
+24 W
+6132 3888 PD
+24 W
+6161 3904 PD
+24 W
+6182 3922 PD
+24 W
+6181 3941 PD
+24 W
+6184 3960 PD
+24 W
+6193 3978 PD
+24 W
+6220 3996 PD
+24 W
+6246 4011 PD
+24 W
+3348 4608 PD
+24 W
+3348 4607 PD
+24 W
+3320 4600 PD
+24 W
+3291 4591 PD
+24 W
+3264 4582 PD
+24 W
+3236 4572 PD
+24 W
+3208 4562 PD
+24 W
+3180 4552 PD
+24 W
+3152 4541 PD
+24 W
+3125 4526 PD
+24 W
+3097 4512 PD
+24 W
+3069 4499 PD
+24 W
+3042 4484 PD
+24 W
+3016 4466 PD
+24 W
+2994 4447 PD
+24 W
+2972 4429 PD
+24 W
+2945 4411 PD
+24 W
+2918 4398 PD
+24 W
+2890 4388 PD
+24 W
+2863 4380 PD
+24 W
+2836 4373 PD
+24 W
+2807 4366 PD
+24 W
+2779 4357 PD
+24 W
+2750 4348 PD
+24 W
+2724 4338 PD
+24 W
+2696 4330 PD
+24 W
+2668 4318 PD
+24 W
+2641 4306 PD
+24 W
+2614 4292 PD
+24 W
+2587 4275 PD
+24 W
+2564 4257 PD
+24 W
+2543 4239 PD
+24 W
+2524 4220 PD
+24 W
+2508 4203 PD
+24 W
+2498 4184 PD
+24 W
+2492 4166 PD
+24 W
+2486 4147 PD
+24 W
+2482 4128 PD
+24 W
+2483 4110 PD
+24 W
+2483 4092 PD
+24 W
+2484 4074 PD
+24 W
+2487 4056 PD
+24 W
+2492 4038 PD
+24 W
+2511 4020 PD
+24 W
+2538 4005 PD
+24 W
+2565 3999 PD
+24 W
+2592 3993 PD
+24 W
+2619 3988 PD
+24 W
+2648 3982 PD
+24 W
+2641 3964 PD
+24 W
+2653 3945 PD
+24 W
+2680 3933 PD
+24 W
+2708 3920 PD
+24 W
+2735 3911 PD
+24 W
+2763 3899 PD
+24 W
+2789 3881 PD
+24 W
+2799 3863 PD
+24 W
+2805 3846 PD
+24 W
+2815 3828 PD
+24 W
+2825 3810 PD
+24 W
+2832 3791 PD
+24 W
+2840 3772 PD
+24 W
+2849 3754 PD
+24 W
+2864 3735 PD
+24 W
+2883 3716 PD
+24 W
+2900 3698 PD
+24 W
+2910 3680 PD
+24 W
+2917 3663 PD
+24 W
+2917 3645 PD
+24 W
+2911 3627 PD
+24 W
+2892 3608 PD
+24 W
+2875 3590 PD
+24 W
+2863 3572 PD
+24 W
+2854 3554 PD
+24 W
+2831 3536 PD
+24 W
+2821 3517 PD
+24 W
+2821 3498 PD
+24 W
+2807 3479 PD
+24 W
+2785 3462 PD
+24 W
+2767 3443 PD
+24 W
+2741 3425 PD
+24 W
+2717 3407 PD
+24 W
+2694 3388 PD
+24 W
+2675 3369 PD
+24 W
+2665 3350 PD
+24 W
+2661 3332 PD
+24 W
+2649 3314 PD
+24 W
+2624 3295 PD
+24 W
+2597 3282 PD
+24 W
+2570 3272 PD
+24 W
+2541 3260 PD
+24 W
+2512 3246 PD
+24 W
+2483 3232 PD
+24 W
+2457 3214 PD
+24 W
+2452 3196 PD
+24 W
+2454 3177 PD
+24 W
+2455 3159 PD
+24 W
+2451 3141 PD
+24 W
+2446 3122 PD
+24 W
+2452 3104 PD
+24 W
+2469 3086 PD
+24 W
+2482 3068 PD
+24 W
+2454 3052 PD
+24 W
+2434 3034 PD
+24 W
+2449 3016 PD
+24 W
+2473 2997 PD
+24 W
+2490 2979 PD
+24 W
+2491 2959 PD
+24 W
+2484 2941 PD
+24 W
+2473 2921 PD
+24 W
+2458 2904 PD
+24 W
+2441 2885 PD
+24 W
+2422 2867 PD
+24 W
+2397 2849 PD
+24 W
+2377 2829 PD
+24 W
+2361 2811 PD
+24 W
+2343 2792 PD
+24 W
+2317 2773 PD
+24 W
+2290 2758 PD
+24 W
+2264 2739 PD
+24 W
+2246 2720 PD
+24 W
+2227 2702 PD
+24 W
+2206 2682 PD
+24 W
+2193 2665 PD
+24 W
+2187 2647 PD
+24 W
+2178 2629 PD
+24 W
+2166 2610 PD
+24 W
+2151 2593 PD
+24 W
+2130 2574 PD
+24 W
+2107 2556 PD
+24 W
+2085 2537 PD
+24 W
+2069 2518 PD
+24 W
+2060 2501 PD
+24 W
+2046 2482 PD
+24 W
+2033 2464 PD
+24 W
+2020 2446 PD
+24 W
+2007 2428 PD
+24 W
+1989 2410 PD
+24 W
+1971 2392 PD
+24 W
+1957 2374 PD
+24 W
+1948 2355 PD
+24 W
+1938 2336 PD
+24 W
+1927 2318 PD
+24 W
+1912 2300 PD
+24 W
+1897 2282 PD
+24 W
+1883 2264 PD
+24 W
+1865 2246 PD
+24 W
+1865 2247 PD
+24 W
+1852 2227 PD
+24 W
+1847 2209 PD
+24 W
+1856 2192 PD
+24 W
+1867 2174 PD
+24 W
+1877 2156 PD
+24 W
+1891 2147 PD
+24 W
+1899 2136 PD
+24 W
+1915 2118 PD
+24 W
+1926 2101 PD
+24 W
+1924 2082 PD
+24 W
+1913 2064 PD
+24 W
+1903 2045 PD
+24 W
+1889 2027 PD
+24 W
+1875 2009 PD
+24 W
+1854 1990 PD
+24 W
+1839 1980 PD
+24 W
+1836 1972 PD
+24 W
+1822 1954 PD
+24 W
+1815 1937 PD
+24 W
+1812 1919 PD
+24 W
+1814 1900 PD
+24 W
+1822 1882 PD
+24 W
+1834 1863 PD
+24 W
+1839 1855 PD
+24 W
+1840 1845 PD
+24 W
+1855 1827 PD
+24 W
+1862 1809 PD
+24 W
+1851 1791 PD
+24 W
+1850 1775 PD
+24 W
+1849 1773 PD
+24 W
+1843 1754 PD
+24 W
+1838 1736 PD
+24 W
+1839 1719 PD
+24 W
+1840 1701 PD
+24 W
+1845 1682 PD
+24 W
+1853 1664 PD
+24 W
+1861 1647 PD
+24 W
+1867 1629 PD
+24 W
+1880 1611 PD
+24 W
+1901 1591 PD
+24 W
+1919 1572 PD
+24 W
+1923 1553 PD
+24 W
+1928 1535 PD
+24 W
+1930 1516 PD
+24 W
+1937 1498 PD
+24 W
+1948 1480 PD
+24 W
+1966 1461 PD
+24 W
+1991 1442 PD
+24 W
+2016 1424 PD
+24 W
+2040 1406 PD
+24 W
+2068 1386 PD
+24 W
+2095 1372 PD
+24 W
+2125 1356 PD
+24 W
+2153 1346 PD
+24 W
+2188 1337 PD
+24 W
+2216 1330 PD
+24 W
+2244 1323 PD
+24 W
+2271 1317 PD
+24 W
+2300 1317 PD
+24 W
+2328 1321 PD
+24 W
+2356 1327 PD
+24 W
+2386 1329 PD
+24 W
+2415 1326 PD
+24 W
+2443 1322 PD
+24 W
+2472 1321 PD
+24 W
+2502 1318 PD
+24 W
+2534 1314 PD
+24 W
+2562 1312 PD
+24 W
+2589 1308 PD
+24 W
+2619 1304 PD
+24 W
+2646 1300 PD
+24 W
+2677 1298 PD
+24 W
+2708 1297 PD
+24 W
+2738 1299 PD
+24 W
+2766 1300 PD
+24 W
+2794 1303 PD
+24 W
+2822 1305 PD
+24 W
+2852 1308 PD
+24 W
+2879 1306 PD
+24 W
+2908 1302 PD
+24 W
+2934 1298 PD
+24 W
+2961 1296 PD
+24 W
+2989 1296 PD
+24 W
+3018 1301 PD
+24 W
+3046 1307 PD
+24 W
+3073 1317 PD
+24 W
+3103 1325 PD
+24 W
+3132 1331 PD
+24 W
+3159 1338 PD
+24 W
+3188 1343 PD
+24 W
+3215 1345 PD
+24 W
+3242 1350 PD
+24 W
+3269 1352 PD
+24 W
+3298 1352 PD
+24 W
+3325 1345 PD
+24 W
+3353 1345 PD
+24 W
+3382 1349 PD
+24 W
+3410 1354 PD
+24 W
+3440 1360 PD
+24 W
+3468 1366 PD
+24 W
+3497 1370 PD
+24 W
+3525 1378 PD
+24 W
+3528 1381 PD
+24 W
+3532 1397 PD
+24 W
+3538 1415 PD
+24 W
+3541 1434 PD
+24 W
+3563 1452 PD
+24 W
+3563 1470 PD
+24 W
+3567 1487 PD
+24 W
+3594 1479 PD
+24 W
+3605 1497 PD
+24 W
+3617 1515 PD
+24 W
+3635 1534 PD
+24 W
+3662 1549 PD
+24 W
+3689 1563 PD
+24 W
+3716 1577 PD
+24 W
+3744 1586 PD
+24 W
+3771 1603 PD
+24 W
+3787 1622 PD
+24 W
+3782 1640 PD
+24 W
+3788 1659 PD
+24 W
+3815 1673 PD
+24 W
+3836 1692 PD
+24 W
+3859 1709 PD
+24 W
+3887 1722 PD
+24 W
+3916 1733 PD
+24 W
+3944 1739 PD
+24 W
+3967 1758 PD
+24 W
+3972 1777 PD
+24 W
+3977 1796 PD
+24 W
+4006 1812 PD
+24 W
+4034 1828 PD
+24 W
+4046 1846 PD
+24 W
+4071 1864 PD
+24 W
+4078 1882 PD
+24 W
+4078 1902 PD
+24 W
+4098 1919 PD
+24 W
+4118 1937 PD
+24 W
+4118 1955 PD
+24 W
+4109 1973 PD
+24 W
+4099 1992 PD
+24 W
+4090 2009 PD
+24 W
+4085 2027 PD
+24 W
+4084 2046 PD
+24 W
+4088 2065 PD
+24 W
+4100 2083 PD
+24 W
+4127 2098 PD
+24 W
+4154 2103 PD
+24 W
+4182 2090 PD
+24 W
+4207 2072 PD
+24 W
+4235 2053 PD
+24 W
+4262 2051 PD
+24 W
+4290 2057 PD
+24 W
+4318 2065 PD
+24 W
+4345 2070 PD
+24 W
+4372 2079 PD
+24 W
+4383 2097 PD
+24 W
+4377 2117 PD
+24 W
+4366 2136 PD
+24 W
+4341 2154 PD
+24 W
+4318 2173 PD
+24 W
+4312 2191 PD
+24 W
+4335 2208 PD
+24 W
+4365 2216 PD
+24 W
+4394 2220 PD
+24 W
+4421 2225 PD
+24 W
+4449 2228 PD
+24 W
+4476 2238 PD
+24 W
+4496 2255 PD
+24 W
+4526 2262 PD
+24 W
+4553 2261 PD
+24 W
+4580 2262 PD
+24 W
+4607 2280 PD
+24 W
+4613 2298 PD
+24 W
+4618 2317 PD
+24 W
+4617 2336 PD
+24 W
+4624 2354 PD
+24 W
+4652 2365 PD
+24 W
+4680 2361 PD
+24 W
+4708 2379 PD
+24 W
+4736 2385 PD
+24 W
+4747 2404 PD
+24 W
+4775 2408 PD
+24 W
+4778 2427 PD
+24 W
+4771 2445 PD
+24 W
+4761 2463 PD
+24 W
+4755 2482 PD
+24 W
+4782 2497 PD
+24 W
+4785 2515 PD
+24 W
+4786 2533 PD
+24 W
+4785 2552 PD
+24 W
+4807 2571 PD
+24 W
+4812 2590 PD
+24 W
+4822 2609 PD
+24 W
+4830 2628 PD
+24 W
+4847 2646 PD
+24 W
+4857 2664 PD
+24 W
+4870 2683 PD
+24 W
+4883 2701 PD
+24 W
+4897 2720 PD
+24 W
+4907 2738 PD
+24 W
+4931 2756 PD
+24 W
+4957 2775 PD
+24 W
+4972 2792 PD
+24 W
+4999 2803 PD
+24 W
+5026 2811 PD
+24 W
+5054 2816 PD
+24 W
+5082 2822 PD
+24 W
+5095 2841 PD
+24 W
+5112 2859 PD
+24 W
+5140 2866 PD
+24 W
+5170 2873 PD
+24 W
+5198 2876 PD
+24 W
+5227 2874 PD
+24 W
+5255 2881 PD
+24 W
+5275 2899 PD
+24 W
+5295 2917 PD
+24 W
+5305 2935 PD
+24 W
+5324 2952 PD
+24 W
+5352 2961 PD
+24 W
+5368 2980 PD
+24 W
+5382 2998 PD
+24 W
+5403 3017 PD
+24 W
+5432 3035 PD
+24 W
+5460 3050 PD
+24 W
+5487 3062 PD
+24 W
+5508 3081 PD
+24 W
+5526 3099 PD
+24 W
+5540 3117 PD
+24 W
+5551 3136 PD
+24 W
+5560 3156 PD
+24 W
+5569 3174 PD
+24 W
+5576 3194 PD
+24 W
+5582 3213 PD
+24 W
+5586 3233 PD
+24 W
+5591 3250 PD
+24 W
+5597 3270 PD
+24 W
+5603 3288 PD
+24 W
+5607 3307 PD
+24 W
+5612 3326 PD
+24 W
+5620 3345 PD
+24 W
+5629 3364 PD
+24 W
+5639 3383 PD
+24 W
+5647 3401 PD
+24 W
+5656 3420 PD
+24 W
+5667 3439 PD
+24 W
+5681 3458 PD
+24 W
+5699 3477 PD
+24 W
+5726 3496 PD
+24 W
+5756 3514 PD
+24 W
+5783 3528 PD
+24 W
+5814 3543 PD
+24 W
+5842 3554 PD
+24 W
+5870 3568 PD
+24 W
+5898 3583 PD
+24 W
+5926 3600 PD
+24 W
+5954 3610 PD
+24 W
+5982 3618 PD
+24 W
+6010 3629 PD
+24 W
+6029 3647 PD
+24 W
+6039 3666 PD
+24 W
+6067 3683 PD
+24 W
+6077 3701 PD
+24 W
+6105 3716 PD
+24 W
+6119 3734 PD
+24 W
+6119 3753 PD
+24 W
+6130 3771 PD
+24 W
+6158 3784 PD
+24 W
+6171 3802 PD
+24 W
+6169 3820 PD
+24 W
+6176 3839 PD
+24 W
+6187 3857 PD
+24 W
+6215 3866 PD
+24 W
+6235 3884 PD
+24 W
+6239 3902 PD
+24 W
+6246 3921 PD
+24 W
+6251 3939 PD
+24 W
+3172 4605 PD
+24 W
+3151 4587 PD
+24 W
+3122 4569 PD
+24 W
+3096 4555 PD
+24 W
+3069 4541 PD
+24 W
+3041 4528 PD
+24 W
+3014 4514 PD
+24 W
+2987 4501 PD
+24 W
+2960 4484 PD
+24 W
+2957 4482 PD
+24 W
+2933 4470 PD
+24 W
+2906 4457 PD
+24 W
+2878 4456 PD
+24 W
+2850 4459 PD
+24 W
+2822 4463 PD
+24 W
+2795 4464 PD
+24 W
+2768 4466 PD
+24 W
+2739 4463 PD
+24 W
+2712 4454 PD
+24 W
+2685 4441 PD
+24 W
+2657 4423 PD
+24 W
+2628 4407 PD
+24 W
+2601 4390 PD
+24 W
+2575 4372 PD
+24 W
+2549 4354 PD
+24 W
+2521 4335 PD
+24 W
+2494 4316 PD
+24 W
+2471 4298 PD
+24 W
+2454 4280 PD
+24 W
+2437 4261 PD
+24 W
+2419 4243 PD
+24 W
+2404 4225 PD
+24 W
+2386 4207 PD
+24 W
+2369 4188 PD
+24 W
+2355 4170 PD
+24 W
+2346 4152 PD
+24 W
+2339 4133 PD
+24 W
+2332 4116 PD
+24 W
+2329 4096 PD
+24 W
+2340 4077 PD
+24 W
+2349 4070 PD
+24 W
+2352 4059 PD
+24 W
+2362 4039 PD
+24 W
+2376 4021 PD
+24 W
+2387 4003 PD
+24 W
+2395 3985 PD
+24 W
+2397 3965 PD
+24 W
+2412 3947 PD
+24 W
+2439 3930 PD
+24 W
+2456 3911 PD
+24 W
+2476 3893 PD
+24 W
+2500 3873 PD
+24 W
+2524 3855 PD
+24 W
+2553 3836 PD
+24 W
+2582 3822 PD
+24 W
+2612 3811 PD
+24 W
+2641 3800 PD
+24 W
+2671 3790 PD
+24 W
+2697 3779 PD
+24 W
+2724 3768 PD
+24 W
+2753 3754 PD
+24 W
+2780 3741 PD
+24 W
+2807 3721 PD
+24 W
+2820 3702 PD
+24 W
+2824 3684 PD
+24 W
+2818 3665 PD
+24 W
+2802 3647 PD
+24 W
+2778 3628 PD
+24 W
+2763 3611 PD
+24 W
+2757 3592 PD
+24 W
+2759 3574 PD
+24 W
+2751 3555 PD
+24 W
+2728 3537 PD
+24 W
+2715 3518 PD
+24 W
+2702 3499 PD
+24 W
+2685 3481 PD
+24 W
+2665 3464 PD
+24 W
+2644 3445 PD
+24 W
+2620 3426 PD
+24 W
+2597 3407 PD
+24 W
+2569 3388 PD
+24 W
+2542 3374 PD
+24 W
+2515 3355 PD
+24 W
+2493 3337 PD
+24 W
+2473 3318 PD
+24 W
+2455 3298 PD
+24 W
+2437 3279 PD
+24 W
+2415 3261 PD
+24 W
+2387 3246 PD
+24 W
+2371 3228 PD
+24 W
+2360 3208 PD
+24 W
+2343 3190 PD
+24 W
+2331 3171 PD
+24 W
+2326 3152 PD
+24 W
+2324 3134 PD
+24 W
+2328 3115 PD
+24 W
+2350 3097 PD
+24 W
+2346 3079 PD
+24 W
+2362 3060 PD
+24 W
+2362 3042 PD
+24 W
+2348 3024 PD
+24 W
+2354 3006 PD
+24 W
+2377 2987 PD
+24 W
+2393 2970 PD
+24 W
+2420 2959 PD
+24 W
+2427 2941 PD
+24 W
+2413 2924 PD
+24 W
+2384 2918 PD
+24 W
+2355 2914 PD
+24 W
+2344 2896 PD
+24 W
+2337 2878 PD
+24 W
+2314 2860 PD
+24 W
+2305 2843 PD
+24 W
+2293 2824 PD
+24 W
+2275 2806 PD
+24 W
+2247 2787 PD
+24 W
+2223 2769 PD
+24 W
+2202 2751 PD
+24 W
+2180 2733 PD
+24 W
+2160 2715 PD
+24 W
+2134 2697 PD
+24 W
+2113 2678 PD
+24 W
+2108 2660 PD
+24 W
+2105 2642 PD
+24 W
+2096 2624 PD
+24 W
+2069 2608 PD
+24 W
+2042 2595 PD
+24 W
+2013 2584 PD
+24 W
+1990 2567 PD
+24 W
+1981 2548 PD
+24 W
+1978 2529 PD
+24 W
+1973 2511 PD
+24 W
+1963 2494 PD
+24 W
+1946 2476 PD
+24 W
+1931 2458 PD
+24 W
+1921 2439 PD
+24 W
+1910 2421 PD
+24 W
+1900 2403 PD
+24 W
+1888 2385 PD
+24 W
+1873 2368 PD
+24 W
+1855 2350 PD
+24 W
+1834 2332 PD
+24 W
+1816 2313 PD
+24 W
+1798 2295 PD
+24 W
+1776 2277 PD
+24 W
+1755 2259 PD
+24 W
+1741 2241 PD
+24 W
+1731 2223 PD
+24 W
+1730 2205 PD
+24 W
+1735 2187 PD
+24 W
+1741 2169 PD
+24 W
+1750 2152 PD
+24 W
+1761 2134 PD
+24 W
+1776 2116 PD
+24 W
+1788 2098 PD
+24 W
+1797 2081 PD
+24 W
+1801 2063 PD
+24 W
+1800 2044 PD
+24 W
+1783 2026 PD
+24 W
+1755 2012 PD
+24 W
+1732 1999 PD
+24 W
+1726 1998 PD
+24 W
+1700 1982 PD
+24 W
+1689 1964 PD
+24 W
+1680 1945 PD
+24 W
+1676 1927 PD
+24 W
+1676 1909 PD
+24 W
+1675 1906 PD
+24 W
+1678 1891 PD
+24 W
+1685 1873 PD
+24 W
+1690 1855 PD
+24 W
+1693 1837 PD
+24 W
+1692 1819 PD
+24 W
+1697 1801 PD
+24 W
+1714 1783 PD
+24 W
+1714 1765 PD
+24 W
+1694 1747 PD
+24 W
+1688 1742 PD
+24 W
+1686 1729 PD
+24 W
+1680 1711 PD
+24 W
+1673 1693 PD
+24 W
+1663 1675 PD
+24 W
+1659 1656 PD
+24 W
+1658 1637 PD
+24 W
+1658 1619 PD
+24 W
+1664 1600 PD
+24 W
+1681 1582 PD
+24 W
+1701 1563 PD
+24 W
+1714 1546 PD
+24 W
+1728 1527 PD
+24 W
+1739 1509 PD
+24 W
+1750 1490 PD
+24 W
+1748 1482 PD
+24 W
+1755 1472 PD
+24 W
+1755 1454 PD
+24 W
+1759 1435 PD
+24 W
+1769 1417 PD
+24 W
+1781 1399 PD
+24 W
+1794 1381 PD
+24 W
+1797 1378 PD
+24 W
+1803 1360 PD
+24 W
+1804 1341 PD
+24 W
+1823 1324 PD
+24 W
+1847 1306 PD
+24 W
+1862 1288 PD
+24 W
+1881 1270 PD
+24 W
+1902 1251 PD
+24 W
+1928 1232 PD
+24 W
+1955 1213 PD
+24 W
+1978 1195 PD
+24 W
+2003 1177 PD
+24 W
+2030 1164 PD
+24 W
+2057 1155 PD
+24 W
+2084 1145 PD
+24 W
+2111 1137 PD
+24 W
+2142 1129 PD
+24 W
+2173 1124 PD
+24 W
+2202 1119 PD
+24 W
+2231 1116 PD
+24 W
+2261 1111 PD
+24 W
+2288 1106 PD
+24 W
+2317 1101 PD
+24 W
+2346 1098 PD
+24 W
+2375 1094 PD
+24 W
+2402 1091 PD
+24 W
+2429 1092 PD
+24 W
+2456 1107 PD
+24 W
+2477 1125 PD
+24 W
+2504 1131 PD
+24 W
+2530 1130 PD
+24 W
+2560 1128 PD
+24 W
+2588 1128 PD
+24 W
+2616 1135 PD
+24 W
+2643 1143 PD
+24 W
+2670 1147 PD
+24 W
+2698 1145 PD
+24 W
+2726 1144 PD
+24 W
+2754 1142 PD
+24 W
+2784 1140 PD
+24 W
+2811 1138 PD
+24 W
+2838 1137 PD
+24 W
+2868 1139 PD
+24 W
+2896 1143 PD
+24 W
+2925 1151 PD
+24 W
+2954 1155 PD
+24 W
+2983 1152 PD
+24 W
+3012 1145 PD
+24 W
+3038 1145 PD
+24 W
+3065 1151 PD
+24 W
+3094 1158 PD
+24 W
+3121 1166 PD
+24 W
+3149 1173 PD
+24 W
+3176 1181 PD
+24 W
+3204 1190 PD
+24 W
+3231 1197 PD
+24 W
+3259 1203 PD
+24 W
+3287 1208 PD
+24 W
+3316 1214 PD
+24 W
+3344 1221 PD
+24 W
+3373 1224 PD
+24 W
+3401 1228 PD
+24 W
+3429 1234 PD
+24 W
+3456 1238 PD
+24 W
+3484 1243 PD
+24 W
+3511 1249 PD
+24 W
+3539 1254 PD
+24 W
+3568 1260 PD
+24 W
+3596 1266 PD
+24 W
+3619 1281 PD
+24 W
+3607 1288 PD
+24 W
+3628 1306 PD
+24 W
+3634 1326 PD
+24 W
+3640 1344 PD
+24 W
+3667 1362 PD
+24 W
+3680 1381 PD
+24 W
+3704 1399 PD
+24 W
+3724 1418 PD
+24 W
+3745 1436 PD
+24 W
+3767 1454 PD
+24 W
+3791 1472 PD
+24 W
+3815 1489 PD
+24 W
+3843 1496 PD
+24 W
+3871 1504 PD
+24 W
+3894 1523 PD
+24 W
+3921 1535 PD
+24 W
+3948 1540 PD
+24 W
+3975 1552 PD
+24 W
+3999 1571 PD
+24 W
+4014 1589 PD
+24 W
+4033 1607 PD
+24 W
+4057 1625 PD
+24 W
+4071 1643 PD
+24 W
+4089 1661 PD
+24 W
+4106 1680 PD
+24 W
+4122 1699 PD
+24 W
+4139 1718 PD
+24 W
+4155 1735 PD
+24 W
+4168 1754 PD
+24 W
+4181 1772 PD
+24 W
+4194 1791 PD
+24 W
+4202 1810 PD
+24 W
+4205 1828 PD
+24 W
+4208 1846 PD
+24 W
+4214 1866 PD
+24 W
+4220 1885 PD
+24 W
+4232 1904 PD
+24 W
+4260 1917 PD
+24 W
+4287 1926 PD
+24 W
+4314 1940 PD
+24 W
+4333 1959 PD
+24 W
+4362 1977 PD
+24 W
+4389 1982 PD
+24 W
+4417 1985 PD
+24 W
+4445 1988 PD
+24 W
+4475 1993 PD
+24 W
+4503 2007 PD
+24 W
+4512 2025 PD
+24 W
+4518 2044 PD
+24 W
+4517 2064 PD
+24 W
+4513 2083 PD
+24 W
+4519 2101 PD
+24 W
+4535 2119 PD
+24 W
+4555 2138 PD
+24 W
+4581 2150 PD
+24 W
+4610 2155 PD
+24 W
+4634 2173 PD
+24 W
+4643 2191 PD
+24 W
+4657 2208 PD
+24 W
+4684 2221 PD
+24 W
+4713 2234 PD
+24 W
+4733 2253 PD
+24 W
+4737 2271 PD
+24 W
+4764 2280 PD
+24 W
+4779 2299 PD
+24 W
+4801 2317 PD
+24 W
+4812 2336 PD
+24 W
+4839 2348 PD
+24 W
+4866 2352 PD
+24 W
+4892 2354 PD
+24 W
+4919 2371 PD
+24 W
+4918 2391 PD
+24 W
+4927 2409 PD
+24 W
+4947 2427 PD
+24 W
+4976 2437 PD
+24 W
+5004 2447 PD
+24 W
+5027 2465 PD
+24 W
+5039 2484 PD
+24 W
+5049 2502 PD
+24 W
+5046 2520 PD
+24 W
+5032 2538 PD
+24 W
+5011 2558 PD
+24 W
+4987 2576 PD
+24 W
+4968 2595 PD
+24 W
+4953 2613 PD
+24 W
+4981 2626 PD
+24 W
+5008 2620 PD
+24 W
+5037 2606 PD
+24 W
+5065 2591 PD
+24 W
+5093 2584 PD
+24 W
+5120 2577 PD
+24 W
+5148 2574 PD
+24 W
+5159 2573 PD
+24 W
+5175 2575 PD
+24 W
+5202 2591 PD
+24 W
+5219 2610 PD
+24 W
+5232 2628 PD
+24 W
+5240 2646 PD
+24 W
+5242 2650 PD
+24 W
+5232 2666 PD
+24 W
+5223 2685 PD
+24 W
+5212 2705 PD
+24 W
+5203 2723 PD
+24 W
+5198 2741 PD
+24 W
+5193 2759 PD
+24 W
+5189 2777 PD
+24 W
+5193 2795 PD
+24 W
+5219 2807 PD
+24 W
+5247 2814 PD
+24 W
+5274 2819 PD
+24 W
+5302 2828 PD
+24 W
+5318 2847 PD
+24 W
+5335 2866 PD
+24 W
+5353 2885 PD
+24 W
+5375 2903 PD
+24 W
+5399 2921 PD
+24 W
+5427 2938 PD
+24 W
+5446 2958 PD
+24 W
+5465 2977 PD
+24 W
+5483 2996 PD
+24 W
+5507 3015 PD
+24 W
+5536 3032 PD
+24 W
+5565 3050 PD
+24 W
+5588 3069 PD
+24 W
+5604 3088 PD
+24 W
+5616 3106 PD
+24 W
+5620 3124 PD
+24 W
+5623 3142 PD
+24 W
+5629 3159 PD
+24 W
+5636 3178 PD
+24 W
+5643 3197 PD
+24 W
+5654 3216 PD
+24 W
+5665 3235 PD
+24 W
+5675 3254 PD
+24 W
+5683 3272 PD
+24 W
+5688 3291 PD
+24 W
+5694 3309 PD
+24 W
+5702 3327 PD
+24 W
+5710 3346 PD
+24 W
+5717 3363 PD
+24 W
+5724 3383 PD
+24 W
+5736 3403 PD
+24 W
+5748 3421 PD
+24 W
+5763 3439 PD
+24 W
+5786 3458 PD
+24 W
+5813 3471 PD
+24 W
+5841 3482 PD
+24 W
+5868 3501 PD
+24 W
+5893 3520 PD
+24 W
+5922 3531 PD
+24 W
+5949 3541 PD
+24 W
+5977 3550 PD
+24 W
+6005 3558 PD
+24 W
+6032 3570 PD
+24 W
+6061 3586 PD
+24 W
+6082 3604 PD
+24 W
+6094 3622 PD
+24 W
+6106 3641 PD
+24 W
+6133 3658 PD
+24 W
+6148 3676 PD
+24 W
+6176 3685 PD
+24 W
+6191 3703 PD
+24 W
+6190 3722 PD
+24 W
+6192 3741 PD
+24 W
+6220 3756 PD
+24 W
+3017 4609 PD
+24 W
+3016 4609 PD
+24 W
+2990 4596 PD
+24 W
+2962 4583 PD
+24 W
+2935 4574 PD
+24 W
+2908 4571 PD
+24 W
+2879 4566 PD
+24 W
+2852 4561 PD
+24 W
+2825 4556 PD
+24 W
+2799 4551 PD
+24 W
+2770 4546 PD
+24 W
+2743 4539 PD
+24 W
+2714 4532 PD
+24 W
+2685 4519 PD
+24 W
+2656 4503 PD
+24 W
+2628 4486 PD
+24 W
+2601 4470 PD
+24 W
+2574 4453 PD
+24 W
+2547 4437 PD
+24 W
+2522 4421 PD
+24 W
+2519 4421 PD
+24 W
+2491 4405 PD
+24 W
+2464 4390 PD
+24 W
+2435 4379 PD
+24 W
+2408 4361 PD
+24 W
+2389 4343 PD
+24 W
+2369 4324 PD
+24 W
+2345 4306 PD
+24 W
+2322 4287 PD
+24 W
+2305 4268 PD
+24 W
+2291 4250 PD
+24 W
+2279 4232 PD
+24 W
+2267 4215 PD
+24 W
+2248 4196 PD
+24 W
+2228 4177 PD
+24 W
+2204 4158 PD
+24 W
+2190 4139 PD
+24 W
+2179 4121 PD
+24 W
+2169 4103 PD
+24 W
+2159 4085 PD
+24 W
+2150 4067 PD
+24 W
+2145 4049 PD
+24 W
+2143 4031 PD
+24 W
+2146 4017 PD
+24 W
+2145 4013 PD
+24 W
+2143 3994 PD
+24 W
+2153 3975 PD
+24 W
+2172 3957 PD
+24 W
+2199 3941 PD
+24 W
+2226 3926 PD
+24 W
+2256 3908 PD
+24 W
+2285 3889 PD
+24 W
+2314 3873 PD
+24 W
+2344 3860 PD
+24 W
+2373 3847 PD
+24 W
+2400 3836 PD
+24 W
+2430 3823 PD
+24 W
+2458 3813 PD
+24 W
+2489 3796 PD
+24 W
+2516 3781 PD
+24 W
+2546 3768 PD
+24 W
+2575 3755 PD
+24 W
+2602 3744 PD
+24 W
+2629 3734 PD
+24 W
+2656 3724 PD
+24 W
+2684 3713 PD
+24 W
+2711 3701 PD
+24 W
+2714 3683 PD
+24 W
+2699 3664 PD
+24 W
+2670 3648 PD
+24 W
+2641 3629 PD
+24 W
+2624 3611 PD
+24 W
+2611 3591 PD
+24 W
+2601 3570 PD
+24 W
+2598 3550 PD
+24 W
+2599 3532 PD
+24 W
+2601 3511 PD
+24 W
+2595 3491 PD
+24 W
+2583 3472 PD
+24 W
+2563 3453 PD
+24 W
+2537 3435 PD
+24 W
+2510 3420 PD
+24 W
+2481 3407 PD
+24 W
+2452 3390 PD
+24 W
+2430 3371 PD
+24 W
+2409 3353 PD
+24 W
+2389 3336 PD
+24 W
+2369 3317 PD
+24 W
+2349 3297 PD
+24 W
+2329 3277 PD
+24 W
+2306 3258 PD
+24 W
+2285 3239 PD
+24 W
+2269 3220 PD
+24 W
+2253 3201 PD
+24 W
+2238 3183 PD
+24 W
+2224 3164 PD
+24 W
+2210 3144 PD
+24 W
+2196 3126 PD
+24 W
+2201 3105 PD
+24 W
+2210 3087 PD
+24 W
+2229 3069 PD
+24 W
+2249 3051 PD
+24 W
+2239 3033 PD
+24 W
+2225 3015 PD
+24 W
+2221 2996 PD
+24 W
+2225 2978 PD
+24 W
+2240 2959 PD
+24 W
+2262 2942 PD
+24 W
+2273 2922 PD
+24 W
+2262 2905 PD
+24 W
+2247 2885 PD
+24 W
+2235 2867 PD
+24 W
+2222 2848 PD
+24 W
+2206 2830 PD
+24 W
+2178 2812 PD
+24 W
+2151 2794 PD
+24 W
+2132 2776 PD
+24 W
+2111 2758 PD
+24 W
+2082 2742 PD
+24 W
+2064 2723 PD
+24 W
+2054 2704 PD
+24 W
+2047 2686 PD
+24 W
+2033 2668 PD
+24 W
+2006 2654 PD
+24 W
+1978 2640 PD
+24 W
+1950 2631 PD
+24 W
+1934 2627 PD
+24 W
+1922 2614 PD
+24 W
+1895 2603 PD
+24 W
+1876 2586 PD
+24 W
+1872 2567 PD
+24 W
+1872 2557 PD
+24 W
+1872 2550 PD
+24 W
+1865 2532 PD
+24 W
+1851 2514 PD
+24 W
+1847 2496 PD
+24 W
+1854 2478 PD
+24 W
+1858 2459 PD
+24 W
+1855 2442 PD
+24 W
+1845 2423 PD
+24 W
+1830 2405 PD
+24 W
+1815 2387 PD
+24 W
+1794 2369 PD
+24 W
+1768 2351 PD
+24 W
+1740 2332 PD
+24 W
+1717 2314 PD
+24 W
+1695 2296 PD
+24 W
+1676 2278 PD
+24 W
+1657 2260 PD
+24 W
+1640 2247 PD
+24 W
+1634 2241 PD
+24 W
+1614 2223 PD
+24 W
+1611 2204 PD
+24 W
+1613 2186 PD
+24 W
+1612 2168 PD
+24 W
+1607 2150 PD
+24 W
+1604 2133 PD
+24 W
+1601 2114 PD
+24 W
+1603 2095 PD
+24 W
+1608 2076 PD
+24 W
+1611 2061 PD
+24 W
+1611 2059 PD
+24 W
+1602 2041 PD
+24 W
+1589 2023 PD
+24 W
+1578 2005 PD
+24 W
+1577 2003 PD
+24 W
+1568 1988 PD
+24 W
+1558 1969 PD
+24 W
+1549 1950 PD
+24 W
+1540 1931 PD
+24 W
+1538 1913 PD
+24 W
+1538 1895 PD
+24 W
+1541 1876 PD
+24 W
+1543 1858 PD
+24 W
+1543 1839 PD
+24 W
+1541 1821 PD
+24 W
+1530 1803 PD
+24 W
+1513 1784 PD
+24 W
+1502 1765 PD
+24 W
+1493 1746 PD
+24 W
+1495 1727 PD
+24 W
+1500 1709 PD
+24 W
+1503 1691 PD
+24 W
+1504 1674 PD
+24 W
+1497 1655 PD
+24 W
+1492 1635 PD
+24 W
+1487 1617 PD
+24 W
+1485 1599 PD
+24 W
+1491 1580 PD
+24 W
+1506 1563 PD
+24 W
+1534 1547 PD
+24 W
+1562 1533 PD
+24 W
+1586 1515 PD
+24 W
+1603 1497 PD
+24 W
+1624 1479 PD
+24 W
+1635 1461 PD
+24 W
+1634 1461 PD
+24 W
+1647 1443 PD
+24 W
+1668 1425 PD
+24 W
+1665 1407 PD
+24 W
+1661 1389 PD
+24 W
+1662 1371 PD
+24 W
+1664 1352 PD
+24 W
+1664 1334 PD
+24 W
+1663 1316 PD
+24 W
+1667 1299 PD
+24 W
+1676 1281 PD
+24 W
+1681 1275 PD
+24 W
+1688 1262 PD
+24 W
+1701 1245 PD
+24 W
+1722 1226 PD
+24 W
+1740 1208 PD
+24 W
+1758 1189 PD
+24 W
+1773 1171 PD
+24 W
+1792 1153 PD
+24 W
+1809 1136 PD
+24 W
+1828 1117 PD
+24 W
+1852 1100 PD
+24 W
+1879 1088 PD
+24 W
+1906 1080 PD
+24 W
+1933 1070 PD
+24 W
+1960 1061 PD
+24 W
+1989 1049 PD
+24 W
+2018 1037 PD
+24 W
+2048 1022 PD
+24 W
+2074 1008 PD
+24 W
+2103 995 PD
+24 W
+2130 987 PD
+24 W
+2158 982 PD
+24 W
+2185 977 PD
+24 W
+2214 970 PD
+24 W
+2242 962 PD
+24 W
+2272 954 PD
+24 W
+2302 945 PD
+24 W
+2330 942 PD
+24 W
+2358 937 PD
+24 W
+2386 934 PD
+24 W
+2414 932 PD
+24 W
+2442 935 PD
+24 W
+2470 938 PD
+24 W
+2499 938 PD
+24 W
+2526 939 PD
+24 W
+2554 939 PD
+24 W
+2582 943 PD
+24 W
+2610 950 PD
+24 W
+2638 955 PD
+24 W
+2666 959 PD
+24 W
+2695 960 PD
+24 W
+2723 959 PD
+24 W
+2753 959 PD
+24 W
+2782 959 PD
+24 W
+2811 960 PD
+24 W
+2839 962 PD
+24 W
+2867 962 PD
+24 W
+2894 963 PD
+24 W
+2921 964 PD
+24 W
+2951 966 PD
+24 W
+2978 972 PD
+24 W
+3007 980 PD
+24 W
+3035 983 PD
+24 W
+3064 988 PD
+24 W
+3093 995 PD
+24 W
+3122 1003 PD
+24 W
+3152 1011 PD
+24 W
+3183 1020 PD
+24 W
+3210 1030 PD
+24 W
+3239 1038 PD
+24 W
+3269 1048 PD
+24 W
+3297 1056 PD
+24 W
+3325 1063 PD
+24 W
+3352 1070 PD
+24 W
+3380 1077 PD
+24 W
+3409 1086 PD
+24 W
+3438 1102 PD
+24 W
+3466 1115 PD
+24 W
+3496 1126 PD
+24 W
+3526 1137 PD
+24 W
+3556 1144 PD
+24 W
+3583 1149 PD
+24 W
+3611 1157 PD
+24 W
+3638 1163 PD
+24 W
+3665 1169 PD
+24 W
+3693 1176 PD
+24 W
+3720 1182 PD
+24 W
+3748 1188 PD
+24 W
+3759 1198 PD
+24 W
+3776 1206 PD
+24 W
+3804 1222 PD
+24 W
+3816 1240 PD
+24 W
+3831 1259 PD
+24 W
+3848 1277 PD
+24 W
+3866 1295 PD
+24 W
+3895 1312 PD
+24 W
+3924 1330 PD
+24 W
+3951 1344 PD
+24 W
+3963 1362 PD
+24 W
+3989 1372 PD
+24 W
+4018 1389 PD
+24 W
+4047 1392 PD
+24 W
+4075 1391 PD
+24 W
+4102 1394 PD
+24 W
+4131 1397 PD
+24 W
+4158 1405 PD
+24 W
+4177 1423 PD
+24 W
+4191 1442 PD
+24 W
+4205 1461 PD
+24 W
+4207 1481 PD
+24 W
+4201 1499 PD
+24 W
+4198 1517 PD
+24 W
+4207 1535 PD
+24 W
+4223 1553 PD
+24 W
+4233 1572 PD
+24 W
+4247 1590 PD
+24 W
+4258 1609 PD
+24 W
+4258 1628 PD
+24 W
+4258 1645 PD
+24 W
+4261 1664 PD
+24 W
+4270 1683 PD
+24 W
+4278 1701 PD
+24 W
+4282 1720 PD
+24 W
+4284 1738 PD
+24 W
+4292 1755 PD
+24 W
+4301 1775 PD
+24 W
+4301 1793 PD
+24 W
+4304 1811 PD
+24 W
+4307 1829 PD
+24 W
+4330 1846 PD
+24 W
+4357 1858 PD
+24 W
+4380 1876 PD
+24 W
+4391 1894 PD
+24 W
+4413 1912 PD
+24 W
+4440 1915 PD
+24 W
+4467 1909 PD
+24 W
+4494 1909 PD
+24 W
+4522 1910 PD
+24 W
+4549 1922 PD
+24 W
+4577 1940 PD
+24 W
+4591 1958 PD
+24 W
+4600 1977 PD
+24 W
+4608 1995 PD
+24 W
+4616 2014 PD
+24 W
+4621 2033 PD
+24 W
+4623 2051 PD
+24 W
+4627 2070 PD
+24 W
+4635 2089 PD
+24 W
+4648 2107 PD
+24 W
+4662 2125 PD
+24 W
+4674 2143 PD
+24 W
+4689 2161 PD
+24 W
+4717 2173 PD
+24 W
+4745 2180 PD
+24 W
+4772 2183 PD
+24 W
+4800 2187 PD
+24 W
+4827 2204 PD
+24 W
+4851 2222 PD
+24 W
+4877 2228 PD
+24 W
+4905 2239 PD
+24 W
+4932 2255 PD
+24 W
+4961 2265 PD
+24 W
+4990 2278 PD
+24 W
+5014 2296 PD
+24 W
+5027 2314 PD
+24 W
+5040 2332 PD
+24 W
+5056 2350 PD
+24 W
+5075 2369 PD
+24 W
+5099 2386 PD
+24 W
+5125 2404 PD
+24 W
+5146 2422 PD
+24 W
+5174 2430 PD
+24 W
+5202 2433 PD
+24 W
+5229 2439 PD
+24 W
+5256 2456 PD
+24 W
+5242 2470 PD
+24 W
+5248 2474 PD
+24 W
+5271 2493 PD
+24 W
+5283 2513 PD
+24 W
+5299 2531 PD
+24 W
+5316 2550 PD
+24 W
+5326 2558 PD
+24 W
+5329 2568 PD
+24 W
+5329 2586 PD
+24 W
+5320 2605 PD
+24 W
+5316 2624 PD
+24 W
+5312 2643 PD
+24 W
+5303 2662 PD
+24 W
+5301 2680 PD
+24 W
+5300 2699 PD
+24 W
+5302 2717 PD
+24 W
+5307 2735 PD
+24 W
+5315 2754 PD
+24 W
+5325 2774 PD
+24 W
+5341 2794 PD
+24 W
+5363 2812 PD
+24 W
+5386 2831 PD
+24 W
+5413 2848 PD
+24 W
+5436 2866 PD
+24 W
+5456 2885 PD
+24 W
+5469 2903 PD
+24 W
+5481 2920 PD
+24 W
+5493 2938 PD
+24 W
+5514 2956 PD
+24 W
+5543 2965 PD
+24 W
+5570 2977 PD
+24 W
+5593 2995 PD
+24 W
+5615 3014 PD
+24 W
+5633 3034 PD
+24 W
+5645 3053 PD
+24 W
+5655 3071 PD
+24 W
+5663 3090 PD
+24 W
+5679 3109 PD
+24 W
+5691 3127 PD
+24 W
+5695 3147 PD
+24 W
+5697 3165 PD
+24 W
+5706 3185 PD
+24 W
+5716 3205 PD
+24 W
+5724 3223 PD
+24 W
+5731 3241 PD
+24 W
+5738 3259 PD
+24 W
+5755 3277 PD
+24 W
+5771 3295 PD
+24 W
+5774 3314 PD
+24 W
+5780 3334 PD
+24 W
+5790 3352 PD
+24 W
+5797 3369 PD
+24 W
+5807 3387 PD
+24 W
+5822 3407 PD
+24 W
+5848 3425 PD
+24 W
+5876 3441 PD
+24 W
+5905 3459 PD
+24 W
+5927 3478 PD
+24 W
+5955 3491 PD
+24 W
+5984 3494 PD
+24 W
+6014 3501 PD
+24 W
+6042 3511 PD
+24 W
+6069 3524 PD
+24 W
+6090 3542 PD
+24 W
+6113 3561 PD
+24 W
+6129 3579 PD
+24 W
+6157 3597 PD
+24 W
+6182 3615 PD
+24 W
+6187 3633 PD
+24 W
+6207 3650 PD
+24 W
+6236 3659 PD
+24 W
+2842 4615 PD
+24 W
+2841 4615 PD
+24 W
+2815 4606 PD
+24 W
+2786 4600 PD
+24 W
+2757 4598 PD
+24 W
+2730 4590 PD
+24 W
+2702 4581 PD
+24 W
+2674 4572 PD
+24 W
+2647 4562 PD
+24 W
+2620 4551 PD
+24 W
+2591 4535 PD
+24 W
+2565 4516 PD
+24 W
+2542 4497 PD
+24 W
+2515 4480 PD
+24 W
+2488 4466 PD
+24 W
+2459 4454 PD
+24 W
+2432 4442 PD
+24 W
+2405 4428 PD
+24 W
+2378 4412 PD
+24 W
+2354 4394 PD
+24 W
+2329 4376 PD
+24 W
+2301 4359 PD
+24 W
+2298 4357 PD
+24 W
+2272 4347 PD
+24 W
+2245 4328 PD
+24 W
+2221 4310 PD
+24 W
+2198 4292 PD
+24 W
+2174 4273 PD
+24 W
+2157 4255 PD
+24 W
+2141 4236 PD
+24 W
+2122 4218 PD
+24 W
+2105 4198 PD
+24 W
+2093 4180 PD
+24 W
+2078 4161 PD
+24 W
+2065 4142 PD
+24 W
+2056 4123 PD
+24 W
+2048 4105 PD
+24 W
+2042 4087 PD
+24 W
+2039 4069 PD
+24 W
+2037 4051 PD
+24 W
+2037 4033 PD
+24 W
+2037 4015 PD
+24 W
+2053 3997 PD
+24 W
+2081 3978 PD
+24 W
+2102 3959 PD
+24 W
+2120 3940 PD
+24 W
+2145 3921 PD
+24 W
+2172 3902 PD
+24 W
+2199 3888 PD
+24 W
+2226 3873 PD
+24 W
+2254 3859 PD
+24 W
+2282 3841 PD
+24 W
+2309 3824 PD
+24 W
+2339 3807 PD
+24 W
+2367 3793 PD
+24 W
+2394 3781 PD
+24 W
+2425 3767 PD
+24 W
+2454 3751 PD
+24 W
+2481 3736 PD
+24 W
+2508 3721 PD
+24 W
+2537 3706 PD
+24 W
+2565 3694 PD
+24 W
+2586 3676 PD
+24 W
+2580 3658 PD
+24 W
+2563 3640 PD
+24 W
+2544 3621 PD
+24 W
+2530 3602 PD
+24 W
+2526 3583 PD
+24 W
+2519 3565 PD
+24 W
+2508 3546 PD
+24 W
+2496 3526 PD
+24 W
+2479 3507 PD
+24 W
+2462 3490 PD
+24 W
+2445 3472 PD
+24 W
+2427 3452 PD
+24 W
+2405 3433 PD
+24 W
+2379 3416 PD
+24 W
+2354 3397 PD
+24 W
+2332 3378 PD
+24 W
+2314 3360 PD
+24 W
+2293 3341 PD
+24 W
+2278 3324 PD
+24 W
+2249 3305 PD
+24 W
+2224 3286 PD
+24 W
+2216 3268 PD
+24 W
+2210 3248 PD
+24 W
+2199 3230 PD
+24 W
+2178 3211 PD
+24 W
+2152 3192 PD
+24 W
+2131 3173 PD
+24 W
+2116 3154 PD
+24 W
+2103 3136 PD
+24 W
+2096 3117 PD
+24 W
+2092 3097 PD
+24 W
+2087 3080 PD
+24 W
+2084 3061 PD
+24 W
+2081 3041 PD
+24 W
+2079 3023 PD
+24 W
+2077 3004 PD
+24 W
+2074 2984 PD
+24 W
+2071 2965 PD
+24 W
+2066 2947 PD
+24 W
+2062 2928 PD
+24 W
+2066 2908 PD
+24 W
+2073 2890 PD
+24 W
+2092 2871 PD
+24 W
+2120 2854 PD
+24 W
+2143 2836 PD
+24 W
+2115 2820 PD
+24 W
+2094 2807 PD
+24 W
+2088 2807 PD
+24 W
+2060 2788 PD
+24 W
+2038 2770 PD
+24 W
+2013 2751 PD
+24 W
+1991 2734 PD
+24 W
+1964 2717 PD
+24 W
+1936 2712 PD
+24 W
+1908 2699 PD
+24 W
+1881 2691 PD
+24 W
+1854 2681 PD
+24 W
+1826 2670 PD
+24 W
+1798 2656 PD
+24 W
+1774 2638 PD
+24 W
+1761 2620 PD
+24 W
+1752 2602 PD
+24 W
+1751 2584 PD
+24 W
+1757 2567 PD
+24 W
+1761 2557 PD
+24 W
+1766 2548 PD
+24 W
+1769 2530 PD
+24 W
+1758 2512 PD
+24 W
+1776 2495 PD
+24 W
+1790 2477 PD
+24 W
+1788 2459 PD
+24 W
+1773 2440 PD
+24 W
+1761 2421 PD
+24 W
+1741 2403 PD
+24 W
+1714 2390 PD
+24 W
+1699 2372 PD
+24 W
+1688 2354 PD
+24 W
+1669 2337 PD
+24 W
+1642 2324 PD
+24 W
+1616 2306 PD
+24 W
+1589 2289 PD
+24 W
+1562 2274 PD
+24 W
+1545 2256 PD
+24 W
+1536 2238 PD
+24 W
+1535 2219 PD
+24 W
+1538 2200 PD
+24 W
+1538 2182 PD
+24 W
+1535 2163 PD
+24 W
+1524 2144 PD
+24 W
+1510 2127 PD
+24 W
+1508 2123 PD
+24 W
+1496 2108 PD
+24 W
+1486 2090 PD
+24 W
+1477 2072 PD
+24 W
+1470 2055 PD
+24 W
+1465 2036 PD
+24 W
+1460 2017 PD
+24 W
+1455 1999 PD
+24 W
+1445 1979 PD
+24 W
+1435 1961 PD
+24 W
+1425 1943 PD
+24 W
+1414 1925 PD
+24 W
+1403 1907 PD
+24 W
+1393 1888 PD
+24 W
+1382 1870 PD
+24 W
+1369 1850 PD
+24 W
+1356 1832 PD
+24 W
+1343 1812 PD
+24 W
+1337 1793 PD
+24 W
+1333 1775 PD
+24 W
+1329 1756 PD
+24 W
+1326 1737 PD
+24 W
+1322 1719 PD
+24 W
+1318 1699 PD
+24 W
+1316 1680 PD
+24 W
+1314 1662 PD
+24 W
+1311 1644 PD
+24 W
+1311 1623 PD
+24 W
+1311 1603 PD
+24 W
+1312 1584 PD
+24 W
+1311 1566 PD
+24 W
+1312 1548 PD
+24 W
+1319 1531 PD
+24 W
+1345 1518 PD
+24 W
+1373 1510 PD
+24 W
+1401 1508 PD
+24 W
+1428 1507 PD
+24 W
+1456 1505 PD
+24 W
+1470 1501 PD
+24 W
+1484 1494 PD
+24 W
+1512 1483 PD
+24 W
+1538 1464 PD
+24 W
+1553 1446 PD
+24 W
+1547 1428 PD
+24 W
+1531 1410 PD
+24 W
+1527 1392 PD
+24 W
+1526 1392 PD
+24 W
+1513 1373 PD
+24 W
+1503 1355 PD
+24 W
+1496 1337 PD
+24 W
+1493 1317 PD
+24 W
+1493 1299 PD
+24 W
+1498 1280 PD
+24 W
+1511 1261 PD
+24 W
+1531 1242 PD
+24 W
+1552 1223 PD
+24 W
+1571 1204 PD
+24 W
+1582 1186 PD
+24 W
+1585 1168 PD
+24 W
+1596 1150 PD
+24 W
+1624 1132 PD
+24 W
+1631 1114 PD
+24 W
+1639 1096 PD
+24 W
+1649 1078 PD
+24 W
+1660 1059 PD
+24 W
+1671 1039 PD
+24 W
+1680 1021 PD
+24 W
+1698 1003 PD
+24 W
+1722 985 PD
+24 W
+1750 971 PD
+24 W
+1776 959 PD
+24 W
+1804 947 PD
+24 W
+1830 934 PD
+24 W
+1857 923 PD
+24 W
+1884 911 PD
+24 W
+1912 900 PD
+24 W
+1938 891 PD
+24 W
+1966 885 PD
+24 W
+1994 879 PD
+24 W
+2024 872 PD
+24 W
+2052 866 PD
+24 W
+2080 861 PD
+24 W
+2107 856 PD
+24 W
+2134 850 PD
+24 W
+2162 845 PD
+24 W
+2189 841 PD
+24 W
+2216 832 PD
+24 W
+2247 820 PD
+24 W
+2276 809 PD
+24 W
+2305 796 PD
+24 W
+2333 782 PD
+24 W
+2360 768 PD
+24 W
+2389 755 PD
+24 W
+2417 747 PD
+24 W
+2446 744 PD
+24 W
+2474 744 PD
+24 W
+2502 747 PD
+24 W
+2530 752 PD
+24 W
+2559 753 PD
+24 W
+2588 752 PD
+24 W
+2617 749 PD
+24 W
+2644 747 PD
+24 W
+2674 749 PD
+24 W
+2703 754 PD
+24 W
+2731 759 PD
+24 W
+2759 765 PD
+24 W
+2788 768 PD
+24 W
+2818 772 PD
+24 W
+2849 774 PD
+24 W
+2879 774 PD
+24 W
+2907 773 PD
+24 W
+2936 774 PD
+24 W
+2964 778 PD
+24 W
+2993 784 PD
+24 W
+3022 793 PD
+24 W
+3050 806 PD
+24 W
+3079 817 PD
+24 W
+3107 827 PD
+24 W
+3135 837 PD
+24 W
+3164 848 PD
+24 W
+3191 856 PD
+24 W
+3219 862 PD
+24 W
+3245 865 PD
+24 W
+3273 867 PD
+24 W
+3301 871 PD
+24 W
+3327 878 PD
+24 W
+3355 896 PD
+24 W
+3381 909 PD
+24 W
+3410 922 PD
+24 W
+3438 937 PD
+24 W
+3467 951 PD
+24 W
+3497 963 PD
+24 W
+3525 975 PD
+24 W
+3554 987 PD
+24 W
+3583 1000 PD
+24 W
+3610 1013 PD
+24 W
+3639 1028 PD
+24 W
+3668 1042 PD
+24 W
+3698 1052 PD
+24 W
+3727 1057 PD
+24 W
+3756 1059 PD
+24 W
+3783 1064 PD
+24 W
+3810 1071 PD
+24 W
+3837 1078 PD
+24 W
+3864 1086 PD
+24 W
+3890 1096 PD
+24 W
+3891 1097 PD
+24 W
+3918 1107 PD
+24 W
+3946 1123 PD
+24 W
+3961 1142 PD
+24 W
+3976 1160 PD
+24 W
+3988 1178 PD
+24 W
+3999 1197 PD
+24 W
+4006 1215 PD
+24 W
+4013 1234 PD
+24 W
+4022 1251 PD
+24 W
+4041 1271 PD
+24 W
+4070 1279 PD
+24 W
+4096 1292 PD
+24 W
+4126 1303 PD
+24 W
+4156 1317 PD
+24 W
+4185 1330 PD
+24 W
+4212 1347 PD
+24 W
+4240 1364 PD
+24 W
+4267 1382 PD
+24 W
+4293 1399 PD
+24 W
+4311 1419 PD
+24 W
+4313 1438 PD
+24 W
+4312 1457 PD
+24 W
+4313 1475 PD
+24 W
+4313 1494 PD
+24 W
+4331 1512 PD
+24 W
+4351 1530 PD
+24 W
+4356 1548 PD
+24 W
+4358 1568 PD
+24 W
+4363 1588 PD
+24 W
+4366 1607 PD
+24 W
+4366 1625 PD
+24 W
+4365 1645 PD
+24 W
+4365 1663 PD
+24 W
+4366 1681 PD
+24 W
+4373 1699 PD
+24 W
+4401 1713 PD
+24 W
+4429 1714 PD
+24 W
+4458 1726 PD
+24 W
+4485 1744 PD
+24 W
+4510 1763 PD
+24 W
+4530 1781 PD
+24 W
+4548 1800 PD
+24 W
+4569 1817 PD
+24 W
+4596 1825 PD
+24 W
+4624 1832 PD
+24 W
+4652 1849 PD
+24 W
+4664 1866 PD
+24 W
+4668 1885 PD
+24 W
+4674 1904 PD
+24 W
+4678 1923 PD
+24 W
+4678 1940 PD
+24 W
+4680 1960 PD
+24 W
+4686 1978 PD
+24 W
+4692 1996 PD
+24 W
+4698 2016 PD
+24 W
+4702 2035 PD
+24 W
+4708 2054 PD
+24 W
+4716 2073 PD
+24 W
+4726 2090 PD
+24 W
+4736 2109 PD
+24 W
+4754 2127 PD
+24 W
+4782 2141 PD
+24 W
+4809 2144 PD
+24 W
+4838 2140 PD
+24 W
+4865 2138 PD
+24 W
+4892 2156 PD
+24 W
+4920 2157 PD
+24 W
+4947 2165 PD
+24 W
+4967 2183 PD
+24 W
+4994 2198 PD
+24 W
+5023 2212 PD
+24 W
+5050 2223 PD
+24 W
+5077 2231 PD
+24 W
+5105 2240 PD
+24 W
+5133 2250 PD
+24 W
+5154 2268 PD
+24 W
+5165 2286 PD
+24 W
+5181 2304 PD
+24 W
+5209 2314 PD
+24 W
+5237 2315 PD
+24 W
+5266 2320 PD
+24 W
+5292 2338 PD
+24 W
+5303 2356 PD
+24 W
+5317 2373 PD
+24 W
+5341 2392 PD
+24 W
+5368 2406 PD
+24 W
+5370 2411 PD
+24 W
+5381 2425 PD
+24 W
+5390 2445 PD
+24 W
+5398 2463 PD
+24 W
+5406 2482 PD
+24 W
+5401 2494 PD
+24 W
+5405 2502 PD
+24 W
+5407 2520 PD
+24 W
+5408 2538 PD
+24 W
+5406 2557 PD
+24 W
+5403 2575 PD
+24 W
+5398 2593 PD
+24 W
+5390 2610 PD
+24 W
+5384 2628 PD
+24 W
+5378 2647 PD
+24 W
+5377 2666 PD
+24 W
+5378 2685 PD
+24 W
+5379 2705 PD
+24 W
+5382 2723 PD
+24 W
+5386 2743 PD
+24 W
+5395 2761 PD
+24 W
+5408 2779 PD
+24 W
+5430 2797 PD
+24 W
+5453 2815 PD
+24 W
+5478 2833 PD
+24 W
+5505 2851 PD
+24 W
+5526 2869 PD
+24 W
+5536 2888 PD
+24 W
+5541 2906 PD
+24 W
+5558 2924 PD
+24 W
+5587 2937 PD
+24 W
+5614 2951 PD
+24 W
+5642 2966 PD
+24 W
+5668 2984 PD
+24 W
+5686 3002 PD
+24 W
+5697 3021 PD
+24 W
+5705 3040 PD
+24 W
+5716 3060 PD
+24 W
+5730 3079 PD
+24 W
+5753 3097 PD
+24 W
+5770 3115 PD
+24 W
+5777 3134 PD
+24 W
+5778 3153 PD
+24 W
+5782 3171 PD
+24 W
+5792 3190 PD
+24 W
+5809 3209 PD
+24 W
+5828 3228 PD
+24 W
+5838 3245 PD
+24 W
+5842 3264 PD
+24 W
+5849 3283 PD
+24 W
+5860 3301 PD
+24 W
+5878 3319 PD
+24 W
+5907 3335 PD
+24 W
+5936 3349 PD
+24 W
+5959 3367 PD
+24 W
+5961 3385 PD
+24 W
+5970 3404 PD
+24 W
+5990 3423 PD
+24 W
+6017 3430 PD
+24 W
+6047 3435 PD
+24 W
+6074 3452 PD
+24 W
+6103 3459 PD
+24 W
+6112 3477 PD
+24 W
+6131 3496 PD
+24 W
+6158 3509 PD
+24 W
+6183 3528 PD
+24 W
+6193 3548 PD
+24 W
+6205 3567 PD
+24 W
+6221 3586 PD
+24 W
+6240 3603 PD
+24 W
+2613 4611 PD
+24 W
+2612 4611 PD
+24 W
+2589 4593 PD
+24 W
+2561 4574 PD
+24 W
+2535 4556 PD
+24 W
+2505 4539 PD
+24 W
+2481 4519 PD
+24 W
+2454 4500 PD
+24 W
+2426 4485 PD
+24 W
+2398 4475 PD
+24 W
+2371 4467 PD
+24 W
+2344 4457 PD
+24 W
+2315 4443 PD
+24 W
+2287 4430 PD
+24 W
+2260 4416 PD
+24 W
+2231 4404 PD
+24 W
+2204 4391 PD
+24 W
+2177 4372 PD
+24 W
+2149 4353 PD
+24 W
+2127 4335 PD
+24 W
+2102 4317 PD
+24 W
+2080 4298 PD
+24 W
+2058 4280 PD
+24 W
+2039 4261 PD
+24 W
+2021 4242 PD
+24 W
+2004 4222 PD
+24 W
+1991 4203 PD
+24 W
+1978 4184 PD
+24 W
+1967 4166 PD
+24 W
+1960 4147 PD
+24 W
+1956 4129 PD
+24 W
+1954 4110 PD
+24 W
+1952 4091 PD
+24 W
+1953 4072 PD
+24 W
+1958 4053 PD
+24 W
+1963 4034 PD
+24 W
+1967 4015 PD
+24 W
+1970 3997 PD
+24 W
+1974 3980 PD
+24 W
+1978 3961 PD
+24 W
+1979 3942 PD
+24 W
+1952 3937 PD
+24 W
+1923 3940 PD
+24 W
+1895 3951 PD
+24 W
+1868 3965 PD
+24 W
+1845 3984 PD
+24 W
+1819 4002 PD
+24 W
+1790 4016 PD
+24 W
+1762 4031 PD
+24 W
+1735 4043 PD
+24 W
+1711 4062 PD
+24 W
+1695 4080 PD
+24 W
+1684 4100 PD
+24 W
+1679 4118 PD
+24 W
+1673 4138 PD
+24 W
+1669 4156 PD
+24 W
+1672 4175 PD
+24 W
+1680 4193 PD
+24 W
+1689 4211 PD
+24 W
+1705 4230 PD
+24 W
+1726 4248 PD
+24 W
+1747 4267 PD
+24 W
+1766 4286 PD
+24 W
+1784 4305 PD
+24 W
+1794 4324 PD
+24 W
+1796 4343 PD
+24 W
+1790 4361 PD
+24 W
+1778 4380 PD
+24 W
+1764 4398 PD
+24 W
+1746 4417 PD
+24 W
+1731 4435 PD
+24 W
+1720 4454 PD
+24 W
+1708 4472 PD
+24 W
+1700 4491 PD
+24 W
+1694 4509 PD
+24 W
+2497 4602 PD
+24 W
+2496 4602 PD
+24 W
+2477 4584 PD
+24 W
+2459 4565 PD
+24 W
+2430 4547 PD
+24 W
+2400 4532 PD
+24 W
+2369 4520 PD
+24 W
+2339 4506 PD
+24 W
+2311 4495 PD
+24 W
+2285 4485 PD
+24 W
+2258 4473 PD
+24 W
+2231 4461 PD
+24 W
+2203 4450 PD
+24 W
+2174 4436 PD
+24 W
+2147 4421 PD
+24 W
+2122 4403 PD
+24 W
+2095 4385 PD
+24 W
+2073 4367 PD
+24 W
+2052 4348 PD
+24 W
+2034 4330 PD
+24 W
+2012 4311 PD
+24 W
+1991 4293 PD
+24 W
+1969 4274 PD
+24 W
+1951 4256 PD
+24 W
+1935 4238 PD
+24 W
+1920 4220 PD
+24 W
+1910 4202 PD
+24 W
+1904 4183 PD
+24 W
+1895 4164 PD
+24 W
+1893 4146 PD
+24 W
+1892 4128 PD
+24 W
+1889 4109 PD
+24 W
+1886 4090 PD
+24 W
+1884 4072 PD
+24 W
+1883 4053 PD
+24 W
+1885 4034 PD
+24 W
+1884 4015 PD
+24 W
+1857 4021 PD
+24 W
+1829 4039 PD
+24 W
+1808 4058 PD
+24 W
+1791 4076 PD
+24 W
+1773 4095 PD
+24 W
+1761 4112 PD
+24 W
+1752 4131 PD
+24 W
+1746 4151 PD
+24 W
+1746 4170 PD
+24 W
+1751 4188 PD
+24 W
+1765 4206 PD
+24 W
+1788 4225 PD
+24 W
+1808 4243 PD
+24 W
+1825 4262 PD
+24 W
+1840 4281 PD
+24 W
+1853 4299 PD
+24 W
+1862 4319 PD
+24 W
+1868 4338 PD
+24 W
+1873 4356 PD
+24 W
+1875 4375 PD
+24 W
+1872 4394 PD
+24 W
+1859 4414 PD
+24 W
+1845 4432 PD
+24 W
+1828 4451 PD
+24 W
+1803 4470 PD
+24 W
+1787 4488 PD
+24 W
+1775 4507 PD
+24 W
+1768 4525 PD
+24 W
+1761 4545 PD
+24 W
+1755 4564 PD
+24 W
+1752 4582 PD
+24 W
+1751 4601 PD
+24 W
+2379 4599 PD
+24 W
+2378 4580 PD
+24 W
+2365 4562 PD
+24 W
+2337 4553 PD
+24 W
+2309 4544 PD
+24 W
+2281 4533 PD
+24 W
+2254 4524 PD
+24 W
+2226 4515 PD
+24 W
+2199 4503 PD
+24 W
+2171 4487 PD
+24 W
+2145 4469 PD
+24 W
+2117 4455 PD
+24 W
+2092 4436 PD
+24 W
+2075 4418 PD
+24 W
+2057 4399 PD
+24 W
+2035 4382 PD
+24 W
+2008 4367 PD
+24 W
+1981 4358 PD
+24 W
+1954 4371 PD
+24 W
+1941 4389 PD
+24 W
+1934 4407 PD
+24 W
+1927 4427 PD
+24 W
+1919 4447 PD
+24 W
+1905 4465 PD
+24 W
+1888 4483 PD
+24 W
+1872 4505 PD
+24 W
+1859 4524 PD
+24 W
+1849 4542 PD
+24 W
+1842 4561 PD
+24 W
+1833 4580 PD
+24 W
+1826 4599 PD
+24 W
+2259 4595 PD
+24 W
+2258 4595 PD
+24 W
+2234 4577 PD
+24 W
+2206 4563 PD
+24 W
+2179 4555 PD
+24 W
+2150 4544 PD
+24 W
+2123 4531 PD
+24 W
+2097 4512 PD
+24 W
+2074 4494 PD
+24 W
+2051 4476 PD
+24 W
+2027 4458 PD
+24 W
+2001 4462 PD
+24 W
+1976 4482 PD
+24 W
+1958 4500 PD
+24 W
+1940 4518 PD
+24 W
+1921 4537 PD
+24 W
+1912 4556 PD
+24 W
+1898 4575 PD
+24 W
+1894 4593 PD
+24 W
+2157 4601 PD
+24 W
+2128 4592 PD
+24 W
+2102 4578 PD
+24 W
+2076 4559 PD
+24 W
+2056 4541 PD
+24 W
+2028 4528 PD
+24 W
+2005 4546 PD
+24 W
+1982 4566 PD
+24 W
+1974 4585 PD
+24 W
+1614 4423 PD
+24 W
+1613 4423 PD
+24 W
+1622 4404 PD
+24 W
+1636 4386 PD
+24 W
+1647 4367 PD
+24 W
+1651 4347 PD
+24 W
+1651 4328 PD
+24 W
+1650 4309 PD
+24 W
+1640 4291 PD
+24 W
+1617 4273 PD
+24 W
+1592 4255 PD
+24 W
+1572 4237 PD
+24 W
+1566 4218 PD
+24 W
+1571 4199 PD
+24 W
+1566 4181 PD
+24 W
+1556 4160 PD
+24 W
+1557 4140 PD
+24 W
+1564 4121 PD
+24 W
+1575 4101 PD
+24 W
+1587 4082 PD
+24 W
+1602 4062 PD
+24 W
+1622 4044 PD
+24 W
+1649 4026 PD
+24 W
+1678 4010 PD
+24 W
+1705 3994 PD
+24 W
+1732 3982 PD
+24 W
+1760 3969 PD
+24 W
+1790 3951 PD
+24 W
+1820 3933 PD
+24 W
+1847 3920 PD
+24 W
+1876 3906 PD
+24 W
+1905 3894 PD
+24 W
+1934 3884 PD
+24 W
+1961 3875 PD
+24 W
+1989 3865 PD
+24 W
+2018 3852 PD
+24 W
+2014 3834 PD
+24 W
+1995 3816 PD
+24 W
+1967 3801 PD
+24 W
+1940 3782 PD
+24 W
+1929 3764 PD
+24 W
+1922 3744 PD
+24 W
+1913 3726 PD
+24 W
+1906 3708 PD
+24 W
+1897 3689 PD
+24 W
+1890 3671 PD
+24 W
+1881 3651 PD
+24 W
+1875 3631 PD
+24 W
+1869 3611 PD
+24 W
+1866 3592 PD
+24 W
+1861 3574 PD
+24 W
+1854 3556 PD
+24 W
+1846 3538 PD
+24 W
+1839 3520 PD
+24 W
+1831 3499 PD
+24 W
+1826 3481 PD
+24 W
+1820 3463 PD
+24 W
+1813 3445 PD
+24 W
+1798 3425 PD
+24 W
+1786 3407 PD
+24 W
+1770 3388 PD
+24 W
+1754 3369 PD
+24 W
+1735 3350 PD
+24 W
+1712 3331 PD
+24 W
+1686 3313 PD
+24 W
+1660 3294 PD
+24 W
+1632 3277 PD
+24 W
+1603 3265 PD
+24 W
+1574 3254 PD
+24 W
+1545 3245 PD
+24 W
+1518 3237 PD
+24 W
+1491 3231 PD
+24 W
+1463 3226 PD
+24 W
+1436 3221 PD
+24 W
+1721 3939 PD
+24 W
+1632 3954 PD
+24 W
+1660 3939 PD
+24 W
+1688 3933 PD
+24 W
+1716 3926 PD
+24 W
+1743 3915 PD
+24 W
+1771 3900 PD
+24 W
+1794 3882 PD
+24 W
+1807 3862 PD
+24 W
+1818 3845 PD
+24 W
+1830 3827 PD
+24 W
+1841 3808 PD
+24 W
+1846 3790 PD
+24 W
+1859 3771 PD
+24 W
+1861 3753 PD
+24 W
+1851 3734 PD
+24 W
+1836 3715 PD
+24 W
+1826 3696 PD
+24 W
+1814 3678 PD
+24 W
+1807 3660 PD
+24 W
+1807 3640 PD
+24 W
+1805 3622 PD
+24 W
+1801 3605 PD
+24 W
+1797 3585 PD
+24 W
+1792 3568 PD
+24 W
+1785 3550 PD
+24 W
+1778 3532 PD
+24 W
+1770 3514 PD
+24 W
+1761 3496 PD
+24 W
+1751 3478 PD
+24 W
+1737 3460 PD
+24 W
+1724 3443 PD
+24 W
+1707 3424 PD
+24 W
+1694 3405 PD
+24 W
+1675 3387 PD
+24 W
+1651 3369 PD
+24 W
+1622 3350 PD
+24 W
+1595 3340 PD
+24 W
+1313 3145 PD
+24 W
+1341 3156 PD
+24 W
+1368 3165 PD
+24 W
+1396 3168 PD
+24 W
+1422 3174 PD
+24 W
+1450 3181 PD
+24 W
+1478 3184 PD
+24 W
+1509 3189 PD
+24 W
+1539 3196 PD
+24 W
+1566 3203 PD
+24 W
+1595 3211 PD
+24 W
+1624 3219 PD
+24 W
+1652 3226 PD
+24 W
+1680 3236 PD
+24 W
+1708 3254 PD
+24 W
+1732 3272 PD
+24 W
+1758 3290 PD
+24 W
+1778 3310 PD
+24 W
+1794 3329 PD
+24 W
+1811 3347 PD
+24 W
+1827 3366 PD
+24 W
+1845 3384 PD
+24 W
+1861 3403 PD
+24 W
+1877 3421 PD
+24 W
+1890 3439 PD
+24 W
+1903 3457 PD
+24 W
+1916 3476 PD
+24 W
+1927 3495 PD
+24 W
+1936 3515 PD
+24 W
+1944 3536 PD
+24 W
+1952 3553 PD
+24 W
+1961 3572 PD
+24 W
+1969 3590 PD
+24 W
+1973 3608 PD
+24 W
+1976 3626 PD
+24 W
+1978 3645 PD
+24 W
+1979 3664 PD
+24 W
+1983 3684 PD
+24 W
+1989 3704 PD
+24 W
+1992 3722 PD
+24 W
+2007 3740 PD
+24 W
+2035 3755 PD
+24 W
+2060 3773 PD
+24 W
+2074 3793 PD
+24 W
+2088 3812 PD
+24 W
+2101 3829 PD
+24 W
+2112 3847 PD
+24 W
+2140 3849 PD
+24 W
+2170 3843 PD
+24 W
+2200 3833 PD
+24 W
+2229 3821 PD
+24 W
+2259 3808 PD
+24 W
+2286 3793 PD
+24 W
+2311 3774 PD
+24 W
+2339 3755 PD
+24 W
+2367 3737 PD
+24 W
+2395 3718 PD
+24 W
+2423 3702 PD
+24 W
+2451 3692 PD
+24 W
+2479 3678 PD
+24 W
+2480 3659 PD
+24 W
+2463 3640 PD
+24 W
+2454 3623 PD
+24 W
+2451 3605 PD
+24 W
+2451 3586 PD
+24 W
+2446 3568 PD
+24 W
+2439 3548 PD
+24 W
+2430 3531 PD
+24 W
+2413 3513 PD
+24 W
+2394 3494 PD
+24 W
+2371 3474 PD
+24 W
+2347 3456 PD
+24 W
+2318 3437 PD
+24 W
+2297 3419 PD
+24 W
+2278 3400 PD
+24 W
+2260 3381 PD
+24 W
+2244 3363 PD
+24 W
+2224 3344 PD
+24 W
+2195 3326 PD
+24 W
+2167 3307 PD
+24 W
+2145 3289 PD
+24 W
+2128 3269 PD
+24 W
+2112 3251 PD
+24 W
+2097 3231 PD
+24 W
+2085 3213 PD
+24 W
+2067 3195 PD
+24 W
+2051 3175 PD
+24 W
+2038 3156 PD
+24 W
+2027 3138 PD
+24 W
+2013 3118 PD
+24 W
+2001 3100 PD
+24 W
+1992 3081 PD
+24 W
+1982 3062 PD
+24 W
+1974 3044 PD
+24 W
+1967 3025 PD
+24 W
+1961 3006 PD
+24 W
+1960 2986 PD
+24 W
+1959 2968 PD
+24 W
+1960 2948 PD
+24 W
+1961 2930 PD
+24 W
+1962 2912 PD
+24 W
+1960 2899 PD
+24 W
+1959 2894 PD
+24 W
+1948 2875 PD
+24 W
+1933 2857 PD
+24 W
+1905 2840 PD
+24 W
+1878 2822 PD
+24 W
+1854 2803 PD
+24 W
+1836 2785 PD
+24 W
+1812 2768 PD
+24 W
+1785 2756 PD
+24 W
+1758 2744 PD
+24 W
+1730 2730 PD
+24 W
+1705 2711 PD
+24 W
+1704 2712 PD
+24 W
+1678 2695 PD
+24 W
+1664 2677 PD
+24 W
+1653 2658 PD
+24 W
+1650 2640 PD
+24 W
+1657 2620 PD
+24 W
+1667 2602 PD
+24 W
+1676 2584 PD
+24 W
+1674 2567 PD
+24 W
+1671 2549 PD
+24 W
+1672 2531 PD
+24 W
+1678 2513 PD
+24 W
+1691 2495 PD
+24 W
+1699 2477 PD
+24 W
+1701 2459 PD
+24 W
+1697 2441 PD
+24 W
+1675 2423 PD
+24 W
+1647 2413 PD
+24 W
+1627 2394 PD
+24 W
+1626 2376 PD
+24 W
+1599 2364 PD
+24 W
+1576 2346 PD
+24 W
+1549 2331 PD
+24 W
+1522 2318 PD
+24 W
+1495 2302 PD
+24 W
+1473 2289 PD
+24 W
+1466 2286 PD
+24 W
+1443 2269 PD
+24 W
+1439 2251 PD
+24 W
+1442 2233 PD
+24 W
+1449 2214 PD
+24 W
+1452 2206 PD
+24 W
+1454 2197 PD
+24 W
+1459 2178 PD
+24 W
+1460 2160 PD
+24 W
+1452 2142 PD
+24 W
+1449 2140 PD
+24 W
+1425 2129 PD
+24 W
+1406 2110 PD
+24 W
+1389 2092 PD
+24 W
+1377 2074 PD
+24 W
+1367 2056 PD
+24 W
+1357 2037 PD
+24 W
+1345 2019 PD
+24 W
+1333 2001 PD
+24 W
+1320 1983 PD
+24 W
+1301 1964 PD
+24 W
+1281 1946 PD
+24 W
+1262 1927 PD
+24 W
+1245 1909 PD
+24 W
+1232 1891 PD
+24 W
+1222 1874 PD
+24 W
+1214 1856 PD
+24 W
+1208 1836 PD
+24 W
+1201 1817 PD
+24 W
+1192 1798 PD
+24 W
+1187 1779 PD
+24 W
+1183 1761 PD
+24 W
+1178 1743 PD
+24 W
+1173 1724 PD
+24 W
+1166 1706 PD
+24 W
+1159 1688 PD
+24 W
+1152 1669 PD
+24 W
+1150 1649 PD
+24 W
+1148 1631 PD
+24 W
+1150 1611 PD
+24 W
+1150 1593 PD
+24 W
+1154 1574 PD
+24 W
+1161 1556 PD
+24 W
+1172 1537 PD
+24 W
+1188 1519 PD
+24 W
+1208 1501 PD
+24 W
+1229 1483 PD
+24 W
+1255 1465 PD
+24 W
+1283 1449 PD
+24 W
+1298 1442 PD
+24 W
+1310 1435 PD
+24 W
+1336 1431 PD
+24 W
+1367 1436 PD
+24 W
+1394 1440 PD
+24 W
+1421 1438 PD
+24 W
+1427 1421 PD
+24 W
+1424 1403 PD
+24 W
+1419 1384 PD
+24 W
+1410 1366 PD
+24 W
+1404 1347 PD
+24 W
+1399 1329 PD
+24 W
+1396 1312 PD
+24 W
+1393 1300 PD
+24 W
+1386 1294 PD
+24 W
+1374 1276 PD
+24 W
+1377 1257 PD
+24 W
+1388 1237 PD
+24 W
+1398 1218 PD
+24 W
+1404 1199 PD
+24 W
+1413 1180 PD
+24 W
+1421 1162 PD
+24 W
+1430 1144 PD
+24 W
+1439 1126 PD
+24 W
+1448 1108 PD
+24 W
+1456 1091 PD
+24 W
+1462 1072 PD
+24 W
+1467 1054 PD
+24 W
+1473 1034 PD
+24 W
+1480 1016 PD
+24 W
+1490 996 PD
+24 W
+1499 978 PD
+24 W
+1513 958 PD
+24 W
+1524 940 PD
+24 W
+1532 921 PD
+24 W
+1542 902 PD
+24 W
+1553 884 PD
+24 W
+1567 864 PD
+24 W
+1583 845 PD
+24 W
+1597 827 PD
+24 W
+1621 808 PD
+24 W
+1649 794 PD
+24 W
+1678 786 PD
+24 W
+1706 782 PD
+24 W
+1733 777 PD
+24 W
+1762 768 PD
+24 W
+1789 759 PD
+24 W
+1816 747 PD
+24 W
+1844 742 PD
+24 W
+1872 741 PD
+24 W
+1903 744 PD
+24 W
+1933 746 PD
+24 W
+1961 746 PD
+24 W
+1990 744 PD
+24 W
+2018 743 PD
+24 W
+2049 740 PD
+24 W
+2078 735 PD
+24 W
+2105 731 PD
+24 W
+2133 728 PD
+24 W
+2161 719 PD
+24 W
+2188 709 PD
+24 W
+2217 702 PD
+24 W
+2246 693 PD
+24 W
+2273 685 PD
+24 W
+2301 675 PD
+24 W
+2329 664 PD
+24 W
+2357 656 PD
+24 W
+2385 647 PD
+24 W
+2412 641 PD
+24 W
+2441 636 PD
+24 W
+2468 630 PD
+24 W
+2495 626 PD
+24 W
+2522 631 PD
+24 W
+2549 638 PD
+24 W
+2576 649 PD
+24 W
+2603 657 PD
+24 W
+2629 659 PD
+24 W
+2657 660 PD
+24 W
+2684 651 PD
+24 W
+2709 634 PD
+24 W
+2737 626 PD
+24 W
+2767 622 PD
+24 W
+2796 619 PD
+24 W
+2825 617 PD
+24 W
+2854 616 PD
+24 W
+2883 617 PD
+24 W
+2911 618 PD
+24 W
+2940 618 PD
+24 W
+2971 620 PD
+24 W
+2999 622 PD
+24 W
+3027 624 PD
+24 W
+3055 628 PD
+24 W
+3083 634 PD
+24 W
+3111 640 PD
+24 W
+3140 651 PD
+24 W
+3169 661 PD
+24 W
+3197 669 PD
+24 W
+3226 676 PD
+24 W
+3255 684 PD
+24 W
+3283 693 PD
+24 W
+3312 704 PD
+24 W
+3341 717 PD
+24 W
+3371 729 PD
+24 W
+3400 740 PD
+24 W
+3429 756 PD
+24 W
+3460 769 PD
+24 W
+3486 780 PD
+24 W
+3504 798 PD
+24 W
+3532 816 PD
+24 W
+3562 828 PD
+24 W
+3591 842 PD
+24 W
+3618 855 PD
+24 W
+3646 868 PD
+24 W
+3676 879 PD
+24 W
+3704 893 PD
+24 W
+3732 906 PD
+24 W
+3759 920 PD
+24 W
+3787 934 PD
+24 W
+3813 944 PD
+24 W
+3841 955 PD
+24 W
+3869 965 PD
+24 W
+3898 974 PD
+24 W
+3925 981 PD
+24 W
+3952 987 PD
+24 W
+3980 994 PD
+24 W
+4007 1001 PD
+24 W
+4034 1017 PD
+24 W
+4058 1035 PD
+24 W
+4077 1054 PD
+24 W
+4096 1071 PD
+24 W
+4122 1090 PD
+24 W
+4145 1108 PD
+24 W
+4164 1128 PD
+24 W
+4182 1147 PD
+24 W
+4200 1166 PD
+24 W
+4215 1184 PD
+24 W
+4219 1202 PD
+24 W
+4208 1228 PD
+24 W
+4207 1228 PD
+24 W
+4204 1247 PD
+24 W
+4215 1265 PD
+24 W
+4224 1284 PD
+24 W
+4250 1303 PD
+24 W
+4277 1313 PD
+24 W
+4304 1324 PD
+24 W
+4334 1338 PD
+24 W
+4362 1356 PD
+24 W
+4389 1373 PD
+24 W
+4407 1392 PD
+24 W
+4412 1410 PD
+24 W
+4415 1430 PD
+24 W
+4422 1449 PD
+24 W
+4427 1467 PD
+24 W
+4433 1486 PD
+24 W
+4440 1504 PD
+24 W
+4447 1522 PD
+24 W
+4448 1541 PD
+24 W
+4449 1559 PD
+24 W
+4455 1578 PD
+24 W
+4460 1596 PD
+24 W
+4489 1612 PD
+24 W
+4517 1614 PD
+24 W
+4544 1612 PD
+24 W
+4574 1614 PD
+24 W
+4602 1620 PD
+24 W
+4628 1629 PD
+24 W
+4648 1641 PD
+24 W
+4656 1639 PD
+24 W
+4685 1655 PD
+24 W
+4706 1674 PD
+24 W
+4726 1692 PD
+24 W
+4735 1707 PD
+24 W
+4736 1711 PD
+24 W
+4742 1728 PD
+24 W
+4746 1746 PD
+24 W
+4745 1765 PD
+24 W
+4742 1786 PD
+24 W
+4739 1804 PD
+24 W
+4735 1823 PD
+24 W
+4732 1840 PD
+24 W
+4731 1858 PD
+24 W
+4732 1876 PD
+24 W
+4733 1896 PD
+24 W
+4734 1914 PD
+24 W
+4736 1933 PD
+24 W
+4740 1951 PD
+24 W
+4754 1969 PD
+24 W
+4780 1972 PD
+24 W
+4808 1970 PD
+24 W
+4837 1966 PD
+24 W
+4865 1963 PD
+24 W
+4896 1961 PD
+24 W
+4925 1957 PD
+24 W
+4952 1958 PD
+24 W
+4981 1962 PD
+24 W
+5007 1968 PD
+24 W
+5019 1987 PD
+24 W
+5009 2006 PD
+24 W
+4982 2023 PD
+24 W
+4958 2041 PD
+24 W
+4941 2060 PD
+24 W
+4929 2080 PD
+24 W
+4957 2093 PD
+24 W
+4984 2108 PD
+24 W
+5012 2096 PD
+24 W
+5039 2083 PD
+24 W
+5067 2081 PD
+24 W
+5091 2099 PD
+24 W
+5086 2117 PD
+24 W
+5075 2135 PD
+24 W
+5083 2153 PD
+24 W
+5114 2159 PD
+24 W
+5144 2166 PD
+24 W
+5170 2185 PD
+24 W
+5174 2204 PD
+24 W
+5182 2222 PD
+24 W
+5209 2229 PD
+24 W
+5236 2214 PD
+24 W
+5263 2197 PD
+24 W
+5269 2194 PD
+24 W
+5289 2189 PD
+24 W
+5317 2192 PD
+24 W
+5345 2204 PD
+24 W
+5374 2222 PD
+24 W
+5397 2240 PD
+24 W
+5414 2258 PD
+24 W
+5427 2276 PD
+24 W
+5442 2296 PD
+24 W
+5451 2313 PD
+24 W
+5458 2331 PD
+24 W
+5467 2349 PD
+24 W
+5473 2368 PD
+24 W
+5476 2386 PD
+24 W
+5482 2404 PD
+24 W
+5487 2422 PD
+24 W
+5487 2427 PD
+24 W
+5488 2440 PD
+24 W
+5492 2461 PD
+24 W
+5500 2479 PD
+24 W
+5502 2497 PD
+24 W
+5497 2517 PD
+24 W
+5490 2537 PD
+24 W
+5483 2557 PD
+24 W
+5475 2576 PD
+24 W
+5465 2597 PD
+24 W
+5459 2615 PD
+24 W
+5456 2634 PD
+24 W
+5454 2652 PD
+24 W
+5454 2671 PD
+24 W
+5457 2690 PD
+24 W
+5462 2709 PD
+24 W
+5469 2727 PD
+24 W
+5476 2746 PD
+24 W
+5486 2764 PD
+24 W
+5500 2784 PD
+24 W
+5516 2802 PD
+24 W
+5541 2820 PD
+24 W
+5568 2837 PD
+24 W
+5584 2855 PD
+24 W
+5595 2873 PD
+24 W
+5608 2892 PD
+24 W
+5629 2911 PD
+24 W
+5657 2923 PD
+24 W
+5687 2938 PD
+24 W
+5716 2953 PD
+24 W
+5737 2972 PD
+24 W
+5753 2991 PD
+24 W
+5769 3009 PD
+24 W
+5778 3027 PD
+24 W
+5787 3045 PD
+24 W
+5817 3048 PD
+24 W
+5838 3067 PD
+24 W
+5841 3086 PD
+24 W
+5870 3097 PD
+24 W
+5899 3094 PD
+24 W
+5925 3086 PD
+24 W
+5946 3068 PD
+24 W
+5963 3048 PD
+24 W
+5975 3029 PD
+24 W
+5982 3011 PD
+24 W
+5992 2992 PD
+24 W
+6003 2973 PD
+24 W
+6013 2966 PD
+24 W
+6032 2959 PD
+24 W
+6061 2954 PD
+24 W
+6090 2956 PD
+24 W
+6117 2963 PD
+24 W
+6144 2973 PD
+24 W
+6169 2992 PD
+24 W
+6178 3010 PD
+24 W
+6187 3028 PD
+24 W
+6198 3046 PD
+24 W
+6211 3064 PD
+24 W
+6225 3082 PD
+24 W
+6232 3101 PD
+24 W
+6236 3119 PD
+24 W
+6235 3137 PD
+24 W
+6235 3156 PD
+24 W
+6237 3174 PD
+24 W
+6237 3192 PD
+24 W
+6239 3210 PD
+24 W
+6239 3229 PD
+24 W
+6241 3246 PD
+24 W
+6243 3264 PD
+24 W
+6244 3283 PD
+24 W
+6245 3301 PD
+24 W
+6246 3320 PD
+24 W
+6244 3338 PD
+24 W
+6243 3357 PD
+24 W
+6240 3376 PD
+24 W
+6240 3394 PD
+24 W
+6238 3413 PD
+24 W
+6237 3431 PD
+24 W
+6238 3449 PD
+24 W
+6239 3466 PD
+24 W
+6244 3484 PD
+24 W
+6251 3503 PD
+24 W
+1209 3084 PD
+24 W
+1236 3088 PD
+24 W
+1266 3087 PD
+24 W
+1294 3090 PD
+24 W
+1323 3096 PD
+24 W
+1351 3103 PD
+24 W
+1378 3117 PD
+24 W
+1406 3120 PD
+24 W
+1434 3119 PD
+24 W
+1462 3123 PD
+24 W
+1492 3138 PD
+24 W
+1522 3147 PD
+24 W
+1550 3156 PD
+24 W
+1578 3159 PD
+24 W
+1607 3158 PD
+24 W
+1636 3161 PD
+24 W
+1664 3170 PD
+24 W
+1691 3184 PD
+24 W
+1715 3203 PD
+24 W
+1740 3222 PD
+24 W
+1769 3234 PD
+24 W
+1797 3242 PD
+24 W
+1824 3250 PD
+24 W
+1851 3265 PD
+24 W
+1857 3284 PD
+24 W
+1855 3302 PD
+24 W
+1864 3321 PD
+24 W
+1880 3338 PD
+24 W
+1900 3357 PD
+24 W
+1921 3375 PD
+24 W
+1937 3394 PD
+24 W
+1944 3413 PD
+24 W
+1946 3431 PD
+24 W
+1955 3449 PD
+24 W
+1977 3467 PD
+24 W
+1994 3485 PD
+24 W
+2007 3505 PD
+24 W
+2019 3525 PD
+24 W
+2028 3545 PD
+24 W
+2032 3564 PD
+24 W
+2035 3583 PD
+24 W
+2038 3602 PD
+24 W
+2043 3620 PD
+24 W
+2049 3638 PD
+24 W
+2054 3657 PD
+24 W
+2060 3676 PD
+24 W
+2072 3695 PD
+24 W
+2084 3713 PD
+24 W
+2096 3732 PD
+24 W
+2118 3750 PD
+24 W
+2145 3764 PD
+24 W
+2173 3762 PD
+24 W
+2200 3750 PD
+24 W
+2227 3738 PD
+24 W
+2256 3728 PD
+24 W
+2283 3713 PD
+24 W
+2311 3702 PD
+24 W
+2340 3690 PD
+24 W
+2368 3682 PD
+24 W
+2386 3664 PD
+24 W
+2393 3645 PD
+24 W
+2383 3626 PD
+24 W
+2371 3607 PD
+24 W
+2365 3588 PD
+24 W
+2358 3571 PD
+24 W
+2351 3551 PD
+24 W
+2341 3532 PD
+24 W
+2329 3514 PD
+24 W
+2313 3496 PD
+24 W
+2290 3477 PD
+24 W
+2268 3459 PD
+24 W
+2246 3440 PD
+24 W
+2226 3423 PD
+24 W
+2213 3404 PD
+24 W
+2194 3385 PD
+24 W
+2166 3374 PD
+24 W
+2138 3365 PD
+24 W
+2109 3352 PD
+24 W
+2091 3334 PD
+24 W
+2073 3314 PD
+24 W
+2059 3295 PD
+24 W
+2042 3275 PD
+24 W
+2026 3256 PD
+24 W
+2009 3238 PD
+24 W
+1991 3219 PD
+24 W
+1976 3199 PD
+24 W
+1963 3180 PD
+24 W
+1954 3162 PD
+24 W
+1945 3144 PD
+24 W
+1936 3126 PD
+24 W
+1929 3108 PD
+24 W
+1925 3090 PD
+24 W
+1922 3071 PD
+24 W
+1922 3053 PD
+24 W
+1923 3034 PD
+24 W
+1922 3015 PD
+24 W
+1913 2996 PD
+24 W
+1895 2978 PD
+24 W
+1879 2959 PD
+24 W
+1865 2941 PD
+24 W
+1849 2924 PD
+24 W
+1829 2903 PD
+24 W
+1817 2884 PD
+24 W
+1805 2864 PD
+24 W
+1786 2845 PD
+24 W
+1764 2826 PD
+24 W
+1739 2808 PD
+24 W
+1713 2792 PD
+24 W
+1683 2777 PD
+24 W
+1655 2762 PD
+24 W
+1638 2744 PD
+24 W
+1624 2724 PD
+24 W
+1609 2705 PD
+24 W
+1593 2687 PD
+24 W
+1586 2669 PD
+24 W
+1587 2652 PD
+24 W
+1592 2633 PD
+24 W
+1589 2615 PD
+24 W
+1588 2608 PD
+24 W
+1578 2597 PD
+24 W
+1555 2579 PD
+24 W
+1541 2561 PD
+24 W
+1540 2543 PD
+24 W
+1541 2525 PD
+24 W
+1540 2505 PD
+24 W
+1539 2487 PD
+24 W
+1534 2469 PD
+24 W
+1517 2451 PD
+24 W
+1500 2433 PD
+24 W
+1489 2415 PD
+24 W
+1488 2397 PD
+24 W
+1489 2390 PD
+24 W
+1491 2379 PD
+24 W
+1474 2361 PD
+24 W
+1457 2343 PD
+24 W
+1430 2330 PD
+24 W
+1409 2312 PD
+24 W
+1410 2313 PD
+24 W
+1395 2293 PD
+24 W
+1380 2275 PD
+24 W
+1365 2256 PD
+24 W
+1355 2237 PD
+24 W
+1342 2220 PD
+24 W
+1329 2202 PD
+24 W
+1317 2184 PD
+24 W
+1304 2165 PD
+24 W
+1293 2146 PD
+24 W
+1283 2128 PD
+24 W
+1269 2110 PD
+24 W
+1258 2091 PD
+24 W
+1248 2072 PD
+24 W
+1243 2055 PD
+24 W
+1230 2035 PD
+24 W
+1216 2017 PD
+24 W
+1201 1999 PD
+24 W
+1186 1981 PD
+24 W
+1167 1960 PD
+24 W
+1153 1942 PD
+24 W
+1139 1925 PD
+24 W
+1125 1905 PD
+24 W
+1111 1887 PD
+24 W
+1095 1869 PD
+24 W
+1080 1850 PD
+24 W
+1064 1831 PD
+24 W
+1052 1813 PD
+24 W
+1041 1794 PD
+24 W
+1032 1775 PD
+24 W
+1025 1757 PD
+24 W
+1022 1737 PD
+24 W
+1018 1718 PD
+24 W
+1017 1699 PD
+24 W
+1015 1680 PD
+24 W
+1015 1661 PD
+24 W
+1017 1642 PD
+24 W
+1022 1624 PD
+24 W
+1027 1604 PD
+24 W
+1027 1586 PD
+24 W
+1029 1568 PD
+24 W
+1031 1549 PD
+24 W
+1032 1530 PD
+24 W
+1040 1513 PD
+24 W
+1053 1494 PD
+24 W
+1067 1476 PD
+24 W
+1087 1457 PD
+24 W
+1112 1438 PD
+24 W
+1140 1423 PD
+24 W
+1167 1409 PD
+24 W
+1196 1397 PD
+24 W
+1223 1385 PD
+24 W
+1251 1374 PD
+24 W
+1277 1356 PD
+24 W
+1284 1353 PD
+24 W
+1297 1336 PD
+24 W
+1307 1318 PD
+24 W
+1310 1299 PD
+24 W
+1306 1281 PD
+24 W
+1306 1263 PD
+24 W
+1306 1245 PD
+24 W
+1305 1227 PD
+24 W
+1306 1209 PD
+24 W
+1305 1191 PD
+24 W
+1306 1173 PD
+24 W
+1309 1155 PD
+24 W
+1310 1137 PD
+24 W
+1311 1134 PD
+24 W
+1305 1119 PD
+24 W
+1301 1102 PD
+24 W
+1305 1084 PD
+24 W
+1314 1066 PD
+24 W
+1323 1047 PD
+24 W
+1335 1029 PD
+24 W
+1346 1010 PD
+24 W
+1357 992 PD
+24 W
+1372 973 PD
+24 W
+1387 954 PD
+24 W
+1401 935 PD
+24 W
+1412 916 PD
+24 W
+1419 897 PD
+24 W
+1427 878 PD
+24 W
+1437 860 PD
+24 W
+1444 841 PD
+24 W
+1457 821 PD
+24 W
+1470 803 PD
+24 W
+1486 782 PD
+24 W
+1505 763 PD
+24 W
+1525 746 PD
+24 W
+1548 728 PD
+24 W
+1571 709 PD
+24 W
+1598 695 PD
+24 W
+1625 683 PD
+24 W
+1653 680 PD
+24 W
+1682 685 PD
+24 W
+1710 690 PD
+24 W
+1739 691 PD
+24 W
+1769 690 PD
+24 W
+1798 685 PD
+24 W
+1827 675 PD
+24 W
+1854 659 PD
+24 W
+1881 643 PD
+24 W
+1910 632 PD
+24 W
+1938 626 PD
+24 W
+1967 621 PD
+24 W
+1995 614 PD
+24 W
+2024 610 PD
+24 W
+2054 608 PD
+24 W
+2082 605 PD
+24 W
+2110 603 PD
+24 W
+2138 599 PD
+24 W
+2168 592 PD
+24 W
+2195 588 PD
+24 W
+2223 587 PD
+24 W
+2250 586 PD
+24 W
+2278 584 PD
+24 W
+2306 578 PD
+24 W
+2335 572 PD
+24 W
+2363 563 PD
+24 W
+2390 557 PD
+24 W
+2419 548 PD
+24 W
+2447 540 PD
+24 W
+2475 530 PD
+24 W
+2503 525 PD
+24 W
+2529 522 PD
+24 W
+2556 520 PD
+24 W
+2583 517 PD
+24 W
+2610 514 PD
+24 W
+2637 510 PD
+24 W
+2668 506 PD
+24 W
+2697 505 PD
+24 W
+2728 506 PD
+24 W
+2755 504 PD
+24 W
+2784 502 PD
+24 W
+2814 502 PD
+24 W
+2842 502 PD
+24 W
+2870 502 PD
+24 W
+2896 502 PD
+24 W
+2925 504 PD
+24 W
+2954 506 PD
+24 W
+2981 508 PD
+24 W
+3008 514 PD
+24 W
+3036 518 PD
+24 W
+3066 522 PD
+24 W
+3094 527 PD
+24 W
+3123 532 PD
+24 W
+3151 537 PD
+24 W
+3183 542 PD
+24 W
+3213 548 PD
+24 W
+3240 553 PD
+24 W
+3267 558 PD
+24 W
+3296 562 PD
+24 W
+3325 568 PD
+24 W
+3352 576 PD
+24 W
+3381 586 PD
+24 W
+3408 596 PD
+24 W
+3437 613 PD
+24 W
+3464 627 PD
+24 W
+3493 643 PD
+24 W
+3521 659 PD
+24 W
+3549 672 PD
+24 W
+3580 678 PD
+24 W
+3607 681 PD
+24 W
+3639 689 PD
+24 W
+3666 697 PD
+24 W
+3693 709 PD
+24 W
+3719 727 PD
+24 W
+3742 745 PD
+24 W
+3770 762 PD
+24 W
+3799 775 PD
+24 W
+3827 788 PD
+24 W
+3854 799 PD
+24 W
+3881 812 PD
+24 W
+3910 828 PD
+24 W
+3939 844 PD
+24 W
+3966 856 PD
+24 W
+3993 866 PD
+24 W
+4022 875 PD
+24 W
+4048 884 PD
+24 W
+4077 898 PD
+24 W
+4107 916 PD
+24 W
+4135 933 PD
+24 W
+4160 951 PD
+24 W
+4184 969 PD
+24 W
+4212 989 PD
+24 W
+4240 1006 PD
+24 W
+4257 1025 PD
+24 W
+4271 1044 PD
+24 W
+4290 1062 PD
+24 W
+4304 1081 PD
+24 W
+4319 1100 PD
+24 W
+4334 1119 PD
+24 W
+4342 1137 PD
+24 W
+4346 1156 PD
+24 W
+4346 1174 PD
+24 W
+4337 1192 PD
+24 W
+4330 1200 PD
+24 W
+4327 1210 PD
+24 W
+4329 1228 PD
+24 W
+4336 1246 PD
+24 W
+4350 1265 PD
+24 W
+4379 1280 PD
+24 W
+4406 1289 PD
+24 W
+4430 1307 PD
+24 W
+4448 1327 PD
+24 W
+4466 1346 PD
+24 W
+4480 1364 PD
+24 W
+4487 1383 PD
+24 W
+4496 1402 PD
+24 W
+4502 1421 PD
+24 W
+4512 1440 PD
+24 W
+4516 1459 PD
+24 W
+4524 1478 PD
+24 W
+4536 1497 PD
+24 W
+4550 1515 PD
+24 W
+4578 1534 PD
+24 W
+4607 1544 PD
+24 W
+4634 1548 PD
+24 W
+4663 1553 PD
+24 W
+4692 1556 PD
+24 W
+4721 1561 PD
+24 W
+4749 1567 PD
+24 W
+4777 1575 PD
+24 W
+4783 1570 PD
+24 W
+4804 1584 PD
+24 W
+4815 1602 PD
+24 W
+4828 1620 PD
+24 W
+4832 1639 PD
+24 W
+4837 1657 PD
+24 W
+4838 1676 PD
+24 W
+4833 1695 PD
+24 W
+4829 1712 PD
+24 W
+4821 1732 PD
+24 W
+4815 1750 PD
+24 W
+4813 1768 PD
+24 W
+4813 1786 PD
+24 W
+4810 1806 PD
+24 W
+4804 1824 PD
+24 W
+4801 1843 PD
+24 W
+4800 1862 PD
+24 W
+4806 1880 PD
+24 W
+4833 1894 PD
+24 W
+4860 1899 PD
+24 W
+4888 1896 PD
+24 W
+4914 1887 PD
+24 W
+4941 1875 PD
+24 W
+4969 1863 PD
+24 W
+4996 1855 PD
+24 W
+5025 1851 PD
+24 W
+5055 1852 PD
+24 W
+5083 1852 PD
+24 W
+5111 1862 PD
+24 W
+5131 1881 PD
+24 W
+5155 1899 PD
+24 W
+5182 1910 PD
+24 W
+5210 1916 PD
+24 W
+5238 1919 PD
+24 W
+5265 1923 PD
+24 W
+5292 1933 PD
+24 W
+5307 1925 PD
+24 W
+5322 1938 PD
+24 W
+5350 1958 PD
+24 W
+5377 1974 PD
+24 W
+5400 1992 PD
+24 W
+5421 2010 PD
+24 W
+5433 2029 PD
+24 W
+5446 2050 PD
+24 W
+5458 2068 PD
+24 W
+5471 2088 PD
+24 W
+5478 2105 PD
+24 W
+5486 2125 PD
+24 W
+5496 2143 PD
+24 W
+5505 2162 PD
+24 W
+5520 2182 PD
+24 W
+5536 2201 PD
+24 W
+5548 2220 PD
+24 W
+5554 2238 PD
+24 W
+5561 2256 PD
+24 W
+5568 2274 PD
+24 W
+5576 2291 PD
+24 W
+5576 2292 PD
+24 W
+5576 2310 PD
+24 W
+5577 2329 PD
+24 W
+5578 2348 PD
+24 W
+5573 2367 PD
+24 W
+5569 2387 PD
+24 W
+5568 2405 PD
+24 W
+5567 2423 PD
+24 W
+5567 2441 PD
+24 W
+5569 2460 PD
+24 W
+5564 2478 PD
+24 W
+5561 2497 PD
+24 W
+5559 2517 PD
+24 W
+5553 2534 PD
+24 W
+5542 2553 PD
+24 W
+5535 2571 PD
+24 W
+5529 2590 PD
+24 W
+5523 2609 PD
+24 W
+5524 2628 PD
+24 W
+5528 2647 PD
+24 W
+5534 2665 PD
+24 W
+5540 2684 PD
+24 W
+5540 2702 PD
+24 W
+5541 2720 PD
+24 W
+5545 2739 PD
+24 W
+5558 2758 PD
+24 W
+5581 2776 PD
+24 W
+5605 2794 PD
+24 W
+5627 2813 PD
+24 W
+5645 2833 PD
+24 W
+5657 2852 PD
+24 W
+5671 2869 PD
+24 W
+5699 2882 PD
+24 W
+5726 2886 PD
+24 W
+5756 2888 PD
+24 W
+5785 2890 PD
+24 W
+5812 2892 PD
+24 W
+5839 2893 PD
+24 W
+5868 2894 PD
+24 W
+5891 2914 PD
+24 W
+5892 2933 PD
+24 W
+5920 2924 PD
+24 W
+5936 2906 PD
+24 W
+5945 2886 PD
+24 W
+5959 2869 PD
+24 W
+5975 2851 PD
+24 W
+5997 2833 PD
+24 W
+6016 2815 PD
+24 W
+6020 2813 PD
+24 W
+6045 2805 PD
+24 W
+6073 2804 PD
+24 W
+6101 2809 PD
+24 W
+6128 2815 PD
+24 W
+6157 2824 PD
+24 W
+6185 2838 PD
+24 W
+6207 2856 PD
+24 W
+6236 2871 PD
+24 W
+1967 3289 PD
+24 W
+1968 3289 PD
+24 W
+1978 3307 PD
+24 W
+1988 3326 PD
+24 W
+1997 3345 PD
+24 W
+2007 3363 PD
+24 W
+2017 3381 PD
+24 W
+2027 3400 PD
+24 W
+2037 3419 PD
+24 W
+2044 3437 PD
+24 W
+2051 3455 PD
+24 W
+2060 3473 PD
+24 W
+2069 3491 PD
+24 W
+2074 3510 PD
+24 W
+2080 3530 PD
+24 W
+2088 3548 PD
+24 W
+2096 3568 PD
+24 W
+2104 3587 PD
+24 W
+2109 3605 PD
+24 W
+2113 3625 PD
+24 W
+2124 3645 PD
+24 W
+2140 3663 PD
+24 W
+2166 3675 PD
+24 W
+2193 3679 PD
+24 W
+2220 3675 PD
+24 W
+2249 3666 PD
+24 W
+2278 3660 PD
+24 W
+2307 3657 PD
+24 W
+2325 3639 PD
+24 W
+2305 3620 PD
+24 W
+2290 3602 PD
+24 W
+2279 3583 PD
+24 W
+2276 3564 PD
+24 W
+2272 3546 PD
+24 W
+2257 3527 PD
+24 W
+2228 3508 PD
+24 W
+2201 3491 PD
+24 W
+2174 3472 PD
+24 W
+2150 3454 PD
+24 W
+2124 3437 PD
+24 W
+2096 3419 PD
+24 W
+2073 3400 PD
+24 W
+2051 3381 PD
+24 W
+2032 3364 PD
+24 W
+2013 3345 PD
+24 W
+1998 3327 PD
+24 W
+1983 3308 PD
+24 W
+1967 3289 PD
+24 W
+1103 2993 PD
+24 W
+1131 3006 PD
+24 W
+1158 3020 PD
+24 W
+1186 3035 PD
+24 W
+1216 3043 PD
+24 W
+1243 3046 PD
+24 W
+1272 3044 PD
+24 W
+1299 3041 PD
+24 W
+1326 3043 PD
+24 W
+1355 3056 PD
+24 W
+1383 3066 PD
+24 W
+1412 3068 PD
+24 W
+1441 3073 PD
+24 W
+1470 3084 PD
+24 W
+1499 3092 PD
+24 W
+1527 3096 PD
+24 W
+1556 3097 PD
+24 W
+1584 3097 PD
+24 W
+1614 3105 PD
+24 W
+1642 3123 PD
+24 W
+1669 3133 PD
+24 W
+1696 3137 PD
+24 W
+1725 3142 PD
+24 W
+1753 3147 PD
+24 W
+1780 3159 PD
+24 W
+1807 3171 PD
+24 W
+1836 3186 PD
+24 W
+1863 3196 PD
+24 W
+1890 3200 PD
+24 W
+1886 3181 PD
+24 W
+1877 3164 PD
+24 W
+1866 3145 PD
+24 W
+1859 3127 PD
+24 W
+1854 3109 PD
+24 W
+1854 3091 PD
+24 W
+1856 3073 PD
+24 W
+1859 3055 PD
+24 W
+1859 3037 PD
+24 W
+1842 3018 PD
+24 W
+1816 3000 PD
+24 W
+1791 2983 PD
+24 W
+1764 2964 PD
+24 W
+1746 2946 PD
+24 W
+1735 2928 PD
+24 W
+1726 2910 PD
+24 W
+1720 2892 PD
+24 W
+1710 2874 PD
+24 W
+1694 2854 PD
+24 W
+1675 2836 PD
+24 W
+1649 2817 PD
+24 W
+1622 2798 PD
+24 W
+1597 2780 PD
+24 W
+1574 2763 PD
+24 W
+1556 2745 PD
+24 W
+1535 2725 PD
+24 W
+1520 2706 PD
+24 W
+1511 2687 PD
+24 W
+1507 2669 PD
+24 W
+1501 2650 PD
+24 W
+1493 2633 PD
+24 W
+1481 2614 PD
+24 W
+1460 2596 PD
+24 W
+1443 2577 PD
+24 W
+1428 2558 PD
+24 W
+1425 2543 PD
+24 W
+1413 2539 PD
+24 W
+1391 2521 PD
+24 W
+1377 2503 PD
+24 W
+1361 2485 PD
+24 W
+1353 2466 PD
+24 W
+1347 2447 PD
+24 W
+1344 2430 PD
+24 W
+1344 2421 PD
+24 W
+1345 2412 PD
+24 W
+1361 2395 PD
+24 W
+1376 2375 PD
+24 W
+1375 2358 PD
+24 W
+1348 2343 PD
+24 W
+1319 2336 PD
+24 W
+1291 2329 PD
+24 W
+1280 2319 PD
+24 W
+1268 2310 PD
+24 W
+1255 2291 PD
+24 W
+1237 2272 PD
+24 W
+1220 2253 PD
+24 W
+1200 2235 PD
+24 W
+1185 2217 PD
+24 W
+1173 2199 PD
+24 W
+1159 2180 PD
+24 W
+1147 2161 PD
+24 W
+1138 2143 PD
+24 W
+1128 2123 PD
+24 W
+1116 2105 PD
+24 W
+1100 2086 PD
+24 W
+1082 2069 PD
+24 W
+1064 2050 PD
+24 W
+1051 2033 PD
+24 W
+1035 2012 PD
+24 W
+1023 1994 PD
+24 W
+1010 1974 PD
+24 W
+999 1956 PD
+24 W
+986 1936 PD
+24 W
+977 1917 PD
+24 W
+966 1899 PD
+24 W
+956 1881 PD
+24 W
+946 1862 PD
+24 W
+934 1844 PD
+24 W
+921 1827 PD
+24 W
+913 1809 PD
+24 W
+910 1789 PD
+24 W
+909 1771 PD
+24 W
+907 1753 PD
+24 W
+908 1735 PD
+24 W
+906 1717 PD
+24 W
+902 1699 PD
+24 W
+899 1681 PD
+24 W
+917 1662 PD
+24 W
+932 1644 PD
+24 W
+937 1626 PD
+24 W
+942 1608 PD
+24 W
+949 1588 PD
+24 W
+956 1570 PD
+24 W
+960 1551 PD
+24 W
+964 1533 PD
+24 W
+966 1515 PD
+24 W
+970 1497 PD
+24 W
+963 1479 PD
+24 W
+963 1461 PD
+24 W
+966 1443 PD
+24 W
+982 1425 PD
+24 W
+1009 1407 PD
+24 W
+1037 1390 PD
+24 W
+1064 1375 PD
+24 W
+1091 1361 PD
+24 W
+1120 1348 PD
+24 W
+1147 1334 PD
+24 W
+1175 1317 PD
+24 W
+1193 1299 PD
+24 W
+1207 1281 PD
+24 W
+1218 1263 PD
+24 W
+1222 1244 PD
+24 W
+1225 1226 PD
+24 W
+1222 1207 PD
+24 W
+1219 1189 PD
+24 W
+1216 1171 PD
+24 W
+1211 1153 PD
+24 W
+1207 1135 PD
+24 W
+1206 1117 PD
+24 W
+1206 1099 PD
+24 W
+1205 1080 PD
+24 W
+1204 1062 PD
+24 W
+1205 1043 PD
+24 W
+1209 1026 PD
+24 W
+1213 1008 PD
+24 W
+1219 990 PD
+24 W
+1227 971 PD
+24 W
+1240 953 PD
+24 W
+1251 935 PD
+24 W
+1262 916 PD
+24 W
+1274 897 PD
+24 W
+1288 879 PD
+24 W
+1305 860 PD
+24 W
+1322 843 PD
+24 W
+1338 823 PD
+24 W
+1355 804 PD
+24 W
+1368 785 PD
+24 W
+1380 768 PD
+24 W
+1396 749 PD
+24 W
+1413 730 PD
+24 W
+1441 712 PD
+24 W
+1468 694 PD
+24 W
+1486 676 PD
+24 W
+1506 658 PD
+24 W
+1533 643 PD
+24 W
+1560 638 PD
+24 W
+1587 634 PD
+24 W
+1614 631 PD
+24 W
+1640 627 PD
+24 W
+1670 640 PD
+24 W
+1699 651 PD
+24 W
+1727 652 PD
+24 W
+1755 652 PD
+24 W
+1783 642 PD
+24 W
+1811 630 PD
+24 W
+1839 614 PD
+24 W
+1863 595 PD
+24 W
+1887 577 PD
+24 W
+1908 560 PD
+24 W
+1929 542 PD
+24 W
+1958 527 PD
+24 W
+1988 516 PD
+24 W
+2019 515 PD
+24 W
+2050 510 PD
+24 W
+2080 507 PD
+24 W
+2109 504 PD
+24 W
+2139 501 PD
+24 W
+2167 496 PD
+24 W
+2195 494 PD
+24 W
+2222 492 PD
+24 W
+2250 489 PD
+24 W
+2280 485 PD
+24 W
+2309 479 PD
+24 W
+2337 471 PD
+24 W
+2364 463 PD
+24 W
+2393 449 PD
+24 W
+2422 436 PD
+24 W
+2451 423 PD
+24 W
+2477 412 PD
+24 W
+2504 398 PD
+24 W
+2763 395 PD
+24 W
+2763 394 PD
+24 W
+2792 397 PD
+24 W
+2820 402 PD
+24 W
+2847 405 PD
+24 W
+2874 410 PD
+24 W
+2902 415 PD
+24 W
+2929 417 PD
+24 W
+2960 420 PD
+24 W
+2993 425 PD
+24 W
+3021 428 PD
+24 W
+3052 430 PD
+24 W
+3078 430 PD
+24 W
+3105 431 PD
+24 W
+3133 433 PD
+24 W
+3163 435 PD
+24 W
+3191 436 PD
+24 W
+3220 437 PD
+24 W
+3249 439 PD
+24 W
+3280 446 PD
+24 W
+3308 454 PD
+24 W
+3336 462 PD
+24 W
+3364 470 PD
+24 W
+3395 480 PD
+24 W
+3426 489 PD
+24 W
+3455 500 PD
+24 W
+3483 511 PD
+24 W
+3513 526 PD
+24 W
+3543 538 PD
+24 W
+3572 548 PD
+24 W
+3601 559 PD
+24 W
+3631 570 PD
+24 W
+3660 579 PD
+24 W
+3688 588 PD
+24 W
+3716 598 PD
+24 W
+3747 610 PD
+24 W
+3777 622 PD
+24 W
+3808 634 PD
+24 W
+3838 647 PD
+24 W
+3870 659 PD
+24 W
+3897 670 PD
+24 W
+3924 681 PD
+24 W
+3951 692 PD
+24 W
+3980 702 PD
+24 W
+4007 714 PD
+24 W
+4035 728 PD
+24 W
+4066 742 PD
+24 W
+4096 756 PD
+24 W
+4123 773 PD
+24 W
+4149 791 PD
+24 W
+4174 810 PD
+24 W
+4193 828 PD
+24 W
+4214 846 PD
+24 W
+4236 864 PD
+24 W
+4261 883 PD
+24 W
+4282 901 PD
+24 W
+4303 921 PD
+24 W
+4324 940 PD
+24 W
+4342 959 PD
+24 W
+4356 977 PD
+24 W
+4372 996 PD
+24 W
+4387 1015 PD
+24 W
+4398 1033 PD
+24 W
+4408 1051 PD
+24 W
+4419 1069 PD
+24 W
+4430 1088 PD
+24 W
+4440 1107 PD
+24 W
+4448 1127 PD
+24 W
+4454 1145 PD
+24 W
+4457 1163 PD
+24 W
+4457 1183 PD
+24 W
+4464 1202 PD
+24 W
+4467 1220 PD
+24 W
+4466 1238 PD
+24 W
+4427 1276 PD
+24 W
+4459 1263 PD
+24 W
+4477 1281 PD
+24 W
+4496 1299 PD
+24 W
+4510 1319 PD
+24 W
+4526 1338 PD
+24 W
+4540 1356 PD
+24 W
+4553 1374 PD
+24 W
+4564 1392 PD
+24 W
+4567 1411 PD
+24 W
+4571 1429 PD
+24 W
+4599 1438 PD
+24 W
+4598 1455 PD
+24 W
+4595 1473 PD
+24 W
+4623 1491 PD
+24 W
+4652 1493 PD
+24 W
+4681 1496 PD
+24 W
+4709 1497 PD
+24 W
+4737 1500 PD
+24 W
+4765 1504 PD
+24 W
+4792 1505 PD
+24 W
+4819 1508 PD
+24 W
+4846 1512 PD
+24 W
+4847 1520 PD
+24 W
+4873 1522 PD
+24 W
+4896 1541 PD
+24 W
+4912 1560 PD
+24 W
+4929 1579 PD
+24 W
+4927 1596 PD
+24 W
+4926 1597 PD
+24 W
+4930 1615 PD
+24 W
+4936 1633 PD
+24 W
+4929 1651 PD
+24 W
+4918 1669 PD
+24 W
+4905 1688 PD
+24 W
+4907 1706 PD
+24 W
+4901 1725 PD
+24 W
+4886 1744 PD
+24 W
+4873 1762 PD
+24 W
+4860 1781 PD
+24 W
+4851 1799 PD
+24 W
+4866 1817 PD
+24 W
+4893 1816 PD
+24 W
+4921 1812 PD
+24 W
+4952 1806 PD
+24 W
+4979 1800 PD
+24 W
+5007 1794 PD
+24 W
+5034 1791 PD
+24 W
+5063 1787 PD
+24 W
+5091 1786 PD
+24 W
+5122 1786 PD
+24 W
+5151 1784 PD
+24 W
+5181 1784 PD
+24 W
+5211 1786 PD
+24 W
+5239 1796 PD
+24 W
+5261 1815 PD
+24 W
+5284 1833 PD
+24 W
+5311 1845 PD
+24 W
+5338 1851 PD
+24 W
+5368 1857 PD
+24 W
+5395 1866 PD
+24 W
+5402 1868 PD
+24 W
+5414 1885 PD
+24 W
+5430 1905 PD
+24 W
+5446 1924 PD
+24 W
+5465 1942 PD
+24 W
+5483 1962 PD
+24 W
+5504 1980 PD
+24 W
+5526 1998 PD
+24 W
+5543 2018 PD
+24 W
+5554 2038 PD
+24 W
+5565 2058 PD
+24 W
+5576 2077 PD
+24 W
+5589 2095 PD
+24 W
+5602 2113 PD
+24 W
+5610 2131 PD
+24 W
+5620 2149 PD
+24 W
+5626 2168 PD
+24 W
+5630 2186 PD
+24 W
+5636 2204 PD
+24 W
+5640 2223 PD
+24 W
+5644 2241 PD
+24 W
+5651 2257 PD
+24 W
+5651 2260 PD
+24 W
+5652 2278 PD
+24 W
+5653 2297 PD
+24 W
+5651 2315 PD
+24 W
+5647 2334 PD
+24 W
+5640 2352 PD
+24 W
+5625 2370 PD
+24 W
+5615 2389 PD
+24 W
+5625 2408 PD
+24 W
+5626 2426 PD
+24 W
+5615 2445 PD
+24 W
+5609 2462 PD
+24 W
+5620 2481 PD
+24 W
+5627 2500 PD
+24 W
+5622 2518 PD
+24 W
+5613 2536 PD
+24 W
+5605 2556 PD
+24 W
+5600 2574 PD
+24 W
+5591 2593 PD
+24 W
+5583 2612 PD
+24 W
+5583 2630 PD
+24 W
+5597 2648 PD
+24 W
+5611 2667 PD
+24 W
+5618 2686 PD
+24 W
+5616 2704 PD
+24 W
+5622 2722 PD
+24 W
+5635 2741 PD
+24 W
+5654 2760 PD
+24 W
+5668 2777 PD
+24 W
+5684 2796 PD
+24 W
+5712 2814 PD
+24 W
+5741 2817 PD
+24 W
+5769 2813 PD
+24 W
+5796 2806 PD
+24 W
+5823 2798 PD
+24 W
+5851 2791 PD
+24 W
+5881 2786 PD
+24 W
+5909 2778 PD
+24 W
+5936 2770 PD
+24 W
+5963 2759 PD
+24 W
+5985 2742 PD
+24 W
+5990 2739 PD
+24 W
+6016 2732 PD
+24 W
+6045 2721 PD
+24 W
+6072 2719 PD
+24 W
+6101 2720 PD
+24 W
+6129 2726 PD
+24 W
+6157 2730 PD
+24 W
+6184 2734 PD
+24 W
+6211 2742 PD
+24 W
+6238 2751 PD
+24 W
+1014 2912 PD
+24 W
+1014 2913 PD
+24 W
+1042 2922 PD
+24 W
+1071 2931 PD
+24 W
+1098 2935 PD
+24 W
+1125 2942 PD
+24 W
+1154 2952 PD
+24 W
+1166 2971 PD
+24 W
+1192 2989 PD
+24 W
+1219 2995 PD
+24 W
+1248 2999 PD
+24 W
+1277 3003 PD
+24 W
+1307 3006 PD
+24 W
+1337 3005 PD
+24 W
+1367 3006 PD
+24 W
+1394 3007 PD
+24 W
+1424 3011 PD
+24 W
+1454 3019 PD
+24 W
+1484 3028 PD
+24 W
+1511 3036 PD
+24 W
+1540 3047 PD
+24 W
+1568 3055 PD
+24 W
+1595 3062 PD
+24 W
+1622 3065 PD
+24 W
+1652 3071 PD
+24 W
+1678 3075 PD
+24 W
+1709 3082 PD
+24 W
+1736 3088 PD
+24 W
+1764 3095 PD
+24 W
+1772 3076 PD
+24 W
+1756 3056 PD
+24 W
+1735 3037 PD
+24 W
+1712 3017 PD
+24 W
+1689 2998 PD
+24 W
+1668 2980 PD
+24 W
+1645 2960 PD
+24 W
+1631 2941 PD
+24 W
+1622 2921 PD
+24 W
+1611 2904 PD
+24 W
+1602 2886 PD
+24 W
+1589 2867 PD
+24 W
+1570 2848 PD
+24 W
+1549 2829 PD
+24 W
+1523 2810 PD
+24 W
+1502 2792 PD
+24 W
+1482 2772 PD
+24 W
+1464 2753 PD
+24 W
+1454 2735 PD
+24 W
+1448 2716 PD
+24 W
+1442 2698 PD
+24 W
+1437 2678 PD
+24 W
+1427 2658 PD
+24 W
+1419 2640 PD
+24 W
+1406 2620 PD
+24 W
+1390 2602 PD
+24 W
+1365 2584 PD
+24 W
+1334 2569 PD
+24 W
+1304 2558 PD
+24 W
+1276 2543 PD
+24 W
+1259 2525 PD
+24 W
+1255 2505 PD
+24 W
+1255 2487 PD
+24 W
+1258 2467 PD
+24 W
+1262 2449 PD
+24 W
+1266 2430 PD
+24 W
+1272 2411 PD
+24 W
+1275 2392 PD
+24 W
+1279 2374 PD
+24 W
+1252 2371 PD
+24 W
+1222 2365 PD
+24 W
+1194 2357 PD
+24 W
+1167 2348 PD
+24 W
+1151 2340 PD
+24 W
+1139 2329 PD
+24 W
+1111 2310 PD
+24 W
+1090 2293 PD
+24 W
+1067 2274 PD
+24 W
+1049 2255 PD
+24 W
+1030 2236 PD
+24 W
+1012 2219 PD
+24 W
+994 2199 PD
+24 W
+981 2181 PD
+24 W
+966 2162 PD
+24 W
+950 2144 PD
+24 W
+938 2127 PD
+24 W
+928 2108 PD
+24 W
+920 2090 PD
+24 W
+913 2073 PD
+24 W
+906 1382 PD
+24 W
+906 1381 PD
+24 W
+924 1362 PD
+24 W
+939 1344 PD
+24 W
+961 1325 PD
+24 W
+978 1306 PD
+24 W
+991 1288 PD
+24 W
+1001 1271 PD
+24 W
+1009 1253 PD
+24 W
+1017 1235 PD
+24 W
+1025 1217 PD
+24 W
+1035 1199 PD
+24 W
+1046 1181 PD
+24 W
+1059 1162 PD
+24 W
+1074 1144 PD
+24 W
+1096 1126 PD
+24 W
+1109 1109 PD
+24 W
+1114 1091 PD
+24 W
+1114 1073 PD
+24 W
+1112 1054 PD
+24 W
+1110 1034 PD
+24 W
+1110 1014 PD
+24 W
+1116 994 PD
+24 W
+1125 975 PD
+24 W
+1132 956 PD
+24 W
+1144 936 PD
+24 W
+1159 917 PD
+24 W
+1172 899 PD
+24 W
+1188 882 PD
+24 W
+1203 864 PD
+24 W
+1215 845 PD
+24 W
+1227 827 PD
+24 W
+1243 808 PD
+24 W
+1260 789 PD
+24 W
+1276 772 PD
+24 W
+1291 753 PD
+24 W
+1303 735 PD
+24 W
+1317 718 PD
+24 W
+1328 700 PD
+24 W
+1338 681 PD
+24 W
+1348 662 PD
+24 W
+1356 644 PD
+24 W
+1364 626 PD
+24 W
+1366 608 PD
+24 W
+1371 588 PD
+24 W
+1374 570 PD
+24 W
+1384 552 PD
+24 W
+1411 539 PD
+24 W
+1439 532 PD
+24 W
+1467 530 PD
+24 W
+1496 530 PD
+24 W
+1524 532 PD
+24 W
+1552 535 PD
+24 W
+1582 544 PD
+24 W
+1609 554 PD
+24 W
+1633 572 PD
+24 W
+1656 590 PD
+24 W
+1676 608 PD
+24 W
+1702 625 PD
+24 W
+1729 631 PD
+24 W
+1739 613 PD
+24 W
+1766 610 PD
+24 W
+1781 592 PD
+24 W
+1807 574 PD
+24 W
+1835 563 PD
+24 W
+1853 544 PD
+24 W
+1856 527 PD
+24 W
+1861 509 PD
+24 W
+1858 490 PD
+24 W
+1870 471 PD
+24 W
+1891 454 PD
+24 W
+1905 436 PD
+24 W
+1913 417 PD
+24 W
+1926 398 PD
+24 W
+3442 396 PD
+24 W
+3442 394 PD
+24 W
+3471 394 PD
+24 W
+3500 405 PD
+24 W
+3529 420 PD
+24 W
+3551 438 PD
+24 W
+3577 452 PD
+24 W
+3605 469 PD
+24 W
+3633 481 PD
+24 W
+3662 489 PD
+24 W
+3690 494 PD
+24 W
+3719 501 PD
+24 W
+3749 511 PD
+24 W
+3776 522 PD
+24 W
+3806 532 PD
+24 W
+3836 542 PD
+24 W
+3864 549 PD
+24 W
+3891 556 PD
+24 W
+3919 564 PD
+24 W
+3947 577 PD
+24 W
+3976 592 PD
+24 W
+4006 607 PD
+24 W
+4033 620 PD
+24 W
+4063 633 PD
+24 W
+4091 646 PD
+24 W
+4118 660 PD
+24 W
+4148 673 PD
+24 W
+4176 688 PD
+24 W
+4200 706 PD
+24 W
+4228 723 PD
+24 W
+4254 737 PD
+24 W
+4282 752 PD
+24 W
+4308 770 PD
+24 W
+4328 787 PD
+24 W
+4352 805 PD
+24 W
+4375 824 PD
+24 W
+4395 843 PD
+24 W
+4414 861 PD
+24 W
+4433 880 PD
+24 W
+4445 898 PD
+24 W
+4455 918 PD
+24 W
+4467 937 PD
+24 W
+4485 957 PD
+24 W
+4498 976 PD
+24 W
+4512 995 PD
+24 W
+4526 1013 PD
+24 W
+4540 1030 PD
+24 W
+4551 1049 PD
+24 W
+4561 1068 PD
+24 W
+4567 1086 PD
+24 W
+4575 1104 PD
+24 W
+4585 1123 PD
+24 W
+4587 1142 PD
+24 W
+4583 1159 PD
+24 W
+4574 1177 PD
+24 W
+4565 1195 PD
+24 W
+4551 1214 PD
+24 W
+4574 1191 PD
+24 W
+4573 1190 PD
+24 W
+4551 1208 PD
+24 W
+4544 1226 PD
+24 W
+4544 1245 PD
+24 W
+4550 1262 PD
+24 W
+4557 1280 PD
+24 W
+4569 1299 PD
+24 W
+4580 1316 PD
+24 W
+4592 1335 PD
+24 W
+4604 1353 PD
+24 W
+4616 1371 PD
+24 W
+4624 1390 PD
+24 W
+4632 1409 PD
+24 W
+4639 1426 PD
+24 W
+4657 1444 PD
+24 W
+4684 1443 PD
+24 W
+4713 1443 PD
+24 W
+4741 1456 PD
+24 W
+4769 1470 PD
+24 W
+4796 1477 PD
+24 W
+4823 1475 PD
+24 W
+4850 1463 PD
+24 W
+4877 1465 PD
+24 W
+4879 1465 PD
+24 W
+4905 1470 PD
+24 W
+4932 1489 PD
+24 W
+4953 1508 PD
+24 W
+4974 1526 PD
+24 W
+4987 1544 PD
+24 W
+4997 1561 PD
+24 W
+5001 1579 PD
+24 W
+5004 1593 PD
+24 W
+5002 1598 PD
+24 W
+5000 1616 PD
+24 W
+4998 1635 PD
+24 W
+4991 1653 PD
+24 W
+4982 1671 PD
+24 W
+4969 1689 PD
+24 W
+4952 1707 PD
+24 W
+4937 1725 PD
+24 W
+4922 1743 PD
+24 W
+4914 1761 PD
+24 W
+4941 1761 PD
+24 W
+4970 1749 PD
+24 W
+4997 1742 PD
+24 W
+5028 1736 PD
+24 W
+5059 1732 PD
+24 W
+5089 1729 PD
+24 W
+5116 1724 PD
+24 W
+5144 1722 PD
+24 W
+5172 1720 PD
+24 W
+5200 1718 PD
+24 W
+5227 1716 PD
+24 W
+5255 1721 PD
+24 W
+5282 1729 PD
+24 W
+5309 1742 PD
+24 W
+5336 1761 PD
+24 W
+5359 1779 PD
+24 W
+5384 1797 PD
+24 W
+5413 1810 PD
+24 W
+5440 1824 PD
+24 W
+5468 1837 PD
+24 W
+5494 1853 PD
+24 W
+5497 1854 PD
+24 W
+5526 1852 PD
+24 W
+5553 1862 PD
+24 W
+5576 1881 PD
+24 W
+5595 1898 PD
+24 W
+5613 1918 PD
+24 W
+5625 1935 PD
+24 W
+5636 1954 PD
+24 W
+5646 1973 PD
+24 W
+5655 1992 PD
+24 W
+5663 2010 PD
+24 W
+5668 2029 PD
+24 W
+5675 2047 PD
+24 W
+5683 2065 PD
+24 W
+5690 2084 PD
+24 W
+5697 2102 PD
+24 W
+5705 2121 PD
+24 W
+5716 2139 PD
+24 W
+5722 2157 PD
+24 W
+5726 2175 PD
+24 W
+5727 2194 PD
+24 W
+5727 2212 PD
+24 W
+5728 2230 PD
+24 W
+5727 2248 PD
+24 W
+5726 2251 PD
+24 W
+5710 2267 PD
+24 W
+5696 2285 PD
+24 W
+5689 2304 PD
+24 W
+5681 2322 PD
+24 W
+5673 2341 PD
+24 W
+5662 2360 PD
+24 W
+5653 2378 PD
+24 W
+5668 2395 PD
+24 W
+5671 2413 PD
+24 W
+5665 2431 PD
+24 W
+5659 2448 PD
+24 W
+5668 2466 PD
+24 W
+5677 2485 PD
+24 W
+5681 2505 PD
+24 W
+5681 2523 PD
+24 W
+5680 2541 PD
+24 W
+5675 2560 PD
+24 W
+5670 2580 PD
+24 W
+5664 2598 PD
+24 W
+5658 2616 PD
+24 W
+5654 2635 PD
+24 W
+5681 2649 PD
+24 W
+5710 2646 PD
+24 W
+5737 2656 PD
+24 W
+5763 2675 PD
+24 W
+5790 2689 PD
+24 W
+5818 2699 PD
+24 W
+5845 2702 PD
+24 W
+5873 2710 PD
+24 W
+5901 2706 PD
+24 W
+5931 2700 PD
+24 W
+5961 2693 PD
+24 W
+5990 2682 PD
+24 W
+6018 2676 PD
+24 W
+6047 2674 PD
+24 W
+6076 2667 PD
+24 W
+6103 2666 PD
+24 W
+6133 2663 PD
+24 W
+6160 2657 PD
+24 W
+6189 2655 PD
+24 W
+6218 2656 PD
+24 W
+6245 2661 PD
+24 W
+918 2829 PD
+24 W
+946 2846 PD
+24 W
+975 2857 PD
+24 W
+1002 2861 PD
+24 W
+1031 2859 PD
+24 W
+1058 2864 PD
+24 W
+1080 2882 PD
+24 W
+1110 2891 PD
+24 W
+1141 2891 PD
+24 W
+1168 2891 PD
+24 W
+1196 2898 PD
+24 W
+1208 2915 PD
+24 W
+1215 2933 PD
+24 W
+1232 2952 PD
+24 W
+1259 2954 PD
+24 W
+1287 2949 PD
+24 W
+1315 2954 PD
+24 W
+1342 2961 PD
+24 W
+1372 2963 PD
+24 W
+1399 2966 PD
+24 W
+1427 2967 PD
+24 W
+1454 2968 PD
+24 W
+1481 2973 PD
+24 W
+1510 2975 PD
+24 W
+1538 2978 PD
+24 W
+1566 2978 PD
+24 W
+1567 2959 PD
+24 W
+1556 2941 PD
+24 W
+1543 2922 PD
+24 W
+1532 2903 PD
+24 W
+1522 2885 PD
+24 W
+1509 2867 PD
+24 W
+1489 2848 PD
+24 W
+1469 2829 PD
+24 W
+1450 2810 PD
+24 W
+1434 2791 PD
+24 W
+1421 2773 PD
+24 W
+1410 2756 PD
+24 W
+1398 2737 PD
+24 W
+1389 2718 PD
+24 W
+1379 2700 PD
+24 W
+1369 2679 PD
+24 W
+1359 2660 PD
+24 W
+1348 2641 PD
+24 W
+1319 2621 PD
+24 W
+1292 2609 PD
+24 W
+1263 2590 PD
+24 W
+1243 2572 PD
+24 W
+1230 2554 PD
+24 W
+1216 2536 PD
+24 W
+1206 2516 PD
+24 W
+1198 2498 PD
+24 W
+1191 2479 PD
+24 W
+1188 2461 PD
+24 W
+1188 2442 PD
+24 W
+1190 2424 PD
+24 W
+1194 2405 PD
+24 W
+1188 2386 PD
+24 W
+1161 2380 PD
+24 W
+1133 2364 PD
+24 W
+1104 2355 PD
+24 W
+1076 2343 PD
+24 W
+1049 2325 PD
+24 W
+1028 2307 PD
+24 W
+1012 2290 PD
+24 W
+994 2270 PD
+24 W
+978 2252 PD
+24 W
+960 2233 PD
+24 W
+945 2215 PD
+24 W
+927 2197 PD
+24 W
+903 2780 PD
+24 W
+903 2781 PD
+24 W
+931 2785 PD
+24 W
+958 2794 PD
+24 W
+985 2808 PD
+24 W
+1014 2814 PD
+24 W
+1040 2812 PD
+24 W
+1068 2819 PD
+24 W
+1096 2830 PD
+24 W
+1125 2834 PD
+24 W
+1153 2834 PD
+24 W
+1182 2841 PD
+24 W
+1209 2854 PD
+24 W
+1236 2873 PD
+24 W
+1266 2880 PD
+24 W
+1292 2888 PD
+24 W
+1319 2902 PD
+24 W
+1347 2909 PD
+24 W
+1374 2913 PD
+24 W
+1404 2917 PD
+24 W
+1434 2915 PD
+24 W
+1438 2896 PD
+24 W
+1414 2878 PD
+24 W
+1397 2859 PD
+24 W
+1384 2841 PD
+24 W
+1373 2822 PD
+24 W
+1369 2802 PD
+24 W
+1366 2782 PD
+24 W
+1349 2764 PD
+24 W
+1330 2747 PD
+24 W
+1312 2729 PD
+24 W
+1296 2711 PD
+24 W
+1283 2692 PD
+24 W
+1269 2674 PD
+24 W
+1247 2656 PD
+24 W
+1226 2636 PD
+24 W
+1211 2618 PD
+24 W
+1193 2601 PD
+24 W
+1173 2583 PD
+24 W
+1160 2565 PD
+24 W
+1145 2546 PD
+24 W
+1130 2527 PD
+24 W
+1123 2508 PD
+24 W
+1119 2488 PD
+24 W
+1117 2470 PD
+24 W
+1118 2451 PD
+24 W
+1120 2433 PD
+24 W
+1123 2415 PD
+24 W
+1123 2397 PD
+24 W
+1095 2385 PD
+24 W
+1067 2373 PD
+24 W
+1039 2361 PD
+24 W
+1014 2343 PD
+24 W
+1001 2325 PD
+24 W
+973 2316 PD
+24 W
+961 2298 PD
+24 W
+946 2279 PD
+24 W
+925 2262 PD
+24 W
+902 2702 PD
+24 W
+929 2719 PD
+24 W
+957 2732 PD
+24 W
+985 2744 PD
+24 W
+1012 2756 PD
+24 W
+1042 2761 PD
+24 W
+1072 2765 PD
+24 W
+1101 2774 PD
+24 W
+1128 2784 PD
+24 W
+1159 2787 PD
+24 W
+1186 2789 PD
+24 W
+1214 2796 PD
+24 W
+1243 2808 PD
+24 W
+1272 2819 PD
+24 W
+1286 2801 PD
+24 W
+1276 2782 PD
+24 W
+1264 2762 PD
+24 W
+1251 2743 PD
+24 W
+1233 2723 PD
+24 W
+1214 2704 PD
+24 W
+1196 2685 PD
+24 W
+1180 2666 PD
+24 W
+1162 2648 PD
+24 W
+1143 2629 PD
+24 W
+1124 2611 PD
+24 W
+1104 2591 PD
+24 W
+1086 2572 PD
+24 W
+1070 2554 PD
+24 W
+1057 2536 PD
+24 W
+1050 2518 PD
+24 W
+1051 2500 PD
+24 W
+1054 2483 PD
+24 W
+1053 2465 PD
+24 W
+1057 2446 PD
+24 W
+1067 2428 PD
+24 W
+1044 2410 PD
+24 W
+1017 2397 PD
+24 W
+990 2389 PD
+24 W
+965 2371 PD
+24 W
+936 2355 PD
+24 W
+909 2338 PD
+24 W
+905 2612 PD
+24 W
+925 2631 PD
+24 W
+947 2652 PD
+24 W
+961 2670 PD
+24 W
+988 2686 PD
+24 W
+1017 2702 PD
+24 W
+1044 2705 PD
+24 W
+1071 2711 PD
+24 W
+1098 2722 PD
+24 W
+1125 2729 PD
+24 W
+1153 2734 PD
+24 W
+1182 2742 PD
+24 W
+1176 2723 PD
+24 W
+1161 2704 PD
+24 W
+1144 2684 PD
+24 W
+1124 2666 PD
+24 W
+1106 2648 PD
+24 W
+1086 2629 PD
+24 W
+1065 2610 PD
+24 W
+1054 2591 PD
+24 W
+1038 2573 PD
+24 W
+1019 2554 PD
+24 W
+1004 2536 PD
+24 W
+994 2517 PD
+24 W
+991 2498 PD
+24 W
+989 2480 PD
+24 W
+989 2462 PD
+24 W
+984 2442 PD
+24 W
+964 2425 PD
+24 W
+938 2412 PD
+24 W
+911 1183 PD
+24 W
+920 1183 PD
+24 W
+939 1162 PD
+24 W
+959 1142 PD
+24 W
+981 1124 PD
+24 W
+1000 1106 PD
+24 W
+1018 1087 PD
+24 W
+1033 1068 PD
+24 W
+1038 1049 PD
+24 W
+1039 1031 PD
+24 W
+1037 1011 PD
+24 W
+1041 993 PD
+24 W
+1047 975 PD
+24 W
+1050 957 PD
+24 W
+1060 939 PD
+24 W
+1078 921 PD
+24 W
+1102 902 PD
+24 W
+1125 883 PD
+24 W
+1125 865 PD
+24 W
+1140 846 PD
+24 W
+1168 833 PD
+24 W
+1190 815 PD
+24 W
+1196 796 PD
+24 W
+1197 778 PD
+24 W
+1212 759 PD
+24 W
+1240 749 PD
+24 W
+1241 731 PD
+24 W
+1251 713 PD
+24 W
+1279 702 PD
+24 W
+1290 683 PD
+24 W
+1299 664 PD
+24 W
+1316 646 PD
+24 W
+1330 627 PD
+24 W
+1333 608 PD
+24 W
+1329 591 PD
+24 W
+1325 572 PD
+24 W
+1316 554 PD
+24 W
+1308 536 PD
+24 W
+1308 517 PD
+24 W
+1304 500 PD
+24 W
+1277 487 PD
+24 W
+1267 504 PD
+24 W
+1239 510 PD
+24 W
+1212 527 PD
+24 W
+1185 538 PD
+24 W
+1159 549 PD
+24 W
+1155 567 PD
+24 W
+1128 581 PD
+24 W
+1114 599 PD
+24 W
+1116 617 PD
+24 W
+1098 636 PD
+24 W
+1107 655 PD
+24 W
+1113 673 PD
+24 W
+1099 691 PD
+24 W
+1072 706 PD
+24 W
+1044 720 PD
+24 W
+1046 737 PD
+24 W
+1039 755 PD
+24 W
+1011 769 PD
+24 W
+1021 788 PD
+24 W
+1022 806 PD
+24 W
+1006 824 PD
+24 W
+998 842 PD
+24 W
+995 859 PD
+24 W
+989 877 PD
+24 W
+973 896 PD
+24 W
+956 913 PD
+24 W
+927 929 PD
+24 W
+1043 883 PD
+24 W
+1042 883 PD
+24 W
+1070 877 PD
+24 W
+1079 858 PD
+24 W
+1082 840 PD
+24 W
+1082 823 PD
+24 W
+1112 810 PD
+24 W
+1131 792 PD
+24 W
+1134 773 PD
+24 W
+1147 755 PD
+24 W
+1169 736 PD
+24 W
+1189 719 PD
+24 W
+1216 712 PD
+24 W
+1226 693 PD
+24 W
+1238 674 PD
+24 W
+1259 656 PD
+24 W
+1265 638 PD
+24 W
+1266 619 PD
+24 W
+1264 601 PD
+24 W
+1263 584 PD
+24 W
+1268 565 PD
+24 W
+1241 548 PD
+24 W
+1213 560 PD
+24 W
+1201 578 PD
+24 W
+1173 595 PD
+24 W
+1150 613 PD
+24 W
+1148 630 PD
+24 W
+1144 649 PD
+24 W
+1148 667 PD
+24 W
+1161 685 PD
+24 W
+1159 703 PD
+24 W
+1131 710 PD
+24 W
+1109 727 PD
+24 W
+1101 745 PD
+24 W
+1086 765 PD
+24 W
+1058 783 PD
+24 W
+1048 802 PD
+24 W
+1048 821 PD
+24 W
+1044 839 PD
+24 W
+1034 857 PD
+24 W
+905 866 PD
+24 W
+904 866 PD
+24 W
+927 848 PD
+24 W
+947 830 PD
+24 W
+952 812 PD
+24 W
+960 793 PD
+24 W
+952 774 PD
+24 W
+946 757 PD
+24 W
+975 742 PD
+24 W
+992 724 PD
+24 W
+993 706 PD
+24 W
+1021 694 PD
+24 W
+1048 687 PD
+24 W
+1076 669 PD
+24 W
+1086 650 PD
+24 W
+1078 633 PD
+24 W
+1063 615 PD
+24 W
+1065 597 PD
+24 W
+1060 580 PD
+24 W
+1089 570 PD
+24 W
+1116 561 PD
+24 W
+1108 542 PD
+24 W
+1108 524 PD
+24 W
+1137 515 PD
+24 W
+1166 510 PD
+24 W
+1194 502 PD
+24 W
+1212 484 PD
+24 W
+1214 466 PD
+24 W
+1241 458 PD
+24 W
+1269 452 PD
+24 W
+1297 441 PD
+24 W
+1322 424 PD
+24 W
+1340 405 PD
+24 W
+3741 395 PD
+24 W
+3741 394 PD
+24 W
+3762 412 PD
+24 W
+3790 424 PD
+24 W
+3819 428 PD
+24 W
+3848 432 PD
+24 W
+3877 440 PD
+24 W
+3905 452 PD
+24 W
+3930 470 PD
+24 W
+3955 488 PD
+24 W
+3975 505 PD
+24 W
+4002 519 PD
+24 W
+4031 528 PD
+24 W
+4058 534 PD
+24 W
+4086 540 PD
+24 W
+4113 548 PD
+24 W
+4140 559 PD
+24 W
+4170 574 PD
+24 W
+4198 591 PD
+24 W
+4225 607 PD
+24 W
+4253 624 PD
+24 W
+4281 639 PD
+24 W
+4307 653 PD
+24 W
+4336 669 PD
+24 W
+4363 681 PD
+24 W
+4391 696 PD
+24 W
+4419 711 PD
+24 W
+4448 724 PD
+24 W
+4476 742 PD
+24 W
+4497 762 PD
+24 W
+4509 780 PD
+24 W
+4517 798 PD
+24 W
+4529 818 PD
+24 W
+4541 835 PD
+24 W
+4554 853 PD
+24 W
+4563 872 PD
+24 W
+4570 891 PD
+24 W
+4578 910 PD
+24 W
+4589 929 PD
+24 W
+4601 947 PD
+24 W
+4612 966 PD
+24 W
+4624 983 PD
+24 W
+4635 1001 PD
+24 W
+4646 1020 PD
+24 W
+4659 1039 PD
+24 W
+4668 1057 PD
+24 W
+4672 1075 PD
+24 W
+4679 1093 PD
+24 W
+4680 1111 PD
+24 W
+4682 1129 PD
+24 W
+4678 1147 PD
+24 W
+4669 1164 PD
+24 W
+4670 1166 PD
+24 W
+4654 1183 PD
+24 W
+4638 1201 PD
+24 W
+4627 1220 PD
+24 W
+4623 1237 PD
+24 W
+4623 1255 PD
+24 W
+4632 1274 PD
+24 W
+4645 1292 PD
+24 W
+4660 1310 PD
+24 W
+4669 1329 PD
+24 W
+4670 1346 PD
+24 W
+4696 1364 PD
+24 W
+4708 1382 PD
+24 W
+4735 1397 PD
+24 W
+4762 1408 PD
+24 W
+4789 1406 PD
+24 W
+4816 1404 PD
+24 W
+4843 1408 PD
+24 W
+4847 1407 PD
+24 W
+4872 1409 PD
+24 W
+4899 1415 PD
+24 W
+4927 1431 PD
+24 W
+4956 1445 PD
+24 W
+4983 1456 PD
+24 W
+5008 1475 PD
+24 W
+5030 1494 PD
+24 W
+5043 1511 PD
+24 W
+5055 1530 PD
+24 W
+5060 1547 PD
+24 W
+5062 1565 PD
+24 W
+5063 1583 PD
+24 W
+5061 1602 PD
+24 W
+5059 1618 PD
+24 W
+5056 1619 PD
+24 W
+5049 1637 PD
+24 W
+5037 1655 PD
+24 W
+5018 1673 PD
+24 W
+4995 1690 PD
+24 W
+4979 1709 PD
+24 W
+5008 1714 PD
+24 W
+5036 1704 PD
+24 W
+5064 1697 PD
+24 W
+5094 1692 PD
+24 W
+5127 1687 PD
+24 W
+5155 1681 PD
+24 W
+5184 1673 PD
+24 W
+5210 1664 PD
+24 W
+5238 1660 PD
+24 W
+5266 1657 PD
+24 W
+5293 1661 PD
+24 W
+5321 1670 PD
+24 W
+5348 1683 PD
+24 W
+5376 1699 PD
+24 W
+5403 1715 PD
+24 W
+5431 1730 PD
+24 W
+5457 1748 PD
+24 W
+5470 1766 PD
+24 W
+5498 1777 PD
+24 W
+5525 1770 PD
+24 W
+5537 1765 PD
+24 W
+5555 1765 PD
+24 W
+5583 1768 PD
+24 W
+5611 1780 PD
+24 W
+5640 1794 PD
+24 W
+5663 1813 PD
+24 W
+5682 1831 PD
+24 W
+5698 1850 PD
+24 W
+5709 1869 PD
+24 W
+5723 1887 PD
+24 W
+5734 1906 PD
+24 W
+5744 1924 PD
+24 W
+5754 1943 PD
+24 W
+5763 1961 PD
+24 W
+5774 1980 PD
+24 W
+5784 1998 PD
+24 W
+5792 2017 PD
+24 W
+5800 2035 PD
+24 W
+5806 2053 PD
+24 W
+5812 2072 PD
+24 W
+5815 2091 PD
+24 W
+5816 2110 PD
+24 W
+5822 2128 PD
+24 W
+5822 2147 PD
+24 W
+5819 2166 PD
+24 W
+5809 2183 PD
+24 W
+5800 2199 PD
+24 W
+5798 2201 PD
+24 W
+5798 2220 PD
+24 W
+5795 2238 PD
+24 W
+5780 2256 PD
+24 W
+5772 2274 PD
+24 W
+5762 2294 PD
+24 W
+5755 2311 PD
+24 W
+5748 2330 PD
+24 W
+5740 2348 PD
+24 W
+5731 2366 PD
+24 W
+5735 2384 PD
+24 W
+5744 2404 PD
+24 W
+5732 2422 PD
+24 W
+5728 2441 PD
+24 W
+5747 2459 PD
+24 W
+5755 2478 PD
+24 W
+5754 2497 PD
+24 W
+5751 2517 PD
+24 W
+5746 2536 PD
+24 W
+5748 2554 PD
+24 W
+5767 2571 PD
+24 W
+5796 2584 PD
+24 W
+5823 2591 PD
+24 W
+5851 2605 PD
+24 W
+5874 2623 PD
+24 W
+5902 2637 PD
+24 W
+5930 2648 PD
+24 W
+5961 2646 PD
+24 W
+5992 2641 PD
+24 W
+6020 2635 PD
+24 W
+6051 2628 PD
+24 W
+6082 2621 PD
+24 W
+6111 2616 PD
+24 W
+6138 2614 PD
+24 W
+6166 2610 PD
+24 W
+6196 2611 PD
+24 W
+6225 2613 PD
+24 W
+6251 2614 PD
+24 W
+4022 394 PD
+24 W
+4018 397 PD
+24 W
+4048 410 PD
+24 W
+4076 423 PD
+24 W
+4103 435 PD
+24 W
+4131 443 PD
+24 W
+4158 454 PD
+24 W
+4186 464 PD
+24 W
+4214 475 PD
+24 W
+4242 485 PD
+24 W
+4269 496 PD
+24 W
+4296 507 PD
+24 W
+4319 525 PD
+24 W
+4336 546 PD
+24 W
+4349 563 PD
+24 W
+4365 581 PD
+24 W
+4380 599 PD
+24 W
+4399 617 PD
+24 W
+4427 636 PD
+24 W
+4455 653 PD
+24 W
+4483 665 PD
+24 W
+4510 677 PD
+24 W
+4537 685 PD
+24 W
+4564 694 PD
+24 W
+4589 713 PD
+24 W
+4601 732 PD
+24 W
+4609 750 PD
+24 W
+4617 768 PD
+24 W
+4626 786 PD
+24 W
+4635 805 PD
+24 W
+4642 823 PD
+24 W
+4648 841 PD
+24 W
+4660 860 PD
+24 W
+4669 879 PD
+24 W
+4682 898 PD
+24 W
+4697 916 PD
+24 W
+4715 934 PD
+24 W
+4725 953 PD
+24 W
+4740 970 PD
+24 W
+4751 988 PD
+24 W
+4775 1008 PD
+24 W
+4792 1026 PD
+24 W
+4802 1044 PD
+24 W
+4800 1063 PD
+24 W
+4801 1081 PD
+24 W
+4793 1097 PD
+24 W
+4790 1101 PD
+24 W
+4785 1119 PD
+24 W
+4778 1138 PD
+24 W
+4768 1157 PD
+24 W
+4756 1175 PD
+24 W
+4733 1194 PD
+24 W
+4711 1213 PD
+24 W
+4718 1230 PD
+24 W
+4708 1249 PD
+24 W
+4707 1268 PD
+24 W
+4704 1287 PD
+24 W
+4717 1305 PD
+24 W
+4745 1316 PD
+24 W
+4772 1310 PD
+24 W
+4799 1301 PD
+24 W
+4825 1294 PD
+24 W
+4831 1292 PD
+24 W
+4853 1293 PD
+24 W
+4873 1311 PD
+24 W
+4894 1329 PD
+24 W
+4923 1343 PD
+24 W
+4951 1353 PD
+24 W
+4979 1369 PD
+24 W
+5006 1386 PD
+24 W
+5026 1404 PD
+24 W
+5040 1423 PD
+24 W
+5062 1440 PD
+24 W
+5087 1458 PD
+24 W
+5104 1478 PD
+24 W
+5109 1496 PD
+24 W
+5116 1513 PD
+24 W
+5119 1532 PD
+24 W
+5112 1549 PD
+24 W
+5104 1567 PD
+24 W
+5099 1586 PD
+24 W
+5095 1603 PD
+24 W
+5092 1605 PD
+24 W
+5088 1622 PD
+24 W
+5115 1636 PD
+24 W
+5142 1632 PD
+24 W
+5169 1627 PD
+24 W
+5198 1621 PD
+24 W
+5225 1616 PD
+24 W
+5252 1612 PD
+24 W
+5280 1610 PD
+24 W
+5309 1609 PD
+24 W
+5337 1615 PD
+24 W
+5365 1623 PD
+24 W
+5392 1635 PD
+24 W
+5420 1651 PD
+24 W
+5448 1665 PD
+24 W
+5476 1675 PD
+24 W
+5497 1681 PD
+24 W
+5503 1679 PD
+24 W
+5530 1671 PD
+24 W
+5557 1667 PD
+24 W
+5586 1667 PD
+24 W
+5615 1669 PD
+24 W
+5643 1672 PD
+24 W
+5672 1678 PD
+24 W
+5702 1682 PD
+24 W
+5729 1689 PD
+24 W
+5756 1707 PD
+24 W
+5772 1726 PD
+24 W
+5783 1745 PD
+24 W
+5791 1764 PD
+24 W
+5800 1784 PD
+24 W
+5813 1802 PD
+24 W
+5826 1822 PD
+24 W
+5837 1841 PD
+24 W
+5845 1858 PD
+24 W
+5855 1877 PD
+24 W
+5861 1895 PD
+24 W
+5868 1914 PD
+24 W
+5871 1933 PD
+24 W
+5874 1951 PD
+24 W
+5873 1969 PD
+24 W
+5871 1977 PD
+24 W
+5869 1986 PD
+24 W
+5870 2004 PD
+24 W
+5872 2023 PD
+24 W
+5877 2041 PD
+24 W
+5877 2060 PD
+24 W
+5874 2079 PD
+24 W
+5870 2097 PD
+24 W
+5869 2116 PD
+24 W
+5874 2135 PD
+24 W
+5870 2154 PD
+24 W
+5856 2172 PD
+24 W
+5846 2191 PD
+24 W
+5846 2209 PD
+24 W
+5845 2228 PD
+24 W
+5845 2248 PD
+24 W
+5841 2267 PD
+24 W
+5834 2285 PD
+24 W
+5828 2304 PD
+24 W
+5818 2323 PD
+24 W
+5809 2342 PD
+24 W
+5810 2360 PD
+24 W
+5816 2379 PD
+24 W
+5810 2397 PD
+24 W
+5795 2415 PD
+24 W
+5796 2434 PD
+24 W
+5812 2454 PD
+24 W
+5826 2474 PD
+24 W
+5827 2492 PD
+24 W
+5837 2511 PD
+24 W
+5865 2527 PD
+24 W
+5893 2535 PD
+24 W
+5919 2541 PD
+24 W
+5947 2549 PD
+24 W
+5964 2567 PD
+24 W
+5993 2581 PD
+24 W
+6020 2581 PD
+24 W
+6047 2578 PD
+24 W
+6075 2577 PD
+24 W
+6104 2575 PD
+24 W
+6132 2571 PD
+24 W
+6160 2569 PD
+24 W
+6187 2569 PD
+24 W
+6215 2569 PD
+24 W
+6242 2570 PD
+24 W
+4188 394 PD
+24 W
+4217 410 PD
+24 W
+4240 428 PD
+24 W
+4261 446 PD
+24 W
+4288 460 PD
+24 W
+4315 468 PD
+24 W
+4343 477 PD
+24 W
+4365 496 PD
+24 W
+4393 498 PD
+24 W
+4420 509 PD
+24 W
+4448 527 PD
+24 W
+4469 545 PD
+24 W
+4496 560 PD
+24 W
+4524 579 PD
+24 W
+4544 597 PD
+24 W
+4562 614 PD
+24 W
+4570 633 PD
+24 W
+4569 651 PD
+24 W
+4573 669 PD
+24 W
+4585 687 PD
+24 W
+4603 705 PD
+24 W
+4627 723 PD
+24 W
+4654 741 PD
+24 W
+4677 760 PD
+24 W
+4690 779 PD
+24 W
+4710 798 PD
+24 W
+4735 815 PD
+24 W
+4750 833 PD
+24 W
+4770 851 PD
+24 W
+4785 869 PD
+24 W
+4797 887 PD
+24 W
+4806 905 PD
+24 W
+4831 923 PD
+24 W
+4843 942 PD
+24 W
+4858 960 PD
+24 W
+4860 978 PD
+24 W
+4865 997 PD
+24 W
+4866 1016 PD
+24 W
+4863 1033 PD
+24 W
+4862 1051 PD
+24 W
+4861 1070 PD
+24 W
+4862 1088 PD
+24 W
+4861 1107 PD
+24 W
+4858 1125 PD
+24 W
+4866 1143 PD
+24 W
+4873 1160 PD
+24 W
+4888 1178 PD
+24 W
+4903 1197 PD
+24 W
+4919 1215 PD
+24 W
+4939 1233 PD
+24 W
+4963 1251 PD
+24 W
+4986 1269 PD
+24 W
+5012 1287 PD
+24 W
+5039 1306 PD
+24 W
+5066 1322 PD
+24 W
+5094 1340 PD
+24 W
+5117 1358 PD
+24 W
+5136 1376 PD
+24 W
+5149 1394 PD
+24 W
+5163 1412 PD
+24 W
+5173 1430 PD
+24 W
+5188 1448 PD
+24 W
+5210 1465 PD
+24 W
+5222 1483 PD
+24 W
+5227 1501 PD
+24 W
+5233 1520 PD
+24 W
+5233 1537 PD
+24 W
+5232 1538 PD
+24 W
+5261 1544 PD
+24 W
+5288 1546 PD
+24 W
+5316 1550 PD
+24 W
+5345 1553 PD
+24 W
+5374 1555 PD
+24 W
+5401 1556 PD
+24 W
+5415 1557 PD
+24 W
+5428 1556 PD
+24 W
+5456 1552 PD
+24 W
+5485 1556 PD
+24 W
+5512 1566 PD
+24 W
+5539 1571 PD
+24 W
+5566 1573 PD
+24 W
+5598 1571 PD
+24 W
+5628 1569 PD
+24 W
+5657 1569 PD
+24 W
+5686 1570 PD
+24 W
+5713 1567 PD
+24 W
+5741 1566 PD
+24 W
+5770 1566 PD
+24 W
+5798 1568 PD
+24 W
+5826 1578 PD
+24 W
+5855 1595 PD
+24 W
+5872 1614 PD
+24 W
+5884 1634 PD
+24 W
+5892 1654 PD
+24 W
+5902 1671 PD
+24 W
+5911 1689 PD
+24 W
+5919 1710 PD
+24 W
+5927 1730 PD
+24 W
+5938 1749 PD
+24 W
+5946 1767 PD
+24 W
+5956 1786 PD
+24 W
+5967 1803 PD
+24 W
+5968 1821 PD
+24 W
+5970 1840 PD
+24 W
+5968 1859 PD
+24 W
+5964 1879 PD
+24 W
+5962 1896 PD
+24 W
+5955 1915 PD
+24 W
+5950 1934 PD
+24 W
+5949 1952 PD
+24 W
+5942 1970 PD
+24 W
+5927 2004 PD
+24 W
+5926 2004 PD
+24 W
+5920 2022 PD
+24 W
+5936 2040 PD
+24 W
+5938 2057 PD
+24 W
+5928 2076 PD
+24 W
+5923 2093 PD
+24 W
+5921 2112 PD
+24 W
+5925 2130 PD
+24 W
+5927 2148 PD
+24 W
+5919 2166 PD
+24 W
+5909 2185 PD
+24 W
+5900 2204 PD
+24 W
+5897 2223 PD
+24 W
+5894 2241 PD
+24 W
+5887 2259 PD
+24 W
+5891 2277 PD
+24 W
+5884 2296 PD
+24 W
+5880 2315 PD
+24 W
+5873 2333 PD
+24 W
+5860 2353 PD
+24 W
+5857 2371 PD
+24 W
+5860 2389 PD
+24 W
+5857 2407 PD
+24 W
+5886 2423 PD
+24 W
+5914 2431 PD
+24 W
+5944 2440 PD
+24 W
+5972 2445 PD
+24 W
+6000 2460 PD
+24 W
+6025 2479 PD
+24 W
+6045 2497 PD
+24 W
+6072 2510 PD
+24 W
+6101 2517 PD
+24 W
+6129 2520 PD
+24 W
+6157 2523 PD
+24 W
+6186 2524 PD
+24 W
+6215 2526 PD
+24 W
+6242 2531 PD
+24 W
+4372 392 PD
+24 W
+4371 392 PD
+24 W
+4387 410 PD
+24 W
+4404 428 PD
+24 W
+4421 446 PD
+24 W
+4434 464 PD
+24 W
+4455 482 PD
+24 W
+4483 496 PD
+24 W
+4512 507 PD
+24 W
+4541 518 PD
+24 W
+4568 532 PD
+24 W
+4587 550 PD
+24 W
+4597 568 PD
+24 W
+4599 586 PD
+24 W
+4596 605 PD
+24 W
+4593 623 PD
+24 W
+4592 641 PD
+24 W
+4595 659 PD
+24 W
+4603 678 PD
+24 W
+4618 695 PD
+24 W
+4645 709 PD
+24 W
+4671 718 PD
+24 W
+4699 726 PD
+24 W
+4728 733 PD
+24 W
+4753 751 PD
+24 W
+4772 769 PD
+24 W
+4787 787 PD
+24 W
+4806 806 PD
+24 W
+4825 824 PD
+24 W
+4848 842 PD
+24 W
+4869 860 PD
+24 W
+4889 878 PD
+24 W
+4898 896 PD
+24 W
+4898 905 PD
+24 W
+4904 917 PD
+24 W
+4909 935 PD
+24 W
+4912 954 PD
+24 W
+4918 971 PD
+24 W
+4924 989 PD
+24 W
+4936 1007 PD
+24 W
+4963 1022 PD
+24 W
+4966 1022 PD
+24 W
+4980 1040 PD
+24 W
+4998 1059 PD
+24 W
+5007 1079 PD
+24 W
+5020 1097 PD
+24 W
+5037 1116 PD
+24 W
+5055 1136 PD
+24 W
+5071 1155 PD
+24 W
+5088 1175 PD
+24 W
+5105 1195 PD
+24 W
+5125 1213 PD
+24 W
+5144 1233 PD
+24 W
+5163 1250 PD
+24 W
+5185 1268 PD
+24 W
+5203 1286 PD
+24 W
+5221 1305 PD
+24 W
+5237 1324 PD
+24 W
+5254 1343 PD
+24 W
+5282 1352 PD
+24 W
+5310 1359 PD
+24 W
+5327 1378 PD
+24 W
+5329 1385 PD
+24 W
+5332 1395 PD
+24 W
+5330 1414 PD
+24 W
+5322 1433 PD
+24 W
+5312 1450 PD
+24 W
+5302 1469 PD
+24 W
+5300 1487 PD
+24 W
+5328 1503 PD
+24 W
+5355 1505 PD
+24 W
+5383 1502 PD
+24 W
+5409 1495 PD
+24 W
+5437 1486 PD
+24 W
+5464 1478 PD
+24 W
+5493 1472 PD
+24 W
+5521 1468 PD
+24 W
+5521 1440 PD
+24 W
+5521 1439 PD
+24 W
+5549 1440 PD
+24 W
+5579 1444 PD
+24 W
+5606 1447 PD
+24 W
+5635 1447 PD
+24 W
+5663 1451 PD
+24 W
+5691 1454 PD
+24 W
+5719 1454 PD
+24 W
+5749 1456 PD
+24 W
+5777 1463 PD
+24 W
+5804 1470 PD
+24 W
+5835 1480 PD
+24 W
+5863 1493 PD
+24 W
+5892 1511 PD
+24 W
+5920 1527 PD
+24 W
+5942 1545 PD
+24 W
+5967 1564 PD
+24 W
+5985 1583 PD
+24 W
+6002 1602 PD
+24 W
+6013 1621 PD
+24 W
+6018 1640 PD
+24 W
+6021 1658 PD
+24 W
+6028 1677 PD
+24 W
+6038 1696 PD
+24 W
+6039 1716 PD
+24 W
+6044 1735 PD
+24 W
+6047 1755 PD
+24 W
+6051 1773 PD
+24 W
+6053 1793 PD
+24 W
+6053 1811 PD
+24 W
+6053 1828 PD
+24 W
+6053 1847 PD
+24 W
+6053 1865 PD
+24 W
+6049 1883 PD
+24 W
+6043 1903 PD
+24 W
+6037 1921 PD
+24 W
+6025 1940 PD
+24 W
+6017 1959 PD
+24 W
+6018 1977 PD
+24 W
+6007 1995 PD
+24 W
+6001 2013 PD
+24 W
+5996 2032 PD
+24 W
+5992 2051 PD
+24 W
+5994 2069 PD
+24 W
+5993 2069 PD
+24 W
+5980 2087 PD
+24 W
+5977 2104 PD
+24 W
+5993 2124 PD
+24 W
+5998 2142 PD
+24 W
+5995 2161 PD
+24 W
+5988 2180 PD
+24 W
+5990 2198 PD
+24 W
+5983 2217 PD
+24 W
+5973 2236 PD
+24 W
+5946 2245 PD
+24 W
+5947 2263 PD
+24 W
+5963 2280 PD
+24 W
+5958 2298 PD
+24 W
+5930 2311 PD
+24 W
+5918 2329 PD
+24 W
+5916 2348 PD
+24 W
+5926 2367 PD
+24 W
+5950 2385 PD
+24 W
+5978 2392 PD
+24 W
+6007 2404 PD
+24 W
+6037 2405 PD
+24 W
+6067 2410 PD
+24 W
+6096 2420 PD
+24 W
+6124 2436 PD
+24 W
+6153 2444 PD
+24 W
+6181 2456 PD
+24 W
+6209 2472 PD
+24 W
+6236 2482 PD
+24 W
+4494 391 PD
+24 W
+4495 389 PD
+24 W
+4519 406 PD
+24 W
+4535 425 PD
+24 W
+4561 444 PD
+24 W
+4584 462 PD
+24 W
+4601 480 PD
+24 W
+4604 497 PD
+24 W
+4605 515 PD
+24 W
+4602 522 PD
+24 W
+4602 534 PD
+24 W
+4630 550 PD
+24 W
+4639 568 PD
+24 W
+4617 586 PD
+24 W
+4612 604 PD
+24 W
+4612 622 PD
+24 W
+4619 640 PD
+24 W
+4625 658 PD
+24 W
+4641 676 PD
+24 W
+4668 693 PD
+24 W
+4695 702 PD
+24 W
+4722 708 PD
+24 W
+4750 713 PD
+24 W
+4777 721 PD
+24 W
+4802 739 PD
+24 W
+4824 757 PD
+24 W
+4848 775 PD
+24 W
+4874 793 PD
+24 W
+4894 812 PD
+24 W
+4911 831 PD
+24 W
+4924 849 PD
+24 W
+4937 867 PD
+24 W
+4943 885 PD
+24 W
+4954 904 PD
+24 W
+4971 922 PD
+24 W
+4987 940 PD
+24 W
+4993 959 PD
+24 W
+4995 977 PD
+24 W
+5015 994 PD
+24 W
+5043 992 PD
+24 W
+5055 1020 PD
+24 W
+5059 1013 PD
+24 W
+5087 1020 PD
+24 W
+5113 1031 PD
+24 W
+5141 1048 PD
+24 W
+5169 1067 PD
+24 W
+5196 1085 PD
+24 W
+5224 1102 PD
+24 W
+5251 1120 PD
+24 W
+5273 1138 PD
+24 W
+5296 1156 PD
+24 W
+5319 1174 PD
+24 W
+5338 1193 PD
+24 W
+5356 1212 PD
+24 W
+5370 1229 PD
+24 W
+5382 1247 PD
+24 W
+5393 1265 PD
+24 W
+5404 1284 PD
+24 W
+5410 1303 PD
+24 W
+5411 1320 PD
+24 W
+5410 1338 PD
+24 W
+5401 1357 PD
+24 W
+5401 1358 PD
+24 W
+5386 1376 PD
+24 W
+5375 1394 PD
+24 W
+5367 1414 PD
+24 W
+5376 1432 PD
+24 W
+5402 1433 PD
+24 W
+5431 1421 PD
+24 W
+5460 1413 PD
+24 W
+5489 1407 PD
+24 W
+5521 1404 PD
+24 W
+5548 1400 PD
+24 W
+5576 1399 PD
+24 W
+5606 1400 PD
+24 W
+5636 1400 PD
+24 W
+5665 1398 PD
+24 W
+5692 1399 PD
+24 W
+5719 1399 PD
+24 W
+5748 1401 PD
+24 W
+5777 1404 PD
+24 W
+5803 1409 PD
+24 W
+5831 1420 PD
+24 W
+5860 1434 PD
+24 W
+5888 1447 PD
+24 W
+5916 1459 PD
+24 W
+5945 1468 PD
+24 W
+5972 1477 PD
+24 W
+6000 1489 PD
+24 W
+6028 1508 PD
+24 W
+6038 1527 PD
+24 W
+6037 1527 PD
+24 W
+6060 1546 PD
+24 W
+6072 1564 PD
+24 W
+6077 1582 PD
+24 W
+6081 1600 PD
+24 W
+6086 1618 PD
+24 W
+6094 1637 PD
+24 W
+6100 1657 PD
+24 W
+6105 1675 PD
+24 W
+6108 1695 PD
+24 W
+6111 1713 PD
+24 W
+6114 1731 PD
+24 W
+6115 1748 PD
+24 W
+6115 1767 PD
+24 W
+6117 1785 PD
+24 W
+6119 1805 PD
+24 W
+6122 1823 PD
+24 W
+6120 1841 PD
+24 W
+6115 1859 PD
+24 W
+6112 1878 PD
+24 W
+6107 1898 PD
+24 W
+6105 1916 PD
+24 W
+6105 1935 PD
+24 W
+6101 1953 PD
+24 W
+6096 1972 PD
+24 W
+6091 1992 PD
+24 W
+6086 2013 PD
+24 W
+6081 2033 PD
+24 W
+6076 2051 PD
+24 W
+6071 2069 PD
+24 W
+6064 2086 PD
+24 W
+6065 2085 PD
+24 W
+6053 2104 PD
+24 W
+6060 2122 PD
+24 W
+6071 2140 PD
+24 W
+6070 2158 PD
+24 W
+6064 2176 PD
+24 W
+6050 2194 PD
+24 W
+6054 2211 PD
+24 W
+6048 2229 PD
+24 W
+6035 2248 PD
+24 W
+6024 2267 PD
+24 W
+6013 2286 PD
+24 W
+6006 2304 PD
+24 W
+6003 2322 PD
+24 W
+6031 2338 PD
+24 W
+6060 2354 PD
+24 W
+6085 2372 PD
+24 W
+6113 2387 PD
+24 W
+6142 2392 PD
+24 W
+6170 2396 PD
+24 W
+6197 2404 PD
+24 W
+6225 2418 PD
+24 W
+6244 2436 PD
+24 W
+4628 398 PD
+24 W
+4630 396 PD
+24 W
+4639 414 PD
+24 W
+4654 432 PD
+24 W
+4670 450 PD
+24 W
+4673 468 PD
+24 W
+4671 487 PD
+24 W
+4668 495 PD
+24 W
+4665 504 PD
+24 W
+4692 517 PD
+24 W
+4690 535 PD
+24 W
+4697 552 PD
+24 W
+4707 570 PD
+24 W
+4680 585 PD
+24 W
+4658 603 PD
+24 W
+4657 620 PD
+24 W
+4667 638 PD
+24 W
+4684 657 PD
+24 W
+4711 669 PD
+24 W
+4738 670 PD
+24 W
+4766 673 PD
+24 W
+4786 690 PD
+24 W
+4813 702 PD
+24 W
+4833 719 PD
+24 W
+4861 730 PD
+24 W
+4889 739 PD
+24 W
+4907 756 PD
+24 W
+4915 774 PD
+24 W
+4923 793 PD
+24 W
+4935 811 PD
+24 W
+4940 828 PD
+24 W
+4957 846 PD
+24 W
+4976 864 PD
+24 W
+5000 882 PD
+24 W
+5015 899 PD
+24 W
+5025 917 PD
+24 W
+5033 935 PD
+24 W
+5061 950 PD
+24 W
+5088 956 PD
+24 W
+5116 975 PD
+24 W
+5144 979 PD
+24 W
+5172 978 PD
+24 W
+5201 982 PD
+24 W
+5228 990 PD
+24 W
+5255 1000 PD
+24 W
+5283 1012 PD
+24 W
+5309 1024 PD
+24 W
+5336 1039 PD
+24 W
+5361 1058 PD
+24 W
+5382 1076 PD
+24 W
+5399 1095 PD
+24 W
+5411 1112 PD
+24 W
+5422 1130 PD
+24 W
+5439 1148 PD
+24 W
+5444 1165 PD
+24 W
+5447 1183 PD
+24 W
+5449 1201 PD
+24 W
+5448 1219 PD
+24 W
+5446 1236 PD
+24 W
+5444 1255 PD
+24 W
+5451 1273 PD
+24 W
+5457 1291 PD
+24 W
+5454 1309 PD
+24 W
+5447 1327 PD
+24 W
+5451 1345 PD
+24 W
+5478 1356 PD
+24 W
+5505 1353 PD
+24 W
+5533 1348 PD
+24 W
+5562 1346 PD
+24 W
+5592 1342 PD
+24 W
+5621 1343 PD
+24 W
+5650 1344 PD
+24 W
+5679 1346 PD
+24 W
+5709 1351 PD
+24 W
+5737 1352 PD
+24 W
+5767 1353 PD
+24 W
+5794 1362 PD
+24 W
+5822 1373 PD
+24 W
+5849 1383 PD
+24 W
+5878 1395 PD
+24 W
+5906 1404 PD
+24 W
+5933 1415 PD
+24 W
+5961 1431 PD
+24 W
+5985 1449 PD
+24 W
+6011 1466 PD
+24 W
+6038 1477 PD
+24 W
+6065 1492 PD
+24 W
+6078 1510 PD
+24 W
+6092 1527 PD
+24 W
+6111 1545 PD
+24 W
+6134 1564 PD
+24 W
+6145 1581 PD
+24 W
+6144 1582 PD
+24 W
+6149 1600 PD
+24 W
+6154 1618 PD
+24 W
+6161 1638 PD
+24 W
+6169 1656 PD
+24 W
+6179 1675 PD
+24 W
+6180 1694 PD
+24 W
+6183 1713 PD
+24 W
+6189 1731 PD
+24 W
+6184 1748 PD
+24 W
+6177 1767 PD
+24 W
+6172 1785 PD
+24 W
+6169 1804 PD
+24 W
+6171 1822 PD
+24 W
+6169 1839 PD
+24 W
+6158 1859 PD
+24 W
+6154 1877 PD
+24 W
+6164 1895 PD
+24 W
+6169 1915 PD
+24 W
+6169 1933 PD
+24 W
+6167 1952 PD
+24 W
+6164 1971 PD
+24 W
+6158 1990 PD
+24 W
+6154 2008 PD
+24 W
+6146 2027 PD
+24 W
+6140 2045 PD
+24 W
+6139 2064 PD
+24 W
+6146 2082 PD
+24 W
+6147 2100 PD
+24 W
+6136 2118 PD
+24 W
+6129 2136 PD
+24 W
+6136 2154 PD
+24 W
+6133 2173 PD
+24 W
+6127 2191 PD
+24 W
+6120 2209 PD
+24 W
+6110 2230 PD
+24 W
+6110 2229 PD
+24 W
+6083 2232 PD
+24 W
+6065 2253 PD
+24 W
+6063 2271 PD
+24 W
+6072 2289 PD
+24 W
+6096 2308 PD
+24 W
+6123 2322 PD
+24 W
+6151 2334 PD
+24 W
+6178 2345 PD
+24 W
+6206 2360 PD
+24 W
+6234 2374 PD
+24 W
+4743 398 PD
+24 W
+4761 416 PD
+24 W
+4761 433 PD
+24 W
+4762 452 PD
+24 W
+4768 470 PD
+24 W
+4763 488 PD
+24 W
+4753 505 PD
+24 W
+4755 516 PD
+24 W
+4749 523 PD
+24 W
+4758 541 PD
+24 W
+4741 561 PD
+24 W
+4745 580 PD
+24 W
+4724 598 PD
+24 W
+4720 616 PD
+24 W
+4749 629 PD
+24 W
+4776 636 PD
+24 W
+4797 654 PD
+24 W
+4824 670 PD
+24 W
+4851 686 PD
+24 W
+4878 689 PD
+24 W
+4907 696 PD
+24 W
+4920 714 PD
+24 W
+4927 732 PD
+24 W
+4949 749 PD
+24 W
+4965 768 PD
+24 W
+4980 785 PD
+24 W
+4978 804 PD
+24 W
+4972 821 PD
+24 W
+4973 840 PD
+24 W
+4994 858 PD
+24 W
+5021 863 PD
+24 W
+5049 871 PD
+24 W
+5073 890 PD
+24 W
+5089 908 PD
+24 W
+5113 925 PD
+24 W
+5140 937 PD
+24 W
+5167 943 PD
+24 W
+5195 949 PD
+24 W
+5223 959 PD
+24 W
+5251 971 PD
+24 W
+5278 983 PD
+24 W
+5307 992 PD
+24 W
+5334 1003 PD
+24 W
+5363 1016 PD
+24 W
+5375 1033 PD
+24 W
+5391 1051 PD
+24 W
+5418 1067 PD
+24 W
+5446 1079 PD
+24 W
+5462 1097 PD
+24 W
+5470 1115 PD
+24 W
+5480 1132 PD
+24 W
+5488 1151 PD
+24 W
+5493 1171 PD
+24 W
+5497 1190 PD
+24 W
+5500 1209 PD
+24 W
+5504 1228 PD
+24 W
+5505 1247 PD
+24 W
+5501 1265 PD
+24 W
+5504 1285 PD
+24 W
+5517 1302 PD
+24 W
+5544 1306 PD
+24 W
+5573 1306 PD
+24 W
+5601 1304 PD
+24 W
+5629 1303 PD
+24 W
+5656 1304 PD
+24 W
+5684 1305 PD
+24 W
+5712 1308 PD
+24 W
+5742 1312 PD
+24 W
+5771 1316 PD
+24 W
+5798 1319 PD
+24 W
+5828 1323 PD
+24 W
+5856 1328 PD
+24 W
+5885 1336 PD
+24 W
+5913 1346 PD
+24 W
+5940 1365 PD
+24 W
+5961 1383 PD
+24 W
+5984 1402 PD
+24 W
+6007 1421 PD
+24 W
+6033 1439 PD
+24 W
+6061 1457 PD
+24 W
+6086 1475 PD
+24 W
+6109 1494 PD
+24 W
+6128 1512 PD
+24 W
+6144 1531 PD
+24 W
+6160 1549 PD
+24 W
+6176 1567 PD
+24 W
+6194 1585 PD
+24 W
+6208 1604 PD
+24 W
+6219 1622 PD
+24 W
+6227 1640 PD
+24 W
+6235 1657 PD
+24 W
+6255 1697 PD
+24 W
+6252 1698 PD
+24 W
+6251 1717 PD
+24 W
+6249 1735 PD
+24 W
+6246 1753 PD
+24 W
+6241 1772 PD
+24 W
+6237 1791 PD
+24 W
+6234 1809 PD
+24 W
+6232 1827 PD
+24 W
+6230 1845 PD
+24 W
+6228 1863 PD
+24 W
+6229 1882 PD
+24 W
+6236 1900 PD
+24 W
+6242 1918 PD
+24 W
+6246 1937 PD
+24 W
+6244 1955 PD
+24 W
+6241 1972 PD
+24 W
+6236 1990 PD
+24 W
+6228 2011 PD
+24 W
+6219 2030 PD
+24 W
+6212 2048 PD
+24 W
+6204 2066 PD
+24 W
+6200 2084 PD
+24 W
+6202 2102 PD
+24 W
+6205 2120 PD
+24 W
+6205 2138 PD
+24 W
+6205 2157 PD
+24 W
+6200 2178 PD
+24 W
+6194 2196 PD
+24 W
+6183 2214 PD
+24 W
+6168 2232 PD
+24 W
+6151 2250 PD
+24 W
+4838 405 PD
+24 W
+4838 404 PD
+24 W
+4839 423 PD
+24 W
+4838 441 PD
+24 W
+4833 458 PD
+24 W
+4821 482 PD
+24 W
+4821 481 PD
+24 W
+4818 499 PD
+24 W
+4805 516 PD
+24 W
+4799 535 PD
+24 W
+4793 553 PD
+24 W
+4791 571 PD
+24 W
+4809 589 PD
+24 W
+4830 607 PD
+24 W
+4828 624 PD
+24 W
+4839 643 PD
+24 W
+4866 653 PD
+24 W
+4893 646 PD
+24 W
+4921 652 PD
+24 W
+4947 671 PD
+24 W
+4947 690 PD
+24 W
+4947 708 PD
+24 W
+4946 726 PD
+24 W
+4973 744 PD
+24 W
+5000 749 PD
+24 W
+5027 758 PD
+24 W
+5051 776 PD
+24 W
+5028 794 PD
+24 W
+5025 812 PD
+24 W
+5052 820 PD
+24 W
+5066 838 PD
+24 W
+5070 857 PD
+24 W
+5080 876 PD
+24 W
+5109 884 PD
+24 W
+5136 886 PD
+24 W
+5153 904 PD
+24 W
+5181 920 PD
+24 W
+5208 926 PD
+24 W
+5235 927 PD
+24 W
+5262 931 PD
+24 W
+5281 949 PD
+24 W
+5309 956 PD
+24 W
+5337 959 PD
+24 W
+5364 970 PD
+24 W
+5392 987 PD
+24 W
+5419 1000 PD
+24 W
+5446 1013 PD
+24 W
+5474 1030 PD
+24 W
+5500 1049 PD
+24 W
+5521 1067 PD
+24 W
+5533 1086 PD
+24 W
+5544 1104 PD
+24 W
+5554 1122 PD
+24 W
+5560 1140 PD
+24 W
+5561 1159 PD
+24 W
+5565 1179 PD
+24 W
+5566 1198 PD
+24 W
+5567 1216 PD
+24 W
+5568 1234 PD
+24 W
+5573 1252 PD
+24 W
+5600 1244 PD
+24 W
+5629 1239 PD
+24 W
+5658 1240 PD
+24 W
+5687 1244 PD
+24 W
+5714 1250 PD
+24 W
+5742 1254 PD
+24 W
+5770 1256 PD
+24 W
+5771 1238 PD
+24 W
+5744 1220 PD
+24 W
+5722 1202 PD
+24 W
+5705 1183 PD
+24 W
+5694 1164 PD
+24 W
+5681 1146 PD
+24 W
+5651 1129 PD
+24 W
+5624 1119 PD
+24 W
+5600 1100 PD
+24 W
+5587 1082 PD
+24 W
+5575 1064 PD
+24 W
+5562 1046 PD
+24 W
+5546 1028 PD
+24 W
+5529 1009 PD
+24 W
+5514 991 PD
+24 W
+5500 973 PD
+24 W
+5486 954 PD
+24 W
+5476 936 PD
+24 W
+5465 916 PD
+24 W
+5459 898 PD
+24 W
+5457 880 PD
+24 W
+5455 863 PD
+24 W
+5453 844 PD
+24 W
+5448 826 PD
+24 W
+5442 808 PD
+24 W
+5437 789 PD
+24 W
+5433 771 PD
+24 W
+5428 752 PD
+24 W
+5422 733 PD
+24 W
+5420 715 PD
+24 W
+5422 697 PD
+24 W
+5449 680 PD
+24 W
+5058 414 PD
+24 W
+5056 414 PD
+24 W
+5029 425 PD
+24 W
+5023 444 PD
+24 W
+5026 463 PD
+24 W
+5026 482 PD
+24 W
+5004 500 PD
+24 W
+4997 518 PD
+24 W
+5024 532 PD
+24 W
+5029 550 PD
+24 W
+5056 558 PD
+24 W
+5082 573 PD
+24 W
+5110 585 PD
+24 W
+5123 567 PD
+24 W
+5115 549 PD
+24 W
+5112 530 PD
+24 W
+5114 513 PD
+24 W
+5115 495 PD
+24 W
+5119 476 PD
+24 W
+5119 458 PD
+24 W
+5104 440 PD
+24 W
+5076 426 PD
+24 W
+5049 418 PD
+gs 899 389 5357 4227 MR c np
+gr
+
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/glacier2.pdf b/doc/tutorial/images/glacier2.pdf
new file mode 100644
index 0000000..eca23a0
Binary files /dev/null and b/doc/tutorial/images/glacier2.pdf differ
diff --git a/doc/tutorial/images/interpolation_1d_0.eps b/doc/tutorial/images/interpolation_1d_0.eps
new file mode 100755
index 0000000..b83485c
--- /dev/null
+++ b/doc/tutorial/images/interpolation_1d_0.eps
@@ -0,0 +1,359 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: interpolation_1d_0.eps
+%%CreationDate: 09/01/2004 09:49:24
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 59 199 558 583
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 59 199 558 583
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 498 340 5989 4614 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt 899 389 L
+ 899 4615 mt 899 4561 L
+ 899 389 mt 899 442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 562 4894 mt
+(-0.5) s
+3577 4615 mt 3577 4561 L
+3577 389 mt 3577 442 L
+3504 4894 mt
+(0) s
+6255 4615 mt 6255 4561 L
+6255 389 mt 6255 442 L
+6072 4894 mt
+(0.5) s
+ 899 4262 mt 952 4262 L
+6255 4262 mt 6201 4262 L
+ 718 4360 mt
+(0) s
+ 899 3558 mt 952 3558 L
+6255 3558 mt 6201 3558 L
+ 498 3656 mt
+(0.2) s
+ 899 2854 mt 952 2854 L
+6255 2854 mt 6201 2854 L
+ 498 2952 mt
+(0.4) s
+ 899 2149 mt 952 2149 L
+6255 2149 mt 6201 2149 L
+ 498 2247 mt
+(0.6) s
+ 899 1445 mt 952 1445 L
+6255 1445 mt 6201 1445 L
+ 498 1543 mt
+(0.8) s
+ 899 741 mt 952 741 L
+6255 741 mt 6201 741 L
+ 718 839 mt
+(1) s
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+gs 899 388 5357 4228 MR c np
+24 w
+gr
+
+24 w
+ 60 60 998 4262 FO
+ 60 60 1642 4262 FO
+ 60 60 2136 4262 FO
+ 60 60 3071 4262 FO
+ 60 60 3501 4262 FO
+ 60 60 4149 2634 FO
+ 60 60 4498 2196 FO
+ 60 60 4980 1713 FO
+ 60 60 5431 1332 FO
+ 60 60 5987 921 FO
+gs 899 388 5357 4228 MR c np
+17 273 17 277 16 275 17 266 17 251 17 229 16 202 17 170
+17 132 17 92 16 50 17 5 17 -40 17 -82 16 -123 17 -160
+17 -193 17 -220 16 -241 17 -255 17 -262 16 -262 17 -255 17 -240
+17 -219 16 -192 17 -161 17 -124 17 -86 16 -46 17 -4 17 35
+17 74 16 109 17 141 17 167 17 188 16 203 17 212 17 214
+16 211 17 201 17 185 17 166 16 142 17 116 17 86 17 57
+16 27 17 -2 17 -28 17 -53 16 -72 17 -89 17 -101 17 -108
+16 -110 17 -107 17 -100 16 -89 17 -75 17 -58 17 -40 16 -19
+17 1 17 20 17 38 16 54 17 67 17 76 17 82 16 84
+17 81 17 76 17 65 16 52 17 36 17 17 16 -2 17 -22
+17 -44 17 -62 16 -81 17 -95 17 -109 17 -117 16 -122 17 -124
+17 -119 17 -113 16 -100 17 -86 17 -66 17 -46 16 -23 17 1
+17 26 17 50 16 72 4581 2797 100 MP stroke
+17 94 17 111 16 127 17 137 17 144 17 147 16 144 17 138
+17 127 17 113 16 93 17 73 17 49 17 23 16 -3 17 -29
+17 -55 17 -81 16 -103 17 -124 17 -142 16 -156 17 -167 17 -174
+17 -179 16 -178 17 -175 17 -169 17 -160 16 -149 17 -136 17 -122
+17 -107 16 -91 17 -77 17 -62 17 -49 16 -38 17 -27 17 -18
+16 -13 17 -7 17 -4 17 -3 16 -3 17 -4 17 -5 17 -9
+16 -11 17 -14 17 -17 17 -19 16 -21 17 -21 17 -21 17 -19
+16 -18 17 -14 17 -11 16 -7 17 -2 17 2 17 8 16 12
+17 15 17 19 17 22 16 23 17 23 17 23 17 22 16 19
+17 16 17 13 17 8 16 3 17 -2 17 -6 17 -10 16 -14
+17 -17 17 -20 16 -21 17 -21 17 -21 17 -19 16 -17 17 -14
+17 -10 17 -7 16 -2 17 2 17 6 17 9 16 13 17 14
+17 16 17 16 16 15 2924 4173 100 MP stroke
+17 13 17 11 16 8 17 4 17 -1 17 -6 16 -11 17 -15
+17 -20 17 -23 16 -26 17 -28 17 -28 17 -29 16 -26 17 -24
+17 -20 17 -15 16 -9 17 -3 17 4 16 11 17 17 17 23
+17 29 16 34 17 37 17 39 17 40 16 39 17 37 17 33
+17 29 16 23 17 16 17 9 17 1 16 -7 17 -13 17 -20
+16 -26 17 -30 17 -33 17 -35 16 -35 17 -33 17 -29 17 -25
+16 -19 17 -12 17 -3 17 5 16 13 17 21 17 29 17 36
+16 41 17 45 17 47 17 47 16 45 17 42 17 36 16 29
+17 21 17 11 17 0 16 -10 17 -21 17 -31 17 -40 16 -48
+17 -53 17 -58 17 -59 16 -59 17 -56 17 -50 17 -43 16 -33
+17 -22 17 -10 16 3 17 17 17 29 17 42 16 53 17 62
+17 68 17 73 16 74 17 73 17 68 17 60 16 51 17 38
+17 24 17 9 16 -8 1267 3709 100 MP stroke
+17 -23 17 -40 16 -53 17 -65 17 -75 17 -80 16 -82 17 -81
+17 -73 17 -63 16 -47 17 -28 17 -5 17 22 16 51 17 81
+17 112 17 144 16 174 17 201 17 226 16 247 899 3166 23 MP stroke
+DA
+17 -11 17 -11 16 -11 17 -11 17 -11 17 -12 16 -11 17 -11
+17 -11 17 -12 16 -11 17 -12 17 -11 17 -12 16 -11 17 -12
+17 -12 17 -11 16 -12 17 -12 17 -12 16 -12 17 -12 17 -11
+17 -12 16 -13 17 -12 17 -12 17 -12 16 -12 17 -12 17 -13
+17 -12 16 -13 17 -12 17 -13 17 -12 16 -13 17 -12 17 -13
+16 -13 17 -13 17 -13 17 -13 16 -13 17 -13 17 -13 17 -13
+16 -13 17 -14 17 -13 17 -13 16 -14 17 -13 17 -14 17 -14
+16 -14 17 -13 17 -14 16 -14 17 -14 17 -14 17 -14 16 -15
+17 -14 17 -14 17 -15 16 -14 17 -15 17 -15 17 -15 16 -14
+17 -15 17 -15 17 -16 16 -15 17 -15 17 -16 16 -15 17 -16
+17 -15 17 -16 16 -16 17 -16 17 -16 17 -17 16 -16 17 -16
+17 -17 17 -17 16 -16 17 -17 17 -18 17 -17 16 -17 17 -18
+17 -17 17 -18 16 -18 4581 2106 100 MP stroke
+17 -18 17 -18 16 -18 17 -19 17 -19 17 -18 16 -19 17 -20
+17 -19 17 -20 16 -19 17 -20 17 -21 17 -20 16 -21 17 -21
+17 -21 17 -21 16 -22 17 -22 17 -22 16 -22 17 -23 17 -23
+17 -23 16 -24 17 -24 17 -24 17 -25 16 -25 17 -26 17 -26
+17 -27 16 -27 17 -27 17 -28 17 -29 16 -29 17 -30 17 -31
+16 -32 17 -32 17 -33 17 -35 16 -35 17 -37 17 -38 17 -39
+16 -41 17 -43 17 -45 17 -48 16 -51 17 -54 17 -60 17 -66
+16 -74 17 -89 17 -115 16 -278 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 2924 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 16 0 17 0 17 0
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 1267 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 16 0 899 4262 23 MP stroke
+SO
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/interpolation_1d_0.pdf b/doc/tutorial/images/interpolation_1d_0.pdf
new file mode 100644
index 0000000..8a331f9
Binary files /dev/null and b/doc/tutorial/images/interpolation_1d_0.pdf differ
diff --git a/doc/tutorial/images/interpolation_1d_1.eps b/doc/tutorial/images/interpolation_1d_1.eps
new file mode 100755
index 0000000..f05b9b2
--- /dev/null
+++ b/doc/tutorial/images/interpolation_1d_1.eps
@@ -0,0 +1,359 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: interpolation_1d_1.eps
+%%CreationDate: 09/01/2004 09:49:24
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 59 199 558 583
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 59 199 558 583
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 498 340 5989 4614 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt 899 389 L
+ 899 4615 mt 899 4561 L
+ 899 389 mt 899 442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 562 4894 mt
+(-0.5) s
+3577 4615 mt 3577 4561 L
+3577 389 mt 3577 442 L
+3504 4894 mt
+(0) s
+6255 4615 mt 6255 4561 L
+6255 389 mt 6255 442 L
+6072 4894 mt
+(0.5) s
+ 899 4262 mt 952 4262 L
+6255 4262 mt 6201 4262 L
+ 718 4360 mt
+(0) s
+ 899 3558 mt 952 3558 L
+6255 3558 mt 6201 3558 L
+ 498 3656 mt
+(0.2) s
+ 899 2854 mt 952 2854 L
+6255 2854 mt 6201 2854 L
+ 498 2952 mt
+(0.4) s
+ 899 2149 mt 952 2149 L
+6255 2149 mt 6201 2149 L
+ 498 2247 mt
+(0.6) s
+ 899 1445 mt 952 1445 L
+6255 1445 mt 6201 1445 L
+ 498 1543 mt
+(0.8) s
+ 899 741 mt 952 741 L
+6255 741 mt 6201 741 L
+ 718 839 mt
+(1) s
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+gs 899 388 5357 4228 MR c np
+24 w
+gr
+
+24 w
+ 60 60 998 4262 FO
+ 60 60 1642 4262 FO
+ 60 60 2136 4262 FO
+ 60 60 3071 4262 FO
+ 60 60 3501 4262 FO
+ 60 60 4149 2634 FO
+ 60 60 4498 2196 FO
+ 60 60 4980 1713 FO
+ 60 60 5431 1332 FO
+ 60 60 5987 921 FO
+gs 899 388 5357 4228 MR c np
+0 2 17 59 17 77 16 94 17 112 17 129 17 145 16 160
+17 173 17 185 16 194 899 3286 12 MP stroke
+17 206 17 208 16 207 17 203 17 196 17 187 16 176 17 162
+17 146 17 128 16 109 17 90 17 69 17 48 16 29 17 9
+17 -10 17 -26 16 -41 17 -55 17 -66 16 -74 17 -81 17 -84
+17 -86 16 -84 17 -81 17 -75 17 -68 16 -60 17 -49 17 -38
+17 -26 16 -15 17 -3 17 9 17 20 16 29 17 38 17 46
+16 51 17 56 17 59 17 60 16 60 17 58 17 55 17 50
+16 46 17 39 17 33 17 25 16 18 17 11 17 4 17 -3
+16 -9 17 -15 17 -20 16 -25 17 -28 17 -30 17 -33 16 -34
+17 -35 17 -35 17 -34 16 -34 17 -33 17 -32 17 -30 16 -30
+17 -28 17 -28 17 -27 16 -27 17 -26 17 -27 16 -26 17 -27
+17 -28 17 -28 16 -28 17 -29 17 -29 17 -29 16 -28 17 -28
+17 -27 17 -26 16 -23 17 -22 17 -18 17 -16 16 -13 17 -10
+17 -6 17 -3 16 0 4581 2233 100 MP stroke
+17 3 17 6 16 8 17 10 17 11 17 12 16 12 17 11
+17 9 17 8 16 5 17 1 17 -2 17 -8 16 -12 17 -17
+17 -23 17 -29 16 -34 17 -41 17 -45 16 -51 17 -56 17 -60
+17 -65 16 -68 17 -70 17 -74 17 -75 16 -76 17 -76 17 -77
+17 -76 16 -75 17 -74 17 -72 17 -69 16 -67 17 -65 17 -61
+16 -58 17 -55 17 -52 17 -48 16 -46 17 -42 17 -38 17 -36
+16 -32 17 -30 17 -27 17 -24 16 -21 17 -19 17 -16 17 -15
+16 -12 17 -10 17 -8 16 -6 17 -5 17 -4 17 -2 16 -1
+17 0 17 0 17 1 16 2 17 2 17 2 17 2 16 2
+17 2 17 1 17 1 16 1 17 0 17 0 17 0 16 -1
+17 -1 17 -2 16 -1 17 -2 17 -2 17 -1 16 -2 17 -2
+17 -1 17 -1 16 -1 17 -1 17 0 17 0 16 0 17 1
+17 1 17 0 16 1 2924 4261 100 MP stroke
+17 1 17 2 16 1 17 1 17 0 17 1 16 1 17 0
+17 1 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 1 17 0 17 0 16 0 17 0 17 0
+17 0 16 0 17 -1 17 0 17 -1 16 -1 17 -1 17 -2
+17 -1 16 -2 17 -2 17 -1 17 -2 16 -1 17 -2 17 -1
+16 0 17 0 17 0 17 1 16 2 17 2 17 3 17 3
+16 3 17 4 17 4 17 4 16 3 17 4 17 3 17 2
+16 2 17 0 17 0 17 -1 16 -3 17 -3 17 -4 16 -5
+17 -5 17 -6 17 -5 16 -6 17 -5 17 -4 17 -2 16 -2
+17 1 17 2 17 5 16 6 17 9 17 10 17 13 16 14
+17 15 17 15 16 16 17 15 17 13 17 12 16 8 17 5
+17 1 17 -3 16 -9 17 -15 17 -20 17 -25 16 -32 17 -36
+17 -41 17 -45 16 -47 1267 4394 100 MP stroke
+17 -49 17 -49 16 -47 17 -44 14 -33 1186 4616 6 MP stroke
+DA
+17 -11 17 -11 16 -11 17 -11 17 -11 17 -12 16 -11 17 -11
+17 -11 17 -12 16 -11 17 -12 17 -11 17 -12 16 -11 17 -12
+17 -12 17 -11 16 -12 17 -12 17 -12 16 -12 17 -12 17 -11
+17 -12 16 -13 17 -12 17 -12 17 -12 16 -12 17 -12 17 -13
+17 -12 16 -13 17 -12 17 -13 17 -12 16 -13 17 -12 17 -13
+16 -13 17 -13 17 -13 17 -13 16 -13 17 -13 17 -13 17 -13
+16 -13 17 -14 17 -13 17 -13 16 -14 17 -13 17 -14 17 -14
+16 -14 17 -13 17 -14 16 -14 17 -14 17 -14 17 -14 16 -15
+17 -14 17 -14 17 -15 16 -14 17 -15 17 -15 17 -15 16 -14
+17 -15 17 -15 17 -16 16 -15 17 -15 17 -16 16 -15 17 -16
+17 -15 17 -16 16 -16 17 -16 17 -16 17 -17 16 -16 17 -16
+17 -17 17 -17 16 -16 17 -17 17 -18 17 -17 16 -17 17 -18
+17 -17 17 -18 16 -18 4581 2106 100 MP stroke
+17 -18 17 -18 16 -18 17 -19 17 -19 17 -18 16 -19 17 -20
+17 -19 17 -20 16 -19 17 -20 17 -21 17 -20 16 -21 17 -21
+17 -21 17 -21 16 -22 17 -22 17 -22 16 -22 17 -23 17 -23
+17 -23 16 -24 17 -24 17 -24 17 -25 16 -25 17 -26 17 -26
+17 -27 16 -27 17 -27 17 -28 17 -29 16 -29 17 -30 17 -31
+16 -32 17 -32 17 -33 17 -35 16 -35 17 -37 17 -38 17 -39
+16 -41 17 -43 17 -45 17 -48 16 -51 17 -54 17 -60 17 -66
+16 -74 17 -89 17 -115 16 -278 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 2924 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 16 0 17 0 17 0
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 1267 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 16 0 899 4262 23 MP stroke
+SO
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/interpolation_1d_1.pdf b/doc/tutorial/images/interpolation_1d_1.pdf
new file mode 100644
index 0000000..37007c3
Binary files /dev/null and b/doc/tutorial/images/interpolation_1d_1.pdf differ
diff --git a/doc/tutorial/images/interpolation_1d_2.eps b/doc/tutorial/images/interpolation_1d_2.eps
new file mode 100755
index 0000000..e39b28e
--- /dev/null
+++ b/doc/tutorial/images/interpolation_1d_2.eps
@@ -0,0 +1,357 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: interpolation_1d_2.eps
+%%CreationDate: 09/01/2004 09:49:25
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 59 199 558 583
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 59 199 558 583
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 498 340 5989 4614 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt 899 389 L
+ 899 4615 mt 899 4561 L
+ 899 389 mt 899 442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 562 4894 mt
+(-0.5) s
+3577 4615 mt 3577 4561 L
+3577 389 mt 3577 442 L
+3504 4894 mt
+(0) s
+6255 4615 mt 6255 4561 L
+6255 389 mt 6255 442 L
+6072 4894 mt
+(0.5) s
+ 899 4262 mt 952 4262 L
+6255 4262 mt 6201 4262 L
+ 718 4360 mt
+(0) s
+ 899 3558 mt 952 3558 L
+6255 3558 mt 6201 3558 L
+ 498 3656 mt
+(0.2) s
+ 899 2854 mt 952 2854 L
+6255 2854 mt 6201 2854 L
+ 498 2952 mt
+(0.4) s
+ 899 2149 mt 952 2149 L
+6255 2149 mt 6201 2149 L
+ 498 2247 mt
+(0.6) s
+ 899 1445 mt 952 1445 L
+6255 1445 mt 6201 1445 L
+ 498 1543 mt
+(0.8) s
+ 899 741 mt 952 741 L
+6255 741 mt 6201 741 L
+ 718 839 mt
+(1) s
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+gs 899 388 5357 4228 MR c np
+24 w
+gr
+
+24 w
+ 60 60 998 4262 FO
+ 60 60 1642 4262 FO
+ 60 60 2136 4262 FO
+ 60 60 3071 4262 FO
+ 60 60 3501 4262 FO
+ 60 60 4149 2634 FO
+ 60 60 4498 2196 FO
+ 60 60 4980 1713 FO
+ 60 60 5431 1332 FO
+ 60 60 5987 921 FO
+gs 899 388 5357 4228 MR c np
+17 105 16 114 17 124 17 134 17 142 16 150 17 157 17 163
+16 167 899 3360 10 MP stroke
+17 174 17 176 16 177 17 175 17 174 17 170 16 166 17 160
+17 155 17 146 16 139 17 130 17 120 17 110 16 99 17 88
+17 78 17 66 16 56 17 44 17 34 16 24 17 14 17 5
+17 -4 16 -11 17 -19 17 -25 17 -30 16 -35 17 -39 17 -42
+17 -45 16 -46 17 -46 17 -48 17 -46 16 -46 17 -44 17 -43
+16 -40 17 -38 17 -36 17 -33 16 -30 17 -27 17 -25 17 -22
+16 -19 17 -17 17 -16 17 -13 16 -12 17 -10 17 -10 17 -9
+16 -8 17 -9 17 -8 16 -9 17 -9 17 -10 17 -11 16 -11
+17 -13 17 -14 17 -15 16 -16 17 -17 17 -19 17 -19 16 -21
+17 -21 17 -23 17 -23 16 -23 17 -24 17 -24 16 -24 17 -25
+17 -24 17 -23 16 -24 17 -22 17 -23 17 -21 16 -20 17 -20
+17 -19 17 -17 16 -17 17 -15 17 -15 17 -13 16 -13 17 -11
+17 -11 17 -10 16 -9 4581 2157 100 MP stroke
+17 -8 17 -8 16 -8 17 -8 17 -8 17 -7 16 -9 17 -8
+17 -10 17 -10 16 -11 17 -13 17 -14 17 -15 16 -18 17 -19
+17 -21 17 -23 16 -25 17 -28 17 -30 16 -32 17 -35 17 -37
+17 -39 16 -41 17 -44 17 -46 17 -48 16 -49 17 -52 17 -52
+17 -54 16 -55 17 -56 17 -57 17 -57 16 -57 17 -57 17 -57
+16 -56 17 -56 17 -55 17 -53 16 -52 17 -51 17 -49 17 -47
+16 -45 17 -43 17 -41 17 -39 16 -36 17 -34 17 -32 17 -29
+16 -27 17 -25 17 -23 16 -20 17 -18 17 -16 17 -15 16 -12
+17 -11 17 -9 17 -7 16 -6 17 -5 17 -3 17 -2 16 -2
+17 0 17 0 17 1 16 1 17 2 17 2 17 3 16 2
+17 3 17 3 16 3 17 3 17 3 17 3 16 3 17 3
+17 2 17 2 16 2 17 2 17 2 17 2 16 1 17 1
+17 1 17 1 16 0 2924 4251 100 MP stroke
+17 1 17 0 16 0 17 0 17 0 17 -1 16 0 17 0
+17 -1 17 -1 16 0 17 -1 17 -1 17 -1 16 -1 17 -1
+17 -1 17 -1 16 -1 17 -1 17 -2 16 -1 17 -1 17 -1
+17 -1 16 -1 17 -1 17 0 17 -1 16 -1 17 0 17 -1
+17 0 16 0 17 0 17 0 17 0 16 1 17 0 17 1
+16 1 17 0 17 2 17 1 16 1 17 2 17 2 17 2
+16 2 17 2 17 2 17 3 16 3 17 3 17 3 17 4
+16 3 17 4 17 3 17 4 16 3 17 4 17 3 16 3
+17 3 17 1 17 2 16 0 17 -1 17 -2 17 -3 16 -5
+17 -6 17 -9 17 -10 16 -13 17 -15 17 -18 17 -21 16 -23
+17 -26 17 -29 16 -31 17 -34 17 -37 17 -39 16 -41 17 -42
+2 -6 1449 4616 90 MP stroke
+DA
+17 -11 17 -11 16 -11 17 -11 17 -11 17 -12 16 -11 17 -11
+17 -11 17 -12 16 -11 17 -12 17 -11 17 -12 16 -11 17 -12
+17 -12 17 -11 16 -12 17 -12 17 -12 16 -12 17 -12 17 -11
+17 -12 16 -13 17 -12 17 -12 17 -12 16 -12 17 -12 17 -13
+17 -12 16 -13 17 -12 17 -13 17 -12 16 -13 17 -12 17 -13
+16 -13 17 -13 17 -13 17 -13 16 -13 17 -13 17 -13 17 -13
+16 -13 17 -14 17 -13 17 -13 16 -14 17 -13 17 -14 17 -14
+16 -14 17 -13 17 -14 16 -14 17 -14 17 -14 17 -14 16 -15
+17 -14 17 -14 17 -15 16 -14 17 -15 17 -15 17 -15 16 -14
+17 -15 17 -15 17 -16 16 -15 17 -15 17 -16 16 -15 17 -16
+17 -15 17 -16 16 -16 17 -16 17 -16 17 -17 16 -16 17 -16
+17 -17 17 -17 16 -16 17 -17 17 -18 17 -17 16 -17 17 -18
+17 -17 17 -18 16 -18 4581 2106 100 MP stroke
+17 -18 17 -18 16 -18 17 -19 17 -19 17 -18 16 -19 17 -20
+17 -19 17 -20 16 -19 17 -20 17 -21 17 -20 16 -21 17 -21
+17 -21 17 -21 16 -22 17 -22 17 -22 16 -22 17 -23 17 -23
+17 -23 16 -24 17 -24 17 -24 17 -25 16 -25 17 -26 17 -26
+17 -27 16 -27 17 -27 17 -28 17 -29 16 -29 17 -30 17 -31
+16 -32 17 -32 17 -33 17 -35 16 -35 17 -37 17 -38 17 -39
+16 -41 17 -43 17 -45 17 -48 16 -51 17 -54 17 -60 17 -66
+16 -74 17 -89 17 -115 16 -278 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 2924 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 16 0 17 0 17 0
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 1267 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 16 0 899 4262 23 MP stroke
+SO
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/interpolation_1d_2.pdf b/doc/tutorial/images/interpolation_1d_2.pdf
new file mode 100644
index 0000000..4dae8c5
Binary files /dev/null and b/doc/tutorial/images/interpolation_1d_2.pdf differ
diff --git a/doc/tutorial/images/interpolation_1d_3.eps b/doc/tutorial/images/interpolation_1d_3.eps
new file mode 100755
index 0000000..64fffd9
--- /dev/null
+++ b/doc/tutorial/images/interpolation_1d_3.eps
@@ -0,0 +1,357 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: interpolation_1d_3.eps
+%%CreationDate: 09/01/2004 09:49:25
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 59 199 558 583
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 59 199 558 583
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 498 340 5989 4614 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt 899 389 L
+ 899 4615 mt 899 4561 L
+ 899 389 mt 899 442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 562 4894 mt
+(-0.5) s
+3577 4615 mt 3577 4561 L
+3577 389 mt 3577 442 L
+3504 4894 mt
+(0) s
+6255 4615 mt 6255 4561 L
+6255 389 mt 6255 442 L
+6072 4894 mt
+(0.5) s
+ 899 4262 mt 952 4262 L
+6255 4262 mt 6201 4262 L
+ 718 4360 mt
+(0) s
+ 899 3558 mt 952 3558 L
+6255 3558 mt 6201 3558 L
+ 498 3656 mt
+(0.2) s
+ 899 2854 mt 952 2854 L
+6255 2854 mt 6201 2854 L
+ 498 2952 mt
+(0.4) s
+ 899 2149 mt 952 2149 L
+6255 2149 mt 6201 2149 L
+ 498 2247 mt
+(0.6) s
+ 899 1445 mt 952 1445 L
+6255 1445 mt 6201 1445 L
+ 498 1543 mt
+(0.8) s
+ 899 741 mt 952 741 L
+6255 741 mt 6201 741 L
+ 718 839 mt
+(1) s
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+gs 899 388 5357 4228 MR c np
+24 w
+gr
+
+24 w
+ 60 60 998 4262 FO
+ 60 60 1642 4262 FO
+ 60 60 2136 4262 FO
+ 60 60 3071 4262 FO
+ 60 60 3501 4262 FO
+ 60 60 4149 2634 FO
+ 60 60 4498 2196 FO
+ 60 60 4980 1713 FO
+ 60 60 5431 1332 FO
+ 60 60 5987 921 FO
+gs 899 388 5357 4228 MR c np
+15 97 16 119 17 127 17 136 17 142 16 149 17 155 17 160
+16 164 899 3367 10 MP stroke
+6 -6 16 -27 17 -32 17 -39 17 -43 16 -47 17 -50 17 -53
+17 -55 16 -56 17 -58 17 -57 16 -57 17 -57 17 -55 17 -53
+16 -51 17 -49 17 -47 17 -43 16 -41 17 -37 17 -35 17 -31
+16 -29 17 -25 17 -22 17 -20 16 -17 17 -15 17 -13 16 -11
+17 -9 17 -8 17 -6 16 -6 17 -5 17 -4 17 -5 16 -4
+17 -5 17 -5 17 -5 16 -6 17 -8 17 -7 17 -9 16 -10
+17 -11 17 -12 16 -13 17 -15 17 -15 17 -16 16 -16 17 -18
+17 -18 17 -18 16 -19 17 -20 17 -19 17 -20 16 -20 17 -19
+17 -20 17 -19 16 -18 17 -19 17 -18 17 -17 16 -17 17 -17
+17 -16 16 -16 17 -15 17 -15 17 -15 16 -15 17 -15 17 -15
+17 -15 16 -15 17 -16 17 -16 17 -17 16 -18 17 -19 17 -21
+17 -21 16 -23 17 -24 17 -25 16 -28 17 -29 17 -30 17 -33
+16 -34 17 -36 17 -38 4112 2715 100 MP stroke
+17 -40 16 -41 17 -43 17 -44 17 -46 16 -48 17 -48 17 -50
+17 -50 16 -52 17 -52 17 -52 16 -53 17 -53 17 -53 17 -52
+16 -52 17 -52 17 -50 17 -50 16 -48 17 -47 17 -46 17 -44
+16 -42 17 -41 17 -39 17 -36 16 -35 17 -32 17 -30 16 -28
+17 -26 17 -23 17 -22 16 -19 17 -17 17 -15 17 -13 16 -11
+17 -9 17 -7 17 -6 16 -4 17 -2 17 -1 17 0 16 1
+17 2 17 3 17 4 16 5 17 5 17 6 16 6 17 6
+17 6 17 7 16 6 17 6 17 7 17 6 16 5 17 6
+17 5 17 4 16 5 17 3 17 3 17 3 16 2 17 2
+17 1 16 1 17 0 17 0 17 -1 16 -1 17 -2 17 -2
+17 -2 16 -3 17 -3 17 -4 17 -3 16 -4 17 -4 17 -5
+17 -4 16 -5 17 -4 17 -5 16 -4 17 -5 17 -4 17 -5
+16 -4 17 -3 17 -4 2455 4304 100 MP stroke
+17 -3 16 -3 17 -2 17 -2 17 -2 16 0 17 -1 17 1
+17 1 16 2 17 2 17 4 16 4 17 5 17 5 17 7
+16 7 17 8 17 8 17 10 16 9 17 11 17 11 17 11
+16 11 17 12 17 11 17 12 16 11 17 10 17 10 17 9
+16 8 17 7 17 6 16 3 17 2 17 0 17 -2 16 -4
+17 -8 17 -10 17 -12 16 -16 17 -19 17 -22 17 -25 16 -28
+17 -32 17 -34 17 -38 16 -40 17 -43 17 -46 16 -47 17 -49
+14 -42 1504 4616 58 MP stroke
+17 170 17 171 16 172 17 171 17 170 17 167 16 165 17 160
+17 155 17 149 16 142 17 136 17 127 17 119 16 109 17 101
+17 91 17 80 16 71 17 61 17 50 16 41 17 30 4 4
+5849 388 25 MP stroke
+DA
+17 -11 17 -11 16 -11 17 -11 17 -11 17 -12 16 -11 17 -11
+17 -11 17 -12 16 -11 17 -12 17 -11 17 -12 16 -11 17 -12
+17 -12 17 -11 16 -12 17 -12 17 -12 16 -12 17 -12 17 -11
+17 -12 16 -13 17 -12 17 -12 17 -12 16 -12 17 -12 17 -13
+17 -12 16 -13 17 -12 17 -13 17 -12 16 -13 17 -12 17 -13
+16 -13 17 -13 17 -13 17 -13 16 -13 17 -13 17 -13 17 -13
+16 -13 17 -14 17 -13 17 -13 16 -14 17 -13 17 -14 17 -14
+16 -14 17 -13 17 -14 16 -14 17 -14 17 -14 17 -14 16 -15
+17 -14 17 -14 17 -15 16 -14 17 -15 17 -15 17 -15 16 -14
+17 -15 17 -15 17 -16 16 -15 17 -15 17 -16 16 -15 17 -16
+17 -15 17 -16 16 -16 17 -16 17 -16 17 -17 16 -16 17 -16
+17 -17 17 -17 16 -16 17 -17 17 -18 17 -17 16 -17 17 -18
+17 -17 17 -18 16 -18 4581 2106 100 MP stroke
+17 -18 17 -18 16 -18 17 -19 17 -19 17 -18 16 -19 17 -20
+17 -19 17 -20 16 -19 17 -20 17 -21 17 -20 16 -21 17 -21
+17 -21 17 -21 16 -22 17 -22 17 -22 16 -22 17 -23 17 -23
+17 -23 16 -24 17 -24 17 -24 17 -25 16 -25 17 -26 17 -26
+17 -27 16 -27 17 -27 17 -28 17 -29 16 -29 17 -30 17 -31
+16 -32 17 -32 17 -33 17 -35 16 -35 17 -37 17 -38 17 -39
+16 -41 17 -43 17 -45 17 -48 16 -51 17 -54 17 -60 17 -66
+16 -74 17 -89 17 -115 16 -278 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 2924 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 16 0 17 0 17 0
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 1267 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 16 0 899 4262 23 MP stroke
+SO
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/interpolation_1d_3.pdf b/doc/tutorial/images/interpolation_1d_3.pdf
new file mode 100644
index 0000000..d545f81
Binary files /dev/null and b/doc/tutorial/images/interpolation_1d_3.pdf differ
diff --git a/doc/tutorial/images/interpolation_1d_4.eps b/doc/tutorial/images/interpolation_1d_4.eps
new file mode 100755
index 0000000..d038dc2
--- /dev/null
+++ b/doc/tutorial/images/interpolation_1d_4.eps
@@ -0,0 +1,356 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: interpolation_1d_4.eps
+%%CreationDate: 09/01/2004 09:49:25
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 59 199 558 583
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 59 199 558 583
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 498 340 5989 4614 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt 899 389 L
+ 899 4615 mt 899 4561 L
+ 899 389 mt 899 442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 562 4894 mt
+(-0.5) s
+3577 4615 mt 3577 4561 L
+3577 389 mt 3577 442 L
+3504 4894 mt
+(0) s
+6255 4615 mt 6255 4561 L
+6255 389 mt 6255 442 L
+6072 4894 mt
+(0.5) s
+ 899 4262 mt 952 4262 L
+6255 4262 mt 6201 4262 L
+ 718 4360 mt
+(0) s
+ 899 3558 mt 952 3558 L
+6255 3558 mt 6201 3558 L
+ 498 3656 mt
+(0.2) s
+ 899 2854 mt 952 2854 L
+6255 2854 mt 6201 2854 L
+ 498 2952 mt
+(0.4) s
+ 899 2149 mt 952 2149 L
+6255 2149 mt 6201 2149 L
+ 498 2247 mt
+(0.6) s
+ 899 1445 mt 952 1445 L
+6255 1445 mt 6201 1445 L
+ 498 1543 mt
+(0.8) s
+ 899 741 mt 952 741 L
+6255 741 mt 6201 741 L
+ 718 839 mt
+(1) s
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+gs 899 388 5357 4228 MR c np
+24 w
+gr
+
+24 w
+ 60 60 998 4262 FO
+ 60 60 1642 4262 FO
+ 60 60 2136 4262 FO
+ 60 60 3071 4262 FO
+ 60 60 3501 4262 FO
+ 60 60 4149 2634 FO
+ 60 60 4498 2196 FO
+ 60 60 4980 1713 FO
+ 60 60 5431 1332 FO
+ 60 60 5987 921 FO
+gs 899 388 5357 4228 MR c np
+4 23 17 98 16 107 17 116 17 125 17 134 16 142 17 149
+17 155 16 161 899 3406 11 MP stroke
+17 169 17 172 16 174 17 173 17 174 17 171 16 169 17 164
+17 159 17 153 16 147 17 138 17 129 17 121 16 110 17 101
+17 90 17 79 16 68 17 57 17 46 16 37 17 25 17 17
+17 7 16 -2 17 -10 17 -17 17 -24 16 -31 17 -35 17 -40
+17 -44 16 -47 17 -49 17 -51 17 -53 16 -53 17 -54 17 -53
+16 -52 17 -51 17 -50 17 -47 16 -46 17 -44 17 -42 17 -39
+16 -37 17 -34 17 -31 17 -30 16 -26 17 -25 17 -22 17 -20
+16 -17 17 -16 17 -14 16 -13 17 -11 17 -9 17 -9 16 -7
+17 -7 17 -6 17 -6 16 -5 17 -5 17 -5 17 -6 16 -6
+17 -6 17 -7 17 -8 16 -8 17 -9 17 -11 16 -11 17 -13
+17 -13 17 -14 16 -16 17 -16 17 -17 17 -18 16 -19 17 -19
+17 -19 17 -20 16 -20 17 -21 17 -20 17 -20 16 -20 17 -19
+17 -20 17 -19 16 -18 4581 2112 100 MP stroke
+17 -18 17 -17 16 -17 17 -17 17 -16 17 -16 16 -16 17 -16
+17 -15 17 -16 16 -16 17 -17 17 -16 17 -18 16 -18 17 -19
+17 -20 17 -22 16 -22 17 -24 17 -25 16 -26 17 -28 17 -30
+17 -31 16 -33 17 -34 17 -36 17 -37 16 -39 17 -41 17 -42
+17 -43 16 -45 17 -45 17 -47 17 -48 16 -49 17 -49 17 -50
+16 -51 17 -50 17 -51 17 -52 16 -50 17 -51 17 -50 17 -50
+16 -49 17 -48 17 -47 17 -46 16 -44 17 -43 17 -42 17 -39
+16 -38 17 -36 17 -34 16 -31 17 -30 17 -27 17 -25 16 -22
+17 -20 17 -18 17 -16 16 -14 17 -11 17 -9 17 -8 16 -5
+17 -3 17 -2 17 0 16 1 17 3 17 3 17 5 16 6
+17 6 17 7 16 8 17 8 17 8 17 8 16 8 17 8
+17 8 17 7 16 7 17 7 17 6 17 5 16 5 17 4
+17 3 17 3 16 2 2924 4222 100 MP stroke
+17 1 17 1 16 1 17 -1 17 0 17 -2 16 -1 17 -2
+17 -2 17 -3 16 -2 17 -3 17 -3 17 -3 16 -3 17 -2
+17 -3 17 -3 16 -3 17 -3 17 -3 16 -3 17 -2 17 -3
+17 -3 16 -2 17 -3 17 -3 17 -2 16 -3 17 -2 17 -2
+17 -2 16 -1 17 -2 17 -1 17 0 16 0 17 1 17 1
+16 2 17 3 17 3 17 4 16 6 17 6 17 6 17 8
+16 8 17 10 17 9 17 10 16 11 17 11 17 10 17 11
+16 10 17 10 17 9 17 9 16 7 17 6 17 5 16 3
+17 1 17 -1 17 -2 16 -5 17 -7 17 -10 17 -12 16 -14
+17 -17 17 -19 17 -22 16 -24 17 -26 17 -29 17 -31 16 -32
+17 -35 17 -36 16 -37 17 -39 17 -40 17 -40 9 -23 1475 4616 88 MP stroke
+DA
+17 -11 17 -11 16 -11 17 -11 17 -11 17 -12 16 -11 17 -11
+17 -11 17 -12 16 -11 17 -12 17 -11 17 -12 16 -11 17 -12
+17 -12 17 -11 16 -12 17 -12 17 -12 16 -12 17 -12 17 -11
+17 -12 16 -13 17 -12 17 -12 17 -12 16 -12 17 -12 17 -13
+17 -12 16 -13 17 -12 17 -13 17 -12 16 -13 17 -12 17 -13
+16 -13 17 -13 17 -13 17 -13 16 -13 17 -13 17 -13 17 -13
+16 -13 17 -14 17 -13 17 -13 16 -14 17 -13 17 -14 17 -14
+16 -14 17 -13 17 -14 16 -14 17 -14 17 -14 17 -14 16 -15
+17 -14 17 -14 17 -15 16 -14 17 -15 17 -15 17 -15 16 -14
+17 -15 17 -15 17 -16 16 -15 17 -15 17 -16 16 -15 17 -16
+17 -15 17 -16 16 -16 17 -16 17 -16 17 -17 16 -16 17 -16
+17 -17 17 -17 16 -16 17 -17 17 -18 17 -17 16 -17 17 -18
+17 -17 17 -18 16 -18 4581 2106 100 MP stroke
+17 -18 17 -18 16 -18 17 -19 17 -19 17 -18 16 -19 17 -20
+17 -19 17 -20 16 -19 17 -20 17 -21 17 -20 16 -21 17 -21
+17 -21 17 -21 16 -22 17 -22 17 -22 16 -22 17 -23 17 -23
+17 -23 16 -24 17 -24 17 -24 17 -25 16 -25 17 -26 17 -26
+17 -27 16 -27 17 -27 17 -28 17 -29 16 -29 17 -30 17 -31
+16 -32 17 -32 17 -33 17 -35 16 -35 17 -37 17 -38 17 -39
+16 -41 17 -43 17 -45 17 -48 16 -51 17 -54 17 -60 17 -66
+16 -74 17 -89 17 -115 16 -278 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 2924 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 16 0 17 0 17 0
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 1267 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 16 0 899 4262 23 MP stroke
+SO
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/interpolation_1d_4.pdf b/doc/tutorial/images/interpolation_1d_4.pdf
new file mode 100644
index 0000000..8efa36f
Binary files /dev/null and b/doc/tutorial/images/interpolation_1d_4.pdf differ
diff --git a/doc/tutorial/images/interpolation_1d_5.eps b/doc/tutorial/images/interpolation_1d_5.eps
new file mode 100755
index 0000000..19b514c
--- /dev/null
+++ b/doc/tutorial/images/interpolation_1d_5.eps
@@ -0,0 +1,357 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: interpolation_1d_5.eps
+%%CreationDate: 09/01/2004 09:49:25
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 59 199 558 583
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 59 199 558 583
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 498 340 5989 4614 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt 899 389 L
+ 899 4615 mt 899 4561 L
+ 899 389 mt 899 442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 562 4894 mt
+(-0.5) s
+3577 4615 mt 3577 4561 L
+3577 389 mt 3577 442 L
+3504 4894 mt
+(0) s
+6255 4615 mt 6255 4561 L
+6255 389 mt 6255 442 L
+6072 4894 mt
+(0.5) s
+ 899 4262 mt 952 4262 L
+6255 4262 mt 6201 4262 L
+ 718 4360 mt
+(0) s
+ 899 3558 mt 952 3558 L
+6255 3558 mt 6201 3558 L
+ 498 3656 mt
+(0.2) s
+ 899 2854 mt 952 2854 L
+6255 2854 mt 6201 2854 L
+ 498 2952 mt
+(0.4) s
+ 899 2149 mt 952 2149 L
+6255 2149 mt 6201 2149 L
+ 498 2247 mt
+(0.6) s
+ 899 1445 mt 952 1445 L
+6255 1445 mt 6201 1445 L
+ 498 1543 mt
+(0.8) s
+ 899 741 mt 952 741 L
+6255 741 mt 6201 741 L
+ 718 839 mt
+(1) s
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+gs 899 388 5357 4228 MR c np
+24 w
+gr
+
+24 w
+ 60 60 998 4262 FO
+ 60 60 1642 4262 FO
+ 60 60 2136 4262 FO
+ 60 60 3071 4262 FO
+ 60 60 3501 4262 FO
+ 60 60 4149 2634 FO
+ 60 60 4498 2196 FO
+ 60 60 4980 1713 FO
+ 60 60 5431 1332 FO
+ 60 60 5987 921 FO
+gs 899 388 5357 4228 MR c np
+6 29 17 96 16 105 17 114 17 124 17 133 16 140 17 149
+17 155 16 160 899 3411 11 MP stroke
+17 170 17 172 16 174 17 175 17 174 17 172 16 169 17 165
+17 160 17 153 16 147 17 138 17 130 17 120 16 109 17 100
+17 89 17 77 16 67 17 56 17 45 16 34 17 25 17 14
+17 5 16 -3 17 -11 17 -19 17 -25 16 -31 17 -36 17 -40
+17 -44 16 -46 17 -49 17 -51 17 -52 16 -52 17 -52 17 -51
+16 -51 17 -49 17 -48 17 -46 16 -44 17 -42 17 -40 17 -37
+16 -35 17 -33 17 -31 17 -28 16 -25 17 -24 17 -21 17 -20
+16 -18 17 -15 17 -14 16 -13 17 -11 17 -10 17 -9 16 -8
+17 -7 17 -7 17 -6 16 -6 17 -6 17 -6 17 -6 16 -6
+17 -7 17 -7 17 -9 16 -8 17 -10 17 -11 16 -11 17 -13
+17 -13 17 -15 16 -15 17 -17 17 -17 17 -18 16 -18 17 -19
+17 -20 17 -20 16 -20 17 -20 17 -20 17 -20 16 -20 17 -20
+17 -19 17 -18 16 -19 4581 2113 100 MP stroke
+17 -17 17 -18 16 -17 17 -16 17 -16 17 -16 16 -16 17 -15
+17 -16 17 -16 16 -16 17 -16 17 -17 17 -17 16 -19 17 -19
+17 -20 17 -21 16 -23 17 -23 17 -25 16 -27 17 -28 17 -30
+17 -31 16 -33 17 -34 17 -36 17 -37 16 -39 17 -41 17 -42
+17 -43 16 -44 17 -46 17 -47 17 -47 16 -49 17 -49 17 -50
+16 -51 17 -50 17 -51 17 -52 16 -51 17 -50 17 -51 17 -49
+16 -50 17 -48 17 -47 17 -46 16 -44 17 -43 17 -42 17 -40
+16 -37 17 -36 17 -34 16 -32 17 -29 17 -27 17 -25 16 -22
+17 -20 17 -18 17 -16 16 -13 17 -11 17 -9 17 -7 16 -6
+17 -3 17 -2 17 0 16 2 17 2 17 4 17 5 16 6
+17 6 17 7 16 8 17 7 17 8 17 8 16 8 17 8
+17 7 17 7 16 7 17 6 17 6 17 5 16 4 17 4
+17 3 17 3 16 2 2924 4224 100 MP stroke
+17 1 17 1 16 0 17 0 17 -1 17 -1 16 -1 17 -2
+17 -2 17 -2 16 -2 17 -3 17 -2 17 -3 16 -2 17 -3
+17 -2 17 -3 16 -2 17 -2 17 -3 16 -2 17 -2 17 -2
+17 -2 16 -3 17 -2 17 -2 17 -2 16 -3 17 -2 17 -2
+17 -2 16 -1 17 -2 17 -1 17 -1 16 0 17 0 17 1
+16 1 17 2 17 3 17 4 16 4 17 5 17 6 17 7
+16 8 17 8 17 9 17 9 16 10 17 10 17 10 17 10
+16 9 17 9 17 9 17 8 16 7 17 5 17 5 16 3
+17 1 17 -1 17 -2 16 -5 17 -6 17 -9 17 -11 16 -13
+17 -16 17 -18 17 -20 16 -22 17 -24 17 -27 17 -28 16 -30
+17 -32 17 -34 16 -35 17 -36 17 -37 17 -38 16 -39 3 -7
+1465 4616 89 MP stroke
+DA
+17 -11 17 -11 16 -11 17 -11 17 -11 17 -12 16 -11 17 -11
+17 -11 17 -12 16 -11 17 -12 17 -11 17 -12 16 -11 17 -12
+17 -12 17 -11 16 -12 17 -12 17 -12 16 -12 17 -12 17 -11
+17 -12 16 -13 17 -12 17 -12 17 -12 16 -12 17 -12 17 -13
+17 -12 16 -13 17 -12 17 -13 17 -12 16 -13 17 -12 17 -13
+16 -13 17 -13 17 -13 17 -13 16 -13 17 -13 17 -13 17 -13
+16 -13 17 -14 17 -13 17 -13 16 -14 17 -13 17 -14 17 -14
+16 -14 17 -13 17 -14 16 -14 17 -14 17 -14 17 -14 16 -15
+17 -14 17 -14 17 -15 16 -14 17 -15 17 -15 17 -15 16 -14
+17 -15 17 -15 17 -16 16 -15 17 -15 17 -16 16 -15 17 -16
+17 -15 17 -16 16 -16 17 -16 17 -16 17 -17 16 -16 17 -16
+17 -17 17 -17 16 -16 17 -17 17 -18 17 -17 16 -17 17 -18
+17 -17 17 -18 16 -18 4581 2106 100 MP stroke
+17 -18 17 -18 16 -18 17 -19 17 -19 17 -18 16 -19 17 -20
+17 -19 17 -20 16 -19 17 -20 17 -21 17 -20 16 -21 17 -21
+17 -21 17 -21 16 -22 17 -22 17 -22 16 -22 17 -23 17 -23
+17 -23 16 -24 17 -24 17 -24 17 -25 16 -25 17 -26 17 -26
+17 -27 16 -27 17 -27 17 -28 17 -29 16 -29 17 -30 17 -31
+16 -32 17 -32 17 -33 17 -35 16 -35 17 -37 17 -38 17 -39
+16 -41 17 -43 17 -45 17 -48 16 -51 17 -54 17 -60 17 -66
+16 -74 17 -89 17 -115 16 -278 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 2924 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 16 0 17 0 17 0
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0
+17 0 16 0 17 0 17 0 17 0 16 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 17 0
+16 0 17 0 17 0 17 0 16 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 17 0 16 0 17 0 17 0 17 0 16 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 1267 4262 100 MP stroke
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 17 0 16 0 17 0
+17 0 17 0 16 0 17 0 17 0 16 0 899 4262 23 MP stroke
+SO
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/interpolation_1d_5.pdf b/doc/tutorial/images/interpolation_1d_5.pdf
new file mode 100644
index 0000000..ef85ff8
Binary files /dev/null and b/doc/tutorial/images/interpolation_1d_5.pdf differ
diff --git a/doc/tutorial/images/linogram_grid.eps b/doc/tutorial/images/linogram_grid.eps
new file mode 100644
index 0000000..cf8ddd8
--- /dev/null
+++ b/doc/tutorial/images/linogram_grid.eps
@@ -0,0 +1,87 @@
+%!PS-Adobe-3.0 EPSF-3.0
%%Title: (paper.dvi)
%%Version: 1 3
%%Creator: Adobe Acrobat 7.0
%%CreationDate: 20/10/06 15:23
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%ADO_ContainsXMP: MainFirst
%%BoundingBox: 363 364 478 463
%%HiResBoundingBox: 362.994 364.042 477.994 462.625
%%Pages: 0
%%DocumentProcessColors: Cyan Magenta Yellow Black
%%DocumentSuppliedResources:
%%+ procset (Adobe Acrobat - PDF operators) 1.2 0
%%+ procset (Adobe Acrobat - type operators) 1.2 0
%%EndComments
%%BeginProlog
%%EndProlog
%%BeginSetup
%ADOPrintSettings: L2 W0 VM op crd os scsa T h ef bg ucr sf ef r b fa pr seps ttf hb EF t2 irt Printer/PostScript Color Management 0
+
%%BeginResource: procset l2check 6.0 1
%%Copyright: Copyright 1993,2001 Adobe Systems Incorporated. All Rights Reserved.
systemdict /languagelevel known
{ systemdict /languagelevel get 1 eq }
{ true }
ifelse
{
initgraphics /Helvetica findfont 18 scalefont setfont
72 600 moveto (Error: This application does not support) dup show
72 580 moveto (printing to a PostScript Language Level 1 printer.) dup show
exch = =
/Times-Roman findfont 16 scalefont setfont
72 500 moveto (As a workaround, try selecting Print As Image from) show
72 480 moveto (the Advanced Print dialog.) show
showpage
quit
}
if
%%EndResource
%%BeginResource: file Pscript_CFF PSVER
userdict /ct_CffDict 6 dict put
ct_CffDict begin
/F0Subr
{
systemdict /internaldict known
{
1183615869 systemdict /internaldict get exec
/FlxProc known {save true} {false} ifelse
}
{
userdict /internaldict known not
{
userdict /internaldict
{
count 0 eq
{/internaldict errordict /invalidaccess get exec} if
dup type /integertype ne
{/internaldict errordict /invalidaccess get exec} if
dup 1183615869 eq
{pop 0}
{/internaldict errordict /invalidaccess get exec}
ifelse
}
dup 14 get 1 25 dict put
bind executeonly put
} if
1183615869 userdict /internaldict get exec
/FlxProc known {save true} {false} ifelse
} ifelse
[
systemdict /internaldict known not
{ 100 dict /begin cvx /mtx matrix /def cvx } if
systemdict /currentpacking known {currentpacking true setpacking} if
{
systemdict /internaldict known {
1183615869 systemdict /internaldict get exec
dup /$FlxDict known not {
dup dup length exch maxlength eq
{ pop userdict dup /$FlxDict known not
{ 100 dict begin /mtx matrix def
dup /$FlxDict currentdict put end } if }
{ 100 dict begin /mtx matrix def
dup /$FlxDict currentdict put end }
ifelse
} if /$FlxDict get begin } if
grestore
/exdef {exch def} def
/dmin exch abs 100 div def
/epX exdef /epY exdef
/c4y2 exdef /c4x2 exdef /c4y1 exdef /c4x1 exdef /c4y0 exdef /c4x0 exdef
/c3y2 exdef /c3x2 exdef /c3y1 exdef /c3x1 exdef /c3y0 exdef /c3x0 exdef
/c1y2 exdef /c1x2 exdef /c2x2 c4x2 def /c2y2 c4y2 def
/yflag c1y2 c3y2 sub abs c1x2 c3x2 sub abs gt def
/PickCoords {
{c1x0 c1y0 c1x1 c1y1 c1x2 c1y2 c2x0 c2y0 c2x1 c2y1 c2x2 c2y2}
{c3x0 c3y0 c3x1 c3y1 c3x2 c3y2 c4x0 c4y0 c4x1 c4y1 c4x2 c4y2}
ifelse
/y5 exdef /x5 exdef /y4 exdef /x4 exdef /y3 exdef /x3 exdef
/y2 exdef /x2 exdef /y1 exdef /x1 exdef /y0 exdef /x0 exdef
} def
mtx currentmatrix pop
mtx 0 get abs .00001 lt mtx 3 get abs .00001 lt or
{/flipXY -1 def}
{mtx 1 get abs .00001 lt mtx 2 get abs .00001 lt or
{/flipXY 1 def}
{/flipXY 0 def}
ifelse }
ifelse
/erosion 1 def
systemdict /internaldict known {
1183615869 systemdict /internaldict get exec dup
/erosion known
{/erosion get /erosion exch def}
{pop}
ifelse
} if
yflag
{
flipXY 0 eq c3y2 c4y2 eq or
{false PickCoords}
{
/shrink c3y2 c4y2 eq
{0}{c1y2 c4y2 sub c3y2 c4y2 sub div abs} ifelse def
/yshrink {c4y2 sub shrink mul c4y2 add} def
/c1y0 c3y0 yshrink def /c1y1 c3y1 yshrink def
/c2y0 c4y0 yshrink def /c2y1 c4y1 yshrink def
/c1x0 c3x0 def /c1x1 c3x1 def /c2x0 c4x0 def /c2x1 c4x1 def
/dY 0 c3y2 c1y2 sub round
dtransform flipXY 1 eq {exch} if pop abs def
dY dmin lt PickCoords
y2 c1y2 sub abs 0.001 gt {
c1x2 c1y2 transform flipXY 1 eq {exch} if
/cx exch def /cy exch def
/dY 0 y2 c1y2 sub round dtransform flipXY 1 eq {exch}
if pop def
dY round dup 0 ne
{/dY exdef }
{pop dY 0 lt {-1}{1} ifelse /dY exdef}
ifelse
/erode PaintType 2 ne erosion 0.5 ge and def
erode {/cy cy 0.5 sub def} if
/ey cy dY add def
/ey ey ceiling ey sub ey floor add def
erode {/ey ey 0.5 add def} if
ey cx flipXY 1 eq {exch} if itransform exch pop
y2 sub /eShift exch def
/y1 y1 eShift add def /y2 y2 eShift add def /y3 y3
eShift add def
} if
} ifelse
}
{
flipXY 0 eq c3x2 c4x2 eq or
{false PickCoords }
{ /shrink c3x2 c4x2 eq
{0}{c1x2 c4x2 sub c3x2 c4x2 sub div abs} ifelse def
/xshrink {c4x2 sub shrink mul c4x2 add} def
/c1x0 c3x0 xshrink def /c1x1 c3x1 xshrink def
/c2x0 c4x0 xshrink def /c2x1 c4x1 xshrink def
/c1y0 c3y0 def /c1y1 c3y1 def /c2y0 c4y0 def /c2y1 c4y1 def
/dX c3x2 c1x2 sub round 0 dtransform
flipXY -1 eq {exch} if pop abs def
dX dmin lt PickCoords
x2 c1x2 sub abs 0.001 gt {
c1x2 c1y2 transform flipXY -1 eq {exch} if
/cy exch def /cx exch def
/dX x2 c1x2 sub round 0 dtransform flipXY -1 eq {exch} if pop def
dX round dup 0 ne
{/dX exdef}
{pop dX 0 lt {-1}{1} ifelse /dX exdef}
ifelse
/erode PaintType 2 ne erosion .5 ge and def
erode {/cx cx .5 sub def} if
/ex cx dX add def
/ex ex ceiling ex sub ex floor add def
erode {/ex ex .5 add def} if
ex cy flipXY -1 eq {exch} if itransform pop
x2 sub /eShift exch def
/x1 x1 eShift add def /x2 x2 eShift add def /x3 x3 eShift add def
} if
} ifelse
} ifelse
x2 x5 eq y2 y5 eq or
{x5 y5 lineto }
{x0 y0 x1 y1 x2 y2 curveto
x3 y3 x4 y4 x5 y5 curveto}
ifelse
epY epX
}
systemdict /currentpacking known {exch setpacking} if
/exec cvx /end cvx
] cvx
executeonly
exch
{pop true exch restore}
{
systemdict /internaldict known not
{1183615869 userdict /internaldict get exec
exch /FlxProc exch put true}
{1183615869 systemdict /internaldict get exec
dup length exch maxlength eq
{false}
{1183615869 systemdict /internaldict get exec
exch /FlxProc exch put true}
ifelse}
ifelse
} ifelse
{
systemdict /internaldict known
{1183615869 systemdict /internaldict get exec /FlxProc get exec}
{1183615869 userdict /internaldict get exec /FlxProc get exec}
ifelse
} if
} executeonly def
/F1Subr
{gsave currentpoint newpath moveto} bind def
/F2Subr
{currentpoint grestore gsave currentpoint newpath moveto} bind def
/HSSubr
{
systemdict /internaldict known not
{pop 3}
{1183615869 systemdict /internaldict get exec
dup /startlock known
{/startlock get exec}
{dup /strtlck known
{/strtlck get exec}
{pop 3}
ifelse}
ifelse}
ifelse
} bind def
end
%%EndResource
/currentpacking where{pop currentpacking true setpacking}if
%%BeginResource: procset pdfvars 6.0 1
%%Copyright: Copyright 1987-2002 Adobe Systems Incorporated. All Rights Reserved.
%%Title: definition of dictionary of variables used by PDF & PDFText procsets
userdict /PDF 162 dict put
userdict /PDFVars 89 dict dup begin put
/docSetupDone false def
/InitAll 0 def
/TermAll 0 def
/DocInitAll 0 def
/DocTermAll 0 def
/_pdfEncodings 2 array def
/_pdf_str1 1 string def
/_pdf_i 0 def
/_pdf_na 0 def
/_pdf_showproc 0 def
/_italMtx [1 0 .212557 1 0 0] def
/_italMtx_WMode1 [1 -.212557 0 1 0 0] def
/_italMtxType0 [1 0 .1062785 1 0 0] def
/_italMtx_WMode1Type0 [1 -.1062785 0 1 0 0] def
/_basefont 0 def
/_basefonto 0 def
/_pdf_oldCIDInit null def
/_pdf_FontDirectory 30 dict def
/_categories 10 dict def
/_sa? true def
/_ColorSep5044? false def
/nulldict 0 dict def
/_processColors 0 def
/overprintstack null def
/_defaulttransfer currenttransfer def
/_defaultflatness currentflat def
/_defaulthalftone null def
/_defaultcolortransfer null def
/_defaultblackgeneration null def
/_defaultundercolorremoval null def
/_defaultcolortransfer null def
PDF begin
[/c/cs/cm/d/d0/f/h/i/j/J/l/m/M/n/q/Q/re/ri/S/sc/sh/Tf/w/W
/applyInterpFunc/applystitchFunc/domainClip/encodeInput
/initgs/int/limit/rangeClip
/defineRes/undefineRes/findRes/setSA/pl
/? /! /| /: /+ /GetGlyphDirectory
/pdf_flushFilters /pdf_readstring /pdf_dictOp /pdf_image /pdf_maskedImage
/pdf_shfill /pdf_sethalftone
] {null def} bind forall
end
end
%%EndResource
PDFVars begin PDF begin
%%BeginResource: procset pdfutil 6.0 1
%%Copyright: Copyright 1993-2001 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Basic utilities used by other PDF procsets
/bd {bind def} bind def
/ld {load def} bd
/bld {
dup length dict begin
{ null def } forall
bind
end
def
} bd
/dd { PDFVars 3 1 roll put } bd
/xdd { exch dd } bd
/Level2?
systemdict /languagelevel known
{ systemdict /languagelevel get 2 ge } { false } ifelse
def
/Level1? Level2? not def
/Level3?
systemdict /languagelevel known
{systemdict /languagelevel get 3 eq } { false } ifelse
def
/getifknown {
2 copy known { get true } { pop pop false } ifelse
} bd
/here {
currentdict exch getifknown
} bd
/isdefined? { where { pop true } { false } ifelse } bd
%%EndResource
%%BeginResource: procset pdf 6.0 1
%%Copyright: Copyright 1998-2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: General operators for PDF, common to all Language Levels.
/cm { matrix astore concat } bd
/d /setdash ld
/f /fill ld
/h /closepath ld
/i {dup 0 eq {pop _defaultflatness} if setflat} bd
/j /setlinejoin ld
/J /setlinecap ld
/M /setmiterlimit ld
/n /newpath ld
/S /stroke ld
/w /setlinewidth ld
/W /clip ld
/sg /setgray ld
/initgs {
0 setgray
[] 0 d
0 j
0 J
10 M
1 w
false setSA
/_defaulttransfer load settransfer
0 i
/RelativeColorimetric ri
newpath
} bd
/int {
dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul
exch pop add exch pop
} bd
/limit {
dup 2 index le { exch } if pop
dup 2 index ge { exch } if pop
} bd
/domainClip {
Domain aload pop 3 2 roll
limit
} [/Domain] bld
/applyInterpFunc {
0 1 DimOut 1 sub
{
dup C0 exch get exch
dup C1 exch get exch
3 1 roll
1 index sub
3 index
N exp mul add
exch
currentdict /Range_lo known
{
dup Range_lo exch get exch
Range_hi exch get
3 2 roll limit
}
{
pop
}
ifelse
exch
} for
pop
} [/DimOut /C0 /C1 /N /Range_lo /Range_hi] bld
/encodeInput {
NumParts 1 sub
0 1 2 index
{
dup Bounds exch get
2 index gt
{ exit }
{ dup
3 index eq
{ exit }
{ pop } ifelse
} ifelse
} for
3 2 roll pop
dup Bounds exch get exch
dup 1 add Bounds exch get exch
2 mul
dup Encode exch get exch
1 add Encode exch get
int
} [/NumParts /Bounds /Encode] bld
/rangeClip {
exch dup Range_lo exch get
exch Range_hi exch get
3 2 roll
limit
} [/Range_lo /Range_hi] bld
/applyStitchFunc {
Functions exch get exec
currentdict /Range_lo known {
0 1 DimOut 1 sub {
DimOut 1 add -1 roll
rangeClip
} for
} if
} [/Functions /Range_lo /DimOut] bld
/pdf_flushfilters
{
aload length
{ dup status
1 index currentfile ne and
{ dup flushfile closefile }
{ pop }
ifelse
} repeat
} bd
/pdf_readstring
{
1 index dup length 1 sub get
exch readstring pop
exch pdf_flushfilters
} bind def
/pdf_dictOp
{
3 2 roll
10 dict copy
begin
_Filters dup length 1 sub get def
currentdict exch exec
_Filters pdf_flushfilters
end
} [/_Filters] bld
/pdf_imagemask {{imagemask} /DataSource pdf_dictOp} bd
/pdf_shfill {{sh} /DataSource pdf_dictOp} bd
/pdf_sethalftone {{sethalftone} /Thresholds pdf_dictOp} bd
/masks [ 2#10000000
2#11000000
2#11100000
2#11110000
2#11111000
2#11111100
2#11111110
2#11111111 ] def
/addNBits
{
/numBits exch def
/byte exch def
OutBitOffset numBits add 8 gt
{
byte OutBitOffset 8 sub bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutByteIndex OutByteIndex 1 add def
/bitsDoneSoFar OutBitOffset def
/OutBitOffset numBits 8 OutBitOffset sub sub def
OutBitOffset 0 gt
{
byte bitsDoneSoFar bitshift
masks numBits bitsDoneSoFar sub get and
OutBuffer OutByteIndex 3 -1 roll put
} if
}
{
byte masks numBits 1 sub get and
OutBitOffset neg bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutBitOffset OutBitOffset numBits add def
OutBitOffset 8 eq
{
/OutBitOffset 0 def
/OutByteIndex OutByteIndex 1 add def
} if
} ifelse
} bind def
/DevNNFilter
{
/InBuffer Width NumComps mul BitsPerComponent mul 7 add 8 idiv string def
AllSource InBuffer readstring pop pop
/outlen Width NewNumComps mul BitsPerComponent mul 7 add 8 idiv def
/OutBuffer outlen string def
0 1 outlen 1 sub { OutBuffer exch 0 put } for
/InByteIndex 0 def
/InBitOffset 0 def
/OutByteIndex 0 def
/OutBitOffset 0 def
/KeepArray NumComps array def
0 1 NumComps 1 sub { KeepArray exch true put } for
DevNNones { KeepArray exch false put } forall
Width {
KeepArray
{
{
/bitsLeft BitsPerComponent def
{
bitsLeft 0 le { exit } if
/bitsToDo 8 InBitOffset sub dup bitsLeft gt { pop bitsLeft } if def
InBuffer InByteIndex get
InBitOffset bitshift
bitsToDo addNBits
/bitsLeft bitsLeft bitsToDo sub def
InBitOffset bitsToDo add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
} loop
}
{
InBitOffset BitsPerComponent add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
}
ifelse
}
forall
} repeat
OutBuffer
} bd
/pdf_image
{
20 dict copy
begin
/UnusedNones where { /UnusedNones get}{false} ifelse
{
/NumComps Decode length 2 div cvi def
/OrigDecode Decode def
/NumNones DevNNones length def
/NewNumComps NumComps NumNones sub def
/Decode NewNumComps 2 mul cvi array def
/devNNindx 0 def
/decIndx 0 def
/cmpIndx 0 def
NumComps {
cmpIndx DevNNones devNNindx get eq
{
/devNNindx devNNindx 1 add dup NumNones eq {pop 0} if def
}
{
Decode decIndx OrigDecode cmpIndx 2 mul get put
Decode decIndx 1 add OrigDecode cmpIndx 2 mul 1 add get put
/decIndx decIndx 2 add def
} ifelse
/cmpIndx cmpIndx 1 add def
} repeat
_Filters dup length 1 sub get /AllSource exch def
/DataSource { DevNNFilter } def
}
{ _Filters dup length 1 sub get /DataSource exch def }
ifelse
currentdict image
_Filters pdf_flushfilters
end
} bd
/pdf_maskedImage
{
10 dict copy begin
/miDict currentdict def
/DataDict DataDict 10 dict copy def
DataDict begin
/DataSource
_Filters dup length 1 sub get
def
miDict image
_Filters pdf_flushfilters
end
miDict /InterleaveType get 3 eq
{ MaskDict /DataSource get dup type /filetype eq { closefile } { pop } ifelse }
if
end
} [/miDict /DataDict /_Filters] bld
/RadialShade {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/r2 exch def
/c2y exch def
/c2x exch def
/r1 exch def
/c1y exch def
/c1x exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
c1x c2x eq
{
c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope c2y c1y sub c2x c1x sub div def
/theta slope 1 atan def
c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
c1x c1y translate
theta rotate
-90 rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
/max { 2 copy gt { pop } {exch pop} ifelse } bind def
/min { 2 copy lt { pop } {exch pop} ifelse } bind def
rampdict begin
40 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
c1x c1y translate
theta rotate
-90 rotate
/c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
/c1y 0 def
/c1x 0 def
/c2x 0 def
ext0 {
0 getrampcolor
c2y r2 add r1 sub 0.0001 lt
{
c1x c1y r1 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2y r1 add r2 le
{
c1x c1y r1 0 360 arc
fill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r1 neg def
/p1y c1y def
/p2x r1 def
/p2y c1y def
p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y p1x SS1 div neg def
/SS2 90 theta sub dup sin exch cos div def
/p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y p2x SS2 div neg def
r1 r2 gt
{
/L1maxX p1x yMin p1y sub SS1 div add def
/L2maxX p2x yMin p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
c1x c2x sub dup mul
c1y c2y sub dup mul
add 0.5 exp
0 dtransform
dup mul exch dup mul add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
/hires exch def
hires mul
/numpix exch def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
/xInc c2x c1x sub numsteps div def
/yInc c2y c1y sub numsteps div def
/rInc r2 r1 sub numsteps div def
/cx c1x def
/cy c1y def
/radius r1 def
newpath
xInc 0 eq yInc 0 eq rInc 0 eq and and
{
0 getrampcolor
cx cy radius 0 360 arc
stroke
NumSamples 1 sub getrampcolor
cx cy radius 72 hires div add 0 360 arc
0 setlinewidth
stroke
}
{
0
numsteps
{
dup
subsampling { round } if
getrampcolor
cx cy radius 0 360 arc
/cx cx xInc add def
/cy cy yInc add def
/radius radius rInc add def
cx cy radius 360 0 arcn
eofill
rampIndxInc add
}
repeat
pop
} ifelse
ext1 {
c2y r2 add r1 lt
{
c2x c2y r2 0 360 arc
fill
}
{
c2y r1 add r2 sub 0.0001 le
{
c2x c2y r2 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r2 neg def
/p1y c2y def
/p2x r2 def
/p2y c2y def
p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y c2y p1x SS1 div sub def
/SS2 90 theta sub dup sin exch cos div def
/p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y c2y p2x SS2 div sub def
r1 r2 lt
{
/L1maxX p1x yMax p1y sub SS1 div add def
/L2maxX p2x yMax p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
grestore
grestore
end
end
end
} ifelse
} bd
/GenStrips {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/y2 exch def
/x2 exch def
/y1 exch def
/x1 exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
x1 x2 eq
{
y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope y2 y1 sub x2 x1 sub div def
/theta slope 1 atan def
x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
x1 y1 translate
theta rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
rampdict begin
20 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
x1 y1 translate
theta rotate
/xStart 0 def
/xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
/ySpan yMax yMin sub def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
xStart 0 transform
xEnd 0 transform
3 -1 roll
sub dup mul
3 1 roll
sub dup mul
add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
mul
/numpix exch def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
ext0 {
0 getrampcolor
xMin xStart lt
{ xMin yMin xMin neg ySpan rectfill } if
} if
/xInc xEnd xStart sub numsteps div def
/x xStart def
0
numsteps
{
dup
subsampling { round } if
getrampcolor
x yMin xInc ySpan rectfill
/x x xInc add def
rampIndxInc add
}
repeat
pop
ext1 {
xMax xEnd gt
{ xEnd yMin xMax xEnd sub ySpan rectfill } if
} if
grestore
grestore
end
end
end
} ifelse
} bd
/currentdistillerparams where { pop currentdistillerparams /CoreDistVersion get 5000 lt}{true}ifelse
{
/PDFMark5 {cleartomark} bd
}
{
/PDFMark5 {pdfmark} bd
}ifelse
/ReadByPDFMark5
{
2 dict begin
/makerString exch def string /tmpString exch def
{
currentfile tmpString readline pop
makerString anchorsearch
{
pop pop cleartomark exit
}
{
3 copy /PUT PDFMark5 pop 2 copy (\n) /PUT PDFMark5
} ifelse
}loop
end
}bd
%%EndResource
%%BeginResource: procset pdflev2 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: PDF operators, with code specific for Level 2
/docinitialize {
PDF begin
/_defaulthalftone currenthalftone dd
/_defaultblackgeneration currentblackgeneration dd
/_defaultundercolorremoval currentundercolorremoval dd
/_defaultcolortransfer [currentcolortransfer] dd
/_defaulttransfer currenttransfer dd
end
PDFVars /docSetupDone true put
} bd
/initialize {
PDFVars /docSetupDone get {
_defaulthalftone sethalftone
/_defaultblackgeneration load setblackgeneration
/_defaultundercolorremoval load setundercolorremoval
_defaultcolortransfer aload pop setcolortransfer
} if
false setoverprint
} bd
/terminate { } bd
/c /curveto ld
/cs /setcolorspace ld
/l /lineto ld
/m /moveto ld
/q /gsave ld
/Q /grestore ld
/sc /setcolor ld
/setSA/setstrokeadjust ld
/re {
4 2 roll m
1 index 0 rlineto
0 exch rlineto
neg 0 rlineto
h
} bd
/concattransferfuncs {
[ 3 1 roll /exec load exch /exec load ] cvx
} bd
/concatandsettransfer {
/_defaulttransfer load concattransferfuncs settransfer
} bd
/concatandsetcolortransfer {
_defaultcolortransfer aload pop
8 -1 roll 5 -1 roll concattransferfuncs 7 1 roll
6 -1 roll 4 -1 roll concattransferfuncs 5 1 roll
4 -1 roll 3 -1 roll concattransferfuncs 3 1 roll
concattransferfuncs
setcolortransfer
} bd
/defineRes/defineresource ld
/undefineRes/undefineresource ld
/findRes/findresource ld
currentglobal
true systemdict /setglobal get exec
[/Function /ExtGState /Form /Shading /FunctionDictionary /MadePattern /PatternPrototype /DataSource /Image]
{ /Generic /Category findresource dup length dict copy /Category defineresource pop }
forall
systemdict /setglobal get exec
/ri
{
/findcolorrendering isdefined?
{
mark exch
findcolorrendering
counttomark 2 eq
{ type /booleantype eq
{ dup type /nametype eq
{ dup /ColorRendering resourcestatus
{ pop pop
dup /DefaultColorRendering ne
{
/ColorRendering findresource
setcolorrendering
} if
} if
} if
} if
} if
cleartomark
}
{ pop
} ifelse
} bd
/knownColorants? {
pop false
} bd
/getrampcolor {
cvi
/indx exch def
0 1 NumComp 1 sub {
dup
Samples exch get
dup type /stringtype eq { indx get } if
exch
Scaling exch get aload pop
3 1 roll
mul add
} for
setcolor
} bd
/sssetbackground { aload pop setcolor } bd
%%EndResource
%%BeginResource: procset pdftext 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Text operators for PDF
PDF /PDFText 78 dict dup begin put
/docinitialize
{
/resourcestatus where {
pop
/CIDParams /ProcSet resourcestatus {
pop pop
false /CIDParams /ProcSet findresource /SetBuildCompatible get exec
} if
} if
PDF begin
PDFText /_pdfDefineIdentity-H known
{ PDFText /_pdfDefineIdentity-H get exec}
if
end
} bd
/initialize {
PDFText begin
} bd
/terminate { end } bd
Level2?
{
/_safeput
{
3 -1 roll load 3 1 roll put
}
bd
}
{
/_safeput
{
2 index load dup dup length exch maxlength ge
{ dup length 5 add dict copy
3 index xdd
}
{ pop }
ifelse
3 -1 roll load 3 1 roll put
}
bd
}
ifelse
/pdf_has_composefont? systemdict /composefont known def
/CopyFont {
{
1 index /FID ne 2 index /UniqueID ne and
{ def } { pop pop } ifelse
} forall
} bd
/Type0CopyFont
{
exch
dup length dict
begin
CopyFont
[
exch
FDepVector
{
dup /FontType get 0 eq
{
1 index Type0CopyFont
/_pdfType0 exch definefont
}
{
/_pdfBaseFont exch
2 index exec
}
ifelse
exch
}
forall
pop
]
/FDepVector exch def
currentdict
end
} bd
Level2? {currentglobal true setglobal} if
/cHexEncoding
[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
Level2? {setglobal} if
/modEnc {
/_enc xdd
/_icode 0 dd
counttomark 1 sub -1 0
{
index
dup type /nametype eq
{
_enc _icode 3 -1 roll put
_icode 1 add
}
if
/_icode xdd
} for
cleartomark
_enc
} bd
/trEnc {
/_enc xdd
255 -1 0 {
exch dup -1 eq
{ pop /.notdef }
{ Encoding exch get }
ifelse
_enc 3 1 roll put
} for
pop
_enc
} bd
/TE {
/_i xdd
StandardEncoding 256 array copy modEnc
_pdfEncodings exch _i exch put
} bd
Level2?
{
/pdfPatchCStrings
{
currentdict /CharStrings known currentdict /FontType known and
{
FontType 1 eq CharStrings type /dicttype eq and
{
CharStrings /mu known CharStrings /mu1 known not and CharStrings wcheck and
{
CharStrings /mu get
type /stringtype eq
{
currentglobal
CharStrings /mu1
CharStrings /mu get
dup gcheck setglobal
dup length string copy
put
setglobal
} if
} if
} if
} if
} bd
}
{ /pdfPatchCStrings {} bd }
ifelse
/TZ
{
/_usePDFEncoding xdd
findfont
dup length 6 add dict
begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
/pdf_origFontName FontName def
/FontName exch def
currentdict /PaintType known
{ PaintType 2 eq {/PaintType 0 def} if }
if
_usePDFEncoding 0 ge
{
/Encoding _pdfEncodings _usePDFEncoding get def
pop
}
{
_usePDFEncoding -1 eq
{
counttomark 0 eq
{ pop }
{
Encoding 256 array copy
modEnc /Encoding exch def
}
ifelse
}
{
256 array
trEnc /Encoding exch def
}
ifelse
}
ifelse
pdf_EuroProcSet pdf_origFontName known
{
pdf_origFontName pdf_AddEuroGlyphProc
} if
Level2?
{
currentdict /pdf_origFontName undef
} if
FontName currentdict
end
definefont pop
}
bd
Level2?
{
/TZG
{
currentglobal true setglobal
2 index _pdfFontStatus
{
2 index findfont
false setglobal
3 index findfont
true setglobal
ne
{
2 index findfont dup rcheck
{
dup length dict begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
currentdict end
}
if
3 index exch definefont pop
}
if
} if
setglobal
TZ
} bd
}
{
/TZG {TZ} bd
} ifelse
Level2?
{
currentglobal false setglobal
userdict /pdftext_data 5 dict put
pdftext_data
begin
/saveStacks
{
pdftext_data
begin
/vmmode currentglobal def
false setglobal
count array astore /os exch def
end
countdictstack array dictstack pdftext_data exch /ds exch put
cleardictstack pdftext_data /dscount countdictstack put
pdftext_data /vmmode get setglobal
} bind def
/restoreStacks
{
pdftext_data /vmmode currentglobal put false setglobal
clear cleardictstack
pdftext_data /ds get dup
pdftext_data /dscount get 1 2 index length 1 sub
{ get begin dup } for
pop pop
pdftext_data /os get aload pop
pdftext_data /vmmode get setglobal
} bind def
/testForClonePrinterBug
{
currentglobal true setglobal
/undefinedCategory /Generic /Category findresource
dup length dict copy /Category defineresource pop
setglobal
pdftext_data /saveStacks get exec
pdftext_data /vmmode currentglobal put false setglobal
/undefined /undefinedCategory { resourcestatus } stopped
pdftext_data exch /bugFound exch put
pdftext_data /vmmode get setglobal
pdftext_data /restoreStacks get exec
pdftext_data /bugFound get
} bind def
end
setglobal
/pdf_resourcestatus
pdftext_data /testForClonePrinterBug get exec
{
{
pdftext_data /saveStacks get exec
pdftext_data /os get dup dup length 1 sub
dup 1 sub dup 0 lt { pop 0 } if
exch 1 exch { get exch dup } for
pop pop
{ resourcestatus }
stopped
{
clear cleardictstack pdftext_data /restoreStacks get exec
{ pop pop } stopped pop false
}
{
count array astore pdftext_data exch /results exch put
pdftext_data /restoreStacks get exec pop pop
pdftext_data /results get aload pop
}
ifelse
}
}
{ { resourcestatus } }
ifelse
bd
}
if
Level2?
{
/_pdfUndefineResource
{
currentglobal 3 1 roll
_pdf_FontDirectory 2 index 2 copy known
{undef}
{pop pop}
ifelse
1 index (pdf) exch _pdfConcatNames 1 index
1 index 1 _pdfConcatNames 1 index
5 index 1 _pdfConcatNames 1 index
4
{
2 copy pdf_resourcestatus
{
pop 2 lt
{2 copy findresource gcheck setglobal undefineresource}
{pop pop}
ifelse
}
{ pop pop}
ifelse
} repeat
setglobal
} bd
}
{
/_pdfUndefineResource { pop pop} bd
}
ifelse
Level2?
{
/_pdfFontStatus
{
currentglobal exch
/Font pdf_resourcestatus
{pop pop true}
{false}
ifelse
exch setglobal
} bd
}
{
/_pdfFontStatusString 50 string def
_pdfFontStatusString 0 (fonts/) putinterval
/_pdfFontStatus
{
FontDirectory 1 index known
{ pop true }
{
_pdfFontStatusString 6 42 getinterval
cvs length 6 add
_pdfFontStatusString exch 0 exch getinterval
{ status } stopped
{pop false}
{
{ pop pop pop pop true}
{ false }
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
Level2?
{
/_pdfCIDFontStatus
{
/CIDFont /Category pdf_resourcestatus
{
pop pop
/CIDFont pdf_resourcestatus
{pop pop true}
{false}
ifelse
}
{ pop false }
ifelse
} bd
}
if
/_pdfString100 100 string def
/_pdfComposeFontName
{
dup length 1 eq
{
0 get
1 index
type /nametype eq
{
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
2 index exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
exch pop
true
}
{
pop pop
false
}
ifelse
}
{
false
}
ifelse
dup {exch cvn exch} if
} bd
/_pdfConcatNames
{
exch
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
3 -1 roll exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
cvn
} bind def
/_pdfTextTempString 50 string def
/_pdfRegOrderingArray [(Adobe-Japan1) (Adobe-CNS1) (Adobe-Korea1) (Adobe-GB1)] def
/_pdf_CheckCIDSystemInfo
{
1 index _pdfTextTempString cvs
(Identity) anchorsearch
{
pop pop pop pop true
}
{
false
_pdfRegOrderingArray
{
2 index exch
anchorsearch
{ pop pop pop true exit}
{ pop }
ifelse
}
forall
exch pop
exch /CIDFont findresource
/CIDSystemInfo get
3 -1 roll /CMap findresource
/CIDSystemInfo get
exch
3 -1 roll
{
2 copy
/Supplement get
exch
dup type /dicttype eq
{/Supplement get}
{pop 0 }
ifelse
ge
}
{ true }
ifelse
{
dup /Registry get
2 index /Registry get eq
{
/Ordering get
exch /Ordering get
dup type /arraytype eq
{
1 index type /arraytype eq
{
true
1 index length 1 sub -1 0
{
dup 2 index exch get exch 3 index exch get ne
{ pop false exit}
if
} for
exch pop exch pop
}
{ pop pop false }
ifelse
}
{
eq
}
ifelse
}
{ pop pop false }
ifelse
}
{ pop pop false }
ifelse
}
ifelse
} bind def
pdf_has_composefont?
{
/_pdfComposeFont
{
2 copy _pdfComposeFontName not
{
2 index
}
if
(pdf) exch _pdfConcatNames
dup _pdfFontStatus
{ dup findfont 5 2 roll pop pop pop true}
{
4 1 roll
1 index /CMap pdf_resourcestatus
{
pop pop
true
}
{false}
ifelse
1 index true exch
{
_pdfCIDFontStatus not
{pop false exit}
if
}
forall
and
{
1 index 1 index 0 get _pdf_CheckCIDSystemInfo
{
3 -1 roll pop
2 index 3 1 roll
composefont true
}
{
pop pop exch pop false
}
ifelse
}
{
_pdfComposeFontName
{
dup _pdfFontStatus
{
exch pop
1 index exch
findfont definefont true
}
{
pop exch pop
false
}
ifelse
}
{
exch pop
false
}
ifelse
}
ifelse
{ true }
{
dup _pdfFontStatus
{ dup findfont true }
{ pop false }
ifelse
}
ifelse
}
ifelse
} bd
}
{
/_pdfComposeFont
{
_pdfComposeFontName not
{
dup
}
if
dup
_pdfFontStatus
{exch pop dup findfont true}
{
1 index
dup type /nametype eq
{pop}
{cvn}
ifelse
eq
{pop false}
{
dup _pdfFontStatus
{dup findfont true}
{pop false}
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
/_pdfStyleDicts 4 dict dup begin
/Adobe-Japan1 4 dict dup begin
Level2?
{
/Serif
/HeiseiMin-W3-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMin-W3}
{
/HeiseiMin-W3 _pdfCIDFontStatus
{/HeiseiMin-W3}
{/Ryumin-Light}
ifelse
}
ifelse
def
/SansSerif
/HeiseiKakuGo-W5-83pv-RKSJ-H _pdfFontStatus
{/HeiseiKakuGo-W5}
{
/HeiseiKakuGo-W5 _pdfCIDFontStatus
{/HeiseiKakuGo-W5}
{/GothicBBB-Medium}
ifelse
}
ifelse
def
/HeiseiMaruGo-W4-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMaruGo-W4}
{
/HeiseiMaruGo-W4 _pdfCIDFontStatus
{/HeiseiMaruGo-W4}
{
/Jun101-Light-RKSJ-H _pdfFontStatus
{ /Jun101-Light }
{ SansSerif }
ifelse
}
ifelse
}
ifelse
/RoundSansSerif exch def
/Default Serif def
}
{
/Serif /Ryumin-Light def
/SansSerif /GothicBBB-Medium def
{
(fonts/Jun101-Light-83pv-RKSJ-H) status
}stopped
{pop}{
{ pop pop pop pop /Jun101-Light }
{ SansSerif }
ifelse
/RoundSansSerif exch def
}ifelse
/Default Serif def
}
ifelse
end
def
/Adobe-Korea1 4 dict dup begin
/Serif /HYSMyeongJo-Medium def
/SansSerif /HYGoThic-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-GB1 4 dict dup begin
/Serif /STSong-Light def
/SansSerif /STHeiti-Regular def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-CNS1 4 dict dup begin
/Serif /MKai-Medium def
/SansSerif /MHei-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
end
def
/TZzero
{
/_wmode xdd
/_styleArr xdd
/_regOrdering xdd
3 copy
_pdfComposeFont
{
5 2 roll pop pop pop
}
{
[
0 1 _styleArr length 1 sub
{
_styleArr exch get
_pdfStyleDicts _regOrdering 2 copy known
{
get
exch 2 copy known not
{ pop /Default }
if
get
}
{
pop pop pop /Unknown
}
ifelse
}
for
]
exch pop
2 index 3 1 roll
_pdfComposeFont
{3 -1 roll pop}
{
findfont dup /FontName get exch
}
ifelse
}
ifelse
dup /WMode 2 copy known
{ get _wmode ne }
{ pop pop _wmode 1 eq}
ifelse
{
exch _wmode _pdfConcatNames
dup _pdfFontStatus
{ exch pop dup findfont false}
{ exch true }
ifelse
}
{
dup /FontType get 0 ne
}
ifelse
{
dup /FontType get 3 eq _wmode 1 eq and
{
_pdfVerticalRomanT3Font dup length 10 add dict copy
begin
/_basefont exch
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put dup 16#a5 /yen put dup 16#b4 /yen put}
if
def
FontName
currentdict
end
definefont
def
/Encoding _basefont /Encoding get def
/_fauxfont true def
}
{
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
FontType 0 ne
{
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put}
if
def
/_fauxfont true def
} if
} ifelse
/WMode _wmode def
dup dup /FontName exch def
currentdict
end
definefont pop
}
{
pop
}
ifelse
/_pdf_FontDirectory 3 1 roll _safeput
}
bd
Level2?
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
selectfont
} bd
}
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
exch findfont exch
dup type /arraytype eq
{makefont}
{scalefont}
ifelse
setfont
} bd
}
ifelse
/cshow where
{
pop /pdf_cshow /cshow load dd
/pdf_remove2 {pop pop} dd
}
{
/pdf_cshow {exch forall} dd
/pdf_remove2 {} dd
} ifelse
/pdf_xshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_yshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0 exch
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_xyshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
1 pop
{_pdf_na _pdf_i 1 add get} stopped
{ pop pop pop}
{
_pdf_x _pdf_y moveto
rmoveto
}
ifelse
}
ifelse
_pdf_i 2 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdfl1xs {/_pdf_showproc /show load dd pdf_xshow} bd
/pdfl1ys {/_pdf_showproc /show load dd pdf_yshow} bd
/pdfl1xys {/_pdf_showproc /show load dd pdf_xyshow} bd
Level2? _ColorSep5044? not and
{
/pdfxs {{xshow} stopped {pdfl1xs} if} bd
/pdfys {{yshow} stopped {pdfl1ys} if} bd
/pdfxys {{xyshow} stopped {pdfl1xys} if} bd
}
{
/pdfxs /pdfl1xs load dd
/pdfys /pdfl1ys load dd
/pdfxys /pdfl1xys load dd
} ifelse
/pdf_charpath {false charpath} bd
/pdf_xcharpath {/_pdf_showproc /pdf_charpath load dd pdf_xshow} bd
/pdf_ycharpath {/_pdf_showproc /pdf_charpath load dd pdf_yshow} bd
/pdf_xycharpath {/_pdf_showproc /pdf_charpath load dd pdf_xyshow} bd
/pdf_strokepath
{
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 false charpath
currentpoint S moveto
} bind
exch pdf_cshow
} bd
/pdf_xstrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xshow} bd
/pdf_ystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_yshow} bd
/pdf_xystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xyshow} bd
Level2? {currentglobal true setglobal} if
/d0/setcharwidth ld
/nND {{/.notdef} repeat} bd
/T3Defs {
/BuildChar
{
1 index /Encoding get exch get
1 index /BuildGlyph get exec
}
def
/BuildGlyph {
exch begin
GlyphProcs exch get exec
end
} def
/_pdfT3Font true def
} bd
/_pdfBoldRomanWidthProc
{
stringwidth 1 index 0 ne { exch .03 add exch }if setcharwidth
0 0
} bd
/_pdfType0WidthProc
{
dup stringwidth 0 0 moveto
2 index true charpath pathbbox
0 -1
7 index 2 div .88
setcachedevice2
pop
0 0
} bd
/_pdfType0WMode1WidthProc
{
dup stringwidth
pop 2 div neg -0.88
2 copy
moveto
0 -1
5 -1 roll true charpath pathbbox
setcachedevice
} bd
/_pdfBoldBaseFont
11 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/Encoding cHexEncoding def
/_setwidthProc /_pdfBoldRomanWidthProc load def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
pdf_has_composefont?
{
/_pdfBoldBaseCIDFont
11 dict begin
/CIDFontType 1 def
/CIDFontName /_pdfBoldBaseCIDFont def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_setwidthProc /_pdfType0WidthProc load def
/_bcstr2 2 string def
/BuildGlyph
{
exch begin
_basefont setfont
_bcstr2 1 2 index 256 mod put
_bcstr2 0 3 -1 roll 256 idiv put
_bcstr2 dup _setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
/_pdfDefineIdentity-H
{
/Identity-H /CMap PDFText /pdf_resourcestatus get exec
{
pop pop
}
{
/CIDInit/ProcSet findresource begin 12 dict begin
begincmap
/CIDSystemInfo
3 dict begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
currentdict
end
def
/CMapName /Identity-H def
/CMapVersion 1 def
/CMapType 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
CMapName currentdict/CMap defineresource pop
end
end
} ifelse
} def
} if
/_pdfVerticalRomanT3Font
10 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_pdfType0WidthProc
moveto
show
end
}bd
currentdict
end
def
Level2? {setglobal} if
/MakeBoldFont
{
dup /ct_SyntheticBold known
{
dup length 3 add dict begin
CopyFont
/ct_StrokeWidth .03 0 FontMatrix idtransform pop def
/ct_SyntheticBold true def
currentdict
end
definefont
}
{
dup dup length 3 add dict
begin
CopyFont
/PaintType 2 def
/StrokeWidth .03 0 FontMatrix idtransform pop def
/dummybold currentdict
end
definefont
dup /FontType get dup 9 ge exch 11 le and
{
_pdfBoldBaseCIDFont
dup length 3 add dict copy begin
dup /CIDSystemInfo get /CIDSystemInfo exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefont exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefonto exch def
currentdict
end
/CIDFont defineresource
}
{
_pdfBoldBaseFont
dup length 3 add dict copy begin
/_basefont exch def
/_basefonto exch def
currentdict
end
definefont
}
ifelse
}
ifelse
} bd
/MakeBold {
1 index
_pdf_FontDirectory 2 index 2 copy known
{get}
{exch pop}
ifelse
findfont
dup
/FontType get 0 eq
{
dup /WMode known {dup /WMode get 1 eq }{false} ifelse
version length 4 ge
and
{version 0 4 getinterval cvi 2015 ge }
{true}
ifelse
{/_pdfType0WidthProc}
{/_pdfType0WMode1WidthProc}
ifelse
_pdfBoldBaseFont /_setwidthProc 3 -1 roll load put
{MakeBoldFont} Type0CopyFont definefont
}
{
dup /_fauxfont known not 1 index /SubstMaster known not and
{
_pdfBoldBaseFont /_setwidthProc /_pdfBoldRomanWidthProc load put
MakeBoldFont
}
{
2 index 2 index eq
{ exch pop }
{
dup length dict begin
CopyFont
currentdict
end
definefont
}
ifelse
}
ifelse
}
ifelse
pop pop
dup /dummybold ne
{/_pdf_FontDirectory exch dup _safeput }
{ pop }
ifelse
}bd
/MakeItalic {
_pdf_FontDirectory exch 2 copy known
{get}
{exch pop}
ifelse
dup findfont
dup /FontInfo 2 copy known
{
get
/ItalicAngle 2 copy known
{get 0 eq }
{ pop pop true}
ifelse
}
{ pop pop true}
ifelse
{
exch pop
dup /FontType get 0 eq Level2? not and
{ dup /FMapType get 6 eq }
{ false }
ifelse
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1Type0 }
{ _italMtxType0 }
ifelse
}
{ pop pop _italMtxType0 }
ifelse
}
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1 }
{ _italMtx }
ifelse
}
{ pop pop _italMtx }
ifelse
}
ifelse
makefont
dup /FontType get 42 eq Level2? not or
{
dup length dict begin
CopyFont
currentdict
end
}
if
1 index exch
definefont pop
/_pdf_FontDirectory exch dup _safeput
}
{
pop
2 copy ne
{
/_pdf_FontDirectory 3 1 roll _safeput
}
{ pop pop }
ifelse
}
ifelse
}bd
/MakeBoldItalic {
/dummybold exch
MakeBold
/dummybold
MakeItalic
}bd
Level2?
{
/pdf_CopyDict
{1 index length add dict copy}
def
}
{
/pdf_CopyDict
{
1 index length add dict
1 index wcheck
{ copy }
{ begin
{def} forall
currentdict
end
}
ifelse
}
def
}
ifelse
/pdf_AddEuroGlyphProc
{
currentdict /CharStrings known
{
CharStrings /Euro known not
{
dup
/CharStrings
CharStrings 1 pdf_CopyDict
begin
/Euro pdf_EuroProcSet 4 -1 roll get def
currentdict
end
def
/pdf_PSBuildGlyph /pdf_PSBuildGlyph load def
/pdf_PathOps /pdf_PathOps load def
/Symbol eq Encoding 160 get /.notdef eq and
{
/Encoding Encoding dup length array copy
dup 160 /Euro put def
}
if
}
{ pop
}
ifelse
}
{ pop
}
ifelse
}
def
Level2? {currentglobal true setglobal} if
/pdf_PathOps 4 dict dup begin
/m {moveto} def
/l {lineto} def
/c {curveto} def
/cp {closepath} def
end
def
/pdf_PSBuildGlyph
{
gsave
8 -1 roll pop
7 1 roll
currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
dup 9 1 roll
{
currentdict /StrokeWidth 2 copy known
{
get 2 div
5 1 roll
4 -1 roll 4 index sub
4 1 roll
3 -1 roll 4 index sub
3 1 roll
exch 4 index add exch
4 index add
5 -1 roll pop
}
{
pop pop
}
ifelse
}
if
setcachedevice
pdf_PathOps begin
exec
end
{
currentdict /StrokeWidth 2 copy known
{ get }
{ pop pop 0 }
ifelse
setlinewidth stroke
}
{
fill
}
ifelse
grestore
} def
/pdf_EuroProcSet 13 dict def
pdf_EuroProcSet
begin
/Courier-Bold
{
600 0 6 -12 585 612
{
385 274 m
180 274 l
179 283 179 293 179 303 c
179 310 179 316 180 323 c
398 323 l
423 404 l
197 404 l
219 477 273 520 357 520 c
409 520 466 490 487 454 c
487 389 l
579 389 l
579 612 l
487 612 l
487 560 l
449 595 394 612 349 612 c
222 612 130 529 98 404 c
31 404 l
6 323 l
86 323 l
86 304 l
86 294 86 284 87 274 c
31 274 l
6 193 l
99 193 l
129 77 211 -12 359 -12 c
398 -12 509 8 585 77 c
529 145 l
497 123 436 80 356 80 c
285 80 227 122 198 193 c
360 193 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-BoldOblique /Courier-Bold load def
/Courier
{
600 0 17 -12 578 584
{
17 204 m
97 204 l
126 81 214 -12 361 -12 c
440 -12 517 17 578 62 c
554 109 l
501 70 434 43 366 43 c
266 43 184 101 154 204 c
380 204 l
400 259 l
144 259 l
144 270 143 281 143 292 c
143 299 143 307 144 314 c
418 314 l
438 369 l
153 369 l
177 464 249 529 345 529 c
415 529 484 503 522 463 c
522 391 l
576 391 l
576 584 l
522 584 l
522 531 l
473 566 420 584 348 584 c
216 584 122 490 95 369 c
37 369 l
17 314 l
87 314 l
87 297 l
87 284 88 272 89 259 c
37 259 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-Oblique /Courier load def
/Helvetica
{
556 0 24 -19 541 703
{
541 628 m
510 669 442 703 354 703 c
201 703 117 607 101 444 c
50 444 l
25 372 l
97 372 l
97 301 l
49 301 l
24 229 l
103 229 l
124 67 209 -19 350 -19 c
435 -19 501 25 509 32 c
509 131 l
492 105 417 60 343 60 c
267 60 204 127 197 229 c
406 229 l
430 301 l
191 301 l
191 372 l
455 372 l
479 444 l
194 444 l
201 531 245 624 348 624 c
433 624 484 583 509 534 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-Oblique /Helvetica load def
/Helvetica-Bold
{
556 0 12 -19 563 710
{
563 621 m
537 659 463 710 363 710 c
216 710 125 620 101 462 c
51 462 l
12 367 l
92 367 l
92 346 l
92 337 93 328 93 319 c
52 319 l
12 224 l
102 224 l
131 58 228 -19 363 -19 c
417 -19 471 -12 517 18 c
517 146 l
481 115 426 93 363 93 c
283 93 254 166 246 224 c
398 224 l
438 319 l
236 319 l
236 367 l
457 367 l
497 462 l
244 462 l
259 552 298 598 363 598 c
425 598 464 570 486 547 c
507 526 513 517 517 509 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-BoldOblique /Helvetica-Bold load def
/Symbol
{
750 0 20 -12 714 685
{
714 581 m
650 645 560 685 465 685 c
304 685 165 580 128 432 c
50 432 l
20 369 l
116 369 l
115 356 115 347 115 337 c
115 328 115 319 116 306 c
50 306 l
20 243 l
128 243 l
165 97 300 -12 465 -12 c
560 -12 635 25 685 65 c
685 155 l
633 91 551 51 465 51 c
340 51 238 131 199 243 c
555 243 l
585 306 l
184 306 l
183 317 182 326 182 336 c
182 346 183 356 184 369 c
614 369 l 644 432 l
199 432 l
233 540 340 622 465 622 c
555 622 636 580 685 520 c
cp
750 0 m
}
pdf_PSBuildGlyph
} def
/Times-Bold
{
500 0 16 -14 478 700
{
367 308 m
224 308 l
224 368 l
375 368 l
380 414 l
225 414 l
230 589 257 653 315 653 c
402 653 431 521 444 457 c
473 457 l
473 698 l
444 697 l
441 679 437 662 418 662 c
393 662 365 700 310 700 c
211 700 97 597 73 414 c
21 414 l
16 368 l
69 368 l
69 359 68 350 68 341 c
68 330 68 319 69 308 c
21 308 l
16 262 l
73 262 l
91 119 161 -14 301 -14 c
380 -14 443 50 478 116 c
448 136 l
415 84 382 40 323 40 c
262 40 231 77 225 262 c
362 262 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-BoldItalic
{
500 0 9 -20 542 686
{
542 686 m
518 686 l
513 673 507 660 495 660 c
475 660 457 683 384 683 c
285 683 170 584 122 430 c
58 430 l
34 369 l
105 369 l
101 354 92 328 90 312 c
34 312 l
9 251 l
86 251 l
85 238 84 223 84 207 c
84 112 117 -14 272 -14 c
326 -14 349 9 381 9 c
393 9 393 -10 394 -20 c
420 -20 l
461 148 l
429 148 l
416 109 362 15 292 15 c
227 15 197 55 197 128 c
197 162 204 203 216 251 c
378 251 l
402 312 l
227 312 l
229 325 236 356 241 369 c
425 369 l
450 430 l
255 430 l
257 435 264 458 274 488 c
298 561 337 654 394 654 c
437 654 484 621 484 530 c
484 516 l
516 516 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Italic
{
500 0 23 -10 595 692
{
399 317 m
196 317 l
199 340 203 363 209 386 c
429 386 l
444 424 l
219 424 l
246 514 307 648 418 648 c
448 648 471 638 492 616 c
529 576 524 529 527 479 c
549 475 l
595 687 l
570 687 l
562 674 558 664 542 664 c
518 664 474 692 423 692 c
275 692 162 551 116 424 c
67 424 l
53 386 l
104 386 l
98 363 93 340 90 317 c
37 317 l
23 279 l
86 279 l
85 266 85 253 85 240 c
85 118 137 -10 277 -10 c
370 -10 436 58 488 128 c
466 149 l
424 101 375 48 307 48 c
212 48 190 160 190 234 c
190 249 191 264 192 279 c
384 279 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Roman
{
500 0 10 -12 484 692
{
347 298 m
171 298 l
170 310 170 322 170 335 c
170 362 l
362 362 l
374 403 l
172 403 l
184 580 244 642 308 642 c
380 642 434 574 457 457 c
481 462 l
474 691 l
449 691 l
433 670 429 657 410 657 c
394 657 360 692 299 692 c
204 692 94 604 73 403 c
22 403 l
10 362 l
70 362 l
69 352 69 341 69 330 c
69 319 69 308 70 298 c
22 298 l
10 257 l
73 257 l
97 57 216 -12 295 -12 c
364 -12 427 25 484 123 c
458 142 l
425 101 384 37 316 37 c
256 37 189 84 173 257 c
335 257 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
end
Level2? {setglobal} if
currentdict readonly pop end
%%EndResource
PDFText begin
[39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
/guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
/hungarumlaut/ogonek/caron
0 TE
[1/dotlessi/caron 39/quotesingle 96/grave
127/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft
/quotedblright/bullet/endash/emdash/tilde/trademark/scaron
/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus
/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla
/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters
/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute
/ucircumflex/udieresis/yacute/thorn/ydieresis
1 TE
end
%%BeginResource: procset pdfasc.prc 6.0 1
%%Copyright: Copyright 1992-2003 Adobe Systems Incorporated. All Rights Reserved.
/ASR {
13 dict begin
/mirV? exch def
/mirH? exch def
/center? exch def
/autorotate? exch def
/angle exch def
/shrink exch def
/Pury exch def
/Purx exch def
/Plly exch def
/Pllx exch def
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury 0 eq Durx 0 eq and Dlly 0 eq Dllx 0 eq and and
{ shrink 0 gt { GClipBBox } { GPageBBox } ifelse }
{ ITransDBBox }
ifelse
/PHt Pury Plly sub def
/PW Purx Pllx sub def
/DHt Dury Dlly sub def
/DW Durx Dllx sub def
angle 90 eq angle 270 eq or
{
PHt /PHt PW def /PW exch def
} if
autorotate? PHt PW ne and DHt DW ne and
{
DHt DW ge
PHt PW ge
ne
{ /angle angle 90 add def
PHt /PHt PW def /PW exch def
}
if
} if
angle 0 ne
{
/angle angle 360 mod def
angle rotate
angle 90 eq
{ 0 DW neg translate }
if
angle 180 eq
{ DW neg DHt neg translate }
if
angle 270 eq
{ DHt neg 0 translate }
if
} if
center?
{
ITransBBox
Durx Dllx add 2 div Dury Dlly add 2 div
Purx Pllx add -2 div Pury Plly add -2 div
3 -1 roll add exch
3 -1 roll add exch
translate
}
{
ITransBBox
angle 0 eq
{Dllx Pllx sub Dury Pury sub}
if
angle 90 eq
{Durx Purx sub Dury Pury sub}
if
angle 180 eq
{Durx Purx sub Dlly Plly sub}
if
angle 270 eq
{Dllx Pllx sub Dlly Plly sub}
if
translate
}
ifelse
mirH? mirV? or
{
ITransBBox
mirH?
{
-1 1 scale
Durx Dllx add neg 0 translate
} if
mirV?
{
1 -1 scale
0 Dury Dlly add neg translate
} if
} if
shrink 0 ne
{
ITransBBox
Dury Dlly sub Pury Plly sub div
Durx Dllx sub Purx Pllx sub div
2 copy gt { exch } if pop
shrink 1 eq
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{
shrink 2 eq 1 index 1.0 lt and
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{ pop }
ifelse
}
ifelse
} if
end
} [/autorotate? /shrink? /mirH? /mirV? /angle /Pury /Purx /Plly /Pllx /Durx /Dury /Dllx /Dlly /PW /PHt /DW /DHt
/Devurx /Devury /Devllx /Devlly /pdfHt /pdfW]
bld
/GClipBBox
{
gsave newpath clippath pathbbox newpath grestore
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
ITransDBBox
} [/Durx /Dury /Dllx /Dlly]
bld
/GPageBBox
{
{
currentpagedevice /PageSize get aload pop
/Devury exch def /Devurx exch def
/Devllx 0 def /Devlly 0 def
ITransBBox
}
stopped
{ GClipBBox }
if
} [/Devurx /Devury /Devllx /Devlly ]
bld
/ITransDBBox
{
Durx Dury transform matrix defaultmatrix itransform
/Devury exch def
/Devurx exch def
Dllx Dlly transform matrix defaultmatrix itransform
/Devlly exch def
/Devllx exch def
Devury Devlly lt {/Devlly Devury /Devury Devlly def def} if
Devurx Devllx lt {/Devllx Devurx /Devurx Devllx def def} if
} [/Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
/ITransBBox
{
/um matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix def
Devllx Devlly um itransform
Devurx Devury um itransform
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury Dlly lt {/Dlly Dury /Dury Dlly def def} if
Durx Dllx lt {/Dllx Durx /Durx Dllx def def} if
} [ /um /Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
%%EndResource
currentdict readonly pop
end end
/currentpacking where {pop setpacking}if
PDFVars/DocInitAll{[PDF PDFText]{/docinitialize get exec}forall }put
+PDFVars/InitAll{[PDF PDFText]{/initialize get exec}forall initgs}put
+PDFVars/TermAll{[PDFText PDF]{/terminate get exec}forall}put
+PDFVars begin PDF begin
PDFVars/DocInitAll get exec PDFVars/InitAll get exec
[/NamespacePush PDFMark5
[/_objdef {Metadata_In_EPS} /type /stream /OBJ PDFMark5
[{Metadata_In_EPS} 3537 (% &end XMP packet& %) ReadByPDFMark5
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-701">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2006-10-20T15:23:02+02:00</xap:CreateDate>
+ <xap:ModifyDate>2006-10-20T15:23:02+02:00</xap:ModifyDate>
+ <xap:MetadataDate>2006-10-20T15:23:02+02:00</xap:MetadataDate>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#">
+ <xapMM:DocumentID>uuid:34DD0B9161E111DBB7AD8EFAF1591643</xapMM:DocumentID>
+ <xapMM:InstanceID>uuid:34DD0B9161E111DBB7AD8EFAF1591643</xapMM:InstanceID>
+ <xapMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>uuid:091de08b-603e-11db-9b35-000a95cd9010</stRef:instanceID>
+ <stRef:documentID>uuid:47ed4c00-603c-11db-9960-000a95cd9010</stRef:documentID>
+ </xapMM:DerivedFrom>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">paper.dvi</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ <dc:format>application/eps</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?>
% &end XMP packet& %
[{Metadata_In_EPS} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT PDFMark5
[/Document 1 dict begin /Metadata {Metadata_In_EPS} def currentdict end /BDC PDFMark5
[/NamespacePop PDFMark5
PDFVars/TermAll get exec end end
PDF /docinitialize get exec
+
%%EndSetup
PDFVars begin PDF begin PDFVars/InitAll get exec
362.994 364.042 115.0 98.583 rectclip
q
362.994 364.042 m
477.994 364.042 l
477.994 462.625 l
362.994 462.625 l
h
W
n
q
0.1 0.0 0.0 0.1 0.0 0.0 cm
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
Q
q
n
1195.62 4688.31 m
2327.9 4688.31 l
2327.9 3620.38 l
1195.62 3620.38 l
h
W
n
4.88755 w
1 j
[4.88755 39.1004 ] 0.0 d
3.25837 w
[] 0.0 d
4.88755 w
Q
q
n
1321.07 4649.21 m
2217.12 4649.21 l
2217.12 3703.47 l
1321.07 3703.47 l
h
W
n
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 243.734 4059.78 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
Q
q
n
2449.61 4685.86 m
3581.89 4685.86 l
3581.89 3620.37 l
2449.61 3620.37 l
h
W
n
4.88755 w
1 j
[4.88755 39.1004 ] 0.0 d
3.25837 w
[] 0.0 d
4.88755 w
Q
q
n
2575.06 4646.76 m
3520.8 4646.76 l
3520.8 3701.02 l
2575.06 3701.02 l
h
W
n
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 1497.72 4059.77 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
[/DeviceCMYK] cs 0.0 0.0 0.0 1.0 sc
%ADOBeginSubsetFont: QZEBAA+CMR10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /QZEBAA+CMR10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-40 -250 1009 750} def
end
systemdict begin
dup /Private
13 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705 431 448 666 677] def
/OtherBlues [-206 -194] def
/BlueScale 0.04379 def
/StdHW [31] def
/StdVW [69] def
/StemSnapH [22 31] def
/StemSnapV [69 89] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 1 /dotlessi/caron 11 /ff/fi/fl/ffi
32 /space/exclam/quotedbl/numbersign/dollar/percent
/ampersand/quoteright/parenleft/parenright/asterisk/plus
/comma/hyphen/period/slash/zero/one
/two/three/four/five/six/seven
/eight/nine/colon/semicolon/less/equal
/greater/question/at/A/B/C
/D/E/F/G/H/I
/J/K/L/M/N/O
/P/Q/R/S/T/U
/V/W/X/Y/Z/bracketleft
/backslash/bracketright/circumflex/underscore/quoteleft/a
/b/c/d/e/f/g
/h/i/j/k/l/m
/n/o/p/q/r/s
/t/u/v/w/x/y
/z/endash/bar/braceright/tilde/bullet
/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft
/OE/bullet/Zcaron/bullet/bullet/quoteleft
/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
/tilde/trademark/scaron/guilsinglright/oe/bullet
/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright
/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
/degree/plusminus/twosuperior/threesuperior/acute/mu
/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright
/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute
/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave
/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring
/ae/ccedilla/egrave/eacute/ecircumflex/edieresis
/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex/udieresis/yacute
/thorn/ydieresis
/N41 (QZEBAA+CMR10) -1 TZ
347.615 364.327 m
%ADOBeginSubsetFont: QZEBAA+CMR10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/QZEBAA+CMR10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/five <1C60D8A8C9B7A73D3B2B97F19D54A2E00E7DDA8E72064220CB7581D13
CEDF071F346430E40993A6297E3A2A6D6093205222D977AC7F7B65CC82B221D9
B18ADEA5D4AF0261ABF060D3E283C7B3B5EB39FF499721FD51203AE59E3BEA25
7DFD3E472FEF67221488EC8D1F355E2FAD057CA44A8B4BAD6C6C719C164907CB
F9A6CC770DB0C7E58A37D2385E23F576BCFF94FFBFD8ADD4C5E6C32CD83ACEB7
7472D00FE1A4DC66393A99AC6BBD252B04C98B710149EA42B66ACE89D4FC4393
F3A09165DF477ABCB0E8A8DB21E4278CA219EBCC9B067F92619913BDBD1EF3C9
A> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/QZEBAA+CMR10 findfont /Encoding get
dup 53 /five put
pop
end
+%ADOEndSubsetFont
+/N41 10.6637 Tf
(5) show
Q
q
n
3703.6 4688.29 m
4835.88 4688.29 l
4835.88 3620.36 l
3703.6 3620.36 l
h
W
n
n
[/DeviceGray] cs 1.0 sc
3703.600098 3620.360107 1132.279785 1046.750244 rectfill
+
n
3888.520020 3761.290039 828.437988 828.437988 rectfill
+
4.88755 w
1 j
n
3888.52 3761.29 828.438 828.438 re
S
[4.88755 39.1004 ] 0.0 d
3.25837 w
n
3888.52 3761.29 m
3888.52 4589.73 l
0.0 sc
S
n
3888.52 4589.73 m
3888.52 4589.73 l
S
n
3991.97 3761.29 m
3991.97 4589.73 l
S
n
3991.97 4589.73 m
3991.97 4589.73 l
S
n
4096.23 3761.29 m
4096.23 4589.73 l
S
n
4096.23 4589.73 m
4096.23 4589.73 l
S
n
4199.69 3761.29 m
4199.69 4589.73 l
S
n
4199.69 4589.73 m
4199.69 4589.73 l
S
n
4303.14 3761.29 m
4303.14 4589.73 l
S
n
4303.14 4589.73 m
4303.14 4589.73 l
S
n
4406.59 3761.29 m
4406.59 4589.73 l
S
n
4406.59 4589.73 m
4406.59 4589.73 l
S
n
4510.05 3761.29 m
4510.05 4589.73 l
S
n
4510.05 4589.73 m
4510.05 4589.73 l
S
n
4613.5 3761.29 m
4613.5 4589.73 l
S
n
4613.5 4589.73 m
4613.5 4589.73 l
S
n
4716.95 3761.29 m
4716.95 4589.73 l
S
n
4716.95 4589.73 m
4716.95 4589.73 l
S
n
3888.52 3761.29 m
4716.95 3761.29 l
S
n
4716.95 3761.29 m
4716.95 3761.29 l
S
n
3888.52 3864.74 m
4716.95 3864.74 l
S
n
4716.95 3864.74 m
4716.95 3864.74 l
S
n
3888.52 3968.2 m
4716.95 3968.2 l
S
n
4716.95 3968.2 m
4716.95 3968.2 l
S
n
3888.52 4072.46 m
4716.95 4072.46 l
S
n
4716.95 4072.46 m
4716.95 4072.46 l
S
n
3888.52 4175.91 m
4716.95 4175.91 l
S
n
4716.95 4175.91 m
4716.95 4175.91 l
S
n
3888.52 4279.37 m
4716.95 4279.37 l
S
n
4716.95 4279.37 m
4716.95 4279.37 l
S
n
3888.52 4382.82 m
4716.95 4382.82 l
S
n
4716.95 4382.82 m
4716.95 4382.82 l
S
n
3888.52 4486.27 m
4716.95 4486.27 l
S
n
4716.95 4486.27 m
4716.95 4486.27 l
S
n
3888.52 4589.73 m
4716.95 4589.73 l
S
n
4716.95 4589.73 m
4716.95 4589.73 l
S
[] 0.0 d
4.88755 w
n
3888.52 3761.29 m
4716.95 3761.29 l
S
n
3888.52 4589.73 m
4716.95 4589.73 l
S
n
3888.52 3761.29 m
3888.52 4589.73 l
S
n
4716.95 3761.29 m
4716.95 4589.73 l
S
n
3888.52 3761.29 m
4716.95 3761.29 l
S
n
3888.52 3761.29 m
3888.52 4589.73 l
S
n
3888.52 3761.29 m
3888.52 3770.25 l
S
n
3888.52 4589.73 m
3888.52 4580.77 l
S
n
3991.97 3761.29 m
3991.97 3770.25 l
S
n
3991.97 4589.73 m
3991.97 4580.77 l
S
n
4096.23 3761.29 m
4096.23 3770.25 l
S
n
4096.23 4589.73 m
4096.23 4580.77 l
S
n
4199.69 3761.29 m
4199.69 3770.25 l
S
n
4199.69 4589.73 m
4199.69 4580.77 l
S
n
4303.14 3761.29 m
4303.14 3770.25 l
S
n
4303.14 4589.73 m
4303.14 4580.77 l
S
n
4406.59 3761.29 m
4406.59 3770.25 l
S
n
4406.59 4589.73 m
4406.59 4580.77 l
S
n
4510.05 3761.29 m
4510.05 3770.25 l
S
n
4510.05 4589.73 m
4510.05 4580.77 l
S
n
4613.5 3761.29 m
4613.5 3770.25 l
S
n
4613.5 4589.73 m
4613.5 4580.77 l
S
n
4716.95 3761.29 m
4716.95 3770.25 l
S
n
4716.95 4589.73 m
4716.95 4580.77 l
S
n
3888.52 3761.29 m
3897.48 3761.29 l
S
n
4716.95 3761.29 m
4707.99 3761.29 l
S
n
3888.52 3864.74 m
3897.48 3864.74 l
S
n
4716.95 3864.74 m
4707.99 3864.74 l
S
n
3888.52 3968.2 m
3897.48 3968.2 l
S
n
4716.95 3968.2 m
4707.99 3968.2 l
S
n
3888.52 4072.46 m
3897.48 4072.46 l
S
n
4716.95 4072.46 m
4707.99 4072.46 l
S
n
3888.52 4175.91 m
3897.48 4175.91 l
S
n
4716.95 4175.91 m
4707.99 4175.91 l
S
n
3888.52 4279.37 m
3897.48 4279.37 l
S
n
4716.95 4279.37 m
4707.99 4279.37 l
S
n
3888.52 4382.82 m
3897.48 4382.82 l
S
n
4716.95 4382.82 m
4707.99 4382.82 l
S
n
3888.52 4486.27 m
3897.48 4486.27 l
S
n
4716.95 4486.27 m
4707.99 4486.27 l
S
n
3888.52 4589.73 m
3897.48 4589.73 l
S
n
4716.95 4589.73 m
4707.99 4589.73 l
S
n
3888.52 3761.29 m
4716.95 3761.29 l
S
n
3888.52 4589.73 m
4716.95 4589.73 l
S
n
3888.52 3761.29 m
3888.52 4589.73 l
S
n
4716.95 3761.29 m
4716.95 4589.73 l
S
Q
q
n
3829.05 4649.19 m
4725.1 4649.19 l
4725.1 3701.01 l
3829.05 3701.01 l
h
W
n
n
3898.29 4589.73 m
3898.29 4584.33 3893.91 4579.95 3888.52 4579.95 c
3883.12 4579.95 3878.74 4584.33 3878.74 4589.73 c
3878.74 4595.12 3883.12 4599.5 3888.52 4599.5 c
3893.91 4599.5 3898.29 4595.12 3898.29 4589.73 c
[/DeviceRGB] cs 0.0 0.0 1.0 sc
f
n
3950.42 4537.59 m
3950.42 4532.2 3946.05 4527.82 3940.65 4527.82 c
3935.25 4527.82 3930.88 4532.2 3930.88 4537.59 c
3930.88 4542.99 3935.25 4547.37 3940.65 4547.37 c
3946.05 4547.37 3950.42 4542.99 3950.42 4537.59 c
f
n
4001.74 4486.27 m
4001.74 4480.88 3997.37 4476.5 3991.97 4476.5 c
3986.57 4476.5 3982.19 4480.88 3982.19 4486.27 c
3982.19 4491.67 3986.57 4496.05 3991.97 4496.05 c
3997.37 4496.05 4001.74 4491.67 4001.74 4486.27 c
f
n
4053.88 4434.14 m
4053.88 4428.74 4049.5 4424.36 4044.1 4424.36 c
4038.7 4424.36 4034.33 4428.74 4034.33 4434.14 c
4034.33 4439.54 4038.7 4443.91 4044.1 4443.91 c
4049.5 4443.91 4053.88 4439.54 4053.88 4434.14 c
f
n
4106.01 4382.82 m
4106.01 4377.42 4101.63 4373.05 4096.23 4373.05 c
4090.84 4373.05 4086.46 4377.42 4086.46 4382.82 c
4086.46 4388.22 4090.84 4392.6 4096.23 4392.6 c
4101.63 4392.6 4106.01 4388.22 4106.01 4382.82 c
f
n
4157.33 4330.69 m
4157.33 4325.29 4152.95 4320.91 4147.55 4320.91 c
4142.16 4320.91 4137.78 4325.29 4137.78 4330.69 c
4137.78 4336.09 4142.16 4340.46 4147.55 4340.46 c
4152.95 4340.46 4157.33 4336.09 4157.33 4330.69 c
f
n
4209.46 4279.37 m
4209.46 4273.97 4205.09 4269.59 4199.69 4269.59 c
4194.29 4269.59 4189.91 4273.97 4189.91 4279.37 c
4189.91 4284.77 4194.29 4289.14 4199.69 4289.14 c
4205.09 4289.14 4209.46 4284.77 4209.46 4279.37 c
f
n
4260.78 4227.23 m
4260.78 4221.84 4256.41 4217.46 4251.01 4217.46 c
4245.61 4217.46 4241.23 4221.84 4241.23 4227.23 c
4241.23 4232.63 4245.61 4237.01 4251.01 4237.01 c
4256.41 4237.01 4260.78 4232.63 4260.78 4227.23 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4123.78 m
4364.23 4118.38 4359.86 4114.0 4354.46 4114.0 c
4349.06 4114.0 4344.69 4118.38 4344.69 4123.78 c
4344.69 4129.18 4349.06 4133.55 4354.46 4133.55 c
4359.86 4133.55 4364.23 4129.18 4364.23 4123.78 c
f
n
4416.37 4072.46 m
4416.37 4067.06 4411.99 4062.69 4406.59 4062.69 c
4401.2 4062.69 4396.82 4067.06 4396.82 4072.46 c
4396.82 4077.86 4401.2 4082.24 4406.59 4082.24 c
4411.99 4082.24 4416.37 4077.86 4416.37 4072.46 c
f
n
4467.69 4020.33 m
4467.69 4014.93 4463.31 4010.55 4457.91 4010.55 c
4452.52 4010.55 4448.14 4014.93 4448.14 4020.33 c
4448.14 4025.73 4452.52 4030.1 4457.91 4030.1 c
4463.31 4030.1 4467.69 4025.73 4467.69 4020.33 c
f
n
4519.82 3968.2 m
4519.82 3962.8 4515.45 3958.42 4510.05 3958.42 c
4504.65 3958.42 4500.27 3962.8 4500.27 3968.2 c
4500.27 3973.59 4504.65 3977.97 4510.05 3977.97 c
4515.45 3977.97 4519.82 3973.59 4519.82 3968.2 c
f
n
4571.14 3916.88 m
4571.14 3911.48 4566.77 3907.1 4561.37 3907.1 c
4555.97 3907.1 4551.59 3911.48 4551.59 3916.88 c
4551.59 3922.27 4555.97 3926.65 4561.37 3926.65 c
4566.77 3926.65 4571.14 3922.27 4571.14 3916.88 c
f
n
4623.28 3864.74 m
4623.28 3859.34 4618.9 3854.96 4613.5 3854.96 c
4608.1 3854.96 4603.73 3859.34 4603.73 3864.74 c
4603.73 3870.14 4608.1 3874.52 4613.5 3874.52 c
4618.9 3874.52 4623.28 3870.14 4623.28 3864.74 c
f
n
4674.59 3813.42 m
4674.59 3808.02 4670.22 3803.64 4664.82 3803.64 c
4659.42 3803.64 4655.05 3808.02 4655.05 3813.42 c
4655.05 3818.82 4659.42 3823.2 4664.82 3823.2 c
4670.22 3823.2 4674.59 3818.82 4674.59 3813.42 c
f
n
3898.29 4537.59 m
3898.29 4532.2 3893.91 4527.82 3888.52 4527.82 c
3883.12 4527.82 3878.74 4532.2 3878.74 4537.59 c
3878.74 4542.99 3883.12 4547.37 3888.52 4547.37 c
3893.91 4547.37 3898.29 4542.99 3898.29 4537.59 c
f
n
3950.42 4491.98 m
3950.42 4486.58 3946.05 4482.2 3940.65 4482.2 c
3935.25 4482.2 3930.88 4486.58 3930.88 4491.98 c
3930.88 4497.38 3935.25 4501.75 3940.65 4501.75 c
3946.05 4501.75 3950.42 4497.38 3950.42 4491.98 c
f
n
4001.74 4447.17 m
4001.74 4441.77 3997.37 4437.4 3991.97 4437.4 c
3986.57 4437.4 3982.19 4441.77 3982.19 4447.17 c
3982.19 4452.57 3986.57 4456.95 3991.97 4456.95 c
3997.37 4456.95 4001.74 4452.57 4001.74 4447.17 c
f
n
4053.88 4401.55 m
4053.88 4396.16 4049.5 4391.78 4044.1 4391.78 c
4038.7 4391.78 4034.33 4396.16 4034.33 4401.55 c
4034.33 4406.95 4038.7 4411.33 4044.1 4411.33 c
4049.5 4411.33 4053.88 4406.95 4053.88 4401.55 c
f
n
4106.01 4356.75 m
4106.01 4351.36 4101.63 4346.98 4096.23 4346.98 c
4090.84 4346.98 4086.46 4351.36 4086.46 4356.75 c
4086.46 4362.15 4090.84 4366.53 4096.23 4366.53 c
4101.63 4366.53 4106.01 4362.15 4106.01 4356.75 c
f
n
4157.33 4311.14 m
4157.33 4305.74 4152.95 4301.36 4147.55 4301.36 c
4142.16 4301.36 4137.78 4305.74 4137.78 4311.14 c
4137.78 4316.54 4142.16 4320.91 4147.55 4320.91 c
4152.95 4320.91 4157.33 4316.54 4157.33 4311.14 c
f
n
4209.46 4266.34 m
4209.46 4260.94 4205.09 4256.56 4199.69 4256.56 c
4194.29 4256.56 4189.91 4260.94 4189.91 4266.34 c
4189.91 4271.73 4194.29 4276.11 4199.69 4276.11 c
4205.09 4276.11 4209.46 4271.73 4209.46 4266.34 c
f
n
4260.78 4220.72 m
4260.78 4215.32 4256.41 4210.94 4251.01 4210.94 c
4245.61 4210.94 4241.23 4215.32 4241.23 4220.72 c
4241.23 4226.12 4245.61 4230.49 4251.01 4230.49 c
4256.41 4230.49 4260.78 4226.12 4260.78 4220.72 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4130.3 m
4364.23 4124.9 4359.86 4120.52 4354.46 4120.52 c
4349.06 4120.52 4344.69 4124.9 4344.69 4130.3 c
4344.69 4135.7 4349.06 4140.07 4354.46 4140.07 c
4359.86 4140.07 4364.23 4135.7 4364.23 4130.3 c
f
n
4416.37 4084.68 m
4416.37 4079.28 4411.99 4074.91 4406.59 4074.91 c
4401.2 4074.91 4396.82 4079.28 4396.82 4084.68 c
4396.82 4090.08 4401.2 4094.46 4406.59 4094.46 c
4411.99 4094.46 4416.37 4090.08 4416.37 4084.68 c
f
n
4467.69 4039.88 m
4467.69 4034.48 4463.31 4030.1 4457.91 4030.1 c
4452.52 4030.1 4448.14 4034.48 4448.14 4039.88 c
4448.14 4045.28 4452.52 4049.65 4457.91 4049.65 c
4463.31 4049.65 4467.69 4045.28 4467.69 4039.88 c
f
n
4519.82 3994.26 m
4519.82 3988.86 4515.45 3984.48 4510.05 3984.48 c
4504.65 3984.48 4500.27 3988.86 4500.27 3994.26 c
4500.27 3999.66 4504.65 4004.04 4510.05 4004.04 c
4515.45 4004.04 4519.82 3999.66 4519.82 3994.26 c
f
n
4571.14 3949.46 m
4571.14 3944.06 4566.77 3939.68 4561.37 3939.68 c
4555.97 3939.68 4551.59 3944.06 4551.59 3949.46 c
4551.59 3954.86 4555.97 3959.23 4561.37 3959.23 c
4566.77 3959.23 4571.14 3954.86 4571.14 3949.46 c
f
n
4623.28 3903.84 m
4623.28 3898.44 4618.9 3894.07 4613.5 3894.07 c
4608.1 3894.07 4603.73 3898.44 4603.73 3903.84 c
4603.73 3909.24 4608.1 3913.62 4613.5 3913.62 c
4618.9 3913.62 4623.28 3909.24 4623.28 3903.84 c
f
n
4674.59 3859.04 m
4674.59 3853.64 4670.22 3849.26 4664.82 3849.26 c
4659.42 3849.26 4655.05 3853.64 4655.05 3859.04 c
4655.05 3864.44 4659.42 3868.81 4664.82 3868.81 c
4670.22 3868.81 4674.59 3864.44 4674.59 3859.04 c
f
n
3898.29 4486.27 m
3898.29 4480.88 3893.91 4476.5 3888.52 4476.5 c
3883.12 4476.5 3878.74 4480.88 3878.74 4486.27 c
3878.74 4491.67 3883.12 4496.05 3888.52 4496.05 c
3893.91 4496.05 3898.29 4491.67 3898.29 4486.27 c
f
n
3950.42 4447.17 m
3950.42 4441.77 3946.05 4437.4 3940.65 4437.4 c
3935.25 4437.4 3930.88 4441.77 3930.88 4447.17 c
3930.88 4452.57 3935.25 4456.95 3940.65 4456.95 c
3946.05 4456.95 3950.42 4452.57 3950.42 4447.17 c
f
n
4001.74 4408.07 m
4001.74 4402.68 3997.37 4398.3 3991.97 4398.3 c
3986.57 4398.3 3982.19 4402.68 3982.19 4408.07 c
3982.19 4413.47 3986.57 4417.85 3991.97 4417.85 c
3997.37 4417.85 4001.74 4413.47 4001.74 4408.07 c
f
n
4053.88 4369.79 m
4053.88 4364.39 4049.5 4360.01 4044.1 4360.01 c
4038.7 4360.01 4034.33 4364.39 4034.33 4369.79 c
4034.33 4375.19 4038.7 4379.56 4044.1 4379.56 c
4049.5 4379.56 4053.88 4375.19 4053.88 4369.79 c
f
n
4106.01 4330.69 m
4106.01 4325.29 4101.63 4320.91 4096.23 4320.91 c
4090.84 4320.91 4086.46 4325.29 4086.46 4330.69 c
4086.46 4336.09 4090.84 4340.46 4096.23 4340.46 c
4101.63 4340.46 4106.01 4336.09 4106.01 4330.69 c
f
n
4157.33 4291.59 m
4157.33 4286.19 4152.95 4281.81 4147.55 4281.81 c
4142.16 4281.81 4137.78 4286.19 4137.78 4291.59 c
4137.78 4296.98 4142.16 4301.36 4147.55 4301.36 c
4152.95 4301.36 4157.33 4296.98 4157.33 4291.59 c
f
n
4209.46 4253.3 m
4209.46 4247.9 4205.09 4243.53 4199.69 4243.53 c
4194.29 4243.53 4189.91 4247.9 4189.91 4253.3 c
4189.91 4258.7 4194.29 4263.07 4199.69 4263.07 c
4205.09 4263.07 4209.46 4258.7 4209.46 4253.3 c
f
n
4260.78 4214.2 m
4260.78 4208.8 4256.41 4204.43 4251.01 4204.43 c
4245.61 4204.43 4241.23 4208.8 4241.23 4214.2 c
4241.23 4219.6 4245.61 4223.98 4251.01 4223.98 c
4256.41 4223.98 4260.78 4219.6 4260.78 4214.2 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4136.81 m
4364.23 4131.41 4359.86 4127.04 4354.46 4127.04 c
4349.06 4127.04 4344.69 4131.41 4344.69 4136.81 c
4344.69 4142.21 4349.06 4146.59 4354.46 4146.59 c
4359.86 4146.59 4364.23 4142.21 4364.23 4136.81 c
f
n
4416.37 4097.71 m
4416.37 4092.32 4411.99 4087.94 4406.59 4087.94 c
4401.2 4087.94 4396.82 4092.32 4396.82 4097.71 c
4396.82 4103.11 4401.2 4107.49 4406.59 4107.49 c
4411.99 4107.49 4416.37 4103.11 4416.37 4097.71 c
f
n
4467.69 4059.43 m
4467.69 4054.03 4463.31 4049.65 4457.91 4049.65 c
4452.52 4049.65 4448.14 4054.03 4448.14 4059.43 c
4448.14 4064.83 4452.52 4069.2 4457.91 4069.2 c
4463.31 4069.2 4467.69 4064.83 4467.69 4059.43 c
f
n
4519.82 4020.33 m
4519.82 4014.93 4515.45 4010.55 4510.05 4010.55 c
4504.65 4010.55 4500.27 4014.93 4500.27 4020.33 c
4500.27 4025.73 4504.65 4030.1 4510.05 4030.1 c
4515.45 4030.1 4519.82 4025.73 4519.82 4020.33 c
f
n
4571.14 3981.23 m
4571.14 3975.83 4566.77 3971.45 4561.37 3971.45 c
4555.97 3971.45 4551.59 3975.83 4551.59 3981.23 c
4551.59 3986.62 4555.97 3991.0 4561.37 3991.0 c
4566.77 3991.0 4571.14 3986.62 4571.14 3981.23 c
f
n
4623.28 3942.94 m
4623.28 3937.54 4618.9 3933.17 4613.5 3933.17 c
4608.1 3933.17 4603.73 3937.54 4603.73 3942.94 c
4603.73 3948.34 4608.1 3952.71 4613.5 3952.71 c
4618.9 3952.71 4623.28 3948.34 4623.28 3942.94 c
f
n
4674.59 3903.84 m
4674.59 3898.44 4670.22 3894.07 4664.82 3894.07 c
4659.42 3894.07 4655.05 3898.44 4655.05 3903.84 c
4655.05 3909.24 4659.42 3913.62 4664.82 3913.62 c
4670.22 3913.62 4674.59 3909.24 4674.59 3903.84 c
f
n
3898.29 4434.14 m
3898.29 4428.74 3893.91 4424.36 3888.52 4424.36 c
3883.12 4424.36 3878.74 4428.74 3878.74 4434.14 c
3878.74 4439.54 3883.12 4443.91 3888.52 4443.91 c
3893.91 4443.91 3898.29 4439.54 3898.29 4434.14 c
f
n
3950.42 4401.55 m
3950.42 4396.16 3946.05 4391.78 3940.65 4391.78 c
3935.25 4391.78 3930.88 4396.16 3930.88 4401.55 c
3930.88 4406.95 3935.25 4411.33 3940.65 4411.33 c
3946.05 4411.33 3950.42 4406.95 3950.42 4401.55 c
f
n
4001.74 4369.79 m
4001.74 4364.39 3997.37 4360.01 3991.97 4360.01 c
3986.57 4360.01 3982.19 4364.39 3982.19 4369.79 c
3982.19 4375.19 3986.57 4379.56 3991.97 4379.56 c
3997.37 4379.56 4001.74 4375.19 4001.74 4369.79 c
f
n
4053.88 4337.2 m
4053.88 4331.8 4049.5 4327.43 4044.1 4327.43 c
4038.7 4327.43 4034.33 4331.8 4034.33 4337.2 c
4034.33 4342.6 4038.7 4346.98 4044.1 4346.98 c
4049.5 4346.98 4053.88 4342.6 4053.88 4337.2 c
f
n
4106.01 4304.62 m
4106.01 4299.22 4101.63 4294.84 4096.23 4294.84 c
4090.84 4294.84 4086.46 4299.22 4086.46 4304.62 c
4086.46 4310.02 4090.84 4314.39 4096.23 4314.39 c
4101.63 4314.39 4106.01 4310.02 4106.01 4304.62 c
f
n
4157.33 4272.85 m
4157.33 4267.45 4152.95 4263.07 4147.55 4263.07 c
4142.16 4263.07 4137.78 4267.45 4137.78 4272.85 c
4137.78 4278.25 4142.16 4282.62 4147.55 4282.62 c
4152.95 4282.62 4157.33 4278.25 4157.33 4272.85 c
f
n
4209.46 4240.27 m
4209.46 4234.87 4205.09 4230.49 4199.69 4230.49 c
4194.29 4230.49 4189.91 4234.87 4189.91 4240.27 c
4189.91 4245.66 4194.29 4250.04 4199.69 4250.04 c
4205.09 4250.04 4209.46 4245.66 4209.46 4240.27 c
f
n
4260.78 4207.68 m
4260.78 4202.29 4256.41 4197.91 4251.01 4197.91 c
4245.61 4197.91 4241.23 4202.29 4241.23 4207.68 c
4241.23 4213.08 4245.61 4217.46 4251.01 4217.46 c
4256.41 4217.46 4260.78 4213.08 4260.78 4207.68 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4143.33 m
4364.23 4137.93 4359.86 4133.55 4354.46 4133.55 c
4349.06 4133.55 4344.69 4137.93 4344.69 4143.33 c
4344.69 4148.73 4349.06 4153.11 4354.46 4153.11 c
4359.86 4153.11 4364.23 4148.73 4364.23 4143.33 c
f
n
4416.37 4110.75 m
4416.37 4105.35 4411.99 4100.97 4406.59 4100.97 c
4401.2 4100.97 4396.82 4105.35 4396.82 4110.75 c
4396.82 4116.14 4401.2 4120.52 4406.59 4120.52 c
4411.99 4120.52 4416.37 4116.14 4416.37 4110.75 c
f
n
4467.69 4078.16 m
4467.69 4072.77 4463.31 4068.39 4457.91 4068.39 c
4452.52 4068.39 4448.14 4072.77 4448.14 4078.16 c
4448.14 4083.56 4452.52 4087.94 4457.91 4087.94 c
4463.31 4087.94 4467.69 4083.56 4467.69 4078.16 c
f
n
4519.82 4046.39 m
4519.82 4041.0 4515.45 4036.62 4510.05 4036.62 c
4504.65 4036.62 4500.27 4041.0 4500.27 4046.39 c
4500.27 4051.79 4504.65 4056.17 4510.05 4056.17 c
4515.45 4056.17 4519.82 4051.79 4519.82 4046.39 c
f
n
4571.14 4013.81 m
4571.14 4008.41 4566.77 4004.04 4561.37 4004.04 c
4555.97 4004.04 4551.59 4008.41 4551.59 4013.81 c
4551.59 4019.21 4555.97 4023.59 4561.37 4023.59 c
4566.77 4023.59 4571.14 4019.21 4571.14 4013.81 c
f
n
4623.28 3981.23 m
4623.28 3975.83 4618.9 3971.45 4613.5 3971.45 c
4608.1 3971.45 4603.73 3975.83 4603.73 3981.23 c
4603.73 3986.62 4608.1 3991.0 4613.5 3991.0 c
4618.9 3991.0 4623.28 3986.62 4623.28 3981.23 c
f
n
4674.59 3949.46 m
4674.59 3944.06 4670.22 3939.68 4664.82 3939.68 c
4659.42 3939.68 4655.05 3944.06 4655.05 3949.46 c
4655.05 3954.86 4659.42 3959.23 4664.82 3959.23 c
4670.22 3959.23 4674.59 3954.86 4674.59 3949.46 c
f
n
3898.29 4382.82 m
3898.29 4377.42 3893.91 4373.05 3888.52 4373.05 c
3883.12 4373.05 3878.74 4377.42 3878.74 4382.82 c
3878.74 4388.22 3883.12 4392.6 3888.52 4392.6 c
3893.91 4392.6 3898.29 4388.22 3898.29 4382.82 c
f
n
3950.42 4356.75 m
3950.42 4351.36 3946.05 4346.98 3940.65 4346.98 c
3935.25 4346.98 3930.88 4351.36 3930.88 4356.75 c
3930.88 4362.15 3935.25 4366.53 3940.65 4366.53 c
3946.05 4366.53 3950.42 4362.15 3950.42 4356.75 c
f
n
4001.74 4330.69 m
4001.74 4325.29 3997.37 4320.91 3991.97 4320.91 c
3986.57 4320.91 3982.19 4325.29 3982.19 4330.69 c
3982.19 4336.09 3986.57 4340.46 3991.97 4340.46 c
3997.37 4340.46 4001.74 4336.09 4001.74 4330.69 c
f
n
4053.88 4304.62 m
4053.88 4299.22 4049.5 4294.84 4044.1 4294.84 c
4038.7 4294.84 4034.33 4299.22 4034.33 4304.62 c
4034.33 4310.02 4038.7 4314.39 4044.1 4314.39 c
4049.5 4314.39 4053.88 4310.02 4053.88 4304.62 c
f
n
4106.01 4279.37 m
4106.01 4273.97 4101.63 4269.59 4096.23 4269.59 c
4090.84 4269.59 4086.46 4273.97 4086.46 4279.37 c
4086.46 4284.77 4090.84 4289.14 4096.23 4289.14 c
4101.63 4289.14 4106.01 4284.77 4106.01 4279.37 c
f
n
4157.33 4253.3 m
4157.33 4247.9 4152.95 4243.53 4147.55 4243.53 c
4142.16 4243.53 4137.78 4247.9 4137.78 4253.3 c
4137.78 4258.7 4142.16 4263.07 4147.55 4263.07 c
4152.95 4263.07 4157.33 4258.7 4157.33 4253.3 c
f
n
4209.46 4227.23 m
4209.46 4221.84 4205.09 4217.46 4199.69 4217.46 c
4194.29 4217.46 4189.91 4221.84 4189.91 4227.23 c
4189.91 4232.63 4194.29 4237.01 4199.69 4237.01 c
4205.09 4237.01 4209.46 4232.63 4209.46 4227.23 c
f
n
4260.78 4201.17 m
4260.78 4195.77 4256.41 4191.39 4251.01 4191.39 c
4245.61 4191.39 4241.23 4195.77 4241.23 4201.17 c
4241.23 4206.57 4245.61 4210.94 4251.01 4210.94 c
4256.41 4210.94 4260.78 4206.57 4260.78 4201.17 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4149.85 m
4364.23 4144.45 4359.86 4140.07 4354.46 4140.07 c
4349.06 4140.07 4344.69 4144.45 4344.69 4149.85 c
4344.69 4155.25 4349.06 4159.62 4354.46 4159.62 c
4359.86 4159.62 4364.23 4155.25 4364.23 4149.85 c
f
n
4416.37 4123.78 m
4416.37 4118.38 4411.99 4114.0 4406.59 4114.0 c
4401.2 4114.0 4396.82 4118.38 4396.82 4123.78 c
4396.82 4129.18 4401.2 4133.55 4406.59 4133.55 c
4411.99 4133.55 4416.37 4129.18 4416.37 4123.78 c
f
n
4467.69 4097.71 m
4467.69 4092.32 4463.31 4087.94 4457.91 4087.94 c
4452.52 4087.94 4448.14 4092.32 4448.14 4097.71 c
4448.14 4103.11 4452.52 4107.49 4457.91 4107.49 c
4463.31 4107.49 4467.69 4103.11 4467.69 4097.71 c
f
n
4519.82 4072.46 m
4519.82 4067.06 4515.45 4062.69 4510.05 4062.69 c
4504.65 4062.69 4500.27 4067.06 4500.27 4072.46 c
4500.27 4077.86 4504.65 4082.24 4510.05 4082.24 c
4515.45 4082.24 4519.82 4077.86 4519.82 4072.46 c
f
n
4571.14 4046.39 m
4571.14 4041.0 4566.77 4036.62 4561.37 4036.62 c
4555.97 4036.62 4551.59 4041.0 4551.59 4046.39 c
4551.59 4051.79 4555.97 4056.17 4561.37 4056.17 c
4566.77 4056.17 4571.14 4051.79 4571.14 4046.39 c
f
n
4623.28 4020.33 m
4623.28 4014.93 4618.9 4010.55 4613.5 4010.55 c
4608.1 4010.55 4603.73 4014.93 4603.73 4020.33 c
4603.73 4025.73 4608.1 4030.1 4613.5 4030.1 c
4618.9 4030.1 4623.28 4025.73 4623.28 4020.33 c
f
n
4674.59 3994.26 m
4674.59 3988.86 4670.22 3984.48 4664.82 3984.48 c
4659.42 3984.48 4655.05 3988.86 4655.05 3994.26 c
4655.05 3999.66 4659.42 4004.04 4664.82 4004.04 c
4670.22 4004.04 4674.59 3999.66 4674.59 3994.26 c
f
n
3898.29 4330.69 m
3898.29 4325.29 3893.91 4320.91 3888.52 4320.91 c
3883.12 4320.91 3878.74 4325.29 3878.74 4330.69 c
3878.74 4336.09 3883.12 4340.46 3888.52 4340.46 c
3893.91 4340.46 3898.29 4336.09 3898.29 4330.69 c
f
n
3950.42 4311.14 m
3950.42 4305.74 3946.05 4301.36 3940.65 4301.36 c
3935.25 4301.36 3930.88 4305.74 3930.88 4311.14 c
3930.88 4316.54 3935.25 4320.91 3940.65 4320.91 c
3946.05 4320.91 3950.42 4316.54 3950.42 4311.14 c
f
n
4001.74 4291.59 m
4001.74 4286.19 3997.37 4281.81 3991.97 4281.81 c
3986.57 4281.81 3982.19 4286.19 3982.19 4291.59 c
3982.19 4296.98 3986.57 4301.36 3991.97 4301.36 c
3997.37 4301.36 4001.74 4296.98 4001.74 4291.59 c
f
n
4053.88 4272.85 m
4053.88 4267.45 4049.5 4263.07 4044.1 4263.07 c
4038.7 4263.07 4034.33 4267.45 4034.33 4272.85 c
4034.33 4278.25 4038.7 4282.62 4044.1 4282.62 c
4049.5 4282.62 4053.88 4278.25 4053.88 4272.85 c
f
n
4106.01 4253.3 m
4106.01 4247.9 4101.63 4243.53 4096.23 4243.53 c
4090.84 4243.53 4086.46 4247.9 4086.46 4253.3 c
4086.46 4258.7 4090.84 4263.07 4096.23 4263.07 c
4101.63 4263.07 4106.01 4258.7 4106.01 4253.3 c
f
n
4157.33 4233.75 m
4157.33 4228.35 4152.95 4223.98 4147.55 4223.98 c
4142.16 4223.98 4137.78 4228.35 4137.78 4233.75 c
4137.78 4239.15 4142.16 4243.53 4147.55 4243.53 c
4152.95 4243.53 4157.33 4239.15 4157.33 4233.75 c
f
n
4209.46 4214.2 m
4209.46 4208.8 4205.09 4204.43 4199.69 4204.43 c
4194.29 4204.43 4189.91 4208.8 4189.91 4214.2 c
4189.91 4219.6 4194.29 4223.98 4199.69 4223.98 c
4205.09 4223.98 4209.46 4219.6 4209.46 4214.2 c
f
n
4260.78 4194.65 m
4260.78 4189.25 4256.41 4184.88 4251.01 4184.88 c
4245.61 4184.88 4241.23 4189.25 4241.23 4194.65 c
4241.23 4200.05 4245.61 4204.43 4251.01 4204.43 c
4256.41 4204.43 4260.78 4200.05 4260.78 4194.65 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4156.36 m
4364.23 4150.96 4359.86 4146.59 4354.46 4146.59 c
4349.06 4146.59 4344.69 4150.96 4344.69 4156.36 c
4344.69 4161.76 4349.06 4166.14 4354.46 4166.14 c
4359.86 4166.14 4364.23 4161.76 4364.23 4156.36 c
f
n
4416.37 4136.81 m
4416.37 4131.41 4411.99 4127.04 4406.59 4127.04 c
4401.2 4127.04 4396.82 4131.41 4396.82 4136.81 c
4396.82 4142.21 4401.2 4146.59 4406.59 4146.59 c
4411.99 4146.59 4416.37 4142.21 4416.37 4136.81 c
f
n
4467.69 4117.27 m
4467.69 4111.87 4463.31 4107.49 4457.91 4107.49 c
4452.52 4107.49 4448.14 4111.87 4448.14 4117.27 c
4448.14 4122.66 4452.52 4127.04 4457.91 4127.04 c
4463.31 4127.04 4467.69 4122.66 4467.69 4117.27 c
f
n
4519.82 4097.71 m
4519.82 4092.32 4515.45 4087.94 4510.05 4087.94 c
4504.65 4087.94 4500.27 4092.32 4500.27 4097.71 c
4500.27 4103.11 4504.65 4107.49 4510.05 4107.49 c
4515.45 4107.49 4519.82 4103.11 4519.82 4097.71 c
f
n
4571.14 4078.16 m
4571.14 4072.77 4566.77 4068.39 4561.37 4068.39 c
4555.97 4068.39 4551.59 4072.77 4551.59 4078.16 c
4551.59 4083.56 4555.97 4087.94 4561.37 4087.94 c
4566.77 4087.94 4571.14 4083.56 4571.14 4078.16 c
f
n
4623.28 4059.43 m
4623.28 4054.03 4618.9 4049.65 4613.5 4049.65 c
4608.1 4049.65 4603.73 4054.03 4603.73 4059.43 c
4603.73 4064.83 4608.1 4069.2 4613.5 4069.2 c
4618.9 4069.2 4623.28 4064.83 4623.28 4059.43 c
f
n
4674.59 4039.88 m
4674.59 4034.48 4670.22 4030.1 4664.82 4030.1 c
4659.42 4030.1 4655.05 4034.48 4655.05 4039.88 c
4655.05 4045.28 4659.42 4049.65 4664.82 4049.65 c
4670.22 4049.65 4674.59 4045.28 4674.59 4039.88 c
f
n
3898.29 4279.37 m
3898.29 4273.97 3893.91 4269.59 3888.52 4269.59 c
3883.12 4269.59 3878.74 4273.97 3878.74 4279.37 c
3878.74 4284.77 3883.12 4289.14 3888.52 4289.14 c
3893.91 4289.14 3898.29 4284.77 3898.29 4279.37 c
f
n
3950.42 4266.34 m
3950.42 4260.94 3946.05 4256.56 3940.65 4256.56 c
3935.25 4256.56 3930.88 4260.94 3930.88 4266.34 c
3930.88 4271.73 3935.25 4276.11 3940.65 4276.11 c
3946.05 4276.11 3950.42 4271.73 3950.42 4266.34 c
f
n
4001.74 4253.3 m
4001.74 4247.9 3997.37 4243.53 3991.97 4243.53 c
3986.57 4243.53 3982.19 4247.9 3982.19 4253.3 c
3982.19 4258.7 3986.57 4263.07 3991.97 4263.07 c
3997.37 4263.07 4001.74 4258.7 4001.74 4253.3 c
f
n
4053.88 4240.27 m
4053.88 4234.87 4049.5 4230.49 4044.1 4230.49 c
4038.7 4230.49 4034.33 4234.87 4034.33 4240.27 c
4034.33 4245.66 4038.7 4250.04 4044.1 4250.04 c
4049.5 4250.04 4053.88 4245.66 4053.88 4240.27 c
f
n
4106.01 4227.23 m
4106.01 4221.84 4101.63 4217.46 4096.23 4217.46 c
4090.84 4217.46 4086.46 4221.84 4086.46 4227.23 c
4086.46 4232.63 4090.84 4237.01 4096.23 4237.01 c
4101.63 4237.01 4106.01 4232.63 4106.01 4227.23 c
f
n
4157.33 4214.2 m
4157.33 4208.8 4152.95 4204.43 4147.55 4204.43 c
4142.16 4204.43 4137.78 4208.8 4137.78 4214.2 c
4137.78 4219.6 4142.16 4223.98 4147.55 4223.98 c
4152.95 4223.98 4157.33 4219.6 4157.33 4214.2 c
f
n
4209.46 4201.17 m
4209.46 4195.77 4205.09 4191.39 4199.69 4191.39 c
4194.29 4191.39 4189.91 4195.77 4189.91 4201.17 c
4189.91 4206.57 4194.29 4210.94 4199.69 4210.94 c
4205.09 4210.94 4209.46 4206.57 4209.46 4201.17 c
f
n
4260.78 4188.13 m
4260.78 4182.73 4256.41 4178.36 4251.01 4178.36 c
4245.61 4178.36 4241.23 4182.73 4241.23 4188.13 c
4241.23 4193.53 4245.61 4197.91 4251.01 4197.91 c
4256.41 4197.91 4260.78 4193.53 4260.78 4188.13 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4162.88 m
4364.23 4157.48 4359.86 4153.11 4354.46 4153.11 c
4349.06 4153.11 4344.69 4157.48 4344.69 4162.88 c
4344.69 4168.28 4349.06 4172.66 4354.46 4172.66 c
4359.86 4172.66 4364.23 4168.28 4364.23 4162.88 c
f
n
4416.37 4149.85 m
4416.37 4144.45 4411.99 4140.07 4406.59 4140.07 c
4401.2 4140.07 4396.82 4144.45 4396.82 4149.85 c
4396.82 4155.25 4401.2 4159.62 4406.59 4159.62 c
4411.99 4159.62 4416.37 4155.25 4416.37 4149.85 c
f
n
4467.69 4136.81 m
4467.69 4131.41 4463.31 4127.04 4457.91 4127.04 c
4452.52 4127.04 4448.14 4131.41 4448.14 4136.81 c
4448.14 4142.21 4452.52 4146.59 4457.91 4146.59 c
4463.31 4146.59 4467.69 4142.21 4467.69 4136.81 c
f
n
4519.82 4123.78 m
4519.82 4118.38 4515.45 4114.0 4510.05 4114.0 c
4504.65 4114.0 4500.27 4118.38 4500.27 4123.78 c
4500.27 4129.18 4504.65 4133.55 4510.05 4133.55 c
4515.45 4133.55 4519.82 4129.18 4519.82 4123.78 c
f
n
4571.14 4110.75 m
4571.14 4105.35 4566.77 4100.97 4561.37 4100.97 c
4555.97 4100.97 4551.59 4105.35 4551.59 4110.75 c
4551.59 4116.14 4555.97 4120.52 4561.37 4120.52 c
4566.77 4120.52 4571.14 4116.14 4571.14 4110.75 c
f
n
4623.28 4097.71 m
4623.28 4092.32 4618.9 4087.94 4613.5 4087.94 c
4608.1 4087.94 4603.73 4092.32 4603.73 4097.71 c
4603.73 4103.11 4608.1 4107.49 4613.5 4107.49 c
4618.9 4107.49 4623.28 4103.11 4623.28 4097.71 c
f
n
4674.59 4084.68 m
4674.59 4079.28 4670.22 4074.91 4664.82 4074.91 c
4659.42 4074.91 4655.05 4079.28 4655.05 4084.68 c
4655.05 4090.08 4659.42 4094.46 4664.82 4094.46 c
4670.22 4094.46 4674.59 4090.08 4674.59 4084.68 c
f
n
3898.29 4227.23 m
3898.29 4221.84 3893.91 4217.46 3888.52 4217.46 c
3883.12 4217.46 3878.74 4221.84 3878.74 4227.23 c
3878.74 4232.63 3883.12 4237.01 3888.52 4237.01 c
3893.91 4237.01 3898.29 4232.63 3898.29 4227.23 c
f
n
3950.42 4220.72 m
3950.42 4215.32 3946.05 4210.94 3940.65 4210.94 c
3935.25 4210.94 3930.88 4215.32 3930.88 4220.72 c
3930.88 4226.12 3935.25 4230.49 3940.65 4230.49 c
3946.05 4230.49 3950.42 4226.12 3950.42 4220.72 c
f
n
4001.74 4214.2 m
4001.74 4208.8 3997.37 4204.43 3991.97 4204.43 c
3986.57 4204.43 3982.19 4208.8 3982.19 4214.2 c
3982.19 4219.6 3986.57 4223.98 3991.97 4223.98 c
3997.37 4223.98 4001.74 4219.6 4001.74 4214.2 c
f
n
4053.88 4207.68 m
4053.88 4202.29 4049.5 4197.91 4044.1 4197.91 c
4038.7 4197.91 4034.33 4202.29 4034.33 4207.68 c
4034.33 4213.08 4038.7 4217.46 4044.1 4217.46 c
4049.5 4217.46 4053.88 4213.08 4053.88 4207.68 c
f
n
4106.01 4201.17 m
4106.01 4195.77 4101.63 4191.39 4096.23 4191.39 c
4090.84 4191.39 4086.46 4195.77 4086.46 4201.17 c
4086.46 4206.57 4090.84 4210.94 4096.23 4210.94 c
4101.63 4210.94 4106.01 4206.57 4106.01 4201.17 c
f
n
4157.33 4194.65 m
4157.33 4189.25 4152.95 4184.88 4147.55 4184.88 c
4142.16 4184.88 4137.78 4189.25 4137.78 4194.65 c
4137.78 4200.05 4142.16 4204.43 4147.55 4204.43 c
4152.95 4204.43 4157.33 4200.05 4157.33 4194.65 c
f
n
4209.46 4188.13 m
4209.46 4182.73 4205.09 4178.36 4199.69 4178.36 c
4194.29 4178.36 4189.91 4182.73 4189.91 4188.13 c
4189.91 4193.53 4194.29 4197.91 4199.69 4197.91 c
4205.09 4197.91 4209.46 4193.53 4209.46 4188.13 c
f
n
4260.78 4181.62 m
4260.78 4176.22 4256.41 4171.84 4251.01 4171.84 c
4245.61 4171.84 4241.23 4176.22 4241.23 4181.62 c
4241.23 4187.02 4245.61 4191.39 4251.01 4191.39 c
4256.41 4191.39 4260.78 4187.02 4260.78 4181.62 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4169.4 m
4364.23 4164.0 4359.86 4159.62 4354.46 4159.62 c
4349.06 4159.62 4344.69 4164.0 4344.69 4169.4 c
4344.69 4174.8 4349.06 4179.17 4354.46 4179.17 c
4359.86 4179.17 4364.23 4174.8 4364.23 4169.4 c
f
n
4416.37 4162.88 m
4416.37 4157.48 4411.99 4153.11 4406.59 4153.11 c
4401.2 4153.11 4396.82 4157.48 4396.82 4162.88 c
4396.82 4168.28 4401.2 4172.66 4406.59 4172.66 c
4411.99 4172.66 4416.37 4168.28 4416.37 4162.88 c
f
n
4467.69 4156.36 m
4467.69 4150.96 4463.31 4146.59 4457.91 4146.59 c
4452.52 4146.59 4448.14 4150.96 4448.14 4156.36 c
4448.14 4161.76 4452.52 4166.14 4457.91 4166.14 c
4463.31 4166.14 4467.69 4161.76 4467.69 4156.36 c
f
n
4519.82 4149.85 m
4519.82 4144.45 4515.45 4140.07 4510.05 4140.07 c
4504.65 4140.07 4500.27 4144.45 4500.27 4149.85 c
4500.27 4155.25 4504.65 4159.62 4510.05 4159.62 c
4515.45 4159.62 4519.82 4155.25 4519.82 4149.85 c
f
n
4571.14 4143.33 m
4571.14 4137.93 4566.77 4133.55 4561.37 4133.55 c
4555.97 4133.55 4551.59 4137.93 4551.59 4143.33 c
4551.59 4148.73 4555.97 4153.11 4561.37 4153.11 c
4566.77 4153.11 4571.14 4148.73 4571.14 4143.33 c
f
n
4623.28 4136.81 m
4623.28 4131.41 4618.9 4127.04 4613.5 4127.04 c
4608.1 4127.04 4603.73 4131.41 4603.73 4136.81 c
4603.73 4142.21 4608.1 4146.59 4613.5 4146.59 c
4618.9 4146.59 4623.28 4142.21 4623.28 4136.81 c
f
n
4674.59 4130.3 m
4674.59 4124.9 4670.22 4120.52 4664.82 4120.52 c
4659.42 4120.52 4655.05 4124.9 4655.05 4130.3 c
4655.05 4135.7 4659.42 4140.07 4664.82 4140.07 c
4670.22 4140.07 4674.59 4135.7 4674.59 4130.3 c
f
n
3898.29 4175.91 m
3898.29 4170.52 3893.91 4166.14 3888.52 4166.14 c
3883.12 4166.14 3878.74 4170.52 3878.74 4175.91 c
3878.74 4181.31 3883.12 4185.69 3888.52 4185.69 c
3893.91 4185.69 3898.29 4181.31 3898.29 4175.91 c
f
n
3950.42 4175.91 m
3950.42 4170.52 3946.05 4166.14 3940.65 4166.14 c
3935.25 4166.14 3930.88 4170.52 3930.88 4175.91 c
3930.88 4181.31 3935.25 4185.69 3940.65 4185.69 c
3946.05 4185.69 3950.42 4181.31 3950.42 4175.91 c
f
n
4001.74 4175.91 m
4001.74 4170.52 3997.37 4166.14 3991.97 4166.14 c
3986.57 4166.14 3982.19 4170.52 3982.19 4175.91 c
3982.19 4181.31 3986.57 4185.69 3991.97 4185.69 c
3997.37 4185.69 4001.74 4181.31 4001.74 4175.91 c
f
n
4053.88 4175.91 m
4053.88 4170.52 4049.5 4166.14 4044.1 4166.14 c
4038.7 4166.14 4034.33 4170.52 4034.33 4175.91 c
4034.33 4181.31 4038.7 4185.69 4044.1 4185.69 c
4049.5 4185.69 4053.88 4181.31 4053.88 4175.91 c
f
n
4106.01 4175.91 m
4106.01 4170.52 4101.63 4166.14 4096.23 4166.14 c
4090.84 4166.14 4086.46 4170.52 4086.46 4175.91 c
4086.46 4181.31 4090.84 4185.69 4096.23 4185.69 c
4101.63 4185.69 4106.01 4181.31 4106.01 4175.91 c
f
n
4157.33 4175.91 m
4157.33 4170.52 4152.95 4166.14 4147.55 4166.14 c
4142.16 4166.14 4137.78 4170.52 4137.78 4175.91 c
4137.78 4181.31 4142.16 4185.69 4147.55 4185.69 c
4152.95 4185.69 4157.33 4181.31 4157.33 4175.91 c
f
n
4209.46 4175.91 m
4209.46 4170.52 4205.09 4166.14 4199.69 4166.14 c
4194.29 4166.14 4189.91 4170.52 4189.91 4175.91 c
4189.91 4181.31 4194.29 4185.69 4199.69 4185.69 c
4205.09 4185.69 4209.46 4181.31 4209.46 4175.91 c
f
n
4260.78 4175.91 m
4260.78 4170.52 4256.41 4166.14 4251.01 4166.14 c
4245.61 4166.14 4241.23 4170.52 4241.23 4175.91 c
4241.23 4181.31 4245.61 4185.69 4251.01 4185.69 c
4256.41 4185.69 4260.78 4181.31 4260.78 4175.91 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4175.91 m
4364.23 4170.52 4359.86 4166.14 4354.46 4166.14 c
4349.06 4166.14 4344.69 4170.52 4344.69 4175.91 c
4344.69 4181.31 4349.06 4185.69 4354.46 4185.69 c
4359.86 4185.69 4364.23 4181.31 4364.23 4175.91 c
f
n
4416.37 4175.91 m
4416.37 4170.52 4411.99 4166.14 4406.59 4166.14 c
4401.2 4166.14 4396.82 4170.52 4396.82 4175.91 c
4396.82 4181.31 4401.2 4185.69 4406.59 4185.69 c
4411.99 4185.69 4416.37 4181.31 4416.37 4175.91 c
f
n
4467.69 4175.91 m
4467.69 4170.52 4463.31 4166.14 4457.91 4166.14 c
4452.52 4166.14 4448.14 4170.52 4448.14 4175.91 c
4448.14 4181.31 4452.52 4185.69 4457.91 4185.69 c
4463.31 4185.69 4467.69 4181.31 4467.69 4175.91 c
f
n
4519.82 4175.91 m
4519.82 4170.52 4515.45 4166.14 4510.05 4166.14 c
4504.65 4166.14 4500.27 4170.52 4500.27 4175.91 c
4500.27 4181.31 4504.65 4185.69 4510.05 4185.69 c
4515.45 4185.69 4519.82 4181.31 4519.82 4175.91 c
f
n
4571.14 4175.91 m
4571.14 4170.52 4566.77 4166.14 4561.37 4166.14 c
4555.97 4166.14 4551.59 4170.52 4551.59 4175.91 c
4551.59 4181.31 4555.97 4185.69 4561.37 4185.69 c
4566.77 4185.69 4571.14 4181.31 4571.14 4175.91 c
f
n
4623.28 4175.91 m
4623.28 4170.52 4618.9 4166.14 4613.5 4166.14 c
4608.1 4166.14 4603.73 4170.52 4603.73 4175.91 c
4603.73 4181.31 4608.1 4185.69 4613.5 4185.69 c
4618.9 4185.69 4623.28 4181.31 4623.28 4175.91 c
f
n
4674.59 4175.91 m
4674.59 4170.52 4670.22 4166.14 4664.82 4166.14 c
4659.42 4166.14 4655.05 4170.52 4655.05 4175.91 c
4655.05 4181.31 4659.42 4185.69 4664.82 4185.69 c
4670.22 4185.69 4674.59 4181.31 4674.59 4175.91 c
f
n
3898.29 4123.78 m
3898.29 4118.38 3893.91 4114.0 3888.52 4114.0 c
3883.12 4114.0 3878.74 4118.38 3878.74 4123.78 c
3878.74 4129.18 3883.12 4133.55 3888.52 4133.55 c
3893.91 4133.55 3898.29 4129.18 3898.29 4123.78 c
f
n
3950.42 4130.3 m
3950.42 4124.9 3946.05 4120.52 3940.65 4120.52 c
3935.25 4120.52 3930.88 4124.9 3930.88 4130.3 c
3930.88 4135.7 3935.25 4140.07 3940.65 4140.07 c
3946.05 4140.07 3950.42 4135.7 3950.42 4130.3 c
f
n
4001.74 4136.81 m
4001.74 4131.41 3997.37 4127.04 3991.97 4127.04 c
3986.57 4127.04 3982.19 4131.41 3982.19 4136.81 c
3982.19 4142.21 3986.57 4146.59 3991.97 4146.59 c
3997.37 4146.59 4001.74 4142.21 4001.74 4136.81 c
f
n
4053.88 4143.33 m
4053.88 4137.93 4049.5 4133.55 4044.1 4133.55 c
4038.7 4133.55 4034.33 4137.93 4034.33 4143.33 c
4034.33 4148.73 4038.7 4153.11 4044.1 4153.11 c
4049.5 4153.11 4053.88 4148.73 4053.88 4143.33 c
f
n
4106.01 4149.85 m
4106.01 4144.45 4101.63 4140.07 4096.23 4140.07 c
4090.84 4140.07 4086.46 4144.45 4086.46 4149.85 c
4086.46 4155.25 4090.84 4159.62 4096.23 4159.62 c
4101.63 4159.62 4106.01 4155.25 4106.01 4149.85 c
f
n
4157.33 4156.36 m
4157.33 4150.96 4152.95 4146.59 4147.55 4146.59 c
4142.16 4146.59 4137.78 4150.96 4137.78 4156.36 c
4137.78 4161.76 4142.16 4166.14 4147.55 4166.14 c
4152.95 4166.14 4157.33 4161.76 4157.33 4156.36 c
f
n
4209.46 4162.88 m
4209.46 4157.48 4205.09 4153.11 4199.69 4153.11 c
4194.29 4153.11 4189.91 4157.48 4189.91 4162.88 c
4189.91 4168.28 4194.29 4172.66 4199.69 4172.66 c
4205.09 4172.66 4209.46 4168.28 4209.46 4162.88 c
f
n
4260.78 4169.4 m
4260.78 4164.0 4256.41 4159.62 4251.01 4159.62 c
4245.61 4159.62 4241.23 4164.0 4241.23 4169.4 c
4241.23 4174.8 4245.61 4179.17 4251.01 4179.17 c
4256.41 4179.17 4260.78 4174.8 4260.78 4169.4 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4181.62 m
4364.23 4176.22 4359.86 4171.84 4354.46 4171.84 c
4349.06 4171.84 4344.69 4176.22 4344.69 4181.62 c
4344.69 4187.02 4349.06 4191.39 4354.46 4191.39 c
4359.86 4191.39 4364.23 4187.02 4364.23 4181.62 c
f
n
4416.37 4188.13 m
4416.37 4182.73 4411.99 4178.36 4406.59 4178.36 c
4401.2 4178.36 4396.82 4182.73 4396.82 4188.13 c
4396.82 4193.53 4401.2 4197.91 4406.59 4197.91 c
4411.99 4197.91 4416.37 4193.53 4416.37 4188.13 c
f
n
4467.69 4194.65 m
4467.69 4189.25 4463.31 4184.88 4457.91 4184.88 c
4452.52 4184.88 4448.14 4189.25 4448.14 4194.65 c
4448.14 4200.05 4452.52 4204.43 4457.91 4204.43 c
4463.31 4204.43 4467.69 4200.05 4467.69 4194.65 c
f
n
4519.82 4201.17 m
4519.82 4195.77 4515.45 4191.39 4510.05 4191.39 c
4504.65 4191.39 4500.27 4195.77 4500.27 4201.17 c
4500.27 4206.57 4504.65 4210.94 4510.05 4210.94 c
4515.45 4210.94 4519.82 4206.57 4519.82 4201.17 c
f
n
4571.14 4207.68 m
4571.14 4202.29 4566.77 4197.91 4561.37 4197.91 c
4555.97 4197.91 4551.59 4202.29 4551.59 4207.68 c
4551.59 4213.08 4555.97 4217.46 4561.37 4217.46 c
4566.77 4217.46 4571.14 4213.08 4571.14 4207.68 c
f
n
4623.28 4214.2 m
4623.28 4208.8 4618.9 4204.43 4613.5 4204.43 c
4608.1 4204.43 4603.73 4208.8 4603.73 4214.2 c
4603.73 4219.6 4608.1 4223.98 4613.5 4223.98 c
4618.9 4223.98 4623.28 4219.6 4623.28 4214.2 c
f
n
4674.59 4220.72 m
4674.59 4215.32 4670.22 4210.94 4664.82 4210.94 c
4659.42 4210.94 4655.05 4215.32 4655.05 4220.72 c
4655.05 4226.12 4659.42 4230.49 4664.82 4230.49 c
4670.22 4230.49 4674.59 4226.12 4674.59 4220.72 c
f
n
3898.29 4072.46 m
3898.29 4067.06 3893.91 4062.69 3888.52 4062.69 c
3883.12 4062.69 3878.74 4067.06 3878.74 4072.46 c
3878.74 4077.86 3883.12 4082.24 3888.52 4082.24 c
3893.91 4082.24 3898.29 4077.86 3898.29 4072.46 c
f
n
3950.42 4084.68 m
3950.42 4079.28 3946.05 4074.91 3940.65 4074.91 c
3935.25 4074.91 3930.88 4079.28 3930.88 4084.68 c
3930.88 4090.08 3935.25 4094.46 3940.65 4094.46 c
3946.05 4094.46 3950.42 4090.08 3950.42 4084.68 c
f
n
4001.74 4097.71 m
4001.74 4092.32 3997.37 4087.94 3991.97 4087.94 c
3986.57 4087.94 3982.19 4092.32 3982.19 4097.71 c
3982.19 4103.11 3986.57 4107.49 3991.97 4107.49 c
3997.37 4107.49 4001.74 4103.11 4001.74 4097.71 c
f
n
4053.88 4110.75 m
4053.88 4105.35 4049.5 4100.97 4044.1 4100.97 c
4038.7 4100.97 4034.33 4105.35 4034.33 4110.75 c
4034.33 4116.14 4038.7 4120.52 4044.1 4120.52 c
4049.5 4120.52 4053.88 4116.14 4053.88 4110.75 c
f
n
4106.01 4123.78 m
4106.01 4118.38 4101.63 4114.0 4096.23 4114.0 c
4090.84 4114.0 4086.46 4118.38 4086.46 4123.78 c
4086.46 4129.18 4090.84 4133.55 4096.23 4133.55 c
4101.63 4133.55 4106.01 4129.18 4106.01 4123.78 c
f
n
4157.33 4136.81 m
4157.33 4131.41 4152.95 4127.04 4147.55 4127.04 c
4142.16 4127.04 4137.78 4131.41 4137.78 4136.81 c
4137.78 4142.21 4142.16 4146.59 4147.55 4146.59 c
4152.95 4146.59 4157.33 4142.21 4157.33 4136.81 c
f
n
4209.46 4149.85 m
4209.46 4144.45 4205.09 4140.07 4199.69 4140.07 c
4194.29 4140.07 4189.91 4144.45 4189.91 4149.85 c
4189.91 4155.25 4194.29 4159.62 4199.69 4159.62 c
4205.09 4159.62 4209.46 4155.25 4209.46 4149.85 c
f
n
4260.78 4162.88 m
4260.78 4157.48 4256.41 4153.11 4251.01 4153.11 c
4245.61 4153.11 4241.23 4157.48 4241.23 4162.88 c
4241.23 4168.28 4245.61 4172.66 4251.01 4172.66 c
4256.41 4172.66 4260.78 4168.28 4260.78 4162.88 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4188.13 m
4364.23 4182.73 4359.86 4178.36 4354.46 4178.36 c
4349.06 4178.36 4344.69 4182.73 4344.69 4188.13 c
4344.69 4193.53 4349.06 4197.91 4354.46 4197.91 c
4359.86 4197.91 4364.23 4193.53 4364.23 4188.13 c
f
n
4416.37 4201.17 m
4416.37 4195.77 4411.99 4191.39 4406.59 4191.39 c
4401.2 4191.39 4396.82 4195.77 4396.82 4201.17 c
4396.82 4206.57 4401.2 4210.94 4406.59 4210.94 c
4411.99 4210.94 4416.37 4206.57 4416.37 4201.17 c
f
n
4467.69 4214.2 m
4467.69 4208.8 4463.31 4204.43 4457.91 4204.43 c
4452.52 4204.43 4448.14 4208.8 4448.14 4214.2 c
4448.14 4219.6 4452.52 4223.98 4457.91 4223.98 c
4463.31 4223.98 4467.69 4219.6 4467.69 4214.2 c
f
n
4519.82 4227.23 m
4519.82 4221.84 4515.45 4217.46 4510.05 4217.46 c
4504.65 4217.46 4500.27 4221.84 4500.27 4227.23 c
4500.27 4232.63 4504.65 4237.01 4510.05 4237.01 c
4515.45 4237.01 4519.82 4232.63 4519.82 4227.23 c
f
n
4571.14 4240.27 m
4571.14 4234.87 4566.77 4230.49 4561.37 4230.49 c
4555.97 4230.49 4551.59 4234.87 4551.59 4240.27 c
4551.59 4245.66 4555.97 4250.04 4561.37 4250.04 c
4566.77 4250.04 4571.14 4245.66 4571.14 4240.27 c
f
n
4623.28 4253.3 m
4623.28 4247.9 4618.9 4243.53 4613.5 4243.53 c
4608.1 4243.53 4603.73 4247.9 4603.73 4253.3 c
4603.73 4258.7 4608.1 4263.07 4613.5 4263.07 c
4618.9 4263.07 4623.28 4258.7 4623.28 4253.3 c
f
n
4674.59 4266.34 m
4674.59 4260.94 4670.22 4256.56 4664.82 4256.56 c
4659.42 4256.56 4655.05 4260.94 4655.05 4266.34 c
4655.05 4271.73 4659.42 4276.11 4664.82 4276.11 c
4670.22 4276.11 4674.59 4271.73 4674.59 4266.34 c
f
n
3898.29 4020.33 m
3898.29 4014.93 3893.91 4010.55 3888.52 4010.55 c
3883.12 4010.55 3878.74 4014.93 3878.74 4020.33 c
3878.74 4025.73 3883.12 4030.1 3888.52 4030.1 c
3893.91 4030.1 3898.29 4025.73 3898.29 4020.33 c
f
n
3950.42 4039.88 m
3950.42 4034.48 3946.05 4030.1 3940.65 4030.1 c
3935.25 4030.1 3930.88 4034.48 3930.88 4039.88 c
3930.88 4045.28 3935.25 4049.65 3940.65 4049.65 c
3946.05 4049.65 3950.42 4045.28 3950.42 4039.88 c
f
n
4001.74 4059.43 m
4001.74 4054.03 3997.37 4049.65 3991.97 4049.65 c
3986.57 4049.65 3982.19 4054.03 3982.19 4059.43 c
3982.19 4064.83 3986.57 4069.2 3991.97 4069.2 c
3997.37 4069.2 4001.74 4064.83 4001.74 4059.43 c
f
n
4053.88 4078.16 m
4053.88 4072.77 4049.5 4068.39 4044.1 4068.39 c
4038.7 4068.39 4034.33 4072.77 4034.33 4078.16 c
4034.33 4083.56 4038.7 4087.94 4044.1 4087.94 c
4049.5 4087.94 4053.88 4083.56 4053.88 4078.16 c
f
n
4106.01 4097.71 m
4106.01 4092.32 4101.63 4087.94 4096.23 4087.94 c
4090.84 4087.94 4086.46 4092.32 4086.46 4097.71 c
4086.46 4103.11 4090.84 4107.49 4096.23 4107.49 c
4101.63 4107.49 4106.01 4103.11 4106.01 4097.71 c
f
n
4157.33 4117.27 m
4157.33 4111.87 4152.95 4107.49 4147.55 4107.49 c
4142.16 4107.49 4137.78 4111.87 4137.78 4117.27 c
4137.78 4122.66 4142.16 4127.04 4147.55 4127.04 c
4152.95 4127.04 4157.33 4122.66 4157.33 4117.27 c
f
n
4209.46 4136.81 m
4209.46 4131.41 4205.09 4127.04 4199.69 4127.04 c
4194.29 4127.04 4189.91 4131.41 4189.91 4136.81 c
4189.91 4142.21 4194.29 4146.59 4199.69 4146.59 c
4205.09 4146.59 4209.46 4142.21 4209.46 4136.81 c
f
n
4260.78 4156.36 m
4260.78 4150.96 4256.41 4146.59 4251.01 4146.59 c
4245.61 4146.59 4241.23 4150.96 4241.23 4156.36 c
4241.23 4161.76 4245.61 4166.14 4251.01 4166.14 c
4256.41 4166.14 4260.78 4161.76 4260.78 4156.36 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4194.65 m
4364.23 4189.25 4359.86 4184.88 4354.46 4184.88 c
4349.06 4184.88 4344.69 4189.25 4344.69 4194.65 c
4344.69 4200.05 4349.06 4204.43 4354.46 4204.43 c
4359.86 4204.43 4364.23 4200.05 4364.23 4194.65 c
f
n
4416.37 4214.2 m
4416.37 4208.8 4411.99 4204.43 4406.59 4204.43 c
4401.2 4204.43 4396.82 4208.8 4396.82 4214.2 c
4396.82 4219.6 4401.2 4223.98 4406.59 4223.98 c
4411.99 4223.98 4416.37 4219.6 4416.37 4214.2 c
f
n
4467.69 4233.75 m
4467.69 4228.35 4463.31 4223.98 4457.91 4223.98 c
4452.52 4223.98 4448.14 4228.35 4448.14 4233.75 c
4448.14 4239.15 4452.52 4243.53 4457.91 4243.53 c
4463.31 4243.53 4467.69 4239.15 4467.69 4233.75 c
f
n
4519.82 4253.3 m
4519.82 4247.9 4515.45 4243.53 4510.05 4243.53 c
4504.65 4243.53 4500.27 4247.9 4500.27 4253.3 c
4500.27 4258.7 4504.65 4263.07 4510.05 4263.07 c
4515.45 4263.07 4519.82 4258.7 4519.82 4253.3 c
f
n
4571.14 4272.85 m
4571.14 4267.45 4566.77 4263.07 4561.37 4263.07 c
4555.97 4263.07 4551.59 4267.45 4551.59 4272.85 c
4551.59 4278.25 4555.97 4282.62 4561.37 4282.62 c
4566.77 4282.62 4571.14 4278.25 4571.14 4272.85 c
f
n
4623.28 4291.59 m
4623.28 4286.19 4618.9 4281.81 4613.5 4281.81 c
4608.1 4281.81 4603.73 4286.19 4603.73 4291.59 c
4603.73 4296.98 4608.1 4301.36 4613.5 4301.36 c
4618.9 4301.36 4623.28 4296.98 4623.28 4291.59 c
f
n
4674.59 4311.14 m
4674.59 4305.74 4670.22 4301.36 4664.82 4301.36 c
4659.42 4301.36 4655.05 4305.74 4655.05 4311.14 c
4655.05 4316.54 4659.42 4320.91 4664.82 4320.91 c
4670.22 4320.91 4674.59 4316.54 4674.59 4311.14 c
f
n
3898.29 3968.2 m
3898.29 3962.8 3893.91 3958.42 3888.52 3958.42 c
3883.12 3958.42 3878.74 3962.8 3878.74 3968.2 c
3878.74 3973.59 3883.12 3977.97 3888.52 3977.97 c
3893.91 3977.97 3898.29 3973.59 3898.29 3968.2 c
f
n
3950.42 3994.26 m
3950.42 3988.86 3946.05 3984.48 3940.65 3984.48 c
3935.25 3984.48 3930.88 3988.86 3930.88 3994.26 c
3930.88 3999.66 3935.25 4004.04 3940.65 4004.04 c
3946.05 4004.04 3950.42 3999.66 3950.42 3994.26 c
f
n
4001.74 4020.33 m
4001.74 4014.93 3997.37 4010.55 3991.97 4010.55 c
3986.57 4010.55 3982.19 4014.93 3982.19 4020.33 c
3982.19 4025.73 3986.57 4030.1 3991.97 4030.1 c
3997.37 4030.1 4001.74 4025.73 4001.74 4020.33 c
f
n
4053.88 4046.39 m
4053.88 4041.0 4049.5 4036.62 4044.1 4036.62 c
4038.7 4036.62 4034.33 4041.0 4034.33 4046.39 c
4034.33 4051.79 4038.7 4056.17 4044.1 4056.17 c
4049.5 4056.17 4053.88 4051.79 4053.88 4046.39 c
f
n
4106.01 4072.46 m
4106.01 4067.06 4101.63 4062.69 4096.23 4062.69 c
4090.84 4062.69 4086.46 4067.06 4086.46 4072.46 c
4086.46 4077.86 4090.84 4082.24 4096.23 4082.24 c
4101.63 4082.24 4106.01 4077.86 4106.01 4072.46 c
f
n
4157.33 4097.71 m
4157.33 4092.32 4152.95 4087.94 4147.55 4087.94 c
4142.16 4087.94 4137.78 4092.32 4137.78 4097.71 c
4137.78 4103.11 4142.16 4107.49 4147.55 4107.49 c
4152.95 4107.49 4157.33 4103.11 4157.33 4097.71 c
f
n
4209.46 4123.78 m
4209.46 4118.38 4205.09 4114.0 4199.69 4114.0 c
4194.29 4114.0 4189.91 4118.38 4189.91 4123.78 c
4189.91 4129.18 4194.29 4133.55 4199.69 4133.55 c
4205.09 4133.55 4209.46 4129.18 4209.46 4123.78 c
f
n
4260.78 4149.85 m
4260.78 4144.45 4256.41 4140.07 4251.01 4140.07 c
4245.61 4140.07 4241.23 4144.45 4241.23 4149.85 c
4241.23 4155.25 4245.61 4159.62 4251.01 4159.62 c
4256.41 4159.62 4260.78 4155.25 4260.78 4149.85 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4201.17 m
4364.23 4195.77 4359.86 4191.39 4354.46 4191.39 c
4349.06 4191.39 4344.69 4195.77 4344.69 4201.17 c
4344.69 4206.57 4349.06 4210.94 4354.46 4210.94 c
4359.86 4210.94 4364.23 4206.57 4364.23 4201.17 c
f
n
4416.37 4227.23 m
4416.37 4221.84 4411.99 4217.46 4406.59 4217.46 c
4401.2 4217.46 4396.82 4221.84 4396.82 4227.23 c
4396.82 4232.63 4401.2 4237.01 4406.59 4237.01 c
4411.99 4237.01 4416.37 4232.63 4416.37 4227.23 c
f
n
4467.69 4253.3 m
4467.69 4247.9 4463.31 4243.53 4457.91 4243.53 c
4452.52 4243.53 4448.14 4247.9 4448.14 4253.3 c
4448.14 4258.7 4452.52 4263.07 4457.91 4263.07 c
4463.31 4263.07 4467.69 4258.7 4467.69 4253.3 c
f
n
4519.82 4279.37 m
4519.82 4273.97 4515.45 4269.59 4510.05 4269.59 c
4504.65 4269.59 4500.27 4273.97 4500.27 4279.37 c
4500.27 4284.77 4504.65 4289.14 4510.05 4289.14 c
4515.45 4289.14 4519.82 4284.77 4519.82 4279.37 c
f
n
4571.14 4304.62 m
4571.14 4299.22 4566.77 4294.84 4561.37 4294.84 c
4555.97 4294.84 4551.59 4299.22 4551.59 4304.62 c
4551.59 4310.02 4555.97 4314.39 4561.37 4314.39 c
4566.77 4314.39 4571.14 4310.02 4571.14 4304.62 c
f
n
4623.28 4330.69 m
4623.28 4325.29 4618.9 4320.91 4613.5 4320.91 c
4608.1 4320.91 4603.73 4325.29 4603.73 4330.69 c
4603.73 4336.09 4608.1 4340.46 4613.5 4340.46 c
4618.9 4340.46 4623.28 4336.09 4623.28 4330.69 c
f
n
4674.59 4356.75 m
4674.59 4351.36 4670.22 4346.98 4664.82 4346.98 c
4659.42 4346.98 4655.05 4351.36 4655.05 4356.75 c
4655.05 4362.15 4659.42 4366.53 4664.82 4366.53 c
4670.22 4366.53 4674.59 4362.15 4674.59 4356.75 c
f
n
3898.29 3916.88 m
3898.29 3911.48 3893.91 3907.1 3888.52 3907.1 c
3883.12 3907.1 3878.74 3911.48 3878.74 3916.88 c
3878.74 3922.27 3883.12 3926.65 3888.52 3926.65 c
3893.91 3926.65 3898.29 3922.27 3898.29 3916.88 c
f
n
3950.42 3949.46 m
3950.42 3944.06 3946.05 3939.68 3940.65 3939.68 c
3935.25 3939.68 3930.88 3944.06 3930.88 3949.46 c
3930.88 3954.86 3935.25 3959.23 3940.65 3959.23 c
3946.05 3959.23 3950.42 3954.86 3950.42 3949.46 c
f
n
4001.74 3981.23 m
4001.74 3975.83 3997.37 3971.45 3991.97 3971.45 c
3986.57 3971.45 3982.19 3975.83 3982.19 3981.23 c
3982.19 3986.62 3986.57 3991.0 3991.97 3991.0 c
3997.37 3991.0 4001.74 3986.62 4001.74 3981.23 c
f
n
4053.88 4013.81 m
4053.88 4008.41 4049.5 4004.04 4044.1 4004.04 c
4038.7 4004.04 4034.33 4008.41 4034.33 4013.81 c
4034.33 4019.21 4038.7 4023.59 4044.1 4023.59 c
4049.5 4023.59 4053.88 4019.21 4053.88 4013.81 c
f
n
4106.01 4046.39 m
4106.01 4041.0 4101.63 4036.62 4096.23 4036.62 c
4090.84 4036.62 4086.46 4041.0 4086.46 4046.39 c
4086.46 4051.79 4090.84 4056.17 4096.23 4056.17 c
4101.63 4056.17 4106.01 4051.79 4106.01 4046.39 c
f
n
4157.33 4078.16 m
4157.33 4072.77 4152.95 4068.39 4147.55 4068.39 c
4142.16 4068.39 4137.78 4072.77 4137.78 4078.16 c
4137.78 4083.56 4142.16 4087.94 4147.55 4087.94 c
4152.95 4087.94 4157.33 4083.56 4157.33 4078.16 c
f
n
4209.46 4110.75 m
4209.46 4105.35 4205.09 4100.97 4199.69 4100.97 c
4194.29 4100.97 4189.91 4105.35 4189.91 4110.75 c
4189.91 4116.14 4194.29 4120.52 4199.69 4120.52 c
4205.09 4120.52 4209.46 4116.14 4209.46 4110.75 c
f
n
4260.78 4143.33 m
4260.78 4137.93 4256.41 4133.55 4251.01 4133.55 c
4245.61 4133.55 4241.23 4137.93 4241.23 4143.33 c
4241.23 4148.73 4245.61 4153.11 4251.01 4153.11 c
4256.41 4153.11 4260.78 4148.73 4260.78 4143.33 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4207.68 m
4364.23 4202.29 4359.86 4197.91 4354.46 4197.91 c
4349.06 4197.91 4344.69 4202.29 4344.69 4207.68 c
4344.69 4213.08 4349.06 4217.46 4354.46 4217.46 c
4359.86 4217.46 4364.23 4213.08 4364.23 4207.68 c
f
n
4416.37 4240.27 m
4416.37 4234.87 4411.99 4230.49 4406.59 4230.49 c
4401.2 4230.49 4396.82 4234.87 4396.82 4240.27 c
4396.82 4245.66 4401.2 4250.04 4406.59 4250.04 c
4411.99 4250.04 4416.37 4245.66 4416.37 4240.27 c
f
n
4467.69 4272.85 m
4467.69 4267.45 4463.31 4263.07 4457.91 4263.07 c
4452.52 4263.07 4448.14 4267.45 4448.14 4272.85 c
4448.14 4278.25 4452.52 4282.62 4457.91 4282.62 c
4463.31 4282.62 4467.69 4278.25 4467.69 4272.85 c
f
n
4519.82 4304.62 m
4519.82 4299.22 4515.45 4294.84 4510.05 4294.84 c
4504.65 4294.84 4500.27 4299.22 4500.27 4304.62 c
4500.27 4310.02 4504.65 4314.39 4510.05 4314.39 c
4515.45 4314.39 4519.82 4310.02 4519.82 4304.62 c
f
n
4571.14 4337.2 m
4571.14 4331.8 4566.77 4327.43 4561.37 4327.43 c
4555.97 4327.43 4551.59 4331.8 4551.59 4337.2 c
4551.59 4342.6 4555.97 4346.98 4561.37 4346.98 c
4566.77 4346.98 4571.14 4342.6 4571.14 4337.2 c
f
n
4623.28 4369.79 m
4623.28 4364.39 4618.9 4360.01 4613.5 4360.01 c
4608.1 4360.01 4603.73 4364.39 4603.73 4369.79 c
4603.73 4375.19 4608.1 4379.56 4613.5 4379.56 c
4618.9 4379.56 4623.28 4375.19 4623.28 4369.79 c
f
n
4674.59 4401.55 m
4674.59 4396.16 4670.22 4391.78 4664.82 4391.78 c
4659.42 4391.78 4655.05 4396.16 4655.05 4401.55 c
4655.05 4406.95 4659.42 4411.33 4664.82 4411.33 c
4670.22 4411.33 4674.59 4406.95 4674.59 4401.55 c
f
n
3898.29 3864.74 m
3898.29 3859.34 3893.91 3854.96 3888.52 3854.96 c
3883.12 3854.96 3878.74 3859.34 3878.74 3864.74 c
3878.74 3870.14 3883.12 3874.52 3888.52 3874.52 c
3893.91 3874.52 3898.29 3870.14 3898.29 3864.74 c
f
n
3950.42 3903.84 m
3950.42 3898.44 3946.05 3894.07 3940.65 3894.07 c
3935.25 3894.07 3930.88 3898.44 3930.88 3903.84 c
3930.88 3909.24 3935.25 3913.62 3940.65 3913.62 c
3946.05 3913.62 3950.42 3909.24 3950.42 3903.84 c
f
n
4001.74 3942.94 m
4001.74 3937.54 3997.37 3933.17 3991.97 3933.17 c
3986.57 3933.17 3982.19 3937.54 3982.19 3942.94 c
3982.19 3948.34 3986.57 3952.71 3991.97 3952.71 c
3997.37 3952.71 4001.74 3948.34 4001.74 3942.94 c
f
n
4053.88 3981.23 m
4053.88 3975.83 4049.5 3971.45 4044.1 3971.45 c
4038.7 3971.45 4034.33 3975.83 4034.33 3981.23 c
4034.33 3986.62 4038.7 3991.0 4044.1 3991.0 c
4049.5 3991.0 4053.88 3986.62 4053.88 3981.23 c
f
n
4106.01 4020.33 m
4106.01 4014.93 4101.63 4010.55 4096.23 4010.55 c
4090.84 4010.55 4086.46 4014.93 4086.46 4020.33 c
4086.46 4025.73 4090.84 4030.1 4096.23 4030.1 c
4101.63 4030.1 4106.01 4025.73 4106.01 4020.33 c
f
n
4157.33 4059.43 m
4157.33 4054.03 4152.95 4049.65 4147.55 4049.65 c
4142.16 4049.65 4137.78 4054.03 4137.78 4059.43 c
4137.78 4064.83 4142.16 4069.2 4147.55 4069.2 c
4152.95 4069.2 4157.33 4064.83 4157.33 4059.43 c
f
n
4209.46 4097.71 m
4209.46 4092.32 4205.09 4087.94 4199.69 4087.94 c
4194.29 4087.94 4189.91 4092.32 4189.91 4097.71 c
4189.91 4103.11 4194.29 4107.49 4199.69 4107.49 c
4205.09 4107.49 4209.46 4103.11 4209.46 4097.71 c
f
n
4260.78 4136.81 m
4260.78 4131.41 4256.41 4127.04 4251.01 4127.04 c
4245.61 4127.04 4241.23 4131.41 4241.23 4136.81 c
4241.23 4142.21 4245.61 4146.59 4251.01 4146.59 c
4256.41 4146.59 4260.78 4142.21 4260.78 4136.81 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4214.2 m
4364.23 4208.8 4359.86 4204.43 4354.46 4204.43 c
4349.06 4204.43 4344.69 4208.8 4344.69 4214.2 c
4344.69 4219.6 4349.06 4223.98 4354.46 4223.98 c
4359.86 4223.98 4364.23 4219.6 4364.23 4214.2 c
f
n
4416.37 4253.3 m
4416.37 4247.9 4411.99 4243.53 4406.59 4243.53 c
4401.2 4243.53 4396.82 4247.9 4396.82 4253.3 c
4396.82 4258.7 4401.2 4263.07 4406.59 4263.07 c
4411.99 4263.07 4416.37 4258.7 4416.37 4253.3 c
f
n
4467.69 4291.59 m
4467.69 4286.19 4463.31 4281.81 4457.91 4281.81 c
4452.52 4281.81 4448.14 4286.19 4448.14 4291.59 c
4448.14 4296.98 4452.52 4301.36 4457.91 4301.36 c
4463.31 4301.36 4467.69 4296.98 4467.69 4291.59 c
f
n
4519.82 4330.69 m
4519.82 4325.29 4515.45 4320.91 4510.05 4320.91 c
4504.65 4320.91 4500.27 4325.29 4500.27 4330.69 c
4500.27 4336.09 4504.65 4340.46 4510.05 4340.46 c
4515.45 4340.46 4519.82 4336.09 4519.82 4330.69 c
f
n
4571.14 4369.79 m
4571.14 4364.39 4566.77 4360.01 4561.37 4360.01 c
4555.97 4360.01 4551.59 4364.39 4551.59 4369.79 c
4551.59 4375.19 4555.97 4379.56 4561.37 4379.56 c
4566.77 4379.56 4571.14 4375.19 4571.14 4369.79 c
f
n
4623.28 4408.07 m
4623.28 4402.68 4618.9 4398.3 4613.5 4398.3 c
4608.1 4398.3 4603.73 4402.68 4603.73 4408.07 c
4603.73 4413.47 4608.1 4417.85 4613.5 4417.85 c
4618.9 4417.85 4623.28 4413.47 4623.28 4408.07 c
f
n
4674.59 4447.17 m
4674.59 4441.77 4670.22 4437.4 4664.82 4437.4 c
4659.42 4437.4 4655.05 4441.77 4655.05 4447.17 c
4655.05 4452.57 4659.42 4456.95 4664.82 4456.95 c
4670.22 4456.95 4674.59 4452.57 4674.59 4447.17 c
f
n
3898.29 3813.42 m
3898.29 3808.02 3893.91 3803.64 3888.52 3803.64 c
3883.12 3803.64 3878.74 3808.02 3878.74 3813.42 c
3878.74 3818.82 3883.12 3823.2 3888.52 3823.2 c
3893.91 3823.2 3898.29 3818.82 3898.29 3813.42 c
f
n
3950.42 3859.04 m
3950.42 3853.64 3946.05 3849.26 3940.65 3849.26 c
3935.25 3849.26 3930.88 3853.64 3930.88 3859.04 c
3930.88 3864.44 3935.25 3868.81 3940.65 3868.81 c
3946.05 3868.81 3950.42 3864.44 3950.42 3859.04 c
f
n
4001.74 3903.84 m
4001.74 3898.44 3997.37 3894.07 3991.97 3894.07 c
3986.57 3894.07 3982.19 3898.44 3982.19 3903.84 c
3982.19 3909.24 3986.57 3913.62 3991.97 3913.62 c
3997.37 3913.62 4001.74 3909.24 4001.74 3903.84 c
f
n
4053.88 3949.46 m
4053.88 3944.06 4049.5 3939.68 4044.1 3939.68 c
4038.7 3939.68 4034.33 3944.06 4034.33 3949.46 c
4034.33 3954.86 4038.7 3959.23 4044.1 3959.23 c
4049.5 3959.23 4053.88 3954.86 4053.88 3949.46 c
f
n
4106.01 3994.26 m
4106.01 3988.86 4101.63 3984.48 4096.23 3984.48 c
4090.84 3984.48 4086.46 3988.86 4086.46 3994.26 c
4086.46 3999.66 4090.84 4004.04 4096.23 4004.04 c
4101.63 4004.04 4106.01 3999.66 4106.01 3994.26 c
f
n
4157.33 4039.88 m
4157.33 4034.48 4152.95 4030.1 4147.55 4030.1 c
4142.16 4030.1 4137.78 4034.48 4137.78 4039.88 c
4137.78 4045.28 4142.16 4049.65 4147.55 4049.65 c
4152.95 4049.65 4157.33 4045.28 4157.33 4039.88 c
f
n
4209.46 4084.68 m
4209.46 4079.28 4205.09 4074.91 4199.69 4074.91 c
4194.29 4074.91 4189.91 4079.28 4189.91 4084.68 c
4189.91 4090.08 4194.29 4094.46 4199.69 4094.46 c
4205.09 4094.46 4209.46 4090.08 4209.46 4084.68 c
f
n
4260.78 4130.3 m
4260.78 4124.9 4256.41 4120.52 4251.01 4120.52 c
4245.61 4120.52 4241.23 4124.9 4241.23 4130.3 c
4241.23 4135.7 4245.61 4140.07 4251.01 4140.07 c
4256.41 4140.07 4260.78 4135.7 4260.78 4130.3 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4220.72 m
4364.23 4215.32 4359.86 4210.94 4354.46 4210.94 c
4349.06 4210.94 4344.69 4215.32 4344.69 4220.72 c
4344.69 4226.12 4349.06 4230.49 4354.46 4230.49 c
4359.86 4230.49 4364.23 4226.12 4364.23 4220.72 c
f
n
4416.37 4266.34 m
4416.37 4260.94 4411.99 4256.56 4406.59 4256.56 c
4401.2 4256.56 4396.82 4260.94 4396.82 4266.34 c
4396.82 4271.73 4401.2 4276.11 4406.59 4276.11 c
4411.99 4276.11 4416.37 4271.73 4416.37 4266.34 c
f
n
4467.69 4311.14 m
4467.69 4305.74 4463.31 4301.36 4457.91 4301.36 c
4452.52 4301.36 4448.14 4305.74 4448.14 4311.14 c
4448.14 4316.54 4452.52 4320.91 4457.91 4320.91 c
4463.31 4320.91 4467.69 4316.54 4467.69 4311.14 c
f
n
4519.82 4356.75 m
4519.82 4351.36 4515.45 4346.98 4510.05 4346.98 c
4504.65 4346.98 4500.27 4351.36 4500.27 4356.75 c
4500.27 4362.15 4504.65 4366.53 4510.05 4366.53 c
4515.45 4366.53 4519.82 4362.15 4519.82 4356.75 c
f
n
4571.14 4401.55 m
4571.14 4396.16 4566.77 4391.78 4561.37 4391.78 c
4555.97 4391.78 4551.59 4396.16 4551.59 4401.55 c
4551.59 4406.95 4555.97 4411.33 4561.37 4411.33 c
4566.77 4411.33 4571.14 4406.95 4571.14 4401.55 c
f
n
4623.28 4447.17 m
4623.28 4441.77 4618.9 4437.4 4613.5 4437.4 c
4608.1 4437.4 4603.73 4441.77 4603.73 4447.17 c
4603.73 4452.57 4608.1 4456.95 4613.5 4456.95 c
4618.9 4456.95 4623.28 4452.57 4623.28 4447.17 c
f
n
4674.59 4491.98 m
4674.59 4486.58 4670.22 4482.2 4664.82 4482.2 c
4659.42 4482.2 4655.05 4486.58 4655.05 4491.98 c
4655.05 4497.38 4659.42 4501.75 4664.82 4501.75 c
4670.22 4501.75 4674.59 4497.38 4674.59 4491.98 c
f
n
3898.29 3761.29 m
3898.29 3755.89 3893.91 3751.51 3888.52 3751.51 c
3883.12 3751.51 3878.74 3755.89 3878.74 3761.29 c
3878.74 3766.69 3883.12 3771.06 3888.52 3771.06 c
3893.91 3771.06 3898.29 3766.69 3898.29 3761.29 c
f
n
3950.42 3813.42 m
3950.42 3808.02 3946.05 3803.64 3940.65 3803.64 c
3935.25 3803.64 3930.88 3808.02 3930.88 3813.42 c
3930.88 3818.82 3935.25 3823.2 3940.65 3823.2 c
3946.05 3823.2 3950.42 3818.82 3950.42 3813.42 c
f
n
4001.74 3864.74 m
4001.74 3859.34 3997.37 3854.96 3991.97 3854.96 c
3986.57 3854.96 3982.19 3859.34 3982.19 3864.74 c
3982.19 3870.14 3986.57 3874.52 3991.97 3874.52 c
3997.37 3874.52 4001.74 3870.14 4001.74 3864.74 c
f
n
4053.88 3916.88 m
4053.88 3911.48 4049.5 3907.1 4044.1 3907.1 c
4038.7 3907.1 4034.33 3911.48 4034.33 3916.88 c
4034.33 3922.27 4038.7 3926.65 4044.1 3926.65 c
4049.5 3926.65 4053.88 3922.27 4053.88 3916.88 c
f
n
4106.01 3968.2 m
4106.01 3962.8 4101.63 3958.42 4096.23 3958.42 c
4090.84 3958.42 4086.46 3962.8 4086.46 3968.2 c
4086.46 3973.59 4090.84 3977.97 4096.23 3977.97 c
4101.63 3977.97 4106.01 3973.59 4106.01 3968.2 c
f
n
4157.33 4020.33 m
4157.33 4014.93 4152.95 4010.55 4147.55 4010.55 c
4142.16 4010.55 4137.78 4014.93 4137.78 4020.33 c
4137.78 4025.73 4142.16 4030.1 4147.55 4030.1 c
4152.95 4030.1 4157.33 4025.73 4157.33 4020.33 c
f
n
4209.46 4072.46 m
4209.46 4067.06 4205.09 4062.69 4199.69 4062.69 c
4194.29 4062.69 4189.91 4067.06 4189.91 4072.46 c
4189.91 4077.86 4194.29 4082.24 4199.69 4082.24 c
4205.09 4082.24 4209.46 4077.86 4209.46 4072.46 c
f
n
4260.78 4123.78 m
4260.78 4118.38 4256.41 4114.0 4251.01 4114.0 c
4245.61 4114.0 4241.23 4118.38 4241.23 4123.78 c
4241.23 4129.18 4245.61 4133.55 4251.01 4133.55 c
4256.41 4133.55 4260.78 4129.18 4260.78 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4364.23 4227.23 m
4364.23 4221.84 4359.86 4217.46 4354.46 4217.46 c
4349.06 4217.46 4344.69 4221.84 4344.69 4227.23 c
4344.69 4232.63 4349.06 4237.01 4354.46 4237.01 c
4359.86 4237.01 4364.23 4232.63 4364.23 4227.23 c
f
n
4416.37 4279.37 m
4416.37 4273.97 4411.99 4269.59 4406.59 4269.59 c
4401.2 4269.59 4396.82 4273.97 4396.82 4279.37 c
4396.82 4284.77 4401.2 4289.14 4406.59 4289.14 c
4411.99 4289.14 4416.37 4284.77 4416.37 4279.37 c
f
n
4467.69 4330.69 m
4467.69 4325.29 4463.31 4320.91 4457.91 4320.91 c
4452.52 4320.91 4448.14 4325.29 4448.14 4330.69 c
4448.14 4336.09 4452.52 4340.46 4457.91 4340.46 c
4463.31 4340.46 4467.69 4336.09 4467.69 4330.69 c
f
n
4519.82 4382.82 m
4519.82 4377.42 4515.45 4373.05 4510.05 4373.05 c
4504.65 4373.05 4500.27 4377.42 4500.27 4382.82 c
4500.27 4388.22 4504.65 4392.6 4510.05 4392.6 c
4515.45 4392.6 4519.82 4388.22 4519.82 4382.82 c
f
n
4571.14 4434.14 m
4571.14 4428.74 4566.77 4424.36 4561.37 4424.36 c
4555.97 4424.36 4551.59 4428.74 4551.59 4434.14 c
4551.59 4439.54 4555.97 4443.91 4561.37 4443.91 c
4566.77 4443.91 4571.14 4439.54 4571.14 4434.14 c
f
n
4623.28 4486.27 m
4623.28 4480.88 4618.9 4476.5 4613.5 4476.5 c
4608.1 4476.5 4603.73 4480.88 4603.73 4486.27 c
4603.73 4491.67 4608.1 4496.05 4613.5 4496.05 c
4618.9 4496.05 4623.28 4491.67 4623.28 4486.27 c
f
n
4674.59 4537.59 m
4674.59 4532.2 4670.22 4527.82 4664.82 4527.82 c
4659.42 4527.82 4655.05 4532.2 4655.05 4537.59 c
4655.05 4542.99 4659.42 4547.37 4664.82 4547.37 c
4670.22 4547.37 4674.59 4542.99 4674.59 4537.59 c
f
n
3950.42 3761.29 m
3950.42 3755.89 3946.05 3751.51 3940.65 3751.51 c
3935.25 3751.51 3930.88 3755.89 3930.88 3761.29 c
3930.88 3766.69 3935.25 3771.06 3940.65 3771.06 c
3946.05 3771.06 3950.42 3766.69 3950.42 3761.29 c
f
n
3996.04 3813.42 m
3996.04 3808.02 3991.66 3803.64 3986.27 3803.64 c
3980.87 3803.64 3976.49 3808.02 3976.49 3813.42 c
3976.49 3818.82 3980.87 3823.2 3986.27 3823.2 c
3991.66 3823.2 3996.04 3818.82 3996.04 3813.42 c
f
n
4040.84 3864.74 m
4040.84 3859.34 4036.46 3854.96 4031.07 3854.96 c
4025.67 3854.96 4021.29 3859.34 4021.29 3864.74 c
4021.29 3870.14 4025.67 3874.52 4031.07 3874.52 c
4036.46 3874.52 4040.84 3870.14 4040.84 3864.74 c
f
n
4086.46 3916.88 m
4086.46 3911.48 4082.08 3907.1 4076.68 3907.1 c
4071.29 3907.1 4066.91 3911.48 4066.91 3916.88 c
4066.91 3922.27 4071.29 3926.65 4076.68 3926.65 c
4082.08 3926.65 4086.46 3922.27 4086.46 3916.88 c
f
n
4131.26 3968.2 m
4131.26 3962.8 4126.89 3958.42 4121.49 3958.42 c
4116.09 3958.42 4111.71 3962.8 4111.71 3968.2 c
4111.71 3973.59 4116.09 3977.97 4121.49 3977.97 c
4126.89 3977.97 4131.26 3973.59 4131.26 3968.2 c
f
n
4176.88 4020.33 m
4176.88 4014.93 4172.5 4010.55 4167.11 4010.55 c
4161.71 4010.55 4157.33 4014.93 4157.33 4020.33 c
4157.33 4025.73 4161.71 4030.1 4167.11 4030.1 c
4172.5 4030.1 4176.88 4025.73 4176.88 4020.33 c
f
n
4221.68 4072.46 m
4221.68 4067.06 4217.3 4062.69 4211.91 4062.69 c
4206.51 4062.69 4202.13 4067.06 4202.13 4072.46 c
4202.13 4077.86 4206.51 4082.24 4211.91 4082.24 c
4217.3 4082.24 4221.68 4077.86 4221.68 4072.46 c
f
n
4267.3 4123.78 m
4267.3 4118.38 4262.92 4114.0 4257.52 4114.0 c
4252.12 4114.0 4247.75 4118.38 4247.75 4123.78 c
4247.75 4129.18 4252.12 4133.55 4257.52 4133.55 c
4262.92 4133.55 4267.3 4129.18 4267.3 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4357.72 4227.23 m
4357.72 4221.84 4353.34 4217.46 4347.95 4217.46 c
4342.55 4217.46 4338.17 4221.84 4338.17 4227.23 c
4338.17 4232.63 4342.55 4237.01 4347.95 4237.01 c
4353.34 4237.01 4357.72 4232.63 4357.72 4227.23 c
f
n
4403.34 4279.37 m
4403.34 4273.97 4398.96 4269.59 4393.56 4269.59 c
4388.16 4269.59 4383.79 4273.97 4383.79 4279.37 c
4383.79 4284.77 4388.16 4289.14 4393.56 4289.14 c
4398.96 4289.14 4403.34 4284.77 4403.34 4279.37 c
f
n
4448.14 4330.69 m
4448.14 4325.29 4443.76 4320.91 4438.36 4320.91 c
4432.96 4320.91 4428.59 4325.29 4428.59 4330.69 c
4428.59 4336.09 4432.96 4340.46 4438.36 4340.46 c
4443.76 4340.46 4448.14 4336.09 4448.14 4330.69 c
f
n
4493.76 4382.82 m
4493.76 4377.42 4489.38 4373.05 4483.98 4373.05 c
4478.58 4373.05 4474.21 4377.42 4474.21 4382.82 c
4474.21 4388.22 4478.58 4392.6 4483.98 4392.6 c
4489.38 4392.6 4493.76 4388.22 4493.76 4382.82 c
f
n
4538.56 4434.14 m
4538.56 4428.74 4534.18 4424.36 4528.79 4424.36 c
4523.39 4424.36 4519.01 4428.74 4519.01 4434.14 c
4519.01 4439.54 4523.39 4443.91 4528.79 4443.91 c
4534.18 4443.91 4538.56 4439.54 4538.56 4434.14 c
f
n
4584.18 4486.27 m
4584.18 4480.88 4579.8 4476.5 4574.4 4476.5 c
4569.0 4476.5 4564.62 4480.88 4564.62 4486.27 c
4564.62 4491.67 4569.0 4496.05 4574.4 4496.05 c
4579.8 4496.05 4584.18 4491.67 4584.18 4486.27 c
f
n
4628.98 4537.59 m
4628.98 4532.2 4624.6 4527.82 4619.2 4527.82 c
4613.8 4527.82 4609.43 4532.2 4609.43 4537.59 c
4609.43 4542.99 4613.8 4547.37 4619.2 4547.37 c
4624.6 4547.37 4628.98 4542.99 4628.98 4537.59 c
f
n
4001.74 3761.29 m
4001.74 3755.89 3997.37 3751.51 3991.97 3751.51 c
3986.57 3751.51 3982.19 3755.89 3982.19 3761.29 c
3982.19 3766.69 3986.57 3771.06 3991.97 3771.06 c
3997.37 3771.06 4001.74 3766.69 4001.74 3761.29 c
f
n
4040.84 3813.42 m
4040.84 3808.02 4036.46 3803.64 4031.07 3803.64 c
4025.67 3803.64 4021.29 3808.02 4021.29 3813.42 c
4021.29 3818.82 4025.67 3823.2 4031.07 3823.2 c
4036.46 3823.2 4040.84 3818.82 4040.84 3813.42 c
f
n
4079.95 3864.74 m
4079.95 3859.34 4075.57 3854.96 4070.17 3854.96 c
4064.77 3854.96 4060.39 3859.34 4060.39 3864.74 c
4060.39 3870.14 4064.77 3874.52 4070.17 3874.52 c
4075.57 3874.52 4079.95 3870.14 4079.95 3864.74 c
f
n
4118.23 3916.88 m
4118.23 3911.48 4113.85 3907.1 4108.45 3907.1 c
4103.05 3907.1 4098.68 3911.48 4098.68 3916.88 c
4098.68 3922.27 4103.05 3926.65 4108.45 3926.65 c
4113.85 3926.65 4118.23 3922.27 4118.23 3916.88 c
f
n
4157.33 3968.2 m
4157.33 3962.8 4152.95 3958.42 4147.55 3958.42 c
4142.16 3958.42 4137.78 3962.8 4137.78 3968.2 c
4137.78 3973.59 4142.16 3977.97 4147.55 3977.97 c
4152.95 3977.97 4157.33 3973.59 4157.33 3968.2 c
f
n
4196.43 4020.33 m
4196.43 4014.93 4192.05 4010.55 4186.66 4010.55 c
4181.26 4010.55 4176.88 4014.93 4176.88 4020.33 c
4176.88 4025.73 4181.26 4030.1 4186.66 4030.1 c
4192.05 4030.1 4196.43 4025.73 4196.43 4020.33 c
f
n
4234.71 4072.46 m
4234.71 4067.06 4230.34 4062.69 4224.94 4062.69 c
4219.54 4062.69 4215.16 4067.06 4215.16 4072.46 c
4215.16 4077.86 4219.54 4082.24 4224.94 4082.24 c
4230.34 4082.24 4234.71 4077.86 4234.71 4072.46 c
f
n
4273.82 4123.78 m
4273.82 4118.38 4269.44 4114.0 4264.04 4114.0 c
4258.64 4114.0 4254.27 4118.38 4254.27 4123.78 c
4254.27 4129.18 4258.64 4133.55 4264.04 4133.55 c
4269.44 4133.55 4273.82 4129.18 4273.82 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4351.2 4227.23 m
4351.2 4221.84 4346.82 4217.46 4341.43 4217.46 c
4336.03 4217.46 4331.65 4221.84 4331.65 4227.23 c
4331.65 4232.63 4336.03 4237.01 4341.43 4237.01 c
4346.82 4237.01 4351.2 4232.63 4351.2 4227.23 c
f
n
4390.3 4279.37 m
4390.3 4273.97 4385.93 4269.59 4380.53 4269.59 c
4375.13 4269.59 4370.75 4273.97 4370.75 4279.37 c
4370.75 4284.77 4375.13 4289.14 4380.53 4289.14 c
4385.93 4289.14 4390.3 4284.77 4390.3 4279.37 c
f
n
4428.59 4330.69 m
4428.59 4325.29 4424.21 4320.91 4418.81 4320.91 c
4413.41 4320.91 4409.04 4325.29 4409.04 4330.69 c
4409.04 4336.09 4413.41 4340.46 4418.81 4340.46 c
4424.21 4340.46 4428.59 4336.09 4428.59 4330.69 c
f
n
4467.69 4382.82 m
4467.69 4377.42 4463.31 4373.05 4457.91 4373.05 c
4452.52 4373.05 4448.14 4377.42 4448.14 4382.82 c
4448.14 4388.22 4452.52 4392.6 4457.91 4392.6 c
4463.31 4392.6 4467.69 4388.22 4467.69 4382.82 c
f
n
4506.79 4434.14 m
4506.79 4428.74 4502.41 4424.36 4497.02 4424.36 c
4491.62 4424.36 4487.24 4428.74 4487.24 4434.14 c
4487.24 4439.54 4491.62 4443.91 4497.02 4443.91 c
4502.41 4443.91 4506.79 4439.54 4506.79 4434.14 c
f
n
4545.07 4486.27 m
4545.07 4480.88 4540.7 4476.5 4535.3 4476.5 c
4529.9 4476.5 4525.52 4480.88 4525.52 4486.27 c
4525.52 4491.67 4529.9 4496.05 4535.3 4496.05 c
4540.7 4496.05 4545.07 4491.67 4545.07 4486.27 c
f
n
4584.18 4537.59 m
4584.18 4532.2 4579.8 4527.82 4574.4 4527.82 c
4569.0 4527.82 4564.62 4532.2 4564.62 4537.59 c
4564.62 4542.99 4569.0 4547.37 4574.4 4547.37 c
4579.8 4547.37 4584.18 4542.99 4584.18 4537.59 c
f
n
4053.88 3761.29 m
4053.88 3755.89 4049.5 3751.51 4044.1 3751.51 c
4038.7 3751.51 4034.33 3755.89 4034.33 3761.29 c
4034.33 3766.69 4038.7 3771.06 4044.1 3771.06 c
4049.5 3771.06 4053.88 3766.69 4053.88 3761.29 c
f
n
4086.46 3813.42 m
4086.46 3808.02 4082.08 3803.64 4076.68 3803.64 c
4071.29 3803.64 4066.91 3808.02 4066.91 3813.42 c
4066.91 3818.82 4071.29 3823.2 4076.68 3823.2 c
4082.08 3823.2 4086.46 3818.82 4086.46 3813.42 c
f
n
4118.23 3864.74 m
4118.23 3859.34 4113.85 3854.96 4108.45 3854.96 c
4103.05 3854.96 4098.68 3859.34 4098.68 3864.74 c
4098.68 3870.14 4103.05 3874.52 4108.45 3874.52 c
4113.85 3874.52 4118.23 3870.14 4118.23 3864.74 c
f
n
4150.81 3916.88 m
4150.81 3911.48 4146.44 3907.1 4141.04 3907.1 c
4135.64 3907.1 4131.26 3911.48 4131.26 3916.88 c
4131.26 3922.27 4135.64 3926.65 4141.04 3926.65 c
4146.44 3926.65 4150.81 3922.27 4150.81 3916.88 c
f
n
4183.4 3968.2 m
4183.4 3962.8 4179.02 3958.42 4173.62 3958.42 c
4168.22 3958.42 4163.85 3962.8 4163.85 3968.2 c
4163.85 3973.59 4168.22 3977.97 4173.62 3977.97 c
4179.02 3977.97 4183.4 3973.59 4183.4 3968.2 c
f
n
4215.16 4020.33 m
4215.16 4014.93 4210.79 4010.55 4205.39 4010.55 c
4199.99 4010.55 4195.62 4014.93 4195.62 4020.33 c
4195.62 4025.73 4199.99 4030.1 4205.39 4030.1 c
4210.79 4030.1 4215.16 4025.73 4215.16 4020.33 c
f
n
4247.75 4072.46 m
4247.75 4067.06 4243.37 4062.69 4237.97 4062.69 c
4232.57 4062.69 4228.2 4067.06 4228.2 4072.46 c
4228.2 4077.86 4232.57 4082.24 4237.97 4082.24 c
4243.37 4082.24 4247.75 4077.86 4247.75 4072.46 c
f
n
4280.33 4123.78 m
4280.33 4118.38 4275.96 4114.0 4270.56 4114.0 c
4265.16 4114.0 4260.78 4118.38 4260.78 4123.78 c
4260.78 4129.18 4265.16 4133.55 4270.56 4133.55 c
4275.96 4133.55 4280.33 4129.18 4280.33 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4344.69 4227.23 m
4344.69 4221.84 4340.31 4217.46 4334.91 4217.46 c
4329.51 4217.46 4325.14 4221.84 4325.14 4227.23 c
4325.14 4232.63 4329.51 4237.01 4334.91 4237.01 c
4340.31 4237.01 4344.69 4232.63 4344.69 4227.23 c
f
n
4377.27 4279.37 m
4377.27 4273.97 4372.89 4269.59 4367.5 4269.59 c
4362.1 4269.59 4357.72 4273.97 4357.72 4279.37 c
4357.72 4284.77 4362.1 4289.14 4367.5 4289.14 c
4372.89 4289.14 4377.27 4284.77 4377.27 4279.37 c
f
n
4409.85 4330.69 m
4409.85 4325.29 4405.48 4320.91 4400.08 4320.91 c
4394.68 4320.91 4390.3 4325.29 4390.3 4330.69 c
4390.3 4336.09 4394.68 4340.46 4400.08 4340.46 c
4405.48 4340.46 4409.85 4336.09 4409.85 4330.69 c
f
n
4441.62 4382.82 m
4441.62 4377.42 4437.25 4373.05 4431.85 4373.05 c
4426.45 4373.05 4422.07 4377.42 4422.07 4382.82 c
4422.07 4388.22 4426.45 4392.6 4431.85 4392.6 c
4437.25 4392.6 4441.62 4388.22 4441.62 4382.82 c
f
n
4474.21 4434.14 m
4474.21 4428.74 4469.83 4424.36 4464.43 4424.36 c
4459.03 4424.36 4454.66 4428.74 4454.66 4434.14 c
4454.66 4439.54 4459.03 4443.91 4464.43 4443.91 c
4469.83 4443.91 4474.21 4439.54 4474.21 4434.14 c
f
n
4506.79 4486.27 m
4506.79 4480.88 4502.41 4476.5 4497.02 4476.5 c
4491.62 4476.5 4487.24 4480.88 4487.24 4486.27 c
4487.24 4491.67 4491.62 4496.05 4497.02 4496.05 c
4502.41 4496.05 4506.79 4491.67 4506.79 4486.27 c
f
n
4538.56 4537.59 m
4538.56 4532.2 4534.18 4527.82 4528.79 4527.82 c
4523.39 4527.82 4519.01 4532.2 4519.01 4537.59 c
4519.01 4542.99 4523.39 4547.37 4528.79 4547.37 c
4534.18 4547.37 4538.56 4542.99 4538.56 4537.59 c
f
n
4106.01 3761.29 m
4106.01 3755.89 4101.63 3751.51 4096.23 3751.51 c
4090.84 3751.51 4086.46 3755.89 4086.46 3761.29 c
4086.46 3766.69 4090.84 3771.06 4096.23 3771.06 c
4101.63 3771.06 4106.01 3766.69 4106.01 3761.29 c
f
n
4131.26 3813.42 m
4131.26 3808.02 4126.89 3803.64 4121.49 3803.64 c
4116.09 3803.64 4111.71 3808.02 4111.71 3813.42 c
4111.71 3818.82 4116.09 3823.2 4121.49 3823.2 c
4126.89 3823.2 4131.26 3818.82 4131.26 3813.42 c
f
n
4157.33 3864.74 m
4157.33 3859.34 4152.95 3854.96 4147.55 3854.96 c
4142.16 3854.96 4137.78 3859.34 4137.78 3864.74 c
4137.78 3870.14 4142.16 3874.52 4147.55 3874.52 c
4152.95 3874.52 4157.33 3870.14 4157.33 3864.74 c
f
n
4183.4 3916.88 m
4183.4 3911.48 4179.02 3907.1 4173.62 3907.1 c
4168.22 3907.1 4163.85 3911.48 4163.85 3916.88 c
4163.85 3922.27 4168.22 3926.65 4173.62 3926.65 c
4179.02 3926.65 4183.4 3922.27 4183.4 3916.88 c
f
n
4209.46 3968.2 m
4209.46 3962.8 4205.09 3958.42 4199.69 3958.42 c
4194.29 3958.42 4189.91 3962.8 4189.91 3968.2 c
4189.91 3973.59 4194.29 3977.97 4199.69 3977.97 c
4205.09 3977.97 4209.46 3973.59 4209.46 3968.2 c
f
n
4234.71 4020.33 m
4234.71 4014.93 4230.34 4010.55 4224.94 4010.55 c
4219.54 4010.55 4215.16 4014.93 4215.16 4020.33 c
4215.16 4025.73 4219.54 4030.1 4224.94 4030.1 c
4230.34 4030.1 4234.71 4025.73 4234.71 4020.33 c
f
n
4260.78 4072.46 m
4260.78 4067.06 4256.41 4062.69 4251.01 4062.69 c
4245.61 4062.69 4241.23 4067.06 4241.23 4072.46 c
4241.23 4077.86 4245.61 4082.24 4251.01 4082.24 c
4256.41 4082.24 4260.78 4077.86 4260.78 4072.46 c
f
n
4286.85 4123.78 m
4286.85 4118.38 4282.47 4114.0 4277.07 4114.0 c
4271.68 4114.0 4267.3 4118.38 4267.3 4123.78 c
4267.3 4129.18 4271.68 4133.55 4277.07 4133.55 c
4282.47 4133.55 4286.85 4129.18 4286.85 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4338.17 4227.23 m
4338.17 4221.84 4333.79 4217.46 4328.39 4217.46 c
4323.0 4217.46 4318.62 4221.84 4318.62 4227.23 c
4318.62 4232.63 4323.0 4237.01 4328.39 4237.01 c
4333.79 4237.01 4338.17 4232.63 4338.17 4227.23 c
f
n
4364.23 4279.37 m
4364.23 4273.97 4359.86 4269.59 4354.46 4269.59 c
4349.06 4269.59 4344.69 4273.97 4344.69 4279.37 c
4344.69 4284.77 4349.06 4289.14 4354.46 4289.14 c
4359.86 4289.14 4364.23 4284.77 4364.23 4279.37 c
f
n
4390.3 4330.69 m
4390.3 4325.29 4385.93 4320.91 4380.53 4320.91 c
4375.13 4320.91 4370.75 4325.29 4370.75 4330.69 c
4370.75 4336.09 4375.13 4340.46 4380.53 4340.46 c
4385.93 4340.46 4390.3 4336.09 4390.3 4330.69 c
f
n
4416.37 4382.82 m
4416.37 4377.42 4411.99 4373.05 4406.59 4373.05 c
4401.2 4373.05 4396.82 4377.42 4396.82 4382.82 c
4396.82 4388.22 4401.2 4392.6 4406.59 4392.6 c
4411.99 4392.6 4416.37 4388.22 4416.37 4382.82 c
f
n
4441.62 4434.14 m
4441.62 4428.74 4437.25 4424.36 4431.85 4424.36 c
4426.45 4424.36 4422.07 4428.74 4422.07 4434.14 c
4422.07 4439.54 4426.45 4443.91 4431.85 4443.91 c
4437.25 4443.91 4441.62 4439.54 4441.62 4434.14 c
f
n
4467.69 4486.27 m
4467.69 4480.88 4463.31 4476.5 4457.91 4476.5 c
4452.52 4476.5 4448.14 4480.88 4448.14 4486.27 c
4448.14 4491.67 4452.52 4496.05 4457.91 4496.05 c
4463.31 4496.05 4467.69 4491.67 4467.69 4486.27 c
f
n
4493.76 4537.59 m
4493.76 4532.2 4489.38 4527.82 4483.98 4527.82 c
4478.58 4527.82 4474.21 4532.2 4474.21 4537.59 c
4474.21 4542.99 4478.58 4547.37 4483.98 4547.37 c
4489.38 4547.37 4493.76 4542.99 4493.76 4537.59 c
f
n
4157.33 3761.29 m
4157.33 3755.89 4152.95 3751.51 4147.55 3751.51 c
4142.16 3751.51 4137.78 3755.89 4137.78 3761.29 c
4137.78 3766.69 4142.16 3771.06 4147.55 3771.06 c
4152.95 3771.06 4157.33 3766.69 4157.33 3761.29 c
f
n
4176.88 3813.42 m
4176.88 3808.02 4172.5 3803.64 4167.11 3803.64 c
4161.71 3803.64 4157.33 3808.02 4157.33 3813.42 c
4157.33 3818.82 4161.71 3823.2 4167.11 3823.2 c
4172.5 3823.2 4176.88 3818.82 4176.88 3813.42 c
f
n
4196.43 3864.74 m
4196.43 3859.34 4192.05 3854.96 4186.66 3854.96 c
4181.26 3854.96 4176.88 3859.34 4176.88 3864.74 c
4176.88 3870.14 4181.26 3874.52 4186.66 3874.52 c
4192.05 3874.52 4196.43 3870.14 4196.43 3864.74 c
f
n
4215.16 3916.88 m
4215.16 3911.48 4210.79 3907.1 4205.39 3907.1 c
4199.99 3907.1 4195.62 3911.48 4195.62 3916.88 c
4195.62 3922.27 4199.99 3926.65 4205.39 3926.65 c
4210.79 3926.65 4215.16 3922.27 4215.16 3916.88 c
f
n
4234.71 3968.2 m
4234.71 3962.8 4230.34 3958.42 4224.94 3958.42 c
4219.54 3958.42 4215.16 3962.8 4215.16 3968.2 c
4215.16 3973.59 4219.54 3977.97 4224.94 3977.97 c
4230.34 3977.97 4234.71 3973.59 4234.71 3968.2 c
f
n
4254.27 4020.33 m
4254.27 4014.93 4249.89 4010.55 4244.49 4010.55 c
4239.09 4010.55 4234.71 4014.93 4234.71 4020.33 c
4234.71 4025.73 4239.09 4030.1 4244.49 4030.1 c
4249.89 4030.1 4254.27 4025.73 4254.27 4020.33 c
f
n
4273.82 4072.46 m
4273.82 4067.06 4269.44 4062.69 4264.04 4062.69 c
4258.64 4062.69 4254.27 4067.06 4254.27 4072.46 c
4254.27 4077.86 4258.64 4082.24 4264.04 4082.24 c
4269.44 4082.24 4273.82 4077.86 4273.82 4072.46 c
f
n
4293.37 4123.78 m
4293.37 4118.38 4288.99 4114.0 4283.59 4114.0 c
4278.19 4114.0 4273.82 4118.38 4273.82 4123.78 c
4273.82 4129.18 4278.19 4133.55 4283.59 4133.55 c
4288.99 4133.55 4293.37 4129.18 4293.37 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4331.65 4227.23 m
4331.65 4221.84 4327.28 4217.46 4321.88 4217.46 c
4316.48 4217.46 4312.1 4221.84 4312.1 4227.23 c
4312.1 4232.63 4316.48 4237.01 4321.88 4237.01 c
4327.28 4237.01 4331.65 4232.63 4331.65 4227.23 c
f
n
4351.2 4279.37 m
4351.2 4273.97 4346.82 4269.59 4341.43 4269.59 c
4336.03 4269.59 4331.65 4273.97 4331.65 4279.37 c
4331.65 4284.77 4336.03 4289.14 4341.43 4289.14 c
4346.82 4289.14 4351.2 4284.77 4351.2 4279.37 c
f
n
4370.75 4330.69 m
4370.75 4325.29 4366.38 4320.91 4360.98 4320.91 c
4355.58 4320.91 4351.2 4325.29 4351.2 4330.69 c
4351.2 4336.09 4355.58 4340.46 4360.98 4340.46 c
4366.38 4340.46 4370.75 4336.09 4370.75 4330.69 c
f
n
4390.3 4382.82 m
4390.3 4377.42 4385.93 4373.05 4380.53 4373.05 c
4375.13 4373.05 4370.75 4377.42 4370.75 4382.82 c
4370.75 4388.22 4375.13 4392.6 4380.53 4392.6 c
4385.93 4392.6 4390.3 4388.22 4390.3 4382.82 c
f
n
4409.85 4434.14 m
4409.85 4428.74 4405.48 4424.36 4400.08 4424.36 c
4394.68 4424.36 4390.3 4428.74 4390.3 4434.14 c
4390.3 4439.54 4394.68 4443.91 4400.08 4443.91 c
4405.48 4443.91 4409.85 4439.54 4409.85 4434.14 c
f
n
4428.59 4486.27 m
4428.59 4480.88 4424.21 4476.5 4418.81 4476.5 c
4413.41 4476.5 4409.04 4480.88 4409.04 4486.27 c
4409.04 4491.67 4413.41 4496.05 4418.81 4496.05 c
4424.21 4496.05 4428.59 4491.67 4428.59 4486.27 c
f
n
4448.14 4537.59 m
4448.14 4532.2 4443.76 4527.82 4438.36 4527.82 c
4432.96 4527.82 4428.59 4532.2 4428.59 4537.59 c
4428.59 4542.99 4432.96 4547.37 4438.36 4547.37 c
4443.76 4547.37 4448.14 4542.99 4448.14 4537.59 c
f
n
4209.46 3761.29 m
4209.46 3755.89 4205.09 3751.51 4199.69 3751.51 c
4194.29 3751.51 4189.91 3755.89 4189.91 3761.29 c
4189.91 3766.69 4194.29 3771.06 4199.69 3771.06 c
4205.09 3771.06 4209.46 3766.69 4209.46 3761.29 c
f
n
4221.68 3813.42 m
4221.68 3808.02 4217.3 3803.64 4211.91 3803.64 c
4206.51 3803.64 4202.13 3808.02 4202.13 3813.42 c
4202.13 3818.82 4206.51 3823.2 4211.91 3823.2 c
4217.3 3823.2 4221.68 3818.82 4221.68 3813.42 c
f
n
4234.71 3864.74 m
4234.71 3859.34 4230.34 3854.96 4224.94 3854.96 c
4219.54 3854.96 4215.16 3859.34 4215.16 3864.74 c
4215.16 3870.14 4219.54 3874.52 4224.94 3874.52 c
4230.34 3874.52 4234.71 3870.14 4234.71 3864.74 c
f
n
4247.75 3916.88 m
4247.75 3911.48 4243.37 3907.1 4237.97 3907.1 c
4232.57 3907.1 4228.2 3911.48 4228.2 3916.88 c
4228.2 3922.27 4232.57 3926.65 4237.97 3926.65 c
4243.37 3926.65 4247.75 3922.27 4247.75 3916.88 c
f
n
4260.78 3968.2 m
4260.78 3962.8 4256.41 3958.42 4251.01 3958.42 c
4245.61 3958.42 4241.23 3962.8 4241.23 3968.2 c
4241.23 3973.59 4245.61 3977.97 4251.01 3977.97 c
4256.41 3977.97 4260.78 3973.59 4260.78 3968.2 c
f
n
4273.82 4020.33 m
4273.82 4014.93 4269.44 4010.55 4264.04 4010.55 c
4258.64 4010.55 4254.27 4014.93 4254.27 4020.33 c
4254.27 4025.73 4258.64 4030.1 4264.04 4030.1 c
4269.44 4030.1 4273.82 4025.73 4273.82 4020.33 c
f
n
4286.85 4072.46 m
4286.85 4067.06 4282.47 4062.69 4277.07 4062.69 c
4271.68 4062.69 4267.3 4067.06 4267.3 4072.46 c
4267.3 4077.86 4271.68 4082.24 4277.07 4082.24 c
4282.47 4082.24 4286.85 4077.86 4286.85 4072.46 c
f
n
4299.88 4123.78 m
4299.88 4118.38 4295.51 4114.0 4290.11 4114.0 c
4284.71 4114.0 4280.33 4118.38 4280.33 4123.78 c
4280.33 4129.18 4284.71 4133.55 4290.11 4133.55 c
4295.51 4133.55 4299.88 4129.18 4299.88 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4325.14 4227.23 m
4325.14 4221.84 4320.76 4217.46 4315.36 4217.46 c
4309.96 4217.46 4305.59 4221.84 4305.59 4227.23 c
4305.59 4232.63 4309.96 4237.01 4315.36 4237.01 c
4320.76 4237.01 4325.14 4232.63 4325.14 4227.23 c
f
n
4338.17 4279.37 m
4338.17 4273.97 4333.79 4269.59 4328.39 4269.59 c
4323.0 4269.59 4318.62 4273.97 4318.62 4279.37 c
4318.62 4284.77 4323.0 4289.14 4328.39 4289.14 c
4333.79 4289.14 4338.17 4284.77 4338.17 4279.37 c
f
n
4351.2 4330.69 m
4351.2 4325.29 4346.82 4320.91 4341.43 4320.91 c
4336.03 4320.91 4331.65 4325.29 4331.65 4330.69 c
4331.65 4336.09 4336.03 4340.46 4341.43 4340.46 c
4346.82 4340.46 4351.2 4336.09 4351.2 4330.69 c
f
n
4364.23 4382.82 m
4364.23 4377.42 4359.86 4373.05 4354.46 4373.05 c
4349.06 4373.05 4344.69 4377.42 4344.69 4382.82 c
4344.69 4388.22 4349.06 4392.6 4354.46 4392.6 c
4359.86 4392.6 4364.23 4388.22 4364.23 4382.82 c
f
n
4377.27 4434.14 m
4377.27 4428.74 4372.89 4424.36 4367.5 4424.36 c
4362.1 4424.36 4357.72 4428.74 4357.72 4434.14 c
4357.72 4439.54 4362.1 4443.91 4367.5 4443.91 c
4372.89 4443.91 4377.27 4439.54 4377.27 4434.14 c
f
n
4390.3 4486.27 m
4390.3 4480.88 4385.93 4476.5 4380.53 4476.5 c
4375.13 4476.5 4370.75 4480.88 4370.75 4486.27 c
4370.75 4491.67 4375.13 4496.05 4380.53 4496.05 c
4385.93 4496.05 4390.3 4491.67 4390.3 4486.27 c
f
n
4403.34 4537.59 m
4403.34 4532.2 4398.96 4527.82 4393.56 4527.82 c
4388.16 4527.82 4383.79 4532.2 4383.79 4537.59 c
4383.79 4542.99 4388.16 4547.37 4393.56 4547.37 c
4398.96 4547.37 4403.34 4542.99 4403.34 4537.59 c
f
n
4260.78 3761.29 m
4260.78 3755.89 4256.41 3751.51 4251.01 3751.51 c
4245.61 3751.51 4241.23 3755.89 4241.23 3761.29 c
4241.23 3766.69 4245.61 3771.06 4251.01 3771.06 c
4256.41 3771.06 4260.78 3766.69 4260.78 3761.29 c
f
n
4267.3 3813.42 m
4267.3 3808.02 4262.92 3803.64 4257.52 3803.64 c
4252.12 3803.64 4247.75 3808.02 4247.75 3813.42 c
4247.75 3818.82 4252.12 3823.2 4257.52 3823.2 c
4262.92 3823.2 4267.3 3818.82 4267.3 3813.42 c
f
n
4273.82 3864.74 m
4273.82 3859.34 4269.44 3854.96 4264.04 3854.96 c
4258.64 3854.96 4254.27 3859.34 4254.27 3864.74 c
4254.27 3870.14 4258.64 3874.52 4264.04 3874.52 c
4269.44 3874.52 4273.82 3870.14 4273.82 3864.74 c
f
n
4280.33 3916.88 m
4280.33 3911.48 4275.96 3907.1 4270.56 3907.1 c
4265.16 3907.1 4260.78 3911.48 4260.78 3916.88 c
4260.78 3922.27 4265.16 3926.65 4270.56 3926.65 c
4275.96 3926.65 4280.33 3922.27 4280.33 3916.88 c
f
n
4286.85 3968.2 m
4286.85 3962.8 4282.47 3958.42 4277.07 3958.42 c
4271.68 3958.42 4267.3 3962.8 4267.3 3968.2 c
4267.3 3973.59 4271.68 3977.97 4277.07 3977.97 c
4282.47 3977.97 4286.85 3973.59 4286.85 3968.2 c
f
n
4293.37 4020.33 m
4293.37 4014.93 4288.99 4010.55 4283.59 4010.55 c
4278.19 4010.55 4273.82 4014.93 4273.82 4020.33 c
4273.82 4025.73 4278.19 4030.1 4283.59 4030.1 c
4288.99 4030.1 4293.37 4025.73 4293.37 4020.33 c
f
n
4299.88 4072.46 m
4299.88 4067.06 4295.51 4062.69 4290.11 4062.69 c
4284.71 4062.69 4280.33 4067.06 4280.33 4072.46 c
4280.33 4077.86 4284.71 4082.24 4290.11 4082.24 c
4295.51 4082.24 4299.88 4077.86 4299.88 4072.46 c
f
n
4306.4 4123.78 m
4306.4 4118.38 4302.02 4114.0 4296.62 4114.0 c
4291.23 4114.0 4286.85 4118.38 4286.85 4123.78 c
4286.85 4129.18 4291.23 4133.55 4296.62 4133.55 c
4302.02 4133.55 4306.4 4129.18 4306.4 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4318.62 4227.23 m
4318.62 4221.84 4314.24 4217.46 4308.84 4217.46 c
4303.45 4217.46 4299.07 4221.84 4299.07 4227.23 c
4299.07 4232.63 4303.45 4237.01 4308.84 4237.01 c
4314.24 4237.01 4318.62 4232.63 4318.62 4227.23 c
f
n
4325.14 4279.37 m
4325.14 4273.97 4320.76 4269.59 4315.36 4269.59 c
4309.96 4269.59 4305.59 4273.97 4305.59 4279.37 c
4305.59 4284.77 4309.96 4289.14 4315.36 4289.14 c
4320.76 4289.14 4325.14 4284.77 4325.14 4279.37 c
f
n
4331.65 4330.69 m
4331.65 4325.29 4327.28 4320.91 4321.88 4320.91 c
4316.48 4320.91 4312.1 4325.29 4312.1 4330.69 c
4312.1 4336.09 4316.48 4340.46 4321.88 4340.46 c
4327.28 4340.46 4331.65 4336.09 4331.65 4330.69 c
f
n
4338.17 4382.82 m
4338.17 4377.42 4333.79 4373.05 4328.39 4373.05 c
4323.0 4373.05 4318.62 4377.42 4318.62 4382.82 c
4318.62 4388.22 4323.0 4392.6 4328.39 4392.6 c
4333.79 4392.6 4338.17 4388.22 4338.17 4382.82 c
f
n
4344.69 4434.14 m
4344.69 4428.74 4340.31 4424.36 4334.91 4424.36 c
4329.51 4424.36 4325.14 4428.74 4325.14 4434.14 c
4325.14 4439.54 4329.51 4443.91 4334.91 4443.91 c
4340.31 4443.91 4344.69 4439.54 4344.69 4434.14 c
f
n
4351.2 4486.27 m
4351.2 4480.88 4346.82 4476.5 4341.43 4476.5 c
4336.03 4476.5 4331.65 4480.88 4331.65 4486.27 c
4331.65 4491.67 4336.03 4496.05 4341.43 4496.05 c
4346.82 4496.05 4351.2 4491.67 4351.2 4486.27 c
f
n
4357.72 4537.59 m
4357.72 4532.2 4353.34 4527.82 4347.95 4527.82 c
4342.55 4527.82 4338.17 4532.2 4338.17 4537.59 c
4338.17 4542.99 4342.55 4547.37 4347.95 4547.37 c
4353.34 4547.37 4357.72 4542.99 4357.72 4537.59 c
f
n
4312.92 3761.29 m
4312.92 3755.89 4308.54 3751.51 4303.14 3751.51 c
4297.74 3751.51 4293.37 3755.89 4293.37 3761.29 c
4293.37 3766.69 4297.74 3771.06 4303.14 3771.06 c
4308.54 3771.06 4312.92 3766.69 4312.92 3761.29 c
f
n
4312.92 3813.42 m
4312.92 3808.02 4308.54 3803.64 4303.14 3803.64 c
4297.74 3803.64 4293.37 3808.02 4293.37 3813.42 c
4293.37 3818.82 4297.74 3823.2 4303.14 3823.2 c
4308.54 3823.2 4312.92 3818.82 4312.92 3813.42 c
f
n
4312.92 3864.74 m
4312.92 3859.34 4308.54 3854.96 4303.14 3854.96 c
4297.74 3854.96 4293.37 3859.34 4293.37 3864.74 c
4293.37 3870.14 4297.74 3874.52 4303.14 3874.52 c
4308.54 3874.52 4312.92 3870.14 4312.92 3864.74 c
f
n
4312.92 3916.88 m
4312.92 3911.48 4308.54 3907.1 4303.14 3907.1 c
4297.74 3907.1 4293.37 3911.48 4293.37 3916.88 c
4293.37 3922.27 4297.74 3926.65 4303.14 3926.65 c
4308.54 3926.65 4312.92 3922.27 4312.92 3916.88 c
f
n
4312.92 3968.2 m
4312.92 3962.8 4308.54 3958.42 4303.14 3958.42 c
4297.74 3958.42 4293.37 3962.8 4293.37 3968.2 c
4293.37 3973.59 4297.74 3977.97 4303.14 3977.97 c
4308.54 3977.97 4312.92 3973.59 4312.92 3968.2 c
f
n
4312.92 4020.33 m
4312.92 4014.93 4308.54 4010.55 4303.14 4010.55 c
4297.74 4010.55 4293.37 4014.93 4293.37 4020.33 c
4293.37 4025.73 4297.74 4030.1 4303.14 4030.1 c
4308.54 4030.1 4312.92 4025.73 4312.92 4020.33 c
f
n
4312.92 4072.46 m
4312.92 4067.06 4308.54 4062.69 4303.14 4062.69 c
4297.74 4062.69 4293.37 4067.06 4293.37 4072.46 c
4293.37 4077.86 4297.74 4082.24 4303.14 4082.24 c
4308.54 4082.24 4312.92 4077.86 4312.92 4072.46 c
f
n
4312.92 4123.78 m
4312.92 4118.38 4308.54 4114.0 4303.14 4114.0 c
4297.74 4114.0 4293.37 4118.38 4293.37 4123.78 c
4293.37 4129.18 4297.74 4133.55 4303.14 4133.55 c
4308.54 4133.55 4312.92 4129.18 4312.92 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4312.92 4227.23 m
4312.92 4221.84 4308.54 4217.46 4303.14 4217.46 c
4297.74 4217.46 4293.37 4221.84 4293.37 4227.23 c
4293.37 4232.63 4297.74 4237.01 4303.14 4237.01 c
4308.54 4237.01 4312.92 4232.63 4312.92 4227.23 c
f
n
4312.92 4279.37 m
4312.92 4273.97 4308.54 4269.59 4303.14 4269.59 c
4297.74 4269.59 4293.37 4273.97 4293.37 4279.37 c
4293.37 4284.77 4297.74 4289.14 4303.14 4289.14 c
4308.54 4289.14 4312.92 4284.77 4312.92 4279.37 c
f
n
4312.92 4330.69 m
4312.92 4325.29 4308.54 4320.91 4303.14 4320.91 c
4297.74 4320.91 4293.37 4325.29 4293.37 4330.69 c
4293.37 4336.09 4297.74 4340.46 4303.14 4340.46 c
4308.54 4340.46 4312.92 4336.09 4312.92 4330.69 c
f
n
4312.92 4382.82 m
4312.92 4377.42 4308.54 4373.05 4303.14 4373.05 c
4297.74 4373.05 4293.37 4377.42 4293.37 4382.82 c
4293.37 4388.22 4297.74 4392.6 4303.14 4392.6 c
4308.54 4392.6 4312.92 4388.22 4312.92 4382.82 c
f
n
4312.92 4434.14 m
4312.92 4428.74 4308.54 4424.36 4303.14 4424.36 c
4297.74 4424.36 4293.37 4428.74 4293.37 4434.14 c
4293.37 4439.54 4297.74 4443.91 4303.14 4443.91 c
4308.54 4443.91 4312.92 4439.54 4312.92 4434.14 c
f
n
4312.92 4486.27 m
4312.92 4480.88 4308.54 4476.5 4303.14 4476.5 c
4297.74 4476.5 4293.37 4480.88 4293.37 4486.27 c
4293.37 4491.67 4297.74 4496.05 4303.14 4496.05 c
4308.54 4496.05 4312.92 4491.67 4312.92 4486.27 c
f
n
4312.92 4537.59 m
4312.92 4532.2 4308.54 4527.82 4303.14 4527.82 c
4297.74 4527.82 4293.37 4532.2 4293.37 4537.59 c
4293.37 4542.99 4297.74 4547.37 4303.14 4547.37 c
4308.54 4547.37 4312.92 4542.99 4312.92 4537.59 c
f
n
4364.23 3761.29 m
4364.23 3755.89 4359.86 3751.51 4354.46 3751.51 c
4349.06 3751.51 4344.69 3755.89 4344.69 3761.29 c
4344.69 3766.69 4349.06 3771.06 4354.46 3771.06 c
4359.86 3771.06 4364.23 3766.69 4364.23 3761.29 c
f
n
4357.72 3813.42 m
4357.72 3808.02 4353.34 3803.64 4347.95 3803.64 c
4342.55 3803.64 4338.17 3808.02 4338.17 3813.42 c
4338.17 3818.82 4342.55 3823.2 4347.95 3823.2 c
4353.34 3823.2 4357.72 3818.82 4357.72 3813.42 c
f
n
4351.2 3864.74 m
4351.2 3859.34 4346.82 3854.96 4341.43 3854.96 c
4336.03 3854.96 4331.65 3859.34 4331.65 3864.74 c
4331.65 3870.14 4336.03 3874.52 4341.43 3874.52 c
4346.82 3874.52 4351.2 3870.14 4351.2 3864.74 c
f
n
4344.69 3916.88 m
4344.69 3911.48 4340.31 3907.1 4334.91 3907.1 c
4329.51 3907.1 4325.14 3911.48 4325.14 3916.88 c
4325.14 3922.27 4329.51 3926.65 4334.91 3926.65 c
4340.31 3926.65 4344.69 3922.27 4344.69 3916.88 c
f
n
4338.17 3968.2 m
4338.17 3962.8 4333.79 3958.42 4328.39 3958.42 c
4323.0 3958.42 4318.62 3962.8 4318.62 3968.2 c
4318.62 3973.59 4323.0 3977.97 4328.39 3977.97 c
4333.79 3977.97 4338.17 3973.59 4338.17 3968.2 c
f
n
4331.65 4020.33 m
4331.65 4014.93 4327.28 4010.55 4321.88 4010.55 c
4316.48 4010.55 4312.1 4014.93 4312.1 4020.33 c
4312.1 4025.73 4316.48 4030.1 4321.88 4030.1 c
4327.28 4030.1 4331.65 4025.73 4331.65 4020.33 c
f
n
4325.14 4072.46 m
4325.14 4067.06 4320.76 4062.69 4315.36 4062.69 c
4309.96 4062.69 4305.59 4067.06 4305.59 4072.46 c
4305.59 4077.86 4309.96 4082.24 4315.36 4082.24 c
4320.76 4082.24 4325.14 4077.86 4325.14 4072.46 c
f
n
4318.62 4123.78 m
4318.62 4118.38 4314.24 4114.0 4308.84 4114.0 c
4303.45 4114.0 4299.07 4118.38 4299.07 4123.78 c
4299.07 4129.18 4303.45 4133.55 4308.84 4133.55 c
4314.24 4133.55 4318.62 4129.18 4318.62 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4306.4 4227.23 m
4306.4 4221.84 4302.02 4217.46 4296.62 4217.46 c
4291.23 4217.46 4286.85 4221.84 4286.85 4227.23 c
4286.85 4232.63 4291.23 4237.01 4296.62 4237.01 c
4302.02 4237.01 4306.4 4232.63 4306.4 4227.23 c
f
n
4299.88 4279.37 m
4299.88 4273.97 4295.51 4269.59 4290.11 4269.59 c
4284.71 4269.59 4280.33 4273.97 4280.33 4279.37 c
4280.33 4284.77 4284.71 4289.14 4290.11 4289.14 c
4295.51 4289.14 4299.88 4284.77 4299.88 4279.37 c
f
n
4293.37 4330.69 m
4293.37 4325.29 4288.99 4320.91 4283.59 4320.91 c
4278.19 4320.91 4273.82 4325.29 4273.82 4330.69 c
4273.82 4336.09 4278.19 4340.46 4283.59 4340.46 c
4288.99 4340.46 4293.37 4336.09 4293.37 4330.69 c
f
n
4286.85 4382.82 m
4286.85 4377.42 4282.47 4373.05 4277.07 4373.05 c
4271.68 4373.05 4267.3 4377.42 4267.3 4382.82 c
4267.3 4388.22 4271.68 4392.6 4277.07 4392.6 c
4282.47 4392.6 4286.85 4388.22 4286.85 4382.82 c
f
n
4280.33 4434.14 m
4280.33 4428.74 4275.96 4424.36 4270.56 4424.36 c
4265.16 4424.36 4260.78 4428.74 4260.78 4434.14 c
4260.78 4439.54 4265.16 4443.91 4270.56 4443.91 c
4275.96 4443.91 4280.33 4439.54 4280.33 4434.14 c
f
n
4273.82 4486.27 m
4273.82 4480.88 4269.44 4476.5 4264.04 4476.5 c
4258.64 4476.5 4254.27 4480.88 4254.27 4486.27 c
4254.27 4491.67 4258.64 4496.05 4264.04 4496.05 c
4269.44 4496.05 4273.82 4491.67 4273.82 4486.27 c
f
n
4267.3 4537.59 m
4267.3 4532.2 4262.92 4527.82 4257.52 4527.82 c
4252.12 4527.82 4247.75 4532.2 4247.75 4537.59 c
4247.75 4542.99 4252.12 4547.37 4257.52 4547.37 c
4262.92 4547.37 4267.3 4542.99 4267.3 4537.59 c
f
n
4416.37 3761.29 m
4416.37 3755.89 4411.99 3751.51 4406.59 3751.51 c
4401.2 3751.51 4396.82 3755.89 4396.82 3761.29 c
4396.82 3766.69 4401.2 3771.06 4406.59 3771.06 c
4411.99 3771.06 4416.37 3766.69 4416.37 3761.29 c
f
n
4403.34 3813.42 m
4403.34 3808.02 4398.96 3803.64 4393.56 3803.64 c
4388.16 3803.64 4383.79 3808.02 4383.79 3813.42 c
4383.79 3818.82 4388.16 3823.2 4393.56 3823.2 c
4398.96 3823.2 4403.34 3818.82 4403.34 3813.42 c
f
n
4390.3 3864.74 m
4390.3 3859.34 4385.93 3854.96 4380.53 3854.96 c
4375.13 3854.96 4370.75 3859.34 4370.75 3864.74 c
4370.75 3870.14 4375.13 3874.52 4380.53 3874.52 c
4385.93 3874.52 4390.3 3870.14 4390.3 3864.74 c
f
n
4377.27 3916.88 m
4377.27 3911.48 4372.89 3907.1 4367.5 3907.1 c
4362.1 3907.1 4357.72 3911.48 4357.72 3916.88 c
4357.72 3922.27 4362.1 3926.65 4367.5 3926.65 c
4372.89 3926.65 4377.27 3922.27 4377.27 3916.88 c
f
n
4364.23 3968.2 m
4364.23 3962.8 4359.86 3958.42 4354.46 3958.42 c
4349.06 3958.42 4344.69 3962.8 4344.69 3968.2 c
4344.69 3973.59 4349.06 3977.97 4354.46 3977.97 c
4359.86 3977.97 4364.23 3973.59 4364.23 3968.2 c
f
n
4351.2 4020.33 m
4351.2 4014.93 4346.82 4010.55 4341.43 4010.55 c
4336.03 4010.55 4331.65 4014.93 4331.65 4020.33 c
4331.65 4025.73 4336.03 4030.1 4341.43 4030.1 c
4346.82 4030.1 4351.2 4025.73 4351.2 4020.33 c
f
n
4338.17 4072.46 m
4338.17 4067.06 4333.79 4062.69 4328.39 4062.69 c
4323.0 4062.69 4318.62 4067.06 4318.62 4072.46 c
4318.62 4077.86 4323.0 4082.24 4328.39 4082.24 c
4333.79 4082.24 4338.17 4077.86 4338.17 4072.46 c
f
n
4325.14 4123.78 m
4325.14 4118.38 4320.76 4114.0 4315.36 4114.0 c
4309.96 4114.0 4305.59 4118.38 4305.59 4123.78 c
4305.59 4129.18 4309.96 4133.55 4315.36 4133.55 c
4320.76 4133.55 4325.14 4129.18 4325.14 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4299.88 4227.23 m
4299.88 4221.84 4295.51 4217.46 4290.11 4217.46 c
4284.71 4217.46 4280.33 4221.84 4280.33 4227.23 c
4280.33 4232.63 4284.71 4237.01 4290.11 4237.01 c
4295.51 4237.01 4299.88 4232.63 4299.88 4227.23 c
f
n
4286.85 4279.37 m
4286.85 4273.97 4282.47 4269.59 4277.07 4269.59 c
4271.68 4269.59 4267.3 4273.97 4267.3 4279.37 c
4267.3 4284.77 4271.68 4289.14 4277.07 4289.14 c
4282.47 4289.14 4286.85 4284.77 4286.85 4279.37 c
f
n
4273.82 4330.69 m
4273.82 4325.29 4269.44 4320.91 4264.04 4320.91 c
4258.64 4320.91 4254.27 4325.29 4254.27 4330.69 c
4254.27 4336.09 4258.64 4340.46 4264.04 4340.46 c
4269.44 4340.46 4273.82 4336.09 4273.82 4330.69 c
f
n
4260.78 4382.82 m
4260.78 4377.42 4256.41 4373.05 4251.01 4373.05 c
4245.61 4373.05 4241.23 4377.42 4241.23 4382.82 c
4241.23 4388.22 4245.61 4392.6 4251.01 4392.6 c
4256.41 4392.6 4260.78 4388.22 4260.78 4382.82 c
f
n
4247.75 4434.14 m
4247.75 4428.74 4243.37 4424.36 4237.97 4424.36 c
4232.57 4424.36 4228.2 4428.74 4228.2 4434.14 c
4228.2 4439.54 4232.57 4443.91 4237.97 4443.91 c
4243.37 4443.91 4247.75 4439.54 4247.75 4434.14 c
f
n
4234.71 4486.27 m
4234.71 4480.88 4230.34 4476.5 4224.94 4476.5 c
4219.54 4476.5 4215.16 4480.88 4215.16 4486.27 c
4215.16 4491.67 4219.54 4496.05 4224.94 4496.05 c
4230.34 4496.05 4234.71 4491.67 4234.71 4486.27 c
f
n
4221.68 4537.59 m
4221.68 4532.2 4217.3 4527.82 4211.91 4527.82 c
4206.51 4527.82 4202.13 4532.2 4202.13 4537.59 c
4202.13 4542.99 4206.51 4547.37 4211.91 4547.37 c
4217.3 4547.37 4221.68 4542.99 4221.68 4537.59 c
f
n
4467.69 3761.29 m
4467.69 3755.89 4463.31 3751.51 4457.91 3751.51 c
4452.52 3751.51 4448.14 3755.89 4448.14 3761.29 c
4448.14 3766.69 4452.52 3771.06 4457.91 3771.06 c
4463.31 3771.06 4467.69 3766.69 4467.69 3761.29 c
f
n
4448.14 3813.42 m
4448.14 3808.02 4443.76 3803.64 4438.36 3803.64 c
4432.96 3803.64 4428.59 3808.02 4428.59 3813.42 c
4428.59 3818.82 4432.96 3823.2 4438.36 3823.2 c
4443.76 3823.2 4448.14 3818.82 4448.14 3813.42 c
f
n
4428.59 3864.74 m
4428.59 3859.34 4424.21 3854.96 4418.81 3854.96 c
4413.41 3854.96 4409.04 3859.34 4409.04 3864.74 c
4409.04 3870.14 4413.41 3874.52 4418.81 3874.52 c
4424.21 3874.52 4428.59 3870.14 4428.59 3864.74 c
f
n
4409.85 3916.88 m
4409.85 3911.48 4405.48 3907.1 4400.08 3907.1 c
4394.68 3907.1 4390.3 3911.48 4390.3 3916.88 c
4390.3 3922.27 4394.68 3926.65 4400.08 3926.65 c
4405.48 3926.65 4409.85 3922.27 4409.85 3916.88 c
f
n
4390.3 3968.2 m
4390.3 3962.8 4385.93 3958.42 4380.53 3958.42 c
4375.13 3958.42 4370.75 3962.8 4370.75 3968.2 c
4370.75 3973.59 4375.13 3977.97 4380.53 3977.97 c
4385.93 3977.97 4390.3 3973.59 4390.3 3968.2 c
f
n
4370.75 4020.33 m
4370.75 4014.93 4366.38 4010.55 4360.98 4010.55 c
4355.58 4010.55 4351.2 4014.93 4351.2 4020.33 c
4351.2 4025.73 4355.58 4030.1 4360.98 4030.1 c
4366.38 4030.1 4370.75 4025.73 4370.75 4020.33 c
f
n
4351.2 4072.46 m
4351.2 4067.06 4346.82 4062.69 4341.43 4062.69 c
4336.03 4062.69 4331.65 4067.06 4331.65 4072.46 c
4331.65 4077.86 4336.03 4082.24 4341.43 4082.24 c
4346.82 4082.24 4351.2 4077.86 4351.2 4072.46 c
f
n
4331.65 4123.78 m
4331.65 4118.38 4327.28 4114.0 4321.88 4114.0 c
4316.48 4114.0 4312.1 4118.38 4312.1 4123.78 c
4312.1 4129.18 4316.48 4133.55 4321.88 4133.55 c
4327.28 4133.55 4331.65 4129.18 4331.65 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4293.37 4227.23 m
4293.37 4221.84 4288.99 4217.46 4283.59 4217.46 c
4278.19 4217.46 4273.82 4221.84 4273.82 4227.23 c
4273.82 4232.63 4278.19 4237.01 4283.59 4237.01 c
4288.99 4237.01 4293.37 4232.63 4293.37 4227.23 c
f
n
4273.82 4279.37 m
4273.82 4273.97 4269.44 4269.59 4264.04 4269.59 c
4258.64 4269.59 4254.27 4273.97 4254.27 4279.37 c
4254.27 4284.77 4258.64 4289.14 4264.04 4289.14 c
4269.44 4289.14 4273.82 4284.77 4273.82 4279.37 c
f
n
4254.27 4330.69 m
4254.27 4325.29 4249.89 4320.91 4244.49 4320.91 c
4239.09 4320.91 4234.71 4325.29 4234.71 4330.69 c
4234.71 4336.09 4239.09 4340.46 4244.49 4340.46 c
4249.89 4340.46 4254.27 4336.09 4254.27 4330.69 c
f
n
4234.71 4382.82 m
4234.71 4377.42 4230.34 4373.05 4224.94 4373.05 c
4219.54 4373.05 4215.16 4377.42 4215.16 4382.82 c
4215.16 4388.22 4219.54 4392.6 4224.94 4392.6 c
4230.34 4392.6 4234.71 4388.22 4234.71 4382.82 c
f
n
4215.16 4434.14 m
4215.16 4428.74 4210.79 4424.36 4205.39 4424.36 c
4199.99 4424.36 4195.62 4428.74 4195.62 4434.14 c
4195.62 4439.54 4199.99 4443.91 4205.39 4443.91 c
4210.79 4443.91 4215.16 4439.54 4215.16 4434.14 c
f
n
4196.43 4486.27 m
4196.43 4480.88 4192.05 4476.5 4186.66 4476.5 c
4181.26 4476.5 4176.88 4480.88 4176.88 4486.27 c
4176.88 4491.67 4181.26 4496.05 4186.66 4496.05 c
4192.05 4496.05 4196.43 4491.67 4196.43 4486.27 c
f
n
4176.88 4537.59 m
4176.88 4532.2 4172.5 4527.82 4167.11 4527.82 c
4161.71 4527.82 4157.33 4532.2 4157.33 4537.59 c
4157.33 4542.99 4161.71 4547.37 4167.11 4547.37 c
4172.5 4547.37 4176.88 4542.99 4176.88 4537.59 c
f
n
4519.82 3761.29 m
4519.82 3755.89 4515.45 3751.51 4510.05 3751.51 c
4504.65 3751.51 4500.27 3755.89 4500.27 3761.29 c
4500.27 3766.69 4504.65 3771.06 4510.05 3771.06 c
4515.45 3771.06 4519.82 3766.69 4519.82 3761.29 c
f
n
4493.76 3813.42 m
4493.76 3808.02 4489.38 3803.64 4483.98 3803.64 c
4478.58 3803.64 4474.21 3808.02 4474.21 3813.42 c
4474.21 3818.82 4478.58 3823.2 4483.98 3823.2 c
4489.38 3823.2 4493.76 3818.82 4493.76 3813.42 c
f
n
4467.69 3864.74 m
4467.69 3859.34 4463.31 3854.96 4457.91 3854.96 c
4452.52 3854.96 4448.14 3859.34 4448.14 3864.74 c
4448.14 3870.14 4452.52 3874.52 4457.91 3874.52 c
4463.31 3874.52 4467.69 3870.14 4467.69 3864.74 c
f
n
4441.62 3916.88 m
4441.62 3911.48 4437.25 3907.1 4431.85 3907.1 c
4426.45 3907.1 4422.07 3911.48 4422.07 3916.88 c
4422.07 3922.27 4426.45 3926.65 4431.85 3926.65 c
4437.25 3926.65 4441.62 3922.27 4441.62 3916.88 c
f
n
4416.37 3968.2 m
4416.37 3962.8 4411.99 3958.42 4406.59 3958.42 c
4401.2 3958.42 4396.82 3962.8 4396.82 3968.2 c
4396.82 3973.59 4401.2 3977.97 4406.59 3977.97 c
4411.99 3977.97 4416.37 3973.59 4416.37 3968.2 c
f
n
4390.3 4020.33 m
4390.3 4014.93 4385.93 4010.55 4380.53 4010.55 c
4375.13 4010.55 4370.75 4014.93 4370.75 4020.33 c
4370.75 4025.73 4375.13 4030.1 4380.53 4030.1 c
4385.93 4030.1 4390.3 4025.73 4390.3 4020.33 c
f
n
4364.23 4072.46 m
4364.23 4067.06 4359.86 4062.69 4354.46 4062.69 c
4349.06 4062.69 4344.69 4067.06 4344.69 4072.46 c
4344.69 4077.86 4349.06 4082.24 4354.46 4082.24 c
4359.86 4082.24 4364.23 4077.86 4364.23 4072.46 c
f
n
4338.17 4123.78 m
4338.17 4118.38 4333.79 4114.0 4328.39 4114.0 c
4323.0 4114.0 4318.62 4118.38 4318.62 4123.78 c
4318.62 4129.18 4323.0 4133.55 4328.39 4133.55 c
4333.79 4133.55 4338.17 4129.18 4338.17 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4286.85 4227.23 m
4286.85 4221.84 4282.47 4217.46 4277.07 4217.46 c
4271.68 4217.46 4267.3 4221.84 4267.3 4227.23 c
4267.3 4232.63 4271.68 4237.01 4277.07 4237.01 c
4282.47 4237.01 4286.85 4232.63 4286.85 4227.23 c
f
n
4260.78 4279.37 m
4260.78 4273.97 4256.41 4269.59 4251.01 4269.59 c
4245.61 4269.59 4241.23 4273.97 4241.23 4279.37 c
4241.23 4284.77 4245.61 4289.14 4251.01 4289.14 c
4256.41 4289.14 4260.78 4284.77 4260.78 4279.37 c
f
n
4234.71 4330.69 m
4234.71 4325.29 4230.34 4320.91 4224.94 4320.91 c
4219.54 4320.91 4215.16 4325.29 4215.16 4330.69 c
4215.16 4336.09 4219.54 4340.46 4224.94 4340.46 c
4230.34 4340.46 4234.71 4336.09 4234.71 4330.69 c
f
n
4209.46 4382.82 m
4209.46 4377.42 4205.09 4373.05 4199.69 4373.05 c
4194.29 4373.05 4189.91 4377.42 4189.91 4382.82 c
4189.91 4388.22 4194.29 4392.6 4199.69 4392.6 c
4205.09 4392.6 4209.46 4388.22 4209.46 4382.82 c
f
n
4183.4 4434.14 m
4183.4 4428.74 4179.02 4424.36 4173.62 4424.36 c
4168.22 4424.36 4163.85 4428.74 4163.85 4434.14 c
4163.85 4439.54 4168.22 4443.91 4173.62 4443.91 c
4179.02 4443.91 4183.4 4439.54 4183.4 4434.14 c
f
n
4157.33 4486.27 m
4157.33 4480.88 4152.95 4476.5 4147.55 4476.5 c
4142.16 4476.5 4137.78 4480.88 4137.78 4486.27 c
4137.78 4491.67 4142.16 4496.05 4147.55 4496.05 c
4152.95 4496.05 4157.33 4491.67 4157.33 4486.27 c
f
n
4131.26 4537.59 m
4131.26 4532.2 4126.89 4527.82 4121.49 4527.82 c
4116.09 4527.82 4111.71 4532.2 4111.71 4537.59 c
4111.71 4542.99 4116.09 4547.37 4121.49 4547.37 c
4126.89 4547.37 4131.26 4542.99 4131.26 4537.59 c
f
n
4571.14 3761.29 m
4571.14 3755.89 4566.77 3751.51 4561.37 3751.51 c
4555.97 3751.51 4551.59 3755.89 4551.59 3761.29 c
4551.59 3766.69 4555.97 3771.06 4561.37 3771.06 c
4566.77 3771.06 4571.14 3766.69 4571.14 3761.29 c
f
n
4538.56 3813.42 m
4538.56 3808.02 4534.18 3803.64 4528.79 3803.64 c
4523.39 3803.64 4519.01 3808.02 4519.01 3813.42 c
4519.01 3818.82 4523.39 3823.2 4528.79 3823.2 c
4534.18 3823.2 4538.56 3818.82 4538.56 3813.42 c
f
n
4506.79 3864.74 m
4506.79 3859.34 4502.41 3854.96 4497.02 3854.96 c
4491.62 3854.96 4487.24 3859.34 4487.24 3864.74 c
4487.24 3870.14 4491.62 3874.52 4497.02 3874.52 c
4502.41 3874.52 4506.79 3870.14 4506.79 3864.74 c
f
n
4474.21 3916.88 m
4474.21 3911.48 4469.83 3907.1 4464.43 3907.1 c
4459.03 3907.1 4454.66 3911.48 4454.66 3916.88 c
4454.66 3922.27 4459.03 3926.65 4464.43 3926.65 c
4469.83 3926.65 4474.21 3922.27 4474.21 3916.88 c
f
n
4441.62 3968.2 m
4441.62 3962.8 4437.25 3958.42 4431.85 3958.42 c
4426.45 3958.42 4422.07 3962.8 4422.07 3968.2 c
4422.07 3973.59 4426.45 3977.97 4431.85 3977.97 c
4437.25 3977.97 4441.62 3973.59 4441.62 3968.2 c
f
n
4409.85 4020.33 m
4409.85 4014.93 4405.48 4010.55 4400.08 4010.55 c
4394.68 4010.55 4390.3 4014.93 4390.3 4020.33 c
4390.3 4025.73 4394.68 4030.1 4400.08 4030.1 c
4405.48 4030.1 4409.85 4025.73 4409.85 4020.33 c
f
n
4377.27 4072.46 m
4377.27 4067.06 4372.89 4062.69 4367.5 4062.69 c
4362.1 4062.69 4357.72 4067.06 4357.72 4072.46 c
4357.72 4077.86 4362.1 4082.24 4367.5 4082.24 c
4372.89 4082.24 4377.27 4077.86 4377.27 4072.46 c
f
n
4344.69 4123.78 m
4344.69 4118.38 4340.31 4114.0 4334.91 4114.0 c
4329.51 4114.0 4325.14 4118.38 4325.14 4123.78 c
4325.14 4129.18 4329.51 4133.55 4334.91 4133.55 c
4340.31 4133.55 4344.69 4129.18 4344.69 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4280.33 4227.23 m
4280.33 4221.84 4275.96 4217.46 4270.56 4217.46 c
4265.16 4217.46 4260.78 4221.84 4260.78 4227.23 c
4260.78 4232.63 4265.16 4237.01 4270.56 4237.01 c
4275.96 4237.01 4280.33 4232.63 4280.33 4227.23 c
f
n
4247.75 4279.37 m
4247.75 4273.97 4243.37 4269.59 4237.97 4269.59 c
4232.57 4269.59 4228.2 4273.97 4228.2 4279.37 c
4228.2 4284.77 4232.57 4289.14 4237.97 4289.14 c
4243.37 4289.14 4247.75 4284.77 4247.75 4279.37 c
f
n
4215.16 4330.69 m
4215.16 4325.29 4210.79 4320.91 4205.39 4320.91 c
4199.99 4320.91 4195.62 4325.29 4195.62 4330.69 c
4195.62 4336.09 4199.99 4340.46 4205.39 4340.46 c
4210.79 4340.46 4215.16 4336.09 4215.16 4330.69 c
f
n
4183.4 4382.82 m
4183.4 4377.42 4179.02 4373.05 4173.62 4373.05 c
4168.22 4373.05 4163.85 4377.42 4163.85 4382.82 c
4163.85 4388.22 4168.22 4392.6 4173.62 4392.6 c
4179.02 4392.6 4183.4 4388.22 4183.4 4382.82 c
f
n
4150.81 4434.14 m
4150.81 4428.74 4146.44 4424.36 4141.04 4424.36 c
4135.64 4424.36 4131.26 4428.74 4131.26 4434.14 c
4131.26 4439.54 4135.64 4443.91 4141.04 4443.91 c
4146.44 4443.91 4150.81 4439.54 4150.81 4434.14 c
f
n
4118.23 4486.27 m
4118.23 4480.88 4113.85 4476.5 4108.45 4476.5 c
4103.05 4476.5 4098.68 4480.88 4098.68 4486.27 c
4098.68 4491.67 4103.05 4496.05 4108.45 4496.05 c
4113.85 4496.05 4118.23 4491.67 4118.23 4486.27 c
f
n
4086.46 4537.59 m
4086.46 4532.2 4082.08 4527.82 4076.68 4527.82 c
4071.29 4527.82 4066.91 4532.2 4066.91 4537.59 c
4066.91 4542.99 4071.29 4547.37 4076.68 4547.37 c
4082.08 4547.37 4086.46 4542.99 4086.46 4537.59 c
f
n
4623.28 3761.29 m
4623.28 3755.89 4618.9 3751.51 4613.5 3751.51 c
4608.1 3751.51 4603.73 3755.89 4603.73 3761.29 c
4603.73 3766.69 4608.1 3771.06 4613.5 3771.06 c
4618.9 3771.06 4623.28 3766.69 4623.28 3761.29 c
f
n
4584.18 3813.42 m
4584.18 3808.02 4579.8 3803.64 4574.4 3803.64 c
4569.0 3803.64 4564.62 3808.02 4564.62 3813.42 c
4564.62 3818.82 4569.0 3823.2 4574.4 3823.2 c
4579.8 3823.2 4584.18 3818.82 4584.18 3813.42 c
f
n
4545.07 3864.74 m
4545.07 3859.34 4540.7 3854.96 4535.3 3854.96 c
4529.9 3854.96 4525.52 3859.34 4525.52 3864.74 c
4525.52 3870.14 4529.9 3874.52 4535.3 3874.52 c
4540.7 3874.52 4545.07 3870.14 4545.07 3864.74 c
f
n
4506.79 3916.88 m
4506.79 3911.48 4502.41 3907.1 4497.02 3907.1 c
4491.62 3907.1 4487.24 3911.48 4487.24 3916.88 c
4487.24 3922.27 4491.62 3926.65 4497.02 3926.65 c
4502.41 3926.65 4506.79 3922.27 4506.79 3916.88 c
f
n
4467.69 3968.2 m
4467.69 3962.8 4463.31 3958.42 4457.91 3958.42 c
4452.52 3958.42 4448.14 3962.8 4448.14 3968.2 c
4448.14 3973.59 4452.52 3977.97 4457.91 3977.97 c
4463.31 3977.97 4467.69 3973.59 4467.69 3968.2 c
f
n
4428.59 4020.33 m
4428.59 4014.93 4424.21 4010.55 4418.81 4010.55 c
4413.41 4010.55 4409.04 4014.93 4409.04 4020.33 c
4409.04 4025.73 4413.41 4030.1 4418.81 4030.1 c
4424.21 4030.1 4428.59 4025.73 4428.59 4020.33 c
f
n
4390.3 4072.46 m
4390.3 4067.06 4385.93 4062.69 4380.53 4062.69 c
4375.13 4062.69 4370.75 4067.06 4370.75 4072.46 c
4370.75 4077.86 4375.13 4082.24 4380.53 4082.24 c
4385.93 4082.24 4390.3 4077.86 4390.3 4072.46 c
f
n
4351.2 4123.78 m
4351.2 4118.38 4346.82 4114.0 4341.43 4114.0 c
4336.03 4114.0 4331.65 4118.38 4331.65 4123.78 c
4331.65 4129.18 4336.03 4133.55 4341.43 4133.55 c
4346.82 4133.55 4351.2 4129.18 4351.2 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4273.82 4227.23 m
4273.82 4221.84 4269.44 4217.46 4264.04 4217.46 c
4258.64 4217.46 4254.27 4221.84 4254.27 4227.23 c
4254.27 4232.63 4258.64 4237.01 4264.04 4237.01 c
4269.44 4237.01 4273.82 4232.63 4273.82 4227.23 c
f
n
4234.71 4279.37 m
4234.71 4273.97 4230.34 4269.59 4224.94 4269.59 c
4219.54 4269.59 4215.16 4273.97 4215.16 4279.37 c
4215.16 4284.77 4219.54 4289.14 4224.94 4289.14 c
4230.34 4289.14 4234.71 4284.77 4234.71 4279.37 c
f
n
4196.43 4330.69 m
4196.43 4325.29 4192.05 4320.91 4186.66 4320.91 c
4181.26 4320.91 4176.88 4325.29 4176.88 4330.69 c
4176.88 4336.09 4181.26 4340.46 4186.66 4340.46 c
4192.05 4340.46 4196.43 4336.09 4196.43 4330.69 c
f
n
4157.33 4382.82 m
4157.33 4377.42 4152.95 4373.05 4147.55 4373.05 c
4142.16 4373.05 4137.78 4377.42 4137.78 4382.82 c
4137.78 4388.22 4142.16 4392.6 4147.55 4392.6 c
4152.95 4392.6 4157.33 4388.22 4157.33 4382.82 c
f
n
4118.23 4434.14 m
4118.23 4428.74 4113.85 4424.36 4108.45 4424.36 c
4103.05 4424.36 4098.68 4428.74 4098.68 4434.14 c
4098.68 4439.54 4103.05 4443.91 4108.45 4443.91 c
4113.85 4443.91 4118.23 4439.54 4118.23 4434.14 c
f
n
4079.95 4486.27 m
4079.95 4480.88 4075.57 4476.5 4070.17 4476.5 c
4064.77 4476.5 4060.39 4480.88 4060.39 4486.27 c
4060.39 4491.67 4064.77 4496.05 4070.17 4496.05 c
4075.57 4496.05 4079.95 4491.67 4079.95 4486.27 c
f
n
4040.84 4537.59 m
4040.84 4532.2 4036.46 4527.82 4031.07 4527.82 c
4025.67 4527.82 4021.29 4532.2 4021.29 4537.59 c
4021.29 4542.99 4025.67 4547.37 4031.07 4547.37 c
4036.46 4547.37 4040.84 4542.99 4040.84 4537.59 c
f
n
4674.59 3761.29 m
4674.59 3755.89 4670.22 3751.51 4664.82 3751.51 c
4659.42 3751.51 4655.05 3755.89 4655.05 3761.29 c
4655.05 3766.69 4659.42 3771.06 4664.82 3771.06 c
4670.22 3771.06 4674.59 3766.69 4674.59 3761.29 c
f
n
4628.98 3813.42 m
4628.98 3808.02 4624.6 3803.64 4619.2 3803.64 c
4613.8 3803.64 4609.43 3808.02 4609.43 3813.42 c
4609.43 3818.82 4613.8 3823.2 4619.2 3823.2 c
4624.6 3823.2 4628.98 3818.82 4628.98 3813.42 c
f
n
4584.18 3864.74 m
4584.18 3859.34 4579.8 3854.96 4574.4 3854.96 c
4569.0 3854.96 4564.62 3859.34 4564.62 3864.74 c
4564.62 3870.14 4569.0 3874.52 4574.4 3874.52 c
4579.8 3874.52 4584.18 3870.14 4584.18 3864.74 c
f
n
4538.56 3916.88 m
4538.56 3911.48 4534.18 3907.1 4528.79 3907.1 c
4523.39 3907.1 4519.01 3911.48 4519.01 3916.88 c
4519.01 3922.27 4523.39 3926.65 4528.79 3926.65 c
4534.18 3926.65 4538.56 3922.27 4538.56 3916.88 c
f
n
4493.76 3968.2 m
4493.76 3962.8 4489.38 3958.42 4483.98 3958.42 c
4478.58 3958.42 4474.21 3962.8 4474.21 3968.2 c
4474.21 3973.59 4478.58 3977.97 4483.98 3977.97 c
4489.38 3977.97 4493.76 3973.59 4493.76 3968.2 c
f
n
4448.14 4020.33 m
4448.14 4014.93 4443.76 4010.55 4438.36 4010.55 c
4432.96 4010.55 4428.59 4014.93 4428.59 4020.33 c
4428.59 4025.73 4432.96 4030.1 4438.36 4030.1 c
4443.76 4030.1 4448.14 4025.73 4448.14 4020.33 c
f
n
4403.34 4072.46 m
4403.34 4067.06 4398.96 4062.69 4393.56 4062.69 c
4388.16 4062.69 4383.79 4067.06 4383.79 4072.46 c
4383.79 4077.86 4388.16 4082.24 4393.56 4082.24 c
4398.96 4082.24 4403.34 4077.86 4403.34 4072.46 c
f
n
4357.72 4123.78 m
4357.72 4118.38 4353.34 4114.0 4347.95 4114.0 c
4342.55 4114.0 4338.17 4118.38 4338.17 4123.78 c
4338.17 4129.18 4342.55 4133.55 4347.95 4133.55 c
4353.34 4133.55 4357.72 4129.18 4357.72 4123.78 c
f
n
4312.92 4175.91 m
4312.92 4170.52 4308.54 4166.14 4303.14 4166.14 c
4297.74 4166.14 4293.37 4170.52 4293.37 4175.91 c
4293.37 4181.31 4297.74 4185.69 4303.14 4185.69 c
4308.54 4185.69 4312.92 4181.31 4312.92 4175.91 c
f
n
4267.3 4227.23 m
4267.3 4221.84 4262.92 4217.46 4257.52 4217.46 c
4252.12 4217.46 4247.75 4221.84 4247.75 4227.23 c
4247.75 4232.63 4252.12 4237.01 4257.52 4237.01 c
4262.92 4237.01 4267.3 4232.63 4267.3 4227.23 c
f
n
4221.68 4279.37 m
4221.68 4273.97 4217.3 4269.59 4211.91 4269.59 c
4206.51 4269.59 4202.13 4273.97 4202.13 4279.37 c
4202.13 4284.77 4206.51 4289.14 4211.91 4289.14 c
4217.3 4289.14 4221.68 4284.77 4221.68 4279.37 c
f
n
4176.88 4330.69 m
4176.88 4325.29 4172.5 4320.91 4167.11 4320.91 c
4161.71 4320.91 4157.33 4325.29 4157.33 4330.69 c
4157.33 4336.09 4161.71 4340.46 4167.11 4340.46 c
4172.5 4340.46 4176.88 4336.09 4176.88 4330.69 c
f
n
4131.26 4382.82 m
4131.26 4377.42 4126.89 4373.05 4121.49 4373.05 c
4116.09 4373.05 4111.71 4377.42 4111.71 4382.82 c
4111.71 4388.22 4116.09 4392.6 4121.49 4392.6 c
4126.89 4392.6 4131.26 4388.22 4131.26 4382.82 c
f
n
4086.46 4434.14 m
4086.46 4428.74 4082.08 4424.36 4076.68 4424.36 c
4071.29 4424.36 4066.91 4428.74 4066.91 4434.14 c
4066.91 4439.54 4071.29 4443.91 4076.68 4443.91 c
4082.08 4443.91 4086.46 4439.54 4086.46 4434.14 c
f
n
4040.84 4486.27 m
4040.84 4480.88 4036.46 4476.5 4031.07 4476.5 c
4025.67 4476.5 4021.29 4480.88 4021.29 4486.27 c
4021.29 4491.67 4025.67 4496.05 4031.07 4496.05 c
4036.46 4496.05 4040.84 4491.67 4040.84 4486.27 c
f
n
3996.04 4537.59 m
3996.04 4532.2 3991.66 4527.82 3986.27 4527.82 c
3980.87 4527.82 3976.49 4532.2 3976.49 4537.59 c
3976.49 4542.99 3980.87 4547.37 3986.27 4547.37 c
3991.66 4547.37 3996.04 4542.99 3996.04 4537.59 c
f
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 2750.54 4059.77 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
[/DeviceCMYK] cs 0.0 0.0 0.0 1.0 sc
%ADOBeginSubsetFont: UUPBAA+CMSY10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /UUPBAA+CMSY10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-0 -960 943 750} def
end
systemdict begin
dup /Private
12 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705] def
/OtherBlues [-124 -119] def
/BlueScale 0.04379 def
/StdHW [40] def
/StdVW [85] def
/StemSnapH [40 55] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9C4A637> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 0 /minus/periodcentered/multiply/asteriskmath 12 /circledot 15 /bullet
20 /lessequal/greaterequal 24 /similar/approxequal 28 /lessmuch 32 /space
/arrowright/quotedbl/numbersign/dollar/percent/ampersand
/quotesingle/parenleft/parenright/asterisk/plus/comma
/hyphen/period/slash/zero/one/element
/three/four/five/six/seven/eight
/nine/colon/semicolon/less/equal/greater
/question/at/A/B/C/D
/E/F/G/H/I/J
/K/L/M/N/O/P
/Q/R/S/T/U/V
/W/X/Y/Z/bracketleft/backslash
/bracketright/asciicircum/underscore/grave/a/b
/c/d/e/braceleft/braceright/angbracketleft
/angbracketright/bar/bardbl/l/m/backslash
/o/radical/q/r/s/t
/u/v/w/x/dagger/daggerdbl
/braceleft/bar/braceright/asciitilde/bullet/Euro
/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger
/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright
/quotedblleft/quotedblright/bullet/endash/emdash/tilde
/trademark/scaron/guilsinglright/oe/bullet/zcaron
/Ydieresis/space/exclamdown/cent/sterling/currency
/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree
/plusminus/twosuperior/threesuperior/acute/mu/paragraph
/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter
/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex
/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave
/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex
/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute
/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae
/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave
/iacute/icircumflex/idieresis/eth/ntilde/ograve
/oacute/ocircumflex/otilde/odieresis/divide/oslash
/ugrave/uacute/ucircumflex/udieresis/yacute/thorn
/ydieresis
/N33 (UUPBAA+CMSY10) -1 TZ
377.062 364.327 m
%ADOBeginSubsetFont: UUPBAA+CMSY10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/UUPBAA+CMSY10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/minus <1C60D8A8C9B08A946182837629008DF7702985522C1BEB432204C2EF
9CAB07AB654895DD8804EF7ED97DE3E2616CBB2FB21BE3D9> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/UUPBAA+CMSY10 findfont /Encoding get
dup 0 /minus put
pop
end
+%ADOEndSubsetFont
+/N33 10.6637 Tf
(\000) show
385.391 364.327 m
%ADOBeginSubsetFont: QZEBAA+CMR10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/QZEBAA+CMR10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/zero <1C60D8A8C9B7A73D3B2D32309B1F5D5A32FC3614834F8BC61B6EB92C1
2484BD76628737DA40CF9DA1C97CCDAFB1D1B732C642F74A7C41B7D3AC6DAF8D
1E760692B6EBD2417EF1893A4AA0B1CF049D4C54D830CEC073A9153D451FAD42
892B0930AEE4FE18588336BFDAD60D8A4F4CFFED76F103FB9BBD8A33EFBA3F18
232B88D88FE54E17260FA3E2CC29DEC0CB72B88DC816FF5> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/QZEBAA+CMR10 findfont /Encoding get
dup 48 /zero put
pop
end
+%ADOEndSubsetFont
+/N41 10.6637 Tf
(0) show
%ADOBeginSubsetFont: ARHAAA+CMMI10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /ARHAAA+CMMI10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-13 -250 1044 750} def
end
systemdict begin
dup /Private
12 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705 431 442 453 466] def
/OtherBlues [-205 -194] def
/BlueScale 0.04379 def
/StdHW [31] def
/StdVW [72] def
/StemSnapH [25 31] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 1 /dotlessi/caron 11 /alpha/beta 14 /delta 21 /lambda
/mu 24 /xi/pi 27 /sigma 30 /phi/chi
/psi/exclam/epsilon/theta1/dollar/percent
/ampersand/phi1/parenleft/parenright/asterisk/plus
/comma/hyphen/period/slash/zero/one
/two/three/four/five/six/seven
/eight/nine/period/comma/less/slash
/greater/question/at/A/B/C
/D/E/F/G/H/I
/J/K/L/M/N/O
/P/Q/R/S/T/U
/V/W/X/Y/Z/bracketleft
/backslash/bracketright/asciicircum/underscore/grave/a
/b/c/d/e/f/g
/h/i/j/k/l/m
/n/o/p/q/r/s
/t/u/v/w/x/y
/z/braceleft/bar/braceright/asciitilde/bullet
/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft
/OE/bullet/Zcaron/bullet/bullet/quoteleft
/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
/tilde/trademark/scaron/guilsinglright/oe/bullet
/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright
/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
/degree/plusminus/twosuperior/threesuperior/acute/mu
/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright
/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute
/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave
/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring
/ae/ccedilla/egrave/eacute/ecircumflex/edieresis
/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex/udieresis/yacute
/thorn/ydieresis
/N21 (ARHAAA+CMMI10) -1 TZ
390.669 364.327 m
%ADOBeginSubsetFont: ARHAAA+CMMI10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/ARHAAA+CMMI10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/period <1C60D8A8C9B08A9570810981675968F2C907C696DFE9BE69433F613
9DF6C45B8165ACC43B6E0B309859F778ABCF0> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/ARHAAA+CMMI10 findfont /Encoding get
dup 58 /period put
pop
end
+%ADOEndSubsetFont
+/N21 10.6637 Tf
(:) show
393.602 364.327 m
/N41 10.6637 Tf
(500)
[33.9455 37.2557 5.27853 ] pdfxs
470.082 364.327 m
/N21 10.6637 Tf
(:) show
473.014 364.327 m
/N41 10.6637 Tf
(5) show
362.138 372.965 m
/N33 10.6637 Tf
(\000) show
370.467 372.965 m
/N41 10.6637 Tf
(0) show
375.745 372.965 m
/N21 10.6637 Tf
(:) show
378.678 372.965 m
/N41 10.6637 Tf
(5) show
380.417 413.959 m
(0) show
371.933 455.34 m
(0) show
377.211 455.34 m
/N21 10.6637 Tf
(:) show
380.144 455.34 m
/N41 10.6637 Tf
(5) show
Q
Q
Q
/ARHAAA+CMMI10 /Font _pdfUndefineResource
/N21 /Font _pdfUndefineResource
/UUPBAA+CMSY10 /Font _pdfUndefineResource
/N33 /Font _pdfUndefineResource
/QZEBAA+CMR10 /Font _pdfUndefineResource
/N41 /Font _pdfUndefineResource
[/EMC PDFMark5
PDFVars/TermAll get exec end end
%%PageTrailer
%%Trailer
%%EOF
\ No newline at end of file
diff --git a/doc/tutorial/images/linogram_grid.pdf b/doc/tutorial/images/linogram_grid.pdf
new file mode 100644
index 0000000..fa4ba3e
Binary files /dev/null and b/doc/tutorial/images/linogram_grid.pdf differ
diff --git a/doc/tutorial/images/modified_polar_grid.eps b/doc/tutorial/images/modified_polar_grid.eps
new file mode 100644
index 0000000..a28ea5f
--- /dev/null
+++ b/doc/tutorial/images/modified_polar_grid.eps
@@ -0,0 +1,87 @@
+%!PS-Adobe-3.0 EPSF-3.0
%%Title: (paper.dvi)
%%Version: 1 3
%%Creator: Adobe Acrobat 7.0
%%CreationDate: 20/10/06 15:23
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%ADO_ContainsXMP: MainFirst
%%BoundingBox: 237 364 352 463
%%HiResBoundingBox: 237.407 364.169 352.491 462.502
%%Pages: 0
%%DocumentProcessColors: Cyan Magenta Yellow Black
%%DocumentSuppliedResources:
%%+ procset (Adobe Acrobat - PDF operators) 1.2 0
%%+ procset (Adobe Acrobat - type operators) 1.2 0
%%EndComments
%%BeginProlog
%%EndProlog
%%BeginSetup
%ADOPrintSettings: L2 W0 VM op crd os scsa T h ef bg ucr sf ef r b fa pr seps ttf hb EF t2 irt Printer/PostScript Color Management 0
+
%%BeginResource: procset l2check 6.0 1
%%Copyright: Copyright 1993,2001 Adobe Systems Incorporated. All Rights Reserved.
systemdict /languagelevel known
{ systemdict /languagelevel get 1 eq }
{ true }
ifelse
{
initgraphics /Helvetica findfont 18 scalefont setfont
72 600 moveto (Error: This application does not support) dup show
72 580 moveto (printing to a PostScript Language Level 1 printer.) dup show
exch = =
/Times-Roman findfont 16 scalefont setfont
72 500 moveto (As a workaround, try selecting Print As Image from) show
72 480 moveto (the Advanced Print dialog.) show
showpage
quit
}
if
%%EndResource
%%BeginResource: file Pscript_CFF PSVER
userdict /ct_CffDict 6 dict put
ct_CffDict begin
/F0Subr
{
systemdict /internaldict known
{
1183615869 systemdict /internaldict get exec
/FlxProc known {save true} {false} ifelse
}
{
userdict /internaldict known not
{
userdict /internaldict
{
count 0 eq
{/internaldict errordict /invalidaccess get exec} if
dup type /integertype ne
{/internaldict errordict /invalidaccess get exec} if
dup 1183615869 eq
{pop 0}
{/internaldict errordict /invalidaccess get exec}
ifelse
}
dup 14 get 1 25 dict put
bind executeonly put
} if
1183615869 userdict /internaldict get exec
/FlxProc known {save true} {false} ifelse
} ifelse
[
systemdict /internaldict known not
{ 100 dict /begin cvx /mtx matrix /def cvx } if
systemdict /currentpacking known {currentpacking true setpacking} if
{
systemdict /internaldict known {
1183615869 systemdict /internaldict get exec
dup /$FlxDict known not {
dup dup length exch maxlength eq
{ pop userdict dup /$FlxDict known not
{ 100 dict begin /mtx matrix def
dup /$FlxDict currentdict put end } if }
{ 100 dict begin /mtx matrix def
dup /$FlxDict currentdict put end }
ifelse
} if /$FlxDict get begin } if
grestore
/exdef {exch def} def
/dmin exch abs 100 div def
/epX exdef /epY exdef
/c4y2 exdef /c4x2 exdef /c4y1 exdef /c4x1 exdef /c4y0 exdef /c4x0 exdef
/c3y2 exdef /c3x2 exdef /c3y1 exdef /c3x1 exdef /c3y0 exdef /c3x0 exdef
/c1y2 exdef /c1x2 exdef /c2x2 c4x2 def /c2y2 c4y2 def
/yflag c1y2 c3y2 sub abs c1x2 c3x2 sub abs gt def
/PickCoords {
{c1x0 c1y0 c1x1 c1y1 c1x2 c1y2 c2x0 c2y0 c2x1 c2y1 c2x2 c2y2}
{c3x0 c3y0 c3x1 c3y1 c3x2 c3y2 c4x0 c4y0 c4x1 c4y1 c4x2 c4y2}
ifelse
/y5 exdef /x5 exdef /y4 exdef /x4 exdef /y3 exdef /x3 exdef
/y2 exdef /x2 exdef /y1 exdef /x1 exdef /y0 exdef /x0 exdef
} def
mtx currentmatrix pop
mtx 0 get abs .00001 lt mtx 3 get abs .00001 lt or
{/flipXY -1 def}
{mtx 1 get abs .00001 lt mtx 2 get abs .00001 lt or
{/flipXY 1 def}
{/flipXY 0 def}
ifelse }
ifelse
/erosion 1 def
systemdict /internaldict known {
1183615869 systemdict /internaldict get exec dup
/erosion known
{/erosion get /erosion exch def}
{pop}
ifelse
} if
yflag
{
flipXY 0 eq c3y2 c4y2 eq or
{false PickCoords}
{
/shrink c3y2 c4y2 eq
{0}{c1y2 c4y2 sub c3y2 c4y2 sub div abs} ifelse def
/yshrink {c4y2 sub shrink mul c4y2 add} def
/c1y0 c3y0 yshrink def /c1y1 c3y1 yshrink def
/c2y0 c4y0 yshrink def /c2y1 c4y1 yshrink def
/c1x0 c3x0 def /c1x1 c3x1 def /c2x0 c4x0 def /c2x1 c4x1 def
/dY 0 c3y2 c1y2 sub round
dtransform flipXY 1 eq {exch} if pop abs def
dY dmin lt PickCoords
y2 c1y2 sub abs 0.001 gt {
c1x2 c1y2 transform flipXY 1 eq {exch} if
/cx exch def /cy exch def
/dY 0 y2 c1y2 sub round dtransform flipXY 1 eq {exch}
if pop def
dY round dup 0 ne
{/dY exdef }
{pop dY 0 lt {-1}{1} ifelse /dY exdef}
ifelse
/erode PaintType 2 ne erosion 0.5 ge and def
erode {/cy cy 0.5 sub def} if
/ey cy dY add def
/ey ey ceiling ey sub ey floor add def
erode {/ey ey 0.5 add def} if
ey cx flipXY 1 eq {exch} if itransform exch pop
y2 sub /eShift exch def
/y1 y1 eShift add def /y2 y2 eShift add def /y3 y3
eShift add def
} if
} ifelse
}
{
flipXY 0 eq c3x2 c4x2 eq or
{false PickCoords }
{ /shrink c3x2 c4x2 eq
{0}{c1x2 c4x2 sub c3x2 c4x2 sub div abs} ifelse def
/xshrink {c4x2 sub shrink mul c4x2 add} def
/c1x0 c3x0 xshrink def /c1x1 c3x1 xshrink def
/c2x0 c4x0 xshrink def /c2x1 c4x1 xshrink def
/c1y0 c3y0 def /c1y1 c3y1 def /c2y0 c4y0 def /c2y1 c4y1 def
/dX c3x2 c1x2 sub round 0 dtransform
flipXY -1 eq {exch} if pop abs def
dX dmin lt PickCoords
x2 c1x2 sub abs 0.001 gt {
c1x2 c1y2 transform flipXY -1 eq {exch} if
/cy exch def /cx exch def
/dX x2 c1x2 sub round 0 dtransform flipXY -1 eq {exch} if pop def
dX round dup 0 ne
{/dX exdef}
{pop dX 0 lt {-1}{1} ifelse /dX exdef}
ifelse
/erode PaintType 2 ne erosion .5 ge and def
erode {/cx cx .5 sub def} if
/ex cx dX add def
/ex ex ceiling ex sub ex floor add def
erode {/ex ex .5 add def} if
ex cy flipXY -1 eq {exch} if itransform pop
x2 sub /eShift exch def
/x1 x1 eShift add def /x2 x2 eShift add def /x3 x3 eShift add def
} if
} ifelse
} ifelse
x2 x5 eq y2 y5 eq or
{x5 y5 lineto }
{x0 y0 x1 y1 x2 y2 curveto
x3 y3 x4 y4 x5 y5 curveto}
ifelse
epY epX
}
systemdict /currentpacking known {exch setpacking} if
/exec cvx /end cvx
] cvx
executeonly
exch
{pop true exch restore}
{
systemdict /internaldict known not
{1183615869 userdict /internaldict get exec
exch /FlxProc exch put true}
{1183615869 systemdict /internaldict get exec
dup length exch maxlength eq
{false}
{1183615869 systemdict /internaldict get exec
exch /FlxProc exch put true}
ifelse}
ifelse
} ifelse
{
systemdict /internaldict known
{1183615869 systemdict /internaldict get exec /FlxProc get exec}
{1183615869 userdict /internaldict get exec /FlxProc get exec}
ifelse
} if
} executeonly def
/F1Subr
{gsave currentpoint newpath moveto} bind def
/F2Subr
{currentpoint grestore gsave currentpoint newpath moveto} bind def
/HSSubr
{
systemdict /internaldict known not
{pop 3}
{1183615869 systemdict /internaldict get exec
dup /startlock known
{/startlock get exec}
{dup /strtlck known
{/strtlck get exec}
{pop 3}
ifelse}
ifelse}
ifelse
} bind def
end
%%EndResource
/currentpacking where{pop currentpacking true setpacking}if
%%BeginResource: procset pdfvars 6.0 1
%%Copyright: Copyright 1987-2002 Adobe Systems Incorporated. All Rights Reserved.
%%Title: definition of dictionary of variables used by PDF & PDFText procsets
userdict /PDF 162 dict put
userdict /PDFVars 89 dict dup begin put
/docSetupDone false def
/InitAll 0 def
/TermAll 0 def
/DocInitAll 0 def
/DocTermAll 0 def
/_pdfEncodings 2 array def
/_pdf_str1 1 string def
/_pdf_i 0 def
/_pdf_na 0 def
/_pdf_showproc 0 def
/_italMtx [1 0 .212557 1 0 0] def
/_italMtx_WMode1 [1 -.212557 0 1 0 0] def
/_italMtxType0 [1 0 .1062785 1 0 0] def
/_italMtx_WMode1Type0 [1 -.1062785 0 1 0 0] def
/_basefont 0 def
/_basefonto 0 def
/_pdf_oldCIDInit null def
/_pdf_FontDirectory 30 dict def
/_categories 10 dict def
/_sa? true def
/_ColorSep5044? false def
/nulldict 0 dict def
/_processColors 0 def
/overprintstack null def
/_defaulttransfer currenttransfer def
/_defaultflatness currentflat def
/_defaulthalftone null def
/_defaultcolortransfer null def
/_defaultblackgeneration null def
/_defaultundercolorremoval null def
/_defaultcolortransfer null def
PDF begin
[/c/cs/cm/d/d0/f/h/i/j/J/l/m/M/n/q/Q/re/ri/S/sc/sh/Tf/w/W
/applyInterpFunc/applystitchFunc/domainClip/encodeInput
/initgs/int/limit/rangeClip
/defineRes/undefineRes/findRes/setSA/pl
/? /! /| /: /+ /GetGlyphDirectory
/pdf_flushFilters /pdf_readstring /pdf_dictOp /pdf_image /pdf_maskedImage
/pdf_shfill /pdf_sethalftone
] {null def} bind forall
end
end
%%EndResource
PDFVars begin PDF begin
%%BeginResource: procset pdfutil 6.0 1
%%Copyright: Copyright 1993-2001 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Basic utilities used by other PDF procsets
/bd {bind def} bind def
/ld {load def} bd
/bld {
dup length dict begin
{ null def } forall
bind
end
def
} bd
/dd { PDFVars 3 1 roll put } bd
/xdd { exch dd } bd
/Level2?
systemdict /languagelevel known
{ systemdict /languagelevel get 2 ge } { false } ifelse
def
/Level1? Level2? not def
/Level3?
systemdict /languagelevel known
{systemdict /languagelevel get 3 eq } { false } ifelse
def
/getifknown {
2 copy known { get true } { pop pop false } ifelse
} bd
/here {
currentdict exch getifknown
} bd
/isdefined? { where { pop true } { false } ifelse } bd
%%EndResource
%%BeginResource: procset pdf 6.0 1
%%Copyright: Copyright 1998-2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: General operators for PDF, common to all Language Levels.
/cm { matrix astore concat } bd
/d /setdash ld
/f /fill ld
/h /closepath ld
/i {dup 0 eq {pop _defaultflatness} if setflat} bd
/j /setlinejoin ld
/J /setlinecap ld
/M /setmiterlimit ld
/n /newpath ld
/S /stroke ld
/w /setlinewidth ld
/W /clip ld
/sg /setgray ld
/initgs {
0 setgray
[] 0 d
0 j
0 J
10 M
1 w
false setSA
/_defaulttransfer load settransfer
0 i
/RelativeColorimetric ri
newpath
} bd
/int {
dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul
exch pop add exch pop
} bd
/limit {
dup 2 index le { exch } if pop
dup 2 index ge { exch } if pop
} bd
/domainClip {
Domain aload pop 3 2 roll
limit
} [/Domain] bld
/applyInterpFunc {
0 1 DimOut 1 sub
{
dup C0 exch get exch
dup C1 exch get exch
3 1 roll
1 index sub
3 index
N exp mul add
exch
currentdict /Range_lo known
{
dup Range_lo exch get exch
Range_hi exch get
3 2 roll limit
}
{
pop
}
ifelse
exch
} for
pop
} [/DimOut /C0 /C1 /N /Range_lo /Range_hi] bld
/encodeInput {
NumParts 1 sub
0 1 2 index
{
dup Bounds exch get
2 index gt
{ exit }
{ dup
3 index eq
{ exit }
{ pop } ifelse
} ifelse
} for
3 2 roll pop
dup Bounds exch get exch
dup 1 add Bounds exch get exch
2 mul
dup Encode exch get exch
1 add Encode exch get
int
} [/NumParts /Bounds /Encode] bld
/rangeClip {
exch dup Range_lo exch get
exch Range_hi exch get
3 2 roll
limit
} [/Range_lo /Range_hi] bld
/applyStitchFunc {
Functions exch get exec
currentdict /Range_lo known {
0 1 DimOut 1 sub {
DimOut 1 add -1 roll
rangeClip
} for
} if
} [/Functions /Range_lo /DimOut] bld
/pdf_flushfilters
{
aload length
{ dup status
1 index currentfile ne and
{ dup flushfile closefile }
{ pop }
ifelse
} repeat
} bd
/pdf_readstring
{
1 index dup length 1 sub get
exch readstring pop
exch pdf_flushfilters
} bind def
/pdf_dictOp
{
3 2 roll
10 dict copy
begin
_Filters dup length 1 sub get def
currentdict exch exec
_Filters pdf_flushfilters
end
} [/_Filters] bld
/pdf_imagemask {{imagemask} /DataSource pdf_dictOp} bd
/pdf_shfill {{sh} /DataSource pdf_dictOp} bd
/pdf_sethalftone {{sethalftone} /Thresholds pdf_dictOp} bd
/masks [ 2#10000000
2#11000000
2#11100000
2#11110000
2#11111000
2#11111100
2#11111110
2#11111111 ] def
/addNBits
{
/numBits exch def
/byte exch def
OutBitOffset numBits add 8 gt
{
byte OutBitOffset 8 sub bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutByteIndex OutByteIndex 1 add def
/bitsDoneSoFar OutBitOffset def
/OutBitOffset numBits 8 OutBitOffset sub sub def
OutBitOffset 0 gt
{
byte bitsDoneSoFar bitshift
masks numBits bitsDoneSoFar sub get and
OutBuffer OutByteIndex 3 -1 roll put
} if
}
{
byte masks numBits 1 sub get and
OutBitOffset neg bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutBitOffset OutBitOffset numBits add def
OutBitOffset 8 eq
{
/OutBitOffset 0 def
/OutByteIndex OutByteIndex 1 add def
} if
} ifelse
} bind def
/DevNNFilter
{
/InBuffer Width NumComps mul BitsPerComponent mul 7 add 8 idiv string def
AllSource InBuffer readstring pop pop
/outlen Width NewNumComps mul BitsPerComponent mul 7 add 8 idiv def
/OutBuffer outlen string def
0 1 outlen 1 sub { OutBuffer exch 0 put } for
/InByteIndex 0 def
/InBitOffset 0 def
/OutByteIndex 0 def
/OutBitOffset 0 def
/KeepArray NumComps array def
0 1 NumComps 1 sub { KeepArray exch true put } for
DevNNones { KeepArray exch false put } forall
Width {
KeepArray
{
{
/bitsLeft BitsPerComponent def
{
bitsLeft 0 le { exit } if
/bitsToDo 8 InBitOffset sub dup bitsLeft gt { pop bitsLeft } if def
InBuffer InByteIndex get
InBitOffset bitshift
bitsToDo addNBits
/bitsLeft bitsLeft bitsToDo sub def
InBitOffset bitsToDo add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
} loop
}
{
InBitOffset BitsPerComponent add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
}
ifelse
}
forall
} repeat
OutBuffer
} bd
/pdf_image
{
20 dict copy
begin
/UnusedNones where { /UnusedNones get}{false} ifelse
{
/NumComps Decode length 2 div cvi def
/OrigDecode Decode def
/NumNones DevNNones length def
/NewNumComps NumComps NumNones sub def
/Decode NewNumComps 2 mul cvi array def
/devNNindx 0 def
/decIndx 0 def
/cmpIndx 0 def
NumComps {
cmpIndx DevNNones devNNindx get eq
{
/devNNindx devNNindx 1 add dup NumNones eq {pop 0} if def
}
{
Decode decIndx OrigDecode cmpIndx 2 mul get put
Decode decIndx 1 add OrigDecode cmpIndx 2 mul 1 add get put
/decIndx decIndx 2 add def
} ifelse
/cmpIndx cmpIndx 1 add def
} repeat
_Filters dup length 1 sub get /AllSource exch def
/DataSource { DevNNFilter } def
}
{ _Filters dup length 1 sub get /DataSource exch def }
ifelse
currentdict image
_Filters pdf_flushfilters
end
} bd
/pdf_maskedImage
{
10 dict copy begin
/miDict currentdict def
/DataDict DataDict 10 dict copy def
DataDict begin
/DataSource
_Filters dup length 1 sub get
def
miDict image
_Filters pdf_flushfilters
end
miDict /InterleaveType get 3 eq
{ MaskDict /DataSource get dup type /filetype eq { closefile } { pop } ifelse }
if
end
} [/miDict /DataDict /_Filters] bld
/RadialShade {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/r2 exch def
/c2y exch def
/c2x exch def
/r1 exch def
/c1y exch def
/c1x exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
c1x c2x eq
{
c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope c2y c1y sub c2x c1x sub div def
/theta slope 1 atan def
c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
c1x c1y translate
theta rotate
-90 rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
/max { 2 copy gt { pop } {exch pop} ifelse } bind def
/min { 2 copy lt { pop } {exch pop} ifelse } bind def
rampdict begin
40 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
c1x c1y translate
theta rotate
-90 rotate
/c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
/c1y 0 def
/c1x 0 def
/c2x 0 def
ext0 {
0 getrampcolor
c2y r2 add r1 sub 0.0001 lt
{
c1x c1y r1 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2y r1 add r2 le
{
c1x c1y r1 0 360 arc
fill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r1 neg def
/p1y c1y def
/p2x r1 def
/p2y c1y def
p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y p1x SS1 div neg def
/SS2 90 theta sub dup sin exch cos div def
/p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y p2x SS2 div neg def
r1 r2 gt
{
/L1maxX p1x yMin p1y sub SS1 div add def
/L2maxX p2x yMin p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
c1x c2x sub dup mul
c1y c2y sub dup mul
add 0.5 exp
0 dtransform
dup mul exch dup mul add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
/hires exch def
hires mul
/numpix exch def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
/xInc c2x c1x sub numsteps div def
/yInc c2y c1y sub numsteps div def
/rInc r2 r1 sub numsteps div def
/cx c1x def
/cy c1y def
/radius r1 def
newpath
xInc 0 eq yInc 0 eq rInc 0 eq and and
{
0 getrampcolor
cx cy radius 0 360 arc
stroke
NumSamples 1 sub getrampcolor
cx cy radius 72 hires div add 0 360 arc
0 setlinewidth
stroke
}
{
0
numsteps
{
dup
subsampling { round } if
getrampcolor
cx cy radius 0 360 arc
/cx cx xInc add def
/cy cy yInc add def
/radius radius rInc add def
cx cy radius 360 0 arcn
eofill
rampIndxInc add
}
repeat
pop
} ifelse
ext1 {
c2y r2 add r1 lt
{
c2x c2y r2 0 360 arc
fill
}
{
c2y r1 add r2 sub 0.0001 le
{
c2x c2y r2 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r2 neg def
/p1y c2y def
/p2x r2 def
/p2y c2y def
p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y c2y p1x SS1 div sub def
/SS2 90 theta sub dup sin exch cos div def
/p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y c2y p2x SS2 div sub def
r1 r2 lt
{
/L1maxX p1x yMax p1y sub SS1 div add def
/L2maxX p2x yMax p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
grestore
grestore
end
end
end
} ifelse
} bd
/GenStrips {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/y2 exch def
/x2 exch def
/y1 exch def
/x1 exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
x1 x2 eq
{
y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope y2 y1 sub x2 x1 sub div def
/theta slope 1 atan def
x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
x1 y1 translate
theta rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
rampdict begin
20 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
x1 y1 translate
theta rotate
/xStart 0 def
/xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
/ySpan yMax yMin sub def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
xStart 0 transform
xEnd 0 transform
3 -1 roll
sub dup mul
3 1 roll
sub dup mul
add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
mul
/numpix exch def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
ext0 {
0 getrampcolor
xMin xStart lt
{ xMin yMin xMin neg ySpan rectfill } if
} if
/xInc xEnd xStart sub numsteps div def
/x xStart def
0
numsteps
{
dup
subsampling { round } if
getrampcolor
x yMin xInc ySpan rectfill
/x x xInc add def
rampIndxInc add
}
repeat
pop
ext1 {
xMax xEnd gt
{ xEnd yMin xMax xEnd sub ySpan rectfill } if
} if
grestore
grestore
end
end
end
} ifelse
} bd
/currentdistillerparams where { pop currentdistillerparams /CoreDistVersion get 5000 lt}{true}ifelse
{
/PDFMark5 {cleartomark} bd
}
{
/PDFMark5 {pdfmark} bd
}ifelse
/ReadByPDFMark5
{
2 dict begin
/makerString exch def string /tmpString exch def
{
currentfile tmpString readline pop
makerString anchorsearch
{
pop pop cleartomark exit
}
{
3 copy /PUT PDFMark5 pop 2 copy (\n) /PUT PDFMark5
} ifelse
}loop
end
}bd
%%EndResource
%%BeginResource: procset pdflev2 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: PDF operators, with code specific for Level 2
/docinitialize {
PDF begin
/_defaulthalftone currenthalftone dd
/_defaultblackgeneration currentblackgeneration dd
/_defaultundercolorremoval currentundercolorremoval dd
/_defaultcolortransfer [currentcolortransfer] dd
/_defaulttransfer currenttransfer dd
end
PDFVars /docSetupDone true put
} bd
/initialize {
PDFVars /docSetupDone get {
_defaulthalftone sethalftone
/_defaultblackgeneration load setblackgeneration
/_defaultundercolorremoval load setundercolorremoval
_defaultcolortransfer aload pop setcolortransfer
} if
false setoverprint
} bd
/terminate { } bd
/c /curveto ld
/cs /setcolorspace ld
/l /lineto ld
/m /moveto ld
/q /gsave ld
/Q /grestore ld
/sc /setcolor ld
/setSA/setstrokeadjust ld
/re {
4 2 roll m
1 index 0 rlineto
0 exch rlineto
neg 0 rlineto
h
} bd
/concattransferfuncs {
[ 3 1 roll /exec load exch /exec load ] cvx
} bd
/concatandsettransfer {
/_defaulttransfer load concattransferfuncs settransfer
} bd
/concatandsetcolortransfer {
_defaultcolortransfer aload pop
8 -1 roll 5 -1 roll concattransferfuncs 7 1 roll
6 -1 roll 4 -1 roll concattransferfuncs 5 1 roll
4 -1 roll 3 -1 roll concattransferfuncs 3 1 roll
concattransferfuncs
setcolortransfer
} bd
/defineRes/defineresource ld
/undefineRes/undefineresource ld
/findRes/findresource ld
currentglobal
true systemdict /setglobal get exec
[/Function /ExtGState /Form /Shading /FunctionDictionary /MadePattern /PatternPrototype /DataSource /Image]
{ /Generic /Category findresource dup length dict copy /Category defineresource pop }
forall
systemdict /setglobal get exec
/ri
{
/findcolorrendering isdefined?
{
mark exch
findcolorrendering
counttomark 2 eq
{ type /booleantype eq
{ dup type /nametype eq
{ dup /ColorRendering resourcestatus
{ pop pop
dup /DefaultColorRendering ne
{
/ColorRendering findresource
setcolorrendering
} if
} if
} if
} if
} if
cleartomark
}
{ pop
} ifelse
} bd
/knownColorants? {
pop false
} bd
/getrampcolor {
cvi
/indx exch def
0 1 NumComp 1 sub {
dup
Samples exch get
dup type /stringtype eq { indx get } if
exch
Scaling exch get aload pop
3 1 roll
mul add
} for
setcolor
} bd
/sssetbackground { aload pop setcolor } bd
%%EndResource
%%BeginResource: procset pdftext 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Text operators for PDF
PDF /PDFText 78 dict dup begin put
/docinitialize
{
/resourcestatus where {
pop
/CIDParams /ProcSet resourcestatus {
pop pop
false /CIDParams /ProcSet findresource /SetBuildCompatible get exec
} if
} if
PDF begin
PDFText /_pdfDefineIdentity-H known
{ PDFText /_pdfDefineIdentity-H get exec}
if
end
} bd
/initialize {
PDFText begin
} bd
/terminate { end } bd
Level2?
{
/_safeput
{
3 -1 roll load 3 1 roll put
}
bd
}
{
/_safeput
{
2 index load dup dup length exch maxlength ge
{ dup length 5 add dict copy
3 index xdd
}
{ pop }
ifelse
3 -1 roll load 3 1 roll put
}
bd
}
ifelse
/pdf_has_composefont? systemdict /composefont known def
/CopyFont {
{
1 index /FID ne 2 index /UniqueID ne and
{ def } { pop pop } ifelse
} forall
} bd
/Type0CopyFont
{
exch
dup length dict
begin
CopyFont
[
exch
FDepVector
{
dup /FontType get 0 eq
{
1 index Type0CopyFont
/_pdfType0 exch definefont
}
{
/_pdfBaseFont exch
2 index exec
}
ifelse
exch
}
forall
pop
]
/FDepVector exch def
currentdict
end
} bd
Level2? {currentglobal true setglobal} if
/cHexEncoding
[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
Level2? {setglobal} if
/modEnc {
/_enc xdd
/_icode 0 dd
counttomark 1 sub -1 0
{
index
dup type /nametype eq
{
_enc _icode 3 -1 roll put
_icode 1 add
}
if
/_icode xdd
} for
cleartomark
_enc
} bd
/trEnc {
/_enc xdd
255 -1 0 {
exch dup -1 eq
{ pop /.notdef }
{ Encoding exch get }
ifelse
_enc 3 1 roll put
} for
pop
_enc
} bd
/TE {
/_i xdd
StandardEncoding 256 array copy modEnc
_pdfEncodings exch _i exch put
} bd
Level2?
{
/pdfPatchCStrings
{
currentdict /CharStrings known currentdict /FontType known and
{
FontType 1 eq CharStrings type /dicttype eq and
{
CharStrings /mu known CharStrings /mu1 known not and CharStrings wcheck and
{
CharStrings /mu get
type /stringtype eq
{
currentglobal
CharStrings /mu1
CharStrings /mu get
dup gcheck setglobal
dup length string copy
put
setglobal
} if
} if
} if
} if
} bd
}
{ /pdfPatchCStrings {} bd }
ifelse
/TZ
{
/_usePDFEncoding xdd
findfont
dup length 6 add dict
begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
/pdf_origFontName FontName def
/FontName exch def
currentdict /PaintType known
{ PaintType 2 eq {/PaintType 0 def} if }
if
_usePDFEncoding 0 ge
{
/Encoding _pdfEncodings _usePDFEncoding get def
pop
}
{
_usePDFEncoding -1 eq
{
counttomark 0 eq
{ pop }
{
Encoding 256 array copy
modEnc /Encoding exch def
}
ifelse
}
{
256 array
trEnc /Encoding exch def
}
ifelse
}
ifelse
pdf_EuroProcSet pdf_origFontName known
{
pdf_origFontName pdf_AddEuroGlyphProc
} if
Level2?
{
currentdict /pdf_origFontName undef
} if
FontName currentdict
end
definefont pop
}
bd
Level2?
{
/TZG
{
currentglobal true setglobal
2 index _pdfFontStatus
{
2 index findfont
false setglobal
3 index findfont
true setglobal
ne
{
2 index findfont dup rcheck
{
dup length dict begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
currentdict end
}
if
3 index exch definefont pop
}
if
} if
setglobal
TZ
} bd
}
{
/TZG {TZ} bd
} ifelse
Level2?
{
currentglobal false setglobal
userdict /pdftext_data 5 dict put
pdftext_data
begin
/saveStacks
{
pdftext_data
begin
/vmmode currentglobal def
false setglobal
count array astore /os exch def
end
countdictstack array dictstack pdftext_data exch /ds exch put
cleardictstack pdftext_data /dscount countdictstack put
pdftext_data /vmmode get setglobal
} bind def
/restoreStacks
{
pdftext_data /vmmode currentglobal put false setglobal
clear cleardictstack
pdftext_data /ds get dup
pdftext_data /dscount get 1 2 index length 1 sub
{ get begin dup } for
pop pop
pdftext_data /os get aload pop
pdftext_data /vmmode get setglobal
} bind def
/testForClonePrinterBug
{
currentglobal true setglobal
/undefinedCategory /Generic /Category findresource
dup length dict copy /Category defineresource pop
setglobal
pdftext_data /saveStacks get exec
pdftext_data /vmmode currentglobal put false setglobal
/undefined /undefinedCategory { resourcestatus } stopped
pdftext_data exch /bugFound exch put
pdftext_data /vmmode get setglobal
pdftext_data /restoreStacks get exec
pdftext_data /bugFound get
} bind def
end
setglobal
/pdf_resourcestatus
pdftext_data /testForClonePrinterBug get exec
{
{
pdftext_data /saveStacks get exec
pdftext_data /os get dup dup length 1 sub
dup 1 sub dup 0 lt { pop 0 } if
exch 1 exch { get exch dup } for
pop pop
{ resourcestatus }
stopped
{
clear cleardictstack pdftext_data /restoreStacks get exec
{ pop pop } stopped pop false
}
{
count array astore pdftext_data exch /results exch put
pdftext_data /restoreStacks get exec pop pop
pdftext_data /results get aload pop
}
ifelse
}
}
{ { resourcestatus } }
ifelse
bd
}
if
Level2?
{
/_pdfUndefineResource
{
currentglobal 3 1 roll
_pdf_FontDirectory 2 index 2 copy known
{undef}
{pop pop}
ifelse
1 index (pdf) exch _pdfConcatNames 1 index
1 index 1 _pdfConcatNames 1 index
5 index 1 _pdfConcatNames 1 index
4
{
2 copy pdf_resourcestatus
{
pop 2 lt
{2 copy findresource gcheck setglobal undefineresource}
{pop pop}
ifelse
}
{ pop pop}
ifelse
} repeat
setglobal
} bd
}
{
/_pdfUndefineResource { pop pop} bd
}
ifelse
Level2?
{
/_pdfFontStatus
{
currentglobal exch
/Font pdf_resourcestatus
{pop pop true}
{false}
ifelse
exch setglobal
} bd
}
{
/_pdfFontStatusString 50 string def
_pdfFontStatusString 0 (fonts/) putinterval
/_pdfFontStatus
{
FontDirectory 1 index known
{ pop true }
{
_pdfFontStatusString 6 42 getinterval
cvs length 6 add
_pdfFontStatusString exch 0 exch getinterval
{ status } stopped
{pop false}
{
{ pop pop pop pop true}
{ false }
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
Level2?
{
/_pdfCIDFontStatus
{
/CIDFont /Category pdf_resourcestatus
{
pop pop
/CIDFont pdf_resourcestatus
{pop pop true}
{false}
ifelse
}
{ pop false }
ifelse
} bd
}
if
/_pdfString100 100 string def
/_pdfComposeFontName
{
dup length 1 eq
{
0 get
1 index
type /nametype eq
{
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
2 index exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
exch pop
true
}
{
pop pop
false
}
ifelse
}
{
false
}
ifelse
dup {exch cvn exch} if
} bd
/_pdfConcatNames
{
exch
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
3 -1 roll exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
cvn
} bind def
/_pdfTextTempString 50 string def
/_pdfRegOrderingArray [(Adobe-Japan1) (Adobe-CNS1) (Adobe-Korea1) (Adobe-GB1)] def
/_pdf_CheckCIDSystemInfo
{
1 index _pdfTextTempString cvs
(Identity) anchorsearch
{
pop pop pop pop true
}
{
false
_pdfRegOrderingArray
{
2 index exch
anchorsearch
{ pop pop pop true exit}
{ pop }
ifelse
}
forall
exch pop
exch /CIDFont findresource
/CIDSystemInfo get
3 -1 roll /CMap findresource
/CIDSystemInfo get
exch
3 -1 roll
{
2 copy
/Supplement get
exch
dup type /dicttype eq
{/Supplement get}
{pop 0 }
ifelse
ge
}
{ true }
ifelse
{
dup /Registry get
2 index /Registry get eq
{
/Ordering get
exch /Ordering get
dup type /arraytype eq
{
1 index type /arraytype eq
{
true
1 index length 1 sub -1 0
{
dup 2 index exch get exch 3 index exch get ne
{ pop false exit}
if
} for
exch pop exch pop
}
{ pop pop false }
ifelse
}
{
eq
}
ifelse
}
{ pop pop false }
ifelse
}
{ pop pop false }
ifelse
}
ifelse
} bind def
pdf_has_composefont?
{
/_pdfComposeFont
{
2 copy _pdfComposeFontName not
{
2 index
}
if
(pdf) exch _pdfConcatNames
dup _pdfFontStatus
{ dup findfont 5 2 roll pop pop pop true}
{
4 1 roll
1 index /CMap pdf_resourcestatus
{
pop pop
true
}
{false}
ifelse
1 index true exch
{
_pdfCIDFontStatus not
{pop false exit}
if
}
forall
and
{
1 index 1 index 0 get _pdf_CheckCIDSystemInfo
{
3 -1 roll pop
2 index 3 1 roll
composefont true
}
{
pop pop exch pop false
}
ifelse
}
{
_pdfComposeFontName
{
dup _pdfFontStatus
{
exch pop
1 index exch
findfont definefont true
}
{
pop exch pop
false
}
ifelse
}
{
exch pop
false
}
ifelse
}
ifelse
{ true }
{
dup _pdfFontStatus
{ dup findfont true }
{ pop false }
ifelse
}
ifelse
}
ifelse
} bd
}
{
/_pdfComposeFont
{
_pdfComposeFontName not
{
dup
}
if
dup
_pdfFontStatus
{exch pop dup findfont true}
{
1 index
dup type /nametype eq
{pop}
{cvn}
ifelse
eq
{pop false}
{
dup _pdfFontStatus
{dup findfont true}
{pop false}
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
/_pdfStyleDicts 4 dict dup begin
/Adobe-Japan1 4 dict dup begin
Level2?
{
/Serif
/HeiseiMin-W3-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMin-W3}
{
/HeiseiMin-W3 _pdfCIDFontStatus
{/HeiseiMin-W3}
{/Ryumin-Light}
ifelse
}
ifelse
def
/SansSerif
/HeiseiKakuGo-W5-83pv-RKSJ-H _pdfFontStatus
{/HeiseiKakuGo-W5}
{
/HeiseiKakuGo-W5 _pdfCIDFontStatus
{/HeiseiKakuGo-W5}
{/GothicBBB-Medium}
ifelse
}
ifelse
def
/HeiseiMaruGo-W4-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMaruGo-W4}
{
/HeiseiMaruGo-W4 _pdfCIDFontStatus
{/HeiseiMaruGo-W4}
{
/Jun101-Light-RKSJ-H _pdfFontStatus
{ /Jun101-Light }
{ SansSerif }
ifelse
}
ifelse
}
ifelse
/RoundSansSerif exch def
/Default Serif def
}
{
/Serif /Ryumin-Light def
/SansSerif /GothicBBB-Medium def
{
(fonts/Jun101-Light-83pv-RKSJ-H) status
}stopped
{pop}{
{ pop pop pop pop /Jun101-Light }
{ SansSerif }
ifelse
/RoundSansSerif exch def
}ifelse
/Default Serif def
}
ifelse
end
def
/Adobe-Korea1 4 dict dup begin
/Serif /HYSMyeongJo-Medium def
/SansSerif /HYGoThic-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-GB1 4 dict dup begin
/Serif /STSong-Light def
/SansSerif /STHeiti-Regular def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-CNS1 4 dict dup begin
/Serif /MKai-Medium def
/SansSerif /MHei-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
end
def
/TZzero
{
/_wmode xdd
/_styleArr xdd
/_regOrdering xdd
3 copy
_pdfComposeFont
{
5 2 roll pop pop pop
}
{
[
0 1 _styleArr length 1 sub
{
_styleArr exch get
_pdfStyleDicts _regOrdering 2 copy known
{
get
exch 2 copy known not
{ pop /Default }
if
get
}
{
pop pop pop /Unknown
}
ifelse
}
for
]
exch pop
2 index 3 1 roll
_pdfComposeFont
{3 -1 roll pop}
{
findfont dup /FontName get exch
}
ifelse
}
ifelse
dup /WMode 2 copy known
{ get _wmode ne }
{ pop pop _wmode 1 eq}
ifelse
{
exch _wmode _pdfConcatNames
dup _pdfFontStatus
{ exch pop dup findfont false}
{ exch true }
ifelse
}
{
dup /FontType get 0 ne
}
ifelse
{
dup /FontType get 3 eq _wmode 1 eq and
{
_pdfVerticalRomanT3Font dup length 10 add dict copy
begin
/_basefont exch
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put dup 16#a5 /yen put dup 16#b4 /yen put}
if
def
FontName
currentdict
end
definefont
def
/Encoding _basefont /Encoding get def
/_fauxfont true def
}
{
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
FontType 0 ne
{
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put}
if
def
/_fauxfont true def
} if
} ifelse
/WMode _wmode def
dup dup /FontName exch def
currentdict
end
definefont pop
}
{
pop
}
ifelse
/_pdf_FontDirectory 3 1 roll _safeput
}
bd
Level2?
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
selectfont
} bd
}
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
exch findfont exch
dup type /arraytype eq
{makefont}
{scalefont}
ifelse
setfont
} bd
}
ifelse
/cshow where
{
pop /pdf_cshow /cshow load dd
/pdf_remove2 {pop pop} dd
}
{
/pdf_cshow {exch forall} dd
/pdf_remove2 {} dd
} ifelse
/pdf_xshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_yshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0 exch
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_xyshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
1 pop
{_pdf_na _pdf_i 1 add get} stopped
{ pop pop pop}
{
_pdf_x _pdf_y moveto
rmoveto
}
ifelse
}
ifelse
_pdf_i 2 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdfl1xs {/_pdf_showproc /show load dd pdf_xshow} bd
/pdfl1ys {/_pdf_showproc /show load dd pdf_yshow} bd
/pdfl1xys {/_pdf_showproc /show load dd pdf_xyshow} bd
Level2? _ColorSep5044? not and
{
/pdfxs {{xshow} stopped {pdfl1xs} if} bd
/pdfys {{yshow} stopped {pdfl1ys} if} bd
/pdfxys {{xyshow} stopped {pdfl1xys} if} bd
}
{
/pdfxs /pdfl1xs load dd
/pdfys /pdfl1ys load dd
/pdfxys /pdfl1xys load dd
} ifelse
/pdf_charpath {false charpath} bd
/pdf_xcharpath {/_pdf_showproc /pdf_charpath load dd pdf_xshow} bd
/pdf_ycharpath {/_pdf_showproc /pdf_charpath load dd pdf_yshow} bd
/pdf_xycharpath {/_pdf_showproc /pdf_charpath load dd pdf_xyshow} bd
/pdf_strokepath
{
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 false charpath
currentpoint S moveto
} bind
exch pdf_cshow
} bd
/pdf_xstrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xshow} bd
/pdf_ystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_yshow} bd
/pdf_xystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xyshow} bd
Level2? {currentglobal true setglobal} if
/d0/setcharwidth ld
/nND {{/.notdef} repeat} bd
/T3Defs {
/BuildChar
{
1 index /Encoding get exch get
1 index /BuildGlyph get exec
}
def
/BuildGlyph {
exch begin
GlyphProcs exch get exec
end
} def
/_pdfT3Font true def
} bd
/_pdfBoldRomanWidthProc
{
stringwidth 1 index 0 ne { exch .03 add exch }if setcharwidth
0 0
} bd
/_pdfType0WidthProc
{
dup stringwidth 0 0 moveto
2 index true charpath pathbbox
0 -1
7 index 2 div .88
setcachedevice2
pop
0 0
} bd
/_pdfType0WMode1WidthProc
{
dup stringwidth
pop 2 div neg -0.88
2 copy
moveto
0 -1
5 -1 roll true charpath pathbbox
setcachedevice
} bd
/_pdfBoldBaseFont
11 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/Encoding cHexEncoding def
/_setwidthProc /_pdfBoldRomanWidthProc load def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
pdf_has_composefont?
{
/_pdfBoldBaseCIDFont
11 dict begin
/CIDFontType 1 def
/CIDFontName /_pdfBoldBaseCIDFont def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_setwidthProc /_pdfType0WidthProc load def
/_bcstr2 2 string def
/BuildGlyph
{
exch begin
_basefont setfont
_bcstr2 1 2 index 256 mod put
_bcstr2 0 3 -1 roll 256 idiv put
_bcstr2 dup _setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
/_pdfDefineIdentity-H
{
/Identity-H /CMap PDFText /pdf_resourcestatus get exec
{
pop pop
}
{
/CIDInit/ProcSet findresource begin 12 dict begin
begincmap
/CIDSystemInfo
3 dict begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
currentdict
end
def
/CMapName /Identity-H def
/CMapVersion 1 def
/CMapType 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
CMapName currentdict/CMap defineresource pop
end
end
} ifelse
} def
} if
/_pdfVerticalRomanT3Font
10 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_pdfType0WidthProc
moveto
show
end
}bd
currentdict
end
def
Level2? {setglobal} if
/MakeBoldFont
{
dup /ct_SyntheticBold known
{
dup length 3 add dict begin
CopyFont
/ct_StrokeWidth .03 0 FontMatrix idtransform pop def
/ct_SyntheticBold true def
currentdict
end
definefont
}
{
dup dup length 3 add dict
begin
CopyFont
/PaintType 2 def
/StrokeWidth .03 0 FontMatrix idtransform pop def
/dummybold currentdict
end
definefont
dup /FontType get dup 9 ge exch 11 le and
{
_pdfBoldBaseCIDFont
dup length 3 add dict copy begin
dup /CIDSystemInfo get /CIDSystemInfo exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefont exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefonto exch def
currentdict
end
/CIDFont defineresource
}
{
_pdfBoldBaseFont
dup length 3 add dict copy begin
/_basefont exch def
/_basefonto exch def
currentdict
end
definefont
}
ifelse
}
ifelse
} bd
/MakeBold {
1 index
_pdf_FontDirectory 2 index 2 copy known
{get}
{exch pop}
ifelse
findfont
dup
/FontType get 0 eq
{
dup /WMode known {dup /WMode get 1 eq }{false} ifelse
version length 4 ge
and
{version 0 4 getinterval cvi 2015 ge }
{true}
ifelse
{/_pdfType0WidthProc}
{/_pdfType0WMode1WidthProc}
ifelse
_pdfBoldBaseFont /_setwidthProc 3 -1 roll load put
{MakeBoldFont} Type0CopyFont definefont
}
{
dup /_fauxfont known not 1 index /SubstMaster known not and
{
_pdfBoldBaseFont /_setwidthProc /_pdfBoldRomanWidthProc load put
MakeBoldFont
}
{
2 index 2 index eq
{ exch pop }
{
dup length dict begin
CopyFont
currentdict
end
definefont
}
ifelse
}
ifelse
}
ifelse
pop pop
dup /dummybold ne
{/_pdf_FontDirectory exch dup _safeput }
{ pop }
ifelse
}bd
/MakeItalic {
_pdf_FontDirectory exch 2 copy known
{get}
{exch pop}
ifelse
dup findfont
dup /FontInfo 2 copy known
{
get
/ItalicAngle 2 copy known
{get 0 eq }
{ pop pop true}
ifelse
}
{ pop pop true}
ifelse
{
exch pop
dup /FontType get 0 eq Level2? not and
{ dup /FMapType get 6 eq }
{ false }
ifelse
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1Type0 }
{ _italMtxType0 }
ifelse
}
{ pop pop _italMtxType0 }
ifelse
}
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1 }
{ _italMtx }
ifelse
}
{ pop pop _italMtx }
ifelse
}
ifelse
makefont
dup /FontType get 42 eq Level2? not or
{
dup length dict begin
CopyFont
currentdict
end
}
if
1 index exch
definefont pop
/_pdf_FontDirectory exch dup _safeput
}
{
pop
2 copy ne
{
/_pdf_FontDirectory 3 1 roll _safeput
}
{ pop pop }
ifelse
}
ifelse
}bd
/MakeBoldItalic {
/dummybold exch
MakeBold
/dummybold
MakeItalic
}bd
Level2?
{
/pdf_CopyDict
{1 index length add dict copy}
def
}
{
/pdf_CopyDict
{
1 index length add dict
1 index wcheck
{ copy }
{ begin
{def} forall
currentdict
end
}
ifelse
}
def
}
ifelse
/pdf_AddEuroGlyphProc
{
currentdict /CharStrings known
{
CharStrings /Euro known not
{
dup
/CharStrings
CharStrings 1 pdf_CopyDict
begin
/Euro pdf_EuroProcSet 4 -1 roll get def
currentdict
end
def
/pdf_PSBuildGlyph /pdf_PSBuildGlyph load def
/pdf_PathOps /pdf_PathOps load def
/Symbol eq Encoding 160 get /.notdef eq and
{
/Encoding Encoding dup length array copy
dup 160 /Euro put def
}
if
}
{ pop
}
ifelse
}
{ pop
}
ifelse
}
def
Level2? {currentglobal true setglobal} if
/pdf_PathOps 4 dict dup begin
/m {moveto} def
/l {lineto} def
/c {curveto} def
/cp {closepath} def
end
def
/pdf_PSBuildGlyph
{
gsave
8 -1 roll pop
7 1 roll
currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
dup 9 1 roll
{
currentdict /StrokeWidth 2 copy known
{
get 2 div
5 1 roll
4 -1 roll 4 index sub
4 1 roll
3 -1 roll 4 index sub
3 1 roll
exch 4 index add exch
4 index add
5 -1 roll pop
}
{
pop pop
}
ifelse
}
if
setcachedevice
pdf_PathOps begin
exec
end
{
currentdict /StrokeWidth 2 copy known
{ get }
{ pop pop 0 }
ifelse
setlinewidth stroke
}
{
fill
}
ifelse
grestore
} def
/pdf_EuroProcSet 13 dict def
pdf_EuroProcSet
begin
/Courier-Bold
{
600 0 6 -12 585 612
{
385 274 m
180 274 l
179 283 179 293 179 303 c
179 310 179 316 180 323 c
398 323 l
423 404 l
197 404 l
219 477 273 520 357 520 c
409 520 466 490 487 454 c
487 389 l
579 389 l
579 612 l
487 612 l
487 560 l
449 595 394 612 349 612 c
222 612 130 529 98 404 c
31 404 l
6 323 l
86 323 l
86 304 l
86 294 86 284 87 274 c
31 274 l
6 193 l
99 193 l
129 77 211 -12 359 -12 c
398 -12 509 8 585 77 c
529 145 l
497 123 436 80 356 80 c
285 80 227 122 198 193 c
360 193 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-BoldOblique /Courier-Bold load def
/Courier
{
600 0 17 -12 578 584
{
17 204 m
97 204 l
126 81 214 -12 361 -12 c
440 -12 517 17 578 62 c
554 109 l
501 70 434 43 366 43 c
266 43 184 101 154 204 c
380 204 l
400 259 l
144 259 l
144 270 143 281 143 292 c
143 299 143 307 144 314 c
418 314 l
438 369 l
153 369 l
177 464 249 529 345 529 c
415 529 484 503 522 463 c
522 391 l
576 391 l
576 584 l
522 584 l
522 531 l
473 566 420 584 348 584 c
216 584 122 490 95 369 c
37 369 l
17 314 l
87 314 l
87 297 l
87 284 88 272 89 259 c
37 259 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-Oblique /Courier load def
/Helvetica
{
556 0 24 -19 541 703
{
541 628 m
510 669 442 703 354 703 c
201 703 117 607 101 444 c
50 444 l
25 372 l
97 372 l
97 301 l
49 301 l
24 229 l
103 229 l
124 67 209 -19 350 -19 c
435 -19 501 25 509 32 c
509 131 l
492 105 417 60 343 60 c
267 60 204 127 197 229 c
406 229 l
430 301 l
191 301 l
191 372 l
455 372 l
479 444 l
194 444 l
201 531 245 624 348 624 c
433 624 484 583 509 534 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-Oblique /Helvetica load def
/Helvetica-Bold
{
556 0 12 -19 563 710
{
563 621 m
537 659 463 710 363 710 c
216 710 125 620 101 462 c
51 462 l
12 367 l
92 367 l
92 346 l
92 337 93 328 93 319 c
52 319 l
12 224 l
102 224 l
131 58 228 -19 363 -19 c
417 -19 471 -12 517 18 c
517 146 l
481 115 426 93 363 93 c
283 93 254 166 246 224 c
398 224 l
438 319 l
236 319 l
236 367 l
457 367 l
497 462 l
244 462 l
259 552 298 598 363 598 c
425 598 464 570 486 547 c
507 526 513 517 517 509 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-BoldOblique /Helvetica-Bold load def
/Symbol
{
750 0 20 -12 714 685
{
714 581 m
650 645 560 685 465 685 c
304 685 165 580 128 432 c
50 432 l
20 369 l
116 369 l
115 356 115 347 115 337 c
115 328 115 319 116 306 c
50 306 l
20 243 l
128 243 l
165 97 300 -12 465 -12 c
560 -12 635 25 685 65 c
685 155 l
633 91 551 51 465 51 c
340 51 238 131 199 243 c
555 243 l
585 306 l
184 306 l
183 317 182 326 182 336 c
182 346 183 356 184 369 c
614 369 l 644 432 l
199 432 l
233 540 340 622 465 622 c
555 622 636 580 685 520 c
cp
750 0 m
}
pdf_PSBuildGlyph
} def
/Times-Bold
{
500 0 16 -14 478 700
{
367 308 m
224 308 l
224 368 l
375 368 l
380 414 l
225 414 l
230 589 257 653 315 653 c
402 653 431 521 444 457 c
473 457 l
473 698 l
444 697 l
441 679 437 662 418 662 c
393 662 365 700 310 700 c
211 700 97 597 73 414 c
21 414 l
16 368 l
69 368 l
69 359 68 350 68 341 c
68 330 68 319 69 308 c
21 308 l
16 262 l
73 262 l
91 119 161 -14 301 -14 c
380 -14 443 50 478 116 c
448 136 l
415 84 382 40 323 40 c
262 40 231 77 225 262 c
362 262 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-BoldItalic
{
500 0 9 -20 542 686
{
542 686 m
518 686 l
513 673 507 660 495 660 c
475 660 457 683 384 683 c
285 683 170 584 122 430 c
58 430 l
34 369 l
105 369 l
101 354 92 328 90 312 c
34 312 l
9 251 l
86 251 l
85 238 84 223 84 207 c
84 112 117 -14 272 -14 c
326 -14 349 9 381 9 c
393 9 393 -10 394 -20 c
420 -20 l
461 148 l
429 148 l
416 109 362 15 292 15 c
227 15 197 55 197 128 c
197 162 204 203 216 251 c
378 251 l
402 312 l
227 312 l
229 325 236 356 241 369 c
425 369 l
450 430 l
255 430 l
257 435 264 458 274 488 c
298 561 337 654 394 654 c
437 654 484 621 484 530 c
484 516 l
516 516 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Italic
{
500 0 23 -10 595 692
{
399 317 m
196 317 l
199 340 203 363 209 386 c
429 386 l
444 424 l
219 424 l
246 514 307 648 418 648 c
448 648 471 638 492 616 c
529 576 524 529 527 479 c
549 475 l
595 687 l
570 687 l
562 674 558 664 542 664 c
518 664 474 692 423 692 c
275 692 162 551 116 424 c
67 424 l
53 386 l
104 386 l
98 363 93 340 90 317 c
37 317 l
23 279 l
86 279 l
85 266 85 253 85 240 c
85 118 137 -10 277 -10 c
370 -10 436 58 488 128 c
466 149 l
424 101 375 48 307 48 c
212 48 190 160 190 234 c
190 249 191 264 192 279 c
384 279 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Roman
{
500 0 10 -12 484 692
{
347 298 m
171 298 l
170 310 170 322 170 335 c
170 362 l
362 362 l
374 403 l
172 403 l
184 580 244 642 308 642 c
380 642 434 574 457 457 c
481 462 l
474 691 l
449 691 l
433 670 429 657 410 657 c
394 657 360 692 299 692 c
204 692 94 604 73 403 c
22 403 l
10 362 l
70 362 l
69 352 69 341 69 330 c
69 319 69 308 70 298 c
22 298 l
10 257 l
73 257 l
97 57 216 -12 295 -12 c
364 -12 427 25 484 123 c
458 142 l
425 101 384 37 316 37 c
256 37 189 84 173 257 c
335 257 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
end
Level2? {setglobal} if
currentdict readonly pop end
%%EndResource
PDFText begin
[39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
/guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
/hungarumlaut/ogonek/caron
0 TE
[1/dotlessi/caron 39/quotesingle 96/grave
127/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft
/quotedblright/bullet/endash/emdash/tilde/trademark/scaron
/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus
/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla
/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters
/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute
/ucircumflex/udieresis/yacute/thorn/ydieresis
1 TE
end
%%BeginResource: procset pdfasc.prc 6.0 1
%%Copyright: Copyright 1992-2003 Adobe Systems Incorporated. All Rights Reserved.
/ASR {
13 dict begin
/mirV? exch def
/mirH? exch def
/center? exch def
/autorotate? exch def
/angle exch def
/shrink exch def
/Pury exch def
/Purx exch def
/Plly exch def
/Pllx exch def
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury 0 eq Durx 0 eq and Dlly 0 eq Dllx 0 eq and and
{ shrink 0 gt { GClipBBox } { GPageBBox } ifelse }
{ ITransDBBox }
ifelse
/PHt Pury Plly sub def
/PW Purx Pllx sub def
/DHt Dury Dlly sub def
/DW Durx Dllx sub def
angle 90 eq angle 270 eq or
{
PHt /PHt PW def /PW exch def
} if
autorotate? PHt PW ne and DHt DW ne and
{
DHt DW ge
PHt PW ge
ne
{ /angle angle 90 add def
PHt /PHt PW def /PW exch def
}
if
} if
angle 0 ne
{
/angle angle 360 mod def
angle rotate
angle 90 eq
{ 0 DW neg translate }
if
angle 180 eq
{ DW neg DHt neg translate }
if
angle 270 eq
{ DHt neg 0 translate }
if
} if
center?
{
ITransBBox
Durx Dllx add 2 div Dury Dlly add 2 div
Purx Pllx add -2 div Pury Plly add -2 div
3 -1 roll add exch
3 -1 roll add exch
translate
}
{
ITransBBox
angle 0 eq
{Dllx Pllx sub Dury Pury sub}
if
angle 90 eq
{Durx Purx sub Dury Pury sub}
if
angle 180 eq
{Durx Purx sub Dlly Plly sub}
if
angle 270 eq
{Dllx Pllx sub Dlly Plly sub}
if
translate
}
ifelse
mirH? mirV? or
{
ITransBBox
mirH?
{
-1 1 scale
Durx Dllx add neg 0 translate
} if
mirV?
{
1 -1 scale
0 Dury Dlly add neg translate
} if
} if
shrink 0 ne
{
ITransBBox
Dury Dlly sub Pury Plly sub div
Durx Dllx sub Purx Pllx sub div
2 copy gt { exch } if pop
shrink 1 eq
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{
shrink 2 eq 1 index 1.0 lt and
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{ pop }
ifelse
}
ifelse
} if
end
} [/autorotate? /shrink? /mirH? /mirV? /angle /Pury /Purx /Plly /Pllx /Durx /Dury /Dllx /Dlly /PW /PHt /DW /DHt
/Devurx /Devury /Devllx /Devlly /pdfHt /pdfW]
bld
/GClipBBox
{
gsave newpath clippath pathbbox newpath grestore
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
ITransDBBox
} [/Durx /Dury /Dllx /Dlly]
bld
/GPageBBox
{
{
currentpagedevice /PageSize get aload pop
/Devury exch def /Devurx exch def
/Devllx 0 def /Devlly 0 def
ITransBBox
}
stopped
{ GClipBBox }
if
} [/Devurx /Devury /Devllx /Devlly ]
bld
/ITransDBBox
{
Durx Dury transform matrix defaultmatrix itransform
/Devury exch def
/Devurx exch def
Dllx Dlly transform matrix defaultmatrix itransform
/Devlly exch def
/Devllx exch def
Devury Devlly lt {/Devlly Devury /Devury Devlly def def} if
Devurx Devllx lt {/Devllx Devurx /Devurx Devllx def def} if
} [/Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
/ITransBBox
{
/um matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix def
Devllx Devlly um itransform
Devurx Devury um itransform
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury Dlly lt {/Dlly Dury /Dury Dlly def def} if
Durx Dllx lt {/Dllx Durx /Durx Dllx def def} if
} [ /um /Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
%%EndResource
currentdict readonly pop
end end
/currentpacking where {pop setpacking}if
PDFVars/DocInitAll{[PDF PDFText]{/docinitialize get exec}forall }put
+PDFVars/InitAll{[PDF PDFText]{/initialize get exec}forall initgs}put
+PDFVars/TermAll{[PDFText PDF]{/terminate get exec}forall}put
+PDFVars begin PDF begin
PDFVars/DocInitAll get exec PDFVars/InitAll get exec
[/NamespacePush PDFMark5
[/_objdef {Metadata_In_EPS} /type /stream /OBJ PDFMark5
[{Metadata_In_EPS} 3537 (% &end XMP packet& %) ReadByPDFMark5
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-701">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2006-10-20T15:23:31+02:00</xap:CreateDate>
+ <xap:ModifyDate>2006-10-20T15:23:31+02:00</xap:ModifyDate>
+ <xap:MetadataDate>2006-10-20T15:23:31+02:00</xap:MetadataDate>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#">
+ <xapMM:DocumentID>uuid:34DD0B9361E111DBB7AD8EFAF1591643</xapMM:DocumentID>
+ <xapMM:InstanceID>uuid:34DD0B9361E111DBB7AD8EFAF1591643</xapMM:InstanceID>
+ <xapMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>uuid:f3014e74-603d-11db-9b35-000a95cd9010</stRef:instanceID>
+ <stRef:documentID>uuid:1ed1776c-603c-11db-9960-000a95cd9010</stRef:documentID>
+ </xapMM:DerivedFrom>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">paper.dvi</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ <dc:format>application/eps</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?>
% &end XMP packet& %
[{Metadata_In_EPS} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT PDFMark5
[/Document 1 dict begin /Metadata {Metadata_In_EPS} def currentdict end /BDC PDFMark5
[/NamespacePop PDFMark5
PDFVars/TermAll get exec end end
PDF /docinitialize get exec
+
%%EndSetup
PDFVars begin PDF begin PDFVars/InitAll get exec
237.407 364.169 115.084 98.333 rectclip
q
237.407 364.169 m
352.491 364.169 l
352.491 462.502 l
237.407 462.502 l
h
W
n
q
0.1 0.0 0.0 0.1 0.0 0.0 cm
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
Q
q
n
1195.62 4688.31 m
2327.9 4688.31 l
2327.9 3620.38 l
1195.62 3620.38 l
h
W
n
4.88755 w
1 j
[4.88755 39.1004 ] 0.0 d
3.25837 w
[] 0.0 d
4.88755 w
Q
q
n
1321.07 4649.21 m
2217.12 4649.21 l
2217.12 3703.47 l
1321.07 3703.47 l
h
W
n
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 243.734 4059.78 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
[/DeviceCMYK] cs 0.0 0.0 0.0 1.0 sc
%ADOBeginSubsetFont: UPIBAA+CMR10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /UPIBAA+CMR10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-40 -250 1009 750} def
end
systemdict begin
dup /Private
13 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705 431 448 666 677] def
/OtherBlues [-206 -194] def
/BlueScale 0.04379 def
/StdHW [31] def
/StdVW [69] def
/StemSnapH [22 31] def
/StemSnapV [69 89] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 1 /dotlessi/caron 11 /ff/fi/fl/ffi
32 /space/exclam/quotedbl/numbersign/dollar/percent
/ampersand/quoteright/parenleft/parenright/asterisk/plus
/comma/hyphen/period/slash/zero/one
/two/three/four/five/six/seven
/eight/nine/colon/semicolon/less/equal
/greater/question/at/A/B/C
/D/E/F/G/H/I
/J/K/L/M/N/O
/P/Q/R/S/T/U
/V/W/X/Y/Z/bracketleft
/backslash/bracketright/circumflex/underscore/quoteleft/a
/b/c/d/e/f/g
/h/i/j/k/l/m
/n/o/p/q/r/s
/t/u/v/w/x/y
/z/endash/bar/braceright/tilde/bullet
/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft
/OE/bullet/Zcaron/bullet/bullet/quoteleft
/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
/tilde/trademark/scaron/guilsinglright/oe/bullet
/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright
/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
/degree/plusminus/twosuperior/threesuperior/acute/mu
/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright
/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute
/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave
/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring
/ae/ccedilla/egrave/eacute/ecircumflex/edieresis
/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex/udieresis/yacute
/thorn/ydieresis
/N41 (UPIBAA+CMR10) -1 TZ
222.215 364.328 m
%ADOBeginSubsetFont: UPIBAA+CMR10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/UPIBAA+CMR10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/five <1C60D8A8C9B7A73D3B2B97F19D54A2E00E7DDA8E72064220CB7581D13
CEDF071F346430E40993A6297E3A2A6D6093205222D977AC7F7B65CC82B221D9
B18ADEA5D4AF0261ABF060D3E283C7B3B5EB39FF499721FD51203AE59E3BEA25
7DFD3E472FEF67221488EC8D1F355E2FAD057CA44A8B4BAD6C6C719C164907CB
F9A6CC770DB0C7E58A37D2385E23F576BCFF94FFBFD8ADD4C5E6C32CD83ACEB7
7472D00FE1A4DC66393A99AC6BBD252B04C98B710149EA42B66ACE89D4FC4393
F3A09165DF477ABCB0E8A8DB21E4278CA219EBCC9B067F92619913BDBD1EF3C9
A> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/UPIBAA+CMR10 findfont /Encoding get
dup 53 /five put
pop
end
+%ADOEndSubsetFont
+/N41 10.6637 Tf
(5) show
Q
q
n
2449.61 4685.86 m
3581.89 4685.86 l
3581.89 3620.37 l
2449.61 3620.37 l
h
W
n
n
[/DeviceGray] cs 1.0 sc
2449.610107 3620.370117 1132.280029 1046.750000 rectfill
+
n
2634.520020 3761.300049 828.437988 828.438232 rectfill
+
4.88755 w
1 j
n
2634.52 3761.3 828.438 828.438 re
S
[4.88755 39.1004 ] 0.0 d
3.25837 w
n
2634.52 3761.3 m
2634.52 4589.73 l
0.0 sc
S
n
2634.52 4589.73 m
2634.52 4589.73 l
S
n
2737.98 3761.3 m
2737.98 4589.73 l
S
n
2737.98 4589.73 m
2737.98 4589.73 l
S
n
2842.24 3761.3 m
2842.24 4589.73 l
S
n
2842.24 4589.73 m
2842.24 4589.73 l
S
n
2945.7 3761.3 m
2945.7 4589.73 l
S
n
2945.7 4589.73 m
2945.7 4589.73 l
S
n
3049.15 3761.3 m
3049.15 4589.73 l
S
n
3049.15 4589.73 m
3049.15 4589.73 l
S
n
3152.6 3761.3 m
3152.6 4589.73 l
S
n
3152.6 4589.73 m
3152.6 4589.73 l
S
n
3256.05 3761.3 m
3256.05 4589.73 l
S
n
3256.05 4589.73 m
3256.05 4589.73 l
S
n
3359.51 3761.3 m
3359.51 4589.73 l
S
n
3359.51 4589.73 m
3359.51 4589.73 l
S
n
3462.96 3761.3 m
3462.96 4589.73 l
S
n
3462.96 4589.73 m
3462.96 4589.73 l
S
n
2634.52 3761.3 m
3462.96 3761.3 l
S
n
3462.96 3761.3 m
3462.96 3761.3 l
S
n
2634.52 3864.75 m
3462.96 3864.75 l
S
n
3462.96 3864.75 m
3462.96 3864.75 l
S
n
2634.52 3968.2 m
3462.96 3968.2 l
S
n
3462.96 3968.2 m
3462.96 3968.2 l
S
n
2634.52 4072.47 m
3462.96 4072.47 l
S
n
3462.96 4072.47 m
3462.96 4072.47 l
S
n
2634.52 4175.92 m
3462.96 4175.92 l
S
n
3462.96 4175.92 m
3462.96 4175.92 l
S
n
2634.52 4279.38 m
3462.96 4279.38 l
S
n
3462.96 4279.38 m
3462.96 4279.38 l
S
n
2634.52 4382.83 m
3462.96 4382.83 l
S
n
3462.96 4382.83 m
3462.96 4382.83 l
S
n
2634.52 4486.28 m
3462.96 4486.28 l
S
n
3462.96 4486.28 m
3462.96 4486.28 l
S
n
2634.52 4589.73 m
3462.96 4589.73 l
S
n
3462.96 4589.73 m
3462.96 4589.73 l
S
[] 0.0 d
4.88755 w
n
2634.52 3761.3 m
3462.96 3761.3 l
S
n
2634.52 4589.73 m
3462.96 4589.73 l
S
n
2634.52 3761.3 m
2634.52 4589.73 l
S
n
3462.96 3761.3 m
3462.96 4589.73 l
S
n
2634.52 3761.3 m
3462.96 3761.3 l
S
n
2634.52 3761.3 m
2634.52 4589.73 l
S
n
2634.52 3761.3 m
2634.52 3770.25 l
S
n
2634.52 4589.73 m
2634.52 4580.77 l
S
n
2737.98 3761.3 m
2737.98 3770.25 l
S
n
2737.98 4589.73 m
2737.98 4580.77 l
S
n
2842.24 3761.3 m
2842.24 3770.25 l
S
n
2842.24 4589.73 m
2842.24 4580.77 l
S
n
2945.7 3761.3 m
2945.7 3770.25 l
S
n
2945.7 4589.73 m
2945.7 4580.77 l
S
n
3049.15 3761.3 m
3049.15 3770.25 l
S
n
3049.15 4589.73 m
3049.15 4580.77 l
S
n
3152.6 3761.3 m
3152.6 3770.25 l
S
n
3152.6 4589.73 m
3152.6 4580.77 l
S
n
3256.05 3761.3 m
3256.05 3770.25 l
S
n
3256.05 4589.73 m
3256.05 4580.77 l
S
n
3359.51 3761.3 m
3359.51 3770.25 l
S
n
3359.51 4589.73 m
3359.51 4580.77 l
S
n
3462.96 3761.3 m
3462.96 3770.25 l
S
n
3462.96 4589.73 m
3462.96 4580.77 l
S
n
2634.52 3761.3 m
2643.48 3761.3 l
S
n
3462.96 3761.3 m
3454.0 3761.3 l
S
n
2634.52 3864.75 m
2643.48 3864.75 l
S
n
3462.96 3864.75 m
3454.0 3864.75 l
S
n
2634.52 3968.2 m
2643.48 3968.2 l
S
n
3462.96 3968.2 m
3454.0 3968.2 l
S
n
2634.52 4072.47 m
2643.48 4072.47 l
S
n
3462.96 4072.47 m
3454.0 4072.47 l
S
n
2634.52 4175.92 m
2643.48 4175.92 l
S
n
3462.96 4175.92 m
3454.0 4175.92 l
S
n
2634.52 4279.38 m
2643.48 4279.38 l
S
n
3462.96 4279.38 m
3454.0 4279.38 l
S
n
2634.52 4382.83 m
2643.48 4382.83 l
S
n
3462.96 4382.83 m
3454.0 4382.83 l
S
n
2634.52 4486.28 m
2643.48 4486.28 l
S
n
3462.96 4486.28 m
3454.0 4486.28 l
S
n
2634.52 4589.73 m
2643.48 4589.73 l
S
n
3462.96 4589.73 m
3454.0 4589.73 l
S
n
2634.52 3761.3 m
3462.96 3761.3 l
S
n
2634.52 4589.73 m
3462.96 4589.73 l
S
n
2634.52 3761.3 m
2634.52 4589.73 l
S
n
3462.96 3761.3 m
3462.96 4589.73 l
S
Q
q
n
2575.06 4646.76 m
3520.8 4646.76 l
3520.8 3701.02 l
2575.06 3701.02 l
h
W
n
n
3058.93 4537.6 m
3058.93 4532.2 3054.55 4527.82 3049.15 4527.82 c
3043.75 4527.82 3039.38 4532.2 3039.38 4537.6 c
3039.38 4543.0 3043.75 4547.38 3049.15 4547.38 c
3054.55 4547.38 3058.93 4543.0 3058.93 4537.6 c
[/DeviceRGB] cs 0.0 0.0 1.0 sc
f
n
3058.93 4486.28 m
3058.93 4480.88 3054.55 4476.51 3049.15 4476.51 c
3043.75 4476.51 3039.38 4480.88 3039.38 4486.28 c
3039.38 4491.68 3043.75 4496.06 3049.15 4496.06 c
3054.55 4496.06 3058.93 4491.68 3058.93 4486.28 c
f
n
3058.93 4434.15 m
3058.93 4428.75 3054.55 4424.37 3049.15 4424.37 c
3043.75 4424.37 3039.38 4428.75 3039.38 4434.15 c
3039.38 4439.55 3043.75 4443.92 3049.15 4443.92 c
3054.55 4443.92 3058.93 4439.55 3058.93 4434.15 c
f
n
3058.93 4382.83 m
3058.93 4377.43 3054.55 4373.05 3049.15 4373.05 c
3043.75 4373.05 3039.38 4377.43 3039.38 4382.83 c
3039.38 4388.23 3043.75 4392.61 3049.15 4392.61 c
3054.55 4392.61 3058.93 4388.23 3058.93 4382.83 c
f
n
3058.93 4330.7 m
3058.93 4325.3 3054.55 4320.92 3049.15 4320.92 c
3043.75 4320.92 3039.38 4325.3 3039.38 4330.7 c
3039.38 4336.09 3043.75 4340.47 3049.15 4340.47 c
3054.55 4340.47 3058.93 4336.09 3058.93 4330.7 c
f
n
3058.93 4279.38 m
3058.93 4273.98 3054.55 4269.6 3049.15 4269.6 c
3043.75 4269.6 3039.38 4273.98 3039.38 4279.38 c
3039.38 4284.77 3043.75 4289.15 3049.15 4289.15 c
3054.55 4289.15 3058.93 4284.77 3058.93 4279.38 c
f
n
3058.93 4227.24 m
3058.93 4221.84 3054.55 4217.46 3049.15 4217.46 c
3043.75 4217.46 3039.38 4221.84 3039.38 4227.24 c
3039.38 4232.64 3043.75 4237.02 3049.15 4237.02 c
3054.55 4237.02 3058.93 4232.64 3058.93 4227.24 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3058.93 4123.79 m
3058.93 4118.39 3054.55 4114.01 3049.15 4114.01 c
3043.75 4114.01 3039.38 4118.39 3039.38 4123.79 c
3039.38 4129.19 3043.75 4133.56 3049.15 4133.56 c
3054.55 4133.56 3058.93 4129.19 3058.93 4123.79 c
f
n
3058.93 4072.47 m
3058.93 4067.07 3054.55 4062.7 3049.15 4062.7 c
3043.75 4062.7 3039.38 4067.07 3039.38 4072.47 c
3039.38 4077.87 3043.75 4082.25 3049.15 4082.25 c
3054.55 4082.25 3058.93 4077.87 3058.93 4072.47 c
f
n
3058.93 4020.34 m
3058.93 4014.94 3054.55 4010.56 3049.15 4010.56 c
3043.75 4010.56 3039.38 4014.94 3039.38 4020.34 c
3039.38 4025.73 3043.75 4030.11 3049.15 4030.11 c
3054.55 4030.11 3058.93 4025.73 3058.93 4020.34 c
f
n
3058.93 3968.2 m
3058.93 3962.8 3054.55 3958.43 3049.15 3958.43 c
3043.75 3958.43 3039.38 3962.8 3039.38 3968.2 c
3039.38 3973.6 3043.75 3977.98 3049.15 3977.98 c
3054.55 3977.98 3058.93 3973.6 3058.93 3968.2 c
f
n
3058.93 3916.88 m
3058.93 3911.48 3054.55 3907.11 3049.15 3907.11 c
3043.75 3907.11 3039.38 3911.48 3039.38 3916.88 c
3039.38 3922.28 3043.75 3926.66 3049.15 3926.66 c
3054.55 3926.66 3058.93 3922.28 3058.93 3916.88 c
f
n
3058.93 3864.75 m
3058.93 3859.35 3054.55 3854.97 3049.15 3854.97 c
3043.75 3854.97 3039.38 3859.35 3039.38 3864.75 c
3039.38 3870.15 3043.75 3874.52 3049.15 3874.52 c
3054.55 3874.52 3058.93 3870.15 3058.93 3864.75 c
f
n
3058.93 3813.43 m
3058.93 3808.03 3054.55 3803.65 3049.15 3803.65 c
3043.75 3803.65 3039.38 3808.03 3039.38 3813.43 c
3039.38 3818.83 3043.75 3823.2 3049.15 3823.2 c
3054.55 3823.2 3058.93 3818.83 3058.93 3813.43 c
f
n
3058.93 3761.3 m
3058.93 3755.9 3054.55 3751.52 3049.15 3751.52 c
3043.75 3751.52 3039.38 3755.9 3039.38 3761.3 c
3039.38 3766.7 3043.75 3771.07 3049.15 3771.07 c
3054.55 3771.07 3058.93 3766.7 3058.93 3761.3 c
f
n
3018.2 4587.29 m
3018.2 4581.89 3013.82 4577.52 3008.42 4577.52 c
3003.02 4577.52 2998.64 4581.89 2998.64 4587.29 c
2998.64 4592.69 3003.02 4597.07 3008.42 4597.07 c
3013.82 4597.07 3018.2 4592.69 3018.2 4587.29 c
f
n
3023.08 4535.97 m
3023.08 4530.57 3018.71 4526.2 3013.31 4526.2 c
3007.91 4526.2 3003.53 4530.57 3003.53 4535.97 c
3003.53 4541.37 3007.91 4545.75 3013.31 4545.75 c
3018.71 4545.75 3023.08 4541.37 3023.08 4535.97 c
f
n
3027.97 4484.65 m
3027.97 4479.25 3023.59 4474.88 3018.2 4474.88 c
3012.8 4474.88 3008.42 4479.25 3008.42 4484.65 c
3008.42 4490.05 3012.8 4494.43 3018.2 4494.43 c
3023.59 4494.43 3027.97 4490.05 3027.97 4484.65 c
f
n
3032.86 4432.52 m
3032.86 4427.12 3028.48 4422.74 3023.08 4422.74 c
3017.68 4422.74 3013.31 4427.12 3013.31 4432.52 c
3013.31 4437.92 3017.68 4442.29 3023.08 4442.29 c
3028.48 4442.29 3032.86 4437.92 3032.86 4432.52 c
f
n
3038.56 4381.2 m
3038.56 4375.8 3034.18 4371.43 3028.79 4371.43 c
3023.39 4371.43 3019.01 4375.8 3019.01 4381.2 c
3019.01 4386.6 3023.39 4390.97 3028.79 4390.97 c
3034.18 4390.97 3038.56 4386.6 3038.56 4381.2 c
f
n
3043.45 4329.88 m
3043.45 4324.48 3039.07 4320.11 3033.67 4320.11 c
3028.27 4320.11 3023.9 4324.48 3023.9 4329.88 c
3023.9 4335.28 3028.27 4339.66 3033.67 4339.66 c
3039.07 4339.66 3043.45 4335.28 3043.45 4329.88 c
f
n
3048.34 4278.56 m
3048.34 4273.16 3043.96 4268.79 3038.56 4268.79 c
3033.16 4268.79 3028.79 4273.16 3028.79 4278.56 c
3028.79 4283.96 3033.16 4288.34 3038.56 4288.34 c
3043.96 4288.34 3048.34 4283.96 3048.34 4278.56 c
f
n
3053.22 4227.24 m
3053.22 4221.84 3048.85 4217.46 3043.45 4217.46 c
3038.05 4217.46 3033.67 4221.84 3033.67 4227.24 c
3033.67 4232.64 3038.05 4237.02 3043.45 4237.02 c
3048.85 4237.02 3053.22 4232.64 3053.22 4227.24 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3063.81 4123.79 m
3063.81 4118.39 3059.43 4114.01 3054.04 4114.01 c
3048.64 4114.01 3044.26 4118.39 3044.26 4123.79 c
3044.26 4129.19 3048.64 4133.56 3054.04 4133.56 c
3059.43 4133.56 3063.81 4129.19 3063.81 4123.79 c
f
n
3068.7 4072.47 m
3068.7 4067.07 3064.32 4062.7 3058.93 4062.7 c
3053.53 4062.7 3049.15 4067.07 3049.15 4072.47 c
3049.15 4077.87 3053.53 4082.25 3058.93 4082.25 c
3064.32 4082.25 3068.7 4077.87 3068.7 4072.47 c
f
n
3073.59 4021.15 m
3073.59 4015.75 3069.21 4011.38 3063.81 4011.38 c
3058.41 4011.38 3054.04 4015.75 3054.04 4021.15 c
3054.04 4026.55 3058.41 4030.93 3063.81 4030.93 c
3069.21 4030.93 3073.59 4026.55 3073.59 4021.15 c
f
n
3078.48 3969.83 m
3078.48 3964.43 3074.1 3960.05 3068.7 3960.05 c
3063.3 3960.05 3058.93 3964.43 3058.93 3969.83 c
3058.93 3975.23 3063.3 3979.61 3068.7 3979.61 c
3074.1 3979.61 3078.48 3975.23 3078.48 3969.83 c
f
n
3084.18 3918.51 m
3084.18 3913.11 3079.8 3908.73 3074.4 3908.73 c
3069.0 3908.73 3064.62 3913.11 3064.62 3918.51 c
3064.62 3923.91 3069.0 3928.29 3074.4 3928.29 c
3079.8 3928.29 3084.18 3923.91 3084.18 3918.51 c
f
n
3089.07 3866.38 m
3089.07 3860.98 3084.69 3856.6 3079.29 3856.6 c
3073.89 3856.6 3069.52 3860.98 3069.52 3866.38 c
3069.52 3871.78 3073.89 3876.15 3079.29 3876.15 c
3084.69 3876.15 3089.07 3871.78 3089.07 3866.38 c
f
n
3093.95 3815.06 m
3093.95 3809.66 3089.57 3805.28 3084.18 3805.28 c
3078.78 3805.28 3074.4 3809.66 3074.4 3815.06 c
3074.4 3820.46 3078.78 3824.83 3084.18 3824.83 c
3089.57 3824.83 3093.95 3820.46 3093.95 3815.06 c
f
n
3098.84 3763.74 m
3098.84 3758.34 3094.46 3753.96 3089.07 3753.96 c
3083.67 3753.96 3079.29 3758.34 3079.29 3763.74 c
3079.29 3769.14 3083.67 3773.52 3089.07 3773.52 c
3094.46 3773.52 3098.84 3769.14 3098.84 3763.74 c
f
n
2977.46 4581.59 m
2977.46 4576.19 2973.09 4571.81 2967.69 4571.81 c
2962.29 4571.81 2957.91 4576.19 2957.91 4581.59 c
2957.91 4586.99 2962.29 4591.36 2967.69 4591.36 c
2973.09 4591.36 2977.46 4586.99 2977.46 4581.59 c
f
n
2988.05 4530.27 m
2988.05 4524.87 2983.68 4520.5 2978.28 4520.5 c
2972.88 4520.5 2968.5 4524.87 2968.5 4530.27 c
2968.5 4535.67 2972.88 4540.04 2978.28 4540.04 c
2983.68 4540.04 2988.05 4535.67 2988.05 4530.27 c
f
n
2997.83 4479.77 m
2997.83 4474.37 2993.45 4469.99 2988.05 4469.99 c
2982.66 4469.99 2978.28 4474.37 2978.28 4479.77 c
2978.28 4485.16 2982.66 4489.54 2988.05 4489.54 c
2993.45 4489.54 2997.83 4485.16 2997.83 4479.77 c
f
n
3008.42 4429.26 m
3008.42 4423.86 3004.04 4419.48 2998.64 4419.48 c
2993.25 4419.48 2988.87 4423.86 2988.87 4429.26 c
2988.87 4434.66 2993.25 4439.04 2998.64 4439.04 c
3004.04 4439.04 3008.42 4434.66 3008.42 4429.26 c
f
n
3018.2 4378.75 m
3018.2 4373.36 3013.82 4368.98 3008.42 4368.98 c
3003.02 4368.98 2998.64 4373.36 2998.64 4378.75 c
2998.64 4384.15 3003.02 4388.53 3008.42 4388.53 c
3013.82 4388.53 3018.2 4384.15 3018.2 4378.75 c
f
n
3027.97 4327.44 m
3027.97 4322.04 3023.59 4317.66 3018.2 4317.66 c
3012.8 4317.66 3008.42 4322.04 3008.42 4327.44 c
3008.42 4332.84 3012.8 4337.21 3018.2 4337.21 c
3023.59 4337.21 3027.97 4332.84 3027.97 4327.44 c
f
n
3038.56 4276.93 m
3038.56 4271.54 3034.18 4267.16 3028.79 4267.16 c
3023.39 4267.16 3019.01 4271.54 3019.01 4276.93 c
3019.01 4282.33 3023.39 4286.71 3028.79 4286.71 c
3034.18 4286.71 3038.56 4282.33 3038.56 4276.93 c
f
n
3048.34 4226.43 m
3048.34 4221.03 3043.96 4216.65 3038.56 4216.65 c
3033.16 4216.65 3028.79 4221.03 3028.79 4226.43 c
3028.79 4231.82 3033.16 4236.2 3038.56 4236.2 c
3043.96 4236.2 3048.34 4231.82 3048.34 4226.43 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3068.7 4124.6 m
3068.7 4119.2 3064.32 4114.83 3058.93 4114.83 c
3053.53 4114.83 3049.15 4119.2 3049.15 4124.6 c
3049.15 4130.0 3053.53 4134.38 3058.93 4134.38 c
3064.32 4134.38 3068.7 4130.0 3068.7 4124.6 c
f
n
3078.48 4074.1 m
3078.48 4068.7 3074.1 4064.32 3068.7 4064.32 c
3063.3 4064.32 3058.93 4068.7 3058.93 4074.1 c
3058.93 4079.5 3063.3 4083.88 3068.7 4083.88 c
3074.1 4083.88 3078.48 4079.5 3078.48 4074.1 c
f
n
3089.07 4023.59 m
3089.07 4018.2 3084.69 4013.82 3079.29 4013.82 c
3073.89 4013.82 3069.52 4018.2 3069.52 4023.59 c
3069.52 4028.99 3073.89 4033.37 3079.29 4033.37 c
3084.69 4033.37 3089.07 4028.99 3089.07 4023.59 c
f
n
3098.84 3972.27 m
3098.84 3966.88 3094.46 3962.5 3089.07 3962.5 c
3083.67 3962.5 3079.29 3966.88 3079.29 3972.27 c
3079.29 3977.67 3083.67 3982.05 3089.07 3982.05 c
3094.46 3982.05 3098.84 3977.67 3098.84 3972.27 c
f
n
3108.61 3921.77 m
3108.61 3916.37 3104.24 3912.0 3098.84 3912.0 c
3093.44 3912.0 3089.07 3916.37 3089.07 3921.77 c
3089.07 3927.17 3093.44 3931.54 3098.84 3931.54 c
3104.24 3931.54 3108.61 3927.17 3108.61 3921.77 c
f
n
3119.2 3871.27 m
3119.2 3865.87 3114.83 3861.49 3109.43 3861.49 c
3104.03 3861.49 3099.65 3865.87 3099.65 3871.27 c
3099.65 3876.66 3104.03 3881.04 3109.43 3881.04 c
3114.83 3881.04 3119.2 3876.66 3119.2 3871.27 c
f
n
3128.98 3820.76 m
3128.98 3815.36 3124.6 3810.98 3119.2 3810.98 c
3113.8 3810.98 3109.43 3815.36 3109.43 3820.76 c
3109.43 3826.16 3113.8 3830.54 3119.2 3830.54 c
3124.6 3830.54 3128.98 3826.16 3128.98 3820.76 c
f
n
3139.57 3769.44 m
3139.57 3764.04 3135.19 3759.67 3129.79 3759.67 c
3124.39 3759.67 3120.02 3764.04 3120.02 3769.44 c
3120.02 3774.84 3124.39 3779.21 3129.79 3779.21 c
3135.19 3779.21 3139.57 3774.84 3139.57 3769.44 c
f
n
2938.36 4571.81 m
2938.36 4566.41 2933.99 4562.04 2928.59 4562.04 c
2923.19 4562.04 2918.82 4566.41 2918.82 4571.81 c
2918.82 4577.21 2923.19 4581.59 2928.59 4581.59 c
2933.99 4581.59 2938.36 4577.21 2938.36 4571.81 c
f
n
2953.03 4522.12 m
2953.03 4516.73 2948.65 4512.35 2943.25 4512.35 c
2937.86 4512.35 2933.48 4516.73 2933.48 4522.12 c
2933.48 4527.52 2937.86 4531.9 2943.25 4531.9 c
2948.65 4531.9 2953.03 4527.52 2953.03 4522.12 c
f
n
2968.5 4472.43 m
2968.5 4467.04 2964.13 4462.66 2958.73 4462.66 c
2953.33 4462.66 2948.95 4467.04 2948.95 4472.43 c
2948.95 4477.83 2953.33 4482.21 2958.73 4482.21 c
2964.13 4482.21 2968.5 4477.83 2968.5 4472.43 c
f
n
2983.17 4422.74 m
2983.17 4417.34 2978.79 4412.97 2973.39 4412.97 c
2967.99 4412.97 2963.62 4417.34 2963.62 4422.74 c
2963.62 4428.14 2967.99 4432.52 2973.39 4432.52 c
2978.79 4432.52 2983.17 4428.14 2983.17 4422.74 c
f
n
2998.64 4373.87 m
2998.64 4368.47 2994.27 4364.09 2988.87 4364.09 c
2983.47 4364.09 2979.09 4368.47 2979.09 4373.87 c
2979.09 4379.27 2983.47 4383.64 2988.87 4383.64 c
2994.27 4383.64 2998.64 4379.27 2998.64 4373.87 c
f
n
3013.31 4324.18 m
3013.31 4318.78 3008.93 4314.4 3003.53 4314.4 c
2998.13 4314.4 2993.76 4318.78 2993.76 4324.18 c
2993.76 4329.58 2998.13 4333.95 3003.53 4333.95 c
3008.93 4333.95 3013.31 4329.58 3013.31 4324.18 c
f
n
3028.79 4274.49 m
3028.79 4269.09 3024.41 4264.71 3019.01 4264.71 c
3013.61 4264.71 3009.23 4269.09 3009.23 4274.49 c
3009.23 4279.89 3013.61 4284.26 3019.01 4284.26 c
3024.41 4284.26 3028.79 4279.89 3028.79 4274.49 c
f
n
3043.45 4224.8 m
3043.45 4219.4 3039.07 4215.02 3033.67 4215.02 c
3028.27 4215.02 3023.9 4219.4 3023.9 4224.8 c
3023.9 4230.2 3028.27 4234.57 3033.67 4234.57 c
3039.07 4234.57 3043.45 4230.2 3043.45 4224.8 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3073.59 4126.23 m
3073.59 4120.83 3069.21 4116.46 3063.81 4116.46 c
3058.41 4116.46 3054.04 4120.83 3054.04 4126.23 c
3054.04 4131.63 3058.41 4136.01 3063.81 4136.01 c
3069.21 4136.01 3073.59 4131.63 3073.59 4126.23 c
f
n
3088.25 4076.54 m
3088.25 4071.14 3083.88 4066.77 3078.48 4066.77 c
3073.08 4066.77 3068.7 4071.14 3068.7 4076.54 c
3068.7 4081.94 3073.08 4086.32 3078.48 4086.32 c
3083.88 4086.32 3088.25 4081.94 3088.25 4076.54 c
f
n
3103.73 4026.85 m
3103.73 4021.45 3099.35 4017.08 3093.95 4017.08 c
3088.55 4017.08 3084.18 4021.45 3084.18 4026.85 c
3084.18 4032.25 3088.55 4036.63 3093.95 4036.63 c
3099.35 4036.63 3103.73 4032.25 3103.73 4026.85 c
f
n
3118.39 3977.16 m
3118.39 3971.76 3114.01 3967.39 3108.61 3967.39 c
3103.21 3967.39 3098.84 3971.76 3098.84 3977.16 c
3098.84 3982.56 3103.21 3986.94 3108.61 3986.94 c
3114.01 3986.94 3118.39 3982.56 3118.39 3977.16 c
f
n
3133.87 3928.29 m
3133.87 3922.89 3129.49 3918.51 3124.09 3918.51 c
3118.7 3918.51 3114.32 3922.89 3114.32 3928.29 c
3114.32 3933.68 3118.7 3938.06 3124.09 3938.06 c
3129.49 3938.06 3133.87 3933.68 3133.87 3928.29 c
f
n
3148.53 3878.6 m
3148.53 3873.2 3144.15 3868.82 3138.75 3868.82 c
3133.36 3868.82 3128.98 3873.2 3128.98 3878.6 c
3128.98 3884.0 3133.36 3888.37 3138.75 3888.37 c
3144.15 3888.37 3148.53 3884.0 3148.53 3878.6 c
f
n
3164.01 3828.91 m
3164.01 3823.51 3159.63 3819.13 3154.23 3819.13 c
3148.83 3819.13 3144.46 3823.51 3144.46 3828.91 c
3144.46 3834.3 3148.83 3838.68 3154.23 3838.68 c
3159.63 3838.68 3164.01 3834.3 3164.01 3828.91 c
f
n
3178.67 3779.21 m
3178.67 3773.82 3174.29 3769.44 3168.89 3769.44 c
3163.5 3769.44 3159.12 3773.82 3159.12 3779.21 c
3159.12 3784.61 3163.5 3788.99 3168.89 3788.99 c
3174.29 3788.99 3178.67 3784.61 3178.67 3779.21 c
f
n
2900.08 4557.96 m
2900.08 4552.57 2895.7 4548.19 2890.3 4548.19 c
2884.91 4548.19 2880.53 4552.57 2880.53 4557.96 c
2880.53 4563.36 2884.91 4567.74 2890.3 4567.74 c
2895.7 4567.74 2900.08 4563.36 2900.08 4557.96 c
f
n
2919.63 4509.91 m
2919.63 4504.51 2915.25 4500.13 2909.86 4500.13 c
2904.46 4500.13 2900.08 4504.51 2900.08 4509.91 c
2900.08 4515.3 2904.46 4519.68 2909.86 4519.68 c
2915.25 4519.68 2919.63 4515.3 2919.63 4509.91 c
f
n
2940.0 4461.84 m
2940.0 4456.45 2935.62 4452.07 2930.22 4452.07 c
2924.82 4452.07 2920.45 4456.45 2920.45 4461.84 c
2920.45 4467.24 2924.82 4471.62 2930.22 4471.62 c
2935.62 4471.62 2940.0 4467.24 2940.0 4461.84 c
f
n
2959.54 4414.6 m
2959.54 4409.2 2955.17 4404.82 2949.77 4404.82 c
2944.37 4404.82 2940.0 4409.2 2940.0 4414.6 c
2940.0 4420.0 2944.37 4424.37 2949.77 4424.37 c
2955.17 4424.37 2959.54 4420.0 2959.54 4414.6 c
f
n
2979.09 4366.54 m
2979.09 4361.14 2974.72 4356.76 2969.32 4356.76 c
2963.92 4356.76 2959.54 4361.14 2959.54 4366.54 c
2959.54 4371.93 2963.92 4376.31 2969.32 4376.31 c
2974.72 4376.31 2979.09 4371.93 2979.09 4366.54 c
f
n
2999.46 4318.48 m
2999.46 4313.08 2995.08 4308.7 2989.68 4308.7 c
2984.29 4308.7 2979.91 4313.08 2979.91 4318.48 c
2979.91 4323.88 2984.29 4328.25 2989.68 4328.25 c
2995.08 4328.25 2999.46 4323.88 2999.46 4318.48 c
f
n
3019.01 4271.23 m
3019.01 4265.83 3014.63 4261.45 3009.23 4261.45 c
3003.84 4261.45 2999.46 4265.83 2999.46 4271.23 c
2999.46 4276.63 3003.84 4281.0 3009.23 4281.0 c
3014.63 4281.0 3019.01 4276.63 3019.01 4271.23 c
f
n
3038.56 4223.17 m
3038.56 4217.77 3034.18 4213.39 3028.79 4213.39 c
3023.39 4213.39 3019.01 4217.77 3019.01 4223.17 c
3019.01 4228.57 3023.39 4232.95 3028.79 4232.95 c
3034.18 4232.95 3038.56 4228.57 3038.56 4223.17 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3078.48 4127.86 m
3078.48 4122.46 3074.1 4118.09 3068.7 4118.09 c
3063.3 4118.09 3058.93 4122.46 3058.93 4127.86 c
3058.93 4133.26 3063.3 4137.64 3068.7 4137.64 c
3074.1 4137.64 3078.48 4133.26 3078.48 4127.86 c
f
n
3098.02 4079.8 m
3098.02 4074.4 3093.65 4070.03 3088.25 4070.03 c
3082.85 4070.03 3078.48 4074.4 3078.48 4079.8 c
3078.48 4085.2 3082.85 4089.57 3088.25 4089.57 c
3093.65 4089.57 3098.02 4085.2 3098.02 4079.8 c
f
n
3117.57 4032.55 m
3117.57 4027.16 3113.2 4022.78 3107.8 4022.78 c
3102.4 4022.78 3098.02 4027.16 3098.02 4032.55 c
3098.02 4037.95 3102.4 4042.33 3107.8 4042.33 c
3113.2 4042.33 3117.57 4037.95 3117.57 4032.55 c
f
n
3137.94 3984.49 m
3137.94 3979.09 3133.56 3974.72 3128.16 3974.72 c
3122.77 3974.72 3118.39 3979.09 3118.39 3984.49 c
3118.39 3989.89 3122.77 3994.27 3128.16 3994.27 c
3133.56 3994.27 3137.94 3989.89 3137.94 3984.49 c
f
n
3157.49 3936.43 m
3157.49 3931.04 3153.11 3926.66 3147.71 3926.66 c
3142.32 3926.66 3137.94 3931.04 3137.94 3936.43 c
3137.94 3941.83 3142.32 3946.21 3147.71 3946.21 c
3153.11 3946.21 3157.49 3941.83 3157.49 3936.43 c
f
n
3177.04 3889.19 m
3177.04 3883.79 3172.66 3879.41 3167.27 3879.41 c
3161.87 3879.41 3157.49 3883.79 3157.49 3889.19 c
3157.49 3894.59 3161.87 3898.96 3167.27 3898.96 c
3172.66 3898.96 3177.04 3894.59 3177.04 3889.19 c
f
n
3197.41 3841.12 m
3197.41 3835.73 3193.03 3831.35 3187.63 3831.35 c
3182.23 3831.35 3177.86 3835.73 3177.86 3841.12 c
3177.86 3846.52 3182.23 3850.9 3187.63 3850.9 c
3193.03 3850.9 3197.41 3846.52 3197.41 3841.12 c
f
n
3216.96 3793.06 m
3216.96 3787.66 3212.58 3783.29 3207.18 3783.29 c
3201.78 3783.29 3197.41 3787.66 3197.41 3793.06 c
3197.41 3798.46 3201.78 3802.84 3207.18 3802.84 c
3212.58 3802.84 3216.96 3798.46 3216.96 3793.06 c
f
n
2838.98 4586.48 m
2838.98 4581.08 2834.61 4576.7 2829.21 4576.7 c
2823.81 4576.7 2819.43 4581.08 2819.43 4586.48 c
2819.43 4591.88 2823.81 4596.25 2829.21 4596.25 c
2834.61 4596.25 2838.98 4591.88 2838.98 4586.48 c
f
n
2863.42 4540.86 m
2863.42 4535.46 2859.05 4531.09 2853.65 4531.09 c
2848.25 4531.09 2843.87 4535.46 2843.87 4540.86 c
2843.87 4546.26 2848.25 4550.63 2853.65 4550.63 c
2859.05 4550.63 2863.42 4546.26 2863.42 4540.86 c
f
n
2887.86 4495.24 m
2887.86 4489.84 2883.48 4485.47 2878.09 4485.47 c
2872.69 4485.47 2868.31 4489.84 2868.31 4495.24 c
2868.31 4500.64 2872.69 4505.02 2878.09 4505.02 c
2883.48 4505.02 2887.86 4500.64 2887.86 4495.24 c
f
n
2912.3 4449.62 m
2912.3 4444.23 2907.92 4439.85 2902.52 4439.85 c
2897.12 4439.85 2892.75 4444.23 2892.75 4449.62 c
2892.75 4455.02 2897.12 4459.4 2902.52 4459.4 c
2907.92 4459.4 2912.3 4455.02 2912.3 4449.62 c
f
n
2936.73 4404.01 m
2936.73 4398.61 2932.36 4394.23 2926.96 4394.23 c
2921.56 4394.23 2917.19 4398.61 2917.19 4404.01 c
2917.19 4409.41 2921.56 4413.78 2926.96 4413.78 c
2932.36 4413.78 2936.73 4409.41 2936.73 4404.01 c
f
n
2961.17 4358.39 m
2961.17 4352.99 2956.8 4348.62 2951.4 4348.62 c
2946.0 4348.62 2941.62 4352.99 2941.62 4358.39 c
2941.62 4363.79 2946.0 4368.16 2951.4 4368.16 c
2956.8 4368.16 2961.17 4363.79 2961.17 4358.39 c
f
n
2985.61 4312.77 m
2985.61 4307.38 2981.23 4303.0 2975.84 4303.0 c
2970.44 4303.0 2966.06 4307.38 2966.06 4312.77 c
2966.06 4318.17 2970.44 4322.55 2975.84 4322.55 c
2981.23 4322.55 2985.61 4318.17 2985.61 4312.77 c
f
n
3010.05 4267.16 m
3010.05 4261.76 3005.67 4257.38 3000.27 4257.38 c
2994.88 4257.38 2990.5 4261.76 2990.5 4267.16 c
2990.5 4272.55 2994.88 4276.93 3000.27 4276.93 c
3005.67 4276.93 3010.05 4272.55 3010.05 4267.16 c
f
n
3034.49 4221.54 m
3034.49 4216.14 3030.11 4211.77 3024.71 4211.77 c
3019.31 4211.77 3014.94 4216.14 3014.94 4221.54 c
3014.94 4226.94 3019.31 4231.32 3024.71 4231.32 c
3030.11 4231.32 3034.49 4226.94 3034.49 4221.54 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3082.55 4129.49 m
3082.55 4124.09 3078.17 4119.71 3072.77 4119.71 c
3067.38 4119.71 3063.0 4124.09 3063.0 4129.49 c
3063.0 4134.89 3067.38 4139.27 3072.77 4139.27 c
3078.17 4139.27 3082.55 4134.89 3082.55 4129.49 c
f
n
3106.98 4083.88 m
3106.98 4078.48 3102.61 4074.1 3097.21 4074.1 c
3091.81 4074.1 3087.43 4078.48 3087.43 4083.88 c
3087.43 4089.27 3091.81 4093.65 3097.21 4093.65 c
3102.61 4093.65 3106.98 4089.27 3106.98 4083.88 c
f
n
3131.42 4038.26 m
3131.42 4032.86 3127.05 4028.48 3121.65 4028.48 c
3116.25 4028.48 3111.87 4032.86 3111.87 4038.26 c
3111.87 4043.66 3116.25 4048.03 3121.65 4048.03 c
3127.05 4048.03 3131.42 4043.66 3131.42 4038.26 c
f
n
3155.86 3992.64 m
3155.86 3987.24 3151.48 3982.86 3146.09 3982.86 c
3140.69 3982.86 3136.31 3987.24 3136.31 3992.64 c
3136.31 3998.04 3140.69 4002.41 3146.09 4002.41 c
3151.48 4002.41 3155.86 3998.04 3155.86 3992.64 c
f
n
3180.3 3947.02 m
3180.3 3941.62 3175.92 3937.25 3170.52 3937.25 c
3165.12 3937.25 3160.75 3941.62 3160.75 3947.02 c
3160.75 3952.42 3165.12 3956.8 3170.52 3956.8 c
3175.92 3956.8 3180.3 3952.42 3180.3 3947.02 c
f
n
3204.74 3901.41 m
3204.74 3896.01 3200.36 3891.63 3194.96 3891.63 c
3189.56 3891.63 3185.19 3896.01 3185.19 3901.41 c
3185.19 3906.8 3189.56 3911.18 3194.96 3911.18 c
3200.36 3911.18 3204.74 3906.8 3204.74 3901.41 c
f
n
3229.18 3855.79 m
3229.18 3850.39 3224.8 3846.01 3219.4 3846.01 c
3214.0 3846.01 3209.62 3850.39 3209.62 3855.79 c
3209.62 3861.19 3214.0 3865.56 3219.4 3865.56 c
3224.8 3865.56 3229.18 3861.19 3229.18 3855.79 c
f
n
3253.61 3810.17 m
3253.61 3804.77 3249.23 3800.39 3243.84 3800.39 c
3238.44 3800.39 3234.06 3804.77 3234.06 3810.17 c
3234.06 3815.57 3238.44 3819.95 3243.84 3819.95 c
3249.23 3819.95 3253.61 3815.57 3253.61 3810.17 c
f
n
3278.05 3764.55 m
3278.05 3759.16 3273.67 3754.78 3268.27 3754.78 c
3262.88 3754.78 3258.5 3759.16 3258.5 3764.55 c
3258.5 3769.95 3262.88 3774.33 3268.27 3774.33 c
3273.67 3774.33 3278.05 3769.95 3278.05 3764.55 c
f
n
2799.88 4562.85 m
2799.88 4557.45 2795.51 4553.08 2790.11 4553.08 c
2784.71 4553.08 2780.34 4557.45 2780.34 4562.85 c
2780.34 4568.25 2784.71 4572.63 2790.11 4572.63 c
2795.51 4572.63 2799.88 4568.25 2799.88 4562.85 c
f
n
2828.39 4519.68 m
2828.39 4514.28 2824.02 4509.91 2818.62 4509.91 c
2813.22 4509.91 2808.84 4514.28 2808.84 4519.68 c
2808.84 4525.08 2813.22 4529.46 2818.62 4529.46 c
2824.02 4529.46 2828.39 4525.08 2828.39 4519.68 c
f
n
2857.72 4476.51 m
2857.72 4471.11 2853.34 4466.73 2847.95 4466.73 c
2842.55 4466.73 2838.17 4471.11 2838.17 4476.51 c
2838.17 4481.91 2842.55 4486.28 2847.95 4486.28 c
2853.34 4486.28 2857.72 4481.91 2857.72 4476.51 c
f
n
2886.23 4433.33 m
2886.23 4427.93 2881.86 4423.56 2876.46 4423.56 c
2871.06 4423.56 2866.68 4427.93 2866.68 4433.33 c
2866.68 4438.73 2871.06 4443.11 2876.46 4443.11 c
2881.86 4443.11 2886.23 4438.73 2886.23 4433.33 c
f
n
2914.74 4390.16 m
2914.74 4384.76 2910.36 4380.39 2904.96 4380.39 c
2899.57 4380.39 2895.19 4384.76 2895.19 4390.16 c
2895.19 4395.56 2899.57 4399.93 2904.96 4399.93 c
2910.36 4399.93 2914.74 4395.56 2914.74 4390.16 c
f
n
2943.25 4347.8 m
2943.25 4342.4 2938.88 4338.03 2933.48 4338.03 c
2928.08 4338.03 2923.7 4342.4 2923.7 4347.8 c
2923.7 4353.2 2928.08 4357.58 2933.48 4357.58 c
2938.88 4357.58 2943.25 4353.2 2943.25 4347.8 c
f
n
2972.58 4304.63 m
2972.58 4299.23 2968.2 4294.85 2962.8 4294.85 c
2957.41 4294.85 2953.03 4299.23 2953.03 4304.63 c
2953.03 4310.03 2957.41 4314.4 2962.8 4314.4 c
2968.2 4314.4 2972.58 4310.03 2972.58 4304.63 c
f
n
3001.09 4261.45 m
3001.09 4256.05 2996.71 4251.68 2991.31 4251.68 c
2985.91 4251.68 2981.54 4256.05 2981.54 4261.45 c
2981.54 4266.85 2985.91 4271.23 2991.31 4271.23 c
2996.71 4271.23 3001.09 4266.85 3001.09 4261.45 c
f
n
3029.6 4218.28 m
3029.6 4212.88 3025.22 4208.51 3019.82 4208.51 c
3014.43 4208.51 3010.05 4212.88 3010.05 4218.28 c
3010.05 4223.68 3014.43 4228.05 3019.82 4228.05 c
3025.22 4228.05 3029.6 4223.68 3029.6 4218.28 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3087.43 4132.75 m
3087.43 4127.35 3083.06 4122.97 3077.66 4122.97 c
3072.26 4122.97 3067.89 4127.35 3067.89 4132.75 c
3067.89 4138.15 3072.26 4142.52 3077.66 4142.52 c
3083.06 4142.52 3087.43 4138.15 3087.43 4132.75 c
f
n
3115.95 4089.57 m
3115.95 4084.18 3111.57 4079.8 3106.17 4079.8 c
3100.77 4079.8 3096.39 4084.18 3096.39 4089.57 c
3096.39 4094.97 3100.77 4099.35 3106.17 4099.35 c
3111.57 4099.35 3115.95 4094.97 3115.95 4089.57 c
f
n
3144.46 4046.4 m
3144.46 4041.0 3140.08 4036.63 3134.68 4036.63 c
3129.28 4036.63 3124.91 4041.0 3124.91 4046.4 c
3124.91 4051.8 3129.28 4056.18 3134.68 4056.18 c
3140.08 4056.18 3144.46 4051.8 3144.46 4046.4 c
f
n
3173.78 4003.23 m
3173.78 3997.83 3169.41 3993.45 3164.01 3993.45 c
3158.61 3993.45 3154.23 3997.83 3154.23 4003.23 c
3154.23 4008.63 3158.61 4013.0 3164.01 4013.0 c
3169.41 4013.0 3173.78 4008.63 3173.78 4003.23 c
f
n
3202.29 3960.87 m
3202.29 3955.47 3197.92 3951.09 3192.52 3951.09 c
3187.12 3951.09 3182.74 3955.47 3182.74 3960.87 c
3182.74 3966.27 3187.12 3970.64 3192.52 3970.64 c
3197.92 3970.64 3202.29 3966.27 3202.29 3960.87 c
f
n
3230.8 3917.7 m
3230.8 3912.3 3226.43 3907.92 3221.03 3907.92 c
3215.63 3907.92 3211.25 3912.3 3211.25 3917.7 c
3211.25 3923.09 3215.63 3927.47 3221.03 3927.47 c
3226.43 3927.47 3230.8 3923.09 3230.8 3917.7 c
f
n
3259.31 3874.52 m
3259.31 3869.12 3254.94 3864.75 3249.54 3864.75 c
3244.14 3864.75 3239.77 3869.12 3239.77 3874.52 c
3239.77 3879.92 3244.14 3884.3 3249.54 3884.3 c
3254.94 3884.3 3259.31 3879.92 3259.31 3874.52 c
f
n
3288.64 3831.35 m
3288.64 3825.95 3284.26 3821.57 3278.86 3821.57 c
3273.46 3821.57 3269.09 3825.95 3269.09 3831.35 c
3269.09 3836.75 3273.46 3841.12 3278.86 3841.12 c
3284.26 3841.12 3288.64 3836.75 3288.64 3831.35 c
f
n
3317.15 3788.18 m
3317.15 3782.78 3312.77 3778.4 3307.38 3778.4 c
3301.98 3778.4 3297.6 3782.78 3297.6 3788.18 c
3297.6 3793.57 3301.98 3797.95 3307.38 3797.95 c
3312.77 3797.95 3317.15 3793.57 3317.15 3788.18 c
f
n
2730.64 4575.07 m
2730.64 4569.67 2726.27 4565.3 2720.87 4565.3 c
2715.47 4565.3 2711.09 4569.67 2711.09 4575.07 c
2711.09 4580.47 2715.47 4584.85 2720.87 4584.85 c
2726.27 4584.85 2730.64 4580.47 2730.64 4575.07 c
f
n
2763.23 4535.16 m
2763.23 4529.76 2758.85 4525.38 2753.45 4525.38 c
2748.05 4525.38 2743.68 4529.76 2743.68 4535.16 c
2743.68 4540.55 2748.05 4544.93 2753.45 4544.93 c
2758.85 4544.93 2763.23 4540.55 2763.23 4535.16 c
f
n
2795.81 4495.24 m
2795.81 4489.84 2791.43 4485.47 2786.04 4485.47 c
2780.64 4485.47 2776.26 4489.84 2776.26 4495.24 c
2776.26 4500.64 2780.64 4505.02 2786.04 4505.02 c
2791.43 4505.02 2795.81 4500.64 2795.81 4495.24 c
f
n
2829.21 4455.33 m
2829.21 4449.93 2824.83 4445.55 2819.43 4445.55 c
2814.04 4445.55 2809.66 4449.93 2809.66 4455.33 c
2809.66 4460.73 2814.04 4465.1 2819.43 4465.1 c
2824.83 4465.1 2829.21 4460.73 2829.21 4455.33 c
f
n
2861.79 4415.41 m
2861.79 4410.02 2857.42 4405.64 2852.02 4405.64 c
2846.62 4405.64 2842.24 4410.02 2842.24 4415.41 c
2842.24 4420.81 2846.62 4425.19 2852.02 4425.19 c
2857.42 4425.19 2861.79 4420.81 2861.79 4415.41 c
f
n
2894.38 4375.5 m
2894.38 4370.1 2890.0 4365.72 2884.6 4365.72 c
2879.2 4365.72 2874.83 4370.1 2874.83 4375.5 c
2874.83 4380.89 2879.2 4385.27 2884.6 4385.27 c
2890.0 4385.27 2894.38 4380.89 2894.38 4375.5 c
f
n
2926.96 4335.58 m
2926.96 4330.18 2922.59 4325.81 2917.19 4325.81 c
2911.79 4325.81 2907.41 4330.18 2907.41 4335.58 c
2907.41 4340.98 2911.79 4345.36 2917.19 4345.36 c
2922.59 4345.36 2926.96 4340.98 2926.96 4335.58 c
f
n
2960.36 4295.67 m
2960.36 4290.27 2955.98 4285.89 2950.58 4285.89 c
2945.18 4285.89 2940.81 4290.27 2940.81 4295.67 c
2940.81 4301.07 2945.18 4305.44 2950.58 4305.44 c
2955.98 4305.44 2960.36 4301.07 2960.36 4295.67 c
f
n
2992.94 4255.75 m
2992.94 4250.36 2988.57 4245.98 2983.17 4245.98 c
2977.77 4245.98 2973.39 4250.36 2973.39 4255.75 c
2973.39 4261.15 2977.77 4265.53 2983.17 4265.53 c
2988.57 4265.53 2992.94 4261.15 2992.94 4255.75 c
f
n
3025.53 4215.84 m
3025.53 4210.44 3021.15 4206.06 3015.75 4206.06 c
3010.35 4206.06 3005.98 4210.44 3005.98 4215.84 c
3005.98 4221.23 3010.35 4225.61 3015.75 4225.61 c
3021.15 4225.61 3025.53 4221.23 3025.53 4215.84 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3091.51 4135.19 m
3091.51 4129.79 3087.13 4125.42 3081.73 4125.42 c
3076.34 4125.42 3071.96 4129.79 3071.96 4135.19 c
3071.96 4140.59 3076.34 4144.97 3081.73 4144.97 c
3087.13 4144.97 3091.51 4140.59 3091.51 4135.19 c
f
n
3124.09 4095.28 m
3124.09 4089.88 3119.71 4085.5 3114.32 4085.5 c
3108.92 4085.5 3104.54 4089.88 3104.54 4095.28 c
3104.54 4100.68 3108.92 4105.05 3114.32 4105.05 c
3119.71 4105.05 3124.09 4100.68 3124.09 4095.28 c
f
n
3156.68 4055.36 m
3156.68 4049.96 3152.3 4045.59 3146.9 4045.59 c
3141.5 4045.59 3137.12 4049.96 3137.12 4055.36 c
3137.12 4060.76 3141.5 4065.14 3146.9 4065.14 c
3152.3 4065.14 3156.68 4060.76 3156.68 4055.36 c
f
n
3190.07 4015.45 m
3190.07 4010.05 3185.7 4005.67 3180.3 4005.67 c
3174.9 4005.67 3170.52 4010.05 3170.52 4015.45 c
3170.52 4020.85 3174.9 4025.22 3180.3 4025.22 c
3185.7 4025.22 3190.07 4020.85 3190.07 4015.45 c
f
n
3222.66 3975.53 m
3222.66 3970.13 3218.28 3965.76 3212.88 3965.76 c
3207.48 3965.76 3203.11 3970.13 3203.11 3975.53 c
3203.11 3980.93 3207.48 3985.31 3212.88 3985.31 c
3218.28 3985.31 3222.66 3980.93 3222.66 3975.53 c
f
n
3255.24 3935.62 m
3255.24 3930.22 3250.86 3925.84 3245.46 3925.84 c
3240.07 3925.84 3235.69 3930.22 3235.69 3935.62 c
3235.69 3941.02 3240.07 3945.39 3245.46 3945.39 c
3250.86 3945.39 3255.24 3941.02 3255.24 3935.62 c
f
n
3287.82 3895.7 m
3287.82 3890.3 3283.45 3885.93 3278.05 3885.93 c
3272.65 3885.93 3268.27 3890.3 3268.27 3895.7 c
3268.27 3901.1 3272.65 3905.48 3278.05 3905.48 c
3283.45 3905.48 3287.82 3901.1 3287.82 3895.7 c
f
n
3321.22 3855.79 m
3321.22 3850.39 3316.85 3846.01 3311.45 3846.01 c
3306.05 3846.01 3301.67 3850.39 3301.67 3855.79 c
3301.67 3861.19 3306.05 3865.56 3311.45 3865.56 c
3316.85 3865.56 3321.22 3861.19 3321.22 3855.79 c
f
n
3353.81 3815.87 m
3353.81 3810.47 3349.43 3806.1 3344.03 3806.1 c
3338.63 3806.1 3334.26 3810.47 3334.26 3815.87 c
3334.26 3821.27 3338.63 3825.65 3344.03 3825.65 c
3349.43 3825.65 3353.81 3821.27 3353.81 3815.87 c
f
n
3386.39 3775.96 m
3386.39 3770.56 3382.02 3766.18 3376.62 3766.18 c
3371.22 3766.18 3366.84 3770.56 3366.84 3775.96 c
3366.84 3781.36 3371.22 3785.73 3376.62 3785.73 c
3382.02 3785.73 3386.39 3781.36 3386.39 3775.96 c
f
n
2656.52 4577.52 m
2656.52 4572.12 2652.14 4567.74 2646.74 4567.74 c
2641.34 4567.74 2636.96 4572.12 2636.96 4577.52 c
2636.96 4582.91 2641.34 4587.29 2646.74 4587.29 c
2652.14 4587.29 2656.52 4582.91 2656.52 4577.52 c
f
n
2692.36 4541.68 m
2692.36 4536.28 2687.98 4531.9 2682.58 4531.9 c
2677.18 4531.9 2672.81 4536.28 2672.81 4541.68 c
2672.81 4547.07 2677.18 4551.45 2682.58 4551.45 c
2687.98 4551.45 2692.36 4547.07 2692.36 4541.68 c
f
n
2729.02 4505.02 m
2729.02 4499.62 2724.64 4495.24 2719.24 4495.24 c
2713.84 4495.24 2709.46 4499.62 2709.46 4505.02 c
2709.46 4510.41 2713.84 4514.79 2719.24 4514.79 c
2724.64 4514.79 2729.02 4510.41 2729.02 4505.02 c
f
n
2765.67 4468.36 m
2765.67 4462.96 2761.3 4458.59 2755.9 4458.59 c
2750.5 4458.59 2746.12 4462.96 2746.12 4468.36 c
2746.12 4473.76 2750.5 4478.14 2755.9 4478.14 c
2761.3 4478.14 2765.67 4473.76 2765.67 4468.36 c
f
n
2802.33 4431.7 m
2802.33 4426.3 2797.95 4421.93 2792.55 4421.93 c
2787.16 4421.93 2782.78 4426.3 2782.78 4431.7 c
2782.78 4437.1 2787.16 4441.48 2792.55 4441.48 c
2797.95 4441.48 2802.33 4437.1 2802.33 4431.7 c
f
n
2838.98 4395.05 m
2838.98 4389.65 2834.61 4385.27 2829.21 4385.27 c
2823.81 4385.27 2819.43 4389.65 2819.43 4395.05 c
2819.43 4400.45 2823.81 4404.82 2829.21 4404.82 c
2834.61 4404.82 2838.98 4400.45 2838.98 4395.05 c
f
n
2875.64 4358.39 m
2875.64 4352.99 2871.27 4348.62 2865.87 4348.62 c
2860.47 4348.62 2856.09 4352.99 2856.09 4358.39 c
2856.09 4363.79 2860.47 4368.16 2865.87 4368.16 c
2871.27 4368.16 2875.64 4363.79 2875.64 4358.39 c
f
n
2912.3 4321.73 m
2912.3 4316.34 2907.92 4311.96 2902.52 4311.96 c
2897.12 4311.96 2892.75 4316.34 2892.75 4321.73 c
2892.75 4327.13 2897.12 4331.51 2902.52 4331.51 c
2907.92 4331.51 2912.3 4327.13 2912.3 4321.73 c
f
n
2948.95 4285.08 m
2948.95 4279.68 2944.58 4275.3 2939.18 4275.3 c
2933.78 4275.3 2929.41 4279.68 2929.41 4285.08 c
2929.41 4290.48 2933.78 4294.85 2939.18 4294.85 c
2944.58 4294.85 2948.95 4290.48 2948.95 4285.08 c
f
n
2985.61 4248.42 m
2985.61 4243.02 2981.23 4238.64 2975.84 4238.64 c
2970.44 4238.64 2966.06 4243.02 2966.06 4248.42 c
2966.06 4253.82 2970.44 4258.2 2975.84 4258.2 c
2981.23 4258.2 2985.61 4253.82 2985.61 4248.42 c
f
n
3022.27 4211.77 m
3022.27 4206.37 3017.89 4201.99 3012.49 4201.99 c
3007.09 4201.99 3002.72 4206.37 3002.72 4211.77 c
3002.72 4217.16 3007.09 4221.54 3012.49 4221.54 c
3017.89 4221.54 3022.27 4217.16 3022.27 4211.77 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3094.77 4139.27 m
3094.77 4133.87 3090.39 4129.49 3084.99 4129.49 c
3079.59 4129.49 3075.21 4133.87 3075.21 4139.27 c
3075.21 4144.66 3079.59 4149.04 3084.99 4149.04 c
3090.39 4149.04 3094.77 4144.66 3094.77 4139.27 c
f
n
3131.42 4102.61 m
3131.42 4097.21 3127.05 4092.84 3121.65 4092.84 c
3116.25 4092.84 3111.87 4097.21 3111.87 4102.61 c
3111.87 4108.01 3116.25 4112.38 3121.65 4112.38 c
3127.05 4112.38 3131.42 4108.01 3131.42 4102.61 c
f
n
3168.08 4065.95 m
3168.08 4060.55 3163.7 4056.18 3158.3 4056.18 c
3152.91 4056.18 3148.53 4060.55 3148.53 4065.95 c
3148.53 4071.35 3152.91 4075.73 3158.3 4075.73 c
3163.7 4075.73 3168.08 4071.35 3168.08 4065.95 c
f
n
3204.74 4029.3 m
3204.74 4023.9 3200.36 4019.52 3194.96 4019.52 c
3189.56 4019.52 3185.19 4023.9 3185.19 4029.3 c
3185.19 4034.7 3189.56 4039.07 3194.96 4039.07 c
3200.36 4039.07 3204.74 4034.7 3204.74 4029.3 c
f
n
3241.39 3992.64 m
3241.39 3987.24 3237.02 3982.86 3231.62 3982.86 c
3226.22 3982.86 3221.84 3987.24 3221.84 3992.64 c
3221.84 3998.04 3226.22 4002.41 3231.62 4002.41 c
3237.02 4002.41 3241.39 3998.04 3241.39 3992.64 c
f
n
3278.05 3955.98 m
3278.05 3950.59 3273.67 3946.21 3268.27 3946.21 c
3262.88 3946.21 3258.5 3950.59 3258.5 3955.98 c
3258.5 3961.38 3262.88 3965.76 3268.27 3965.76 c
3273.67 3965.76 3278.05 3961.38 3278.05 3955.98 c
f
n
3314.71 3919.32 m
3314.71 3913.93 3310.33 3909.55 3304.93 3909.55 c
3299.53 3909.55 3295.16 3913.93 3295.16 3919.32 c
3295.16 3924.72 3299.53 3929.1 3304.93 3929.1 c
3310.33 3929.1 3314.71 3924.72 3314.71 3919.32 c
f
n
3351.36 3882.67 m
3351.36 3877.27 3346.98 3872.89 3341.59 3872.89 c
3336.19 3872.89 3331.81 3877.27 3331.81 3882.67 c
3331.81 3888.07 3336.19 3892.45 3341.59 3892.45 c
3346.98 3892.45 3351.36 3888.07 3351.36 3882.67 c
f
n
3388.02 3846.01 m
3388.02 3840.61 3383.64 3836.24 3378.25 3836.24 c
3372.85 3836.24 3368.47 3840.61 3368.47 3846.01 c
3368.47 3851.41 3372.85 3855.79 3378.25 3855.79 c
3383.64 3855.79 3388.02 3851.41 3388.02 3846.01 c
f
n
3424.68 3809.36 m
3424.68 3803.96 3420.3 3799.58 3414.9 3799.58 c
3409.5 3799.58 3405.12 3803.96 3405.12 3809.36 c
3405.12 3814.75 3409.5 3819.13 3414.9 3819.13 c
3420.3 3819.13 3424.68 3814.75 3424.68 3809.36 c
f
n
3460.52 3773.52 m
3460.52 3768.12 3456.14 3763.74 3450.74 3763.74 c
3445.34 3763.74 3440.97 3768.12 3440.97 3773.52 c
3440.97 3778.91 3445.34 3783.29 3450.74 3783.29 c
3456.14 3783.29 3460.52 3778.91 3460.52 3773.52 c
f
n
2658.96 4503.39 m
2658.96 4497.99 2654.58 4493.61 2649.18 4493.61 c
2643.79 4493.61 2639.41 4497.99 2639.41 4503.39 c
2639.41 4508.79 2643.79 4513.16 2649.18 4513.16 c
2654.58 4513.16 2658.96 4508.79 2658.96 4503.39 c
f
n
2698.88 4470.8 m
2698.88 4465.41 2694.5 4461.03 2689.1 4461.03 c
2683.7 4461.03 2679.32 4465.41 2679.32 4470.8 c
2679.32 4476.2 2683.7 4480.58 2689.1 4480.58 c
2694.5 4480.58 2698.88 4476.2 2698.88 4470.8 c
f
n
2738.79 4438.22 m
2738.79 4432.82 2734.41 4428.45 2729.02 4428.45 c
2723.62 4428.45 2719.24 4432.82 2719.24 4438.22 c
2719.24 4443.62 2723.62 4448.0 2729.02 4448.0 c
2734.41 4448.0 2738.79 4443.62 2738.79 4438.22 c
f
n
2778.7 4404.82 m
2778.7 4399.43 2774.33 4395.05 2768.93 4395.05 c
2763.53 4395.05 2759.16 4399.43 2759.16 4404.82 c
2759.16 4410.22 2763.53 4414.6 2768.93 4414.6 c
2774.33 4414.6 2778.7 4410.22 2778.7 4404.82 c
f
n
2818.62 4372.24 m
2818.62 4366.84 2814.24 4362.46 2808.84 4362.46 c
2803.45 4362.46 2799.07 4366.84 2799.07 4372.24 c
2799.07 4377.64 2803.45 4382.02 2808.84 4382.02 c
2814.24 4382.02 2818.62 4377.64 2818.62 4372.24 c
f
n
2858.54 4339.66 m
2858.54 4334.26 2854.16 4329.88 2848.76 4329.88 c
2843.36 4329.88 2838.98 4334.26 2838.98 4339.66 c
2838.98 4345.05 2843.36 4349.43 2848.76 4349.43 c
2854.16 4349.43 2858.54 4345.05 2858.54 4339.66 c
f
n
2898.45 4307.07 m
2898.45 4301.67 2894.07 4297.3 2888.68 4297.3 c
2883.28 4297.3 2878.9 4301.67 2878.9 4307.07 c
2878.9 4312.47 2883.28 4316.85 2888.68 4316.85 c
2894.07 4316.85 2898.45 4312.47 2898.45 4307.07 c
f
n
2938.36 4273.67 m
2938.36 4268.27 2933.99 4263.9 2928.59 4263.9 c
2923.19 4263.9 2918.82 4268.27 2918.82 4273.67 c
2918.82 4279.07 2923.19 4283.45 2928.59 4283.45 c
2933.99 4283.45 2938.36 4279.07 2938.36 4273.67 c
f
n
2978.28 4241.09 m
2978.28 4235.69 2973.9 4231.32 2968.5 4231.32 c
2963.11 4231.32 2958.73 4235.69 2958.73 4241.09 c
2958.73 4246.49 2963.11 4250.86 2968.5 4250.86 c
2973.9 4250.86 2978.28 4246.49 2978.28 4241.09 c
f
n
3018.2 4208.51 m
3018.2 4203.11 3013.82 4198.73 3008.42 4198.73 c
3003.02 4198.73 2998.64 4203.11 2998.64 4208.51 c
2998.64 4213.91 3003.02 4218.28 3008.42 4218.28 c
3013.82 4218.28 3018.2 4213.91 3018.2 4208.51 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3098.84 4142.52 m
3098.84 4137.12 3094.46 4132.75 3089.07 4132.75 c
3083.67 4132.75 3079.29 4137.12 3079.29 4142.52 c
3079.29 4147.92 3083.67 4152.3 3089.07 4152.3 c
3094.46 4152.3 3098.84 4147.92 3098.84 4142.52 c
f
n
3138.75 4109.94 m
3138.75 4104.54 3134.38 4100.16 3128.98 4100.16 c
3123.58 4100.16 3119.2 4104.54 3119.2 4109.94 c
3119.2 4115.34 3123.58 4119.71 3128.98 4119.71 c
3134.38 4119.71 3138.75 4115.34 3138.75 4109.94 c
f
n
3178.67 4077.36 m
3178.67 4071.96 3174.29 4067.58 3168.89 4067.58 c
3163.5 4067.58 3159.12 4071.96 3159.12 4077.36 c
3159.12 4082.75 3163.5 4087.13 3168.89 4087.13 c
3174.29 4087.13 3178.67 4082.75 3178.67 4077.36 c
f
n
3218.59 4043.96 m
3218.59 4038.56 3214.21 4034.18 3208.81 4034.18 c
3203.41 4034.18 3199.04 4038.56 3199.04 4043.96 c
3199.04 4049.36 3203.41 4053.73 3208.81 4053.73 c
3214.21 4053.73 3218.59 4049.36 3218.59 4043.96 c
f
n
3258.5 4011.38 m
3258.5 4005.98 3254.12 4001.6 3248.72 4001.6 c
3243.32 4001.6 3238.95 4005.98 3238.95 4011.38 c
3238.95 4016.77 3243.32 4021.15 3248.72 4021.15 c
3254.12 4021.15 3258.5 4016.77 3258.5 4011.38 c
f
n
3298.41 3978.79 m
3298.41 3973.39 3294.04 3969.02 3288.64 3969.02 c
3283.24 3969.02 3278.86 3973.39 3278.86 3978.79 c
3278.86 3984.19 3283.24 3988.57 3288.64 3988.57 c
3294.04 3988.57 3298.41 3984.19 3298.41 3978.79 c
f
n
3338.33 3946.21 m
3338.33 3940.81 3333.95 3936.43 3328.55 3936.43 c
3323.16 3936.43 3318.78 3940.81 3318.78 3946.21 c
3318.78 3951.61 3323.16 3955.98 3328.55 3955.98 c
3333.95 3955.98 3338.33 3951.61 3338.33 3946.21 c
f
n
3378.25 3912.81 m
3378.25 3907.41 3373.87 3903.04 3368.47 3903.04 c
3363.07 3903.04 3358.7 3907.41 3358.7 3912.81 c
3358.7 3918.21 3363.07 3922.59 3368.47 3922.59 c
3373.87 3922.59 3378.25 3918.21 3378.25 3912.81 c
f
n
3418.16 3880.23 m
3418.16 3874.83 3413.78 3870.45 3408.38 3870.45 c
3402.98 3870.45 3398.61 3874.83 3398.61 3880.23 c
3398.61 3885.62 3402.98 3890.0 3408.38 3890.0 c
3413.78 3890.0 3418.16 3885.62 3418.16 3880.23 c
f
n
3458.07 3847.64 m
3458.07 3842.24 3453.7 3837.87 3448.3 3837.87 c
3442.9 3837.87 3438.52 3842.24 3438.52 3847.64 c
3438.52 3853.04 3442.9 3857.42 3448.3 3857.42 c
3453.7 3857.42 3458.07 3853.04 3458.07 3847.64 c
f
n
2671.18 4434.15 m
2671.18 4428.75 2666.8 4424.37 2661.4 4424.37 c
2656.0 4424.37 2651.63 4428.75 2651.63 4434.15 c
2651.63 4439.55 2656.0 4443.92 2661.4 4443.92 c
2666.8 4443.92 2671.18 4439.55 2671.18 4434.15 c
f
n
2714.35 4405.64 m
2714.35 4400.24 2709.98 4395.86 2704.58 4395.86 c
2699.18 4395.86 2694.8 4400.24 2694.8 4405.64 c
2694.8 4411.04 2699.18 4415.41 2704.58 4415.41 c
2709.98 4415.41 2714.35 4411.04 2714.35 4405.64 c
f
n
2757.53 4376.31 m
2757.53 4370.91 2753.15 4366.54 2747.75 4366.54 c
2742.35 4366.54 2737.98 4370.91 2737.98 4376.31 c
2737.98 4381.71 2742.35 4386.09 2747.75 4386.09 c
2753.15 4386.09 2757.53 4381.71 2757.53 4376.31 c
f
n
2800.7 4347.8 m
2800.7 4342.4 2796.32 4338.03 2790.93 4338.03 c
2785.53 4338.03 2781.15 4342.4 2781.15 4347.8 c
2781.15 4353.2 2785.53 4357.58 2790.93 4357.58 c
2796.32 4357.58 2800.7 4353.2 2800.7 4347.8 c
f
n
2843.87 4319.29 m
2843.87 4313.89 2839.5 4309.52 2834.1 4309.52 c
2828.7 4309.52 2824.32 4313.89 2824.32 4319.29 c
2824.32 4324.69 2828.7 4329.07 2834.1 4329.07 c
2839.5 4329.07 2843.87 4324.69 2843.87 4319.29 c
f
n
2886.23 4290.78 m
2886.23 4285.38 2881.86 4281.0 2876.46 4281.0 c
2871.06 4281.0 2866.68 4285.38 2866.68 4290.78 c
2866.68 4296.18 2871.06 4300.55 2876.46 4300.55 c
2881.86 4300.55 2886.23 4296.18 2886.23 4290.78 c
f
n
2929.41 4261.45 m
2929.41 4256.05 2925.03 4251.68 2919.63 4251.68 c
2914.23 4251.68 2909.86 4256.05 2909.86 4261.45 c
2909.86 4266.85 2914.23 4271.23 2919.63 4271.23 c
2925.03 4271.23 2929.41 4266.85 2929.41 4261.45 c
f
n
2972.58 4232.95 m
2972.58 4227.55 2968.2 4223.17 2962.8 4223.17 c
2957.41 4223.17 2953.03 4227.55 2953.03 4232.95 c
2953.03 4238.34 2957.41 4242.72 2962.8 4242.72 c
2968.2 4242.72 2972.58 4238.34 2972.58 4232.95 c
f
n
3015.75 4204.43 m
3015.75 4199.04 3011.38 4194.66 3005.98 4194.66 c
3000.58 4194.66 2996.2 4199.04 2996.2 4204.43 c
2996.2 4209.83 3000.58 4214.21 3005.98 4214.21 c
3011.38 4214.21 3015.75 4209.83 3015.75 4204.43 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3101.29 4146.6 m
3101.29 4141.2 3096.91 4136.82 3091.51 4136.82 c
3086.11 4136.82 3081.73 4141.2 3081.73 4146.6 c
3081.73 4152.0 3086.11 4156.37 3091.51 4156.37 c
3096.91 4156.37 3101.29 4152.0 3101.29 4146.6 c
f
n
3144.46 4118.09 m
3144.46 4112.69 3140.08 4108.31 3134.68 4108.31 c
3129.28 4108.31 3124.91 4112.69 3124.91 4118.09 c
3124.91 4123.48 3129.28 4127.86 3134.68 4127.86 c
3140.08 4127.86 3144.46 4123.48 3144.46 4118.09 c
f
n
3187.63 4089.57 m
3187.63 4084.18 3183.25 4079.8 3177.86 4079.8 c
3172.46 4079.8 3168.08 4084.18 3168.08 4089.57 c
3168.08 4094.97 3172.46 4099.35 3177.86 4099.35 c
3183.25 4099.35 3187.63 4094.97 3187.63 4089.57 c
f
n
3230.8 4060.25 m
3230.8 4054.85 3226.43 4050.48 3221.03 4050.48 c
3215.63 4050.48 3211.25 4054.85 3211.25 4060.25 c
3211.25 4065.65 3215.63 4070.03 3221.03 4070.03 c
3226.43 4070.03 3230.8 4065.65 3230.8 4060.25 c
f
n
3273.16 4031.74 m
3273.16 4026.34 3268.79 4021.96 3263.39 4021.96 c
3257.99 4021.96 3253.61 4026.34 3253.61 4031.74 c
3253.61 4037.14 3257.99 4041.52 3263.39 4041.52 c
3268.79 4041.52 3273.16 4037.14 3273.16 4031.74 c
f
n
3316.34 4003.23 m
3316.34 3997.83 3311.96 3993.45 3306.56 3993.45 c
3301.16 3993.45 3296.79 3997.83 3296.79 4003.23 c
3296.79 4008.63 3301.16 4013.0 3306.56 4013.0 c
3311.96 4013.0 3316.34 4008.63 3316.34 4003.23 c
f
n
3359.51 3974.72 m
3359.51 3969.32 3355.13 3964.94 3349.73 3964.94 c
3344.34 3964.94 3339.96 3969.32 3339.96 3974.72 c
3339.96 3980.12 3344.34 3984.49 3349.73 3984.49 c
3355.13 3984.49 3359.51 3980.12 3359.51 3974.72 c
f
n
3402.68 3945.39 m
3402.68 3940.0 3398.3 3935.62 3392.91 3935.62 c
3387.51 3935.62 3383.13 3940.0 3383.13 3945.39 c
3383.13 3950.79 3387.51 3955.17 3392.91 3955.17 c
3398.3 3955.17 3402.68 3950.79 3402.68 3945.39 c
f
n
3445.86 3916.88 m
3445.86 3911.48 3441.48 3907.11 3436.08 3907.11 c
3430.68 3907.11 3426.3 3911.48 3426.3 3916.88 c
3426.3 3922.28 3430.68 3926.66 3436.08 3926.66 c
3441.48 3926.66 3445.86 3922.28 3445.86 3916.88 c
f
n
2647.55 4395.05 m
2647.55 4389.65 2643.18 4385.27 2637.78 4385.27 c
2632.38 4385.27 2628.0 4389.65 2628.0 4395.05 c
2628.0 4400.45 2632.38 4404.82 2637.78 4404.82 c
2643.18 4404.82 2647.55 4400.45 2647.55 4395.05 c
f
n
2693.17 4370.61 m
2693.17 4365.21 2688.8 4360.84 2683.4 4360.84 c
2678.0 4360.84 2673.62 4365.21 2673.62 4370.61 c
2673.62 4376.01 2678.0 4380.39 2683.4 4380.39 c
2688.8 4380.39 2693.17 4376.01 2693.17 4370.61 c
f
n
2738.79 4346.17 m
2738.79 4340.77 2734.41 4336.4 2729.02 4336.4 c
2723.62 4336.4 2719.24 4340.77 2719.24 4346.17 c
2719.24 4351.57 2723.62 4355.95 2729.02 4355.95 c
2734.41 4355.95 2738.79 4351.57 2738.79 4346.17 c
f
n
2784.41 4321.73 m
2784.41 4316.34 2780.03 4311.96 2774.63 4311.96 c
2769.23 4311.96 2764.86 4316.34 2764.86 4321.73 c
2764.86 4327.13 2769.23 4331.51 2774.63 4331.51 c
2780.03 4331.51 2784.41 4327.13 2784.41 4321.73 c
f
n
2830.02 4297.3 m
2830.02 4291.9 2825.65 4287.52 2820.25 4287.52 c
2814.85 4287.52 2810.47 4291.9 2810.47 4297.3 c
2810.47 4302.7 2814.85 4307.07 2820.25 4307.07 c
2825.65 4307.07 2830.02 4302.7 2830.02 4297.3 c
f
n
2875.64 4272.86 m
2875.64 4267.46 2871.27 4263.08 2865.87 4263.08 c
2860.47 4263.08 2856.09 4267.46 2856.09 4272.86 c
2856.09 4278.26 2860.47 4282.63 2865.87 4282.63 c
2871.27 4282.63 2875.64 4278.26 2875.64 4272.86 c
f
n
2921.26 4248.42 m
2921.26 4243.02 2916.88 4238.64 2911.48 4238.64 c
2906.09 4238.64 2901.71 4243.02 2901.71 4248.42 c
2901.71 4253.82 2906.09 4258.2 2911.48 4258.2 c
2916.88 4258.2 2921.26 4253.82 2921.26 4248.42 c
f
n
2966.88 4223.98 m
2966.88 4218.59 2962.5 4214.21 2957.1 4214.21 c
2951.7 4214.21 2947.32 4218.59 2947.32 4223.98 c
2947.32 4229.38 2951.7 4233.76 2957.1 4233.76 c
2962.5 4233.76 2966.88 4229.38 2966.88 4223.98 c
f
n
3012.49 4199.55 m
3012.49 4194.15 3008.12 4189.77 3002.72 4189.77 c
2997.32 4189.77 2992.94 4194.15 2992.94 4199.55 c
2992.94 4204.95 2997.32 4209.32 3002.72 4209.32 c
3008.12 4209.32 3012.49 4204.95 3012.49 4199.55 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3104.54 4151.48 m
3104.54 4146.09 3100.16 4141.71 3094.77 4141.71 c
3089.37 4141.71 3084.99 4146.09 3084.99 4151.48 c
3084.99 4156.88 3089.37 4161.26 3094.77 4161.26 c
3100.16 4161.26 3104.54 4156.88 3104.54 4151.48 c
f
n
3150.16 4127.05 m
3150.16 4121.65 3145.78 4117.27 3140.38 4117.27 c
3134.98 4117.27 3130.61 4121.65 3130.61 4127.05 c
3130.61 4132.45 3134.98 4136.82 3140.38 4136.82 c
3145.78 4136.82 3150.16 4132.45 3150.16 4127.05 c
f
n
3195.78 4102.61 m
3195.78 4097.21 3191.4 4092.84 3186.0 4092.84 c
3180.6 4092.84 3176.23 4097.21 3176.23 4102.61 c
3176.23 4108.01 3180.6 4112.38 3186.0 4112.38 c
3191.4 4112.38 3195.78 4108.01 3195.78 4102.61 c
f
n
3241.39 4078.17 m
3241.39 4072.77 3237.02 4068.39 3231.62 4068.39 c
3226.22 4068.39 3221.84 4072.77 3221.84 4078.17 c
3221.84 4083.57 3226.22 4087.95 3231.62 4087.95 c
3237.02 4087.95 3241.39 4083.57 3241.39 4078.17 c
f
n
3287.01 4053.73 m
3287.01 4048.34 3282.63 4043.96 3277.23 4043.96 c
3271.84 4043.96 3267.46 4048.34 3267.46 4053.73 c
3267.46 4059.13 3271.84 4063.51 3277.23 4063.51 c
3282.63 4063.51 3287.01 4059.13 3287.01 4053.73 c
f
n
3332.63 4029.3 m
3332.63 4023.9 3328.25 4019.52 3322.85 4019.52 c
3317.45 4019.52 3313.08 4023.9 3313.08 4029.3 c
3313.08 4034.7 3317.45 4039.07 3322.85 4039.07 c
3328.25 4039.07 3332.63 4034.7 3332.63 4029.3 c
f
n
3378.25 4004.86 m
3378.25 3999.46 3373.87 3995.08 3368.47 3995.08 c
3363.07 3995.08 3358.7 3999.46 3358.7 4004.86 c
3358.7 4010.26 3363.07 4014.63 3368.47 4014.63 c
3373.87 4014.63 3378.25 4010.26 3378.25 4004.86 c
f
n
3423.86 3980.42 m
3423.86 3975.02 3419.48 3970.64 3414.09 3970.64 c
3408.69 3970.64 3404.31 3975.02 3404.31 3980.42 c
3404.31 3985.82 3408.69 3990.2 3414.09 3990.2 c
3419.48 3990.2 3423.86 3985.82 3423.86 3980.42 c
f
n
3469.48 3955.98 m
3469.48 3950.59 3465.1 3946.21 3459.7 3946.21 c
3454.3 3946.21 3449.93 3950.59 3449.93 3955.98 c
3449.93 3961.38 3454.3 3965.76 3459.7 3965.76 c
3465.1 3965.76 3469.48 3961.38 3469.48 3955.98 c
f
n
2676.07 4333.95 m
2676.07 4328.55 2671.69 4324.18 2666.29 4324.18 c
2660.89 4324.18 2656.52 4328.55 2656.52 4333.95 c
2656.52 4339.35 2660.89 4343.73 2666.29 4343.73 c
2671.69 4343.73 2676.07 4339.35 2676.07 4333.95 c
f
n
2724.13 4314.4 m
2724.13 4309.0 2719.75 4304.63 2714.35 4304.63 c
2708.95 4304.63 2704.58 4309.0 2704.58 4314.4 c
2704.58 4319.8 2708.95 4324.18 2714.35 4324.18 c
2719.75 4324.18 2724.13 4319.8 2724.13 4314.4 c
f
n
2772.19 4294.04 m
2772.19 4288.64 2767.81 4284.26 2762.41 4284.26 c
2757.02 4284.26 2752.64 4288.64 2752.64 4294.04 c
2752.64 4299.44 2757.02 4303.81 2762.41 4303.81 c
2767.81 4303.81 2772.19 4299.44 2772.19 4294.04 c
f
n
2819.43 4274.49 m
2819.43 4269.09 2815.06 4264.71 2809.66 4264.71 c
2804.26 4264.71 2799.88 4269.09 2799.88 4274.49 c
2799.88 4279.89 2804.26 4284.26 2809.66 4284.26 c
2815.06 4284.26 2819.43 4279.89 2819.43 4274.49 c
f
n
2867.5 4254.94 m
2867.5 4249.54 2863.12 4245.16 2857.72 4245.16 c
2852.32 4245.16 2847.95 4249.54 2847.95 4254.94 c
2847.95 4260.34 2852.32 4264.71 2857.72 4264.71 c
2863.12 4264.71 2867.5 4260.34 2867.5 4254.94 c
f
n
2915.55 4234.57 m
2915.55 4229.18 2911.18 4224.8 2905.78 4224.8 c
2900.38 4224.8 2896.01 4229.18 2896.01 4234.57 c
2896.01 4239.97 2900.38 4244.35 2905.78 4244.35 c
2911.18 4244.35 2915.55 4239.97 2915.55 4234.57 c
f
n
2962.8 4215.02 m
2962.8 4209.62 2958.43 4205.25 2953.03 4205.25 c
2947.63 4205.25 2943.25 4209.62 2943.25 4215.02 c
2943.25 4220.42 2947.63 4224.8 2953.03 4224.8 c
2958.43 4224.8 2962.8 4220.42 2962.8 4215.02 c
f
n
3010.86 4195.47 m
3010.86 4190.07 3006.49 4185.7 3001.09 4185.7 c
2995.69 4185.7 2991.31 4190.07 2991.31 4195.47 c
2991.31 4200.87 2995.69 4205.25 3001.09 4205.25 c
3006.49 4205.25 3010.86 4200.87 3010.86 4195.47 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3106.17 4155.56 m
3106.17 4150.16 3101.79 4145.78 3096.39 4145.78 c
3091.0 4145.78 3086.62 4150.16 3086.62 4155.56 c
3086.62 4160.96 3091.0 4165.33 3096.39 4165.33 c
3101.79 4165.33 3106.17 4160.96 3106.17 4155.56 c
f
n
3154.23 4136.01 m
3154.23 4130.61 3149.86 4126.23 3144.46 4126.23 c
3139.06 4126.23 3134.68 4130.61 3134.68 4136.01 c
3134.68 4141.41 3139.06 4145.78 3144.46 4145.78 c
3149.86 4145.78 3154.23 4141.41 3154.23 4136.01 c
f
n
3201.48 4116.46 m
3201.48 4111.06 3197.1 4106.68 3191.7 4106.68 c
3186.3 4106.68 3181.93 4111.06 3181.93 4116.46 c
3181.93 4121.86 3186.3 4126.23 3191.7 4126.23 c
3197.1 4126.23 3201.48 4121.86 3201.48 4116.46 c
f
n
3249.54 4096.09 m
3249.54 4090.7 3245.16 4086.32 3239.77 4086.32 c
3234.37 4086.32 3229.99 4090.7 3229.99 4096.09 c
3229.99 4101.49 3234.37 4105.87 3239.77 4105.87 c
3245.16 4105.87 3249.54 4101.49 3249.54 4096.09 c
f
n
3297.6 4076.54 m
3297.6 4071.14 3293.22 4066.77 3287.82 4066.77 c
3282.43 4066.77 3278.05 4071.14 3278.05 4076.54 c
3278.05 4081.94 3282.43 4086.32 3287.82 4086.32 c
3293.22 4086.32 3297.6 4081.94 3297.6 4076.54 c
f
n
3344.85 4056.99 m
3344.85 4051.59 3340.47 4047.22 3335.07 4047.22 c
3329.67 4047.22 3325.3 4051.59 3325.3 4056.99 c
3325.3 4062.39 3329.67 4066.77 3335.07 4066.77 c
3340.47 4066.77 3344.85 4062.39 3344.85 4056.99 c
f
n
3392.91 4036.63 m
3392.91 4031.23 3388.53 4026.85 3383.13 4026.85 c
3377.73 4026.85 3373.36 4031.23 3373.36 4036.63 c
3373.36 4042.03 3377.73 4046.4 3383.13 4046.4 c
3388.53 4046.4 3392.91 4042.03 3392.91 4036.63 c
f
n
3440.97 4017.08 m
3440.97 4011.68 3436.59 4007.3 3431.19 4007.3 c
3425.79 4007.3 3421.42 4011.68 3421.42 4017.08 c
3421.42 4022.48 3425.79 4026.85 3431.19 4026.85 c
3436.59 4026.85 3440.97 4022.48 3440.97 4017.08 c
f
n
2662.22 4295.67 m
2662.22 4290.27 2657.84 4285.89 2652.45 4285.89 c
2647.05 4285.89 2642.67 4290.27 2642.67 4295.67 c
2642.67 4301.07 2647.05 4305.44 2652.45 4305.44 c
2657.84 4305.44 2662.22 4301.07 2662.22 4295.67 c
f
n
2711.91 4281.0 m
2711.91 4275.61 2707.53 4271.23 2702.13 4271.23 c
2696.73 4271.23 2692.36 4275.61 2692.36 4281.0 c
2692.36 4286.4 2696.73 4290.78 2702.13 4290.78 c
2707.53 4290.78 2711.91 4286.4 2711.91 4281.0 c
f
n
2761.6 4265.53 m
2761.6 4260.13 2757.22 4255.75 2751.82 4255.75 c
2746.43 4255.75 2742.05 4260.13 2742.05 4265.53 c
2742.05 4270.93 2746.43 4275.3 2751.82 4275.3 c
2757.22 4275.3 2761.6 4270.93 2761.6 4265.53 c
f
n
2811.29 4250.86 m
2811.29 4245.46 2806.91 4241.09 2801.51 4241.09 c
2796.11 4241.09 2791.74 4245.46 2791.74 4250.86 c
2791.74 4256.26 2796.11 4260.64 2801.51 4260.64 c
2806.91 4260.64 2811.29 4256.26 2811.29 4250.86 c
f
n
2860.16 4235.39 m
2860.16 4229.99 2855.79 4225.61 2850.39 4225.61 c
2844.99 4225.61 2840.61 4229.99 2840.61 4235.39 c
2840.61 4240.79 2844.99 4245.16 2850.39 4245.16 c
2855.79 4245.16 2860.16 4240.79 2860.16 4235.39 c
f
n
2909.86 4220.73 m
2909.86 4215.33 2905.48 4210.95 2900.08 4210.95 c
2894.68 4210.95 2890.3 4215.33 2890.3 4220.73 c
2890.3 4226.12 2894.68 4230.5 2900.08 4230.5 c
2905.48 4230.5 2909.86 4226.12 2909.86 4220.73 c
f
n
2959.54 4205.25 m
2959.54 4199.85 2955.17 4195.47 2949.77 4195.47 c
2944.37 4195.47 2940.0 4199.85 2940.0 4205.25 c
2940.0 4210.64 2944.37 4215.02 2949.77 4215.02 c
2955.17 4215.02 2959.54 4210.64 2959.54 4205.25 c
f
n
3009.23 4190.59 m
3009.23 4185.19 3004.86 4180.81 2999.46 4180.81 c
2994.06 4180.81 2989.68 4185.19 2989.68 4190.59 c
2989.68 4195.98 2994.06 4200.36 2999.46 4200.36 c
3004.86 4200.36 3009.23 4195.98 3009.23 4190.59 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3107.8 4160.45 m
3107.8 4155.05 3103.42 4150.67 3098.02 4150.67 c
3092.62 4150.67 3088.25 4155.05 3088.25 4160.45 c
3088.25 4165.84 3092.62 4170.22 3098.02 4170.22 c
3103.42 4170.22 3107.8 4165.84 3107.8 4160.45 c
f
n
3157.49 4145.78 m
3157.49 4140.38 3153.11 4136.01 3147.71 4136.01 c
3142.32 4136.01 3137.94 4140.38 3137.94 4145.78 c
3137.94 4151.18 3142.32 4155.56 3147.71 4155.56 c
3153.11 4155.56 3157.49 4151.18 3157.49 4145.78 c
f
n
3207.18 4130.3 m
3207.18 4124.91 3202.8 4120.53 3197.41 4120.53 c
3192.01 4120.53 3187.63 4124.91 3187.63 4130.3 c
3187.63 4135.7 3192.01 4140.08 3197.41 4140.08 c
3202.8 4140.08 3207.18 4135.7 3207.18 4130.3 c
f
n
3256.87 4115.64 m
3256.87 4110.25 3252.49 4105.87 3247.09 4105.87 c
3241.7 4105.87 3237.32 4110.25 3237.32 4115.64 c
3237.32 4121.04 3241.7 4125.42 3247.09 4125.42 c
3252.49 4125.42 3256.87 4121.04 3256.87 4115.64 c
f
n
3305.75 4100.16 m
3305.75 4094.77 3301.37 4090.39 3295.97 4090.39 c
3290.57 4090.39 3286.2 4094.77 3286.2 4100.16 c
3286.2 4105.56 3290.57 4109.94 3295.97 4109.94 c
3301.37 4109.94 3305.75 4105.56 3305.75 4100.16 c
f
n
3355.44 4085.5 m
3355.44 4080.11 3351.06 4075.73 3345.66 4075.73 c
3340.26 4075.73 3335.89 4080.11 3335.89 4085.5 c
3335.89 4090.9 3340.26 4095.28 3345.66 4095.28 c
3351.06 4095.28 3355.44 4090.9 3355.44 4085.5 c
f
n
3405.12 4070.03 m
3405.12 4064.63 3400.75 4060.25 3395.35 4060.25 c
3389.95 4060.25 3385.57 4064.63 3385.57 4070.03 c
3385.57 4075.43 3389.95 4079.8 3395.35 4079.8 c
3400.75 4079.8 3405.12 4075.43 3405.12 4070.03 c
f
n
3454.82 4055.36 m
3454.82 4049.96 3450.44 4045.59 3445.04 4045.59 c
3439.64 4045.59 3435.27 4049.96 3435.27 4055.36 c
3435.27 4060.76 3439.64 4065.14 3445.04 4065.14 c
3450.44 4065.14 3454.82 4060.76 3454.82 4055.36 c
f
n
2652.45 4256.57 m
2652.45 4251.17 2648.07 4246.79 2642.67 4246.79 c
2637.27 4246.79 2632.89 4251.17 2632.89 4256.57 c
2632.89 4261.96 2637.27 4266.34 2642.67 4266.34 c
2648.07 4266.34 2652.45 4261.96 2652.45 4256.57 c
f
n
2703.76 4245.98 m
2703.76 4240.58 2699.39 4236.2 2693.99 4236.2 c
2688.59 4236.2 2684.21 4240.58 2684.21 4245.98 c
2684.21 4251.38 2688.59 4255.75 2693.99 4255.75 c
2699.39 4255.75 2703.76 4251.38 2703.76 4245.98 c
f
n
2754.27 4236.2 m
2754.27 4230.8 2749.89 4226.43 2744.49 4226.43 c
2739.09 4226.43 2734.72 4230.8 2734.72 4236.2 c
2734.72 4241.6 2739.09 4245.98 2744.49 4245.98 c
2749.89 4245.98 2754.27 4241.6 2754.27 4236.2 c
f
n
2804.77 4225.61 m
2804.77 4220.21 2800.39 4215.84 2795.0 4215.84 c
2789.6 4215.84 2785.22 4220.21 2785.22 4225.61 c
2785.22 4231.01 2789.6 4235.39 2795.0 4235.39 c
2800.39 4235.39 2804.77 4231.01 2804.77 4225.61 c
f
n
2855.28 4215.84 m
2855.28 4210.44 2850.9 4206.06 2845.5 4206.06 c
2840.1 4206.06 2835.73 4210.44 2835.73 4215.84 c
2835.73 4221.23 2840.1 4225.61 2845.5 4225.61 c
2850.9 4225.61 2855.28 4221.23 2855.28 4215.84 c
f
n
2906.6 4206.06 m
2906.6 4200.66 2902.22 4196.29 2896.82 4196.29 c
2891.42 4196.29 2887.05 4200.66 2887.05 4206.06 c
2887.05 4211.46 2891.42 4215.84 2896.82 4215.84 c
2902.22 4215.84 2906.6 4211.46 2906.6 4206.06 c
f
n
2957.1 4195.47 m
2957.1 4190.07 2952.72 4185.7 2947.32 4185.7 c
2941.93 4185.7 2937.55 4190.07 2937.55 4195.47 c
2937.55 4200.87 2941.93 4205.25 2947.32 4205.25 c
2952.72 4205.25 2957.1 4200.87 2957.1 4195.47 c
f
n
3007.61 4185.7 m
3007.61 4180.3 3003.23 4175.92 2997.83 4175.92 c
2992.43 4175.92 2988.05 4180.3 2988.05 4185.7 c
2988.05 4191.1 2992.43 4195.47 2997.83 4195.47 c
3003.23 4195.47 3007.61 4191.1 3007.61 4185.7 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3109.43 4165.33 m
3109.43 4159.93 3105.05 4155.56 3099.65 4155.56 c
3094.25 4155.56 3089.88 4159.93 3089.88 4165.33 c
3089.88 4170.73 3094.25 4175.11 3099.65 4175.11 c
3105.05 4175.11 3109.43 4170.73 3109.43 4165.33 c
f
n
3159.93 4155.56 m
3159.93 4150.16 3155.56 4145.78 3150.16 4145.78 c
3144.76 4145.78 3140.38 4150.16 3140.38 4155.56 c
3140.38 4160.96 3144.76 4165.33 3150.16 4165.33 c
3155.56 4165.33 3159.93 4160.96 3159.93 4155.56 c
f
n
3210.44 4144.97 m
3210.44 4139.57 3206.06 4135.19 3200.66 4135.19 c
3195.27 4135.19 3190.89 4139.57 3190.89 4144.97 c
3190.89 4150.37 3195.27 4154.74 3200.66 4154.74 c
3206.06 4154.74 3210.44 4150.37 3210.44 4144.97 c
f
n
3261.76 4135.19 m
3261.76 4129.79 3257.38 4125.42 3251.98 4125.42 c
3246.59 4125.42 3242.21 4129.79 3242.21 4135.19 c
3242.21 4140.59 3246.59 4144.97 3251.98 4144.97 c
3257.38 4144.97 3261.76 4140.59 3261.76 4135.19 c
f
n
3312.26 4125.42 m
3312.26 4120.02 3307.89 4115.64 3302.49 4115.64 c
3297.09 4115.64 3292.71 4120.02 3292.71 4125.42 c
3292.71 4130.82 3297.09 4135.19 3302.49 4135.19 c
3307.89 4135.19 3312.26 4130.82 3312.26 4125.42 c
f
n
3362.77 4114.83 m
3362.77 4109.43 3358.39 4105.05 3352.99 4105.05 c
3347.59 4105.05 3343.22 4109.43 3343.22 4114.83 c
3343.22 4120.23 3347.59 4124.6 3352.99 4124.6 c
3358.39 4124.6 3362.77 4120.23 3362.77 4114.83 c
f
n
3413.27 4105.05 m
3413.27 4099.66 3408.89 4095.28 3403.5 4095.28 c
3398.1 4095.28 3393.72 4099.66 3393.72 4105.05 c
3393.72 4110.45 3398.1 4114.83 3403.5 4114.83 c
3408.89 4114.83 3413.27 4110.45 3413.27 4105.05 c
f
n
3464.59 4094.46 m
3464.59 4089.07 3460.21 4084.69 3454.82 4084.69 c
3449.42 4084.69 3445.04 4089.07 3445.04 4094.46 c
3445.04 4099.86 3449.42 4104.24 3454.82 4104.24 c
3460.21 4104.24 3464.59 4099.86 3464.59 4094.46 c
f
n
2646.74 4215.84 m
2646.74 4210.44 2642.36 4206.06 2636.96 4206.06 c
2631.57 4206.06 2627.19 4210.44 2627.19 4215.84 c
2627.19 4221.23 2631.57 4225.61 2636.96 4225.61 c
2642.36 4225.61 2646.74 4221.23 2646.74 4215.84 c
f
n
2698.06 4210.95 m
2698.06 4205.55 2693.68 4201.18 2688.29 4201.18 c
2682.89 4201.18 2678.51 4205.55 2678.51 4210.95 c
2678.51 4216.35 2682.89 4220.73 2688.29 4220.73 c
2693.68 4220.73 2698.06 4216.35 2698.06 4210.95 c
f
n
2749.38 4206.06 m
2749.38 4200.66 2745.0 4196.29 2739.61 4196.29 c
2734.21 4196.29 2729.83 4200.66 2729.83 4206.06 c
2729.83 4211.46 2734.21 4215.84 2739.61 4215.84 c
2745.0 4215.84 2749.38 4211.46 2749.38 4206.06 c
f
n
2801.51 4201.18 m
2801.51 4195.78 2797.14 4191.4 2791.74 4191.4 c
2786.34 4191.4 2781.96 4195.78 2781.96 4201.18 c
2781.96 4206.57 2786.34 4210.95 2791.74 4210.95 c
2797.14 4210.95 2801.51 4206.57 2801.51 4201.18 c
f
n
2852.83 4195.47 m
2852.83 4190.07 2848.46 4185.7 2843.06 4185.7 c
2837.66 4185.7 2833.28 4190.07 2833.28 4195.47 c
2833.28 4200.87 2837.66 4205.25 2843.06 4205.25 c
2848.46 4205.25 2852.83 4200.87 2852.83 4195.47 c
f
n
2904.15 4190.59 m
2904.15 4185.19 2899.78 4180.81 2894.38 4180.81 c
2888.98 4180.81 2884.6 4185.19 2884.6 4190.59 c
2884.6 4195.98 2888.98 4200.36 2894.38 4200.36 c
2899.78 4200.36 2904.15 4195.98 2904.15 4190.59 c
f
n
2955.47 4185.7 m
2955.47 4180.3 2951.09 4175.92 2945.7 4175.92 c
2940.3 4175.92 2935.92 4180.3 2935.92 4185.7 c
2935.92 4191.1 2940.3 4195.47 2945.7 4195.47 c
2951.09 4195.47 2955.47 4191.1 2955.47 4185.7 c
f
n
3006.79 4180.81 m
3006.79 4175.41 3002.41 4171.04 2997.02 4171.04 c
2991.62 4171.04 2987.24 4175.41 2987.24 4180.81 c
2987.24 4186.21 2991.62 4190.59 2997.02 4190.59 c
3002.41 4190.59 3006.79 4186.21 3006.79 4180.81 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3110.24 4170.22 m
3110.24 4164.82 3105.87 4160.45 3100.47 4160.45 c
3095.07 4160.45 3090.7 4164.82 3090.7 4170.22 c
3090.7 4175.62 3095.07 4180.0 3100.47 4180.0 c
3105.87 4180.0 3110.24 4175.62 3110.24 4170.22 c
f
n
3161.56 4165.33 m
3161.56 4159.93 3157.19 4155.56 3151.79 4155.56 c
3146.39 4155.56 3142.01 4159.93 3142.01 4165.33 c
3142.01 4170.73 3146.39 4175.11 3151.79 4175.11 c
3157.19 4175.11 3161.56 4170.73 3161.56 4165.33 c
f
n
3212.88 4160.45 m
3212.88 4155.05 3208.5 4150.67 3203.11 4150.67 c
3197.71 4150.67 3193.33 4155.05 3193.33 4160.45 c
3193.33 4165.84 3197.71 4170.22 3203.11 4170.22 c
3208.5 4170.22 3212.88 4165.84 3212.88 4160.45 c
f
n
3264.2 4155.56 m
3264.2 4150.16 3259.82 4145.78 3254.43 4145.78 c
3249.03 4145.78 3244.65 4150.16 3244.65 4155.56 c
3244.65 4160.96 3249.03 4165.33 3254.43 4165.33 c
3259.82 4165.33 3264.2 4160.96 3264.2 4155.56 c
f
n
3315.52 4149.86 m
3315.52 4144.46 3311.14 4140.08 3305.75 4140.08 c
3300.35 4140.08 3295.97 4144.46 3295.97 4149.86 c
3295.97 4155.25 3300.35 4159.63 3305.75 4159.63 c
3311.14 4159.63 3315.52 4155.25 3315.52 4149.86 c
f
n
3367.66 4144.97 m
3367.66 4139.57 3363.28 4135.19 3357.88 4135.19 c
3352.48 4135.19 3348.11 4139.57 3348.11 4144.97 c
3348.11 4150.37 3352.48 4154.74 3357.88 4154.74 c
3363.28 4154.74 3367.66 4150.37 3367.66 4144.97 c
f
n
3418.97 4140.08 m
3418.97 4134.68 3414.6 4130.3 3409.2 4130.3 c
3403.8 4130.3 3399.43 4134.68 3399.43 4140.08 c
3399.43 4145.48 3403.8 4149.86 3409.2 4149.86 c
3414.6 4149.86 3418.97 4145.48 3418.97 4140.08 c
f
n
3470.29 4135.19 m
3470.29 4129.79 3465.92 4125.42 3460.52 4125.42 c
3455.12 4125.42 3450.74 4129.79 3450.74 4135.19 c
3450.74 4140.59 3455.12 4144.97 3460.52 4144.97 c
3465.92 4144.97 3470.29 4140.59 3470.29 4135.19 c
f
n
2644.3 4175.92 m
2644.3 4170.52 2639.92 4166.15 2634.52 4166.15 c
2629.12 4166.15 2624.75 4170.52 2624.75 4175.92 c
2624.75 4181.32 2629.12 4185.7 2634.52 4185.7 c
2639.92 4185.7 2644.3 4181.32 2644.3 4175.92 c
f
n
2696.43 4175.92 m
2696.43 4170.52 2692.05 4166.15 2686.66 4166.15 c
2681.26 4166.15 2676.88 4170.52 2676.88 4175.92 c
2676.88 4181.32 2681.26 4185.7 2686.66 4185.7 c
2692.05 4185.7 2696.43 4181.32 2696.43 4175.92 c
f
n
2747.75 4175.92 m
2747.75 4170.52 2743.38 4166.15 2737.98 4166.15 c
2732.58 4166.15 2728.2 4170.52 2728.2 4175.92 c
2728.2 4181.32 2732.58 4185.7 2737.98 4185.7 c
2743.38 4185.7 2747.75 4181.32 2747.75 4175.92 c
f
n
2799.88 4175.92 m
2799.88 4170.52 2795.51 4166.15 2790.11 4166.15 c
2784.71 4166.15 2780.34 4170.52 2780.34 4175.92 c
2780.34 4181.32 2784.71 4185.7 2790.11 4185.7 c
2795.51 4185.7 2799.88 4181.32 2799.88 4175.92 c
f
n
2852.02 4175.92 m
2852.02 4170.52 2847.64 4166.15 2842.24 4166.15 c
2836.84 4166.15 2832.47 4170.52 2832.47 4175.92 c
2832.47 4181.32 2836.84 4185.7 2842.24 4185.7 c
2847.64 4185.7 2852.02 4181.32 2852.02 4175.92 c
f
n
2903.34 4175.92 m
2903.34 4170.52 2898.96 4166.15 2893.56 4166.15 c
2888.16 4166.15 2883.79 4170.52 2883.79 4175.92 c
2883.79 4181.32 2888.16 4185.7 2893.56 4185.7 c
2898.96 4185.7 2903.34 4181.32 2903.34 4175.92 c
f
n
2955.47 4175.92 m
2955.47 4170.52 2951.09 4166.15 2945.7 4166.15 c
2940.3 4166.15 2935.92 4170.52 2935.92 4175.92 c
2935.92 4181.32 2940.3 4185.7 2945.7 4185.7 c
2951.09 4185.7 2955.47 4181.32 2955.47 4175.92 c
f
n
3006.79 4175.92 m
3006.79 4170.52 3002.41 4166.15 2997.02 4166.15 c
2991.62 4166.15 2987.24 4170.52 2987.24 4175.92 c
2987.24 4181.32 2991.62 4185.7 2997.02 4185.7 c
3002.41 4185.7 3006.79 4181.32 3006.79 4175.92 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3110.24 4175.92 m
3110.24 4170.52 3105.87 4166.15 3100.47 4166.15 c
3095.07 4166.15 3090.7 4170.52 3090.7 4175.92 c
3090.7 4181.32 3095.07 4185.7 3100.47 4185.7 c
3105.87 4185.7 3110.24 4181.32 3110.24 4175.92 c
f
n
3162.38 4175.92 m
3162.38 4170.52 3158.0 4166.15 3152.6 4166.15 c
3147.2 4166.15 3142.83 4170.52 3142.83 4175.92 c
3142.83 4181.32 3147.2 4185.7 3152.6 4185.7 c
3158.0 4185.7 3162.38 4181.32 3162.38 4175.92 c
f
n
3213.7 4175.92 m
3213.7 4170.52 3209.32 4166.15 3203.92 4166.15 c
3198.52 4166.15 3194.15 4170.52 3194.15 4175.92 c
3194.15 4181.32 3198.52 4185.7 3203.92 4185.7 c
3209.32 4185.7 3213.7 4181.32 3213.7 4175.92 c
f
n
3265.83 4175.92 m
3265.83 4170.52 3261.45 4166.15 3256.05 4166.15 c
3250.66 4166.15 3246.28 4170.52 3246.28 4175.92 c
3246.28 4181.32 3250.66 4185.7 3256.05 4185.7 c
3261.45 4185.7 3265.83 4181.32 3265.83 4175.92 c
f
n
3317.15 4175.92 m
3317.15 4170.52 3312.77 4166.15 3307.38 4166.15 c
3301.98 4166.15 3297.6 4170.52 3297.6 4175.92 c
3297.6 4181.32 3301.98 4185.7 3307.38 4185.7 c
3312.77 4185.7 3317.15 4181.32 3317.15 4175.92 c
f
n
3369.29 4175.92 m
3369.29 4170.52 3364.91 4166.15 3359.51 4166.15 c
3354.11 4166.15 3349.73 4170.52 3349.73 4175.92 c
3349.73 4181.32 3354.11 4185.7 3359.51 4185.7 c
3364.91 4185.7 3369.29 4181.32 3369.29 4175.92 c
f
n
3420.6 4175.92 m
3420.6 4170.52 3416.23 4166.15 3410.83 4166.15 c
3405.43 4166.15 3401.05 4170.52 3401.05 4175.92 c
3401.05 4181.32 3405.43 4185.7 3410.83 4185.7 c
3416.23 4185.7 3420.6 4181.32 3420.6 4175.92 c
f
n
2646.74 4135.19 m
2646.74 4129.79 2642.36 4125.42 2636.96 4125.42 c
2631.57 4125.42 2627.19 4129.79 2627.19 4135.19 c
2627.19 4140.59 2631.57 4144.97 2636.96 4144.97 c
2642.36 4144.97 2646.74 4140.59 2646.74 4135.19 c
f
n
2698.06 4140.08 m
2698.06 4134.68 2693.68 4130.3 2688.29 4130.3 c
2682.89 4130.3 2678.51 4134.68 2678.51 4140.08 c
2678.51 4145.48 2682.89 4149.86 2688.29 4149.86 c
2693.68 4149.86 2698.06 4145.48 2698.06 4140.08 c
f
n
2749.38 4144.97 m
2749.38 4139.57 2745.0 4135.19 2739.61 4135.19 c
2734.21 4135.19 2729.83 4139.57 2729.83 4144.97 c
2729.83 4150.37 2734.21 4154.74 2739.61 4154.74 c
2745.0 4154.74 2749.38 4150.37 2749.38 4144.97 c
f
n
2801.51 4149.86 m
2801.51 4144.46 2797.14 4140.08 2791.74 4140.08 c
2786.34 4140.08 2781.96 4144.46 2781.96 4149.86 c
2781.96 4155.25 2786.34 4159.63 2791.74 4159.63 c
2797.14 4159.63 2801.51 4155.25 2801.51 4149.86 c
f
n
2852.83 4155.56 m
2852.83 4150.16 2848.46 4145.78 2843.06 4145.78 c
2837.66 4145.78 2833.28 4150.16 2833.28 4155.56 c
2833.28 4160.96 2837.66 4165.33 2843.06 4165.33 c
2848.46 4165.33 2852.83 4160.96 2852.83 4155.56 c
f
n
2904.15 4160.45 m
2904.15 4155.05 2899.78 4150.67 2894.38 4150.67 c
2888.98 4150.67 2884.6 4155.05 2884.6 4160.45 c
2884.6 4165.84 2888.98 4170.22 2894.38 4170.22 c
2899.78 4170.22 2904.15 4165.84 2904.15 4160.45 c
f
n
2955.47 4165.33 m
2955.47 4159.93 2951.09 4155.56 2945.7 4155.56 c
2940.3 4155.56 2935.92 4159.93 2935.92 4165.33 c
2935.92 4170.73 2940.3 4175.11 2945.7 4175.11 c
2951.09 4175.11 2955.47 4170.73 2955.47 4165.33 c
f
n
3006.79 4170.22 m
3006.79 4164.82 3002.41 4160.45 2997.02 4160.45 c
2991.62 4160.45 2987.24 4164.82 2987.24 4170.22 c
2987.24 4175.62 2991.62 4180.0 2997.02 4180.0 c
3002.41 4180.0 3006.79 4175.62 3006.79 4170.22 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3110.24 4180.81 m
3110.24 4175.41 3105.87 4171.04 3100.47 4171.04 c
3095.07 4171.04 3090.7 4175.41 3090.7 4180.81 c
3090.7 4186.21 3095.07 4190.59 3100.47 4190.59 c
3105.87 4190.59 3110.24 4186.21 3110.24 4180.81 c
f
n
3161.56 4185.7 m
3161.56 4180.3 3157.19 4175.92 3151.79 4175.92 c
3146.39 4175.92 3142.01 4180.3 3142.01 4185.7 c
3142.01 4191.1 3146.39 4195.47 3151.79 4195.47 c
3157.19 4195.47 3161.56 4191.1 3161.56 4185.7 c
f
n
3212.88 4190.59 m
3212.88 4185.19 3208.5 4180.81 3203.11 4180.81 c
3197.71 4180.81 3193.33 4185.19 3193.33 4190.59 c
3193.33 4195.98 3197.71 4200.36 3203.11 4200.36 c
3208.5 4200.36 3212.88 4195.98 3212.88 4190.59 c
f
n
3264.2 4195.47 m
3264.2 4190.07 3259.82 4185.7 3254.43 4185.7 c
3249.03 4185.7 3244.65 4190.07 3244.65 4195.47 c
3244.65 4200.87 3249.03 4205.25 3254.43 4205.25 c
3259.82 4205.25 3264.2 4200.87 3264.2 4195.47 c
f
n
3315.52 4201.18 m
3315.52 4195.78 3311.14 4191.4 3305.75 4191.4 c
3300.35 4191.4 3295.97 4195.78 3295.97 4201.18 c
3295.97 4206.57 3300.35 4210.95 3305.75 4210.95 c
3311.14 4210.95 3315.52 4206.57 3315.52 4201.18 c
f
n
3367.66 4206.06 m
3367.66 4200.66 3363.28 4196.29 3357.88 4196.29 c
3352.48 4196.29 3348.11 4200.66 3348.11 4206.06 c
3348.11 4211.46 3352.48 4215.84 3357.88 4215.84 c
3363.28 4215.84 3367.66 4211.46 3367.66 4206.06 c
f
n
3418.97 4210.95 m
3418.97 4205.55 3414.6 4201.18 3409.2 4201.18 c
3403.8 4201.18 3399.43 4205.55 3399.43 4210.95 c
3399.43 4216.35 3403.8 4220.73 3409.2 4220.73 c
3414.6 4220.73 3418.97 4216.35 3418.97 4210.95 c
f
n
3470.29 4215.84 m
3470.29 4210.44 3465.92 4206.06 3460.52 4206.06 c
3455.12 4206.06 3450.74 4210.44 3450.74 4215.84 c
3450.74 4221.23 3455.12 4225.61 3460.52 4225.61 c
3465.92 4225.61 3470.29 4221.23 3470.29 4215.84 c
f
n
2652.45 4094.46 m
2652.45 4089.07 2648.07 4084.69 2642.67 4084.69 c
2637.27 4084.69 2632.89 4089.07 2632.89 4094.46 c
2632.89 4099.86 2637.27 4104.24 2642.67 4104.24 c
2648.07 4104.24 2652.45 4099.86 2652.45 4094.46 c
f
n
2703.76 4105.05 m
2703.76 4099.66 2699.39 4095.28 2693.99 4095.28 c
2688.59 4095.28 2684.21 4099.66 2684.21 4105.05 c
2684.21 4110.45 2688.59 4114.83 2693.99 4114.83 c
2699.39 4114.83 2703.76 4110.45 2703.76 4105.05 c
f
n
2754.27 4114.83 m
2754.27 4109.43 2749.89 4105.05 2744.49 4105.05 c
2739.09 4105.05 2734.72 4109.43 2734.72 4114.83 c
2734.72 4120.23 2739.09 4124.6 2744.49 4124.6 c
2749.89 4124.6 2754.27 4120.23 2754.27 4114.83 c
f
n
2804.77 4125.42 m
2804.77 4120.02 2800.39 4115.64 2795.0 4115.64 c
2789.6 4115.64 2785.22 4120.02 2785.22 4125.42 c
2785.22 4130.82 2789.6 4135.19 2795.0 4135.19 c
2800.39 4135.19 2804.77 4130.82 2804.77 4125.42 c
f
n
2855.28 4135.19 m
2855.28 4129.79 2850.9 4125.42 2845.5 4125.42 c
2840.1 4125.42 2835.73 4129.79 2835.73 4135.19 c
2835.73 4140.59 2840.1 4144.97 2845.5 4144.97 c
2850.9 4144.97 2855.28 4140.59 2855.28 4135.19 c
f
n
2906.6 4144.97 m
2906.6 4139.57 2902.22 4135.19 2896.82 4135.19 c
2891.42 4135.19 2887.05 4139.57 2887.05 4144.97 c
2887.05 4150.37 2891.42 4154.74 2896.82 4154.74 c
2902.22 4154.74 2906.6 4150.37 2906.6 4144.97 c
f
n
2957.1 4155.56 m
2957.1 4150.16 2952.72 4145.78 2947.32 4145.78 c
2941.93 4145.78 2937.55 4150.16 2937.55 4155.56 c
2937.55 4160.96 2941.93 4165.33 2947.32 4165.33 c
2952.72 4165.33 2957.1 4160.96 2957.1 4155.56 c
f
n
3007.61 4165.33 m
3007.61 4159.93 3003.23 4155.56 2997.83 4155.56 c
2992.43 4155.56 2988.05 4159.93 2988.05 4165.33 c
2988.05 4170.73 2992.43 4175.11 2997.83 4175.11 c
3003.23 4175.11 3007.61 4170.73 3007.61 4165.33 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3109.43 4185.7 m
3109.43 4180.3 3105.05 4175.92 3099.65 4175.92 c
3094.25 4175.92 3089.88 4180.3 3089.88 4185.7 c
3089.88 4191.1 3094.25 4195.47 3099.65 4195.47 c
3105.05 4195.47 3109.43 4191.1 3109.43 4185.7 c
f
n
3159.93 4195.47 m
3159.93 4190.07 3155.56 4185.7 3150.16 4185.7 c
3144.76 4185.7 3140.38 4190.07 3140.38 4195.47 c
3140.38 4200.87 3144.76 4205.25 3150.16 4205.25 c
3155.56 4205.25 3159.93 4200.87 3159.93 4195.47 c
f
n
3210.44 4206.06 m
3210.44 4200.66 3206.06 4196.29 3200.66 4196.29 c
3195.27 4196.29 3190.89 4200.66 3190.89 4206.06 c
3190.89 4211.46 3195.27 4215.84 3200.66 4215.84 c
3206.06 4215.84 3210.44 4211.46 3210.44 4206.06 c
f
n
3261.76 4215.84 m
3261.76 4210.44 3257.38 4206.06 3251.98 4206.06 c
3246.59 4206.06 3242.21 4210.44 3242.21 4215.84 c
3242.21 4221.23 3246.59 4225.61 3251.98 4225.61 c
3257.38 4225.61 3261.76 4221.23 3261.76 4215.84 c
f
n
3312.26 4225.61 m
3312.26 4220.21 3307.89 4215.84 3302.49 4215.84 c
3297.09 4215.84 3292.71 4220.21 3292.71 4225.61 c
3292.71 4231.01 3297.09 4235.39 3302.49 4235.39 c
3307.89 4235.39 3312.26 4231.01 3312.26 4225.61 c
f
n
3362.77 4236.2 m
3362.77 4230.8 3358.39 4226.43 3352.99 4226.43 c
3347.59 4226.43 3343.22 4230.8 3343.22 4236.2 c
3343.22 4241.6 3347.59 4245.98 3352.99 4245.98 c
3358.39 4245.98 3362.77 4241.6 3362.77 4236.2 c
f
n
3413.27 4245.98 m
3413.27 4240.58 3408.89 4236.2 3403.5 4236.2 c
3398.1 4236.2 3393.72 4240.58 3393.72 4245.98 c
3393.72 4251.38 3398.1 4255.75 3403.5 4255.75 c
3408.89 4255.75 3413.27 4251.38 3413.27 4245.98 c
f
n
3464.59 4256.57 m
3464.59 4251.17 3460.21 4246.79 3454.82 4246.79 c
3449.42 4246.79 3445.04 4251.17 3445.04 4256.57 c
3445.04 4261.96 3449.42 4266.34 3454.82 4266.34 c
3460.21 4266.34 3464.59 4261.96 3464.59 4256.57 c
f
n
2662.22 4055.36 m
2662.22 4049.96 2657.84 4045.59 2652.45 4045.59 c
2647.05 4045.59 2642.67 4049.96 2642.67 4055.36 c
2642.67 4060.76 2647.05 4065.14 2652.45 4065.14 c
2657.84 4065.14 2662.22 4060.76 2662.22 4055.36 c
f
n
2711.91 4070.03 m
2711.91 4064.63 2707.53 4060.25 2702.13 4060.25 c
2696.73 4060.25 2692.36 4064.63 2692.36 4070.03 c
2692.36 4075.43 2696.73 4079.8 2702.13 4079.8 c
2707.53 4079.8 2711.91 4075.43 2711.91 4070.03 c
f
n
2761.6 4085.5 m
2761.6 4080.11 2757.22 4075.73 2751.82 4075.73 c
2746.43 4075.73 2742.05 4080.11 2742.05 4085.5 c
2742.05 4090.9 2746.43 4095.28 2751.82 4095.28 c
2757.22 4095.28 2761.6 4090.9 2761.6 4085.5 c
f
n
2811.29 4100.16 m
2811.29 4094.77 2806.91 4090.39 2801.51 4090.39 c
2796.11 4090.39 2791.74 4094.77 2791.74 4100.16 c
2791.74 4105.56 2796.11 4109.94 2801.51 4109.94 c
2806.91 4109.94 2811.29 4105.56 2811.29 4100.16 c
f
n
2860.16 4115.64 m
2860.16 4110.25 2855.79 4105.87 2850.39 4105.87 c
2844.99 4105.87 2840.61 4110.25 2840.61 4115.64 c
2840.61 4121.04 2844.99 4125.42 2850.39 4125.42 c
2855.79 4125.42 2860.16 4121.04 2860.16 4115.64 c
f
n
2909.86 4130.3 m
2909.86 4124.91 2905.48 4120.53 2900.08 4120.53 c
2894.68 4120.53 2890.3 4124.91 2890.3 4130.3 c
2890.3 4135.7 2894.68 4140.08 2900.08 4140.08 c
2905.48 4140.08 2909.86 4135.7 2909.86 4130.3 c
f
n
2959.54 4145.78 m
2959.54 4140.38 2955.17 4136.01 2949.77 4136.01 c
2944.37 4136.01 2940.0 4140.38 2940.0 4145.78 c
2940.0 4151.18 2944.37 4155.56 2949.77 4155.56 c
2955.17 4155.56 2959.54 4151.18 2959.54 4145.78 c
f
n
3009.23 4160.45 m
3009.23 4155.05 3004.86 4150.67 2999.46 4150.67 c
2994.06 4150.67 2989.68 4155.05 2989.68 4160.45 c
2989.68 4165.84 2994.06 4170.22 2999.46 4170.22 c
3004.86 4170.22 3009.23 4165.84 3009.23 4160.45 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3107.8 4190.59 m
3107.8 4185.19 3103.42 4180.81 3098.02 4180.81 c
3092.62 4180.81 3088.25 4185.19 3088.25 4190.59 c
3088.25 4195.98 3092.62 4200.36 3098.02 4200.36 c
3103.42 4200.36 3107.8 4195.98 3107.8 4190.59 c
f
n
3157.49 4205.25 m
3157.49 4199.85 3153.11 4195.47 3147.71 4195.47 c
3142.32 4195.47 3137.94 4199.85 3137.94 4205.25 c
3137.94 4210.64 3142.32 4215.02 3147.71 4215.02 c
3153.11 4215.02 3157.49 4210.64 3157.49 4205.25 c
f
n
3207.18 4220.73 m
3207.18 4215.33 3202.8 4210.95 3197.41 4210.95 c
3192.01 4210.95 3187.63 4215.33 3187.63 4220.73 c
3187.63 4226.12 3192.01 4230.5 3197.41 4230.5 c
3202.8 4230.5 3207.18 4226.12 3207.18 4220.73 c
f
n
3256.87 4235.39 m
3256.87 4229.99 3252.49 4225.61 3247.09 4225.61 c
3241.7 4225.61 3237.32 4229.99 3237.32 4235.39 c
3237.32 4240.79 3241.7 4245.16 3247.09 4245.16 c
3252.49 4245.16 3256.87 4240.79 3256.87 4235.39 c
f
n
3305.75 4250.86 m
3305.75 4245.46 3301.37 4241.09 3295.97 4241.09 c
3290.57 4241.09 3286.2 4245.46 3286.2 4250.86 c
3286.2 4256.26 3290.57 4260.64 3295.97 4260.64 c
3301.37 4260.64 3305.75 4256.26 3305.75 4250.86 c
f
n
3355.44 4265.53 m
3355.44 4260.13 3351.06 4255.75 3345.66 4255.75 c
3340.26 4255.75 3335.89 4260.13 3335.89 4265.53 c
3335.89 4270.93 3340.26 4275.3 3345.66 4275.3 c
3351.06 4275.3 3355.44 4270.93 3355.44 4265.53 c
f
n
3405.12 4281.0 m
3405.12 4275.61 3400.75 4271.23 3395.35 4271.23 c
3389.95 4271.23 3385.57 4275.61 3385.57 4281.0 c
3385.57 4286.4 3389.95 4290.78 3395.35 4290.78 c
3400.75 4290.78 3405.12 4286.4 3405.12 4281.0 c
f
n
3454.82 4295.67 m
3454.82 4290.27 3450.44 4285.89 3445.04 4285.89 c
3439.64 4285.89 3435.27 4290.27 3435.27 4295.67 c
3435.27 4301.07 3439.64 4305.44 3445.04 4305.44 c
3450.44 4305.44 3454.82 4301.07 3454.82 4295.67 c
f
n
2676.07 4017.08 m
2676.07 4011.68 2671.69 4007.3 2666.29 4007.3 c
2660.89 4007.3 2656.52 4011.68 2656.52 4017.08 c
2656.52 4022.48 2660.89 4026.85 2666.29 4026.85 c
2671.69 4026.85 2676.07 4022.48 2676.07 4017.08 c
f
n
2724.13 4036.63 m
2724.13 4031.23 2719.75 4026.85 2714.35 4026.85 c
2708.95 4026.85 2704.58 4031.23 2704.58 4036.63 c
2704.58 4042.03 2708.95 4046.4 2714.35 4046.4 c
2719.75 4046.4 2724.13 4042.03 2724.13 4036.63 c
f
n
2772.19 4056.99 m
2772.19 4051.59 2767.81 4047.22 2762.41 4047.22 c
2757.02 4047.22 2752.64 4051.59 2752.64 4056.99 c
2752.64 4062.39 2757.02 4066.77 2762.41 4066.77 c
2767.81 4066.77 2772.19 4062.39 2772.19 4056.99 c
f
n
2819.43 4076.54 m
2819.43 4071.14 2815.06 4066.77 2809.66 4066.77 c
2804.26 4066.77 2799.88 4071.14 2799.88 4076.54 c
2799.88 4081.94 2804.26 4086.32 2809.66 4086.32 c
2815.06 4086.32 2819.43 4081.94 2819.43 4076.54 c
f
n
2867.5 4096.09 m
2867.5 4090.7 2863.12 4086.32 2857.72 4086.32 c
2852.32 4086.32 2847.95 4090.7 2847.95 4096.09 c
2847.95 4101.49 2852.32 4105.87 2857.72 4105.87 c
2863.12 4105.87 2867.5 4101.49 2867.5 4096.09 c
f
n
2915.55 4116.46 m
2915.55 4111.06 2911.18 4106.68 2905.78 4106.68 c
2900.38 4106.68 2896.01 4111.06 2896.01 4116.46 c
2896.01 4121.86 2900.38 4126.23 2905.78 4126.23 c
2911.18 4126.23 2915.55 4121.86 2915.55 4116.46 c
f
n
2962.8 4136.01 m
2962.8 4130.61 2958.43 4126.23 2953.03 4126.23 c
2947.63 4126.23 2943.25 4130.61 2943.25 4136.01 c
2943.25 4141.41 2947.63 4145.78 2953.03 4145.78 c
2958.43 4145.78 2962.8 4141.41 2962.8 4136.01 c
f
n
3010.86 4155.56 m
3010.86 4150.16 3006.49 4145.78 3001.09 4145.78 c
2995.69 4145.78 2991.31 4150.16 2991.31 4155.56 c
2991.31 4160.96 2995.69 4165.33 3001.09 4165.33 c
3006.49 4165.33 3010.86 4160.96 3010.86 4155.56 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3106.17 4195.47 m
3106.17 4190.07 3101.79 4185.7 3096.39 4185.7 c
3091.0 4185.7 3086.62 4190.07 3086.62 4195.47 c
3086.62 4200.87 3091.0 4205.25 3096.39 4205.25 c
3101.79 4205.25 3106.17 4200.87 3106.17 4195.47 c
f
n
3154.23 4215.02 m
3154.23 4209.62 3149.86 4205.25 3144.46 4205.25 c
3139.06 4205.25 3134.68 4209.62 3134.68 4215.02 c
3134.68 4220.42 3139.06 4224.8 3144.46 4224.8 c
3149.86 4224.8 3154.23 4220.42 3154.23 4215.02 c
f
n
3201.48 4234.57 m
3201.48 4229.18 3197.1 4224.8 3191.7 4224.8 c
3186.3 4224.8 3181.93 4229.18 3181.93 4234.57 c
3181.93 4239.97 3186.3 4244.35 3191.7 4244.35 c
3197.1 4244.35 3201.48 4239.97 3201.48 4234.57 c
f
n
3249.54 4254.94 m
3249.54 4249.54 3245.16 4245.16 3239.77 4245.16 c
3234.37 4245.16 3229.99 4249.54 3229.99 4254.94 c
3229.99 4260.34 3234.37 4264.71 3239.77 4264.71 c
3245.16 4264.71 3249.54 4260.34 3249.54 4254.94 c
f
n
3297.6 4274.49 m
3297.6 4269.09 3293.22 4264.71 3287.82 4264.71 c
3282.43 4264.71 3278.05 4269.09 3278.05 4274.49 c
3278.05 4279.89 3282.43 4284.26 3287.82 4284.26 c
3293.22 4284.26 3297.6 4279.89 3297.6 4274.49 c
f
n
3344.85 4294.04 m
3344.85 4288.64 3340.47 4284.26 3335.07 4284.26 c
3329.67 4284.26 3325.3 4288.64 3325.3 4294.04 c
3325.3 4299.44 3329.67 4303.81 3335.07 4303.81 c
3340.47 4303.81 3344.85 4299.44 3344.85 4294.04 c
f
n
3392.91 4314.4 m
3392.91 4309.0 3388.53 4304.63 3383.13 4304.63 c
3377.73 4304.63 3373.36 4309.0 3373.36 4314.4 c
3373.36 4319.8 3377.73 4324.18 3383.13 4324.18 c
3388.53 4324.18 3392.91 4319.8 3392.91 4314.4 c
f
n
3440.97 4333.95 m
3440.97 4328.55 3436.59 4324.18 3431.19 4324.18 c
3425.79 4324.18 3421.42 4328.55 3421.42 4333.95 c
3421.42 4339.35 3425.79 4343.73 3431.19 4343.73 c
3436.59 4343.73 3440.97 4339.35 3440.97 4333.95 c
f
n
2647.55 3955.98 m
2647.55 3950.59 2643.18 3946.21 2637.78 3946.21 c
2632.38 3946.21 2628.0 3950.59 2628.0 3955.98 c
2628.0 3961.38 2632.38 3965.76 2637.78 3965.76 c
2643.18 3965.76 2647.55 3961.38 2647.55 3955.98 c
f
n
2693.17 3980.42 m
2693.17 3975.02 2688.8 3970.64 2683.4 3970.64 c
2678.0 3970.64 2673.62 3975.02 2673.62 3980.42 c
2673.62 3985.82 2678.0 3990.2 2683.4 3990.2 c
2688.8 3990.2 2693.17 3985.82 2693.17 3980.42 c
f
n
2738.79 4004.86 m
2738.79 3999.46 2734.41 3995.08 2729.02 3995.08 c
2723.62 3995.08 2719.24 3999.46 2719.24 4004.86 c
2719.24 4010.26 2723.62 4014.63 2729.02 4014.63 c
2734.41 4014.63 2738.79 4010.26 2738.79 4004.86 c
f
n
2784.41 4029.3 m
2784.41 4023.9 2780.03 4019.52 2774.63 4019.52 c
2769.23 4019.52 2764.86 4023.9 2764.86 4029.3 c
2764.86 4034.7 2769.23 4039.07 2774.63 4039.07 c
2780.03 4039.07 2784.41 4034.7 2784.41 4029.3 c
f
n
2830.02 4053.73 m
2830.02 4048.34 2825.65 4043.96 2820.25 4043.96 c
2814.85 4043.96 2810.47 4048.34 2810.47 4053.73 c
2810.47 4059.13 2814.85 4063.51 2820.25 4063.51 c
2825.65 4063.51 2830.02 4059.13 2830.02 4053.73 c
f
n
2875.64 4078.17 m
2875.64 4072.77 2871.27 4068.39 2865.87 4068.39 c
2860.47 4068.39 2856.09 4072.77 2856.09 4078.17 c
2856.09 4083.57 2860.47 4087.95 2865.87 4087.95 c
2871.27 4087.95 2875.64 4083.57 2875.64 4078.17 c
f
n
2921.26 4102.61 m
2921.26 4097.21 2916.88 4092.84 2911.48 4092.84 c
2906.09 4092.84 2901.71 4097.21 2901.71 4102.61 c
2901.71 4108.01 2906.09 4112.38 2911.48 4112.38 c
2916.88 4112.38 2921.26 4108.01 2921.26 4102.61 c
f
n
2966.88 4127.05 m
2966.88 4121.65 2962.5 4117.27 2957.1 4117.27 c
2951.7 4117.27 2947.32 4121.65 2947.32 4127.05 c
2947.32 4132.45 2951.7 4136.82 2957.1 4136.82 c
2962.5 4136.82 2966.88 4132.45 2966.88 4127.05 c
f
n
3012.49 4151.48 m
3012.49 4146.09 3008.12 4141.71 3002.72 4141.71 c
2997.32 4141.71 2992.94 4146.09 2992.94 4151.48 c
2992.94 4156.88 2997.32 4161.26 3002.72 4161.26 c
3008.12 4161.26 3012.49 4156.88 3012.49 4151.48 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3104.54 4199.55 m
3104.54 4194.15 3100.16 4189.77 3094.77 4189.77 c
3089.37 4189.77 3084.99 4194.15 3084.99 4199.55 c
3084.99 4204.95 3089.37 4209.32 3094.77 4209.32 c
3100.16 4209.32 3104.54 4204.95 3104.54 4199.55 c
f
n
3150.16 4223.98 m
3150.16 4218.59 3145.78 4214.21 3140.38 4214.21 c
3134.98 4214.21 3130.61 4218.59 3130.61 4223.98 c
3130.61 4229.38 3134.98 4233.76 3140.38 4233.76 c
3145.78 4233.76 3150.16 4229.38 3150.16 4223.98 c
f
n
3195.78 4248.42 m
3195.78 4243.02 3191.4 4238.64 3186.0 4238.64 c
3180.6 4238.64 3176.23 4243.02 3176.23 4248.42 c
3176.23 4253.82 3180.6 4258.2 3186.0 4258.2 c
3191.4 4258.2 3195.78 4253.82 3195.78 4248.42 c
f
n
3241.39 4272.86 m
3241.39 4267.46 3237.02 4263.08 3231.62 4263.08 c
3226.22 4263.08 3221.84 4267.46 3221.84 4272.86 c
3221.84 4278.26 3226.22 4282.63 3231.62 4282.63 c
3237.02 4282.63 3241.39 4278.26 3241.39 4272.86 c
f
n
3287.01 4297.3 m
3287.01 4291.9 3282.63 4287.52 3277.23 4287.52 c
3271.84 4287.52 3267.46 4291.9 3267.46 4297.3 c
3267.46 4302.7 3271.84 4307.07 3277.23 4307.07 c
3282.63 4307.07 3287.01 4302.7 3287.01 4297.3 c
f
n
3332.63 4321.73 m
3332.63 4316.34 3328.25 4311.96 3322.85 4311.96 c
3317.45 4311.96 3313.08 4316.34 3313.08 4321.73 c
3313.08 4327.13 3317.45 4331.51 3322.85 4331.51 c
3328.25 4331.51 3332.63 4327.13 3332.63 4321.73 c
f
n
3378.25 4346.17 m
3378.25 4340.77 3373.87 4336.4 3368.47 4336.4 c
3363.07 4336.4 3358.7 4340.77 3358.7 4346.17 c
3358.7 4351.57 3363.07 4355.95 3368.47 4355.95 c
3373.87 4355.95 3378.25 4351.57 3378.25 4346.17 c
f
n
3423.86 4370.61 m
3423.86 4365.21 3419.48 4360.84 3414.09 4360.84 c
3408.69 4360.84 3404.31 4365.21 3404.31 4370.61 c
3404.31 4376.01 3408.69 4380.39 3414.09 4380.39 c
3419.48 4380.39 3423.86 4376.01 3423.86 4370.61 c
f
n
3469.48 4395.05 m
3469.48 4389.65 3465.1 4385.27 3459.7 4385.27 c
3454.3 4385.27 3449.93 4389.65 3449.93 4395.05 c
3449.93 4400.45 3454.3 4404.82 3459.7 4404.82 c
3465.1 4404.82 3469.48 4400.45 3469.48 4395.05 c
f
n
2671.18 3916.88 m
2671.18 3911.48 2666.8 3907.11 2661.4 3907.11 c
2656.0 3907.11 2651.63 3911.48 2651.63 3916.88 c
2651.63 3922.28 2656.0 3926.66 2661.4 3926.66 c
2666.8 3926.66 2671.18 3922.28 2671.18 3916.88 c
f
n
2714.35 3945.39 m
2714.35 3940.0 2709.98 3935.62 2704.58 3935.62 c
2699.18 3935.62 2694.8 3940.0 2694.8 3945.39 c
2694.8 3950.79 2699.18 3955.17 2704.58 3955.17 c
2709.98 3955.17 2714.35 3950.79 2714.35 3945.39 c
f
n
2757.53 3974.72 m
2757.53 3969.32 2753.15 3964.94 2747.75 3964.94 c
2742.35 3964.94 2737.98 3969.32 2737.98 3974.72 c
2737.98 3980.12 2742.35 3984.49 2747.75 3984.49 c
2753.15 3984.49 2757.53 3980.12 2757.53 3974.72 c
f
n
2800.7 4003.23 m
2800.7 3997.83 2796.32 3993.45 2790.93 3993.45 c
2785.53 3993.45 2781.15 3997.83 2781.15 4003.23 c
2781.15 4008.63 2785.53 4013.0 2790.93 4013.0 c
2796.32 4013.0 2800.7 4008.63 2800.7 4003.23 c
f
n
2843.87 4031.74 m
2843.87 4026.34 2839.5 4021.96 2834.1 4021.96 c
2828.7 4021.96 2824.32 4026.34 2824.32 4031.74 c
2824.32 4037.14 2828.7 4041.52 2834.1 4041.52 c
2839.5 4041.52 2843.87 4037.14 2843.87 4031.74 c
f
n
2886.23 4060.25 m
2886.23 4054.85 2881.86 4050.48 2876.46 4050.48 c
2871.06 4050.48 2866.68 4054.85 2866.68 4060.25 c
2866.68 4065.65 2871.06 4070.03 2876.46 4070.03 c
2881.86 4070.03 2886.23 4065.65 2886.23 4060.25 c
f
n
2929.41 4089.57 m
2929.41 4084.18 2925.03 4079.8 2919.63 4079.8 c
2914.23 4079.8 2909.86 4084.18 2909.86 4089.57 c
2909.86 4094.97 2914.23 4099.35 2919.63 4099.35 c
2925.03 4099.35 2929.41 4094.97 2929.41 4089.57 c
f
n
2972.58 4118.09 m
2972.58 4112.69 2968.2 4108.31 2962.8 4108.31 c
2957.41 4108.31 2953.03 4112.69 2953.03 4118.09 c
2953.03 4123.48 2957.41 4127.86 2962.8 4127.86 c
2968.2 4127.86 2972.58 4123.48 2972.58 4118.09 c
f
n
3015.75 4146.6 m
3015.75 4141.2 3011.38 4136.82 3005.98 4136.82 c
3000.58 4136.82 2996.2 4141.2 2996.2 4146.6 c
2996.2 4152.0 3000.58 4156.37 3005.98 4156.37 c
3011.38 4156.37 3015.75 4152.0 3015.75 4146.6 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3101.29 4204.43 m
3101.29 4199.04 3096.91 4194.66 3091.51 4194.66 c
3086.11 4194.66 3081.73 4199.04 3081.73 4204.43 c
3081.73 4209.83 3086.11 4214.21 3091.51 4214.21 c
3096.91 4214.21 3101.29 4209.83 3101.29 4204.43 c
f
n
3144.46 4232.95 m
3144.46 4227.55 3140.08 4223.17 3134.68 4223.17 c
3129.28 4223.17 3124.91 4227.55 3124.91 4232.95 c
3124.91 4238.34 3129.28 4242.72 3134.68 4242.72 c
3140.08 4242.72 3144.46 4238.34 3144.46 4232.95 c
f
n
3187.63 4261.45 m
3187.63 4256.05 3183.25 4251.68 3177.86 4251.68 c
3172.46 4251.68 3168.08 4256.05 3168.08 4261.45 c
3168.08 4266.85 3172.46 4271.23 3177.86 4271.23 c
3183.25 4271.23 3187.63 4266.85 3187.63 4261.45 c
f
n
3230.8 4290.78 m
3230.8 4285.38 3226.43 4281.0 3221.03 4281.0 c
3215.63 4281.0 3211.25 4285.38 3211.25 4290.78 c
3211.25 4296.18 3215.63 4300.55 3221.03 4300.55 c
3226.43 4300.55 3230.8 4296.18 3230.8 4290.78 c
f
n
3273.16 4319.29 m
3273.16 4313.89 3268.79 4309.52 3263.39 4309.52 c
3257.99 4309.52 3253.61 4313.89 3253.61 4319.29 c
3253.61 4324.69 3257.99 4329.07 3263.39 4329.07 c
3268.79 4329.07 3273.16 4324.69 3273.16 4319.29 c
f
n
3316.34 4347.8 m
3316.34 4342.4 3311.96 4338.03 3306.56 4338.03 c
3301.16 4338.03 3296.79 4342.4 3296.79 4347.8 c
3296.79 4353.2 3301.16 4357.58 3306.56 4357.58 c
3311.96 4357.58 3316.34 4353.2 3316.34 4347.8 c
f
n
3359.51 4376.31 m
3359.51 4370.91 3355.13 4366.54 3349.73 4366.54 c
3344.34 4366.54 3339.96 4370.91 3339.96 4376.31 c
3339.96 4381.71 3344.34 4386.09 3349.73 4386.09 c
3355.13 4386.09 3359.51 4381.71 3359.51 4376.31 c
f
n
3402.68 4405.64 m
3402.68 4400.24 3398.3 4395.86 3392.91 4395.86 c
3387.51 4395.86 3383.13 4400.24 3383.13 4405.64 c
3383.13 4411.04 3387.51 4415.41 3392.91 4415.41 c
3398.3 4415.41 3402.68 4411.04 3402.68 4405.64 c
f
n
3445.86 4434.15 m
3445.86 4428.75 3441.48 4424.37 3436.08 4424.37 c
3430.68 4424.37 3426.3 4428.75 3426.3 4434.15 c
3426.3 4439.55 3430.68 4443.92 3436.08 4443.92 c
3441.48 4443.92 3445.86 4439.55 3445.86 4434.15 c
f
n
2658.96 3847.64 m
2658.96 3842.24 2654.58 3837.87 2649.18 3837.87 c
2643.79 3837.87 2639.41 3842.24 2639.41 3847.64 c
2639.41 3853.04 2643.79 3857.42 2649.18 3857.42 c
2654.58 3857.42 2658.96 3853.04 2658.96 3847.64 c
f
n
2698.88 3880.23 m
2698.88 3874.83 2694.5 3870.45 2689.1 3870.45 c
2683.7 3870.45 2679.32 3874.83 2679.32 3880.23 c
2679.32 3885.62 2683.7 3890.0 2689.1 3890.0 c
2694.5 3890.0 2698.88 3885.62 2698.88 3880.23 c
f
n
2738.79 3912.81 m
2738.79 3907.41 2734.41 3903.04 2729.02 3903.04 c
2723.62 3903.04 2719.24 3907.41 2719.24 3912.81 c
2719.24 3918.21 2723.62 3922.59 2729.02 3922.59 c
2734.41 3922.59 2738.79 3918.21 2738.79 3912.81 c
f
n
2778.7 3946.21 m
2778.7 3940.81 2774.33 3936.43 2768.93 3936.43 c
2763.53 3936.43 2759.16 3940.81 2759.16 3946.21 c
2759.16 3951.61 2763.53 3955.98 2768.93 3955.98 c
2774.33 3955.98 2778.7 3951.61 2778.7 3946.21 c
f
n
2818.62 3978.79 m
2818.62 3973.39 2814.24 3969.02 2808.84 3969.02 c
2803.45 3969.02 2799.07 3973.39 2799.07 3978.79 c
2799.07 3984.19 2803.45 3988.57 2808.84 3988.57 c
2814.24 3988.57 2818.62 3984.19 2818.62 3978.79 c
f
n
2858.54 4011.38 m
2858.54 4005.98 2854.16 4001.6 2848.76 4001.6 c
2843.36 4001.6 2838.98 4005.98 2838.98 4011.38 c
2838.98 4016.77 2843.36 4021.15 2848.76 4021.15 c
2854.16 4021.15 2858.54 4016.77 2858.54 4011.38 c
f
n
2898.45 4043.96 m
2898.45 4038.56 2894.07 4034.18 2888.68 4034.18 c
2883.28 4034.18 2878.9 4038.56 2878.9 4043.96 c
2878.9 4049.36 2883.28 4053.73 2888.68 4053.73 c
2894.07 4053.73 2898.45 4049.36 2898.45 4043.96 c
f
n
2938.36 4077.36 m
2938.36 4071.96 2933.99 4067.58 2928.59 4067.58 c
2923.19 4067.58 2918.82 4071.96 2918.82 4077.36 c
2918.82 4082.75 2923.19 4087.13 2928.59 4087.13 c
2933.99 4087.13 2938.36 4082.75 2938.36 4077.36 c
f
n
2978.28 4109.94 m
2978.28 4104.54 2973.9 4100.16 2968.5 4100.16 c
2963.11 4100.16 2958.73 4104.54 2958.73 4109.94 c
2958.73 4115.34 2963.11 4119.71 2968.5 4119.71 c
2973.9 4119.71 2978.28 4115.34 2978.28 4109.94 c
f
n
3018.2 4142.52 m
3018.2 4137.12 3013.82 4132.75 3008.42 4132.75 c
3003.02 4132.75 2998.64 4137.12 2998.64 4142.52 c
2998.64 4147.92 3003.02 4152.3 3008.42 4152.3 c
3013.82 4152.3 3018.2 4147.92 3018.2 4142.52 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3098.84 4208.51 m
3098.84 4203.11 3094.46 4198.73 3089.07 4198.73 c
3083.67 4198.73 3079.29 4203.11 3079.29 4208.51 c
3079.29 4213.91 3083.67 4218.28 3089.07 4218.28 c
3094.46 4218.28 3098.84 4213.91 3098.84 4208.51 c
f
n
3138.75 4241.09 m
3138.75 4235.69 3134.38 4231.32 3128.98 4231.32 c
3123.58 4231.32 3119.2 4235.69 3119.2 4241.09 c
3119.2 4246.49 3123.58 4250.86 3128.98 4250.86 c
3134.38 4250.86 3138.75 4246.49 3138.75 4241.09 c
f
n
3178.67 4273.67 m
3178.67 4268.27 3174.29 4263.9 3168.89 4263.9 c
3163.5 4263.9 3159.12 4268.27 3159.12 4273.67 c
3159.12 4279.07 3163.5 4283.45 3168.89 4283.45 c
3174.29 4283.45 3178.67 4279.07 3178.67 4273.67 c
f
n
3218.59 4307.07 m
3218.59 4301.67 3214.21 4297.3 3208.81 4297.3 c
3203.41 4297.3 3199.04 4301.67 3199.04 4307.07 c
3199.04 4312.47 3203.41 4316.85 3208.81 4316.85 c
3214.21 4316.85 3218.59 4312.47 3218.59 4307.07 c
f
n
3258.5 4339.66 m
3258.5 4334.26 3254.12 4329.88 3248.72 4329.88 c
3243.32 4329.88 3238.95 4334.26 3238.95 4339.66 c
3238.95 4345.05 3243.32 4349.43 3248.72 4349.43 c
3254.12 4349.43 3258.5 4345.05 3258.5 4339.66 c
f
n
3298.41 4372.24 m
3298.41 4366.84 3294.04 4362.46 3288.64 4362.46 c
3283.24 4362.46 3278.86 4366.84 3278.86 4372.24 c
3278.86 4377.64 3283.24 4382.02 3288.64 4382.02 c
3294.04 4382.02 3298.41 4377.64 3298.41 4372.24 c
f
n
3338.33 4404.82 m
3338.33 4399.43 3333.95 4395.05 3328.55 4395.05 c
3323.16 4395.05 3318.78 4399.43 3318.78 4404.82 c
3318.78 4410.22 3323.16 4414.6 3328.55 4414.6 c
3333.95 4414.6 3338.33 4410.22 3338.33 4404.82 c
f
n
3378.25 4438.22 m
3378.25 4432.82 3373.87 4428.45 3368.47 4428.45 c
3363.07 4428.45 3358.7 4432.82 3358.7 4438.22 c
3358.7 4443.62 3363.07 4448.0 3368.47 4448.0 c
3373.87 4448.0 3378.25 4443.62 3378.25 4438.22 c
f
n
3418.16 4470.8 m
3418.16 4465.41 3413.78 4461.03 3408.38 4461.03 c
3402.98 4461.03 3398.61 4465.41 3398.61 4470.8 c
3398.61 4476.2 3402.98 4480.58 3408.38 4480.58 c
3413.78 4480.58 3418.16 4476.2 3418.16 4470.8 c
f
n
3458.07 4503.39 m
3458.07 4497.99 3453.7 4493.61 3448.3 4493.61 c
3442.9 4493.61 3438.52 4497.99 3438.52 4503.39 c
3438.52 4508.79 3442.9 4513.16 3448.3 4513.16 c
3453.7 4513.16 3458.07 4508.79 3458.07 4503.39 c
f
n
2656.52 3773.52 m
2656.52 3768.12 2652.14 3763.74 2646.74 3763.74 c
2641.34 3763.74 2636.96 3768.12 2636.96 3773.52 c
2636.96 3778.91 2641.34 3783.29 2646.74 3783.29 c
2652.14 3783.29 2656.52 3778.91 2656.52 3773.52 c
f
n
2692.36 3809.36 m
2692.36 3803.96 2687.98 3799.58 2682.58 3799.58 c
2677.18 3799.58 2672.81 3803.96 2672.81 3809.36 c
2672.81 3814.75 2677.18 3819.13 2682.58 3819.13 c
2687.98 3819.13 2692.36 3814.75 2692.36 3809.36 c
f
n
2729.02 3846.01 m
2729.02 3840.61 2724.64 3836.24 2719.24 3836.24 c
2713.84 3836.24 2709.46 3840.61 2709.46 3846.01 c
2709.46 3851.41 2713.84 3855.79 2719.24 3855.79 c
2724.64 3855.79 2729.02 3851.41 2729.02 3846.01 c
f
n
2765.67 3882.67 m
2765.67 3877.27 2761.3 3872.89 2755.9 3872.89 c
2750.5 3872.89 2746.12 3877.27 2746.12 3882.67 c
2746.12 3888.07 2750.5 3892.45 2755.9 3892.45 c
2761.3 3892.45 2765.67 3888.07 2765.67 3882.67 c
f
n
2802.33 3919.32 m
2802.33 3913.93 2797.95 3909.55 2792.55 3909.55 c
2787.16 3909.55 2782.78 3913.93 2782.78 3919.32 c
2782.78 3924.72 2787.16 3929.1 2792.55 3929.1 c
2797.95 3929.1 2802.33 3924.72 2802.33 3919.32 c
f
n
2838.98 3955.98 m
2838.98 3950.59 2834.61 3946.21 2829.21 3946.21 c
2823.81 3946.21 2819.43 3950.59 2819.43 3955.98 c
2819.43 3961.38 2823.81 3965.76 2829.21 3965.76 c
2834.61 3965.76 2838.98 3961.38 2838.98 3955.98 c
f
n
2875.64 3992.64 m
2875.64 3987.24 2871.27 3982.86 2865.87 3982.86 c
2860.47 3982.86 2856.09 3987.24 2856.09 3992.64 c
2856.09 3998.04 2860.47 4002.41 2865.87 4002.41 c
2871.27 4002.41 2875.64 3998.04 2875.64 3992.64 c
f
n
2912.3 4029.3 m
2912.3 4023.9 2907.92 4019.52 2902.52 4019.52 c
2897.12 4019.52 2892.75 4023.9 2892.75 4029.3 c
2892.75 4034.7 2897.12 4039.07 2902.52 4039.07 c
2907.92 4039.07 2912.3 4034.7 2912.3 4029.3 c
f
n
2948.95 4065.95 m
2948.95 4060.55 2944.58 4056.18 2939.18 4056.18 c
2933.78 4056.18 2929.41 4060.55 2929.41 4065.95 c
2929.41 4071.35 2933.78 4075.73 2939.18 4075.73 c
2944.58 4075.73 2948.95 4071.35 2948.95 4065.95 c
f
n
2985.61 4102.61 m
2985.61 4097.21 2981.23 4092.84 2975.84 4092.84 c
2970.44 4092.84 2966.06 4097.21 2966.06 4102.61 c
2966.06 4108.01 2970.44 4112.38 2975.84 4112.38 c
2981.23 4112.38 2985.61 4108.01 2985.61 4102.61 c
f
n
3022.27 4139.27 m
3022.27 4133.87 3017.89 4129.49 3012.49 4129.49 c
3007.09 4129.49 3002.72 4133.87 3002.72 4139.27 c
3002.72 4144.66 3007.09 4149.04 3012.49 4149.04 c
3017.89 4149.04 3022.27 4144.66 3022.27 4139.27 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3094.77 4211.77 m
3094.77 4206.37 3090.39 4201.99 3084.99 4201.99 c
3079.59 4201.99 3075.21 4206.37 3075.21 4211.77 c
3075.21 4217.16 3079.59 4221.54 3084.99 4221.54 c
3090.39 4221.54 3094.77 4217.16 3094.77 4211.77 c
f
n
3131.42 4248.42 m
3131.42 4243.02 3127.05 4238.64 3121.65 4238.64 c
3116.25 4238.64 3111.87 4243.02 3111.87 4248.42 c
3111.87 4253.82 3116.25 4258.2 3121.65 4258.2 c
3127.05 4258.2 3131.42 4253.82 3131.42 4248.42 c
f
n
3168.08 4285.08 m
3168.08 4279.68 3163.7 4275.3 3158.3 4275.3 c
3152.91 4275.3 3148.53 4279.68 3148.53 4285.08 c
3148.53 4290.48 3152.91 4294.85 3158.3 4294.85 c
3163.7 4294.85 3168.08 4290.48 3168.08 4285.08 c
f
n
3204.74 4321.73 m
3204.74 4316.34 3200.36 4311.96 3194.96 4311.96 c
3189.56 4311.96 3185.19 4316.34 3185.19 4321.73 c
3185.19 4327.13 3189.56 4331.51 3194.96 4331.51 c
3200.36 4331.51 3204.74 4327.13 3204.74 4321.73 c
f
n
3241.39 4358.39 m
3241.39 4352.99 3237.02 4348.62 3231.62 4348.62 c
3226.22 4348.62 3221.84 4352.99 3221.84 4358.39 c
3221.84 4363.79 3226.22 4368.16 3231.62 4368.16 c
3237.02 4368.16 3241.39 4363.79 3241.39 4358.39 c
f
n
3278.05 4395.05 m
3278.05 4389.65 3273.67 4385.27 3268.27 4385.27 c
3262.88 4385.27 3258.5 4389.65 3258.5 4395.05 c
3258.5 4400.45 3262.88 4404.82 3268.27 4404.82 c
3273.67 4404.82 3278.05 4400.45 3278.05 4395.05 c
f
n
3314.71 4431.7 m
3314.71 4426.3 3310.33 4421.93 3304.93 4421.93 c
3299.53 4421.93 3295.16 4426.3 3295.16 4431.7 c
3295.16 4437.1 3299.53 4441.48 3304.93 4441.48 c
3310.33 4441.48 3314.71 4437.1 3314.71 4431.7 c
f
n
3351.36 4468.36 m
3351.36 4462.96 3346.98 4458.59 3341.59 4458.59 c
3336.19 4458.59 3331.81 4462.96 3331.81 4468.36 c
3331.81 4473.76 3336.19 4478.14 3341.59 4478.14 c
3346.98 4478.14 3351.36 4473.76 3351.36 4468.36 c
f
n
3388.02 4505.02 m
3388.02 4499.62 3383.64 4495.24 3378.25 4495.24 c
3372.85 4495.24 3368.47 4499.62 3368.47 4505.02 c
3368.47 4510.41 3372.85 4514.79 3378.25 4514.79 c
3383.64 4514.79 3388.02 4510.41 3388.02 4505.02 c
f
n
3424.68 4541.68 m
3424.68 4536.28 3420.3 4531.9 3414.9 4531.9 c
3409.5 4531.9 3405.12 4536.28 3405.12 4541.68 c
3405.12 4547.07 3409.5 4551.45 3414.9 4551.45 c
3420.3 4551.45 3424.68 4547.07 3424.68 4541.68 c
f
n
3460.52 4577.52 m
3460.52 4572.12 3456.14 4567.74 3450.74 4567.74 c
3445.34 4567.74 3440.97 4572.12 3440.97 4577.52 c
3440.97 4582.91 3445.34 4587.29 3450.74 4587.29 c
3456.14 4587.29 3460.52 4582.91 3460.52 4577.52 c
f
n
2730.64 3775.96 m
2730.64 3770.56 2726.27 3766.18 2720.87 3766.18 c
2715.47 3766.18 2711.09 3770.56 2711.09 3775.96 c
2711.09 3781.36 2715.47 3785.73 2720.87 3785.73 c
2726.27 3785.73 2730.64 3781.36 2730.64 3775.96 c
f
n
2763.23 3815.87 m
2763.23 3810.47 2758.85 3806.1 2753.45 3806.1 c
2748.05 3806.1 2743.68 3810.47 2743.68 3815.87 c
2743.68 3821.27 2748.05 3825.65 2753.45 3825.65 c
2758.85 3825.65 2763.23 3821.27 2763.23 3815.87 c
f
n
2795.81 3855.79 m
2795.81 3850.39 2791.43 3846.01 2786.04 3846.01 c
2780.64 3846.01 2776.26 3850.39 2776.26 3855.79 c
2776.26 3861.19 2780.64 3865.56 2786.04 3865.56 c
2791.43 3865.56 2795.81 3861.19 2795.81 3855.79 c
f
n
2829.21 3895.7 m
2829.21 3890.3 2824.83 3885.93 2819.43 3885.93 c
2814.04 3885.93 2809.66 3890.3 2809.66 3895.7 c
2809.66 3901.1 2814.04 3905.48 2819.43 3905.48 c
2824.83 3905.48 2829.21 3901.1 2829.21 3895.7 c
f
n
2861.79 3935.62 m
2861.79 3930.22 2857.42 3925.84 2852.02 3925.84 c
2846.62 3925.84 2842.24 3930.22 2842.24 3935.62 c
2842.24 3941.02 2846.62 3945.39 2852.02 3945.39 c
2857.42 3945.39 2861.79 3941.02 2861.79 3935.62 c
f
n
2894.38 3975.53 m
2894.38 3970.13 2890.0 3965.76 2884.6 3965.76 c
2879.2 3965.76 2874.83 3970.13 2874.83 3975.53 c
2874.83 3980.93 2879.2 3985.31 2884.6 3985.31 c
2890.0 3985.31 2894.38 3980.93 2894.38 3975.53 c
f
n
2926.96 4015.45 m
2926.96 4010.05 2922.59 4005.67 2917.19 4005.67 c
2911.79 4005.67 2907.41 4010.05 2907.41 4015.45 c
2907.41 4020.85 2911.79 4025.22 2917.19 4025.22 c
2922.59 4025.22 2926.96 4020.85 2926.96 4015.45 c
f
n
2960.36 4055.36 m
2960.36 4049.96 2955.98 4045.59 2950.58 4045.59 c
2945.18 4045.59 2940.81 4049.96 2940.81 4055.36 c
2940.81 4060.76 2945.18 4065.14 2950.58 4065.14 c
2955.98 4065.14 2960.36 4060.76 2960.36 4055.36 c
f
n
2992.94 4095.28 m
2992.94 4089.88 2988.57 4085.5 2983.17 4085.5 c
2977.77 4085.5 2973.39 4089.88 2973.39 4095.28 c
2973.39 4100.68 2977.77 4105.05 2983.17 4105.05 c
2988.57 4105.05 2992.94 4100.68 2992.94 4095.28 c
f
n
3025.53 4135.19 m
3025.53 4129.79 3021.15 4125.42 3015.75 4125.42 c
3010.35 4125.42 3005.98 4129.79 3005.98 4135.19 c
3005.98 4140.59 3010.35 4144.97 3015.75 4144.97 c
3021.15 4144.97 3025.53 4140.59 3025.53 4135.19 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3091.51 4215.84 m
3091.51 4210.44 3087.13 4206.06 3081.73 4206.06 c
3076.34 4206.06 3071.96 4210.44 3071.96 4215.84 c
3071.96 4221.23 3076.34 4225.61 3081.73 4225.61 c
3087.13 4225.61 3091.51 4221.23 3091.51 4215.84 c
f
n
3124.09 4255.75 m
3124.09 4250.36 3119.71 4245.98 3114.32 4245.98 c
3108.92 4245.98 3104.54 4250.36 3104.54 4255.75 c
3104.54 4261.15 3108.92 4265.53 3114.32 4265.53 c
3119.71 4265.53 3124.09 4261.15 3124.09 4255.75 c
f
n
3156.68 4295.67 m
3156.68 4290.27 3152.3 4285.89 3146.9 4285.89 c
3141.5 4285.89 3137.12 4290.27 3137.12 4295.67 c
3137.12 4301.07 3141.5 4305.44 3146.9 4305.44 c
3152.3 4305.44 3156.68 4301.07 3156.68 4295.67 c
f
n
3190.07 4335.58 m
3190.07 4330.18 3185.7 4325.81 3180.3 4325.81 c
3174.9 4325.81 3170.52 4330.18 3170.52 4335.58 c
3170.52 4340.98 3174.9 4345.36 3180.3 4345.36 c
3185.7 4345.36 3190.07 4340.98 3190.07 4335.58 c
f
n
3222.66 4375.5 m
3222.66 4370.1 3218.28 4365.72 3212.88 4365.72 c
3207.48 4365.72 3203.11 4370.1 3203.11 4375.5 c
3203.11 4380.89 3207.48 4385.27 3212.88 4385.27 c
3218.28 4385.27 3222.66 4380.89 3222.66 4375.5 c
f
n
3255.24 4415.41 m
3255.24 4410.02 3250.86 4405.64 3245.46 4405.64 c
3240.07 4405.64 3235.69 4410.02 3235.69 4415.41 c
3235.69 4420.81 3240.07 4425.19 3245.46 4425.19 c
3250.86 4425.19 3255.24 4420.81 3255.24 4415.41 c
f
n
3287.82 4455.33 m
3287.82 4449.93 3283.45 4445.55 3278.05 4445.55 c
3272.65 4445.55 3268.27 4449.93 3268.27 4455.33 c
3268.27 4460.73 3272.65 4465.1 3278.05 4465.1 c
3283.45 4465.1 3287.82 4460.73 3287.82 4455.33 c
f
n
3321.22 4495.24 m
3321.22 4489.84 3316.85 4485.47 3311.45 4485.47 c
3306.05 4485.47 3301.67 4489.84 3301.67 4495.24 c
3301.67 4500.64 3306.05 4505.02 3311.45 4505.02 c
3316.85 4505.02 3321.22 4500.64 3321.22 4495.24 c
f
n
3353.81 4535.16 m
3353.81 4529.76 3349.43 4525.38 3344.03 4525.38 c
3338.63 4525.38 3334.26 4529.76 3334.26 4535.16 c
3334.26 4540.55 3338.63 4544.93 3344.03 4544.93 c
3349.43 4544.93 3353.81 4540.55 3353.81 4535.16 c
f
n
3386.39 4575.07 m
3386.39 4569.67 3382.02 4565.3 3376.62 4565.3 c
3371.22 4565.3 3366.84 4569.67 3366.84 4575.07 c
3366.84 4580.47 3371.22 4584.85 3376.62 4584.85 c
3382.02 4584.85 3386.39 4580.47 3386.39 4575.07 c
f
n
2799.88 3788.18 m
2799.88 3782.78 2795.51 3778.4 2790.11 3778.4 c
2784.71 3778.4 2780.34 3782.78 2780.34 3788.18 c
2780.34 3793.57 2784.71 3797.95 2790.11 3797.95 c
2795.51 3797.95 2799.88 3793.57 2799.88 3788.18 c
f
n
2828.39 3831.35 m
2828.39 3825.95 2824.02 3821.57 2818.62 3821.57 c
2813.22 3821.57 2808.84 3825.95 2808.84 3831.35 c
2808.84 3836.75 2813.22 3841.12 2818.62 3841.12 c
2824.02 3841.12 2828.39 3836.75 2828.39 3831.35 c
f
n
2857.72 3874.52 m
2857.72 3869.12 2853.34 3864.75 2847.95 3864.75 c
2842.55 3864.75 2838.17 3869.12 2838.17 3874.52 c
2838.17 3879.92 2842.55 3884.3 2847.95 3884.3 c
2853.34 3884.3 2857.72 3879.92 2857.72 3874.52 c
f
n
2886.23 3917.7 m
2886.23 3912.3 2881.86 3907.92 2876.46 3907.92 c
2871.06 3907.92 2866.68 3912.3 2866.68 3917.7 c
2866.68 3923.09 2871.06 3927.47 2876.46 3927.47 c
2881.86 3927.47 2886.23 3923.09 2886.23 3917.7 c
f
n
2914.74 3960.87 m
2914.74 3955.47 2910.36 3951.09 2904.96 3951.09 c
2899.57 3951.09 2895.19 3955.47 2895.19 3960.87 c
2895.19 3966.27 2899.57 3970.64 2904.96 3970.64 c
2910.36 3970.64 2914.74 3966.27 2914.74 3960.87 c
f
n
2943.25 4003.23 m
2943.25 3997.83 2938.88 3993.45 2933.48 3993.45 c
2928.08 3993.45 2923.7 3997.83 2923.7 4003.23 c
2923.7 4008.63 2928.08 4013.0 2933.48 4013.0 c
2938.88 4013.0 2943.25 4008.63 2943.25 4003.23 c
f
n
2972.58 4046.4 m
2972.58 4041.0 2968.2 4036.63 2962.8 4036.63 c
2957.41 4036.63 2953.03 4041.0 2953.03 4046.4 c
2953.03 4051.8 2957.41 4056.18 2962.8 4056.18 c
2968.2 4056.18 2972.58 4051.8 2972.58 4046.4 c
f
n
3001.09 4089.57 m
3001.09 4084.18 2996.71 4079.8 2991.31 4079.8 c
2985.91 4079.8 2981.54 4084.18 2981.54 4089.57 c
2981.54 4094.97 2985.91 4099.35 2991.31 4099.35 c
2996.71 4099.35 3001.09 4094.97 3001.09 4089.57 c
f
n
3029.6 4132.75 m
3029.6 4127.35 3025.22 4122.97 3019.82 4122.97 c
3014.43 4122.97 3010.05 4127.35 3010.05 4132.75 c
3010.05 4138.15 3014.43 4142.52 3019.82 4142.52 c
3025.22 4142.52 3029.6 4138.15 3029.6 4132.75 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3087.43 4218.28 m
3087.43 4212.88 3083.06 4208.51 3077.66 4208.51 c
3072.26 4208.51 3067.89 4212.88 3067.89 4218.28 c
3067.89 4223.68 3072.26 4228.05 3077.66 4228.05 c
3083.06 4228.05 3087.43 4223.68 3087.43 4218.28 c
f
n
3115.95 4261.45 m
3115.95 4256.05 3111.57 4251.68 3106.17 4251.68 c
3100.77 4251.68 3096.39 4256.05 3096.39 4261.45 c
3096.39 4266.85 3100.77 4271.23 3106.17 4271.23 c
3111.57 4271.23 3115.95 4266.85 3115.95 4261.45 c
f
n
3144.46 4304.63 m
3144.46 4299.23 3140.08 4294.85 3134.68 4294.85 c
3129.28 4294.85 3124.91 4299.23 3124.91 4304.63 c
3124.91 4310.03 3129.28 4314.4 3134.68 4314.4 c
3140.08 4314.4 3144.46 4310.03 3144.46 4304.63 c
f
n
3173.78 4347.8 m
3173.78 4342.4 3169.41 4338.03 3164.01 4338.03 c
3158.61 4338.03 3154.23 4342.4 3154.23 4347.8 c
3154.23 4353.2 3158.61 4357.58 3164.01 4357.58 c
3169.41 4357.58 3173.78 4353.2 3173.78 4347.8 c
f
n
3202.29 4390.16 m
3202.29 4384.76 3197.92 4380.39 3192.52 4380.39 c
3187.12 4380.39 3182.74 4384.76 3182.74 4390.16 c
3182.74 4395.56 3187.12 4399.93 3192.52 4399.93 c
3197.92 4399.93 3202.29 4395.56 3202.29 4390.16 c
f
n
3230.8 4433.33 m
3230.8 4427.93 3226.43 4423.56 3221.03 4423.56 c
3215.63 4423.56 3211.25 4427.93 3211.25 4433.33 c
3211.25 4438.73 3215.63 4443.11 3221.03 4443.11 c
3226.43 4443.11 3230.8 4438.73 3230.8 4433.33 c
f
n
3259.31 4476.51 m
3259.31 4471.11 3254.94 4466.73 3249.54 4466.73 c
3244.14 4466.73 3239.77 4471.11 3239.77 4476.51 c
3239.77 4481.91 3244.14 4486.28 3249.54 4486.28 c
3254.94 4486.28 3259.31 4481.91 3259.31 4476.51 c
f
n
3288.64 4519.68 m
3288.64 4514.28 3284.26 4509.91 3278.86 4509.91 c
3273.46 4509.91 3269.09 4514.28 3269.09 4519.68 c
3269.09 4525.08 3273.46 4529.46 3278.86 4529.46 c
3284.26 4529.46 3288.64 4525.08 3288.64 4519.68 c
f
n
3317.15 4562.85 m
3317.15 4557.45 3312.77 4553.08 3307.38 4553.08 c
3301.98 4553.08 3297.6 4557.45 3297.6 4562.85 c
3297.6 4568.25 3301.98 4572.63 3307.38 4572.63 c
3312.77 4572.63 3317.15 4568.25 3317.15 4562.85 c
f
n
2838.98 3764.55 m
2838.98 3759.16 2834.61 3754.78 2829.21 3754.78 c
2823.81 3754.78 2819.43 3759.16 2819.43 3764.55 c
2819.43 3769.95 2823.81 3774.33 2829.21 3774.33 c
2834.61 3774.33 2838.98 3769.95 2838.98 3764.55 c
f
n
2863.42 3810.17 m
2863.42 3804.77 2859.05 3800.39 2853.65 3800.39 c
2848.25 3800.39 2843.87 3804.77 2843.87 3810.17 c
2843.87 3815.57 2848.25 3819.95 2853.65 3819.95 c
2859.05 3819.95 2863.42 3815.57 2863.42 3810.17 c
f
n
2887.86 3855.79 m
2887.86 3850.39 2883.48 3846.01 2878.09 3846.01 c
2872.69 3846.01 2868.31 3850.39 2868.31 3855.79 c
2868.31 3861.19 2872.69 3865.56 2878.09 3865.56 c
2883.48 3865.56 2887.86 3861.19 2887.86 3855.79 c
f
n
2912.3 3901.41 m
2912.3 3896.01 2907.92 3891.63 2902.52 3891.63 c
2897.12 3891.63 2892.75 3896.01 2892.75 3901.41 c
2892.75 3906.8 2897.12 3911.18 2902.52 3911.18 c
2907.92 3911.18 2912.3 3906.8 2912.3 3901.41 c
f
n
2936.73 3947.02 m
2936.73 3941.62 2932.36 3937.25 2926.96 3937.25 c
2921.56 3937.25 2917.19 3941.62 2917.19 3947.02 c
2917.19 3952.42 2921.56 3956.8 2926.96 3956.8 c
2932.36 3956.8 2936.73 3952.42 2936.73 3947.02 c
f
n
2961.17 3992.64 m
2961.17 3987.24 2956.8 3982.86 2951.4 3982.86 c
2946.0 3982.86 2941.62 3987.24 2941.62 3992.64 c
2941.62 3998.04 2946.0 4002.41 2951.4 4002.41 c
2956.8 4002.41 2961.17 3998.04 2961.17 3992.64 c
f
n
2985.61 4038.26 m
2985.61 4032.86 2981.23 4028.48 2975.84 4028.48 c
2970.44 4028.48 2966.06 4032.86 2966.06 4038.26 c
2966.06 4043.66 2970.44 4048.03 2975.84 4048.03 c
2981.23 4048.03 2985.61 4043.66 2985.61 4038.26 c
f
n
3010.05 4083.88 m
3010.05 4078.48 3005.67 4074.1 3000.27 4074.1 c
2994.88 4074.1 2990.5 4078.48 2990.5 4083.88 c
2990.5 4089.27 2994.88 4093.65 3000.27 4093.65 c
3005.67 4093.65 3010.05 4089.27 3010.05 4083.88 c
f
n
3034.49 4129.49 m
3034.49 4124.09 3030.11 4119.71 3024.71 4119.71 c
3019.31 4119.71 3014.94 4124.09 3014.94 4129.49 c
3014.94 4134.89 3019.31 4139.27 3024.71 4139.27 c
3030.11 4139.27 3034.49 4134.89 3034.49 4129.49 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3082.55 4221.54 m
3082.55 4216.14 3078.17 4211.77 3072.77 4211.77 c
3067.38 4211.77 3063.0 4216.14 3063.0 4221.54 c
3063.0 4226.94 3067.38 4231.32 3072.77 4231.32 c
3078.17 4231.32 3082.55 4226.94 3082.55 4221.54 c
f
n
3106.98 4267.16 m
3106.98 4261.76 3102.61 4257.38 3097.21 4257.38 c
3091.81 4257.38 3087.43 4261.76 3087.43 4267.16 c
3087.43 4272.55 3091.81 4276.93 3097.21 4276.93 c
3102.61 4276.93 3106.98 4272.55 3106.98 4267.16 c
f
n
3131.42 4312.77 m
3131.42 4307.38 3127.05 4303.0 3121.65 4303.0 c
3116.25 4303.0 3111.87 4307.38 3111.87 4312.77 c
3111.87 4318.17 3116.25 4322.55 3121.65 4322.55 c
3127.05 4322.55 3131.42 4318.17 3131.42 4312.77 c
f
n
3155.86 4358.39 m
3155.86 4352.99 3151.48 4348.62 3146.09 4348.62 c
3140.69 4348.62 3136.31 4352.99 3136.31 4358.39 c
3136.31 4363.79 3140.69 4368.16 3146.09 4368.16 c
3151.48 4368.16 3155.86 4363.79 3155.86 4358.39 c
f
n
3180.3 4404.01 m
3180.3 4398.61 3175.92 4394.23 3170.52 4394.23 c
3165.12 4394.23 3160.75 4398.61 3160.75 4404.01 c
3160.75 4409.41 3165.12 4413.78 3170.52 4413.78 c
3175.92 4413.78 3180.3 4409.41 3180.3 4404.01 c
f
n
3204.74 4449.62 m
3204.74 4444.23 3200.36 4439.85 3194.96 4439.85 c
3189.56 4439.85 3185.19 4444.23 3185.19 4449.62 c
3185.19 4455.02 3189.56 4459.4 3194.96 4459.4 c
3200.36 4459.4 3204.74 4455.02 3204.74 4449.62 c
f
n
3229.18 4495.24 m
3229.18 4489.84 3224.8 4485.47 3219.4 4485.47 c
3214.0 4485.47 3209.62 4489.84 3209.62 4495.24 c
3209.62 4500.64 3214.0 4505.02 3219.4 4505.02 c
3224.8 4505.02 3229.18 4500.64 3229.18 4495.24 c
f
n
3253.61 4540.86 m
3253.61 4535.46 3249.23 4531.09 3243.84 4531.09 c
3238.44 4531.09 3234.06 4535.46 3234.06 4540.86 c
3234.06 4546.26 3238.44 4550.63 3243.84 4550.63 c
3249.23 4550.63 3253.61 4546.26 3253.61 4540.86 c
f
n
3278.05 4586.48 m
3278.05 4581.08 3273.67 4576.7 3268.27 4576.7 c
3262.88 4576.7 3258.5 4581.08 3258.5 4586.48 c
3258.5 4591.88 3262.88 4596.25 3268.27 4596.25 c
3273.67 4596.25 3278.05 4591.88 3278.05 4586.48 c
f
n
2900.08 3793.06 m
2900.08 3787.66 2895.7 3783.29 2890.3 3783.29 c
2884.91 3783.29 2880.53 3787.66 2880.53 3793.06 c
2880.53 3798.46 2884.91 3802.84 2890.3 3802.84 c
2895.7 3802.84 2900.08 3798.46 2900.08 3793.06 c
f
n
2919.63 3841.12 m
2919.63 3835.73 2915.25 3831.35 2909.86 3831.35 c
2904.46 3831.35 2900.08 3835.73 2900.08 3841.12 c
2900.08 3846.52 2904.46 3850.9 2909.86 3850.9 c
2915.25 3850.9 2919.63 3846.52 2919.63 3841.12 c
f
n
2940.0 3889.19 m
2940.0 3883.79 2935.62 3879.41 2930.22 3879.41 c
2924.82 3879.41 2920.45 3883.79 2920.45 3889.19 c
2920.45 3894.59 2924.82 3898.96 2930.22 3898.96 c
2935.62 3898.96 2940.0 3894.59 2940.0 3889.19 c
f
n
2959.54 3936.43 m
2959.54 3931.04 2955.17 3926.66 2949.77 3926.66 c
2944.37 3926.66 2940.0 3931.04 2940.0 3936.43 c
2940.0 3941.83 2944.37 3946.21 2949.77 3946.21 c
2955.17 3946.21 2959.54 3941.83 2959.54 3936.43 c
f
n
2979.09 3984.49 m
2979.09 3979.09 2974.72 3974.72 2969.32 3974.72 c
2963.92 3974.72 2959.54 3979.09 2959.54 3984.49 c
2959.54 3989.89 2963.92 3994.27 2969.32 3994.27 c
2974.72 3994.27 2979.09 3989.89 2979.09 3984.49 c
f
n
2999.46 4032.55 m
2999.46 4027.16 2995.08 4022.78 2989.68 4022.78 c
2984.29 4022.78 2979.91 4027.16 2979.91 4032.55 c
2979.91 4037.95 2984.29 4042.33 2989.68 4042.33 c
2995.08 4042.33 2999.46 4037.95 2999.46 4032.55 c
f
n
3019.01 4079.8 m
3019.01 4074.4 3014.63 4070.03 3009.23 4070.03 c
3003.84 4070.03 2999.46 4074.4 2999.46 4079.8 c
2999.46 4085.2 3003.84 4089.57 3009.23 4089.57 c
3014.63 4089.57 3019.01 4085.2 3019.01 4079.8 c
f
n
3038.56 4127.86 m
3038.56 4122.46 3034.18 4118.09 3028.79 4118.09 c
3023.39 4118.09 3019.01 4122.46 3019.01 4127.86 c
3019.01 4133.26 3023.39 4137.64 3028.79 4137.64 c
3034.18 4137.64 3038.56 4133.26 3038.56 4127.86 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3078.48 4223.17 m
3078.48 4217.77 3074.1 4213.39 3068.7 4213.39 c
3063.3 4213.39 3058.93 4217.77 3058.93 4223.17 c
3058.93 4228.57 3063.3 4232.95 3068.7 4232.95 c
3074.1 4232.95 3078.48 4228.57 3078.48 4223.17 c
f
n
3098.02 4271.23 m
3098.02 4265.83 3093.65 4261.45 3088.25 4261.45 c
3082.85 4261.45 3078.48 4265.83 3078.48 4271.23 c
3078.48 4276.63 3082.85 4281.0 3088.25 4281.0 c
3093.65 4281.0 3098.02 4276.63 3098.02 4271.23 c
f
n
3117.57 4318.48 m
3117.57 4313.08 3113.2 4308.7 3107.8 4308.7 c
3102.4 4308.7 3098.02 4313.08 3098.02 4318.48 c
3098.02 4323.88 3102.4 4328.25 3107.8 4328.25 c
3113.2 4328.25 3117.57 4323.88 3117.57 4318.48 c
f
n
3137.94 4366.54 m
3137.94 4361.14 3133.56 4356.76 3128.16 4356.76 c
3122.77 4356.76 3118.39 4361.14 3118.39 4366.54 c
3118.39 4371.93 3122.77 4376.31 3128.16 4376.31 c
3133.56 4376.31 3137.94 4371.93 3137.94 4366.54 c
f
n
3157.49 4414.6 m
3157.49 4409.2 3153.11 4404.82 3147.71 4404.82 c
3142.32 4404.82 3137.94 4409.2 3137.94 4414.6 c
3137.94 4420.0 3142.32 4424.37 3147.71 4424.37 c
3153.11 4424.37 3157.49 4420.0 3157.49 4414.6 c
f
n
3177.04 4461.84 m
3177.04 4456.45 3172.66 4452.07 3167.27 4452.07 c
3161.87 4452.07 3157.49 4456.45 3157.49 4461.84 c
3157.49 4467.24 3161.87 4471.62 3167.27 4471.62 c
3172.66 4471.62 3177.04 4467.24 3177.04 4461.84 c
f
n
3197.41 4509.91 m
3197.41 4504.51 3193.03 4500.13 3187.63 4500.13 c
3182.23 4500.13 3177.86 4504.51 3177.86 4509.91 c
3177.86 4515.3 3182.23 4519.68 3187.63 4519.68 c
3193.03 4519.68 3197.41 4515.3 3197.41 4509.91 c
f
n
3216.96 4557.96 m
3216.96 4552.57 3212.58 4548.19 3207.18 4548.19 c
3201.78 4548.19 3197.41 4552.57 3197.41 4557.96 c
3197.41 4563.36 3201.78 4567.74 3207.18 4567.74 c
3212.58 4567.74 3216.96 4563.36 3216.96 4557.96 c
f
n
2938.36 3779.21 m
2938.36 3773.82 2933.99 3769.44 2928.59 3769.44 c
2923.19 3769.44 2918.82 3773.82 2918.82 3779.21 c
2918.82 3784.61 2923.19 3788.99 2928.59 3788.99 c
2933.99 3788.99 2938.36 3784.61 2938.36 3779.21 c
f
n
2953.03 3828.91 m
2953.03 3823.51 2948.65 3819.13 2943.25 3819.13 c
2937.86 3819.13 2933.48 3823.51 2933.48 3828.91 c
2933.48 3834.3 2937.86 3838.68 2943.25 3838.68 c
2948.65 3838.68 2953.03 3834.3 2953.03 3828.91 c
f
n
2968.5 3878.6 m
2968.5 3873.2 2964.13 3868.82 2958.73 3868.82 c
2953.33 3868.82 2948.95 3873.2 2948.95 3878.6 c
2948.95 3884.0 2953.33 3888.37 2958.73 3888.37 c
2964.13 3888.37 2968.5 3884.0 2968.5 3878.6 c
f
n
2983.17 3928.29 m
2983.17 3922.89 2978.79 3918.51 2973.39 3918.51 c
2967.99 3918.51 2963.62 3922.89 2963.62 3928.29 c
2963.62 3933.68 2967.99 3938.06 2973.39 3938.06 c
2978.79 3938.06 2983.17 3933.68 2983.17 3928.29 c
f
n
2998.64 3977.16 m
2998.64 3971.76 2994.27 3967.39 2988.87 3967.39 c
2983.47 3967.39 2979.09 3971.76 2979.09 3977.16 c
2979.09 3982.56 2983.47 3986.94 2988.87 3986.94 c
2994.27 3986.94 2998.64 3982.56 2998.64 3977.16 c
f
n
3013.31 4026.85 m
3013.31 4021.45 3008.93 4017.08 3003.53 4017.08 c
2998.13 4017.08 2993.76 4021.45 2993.76 4026.85 c
2993.76 4032.25 2998.13 4036.63 3003.53 4036.63 c
3008.93 4036.63 3013.31 4032.25 3013.31 4026.85 c
f
n
3028.79 4076.54 m
3028.79 4071.14 3024.41 4066.77 3019.01 4066.77 c
3013.61 4066.77 3009.23 4071.14 3009.23 4076.54 c
3009.23 4081.94 3013.61 4086.32 3019.01 4086.32 c
3024.41 4086.32 3028.79 4081.94 3028.79 4076.54 c
f
n
3043.45 4126.23 m
3043.45 4120.83 3039.07 4116.46 3033.67 4116.46 c
3028.27 4116.46 3023.9 4120.83 3023.9 4126.23 c
3023.9 4131.63 3028.27 4136.01 3033.67 4136.01 c
3039.07 4136.01 3043.45 4131.63 3043.45 4126.23 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3073.59 4224.8 m
3073.59 4219.4 3069.21 4215.02 3063.81 4215.02 c
3058.41 4215.02 3054.04 4219.4 3054.04 4224.8 c
3054.04 4230.2 3058.41 4234.57 3063.81 4234.57 c
3069.21 4234.57 3073.59 4230.2 3073.59 4224.8 c
f
n
3088.25 4274.49 m
3088.25 4269.09 3083.88 4264.71 3078.48 4264.71 c
3073.08 4264.71 3068.7 4269.09 3068.7 4274.49 c
3068.7 4279.89 3073.08 4284.26 3078.48 4284.26 c
3083.88 4284.26 3088.25 4279.89 3088.25 4274.49 c
f
n
3103.73 4324.18 m
3103.73 4318.78 3099.35 4314.4 3093.95 4314.4 c
3088.55 4314.4 3084.18 4318.78 3084.18 4324.18 c
3084.18 4329.58 3088.55 4333.95 3093.95 4333.95 c
3099.35 4333.95 3103.73 4329.58 3103.73 4324.18 c
f
n
3118.39 4373.87 m
3118.39 4368.47 3114.01 4364.09 3108.61 4364.09 c
3103.21 4364.09 3098.84 4368.47 3098.84 4373.87 c
3098.84 4379.27 3103.21 4383.64 3108.61 4383.64 c
3114.01 4383.64 3118.39 4379.27 3118.39 4373.87 c
f
n
3133.87 4422.74 m
3133.87 4417.34 3129.49 4412.97 3124.09 4412.97 c
3118.7 4412.97 3114.32 4417.34 3114.32 4422.74 c
3114.32 4428.14 3118.7 4432.52 3124.09 4432.52 c
3129.49 4432.52 3133.87 4428.14 3133.87 4422.74 c
f
n
3148.53 4472.43 m
3148.53 4467.04 3144.15 4462.66 3138.75 4462.66 c
3133.36 4462.66 3128.98 4467.04 3128.98 4472.43 c
3128.98 4477.83 3133.36 4482.21 3138.75 4482.21 c
3144.15 4482.21 3148.53 4477.83 3148.53 4472.43 c
f
n
3164.01 4522.12 m
3164.01 4516.73 3159.63 4512.35 3154.23 4512.35 c
3148.83 4512.35 3144.46 4516.73 3144.46 4522.12 c
3144.46 4527.52 3148.83 4531.9 3154.23 4531.9 c
3159.63 4531.9 3164.01 4527.52 3164.01 4522.12 c
f
n
3178.67 4571.81 m
3178.67 4566.41 3174.29 4562.04 3168.89 4562.04 c
3163.5 4562.04 3159.12 4566.41 3159.12 4571.81 c
3159.12 4577.21 3163.5 4581.59 3168.89 4581.59 c
3174.29 4581.59 3178.67 4577.21 3178.67 4571.81 c
f
n
2977.46 3769.44 m
2977.46 3764.04 2973.09 3759.67 2967.69 3759.67 c
2962.29 3759.67 2957.91 3764.04 2957.91 3769.44 c
2957.91 3774.84 2962.29 3779.21 2967.69 3779.21 c
2973.09 3779.21 2977.46 3774.84 2977.46 3769.44 c
f
n
2988.05 3820.76 m
2988.05 3815.36 2983.68 3810.98 2978.28 3810.98 c
2972.88 3810.98 2968.5 3815.36 2968.5 3820.76 c
2968.5 3826.16 2972.88 3830.54 2978.28 3830.54 c
2983.68 3830.54 2988.05 3826.16 2988.05 3820.76 c
f
n
2997.83 3871.27 m
2997.83 3865.87 2993.45 3861.49 2988.05 3861.49 c
2982.66 3861.49 2978.28 3865.87 2978.28 3871.27 c
2978.28 3876.66 2982.66 3881.04 2988.05 3881.04 c
2993.45 3881.04 2997.83 3876.66 2997.83 3871.27 c
f
n
3008.42 3921.77 m
3008.42 3916.37 3004.04 3912.0 2998.64 3912.0 c
2993.25 3912.0 2988.87 3916.37 2988.87 3921.77 c
2988.87 3927.17 2993.25 3931.54 2998.64 3931.54 c
3004.04 3931.54 3008.42 3927.17 3008.42 3921.77 c
f
n
3018.2 3972.27 m
3018.2 3966.88 3013.82 3962.5 3008.42 3962.5 c
3003.02 3962.5 2998.64 3966.88 2998.64 3972.27 c
2998.64 3977.67 3003.02 3982.05 3008.42 3982.05 c
3013.82 3982.05 3018.2 3977.67 3018.2 3972.27 c
f
n
3027.97 4023.59 m
3027.97 4018.2 3023.59 4013.82 3018.2 4013.82 c
3012.8 4013.82 3008.42 4018.2 3008.42 4023.59 c
3008.42 4028.99 3012.8 4033.37 3018.2 4033.37 c
3023.59 4033.37 3027.97 4028.99 3027.97 4023.59 c
f
n
3038.56 4074.1 m
3038.56 4068.7 3034.18 4064.32 3028.79 4064.32 c
3023.39 4064.32 3019.01 4068.7 3019.01 4074.1 c
3019.01 4079.5 3023.39 4083.88 3028.79 4083.88 c
3034.18 4083.88 3038.56 4079.5 3038.56 4074.1 c
f
n
3048.34 4124.6 m
3048.34 4119.2 3043.96 4114.83 3038.56 4114.83 c
3033.16 4114.83 3028.79 4119.2 3028.79 4124.6 c
3028.79 4130.0 3033.16 4134.38 3038.56 4134.38 c
3043.96 4134.38 3048.34 4130.0 3048.34 4124.6 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3068.7 4226.43 m
3068.7 4221.03 3064.32 4216.65 3058.93 4216.65 c
3053.53 4216.65 3049.15 4221.03 3049.15 4226.43 c
3049.15 4231.82 3053.53 4236.2 3058.93 4236.2 c
3064.32 4236.2 3068.7 4231.82 3068.7 4226.43 c
f
n
3078.48 4276.93 m
3078.48 4271.54 3074.1 4267.16 3068.7 4267.16 c
3063.3 4267.16 3058.93 4271.54 3058.93 4276.93 c
3058.93 4282.33 3063.3 4286.71 3068.7 4286.71 c
3074.1 4286.71 3078.48 4282.33 3078.48 4276.93 c
f
n
3089.07 4327.44 m
3089.07 4322.04 3084.69 4317.66 3079.29 4317.66 c
3073.89 4317.66 3069.52 4322.04 3069.52 4327.44 c
3069.52 4332.84 3073.89 4337.21 3079.29 4337.21 c
3084.69 4337.21 3089.07 4332.84 3089.07 4327.44 c
f
n
3098.84 4378.75 m
3098.84 4373.36 3094.46 4368.98 3089.07 4368.98 c
3083.67 4368.98 3079.29 4373.36 3079.29 4378.75 c
3079.29 4384.15 3083.67 4388.53 3089.07 4388.53 c
3094.46 4388.53 3098.84 4384.15 3098.84 4378.75 c
f
n
3108.61 4429.26 m
3108.61 4423.86 3104.24 4419.48 3098.84 4419.48 c
3093.44 4419.48 3089.07 4423.86 3089.07 4429.26 c
3089.07 4434.66 3093.44 4439.04 3098.84 4439.04 c
3104.24 4439.04 3108.61 4434.66 3108.61 4429.26 c
f
n
3119.2 4479.77 m
3119.2 4474.37 3114.83 4469.99 3109.43 4469.99 c
3104.03 4469.99 3099.65 4474.37 3099.65 4479.77 c
3099.65 4485.16 3104.03 4489.54 3109.43 4489.54 c
3114.83 4489.54 3119.2 4485.16 3119.2 4479.77 c
f
n
3128.98 4530.27 m
3128.98 4524.87 3124.6 4520.5 3119.2 4520.5 c
3113.8 4520.5 3109.43 4524.87 3109.43 4530.27 c
3109.43 4535.67 3113.8 4540.04 3119.2 4540.04 c
3124.6 4540.04 3128.98 4535.67 3128.98 4530.27 c
f
n
3139.57 4581.59 m
3139.57 4576.19 3135.19 4571.81 3129.79 4571.81 c
3124.39 4571.81 3120.02 4576.19 3120.02 4581.59 c
3120.02 4586.99 3124.39 4591.36 3129.79 4591.36 c
3135.19 4591.36 3139.57 4586.99 3139.57 4581.59 c
f
n
3018.2 3763.74 m
3018.2 3758.34 3013.82 3753.96 3008.42 3753.96 c
3003.02 3753.96 2998.64 3758.34 2998.64 3763.74 c
2998.64 3769.14 3003.02 3773.52 3008.42 3773.52 c
3013.82 3773.52 3018.2 3769.14 3018.2 3763.74 c
f
n
3023.08 3815.06 m
3023.08 3809.66 3018.71 3805.28 3013.31 3805.28 c
3007.91 3805.28 3003.53 3809.66 3003.53 3815.06 c
3003.53 3820.46 3007.91 3824.83 3013.31 3824.83 c
3018.71 3824.83 3023.08 3820.46 3023.08 3815.06 c
f
n
3027.97 3866.38 m
3027.97 3860.98 3023.59 3856.6 3018.2 3856.6 c
3012.8 3856.6 3008.42 3860.98 3008.42 3866.38 c
3008.42 3871.78 3012.8 3876.15 3018.2 3876.15 c
3023.59 3876.15 3027.97 3871.78 3027.97 3866.38 c
f
n
3032.86 3918.51 m
3032.86 3913.11 3028.48 3908.73 3023.08 3908.73 c
3017.68 3908.73 3013.31 3913.11 3013.31 3918.51 c
3013.31 3923.91 3017.68 3928.29 3023.08 3928.29 c
3028.48 3928.29 3032.86 3923.91 3032.86 3918.51 c
f
n
3038.56 3969.83 m
3038.56 3964.43 3034.18 3960.05 3028.79 3960.05 c
3023.39 3960.05 3019.01 3964.43 3019.01 3969.83 c
3019.01 3975.23 3023.39 3979.61 3028.79 3979.61 c
3034.18 3979.61 3038.56 3975.23 3038.56 3969.83 c
f
n
3043.45 4021.15 m
3043.45 4015.75 3039.07 4011.38 3033.67 4011.38 c
3028.27 4011.38 3023.9 4015.75 3023.9 4021.15 c
3023.9 4026.55 3028.27 4030.93 3033.67 4030.93 c
3039.07 4030.93 3043.45 4026.55 3043.45 4021.15 c
f
n
3048.34 4072.47 m
3048.34 4067.07 3043.96 4062.7 3038.56 4062.7 c
3033.16 4062.7 3028.79 4067.07 3028.79 4072.47 c
3028.79 4077.87 3033.16 4082.25 3038.56 4082.25 c
3043.96 4082.25 3048.34 4077.87 3048.34 4072.47 c
f
n
3053.22 4123.79 m
3053.22 4118.39 3048.85 4114.01 3043.45 4114.01 c
3038.05 4114.01 3033.67 4118.39 3033.67 4123.79 c
3033.67 4129.19 3038.05 4133.56 3043.45 4133.56 c
3048.85 4133.56 3053.22 4129.19 3053.22 4123.79 c
f
n
3058.93 4175.92 m
3058.93 4170.52 3054.55 4166.15 3049.15 4166.15 c
3043.75 4166.15 3039.38 4170.52 3039.38 4175.92 c
3039.38 4181.32 3043.75 4185.7 3049.15 4185.7 c
3054.55 4185.7 3058.93 4181.32 3058.93 4175.92 c
f
n
3063.81 4227.24 m
3063.81 4221.84 3059.43 4217.46 3054.04 4217.46 c
3048.64 4217.46 3044.26 4221.84 3044.26 4227.24 c
3044.26 4232.64 3048.64 4237.02 3054.04 4237.02 c
3059.43 4237.02 3063.81 4232.64 3063.81 4227.24 c
f
n
3068.7 4278.56 m
3068.7 4273.16 3064.32 4268.79 3058.93 4268.79 c
3053.53 4268.79 3049.15 4273.16 3049.15 4278.56 c
3049.15 4283.96 3053.53 4288.34 3058.93 4288.34 c
3064.32 4288.34 3068.7 4283.96 3068.7 4278.56 c
f
n
3073.59 4329.88 m
3073.59 4324.48 3069.21 4320.11 3063.81 4320.11 c
3058.41 4320.11 3054.04 4324.48 3054.04 4329.88 c
3054.04 4335.28 3058.41 4339.66 3063.81 4339.66 c
3069.21 4339.66 3073.59 4335.28 3073.59 4329.88 c
f
n
3078.48 4381.2 m
3078.48 4375.8 3074.1 4371.43 3068.7 4371.43 c
3063.3 4371.43 3058.93 4375.8 3058.93 4381.2 c
3058.93 4386.6 3063.3 4390.97 3068.7 4390.97 c
3074.1 4390.97 3078.48 4386.6 3078.48 4381.2 c
f
n
3084.18 4432.52 m
3084.18 4427.12 3079.8 4422.74 3074.4 4422.74 c
3069.0 4422.74 3064.62 4427.12 3064.62 4432.52 c
3064.62 4437.92 3069.0 4442.29 3074.4 4442.29 c
3079.8 4442.29 3084.18 4437.92 3084.18 4432.52 c
f
n
3089.07 4484.65 m
3089.07 4479.25 3084.69 4474.88 3079.29 4474.88 c
3073.89 4474.88 3069.52 4479.25 3069.52 4484.65 c
3069.52 4490.05 3073.89 4494.43 3079.29 4494.43 c
3084.69 4494.43 3089.07 4490.05 3089.07 4484.65 c
f
n
3093.95 4535.97 m
3093.95 4530.57 3089.57 4526.2 3084.18 4526.2 c
3078.78 4526.2 3074.4 4530.57 3074.4 4535.97 c
3074.4 4541.37 3078.78 4545.75 3084.18 4545.75 c
3089.57 4545.75 3093.95 4541.37 3093.95 4535.97 c
f
n
3098.84 4587.29 m
3098.84 4581.89 3094.46 4577.52 3089.07 4577.52 c
3083.67 4577.52 3079.29 4581.89 3079.29 4587.29 c
3079.29 4592.69 3083.67 4597.07 3089.07 4597.07 c
3094.46 4597.07 3098.84 4592.69 3098.84 4587.29 c
f
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 1497.72 4059.77 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
[/DeviceCMYK] cs 0.0 0.0 0.0 1.0 sc
%ADOBeginSubsetFont: LKKAAA+CMSY10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /LKKAAA+CMSY10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-0 -960 943 750} def
end
systemdict begin
dup /Private
12 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705] def
/OtherBlues [-124 -119] def
/BlueScale 0.04379 def
/StdHW [40] def
/StdVW [85] def
/StemSnapH [40 55] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9C4A637> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 0 /minus/periodcentered/multiply/asteriskmath 12 /circledot 15 /bullet
20 /lessequal/greaterequal 24 /similar/approxequal 28 /lessmuch 32 /space
/arrowright/quotedbl/numbersign/dollar/percent/ampersand
/quotesingle/parenleft/parenright/asterisk/plus/comma
/hyphen/period/slash/zero/one/element
/three/four/five/six/seven/eight
/nine/colon/semicolon/less/equal/greater
/question/at/A/B/C/D
/E/F/G/H/I/J
/K/L/M/N/O/P
/Q/R/S/T/U/V
/W/X/Y/Z/bracketleft/backslash
/bracketright/asciicircum/underscore/grave/a/b
/c/d/e/braceleft/braceright/angbracketleft
/angbracketright/bar/bardbl/l/m/backslash
/o/radical/q/r/s/t
/u/v/w/x/dagger/daggerdbl
/braceleft/bar/braceright/asciitilde/bullet/Euro
/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger
/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright
/quotedblleft/quotedblright/bullet/endash/emdash/tilde
/trademark/scaron/guilsinglright/oe/bullet/zcaron
/Ydieresis/space/exclamdown/cent/sterling/currency
/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree
/plusminus/twosuperior/threesuperior/acute/mu/paragraph
/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter
/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex
/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave
/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex
/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute
/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae
/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave
/iacute/icircumflex/idieresis/eth/ntilde/ograve
/oacute/ocircumflex/otilde/odieresis/divide/oslash
/ugrave/uacute/ucircumflex/udieresis/yacute/thorn
/ydieresis
/N33 (LKKAAA+CMSY10) -1 TZ
251.545 364.327 m
%ADOBeginSubsetFont: LKKAAA+CMSY10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/LKKAAA+CMSY10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/minus <1C60D8A8C9B08A946182837629008DF7702985522C1BEB432204C2EF
9CAB07AB654895DD8804EF7ED97DE3E2616CBB2FB21BE3D9> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/LKKAAA+CMSY10 findfont /Encoding get
dup 0 /minus put
pop
end
+%ADOEndSubsetFont
+/N33 10.6637 Tf
(\000) show
259.874 364.327 m
%ADOBeginSubsetFont: UPIBAA+CMR10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/UPIBAA+CMR10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/zero <1C60D8A8C9B7A73D3B2D32309B1F5D5A32FC3614834F8BC61B6EB92C1
2484BD76628737DA40CF9DA1C97CCDAFB1D1B732C642F74A7C41B7D3AC6DAF8D
1E760692B6EBD2417EF1893A4AA0B1CF049D4C54D830CEC073A9153D451FAD42
892B0930AEE4FE18588336BFDAD60D8A4F4CFFED76F103FB9BBD8A33EFBA3F18
232B88D88FE54E17260FA3E2CC29DEC0CB72B88DC816FF5> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/UPIBAA+CMR10 findfont /Encoding get
dup 48 /zero put
pop
end
+%ADOEndSubsetFont
+/N41 10.6637 Tf
(0) show
%ADOBeginSubsetFont: ERNAAA+CMMI10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /ERNAAA+CMMI10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-13 -250 1044 750} def
end
systemdict begin
dup /Private
12 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705 431 442 453 466] def
/OtherBlues [-205 -194] def
/BlueScale 0.04379 def
/StdHW [31] def
/StdVW [72] def
/StemSnapH [25 31] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 1 /dotlessi/caron 11 /alpha/beta 14 /delta 21 /lambda
/mu 24 /xi/pi 27 /sigma 30 /phi/chi
/psi/exclam/epsilon/theta1/dollar/percent
/ampersand/phi1/parenleft/parenright/asterisk/plus
/comma/hyphen/period/slash/zero/one
/two/three/four/five/six/seven
/eight/nine/period/comma/less/slash
/greater/question/at/A/B/C
/D/E/F/G/H/I
/J/K/L/M/N/O
/P/Q/R/S/T/U
/V/W/X/Y/Z/bracketleft
/backslash/bracketright/asciicircum/underscore/grave/a
/b/c/d/e/f/g
/h/i/j/k/l/m
/n/o/p/q/r/s
/t/u/v/w/x/y
/z/braceleft/bar/braceright/asciitilde/bullet
/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft
/OE/bullet/Zcaron/bullet/bullet/quoteleft
/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
/tilde/trademark/scaron/guilsinglright/oe/bullet
/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright
/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
/degree/plusminus/twosuperior/threesuperior/acute/mu
/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright
/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute
/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave
/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring
/ae/ccedilla/egrave/eacute/ecircumflex/edieresis
/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex/udieresis/yacute
/thorn/ydieresis
/N21 (ERNAAA+CMMI10) -1 TZ
265.152 364.327 m
%ADOBeginSubsetFont: ERNAAA+CMMI10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/ERNAAA+CMMI10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/period <1C60D8A8C9B08A9570810981675968F2C907C696DFE9BE69433F613
9DF6C45B8165ACC43B6E0B309859F778ABCF0> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/ERNAAA+CMMI10 findfont /Encoding get
dup 58 /period put
pop
end
+%ADOEndSubsetFont
+/N21 10.6637 Tf
(:) show
268.084 364.327 m
/N41 10.6637 Tf
(500)
[34.0627 37.2561 5.27853 ] pdfxs
344.682 364.327 m
/N21 10.6637 Tf
(:) show
347.615 364.327 m
/N41 10.6637 Tf
(5) show
236.739 372.965 m
/N33 10.6637 Tf
(\000) show
245.067 372.965 m
/N41 10.6637 Tf
(0) show
250.346 372.965 m
/N21 10.6637 Tf
(:) show
253.278 372.965 m
/N41 10.6637 Tf
(5) show
255.018 413.958 m
(0) show
246.65 455.339 m
(0) show
251.929 455.339 m
/N21 10.6637 Tf
(:) show
254.861 455.339 m
/N41 10.6637 Tf
(5) show
Q
q
n
3703.6 4688.29 m
4835.88 4688.29 l
4835.88 3620.36 l
3703.6 3620.36 l
h
W
n
4.88755 w
1 j
[4.88755 39.1004 ] 0.0 d
3.25837 w
[] 0.0 d
4.88755 w
Q
q
n
3829.05 4649.19 m
4725.1 4649.19 l
4725.1 3701.01 l
3829.05 3701.01 l
h
W
n
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 2750.54 4059.77 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
Q
Q
Q
/LKKAAA+CMSY10 /Font _pdfUndefineResource
/N33 /Font _pdfUndefineResource
/UPIBAA+CMR10 /Font _pdfUndefineResource
/N41 /Font _pdfUndefineResource
/ERNAAA+CMMI10 /Font _pdfUndefineResource
/N21 /Font _pdfUndefineResource
[/EMC PDFMark5
PDFVars/TermAll get exec end end
%%PageTrailer
%%Trailer
%%EOF
\ No newline at end of file
diff --git a/doc/tutorial/images/modified_polar_grid.pdf b/doc/tutorial/images/modified_polar_grid.pdf
new file mode 100644
index 0000000..883c3a2
Binary files /dev/null and b/doc/tutorial/images/modified_polar_grid.pdf differ
diff --git a/doc/tutorial/images/nfft_times_flops.eps b/doc/tutorial/images/nfft_times_flops.eps
new file mode 100644
index 0000000..044d8fb
--- /dev/null
+++ b/doc/tutorial/images/nfft_times_flops.eps
@@ -0,0 +1,511 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc. Version 7.6.0.324 (R2008a). Operating System: Linux 2.6.22.12-0.1-default #1 SMP 2007/11/06 23:05:18 UTC i686.
+%%Title: ./nfft_times_flops.eps
+%%CreationDate: 10/10/2008 08:49:54
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 75 338 547 463
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 75 338 547 463
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 687 1783 5665 1498 MR c np
+85 dict begin %Colortable dictionary
+/c0 { 0.000000 0.000000 0.000000 sr} bdef
+/c1 { 1.000000 1.000000 1.000000 sr} bdef
+/c2 { 0.900000 0.000000 0.000000 sr} bdef
+/c3 { 0.000000 0.820000 0.000000 sr} bdef
+/c4 { 0.000000 0.000000 0.800000 sr} bdef
+/c5 { 0.910000 0.820000 0.320000 sr} bdef
+/c6 { 1.000000 0.260000 0.820000 sr} bdef
+/c7 { 0.000000 0.820000 0.820000 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6917 5186 PR
+6 w
+0 1340 5360 0 0 -1340 899 3172 4 MP
+PP
+-5360 0 0 1340 5360 0 0 -1340 899 3172 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 3172 mt 6259 3172 L
+ 899 1832 mt 6259 1832 L
+ 899 3172 mt 899 1832 L
+6259 3172 mt 6259 1832 L
+ 899 3172 mt 6259 3172 L
+ 899 3172 mt 899 1832 L
+1181 3172 mt 1181 3118 L
+1181 1832 mt 1181 1885 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 80 FMSR
+
+1159 3280 mt
+(4) s
+1745 3172 mt 1745 3118 L
+1745 1832 mt 1745 1885 L
+1723 3280 mt
+(6) s
+2309 3172 mt 2309 3118 L
+2309 1832 mt 2309 1885 L
+2287 3280 mt
+(8) s
+2873 3172 mt 2873 3118 L
+2873 1832 mt 2873 1885 L
+2829 3280 mt
+(10) s
+3437 3172 mt 3437 3118 L
+3437 1832 mt 3437 1885 L
+3393 3280 mt
+(12) s
+4002 3172 mt 4002 3118 L
+4002 1832 mt 4002 1885 L
+3958 3280 mt
+(14) s
+4566 3172 mt 4566 3118 L
+4566 1832 mt 4566 1885 L
+4522 3280 mt
+(16) s
+5130 3172 mt 5130 3118 L
+5130 1832 mt 5130 1885 L
+5086 3280 mt
+(18) s
+5694 3172 mt 5694 3118 L
+5694 1832 mt 5694 1885 L
+5650 3280 mt
+(20) s
+6259 3172 mt 6259 3118 L
+6259 1832 mt 6259 1885 L
+6215 3280 mt
+(22) s
+ 899 3172 mt 952 3172 L
+6259 3172 mt 6205 3172 L
+ 820 3201 mt
+(0) s
+ 899 2892 mt 952 2892 L
+6259 2892 mt 6205 2892 L
+ 731 2921 mt
+(500) s
+ 899 2613 mt 952 2613 L
+6259 2613 mt 6205 2613 L
+ 687 2642 mt
+(1000) s
+ 899 2334 mt 952 2334 L
+6259 2334 mt 6205 2334 L
+ 687 2363 mt
+(1500) s
+ 899 2055 mt 952 2055 L
+6259 2055 mt 6205 2055 L
+ 687 2084 mt
+(2000) s
+ 899 3172 mt 6259 3172 L
+ 899 1832 mt 6259 1832 L
+ 899 3172 mt 899 1832 L
+6259 3172 mt 6259 1832 L
+gs 899 1832 5361 1341 MR c np
+7.2 w
+283 28 282 -7 282 14 282 -6 282 25 282 37 282 -5 282 33
+282 164 283 374 282 134 282 95 282 26 282 -91 282 58 282 29
+282 -102 282 -213 282 -335 899 2656 20 MP stroke
+gr
+
+7.2 w
+ 20 20 899 2656 FO
+ 20 20 1181 2321 FO
+ 20 20 1463 2108 FO
+ 20 20 1745 2006 FO
+ 20 20 2027 2035 FO
+ 20 20 2309 2093 FO
+ 20 20 2591 2002 FO
+ 20 20 2873 2028 FO
+ 20 20 3155 2123 FO
+ 20 20 3437 2257 FO
+ 20 20 3720 2631 FO
+ 20 20 4002 2795 FO
+ 20 20 4284 2828 FO
+ 20 20 4566 2823 FO
+ 20 20 4848 2860 FO
+ 20 20 5130 2885 FO
+ 20 20 5412 2879 FO
+ 20 20 5694 2893 FO
+ 20 20 5976 2886 FO
+ 20 20 6259 2914 FO
+gs 899 1832 5361 1341 MR c np
+283 5 282 9 282 7 282 -9 282 4 282 11 282 3 282 -6
+282 12 283 23 282 22 282 144 282 -21 282 13 282 -14 282 -51
+282 -14 282 -46 282 -23 899 2907 20 MP stroke
+gr
+
+ 885 2893 mt 913 2921 L
+ 913 2893 mt 885 2921 L
+1167 2870 mt 1195 2898 L
+1195 2870 mt 1167 2898 L
+1449 2824 mt 1477 2852 L
+1477 2824 mt 1449 2852 L
+1731 2810 mt 1759 2838 L
+1759 2810 mt 1731 2838 L
+2013 2759 mt 2041 2787 L
+2041 2759 mt 2013 2787 L
+2295 2745 mt 2323 2773 L
+2323 2745 mt 2295 2773 L
+2577 2758 mt 2605 2786 L
+2605 2758 mt 2577 2786 L
+2859 2737 mt 2887 2765 L
+2887 2737 mt 2859 2765 L
+3141 2881 mt 3169 2909 L
+3169 2881 mt 3141 2909 L
+3423 2903 mt 3451 2931 L
+3451 2903 mt 3423 2931 L
+3706 2926 mt 3734 2954 L
+3734 2926 mt 3706 2954 L
+3988 2938 mt 4016 2966 L
+4016 2938 mt 3988 2966 L
+4270 2932 mt 4298 2960 L
+4298 2932 mt 4270 2960 L
+4552 2935 mt 4580 2963 L
+4580 2935 mt 4552 2963 L
+4834 2946 mt 4862 2974 L
+4862 2946 mt 4834 2974 L
+5116 2950 mt 5144 2978 L
+5144 2950 mt 5116 2978 L
+5398 2941 mt 5426 2969 L
+5426 2941 mt 5398 2969 L
+5680 2948 mt 5708 2976 L
+5708 2948 mt 5680 2976 L
+5962 2957 mt 5990 2985 L
+5990 2957 mt 5962 2985 L
+6245 2962 mt 6273 2990 L
+6273 2962 mt 6245 2990 L
+gs 899 1832 5361 1341 MR c np
+283 6 282 10 282 4 282 -10 282 -1 282 14 282 2 282 0
+282 3 283 23 282 52 282 118 282 0 282 -10 282 -27 282 -22
+282 -13 282 -56 282 -41 899 2924 20 MP stroke
+gr
+
+ 879 2924 mt 919 2924 L
+ 899 2904 mt 899 2944 L
+1161 2883 mt 1201 2883 L
+1181 2863 mt 1181 2903 L
+1443 2827 mt 1483 2827 L
+1463 2807 mt 1463 2847 L
+1725 2814 mt 1765 2814 L
+1745 2794 mt 1745 2834 L
+2007 2792 mt 2047 2792 L
+2027 2772 mt 2027 2812 L
+2289 2765 mt 2329 2765 L
+2309 2745 mt 2309 2785 L
+2571 2755 mt 2611 2755 L
+2591 2735 mt 2591 2775 L
+2853 2755 mt 2893 2755 L
+2873 2735 mt 2873 2775 L
+3135 2873 mt 3175 2873 L
+3155 2853 mt 3155 2893 L
+3417 2925 mt 3457 2925 L
+3437 2905 mt 3437 2945 L
+3700 2948 mt 3740 2948 L
+3720 2928 mt 3720 2968 L
+3982 2951 mt 4022 2951 L
+4002 2931 mt 4002 2971 L
+4264 2951 mt 4304 2951 L
+4284 2931 mt 4284 2971 L
+4546 2953 mt 4586 2953 L
+4566 2933 mt 4566 2973 L
+4828 2967 mt 4868 2967 L
+4848 2947 mt 4848 2987 L
+5110 2966 mt 5150 2966 L
+5130 2946 mt 5130 2986 L
+5392 2956 mt 5432 2956 L
+5412 2936 mt 5412 2976 L
+5674 2960 mt 5714 2960 L
+5694 2940 mt 5694 2980 L
+5956 2970 mt 5996 2970 L
+5976 2950 mt 5976 2990 L
+6239 2976 mt 6279 2976 L
+6259 2956 mt 6259 2996 L
+gs 899 1832 5361 1341 MR c np
+DO
+565 -7 564 -26 564 -18 564 243 565 767 564 156 564 0 564 -108
+1745 1980 9 MP stroke
+SO
+gr
+
+ 20 20 1745 1980 FO
+ 20 20 2309 1872 FO
+ 20 20 2873 1872 FO
+ 20 20 3437 2028 FO
+ 20 20 4002 2795 FO
+ 20 20 4566 3038 FO
+ 20 20 5130 3020 FO
+ 20 20 5694 2994 FO
+ 20 20 6259 2987 FO
+gs 899 1832 5361 1341 MR c np
+DO
+565 15 564 9 564 -11 564 0 565 69 564 53 564 31 564 -25
+1745 2896 9 MP stroke
+SO
+gr
+
+1731 2882 mt 1759 2910 L
+1759 2882 mt 1731 2910 L
+2295 2857 mt 2323 2885 L
+2323 2857 mt 2295 2885 L
+2859 2888 mt 2887 2916 L
+2887 2888 mt 2859 2916 L
+3423 2941 mt 3451 2969 L
+3451 2941 mt 3423 2969 L
+3988 3010 mt 4016 3038 L
+4016 3010 mt 3988 3038 L
+4552 3010 mt 4580 3038 L
+4580 3010 mt 4552 3038 L
+5116 2999 mt 5144 3027 L
+5144 2999 mt 5116 3027 L
+5680 3008 mt 5708 3036 L
+5708 3008 mt 5680 3036 L
+6245 3023 mt 6273 3051 L
+6273 3023 mt 6245 3051 L
+gs 899 1832 5361 1341 MR c np
+DO
+565 27 564 -4 564 -17 564 -5 565 93 564 107 564 6 564 -39
+1745 2880 9 MP stroke
+SO
+gr
+
+1725 2880 mt 1765 2880 L
+1745 2860 mt 1745 2900 L
+2289 2841 mt 2329 2841 L
+2309 2821 mt 2309 2861 L
+2853 2847 mt 2893 2847 L
+2873 2827 mt 2873 2867 L
+3417 2954 mt 3457 2954 L
+3437 2934 mt 3437 2974 L
+3982 3047 mt 4022 3047 L
+4002 3027 mt 4002 3067 L
+4546 3042 mt 4586 3042 L
+4566 3022 mt 4566 3062 L
+5110 3025 mt 5150 3025 L
+5130 3005 mt 5130 3045 L
+5674 3021 mt 5714 3021 L
+5694 3001 mt 5694 3041 L
+6239 3048 mt 6279 3048 L
+6259 3028 mt 6259 3068 L
+gs 899 1832 5361 1341 MR c np
+DA
+846 207 846 55 847 855 846 39 2591 1885 5 MP stroke
+SO
+gr
+
+ 20 20 2591 1885 FO
+ 20 20 3437 1924 FO
+ 20 20 4284 2779 FO
+ 20 20 5130 2834 FO
+ 20 20 5976 3041 FO
+gs 899 1832 5361 1341 MR c np
+DA
+846 86 846 30 847 21 846 29 2591 2951 5 MP stroke
+SO
+gr
+
+2577 2937 mt 2605 2965 L
+2605 2937 mt 2577 2965 L
+3423 2966 mt 3451 2994 L
+3451 2966 mt 3423 2994 L
+4270 2987 mt 4298 3015 L
+4298 2987 mt 4270 3015 L
+5116 3017 mt 5144 3045 L
+5144 3017 mt 5116 3045 L
+5962 3103 mt 5990 3131 L
+5990 3103 mt 5962 3131 L
+gs 899 1832 5361 1341 MR c np
+DA
+846 20 846 33 847 31 846 75 2591 2917 5 MP stroke
+SO
+gr
+
+2571 2917 mt 2611 2917 L
+2591 2897 mt 2591 2937 L
+3417 2992 mt 3457 2992 L
+3437 2972 mt 3437 3012 L
+4264 3023 mt 4304 3023 L
+4284 3003 mt 4284 3043 L
+5110 3056 mt 5150 3056 L
+5130 3036 mt 5130 3076 L
+5956 3076 mt 5996 3076 L
+5976 3056 mt 5976 3096 L
+gs 899 1832 5361 1341 MR c np
+6 w
+gr
+
+6 w
+
+end %%Color Dict
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/nfft_times_flops.pdf b/doc/tutorial/images/nfft_times_flops.pdf
new file mode 100644
index 0000000..c8b92a7
Binary files /dev/null and b/doc/tutorial/images/nfft_times_flops.pdf differ
diff --git a/doc/tutorial/images/nfft_times_frodo.txt b/doc/tutorial/images/nfft_times_frodo.txt
new file mode 100644
index 0000000..9e25808
--- /dev/null
+++ b/doc/tutorial/images/nfft_times_frodo.txt
@@ -0,0 +1,39 @@
+\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\
+\hline \hline \multicolumn{5}{|c|}{$d=1$} \\ \hline
+\verb+3+& \verb+1.3e-07+ & \verb+8.6e-06+ & \verb+1.3e-06+ & \verb+(10.0)+\\
+\verb+4+& \verb+2.1e-07+ & \verb+3.5e-05+ & \verb+2.7e-06+ & \verb+(12.9)+\\
+\verb+5+& \verb+4.2e-07+ & \verb+1.4e-04+ & \verb+5.2e-06+ & \verb+(12.3)+\\
+\verb+6+& \verb+9.2e-07+ & \verb+5.7e-04+ & \verb+1.1e-05+ & \verb+(11.5)+\\
+\verb+7+& \verb+2.2e-06+ & \verb+2.3e-03+ & \verb+2.1e-05+ & \verb+(9.5)+\\
+\verb+8+& \verb+5.3e-06+ & \verb+9.2e-03+ & \verb+4.4e-05+ & \verb+(8.3)+\\
+\verb+9+& \verb+1.1e-05+ & \verb+3.7e-02+ & \verb+9.8e-05+ & \verb+(8.8)+\\
+\verb+10+& \verb+2.5e-05+ & \verb+1.5e-01+ & \verb+2.0e-04+ & \verb+(8.1)+\\
+\verb+11+& \verb+6.0e-05+ & \verb+6.0e-01+ & \verb+6.5e-04+ & \verb+(10.8)+\\
+\verb+12+& \verb+1.5e-04+ & \verb+2.4e+00+ & \verb+1.5e-03+ & \verb+(9.8)+\\
+\verb+13+& \verb+5.5e-04+ & \verb+9.6e+00+ & \verb+3.5e-03+ & \verb+(6.4)+\\
+\verb+14+& \verb+1.7e-03+ & \verb+4.0e+01+ & \verb+7.8e-03+ & \verb+(4.6)+\\
+\verb+15+& \verb+4.0e-03+ & \verb+1.6e+02+ & \verb+1.6e-02+ & \verb+(4.1)+\\
+\verb+16+& \verb+8.4e-03+ & \verb+*+ & \verb+3.4e-02+ & \verb+(4.1)+\\
+\verb+17+& \verb+2.0e-02+ & \verb+*+ & \verb+7.5e-02+ & \verb+(3.8)+\\
+\verb+18+& \verb+4.6e-02+ & \verb+*+ & \verb+1.6e-01+ & \verb+(3.4)+\\
+\verb+19+& \verb+9.5e-02+ & \verb+*+ & \verb+3.2e-01+ & \verb+(3.4)+\\
+\verb+20+& \verb+2.1e-01+ & \verb+*+ & \verb+6.9e-01+ & \verb+(3.3)+\\
+\verb+21+& \verb+4.3e-01+ & \verb+*+ & \verb+1.5e+00+ & \verb+(3.5)+\\
+\verb+22+& \verb+1.0e+00+ & \verb+*+ & \verb+3.2e+00+ & \verb+(3.1)+\\
+\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\
+\hline \hline \multicolumn{5}{|c|}{$d=2$} \\ \hline
+\verb+6+& \verb+9.0e-07+ & \verb+6.0e-04+ & \verb+6.3e-05+ & \verb+(70.4)+\\
+\verb+8+& \verb+4.4e-06+ & \verb+9.5e-03+ & \verb+2.5e-04+ & \verb+(58.0)+\\
+\verb+10+& \verb+2.2e-05+ & \verb+1.5e-01+ & \verb+1.2e-03+ & \verb+(55.0)+\\
+\verb+12+& \verb+1.2e-04+ & \verb+2.4e+00+ & \verb+6.4e-03+ & \verb+(52.5)+\\
+\verb+14+& \verb+1.7e-03+ & \verb+4.0e+01+ & \verb+4.0e-02+ & \verb+(23.4)+\\
+\verb+16+& \verb+2.2e-02+ & \verb+*+ & \verb+1.7e-01+ & \verb+(7.8)+\\
+\verb+18+& \verb+8.7e-02+ & \verb+*+ & \verb+6.7e-01+ & \verb+(7.7)+\\
+\verb+20+& \verb+3.3e-01+ & \verb+*+ & \verb+3.0e+00+ & \verb+(9.1)+\\
+\verb+22+& \verb+1.4e+00+ & \verb+*+ & \verb+1.4e+01+ & \verb+(10.1)+\\
+\hline \hline \multicolumn{5}{|c|}{$d=3$} \\ \hline
+\verb+9+& \verb+1.0e-05+ & \verb+3.8e-02+ & \verb+4.4e-03+ & \verb+(423.4)+\\
+\verb+12+& \verb+1.1e-04+ & \verb+2.4e+00+ & \verb+4.2e-02+ & \verb+(369.1)+\\
+\verb+15+& \verb+3.5e-03+ & \verb+1.6e+02+ & \verb+3.9e-01+ & \verb+(110.8)+\\
+\verb+18+& \verb+3.9e-02+ & \verb+*+ & \verb+3.9e+00+ & \verb+(99.3)+\\
+\verb+21+& \verb+9.4e-01+ & \verb+*+ & \verb+8.4e+01+ & \verb+(89.0)+\\
diff --git a/doc/tutorial/images/nfft_times_frodo_flops.m b/doc/tutorial/images/nfft_times_frodo_flops.m
new file mode 100644
index 0000000..eb40343
--- /dev/null
+++ b/doc/tutorial/images/nfft_times_frodo_flops.m
@@ -0,0 +1,36 @@
+3 1.3e-07 8.6e-06 1.3e-06 10.0
+4 2.1e-07 3.5e-05 2.7e-06 12.9
+5 4.2e-07 1.4e-04 5.2e-06 12.3
+6 9.2e-07 5.7e-04 1.1e-05 11.5
+7 2.2e-06 2.3e-03 2.1e-05 9.5
+8 5.3e-06 9.2e-03 4.4e-05 8.3
+9 1.1e-05 3.7e-02 9.8e-05 8.8
+10 2.5e-05 1.5e-01 2.0e-04 8.1
+11 6.0e-05 6.0e-01 6.5e-04 10.8
+12 1.5e-04 2.4e+00 1.5e-03 9.8
+13 5.5e-04 9.6e+00 3.5e-03 6.4
+14 1.7e-03 4.0e+01 7.8e-03 4.6
+15 4.0e-03 1.6e+02 1.6e-02 4.1
+16 8.4e-03 nan 3.4e-02 4.1
+17 2.0e-02 nan 7.5e-02 3.8
+18 4.6e-02 nan 1.6e-01 3.4
+19 9.5e-02 nan 3.2e-01 3.4
+20 2.1e-01 nan 6.9e-01 3.3
+21 4.3e-01 nan 1.5e+00 3.5
+22 1.0e+00 nan 3.2e+00 3.1
+
+6 9.0e-07 6.0e-04 6.3e-05 70.4
+8 4.4e-06 9.5e-03 2.5e-04 58.0
+10 2.2e-05 1.5e-01 1.2e-03 55.0
+12 1.2e-04 2.4e+00 6.4e-03 52.5
+14 1.7e-03 4.0e+01 4.0e-02 23.4
+16 2.2e-02 nan 1.7e-01 7.8
+18 8.7e-02 nan 6.7e-01 7.7
+20 3.3e-01 nan 3.0e+00 9.1
+22 1.4e+00 nan 1.4e+01 10.1
+
+9 1.0e-05 3.8e-02 4.4e-03 423.4
+12 1.1e-04 2.4e+00 4.2e-02 369.1
+15 3.5e-03 1.6e+02 3.9e-01 110.8
+18 3.9e-02 nan 3.9e+00 99.3
+21 9.4e-01 nan 8.4e+01 89.0
diff --git a/doc/tutorial/images/nfft_times_frodo_m_2.txt b/doc/tutorial/images/nfft_times_frodo_m_2.txt
new file mode 100644
index 0000000..c2a226b
--- /dev/null
+++ b/doc/tutorial/images/nfft_times_frodo_m_2.txt
@@ -0,0 +1,39 @@
+\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\
+\hline \hline \multicolumn{5}{|c|}{$d=1$} \\ \hline
+\verb+3+& \verb+1.3e-07+ & \verb+8.6e-06+ & \verb+1.1e-06+ & \verb+(8.6)+\\
+\verb+4+& \verb+2.1e-07+ & \verb+3.5e-05+ & \verb+2.2e-06+ & \verb+(10.5)+\\
+\verb+5+& \verb+3.7e-07+ & \verb+1.4e-04+ & \verb+4.2e-06+ & \verb+(11.4)+\\
+\verb+6+& \verb+9.4e-07+ & \verb+5.7e-04+ & \verb+9.1e-06+ & \verb+(9.8)+\\
+\verb+7+& \verb+2.1e-06+ & \verb+2.3e-03+ & \verb+1.9e-05+ & \verb+(9.0)+\\
+\verb+8+& \verb+5.1e-06+ & \verb+9.2e-03+ & \verb+3.9e-05+ & \verb+(7.7)+\\
+\verb+9+& \verb+1.1e-05+ & \verb+3.7e-02+ & \verb+8.3e-05+ & \verb+(7.4)+\\
+\verb+10+& \verb+2.5e-05+ & \verb+1.5e-01+ & \verb+1.8e-04+ & \verb+(7.1)+\\
+\verb+11+& \verb+6.1e-05+ & \verb+6.0e-01+ & \verb+5.4e-04+ & \verb+(8.9)+\\
+\verb+12+& \verb+1.6e-04+ & \verb+2.4e+00+ & \verb+1.4e-03+ & \verb+(8.9)+\\
+\verb+13+& \verb+5.8e-04+ & \verb+9.6e+00+ & \verb+3.3e-03+ & \verb+(5.6)+\\
+\verb+14+& \verb+1.6e-03+ & \verb+3.9e+01+ & \verb+7.1e-03+ & \verb+(4.3)+\\
+\verb+15+& \verb+4.0e-03+ & \verb+1.6e+02+ & \verb+1.5e-02+ & \verb+(3.7)+\\
+\verb+16+& \verb+8.5e-03+ & \verb+*+ & \verb+3.2e-02+ & \verb+(3.8)+\\
+\verb+17+& \verb+2.0e-02+ & \verb+*+ & \verb+7.2e-02+ & \verb+(3.6)+\\
+\verb+18+& \verb+4.6e-02+ & \verb+*+ & \verb+1.5e-01+ & \verb+(3.2)+\\
+\verb+19+& \verb+9.5e-02+ & \verb+*+ & \verb+3.0e-01+ & \verb+(3.1)+\\
+\verb+20+& \verb+2.0e-01+ & \verb+*+ & \verb+6.4e-01+ & \verb+(3.3)+\\
+\verb+21+& \verb+4.5e-01+ & \verb+*+ & \verb+1.4e+00+ & \verb+(3.2)+\\
+\verb+22+& \verb+1.0e+00+ & \verb+*+ & \verb+3.0e+00+ & \verb+(2.9)+\\
+\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\
+\hline \hline \multicolumn{5}{|c|}{$d=2$} \\ \hline
+\verb+6+& \verb+9.6e-07+ & \verb+6.0e-04+ & \verb+3.2e-05+ & \verb+(33.2)+\\
+\verb+8+& \verb+4.5e-06+ & \verb+9.5e-03+ & \verb+1.3e-04+ & \verb+(29.0)+\\
+\verb+10+& \verb+2.2e-05+ & \verb+1.5e-01+ & \verb+6.0e-04+ & \verb+(27.4)+\\
+\verb+12+& \verb+1.2e-04+ & \verb+2.4e+00+ & \verb+4.0e-03+ & \verb+(32.2)+\\
+\verb+14+& \verb+1.7e-03+ & \verb+4.0e+01+ & \verb+3.1e-02+ & \verb+(18.1)+\\
+\verb+16+& \verb+2.1e-02+ & \verb+*+ & \verb+1.3e-01+ & \verb+(6.1)+\\
+\verb+18+& \verb+8.5e-02+ & \verb+*+ & \verb+5.0e-01+ & \verb+(5.8)+\\
+\verb+20+& \verb+3.2e-01+ & \verb+*+ & \verb+2.1e+00+ & \verb+(6.4)+\\
+\verb+22+& \verb+1.4e+00+ & \verb+*+ & \verb+1.1e+01+ & \verb+(7.9)+\\
+\hline \hline \multicolumn{5}{|c|}{$d=3$} \\ \hline
+\verb+9+& \verb+1.0e-05+ & \verb+3.9e-02+ & \verb+1.1e-03+ & \verb+(109.5)+\\
+\verb+12+& \verb+1.2e-04+ & \verb+2.4e+00+ & \verb+1.4e-02+ & \verb+(115.8)+\\
+\verb+15+& \verb+3.5e-03+ & \verb+1.6e+02+ & \verb+1.5e-01+ & \verb+(41.8)+\\
+\verb+18+& \verb+3.9e-02+ & \verb+*+ & \verb+1.7e+00+ & \verb+(42.4)+\\
+\verb+21+& \verb+9.0e-01+ & \verb+*+ & \verb+1.8e+01+ & \verb+(19.6)+\\
diff --git a/doc/tutorial/images/nfft_times_frodo_m_2_flops.m b/doc/tutorial/images/nfft_times_frodo_m_2_flops.m
new file mode 100644
index 0000000..62501da
--- /dev/null
+++ b/doc/tutorial/images/nfft_times_frodo_m_2_flops.m
@@ -0,0 +1,36 @@
+3 1.3e-07 8.6e-06 1.1e-06 8.6
+4 2.1e-07 3.5e-05 2.2e-06 10.5
+5 3.7e-07 1.4e-04 4.2e-06 11.4
+6 9.4e-07 5.7e-04 9.1e-06 9.8
+7 2.1e-06 2.3e-03 1.9e-05 9.0
+8 5.1e-06 9.2e-03 3.9e-05 7.7
+9 1.1e-05 3.7e-02 8.3e-05 7.4
+10 2.5e-05 1.5e-01 1.8e-04 7.1
+11 6.1e-05 6.0e-01 5.4e-04 8.9
+12 1.6e-04 2.4e+00 1.4e-03 8.9
+13 5.8e-04 9.6e+00 3.3e-03 5.6
+14 1.6e-03 3.9e+01 7.1e-03 4.3
+15 4.0e-03 1.6e+02 1.5e-02 3.7
+16 8.5e-03 nan 3.2e-02 3.8
+17 2.0e-02 nan 7.2e-02 3.6
+18 4.6e-02 nan 1.5e-01 3.2
+19 9.5e-02 nan 3.0e-01 3.1
+20 2.0e-01 nan 6.4e-01 3.3
+21 4.5e-01 nan 1.4e+00 3.2
+22 1.0e+00 nan 3.0e+00 2.9
+
+6 9.6e-07 6.0e-04 3.2e-05 33.2
+8 4.5e-06 9.5e-03 1.3e-04 29.0
+10 2.2e-05 1.5e-01 6.0e-04 27.4
+12 1.2e-04 2.4e+00 4.0e-03 32.2
+14 1.7e-03 4.0e+01 3.1e-02 18.1
+16 2.1e-02 nan 1.3e-01 6.1
+18 8.5e-02 nan 5.0e-01 5.8
+20 3.2e-01 nan 2.1e+00 6.4
+22 1.4e+00 nan 1.1e+01 7.9
+
+9 1.0e-05 3.9e-02 1.1e-03 109.5
+12 1.2e-04 2.4e+00 1.4e-02 115.8
+15 3.5e-03 1.6e+02 1.5e-01 41.8
+18 3.9e-02 nan 1.7e+00 42.4
+21 9.0e-01 nan 1.8e+01 19.6
diff --git a/doc/tutorial/images/nfft_times_frodo_show.m b/doc/tutorial/images/nfft_times_frodo_show.m
new file mode 100644
index 0000000..aaf8d1f
--- /dev/null
+++ b/doc/tutorial/images/nfft_times_frodo_show.m
@@ -0,0 +1,47 @@
+load nfft_times_frodo_m_2_flops.m
+load nfft_times_frodo_flops.m
+
+A=nfft_times_frodo_flops;
+B=nfft_times_frodo_m_2_flops;
+n1=A(1:20,1);
+r1=A(1:20,2);
+s1=A(1:20,4);
+t1=B(1:20,4);
+
+n2=A(21:29,1);
+r2=A(21:29,2);
+s2=A(21:29,4);
+t2=B(21:29,4);
+
+n3=A(30:34,1);
+r3=A(30:34,2);
+s3=A(30:34,4);
+t3=B(30:34,4);
+
+h=plot(n1,5*2.^n1.*n1 ./ r1*10^-6, 'k-', ...
+ n1,5*2.^n1.*n1 ./ r1*10^-6, 'ko', ...
+ n1,(2.^n1 + 5*2.^(n1+1).*(n1+1) + (4*9+0)*2.^n1) ./ s1*10^-6, 'k-', ...
+ n1,(2.^n1 + 5*2.^(n1+1).*(n1+1) + (4*9+0)*2.^n1) ./ s1*10^-6, 'kx', ...
+ n1,(2.^n1 + 5*2.^(n1+1).*(n1+1) + (4*5+0)*2.^n1) ./ t1*10^-6, 'k-', ...
+ n1,(2.^n1 + 5*2.^(n1+1).*(n1+1) + (4*5+0)*2.^n1) ./ t1*10^-6, 'k+', ...
+ n2,5*2.^n2.*n2 ./ r2*10^-6, 'k:', ...
+ n2,5*2.^n2.*n2 ./ r2*10^-6, 'ko', ...
+ n2,(2.^n2 + 5*2.^(n2+2).*(n2+2) + (4*9^2+0)*2.^n2) ./ s2*10^-6, 'k:', ...
+ n2,(2.^n2 + 5*2.^(n2+2).*(n2+2) + (4*9^2+0)*2.^n2) ./ s2*10^-6, 'kx', ...
+ n2,(2.^n2 + 5*2.^(n2+2).*(n2+2) + (4*5^2+0)*2.^n2) ./ t2*10^-6, 'k:', ...
+ n2,(2.^n2 + 5*2.^(n2+2).*(n2+2) + (4*5^2+0)*2.^n2) ./ t2*10^-6, 'k+', ...
+ n3,5*2.^n3.*n3 ./ r3*10^-6, 'k--', ...
+ n3,5*2.^n3.*n3 ./ r3*10^-6, 'ko', ...
+ n3,(2.^n3 + 5*2.^(n3+3).*(n3+3) + (4*9^3+0)*2.^n3) ./ s3*10^-6, 'k--', ...
+ n3,(2.^n3 + 5*2.^(n3+3).*(n3+3) + (4*9^3+0)*2.^n3) ./ s3*10^-6, 'kx', ...
+ n3,(2.^n3 + 5*2.^(n3+3).*(n3+3) + (4*5^3+0)*2.^n3) ./ t3*10^-6, 'k--', ...
+ n3,(2.^n3 + 5*2.^(n3+3).*(n3+3) + (4*5^3+0)*2.^n3) ./ t3*10^-6, 'k+');
+
+axis([3,22,0,2400]);
+set(gcf,'Position',[100,100,1000,333]);
+set(h,'LineWidth',1.8/3); set(h,'Markersize',10/3); set(gca,'FontSize',20/3);
+set(gca,'DataAspectRatio',[0.25*9.5 1200 1]);
+%set(gca,'XTickLabel',[-n,-n+N/2,-N/2,0,N/2-1,n-N/2-1,n]);
+%set(gca,'YTick',[10^-15,10^-10,10^-5,1]);
+print nfft_times_flops.eps -deps
+!epstopdf nfft_times_flops.eps
diff --git a/doc/tutorial/images/polar_grid.eps b/doc/tutorial/images/polar_grid.eps
new file mode 100644
index 0000000..1193200
--- /dev/null
+++ b/doc/tutorial/images/polar_grid.eps
@@ -0,0 +1,87 @@
+%!PS-Adobe-3.0 EPSF-3.0
%%Title: (paper.dvi)
%%Version: 1 3
%%Creator: Adobe Acrobat 7.0
%%CreationDate: 20/10/06 15:23
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%ADO_ContainsXMP: MainFirst
%%BoundingBox: 112 364 227 463
%%HiResBoundingBox: 112.247 364.03 227.117 462.543
%%Pages: 0
%%DocumentProcessColors: Cyan Magenta Yellow Black
%%DocumentSuppliedResources:
%%+ procset (Adobe Acrobat - PDF operators) 1.2 0
%%+ procset (Adobe Acrobat - type operators) 1.2 0
%%EndComments
%%BeginProlog
%%EndProlog
%%BeginSetup
%ADOPrintSettings: L2 W0 VM op crd os scsa T h ef bg ucr sf ef r b fa pr seps ttf hb EF t2 irt Printer/PostScript Color Management 0
+
%%BeginResource: procset l2check 6.0 1
%%Copyright: Copyright 1993,2001 Adobe Systems Incorporated. All Rights Reserved.
systemdict /languagelevel known
{ systemdict /languagelevel get 1 eq }
{ true }
ifelse
{
initgraphics /Helvetica findfont 18 scalefont setfont
72 600 moveto (Error: This application does not support) dup show
72 580 moveto (printing to a PostScript Language Level 1 printer.) dup show
exch = =
/Times-Roman findfont 16 scalefont setfont
72 500 moveto (As a workaround, try selecting Print As Image from) show
72 480 moveto (the Advanced Print dialog.) show
showpage
quit
}
if
%%EndResource
%%BeginResource: file Pscript_CFF PSVER
userdict /ct_CffDict 6 dict put
ct_CffDict begin
/F0Subr
{
systemdict /internaldict known
{
1183615869 systemdict /internaldict get exec
/FlxProc known {save true} {false} ifelse
}
{
userdict /internaldict known not
{
userdict /internaldict
{
count 0 eq
{/internaldict errordict /invalidaccess get exec} if
dup type /integertype ne
{/internaldict errordict /invalidaccess get exec} if
dup 1183615869 eq
{pop 0}
{/internaldict errordict /invalidaccess get exec}
ifelse
}
dup 14 get 1 25 dict put
bind executeonly put
} if
1183615869 userdict /internaldict get exec
/FlxProc known {save true} {false} ifelse
} ifelse
[
systemdict /internaldict known not
{ 100 dict /begin cvx /mtx matrix /def cvx } if
systemdict /currentpacking known {currentpacking true setpacking} if
{
systemdict /internaldict known {
1183615869 systemdict /internaldict get exec
dup /$FlxDict known not {
dup dup length exch maxlength eq
{ pop userdict dup /$FlxDict known not
{ 100 dict begin /mtx matrix def
dup /$FlxDict currentdict put end } if }
{ 100 dict begin /mtx matrix def
dup /$FlxDict currentdict put end }
ifelse
} if /$FlxDict get begin } if
grestore
/exdef {exch def} def
/dmin exch abs 100 div def
/epX exdef /epY exdef
/c4y2 exdef /c4x2 exdef /c4y1 exdef /c4x1 exdef /c4y0 exdef /c4x0 exdef
/c3y2 exdef /c3x2 exdef /c3y1 exdef /c3x1 exdef /c3y0 exdef /c3x0 exdef
/c1y2 exdef /c1x2 exdef /c2x2 c4x2 def /c2y2 c4y2 def
/yflag c1y2 c3y2 sub abs c1x2 c3x2 sub abs gt def
/PickCoords {
{c1x0 c1y0 c1x1 c1y1 c1x2 c1y2 c2x0 c2y0 c2x1 c2y1 c2x2 c2y2}
{c3x0 c3y0 c3x1 c3y1 c3x2 c3y2 c4x0 c4y0 c4x1 c4y1 c4x2 c4y2}
ifelse
/y5 exdef /x5 exdef /y4 exdef /x4 exdef /y3 exdef /x3 exdef
/y2 exdef /x2 exdef /y1 exdef /x1 exdef /y0 exdef /x0 exdef
} def
mtx currentmatrix pop
mtx 0 get abs .00001 lt mtx 3 get abs .00001 lt or
{/flipXY -1 def}
{mtx 1 get abs .00001 lt mtx 2 get abs .00001 lt or
{/flipXY 1 def}
{/flipXY 0 def}
ifelse }
ifelse
/erosion 1 def
systemdict /internaldict known {
1183615869 systemdict /internaldict get exec dup
/erosion known
{/erosion get /erosion exch def}
{pop}
ifelse
} if
yflag
{
flipXY 0 eq c3y2 c4y2 eq or
{false PickCoords}
{
/shrink c3y2 c4y2 eq
{0}{c1y2 c4y2 sub c3y2 c4y2 sub div abs} ifelse def
/yshrink {c4y2 sub shrink mul c4y2 add} def
/c1y0 c3y0 yshrink def /c1y1 c3y1 yshrink def
/c2y0 c4y0 yshrink def /c2y1 c4y1 yshrink def
/c1x0 c3x0 def /c1x1 c3x1 def /c2x0 c4x0 def /c2x1 c4x1 def
/dY 0 c3y2 c1y2 sub round
dtransform flipXY 1 eq {exch} if pop abs def
dY dmin lt PickCoords
y2 c1y2 sub abs 0.001 gt {
c1x2 c1y2 transform flipXY 1 eq {exch} if
/cx exch def /cy exch def
/dY 0 y2 c1y2 sub round dtransform flipXY 1 eq {exch}
if pop def
dY round dup 0 ne
{/dY exdef }
{pop dY 0 lt {-1}{1} ifelse /dY exdef}
ifelse
/erode PaintType 2 ne erosion 0.5 ge and def
erode {/cy cy 0.5 sub def} if
/ey cy dY add def
/ey ey ceiling ey sub ey floor add def
erode {/ey ey 0.5 add def} if
ey cx flipXY 1 eq {exch} if itransform exch pop
y2 sub /eShift exch def
/y1 y1 eShift add def /y2 y2 eShift add def /y3 y3
eShift add def
} if
} ifelse
}
{
flipXY 0 eq c3x2 c4x2 eq or
{false PickCoords }
{ /shrink c3x2 c4x2 eq
{0}{c1x2 c4x2 sub c3x2 c4x2 sub div abs} ifelse def
/xshrink {c4x2 sub shrink mul c4x2 add} def
/c1x0 c3x0 xshrink def /c1x1 c3x1 xshrink def
/c2x0 c4x0 xshrink def /c2x1 c4x1 xshrink def
/c1y0 c3y0 def /c1y1 c3y1 def /c2y0 c4y0 def /c2y1 c4y1 def
/dX c3x2 c1x2 sub round 0 dtransform
flipXY -1 eq {exch} if pop abs def
dX dmin lt PickCoords
x2 c1x2 sub abs 0.001 gt {
c1x2 c1y2 transform flipXY -1 eq {exch} if
/cy exch def /cx exch def
/dX x2 c1x2 sub round 0 dtransform flipXY -1 eq {exch} if pop def
dX round dup 0 ne
{/dX exdef}
{pop dX 0 lt {-1}{1} ifelse /dX exdef}
ifelse
/erode PaintType 2 ne erosion .5 ge and def
erode {/cx cx .5 sub def} if
/ex cx dX add def
/ex ex ceiling ex sub ex floor add def
erode {/ex ex .5 add def} if
ex cy flipXY -1 eq {exch} if itransform pop
x2 sub /eShift exch def
/x1 x1 eShift add def /x2 x2 eShift add def /x3 x3 eShift add def
} if
} ifelse
} ifelse
x2 x5 eq y2 y5 eq or
{x5 y5 lineto }
{x0 y0 x1 y1 x2 y2 curveto
x3 y3 x4 y4 x5 y5 curveto}
ifelse
epY epX
}
systemdict /currentpacking known {exch setpacking} if
/exec cvx /end cvx
] cvx
executeonly
exch
{pop true exch restore}
{
systemdict /internaldict known not
{1183615869 userdict /internaldict get exec
exch /FlxProc exch put true}
{1183615869 systemdict /internaldict get exec
dup length exch maxlength eq
{false}
{1183615869 systemdict /internaldict get exec
exch /FlxProc exch put true}
ifelse}
ifelse
} ifelse
{
systemdict /internaldict known
{1183615869 systemdict /internaldict get exec /FlxProc get exec}
{1183615869 userdict /internaldict get exec /FlxProc get exec}
ifelse
} if
} executeonly def
/F1Subr
{gsave currentpoint newpath moveto} bind def
/F2Subr
{currentpoint grestore gsave currentpoint newpath moveto} bind def
/HSSubr
{
systemdict /internaldict known not
{pop 3}
{1183615869 systemdict /internaldict get exec
dup /startlock known
{/startlock get exec}
{dup /strtlck known
{/strtlck get exec}
{pop 3}
ifelse}
ifelse}
ifelse
} bind def
end
%%EndResource
/currentpacking where{pop currentpacking true setpacking}if
%%BeginResource: procset pdfvars 6.0 1
%%Copyright: Copyright 1987-2002 Adobe Systems Incorporated. All Rights Reserved.
%%Title: definition of dictionary of variables used by PDF & PDFText procsets
userdict /PDF 162 dict put
userdict /PDFVars 89 dict dup begin put
/docSetupDone false def
/InitAll 0 def
/TermAll 0 def
/DocInitAll 0 def
/DocTermAll 0 def
/_pdfEncodings 2 array def
/_pdf_str1 1 string def
/_pdf_i 0 def
/_pdf_na 0 def
/_pdf_showproc 0 def
/_italMtx [1 0 .212557 1 0 0] def
/_italMtx_WMode1 [1 -.212557 0 1 0 0] def
/_italMtxType0 [1 0 .1062785 1 0 0] def
/_italMtx_WMode1Type0 [1 -.1062785 0 1 0 0] def
/_basefont 0 def
/_basefonto 0 def
/_pdf_oldCIDInit null def
/_pdf_FontDirectory 30 dict def
/_categories 10 dict def
/_sa? true def
/_ColorSep5044? false def
/nulldict 0 dict def
/_processColors 0 def
/overprintstack null def
/_defaulttransfer currenttransfer def
/_defaultflatness currentflat def
/_defaulthalftone null def
/_defaultcolortransfer null def
/_defaultblackgeneration null def
/_defaultundercolorremoval null def
/_defaultcolortransfer null def
PDF begin
[/c/cs/cm/d/d0/f/h/i/j/J/l/m/M/n/q/Q/re/ri/S/sc/sh/Tf/w/W
/applyInterpFunc/applystitchFunc/domainClip/encodeInput
/initgs/int/limit/rangeClip
/defineRes/undefineRes/findRes/setSA/pl
/? /! /| /: /+ /GetGlyphDirectory
/pdf_flushFilters /pdf_readstring /pdf_dictOp /pdf_image /pdf_maskedImage
/pdf_shfill /pdf_sethalftone
] {null def} bind forall
end
end
%%EndResource
PDFVars begin PDF begin
%%BeginResource: procset pdfutil 6.0 1
%%Copyright: Copyright 1993-2001 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Basic utilities used by other PDF procsets
/bd {bind def} bind def
/ld {load def} bd
/bld {
dup length dict begin
{ null def } forall
bind
end
def
} bd
/dd { PDFVars 3 1 roll put } bd
/xdd { exch dd } bd
/Level2?
systemdict /languagelevel known
{ systemdict /languagelevel get 2 ge } { false } ifelse
def
/Level1? Level2? not def
/Level3?
systemdict /languagelevel known
{systemdict /languagelevel get 3 eq } { false } ifelse
def
/getifknown {
2 copy known { get true } { pop pop false } ifelse
} bd
/here {
currentdict exch getifknown
} bd
/isdefined? { where { pop true } { false } ifelse } bd
%%EndResource
%%BeginResource: procset pdf 6.0 1
%%Copyright: Copyright 1998-2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: General operators for PDF, common to all Language Levels.
/cm { matrix astore concat } bd
/d /setdash ld
/f /fill ld
/h /closepath ld
/i {dup 0 eq {pop _defaultflatness} if setflat} bd
/j /setlinejoin ld
/J /setlinecap ld
/M /setmiterlimit ld
/n /newpath ld
/S /stroke ld
/w /setlinewidth ld
/W /clip ld
/sg /setgray ld
/initgs {
0 setgray
[] 0 d
0 j
0 J
10 M
1 w
false setSA
/_defaulttransfer load settransfer
0 i
/RelativeColorimetric ri
newpath
} bd
/int {
dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul
exch pop add exch pop
} bd
/limit {
dup 2 index le { exch } if pop
dup 2 index ge { exch } if pop
} bd
/domainClip {
Domain aload pop 3 2 roll
limit
} [/Domain] bld
/applyInterpFunc {
0 1 DimOut 1 sub
{
dup C0 exch get exch
dup C1 exch get exch
3 1 roll
1 index sub
3 index
N exp mul add
exch
currentdict /Range_lo known
{
dup Range_lo exch get exch
Range_hi exch get
3 2 roll limit
}
{
pop
}
ifelse
exch
} for
pop
} [/DimOut /C0 /C1 /N /Range_lo /Range_hi] bld
/encodeInput {
NumParts 1 sub
0 1 2 index
{
dup Bounds exch get
2 index gt
{ exit }
{ dup
3 index eq
{ exit }
{ pop } ifelse
} ifelse
} for
3 2 roll pop
dup Bounds exch get exch
dup 1 add Bounds exch get exch
2 mul
dup Encode exch get exch
1 add Encode exch get
int
} [/NumParts /Bounds /Encode] bld
/rangeClip {
exch dup Range_lo exch get
exch Range_hi exch get
3 2 roll
limit
} [/Range_lo /Range_hi] bld
/applyStitchFunc {
Functions exch get exec
currentdict /Range_lo known {
0 1 DimOut 1 sub {
DimOut 1 add -1 roll
rangeClip
} for
} if
} [/Functions /Range_lo /DimOut] bld
/pdf_flushfilters
{
aload length
{ dup status
1 index currentfile ne and
{ dup flushfile closefile }
{ pop }
ifelse
} repeat
} bd
/pdf_readstring
{
1 index dup length 1 sub get
exch readstring pop
exch pdf_flushfilters
} bind def
/pdf_dictOp
{
3 2 roll
10 dict copy
begin
_Filters dup length 1 sub get def
currentdict exch exec
_Filters pdf_flushfilters
end
} [/_Filters] bld
/pdf_imagemask {{imagemask} /DataSource pdf_dictOp} bd
/pdf_shfill {{sh} /DataSource pdf_dictOp} bd
/pdf_sethalftone {{sethalftone} /Thresholds pdf_dictOp} bd
/masks [ 2#10000000
2#11000000
2#11100000
2#11110000
2#11111000
2#11111100
2#11111110
2#11111111 ] def
/addNBits
{
/numBits exch def
/byte exch def
OutBitOffset numBits add 8 gt
{
byte OutBitOffset 8 sub bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutByteIndex OutByteIndex 1 add def
/bitsDoneSoFar OutBitOffset def
/OutBitOffset numBits 8 OutBitOffset sub sub def
OutBitOffset 0 gt
{
byte bitsDoneSoFar bitshift
masks numBits bitsDoneSoFar sub get and
OutBuffer OutByteIndex 3 -1 roll put
} if
}
{
byte masks numBits 1 sub get and
OutBitOffset neg bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutBitOffset OutBitOffset numBits add def
OutBitOffset 8 eq
{
/OutBitOffset 0 def
/OutByteIndex OutByteIndex 1 add def
} if
} ifelse
} bind def
/DevNNFilter
{
/InBuffer Width NumComps mul BitsPerComponent mul 7 add 8 idiv string def
AllSource InBuffer readstring pop pop
/outlen Width NewNumComps mul BitsPerComponent mul 7 add 8 idiv def
/OutBuffer outlen string def
0 1 outlen 1 sub { OutBuffer exch 0 put } for
/InByteIndex 0 def
/InBitOffset 0 def
/OutByteIndex 0 def
/OutBitOffset 0 def
/KeepArray NumComps array def
0 1 NumComps 1 sub { KeepArray exch true put } for
DevNNones { KeepArray exch false put } forall
Width {
KeepArray
{
{
/bitsLeft BitsPerComponent def
{
bitsLeft 0 le { exit } if
/bitsToDo 8 InBitOffset sub dup bitsLeft gt { pop bitsLeft } if def
InBuffer InByteIndex get
InBitOffset bitshift
bitsToDo addNBits
/bitsLeft bitsLeft bitsToDo sub def
InBitOffset bitsToDo add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
} loop
}
{
InBitOffset BitsPerComponent add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
}
ifelse
}
forall
} repeat
OutBuffer
} bd
/pdf_image
{
20 dict copy
begin
/UnusedNones where { /UnusedNones get}{false} ifelse
{
/NumComps Decode length 2 div cvi def
/OrigDecode Decode def
/NumNones DevNNones length def
/NewNumComps NumComps NumNones sub def
/Decode NewNumComps 2 mul cvi array def
/devNNindx 0 def
/decIndx 0 def
/cmpIndx 0 def
NumComps {
cmpIndx DevNNones devNNindx get eq
{
/devNNindx devNNindx 1 add dup NumNones eq {pop 0} if def
}
{
Decode decIndx OrigDecode cmpIndx 2 mul get put
Decode decIndx 1 add OrigDecode cmpIndx 2 mul 1 add get put
/decIndx decIndx 2 add def
} ifelse
/cmpIndx cmpIndx 1 add def
} repeat
_Filters dup length 1 sub get /AllSource exch def
/DataSource { DevNNFilter } def
}
{ _Filters dup length 1 sub get /DataSource exch def }
ifelse
currentdict image
_Filters pdf_flushfilters
end
} bd
/pdf_maskedImage
{
10 dict copy begin
/miDict currentdict def
/DataDict DataDict 10 dict copy def
DataDict begin
/DataSource
_Filters dup length 1 sub get
def
miDict image
_Filters pdf_flushfilters
end
miDict /InterleaveType get 3 eq
{ MaskDict /DataSource get dup type /filetype eq { closefile } { pop } ifelse }
if
end
} [/miDict /DataDict /_Filters] bld
/RadialShade {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/r2 exch def
/c2y exch def
/c2x exch def
/r1 exch def
/c1y exch def
/c1x exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
c1x c2x eq
{
c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope c2y c1y sub c2x c1x sub div def
/theta slope 1 atan def
c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
c1x c1y translate
theta rotate
-90 rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
/max { 2 copy gt { pop } {exch pop} ifelse } bind def
/min { 2 copy lt { pop } {exch pop} ifelse } bind def
rampdict begin
40 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
c1x c1y translate
theta rotate
-90 rotate
/c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
/c1y 0 def
/c1x 0 def
/c2x 0 def
ext0 {
0 getrampcolor
c2y r2 add r1 sub 0.0001 lt
{
c1x c1y r1 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2y r1 add r2 le
{
c1x c1y r1 0 360 arc
fill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r1 neg def
/p1y c1y def
/p2x r1 def
/p2y c1y def
p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y p1x SS1 div neg def
/SS2 90 theta sub dup sin exch cos div def
/p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y p2x SS2 div neg def
r1 r2 gt
{
/L1maxX p1x yMin p1y sub SS1 div add def
/L2maxX p2x yMin p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
c1x c2x sub dup mul
c1y c2y sub dup mul
add 0.5 exp
0 dtransform
dup mul exch dup mul add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
/hires exch def
hires mul
/numpix exch def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
/xInc c2x c1x sub numsteps div def
/yInc c2y c1y sub numsteps div def
/rInc r2 r1 sub numsteps div def
/cx c1x def
/cy c1y def
/radius r1 def
newpath
xInc 0 eq yInc 0 eq rInc 0 eq and and
{
0 getrampcolor
cx cy radius 0 360 arc
stroke
NumSamples 1 sub getrampcolor
cx cy radius 72 hires div add 0 360 arc
0 setlinewidth
stroke
}
{
0
numsteps
{
dup
subsampling { round } if
getrampcolor
cx cy radius 0 360 arc
/cx cx xInc add def
/cy cy yInc add def
/radius radius rInc add def
cx cy radius 360 0 arcn
eofill
rampIndxInc add
}
repeat
pop
} ifelse
ext1 {
c2y r2 add r1 lt
{
c2x c2y r2 0 360 arc
fill
}
{
c2y r1 add r2 sub 0.0001 le
{
c2x c2y r2 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r2 neg def
/p1y c2y def
/p2x r2 def
/p2y c2y def
p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y c2y p1x SS1 div sub def
/SS2 90 theta sub dup sin exch cos div def
/p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y c2y p2x SS2 div sub def
r1 r2 lt
{
/L1maxX p1x yMax p1y sub SS1 div add def
/L2maxX p2x yMax p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
grestore
grestore
end
end
end
} ifelse
} bd
/GenStrips {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/y2 exch def
/x2 exch def
/y1 exch def
/x1 exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
x1 x2 eq
{
y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope y2 y1 sub x2 x1 sub div def
/theta slope 1 atan def
x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
x1 y1 translate
theta rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
rampdict begin
20 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
x1 y1 translate
theta rotate
/xStart 0 def
/xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
/ySpan yMax yMin sub def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
xStart 0 transform
xEnd 0 transform
3 -1 roll
sub dup mul
3 1 roll
sub dup mul
add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
mul
/numpix exch def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
ext0 {
0 getrampcolor
xMin xStart lt
{ xMin yMin xMin neg ySpan rectfill } if
} if
/xInc xEnd xStart sub numsteps div def
/x xStart def
0
numsteps
{
dup
subsampling { round } if
getrampcolor
x yMin xInc ySpan rectfill
/x x xInc add def
rampIndxInc add
}
repeat
pop
ext1 {
xMax xEnd gt
{ xEnd yMin xMax xEnd sub ySpan rectfill } if
} if
grestore
grestore
end
end
end
} ifelse
} bd
/currentdistillerparams where { pop currentdistillerparams /CoreDistVersion get 5000 lt}{true}ifelse
{
/PDFMark5 {cleartomark} bd
}
{
/PDFMark5 {pdfmark} bd
}ifelse
/ReadByPDFMark5
{
2 dict begin
/makerString exch def string /tmpString exch def
{
currentfile tmpString readline pop
makerString anchorsearch
{
pop pop cleartomark exit
}
{
3 copy /PUT PDFMark5 pop 2 copy (\n) /PUT PDFMark5
} ifelse
}loop
end
}bd
%%EndResource
%%BeginResource: procset pdflev2 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: PDF operators, with code specific for Level 2
/docinitialize {
PDF begin
/_defaulthalftone currenthalftone dd
/_defaultblackgeneration currentblackgeneration dd
/_defaultundercolorremoval currentundercolorremoval dd
/_defaultcolortransfer [currentcolortransfer] dd
/_defaulttransfer currenttransfer dd
end
PDFVars /docSetupDone true put
} bd
/initialize {
PDFVars /docSetupDone get {
_defaulthalftone sethalftone
/_defaultblackgeneration load setblackgeneration
/_defaultundercolorremoval load setundercolorremoval
_defaultcolortransfer aload pop setcolortransfer
} if
false setoverprint
} bd
/terminate { } bd
/c /curveto ld
/cs /setcolorspace ld
/l /lineto ld
/m /moveto ld
/q /gsave ld
/Q /grestore ld
/sc /setcolor ld
/setSA/setstrokeadjust ld
/re {
4 2 roll m
1 index 0 rlineto
0 exch rlineto
neg 0 rlineto
h
} bd
/concattransferfuncs {
[ 3 1 roll /exec load exch /exec load ] cvx
} bd
/concatandsettransfer {
/_defaulttransfer load concattransferfuncs settransfer
} bd
/concatandsetcolortransfer {
_defaultcolortransfer aload pop
8 -1 roll 5 -1 roll concattransferfuncs 7 1 roll
6 -1 roll 4 -1 roll concattransferfuncs 5 1 roll
4 -1 roll 3 -1 roll concattransferfuncs 3 1 roll
concattransferfuncs
setcolortransfer
} bd
/defineRes/defineresource ld
/undefineRes/undefineresource ld
/findRes/findresource ld
currentglobal
true systemdict /setglobal get exec
[/Function /ExtGState /Form /Shading /FunctionDictionary /MadePattern /PatternPrototype /DataSource /Image]
{ /Generic /Category findresource dup length dict copy /Category defineresource pop }
forall
systemdict /setglobal get exec
/ri
{
/findcolorrendering isdefined?
{
mark exch
findcolorrendering
counttomark 2 eq
{ type /booleantype eq
{ dup type /nametype eq
{ dup /ColorRendering resourcestatus
{ pop pop
dup /DefaultColorRendering ne
{
/ColorRendering findresource
setcolorrendering
} if
} if
} if
} if
} if
cleartomark
}
{ pop
} ifelse
} bd
/knownColorants? {
pop false
} bd
/getrampcolor {
cvi
/indx exch def
0 1 NumComp 1 sub {
dup
Samples exch get
dup type /stringtype eq { indx get } if
exch
Scaling exch get aload pop
3 1 roll
mul add
} for
setcolor
} bd
/sssetbackground { aload pop setcolor } bd
%%EndResource
%%BeginResource: procset pdftext 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Text operators for PDF
PDF /PDFText 78 dict dup begin put
/docinitialize
{
/resourcestatus where {
pop
/CIDParams /ProcSet resourcestatus {
pop pop
false /CIDParams /ProcSet findresource /SetBuildCompatible get exec
} if
} if
PDF begin
PDFText /_pdfDefineIdentity-H known
{ PDFText /_pdfDefineIdentity-H get exec}
if
end
} bd
/initialize {
PDFText begin
} bd
/terminate { end } bd
Level2?
{
/_safeput
{
3 -1 roll load 3 1 roll put
}
bd
}
{
/_safeput
{
2 index load dup dup length exch maxlength ge
{ dup length 5 add dict copy
3 index xdd
}
{ pop }
ifelse
3 -1 roll load 3 1 roll put
}
bd
}
ifelse
/pdf_has_composefont? systemdict /composefont known def
/CopyFont {
{
1 index /FID ne 2 index /UniqueID ne and
{ def } { pop pop } ifelse
} forall
} bd
/Type0CopyFont
{
exch
dup length dict
begin
CopyFont
[
exch
FDepVector
{
dup /FontType get 0 eq
{
1 index Type0CopyFont
/_pdfType0 exch definefont
}
{
/_pdfBaseFont exch
2 index exec
}
ifelse
exch
}
forall
pop
]
/FDepVector exch def
currentdict
end
} bd
Level2? {currentglobal true setglobal} if
/cHexEncoding
[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
Level2? {setglobal} if
/modEnc {
/_enc xdd
/_icode 0 dd
counttomark 1 sub -1 0
{
index
dup type /nametype eq
{
_enc _icode 3 -1 roll put
_icode 1 add
}
if
/_icode xdd
} for
cleartomark
_enc
} bd
/trEnc {
/_enc xdd
255 -1 0 {
exch dup -1 eq
{ pop /.notdef }
{ Encoding exch get }
ifelse
_enc 3 1 roll put
} for
pop
_enc
} bd
/TE {
/_i xdd
StandardEncoding 256 array copy modEnc
_pdfEncodings exch _i exch put
} bd
Level2?
{
/pdfPatchCStrings
{
currentdict /CharStrings known currentdict /FontType known and
{
FontType 1 eq CharStrings type /dicttype eq and
{
CharStrings /mu known CharStrings /mu1 known not and CharStrings wcheck and
{
CharStrings /mu get
type /stringtype eq
{
currentglobal
CharStrings /mu1
CharStrings /mu get
dup gcheck setglobal
dup length string copy
put
setglobal
} if
} if
} if
} if
} bd
}
{ /pdfPatchCStrings {} bd }
ifelse
/TZ
{
/_usePDFEncoding xdd
findfont
dup length 6 add dict
begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
/pdf_origFontName FontName def
/FontName exch def
currentdict /PaintType known
{ PaintType 2 eq {/PaintType 0 def} if }
if
_usePDFEncoding 0 ge
{
/Encoding _pdfEncodings _usePDFEncoding get def
pop
}
{
_usePDFEncoding -1 eq
{
counttomark 0 eq
{ pop }
{
Encoding 256 array copy
modEnc /Encoding exch def
}
ifelse
}
{
256 array
trEnc /Encoding exch def
}
ifelse
}
ifelse
pdf_EuroProcSet pdf_origFontName known
{
pdf_origFontName pdf_AddEuroGlyphProc
} if
Level2?
{
currentdict /pdf_origFontName undef
} if
FontName currentdict
end
definefont pop
}
bd
Level2?
{
/TZG
{
currentglobal true setglobal
2 index _pdfFontStatus
{
2 index findfont
false setglobal
3 index findfont
true setglobal
ne
{
2 index findfont dup rcheck
{
dup length dict begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
currentdict end
}
if
3 index exch definefont pop
}
if
} if
setglobal
TZ
} bd
}
{
/TZG {TZ} bd
} ifelse
Level2?
{
currentglobal false setglobal
userdict /pdftext_data 5 dict put
pdftext_data
begin
/saveStacks
{
pdftext_data
begin
/vmmode currentglobal def
false setglobal
count array astore /os exch def
end
countdictstack array dictstack pdftext_data exch /ds exch put
cleardictstack pdftext_data /dscount countdictstack put
pdftext_data /vmmode get setglobal
} bind def
/restoreStacks
{
pdftext_data /vmmode currentglobal put false setglobal
clear cleardictstack
pdftext_data /ds get dup
pdftext_data /dscount get 1 2 index length 1 sub
{ get begin dup } for
pop pop
pdftext_data /os get aload pop
pdftext_data /vmmode get setglobal
} bind def
/testForClonePrinterBug
{
currentglobal true setglobal
/undefinedCategory /Generic /Category findresource
dup length dict copy /Category defineresource pop
setglobal
pdftext_data /saveStacks get exec
pdftext_data /vmmode currentglobal put false setglobal
/undefined /undefinedCategory { resourcestatus } stopped
pdftext_data exch /bugFound exch put
pdftext_data /vmmode get setglobal
pdftext_data /restoreStacks get exec
pdftext_data /bugFound get
} bind def
end
setglobal
/pdf_resourcestatus
pdftext_data /testForClonePrinterBug get exec
{
{
pdftext_data /saveStacks get exec
pdftext_data /os get dup dup length 1 sub
dup 1 sub dup 0 lt { pop 0 } if
exch 1 exch { get exch dup } for
pop pop
{ resourcestatus }
stopped
{
clear cleardictstack pdftext_data /restoreStacks get exec
{ pop pop } stopped pop false
}
{
count array astore pdftext_data exch /results exch put
pdftext_data /restoreStacks get exec pop pop
pdftext_data /results get aload pop
}
ifelse
}
}
{ { resourcestatus } }
ifelse
bd
}
if
Level2?
{
/_pdfUndefineResource
{
currentglobal 3 1 roll
_pdf_FontDirectory 2 index 2 copy known
{undef}
{pop pop}
ifelse
1 index (pdf) exch _pdfConcatNames 1 index
1 index 1 _pdfConcatNames 1 index
5 index 1 _pdfConcatNames 1 index
4
{
2 copy pdf_resourcestatus
{
pop 2 lt
{2 copy findresource gcheck setglobal undefineresource}
{pop pop}
ifelse
}
{ pop pop}
ifelse
} repeat
setglobal
} bd
}
{
/_pdfUndefineResource { pop pop} bd
}
ifelse
Level2?
{
/_pdfFontStatus
{
currentglobal exch
/Font pdf_resourcestatus
{pop pop true}
{false}
ifelse
exch setglobal
} bd
}
{
/_pdfFontStatusString 50 string def
_pdfFontStatusString 0 (fonts/) putinterval
/_pdfFontStatus
{
FontDirectory 1 index known
{ pop true }
{
_pdfFontStatusString 6 42 getinterval
cvs length 6 add
_pdfFontStatusString exch 0 exch getinterval
{ status } stopped
{pop false}
{
{ pop pop pop pop true}
{ false }
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
Level2?
{
/_pdfCIDFontStatus
{
/CIDFont /Category pdf_resourcestatus
{
pop pop
/CIDFont pdf_resourcestatus
{pop pop true}
{false}
ifelse
}
{ pop false }
ifelse
} bd
}
if
/_pdfString100 100 string def
/_pdfComposeFontName
{
dup length 1 eq
{
0 get
1 index
type /nametype eq
{
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
2 index exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
exch pop
true
}
{
pop pop
false
}
ifelse
}
{
false
}
ifelse
dup {exch cvn exch} if
} bd
/_pdfConcatNames
{
exch
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
3 -1 roll exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
cvn
} bind def
/_pdfTextTempString 50 string def
/_pdfRegOrderingArray [(Adobe-Japan1) (Adobe-CNS1) (Adobe-Korea1) (Adobe-GB1)] def
/_pdf_CheckCIDSystemInfo
{
1 index _pdfTextTempString cvs
(Identity) anchorsearch
{
pop pop pop pop true
}
{
false
_pdfRegOrderingArray
{
2 index exch
anchorsearch
{ pop pop pop true exit}
{ pop }
ifelse
}
forall
exch pop
exch /CIDFont findresource
/CIDSystemInfo get
3 -1 roll /CMap findresource
/CIDSystemInfo get
exch
3 -1 roll
{
2 copy
/Supplement get
exch
dup type /dicttype eq
{/Supplement get}
{pop 0 }
ifelse
ge
}
{ true }
ifelse
{
dup /Registry get
2 index /Registry get eq
{
/Ordering get
exch /Ordering get
dup type /arraytype eq
{
1 index type /arraytype eq
{
true
1 index length 1 sub -1 0
{
dup 2 index exch get exch 3 index exch get ne
{ pop false exit}
if
} for
exch pop exch pop
}
{ pop pop false }
ifelse
}
{
eq
}
ifelse
}
{ pop pop false }
ifelse
}
{ pop pop false }
ifelse
}
ifelse
} bind def
pdf_has_composefont?
{
/_pdfComposeFont
{
2 copy _pdfComposeFontName not
{
2 index
}
if
(pdf) exch _pdfConcatNames
dup _pdfFontStatus
{ dup findfont 5 2 roll pop pop pop true}
{
4 1 roll
1 index /CMap pdf_resourcestatus
{
pop pop
true
}
{false}
ifelse
1 index true exch
{
_pdfCIDFontStatus not
{pop false exit}
if
}
forall
and
{
1 index 1 index 0 get _pdf_CheckCIDSystemInfo
{
3 -1 roll pop
2 index 3 1 roll
composefont true
}
{
pop pop exch pop false
}
ifelse
}
{
_pdfComposeFontName
{
dup _pdfFontStatus
{
exch pop
1 index exch
findfont definefont true
}
{
pop exch pop
false
}
ifelse
}
{
exch pop
false
}
ifelse
}
ifelse
{ true }
{
dup _pdfFontStatus
{ dup findfont true }
{ pop false }
ifelse
}
ifelse
}
ifelse
} bd
}
{
/_pdfComposeFont
{
_pdfComposeFontName not
{
dup
}
if
dup
_pdfFontStatus
{exch pop dup findfont true}
{
1 index
dup type /nametype eq
{pop}
{cvn}
ifelse
eq
{pop false}
{
dup _pdfFontStatus
{dup findfont true}
{pop false}
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
/_pdfStyleDicts 4 dict dup begin
/Adobe-Japan1 4 dict dup begin
Level2?
{
/Serif
/HeiseiMin-W3-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMin-W3}
{
/HeiseiMin-W3 _pdfCIDFontStatus
{/HeiseiMin-W3}
{/Ryumin-Light}
ifelse
}
ifelse
def
/SansSerif
/HeiseiKakuGo-W5-83pv-RKSJ-H _pdfFontStatus
{/HeiseiKakuGo-W5}
{
/HeiseiKakuGo-W5 _pdfCIDFontStatus
{/HeiseiKakuGo-W5}
{/GothicBBB-Medium}
ifelse
}
ifelse
def
/HeiseiMaruGo-W4-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMaruGo-W4}
{
/HeiseiMaruGo-W4 _pdfCIDFontStatus
{/HeiseiMaruGo-W4}
{
/Jun101-Light-RKSJ-H _pdfFontStatus
{ /Jun101-Light }
{ SansSerif }
ifelse
}
ifelse
}
ifelse
/RoundSansSerif exch def
/Default Serif def
}
{
/Serif /Ryumin-Light def
/SansSerif /GothicBBB-Medium def
{
(fonts/Jun101-Light-83pv-RKSJ-H) status
}stopped
{pop}{
{ pop pop pop pop /Jun101-Light }
{ SansSerif }
ifelse
/RoundSansSerif exch def
}ifelse
/Default Serif def
}
ifelse
end
def
/Adobe-Korea1 4 dict dup begin
/Serif /HYSMyeongJo-Medium def
/SansSerif /HYGoThic-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-GB1 4 dict dup begin
/Serif /STSong-Light def
/SansSerif /STHeiti-Regular def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-CNS1 4 dict dup begin
/Serif /MKai-Medium def
/SansSerif /MHei-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
end
def
/TZzero
{
/_wmode xdd
/_styleArr xdd
/_regOrdering xdd
3 copy
_pdfComposeFont
{
5 2 roll pop pop pop
}
{
[
0 1 _styleArr length 1 sub
{
_styleArr exch get
_pdfStyleDicts _regOrdering 2 copy known
{
get
exch 2 copy known not
{ pop /Default }
if
get
}
{
pop pop pop /Unknown
}
ifelse
}
for
]
exch pop
2 index 3 1 roll
_pdfComposeFont
{3 -1 roll pop}
{
findfont dup /FontName get exch
}
ifelse
}
ifelse
dup /WMode 2 copy known
{ get _wmode ne }
{ pop pop _wmode 1 eq}
ifelse
{
exch _wmode _pdfConcatNames
dup _pdfFontStatus
{ exch pop dup findfont false}
{ exch true }
ifelse
}
{
dup /FontType get 0 ne
}
ifelse
{
dup /FontType get 3 eq _wmode 1 eq and
{
_pdfVerticalRomanT3Font dup length 10 add dict copy
begin
/_basefont exch
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put dup 16#a5 /yen put dup 16#b4 /yen put}
if
def
FontName
currentdict
end
definefont
def
/Encoding _basefont /Encoding get def
/_fauxfont true def
}
{
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
FontType 0 ne
{
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put}
if
def
/_fauxfont true def
} if
} ifelse
/WMode _wmode def
dup dup /FontName exch def
currentdict
end
definefont pop
}
{
pop
}
ifelse
/_pdf_FontDirectory 3 1 roll _safeput
}
bd
Level2?
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
selectfont
} bd
}
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
exch findfont exch
dup type /arraytype eq
{makefont}
{scalefont}
ifelse
setfont
} bd
}
ifelse
/cshow where
{
pop /pdf_cshow /cshow load dd
/pdf_remove2 {pop pop} dd
}
{
/pdf_cshow {exch forall} dd
/pdf_remove2 {} dd
} ifelse
/pdf_xshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_yshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0 exch
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_xyshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
1 pop
{_pdf_na _pdf_i 1 add get} stopped
{ pop pop pop}
{
_pdf_x _pdf_y moveto
rmoveto
}
ifelse
}
ifelse
_pdf_i 2 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdfl1xs {/_pdf_showproc /show load dd pdf_xshow} bd
/pdfl1ys {/_pdf_showproc /show load dd pdf_yshow} bd
/pdfl1xys {/_pdf_showproc /show load dd pdf_xyshow} bd
Level2? _ColorSep5044? not and
{
/pdfxs {{xshow} stopped {pdfl1xs} if} bd
/pdfys {{yshow} stopped {pdfl1ys} if} bd
/pdfxys {{xyshow} stopped {pdfl1xys} if} bd
}
{
/pdfxs /pdfl1xs load dd
/pdfys /pdfl1ys load dd
/pdfxys /pdfl1xys load dd
} ifelse
/pdf_charpath {false charpath} bd
/pdf_xcharpath {/_pdf_showproc /pdf_charpath load dd pdf_xshow} bd
/pdf_ycharpath {/_pdf_showproc /pdf_charpath load dd pdf_yshow} bd
/pdf_xycharpath {/_pdf_showproc /pdf_charpath load dd pdf_xyshow} bd
/pdf_strokepath
{
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 false charpath
currentpoint S moveto
} bind
exch pdf_cshow
} bd
/pdf_xstrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xshow} bd
/pdf_ystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_yshow} bd
/pdf_xystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xyshow} bd
Level2? {currentglobal true setglobal} if
/d0/setcharwidth ld
/nND {{/.notdef} repeat} bd
/T3Defs {
/BuildChar
{
1 index /Encoding get exch get
1 index /BuildGlyph get exec
}
def
/BuildGlyph {
exch begin
GlyphProcs exch get exec
end
} def
/_pdfT3Font true def
} bd
/_pdfBoldRomanWidthProc
{
stringwidth 1 index 0 ne { exch .03 add exch }if setcharwidth
0 0
} bd
/_pdfType0WidthProc
{
dup stringwidth 0 0 moveto
2 index true charpath pathbbox
0 -1
7 index 2 div .88
setcachedevice2
pop
0 0
} bd
/_pdfType0WMode1WidthProc
{
dup stringwidth
pop 2 div neg -0.88
2 copy
moveto
0 -1
5 -1 roll true charpath pathbbox
setcachedevice
} bd
/_pdfBoldBaseFont
11 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/Encoding cHexEncoding def
/_setwidthProc /_pdfBoldRomanWidthProc load def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
pdf_has_composefont?
{
/_pdfBoldBaseCIDFont
11 dict begin
/CIDFontType 1 def
/CIDFontName /_pdfBoldBaseCIDFont def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_setwidthProc /_pdfType0WidthProc load def
/_bcstr2 2 string def
/BuildGlyph
{
exch begin
_basefont setfont
_bcstr2 1 2 index 256 mod put
_bcstr2 0 3 -1 roll 256 idiv put
_bcstr2 dup _setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
/_pdfDefineIdentity-H
{
/Identity-H /CMap PDFText /pdf_resourcestatus get exec
{
pop pop
}
{
/CIDInit/ProcSet findresource begin 12 dict begin
begincmap
/CIDSystemInfo
3 dict begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
currentdict
end
def
/CMapName /Identity-H def
/CMapVersion 1 def
/CMapType 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
CMapName currentdict/CMap defineresource pop
end
end
} ifelse
} def
} if
/_pdfVerticalRomanT3Font
10 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_pdfType0WidthProc
moveto
show
end
}bd
currentdict
end
def
Level2? {setglobal} if
/MakeBoldFont
{
dup /ct_SyntheticBold known
{
dup length 3 add dict begin
CopyFont
/ct_StrokeWidth .03 0 FontMatrix idtransform pop def
/ct_SyntheticBold true def
currentdict
end
definefont
}
{
dup dup length 3 add dict
begin
CopyFont
/PaintType 2 def
/StrokeWidth .03 0 FontMatrix idtransform pop def
/dummybold currentdict
end
definefont
dup /FontType get dup 9 ge exch 11 le and
{
_pdfBoldBaseCIDFont
dup length 3 add dict copy begin
dup /CIDSystemInfo get /CIDSystemInfo exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefont exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefonto exch def
currentdict
end
/CIDFont defineresource
}
{
_pdfBoldBaseFont
dup length 3 add dict copy begin
/_basefont exch def
/_basefonto exch def
currentdict
end
definefont
}
ifelse
}
ifelse
} bd
/MakeBold {
1 index
_pdf_FontDirectory 2 index 2 copy known
{get}
{exch pop}
ifelse
findfont
dup
/FontType get 0 eq
{
dup /WMode known {dup /WMode get 1 eq }{false} ifelse
version length 4 ge
and
{version 0 4 getinterval cvi 2015 ge }
{true}
ifelse
{/_pdfType0WidthProc}
{/_pdfType0WMode1WidthProc}
ifelse
_pdfBoldBaseFont /_setwidthProc 3 -1 roll load put
{MakeBoldFont} Type0CopyFont definefont
}
{
dup /_fauxfont known not 1 index /SubstMaster known not and
{
_pdfBoldBaseFont /_setwidthProc /_pdfBoldRomanWidthProc load put
MakeBoldFont
}
{
2 index 2 index eq
{ exch pop }
{
dup length dict begin
CopyFont
currentdict
end
definefont
}
ifelse
}
ifelse
}
ifelse
pop pop
dup /dummybold ne
{/_pdf_FontDirectory exch dup _safeput }
{ pop }
ifelse
}bd
/MakeItalic {
_pdf_FontDirectory exch 2 copy known
{get}
{exch pop}
ifelse
dup findfont
dup /FontInfo 2 copy known
{
get
/ItalicAngle 2 copy known
{get 0 eq }
{ pop pop true}
ifelse
}
{ pop pop true}
ifelse
{
exch pop
dup /FontType get 0 eq Level2? not and
{ dup /FMapType get 6 eq }
{ false }
ifelse
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1Type0 }
{ _italMtxType0 }
ifelse
}
{ pop pop _italMtxType0 }
ifelse
}
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1 }
{ _italMtx }
ifelse
}
{ pop pop _italMtx }
ifelse
}
ifelse
makefont
dup /FontType get 42 eq Level2? not or
{
dup length dict begin
CopyFont
currentdict
end
}
if
1 index exch
definefont pop
/_pdf_FontDirectory exch dup _safeput
}
{
pop
2 copy ne
{
/_pdf_FontDirectory 3 1 roll _safeput
}
{ pop pop }
ifelse
}
ifelse
}bd
/MakeBoldItalic {
/dummybold exch
MakeBold
/dummybold
MakeItalic
}bd
Level2?
{
/pdf_CopyDict
{1 index length add dict copy}
def
}
{
/pdf_CopyDict
{
1 index length add dict
1 index wcheck
{ copy }
{ begin
{def} forall
currentdict
end
}
ifelse
}
def
}
ifelse
/pdf_AddEuroGlyphProc
{
currentdict /CharStrings known
{
CharStrings /Euro known not
{
dup
/CharStrings
CharStrings 1 pdf_CopyDict
begin
/Euro pdf_EuroProcSet 4 -1 roll get def
currentdict
end
def
/pdf_PSBuildGlyph /pdf_PSBuildGlyph load def
/pdf_PathOps /pdf_PathOps load def
/Symbol eq Encoding 160 get /.notdef eq and
{
/Encoding Encoding dup length array copy
dup 160 /Euro put def
}
if
}
{ pop
}
ifelse
}
{ pop
}
ifelse
}
def
Level2? {currentglobal true setglobal} if
/pdf_PathOps 4 dict dup begin
/m {moveto} def
/l {lineto} def
/c {curveto} def
/cp {closepath} def
end
def
/pdf_PSBuildGlyph
{
gsave
8 -1 roll pop
7 1 roll
currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
dup 9 1 roll
{
currentdict /StrokeWidth 2 copy known
{
get 2 div
5 1 roll
4 -1 roll 4 index sub
4 1 roll
3 -1 roll 4 index sub
3 1 roll
exch 4 index add exch
4 index add
5 -1 roll pop
}
{
pop pop
}
ifelse
}
if
setcachedevice
pdf_PathOps begin
exec
end
{
currentdict /StrokeWidth 2 copy known
{ get }
{ pop pop 0 }
ifelse
setlinewidth stroke
}
{
fill
}
ifelse
grestore
} def
/pdf_EuroProcSet 13 dict def
pdf_EuroProcSet
begin
/Courier-Bold
{
600 0 6 -12 585 612
{
385 274 m
180 274 l
179 283 179 293 179 303 c
179 310 179 316 180 323 c
398 323 l
423 404 l
197 404 l
219 477 273 520 357 520 c
409 520 466 490 487 454 c
487 389 l
579 389 l
579 612 l
487 612 l
487 560 l
449 595 394 612 349 612 c
222 612 130 529 98 404 c
31 404 l
6 323 l
86 323 l
86 304 l
86 294 86 284 87 274 c
31 274 l
6 193 l
99 193 l
129 77 211 -12 359 -12 c
398 -12 509 8 585 77 c
529 145 l
497 123 436 80 356 80 c
285 80 227 122 198 193 c
360 193 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-BoldOblique /Courier-Bold load def
/Courier
{
600 0 17 -12 578 584
{
17 204 m
97 204 l
126 81 214 -12 361 -12 c
440 -12 517 17 578 62 c
554 109 l
501 70 434 43 366 43 c
266 43 184 101 154 204 c
380 204 l
400 259 l
144 259 l
144 270 143 281 143 292 c
143 299 143 307 144 314 c
418 314 l
438 369 l
153 369 l
177 464 249 529 345 529 c
415 529 484 503 522 463 c
522 391 l
576 391 l
576 584 l
522 584 l
522 531 l
473 566 420 584 348 584 c
216 584 122 490 95 369 c
37 369 l
17 314 l
87 314 l
87 297 l
87 284 88 272 89 259 c
37 259 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-Oblique /Courier load def
/Helvetica
{
556 0 24 -19 541 703
{
541 628 m
510 669 442 703 354 703 c
201 703 117 607 101 444 c
50 444 l
25 372 l
97 372 l
97 301 l
49 301 l
24 229 l
103 229 l
124 67 209 -19 350 -19 c
435 -19 501 25 509 32 c
509 131 l
492 105 417 60 343 60 c
267 60 204 127 197 229 c
406 229 l
430 301 l
191 301 l
191 372 l
455 372 l
479 444 l
194 444 l
201 531 245 624 348 624 c
433 624 484 583 509 534 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-Oblique /Helvetica load def
/Helvetica-Bold
{
556 0 12 -19 563 710
{
563 621 m
537 659 463 710 363 710 c
216 710 125 620 101 462 c
51 462 l
12 367 l
92 367 l
92 346 l
92 337 93 328 93 319 c
52 319 l
12 224 l
102 224 l
131 58 228 -19 363 -19 c
417 -19 471 -12 517 18 c
517 146 l
481 115 426 93 363 93 c
283 93 254 166 246 224 c
398 224 l
438 319 l
236 319 l
236 367 l
457 367 l
497 462 l
244 462 l
259 552 298 598 363 598 c
425 598 464 570 486 547 c
507 526 513 517 517 509 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-BoldOblique /Helvetica-Bold load def
/Symbol
{
750 0 20 -12 714 685
{
714 581 m
650 645 560 685 465 685 c
304 685 165 580 128 432 c
50 432 l
20 369 l
116 369 l
115 356 115 347 115 337 c
115 328 115 319 116 306 c
50 306 l
20 243 l
128 243 l
165 97 300 -12 465 -12 c
560 -12 635 25 685 65 c
685 155 l
633 91 551 51 465 51 c
340 51 238 131 199 243 c
555 243 l
585 306 l
184 306 l
183 317 182 326 182 336 c
182 346 183 356 184 369 c
614 369 l 644 432 l
199 432 l
233 540 340 622 465 622 c
555 622 636 580 685 520 c
cp
750 0 m
}
pdf_PSBuildGlyph
} def
/Times-Bold
{
500 0 16 -14 478 700
{
367 308 m
224 308 l
224 368 l
375 368 l
380 414 l
225 414 l
230 589 257 653 315 653 c
402 653 431 521 444 457 c
473 457 l
473 698 l
444 697 l
441 679 437 662 418 662 c
393 662 365 700 310 700 c
211 700 97 597 73 414 c
21 414 l
16 368 l
69 368 l
69 359 68 350 68 341 c
68 330 68 319 69 308 c
21 308 l
16 262 l
73 262 l
91 119 161 -14 301 -14 c
380 -14 443 50 478 116 c
448 136 l
415 84 382 40 323 40 c
262 40 231 77 225 262 c
362 262 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-BoldItalic
{
500 0 9 -20 542 686
{
542 686 m
518 686 l
513 673 507 660 495 660 c
475 660 457 683 384 683 c
285 683 170 584 122 430 c
58 430 l
34 369 l
105 369 l
101 354 92 328 90 312 c
34 312 l
9 251 l
86 251 l
85 238 84 223 84 207 c
84 112 117 -14 272 -14 c
326 -14 349 9 381 9 c
393 9 393 -10 394 -20 c
420 -20 l
461 148 l
429 148 l
416 109 362 15 292 15 c
227 15 197 55 197 128 c
197 162 204 203 216 251 c
378 251 l
402 312 l
227 312 l
229 325 236 356 241 369 c
425 369 l
450 430 l
255 430 l
257 435 264 458 274 488 c
298 561 337 654 394 654 c
437 654 484 621 484 530 c
484 516 l
516 516 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Italic
{
500 0 23 -10 595 692
{
399 317 m
196 317 l
199 340 203 363 209 386 c
429 386 l
444 424 l
219 424 l
246 514 307 648 418 648 c
448 648 471 638 492 616 c
529 576 524 529 527 479 c
549 475 l
595 687 l
570 687 l
562 674 558 664 542 664 c
518 664 474 692 423 692 c
275 692 162 551 116 424 c
67 424 l
53 386 l
104 386 l
98 363 93 340 90 317 c
37 317 l
23 279 l
86 279 l
85 266 85 253 85 240 c
85 118 137 -10 277 -10 c
370 -10 436 58 488 128 c
466 149 l
424 101 375 48 307 48 c
212 48 190 160 190 234 c
190 249 191 264 192 279 c
384 279 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Roman
{
500 0 10 -12 484 692
{
347 298 m
171 298 l
170 310 170 322 170 335 c
170 362 l
362 362 l
374 403 l
172 403 l
184 580 244 642 308 642 c
380 642 434 574 457 457 c
481 462 l
474 691 l
449 691 l
433 670 429 657 410 657 c
394 657 360 692 299 692 c
204 692 94 604 73 403 c
22 403 l
10 362 l
70 362 l
69 352 69 341 69 330 c
69 319 69 308 70 298 c
22 298 l
10 257 l
73 257 l
97 57 216 -12 295 -12 c
364 -12 427 25 484 123 c
458 142 l
425 101 384 37 316 37 c
256 37 189 84 173 257 c
335 257 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
end
Level2? {setglobal} if
currentdict readonly pop end
%%EndResource
PDFText begin
[39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
/guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
/hungarumlaut/ogonek/caron
0 TE
[1/dotlessi/caron 39/quotesingle 96/grave
127/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft
/quotedblright/bullet/endash/emdash/tilde/trademark/scaron
/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus
/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla
/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters
/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute
/ucircumflex/udieresis/yacute/thorn/ydieresis
1 TE
end
%%BeginResource: procset pdfasc.prc 6.0 1
%%Copyright: Copyright 1992-2003 Adobe Systems Incorporated. All Rights Reserved.
/ASR {
13 dict begin
/mirV? exch def
/mirH? exch def
/center? exch def
/autorotate? exch def
/angle exch def
/shrink exch def
/Pury exch def
/Purx exch def
/Plly exch def
/Pllx exch def
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury 0 eq Durx 0 eq and Dlly 0 eq Dllx 0 eq and and
{ shrink 0 gt { GClipBBox } { GPageBBox } ifelse }
{ ITransDBBox }
ifelse
/PHt Pury Plly sub def
/PW Purx Pllx sub def
/DHt Dury Dlly sub def
/DW Durx Dllx sub def
angle 90 eq angle 270 eq or
{
PHt /PHt PW def /PW exch def
} if
autorotate? PHt PW ne and DHt DW ne and
{
DHt DW ge
PHt PW ge
ne
{ /angle angle 90 add def
PHt /PHt PW def /PW exch def
}
if
} if
angle 0 ne
{
/angle angle 360 mod def
angle rotate
angle 90 eq
{ 0 DW neg translate }
if
angle 180 eq
{ DW neg DHt neg translate }
if
angle 270 eq
{ DHt neg 0 translate }
if
} if
center?
{
ITransBBox
Durx Dllx add 2 div Dury Dlly add 2 div
Purx Pllx add -2 div Pury Plly add -2 div
3 -1 roll add exch
3 -1 roll add exch
translate
}
{
ITransBBox
angle 0 eq
{Dllx Pllx sub Dury Pury sub}
if
angle 90 eq
{Durx Purx sub Dury Pury sub}
if
angle 180 eq
{Durx Purx sub Dlly Plly sub}
if
angle 270 eq
{Dllx Pllx sub Dlly Plly sub}
if
translate
}
ifelse
mirH? mirV? or
{
ITransBBox
mirH?
{
-1 1 scale
Durx Dllx add neg 0 translate
} if
mirV?
{
1 -1 scale
0 Dury Dlly add neg translate
} if
} if
shrink 0 ne
{
ITransBBox
Dury Dlly sub Pury Plly sub div
Durx Dllx sub Purx Pllx sub div
2 copy gt { exch } if pop
shrink 1 eq
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{
shrink 2 eq 1 index 1.0 lt and
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{ pop }
ifelse
}
ifelse
} if
end
} [/autorotate? /shrink? /mirH? /mirV? /angle /Pury /Purx /Plly /Pllx /Durx /Dury /Dllx /Dlly /PW /PHt /DW /DHt
/Devurx /Devury /Devllx /Devlly /pdfHt /pdfW]
bld
/GClipBBox
{
gsave newpath clippath pathbbox newpath grestore
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
ITransDBBox
} [/Durx /Dury /Dllx /Dlly]
bld
/GPageBBox
{
{
currentpagedevice /PageSize get aload pop
/Devury exch def /Devurx exch def
/Devllx 0 def /Devlly 0 def
ITransBBox
}
stopped
{ GClipBBox }
if
} [/Devurx /Devury /Devllx /Devlly ]
bld
/ITransDBBox
{
Durx Dury transform matrix defaultmatrix itransform
/Devury exch def
/Devurx exch def
Dllx Dlly transform matrix defaultmatrix itransform
/Devlly exch def
/Devllx exch def
Devury Devlly lt {/Devlly Devury /Devury Devlly def def} if
Devurx Devllx lt {/Devllx Devurx /Devurx Devllx def def} if
} [/Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
/ITransBBox
{
/um matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix def
Devllx Devlly um itransform
Devurx Devury um itransform
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury Dlly lt {/Dlly Dury /Dury Dlly def def} if
Durx Dllx lt {/Dllx Durx /Durx Dllx def def} if
} [ /um /Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
%%EndResource
currentdict readonly pop
end end
/currentpacking where {pop setpacking}if
PDFVars/DocInitAll{[PDF PDFText]{/docinitialize get exec}forall }put
+PDFVars/InitAll{[PDF PDFText]{/initialize get exec}forall initgs}put
+PDFVars/TermAll{[PDFText PDF]{/terminate get exec}forall}put
+PDFVars begin PDF begin
PDFVars/DocInitAll get exec PDFVars/InitAll get exec
[/NamespacePush PDFMark5
[/_objdef {Metadata_In_EPS} /type /stream /OBJ PDFMark5
[{Metadata_In_EPS} 3537 (% &end XMP packet& %) ReadByPDFMark5
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-701">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2006-10-20T15:23:17+02:00</xap:CreateDate>
+ <xap:ModifyDate>2006-10-20T15:23:17+02:00</xap:ModifyDate>
+ <xap:MetadataDate>2006-10-20T15:23:17+02:00</xap:MetadataDate>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#">
+ <xapMM:DocumentID>uuid:34DD0B9261E111DBB7AD8EFAF1591643</xapMM:DocumentID>
+ <xapMM:InstanceID>uuid:34DD0B9261E111DBB7AD8EFAF1591643</xapMM:InstanceID>
+ <xapMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>uuid:fcba86c4-603d-11db-9b35-000a95cd9010</stRef:instanceID>
+ <stRef:documentID>uuid:2144a3e0-603d-11db-9b35-000a95cd9010</stRef:documentID>
+ </xapMM:DerivedFrom>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">paper.dvi</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ <dc:format>application/eps</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?>
% &end XMP packet& %
[{Metadata_In_EPS} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT PDFMark5
[/Document 1 dict begin /Metadata {Metadata_In_EPS} def currentdict end /BDC PDFMark5
[/NamespacePop PDFMark5
PDFVars/TermAll get exec end end
PDF /docinitialize get exec
+
%%EndSetup
PDFVars begin PDF begin PDFVars/InitAll get exec
112.247 364.03 114.87 98.513 rectclip
q
112.247 364.03 m
227.117 364.03 l
227.117 462.543 l
112.247 462.543 l
h
W
n
q
0.1 0.0 0.0 0.1 0.0 0.0 cm
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
Q
q
n
1195.62 4688.31 m
2327.9 4688.31 l
2327.9 3620.38 l
1195.62 3620.38 l
h
W
n
n
[/DeviceGray] cs 1.0 sc
1195.619995 3620.379883 1132.279907 1046.750000 rectfill
+
n
1380.530029 3761.300049 828.437988 828.438232 rectfill
+
4.88755 w
1 j
n
1380.53 3761.3 828.438 828.438 re
S
[4.88755 39.1004 ] 0.0 d
3.25837 w
n
1380.53 3761.3 m
1380.53 4589.74 l
0.0 sc
S
n
1380.53 4589.74 m
1380.53 4589.74 l
S
n
1483.98 3761.3 m
1483.98 4589.74 l
S
n
1483.98 4589.74 m
1483.98 4589.74 l
S
n
1588.25 3761.3 m
1588.25 4589.74 l
S
n
1588.25 4589.74 m
1588.25 4589.74 l
S
n
1691.7 3761.3 m
1691.7 4589.74 l
S
n
1691.7 4589.74 m
1691.7 4589.74 l
S
n
1795.16 3761.3 m
1795.16 4589.74 l
S
n
1795.16 4589.74 m
1795.16 4589.74 l
S
n
1898.61 3761.3 m
1898.61 4589.74 l
S
n
1898.61 4589.74 m
1898.61 4589.74 l
S
n
2002.06 3761.3 m
2002.06 4589.74 l
S
n
2002.06 4589.74 m
2002.06 4589.74 l
S
n
2105.52 3761.3 m
2105.52 4589.74 l
S
n
2105.52 4589.74 m
2105.52 4589.74 l
S
n
2208.97 3761.3 m
2208.97 4589.74 l
S
n
2208.97 4589.74 m
2208.97 4589.74 l
S
n
1380.53 3761.3 m
2208.97 3761.3 l
S
n
2208.97 3761.3 m
2208.97 3761.3 l
S
n
1380.53 3864.76 m
2208.97 3864.76 l
S
n
2208.97 3864.76 m
2208.97 3864.76 l
S
n
1380.53 3968.21 m
2208.97 3968.21 l
S
n
2208.97 3968.21 m
2208.97 3968.21 l
S
n
1380.53 4072.48 m
2208.97 4072.48 l
S
n
2208.97 4072.48 m
2208.97 4072.48 l
S
n
1380.53 4175.93 m
2208.97 4175.93 l
S
n
2208.97 4175.93 m
2208.97 4175.93 l
S
n
1380.53 4279.38 m
2208.97 4279.38 l
S
n
2208.97 4279.38 m
2208.97 4279.38 l
S
n
1380.53 4382.84 m
2208.97 4382.84 l
S
n
2208.97 4382.84 m
2208.97 4382.84 l
S
n
1380.53 4486.29 m
2208.97 4486.29 l
S
n
2208.97 4486.29 m
2208.97 4486.29 l
S
n
1380.53 4589.74 m
2208.97 4589.74 l
S
n
2208.97 4589.74 m
2208.97 4589.74 l
S
[] 0.0 d
4.88755 w
n
1380.53 3761.3 m
2208.97 3761.3 l
S
n
1380.53 4589.74 m
2208.97 4589.74 l
S
n
1380.53 3761.3 m
1380.53 4589.74 l
S
n
2208.97 3761.3 m
2208.97 4589.74 l
S
n
1380.53 3761.3 m
2208.97 3761.3 l
S
n
1380.53 3761.3 m
1380.53 4589.74 l
S
n
1380.53 3761.3 m
1380.53 3770.26 l
S
n
1380.53 4589.74 m
1380.53 4580.78 l
S
n
1483.98 3761.3 m
1483.98 3770.26 l
S
n
1483.98 4589.74 m
1483.98 4580.78 l
S
n
1588.25 3761.3 m
1588.25 3770.26 l
S
n
1588.25 4589.74 m
1588.25 4580.78 l
S
n
1691.7 3761.3 m
1691.7 3770.26 l
S
n
1691.7 4589.74 m
1691.7 4580.78 l
S
n
1795.16 3761.3 m
1795.16 3770.26 l
S
n
1795.16 4589.74 m
1795.16 4580.78 l
S
n
1898.61 3761.3 m
1898.61 3770.26 l
S
n
1898.61 4589.74 m
1898.61 4580.78 l
S
n
2002.06 3761.3 m
2002.06 3770.26 l
S
n
2002.06 4589.74 m
2002.06 4580.78 l
S
n
2105.52 3761.3 m
2105.52 3770.26 l
S
n
2105.52 4589.74 m
2105.52 4580.78 l
S
n
2208.97 3761.3 m
2208.97 3770.26 l
S
n
2208.97 4589.74 m
2208.97 4580.78 l
S
n
1380.53 3761.3 m
1389.49 3761.3 l
S
n
2208.97 3761.3 m
2200.01 3761.3 l
S
n
1380.53 3864.76 m
1389.49 3864.76 l
S
n
2208.97 3864.76 m
2200.01 3864.76 l
S
n
1380.53 3968.21 m
1389.49 3968.21 l
S
n
2208.97 3968.21 m
2200.01 3968.21 l
S
n
1380.53 4072.48 m
1389.49 4072.48 l
S
n
2208.97 4072.48 m
2200.01 4072.48 l
S
n
1380.53 4175.93 m
1389.49 4175.93 l
S
n
2208.97 4175.93 m
2200.01 4175.93 l
S
n
1380.53 4279.38 m
1389.49 4279.38 l
S
n
2208.97 4279.38 m
2200.01 4279.38 l
S
n
1380.53 4382.84 m
1389.49 4382.84 l
S
n
2208.97 4382.84 m
2200.01 4382.84 l
S
n
1380.53 4486.29 m
1389.49 4486.29 l
S
n
2208.97 4486.29 m
2200.01 4486.29 l
S
n
1380.53 4589.74 m
1389.49 4589.74 l
S
n
2208.97 4589.74 m
2200.01 4589.74 l
S
n
1380.53 3761.3 m
2208.97 3761.3 l
S
n
1380.53 4589.74 m
2208.97 4589.74 l
S
n
1380.53 3761.3 m
1380.53 4589.74 l
S
n
2208.97 3761.3 m
2208.97 4589.74 l
S
Q
q
n
1321.07 4649.21 m
2217.12 4649.21 l
2217.12 3703.47 l
1321.07 3703.47 l
h
W
n
n
1804.93 4589.74 m
1804.93 4584.34 1800.55 4579.97 1795.16 4579.97 c
1789.76 4579.97 1785.38 4584.34 1785.38 4589.74 c
1785.38 4595.14 1789.76 4599.52 1795.16 4599.52 c
1800.55 4599.52 1804.93 4595.14 1804.93 4589.74 c
[/DeviceRGB] cs 0.0 0.0 1.0 sc
f
n
1804.93 4537.61 m
1804.93 4532.21 1800.55 4527.83 1795.16 4527.83 c
1789.76 4527.83 1785.38 4532.21 1785.38 4537.61 c
1785.38 4543.01 1789.76 4547.38 1795.16 4547.38 c
1800.55 4547.38 1804.93 4543.01 1804.93 4537.61 c
f
n
1804.93 4486.29 m
1804.93 4480.89 1800.55 4476.52 1795.16 4476.52 c
1789.76 4476.52 1785.38 4480.89 1785.38 4486.29 c
1785.38 4491.69 1789.76 4496.07 1795.16 4496.07 c
1800.55 4496.07 1804.93 4491.69 1804.93 4486.29 c
f
n
1804.93 4434.16 m
1804.93 4428.76 1800.55 4424.38 1795.16 4424.38 c
1789.76 4424.38 1785.38 4428.76 1785.38 4434.16 c
1785.38 4439.55 1789.76 4443.93 1795.16 4443.93 c
1800.55 4443.93 1804.93 4439.55 1804.93 4434.16 c
f
n
1804.93 4382.84 m
1804.93 4377.44 1800.55 4373.06 1795.16 4373.06 c
1789.76 4373.06 1785.38 4377.44 1785.38 4382.84 c
1785.38 4388.23 1789.76 4392.61 1795.16 4392.61 c
1800.55 4392.61 1804.93 4388.23 1804.93 4382.84 c
f
n
1804.93 4330.7 m
1804.93 4325.3 1800.55 4320.93 1795.16 4320.93 c
1789.76 4320.93 1785.38 4325.3 1785.38 4330.7 c
1785.38 4336.1 1789.76 4340.48 1795.16 4340.48 c
1800.55 4340.48 1804.93 4336.1 1804.93 4330.7 c
f
n
1804.93 4279.38 m
1804.93 4273.98 1800.55 4269.61 1795.16 4269.61 c
1789.76 4269.61 1785.38 4273.98 1785.38 4279.38 c
1785.38 4284.78 1789.76 4289.16 1795.16 4289.16 c
1800.55 4289.16 1804.93 4284.78 1804.93 4279.38 c
f
n
1804.93 4227.25 m
1804.93 4221.85 1800.55 4217.47 1795.16 4217.47 c
1789.76 4217.47 1785.38 4221.85 1785.38 4227.25 c
1785.38 4232.65 1789.76 4237.02 1795.16 4237.02 c
1800.55 4237.02 1804.93 4232.65 1804.93 4227.25 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1804.93 4123.8 m
1804.93 4118.4 1800.55 4114.02 1795.16 4114.02 c
1789.76 4114.02 1785.38 4118.4 1785.38 4123.8 c
1785.38 4129.2 1789.76 4133.57 1795.16 4133.57 c
1800.55 4133.57 1804.93 4129.2 1804.93 4123.8 c
f
n
1804.93 4072.48 m
1804.93 4067.08 1800.55 4062.7 1795.16 4062.7 c
1789.76 4062.7 1785.38 4067.08 1785.38 4072.48 c
1785.38 4077.88 1789.76 4082.25 1795.16 4082.25 c
1800.55 4082.25 1804.93 4077.88 1804.93 4072.48 c
f
n
1804.93 4020.34 m
1804.93 4014.95 1800.55 4010.57 1795.16 4010.57 c
1789.76 4010.57 1785.38 4014.95 1785.38 4020.34 c
1785.38 4025.74 1789.76 4030.12 1795.16 4030.12 c
1800.55 4030.12 1804.93 4025.74 1804.93 4020.34 c
f
n
1804.93 3968.21 m
1804.93 3962.81 1800.55 3958.43 1795.16 3958.43 c
1789.76 3958.43 1785.38 3962.81 1785.38 3968.21 c
1785.38 3973.61 1789.76 3977.98 1795.16 3977.98 c
1800.55 3977.98 1804.93 3973.61 1804.93 3968.21 c
f
n
1804.93 3916.89 m
1804.93 3911.49 1800.55 3907.11 1795.16 3907.11 c
1789.76 3907.11 1785.38 3911.49 1785.38 3916.89 c
1785.38 3922.29 1789.76 3926.66 1795.16 3926.66 c
1800.55 3926.66 1804.93 3922.29 1804.93 3916.89 c
f
n
1804.93 3864.76 m
1804.93 3859.36 1800.55 3854.98 1795.16 3854.98 c
1789.76 3854.98 1785.38 3859.36 1785.38 3864.76 c
1785.38 3870.16 1789.76 3874.53 1795.16 3874.53 c
1800.55 3874.53 1804.93 3870.16 1804.93 3864.76 c
f
n
1804.93 3813.44 m
1804.93 3808.04 1800.55 3803.66 1795.16 3803.66 c
1789.76 3803.66 1785.38 3808.04 1785.38 3813.44 c
1785.38 3818.84 1789.76 3823.21 1795.16 3823.21 c
1800.55 3823.21 1804.93 3818.84 1804.93 3813.44 c
f
n
1764.2 4587.3 m
1764.2 4581.9 1759.82 4577.52 1754.43 4577.52 c
1749.03 4577.52 1744.65 4581.9 1744.65 4587.3 c
1744.65 4592.7 1749.03 4597.07 1754.43 4597.07 c
1759.82 4597.07 1764.2 4592.7 1764.2 4587.3 c
f
n
1769.09 4535.98 m
1769.09 4530.58 1764.71 4526.2 1759.32 4526.2 c
1753.92 4526.2 1749.54 4530.58 1749.54 4535.98 c
1749.54 4541.38 1753.92 4545.75 1759.32 4545.75 c
1764.71 4545.75 1769.09 4541.38 1769.09 4535.98 c
f
n
1773.98 4484.66 m
1773.98 4479.26 1769.6 4474.89 1764.2 4474.89 c
1758.8 4474.89 1754.43 4479.26 1754.43 4484.66 c
1754.43 4490.06 1758.8 4494.43 1764.2 4494.43 c
1769.6 4494.43 1773.98 4490.06 1773.98 4484.66 c
f
n
1778.87 4432.53 m
1778.87 4427.13 1774.49 4422.75 1769.09 4422.75 c
1763.69 4422.75 1759.32 4427.13 1759.32 4432.53 c
1759.32 4437.93 1763.69 4442.3 1769.09 4442.3 c
1774.49 4442.3 1778.87 4437.93 1778.87 4432.53 c
f
n
1784.57 4381.21 m
1784.57 4375.81 1780.19 4371.43 1774.79 4371.43 c
1769.39 4371.43 1765.02 4375.81 1765.02 4381.21 c
1765.02 4386.61 1769.39 4390.98 1774.79 4390.98 c
1780.19 4390.98 1784.57 4386.61 1784.57 4381.21 c
f
n
1789.46 4329.89 m
1789.46 4324.49 1785.08 4320.11 1779.68 4320.11 c
1774.28 4320.11 1769.91 4324.49 1769.91 4329.89 c
1769.91 4335.29 1774.28 4339.66 1779.68 4339.66 c
1785.08 4339.66 1789.46 4335.29 1789.46 4329.89 c
f
n
1794.34 4278.57 m
1794.34 4273.17 1789.96 4268.79 1784.57 4268.79 c
1779.17 4268.79 1774.79 4273.17 1774.79 4278.57 c
1774.79 4283.97 1779.17 4288.34 1784.57 4288.34 c
1789.96 4288.34 1794.34 4283.97 1794.34 4278.57 c
f
n
1799.23 4227.25 m
1799.23 4221.85 1794.86 4217.47 1789.46 4217.47 c
1784.06 4217.47 1779.68 4221.85 1779.68 4227.25 c
1779.68 4232.65 1784.06 4237.02 1789.46 4237.02 c
1794.86 4237.02 1799.23 4232.65 1799.23 4227.25 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1809.82 4123.8 m
1809.82 4118.4 1805.44 4114.02 1800.04 4114.02 c
1794.64 4114.02 1790.27 4118.4 1790.27 4123.8 c
1790.27 4129.2 1794.64 4133.57 1800.04 4133.57 c
1805.44 4133.57 1809.82 4129.2 1809.82 4123.8 c
f
n
1814.71 4072.48 m
1814.71 4067.08 1810.33 4062.7 1804.93 4062.7 c
1799.54 4062.7 1795.16 4067.08 1795.16 4072.48 c
1795.16 4077.88 1799.54 4082.25 1804.93 4082.25 c
1810.33 4082.25 1814.71 4077.88 1814.71 4072.48 c
f
n
1819.59 4021.16 m
1819.59 4015.76 1815.22 4011.38 1809.82 4011.38 c
1804.42 4011.38 1800.04 4015.76 1800.04 4021.16 c
1800.04 4026.55 1804.42 4030.93 1809.82 4030.93 c
1815.22 4030.93 1819.59 4026.55 1819.59 4021.16 c
f
n
1824.48 3969.84 m
1824.48 3964.44 1820.11 3960.06 1814.71 3960.06 c
1809.31 3960.06 1804.93 3964.44 1804.93 3969.84 c
1804.93 3975.24 1809.31 3979.61 1814.71 3979.61 c
1820.11 3979.61 1824.48 3975.24 1824.48 3969.84 c
f
n
1830.18 3918.52 m
1830.18 3913.12 1825.81 3908.74 1820.41 3908.74 c
1815.01 3908.74 1810.63 3913.12 1810.63 3918.52 c
1810.63 3923.92 1815.01 3928.29 1820.41 3928.29 c
1825.81 3928.29 1830.18 3923.92 1830.18 3918.52 c
f
n
1835.07 3866.39 m
1835.07 3860.99 1830.7 3856.61 1825.3 3856.61 c
1819.9 3856.61 1815.52 3860.99 1815.52 3866.39 c
1815.52 3871.79 1819.9 3876.16 1825.3 3876.16 c
1830.7 3876.16 1835.07 3871.79 1835.07 3866.39 c
f
n
1839.96 3815.07 m
1839.96 3809.67 1835.58 3805.29 1830.18 3805.29 c
1824.79 3805.29 1820.41 3809.67 1820.41 3815.07 c
1820.41 3820.46 1824.79 3824.84 1830.18 3824.84 c
1835.58 3824.84 1839.96 3820.46 1839.96 3815.07 c
f
n
1723.47 4581.6 m
1723.47 4576.2 1719.1 4571.82 1713.7 4571.82 c
1708.3 4571.82 1703.92 4576.2 1703.92 4581.6 c
1703.92 4587.0 1708.3 4591.37 1713.7 4591.37 c
1719.1 4591.37 1723.47 4587.0 1723.47 4581.6 c
f
n
1734.06 4530.28 m
1734.06 4524.88 1729.69 4520.5 1724.29 4520.5 c
1718.89 4520.5 1714.51 4524.88 1714.51 4530.28 c
1714.51 4535.68 1718.89 4540.05 1724.29 4540.05 c
1729.69 4540.05 1734.06 4535.68 1734.06 4530.28 c
f
n
1743.84 4479.77 m
1743.84 4474.38 1739.46 4470.0 1734.06 4470.0 c
1728.66 4470.0 1724.29 4474.38 1724.29 4479.77 c
1724.29 4485.17 1728.66 4489.55 1734.06 4489.55 c
1739.46 4489.55 1743.84 4485.17 1743.84 4479.77 c
f
n
1754.43 4429.27 m
1754.43 4423.87 1750.05 4419.49 1744.65 4419.49 c
1739.25 4419.49 1734.88 4423.87 1734.88 4429.27 c
1734.88 4434.67 1739.25 4439.04 1744.65 4439.04 c
1750.05 4439.04 1754.43 4434.67 1754.43 4429.27 c
f
n
1764.2 4378.76 m
1764.2 4373.36 1759.82 4368.99 1754.43 4368.99 c
1749.03 4368.99 1744.65 4373.36 1744.65 4378.76 c
1744.65 4384.16 1749.03 4388.54 1754.43 4388.54 c
1759.82 4388.54 1764.2 4384.16 1764.2 4378.76 c
f
n
1773.98 4327.45 m
1773.98 4322.05 1769.6 4317.67 1764.2 4317.67 c
1758.8 4317.67 1754.43 4322.05 1754.43 4327.45 c
1754.43 4332.84 1758.8 4337.22 1764.2 4337.22 c
1769.6 4337.22 1773.98 4332.84 1773.98 4327.45 c
f
n
1784.57 4276.94 m
1784.57 4271.54 1780.19 4267.16 1774.79 4267.16 c
1769.39 4267.16 1765.02 4271.54 1765.02 4276.94 c
1765.02 4282.34 1769.39 4286.71 1774.79 4286.71 c
1780.19 4286.71 1784.57 4282.34 1784.57 4276.94 c
f
n
1794.34 4226.43 m
1794.34 4221.04 1789.96 4216.66 1784.57 4216.66 c
1779.17 4216.66 1774.79 4221.04 1774.79 4226.43 c
1774.79 4231.83 1779.17 4236.21 1784.57 4236.21 c
1789.96 4236.21 1794.34 4231.83 1794.34 4226.43 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1814.71 4124.61 m
1814.71 4119.21 1810.33 4114.84 1804.93 4114.84 c
1799.54 4114.84 1795.16 4119.21 1795.16 4124.61 c
1795.16 4130.01 1799.54 4134.39 1804.93 4134.39 c
1810.33 4134.39 1814.71 4130.01 1814.71 4124.61 c
f
n
1824.48 4074.11 m
1824.48 4068.71 1820.11 4064.33 1814.71 4064.33 c
1809.31 4064.33 1804.93 4068.71 1804.93 4074.11 c
1804.93 4079.5 1809.31 4083.88 1814.71 4083.88 c
1820.11 4083.88 1824.48 4079.5 1824.48 4074.11 c
f
n
1835.07 4023.6 m
1835.07 4018.2 1830.7 4013.83 1825.3 4013.83 c
1819.9 4013.83 1815.52 4018.2 1815.52 4023.6 c
1815.52 4029.0 1819.9 4033.38 1825.3 4033.38 c
1830.7 4033.38 1835.07 4029.0 1835.07 4023.6 c
f
n
1844.85 3972.28 m
1844.85 3966.88 1840.47 3962.51 1835.07 3962.51 c
1829.68 3962.51 1825.3 3966.88 1825.3 3972.28 c
1825.3 3977.68 1829.68 3982.06 1835.07 3982.06 c
1840.47 3982.06 1844.85 3977.68 1844.85 3972.28 c
f
n
1854.62 3921.78 m
1854.62 3916.38 1850.25 3912.0 1844.85 3912.0 c
1839.45 3912.0 1835.07 3916.38 1835.07 3921.78 c
1835.07 3927.18 1839.45 3931.55 1844.85 3931.55 c
1850.25 3931.55 1854.62 3927.18 1854.62 3921.78 c
f
n
1865.21 3871.27 m
1865.21 3865.88 1860.84 3861.5 1855.44 3861.5 c
1850.04 3861.5 1845.66 3865.88 1845.66 3871.27 c
1845.66 3876.67 1850.04 3881.05 1855.44 3881.05 c
1860.84 3881.05 1865.21 3876.67 1865.21 3871.27 c
f
n
1874.99 3820.77 m
1874.99 3815.37 1870.61 3810.99 1865.21 3810.99 c
1859.81 3810.99 1855.44 3815.37 1855.44 3820.77 c
1855.44 3826.17 1859.81 3830.54 1865.21 3830.54 c
1870.61 3830.54 1874.99 3826.17 1874.99 3820.77 c
f
n
1684.37 4571.82 m
1684.37 4566.42 1680.0 4562.05 1674.6 4562.05 c
1669.2 4562.05 1664.82 4566.42 1664.82 4571.82 c
1664.82 4577.22 1669.2 4581.6 1674.6 4581.6 c
1680.0 4581.6 1684.37 4577.22 1684.37 4571.82 c
f
n
1699.04 4522.13 m
1699.04 4516.73 1694.66 4512.36 1689.26 4512.36 c
1683.86 4512.36 1679.48 4516.73 1679.48 4522.13 c
1679.48 4527.53 1683.86 4531.91 1689.26 4531.91 c
1694.66 4531.91 1699.04 4527.53 1699.04 4522.13 c
f
n
1714.51 4472.44 m
1714.51 4467.04 1710.14 4462.67 1704.74 4462.67 c
1699.34 4462.67 1694.96 4467.04 1694.96 4472.44 c
1694.96 4477.84 1699.34 4482.21 1704.74 4482.21 c
1710.14 4482.21 1714.51 4477.84 1714.51 4472.44 c
f
n
1729.18 4422.75 m
1729.18 4417.35 1724.8 4412.98 1719.4 4412.98 c
1714.0 4412.98 1709.62 4417.35 1709.62 4422.75 c
1709.62 4428.15 1714.0 4432.53 1719.4 4432.53 c
1724.8 4432.53 1729.18 4428.15 1729.18 4422.75 c
f
n
1744.65 4373.88 m
1744.65 4368.48 1740.28 4364.1 1734.88 4364.1 c
1729.48 4364.1 1725.1 4368.48 1725.1 4373.88 c
1725.1 4379.27 1729.48 4383.65 1734.88 4383.65 c
1740.28 4383.65 1744.65 4379.27 1744.65 4373.88 c
f
n
1759.32 4324.19 m
1759.32 4318.79 1754.94 4314.41 1749.54 4314.41 c
1744.14 4314.41 1739.77 4318.79 1739.77 4324.19 c
1739.77 4329.59 1744.14 4333.96 1749.54 4333.96 c
1754.94 4333.96 1759.32 4329.59 1759.32 4324.19 c
f
n
1774.79 4274.5 m
1774.79 4269.1 1770.41 4264.72 1765.02 4264.72 c
1759.62 4264.72 1755.24 4269.1 1755.24 4274.5 c
1755.24 4279.89 1759.62 4284.27 1765.02 4284.27 c
1770.41 4284.27 1774.79 4279.89 1774.79 4274.5 c
f
n
1789.46 4224.8 m
1789.46 4219.41 1785.08 4215.03 1779.68 4215.03 c
1774.28 4215.03 1769.91 4219.41 1769.91 4224.8 c
1769.91 4230.2 1774.28 4234.58 1779.68 4234.58 c
1785.08 4234.58 1789.46 4230.2 1789.46 4224.8 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1819.59 4126.24 m
1819.59 4120.84 1815.22 4116.46 1809.82 4116.46 c
1804.42 4116.46 1800.04 4120.84 1800.04 4126.24 c
1800.04 4131.64 1804.42 4136.02 1809.82 4136.02 c
1815.22 4136.02 1819.59 4131.64 1819.59 4126.24 c
f
n
1834.26 4076.55 m
1834.26 4071.15 1829.88 4066.77 1824.48 4066.77 c
1819.09 4066.77 1814.71 4071.15 1814.71 4076.55 c
1814.71 4081.95 1819.09 4086.32 1824.48 4086.32 c
1829.88 4086.32 1834.26 4081.95 1834.26 4076.55 c
f
n
1849.73 4026.86 m
1849.73 4021.46 1845.36 4017.09 1839.96 4017.09 c
1834.56 4017.09 1830.18 4021.46 1830.18 4026.86 c
1830.18 4032.26 1834.56 4036.64 1839.96 4036.64 c
1845.36 4036.64 1849.73 4032.26 1849.73 4026.86 c
f
n
1864.4 3977.17 m
1864.4 3971.77 1860.02 3967.39 1854.62 3967.39 c
1849.22 3967.39 1844.85 3971.77 1844.85 3977.17 c
1844.85 3982.57 1849.22 3986.95 1854.62 3986.95 c
1860.02 3986.95 1864.4 3982.57 1864.4 3977.17 c
f
n
1879.88 3928.29 m
1879.88 3922.89 1875.5 3918.52 1870.1 3918.52 c
1864.7 3918.52 1860.32 3922.89 1860.32 3928.29 c
1860.32 3933.69 1864.7 3938.07 1870.1 3938.07 c
1875.5 3938.07 1879.88 3933.69 1879.88 3928.29 c
f
n
1894.54 3878.61 m
1894.54 3873.21 1890.16 3868.83 1884.76 3868.83 c
1879.36 3868.83 1874.99 3873.21 1874.99 3878.61 c
1874.99 3884.0 1879.36 3888.38 1884.76 3888.38 c
1890.16 3888.38 1894.54 3884.0 1894.54 3878.61 c
f
n
1910.02 3828.91 m
1910.02 3823.52 1905.64 3819.14 1900.24 3819.14 c
1894.84 3819.14 1890.46 3823.52 1890.46 3828.91 c
1890.46 3834.31 1894.84 3838.69 1900.24 3838.69 c
1905.64 3838.69 1910.02 3834.31 1910.02 3828.91 c
f
n
1646.09 4557.97 m
1646.09 4552.57 1641.71 4548.2 1636.31 4548.2 c
1630.91 4548.2 1626.54 4552.57 1626.54 4557.97 c
1626.54 4563.37 1630.91 4567.75 1636.31 4567.75 c
1641.71 4567.75 1646.09 4563.37 1646.09 4557.97 c
f
n
1665.64 4509.91 m
1665.64 4504.52 1661.26 4500.14 1655.86 4500.14 c
1650.46 4500.14 1646.09 4504.52 1646.09 4509.91 c
1646.09 4515.31 1650.46 4519.69 1655.86 4519.69 c
1661.26 4519.69 1665.64 4515.31 1665.64 4509.91 c
f
n
1686.0 4461.85 m
1686.0 4456.45 1681.62 4452.08 1676.23 4452.08 c
1670.83 4452.08 1666.45 4456.45 1666.45 4461.85 c
1666.45 4467.25 1670.83 4471.62 1676.23 4471.62 c
1681.62 4471.62 1686.0 4467.25 1686.0 4461.85 c
f
n
1705.55 4414.61 m
1705.55 4409.21 1701.18 4404.83 1695.78 4404.83 c
1690.38 4404.83 1686.0 4409.21 1686.0 4414.61 c
1686.0 4420.0 1690.38 4424.38 1695.78 4424.38 c
1701.18 4424.38 1705.55 4420.0 1705.55 4414.61 c
f
n
1725.1 4366.54 m
1725.1 4361.14 1720.73 4356.77 1715.33 4356.77 c
1709.93 4356.77 1705.55 4361.14 1705.55 4366.54 c
1705.55 4371.94 1709.93 4376.32 1715.33 4376.32 c
1720.73 4376.32 1725.1 4371.94 1725.1 4366.54 c
f
n
1745.47 4318.48 m
1745.47 4313.09 1741.09 4308.71 1735.69 4308.71 c
1730.29 4308.71 1725.92 4313.09 1725.92 4318.48 c
1725.92 4323.88 1730.29 4328.26 1735.69 4328.26 c
1741.09 4328.26 1745.47 4323.88 1745.47 4318.48 c
f
n
1765.02 4271.24 m
1765.02 4265.84 1760.64 4261.46 1755.24 4261.46 c
1749.84 4261.46 1745.47 4265.84 1745.47 4271.24 c
1745.47 4276.64 1749.84 4281.01 1755.24 4281.01 c
1760.64 4281.01 1765.02 4276.64 1765.02 4271.24 c
f
n
1784.57 4223.18 m
1784.57 4217.78 1780.19 4213.4 1774.79 4213.4 c
1769.39 4213.4 1765.02 4217.78 1765.02 4223.18 c
1765.02 4228.57 1769.39 4232.95 1774.79 4232.95 c
1780.19 4232.95 1784.57 4228.57 1784.57 4223.18 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1824.48 4127.87 m
1824.48 4122.47 1820.11 4118.09 1814.71 4118.09 c
1809.31 4118.09 1804.93 4122.47 1804.93 4127.87 c
1804.93 4133.27 1809.31 4137.64 1814.71 4137.64 c
1820.11 4137.64 1824.48 4133.27 1824.48 4127.87 c
f
n
1844.03 4079.81 m
1844.03 4074.41 1839.66 4070.04 1834.26 4070.04 c
1828.86 4070.04 1824.48 4074.41 1824.48 4079.81 c
1824.48 4085.21 1828.86 4089.58 1834.26 4089.58 c
1839.66 4089.58 1844.03 4085.21 1844.03 4079.81 c
f
n
1863.58 4032.56 m
1863.58 4027.16 1859.21 4022.79 1853.81 4022.79 c
1848.41 4022.79 1844.03 4027.16 1844.03 4032.56 c
1844.03 4037.96 1848.41 4042.34 1853.81 4042.34 c
1859.21 4042.34 1863.58 4037.96 1863.58 4032.56 c
f
n
1883.95 3984.5 m
1883.95 3979.1 1879.57 3974.73 1874.17 3974.73 c
1868.77 3974.73 1864.4 3979.1 1864.4 3984.5 c
1864.4 3989.9 1868.77 3994.28 1874.17 3994.28 c
1879.57 3994.28 1883.95 3989.9 1883.95 3984.5 c
f
n
1903.5 3936.44 m
1903.5 3931.04 1899.12 3926.66 1893.72 3926.66 c
1888.32 3926.66 1883.95 3931.04 1883.95 3936.44 c
1883.95 3941.84 1888.32 3946.21 1893.72 3946.21 c
1899.12 3946.21 1903.5 3941.84 1903.5 3936.44 c
f
n
1923.05 3889.2 m
1923.05 3883.8 1918.67 3879.42 1913.27 3879.42 c
1907.88 3879.42 1903.5 3883.8 1903.5 3889.2 c
1903.5 3894.59 1907.88 3898.97 1913.27 3898.97 c
1918.67 3898.97 1923.05 3894.59 1923.05 3889.2 c
f
n
1943.41 3841.13 m
1943.41 3835.73 1939.04 3831.36 1933.64 3831.36 c
1928.24 3831.36 1923.86 3835.73 1923.86 3841.13 c
1923.86 3846.53 1928.24 3850.91 1933.64 3850.91 c
1939.04 3850.91 1943.41 3846.53 1943.41 3841.13 c
f
n
1609.43 4540.87 m
1609.43 4535.47 1605.05 4531.09 1599.66 4531.09 c
1594.26 4531.09 1589.88 4535.47 1589.88 4540.87 c
1589.88 4546.27 1594.26 4550.64 1599.66 4550.64 c
1605.05 4550.64 1609.43 4546.27 1609.43 4540.87 c
f
n
1633.87 4495.25 m
1633.87 4489.85 1629.49 4485.48 1624.09 4485.48 c
1618.7 4485.48 1614.32 4489.85 1614.32 4495.25 c
1614.32 4500.65 1618.7 4505.02 1624.09 4505.02 c
1629.49 4505.02 1633.87 4500.65 1633.87 4495.25 c
f
n
1658.3 4449.63 m
1658.3 4444.23 1653.93 4439.86 1648.53 4439.86 c
1643.13 4439.86 1638.75 4444.23 1638.75 4449.63 c
1638.75 4455.03 1643.13 4459.41 1648.53 4459.41 c
1653.93 4459.41 1658.3 4455.03 1658.3 4449.63 c
f
n
1682.74 4404.02 m
1682.74 4398.62 1678.37 4394.24 1672.97 4394.24 c
1667.57 4394.24 1663.2 4398.62 1663.2 4404.02 c
1663.2 4409.41 1667.57 4413.79 1672.97 4413.79 c
1678.37 4413.79 1682.74 4409.41 1682.74 4404.02 c
f
n
1707.18 4358.4 m
1707.18 4353.0 1702.8 4348.62 1697.41 4348.62 c
1692.01 4348.62 1687.63 4353.0 1687.63 4358.4 c
1687.63 4363.8 1692.01 4368.17 1697.41 4368.17 c
1702.8 4368.17 1707.18 4363.8 1707.18 4358.4 c
f
n
1731.62 4312.78 m
1731.62 4307.38 1727.24 4303.01 1721.84 4303.01 c
1716.45 4303.01 1712.07 4307.38 1712.07 4312.78 c
1712.07 4318.18 1716.45 4322.56 1721.84 4322.56 c
1727.24 4322.56 1731.62 4318.18 1731.62 4312.78 c
f
n
1756.06 4267.16 m
1756.06 4261.77 1751.68 4257.39 1746.28 4257.39 c
1740.88 4257.39 1736.51 4261.77 1736.51 4267.16 c
1736.51 4272.56 1740.88 4276.94 1746.28 4276.94 c
1751.68 4276.94 1756.06 4272.56 1756.06 4267.16 c
f
n
1780.5 4221.55 m
1780.5 4216.15 1776.12 4211.77 1770.72 4211.77 c
1765.32 4211.77 1760.95 4216.15 1760.95 4221.55 c
1760.95 4226.95 1765.32 4231.32 1770.72 4231.32 c
1776.12 4231.32 1780.5 4226.95 1780.5 4221.55 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1828.55 4129.5 m
1828.55 4124.1 1824.18 4119.72 1818.78 4119.72 c
1813.38 4119.72 1809.0 4124.1 1809.0 4129.5 c
1809.0 4134.9 1813.38 4139.27 1818.78 4139.27 c
1824.18 4139.27 1828.55 4134.9 1828.55 4129.5 c
f
n
1852.99 4083.88 m
1852.99 4078.48 1848.62 4074.11 1843.22 4074.11 c
1837.82 4074.11 1833.44 4078.48 1833.44 4083.88 c
1833.44 4089.28 1837.82 4093.66 1843.22 4093.66 c
1848.62 4093.66 1852.99 4089.28 1852.99 4083.88 c
f
n
1877.43 4038.27 m
1877.43 4032.87 1873.05 4028.49 1867.66 4028.49 c
1862.26 4028.49 1857.88 4032.87 1857.88 4038.27 c
1857.88 4043.66 1862.26 4048.04 1867.66 4048.04 c
1873.05 4048.04 1877.43 4043.66 1877.43 4038.27 c
f
n
1901.87 3992.65 m
1901.87 3987.25 1897.49 3982.87 1892.09 3982.87 c
1886.7 3982.87 1882.32 3987.25 1882.32 3992.65 c
1882.32 3998.05 1886.7 4002.42 1892.09 4002.42 c
1897.49 4002.42 1901.87 3998.05 1901.87 3992.65 c
f
n
1926.3 3947.03 m
1926.3 3941.63 1921.93 3937.25 1916.53 3937.25 c
1911.13 3937.25 1906.76 3941.63 1906.76 3947.03 c
1906.76 3952.43 1911.13 3956.8 1916.53 3956.8 c
1921.93 3956.8 1926.3 3952.43 1926.3 3947.03 c
f
n
1950.75 3901.41 m
1950.75 3896.02 1946.37 3891.64 1940.97 3891.64 c
1935.57 3891.64 1931.2 3896.02 1931.2 3901.41 c
1931.2 3906.81 1935.57 3911.19 1940.97 3911.19 c
1946.37 3911.19 1950.75 3906.81 1950.75 3901.41 c
f
n
1975.18 3855.8 m
1975.18 3850.4 1970.8 3846.02 1965.41 3846.02 c
1960.01 3846.02 1955.63 3850.4 1955.63 3855.8 c
1955.63 3861.2 1960.01 3865.57 1965.41 3865.57 c
1970.8 3865.57 1975.18 3861.2 1975.18 3855.8 c
f
n
1574.4 4519.69 m
1574.4 4514.29 1570.03 4509.91 1564.63 4509.91 c
1559.23 4509.91 1554.85 4514.29 1554.85 4519.69 c
1554.85 4525.09 1559.23 4529.46 1564.63 4529.46 c
1570.03 4529.46 1574.4 4525.09 1574.4 4519.69 c
f
n
1603.73 4476.52 m
1603.73 4471.12 1599.35 4466.74 1593.95 4466.74 c
1588.55 4466.74 1584.18 4471.12 1584.18 4476.52 c
1584.18 4481.91 1588.55 4486.29 1593.95 4486.29 c
1599.35 4486.29 1603.73 4481.91 1603.73 4476.52 c
f
n
1632.24 4433.34 m
1632.24 4427.94 1627.86 4423.57 1622.46 4423.57 c
1617.07 4423.57 1612.69 4427.94 1612.69 4433.34 c
1612.69 4438.74 1617.07 4443.12 1622.46 4443.12 c
1627.86 4443.12 1632.24 4438.74 1632.24 4433.34 c
f
n
1660.75 4390.17 m
1660.75 4384.77 1656.37 4380.39 1650.97 4380.39 c
1645.57 4380.39 1641.2 4384.77 1641.2 4390.17 c
1641.2 4395.57 1645.57 4399.94 1650.97 4399.94 c
1656.37 4399.94 1660.75 4395.57 1660.75 4390.17 c
f
n
1689.26 4347.81 m
1689.26 4342.41 1684.88 4338.04 1679.48 4338.04 c
1674.09 4338.04 1669.71 4342.41 1669.71 4347.81 c
1669.71 4353.21 1674.09 4357.59 1679.48 4357.59 c
1684.88 4357.59 1689.26 4353.21 1689.26 4347.81 c
f
n
1718.59 4304.64 m
1718.59 4299.24 1714.21 4294.86 1708.81 4294.86 c
1703.41 4294.86 1699.04 4299.24 1699.04 4304.64 c
1699.04 4310.04 1703.41 4314.41 1708.81 4314.41 c
1714.21 4314.41 1718.59 4310.04 1718.59 4304.64 c
f
n
1747.1 4261.46 m
1747.1 4256.06 1742.72 4251.69 1737.32 4251.69 c
1731.92 4251.69 1727.55 4256.06 1727.55 4261.46 c
1727.55 4266.86 1731.92 4271.24 1737.32 4271.24 c
1742.72 4271.24 1747.1 4266.86 1747.1 4261.46 c
f
n
1775.61 4218.29 m
1775.61 4212.89 1771.23 4208.52 1765.83 4208.52 c
1760.43 4208.52 1756.06 4212.89 1756.06 4218.29 c
1756.06 4223.69 1760.43 4228.06 1765.83 4228.06 c
1771.23 4228.06 1775.61 4223.69 1775.61 4218.29 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1833.44 4132.76 m
1833.44 4127.36 1829.07 4122.98 1823.67 4122.98 c
1818.27 4122.98 1813.89 4127.36 1813.89 4132.76 c
1813.89 4138.16 1818.27 4142.53 1823.67 4142.53 c
1829.07 4142.53 1833.44 4138.16 1833.44 4132.76 c
f
n
1861.95 4089.58 m
1861.95 4084.18 1857.58 4079.81 1852.18 4079.81 c
1846.78 4079.81 1842.4 4084.18 1842.4 4089.58 c
1842.4 4094.98 1846.78 4099.36 1852.18 4099.36 c
1857.58 4099.36 1861.95 4094.98 1861.95 4089.58 c
f
n
1890.46 4046.41 m
1890.46 4041.01 1886.09 4036.64 1880.69 4036.64 c
1875.29 4036.64 1870.91 4041.01 1870.91 4046.41 c
1870.91 4051.81 1875.29 4056.18 1880.69 4056.18 c
1886.09 4056.18 1890.46 4051.81 1890.46 4046.41 c
f
n
1919.79 4003.24 m
1919.79 3997.84 1915.41 3993.46 1910.02 3993.46 c
1904.62 3993.46 1900.24 3997.84 1900.24 4003.24 c
1900.24 4008.64 1904.62 4013.01 1910.02 4013.01 c
1915.41 4013.01 1919.79 4008.64 1919.79 4003.24 c
f
n
1948.3 3960.88 m
1948.3 3955.48 1943.93 3951.1 1938.53 3951.1 c
1933.13 3951.1 1928.75 3955.48 1928.75 3960.88 c
1928.75 3966.28 1933.13 3970.65 1938.53 3970.65 c
1943.93 3970.65 1948.3 3966.28 1948.3 3960.88 c
f
n
1976.81 3917.7 m
1976.81 3912.3 1972.43 3907.93 1967.04 3907.93 c
1961.64 3907.93 1957.26 3912.3 1957.26 3917.7 c
1957.26 3923.1 1961.64 3927.48 1967.04 3927.48 c
1972.43 3927.48 1976.81 3923.1 1976.81 3917.7 c
f
n
2005.32 3874.53 m
2005.32 3869.13 2000.95 3864.76 1995.55 3864.76 c
1990.15 3864.76 1985.77 3869.13 1985.77 3874.53 c
1985.77 3879.93 1990.15 3884.3 1995.55 3884.3 c
2000.95 3884.3 2005.32 3879.93 2005.32 3874.53 c
f
n
1541.82 4495.25 m
1541.82 4489.85 1537.44 4485.48 1532.04 4485.48 c
1526.64 4485.48 1522.27 4489.85 1522.27 4495.25 c
1522.27 4500.65 1526.64 4505.02 1532.04 4505.02 c
1537.44 4505.02 1541.82 4500.65 1541.82 4495.25 c
f
n
1575.22 4455.34 m
1575.22 4449.94 1570.84 4445.56 1565.44 4445.56 c
1560.04 4445.56 1555.67 4449.94 1555.67 4455.34 c
1555.67 4460.73 1560.04 4465.11 1565.44 4465.11 c
1570.84 4465.11 1575.22 4460.73 1575.22 4455.34 c
f
n
1607.8 4415.42 m
1607.8 4410.02 1603.43 4405.64 1598.03 4405.64 c
1592.63 4405.64 1588.25 4410.02 1588.25 4415.42 c
1588.25 4420.82 1592.63 4425.2 1598.03 4425.2 c
1603.43 4425.2 1607.8 4420.82 1607.8 4415.42 c
f
n
1640.39 4375.5 m
1640.39 4370.11 1636.01 4365.73 1630.61 4365.73 c
1625.21 4365.73 1620.84 4370.11 1620.84 4375.5 c
1620.84 4380.9 1625.21 4385.28 1630.61 4385.28 c
1636.01 4385.28 1640.39 4380.9 1640.39 4375.5 c
f
n
1672.97 4335.59 m
1672.97 4330.19 1668.59 4325.82 1663.2 4325.82 c
1657.8 4325.82 1653.42 4330.19 1653.42 4335.59 c
1653.42 4340.99 1657.8 4345.36 1663.2 4345.36 c
1668.59 4345.36 1672.97 4340.99 1672.97 4335.59 c
f
n
1706.37 4295.68 m
1706.37 4290.28 1701.99 4285.9 1696.59 4285.9 c
1691.19 4285.9 1686.82 4290.28 1686.82 4295.68 c
1686.82 4301.07 1691.19 4305.45 1696.59 4305.45 c
1701.99 4305.45 1706.37 4301.07 1706.37 4295.68 c
f
n
1738.95 4255.76 m
1738.95 4250.36 1734.57 4245.98 1729.18 4245.98 c
1723.78 4245.98 1719.4 4250.36 1719.4 4255.76 c
1719.4 4261.16 1723.78 4265.54 1729.18 4265.54 c
1734.57 4265.54 1738.95 4261.16 1738.95 4255.76 c
f
n
1771.54 4215.84 m
1771.54 4210.45 1767.16 4206.07 1761.76 4206.07 c
1756.36 4206.07 1751.98 4210.45 1751.98 4215.84 c
1751.98 4221.24 1756.36 4225.62 1761.76 4225.62 c
1767.16 4225.62 1771.54 4221.24 1771.54 4215.84 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1837.52 4135.2 m
1837.52 4129.8 1833.14 4125.43 1827.74 4125.43 c
1822.34 4125.43 1817.96 4129.8 1817.96 4135.2 c
1817.96 4140.6 1822.34 4144.98 1827.74 4144.98 c
1833.14 4144.98 1837.52 4140.6 1837.52 4135.2 c
f
n
1870.1 4095.29 m
1870.1 4089.89 1865.72 4085.51 1860.32 4085.51 c
1854.93 4085.51 1850.55 4089.89 1850.55 4095.29 c
1850.55 4100.68 1854.93 4105.06 1860.32 4105.06 c
1865.72 4105.06 1870.1 4100.68 1870.1 4095.29 c
f
n
1902.68 4055.37 m
1902.68 4049.97 1898.31 4045.59 1892.91 4045.59 c
1887.51 4045.59 1883.13 4049.97 1883.13 4055.37 c
1883.13 4060.77 1887.51 4065.14 1892.91 4065.14 c
1898.31 4065.14 1902.68 4060.77 1902.68 4055.37 c
f
n
1936.08 4015.46 m
1936.08 4010.06 1931.7 4005.68 1926.3 4005.68 c
1920.91 4005.68 1916.53 4010.06 1916.53 4015.46 c
1916.53 4020.86 1920.91 4025.23 1926.3 4025.23 c
1931.7 4025.23 1936.08 4020.86 1936.08 4015.46 c
f
n
1968.66 3975.54 m
1968.66 3970.14 1964.29 3965.77 1958.89 3965.77 c
1953.49 3965.77 1949.11 3970.14 1949.11 3975.54 c
1949.11 3980.94 1953.49 3985.32 1958.89 3985.32 c
1964.29 3985.32 1968.66 3980.94 1968.66 3975.54 c
f
n
2001.25 3935.62 m
2001.25 3930.23 1996.87 3925.85 1991.47 3925.85 c
1986.07 3925.85 1981.7 3930.23 1981.7 3935.62 c
1981.7 3941.02 1986.07 3945.4 1991.47 3945.4 c
1996.87 3945.4 2001.25 3941.02 2001.25 3935.62 c
f
n
2033.83 3895.71 m
2033.83 3890.31 2029.46 3885.94 2024.06 3885.94 c
2018.66 3885.94 2014.28 3890.31 2014.28 3895.71 c
2014.28 3901.11 2018.66 3905.48 2024.06 3905.48 c
2029.46 3905.48 2033.83 3901.11 2033.83 3895.71 c
f
n
1511.68 4468.37 m
1511.68 4462.97 1507.3 4458.59 1501.91 4458.59 c
1496.51 4458.59 1492.13 4462.97 1492.13 4468.37 c
1492.13 4473.77 1496.51 4478.14 1501.91 4478.14 c
1507.3 4478.14 1511.68 4473.77 1511.68 4468.37 c
f
n
1548.34 4431.71 m
1548.34 4426.31 1543.96 4421.94 1538.56 4421.94 c
1533.16 4421.94 1528.79 4426.31 1528.79 4431.71 c
1528.79 4437.11 1533.16 4441.49 1538.56 4441.49 c
1543.96 4441.49 1548.34 4437.11 1548.34 4431.71 c
f
n
1584.99 4395.05 m
1584.99 4389.66 1580.62 4385.28 1575.22 4385.28 c
1569.82 4385.28 1565.44 4389.66 1565.44 4395.05 c
1565.44 4400.45 1569.82 4404.83 1575.22 4404.83 c
1580.62 4404.83 1584.99 4400.45 1584.99 4395.05 c
f
n
1621.65 4358.4 m
1621.65 4353.0 1617.27 4348.62 1611.88 4348.62 c
1606.48 4348.62 1602.1 4353.0 1602.1 4358.4 c
1602.1 4363.8 1606.48 4368.17 1611.88 4368.17 c
1617.27 4368.17 1621.65 4363.8 1621.65 4358.4 c
f
n
1658.3 4321.74 m
1658.3 4316.34 1653.93 4311.97 1648.53 4311.97 c
1643.13 4311.97 1638.75 4316.34 1638.75 4321.74 c
1638.75 4327.14 1643.13 4331.52 1648.53 4331.52 c
1653.93 4331.52 1658.3 4327.14 1658.3 4321.74 c
f
n
1694.96 4285.09 m
1694.96 4279.69 1690.59 4275.31 1685.19 4275.31 c
1679.79 4275.31 1675.41 4279.69 1675.41 4285.09 c
1675.41 4290.48 1679.79 4294.86 1685.19 4294.86 c
1690.59 4294.86 1694.96 4290.48 1694.96 4285.09 c
f
n
1731.62 4248.43 m
1731.62 4243.03 1727.24 4238.65 1721.84 4238.65 c
1716.45 4238.65 1712.07 4243.03 1712.07 4248.43 c
1712.07 4253.83 1716.45 4258.2 1721.84 4258.2 c
1727.24 4258.2 1731.62 4253.83 1731.62 4248.43 c
f
n
1768.28 4211.77 m
1768.28 4206.38 1763.9 4202.0 1758.5 4202.0 c
1753.1 4202.0 1748.73 4206.38 1748.73 4211.77 c
1748.73 4217.17 1753.1 4221.55 1758.5 4221.55 c
1763.9 4221.55 1768.28 4217.17 1768.28 4211.77 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1840.77 4139.27 m
1840.77 4133.88 1836.4 4129.5 1831.0 4129.5 c
1825.6 4129.5 1821.22 4133.88 1821.22 4139.27 c
1821.22 4144.67 1825.6 4149.05 1831.0 4149.05 c
1836.4 4149.05 1840.77 4144.67 1840.77 4139.27 c
f
n
1877.43 4102.62 m
1877.43 4097.22 1873.05 4092.84 1867.66 4092.84 c
1862.26 4092.84 1857.88 4097.22 1857.88 4102.62 c
1857.88 4108.02 1862.26 4112.39 1867.66 4112.39 c
1873.05 4112.39 1877.43 4108.02 1877.43 4102.62 c
f
n
1914.09 4065.96 m
1914.09 4060.56 1909.71 4056.18 1904.31 4056.18 c
1898.91 4056.18 1894.54 4060.56 1894.54 4065.96 c
1894.54 4071.36 1898.91 4075.73 1904.31 4075.73 c
1909.71 4075.73 1914.09 4071.36 1914.09 4065.96 c
f
n
1950.75 4029.3 m
1950.75 4023.91 1946.37 4019.53 1940.97 4019.53 c
1935.57 4019.53 1931.2 4023.91 1931.2 4029.3 c
1931.2 4034.7 1935.57 4039.08 1940.97 4039.08 c
1946.37 4039.08 1950.75 4034.7 1950.75 4029.3 c
f
n
1987.4 3992.65 m
1987.4 3987.25 1983.02 3982.87 1977.62 3982.87 c
1972.23 3982.87 1967.85 3987.25 1967.85 3992.65 c
1967.85 3998.05 1972.23 4002.42 1977.62 4002.42 c
1983.02 4002.42 1987.4 3998.05 1987.4 3992.65 c
f
n
2024.06 3955.99 m
2024.06 3950.59 2019.68 3946.21 2014.28 3946.21 c
2008.88 3946.21 2004.51 3950.59 2004.51 3955.99 c
2004.51 3961.39 2008.88 3965.77 2014.28 3965.77 c
2019.68 3965.77 2024.06 3961.39 2024.06 3955.99 c
f
n
2060.71 3919.33 m
2060.71 3913.93 2056.34 3909.56 2050.94 3909.56 c
2045.54 3909.56 2041.16 3913.93 2041.16 3919.33 c
2041.16 3924.73 2045.54 3929.11 2050.94 3929.11 c
2056.34 3929.11 2060.71 3924.73 2060.71 3919.33 c
f
n
1484.8 4438.23 m
1484.8 4432.83 1480.42 4428.45 1475.02 4428.45 c
1469.62 4428.45 1465.25 4432.83 1465.25 4438.23 c
1465.25 4443.63 1469.62 4448.0 1475.02 4448.0 c
1480.42 4448.0 1484.8 4443.63 1484.8 4438.23 c
f
n
1524.71 4404.83 m
1524.71 4399.43 1520.34 4395.05 1514.94 4395.05 c
1509.54 4395.05 1505.16 4399.43 1505.16 4404.83 c
1505.16 4410.23 1509.54 4414.61 1514.94 4414.61 c
1520.34 4414.61 1524.71 4410.23 1524.71 4404.83 c
f
n
1564.63 4372.25 m
1564.63 4366.85 1560.25 4362.47 1554.85 4362.47 c
1549.45 4362.47 1545.08 4366.85 1545.08 4372.25 c
1545.08 4377.64 1549.45 4382.02 1554.85 4382.02 c
1560.25 4382.02 1564.63 4377.64 1564.63 4372.25 c
f
n
1604.54 4339.66 m
1604.54 4334.27 1600.17 4329.89 1594.77 4329.89 c
1589.37 4329.89 1584.99 4334.27 1584.99 4339.66 c
1584.99 4345.06 1589.37 4349.44 1594.77 4349.44 c
1600.17 4349.44 1604.54 4345.06 1604.54 4339.66 c
f
n
1644.46 4307.08 m
1644.46 4301.68 1640.08 4297.3 1634.68 4297.3 c
1629.29 4297.3 1624.91 4301.68 1624.91 4307.08 c
1624.91 4312.48 1629.29 4316.86 1634.68 4316.86 c
1640.08 4316.86 1644.46 4312.48 1644.46 4307.08 c
f
n
1684.37 4273.68 m
1684.37 4268.28 1680.0 4263.91 1674.6 4263.91 c
1669.2 4263.91 1664.82 4268.28 1664.82 4273.68 c
1664.82 4279.08 1669.2 4283.46 1674.6 4283.46 c
1680.0 4283.46 1684.37 4279.08 1684.37 4273.68 c
f
n
1724.29 4241.1 m
1724.29 4235.7 1719.91 4231.32 1714.51 4231.32 c
1709.11 4231.32 1704.74 4235.7 1704.74 4241.1 c
1704.74 4246.5 1709.11 4250.87 1714.51 4250.87 c
1719.91 4250.87 1724.29 4246.5 1724.29 4241.1 c
f
n
1764.2 4208.52 m
1764.2 4203.12 1759.82 4198.74 1754.43 4198.74 c
1749.03 4198.74 1744.65 4203.12 1744.65 4208.52 c
1744.65 4213.91 1749.03 4218.29 1754.43 4218.29 c
1759.82 4218.29 1764.2 4213.91 1764.2 4208.52 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1844.85 4142.53 m
1844.85 4137.13 1840.47 4132.76 1835.07 4132.76 c
1829.68 4132.76 1825.3 4137.13 1825.3 4142.53 c
1825.3 4147.93 1829.68 4152.31 1835.07 4152.31 c
1840.47 4152.31 1844.85 4147.93 1844.85 4142.53 c
f
n
1884.76 4109.95 m
1884.76 4104.55 1880.39 4100.17 1874.99 4100.17 c
1869.59 4100.17 1865.21 4104.55 1865.21 4109.95 c
1865.21 4115.35 1869.59 4119.72 1874.99 4119.72 c
1880.39 4119.72 1884.76 4115.35 1884.76 4109.95 c
f
n
1924.68 4077.36 m
1924.68 4071.96 1920.3 4067.59 1914.9 4067.59 c
1909.5 4067.59 1905.13 4071.96 1905.13 4077.36 c
1905.13 4082.76 1909.5 4087.14 1914.9 4087.14 c
1920.3 4087.14 1924.68 4082.76 1924.68 4077.36 c
f
n
1964.59 4043.96 m
1964.59 4038.57 1960.21 4034.19 1954.82 4034.19 c
1949.42 4034.19 1945.04 4038.57 1945.04 4043.96 c
1945.04 4049.36 1949.42 4053.74 1954.82 4053.74 c
1960.21 4053.74 1964.59 4049.36 1964.59 4043.96 c
f
n
2004.51 4011.38 m
2004.51 4005.98 2000.13 4001.61 1994.73 4001.61 c
1989.33 4001.61 1984.96 4005.98 1984.96 4011.38 c
1984.96 4016.78 1989.33 4021.16 1994.73 4021.16 c
2000.13 4021.16 2004.51 4016.78 2004.51 4011.38 c
f
n
2044.42 3978.8 m
2044.42 3973.4 2040.05 3969.02 2034.65 3969.02 c
2029.25 3969.02 2024.87 3973.4 2024.87 3978.8 c
2024.87 3984.2 2029.25 3988.57 2034.65 3988.57 c
2040.05 3988.57 2044.42 3984.2 2044.42 3978.8 c
f
n
2084.34 3946.21 m
2084.34 3940.82 2079.96 3936.44 2074.56 3936.44 c
2069.16 3936.44 2064.79 3940.82 2064.79 3946.21 c
2064.79 3951.61 2069.16 3955.99 2074.56 3955.99 c
2079.96 3955.99 2084.34 3951.61 2084.34 3946.21 c
f
n
1460.36 4405.64 m
1460.36 4400.25 1455.98 4395.87 1450.59 4395.87 c
1445.19 4395.87 1440.81 4400.25 1440.81 4405.64 c
1440.81 4411.04 1445.19 4415.42 1450.59 4415.42 c
1455.98 4415.42 1460.36 4411.04 1460.36 4405.64 c
f
n
1503.54 4376.32 m
1503.54 4370.92 1499.16 4366.54 1493.76 4366.54 c
1488.36 4366.54 1483.98 4370.92 1483.98 4376.32 c
1483.98 4381.72 1488.36 4386.09 1493.76 4386.09 c
1499.16 4386.09 1503.54 4381.72 1503.54 4376.32 c
f
n
1546.71 4347.81 m
1546.71 4342.41 1542.33 4338.04 1536.93 4338.04 c
1531.54 4338.04 1527.16 4342.41 1527.16 4347.81 c
1527.16 4353.21 1531.54 4357.59 1536.93 4357.59 c
1542.33 4357.59 1546.71 4353.21 1546.71 4347.81 c
f
n
1589.88 4319.3 m
1589.88 4313.9 1585.5 4309.52 1580.11 4309.52 c
1574.71 4309.52 1570.33 4313.9 1570.33 4319.3 c
1570.33 4324.7 1574.71 4329.07 1580.11 4329.07 c
1585.5 4329.07 1589.88 4324.7 1589.88 4319.3 c
f
n
1632.24 4290.79 m
1632.24 4285.39 1627.86 4281.01 1622.46 4281.01 c
1617.07 4281.01 1612.69 4285.39 1612.69 4290.79 c
1612.69 4296.19 1617.07 4300.56 1622.46 4300.56 c
1627.86 4300.56 1632.24 4296.19 1632.24 4290.79 c
f
n
1675.41 4261.46 m
1675.41 4256.06 1671.04 4251.69 1665.64 4251.69 c
1660.24 4251.69 1655.86 4256.06 1655.86 4261.46 c
1655.86 4266.86 1660.24 4271.24 1665.64 4271.24 c
1671.04 4271.24 1675.41 4266.86 1675.41 4261.46 c
f
n
1718.59 4232.95 m
1718.59 4227.55 1714.21 4223.18 1708.81 4223.18 c
1703.41 4223.18 1699.04 4227.55 1699.04 4232.95 c
1699.04 4238.35 1703.41 4242.73 1708.81 4242.73 c
1714.21 4242.73 1718.59 4238.35 1718.59 4232.95 c
f
n
1761.76 4204.44 m
1761.76 4199.04 1757.38 4194.66 1751.98 4194.66 c
1746.59 4194.66 1742.21 4199.04 1742.21 4204.44 c
1742.21 4209.84 1746.59 4214.21 1751.98 4214.21 c
1757.38 4214.21 1761.76 4209.84 1761.76 4204.44 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1847.29 4146.61 m
1847.29 4141.21 1842.91 4136.83 1837.52 4136.83 c
1832.12 4136.83 1827.74 4141.21 1827.74 4146.61 c
1827.74 4152.0 1832.12 4156.38 1837.52 4156.38 c
1842.91 4156.38 1847.29 4152.0 1847.29 4146.61 c
f
n
1890.46 4118.09 m
1890.46 4112.7 1886.09 4108.32 1880.69 4108.32 c
1875.29 4108.32 1870.91 4112.7 1870.91 4118.09 c
1870.91 4123.49 1875.29 4127.87 1880.69 4127.87 c
1886.09 4127.87 1890.46 4123.49 1890.46 4118.09 c
f
n
1933.64 4089.58 m
1933.64 4084.18 1929.26 4079.81 1923.86 4079.81 c
1918.46 4079.81 1914.09 4084.18 1914.09 4089.58 c
1914.09 4094.98 1918.46 4099.36 1923.86 4099.36 c
1929.26 4099.36 1933.64 4094.98 1933.64 4089.58 c
f
n
1976.81 4060.26 m
1976.81 4054.86 1972.43 4050.48 1967.04 4050.48 c
1961.64 4050.48 1957.26 4054.86 1957.26 4060.26 c
1957.26 4065.66 1961.64 4070.04 1967.04 4070.04 c
1972.43 4070.04 1976.81 4065.66 1976.81 4060.26 c
f
n
2019.17 4031.75 m
2019.17 4026.35 2014.79 4021.97 2009.39 4021.97 c
2004.0 4021.97 1999.62 4026.35 1999.62 4031.75 c
1999.62 4037.14 2004.0 4041.52 2009.39 4041.52 c
2014.79 4041.52 2019.17 4037.14 2019.17 4031.75 c
f
n
2062.34 4003.24 m
2062.34 3997.84 2057.96 3993.46 2052.57 3993.46 c
2047.17 3993.46 2042.79 3997.84 2042.79 4003.24 c
2042.79 4008.64 2047.17 4013.01 2052.57 4013.01 c
2057.96 4013.01 2062.34 4008.64 2062.34 4003.24 c
f
n
2105.52 3974.73 m
2105.52 3969.33 2101.14 3964.95 2095.74 3964.95 c
2090.34 3964.95 2085.96 3969.33 2085.96 3974.73 c
2085.96 3980.12 2090.34 3984.5 2095.74 3984.5 c
2101.14 3984.5 2105.52 3980.12 2105.52 3974.73 c
f
n
1439.18 4370.62 m
1439.18 4365.22 1434.8 4360.84 1429.41 4360.84 c
1424.01 4360.84 1419.63 4365.22 1419.63 4370.62 c
1419.63 4376.02 1424.01 4380.39 1429.41 4380.39 c
1434.8 4380.39 1439.18 4376.02 1439.18 4370.62 c
f
n
1484.8 4346.18 m
1484.8 4340.78 1480.42 4336.41 1475.02 4336.41 c
1469.62 4336.41 1465.25 4340.78 1465.25 4346.18 c
1465.25 4351.58 1469.62 4355.95 1475.02 4355.95 c
1480.42 4355.95 1484.8 4351.58 1484.8 4346.18 c
f
n
1530.41 4321.74 m
1530.41 4316.34 1526.04 4311.97 1520.64 4311.97 c
1515.24 4311.97 1510.86 4316.34 1510.86 4321.74 c
1510.86 4327.14 1515.24 4331.52 1520.64 4331.52 c
1526.04 4331.52 1530.41 4327.14 1530.41 4321.74 c
f
n
1576.03 4297.3 m
1576.03 4291.91 1571.66 4287.53 1566.26 4287.53 c
1560.86 4287.53 1556.48 4291.91 1556.48 4297.3 c
1556.48 4302.7 1560.86 4307.08 1566.26 4307.08 c
1571.66 4307.08 1576.03 4302.7 1576.03 4297.3 c
f
n
1621.65 4272.87 m
1621.65 4267.47 1617.27 4263.09 1611.88 4263.09 c
1606.48 4263.09 1602.1 4267.47 1602.1 4272.87 c
1602.1 4278.27 1606.48 4282.64 1611.88 4282.64 c
1617.27 4282.64 1621.65 4278.27 1621.65 4272.87 c
f
n
1667.27 4248.43 m
1667.27 4243.03 1662.89 4238.65 1657.49 4238.65 c
1652.09 4238.65 1647.71 4243.03 1647.71 4248.43 c
1647.71 4253.83 1652.09 4258.2 1657.49 4258.2 c
1662.89 4258.2 1667.27 4253.83 1667.27 4248.43 c
f
n
1712.88 4223.99 m
1712.88 4218.59 1708.51 4214.21 1703.11 4214.21 c
1697.71 4214.21 1693.33 4218.59 1693.33 4223.99 c
1693.33 4229.39 1697.71 4233.77 1703.11 4233.77 c
1708.51 4233.77 1712.88 4229.39 1712.88 4223.99 c
f
n
1758.5 4199.55 m
1758.5 4194.16 1754.12 4189.78 1748.73 4189.78 c
1743.33 4189.78 1738.95 4194.16 1738.95 4199.55 c
1738.95 4204.95 1743.33 4209.33 1748.73 4209.33 c
1754.12 4209.33 1758.5 4204.95 1758.5 4199.55 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1850.55 4151.49 m
1850.55 4146.09 1846.17 4141.72 1840.77 4141.72 c
1835.38 4141.72 1831.0 4146.09 1831.0 4151.49 c
1831.0 4156.89 1835.38 4161.27 1840.77 4161.27 c
1846.17 4161.27 1850.55 4156.89 1850.55 4151.49 c
f
n
1896.17 4127.05 m
1896.17 4121.66 1891.79 4117.28 1886.39 4117.28 c
1880.99 4117.28 1876.62 4121.66 1876.62 4127.05 c
1876.62 4132.45 1880.99 4136.83 1886.39 4136.83 c
1891.79 4136.83 1896.17 4132.45 1896.17 4127.05 c
f
n
1941.79 4102.62 m
1941.79 4097.22 1937.41 4092.84 1932.01 4092.84 c
1926.61 4092.84 1922.23 4097.22 1922.23 4102.62 c
1922.23 4108.02 1926.61 4112.39 1932.01 4112.39 c
1937.41 4112.39 1941.79 4108.02 1941.79 4102.62 c
f
n
1987.4 4078.18 m
1987.4 4072.78 1983.02 4068.4 1977.62 4068.4 c
1972.23 4068.4 1967.85 4072.78 1967.85 4078.18 c
1967.85 4083.58 1972.23 4087.95 1977.62 4087.95 c
1983.02 4087.95 1987.4 4083.58 1987.4 4078.18 c
f
n
2033.02 4053.74 m
2033.02 4048.34 2028.64 4043.96 2023.24 4043.96 c
2017.84 4043.96 2013.47 4048.34 2013.47 4053.74 c
2013.47 4059.14 2017.84 4063.52 2023.24 4063.52 c
2028.64 4063.52 2033.02 4059.14 2033.02 4053.74 c
f
n
2078.64 4029.3 m
2078.64 4023.91 2074.26 4019.53 2068.86 4019.53 c
2063.46 4019.53 2059.09 4023.91 2059.09 4029.3 c
2059.09 4034.7 2063.46 4039.08 2068.86 4039.08 c
2074.26 4039.08 2078.64 4034.7 2078.64 4029.3 c
f
n
2124.25 4004.87 m
2124.25 3999.47 2119.88 3995.09 2114.48 3995.09 c
2109.08 3995.09 2104.7 3999.47 2104.7 4004.87 c
2104.7 4010.27 2109.08 4014.64 2114.48 4014.64 c
2119.88 4014.64 2124.25 4010.27 2124.25 4004.87 c
f
n
1422.07 4333.96 m
1422.07 4328.56 1417.7 4324.19 1412.3 4324.19 c
1406.9 4324.19 1402.52 4328.56 1402.52 4333.96 c
1402.52 4339.36 1406.9 4343.73 1412.3 4343.73 c
1417.7 4343.73 1422.07 4339.36 1422.07 4333.96 c
f
n
1470.14 4314.41 m
1470.14 4309.01 1465.76 4304.64 1460.36 4304.64 c
1454.96 4304.64 1450.59 4309.01 1450.59 4314.41 c
1450.59 4319.81 1454.96 4324.19 1460.36 4324.19 c
1465.76 4324.19 1470.14 4319.81 1470.14 4314.41 c
f
n
1518.2 4294.05 m
1518.2 4288.65 1513.82 4284.27 1508.42 4284.27 c
1503.02 4284.27 1498.64 4288.65 1498.64 4294.05 c
1498.64 4299.45 1503.02 4303.82 1508.42 4303.82 c
1513.82 4303.82 1518.2 4299.45 1518.2 4294.05 c
f
n
1565.44 4274.5 m
1565.44 4269.1 1561.07 4264.72 1555.67 4264.72 c
1550.27 4264.72 1545.89 4269.1 1545.89 4274.5 c
1545.89 4279.89 1550.27 4284.27 1555.67 4284.27 c
1561.07 4284.27 1565.44 4279.89 1565.44 4274.5 c
f
n
1613.5 4254.95 m
1613.5 4249.55 1609.12 4245.17 1603.73 4245.17 c
1598.33 4245.17 1593.95 4249.55 1593.95 4254.95 c
1593.95 4260.34 1598.33 4264.72 1603.73 4264.72 c
1609.12 4264.72 1613.5 4260.34 1613.5 4254.95 c
f
n
1661.56 4234.58 m
1661.56 4229.18 1657.19 4224.8 1651.79 4224.8 c
1646.39 4224.8 1642.02 4229.18 1642.02 4234.58 c
1642.02 4239.98 1646.39 4244.36 1651.79 4244.36 c
1657.19 4244.36 1661.56 4239.98 1661.56 4234.58 c
f
n
1708.81 4215.03 m
1708.81 4209.63 1704.43 4205.25 1699.04 4205.25 c
1693.64 4205.25 1689.26 4209.63 1689.26 4215.03 c
1689.26 4220.43 1693.64 4224.8 1699.04 4224.8 c
1704.43 4224.8 1708.81 4220.43 1708.81 4215.03 c
f
n
1756.87 4195.48 m
1756.87 4190.08 1752.5 4185.71 1747.1 4185.71 c
1741.7 4185.71 1737.32 4190.08 1737.32 4195.48 c
1737.32 4200.88 1741.7 4205.25 1747.1 4205.25 c
1752.5 4205.25 1756.87 4200.88 1756.87 4195.48 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1852.18 4155.57 m
1852.18 4150.17 1847.8 4145.79 1842.4 4145.79 c
1837.0 4145.79 1832.63 4150.17 1832.63 4155.57 c
1832.63 4160.96 1837.0 4165.34 1842.4 4165.34 c
1847.8 4165.34 1852.18 4160.96 1852.18 4155.57 c
f
n
1900.24 4136.02 m
1900.24 4130.62 1895.86 4126.24 1890.46 4126.24 c
1885.07 4126.24 1880.69 4130.62 1880.69 4136.02 c
1880.69 4141.41 1885.07 4145.79 1890.46 4145.79 c
1895.86 4145.79 1900.24 4141.41 1900.24 4136.02 c
f
n
1947.48 4116.46 m
1947.48 4111.07 1943.11 4106.69 1937.71 4106.69 c
1932.31 4106.69 1927.94 4111.07 1927.94 4116.46 c
1927.94 4121.86 1932.31 4126.24 1937.71 4126.24 c
1943.11 4126.24 1947.48 4121.86 1947.48 4116.46 c
f
n
1995.55 4096.1 m
1995.55 4090.7 1991.17 4086.32 1985.77 4086.32 c
1980.38 4086.32 1976.0 4090.7 1976.0 4096.1 c
1976.0 4101.5 1980.38 4105.88 1985.77 4105.88 c
1991.17 4105.88 1995.55 4101.5 1995.55 4096.1 c
f
n
2043.61 4076.55 m
2043.61 4071.15 2039.23 4066.77 2033.83 4066.77 c
2028.43 4066.77 2024.06 4071.15 2024.06 4076.55 c
2024.06 4081.95 2028.43 4086.32 2033.83 4086.32 c
2039.23 4086.32 2043.61 4081.95 2043.61 4076.55 c
f
n
2090.86 4057.0 m
2090.86 4051.6 2086.48 4047.23 2081.08 4047.23 c
2075.68 4047.23 2071.3 4051.6 2071.3 4057.0 c
2071.3 4062.4 2075.68 4066.77 2081.08 4066.77 c
2086.48 4066.77 2090.86 4062.4 2090.86 4057.0 c
f
n
2138.91 4036.64 m
2138.91 4031.24 2134.54 4026.86 2129.14 4026.86 c
2123.74 4026.86 2119.36 4031.24 2119.36 4036.64 c
2119.36 4042.04 2123.74 4046.41 2129.14 4046.41 c
2134.54 4046.41 2138.91 4042.04 2138.91 4036.64 c
f
n
1408.23 4295.68 m
1408.23 4290.28 1403.85 4285.9 1398.45 4285.9 c
1393.05 4285.9 1388.68 4290.28 1388.68 4295.68 c
1388.68 4301.07 1393.05 4305.45 1398.45 4305.45 c
1403.85 4305.45 1408.23 4301.07 1408.23 4295.68 c
f
n
1457.92 4281.01 m
1457.92 4275.61 1453.54 4271.24 1448.14 4271.24 c
1442.74 4271.24 1438.37 4275.61 1438.37 4281.01 c
1438.37 4286.41 1442.74 4290.79 1448.14 4290.79 c
1453.54 4290.79 1457.92 4286.41 1457.92 4281.01 c
f
n
1507.61 4265.54 m
1507.61 4260.14 1503.23 4255.76 1497.83 4255.76 c
1492.43 4255.76 1488.05 4260.14 1488.05 4265.54 c
1488.05 4270.93 1492.43 4275.31 1497.83 4275.31 c
1503.23 4275.31 1507.61 4270.93 1507.61 4265.54 c
f
n
1557.3 4250.87 m
1557.3 4245.47 1552.92 4241.1 1547.52 4241.1 c
1542.12 4241.1 1537.75 4245.47 1537.75 4250.87 c
1537.75 4256.27 1542.12 4260.65 1547.52 4260.65 c
1552.92 4260.65 1557.3 4256.27 1557.3 4250.87 c
f
n
1606.17 4235.39 m
1606.17 4230.0 1601.8 4225.62 1596.4 4225.62 c
1591.0 4225.62 1586.62 4230.0 1586.62 4235.39 c
1586.62 4240.79 1591.0 4245.17 1596.4 4245.17 c
1601.8 4245.17 1606.17 4240.79 1606.17 4235.39 c
f
n
1655.86 4220.73 m
1655.86 4215.34 1651.48 4210.96 1646.09 4210.96 c
1640.69 4210.96 1636.31 4215.34 1636.31 4220.73 c
1636.31 4226.13 1640.69 4230.51 1646.09 4230.51 c
1651.48 4230.51 1655.86 4226.13 1655.86 4220.73 c
f
n
1705.55 4205.25 m
1705.55 4199.86 1701.18 4195.48 1695.78 4195.48 c
1690.38 4195.48 1686.0 4199.86 1686.0 4205.25 c
1686.0 4210.65 1690.38 4215.03 1695.78 4215.03 c
1701.18 4215.03 1705.55 4210.65 1705.55 4205.25 c
f
n
1755.24 4190.59 m
1755.24 4185.2 1750.87 4180.82 1745.47 4180.82 c
1740.07 4180.82 1735.69 4185.2 1735.69 4190.59 c
1735.69 4195.99 1740.07 4200.37 1745.47 4200.37 c
1750.87 4200.37 1755.24 4195.99 1755.24 4190.59 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1853.81 4160.45 m
1853.81 4155.05 1849.43 4150.68 1844.03 4150.68 c
1838.63 4150.68 1834.26 4155.05 1834.26 4160.45 c
1834.26 4165.85 1838.63 4170.23 1844.03 4170.23 c
1849.43 4170.23 1853.81 4165.85 1853.81 4160.45 c
f
n
1903.5 4145.79 m
1903.5 4140.39 1899.12 4136.02 1893.72 4136.02 c
1888.32 4136.02 1883.95 4140.39 1883.95 4145.79 c
1883.95 4151.19 1888.32 4155.57 1893.72 4155.57 c
1899.12 4155.57 1903.5 4151.19 1903.5 4145.79 c
f
n
1953.19 4130.31 m
1953.19 4124.91 1948.81 4120.54 1943.41 4120.54 c
1938.02 4120.54 1933.64 4124.91 1933.64 4130.31 c
1933.64 4135.71 1938.02 4140.09 1943.41 4140.09 c
1948.81 4140.09 1953.19 4135.71 1953.19 4130.31 c
f
n
2002.88 4115.65 m
2002.88 4110.25 1998.5 4105.88 1993.1 4105.88 c
1987.7 4105.88 1983.33 4110.25 1983.33 4115.65 c
1983.33 4121.05 1987.7 4125.43 1993.1 4125.43 c
1998.5 4125.43 2002.88 4121.05 2002.88 4115.65 c
f
n
2051.75 4100.17 m
2051.75 4094.77 2047.38 4090.4 2041.98 4090.4 c
2036.58 4090.4 2032.2 4094.77 2032.2 4100.17 c
2032.2 4105.57 2036.58 4109.95 2041.98 4109.95 c
2047.38 4109.95 2051.75 4105.57 2051.75 4100.17 c
f
n
2101.45 4085.51 m
2101.45 4080.11 2097.07 4075.73 2091.67 4075.73 c
2086.27 4075.73 2081.89 4080.11 2081.89 4085.51 c
2081.89 4090.91 2086.27 4095.29 2091.67 4095.29 c
2097.07 4095.29 2101.45 4090.91 2101.45 4085.51 c
f
n
2151.13 4070.04 m
2151.13 4064.64 2146.76 4060.26 2141.36 4060.26 c
2135.96 4060.26 2131.58 4064.64 2131.58 4070.04 c
2131.58 4075.43 2135.96 4079.81 2141.36 4079.81 c
2146.76 4079.81 2151.13 4075.43 2151.13 4070.04 c
f
n
1398.45 4256.57 m
1398.45 4251.18 1394.07 4246.8 1388.68 4246.8 c
1383.28 4246.8 1378.9 4251.18 1378.9 4256.57 c
1378.9 4261.97 1383.28 4266.35 1388.68 4266.35 c
1394.07 4266.35 1398.45 4261.97 1398.45 4256.57 c
f
n
1449.77 4245.98 m
1449.77 4240.59 1445.39 4236.21 1440.0 4236.21 c
1434.6 4236.21 1430.22 4240.59 1430.22 4245.98 c
1430.22 4251.38 1434.6 4255.76 1440.0 4255.76 c
1445.39 4255.76 1449.77 4251.38 1449.77 4245.98 c
f
n
1500.27 4236.21 m
1500.27 4230.81 1495.9 4226.43 1490.5 4226.43 c
1485.1 4226.43 1480.73 4230.81 1480.73 4236.21 c
1480.73 4241.61 1485.1 4245.98 1490.5 4245.98 c
1495.9 4245.98 1500.27 4241.61 1500.27 4236.21 c
f
n
1550.78 4225.62 m
1550.78 4220.22 1546.4 4215.84 1541.0 4215.84 c
1535.61 4215.84 1531.23 4220.22 1531.23 4225.62 c
1531.23 4231.02 1535.61 4235.39 1541.0 4235.39 c
1546.4 4235.39 1550.78 4231.02 1550.78 4225.62 c
f
n
1601.29 4215.84 m
1601.29 4210.45 1596.91 4206.07 1591.51 4206.07 c
1586.11 4206.07 1581.73 4210.45 1581.73 4215.84 c
1581.73 4221.24 1586.11 4225.62 1591.51 4225.62 c
1596.91 4225.62 1601.29 4221.24 1601.29 4215.84 c
f
n
1652.61 4206.07 m
1652.61 4200.67 1648.23 4196.3 1642.83 4196.3 c
1637.43 4196.3 1633.05 4200.67 1633.05 4206.07 c
1633.05 4211.47 1637.43 4215.84 1642.83 4215.84 c
1648.23 4215.84 1652.61 4211.47 1652.61 4206.07 c
f
n
1703.11 4195.48 m
1703.11 4190.08 1698.73 4185.71 1693.33 4185.71 c
1687.93 4185.71 1683.56 4190.08 1683.56 4195.48 c
1683.56 4200.88 1687.93 4205.25 1693.33 4205.25 c
1698.73 4205.25 1703.11 4200.88 1703.11 4195.48 c
f
n
1753.61 4185.71 m
1753.61 4180.31 1749.24 4175.93 1743.84 4175.93 c
1738.44 4175.93 1734.06 4180.31 1734.06 4185.71 c
1734.06 4191.11 1738.44 4195.48 1743.84 4195.48 c
1749.24 4195.48 1753.61 4191.11 1753.61 4185.71 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1855.44 4165.34 m
1855.44 4159.94 1851.06 4155.57 1845.66 4155.57 c
1840.26 4155.57 1835.89 4159.94 1835.89 4165.34 c
1835.89 4170.74 1840.26 4175.12 1845.66 4175.12 c
1851.06 4175.12 1855.44 4170.74 1855.44 4165.34 c
f
n
1905.94 4155.57 m
1905.94 4150.17 1901.57 4145.79 1896.17 4145.79 c
1890.77 4145.79 1886.39 4150.17 1886.39 4155.57 c
1886.39 4160.96 1890.77 4165.34 1896.17 4165.34 c
1901.57 4165.34 1905.94 4160.96 1905.94 4155.57 c
f
n
1956.45 4144.98 m
1956.45 4139.58 1952.07 4135.2 1946.67 4135.2 c
1941.27 4135.2 1936.89 4139.58 1936.89 4144.98 c
1936.89 4150.38 1941.27 4154.75 1946.67 4154.75 c
1952.07 4154.75 1956.45 4150.38 1956.45 4144.98 c
f
n
2007.77 4135.2 m
2007.77 4129.8 2003.39 4125.43 1997.99 4125.43 c
1992.59 4125.43 1988.21 4129.8 1988.21 4135.2 c
1988.21 4140.6 1992.59 4144.98 1997.99 4144.98 c
2003.39 4144.98 2007.77 4140.6 2007.77 4135.2 c
f
n
2058.27 4125.43 m
2058.27 4120.03 2053.89 4115.65 2048.5 4115.65 c
2043.1 4115.65 2038.72 4120.03 2038.72 4125.43 c
2038.72 4130.82 2043.1 4135.2 2048.5 4135.2 c
2053.89 4135.2 2058.27 4130.82 2058.27 4125.43 c
f
n
2108.77 4114.84 m
2108.77 4109.44 2104.4 4105.06 2099.0 4105.06 c
2093.6 4105.06 2089.23 4109.44 2089.23 4114.84 c
2089.23 4120.23 2093.6 4124.61 2099.0 4124.61 c
2104.4 4124.61 2108.77 4120.23 2108.77 4114.84 c
f
n
2159.28 4105.06 m
2159.28 4099.66 2154.9 4095.29 2149.5 4095.29 c
2144.11 4095.29 2139.73 4099.66 2139.73 4105.06 c
2139.73 4110.46 2144.11 4114.84 2149.5 4114.84 c
2154.9 4114.84 2159.28 4110.46 2159.28 4105.06 c
f
n
1392.75 4215.84 m
1392.75 4210.45 1388.37 4206.07 1382.97 4206.07 c
1377.57 4206.07 1373.2 4210.45 1373.2 4215.84 c
1373.2 4221.24 1377.57 4225.62 1382.97 4225.62 c
1388.37 4225.62 1392.75 4221.24 1392.75 4215.84 c
f
n
1444.07 4210.96 m
1444.07 4205.56 1439.69 4201.18 1434.29 4201.18 c
1428.89 4201.18 1424.52 4205.56 1424.52 4210.96 c
1424.52 4216.36 1428.89 4220.73 1434.29 4220.73 c
1439.69 4220.73 1444.07 4216.36 1444.07 4210.96 c
f
n
1495.39 4206.07 m
1495.39 4200.67 1491.01 4196.3 1485.61 4196.3 c
1480.21 4196.3 1475.84 4200.67 1475.84 4206.07 c
1475.84 4211.47 1480.21 4215.84 1485.61 4215.84 c
1491.01 4215.84 1495.39 4211.47 1495.39 4206.07 c
f
n
1547.52 4201.18 m
1547.52 4195.79 1543.14 4191.41 1537.75 4191.41 c
1532.35 4191.41 1527.97 4195.79 1527.97 4201.18 c
1527.97 4206.58 1532.35 4210.96 1537.75 4210.96 c
1543.14 4210.96 1547.52 4206.58 1547.52 4201.18 c
f
n
1598.84 4195.48 m
1598.84 4190.08 1594.46 4185.71 1589.07 4185.71 c
1583.67 4185.71 1579.29 4190.08 1579.29 4195.48 c
1579.29 4200.88 1583.67 4205.25 1589.07 4205.25 c
1594.46 4205.25 1598.84 4200.88 1598.84 4195.48 c
f
n
1650.16 4190.59 m
1650.16 4185.2 1645.79 4180.82 1640.39 4180.82 c
1634.99 4180.82 1630.61 4185.2 1630.61 4190.59 c
1630.61 4195.99 1634.99 4200.37 1640.39 4200.37 c
1645.79 4200.37 1650.16 4195.99 1650.16 4190.59 c
f
n
1701.48 4185.71 m
1701.48 4180.31 1697.1 4175.93 1691.7 4175.93 c
1686.3 4175.93 1681.93 4180.31 1681.93 4185.71 c
1681.93 4191.11 1686.3 4195.48 1691.7 4195.48 c
1697.1 4195.48 1701.48 4191.11 1701.48 4185.71 c
f
n
1752.8 4180.82 m
1752.8 4175.42 1748.42 4171.04 1743.02 4171.04 c
1737.62 4171.04 1733.25 4175.42 1733.25 4180.82 c
1733.25 4186.21 1737.62 4190.59 1743.02 4190.59 c
1748.42 4190.59 1752.8 4186.21 1752.8 4180.82 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1856.25 4170.23 m
1856.25 4164.83 1851.88 4160.45 1846.48 4160.45 c
1841.08 4160.45 1836.7 4164.83 1836.7 4170.23 c
1836.7 4175.62 1841.08 4180.0 1846.48 4180.0 c
1851.88 4180.0 1856.25 4175.62 1856.25 4170.23 c
f
n
1907.57 4165.34 m
1907.57 4159.94 1903.2 4155.57 1897.8 4155.57 c
1892.4 4155.57 1888.02 4159.94 1888.02 4165.34 c
1888.02 4170.74 1892.4 4175.12 1897.8 4175.12 c
1903.2 4175.12 1907.57 4170.74 1907.57 4165.34 c
f
n
1958.89 4160.45 m
1958.89 4155.05 1954.51 4150.68 1949.11 4150.68 c
1943.71 4150.68 1939.34 4155.05 1939.34 4160.45 c
1939.34 4165.85 1943.71 4170.23 1949.11 4170.23 c
1954.51 4170.23 1958.89 4165.85 1958.89 4160.45 c
f
n
2010.21 4155.57 m
2010.21 4150.17 2005.83 4145.79 2000.43 4145.79 c
1995.04 4145.79 1990.66 4150.17 1990.66 4155.57 c
1990.66 4160.96 1995.04 4165.34 2000.43 4165.34 c
2005.83 4165.34 2010.21 4160.96 2010.21 4155.57 c
f
n
2061.53 4149.86 m
2061.53 4144.46 2057.15 4140.09 2051.75 4140.09 c
2046.36 4140.09 2041.98 4144.46 2041.98 4149.86 c
2041.98 4155.26 2046.36 4159.64 2051.75 4159.64 c
2057.15 4159.64 2061.53 4155.26 2061.53 4149.86 c
f
n
2113.66 4144.98 m
2113.66 4139.58 2109.29 4135.2 2103.89 4135.2 c
2098.49 4135.2 2094.11 4139.58 2094.11 4144.98 c
2094.11 4150.38 2098.49 4154.75 2103.89 4154.75 c
2109.29 4154.75 2113.66 4150.38 2113.66 4144.98 c
f
n
2164.98 4140.09 m
2164.98 4134.69 2160.61 4130.31 2155.21 4130.31 c
2149.81 4130.31 2145.43 4134.69 2145.43 4140.09 c
2145.43 4145.49 2149.81 4149.86 2155.21 4149.86 c
2160.61 4149.86 2164.98 4145.49 2164.98 4140.09 c
f
n
1390.3 4175.93 m
1390.3 4170.53 1385.93 4166.16 1380.53 4166.16 c
1375.13 4166.16 1370.75 4170.53 1370.75 4175.93 c
1370.75 4181.33 1375.13 4185.71 1380.53 4185.71 c
1385.93 4185.71 1390.3 4181.33 1390.3 4175.93 c
f
n
1442.44 4175.93 m
1442.44 4170.53 1438.06 4166.16 1432.66 4166.16 c
1427.27 4166.16 1422.89 4170.53 1422.89 4175.93 c
1422.89 4181.33 1427.27 4185.71 1432.66 4185.71 c
1438.06 4185.71 1442.44 4181.33 1442.44 4175.93 c
f
n
1493.76 4175.93 m
1493.76 4170.53 1489.38 4166.16 1483.98 4166.16 c
1478.59 4166.16 1474.21 4170.53 1474.21 4175.93 c
1474.21 4181.33 1478.59 4185.71 1483.98 4185.71 c
1489.38 4185.71 1493.76 4181.33 1493.76 4175.93 c
f
n
1545.89 4175.93 m
1545.89 4170.53 1541.52 4166.16 1536.12 4166.16 c
1530.72 4166.16 1526.34 4170.53 1526.34 4175.93 c
1526.34 4181.33 1530.72 4185.71 1536.12 4185.71 c
1541.52 4185.71 1545.89 4181.33 1545.89 4175.93 c
f
n
1598.03 4175.93 m
1598.03 4170.53 1593.65 4166.16 1588.25 4166.16 c
1582.85 4166.16 1578.48 4170.53 1578.48 4175.93 c
1578.48 4181.33 1582.85 4185.71 1588.25 4185.71 c
1593.65 4185.71 1598.03 4181.33 1598.03 4175.93 c
f
n
1649.34 4175.93 m
1649.34 4170.53 1644.97 4166.16 1639.57 4166.16 c
1634.17 4166.16 1629.8 4170.53 1629.8 4175.93 c
1629.8 4181.33 1634.17 4185.71 1639.57 4185.71 c
1644.97 4185.71 1649.34 4181.33 1649.34 4175.93 c
f
n
1701.48 4175.93 m
1701.48 4170.53 1697.1 4166.16 1691.7 4166.16 c
1686.3 4166.16 1681.93 4170.53 1681.93 4175.93 c
1681.93 4181.33 1686.3 4185.71 1691.7 4185.71 c
1697.1 4185.71 1701.48 4181.33 1701.48 4175.93 c
f
n
1752.8 4175.93 m
1752.8 4170.53 1748.42 4166.16 1743.02 4166.16 c
1737.62 4166.16 1733.25 4170.53 1733.25 4175.93 c
1733.25 4181.33 1737.62 4185.71 1743.02 4185.71 c
1748.42 4185.71 1752.8 4181.33 1752.8 4175.93 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1856.25 4175.93 m
1856.25 4170.53 1851.88 4166.16 1846.48 4166.16 c
1841.08 4166.16 1836.7 4170.53 1836.7 4175.93 c
1836.7 4181.33 1841.08 4185.71 1846.48 4185.71 c
1851.88 4185.71 1856.25 4181.33 1856.25 4175.93 c
f
n
1908.39 4175.93 m
1908.39 4170.53 1904.01 4166.16 1898.61 4166.16 c
1893.21 4166.16 1888.84 4170.53 1888.84 4175.93 c
1888.84 4181.33 1893.21 4185.71 1898.61 4185.71 c
1904.01 4185.71 1908.39 4181.33 1908.39 4175.93 c
f
n
1959.7 4175.93 m
1959.7 4170.53 1955.33 4166.16 1949.93 4166.16 c
1944.53 4166.16 1940.16 4170.53 1940.16 4175.93 c
1940.16 4181.33 1944.53 4185.71 1949.93 4185.71 c
1955.33 4185.71 1959.7 4181.33 1959.7 4175.93 c
f
n
2011.84 4175.93 m
2011.84 4170.53 2007.46 4166.16 2002.06 4166.16 c
1996.66 4166.16 1992.29 4170.53 1992.29 4175.93 c
1992.29 4181.33 1996.66 4185.71 2002.06 4185.71 c
2007.46 4185.71 2011.84 4181.33 2011.84 4175.93 c
f
n
2063.16 4175.93 m
2063.16 4170.53 2058.78 4166.16 2053.38 4166.16 c
2047.98 4166.16 2043.61 4170.53 2043.61 4175.93 c
2043.61 4181.33 2047.98 4185.71 2053.38 4185.71 c
2058.78 4185.71 2063.16 4181.33 2063.16 4175.93 c
f
n
2115.29 4175.93 m
2115.29 4170.53 2110.91 4166.16 2105.52 4166.16 c
2100.12 4166.16 2095.74 4170.53 2095.74 4175.93 c
2095.74 4181.33 2100.12 4185.71 2105.52 4185.71 c
2110.91 4185.71 2115.29 4181.33 2115.29 4175.93 c
f
n
2166.61 4175.93 m
2166.61 4170.53 2162.23 4166.16 2156.84 4166.16 c
2151.44 4166.16 2147.06 4170.53 2147.06 4175.93 c
2147.06 4181.33 2151.44 4185.71 2156.84 4185.71 c
2162.23 4185.71 2166.61 4181.33 2166.61 4175.93 c
f
n
1392.75 4135.2 m
1392.75 4129.8 1388.37 4125.43 1382.97 4125.43 c
1377.57 4125.43 1373.2 4129.8 1373.2 4135.2 c
1373.2 4140.6 1377.57 4144.98 1382.97 4144.98 c
1388.37 4144.98 1392.75 4140.6 1392.75 4135.2 c
f
n
1444.07 4140.09 m
1444.07 4134.69 1439.69 4130.31 1434.29 4130.31 c
1428.89 4130.31 1424.52 4134.69 1424.52 4140.09 c
1424.52 4145.49 1428.89 4149.86 1434.29 4149.86 c
1439.69 4149.86 1444.07 4145.49 1444.07 4140.09 c
f
n
1495.39 4144.98 m
1495.39 4139.58 1491.01 4135.2 1485.61 4135.2 c
1480.21 4135.2 1475.84 4139.58 1475.84 4144.98 c
1475.84 4150.38 1480.21 4154.75 1485.61 4154.75 c
1491.01 4154.75 1495.39 4150.38 1495.39 4144.98 c
f
n
1547.52 4149.86 m
1547.52 4144.46 1543.14 4140.09 1537.75 4140.09 c
1532.35 4140.09 1527.97 4144.46 1527.97 4149.86 c
1527.97 4155.26 1532.35 4159.64 1537.75 4159.64 c
1543.14 4159.64 1547.52 4155.26 1547.52 4149.86 c
f
n
1598.84 4155.57 m
1598.84 4150.17 1594.46 4145.79 1589.07 4145.79 c
1583.67 4145.79 1579.29 4150.17 1579.29 4155.57 c
1579.29 4160.96 1583.67 4165.34 1589.07 4165.34 c
1594.46 4165.34 1598.84 4160.96 1598.84 4155.57 c
f
n
1650.16 4160.45 m
1650.16 4155.05 1645.79 4150.68 1640.39 4150.68 c
1634.99 4150.68 1630.61 4155.05 1630.61 4160.45 c
1630.61 4165.85 1634.99 4170.23 1640.39 4170.23 c
1645.79 4170.23 1650.16 4165.85 1650.16 4160.45 c
f
n
1701.48 4165.34 m
1701.48 4159.94 1697.1 4155.57 1691.7 4155.57 c
1686.3 4155.57 1681.93 4159.94 1681.93 4165.34 c
1681.93 4170.74 1686.3 4175.12 1691.7 4175.12 c
1697.1 4175.12 1701.48 4170.74 1701.48 4165.34 c
f
n
1752.8 4170.23 m
1752.8 4164.83 1748.42 4160.45 1743.02 4160.45 c
1737.62 4160.45 1733.25 4164.83 1733.25 4170.23 c
1733.25 4175.62 1737.62 4180.0 1743.02 4180.0 c
1748.42 4180.0 1752.8 4175.62 1752.8 4170.23 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1856.25 4180.82 m
1856.25 4175.42 1851.88 4171.04 1846.48 4171.04 c
1841.08 4171.04 1836.7 4175.42 1836.7 4180.82 c
1836.7 4186.21 1841.08 4190.59 1846.48 4190.59 c
1851.88 4190.59 1856.25 4186.21 1856.25 4180.82 c
f
n
1907.57 4185.71 m
1907.57 4180.31 1903.2 4175.93 1897.8 4175.93 c
1892.4 4175.93 1888.02 4180.31 1888.02 4185.71 c
1888.02 4191.11 1892.4 4195.48 1897.8 4195.48 c
1903.2 4195.48 1907.57 4191.11 1907.57 4185.71 c
f
n
1958.89 4190.59 m
1958.89 4185.2 1954.51 4180.82 1949.11 4180.82 c
1943.71 4180.82 1939.34 4185.2 1939.34 4190.59 c
1939.34 4195.99 1943.71 4200.37 1949.11 4200.37 c
1954.51 4200.37 1958.89 4195.99 1958.89 4190.59 c
f
n
2010.21 4195.48 m
2010.21 4190.08 2005.83 4185.71 2000.43 4185.71 c
1995.04 4185.71 1990.66 4190.08 1990.66 4195.48 c
1990.66 4200.88 1995.04 4205.25 2000.43 4205.25 c
2005.83 4205.25 2010.21 4200.88 2010.21 4195.48 c
f
n
2061.53 4201.18 m
2061.53 4195.79 2057.15 4191.41 2051.75 4191.41 c
2046.36 4191.41 2041.98 4195.79 2041.98 4201.18 c
2041.98 4206.58 2046.36 4210.96 2051.75 4210.96 c
2057.15 4210.96 2061.53 4206.58 2061.53 4201.18 c
f
n
2113.66 4206.07 m
2113.66 4200.67 2109.29 4196.3 2103.89 4196.3 c
2098.49 4196.3 2094.11 4200.67 2094.11 4206.07 c
2094.11 4211.47 2098.49 4215.84 2103.89 4215.84 c
2109.29 4215.84 2113.66 4211.47 2113.66 4206.07 c
f
n
2164.98 4210.96 m
2164.98 4205.56 2160.61 4201.18 2155.21 4201.18 c
2149.81 4201.18 2145.43 4205.56 2145.43 4210.96 c
2145.43 4216.36 2149.81 4220.73 2155.21 4220.73 c
2160.61 4220.73 2164.98 4216.36 2164.98 4210.96 c
f
n
1398.45 4094.47 m
1398.45 4089.07 1394.07 4084.7 1388.68 4084.7 c
1383.28 4084.7 1378.9 4089.07 1378.9 4094.47 c
1378.9 4099.87 1383.28 4104.25 1388.68 4104.25 c
1394.07 4104.25 1398.45 4099.87 1398.45 4094.47 c
f
n
1449.77 4105.06 m
1449.77 4099.66 1445.39 4095.29 1440.0 4095.29 c
1434.6 4095.29 1430.22 4099.66 1430.22 4105.06 c
1430.22 4110.46 1434.6 4114.84 1440.0 4114.84 c
1445.39 4114.84 1449.77 4110.46 1449.77 4105.06 c
f
n
1500.27 4114.84 m
1500.27 4109.44 1495.9 4105.06 1490.5 4105.06 c
1485.1 4105.06 1480.73 4109.44 1480.73 4114.84 c
1480.73 4120.23 1485.1 4124.61 1490.5 4124.61 c
1495.9 4124.61 1500.27 4120.23 1500.27 4114.84 c
f
n
1550.78 4125.43 m
1550.78 4120.03 1546.4 4115.65 1541.0 4115.65 c
1535.61 4115.65 1531.23 4120.03 1531.23 4125.43 c
1531.23 4130.82 1535.61 4135.2 1541.0 4135.2 c
1546.4 4135.2 1550.78 4130.82 1550.78 4125.43 c
f
n
1601.29 4135.2 m
1601.29 4129.8 1596.91 4125.43 1591.51 4125.43 c
1586.11 4125.43 1581.73 4129.8 1581.73 4135.2 c
1581.73 4140.6 1586.11 4144.98 1591.51 4144.98 c
1596.91 4144.98 1601.29 4140.6 1601.29 4135.2 c
f
n
1652.61 4144.98 m
1652.61 4139.58 1648.23 4135.2 1642.83 4135.2 c
1637.43 4135.2 1633.05 4139.58 1633.05 4144.98 c
1633.05 4150.38 1637.43 4154.75 1642.83 4154.75 c
1648.23 4154.75 1652.61 4150.38 1652.61 4144.98 c
f
n
1703.11 4155.57 m
1703.11 4150.17 1698.73 4145.79 1693.33 4145.79 c
1687.93 4145.79 1683.56 4150.17 1683.56 4155.57 c
1683.56 4160.96 1687.93 4165.34 1693.33 4165.34 c
1698.73 4165.34 1703.11 4160.96 1703.11 4155.57 c
f
n
1753.61 4165.34 m
1753.61 4159.94 1749.24 4155.57 1743.84 4155.57 c
1738.44 4155.57 1734.06 4159.94 1734.06 4165.34 c
1734.06 4170.74 1738.44 4175.12 1743.84 4175.12 c
1749.24 4175.12 1753.61 4170.74 1753.61 4165.34 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1855.44 4185.71 m
1855.44 4180.31 1851.06 4175.93 1845.66 4175.93 c
1840.26 4175.93 1835.89 4180.31 1835.89 4185.71 c
1835.89 4191.11 1840.26 4195.48 1845.66 4195.48 c
1851.06 4195.48 1855.44 4191.11 1855.44 4185.71 c
f
n
1905.94 4195.48 m
1905.94 4190.08 1901.57 4185.71 1896.17 4185.71 c
1890.77 4185.71 1886.39 4190.08 1886.39 4195.48 c
1886.39 4200.88 1890.77 4205.25 1896.17 4205.25 c
1901.57 4205.25 1905.94 4200.88 1905.94 4195.48 c
f
n
1956.45 4206.07 m
1956.45 4200.67 1952.07 4196.3 1946.67 4196.3 c
1941.27 4196.3 1936.89 4200.67 1936.89 4206.07 c
1936.89 4211.47 1941.27 4215.84 1946.67 4215.84 c
1952.07 4215.84 1956.45 4211.47 1956.45 4206.07 c
f
n
2007.77 4215.84 m
2007.77 4210.45 2003.39 4206.07 1997.99 4206.07 c
1992.59 4206.07 1988.21 4210.45 1988.21 4215.84 c
1988.21 4221.24 1992.59 4225.62 1997.99 4225.62 c
2003.39 4225.62 2007.77 4221.24 2007.77 4215.84 c
f
n
2058.27 4225.62 m
2058.27 4220.22 2053.89 4215.84 2048.5 4215.84 c
2043.1 4215.84 2038.72 4220.22 2038.72 4225.62 c
2038.72 4231.02 2043.1 4235.39 2048.5 4235.39 c
2053.89 4235.39 2058.27 4231.02 2058.27 4225.62 c
f
n
2108.77 4236.21 m
2108.77 4230.81 2104.4 4226.43 2099.0 4226.43 c
2093.6 4226.43 2089.23 4230.81 2089.23 4236.21 c
2089.23 4241.61 2093.6 4245.98 2099.0 4245.98 c
2104.4 4245.98 2108.77 4241.61 2108.77 4236.21 c
f
n
2159.28 4245.98 m
2159.28 4240.59 2154.9 4236.21 2149.5 4236.21 c
2144.11 4236.21 2139.73 4240.59 2139.73 4245.98 c
2139.73 4251.38 2144.11 4255.76 2149.5 4255.76 c
2154.9 4255.76 2159.28 4251.38 2159.28 4245.98 c
f
n
1408.23 4055.37 m
1408.23 4049.97 1403.85 4045.59 1398.45 4045.59 c
1393.05 4045.59 1388.68 4049.97 1388.68 4055.37 c
1388.68 4060.77 1393.05 4065.14 1398.45 4065.14 c
1403.85 4065.14 1408.23 4060.77 1408.23 4055.37 c
f
n
1457.92 4070.04 m
1457.92 4064.64 1453.54 4060.26 1448.14 4060.26 c
1442.74 4060.26 1438.37 4064.64 1438.37 4070.04 c
1438.37 4075.43 1442.74 4079.81 1448.14 4079.81 c
1453.54 4079.81 1457.92 4075.43 1457.92 4070.04 c
f
n
1507.61 4085.51 m
1507.61 4080.11 1503.23 4075.73 1497.83 4075.73 c
1492.43 4075.73 1488.05 4080.11 1488.05 4085.51 c
1488.05 4090.91 1492.43 4095.29 1497.83 4095.29 c
1503.23 4095.29 1507.61 4090.91 1507.61 4085.51 c
f
n
1557.3 4100.17 m
1557.3 4094.77 1552.92 4090.4 1547.52 4090.4 c
1542.12 4090.4 1537.75 4094.77 1537.75 4100.17 c
1537.75 4105.57 1542.12 4109.95 1547.52 4109.95 c
1552.92 4109.95 1557.3 4105.57 1557.3 4100.17 c
f
n
1606.17 4115.65 m
1606.17 4110.25 1601.8 4105.88 1596.4 4105.88 c
1591.0 4105.88 1586.62 4110.25 1586.62 4115.65 c
1586.62 4121.05 1591.0 4125.43 1596.4 4125.43 c
1601.8 4125.43 1606.17 4121.05 1606.17 4115.65 c
f
n
1655.86 4130.31 m
1655.86 4124.91 1651.48 4120.54 1646.09 4120.54 c
1640.69 4120.54 1636.31 4124.91 1636.31 4130.31 c
1636.31 4135.71 1640.69 4140.09 1646.09 4140.09 c
1651.48 4140.09 1655.86 4135.71 1655.86 4130.31 c
f
n
1705.55 4145.79 m
1705.55 4140.39 1701.18 4136.02 1695.78 4136.02 c
1690.38 4136.02 1686.0 4140.39 1686.0 4145.79 c
1686.0 4151.19 1690.38 4155.57 1695.78 4155.57 c
1701.18 4155.57 1705.55 4151.19 1705.55 4145.79 c
f
n
1755.24 4160.45 m
1755.24 4155.05 1750.87 4150.68 1745.47 4150.68 c
1740.07 4150.68 1735.69 4155.05 1735.69 4160.45 c
1735.69 4165.85 1740.07 4170.23 1745.47 4170.23 c
1750.87 4170.23 1755.24 4165.85 1755.24 4160.45 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1853.81 4190.59 m
1853.81 4185.2 1849.43 4180.82 1844.03 4180.82 c
1838.63 4180.82 1834.26 4185.2 1834.26 4190.59 c
1834.26 4195.99 1838.63 4200.37 1844.03 4200.37 c
1849.43 4200.37 1853.81 4195.99 1853.81 4190.59 c
f
n
1903.5 4205.25 m
1903.5 4199.86 1899.12 4195.48 1893.72 4195.48 c
1888.32 4195.48 1883.95 4199.86 1883.95 4205.25 c
1883.95 4210.65 1888.32 4215.03 1893.72 4215.03 c
1899.12 4215.03 1903.5 4210.65 1903.5 4205.25 c
f
n
1953.19 4220.73 m
1953.19 4215.34 1948.81 4210.96 1943.41 4210.96 c
1938.02 4210.96 1933.64 4215.34 1933.64 4220.73 c
1933.64 4226.13 1938.02 4230.51 1943.41 4230.51 c
1948.81 4230.51 1953.19 4226.13 1953.19 4220.73 c
f
n
2002.88 4235.39 m
2002.88 4230.0 1998.5 4225.62 1993.1 4225.62 c
1987.7 4225.62 1983.33 4230.0 1983.33 4235.39 c
1983.33 4240.79 1987.7 4245.17 1993.1 4245.17 c
1998.5 4245.17 2002.88 4240.79 2002.88 4235.39 c
f
n
2051.75 4250.87 m
2051.75 4245.47 2047.38 4241.1 2041.98 4241.1 c
2036.58 4241.1 2032.2 4245.47 2032.2 4250.87 c
2032.2 4256.27 2036.58 4260.65 2041.98 4260.65 c
2047.38 4260.65 2051.75 4256.27 2051.75 4250.87 c
f
n
2101.45 4265.54 m
2101.45 4260.14 2097.07 4255.76 2091.67 4255.76 c
2086.27 4255.76 2081.89 4260.14 2081.89 4265.54 c
2081.89 4270.93 2086.27 4275.31 2091.67 4275.31 c
2097.07 4275.31 2101.45 4270.93 2101.45 4265.54 c
f
n
2151.13 4281.01 m
2151.13 4275.61 2146.76 4271.24 2141.36 4271.24 c
2135.96 4271.24 2131.58 4275.61 2131.58 4281.01 c
2131.58 4286.41 2135.96 4290.79 2141.36 4290.79 c
2146.76 4290.79 2151.13 4286.41 2151.13 4281.01 c
f
n
1422.07 4017.09 m
1422.07 4011.69 1417.7 4007.31 1412.3 4007.31 c
1406.9 4007.31 1402.52 4011.69 1402.52 4017.09 c
1402.52 4022.48 1406.9 4026.86 1412.3 4026.86 c
1417.7 4026.86 1422.07 4022.48 1422.07 4017.09 c
f
n
1470.14 4036.64 m
1470.14 4031.24 1465.76 4026.86 1460.36 4026.86 c
1454.96 4026.86 1450.59 4031.24 1450.59 4036.64 c
1450.59 4042.04 1454.96 4046.41 1460.36 4046.41 c
1465.76 4046.41 1470.14 4042.04 1470.14 4036.64 c
f
n
1518.2 4057.0 m
1518.2 4051.6 1513.82 4047.23 1508.42 4047.23 c
1503.02 4047.23 1498.64 4051.6 1498.64 4057.0 c
1498.64 4062.4 1503.02 4066.77 1508.42 4066.77 c
1513.82 4066.77 1518.2 4062.4 1518.2 4057.0 c
f
n
1565.44 4076.55 m
1565.44 4071.15 1561.07 4066.77 1555.67 4066.77 c
1550.27 4066.77 1545.89 4071.15 1545.89 4076.55 c
1545.89 4081.95 1550.27 4086.32 1555.67 4086.32 c
1561.07 4086.32 1565.44 4081.95 1565.44 4076.55 c
f
n
1613.5 4096.1 m
1613.5 4090.7 1609.12 4086.32 1603.73 4086.32 c
1598.33 4086.32 1593.95 4090.7 1593.95 4096.1 c
1593.95 4101.5 1598.33 4105.88 1603.73 4105.88 c
1609.12 4105.88 1613.5 4101.5 1613.5 4096.1 c
f
n
1661.56 4116.46 m
1661.56 4111.07 1657.19 4106.69 1651.79 4106.69 c
1646.39 4106.69 1642.02 4111.07 1642.02 4116.46 c
1642.02 4121.86 1646.39 4126.24 1651.79 4126.24 c
1657.19 4126.24 1661.56 4121.86 1661.56 4116.46 c
f
n
1708.81 4136.02 m
1708.81 4130.62 1704.43 4126.24 1699.04 4126.24 c
1693.64 4126.24 1689.26 4130.62 1689.26 4136.02 c
1689.26 4141.41 1693.64 4145.79 1699.04 4145.79 c
1704.43 4145.79 1708.81 4141.41 1708.81 4136.02 c
f
n
1756.87 4155.57 m
1756.87 4150.17 1752.5 4145.79 1747.1 4145.79 c
1741.7 4145.79 1737.32 4150.17 1737.32 4155.57 c
1737.32 4160.96 1741.7 4165.34 1747.1 4165.34 c
1752.5 4165.34 1756.87 4160.96 1756.87 4155.57 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1852.18 4195.48 m
1852.18 4190.08 1847.8 4185.71 1842.4 4185.71 c
1837.0 4185.71 1832.63 4190.08 1832.63 4195.48 c
1832.63 4200.88 1837.0 4205.25 1842.4 4205.25 c
1847.8 4205.25 1852.18 4200.88 1852.18 4195.48 c
f
n
1900.24 4215.03 m
1900.24 4209.63 1895.86 4205.25 1890.46 4205.25 c
1885.07 4205.25 1880.69 4209.63 1880.69 4215.03 c
1880.69 4220.43 1885.07 4224.8 1890.46 4224.8 c
1895.86 4224.8 1900.24 4220.43 1900.24 4215.03 c
f
n
1947.48 4234.58 m
1947.48 4229.18 1943.11 4224.8 1937.71 4224.8 c
1932.31 4224.8 1927.94 4229.18 1927.94 4234.58 c
1927.94 4239.98 1932.31 4244.36 1937.71 4244.36 c
1943.11 4244.36 1947.48 4239.98 1947.48 4234.58 c
f
n
1995.55 4254.95 m
1995.55 4249.55 1991.17 4245.17 1985.77 4245.17 c
1980.38 4245.17 1976.0 4249.55 1976.0 4254.95 c
1976.0 4260.34 1980.38 4264.72 1985.77 4264.72 c
1991.17 4264.72 1995.55 4260.34 1995.55 4254.95 c
f
n
2043.61 4274.5 m
2043.61 4269.1 2039.23 4264.72 2033.83 4264.72 c
2028.43 4264.72 2024.06 4269.1 2024.06 4274.5 c
2024.06 4279.89 2028.43 4284.27 2033.83 4284.27 c
2039.23 4284.27 2043.61 4279.89 2043.61 4274.5 c
f
n
2090.86 4294.05 m
2090.86 4288.65 2086.48 4284.27 2081.08 4284.27 c
2075.68 4284.27 2071.3 4288.65 2071.3 4294.05 c
2071.3 4299.45 2075.68 4303.82 2081.08 4303.82 c
2086.48 4303.82 2090.86 4299.45 2090.86 4294.05 c
f
n
2138.91 4314.41 m
2138.91 4309.01 2134.54 4304.64 2129.14 4304.64 c
2123.74 4304.64 2119.36 4309.01 2119.36 4314.41 c
2119.36 4319.81 2123.74 4324.19 2129.14 4324.19 c
2134.54 4324.19 2138.91 4319.81 2138.91 4314.41 c
f
n
1439.18 3980.43 m
1439.18 3975.03 1434.8 3970.65 1429.41 3970.65 c
1424.01 3970.65 1419.63 3975.03 1419.63 3980.43 c
1419.63 3985.83 1424.01 3990.2 1429.41 3990.2 c
1434.8 3990.2 1439.18 3985.83 1439.18 3980.43 c
f
n
1484.8 4004.87 m
1484.8 3999.47 1480.42 3995.09 1475.02 3995.09 c
1469.62 3995.09 1465.25 3999.47 1465.25 4004.87 c
1465.25 4010.27 1469.62 4014.64 1475.02 4014.64 c
1480.42 4014.64 1484.8 4010.27 1484.8 4004.87 c
f
n
1530.41 4029.3 m
1530.41 4023.91 1526.04 4019.53 1520.64 4019.53 c
1515.24 4019.53 1510.86 4023.91 1510.86 4029.3 c
1510.86 4034.7 1515.24 4039.08 1520.64 4039.08 c
1526.04 4039.08 1530.41 4034.7 1530.41 4029.3 c
f
n
1576.03 4053.74 m
1576.03 4048.34 1571.66 4043.96 1566.26 4043.96 c
1560.86 4043.96 1556.48 4048.34 1556.48 4053.74 c
1556.48 4059.14 1560.86 4063.52 1566.26 4063.52 c
1571.66 4063.52 1576.03 4059.14 1576.03 4053.74 c
f
n
1621.65 4078.18 m
1621.65 4072.78 1617.27 4068.4 1611.88 4068.4 c
1606.48 4068.4 1602.1 4072.78 1602.1 4078.18 c
1602.1 4083.58 1606.48 4087.95 1611.88 4087.95 c
1617.27 4087.95 1621.65 4083.58 1621.65 4078.18 c
f
n
1667.27 4102.62 m
1667.27 4097.22 1662.89 4092.84 1657.49 4092.84 c
1652.09 4092.84 1647.71 4097.22 1647.71 4102.62 c
1647.71 4108.02 1652.09 4112.39 1657.49 4112.39 c
1662.89 4112.39 1667.27 4108.02 1667.27 4102.62 c
f
n
1712.88 4127.05 m
1712.88 4121.66 1708.51 4117.28 1703.11 4117.28 c
1697.71 4117.28 1693.33 4121.66 1693.33 4127.05 c
1693.33 4132.45 1697.71 4136.83 1703.11 4136.83 c
1708.51 4136.83 1712.88 4132.45 1712.88 4127.05 c
f
n
1758.5 4151.49 m
1758.5 4146.09 1754.12 4141.72 1748.73 4141.72 c
1743.33 4141.72 1738.95 4146.09 1738.95 4151.49 c
1738.95 4156.89 1743.33 4161.27 1748.73 4161.27 c
1754.12 4161.27 1758.5 4156.89 1758.5 4151.49 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1850.55 4199.55 m
1850.55 4194.16 1846.17 4189.78 1840.77 4189.78 c
1835.38 4189.78 1831.0 4194.16 1831.0 4199.55 c
1831.0 4204.95 1835.38 4209.33 1840.77 4209.33 c
1846.17 4209.33 1850.55 4204.95 1850.55 4199.55 c
f
n
1896.17 4223.99 m
1896.17 4218.59 1891.79 4214.21 1886.39 4214.21 c
1880.99 4214.21 1876.62 4218.59 1876.62 4223.99 c
1876.62 4229.39 1880.99 4233.77 1886.39 4233.77 c
1891.79 4233.77 1896.17 4229.39 1896.17 4223.99 c
f
n
1941.79 4248.43 m
1941.79 4243.03 1937.41 4238.65 1932.01 4238.65 c
1926.61 4238.65 1922.23 4243.03 1922.23 4248.43 c
1922.23 4253.83 1926.61 4258.2 1932.01 4258.2 c
1937.41 4258.2 1941.79 4253.83 1941.79 4248.43 c
f
n
1987.4 4272.87 m
1987.4 4267.47 1983.02 4263.09 1977.62 4263.09 c
1972.23 4263.09 1967.85 4267.47 1967.85 4272.87 c
1967.85 4278.27 1972.23 4282.64 1977.62 4282.64 c
1983.02 4282.64 1987.4 4278.27 1987.4 4272.87 c
f
n
2033.02 4297.3 m
2033.02 4291.91 2028.64 4287.53 2023.24 4287.53 c
2017.84 4287.53 2013.47 4291.91 2013.47 4297.3 c
2013.47 4302.7 2017.84 4307.08 2023.24 4307.08 c
2028.64 4307.08 2033.02 4302.7 2033.02 4297.3 c
f
n
2078.64 4321.74 m
2078.64 4316.34 2074.26 4311.97 2068.86 4311.97 c
2063.46 4311.97 2059.09 4316.34 2059.09 4321.74 c
2059.09 4327.14 2063.46 4331.52 2068.86 4331.52 c
2074.26 4331.52 2078.64 4327.14 2078.64 4321.74 c
f
n
2124.25 4346.18 m
2124.25 4340.78 2119.88 4336.41 2114.48 4336.41 c
2109.08 4336.41 2104.7 4340.78 2104.7 4346.18 c
2104.7 4351.58 2109.08 4355.95 2114.48 4355.95 c
2119.88 4355.95 2124.25 4351.58 2124.25 4346.18 c
f
n
1460.36 3945.4 m
1460.36 3940.0 1455.98 3935.62 1450.59 3935.62 c
1445.19 3935.62 1440.81 3940.0 1440.81 3945.4 c
1440.81 3950.8 1445.19 3955.18 1450.59 3955.18 c
1455.98 3955.18 1460.36 3950.8 1460.36 3945.4 c
f
n
1503.54 3974.73 m
1503.54 3969.33 1499.16 3964.95 1493.76 3964.95 c
1488.36 3964.95 1483.98 3969.33 1483.98 3974.73 c
1483.98 3980.12 1488.36 3984.5 1493.76 3984.5 c
1499.16 3984.5 1503.54 3980.12 1503.54 3974.73 c
f
n
1546.71 4003.24 m
1546.71 3997.84 1542.33 3993.46 1536.93 3993.46 c
1531.54 3993.46 1527.16 3997.84 1527.16 4003.24 c
1527.16 4008.64 1531.54 4013.01 1536.93 4013.01 c
1542.33 4013.01 1546.71 4008.64 1546.71 4003.24 c
f
n
1589.88 4031.75 m
1589.88 4026.35 1585.5 4021.97 1580.11 4021.97 c
1574.71 4021.97 1570.33 4026.35 1570.33 4031.75 c
1570.33 4037.14 1574.71 4041.52 1580.11 4041.52 c
1585.5 4041.52 1589.88 4037.14 1589.88 4031.75 c
f
n
1632.24 4060.26 m
1632.24 4054.86 1627.86 4050.48 1622.46 4050.48 c
1617.07 4050.48 1612.69 4054.86 1612.69 4060.26 c
1612.69 4065.66 1617.07 4070.04 1622.46 4070.04 c
1627.86 4070.04 1632.24 4065.66 1632.24 4060.26 c
f
n
1675.41 4089.58 m
1675.41 4084.18 1671.04 4079.81 1665.64 4079.81 c
1660.24 4079.81 1655.86 4084.18 1655.86 4089.58 c
1655.86 4094.98 1660.24 4099.36 1665.64 4099.36 c
1671.04 4099.36 1675.41 4094.98 1675.41 4089.58 c
f
n
1718.59 4118.09 m
1718.59 4112.7 1714.21 4108.32 1708.81 4108.32 c
1703.41 4108.32 1699.04 4112.7 1699.04 4118.09 c
1699.04 4123.49 1703.41 4127.87 1708.81 4127.87 c
1714.21 4127.87 1718.59 4123.49 1718.59 4118.09 c
f
n
1761.76 4146.61 m
1761.76 4141.21 1757.38 4136.83 1751.98 4136.83 c
1746.59 4136.83 1742.21 4141.21 1742.21 4146.61 c
1742.21 4152.0 1746.59 4156.38 1751.98 4156.38 c
1757.38 4156.38 1761.76 4152.0 1761.76 4146.61 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1847.29 4204.44 m
1847.29 4199.04 1842.91 4194.66 1837.52 4194.66 c
1832.12 4194.66 1827.74 4199.04 1827.74 4204.44 c
1827.74 4209.84 1832.12 4214.21 1837.52 4214.21 c
1842.91 4214.21 1847.29 4209.84 1847.29 4204.44 c
f
n
1890.46 4232.95 m
1890.46 4227.55 1886.09 4223.18 1880.69 4223.18 c
1875.29 4223.18 1870.91 4227.55 1870.91 4232.95 c
1870.91 4238.35 1875.29 4242.73 1880.69 4242.73 c
1886.09 4242.73 1890.46 4238.35 1890.46 4232.95 c
f
n
1933.64 4261.46 m
1933.64 4256.06 1929.26 4251.69 1923.86 4251.69 c
1918.46 4251.69 1914.09 4256.06 1914.09 4261.46 c
1914.09 4266.86 1918.46 4271.24 1923.86 4271.24 c
1929.26 4271.24 1933.64 4266.86 1933.64 4261.46 c
f
n
1976.81 4290.79 m
1976.81 4285.39 1972.43 4281.01 1967.04 4281.01 c
1961.64 4281.01 1957.26 4285.39 1957.26 4290.79 c
1957.26 4296.19 1961.64 4300.56 1967.04 4300.56 c
1972.43 4300.56 1976.81 4296.19 1976.81 4290.79 c
f
n
2019.17 4319.3 m
2019.17 4313.9 2014.79 4309.52 2009.39 4309.52 c
2004.0 4309.52 1999.62 4313.9 1999.62 4319.3 c
1999.62 4324.7 2004.0 4329.07 2009.39 4329.07 c
2014.79 4329.07 2019.17 4324.7 2019.17 4319.3 c
f
n
2062.34 4347.81 m
2062.34 4342.41 2057.96 4338.04 2052.57 4338.04 c
2047.17 4338.04 2042.79 4342.41 2042.79 4347.81 c
2042.79 4353.21 2047.17 4357.59 2052.57 4357.59 c
2057.96 4357.59 2062.34 4353.21 2062.34 4347.81 c
f
n
2105.52 4376.32 m
2105.52 4370.92 2101.14 4366.54 2095.74 4366.54 c
2090.34 4366.54 2085.96 4370.92 2085.96 4376.32 c
2085.96 4381.72 2090.34 4386.09 2095.74 4386.09 c
2101.14 4386.09 2105.52 4381.72 2105.52 4376.32 c
f
n
1484.8 3912.82 m
1484.8 3907.42 1480.42 3903.04 1475.02 3903.04 c
1469.62 3903.04 1465.25 3907.42 1465.25 3912.82 c
1465.25 3918.21 1469.62 3922.59 1475.02 3922.59 c
1480.42 3922.59 1484.8 3918.21 1484.8 3912.82 c
f
n
1524.71 3946.21 m
1524.71 3940.82 1520.34 3936.44 1514.94 3936.44 c
1509.54 3936.44 1505.16 3940.82 1505.16 3946.21 c
1505.16 3951.61 1509.54 3955.99 1514.94 3955.99 c
1520.34 3955.99 1524.71 3951.61 1524.71 3946.21 c
f
n
1564.63 3978.8 m
1564.63 3973.4 1560.25 3969.02 1554.85 3969.02 c
1549.45 3969.02 1545.08 3973.4 1545.08 3978.8 c
1545.08 3984.2 1549.45 3988.57 1554.85 3988.57 c
1560.25 3988.57 1564.63 3984.2 1564.63 3978.8 c
f
n
1604.54 4011.38 m
1604.54 4005.98 1600.17 4001.61 1594.77 4001.61 c
1589.37 4001.61 1584.99 4005.98 1584.99 4011.38 c
1584.99 4016.78 1589.37 4021.16 1594.77 4021.16 c
1600.17 4021.16 1604.54 4016.78 1604.54 4011.38 c
f
n
1644.46 4043.96 m
1644.46 4038.57 1640.08 4034.19 1634.68 4034.19 c
1629.29 4034.19 1624.91 4038.57 1624.91 4043.96 c
1624.91 4049.36 1629.29 4053.74 1634.68 4053.74 c
1640.08 4053.74 1644.46 4049.36 1644.46 4043.96 c
f
n
1684.37 4077.36 m
1684.37 4071.96 1680.0 4067.59 1674.6 4067.59 c
1669.2 4067.59 1664.82 4071.96 1664.82 4077.36 c
1664.82 4082.76 1669.2 4087.14 1674.6 4087.14 c
1680.0 4087.14 1684.37 4082.76 1684.37 4077.36 c
f
n
1724.29 4109.95 m
1724.29 4104.55 1719.91 4100.17 1714.51 4100.17 c
1709.11 4100.17 1704.74 4104.55 1704.74 4109.95 c
1704.74 4115.35 1709.11 4119.72 1714.51 4119.72 c
1719.91 4119.72 1724.29 4115.35 1724.29 4109.95 c
f
n
1764.2 4142.53 m
1764.2 4137.13 1759.82 4132.76 1754.43 4132.76 c
1749.03 4132.76 1744.65 4137.13 1744.65 4142.53 c
1744.65 4147.93 1749.03 4152.31 1754.43 4152.31 c
1759.82 4152.31 1764.2 4147.93 1764.2 4142.53 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1844.85 4208.52 m
1844.85 4203.12 1840.47 4198.74 1835.07 4198.74 c
1829.68 4198.74 1825.3 4203.12 1825.3 4208.52 c
1825.3 4213.91 1829.68 4218.29 1835.07 4218.29 c
1840.47 4218.29 1844.85 4213.91 1844.85 4208.52 c
f
n
1884.76 4241.1 m
1884.76 4235.7 1880.39 4231.32 1874.99 4231.32 c
1869.59 4231.32 1865.21 4235.7 1865.21 4241.1 c
1865.21 4246.5 1869.59 4250.87 1874.99 4250.87 c
1880.39 4250.87 1884.76 4246.5 1884.76 4241.1 c
f
n
1924.68 4273.68 m
1924.68 4268.28 1920.3 4263.91 1914.9 4263.91 c
1909.5 4263.91 1905.13 4268.28 1905.13 4273.68 c
1905.13 4279.08 1909.5 4283.46 1914.9 4283.46 c
1920.3 4283.46 1924.68 4279.08 1924.68 4273.68 c
f
n
1964.59 4307.08 m
1964.59 4301.68 1960.21 4297.3 1954.82 4297.3 c
1949.42 4297.3 1945.04 4301.68 1945.04 4307.08 c
1945.04 4312.48 1949.42 4316.86 1954.82 4316.86 c
1960.21 4316.86 1964.59 4312.48 1964.59 4307.08 c
f
n
2004.51 4339.66 m
2004.51 4334.27 2000.13 4329.89 1994.73 4329.89 c
1989.33 4329.89 1984.96 4334.27 1984.96 4339.66 c
1984.96 4345.06 1989.33 4349.44 1994.73 4349.44 c
2000.13 4349.44 2004.51 4345.06 2004.51 4339.66 c
f
n
2044.42 4372.25 m
2044.42 4366.85 2040.05 4362.47 2034.65 4362.47 c
2029.25 4362.47 2024.87 4366.85 2024.87 4372.25 c
2024.87 4377.64 2029.25 4382.02 2034.65 4382.02 c
2040.05 4382.02 2044.42 4377.64 2044.42 4372.25 c
f
n
2084.34 4404.83 m
2084.34 4399.43 2079.96 4395.05 2074.56 4395.05 c
2069.16 4395.05 2064.79 4399.43 2064.79 4404.83 c
2064.79 4410.23 2069.16 4414.61 2074.56 4414.61 c
2079.96 4414.61 2084.34 4410.23 2084.34 4404.83 c
f
n
1511.68 3882.68 m
1511.68 3877.28 1507.3 3872.9 1501.91 3872.9 c
1496.51 3872.9 1492.13 3877.28 1492.13 3882.68 c
1492.13 3888.07 1496.51 3892.45 1501.91 3892.45 c
1507.3 3892.45 1511.68 3888.07 1511.68 3882.68 c
f
n
1548.34 3919.33 m
1548.34 3913.93 1543.96 3909.56 1538.56 3909.56 c
1533.16 3909.56 1528.79 3913.93 1528.79 3919.33 c
1528.79 3924.73 1533.16 3929.11 1538.56 3929.11 c
1543.96 3929.11 1548.34 3924.73 1548.34 3919.33 c
f
n
1584.99 3955.99 m
1584.99 3950.59 1580.62 3946.21 1575.22 3946.21 c
1569.82 3946.21 1565.44 3950.59 1565.44 3955.99 c
1565.44 3961.39 1569.82 3965.77 1575.22 3965.77 c
1580.62 3965.77 1584.99 3961.39 1584.99 3955.99 c
f
n
1621.65 3992.65 m
1621.65 3987.25 1617.27 3982.87 1611.88 3982.87 c
1606.48 3982.87 1602.1 3987.25 1602.1 3992.65 c
1602.1 3998.05 1606.48 4002.42 1611.88 4002.42 c
1617.27 4002.42 1621.65 3998.05 1621.65 3992.65 c
f
n
1658.3 4029.3 m
1658.3 4023.91 1653.93 4019.53 1648.53 4019.53 c
1643.13 4019.53 1638.75 4023.91 1638.75 4029.3 c
1638.75 4034.7 1643.13 4039.08 1648.53 4039.08 c
1653.93 4039.08 1658.3 4034.7 1658.3 4029.3 c
f
n
1694.96 4065.96 m
1694.96 4060.56 1690.59 4056.18 1685.19 4056.18 c
1679.79 4056.18 1675.41 4060.56 1675.41 4065.96 c
1675.41 4071.36 1679.79 4075.73 1685.19 4075.73 c
1690.59 4075.73 1694.96 4071.36 1694.96 4065.96 c
f
n
1731.62 4102.62 m
1731.62 4097.22 1727.24 4092.84 1721.84 4092.84 c
1716.45 4092.84 1712.07 4097.22 1712.07 4102.62 c
1712.07 4108.02 1716.45 4112.39 1721.84 4112.39 c
1727.24 4112.39 1731.62 4108.02 1731.62 4102.62 c
f
n
1768.28 4139.27 m
1768.28 4133.88 1763.9 4129.5 1758.5 4129.5 c
1753.1 4129.5 1748.73 4133.88 1748.73 4139.27 c
1748.73 4144.67 1753.1 4149.05 1758.5 4149.05 c
1763.9 4149.05 1768.28 4144.67 1768.28 4139.27 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1840.77 4211.77 m
1840.77 4206.38 1836.4 4202.0 1831.0 4202.0 c
1825.6 4202.0 1821.22 4206.38 1821.22 4211.77 c
1821.22 4217.17 1825.6 4221.55 1831.0 4221.55 c
1836.4 4221.55 1840.77 4217.17 1840.77 4211.77 c
f
n
1877.43 4248.43 m
1877.43 4243.03 1873.05 4238.65 1867.66 4238.65 c
1862.26 4238.65 1857.88 4243.03 1857.88 4248.43 c
1857.88 4253.83 1862.26 4258.2 1867.66 4258.2 c
1873.05 4258.2 1877.43 4253.83 1877.43 4248.43 c
f
n
1914.09 4285.09 m
1914.09 4279.69 1909.71 4275.31 1904.31 4275.31 c
1898.91 4275.31 1894.54 4279.69 1894.54 4285.09 c
1894.54 4290.48 1898.91 4294.86 1904.31 4294.86 c
1909.71 4294.86 1914.09 4290.48 1914.09 4285.09 c
f
n
1950.75 4321.74 m
1950.75 4316.34 1946.37 4311.97 1940.97 4311.97 c
1935.57 4311.97 1931.2 4316.34 1931.2 4321.74 c
1931.2 4327.14 1935.57 4331.52 1940.97 4331.52 c
1946.37 4331.52 1950.75 4327.14 1950.75 4321.74 c
f
n
1987.4 4358.4 m
1987.4 4353.0 1983.02 4348.62 1977.62 4348.62 c
1972.23 4348.62 1967.85 4353.0 1967.85 4358.4 c
1967.85 4363.8 1972.23 4368.17 1977.62 4368.17 c
1983.02 4368.17 1987.4 4363.8 1987.4 4358.4 c
f
n
2024.06 4395.05 m
2024.06 4389.66 2019.68 4385.28 2014.28 4385.28 c
2008.88 4385.28 2004.51 4389.66 2004.51 4395.05 c
2004.51 4400.45 2008.88 4404.83 2014.28 4404.83 c
2019.68 4404.83 2024.06 4400.45 2024.06 4395.05 c
f
n
2060.71 4431.71 m
2060.71 4426.31 2056.34 4421.94 2050.94 4421.94 c
2045.54 4421.94 2041.16 4426.31 2041.16 4431.71 c
2041.16 4437.11 2045.54 4441.49 2050.94 4441.49 c
2056.34 4441.49 2060.71 4437.11 2060.71 4431.71 c
f
n
1541.82 3855.8 m
1541.82 3850.4 1537.44 3846.02 1532.04 3846.02 c
1526.64 3846.02 1522.27 3850.4 1522.27 3855.8 c
1522.27 3861.2 1526.64 3865.57 1532.04 3865.57 c
1537.44 3865.57 1541.82 3861.2 1541.82 3855.8 c
f
n
1575.22 3895.71 m
1575.22 3890.31 1570.84 3885.94 1565.44 3885.94 c
1560.04 3885.94 1555.67 3890.31 1555.67 3895.71 c
1555.67 3901.11 1560.04 3905.48 1565.44 3905.48 c
1570.84 3905.48 1575.22 3901.11 1575.22 3895.71 c
f
n
1607.8 3935.62 m
1607.8 3930.23 1603.43 3925.85 1598.03 3925.85 c
1592.63 3925.85 1588.25 3930.23 1588.25 3935.62 c
1588.25 3941.02 1592.63 3945.4 1598.03 3945.4 c
1603.43 3945.4 1607.8 3941.02 1607.8 3935.62 c
f
n
1640.39 3975.54 m
1640.39 3970.14 1636.01 3965.77 1630.61 3965.77 c
1625.21 3965.77 1620.84 3970.14 1620.84 3975.54 c
1620.84 3980.94 1625.21 3985.32 1630.61 3985.32 c
1636.01 3985.32 1640.39 3980.94 1640.39 3975.54 c
f
n
1672.97 4015.46 m
1672.97 4010.06 1668.59 4005.68 1663.2 4005.68 c
1657.8 4005.68 1653.42 4010.06 1653.42 4015.46 c
1653.42 4020.86 1657.8 4025.23 1663.2 4025.23 c
1668.59 4025.23 1672.97 4020.86 1672.97 4015.46 c
f
n
1706.37 4055.37 m
1706.37 4049.97 1701.99 4045.59 1696.59 4045.59 c
1691.19 4045.59 1686.82 4049.97 1686.82 4055.37 c
1686.82 4060.77 1691.19 4065.14 1696.59 4065.14 c
1701.99 4065.14 1706.37 4060.77 1706.37 4055.37 c
f
n
1738.95 4095.29 m
1738.95 4089.89 1734.57 4085.51 1729.18 4085.51 c
1723.78 4085.51 1719.4 4089.89 1719.4 4095.29 c
1719.4 4100.68 1723.78 4105.06 1729.18 4105.06 c
1734.57 4105.06 1738.95 4100.68 1738.95 4095.29 c
f
n
1771.54 4135.2 m
1771.54 4129.8 1767.16 4125.43 1761.76 4125.43 c
1756.36 4125.43 1751.98 4129.8 1751.98 4135.2 c
1751.98 4140.6 1756.36 4144.98 1761.76 4144.98 c
1767.16 4144.98 1771.54 4140.6 1771.54 4135.2 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1837.52 4215.84 m
1837.52 4210.45 1833.14 4206.07 1827.74 4206.07 c
1822.34 4206.07 1817.96 4210.45 1817.96 4215.84 c
1817.96 4221.24 1822.34 4225.62 1827.74 4225.62 c
1833.14 4225.62 1837.52 4221.24 1837.52 4215.84 c
f
n
1870.1 4255.76 m
1870.1 4250.36 1865.72 4245.98 1860.32 4245.98 c
1854.93 4245.98 1850.55 4250.36 1850.55 4255.76 c
1850.55 4261.16 1854.93 4265.54 1860.32 4265.54 c
1865.72 4265.54 1870.1 4261.16 1870.1 4255.76 c
f
n
1902.68 4295.68 m
1902.68 4290.28 1898.31 4285.9 1892.91 4285.9 c
1887.51 4285.9 1883.13 4290.28 1883.13 4295.68 c
1883.13 4301.07 1887.51 4305.45 1892.91 4305.45 c
1898.31 4305.45 1902.68 4301.07 1902.68 4295.68 c
f
n
1936.08 4335.59 m
1936.08 4330.19 1931.7 4325.82 1926.3 4325.82 c
1920.91 4325.82 1916.53 4330.19 1916.53 4335.59 c
1916.53 4340.99 1920.91 4345.36 1926.3 4345.36 c
1931.7 4345.36 1936.08 4340.99 1936.08 4335.59 c
f
n
1968.66 4375.5 m
1968.66 4370.11 1964.29 4365.73 1958.89 4365.73 c
1953.49 4365.73 1949.11 4370.11 1949.11 4375.5 c
1949.11 4380.9 1953.49 4385.28 1958.89 4385.28 c
1964.29 4385.28 1968.66 4380.9 1968.66 4375.5 c
f
n
2001.25 4415.42 m
2001.25 4410.02 1996.87 4405.64 1991.47 4405.64 c
1986.07 4405.64 1981.7 4410.02 1981.7 4415.42 c
1981.7 4420.82 1986.07 4425.2 1991.47 4425.2 c
1996.87 4425.2 2001.25 4420.82 2001.25 4415.42 c
f
n
2033.83 4455.34 m
2033.83 4449.94 2029.46 4445.56 2024.06 4445.56 c
2018.66 4445.56 2014.28 4449.94 2014.28 4455.34 c
2014.28 4460.73 2018.66 4465.11 2024.06 4465.11 c
2029.46 4465.11 2033.83 4460.73 2033.83 4455.34 c
f
n
1574.4 3831.36 m
1574.4 3825.96 1570.03 3821.58 1564.63 3821.58 c
1559.23 3821.58 1554.85 3825.96 1554.85 3831.36 c
1554.85 3836.76 1559.23 3841.13 1564.63 3841.13 c
1570.03 3841.13 1574.4 3836.76 1574.4 3831.36 c
f
n
1603.73 3874.53 m
1603.73 3869.13 1599.35 3864.76 1593.95 3864.76 c
1588.55 3864.76 1584.18 3869.13 1584.18 3874.53 c
1584.18 3879.93 1588.55 3884.3 1593.95 3884.3 c
1599.35 3884.3 1603.73 3879.93 1603.73 3874.53 c
f
n
1632.24 3917.7 m
1632.24 3912.3 1627.86 3907.93 1622.46 3907.93 c
1617.07 3907.93 1612.69 3912.3 1612.69 3917.7 c
1612.69 3923.1 1617.07 3927.48 1622.46 3927.48 c
1627.86 3927.48 1632.24 3923.1 1632.24 3917.7 c
f
n
1660.75 3960.88 m
1660.75 3955.48 1656.37 3951.1 1650.97 3951.1 c
1645.57 3951.1 1641.2 3955.48 1641.2 3960.88 c
1641.2 3966.28 1645.57 3970.65 1650.97 3970.65 c
1656.37 3970.65 1660.75 3966.28 1660.75 3960.88 c
f
n
1689.26 4003.24 m
1689.26 3997.84 1684.88 3993.46 1679.48 3993.46 c
1674.09 3993.46 1669.71 3997.84 1669.71 4003.24 c
1669.71 4008.64 1674.09 4013.01 1679.48 4013.01 c
1684.88 4013.01 1689.26 4008.64 1689.26 4003.24 c
f
n
1718.59 4046.41 m
1718.59 4041.01 1714.21 4036.64 1708.81 4036.64 c
1703.41 4036.64 1699.04 4041.01 1699.04 4046.41 c
1699.04 4051.81 1703.41 4056.18 1708.81 4056.18 c
1714.21 4056.18 1718.59 4051.81 1718.59 4046.41 c
f
n
1747.1 4089.58 m
1747.1 4084.18 1742.72 4079.81 1737.32 4079.81 c
1731.92 4079.81 1727.55 4084.18 1727.55 4089.58 c
1727.55 4094.98 1731.92 4099.36 1737.32 4099.36 c
1742.72 4099.36 1747.1 4094.98 1747.1 4089.58 c
f
n
1775.61 4132.76 m
1775.61 4127.36 1771.23 4122.98 1765.83 4122.98 c
1760.43 4122.98 1756.06 4127.36 1756.06 4132.76 c
1756.06 4138.16 1760.43 4142.53 1765.83 4142.53 c
1771.23 4142.53 1775.61 4138.16 1775.61 4132.76 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1833.44 4218.29 m
1833.44 4212.89 1829.07 4208.52 1823.67 4208.52 c
1818.27 4208.52 1813.89 4212.89 1813.89 4218.29 c
1813.89 4223.69 1818.27 4228.06 1823.67 4228.06 c
1829.07 4228.06 1833.44 4223.69 1833.44 4218.29 c
f
n
1861.95 4261.46 m
1861.95 4256.06 1857.58 4251.69 1852.18 4251.69 c
1846.78 4251.69 1842.4 4256.06 1842.4 4261.46 c
1842.4 4266.86 1846.78 4271.24 1852.18 4271.24 c
1857.58 4271.24 1861.95 4266.86 1861.95 4261.46 c
f
n
1890.46 4304.64 m
1890.46 4299.24 1886.09 4294.86 1880.69 4294.86 c
1875.29 4294.86 1870.91 4299.24 1870.91 4304.64 c
1870.91 4310.04 1875.29 4314.41 1880.69 4314.41 c
1886.09 4314.41 1890.46 4310.04 1890.46 4304.64 c
f
n
1919.79 4347.81 m
1919.79 4342.41 1915.41 4338.04 1910.02 4338.04 c
1904.62 4338.04 1900.24 4342.41 1900.24 4347.81 c
1900.24 4353.21 1904.62 4357.59 1910.02 4357.59 c
1915.41 4357.59 1919.79 4353.21 1919.79 4347.81 c
f
n
1948.3 4390.17 m
1948.3 4384.77 1943.93 4380.39 1938.53 4380.39 c
1933.13 4380.39 1928.75 4384.77 1928.75 4390.17 c
1928.75 4395.57 1933.13 4399.94 1938.53 4399.94 c
1943.93 4399.94 1948.3 4395.57 1948.3 4390.17 c
f
n
1976.81 4433.34 m
1976.81 4427.94 1972.43 4423.57 1967.04 4423.57 c
1961.64 4423.57 1957.26 4427.94 1957.26 4433.34 c
1957.26 4438.74 1961.64 4443.12 1967.04 4443.12 c
1972.43 4443.12 1976.81 4438.74 1976.81 4433.34 c
f
n
2005.32 4476.52 m
2005.32 4471.12 2000.95 4466.74 1995.55 4466.74 c
1990.15 4466.74 1985.77 4471.12 1985.77 4476.52 c
1985.77 4481.91 1990.15 4486.29 1995.55 4486.29 c
2000.95 4486.29 2005.32 4481.91 2005.32 4476.52 c
f
n
1609.43 3810.18 m
1609.43 3804.78 1605.05 3800.4 1599.66 3800.4 c
1594.26 3800.4 1589.88 3804.78 1589.88 3810.18 c
1589.88 3815.58 1594.26 3819.95 1599.66 3819.95 c
1605.05 3819.95 1609.43 3815.58 1609.43 3810.18 c
f
n
1633.87 3855.8 m
1633.87 3850.4 1629.49 3846.02 1624.09 3846.02 c
1618.7 3846.02 1614.32 3850.4 1614.32 3855.8 c
1614.32 3861.2 1618.7 3865.57 1624.09 3865.57 c
1629.49 3865.57 1633.87 3861.2 1633.87 3855.8 c
f
n
1658.3 3901.41 m
1658.3 3896.02 1653.93 3891.64 1648.53 3891.64 c
1643.13 3891.64 1638.75 3896.02 1638.75 3901.41 c
1638.75 3906.81 1643.13 3911.19 1648.53 3911.19 c
1653.93 3911.19 1658.3 3906.81 1658.3 3901.41 c
f
n
1682.74 3947.03 m
1682.74 3941.63 1678.37 3937.25 1672.97 3937.25 c
1667.57 3937.25 1663.2 3941.63 1663.2 3947.03 c
1663.2 3952.43 1667.57 3956.8 1672.97 3956.8 c
1678.37 3956.8 1682.74 3952.43 1682.74 3947.03 c
f
n
1707.18 3992.65 m
1707.18 3987.25 1702.8 3982.87 1697.41 3982.87 c
1692.01 3982.87 1687.63 3987.25 1687.63 3992.65 c
1687.63 3998.05 1692.01 4002.42 1697.41 4002.42 c
1702.8 4002.42 1707.18 3998.05 1707.18 3992.65 c
f
n
1731.62 4038.27 m
1731.62 4032.87 1727.24 4028.49 1721.84 4028.49 c
1716.45 4028.49 1712.07 4032.87 1712.07 4038.27 c
1712.07 4043.66 1716.45 4048.04 1721.84 4048.04 c
1727.24 4048.04 1731.62 4043.66 1731.62 4038.27 c
f
n
1756.06 4083.88 m
1756.06 4078.48 1751.68 4074.11 1746.28 4074.11 c
1740.88 4074.11 1736.51 4078.48 1736.51 4083.88 c
1736.51 4089.28 1740.88 4093.66 1746.28 4093.66 c
1751.68 4093.66 1756.06 4089.28 1756.06 4083.88 c
f
n
1780.5 4129.5 m
1780.5 4124.1 1776.12 4119.72 1770.72 4119.72 c
1765.32 4119.72 1760.95 4124.1 1760.95 4129.5 c
1760.95 4134.9 1765.32 4139.27 1770.72 4139.27 c
1776.12 4139.27 1780.5 4134.9 1780.5 4129.5 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1828.55 4221.55 m
1828.55 4216.15 1824.18 4211.77 1818.78 4211.77 c
1813.38 4211.77 1809.0 4216.15 1809.0 4221.55 c
1809.0 4226.95 1813.38 4231.32 1818.78 4231.32 c
1824.18 4231.32 1828.55 4226.95 1828.55 4221.55 c
f
n
1852.99 4267.16 m
1852.99 4261.77 1848.62 4257.39 1843.22 4257.39 c
1837.82 4257.39 1833.44 4261.77 1833.44 4267.16 c
1833.44 4272.56 1837.82 4276.94 1843.22 4276.94 c
1848.62 4276.94 1852.99 4272.56 1852.99 4267.16 c
f
n
1877.43 4312.78 m
1877.43 4307.38 1873.05 4303.01 1867.66 4303.01 c
1862.26 4303.01 1857.88 4307.38 1857.88 4312.78 c
1857.88 4318.18 1862.26 4322.56 1867.66 4322.56 c
1873.05 4322.56 1877.43 4318.18 1877.43 4312.78 c
f
n
1901.87 4358.4 m
1901.87 4353.0 1897.49 4348.62 1892.09 4348.62 c
1886.7 4348.62 1882.32 4353.0 1882.32 4358.4 c
1882.32 4363.8 1886.7 4368.17 1892.09 4368.17 c
1897.49 4368.17 1901.87 4363.8 1901.87 4358.4 c
f
n
1926.3 4404.02 m
1926.3 4398.62 1921.93 4394.24 1916.53 4394.24 c
1911.13 4394.24 1906.76 4398.62 1906.76 4404.02 c
1906.76 4409.41 1911.13 4413.79 1916.53 4413.79 c
1921.93 4413.79 1926.3 4409.41 1926.3 4404.02 c
f
n
1950.75 4449.63 m
1950.75 4444.23 1946.37 4439.86 1940.97 4439.86 c
1935.57 4439.86 1931.2 4444.23 1931.2 4449.63 c
1931.2 4455.03 1935.57 4459.41 1940.97 4459.41 c
1946.37 4459.41 1950.75 4455.03 1950.75 4449.63 c
f
n
1975.18 4495.25 m
1975.18 4489.85 1970.8 4485.48 1965.41 4485.48 c
1960.01 4485.48 1955.63 4489.85 1955.63 4495.25 c
1955.63 4500.65 1960.01 4505.02 1965.41 4505.02 c
1970.8 4505.02 1975.18 4500.65 1975.18 4495.25 c
f
n
1646.09 3793.07 m
1646.09 3787.67 1641.71 3783.3 1636.31 3783.3 c
1630.91 3783.3 1626.54 3787.67 1626.54 3793.07 c
1626.54 3798.47 1630.91 3802.85 1636.31 3802.85 c
1641.71 3802.85 1646.09 3798.47 1646.09 3793.07 c
f
n
1665.64 3841.13 m
1665.64 3835.73 1661.26 3831.36 1655.86 3831.36 c
1650.46 3831.36 1646.09 3835.73 1646.09 3841.13 c
1646.09 3846.53 1650.46 3850.91 1655.86 3850.91 c
1661.26 3850.91 1665.64 3846.53 1665.64 3841.13 c
f
n
1686.0 3889.2 m
1686.0 3883.8 1681.62 3879.42 1676.23 3879.42 c
1670.83 3879.42 1666.45 3883.8 1666.45 3889.2 c
1666.45 3894.59 1670.83 3898.97 1676.23 3898.97 c
1681.62 3898.97 1686.0 3894.59 1686.0 3889.2 c
f
n
1705.55 3936.44 m
1705.55 3931.04 1701.18 3926.66 1695.78 3926.66 c
1690.38 3926.66 1686.0 3931.04 1686.0 3936.44 c
1686.0 3941.84 1690.38 3946.21 1695.78 3946.21 c
1701.18 3946.21 1705.55 3941.84 1705.55 3936.44 c
f
n
1725.1 3984.5 m
1725.1 3979.1 1720.73 3974.73 1715.33 3974.73 c
1709.93 3974.73 1705.55 3979.1 1705.55 3984.5 c
1705.55 3989.9 1709.93 3994.28 1715.33 3994.28 c
1720.73 3994.28 1725.1 3989.9 1725.1 3984.5 c
f
n
1745.47 4032.56 m
1745.47 4027.16 1741.09 4022.79 1735.69 4022.79 c
1730.29 4022.79 1725.92 4027.16 1725.92 4032.56 c
1725.92 4037.96 1730.29 4042.34 1735.69 4042.34 c
1741.09 4042.34 1745.47 4037.96 1745.47 4032.56 c
f
n
1765.02 4079.81 m
1765.02 4074.41 1760.64 4070.04 1755.24 4070.04 c
1749.84 4070.04 1745.47 4074.41 1745.47 4079.81 c
1745.47 4085.21 1749.84 4089.58 1755.24 4089.58 c
1760.64 4089.58 1765.02 4085.21 1765.02 4079.81 c
f
n
1784.57 4127.87 m
1784.57 4122.47 1780.19 4118.09 1774.79 4118.09 c
1769.39 4118.09 1765.02 4122.47 1765.02 4127.87 c
1765.02 4133.27 1769.39 4137.64 1774.79 4137.64 c
1780.19 4137.64 1784.57 4133.27 1784.57 4127.87 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1824.48 4223.18 m
1824.48 4217.78 1820.11 4213.4 1814.71 4213.4 c
1809.31 4213.4 1804.93 4217.78 1804.93 4223.18 c
1804.93 4228.57 1809.31 4232.95 1814.71 4232.95 c
1820.11 4232.95 1824.48 4228.57 1824.48 4223.18 c
f
n
1844.03 4271.24 m
1844.03 4265.84 1839.66 4261.46 1834.26 4261.46 c
1828.86 4261.46 1824.48 4265.84 1824.48 4271.24 c
1824.48 4276.64 1828.86 4281.01 1834.26 4281.01 c
1839.66 4281.01 1844.03 4276.64 1844.03 4271.24 c
f
n
1863.58 4318.48 m
1863.58 4313.09 1859.21 4308.71 1853.81 4308.71 c
1848.41 4308.71 1844.03 4313.09 1844.03 4318.48 c
1844.03 4323.88 1848.41 4328.26 1853.81 4328.26 c
1859.21 4328.26 1863.58 4323.88 1863.58 4318.48 c
f
n
1883.95 4366.54 m
1883.95 4361.14 1879.57 4356.77 1874.17 4356.77 c
1868.77 4356.77 1864.4 4361.14 1864.4 4366.54 c
1864.4 4371.94 1868.77 4376.32 1874.17 4376.32 c
1879.57 4376.32 1883.95 4371.94 1883.95 4366.54 c
f
n
1903.5 4414.61 m
1903.5 4409.21 1899.12 4404.83 1893.72 4404.83 c
1888.32 4404.83 1883.95 4409.21 1883.95 4414.61 c
1883.95 4420.0 1888.32 4424.38 1893.72 4424.38 c
1899.12 4424.38 1903.5 4420.0 1903.5 4414.61 c
f
n
1923.05 4461.85 m
1923.05 4456.45 1918.67 4452.08 1913.27 4452.08 c
1907.88 4452.08 1903.5 4456.45 1903.5 4461.85 c
1903.5 4467.25 1907.88 4471.62 1913.27 4471.62 c
1918.67 4471.62 1923.05 4467.25 1923.05 4461.85 c
f
n
1943.41 4509.91 m
1943.41 4504.52 1939.04 4500.14 1933.64 4500.14 c
1928.24 4500.14 1923.86 4504.52 1923.86 4509.91 c
1923.86 4515.31 1928.24 4519.69 1933.64 4519.69 c
1939.04 4519.69 1943.41 4515.31 1943.41 4509.91 c
f
n
1684.37 3779.22 m
1684.37 3773.82 1680.0 3769.45 1674.6 3769.45 c
1669.2 3769.45 1664.82 3773.82 1664.82 3779.22 c
1664.82 3784.62 1669.2 3789.0 1674.6 3789.0 c
1680.0 3789.0 1684.37 3784.62 1684.37 3779.22 c
f
n
1699.04 3828.91 m
1699.04 3823.52 1694.66 3819.14 1689.26 3819.14 c
1683.86 3819.14 1679.48 3823.52 1679.48 3828.91 c
1679.48 3834.31 1683.86 3838.69 1689.26 3838.69 c
1694.66 3838.69 1699.04 3834.31 1699.04 3828.91 c
f
n
1714.51 3878.61 m
1714.51 3873.21 1710.14 3868.83 1704.74 3868.83 c
1699.34 3868.83 1694.96 3873.21 1694.96 3878.61 c
1694.96 3884.0 1699.34 3888.38 1704.74 3888.38 c
1710.14 3888.38 1714.51 3884.0 1714.51 3878.61 c
f
n
1729.18 3928.29 m
1729.18 3922.89 1724.8 3918.52 1719.4 3918.52 c
1714.0 3918.52 1709.62 3922.89 1709.62 3928.29 c
1709.62 3933.69 1714.0 3938.07 1719.4 3938.07 c
1724.8 3938.07 1729.18 3933.69 1729.18 3928.29 c
f
n
1744.65 3977.17 m
1744.65 3971.77 1740.28 3967.39 1734.88 3967.39 c
1729.48 3967.39 1725.1 3971.77 1725.1 3977.17 c
1725.1 3982.57 1729.48 3986.95 1734.88 3986.95 c
1740.28 3986.95 1744.65 3982.57 1744.65 3977.17 c
f
n
1759.32 4026.86 m
1759.32 4021.46 1754.94 4017.09 1749.54 4017.09 c
1744.14 4017.09 1739.77 4021.46 1739.77 4026.86 c
1739.77 4032.26 1744.14 4036.64 1749.54 4036.64 c
1754.94 4036.64 1759.32 4032.26 1759.32 4026.86 c
f
n
1774.79 4076.55 m
1774.79 4071.15 1770.41 4066.77 1765.02 4066.77 c
1759.62 4066.77 1755.24 4071.15 1755.24 4076.55 c
1755.24 4081.95 1759.62 4086.32 1765.02 4086.32 c
1770.41 4086.32 1774.79 4081.95 1774.79 4076.55 c
f
n
1789.46 4126.24 m
1789.46 4120.84 1785.08 4116.46 1779.68 4116.46 c
1774.28 4116.46 1769.91 4120.84 1769.91 4126.24 c
1769.91 4131.64 1774.28 4136.02 1779.68 4136.02 c
1785.08 4136.02 1789.46 4131.64 1789.46 4126.24 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1819.59 4224.8 m
1819.59 4219.41 1815.22 4215.03 1809.82 4215.03 c
1804.42 4215.03 1800.04 4219.41 1800.04 4224.8 c
1800.04 4230.2 1804.42 4234.58 1809.82 4234.58 c
1815.22 4234.58 1819.59 4230.2 1819.59 4224.8 c
f
n
1834.26 4274.5 m
1834.26 4269.1 1829.88 4264.72 1824.48 4264.72 c
1819.09 4264.72 1814.71 4269.1 1814.71 4274.5 c
1814.71 4279.89 1819.09 4284.27 1824.48 4284.27 c
1829.88 4284.27 1834.26 4279.89 1834.26 4274.5 c
f
n
1849.73 4324.19 m
1849.73 4318.79 1845.36 4314.41 1839.96 4314.41 c
1834.56 4314.41 1830.18 4318.79 1830.18 4324.19 c
1830.18 4329.59 1834.56 4333.96 1839.96 4333.96 c
1845.36 4333.96 1849.73 4329.59 1849.73 4324.19 c
f
n
1864.4 4373.88 m
1864.4 4368.48 1860.02 4364.1 1854.62 4364.1 c
1849.22 4364.1 1844.85 4368.48 1844.85 4373.88 c
1844.85 4379.27 1849.22 4383.65 1854.62 4383.65 c
1860.02 4383.65 1864.4 4379.27 1864.4 4373.88 c
f
n
1879.88 4422.75 m
1879.88 4417.35 1875.5 4412.98 1870.1 4412.98 c
1864.7 4412.98 1860.32 4417.35 1860.32 4422.75 c
1860.32 4428.15 1864.7 4432.53 1870.1 4432.53 c
1875.5 4432.53 1879.88 4428.15 1879.88 4422.75 c
f
n
1894.54 4472.44 m
1894.54 4467.04 1890.16 4462.67 1884.76 4462.67 c
1879.36 4462.67 1874.99 4467.04 1874.99 4472.44 c
1874.99 4477.84 1879.36 4482.21 1884.76 4482.21 c
1890.16 4482.21 1894.54 4477.84 1894.54 4472.44 c
f
n
1910.02 4522.13 m
1910.02 4516.73 1905.64 4512.36 1900.24 4512.36 c
1894.84 4512.36 1890.46 4516.73 1890.46 4522.13 c
1890.46 4527.53 1894.84 4531.91 1900.24 4531.91 c
1905.64 4531.91 1910.02 4527.53 1910.02 4522.13 c
f
n
1723.47 3769.45 m
1723.47 3764.05 1719.1 3759.68 1713.7 3759.68 c
1708.3 3759.68 1703.92 3764.05 1703.92 3769.45 c
1703.92 3774.85 1708.3 3779.22 1713.7 3779.22 c
1719.1 3779.22 1723.47 3774.85 1723.47 3769.45 c
f
n
1734.06 3820.77 m
1734.06 3815.37 1729.69 3810.99 1724.29 3810.99 c
1718.89 3810.99 1714.51 3815.37 1714.51 3820.77 c
1714.51 3826.17 1718.89 3830.54 1724.29 3830.54 c
1729.69 3830.54 1734.06 3826.17 1734.06 3820.77 c
f
n
1743.84 3871.27 m
1743.84 3865.88 1739.46 3861.5 1734.06 3861.5 c
1728.66 3861.5 1724.29 3865.88 1724.29 3871.27 c
1724.29 3876.67 1728.66 3881.05 1734.06 3881.05 c
1739.46 3881.05 1743.84 3876.67 1743.84 3871.27 c
f
n
1754.43 3921.78 m
1754.43 3916.38 1750.05 3912.0 1744.65 3912.0 c
1739.25 3912.0 1734.88 3916.38 1734.88 3921.78 c
1734.88 3927.18 1739.25 3931.55 1744.65 3931.55 c
1750.05 3931.55 1754.43 3927.18 1754.43 3921.78 c
f
n
1764.2 3972.28 m
1764.2 3966.88 1759.82 3962.51 1754.43 3962.51 c
1749.03 3962.51 1744.65 3966.88 1744.65 3972.28 c
1744.65 3977.68 1749.03 3982.06 1754.43 3982.06 c
1759.82 3982.06 1764.2 3977.68 1764.2 3972.28 c
f
n
1773.98 4023.6 m
1773.98 4018.2 1769.6 4013.83 1764.2 4013.83 c
1758.8 4013.83 1754.43 4018.2 1754.43 4023.6 c
1754.43 4029.0 1758.8 4033.38 1764.2 4033.38 c
1769.6 4033.38 1773.98 4029.0 1773.98 4023.6 c
f
n
1784.57 4074.11 m
1784.57 4068.71 1780.19 4064.33 1774.79 4064.33 c
1769.39 4064.33 1765.02 4068.71 1765.02 4074.11 c
1765.02 4079.5 1769.39 4083.88 1774.79 4083.88 c
1780.19 4083.88 1784.57 4079.5 1784.57 4074.11 c
f
n
1794.34 4124.61 m
1794.34 4119.21 1789.96 4114.84 1784.57 4114.84 c
1779.17 4114.84 1774.79 4119.21 1774.79 4124.61 c
1774.79 4130.01 1779.17 4134.39 1784.57 4134.39 c
1789.96 4134.39 1794.34 4130.01 1794.34 4124.61 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1814.71 4226.43 m
1814.71 4221.04 1810.33 4216.66 1804.93 4216.66 c
1799.54 4216.66 1795.16 4221.04 1795.16 4226.43 c
1795.16 4231.83 1799.54 4236.21 1804.93 4236.21 c
1810.33 4236.21 1814.71 4231.83 1814.71 4226.43 c
f
n
1824.48 4276.94 m
1824.48 4271.54 1820.11 4267.16 1814.71 4267.16 c
1809.31 4267.16 1804.93 4271.54 1804.93 4276.94 c
1804.93 4282.34 1809.31 4286.71 1814.71 4286.71 c
1820.11 4286.71 1824.48 4282.34 1824.48 4276.94 c
f
n
1835.07 4327.45 m
1835.07 4322.05 1830.7 4317.67 1825.3 4317.67 c
1819.9 4317.67 1815.52 4322.05 1815.52 4327.45 c
1815.52 4332.84 1819.9 4337.22 1825.3 4337.22 c
1830.7 4337.22 1835.07 4332.84 1835.07 4327.45 c
f
n
1844.85 4378.76 m
1844.85 4373.36 1840.47 4368.99 1835.07 4368.99 c
1829.68 4368.99 1825.3 4373.36 1825.3 4378.76 c
1825.3 4384.16 1829.68 4388.54 1835.07 4388.54 c
1840.47 4388.54 1844.85 4384.16 1844.85 4378.76 c
f
n
1854.62 4429.27 m
1854.62 4423.87 1850.25 4419.49 1844.85 4419.49 c
1839.45 4419.49 1835.07 4423.87 1835.07 4429.27 c
1835.07 4434.67 1839.45 4439.04 1844.85 4439.04 c
1850.25 4439.04 1854.62 4434.67 1854.62 4429.27 c
f
n
1865.21 4479.77 m
1865.21 4474.38 1860.84 4470.0 1855.44 4470.0 c
1850.04 4470.0 1845.66 4474.38 1845.66 4479.77 c
1845.66 4485.17 1850.04 4489.55 1855.44 4489.55 c
1860.84 4489.55 1865.21 4485.17 1865.21 4479.77 c
f
n
1874.99 4530.28 m
1874.99 4524.88 1870.61 4520.5 1865.21 4520.5 c
1859.81 4520.5 1855.44 4524.88 1855.44 4530.28 c
1855.44 4535.68 1859.81 4540.05 1865.21 4540.05 c
1870.61 4540.05 1874.99 4535.68 1874.99 4530.28 c
f
n
1764.2 3763.75 m
1764.2 3758.35 1759.82 3753.97 1754.43 3753.97 c
1749.03 3753.97 1744.65 3758.35 1744.65 3763.75 c
1744.65 3769.14 1749.03 3773.52 1754.43 3773.52 c
1759.82 3773.52 1764.2 3769.14 1764.2 3763.75 c
f
n
1769.09 3815.07 m
1769.09 3809.67 1764.71 3805.29 1759.32 3805.29 c
1753.92 3805.29 1749.54 3809.67 1749.54 3815.07 c
1749.54 3820.46 1753.92 3824.84 1759.32 3824.84 c
1764.71 3824.84 1769.09 3820.46 1769.09 3815.07 c
f
n
1773.98 3866.39 m
1773.98 3860.99 1769.6 3856.61 1764.2 3856.61 c
1758.8 3856.61 1754.43 3860.99 1754.43 3866.39 c
1754.43 3871.79 1758.8 3876.16 1764.2 3876.16 c
1769.6 3876.16 1773.98 3871.79 1773.98 3866.39 c
f
n
1778.87 3918.52 m
1778.87 3913.12 1774.49 3908.74 1769.09 3908.74 c
1763.69 3908.74 1759.32 3913.12 1759.32 3918.52 c
1759.32 3923.92 1763.69 3928.29 1769.09 3928.29 c
1774.49 3928.29 1778.87 3923.92 1778.87 3918.52 c
f
n
1784.57 3969.84 m
1784.57 3964.44 1780.19 3960.06 1774.79 3960.06 c
1769.39 3960.06 1765.02 3964.44 1765.02 3969.84 c
1765.02 3975.24 1769.39 3979.61 1774.79 3979.61 c
1780.19 3979.61 1784.57 3975.24 1784.57 3969.84 c
f
n
1789.46 4021.16 m
1789.46 4015.76 1785.08 4011.38 1779.68 4011.38 c
1774.28 4011.38 1769.91 4015.76 1769.91 4021.16 c
1769.91 4026.55 1774.28 4030.93 1779.68 4030.93 c
1785.08 4030.93 1789.46 4026.55 1789.46 4021.16 c
f
n
1794.34 4072.48 m
1794.34 4067.08 1789.96 4062.7 1784.57 4062.7 c
1779.17 4062.7 1774.79 4067.08 1774.79 4072.48 c
1774.79 4077.88 1779.17 4082.25 1784.57 4082.25 c
1789.96 4082.25 1794.34 4077.88 1794.34 4072.48 c
f
n
1799.23 4123.8 m
1799.23 4118.4 1794.86 4114.02 1789.46 4114.02 c
1784.06 4114.02 1779.68 4118.4 1779.68 4123.8 c
1779.68 4129.2 1784.06 4133.57 1789.46 4133.57 c
1794.86 4133.57 1799.23 4129.2 1799.23 4123.8 c
f
n
1804.93 4175.93 m
1804.93 4170.53 1800.55 4166.16 1795.16 4166.16 c
1789.76 4166.16 1785.38 4170.53 1785.38 4175.93 c
1785.38 4181.33 1789.76 4185.71 1795.16 4185.71 c
1800.55 4185.71 1804.93 4181.33 1804.93 4175.93 c
f
n
1809.82 4227.25 m
1809.82 4221.85 1805.44 4217.47 1800.04 4217.47 c
1794.64 4217.47 1790.27 4221.85 1790.27 4227.25 c
1790.27 4232.65 1794.64 4237.02 1800.04 4237.02 c
1805.44 4237.02 1809.82 4232.65 1809.82 4227.25 c
f
n
1814.71 4278.57 m
1814.71 4273.17 1810.33 4268.79 1804.93 4268.79 c
1799.54 4268.79 1795.16 4273.17 1795.16 4278.57 c
1795.16 4283.97 1799.54 4288.34 1804.93 4288.34 c
1810.33 4288.34 1814.71 4283.97 1814.71 4278.57 c
f
n
1819.59 4329.89 m
1819.59 4324.49 1815.22 4320.11 1809.82 4320.11 c
1804.42 4320.11 1800.04 4324.49 1800.04 4329.89 c
1800.04 4335.29 1804.42 4339.66 1809.82 4339.66 c
1815.22 4339.66 1819.59 4335.29 1819.59 4329.89 c
f
n
1824.48 4381.21 m
1824.48 4375.81 1820.11 4371.43 1814.71 4371.43 c
1809.31 4371.43 1804.93 4375.81 1804.93 4381.21 c
1804.93 4386.61 1809.31 4390.98 1814.71 4390.98 c
1820.11 4390.98 1824.48 4386.61 1824.48 4381.21 c
f
n
1830.18 4432.53 m
1830.18 4427.13 1825.81 4422.75 1820.41 4422.75 c
1815.01 4422.75 1810.63 4427.13 1810.63 4432.53 c
1810.63 4437.93 1815.01 4442.3 1820.41 4442.3 c
1825.81 4442.3 1830.18 4437.93 1830.18 4432.53 c
f
n
1835.07 4484.66 m
1835.07 4479.26 1830.7 4474.89 1825.3 4474.89 c
1819.9 4474.89 1815.52 4479.26 1815.52 4484.66 c
1815.52 4490.06 1819.9 4494.43 1825.3 4494.43 c
1830.7 4494.43 1835.07 4490.06 1835.07 4484.66 c
f
n
1839.96 4535.98 m
1839.96 4530.58 1835.58 4526.2 1830.18 4526.2 c
1824.79 4526.2 1820.41 4530.58 1820.41 4535.98 c
1820.41 4541.38 1824.79 4545.75 1830.18 4545.75 c
1835.58 4545.75 1839.96 4541.38 1839.96 4535.98 c
f
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 243.734 4059.78 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
[/DeviceCMYK] cs 0.0 0.0 0.0 1.0 sc
%ADOBeginSubsetFont: XUVAAA+CMSY10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /XUVAAA+CMSY10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-0 -960 943 750} def
end
systemdict begin
dup /Private
12 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705] def
/OtherBlues [-124 -119] def
/BlueScale 0.04379 def
/StdHW [40] def
/StdVW [85] def
/StemSnapH [40 55] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9C4A637> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 0 /minus/periodcentered/multiply/asteriskmath 12 /circledot 15 /bullet
20 /lessequal/greaterequal 24 /similar/approxequal 28 /lessmuch 32 /space
/arrowright/quotedbl/numbersign/dollar/percent/ampersand
/quotesingle/parenleft/parenright/asterisk/plus/comma
/hyphen/period/slash/zero/one/element
/three/four/five/six/seven/eight
/nine/colon/semicolon/less/equal/greater
/question/at/A/B/C/D
/E/F/G/H/I/J
/K/L/M/N/O/P
/Q/R/S/T/U/V
/W/X/Y/Z/bracketleft/backslash
/bracketright/asciicircum/underscore/grave/a/b
/c/d/e/braceleft/braceright/angbracketleft
/angbracketright/bar/bardbl/l/m/backslash
/o/radical/q/r/s/t
/u/v/w/x/dagger/daggerdbl
/braceleft/bar/braceright/asciitilde/bullet/Euro
/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger
/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright
/quotedblleft/quotedblright/bullet/endash/emdash/tilde
/trademark/scaron/guilsinglright/oe/bullet/zcaron
/Ydieresis/space/exclamdown/cent/sterling/currency
/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree
/plusminus/twosuperior/threesuperior/acute/mu/paragraph
/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter
/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex
/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave
/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex
/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute
/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae
/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave
/iacute/icircumflex/idieresis/eth/ntilde/ograve
/oacute/ocircumflex/otilde/odieresis/divide/oslash
/ugrave/uacute/ucircumflex/udieresis/yacute/thorn
/ydieresis
/N33 (XUVAAA+CMSY10) -1 TZ
126.263 364.328 m
%ADOBeginSubsetFont: XUVAAA+CMSY10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/XUVAAA+CMSY10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/minus <1C60D8A8C9B08A946182837629008DF7702985522C1BEB432204C2EF
9CAB07AB654895DD8804EF7ED97DE3E2616CBB2FB21BE3D9> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/XUVAAA+CMSY10 findfont /Encoding get
dup 0 /minus put
pop
end
+%ADOEndSubsetFont
+/N33 10.6637 Tf
(\000) show
%ADOBeginSubsetFont: EWLBAA+CMR10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /EWLBAA+CMR10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-40 -250 1009 750} def
end
systemdict begin
dup /Private
13 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705 431 448 666 677] def
/OtherBlues [-206 -194] def
/BlueScale 0.04379 def
/StdHW [31] def
/StdVW [69] def
/StemSnapH [22 31] def
/StemSnapV [69 89] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 1 /dotlessi/caron 11 /ff/fi/fl/ffi
32 /space/exclam/quotedbl/numbersign/dollar/percent
/ampersand/quoteright/parenleft/parenright/asterisk/plus
/comma/hyphen/period/slash/zero/one
/two/three/four/five/six/seven
/eight/nine/colon/semicolon/less/equal
/greater/question/at/A/B/C
/D/E/F/G/H/I
/J/K/L/M/N/O
/P/Q/R/S/T/U
/V/W/X/Y/Z/bracketleft
/backslash/bracketright/circumflex/underscore/quoteleft/a
/b/c/d/e/f/g
/h/i/j/k/l/m
/n/o/p/q/r/s
/t/u/v/w/x/y
/z/endash/bar/braceright/tilde/bullet
/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft
/OE/bullet/Zcaron/bullet/bullet/quoteleft
/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
/tilde/trademark/scaron/guilsinglright/oe/bullet
/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright
/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
/degree/plusminus/twosuperior/threesuperior/acute/mu
/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright
/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute
/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave
/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring
/ae/ccedilla/egrave/eacute/ecircumflex/edieresis
/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex/udieresis/yacute
/thorn/ydieresis
/N41 (EWLBAA+CMR10) -1 TZ
134.592 364.328 m
%ADOBeginSubsetFont: EWLBAA+CMR10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/EWLBAA+CMR10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/zero <1C60D8A8C9B7A73D3B2D32309B1F5D5A32FC3614834F8BC61B6EB92C1
2484BD76628737DA40CF9DA1C97CCDAFB1D1B732C642F74A7C41B7D3AC6DAF8D
1E760692B6EBD2417EF1893A4AA0B1CF049D4C54D830CEC073A9153D451FAD42
892B0930AEE4FE18588336BFDAD60D8A4F4CFFED76F103FB9BBD8A33EFBA3F18
232B88D88FE54E17260FA3E2CC29DEC0CB72B88DC816FF5> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/EWLBAA+CMR10 findfont /Encoding get
dup 48 /zero put
pop
end
+%ADOEndSubsetFont
+/N41 10.6637 Tf
(0) show
%ADOBeginSubsetFont: REAAAA+CMMI10 Initial
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
12 dict dup begin
/FontType 1 def
/FontName /REAAAA+CMMI10 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/ItalicAngle 0 def
/WasEmbedded true def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
def
/FontBBox {-13 -250 1044 750} def
end
systemdict begin
dup /Private
12 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-22 -0 683 705 431 442 453 466] def
/OtherBlues [-205 -194] def
/BlueScale 0.04379 def
/StdHW [31] def
/StdVW [72] def
/StemSnapH [25 31] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs [{ct_CffDict/F0Subr get exec} {ct_CffDict/F1Subr get exec}
{ct_CffDict/F2Subr get exec} {ct_CffDict/HSSubr get exec}] def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
1 dict dup begin
/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
end put
end
dup /FontName get exch definefont pop
end
end
+%ADOEndSubsetFont
+[ 1 /dotlessi/caron 11 /alpha/beta 14 /delta 21 /lambda
/mu 24 /xi/pi 27 /sigma 30 /phi/chi
/psi/exclam/epsilon/theta1/dollar/percent
/ampersand/phi1/parenleft/parenright/asterisk/plus
/comma/hyphen/period/slash/zero/one
/two/three/four/five/six/seven
/eight/nine/period/comma/less/slash
/greater/question/at/A/B/C
/D/E/F/G/H/I
/J/K/L/M/N/O
/P/Q/R/S/T/U
/V/W/X/Y/Z/bracketleft
/backslash/bracketright/asciicircum/underscore/grave/a
/b/c/d/e/f/g
/h/i/j/k/l/m
/n/o/p/q/r/s
/t/u/v/w/x/y
/z/braceleft/bar/braceright/asciitilde/bullet
/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft
/OE/bullet/Zcaron/bullet/bullet/quoteleft
/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
/tilde/trademark/scaron/guilsinglright/oe/bullet
/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright
/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
/degree/plusminus/twosuperior/threesuperior/acute/mu
/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright
/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute
/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave
/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring
/ae/ccedilla/egrave/eacute/ecircumflex/edieresis
/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex/udieresis/yacute
/thorn/ydieresis
/N21 (REAAAA+CMMI10) -1 TZ
139.87 364.328 m
%ADOBeginSubsetFont: REAAAA+CMMI10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/REAAAA+CMMI10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/period <1C60D8A8C9B08A9570810981675968F2C907C696DFE9BE69433F613
9DF6C45B8165ACC43B6E0B309859F778ABCF0> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/REAAAA+CMMI10 findfont /Encoding get
dup 58 /period put
pop
end
+%ADOEndSubsetFont
+/N21 10.6637 Tf
(:) show
142.802 364.328 m
%ADOBeginSubsetFont: EWLBAA+CMR10 AddGlyphs
+ct_CffDict begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
systemdict begin
/EWLBAA+CMR10 findfont dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/five <1C60D8A8C9B7A73D3B2B97F19D54A2E00E7DDA8E72064220CB7581D13
CEDF071F346430E40993A6297E3A2A6D6093205222D977AC7F7B65CC82B221D9
B18ADEA5D4AF0261ABF060D3E283C7B3B5EB39FF499721FD51203AE59E3BEA25
7DFD3E472FEF67221488EC8D1F355E2FAD057CA44A8B4BAD6C6C719C164907CB
F9A6CC770DB0C7E58A37D2385E23F576BCFF94FFBFD8ADD4C5E6C32CD83ACEB7
7472D00FE1A4DC66393A99AC6BBD252B04C98B710149EA42B66ACE89D4FC4393
F3A09165DF477ABCB0E8A8DB21E4278CA219EBCC9B067F92619913BDBD1EF3C9
A> |-
systemdict /gcheck known {setglobal} if end {end} if
end
/EWLBAA+CMR10 findfont /Encoding get
dup 53 /five put
pop
end
+%ADOEndSubsetFont
+/N41 10.6637 Tf
(500)
[33.946 37.2557 5.27853 ] pdfxs
219.283 364.328 m
/N21 10.6637 Tf
(:) show
222.215 364.328 m
/N41 10.6637 Tf
(5) show
111.456 372.966 m
/N33 10.6637 Tf
(\000) show
119.785 372.966 m
/N41 10.6637 Tf
(0) show
125.063 372.966 m
/N21 10.6637 Tf
(:) show
127.996 372.966 m
/N41 10.6637 Tf
(5) show
129.618 413.96 m
(0) show
121.251 455.341 m
(0) show
126.529 455.341 m
/N21 10.6637 Tf
(:) show
129.462 455.341 m
/N41 10.6637 Tf
(5) show
Q
q
n
2449.61 4685.86 m
3581.89 4685.86 l
3581.89 3620.37 l
2449.61 3620.37 l
h
W
n
4.88755 w
1 j
[4.88755 39.1004 ] 0.0 d
3.25837 w
[] 0.0 d
4.88755 w
Q
q
n
2575.06 4646.76 m
3520.8 4646.76 l
3520.8 3701.02 l
2575.06 3701.02 l
h
W
n
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 1497.72 4059.77 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
Q
q
n
3703.6 4688.29 m
4835.88 4688.29 l
4835.88 3620.36 l
3703.6 3620.36 l
h
W
n
4.88755 w
1 j
[4.88755 39.1004 ] 0.0 d
3.25837 w
[] 0.0 d
4.88755 w
Q
q
n
3829.05 4649.19 m
4725.1 4649.19 l
4725.1 3701.01 l
3829.05 3701.01 l
h
W
n
Q
q
n
0.0 0.0 m
W
n
q
951.313 0.0 0.0 -4.69205 2750.54 4059.77 cm
Q
Q
q
10.0 0.0 0.0 10.0 0.0 0.0 cm
Q
Q
Q
/EWLBAA+CMR10 /Font _pdfUndefineResource
/N41 /Font _pdfUndefineResource
/REAAAA+CMMI10 /Font _pdfUndefineResource
/N21 /Font _pdfUndefineResource
/XUVAAA+CMSY10 /Font _pdfUndefineResource
/N33 /Font _pdfUndefineResource
[/EMC PDFMark5
PDFVars/TermAll get exec end end
%%PageTrailer
%%Trailer
%%EOF
\ No newline at end of file
diff --git a/doc/tutorial/images/polar_grid.pdf b/doc/tutorial/images/polar_grid.pdf
new file mode 100644
index 0000000..5a9bb2d
Binary files /dev/null and b/doc/tutorial/images/polar_grid.pdf differ
diff --git a/doc/tutorial/images/sparse2D_0.eps b/doc/tutorial/images/sparse2D_0.eps
new file mode 100755
index 0000000..5abf7c1
--- /dev/null
+++ b/doc/tutorial/images/sparse2D_0.eps
@@ -0,0 +1,111 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: sparse2D_0.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 3d
+%%CreationDate: Mon Jun 21 17:56:59 2004
+%%For: mfenn at malleefowl (Markus Fenn)
+%%BoundingBox: 0 0 35 35
+%%Magnification: 0.5000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.557 0.557 0.557 srgb} bind def
+
+end
+save
+newpath 0 35 moveto 0 0 lineto 35 0 lineto 35 35 lineto closepath clip newpath
+-11.0 54.2 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+ 0.03150 0.03150 sc
+%
+% Fig objects follow
+%
+% Polyline
+1 slj
+7.500 slw
+n 720 990 m 1080 990 l 1080 1350 l 720 1350 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 360 990 m 540 990 l 540 1170 l 360 1170 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 900 630 m 1080 630 l 1080 810 l 900 810 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 1260 990 m 1440 990 l 1440 1170 l 1260 1170 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 900 1530 m 1080 1530 l 1080 1710 l 900 1710 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+$F2psEnd
+rs
diff --git a/doc/tutorial/images/sparse2D_0.pdf b/doc/tutorial/images/sparse2D_0.pdf
new file mode 100644
index 0000000..f37a289
Binary files /dev/null and b/doc/tutorial/images/sparse2D_0.pdf differ
diff --git a/doc/tutorial/images/sparse2D_1.eps b/doc/tutorial/images/sparse2D_1.eps
new file mode 100755
index 0000000..fe61390
--- /dev/null
+++ b/doc/tutorial/images/sparse2D_1.eps
@@ -0,0 +1,123 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: sparse2D_1.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 3d
+%%CreationDate: Mon Jun 21 18:37:45 2004
+%%For: mfenn at malleefowl (Markus Fenn)
+%%BoundingBox: 0 0 69 69
+%%Magnification: 0.5000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.557 0.557 0.557 srgb} bind def
+
+end
+save
+newpath 0 69 moveto 0 0 lineto 69 0 lineto 69 69 lineto closepath clip newpath
+-76.2 79.7 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+ 0.03150 0.03150 sc
+%
+% Fig objects follow
+%
+% Polyline
+1 slj
+7.500 slw
+n 3510 360 m 3690 360 l 3690 720 l 3510 720 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 3330 900 m 3690 900 l 3690 1080 l 3330 1080 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 2970 1260 m 3150 1260 l 3150 1620 l 2970 1620 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 3330 1800 m 3690 1800 l 3690 1980 l 3330 1980 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 3330 1260 m 3690 1260 l 3690 1620 l 3330 1620 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 3870 1260 m 4050 1260 l 4050 1620 l 3870 1620 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 3510 2160 m 3690 2160 l 3690 2520 l 3510 2520 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 2430 1260 m 2790 1260 l 2790 1440 l 2430 1440 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 4230 1260 m 4590 1260 l 4590 1440 l 4230 1440 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+$F2psEnd
+rs
diff --git a/doc/tutorial/images/sparse2D_1.pdf b/doc/tutorial/images/sparse2D_1.pdf
new file mode 100644
index 0000000..c456d8f
Binary files /dev/null and b/doc/tutorial/images/sparse2D_1.pdf differ
diff --git a/doc/tutorial/images/sparse2D_2.eps b/doc/tutorial/images/sparse2D_2.eps
new file mode 100755
index 0000000..f219b45
--- /dev/null
+++ b/doc/tutorial/images/sparse2D_2.eps
@@ -0,0 +1,123 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: sparse2D_2.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 3d
+%%CreationDate: Mon Jun 21 18:45:03 2004
+%%For: mfenn at malleefowl (Markus Fenn)
+%%BoundingBox: 0 0 115 115
+%%Magnification: 0.5000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.557 0.557 0.557 srgb} bind def
+
+end
+save
+newpath 0 115 moveto 0 0 lineto 115 0 lineto 115 115 lineto closepath clip newpath
+-5.3 241.3 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+ 0.03150 0.03150 sc
+%
+% Fig objects follow
+%
+% Polyline
+1 slj
+7.500 slw
+n 2340 5490 m 1620 5490 l 1620 6210 l 2340 6210 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 1080 5670 m 1440 5670 l 1440 6030 l 1080 6030 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 180 5850 m 180 5670 l 900 5670 l 900 5850 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 2520 5670 m 2880 5670 l 2880 6030 l 2520 6030 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 3060 5850 m 3060 5670 l 3780 5670 l 3780 5850 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 1800 4950 m 2160 4950 l 2160 5310 l 1800 5310 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 1980 4050 m 2160 4050 l 2160 4770 l 1980 4770 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 1800 6390 m 2160 6390 l 2160 6750 l 1800 6750 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 1980 6930 m 2160 6930 l 2160 7650 l 1980 7650 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+$F2psEnd
+rs
diff --git a/doc/tutorial/images/sparse2D_2.pdf b/doc/tutorial/images/sparse2D_2.pdf
new file mode 100644
index 0000000..3d0f243
Binary files /dev/null and b/doc/tutorial/images/sparse2D_2.pdf differ
diff --git a/doc/tutorial/images/sparse2D_3.eps b/doc/tutorial/images/sparse2D_3.eps
new file mode 100755
index 0000000..0df3b19
--- /dev/null
+++ b/doc/tutorial/images/sparse2D_3.eps
@@ -0,0 +1,135 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: sparse2D_3.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 3d
+%%CreationDate: Mon Jun 21 18:45:32 2004
+%%For: mfenn at malleefowl (Markus Fenn)
+%%BoundingBox: 0 0 217 217
+%%Magnification: 0.5000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.557 0.557 0.557 srgb} bind def
+
+end
+save
+newpath 0 217 moveto 0 0 lineto 217 0 lineto 217 217 lineto closepath clip newpath
+-59.1 222.9 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+ 0.03150 0.03150 sc
+%
+% Fig objects follow
+%
+% Polyline
+1 slj
+7.500 slw
+n 4770 3285 m 4410 3285 l 4410 4005 l 4770 4005 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 4950 4185 m 4950 4545 l 5670 4545 l 5670 4185 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 6210 3285 m 5850 3285 l 5850 4005 l 6210 4005 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 4950 2745 m 4950 3105 l 5670 3105 l 5670 2745 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 3510 3465 m 3510 3825 l 4230 3825 l 4230 3465 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 3330 3465 m 3330 3645 l 1890 3645 l 1890 3465 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 6390 3465 m 6390 3825 l 7110 3825 l 7110 3465 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 7290 3645 m 7290 3465 l 8730 3465 l 8730 3645 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 5490 1845 m 5130 1845 l 5130 2565 l 5490 2565 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 5310 225 m 5490 225 l 5490 1665 l 5310 1665 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 5490 4725 m 5130 4725 l 5130 5445 l 5490 5445 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 5310 5625 m 5490 5625 l 5490 7065 l 5310 7065 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 5670 3285 m 4950 3285 l 4950 4005 l 5670 4005 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr
+$F2psEnd
+rs
diff --git a/doc/tutorial/images/sparse2D_3.pdf b/doc/tutorial/images/sparse2D_3.pdf
new file mode 100644
index 0000000..9ecaa27
Binary files /dev/null and b/doc/tutorial/images/sparse2D_3.pdf differ
diff --git a/doc/tutorial/images/sphere.eps b/doc/tutorial/images/sphere.eps
new file mode 100644
index 0000000..02701e9
--- /dev/null
+++ b/doc/tutorial/images/sphere.eps
@@ -0,0 +1,48 @@
+%!PS-Adobe-3.1 EPSF-3.0
%%Title: sphere.pdf
%%Creator: Adobe Illustrator(R) 11
%%AI8_CreatorVersion: 11.0.0
%AI9_PrintingDataBegin
%%For: Holden Caulfield
%%CreationDate: 7/12/05
%%BoundingBox: 0 0 344 325
%%HiResBoundingBox: 0 0 344 325
%%CropBox: 0 0 344 325
%%LanguageLevel: 2
%%DocumentData: Clean7Bit
%%Pages: 1
%%DocumentNeededResources:
%%DocumentSuppliedResources: procset Adobe_AGM_Image (1.0 0)
%%+ procset Adobe_CoolType_Utility_T42 (1.0 0)
%%+ procset Adobe_CoolType_Utility_MAKEOCF (1.19 0)
%%+ procset Adobe_CoolType_Core (2.23 0)
%%+ procset Adobe_AGM_Core (2.0 0)
%%+ procset Adobe_AGM_Utils (1.0 0)
%%DocumentFonts:
%%DocumentNeededFonts:
%%DocumentNeededFeatures:
%%DocumentSuppliedFeatures:
%%DocumentCustomColors:
%%CMYKCustomColor:
%%RGBCustomColor:
%ADO_ContainsXMP: MainFirst
%AI7_Thumbnail: 128 124 8
%%BeginData: 5318 Hex Bytes
%0000330000660000990000CC0033000033330033660033990033CC0033FF
%0066000066330066660066990066CC0066FF009900009933009966009999
%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
%6666006666336666666666996666CC6666FF669900669933669966669999
%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
%9933009933339933669933999933CC9933FF996600996633996666996699
%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
%000011111111220000002200000022222222440000004400000044444444
%550000005500000055555555770000007700000077777777880000008800
%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
%524C45FD3FFF527D7DA8FD7BFFA8527D5252FD7CFFA8FF7DA8FD7DFFA8FD
%7EFF5252FD7DFFA8F8F8FD7EFF7DA8FD7FFFA8FDFCFFFFFFFFA8FDFCFFFF
%FFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFF
%A8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FD
%7EFFA8A8FD79FFA8FFFD04A87DA87DA8A8FFA8FD70FFA8FFFFFFA8FD07FF
%A8FFA8FFA8FFA8FD68FFA8A8A8FFA8FD0FFFA8FFFFFFA8A8A8FD64FFA8FD
%15FFA8FD05FFA8FD61FFA8A8FD0FFFA8FD07FFA8FD07FFA8FD5CFFA8FD1B
%FFA8FD07FFA8FD5AFFA8FD09FFA8FD09FFA8FD08FFA8A8FD07FFA8FD58FF
%A8FD7EFFA8FD09FFA8FD15FFA8FD0BFFA8FD52FFA8FD21FFA8FFFFFFA87D
%FD06FFA8FD50FFA8FD0BFFA8FD0BFFA8FD0BFFA8FFFF7D52FD07FFA8FD4E
%FFA8FD0BFFA8FD1BFF7D7DFD55FFA8FD25FFA8FFFF7D7DFD54FFA8FD27FF
%7DFFA852FD53FFA8FD0DFFA8FD0DFFA8FD0BFFA8277DFD0BFFA8FD72FFA8
%FD72FFA8FFA8FD09FFA8FFA8FD0DFFA8FD46FFA8FD0DFFA8FD11FFA8FD07
%FFA8FD11FFA8FD28FFA8FFA8FD19FFA8FD0DFFA8FD0FFFA8FFFFFFA8FD05
%FFA8FFFFFFA8FD29FFA8FFA8FD0CFFA8FFA8FFA8FD15FFA8FD2DFFA8FD25
%FFA8FFA8FD12FFA8FFA8FFA8FD21FFA8FD0FFFA8FFA87DA8FD06FF7D52FF
%FFA8FD0EFFA8FD11FFA8FFA8FFA8FD1AFFA8FFA8FD0FFFA8FD20FFA827FD
%07FF52FFFFFFA8FD0FFFA8FD0DFFA8FFA8FFA8FD20FFA8FFA8FFA8FD09FF
%A8FD20FF7D2752A8FFA8FFA8FFA8A8FD04FFA8FD0DFFA8FD09FFA8FFA8FF
%A8FFA8FD28FFA8FFA8FD28FF7DA8FFFFFFA8FD07FFA8FD0FFFA8FD07FFA8
%FFA8FD30FFA8FFA8FFA8FFA8FD0FFFA8FD0FFFA8FD05FFA8FD09FFA8FD0F
%FFA8FFA8FFA8FFA8FD36FFA8FFA8FD1BFFA8FFFFFFA8FFA8FFFFFFA8FD19
%FFA8A8A8FD3DFFA8A8FFA8A8FD0AFFA8FFA8A8A8FFA8FFFFFFA8FFA8FFA8
%FFFFFFA8FFFFFFA8A8FFFFA8FFFFFFA8FFA8A8A8FFA8FD07FFA8FFA8FFFF
%FFA8FD3EFFA8FD0BFFA8FFFFFFA8FD25FFA8FFFFFFA8FD44FFA8FD09FFA8
%FFA8FFA8FD13FFA8FFFFFFA8FD0BFFA8FD05FFA8FFA8FD07FFA8FD44FFA8
%FD09FFA8FD13FFA8FD0CFFA8FFFFA8FD07FFA8FD05FFA8FD3CFFA8FFFFA8
%A8FD0BFFA8A8A8FFA8FD0DFFA8FFA8FD09FFA8FFFFFFA8FD0BFFA8FFA8FF
%A8A8FD4DFFA8FD05FFA8FD0BFFA8FD07FFA8FD17FFA8FD3CFFA8FD17FFA8
%FFA8A8A8FD0BFFA8FFFFFFA8FD05FFA8FD0FFFA8A8FD3DFFA8FD1FFFA8A8
%FFFFA8FD1DFFA8FD3CFFA8FD0FFFA8A8FD0FFFA87DFFA8FD0DFFA8FD0FFF
%A8A8FD3CFFA8A8FD1DFFA8A8A8FFFFA8A8FD1DFFA8FD3CFFA8A8A8FD15FF
%A8FD05FF7D7D527DFD04FFA8A8A8FFA8FD07FFA8FD0FFFA8FD40FFA8FD0D
%FFA8FFFFFFA8A8A8FD07FF277DFD08FFA8FD17FFA8FFA8FD3CFFA8FFFFFF
%A8FFA8FD09FFA8FFA8FFA8FFA8FFA8FFA8A8A8FFA87DA8FFA8FFA8FFA8FF
%A8A8A8FFA8FFA8FFA8FFA8FFA8FD09FFA8A8A8FFA8A8FD43FFA8FD07FFA8
%FD1DFFA8FD0DFFA8FFA8FD05FFA8FD3CFFA8FD07FFFD05A8FD15FFA8FD0B
%FFA8FFA8FFA8FFFFFFA8A87DA8A8FD07FFA8FD3EFFA8FFFFFFA8FFA8FFA8
%FFFFFFA8FFA8FFA8FFA8FD1CFFA87DA8A8FFA8FD05FFA8FFA8FD42FFA8A8
%A8FFA8FFA8FD0BFFA8FFA8A8A8FFA8A8A8FFA8FFA8FFA8FFA8FFA8FFA8FF
%A8A8A8FFA8A8A8FFA8FFA8FD0BFFA8FFA8FFA8FD3CFFA8A8A8FD1FFFA8FD
%1FFFFD05A8FD34FFA8FFA8A8A8FFFFFFA8FD0FFFA8FD0FFFA8FD0FFFA8FD
%0FFFA8FFA8A8A8FFA8FD2EFFA8FFA8FFA8FD35FFA8FD0FFFA8FD09FFA8FD
%26FFA8FFA8A8A8FFA8FD09FFA8FD1FFFA8FD0FFFA8FD0DFFA8FD0BFFA8FF
%A8FFA8FD1EFFA8FFA8FFA8FD0FFFA8FD2DFFA8FD1FFFA8FFA8FD14FFA8A8
%FFFFA8FFA8FFA8FD12FFA8FD0EFFA8FD1DFFA8FD0FFFA8FD13FFA8FFA8FF
%A8FFA8FD0CFFA82727FFA8FD45FFA8FD27FFA827F8FD06FF7D52A8FFFFA8
%2752A8FD19FFA8FD0DFFA8FD0FFFA8FD0DFFA8FD29FF27527DFF7D52A8FF
%7D52A87DFD1FFFA8FD0DFFA8FD4AFF7D52A87D7DA87D52FD1FFFA8A8FD29
%FFA8FD0DFFA8FD1FFF7DA87D27FFFFFFA8FD49FFA8FD0DFFA8FD23FF7DFD
%24FFA8FD0DFFA8FD0DFFA8FD0CFFA8FD0CFFA8FD4AFFA8FD27FFA8FD58FF
%A8FD19FFA8FD0BFFA8FD0CFFA8FD4DFFA8FD0BFFA8FD74FFA8FD17FFA8FD
%0BFFA8FD0BFFA8FD50FFA8FD21FFA8FD5EFFA8FD09FFA8FD0BFFA8FD09FF
%A8FD09FFA8FD56FFA8FD1DFFA8FD62FFA8A8A8FD07FFA8FD12FFA8FD08FF
%A8FD64FFA8FD19FFA8FD5EFFA8FD0FFFA8FD07FFA8FD05FFA8FFA8FD60FF
%A8FFA8FD05FFA8FD13FFA8FD66FFA8FFA8FD09FFA8FFFFFFA8FFFFFFA8FF
%A8A8A8FD6AFFA8FFA8FFA8FFFFFFA8FFFFFFA8FFA8FFA8FD74FFA8FFA8A8
%7DFD04A8FFA8FDF9FFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFF
%A8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FD
%FCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFF
%FD42FFFF
%%EndData
%%EndComments
%%BeginDefaults
%%ViewingOrientation: 1 0 0 1
%%EndDefaults
%%BeginProlog
%%BeginResource: procset Adobe_AGM_Utils 1.0 0
%%Version: 1.0 0
%%Copyright: Copyright (C) 2000-2003 Adobe Systems, Inc. All Rights Reserved.
systemdict /setpacking known
{
currentpacking
true setpacking
} if
userdict /Adobe_AGM_Utils 68 dict dup begin put
/bdf
{
bind def
} bind def
/nd{
null def
}bdf
/xdf
{
exch def
}bdf
/ldf
{
load def
}bdf
/ddf
{
put
}bdf
/xddf
{
3 -1 roll put
}bdf
/xpt
{
exch put
}bdf
/ndf
{
exch dup where{
pop pop pop
}{
xdf
}ifelse
}def
/cdndf
{
exch dup currentdict exch known{
pop pop
}{
exch def
}ifelse
}def
/bdict
{
mark
}bdf
/edict
{
counttomark 2 idiv dup dict begin {def} repeat pop currentdict end
}def
/ps_level
/languagelevel where{
pop systemdict /languagelevel get exec
}{
1
}ifelse
def
/level2
ps_level 2 ge
def
/level3
ps_level 3 ge
def
/ps_version
{version cvr} stopped {
-1
}if
def
/makereadonlyarray
{
/packedarray where{
pop packedarray
}{
array astore readonly
}ifelse
}bdf
/map_reserved_ink_name
{
dup type /stringtype eq{
dup /Red eq{
pop (_Red_)
}{
dup /Green eq{
pop (_Green_)
}{
dup /Blue eq{
pop (_Blue_)
}{
dup () cvn eq{
pop (Process)
}if
}ifelse
}ifelse
}ifelse
}if
}bdf
/AGMUTIL_GSTATE 22 dict def
/get_gstate
{
AGMUTIL_GSTATE begin
/AGMUTIL_GSTATE_clr_spc currentcolorspace def
/AGMUTIL_GSTATE_clr_indx 0 def
/AGMUTIL_GSTATE_clr_comps 12 array def
mark currentcolor counttomark
{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put
/AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def} repeat pop
/AGMUTIL_GSTATE_fnt rootfont def
/AGMUTIL_GSTATE_lw currentlinewidth def
/AGMUTIL_GSTATE_lc currentlinecap def
/AGMUTIL_GSTATE_lj currentlinejoin def
/AGMUTIL_GSTATE_ml currentmiterlimit def
currentdash /AGMUTIL_GSTATE_do xdf /AGMUTIL_GSTATE_da xdf
/AGMUTIL_GSTATE_sa currentstrokeadjust def
/AGMUTIL_GSTATE_clr_rnd currentcolorrendering def
/AGMUTIL_GSTATE_op currentoverprint def
/AGMUTIL_GSTATE_bg currentblackgeneration cvlit def
/AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def
currentcolortransfer cvlit /AGMUTIL_GSTATE_gy_xfer xdf cvlit /AGMUTIL_GSTATE_b_xfer xdf
cvlit /AGMUTIL_GSTATE_g_xfer xdf cvlit /AGMUTIL_GSTATE_r_xfer xdf
/AGMUTIL_GSTATE_ht currenthalftone def
/AGMUTIL_GSTATE_flt currentflat def
end
}def
/set_gstate
{
AGMUTIL_GSTATE begin
AGMUTIL_GSTATE_clr_spc setcolorspace
AGMUTIL_GSTATE_clr_indx {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get
/AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def} repeat setcolor
AGMUTIL_GSTATE_fnt setfont
AGMUTIL_GSTATE_lw setlinewidth
AGMUTIL_GSTATE_lc setlinecap
AGMUTIL_GSTATE_lj setlinejoin
AGMUTIL_GSTATE_ml setmiterlimit
AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash
AGMUTIL_GSTATE_sa setstrokeadjust
AGMUTIL_GSTATE_clr_rnd setcolorrendering
AGMUTIL_GSTATE_op setoverprint
AGMUTIL_GSTATE_bg cvx setblackgeneration
AGMUTIL_GSTATE_ucr cvx setundercolorremoval
AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx
AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer
AGMUTIL_GSTATE_ht /HalftoneType get dup 9 eq exch 100 eq or
{
currenthalftone /HalftoneType get AGMUTIL_GSTATE_ht /HalftoneType get ne
{
mark AGMUTIL_GSTATE_ht {sethalftone} stopped cleartomark
} if
}{
AGMUTIL_GSTATE_ht sethalftone
} ifelse
AGMUTIL_GSTATE_flt setflat
end
}def
/get_gstate_and_matrix
{
AGMUTIL_GSTATE begin
/AGMUTIL_GSTATE_ctm matrix currentmatrix def
end
get_gstate
}def
/set_gstate_and_matrix
{
set_gstate
AGMUTIL_GSTATE begin
AGMUTIL_GSTATE_ctm setmatrix
end
}def
/AGMUTIL_str256 256 string def
/AGMUTIL_src256 256 string def
/AGMUTIL_dst64 64 string def
/AGMUTIL_srcLen nd
/AGMUTIL_ndx nd
/agm_sethalftone
{
dup
begin
/_Data load
/Thresholds xdf
end
level3
{ sethalftone }{
dup /HalftoneType get 3 eq {
sethalftone
} {pop} ifelse
}ifelse
} def
/rdcmntline
{
currentfile AGMUTIL_str256 readline pop
(%) anchorsearch {pop} if
} bdf
/filter_cmyk
{
dup type /filetype ne{
exch () /SubFileDecode filter
}
{
exch pop
}
ifelse
[
exch
{
AGMUTIL_src256 readstring pop
dup length /AGMUTIL_srcLen exch def
/AGMUTIL_ndx 0 def
AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{
1 index exch get
AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put
/AGMUTIL_ndx AGMUTIL_ndx 1 add def
}for
pop
AGMUTIL_dst64 0 AGMUTIL_ndx getinterval
}
bind
/exec cvx
] cvx
} bdf
/filter_indexed_devn
{
cvi Names length mul names_index add Lookup exch get
} bdf
/filter_devn
{
4 dict begin
/srcStr xdf
/dstStr xdf
dup type /filetype ne{
0 () /SubFileDecode filter
}if
[
exch
[
/devicen_colorspace_dict /AGMCORE_gget cvx /begin cvx
currentdict /srcStr get /readstring cvx /pop cvx
/dup cvx /length cvx 0 /gt cvx [
Adobe_AGM_Utils /AGMUTIL_ndx 0 /ddf cvx
names_index Names length currentdict /srcStr get length 1 sub {
1 /index cvx /exch cvx /get cvx
currentdict /dstStr get /AGMUTIL_ndx /load cvx 3 -1 /roll cvx /put cvx
Adobe_AGM_Utils /AGMUTIL_ndx /AGMUTIL_ndx /load cvx 1 /add cvx /ddf cvx
} for
currentdict /dstStr get 0 /AGMUTIL_ndx /load cvx /getinterval cvx
] cvx /if cvx
/end cvx
] cvx
bind
/exec cvx
] cvx
end
} bdf
/AGMUTIL_imagefile nd
/read_image_file
{
AGMUTIL_imagefile 0 setfileposition
10 dict begin
/imageDict xdf
/imbufLen Width BitsPerComponent mul 7 add 8 idiv def
/imbufIdx 0 def
/origDataSource imageDict /DataSource get def
/origMultipleDataSources imageDict /MultipleDataSources get def
/origDecode imageDict /Decode get def
/dstDataStr imageDict /Width get colorSpaceElemCnt mul string def
/srcDataStrs [ imageDict begin
currentdict /MultipleDataSources known {MultipleDataSources {DataSource length}{1}ifelse}{1} ifelse
{
Width Decode length 2 div mul cvi string
} repeat
end ] def
imageDict /MultipleDataSources known {MultipleDataSources}{false} ifelse
{
/imbufCnt imageDict /DataSource get length def
/imbufs imbufCnt array def
0 1 imbufCnt 1 sub {
/imbufIdx xdf
imbufs imbufIdx imbufLen string put
imageDict /DataSource get imbufIdx [ AGMUTIL_imagefile imbufs imbufIdx get /readstring cvx /pop cvx ] cvx put
} for
DeviceN_PS2 {
imageDict begin
/DataSource [ DataSource /devn_sep_datasource cvx ] cvx def
/MultipleDataSources false def
/Decode [0 1] def
end
} if
}{
/imbuf imbufLen string def
Indexed_DeviceN level3 not and DeviceN_NoneName or {
imageDict begin
/DataSource [AGMUTIL_imagefile Decode BitsPerComponent false 1 /filter_indexed_devn load dstDataStr srcDataStrs devn_alt_datasource /exec cvx] cvx def
/Decode [0 1] def
end
}{
imageDict /DataSource {AGMUTIL_imagefile imbuf readstring pop} put
} ifelse
} ifelse
imageDict exch
load exec
imageDict /DataSource origDataSource put
imageDict /MultipleDataSources origMultipleDataSources put
imageDict /Decode origDecode put
end
} bdf
/write_image_file
{
begin
{ (AGMUTIL_imagefile) (w+) file } stopped{
false
}{
Adobe_AGM_Utils/AGMUTIL_imagefile xddf
2 dict begin
/imbufLen Width BitsPerComponent mul 7 add 8 idiv def
MultipleDataSources {DataSource 0 get}{DataSource}ifelse type /filetype eq {
/imbuf imbufLen string def
}if
1 1 Height {
pop
MultipleDataSources {
0 1 DataSource length 1 sub {
DataSource type dup
/arraytype eq {
pop DataSource exch get exec
}{
/filetype eq {
DataSource exch get imbuf readstring pop
}{
DataSource exch get
} ifelse
} ifelse
AGMUTIL_imagefile exch writestring
} for
}{
DataSource type dup
/arraytype eq {
pop DataSource exec
}{
/filetype eq {
DataSource imbuf readstring pop
}{
DataSource
} ifelse
} ifelse
AGMUTIL_imagefile exch writestring
} ifelse
}for
end
true
}ifelse
end
} bdf
/close_image_file
{
AGMUTIL_imagefile closefile (AGMUTIL_imagefile) deletefile
}def
statusdict /product known userdict /AGMP_current_show known not and{
/pstr statusdict /product get def
pstr (HP LaserJet 2200) eq
pstr (HP LaserJet 4000 Series) eq or
pstr (HP LaserJet 4050 Series ) eq or
pstr (HP LaserJet 8000 Series) eq or
pstr (HP LaserJet 8100 Series) eq or
pstr (HP LaserJet 8150 Series) eq or
pstr (HP LaserJet 5000 Series) eq or
pstr (HP LaserJet 5100 Series) eq or
pstr (HP Color LaserJet 4500) eq or
pstr (HP Color LaserJet 4600) eq or
pstr (HP LaserJet 5Si) eq or
pstr (HP LaserJet 1200 Series) eq or
pstr (HP LaserJet 1300 Series) eq or
pstr (HP LaserJet 4100 Series) eq or
{
userdict /AGMP_current_show /show load put
userdict /show {
currentcolorspace 0 get
/Pattern eq
{false charpath f}
{AGMP_current_show} ifelse
} put
}if
currentdict /pstr undef
} if
/consumeimagedata
{
begin
currentdict /MultipleDataSources known not
{/MultipleDataSources false def} if
MultipleDataSources
{
1 dict begin
/flushbuffer Width cvi string def
1 1 Height cvi
{
pop
0 1 DataSource length 1 sub
{
DataSource exch get
dup type dup
/filetype eq
{
exch flushbuffer readstring pop pop
}if
/arraytype eq
{
exec pop
}if
}for
}for
end
}
{
/DataSource load type dup
/filetype eq
{
1 dict begin
/flushbuffer Width Decode length 2 div mul cvi string def
1 1 Height { pop DataSource flushbuffer readstring pop pop} for
end
}if
/arraytype eq
{
1 1 Height { pop DataSource pop } for
}if
}ifelse
end
}bdf
/addprocs
{
2{/exec load}repeat
3 1 roll
[ 5 1 roll ] bind cvx
}def
/modify_halftone_xfer
{
currenthalftone dup length dict copy begin
currentdict 2 index known{
1 index load dup length dict copy begin
currentdict/TransferFunction known{
/TransferFunction load
}{
currenttransfer
}ifelse
addprocs /TransferFunction xdf
currentdict end def
currentdict end sethalftone
}{
currentdict/TransferFunction known{
/TransferFunction load
}{
currenttransfer
}ifelse
addprocs /TransferFunction xdf
currentdict end sethalftone
pop
}ifelse
}def
/clonearray
{
dup xcheck exch
dup length array exch
Adobe_AGM_Core/AGMCORE_tmp -1 ddf
{
Adobe_AGM_Core/AGMCORE_tmp AGMCORE_tmp 1 add ddf
dup type /dicttype eq
{
AGMCORE_tmp
exch
clonedict
Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf
} if
dup type /arraytype eq
{
AGMCORE_tmp exch
clonearray
Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf
} if
exch dup
AGMCORE_tmp 4 -1 roll put
}forall
exch {cvx} if
}bdf
/clonedict
{
dup length dict
begin
{
dup type /dicttype eq
{
clonedict
} if
dup type /arraytype eq
{
clonearray
} if
def
}forall
currentdict
end
}bdf
/DeviceN_PS2
{
/currentcolorspace AGMCORE_gget 0 get /DeviceN eq level3 not and
} bdf
/Indexed_DeviceN
{
/indexed_colorspace_dict AGMCORE_gget dup null ne {
/CSD known
}{
pop false
} ifelse
} bdf
/DeviceN_NoneName
{
/Names where {
pop
false Names
{
(None) eq or
} forall
}{
false
}ifelse
} bdf
/DeviceN_PS2_inRip_seps
{
/AGMCORE_in_rip_sep where
{
pop dup type dup /arraytype eq exch /packedarraytype eq or
{
dup 0 get /DeviceN eq level3 not and AGMCORE_in_rip_sep and
{
/currentcolorspace exch AGMCORE_gput
false
}
{
true
}ifelse
}
{
true
} ifelse
}
{
true
} ifelse
} bdf
/base_colorspace_type
{
dup type /arraytype eq {0 get} if
} bdf
/doc_setup{
Adobe_AGM_Utils begin
}bdf
/doc_trailer{
currentdict Adobe_AGM_Utils eq{
end
}if
}bdf
systemdict /setpacking known
{
setpacking
} if
%%EndResource
%%BeginResource: procset Adobe_AGM_Core 2.0 0
%%Version: 2.0 0
%%Copyright: Copyright (C) 1997-2003 Adobe Systems, Inc. All Rights Reserved.
systemdict /setpacking known
{
currentpacking
true setpacking
} if
userdict /Adobe_AGM_Core 216 dict dup begin put
/nd{
null def
}bind def
/Adobe_AGM_Core_Id /Adobe_AGM_Core_2.0_0 def
/AGMCORE_str256 256 string def
/AGMCORE_save nd
/AGMCORE_graphicsave nd
/AGMCORE_c 0 def
/AGMCORE_m 0 def
/AGMCORE_y 0 def
/AGMCORE_k 0 def
/AGMCORE_cmykbuf 4 array def
/AGMCORE_screen [currentscreen] cvx def
/AGMCORE_tmp 0 def
/AGMCORE_&setgray nd
/AGMCORE_&setcolor nd
/AGMCORE_&setcolorspace nd
/AGMCORE_&setcmykcolor nd
/AGMCORE_cyan_plate nd
/AGMCORE_magenta_plate nd
/AGMCORE_yellow_plate nd
/AGMCORE_black_plate nd
/AGMCORE_plate_ndx nd
/AGMCORE_get_ink_data nd
/AGMCORE_is_cmyk_sep nd
/AGMCORE_host_sep nd
/AGMCORE_avoid_L2_sep_space nd
/AGMCORE_distilling nd
/AGMCORE_composite_job nd
/AGMCORE_producing_seps nd
/AGMCORE_ps_level -1 def
/AGMCORE_ps_version -1 def
/AGMCORE_environ_ok nd
/AGMCORE_CSA_cache 0 dict def
/AGMCORE_CSD_cache 0 dict def
/AGMCORE_pattern_cache 0 dict def
/AGMCORE_currentoverprint false def
/AGMCORE_deltaX nd
/AGMCORE_deltaY nd
/AGMCORE_name nd
/AGMCORE_sep_special nd
/AGMCORE_err_strings 4 dict def
/AGMCORE_cur_err nd
/AGMCORE_ovp nd
/AGMCORE_current_spot_alias false def
/AGMCORE_inverting false def
/AGMCORE_feature_dictCount nd
/AGMCORE_feature_opCount nd
/AGMCORE_feature_ctm nd
/AGMCORE_ConvertToProcess false def
/AGMCORE_Default_CTM matrix def
/AGMCORE_Default_PageSize nd
/AGMCORE_currentbg nd
/AGMCORE_currentucr nd
/AGMCORE_gradientcache 32 dict def
/AGMCORE_in_pattern false def
/knockout_unitsq nd
/AGMCORE_CRD_cache where{
pop
}{
/AGMCORE_CRD_cache 0 dict def
}ifelse
/AGMCORE_key_known
{
where{
/Adobe_AGM_Core_Id known
}{
false
}ifelse
}ndf
/flushinput
{
save
2 dict begin
/CompareBuffer 3 -1 roll def
/readbuffer 256 string def
mark
{
currentfile readbuffer {readline} stopped
{cleartomark mark}
{
not
{pop exit}
if
CompareBuffer eq
{exit}
if
}ifelse
}loop
cleartomark
end
restore
}bdf
/getspotfunction
{
AGMCORE_screen exch pop exch pop
dup type /dicttype eq{
dup /HalftoneType get 1 eq{
/SpotFunction get
}{
dup /HalftoneType get 2 eq{
/GraySpotFunction get
}{
pop
{
abs exch abs 2 copy add 1 gt{
1 sub dup mul exch 1 sub dup mul add 1 sub
}{
dup mul exch dup mul add 1 exch sub
}ifelse
}bind
}ifelse
}ifelse
}if
} def
/clp_npth
{
clip newpath
} def
/eoclp_npth
{
eoclip newpath
} def
/npth_clp
{
newpath clip
} def
/add_grad
{
AGMCORE_gradientcache 3 1 roll put
}bdf
/exec_grad
{
AGMCORE_gradientcache exch get exec
}bdf
/graphic_setup
{
/AGMCORE_graphicsave save def
concat
0 setgray
0 setlinecap
0 setlinejoin
1 setlinewidth
[] 0 setdash
10 setmiterlimit
newpath
false setoverprint
false setstrokeadjust
Adobe_AGM_Core/spot_alias get exec
/Adobe_AGM_Image where {
pop
Adobe_AGM_Image/spot_alias 2 copy known{
get exec
}{
pop pop
}ifelse
} if
100 dict begin
/dictstackcount countdictstack def
/showpage {} def
mark
} def
/graphic_cleanup
{
cleartomark
dictstackcount 1 countdictstack 1 sub {end}for
end
AGMCORE_graphicsave restore
} def
/compose_error_msg
{
grestoreall initgraphics
/Helvetica findfont 10 scalefont setfont
/AGMCORE_deltaY 100 def
/AGMCORE_deltaX 310 def
clippath pathbbox newpath pop pop 36 add exch 36 add exch moveto
0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto
0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath
0 AGMCORE_&setgray
gsave 1 AGMCORE_&setgray fill grestore
1 setlinewidth gsave stroke grestore
currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto
/AGMCORE_deltaY 12 def
/AGMCORE_tmp 0 def
AGMCORE_err_strings exch get
{
dup 32 eq
{
pop
AGMCORE_str256 0 AGMCORE_tmp getinterval
stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt
{
currentpoint AGMCORE_deltaY sub exch pop
clippath pathbbox pop pop pop 44 add exch moveto
} if
AGMCORE_str256 0 AGMCORE_tmp getinterval show ( ) show
0 1 AGMCORE_str256 length 1 sub
{
AGMCORE_str256 exch 0 put
}for
/AGMCORE_tmp 0 def
}
{
AGMCORE_str256 exch AGMCORE_tmp xpt
/AGMCORE_tmp AGMCORE_tmp 1 add def
} ifelse
} forall
} bdf
/doc_setup{
Adobe_AGM_Core begin
/AGMCORE_ps_version xdf
/AGMCORE_ps_level xdf
errordict /AGM_handleerror known not{
errordict /AGM_handleerror errordict /handleerror get put
errordict /handleerror {
Adobe_AGM_Core begin
$error /newerror get AGMCORE_cur_err null ne and{
$error /newerror false put
AGMCORE_cur_err compose_error_msg
}if
$error /newerror true put
end
errordict /AGM_handleerror get exec
} bind put
}if
/AGMCORE_environ_ok
ps_level AGMCORE_ps_level ge
ps_version AGMCORE_ps_version ge and
AGMCORE_ps_level -1 eq or
def
AGMCORE_environ_ok not
{/AGMCORE_cur_err /AGMCORE_bad_environ def} if
/AGMCORE_&setgray systemdict/setgray get def
level2{
/AGMCORE_&setcolor systemdict/setcolor get def
/AGMCORE_&setcolorspace systemdict/setcolorspace get def
}if
/AGMCORE_currentbg currentblackgeneration def
/AGMCORE_currentucr currentundercolorremoval def
/AGMCORE_distilling
/product where{
pop systemdict/setdistillerparams known product (Adobe PostScript Parser) ne and
}{
false
}ifelse
def
level2 not{
/xput{
dup load dup length exch maxlength eq{
dup dup load dup
length dup 0 eq {pop 1} if 2 mul dict copy def
}if
load begin
def
end
}def
}{
/xput{
load 3 1 roll put
}def
}ifelse
/AGMCORE_GSTATE AGMCORE_key_known not{
/AGMCORE_GSTATE 21 dict def
/AGMCORE_tmpmatrix matrix def
/AGMCORE_gstack 32 array def
/AGMCORE_gstackptr 0 def
/AGMCORE_gstacksaveptr 0 def
/AGMCORE_gstackframekeys 10 def
/AGMCORE_&gsave /gsave ldf
/AGMCORE_&grestore /grestore ldf
/AGMCORE_&grestoreall /grestoreall ldf
/AGMCORE_&save /save ldf
/AGMCORE_gdictcopy {
begin
{ def } forall
end
}def
/AGMCORE_gput {
AGMCORE_gstack AGMCORE_gstackptr get
3 1 roll
put
}def
/AGMCORE_gget {
AGMCORE_gstack AGMCORE_gstackptr get
exch
get
}def
/gsave {
AGMCORE_&gsave
AGMCORE_gstack AGMCORE_gstackptr get
AGMCORE_gstackptr 1 add
dup 32 ge {limitcheck} if
Adobe_AGM_Core exch
/AGMCORE_gstackptr xpt
AGMCORE_gstack AGMCORE_gstackptr get
AGMCORE_gdictcopy
}def
/grestore {
AGMCORE_&grestore
AGMCORE_gstackptr 1 sub
dup AGMCORE_gstacksaveptr lt {1 add} if
Adobe_AGM_Core exch
/AGMCORE_gstackptr xpt
}def
/grestoreall {
AGMCORE_&grestoreall
Adobe_AGM_Core
/AGMCORE_gstackptr AGMCORE_gstacksaveptr put
}def
/save {
AGMCORE_&save
AGMCORE_gstack AGMCORE_gstackptr get
AGMCORE_gstackptr 1 add
dup 32 ge {limitcheck} if
Adobe_AGM_Core begin
/AGMCORE_gstackptr exch def
/AGMCORE_gstacksaveptr AGMCORE_gstackptr def
end
AGMCORE_gstack AGMCORE_gstackptr get
AGMCORE_gdictcopy
}def
0 1 AGMCORE_gstack length 1 sub {
AGMCORE_gstack exch AGMCORE_gstackframekeys dict put
} for
}if
level3 /AGMCORE_&sysshfill AGMCORE_key_known not and
{
/AGMCORE_&sysshfill systemdict/shfill get def
/AGMCORE_&usrshfill /shfill load def
/AGMCORE_&sysmakepattern systemdict/makepattern get def
/AGMCORE_&usrmakepattern /makepattern load def
}if
/currentcmykcolor [0 0 0 0] AGMCORE_gput
/currentstrokeadjust false AGMCORE_gput
/currentcolorspace [/DeviceGray] AGMCORE_gput
/sep_tint 0 AGMCORE_gput
/devicen_tints [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] AGMCORE_gput
/sep_colorspace_dict null AGMCORE_gput
/devicen_colorspace_dict null AGMCORE_gput
/indexed_colorspace_dict null AGMCORE_gput
/currentcolor_intent () AGMCORE_gput
/customcolor_tint 1 AGMCORE_gput
<<
/MaxPatternItem currentsystemparams /MaxPatternCache get
>>
setuserparams
end
}def
/page_setup
{
/setcmykcolor where{
pop
Adobe_AGM_Core/AGMCORE_&setcmykcolor /setcmykcolor load put
}if
Adobe_AGM_Core begin
/setcmykcolor
{
4 copy AGMCORE_cmykbuf astore /currentcmykcolor exch AGMCORE_gput
1 sub 4 1 roll
3 {
3 index add neg dup 0 lt {
pop 0
} if
3 1 roll
} repeat
setrgbcolor pop
}ndf
/currentcmykcolor
{
/currentcmykcolor AGMCORE_gget aload pop
}ndf
/setoverprint
{
pop
}ndf
/currentoverprint
{
false
}ndf
/AGMCORE_deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt def
/AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def
/AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def
/AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def
/AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def
/AGMCORE_plate_ndx
AGMCORE_cyan_plate{
0
}{
AGMCORE_magenta_plate{
1
}{
AGMCORE_yellow_plate{
2
}{
AGMCORE_black_plate{
3
}{
4
}ifelse
}ifelse
}ifelse
}ifelse
def
/AGMCORE_have_reported_unsupported_color_space false def
/AGMCORE_report_unsupported_color_space
{
AGMCORE_have_reported_unsupported_color_space false eq
{
(Warning: Job contains content that cannot be separated with on-host methods. This content appears on the black plate, and knocks out all other plates.) ==
Adobe_AGM_Core /AGMCORE_have_reported_unsupported_color_space true ddf
} if
}def
/AGMCORE_composite_job
AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def
/AGMCORE_in_rip_sep
/AGMCORE_in_rip_sep where{
pop AGMCORE_in_rip_sep
}{
AGMCORE_distilling
{
false
}{
userdict/Adobe_AGM_OnHost_Seps known{
false
}{
level2{
currentpagedevice/Separations 2 copy known{
get
}{
pop pop false
}ifelse
}{
false
}ifelse
}ifelse
}ifelse
}ifelse
def
/AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def
/AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def
/AGM_preserve_spots
/AGM_preserve_spots where{
pop AGM_preserve_spots
}{
AGMCORE_distilling AGMCORE_producing_seps or
}ifelse
def
/AGM_is_distiller_preserving_spotimages
{
currentdistillerparams/PreserveOverprintSettings known
{
currentdistillerparams/PreserveOverprintSettings get
{
currentdistillerparams/ColorConversionStrategy known
{
currentdistillerparams/ColorConversionStrategy get
/LeaveColorUnchanged eq
}{
true
}ifelse
}{
false
}ifelse
}{
false
}ifelse
}def
/convert_spot_to_process where {pop}{
/convert_spot_to_process
{
dup map_alias {
/Name get exch pop
} if
dup dup (None) eq exch (All) eq or
{
pop false
}{
AGMCORE_host_sep
{
gsave
1 0 0 0 setcmykcolor currentgray 1 exch sub
0 1 0 0 setcmykcolor currentgray 1 exch sub
0 0 1 0 setcmykcolor currentgray 1 exch sub
0 0 0 1 setcmykcolor currentgray 1 exch sub
add add add 0 eq
{
pop false
}{
false setoverprint
1 1 1 1 5 -1 roll findcmykcustomcolor 1 setcustomcolor
currentgray 0 eq
}ifelse
grestore
}{
AGMCORE_distilling
{
pop AGM_is_distiller_preserving_spotimages not
}{
Adobe_AGM_Core/AGMCORE_name xddf
false
Adobe_AGM_Core/AGMCORE_in_pattern known {Adobe_AGM_Core/AGMCORE_in_pattern get}{false} ifelse
not currentpagedevice/OverrideSeparations known and
{
currentpagedevice/OverrideSeparations get
{
/HqnSpots /ProcSet resourcestatus
{
pop pop pop true
}if
}if
}if
{
AGMCORE_name /HqnSpots /ProcSet findresource /TestSpot get exec not
}{
gsave
[/Separation AGMCORE_name /DeviceGray {}]setcolorspace
false
currentpagedevice/SeparationColorNames 2 copy known
{
get
{ AGMCORE_name eq or}forall
not
}{
pop pop pop true
}ifelse
grestore
}ifelse
}ifelse
}ifelse
}ifelse
}def
}ifelse
/convert_to_process where {pop}{
/convert_to_process
{
dup length 0 eq
{
pop false
}{
AGMCORE_host_sep
{
dup true exch
{
dup (Cyan) eq exch
dup (Magenta) eq 3 -1 roll or exch
dup (Yellow) eq 3 -1 roll or exch
dup (Black) eq 3 -1 roll or
{pop}
{convert_spot_to_process and}ifelse
}
forall
{
true exch
{
dup (Cyan) eq exch
dup (Magenta) eq 3 -1 roll or exch
dup (Yellow) eq 3 -1 roll or exch
(Black) eq or and
}forall
not
}{pop false}ifelse
}{
false exch
{
dup (Cyan) eq exch
dup (Magenta) eq 3 -1 roll or exch
dup (Yellow) eq 3 -1 roll or exch
dup (Black) eq 3 -1 roll or
{pop}
{convert_spot_to_process or}ifelse
}
forall
}ifelse
}ifelse
}def
}ifelse
/AGMCORE_avoid_L2_sep_space
version cvr 2012 lt
level2 and
AGMCORE_producing_seps not and
def
/AGMCORE_is_cmyk_sep
AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or
def
/AGM_avoid_0_cmyk where{
pop AGM_avoid_0_cmyk
}{
AGM_preserve_spots
userdict/Adobe_AGM_OnHost_Seps known
userdict/Adobe_AGM_InRip_Seps known or
not and
}ifelse
{
/setcmykcolor[
{
4 copy add add add 0 eq currentoverprint and{
pop 0.0005
}if
}/exec cvx
/AGMCORE_&setcmykcolor load dup type/operatortype ne{
/exec cvx
}if
]cvx def
}if
AGMCORE_host_sep{
/setcolortransfer
{
AGMCORE_cyan_plate{
pop pop pop
}{
AGMCORE_magenta_plate{
4 3 roll pop pop pop
}{
AGMCORE_yellow_plate{
4 2 roll pop pop pop
}{
4 1 roll pop pop pop
}ifelse
}ifelse
}ifelse
settransfer
}
def
/AGMCORE_get_ink_data
AGMCORE_cyan_plate{
{pop pop pop}
}{
AGMCORE_magenta_plate{
{4 3 roll pop pop pop}
}{
AGMCORE_yellow_plate{
{4 2 roll pop pop pop}
}{
{4 1 roll pop pop pop}
}ifelse
}ifelse
}ifelse
def
/AGMCORE_RemoveProcessColorNames
{
1 dict begin
/filtername
{
dup /Cyan eq 1 index (Cyan) eq or
{pop (_cyan_)}if
dup /Magenta eq 1 index (Magenta) eq or
{pop (_magenta_)}if
dup /Yellow eq 1 index (Yellow) eq or
{pop (_yellow_)}if
dup /Black eq 1 index (Black) eq or
{pop (_black_)}if
}def
dup type /arraytype eq
{[exch {filtername}forall]}
{filtername}ifelse
end
}def
/AGMCORE_IsSeparationAProcessColor
{
dup (Cyan) eq exch dup (Magenta) eq exch dup (Yellow) eq exch (Black) eq or or or
}def
level3 {
/AGMCORE_IsCurrentColor
{
gsave
false setoverprint
1 1 1 1 5 -1 roll findcmykcustomcolor 1 setcustomcolor
currentgray 0 eq
grestore
}def
/AGMCORE_filter_functiondatasource
{
5 dict begin
/data_in xdf
data_in type /stringtype eq
{
/ncomp xdf
/comp xdf
/string_out data_in length ncomp idiv string def
0 ncomp data_in length 1 sub
{
string_out exch dup ncomp idiv exch data_in exch ncomp getinterval comp get 255 exch sub put
}for
string_out
}{
string /string_in xdf
/string_out 1 string def
/component xdf
[
data_in string_in /readstring cvx
[component /get cvx 255 /exch cvx /sub cvx string_out /exch cvx 0 /exch cvx /put cvx string_out]cvx
[/pop cvx ()]cvx /ifelse cvx
]cvx /ReusableStreamDecode filter
}ifelse
end
}def
/AGMCORE_separateShadingFunction
{
2 dict begin
/paint? xdf
/channel xdf
begin
FunctionType 0 eq
{
/DataSource channel Range length 2 idiv DataSource AGMCORE_filter_functiondatasource def
currentdict /Decode known
{/Decode Decode channel 2 mul 2 getinterval def}if
paint? not
{/Decode [1 1]def}if
}if
FunctionType 2 eq
{
paint?
{
/C0 [C0 channel get 1 exch sub] def
/C1 [C1 channel get 1 exch sub] def
}{
/C0 [1] def
/C1 [1] def
}ifelse
}if
FunctionType 3 eq
{
/Functions [Functions {channel paint? AGMCORE_separateShadingFunction} forall] def
}if
currentdict /Range known
{/Range [0 1] def}if
currentdict
end
end
}def
/AGMCORE_separateShading
{
3 -1 roll begin
currentdict /Function known
{
currentdict /Background known
{[1 index{Background 3 index get 1 exch sub}{1}ifelse]/Background xdf}if
Function 3 1 roll AGMCORE_separateShadingFunction /Function xdf
/ColorSpace [/DeviceGray] def
}{
ColorSpace dup type /arraytype eq {0 get}if /DeviceCMYK eq
{
/ColorSpace [/DeviceN [/_cyan_ /_magenta_ /_yellow_ /_black_] /DeviceCMYK {}] def
}{
ColorSpace dup 1 get AGMCORE_RemoveProcessColorNames 1 exch put
}ifelse
ColorSpace 0 get /Separation eq
{
{
[1 /exch cvx /sub cvx]cvx
}{
[/pop cvx 1]cvx
}ifelse
ColorSpace 3 3 -1 roll put
pop
}{
{
[exch ColorSpace 1 get length 1 sub exch sub /index cvx 1 /exch cvx /sub cvx ColorSpace 1 get length 1 add 1 /roll cvx ColorSpace 1 get length{/pop cvx} repeat]cvx
}{
pop [ColorSpace 1 get length {/pop cvx} repeat cvx 1]cvx
}ifelse
ColorSpace 3 3 -1 roll bind put
}ifelse
ColorSpace 2 /DeviceGray put
}ifelse
end
}def
/AGMCORE_separateShadingDict
{
dup /ColorSpace get
dup type /arraytype ne
{[exch]}if
dup 0 get /DeviceCMYK eq
{
exch begin
currentdict
AGMCORE_cyan_plate
{0 true}if
AGMCORE_magenta_plate
{1 true}if
AGMCORE_yellow_plate
{2 true}if
AGMCORE_black_plate
{3 true}if
AGMCORE_plate_ndx 4 eq
{0 false}if
dup not currentoverprint and
{/AGMCORE_ignoreshade true def}if
AGMCORE_separateShading
currentdict
end exch
}if
dup 0 get /Separation eq
{
exch begin
ColorSpace 1 get dup /None ne exch /All ne and
{
ColorSpace 1 get AGMCORE_IsCurrentColor AGMCORE_plate_ndx 4 lt and ColorSpace 1 get AGMCORE_IsSeparationAProcessColor not and
{
ColorSpace 2 get dup type /arraytype eq {0 get}if /DeviceCMYK eq
{
/ColorSpace
[
/Separation
ColorSpace 1 get
/DeviceGray
[
ColorSpace 3 get /exec cvx
4 AGMCORE_plate_ndx sub -1 /roll cvx
4 1 /roll cvx
3 [/pop cvx]cvx /repeat cvx
1 /exch cvx /sub cvx
]cvx
]def
}{
AGMCORE_report_unsupported_color_space
AGMCORE_black_plate not
{
currentdict 0 false AGMCORE_separateShading
}if
}ifelse
}{
currentdict ColorSpace 1 get AGMCORE_IsCurrentColor
0 exch
dup not currentoverprint and
{/AGMCORE_ignoreshade true def}if
AGMCORE_separateShading
}ifelse
}if
currentdict
end exch
}if
dup 0 get /DeviceN eq
{
exch begin
ColorSpace 1 get convert_to_process
{
ColorSpace 2 get dup type /arraytype eq {0 get}if /DeviceCMYK eq
{
/ColorSpace
[
/DeviceN
ColorSpace 1 get
/DeviceGray
[
ColorSpace 3 get /exec cvx
4 AGMCORE_plate_ndx sub -1 /roll cvx
4 1 /roll cvx
3 [/pop cvx]cvx /repeat cvx
1 /exch cvx /sub cvx
]cvx
]def
}{
AGMCORE_report_unsupported_color_space
AGMCORE_black_plate not
{
currentdict 0 false AGMCORE_separateShading
/ColorSpace [/DeviceGray] def
}if
}ifelse
}{
currentdict
false -1 ColorSpace 1 get
{
AGMCORE_IsCurrentColor
{
1 add
exch pop true exch exit
}if
1 add
}forall
exch
dup not currentoverprint and
{/AGMCORE_ignoreshade true def}if
AGMCORE_separateShading
}ifelse
currentdict
end exch
}if
dup 0 get dup /DeviceCMYK eq exch dup /Separation eq exch /DeviceN eq or or not
{
exch begin
ColorSpace dup type /arraytype eq
{0 get}if
/DeviceGray ne
{
AGMCORE_report_unsupported_color_space
AGMCORE_black_plate not
{
ColorSpace 0 get /CIEBasedA eq
{
/ColorSpace [/Separation /_ciebaseda_ /DeviceGray {}] def
}if
ColorSpace 0 get dup /CIEBasedABC eq exch dup /CIEBasedDEF eq exch /DeviceRGB eq or or
{
/ColorSpace [/DeviceN [/_red_ /_green_ /_blue_] /DeviceRGB {}] def
}if
ColorSpace 0 get /CIEBasedDEFG eq
{
/ColorSpace [/DeviceN [/_cyan_ /_magenta_ /_yellow_ /_black_] /DeviceCMYK {}]
}if
currentdict 0 false AGMCORE_separateShading
}if
}if
currentdict
end exch
}if
pop
dup /AGMCORE_ignoreshade known
{
begin
/ColorSpace [/Separation (None) /DeviceGray {}] def
currentdict end
}if
}def
/shfill
{
clonedict
AGMCORE_separateShadingDict
dup /AGMCORE_ignoreshade known
{pop}
{AGMCORE_&sysshfill}ifelse
}def
/makepattern
{
exch
dup /PatternType get 2 eq
{
clonedict
begin
/Shading Shading AGMCORE_separateShadingDict def
currentdict end
exch AGMCORE_&sysmakepattern
}{
exch AGMCORE_&usrmakepattern
}ifelse
}def
}if
}if
AGMCORE_in_rip_sep{
/setcustomcolor
{
exch aload pop
dup 7 1 roll inRip_spot_has_ink not {
4 {4 index mul 4 1 roll}
repeat
/DeviceCMYK setcolorspace
6 -2 roll pop pop
}{
Adobe_AGM_Core begin
/AGMCORE_k xdf /AGMCORE_y xdf /AGMCORE_m xdf /AGMCORE_c xdf
end
[/Separation 4 -1 roll /DeviceCMYK
{dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul}
]
setcolorspace
}ifelse
setcolor
}ndf
/setseparationgray
{
[/Separation (All) /DeviceGray {}] setcolorspace_opt
1 exch sub setcolor
}ndf
}{
/setseparationgray
{
AGMCORE_&setgray
}ndf
}ifelse
/findcmykcustomcolor
{
5 makereadonlyarray
}ndf
/setcustomcolor
{
exch aload pop pop
4 {4 index mul 4 1 roll} repeat
setcmykcolor pop
}ndf
/has_color
/colorimage where{
AGMCORE_producing_seps{
pop true
}{
systemdict eq
}ifelse
}{
false
}ifelse
def
/map_index
{
1 index mul exch getinterval {255 div} forall
} bdf
/map_indexed_devn
{
Lookup Names length 3 -1 roll cvi map_index
} bdf
/n_color_components
{
base_colorspace_type
dup /DeviceGray eq{
pop 1
}{
/DeviceCMYK eq{
4
}{
3
}ifelse
}ifelse
}bdf
level2{
/mo /moveto ldf
/li /lineto ldf
/cv /curveto ldf
/knockout_unitsq
{
1 setgray
0 0 1 1 rectfill
}def
/level2ScreenFreq{
begin
60
HalftoneType 1 eq{
pop Frequency
}if
HalftoneType 2 eq{
pop GrayFrequency
}if
HalftoneType 5 eq{
pop Default level2ScreenFreq
}if
end
}def
/currentScreenFreq{
currenthalftone level2ScreenFreq
}def
level2 /setcolorspace AGMCORE_key_known not and{
/AGMCORE_&&&setcolorspace /setcolorspace ldf
/AGMCORE_ReplaceMappedColor
{
dup type dup /arraytype eq exch /packedarraytype eq or
{
dup 0 get dup /Separation eq
{
pop
dup length array copy
dup dup 1 get
current_spot_alias
{
dup map_alias
{
begin
/sep_colorspace_dict currentdict AGMCORE_gput
pop pop pop
[
/Separation Name
CSA map_csa
dup /MappedCSA xdf
/sep_colorspace_proc load
]
dup Name
end
}if
}if
map_reserved_ink_name 1 xpt
}{
/DeviceN eq
{
dup length array copy
dup dup 1 get [
exch {
current_spot_alias{
dup map_alias{
/Name get exch pop
}if
}if
map_reserved_ink_name
} forall
] 1 xpt
}if
}ifelse
}if
}def
/setcolorspace
{
dup type dup /arraytype eq exch /packedarraytype eq or
{
dup 0 get /Indexed eq
{
AGMCORE_distilling
{
/PhotoshopDuotoneList where
{
pop false
}{
true
}ifelse
}{
true
}ifelse
{
aload pop 3 -1 roll
AGMCORE_ReplaceMappedColor
3 1 roll 4 array astore
}if
}{
AGMCORE_ReplaceMappedColor
}ifelse
}if
DeviceN_PS2_inRip_seps {AGMCORE_&&&setcolorspace} if
}def
}if
}{
/adj
{
currentstrokeadjust{
transform
0.25 sub round 0.25 add exch
0.25 sub round 0.25 add exch
itransform
}if
}def
/mo{
adj moveto
}def
/li{
adj lineto
}def
/cv{
6 2 roll adj
6 2 roll adj
6 2 roll adj curveto
}def
/knockout_unitsq
{
1 setgray
8 8 1 [8 0 0 8 0 0] {<ffffffffffffffff>} image
}def
/currentstrokeadjust{
/currentstrokeadjust AGMCORE_gget
}def
/setstrokeadjust{
/currentstrokeadjust exch AGMCORE_gput
}def
/currentScreenFreq{
currentscreen pop pop
}def
/setcolorspace
{
/currentcolorspace exch AGMCORE_gput
} def
/currentcolorspace
{
/currentcolorspace AGMCORE_gget
} def
/setcolor_devicecolor
{
base_colorspace_type
dup /DeviceGray eq{
pop setgray
}{
/DeviceCMYK eq{
setcmykcolor
}{
setrgbcolor
}ifelse
}ifelse
}def
/setcolor
{
currentcolorspace 0 get
dup /DeviceGray ne{
dup /DeviceCMYK ne{
dup /DeviceRGB ne{
dup /Separation eq{
pop
currentcolorspace 3 get exec
currentcolorspace 2 get
}{
dup /Indexed eq{
pop
currentcolorspace 3 get dup type /stringtype eq{
currentcolorspace 1 get n_color_components
3 -1 roll map_index
}{
exec
}ifelse
currentcolorspace 1 get
}{
/AGMCORE_cur_err /AGMCORE_invalid_color_space def
AGMCORE_invalid_color_space
}ifelse
}ifelse
}if
}if
}if
setcolor_devicecolor
} def
}ifelse
/sop /setoverprint ldf
/lw /setlinewidth ldf
/lc /setlinecap ldf
/lj /setlinejoin ldf
/ml /setmiterlimit ldf
/dsh /setdash ldf
/sadj /setstrokeadjust ldf
/gry /setgray ldf
/rgb /setrgbcolor ldf
/cmyk /setcmykcolor ldf
/sep /setsepcolor ldf
/devn /setdevicencolor ldf
/idx /setindexedcolor ldf
/colr /setcolor ldf
/csacrd /set_csa_crd ldf
/sepcs /setsepcolorspace ldf
/devncs /setdevicencolorspace ldf
/idxcs /setindexedcolorspace ldf
/cp /closepath ldf
/clp /clp_npth ldf
/eclp /eoclp_npth ldf
/f /fill ldf
/ef /eofill ldf
/@ /stroke ldf
/nclp /npth_clp ldf
/gset /graphic_setup ldf
/gcln /graphic_cleanup ldf
currentdict{
dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and {
bind
}if
def
}forall
/currentpagedevice currentpagedevice def
/getrampcolor {
/indx exch def
0 1 NumComp 1 sub {
dup
Samples exch get
dup type /stringtype eq { indx get } if
exch
Scaling exch get aload pop
3 1 roll
mul add
} for
ColorSpaceFamily /Separation eq
{
sep
}
{
ColorSpaceFamily /DeviceN eq
{
devn
}
{
setcolor
}ifelse
}ifelse
} bind def
/sssetbackground { aload pop setcolor } bind def
/RadialShade {
40 dict begin
/ColorSpaceFamily exch def
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/r2 exch def
/c2y exch def
/c2x exch def
/r1 exch def
/c1y exch def
/c1x exch def
/rampdict exch def
/setinkoverprint where {pop /setinkoverprint{pop}def}if
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
c1x c2x eq
{
c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope c2y c1y sub c2x c1x sub div def
/theta slope 1 atan def
c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
c1x c1y translate
theta rotate
-90 rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
/max { 2 copy gt { pop } {exch pop} ifelse } bind def
/min { 2 copy lt { pop } {exch pop} ifelse } bind def
rampdict begin
40 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
c1x c1y translate
theta rotate
-90 rotate
/c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
/c1y 0 def
/c1x 0 def
/c2x 0 def
ext0 {
0 getrampcolor
c2y r2 add r1 sub 0.0001 lt
{
c1x c1y r1 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2y r1 add r2 le
{
c1x c1y r1 0 360 arc
fill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r1 neg def
/p1y c1y def
/p2x r1 def
/p2y c1y def
p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
fill
}
{
/AA r2 r1 sub c2y div def
/theta AA 1 AA dup mul sub sqrt div 1 atan def
/SS1 90 theta add dup sin exch cos div def
/p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y p1x SS1 div neg def
/SS2 90 theta sub dup sin exch cos div def
/p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y p2x SS2 div neg def
r1 r2 gt
{
/L1maxX p1x yMin p1y sub SS1 div add def
/L2maxX p2x yMin p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
c1x c2x sub dup mul
c1y c2y sub dup mul
add 0.5 exp
0 dtransform
dup mul exch dup mul add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
/hires exch def
hires mul
/numpix exch def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
/xInc c2x c1x sub numsteps div def
/yInc c2y c1y sub numsteps div def
/rInc r2 r1 sub numsteps div def
/cx c1x def
/cy c1y def
/radius r1 def
newpath
xInc 0 eq yInc 0 eq rInc 0 eq and and
{
0 getrampcolor
cx cy radius 0 360 arc
stroke
NumSamples 1 sub getrampcolor
cx cy radius 72 hires div add 0 360 arc
0 setlinewidth
stroke
}
{
0
numsteps
{
dup
subsampling { round cvi } if
getrampcolor
cx cy radius 0 360 arc
/cx cx xInc add def
/cy cy yInc add def
/radius radius rInc add def
cx cy radius 360 0 arcn
eofill
rampIndxInc add
}
repeat
pop
} ifelse
ext1 {
c2y r2 add r1 lt
{
c2x c2y r2 0 360 arc
fill
}
{
c2y r1 add r2 sub 0.0001 le
{
c2x c2y r2 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r2 neg def
/p1y c2y def
/p2x r2 def
/p2y c2y def
p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
fill
}
{
/AA r2 r1 sub c2y div def
/theta AA 1 AA dup mul sub sqrt div 1 atan def
/SS1 90 theta add dup sin exch cos div def
/p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y c2y p1x SS1 div sub def
/SS2 90 theta sub dup sin exch cos div def
/p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y c2y p2x SS2 div sub def
r1 r2 lt
{
/L1maxX p1x yMax p1y sub SS1 div add def
/L2maxX p2x yMax p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
grestore
grestore
end
end
end
} ifelse
} bind def
/GenStrips {
40 dict begin
/ColorSpaceFamily exch def
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/y2 exch def
/x2 exch def
/y1 exch def
/x1 exch def
/rampdict exch def
/setinkoverprint where {pop /setinkoverprint{pop}def}if
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
x1 x2 eq
{
y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope y2 y1 sub x2 x1 sub div def
/theta slope 1 atan def
x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
x1 y1 translate
theta rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
rampdict begin
20 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
x1 y1 translate
theta rotate
/xStart 0 def
/xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
/ySpan yMax yMin sub def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
xStart 0 transform
xEnd 0 transform
3 -1 roll
sub dup mul
3 1 roll
sub dup mul
add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
mul
/numpix exch def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
ext0 {
0 getrampcolor
xMin xStart lt
{ xMin yMin xMin neg ySpan rectfill } if
} if
/xInc xEnd xStart sub numsteps div def
/x xStart def
0
numsteps
{
dup
subsampling { round cvi } if
getrampcolor
x yMin xInc ySpan rectfill
/x x xInc add def
rampIndxInc add
}
repeat
pop
ext1 {
xMax xEnd gt
{ xEnd yMin xMax xEnd sub ySpan rectfill } if
} if
grestore
grestore
end
end
end
} ifelse
} bind def
}def
/page_trailer
{
end
}def
/doc_trailer{
}def
systemdict /findcolorrendering known{
/findcolorrendering systemdict /findcolorrendering get def
}if
systemdict /setcolorrendering known{
/setcolorrendering systemdict /setcolorrendering get def
}if
/test_cmyk_color_plate
{
gsave
setcmykcolor currentgray 1 ne
grestore
}def
/inRip_spot_has_ink
{
dup Adobe_AGM_Core/AGMCORE_name xddf
convert_spot_to_process not
}def
/map255_to_range
{
1 index sub
3 -1 roll 255 div mul add
}def
/set_csa_crd
{
/sep_colorspace_dict null AGMCORE_gput
begin
CSA map_csa setcolorspace_opt
set_crd
end
}
def
/setsepcolor
{
/sep_colorspace_dict AGMCORE_gget begin
dup /sep_tint exch AGMCORE_gput
TintProc
end
} def
/setdevicencolor
{
/devicen_colorspace_dict AGMCORE_gget begin
Names length copy
Names length 1 sub -1 0
{
/devicen_tints AGMCORE_gget 3 1 roll xpt
} for
TintProc
end
} def
/sep_colorspace_proc
{
Adobe_AGM_Core/AGMCORE_tmp xddf
/sep_colorspace_dict AGMCORE_gget begin
currentdict/Components known{
Components aload pop
TintMethod/Lab eq{
2 {AGMCORE_tmp mul NComponents 1 roll} repeat
LMax sub AGMCORE_tmp mul LMax add NComponents 1 roll
}{
TintMethod/Subtractive eq{
NComponents{
AGMCORE_tmp mul NComponents 1 roll
}repeat
}{
NComponents{
1 sub AGMCORE_tmp mul 1 add NComponents 1 roll
} repeat
}ifelse
}ifelse
}{
ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get
aload pop
}ifelse
end
} def
/sep_colorspace_gray_proc
{
Adobe_AGM_Core/AGMCORE_tmp xddf
/sep_colorspace_dict AGMCORE_gget begin
GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get
end
} def
/sep_proc_name
{
dup 0 get
dup /DeviceRGB eq exch /DeviceCMYK eq or level2 not and has_color not and{
pop [/DeviceGray]
/sep_colorspace_gray_proc
}{
/sep_colorspace_proc
}ifelse
} def
/setsepcolorspace
{
current_spot_alias{
dup begin
Name map_alias{
exch pop
}if
end
}if
dup /sep_colorspace_dict exch AGMCORE_gput
begin
/MappedCSA CSA map_csa def
Adobe_AGM_Core/AGMCORE_sep_special Name dup () eq exch (All) eq or ddf
AGMCORE_avoid_L2_sep_space{
[/Indexed MappedCSA sep_proc_name 255 exch
{ 255 div } /exec cvx 3 -1 roll [ 4 1 roll load /exec cvx ] cvx
] setcolorspace_opt
/TintProc {
255 mul round cvi setcolor
}bdf
}{
MappedCSA 0 get /DeviceCMYK eq
currentdict/Components known and
AGMCORE_sep_special not and{
/TintProc [
Components aload pop Name findcmykcustomcolor
/exch cvx /setcustomcolor cvx
] cvx bdf
}{
AGMCORE_host_sep Name (All) eq and{
/TintProc {
1 exch sub setseparationgray
}bdf
}{
AGMCORE_in_rip_sep MappedCSA 0 get /DeviceCMYK eq and
AGMCORE_host_sep or
Name () eq and{
/TintProc [
MappedCSA sep_proc_name exch 0 get /DeviceCMYK eq{
cvx /setcmykcolor cvx
}{
cvx /setgray cvx
}ifelse
] cvx bdf
}{
AGMCORE_producing_seps MappedCSA 0 get dup /DeviceCMYK eq exch /DeviceGray eq or and AGMCORE_sep_special not and{
/TintProc [
/dup cvx
MappedCSA sep_proc_name cvx exch
0 get /DeviceGray eq{
1 /exch cvx /sub cvx 0 0 0 4 -1 /roll cvx
}if
/Name cvx /findcmykcustomcolor cvx /exch cvx
AGMCORE_host_sep{
AGMCORE_is_cmyk_sep
/Name cvx
/AGMCORE_IsSeparationAProcessColor load /exec cvx
/not cvx /and cvx
}{
Name inRip_spot_has_ink not
}ifelse
[
/pop cvx 1
] cvx /if cvx
/setcustomcolor cvx
] cvx bdf
}{
/TintProc /setcolor ldf
[/Separation Name MappedCSA sep_proc_name load ] setcolorspace_opt
}ifelse
}ifelse
}ifelse
}ifelse
}ifelse
set_crd
setsepcolor
end
} def
/additive_blend
{
3 dict begin
/numarrays xdf
/numcolors xdf
0 1 numcolors 1 sub
{
/c1 xdf
1
0 1 numarrays 1 sub
{
1 exch add /index cvx
c1 /get cvx /mul cvx
}for
numarrays 1 add 1 /roll cvx
}for
numarrays [/pop cvx] cvx /repeat cvx
end
}def
/subtractive_blend
{
3 dict begin
/numarrays xdf
/numcolors xdf
0 1 numcolors 1 sub
{
/c1 xdf
1 1
0 1 numarrays 1 sub
{
1 3 3 -1 roll add /index cvx
c1 /get cvx /sub cvx /mul cvx
}for
/sub cvx
numarrays 1 add 1 /roll cvx
}for
numarrays [/pop cvx] cvx /repeat cvx
end
}def
/exec_tint_transform
{
/TintProc [
/TintTransform cvx /setcolor cvx
] cvx bdf
MappedCSA setcolorspace_opt
} bdf
/devn_makecustomcolor
{
2 dict begin
/names_index xdf
/Names xdf
1 1 1 1 Names names_index get findcmykcustomcolor
/devicen_tints AGMCORE_gget names_index get setcustomcolor
Names length {pop} repeat
end
} bdf
/setdevicencolorspace
{
dup /AliasedColorants known {false}{true}ifelse
current_spot_alias and {
6 dict begin
/names_index 0 def
dup /names_len exch /Names get length def
/new_names names_len array def
/new_LookupTables names_len array def
/alias_cnt 0 def
dup /Names get
{
dup map_alias {
exch pop
dup /ColorLookup known {
dup begin
new_LookupTables names_index ColorLookup put
end
}{
dup /Components known {
dup begin
new_LookupTables names_index Components put
end
}{
dup begin
new_LookupTables names_index [null null null null] put
end
} ifelse
} ifelse
new_names names_index 3 -1 roll /Name get put
/alias_cnt alias_cnt 1 add def
}{
/name xdf
new_names names_index name put
dup /LookupTables known {
dup begin
new_LookupTables names_index LookupTables names_index get put
end
}{
dup begin
new_LookupTables names_index [null null null null] put
end
} ifelse
} ifelse
/names_index names_index 1 add def
} forall
alias_cnt 0 gt {
/AliasedColorants true def
0 1 names_len 1 sub {
/names_index xdf
new_LookupTables names_index get 0 get null eq {
dup /Names get names_index get /name xdf
name (Cyan) eq name (Magenta) eq name (Yellow) eq name (Black) eq
or or or not {
/AliasedColorants false def
exit
} if
} if
} for
AliasedColorants {
dup begin
/Names new_names def
/AliasedColorants true def
/LookupTables new_LookupTables def
currentdict /TTTablesIdx known not {
/TTTablesIdx -1 def
} if
currentdict /NComponents known not {
/NComponents TintMethod /Subtractive eq {4}{3}ifelse def
} if
end
} if
}if
end
} if
dup /devicen_colorspace_dict exch AGMCORE_gput
begin
/MappedCSA CSA map_csa def
currentdict /AliasedColorants known {
AliasedColorants
}{
false
} ifelse
/TintTransform load type /nulltype eq or {
/TintTransform [
0 1 Names length 1 sub
{
/TTTablesIdx TTTablesIdx 1 add def
dup LookupTables exch get dup 0 get null eq
{
1 index
Names exch get
dup (Cyan) eq
{
pop exch
LookupTables length exch sub
/index cvx
0 0 0
}
{
dup (Magenta) eq
{
pop exch
LookupTables length exch sub
/index cvx
0 /exch cvx 0 0
}
{
(Yellow) eq
{
exch
LookupTables length exch sub
/index cvx
0 0 3 -1 /roll cvx 0
}
{
exch
LookupTables length exch sub
/index cvx
0 0 0 4 -1 /roll cvx
} ifelse
} ifelse
} ifelse
5 -1 /roll cvx /astore cvx
}
{
dup length 1 sub
LookupTables length 4 -1 roll sub 1 add
/index cvx /mul cvx /round cvx /cvi cvx /get cvx
} ifelse
Names length TTTablesIdx add 1 add 1 /roll cvx
} for
Names length [/pop cvx] cvx /repeat cvx
NComponents Names length
TintMethod /Subtractive eq
{
subtractive_blend
}
{
additive_blend
} ifelse
] cvx bdf
} if
AGMCORE_host_sep {
Names convert_to_process {
exec_tint_transform
}
{
currentdict /AliasedColorants known {
AliasedColorants not
}{
false
} ifelse
5 dict begin
/AvoidAliasedColorants xdf
/painted? false def
/names_index 0 def
/names_len Names length def
Names {
AvoidAliasedColorants {
/currentspotalias current_spot_alias def
false set_spot_alias
} if
AGMCORE_is_cmyk_sep {
dup (Cyan) eq AGMCORE_cyan_plate and exch
dup (Magenta) eq AGMCORE_magenta_plate and exch
dup (Yellow) eq AGMCORE_yellow_plate and exch
(Black) eq AGMCORE_black_plate and or or or {
/devicen_colorspace_dict AGMCORE_gget /TintProc [
Names names_index /devn_makecustomcolor cvx
] cvx ddf
/painted? true def
} if
painted? {exit} if
}{
0 0 0 0 5 -1 roll findcmykcustomcolor 1 setcustomcolor currentgray 0 eq {
/devicen_colorspace_dict AGMCORE_gget /TintProc [
Names names_index /devn_makecustomcolor cvx
] cvx ddf
/painted? true def
exit
} if
} ifelse
AvoidAliasedColorants {
currentspotalias set_spot_alias
} if
/names_index names_index 1 add def
} forall
painted? {
/devicen_colorspace_dict AGMCORE_gget /names_index names_index put
}{
/devicen_colorspace_dict AGMCORE_gget /TintProc [
names_len [/pop cvx] cvx /repeat cvx 1 /setseparationgray cvx
0 0 0 0 () /findcmykcustomcolor cvx 0 /setcustomcolor cvx
] cvx ddf
} ifelse
end
} ifelse
}
{
AGMCORE_in_rip_sep {
Names convert_to_process not
}{
level3
} ifelse
{
[/DeviceN Names MappedCSA /TintTransform load] setcolorspace_opt
/TintProc level3 not AGMCORE_in_rip_sep and {
[
Names /length cvx [/pop cvx] cvx /repeat cvx
] cvx bdf
}{
/setcolor ldf
} ifelse
}{
exec_tint_transform
} ifelse
} ifelse
set_crd
/AliasedColorants false def
end
} def
/setindexedcolorspace
{
dup /indexed_colorspace_dict exch AGMCORE_gput
begin
currentdict /CSD known {
CSD get_csd /Names known {
CSD get_csd begin
currentdict devncs
AGMCORE_host_sep{
4 dict begin
/devnCompCnt Names length def
/NewLookup HiVal 1 add string def
0 1 HiVal {
/tableIndex xdf
Lookup dup type /stringtype eq {
devnCompCnt tableIndex map_index
}{
exec
} ifelse
setdevicencolor
currentgray
tableIndex exch
HiVal mul cvi
NewLookup 3 1 roll put
} for
[/Indexed currentcolorspace HiVal NewLookup] setcolorspace_opt
end
}{
level3
{
[/Indexed [/DeviceN Names MappedCSA /TintTransform load] HiVal Lookup] setcolorspace_opt
}{
[/Indexed MappedCSA HiVal
[
Lookup dup type /stringtype eq
{/exch cvx CSD get_csd /Names get length dup /mul cvx exch /getinterval cvx {255 div} /forall cvx}
{/exec cvx}ifelse
/TintTransform load /exec cvx
]cvx
]setcolorspace_opt
}ifelse
} ifelse
end
}{
} ifelse
set_crd
}
{
/MappedCSA CSA map_csa def
AGMCORE_host_sep level2 not and{
0 0 0 0 setcmykcolor
}{
[/Indexed MappedCSA
level2 not has_color not and{
dup 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or{
pop [/DeviceGray]
}if
HiVal GrayLookup
}{
HiVal
currentdict/RangeArray known{
{
/indexed_colorspace_dict AGMCORE_gget begin
Lookup exch
dup HiVal gt{
pop HiVal
}if
NComponents mul NComponents getinterval {} forall
NComponents 1 sub -1 0{
RangeArray exch 2 mul 2 getinterval aload pop map255_to_range
NComponents 1 roll
}for
end
} bind
}{
Lookup
}ifelse
}ifelse
] setcolorspace_opt
set_crd
}ifelse
}ifelse
end
}def
/setindexedcolor
{
AGMCORE_host_sep {
/indexed_colorspace_dict AGMCORE_gget dup /CSD known {
begin
CSD get_csd begin
map_indexed_devn
devn
end
end
}{
AGMCORE_gget/Lookup get 4 3 -1 roll map_index
pop setcmykcolor
} ifelse
}{
level3 not AGMCORE_in_rip_sep and /indexed_colorspace_dict AGMCORE_gget /CSD known and {
/indexed_colorspace_dict AGMCORE_gget /CSD get get_csd begin
map_indexed_devn
devn
end
}
{
setcolor
} ifelse
}ifelse
} def
/ignoreimagedata
{
currentoverprint not{
gsave
dup clonedict begin
1 setgray
/Decode [0 1] def
/DataSource <FF> def
/MultipleDataSources false def
/BitsPerComponent 8 def
currentdict end
systemdict /image get exec
grestore
}if
consumeimagedata
}def
/add_csa
{
Adobe_AGM_Core begin
/AGMCORE_CSA_cache xput
end
}def
/get_csa_by_name
{
dup type dup /nametype eq exch /stringtype eq or{
Adobe_AGM_Core begin
1 dict begin
/name xdf
AGMCORE_CSA_cache
{
0 get name eq {
exit
}{
pop
} ifelse
}forall
end
end
}{
pop
} ifelse
}def
/map_csa
{
dup type /nametype eq{
Adobe_AGM_Core/AGMCORE_CSA_cache get exch get
}if
}def
/add_csd
{
Adobe_AGM_Core begin
/AGMCORE_CSD_cache xput
end
}def
/get_csd
{
dup type /nametype eq{
Adobe_AGM_Core/AGMCORE_CSD_cache get exch get
}if
}def
/pattern_buf_init
{
/count get 0 0 put
} def
/pattern_buf_next
{
dup /count get dup 0 get
dup 3 1 roll
1 add 0 xpt
get
} def
/cachepattern_compress
{
5 dict begin
currentfile exch 0 exch /SubFileDecode filter /ReadFilter exch def
/patarray 20 dict def
/string_size 16000 def
/readbuffer string_size string def
currentglobal true setglobal
patarray 1 array dup 0 1 put /count xpt
setglobal
/LZWFilter
{
exch
dup length 0 eq {
pop
}{
patarray dup length 1 sub 3 -1 roll put
} ifelse
{string_size}{0}ifelse string
} /LZWEncode filter def
{
ReadFilter readbuffer readstring
exch LZWFilter exch writestring
not {exit} if
} loop
LZWFilter closefile
patarray
end
}def
/cachepattern
{
2 dict begin
currentfile exch 0 exch /SubFileDecode filter /ReadFilter exch def
/patarray 20 dict def
currentglobal true setglobal
patarray 1 array dup 0 1 put /count xpt
setglobal
{
ReadFilter 16000 string readstring exch
patarray dup length 1 sub 3 -1 roll put
not {exit} if
} loop
patarray dup dup length 1 sub () put
end
}def
/add_pattern
{
Adobe_AGM_Core begin
/AGMCORE_pattern_cache xput
end
}def
/get_pattern
{
dup type /nametype eq{
Adobe_AGM_Core/AGMCORE_pattern_cache get exch get
dup wrap_paintproc
}if
}def
/wrap_paintproc
{
statusdict /currentfilenameextend known{
begin
/OldPaintProc /PaintProc load def
/PaintProc
{
mark exch
dup /OldPaintProc get stopped
{closefile restore end} if
cleartomark
} def
end
} {pop} ifelse
} def
/make_pattern
{
dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform
exch 3 index /XStep get 1 index exch 2 copy div cvi mul sub sub
exch 3 index /YStep get 1 index exch 2 copy div cvi mul sub sub
matrix translate exch matrix concatmatrix
1 index begin
BBox 0 get XStep div cvi XStep mul /xshift exch neg def
BBox 1 get YStep div cvi YStep mul /yshift exch neg def
BBox 0 get xshift add
BBox 1 get yshift add
BBox 2 get xshift add
BBox 3 get yshift add
4 array astore
/BBox exch def
[ xshift yshift /translate load null /exec load ] dup
3 /PaintProc load put cvx /PaintProc exch def
end
gsave 0 setgray
makepattern
grestore
}def
/set_pattern
{
dup /PatternType get 1 eq{
dup /PaintType get 1 eq{
currentoverprint sop [/DeviceGray] setcolorspace 0 setgray
}if
}if
setpattern
}def
/setcolorspace_opt
{
dup currentcolorspace eq{
pop
}{
setcolorspace
}ifelse
}def
/updatecolorrendering
{
currentcolorrendering/Intent known{
currentcolorrendering/Intent get
}{
null
}ifelse
Intent ne{
false
Intent
AGMCORE_CRD_cache {
exch pop
begin
dup Intent eq{
currentdict setcolorrendering_opt
end
exch pop true exch
exit
}if
end
} forall
pop
not{
systemdict /findcolorrendering known{
Intent findcolorrendering pop
/ColorRendering findresource
dup length dict copy
setcolorrendering_opt
}if
}if
}if
} def
/add_crd
{
AGMCORE_CRD_cache 3 1 roll put
}def
/set_crd
{
AGMCORE_host_sep not level2 and{
currentdict/CRD known{
AGMCORE_CRD_cache CRD get dup null ne{
setcolorrendering_opt
}{
pop
}ifelse
}{
currentdict/Intent known{
updatecolorrendering
}if
}ifelse
currentcolorspace dup type /arraytype eq
{0 get}if
/DeviceRGB eq
{
currentdict/UCR known
{/UCR}{/AGMCORE_currentucr}ifelse
load setundercolorremoval
currentdict/BG known
{/BG}{/AGMCORE_currentbg}ifelse
load setblackgeneration
}if
}if
}def
/setcolorrendering_opt
{
dup currentcolorrendering eq{
pop
}{
begin
/Intent Intent def
currentdict
end
setcolorrendering
}ifelse
}def
/cpaint_gcomp
{
convert_to_process Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf
Adobe_AGM_Core/AGMCORE_ConvertToProcess get not
{
(%end_cpaint_gcomp) flushinput
}if
}def
/cpaint_gsep
{
Adobe_AGM_Core/AGMCORE_ConvertToProcess get
{
(%end_cpaint_gsep) flushinput
}if
}def
/cpaint_gend
{
newpath
}def
/path_rez
{
dup 0 ne{
AGMCORE_deviceDPI exch div
dup 1 lt{
pop 1
}if
setflat
}{
pop
}ifelse
}def
/set_spot_alias_ary
{
/AGMCORE_SpotAliasAry where{
pop pop
}{
Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf
true set_spot_alias
}ifelse
}def
/set_spot_alias
{
/AGMCORE_SpotAliasAry where{
/AGMCORE_current_spot_alias 3 -1 roll put
}{
pop
}ifelse
}def
/current_spot_alias
{
/AGMCORE_SpotAliasAry where{
/AGMCORE_current_spot_alias get
}{
false
}ifelse
}def
/map_alias
{
/AGMCORE_SpotAliasAry where{
begin
/AGMCORE_name xdf
false
AGMCORE_SpotAliasAry{
dup/Name get AGMCORE_name eq{
save exch
/Adobe_AGM_Core currentdict def
/CSD get get_csd
exch restore
exch pop true
exit
}{
pop
}ifelse
}forall
end
}{
pop false
}ifelse
}bdf
/spot_alias
{
true set_spot_alias
/AGMCORE_&setcustomcolor AGMCORE_key_known not {
Adobe_AGM_Core/AGMCORE_&setcustomcolor /setcustomcolor load put
} if
/customcolor_tint 1 AGMCORE_gput
Adobe_AGM_Core begin
/setcustomcolor
{
dup /customcolor_tint exch AGMCORE_gput
current_spot_alias{
1 index 4 get map_alias{
mark 3 1 roll
setsepcolorspace
counttomark 0 ne{
setsepcolor
}if
pop
pop
}{
AGMCORE_&setcustomcolor
}ifelse
}{
AGMCORE_&setcustomcolor
}ifelse
}bdf
end
}def
/begin_feature
{
Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put
count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put
{Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if
}def
/end_feature
{
2 dict begin
/spd /setpagedevice load def
/setpagedevice { get_gstate spd set_gstate } def
stopped{$error/newerror false put}if
end
count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse
countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse
{Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if
}def
/set_negative
{
Adobe_AGM_Core begin
/AGMCORE_inverting exch def
level2{
currentpagedevice/NegativePrint known{
currentpagedevice/NegativePrint get Adobe_AGM_Core/AGMCORE_inverting get ne{
true begin_feature true{
bdict /NegativePrint Adobe_AGM_Core/AGMCORE_inverting get edict setpagedevice
}end_feature
}if
/AGMCORE_inverting false def
}if
}if
AGMCORE_inverting{
[{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer
gsave newpath clippath 1 /setseparationgray where{pop setseparationgray}{setgray}ifelse
/AGMIRS_&fill where {pop AGMIRS_&fill}{fill} ifelse grestore
}if
end
}def
/lw_save_restore_override {
/md where {
pop
md begin
initializepage
/initializepage{}def
/pmSVsetup{} def
/endp{}def
/pse{}def
/psb{}def
/orig_showpage where
{pop}
{/orig_showpage /showpage load def}
ifelse
/showpage {orig_showpage gR} def
end
}if
}def
/pscript_showpage_override {
/NTPSOct95 where
{
begin
showpage
save
/showpage /restore load def
/restore {exch pop}def
end
}if
}def
/driver_media_override
{
/md where {
pop
md /initializepage known {
md /initializepage {} put
} if
md /rC known {
md /rC {4{pop}repeat} put
} if
}if
/mysetup where {
/mysetup [1 0 0 1 0 0] put
}if
Adobe_AGM_Core /AGMCORE_Default_CTM matrix currentmatrix put
level2
{Adobe_AGM_Core /AGMCORE_Default_PageSize currentpagedevice/PageSize get put}if
}def
/driver_check_media_override
{
/PrepsDict where
{pop}
{
Adobe_AGM_Core /AGMCORE_Default_CTM get matrix currentmatrix ne
Adobe_AGM_Core /AGMCORE_Default_PageSize get type /arraytype eq
{
Adobe_AGM_Core /AGMCORE_Default_PageSize get 0 get currentpagedevice/PageSize get 0 get eq and
Adobe_AGM_Core /AGMCORE_Default_PageSize get 1 get currentpagedevice/PageSize get 1 get eq and
}if
{
Adobe_AGM_Core /AGMCORE_Default_CTM get setmatrix
}if
}ifelse
}def
AGMCORE_err_strings begin
/AGMCORE_bad_environ (Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. ) def
/AGMCORE_color_space_onhost_seps (This job contains colors that will not separate with on-host methods. ) def
/AGMCORE_invalid_color_space (This job contains an invalid color space. ) def
end
end
systemdict /setpacking known
{
setpacking
} if
%%EndResource
%%BeginResource: procset Adobe_CoolType_Core 2.23 0
%%Copyright: Copyright 1997-2003 Adobe Systems Incorporated. All Rights Reserved.
%%Version: 2.23 0
10 dict begin
/Adobe_CoolType_Passthru currentdict def
/Adobe_CoolType_Core_Defined userdict /Adobe_CoolType_Core known def
Adobe_CoolType_Core_Defined
{ /Adobe_CoolType_Core userdict /Adobe_CoolType_Core get def }
if
userdict /Adobe_CoolType_Core 60 dict dup begin put
/Adobe_CoolType_Version 2.23 def
/Level2?
systemdict /languagelevel known dup
{ pop systemdict /languagelevel get 2 ge }
if def
Level2? not
{
/currentglobal false def
/setglobal /pop load def
/gcheck { pop false } bind def
/currentpacking false def
/setpacking /pop load def
/SharedFontDirectory 0 dict def
}
if
currentpacking
true setpacking
/@_SaveStackLevels
{
Adobe_CoolType_Data
begin
@opStackCountByLevel @opStackLevel
2 copy known not
{ 2 copy 3 dict dup /args 7 index 5 add array put put get }
{
get dup /args get dup length 3 index lt
{
dup length 5 add array exch
1 index exch 0 exch putinterval
1 index exch /args exch put
}
{ pop }
ifelse
}
ifelse
begin
count 2 sub 1 index lt
{ pop count 1 sub }
if
dup /argCount exch def
dup 0 gt
{
exch 1 index 2 add 1 roll
args exch 0 exch getinterval
astore pop
}
{ pop }
ifelse
count 1 sub /restCount exch def
end
/@opStackLevel @opStackLevel 1 add def
countdictstack 1 sub
@dictStackCountByLevel exch @dictStackLevel exch put
/@dictStackLevel @dictStackLevel 1 add def
end
} bind def
/@_RestoreStackLevels
{
Adobe_CoolType_Data
begin
/@opStackLevel @opStackLevel 1 sub def
@opStackCountByLevel @opStackLevel get
begin
count restCount sub dup 0 gt
{ { pop } repeat }
{ pop }
ifelse
args 0 argCount getinterval {} forall
end
/@dictStackLevel @dictStackLevel 1 sub def
@dictStackCountByLevel @dictStackLevel get
end
countdictstack exch sub dup 0 gt
{ { end } repeat }
{ pop }
ifelse
} bind def
/@_PopStackLevels
{
Adobe_CoolType_Data
begin
/@opStackLevel @opStackLevel 1 sub def
/@dictStackLevel @dictStackLevel 1 sub def
end
} bind def
/@Raise
{
exch cvx exch errordict exch get exec
stop
} bind def
/@ReRaise
{
cvx $error /errorname get errordict exch get exec
stop
} bind def
/@Stopped
{
0 @#Stopped
} bind def
/@#Stopped
{
@_SaveStackLevels
stopped
{ @_RestoreStackLevels true }
{ @_PopStackLevels false }
ifelse
} bind def
/@Arg
{
Adobe_CoolType_Data
begin
@opStackCountByLevel @opStackLevel 1 sub get /args get exch get
end
} bind def
currentglobal true setglobal
/CTHasResourceForAllBug
Level2?
{
1 dict dup begin
mark
{
(*) { pop stop } 128 string /Category
resourceforall
}
stopped
cleartomark
currentdict eq dup
{ end }
if
not
}
{ false }
ifelse
def
/CTHasResourceStatusBug
Level2?
{
mark
{ /steveamerige /Category resourcestatus }
stopped
{ cleartomark true }
{ cleartomark currentglobal not }
ifelse
}
{ false }
ifelse
def
setglobal
/CTResourceStatus
{
mark 3 1 roll
/Category findresource
begin
({ResourceStatus} stopped) 0 () /SubFileDecode filter cvx exec
{ cleartomark false }
{ { 3 2 roll pop true } { cleartomark false } ifelse }
ifelse
end
} bind def
/CTWorkAroundBugs
{
Level2?
{
/cid_PreLoad /ProcSet resourcestatus
{
pop pop
currentglobal
mark
{
(*)
{
dup /CMap CTHasResourceStatusBug
{ CTResourceStatus }
{ resourcestatus }
ifelse
{
pop dup 0 eq exch 1 eq or
{
dup /CMap findresource gcheck setglobal
/CMap undefineresource
}
{
pop CTHasResourceForAllBug
{ exit }
{ stop }
ifelse
}
ifelse
}
{ pop }
ifelse
}
128 string /CMap resourceforall
}
stopped
{ cleartomark }
stopped pop
setglobal
}
if
}
if
} bind def
/doc_setup
{
Adobe_CoolType_Core
begin
CTWorkAroundBugs
/mov /moveto load def
/nfnt /newencodedfont load def
/mfnt /makefont load def
/sfnt /setfont load def
/ufnt /undefinefont load def
/chp /charpath load def
/awsh /awidthshow load def
/wsh /widthshow load def
/ash /ashow load def
/sh /show load def
end
userdict /Adobe_CoolType_Data 10 dict dup
begin
/AddWidths? false def
/CC 0 def
/charcode 2 string def
/@opStackCountByLevel 32 dict def
/@opStackLevel 0 def
/@dictStackCountByLevel 32 dict def
/@dictStackLevel 0 def
/InVMFontsByCMap 10 dict def
/InVMDeepCopiedFonts 10 dict def
end put
} bind def
/doc_trailer
{
currentdict Adobe_CoolType_Core eq
{ end }
if
} bind def
/page_setup
{
Adobe_CoolType_Core begin
} bind def
/page_trailer
{
end
} bind def
/unload
{
systemdict /languagelevel known
{
systemdict/languagelevel get 2 ge
{
userdict/Adobe_CoolType_Core 2 copy known
{ undef }
{ pop pop }
ifelse
}
if
}
if
} bind def
/ndf
{
1 index where
{ pop pop pop }
{ dup xcheck { bind } if def }
ifelse
} def
/findfont systemdict
begin
userdict
begin
/globaldict where { /globaldict get begin } if
dup where pop exch get
/globaldict where { pop end } if
end
end
Adobe_CoolType_Core_Defined
{ /systemfindfont exch def }
{
/findfont 1 index def
/systemfindfont exch def
}
ifelse
/undefinefont
{ pop } ndf
/copyfont
{
currentglobal 3 1 roll
1 index gcheck setglobal
dup null eq { 0 } { dup length } ifelse
2 index length add 1 add dict
begin
exch
{
1 index /FID eq
{ pop pop }
{ def }
ifelse
}
forall
dup null eq
{ pop }
{ { def } forall }
ifelse
currentdict
end
exch setglobal
} bind def
/copyarray
{
currentglobal exch
dup gcheck setglobal
dup length array copy
exch setglobal
} bind def
/newencodedfont
{
currentglobal
{
SharedFontDirectory 3 index known
{ SharedFontDirectory 3 index get /FontReferenced known }
{ false }
ifelse
}
{
FontDirectory 3 index known
{ FontDirectory 3 index get /FontReferenced known }
{
SharedFontDirectory 3 index known
{ SharedFontDirectory 3 index get /FontReferenced known }
{ false }
ifelse
}
ifelse
}
ifelse
dup
{
3 index findfont /FontReferenced get
2 index dup type /nametype eq
{findfont}
if ne
{ pop false }
if
}
if
{
pop
1 index findfont
/Encoding get exch
0 1 255
{ 2 copy get 3 index 3 1 roll put }
for
pop pop pop
}
{
dup type /nametype eq
{ findfont }
if
dup dup maxlength 2 add dict
begin
exch
{
1 index /FID ne
{def}
{pop pop}
ifelse
}
forall
/FontReferenced exch def
/Encoding exch dup length array copy def
/FontName 1 index dup type /stringtype eq { cvn } if def dup
currentdict
end
definefont def
}
ifelse
} bind def
/SetSubstituteStrategy
{
$SubstituteFont
begin
dup type /dicttype ne
{ 0 dict }
if
currentdict /$Strategies known
{
exch $Strategies exch
2 copy known
{
get
2 copy maxlength exch maxlength add dict
begin
{ def } forall
{ def } forall
currentdict
dup /$Init known
{ dup /$Init get exec }
if
end
/$Strategy exch def
}
{ pop pop pop }
ifelse
}
{ pop pop }
ifelse
end
} bind def
/scff
{
$SubstituteFont
begin
dup type /stringtype eq
{ dup length exch }
{ null }
ifelse
/$sname exch def
/$slen exch def
/$inVMIndex
$sname null eq
{
1 index $str cvs
dup length $slen sub $slen getinterval cvn
}
{ $sname }
ifelse def
end
{ findfont }
@Stopped
{
dup length 8 add string exch
1 index 0 (BadFont:) putinterval
1 index exch 8 exch dup length string cvs putinterval cvn
{ findfont }
@Stopped
{ pop /Courier findfont }
if
}
if
$SubstituteFont
begin
/$sname null def
/$slen 0 def
/$inVMIndex null def
end
} bind def
/isWidthsOnlyFont
{
dup /WidthsOnly known
{ pop pop true }
{
dup /FDepVector known
{ /FDepVector get { isWidthsOnlyFont dup { exit } if } forall }
{
dup /FDArray known
{ /FDArray get { isWidthsOnlyFont dup { exit } if } forall }
{ pop }
ifelse
}
ifelse
}
ifelse
} bind def
/?str1 256 string def
/?set
{
$SubstituteFont
begin
/$substituteFound false def
/$fontname 4 index def
/$doSmartSub false def
end
3 index
currentglobal false setglobal exch
/CompatibleFonts /ProcSet resourcestatus
{
pop pop
/CompatibleFonts /ProcSet findresource
begin
dup /CompatibleFont currentexception
1 index /CompatibleFont true setexception
1 index /Font resourcestatus
{
pop pop
3 2 roll setglobal
end
exch
dup findfont
/CompatibleFonts /ProcSet findresource
begin
3 1 roll exch /CompatibleFont exch setexception
end
}
{
3 2 roll setglobal
1 index exch /CompatibleFont exch setexception
end
findfont
$SubstituteFont /$substituteFound true put
}
ifelse
}
{ exch setglobal findfont }
ifelse
$SubstituteFont
begin
$substituteFound
{
false
(%%[Using embedded font ) print
5 index ?str1 cvs print
( to avoid the font substitution problem noted earlier.]%%\n) print
}
{
dup /FontName known
{
dup /FontName get $fontname eq
1 index /DistillerFauxFont known not and
/currentdistillerparams where
{ pop false 2 index isWidthsOnlyFont not and }
if
}
{ false }
ifelse
}
ifelse
exch pop
/$doSmartSub true def
end
{
exch pop exch pop exch
2 dict dup /Found 3 index put
exch findfont exch
}
{
exch exec
exch dup findfont
dup /FontType get 3 eq
{
exch ?str1 cvs
dup length 1 sub
-1 0
{
exch dup 2 index get 42 eq
{
exch 0 exch getinterval cvn 4 1 roll 3 2 roll pop
exit
}
{exch pop} ifelse
}for
}
{
exch pop
} ifelse
2 dict dup /Downloaded 6 5 roll put
}
ifelse
dup /FontName 4 index put copyfont definefont pop
} bind def
/?str2 256 string def
/?add
{
1 index type /integertype eq
{ exch true 4 2 }
{ false 3 1 }
ifelse
roll
1 index findfont
dup /Widths known
{
Adobe_CoolType_Data /AddWidths? true put
gsave dup 1000 scalefont setfont
}
if
/Downloaded known
{
exec
exch
{
exch ?str2 cvs exch
findfont /Downloaded get 1 dict begin /Downloaded 1 index def ?str1 cvs length
?str1 1 index 1 add 3 index putinterval
exch length 1 add 1 index add
?str1 2 index (*) putinterval
?str1 0 2 index getinterval cvn findfont
?str1 3 index (+) putinterval
2 dict dup /FontName ?str1 0 6 index getinterval cvn put
dup /Downloaded Downloaded put end copyfont
dup /FontName get exch definefont pop pop pop
}
{
pop
}
ifelse
}
{
pop
exch
{
findfont
dup /Found get
dup length exch ?str1 cvs pop
?str1 1 index (+) putinterval
?str1 1 index 1 add 4 index ?str2 cvs putinterval
?str1 exch 0 exch 5 4 roll ?str2 cvs length 1 add add getinterval cvn
1 dict exch 1 index exch /FontName exch put copyfont
dup /FontName get exch definefont pop
}
{
pop
}
ifelse
}
ifelse
Adobe_CoolType_Data /AddWidths? get
{ grestore Adobe_CoolType_Data /AddWidths? false put }
if
} bind def
/?sh
{
currentfont /Downloaded known { exch } if pop
} bind def
/?chp
{
currentfont /Downloaded known { pop } { false chp } ifelse
} bind def
/?mv
{
currentfont /Downloaded known { moveto pop pop } { pop pop moveto } ifelse
} bind def
setpacking
userdict /$SubstituteFont 25 dict put
1 dict
begin
/SubstituteFont
dup $error exch 2 copy known
{ get }
{ pop pop { pop /Courier } bind }
ifelse def
/currentdistillerparams where dup
{
pop pop
currentdistillerparams /CannotEmbedFontPolicy 2 copy known
{ get /Error eq }
{ pop pop false }
ifelse
}
if not
{
countdictstack array dictstack 0 get
begin
userdict
begin
$SubstituteFont
begin
/$str 128 string def
/$fontpat 128 string def
/$slen 0 def
/$sname null def
/$match false def
/$fontname null def
/$substituteFound false def
/$inVMIndex null def
/$doSmartSub true def
/$depth 0 def
/$fontname null def
/$italicangle 26.5 def
/$dstack null def
/$Strategies 10 dict dup
begin
/$Type3Underprint
{
currentglobal exch false setglobal
11 dict
begin
/UseFont exch
$WMode 0 ne
{
dup length dict copy
dup /WMode $WMode put
/UseFont exch definefont
}
if def
/FontName $fontname dup type /stringtype eq { cvn } if def
/FontType 3 def
/FontMatrix [ .001 0 0 .001 0 0 ] def
/Encoding 256 array dup 0 1 255 { /.notdef put dup } for pop def
/FontBBox [ 0 0 0 0 ] def
/CCInfo 7 dict dup
begin
/cc null def
/x 0 def
/y 0 def
end def
/BuildChar
{
exch
begin
CCInfo
begin
1 string dup 0 3 index put exch pop
/cc exch def
UseFont 1000 scalefont setfont
cc stringwidth /y exch def /x exch def
x y setcharwidth
$SubstituteFont /$Strategy get /$Underprint get exec
0 0 moveto cc show
x y moveto
end
end
} bind def
currentdict
end
exch setglobal
} bind def
/$GetaTint
2 dict dup
begin
/$BuildFont
{
dup /WMode known
{ dup /WMode get }
{ 0 }
ifelse
/$WMode exch def
$fontname exch
dup /FontName known
{
dup /FontName get
dup type /stringtype eq { cvn } if
}
{ /unnamedfont }
ifelse
exch
Adobe_CoolType_Data /InVMDeepCopiedFonts get
1 index /FontName get known
{
pop
Adobe_CoolType_Data /InVMDeepCopiedFonts get
1 index get
null copyfont
}
{ $deepcopyfont }
ifelse
exch 1 index exch /FontBasedOn exch put
dup /FontName $fontname dup type /stringtype eq { cvn } if put
definefont
Adobe_CoolType_Data /InVMDeepCopiedFonts get
begin
dup /FontBasedOn get 1 index def
end
} bind def
/$Underprint
{
gsave
x abs y abs gt
{ /y 1000 def }
{ /x -1000 def 500 120 translate }
ifelse
Level2?
{
[ /Separation (All) /DeviceCMYK { 0 0 0 1 pop } ]
setcolorspace
}
{ 0 setgray }
ifelse
10 setlinewidth
x .8 mul
[ 7 3 ]
{
y mul 8 div 120 sub x 10 div exch moveto
0 y 4 div neg rlineto
dup 0 rlineto
0 y 4 div rlineto
closepath
gsave
Level2?
{ .2 setcolor }
{ .8 setgray }
ifelse
fill grestore
stroke
}
forall
pop
grestore
} bind def
end def
/$Oblique
1 dict dup
begin
/$BuildFont
{
currentglobal exch dup gcheck setglobal
null copyfont
begin
/FontBasedOn
currentdict /FontName known
{
FontName
dup type /stringtype eq { cvn } if
}
{ /unnamedfont }
ifelse
def
/FontName $fontname dup type /stringtype eq { cvn } if def
/currentdistillerparams where
{ pop }
{
/FontInfo currentdict /FontInfo known
{ FontInfo null copyfont }
{ 2 dict }
ifelse
dup
begin
/ItalicAngle $italicangle def
/FontMatrix FontMatrix
[ 1 0 ItalicAngle dup sin exch cos div 1 0 0 ]
matrix concatmatrix readonly
end
4 2 roll def
def
}
ifelse
FontName currentdict
end
definefont
exch setglobal
} bind def
end def
/$None
1 dict dup
begin
/$BuildFont {} bind def
end def
end def
/$Oblique SetSubstituteStrategy
/$findfontByEnum
{
dup type /stringtype eq { cvn } if
dup /$fontname exch def
$sname null eq
{ $str cvs dup length $slen sub $slen getinterval }
{ pop $sname }
ifelse
$fontpat dup 0 (fonts/*) putinterval exch 7 exch putinterval
/$match false def
$SubstituteFont /$dstack countdictstack array dictstack put
mark
{
$fontpat 0 $slen 7 add getinterval
{ /$match exch def exit }
$str filenameforall
}
stopped
{
cleardictstack
currentdict
true
$SubstituteFont /$dstack get
{
exch
{
1 index eq
{ pop false }
{ true }
ifelse
}
{ begin false }
ifelse
}
forall
pop
}
if
cleartomark
/$slen 0 def
$match false ne
{ $match (fonts/) anchorsearch pop pop cvn }
{ /Courier }
ifelse
} bind def
/$ROS 1 dict dup
begin
/Adobe 4 dict dup
begin
/Japan1 [ /Ryumin-Light /HeiseiMin-W3
/GothicBBB-Medium /HeiseiKakuGo-W5
/HeiseiMaruGo-W4 /Jun101-Light ] def
/Korea1 [ /HYSMyeongJo-Medium /HYGoThic-Medium ] def
/GB1 [ /STSong-Light /STHeiti-Regular ] def
/CNS1 [ /MKai-Medium /MHei-Medium ] def
end def
end def
/$cmapname null def
/$deepcopyfont
{
dup /FontType get 0 eq
{
1 dict dup /FontName /copied put copyfont
begin
/FDepVector FDepVector copyarray
0 1 2 index length 1 sub
{
2 copy get $deepcopyfont
dup /FontName /copied put
/copied exch definefont
3 copy put pop pop
}
for
def
currentdict
end
}
{ $Strategies /$Type3Underprint get exec }
ifelse
} bind def
/$buildfontname
{
dup /CIDFont findresource /CIDSystemInfo get
begin
Registry length Ordering length Supplement 8 string cvs
3 copy length 2 add add add string
dup 5 1 roll dup 0 Registry putinterval
dup 4 index (-) putinterval
dup 4 index 1 add Ordering putinterval
4 2 roll add 1 add 2 copy (-) putinterval
end
1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch
anchorsearch
{ pop pop 3 2 roll putinterval cvn /$cmapname exch def }
{ pop pop pop pop pop }
ifelse
length
$str 1 index (-) putinterval 1 add
$str 1 index $cmapname $fontpat cvs putinterval
$cmapname length add
$str exch 0 exch getinterval cvn
} bind def
/$findfontByROS
{
/$fontname exch def
$ROS Registry 2 copy known
{
get Ordering 2 copy known
{ get }
{ pop pop [] }
ifelse
}
{ pop pop [] }
ifelse
false exch
{
dup /CIDFont resourcestatus
{
pop pop
save
1 index /CIDFont findresource
dup /WidthsOnly known
{ dup /WidthsOnly get }
{ false }
ifelse
exch pop
exch restore
{ pop }
{ exch pop true exit }
ifelse
}
{ pop }
ifelse
}
forall
{ $str cvs $buildfontname }
{
false (*)
{
save exch
dup /CIDFont findresource
dup /WidthsOnly known
{ dup /WidthsOnly get not }
{ true }
ifelse
exch /CIDSystemInfo get
dup /Registry get Registry eq
exch /Ordering get Ordering eq and and
{ exch restore exch pop true exit }
{ pop restore }
ifelse
}
$str /CIDFont resourceforall
{ $buildfontname }
{ $fontname $findfontByEnum }
ifelse
}
ifelse
} bind def
end
end
currentdict /$error known currentdict /languagelevel known and dup
{ pop $error /SubstituteFont known }
if
dup
{ $error }
{ Adobe_CoolType_Core }
ifelse
begin
{
/SubstituteFont
/CMap /Category resourcestatus
{
pop pop
{
$SubstituteFont
begin
/$substituteFound true def
dup length $slen gt
$sname null ne or
$slen 0 gt and
{
$sname null eq
{ dup $str cvs dup length $slen sub $slen getinterval cvn }
{ $sname }
ifelse
Adobe_CoolType_Data /InVMFontsByCMap get
1 index 2 copy known
{
get
false exch
{
pop
currentglobal
{
GlobalFontDirectory 1 index known
{ exch pop true exit }
{ pop }
ifelse
}
{
FontDirectory 1 index known
{ exch pop true exit }
{
GlobalFontDirectory 1 index known
{ exch pop true exit }
{ pop }
ifelse
}
ifelse
}
ifelse
}
forall
}
{ pop pop false }
ifelse
{
exch pop exch pop
}
{
dup /CMap resourcestatus
{
pop pop
dup /$cmapname exch def
/CMap findresource /CIDSystemInfo get { def } forall
$findfontByROS
}
{
128 string cvs
dup (-) search
{
3 1 roll search
{
3 1 roll pop
{ dup cvi }
stopped
{ pop pop pop pop pop $findfontByEnum }
{
4 2 roll pop pop
exch length
exch
2 index length
2 index
sub
exch 1 sub -1 0
{
$str cvs dup length
4 index
0
4 index
4 3 roll add
getinterval
exch 1 index exch 3 index exch
putinterval
dup /CMap resourcestatus
{
pop pop
4 1 roll pop pop pop
dup /$cmapname exch def
/CMap findresource /CIDSystemInfo get { def } forall
$findfontByROS
true exit
}
{ pop }
ifelse
}
for
dup type /booleantype eq
{ pop }
{ pop pop pop $findfontByEnum }
ifelse
}
ifelse
}
{ pop pop pop $findfontByEnum }
ifelse
}
{ pop pop $findfontByEnum }
ifelse
}
ifelse
}
ifelse
}
{ //SubstituteFont exec }
ifelse
/$slen 0 def
end
}
}
{
{
$SubstituteFont
begin
/$substituteFound true def
dup length $slen gt
$sname null ne or
$slen 0 gt and
{ $findfontByEnum }
{ //SubstituteFont exec }
ifelse
end
}
}
ifelse
bind readonly def
Adobe_CoolType_Core /scfindfont /systemfindfont load put
}
{
/scfindfont
{
$SubstituteFont
begin
dup systemfindfont
dup /FontName known
{ dup /FontName get dup 3 index ne }
{ /noname true }
ifelse
dup
{
/$origfontnamefound 2 index def
/$origfontname 4 index def /$substituteFound true def
}
if
exch pop
{
$slen 0 gt
$sname null ne
3 index length $slen gt or and
{
pop dup $findfontByEnum findfont
dup maxlength 1 add dict
begin
{ 1 index /FID eq { pop pop } { def } ifelse }
forall
currentdict
end
definefont
dup /FontName known { dup /FontName get } { null } ifelse
$origfontnamefound ne
{
$origfontname $str cvs print
( substitution revised, using ) print
dup /FontName known
{ dup /FontName get } { (unspecified font) }
ifelse
$str cvs print (.\n) print
}
if
}
{ exch pop }
ifelse
}
{ exch pop }
ifelse
end
} bind def
}
ifelse
end
end
Adobe_CoolType_Core_Defined not
{
Adobe_CoolType_Core /findfont
{
$SubstituteFont
begin
$depth 0 eq
{
/$fontname 1 index dup type /stringtype ne { $str cvs } if def
/$substituteFound false def
}
if
/$depth $depth 1 add def
end
scfindfont
$SubstituteFont
begin
/$depth $depth 1 sub def
$substituteFound $depth 0 eq and
{
$inVMIndex null ne
{ dup $inVMIndex $AddInVMFont }
if
$doSmartSub
{
currentdict /$Strategy known
{ $Strategy /$BuildFont get exec }
if
}
if
}
if
end
} bind put
}
if
}
if
end
/$AddInVMFont
{
exch /FontName 2 copy known
{
get
1 dict dup begin exch 1 index gcheck def end exch
Adobe_CoolType_Data /InVMFontsByCMap get exch
$DictAdd
}
{ pop pop pop }
ifelse
} bind def
/$DictAdd
{
2 copy known not
{ 2 copy 4 index length dict put }
if
Level2? not
{
2 copy get dup maxlength exch length 4 index length add lt
2 copy get dup length 4 index length add exch maxlength 1 index lt
{
2 mul dict
begin
2 copy get { forall } def
2 copy currentdict put
end
}
{ pop }
ifelse
}
if
get
begin
{ def }
forall
end
} bind def
end
end
%%EndResource
%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.19 0
%%Copyright: Copyright 1987-2003 Adobe Systems Incorporated.
%%Version: 1.19 0
systemdict /languagelevel known dup
{ currentglobal false setglobal }
{ false }
ifelse
exch
userdict /Adobe_CoolType_Utility 2 copy known
{ 2 copy get dup maxlength 25 add dict copy }
{ 25 dict }
ifelse put
Adobe_CoolType_Utility
begin
/ct_Level2? exch def
/ct_Clone? 1183615869 internaldict dup
/CCRun known not
exch /eCCRun known not
ct_Level2? and or def
ct_Level2?
{ globaldict begin currentglobal true setglobal }
if
/ct_AddStdCIDMap
ct_Level2?
{ {
((Hex) 57 StartData
0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0
7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60
d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8
cc36 74f4 1144 b13b 77) 0 () /SubFileDecode filter cvx exec
} }
{ {
<BAB431EA07F209EB8C4348311481D9D3F76E3D15246555577D87BC510ED54E
118C39697FA9F6DB58128E60EB8A12FA24D7CDD2FA94D221FA9EC8DA3E5E6A1C
4ACECC8C2D39C54E7C946031DD156C3A6B4A09AD29E1867A> eexec
} }
ifelse bind def
userdict /cid_extensions known
dup { cid_extensions /cid_UpdateDB known and } if
{
cid_extensions
begin
/cid_GetCIDSystemInfo
{
1 index type /stringtype eq
{ exch cvn exch }
if
cid_extensions
begin
dup load 2 index known
{
2 copy
cid_GetStatusInfo
dup null ne
{
1 index load
3 index get
dup null eq
{ pop pop cid_UpdateDB }
{
exch
1 index /Created get eq
{ exch pop exch pop }
{ pop cid_UpdateDB }
ifelse
}
ifelse
}
{ pop cid_UpdateDB }
ifelse
}
{ cid_UpdateDB }
ifelse
end
} bind def
end
}
if
ct_Level2?
{ end setglobal }
if
/ct_UseNativeCapability? systemdict /composefont known def
/ct_MakeOCF 35 dict def
/ct_Vars 25 dict def
/ct_GlyphDirProcs 6 dict def
/ct_BuildCharDict 15 dict dup
begin
/charcode 2 string def
/dst_string 1500 string def
/nullstring () def
/usewidths? true def
end def
ct_Level2? { setglobal } { pop } ifelse
ct_GlyphDirProcs
begin
/GetGlyphDirectory
{
systemdict /languagelevel known
{ pop /CIDFont findresource /GlyphDirectory get }
{
1 index /CIDFont findresource /GlyphDirectory
get dup type /dicttype eq
{
dup dup maxlength exch length sub 2 index lt
{
dup length 2 index add dict copy 2 index
/CIDFont findresource/GlyphDirectory 2 index put
}
if
}
if
exch pop exch pop
}
ifelse
+
} def
/+
{
systemdict /languagelevel known
{
currentglobal false setglobal
3 dict begin
/vm exch def
}
{ 1 dict begin }
ifelse
/$ exch def
systemdict /languagelevel known
{
vm setglobal
/gvm currentglobal def
$ gcheck setglobal
}
if
? { $ begin } if
} def
/? { $ type /dicttype eq } def
/| {
userdict /Adobe_CoolType_Data known
{
Adobe_CoolType_Data /AddWidths? known
{
currentdict Adobe_CoolType_Data
begin
begin
AddWidths?
{
Adobe_CoolType_Data /CC 3 index put
? { def } { $ 3 1 roll put } ifelse
CC charcode exch 1 index 0 2 index 256 idiv put
1 index exch 1 exch 256 mod put
stringwidth 2 array astore
currentfont /Widths get exch CC exch put
}
{ ? { def } { $ 3 1 roll put } ifelse }
ifelse
end
end
}
{ ? { def } { $ 3 1 roll put } ifelse } ifelse
}
{ ? { def } { $ 3 1 roll put } ifelse }
ifelse
} def
/!
{
? { end } if
systemdict /languagelevel known
{ gvm setglobal }
if
end
} def
/: { string currentfile exch readstring pop } executeonly def
end
ct_MakeOCF
begin
/ct_cHexEncoding
[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
/ct_CID_STR_SIZE 8000 def
/ct_mkocfStr100 100 string def
/ct_defaultFontMtx [.001 0 0 .001 0 0] def
/ct_1000Mtx [1000 0 0 1000 0 0] def
/ct_raise {exch cvx exch errordict exch get exec stop} bind def
/ct_reraise
{ cvx $error /errorname get (Error: ) print dup ( ) cvs print
errordict exch get exec stop
} bind def
/ct_cvnsi
{
1 index add 1 sub 1 exch 0 4 1 roll
{
2 index exch get
exch 8 bitshift
add
}
for
exch pop
} bind def
/ct_GetInterval
{
Adobe_CoolType_Utility /ct_BuildCharDict get
begin
/dst_index 0 def
dup dst_string length gt
{ dup string /dst_string exch def }
if
1 index ct_CID_STR_SIZE idiv
/arrayIndex exch def
2 index arrayIndex get
2 index
arrayIndex ct_CID_STR_SIZE mul
sub
{
dup 3 index add 2 index length le
{
2 index getinterval
dst_string dst_index 2 index putinterval
length dst_index add /dst_index exch def
exit
}
{
1 index length 1 index sub
dup 4 1 roll
getinterval
dst_string dst_index 2 index putinterval
pop dup dst_index add /dst_index exch def
sub
/arrayIndex arrayIndex 1 add def
2 index dup length arrayIndex gt
{ arrayIndex get }
{
pop
exit
}
ifelse
0
}
ifelse
}
loop
pop pop pop
dst_string 0 dst_index getinterval
end
} bind def
ct_Level2?
{
/ct_resourcestatus
currentglobal mark true setglobal
{ /unknowninstancename /Category resourcestatus }
stopped
{ cleartomark setglobal true }
{ cleartomark currentglobal not exch setglobal }
ifelse
{
{
mark 3 1 roll /Category findresource
begin
ct_Vars /vm currentglobal put
({ResourceStatus} stopped) 0 () /SubFileDecode filter cvx exec
{ cleartomark false }
{ { 3 2 roll pop true } { cleartomark false } ifelse }
ifelse
ct_Vars /vm get setglobal
end
}
}
{ { resourcestatus } }
ifelse bind def
/CIDFont /Category ct_resourcestatus
{ pop pop }
{
currentglobal true setglobal
/Generic /Category findresource
dup length dict copy
dup /InstanceType /dicttype put
/CIDFont exch /Category defineresource pop
setglobal
}
ifelse
ct_UseNativeCapability?
{
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/CMapName /Identity-H def
/CMapVersion 1.000 def
/CMapType 1 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
1 begincidrange
<0000> <FFFF> 0
endcidrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
}
if
}
{
/ct_Category 2 dict begin
/CIDFont 10 dict def
/ProcSet 2 dict def
currentdict
end
def
/defineresource
{
ct_Category 1 index 2 copy known
{
get
dup dup maxlength exch length eq
{
dup length 10 add dict copy
ct_Category 2 index 2 index put
}
if
3 index 3 index put
pop exch pop
}
{ pop pop /defineresource /undefined ct_raise }
ifelse
} bind def
/findresource
{
ct_Category 1 index 2 copy known
{
get
2 index 2 copy known
{ get 3 1 roll pop pop}
{ pop pop /findresource /undefinedresource ct_raise }
ifelse
}
{ pop pop /findresource /undefined ct_raise }
ifelse
} bind def
/resourcestatus
{
ct_Category 1 index 2 copy known
{
get
2 index known
exch pop exch pop
{
0 -1 true
}
{
false
}
ifelse
}
{ pop pop /findresource /undefined ct_raise }
ifelse
} bind def
/ct_resourcestatus /resourcestatus load def
}
ifelse
/ct_CIDInit 2 dict
begin
/ct_cidfont_stream_init
{
{
dup (Binary) eq
{
pop
null
currentfile
ct_Level2?
{
{ cid_BYTE_COUNT () /SubFileDecode filter }
stopped
{ pop pop pop }
if
}
if
/readstring load
exit
}
if
dup (Hex) eq
{
pop
currentfile
ct_Level2?
{
{ null exch /ASCIIHexDecode filter /readstring }
stopped
{ pop exch pop (>) exch /readhexstring }
if
}
{ (>) exch /readhexstring }
ifelse
load
exit
}
if
/StartData /typecheck ct_raise
}
loop
cid_BYTE_COUNT ct_CID_STR_SIZE le
{
2 copy cid_BYTE_COUNT string exch exec
pop
1 array dup
3 -1 roll
0 exch put
}
{
cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi
dup array exch 2 sub 0 exch 1 exch
{
2 copy
5 index
ct_CID_STR_SIZE
string
6 index exec
pop
put
pop
}
for
2 index
cid_BYTE_COUNT ct_CID_STR_SIZE mod string
3 index exec
pop
1 index exch
1 index length 1 sub
exch put
}
ifelse
cid_CIDFONT exch /GlyphData exch put
2 index null eq
{
pop pop pop
}
{
pop /readstring load
1 string exch
{
3 copy exec
pop
dup length 0 eq
{
pop pop pop pop pop
true exit
}
if
4 index
eq
{
pop pop pop pop
false exit
}
if
}
loop
pop
}
ifelse
} bind def
/StartData
{
mark
{
currentdict
dup /FDArray get 0 get /FontMatrix get
0 get 0.001 eq
{
dup /CDevProc known not
{
/CDevProc 1183615869 internaldict /stdCDevProc 2 copy known
{ get }
{
pop pop
{ pop pop pop pop pop 0 -1000 7 index 2 div 880 }
}
ifelse
def
}
if
}
{
/CDevProc
{
pop pop pop pop pop
0
1 cid_temp /cid_CIDFONT get
/FDArray get 0 get
/FontMatrix get 0 get div
7 index 2 div
1 index 0.88 mul
} def
}
ifelse
/cid_temp 15 dict def
cid_temp
begin
/cid_CIDFONT exch def
3 copy pop
dup /cid_BYTE_COUNT exch def 0 gt
{
ct_cidfont_stream_init
FDArray
{
/Private get
dup /SubrMapOffset known
{
begin
/Subrs SubrCount array def
Subrs
SubrMapOffset
SubrCount
SDBytes
ct_Level2?
{
currentdict dup /SubrMapOffset undef
dup /SubrCount undef
/SDBytes undef
}
if
end
/cid_SD_BYTES exch def
/cid_SUBR_COUNT exch def
/cid_SUBR_MAP_OFFSET exch def
/cid_SUBRS exch def
cid_SUBR_COUNT 0 gt
{
GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval
0 cid_SD_BYTES ct_cvnsi
0 1 cid_SUBR_COUNT 1 sub
{
exch 1 index
1 add
cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add
GlyphData exch cid_SD_BYTES ct_GetInterval
0 cid_SD_BYTES ct_cvnsi
cid_SUBRS 4 2 roll
GlyphData exch
4 index
1 index
sub
ct_GetInterval
dup length string copy put
}
for
pop
}
if
}
{ pop }
ifelse
}
forall
}
if
cleartomark pop pop
end
CIDFontName currentdict /CIDFont defineresource pop
end end
}
stopped
{ cleartomark /StartData ct_reraise }
if
} bind def
currentdict
end def
/ct_saveCIDInit
{
/CIDInit /ProcSet ct_resourcestatus
{ true }
{ /CIDInitC /ProcSet ct_resourcestatus }
ifelse
{
pop pop
/CIDInit /ProcSet findresource
ct_UseNativeCapability?
{ pop null }
{ /CIDInit ct_CIDInit /ProcSet defineresource pop }
ifelse
}
{ /CIDInit ct_CIDInit /ProcSet defineresource pop null }
ifelse
ct_Vars exch /ct_oldCIDInit exch put
} bind def
/ct_restoreCIDInit
{
ct_Vars /ct_oldCIDInit get dup null ne
{ /CIDInit exch /ProcSet defineresource pop }
{ pop }
ifelse
} bind def
/ct_BuildCharSetUp
{
1 index
begin
CIDFont
begin
Adobe_CoolType_Utility /ct_BuildCharDict get
begin
/ct_dfCharCode exch def
/ct_dfDict exch def
CIDFirstByte ct_dfCharCode add
dup CIDCount ge
{ pop 0 }
if
/cid exch def
{
GlyphDirectory cid 2 copy known
{ get }
{ pop pop nullstring }
ifelse
dup length FDBytes sub 0 gt
{
dup
FDBytes 0 ne
{ 0 FDBytes ct_cvnsi }
{ pop 0 }
ifelse
/fdIndex exch def
dup length FDBytes sub FDBytes exch getinterval
/charstring exch def
exit
}
{
pop
cid 0 eq
{ /charstring nullstring def exit }
if
/cid 0 def
}
ifelse
}
loop
} def
/ct_SetCacheDevice
{
0 0 moveto
dup stringwidth
3 -1 roll
true charpath
pathbbox
0 -1000
7 index 2 div 880
setcachedevice2
0 0 moveto
} def
/ct_CloneSetCacheProc
{
1 eq
{
stringwidth
pop -2 div -880
0 -1000 setcharwidth
moveto
}
{
usewidths?
{
currentfont /Widths get cid
2 copy known
{ get exch pop aload pop }
{ pop pop stringwidth }
ifelse
}
{ stringwidth }
ifelse
setcharwidth
0 0 moveto
}
ifelse
} def
/ct_Type3ShowCharString
{
ct_FDDict fdIndex 2 copy known
{ get }
{
currentglobal 3 1 roll
1 index gcheck setglobal
ct_Type1FontTemplate dup maxlength dict copy
begin
FDArray fdIndex get
dup /FontMatrix 2 copy known
{ get }
{ pop pop ct_defaultFontMtx }
ifelse
/FontMatrix exch dup length array copy def
/Private get
/Private exch def
/Widths rootfont /Widths get def
/CharStrings 1 dict dup /.notdef
<d841272cf18f54fc13> dup length string copy put def
currentdict
end
/ct_Type1Font exch definefont
dup 5 1 roll put
setglobal
}
ifelse
dup /CharStrings get 1 index /Encoding get
ct_dfCharCode get charstring put
rootfont /WMode 2 copy known
{ get }
{ pop pop 0 }
ifelse
exch
1000 scalefont setfont
ct_str1 0 ct_dfCharCode put
ct_str1 exch ct_dfSetCacheProc
ct_SyntheticBold
{
currentpoint
ct_str1 show
newpath
moveto
ct_str1 true charpath
ct_StrokeWidth setlinewidth
stroke
}
{ ct_str1 show }
ifelse
} def
/ct_Type4ShowCharString
{
ct_dfDict ct_dfCharCode charstring
FDArray fdIndex get
dup /FontMatrix get dup ct_defaultFontMtx ct_matrixeq not
{ ct_1000Mtx matrix concatmatrix concat }
{ pop }
ifelse
/Private get
Adobe_CoolType_Utility /ct_Level2? get not
{
ct_dfDict /Private
3 -1 roll
{ put }
1183615869 internaldict /superexec get exec
}
if
1183615869 internaldict
Adobe_CoolType_Utility /ct_Level2? get
{ 1 index }
{ 3 index /Private get mark 6 1 roll }
ifelse
dup /RunInt known
{ /RunInt get }
{ pop /CCRun }
ifelse
get exec
Adobe_CoolType_Utility /ct_Level2? get not
{ cleartomark }
if
} bind def
/ct_BuildCharIncremental
{
{
Adobe_CoolType_Utility /ct_MakeOCF get begin
ct_BuildCharSetUp
ct_ShowCharString
}
stopped
{ stop }
if
end
end
end
end
} bind def
/BaseFontNameStr (BF00) def
/ct_Type1FontTemplate 14 dict
begin
/FontType 1 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/FontBBox [-250 -250 1250 1250] def
/Encoding ct_cHexEncoding def
/PaintType 0 def
currentdict
end def
/BaseFontTemplate 11 dict
begin
/FontMatrix [0.001 0 0 0.001 0 0] def
/FontBBox [-250 -250 1250 1250] def
/Encoding ct_cHexEncoding def
/BuildChar /ct_BuildCharIncremental load def
ct_Clone?
{
/FontType 3 def
/ct_ShowCharString /ct_Type3ShowCharString load def
/ct_dfSetCacheProc /ct_CloneSetCacheProc load def
/ct_SyntheticBold false def
/ct_StrokeWidth 1 def
}
{
/FontType 4 def
/Private 1 dict dup /lenIV 4 put def
/CharStrings 1 dict dup /.notdef <d841272cf18f54fc13> put def
/PaintType 0 def
/ct_ShowCharString /ct_Type4ShowCharString load def
}
ifelse
/ct_str1 1 string def
currentdict
end def
/BaseFontDictSize BaseFontTemplate length 5 add def
/ct_matrixeq
{
true 0 1 5
{
dup 4 index exch get exch 3 index exch get eq and
dup not
{ exit }
if
}
for
exch pop exch pop
} bind def
/ct_makeocf
{
15 dict
begin
exch /WMode exch def
exch /FontName exch def
/FontType 0 def
/FMapType 2 def
dup /FontMatrix known
{ dup /FontMatrix get /FontMatrix exch def }
{ /FontMatrix matrix def }
ifelse
/bfCount 1 index /CIDCount get 256 idiv 1 add
dup 256 gt { pop 256} if def
/Encoding
256 array 0 1 bfCount 1 sub { 2 copy dup put pop } for
bfCount 1 255 { 2 copy bfCount put pop } for
def
/FDepVector bfCount dup 256 lt { 1 add } if array def
BaseFontTemplate BaseFontDictSize dict copy
begin
/CIDFont exch def
CIDFont /FontBBox known
{ CIDFont /FontBBox get /FontBBox exch def }
if
CIDFont /CDevProc known
{ CIDFont /CDevProc get /CDevProc exch def }
if
currentdict
end
BaseFontNameStr 3 (0) putinterval
0 1 bfCount dup 256 eq { 1 sub } if
{
FDepVector exch
2 index BaseFontDictSize dict copy
begin
dup /CIDFirstByte exch 256 mul def
FontType 3 eq
{ /ct_FDDict 2 dict def }
if
currentdict
end
1 index 16
BaseFontNameStr 2 2 getinterval cvrs pop
BaseFontNameStr exch definefont
put
}
for
ct_Clone?
{ /Widths 1 index /CIDFont get /GlyphDirectory get length dict def }
if
FontName
currentdict
end
definefont
ct_Clone?
{
gsave
dup 1000 scalefont setfont
ct_BuildCharDict
begin
/usewidths? false def
currentfont /Widths get
begin
exch /CIDFont get /GlyphDirectory get
{
pop
dup charcode exch 1 index 0 2 index 256 idiv put
1 index exch 1 exch 256 mod put
stringwidth 2 array astore def
}
forall
end
/usewidths? true def
end
grestore
}
{ exch pop }
ifelse
} bind def
/ct_ComposeFont
{
ct_UseNativeCapability?
{
2 index /CMap ct_resourcestatus
{ pop pop exch pop }
{
/CIDInit /ProcSet findresource
begin
12 dict
begin
begincmap
/CMapName 3 index def
/CMapVersion 1.000 def
/CMapType 1 def
exch /WMode exch def
/CIDSystemInfo 3 dict dup
begin
/Registry (Adobe) def
/Ordering
CMapName ct_mkocfStr100 cvs
(Adobe-) search
{
pop pop
(-) search
{
dup length string copy
exch pop exch pop
}
{ pop (Identity)}
ifelse
}
{ pop (Identity) }
ifelse
def
/Supplement 0 def
end def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
1 begincidrange
<0000> <FFFF> 0
endcidrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
}
ifelse
composefont
}
{
3 2 roll pop
0 get /CIDFont findresource
ct_makeocf
}
ifelse
} bind def
/ct_MakeIdentity
{
ct_UseNativeCapability?
{
1 index /CMap ct_resourcestatus
{ pop pop }
{
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CMapName 2 index def
/CMapVersion 1.000 def
/CMapType 1 def
/CIDSystemInfo 3 dict dup
begin
/Registry (Adobe) def
/Ordering
CMapName ct_mkocfStr100 cvs
(Adobe-) search
{
pop pop
(-) search
{ dup length string copy exch pop exch pop }
{ pop (Identity) }
ifelse
}
{ pop (Identity) }
ifelse
def
/Supplement 0 def
end def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
1 begincidrange
<0000> <FFFF> 0
endcidrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
}
ifelse
composefont
}
{
exch pop
0 get /CIDFont findresource
ct_makeocf
}
ifelse
} bind def
currentdict readonly pop
end
end
%%EndResource
%%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0
%%Copyright: Copyright 1987-2003 Adobe Systems Incorporated.
%%Version: 1.0 0
userdict /ct_T42Dict 15 dict put
ct_T42Dict begin
/Is2015?
{
version
cvi
2015
ge
} bind def
/AllocGlyphStorage
{
Is2015?
{
pop
}
{
{string} forall
} ifelse
} bind def
/Type42DictBegin
{
25 dict begin
/FontName exch def
/CharStrings 256 dict
begin
/.notdef 0 def
currentdict
end def
/Encoding exch def
/PaintType 0 def
/FontType 42 def
/FontMatrix [1 0 0 1 0 0] def
4 array astore cvx /FontBBox exch def
/sfnts
} bind def
/Type42DictEnd
{
currentdict dup /FontName get exch definefont end
ct_T42Dict exch
dup /FontName get exch put
} bind def
/RD {string currentfile exch readstring pop} executeonly def
/PrepFor2015
{
Is2015?
{
/GlyphDirectory
16
dict def
sfnts 0 get
dup
2 index
(glyx)
putinterval
2 index
(locx)
putinterval
pop
pop
}
{
pop
pop
} ifelse
} bind def
/AddT42Char
{
Is2015?
{
/GlyphDirectory get
begin
def
end
pop
pop
}
{
/sfnts get
4 index
get
3 index
2 index
putinterval
pop
pop
pop
pop
} ifelse
} bind def
end
%%EndResource
Adobe_CoolType_Core begin /$Oblique SetSubstituteStrategy end
%%BeginResource: procset Adobe_AGM_Image 1.0 0
%%Version: 1.0 0
%%Copyright: Copyright (C) 2000-2003 Adobe Systems, Inc. All Rights Reserved.
systemdict /setpacking known
{
currentpacking
true setpacking
} if
userdict /Adobe_AGM_Image 75 dict dup begin put
/Adobe_AGM_Image_Id /Adobe_AGM_Image_1.0_0 def
/nd{
null def
}bind def
/AGMIMG_&image nd
/AGMIMG_&colorimage nd
/AGMIMG_&imagemask nd
/AGMIMG_mbuf () def
/AGMIMG_ybuf () def
/AGMIMG_kbuf () def
/AGMIMG_c 0 def
/AGMIMG_m 0 def
/AGMIMG_y 0 def
/AGMIMG_k 0 def
/AGMIMG_tmp nd
/AGMIMG_imagestring0 nd
/AGMIMG_imagestring1 nd
/AGMIMG_imagestring2 nd
/AGMIMG_imagestring3 nd
/AGMIMG_imagestring4 nd
/AGMIMG_imagestring5 nd
/AGMIMG_cnt nd
/AGMIMG_fsave nd
/AGMIMG_colorAry nd
/AGMIMG_override nd
/AGMIMG_name nd
/AGMIMG_maskSource nd
/invert_image_samples nd
/knockout_image_samples nd
/img nd
/sepimg nd
/devnimg nd
/idximg nd
/doc_setup
{
Adobe_AGM_Core begin
Adobe_AGM_Image begin
/AGMIMG_&image systemdict/image get def
/AGMIMG_&imagemask systemdict/imagemask get def
/colorimage where{
pop
/AGMIMG_&colorimage /colorimage ldf
}if
end
end
}def
/page_setup
{
Adobe_AGM_Image begin
/AGMIMG_ccimage_exists {/customcolorimage where
{
pop
/Adobe_AGM_OnHost_Seps where
{
pop false
}{
/Adobe_AGM_InRip_Seps where
{
pop false
}{
true
}ifelse
}ifelse
}{
false
}ifelse
}bdf
level2{
/invert_image_samples
{
Adobe_AGM_Image/AGMIMG_tmp Decode length ddf
/Decode [ Decode 1 get Decode 0 get] def
}def
/knockout_image_samples
{
Operator/imagemask ne{
/Decode [1 1] def
}if
}def
}{
/invert_image_samples
{
{1 exch sub} currenttransfer addprocs settransfer
}def
/knockout_image_samples
{
{ pop 1 } currenttransfer addprocs settransfer
}def
}ifelse
/img /imageormask ldf
/sepimg /sep_imageormask ldf
/devnimg /devn_imageormask ldf
/idximg /indexed_imageormask ldf
/_ctype 7 def
currentdict{
dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and{
bind
}if
def
}forall
}def
/page_trailer
{
end
}def
/doc_trailer
{
}def
/imageormask_sys
{
begin
save mark
level2{
currentdict
Operator /imagemask eq{
AGMIMG_&imagemask
}{
use_mask {
level3 {process_mask_L3 AGMIMG_&image}{masked_image_simulation}ifelse
}{
AGMIMG_&image
}ifelse
}ifelse
}{
Width Height
Operator /imagemask eq{
Decode 0 get 1 eq Decode 1 get 0 eq and
ImageMatrix /DataSource load
AGMIMG_&imagemask
}{
BitsPerComponent ImageMatrix /DataSource load
AGMIMG_&image
}ifelse
}ifelse
cleartomark restore
end
}def
/overprint_plate
{
currentoverprint {
0 get dup type /nametype eq {
dup /DeviceGray eq{
pop AGMCORE_black_plate not
}{
/DeviceCMYK eq{
AGMCORE_is_cmyk_sep not
}if
}ifelse
}{
false exch
{
AGMOHS_sepink eq or
} forall
not
} ifelse
}{
pop false
}ifelse
}def
/process_mask_L3
{
dup begin
/ImageType 1 def
end
4 dict begin
/DataDict exch def
/ImageType 3 def
/InterleaveType 3 def
/MaskDict 9 dict begin
/ImageType 1 def
/Width DataDict dup /MaskWidth known {/MaskWidth}{/Width} ifelse get def
/Height DataDict dup /MaskHeight known {/MaskHeight}{/Height} ifelse get def
/ImageMatrix [Width 0 0 Height neg 0 Height] def
/NComponents 1 def
/BitsPerComponent 1 def
/Decode [0 1] def
/DataSource AGMIMG_maskSource def
currentdict end def
currentdict end
}def
/use_mask
{
dup type /dicttype eq
{
dup /Mask known {
dup /Mask get {
level3
{true}
{
dup /MaskWidth known {dup /MaskWidth get 1 index /Width get eq}{true}ifelse exch
dup /MaskHeight known {dup /MaskHeight get 1 index /Height get eq}{true}ifelse
3 -1 roll and
} ifelse
}
{false} ifelse
}
{false} ifelse
}
{false} ifelse
}def
/make_line_source
{
begin
MultipleDataSources {
[
Decode length 2 div cvi {Width string} repeat
]
}{
Width Decode length 2 div mul cvi string
}ifelse
end
}def
/datasource_to_str
{
exch dup type
dup /filetype eq {
pop exch readstring
}{
/arraytype eq {
exec exch copy
}{
pop
}ifelse
}ifelse
pop
}def
/masked_image_simulation
{
3 dict begin
dup make_line_source /line_source xdf
/mask_source AGMIMG_maskSource /LZWDecode filter def
dup /Width get 8 div ceiling cvi string /mask_str xdf
begin
gsave
0 1 translate 1 -1 Height div scale
1 1 Height {
pop
gsave
MultipleDataSources {
0 1 DataSource length 1 sub {
dup DataSource exch get
exch line_source exch get
datasource_to_str
} for
}{
DataSource line_source datasource_to_str
} ifelse
<<
/PatternType 1
/PaintProc [
/pop cvx
<<
/ImageType 1
/Width Width
/Height 1
/ImageMatrix Width 1.0 sub 1 matrix scale 0.5 0 matrix translate matrix concatmatrix
/MultipleDataSources MultipleDataSources
/DataSource line_source
/BitsPerComponent BitsPerComponent
/Decode Decode
>>
/image cvx
] cvx
/BBox [0 0 Width 1]
/XStep Width
/YStep 1
/PaintType 1
/TilingType 2
>>
matrix makepattern set_pattern
<<
/ImageType 1
/Width Width
/Height 1
/ImageMatrix Width 1 matrix scale
/MultipleDataSources false
/DataSource mask_source mask_str readstring pop
/BitsPerComponent 1
/Decode [0 1]
>>
imagemask
grestore
0 1 translate
} for
grestore
end
end
}def
/imageormask
{
begin
SkipImageProc {
currentdict consumeimagedata
}
{
save mark
level2 AGMCORE_host_sep not and{
currentdict
Operator /imagemask eq DeviceN_PS2 not and {
imagemask
}{
AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get /DeviceGray eq and{
[/Separation /Black /DeviceGray {}] setcolorspace
/Decode [ Decode 1 get Decode 0 get ] def
}if
use_mask {
level3 {process_mask_L3 image}{masked_image_simulation}ifelse
}{
DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and
{
Names convert_to_process not {
2 dict begin
/imageDict xdf
/names_index 0 def
gsave
imageDict write_image_file {
Names {
dup (None) ne {
[/Separation 3 -1 roll /DeviceGray {1 exch sub}] setcolorspace
Operator imageDict read_image_file
names_index 0 eq {true setoverprint} if
/names_index names_index 1 add def
}{
pop
} ifelse
} forall
close_image_file
} if
grestore
end
}{
Operator /imagemask eq {
imagemask
}{
image
} ifelse
} ifelse
}{
Operator /imagemask eq {
imagemask
}{
image
} ifelse
} ifelse
}ifelse
}ifelse
}{
Width Height
Operator /imagemask eq{
Decode 0 get 1 eq Decode 1 get 0 eq and
ImageMatrix /DataSource load
/Adobe_AGM_OnHost_Seps where {
pop imagemask
}{
currentgray 1 ne{
currentdict imageormask_sys
}{
currentoverprint not{
1 AGMCORE_&setgray
currentdict imageormask_sys
}{
currentdict ignoreimagedata
}ifelse
}ifelse
}ifelse
}{
BitsPerComponent ImageMatrix
MultipleDataSources{
0 1 NComponents 1 sub{
DataSource exch get
}for
}{
/DataSource load
}ifelse
Operator /colorimage eq{
AGMCORE_host_sep{
MultipleDataSources level2 or NComponents 4 eq and{
AGMCORE_is_cmyk_sep{
MultipleDataSources{
/DataSource [
DataSource 0 get /exec cvx
DataSource 1 get /exec cvx
DataSource 2 get /exec cvx
DataSource 3 get /exec cvx
/AGMCORE_get_ink_data cvx
] cvx def
}{
/DataSource
Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul
/DataSource load
filter_cmyk 0 () /SubFileDecode filter def
}ifelse
/Decode [ Decode 0 get Decode 1 get ] def
/MultipleDataSources false def
/NComponents 1 def
/Operator /image def
invert_image_samples
1 AGMCORE_&setgray
currentdict imageormask_sys
}{
currentoverprint not Operator/imagemask eq and{
1 AGMCORE_&setgray
currentdict imageormask_sys
}{
currentdict ignoreimagedata
}ifelse
}ifelse
}{
MultipleDataSources NComponents AGMIMG_&colorimage
}ifelse
}{
true NComponents colorimage
}ifelse
}{
Operator /image eq{
AGMCORE_host_sep{
/DoImage true def
HostSepColorImage{
invert_image_samples
}{
AGMCORE_black_plate not Operator/imagemask ne and{
/DoImage false def
currentdict ignoreimagedata
}if
}ifelse
1 AGMCORE_&setgray
DoImage
{currentdict imageormask_sys} if
}{
use_mask {
level3 {process_mask_L3 image}{masked_image_simulation}ifelse
}{
image
}ifelse
}ifelse
}{
Operator/knockout eq{
pop pop pop pop pop
currentcolorspace overprint_plate not{
knockout_unitsq
}if
}if
}ifelse
}ifelse
}ifelse
}ifelse
cleartomark restore
}ifelse
end
}def
/sep_imageormask
{
/sep_colorspace_dict AGMCORE_gget begin
/MappedCSA CSA map_csa def
begin
SkipImageProc {
currentdict consumeimagedata
}
{
save mark
AGMCORE_avoid_L2_sep_space{
/Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def
}if
AGMIMG_ccimage_exists
MappedCSA 0 get /DeviceCMYK eq and
currentdict/Components known and
Name () ne and
Name (All) ne and
Operator /image eq and
AGMCORE_producing_seps not and
level2 not and
{
Width Height BitsPerComponent ImageMatrix
[
/DataSource load /exec cvx
{
0 1 2 index length 1 sub{
1 index exch
2 copy get 255 xor put
}for
} /exec cvx
] cvx bind
MappedCSA 0 get /DeviceCMYK eq{
Components aload pop
}{
0 0 0 Components aload pop 1 exch sub
}ifelse
Name findcmykcustomcolor
customcolorimage
}{
AGMCORE_producing_seps not{
level2{
AGMCORE_avoid_L2_sep_space not currentcolorspace 0 get /Separation ne and{
[/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt
/sep_tint AGMCORE_gget setcolor
}if
currentdict imageormask
}{
currentdict
Operator /imagemask eq{
imageormask
}{
sep_imageormask_lev1
}ifelse
}ifelse
}{
AGMCORE_host_sep{
Operator/knockout eq{
currentdict/ImageMatrix get concat
knockout_unitsq
}{
currentgray 1 ne{
AGMCORE_is_cmyk_sep Name (All) ne and{
level2{
[ /Separation Name [/DeviceGray]
{
sep_colorspace_proc AGMCORE_get_ink_data
1 exch sub
} bind
] AGMCORE_&setcolorspace
/sep_tint AGMCORE_gget AGMCORE_&setcolor
currentdict imageormask_sys
}{
currentdict
Operator /imagemask eq{
imageormask_sys
}{
sep_image_lev1_sep
}ifelse
}ifelse
}{
Operator/imagemask ne{
invert_image_samples
}if
currentdict imageormask_sys
}ifelse
}{
currentoverprint not Name (All) eq or Operator/imagemask eq and{
currentdict imageormask_sys
}{
currentoverprint not
{
gsave
knockout_unitsq
grestore
}if
currentdict consumeimagedata
}ifelse
}ifelse
}ifelse
}{
currentcolorspace 0 get /Separation ne{
[/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt
/sep_tint AGMCORE_gget setcolor
}if
currentoverprint
MappedCSA 0 get /DeviceCMYK eq and
Name inRip_spot_has_ink not and
Name (All) ne and {
imageormask_l2_overprint
}{
currentdict imageormask
}ifelse
}ifelse
}ifelse
}ifelse
cleartomark restore
}ifelse
end
end
}def
/decode_image_sample
{
4 1 roll exch dup 5 1 roll
sub 2 4 -1 roll exp 1 sub div mul add
} bdf
/colorSpaceElemCnt
{
currentcolorspace 0 get dup /DeviceCMYK eq {
pop 4
}
{
/DeviceRGB eq {
pop 3
}{
1
} ifelse
} ifelse
} bdf
/devn_sep_datasource
{
1 dict begin
/dataSource xdf
[
0 1 dataSource length 1 sub {
dup currentdict /dataSource get /exch cvx /get cvx /exec cvx
/exch cvx names_index /ne cvx [ /pop cvx ] cvx /if cvx
} for
] cvx bind
end
} bdf
/devn_alt_datasource
{
11 dict begin
/srcDataStrs xdf
/dstDataStr xdf
/convProc xdf
/origcolorSpaceElemCnt xdf
/origMultipleDataSources xdf
/origBitsPerComponent xdf
/origDecode xdf
/origDataSource xdf
/dsCnt origMultipleDataSources {origDataSource length}{1}ifelse def
/samplesNeedDecoding
0 0 1 origDecode length 1 sub {
origDecode exch get add
} for
origDecode length 2 div div
dup 1 eq {
/decodeDivisor 2 origBitsPerComponent exp 1 sub def
} if
2 origBitsPerComponent exp 1 sub ne
def
[
0 1 dsCnt 1 sub [
currentdict /origMultipleDataSources get {
dup currentdict /origDataSource get exch get dup type
}{
currentdict /origDataSource get dup type
} ifelse
dup /filetype eq {
pop currentdict /srcDataStrs get 3 -1 /roll cvx /get cvx /readstring cvx /pop cvx
}{
/stringtype ne {
/exec cvx
} if
currentdict /srcDataStrs get /exch cvx 3 -1 /roll cvx /xpt cvx
} ifelse
] cvx /for cvx
currentdict /srcDataStrs get 0 /get cvx /length cvx 0 /ne cvx [
0 1 Width 1 sub [
Adobe_AGM_Utils /AGMUTIL_ndx /xddf cvx
currentdict /origMultipleDataSources get {
0 1 dsCnt 1 sub [
Adobe_AGM_Utils /AGMUTIL_ndx1 /xddf cvx
currentdict /srcDataStrs get /AGMUTIL_ndx1 /load cvx /get cvx /AGMUTIL_ndx /load cvx /get cvx
samplesNeedDecoding {
currentdict /decodeDivisor known {
currentdict /decodeDivisor get /div cvx
}{
currentdict /origDecode get /AGMUTIL_ndx1 /load cvx 2 /mul cvx 2 /getinterval cvx /aload cvx /pop cvxs
BitsPerComponent /decode_image_sample load /exec cvx
} ifelse
} if
] cvx /for cvx
}{
Adobe_AGM_Utils /AGMUTIL_ndx1 0 /ddf cvx
currentdict /srcDataStrs get 0 /get cvx /AGMUTIL_ndx /load cvx
currentdict /origDecode get length 2 idiv dup 3 1 /roll cvx /mul cvx /exch cvx /getinterval cvx
[
samplesNeedDecoding {
currentdict /decodeDivisor known {
currentdict /decodeDivisor get /div cvx
}{
currentdict /origDecode get /AGMUTIL_ndx1 /load cvx 2 /mul cvx 2 /getinterval cvx /aload cvx /pop cvx
BitsPerComponent /decode_image_sample load /exec cvx
Adobe_AGM_Utils /AGMUTIL_ndx1 /AGMUTIL_ndx1 /load cvx 1 /add cvx /ddf cvx
} ifelse
} if
] cvx /forall cvx
} ifelse
currentdict /convProc get /exec cvx
currentdict /origcolorSpaceElemCnt get 1 sub -1 0 [
currentdict /dstDataStr get 3 1 /roll cvx /AGMUTIL_ndx /load cvx currentdict /origcolorSpaceElemCnt get /mul cvx /add cvx /exch cvx
currentdict /convProc get /filter_indexed_devn load ne {
255 /mul cvx /cvi cvx
} if
/put cvx
] cvx /for cvx
] cvx /for cvx
currentdict /dstDataStr get
] cvx /if cvx
] cvx bind
end
} bdf
/devn_imageormask
{
/devicen_colorspace_dict AGMCORE_gget begin
/MappedCSA CSA map_csa def
2 dict begin
dup dup
/dstDataStr exch /Width get colorSpaceElemCnt mul string def
/srcDataStrs [ 3 -1 roll begin
currentdict /MultipleDataSources known {MultipleDataSources {DataSource length}{1}ifelse}{1} ifelse
{
Width Decode length 2 div mul cvi string
} repeat
end ] def
begin
SkipImageProc {
currentdict consumeimagedata
}
{
save mark
AGMCORE_producing_seps not {
level3 not {
Operator /imagemask ne {
/DataSource [
DataSource Decode BitsPerComponent currentdict /MultipleDataSources known {MultipleDataSources}{false} ifelse
colorSpaceElemCnt /devicen_colorspace_dict AGMCORE_gget /TintTransform get
dstDataStr srcDataStrs devn_alt_datasource /exec cvx
] cvx 0 () /SubFileDecode filter def
/MultipleDataSources false def
/Decode colorSpaceElemCnt [ exch {0 1} repeat ] def
} if
}if
currentdict imageormask
}{
AGMCORE_host_sep{
Names convert_to_process {
CSA map_csa 0 get /DeviceCMYK eq {
/DataSource
Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul
[
DataSource Decode BitsPerComponent currentdict /MultipleDataSources known {MultipleDataSources}{false} ifelse
4 /devicen_colorspace_dict AGMCORE_gget /TintTransform get
dstDataStr srcDataStrs devn_alt_datasource /exec cvx
] cvx
filter_cmyk 0 () /SubFileDecode filter def
/MultipleDataSources false def
/Decode [1 0] def
/DeviceGray setcolorspace
currentdict imageormask_sys
}{
AGMCORE_report_unsupported_color_space
AGMCORE_black_plate {
/DataSource [
DataSource Decode BitsPerComponent currentdict /MultipleDataSources known {MultipleDataSources}{false} ifelse
CSA map_csa 0 get /DeviceRGB eq{3}{1}ifelse /devicen_colorspace_dict AGMCORE_gget /TintTransform get
dstDataStr srcDataStrs devn_alt_datasource /exec cvx
] cvx 0 () /SubFileDecode filter def
/MultipleDataSources false def
/Decode colorSpaceElemCnt [ exch {0 1} repeat ] def
currentdict imageormask_sys
}
{
gsave
knockout_unitsq
grestore
currentdict consumeimagedata
} ifelse
} ifelse
}
{
/devicen_colorspace_dict AGMCORE_gget /names_index known {
Operator/imagemask ne{
MultipleDataSources {
/DataSource [ DataSource devn_sep_datasource /exec cvx ] cvx def
/MultipleDataSources false def
}{
/DataSource /DataSource load dstDataStr srcDataStrs 0 get filter_devn def
} ifelse
invert_image_samples
} if
currentdict imageormask_sys
}{
currentoverprint not Operator/imagemask eq and{
currentdict imageormask_sys
}{
currentoverprint not
{
gsave
knockout_unitsq
grestore
}if
currentdict consumeimagedata
}ifelse
}ifelse
}ifelse
}{
currentdict imageormask
}ifelse
}ifelse
cleartomark restore
}ifelse
end
end
end
}def
/imageormask_l2_overprint
{
currentdict
currentcmykcolor add add add 0 eq{
currentdict consumeimagedata
}{
level3{
currentcmykcolor
/AGMIMG_k xdf
/AGMIMG_y xdf
/AGMIMG_m xdf
/AGMIMG_c xdf
Operator/imagemask eq{
[/DeviceN [
AGMIMG_c 0 ne {/Cyan} if
AGMIMG_m 0 ne {/Magenta} if
AGMIMG_y 0 ne {/Yellow} if
AGMIMG_k 0 ne {/Black} if
] /DeviceCMYK {}] setcolorspace
AGMIMG_c 0 ne {AGMIMG_c} if
AGMIMG_m 0 ne {AGMIMG_m} if
AGMIMG_y 0 ne {AGMIMG_y} if
AGMIMG_k 0 ne {AGMIMG_k} if
setcolor
}{
/Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def
[/Indexed
[
/DeviceN [
AGMIMG_c 0 ne {/Cyan} if
AGMIMG_m 0 ne {/Magenta} if
AGMIMG_y 0 ne {/Yellow} if
AGMIMG_k 0 ne {/Black} if
]
/DeviceCMYK {
AGMIMG_k 0 eq {0} if
AGMIMG_y 0 eq {0 exch} if
AGMIMG_m 0 eq {0 3 1 roll} if
AGMIMG_c 0 eq {0 4 1 roll} if
}
]
255
{
255 div
mark exch
dup dup dup
AGMIMG_k 0 ne{
/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop
counttomark 1 roll
}{
pop
}ifelse
AGMIMG_y 0 ne{
/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop
counttomark 1 roll
}{
pop
}ifelse
AGMIMG_m 0 ne{
/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop
counttomark 1 roll
}{
pop
}ifelse
AGMIMG_c 0 ne{
/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop
counttomark 1 roll
}{
pop
}ifelse
counttomark 1 add -1 roll pop
}
] setcolorspace
}ifelse
imageormask_sys
}{
write_image_file{
currentcmykcolor
0 ne{
[/Separation /Black /DeviceGray {}] setcolorspace
gsave
/Black
[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 1 roll pop pop pop 1 exch sub} /exec cvx]
cvx modify_halftone_xfer
Operator currentdict read_image_file
grestore
}if
0 ne{
[/Separation /Yellow /DeviceGray {}] setcolorspace
gsave
/Yellow
[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 2 roll pop pop pop 1 exch sub} /exec cvx]
cvx modify_halftone_xfer
Operator currentdict read_image_file
grestore
}if
0 ne{
[/Separation /Magenta /DeviceGray {}] setcolorspace
gsave
/Magenta
[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 3 roll pop pop pop 1 exch sub} /exec cvx]
cvx modify_halftone_xfer
Operator currentdict read_image_file
grestore
}if
0 ne{
[/Separation /Cyan /DeviceGray {}] setcolorspace
gsave
/Cyan
[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {pop pop pop 1 exch sub} /exec cvx]
cvx modify_halftone_xfer
Operator currentdict read_image_file
grestore
} if
close_image_file
}{
imageormask
}ifelse
}ifelse
}ifelse
} def
/indexed_imageormask
{
begin
save mark
currentdict
AGMCORE_host_sep{
Operator/knockout eq{
/indexed_colorspace_dict AGMCORE_gget dup /CSA known {
/CSA get map_csa
}{
/CSD get get_csd /Names get
} ifelse
overprint_plate not{
knockout_unitsq
}if
}{
Indexed_DeviceN {
/devicen_colorspace_dict AGMCORE_gget /names_index known {
indexed_image_lev2_sep
}{
currentoverprint not{
knockout_unitsq
}if
currentdict consumeimagedata
} ifelse
}{
AGMCORE_is_cmyk_sep{
Operator /imagemask eq{
imageormask_sys
}{
level2{
indexed_image_lev2_sep
}{
indexed_image_lev1_sep
}ifelse
}ifelse
}{
currentoverprint not{
knockout_unitsq
}if
currentdict consumeimagedata
}ifelse
}ifelse
}ifelse
}{
level2{
Indexed_DeviceN {
/indexed_colorspace_dict AGMCORE_gget begin
CSD get_csd begin
}{
/indexed_colorspace_dict AGMCORE_gget begin
CSA map_csa 0 get /DeviceCMYK eq ps_level 3 ge and ps_version 3015.007 lt and {
[/Indexed [/DeviceN [/Cyan /Magenta /Yellow /Black] /DeviceCMYK {}] HiVal Lookup]
setcolorspace
} if
end
} ifelse
imageormask
Indexed_DeviceN {
end
end
} if
}{
Operator /imagemask eq{
imageormask
}{
indexed_imageormask_lev1
}ifelse
}ifelse
}ifelse
cleartomark restore
end
}def
/indexed_image_lev2_sep
{
/indexed_colorspace_dict AGMCORE_gget begin
begin
Indexed_DeviceN not {
currentcolorspace
dup 1 /DeviceGray put
dup 3
currentcolorspace 2 get 1 add string
0 1 2 3 AGMCORE_get_ink_data 4 currentcolorspace 3 get length 1 sub
{
dup 4 idiv exch currentcolorspace 3 get exch get 255 exch sub 2 index 3 1 roll put
}for
put setcolorspace
} if
currentdict
Operator /imagemask eq{
AGMIMG_&imagemask
}{
use_mask {
level3 {process_mask_L3 AGMIMG_&image}{masked_image_simulation}ifelse
}{
AGMIMG_&image
}ifelse
}ifelse
end end
}def
/OPIimage
{
dup type /dicttype ne{
10 dict begin
/DataSource xdf
/ImageMatrix xdf
/BitsPerComponent xdf
/Height xdf
/Width xdf
/ImageType 1 def
/Decode [0 1 def]
currentdict
end
}if
dup begin
/NComponents 1 cdndf
/MultipleDataSources false cdndf
/SkipImageProc {false} cdndf
/HostSepColorImage false cdndf
/Decode [
0
currentcolorspace 0 get /Indexed eq{
2 BitsPerComponent exp 1 sub
}{
1
}ifelse
] cdndf
/Operator /image cdndf
end
/sep_colorspace_dict AGMCORE_gget null eq{
imageormask
}{
gsave
dup begin invert_image_samples end
sep_imageormask
grestore
}ifelse
}def
/cachemask_level2
{
3 dict begin
/LZWEncode filter /WriteFilter xdf
/readBuffer 256 string def
/ReadFilter
currentfile
0 (%EndMask) /SubFileDecode filter
/ASCII85Decode filter
/RunLengthDecode filter
def
{
ReadFilter readBuffer readstring exch
WriteFilter exch writestring
not {exit} if
}loop
WriteFilter closefile
end
}def
/cachemask_level3
{
currentfile
<<
/Filter [ /SubFileDecode /ASCII85Decode /RunLengthDecode ]
/DecodeParms [ << /EODCount 0 /EODString (%EndMask) >> null null ]
/Intent 1
>>
/ReusableStreamDecode filter
}def
/spot_alias
{
/mapto_sep_imageormask
{
dup type /dicttype ne{
12 dict begin
/ImageType 1 def
/DataSource xdf
/ImageMatrix xdf
/BitsPerComponent xdf
/Height xdf
/Width xdf
/MultipleDataSources false def
}{
begin
}ifelse
/Decode [/customcolor_tint AGMCORE_gget 0] def
/Operator /image def
/HostSepColorImage false def
/SkipImageProc {false} def
currentdict
end
sep_imageormask
}bdf
/customcolorimage
{
Adobe_AGM_Image/AGMIMG_colorAry xddf
/customcolor_tint AGMCORE_gget
bdict
/Name AGMIMG_colorAry 4 get
/CSA [ /DeviceCMYK ]
/TintMethod /Subtractive
/TintProc null
/MappedCSA null
/NComponents 4
/Components [ AGMIMG_colorAry aload pop pop ]
edict
setsepcolorspace
mapto_sep_imageormask
}ndf
Adobe_AGM_Image/AGMIMG_&customcolorimage /customcolorimage load put
/customcolorimage
{
Adobe_AGM_Image/AGMIMG_override false put
dup 4 get map_alias{
/customcolor_tint AGMCORE_gget exch setsepcolorspace
pop
mapto_sep_imageormask
}{
AGMIMG_&customcolorimage
}ifelse
}bdf
}def
/snap_to_device
{
6 dict begin
matrix currentmatrix
dup 0 get 0 eq 1 index 3 get 0 eq and
1 index 1 get 0 eq 2 index 2 get 0 eq and or exch pop
{
1 1 dtransform 0 gt exch 0 gt /AGMIMG_xSign? exch def /AGMIMG_ySign? exch def
0 0 transform
AGMIMG_ySign? {floor 0.1 sub}{ceiling 0.1 add} ifelse exch
AGMIMG_xSign? {floor 0.1 sub}{ceiling 0.1 add} ifelse exch
itransform /AGMIMG_llY exch def /AGMIMG_llX exch def
1 1 transform
AGMIMG_ySign? {ceiling 0.1 add}{floor 0.1 sub} ifelse exch
AGMIMG_xSign? {ceiling 0.1 add}{floor 0.1 sub} ifelse exch
itransform /AGMIMG_urY exch def /AGMIMG_urX exch def
[AGMIMG_urX AGMIMG_llX sub 0 0 AGMIMG_urY AGMIMG_llY sub AGMIMG_llX AGMIMG_llY] concat
}{
}ifelse
end
} def
level2 not{
/colorbuf
{
0 1 2 index length 1 sub{
dup 2 index exch get
255 exch sub
2 index
3 1 roll
put
}for
}def
/tint_image_to_color
{
begin
Width Height BitsPerComponent ImageMatrix
/DataSource load
end
Adobe_AGM_Image begin
/AGMIMG_mbuf 0 string def
/AGMIMG_ybuf 0 string def
/AGMIMG_kbuf 0 string def
{
colorbuf dup length AGMIMG_mbuf length ne
{
dup length dup dup
/AGMIMG_mbuf exch string def
/AGMIMG_ybuf exch string def
/AGMIMG_kbuf exch string def
} if
dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop
}
addprocs
{AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf} true 4 colorimage
end
} def
/sep_imageormask_lev1
{
begin
MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{
{
255 mul round cvi GrayLookup exch get
} currenttransfer addprocs settransfer
currentdict imageormask
}{
/sep_colorspace_dict AGMCORE_gget/Components known{
MappedCSA 0 get /DeviceCMYK eq{
Components aload pop
}{
0 0 0 Components aload pop 1 exch sub
}ifelse
Adobe_AGM_Image/AGMIMG_k xddf
Adobe_AGM_Image/AGMIMG_y xddf
Adobe_AGM_Image/AGMIMG_m xddf
Adobe_AGM_Image/AGMIMG_c xddf
AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{
{AGMIMG_k mul 1 exch sub} currenttransfer addprocs settransfer
currentdict imageormask
}{
currentcolortransfer
{AGMIMG_k mul 1 exch sub} exch addprocs 4 1 roll
{AGMIMG_y mul 1 exch sub} exch addprocs 4 1 roll
{AGMIMG_m mul 1 exch sub} exch addprocs 4 1 roll
{AGMIMG_c mul 1 exch sub} exch addprocs 4 1 roll
setcolortransfer
currentdict tint_image_to_color
}ifelse
}{
MappedCSA 0 get /DeviceGray eq {
{255 mul round cvi ColorLookup exch get 0 get} currenttransfer addprocs settransfer
currentdict imageormask
}{
MappedCSA 0 get /DeviceCMYK eq {
currentcolortransfer
{255 mul round cvi ColorLookup exch get 3 get 1 exch sub} exch addprocs 4 1 roll
{255 mul round cvi ColorLookup exch get 2 get 1 exch sub} exch addprocs 4 1 roll
{255 mul round cvi ColorLookup exch get 1 get 1 exch sub} exch addprocs 4 1 roll
{255 mul round cvi ColorLookup exch get 0 get 1 exch sub} exch addprocs 4 1 roll
setcolortransfer
currentdict tint_image_to_color
}{
currentcolortransfer
{pop 1} exch addprocs 4 1 roll
{255 mul round cvi ColorLookup exch get 2 get} exch addprocs 4 1 roll
{255 mul round cvi ColorLookup exch get 1 get} exch addprocs 4 1 roll
{255 mul round cvi ColorLookup exch get 0 get} exch addprocs 4 1 roll
setcolortransfer
currentdict tint_image_to_color
}ifelse
}ifelse
}ifelse
}ifelse
end
}def
/sep_image_lev1_sep
{
begin
/sep_colorspace_dict AGMCORE_gget/Components known{
Components aload pop
Adobe_AGM_Image/AGMIMG_k xddf
Adobe_AGM_Image/AGMIMG_y xddf
Adobe_AGM_Image/AGMIMG_m xddf
Adobe_AGM_Image/AGMIMG_c xddf
{AGMIMG_c mul 1 exch sub}
{AGMIMG_m mul 1 exch sub}
{AGMIMG_y mul 1 exch sub}
{AGMIMG_k mul 1 exch sub}
}{
{255 mul round cvi ColorLookup exch get 0 get 1 exch sub}
{255 mul round cvi ColorLookup exch get 1 get 1 exch sub}
{255 mul round cvi ColorLookup exch get 2 get 1 exch sub}
{255 mul round cvi ColorLookup exch get 3 get 1 exch sub}
}ifelse
AGMCORE_get_ink_data currenttransfer addprocs settransfer
currentdict imageormask_sys
end
}def
/indexed_imageormask_lev1
{
/indexed_colorspace_dict AGMCORE_gget begin
begin
currentdict
MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{
{HiVal mul round cvi GrayLookup exch get HiVal div} currenttransfer addprocs settransfer
imageormask
}{
MappedCSA 0 get /DeviceGray eq {
{HiVal mul round cvi Lookup exch get HiVal div} currenttransfer addprocs settransfer
imageormask
}{
MappedCSA 0 get /DeviceCMYK eq {
currentcolortransfer
{4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
{4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
{4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
{4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
setcolortransfer
tint_image_to_color
}{
currentcolortransfer
{pop 1} exch addprocs 4 1 roll
{3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div} exch addprocs 4 1 roll
{3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div} exch addprocs 4 1 roll
{3 mul HiVal mul round cvi Lookup exch get HiVal div} exch addprocs 4 1 roll
setcolortransfer
tint_image_to_color
}ifelse
}ifelse
}ifelse
end end
}def
/indexed_image_lev1_sep
{
/indexed_colorspace_dict AGMCORE_gget begin
begin
{4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}
{4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}
{4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}
{4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}
AGMCORE_get_ink_data currenttransfer addprocs settransfer
currentdict imageormask_sys
end end
}def
}if
end
systemdict /setpacking known
{
setpacking
} if
%%EndResource
currentdict Adobe_AGM_Utils eq {end} if
%%EndProlog
%%BeginSetup
Adobe_AGM_Utils begin
2 2010 Adobe_AGM_Core/doc_setup get exec
Adobe_CoolType_Core/doc_setup get exec
Adobe_AGM_Image/doc_setup get exec
currentdict Adobe_AGM_Utils eq {end} if
%%EndSetup
%%Page: sphere.pdf 1
%%EndPageComments
%%BeginPageSetup
/currentdistillerparams where
{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse
{ userdict /AI11_PDFMark5 /cleartomark load put
userdict /AI11_ReadMetadata_PDFMark5 {flushfile cleartomark } bind put}
{ userdict /AI11_PDFMark5 /pdfmark load put
userdict /AI11_ReadMetadata_PDFMark5 {/PUT pdfmark} bind put } ifelse
[/NamespacePush AI11_PDFMark5
[/_objdef {ai_metadata_stream_123} /type /stream /OBJ AI11_PDFMark5
[{ai_metadata_stream_123}
currentfile 0 (% &&end XMP packet marker&&)
/SubFileDecode filter AI11_ReadMetadata_PDFMark5
<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about='uuid:78e3abec-6724-11da-aded-000a95cd9010'
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ <pdf:Producer>pdfeTeX-1.21a</pdf:Producer>
+ </rdf:Description>
+
+ <rdf:Description rdf:about='uuid:78e3abec-6724-11da-aded-000a95cd9010'
+ xmlns:pdfx='http://ns.adobe.com/pdfx/1.3/'>
+ <pdfx:PTEX.Fullbanner>This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4</pdfx:PTEX.Fullbanner>
+ </rdf:Description>
+
+ <rdf:Description rdf:about='uuid:78e3abec-6724-11da-aded-000a95cd9010'
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about='uuid:78e3abec-6724-11da-aded-000a95cd9010'
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-12-07T14:03:19+01:00</xap:CreateDate>
+ <xap:CreatorTool>TeX</xap:CreatorTool>
+ <xap:ModifyDate>2005-12-07T14:29:58Z</xap:ModifyDate>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>244</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA9AEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpG [...]
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about='uuid:78e3abec-6724-11da-aded-000a95cd9010'
+ xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'>
+ <xapMM:DocumentID>uuid:78e3a3e0-6724-11da-aded-000a95cd9010</xapMM:DocumentID>
+ </rdf:Description>
+
+ <rdf:Description rdf:about='uuid:78e3abec-6724-11da-aded-000a95cd9010'
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>application/postscript</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ [...]
% &&end XMP packet marker&&
[{ai_metadata_stream_123}
<</Type /Metadata /Subtype /XML>>
/PUT AI11_PDFMark5
[/Document
1 dict begin /Metadata {ai_metadata_stream_123} def
currentdict end /BDC AI11_PDFMark5
Adobe_AGM_Utils begin
Adobe_AGM_Core/page_setup get exec
Adobe_CoolType_Core/page_setup get exec
Adobe_AGM_Image/page_setup get exec
%%EndPageSetup
Adobe_AGM_Core/AGMCORE_save save ddf
1 -1 scale 0 -325 translate
[1 0 0 1 0 0 ] concat
% page clip
gsave
newpath
gsave % PSGState
0 0 mo
0 325 li
344 325 li
344 0 li
clp
[1 0 0 1 0 0 ] concat
gsave % PSGState
0 325 mo
344 325 li
344 0 li
0 0 li
0 325 li
clp
gsave % PSGState
-12.2452 351.722 mo
356.255 351.722 li
356.255 -16.7779 li
-12.2452 -16.7779 li
-12.2452 351.722 li
clp
0.216 lw
0 lc
0 lj
2.6131 ml
[] 0 dsh
true sadj
329.505 209.672 mo
14.5088 125.27 li
14.5079 209.672 mo
329.506 125.27 li
172.007 324.969 mo
172.007 9.97217 li
false sop
/0
[/DeviceRGB] add_csa
0 0 0 rgb
@
171.664 77.0962 mo
221.234 77.0962 261.663 117.526 261.663 167.096 cv
261.663 216.667 221.234 257.094 171.664 257.094 cv
122.094 257.094 81.6641 216.667 81.6641 167.096 cv
81.6641 117.526 122.094 77.0962 171.664 77.0962 cv
1 1 1 rgb
ef
172.007 77.4712 mo
221.578 77.4712 262.006 117.901 262.006 167.471 cv
262.006 217.042 221.578 257.469 172.007 257.469 cv
122.438 257.469 82.0079 217.042 82.0079 167.471 cv
82.0079 117.901 122.438 77.4712 172.007 77.4712 cv
cp
0 0 0 rgb
@
0.5 lw
191.078 139.833 mo
186.748 127.856 179.469 120.302 172.007 120.302 cv
@
0.216 lw
[4.53601 4.32001 ] 0 dsh
172.007 257.469 mo
147.222 257.469 127.008 217.042 127.008 167.471 cv
127.008 117.901 147.222 77.4712 172.007 77.4712 cv
@
[] 0 dsh
262.006 167.471 mo
262.006 179.864 221.578 189.971 172.007 189.971 cv
122.438 189.971 82.0079 179.864 82.0079 167.471 cv
@
[4.53601 4.32001 ] 0 dsh
233.469 183.86 mo
85.125 144.188 li
262.006 167.471 mo
262.006 155.079 221.578 144.971 172.007 144.971 cv
122.438 144.971 82.0079 155.079 82.0079 167.471 cv
@
329.505 209.672 mo
322.747 211.055 li
324.343 205.094 li
329.505 209.672 li
ef
110.657 183.922 mo
259 144.334 li
@
14.5088 209.672 mo
19.6709 205.096 li
21.2686 211.057 li
14.5088 209.672 li
ef
0.5 lw
[] 0 dsh
172.007 167.471 mo
208.536 114.972 li
@
206.956 113.872 mo
207.561 113.002 208.763 112.784 209.635 113.391 cv
210.507 113.998 210.721 115.201 210.117 116.071 cv
209.511 116.941 208.308 117.159 207.436 116.552 cv
206.564 115.945 206.35 114.742 206.956 113.872 cv
ef
195.218 177.954 mo
188.292 178.889 180.056 179.452 172.007 179.452 cv
160.027 179.452 147.86 178.235 139.25 176.221 cv
215.912 187.11 mo
172.007 167.471 li
@
0.216 lw
172.007 257.469 mo
196.792 257.469 217.007 217.042 217.007 167.471 cv
217.007 117.901 196.792 77.4712 172.007 77.4712 cv
@
[4.53601 4.32001 ] 0 dsh
172.007 257.469 mo
172.007 77.4712 li
@
172.007 9.97217 mo
168.923 16.1431 li
175.094 16.1431 li
172.007 9.97217 li
ef
grestore % PSGState
false sop
0 0 0 rgb
%ADOBeginSubsetFont: CMMI12 Initial
%ADOt1write: (1.0.21)
%%Copyright: Copyright 2005 Adobe System Incorporated. All rights reserved.
13 dict dup begin
/FontType 1 def
/FontName /CMMI12 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/Weight (Roman) def
/ItalicAngle -14.04 def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 114 /r put
dup 120 /x put
def
/UniqueID 5087386 def
/FontBBox {-31 -250 1026 750} def
end
systemdict begin
dup /Private
12 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-21 0 431 441 452 463 683 704] def
/OtherBlues [-204 -194] def
/BlueScale 0.04379 def
/StdHW [22] def
/StdVW [65] def
/StemSnapH [22 29] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
3 dict dup begin
/r <1C60D8A8C9B7628037FFC34225CDB51C16B6280E0517770F69131E099966
F689816DBB94E394FAC1DD9A7C1A14C9636A7D2A8B72705C22612EFEFFA6E526
4FF4EBF61CD9C4DD8B27578E011E8DDEBF419CAC1F6A2F1FE994DF5C901FD0BE
A9E7C62177556CCE084E3BECB95D975A4D2F2A65A78E12C3AB4ACCE568AEB738
452E5B0C6CD2019C0B9AA154E192BB18B0CE92FA48AF13577432A54DCB74656A
4A13E51A965BFC9D023FADEC3106AF414E85A814E3E3249DD8D208FADB8DC3FB
27> |-
/x <1C60D8A8C9B7EF325DF88715F012E085EB64F0A4FE8713D04CDEA9CB20E9
B15249D56AC8A0C2E0E12761B3B972D802D5F8B18F4F576C2666702361F5C2B4
8D78C52532223071C01FA681430DA735F1A7AE51C80B9138D3695956A62D9B46
0B17A4E36DAB726D8A63568FAB7BE160BEDB176EF49099F6F41A5863B069F194
EE62B71BD3B36F4A3FC9946AAB077F14F50A9438F7F58BFD49954B5720AE57E1
71B43DB3AF9DBD54119DEA2A7A1C00079C808029D90A7EF0A91CB3EF0628D6A4
2D1F0CCEC95B876569E8B0C44DA543AE071E278458104AF4D774998DBD764C7F
96602C> |-
/.notdef <1C60D8A8C9B81F2CC3> |-
end put
end
dup /FontName get exch definefont pop
end
%ADOEndSubsetFont
/JPGFDA+CMMI12 /CMMI12 findfont def
/JPGFDA+CMMI12*1
[
114{/.notdef}repeat /r 5{/.notdef}repeat /x 135{/.notdef}repeat
] JPGFDA+CMMI12 nfnt
JPGFDA+CMMI12*1 [11.955 -1.46406e-15 -1.46406e-15 -11.955 0 0 ]mfnt sfnt
201.887 135.73 mov
(r) sh
333.424 215.398 mov
(x) sh
%ADOBeginSubsetFont: CMR8 Initial
%ADOt1write: (1.0.21)
%%Copyright: Copyright 2005 Adobe System Incorporated. All rights reserved.
13 dict dup begin
/FontType 1 def
/FontName /CMR8 def
/FontInfo 6 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/Weight (Roman) def
/ItalicAngle 0 def
end def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 50 /two put
def
/UniqueID 5000791 def
/FontBBox {-36 -250 1070 750} def
end
systemdict begin
dup /Private
13 dict dup begin
/|- {def} def
/| {put} def
/BlueValues [-21 0 431 446 665 675 683 704] def
/OtherBlues [-205 -194] def
/BlueScale 0.04379 def
/StdHW [28] def
/StdVW [76] def
/StemSnapH [28 33] def
/StemSnapV [76 92] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
/Subrs 5 array
dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
dup 1 <1C60D8A8C9C3D06D9E> |
dup 2 <1C60D8A8C9C202D79A> |
dup 3 <1C60D8A849> |
dup 4 <1C60D8A8CC3674F41144B13B77> |
def
put
dup /CharStrings
2 dict dup begin
/two <1C60D8A8C9B7883C479819BD474E9964F6BF369AAF487ABFE629F8A563
37D176F7C9556B1CAAE607CA6285C927013D8BDE6137B6739AFDAF8D7D8B1E86
BAFBB9D834592D58F996DFF88B929F1FABA7347C2BBDB5519BE210DDE834DD1D
CB9A84AA77E585DFD5A86708901622F6AC3CFFFF626D8C5FD08A157C4A8F19F7
F5FA2E61175441FDD6> |-
/.notdef <1C60D8A8C9B808980A> |-
end put
end
dup /FontName get exch definefont pop
end
%ADOEndSubsetFont
/GPGFDA+CMR8 /CMR8 findfont def
/GPGFDA+CMR8*1
[
50{/.notdef}repeat /two 205{/.notdef}repeat
] GPGFDA+CMR8 nfnt
GPGFDA+CMR8*1 [7.96999 -9.76042e-16 -9.76042e-16 -7.96999 0 0 ]mfnt sfnt
340.076 217.191 mov
(2) sh
JPGFDA+CMMI12*1 [11.955 -1.46406e-15 -1.46406e-15 -11.955 0 0 ]mfnt sfnt
0.416016 215.398 mov
(x) sh
%ADOBeginSubsetFont: CMR8 AddGlyphs
%ADOt1write: (1.0.21)
%%Copyright: Copyright 2005 Adobe System Incorporated. All rights reserved.
systemdict begin
GPGFDA+CMR8 dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/one <1C60D8A8C9B7883C47E9695A643EC7CDC9D492AB150D29B838BCDE5298
51B4F36139BB3C5556B7F7E4934494C8CA669B61323ACA68A6240E429D123FC3
10871A43C3C2B8652E724507A70C99EC1FF6EE1EA351C2BAEF> |-
systemdict /gcheck known {setglobal} if end {end} if
end
GPGFDA+CMR8 /Encoding get
dup 49 /one put
pop
%ADOEndSubsetFont
/GPGFDA+CMR8*2
[
49{/.notdef}repeat /one 206{/.notdef}repeat
] GPGFDA+CMR8 nfnt
GPGFDA+CMR8*2 [7.96999 -9.76042e-16 -9.76042e-16 -7.96999 0 0 ]mfnt sfnt
7.06787 217.191 mov
(1) sh
JPGFDA+CMMI12*1 [11.955 -1.46406e-15 -1.46406e-15 -11.955 0 0 ]mfnt sfnt
168.42 5.39307 mov
(x) sh
%ADOBeginSubsetFont: CMR8 AddGlyphs
%ADOt1write: (1.0.21)
%%Copyright: Copyright 2005 Adobe System Incorporated. All rights reserved.
systemdict begin
GPGFDA+CMR8 dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/three <1C60D8A8C9B7883CBAA92B92A60ED97CC7706D34A36348BC2B93805C
7C1833580FAA27E95855649C4EE0492E1681D62AEDB7EC0D4D44FE91FF7AD466
5FD8D6994E56FB00B47353D8538086D2C46021ADFB3F80264F6C2EF23799D21E
81ACDE63FE62C97F7BE27D7DCE3B9BAF5B096FE9F9E10574C4FE3C149B03DD0A
59DE10D784DCCBFDFC6D3C5399775DC28DB91A04691B5B8F3D1C009DFAB49BB8
18D90EA7C1> |-
systemdict /gcheck known {setglobal} if end {end} if
end
GPGFDA+CMR8 /Encoding get
dup 51 /three put
pop
%ADOEndSubsetFont
/GPGFDA+CMR8*3
[
51{/.notdef}repeat /three 204{/.notdef}repeat
] GPGFDA+CMR8 nfnt
GPGFDA+CMR8*3 [7.96999 -9.76042e-16 -9.76042e-16 -7.96999 0 0 ]mfnt sfnt
175.072 7.18604 mov
(3) sh
grestore % PSGState
0.216 lw
0 lc
0 lj
2.6131 ml
[] 0 dsh
true sadj
72.0171 194.273 mo
110.657 183.922 li
false sop
0 0 0 rgb
@
4 ml
270.647 193.896 mo
232.847 183.767 li
@
%ADOBeginSubsetFont: CMMI12 AddGlyphs
%ADOt1write: (1.0.21)
%%Copyright: Copyright 2005 Adobe System Incorporated. All rights reserved.
systemdict begin
JPGFDA+CMMI12 dup
/Private get dup rcheck
{begin true}{pop false}ifelse exch
/CharStrings get begin
systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
/theta1 <1C60D8A8C9B7FA1301BE6180781D244B43F2F97D795A8C67AF29757
0B25D011F7553AE87DA67246C75A123D38A7E2A9E73C089D0155659C213520B6
BF3708CF9E463A551165DF528979C5D29939E4C663B7CB9ACD2D34590AACA015
370E594274B63269C8F1CFCDE8C91D720B13F6B93C2E0C4CB325FAAA90199F59
0A1AC543010663224FE9AA5C2BA7CFE5A136E95946849176A836312B7F034FCF
4D6AC1AC7238CDCD1DE8CE95FDACABE12915BD7468460A9C53C13689C62E4957
EFA9AD8D18B2997483879F7A346270DF44C1AE41B892E443E6FAAAFC0E03E340
2ECABE2B7246DA1D5670AD7110BF40E94066EA9490675CB0A81BEFFC608EFE8E
B9C> |-
/phi1 <1C60D8A8C9B6747BB73B43E39C205190D75AB2FA80068C30CFF75B781
B8EF25B40D3CE1F8BF1235B5920904D98C1751ACD1ECE66AA5D36E6C1B0A8270
63C26C16EF05F21A86369CC9EEB5C4FBFDD1B1033971034EB6BB92D726AF889E
8FAEBC642112085AE58F32148895EE95BF45DBD1651424FB17E02ED87E805BC1
2A8D7FC6BBCEE3EDEE61F46B81CD695594BD8913AA6E31AFF96FA2BC0EB51123
4DC983CFE742ECE43A47058200D1BD7CA0237343381C2D71B3385B4C3D1> |-
/xi <1C60D8A8C9B71063258B553F1B532EC10F40E30216C77B3F0B5660F2681
931B66B80D025CB05EB0F48CA6066E901D78AA8BDBA0138C54FFF8BC2753E842
2BAE3AE8CA07E859A4B65B4D5BD4727F3F9107AA32A4A57EB21B5630206288DD
3BEEDDAA3A69061629F0A34376B6E16CE06067FD5361A33C8D6231C3893FBC27
DA84816540B60AC54A3B46F95C2017D13E3D6A05441ECC1CCFCC0E271B2EB892
AA15AB9593923D3AFC1719CB0C359E9F3496DECE857F42C607298AB3F002EE31
0452C9265BCFBD8D84E2C48799C08153602DF1797D52F8C67BDFAEBA64E17B0D
D653E1C5FDC09B8B1BE444DD31C2CCE33B522DE3589EF9276F4E8BDDA185B4DF
FD3F802509F0BBF017DBB660603BE2B25606F1B38D53804373299EC38C0556EC
A9B2D754890C919EA4C2FFA9F42AAF4905ECF7BF321854AD8259B94818A6467E
BBE549BDD6FDF0210134D> |-
systemdict /gcheck known {setglobal} if end {end} if
end
JPGFDA+CMMI12 /Encoding get
dup 35 /theta1 put
dup 39 /phi1 put
dup 187 /xi put
pop
%ADOEndSubsetFont
/JPGFDA+CMMI12*1
[
35{/.notdef}repeat /theta1 3{/.notdef}repeat /phi1 74{/.notdef}repeat /r 5{/.notdef}repeat /x
66{/.notdef}repeat /xi 68{/.notdef}repeat
] JPGFDA+CMMI12 nfnt
JPGFDA+CMMI12*1 [11.955 -1.46406e-15 -1.46406e-15 -11.955 0 0 ]mfnt sfnt
176.416 140.398 mov
(#) sh
162.916 175.898 mov
(') sh
212.916 110.398 mov
(\273) sh
%ADOBeginClientInjection: EndPageContent "AI11EPS"
userdict /annotatepage 2 copy known {get exec}{pop pop} ifelse
%ADOEndClientInjection: EndPageContent "AI11EPS"
% page clip
grestore
grestore % PSGState
/JPGFDA+CMMI12*1 ufnt
/GPGFDA+CMR8*1 ufnt
/GPGFDA+CMR8*2 ufnt
/GPGFDA+CMR8*3 ufnt
Adobe_AGM_Core/AGMCORE_save get restore
%%PageTrailer
[/EMC AI11_PDFMark5
[/NamespacePop AI11_PDFMark5
Adobe_AGM_Image/page_trailer get exec
Adobe_CoolType_Core/page_trailer get exec
Adobe_AGM_Core/page_trailer get exec
currentdict Adobe_AGM_Utils eq {end} if
%%Trailer
Adobe_AGM_Image/doc_trailer get exec
Adobe_CoolType_Core/doc_trailer get exec
Adobe_AGM_Core/doc_trailer get exec
%%EOF
%AI9_PrintingDataEnd
userdict /AI9_read_buffer 256 string put
userdict begin
/ai9_skip_data
{
mark
{
currentfile AI9_read_buffer { readline } stopped
{
}
{
not
{
exit
} if
(%AI9_PrivateDataEnd) eq
{
exit
} if
} ifelse
} loop
cleartomark
} def
end
userdict /ai9_skip_data get exec
%AI9_PrivateDataBegin
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: Adobe Illustrator(R) 11.0
%%AI8_CreatorVersion: 11.0.0
%%For: (Holden Caulfield) (Damage Inc.)
%%Title: (sphere.eps)
%%CreationDate: 7/12/05 15:30
%AI9_DataStream
%Gb",KLKZH)e*+=CmQjfK5_L"1(^S$0L]W/g&;Qo(#M at l,]DC",4dekaIfH#2r9lh-0[l`,]"1d at Fh:o3fkT4[9aBA)5KUS]qC`Nm
%mtKt]_rWA.m^RtmHY1i79t9Gnb0RZS at Zd.>BD`saQQ<QI?]*J%Cq<#qF#Q$Z'TJ^]d+>n>U-O,aT8uKIc_t76.ahit at ud,MPP0#M
%FrH$HTdK3sIaK3UW"OJ*O0>G:nZ'W0&K"dAC4]bFi'j`(^Xp$X&e,*=6_Q.#$<\\IA;%e4j4?A10Np%'p2W!Z^3`Dg%;mpC\!J((
%"Vme.,C<B(J'-Z&OpG5rb"kscBfq\Pm.mUlFW,jMO[sRI*/TPaALqkONOZ`eHT1?[BY']cL1Ghb;4!pu__:>Ns.HVh1B:5><b%0)
%T8inm;0\<JeS\t^DN"fLe7H[;(c<0R-2^43OTLM#5N%i@^1ZI at N&eEb%goLX=-I\%&'$>Vee66MS=;EK%iAJ7'o'P[64*9Umnn0`
%^)%.^pZO#C*Y"AMHDGM`!^P*81a'4H6^(A9do53qK@)MI5tbb>$N-hM:Ki_6Mj"Z6K[[Hjs+L/3JJ&E:\`BUhe?NUq\=.N:m1E`[
%7eQ$8*`-8\c1I670AFU^8;N/l'tJhfZ at A0*1dUae'S=YE'L!0:prqj<VkF\"%>E^l69kT9a]k'bg8%b+$DjIop_AcTWFuu<7ADCa
%[[BZOR7%,!,g\cSSOc#F6ious2u&&(\K$jVje-3<#B+WC.)W@[Q=ZggW6MX;Sn1J6!\o7m^dEDnDkX''4qr%Ii"J`!R,AWM_3i0'
%P'8T(pk1CV,5?h2MjPW0 at 8-.s^L0J!#qZ`OOd9EDn-S-0^[MrW"FUo!P5_-hN!hhC%*QLDEIIn.Jn'C$JgL1;29EoGoE9==)sJ at c
%(["=?62j/!(a",l94S7KW6%+VA+1:,_>(qd-<MF6@=7PN^L2.oro'&+%Su!r9#:;\PKY5E&qX355P-AP!'i0bO#UbT5([o*7IVY`
%KoDNe&!.I78ACs3EP=sMnK4!Hd>=(oUP%92eDr3?%mH[$Tl1bi_$R(KT25_]kAZ9B/Zp+G3RS#'DNTZB=qR_C+=EC?BL,l>ig^Xo
%'Bf_Q8\YCH!4b'6in+P':eL)FZqfnMpZ*EIS?,CNc",*+DFb-dr^Z0R?L=PK_^2HdH"DhWP%gOb[n-6KrBY:gL;]?0ca&@<Gocr0
%&X-$q`eFc"#d;l6Bp[>FW$)'EIgK2PKRYgQhT12g^MoS<QN*+t%TaoBT#cE'^K?HmQN*+tnMp=bO,JG,Kn#L!GpE>8s0>eu>Q.:p
%3Eut[T#cE'^O2XNQN*+t60TKMk:h,L8`l<9(4VI]BRFn](QP^.TJ8dRQl)$DZV2pnZC*]MNmJ at VrQ`5tQ5/73p_Vt0`UZh5QQXW4
%56d\d-!=-/'kU,7$g-"7Xjo'M,Iaa'6_9-E(_^Fr//&G)iW(q8%o;]LT^Z!\)2nlMZ\ndNBUlFVrXQ6V>,7d(=R;N7#c33h;+cKf
%W9?\G2a[#[:g(T&l:jbCS^@:o95TP4j!*'qf]BCO4B\@':&`S*EYL523 at Y[Waop7;1k/Z$!2'_)pMaGj4=cEqarn9(,!u<O7';H?
%$Q,Wnc3]1jRurfZ&u58\>Gbn,=6q5f`r_?dDlSr#C58SLh\7AG>(g..67ZZ>8n_U/brj4T:g864/,RVkkt%<NRLq7uf#DWBF_R:B
%pIQd"bRqiY/)`Uo)M-[Q7KJDQ?]\Y--l$>)g6"kBW^\L+&lel8r"<1c2_d.A&R)k[E2g&GG;<dk25\5K/b1%7H<af;ij_?j\C;h$
%):GT+<e5=k<[au`RRH1V)%do>6#)SqL)=@#ieSn.9>!UA$@uH0,'"4eDcLXor5*epgu8ZB6`O6s!mQWZOAK>EN$G-l at rZoe'UXh.
%>J])<TrK]l[q;cGN/&*c$+5k$'Vf.P]d7bDP,JOO_PhgCTGDjN@]H#RhoZhc at SCN.S-rb#;-i.;/B9/.h7?i=-u_ul]sBKTUlO5f
%4R_Sf$dU$V)?Uh- at tM?/=4J4C8G!r=3B*_q9X;#:3+uQN1X1k-=/^/qC0,[Mk"D^uADI$h`"nUg-QH$E#&&uo at oJGoE+sPHieu$b
%G(#;/(Z`;`0jtfbXAC4e<)+F4"r`)9>,2qa3$fK/a(g-g26<cLW`I"UV+=c#HkZ#^$EO&1j7/SQ8/g^]+$-Ui2km:B&8TbBp"C%n
%d$HE6W+9),2#U!D9=67'mpXHJQ/;icN[,FkdTb^[lFmQ`ULU[PpI&^9,L8[M'kOSYHI96Zlnd'(Uu.g]5[!"X at LJk%^c,AVPbrgf
%,F0QX441N*Xp",`dU.PE;A(+<A:Ok:3Wu;KN+qB0UVqf_2k3b)6)eQjA'Sh(W99M(#sF.C):=mBY8$Y(;<NdLFBGNTUj7c7,#S"Q
%7qm6[89."l#75EJ>8KdPoqsId8BX:6[7"!$`'b=YKLV8!J#2h_6tOV:\"qYS9X0J[Nf:(Wnr=Gms6j&hgX]o?GCjd)pu]^pHf3d,
%hf?%0GafMDkHi=W`j5\k-[j$RlJ-D;GJ#t'M88k#[cA4!l!Va&-),qkhu8N9-YadQ)f[udZNt)doK&*"EkTkFg^`E"h:7Yrgb)+W
%*Z(c2`>jGUWCE?kC#dbGmI#f!XsX*%pJ7G6QQc%V\FH`S3/;91!Z\2^.B7DdeIcME7*:H&AO]Rc.;muSR$"[1;Keoc4-Rh4#Uh3$
%F at D(ijJ%[M8h/S2%gF!qkTKpd0$m&^%P3nc5DE#d\1Tbn".dtebUiqg2 at gXl%g/cMUcn*f`X#4"hL7_lo`Et&r!u"1%$uMkhsPKJ
%2ZFL70M(#j:1q`kf+2E_J]_HW?47k&U\T/BR#Imm\WHU\%lXqk<nbTS[;t9a);jb$W2\1/KC>#tU:V>]&$\A=4VrGE??$>iA8h29
%1r0(=*OdEk/#'1D[lm1qUg!`e$r-.N(kWQlC2Pe2Nk,-er^ANWNQ7eSN-m?uGI]tn9L_Jo2W7Fq0EW5]p(0aqDM%mr6:NBCNJ]qk
%S+r?JS36.trYbfg84\q`r[`K`o5-7Xq%Z-3OQ)NL_2Ws'jrAsO#RslY&(GZ.Nr#1:J3`U/bNl7Y?>pO-p]i:[*6qRm6m at XV7R<bo
%`V0e7N4]9uStP5'4MOdWl]kH5MA3(P65;q9ij^M7`'#PhYAE?m]^!=,/Jb+3U,JEq8\<.J^%33mf'_N$6'a?1d>l"]2''("eR[HA
%/^ZVL9t at Gm[uKZ5)L8u*'IbmYMq*JRmbOV(AEsZ1WVj+bK+5ua?Ba^qMAqATCGc")?OXZm-JSSq!f, at V(nj'r*-04\jTs(#k^su&
%d-"jpR,CJ%Gh2$Qg##'RbLq9q*qpCF3jY[B$)W&l+oFl:C,h]26!_H*@DST?hZg?\q+1qnLZ<$REGr,[1Bo0ijl at N,^D1[Q6c=`@
%TD]X2W:I.>?]'&cd6EL1Lgm:Q:C^coIf_!^J!$#_5jWeP6)]IEJ/TQs&4qF2>2\W=ZAh$[b?p:`j5-_q`h.5RZAq2q&RZT0]Hb3Q
%!X2)eLfUDu:iZ]A*J(L at E8q5Z3W^$dT]ug4*.^1AT^E(Bd*ct<*ZT`$8)VK$G]j3rcsXk1KU6D"\`2 at ReDILTcN/t>hr2S]^WG)N
%BD*-nGeE82UH.8f&a1 at Q*<?:,+9V_((8N0/EWeQHJM1!N&X]4l&W.1iLq=n#5V4.l,+7U"r8e3WL(Pg.K4`%F0`pSYC?'4BYo;7i
%#Gh9O"Q57=T-jC6LV at .>LZkIl.?!0)8=']@@#6)mBMUZPo_/[N]8HTk__OZF+g0nk&73.gXLDCWX1g_dWtUTqDJqd$l&e^DL-WRQ
%_nY/?8U;H&i:F!4T*)V3?q_+p9[Wn?N.?1]hBB*5<3M9fX at 0kd!*C%$joF4X`;NK,q1$0W$bls&4WoQ('!p#2+n?_C/>DdobOfBe
%Y46/MD4iK9`CYa1s(VnL^CXu5U"5cCbtgBV_iG"#@/EKij0:uT71V,?$2R9d<`uiM at Z[&l6&r\eO5"(:N#"tNJF+NeeD[%qOIOC5
%<Y2C+!asE:7D9o0M23OR*K,#*PRA\*Li-lDF.riDC4rdrWIhj6Y<[aj9c<aC!ctnfg"er;`##m.(f;2$dOP>c9'oj2V]E&DZYPCm
%9IP[(6`G3N7mJc%s!@=5n,Mt%dN!AOrWk>Hp^UZhS"<N4m5 at I"n>-\+Mca['_.Iar,L%B9BhB11)cU_M?W`.&ZiV`H^[QTTRa68\
%"j>2`J&rE&n!AOM(G(:C=;KX'm]TTS')ZKk<%J_Kc!X##IRF:5Bn%r[/cR63?9mhdJ7sTJ[SFdjE.05e0gr3Y6"3((S=fITh'Gs,
%;2\(d18<pk$*qGA*)n*pi7gD6AF36N=9*'Nr9PL+MF<sckrkIB$f7YoGkN4s3oK_qE"EA/[FhS\R<3'$Aq9eZ%6[$7PpXpaWbD>s
%i2bm]%WC at Ol?J"h(&6HsIPpN=*6/mPHW>lDjen at mqD-jLnuK`KYCR*ic^q^un;=RS0DVHMZtUV\XE",X6X-shCQHL\lieDPopXKX
%0D/gSf<dm\BdfM,#6$(M26C$M at T;VYWI?-NY#E6N#>>c*`C+TGnO3 at o71j4-`^k2)Uh7\D)6bkoO2NfNNA4[f`_R:IMkB.0IrXN%
%>_,B/$'GmIO)9>`e1<k?Q>-q=V7mj"3I.?3P;sm.m+$mY3BUUu8QH++%a+J'pR<h+"F1(]o\ci;P3 at 4LoJuhZ08YEDSK[b1\*XL2
%G625tJl\lG2Rlh.W2&LIg())_5NkTDIJH9lrn\%Oh<_hh#PWQ.l-gY*pOooXC)[2\QZDF9p<Z<Z2#t:`VsW#Zq/-9A0pWkJEMisl
%@iI8I!&TWfKO>[%Q7/rF`uLgn$qn"'!D/bSJR:S=a0G?Ng3$B$;J0I.RnRW925`k)g/r<FD((2IP#l2i5r8O2G`3Qh4>^_VJ5shf
%+Brm2JG:).1&MsK]nA<DL\uV4.GrEs*<'r*ckFPG.]G'e2qpFnB/6'Q!e0p3,0KEudW%/;huD4JYClt6]tbBJ;tYJ4B.gh+A9bhj
%#JgPBWBCCZcN0]I"5p@@5AGD^ON+X%2ZWA4%`<c0$RrV[GDOI,A@)_U1h<X8Lh%Sll6$aM6&MO1"nbu\M`1&c=;(YqM7#Jl28i>3
%)U)^cFOBHX(<bAVAPcJ01]?4%#&t(;dt(jOs0=RG7#-\Mlel.Z-[*RN9.E2:8*"uS&RpHpc3U=F;ZAp[.7^X<%-(LbMsFN,%r"j0
%=SNsXRgAt2;S`RMi8;1LCa)G6p-o#Ms"Ohi(lu9.?\gp/OSWe4G<)11rN at 3))WX,K+St?dBoJouH\"8]4oX&pqB'!oB0@/j5,H./
%l<cH<J+Q2d`1%a46OH9BVr:#fnh1rF#lXV0rZ:`u6X.J)[uEt0I!nPVfb3P(AZicnH1.&o6NidIc2KjN>9CYq7+*9qo`)Foh4:q+
%&b$.r"$?ks\BA,Se=Pa>^d5kbjn<f#C(Ihfl>42'CIf7CW:J_qj8\-4)VdR#]mOb*Cj/A/d8JoKd7>MsOZH&"[J=BHf&h=+YYiU4
%;1#sSeQJ2kXb*OsZ5ncW,'934)],>^!%^bm!3e$/=d.e0`RL[kn!AEK]"i[Vh*7jM;/^A-q@=rJPDJqNhRl#7Gk?$^)Io\7^bUO.
%O^USMb%`qD/be\S7f7aT_*.U)&-9G"Wm2'_(g>DpWodZaV7dHjeR!90j;^(>9FH>EOZkus^^\)G/1gPI)m2,'9b\V^.osA*GmYpO
%+B2`(>ja&"+3frS$YW"s(D%Z%1#JI]:,UD,a.n at NdA4JN&g``tZ$Er/gE`2f^!(4OPHZF[Io*DcJpVnPA0.*/P:4#U:4(cfG1Yn\
%<<Ze>,.702BW]r<\QJF/06-AX#)0\Ld2\8oG]*N6K8B3Re=srf>kPG<3.;@o;2Mt/e9#>NO6`oD_d;8E[T'q@/e6.]cJ)98]H)d5
%kZ"FYJBT#9I#hX)&g*082d\)dSk`ok#t'@]ed at 8d=tJ0u=>.1QFtJRoWJK,*cdkE[<rQ`\.a(c(ekq"O]XP0pYcql94&[ps9`Z at j
%o)c6I,,?NY<n"d9P4Asq$r!iM at b5A7'abkDjL$:D&cI<]7B/H at F#*4HZ]5A9Au.,Xi8*+]_fcRM/kk"=;m:`*9 at H35G>%;Y0eG2t
%d2ko'Y?,Va%?Pi0bIk+*#hGY&5Qeg4^U20h=e\,dSh='7Kuq-'88gWRq_O':ktr<I2F0BdTL7q;HSG7VL!6(+XPZ5g9!RdC]PR)i
%.(u.qD3ora0F7aaKb8gmH<R7a'N[P:UU103NNt%4fB43t at Qg[=k08]$b41>u7Z4!^,Rd/krlhBT?83)k,'Y4sR8Z.U38bk0#?e)]
%%eZ5E0)R`q/4[nRRf@"@5V.fhUTrJbK7Z($_4ll\Id!'^o"EN6BIrCbH7K9D/@sZ:fjZ4<k2YkOL%_j52c?_?k"br^=`.n>G#2qn
%&&bnMb6[M!0mG*%T.NOp6jBL7I*[R(r]bu=+#>B*j$uX=Z(Th=Qp6kcW",?.BO4`(Q1N\WAD'4>RG$iR)59P-o`.U+7a"AMXqd'g
%V=>tf$W>)9d@!"K9BA3d6e/8GO+Y5Z.s0,#r$aP2bbt[P%1s7XE+Z`p(]2rn0r7+YUbPLhJdTV@(5jJ6j)JAMKZ];4S4o21La9(F
%.g,oBRhq?cJQ5!='Z:W=7?n^I)RlY1OWKj@,!?Pt at _rgV+_tA5YoF.Jk4>0aO&/O6;(?56+=[HYEic_VYZ;MfTArph6dtHpH-o;^
%`$4I=J;!BYj=nbhF%UK=5V,c%/A)3'PqD%=BPg(KmA7coLR;Y%_*MkLnUR=oibLA@]Q3j[`SWp$5`:&`420.E"*&.7dE)SA.[7-f
%pF7'`=63p(b*9`jL+l1)Qc"8+;_O&*WrTE&@)tYdicd+46_lc][h*d,5(fr!cThJ9n,Y at V>KO*Ch8iAWMWMW at O:s_ZG=iBs*NopZ
%@,e2[Pb,#A9_Kq%NMb>[!A[g(X^dFg!/)i>MT<dr'L"Eb)A=Vme$!oVkS:6F6\WFu,i=.aZ>Mf5)CD1"=lQWk4B:(9Q#<cTh(Vj[
%<CQ at -KTd<`M4<hb/e[TV>\*Z`"KdZuBDbi^b+:Aife>:L%'/2e=Cd.$jUiDFraOC^5FU at M47,lsh at 6Bq8m!oLBh00WVA0XE]/$d,
%`00o*kcCa<,o/pB(a-%[;B2<cAM*XP>R(OiUi=t^nBGc1lOFNH\X`#+\/n?Jq&.cVl6n/=ZbNC`g'f&.Sq1-[1I'33a)VQ'm!?SG
%1>HssC/PkQr',.rG[9kMdh\bpaJl;qML?6:ob>3hH=i5DRP at _5h/)q12aO at QVHlT!;R_]Y>^RJiC+J#W-*F^/1,Y=U_5=*0%'E_Z
%(+BuZ>R+#D\)mol$N4O1XYsm66/Wui:HGc:"r at k1'X,O:'mBDsGh?"ag-i),-[Uar;,K'?F7=sFPadfU3C2c9XU^g0/jJT>]rPD@
%b$uCA"tp^HQKdtH:4#QmbdX`%-nYd5U,iTARnBg;ZuTI2C#>^I."[$l8CTnaVJ<"<U:mRk=+u*>VhLVf<4aUgr9&ed[/\O^Yedc*
%;6)0.$5F+k-4uR=DG>&7P;Uim"jdk'2LsHrh`3 at jasWhiBBm%.X*B:`mIh[k`9"Ueq at D$_cdP(!?0_,d:Q<Yq^U#$&iQFjZ,5)i\
%p/5/D28qdY=,U4RD3\0mXOHn^e3*>.5'-ilHG#2ImM]mdSXdGBU+ap9Mo0]"Dm;+R)!Wc^aOF;ca-gXSYRp))HquNLO8/mL^W?'\
%Xh+B[jGGLLE&HOlq:l]kKFVe3bMb3efI9.?]%[ZU]c6_+`T.b,q9CX`L-7V'2?pf[cQ<h/EA=S+>;n3/3l(KUq8_hral-\]IIpO:
%>]2J&:^Tt,%4#`mLr6%jjh-d;RGX=Yf87I8]Qj-pb0F>1%se0A--3a'cOKS1F5GG7bf/@Y2Fec%rAj`D]Z$DDdeB0^>OslO4K#1h
%([J4eN<L02))p$:H`0W5Zs7=;>sEV#W1D at o3NW_9GWs?1Jol*aSpiZ!+-OK?YhE\P96WIInpVP!7Si5rBe6AhRcdV-#(lX2.S0A"
%P6ti3mrI2-c7U4&O4fj]>3!90Lbn4nK[4DTL@>$m3oo1NMmLl/3C+&*VAD/sRYUZP?kG&Fj56h3]O!^l@*eeq#f$h=^@CYND`.Jg
%$aGa`o'577\'pDUgTm\Tgl'NrFECeBkk*)EbV(@\YMX&ZH402j8ZuHuMkcIT^VaV:f#[?jIIs&]mkjBVo:=82rK6NS+5qkLq7%u"
%l>Xl$#2/?cg7ZpY_;UXQS/ZSHr"3K:[rqXE$dLP`b>"7j%DB"N$UqX8332\p7AGPuV7`3k?9P3Ir7gM2%%X87Ve at X(=Zq3D]oFNP
%lI:<h7S;cM<p6o:FJS.X&t(T>7\)FX0)g8YD91P53_d)Y1%p^WmI]GEF_B3<nM#'THBUEZ1o;InpVjt1]@65UQLe@/+&9t)Sbc7E
%jFomtOeK\S]mNCQoZ%l!IL`Z?i2pmpqs5GKGW2<HHCY8npNK[+'[;Q)P[%SES"*?Rm9nnKoq:2V+db:LNapC]SYCC4*h6IBh*1^s
%2$gq/%A+"6cG+e4W_QpHK&rAlJkjYC3\>BYkZuq=UJ?GT<GKQXIXPoLF;d;uIJ)5'UJ at 68NV>T0f;ZZqfY at 8XVEan245?sHdsC:-
%AD$-(<t>HD3dpZ+lV5\hmM'>.1Y1k9GPh6r3S*TiiFk8+m'JsX[5rW)U3T&\(4m(Ko.tdtQU at p&2LTbOhs%e\DqO;AZ`q3_SN:":
%A$#kU0<Z8l:2_cUc&^TU]5FP8Q*2^O:(^9VDEja<4k9VLDt2c_ at dM_8o_*>iW?gIHh+jG at r[I7LjNIC%Gurhb2!FT-5+!Ed9"LS5
%DuKRYoXd>K3XqY&SYBFE='@Ik9jt,oO at QWj4>5g)(O&In>oX[2,:s.)hIHgO^!LkY)ZBTR/DoDQh*qKM<k+O-c\5,\QTiYbST!ms
%&*YqJ9O4V8i<d9/^MlN;BpI6sE2>)"37]m#N>36'USQ at 3lIrFMKdZK]/Whl`_dr1=h<?*/[l[Na_k:nRg9L2dDC3eM2P_)LOjBgG
%BeGUW;[n'IB3_K'A1H2K7Q&mgUj2A-QmFWYjgWPnC at Yd)Fr2d=>V!_$BYAXHN8*8RRKL#P-g3GC-Pt7ENQ.rp#l!=/Y'iAPmQV#Y
%;X]%8HBik6X<"4PG:hja_tM-5k,jTIkWsrH^N9p#Q[R=UgA#N_dSCapFgrpuh+lAUID"brT%u'@g]#TE6<!d<2bJK*DlN]2p2-^,
%T8FK7H2k\T^3IQLO026nC&I[a8Y0_S.P]LpIDcU)CO[t;o:k3uY6R*m1OSM-9to8<k)L0?'9ppNSG0:iU0G,LmWfbe4:Vu,c(
%CK0&ZceNV%_m^rgEh>,,=N3oSHBJK?,K4'igaeCFH(<<qoegKB9AsaUoM"l-iG,_,hMh#RpuDoe8r]3Z3PRKh?-Y[kF+[m'2KCS9
%(Q%,p:tF[3i#K8n-4S25`DcW,IpY^3Gba5D`(VZ0\ES_=D>r)IbK^m4Wb3tTR*-eT\FUIl1T0t.76+/2]1;&+_aiO.dd/i]a02'L
%I&eG(r5q%uf?FRZ$6:aa=nk,#e3`gfJii-_p?CooH5K<Ichq,'.GC'UEONE*CSt*PC7csN%O0oZglos at q*7>oOP$IlcDq`ikKUX.
%WcP\cTQq:BBMoJEXb;[S(WkIuZ_e_d^:#:B_`EQs?^<95L0iK"F(SPber.5H+BpC?kBXO8DAl,)D2\XtjH\+egI@)De at W0/Ecfhl
%*Jc!P->]hlM?e#k>R^T'*b8_5it.#I%hap$1I<D("[1-f1/g)5MM/ZrBYaFpXQ9^>Mr!UrF8.*^df&Sq>_1:J`tNlXQA^@V*-:_7
%#gR!nhtJ2*.IeBb^5f=G$[^_bE2"pr#i7c"51Ka2"'gr$5-#S'kAVk^,CI\A/AZ[Ng;2Toi at q:]P`3F/e.,e9E>L:.84=U[XRe[6
%fp^XLlN]M]bNJ=s#rj815P[X1N1-\.#=\s?'3,:O1Gt.<'nB+NOUn>H?pXj6(l!2\O-D]9Vu1S5r$mp=.P*d3XfY?\G.^\MBO7KP
%IEC.t&"V!#@Y45%4j4AQ9ah,%1b[ub^0>GB7CV8aQ1$nX:ZRqb`NP]1hDs#Kf[VsIW`?(W>6N,9I")CYO:hJW\3b/,I'L6*A0"IY
%V"u9Pjs#;.TWNPA``#"^Mtq at 2TlG8h8OGs.E/i8Xg`N&=?4bo<eAk=Uc,]8S6F4/WDr4"64VL6:0i\c7*qgGF2C#`;JK`(Da9SGl
%8(:Kq.[WAt5DA8-%tamA"03IIUE5._nGtd#>Mmu,6EmJ?qj)dHfD`eJ.=pf<MWV]7AFR7_i%=<R%auf&8tiprS5?LtM_!PgJNiMC
%E/EaiICOe^lFOX7ff7^;"&AJmDD<)al3)of!"8%AE1LYKX0E3*MaZO<MC^-a$\(- at o[.7>$:).b)QS_-Y8TjK?PtPZ*e#kLak%oC
%%Eb1=A:mi*nsKua?U0Bf*t&9c,M5Ail>h_'@BZmXZ,8i7s,_'eM[l2QPTP+,36Vn6RgO^bhhDDY\25V at K0Z4[^XtrI<u?k[!h%Hh
%QUL'c#fI]W>5O,R!CsaXiFpObF"Ndak8u]'3#9/GC+SNKSq8D$(3*6^G!jT"]!J#YX"<dG+`1JQXiNVdW+sE0SAD70HuNh4?Z'e!
%p4L?X'*BX4)U/1N5'31'0!"."i(/'p\E^%tRMR!'>pa>G]>,9D>@0#fF6P%LctI+N-?q?Pa^H!a;k)jE$PKmS7A,aeqRdJ("Z7F=
%Xiq]VB"i=hM3(h*aV\O/k^>;lcL"HTWcJ&IkG<`!!ireJZ?eV)\+Nkio17G9Xhm%]!r4$R=0K,&@;AT8`QR<>[B3S1#aq.b`j*Fh
%`Zrl]a_[?G]ApE8lDHtU9G(rEgA<h9'q)'M668+d].?JTT?D)l)t'Jj6K at I>(Sn?TLlX9gGP<J*HirdU20R=#&F+GL*1iLpKmAS+
%10!OAqI8\>^0IQjS!ogDMg"_Na!NAbS at 3O_o8ZmY"dinEH#`quq^#1_DTBE:bffK`\+>bBh"A<*>e?So3):g!PtD-J-q:5PBa]fD
%;=iLJ_5?(h?)`-$MV+2-\dK%T*A0_/o0^lr/[bs8WV5:Jd1DQQQQ\,D;/&gY<M36Oa@?(K:t`,35;l>poW`O)G]+c3QP[)h9=5V$
%p0Q@*;:JHQbuK*rAV88l%@o0gHWD)W0`B[3?Kt^Xo(X3-%I%SPWF[/0N+]g#VJA at 32_goK0_W0Jh@7IW(?V\g?8%I)Kh5%#(^fs#
%Q6</DA-CD:2R5&.cZ9sL+bFB#4IPdU)'jtp:ea%*N7u"s.b1iM5:GfqeJ8oYUA0%,^%$1l1;1$S9^KZB9#!#?BYEJ]Z/V:a^AcE8
%gGQLic`:IBW1Dhm#fe)\\oRh!1"G!Kei5Ci3^9h?k":LQgCuaQgsSM<OdWU"pFRZJqpK&&p$*FJEm0e&i,pi&le+P=q2X%=$9spf
%Ld8I/UecchJ3jG:7_9EhO.#+l/i;e2G^bE`L5cWYRLYB+RaRJ3'5\*[WYH*)*OT55-4%!;6??7*N/m>rBWQPc;Pc6l#)pT>4h[\O
%>\FV6Te$Wn-BAZH?!\Ia[G\M>/V5LrZ:0*mZq3iq[P?sSEh_f-C_IVR.E3"X>3F750!n3,6kEK\d;8TY!2P]"87Y`S#&6dIRPN_t
%!\1L0gK<Pf;,KG2)V28Z6d!hY*JAs,MII7h10Io*Rtu:s;6g"A%@!Hnl'o!4hEhp$Y\ruJ6TamT9+R at sjZ-T>lo`eWq^Qr0a&`]l
%)O at lsqj7'!@s`:YEFUV/KJCfU0W$(MF_B-2[G!8%?,iqi/kC4G!<L_8qL89$"$e!nXu0M\@YL_&Hf'G7nW&l,UK5X4F'[Q>;O30[
%>J"AK"E]_\d*SEM>:s0UIH3_;6KR)@KoJ!3FSJrJ5oos5`Q.=kP(9b=)e^%RgY;ehq9n]rFh!C^0;'n=q9ZYI1"mVWZf><s?;);R
%^-"MA+VN3]ItI3-^4[N\`'.lR4mT!"Q8Iao44YCZgIko/U@'Y)V$:_Cp[Rcjij()aVc[tjf at j-Pfb8I'%E%Q[P/h4?iNu>]p$!eS
%e)bQ53[(j^>4!'i5cAKpdU6'm%F@$s)Jr!9AAf"A]$%re_#fQ57mB,lmq/JikfLCeDJN<6 at K7=#a3:j9;0g_nn)DN2Ius#U=RrBe
%+)gl][MT#+>PE)S_bqW.k/?sWZISa"T#mVGQ\X73pA>5Vq:=)2NFtMiEGW`U!Gs`<H#/-Hka3uQ7D*WAfesUY*sj:]Pl5"M5DNQM
%nSA-b/[ThSHe7u7e&.3@#S;ra8+.:fmHq\iS<=>gfe?lO7GVA*=SF&o+.pD>cM]_U7koj8hr2mpb\ld<_dm[NgZ%pR%3gerM.OWB
%I)]X+]jK at e;[p^ONMt.#`ug4NM8N0ee8E7rgUA`"d<aKu'<t$ie:-$i6AN`2EBa at i/.7[n!Ti4$=DmTbS?C&%XVTfh?*Wb#?@6\K
%58MEL)Y<E&/5+AqVNJdNMWH1g&^0Im:EJ9PQ?L2%!q+T"%[L>U#B[$mUM.WE-_8?X2(Qdc&<:;B6(@etjo3`3jaNE&/bb8&<U.\d
%maMl)\0:mLQFQH1)`U0C.*$, at H:?>%\b=kAENXmX=_Er#8nXcf1Ib]ckDd-'%a,!76>'`kos4uO?1X&.'![p&;O)_?+m*QiQYo4p
%VUh__(--3u<^[KOm5R9M(==4]l*`1+NV,%!FPGUt0Fq"^g]ap.D=4sg:i%9X2K^H=^%UiO/Qo!m-:].*:RV($dk#Q!m9F<&nQA;e
%."Ln.SsMl!##>3*eqEDS][NJZI5q2%6s`ES/g[*[-c=77I%8&0(/h8U38YWLO>tG5^F&o,p[PO^`fc+Ib\*eY^F6E0^'G5"_]tKC
%o'\peFVnVN,Zn-+NG@=Z#e=LK3-tSW\]T-oBq:4,b<)OaAl>oQ#g0Jg;Qc=e)O?$/(JF>"eu at OrMl9mDZIAD/qr,"CQ at 61XYh.m4
%ER2e4TT\o.XVM;iLqRj.KPE&-\[),Wl!$^%_DmZ:r%ortk7apCniC#brp9WhNC7)0-'XrGB\us-,--?0<>pB(4ZN4sY267DTO2O9
%#NmP@'AXAn[2eR:ULB"kk^g at i%=9#OOHm0_*bR,4](TY>\GY`06'74E4LM3-Iq.9a%!.YQUqLJW[.dfheRsNQkVHjDmM+6q#5QpH
%]V3S3`S'IH.d9uQ/X2mU8_2E-L(;WZ3h=mOB;=Q%[!eS at H$cHW$?c0#Suq]D$C9Ol%.Wq=6cM!%Tt/7aJ?f*VB/EWE'8OcP#K#]g
%FaB&aYDk4E*"1q9b at n8F'l9Bt\fM-[39+m4n,TsU*#g3(3:%s!XsIn$Q4'BgPsUDp-C8jUYgNGQouLi#LKC%7 at m&OhSPVQ-ddCqq
%m%pU&VPf<\1eCmEm=tC,A/A`71I\DUR\_R92RJJ(/Su`Z7e!oTMaC>FY3cDHU_hi\0#hcmM?s>a*6mFTGhVc2e;0m]D-EsZ3*'Z$
%4J,_1At+(Z)@)8\Y,L1TG1<7/@%"p at 6PiJWZQ1PtcU4\JR/^PQ(t4k2AA)fIG-(#_d0%MLZ2eVeJRph<M6XJ[D?E[(;%eU)74[gF
%!,&kB+BlYmf7n1u%QuUO]r^2Xe]*^'j,k?c2a#l7)b'I*)/Z0k6>O\N)gcH:H[Mo$hTcX[b\\,6VdU'Ff2HA at A(Ji]6/$Kcp(Kd*
%V8?0`/(i&'Z(EABkO$[(-oGTe/\YV[?`9g+%9g,$X[d8iS4-i=U+P2!]aBu\X6.N2$&]Ke>NUWS?Ej(TmCX9I0lB3/VCLnTo4%/6
%+ at Bf2Rb&JO*S.[$I[[AI\Y=7fR5W/f?B]a4[b(eB`a1]iA#%Ol>:EVmS9'CGC%#FP>D>/sr1Y<=?@3[u_W"?"Eubeho"rst?*\4K
%:BuNHCi[To"K#4h at D8`n#'V8+(G5KYAP,b;T,>n#(q[.r+G1,^a`6$!`L&g>UX[?VBc>F+D+SFTOGJm$gtY at W"DN9O:d;SC#+fZ$
%'cA9l[?#jD%$4S4;4*kr"5?Lb5r1DMCo^D$H!_&>E4E9qgq59Eg7/7\,MXON)Q(V]md&fL3(`gJCN\p7$YL8<HP<8ef#.f/,l(8p
%CM("`<j7FC/O\FAn&o3X(?\J*6^%Y)FoJ#W`mB_NaK\4.#!::8gUY[g$Ld2)ddjsj at OW*f;O68E.Q]"3fLDP%!ah!3Z&_0I/i8>L
%f!et/-<44dkoM-l(YYaX?DQ-+2452>%_^PfPjCk"g!a[Z;tq`nR@;e>*@@b\?"?/CN,=]=V2mA.E>MZDcoQ/pgSJQ;E1tsB[0E9T
%@SlH`E!S^GR[n/URn8lGZI*&)g=GtCKMQo`LuRhAUkIImG1kU<\^h.#f!Y:SPA$r?dP;gqF#so?(t2c(lc[N5-j4hhkLVf;8@[6/
%RbABa/mI;l&n)`NfEUTn4#mWKJJ>O5DeYUGD&1-i5.SW>W9BNjTXm3cf6ZHM-V#=N4'%HhWfp:*-`I#TiG/+L+fk7bB#:6A(9T3.
%c2!ao1srm[>d="X*pYZ1l=<D_!<_'(X50EXMd6]$]WHQ*S at i[,:S^$Ebqa]mD2[33'%WQ^KlarZbj92/--9J(^&D.1Oqu<jHk"DV
%ZJ,2+dk?ako8/&^pURt"55Q]=Hu^!8i[D*KCn3i<F49iH,a;pP)J64K(@?!M.O!;]C'YZ?1>$k>D20C8Y5,<oQMk"RK@)+KM_EhS
%`)^$N?\p9pCYu:q*3rkn\r95,ZES?F'4aG5mBpbQC(m9-kD-KRORW'"CECd'=:1c3,HXK!/-9nl]D1r6IR&b(I";Qmh;iY6j)&;L
%dn\CA-C0#mEk^/s0XVh#SPTC$";@T7>[/*lQos<[s&n9?C+R\P]id-NXjJWE\74XJ(Ame5(r1=?1p at uhOS_WANWs?H*lT_[ZPhN?
%L3_8X:1(HRVm7?cVD1V"hF.\\an4.E<b=uC>Itchgl`8N=5utJ]au5(a%r_SZ?!EX'$Ep(Z2F=/\QCbHl3(%*-XfnK(h<8W=KjBC
%g\X_4W^F5IeqZ"I-F>q at Ciu$^TZumJJJMmtiUl6fLh/sn3b!@R%gc!;hFK1jVjcpHj3:=oSg6/$@6Bma=GE>aPuuUs*8X^ICZ;m8
%YtSd0Bt%Q^a_PK_:VLXiM$TK0(@Er>0:QR&U2h:7>DoqRqoN?[%VpE3+2R_`kEoDAH(Rm<#BMhiG`t)DJ'bUA%9 at lIpsekB(&bd@
%'C-B"L29AkR`Drg]Pu;M"eC at Pf+1b^2u!.dhjXUKX?A*.Q-E-'ff'D?hZa<$Ck#\UB<h'WkFQmGqHR[<d;]?<g,EP?\^T2lO"4&/
%rTmI(_t,JhEMlj@%6R]2MCh6n2Z3LH`Kn^c/u#aMk&-K&B?.:CadFg'I-<*gE[A-2V0aZan_IU^Ei//a1L52#j8PqD7Fg6a-E;8e
%[H<omL[/"oWn(GB%!f%kE)F$?SE"fGWjY!TT3YEu2jW9,<3<^.)J%q_>Z at gsjE7t]je?K!E+6Q6N\@E`>Z36C-LCB!C(5.)qiQ)I
%;75PTC,iic(G;`=j=$ernf&BFCHAkK48,Nf<GSb:-CWB.0<3T>a4RZk\%&A?F%nMqqcdB+D)^htY,U"?-LBrjC(5-^)\$V9B.NXD
%@3/V-_n5;)eXH3-bkg.%<3:/er&BI5s.X8OGfu^c<3;L,Wu""/K8Z`e/&Q7:MX?Yi[7r_enWqp8<,EUnq;[C5mH,YJ^8TaD!i\mi
%#r%Dk2,2BQnLfkgEq\Y)1T[EcgFu.Bj2Pr4BA8Idhphpl6#uZW(u%0Y<.F(ZU\&@Aak8b3]!7BfD>/-NPOrZ1Y$5CpmDs"<PEiRV
%HM2MbBq(u4gITWHi(Q[7BlBN3XbsaC/j7qn7HiS$]4$#oNT=ohrQ5SuZY^rggV1)N3'H$9/tLCLdMnupgON,PZIg]k>=l4,ak8/8
%]NojWDWf!q-*s)bb9lK,2Ws1Wl.OdD*hDBYTARH0gJEGA5>TV6JP+G8:XcZ;hdH5CoP?lolK)/bSXuqtK*KHNEo-,bc:ub\c8ME%
%%FVS"fET?BijR=BD'WbP(u+0*B'[Rl>@VLJ)Qdj2[]/M.6jsH*Ps7sg[ZR)^T3Z4<P[8[E%?Rs-$!X3<)hOlPS$7$][Z0?aLJ-6c
%@'I*K,NUi,]N4:=HHI8`T)HR=ZPA^@OihG)mVMJ_AU,A#s7YgHo5'\9B:I\lDHkIlhjs.RD%Oj$p[7CUiTaWpo'P,B8K3FhRETQp
%2 at s78hOSM0H@o3=[675MHWI%9*qb7m7t\Ub]@"+YlWN&7]u+n+L232s<doL=KkTM*na0+eh'?Lc4E>[J)<8k5iSVfqhu6ZR9es_j
%0XdI0EJI34)?7C/nI;fb[`fRIaK49=`]0J!Z]"^.eQ\<mN,dBc_QRO0>=T4l,%KF-a^@?T(tY8Uh.M]H(h:!0`bjLo\V#i\_;<3m
%j1gp8^27K\Af9VEGnrKa(tXZdh0m;Q8aPXN1WIC>d at Gu7l=Ptoc2MT:`Z<VJeN:hh(]9T2&\Ni9j4iW at D4WJ"GS7tj1WIhTlqmNs
%AW.SWfIeu"GC4&:6,r]nGLg\q1%%lHphLc-b4r7!b8?R.,Y"bI438<e=Z6"9:JFc#N14#e]?1u"G=1do1WC0?$2;3$0u!<po,D8"
%>KN5fA;j/<[_A65on!#`@pG_DmO0qe04S6Aq[^H.0lD8Kf1n*@mFs9YaVZrrMdXRCj#1q'G*"FrqbH)lAW3Z7mX?Zrr5UY&Sh[Ai
%4)13]Ui(2,N,]#\l&"LBAW/]MSr_dO(ft[Da5>&W[rH'Z%Pl&kT;D7FN,e7<:qr2Kr\G(Ah2H?/Xi:%`N,^_7m9D1M)<2K8"$=XB
%fA$As9,ZcZh"SC.`jj-=Y<0rFhaHmNT/!K%pNN/_:<jm9p9%f8)<2Kupl7,L*HoB^O#+d%J$SJWpUeQb[r[2\cSNT6I,hib(ruW\
%Nm:f*43\U$[J4p21%)9u_V%Z'\A?nVEQ7dVcQCW^(uP>j1%U?D^!(ec1Tm3%re'QV3B%p+q7!ZIj`9E'hVZEbQZL&UX`*seiJ(jq
%Bm."V)fB.:>A&`7.E#=1qk`Xu3B(4$A&"0I/d$kbKmtO5gcDcj(YRcibkg5?%QDS4hd(E8S>NEbZ!CssbFNBghKPD//isXf]&U9*
%_e%$JfWP-tG.>glhnP6nY16s0-Tc^fI,n#._bKaAG*X.$kD$2'MsW,Y>TW<V\!Pgl%[Z?FN)fY4lu5,F`U:(MATM^PM!e!D__!+E
%GENt!,LCC*HjA?`C+JPXZGXrX/4A:l4?Hek**N(5IZtkeq/4&-g#97$WFmIE.Q^n\%C['@Y[r"Q2Al<_0T3/>r@?R[44rNJkj!'O
%qo#ti%QDD[0!iIWeI*AZ\$Eno:2]l]lu9KudAuaUg#5,+cH*2#LW]ddD_9jpG.>b[AC&foZbp>b]:`I-8p7_qg[dM[iOY>ocEkDg
%4SdU7_`*sL+(U-Gbfc$Q_e&4:\bE]$lu8^NS)%\3X7Q(8.m%!*V)F6QQeC><DR_i6CqK''?(H0Om$GV.VPmJN-8,j7\W<g*+>Mg`
%2gsoVdtdGsTZ/qO)BD at +-uPWtX1Oitgt9'e<Mn.<^=FMQFH*:9r=KBqW_\i_.:o-c[6'oT(pb#g0dpq,b%ZehHQ:9KA&9kDG%Yut
%L1\>RGM!)A:,nC[8?u:t!O_/4^P3kFA*13`-"%rZh*<&\YU2nIhni,IeG3OSCXG4.Z-t at e)'8,>%[W3QJ$mhs(P^&8H)FB^DthOf
%"3+m>KeipObpYIb9ChEg#U\'\c^g(':$KftmU^UP8*a4(O(Q;Xl0**N#Vb<"Fe/Fe42[?]0KR>ARu'NhB+3QD]bmmU\GltgCM"pQ
%r'/:%f=U-;%tPqf[un=@APWTAdlFU"pPtrd^ec0]*@Bol;QfB_?mheqYBSH`VUEb.r@@:/7K^RRNpO8SX>@C6V=cWc[_is-jSHFE
%'!eEZF at U'Pa*[8!DB&bTF$8/VG\YsE=4CR'*i,rC\X;G_Sdgk=6C3ZXA)LX]?gC.+>FuI9YVd$(]_<H!SL0-8KQ`M9>:2no5B.UL
%BQp0'n1n>9SiFDhMYO_p7i6:[UZn]0ml7Ig#P\('O:8\0_mNW>rcVGElat[IPeDJi>N(*o\fTVaFAnqbrH-IDk!"tb,&hShFuSe,
%V'l/kXk0\X>H?LLcZ!]dTRg]4BfhkmFrcr]4`>AiY%^oqAUF,&d:S]9U%+4HhfQT_Bb<t>:Q`-#$WRUJXe4s?`pE'_C_/@/ht"ho
%23$i)O4U9V7n.lHG%,soc5\`_YbM-*gr;7`KDUl(DSS#5(3aZ4mMiNHs&^<?(3O[s]pZr%eo_rbSbnB7GFJ^;Z.?Ni)[L?4R.un]
%hu8`?M_@/)cc?HS(oLndj8aL'[?F*jj&D"nfhQ>uS;?R?IBJ1pjkUkj4U/V.P(:60gf2?uLO0YX@'F$LXT_7smu,kT6-u?CNGf^^
%auM at 9>l]dh_dH=ks-D+k$<?9)gY[[8o]3DsCu\YCEo/RKfN'?Y"ukZe"*fUK8H<14h4qKF0Rg6qCM%uZo$R3RO,XuCagmsr.,h9#
%2=H1VNRCjQq<$9^DFS+`lXF#C7;?DU#Ub7e(2[o=Cj+N<'cB)e98C^+$%\:WG9rP0NP0c/81_7ET6.c8CE1?Cl6s&YpRDuk\NP[V
%\\6n*m;pZ"9pro3IIB]X\+af9f(\sJ]=`J8Z#&PG+UQf5&Bf%<($)Lc7P#cpkoT>%P4`WCQ65LOA]9W5)i3V:nVNrA7M+F[mu5oO
%$nrUCPI4N$Gr(AA(n/,!r9<CJj*45W%!Gh[_JCFjS,?%CIe#I->OL7i]Ui<n(2RT>5Ab at 7L!ZDgAdZgf[rR/SM<%[?IE5gRN-9#a
%rL-LJon33kh.'SKM]I-B?nAk;c(^Bg*4V)Y)Cc.a482c[8)Q^SZ^G#pYqokDXf*&"AF<JDX4$LmQY6257C13RH0oek[O&5meFe?n
%?<a"CA9Nl":,fONLN8WN?<`V0mH<*C?cTXB>)TM'ps`D^]e9R*a+HB?M5>7uL2MM8aadfLL-+Nih9r;f_;>N#/3!-j5^/BZG5\a@
%AA#M$a8k!qG0EC-l*IS9S&<3kh%c'_F>Ig35PJ!Blc5?t1t.>pHXR at t$b($H$Bn/cS8bq[?*7_YE at 7$`IB7GT=oRe&NUQD)p!i2!
%qE+Ro//eW=Zcas//QU?"7Vr=^dD`WQl!EHnZ]@lSii4ciA at q#Djh%XBQ07C#`p"N5[=I/"FGCoU,+2!O[hrETAukW&Oc(U"Q`l/t
%qp)7=a-gB)!rL:cdH"a7nUPV-:$^mcDE.A\lfISIm&O2/Uq^*B_eZEH8DLoo^E4Gu3]4\?f8$c]pq@<L=ZnSLT&XE=kOX'b7m8Ge
%W\;npqd.]DhGld(iq^rpF+;3S!j:J?0]dR/G9;2=hp(]1pYhp<Ug&'+RGccO50mR_X%r,1iPnH%.q:F5WGX[9A:p3b6+6=)"q([B
%gL-^q4664bV4V*(09-f<-b#Yq:cXZ^e.2aR3.W'/mk+!hQ//)&fOaJ34-%j=3-cI&[*_,mE'9h8i.Aim+1\&^*_d,Ln;P?nVf*QX
%62)OjFH^hDW0TX=(W.Mhr@%Q&AmZY'@k(_*hB.4<l"Te at q078RZTup<FaE7o]:Q$Xn^KPaWn%QSUK7?Y4IgBJ7.GTF3\ua\k7U\R
%)ntoort3&)V,Qh)A#=?q$nn2f_>H[%aY*jpK-4HH435 at sdi<Ed\U7!skO3%%5<e(h2rFFppu4,-/_*>/X)P+F(<'<3\%XEMDe/AZ
%UrUZbgb;oW7WZ!4aIp(g<42:sBGp4O2a$BbSR"6OL7_7\e4&5>EqB(e4SH8YiKT65I&*;39W77K#M^CT9c$S)[.`YSF\`[$N(E*6
%nTL/c"B.$@,0(`l_&d,7:@P_,pJDqTrqgr!7Wi[94tH?a)33lU16YjdJO]>-%F9?:0'h:gIi`.?\PYFR"bV`!S*<n@\!d$5I-/U:
%4;C`P-dZ;i)SQu[s,(\0HRD,Ej1pqN<8QYO0!f;jk6n:W%'>G$pE\Y`*dH/5dMH*\f at NZ31^3-onfZ1!o_>LP5/%J(8"N#DhE>%R
%C>S_QAi;_&'-$a$qKtH>:+%R&c[<o#=JjCs__*9?Id"XN at Vi)JR:dG^$]Tu at jIGH>TA`V-"GK>Q5?mBYW0<!*iK9^+c91?34Zf5V
%q&QuMH^MuIp?Og)b18>'d;4'lHY&7N/W/fi?Roe,XY:s!h at eOfB):tWZ0XG5%RH"t2oqC+^33T")dheDkhmA3Nl]CN at e2P:k@^>5
%G:_M@]O"*po8bAiXih@\MY"?^CsG+U<);IHUU9Tg;e7>HWp;fUY-3a<<;YTQD?mRiHmDGs_o'8+Cl\,%B#Bb1#B<BZ!c_85>e-R.
%W`M;BFiEF0cF7"ZqZus'j^V%j/,$JtFd9VaY$RNsX0c)[Q5\,r?eOH;oUGJCYFb]+O?L,D;^rK0M130NmeR$Wkm%]fq<l)NV:<26
%c%!JS=g.#,(Hk;QeaqU\1V[[d[l!A,42m4))8bal%IAor8pKCT/:nl(DG3:l(h]8X$]R^A\]j2MO&plBqOmYL%V5a7j<lg at bn.7m
%"3#en?OARmki_;V&Nj-.hU%M"f$aJR4[R*Vr"'8spZ'J3A]WeD9_Bd4_bA>N4@$f?Q'bHbiC;8`r&mTCE8takrV-hlTo$Rtps/cL
%O5K<oe^GP.lX*S(@ZPErH at Zgr:P5)T4A7,*=8VpJJ's3<QQ$qO at t)@.O36/0X0]oQNN#"Jj[h53o2SZ$3%sD)rPQZ`-rkJ(#;<K?
%<. at om&^F`m!`-4k.#e%pI-5BFBAZ)P0qtE/I>U+D<^@OHToUgdMom6)M*<`b?+67$N5*0P6\Ot./Dn-c5@@UfaV1CZ/Pn+l&PVb0
%p?VKkMO+M%RoPA1:@b=1eQmcbm^(.V.MAYHlRQTMFo(f\rcXbmB/A at 02d<=_DKDNC`Wb3h`<Z)r>`#Irn.\$YJrbJPqH!reLm)Y"
%Q*'.ccDN\>6`A[^Om+g)0j'/=dk6pRe#CO@;C!oAPoHm/*cn+JM^6]&q\.R_3`TNf&_HjN!QIk>hFt?30*>a-7*`K4r(F5HTSU<h
%jF-,g5Z.882d2_K=Lh at KX_EqmZd?N<=.Xh?jA$^J9t.b&1jX-`^-sjo4BisB+o2gAlJ`1I1]T"EYW271Vg)GP=P, at 2'76[k2I[3W
%E^=1#BXuQjGc(%OS^7.rgg!rPf?`J^O$@mjV6UC'f[k>!4QU26DSA."IA10:7ms/Jm^j'!,.E3S-oq-[pXukSFY#(As7%jCa\Gr#
%ad=42ZVpd.rcrt*U,b%``Q#_!b\AalT$1!WX32kYe%#cIb6"6l+L^]db"R`MDtG53;SOVO#F*G#Up_YpeSF1a[&7Q4IblZ4gn0ub
%#KEcp?l"tGl*HT1&967r6&KHbmb#an4cpHa,[[e at cmUJIC[)$_MlO,c??:jcgnici3P,_F6%AM,Eh@=m1@[.l%Ch'--0NDE]E0`=
%5qD.BFl<YOMpqQO^nZ1cGo$U;\*cb'?NrA\'?e2XpaqURkQgPZ?BkSm)]&]pHB<SCL.rmdX at 4Vn)<,\@o.H@\"r`n%@W at 58Ris*:
%I$jPMRQn[poa%r=,A7!hlE2:lW)p)rJWtgt"D3*ISU<I>Aa.OiDg^!\93EZgE]V<C<_"Amf<$D(iqpglKkK0JZ)^?K6b:<,"<"Ag
%ja?6ua5q`E_#\.Va\e($`"TIB5?$_e$A)[1At?`XRMY3^jkJ6QN?,Vc%:6R1acZ&OH$0O>\gSWT'i'mIH<`n2g>=3X*u3*d*eJ()
%gr*'"#o\"VP`in)\s&Og3bO8qU'F!C"PqGXEB"Wr(%0Q.rP;H(%=)-K&dS6r,j>F.D3elu*d[F[ke*rE[hcFi4[^Et+Cq4=TRQFj
%?4p,D"P7f,.=<Kb82G\]jZBVO8'@G8Set=Up)Jtup[EuM^.o$uO8W<%M:8YWhXf,9A/Yu<7K/!FU0[t_E7B*.cQ\u+@/o[$T(<X=
%.jLL7q'fo3p_hhtTgS'T]0+=J>;pKR;<G!Gn'mq)`D3aqUp@*6qq/JnAB4RdC/\TcG2Eq[Ju=N/(`$.J%"8pQH]0jK>oI9(\SNjI
%dc^oiA>4[=*[:IZ?4bi2)EO/)+T8L24,'P0fe<3WM.[Y%/J!r&Fcr?Y7\ds9.nROZDe-JKB_oe"?*Ko5*\1u(p5JB97$_(0Apq*f
%?6(33RCa`&4cA!1m."[oa#ZoP6bD\Z=Fkfs]^YO"n?u@^'_^#`PBXV6o#ZR?O70Ql92?g!q7b!Bhat=6%Tg`"G't)B4V+^[k-uD+
%>M_c6DGIK]E8OgHYbF^se9.18(?I/Ea;Ia7V2>"mp%8B-M%s(6nFFDjc;]^]7_[@8UquLu;u52:5#mejd at S6'7/*6L5U>\d\o;!A
%/VWf:"O7U,T!?PjILiR1AeI[+f0JJ)=FDF:Ro1]Q>#4>^be=ef<]h!hKdtXtpK>L[F=ZO2%k?oE.]p%/akXpt>bZbO"VI:I at aS(?
%_s!XgSbZo\b.g(bW0?;m=X`UumsUOE,j]In<9MQ+ at Or@i>IV!Q>3t?[-o7BcRo_GHee)V"p)(Lgm/dt+?u1*I;@W*Lfrl*4/6PR=
%80f`NRF<($!ugd-N]M`8l1Tc.j:eV)g5ifmGB^0N3qtmKo8G%Dq-Xg36u#:<**WPXhf'Rg'p]%pSX?e;oF^[cN495V04lF>[3Z*;
%(1=D7)[mKW0[e<WNjs&9O<?b at K=;2;Z=X:*\h0Z>?WW<8rB5>91#.tZ`W:<-pMKUN0^OS$i"M'(gnD&ZYl?F26&\`!Gb&UpN7"c6
%C`+gZGb"&`b;o3:6JJH;=,hH%<M$5rbRt5;_&CE/=q"^r&fq at _BMF4DTRn:djg&o3BRGIW7%mV!/-]u1^*MXY!sFc0SGi;g;jQ#;
%kp=/bMctdBhhGL\j`CCEZehJ.,C=eYF<TB-h&so+quBB5i[2J;*us%$pu4no>R`@`jBu/=;6G>D)dDqs.i9D^ffY/]M"o9n`4[nJ
%\\#^2#ORA&11#HjAhGG3bu+i at RDV/;),.>L]m)=lEReO&<DcspeBEfU&*qHs at V:j8Jb5PpD(b=4R-Rm?er#P!fB3g>]YC#.,Wd&5
%VQ)S80+Q:?(f+i<%aKcYjDIo.*ZQfZl<?s?k-KgZOLT]%<PJ?N5*UF--,dYMqo%tI=M4(oOHhN#"R5.7MGthGVOGPn/Jf)0AF7R<
%"K6K/m0f.[7*^VGkIllOg/@EH_G[&4+a8!I%e<'!(hgMrQ.<14X at Ajr`!MTl^EHE1iWO9#h[h1SEM>IEb.^-7$6P0WeJUDdJYo2.
%%[jVrbi<7@/VQHCDAME':c:L0!@KA4T(kmF$!pQEkXH;`C9Mpb73bQh/bU+b73bPIY$Vbh)KDK2<FZ,^EgA;.>e$G%#3R_0\N3Ch
%q[Z1J7-?t;Y((DNF=.#&=pf?SQ3-&ULg;U2bq%dgL&sdg:-aU1"bEB[-Ye'GB*(LH:;j6@*=ER@>_%Wd?P"V(E<8>#N<ICEjen0b
%hh'LCDSAa(2'Vh8Iq=ndCLh;._ISpVcROKC,af..SiZ(J.%6iel"hBC5D[\^ZYVAKc[DUG_!lcKF*-`QFbZpt+5=/sh,PZ&&\OH@
%CR"nk4@`H3.P+&5kfXT%8HQ65>?R[J8K9?%ZG`-#ImkI.2,7tT-4ZBM/30FBs/V21$kIE6)OJ"K"_ZZX6K;8(VC./Tq[_-`&+#3/
%f;4g7Nk1i66jK7O$GGX6&7go*2L7\Q_:4aU?W=Xqf^-j*mi-_g88C,M)gt0Xf^0C56cDp2r%\BCBDNhi8du:c:VI:9PIFnUCo'07
%V>4->NS'3]'lOP>S*p4tpeLeG/*\WCd9aChOQXpl:ul"-D,QVZVM$b:SaOQm4pLmE>@m6r=jM/3RAo9F(O-l*d%>m6GsCX_#%b<r
%qr<+1j`#Z2:5og#)*!211C%W5U%\!H_D)&rhpKu6@`rGu^T-;/CVYcJ7`Ynf\\lTQ?Mc'ZFh1rDP0K+1(lf;5ikef1?G3VHO#21@
%FCbt#dui3<,LrE715sT1lU89:fGi<sR&/H5![YIYP&r'*Jt:RQpqK#!Q">:c=@qMQc8C4:r\0n39qLJ at WI`OkRI<>Kkj5enQsfY=
%3'=NdKcj8 at P-ZihS;;L^Ic"ron"YKHo)eUk''[H*CEL'_:@4*khM&K6FUXeL6bsVLa<Tg*j7FVI5N,si]naWI at 9<=M&"KhgaOIj+
%KZ-^UOQlLT+aI8o36^X;8Leu<G at H&lS>hjR4:E_+a4lQ/o&OY,gl/E(6BAZcoW!]#WCE[f'jB#Jq<LPJ;D,\Z+8Y^h[RFgQKZ;;8
%P<4Te.TTSD at 2\+2&]XjDGb=8%DNMr<cIh/TU<Sq8h$&?6:8R,T/P:#W^Chff7qk5?h#n%_=$G+g!K(%09gBWSh\q+-E1$\0:3CtI
%Oh2fT%7*nL8T9U=Id4V'UuB0TK8D8DICHNee">G?,BHa)Yds1-%\c$k@*-g,d<X<@gZdOIrX^A$ZX?Bhmm/l087u@`3=,/@MeO1D
%<FDXiH5cJk4Y*E0?@#fDeFTP>GKOdZ;2l]`bqNFKI#,\]81/)aC-ShER\]S<]"Ier-9c.8d9(L'RNBsh[)tpn?.cF`;XsPSOm3Kq
%&kP<6gDD>Y2aI`agdq!*B"I,!^$1ZG*_<!B`7GG&#q1'.W"65&(,0/&'&9h`XoSiPH)uS.Cb0Lan72bL`%<nKap(BJg[$Y!qpl0i
%96OjWp*%OLL\gDc5$i3;_+]:!^7hgqEC"S1%ZhlU\$)BZB7gB`hA2Pc?fcM`BZZ[EF1?B>E<3E'e`l]tSpdBe*QrZ[.%&=,SGZUF
%I.8(,4lu$K\bI:>fPf&I*3NW\-lS7h\5YjR>]!89kHof)HCKg*H(/E*piNq>X_CbR at CCoV>8Y3qA@'YjS>0cElscS-":^fj3B'9U
%_ki&f>-L(mY,q`U`q:/7 at _Ya`RP!.SWBmlHVP[5P=:g?R9tA(2]+K+02dh=3WT$lBeJ]rnch7'!kjlGmej7?3_:1Wo$oFfEZ7i''
%6(6(_;cc"#E)MYiB>,&C6Ngod6\q(Z)TY\J(>`DeaF4^0=%PIpZaIDMlYGPs$9c!C^a,m at pN)aNA0)gG&P2Z6]PljQ1YE^+6ukE0
%):k?nV9_W3I;r'BRo8Vu.k:g.&3K1kI3<gFN:"\2"LsA%MB%/EB^t$8=YIu0c_A@%Gl at 3P.^RQV3o9Y&'UL=?SUY-n9>2)3;e2BV
%_7tK;[VjkTd3\:iKW(VHnguYhmNY]Vg7\p>IKFYc_"8SR1Z6Bk(N6I+5-.)D+pf&JlU4ZMLplN*_05:Ni#F3i6`N,b-Fu*WQ#&ds
%)E!7R>_[quNgC=0b9BXe*(GeKrHU/b\TasKku at 02&BMBrYFb8#L!7U!+kU_8keoQ0jS=`*%Wgm82jdk?mG2Z%RDU5_CcBaQTY]p3
%QgHbq9\ACCZ".I/A.[ZN%Pgn(Hg<6CkuAJ/c4GDqn+sUg4mJ>.D,Scj=^qdT`,4ou]8?U=mS!2A;r=V*?s?-\HW@/!_#hGE+tqWQ
%e28h2J&AFWDOAQ+peD65Gs')tbF,skSPkuJ&)CQ9oBg]H+f0+M;5\%9dBA>=GsZI"8MMo%\?8u;r*9]iVD.17&J0,jh7?8*&49^I
%GGC`;V<b((&4;B<o)u5q'>/I0n\LcUGbRB5&sn[sN%"ARfg[fa#^e53V_q(:2Fa=^e4h91Q0P0[ZV at piY"rT/9O`mH_?he(>YXQq
%hs786mki<"A:JW:"T_V'1I*>VQMWg8qeYT.7I0)m9As6LDo<sI*mh2 at 3a'eO*G)P<[mq^_)(mj1XW]I54n\&-\pBcqYK#]#(G)3W
%qG+Q*!u3d_=Lr,J/Xs)1("6TP)j`C&7.Ec,5!/Xaj'Sg;\e at 3>7u_pr]2,VAdn(p0&\.c'-GqjmBYCXjZPnPR)Is<jSsWG#pNneo
%nV>=[qtiZu\bhR2JUjU.);(i:1*#b!OpimmTrt*EiA.<kc"R8HSPpH\d%OuX82]kj(I>9qcN(6$GZR5SRA^<Z(R85R)t:mWn`X*p
%iRiA<]0)\$IRb2%Z/9-XKc]L_E at Q-(HS-+KYU=<Ep!142*FdF6_o`^=N,(91T4dE$o/;:j#.kM"nP9sDp,LoMU'?dQYk;3&e,/R2
%(d#5kVOOdg&o)7Ja4p(0G1ChCp"UodN'!Q!@'HpJgiFY44'GbK:Yp!l=apM4?4k.L*m@\?0HE+]>qV81(7AA`WRDZjp?rN=m1bn#
%4Hg%O,<FLibfP8o==R,ZLMNZYS$8-skSTPW0kMjWTO[69LEELpNOP-shY:q?n,[l[9/Wj2*D%#cEf*jT]J1/24UGI"YE&q?^5L:K
%O"-AAA_:W(KJL$U(fg^Ci5%9aO$=VIcFLfb$nEVa&msG2+Id2[,i7ZO,S\*+0A1#TE([9J'1$q0GX!06`aVLD%`]ut\&6Zb=fQh6
%Y9:eDRA.9:?7&eNH7`S!LhQW0(NR!"!&Abc*HQLEY'92LM@<"u:r<k(:dD^)>-2l0l8C=WU!DkLC3!'*=5IbtIrf]^,ZkT4Li$K`
%%>:9#`%oSgUHQSAL+;9,=UZ;:mjl4qAh-l)<4Ee$#BI`79:'M+ce?1^Ld!:`]U1`0jrdsF\,:Pc(tLZ1?".'2W4]<q=<=rVOMr'%
%6>D1Xp#)Q$7E0^=Ll"p[HGKAQIJ#5Y3m*AL;)Jsu0jf8rQg8qs8cLc at .Ra^8-GPY at ne=1t(/d!fSZ0(jfM$Pjjn&Um1DFSDb!gDg
%fK902AN"gs&7_hO#Sg at O%We.[$5p=NDPYgnCRRpZaQ88E3P1$%3d]2NaiOVibp?g^o7^i_#_DZ1a[MLaa:8(A?MIRdIhg;e6?b_u
%HGr_:f at p$rP2[$K`bBE<#+g8B&3!9+)<:8JOm1I5c#p"B/:q%L?=5RsgagJu5t45).4n^p at LlHL&ibfU(`@ODOIPaV^)RL]#%G<(
%&DDZ1oNAf`kD11Y%:,'`&D7),04ENUY3R.(3MNciooMO!Apcjg_b70O'[q-k*g(U:i?=?^@.Q)-BQf0+().Wpa>S>t\-d/qKPfcp
%MOZ;^D_k14+BBY0hp7>C#B;2bC*,?]bN[O;+t)ZXlnaZS&:[GYR7->o0;(NJE2-I:SsdC.-\c`M/!"/W(R/1o>HY$;M/^Z<DF9c"
%f&X/^0+bF*n8 at 0Wp9Ba"D/=UX<>)$QX$S#B:LVcg<b:</TpO_)El2j at d++l`J;i"$M/q][g>CQ^MS@$A*N[.(hos:g&;`sUac6V6
%nd5s2_0;XMV!lbW[Zu)eQhNB-U4Jm0D#Q9K=j>i4/2bpdn,W''jnU?;Wj\aurG[h2E9=1oBRtebAA+8\@V"@%!GVle&j_jq#_^<N
%'YF03cqJG!5o%jG(*=1\?dN0aS)=?W0kaZQa2DfPi\q<+m&QjX:i*'XGaCq"T]dA0e&ROn"2E>T'KA;X6!+lb!!Ei40\<g&YX:gc
%#VKb_>8$m+0H7qd='hBY8Df4]*'Z@!%Y5Y6M<KAX-o-uXqUEW2(\'4'1$[Rf'aBROkj>q!0Koh1qI;5#I3m at LkN_D/[M.!pX*dip
%=7c\(fCZ.t+P-oiOhj$X7ekuZ-an;%5TPmkl'E&3oFMj^-F\)Tq$d;I'Q!=WW=T/=.`BEd.,WW^&a<!XW?9BqXOu!aY?B_k#e?cn
%;hE6*&3H"9I1W_a4*`7^BI(Vk&- at .NoI?8TjRZ#<9/WD\a1C?\;87&7h]\eEhk-[81FLgW5e>Rh&Mj&\O2@$..\g*U&qfYifI.N@
%^SLPeh9rNi`c?%\JoL)k`81Y!UI$7Kb4*]d5R6pO9C0$)7SYd%3>r+gg'bd1ChYWFr(u=+Q]lKjn1dHY];cDdg4.tI`@$4h`Gdqa
%bm4+VcEORm;"W(T_1"1D`YJXZ';?7`'hS;#1/qoE$R'lU-pn_ZhJ;'u-tFu]XOLD^-K'HoE'^t'Tn3bn`qG"',FbsWJ4rSdcsj4p
%00!3$Yo)i]$htbnq\DQ'p$`r!/,j_Y"o4shD(Gn'p4DAih9'2'gC"Iu^$p^+g>F<BNJEU,&W_ujS&L<B>>ArNK]m%ZiolN(G-:r:
%l,VRRqULEcGgXE2U5u]Z at 9]N#g/)Vd]Ym*:Y5@[OKB^cHJidum=]R^GB&Gm[_W_NWGbst7L/";Ko;(&T3)A7j;]P`c=Wg&d/L&H/
%FK0_q'^U6bA?@Cn"d)[I0j!bGWj*/"52mL56S6e1M<L(Bet5P\nOXWEZQA])QPC&BF&h6"jAX)C&<bhLYGJ`$%0tnFB#rp<,fe:s
%DFc..?k;.3r;eb-$9@&)MgIt]Pc8hLr,l!UJucjUC67V"`:*Og,)=+5;LqQ7Sqai(]GTA?ArYo[_4imdo$^E07i5/Rl8OG*KVYns
%?;?77Q5Fk]n%,mOR8+PRf>4O.doa(1Rferl;=YK,C4_3OT<N(9E:H4GLPg/"e-(F,W>f]UiPbN=m:ZE3R_"[!.Z55p2k]b\lKK(;
%3\3fP5<"Ei7i%_m'n0Wp!akkB$>:m@^N&CtZLM(phj:KelD/fW(<W-^Y79"qLL'Sb[ZUEg;8*Vaq[N4&UO7]RXAH[(++Cj1U:1 at o
%@MO's$R3qeeNK%/_iU$96Y[-""M7/jk0<(5?8u?6op!?Ub+XbQG_N6<Hn%Zu)EuP".*n_ACLgMdA)2/S>H=XeJ^FXJ&M,N"5,;&"
%+3;hgXS^ue$Z2^V)&WfCVSYJ/>Os at +:Cjh0_T!F.o%q0\HBj3(,/U#Zd'fpZ$unlT/*k0<NSK1p)a?Ze;fc[q[U(Ykaiei-G#@2(
%I)LGKaJT>&D_SZ95,Im%BOQrq at Hi-$&#f<'JL$::NiaQVAp<I)"4t!pcrbIq!TKiPPM?h0bfoNSH2E4"Sm!:kG=B-86^i;2HC$m2
%B&_4j.Eah4OS0TrEE_80V956,GbL?`]U,uQ#,ra`\olag7j#4L80tJ#WFE6)%/0-S09B%Y8[;=3B?sD.mpOql5gUdp`Z-V`<%(XM
%QPX at PhJ=o#3af-&&l(*YPE5D at 1'-rVr.s7D^ZL9Sq#Le&fAY#kIeb3%Ep*&'!&[$j6WSRk)8Y"6=_&Q.08egY:jQB7AE)F3:TT)O
%mOQ&VNDFS117a-a>Zo!Uj_ts%=A9,S<X0Wt0k!d9W<+RTJj8\!H%s?=b/iicbXRXBI:cu@`C!U8A0GAoWL27<doZ__Q_C[7+KG]c
%:lI.S8dsmE6CfS7kKSJa7(Tu"UJ^F-4J,A&Y4+#A6Y^?Ofe;$WMqp<nF>Wtf>`i!tFk?*P&T+C[eK[UqK`2Fn]!)U:#!N/\8G84,
%p'EN"*;:^q8tOud_1WKVP_\t+-*B;9YAk9!N#qHKW2%UINpt.u)b(ib*cm#,jGfpp2NKj"I;C9D>+*AM5t(J at k?$>r3J'5e9r!_,
%O#b&p6Q8K8D'!cZE1'-8FXqc88"7O=$)c*d'Qpd.bRrK:5D^5]kEQk/marrQ8<,]^N0tX6R%m`Q4c<);2p at oME[t\Ffe$fTs&@nT
%2-XmLQm:TjfIZ<$F4tSLZ"LCgb`Un\efrWnhkb%joC6's+s\O,l0K.h$S)"DRiLC(L6/IJ.+6>8QrHKhI=<:EX8<7Mnb'-pl'=pl
%,3++d$<:lXOF&gqhgF<Pc``@@?gt/;O#D$YDe(00%e$9<_WFmNF=3EgN>0$b!YHj&NV678m[KX66uTh'g7J`<F":a+0p[6%S*A at F
%YoHV?2gnhokb,(5(>qSiYO>r.^QJ\_PXgF6IqQm&"+h%aQpE!]aMATE?ams at 6lN*IZ%>U"brA!>Qt/P,d%`qB=.LZL_]&TsB]req
%kLRFO2eX5-O\1)E:rQP26E[j/dG-2Jna<A*pEqdF*dE<O3/+1;+[ZQF8hbIG)DOE`!ruI>L`N.NNa]En^$*Re;,9!\fIaq_h?%pq
%aA(R4[D3[5$c">G/;E5TTuCEk?4_"rgsTZ9CG3K'grNqakN]@l at +S]rp0Y88)!oraMHK0r/;?$/!M>N#faC[l.JCY)Nm[\DS\`,f
%7r#r7N(ecD$,e)h<Im_t:F@[5*:Q3Q\,jm.r9Uo`?*EkFVfSN6k%rf">R^;iHt'iPf$tFr\!Ji/N6gqI0M;.3Y56QDh at 4+h2fL7:
%_?(=0KmLL"X00*GRjS_<HqU@!i$X5?`Mt>U)of%'\X[3KZu?Ur!C$nlUom/h7iL at H4N3*^d/Sq;+b^eBb<k)1&0dEHoqIX@'[0L&
%rZE4S;Fctq4aBBBK9gI),sd%N#\$t`g%"<t%jEtrW\Zo!4Q6TQ$`<E95F8A(iA.frNSXT6ir^(Ci4bTum_`Ilg"`PL&QIRoVD4"B
%i0.lZT3Dp"UGu%J<9Gtd7lh&jk2G628Mg[RKDVmLQHMIU(d3e297(@AouX(hMLb3T7=p9#%)4$VB"t6'H=7KKL>85k<Gu]"jXW7%
%o('>dP#dAJLrtge!#/2"$t[)s4O%.,n]@!V^i5URK`1;8SpKC8D<^KF.-)K$b:fgO)W_oHD"HlXN<?&dM<NfD`s-_D%B+n!!A>Tu
%5,Lk5/k8$Zfq4otg at H5reO1M,bq&7*.%:4o7?EC6AkDF-`E+u`'p*^7hCiPu.0uhMak[ug2\el>qK6r$1%<%7>B9MNY-O#^fJ]En
%)[.9+m:*]SUQ*8%@sNOt,)a8RYq^>^/4ITOpee]c^7;K\CspHpYi#Anc!C-KinC\fK"M2AfROB%#_;s_#r at 0hU7e/7,:]>pGG"KQ
%H1kIM1(o<G`,kCV^YR]s_Fgr0<rHe*$g9O?<@`DF5"Dp&T7Jd=U(,bKi1ZA!k/3rB(LL at rN>MVhi\kPFg_nTj.HKSnVu8G<?SS>*
%Wn'?F?ntD.i]k&(7_-/?,5L:dA=\WrS(qgo(GkRu(sXm(`N6C=p'K=7)-m<@"6^c;&&rcH.;U at A?KFdWG%(PY-1Aqb#<QCY]tc.P
%QKD(]%.;Kb\sAZ;<=lJh-18Ve?BdIUNj2<Z/%*XB9?ENci,+2&8'Q7W/n\COjW?AGekXd!FW%AsfdWefr%+gmmo3Sq*`fs<N-V!;
%@EbTnjP>6dpBkDrj"(ZGADShqRBg`:A-SQ:$tOg9d8`C-q]&K,rOn6bpGnu7qg0 at NmrJVZCi?MPrI']^GK6:]8,N0';>.,$mTQfh
%rI']:$$JP:U]#V$1nWVV?:PTkf?sR]7rlS=rOe0apGkQNZ*2d,&#*k6n2abC3Pq/UXZf7>I<4]Ms,$rkdHbIqT-NX!!?jQ#*!(gT
%Z5$p+hOol6_m]=[.9U;+Y9UX)'J>bJ:r('AeMR<#Otd;=6O>JZ!Rg2=H++)+%/$QMKP*Y/o>QKdp;[M=5CnENao1$e&reMh^)srK
%kF,ch86jKa.I49^9B/[Eh'ZVIg.d4QPrl0QBN'h*OANofMlK5RFR`Jhh'Du2GOaFdUt;<WP*19H^%/'Ec%e[q/]C]M4`%DC]j[a@
%gLE)?OI*[OYdA04IL!MnerB-R(lW]JM&VVjlV,k[gaX%(M#:'3gZ`bnac!m,4.!rr/'f.H_c$#clPsN\Pl,/m='V$ilQRlI1'g^U
%*[=Zj./OduY_B`?$r1- at 1q-*4$=9Cl4!KFVFbjI-]Kk/"Jf&[M$^CTD`,Mt_iZgi,LEhOZnUfGhHU#HQ.pg"2h1m50?1 at u-rs</e
%'e`rGcf'[g=1j%qgkR,/?1A!aZ,70kY'<7XEcrj?fG-&9p7EI^^Z1$PVH#Sq1$jc6E*WrD%(kL&l56,VJ&MeMbk\;qiGZSK*j-G4
%gf)+>"gc;UiA.E+Z<-HL?GO2\LEhOZnUbS^qSaRcZ66_Bq%1KK.pbKZpKM</`sXtRg@$)ZYRrOMGd2l5_le7CVga'+iIq at X;[eIj
%=1gfOItAM\h;'iA3>=47MAItuc/FIe)d^Uq)>@Mcq+l^T%t/fU,DHQS3b`QRYqYBFL%U8<bRZN([rHNB-tB)#!M^>s^R2SFfOh.2
%m2Omr;X3s2iWVIH_C*-t04a5ips!s<2pC(?d:aJR=8>d:5<R+sciT_!IY:S>Y/3Z@?m:W:09[2Ang"2Mn+8)TLKYP_[>:N/&AtYq
%61q]L$o.++(W]]8`8Cllq1DYG)t<u at rs</e'edXRi"&6b]Aa"(`JtS_]H&Y5%\dIO2/gMC`'=&'ER!8._V.[R#K/K<`s]\HNtU'W
%*A:7_j2<fn`s]m<BDWeUEA%]PNfni,f=W+W.%+:g*7qi/-DZY9f5/G70h68aP=aHZa#3n!%blFJ##`G,#]\,Dn\T`9fL%5!s6nu!
%p9677=dome%(kL&\K9Y%LgaAtT\/uL6k$]e"k6ctNYlrY$cnN]L50uh$S&;AEmiGZB5Pf$JbZSTKEN86n3Xg#$<htbC^OB+ at aG1u
%FCYkc\3b1"Ki'hb&V:d'Sht%<mCG(=_A;hT=t'0#QO1c`p+VAmLa2c$"2gXQ%pDddnAc#[hNC8!B49(=h9s<9"kB&\j=k4Fd"6(.
%3-psu.;/`XjY)9IRt at 1#hZ&9`B2anuDR2<;R'S6_=n[D2HC2#fU]G#Lh["9]74.==P,!alRt at 0lSUC&`B2amJ3L+oXo<`P.0P==G
%oD5Pp57V`m#reYdddb5F9gR&AbHj^+o>[m)VD)X]O>D4;r^*!Y8baW8RZB+NrufVHnBq[D7r]<b$$/!.3Q(.^7[UM2EWKt-r^*!Y
%.EHd;CONQDB2anu&t<k,0PAl&<]sEC*9M(So8;r.fO<&PFG"ThigZ<F_Qq;[BlZk6o97FB?q)E#:"V$FP*Q\o\O*dQK8Aq3:QtDc
%CX&<DHX[ZGO:u>4bVTMMF"*;7dRN6uAtiDUln#[l3CE.K[[Ufu3TBl,2g;'W`W`FDE\r!9NQ).o;EL=/dRN8KU?u+PNoYEHO(2FV
%X`(sQLJ9][TJV*SGGL5<"d5eXpdnCYE]I_2Q)(B+ir\m88Q/@'"l]u6r1p;=irWD0IN`F*8X+s.q&;n(9u[?OF&q7JN!kL0`e@][
%ps4p-HMkr`PG\=EJj%o!JC6m]B)]98WBW3l:qr2NeRVq[Dq)+<I+Y-a`=^H+A_)8,MK(r>a[^;?g1X_VO7&dR,AfhN,i?SGglXK5
%(F].mh2sT6(GHftdG0jB)Ac5FGVjW?j&T\p%UT3%HrA]7^@:]HA(`F]dSGf0A<6[H-dpAd7Bn,V`IZ#4oH5pO6qYjT`uojGirW8+
%$\h56<d;eCr.stpQ""dlp=Q]0n!P?XiR5)eYB1PW-f;kmD.(@'T;K=8;>03PG$/K',4a=\<q1i[Oj).O/f=`4a_`6j$^?=I%8tM-
%5g]'NX^DA_I*EplR'#NaOB(O5`ntO:R@<,tVXT\n7'AOu97";L'+mf1Ou;bN,dR*^o<N328pFn9r[$BPKrJDuP2K_PW7$d-d`5L(
%Y0)5>7F898jGd!49Yt>*]VCF40E;.8kLkYJ<rUdP9-;9WQIXcXJYCrLMdqjR)!-+plG2"Th\CRuNJT@=[dY$lo>/DpA4Td*]d0[Y
%Q#o4qd]]!H/(oET#.8kGp61d6'-8K`Dn:'@ReaUD9XQ6NO*L7Q.DdboJl;3\itqeNX`7er^C\b9'FUTh6Ld-$m<ArtR]!aUbE9^H
%`_Ku6dH[Hcd73-?4?"8=7.9R+?L-cZ>o\K#r(d):]MHWbJ?`dg)D8J at 0sX4V.pX`UjTtBjX5!/70a_G5XK\5"De%PCnL*_f1q`,N
%T"XCLc'+2*+]N4Y!2&^jDKKlM at sJ2HqCF04E/UCK6"8iKdT9Sn4Oc"k)YbG_d*?/l9OgDd64MR*rILlpCCfFsVr=YFKWq[%&#+L=
%?E?95h!sX5j&F,6Vo`3?ksYIeojUpf^2ZE/Di@#-nL136W^a'o?/WoKI4d%ASjVboH%T%];(F#W5'*#i0Q0C*`)m0aeX]T#19$6u
%CeS+P?jN?"eFjUD!feQ.Xk%^3:6C8fGUbrA6bdSbgeG<8mKKBX&#.JB(H6*Z]0:&"gX0='fq8*d[N!F"Ppj<iGtk$KLdsUX$<"F[
%:ZHYUX':,?c5`S?KPu+_%cO6b=!*R]d:?HSqJ,,bbWPfc]/)bsnBGK.*bgG+LsIBXOUX\^d@^,!*4K-HKcd$>d%=HZOE-jR%$G=O
%5HhZR.V2i[lGtst-XU4teCBio3\sp!E.>X=N5]Cg#F'pYpmWfHeT`$#=5i0;^ksnP;gr`PWfpp0At->(ON(e:jk><U9nSSbMmH2/
%9;Y?S7^J_a+])*lPtWhW\N5_R4m#BpeUd(`p)BT[[h[,0PLafSrMDo4W"[[*jAgoNWLS9OmdM"0`H-O"=Mdd>kU7O\T-lUtKj^]t
%InL-QOhs:S/K7Dk-_m,T,i>PtJBOH$m-TM)ZFEm%-Ura0k4YOWHE>p6;,Xc'[\tD0,:QZXX;[6#B4d6c&)n&o#`rV.V"U;Ba[eY^
%X,&'1('@m3oW.n&Y_^2^&X@,Ub.e[G<^?1fAKZi/P?O\'o=%Arf4p/Q/'#2lo8.niIM6k&;K^LV*D**HT4'e.\I0q>dYm<dg3O.:
%r$l/O)O2oW=9-$rC4!QUOIZV7jm;"J3"$$+?Q\el?JmFMr$?-iq0Enp9Ae#)FQPP-8+Z<</j'8fIR:,3Q^Ifn9/n/&eTn[QXXDe[
%QNrsq0,,a8U:2,pA?Bb31#<\d1$^*QX7J4d5Ned>;$SHQ\s`HjGCM<4!Q;3#pF;FDgu3==4==U7HKn*[q6,h;\M[CePe%4$Eu4k:
%'$4+8;RAZ!an*LM!XH3k9ssBE[V6--4=0$MkEf!._!037.+F<+\2+rOINjfpl$geNdMfn)<gfeUHLirc3pPJ[dD5Vjg$uBuNS6c[
%>ZN1k>tp<8QN1`PRtUIT_l^dXH>=98dSOa:dGqD-W*Rse.N+]SFL?BsOZlR\C#Ll(BaB++f`<cp`3WX1HkD<<q:EjgokT at Dou\_-
%V=-4e`@g.gY^=,tAFF;7*^OV^UY1;:4,YLjEb0[:igi.p:(2oC3Ouj=Y?b9;3;_#J"Y<HRK_tkrik&KDp84\NE%i89gf/stM)g=$
%+*T*sBs1V&rG/!pF;CY.G]!glI,\EUQO<hDm7b)SGT?O at k;5ADekVB0q+b9o^I^'gh&Rfi$er_!*/&,!'!?9rH/_=i8p(:@6h$3U
%8h1C]lNT0,2j`DHR*Ck43k]nYV(7nmP12$H-0)^RGFkg,`I'FacK<'^?*g:#0G/H!WYAGjJq#.Z%mho&UAO7;+28G#Q_A6&l:k'G
%3/h142P0-n;u3b^^(;qY7\;/q*kcSEY227>\$jm>U5_nq,o6Cl5+Abrbf'6Cgc'F'cNUK=P>Z3T:1bm1^TUn#=h]00/d*e9C#S]m
%Rs<65ZBsIHUV[59!V'^u2/K$4S)\$_?&riEA4+$/IgOlna9MIeDdaS*fq>bK\$1k+VNh&RY`4ZZi(!Z&Cni3o&l\QufLA at hZ;pK]
%CkE#n&oYhUGM81[h.hjH<*TDdENH`G at l=%#g>5_i6)C\XLI[%9elUZ:$6`>^l&1J$//r?N,LTrSi.8P`X2(Oi-)Ybeql!$Vkt*LI
%D0Vj+oTOq!X4A1S'hrg'T5?9.GKiMgAXCP8?UOEBO4ml)0.AP>&#!XchoQc/)UB4Zlbl4qljPpQ\Ql_sMl8*hG4n3r7ko&6ZC at M[
%7.F`VOG/*pnstIdG=/f01>0h5n)KP_ at _O+Q)m_Dk[(OhbGMj*P3rOYnX6.H&>?#k:;;1eCe-R_?p/al*TS7R>Mt0[db3mdXP]iU_
%Z3gt<r at 0NkC,aJ]TD2DqPo,-dV49HT(m"6jRQ/U(^@A3B/q9#8b_?dR;HkB-N%<e1D*;WVh^<_rBsfEAo&l6!2"SRWbJSJAiACce
%d<AYghu<m^e<`mQ#o5a0,BEmQ%K;MJkM58`bg+P9cKI,up%\MKJ?8O.[%8U3;>aK:s+oVMH)pi>X+Xiq8($5%\r3tteb*dKl4mAT
%QbYm0CbH'K3h_0kfNo*tcHBW=CbH'K*9J at T[MK'F.n/e6_Y/Rh=H2Aa&@NAX_cd'GJZug1)!nNF5hKBS9[TOdJM>o;iLZm:O&H:t
%H(9nl]?EmYFuA,CF-t6"He'i/StSpWTos1'-T>3"Ph*Pei0o!YI]s":8<4=/T,-nX-[3)A>uL2r2VQg#[6'V;4CW#$IS$*F]f`9s
%?%!W:U^)*3T,8qQ\j5lJCM!Jrk at dn!fV<PP]KLhNggF`=c_]dY+JPo3*:"0_\jG!3/)BI;e*0<ab_X4j*1r?:0ZAT#r[lj`Raj2^
%b#so^%O9d[msBTZoqSNekj9(5Hd0OIf,oU9=rtrsWKgk^4(_-Bq$1K[qrh;&m=gt#("^]e at 2Oprc*qD_(l;fFlboW\Fo+^*:+g%E
%XWtM,,?6OGDAk#C. at l?^;L]Qumj-iG3)Xnlj^C]oi\F9MS).d at bFW:)DDJK@\Sa3%6X3I>XF*kk[iNR8U>C+bpS/B%-cpQ at BtOd&
%0eJ_ at QiAU7B-IGYrB8\VCpMK%hY1p'<V_/(Jq^iEl'HkAr*-62M8'8Rp)WX#pae"_7l0CNr5XH4cjlA2Vr>pHRA-(890)H^1Kh'g
%nae[+a9t.=;;#9eabg,7!Olc3L$P<gdpelQ_YkXk?uF]FX\ZL4h7ZU at O&qT>Ls;5$ag at Fg6eoF0PCCT[SO_@!):6^S"=3qH%>aa1
%,'9o)Q1=dHH,1-^7QAWV7PaGtb^_&[^\?aDls.>"j9Hfign'<\UUpQ^EOUehP]K#,cA%IWkMd8?P-[5Z$/A'Ngi"BOl!)0>.nM!u
%>plXt]oa^(/b,Zs,gB*4"58i)U@^,fV-b,SO:!&bA#qpdJ%bu7n5nQub5jiohZVjCn@$g(Xn/!2r2RL3FNZkM]_!\"UICVW_aX<7
%Mhbr:$.CrWjAP0mP6sRFCDRj1etQ#2pd,=mJD;cJYJ)j_k- at LZ'D:,u?sc6geCjV7_j!5!Lb#+h2>sr:9,egNqX\n-9!=^`E`\FU
%L7,HuMAE*!P:DWs\T(NnUQL[4&r\+m&,)eaddplA511kp'r(7cC[Lh!9+mG\XWpE_^%(6b:]9Z47,^h$H!3khkPb'sOq^XX$;ocO
%q;utVRj>@UmQoA!'9RR-ChH8mci+8=3fkAMcMhm+LY]^ZmumitM$L=rH7 at u?QX?d586)<?/qh[cX+.94OKirkI-JEqS\i(TDLLPF
%=,X0Z\sGJ3Vmd+\oujL/A)3G,Yo^Q?Jbd[kYf$G"_mf1"Brf#+VJ=HN at PalclrY(Hns8R_q2c*A<6lMpD45\6]!6)>Fq^Kc[^OX7
%B>WDqg<R]UiR[Al9Uu7J2g5(#hpcNC-Sl,mH..?C_/YHE`:LBc>g6arD7c*Z)m\Mm2;O,qnPU=9^gf_QbN<[S^GH[Zd(OiOhE>$)
%'&+tOPIjuf7O)6$_:Wt!D>T&)IaLJ!q5d)6/,k]I$e8NpWWXP:!MB(XPJ-51XnuX:>F29-ipSeq;[0`YeVU<84#,5Ec!_$CRq>uC
%G%jp%%]'iuU:"NSl*sTGmP8FL6D)d&eCL0_T$ZZ.5rW+nKc\1S`*6&c%1H(4ko%^QOJ7cG\9 at VjI=Vs<'p!_K$lLLC"?=\2Vl6P8
%C2K`E1L at R9Jj#sM-Ro&kG,[$ane*lGY:l;ZRN*dpk1J#?Ain7pkCY.cl,Qa_^sBc%DIBk]DBQnj:k!cAeq.)#X)&>rD=d&k(lSh,
%bguC8M*4A.D6=g>&oX at HQY7<0PpT<>L`\>UQaCOB;$UbQ5;Uqi#41B*PeA/gX4iS(%h,aj at e=6lTD8/lihPTsI8+j#+#0P:a`etg
%\tF*H>W!#^RY@)#A)_$7n.5 at DhYQ;jC/a+,Ku"E$A7)?kL`$N-dUN;F&R7e0Ms^0^m[&=iMUlGPS,fr'RpeQ`:RR&jFL9JiT+S.D
%/4mN+a-dR$D85`hKIYEGU3fjlY`("XckX`WhO)FF-X=Kq\QE<'G:K9b.\l,5f2mDlCA75[X""mN`sf(FLM@]@A.(Q&Phs=#(BZ]o
%cF.=:M5O^,ViPL-q`MWZXXOVJ2k+S$b0^?r/)tR8&_)Fl1XRjGCXiXMqFI.fTB=(K%HA^-7.K(nX at qmoqTb)j]KF7>QfkE6%n!_X
%.t2%#Le%q,OhB2CVIQsVc*AQ4<`-U&S/)R2(Ud80U#G-?lAQN4A6hO^6,T=0QYX[!YIo7AY at S?G>Ae=8,ZNT"c&Km\To3R at f8?0a
%;.\L?@fF%dAlZ*L,buCXV24l4?@1b"b&o[DD9lXU37#(biKU+#UR=/DmQq\4`9NlYC3*;Hc.+fhD`'/4G4]7iioI6&dRrc'?Zb2k
%8t9(FS]I!ubW^EmVjYqF1 at KT>P6`o8a+s+B>cmBD@$LD`n]56?0P+2iIC\%!oTB(CAr(AjUG3b6+jc=L_Hl\Fe#H`ignJ-=)(pg1
%<&5RaP.AlWKDm,[7s&hrn]q)QWl<]TA7aN;,?IQ%FmT:*8qs_l.i05]H[*<@7JNuTjnjc[2eST6`2fal-Pto92`%D!H?H*oM7gSX
%'E_WaT]cR%%3)QcaAl]rVGX5>Y!:BhDYCl(TEuFNLJo+^T0:>f?,aN3E+]g':nTA/o[M3H[Zp2&T/rU at c4Y%)^K[Ke(I>@;.(`qP
%R=C?,T2#_oA:ah-$cS-REH=d30Li+]A]gcN-(IZoH'SL!4LO2Bq,i)`[2Q[jY($*7W0osbZF*+!j&S at R#WXN-eaqbb(3ln/b]E:`
%,6=Z2NsO_uJmPpf*7o.B)q:(b<:(2iJmT>07d4MniWnCbng4gLi\O"DG^;,<4)]j^]V)=8qN'!hnUdFn)5J;OcqC[r>dVm*DZ=_p
%%U-Xq[$/2tI$>,JY@;a<4:1`RU7(X+Ai7)H.LYnWg+??'B1'YEq+oS6G$Km8#iUYr;a0-4;EH5KQ6aph<jcI;g[WF'Lh)8i/*j5S
%5ic.5=<.!k\s*/!;A%PN3JMfRNOqYe1<OKiQFl"$JU)ohJQJg0(lf!+J+ofSA!-ediBR5r-s.<EA75Q at p^k6l6CW"WB.](k;A`@+
%=._IC-\n8gE&)<*s(r'P;ls03cQt/OMu;ol4<(ObJ/\8!SqaG=keQm!'Y[JP7>1\Vs%qSeXh5Q9rYn&^i?.O8oT+^4'J8ujg=!qf
%D^g'C7/8hQ#pOlrf`:r.-@^N.mgIVa<Md^^X+t,s//M\F*gZO)=XJs>%Id[^^^5<k6#Z at 9N&MR^L7h9<mCG3nDrl2R(@Z(,4Mt!'
%G[?]p at 2Q)4BDd^b823E]9 at J:06 at 3E2is11C(-`K%dO][k*NVbo at Q8:VL<g9UiFbLd;U5]s(4a at 9"E+it`+S1$+Q)Z2q/%OeoUP4g
%#Y`,8-�!=nGmU;W\nsL08,?N0i_d="G0[$FE##*O76VAc7'QDe"'?MM7tlTU-%,N8DDSn/9Miktl[F*V,BNWu^a*%.CZ=Dc7T9
%'Z7eX#k/>3.>3b$H7.EZrC(Ib7ZGuU7e,cR&o5KjT_^`&-7r#ZZ@:FlJ.8KA'aP!]]oD.D.9JPTNtqjfDo".2=@&N0[1/]?n7f9T
%R"tb1([Z'SK03;,58_b96MLiS)l458Zi2/V8Y\c at 7&,!L>_t=J/Pn6jQ[n0>M at g[YNMJ>'J=#5g/(fP!3%#]S#sg3HVj.Pq?B3)%
%TK+YYKS"s1W%A>.Wp3R8 at 2o)h$O>G?6FahRpi3>>]dt3oD3!9,nc\.cq@%%Sq at on,Cn6/>8nLSob;V2`EA.QF5,bY,j2]%h(`#q`
%0s%&!VCe4idE3 at O-,=Yb:TR7<G1q2W/$KFpTIiRl>7KWC>)]hfD&Oj<7r)gk,;-/V"8nAABHCj&NPWb#Kc%\9f.\N<^hHJ6\GunN
%>0#t,5[oi8 at 3CNd.rYMRZ?-kZK4C$h$8Mu<XSM8[[N1G/lK4?,!CM50!:huW%g8Sf`Hd59o/n[eHIq+jCtuhZ"YUsn"_D']%Lb?I
%+6&RU"+)T#rbu`'`fUH`ZT7';!cB"I#?VAWi8+`nr]2r_<%Q;3\V,<oARKG\+cc0uh=>Z<ZjB&)rW0\;Gnpl%?FpWi-qhJ1rEP.@
%_o&0:Q3j`)O>@5\1sL&oQlpK@*Y/TC.CLo=c]Tma<abHAn7 at +n:PHH#/f=-i598ek7gO*n?bT/1!LXX^"5_NN[);/58FLX##7iD8
%:>j60fKdMr=WLjYc'WMIPnUh%.^6.#!lH-F!?),^W`E1j?3Ll_KE+[c at 3`SJ3*m^Y3TS-s?oT4i"M#hMlTcR`GYN]EZ9>;nfDps_
%b]AN:T[-G"i(-X0f^V4j!9+T25?PFgb+nCTK<pkf$h.An7Vr0 at Puk"&T[mM\-.OoEFXu;GNH=Q/S#j0[p,K6+_Ar3hj/-<P\qF?'
%$G\.,=UYLFfjq(!<=iEeeu-ZT?u\.X[Ak3*JhfM\hmC at Xd3BJs!\u\0e/J"#j)4<mn<pc\mcK_t^X^XB8scJl?2/a'%Kl#X4KpL,
%Ljf)[fGAnQ^6g/=7K9bKI>_q#0.(ZSpDQD0'kEuC!4R!:iFtPHc3E5HN^oK at p_h?8e#]/F`lSJ-dmV3rVfs5KYW=<p at u!iYk_N.Y
%r+fXC8Oh6\YmL-sGQ;^?Zj+4dZo.aaN'3Q9rhjCCNQ76.CYnr?D_-NTD[*oK/@2h-5M-$%;'-%M?:n/r$gs.C-i~>
%AI9_PrivateDataEnd
\ No newline at end of file
diff --git a/doc/tutorial/images/sphere.pdf b/doc/tutorial/images/sphere.pdf
new file mode 100755
index 0000000..ee88c7d
Binary files /dev/null and b/doc/tutorial/images/sphere.pdf differ
diff --git a/doc/tutorial/images/temperaturemap_filled.pdf b/doc/tutorial/images/temperaturemap_filled.pdf
new file mode 100644
index 0000000..ed2a859
Binary files /dev/null and b/doc/tutorial/images/temperaturemap_filled.pdf differ
diff --git a/doc/tutorial/images/temperaturemap_gaps.pdf b/doc/tutorial/images/temperaturemap_gaps.pdf
new file mode 100644
index 0000000..97ed010
Binary files /dev/null and b/doc/tutorial/images/temperaturemap_gaps.pdf differ
diff --git a/doc/tutorial/images/window_fct1.eps b/doc/tutorial/images/window_fct1.eps
new file mode 100755
index 0000000..bdcf9f6
--- /dev/null
+++ b/doc/tutorial/images/window_fct1.eps
@@ -0,0 +1,501 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: window_fct1.eps
+%%CreationDate: 07/29/2004 11:42:09
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 40 199 558 583
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 40 199 558 583
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 273 341 6214 4613 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt 899 389 L
+ 899 4615 mt 899 4561 L
+ 899 389 mt 899 442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 562 4894 mt
+(-0.5) s
+3577 4615 mt 3577 4561 L
+3577 389 mt 3577 442 L
+3504 4894 mt
+(0) s
+6255 4615 mt 6255 4561 L
+6255 389 mt 6255 442 L
+6072 4894 mt
+(0.5) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt
+(-20) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 3542 mt 952 3542 L
+6255 3542 mt 6201 3542 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3640 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3477 mt
+(-15) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 2469 mt 952 2469 L
+6255 2469 mt 6201 2469 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 2567 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 2404 mt
+(-10) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 1397 mt 952 1397 L
+6255 1397 mt 6201 1397 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1495 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1332 mt
+(-5) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+gs 899 389 5357 4227 MR c np
+24 w
+1 3 6 15 5 16 6 15 5 16 5 15 6 16 5 15
+5 16 6 15 5 15 5 16 6 15 5 15 5 15 6 15
+5 16 6 15 5 15 5 15 6 15 5 15 5 15 6 15
+5 14 5 15 6 15 5 15 5 15 6 14 5 15 6 15
+5 14 5 15 6 14 5 15 5 15 6 14 5 14 5 15
+6 14 5 15 5 14 6 14 5 14 6 15 5 14 5 14
+6 14 5 14 5 14 6 14 5 14 5 14 6 14 5 14
+5 14 6 14 5 14 6 13 5 14 5 14 6 14 5 13
+5 14 6 14 5 13 5 14 6 13 5 14 5 13 6 13
+5 14 5 13 6 13 5 14 6 13 5 13 5 13 6 14
+5 13 5 13 6 13 5 13 5 13 6 13 5 13 5 13
+6 13 5 12 6 13 5 13 5 13 6 13 5 12 5 13
+6 13 5 12 5 13 5730 2984 100 MP stroke
+6 12 5 13 5 12 6 13 5 12 6 12 5 13 5 12
+6 12 5 13 5 12 6 12 5 12 5 12 6 12 5 13
+5 12 6 12 5 12 6 11 5 12 5 12 6 12 5 12
+5 12 6 11 5 12 5 12 6 12 5 11 5 12 6 11
+5 12 5 11 6 12 5 11 6 12 5 11 5 11 6 12
+5 11 5 11 6 12 5 11 5 11 6 11 5 11 5 11
+6 11 5 11 6 11 5 11 5 11 6 11 5 11 5 11
+6 10 5 11 5 11 6 11 5 10 5 11 6 10 5 11
+6 11 5 10 5 11 6 10 5 10 5 11 6 10 5 10
+5 11 6 10 5 10 5 10 6 11 5 10 6 10 5 10
+5 10 6 10 5 10 5 10 6 10 5 10 5 9 6 10
+5 10 5 10 6 10 5 9 5 10 6 10 5 9 6 10
+5 9 5 10 6 9 5199 1895 100 MP stroke
+5 10 5 9 6 9 5 10 5 9 6 9 5 10 5 9
+6 9 5 9 6 9 5 10 5 9 6 9 5 9 5 9
+6 9 5 8 5 9 6 9 5 9 5 9 6 9 5 8
+6 9 5 9 5 8 6 9 5 8 5 9 6 8 5 9
+5 8 6 9 5 8 5 9 6 8 5 8 6 8 5 9
+5 8 6 8 5 8 5 8 6 8 5 8 5 8 6 8
+5 8 5 8 6 8 5 8 5 8 6 8 5 7 6 8
+5 8 5 7 6 8 5 8 5 7 6 8 5 7 5 8
+6 7 5 8 5 7 6 7 5 8 6 7 5 7 5 7
+6 8 5 7 5 7 6 7 5 7 5 7 6 7 5 7
+5 7 6 7 5 7 6 7 5 7 5 6 6 7 5 7
+5 7 6 6 5 7 5 6 6 7 5 7 5 6 6 7
+5 6 6 6 5 7 4669 1111 100 MP stroke
+5 6 6 6 5 7 5 6 6 6 5 6 5 7 6 6
+5 6 5 6 6 6 5 6 6 6 5 6 5 6 6 6
+5 6 5 5 6 6 5 6 5 6 6 5 5 6 5 6
+6 5 5 6 5 5 6 6 5 5 6 6 5 5 5 6
+6 5 5 5 5 6 6 5 5 5 5 5 6 5 5 6
+5 5 6 5 5 5 6 5 5 5 5 5 6 5 5 5
+5 4 6 5 5 5 5 5 6 4 5 5 5 5 6 4
+5 5 6 5 5 4 5 5 6 4 5 5 5 4 6 4
+5 5 5 4 6 4 5 5 5 4 6 4 5 4 6 4
+5 5 5 4 6 4 5 4 5 4 6 4 5 4 5 3
+6 4 5 4 5 4 6 4 5 3 5 4 6 4 5 3
+6 4 5 4 5 3 6 4 5 3 5 4 6 3 5 3
+5 4 6 3 5 3 4139 634 100 MP stroke
+5 4 6 3 5 3 6 3 5 3 5 3 6 4 5 3
+5 3 6 3 5 2 5 3 6 3 5 3 5 3 6 3
+5 3 6 2 5 3 5 3 6 2 5 3 5 2 6 3
+5 3 5 2 6 2 5 3 5 2 6 3 5 2 6 2
+5 3 5 2 6 2 5 2 5 2 6 2 5 2 5 2
+6 2 5 2 5 2 6 2 5 2 5 2 6 2 5 2
+6 1 5 2 5 2 6 2 5 1 5 2 6 1 5 2
+5 1 6 2 5 1 5 2 6 1 5 2 6 1 5 1
+5 1 6 2 5 1 5 1 6 1 5 1 5 1 6 1
+5 1 5 1 6 1 5 1 6 1 5 1 5 1 6 1
+5 0 5 1 6 1 5 1 5 0 6 1 5 0 5 1
+6 0 5 1 6 0 5 1 5 0 6 1 5 0 5 0
+6 0 5 1 5 0 3609 462 100 MP stroke
+6 0 5 0 5 0 6 0 5 0 5 0 6 0 5 0
+6 0 5 0 5 0 6 0 5 0 5 -1 6 0 5 0
+5 0 6 -1 5 0 5 -1 6 0 5 -1 6 0 5 -1
+5 0 6 -1 5 0 5 -1 6 -1 5 -1 5 0 6 -1
+5 -1 5 -1 6 -1 5 -1 6 -1 5 -1 5 -1 6 -1
+5 -1 5 -1 6 -1 5 -1 5 -1 6 -2 5 -1 5 -1
+6 -1 5 -2 6 -1 5 -2 5 -1 6 -2 5 -1 5 -2
+6 -1 5 -2 5 -1 6 -2 5 -2 5 -2 6 -1 5 -2
+6 -2 5 -2 5 -2 6 -2 5 -2 5 -2 6 -2 5 -2
+5 -2 6 -2 5 -2 5 -2 6 -2 5 -2 5 -3 6 -2
+5 -2 6 -3 5 -2 5 -3 6 -2 5 -2 5 -3 6 -3
+5 -2 5 -3 6 -2 5 -3 5 -3 6 -2 5 -3 6 -3
+5 -3 5 -3 6 -3 3078 597 100 MP stroke
+5 -3 5 -2 6 -3 5 -3 5 -3 6 -4 5 -3 5 -3
+6 -3 5 -3 6 -3 5 -4 5 -3 6 -3 5 -4 5 -3
+6 -3 5 -4 5 -3 6 -4 5 -3 5 -4 6 -4 5 -3
+6 -4 5 -4 5 -3 6 -4 5 -4 5 -4 6 -4 5 -3
+5 -4 6 -4 5 -4 5 -4 6 -4 5 -4 5 -5 6 -4
+5 -4 6 -4 5 -4 5 -5 6 -4 5 -4 5 -5 6 -4
+5 -4 5 -5 6 -4 5 -5 5 -4 6 -5 5 -5 6 -4
+5 -5 5 -5 6 -4 5 -5 5 -5 6 -5 5 -4 5 -5
+6 -5 5 -5 5 -5 6 -5 5 -5 6 -5 5 -5 5 -6
+6 -5 5 -5 5 -5 6 -5 5 -6 5 -5 6 -5 5 -6
+5 -5 6 -6 5 -5 6 -6 5 -5 5 -6 6 -5 5 -6
+5 -6 6 -5 5 -6 5 -6 6 -6 5 -5 5 -6 6 -6
+5 -6 5 -6 6 -6 2548 1037 100 MP stroke
+5 -6 6 -6 5 -6 5 -6 6 -6 5 -7 5 -6 6 -6
+5 -6 5 -7 6 -6 5 -6 5 -7 6 -6 5 -6 6 -7
+5 -6 5 -7 6 -7 5 -6 5 -7 6 -6 5 -7 5 -7
+6 -7 5 -6 5 -7 6 -7 5 -7 6 -7 5 -7 5 -7
+6 -7 5 -7 5 -7 6 -7 5 -7 5 -7 6 -8 5 -7
+5 -7 6 -7 5 -8 6 -7 5 -7 5 -8 6 -7 5 -8
+5 -7 6 -8 5 -7 5 -8 6 -8 5 -7 5 -8 6 -8
+5 -7 5 -8 6 -8 5 -8 6 -8 5 -8 5 -8 6 -8
+5 -8 5 -8 6 -8 5 -8 5 -8 6 -8 5 -8 5 -9
+6 -8 5 -8 6 -8 5 -9 5 -8 6 -9 5 -8 5 -9
+6 -8 5 -9 5 -8 6 -9 5 -8 5 -9 6 -9 5 -8
+6 -9 5 -9 5 -9 6 -9 5 -9 5 -8 6 -9 5 -9
+5 -9 6 -9 5 -9 2018 1783 100 MP stroke
+5 -10 6 -9 5 -9 6 -9 5 -9 5 -10 6 -9 5 -9
+5 -10 6 -9 5 -9 5 -10 6 -9 5 -10 5 -9 6 -10
+5 -9 6 -10 5 -10 5 -9 6 -10 5 -10 5 -10 6 -10
+5 -9 5 -10 6 -10 5 -10 5 -10 6 -10 5 -10 5 -10
+6 -10 5 -10 6 -11 5 -10 5 -10 6 -10 5 -11 5 -10
+6 -10 5 -11 5 -10 6 -10 5 -11 5 -10 6 -11 5 -11
+6 -10 5 -11 5 -10 6 -11 5 -11 5 -11 6 -10 5 -11
+5 -11 6 -11 5 -11 5 -11 6 -11 5 -11 6 -11 5 -11
+5 -11 6 -11 5 -11 5 -11 6 -12 5 -11 5 -11 6 -12
+5 -11 5 -11 6 -12 5 -11 6 -12 5 -11 5 -12 6 -11
+5 -12 5 -11 6 -12 5 -12 5 -12 6 -11 5 -12 5 -12
+6 -12 5 -12 5 -12 6 -11 5 -12 6 -12 5 -12 5 -13
+6 -12 5 -12 5 -12 1488 2836 100 MP stroke
+6 -12 5 -12 5 -13 6 -12 5 -12 5 -13 6 -12 5 -12
+6 -13 5 -12 5 -13 6 -12 5 -13 5 -12 6 -13 5 -13
+5 -12 6 -13 5 -13 5 -13 6 -13 5 -12 6 -13 5 -13
+5 -13 6 -13 5 -13 5 -13 6 -13 5 -13 5 -13 6 -14
+5 -13 5 -13 6 -13 5 -14 6 -13 5 -13 5 -14 6 -13
+5 -13 5 -14 6 -13 5 -14 5 -13 6 -14 5 -14 5 -13
+6 -14 5 -14 5 -14 6 -13 5 -14 6 -14 5 -14 5 -14
+6 -14 5 -14 5 -14 6 -14 5 -14 5 -14 6 -14 5 -14
+5 -14 6 -15 5 -14 6 -14 5 -14 5 -15 6 -14 5 -15
+5 -14 6 -14 5 -15 5 -15 6 -14 5 -15 5 -14 6 -15
+5 -15 6 -14 5 -15 5 -15 6 -15 5 -15 5 -14 6 -15
+5 -15 5 -15 6 -15 5 -15 5 -15 6 -15 5 -16 6 -15
+5 -15 5 -15 6 -15 957 4194 100 MP stroke
+5 -16 5 -15 6 -15 5 -16 5 -15 6 -16 5 -15 5 -16
+6 -15 5 -16 5 -15 899 4364 12 MP stroke
+6 w
+gr
+
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/window_fct1.pdf b/doc/tutorial/images/window_fct1.pdf
new file mode 100644
index 0000000..ecd329d
Binary files /dev/null and b/doc/tutorial/images/window_fct1.pdf differ
diff --git a/doc/tutorial/images/window_fct2.eps b/doc/tutorial/images/window_fct2.eps
new file mode 100755
index 0000000..94c63d8
--- /dev/null
+++ b/doc/tutorial/images/window_fct2.eps
@@ -0,0 +1,501 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: window_fct2.eps
+%%CreationDate: 07/29/2004 11:42:09
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 40 199 558 583
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 40 199 558 583
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 273 341 6214 4613 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt 899 389 L
+ 899 4615 mt 899 4561 L
+ 899 389 mt 899 442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 562 4894 mt
+(-0.5) s
+3577 4615 mt 3577 4561 L
+3577 389 mt 3577 442 L
+3504 4894 mt
+(0) s
+6255 4615 mt 6255 4561 L
+6255 389 mt 6255 442 L
+6072 4894 mt
+(0.5) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt
+(-20) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 3542 mt 952 3542 L
+6255 3542 mt 6201 3542 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3640 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3477 mt
+(-15) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 2469 mt 952 2469 L
+6255 2469 mt 6201 2469 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 2567 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 2404 mt
+(-10) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 1397 mt 952 1397 L
+6255 1397 mt 6201 1397 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1495 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1332 mt
+(-5) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+gs 899 389 5357 4227 MR c np
+24 w
+5 3 6 7 5 8 5 9 6 12 5 12 5 13 6 13
+5 15 5 14 6 15 5 14 5 15 6 15 5 15 6 15
+5 15 5 15 6 15 5 15 5 15 6 15 5 14 5 15
+6 15 5 15 5 15 6 14 5 15 6 15 5 14 5 15
+6 14 5 15 5 15 6 14 5 14 5 15 6 14 5 15
+5 14 6 14 5 14 6 15 5 14 5 14 6 14 5 14
+5 14 6 14 5 14 5 14 6 14 5 14 5 14 6 14
+5 14 6 13 5 14 5 14 6 14 5 13 5 14 6 14
+5 13 5 14 6 13 5 14 5 13 6 13 5 14 5 13
+6 13 5 14 6 13 5 13 5 13 6 14 5 13 5 13
+6 13 5 13 5 13 6 13 5 13 5 13 6 13 5 12
+6 13 5 13 5 13 6 13 5 12 5 13 6 13 5 12
+5 13 6 12 5 13 5719 2959 100 MP stroke
+5 12 6 13 5 12 6 12 5 13 5 12 6 12 5 13
+5 12 6 12 5 12 5 12 6 12 5 13 5 12 6 12
+5 12 6 11 5 12 5 12 6 12 5 12 5 12 6 11
+5 12 5 12 6 12 5 11 5 12 6 11 5 12 5 11
+6 12 5 11 6 12 5 11 5 11 6 12 5 11 5 11
+6 12 5 11 5 11 6 11 5 11 5 11 6 11 5 11
+6 11 5 11 5 11 6 11 5 11 5 11 6 10 5 11
+5 11 6 11 5 10 5 11 6 10 5 11 6 11 5 10
+5 11 6 10 5 10 5 11 6 10 5 10 5 11 6 10
+5 10 5 10 6 11 5 10 6 10 5 10 5 10 6 10
+5 10 5 10 6 10 5 10 5 9 6 10 5 10 5 10
+6 10 5 9 5 10 6 10 5 9 6 10 5 9 5 10
+6 9 5 10 5 9 5189 1876 100 MP stroke
+6 9 5 10 5 9 6 9 5 10 5 9 6 9 5 9
+6 9 5 10 5 9 6 9 5 9 5 9 6 9 5 8
+5 9 6 9 5 9 5 9 6 9 5 8 6 9 5 9
+5 8 6 9 5 8 5 9 6 8 5 9 5 8 6 9
+5 8 5 9 6 8 5 8 6 8 5 9 5 8 6 8
+5 8 5 8 6 8 5 8 5 8 6 8 5 8 5 8
+6 8 5 8 5 8 6 8 5 7 6 8 5 8 5 7
+6 8 5 8 5 7 6 8 5 7 5 8 6 7 5 8
+5 7 6 7 5 8 6 7 5 7 5 7 6 8 5 7
+5 7 6 7 5 7 5 7 6 7 5 7 5 7 6 7
+5 7 6 7 5 7 5 6 6 7 5 7 5 7 6 6
+5 7 5 6 6 7 5 7 5 6 6 7 5 6 6 6
+5 7 5 6 6 6 4658 1099 100 MP stroke
+5 7 5 6 6 6 5 6 5 7 6 6 5 6 5 6
+6 6 5 6 6 6 5 6 5 6 6 6 5 6 5 5
+6 6 5 6 5 6 6 5 5 6 5 6 6 5 5 6
+5 5 6 6 5 5 6 6 5 5 5 6 6 5 5 5
+5 6 6 5 5 5 5 5 6 5 5 6 5 5 6 5
+5 5 6 5 5 5 5 5 6 5 5 5 5 4 6 5
+5 5 5 5 6 4 5 5 5 5 6 4 5 5 6 5
+5 4 5 5 6 4 5 5 5 4 6 4 5 5 5 4
+6 4 5 5 5 4 6 4 5 4 6 4 5 5 5 4
+6 4 5 4 5 4 6 4 5 4 5 3 6 4 5 4
+5 4 6 4 5 3 5 4 6 4 5 3 6 4 5 4
+5 3 6 4 5 3 5 4 6 3 5 3 5 4 6 3
+5 3 5 4 6 3 4128 627 100 MP stroke
+5 3 6 3 5 3 5 3 6 4 5 3 5 3 6 3
+5 2 5 3 6 3 5 3 5 3 6 3 5 3 6 2
+5 3 5 3 6 2 5 3 5 2 6 3 5 3 5 2
+6 2 5 3 5 2 6 3 5 2 6 2 5 3 5 2
+6 2 5 2 5 2 6 2 5 2 5 2 6 2 5 2
+5 2 6 2 5 2 5 2 6 2 5 2 6 1 5 2
+5 2 6 2 5 1 5 2 6 1 5 2 5 1 6 2
+5 1 5 2 6 1 5 2 6 1 5 1 5 1 6 2
+5 1 5 1 6 1 5 1 5 1 6 1 5 1 5 1
+6 1 5 1 6 1 5 1 5 1 6 1 5 0 5 1
+6 1 5 1 5 0 6 1 5 0 5 1 6 0 5 1
+6 0 5 1 5 0 6 1 5 0 5 0 6 0 5 1
+5 0 6 0 5 0 3598 462 100 MP stroke
+5 0 6 0 5 0 5 0 6 0 5 0 6 0 5 0
+5 0 6 0 5 0 5 -1 6 0 5 0 5 0 6 -1
+5 0 5 -1 6 0 5 -1 6 0 5 -1 5 0 6 -1
+5 0 5 -1 6 -1 5 -1 5 0 6 -1 5 -1 5 -1
+6 -1 5 -1 6 -1 5 -1 5 -1 6 -1 5 -1 5 -1
+6 -1 5 -1 5 -1 6 -2 5 -1 5 -1 6 -1 5 -2
+6 -1 5 -2 5 -1 6 -2 5 -1 5 -2 6 -1 5 -2
+5 -1 6 -2 5 -2 5 -2 6 -1 5 -2 6 -2 5 -2
+5 -2 6 -2 5 -2 5 -2 6 -2 5 -2 5 -2 6 -2
+5 -2 5 -2 6 -2 5 -2 5 -3 6 -2 5 -2 6 -3
+5 -2 5 -3 6 -2 5 -2 5 -3 6 -3 5 -2 5 -3
+6 -2 5 -3 5 -3 6 -2 5 -3 6 -3 5 -3 5 -3
+6 -3 5 -3 5 -2 3068 602 100 MP stroke
+6 -3 5 -3 5 -3 6 -4 5 -3 5 -3 6 -3 5 -3
+6 -3 5 -4 5 -3 6 -3 5 -4 5 -3 6 -3 5 -4
+5 -3 6 -4 5 -3 5 -4 6 -4 5 -3 6 -4 5 -4
+5 -3 6 -4 5 -4 5 -4 6 -4 5 -3 5 -4 6 -4
+5 -4 5 -4 6 -4 5 -4 5 -5 6 -4 5 -4 6 -4
+5 -4 5 -5 6 -4 5 -4 5 -5 6 -4 5 -4 5 -5
+6 -4 5 -5 5 -4 6 -5 5 -5 6 -4 5 -5 5 -5
+6 -4 5 -5 5 -5 6 -5 5 -4 5 -5 6 -5 5 -5
+5 -5 6 -5 5 -5 6 -5 5 -5 5 -6 6 -5 5 -5
+5 -5 6 -5 5 -6 5 -5 6 -5 5 -6 5 -5 6 -6
+5 -5 6 -6 5 -5 5 -6 6 -5 5 -6 5 -6 6 -5
+5 -6 5 -6 6 -6 5 -5 5 -6 6 -6 5 -6 5 -6
+6 -6 5 -6 6 -6 2537 1049 100 MP stroke
+5 -6 5 -6 6 -6 5 -7 5 -6 6 -6 5 -6 5 -7
+6 -6 5 -6 5 -7 6 -6 5 -6 6 -7 5 -6 5 -7
+6 -7 5 -6 5 -7 6 -6 5 -7 5 -7 6 -7 5 -6
+5 -7 6 -7 5 -7 6 -7 5 -7 5 -7 6 -7 5 -7
+5 -7 6 -7 5 -7 5 -7 6 -8 5 -7 5 -7 6 -7
+5 -8 6 -7 5 -7 5 -8 6 -7 5 -8 5 -7 6 -8
+5 -7 5 -8 6 -8 5 -7 5 -8 6 -8 5 -7 5 -8
+6 -8 5 -8 6 -8 5 -8 5 -8 6 -8 5 -8 5 -8
+6 -8 5 -8 5 -8 6 -8 5 -8 5 -9 6 -8 5 -8
+6 -8 5 -9 5 -8 6 -9 5 -8 5 -9 6 -8 5 -9
+5 -8 6 -9 5 -8 5 -9 6 -9 5 -8 6 -9 5 -9
+5 -9 6 -9 5 -9 5 -8 6 -9 5 -9 5 -9 6 -9
+5 -9 5 -10 6 -9 2007 1802 100 MP stroke
+5 -9 6 -9 5 -9 5 -10 6 -9 5 -9 5 -10 6 -9
+5 -9 5 -10 6 -9 5 -10 5 -9 6 -10 5 -9 6 -10
+5 -10 5 -9 6 -10 5 -10 5 -10 6 -10 5 -9 5 -10
+6 -10 5 -10 5 -10 6 -10 5 -10 5 -10 6 -10 5 -10
+6 -11 5 -10 5 -10 6 -10 5 -11 5 -10 6 -10 5 -11
+5 -10 6 -10 5 -11 5 -10 6 -11 5 -11 6 -10 5 -11
+5 -10 6 -11 5 -11 5 -11 6 -10 5 -11 5 -11 6 -11
+5 -11 5 -11 6 -11 5 -11 6 -11 5 -11 5 -11 6 -11
+5 -11 5 -11 6 -12 5 -11 5 -11 6 -12 5 -11 5 -11
+6 -12 5 -11 6 -12 5 -11 5 -12 6 -11 5 -12 5 -11
+6 -12 5 -12 5 -12 6 -11 5 -12 5 -12 6 -12 5 -12
+5 -12 6 -11 5 -12 6 -12 5 -12 5 -13 6 -12 5 -12
+5 -12 6 -12 5 -12 1477 2860 100 MP stroke
+5 -13 6 -12 5 -12 5 -13 6 -12 5 -12 6 -13 5 -12
+5 -13 6 -12 5 -13 5 -12 6 -13 5 -13 5 -12 6 -13
+5 -13 5 -13 6 -13 5 -12 6 -13 5 -13 5 -13 6 -13
+5 -13 5 -13 6 -13 5 -13 5 -13 6 -14 5 -13 5 -13
+6 -13 5 -14 6 -13 5 -13 5 -14 6 -13 5 -13 5 -14
+6 -13 5 -14 5 -13 6 -14 5 -14 5 -13 6 -14 5 -14
+5 -14 6 -13 5 -14 6 -14 5 -14 5 -14 6 -14 5 -14
+5 -14 6 -14 5 -14 5 -14 6 -14 5 -14 5 -14 6 -15
+5 -14 6 -14 5 -14 5 -15 6 -14 5 -15 5 -14 6 -14
+5 -15 5 -15 6 -14 5 -15 5 -14 6 -15 5 -15 6 -14
+5 -15 5 -15 6 -15 5 -15 5 -14 6 -15 5 -15 5 -15
+6 -15 5 -15 5 -15 6 -15 5 -15 6 -15 5 -15 5 -14
+6 -15 5 -14 5 -15 947 4221 100 MP stroke
+6 -13 5 -13 5 -12 6 -12 5 -9 5 -8 6 -7 5 -3
+5 -2 899 4300 10 MP stroke
+6 w
+gr
+
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/window_fct2.pdf b/doc/tutorial/images/window_fct2.pdf
new file mode 100644
index 0000000..eb3d9fc
Binary files /dev/null and b/doc/tutorial/images/window_fct2.pdf differ
diff --git a/doc/tutorial/images/window_fct3.eps b/doc/tutorial/images/window_fct3.eps
new file mode 100755
index 0000000..d7a0692
--- /dev/null
+++ b/doc/tutorial/images/window_fct3.eps
@@ -0,0 +1,484 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: MATLAB, The Mathworks, Inc.
+%%Title: window_fct3.eps
+%%CreationDate: 07/29/2004 11:42:09
+%%DocumentNeededFonts: Helvetica
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%Pages: 1
+%%BoundingBox: 40 199 555 602
+%%EndComments
+
+%%BeginProlog
+% MathWorks dictionary
+/MathWorks 160 dict begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bind def
+/xdef {exch def} bdef
+/xstore {exch store} bdef
+% operator abbreviations
+/c /clip ldef
+/cc /concat ldef
+/cp /closepath ldef
+/gr /grestore ldef
+/gs /gsave ldef
+/mt /moveto ldef
+/np /newpath ldef
+/cm /currentmatrix ldef
+/sm /setmatrix ldef
+/rm /rmoveto ldef
+/rl /rlineto ldef
+/s {show newpath} bdef
+/sc {setcmykcolor} bdef
+/sr /setrgbcolor ldef
+/sg /setgray ldef
+/w /setlinewidth ldef
+/j /setlinejoin ldef
+/cap /setlinecap ldef
+/rc {rectclip} bdef
+/rf {rectfill} bdef
+% page state control
+/pgsv () def
+/bpage {/pgsv save def} bdef
+/epage {pgsv restore} bdef
+/bplot /gsave ldef
+/eplot {stroke grestore} bdef
+% orientation switch
+/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def
+% coordinate system mappings
+/dpi2point 0 def
+% font control
+/FontSize 0 def
+/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0]
+ makefont setfont} bdef
+/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse
+ exch dup 3 1 roll findfont dup length dict begin
+ { 1 index /FID ne {def}{pop pop} ifelse } forall
+ /Encoding exch def currentdict end definefont pop} bdef
+/isroman {findfont /CharStrings get /Agrave known} bdef
+/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse
+ exch FMS} bdef
+/csm {1 dpi2point div -1 dpi2point div scale neg translate
+ dup landscapeMode eq {pop -90 rotate}
+ {rotateMode eq {90 rotate} if} ifelse} bdef
+% line types: solid, dotted, dashed, dotdash
+/SO { [] 0 setdash } bdef
+/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef
+/DA { [6 dpi2point mul] 0 setdash } bdef
+/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4
+ dpi2point mul] 0 setdash } bdef
+% macros for lines and objects
+/L {lineto stroke} bdef
+/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef
+/AP {{rlineto} repeat} bdef
+/PDlw -1 def
+/W {/PDlw currentlinewidth def setlinewidth} def
+/PP {closepath eofill} bdef
+/DP {closepath stroke} bdef
+/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto
+ neg 0 exch rlineto closepath} bdef
+/FR {MR stroke} bdef
+/PR {MR fill} bdef
+/L1i {{currentfile picstr readhexstring pop} image} bdef
+/tMatrix matrix def
+/MakeOval {newpath tMatrix currentmatrix pop translate scale
+0 0 1 0 360 arc tMatrix setmatrix} bdef
+/FO {MakeOval stroke} bdef
+/PO {MakeOval fill} bdef
+/PD {currentlinewidth 2 div 0 360 arc fill
+ PDlw -1 eq not {PDlw w /PDlw -1 def} if} def
+/FA {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef
+/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef
+/FAn {newpath tMatrix currentmatrix pop translate scale
+ 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef
+/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale
+ 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef
+/vradius 0 def /hradius 0 def /lry 0 def
+/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def
+/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef
+ /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly
+ vradius add translate hradius vradius scale 0 0 1 180 270 arc
+ tMatrix setmatrix lrx hradius sub uly vradius add translate
+ hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix
+ lrx hradius sub lry vradius sub translate hradius vradius scale
+ 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub
+ translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix
+ closepath} bdef
+/FRR {MRR stroke } bdef
+/PRR {MRR fill } bdef
+/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix
+ closepath} bdef
+/FlrRR {MlrRR stroke } bdef
+/PlrRR {MlrRR fill } bdef
+/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def
+ newpath tMatrix currentmatrix pop ulx rad add uly rad add translate
+ rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad
+ sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix
+ closepath} bdef
+/FtbRR {MtbRR stroke } bdef
+/PtbRR {MtbRR fill } bdef
+/stri 6 array def /dtri 6 array def
+/smat 6 array def /dmat 6 array def
+/tmat1 6 array def /tmat2 6 array def /dif 3 array def
+/asub {/ind2 exch def /ind1 exch def dup dup
+ ind1 get exch ind2 get sub exch } bdef
+/tri_to_matrix {
+ 2 0 asub 3 1 asub 4 0 asub 5 1 asub
+ dup 0 get exch 1 get 7 -1 roll astore } bdef
+/compute_transform {
+ dmat dtri tri_to_matrix tmat1 invertmatrix
+ smat stri tri_to_matrix tmat2 concatmatrix } bdef
+/ds {stri astore pop} bdef
+/dt {dtri astore pop} bdef
+/db {2 copy /cols xdef /rows xdef mul dup string
+ currentfile exch readhexstring pop
+ /bmap xdef pop pop} bdef
+/it {gs np dtri aload pop moveto lineto lineto cp c
+ cols rows 8 compute_transform
+ {bmap} image gr}bdef
+/il {newpath moveto lineto stroke}bdef
+currentdict end def
+%%EndProlog
+
+%%BeginSetup
+MathWorks begin
+
+0 cap
+
+end
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 40 199 555 602
+MathWorks begin
+bpage
+%%EndPageSetup
+
+%%BeginObject: obj1
+bplot
+
+/dpi2point 12 def
+portraitMode 0216 7344 csm
+
+ 273 113 6178 4841 MR c np
+92 dict begin %Colortable dictionary
+/c0 { 0 0 0 sr} bdef
+/c1 { 1 1 1 sr} bdef
+/c2 { 1 0 0 sr} bdef
+/c3 { 0 1 0 sr} bdef
+/c4 { 0 0 1 sr} bdef
+/c5 { 1 1 0 sr} bdef
+/c6 { 1 0 1 sr} bdef
+/c7 { 0 1 1 sr} bdef
+c0
+1 j
+1 sg
+ 0 0 6913 5186 PR
+6 w
+0 4226 5356 0 0 -4226 899 4615 4 MP
+PP
+-5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke
+4 w
+DO
+SO
+6 w
+0 sg
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+ 899 4615 mt 6255 4615 L
+ 899 4615 mt 899 389 L
+ 899 4615 mt 899 4561 L
+ 899 389 mt 899 442 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 599 4894 mt
+(-32) s
+1903 4615 mt 1903 4561 L
+1903 389 mt 1903 442 L
+1603 4894 mt
+(-20) s
+2572 4615 mt 2572 4561 L
+2572 389 mt 2572 442 L
+2272 4894 mt
+(-12) s
+3577 4615 mt 3577 4561 L
+3577 389 mt 3577 442 L
+3504 4894 mt
+(0) s
+4497 4615 mt 4497 4561 L
+4497 389 mt 4497 442 L
+4351 4894 mt
+(11) s
+5167 4615 mt 5167 4561 L
+5167 389 mt 5167 442 L
+5021 4894 mt
+(19) s
+6255 4615 mt 6255 4561 L
+6255 389 mt 6255 442 L
+6109 4894 mt
+(32) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 952 4615 L
+6255 4615 mt 6201 4615 L
+ 273 4713 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 4550 mt
+(-20) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 3558 mt 952 3558 L
+6255 3558 mt 6201 3558 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 3656 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 3493 mt
+(-15) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 2502 mt 952 2502 L
+6255 2502 mt 6201 2502 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 2600 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 2437 mt
+(-10) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 1445 mt 952 1445 L
+6255 1445 mt 6201 1445 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 1543 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 1380 mt
+(-5) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 389 mt 952 389 L
+6255 389 mt 6201 389 L
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 264 FMSR
+
+ 273 487 mt
+(10) s
+%%IncludeResource: font Helvetica
+/Helvetica /ISOLatin1Encoding 176 FMSR
+
+ 566 324 mt
+(0) s
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 899 4615 L
+ 899 4615 mt 6255 4615 L
+ 899 389 mt 6255 389 L
+ 899 4615 mt 899 389 L
+6255 4615 mt 6255 389 L
+gs 899 389 5357 4227 MR c np
+24 w
+75 255 83 276 84 265 84 254 83 243 84 233 84 221 83 211
+84 200 84 189 83 179 84 167 84 157 84 146 83 135 84 124
+84 114 83 103 84 92 84 81 83 70 84 59 84 49 83 38
+84 27 84 16 83 5 84 -5 84 -16 84 -27 83 -38 84 -49
+84 -59 83 -70 84 -81 84 -92 83 -103 84 -114 84 -124 83 -135
+84 -146 84 -157 83 -167 84 -179 84 -189 84 -200 83 -211 84 -221
+84 -233 83 -243 84 -254 84 -265 83 -276 75 -255 1326 4616 55 MP stroke
+gr
+
+24 w
+ 60 60 1401 4361 FO
+ 60 60 1484 4085 FO
+ 60 60 1568 3820 FO
+ 60 60 1652 3566 FO
+ 60 60 1735 3323 FO
+ 60 60 1819 3090 FO
+ 60 60 1903 2869 FO
+ 60 60 1986 2658 FO
+ 60 60 2070 2458 FO
+ 60 60 2154 2269 FO
+ 60 60 2238 2090 FO
+ 60 60 2321 1923 FO
+ 60 60 2405 1766 FO
+ 60 60 2489 1620 FO
+ 60 60 2572 1485 FO
+ 60 60 2656 1361 FO
+ 60 60 2740 1247 FO
+ 60 60 2823 1144 FO
+ 60 60 2907 1052 FO
+ 60 60 2991 971 FO
+ 60 60 3074 901 FO
+ 60 60 3158 842 FO
+ 60 60 3242 793 FO
+ 60 60 3325 755 FO
+ 60 60 3409 728 FO
+ 60 60 3493 712 FO
+ 60 60 3577 707 FO
+ 60 60 3660 712 FO
+ 60 60 3744 728 FO
+ 60 60 3828 755 FO
+ 60 60 3911 793 FO
+ 60 60 3995 842 FO
+ 60 60 4079 901 FO
+ 60 60 4162 971 FO
+ 60 60 4246 1052 FO
+ 60 60 4330 1144 FO
+ 60 60 4413 1247 FO
+ 60 60 4497 1361 FO
+ 60 60 4581 1485 FO
+ 60 60 4664 1620 FO
+ 60 60 4748 1766 FO
+ 60 60 4832 1923 FO
+ 60 60 4916 2090 FO
+ 60 60 4999 2269 FO
+ 60 60 5083 2458 FO
+ 60 60 5167 2658 FO
+ 60 60 5250 2869 FO
+ 60 60 5334 3090 FO
+ 60 60 5418 3323 FO
+ 60 60 5501 3566 FO
+ 60 60 5585 3820 FO
+ 60 60 5669 4085 FO
+ 60 60 5752 4361 FO
+gs 899 389 5357 4227 MR c np
+0 -4226 2572 4615 2 MP stroke
+0 -4226 4497 4615 2 MP stroke
+0 -4226 5167 4615 2 MP stroke
+0 -4226 1903 4615 2 MP stroke
+6 w
+gr
+
+6 w
+
+end
+
+eplot
+%%EndObject
+
+epage
+end
+
+showpage
+
+%%Trailer
+%%EOF
diff --git a/doc/tutorial/images/window_fct3.pdf b/doc/tutorial/images/window_fct3.pdf
new file mode 100644
index 0000000..e8a6582
Binary files /dev/null and b/doc/tutorial/images/window_fct3.pdf differ
diff --git a/doc/tutorial/paper.tex b/doc/tutorial/paper.tex
new file mode 100755
index 0000000..2cc8e47
--- /dev/null
+++ b/doc/tutorial/paper.tex
@@ -0,0 +1,2229 @@
+%==============================================================================
+\documentclass[11pt,a4paper,twoside,bibtotoc]{scrartcl}
+%==============================================================================
+
+% LaTeX packages
+\usepackage{a4wide}
+\usepackage{amsfonts}
+\usepackage{amsmath}
+\usepackage{theorem}
+\usepackage{color}
+\usepackage{graphicx}
+\usepackage{subfigure}
+\usepackage[boxed,Algorithm]{algorithm}
+\usepackage{algorithmic}
+
+% Allow for more figures on each side
+\renewcommand{\topfraction}{1}
+\renewcommand{\textfraction}{0}
+\setcounter{totalnumber}{4}
+
+% Shortcuts for maths symbols.
+\newcommand{\N}{\ensuremath{\mathbb{N}}}
+\newcommand{\T}{\ensuremath{\mathbb{T}}}
+\renewcommand{\S}{\ensuremath{\mathbb{S}}}
+\newcommand{\NZ}{\ensuremath{\mathbb{N}_{0}}}
+\newcommand{\Z}{\ensuremath{\mathbb{Z}}}
+\newcommand{\R}{\ensuremath{\mathbb{R}}}
+\newcommand{\Rp}{\ensuremath{\mathbb{R}^{+}}}
+\newcommand{\Rn}{\ensuremath{\mathbb{R}^n}}
+\newcommand{\Rnn}{\ensuremath{\mathbb{R}^{n \times n}}}
+\newcommand{\C}{\ensuremath{\mathbb{C}}}
+\newcommand{\nfft}{\textsf{NFFT}}
+\newcommand{\nfftversion}{3.0}
+\newcommand{\cO}{\ensuremath{\mathcal{O}}}
+\newcommand{\tT}{\ensuremath{\text{\tiny{T}}}}
+\newcommand{\ti}{\ensuremath{\text{\scriptsize{i}}}}
+\newcommand{\e}{{\ensuremath{\mathrm{e}}}}
+\newcommand{\eim}[1]{\ensuremath{\mathrm{e}^{-2\pi{\ti} #1}}}
+\newcommand{\eip}[1]{\ensuremath{\mathrm{e}^{ 2\pi{\ti} #1}}}
+\renewcommand{\mathbf}[1]{\ensuremath{\boldsymbol{#1}}}
+\newcommand{\ds}{\displaystyle}
+\newcommand{\sinc}{{\rm sinc}}
+\newcommand{\dist}{{\rm dist}}
+\newcommand{\adj}{{\vdash \hspace*{-1.72mm} \dashv}}
+\DeclareMathOperator{\diag}{diag}
+\DeclareMathOperator{\dd}{d}
+\newcommand{\bend}
+{
+ \hspace*{0ex} \hfill
+ \hbox{\vrule height 1.5ex \vbox{\hrule width 1.4ex \vskip
+ 1.4ex\hrule width 1.4ex} \vrule height 1.5ex}
+}
+
+\def\invisible#1{\textcolor{white}{#1}}
+
+% Environment Numbering
+\numberwithin{equation}{section}
+\numberwithin{table}{section}
+\numberwithin{figure}{section}
+
+%==============================================================================
+% Title Page
+%==============================================================================
+\begin{document}
+
+\title{NFFT \nfftversion\ - Tutorial}
+\author{Jens Keiner\thanks{keiner at math.uni-luebeck.de,University of
+ L\"ubeck, Institute of Mathematics, 23560 L\"ubeck} \and
+ Stefan Kunis\thanks{kunis at mathematik.tu-chemnitz.de, Chemnitz University of
+ Technology, Department of Mathematics, 09107 Chemnitz, Germany} \and
+ Daniel Potts\thanks{potts at mathematik.tu-chemnitz.de, Chemnitz University of
+ Technology, Department of Mathematics, 09107 Chemnitz, Germany}}
+\date{}
+\maketitle
+
+\begin{center}
+ \vspace{-8ex}
+ {\large {\tt http://www.tu-chemnitz.de/$\sim$potts/nfft}}
+ \vspace{8ex}
+\end{center}
+
+%\begin{abstract}
+%\noindent {\it Key words and phrases}: \\
+%\noindent {\it Last revision}: \today \\
+%\noindent {\it 2000 AMS Mathematics Subject Classification}: 65T50, 65T40
+%\end{abstract}
+
+
+\begin{center}
+ \begin{tabular}{cc}
+ \includegraphics[width=7.5cm]{images/front_pic1} &
+ \includegraphics[width=7.5cm]{images/front_pic2}
+ \end{tabular}
+\end{center}
+
+\clearpage
+\tableofcontents
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Introduction}\label{sect:1}
+\setcounter{equation}{0}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+This tutorial surveys the fast Fourier transform at nonequispaced nodes (NFFT),
+its generalisations, its inversion, and the related C library NFFT \nfftversion.
+The goal of this manuscript is twofold -- to shed some light on the
+mathematical background, as well as to provide an overview over the C library
+to allow the user to use it effectively. Following this, this document splits
+into two parts:
+
+In Sections \ref{sect:nfft}, \ref{sect:gen} and \ref{sect:inv}, we
+introduce the NFFT which, as a starting point, leads to several concepts for
+further generalisation and inversion. We focus on a mathematical
+description of the related algorithms. However, we complement the necessarily
+incomplete quick glance at the ideas by references to related mathematical
+literature.
+In Section \ref{sect:nfft}, we introduce the problem of computing the discrete
+Fourier transform at nonequispaced nodes (NDFT), along with the notation
+used and related works in the literature. The algorithms (NFFT) are developed
+in pseudo code.
+Furthermore, we turn for recent generalisations, including in particular NFFTs
+on the sphere and iterative schemes for inversion of the nonequispaced FFTs,
+in Section \ref{sect:gen} and \ref{sect:inv}, respectively.
+
+Having laid the theoretical foundations, Section \ref{sect:lib} provides an
+overview over the NFFT \nfftversion\ C library and the general principles for using the
+available algorithms in your own code. Rather than describing the library
+interface in every detail, we restrict to simple recipes in order to
+familiarise with the very general concepts sufficient for most everyday tasks.
+For the experienced user, we provide full interface documentation
+(see \verb+doc/html/index.html+ in the package directory) which gives
+detailed information on more advanced options and parameter settings for
+each routine. Figure \ref{nfft:fig:svn} gives an overview over the directory
+structure of the NFFT \nfftversion\ package.
+Finally, Section \ref{sect:ex} gives some simple examples for using the
+library and some more advanced applications are given in Section
+\ref{sec:appl}
+along with numerical results.
+
+\begin{figure}[p]
+ \centering
+ \input{tree}
+ \caption{Directory structure of the NFFT \nfftversion\ package
+ \label{nfft:fig:svn}}
+\end{figure}
+
+%The computational complexity of the proposed algorithms is $\cO(|I_{\mathbf{N}}|
+%\log |I_{\mathbf{N}}| + M)$ for $|I_{\mathbf{N}}|$ equispaced frequencies and $M$
+%nonequispaced samples.
+%Besides the core module for the nonequispaced FFT, the following tree
+%structure shows various generalisations, a module for inverse transforms, some
+%examples, and recent applications.
+
+%The remainder of this tutorial is organised as follows:
+%The implementation and usage of the library is described in Section
+%\ref{sect:library}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Notation, the NDFT, and the NFFT}\label{sect:nfft}
+\setcounter{equation}{0}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+This section summarises the mathematical theory and ideas behind the NFFT.
+Let the torus
+\begin{equation*}
+ \T^d
+ := \left\{ \mathbf{x}=\left(x_t\right)_{t=0,\hdots,d-1} \in \R^d: - \frac{1}{2}
+ \le x_t < \frac{1}{2},\; t=0,\hdots,d-1 \right\}
+\end{equation*}
+of dimension $d\in\N$ be given.
+It will serve as domain from which the nonequispaced nodes $\mathbf{x}$ are taken.
+Thus, the sampling set is given by ${\cal X}:=\{\mathbf{x}_j \in
+\T^d:\,j=0,\hdots,M-1\}$.
+
+Possible frequencies $\mathbf{k}\in\Z^d$ are collected in the multi-index set
+\begin{equation*}
+ I_{\mathbf{N}} := \left\{ \mathbf{k}=\left(k_t\right)_{t=0,\hdots,d-1} \in \Z^d: -
+ \frac{N_t}{2} \le k_t < \frac{N_t}{2} ,\;t=0,\hdots,d-1\right\},
+\end{equation*}
+where $\mathbf{N}=\left(N_t\right)_{t=0,\hdots,d-1}$ is the {\bf EVEN}
+multibandlimit, i.e., $N_t\in 2\N$.
+To keep notation simple, the multi-index $\mathbf{k}$ addresses elements of
+vectors and matrices as well, i.e., the plain index $\tilde
+k:=\sum_{t=0}^{d-1} (k_t+\frac{N_t}{2}) \prod_{t'=t+1}^{d-1} N_{t'}$
+is not used here.
+The inner product between the frequency index $\mathbf{k}$ and the time/spatial
+node $\mathbf{x}$ is defined in the usual way by $\mathbf{k} \mathbf{x}:=k_0 x_0 + k_1 x_1
++\hdots+ k_{d-1} x_{d-1}$.
+Furthermore, two vectors may be combined by the component-wise product $\mathbf{\sigma}
+\odot \mathbf{N}:=\left(\sigma_0 N_0, \sigma_1 N_1, \hdots, \sigma_{d-1} N_{d-1},
+\right)^{\top}$ with its inverse $\mathbf{N}^{-1}:=\left(\frac{1}{N_0},
+ \frac{1}{N_1}, \hdots, \frac{1}{N_{d-1}} \right)^{\top}$.
+
+The space of all $d$-variate, one-periodic functions $f: \T^d \rightarrow \C$
+is restricted to the space of $d$-variate trigonometric polynomials
+\begin{equation*}
+ T_{\mathbf{N}}:={\rm span}\left(\eim{\mathbf{k}\mathbf{\cdot}}:\,\mathbf{k} \in I_{\mathbf{N}}\right)
+\end{equation*}
+with degree $N_t\; (t=0,\hdots,d-1)$ in the $t$-th dimension.
+The dimension $\dim T_{N}$ of the space of $d$-variate trigonometric
+polynomials $T_{N}$ is given by $\dim T_{N} = |I_{\mathbf{N}}| =
+\prod\limits_{t=0}^{d-1} N_t$.
+
+%------------------------------------------------------------------------------
+\subsection{NDFT - nonequispaced discrete Fourier transform}
+%------------------------------------------------------------------------------
+The first problem to be addressed can be regarded as a matrix vector
+multiplication. For a finite number of given Fourier coefficients
+$\hat f_{\mathbf{k}} \in \C$, $\mathbf{k}\in I_{\mathbf{N}}$, we consider the evaluation of the
+trigonometric polynomial
+\begin{equation} \label{trigPoly}
+ f\left(\mathbf{x}\right) := \sum_{\mathbf{k}\in I_{\mathbf{N}}} \hat{f}_{\mathbf{k}}
+ \eim{\mathbf{k}\mathbf{x}}
+\end{equation}
+at given nonequispaced nodes $\mathbf{x}_j \in \T^d$.
+Thus, our concern is the evaluation of
+\begin{equation}\label{eq:nfft}
+ f_j = f\left(\mathbf{x}_j\right) := \sum_{\mathbf{k}\in I_{\mathbf{N}}} \hat{f}_{\mathbf{k}}
+ \eim{\mathbf{k}\mathbf{x}_j},
+\end{equation}
+$j=0,\hdots,M-1$.
+In matrix vector notation this reads
+\begin{equation} \label{ndft}
+ \mathbf{f}=\mathbf{A} \mathbf{\hat{f}}
+\end{equation}
+where
+\begin{equation*}
+ \mathbf{f}:=\left(f_j\right)_{j=0,\hdots,M-1},\quad
+ \mathbf{A}:=\left(\eim{\mathbf{k}\mathbf{x}_j}\right)_{j=0,\hdots,M-1;\;\mathbf{k}\in I_{\mathbf{N}}},
+ \quad
+ \mathbf{\hat{f}}:=\left(\hat{f}_{\mathbf{k}}\right)_{\mathbf{k}\in I_{\mathbf{N}}}.
+\end{equation*}
+The straightforward algorithm for computing this matrix vector product,
+which is called NDFT, takes $\cO(M |I_{\mathbf{N}}|)$ arithmetical operations.
+
+A closely related matrix vector product is the adjoint NDFT
+\begin{equation*}
+ \mathbf{\hat{h}}=\mathbf{A}^{\adj} \mathbf{f}, \qquad \hat h_{\mathbf{k}}=\sum_{j=0}^{M-1}
+ \hat{f}_{ j} \eip{\mathbf{k}\mathbf{x}_j},
+\end{equation*}
+where $\mathbf{A}^{\adj}=\overline {\mathbf{A}}^{\top}$ denotes the conjugate transpose
+of the nonequispaced Fourier matrix $\mathbf{A}$.
+
+\subsubsection*{Equispaced nodes}
+For $d\in\N,\;N_t=N\in 2\N$, $t=0,\hdots,d-1$ and $M=N^d$ equispaced nodes
+$\mathbf{x}_{\mathbf{j}}={1 \over N}\mathbf{j}$, $\mathbf{j} \in I_{\mathbf{N}}$ the computation of
+\eqref{ndft} is known as multivariate discrete Fourier transform (DFT).
+In this special case, the input data $\hat{f}_{\mathbf{k}}$ are called discrete
+Fourier coefficients and the samples $f_{\mathbf{j}}$ can be computed by the well
+known fast Fourier transform (FFT) with only $\cO(|I_{\mathbf{N}}| \log |
+ I_{\mathbf{N}}|)$ arithmetic operations.
+Furthermore, one has the inversion formula
+\begin{equation*}
+ \mathbf{A} \mathbf{A}^{\adj}=\mathbf{A}^{\adj} \mathbf{A}= |I_{\mathbf{N}}| \mathbf{I},
+\end{equation*}
+which does {\bf NOT} hold true for the nonequispaced case in general.
+
+%------------------------------------------------------------------------------
+\subsection{NFFT - nonequispaced fast Fourier transform}
+\label{sec.nfft}
+%------------------------------------------------------------------------------
+For the sake of simplicity, we explain the ideas behind the NFFT for the
+one-dimensional case $d=1$ and the algorithm NFFT.
+The generalisation of the FFT is an approximative algorithm and has
+computational complexity ${\cal O}\left(N \log N + \log
+ \left(1/\varepsilon\right) M\right)$, where $\varepsilon$ denotes the
+desired accuracy.
+The main idea is to use standard FFTs and a window function $\varphi$ which is
+well localised in the time/spatial domain $\mathbb{R}$ and in the frequency
+domain $\mathbb{R}$.
+Several window functions were proposed in \cite{duro93,bey95,st97,four,fesu02}.
+
+The considered problem is the fast evaluation of
+\begin{equation} \label{trigPoly1d}
+ f\left(x\right) = \sum_{k\in I_N} \hat{f}_k \eim{k x}
+\end{equation}
+at arbitrary nodes $x_j \in \T,\;j=0,\hdots,M-1$.
+
+\subsubsection*{The ansatz}
+One wants to approximate the trigonometric polynomial $f$ in
+(\ref{trigPoly1d}) by a linear combination of shifted 1-periodic window
+functions $\tilde \varphi$ as
+\begin{equation}\label{s1}
+ s_1\left(x\right) := \sum_{l \in I_n} g_{l} \; \tilde \varphi\left(x -
+ \frac{l}{n}\right) \, .
+\end{equation}
+With the help of an oversampling factor $\sigma >1$, the FFT length is given by
+$n:=\sigma N$.
+
+\subsubsection*{The window function}
+Starting with a reasonable window function $\varphi:\R\rightarrow\R$, one
+assumes that its 1-periodic version $\tilde\varphi$, i.e.
+\begin{equation*}
+ \tilde \varphi\left(x\right):=\sum_{r \in \Z} \varphi\left(x+r\right)
+\end{equation*}
+has an uniformly convergent Fourier series and is well localised in the
+time/spatial domain $\T$ and in the frequency domain $\mathbb{Z}$.
+The periodic window function $\tilde \varphi$ may be represented by its
+Fourier series
+\begin{equation*}
+ \tilde \varphi\left(x\right)=
+ \sum_{k\in \Z} c_k\left(\tilde\varphi\right) \eim{k x}
+\end{equation*}
+with the Fourier coefficients
+\begin{equation*}
+ c_k\left( \tilde \varphi \right)
+ :=\int\limits_{\T} \tilde \varphi \left(x\right) \eip{k x} \, {\rm d} x
+ = \int\limits_{\mathbb{R}} \varphi \left(x\right) \eip{k x} \, {\rm d} x
+ = \hat \varphi \left(k\right),\quad k\in\Z.
+\end{equation*}
+\begin{figure}[ht!]
+ \begin{center}
+ \begin{tabular}{ccc}
+ \includegraphics[width=4.8cm,height=3.8cm]{images/window_fct1} &
+ \includegraphics[width=4.8cm,height=3.8cm]{images/window_fct2} &
+ \includegraphics[width=4.8cm,height=3.8cm]{images/window_fct3}
+ \end{tabular}
+ \end{center}
+ \caption{From left to right: Gaussian window function $\varphi$, its
+ 1-periodic version $\tilde \varphi$, and the integral Fourier-transform
+ $\hat \varphi$ (with pass, transition, and stop band) for
+ $N=24,\,\sigma=\frac{4}{3},\,n=32$.}
+ \label{fig:window_fun}
+ \end{figure}
+
+\subsubsection*{The first approximation - cut-off in frequency domain}
+Switching from the definition (\ref{s1}) to the frequency domain, one obtains
+\begin{equation*}
+ s_1\left(x\right)
+ =\sum_{k \in I_n} \hat g_k \, c_k\left(\tilde \varphi\right) \, \eim{k x}
+ +\sum_{r \in \Z \backslash \left\{0\right\}} \sum_{k \in I_n} \hat g_k \,
+ c_{k + n r} \left(\tilde \varphi\right) \, \eim{(k + n r)x }
+\end{equation*}
+with the discrete Fourier coefficients
+\begin{equation} \label{coeff}
+ \hat g_k := \sum_{l \in I_n} g_l \, \eip{\frac{k l}{n}}.
+\end{equation}
+Comparing (\ref{trigPoly1d}) to (\ref{s1}) and assuming
+$c_k\left(\tilde\varphi\right)$ small for $|k|\ge n-\frac{N}{2}$ suggests to
+set
+\begin{equation} \label{coeff2}
+ \hat g_k := \left\{
+ \begin{array}{ll}
+ \frac{\hat f_k}{c_k \left(\tilde \varphi\right)} & \text{for } k \in I_N
+ , \\[1ex]
+ 0 & \text{for } k \in I_n \backslash I_N . \\
+ \end{array}
+ \right.
+\end{equation}
+Then the values $g_l$ can be obtained from (\ref{coeff}) by
+\begin{equation*}
+ g_l = \frac{1}{n}\sum\limits_{k \in I_N} \hat g_k \, \eim{\frac{k l}{n}}
+ \qquad (l \in I_n),
+\end{equation*}
+a FFT of size $n$.
+
+This approximation causes an aliasing error.
+
+\subsubsection*{The second approximation - cut-off in time/spatial domain}
+If $\varphi$ is well localised in time/space domain $\mathbb{R}$ it can be
+approximated by a function
+\begin{equation*}
+ \psi\left(x\right)=\varphi\left(x\right) \chi_{[-{m \over n},{m \over
+ n}]}\left(x\right)
+\end{equation*}
+with ${\rm supp} \, \psi \, \left[-{m \over n},{m \over n}\right], \;m \ll
+n,\; m\in \N$.
+Again, one defines its one periodic version $\tilde \psi$ with compact support
+in $\T$ as
+\begin{equation*}
+ \tilde \psi\left(x\right)=\sum_{r \in \Z} \psi\left(x+r\right).
+\end{equation*}
+With the help of the index set
+\begin{equation*}
+ I_{n,m} \left(x_j\right) := \left\{ l \in I_n : n x_j - m \le l \le n x_j +
+ m \right\}
+\end{equation*}
+an approximation to $s_1$ is defined by
+\begin{equation} \label{approx}
+ s\left(x_j\right) := \sum_{l \in I_{n,m}\left(x_j\right) } g_l \,
+ \tilde\psi\left(x_j - {l \over n}\right) \, .
+\end{equation}
+Note, that for fixed $x_j\in \T$, the above sum contains at most
+$(2m+1)$ nonzero summands.
+
+This approximation causes a truncation error.
+
+\subsubsection*{The case $d>1$}
+Starting with the original problem of evaluating the multivariate
+trigonometric polynomial in (\ref{trigPoly}) one has to do a few
+generalisations.
+The window function is given by
+\begin{equation*}
+ \varphi\left(\mathbf{x}\right):=\varphi_0\left(x_0\right)
+ \varphi_1\left(x_1\right) \hdots \varphi_{d-1}\left(x_{d-1}\right)
+\end{equation*}
+where $\varphi_t$ is an univariate window function.
+Thus, a simple consequence is
+\begin{equation*}
+ c_{\mathbf{k}}\left(\tilde \varphi\right)
+ = c_{k_0}\left(\tilde \varphi_0\right) c_{k_1}\left(\tilde \varphi_1\right)
+ \hdots c_{k_{d-1}}\left(\tilde \varphi_{d-1}\right).
+\end{equation*}
+The ansatz is generalised to
+\begin{equation*}
+ s_1\left(\mathbf{x}\right) := \sum_{\mathbf{l} \in I_{\mathbf{n}}} g_{\mathbf{l}} \; \tilde
+ \varphi\left(\mathbf{x} - \mathbf{n}^{-1}\odot\mathbf{l}\right),
+\end{equation*}
+where the FFT size is given by $\mathbf{n}:=\mathbf{\sigma} \odot \mathbf{N}$ and the
+oversampling factors by
+$\mathbf{\sigma}=\left(\sigma_0,\hdots,\sigma_{d-1}\right)^{\top}$.
+Along the lines of (\ref{coeff2}) one defines
+\begin{equation*}
+ \hat g_{\mathbf{k}} := \left\{
+ \begin{array}{ll}
+ \frac{\hat f_{\mathbf{k}}}{c_{\mathbf{k}} \left(\tilde \varphi\right)} & \text{for
+ } \mathbf{k} \in I_{\mathbf{N}} , \\[1ex]
+ 0 & \text{for } \mathbf{k} \in I_{\mathbf{n}} \backslash I_{\mathbf{N}} . \\
+ \end{array}
+ \right.
+\end{equation*}
+The values $g_{\mathbf{l}}$ can be obtained by a (multivariate) FFT of size $n_0
+\times n_1 \times \hdots \times n_{d-1}$ as
+\begin{equation*}
+ g_{\mathbf{l}} = \frac{1}{\left|I_{\mathbf{n}}\right|}\sum\limits_{\mathbf{k} \in
+ I_{\mathbf{N}}} \hat g_{\mathbf{k}} \, \eim{\mathbf{k} \left(\mathbf{n}^{-1}\odot \mathbf{l}\right)},
+ \quad \mathbf{l} \in I_{\mathbf{n}}.
+\end{equation*}
+Using the compactly supported function $\psi\left(\mathbf{x}\right)=\varphi\left(\mathbf{x}\right)\chi_{[-{m \over n},{m \over
+ n}]^d}\left(\mathbf{x}\right)$,
+one obtains
+\begin{equation*}
+ s\left(\mathbf{x}_j\right) := \sum_{\mathbf{l} \in I_{\mathbf{n},m}\left(\mathbf{x}_j\right) }
+ g_{\mathbf{l}} \, \tilde\psi\left(\mathbf{x}_j - \mathbf{n}^{-1}\odot\mathbf{l}\right) \, ,
+\end{equation*}
+where $\tilde \psi$ again denotes the one periodic version of $\psi$ and the
+multi-index set is given by
+\begin{equation*}
+ I_{\mathbf{n},m} \left(\mathbf{x}_j\right) := \left\{ \mathbf{l} \in I_{\mathbf{n}} : \mathbf{n}
+ \odot \mathbf{x}_j - m \mathbf{1} \le \mathbf{l} \le \mathbf{n} \odot \mathbf{x}_j + m
+ \mathbf{1}\right\}\,.
+\end{equation*}
+
+\subsubsection*{The algorithm}
+In summary, the following Algorithm~\ref{algo:nfft} is obtained for the fast
+computation of \eqref{ndft} with ${\cal O} \left(\left|I_{\mathbf{n}}\right| \log
+ \left|I_{\mathbf{n}}\right| + m M\right)$ arithmetic operations.
+\begin{algorithm}[ht]
+ \caption{\tt NFFT\label{algo:nfft}}
+ Input: $d,M \in \N$, $\mathbf{N}\in 2\N^d$\\
+ {\invisible{Input:}} ${\mathbf{x}}_j\in [-\frac{1}{2},\frac{1}{2}]^d,\;
+ j=0,\hdots,M-1$, and $\hat f_{\mathbf{k}}\in \C,\; \mathbf{k} \in I_{\mathbf{N}}$,\\[1ex]
+ %{\invisible{Input:}} ($\mathbf{\sigma} \in \mathbb{R}^d ,\;\sigma_t > 1,\;t=0,\hdots,d-1$, $m \in \N$, flags)\\[1ex]
+ %Precomputation: $\mathbf{n} := \sigma \odot \mathbf{N}$,\\
+ %{\invisible{Precomputation:}} $c_{\mathbf{k}}\left(\tilde \varphi\right), \; \mathbf{k} \in I_{\mathbf{N}}$
+ %if the flag (see Section \ref{sect:parameters}) {\tt PRE\_PHI\_HUT} is set,\\
+ %{\invisible{Precomputation:}} $\tilde\psi\left({\mathbf{x}}_j - \mathbf{n}^{-1}\odot \mathbf{l}\right),
+ %\, j=0,\hdots,M-1 , \, \mathbf{l} \in I_{\mathbf{n},\mathbf{m}} \left({\mathbf{x}}_j\right)$ if {\tt PRE\_PSI} is set.
+ \begin{algorithmic}[1]
+ \topsep=1.5ex
+ \itemsep=1.5ex
+
+ \STATE For $\mathbf{k} \in I_{\mathbf{N}}$ compute
+ \begin{equation*}
+ \hat g_{\mathbf{k}} :=\frac{\hat f_{\mathbf{k}}}{ \left|I_{\mathbf{n}}\right| c_{\mathbf{k}}
+ \left(\tilde \varphi\right)}.
+ \end{equation*}
+
+ \STATE For $\mathbf{l} \in I_{\mathbf{n}}$ compute by $d$-variate {\rm FFT}
+ \begin{equation*}
+ g_{\mathbf{l}} := \sum\limits_{\mathbf{k} \in I_{\mathbf{N}} } \hat g_{\mathbf{k}} \,
+ \eim{\mathbf{k} \left(\mathbf{n}^{-1}\odot \mathbf{l}\right)}.
+ \end{equation*}
+
+ \STATE For $j=0,\hdots,M-1$ compute
+ \begin{equation*}
+ f_j := \sum\limits_{\mathbf{l} \in I_{\mathbf{n},m} \left({\mathbf{x}}_j\right)
+ } g_{\mathbf{l}} \, \tilde\psi\left({\mathbf{x}}_j - \mathbf{n}^{-1}\odot \mathbf{l}\right).
+ \end{equation*}
+ \end{algorithmic}
+ Output: approximate values $f_j,\;j=0,\hdots,M-1$.\\
+ Complexity: ${\cal O} (|\mathbf{N}| \log |\mathbf{N}|+M)$.
+\end{algorithm}
+
+Algorithm~\ref{algo:nfft} reads in matrix vector notation as
+\begin{equation*}
+ \mathbf{A} \mathbf{\hat{f}} \approx \mathbf{B} \mathbf{B} \mathbf{B} \mathbf{\hat{f}},
+\end{equation*}
+where $\mathbf{B}$ denotes the real $M \times \left|I_{\mathbf{n}}\right|$ sparse matrix
+\begin{equation*} \label{spB}
+ \mathbf{B} := \left( \tilde\psi\left(\mathbf{x}_j - \mathbf{n}^{-1}\odot\mathbf{l}\right)
+ \right)_{j=0,\hdots,M-1;\, \mathbf{l}\in I_{\mathbf{n}}},
+\end{equation*}
+where $\mathbf{B}$ is the Fourier matrix of size $\left|I_{\mathbf{n}}\right| \times
+\left|I_{\mathbf{n}}\right|$, and where $\mathbf{B}$ is the real $\left|I_{\mathbf{n}}\right|
+\times |I_{\mathbf{N}}|$ 'diagonal' matrix
+\begin{equation*}
+ \mathbf{B} := \bigotimes_{t=0}^{d-1} \left(\mathbf{O}_t \, | \, \mbox{diag}\left(1/\,
+ c_{k_t}\left(\tilde \varphi_t\right)\right)_{k_t\in I_{N_t}} \, | \,
+ \mathbf{O}_t \right)^{\rm {T}}
+\end{equation*}
+with zero matrices $\mathbf{O}_t$ of size $N_t \times \frac{n_t-N_t}{2}$.
+
+The corresponding computation of the adjoint matrix vector product reads as
+\begin{equation*}
+ \mathbf{A}^{\adj} \mathbf{\hat{f}} \approx \mathbf{B}^{\top} \mathbf{B}^{\adj} \mathbf{B}^{\top}
+ \mathbf{\hat{f}} \, .
+\end{equation*}
+With the help of the transposed index set
+\begin{equation*}
+ I_{\mathbf{n},m}^{\top}\left(\mathbf{l}\right) := \left\{j=0,\hdots,M-1 : \mathbf{l}-m
+ \mathbf{1} \le \mathbf{n} \odot \mathbf{x}_j \le \mathbf{l}+m \mathbf{1}\right\},
+\end{equation*}
+one obtains Algorithm~\ref{algo:nfftH} for the adjoint NFFT.
+\begin{algorithm}[htbp]
+ \caption{\tt NFFT$^{\adj}$\label{algo:nfftH}}
+ Input: $d,M \in \N$, $\mathbf{N}\in 2\N^d$\\
+ {\invisible{Input:}} ${\mathbf{x}}_j\in [-\frac{1}{2},\frac{1}{2}]^d,\; j=0,\hdots,M-1$, and $f_j\in \C,\; j=0,\hdots,M-1$,\\[1ex]
+ %Input: $\mathbf{N}\in \N^d$, $\mathbf{\sigma} \in \mathbb{R}^d ,\;\sigma_t > 1,\;t=0,\hdots,d-1$, $M \in \N$, $\mathbf{m} \in \N^d$\\
+ %{\invisible{Input:}} ${\mathbf{x}}_j\in {\T}^d,\; j=0,\hdots,M-1$, and $f_j \in \C,\; j=0,\hdots,M-1$\\[1ex]
+ %Precomputation: $\mathbf{n} := \sigma \odot \mathbf{N}$,\\
+ %{\invisible{Precomputation:}} $c_{\mathbf{k}}\left(\tilde \varphi\right), \; \mathbf{k} \in I_{\mathbf{N}}$
+ %if the flag (see Section \ref{sect:parameters}) {\tt PRE\_PHI\_HUT} is set,\\
+ %{\invisible{Precomputation:}} $\tilde\psi\left({\mathbf{x}}_j - \mathbf{n}^{-1}\odot \mathbf{l}\right),
+ %\, j=0,\hdots,M-1 , \, \mathbf{l} \in I_{\mathbf{n},\mathbf{m}} \left({\mathbf{x}}_j\right)$ if {\tt PRE\_PSI} is set.
+ \begin{algorithmic}[1]
+ \topsep=1.5ex
+ \itemsep=1.5ex
+
+ \STATE For $\mathbf{l} \in I_{\mathbf{n}}$ compute
+ \begin{equation*}
+ g_{\mathbf{l}} := \sum\limits_{j \in I_{\mathbf{n},m}^{\top} (\mathbf{l}) } f_j \,
+ \tilde\psi\left({\mathbf{x}}_j - \mathbf{n}^{-1}\odot \mathbf{l}\right)\, .
+ \end{equation*}
+
+ \STATE For $\mathbf{k} \in I_{\mathbf{N}}$ compute by $d$-variate (backward) {\rm FFT}
+ \begin{equation*}
+ \hat g_{\mathbf{k}} := \sum\limits_{\mathbf{l} \in I_{\mathbf{n}}}
+ g_{\mathbf{l}} \, {\rm e}^{+2 \pi {\rm i} \mathbf{k} \left(\mathbf{n}^{-1} \odot
+ \mathbf{l}\right)}.
+ \end{equation*}
+
+ \STATE For $\mathbf{k} \in I_{\mathbf{N}}$ compute
+ \begin{equation*}
+ \hat h_{\mathbf{k}} := \frac{\hat g_{\mathbf{k}}}{\left|I_{\mathbf{n}}\right|
+ c_{\mathbf{k}}(\tilde \varphi)}.
+ \end{equation*}
+ \end{algorithmic}
+ Output: approximate values $\hat h_{\mathbf{k}},\;\mathbf{k} \in I_{\mathbf{N}}$.\\
+ Complexity: ${\cal O} (|\mathbf{N}| \log |\mathbf{N}|+M)$.
+\end{algorithm}
+Due to the characterisation of the nonzero elements of the matrix $\mathbf{B}$,
+i.e.,
+\begin{equation*}
+ \bigcup\limits_{j=0}^{M-1} j \times I_{\mathbf{n},m} \left({\mathbf{x}}_j\right)=
+ \bigcup\limits_{\mathbf{l} \in I_{\mathbf{n}}} I_{\mathbf{n},m}^{\top}\left(\mathbf{l}\right)
+ \times \mathbf{l}.
+\end{equation*}
+the multiplication with the sparse matrix $\mathbf{B}^{\top}$ is implemented in a
+'transposed' way in the library, summation as outer loop and only using the
+multi-index sets $I_{\mathbf{n},m} \left({\mathbf{x}}_j\right)$.
+
+%------------------------------------------------------------------------------
+\subsection{Available window functions and evaluation techniques}
+\label{sect:windows}
+%------------------------------------------------------------------------------
+Again, only the case $d=1$ is presented.
+To keep the aliasing error and the truncation error small, several functions
+$\varphi$ with good localisation in time and frequency domain were proposed,
+e.g. the (dilated) {\it Gaussian} \cite{duro93, st97, DuSc}
+\begin{eqnarray} \label{gaussian}
+\varphi\left(x\right)
+&=&
+\left(\pi b\right)^{-1/2} \,
+{\rm e}^{-\frac{\left(nx\right)^2}{b}}
+\qquad
+\left(b := \frac{2\sigma}{2 \sigma -1} \frac{m}{\pi} \right),\\
+\hat \varphi \left(k\right)
+&=&
+\frac{1}{n} \, {\rm e}^{-b\left(\frac{\pi k}{n}\right)^2} , \nonumber
+\end{eqnarray}
+(dilated) {\it cardinal central $B$--splines} \cite{bey95, st97}
+\begin{eqnarray} \label{bspline}
+\varphi\left(x\right)
+&=&
+M_{2m}\left(n x\right),\\ \nonumber
+\hat \varphi \left(k\right)
+&=&
+\frac{1}{n} \sinc^{2m} \left( k \pi/n\right),
+\end{eqnarray}
+where $M_{2m}$ denotes the centred cardinal $B$--Spline of order $2m$,\\
+(dilated) {\it Sinc functions} \cite{pottshabil}
+\begin{eqnarray} \label{sinc}
+\varphi\left(x\right)
+&=&
+\frac{N\left(2\sigma-1\right)}{2m} \sinc^{2m} \left(\frac{\left(\pi N x \left(2\sigma-1\right)\right)}{2m} \right),\\
+\hat \varphi \left(k\right)
+&=&
+M_{2m}\left(\frac{2mk}{\left(2\sigma-1\right)N}\right)
+\nonumber
+\end{eqnarray}
+and
+(dilated) {\it Kaiser--Bessel functions} \cite{Ja, four}
+\begin{eqnarray} \label{kaiser}
+\varphi\left(x\right)
+&=& \frac{1}{\pi} \left\{
+\ds \begin{array}{ll}
+\ds \frac{\sinh\left(b
+\sqrt{m^2 - n^2 x^2}\right)}{\sqrt{m^2 - n^2 x^2}}
+& \mbox{for } |x| \le \frac{m}{n}
+\qquad
+\left(b := \pi \left(2 - \frac{1}{\sigma} \right) \right) ,\\[4ex]
+\ds \frac{\sin\left(b
+\sqrt{n^2 x^2 - m^2}\right)}{\sqrt{n^2 x^2-m^2}}
+& \mbox{otherwise},
+ \end{array}
+\right.
+\\[1ex]
+\hat \varphi \left(k\right)
+&=& \frac{1}{n} \left\{
+\ds \begin{array}{cl}
+ \, I_0 \left(m \sqrt{b^2 - \left(2 \pi k/n \right)^2} \right)
+&
+{\rm for} \; \; k= -n \left(1-\frac{1}{2\sigma} \right), \ldots,
+n \left(1-\frac{1}{2\sigma}\right),\\
+0&{\rm otherwise},
+ \end{array}
+\right.
+\nonumber
+\end{eqnarray}
+where $I_0$ denotes the {\it modified zero--order Bessel function}.
+For these functions $\varphi$ it has been proven that
+$$
+|f\left(\mathbf{x}_j\right) - s\left(\mathbf{x}_j\right)| \le C\left(\sigma,m\right) \|\mathbf{\hat{f}}\|_1
+$$
+where
+$$
+C\left(\sigma,m\right) :=
+\left\{
+\begin{array}{ll}
+4 \, \e^{-m \pi \left(1-1/\left(2\sigma-1\right)\right)}& {\rm for} \; \left(\ref{gaussian}\right) ,\\
+4 \, \left(\frac{1}{2\sigma -1} \right)^{2m}& {\rm for} \; \left(\ref{bspline}\right), \\[1ex]
+\frac{1}{m-1}\left(\frac{2}{\sigma^{2m}}+\left(\frac{\sigma}{2\sigma-1}\right)^{2m}\right)&
+{\rm for} \; \left(\ref{sinc}\right), \\[1ex]
+4\pi\left(\sqrt{m}+m\right)\sqrt[4]{1-\frac{1}{\sigma}} \, \e^{-2 \pi m \sqrt{1-1/\sigma}} & {\rm for} \; \left(\ref{kaiser}\right).
+\end{array}
+\right.
+$$
+Thus, for fixed $\sigma >1$, the approximation error introduced by the NFFT
+decays exponentially with the number $m$ of summands in (\ref{approx}).
+Using the tensor product approach the above error estimates can be generalised
+for the multivariate setting \cite{elst}.
+On the other hand, the complexity of the NFFT increases with $m$.
+
+In the following, we suggest different methods for the compressed storage and
+application of the matrix $\mathbf{B}$ which are all available within our NFFT
+library by choosing particular flags in a simple way during the initialisation
+phase.
+These methods do not yield a different asymptotic performance but rather yield
+a lower constant in the amount of computation.
+
+\subsubsection*{Fully precomputed window function}
+One possibility is to precompute all values $\varphi(\mathbf{x}_j -
+\mathbf{n}^{-1}\odot\mathbf{l})$ for $j=0,\hdots,M-1$ and $\mathbf{l}\in I_{\mathbf{n},m} (\mathbf{x}_j)$
+explicitly.
+Thus, one has to store the large amount of $(2m+1)^d M$ real numbers but uses
+no extra floating point operations during the matrix vector multiplication
+beside the necessary $(2m+1)^d M$ flops.
+Furthermore, we store for this method explicitly the row and column for each
+nonzero entry of the matrix $\mathbf{B}$.
+This method, included by the flag {\tt PRE\_FULL\_PSI}, is the fastest procedure
+but can only be used if enough main memory is available.
+
+\subsubsection*{Tensor product based precomputation}
+Using the fact that the window functions are built as tensor products one can
+store $\varphi_t((\mathbf{x}_j)_t - \frac{l_t}{n_t})$ for
+$j=0,\hdots,M-1$, $t=0,\hdots,d-1$, and $l_t\in I_{n_t,m} ((\mathbf{x}_j)_t)$
+where $(\mathbf{x}_j)_t$ denotes the $t$-th component of the $j$-th node.
+This method uses a medium amount of memory to store $d(2m+1)M$ real numbers
+in total.
+However, one has to carry out for each node at most $2(2m+1)^d$ extra
+multiplications to compute from the factors the multivariate window function
+$\varphi(\mathbf{x}_j - \mathbf{n}^{-1}\odot\mathbf{l})$ for $\mathbf{l}\in I_{\mathbf{n},m}(\mathbf{x}_j)$.
+%where a naive version would take $d(2m+1)^d$ multiplications.
+Note, that this technique is available for every window function discussed
+here and can be used by means of the flag {\tt PRE\_PSI} which is also the
+default method within our software library.
+
+\subsubsection*{Linear interpolation from a lookup table}
+For a large number of nodes $M$, the amount of memory can by further reduced
+by the use of lookup table techniques.
+For a recent example within the framework of gridding see \cite{BeNiPa05}.
+We suggest to precompute from the even window function the equidistant samples
+$\varphi_t(\frac{rm}{Kn_t})$ for $t=0,\hdots,d-1$ and $r=0,\hdots,K,\;K\in\N$
+and then compute for the actual node $\mathbf{x}_j$ during the NFFT the values
+$\varphi_t((\mathbf{x}_j)_t - \frac{l_t}{n_t})$ for $t=0,\hdots,d-1$ and $l_t\in
+I_{n_t,m} ((\mathbf{x}_j)_t)$ by means of the linear interpolation from its two
+neighbouring precomputed samples.
+
+This method needs only a storage of $dK$ real numbers in total where $K$
+depends solely on the target accuracy but neither on the number of nodes $M$
+nor on the multidegree $\mathbf{N}$.
+Choosing $K$ to be a multiple of $m$, we further reduce the computational
+costs during the interpolation since the distance from $(\mathbf{x}_j)_t-
+\frac{l_t}{n_t}$ to the two neighbouring interpolation nodes and hence the
+interpolation weights remain the same for all $l_t\in I_{n_t,m}((
+\mathbf{x}_j)_t)$.
+This method requires $2(2m+1)^d$ extra multiplications per node and is
+used within the NFFT by the flag {\tt PRE\_LIN\_PSI}. Error estimates for this approximation are given in \cite{KuPo06}.
+
+\subsubsection*{Fast Gaussian gridding}
+Two useful properties of the Gaussian window function \eqref{gaussian} within
+the present framework were recently reviewed in \cite{GrLe04}.
+Beside its tensor product structure for $d>1$, which also holds for all other
+window functions, it is remarkable that the number of evaluations of the form
+{\tt exp()} can be greatly decreased.
+More precisely, for $d=1$ and a fixed node $x_j$ the evaluations of
+$\varphi(x_j-\frac{l'}{n})$, $l'\in I_{n,m}(x_j)$, can be reduced by the
+splitting
+\begin{equation*}
+ \sqrt{\pi b}\varphi\left(x_j-\frac{l'}{n}\right)
+ =\e^{-\frac{(nx_j-l')^2}{b}}
+ =\e^{-\frac{(nx_j-u)^2}{b}}
+ \left(\e^{-\frac{2(nx_j-u)}{b}}\right)^l
+ \e^{-\frac{l^2}{b}}\,.
+\end{equation*}
+where $u=\min I_{n,m}(x_j)$ and $l=0,\hdots,2m$.
+Note, that the first factor and the exponential within the brackets are
+constant for each fixed node $x_j$.
+Once, we evaluate the second exponential, its $l$-th power can be computed
+consecutively by multiplications only.
+Furthermore, the last exponential is independent of $x_j$ and these $2m+1$
+values are computed only once within the NFFT and their amount is negligible.
+Thus, it is sufficient to store or evaluate $2M$ exponentials for $d=1$.
+The case $d>1$ uses $2dM$ storages or evaluations by using the general tensor
+product structure.
+This method is employed by the flags {\tt FG\_PSI} and {\tt PRE\_FG\_PSI} for
+the evaluation or storage of $2d$ exponentials per node, respectively.
+
+\subsubsection*{No precomputation of the window function}
+The last considered method uses no precomputation at all, but rather evaluates
+the univariate window function $(2m+1)^d M$ times.
+Thus, the computational time depends on how fast we can evaluate the
+particular window function.
+However, no additional storage is necessary which suits this approach whenever
+the problem size reaches the memory limits of the used computer.
+
+%------------------------------------------------------------------------------
+\subsection{Further NFFT approaches}
+%------------------------------------------------------------------------------
+Several papers have described fast approximations for the NFFT.
+Common names for NFFT are
+{\it non-uniform fast Fourier transform} \cite{fesu02},
+{\it generalised fast Fourier transform} \cite{duro93},
+{\it unequally-spaced fast Fourier transform} \cite{bey95},
+{\it fast approximate Fourier transforms for irregularly spaced data} \cite{ware98},
+{\it non-equispaced fast Fourier transform} \cite{Fou02} or
+{\it gridding} \cite{scsc, Ja, Pe}.
+
+In various papers, different window functions were considered, e.g. Gaussian
+pulse tapered with a Hanning window in \cite{DuSc}, Gaussian kernels combined
+with Sinc kernels in \cite{Pe}, and special optimised windows in
+\cite{Ja,DuSc}.
+
+A simple but nevertheless fast scheme for the computation of \eqref{ndft} in
+the univariate case $d=1$ is presented in \cite{AnDa96}.
+This approach uses for each node $x_j \in [-\frac{1}{2},\frac{1}{2})$ a $m$-th
+order Taylor expansion of the trigonometric polynomial in \eqref{trigPoly}
+about the nearest neighbouring point on the oversampled equispaced lattice
+$\{n^{-1} k - \frac{1}{2}\}_{k=0,\hdots,n-1}$ where again $n=\sigma N,\,
+\sigma\gg 1$.
+Besides its simple structure and only $\cO(N\log N+M)$ arithmetic operations,
+this algorithm utilises $m$ FFTs of size $n$ compared to only one in the NFFT
+approach, uses a medium amount of extra memory, and is not suited for highly
+accurate computations, see \cite{KuPo06}.
+Furthermore, its extension to higher dimensions has not been considered so
+far.
+
+Another approach for the univariate case $d=1$ is considered in \cite{DuRo95}
+and based on a Lagrange interpolation technique.
+After taking a $N$-point FFT of the vector $\mathbf{\hat{f}}$ in \eqref{ndft} one
+uses an exact polynomial interpolation scheme to obtain the values of the
+trigonometric polynomial $f$ at the nonequispaced nodes $x_j$.
+Here, the time consuming part is the exact polynomial interpolation scheme
+which can however be realised fast in an approximate way by means of the fast
+multipole method.
+This approach is appealing since it allows also for the inverse transform.
+Nevertheless, numerical experiments in \cite{DuRo95} showed that this
+approach is far more time consuming than Algorithm \ref{algo:nfft} and the
+inversion can only be computed in a stable way for almost equispaced nodes
+\cite{DuRo95}.
+
+Furthermore, special approaches based on scaling vectors \cite{NgLi99}, based
+on minimising the Frobenius norm of certain error matrices \cite{st01} or
+based on min-max interpolation \cite{fesu02} are proposed.
+While these approaches gain some accuracy for the Gaussian or B-Spline
+windows, no reasonable improvement is obtained for the Kaiser-Bessel window
+function.
+
+For comparison of different approaches, we refer to
+\cite{ware98,st01,fesu02,KuPo06}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Generalisations and inversion} \label{sect:gen}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+We consider generalisations of the NFFT for
+%------------------------------------------------------------------------------
+\subsection{NNFFT - nonequispaced in time and frequency fast Fourier
+ transform}
+%------------------------------------------------------------------------------
+
+Now we are interested in the computation of
+\begin{equation*}
+ f_j= \sum_{k=0}^{N-1} \hat f_k \eim{\left(\mathbf{v}_k \odot \mathbf{N}\right))\mathbf{x}_j}
+\end{equation*}
+for $j =0,\hdots,M-1$, $\mathbf{v}_k, \mathbf{x}_j \in \T^d$, and $\hat f_k \in \C$, where $\mathbf{N}\in \N^d$
+denotes the "nonharmonic" bandwidth.
+The corresponding fast algorithm is known as {\it fast Fourier transform for
+nonequispaced data in space {\bf and} frequency domain} (NNFFT) \cite{duro93,elst,postta01} or as type 3 nonuniform FFT \cite{LeGr05}.
+
+A straightforward evaluation of this sum with the standard NFFT is not
+possible, since the samples in neither domain are equispaced.
+However, an so-called NNFFT was first suggested in \cite{duro93} and later
+studied in more depth in \cite{elst}, which permits the fast calculation of
+the Fourier transform of a vector of nonequispaced samples at a vector of
+nonequispaced positions.
+It constitutes a combination of the standard NFFT and its adjoint see also
+\cite{postta01}.
+
+%------------------------------------------------------------------------------
+\subsection{NFCT/NFST - nonequispaced fast (co)sine transform}
+%------------------------------------------------------------------------------
+
+Let nonequispaced nodes $\mathbf{x}_j \in [0,\frac{1}{2}]^d$ and frequencies
+$\mathbf{k}$ in the index sets
+\begin{align*}
+ I_{\mathbf{N}}^C &:= \left\{ \mathbf{k}=\left(k_t\right)_{t=0,\hdots,d-1} \in \Z^d: 0
+ \le k_t < N_t ,\;t=0,\hdots,d-1\right\},\\
+ I_{\mathbf{N}}^S &:= \left\{ \mathbf{k}=\left(k_t\right)_{t=0,\hdots,d-1} \in \Z^d: 1
+ \le k_t < N_t ,\;t=0,\hdots,d-1\right\}
+\end{align*}
+be given.
+For notational convenience let furthermore $\cos(\mathbf{k} \odot \mathbf{x}) :=
+\cos(k_0 x_0) \cdot \hdots \cdot \cos(k_{d-1} x_{d-1})$ and $\sin(\mathbf{k} \odot
+\mathbf{x}) := \sin(k_0 x_0) \cdot \hdots \cdot \sin(k_{d-1} x_{d-1})$.
+
+The {\it nonequispaced discrete cosine} and {\it sine transforms} are given by
+\begin{align*}
+ f\left(\mathbf{x}_j\right) &= \sum_{\mathbf{k}\in I_{\mathbf{N}}^C} \hat{f}_{\mathbf{k}}
+ \cos(2\pi(\mathbf{k}\odot\mathbf{x}_j)),\\
+ f\left(\mathbf{x}_j\right) &= \sum_{\mathbf{k}\in I_{\mathbf{N}}^S} \hat{f}_{\mathbf{k}}
+ \sin(2\pi(\mathbf{k}\odot\mathbf{x}_j)),
+\end{align*}
+for $j=0,\hdots,M-1$ and real coefficients $\hat f_{\mathbf{k}} \in \R$,
+respectively.
+
+The straight forward algorithm of this matrix vector product, which is called
+ndct and ndst, takes $\cO(M |I_{\mathbf{N}}^C|)$ and $\cO(M |I_{\mathbf{N}}^C|)$
+arithmetical operations.
+For these real transforms the adjoint transforms coincide with the ordinary
+transposed matrix vector products.
+Our fast approach is based on the NFFT and seems to be easier than the
+Chebyshev transform based derivation in \cite{po01} and faster than the
+algorithms in \cite{tili00} which still use FFTs.
+Instead of FFTs we use fast algorithms for the discrete cosine transform
+(DCT--I) and for the discrete sine transform (DST--I).
+For details we refer to \cite{fepo02}.
+
+%------------------------------------------------------------------------------
+\subsection{NSFFT - nonequispaced sparse fast Fourier transform}
+%------------------------------------------------------------------------------
+
+We consider the fast evaluation of trigonometric polynomials from so-called
+hyperbolic crosses.
+In multivariate approximation one has to deal with the so called `curse of
+dimensionality', i.e., the number of degrees of freedom for representing an
+approximation of a function with a prescribed accuracy depends exponentially
+on the dimensionality of the considered problem.
+This obstacle can be circumvented to some extend by the interpolation on
+sparse grids and the related approximation on hyperbolic cross points in the
+Fourier domain, see, e.g., \cite{Zeng91,Spr00,BuZe04}.
+
+Instead of approximating a Fourier series on the standard tensor product grid
+$I_{\mathbf{(N,\hdots,N)}}$ with $\cO(N^d)$ degrees of freedom, it can be
+approximated with only $\cO(N \log^{d-1} N)$ degrees of freedom from the
+hyperbolic cross
+\begin{equation*}
+ H_N^d := \bigcup_{\mathbf{N}\in\N^d,\, |I_{\mathbf{N}}|=N} I_{\mathbf{N}},
+\end{equation*}
+where $N=2^{J+2},\;J\in\NZ$ and we allow $N_t=1$ in the $t$-th coordinate in
+the definition of $I_{\mathbf{N}}$.
+The approximation error in a suitable norm (dominated mixed smoothness) can be shown to deteriorate only by a factor of $\log^{d-1} N$,
+cf. \cite{Spr00}.
+\begin{figure}[ht]
+ \centering
+ \begin{tabular}{cccc}
+ \includegraphics[scale=0.6]{images/sparse2D_0}&
+ \includegraphics[scale=0.6]{images/sparse2D_1}&
+ \includegraphics[scale=0.6]{images/sparse2D_2}&
+ \includegraphics[scale=0.6]{images/sparse2D_3}
+ \end{tabular}
+ \caption{Hyperbolic cross points for $d=2$ and $J=0,\ldots,3$.
+ \label{sparse_grid}}
+\end{figure}
+
+The {\em nonequispaced sparse discrete Fourier transform} (NSDFT) is the
+evaluation of
+\begin{equation*}
+ f\left(\mathbf{x}_j\right) = \sum_{\mathbf{k}\in H_N^d}
+ \hat f_{\mathbf{k}} \eim{\mathbf{k} \mathbf{x}_j}
+\end{equation*}
+for given Fourier coefficients $\hat f_{\mathbf{k}}\in\C$ and nodes $\mathbf{x}_j\in
+\T^d$.
+The number of used arithmetical operations is $\cO(M N\log^{d-1}N)$.
+This is reduced by our fast schemes to $\cO(N\log^2 N+M)$ for $d=2$ and
+$\cO(N^{3/2} \log N+M)$ for $d=3$, see \cite{FeKuPo} for details.
+
+%------------------------------------------------------------------------------
+\subsection{FPT - fast polynomial transform} \label{sect:fpt}
+%------------------------------------------------------------------------------
+A \emph{discrete polynomial transform} (DPT) is a generalisation of the DFT
+from the basis of complex exponentials $\mathrm{e}^{\mathrm{i} k x}$ to an
+arbitrary systems of algebraic polynomials satisfying a three-term recurrence
+relation.
+More precisely, let $P_{0},P_{1},\hdots:[-1,1]\rightarrow\R$ be a sequence of
+polynomials that satisfies a three-term recurrence relation
+\begin{equation*}
+ P_{k+1}(x) = (\alpha_{k} x + \beta_{k})P_{k}(x) + \gamma_{k} P_{k-1}(x),
+\end{equation*}
+with $\alpha_{k} \neq 0$, $k\ge 0$, $P_{0}(x) := 1$, and $P_{-1}(x) := 0$.
+Clearly, every $P_{k}$ is a polynomial of exact degree $k$ and typical
+examples are the classical orthogonal Jacobi polynomials
+$P_{k}^{(\alpha,\beta)}$.
+
+Now, let $f:[-1,1]\rightarrow\R$ be a polynomial of degree $N\in\N$ given by
+the finite linear combination
+\begin{equation*}
+ f(x) = \sum_{k=0}^{N} a_{k} P_{k}(x).
+\end{equation*}
+The discrete polynomial transform (DPT) and its fast version, the \emph{fast
+ polynomial transform} (FPT), are the transformation of the coefficients
+$a_{k}$ into coefficients $b_{k}$ from the orthogonal expansion of $f$ into
+the basis of Chebyshev polynomials of the first kind $T_{k}(x) := \cos(k
+ \arccos x)$, i.e.,
+\begin{equation*}
+ f(x) = \sum_{k=0}^N b_{k} T_{k}(x).
+\end{equation*}
+A direct algorithm for computing this transformation needs $\cO(N^2)$
+arithmetic operations.
+The FPT algorithm implemented in the NFFT library follows the approach in
+\cite{postta98} and is based on the idea of using the three-term-recurrence
+relation repeatedly.
+Together with a method for fast polynomial multiplication in the Chebyshev
+basis and a cascade-like summation process, this yields a method for computing
+the polynomial transform with $\cO(N \log^2 N)$ arithmetic operations.
+For more detailed information, we refer the reader to
+\cite{drhe, drhero, postta98, po01, KePo06} and the references therein.
+
+%------------------------------------------------------------------------------
+\subsection{NFSFT - nonequispaced fast spherical Fourier transform}
+\label{sect:gen:nfsft}
+%------------------------------------------------------------------------------
+Fourier analysis on the sphere has, despite other fields, practical
+relevance in tomography, geophysics, seismology, meteorology and
+crystallography. In analogy to the complex exponentials
+$\mathrm{e}^{\mathrm{i} k x}$ on the torus, the spherical harmonics
+form the orthogonal Fourier basis with respect to the usual inner product on the sphere.
+
+\subsubsection*{Spherical coordinates}
+Every point in $\R^3$ can be described in spherical coordinates by a vector
+$(r,\vartheta,\varphi)^{\top}$ with the radius $r\ge 0$ and two angles
+$\vartheta \in [0,\pi]$, $\varphi \in [0,2\pi)$.
+We denote by $\S^2$ the two-dimensional unit sphere embedded into $\R^3$,
+i.e.
+\begin{equation*}
+ \S^2 := \left\{\mathbf{x} \in \R^{3}:\; \|\mathbf{x}\|_2=1\right\}
+\end{equation*}
+and identify a point from $\S^2$ with the corresponding vector
+$(\vartheta,\varphi)^{\top}$.
+The spherical coordinate system is illustrated in Figure \ref{sphere}.
+\begin{figure}[tb]
+ \centering
+ \includegraphics[width=0.60\textwidth]{images/sphere}
+ \caption{The spherical coordinate system in $\R^3$: Every point $\boldsymbol{\xi}$ on a
+ sphere with radius $r$ centred at the origin can be described by angles
+ $\vartheta \in [0,\pi]$, $\varphi \in [0,2\pi)$ and the radius $r \in \mathbb{R}^+$.
+ For $\vartheta = 0$ or $\vartheta = \pi$ the point $\boldsymbol{\xi}$ coincides with the
+ North or the South pole, respectively.} \label{sphere}
+\end{figure}
+
+\subsubsection*{Legendre polynomials and associated Legendre functions}
+The Legendre polynomials $P_k : [-1,1]\rightarrow \R$, $k\ge 0$, as
+classical orthogonal polynomials are given by their corresponding Rodrigues
+formula
+\begin{equation*}
+ P_k(x) := \frac{1}{2^k k!} \frac{\text{d}^k}{\text{d} x^k}
+ \left(x^2-1\right)^k.
+\end{equation*}
+
+The associated Legendre functions $P_k^n : [-1,1] \rightarrow \R$, $k \ge n
+\ge 0$ are defined by
+\begin{equation*}
+ P_k^n(x) := \left(\frac{(k-n)!}{(k+n)!}\right)^{1/2}
+ \left(1-x^2\right)^{n/2} \frac{\text{d}^n}{\text{d} x^n} P_k(x).
+\end{equation*}
+For $n = 0$, they coincide with the Legendre polynomials $P_k = P_k^0$.
+The associated Legendre functions $P_{k}^n$ obey the three-term recurrence
+relation
+\begin{equation*}
+ P_{k+1}^n(x) = \frac{2k+1}{((k-n+1)(k+n+1))^{1/2}} x P_k^n(x) -
+ \frac{((k-n)(k+n))^{1/2}}{((k-n+1)(k+n+1))^{1/2}} P_{k-1}^n(x)
+\end{equation*}
+for $k \ge n \ge 0$, $P_{n-1}^n(x) = 0$, $P_{n}^n(x) = \frac{\sqrt{(2n)!}}{2^n
+ n!}\left(1-x^2\right)^{n/2}$.
+For fixed $n$, the set $\{P_k^n:\: k \ge n\}$ forms a set of
+orthogonal functions, i.e.,
+\begin{equation*}
+ \left\langle P_k^n,P_l^n \right\rangle =
+ \int_{-1}^{1} P_k^n(x) P_l^n(x) \text{d} x =
+ \frac{2}{2k+1} \delta_{k,l}.
+\end{equation*}
+Again, we denote by $\bar{P}_{k}^n = \sqrt{\frac{2k+1}{2}} P_k^n$ the
+orthonormal associated Legendre functions.
+In the following, we allow also for $n < 0$ and set $P_{k}^n$ := $P_{k}^{-n}$
+in this case.
+
+\subsubsection*{Spherical harmonics}
+The spherical harmonics $Y_k^n : \S^2 \rightarrow \C$, $k \ge |n|$, $n\in\Z$,
+are given by
+\begin{equation*}
+ Y_k^n(\vartheta,\varphi) := P_k^{n}(\cos\vartheta)
+ \, \mathrm{e}^{\mathrm{i} n \varphi}.
+\end{equation*}
+They form an orthogonal basis for the space of square integrable functions on
+the sphere, i.e.,
+\begin{equation*}
+ \left\langle Y_k^n,Y_l^m \right\rangle =
+ \int_{0}^{2\pi} \int_{0}^{\pi} Y_k^n(\vartheta,\varphi)
+ \overline{Y_l^m(\vartheta,\varphi)} \sin \vartheta \; \mathrm{d} \vartheta
+ \; \mathrm{d} \varphi =
+ \frac{4\pi}{2k+1} \delta_{k,l}\delta_{n,m}.
+\end{equation*}
+The orthonormal spherical harmonics are denoted by $\bar{Y}_k^n =
+\sqrt{\frac{2k+1}{4\pi}} Y_k^n$.
+
+Hence, any square integrable function $f:\S^2\rightarrow\C$ has the expansion
+\begin{equation*}
+ f = \sum_{k=0}^{\infty} \sum_{n=-k}^{k} \hat{f}(k,n) \bar{Y}_k^n,
+\end{equation*}
+with the spherical Fourier coefficients $\hat{f}(k,n) = \left\langle f,
+\bar{Y}_k^n \right\rangle$.
+The function $f$ is called \emph{bandlimited}, if $\hat{f}(k,n)=0$ for $k>N$
+and some $N\in\N$.
+In analogy to the NFFT on the Torus $\mathbb{T}$, we define the sampling set
+\begin{equation*}
+ \mathcal{X}: = \left\{\left(\vartheta_{j},\varphi_{j}\right) \in
+ \mathbb{S}^2:\,j=0,\hdots,M-1\right\}
+\end{equation*}
+of nodes on the sphere $\S^2$ and the set of possible ''frequencies''
+\begin{equation*}
+ \mathcal{I}_{N} := \left\{(k,n):\,k=0,1,\ldots,N;\;
+ n=-k,\ldots,k\right\}.
+\end{equation*}
+The \emph{nonequispaced discrete spherical Fourier transform} (NDSFT) is
+defined as the evaluation of the finite spherical Fourier sum
+\begin{equation}
+ \label{eq.ndsft}
+ f_j=
+ f\left(\vartheta_{j},\varphi_{j}\right) =
+ \sum_{(k,n) \in \, \mathcal{I}_{N}} \hat{f}_k^n \,
+ Y_k^n\left(\vartheta_{j},\varphi_{j}\right) =
+ \sum_{k=0}^N \sum_{n=-k}^k \hat{f}_k^n \,
+ Y_k^n\left(\vartheta_{j},\varphi_{j}\right)
+\end{equation}
+for $j=0,\hdots,M-1$.
+In matrix vector notation, this reads $\mathbf{f} = \mathbf{Y} \; \mathbf{\hat
+ f}$ with
+\begin{equation*}
+ \begin{split}
+ \mathbf{f} & := \left(f_j\right)_{j=0}^{M-1} \in
+ \mathbb{C}^{M},\ f_{j} := f\left(\vartheta_{j},\varphi_{j}\right),\\
+ \mathbf{Y} & :=
+ \left(Y_k^n\left(\vartheta_j,\varphi_j\right)\right)_{j=0,\ldots,M-1;\;
+ (k,n) \in \mathcal{I}_N} \in \mathbb{C}^{M \times (N+1)^2},\\
+ \mathbf{\hat f} & := \left(\hat f_k^n\right)_{(k,n) \in \mathcal{I}_N} \in
+ \mathbb{C}^{(N+1)^2}.
+ \end{split}
+\end{equation*}
+The corresponding \emph{adjoint nonequispaced
+ discrete fast spherical Fourier transform} (adjoint NDSFT) is defined as
+the evaluation of
+\begin{equation*}
+ \label{eq.adjointndsft}
+ \hat h_{k}^n =
+ \sum_{j = 0}^{M-1} f\left(\vartheta_{j},\varphi_{j}\right)
+ \overline{Y_k^n\left(\vartheta_{j},\varphi_{j}\right)}
+\end{equation*}
+for all $(k,n) \in \mathcal{I}_{N}$.
+Again, in matrix vector notation, this reads $\mathbf{\hat h} =
+\mathbf{Y}^{\adj} \, \mathbf{f}$.
+
+The coefficients $\hat h_{k}^n$ are, in general, not
+identical to the Fourier coefficients $\hat{f}(k,n)$ of the function $f$.
+However, provided that for the sampling set $\mathcal{X}$ a quadrature rule
+with weights $w_{j}$, $j=0,\hdots,M-1$, and sufficient degree of exactness
+is available, one might recover the Fourier coefficients $\hat{f}(k,n)$ by
+evaluating
+\begin{equation*}
+ \hat{f}_{k}^n = \int_{0}^{2\pi} \int_{0}^{\pi} f(\vartheta,\varphi)
+ \overline{Y_{k}^n(\vartheta,\varphi)} \sin\vartheta \; \mathrm{d} \vartheta
+ \; \mathrm{d} \varphi =
+ \sum_{j = 0}^{M-1} w_{j} f\left(\vartheta_{j},\varphi_{j}\right)
+ \overline{Y_k^n\left(\vartheta_{j},\varphi_{j}\right)}
+\end{equation*}
+for all $(k,n) \in \mathcal{I}_{N}$.
+
+Direct algorithms for computing the NDSFT and adjoint NDSFT transformations
+need $\cO(M N^2)$ arithmetic operations.
+A combination of the fast polynomial transform and the NFFT leads to
+approximate algorithms with $\cO(N^2 \log^2 N + M)$ arithmetic operations.
+These are denoted \emph{NFSFT} and \emph{adjoint NFSFT}, respectively.
+The NFSFT algorithm using the FPT and the NFFT was introduced in
+\cite{kupo02} while the adjoint NFSFT variant was developed in \cite{KePo06}.
+
+\begin{algorithm}[tb]
+ \caption[NFSFT]{Nonequispaced fast spherical Fourier transform (NFSFT)}
+ \label{NFSFT:Algorithm:NFSFT}
+ \begin{algorithmic}
+ \STATE Input: $N \in \mathbb{N}_0$, $M \in \mathbb{N}$, spherical Fourier
+ coefficients $\mathbf{\hat{f}} = (\hat{f}_{k}^n)_{(k,n) \in
+ \mathcal{I}_{N}} \in \mathbb{C}^{(N+1)^2}$,\\
+ \STATE \invisible{Input:} a sampling set $\mathcal{X} = \left(\vartheta_{j},
+ \varphi_{j}\right)_{j=0}^{M-1} \in ([0,\pi]\times [0,2\pi))^{M}$.
+ \STATE
+ \FOR {$n=-N,\ldots,N$}
+ \STATE Compute the Chebyshev coefficients $\left(b_{k}^n\right)_{k=0}^{N}$
+ of $g^{n}$ by a fast polynomial transform.
+ \STATE Compute the coefficients $\left(c_{k}^n\right)_{k=-N}^N$
+ %as in \eqref{NFSFT:afterChebToExp}
+ from the coefficients $\left(b_{k}^n\right)_{k=0}^{M}$.
+ \ENDFOR
+ \STATE Compute the function values
+ $\left(f\left(\vartheta_{j},\varphi_{j}\right)\right)_{j=0}^{M-1}$
+ by evaluating the Fourier sum %in \eqref{NFSFT:transformed}
+ using a fast two-dimensional NFFT.
+ \STATE
+ \STATE Output: The function values ${\mathbf{f}} =
+ \left(f\left(\vartheta_{j},
+ \varphi_{j}\right)\right)_{j=0}^{M-1} \in \mathbb{C}^{M}$.
+ \STATE Complexity: $\mathcal{O}\left(N^2 \log^2 N +
+ M\right)$.
+\end{algorithmic}
+\end{algorithm}
+
+\begin{algorithm}[tb]
+ \caption[Adjoint NFSFT]{Adjoint nonequispaced fast spherical Fourier
+ transform (adjoint NFSFT)}
+ \label{NFSFT:Algorithm:adjointNFSFT}
+ \begin{algorithmic}
+ \STATE Input: $N \in \mathbb{N}_0$, $M \in \mathbb{N}$, a sampling set
+ $\mathcal{X} = \left(\vartheta_{j}, \varphi_{j}\right)_{j=0}^{M-1}
+ \in ([0,\pi]\times [0,2\pi))^{M}$,\\
+ \STATE \invisible{Input:} values $\mathbf{\tilde{f}} =
+ (\tilde{f}_{j})_{j=0}^{M-1} \in \mathbb{C}^M$.
+ \STATE
+ \STATE Compute the coefficients $\left(\tilde{c}_{k}^n\right)_{k,n=-N}^N$ from
+ the values $\left(f_{j}\right)_{j=0}^{N-1}$.
+ %according to the matrix $\mathbf{F}_{\mathcal{X}}^{\h}$ in
+ %\eqref{NFSFT:adjointNFSFTmv}
+ \FOR {$n=-N,\ldots,N$}
+ \STATE Compute the coefficients $\left(\tilde{b}_{k}^n\right)_{k=0}^N$ from the
+ coefficients $\left(\tilde{c}_{k}^n\right)_{k=-N}^{N}$.
+ % according to the matrix $\mathbf{B}^{\transp}$ in \eqref{NFSFT:adjointNFSFTmv}
+ \STATE Compute the coefficients $\left(\tilde{a}_{k}^n\right)_{k=|n|}^{N}$ from
+ the coefficients $\left(\tilde{b}_{k}^n\right)_{k=0}^N$
+ %according to the matrix $\mathbf{T}^{\transp}$ in \eqref{NFSFT:adjointNFSFTmv}
+ by a fast transposed polynomial transform.
+ \ENDFOR
+ \STATE
+ \STATE Output: Coefficients $\mathbf{h} =
+ \left(\tilde{h}_{k}^n\right)_{(k,n)
+ \in \mathcal{I}_N} \in \mathbb{C}^{(N+1)^2}$.
+ \STATE Complexity: $\mathcal{O}\left(N^2 \log^2 N +
+ M\right)$.
+\end{algorithmic}
+\end{algorithm}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Solver - inverse transforms} \label{sect:inv}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+In the following, we describe the inversion of the NFFT, i.e., the computation
+of Fourier coefficients from given samples $(\mathbf{x}_j,y_j) \in \T^d\times \C$,
+$j=0,\ldots,M-1$.
+In matrix vector notation, we aim to solve the linear system of equations
+\begin{equation}\label{eq:infft}
+ \mathbf{A} \mathbf{\hat{f}} \approx \mathbf{y}
+\end{equation}
+for the vector $\mathbf{\hat{f}}\in\C^{|I_{\mathbf{N}|}}$.
+Note however that the nonequispaced Fourier matrix $\mathbf{A}$ can be replaced by
+any other Fourier matrix from Section \ref{sect:gen}.
+
+Typically, the number of samples $M$ and the dimension of the space of the
+polynomials $|I_{\mathbf{N}}|$ do not coincide, i.e., the matrix $\mathbf{A}$ is
+rectangular.
+There are no simple inverses to nonequispaced Fourier matrices in general and
+we search for some pseudoinverse solution $\mathbf{\hat{f}}^{\dagger}$, see
+e.g. \cite[p. 15]{Bj96}.
+However, we conclude from eigenvalue estimates in
+\cite{FeGrSt95,BaGr03,KuPo04} that the matrix $\mathbf{A}$ has full rank if
+\begin{equation*}
+ \max_{0\le t<d} N_t < c_d \delta^{-1}\,, \qquad \delta:=2\max_{
+ \mathbf{x}\in\T^d}\min_{j=0,\hdots,M-1}\dist_{\infty}\left(\mathbf{x}_j,\mathbf{x}_l\right),
+\end{equation*}
+or
+\begin{equation*}
+ \min_{0\le t<d} N_t>C_d q^{-1}\,, \qquad q:=\min_{0\le j<l<M}
+ \dist_{\infty}\left(\mathbf{x}_j,\mathbf{x}_l\right).
+\end{equation*}
+
+In what follows, we consider a weighted least squares solution for the
+over-determined case and an optimal interpolation for the consistent
+underdetermined case.
+Both cases are solved by means of iterative algorithms where Algorithm
+\ref{algo:nfft} and \ref{algo:nfftH} are used for the matrix vector
+multiplication with $\mathbf{A}$ and $\mathbf{A}^{\adj}$, respectively.
+
+%------------------------------------------------------------------------------
+\subsubsection*{Least squares}
+%------------------------------------------------------------------------------
+
+For a comparative low polynomial degree $|I_{\mathbf{N}}|<M$ the system
+\eqref{eq:infft} is over-determined, so that in general the given data $y_j\in
+\C,\;j=0,\hdots,M-1,$ will be only approximated up to the {\em residual} $
+\mathbf{r}:=\mathbf{f}-\mathbf{A} \mathbf{\hat{f}}$.
+One considers the {\em weighted approximation problem}
+\begin{equation*}
+ \|\mathbf{y} - \mathbf{A} \mathbf{\hat{f}}\|_{\mathbf{W}}
+ = \left(\sum_{j=0}^{M-1} w_j |y_j-f(x_j)|^2\right)^{1/2}
+ \stackrel{\mathbf{\hat{f}}}{\rightarrow} \min,
+\end{equation*}
+which may incorporate weights $w_j> 0$, $\mathbf{W}:=\diag(w_j)_{j=0,\hdots,M-1}$,
+to compensate for clusters in the sampling set ${\cal X}$.
+This least squares problem is equivalent to the
+{\em weighted normal equation of first kind}
+\begin{equation}\label{eq:no1}
+ \mathbf{A}^{\adj} \mathbf{W} \mathbf{A} \mathbf{\hat{f}} = \mathbf{A}^{\adj} \mathbf{W} \mathbf{y}.
+\end{equation}
+
+Applying the Landweber (also known as Richardson, ...), the steepest descent,
+or the conjugate gradient scheme to \eqref{eq:no1} yields the following
+Algorithms \ref{algo:landweber}-\ref{algo:wCGNR(E)}.
+\begin{algorithm}[ht!]
+ \caption{Landweber}
+ \label{algo:landweber}
+ Input: $\mathbf{y} \in \mathbb{C}^M,\, {\mathbf{\hat{f}}}_0 \in \mathbb{C}^{|I_{
+ \mathbf{N}}|},\, \alpha>0$
+ \begin{algorithmic}[1]
+ \topsep=1.5ex
+ \itemsep=1.5ex
+ \STATE $\mathbf{r}_0=\mathbf{y} - \mathbf{A} \mathbf{\hat{f}}_0$
+ \STATE $\mathbf{\hat{z}}_0=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_0$
+
+ \FOR{$l=0,\hdots$}
+ \topsep=1.5ex
+ \itemsep=1.5ex
+ \STATE $\mathbf{\hat{f}}_{l+1}=\mathbf{\hat{f}}_{l}
+ +\alpha \mathbf{\hat{W}} \mathbf{\hat{z}}_l$
+ \STATE $\mathbf{r}_{l+1}=\mathbf{y} - \mathbf{A} \mathbf{\hat{f}}_{l+1}$
+ \STATE $\mathbf{\hat{z}}_{l+1}=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_{l+1}$
+ \ENDFOR
+ \end{algorithmic}
+ Output: $\mathbf{\hat{f}}_{l}$
+\end{algorithm}
+
+\begin{algorithm}[ht!]
+ \caption{Steepest descent}
+ \label{algo:gradient}
+ Input: $\mathbf{y} \in \mathbb{C}^M,\, {\mathbf{\hat{f}}}_0 \in \mathbb{C}^{|I_{\mathbf{N}}|}$
+ \begin{algorithmic}[1]
+ \topsep=1.5ex
+ \itemsep=1.5ex
+ \STATE $\mathbf{r}_0=\mathbf{y} - \mathbf{A} \mathbf{\hat{f}}_0$
+ \STATE $\mathbf{\hat{z}}_0=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_0$
+
+ \FOR{$l=0,\hdots$}
+ \topsep=1.5ex
+ \itemsep=1.5ex
+ \STATE $\mathbf{v}_l = \mathbf{A} \mathbf{\hat{W}} \mathbf{\hat{z}}_l$
+ \STATE $\alpha_l=\frac{\mathbf{\hat{z}}_l^{\adj} \mathbf{\hat{W}} \mathbf{\hat{z}}_l}
+ {\mathbf{v}_l^{\adj} \mathbf{W} \mathbf{v}_l}$
+ \STATE $\mathbf{\hat{f}}_{l+1}=\mathbf{\hat{f}}_{l}
+ +\alpha_l \mathbf{\hat{W}}\mathbf{\hat{z}}_l$
+ \STATE $\mathbf{r}_{l+1}=\mathbf{r}_{l+1} - \alpha_l \mathbf{v}_l$
+ \STATE $\mathbf{\hat{z}}_{l+1}=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_{l+1}$
+ \ENDFOR
+ \end{algorithmic}
+ Output: $\mathbf{\hat{f}}_{l}$
+ \end{algorithm}
+
+\begin{algorithm}[ht!]
+ \caption{Conjugate gradients for the normal equations, Residual
+ minimisation (CGNR)}
+ \label{algo:wCGNR(E)}
+ Input: $\mathbf{y} \in \mathbb{C}^M,\, {\mathbf{\hat{f}}}_0 \in \mathbb{C}^{|I_{\mathbf{N}}|}$
+ \begin{algorithmic}[1]
+ \topsep=1.5ex
+ \itemsep=1.5ex
+ \STATE $\mathbf{r}_0=\mathbf{y} - \mathbf{A} \mathbf{\hat{f}}_0$
+ \STATE $\mathbf{\hat{z}}_0=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_0$
+ \STATE $\mathbf{\hat{p}}_0=\mathbf{\hat{z}}_0$
+ \FOR{$l=0,\hdots$}
+ \topsep=1.5ex
+ \itemsep=1.5ex
+ \STATE $\mathbf{v}_l=\mathbf{A} \mathbf{\hat{W}} \mathbf{\hat{p}}_l$
+ \STATE $\alpha_l=\frac{\mathbf{\hat{z}}_l^{\adj} \mathbf{\hat{W}} \mathbf{\hat{z}}_l} {\mathbf{v}_l^{\adj} \mathbf{W} \mathbf{v}_l}$
+ \STATE $\mathbf{\hat{f}}_{l+1}=\mathbf{\hat{f}}_{l}
+ +\alpha_l \mathbf{\hat{W}} \mathbf{\hat{p}}_l$
+ \STATE $\mathbf{r}_{l+1}=\mathbf{r}_{l}- \alpha_l \mathbf{v}_l$
+ \STATE $\mathbf{\hat{z}}_{l+1}=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_{l+1}$
+ \STATE $\beta_l=\frac{\mathbf{\hat{z}}_{l+1}^{\adj} \mathbf{\hat{W}}\mathbf{\hat{z}}_{l+1}}
+ {\mathbf{\hat{z}}_l^{\adj} \mathbf{\hat{W}}\mathbf{\hat{z}}_l}$
+ \STATE $\mathbf{\hat{p}}_{l+1}=\beta_l \mathbf{\hat{p}}_l + \mathbf{\hat{z}}_{l+1}$
+ \ENDFOR
+ \end{algorithmic}
+ Output: $\mathbf{\hat{f}}_{l}$
+\end{algorithm}
+
+%------------------------------------------------------------------------------
+\subsubsection*{Interpolation}
+%------------------------------------------------------------------------------
+
+For a comparative high polynomial degree $|I_{\mathbf{N}}|>M$ one expects to
+interpolate the given data $y_j\in \C,\;j=0,\hdots,M-1,$ exactly.
+The (consistent) linear system \eqref{eq:infft} is under-determined.
+One considers the {\em damped minimisation problem}
+\begin{equation*}
+ \label{eq:ip}
+ \|\mathbf{\hat{f}}\|_{\mathbf{\hat{W}}}^{-1}
+ =\left(\sum_{\mathbf{k}\in I_{\mathbf{N}}} \frac{|\hat f_{\mathbf{k}}|^2}{\hat w_{\mathbf{k}}}
+ \right)^{1/2} \stackrel{\mathbf{\hat{f}}}{\rightarrow} \min \quad \text{subject
+ to} \quad \mathbf{A} \mathbf{\hat{f}} = \mathbf{y},
+\end{equation*}
+which may incorporate 'damping factors' $\hat w_{\mathbf{k}}> 0$, $\mathbf{\hat{W}}:=
+\diag(\hat w_{\mathbf{k}})_{\mathbf{k}\in I_{\mathbf{N}}}$.
+A smooth solution is favoured, i.e., a decay of the Fourier coefficients $\hat
+f_{\mathbf{k}},\;\mathbf{k}\in I_{\mathbf{N}}$, for decaying damping factors $\hat w_{
+\mathbf{k}}$.
+This interpolation problem is equivalent to the
+{\em damped normal equation of second kind}
+\begin{equation} \label{eq:no2}
+ \mathbf{A} \mathbf{\hat{W}} \mathbf{A}^{\adj} \mathbf{\tilde{f}}
+ = \mathbf{y}, \qquad \mathbf{\hat{f}} =
+ \mathbf{\hat{W}} \mathbf{A}^{\adj} \mathbf{\tilde{f}}.
+\end{equation}
+
+Applying the conjugate gradient scheme to \eqref{eq:no2} yields the following
+Algorithm \ref{algo:wCGNE(R)}.
+\begin{algorithm}[ht!]
+ \caption{Conjugate gradients for the normal equations, Error minimisation
+ (CGNE)}
+ \label{algo:wCGNE(R)}
+ Input: $\mathbf{y} \in \mathbb{C}^M,\, {\mathbf{\hat{f}}}_0 \in \mathbb{C}^{|I_{\mathbf{N}}|}$
+ \begin{algorithmic}[1]
+ \topsep=1.5ex \itemsep=1.5ex
+ \STATE $\mathbf{r}_0=\mathbf{y} - \mathbf{A} \mathbf{\hat{f}}_0$
+ \STATE $\mathbf{\hat{p}}_0=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_0$
+ \FOR{$l=0,\hdots$}
+ \topsep=1.5ex \itemsep=1.5ex
+ \STATE $\alpha_l=\frac{\mathbf{r}_l^{\adj} \mathbf{W} \mathbf{r}_l}
+ {\mathbf{\hat{p}}_l^{\adj} \mathbf{\hat{W}} \mathbf{\hat{p}}_l}$
+ \STATE $\mathbf{\hat{f}}_{l+1}=\mathbf{\hat{f}}_{l}
+ +\alpha_l \mathbf{\hat{W}} \mathbf{\hat{p}}_l$
+
+ \STATE $\mathbf{r}_{l+1}=\mathbf{r}_{l}- \alpha_l \mathbf{A} \mathbf{\hat{W}} \mathbf{\hat{p}}_l$
+
+ \STATE $\beta_l=\frac{\mathbf{r}_{l+1}^{\adj} \mathbf{W} \mathbf{r}_{l+1}}
+ {\mathbf{r}_l^{\adj} \mathbf{W} \mathbf{r}_l}$
+
+ \STATE $\mathbf{\hat{p}}_{l+1}=\beta_l \mathbf{\hat{p}}_l + \mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_{l+1}$
+ \ENDFOR
+ \end{algorithmic}
+ Output: $\mathbf{\hat{f}}_{l}$
+\end{algorithm}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Library}\label{sect:lib}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ The library is completely written in C and uses the FFTW library \cite{fftw}
+ which has to be installed on your system.
+ The library has several options (determined at compile time) and parameters
+ (determined at run time).
+
+%------------------------------------------------------------------------------
+\subsection{Installation}
+%------------------------------------------------------------------------------
+Download from {\tt www.tu-chemnitz.de/$\sim$potts/nfft} the most recent
+version {\tt nfft3.x.x.tgz}. In the following, we assume that you use a \verb+bash+
+compatible shell.
+Uncompress the archive.
+\begin{itemize}
+ \item \verb"tar xfvz nfft3.x.x.tar.gz"
+\end{itemize}
+Change to the newly created directory.
+\begin{itemize}
+ \item \verb+cd nfft3.x.x+
+\end{itemize}
+Optional: Set environment variables (see also below).
+Leave this step out, if you are unsure what to do.
+Example:
+\begin{itemize}
+ \item \verb+export CPPFLAGS="-I/path/to/include/files"+\\
+ \item \verb+export LDFLAGS="-L/path/to/libraries"+
+\end{itemize}
+Run the configure script.
+\begin{itemize}
+ \item \verb+./configure+
+\end{itemize}
+Compile the sources.
+\begin{itemize}
+ \item \verb+make+
+\end{itemize}
+This builds the NFFT library and all examples and applications. You can run
+\verb"make install" to install the library on your system. If
+for example \verb+/usr+ is your default installation directory, \verb+make install+
+will copy the NFFT 3 library to \verb+/usr/lib+, the C header files to
+\verb+/usr/include/nfft+ and the documentation together with all examples and
+applications to \verb+/usr/share/nfft+.
+
+For more information on fine grained
+control over the installation directories, run the \verb"configure" script
+with the option \verb+--help+, i.e. \verb+./configure --help+.
+For example, to see what gets installed, run
+\verb+./configure --prefix=some/path/to/a/temporary/directory+ in the line of
+commands above. After \verb+make+ and \verb+make install+, you will find all
+installed files in the directory structure created under the temporary directory.
+
+The following options can also be used in conjunction with the configure script:
+By default, NFFT 3 routines use the Kaiser-Bessel window function
+(see Appendix \ref{sec.nfft}). You can
+change the window function with the option \verb"--with-window=ARG",
+where \verb"ARG" is replaced by \verb"kaiserbessel" (Kaiser-Bessel),
+\verb"gaussian" (Gaussian), \verb"bspline" (B-spline),
+\verb"sinc" (sinc power) or \verb"delta" (Dirac delta) to yield the
+window function in parenthesis.
+
+The NFFT transforms can be configured to measure elapsed
+time for each step of Algorithm~\ref{algo:nfft} and \ref{algo:nfftH}.
+This should help customise the library to one's needs.
+You can enable this behaviour with
+the options \verb"--enable-measure-time" and/or
+\verb"--enable-measure-time-fftw".
+
+%------------------------------------------------------------------------------
+\subsection{Procedure for computing an NFFT}\label{sect:general_proc}
+%------------------------------------------------------------------------------
+One has to follow certain steps to write a simple program using the NFFT
+library.
+A complete example is shown in Section \ref{sect:first_trafo}.
+The first argument of each function is a pointer to a application-owned
+variable of type {\tt nfft\_plan}.
+The aim of this structure is to keep interfaces small, it contains all
+parameters and data.
+
+\subsubsection*{Initialisation}
+Initialisation of a plan is done by one of the {\tt nfft\_init}-functions.
+The simplest version for the univariate case $d=1$ just specifies the number
+of Fourier coefficients $N_0$ and the number of nonequispaced nodes $M$.
+For an application-owned variable {\tt nfft\_plan my\_plan} the function call is
+\begin{center}
+ {\tt nfft\_init\_1d(\&my\_plan,N0,M);}
+\end{center}
+The first argument should be uninitialised. Memory allocation is completely
+done by the init routine.
+
+\subsubsection*{Setting nodes}
+One has to define the nodes $\mathbf{x}_j \in \T^d$ for the
+transformation in the member variable {\tt my\_plan.x}.
+The $t$-th coordinate of the $j$-th node $\mathbf{x}_j$ is assigned by
+\begin{center}
+ {\tt my\_plan.x[d*j+t]= /* your choice in [-0.5,0.5] */;}
+\end{center}
+
+\subsubsection*{Precompute $\tilde\psi$}
+The precomputation of the values $\tilde\psi\left({\mathbf{x}}_j - \mathbf{n}^{-1}\odot
+\mathbf{l}\right)$, i.e. the entries of the matrix $\mathbf{B}$, depends on the choice
+for {\tt my\_plan.x}.
+If one of the proposed precomputation strategies ({\tt PRE\_LIN\_PSI}, {\tt
+ PRE\_FG\_PSI}, {\tt PRE\_PSI}, or {\tt PRE\_FULL\_PSI}) is used, one has to call
+the appropriate precomputation routine {\bf AFTER} setting the nodes.
+For simpler usage this has been summarised by
+\begin{center}
+ {\tt if(my\_plan.nfft\_flags \& PRE\_ONE\_PSI)
+ nfft\_precompute\_one\_psi(\&my\_plan);}
+\end{center}
+Note furthermore, that
+\begin{enumerate}
+\item {\tt FG\_PSI} and {\tt PRE\_FG\_PSI} rely on the Gaussian window
+ function,
+\item {\tt PRE\_LIN\_PSI} is actual node independent and in this case the
+ precomputation can be done before setting nodes,
+\item {\tt PRE\_FULL\_PSI} asks for quite a bit of memory.
+\end{enumerate}
+
+\subsubsection*{Doing the transform}
+Algorithm \ref{algo:nfft} is implemented as
+\begin{center}
+ {\tt nfft\_trafo(\&my\_plan);}
+\end{center}
+takes {\tt my\_plan.f\_hat} as its input and overwrites {\tt my\_plan.f}.
+One only needs one plan for several transforms of the same kind,
+i.e. transforms with equal initialisation parameters.
+For comparison, the direct calculation of \eqref{ndft} is done by
+{\tt ndft\_trafo}.
+The adjoint transforms are given by {\tt nfft\_adjoint} and {\tt
+ ndft\_adjoint}, respectively.
+
+All data with multi-indices is stored plain, in particular the Fourier
+coefficient $\hat f_{\mathbf{k}}$ is stored in {\tt my\_plan.f\_hat[k]} with
+${\text{\tt k}}:=\sum_{t=0}^{d-1} (k_t+\frac{N_t}{2}) \prod_{t'=t+1}^{d-1}
+N_{t'}$.
+Data vectors might be exchanged by
+\begin{center}
+ {\tt NFFT\_SWAP\_complex(my\_plan.f\_hat,new\_f\_hat);}.
+\end{center}
+
+\subsubsection*{Finalisation}
+All memory allocated by the init routine is deallocated by
+\begin{center}
+ {\tt nfft\_finalize(\&my\_plan);}
+\end{center}
+Note, that almost all (de)allocation operations of the library are done by
+{\tt fftw\_malloc} and {\tt fftw\_free}.
+Additional data, declared and allocated by the application, have to be
+deallocated by the user's program as well.
+
+\subsubsection*{Data structure and functions}
+ The library defines the structure {\tt nfft\_plan}, the most important
+ members are listed in Table \ref{table:nfft_members}.
+ Moreover, the user functions for the NFFT are collected in Table
+ \ref{table:nfft_user_fun}.
+ They all have return type {\tt void} and their first argument is of type {\tt
+ nfft\_plan*}.
+
+
+ \begin{table}[ht!]
+ \begin{center}
+ \begin{tabular}{|r l|l|l|}
+ \hline Type & Name & Size
+ & Description \\
+ \hline
+ \hline {\tt int} & {\tt d} & 1
+ & Spatial dimension $d$ \\
+ \hline {\tt int*} & {\tt N} & d
+ & Multibandwidth $\mathbf{N}$ \\
+ \hline {\tt int} & {\tt N\_total} & 1
+ & Number of coefficients $|I_{\mathbf{N}}|$ \\
+ \hline {\tt int} & {\tt M\_total} & 1
+ & Number of nodes $M$ \\
+ \hline {\tt double complex*}& {\tt f\_hat} &
+ $|I_{\mathbf{N}}|$ & Fourier coefficients $\mathbf{\hat{f}}$ or \\
+ & &
+ & adjoint coefficients $\mathbf{\hat{h}}$ \\
+ \hline {\tt double complex*}& {\tt f} & $M$
+ & Samples $\mathbf{f}$ \\
+ \hline {\tt double*} & {\tt x} & $dM$
+ & Sampling set ${\cal X}$ \\
+ \hline
+ \end{tabular}
+ \end{center}
+ \caption{Interesting members of {\tt nfft\_plan}.}
+ \label{table:nfft_members}
+ \end{table}
+
+ \begin{table}[ht!]
+ \begin{center}
+ \begin{tabular}{|l l|}
+ \hline Name & Additional arguments \\
+ \hline
+ \hline {\tt ndft\_trafo} & \\
+ \hline {\tt ndft\_adjoint} &\\
+ \hline {\tt nfft\_trafo} &\\
+ \hline {\tt nfft\_adjoint} &\\
+ \hline {\tt nfft\_init\_1d} & {\tt int N0, int M}\\
+ \hline {\tt nfft\_init\_2d} & {\tt int N0, int N1, int M}\\
+ \hline {\tt nfft\_init\_3d} & {\tt int N0, int N1, int N2, int M}\\
+ \hline {\tt nfft\_init} & {\tt int d, int* N, int M}\\
+ \hline {\tt nfft\_init\_guru} & {\tt int d, int* N, int M, int* n, int m,} \\
+ & {\tt unsigned nfft\_flags, unsigned fftw\_flags}\\
+ \hline {\tt nfft\_precompute\_one\_psi} &\\
+ \hline {\tt nfft\_check} &\\
+ \hline {\tt nfft\_finalize} &\\
+ \hline
+ \end{tabular}
+ \end{center}
+ \caption{User functions of the NFFT.}
+ \label{table:nfft_user_fun}
+ \end{table}
+
+
+%------------------------------------------------------------------------------
+ \subsection{Generalisations and nomenclature}
+%------------------------------------------------------------------------------
+The generalisations to the nonequispaced FFT in time and frequency domain, the
+nonequispaced fast (co)sine transform, and the nonequispaced sparse FFT are
+based on the same procedure as the NFFT.
+In the following we give some more details for the nonequispaced fast
+spherical Fourier transform.
+
+\subsubsection*{NFSFT}
+Compared to the NFFT routines, the NFSFT module shares a similar basic
+procedure for computing the transformations. It differs, however, slightly
+in data layout and function interfaces.
+
+The NFSFT routines depend on initially precomputed global data that limits the
+maximum degree \verb"N" that can be used for computing transformations. This
+precomputation has to be performed only once at program runtime regardless of
+how many individual transform plans are used throughout the rest. This is done
+by
+\begin{center}
+ \verb"nfsft_precompute(N,1000,0U,0U);"
+\end{center}
+Here, \verb"N" is the maximum degree that can be used in all subsequent transformations,
+\verb"1000" is the threshold for the FPTs used internally, and
+\verb"0U" and \verb"0U" are optional flags for the NFSFT and FPT. If you
+are unsure which values to use, leave the threshold at \verb"1000" and
+the flags at \verb"0U".
+
+Initialisation of a plan is done by calling one of the
+\verb"nfsft_init"-functions. We need no dimension parameter here, as in
+the NFFT case. The simplest version is a call to \verb"nfsft_init"
+specifying only the bandwidth $N$ and the number of nonequispaced nodes $M$.
+For an application-owned variable \verb"nfsft_plan my_plan" the function call
+is
+\begin{center}
+ \verb"nfsft_init(&my_plan,N,M);"
+\end{center}
+The first argument should be uninitialised. Memory allocation is completely
+done by the init routine.
+
+After initialising a plan, one defines the nodes $(\vartheta_{j},\varphi_{j}) \in
+[0,2\pi) \times [0,\pi]$ in spherical coordinates in the member variable
+\verb"my_plan.x".
+For consistency with the other modules and the conventions used there, we
+use swapped and scaled spherical coordinates
+\begin{align*}
+ \tilde{\varphi} & :=
+ \left\{
+ \begin{array}{ll}
+ \frac{\varphi}{2\pi}, & \text{if $0 \le \varphi < \pi$}, \\[1ex]
+ \frac{\varphi}{2\pi}-1, & \text{if $\pi \le \varphi < 2\pi$},
+ \end{array}
+ \right. & \tilde{\vartheta} & := \frac{\vartheta}{2\pi}
+\end{align*}
+and identify a point from $\mathbb{S}^2$ with the vector
+$(\tilde{\varphi}, \tilde{\vartheta}) \in
+[-\frac{1}{2}, \frac{1}{2}) \times [0,\frac{1}{2}]$.
+The angles $\tilde{\varphi}_{j}$ and $\tilde{\vartheta}_{j}$ for
+the $j$-th node are assigned by
+\begin{center}
+ \begin{minipage}{10cm}
+ \verb"my_plan.x[2*j] = /* your choice in [-0.5,0.5] */;"
+ \verb"my_plan.x[2*j+1] = /* your choice in [0,0.5] */;"
+ \end{minipage}
+\end{center}
+After setting the nodes, the same node-dependent (see the exception above)
+precomputation as for the NFFT has to be performed.
+This is done by
+\begin{center}
+ \verb"nfsft_precompute_x(&my_plan);"
+\end{center}
+which itself calls \verb"nfft_precompute_one_psi(&my_plan)" as explained above. You might modify
+the precomputation strategy by passing the appropriate NFFT flags to one of the
+more advanced \verb"nfsft_init" routines.
+Setting the spherical Fourier coefficients $\hat{f}_{k}^n$ in \verb+my_plan.f_hat+
+should be done using the helper macro \verb+NFSFT_INDEX+. This reads
+\begin{center}
+ \begin{minipage}{11cm}
+ \verb"for (k = 0; k <= N; k++)" \\
+% \verb"{" \\
+ \verb" for (n = -k; n <= k; n++)" \\
+% \verb" {" \\
+ \verb" my_plan.f_hat[NFSFT_INDEX(k,n,&plan)] = /* your choice */;" \\
+% \verb" }"\\
+% \verb"}"
+ \end{minipage}
+\end{center}
+For the NFSFT, spherical Fourier coefficients are stored in a fashion different from
+the NFFT. You should always use the helper macro \verb+NFSFT_INDEX+ for setting
+the spherical Fourier coefficients. If, in place of a NFSFT transformation, you
+would like to perform an adjoint NFSFT transformation, you set
+the values $f\left(\vartheta_{j}, \varphi_{j}\right)$ in \verb+my_plan.f+ as follows:
+\begin{center}
+ \begin{minipage}{11cm}
+ \verb"for (j = 0; j < M; j++)" \\
+% \verb"{" \\
+ \verb" my_plan.f[j] = /* your choice */;" \\
+% \verb"}"
+ \end{minipage}
+\end{center}
+
+The actual transforms are computed by calling either \verb+nfsft_trafo(&my_plan)+
+for the NFSFT (see Algorithm \ref{NFSFT:Algorithm:NFSFT}) or
+\verb+nfsft_adjoint(&my_plan)+ for the adjoint NFSFT (see Algorithm
+\ref{NFSFT:Algorithm:adjointNFSFT}).
+Remember, that you must make sure that \verb+my_plan.x+ and \verb+my_plan.f_hat+
+or \verb+my_plan.f+ have been initialised appropriately prior to calling the
+corresponding transformation routine.
+On execution, \verb+nfsft_trafo+ overwrites \verb+my_plan.f+ while
+\verb+nfsft_adjoint+ overwrites \verb+my_plan.f_hat+.
+One only needs one plan for several transforms of the same kind,
+i.e. transforms with equal initialisation parameters.
+For comparison, the direct calculation of \eqref{eq.ndsft} and \eqref{eq.adjointndsft}
+are done by \verb+ndsft_trafo+ and \verb+ndsft_adjoint+, respectively.
+
+All memory allocated by the init routine is deallocated by
+\begin{center}
+ \verb+nfsft_finalize(&my_plan);+
+\end{center}
+while the memory allocated by \verb+nfsft_precompute+ gets
+freed by calling
+\begin{center}
+ \verb+nfsft_forget();+
+\end{center}
+Additional data, declared and allocated by the application, has to be
+deallocated by the user's program as well.
+
+The library defines the structure \verb+nfsft_plan+, the most important
+members are listed in Table \ref{table:nfsft_members}.
+The structure contains, public read-only (r) and public read-write (w)
+members.
+The user functions for the NFSFT are collected in Table
+\ref{table:nfsft_user_fun}.
+
+\begin{table}[ht!]
+ \begin{center}
+ \begin{tabular}{|r l|l|c|l|}
+ \hline Type & Name & Size & Type & Description \\
+ \hline
+ \verb+int+ & \verb+N+ & 1 & r & Bandwidth $N$ \\
+ \verb+int+ & \verb+N_total+ & 1 & r & Set to $4|\mathcal{I}_N|=4(N+1)^2$,\\
+ & & & & quadruple of the number of Fourier coefficients\\
+ \verb+int+ & \verb+M_total+ & 1 & r & Total number of nodes $M$ \\
+ \verb+double complex*+ & \verb+f_hat+ & $4|\mathcal{I}_N|$ & w & Fourier coefficients $\hat{\mathbf{f}}$ or\\
+ & & & & adjoint coefficients $\hat{\mathbf{h}}$ \\
+ \verb+double complex*+ & \verb+f+ & $M$ & w & Samples $\mathbf{f}$ \\
+ \verb+double*+ & \verb+x+ & $M$ & w & Sampling set $\mathcal{X}$ \\
+ \hline
+ \end{tabular}
+ \end{center}
+ \caption{Interesting members of {\tt nfsft\_plan}.\label{table:nfsft_members}}
+ \end{table}
+
+ \begin{table}[ht!]
+ \begin{center}
+ \begin{tabular}{|l l|}
+ \hline Name & Additional arguments \\
+ \hline
+ \hline \verb+nfsft_precompute+ & \verb+int N, double threshold,+\\
+ & \verb+unsigned int nfsft_flags, unsigned int fpt_flags+\\
+ \hline \verb+nfsft_init+ & \verb+int N, int M+ \\
+ \hline \verb+nfsft_init_advanced+ & \verb+int N, int M, unsigned int nfsft_flags+ \\
+ \hline \verb+nfsft_init_guru+ & \verb+int N, int M, unsigned int nfsft_flags,+ \\
+ & \verb+int nfft_flags, int nfft_cutoff+ \\
+ \hline \verb+nfsft_precompute_x+ & \\
+ \hline \verb+ndsft_trafo+ & \\
+ \hline \verb+ndst_adjoint+ & \\
+ \hline \verb+nfsft_trafo+ & \\
+ \hline \verb+nfsft_adjoint+ & \\
+ \hline \verb+nfsft_finalize+ & \\
+ \hline \verb+nfsft_forget+ & \\
+ \hline
+ \end{tabular}
+ \end{center}
+ \caption{User functions of the NFSFT.\label{table:nfsft_user_fun}}
+ \end{table}
+
+Some more things should be kept in mind when using the NFSFT module:
+\begin{itemize}
+\item The bandwidth $N_{\text{max}}$ up to which global precomputation is
+ performed when calling \verb+nfsft_precompute+ is always chosen as the
+ next power of two with respect to the specified maximum bandwidth $N$.
+\item By default, the NDSFT and NFSFT transformations,
+ \verb+ndsft_trafo+ and \verb+nfsft_trafo+, are allowed to destroy the
+ input \verb+f_hat+ while the input \verb+x+ is preserved. On the contrary,
+ the adjoint NDSFT and NFSFT transformations, \verb+ndsft_adjoint+ and
+ \verb+nfsft_adjoint+, do not destroy the input \verb+f+ and \verb+x+ by
+ default. The desired behaviour can be assured by using the
+ \verb+NFSFT_PRESERVE_F_HAT+, \verb+NFSFT_PRESERVE_X+, \verb+NFSFT_PRESERVE_F+ and
+ \verb+NFSFT_DESTROY_F_HAT+, \verb+NFSFT_DESTROY_X+, \verb+NFSFT_DESTROY_F+
+ flags.
+\end{itemize}
+
+%------------------------------------------------------------------------------
+ \subsection{Inversion and solver module} \label{sect:general_proc_infft}
+%------------------------------------------------------------------------------
+ The flow chart in Figure \ref{fig:struct} shows how to use the inverse
+ transforms as implemented in the solver module of the library.
+ There is no general stopping rule implemented, since this task is highly
+ dependent on the particular application.
+ \begin{figure}[ht!]
+ \begin{center}
+ \input{struct}
+ \end{center}
+ \caption{Flow chart of the inverse transforms.\label{fig:struct}}
+ \end{figure}
+
+ Each inverse transform basically wraps an already initialised Fourier
+ transform.
+ The user specifies one of the Algorithms
+ \ref{algo:landweber}-\ref{algo:wCGNE(R)} by setting one of the flags
+ ({\tt LANDWEBER}, {\tt STEEPEST\_DESCENT}, {\tt CGNR}, {\tt CGNE}).
+ Weights and/or damping factors are used if the flags {\tt
+ PRECOMPUTE\_WEIGHT}, {\tt PRECOMPUTE\_DAMP} are set and one has to initialise
+ the members {\tt my\_iplan.w}, {\tt my\_iplan.w\_hat} in these cases.
+ Default flags are {\tt CGNR}.
+
+ In case of the NFFT, the library defines the structure {\tt infft\_plan}.
+ The members of this plan are given by Table \ref{table:infft_members}.
+ The user functions for the inverse NFFT are collected in Table
+ \ref{table:infft_user_fun}.
+ They all have return type {\tt void} and their first argument is of type {\tt
+ infft\_plan*}.
+ Replacing {\tt nfft} by any other Fourier transform gives the appropriate
+ inverse to this transform.
+
+ \begin{table}[ht!]
+ \begin{center}
+ \begin{tabular}{|r l|l|l|}
+ \hline Type & Name & Size & Description \\
+ \hline
+ \hline {\tt double*} & {\tt w} & {\tt M\_total} & weights $\mathbf{w}$ \\
+ \hline {\tt double*} & {\tt w\_hat} & {\tt N\_total} & damping factors $\mathbf{\hat{w}}$ \\
+ \hline {\tt (FLT\_TYPE)*} & {\tt y} & {\tt M\_total} & right hand side $\mathbf{y}$ \\
+ \hline {\tt (FLT\_TYPE)*} & {\tt f\_hat\_iter} & {\tt N\_total} & actual solution \\
+ \hline {\tt (FLT\_TYPE)*} & {\tt r\_iter} & {\tt M\_total} & residual vector $\mathbf{r}_{l+1}$\\
+ \hline {\tt double} & {\tt dot\_r\_iter} & 1 & $\|\mathbf{r}_{l+1}\|_{\mathbf{W}}^2$ \\
+ \hline
+ \end{tabular}
+ \end{center}
+ \caption{More important members of each inverse plan, where {\tt
+ (FLT\_TYPE)} is {\tt double} for the NFCT and NFST and {\tt double complex}
+ in all other cases.}
+ \label{table:infft_members}
+ \end{table}
+
+ \begin{table}[ht!]
+ \begin{center}
+ \begin{tabular}{|l l|}
+ \hline Name & Additional arguments \\
+ \hline
+ \hline {\tt infft\_init} & {\tt nfft\_plan *mv}\\
+ \hline {\tt infft\_init\_advanced} & {\tt nfft\_plan *mv, unsigned infft\_flags}\\
+ \hline {\tt infft\_before\_loop} & \\
+ \hline {\tt infft\_loop\_one\_step} &\\
+ \hline {\tt infft\_finalize} &\\
+ \hline
+ \end{tabular}
+ \end{center}
+ \caption{User functions of the inverse NFFT.}
+ \label{table:infft_user_fun}
+ \end{table}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Examples}\label{sect:ex}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The library was tested on a AMD Athlon(tm) XP 2700+, 1GB memory, SuSe-Linux,
+kernel 2.4.20-4GB-athlon, gcc version 3.3.
+In all tests with random input the nodes $\mathbf{x}_j$ and the Fourier
+coefficients $\hat f_{\mathbf{k}}$ are chosen pseudo randomly with $\mathbf{x}_j \in
+[-0.5,0.5]^d$ and $\hat f_{\mathbf{k}} \in [0,1] \times [0,1]{\rm i}$.
+
+%------------------------------------------------------------------------------
+\subsection{Computing your first transform}\label{sect:first_trafo}
+%------------------------------------------------------------------------------
+
+The following code summarises the steps of Section \ref{sect:general_proc} and
+computes a univariate NFFT from 14 Fourier coefficients and 19 nodes.
+Note that this routine is part of {\tt simple\_test.c} in {\tt examples/nfft/}
+and uses additional routines as defined {\tt include/util.h} to set up and
+show vectors.
+\begin{verbatim}
+void simple_test_nfft_1d()
+{
+ nfft_plan p;
+ int N=14;
+ int M=19;
+
+ nfft_init_1d(&p,N,M);
+
+ nfft_vrand_shifted_unit_double(p.x,p.M_total);
+
+ if(p.nfft_flags & PRE_ONE_PSI)
+ nfft_precompute_one_psi(&p);
+
+ nfft_vrand_unit_complex(p.f_hat,p.N_total);
+ nfft_vpr_complex(p.f_hat,p.N_total,"given Fourier coefficients, f_hat");
+
+ ndft_trafo(&p);
+ nfft_vpr_complex(p.f,p.M_total,"ndft, f");
+
+ nfft_trafo(&p);
+ nfft_vpr_complex(p.f,p.M_total,"nfft, f");
+
+ nfft_finalize(&p);
+}
+\end{verbatim}
+
+%------------------------------------------------------------------------------
+\subsection{Computation time vs. problem size}
+%------------------------------------------------------------------------------
+The program {\tt nfft\_times} in the same directory compares the computation
+time of the FFT (\cite{fftw}, {\tt FFTW\_MEASURE}), the straightforward
+evaluation of \eqref{eq:nfft}, denoted by NDFT, and the NFFT for increasing
+total problem sizes $|I_{\mathbf{N}}|$ and space dimensions $d=1,2,3$, where $
+\mathbf{N}=(N,\hdots,N)^{\top},\;N\in\N$.
+While the nodes for the FFT are restricted to the lattice $\mathbf{N}^{-1}\odot
+I_{\mathbf{N}}$, we choose $M=N^d$ random nodes for the NDFT and the NFFT.
+Within the latter, we use the oversampling factor $\sigma=2$, the cut-off
+$m=4$, and the Kaiser-Bessel window function ({\tt PRE\_PSI}, {\tt
+ PRE\_PHI\_HUT}).
+This results in a fixed accuracy of $E_{\infty}:=\|\mathbf{f}-
+\mathbf{s}\|_{\infty}/\|\mathbf{\hat{f}}\|_1\approx 10^{-8}$ for $d=1,2,3$.
+
+\begin{table}[ht!]
+ \centering
+ \begin{tabular}{|r|r|r|r||r|r|r|r|}
+ \hline
+ $l_N$ & FFT & NDFT & NFFT &
+ $l_N$ & FFT & NDFT & NFFT\\
+ \hline
+\multicolumn{4}{|c||}{$d=1$} & \multicolumn{4}{c|}{$d=2$}\\ \hline
+$3$& $1.3e-07$& $8.7e-06$& $4.6e-06$& $6$& $9.9e-07$& $5.7e-04$& $3.2e-04$ \\
+$4$& $2.0e-07$& $3.5e-05$& $8.7e-06$& $8$& $4.4e-06$& $9.2e-03$& $1.3e-03$ \\
+$5$& $4.0e-07$& $1.4e-04$& $1.7e-05$& $10$& $2.1e-05$& $1.5e-01$& $5.2e-03$ \\
+$6$& $8.9e-07$& $5.6e-04$& $3.6e-05$& $12$& $1.2e-04$& $2.4e+00$& $2.3e-02$ \\
+$7$& $2.2e-06$& $2.2e-03$& $7.2e-05$& $14$& $1.7e-03$& $3.8e+01$& $1.5e-01$ \\
+$8$& $4.8e-06$& $9.0e-03$& $1.4e-04$& $16$& $2.1e-02$& *& $6.8e-01$ \\
+$9$& $1.1e-05$& $3.6e-02$& $2.9e-04$& $18$& $8.4e-02$& *& $2.8e+00$ \\
+$10$& $2.4e-05$& $1.4e-01$& $6.0e-04$& $20$& $3.2e-01$& *& $1.2e+01$ \\
+$11$& $5.7e-05$& $5.8e-01$& $1.4e-03$& $22$& $1.4e+00$&
+ *& $5.3e+01$ \\ \cline{5-8}
+$12$& $1.5e-04$& $2.3e+00$& $3.2e-03$&
+ \multicolumn{4}{c|}{$d=3$}\\ \cline{5-8}
+$13$& $5.5e-04$& $9.4e+00$& $8.2e-03$& $9$& $1.0e-05$& $3.7e-02$& $2.5e-02$ \\
+$14$& $1.7e-03$& $3.8e+01$& $2.0e-02$& $12$& $1.1e-04$& $2.4e+00$& $2.5e-01$ \\
+$15$& $3.8e-03$& $1.5e+02$& $4.9e-02$& $15$& $3.4e-03$& $1.5e+02$& $2.4e+00$ \\
+$16$& $8.2e-03$& *& $1.2e-01$& $18$& $5.2e-02$& *& $2.1e+01$ \\
+$17$& $1.9e-02$& *& $2.4e-01$& $21$& $9.0e-01$& *& $1.8e+02$ \\
+$18$& $4.5e-02$& *& $3.6e-01$& & & & \\
+$19$& $9.2e-02$& *& $9.8e-01$& & & & \\
+$20$& $1.9e-01$& *& $2.1e+00$& & & & \\
+$21$& $4.2e-01$& *& $4.2e+00$& & & & \\
+$22$& $1.0e-00$& *& $9.5e+00$& & & & \\
+ %\input{images/nfft/timings_nice_dagobert}
+ \hline
+ \end{tabular}
+ \caption{Computation time in seconds with respect to $l_N=\log_2|I_{
+ \mathbf{N}}|$.
+ Note that we used accumulated measurements in case of small times and the
+ times (*) are not displayed due to the large response time in comparison
+ to the FFT time.}
+ \label{tab:TimeSpace_1}
+\end{table}
+
+We conclude the following: The FFT and the NFFT show the expected
+$\cO(|I_{\mathbf{N}}|\log|I_{\mathbf{N}}|)$ time complexity, i.e., doubling the total size $|I_{\mathbf{N}}|$
+results in only slightly more than twice the computation time, whereas the
+NDFT behaves as $\cO(|I_{\mathbf{N}}|^2)$.
+Note furthermore, that the constant in the $\cO$-notation is independent of
+the space dimension $d$ for the FFT and the NDFT, whereas the computation time
+of the NFFT increases considerably for larger $d$.
+
+%------------------------------------------------------------------------------
+\subsection{Accuracy vs. window function and cut-off parameter $m$}
+%------------------------------------------------------------------------------
+The accuracy of the Algorithm \ref{algo:nfft}, measured by
+\begin{equation*}
+E_2=\frac{\|\mathbf{f}- \mathbf{s}\|_2}{\|\mathbf{f}\|_2}
+=\left({\sum_{j=0}^{M-1}|f_j-s\left(
+\mathbf{x}_j\right)|^2}/{\sum_{j=0}^{M-1}
+ |f_j|^2}\right)^{\frac{1}{2}}
+\end{equation*}
+and
+\begin{equation*}
+E_{\infty}=\frac{\|\mathbf{f}- \mathbf{s}\|_{\infty}}{\|\mathbf{\hat{f}}\|_1}
+={\max_{0\le j<M}|f_j-s\left(
+\mathbf{x}_j\right)|}/{\sum_{\mathbf{k} \in I_{\mathbf{N}}} |\hat
+ f_{\mathbf{k}}|}
+\end{equation*}
+is shown in Figure \ref{fig:accuracy}.
+
+ \begin{figure}[ht!]
+ \begin{center}
+ \begin{tabular}{c c c}
+ \includegraphics[width=4.8cm]{images/accuracy1} &
+ \includegraphics[width=4.8cm]{images/accuracy2} &
+ \includegraphics[width=4.8cm]{images/accuracy3} \\
+ \includegraphics[width=4.8cm]{images/accuracy4} &
+ \includegraphics[width=4.8cm]{images/accuracy5} &
+ \includegraphics[width=4.8cm]{images/accuracy6}
+ \end{tabular}
+ \end{center}
+ \caption{The error $E_2$ (top) and $E_{\infty}$ (bottom) with respect to $m$,
+ from left to right $d=1,2,3$ ($N=2^{12},2^6,2^4,\, \sigma=2,\,M=10000$),
+ for Kaiser Bessel- (circle), Sinc- (x), B-Spline- ($+$), and Gaussian window (triangle).}
+ \label{fig:accuracy}
+ \end{figure}
+
+%------------------------------------------------------------------------------
+\subsection{Computing an inverse transform}\label{sect:rec_example}
+%------------------------------------------------------------------------------
+The usage of the inverse NFFT is demonstrated by {\tt simple\_test} in {\tt
+ examples/solver}.
+Executing the {\sc MatLab} script {\tt glacier.m} in the same directory
+produces the following two plots.
+Note that the corresponding C-file {\tt glacier.c} is called from the {\sc
+ MatLab} script.
+\begin{figure}[ht!]
+ \begin{center}
+ \begin{tabular}{cc}
+ \includegraphics[width=6cm]{images/glacier1} &
+ \includegraphics[width=6cm]{images/glacier2}
+ \end{tabular}
+ \end{center}
+ \caption{Reconstruction of the glacier from samples at $M=8345$ nodes ({\tt
+ vol87.dat} from \cite{Franke.Daten}) with $N_0=N_1=256$ and $40$
+ iterations. \label{Fig:glacier}}
+\end{figure}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Applications}\label{sec:appl}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+In this section we describe important applications which are based on the NFFT
+kernel.
+One can find these programs in the directory {\tt applications}.
+
+%------------------------------------------------------------------------------
+\subsection{Summation of smooth and singular kernels}
+%------------------------------------------------------------------------------
+
+We are interested in the fast evaluation of linear combinations of radial
+functions, i.e. the computation of
+\begin{equation*}
+ g\left(\mathbf{y}_j\right) := \sum_{k=1}^N \alpha_k K\left(\left\|\mathbf{y}_j-
+ \mathbf{x}_k\right\|_2\right)
+\end{equation*}
+for $j=1,\hdots,M$ and nodes $\mathbf{x}_k, \mathbf{y}_j \in \R^d$.
+For smooth kernels $K$ with an additional parameter $c>0$, e.g. the Gaussian
+$K(x)=\e^{-x^2/c^2}$, the multiquadric $K(x)=\sqrt{x^2+c^2}$ or the inverse
+multiquadric $K(x)=1/\sqrt{x^2+c^2}$ our algorithm requires $\cO(N+M)$
+arithmetic operations.
+In the case of singular kernels $K$, e.g.,
+\begin{equation*}
+ \frac{1}{x^2},\; \frac{1}{|x|}, \; \log |x|, \;
+ x^2 \log |x|, \; \frac{1}{x}, \;
+ \frac{\sin(c x)}{x},\; \frac{\cos(c x)}{x}, \; \cot(cx)
+\end{equation*}
+an additional regularisation procedure must be incorporated and the algorithm
+has the arithmetic complexity $\cO(N \log N +M)$ or $\cO(M\log M + N)$ if
+either the target nodes $\mathbf{y}_j$ or the source nodes $\mathbf{x}_k$ are
+``reasonably uniformly distributed''.
+
+Note that the proposed fast algorithm \cite{post02,postni04,FeSt03}
+generalises the diagonalisation of convolution matrices by Fourier matrices to
+the setting of arbitrary nodes.
+In particular, this yields nearly the same arithmetic complexity as the FMM
+\cite{beatgreen97} while allowing for an easy change of various kernels.
+A recent application in particle simulation is given in \cite{popori05}.
+The directory {\tt applications/fastsum} contains C and {\sc MatLab} programs
+that show how to use the fast summation method.
+
+%------------------------------------------------------------------------------
+\subsection{Fast Gauss transform}
+%------------------------------------------------------------------------------
+
+This is a special case of the fast summation method, we compute approximations
+of the following sums.
+Given complex coefficients $\alpha_k \in \C$ and source nodes
+$x_k\in[-\frac{1}{4},\frac{1}{4}]$, our goal consists in the fast evaluation
+of the sum
+\begin{equation*}
+ g\left(y\right)=\sum_{k=1}^N \alpha_k {\rm e}^{-\sigma|y-x_k|^2}
+\end{equation*}
+at the target nodes $y_j \in [-\frac{1}{4},\frac{1}{4}]$, $j=1,\ldots,M$,
+where $\sigma =a +{\rm i} b$, $a>0$, $b\in\R$, denotes a complex parameter.
+For details see \cite{KuPoSt06} and the related paper \cite{AnBe04} for
+applications.
+All numerical examples of \cite{KuPoSt06} are produced by the programs in {\tt
+ applications/fastgauss}.
+
+%------------------------------------------------------------------------------
+\subsection{Summation of zonal functions on the sphere}
+%------------------------------------------------------------------------------
+
+Given $M,N \in \N$, arbitrary source nodes $\mathbf{\eta}_k \in \S^2$ and real
+coefficients $\alpha_k\in\R$, evaluate the sum
+\begin{equation*}
+ g\left(\mathbf{\xi}\right) := \sum_{k = 1}^N \alpha_k K\left(\mathbf{\eta}_k \cdot
+ \mathbf{\xi}\right)
+\end{equation*}
+at the target nodes $\mathbf{\xi}_j\in\S^2$, $j=1,\hdots,M$.
+The naive approach for evaluating this sum takes $\cO(MN)$ floating point
+operations if we assume that the zonal function $K$ can be evaluated in
+constant time or that all values $K(\mathbf{\eta}_k \cdot \mathbf{\xi}_j)$ can be stored
+in advance.
+
+In contrast, our scheme is based on the nonequispaced fast spherical Fourier
+transform, has arithmetic complexity $\cO(M+N)$, and can be easily adapted to
+such different kernels $K$ as
+ \begin{enumerate}
+ \item the Poisson kernel
+ $Q_{h}:[-1,1] \rightarrow \R$ with $h \in (0,1)$ given by
+ \[
+ Q_{h}(x) := \frac{1}{4\pi} \frac{1-h^2}{\left(1-2 h x+h^2\right)^{3/2}},
+ \]
+ \item the singularity kernel
+ $S_{h}:[-1,1] \rightarrow \R$ with $h \in (0,1)$ given by
+ \[
+ S_{h}(x) := \frac{1}{2\pi} \frac{1}{\left(1-2 h x +h^2\right)^{1/2}},
+ \]
+\item the locally supported kernel
+ $L_{h,\lambda}:[-1,1] \rightarrow \R$ with $h \in (-1,1)$ and
+ $\lambda \in \mathbb{N}_0$ given by
+ \[
+ L_{h,\lambda}(x) :=
+ \left\{\begin{array}{l@{\quad \text{if} \quad}rcl}
+ 0 & -1 &\le x \le& h, \\
+ \frac{\lambda+1}{2\pi(1-h)^{\lambda+1}}\left(x-h\right)^{\lambda} &
+ h & < x \le& 1,
+ \end{array}\right.
+ \]
+or
+\item the spherical Gaussian kernel
+ $G_{\sigma}:[-1,1] \rightarrow
+ \R$ with $\sigma>0$
+ \[
+ G_{\sigma}(x) := \e^{2\sigma x-2\sigma}\,.
+ \]
+ \end{enumerate}
+
+For details see \cite{KeKuPo06}, all corresponding numerical examples can be
+found in {\tt applications\ /fastsumS2}.
+
+%------------------------------------------------------------------------------
+\subsection{Iterative reconstruction in magnetic resonance imaging}
+%------------------------------------------------------------------------------
+
+In magnetic resonance imaging (MRI) the raw data is measured in k-space, the
+domain of spatial frequencies.
+Methods that use a non-Cartesian sampling grid in k-space, e.g. a spiral, are
+becoming increasingly important.
+Reconstruction is usually performed by resampling the data onto a Cartesian
+grid and the usage of the standard FFT - often denoted by gridding.
+Another approach, the inverse model, is based on an implicit discretisation.
+Both discretisations are solved efficiently by means of the NFFT and the
+inverse NFFT, respectively.
+Furthermore, a unified approach to field inhomogeneity correction has been
+included, see \cite{KnKuPo,EgKnPo06} for details.
+
+%------------------------------------------------------------------------------
+\subsection{Computation of the polar FFT}
+%------------------------------------------------------------------------------
+
+The polar FFT is a special case of the NFFT, where one computes the Fourier
+transform on particular grids.
+Of course, the polar as well as a so-called pseudo-polar FFT can be computed
+very accurately and efficiently by the NFFT.
+Furthermore, the reconstruction of a $2d$ signal from its Fourier transform
+samples on a (pseudo-)polar grid by means of the inverse nonequispaced FFT is
+possible under certain density assumptions.
+For details see \cite{FeKuPo06} and for further applications
+\cite{AvCoDoElIs}.
+
+\begin{figure}[ht]
+ \centering
+ \subfigure
+ {\includegraphics[width=0.3\textwidth]{images/polar_grid}}\hfill
+ \subfigure
+ {\includegraphics[width=0.3\textwidth]{images/modified_polar_grid}}\hfill
+ \subfigure
+ {\includegraphics[width=0.3\textwidth]{images/linogram_grid}}
+ \caption{Left to right: polar, modified polar, and linogram grid of size
+ $R=16$, $T=32$. \label{fig:grids}}
+\end{figure}
+
+%------------------------------------------------------------------------------
+\subsection{Radon transform, computer tomography, and ridgelet transform}
+%------------------------------------------------------------------------------
+
+We are interested in efficient and high quality reconstructions of digital $N
+\times N$ medical images from their Radon transform.
+The standard reconstruction algorithm, the filtered backprojection, ensures a
+good quality of the images at the expense of $\cO( N^3 )$ arithmetic
+operations.
+Fourier reconstruction methods reduce the number of arithmetic operations to
+${\cal O}( N^2 \log N )$.
+Unfortunately, the straightforward Fourier reconstruction algorithm suffers
+from unacceptable artifacts so that it is useless in practice.
+A better quality of the reconstructed images can be achieved by our algorithm
+based on NFFTs.
+For details see \cite{PoSt01IMA, PoSt00SPIE, PoSt02JFAA} and the directory
+{\tt applications/radon}.
+
+Another application of the discrete Radon transform is the discrete Ridgelet
+transform, see e.g. \cite{CaDeDoYi}.
+A simple test program for denoising an image by hard thresholding the ridgelet
+coefficients can be found in {\tt applications/radon}.
+It uses the NFFT-based discrete Radon transform and the translation-invariant
+discrete Wavelet transform based on {\sc MatLab} toolbox WaveLab850
+\cite{WaveLab}.
+See \cite{FeMa05} for details.
+
+\bibliographystyle{abbrv}
+%\bibliographystyle{alpha}
+\bibliography{../references/references}
+\end{document}
diff --git a/doc/tutorial/paper_brief.tex b/doc/tutorial/paper_brief.tex
new file mode 100755
index 0000000..cfa40ae
--- /dev/null
+++ b/doc/tutorial/paper_brief.tex
@@ -0,0 +1,2001 @@
+%==============================================================================
+%\documentclass[11pt,a4paper,twoside,bibtotoc]{scrartcl}
+\documentclass[acmtoms]{acmtrans2m}
+%==============================================================================
+\acmVolume{V}
+\acmNumber{N}
+\acmYear{08}
+\acmMonth{M}
+
+% LaTeX packages
+\usepackage{caption}
+\usepackage{a4wide}
+\usepackage{amsfonts}
+\usepackage{amsmath}
+\usepackage{theorem}
+\usepackage{color}
+\usepackage{graphicx}
+\usepackage{subfigure}
+\usepackage[plain,Alg.]{algorithm}
+\usepackage{algorithmic}
+\usepackage{multicol}
+\usepackage{multirow}
+%\usepackage{showkeys}
+
+% Allow for more figures on each side
+\renewcommand{\topfraction}{1}
+\renewcommand{\textfraction}{0.2}
+\setcounter{totalnumber}{4}
+
+% Shortcuts for maths symbols.
+\newcommand{\N}{\ensuremath{\mathbb{N}}}
+\newcommand{\T}{\ensuremath{\mathbb{T}}}
+\renewcommand{\S}{\ensuremath{\mathbb{S}}}
+\newcommand{\NZ}{\ensuremath{\mathbb{N}_{0}}}
+\newcommand{\Z}{\ensuremath{\mathbb{Z}}}
+\newcommand{\R}{\ensuremath{\mathbb{R}}}
+\newcommand{\Rp}{\ensuremath{\mathbb{R}^{+}}}
+\newcommand{\Rn}{\ensuremath{\mathbb{R}^n}}
+\newcommand{\Rnn}{\ensuremath{\mathbb{R}^{n \times n}}}
+\newcommand{\C}{\ensuremath{\mathbb{C}}}
+\newcommand{\nfft}{\textsf{NFFT}}
+\newcommand{\cO}{\ensuremath{\mathcal{O}}}
+\newcommand{\tT}{\ensuremath{\text{\tiny{T}}}}
+\newcommand{\ti}{\ensuremath{\text{\scriptsize{i}}}}
+\newcommand{\e}{{\ensuremath{\mathrm{e}}}}
+\newcommand{\eim}[1]{\ensuremath{\mathrm{e}^{-2\pi{\ti} #1}}}
+\newcommand{\eip}[1]{\ensuremath{\mathrm{e}^{ 2\pi{\ti} #1}}}
+\renewcommand{\mathbf}[1]{\ensuremath{\boldsymbol{#1}}}
+\newcommand{\ds}{\displaystyle}
+\newcommand{\sinc}{{\rm sinc}}
+\newcommand{\dist}{{\rm dist}}
+\newcommand{\adj}{{\vdash \hspace*{-1.72mm} \dashv}}
+\DeclareMathOperator{\diag}{diag}
+\DeclareMathOperator{\dd}{d}
+\newcommand{\bend}
+{
+ \hspace*{0ex} \hfill
+ \hbox{\vrule height 1.5ex \vbox{\hrule width 1.4ex \vskip
+ 1.4ex\hrule width 1.4ex} \vrule height 1.5ex}
+}
+
+% Environment Numbering
+\numberwithin{equation}{section}
+\numberwithin{table}{section}
+\numberwithin{figure}{section}
+
+\DeclareCaptionLabelSeparator{periodem}{.\hskip 1em}
+\captionsetup{font=footnotesize,labelfont=,labelsep=periodem}
+
+%\captionnamefont{\footnotesize}
+%\captiontitlefont{\footnotesize}
+
+%===============================================================================
+% Title Page
+%===============================================================================
+\markboth{Keiner, Kunis, Potts}{NFFT, nonequispaced fast Fourier transforms}
+
+\title{Using NFFT~3 -- a software library for various nonequispaced fast
+ Fourier transforms}
+\author{
+ Jens Keiner\\
+ University of L\"ubeck\\
+ 23560 L\"ubeck, Germany\\
+ keiner at math.uni-luebeck.de
+ \and
+ Stefan Kunis\\
+ Chemnitz University of Technology\\
+ 09107 Chemnitz, Germany\\
+ kunis at mathematik.tu-chemnitz.de
+ \and
+ Daniel Potts\\
+ Chemnitz University of Technology\\
+ 09107 Chemnitz, Germany\\
+ potts at mathematik.tu-chemnitz.de
+ }
+\begin{abstract}
+ NFFT~3 is a software library that implements the nonequispaced fast Fourier
+ transform (NFFT) and a number of related algorithms, e.g. nonequispaced fast
+ Fourier transforms on the sphere and iterative schemes for inversion. This is
+ to provide a survey on the mathematical concepts behind the NFFT and its variants,
+ as well as a general guideline for using the library. Numerical examples for
+ a number of applications are given.
+\end{abstract}
+
+\category{G.1}{F.2.1}{Numerical analysis, Computation of transforms}
+\terms{Algorithms, Documentation, Theory}
+\keywords{fast Fourier transforms, approximative algorithms}
+
+\begin{document}
+\maketitle
+%===============================================================================
+\section{Introduction} \label{sect:1}
+%===============================================================================
+\setcounter{equation}{0}
+
+NFFT~3 \cite{nfft3} is a C software library for computing
+the nonequispaced fast Fourier transform (NFFT); see Appendix \ref{A.4} for
+alternative denominations, further approaches, and references.
+At the heart of the library is a fast algorithm that generalizes the
+ubiquitous FFT \cite{CoTu65} from equally spaced to arbitrary sampling
+points/spatial nodes, hence the name NFFT; see Appendix \ref{appendix.nfft}.
+Our implementation is based on the popular FFTW library \cite{FFTW05}.
+Unlike the FFT, the NFFT is not trivially inverted, which compells one to
+resort to iterative techniques. Our library also implements these iterative
+algorithms for inversion, as well as several other discrete transforms related to
+or based on the NFFT. This paper is to present an overview over NFFT~3, the
+underlying algorithmic concepts, and intents to serve as a general guideline.
+
+We start in Section \ref{sect:nfft} with the definition of the nonequispaced
+discrete Fourier transform (NDFT) as a generalization of the discrete
+Fourier transform (DFT) to arbitrary nodes. The NFFT algorithm, its key properties,
+and differences to the classical FFT are discussed.
+Having settled the relevant definitions, the basic principles
+of using the NFFT~3 software library are described in Section \ref{sect:lib}.
+%shows how to compile and install the software package on
+%your computer system.
+%A small example in one dimension demonstrates the basic principles.
+An overview over the software interface to the NFFT library routines concludes
+this section.
+In Section \ref{sect:gen}, several transforms that derive from the original NFFT
+are described. This includes, among others, the NFFT on the unit sphere and
+iterative schemes for inversion of the NFFT. Section \ref{sect:sum} is to summarize
+the theoretical arithmetic costs of our algorithms and presents actual
+performance measurements for our implementation.
+In the final Section \ref{sect:exap}, a number of elementary numerical examples
+as well as more advanced applications are given.
+
+We have restricted ourselves to describe brief recipes which should be
+sufficient for most users. For the experienced user, a comprehensive software
+interface documentation is provided within the downloadable software package
+\cite[doc/refman.pdf]{nfft3}.
+
+%===============================================================================
+\section{Nonequispaced discrete Fourier transform} \label{sect:nfft}
+%===============================================================================
+\setcounter{equation}{0}
+
+Fast Fourier transforms (FFTs) have recently been generalized to
+arbitrary sampling situations; see
+\cite{duro93,bey95,AnDa96,st97,ware98,postta01} and the references in Appendix
+\ref{A.4}.
+A convenient approach is to define the discrete Fourier transform (DFT) as the
+evaluation of a trigonometric polynomial, given by its Fourier coefficients,
+at equispaced spatial nodes. This can then be generalized to arbitrary nodes.
+
+\subsection{Discrete Fourier transform}
+Following standard conventions \cite{loan,FFTW05} the (forward) discrete Fourier
+transform (DFT) is defined as the calculation of the sums
+\begin{equation} \label{eq.dft}
+ f_{j} = \sum_{k = 0}^{N-1} \hat{f}_{k} \mathrm{e}^{-2\pi\mathrm{i}jk/N} \qquad
+ (j=0,\ldots,N-1)
+\end{equation}
+for $N \in \mathbb{N}$ and given coefficients $\hat{f}_{k}\in\C$.
+The transform is readily inverted, i.e.,
+\begin{equation}
+ \label{eq.idft}
+ \hat{f}_{k} = \frac{1}{N} \sum_{j = 0}^{N-1} f_{j} \mathrm{e}^{2\pi\mathrm{i}kj/N}.
+\end{equation}
+Clearly, the computation of these transforms requires $\mathcal{O}(N^{2})$
+arithmetic operations in general. Fast Fourier transforms (FFTs) are
+$\mathcal{O}(N \log N)$ algorithms to compute the same result.
+
+In matrix-vector notation, the DFT can be written as the matrix-vector product
+\begin{align*}
+ \mathbf{f} = \mathbf{F} \, \mathbf{\hat{f}}, \quad
+\mathbf{F} =
+(\mathrm{e}^{-2\pi\mathrm{i}jk/N})_{j,k=0,\ldots,N}
+\end{align*}
+with vectors $\mathbf{f} = (f_j)_{j=0,\ldots,N-1}$,
+$\mathbf{\hat{f}} = (\hat{f}_k)_{k=0,\ldots,N-1}$,
+and the Fourier matrix $\mathbf{F}$.
+%= (\mathrm{e}^{-2\pi\mathrm{i}jk/N})_{j,k=0,\ldots,N}$.
+The inverse transform is equivalent to $\mathbf{\hat{f}} = \tfrac{1}{N}
+\mathbf{F}^{\adj} \, \mathbf{f}$.
+It is straightforward to generalize these concepts to multidimensional
+transforms; see Section \ref{subsect.definition} below. But before we
+define the NDFT, some notation is at order.
+
+\subsection{Notation}
+A $d$-dimensional nonequispaced discrete Fourier transform is defined by a set
+of arbitrary spatial nodes $\mathcal{X}$ and a frequency bandwidth vector
+$\mathbf{N}$.
+Each node $\mathbf x_j$ in the sampling set
+${\cal X}:=\{\mathbf{x}_j \in \T^d:\,j=0,\hdots,M-1\}$ is drawn from the
+$d$-dimensional torus $\mathbb{T}^d \cong [-\tfrac{1}{2},\tfrac{1}{2})^d$
+with the number of nodes equal to $|\mathcal{X}| = M$.
+
+For each dimension $t = 0,\ldots,d-1$, the bandwidth $N_{t} \in 2\N$ is
+defined as a fixed even number. These bandwidths are collected in the
+vector $\mathbf{N} := \left({N_0},\ldots,N_{d-1}\right)^{\top}$.
+Let us define the multi-index set
+\begin{equation*}
+ I_{\mathbf{N}} :=
+ \mathbb{Z}^d \cap \prod_{t=0}^{d-1} \left[-\tfrac{N_t\rule[-0.4ex]{0ex}{1ex}}{2},
+\tfrac{\rule[-0.4ex]{0ex}{1ex}N_t}{2}\right)
+=\left\{ \mathbf{k}=\left(k_t\right)_{t=0,\hdots,d-1} \in
+ \Z^d: - \frac{N_t}{2} \le k_t < \frac{N_t}{2} ,\;t=0,\hdots,d-1\right\}.
+\end{equation*}
+Then the set $I_{\mathbf{N}}$ is a representation of all possible frequencies
+in a transform. For simplicity, we use the convention that a multi-index
+$\mathbf{k}$ can also reference elements in vectors or rows and columns of matrices
+as if it were linearized to $k:=\sum_{t=0}^{d-1}
+(k_t+\frac{N_t}{2}) \prod_{t'=t+1}^{d-1} N_{t'}$.
+
+The inner product between a frequency index $\mathbf{k}$ and a node $\mathbf{x}$
+is defined as usual, $\mathbf{k} \mathbf{x}:=k_0 x_0 +\hdots+
+k_{d-1} x_{d-1}$.
+Furthermore, we define the component-wise vector product $\mathbf{\sigma} \odot
+\mathbf{N}:=\left(\sigma_0 N_0, \hdots, \sigma_{d-1} N_{d-1}, \right)^{\top}$,
+and the reciprocal of a vector $\mathbf{N}$ with nonzero components, $\mathbf{N}^{-1}:=
+\left({N_0}^{-1},\ldots,{N_{d-1}^{-1}}\right)^{\top}$.
+
+The class of functions $f: \T^d \rightarrow \C$ that is naturally associated
+with an index set $I_{\mathbf{N}}$ is the space of $d$-variate, one-periodic
+trigonometric polynomials of degree at most $N_t$ along each dimension $t$,
+$
+ T_{\mathbf{N}}:={\rm
+span}\left(\eim{\mathbf{k}\,\mathbf{\cdot}\,}:\,\mathbf{k}
+ \in I_{\mathbf{N}}\right)
+$.
+This space has dimension $\dim T_{\mathbf{N}} = |I_{\mathbf{N}}| = N_{0} \cdot
+\ldots \cdot N_{d-1}$.
+
+%-------------------------------------------------------------------------------
+\subsection{Definition}
+\label{subsect.definition}
+%-------------------------------------------------------------------------------
+We are now ready to define the \emph{nonequispaced discrete Fourier transform (NDFT)}
+as a generalization of the forward DFT \eqref{eq.dft} to arbitrary nodes.
+Given Fourier coefficients $\hat f_{\mathbf{k}} \in \C$,
+$\mathbf{k}\in I_{\mathbf{N}}$, as input, the NDFT is defined as the evaluation
+of the corresponding trigonometric polynomial $f \in T_{\mathbf{N}}$ at the
+set of $M$ arbitrary nodes $\mathcal{X}$, i.e., the calculation of the sums
+\begin{equation}
+ \label{eq:nfft}
+ f_j = \sum_{\mathbf{k}\in I_{\mathbf{N}}} \hat{f}_{\mathbf{k}}
+ \eim{\mathbf{k}\mathbf{x}_j} \qquad (j=0,\hdots,M-1).
+\end{equation}
+To see how this compares with the definition of the DFT, take
+$\mathbf{N}=(N,\hdots,N)^{\top}$, $N\in 2\N$, and $N^d$
+equispaced nodes $\mathbf{x}_{\mathbf{j}}={\frac{1}{N}}\mathbf{j}$,
+$\mathbf{j} \in I_{\mathbf{N}}$. Then \eqref{eq:nfft}
+reduces (up to an index shift) to a usual multidimensional forward
+DFT.
+
+The NDFT \eqref{eq:nfft} too can be written as a matrix-vector product,
+\begin{equation*}
+ \mathbf{f} = \mathbf{A} \mathbf{\hat{f}},
+\end{equation*}
+with the vectors $\mathbf{f} := \left(f_j\right)_{j=0,\hdots,M-1}$,
+$\mathbf{\hat{f}} :=(\hat{f}_{\mathbf{k}})_{\mathbf{k}\in
+I_{\mathbf{N}}}$, and the nonequispaced Fourier matrix $\mathbf{A}
+:= \left(\eim{\mathbf{k}\mathbf{x}_j}\right)_{j=0,\hdots,M-1;\;\mathbf{k}\in
+I_{\mathbf{N}}}$.
+Typically, the matrix $\mathbf{A}$ is not square. Even if this should be the case,
+it is usually neither orthogonal nor has an inverse. Therefore,
+the definition of an inverse NDFT transform is not canonical.
+Instead, it is customary to define the \emph{adjoint NDFT} by
+the matrix-vector product
+\[
+ \mathbf{\hat{h}} = \mathbf{A}^{\adj} \mathbf{f}.
+\]
+This is equivalent to the sums
+\begin{equation}
+ \label{eq:nfftH}
+ \hat{h}_{\mathbf{k}} = \sum_{j=0}^{M-1} \hat{f}_{ j} \eip{\mathbf{k}
+ \mathbf{x}_j} \qquad (\mathbf{k}\in I_{\mathbf{N}}).
+\end{equation}
+
+The NFFT algorithm, implemented in our library, is a fast approximate algorithm
+to compute the sums in \eqref{eq:nfft}. It contains also a fast algorithm to
+compute the adjoint transform \eqref{eq:nfftH}.
+
+%-------------------------------------------------------------------------------
+\subsection{Key features}
+%-------------------------------------------------------------------------------
+A $d$-dimensional DFT of degree $N$ along each dimension has $N^d$
+input and output coefficients. This generally requires $\mathcal{O}(N^{d+1})$
+to compute the transform. FFTs reduce this to $\mathcal{O}(N^{d} \log N)$.
+
+The cost for nonequispaced fast transforms is similar. However, it is important
+to note that there the number of nodes as well as their configuration are arbitrary.
+This generally implies $M \neq |I_{\mathbf{N}}|$.
+The direct calculation of the sums in \eqref{eq:nfft}, an algorithm which we
+also denote NDFT, requires $\cO(M |I_{\mathbf{N}}|)$ floating point operations.
+%and uses no additional scratch memory.
+Since the number of nodes $M$ is typically of order $|I_{\mathbf{N}}|$, this cost
+is considered too expensive for most applications.
+The NFFT~3 library implements a fast approximate algorithm, called
+NFFT, which computes the same result using only
+${\cal O}\left(|I_{\mathbf{N}}| \log |I_{\mathbf{N}}| + |\log \varepsilon|^d
+M\right)$ operations.
+Here, $\varepsilon$ is the desired accuracy of the computation. The
+constant contained in this notation depends on the amount of extra
+memory spent for precomputation; see Appendix \ref{sect:windows}.
+
+Let us briefly compare NDFT/NFFT and classical DFT/FFT to observe some
+key features and differences:
+While a multidimensional DFT/FFT is uniquely defined by the bandwidth
+vector $\mathbf{N}$ alone, i.e., the sampling set $\mathcal{X}$ is fixed,
+the NDFT/NFFT also depend on the actual choice of $\mathcal{X}$;
+see Subsection \ref{subsect.definition}.
+FFT algorithms are usually exact algorithms with small errors in the result
+caused only by limitations of floating point arithmetic.
+The NFFT algorithm purposely introduces a systematic error in the computation
+to achieve its favorable arithmetic cost.
+This additional error can be controlled, and, if deemed necessary, can be
+reduced to the order of machine precision.
+To this end, the NFFT uses an \emph{oversampled} FFT internally (in our case
+we use routines from FFTW) together with a pre- and post-processing step.
+%While the pre-processing step is exact, the post-processing step contains a
+%\emph{truncated} approximation scheme.
+This introduces two additional parameters,
+an \emph{oversampling factor} and a \emph{truncation parameter}, that
+control the accuracy of the NFFT. More details are found in Appendix
+\ref{appendix.nfft}.
+
+%\textbf{Dem ersten Referee folgend, koennten hier mehr Details zum Algorithmus
+%stehen, insbesondere welche zusaetzlichen Parameter der Benutzer jetzt
+%einstellen kann. Gut waeren sicher Verweise auf Stellen weiter hinten, die auf
+%einzelne Punkte genauer eingehen. Ich denke, eine gute Erklaerung der
+%zusaetzlichen Freiheitsgrade und Parameter ist sehr wichtig fuer das
+%Verstaendnis.}
+%For now, it suffices to note that the NFFT algorithm has a similar complexity
+%than the classical FFT algorithm but that it is an approximate algorithm whose
+%accuracy is controlled by the user.
+
+%===============================================================================
+\section{Guidelines for using the library} \label{sect:lib}
+%===============================================================================
+NFFT~3 is a free software library completely written in C.
+The downloadable source code comes as a GNU-style package and follows standard
+conventions. Brief installation instructions and a source tree can be found in
+Appendix \ref{sect:inst}.
+To compile and link programmes that use NFFT~3, you also need the FFTW library
+\cite{fftw} in version 3.0.0 or better.
+
+%-------------------------------------------------------------------------------
+\subsection{Interface} \label{sect:general_proc}
+%-------------------------------------------------------------------------------
+The interface of NFFT~3 resembles that of FFTW 3. A transform is
+specified by creating a \emph{plan} -- a data structure that contains the
+information to determine the characteristics of a transform. In contrast to
+FFTW 3, it is also necessary to call a precomputation routine, once the
+nodes $\cal X$ have been provided. After these initial steps, transforms are
+executed on input data by invoking an execution routine.
+At the end of its lifetime, a plan is finalized and all associated data
+structures are destroyed.
+
+%-------------------------------------------------------------------------------
+\subsection{Typical workflow} \label{sect:general_ex}
+%-------------------------------------------------------------------------------
+This brief example is to illustrate the basic principles. It shows how to
+compute a one-dimensional NFFT.
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Creating a plan}
+%-------------------------------------------------------------------------------
+An NFFT plan \verb"p" is declared by
+\begin{verbatim}
+ nfft_plan p;
+\end{verbatim}
+The simplest way to initialize the plan for a one-dimensional transform is to
+call
+\begin{verbatim}
+ nfft_init_1d(&p,N0,M);
+\end{verbatim}
+The arguments to \verb"nfft_init_1d" are the pointer \verb"&p" to the yet
+uninitialized plan, the number of Fourier
+coefficients \verb"N0", and the number of nodes \verb"M".
+This creates and initializes all data structures inside the
+plan. Memory for Fourier coefficients, nodes, and
+function values is allocated automatically.
+
+%But to completely specify the transform, we also have to provide the
+%nodes.
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Providing the nodes}
+%-------------------------------------------------------------------------------
+The nodes have to be stored in the member array \verb"p.x".
+In one dimension, the coordinate of the $j$th node is a number in
+$[-\tfrac{1}{2},\tfrac{1}{2})$ that is stored at the index $j$, i.e.,\\[2ex]
+%\begin{verbatim}
+\verb" p.x[j] = "\textsl{your choice in [-0.5,0.5)}\verb";"
+%\end{verbatim}
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Precomputation}
+%-------------------------------------------------------------------------------
+The precomputation procedure for the plan is invoked (conditionally) by
+\begin{verbatim}
+ if (p.nfft_flags & PRE_ONE_PSI)
+ nfft_precompute_one_psi(&p);
+\end{verbatim}
+NFFT~3 uses different strategies here which are free of choice by the user via
+passing the appropriate flag to one of the more advanced plan initialization
+routines. A default strategy is chosen by the simple initialization routines.
+For convenience, the flag \verb+PRE_ONE_PSI+ indicates that precomputation
+is necessary; see Appendix \ref{sect:windows} for details.
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Providing the Fourier coefficients}
+%-------------------------------------------------------------------------------
+Fourier coefficients are stored in the one-dimensional member array
+\verb"p.f_hat". In the one-dimensional case this array contains the Fourier
+coefficients in the order $\hat{f}_{-N/2},\hdots,\hat{f}_{N/2-1}$.
+They are accessed by\\[2ex]
+%\begin{verbatim}
+\verb" p.f_hat[k] = "\textsl{your choice in the complex numbers}\verb";"
+%\end{verbatim}
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Execution}
+%-------------------------------------------------------------------------------
+To compute \eqref{eq:nfft} with the NFFT algorithm, invoke
+\begin{verbatim}
+ nfft_trafo(&p);
+\end{verbatim}
+The $M$ output values $f_j$ are stored in the one-dimensional member array
+\verb"p.f". To compute a second NFFT with different input data, simply
+update the Fourier coefficients in \verb"p.f_hat" and invoke \verb"nfft_trafo"
+a second time.
+
+The adjoint transform \eqref{eq:nfftH} is computed by \verb+nfft_adjoint+. Here,
+the input is put in \verb"p.f" and the output is written to \verb"p.f_hat".
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Finalization}
+%-------------------------------------------------------------------------------
+Since the initialization routine for the plan has allocated memory, it is
+essential to finalize the plan, once it is no longer
+needed. This is done by
+\begin{verbatim}
+ nfft_finalize(&p);
+\end{verbatim}
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Example}
+%-------------------------------------------------------------------------------
+Here is a brief example that computes a one-dimensional NFFT with 14
+Fourier coefficients and 19 nodes. The routine is part of the example program
+\verb"simple_test.c" which is found under \verb"examples/nfft/" in the
+software package. It uses some auxilliary routines from the NFFT~3 header
+\verb"util.h" to initialize vectors with random entries and to write them
+to the standard output.
+\begin{verbatim}
+ void simple_test_nfft_1d()
+ {
+ nfft_plan p; int N=14; int M=19;
+ nfft_init_1d(&p,N,M);
+ nfft_vrand_shifted_unit_double(p.x,p.M_total);
+ if(p.nfft_flags & PRE_ONE_PSI) nfft_precompute_one_psi(&p);
+ nfft_vrand_unit_complex(p.f_hat,p.N_total);
+ nfft_vpr_complex(p.f_hat,p.N_total,"given Fourier coefficients, f_hat");
+ ndft_trafo(&p);
+ nfft_vpr_complex(p.f,p.M_total,"ndft, f");
+ nfft_trafo(&p);
+ nfft_vpr_complex(p.f,p.M_total,"nfft, f");
+ nfft_finalize(&p);
+ }
+\end{verbatim}
+
+%-------------------------------------------------------------------------------
+\subsection{Multivariate transforms}
+%-------------------------------------------------------------------------------
+In $d$ dimensions, the nodes $\mathbf{x}_j$ in the sampling set
+$\mathcal{X}$, as well as the frequency indices $\mathbf{k}$ in the set
+$I_{\mathbf{N}}$ are $d$-dimensional vectors. This affects the storage layout of
+the arrays \verb"x" and \verb"f_hat". Generally, both remain
+one-dimensional and all $d$-dimensional quantities are linearized.
+For \verb"x" this means that the $t$th coordinate of the $j$th node
+($t=0,\ldots,d-1$; $j = 0,\ldots,M-1$) is defined via\\[\parskip]
+
+\noindent\verb" p.x[d*j+t] = "\textsl{your choice in [-0.5,0.5)}\verb";"\\[\parskip]
+
+\noindent This linear ordering has been chosen because the node configuration
+may be completely unstructured.
+Analogously, the Fourier coefficient $\hat{f}_{\mathbf{k}}$ is stored in
+\verb"f_hat[k]" at the linearized index \verb"k"$ = \sum_{t=0}^{d-1}
+(k_t+\frac{N_t}{2}) \prod_{t'=t+1}^{d-1} N_{t'}$.
+
+Due to software engineering considerations, we do not offer alternative data
+layouts, even if the nodes belong to a multidimensional structure, e.g. a
+tensor product grid. Moreover, NFFT~3 does currently not offer support for strided
+data or even more general FFTW-style i/o-tensors.
+
+%-------------------------------------------------------------------------------
+\subsection{Programming interface and data structures}
+%-------------------------------------------------------------------------------
+The programming interface for the NFFT module is summarized in
+Table \ref{table:nfft_user_fun}. To allow for a comparison with the NDFT algorithm,
+the routine \verb"ndft_trafo" computes the transform via direct
+evaluation of \eqref{eq:nfft}. The routines \verb"ndft_adjoint"
+and \verb"nfft_adjoint" compute adjoint transforms \eqref{eq:nfftH},
+respectively. The Initialization routines \verb"nfft_init_1d",
+\verb"nfft_init_2d", \verb"nfft_init_3d" allow for convenient initialization
+of plans for one-, two-, and three-dimensional transforms with default
+parameters. Plans for general multivariate transforms are created using
+\verb"nfft_init". For the experienced user, the function \verb"nfft_init_guru"
+allows control over all relevant parameters.
+
+The most important members of the \verb"nfft_plan" data type are listed in Table
+\ref{table:nfft_members}. Only \verb"f_hat", \verb"f", and
+\verb"x" are to be modified by the user.
+
+\begin{acmtable}{0.72\textwidth}
+ \centering%
+ \vspace{1.3ex}%
+ \begin{tabular}{l}
+ \verb"void ndft_trafo(nfft_plan* p)" \\
+ \verb"void ndft_adjoint(nfft_plan* p)" \\
+ \verb"void nfft_trafo(nfft_plan* p)" \\
+ \verb"void nfft_adjoint(nfft_plan* p)" \\
+ \verb"void nfft_init_1d(nfft_plan* p, int N0, int M)" \\
+ \verb"void nfft_init_2d(nfft_plan* p, int N0, int N1, int M)" \\
+ \verb"void nfft_init_3d(nfft_plan* p, int N0, int N1, int N2, int M)" \\
+ \verb"void nfft_init(nfft_plan* p, int d, int* N, int M)" \\
+ \verb"void nfft_init_guru(nfft_plan* p, int d, int* N, int M, int* n," \\
+ \verb" int m, unsigned nfft_flags, unsigned fftw_flags)" \\
+ \verb"void nfft_precompute_one_psi(nfft_plan* p)" \\
+ \verb"void nfft_check(nfft_plan* p)" \\
+ \verb"void nfft_finalize(nfft_plan* p)"
+ \end{tabular}%
+ \vspace{0.5ex}%
+ \caption{Interface to NDFT/NFFT transforms in NFFT~3.}%
+ \label{table:nfft_user_fun}%
+\end{acmtable}
+
+\begin{acmtable}{0.72\textwidth}
+ \centering%
+ \vspace{1.3ex}%
+ \begin{tabular}{r|l|l|l}%
+ Type & Name & Size & Description
+ \\
+ \hline
+ \verb"int" & \verb"d" & 1 & Spatial dimension $d$
+ \\
+ \verb"int*" & \verb"N" & $d$ & Multibandwidth $\mathbf{N}$
+ \\
+ \verb"int" & \verb"N_total" & 1 & Number of coefficients $|I_{\mathbf{N}}|$
+ \\
+ \verb"int" & \verb"M_total" & 1 & Number of nodes $M$
+ \\
+ \verb"double complex*" & \verb"f_hat" & $|I_{\mathbf{N}}|$ & Fourier coefficients $\mathbf{\hat{f}}$ or
+ \\
+ & & & adjoint coefficients $\mathbf{\hat{h}}$
+ \\
+ \verb"double complex*"& \verb"f" & $M$ & Samples $\mathbf{f}$
+ \\
+ \verb"double*" & \verb"x" & $dM$ & Sampling set ${\cal X}$
+ \end{tabular}%
+ \vspace{0.5ex}%
+ \caption{Most important members of the structure \texttt{nfft\_plan}.}
+ \label{table:nfft_members}
+\end{acmtable}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%
+%\pagebreak
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%
+
+%===============================================================================
+\section{Generalizations} \label{sect:gen}
+%===============================================================================
+
+This section surveys further generalizations of the NFFT algorithm that are
+implemented by the NFFT~3 library. The interfaces resemble that of the NFFT
+module described above, with the prefix \verb+nfft_+ replaced by the
+acronym related to the specific transform in all names. Details can be found in
+the API documentation accompanying the library. All algorithms, with exception of
+the discrete polynomial transform, are based on the same computational procedure
+as the NFFT.
+
+%-------------------------------------------------------------------------------
+\subsection{NFST/NFCT - Nonequispaced fast sine/cosine transforms}
+%-------------------------------------------------------------------------------
+Discrete (co)sine transforms (DCT/DST) are closely related real variants of the
+discrete Fourier transform DFT. In the same way, nonequispaced discrete (co)sine
+transforms (NDCT/NDST) are real transforms related to the NDFT. They are
+parameterised by arbitrary nodes $\mathbf{x}_j \in [0,\frac{1}{2}]^d$.
+Frequencies $\mathbf{k}$ are taken from one of the index sets
+\begin{align*}
+ I_{\mathbf{N}}^C &:= \left\{ \mathbf{k}=\left(k_t\right)_{t=0,\hdots,d-1}
+ \in \Z^d: 0 \le k_t < N_t ,\;t=0,\hdots,d-1\right\}, \\
+ I_{\mathbf{N}}^S &:= \left\{ \mathbf{k}=\left(k_t\right)_{t=0,\hdots,d-1} \in
+ \Z^d: 1 \le k_t < N_t ,\;t=0,\hdots,d-1\right\},
+\end{align*}
+where $I_{\mathbf{N}}^C$ corresponds to the NDCT and $I_{\mathbf{N}}^S$ to the
+NDST, respectively. For given real Fourier coefficients
+$\hat f_{\mathbf{k}} \in \R$, NDCT and NDST are defined by
+\begin{equation*}
+ f_j = \sum_{\mathbf{k}\in I_{\mathbf{N}}^C}
+\hat{f}_{\mathbf{k}}
+ \cos(2\pi(\mathbf{k}\odot\mathbf{x}_j))\quad
+ (j=0,\hdots,M-1),
+ \qquad
+ f_j = \sum_{\mathbf{k}\in I_{\mathbf{N}}^S}
+\hat{f}_{\mathbf{k}}
+ \sin(2\pi(\mathbf{k}\odot\mathbf{x}_j)),
+\end{equation*}
+respectively. Here, for notational convenience, we have defined
+$\cos(\mathbf{x}) := \cos(x_0) \cdot \hdots \cdot \cos(x_{d-1})$ and
+$\sin(\mathbf{x}) := \sin(x_0) \cdot \hdots \cdot \sin(x_{d-1})$.
+
+Straightforward algorithms for these transforms need $\cO(M
+|I_{\mathbf{N}}^C|)$ and $\cO(M |I_{\mathbf{N}}^S|)$ arithmetic operations.
+The fast algorithms (NFST/NFCT) need $\cO(|I_{\mathbf{N}}^S| \log
+|I_{\mathbf{N}}^S| + |\log \varepsilon|^d M)$ and $\cO(|I_{\mathbf{N}}^C| \log
+|I_{\mathbf{N}}^C| + |\log \varepsilon|^d M)$ operations, respectively.
+Note that for these real transforms, the adjoint variants coincide with the
+transposed versions. Details about the implemented algorithms can be found in
+\cite{tili00,po01,fepo02}.
+
+%-------------------------------------------------------------------------------
+\subsection{NSFFT - Nonequispaced sparse fast Fourier transform}
+%-------------------------------------------------------------------------------
+In higher dimensions, the so-called ``curse of dimensionality''
+\cite{Zeng91,Spr00,BuZe04} often requires the use of Fourier series where
+frequency indices are restricted to the hyperbolic cross
+\begin{equation*}
+ H_N^d := \bigcup_{\mathbf{N}\in\N^d,\, |I_{\mathbf{N}}| = N} I_{\mathbf{N}},
+ \qquad N=2^{J+2},\;J\in\NZ,
+\end{equation*}
+which has only $\cO(N \log^{d-1} N)$ degrees of freedom compared to
+$\cO(N^d)$ in the plain case. If compared to ordinary Fourier series,
+the approximation error commited, which is typically measured in a norm of
+dominated mixed smoothness, can be shown to get worse by a factor of only
+$\log^{d-1} N$ (see \cite{Spr00}).
+The \emph{nonequispaced sparse discrete Fourier transform (NSDFT)} is defined as
+the evaluation of
+\begin{equation*}
+ f_j = \sum_{\mathbf{k}\in H_N^d}
+ \hat f_{\mathbf{k}} \eim{\mathbf{k} \mathbf{x}_j} \qquad (j=0,\ldots,M-1)
+\end{equation*}
+with given nodes $\mathbf{x}_j\in \T^d$ and Fourier coefficients
+$\hat f_{\mathbf{k}}\in\C$. The algorithms implemented in NFFT~3 reduce the
+number of arithmetic operations from $\cO(M N\log^{d-1}N)$ to
+$\cO(N\log^2 N+|\log \varepsilon|^2 M)$ in two dimensions ($d = 2$), and to
+$\cO(N^{3/2} \log N+ |\log \varepsilon|^3 M)$ in three dimensions ($d = 3$).
+Details are found in \cite{FeKuPo} for details.
+
+%-------------------------------------------------------------------------------
+\subsection{NNFFT - fast Fourier
+transform for nonequispaced data in space and frequency domain}
+%-------------------------------------------------------------------------------
+The NNFFT is a variant of the NFFT where also frequencies are no
+longer equispaced integer multi-indices.
+The transform is defined by
+\begin{equation*}
+ f_j = \sum_{l=0}^{L-1} \hat f_l \eim{\left(\mathbf{v}_l \odot
+ \mathbf{N}\right)\mathbf{x}_j} \qquad (j =0,\hdots,M-1)
+\end{equation*}
+with Fourier coefficients $\hat{f}_l \in\C$, and arbitrary frequencies
+$\mathbf{v}_l \in \T^d$ and nodes $\mathbf{x}_j \in \T^d$.
+Here, $\mathbf{N}\in \N^d$ is called the \emph{nonharmonic
+bandwidth}. This transform is known as \textit{fast Fourier
+transform for nonequispaced data in space and frequency domain (NNFFT)}
+\cite{duro93,elst,postta01} or as \emph{type 3 nonuniform FFT} \cite{LeGr05}
+and takes $\cO(|I_{\mathbf{N}}|\log|I_{\mathbf{N}}| + |\log
+\varepsilon|^d(L+M))$ arithmetic operations to compute.
+
+%------------------------------------------------------------------------------
+\subsection{NFSFT - nonequispaced fast spherical Fourier transform}
+\label{sect:gen:nfsft}
+%------------------------------------------------------------------------------
+Denote by $\S^2:= \big\{\mathbf{x} \in \R^{3}:\;\|\mathbf{x}\|_2=
+1\big\}$ the two-dimensional unit sphere.
+In spherical cordinates, any point on $\S^2$ is identified with a pair of
+angles $(\vartheta,\varphi)^{\top}\in [0,\pi]\times [0,2\pi)$.
+Hence, a sampling set on the sphere can be defined by
+$
+ \mathcal{X}: = \left\{\left(\vartheta_{j},\varphi_{j}\right)
+ %\in \mathbb{S}^2
+ :\,j=0,\hdots,M-1\right\}.
+$
+A convenient basis of orthogonal functions on $\S^2$ are spherical harmonics
+$Y_k^n : \S^2 \rightarrow \C$, $k \in \mathbb{N}_{0}$, $|n| \le k$,
+defined by
+\begin{equation*}
+ Y_k^n(\vartheta,\varphi) := P_k^{|n|}(\cos\vartheta)
+ \, \mathrm{e}^{\mathrm{i} n \varphi}.
+\end{equation*}
+Here, $P_k^{|n|}$ are the associated Legendre
+functions of degree $k$ and order $|n|$ (see \cite[pp. 331]{abst}).
+Frequencies for a finite transform up to bandwidth $N$ are collected in the
+index set
+\[
+J_{N} := \{(k,n)\in\Z^2:\,k=0,\ldots,N;\; n=-k,\ldots,k\}.
+\]
+The \emph{nonequispaced discrete spherical Fourier transform (NDSFT)} is
+defined as the calculation of
+\begin{equation*}
+ f_j = \sum_{(k,n) \in \, J_{N}} \hat{f}_k^n \,
+ Y_k^n\left(\vartheta_{j},\varphi_{j}\right) \qquad (j=0,\ldots,M-1).
+\end{equation*}
+
+The direct method (NDSFT) clearly needs $\cO(M N^2)$ arithmetic operations.
+The approximate $\cO(N^2 \log^2 N + |\log{\varepsilon}|^2M)$ algorithm
+implemented in the NFFT~3 library (\emph{NFSFT}) is a combination of the
+fast polynomial transform (FPT; see next subsection) and the NFFT.
+%, and are given in Algorithms \ref{alg:NFSFT} and
+%\ref{alg:adjointNFSFT}.
+It was introduced in \cite{kupo02} while the adjoint variant was
+developed in \cite{KePo06}. Other algorithms, mostly for particular
+sampling sets, exist (e.g. \cite{drhe,SuTa01,roty}).
+
+%\begin{algorithm}[tb]
+% \caption[NFSFT]{Nonequispaced fast spherical Fourier transform (NFSFT).}
+% \label{alg:NFSFT}
+% \begin{tabbing}
+% Input: \= \kill
+% Input: \> $M, N \in \mathbb{N}$, $\left(\vartheta_{j},
+% \varphi_{j} \right) \in [0,\pi]\times [0,2\pi)$, $j=0,\ldots,M-1$,
+% $\hat{f}_{k}^n \in \mathbb{C}$, $(k,n) \in J_{N}$.
+% \end{tabbing}
+% \begin{algorithmic}[1]
+% \itemsep=1.1ex
+% \STATE For $n=-N,\hdots,N$ convert $\sum_{k=|n|}^N \hat{f}_k^n
+% P_k^{n}(\cos\vartheta_j)$ into $\sum_{k=-N}^N \hat{g}_k^n \, \mathrm{e}^{k
+% \vartheta_{j}}$ by FPTs.
+% \STATE For $j=0,\hdots,M-1$ compute $f_j=\sum_{n=-N}^N\sum_{k=-N}^N
+% \hat{g}_k^n \, \mathrm{e}^{n\varphi_j+k \vartheta_{j}}$ by an NFFT.\\[2ex]
+% \end{algorithmic}
+% Output: Approximated function values $f_j$, $j=0,\ldots,M-1$.\\
+% Complexity: $\mathcal{O}\left(N^2 \log^2 N + M\right)$.
+%\end{algorithm}
+
+%\begin{algorithm}[tb]
+% \caption[Adjoint NFSFT]{Adjoint nonequispaced fast spherical Fourier
+% transform (adjoint NFSFT).}
+% \label{alg:adjointNFSFT}
+% \begin{tabbing}
+% Input: \= \kill
+% Input: \> $M, N \in \mathbb{N}$, $\left(\vartheta_{j},
+% \varphi_{j} \right) \in [0,\pi]\times [0,2\pi)$, $f_j \in\C$,
+% $j=0,\ldots,M-1$.
+% \end{tabbing}
+% \begin{algorithmic}[1]
+% \itemsep=1.1ex
+% \STATE For $k,n = -N,\hdots,N$ compute $\tilde{h}_{k}^n=\sum_{j=0}^{M-1}
+% f_j \mathrm{e}^{n\varphi_j+k \vartheta_{j}}$ by an adjoint NFFT.
+% \STATE
+% For $n=-N,\hdots,N$ convert $\sum_{k=-N}^N \tilde{h}_{k}^n \,
+% \mathrm{e}^{k \vartheta_{j}}$ into $\sum_{k=|n|}^N \hat{h}_k^n
+% P_k^{n}(\cos\vartheta_j)$ by adjoint FPTs.\\[2ex]
+% \end{algorithmic}
+% Output: Approximated coefficients $\hat{h}_{k}^n$, $(k,n) \in J_N$.\\
+% Complexity: $\mathcal{O}\left(N^2 \log^2 N + M\right)$.
+%\end{algorithm}
+
+%-------------------------------------------------------------------------------
+\subsection{FPT - fast polynomial transform} \label{sect:fpt}
+%-------------------------------------------------------------------------------
+A \emph{discrete polynomial transform} (DPT) is a generalization of the DFT
+from complex exponentials $\mathrm{e}^{\mathrm{i} k x}$ to
+systems of algebraic polynomials that satisfy a three-term recurrence;
+see \cite[pp. 773]{abst}.
+More precisely, let $p_{0},p_{1},\hdots:[-1,1]\rightarrow\R$ be a sequence of
+polynomials satisfying the recurrence
+\begin{align}
+ \label{eq.threeterm}
+ p_{k+1}(x) & = (\alpha_{k} x + \beta_{k})p_{k}(x) + \gamma_{k} p_{k-1}(x) &
+ (k \ge 0),
+\end{align}
+where $p_{-1}(x) := 0$, $p_{0}(x) := 1$, and $\alpha_{k} \neq 0$, $k\ge 0$.
+Then every $p_{k}$ is a degree-$k$ polynomial. Typical examples are the
+Legendre polynomials $P_k(x)$ or the Chebyshev polynomials of first
+kind $T_{k}(x) := \cos(k \arccos x)$. Let a finite linear expansion of the form
+\begin{equation*}
+ f(x) = \sum_{k=0}^{N} a_{k} p_{k}(x)
+\end{equation*}
+be given. The DPT in our sense is defined as the
+computation of the coefficients $b_{k}$ in the expansion
+\[
+ f(x) = \sum_{k=0}^N b_{k} T_{k}(x).
+\]
+Implemented directly, this computation takes $\cO(N^2)$ arithmetic operations.
+The \emph{fast polynomial transform (FPT)} is an $\cO(N \log^2 N)$
+algorithm to compute the same result. It is implemented in the
+NFFT~3 library following the approach in \cite{postta98}. This is based on using
+the three-term-recurrence relation \eqref{eq.threeterm} repeatedly, together
+with a fast method for polynomial multiplication in the Chebyshev
+basis, and a cascade-like summation process. More details can be found in
+\cite{drhe,drhero,postta98,po01} and references therein.
+
+%------------------------------------------------------------------------------
+\subsection{Inversion and solver module} \label{sect:general_proc_infft}
+%------------------------------------------------------------------------------
+The NDFT differs from the DFT also in that an inversion formula similar to
+\eqref{eq.idft} generally does not exist; see Section \ref{subsect.definition}.
+A more general view is at order to define what should be an inverse NDFT/NFFT
+transform. This section is devoted to explain our approach for the NFFT. But
+everything also applies to the mentioned NFFT variants.
+
+Inversion of the NDFT means the computation of Fourier coefficients
+$\hat{f}_{\mathbf{k}}$, $\mathbf{k} \in I_{\mathbf{N}}$, from given function
+samples $y_{j}$ at nodes $\mathbf{x}_j$, $j = 0,\ldots,M-1$.
+In matrix-vector notation, this is equivalent to solving the linear system
+\begin{equation}\label{eq:infft}
+ \mathbf{A} \mathbf{\hat{f}} \approx \mathbf{y}.
+\end{equation}
+%for the vector $\mathbf{\hat{f}}\in\C^{|I_{\mathbf{N}}|}$.
+This can be either and overdetermined system if $|I_{\mathbf{N}}| \le
+M$ (this includes the quadratic case) or an underdetermined system
+if $|I_{\mathbf{N}}| > M$.
+Generally, this compels us to look for a pseudo-inverse solution
+$\mathbf{\hat{f}}^{\dagger}$ (see e.g. \cite[p. 15]{Bj96}).
+For this, we also require that the nonequispaced Fourier matrix $\mathbf{A}$
+have full rank. Eigenvalue estimates in \cite{FeGrSt95,BaGr03,KuPo04} indeed assert that this
+condition is satisfied if the sampling set $\cal X$ is uniformly dense or uniformly
+separated with respect to the inverse bandwidth $\mathbf{N}^{-1}$.
+
+For the overdetermined case, we now consider a weighted least squares problem,
+while for the consistent underdetermined case, we look for a solution of an
+interpolation problem. Both can be solved by iterative algorithms using
+NFFT and adjoint NFFT to realize fast matrix-vector multiplications
+involving $\mathbf{A}$ and $\mathbf{A}^{\adj}$, respectively.
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Weighted least squares problem}
+%-------------------------------------------------------------------------------
+If $|I_{\mathbf{N}}|\le M$, the linear system \eqref{eq:infft} is overdetermined
+which typically implies that the given data $y_j\in \C,\;j=0,\hdots,M-1,$ can
+only be approximated up to a residual $\mathbf{r}:=\mathbf{y}-\mathbf{A}
+\mathbf{\hat{f}}$. Therefore, we consider the \emph{weighted least squares problem}
+\begin{equation*}
+\sum_{j=0}^{M-1} w_j |y_j-f(x_j)|^2
+ \stackrel{\mathbf{\hat{f}}}{\rightarrow} \min
+\end{equation*}
+with weights $w_j> 0$, $\mathbf{W}:=\diag(w_j)_{j=0,\hdots,M-1}$. This weights
+might be used to compensate for clusters in the sampling set ${\cal X}$.
+The weighted least squares problem is equivalent to solving
+the \emph{weighted normal equation of first kind},
+$
+\mathbf{A}^{\adj} \mathbf{W} \mathbf{A} \mathbf{\hat{f}} = \mathbf{A}^{\adj}
+\mathbf{W} \mathbf{y}.
+$
+This can be done, e.g., by using the Landweber (or Richardson) iteration,
+the steepest descent method, or the conjugate gradient method for least
+squares problems. The latter method is given in pseudo-code in Algorithm
+\ref{algo:wCGNR(E)} (left). The NFFT~3 library nevertheless implements
+all three algorithms.
+
+\setlength{\columnseprule}{0.5pt}
+
+\begin{algorithm}[tp]
+ \hrule
+ \footnotesize
+ \rule[-1.5ex]{0ex}{5ex}Input: $\mathbf{y} \in \mathbb{C}^M,\, {\mathbf{\hat{f}}}_0 \in
+ \mathbb{C}^{|I_{\mathbf{N}}|}$.
+ \begin{multicols}{2}
+ \begin{algorithmic}%[1]
+ \topsep=1.1ex
+ \itemsep=1.1ex
+ \STATE $\mathbf{r}_0=\mathbf{y} - \mathbf{A} \mathbf{\hat{f}}_0$
+ \STATE $\mathbf{\hat{z}}_0=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_0$
+ \STATE $\mathbf{\hat{p}}_0=\mathbf{\hat{z}}_0$
+ \FOR{$l=0,\hdots$}
+ \topsep=1.1ex
+ \itemsep=1.1ex
+ \STATE $\mathbf{v}_l=\mathbf{A} \mathbf{\hat{W}} \mathbf{\hat{p}}_l$
+ \STATE $\alpha_l=\frac{\mathbf{\hat{z}}_l^{\adj} \mathbf{\hat{W}}
+ \mathbf{\hat{z}}_l} {\mathbf{v}_l^{\adj} \mathbf{W} \mathbf{v}_l}$
+ \STATE $\mathbf{\hat{f}}_{l+1}=\mathbf{\hat{f}}_{l} +
+ \alpha_l \mathbf{\hat{W}} \mathbf{\hat{p}}_l$
+ \STATE $\mathbf{r}_{l+1}=\mathbf{r}_{l}- \alpha_l \mathbf{v}_l$
+ \STATE $\mathbf{\hat{z}}_{l+1}=\mathbf{A}^{\adj} \mathbf{W}
+ \mathbf{r}_{l+1}$
+ \STATE $\beta_l=\frac{\mathbf{\hat{z}}_{l+1}^{\adj}
+ \mathbf{\hat{W}}\mathbf{\hat{z}}_{l+1}}
+ {\mathbf{\hat{z}}_l^{\adj} \mathbf{\hat{W}}\mathbf{\hat{z}}_l}$
+ \STATE $\mathbf{\hat{p}}_{l+1}=\beta_l \mathbf{\hat{p}}_l +
+ \mathbf{\hat{z}}_{l+1}$
+ \ENDFOR
+ \end{algorithmic}
+\columnbreak
+ \begin{algorithmic}
+ \topsep=1.1ex
+ \itemsep=1.1ex
+ \STATE $\mathbf{r}_0=\mathbf{y} - \mathbf{A} \mathbf{\hat{f}}_0$
+ \STATE $\mathbf{\hat{p}}_0=\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_0$
+ \FOR{$l=0,\hdots$}
+ \topsep=1.1ex
+ \itemsep=1.1ex
+ \STATE $\alpha_l=\frac{\mathbf{r}_l^{\adj} \mathbf{W} \mathbf{r}_l}
+ {\mathbf{\hat{p}}_l^{\adj} \mathbf{\hat{W}} \mathbf{\hat{p}}_l}$
+ \STATE $\mathbf{\hat{f}}_{l+1}=\mathbf{\hat{f}}_{l}
+ +\alpha_l \mathbf{\hat{W}} \mathbf{\hat{p}}_l$
+
+ \STATE $\mathbf{r}_{l+1}=\mathbf{r}_{l}- \alpha_l \mathbf{A}
+\mathbf{\hat{W}} \mathbf{\hat{p}}_l$
+
+ \STATE $\beta_l=\frac{\mathbf{r}_{l+1}^{\adj} \mathbf{W}
+\mathbf{r}_{l+1}}
+ {\mathbf{r}_l^{\adj} \mathbf{W} \mathbf{r}_l}$
+
+ \STATE $\mathbf{\hat{p}}_{l+1}=\beta_l \mathbf{\hat{p}}_l +
+\mathbf{A}^{\adj} \mathbf{W} \mathbf{r}_{l+1}$
+ \ENDFOR
+ \end{algorithmic}
+\end{multicols}
+ Output: The $l$th approximation to the solution vector
+ $\mathbf{\hat{f}}_{l}\in\mathbb{C}^{|I_{\mathbf{N}}|}$.\rule[-1.5ex]{0ex}{3ex}
+ \hrule
+ \caption{Variants of the conjugate gradient method for normal equations of first
+ (CGNR = residual minimization; left) and second kind (CGNE = error minimization;
+ right).}
+ \label{algo:wCGNR(E)}
+\end{algorithm}
+
+%-------------------------------------------------------------------------------
+\subsubsection*{Interpolation problem}
+%-------------------------------------------------------------------------------
+If $|I_{\mathbf{N}}|>M$, and if the linear system \eqref{eq:infft} is
+consistent, the data $y_j\in \C,\;j=0,\hdots,M-1,$ can be interpolated exactly.
+But since there exist multiple solutions, we consider the
+\emph{constrained minimization problem}
+\begin{equation*}
+ \label{eq:ip}
+ \sum_{\mathbf{k}\in I_{\mathbf{N}}} \frac{|\hat f_{\mathbf{k}}|^2}{\hat
+ w_{\mathbf{k}}} \stackrel{\mathbf{\hat{f}}}{\rightarrow} \min \quad
+ \text{subject to} \quad \mathbf{A} \mathbf{\hat{f}} = \mathbf{y},
+\end{equation*}
+which incorporates ``damping factors'' $\hat w_{\mathbf{k}}> 0$,
+$\mathbf{\hat{W}}:= \diag(\hat w_{\mathbf{k}})_{\mathbf{k}\in
+I_{\mathbf{N}}}$. A smooth solution, i.e., a solution with rapid decay of
+Fourier coefficients $\hat{f}_{\mathbf{k}}$, is favored if the damping
+factors $\hat{w}_{\mathbf{k}}$ are decreasing themselves.
+The interpolation problem is equivalent to the
+\emph{damped normal equation of second kind}
+$
+ \mathbf{A} \mathbf{\hat{W}} \mathbf{A}^{\adj} \mathbf{\tilde{f}}
+ = \mathbf{y}
+$,
+$\mathbf{\hat{f}} =
+ \mathbf{\hat{W}} \mathbf{A}^{\adj} \mathbf{\tilde{f}}
+$.
+The conjugate gradient method applied to this linear system is given in
+Algorithm \ref{algo:wCGNR(E)} (right). Of course, the NFFT~3 library also
+implements this scheme.
+
+%==============================================================================
+\section{Summary and performance analysis}\label{sect:sum}
+%==============================================================================
+
+This section is to provide a performance analysis of the NFFT algorithm.
+The asymptotic bounds on the number of floating point operations for the
+nonequispaced fast Fourier transform (NFFT) and its variant on the sphere
+(NFSFT) are compared to those for the discrete/fast Fourier transform in
+Table \ref{table:bigO}.
+\begin{acmtable}{0.85\textwidth}
+ \centering%
+ \vspace{1.3ex}%
+ \begin{tabular}{r|cc|cc}
+ & \multicolumn{2}{c|}{\rule[-1.5ex]{0ex}{4.25ex}$M={\mathcal{O}}\left(N^d\right)$, $\cal X$ grid}
+ & \multicolumn{2}{c}{$M$, $\cal X$ arbitrary}
+ \\
+ \hline
+ & DFT & FFT & NDFT & NFFT
+ \\
+ \hline
+ \rule[-1.5ex]{0ex}{4.25ex}%
+ Torus $\T^d$ &
+ ${\mathcal{O}}\left(N^{d+1}\right)$ &
+ ${\mathcal{O}}\left(N^d \log N\right)$ &
+ ${\mathcal{O}}\left(M N^d\right)$ &
+ ${\mathcal{O}}\left(N^d \log N +|\log \varepsilon|^d M\right)$\\
+ \rule[-1.5ex]{0ex}{4.25ex}%
+ Sphere $\S^2$ &
+ ${\mathcal{O}}\left(N^3\right)$ &
+ ${\mathcal{O}}\left(N^2 \log^2 N\right)$ &
+ ${\mathcal{O}}\left(M N^2\right)$ &
+ ${\mathcal{O}}\left(N^2 \log^2 N +|\log \varepsilon|^2 M\right)$
+ \end{tabular}
+ \vspace{0.5ex}%
+ \caption{Asymptotic number of floating point operations with respect to the
+ polynomial degree $N$ (so that $\mathbf{N}=(N,\hdots,N)^{\top}$), the number of nodes
+ $M$, spatial dimension $d$, and target accuracy $\varepsilon$ for different transforms.}
+ \label{table:bigO}
+\end{acmtable}
+The rest of the section is to provide results of actual performance
+measurements for our implementation of the NFFT in spatial
+dimensions $d=1,2,3$. Computation time measurements and a numerical
+confirmation of the error estimates for the window functions
+(\ref{gaussian}-\ref{kaiser}) with respect to the so-called cut-off
+parameter are given.
+
+For our tests, we used a computer system with an AMD
+$\text{Athlon}^{\text{\texttrademark}}$ XP 2700+ processor, 1GB memory,
+SuSE Linux with kernel 2.4.20-4GB-athlon, and the GCC 3.3 compiler.
+All computations were carried out in double precision using the compiler
+option \verb"-O3". For all tests with random input, the nodes
+$\mathbf{x}_j$ and the Fourier coefficients $\hat f_{\mathbf{k}}$ were
+drawn from a uniform pseudo-random distribution in the respective domains,
+i.e., $\mathbf{x}_j \in \mathbb{T}^d$ and
+$\hat f_{\mathbf{k}} \in [0,1] \times [0,1]{\rm i}$. The code for these
+and more examples and applications can be found in the directories
+\verb"examples/" and \verb"applications/" of the NFFT~3 package.
+
+%------------------------------------------------------------------------------
+\subsection{Computation time with respect to problem size}
+%------------------------------------------------------------------------------
+We compared computation times for ordinary FFTs (using FFTW
+3.0.0 \cite{FFTW05,fftw} in double precision with the flag
+\texttt{FFTW\_MEASURE}),
+direct nonequispaced discrete Fourier transforms (NDFTs), and nonequispaced fast
+Fourier transforms (NFFTs) for different problem sizes
+$|I_{\mathbf{N}}|$ in dimensions $d=1,2,3$.
+The multibandwidth $\mathbf{N}$ was chosen to
+$\mathbf{N}=(N,\hdots,N)^{\top},\;N\in 2\N$.
+The nodes for FFTs are fixed and restricted to the lattice $\mathbf{N}^{-1}\odot
+I_{\mathbf{N}}$.
+For NDFTs and NFFTs, we chose $M = N^d$ random nodes and used an oversampling
+factor $\sigma=2$, cut-off parameters $m = 2$ and $m = 4$, and the
+Kaiser-Bessel window function (precomputation flags \verb"PRE_PSI" and
+\verb"PRE_PHI_HUT").
+With these options, the accuracy measured by
+\begin{equation}\label{Einf}
+E_{\infty}:={\max_{0\le
+ j<M}|f_j-s_j|} / {\sum_{\mathbf{k} \in I_{\mathbf{N}}} |\hat
+ f_{\mathbf{k}}|}
+\end{equation}
+is approximately $E_{\infty}\approx 10^{-4}$ ($m=2$) and
+$E_{\infty}\approx 10^{-8}$ ($m=4$) for $d=1,2,3$.
+Here, $s_j$ denotes the NFFT-approximation to $f_j$; see the Appendix for
+details. The corresponding example program can be found under
+\verb"examples/nfft/nfft_times".
+As a byproduct of the measurements shown in Table \ref{tab:TimeSpace_1}, we
+also obtain a performance index measured in million floating point operations
+per second (MFLOPS). We assume that the number of floating point operations are
+\begin{equation*}
+ 5 |I_{\mathbf{N}}|\log_2|I_{\mathbf{N}}|, \quad \text{and} \quad
+ |I_{\mathbf{N}}| + 5\cdot 2^d |I_{\mathbf{N}}|\log(2^d|I_{\mathbf{N}}|) +
+ 4(2m+1)^d |I_{\mathbf{N}}|
+\end{equation*}
+for the FFT and the NFFT ($M = |I_{\mathbf{N}}|$ nodes, oversampling factor
+$\sigma=2$, and precomputation flags \verb"PRE_PSI" and \verb"PRE_PHI_HUT"),
+respectively. More details are given in the Appendix.
+
+\begin{acmtable}{0.85\textwidth}
+ \centering%
+ \vspace{1.3ex}%
+ \begin{tabular}{r|r|r|r|r r|r r}
+ & & & & \multicolumn{2}{|c|}{$m=4$, $E_{\infty} \approx 10^{-8}$} & \multicolumn{2}{|c}{$m=2$, $E_{\infty}\approx 10^{-4}$}
+ \\
+ \hline
+ & \rule[-1.8ex]{0ex}{4.5ex}
+ $l_N$ & FFT & NDFT & NFFT & \parbox[c]{1cm}{\scriptsize\centering penalty\\factor}
+ & NFFT & \parbox[c]{1cm}{\scriptsize\centering penalty\\factor}
+ \\
+ \hline
+ \multirow{20}{*}{$d=1$}
+& \verb"3"& \verb"1.3e-07" & \verb"8.6e-06" & \verb"1.3e-06" & \verb"(10.0)" & \verb"1.1e-06" & \verb"(8.6)"\\
+& \verb"4"& \verb"2.1e-07" & \verb"3.5e-05" & \verb"2.7e-06" & \verb"(12.9)" & \verb"2.2e-06" & \verb"(10.5)"\\
+& \verb"5"& \verb"4.2e-07" & \verb"1.4e-04" & \verb"5.2e-06" & \verb"(12.3)" & \verb"4.2e-06" & \verb"(11.4)"\\
+& \verb"6"& \verb"9.2e-07" & \verb"5.7e-04" & \verb"1.1e-05" & \verb"(11.5)" & \verb"9.1e-06" & \verb"(9.8)"\\
+& \verb"7"& \verb"2.2e-06" & \verb"2.3e-03" & \verb"2.1e-05" & \verb"(9.5)" & \verb"1.9e-05" & \verb"(9.0)"\\
+& \verb"8"& \verb"5.3e-06" & \verb"9.2e-03" & \verb"4.4e-05" & \verb"(8.3)" & \verb"3.9e-05" & \verb"(7.7)"\\
+& \verb"9"& \verb"1.1e-05" & \verb"3.7e-02" & \verb"9.8e-05" & \verb"(8.8)" & \verb"8.3e-05" & \verb"(7.4)"\\
+& \verb"10"& \verb"2.5e-05" & \verb"1.5e-01" & \verb"2.0e-04" & \verb"(8.1)" & \verb"1.8e-04" & \verb"(7.1)"\\
+& \verb"11"& \verb"6.0e-05" & \verb"6.0e-01" & \verb"6.5e-04" & \verb"(10.8)" & \verb"5.4e-04" & \verb"(8.9)"\\
+& \verb"12"& \verb"1.5e-04" & \verb"2.4e+00" & \verb"1.5e-03" & \verb"(9.8)" & \verb"1.4e-03" & \verb"(8.9)"\\
+& \verb"13"& \verb"5.5e-04" & \verb"9.6e+00" & \verb"3.5e-03" & \verb"(6.4)" & \verb"3.3e-03" & \verb"(5.6)"\\
+& \verb"14"& \verb"1.7e-03" & \verb"4.0e+01" & \verb"7.8e-03" & \verb"(4.6)" & \verb"7.1e-03" & \verb"(4.3)"\\
+& \verb"15"& \verb"4.0e-03" & \verb"1.6e+02" & \verb"1.6e-02" & \verb"(4.1)" & \verb"1.5e-02" & \verb"(3.7)"\\
+& \verb"16"& \verb"8.4e-03" & \verb"*" & \verb"3.4e-02" & \verb"(4.1)" & \verb"3.2e-02" & \verb"(3.8)"\\
+& \verb"17"& \verb"2.0e-02" & \verb"*" & \verb"7.5e-02" & \verb"(3.8)" & \verb"7.2e-02" & \verb"(3.6)"\\
+& \verb"18"& \verb"4.6e-02" & \verb"*" & \verb"1.6e-01" & \verb"(3.4)" & \verb"1.5e-01" & \verb"(3.2)"\\
+& \verb"19"& \verb"9.5e-02" & \verb"*" & \verb"3.2e-01" & \verb"(3.4)" & \verb"3.0e-01" & \verb"(3.1)"\\
+& \verb"20"& \verb"2.1e-01" & \verb"*" & \verb"6.9e-01" & \verb"(3.3)" & \verb"6.4e-01" & \verb"(3.3)"\\
+& \verb"21"& \verb"4.3e-01" & \verb"*" & \verb"1.5e+00" & \verb"(3.5)" & \verb"1.4e+00" & \verb"(3.2)"\\
+& \verb"22"& \verb"1.0e+00" & \verb"*" & \verb"3.2e+00" & \verb"(3.1)" & \verb"3.0e+00" & \verb"(2.9)"\\
+ \hline
+% \hline \multicolumn{3}{|l|}{$d=2$} & \multicolumn{2}{|c|}{$m=4$, $E_{\infty}\approx
+% 10^{-8}$} & \multicolumn{2}{|c|}{$m=2$, $E_{\infty}\approx 10^{-4}$} \\
+% \hline $l_N$ & FFT & NDFT & NFFT & (/FFT) & NFFT & (/FFT)\\
+ \multirow{9}{*}{$d=2$}
+& \verb"6"& \verb"9.0e-07" & \verb"6.0e-04" & \verb"6.3e-05" & \verb"(70.4)" & \verb"3.2e-05" & \verb"(33.2)"\\
+& \verb"8"& \verb"4.4e-06" & \verb"9.5e-03" & \verb"2.5e-04" & \verb"(58.0)" & \verb"1.3e-04" & \verb"(29.0)"\\
+& \verb"10"& \verb"2.2e-05" & \verb"1.5e-01" & \verb"1.2e-03" & \verb"(55.0)" & \verb"6.0e-04" & \verb"(27.4)"\\
+& \verb"12"& \verb"1.2e-04" & \verb"2.4e+00" & \verb"6.4e-03" & \verb"(52.5)" & \verb"4.0e-03" & \verb"(32.2)"\\
+& \verb"14"& \verb"1.7e-03" & \verb"4.0e+01" & \verb"4.0e-02" & \verb"(23.4)" & \verb"3.1e-02" & \verb"(18.1)"\\
+& \verb"16"& \verb"2.2e-02" & \verb"*" & \verb"1.7e-01" & \verb"(7.8)" & \verb"1.3e-01" & \verb"(6.1)"\\
+& \verb"18"& \verb"8.7e-02" & \verb"*" & \verb"6.7e-01" & \verb"(7.7)" & \verb"5.0e-01" & \verb"(5.8)"\\
+& \verb"20"& \verb"3.3e-01" & \verb"*" & \verb"3.0e+00" & \verb"(9.1)" & \verb"2.1e+00" & \verb"(6.4)"\\
+& \verb"22"& \verb"1.4e+00" & \verb"*" & \verb"1.4e+01" & \verb"(10.1)" & \verb"1.1e+01" & \verb"(7.9)"\\
+ \hline
+ % \hline \multicolumn{3}{|l|}{$d=3$} & \multicolumn{2}{|c|}{$m=4$, $E_{\infty}\approx
+ % 10^{-8}$} & \multicolumn{2}{|c|}{$m=2$, $E_{\infty}\approx 10^{-4}$} \\
+ % \hline $l_N$ & FFT & NDFT & NFFT & (/FFT) & NFFT & (/FFT)\\
+ \multirow{5}{*}{$d=3$}
+& \verb"9"& \verb"1.0e-05" & \verb"3.8e-02" & \verb"4.4e-03" & \verb"(423.4)" & \verb"1.1e-03" & \verb"(109.5)"\\
+& \verb"12"& \verb"1.1e-04" & \verb"2.4e+00" & \verb"4.2e-02" & \verb"(369.1)" & \verb"1.4e-02" & \verb"(115.8)"\\
+& \verb"15"& \verb"3.5e-03" & \verb"1.6e+02" & \verb"3.9e-01" & \verb"(110.8)" & \verb"1.5e-01" & \verb"(41.8)"\\
+& \verb"18"& \verb"3.9e-02" & \verb"*" & \verb"3.9e+00" & \verb"(99.3)" & \verb"1.7e+00" & \verb"(42.4)"\\
+& \verb"21"& \verb"9.4e-01" & \verb"*" & \verb"8.4e+01" & \verb"(89.0)" & \verb"1.8e+01" & \verb"(19.6)"\\
+ \end{tabular}
+ \vspace{0.5ex}%
+ \caption{Computation times in seconds with respect to the problem size $l_N=\log_2|I_{\mathbf{N}}|$.
+ Numbers in parentheses give the penalty factor, i.e., the quotient of computation times
+ for NFFT and FFT.
+ Times for small $l_N$ have been averaged over a series of transforms. An
+ asterisk (\texttt{*}) indicates values not calculated due to excessive computation
+ time.}
+ \label{tab:TimeSpace_1}
+\end{acmtable}
+
+Some conclusions can be drawn from Table \ref{tab:TimeSpace_1}:
+Both, FFT and NFFT, require a computation time of order
+$\cO(|I_{\mathbf{N}}|\log|I_{\mathbf{N}}|)$ as expected.
+Doubling $|I_{\mathbf{N}}|$ indeed results in only slightly more
+than twice the computation time. The NDFT also scales as the expected
+$\cO(|I_{\mathbf{N}}|^2)$.
+For FFT and NDFT, the constant in the $\cO$-notation is independent of the
+space dimension $d$, whereas the computation time of the NFFT increases
+considerably with $d$ fixing $|I_{\mathbf{N}}|$.
+Moreover, Figure \ref{fig:flops} shows a relative performance gain of the FFT
+for small and moderate sized problems.
+In contrast, the overhead contained in the approximation scheme of the NFFT algorithm
+seems to attenuate this effect for the NFFT.
+
+\goodbreak
+
+%-------------------------------------------------------------------------------
+\subsection{Accuracy}
+%-------------------------------------------------------------------------------
+The actual choice of the window function and the cut-off parameter $m$ (cf.
+Appendix) have direct influence on the accuracy achieved by the NFFT algorithm.
+To confirm this, we compare values $f_j$ in \eqref{eq:nfft} computed by the
+NDFT with approximations $s_{j}$ computed using an NFFT with different
+choices of the window function and the cut-off parameter $m$.
+The error is measure is again \eqref{Einf}.
+Figure \ref{fig:accuracy} shows results for $1$, $2$, and $3$-dimensional
+transforms with equal total numbers of Fourier coefficients $|I_{\mathbf{N}}|$.
+
+\begin{figure}[tp]
+ \centering
+ \includegraphics[width=0.9\textwidth]{images/nfft_times_flops}
+ \caption{Performance measured in MFLOPS achieved by the NFFT~3 library
+ with respect to the logarithm of the total problem size $l_N=\log_2|I_{\mathbf{N}}|$.
+ Shown are results for $d=1$ (solid), $d=2$ (dotted), and $d=3$ (dashed).
+ The tested algorithms are the FFT ($\circ$), the NFFT with $m=4$ ($\times$),
+ and the NFFT with $m=2$ ($+$).}
+ \label{fig:flops}
+\end{figure}
+
+\begin{figure}[tp]
+ \subfigure[$d = 1$, $N =
+2^{12}$.]{\includegraphics[width=0.3\textwidth]{images/accuracy4}}
+ \hfill
+ \subfigure[$d = 2$, $N =
+2^{6}$.]{\includegraphics[width=0.3\textwidth]{images/accuracy5}}
+ \hfill
+ \subfigure[$d = 3$, $N =
+2^{4}$.]{\includegraphics[width=0.3\textwidth]{images/accuracy6}}
+ \caption{Error $E_{\infty}$ for increasing cut-off parameter $m=0,\hdots,14$ and
+ $d=1,2,3$. In each case, the degree $N$ was chosen to be equal
+ along each dimension such that $|I_{\mathbf{N}}| = 2^{12}$. We fixed
+ $\sigma = 2$ (cf. Appendix) and $M = 10000$. Shown are results for
+ the Kaiser Bessel ($\circ$), the Sinc ($\times$), the B-spline ($+$), and
+ the Gaussian window function ($\triangle$). \label{fig:accuracy}}
+ \end{figure}
+
+%==============================================================================
+\section{Applications}\label{sect:exap}
+%==============================================================================
+
+The rest of this tutorial is devoted to illustrating the usage of the NFFT~3
+library for more advanced applications.
+We start with two small problems from scattered data approximation which
+use the solver module and the NFFT and NFSFT routines.
+Then we briefly sketch some more important applications - fast
+summation schemes and medical imaging.
+These and more examples and applications can be found in the directories
+\verb"examples/" and \verb"applications/" of the package.
+
+
+%-------------------------------------------------------------------------------
+\subsection{Scattered data approximation - computing an inverse
+transform}\label{sect:rec_example}
+%-------------------------------------------------------------------------------
+
+Our first example demonstrates the reconstruction of the surface of a glacier
+from data available on level sets. %\cite{Franke.Daten}
+This is done by solving a damped optimal interpolation problem.
+Figure \ref{fig:glacier} shows the result using
+the $M = 8345$ available data points and bandwidths $N_0 = N_1 = 256$ for
+the two dimensions after $40$ iterations of the CGNE method.
+The corresponding example program \verb+glacier+ can be found in
+\verb+examples/solver/+. There is also a simple test program called
+\verb"simple_test" to illustrate basic principles.
+\begin{figure}[tp]
+ \centering
+ \subfigure[Surface plot.]{\includegraphics[width=0.45\textwidth]{images/glacier1}}
+ \hfill
+ \subfigure[Contour plot.]{\includegraphics[width=0.45\textwidth]{images/glacier2}}
+ \caption{Reconstruction of the glacier from data on level sets at $M=8345$%, cf.
+%\cite[\texttt{vol87.dat}]{Franke.Daten},
+with $N_0=N_1=256$ after $40$ iterations. \label{fig:glacier}}
+\end{figure}
+
+The second example uses a map from the NASA AMSU mission \cite{NASA_AIRS}
+containing global atmospheric temperature data of the earth from 5 November 2006.
+The map contains empty strips not covered by the trajectory of the satellite
+used to take the measurements. To fill these gaps, we solve a weighted linear least
+squares problem to obtain a spherical harmonics
+approximation of degree $N = 128$ to the given data (see \cite{KeKuPo06b}).
+We then use the values of the approximation to fill the gaps. Figure
+\ref{fig:temperature} shows the original data and the map with the gaps filled.
+
+\begin{figure}[tp]
+ \centering
+ \subfigure[Given data.]
+ {\includegraphics[width=0.45\textwidth]{images/temperaturemap_gaps} } \hfill
+ \subfigure[Approximation.]
+ {\includegraphics[width=0.45\textwidth]{images/temperaturemap_filled}}
+ \caption{Original atmospheric temperature data in Kelvin (a) and the same
+ data with values filled in from the least squares approximation at degree
+ $N = 128$.\label{fig:temperature}}
+\end{figure}
+
+The following subsections are devoted to the demonstration of further important
+applications of NFFT~3 routines. The source code is available in
+the directory \verb"applications/" in the package.
+
+%-------------------------------------------------------------------------------
+\subsection{Fast summation}
+%-------------------------------------------------------------------------------
+An important task in many applications is to efficiently evaluate a linear
+combinations of radial functions, i.e.,
+\begin{align*}
+ g\left(\mathbf{y}_j\right) & := \sum_{l=0}^{L-1} \alpha_l
+K\left(\left\|\mathbf{y}_j-
+ \mathbf{x}_l\right\|_2\right) & (j=0,\ldots,M-1)
+\end{align*}
+with source and target nodes $\mathbf{x}_l, \mathbf{y}_j \in \R^d$,
+and real coefficients $\alpha_l \in \R$.
+
+For kernels $K$ with a certain smoothness, e.g. the Gaussian
+$K(x)=\e^{-x^2/c^2}$, the multiquadric $K(x)=\sqrt{x^2+c^2}$, or the inverse
+multiquadric $K(x)=1/\sqrt{x^2+c^2}$, all with a parameter $c>0$,
+our algorithm requires $\cO(L+M)$ arithmetic operations instead of
+$\mathcal{O}(LM)$ via direct calculation.
+For singular kernels $K$, e.g.
+\begin{equation*}
+ \frac{1}{x^2},\; \frac{1}{|x|}, \; \log |x|, \;
+ x^2 \log |x|, \; \frac{1}{x}, \;
+ \frac{\sin(c x)}{x},\; \frac{\cos(c x)}{x}, \; \cot(cx)
+\end{equation*}
+it is imperative to apply an additional regularization procedure. The cost then
+becomes $\cO(L \log L +M)$ or $\cO(M\log M + L)$ provided that
+either the source nodes $\mathbf{x}_l$ or the target nodes $\mathbf{y}_j$ are
+uniformly distributed to a reasonable degree.
+This fast method, which was proposed in \cite{post02,postni04,FeSt03},
+generalizes the diagonalization of convolution matrices by Fourier matrices to
+settings with arbitrary nodes.
+Also, our method yields nearly the same cost as the FMM \cite{beatgreen97}
+while allowing for an easy exchange of the kernel $K$.
+A recent application in particle simulation is given in \cite{popori05}.
+The directory \texttt{applications/fastsum} contains C and {\sc MatLab} programs
+showing how to use the fast summation method.
+
+%-------------------------------------------------------------------------------
+%\subsection{Fast Gauss transform}
+%-------------------------------------------------------------------------------
+As a special case, let us consider the fast Gauss transform. This is the calculation of sums of the form
+\begin{align*}
+ g\left(y_j\right) & :=\sum_{l=0}^{L-1} \alpha_l {\rm e}^{-\sigma|y_j-x_l|^2} &
+ (j=0,\ldots,M-1)
+\end{align*}
+for source and target nodes $x_l,y_{j}\in[-\frac{1}{4},\frac{1}{4}]$,
+complex coefficients $\alpha_l \in \C$, and a complex parameter
+$\sigma =a +{\rm i} b$, $a>0$, $b\in\R$ with $\mathcal{O}(L + M)$ operations.
+For details see \cite{AnBe04,KuPoSt06}.
+Numerical examples found in \cite{KuPoSt06} can be reproduced with the programs
+found in the directory \texttt{applications/fastgauss}.
+
+%-------------------------------------------------------------------------------
+%\subsection{Summation of zonal functions on the sphere}
+%-------------------------------------------------------------------------------
+On the sphere $\mathbb{S}^2$, the equivalent of radial functions are \emph{zonal
+functions}. Fast summation of zonal functions on the sphere is the computation
+of
+sums of the form
+\begin{equation*}
+ g\left(\mathbf{\xi}_j\right) := \sum_{l = 0}^{L-1} \alpha_l K\left(\mathbf{\eta}_l
+ \cdot \mathbf{\xi}_j\right) \qquad (j=0,\ldots,M-1)
+\end{equation*}
+for source and target nodes $\mathbf{\eta}_l,\mathbf{\xi}_j \in \S^2$, and real
+coefficients $\alpha_l \in \R$ with $\cO(L+M)$ operations.
+Our algorithm is based on the nonequispaced fast spherical Fourier
+transform. It and can be easily adapted to different kernels $K$, e.g. the
+Poisson kernel, smooth locally supported kernels, or the spherical Gaussian
+kernel. For details see \cite{KeKuPo06}. Numerical examples
+are found under \verb+applications/fastsumS2/+.
+
+
+%-------------------------------------------------------------------------------
+\subsection{Applications in medical imaging}
+%-------------------------------------------------------------------------------
+%-------------------------------------------------------------------------------
+%\subsection{Iterative reconstruction in magnetic resonance imaging}
+%-------------------------------------------------------------------------------
+In magnetic resonance imaging (MRI), raw data is measured in \emph{k-space}, the
+domain of spatial frequencies. Methods that use non-Cartesian sampling grids
+in k-space, e.g. a spiral, have received increasing attention recently.
+Reconstruction is usually done by resampling the data onto a Cartesian
+grid to use the standard FFT. This is often called \emph{gridding}.
+A so-called inverse model is based on an implicit discretization and both
+methods can be implemented efficiently using the NFFT and the inverse NFFT,
+respectively (see \cite{KnKuPo} and references therein).
+Furthermore, approaches to field inhomogeneity correction have been proposed
+in \cite{SuNoFe03,EgKnPo06}.
+Numerical tests are found in \verb+applications/mri/+.
+
+%-------------------------------------------------------------------------------
+%\subsection{Radon transform, computer tomography, and ridgelet transform}
+%-------------------------------------------------------------------------------
+In computerized tomography (CT) an $N \times N$ (medical) image is to be
+reconstructed from its Radon transform.
+The standard reconstruction algorithm, the filtered backprojection, yields
+reasonably good images at the expense of $\cO( N^3 )$ arithmetic operations.
+Fourier reconstruction methods reduce the number of arithmetic operations to
+${\cal O}( N^2 \log N )$.
+Unfortunately, straightforward Fourier reconstruction algorithms suffer
+from unacceptable artifacts making them useless in practice. Better quality of
+the reconstructed images can be achieved by our algorithm which is based on
+NFFTs. For details see \cite{PoSt01IMA,PoSt00SPIE,PoSt02JFAA} and references
+therein, for examples we refer to \verb+applications/radon/+.
+
+Another application of the discrete Radon transform is the \emph{discrete
+ridgelet transform}, see e.g. \cite{CaDeDoYi} and the references therein.
+A simple test program for denoising images by applying hard thresholding to
+ridgelet coefficients \cite{FeMa05} can be found in \texttt{applications/radon}.
+It uses the NFFT-based discrete Radon transform and the translation-invariant
+discrete Wavelet transform from the \textsc{MatLab} toolbox WaveLab850
+\cite{WaveLab}.
+
+%-------------------------------------------------------------------------------
+%\subsection{Computation of the polar FFT}
+%-------------------------------------------------------------------------------
+Our last example to be mentioned here is the \emph{polar FFT}, which is a special case
+of the NFFT for a particular set of nodes.
+Of course, the polar as well as a so-called pseudo-polar FFT can be calculated
+efficiently accurately with the NFFT.
+Furthermore, the reconstruction of a $2d$ signal from its Fourier transform
+samples on a (pseudo-)polar grid by means of the inverse nonequispaced FFT is
+possible under certain density assumptions.
+For details see \cite{AvCoDoElIs,FeKuPo06,BeKuMo07}. Numerical tests can be
+found in the directory \verb+applications/polarFFT/+.
+
+\appendix
+\section*{APPENDIX}
+
+%-------------------------------------------------------------------------------
+\section{Installation} \label{sect:inst}
+%-------------------------------------------------------------------------------
+
+The installation of the NFFT~3 software library follows the usual GNU
+principles.
+Download the most recent version from
+\verb"http://www.tu-chemnitz.de/~potts/nfft".
+We assume that you use a \verb"bash" compatible shell. Uncompress the archive
+and
+change to the newly created directory:
+\begin{verbatim}
+ tar xfvz nfft3.x.x.tar.gz
+ cd nfft3.x.x
+\end{verbatim}
+%Before you compile and install the library, you might want to adjust the
+%environment variables \verb"CPPFLAGS" and \verb"LDFLAGS" so that NFFT~3 can find
+%the FFTW library if it has been installed in a non-standard location and/or if
+%the NFFT~3 library shall be compiled with specific compiler flags. Leave this
+%step
+%out, if you are unsure what to do. Return to this step if the configure script,
+%the compiler or the linker complain about missing files or libraries. Here is
+%an example that adds the compiler flag \verb"-O3" for optimisations and
+%adds a path to include files and libraries in a non-standard location:
+%\begin{itemize}
+% \itemsep-1ex
+% \item
+% \verb+export CPPFLAGS="$(CPPFLAGS) -O3 -I/path/to/include/files"+
+% \item \verb+export LDFLAGS="$(LDFLAGS) -L/path/to/libraries"+
+%\end{itemize}
+Figure \ref{nfft:fig:svn} gives an overview over the directory structure of
+the NFFT~3 package.
+\begin{figure}[tp]%tb!]
+ \centering
+ \input{tree}
+ \caption{Directory structure of the NFFT~3 package.
+ \label{nfft:fig:svn}}
+\end{figure}
+The package is now ready to be configured. To this end, run the configure script
+\verb"configure" which will adapt the build process to your computer system.
+After that, compile the library by invoking the \verb"make" utility:
+\begin{verbatim}
+ ./configure
+ make
+\end{verbatim}
+When the build process has finished, you can run \verb"make install" to install the
+library permanently on your system.
+%If for example \verb"/usr" is your default installation directory,
+%\verb"make install"
+%will copy the NFFT~3 library to \verb+/usr/lib+, the C header files to
+%\verb+/usr/include/nfft+ and the documentation together with all examples and
+%applications to \verb+/usr/share/nfft+.
+
+For more information about options offered by the \verb"configure" script,
+run the script with the option \verb+--help+. For example, to change the
+installation location you can use the \verb"--prefix".
+Here is a short list of some important options:
+By default, NFFT~3 uses the Kaiser-Bessel window function
+(see Appendix \ref{appendix.nfft}). This can be changed
+by passing the option \verb"--with-window=ARG",
+where \verb"ARG" is replaced by one of \verb"kaiserbessel" (Kaiser-Bessel),
+\verb"gaussian" (Gaussian), \verb"bspline" (B-spline), or
+\verb"sinc" (sinc power). This makes all routines use the
+respective window function.
+NFFT~3 routines can also be configured to measure the computation time for
+several steps during execution. You can enable this behavior with
+the options
+\verb"--enable-measure-time" and/or \verb"--enable-measure-time-fftw".
+
+%-------------------------------------------------------------------------------
+\section{NFFT - nonequispaced fast Fourier transform}
+\label{appendix.nfft}
+%-------------------------------------------------------------------------------
+In this section, we describe the approximate NFFT algorithm in more detail.
+To illustrate the principles, we restrict ourselves to the one-dimensional
+case, hence the computation of
+\begin{align}
+ \label{trigPoly1d}
+ f\left(x\right) & = \sum_{k\in I_{N}} \hat{f}_k \eim{k x} &
+ (j=0,\hdots,M-1)
+\end{align}
+for nonequispaced nodes $x_j \in \T$.
+In this case, the NFFT has cost
+${\cal O}\left(N \log N + |\log \varepsilon|
+M\right)$, where $\varepsilon$ is the desired accuracy.
+The chief idea of the NFFT algorithm is to use standard FFTs in combination with
+an approximation scheme that is based on a window function $\varphi$. This function needs to
+be mutually well localized in time/spatial and frequency domain.
+%$\mathbb{R}$ and at the same time also in the frequency domain $\mathbb{R}$.
+Several such window functions have been proposed in
+\cite{duro93,bey95,st97,Fou02,fesu02}.
+
+\subsection*{The ansatz}
+The first step is to approximate the trigonometric polynomial $f$ of degree
+$N$ in \eqref{trigPoly1d} by a linear combination $s_{1}$ of shifted
+one-periodic window functions $\tilde \varphi$,
+\begin{equation}\label{s1}
+ s_1\left(x\right) := \sum_{l \in I_n} g_{l} \; \tilde \varphi\left(x -
+ \frac{l}{n}\right) \,,
+\end{equation}
+where $n:=\sigma N$ for some oversampling factor $\sigma >1$. The value of $n$ determines the
+length of the ordinary FFT used below.
+
+\subsection*{The window function}
+The window function $\varphi:\R\rightarrow\R$ is chosen so that
+the one-periodic version
+$
+ \tilde \varphi\left(x\right):=\sum_{r \in \Z} \varphi\left(x+r\right)
+$
+has a uniformly convergent Fourier series
+$
+ \tilde \varphi\left(x\right)=
+ \sum_{k\in \Z} c_k\left(\tilde\varphi\right) \eim{k x},
+$
+and at the same time is well localized in the time/spatial domain $\T$
+and in the frequency domain $\mathbb{Z}$.
+The Fourier coefficients $c_k\left( \tilde \varphi \right)$ of this one-periodic version are samples
+of the Fourier transform $\hat \varphi$ of the original window function at integers
+points, i.e.,
+\begin{align*}
+ c_k\left( \tilde \varphi \right)
+ & :=\int\limits_{\T} \tilde \varphi \left(x\right) \eip{k x} \, {\rm d} x
+ = \int\limits_{\mathbb{R}} \varphi \left(x\right) \eip{k x} \, {\rm d} x
+ =: \hat \varphi \left(k\right) & (k\in\Z).
+\end{align*}
+An example is shown in Figure \ref{fig:window_fun}.
+\begin{figure}[tp]
+ \centering
+ \subfigure[Window function.]{
+ \includegraphics[width=4.8cm,height=3.8cm]{images/window_fct1}}
+ \qquad
+ %\includegraphics[width=4.8cm,height=3.8cm]{images/window_fct2} &
+ \subfigure[Fourier transform.]{
+ \includegraphics[width=4.8cm,height=3.8cm]{images/window_fct3}}
+ \caption{Example for a suitable window function, in this case the
+ Gaussian window function $\varphi$ (left)
+ %its one-periodic version $\tilde \varphi$ (center),
+ and the sampled integral Fourier-transform $\hat \varphi$ (right) with
+ pass, transition, and stop band for $N=24,\,\sigma=\frac{4}{3},\,n=32$.}
+ \label{fig:window_fun}
+ \end{figure}
+
+\subsection*{The first approximation - cut-off in frequency domain}
+If we take the definition in \eqref{s1} and switch to the frequency domain, we obtain
+\begin{equation*}
+ s_1\left(x\right)
+ =\sum_{k \in I_n} \hat g_k \, c_k\left(\tilde \varphi\right) \, \eim{k x}
+ +\sum_{r \in \Z \backslash \left\{0\right\}} \sum_{k \in I_n} \hat g_k \,
+ c_{k + n r} \left(\tilde \varphi\right) \, \eim{(k + n r)x }
+\end{equation*}
+with discrete Fourier coefficients
+\begin{equation} \label{coeff}
+ \hat g_k = \sum_{l \in I_n} g_l \, \eip{\frac{k l}{n}}.
+\end{equation}
+A comparison of \eqref{trigPoly1d} and \eqref{s1} suggests to
+define
+\begin{equation} \label{coeff2}
+ \hat g_k :=
+ \begin{cases}
+ \frac{\hat f_k}{c_k \left(\tilde \varphi\right)} & \text{for $k \in I_N$},
+ \\[1ex]
+ 0 & \text{for $k \in I_n \backslash I_N$},
+ \end{cases}
+\end{equation}
+assuming that $c_k\left(\tilde\varphi\right)$ is small for $|k| \ge n-\frac{N}{2}$.
+The values $g_l$ can now be computed by applying the Fourier inversion theorem
+to \eqref{coeff}. This step can be realized by an FFT of length $n$.
+This first approximation causes an aliasing error.
+
+\subsection*{The second approximation - cut-off in time/spatial domain}
+If the window function $\varphi$ is well localized in time/spatial domain then it can be
+approximated by a truncated version
+\begin{equation*}
+ \psi\left(x\right):=\varphi\left(x\right) \chi_{[-{\frac{m}{n}},
+ {\frac{m}{n}}]}\left(x\right),
+\end{equation*}
+with ${\rm supp} \, \psi = \left[-{\frac{m}{n}},{\frac{m}{n}}\right], \;m \ll
+n,\; m\in \N$.
+Here too, we can define a one periodic version $\tilde \psi$ with compact support
+in $\T$ by
+$
+ \tilde \psi\left(x\right)=\sum_{r \in \Z} \psi\left(x+r\right).
+$
+With the help of the index set
+$
+ I_{n,m} \left(x_j\right) := \left\{ l \in I_n : n x_j - m \le l \le n x_j +
+ m \right\}
+$
+a further approximation to the first approximation $s_1$ at the nodes $x_{j}$ can be defined by
+\begin{equation} \label{approx}
+ s\left(x_j\right) :=
+ \sum_{l \in I_{n,m}\left(x_j\right) } g_l \,
+ \tilde\varphi\left(x_j - {\frac{l}{n}}\right) =
+ \sum_{l \in I_n } g_l \,
+ \tilde\psi\left(x_j - {\frac{l}{n}}\right) \, .
+\end{equation}
+Note, that for fixed $x_j\in \T$, the above sum contains at most
+$(2m+1)$ nonzero summands.
+This second approximation causes a truncation error.
+
+\subsection*{The case $d>1$}
+The described approximation method can be generalized to arbitrary dimensions.
+But first, a few generalizations have to be introduced.
+A multivariate window function is now defined by
+$\varphi\left(\mathbf{x}\right):=\prod_{t=0}^{d-1} \varphi_t\left(x_t\right)$
+with a univariate window function $\varphi_t$.
+A simple consequence is that the Fourier coefficients have the form $c_{\mathbf{k}}\left(\tilde \varphi\right) =
+\prod_{t=0}^{d-1} c_{k_t}\left(\tilde \varphi_t\right)$.
+The ansatz function $s_{1}$ reads now
+\begin{equation*}
+ s_1\left(\mathbf{x}\right) := \sum_{\mathbf{l} \in I_{\mathbf{n}}}
+ g_{\mathbf{l}} \; \tilde
+ \varphi\left(\mathbf{x} - \mathbf{n}^{-1}\odot\mathbf{l}\right).
+\end{equation*}
+The size of the FFT size is determined to $\mathbf{n}:=\mathbf{\sigma} \odot
+\mathbf{N}$, and the oversampling factor is
+$\mathbf{\sigma}=\left(\sigma_0,\hdots,\sigma_{d-1}\right)^{\top}$.
+Following \eqref{coeff2} we define
+\begin{equation*}
+ \hat g_{\mathbf{k}} := \left\{
+ \begin{array}{ll}
+ \frac{\hat f_{\mathbf{k}}}{c_{\mathbf{k}} \left(\tilde \varphi\right)}
+ & \text{for
+ } \mathbf{k} \in I_{\mathbf{N}} , \\[1ex]
+ 0 & \text{for } \mathbf{k} \in I_{\mathbf{n}} \backslash I_{\mathbf{N}}.
+ \\
+ \end{array}
+ \right.
+\end{equation*}
+The values $g_{\mathbf{l}}$ are obtained by a (multivariate) FFT of size
+$n_0\times n_1 \times \hdots \times n_{d-1}$.
+Using the compactly supported function $\psi\left(\mathbf{x}\right)=\varphi
+\left(\mathbf{x}\right)\chi_{[-{\frac{m}{n}},{\frac{m}{n}}]^d} \left(\mathbf{x}
+\right)$ gives the final form,
+\begin{equation*}
+ s\left(\mathbf{x}_j\right) := \sum_{\mathbf{l} \in I_{\mathbf{n},m}
+ \left(\mathbf{x}_j\right) }
+ g_{\mathbf{l}} \, \tilde\varphi\left(\mathbf{x}_j - \mathbf{n}^{-1}\odot
+ \mathbf{l}\right) =
+\sum_{\mathbf{l} \in I_{\mathbf{n}} }
+g_{\mathbf{l}} \, \tilde\psi\left(\mathbf{x}_j - \mathbf{n}^{-1}\odot
+ \mathbf{l}\right)\,.
+\end{equation*}
+Again, $\tilde \psi$ denotes the one-periodic version of $\psi$.
+Note that the multi-index set
+$
+ I_{\mathbf{n},m} \left(\mathbf{x}_j\right) := \left\{ \mathbf{l} \in
+ I_{\mathbf{n}} : \mathbf{n}
+ \odot \mathbf{x}_j - m \mathbf{1} \le \mathbf{l} \le \mathbf{n} \odot
+ \mathbf{x}_j + m
+ \mathbf{1}\right\}
+$
+has at most $(2m+1)^d$ entries for every $\mathbf{x}_j$.
+
+\subsection*{The final algorithm}
+The NFFT algorithm is given in pseudo-code in Algorithm~\ref{algo:nfft}. In
+addition to the evaluation of the window functions, it requires roughly
+$|I_{\mathbf{N}}|+|I_{\mathbf{n}}| \log |I_{\mathbf{n}}| + 2(2m+1)^d M$
+floating point operations.
+In matrix-vector notation, Algorithm~\ref{algo:nfft} can be written as
+$
+ \mathbf{A} \mathbf{\hat{f}} \approx \mathbf{D} \mathbf{F} \mathbf{B}
+ \mathbf{\hat{f}},
+$
+where $\mathbf{B}$ denotes the sparse real $M \times
+\left|I_{\mathbf{n}}\right|$
+matrix
+\begin{equation*} \label{spB}
+ \mathbf{B} := \left( \tilde\psi\left(\mathbf{x}_j - \mathbf{n}^{-1}\odot
+ \mathbf{l}\right)
+ \right)_{j=0,\hdots,M-1;\, \mathbf{l}\in I_{\mathbf{n}}}.
+\end{equation*}
+The matrix
+$\mathbf{F}:=(\eim{\mathbf{k}(\mathbf{N^{-1}}\odot\mathbf{j})})_{\mathbf{j},
+ \mathbf{k}\in I_{\mathbf{n}}}$ is the ordinary Fourier matrix of size
+$\left|I_{\mathbf{n}}
+\right| \times
+\left|I_{\mathbf{n}}\right|$ and $\mathbf{D}$ is a real $\left|I_{\mathbf{n}}
+\right|
+\times |I_{\mathbf{N}}|$ ``diagonal'' matrix defined by
+\begin{equation*}
+ \mathbf{D} := \bigotimes_{t=0}^{d-1} \left(\mathbf{O}_t \, | \, \mbox{diag}
+ \left(1/\,
+ c_{k_t}\left(\tilde \varphi_t\right)\right)_{k_t\in I_{N_t}} \, | \,
+ \mathbf{O}_t \right)^{\top}
+\end{equation*}
+with zero matrices $\mathbf{O}_t$ of size $N_t \times \frac{n_t-N_t}{2}$.
+The corresponding adjoint matrix-vector product is given by
+$
+ \mathbf{A}^{\adj} \mathbf{\hat{f}} \approx \mathbf{B}^{\top}
+\mathbf{F}^{\adj}
+ \mathbf{D}^{\top} \mathbf{\hat{f}}
+$.
+With the help of the transposed index set
+$
+ I_{\mathbf{n},m}^{\top}(\mathbf{l}) := \{j=0,\hdots,M-1 :
+ \mathbf{l}-m
+ \mathbf{1} \le \mathbf{n} \odot \mathbf{x}_j \le \mathbf{l}+m \mathbf{1}
+ \}
+$,
+one obtains Algorithm~\ref{algo:nfftH} for the adjoint NFFT.
+\begin{algorithm}[tp]
+ \hrule
+ \footnotesize
+ \rule[-1.5ex]{0ex}{5ex}\raggedright Input: $d$, $M \in \N$, $\mathbf{N} \in 2\N^d$,
+ ${\mathbf{x}}_j \in [-\frac{1}{2},\frac{1}{2})^d$, $j=0,\ldots,M-1$, and
+ $\hat f_{\mathbf{k}}\in \C$, $\mathbf{k} \in I_{\mathbf{N}}$.
+ \begin{algorithmic}[1]
+ \itemsep=1.1ex
+ \STATE For $\mathbf{k} \in I_{\mathbf{N}}$ compute
+ $\hat g_{\mathbf{k}} :=
+ |I_{\mathbf{n}}|^{-1} \cdot \hat f_{\mathbf{k}}/
+ c_{\mathbf{k}}(\tilde \varphi)$.
+
+ \STATE For $\mathbf{l} \in I_{\mathbf{n}}$ compute
+ $g_{\mathbf{l}} := \sum_{\mathbf{k} \in I_{\mathbf{N}}} \hat
+ g_{\mathbf{k}} \, \eim{\mathbf{k} (\mathbf{n}^{-1} \odot \mathbf{l})}$
+ by a $d$-variate FFT.
+
+ \STATE For $j=0,\hdots,M-1$ compute
+ $f_j := \sum_{\mathbf{l} \in I_{\mathbf{n},m}
+ ({\mathbf{x}}_j)} g_{\mathbf{l}} \,
+ \tilde\varphi({\mathbf{x}}_j - \mathbf{n}^{-1}\odot
+ \mathbf{l})$.\\[2ex]
+ \end{algorithmic}
+
+ Output: Approximate function values $f_j,\;j=0,\hdots,M-1$.\\
+ Arithmetic cost: $|I_{\mathbf{N}}|+|I_{\mathbf{n}}| \log |I_{\mathbf{n}}| +
+ 2(2m+1)^d M$ + evaluations of the window function.\rule[-1.5ex]{0ex}{3ex}
+ \hrule
+ \caption{Nonequispaced fast Fourier transform (NFFT).\label{algo:nfft}}
+\end{algorithm}
+\begin{algorithm}[tp]
+ \hrule
+ \footnotesize
+ \rule[-1.5ex]{0ex}{5ex}\raggedright Input: $d$, $M \in \N$, $\mathbf{N}\in 2\N^d$,
+ ${\mathbf{x}}_j\in [-\frac{1}{2},\frac{1}{2})^d$,
+ and $f_j\in \C$, $j=0,\hdots,M-1$.\\[\baselineskip]
+ \begin{algorithmic}[1]
+ \itemsep=1.1ex
+ \STATE For $\mathbf{l} \in I_{\mathbf{n}}$ compute
+ $g_{\mathbf{l}} := \sum\limits_{j \in
+ I_{\mathbf{n},m}^{\top} (\mathbf{l}) } f_j \,
+ \tilde\varphi({\mathbf{x}}_j - \mathbf{n}^{-1}\odot \mathbf{l})$.
+ \STATE For $\mathbf{k} \in I_{\mathbf{N}}$ compute
+ $\hat g_{\mathbf{k}} := \sum\limits_{\mathbf{l} \in
+ I_{\mathbf{n}}} g_{\mathbf{l}} \, {\rm e}^{+2 \pi {\rm i} \mathbf{k}
+ (\mathbf{n}^{-1} \odot \mathbf{l})}$
+ by $d$-variate (backward) FFT.
+ \STATE For $\mathbf{k} \in I_{\mathbf{N}}$ compute
+ $\hat h_{\mathbf{k}} := |I_{\mathbf{n}}|^{-1} \cdot
+ \hat{g}_{\mathbf{k}} / c_{\mathbf{k}}(\tilde \varphi)$.\\[2ex]
+ \end{algorithmic}
+
+ Output: Approximate coefficients $\hat h_{\mathbf{k}},\;\mathbf{k} \in
+ I_{\mathbf{N}}$.\\
+ Arithmetic cost: $|I_{\mathbf{N}}|+|I_{\mathbf{n}}| \log |I_{\mathbf{n}}| +
+ 2(2m+1)^d M$ + evaluation of the window function.\rule[-1.5ex]{0ex}{3ex}
+ \hrule
+ \caption{Adjoint nonequispaced fast Fourier transform (adjoint NFFT).}
+ \label{algo:nfftH}
+\end{algorithm}
+
+%Owing to the characterization of the nonzero elements in the matrix $\mathbf{B}$
+%by
+%$
+% \bigcup_{j=0}^{M-1} \{j\} \times I_{\mathbf{n},m}({\mathbf{x}}_j)
+% =
+% \bigcup_{\mathbf{l} \in I_{\mathbf{n}}} I_{\mathbf{n},m}^{\top}(\mathbf{l})
+% \times \{\mathbf{l}\},
+%$
+%the multiplication with $\mathbf{B}^{\top}$ is implemented in
+%a ``transposed'' way in the library with summation as outer loop and only using
+%the multi-index sets $I_{\mathbf{n},m} ({\mathbf{x}}_j)$.
+
+%-------------------------------------------------------------------------------
+\section{Available window functions and evaluation techniques}
+\label{sect:windows}
+%-------------------------------------------------------------------------------
+For clarity of the presentation, we restrict ourselves to the case $d=1$, again.
+To keep the aliasing error and the truncation error small, several functions
+$\varphi$ with good localization in time and frequency domain have been
+proposed,
+e.g. the (dilated) \emph{Gaussian} \cite{duro93,st97,DuSc} (with shape
+parameter $b := \frac{2\sigma}{2 \sigma -1} \frac{m}{\pi}$),
+\begin{align}
+\label{gaussian}
+\varphi\left(x\right)
+& =
+\left(\pi b\right)^{-1/2} \,
+{\rm e}^{-\frac{\left(nx\right)^2}{b}}
+, &
+\hat \varphi \left(k\right)
+& =
+\frac{1}{n} \, {\rm e}^{-b\left(\frac{\pi k}{n}\right)^2},
+\intertext{
+(dilated) \emph{cardinal central $B$--splines} \cite{bey95,st97},}
+\label{bspline}
+\varphi\left(x\right)
+& =
+M_{2m}\left(n x\right), &
+\hat \varphi \left(k\right)
+& =
+\frac{1}{n} \sinc^{2m} \left( k \pi/n\right),
+\intertext{where $M_{2m}$ denotes the centered cardinal $B$--Spline of order $2m$,
+(dilated) \emph{Sinc functions} \cite{pottshabil},}
+\label{sinc}
+\varphi\left(x\right)
+& =
+\frac{N\left(2\sigma-1\right)}{2m} \sinc^{2m} \left(\frac{\left(\pi N x
+\left(2\sigma-1\right)\right)}{2m} \right), &
+\hat \varphi \left(k\right)
+& =
+M_{2m}\left(\frac{2mk}{\left(2\sigma-1\right)N}\right),
+\end{align}
+and
+(dilated) \emph{Kaiser--Bessel functions} \cite{Ja,Fou02} (with shape
+parameter $b := \pi \left(2 - \frac{1}{\sigma} \right)$),
+\begin{equation}
+ \label{kaiser}
+ \begin{aligned}
+ \varphi\left(x\right)
+ & = \frac{1}{\pi}
+ \begin{cases}
+ \ds \frac{\sinh\left(b\sqrt{m^2 - n^2 x^2}\right)}{\sqrt{m^2 - n^2 x^2}},
+ & \text{for $|x| \le \frac{m}{n}$},
+ \\[4ex]
+ \ds \frac{\sin\left(b\sqrt{n^2 x^2 - m^2}\right)}{\sqrt{n^2 x^2-m^2}},
+ & \text{otherwise},
+ \end{cases}
+ \\[1ex]
+ \hat \varphi \left(k\right)
+ & = \frac{1}{n}
+ \begin{cases}
+ \ds I_0 \left(m \sqrt{b^2 - \left(2 \pi k/n \right)^2} \right),
+ & \text{for $k= -n \left(1-\frac{1}{2\sigma} \right), \ldots,n \left(1-\frac{1}{2\sigma}\right)$},
+ \\
+ 0, & \text{otherwise},
+ \end{cases}
+ \end{aligned}
+\end{equation}
+where $I_0$ denotes the \emph{modified order-zero Bessel function}.
+For these functions $\varphi$ it has been proved that
+\[
+|f\left(x_j\right) - s\left(x_j\right)| \le
+C\left(\sigma,m\right) \sum_{k\in I_N} |\hat{f}_k|,
+\]
+where
+\[
+C\left(\sigma,m\right) :=
+\begin{cases}
+ 4 \, \e^{-m \pi \left(1-1/\left(2\sigma-1\right)\right)}, & \text{for \eqref{gaussian}},
+ \\
+ 4 \, \left(\frac{1}{2\sigma -1} \right)^{2m}, & \text{for \eqref{bspline}},
+ \\[1ex]
+ \frac{1}{m-1}\left(\frac{2}{\sigma^{2m}}+\left(\frac{\sigma}{2\sigma-1}\right)^{2m}\right), &
+ \text{for \eqref{sinc}},
+ \\[1ex]
+ 4\pi\left(\sqrt{m}+m\right)\sqrt[4]{1-\frac{1}{\sigma}} \, \e^{-2 \pi m \sqrt{1-1/\sigma}}, &
+ \text{for \eqref{kaiser}}.
+\end{cases}
+\]
+Thus, for fixed $\sigma >1$ the approximation error introduced by the NFFT
+decays exponentially with the number of summands $m$ in \eqref{approx}.
+These estimates can of course be generalized to higher dimensions; see \cite{elst}.
+
+It must be noted that the cost of the NFFT also increases with $m$.
+In the following, we will suggest different methods for efficient storage and
+application of the matrix $\mathbf{B}$. These are all available in the
+NFFT~3 library by choosing particular flags during the initialization phase.
+%These methods do not yield a different asymptotic performance but rather yield
+%a lower constant in the amount of computation.
+
+\subsection*{Fully precomputed window function}
+An obvious possibility is to precompute all values $\varphi(\mathbf{x}_j -
+\mathbf{n}^{-1}\odot\mathbf{l})$ for $j=0,\hdots,M-1$ and $\mathbf{l}\in
+I_{\mathbf{n},m} (\mathbf{x}_j)$ which are needed for $\mathbf{B}$.
+This needs to store the possibly large amount of $(2m+1)^d M$ real numbers.
+On the other hand, no additional computation is required during the matrix-vector
+multiplication apart from the inevitable $2(2m+1)^d M$ floating point operations.
+%Furthermore, we store for this method explicitly the row and column index for
+%each nonzero entry of the matrix $\mathbf{B}$.
+This method, indicated by the flag \texttt{PRE\_FULL\_PSI}, is the fastest procedure
+but can only be used if enough memory for storage is available.
+
+\subsection*{Tensor product based precomputation}
+Using the fact that the window functions are represented by tensor products one can
+resort to storing only the values $\varphi_t((\mathbf{x}_j)_t - \frac{l_t}{n_t})$ for
+$j=0,\hdots,M-1$, $t=0,\hdots,d-1$, and $l_t\in I_{n_t,m} ((\mathbf{x}_j)_t)$,
+where $(\mathbf{x}_j)_t$ denotes the $t$th component of the $j$th node.
+This method needs to store $d(2m+1)M$ real numbers which is less than the first method needs.
+However, for each node one possibly needs up to $2(2m+1)^d$ extra multiplications to
+obtain the values of the multivariate window function
+$\varphi(\mathbf{x}_j - \mathbf{n}^{-1}\odot\mathbf{l})$ for $\mathbf{l}\in
+I_{\mathbf{n},m}(\mathbf{x}_j)$.
+This technique is available for every window function discussed
+and can be used by setting the flag \texttt{PRE\_PSI}. This is also the
+default method used in our library.
+
+\subsection*{Linear interpolation from a lookup table}
+For a large number of nodes $M$, the amount of memory can be further reduced
+by using lookup table techniques.
+For a recent example within the framework of gridding see \cite{BeNiPa05}.
+We suggest to precompute from the even window function the equidistant samples
+$\varphi_t(\frac{rm}{Kn_t})$ for $t=0,\hdots,d-1$ and $r=0,\hdots,K$,
+$K\in\N$. Then for the actual node $\mathbf{x}_j$ during the NFFT
+the values $\varphi_t((\mathbf{x}_j)_t - \frac{l_t}{n_t})$ for
+$t=0,\hdots,d-1$ and $l_t\in I_{n_t,m} ((\mathbf{x}_j)_t)$ are computed
+by linear interpolation from its two neighboring values.
+This method needs to store only $dK$ real numbers in total, where $K$
+depends only on the desired accuracy but neither on the number of
+nodes $M$ nor on the multibandwidth $\mathbf{N}$.
+If we choose $K$ to be a multiple of $m$, we can further reduce the computational
+costs during the interpolation step since the distance from $(\mathbf{x}_j)_t-
+\frac{l_t}{n_t}$ to the two neighboring values is the same for all
+$l_t\in I_{n_t,m}((\mathbf{x}_j)_t)$.
+During the actual multiplication with the matrix $\mathbf{B}$, this method requires
+$2(2m+1)^d$ extra multiplications per node. It can be used by setting the flag
+\texttt{PRE\_LIN\_PSI}. Error estimates for this additional
+approximation are given in \cite{KuPo06}.
+
+\subsection*{Fast Gaussian gridding}
+Two useful properties of the Gaussian window function \eqref{gaussian} that can be exploited
+within the presented framework have recently been reviewed in \cite{GrLe04}.
+Beside the tensor product structure for $d>1$, which is also valid for all other
+window functions, it is remarkable that the number of evaluations of the
+exponential function \texttt{exp()} can be reduced by a substantially.
+More precisely, for $d=1$ and a fixed node $x_j$ the evaluation of
+$\varphi(x_j-\frac{l'}{n})$, $l'\in I_{n,m}(x_j)$ can be computed more
+efficiently by writing this as
+\begin{equation*}
+ \sqrt{\pi b}\varphi\left(x_j-\frac{l'}{n}\right)
+ =\e^{-\frac{(nx_j-l')^2}{b}}
+ =\e^{-\frac{(nx_j-u)^2}{b}}
+ \left(\e^{-\frac{2(nx_j-u)}{b}}\right)^l
+ \e^{-\frac{l^2}{b}}\,,
+\end{equation*}
+where $u=\min I_{n,m}(x_j)$ and $l=0,\hdots,2m$.
+The first factor and the exponential within the brackets are a
+constant for each fixed node $x_j$.
+Once we have evaluated the second exponential, its $l$th power can be computed
+by repeated multiplications only.
+Furthermore, the last exponential is independent of $x_j$ such that these $2m+1$
+different values need to be precomputed only once -- usually a negligible amount.
+Thus, it is sufficient to store or evaluate $2M$ exponentials for $d=1$.
+The case $d>1$ needs to store or evaluate $2dM$ numbers. This follows from the
+tensor product structure.
+The described method is employed when the flags \texttt{FG\_PSI} and possibly
+\texttt{PRE\_FG\_PSI} are used.
+
+\subsection*{No precomputation of the window function}
+The last method considered does not precompute any values of the window function
+at all. Instead, all values are calculated on-line. This needs to be done at most
+$\frac{3}{2}(2m+1)^d M$ times. The computation time strongly depends on how fast
+one can evaluate the particular window function. Since this method does not need
+any additional storage, it is attractive whenever large problems are considered
+that would push the other methods beyond the memory limitations.
+
+%-------------------------------------------------------------------------------
+\section{Further NFFT approaches}\label{A.4}
+%-------------------------------------------------------------------------------
+Besides \cite{nfft3}, the {\sc MatLab} toolbox \cite{fematlab} also implements
+the NFFT.
+In several papers, approximations techniques similar to the NFFT have been
+described.
+Common names for these schemes are
+\emph{non-uniform fast Fourier transform} \cite{fesu02},
+\emph{generalized fast Fourier transform} \cite{duro93},
+\emph{unequally-spaced fast Fourier transform} \cite{bey95},
+\emph{fast approximate Fourier transforms for irregularly spaced data}
+\cite{ware98},
+\emph{non-equispaced fast Fourier transform} \cite{Fou02} or
+\emph{gridding} \cite{scsc,Ja,Pe}.
+
+Also, different window functions have been considered in various papers, e.g. a Gaussian
+pulse tapered with a Hanning window \cite{DuSc}, Gaussian kernels combined
+with Sinc kernels \cite{Pe}, and particular optimized windows \cite{Ja,DuSc}.
+Special approaches based on scaling vectors \cite{NgLi99}, minimizing
+the Frobenius norm of certain error matrices \cite{st01}, or min-max
+interpolation \cite{fesu02} have been proposed.
+While these approaches lead to better accuracy for the Gaussian or B-Spline
+windows, improvements for the Kaiser-Bessel window are marginal.
+Recently, the time consuming multiplication with the matrix $\mathbf{B}$ has
+been accelerated by using commodity graphics hardware \cite{SoScNoHa08}.
+
+The following two approaches have also been considered for the
+univariate case \hbox{$d=1$:}
+The authors of \cite{AnDa96} use for each node $x_j$ an $m$th order Taylor
+expansion of the trigonometric polynomial \eqref{trigPoly1d} around the nearest
+neighboring point on an oversampled equispaced lattice $I_n/n$. Here again we have
+$n=\sigma N,\, \sigma\gg 1$.
+This algorithm utilizes $m$ FFTs of size $n$ (compared to only one in our approach)
+and uses a fair amount of extra memory; see also \cite{KuPo06,Ku08GAMM}.
+Another approach is considered in \cite{DuRo95}. It is based on a Lagrange
+interpolation technique.
+After computing an FFT of the vector $\mathbf{\hat{f}}\in\C^N$ in \eqref{eq:nfft}
+an exact polynomial interpolation scheme is used to obtain the values of the
+trigonometric polynomial $f$ at the nonequispaced nodes $x_j$.
+This is the most time consuming part of this method. In an approximate way,
+it can however be realized with the help of the fast multipole method.
+This approach is appealing since it allows also for computing an
+inverse transform.
+Nevertheless, numerical experiments in \cite{DuRo95} indicate that this
+approach is far more time consuming than Algorithm \ref{algo:nfft}. Also, the
+inversion can only be computed in a stable way for almost equispaced nodes
+\cite{DuRo95}.
+
+For a comparison of different approaches to nonequispaced Fourier transforms, we also
+refer to \cite{ware98,st01,fesu02,KuPo06}.
+
+\begin{acks}
+We thank G.~Steidl for numerous fruitful and enlightning discussions.
+Contributions to the source code made by M. B\"ohme, M. Fenn,
+T. Knopp, and S. Klatt are gratefully acknowledged. For details, see the
+\verb"AUTHORS" file in the package directory. We also thank the anonymous
+referees and the editor for man helpful comments and valuable suggestions.
+\end{acks}
+
+\bibliographystyle{acmtrans}
+%\bibliographystyle{abbrv}
+\bibliography{../references/references}
+\begin{received}
+Received 09/2007; revised 02/2008; accepted Month Year
+\end{received}
+\end{document}
diff --git a/doc/tutorial/struct.tex b/doc/tutorial/struct.tex
new file mode 100755
index 0000000..53e7a69
--- /dev/null
+++ b/doc/tutorial/struct.tex
@@ -0,0 +1,59 @@
+% Bild Struktogramm
+\unitlength0.8cm
+
+\newsavebox{\bedzweig}
+\savebox{\bedzweig}(0,0){
+%\thicklines
+\put(0,0.5){\line(-2,-1){1.0}}
+\put(0,0.5){\line(2,-1){1.0}}
+\put(0,-0.5){\line(-2,1){1.0}}
+\put(0,-0.5){\line(2,1){1.0}}
+\put(0,0.5){\makebox(0,0)[b]
+ {\put(0,0){\line(0,1){0.5}}}}
+\put(1.0,0){\line(1,0){1.0}}
+\put(-1.0,0){\line(-1,0){1.0}}
+\put(-1.2,0,1) {\makebox(0,0)[br]{no}}
+\put(1.2,0,1) {\makebox(0,0)[bl]{yes}} }
+
+
+
+\begin{picture}(10,13)
+% setze 1 Box
+
+% setze Linien
+%\multiput(1,0)(1,0){15}{\line(0,1){1}}
+% schreibe
+%\put(0,0){\framebox(16,1)[c]}
+
+\multiput(0,0)(0,2){2}{\framebox(10,1)[c]}
+
+\multiput(0,6)(0,2){4}{\framebox(10,1)[c]}
+
+
+\put(0.2,12.2){\makebox[10cm][l]{Initialise the Fourier transform.}}
+\put(0.2,10.2){\makebox[10cm][l]{Initialise the corresponding inverse.}}
+\put(0.2,8.2){\makebox[10cm][l]{Compute residuals.}}
+\put(0.2,6.2){\makebox[10cm][l]{Compute one iteration.}}
+\put(0.2,2.2){\makebox[10cm][l]{Finalise the inverse transform.}}
+\put(0.2,0.2){\makebox[10cm][l]{Finalise the Fourier transform.}}
+
+\multiput(5,2)(0,2){1}{\vector(0,-1){1}}
+\multiput(5,6)(0,2){4}{\vector(0,-1){1}}
+
+\put(5,4.5){\usebox{\bedzweig}\makebox(0,-0.1){Stop?}}
+
+\put(7,4.5){\vector(0,-1){1.5}}
+\put(3,4.5){\line(-1,0){3.5}}
+\put(-0.5,4.5){\line(0,1){3}}
+\put(-0.5,7.5){\vector(1,0){5.5}}
+
+%\put(11.4,1){\line(0,1){0.4}}
+
+
+\end{picture}
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "main"
+%%% End:
diff --git a/doc/tutorial/summary.tex b/doc/tutorial/summary.tex
new file mode 100644
index 0000000..86965c4
--- /dev/null
+++ b/doc/tutorial/summary.tex
@@ -0,0 +1,227 @@
+%==============================================================================
+\documentclass[11pt,a4paper,twoside]{scrartcl}
+%==============================================================================
+\usepackage{a4wide}
+\usepackage{amsfonts}
+\usepackage{amsmath}
+\usepackage{theorem}
+%\usepackage{showkeys}
+%\usepackage{psfig}
+%\usepackage{lscape}
+\usepackage{color}
+%\usepackage{graphics}
+\usepackage{graphicx}
+\usepackage{subfigure}
+\usepackage[boxed,Algorithm]{algorithm}
+\usepackage{algorithmic}
+\usepackage{psfrag}
+
+\renewcommand{\topfraction}{1}
+\renewcommand{\textfraction}{0}
+\setcounter{totalnumber}{4}
+
+\renewcommand{\topfraction}{1}
+\renewcommand{\textfraction}{0}
+\setcounter{totalnumber}{4}
+\newenvironment{tablehere}
+ {\def\@captype{table}}
+ {}
+
+\newcommand{\N}{\ensuremath{\mathbb{N}}}
+\newcommand{\T}{\ensuremath{\mathbb{T}}}
+\renewcommand{\S}{\ensuremath{\mathbb{S}}}
+\newcommand{\NZ}{\ensuremath{\mathbb{N}_{0}}}
+\newcommand{\Z}{\ensuremath{\mathbb{Z}}}
+\newcommand{\R}{\ensuremath{\mathbb{R}}}
+\newcommand{\Rp}{\ensuremath{\mathbb{R}^{+}}}
+\newcommand{\Rn}{\ensuremath{\mathbb{R}^n}}
+\newcommand{\Rnn}{\ensuremath{\mathbb{R}^{n \times n}}}
+\newcommand{\C}{\ensuremath{\mathbb{C}}}
+\newcommand{\Pol}{\ensuremath{\Pi}}
+\newcommand{\nfft}{\textsf{NFFT}}
+\newcommand{\nfftversion}{3.0}
+
+\def\cO{{\cal O}}
+
+\def\veps{\varepsilon}
+
+\def\tT{{\mbox{\tiny{T}}}}
+\def\ti{\mbox{\scriptsize{i}}}
+\newcommand{\e}{{\,\rm {e}}}
+\newcommand{\eim}[1]{{\rm e}^{-2\pi{\ti} #1}}
+\newcommand{\eip}[1]{{\rm e}^{ 2\pi{\ti} #1}}
+\newcommand{\zb}[1]{\ensuremath{\boldsymbol{#1}}}
+\newcommand{\ds}{\displaystyle}
+\newcommand{\sinc}{{\rm sinc}}
+\newcommand{\dist}{{\rm dist}}
+\newcommand{\adj}{{\vdash \hspace*{-1.72mm} \dashv}}
+
+\newcommand{\diag}{{\, \rm diag}}
+\renewcommand{\d}{\, \mbox{d}}
+\renewcommand{\Box}{\hspace*{0ex} \hfill \rule{1.5ex}{1.5ex} \\}
+\newcommand{\bend}{\hspace*{0ex} \hfill \hbox{\vrule height
+ 1.5ex\vbox{\hrule width 1.4ex \vskip 1.4ex\hrule width 1.4ex}\vrule
+ height 1.5ex}}
+
+\newtheorem{theorem}{Theorem}[section]
+\newtheorem{lemma}[theorem]{Lemma}
+\newtheorem{remark}[theorem]{Remark}
+%\newtheorem{algorithm}[theorem]{Algorithm}
+\newtheorem{example}[theorem]{Example}
+\newtheorem{corollary}[theorem]{Corollary}
+
+\newenvironment{Theorem}{\begin{theorem}\sl}{\end{theorem}}
+\newenvironment{Lemma}{\begin{lemma}\sl}{\end{lemma}}
+\newenvironment{Remark}{\begin{remark}\rm}{\hfill \bend \end{remark}}
+%\newenvironment{Algorithm}{\begin{algorithm}\sl}{\hfill \end{algorithm}}
+\newenvironment{Example}{\begin{example}\rm}{\hfill \bend \end{example}}
+\newenvironment{Corollary}{\begin{corollary}\rm}{\hfill \bend
+ \end{corollary}}
+\def\invisible#1{\textcolor{white}{#1}}
+
+\numberwithin{equation}{section}
+\numberwithin{table}{section}
+\numberwithin{figure}{section}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% TITLE PAGE
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+%\title{NFFT\nfftversion\ - Summary}
+%\author{Jens Keiner
+%\thanks{keiner at math.uni-luebeck.de,University of L\"ubeck,
+%Institute of Mathematics, 23560 L\"ubeck}
+%\and
+% Stefan Kunis
+%\thanks{kunis at mathematik.tu-chemnitz.de, Chemnitz University of Technology,
+%Department of Mathematics, 09107 Chemnitz, Germany}
+%\and
+% Daniel Potts
+%\thanks{potts at mathematik.tu-chemnitz.de, Chemnitz University of Technology,
+%Department of Mathematics, 09107 Chemnitz, Germany}
+%}
+%\date{}
+%\maketitle
+%\begin{center}
+% \vspace{-8ex}
+% {\large {\tt http://www.tu-chemnitz.de/$\sim$potts/nfft}}
+% \vspace{8ex}
+%\end{center}
+
+\title{\vspace{-8ex}\Large NFFT\nfftversion\ - Summary}
+\date{}
+\author{\large Jens Keiner \and \large Stefan Kunis \and \large Daniel Potts}
+\maketitle
+\vspace{-8ex}
+
+Fast Fourier transforms (FFTs) belong to the ``10 algorithms with the greatest
+influence on the development and practice of science and engineering in the
+20th century'', cf.~\cite{DoSu00}.
+The classic algorithm in \cite{CoTu65} computes the discrete
+Fourier transform
+\begin{equation*}
+ f_j= \sum_{k=-\frac{N}{2}}^{\frac{N}{2}-1} \hat{f}_{k} \eim{\frac{kj}{N}}
+\end{equation*}
+for $j=-\frac{N}{2},\hdots,\frac{N}{2}-1$ and given complex coefficients
+$\hat{f}_{k}\in\C$.
+Using a divide and conquer approach, the number of floating point operations
+is reduced from $\cO(N^2)$ for a straightforward computation to only
+$\cO(N\log N)$.
+In conjunction with publicly available efficient implementations
+\cite{FFTW05}, the fast Fourier transform has become of great importance in
+scientific computing.
+Its applications include for example digital signal and image processing as
+well as the numerical solution of differential and integral equations.
+The author of \cite[p. ix]{loan} summarises ``life as we know it
+would be very different without the FFT''.
+
+However, two shortcomings of traditional schemes are the need for equispaced
+sampling and the restriction to the system of complex exponential functions.
+During the last two decades, both problems have attracted much attention.
+We refer to \cite{maro96} for an introduction to discrete Fourier analysis
+with orthogonal polynomials, spherical harmonics, and more general functions.
+The second branch of generalisations dispenses with the need for equispaced
+sampling and establishes so-called nonequispaced FFTs, see
+e.g. \cite{postta01}.
+The common concept in most generalised fast Fourier transforms - and other
+algorithms for the computation with dense matrices - is the use of
+approximation schemes.
+The functions involved, e.g. the complex exponentials, are replaced by
+approximations with prescribed accuracy that allow for the design of a fast
+algorithm.
+We trade exactness for efficiency; instead of precise computations, the
+proposed methods guarantee a given target accuracy.
+
+The principal contribution of the present software package is a publicly
+available implementation of various fast algorithms for discrete Fourier
+transforms.
+For notational convenience let the multi-index set
+\begin{equation*}
+ I_{\zb N} = \left\{ \zb k=\left(k_t\right)_{t=0,\hdots,d-1} \in \Z^d: -
+ \frac{N_t}{2} \le k_t < \frac{N_t}{2} ,\;t=0,\hdots,d-1\right\},
+\end{equation*}
+with $\zb N=\left(N_t\right)_{t=0,\hdots,d-1}\in 2\N^d$ be given.
+For given Fourier coefficients $\hat f_{\zb k} \in \C$, $\zb k \in I_{\zb N}$,
+and arbitrary nodes $\zb x_j \in [-1/2,1/2)^d$, $j=0,\hdots,M-1$, we consider
+the computation of
+\begin{equation*}
+ f\left(\zb x_j\right) = \sum_{\zb k\in I_{\zb N}} \hat{f}_{\zb k} \eim{\zb
+ k\zb x_j},\quad j=0,\hdots,M-1.
+\end{equation*}
+Obviously, the straightforward algorithm for this task takes $\cO(M|I_{\zb
+ N}|)$ floating point operations.
+In contrast, the {\em nonequispaced fast Fourier transform} computes the above
+sums up to a user-specified accuracy in $\cO(|I_{\zb N}|\log|I_{\zb N}|+M)$
+operations.
+The implemented routines are state-of-the-art with respect to recently
+suggested improvements, see e.g. \cite{GrLe04}, and use the highly efficient
+FFTW library \cite{FFTW05}.
+
+The generalisations of the NFFT include fast algorithms for several discrete
+Fourier transforms.
+Due to its relevance in tomography, geophysics, and meteorology, we would like
+to highlight the nonequispaced fast spherical Fourier transform (NFSFT).
+In analogy to the complex exponentials $\mathrm{e}^{\mathrm{i} k x}$ on the
+torus, the spherical harmonics $Y_k^n$ form the orthogonal Fourier basis with
+respect to the usual inner product on the sphere.
+For given Fourier coefficients $\hat f_k^n \in \C$ and arbitrary nodes
+with longitude $\vartheta_j\in[0,\pi]$ and latitude $\varphi_j\in [0,2\pi)$,
+we are interested in the evaluation of
+\begin{equation*}
+ f\left(\vartheta_j,\varphi_j\right) =
+ \sum_{k=0}^N \sum_{n=-k}^k \hat f_k^n
+ Y_{k}^n\left(\vartheta_j,\varphi_j\right),\quad j=0,\hdots,M-1.
+\end{equation*}
+Here, our implemented scheme reduces the computational costs from $\cO(MN^2)$
+operations to only $\cO(N^2\log^2 N+M)$.
+Further fast transforms include the Fourier transforms with nonequispaced data
+in time and frequency domain, real trigonometric transforms, and sparse FFTs.
+All these Fourier transforms come along with their adjoint algorithms, used in
+quadrature rules for example, and inverse transforms as used for scattered
+data approximation.
+
+The NFFT and its generalisations have found a lot of applications, where the
+current release of the library includes various fast summation methods,
+reconstruction algorithms in medical imaging, and the polar FFT as part of our
+ridgelet transform.
+We would like to highlight the fast summation method, because this problem
+arises in integral equations or potential theory.
+In particular, our method proves comparable with the celebrated fast multipole
+method \cite{greenrokh87}.
+
+The documentation of our library is split into two parts:
+The tutorial \cite{nfft3_tutorial} surveys the fast Fourier transform at
+nonequispaced nodes, its generalisations, and inversion.
+Moreover it provides an overview over the C library which allows users to
+compute their first transforms by using simple interfaces to the computational
+kernels.
+The detailed documentation (part of the source tree) of all user functions,
+options and parameters is done with Doxygen \cite{doxygen} and allows for
+further optimisation with respect to speed, accuracy, and memory usage.
+
+\begin{footnotesize}
+\bibliographystyle{abbrv}
+\bibliography{../references/references}
+\end{footnotesize}
+
+\end{document}
\ No newline at end of file
diff --git a/doc/tutorial/tree.tex b/doc/tutorial/tree.tex
new file mode 100644
index 0000000..cba8e53
--- /dev/null
+++ b/doc/tutorial/tree.tex
@@ -0,0 +1,225 @@
+% Tree -- a macro to make aligned (horizontal) trees in TeX
+%
+% Input is of the form
+% \tree
+% item
+% \subtree
+% \leaf{item}
+% .
+% .
+% .
+% \endsubtree
+% \subtree
+% .
+% .
+% .
+% \endsubtree
+% \endsubtree
+% \endtree
+%
+% Nesting is to any level. \leaf is defined as a subtree of one item:
+% \def\leaf#1{\subtree#1\endsubtree}.
+%
+% A structure:
+% \subtree
+% item_part1
+% item_part2
+% .
+% .
+% .
+%
+% will print item_part2 directly below item_part1 as a single item
+% as if they were in a \box.
+%
+% The macro is a 3-pass macro. On the first pass it sets up a data
+% structure from the \subtree ... \endsubtree definitions. On the second pass
+% it recursively calculates the width of each level of the tree. On the third
+% pass it sets up the boxes, glue and rules.
+%
+% By David Eppstein, TUGboat, vol. 6 (1985), no. 1, pp. 31--35.
+% Transcribed by Margaret Kromer (peg), Feb., 1986.
+%
+% Pass 1
+% At the end of pass 1, the tree is coded as a nested collection of \hboxes
+% and \vboxes.
+\newbox\treebox\newcount\treeboxcnt
+\def\tree{\message{Begin tree}\treeboxcnt=1\global\setbox\treebox=\boxtree}
+\def\subtree{\ettext \advance\treeboxcnt by 1 \boxtree}
+\def\leaf#1{\subtree#1\endsubtree}
+\def\endsubtree{\ettext \egroup \advance\treeboxcnt-1{}%
+ \ifnum\treeboxcnt=-1 \treeerrora\fi}
+\def\endtree{\endsubtree \ifnum\treeboxcnt>0 \treeerrorb\fi%
+ \settreesizes \typesettree \message{-- end tree}}
+% Error messages for unbalanced tree
+\def\treeerrora{\errhelp=\treeerrorahelp%
+ \errmessage{Unbalanced tree -- too many endsubtrees}}
+\newhelp\treeerrorahelp{There are more subtrees closed than opened}
+\def\treeerrorb{\errhelp=\treeerrorbhelp%
+ \errmessage{Unbalanced tree -- not enough endsubtrees}}
+\newhelp\treeerrorbhelp{Not all the subtrees of the tree are closed.
+If you continue, you'll get some mysterious secondary errors.}
+% Set up \vbox containing root of tree
+\newif\iftreetext\treetextfalse % Whether still aligning text
+\def\boxtree{\hbox\bgroup % Start outer box of tree or subtree
+ \baselineskip 2.5ex % Narrow line spacing slightly
+ \tabskip 0pt % No spurious glue in alignment
+ \vbox\bgroup % Start inner text \vbox
+ \treetexttrue % Remember for \ettext
+ \let\par\crcr \obeylines % New line breaks without explicit \cr
+ \halign\bgroup##\hfil\cr} % Start alignment with simple template
+\def\ettext{\iftreetext % Are we still in inner text \vbox?
+ \crcr\egroup \egroup \fi} % Yes, end alignment and box
+% Pass 2
+% Recursively calculate widths of tree with \setsizes; keep results in
+% \treesizes; \treewidth contains total width calculated so far. \treeworkbox
+% is workspace containing subtree being sized.
+\newbox\treeworkbox
+\def\cons#1#2{\edef#2{\xmark #1#2}} % Add something to start of list
+\def\car#1{\expandafter\docar#1\docar} % Take first element of list
+\def\docar\xmark#1\xmark#2\docar{#1} % ..by ignoring rest in expansion
+\def\cdr#1{\expandafter\docdr#1\docdr#1}% Similarly, drop first element
+\def\docdr\xmark#1\xmark#2\docdr#3{\def#3{\xmark #2}}
+\def\xmark{\noexpand\xmark} % List separator expands to self
+\def\nil{\xmark} % Empty list is just separator
+\def\settreesizes{\setbox\treeworkbox=\copy\treebox%
+ \global\let\treesizes\nil \setsizes}
+\newdimen\treewidth % Width of this part of the tree
+\def\setsizes{\setbox\treeworkbox=\hbox\bgroup% Get a horiz list as a workspace
+ \unhbox\treeworkbox\unskip % Take tree, unpack it into horiz list
+ \inittreewidth % Get old width at this level
+ \sizesubtrees % Recurse through all subtrees
+ \sizelevel % Now set width from remaining \vbox
+ \egroup} % All done, finish our \hbox
+\def\inittreewidth{\ifx\treesizes\nil % If this is the first at this level
+ \treewidth=0pt % ..then we have no previous max width
+ \else \treewidth=\car\treesizes % Otherwise take old max level width
+ \global\cdr\treesizes % ..and advance level width storage
+ \fi} % ..in preparation for next level.
+\def\sizesubtrees{\loop % For each box in horiz list (subtree)
+ \setbox\treeworkbox=\lastbox \unskip % ..pull it off list and flush glue
+ \ifhbox\treeworkbox \setsizes % If hbox, it's a subtree - recurse
+ \repeat} % ..and loop; end loop on tree text
+\def\sizelevel{%
+ \ifdim\treewidth<\wd\treeworkbox % If greater than previous maximum
+ \treewidth=\wd\treeworkbox \fi % Then set max to new high
+ \global\cons{\the\treewidth}\treesizes}% In either case, put back on list
+% Pass 3
+% Recursively typeset tree with \maketree by adding an \hbox containing
+% a subtree (in \treebox) to the horizontal list.
+\newdimen\treeheight % Height of this part of the tree
+\newif\ifleaf % Tree has no subtrees (is a leaf)
+\newif\ifbotsub % Bottom subtree of parent
+\newif\iftopsub % Top subtree of parent
+\def\typesettree{\medskip\maketree\medskip} % Make whole tree
+\def\maketree{\hbox{\treewidth=\car\treesizes % Get width at this level
+ \cdr\treesizes % Set up width list for recursion
+ \makesubtreebox\unskip % Set \treebox to text, make subtrees
+ \ifleaf \makeleaf % No subtrees, add glue
+ \else \makeparent \fi}} % Have subtrees, stick them at right
+{\catcode`@=11 % Be able to use \voidb at x
+\gdef\makesubtreebox{\unhbox\treebox % Open up tree or subtree
+ \unskip\global\setbox\treebox\lastbox % Pick up very last box
+ \ifvbox\treebox % If we're already at the \vbox
+ \global\leaftrue \let\next\relax % ..then this is a leaf
+ \else \botsubtrue % Otherwise, we have subtrees
+ \setbox\treeworkbox\box\voidb at x % Init stack of processed subs
+ \botsubtrue \let\next\makesubtree % ..and call \maketree on them
+ \fi \next}} % Finish up for whichever it was
+\def\makesubtree{\setbox1\maketree % Call \maketree on this subtree
+ \unskip\global\setbox\treebox\lastbox % Pick up box before it
+ \treeheight=\ht1 % Get height of subtree we made
+ \advance\treeheight 2ex % Add some room around the edges
+ \ifhbox\treebox \topsubfalse % If picked up box is a \vbox,
+ \else \topsubtrue \fi % ..this is the top, otherwise not
+ \addsubtreebox % Stack subtree with the rest
+ \iftopsub \global\leaffalse % If top, remember not a leaf
+ \let\next\relax \else % ..(after recursion), set return
+ \botsubfalse \let\next\makesubtree % Otherwise, we have more subtrees
+ \fi \next} % Do tail recursion or return
+\def\addsubtreebox{\setbox\treeworkbox=\vbox{\subtreebox\unvbox\treeworkbox}}
+\def\subtreebox{\hbox\bgroup % Start \hbox of tree and lines
+ \vbox to \treeheight\bgroup % Start \vbox for vertical rules
+ \ifbotsub \iftopsub \vfil % If both bottom and top subtree
+ \hrule width 0.4pt % ..vertical rule is just a dot
+ \else \treehalfrule \fi \vfil % Bottom gets half-height rule
+ \else \iftopsub \vfil \treehalfrule % Top gets half-height the other way
+ \else \hrule width 0.4pt height \treeheight \fi\fi % Middle, full height
+ \egroup % Finish vertical rule \vbox
+ \treectrbox{\hrule width 1em}\hskip 0.2em\treectrbox{\box1}\egroup}
+\def\treectrbox#1{\vbox to \treeheight{\vfil #1\vfil}}
+\def\treehalfrule{\dimen\treeworkbox=\treeheight % Get total height
+ \divide\dimen\treeworkbox 2%
+ \advance\dimen\treeworkbox 0.2pt % Divide by two, add half horiz height
+ \hrule width 0.4pt height \dimen\treeworkbox}% Make a vertical rule that high
+\def\makeleaf{\box\treebox} % Add leaf box to horiz list
+\def\makeparent{\ifdim\ht\treebox>%
+ \ht\treeworkbox % If text is higher than subtrees
+ \treeheight=\ht\treebox % ..use that height
+ \else \treeheight=\ht\treeworkbox \fi % Otherwise use height of subtrees
+ \advance\treewidth-\wd\treebox % Take remainder of level width
+ \advance\treewidth 1em % ..after accounting for text and glue
+ \treectrbox{\box\treebox}\hskip 0.2em % Add text, space before connection
+\treectrbox{\hrule width \treewidth}%
+ \treectrbox{\box\treeworkbox}} % Add \hrule, subs
+% No idea what \spouse is supposed to do... wasn't included
+\def\spouse{\bf}
+
+{
+ \small %\normalsize
+ \tree %nfft
+ \subtree doc (API docs)
+ \endsubtree
+ \subtree include (C headers)
+ \endsubtree
+ \subtree util (utility functions)
+ \endsubtree
+ \subtree kernel
+ \subtree fpt (fast polynomial transform)
+ \endsubtree
+ \subtree mri (transform in magnetic resonance imaging)
+ \endsubtree
+ \subtree nfct (nonequispaced fast cosine transform)
+ \endsubtree
+ \subtree nfft (nonequispaced fast Fourier transform)
+ \endsubtree
+ \subtree nfsft (nonequispaced fast spherical Fourier transform)
+ \endsubtree
+ \subtree nfst (nonequispaced fast sine transform)
+ \endsubtree
+ \subtree nnfft (nonequispaced in space and frequency FFT)
+ \endsubtree
+ \subtree nsfft (nonequispaced sparse fast Fourier transform)
+ \endsubtree
+ \subtree solver (inverse transforms)
+ \endsubtree
+ \endsubtree
+
+ \subtree examples
+ {(for each in kernel)}
+ \endsubtree
+
+ \subtree applications
+ \subtree fastgauss (fast Gauss transform)
+ \endsubtree
+ \subtree fastsum (summation schemes)
+ \endsubtree
+ \subtree fastsumS2 (summation on the sphere)
+ \endsubtree
+ \subtree mri (reconstruction in mri)
+ \endsubtree
+ \subtree nfft\_flags (time and memory requirements)
+ \endsubtree
+ \subtree polarFFT (fast polar Fourier transform)
+ \endsubtree
+ \subtree radon (radon transform)
+ \endsubtree
+ \subtree stability (stability inverse nfft)
+ \endsubtree
+ \endsubtree
+ \endtree
+}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "thesis"
+%%% End:
diff --git a/doxygen.dox b/doxygen.dox
new file mode 100644
index 0000000..93d3027
--- /dev/null
+++ b/doxygen.dox
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3475 2010-04-11 14:58:03Z keiner $ */
+
+/** \mainpage notitle
+ * \htmlonly
+ * <h2 class="anchor">Contents</h2>
+ * \endhtmlonly
+ * \htmlinclude toc.txt
+ *
+ * \section introduction Introduction
+ *
+ * \cite{nfft3} Fast Fourier transforms (FFTs) belong \cite{nfft3_2} to the '10 algorithms with the
+ * greatest influence on the development and practice of science and
+ * engineering \cite{nfft3} in the 20th century'.
+ * The classic algorithm computes the discrete Fourier transform
+ * \f[
+ * f_j= \sum_{k=-\frac{N}{2}}^{\frac{N}{2}-1} \hat{f}_{k}
+ * {\rm e}^{2\pi{\rm i}\frac{kj}{N}}
+ * \f]
+ * for \f$j=-\frac{N}{2},\hdots,\frac{N}{2}-1\f$ and given complex
+ * coefficients \f$\hat{f}_{k}\in\mathbb{C}\f$.
+ * Using a divide and conquer approach, the number of floating point
+ * operations is reduced from \f${\cal O}(N^2)\f$ for a straightforward
+ * computation to only \f${\cal O}(N\log N)\f$.
+ * In conjunction with publicly available efficient implementations the fast
+ * Fourier transform has become of great importance in scientific computing.
+
+ * However, two shortcomings of traditional schemes are the need for
+ * equispaced sampling and the restriction to the system of complex
+ * exponential functions.
+ * The NFFT is a C subroutine library for computing the nonequispaced discrete
+ * Fourier transform (NDFT) and its generalisations in one or more dimensions,
+ * of arbitrary input size, and of complex data.
+ *
+ * More precisely,we collect the possible frequencies
+ * \f$\mathbf{k}\in\mathbb{Z}^d\f$ in the multi-index set
+ * \f[
+ * I_{\mathbf{N}} := \left\{ \mathbf{k}=\left(k_t\right)_{t=0,\hdots,d-1}
+ * \in \mathbb{Z}^d: -
+ * \frac{N_t}{2} \le k_t < \frac{N_t}{2} ,\;t=0,\hdots,d-1\right\},
+ * \f]
+ * where \f$\mathbf{N}=\left(N_t\right)_{t=0,\hdots,d-1}\f$ is the
+ * multibandlimit, i.e., \f$N_t\in 2\mathbb{N}\f$.
+ * For a finite number of given Fourier coefficients
+ * \f$\hat f_{\mathbf{k}} \in \mathbb{C}\f$,
+ * \f$\mathbf{k}\in I_{\mathbf{N}}\f$, we consider the
+ * fast evaluation of the trigonometric polynomial
+ * \f[
+ * f\left(\mathbf{x}\right)
+ * := \sum_{ \mathbf{k}\in I_{ N}} \hat{f}_{\mathbf{ k}}
+ * {\rm e}^{-2\pi{\rm i}\mathbf{k}\mathbf{ x}}
+ * \f]
+ * at given nonequispaced nodes \f$\mathbf{x}_j \in \mathbb{T}^d\f$,
+ * \f$j=0,\ldots, M-1\f$, from the
+ * \f$ d\f$-dimensional torus as well as the
+ * adjoint problem, the fast evaluation of sums of the form
+ * \f[
+ * \hat h_{\mathbf{k}} := \sum_{j=0}^{M-1} {f}_{j}
+ * {\rm e}^{2\pi{\rm i}\mathbf{k}\mathbf{ x}_j}.
+ * \f]
+ *
+ * \subsection generalisations Generalisations
+ *
+ * The generalisations of the NFFT include
+ * - NNFFT - nonequispaced in time and frequency fast Fourier transform,
+ * - NFCT/NFST - nonequispaced fast (co)sine transform,
+ * - NSFFT - nonequispaced sparse fast Fourier transform,
+ * - FPT - fast polynomial transform,
+ * - NFSFT - nonequispaced fast spherical Fourier transform.
+ *
+ * Furthermore, we consider the inversion of the above transforms by
+ * iterative methods.
+ *
+ * \section faq FAQ - Frequently Asked Questions
+ *
+ * <ol>
+ * <li> <em>Can NFFT be built on Windows?</em>
+ *
+ * Since version 3.2, NFFT should build on Windows systems under MinGW.
+ * It might be necessary to add the --disable-shared option to
+ * configure to silence linker warnings.
+ *
+ * Building under Cygwin does not work since NFFT relies on data types
+ * and functions declared in complex.h. While some of them are
+ * available as built-in functions in gcc, not all needed by NFFT are
+ * provided.
+ *
+ * Building NFFT with other compilers, e.g. Microsoft's Visual C++, has
+ * no been tested. If you have successfully be able to build NFFT, you
+ * can send us all relevant information and we will share it with
+ * others on our website.
+ * </ol>
+ */
diff --git a/doxygen/Makefile.am b/doxygen/Makefile.am
new file mode 100644
index 0000000..9ef2033
--- /dev/null
+++ b/doxygen/Makefile.am
@@ -0,0 +1,3 @@
+# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+
+EXTRA_DIST = doxygen.css doxygen.Doxyfile doxygen.Doxyfile.in footer.html header.html
\ No newline at end of file
diff --git a/doxygen/Makefile.in b/doxygen/Makefile.in
new file mode 100644
index 0000000..fd63545
--- /dev/null
+++ b/doxygen/Makefile.in
@@ -0,0 +1,426 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doxygen
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/doxygen.Doxyfile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES = doxygen.Doxyfile
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = doxygen.css doxygen.Doxyfile doxygen.Doxyfile.in footer.html header.html
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doxygen/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doxygen/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+doxygen.Doxyfile: $(top_builddir)/config.status $(srcdir)/doxygen.Doxyfile.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doxygen/doxygen.Doxyfile b/doxygen/doxygen.Doxyfile
new file mode 100644
index 0000000..07a5abc
--- /dev/null
+++ b/doxygen/doxygen.Doxyfile
@@ -0,0 +1,1143 @@
+# Doxyfile 1.3.7
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = NFFT
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER = 3.2.3
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = /LOCAL/tovo/build-nfft-3.2.3/nfft-3.2/doxygen/../doc/api
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 2 levels of 10 sub-directories under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of source
+# files, where putting all generated files in the same directory would otherwise
+# cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
+# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
+# (Japanese with English messages), Korean, Korean-en, Norwegian, Polish, Portuguese,
+# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# This tag can be used to specify the encoding used in the generated output.
+# The encoding is not always determined by the language that is chosen,
+# but also whether or not the output is meant for Windows or non-Windows users.
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
+# forces the Windows encoding (this is the default for the Windows binary),
+# whereas setting the tag to NO uses a Unix-style encoding (the default for
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is used
+# as the annotated text. Otherwise, the brief description is used as-is. If left
+# blank, the following values are used ("$name" is automatically replaced with the
+# name of the entity): "The $name class" "The $name widget" "The $name file"
+# "is" "provides" "specifies" "contains" "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
+# members of a class in the documentation of that class as if those members were
+# ordinary class members. Constructors, destructors and assignment operators of
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member
+# documentation.
+
+DETAILS_AT_TOP = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 2
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
+# only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = YES
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = NO
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = YES
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = NO
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = NO
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = NO
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST = NO
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = doxygen.c include kernel util examples applications
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
+# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm
+
+FILE_PATTERNS = *.h *.c *.dox
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE = 3rdparty applications/texture
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+
+EXCLUDE_PATTERNS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH = doc/api/html
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH = doc/api/html/images doc/api/latex/images
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+
+INPUT_FILTER =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER = /LOCAL/tovo/build-nfft-3.2.3/nfft-3.2/doxygen/header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER = /LOCAL/tovo/build-nfft-3.2.3/nfft-3.2/doxygen/footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET = /LOCAL/tovo/build-nfft-3.2.3/nfft-3.2/doxygen/doxygen.css
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES = amsmath amssymb
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED = MACRO_MV_PLAN
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse the
+# parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off. Note that this
+# option is superseded by the HAVE_DOT option below. This is only a fallback. It is
+# recommended to install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_WIDTH = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes that
+# lay further from the root node will be omitted. Note that setting this option to
+# 1 or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that a graph may be further truncated if the graph's image dimensions are
+# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT).
+# If 0 is used for the depth value (the default), the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
+
diff --git a/doxygen/doxygen.Doxyfile.in b/doxygen/doxygen.Doxyfile.in
new file mode 100644
index 0000000..c2e28ea
--- /dev/null
+++ b/doxygen/doxygen.Doxyfile.in
@@ -0,0 +1,1143 @@
+# Doxyfile 1.3.7
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = @PACKAGE_NAME@
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER = @PACKAGE_VERSION@
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = @abs_srcdir@/../doc/api
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 2 levels of 10 sub-directories under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of source
+# files, where putting all generated files in the same directory would otherwise
+# cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
+# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
+# (Japanese with English messages), Korean, Korean-en, Norwegian, Polish, Portuguese,
+# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# This tag can be used to specify the encoding used in the generated output.
+# The encoding is not always determined by the language that is chosen,
+# but also whether or not the output is meant for Windows or non-Windows users.
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
+# forces the Windows encoding (this is the default for the Windows binary),
+# whereas setting the tag to NO uses a Unix-style encoding (the default for
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is used
+# as the annotated text. Otherwise, the brief description is used as-is. If left
+# blank, the following values are used ("$name" is automatically replaced with the
+# name of the entity): "The $name class" "The $name widget" "The $name file"
+# "is" "provides" "specifies" "contains" "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
+# members of a class in the documentation of that class as if those members were
+# ordinary class members. Constructors, destructors and assignment operators of
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member
+# documentation.
+
+DETAILS_AT_TOP = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 2
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
+# only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = YES
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = NO
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = YES
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = NO
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = NO
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = NO
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST = NO
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = doxygen.c include kernel util examples applications
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
+# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm
+
+FILE_PATTERNS = *.h *.c *.dox
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE = 3rdparty applications/texture
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+
+EXCLUDE_PATTERNS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH = doc/api/html
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH = doc/api/html/images doc/api/latex/images
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+
+INPUT_FILTER =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER = @abs_srcdir@/header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER = @abs_srcdir@/footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET = @abs_srcdir@/doxygen.css
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES = amsmath amssymb
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED = MACRO_MV_PLAN
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse the
+# parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off. Note that this
+# option is superseded by the HAVE_DOT option below. This is only a fallback. It is
+# recommended to install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_WIDTH = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes that
+# lay further from the root node will be omitted. Note that setting this option to
+# 1 or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that a graph may be further truncated if the graph's image dimensions are
+# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT).
+# If 0 is used for the depth value (the default), the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
+
diff --git a/doxygen/doxygen.css b/doxygen/doxygen.css
new file mode 100644
index 0000000..c023715
--- /dev/null
+++ b/doxygen/doxygen.css
@@ -0,0 +1,360 @@
+BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV
+{
+ font-family: Geneva, Arial, Helvetica, sans-serif;
+ color: #000000;
+}
+
+BODY,TD
+{
+ font-size: 90%;
+}
+
+H1
+{
+ text-align: center;
+ font-size: 160%;
+}
+
+H1nc
+{
+ font-size: 210%;
+}
+
+H2
+{
+ font-size: 120%;
+}
+
+H3
+{
+ font-size: 100%;
+}
+
+CAPTION
+{
+ font-weight: bold
+}
+
+a
+{
+ color: #000000;
+ text-decoration: none;
+}
+
+div.qindex {
+ width: 97%;
+ color: #FFFFFF;
+ background-color: #177665;
+ border-left: 20px solid #7FACA2;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+
+DIV.nav {
+ width: 100%;
+ background-color: #177665;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+DIV.navtab {
+ background-color: #177665;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+TD.navtab {
+ font-size: 70%;
+}
+
+a.qindex:link
+{
+ color: #FFFFFF;
+ background-color: #177665;
+}
+a.qindex:visited
+{
+ color: #FFFFFF;
+ background-color: #177665;
+}
+a.qindex:focus
+{
+ color: #7FACA2;
+ background-color: #177665;
+}
+a.qindex:hover
+{
+ color: #7FACA2;
+ background-color: #177665;
+}
+a.qindex:active
+{
+ color: #7FACA2;
+ background-color: #177665;
+}
+
+a.qindexHL:link
+{
+ color: #FFFFFF;
+ background-color: #177665;
+}
+a.qindexHL:visited
+{
+ color: #FFFFFF;
+ background-color: #177665;
+}
+a.qindexHL:focus
+{
+ color: #7FACA2;
+ background-color: #177665;
+}
+a.qindexHL:hover
+{
+ color: #7FACA2;
+ background-color: #177665;
+}
+a.qindexHL:active
+{
+ color: #7FACA2;
+ background-color: #177665;
+}
+
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
+A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
+A.codeRef:link { font-weight: normal; color: #0000FF}
+A.codeRef:visited { font-weight: normal; color: #0000FF}
+DL.el { margin-left: -1cm }
+.fragment {
+ font-family: Fixed, monospace;
+ font-size: 95%;
+}
+PRE.fragment {
+ border: 1px solid #CCCCCC;
+ background-color: #f5f5f5;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ margin-left: 2px;
+ margin-right: 8px;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+TD.md { background-color: #F4F4FB; font-weight: bold; }
+TD.mdPrefix {
+ background-color: #F4F4FB;
+ color: #606060;
+ font-size: 80%;
+}
+TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
+DIV.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ margin-bottom: 6px;
+ font-weight: bold;
+}
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
+BODY {
+ background: white;
+ color: black;
+ margin-right: 20px;
+ margin-left: 20px;
+}
+TD.indexkey {
+ background-color: #BFDCD2;
+ font-weight: bold;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #7FACA2;
+}
+TD.indexvalue {
+ background-color: #BFDCD2;
+ font-style: italic;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #7FACA2;
+}
+TR.memlist {
+ background-color: #f0f0f0;
+}
+P.formulaDsp { text-align: center; }
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+SPAN.keyword { color: #008000 }
+SPAN.keywordtype { color: #604020 }
+SPAN.keywordflow { color: #e08000 }
+SPAN.comment { color: #800000 }
+SPAN.preprocessor { color: #806020 }
+SPAN.stringliteral { color: #002080 }
+SPAN.charliteral { color: #008080 }
+.mdTable {
+ border: 1px solid #868686;
+ background-color: #F4F4FB;
+}
+.mdRow {
+ padding: 8px 10px;
+}
+.mdescLeft {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.mdescRight {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.memItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplParams {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ color: #606060;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.search { color: #003399;
+ font-weight: bold;
+}
+FORM.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+INPUT.search { font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #eeeeff;
+}
+TD.tiny { font-size: 75%;
+}
+.dirtab { padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #b0b0b0;
+}
+TH.dirtab { background: #eeeeff;
+ font-weight: bold;
+}
+HR { height: 1px;
+ border: none;
+ border-top: 1px solid black;
+}
+
+ul {
+ padding-top:0px;
+ padding-bottom:0px;
+ margin:0px;
+}
diff --git a/doxygen/footer.html b/doxygen/footer.html
new file mode 100644
index 0000000..be7deaa
--- /dev/null
+++ b/doxygen/footer.html
@@ -0,0 +1,4 @@
+ <hr size="1"/>
+ Generated on $date by Doxygen $doxygenversion
+ </body>
+</html>
diff --git a/doxygen/header.html b/doxygen/header.html
new file mode 100644
index 0000000..624b1a3
--- /dev/null
+++ b/doxygen/header.html
@@ -0,0 +1,20 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+ <title>
+ $projectname $projectnumber API Reference - $title
+ </title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css"/>
+ <link href="tabs.css" rel="stylesheet" type="text/css"/>
+ </head>
+ <body>
+ <table>
+ <tr>
+ <td align="left" valign="top">
+ <img src="images/logo.png" alt="NFFT Logo" style="frame-width:0px;margin:0px;padding-top:11px">
+ </td>
+ <td align="left" valign="top" width="100%" style="frame-width:0px;margin:0px;padding:0px;font-size:55px">
+ $projectnumber
+ </td>
+ </tr>
+ </table>
diff --git a/examples/Makefile.am b/examples/Makefile.am
new file mode 100644
index 0000000..e391d39
--- /dev/null
+++ b/examples/Makefile.am
@@ -0,0 +1,52 @@
+if HAVE_NFCT
+ DIR_NFCT=nfct
+else
+ LIB_NFCT=
+endif
+
+if HAVE_NFST
+ DIR_NFST=nfst
+else
+ DIR_NFST=
+endif
+
+if HAVE_NFSFT
+ DIR_NFSFT=nfsft
+else
+ DIR_NFSFT=
+endif
+
+if HAVE_NFSOFT
+ DIR_NFSOFT=nfsoft
+else
+ DIR_NFSOFT=
+endif
+
+if HAVE_NNFFT
+ DIR_NNFFT=nnfft
+else
+ DIR_NNFFT=
+endif
+
+if HAVE_NSFFT
+ DIR_NSFFT=nsfft
+else
+ DIR_NSFFT=
+endif
+
+if HAVE_MRI
+ DIR_MRI=mri
+else
+ DIR_MRI=
+endif
+
+if HAVE_FPT
+ DIR_FPT=fpt
+else
+ DIR_FPT=
+endif
+
+SUBDIRS = $(DIR_FPT) $(DIR_MRI) $(DIR_NFCT) nfft $(DIR_NFSFT) $(DIR_NFSOFT) $(DIR_NFST) \
+ $(DIR_NNFFT) $(DIR_NSFFT) solver
+
+EXTRA_DIST = doxygen.c
diff --git a/examples/Makefile.in b/examples/Makefile.in
new file mode 100644
index 0000000..ce371a8
--- /dev/null
+++ b/examples/Makefile.in
@@ -0,0 +1,656 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = examples
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = fpt mri nfct nfft nfsft nfsoft nfst nnfft nsfft solver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ at HAVE_NFCT_TRUE@DIR_NFCT = nfct
+ at HAVE_NFCT_FALSE@LIB_NFCT =
+ at HAVE_NFST_FALSE@DIR_NFST =
+ at HAVE_NFST_TRUE@DIR_NFST = nfst
+ at HAVE_NFSFT_FALSE@DIR_NFSFT =
+ at HAVE_NFSFT_TRUE@DIR_NFSFT = nfsft
+ at HAVE_NFSOFT_FALSE@DIR_NFSOFT =
+ at HAVE_NFSOFT_TRUE@DIR_NFSOFT = nfsoft
+ at HAVE_NNFFT_FALSE@DIR_NNFFT =
+ at HAVE_NNFFT_TRUE@DIR_NNFFT = nnfft
+ at HAVE_NSFFT_FALSE@DIR_NSFFT =
+ at HAVE_NSFFT_TRUE@DIR_NSFFT = nsfft
+ at HAVE_MRI_FALSE@DIR_MRI =
+ at HAVE_MRI_TRUE@DIR_MRI = mri
+ at HAVE_FPT_FALSE@DIR_FPT =
+ at HAVE_FPT_TRUE@DIR_FPT = fpt
+SUBDIRS = $(DIR_FPT) $(DIR_MRI) $(DIR_NFCT) nfft $(DIR_NFSFT) $(DIR_NFSOFT) $(DIR_NFST) \
+ $(DIR_NNFFT) $(DIR_NSFFT) solver
+
+EXTRA_DIST = doxygen.c
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu examples/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+cscopelist-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+ cscopelist-recursive ctags-recursive install-am install-strip \
+ tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist cscopelist-recursive ctags ctags-recursive \
+ distclean distclean-generic distclean-libtool distclean-tags \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-recursive uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/doxygen.c b/examples/doxygen.c
new file mode 100644
index 0000000..f10e24e
--- /dev/null
+++ b/examples/doxygen.c
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */
+
+/**
+ * \defgroup examples Examples
+ */
diff --git a/examples/fpt/Makefile.am b/examples/fpt/Makefile.am
new file mode 100644
index 0000000..caf41a8
--- /dev/null
+++ b/examples/fpt/Makefile.am
@@ -0,0 +1,10 @@
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+# programs
+noinst_PROGRAMS = simple_test
+
+# sources
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
diff --git a/examples/fpt/Makefile.in b/examples/fpt/Makefile.in
new file mode 100644
index 0000000..449a27e
--- /dev/null
+++ b/examples/fpt/Makefile.in
@@ -0,0 +1,556 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT)
+subdir = examples/fpt
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(simple_test_SOURCES)
+DIST_SOURCES = $(simple_test_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+# sources
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/fpt/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu examples/fpt/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES)
+ @rm -f simple_test$(EXEEXT)
+ $(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/fpt/simple_test.c b/examples/fpt/simple_test.c
new file mode 100644
index 0000000..e883896
--- /dev/null
+++ b/examples/fpt/simple_test.c
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include "config.h"
+
+/* standard headers */
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+
+/* It is important to include complex.h before nfft3.h. */
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include <fftw3.h>
+
+/* NFFT3 header */
+#include "nfft3.h"
+#include "nfft3util.h"
+
+/* Two times Pi */
+#define KPI2 6.2831853071795864769252867665590057683943387987502
+
+int main(void)
+{
+ /* This example shows the use of the fast polynomial transform to evaluate a
+ * finite expansion in Legendre polynomials,
+ *
+ * f(x) = a_0 P_0(x) + a_1 P_1(x) + ... + a_N P_N(x) (1)
+ *
+ * at the Chebyshev nodes x_j = cos(j*pi/N), j=0,1,...,N. */
+ const int N = 8;
+
+ /* An fpt_set is a data structure that contains precomputed data for a number
+ * of different polynomial transforms. Here, we need only one transform. the
+ * second parameter (t) is the exponent of the maximum transform size desired
+ * (2^t), i.e., t = 3 means that N in (1) can be at most N = 8. */
+ fpt_set set = fpt_init(1,lrint(ceil(log2((double)N))),0U);
+
+ /* Three-term recurrence coefficients for Legendre polynomials */
+ double *alpha = malloc((N+2)*sizeof(double)),
+ *beta = malloc((N+2)*sizeof(double)),
+ *gamma = malloc((N+2)*sizeof(double));
+
+ /* alpha[0] and beta[0] are not referenced. */
+ alpha[0] = beta[0] = 0.0;
+ /* gamma[0] contains the value of P_0(x) (which is a constant). */
+ gamma[0] = 1.0;
+
+ /* Actual three-term recurrence coefficients for Legendre polynomials */
+ {
+ int k;
+ for (k = 0; k <= N; k++)
+ {
+ alpha[k+1] = ((double)(2*k+1))/((double)(k+1));
+ beta[k+1] = 0.0;
+ gamma[k+1] = -((double)(k))/((double)(k+1));
+ }
+ }
+
+ printf(
+ "Computing a fast polynomial transform (FPT) and a fast discrete cosine \n"
+ "transform (DCT) to evaluate\n\n"
+ " f_j = a_0 P_0(x_j) + a_1 P_1(x_j) + ... + a_N P_N(x_j), j=0,1,...,N,\n\n"
+ "with N=%d, x_j = cos(j*pi/N), j=0,1,...N, the Chebyshev nodes, a_k,\n"
+ "k=0,1,...,N, random Fourier coefficients in [-1,1]x[-1,1]*I, and P_k,\n"
+ "k=0,1,...,N, the Legendre polynomials.",N
+ );
+
+ /* Random seed, makes things reproducible. */
+ nfft_srand48(314);
+
+ /* The function fpt_repcompute actually does the precomputation for a single
+ * transform. It needs arrays alpha, beta, and gamma, containing the three-
+ * term recurrence coefficients, here of the Legendre polynomials. The format
+ * is explained above. The sixth parameter (k_start) is where the index in the
+ * linear combination (1) starts, here k_start=0. The seventh parameter
+ * (kappa) is the threshold which has an influence on the accuracy of the fast
+ * polynomial transform. Usually, kappa = 1000 is a good choice. */
+ fpt_precompute(set,0,alpha,beta,gamma,0,1000.0);
+
+
+ {
+ /* Arrays for Fourier coefficients and function values. */
+ double _Complex *a = malloc((N+1)*sizeof(double _Complex));
+ double _Complex *b = malloc((N+1)*sizeof(double _Complex));
+ double *f = malloc((N+1)*sizeof(double _Complex));
+
+ /* Plan for discrete cosine transform */
+ const int NP1 = N + 1;
+ fftw_r2r_kind kind = FFTW_REDFT00;
+ fftw_plan p = fftw_plan_many_r2r(1, &NP1, 1, (double*)b, NULL, 2, 1,
+ (double*)f, NULL, 1, 1, &kind, 0U);
+
+ /* random Fourier coefficients */
+ {
+ int k;
+ printf("\n2) Random Fourier coefficients a_k, k=0,1,...,N:\n");
+ for (k = 0; k <= N; k++)
+ {
+ a[k] = 2.0*nfft_drand48() - 1.0; /* for debugging: use k+1 */
+ printf(" a_%-2d = %+5.3lE\n",k,creal(a[k]));
+ }
+ }
+
+ /* fast polynomial transform */
+ fpt_trafo(set,0,a,b,N,0U);
+
+ /* Renormalize coefficients b_j, j=1,2,...,N-1 owing to how FFTW defines a
+ * DCT-I; see
+ * http://www.fftw.org/fftw3_doc/1d-Real_002deven-DFTs-_0028DCTs_0029.html
+ * for details */
+ {
+ int j;
+ for (j = 1; j < N; j++)
+ b[j] *= 0.5;
+ }
+
+ /* discrete cosine transform */
+ fftw_execute(p);
+
+ {
+ int j;
+ printf("\n3) Function values f_j, j=1,1,...,M:\n");
+ for (j = 0; j <= N; j++)
+ printf(" f_%-2d = %+5.3lE\n",j,f[j]);
+ }
+
+ /* cleanup */
+ free(a);
+ free(b);
+ free(f);
+
+ /* cleanup */
+ fftw_destroy_plan(p);
+ }
+
+ /* cleanup */
+ fpt_finalize(set);
+ free(alpha);
+ free(beta);
+ free(gamma);
+
+ return EXIT_SUCCESS;
+}
diff --git a/examples/mri/Makefile.am b/examples/mri/Makefile.am
new file mode 100644
index 0000000..454ceff
--- /dev/null
+++ b/examples/mri/Makefile.am
@@ -0,0 +1,2 @@
+# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+
diff --git a/examples/mri/Makefile.in b/examples/mri/Makefile.in
new file mode 100644
index 0000000..834407d
--- /dev/null
+++ b/examples/mri/Makefile.in
@@ -0,0 +1,422 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = examples/mri
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/mri/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu examples/mri/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/nfct/Makefile.am b/examples/nfct/Makefile.am
new file mode 100644
index 0000000..fc85794
--- /dev/null
+++ b/examples/nfct/Makefile.am
@@ -0,0 +1,10 @@
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = simple_test
+
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = README
diff --git a/examples/nfct/Makefile.in b/examples/nfct/Makefile.in
new file mode 100644
index 0000000..16a715d
--- /dev/null
+++ b/examples/nfct/Makefile.in
@@ -0,0 +1,555 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT)
+subdir = examples/nfct
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(simple_test_SOURCES)
+DIST_SOURCES = $(simple_test_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nfct/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu examples/nfct/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES)
+ @rm -f simple_test$(EXEEXT)
+ $(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/nfct/README b/examples/nfct/README
new file mode 100644
index 0000000..77f8d61
--- /dev/null
+++ b/examples/nfct/README
@@ -0,0 +1,17 @@
+Examples to the nonequispaced fast cosine transform
+
+Author
+
+ Stefan Kunis <kunis at mathematik.tu-chemnitz.de>
+ Steffen Klatt <heracleum.mantegazziani at web.de>
+
+List of files and purpose
+
+ README this file
+ simple_test.c introductory example how to use the nfct
+
+References
+
+ M. Fenn and D. Potts.
+ Fast summation based on fast trigonometric transforms at nonequispaced nodes.
+ Numer. Linear Algebra Appl., 12:161--169, 2005.
diff --git a/examples/nfct/simple_test.c b/examples/nfct/simple_test.c
new file mode 100644
index 0000000..aba4dbf
--- /dev/null
+++ b/examples/nfct/simple_test.c
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+static void simple_test_nfct_1d(void)
+{
+ int j,k;
+ nfct_plan p;
+
+ int N=14;
+ int M=19;
+
+ /** init an one dimensional plan */
+ nfct_init_1d(&p,N,M);
+
+ /** init pseudo random nodes */
+ for(j = 0; j < p.d*p.M_total; j++)
+ p.x[j] = 0.5 * ((double)rand()) / RAND_MAX;
+
+ /** precompute psi, the entries of the matrix B */
+ if( p.nfct_flags & PRE_PSI)
+ nfct_precompute_psi( &p);
+
+ /** init pseudo random Fourier coefficients and show them */
+ for(k = 0; k < p.N_total; k++)
+ p.f_hat[k] = (double)rand() / RAND_MAX;
+
+ nfft_vpr_double(p.f_hat,p.N_total,"given Fourier coefficients, vector f_hat");
+
+ /** direct trafo and show the result */
+ nfct_trafo_direct(&p);
+ nfft_vpr_double(p.f,p.M_total,"ndct, vector f");
+
+ /** approx. trafo and show the result */
+ nfct_trafo(&p);
+ nfft_vpr_double(p.f,p.M_total,"nfct, vector f");
+
+ /** approx. adjoint and show the result */
+ nfct_adjoint(&p);
+ nfft_vpr_double(p.f_hat,p.N_total,"adjoint ndct, vector f_hat");
+
+ /** approx. adjoint and show the result */
+ nfct_adjoint_direct(&p);
+ nfft_vpr_double(p.f_hat,p.N_total,"adjoint nfct, vector f_hat");
+
+ /** finalise the one dimensional plan */
+ nfct_finalize(&p);
+}
+
+int main(void)
+{
+ system("clear");
+ printf("computing one dimensional ndct, nfct and adjoint ndct, nfct\n\n");
+ simple_test_nfct_1d();
+ printf("\n\n");
+
+ return 1;
+}
diff --git a/examples/nfft/Makefile.am b/examples/nfft/Makefile.am
new file mode 100644
index 0000000..dc1c490
--- /dev/null
+++ b/examples/nfft/Makefile.am
@@ -0,0 +1,61 @@
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+if HAVE_THREADS
+ SIMPLE_TEST_THREADS=simple_test_threads
+else
+ SIMPLE_TEST_THREADS=
+endif
+
+if HAVE_THREADS
+if HAVE_OPENMP
+ NFFT_BENCHOMP_PROGS=nfft_benchomp nfft_benchomp_createdataset nfft_benchomp_detail_single nfft_benchomp_detail_threads
+else
+ NFFT_BENCHOMP_PROGS=
+endif
+else
+ NFFT_BENCHOMP_PROGS=
+endif
+
+noinst_PROGRAMS = simple_test $(SIMPLE_TEST_THREADS) ndft_fast taylor_nfft flags nfft_times $(NFFT_BENCHOMP_PROGS)
+
+if HAVE_THREADS
+ simple_test_threads_SOURCES = simple_test_threads.c
+ simple_test_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+endif
+
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+ndft_fast_SOURCES = ndft_fast.c
+ndft_fast_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+taylor_nfft_SOURCES = taylor_nfft.c
+taylor_nfft_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+flags_SOURCES = flags.c
+flags_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+nfft_times_SOURCES = nfft_times.c
+nfft_times_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+if HAVE_THREADS
+if HAVE_OPENMP
+ nfft_benchomp_SOURCES = nfft_benchomp.c
+ nfft_benchomp_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ nfft_benchomp_CFLAGS = $(OPENMP_CFLAGS)
+
+ nfft_benchomp_createdataset_SOURCES = nfft_benchomp_createdataset.c
+ nfft_benchomp_createdataset_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+ nfft_benchomp_detail_single_SOURCES = nfft_benchomp_detail.c
+ nfft_benchomp_detail_single_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+ nfft_benchomp_detail_threads_SOURCES = nfft_benchomp_detail.c
+ nfft_benchomp_detail_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ nfft_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
+EXTRA_DIST = flags.m ndft_fast.m taylor_nfft.m README
diff --git a/examples/nfft/Makefile.in b/examples/nfft/Makefile.in
new file mode 100644
index 0000000..d9bb05f
--- /dev/null
+++ b/examples/nfft/Makefile.in
@@ -0,0 +1,710 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT) $(am__EXEEXT_1) \
+ ndft_fast$(EXEEXT) taylor_nfft$(EXEEXT) flags$(EXEEXT) \
+ nfft_times$(EXEEXT) $(am__EXEEXT_2)
+subdir = examples/nfft
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+ at HAVE_THREADS_TRUE@am__EXEEXT_1 = simple_test_threads$(EXEEXT)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am__EXEEXT_2 = \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ nfft_benchomp$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ nfft_benchomp_createdataset$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ nfft_benchomp_detail_single$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ nfft_benchomp_detail_threads$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
+am_flags_OBJECTS = flags.$(OBJEXT)
+flags_OBJECTS = $(am_flags_OBJECTS)
+flags_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_ndft_fast_OBJECTS = ndft_fast.$(OBJEXT)
+ndft_fast_OBJECTS = $(am_ndft_fast_OBJECTS)
+ndft_fast_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am__nfft_benchomp_SOURCES_DIST = nfft_benchomp.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfft_benchomp_OBJECTS = nfft_benchomp-nfft_benchomp.$(OBJEXT)
+nfft_benchomp_OBJECTS = $(am_nfft_benchomp_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_DEPENDENCIES = $(top_builddir)/libnfft3_threads.la
+nfft_benchomp_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(nfft_benchomp_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__nfft_benchomp_createdataset_SOURCES_DIST = \
+ nfft_benchomp_createdataset.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfft_benchomp_createdataset_OBJECTS = nfft_benchomp_createdataset.$(OBJEXT)
+nfft_benchomp_createdataset_OBJECTS = \
+ $(am_nfft_benchomp_createdataset_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_createdataset_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am__nfft_benchomp_detail_single_SOURCES_DIST = nfft_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfft_benchomp_detail_single_OBJECTS = nfft_benchomp_detail.$(OBJEXT)
+nfft_benchomp_detail_single_OBJECTS = \
+ $(am_nfft_benchomp_detail_single_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_single_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am__nfft_benchomp_detail_threads_SOURCES_DIST = \
+ nfft_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfft_benchomp_detail_threads_OBJECTS = nfft_benchomp_detail_threads-nfft_benchomp_detail.$(OBJEXT)
+nfft_benchomp_detail_threads_OBJECTS = \
+ $(am_nfft_benchomp_detail_threads_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_threads_DEPENDENCIES = $(top_builddir)/libnfft3_threads.la
+nfft_benchomp_detail_threads_LINK = $(LIBTOOL) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(nfft_benchomp_detail_threads_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+am_nfft_times_OBJECTS = nfft_times.$(OBJEXT)
+nfft_times_OBJECTS = $(am_nfft_times_OBJECTS)
+nfft_times_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am__simple_test_threads_SOURCES_DIST = simple_test_threads.c
+ at HAVE_THREADS_TRUE@am_simple_test_threads_OBJECTS = \
+ at HAVE_THREADS_TRUE@ simple_test_threads.$(OBJEXT)
+simple_test_threads_OBJECTS = $(am_simple_test_threads_OBJECTS)
+ at HAVE_THREADS_TRUE@simple_test_threads_DEPENDENCIES = \
+ at HAVE_THREADS_TRUE@ $(top_builddir)/libnfft3_threads.la
+am_taylor_nfft_OBJECTS = taylor_nfft.$(OBJEXT)
+taylor_nfft_OBJECTS = $(am_taylor_nfft_OBJECTS)
+taylor_nfft_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(flags_SOURCES) $(ndft_fast_SOURCES) \
+ $(nfft_benchomp_SOURCES) \
+ $(nfft_benchomp_createdataset_SOURCES) \
+ $(nfft_benchomp_detail_single_SOURCES) \
+ $(nfft_benchomp_detail_threads_SOURCES) $(nfft_times_SOURCES) \
+ $(simple_test_SOURCES) $(simple_test_threads_SOURCES) \
+ $(taylor_nfft_SOURCES)
+DIST_SOURCES = $(flags_SOURCES) $(ndft_fast_SOURCES) \
+ $(am__nfft_benchomp_SOURCES_DIST) \
+ $(am__nfft_benchomp_createdataset_SOURCES_DIST) \
+ $(am__nfft_benchomp_detail_single_SOURCES_DIST) \
+ $(am__nfft_benchomp_detail_threads_SOURCES_DIST) \
+ $(nfft_times_SOURCES) $(simple_test_SOURCES) \
+ $(am__simple_test_threads_SOURCES_DIST) $(taylor_nfft_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+ at HAVE_THREADS_FALSE@SIMPLE_TEST_THREADS =
+ at HAVE_THREADS_TRUE@SIMPLE_TEST_THREADS = simple_test_threads
+ at HAVE_OPENMP_FALSE@@HAVE_THREADS_TRUE at NFFT_BENCHOMP_PROGS =
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at NFFT_BENCHOMP_PROGS = nfft_benchomp nfft_benchomp_createdataset nfft_benchomp_detail_single nfft_benchomp_detail_threads
+ at HAVE_THREADS_FALSE@NFFT_BENCHOMP_PROGS =
+ at HAVE_THREADS_TRUE@simple_test_threads_SOURCES = simple_test_threads.c
+ at HAVE_THREADS_TRUE@simple_test_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ndft_fast_SOURCES = ndft_fast.c
+ndft_fast_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+taylor_nfft_SOURCES = taylor_nfft.c
+taylor_nfft_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+flags_SOURCES = flags.c
+flags_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+nfft_times_SOURCES = nfft_times.c
+nfft_times_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_SOURCES = nfft_benchomp.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_CFLAGS = $(OPENMP_CFLAGS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_createdataset_SOURCES = nfft_benchomp_createdataset.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_createdataset_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_single_SOURCES = nfft_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_single_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_threads_SOURCES = nfft_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
+EXTRA_DIST = flags.m ndft_fast.m taylor_nfft.m README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nfft/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu examples/nfft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+flags$(EXEEXT): $(flags_OBJECTS) $(flags_DEPENDENCIES) $(EXTRA_flags_DEPENDENCIES)
+ @rm -f flags$(EXEEXT)
+ $(LINK) $(flags_OBJECTS) $(flags_LDADD) $(LIBS)
+ndft_fast$(EXEEXT): $(ndft_fast_OBJECTS) $(ndft_fast_DEPENDENCIES) $(EXTRA_ndft_fast_DEPENDENCIES)
+ @rm -f ndft_fast$(EXEEXT)
+ $(LINK) $(ndft_fast_OBJECTS) $(ndft_fast_LDADD) $(LIBS)
+nfft_benchomp$(EXEEXT): $(nfft_benchomp_OBJECTS) $(nfft_benchomp_DEPENDENCIES) $(EXTRA_nfft_benchomp_DEPENDENCIES)
+ @rm -f nfft_benchomp$(EXEEXT)
+ $(nfft_benchomp_LINK) $(nfft_benchomp_OBJECTS) $(nfft_benchomp_LDADD) $(LIBS)
+nfft_benchomp_createdataset$(EXEEXT): $(nfft_benchomp_createdataset_OBJECTS) $(nfft_benchomp_createdataset_DEPENDENCIES) $(EXTRA_nfft_benchomp_createdataset_DEPENDENCIES)
+ @rm -f nfft_benchomp_createdataset$(EXEEXT)
+ $(LINK) $(nfft_benchomp_createdataset_OBJECTS) $(nfft_benchomp_createdataset_LDADD) $(LIBS)
+nfft_benchomp_detail_single$(EXEEXT): $(nfft_benchomp_detail_single_OBJECTS) $(nfft_benchomp_detail_single_DEPENDENCIES) $(EXTRA_nfft_benchomp_detail_single_DEPENDENCIES)
+ @rm -f nfft_benchomp_detail_single$(EXEEXT)
+ $(LINK) $(nfft_benchomp_detail_single_OBJECTS) $(nfft_benchomp_detail_single_LDADD) $(LIBS)
+nfft_benchomp_detail_threads$(EXEEXT): $(nfft_benchomp_detail_threads_OBJECTS) $(nfft_benchomp_detail_threads_DEPENDENCIES) $(EXTRA_nfft_benchomp_detail_threads_DEPENDENCIES)
+ @rm -f nfft_benchomp_detail_threads$(EXEEXT)
+ $(nfft_benchomp_detail_threads_LINK) $(nfft_benchomp_detail_threads_OBJECTS) $(nfft_benchomp_detail_threads_LDADD) $(LIBS)
+nfft_times$(EXEEXT): $(nfft_times_OBJECTS) $(nfft_times_DEPENDENCIES) $(EXTRA_nfft_times_DEPENDENCIES)
+ @rm -f nfft_times$(EXEEXT)
+ $(LINK) $(nfft_times_OBJECTS) $(nfft_times_LDADD) $(LIBS)
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES)
+ @rm -f simple_test$(EXEEXT)
+ $(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+simple_test_threads$(EXEEXT): $(simple_test_threads_OBJECTS) $(simple_test_threads_DEPENDENCIES) $(EXTRA_simple_test_threads_DEPENDENCIES)
+ @rm -f simple_test_threads$(EXEEXT)
+ $(LINK) $(simple_test_threads_OBJECTS) $(simple_test_threads_LDADD) $(LIBS)
+taylor_nfft$(EXEEXT): $(taylor_nfft_OBJECTS) $(taylor_nfft_DEPENDENCIES) $(EXTRA_taylor_nfft_DEPENDENCIES)
+ @rm -f taylor_nfft$(EXEEXT)
+ $(LINK) $(taylor_nfft_OBJECTS) $(taylor_nfft_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flags.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ndft_fast.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft_benchomp-nfft_benchomp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft_benchomp_createdataset.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft_benchomp_detail.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft_times.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test_threads.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/taylor_nfft.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+nfft_benchomp-nfft_benchomp.o: nfft_benchomp.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_CFLAGS) $(CFLAGS) -MT nfft_benchomp-nfft_benchomp.o -MD -MP -MF $(DEPDIR)/nfft_benchomp-nfft_benchomp.Tpo -c -o nfft_benchomp-nfft_benchomp.o `test -f 'nfft_benchomp.c' || echo '$(srcdir)/'`nfft_benchomp.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nfft_benchomp-nfft_benchomp.Tpo $(DEPDIR)/nfft_benchomp-nfft_benchomp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nfft_benchomp.c' object='nfft_benchomp-nfft_benchomp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_CFLAGS) $(CFLAGS) -c -o nfft_benchomp-nfft_benchomp.o `test -f 'nfft_benchomp.c' || echo '$(srcdir)/'`nfft_benchomp.c
+
+nfft_benchomp-nfft_benchomp.obj: nfft_benchomp.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_CFLAGS) $(CFLAGS) -MT nfft_benchomp-nfft_benchomp.obj -MD -MP -MF $(DEPDIR)/nfft_benchomp-nfft_benchomp.Tpo -c -o nfft_benchomp-nfft_benchomp.obj `if test -f 'nfft_benchomp.c'; then $(CYGPATH_W) 'nfft_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/nfft_benchomp.c'; fi`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nfft_benchomp-nfft_benchomp.Tpo $(DEPDIR)/nfft_benchomp-nfft_benchomp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nfft_benchomp.c' object='nfft_benchomp-nfft_benchomp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_CFLAGS) $(CFLAGS) -c -o nfft_benchomp-nfft_benchomp.obj `if test -f 'nfft_benchomp.c'; then $(CYGPATH_W) 'nfft_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/nfft_benchomp.c'; fi`
+
+nfft_benchomp_detail_threads-nfft_benchomp_detail.o: nfft_benchomp_detail.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT nfft_benchomp_detail_threads-nfft_benchomp_detail.o -MD -MP -MF $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Tpo -c -o nfft_benchomp_detail_threads-nfft_benchomp_detail.o `test -f 'nfft_benchomp_detail.c' || echo '$(srcdir)/'`nfft_benchomp_detail.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Tpo $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nfft_benchomp_detail.c' object='nfft_benchomp_detail_threads-nfft_benchomp_detail.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o nfft_benchomp_detail_threads-nfft_benchomp_detail.o `test -f 'nfft_benchomp_detail.c' || echo '$(srcdir)/'`nfft_benchomp_detail.c
+
+nfft_benchomp_detail_threads-nfft_benchomp_detail.obj: nfft_benchomp_detail.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT nfft_benchomp_detail_threads-nfft_benchomp_detail.obj -MD -MP -MF $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Tpo -c -o nfft_benchomp_detail_threads-nfft_benchomp_detail.obj `if test -f 'nfft_benchomp_detail.c'; then $(CYGPATH_W) 'nfft_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/nfft_benchomp_detail.c'; fi`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Tpo $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nfft_benchomp_detail.c' object='nfft_benchomp_detail_threads-nfft_benchomp_detail.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o nfft_benchomp_detail_threads-nfft_benchomp_detail.obj `if test -f 'nfft_benchomp_detail.c'; then $(CYGPATH_W) 'nfft_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/nfft_benchomp_detail.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/nfft/README b/examples/nfft/README
new file mode 100644
index 0000000..338fdfd
--- /dev/null
+++ b/examples/nfft/README
@@ -0,0 +1,30 @@
+Examples to the nonequispaced FFT
+
+Author
+
+ Stefan Kunis <kunis at mathematik.tu-chemnitz.de>
+
+List of files and purpose
+
+ README this file
+ simple_test.c introductory example how to use the nfft
+ flags.c compares different precomputation strategies for the nfft
+ flags.m visualisation with MATLAB, loads data files
+ 'flags.data0.gaussian', ... (previously computed by the
+ executable flags (where the window function has to be set
+ and the whole library needs recompilation); calls also the
+ executable taylor_nfft
+ ndft_fast.c compares different precomputation strategies for the ndft
+ ndft_fast.m visualisation with MATLAB, calls the executable ndft_fast
+ nfft_benchomp.c runs benchmarks for nfft OpenMP code and writes results as
+ pgfplots to nfft_benchomp_results_plots.tex, uses
+ nfft_benchomp_createdataset.c and nfft_benchomp_detail.c
+ nfft_times.c compares 1d, 2d, and 3d times to compute nffts and ffts,
+ outputs a latex-table
+ taylor_nfft.c compares the nfft with a taylor expansion based one
+ taylor_nfft.m visualisation with MATLAB, calls the executable taylor_nfft
+
+References
+
+ Kunis, S. and Potts, D. Time and memory requirements of the nonequispaced FFT
+ Preprint 2006-1, Chemnitz University of Technology, Faculty of Mathematics
diff --git a/examples/nfft/flags.c b/examples/nfft/flags.c
new file mode 100644
index 0000000..8c21691
--- /dev/null
+++ b/examples/nfft/flags.c
@@ -0,0 +1,349 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: flags.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/*! \file flags.c
+ *
+ * \brief Testing the nfft.
+ *
+ * \author Stefan Kunis
+ *
+ * References: Time and Memory Requirements of the Nonequispaced FFT
+ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+#ifdef GAUSSIAN
+ unsigned test_fg=1;
+#else
+ unsigned test_fg=0;
+#endif
+
+#ifdef MEASURE_TIME_FFTW
+ unsigned test_fftw=1;
+#else
+ unsigned test_fftw=0;
+#endif
+
+#ifdef MEASURE_TIME
+ unsigned test=1;
+#else
+ unsigned test=0;
+#endif
+
+static void flags_cp(nfft_plan *dst, nfft_plan *src)
+{
+ dst->x=src->x;
+ dst->f_hat=src->f_hat;
+ dst->f=src->f;
+ dst->g1=src->g1;
+ dst->g2=src->g2;
+ dst->my_fftw_plan1=src->my_fftw_plan1;
+ dst->my_fftw_plan2=src->my_fftw_plan2;
+}
+
+static void time_accuracy(int d, int N, int M, int n, int m, unsigned test_ndft,
+ unsigned test_pre_full_psi)
+{
+ int r, NN[d], nn[d];
+ double t_ndft, t, e;
+ double _Complex *swapndft = NULL;
+ ticks t0, t1;
+
+ nfft_plan p;
+ nfft_plan p_pre_phi_hut;
+ nfft_plan p_fg_psi;
+ nfft_plan p_pre_lin_psi;
+ nfft_plan p_pre_fg_psi;
+ nfft_plan p_pre_psi;
+ nfft_plan p_pre_full_psi;
+
+ printf("%d\t%d\t", d, N);
+
+ for(r=0; r<d; r++)
+ {
+ NN[r]=N;
+ nn[r]=n;
+ }
+
+ /** output vector ndft */
+ if(test_ndft)
+ swapndft=(double _Complex*)nfft_malloc(M*sizeof(double _Complex));
+
+ nfft_init_guru(&p, d, NN, M, nn, m,
+ MALLOC_X| MALLOC_F_HAT| MALLOC_F|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /** init pseudo random nodes */
+ nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+ nfft_init_guru(&p_pre_phi_hut, d, NN, M, nn, m, PRE_PHI_HUT,0);
+ flags_cp(&p_pre_phi_hut, &p);
+ nfft_precompute_one_psi(&p_pre_phi_hut);
+
+ if(test_fg)
+ {
+ nfft_init_guru(&p_fg_psi, d, NN, M, nn, m, FG_PSI,0);
+ flags_cp(&p_fg_psi, &p);
+ nfft_precompute_one_psi(&p_fg_psi);
+ }
+
+ nfft_init_guru(&p_pre_lin_psi, d, NN, M, nn, m, PRE_LIN_PSI,0);
+ flags_cp(&p_pre_lin_psi, &p);
+ nfft_precompute_one_psi(&p_pre_lin_psi);
+
+ if(test_fg)
+ {
+ nfft_init_guru(&p_pre_fg_psi, d, NN, M, nn, m, PRE_FG_PSI,0);
+ flags_cp(&p_pre_fg_psi, &p);
+ nfft_precompute_one_psi(&p_pre_fg_psi);
+ }
+
+ nfft_init_guru(&p_pre_psi, d, NN, M, nn, m, PRE_PSI,0);
+ flags_cp(&p_pre_psi, &p);
+ nfft_precompute_one_psi(&p_pre_psi);
+
+ if(test_pre_full_psi)
+ {
+ nfft_init_guru(&p_pre_full_psi, d, NN, M, nn, m, PRE_FULL_PSI,0);
+ flags_cp(&p_pre_full_psi, &p);
+ nfft_precompute_one_psi(&p_pre_full_psi);
+ }
+
+ /** init pseudo random Fourier coefficients */
+ nfft_vrand_unit_complex(p.f_hat, p.N_total);
+
+ /** NDFT */
+ if(test_ndft)
+ {
+ NFFT_SWAP_complex(p.f,swapndft);
+
+ t_ndft=0;
+ r=0;
+ while(t_ndft<0.01)
+ {
+ r++;
+ t0 = getticks();
+ nfft_trafo_direct(&p);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ t_ndft+=t;
+ }
+ t_ndft/=r;
+
+ NFFT_SWAP_complex(p.f,swapndft);
+ }
+ else
+ t_ndft=nan("");
+
+ /** NFFTs */
+ nfft_trafo(&p);
+ nfft_trafo(&p_pre_phi_hut);
+ if(test_fg)
+ nfft_trafo(&p_fg_psi);
+ else
+ p_fg_psi.MEASURE_TIME_t[2]=nan("");
+ nfft_trafo(&p_pre_lin_psi);
+ if(test_fg)
+ nfft_trafo(&p_pre_fg_psi);
+ else
+ p_pre_fg_psi.MEASURE_TIME_t[2]=nan("");
+ nfft_trafo(&p_pre_psi);
+ if(test_pre_full_psi)
+ nfft_trafo(&p_pre_full_psi);
+ else
+ p_pre_full_psi.MEASURE_TIME_t[2]=nan("");
+
+ if(test_fftw==0)
+ p.MEASURE_TIME_t[1]=nan("");
+
+ if(test_ndft)
+ e=X(error_l_2_complex)(swapndft, p.f, p.M_total);
+ else
+ e=nan("");
+
+ printf("%.2e\t%d\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\n",
+ t_ndft,
+ m,
+ e,
+ p.MEASURE_TIME_t[0],
+ p_pre_phi_hut.MEASURE_TIME_t[0],
+
+ p.MEASURE_TIME_t[1],
+
+ p.MEASURE_TIME_t[2],
+ p_fg_psi.MEASURE_TIME_t[2],
+ p_pre_lin_psi.MEASURE_TIME_t[2],
+ p_pre_fg_psi.MEASURE_TIME_t[2],
+ p_pre_psi.MEASURE_TIME_t[2],
+ p_pre_full_psi.MEASURE_TIME_t[2]);
+
+ fflush(stdout);
+
+ /** finalise */
+ if(test_pre_full_psi)
+ nfft_finalize(&p_pre_full_psi);
+ nfft_finalize(&p_pre_psi);
+ if(test_fg)
+ nfft_finalize(&p_pre_fg_psi);
+ nfft_finalize(&p_pre_lin_psi);
+ if(test_fg)
+ nfft_finalize(&p_fg_psi);
+ nfft_finalize(&p_pre_phi_hut);
+ nfft_finalize(&p);
+
+ if(test_ndft)
+ nfft_free(swapndft);
+}
+
+static void accuracy_pre_lin_psi(int d, int N, int M, int n, int m, int K)
+{
+ int r, NN[d], nn[d];
+ double e;
+ double _Complex *swapndft;
+
+ nfft_plan p;
+
+ for(r=0; r<d; r++)
+ {
+ NN[r]=N;
+ nn[r]=n;
+ }
+
+ /** output vector ndft */
+ swapndft=(double _Complex*)nfft_malloc(M*sizeof(double _Complex));
+
+ nfft_init_guru(&p, d, NN, M, nn, m,
+ MALLOC_X| MALLOC_F_HAT| MALLOC_F|
+ PRE_PHI_HUT| PRE_LIN_PSI|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /** realloc psi */
+ nfft_free(p.psi);
+ p.K=K;
+ p.psi=(double*) nfft_malloc((p.K+1)*p.d*sizeof(double));
+
+ /** precomputation can be done before the nodes are initialised */
+ nfft_precompute_one_psi(&p);
+
+ /** init pseudo random nodes */
+ nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+ /** init pseudo random Fourier coefficients */
+ nfft_vrand_unit_complex(p.f_hat, p.N_total);
+
+ /** compute exact result */
+ NFFT_SWAP_complex(p.f,swapndft);
+ nfft_trafo_direct(&p);
+ NFFT_SWAP_complex(p.f,swapndft);
+
+ /** NFFT */
+ nfft_trafo(&p);
+ e=X(error_l_2_complex)(swapndft, p.f, p.M_total);
+
+ // printf("%d\t%d\t%d\t%d\t%.2e\n",d,N,m,K,e);
+ printf("$%.1e$&\t",e);
+
+ fflush(stdout);
+
+ /** finalise */
+ nfft_finalize(&p);
+ nfft_free(swapndft);
+}
+
+
+int main(int argc,char **argv)
+{
+ int l,m,d,trial,N;
+
+ if(argc<=2)
+ {
+ fprintf(stderr,"flags type first last trials d m\n");
+ return -1;
+ }
+
+ if((test==0)&&(atoi(argv[1])<2))
+ {
+ fprintf(stderr,"MEASURE_TIME in nfft3util.h not set\n");
+ return -1;
+ }
+
+ fprintf(stderr,"Testing different precomputation schemes for the nfft.\n");
+ fprintf(stderr,"Columns: d, N=M, t_ndft, e_nfft, t_D, t_pre_phi_hut, ");
+ fprintf(stderr,"t_fftw, t_B, t_fg_psi, t_pre_lin_psi, t_pre_fg_psi, ");
+ fprintf(stderr,"t_pre_psi, t_pre_full_psi\n\n");
+
+ d=atoi(argv[5]);
+ m=atoi(argv[6]);
+
+ /* time vs. N=M */
+ if(atoi(argv[1])==0)
+ for(l=atoi(argv[2]); l<=atoi(argv[3]); l++)
+ for(trial=0; trial<atoi(argv[4]); trial++)
+ {
+ if(l<=20)
+ time_accuracy(d, (1U<< l), (1U<< (d*l)), (1U<< (l+1)), m, 0, 0);
+ else
+ time_accuracy(d, (1U<< l), (1U<< (d*l)), (1U<< (l+1)), m, 0, 0);
+ }
+
+ d=atoi(argv[5]);
+ N=atoi(argv[6]);
+
+ /* accuracy vs. time */
+ if(atoi(argv[1])==1)
+ for(m=atoi(argv[2]); m<=atoi(argv[3]); m++)
+ for(trial=0; trial<atoi(argv[4]); trial++)
+ time_accuracy(d, N, (int)pow(N,d), 2*N, m, 1, 1);
+
+ d=atoi(argv[5]);
+ N=atoi(argv[6]);
+ m=atoi(argv[7]);
+
+ /* accuracy vs. K for linear interpolation, assumes (m+1)|K */
+ if(atoi(argv[1])==2)
+ {
+ printf("$\\log_2(K/(m+1))$&\t");
+ for(l=atoi(argv[2]); l<atoi(argv[3]); l++)
+ printf("$%d$&\t",l);
+
+ printf("$%d$\\\\\n",atoi(argv[3]));
+
+ printf("$\\tilde E_2$&\t");
+ for(l=atoi(argv[2]); l<=atoi(argv[3]); l++)
+ accuracy_pre_lin_psi(d, N, (int)pow(N,d), 2*N, m, (m+1)*(1U<< l));
+
+ printf("\n");
+ }
+
+ return 1;
+}
diff --git a/examples/nfft/flags.m b/examples/nfft/flags.m
new file mode 100644
index 0000000..ca67140
--- /dev/null
+++ b/examples/nfft/flags.m
@@ -0,0 +1,152 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: flags.m 3776 2012-06-03 13:29:25Z keiner $
+
+%% File: flags1.m
+%%
+%% Testing different precomputation schemes for the nfft.
+%% 1. Computation time vs. problem size
+%%
+%% Author Stefan Kunis
+%%
+%% References: Time and memory requirements of the Nonequispaced FFT
+%%
+%% Loads flags.data0.gaussian, ...
+
+% see flags.readme
+trials=10;
+first=4;
+last=20;
+
+% load already computed data, times for precomputed D/B differ only negligible
+dg=load('flags.data0.gaussian');
+dk=load('flags.data0.kaiser_bessel');
+ds=load('flags.data0.sinc_power');
+db=load('flags.data0.b_spline');
+
+N=dg(1:trials:end,2);
+
+t_Dg=(mean(reshape(dg(:,6),trials,last-first+1)))';
+t_Dk=(mean(reshape(dk(:,6),trials,last-first+1)))';
+t_Ds=(mean(reshape(ds(:,6),trials,last-first+1)))';
+t_Db=(mean(reshape(db(:,6),trials,last-first+1)))';
+t_pre_phi_hut=(mean(reshape(dg(:,7),trials,last-first+1)))';
+
+t_fftw=(mean(reshape(dg(:,8),trials,last-first+1)))';
+
+t_Bg=(mean(reshape(dg(:,9),trials,last-first+1)))';
+t_Bk=(mean(reshape(dk(:,9),trials,last-first+1)))';
+t_Bs=(mean(reshape(ds(:,9),trials,last-first+1)))';
+t_Bb=(mean(reshape(db(:,9),trials,last-first+1)))';
+
+t_fg_psi=(mean(reshape(dg(:,10),trials,last-first+1)))';
+t_pre_lin_psi=(mean(reshape(dg(:,11),trials,last-first+1)))';
+t_pre_fg_psi=(mean(reshape(dg(:,12),trials,last-first+1)))';
+t_pre_psi=(mean(reshape(dg(:,13),trials,last-first+1)))';
+t_pre_full_psi=(mean(reshape(dg(:,14),trials,last-first+1)))';
+
+h=loglog(N,t_Dg,'k',...
+ N,t_Dk,'k--',...
+ N,t_Ds,'k-.',...
+ N,t_Db,'k:',...
+ N,t_pre_phi_hut,'k.');
+
+set(h,'LineWidth',1.8); set(h,'MarkerSize',6);
+set(gca,'YTick',[10^-6,10^-4,10^-2,1,10^2]);
+set(gca,'XTick',[10^2,10^3,10^4,10^5,10^6]);
+set(gca,'FontSize',20);
+axis([N(1),N(end),10^-6,10^1]);
+
+if(to_pdf)
+ !ps2pdf temp.eps flags1.pdf
+ !rm temp.eps
+else
+ !mv temp.eps flags1.eps
+end;
+
+return
+
+%%
+%% Testing accuracy vs. cut-off/Taylor degree m.
+%%
+trials=20;
+first=1;
+last=20;
+sigma_nfft=2;
+sigma_taylor=4;
+sigma_nfft1=1.25;
+sigma_taylor1=1.5;
+sigma_nfft2=8;
+sigma_taylor2=16;
+
+% typical sigma
+system(sprintf('./taylor_nfft %d %d %d %d %f %f > taylor_nfft2a.dat',1,first,...
+ last,trials,sigma_nfft,sigma_taylor));
+data=load('taylor_nfft2a.dat');
+
+m_nfft=data(:,5);
+e_nfft=data(:,7);
+max_e_nfft=(max(reshape(e_nfft,trials,last-first+1)))';
+
+m_taylor=data(:,9);
+e_taylor=data(:,11);
+max_e_taylor=(max(reshape(e_taylor,trials,last-first+1)))';
+
+% small sigma
+system(sprintf('./taylor_nfft %d %d %d %d %f %f > taylor_nfft2b.dat',1,first,...
+ last,trials,sigma_nfft1,sigma_taylor1));
+data1=load('taylor_nfft2b.dat');
+max_e_nfft_sigma=(max(reshape(data1(:,7),trials,last-first+1)))';
+max_e_taylor_sigma=(max(reshape(data1(:,11),trials,last-first+1)))';
+
+% large sigma
+system(sprintf('./taylor_nfft %d %d %d %d %f %f > taylor_nfft2c.dat',1,first,...
+ last,trials,sigma_nfft2,sigma_taylor2));
+data2=load('taylor_nfft2c.dat');
+max_e_nfft_sigma2=(max(reshape(data2(:,7),trials,last-first+1)))';
+max_e_taylor_sigma2=(max(reshape(data2(:,11),trials,last-first+1)))';
+
+h=semilogy(m_nfft,e_nfft,'k+',first:last,max_e_nfft,'k--',first:last,...
+ max_e_nfft_sigma,'k:',first:last,max_e_nfft_sigma2,'k:',...
+ m_taylor,e_taylor,'kx',first:last,max_e_taylor,'k',first:last,...
+ max_e_taylor_sigma,'k-.',first:last,max_e_taylor_sigma2,'k-.');
+set(h,'LineWidth',1.8); set(h,'MarkerSize',6);
+set(gca,'YTick',[10^-15,10^-10,10^-5,1]);
+set(gca,'FontSize',20);
+axis([first,last,10^-16,1]);
+
+print temp.eps -deps
+!ps2pdf temp.eps taylor_nfft2.pdf
+!rm temp.eps
+
+
+%%
+%% Testing accuracy vs. time.
+%%
+t_nfft=data(:,6);
+t_taylor=data(:,10);
+
+h=semilogy(t_nfft,e_nfft,'k+',t_taylor,e_taylor,'kx');
+set(h,'LineWidth',1.8); set(h,'MarkerSize',6);
+set(gca,'YTick',[10^-15,10^-10,10^-5,1]);
+set(gca,'FontSize',20);
+axis([min([t_nfft;t_taylor]),max([t_nfft;t_taylor]),10^-16,1]);
+
+print temp.eps -deps
+!ps2pdf temp.eps taylor_nfft3.pdf
+!rm temp.eps
+
diff --git a/examples/nfft/ndft_fast.c b/examples/nfft/ndft_fast.c
new file mode 100644
index 0000000..dbe3320
--- /dev/null
+++ b/examples/nfft/ndft_fast.c
@@ -0,0 +1,221 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: ndft_fast.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/*! \file ndft_fast.c
+ *
+ * \brief Testing ndft, Horner-like ndft, and fully precomputed ndft.
+ *
+ * \author Stefan Kunis
+ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+static void ndft_horner_trafo(nfft_plan *ths)
+{
+ int j,k;
+ double _Complex *f_hat_k, *f_j;
+ double _Complex exp_omega_0;
+
+ for(j=0, f_j=ths->f; j<ths->M_total; j++, f_j++)
+ (*f_j) =0;
+
+ for(j=0, f_j=ths->f; j<ths->M_total; j++, f_j++)
+ {
+ exp_omega_0 = cexp(+2*PI*_Complex_I*ths->x[j]);
+ for(k=0, f_hat_k= ths->f_hat; k<ths->N[0]; k++, f_hat_k++)
+ {
+ (*f_j)+=(*f_hat_k);
+ (*f_j)*=exp_omega_0;
+ }
+ (*f_j)*=cexp(-PI*_Complex_I*ths->N[0]*ths->x[j]);
+ }
+} /* ndft_horner_trafo */
+
+static void ndft_pre_full_trafo(nfft_plan *ths, double _Complex *A)
+{
+ int j,k;
+ double _Complex *f_hat_k, *f_j;
+ double _Complex *A_local;
+
+ for(j=0, f_j=ths->f; j<ths->M_total; j++, f_j++)
+ (*f_j) =0;
+
+ for(j=0, f_j=ths->f, A_local=A; j<ths->M_total; j++, f_j++)
+ for(k=0, f_hat_k= ths->f_hat; k<ths->N[0]; k++, f_hat_k++, A_local++)
+ (*f_j) += (*f_hat_k)*(*A_local);
+} /* ndft_pre_full_trafo */
+
+static void ndft_pre_full_init(nfft_plan *ths, double _Complex *A)
+{
+ int j,k;
+ double _Complex *f_hat_k, *f_j, *A_local;
+
+ for(j=0, f_j=ths->f, A_local=A; j<ths->M_total; j++, f_j++)
+ for(k=0, f_hat_k= ths->f_hat; k<ths->N[0]; k++, f_hat_k++, A_local++)
+ (*A_local) = cexp(-2*PI*_Complex_I*(k-ths->N[0]/2)*ths->x[j]);
+
+} /* ndft_pre_full_init */
+
+static void ndft_time(int N, int M, unsigned test_ndft, unsigned test_pre_full)
+{
+ int r;
+ double t, t_ndft, t_horner, t_pre_full, t_nfft;
+ double _Complex *A = NULL;
+ ticks t0, t1;
+
+ nfft_plan np;
+
+ printf("%d\t%d\t",N, M);
+
+ nfft_init_1d(&np, N, M);
+
+ /** init pseudo random nodes */
+ nfft_vrand_shifted_unit_double(np.x, np.M_total);
+
+ if(test_pre_full)
+ {
+ A=(double _Complex*)nfft_malloc(N*M*sizeof(double _Complex));
+ ndft_pre_full_init(&np, A);
+ }
+
+ /** init pseudo random Fourier coefficients */
+ nfft_vrand_unit_complex(np.f_hat, np.N_total);
+
+ /** NDFT */
+ if(test_ndft)
+ {
+ t_ndft=0;
+ r=0;
+ while(t_ndft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_trafo_direct(&np);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ t_ndft+=t;
+ }
+ t_ndft/=r;
+
+ printf("%.2e\t",t_ndft);
+ }
+ else
+ printf("nan\t\t");
+
+ /** Horner NDFT */
+ t_horner=0;
+ r=0;
+ while(t_horner<0.1)
+ {
+ r++;
+ t0 = getticks();
+ ndft_horner_trafo(&np);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ t_horner+=t;
+ }
+ t_horner/=r;
+
+ printf("%.2e\t", t_horner);
+
+ /** Fully precomputed NDFT */
+ if(test_pre_full)
+ {
+ t_pre_full=0;
+ r=0;
+ while(t_pre_full<0.1)
+ {
+ r++;
+ t0 = getticks();
+ ndft_pre_full_trafo(&np,A);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ t_pre_full+=t;
+ }
+ t_pre_full/=r;
+
+ printf("%.2e\t", t_pre_full);
+ }
+ else
+ printf("nan\t\t");
+
+ t_nfft=0;
+ r=0;
+ while(t_nfft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_trafo(&np);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ t_nfft+=t;
+ }
+ t_nfft/=r;
+
+ printf("%.2e\n", t_nfft);
+
+ fflush(stdout);
+
+ if(test_pre_full)
+ nfft_free(A);
+
+ nfft_finalize(&np);
+}
+
+int main(int argc,char **argv)
+{
+ int l,trial;
+
+ if(argc<=2)
+ {
+ fprintf(stderr,"ndft_fast type first last trials\n");
+ return -1;
+ }
+
+ fprintf(stderr,"Testing ndft, Horner-like ndft, fully precomputed ndft.\n");
+ fprintf(stderr,"Columns: N, M, t_ndft, t_horner, t_pre_full, t_nfft\n\n");
+
+ /* time vs. N=M */
+ if(atoi(argv[1])==0)
+ {
+ for(l=atoi(argv[2]); l<=atoi(argv[3]); l++)
+ for(trial=0; trial<atoi(argv[4]); trial++)
+ if(l<=13)
+ ndft_time((1U<< l), (1U<< l), 1, 1);
+ else
+ if(l<=15)
+ ndft_time((1U<< l), (1U<< l), 1, 0);
+ else
+ ndft_time((1U<< l), (1U<< l), 0, 0);
+ }
+
+ return 1;
+}
diff --git a/examples/nfft/ndft_fast.m b/examples/nfft/ndft_fast.m
new file mode 100644
index 0000000..4003bb9
--- /dev/null
+++ b/examples/nfft/ndft_fast.m
@@ -0,0 +1,61 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: ndft_fast.m 3776 2012-06-03 13:29:25Z keiner $
+
+%% File: ndft_fast.m
+%%
+%% Testing ndft, Horner-like ndft, fully precomputed ndft and nfft.
+%% Testing time vs. problem size.
+%%
+%% Author Stefan Kunis
+%%
+%% References: Time and memory requirements of the Nonequispaced FFT
+%%
+%% Calls repeatedly the executable ndft_fast.
+
+to_pdf=0;
+
+trials=10;
+first=4;
+last=17;
+%system(sprintf('./ndft_fast %d %d %d %d > ndft_fast.data',0,first,last,trials));
+data=load('ndft_fast.data');
+
+N=data(1:trials:end,1);
+t_ndft=(mean(reshape(data(:,3),trials,last-first+1)))';
+t_horner=(mean(reshape(data(:,4),trials,last-first+1)))';
+t_pre_full=(mean(reshape(data(:,5),trials,last-first+1)))';
+t_nfft=(mean(reshape(data(:,6),trials,last-first+1)))';
+
+h=loglog(N,t_ndft,'k',...
+ N,t_horner,'k--',...
+ N,t_pre_full,'k-.',...
+ N,10^-8*N.^2,'k:',...
+ N,t_nfft,'kd');
+set(h,'LineWidth',1.8); set(h,'MarkerSize',6);
+set(gca,'YTick',[10^-6,10^-4,10^-2,1,10^2]);
+set(gca,'XTick',[10^2,10^3,10^4,10^5,10^6]);
+set(gca,'FontSize',20);
+axis([N(1),N(end),10^-6,10^2]);
+
+print temp.eps -deps
+if(to_pdf)
+ !ps2pdf temp.eps ndft_fast.pdf
+ !rm temp.eps
+else
+ !mv temp.eps ndft_fast.eps
+end;
diff --git a/examples/nfft/nfft_benchomp.c b/examples/nfft/nfft_benchomp.c
new file mode 100644
index 0000000..2c85d7d
--- /dev/null
+++ b/examples/nfft/nfft_benchomp.c
@@ -0,0 +1,590 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "config.h"
+
+#include <nfft3.h>
+#include <nfft3util.h>
+
+#define NREPEAT 5
+
+static FILE* file_out_tex = NULL;
+
+int get_nthreads_array(int **arr)
+{
+ int max_threads = nfft_get_omp_num_threads();
+ int alloc_num = 2;
+ int k;
+ int ret_number = 0;
+ int max_threads_pw2 = (max_threads / 2) * 2 == max_threads ? 1 : 0;
+
+ if (max_threads <= 5)
+ {
+ *arr = (int*) malloc(max_threads*sizeof(int));
+ for (k = 0; k < max_threads; k++)
+ *(*arr + k) = k+1;
+ return max_threads;
+ }
+
+ for (k = 1; k <= max_threads; k*=2, alloc_num++);
+
+ *arr = (int*) malloc(alloc_num*sizeof(int));
+
+ for (k = 1; k <= max_threads; k*=2)
+ {
+ if (k != max_threads && 2*k > max_threads && max_threads_pw2)
+ {
+ *(*arr + ret_number) = max_threads/2;
+ ret_number++;
+ }
+
+ *(*arr + ret_number) = k;
+ ret_number++;
+
+ if (k != max_threads && 2*k > max_threads)
+ {
+ *(*arr + ret_number) = max_threads;
+ ret_number++;
+ break;
+ }
+ }
+
+ return ret_number;
+}
+
+
+void check_result_value(const int val, const int ok, const char *msg)
+{
+ if (val != ok)
+ {
+ fprintf(stderr, "ERROR %s: %d not %d\n", msg, val, ok);
+
+ exit(1);
+ }
+}
+
+void run_test_create(int d, int trafo_adjoint, int N, int M, double sigma)
+{
+ char cmd[1025];
+
+ if (d==1)
+ snprintf(cmd, 1024, "./nfft_benchomp_createdataset %d %d %d %d %lg > nfft_benchomp_test.data", d, trafo_adjoint, N, M, sigma);
+ else if (d==2)
+ snprintf(cmd, 1024, "./nfft_benchomp_createdataset %d %d %d %d %d %lg > nfft_benchomp_test.data", d, trafo_adjoint, N, N, M, sigma);
+ else if (d==3)
+ snprintf(cmd, 1024, "./nfft_benchomp_createdataset %d %d %d %d %d %d %lg > nfft_benchomp_test.data", d, trafo_adjoint, N, N, N, M, sigma);
+ else if (d==4)
+ snprintf(cmd, 1024, "./nfft_benchomp_createdataset %d %d %d %d %d %d %d %lg > nfft_benchomp_test.data", d, trafo_adjoint, N, N, N, N, M, sigma);
+ else
+ exit(1);
+ fprintf(stderr, "%s\n", cmd);
+ check_result_value(system(cmd), 0, "createdataset");
+}
+
+void run_test_init_output()
+{
+ FILE *f = fopen("nfft_benchomp_test.result", "w");
+ if (f!= NULL)
+ fclose(f);
+}
+
+typedef struct
+{
+ int d;
+ int trafo_adjoint;
+ int N;
+ int M;
+ double sigma;
+ int m;
+ int flags;
+} s_param;
+
+typedef struct
+{
+ double avg;
+ double min;
+ double max;
+} s_resval;
+
+typedef struct
+{
+ int nthreads;
+ s_resval resval[6];
+} s_result;
+
+typedef struct
+{
+ s_param param;
+ s_result *results;
+ int nresults;
+} s_testset;
+
+void run_test(s_resval *res, int nrepeat, int m, int flags, int nthreads)
+{
+ char cmd[1025];
+ int r,t;
+
+ for (t = 0; t < 6; t++)
+ {
+ res[t].avg = 0.0; res[t].min = 1.0/0.0; res[t].max = 0.0;
+ }
+
+ if (nthreads < 2)
+ snprintf(cmd, 1024, "./nfft_benchomp_detail_single %d %d < nfft_benchomp_test.data > nfft_benchomp_test.out", m, flags);
+ else
+ snprintf(cmd, 1024, "./nfft_benchomp_detail_threads %d %d %d < nfft_benchomp_test.data > nfft_benchomp_test.out", m, flags, nthreads);
+ fprintf(stderr, "%s\n", cmd);
+ check_result_value(system(cmd), 0, cmd);
+
+ for (r = 0; r < nrepeat; r++)
+ {
+ int retval;
+ double v[6];
+ FILE *f;
+ check_result_value(system(cmd), 0, cmd);
+ f = fopen("nfft_benchomp_test.out", "r");
+ retval = fscanf(f, "%lg %lg %lg %lg %lg %lg", v, v+1, v+2, v+3, v+4, v+5);
+ check_result_value(retval, 6, "read nfft_benchomp_test.out");
+ fclose(f);
+
+ for (t = 0; t < 6; t++)
+ {
+ res[t].avg += v[t];
+ if (res[t].min > v[t])
+ res[t].min = v[t];
+ if (res[t].max < v[t])
+ res[t].max = v[t];
+ }
+ }
+
+ for (t = 0; t < 6; t++)
+ res[t].avg /= nrepeat;
+
+ fprintf(stderr, "%d %d: ", nthreads, nrepeat);
+ for (t = 0; t < 6; t++)
+ fprintf(stderr, "%.3e %.3e %.3e | ", res[t].avg, res[t].min, res[t].max);
+ fprintf(stderr, "\n");
+}
+
+const char *get_psi_string(int flags)
+{
+ if (flags & PRE_ONE_PSI)
+ return "unknownPSI";
+
+ return "nopsi";
+}
+const char *get_sort_string(int flags)
+{
+ if (flags & NFFT_SORT_NODES)
+ return "sorted";
+
+ return "unsorted";
+}
+
+const char *get_adjoint_omp_string(int flags)
+{
+ if (flags & NFFT_OMP_BLOCKWISE_ADJOINT)
+ return "blockwise";
+
+ return "";
+}
+
+#define MASK_D (1U<<0)
+#define MASK_TA (1U<<1)
+#define MASK_N (1U<<2)
+#define MASK_SIGMA (1U<<3)
+#define MASK_M (1U<<4)
+#define MASK_WINM (1U<<5)
+#define MASK_FLAGS_PSI (1U<<6)
+#define MASK_FLAGS_SORT (1U<<7)
+#define MASK_FLAGS_BW (1U<<8)
+
+unsigned int determine_different_parameters(s_testset *testsets, int ntestsets)
+{
+ int t;
+ unsigned int mask = 0;
+
+ if (ntestsets < 2)
+ return 0;
+
+ for (t = 1; t < ntestsets; t++)
+ {
+ if (testsets[t-1].param.d != testsets[t].param.d)
+ mask |= MASK_D;
+ if (testsets[t-1].param.trafo_adjoint != testsets[t].param.trafo_adjoint)
+ mask |= MASK_TA;
+ if (testsets[t-1].param.N != testsets[t].param.N)
+ mask |= MASK_N;
+ if (testsets[t-1].param.sigma != testsets[t].param.sigma)
+ mask |= MASK_SIGMA;
+ if (testsets[t-1].param.M != testsets[t].param.M)
+ mask |= MASK_M;
+ if (testsets[t-1].param.m != testsets[t].param.m)
+ mask |= MASK_WINM;
+ if ((testsets[t-1].param.flags & PRE_ONE_PSI) != (testsets[t].param.flags & PRE_ONE_PSI))
+ mask |= MASK_FLAGS_PSI;
+ if ((testsets[t-1].param.flags & NFFT_SORT_NODES) != (testsets[t].param.flags & NFFT_SORT_NODES))
+ mask |= MASK_FLAGS_SORT;
+ if ((testsets[t-1].param.flags & NFFT_OMP_BLOCKWISE_ADJOINT) != (testsets[t].param.flags & NFFT_OMP_BLOCKWISE_ADJOINT))
+ mask |= MASK_FLAGS_BW;
+ }
+
+ return mask;
+}
+
+void get_plot_title(char *outstr, int maxlen, char *hostname, s_param param, unsigned int diff_mask)
+{
+ unsigned int mask = ~diff_mask;
+ int offset = 0;
+ int len;
+
+ len = snprintf(outstr, maxlen, "%s", hostname);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+
+ if (mask & MASK_D)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " %dd", param.d);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_TA)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " $\\mathrm{NFFT}%s$", param.trafo_adjoint==0?"":"^\\top");
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_N)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " N=%d", param.N);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_SIGMA)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " N=%g", param.sigma);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_M)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " M=%d", param.M);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_WINM)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " m=%d", param.m);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_FLAGS_PSI)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " %s", get_psi_string(param.flags));
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_FLAGS_SORT)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " %s", get_sort_string(param.flags));
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if ((mask & MASK_FLAGS_BW) && strlen(get_adjoint_omp_string(param.flags)) > 0)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " %s", get_adjoint_omp_string(param.flags));
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+}
+
+void print_output_speedup_total_tref(FILE *out, s_testset *testsets, int ntestsets, double tref)
+{
+ int i, t;
+ char hostname[1025];
+ char plottitle[1025];
+ unsigned int diff_mask = determine_different_parameters(testsets, ntestsets);
+
+ if (gethostname(hostname, 1024) != 0)
+ strncpy(hostname, "unnamed", 1024);
+
+ get_plot_title(plottitle, 1024, hostname, testsets[0].param, diff_mask | MASK_FLAGS_SORT);
+
+ fprintf(out, "\\begin{tikzpicture}\n");
+ fprintf(out, "\\begin{axis}[");
+ fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Speedup, xtick=data, legend style={ legend pos = north west, legend columns=1}, ymajorgrids=true, yminorgrids=true, minor y tick num=4, ");
+ fprintf(out, " title={%s}", plottitle);
+ fprintf(out, " ]\n");
+
+ for (t = 0; t < ntestsets; t++)
+ {
+ s_testset testset = testsets[t];
+ fprintf(stderr, "%s %dd $\\mathrm{NFFT}%s$ N=%d $\\sigma$=%g M=%d m=%d %s %s %s}", hostname, testset.param.d, testset.param.trafo_adjoint==0?"":"^\\top", testset.param.N, testset.param.sigma, testset.param.M, testset.param.m, get_psi_string(testset.param.flags), get_sort_string(testset.param.flags), get_adjoint_omp_string(testset.param.flags));
+ fprintf(stderr, "\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < testset.nresults; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, tref/testset.results[i].resval[5].avg);
+ fprintf(out, "};\n");
+
+ for (i = 0; i < testset.nresults; i++)
+ {
+ fprintf(stderr, "%d:%.3f ", testset.results[i].nthreads, tref/testset.results[i].resval[5].avg);
+ }
+ fprintf(stderr, "\n\n");
+ }
+
+ fprintf(out, "\\legend{{");
+ for (t = 0; t < ntestsets; t++)
+ {
+ char title[256];
+ if (t > 0)
+ fprintf(out, "},{");
+ get_plot_title(title, 255, "", testsets[t].param, ~(diff_mask | MASK_FLAGS_SORT));
+ fprintf(out, "%s", title);
+ }
+ fprintf(out, "}}\n");
+ fprintf(out, "\\end{axis}\n");
+ fprintf(out, "\\end{tikzpicture}\n");
+ fprintf(out, "\n\n");
+
+ fflush(out);
+}
+
+void print_output_speedup_total(FILE *out, s_testset *testsets, int ntestsets)
+{
+ double tref = 1.0/0.0;
+ int t, k;
+
+ for (t = 0; t < ntestsets; t++)
+ for (k = 0; k < testsets[t].nresults; k++)
+ if (testsets[t].results[k].nthreads == 1 && testsets[t].results[k].resval[5].avg < tref)
+ tref = testsets[t].results[k].resval[5].avg;
+
+ print_output_speedup_total_tref(out, testsets, ntestsets, tref);
+}
+
+void print_output_histo_DFBRT(FILE *out, s_testset testset)
+{
+ int i, size = testset.nresults;
+ char hostname[1025];
+
+ if (gethostname(hostname, 1024) != 0)
+ strncpy(hostname, "unnamed", 1024);
+
+ fprintf(out, "\\begin{tikzpicture}\n");
+ fprintf(out, "\\begin{axis}[");
+ fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, ");
+ fprintf(out, "symbolic x coords={");
+ for (i = 0; i < size; i++)
+ if (i > 0)
+ fprintf(out, ",%d", testset.results[i].nthreads);
+ else
+ fprintf(out, "%d", testset.results[i].nthreads);
+fprintf(stderr, "FLAGS: %d\n", testset.param.flags);
+
+ fprintf(out, "}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, ");
+ fprintf(out, " title={%s %dd $\\mathrm{NFFT}%s$ N=%d $\\sigma$=%g M=%d m=%d %s %s %s}", hostname, testset.param.d, testset.param.trafo_adjoint==0?"":"^\\top", testset.param.N, testset.param.sigma, testset.param.M, testset.param.m, get_psi_string(testset.param.flags), get_sort_string(testset.param.flags), get_adjoint_omp_string(testset.param.flags));
+ fprintf(out, " ]\n");
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[1].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[2].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[3].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[0].avg + testset.results[i].resval[4].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[5].avg);
+ fprintf(out, "};\n");
+ fprintf(out, "\\legend{D,F,B,rest,total}\n");
+ fprintf(out, "\\end{axis}\n");
+ fprintf(out, "\\end{tikzpicture}\n");
+ fprintf(out, "\n\n");
+
+ fflush(out);
+}
+
+void run_testset(s_testset *testset, int d, int trafo_adjoint, int N, int M, double sigma, int m, int flags, int *nthreads_array, int n_threads_array_size)
+{
+ int i;
+ testset->param.d = d;
+ testset->param.trafo_adjoint = trafo_adjoint;
+ testset->param.N = N;
+ testset->param.M = M;
+ testset->param.sigma = sigma;
+ testset->param.m = m;
+ testset->param.flags = flags;
+
+ testset->results = (s_result*) malloc(n_threads_array_size*sizeof(s_result));
+ testset->nresults = n_threads_array_size;
+
+ run_test_create(testset->param.d, testset->param.trafo_adjoint, testset->param.N, testset->param.M, testset->param.sigma);
+ for (i = 0; i < n_threads_array_size; i++)
+ {
+ testset->results[i].nthreads = nthreads_array[i];
+ run_test(testset->results[i].resval, NREPEAT, testset->param.m, testset->param.flags, testset->results[i].nthreads = nthreads_array[i]);
+ }
+
+}
+
+void test1(int *nthreads_array, int n_threads_array_size, int m)
+{
+ s_testset testsets[15];
+
+ run_testset(&testsets[0], 1, 0, 2097152, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_DFBRT(file_out_tex, testsets[0]);
+#endif
+
+ run_testset(&testsets[1], 1, 0, 2097152, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_DFBRT(file_out_tex, testsets[1]);
+#endif
+
+ print_output_speedup_total(file_out_tex, testsets, 2);
+
+ run_testset(&testsets[2], 1, 1, 2097152, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_DFBRT(file_out_tex, testsets[2]);
+#endif
+
+ run_testset(&testsets[3], 1, 1, 2097152, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_DFBRT(file_out_tex, testsets[3]);
+#endif
+
+ run_testset(&testsets[4], 1, 1, 2097152, 2097152, 2.0, m, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_DFBRT(file_out_tex, testsets[4]);
+#endif
+
+ print_output_speedup_total(file_out_tex, testsets+2, 3);
+
+ run_testset(&testsets[5], 2, 0, 1024, 1048576, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_DFBRT(file_out_tex, testsets[5]);
+#endif
+
+ run_testset(&testsets[6], 2, 0, 1024, 1048576, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_DFBRT(file_out_tex, testsets[6]);
+#endif
+
+ print_output_speedup_total(file_out_tex, testsets+5, 2);
+
+ run_testset(&testsets[7], 2, 1, 1024, 1048576, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_DFBRT(file_out_tex, testsets[7]);
+#endif
+
+ run_testset(&testsets[8], 2, 1, 1024, 1048576, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_DFBRT(file_out_tex, testsets[8]);
+#endif
+
+ run_testset(&testsets[9], 2, 1, 1024, 1048576, 2.0, m, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_DFBRT(file_out_tex, testsets[9]);
+#endif
+
+ print_output_speedup_total(file_out_tex, testsets+7, 3);
+
+ run_testset(&testsets[10], 3, 0, 128, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_DFBRT(file_out_tex, testsets[10]);
+#endif
+
+ run_testset(&testsets[11], 3, 0, 128, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_DFBRT(file_out_tex, testsets[11]);
+#endif
+
+ print_output_speedup_total(file_out_tex, testsets+10, 2);
+
+ run_testset(&testsets[12], 3, 1, 128, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_DFBRT(file_out_tex, testsets[12]);
+#endif
+
+ run_testset(&testsets[13], 3, 1, 128, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_DFBRT(file_out_tex, testsets[13]);
+#endif
+
+ run_testset(&testsets[14], 3, 1, 128, 2097152, 2.0, m, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_DFBRT(file_out_tex, testsets[14]);
+#endif
+
+ print_output_speedup_total(file_out_tex, testsets+12, 3);
+
+}
+
+int main(int argc, char** argv)
+{
+ int *nthreads_array;
+ int n_threads_array_size = get_nthreads_array(&nthreads_array);
+ int k;
+
+#if !(defined MEASURE_TIME && defined MEASURE_TIME_FFTW)
+ fprintf(stderr, "WARNING: Detailed time measurements for NFFT are not activated.\n");
+ fprintf(stderr, "For more detailed plots, please re-run the configure script with options\n");
+ fprintf(stderr, "--enable-measure-time --enable-measure-time-fftw --enable-openmp\n");
+ fprintf(stderr, "and run \"make clean all\"\n\n");
+#endif
+
+ for (k = 0; k < n_threads_array_size; k++)
+ fprintf(stderr, "%d ", nthreads_array[k]);
+ fprintf(stderr, "\n");
+
+ file_out_tex = fopen("nfft_benchomp_results_plots.tex", "w");
+
+ test1(nthreads_array, n_threads_array_size, 2);
+ test1(nthreads_array, n_threads_array_size, 4);
+ test1(nthreads_array, n_threads_array_size, 6);
+
+ fclose(file_out_tex);
+
+ return 0;
+}
diff --git a/examples/nfft/nfft_benchomp_createdataset.c b/examples/nfft/nfft_benchomp_createdataset.c
new file mode 100644
index 0000000..8edc466
--- /dev/null
+++ b/examples/nfft/nfft_benchomp_createdataset.c
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <complex.h>
+
+#include "config.h"
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+void nfft_benchomp_createdataset(unsigned int d, unsigned int trafo_adjoint, int *N, int M, double sigma)
+{
+ int n[d];
+ int t, j;
+ R *x;
+ C *f, *f_hat;
+ int N_total = 1;
+
+ for (t = 0; t < d; t++)
+ N_total *= N[t];
+
+ x = (R*) nfft_malloc(d*M*sizeof(R));
+ f = (C*) nfft_malloc(M*sizeof(C));
+ f_hat = (C*) nfft_malloc(N_total*sizeof(C));
+
+ for (t=0; t<d; t++)
+ n[t] = sigma*nfft_next_power_of_2(N[t]);
+
+ /** init pseudo random nodes */
+ nfft_vrand_shifted_unit_double(x,d*M);
+
+ if (trafo_adjoint==0)
+ {
+ nfft_vrand_unit_complex(f_hat,N_total);
+ }
+ else
+ {
+ nfft_vrand_unit_complex(f,M);
+ }
+
+ printf("%d %d ", d, trafo_adjoint);
+
+ for (t=0; t<d; t++)
+ printf("%d ", N[t]);
+
+ for (t=0; t<d; t++)
+ printf("%d ", n[t]);
+
+ printf("%d\n", M);
+
+ for (j=0; j < M; j++)
+ {
+ for (t=0; t < d; t++)
+ printf("%.16e ", x[d*j+t]);
+ printf("\n");
+ }
+
+ if (trafo_adjoint==0)
+ {
+ for (j=0; j < N_total; j++)
+ printf("%.16e %.16e\n", creal(f_hat[j]), cimag(f_hat[j]));
+ }
+ else
+ {
+ for (j=0; j < M; j++)
+ printf("%.16e %.16e\n", creal(f[j]), cimag(f[j]));
+ }
+
+ nfft_free(x);
+ nfft_free(f);
+ nfft_free(f_hat);
+}
+
+int main(int argc, char **argv)
+{
+ int d;
+ int *N;
+ int M;
+ int t;
+ int trafo_adjoint;
+ double sigma;
+
+ if (argc < 6) {
+ fprintf(stderr, "usage: d tr_adj N_1 ... N_d M sigma\n");
+ return -1;
+ }
+
+ d = atoi(argv[1]);
+
+ fprintf(stderr, "d=%d", d);
+
+ if (d < 1 || argc < 5+d) {
+ fprintf(stderr, "usage: d tr_adj N_1 ... N_d M sigma\n");
+ return -1;
+ }
+
+ N = malloc(d*sizeof(int));
+
+ trafo_adjoint = atoi(argv[2]);
+ if (trafo_adjoint < 0 && trafo_adjoint > 1)
+ trafo_adjoint = 1;
+
+ fprintf(stderr, ", tr_adj=%d, N=", trafo_adjoint);
+
+ for (t=0; t<d; t++)
+ N[t] = atoi(argv[3+t]);
+
+ for (t=0; t<d; t++)
+ fprintf(stderr, "%d ",N[t]);
+
+
+ M = atoi(argv[3+d]);
+ sigma = atof(argv[4+d]);
+
+ fprintf(stderr, ", M=%d, sigma=%.16g\n", M, sigma);
+
+ nfft_benchomp_createdataset(d, trafo_adjoint, N, M, sigma);
+
+ free(N);
+
+ return 0;
+}
diff --git a/examples/nfft/nfft_benchomp_detail.c b/examples/nfft/nfft_benchomp_detail.c
new file mode 100644
index 0000000..7818550
--- /dev/null
+++ b/examples/nfft/nfft_benchomp_detail.c
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <complex.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+void bench_openmp(FILE *infile, int m, int psi_flag)
+{
+ nfft_plan p;
+ int *N;
+ int *n;
+ int M, d, trafo_adjoint;
+ int t, j;
+ double re,im;
+ ticks t0, t1;
+ double tt_total, tt_preonepsi;
+
+ fscanf(infile, "%d %d", &d, &trafo_adjoint);
+
+ N = malloc(d*sizeof(int));
+ n = malloc(d*sizeof(int));
+
+ for (t=0; t<d; t++)
+ fscanf(infile, "%d", N+t);
+
+ for (t=0; t<d; t++)
+ fscanf(infile, "%d", n+t);
+
+ fscanf(infile, "%d", &M);
+
+#ifdef _OPENMP
+ fftw_import_wisdom_from_filename("nfft_benchomp_detail_threads.plan");
+#else
+ fftw_import_wisdom_from_filename("nfft_benchomp_detail_single.plan");
+#endif
+
+ /** init an d-dimensional plan */
+ nfft_init_guru(&p, d, N, M, n, m,
+ PRE_PHI_HUT| psi_flag | MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+#ifdef _OPENMP
+ fftw_export_wisdom_to_filename("nfft_benchomp_detail_threads.plan");
+#else
+ fftw_export_wisdom_to_filename("nfft_benchomp_detail_single.plan");
+#endif
+
+ for (j=0; j < p.M_total; j++)
+ {
+ for (t=0; t < p.d; t++)
+ fscanf(infile, "%lg", p.x+p.d*j+t);
+ }
+
+ if (trafo_adjoint==0)
+ {
+ for (j=0; j < p.N_total; j++)
+ {
+ fscanf(infile, "%lg %lg", &re, &im);
+ p.f_hat[j] = re + _Complex_I * im;
+ }
+ }
+ else
+ {
+ for (j=0; j < p.M_total; j++)
+ {
+ fscanf(infile, "%lg %lg", &re, &im);
+ p.f[j] = re + _Complex_I * im;
+ }
+ }
+
+ t0 = getticks();
+ /** precompute psi, the entries of the matrix B */
+ if(p.nfft_flags & PRE_ONE_PSI)
+ nfft_precompute_one_psi(&p);
+ t1 = getticks();
+ tt_preonepsi = nfft_elapsed_seconds(t1,t0);
+
+ if (trafo_adjoint==0)
+ nfft_trafo(&p);
+ else
+ nfft_adjoint(&p);
+ t1 = getticks();
+ tt_total = nfft_elapsed_seconds(t1,t0);
+
+#ifndef MEASURE_TIME
+ p.MEASURE_TIME_t[0] = 0.0;
+ p.MEASURE_TIME_t[2] = 0.0;
+#endif
+
+#ifndef MEASURE_TIME_FFTW
+ p.MEASURE_TIME_t[1] = 0.0;
+#endif
+
+ printf("%.6e %.6e %6e %.6e %.6e %.6e\n", tt_preonepsi, p.MEASURE_TIME_t[0], p.MEASURE_TIME_t[1], p.MEASURE_TIME_t[2], tt_total-tt_preonepsi-p.MEASURE_TIME_t[0]-p.MEASURE_TIME_t[1]-p.MEASURE_TIME_t[2], tt_total);
+// printf("%.6e\n", tt);
+
+ free(N);
+ free(n);
+
+ /** finalise the one dimensional plan */
+ nfft_finalize(&p);
+}
+
+int main(int argc, char **argv)
+{
+ int m, psi_flag;
+#ifdef _OPENMP
+ int nthreads;
+
+ if (argc != 4)
+ return 1;
+
+ nthreads = atoi(argv[3]);
+ fftw_init_threads();
+ omp_set_num_threads(nthreads);
+#else
+ if (argc != 3)
+ return 1;
+#endif
+
+ m = atoi(argv[1]);
+ psi_flag = atoi(argv[2]);
+
+ bench_openmp(stdin, m, psi_flag);
+
+ return 0;
+}
diff --git a/examples/nfft/nfft_times.c b/examples/nfft/nfft_times.c
new file mode 100644
index 0000000..18a1496
--- /dev/null
+++ b/examples/nfft/nfft_times.c
@@ -0,0 +1,1065 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfft_times.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+int global_n;
+int global_d;
+
+static int comp1(const void *x,const void *y)
+{
+ return ((* (double*) x)<(* (double*) y)?-1:1);
+}
+
+static int comp2(const void *x,const void *y)
+{
+ int nx0,nx1,ny0,ny1;
+ nx0=global_n*(* ((double*)x+0));
+ nx1=global_n*(* ((double*)x+1));
+ ny0=global_n*(* ((double*)y+0));
+ ny1=global_n*(* ((double*)y+1));
+
+ if(nx0<ny0)
+ return -1;
+ else
+ if(nx0==ny0)
+ if(nx1<ny1)
+ return -1;
+ else
+ return 1;
+ else
+ return 1;
+}
+
+static int comp3(const void *x,const void *y)
+{
+ int nx0,nx1,nx2,ny0,ny1,ny2;
+ nx0=global_n*(* ((double*)x+0));
+ nx1=global_n*(* ((double*)x+1));
+ nx2=global_n*(* ((double*)x+2));
+ ny0=global_n*(* ((double*)y+0));
+ ny1=global_n*(* ((double*)y+1));
+ ny2=global_n*(* ((double*)y+2));
+
+ if(nx0<ny0)
+ return -1;
+ else
+ if(nx0==ny0)
+ if(nx1<ny1)
+ return -1;
+ else
+ if(nx1==ny1)
+ if(nx2<ny2)
+ return -1;
+ else
+ return 1;
+ else
+ return 1;
+ else
+ return 1;
+}
+
+void measure_time_nfft(int d, int N, unsigned test_ndft)
+{
+ int r, M, NN[d], nn[d];
+ double t, t_fft, t_ndft, t_nfft;
+ ticks t0, t1;
+
+ nfft_plan p;
+ fftw_plan p_fft;
+
+ printf("\\verb+%d+&\t",(int)(log(N)/log(2)*d+0.5));
+
+ for(r=0,M=1;r<d;r++)
+ {
+ M=N*M;
+ NN[r]=N;
+ nn[r]=2*N;
+ }
+
+ nfft_init_guru(&p, d, NN, M, nn, 2,
+ PRE_PHI_HUT|
+ PRE_FULL_PSI| MALLOC_F_HAT| MALLOC_X| MALLOC_F|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ p_fft=fftw_plan_dft(d, NN, p.f_hat, p.f, FFTW_FORWARD, FFTW_MEASURE);
+
+ /** init pseudo random nodes */
+ nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+ global_n=nn[0];
+ global_d=d;
+ switch(d)
+ {
+ case 1: { qsort(p.x,p.M_total,d*sizeof(double),comp1); break; }
+ case 2: { qsort(p.x,p.M_total,d*sizeof(double),comp2); break; }
+ case 3: { qsort(p.x,p.M_total,d*sizeof(double),comp3); break; }
+ }
+
+ nfft_precompute_one_psi(&p);
+
+ /** init pseudo random Fourier coefficients */
+ nfft_vrand_unit_complex(p.f_hat, p.N_total);
+
+ /** FFT */
+ t_fft=0;
+ r=0;
+ while(t_fft<1)
+ {
+ r++;
+ t0 = getticks();
+ fftw_execute(p_fft);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_fft+=t;
+ }
+ t_fft/=r;
+
+ // printf("\\verb+%.1e+ & \\verb+(%.1f)+ &\t",t_fft,t_fft/(p.N_total*(log(N)/log(2)*d))*auxC);
+ printf("\\verb+%.1e+ &\t",t_fft);
+
+ /** NDFT */
+ if(test_ndft)
+ {
+ t_ndft=0;
+ r=0;
+ while(t_ndft<1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_trafo_direct(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_ndft+=t;
+ }
+ t_ndft/=r;
+ //printf("\\verb+%.1e+ & \\verb+(%d)+&\t",t_ndft,(int)round(t_ndft/(p.N_total*p.N_total)*auxC));
+ printf("\\verb+%.1e+ &\t",t_ndft);
+ }
+ else
+ // printf("\\verb+*+\t&\t&\t");
+ printf("\\verb+*+\t&\t");
+
+ /** NFFT */
+ t_nfft=0;
+ r=0;
+ while(t_nfft<1)
+ {
+ r++;
+ t0 = getticks();
+ switch(d)
+ {
+ case 1: { nfft_trafo_1d(&p); break; }
+ case 2: { nfft_trafo_2d(&p); break; }
+ case 3: { nfft_trafo_3d(&p); break; }
+ default: nfft_trafo(&p);
+ }
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_nfft+=t;
+ }
+ t_nfft/=r;
+
+ // printf("\\verb+%.1e+ & \\verb+(%d)+ & \\verb+(%.1e)+\\\\\n",t_nfft,(int)round(t_nfft/(p.N_total*(log(N)/log(2)*d))*auxC),t_nfft/t_fft);
+ printf("\\verb+%.1e+ & \\verb+(%3.1f)+\\\\\n",t_nfft,t_nfft/t_fft);
+
+ fftw_destroy_plan(p_fft);
+ nfft_finalize(&p);
+}
+
+void measure_time_nfft_XXX2(int d, int N, unsigned test_ndft)
+{
+ int r, M, NN[d], nn[d];
+ double t, t_fft, t_ndft, t_nfft;
+ ticks t0, t1;
+
+ nfft_plan p;
+ fftw_plan p_fft;
+
+ printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+
+ for(r=0,M=1;r<d;r++)
+ {
+ M=N*M;
+ NN[r]=N;
+ nn[r]=2*N;
+ }
+
+ nfft_init_guru(&p, d, NN, M, nn, 2,
+ PRE_PHI_HUT|
+ PRE_PSI|
+ MALLOC_F_HAT| MALLOC_X| MALLOC_F|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ p_fft=fftw_plan_dft(d, NN, p.f_hat, p.f, FFTW_FORWARD, FFTW_MEASURE);
+
+ double _Complex *swapndft=(double _Complex*)nfft_malloc(p.M_total*sizeof(double _Complex));
+
+ /** init pseudo random nodes */
+ nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+ qsort(p.x,p.M_total,d*sizeof(double),comp1);
+ //nfft_vpr_double(p.x,p.M_total,"nodes x");
+
+ nfft_precompute_one_psi(&p);
+
+ /** init pseudo random Fourier coefficients */
+ nfft_vrand_unit_complex(p.f_hat, p.N_total);
+
+ /** FFT */
+ t_fft=0;
+ r=0;
+ while(t_fft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ fftw_execute(p_fft);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_fft+=t;
+ }
+ t_fft/=r;
+
+ printf("%.1e\t",t_fft);
+
+ /** NDFT */
+ if(test_ndft)
+ {
+ NFFT_SWAP_complex(p.f,swapndft);
+ t_ndft=0;
+ r=0;
+ while(t_ndft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_trafo_direct(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_ndft+=t;
+ }
+ t_ndft/=r;
+ printf("%.1e\t",t_ndft);
+ NFFT_SWAP_complex(p.f,swapndft);
+ }
+ else
+ printf("\t");
+
+ /** NFFT */
+ t_nfft=0;
+ r=0;
+ while(t_nfft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_trafo(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_nfft+=t;
+ }
+ t_nfft/=r;
+ printf("%.1e\t",t_nfft);
+ if(test_ndft)
+ printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+
+ /** NFFT_1d */
+ t_nfft=0;
+ r=0;
+ while(t_nfft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_trafo_1d(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_nfft+=t;
+ }
+ t_nfft/=r;
+ printf("%.1e\t",t_nfft);
+ if(test_ndft)
+ printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+
+ printf("\n");
+
+ nfft_free(swapndft);
+ fftw_destroy_plan(p_fft);
+ nfft_finalize(&p);
+}
+
+void measure_time_nfft_XXX3(int d, int N, unsigned test_ndft)
+{
+ int r, M, NN[d], nn[d];
+ double t, t_fft, t_ndft, t_nfft;
+ ticks t0, t1;
+
+ nfft_plan p;
+ fftw_plan p_fft;
+
+ printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+
+ for(r=0,M=1;r<d;r++)
+ {
+ M=N*M;
+ NN[r]=N;
+ nn[r]=2*N;
+ }
+
+ nfft_init_guru(&p, d, NN, M, nn, 2,
+ PRE_PHI_HUT|
+ PRE_PSI|
+ MALLOC_F_HAT| MALLOC_X| MALLOC_F|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ p_fft=fftw_plan_dft(d, NN, p.f, p.f_hat, FFTW_BACKWARD, FFTW_MEASURE);
+
+ double _Complex *swapndft=(double _Complex*)nfft_malloc(p.N_total*sizeof(double _Complex));
+
+ /** init pseudo random nodes */
+ nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+ qsort(p.x,p.M_total,d*sizeof(double),comp1);
+ //nfft_vpr_double(p.x,p.M_total,"nodes x");
+
+ nfft_precompute_one_psi(&p);
+
+ /** init pseudo random samples */
+ nfft_vrand_unit_complex(p.f, p.N_total);
+
+ /** FFT */
+ t_fft=0;
+ r=0;
+ while(t_fft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ fftw_execute(p_fft);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_fft+=t;
+ }
+ t_fft/=r;
+
+ printf("%.1e\t",t_fft);
+
+ /** NDFT */
+ if(test_ndft)
+ {
+ NFFT_SWAP_complex(p.f_hat,swapndft);
+ t_ndft=0;
+ r=0;
+ while(t_ndft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_adjoint_direct(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_ndft+=t;
+ }
+ t_ndft/=r;
+ printf("%.1e\t",t_ndft);
+ NFFT_SWAP_complex(p.f_hat,swapndft);
+ }
+ else
+ printf("\t");
+
+ /** NFFT */
+ t_nfft=0;
+ r=0;
+ while(t_nfft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_adjoint(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_nfft+=t;
+ }
+ t_nfft/=r;
+ printf("%.1e\t",t_nfft);
+ if(test_ndft)
+ printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+
+ /** NFFT_1d */
+ t_nfft=0;
+ r=0;
+ while(t_nfft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_adjoint_1d(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_nfft+=t;
+ }
+ t_nfft/=r;
+ printf("%.1e\t",t_nfft);
+ if(test_ndft)
+ printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+
+ printf("\n");
+
+ nfft_free(swapndft);
+ fftw_destroy_plan(p_fft);
+ nfft_finalize(&p);
+}
+
+
+
+
+void measure_time_nfft_XXX4(int d, int N, unsigned test_ndft)
+{
+ int r, M, NN[d], nn[d];
+ double t, t_fft, t_ndft, t_nfft;
+ ticks t0, t1;
+
+ nfft_plan p;
+ fftw_plan p_fft;
+
+ printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+
+ for(r=0,M=1;r<d;r++)
+ {
+ M=N*M;
+ NN[r]=N;
+ nn[r]=2*N;
+ }
+
+ nfft_init_guru(&p, d, NN, M, nn, 4,
+ PRE_PHI_HUT|
+ PRE_PSI|
+ MALLOC_F_HAT| MALLOC_X| MALLOC_F|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ p_fft=fftw_plan_dft(d, NN, p.f_hat, p.f, FFTW_FORWARD, FFTW_MEASURE);
+
+ double _Complex *swapndft=(double _Complex*)nfft_malloc(p.M_total*sizeof(double _Complex));
+
+ /** init pseudo random nodes */
+ nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+ //for(j=0;j<2*M;j+=2)
+ // p.x[j]=0.5*p.x[j]+0.25*(p.x[j]>=0?1:-1);
+
+ //qsort(p.x,p.M_total,d*sizeof(double),comp1);
+ //nfft_vpr_double(p.x,p.M_total,"nodes x");
+
+ nfft_precompute_one_psi(&p);
+
+ /** init pseudo random Fourier coefficients */
+ nfft_vrand_unit_complex(p.f_hat, p.N_total);
+
+ /** FFT */
+ t_fft=0;
+ r=0;
+ while(t_fft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ fftw_execute(p_fft);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_fft+=t;
+ }
+ t_fft/=r;
+
+ printf("%.1e\t",t_fft);
+
+ /** init pseudo random Fourier coefficients */
+ nfft_vrand_unit_complex(p.f_hat, p.N_total);
+
+ /** NDFT */
+ if(test_ndft)
+ {
+ NFFT_SWAP_complex(p.f,swapndft);
+ t_ndft=0;
+ r=0;
+ while(t_ndft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_trafo_direct(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_ndft+=t;
+ }
+ t_ndft/=r;
+ printf("%.1e\t",t_ndft);
+
+ //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
+
+ NFFT_SWAP_complex(p.f,swapndft);
+ }
+ else
+ printf("\t");
+
+ /** NFFT */
+ t_nfft=0;
+ r=0;
+ while(t_nfft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_trafo(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_nfft+=t;
+ }
+ t_nfft/=r;
+ printf("%.1e\t",t_nfft);
+ if(test_ndft)
+ printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+
+ //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
+
+ /** NFFT_2d */
+ t_nfft=0;
+ r=0;
+ while(t_nfft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_trafo_2d(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_nfft+=t;
+ }
+ t_nfft/=r;
+ printf("%.1e\t",t_nfft);
+ if(test_ndft)
+ printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+
+ //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
+
+ printf("\n");
+
+ nfft_free(swapndft);
+ fftw_destroy_plan(p_fft);
+ nfft_finalize(&p);
+}
+
+
+void measure_time_nfft_XXX5(int d, int N, unsigned test_ndft)
+{
+ int r, M, NN[d], nn[d];
+ double t, t_fft, t_ndft, t_nfft;
+ ticks t0, t1;
+
+ nfft_plan p;
+ fftw_plan p_fft;
+
+ printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+
+ for(r=0,M=1;r<d;r++)
+ {
+ M=N*M;
+ NN[r]=N;
+ nn[r]=2*N;
+ }
+
+ nfft_init_guru(&p, d, NN, M, nn, 4,
+ PRE_PHI_HUT|
+ PRE_PSI|
+ MALLOC_F_HAT| MALLOC_X| MALLOC_F|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ p_fft=fftw_plan_dft(d, NN, p.f, p.f_hat, FFTW_FORWARD, FFTW_MEASURE);
+
+ double _Complex *swapndft=(double _Complex*)nfft_malloc(p.N_total*sizeof(double _Complex));
+
+ /** init pseudo random nodes */
+ nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+ //sort_nodes(p.x,p.d,p.M_total,
+
+ nfft_precompute_one_psi(&p);
+
+ /** init pseudo random samples */
+ nfft_vrand_unit_complex(p.f, p.M_total);
+
+ /** FFT */
+ t_fft=0;
+ r=0;
+ while(t_fft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ fftw_execute(p_fft);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_fft+=t;
+ }
+ t_fft/=r;
+
+ printf("%.1e\t",t_fft);
+
+ /** init pseudo random samples */
+ nfft_vrand_unit_complex(p.f, p.M_total);
+
+ /** NDFT */
+ if(test_ndft)
+ {
+ NFFT_SWAP_complex(p.f_hat,swapndft);
+ t_ndft=0;
+ r=0;
+ while(t_ndft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_adjoint_direct(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_ndft+=t;
+ }
+ t_ndft/=r;
+ printf("%.1e\t",t_ndft);
+
+ //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
+
+ NFFT_SWAP_complex(p.f_hat,swapndft);
+ }
+ else
+ printf("\t");
+
+ /** NFFT */
+ t_nfft=0;
+ r=0;
+ while(t_nfft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_adjoint(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_nfft+=t;
+ }
+ t_nfft/=r;
+ printf("%.1e\t",t_nfft);
+ if(test_ndft)
+ printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+
+ //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
+
+ /** NFFT_2d */
+ t_nfft=0;
+ r=0;
+ while(t_nfft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_adjoint_2d(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_nfft+=t;
+ }
+ t_nfft/=r;
+ printf("%.1e\t",t_nfft);
+ if(test_ndft)
+ printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+
+ //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
+
+ printf("\n");
+
+ nfft_free(swapndft);
+ fftw_destroy_plan(p_fft);
+ nfft_finalize(&p);
+}
+
+
+void measure_time_nfft_XXX6(int d, int N, unsigned test_ndft)
+{
+ int r, M, NN[d], nn[d];
+ double t, t_fft, t_ndft, t_nfft;
+ ticks t0, t1;
+
+ nfft_plan p;
+ fftw_plan p_fft;
+
+ printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+
+ for(r=0,M=1;r<d;r++)
+ {
+ M=N*M;
+ NN[r]=N;
+ nn[r]=2*N;
+ }
+
+ nfft_init_guru(&p, d, NN, M, nn, 2,
+ PRE_PHI_HUT|
+ FG_PSI|
+ MALLOC_F_HAT| MALLOC_X| MALLOC_F|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ p_fft=fftw_plan_dft(d, NN, p.f_hat, p.f, FFTW_FORWARD, FFTW_MEASURE);
+
+ double _Complex *swapndft=(double _Complex*)nfft_malloc(p.M_total*sizeof(double _Complex));
+
+ /** init pseudo random nodes */
+ nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+ //qsort(p.x,p.M_total,d*sizeof(double),comp1);
+ //nfft_vpr_double(p.x,p.M_total,"nodes x");
+
+ nfft_precompute_one_psi(&p);
+
+ /** init pseudo random Fourier coefficients */
+ nfft_vrand_unit_complex(p.f_hat, p.N_total);
+
+ /** FFT */
+ t_fft=0;
+ r=0;
+ while(t_fft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ fftw_execute(p_fft);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_fft+=t;
+ }
+ t_fft/=r;
+
+ printf("%.1e\t",t_fft);
+
+ /** init pseudo random Fourier coefficients */
+ nfft_vrand_unit_complex(p.f_hat, p.N_total);
+
+ /** NDFT */
+ if(test_ndft)
+ {
+ NFFT_SWAP_complex(p.f,swapndft);
+ t_ndft=0;
+ r=0;
+ while(t_ndft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_trafo_direct(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_ndft+=t;
+ }
+ t_ndft/=r;
+ printf("%.1e\t",t_ndft);
+
+ //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
+
+ NFFT_SWAP_complex(p.f,swapndft);
+ }
+ else
+ printf("\t");
+
+ /** NFFT */
+ t_nfft=0;
+ r=0;
+ while(t_nfft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_trafo(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_nfft+=t;
+ }
+ t_nfft/=r;
+ printf("%.1e\t",t_nfft);
+ if(test_ndft)
+ printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+
+ //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
+
+ /** NFFT_3d */
+ t_nfft=0;
+ r=0;
+ while(t_nfft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_trafo_3d(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_nfft+=t;
+ }
+ t_nfft/=r;
+ printf("%.1e\t",t_nfft);
+ if(test_ndft)
+ printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+
+ //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
+
+ printf("\n");
+
+ nfft_free(swapndft);
+ fftw_destroy_plan(p_fft);
+ nfft_finalize(&p);
+}
+
+
+void measure_time_nfft_XXX7(int d, int N, unsigned test_ndft)
+{
+ int r, M, NN[d], nn[d];
+ double t, t_fft, t_ndft, t_nfft;
+ ticks t0, t1;
+
+ nfft_plan p;
+ fftw_plan p_fft;
+
+ printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+
+ for(r=0,M=1;r<d;r++)
+ {
+ M=N*M;
+ NN[r]=N;
+ nn[r]=2*N;
+ }
+
+ nfft_init_guru(&p, d, NN, M, nn, 2,
+ PRE_PHI_HUT|
+ FG_PSI|
+ MALLOC_F_HAT| MALLOC_X| MALLOC_F|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ p_fft=fftw_plan_dft(d, NN, p.f, p.f_hat, FFTW_FORWARD, FFTW_MEASURE);
+
+ double _Complex *swapndft=(double _Complex*)nfft_malloc(p.N_total*sizeof(double _Complex));
+
+ /** init pseudo random nodes */
+ nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+
+ //sort_nodes(p.x,p.d,p.M_total,
+
+ nfft_precompute_one_psi(&p);
+
+ /** init pseudo random samples */
+ nfft_vrand_unit_complex(p.f, p.M_total);
+
+ /** FFT */
+ t_fft=0;
+ r=0;
+ while(t_fft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ fftw_execute(p_fft);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_fft+=t;
+ }
+ t_fft/=r;
+
+ printf("%.1e\t",t_fft);
+
+ /** init pseudo random samples */
+ nfft_vrand_unit_complex(p.f, p.M_total);
+
+ /** NDFT */
+ if(test_ndft)
+ {
+ NFFT_SWAP_complex(p.f_hat,swapndft);
+ t_ndft=0;
+ r=0;
+ while(t_ndft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_adjoint_direct(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_ndft+=t;
+ }
+ t_ndft/=r;
+ printf("%.1e\t",t_ndft);
+
+ //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
+
+ NFFT_SWAP_complex(p.f_hat,swapndft);
+ }
+ else
+ printf("\t");
+
+ /** NFFT */
+ t_nfft=0;
+ r=0;
+ while(t_nfft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_adjoint(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_nfft+=t;
+ }
+ t_nfft/=r;
+ printf("%.1e\t",t_nfft);
+ if(test_ndft)
+ printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+
+ //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
+
+ /** NFFT_3d */
+ t_nfft=0;
+ r=0;
+ while(t_nfft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_adjoint_3d(&p);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_nfft+=t;
+ }
+ t_nfft/=r;
+ printf("%.1e\t",t_nfft);
+ if(test_ndft)
+ printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+
+ //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
+
+ printf("\n");
+
+ nfft_free(swapndft);
+ fftw_destroy_plan(p_fft);
+ nfft_finalize(&p);
+}
+
+int main2(void)
+{
+ int l,d,logIN;
+
+ for(l=3;l<=6;l++)
+ {
+ d=3;
+ logIN=d*l;
+ if(logIN<=15)
+ {
+ measure_time_nfft_XXX6(d,(1U<< (logIN/d)),1);
+ measure_time_nfft_XXX7(d,(1U<< (logIN/d)),1);
+ }
+ else
+ {
+ measure_time_nfft_XXX6(d,(1U<< (logIN/d)),0);
+ measure_time_nfft_XXX7(d,(1U<< (logIN/d)),0);
+ }
+ }
+
+ exit(-1);
+
+
+ for(l=7;l<=12;l++)
+ {
+ d=2;
+ logIN=d*l;
+ if(logIN<=15)
+ {
+ measure_time_nfft_XXX4(d,(1U<< (logIN/d)),1);
+ measure_time_nfft_XXX5(d,(1U<< (logIN/d)),1);
+ }
+ else
+ {
+ measure_time_nfft_XXX4(d,(1U<< (logIN/d)),0);
+ measure_time_nfft_XXX5(d,(1U<< (logIN/d)),0);
+ }
+ }
+
+ exit(-1);
+
+ for(l=3;l<=12;l++)
+ {
+ logIN=l;
+ if(logIN<=15)
+ {
+ measure_time_nfft_XXX2(1,(1U<< (logIN)),1);
+ measure_time_nfft_XXX3(1,(1U<< (logIN)),1);
+ }
+ else
+ {
+ measure_time_nfft_XXX2(1,(1U<< (logIN)),0);
+ measure_time_nfft_XXX3(1,(1U<< (logIN)),0);
+ }
+ }
+
+ exit(-1);
+}
+
+int main(void)
+{
+ int l,d,logIN;
+
+ printf("\\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\\\\n");
+ printf("\\hline \\hline \\multicolumn{5}{|c|}{$d=1$} \\\\ \\hline\n");
+ for(l=3;l<=22;l++)
+ {
+ d=1;
+ logIN=l;
+ if(logIN<=15)
+ measure_time_nfft(d,(1U<< (logIN/d)),1);
+ else
+ measure_time_nfft(d,(1U<< (logIN/d)),0);
+
+ fflush(stdout);
+ }
+
+ printf("\\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\\\\n");
+ printf("\\hline \\hline \\multicolumn{5}{|c|}{$d=2$} \\\\ \\hline\n");
+ for(l=3;l<=11;l++)
+ {
+ d=2;
+ logIN=d*l;
+ if(logIN<=15)
+ measure_time_nfft(d,(1U<< (logIN/d)),1);
+ else
+ measure_time_nfft(d,(1U<< (logIN/d)),0);
+
+ fflush(stdout);
+ }
+
+ printf("\\hline \\hline \\multicolumn{5}{|c|}{$d=3$} \\\\ \\hline\n");
+ for(l=3;l<=7;l++)
+ {
+ d=3;
+ logIN=d*l;
+ if(logIN<=15)
+ measure_time_nfft(d,(1U<< (logIN/d)),1);
+ else
+ measure_time_nfft(d,(1U<< (logIN/d)),0);
+
+ fflush(stdout);
+ }
+
+ return 1;
+}
diff --git a/examples/nfft/simple_test.c b/examples/nfft/simple_test.c
new file mode 100644
index 0000000..90053a7
--- /dev/null
+++ b/examples/nfft/simple_test.c
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+static void simple_test_nfft_1d(void)
+{
+ nfft_plan p;
+ double t;
+
+ int N=14;
+ int M=19;
+ ticks t0, t1;
+
+ /** init an one dimensional plan */
+ nfft_init_1d(&p,N,M);
+
+ /** init pseudo random nodes */
+ nfft_vrand_shifted_unit_double(p.x,p.M_total);
+
+ /** precompute psi, the entries of the matrix B */
+ if(p.nfft_flags & PRE_ONE_PSI)
+ nfft_precompute_one_psi(&p);
+
+ /** init pseudo random Fourier coefficients and show them */
+ nfft_vrand_unit_complex(p.f_hat,p.N_total);
+ nfft_vpr_complex(p.f_hat,p.N_total,"given Fourier coefficients, vector f_hat");
+
+ /** direct trafo and show the result */
+ t0 = getticks();
+ nfft_trafo_direct(&p);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ nfft_vpr_complex(p.f,p.M_total,"ndft, vector f");
+ printf(" took %e seconds.\n",t);
+
+ /** approx. trafo and show the result */
+ nfft_trafo(&p);
+ nfft_vpr_complex(p.f,p.M_total,"nfft, vector f");
+
+ /** approx. adjoint and show the result */
+ nfft_adjoint_direct(&p);
+ nfft_vpr_complex(p.f_hat,p.N_total,"adjoint ndft, vector f_hat");
+
+ /** approx. adjoint and show the result */
+ nfft_adjoint(&p);
+ nfft_vpr_complex(p.f_hat,p.N_total,"adjoint nfft, vector f_hat");
+
+ /** finalise the one dimensional plan */
+ nfft_finalize(&p);
+}
+
+static void simple_test_nfft_2d(void)
+{
+ int K,N[2],n[2],M;
+ double t;
+ ticks t0, t1;
+
+ nfft_plan p;
+
+ N[0]=32; n[0]=64;
+ N[1]=14; n[1]=32;
+ M=N[0]*N[1];
+ K=16;
+
+ t0 = getticks();
+ /** init a two dimensional plan */
+ nfft_init_guru(&p, 2, N, M, n, 7,
+ PRE_PHI_HUT| PRE_FULL_PSI| MALLOC_F_HAT| MALLOC_X| MALLOC_F |
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_ESTIMATE| FFTW_DESTROY_INPUT);
+
+ /** init pseudo random nodes */
+ nfft_vrand_shifted_unit_double(p.x,p.d*p.M_total);
+
+ /** precompute psi, the entries of the matrix B */
+ if(p.nfft_flags & PRE_ONE_PSI)
+ nfft_precompute_one_psi(&p);
+
+ /** init pseudo random Fourier coefficients and show them */
+ nfft_vrand_unit_complex(p.f_hat,p.N_total);
+
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ nfft_vpr_complex(p.f_hat,K,
+ "given Fourier coefficients, vector f_hat (first few entries)");
+ printf(" ... initialisation took %e seconds.\n",t);
+
+ /** direct trafo and show the result */
+ t0 = getticks();
+ nfft_trafo_direct(&p);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ nfft_vpr_complex(p.f,K,"ndft, vector f (first few entries)");
+ printf(" took %e seconds.\n",t);
+
+ /** approx. trafo and show the result */
+ t0 = getticks();
+ nfft_trafo(&p);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ nfft_vpr_complex(p.f,K,"nfft, vector f (first few entries)");
+ printf(" took %e seconds.\n",t);
+
+ /** direct adjoint and show the result */
+ t0 = getticks();
+ nfft_adjoint_direct(&p);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ nfft_vpr_complex(p.f_hat,K,"adjoint ndft, vector f_hat (first few entries)");
+ printf(" took %e seconds.\n",t);
+
+ /** approx. adjoint and show the result */
+ t0 = getticks();
+ nfft_adjoint(&p);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ nfft_vpr_complex(p.f_hat,K,"adjoint nfft, vector f_hat (first few entries)");
+ printf(" took %e seconds.\n",t);
+
+ /** finalise the two dimensional plan */
+ nfft_finalize(&p);
+}
+
+int main(void)
+{
+ printf("1) computing a one dimensional ndft, nfft and an adjoint nfft\n\n");
+ simple_test_nfft_1d();
+
+ getc(stdin);
+
+ printf("2) computing a two dimensional ndft, nfft and an adjoint nfft\n\n");
+ simple_test_nfft_2d();
+
+ return 1;
+}
diff --git a/examples/nfft/simple_test_threads.c b/examples/nfft/simple_test_threads.c
new file mode 100644
index 0000000..3939db2
--- /dev/null
+++ b/examples/nfft/simple_test_threads.c
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3198 2009-05-27 14:16:50Z keiner $ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include <omp.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+//#include <time.h>
+
+int main(void)
+{
+ nfft_plan p;
+ const int N = 1000000;
+ const int M = 1000000;
+ ticks t0, t1;
+ double t;
+
+ printf("nthreads = %d\n", nfft_get_num_threads());
+
+ /* init */
+ fftw_init_threads();
+ nfft_init_1d(&p,N,M);
+
+ /* pseudo random nodes */
+ nfft_vrand_shifted_unit_double(p.x,p.M_total);
+
+ /* precompute psi, that is, the entries of the matrix B */
+ t0 = getticks();
+ if(p.nfft_flags & PRE_ONE_PSI)
+ nfft_precompute_one_psi(&p);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ fprintf(stderr,"precompute elapsed time: %.3f seconds\n",t);
+
+ /* pseudo random Fourier coefficients */
+ nfft_vrand_unit_complex(p.f_hat,p.N_total);
+
+ /* transformation */
+ t0 = getticks();
+ nfft_trafo(&p);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ fprintf(stderr,"compute elapsed time: %.3f seconds\n",t);
+ fflush(stderr);
+// nfft_vpr_complex(p.f,p.M_total,"ndft, vector f");
+
+ /* cleanup */
+ nfft_finalize(&p);
+ fftw_cleanup_threads();
+
+ return EXIT_SUCCESS;
+}
diff --git a/examples/nfft/taylor_nfft.c b/examples/nfft/taylor_nfft.c
new file mode 100644
index 0000000..4849982
--- /dev/null
+++ b/examples/nfft/taylor_nfft.c
@@ -0,0 +1,340 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: taylor_nfft.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/*! \file taylor_nfft.c
+ *
+ * \brief Testing the nfft againt a Taylor expansion based version.
+ *
+ * \author Stefan Kunis
+ *
+ * References: Time and memory requirements of the Nonequispaced FFT
+ *
+ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+typedef struct
+{
+ nfft_plan p; /**< used for fftw and data */
+
+ int *idx0; /**< index of next neighbour of x_j
+ on the oversampled regular grid */
+ double *deltax0; /**< distance to the grid point */
+} taylor_plan;
+
+/**
+ * Initialisation of a transform plan.
+ *
+ * \arg ths The pointer to a taylor plan
+ * \arg N The multi bandwidth
+ * \arg M The number of nodes
+ * \arg n The fft length
+ * \arg m The order of the Taylor expansion
+ *
+ * \author Stefan Kunis
+ */
+static void taylor_init(taylor_plan *ths, int N, int M, int n, int m)
+{
+ /* Note: no nfft precomputation! */
+ nfft_init_guru((nfft_plan*)ths, 1, &N, M, &n, m,
+ MALLOC_X| MALLOC_F_HAT| MALLOC_F|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_ESTIMATE| FFTW_PRESERVE_INPUT);
+
+ ths->idx0=(int*)nfft_malloc(M*sizeof(int));
+ ths->deltax0=(double*)nfft_malloc(M*sizeof(double));
+}
+
+/**
+ * Precomputation of weights and indices in Taylor expansion.
+ *
+ * \arg ths The pointer to a taylor plan
+ *
+ * \author Stefan Kunis
+ */
+static void taylor_precompute(taylor_plan *ths)
+{
+ int j;
+
+ nfft_plan* cths=(nfft_plan*)ths;
+
+ for(j=0;j<cths->M_total;j++)
+ {
+ ths->idx0[j] = ((int)round((cths->x[j]+0.5)*cths->n[0]) +
+ cths->n[0]/2)%cths->n[0];
+ ths->deltax0[j] = cths->x[j] - (round((cths->x[j]+0.5)*cths->n[0]) /
+ cths->n[0] - 0.5);
+ }
+}
+
+/**
+ * Destroys a transform plan.
+ *
+ * \arg ths The pointer to a taylor plan
+ *
+ * \author Stefan Kunis, Daniel Potts
+ */
+static void taylor_finalize(taylor_plan *ths)
+{
+ nfft_free(ths->deltax0);
+ nfft_free(ths->idx0);
+
+ nfft_finalize((nfft_plan*)ths);
+}
+
+/**
+ * Executes a Taylor-NFFT, see equation (1.1) in [Guide], computes fast and
+ * approximate by means of a Taylor expansion
+ * for j=0,...,M-1
+ * f[j] = sum_{k in I_N^d} f_hat[k] * exp(-2 (pi) k x[j])
+ *
+ * \arg ths The pointer to a taylor plan
+ *
+ * \author Stefan Kunis
+ */
+static void taylor_trafo(taylor_plan *ths)
+{
+ int j,k,l,ll;
+ double _Complex *f, *f_hat, *g1;
+ double *deltax;
+ int *idx;
+
+ nfft_plan *cths=(nfft_plan*)ths;
+
+ for(j=0, f=cths->f; j<cths->M_total; j++)
+ *f++ = 0;
+
+ for(k=0; k<cths->n_total; k++)
+ cths->g1[k]=0;
+
+ for(k=-cths->N_total/2, g1=cths->g1+cths->n_total-cths->N_total/2,
+ f_hat=cths->f_hat; k<0; k++)
+ (*g1++)=cpow( - 2*PI*_Complex_I*k,cths->m)* (*f_hat++);
+
+ cths->g1[0]=cths->f_hat[cths->N_total/2];
+
+ for(k=1, g1=cths->g1+1, f_hat=cths->f_hat+cths->N_total/2+1;
+ k<cths->N_total/2; k++)
+ (*g1++)=cpow( - 2*PI*_Complex_I*k,cths->m)* (*f_hat++);
+
+ for(l=cths->m-1; l>=0; l--)
+ {
+ for(k=-cths->N_total/2, g1=cths->g1+cths->n_total-cths->N_total/2;
+ k<0; k++)
+ (*g1++) /= (-2*PI*_Complex_I*k);
+
+ for(k=1, g1=cths->g1+1; k<cths->N_total/2; k++)
+ (*g1++) /= (-2*PI*_Complex_I*k);
+
+ fftw_execute(cths->my_fftw_plan1);
+
+ ll=(l==0?1:l);
+ for(j=0, f=cths->f, deltax=ths->deltax0, idx=ths->idx0; j<cths->M_total;
+ j++, f++)
+ (*f) = ((*f) * (*deltax++) + cths->g2[*idx++]) /ll;
+ }
+}
+
+/**
+ * Compares NDFT, NFFT, and Taylor-NFFT
+ *
+ * \arg N The bandwidth
+ * \arg N The number of nodes
+ * \arg n The FFT-size for the NFFT
+ * \arg m The cut-off for window function
+ * \arg n_taylor The FFT-size for the Taylor-NFFT
+ * \arg m_taylor The order of the Taylor approximation
+ * \arg test_accuracy Flag for NDFT computation
+ *
+ * \author Stefan Kunis
+ */
+static void taylor_time_accuracy(int N, int M, int n, int m, int n_taylor,
+ int m_taylor, unsigned test_accuracy)
+{
+ int r;
+ double t_ndft, t_nfft, t_taylor, t;
+ double _Complex *swapndft = NULL;
+ ticks t0, t1;
+
+ taylor_plan tp;
+ nfft_plan np;
+
+ printf("%d\t%d\t",N, M);
+
+ taylor_init(&tp,N,M,n_taylor,m_taylor);
+
+ nfft_init_guru(&np, 1, &N, M, &n, m,
+ PRE_PHI_HUT| PRE_FG_PSI|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_ESTIMATE| FFTW_DESTROY_INPUT);
+
+ /** share nodes, input, and output vectors */
+ np.x=tp.p.x;
+ np.f_hat=tp.p.f_hat;
+ np.f=tp.p.f;
+
+ /** output vector ndft */
+ if(test_accuracy)
+ swapndft=(double _Complex*)nfft_malloc(M*sizeof(double _Complex));
+
+ /** init pseudo random nodes */
+ nfft_vrand_shifted_unit_double(np.x, np.M_total);
+
+ /** nfft precomputation */
+ taylor_precompute(&tp);
+
+ /** nfft precomputation */
+ if(np.nfft_flags & PRE_ONE_PSI)
+ nfft_precompute_one_psi(&np);
+
+ /** init pseudo random Fourier coefficients */
+ nfft_vrand_unit_complex(np.f_hat, np.N_total);
+
+ /** NDFT */
+ if(test_accuracy)
+ {
+ NFFT_SWAP_complex(np.f,swapndft);
+
+ t_ndft=0;
+ r=0;
+ while(t_ndft<0.01)
+ {
+ r++;
+ t0 = getticks();
+ nfft_trafo_direct(&np);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_ndft+=t;
+ }
+ t_ndft/=r;
+
+ NFFT_SWAP_complex(np.f,swapndft);
+ printf("%.2e\t",t_ndft);
+ }
+ else
+ printf("nan\t\t");
+
+ /** NFFT */
+ t_nfft=0;
+ r=0;
+ while(t_nfft<0.01)
+ {
+ r++;
+ t0 = getticks();
+ nfft_trafo(&np);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_nfft+=t;
+ }
+ t_nfft/=r;
+
+ printf("%.2f\t%d\t%.2e\t",((double)n)/N, m, t_nfft);
+
+ if(test_accuracy)
+ printf("%.2e\t",X(error_l_infty_complex)(swapndft, np.f, np.M_total));
+ else
+ printf("nan\t\t");
+
+ /** TAYLOR NFFT */
+ t_taylor=0;
+ r=0;
+ while(t_taylor<0.01)
+ {
+ r++;
+ t0 = getticks();
+ taylor_trafo(&tp);
+ t1 = getticks();
+t = nfft_elapsed_seconds(t1,t0);
+ t_taylor+=t;
+ }
+ t_taylor/=r;
+
+
+ printf("%.2f\t%d\t%.2e\t",((double)n_taylor)/N,m_taylor,t_taylor);
+
+ if(test_accuracy)
+ printf("%.2e\n",X(error_l_infty_complex)(swapndft, np.f, np.M_total));
+ else
+ printf("nan\t\n");
+
+ fflush(stdout);
+
+ /** finalise */
+ if(test_accuracy)
+ nfft_free(swapndft);
+
+ nfft_finalize(&np);
+ taylor_finalize(&tp);
+}
+
+int main(int argc,char **argv)
+{
+ int l,m,trial,N;
+
+ if(argc<=2)
+ {
+ fprintf(stderr,"taylor_nfft type first last trials sigma_nfft sigma_taylor.\n");
+ return -1;
+ }
+
+ fprintf(stderr,"Testing the Nfft & a Taylor expansion based version.\n\n");
+ fprintf(stderr,"Columns: N, M, t_ndft, sigma_nfft, m_nfft, t_nfft, e_nfft");
+ fprintf(stderr,", sigma_taylor, m_taylor, t_taylor, e_taylor\n");
+
+ /* time vs. N=M */
+ if(atoi(argv[1])==0)
+ {
+ fprintf(stderr,"Fixed target accuracy, timings.\n\n");
+ for(l=atoi(argv[2]); l<=atoi(argv[3]); l++)
+ for(trial=0; trial<atoi(argv[4]); trial++)
+ if(l<=10)
+ taylor_time_accuracy((1U<< l), (1U<< l), (int)(atof(argv[5])*
+ (1U<< l)), 6, (int)(atof(argv[6])*(1U<< l)),
+ 6, 1);
+ else
+ taylor_time_accuracy((1U<< l), (1U<< l), (int)(atof(argv[5])*
+ (1U<< l)), 6, (int)(atof(argv[6])*(1U<< l)),
+ 6, 0);
+ }
+
+ /* error vs. m */
+ if(atoi(argv[1])==1)
+ {
+ N=atoi(argv[7]);
+ fprintf(stderr,"Fixed N=M=%d, error vs. m.\n\n",N);
+ for(m=atoi(argv[2]); m<=atoi(argv[3]); m++)
+ for(trial=0; trial<atoi(argv[4]); trial++)
+ taylor_time_accuracy(N,N, (int)(atof(argv[5])*N), m,
+ (int)(atof(argv[6])*N), m, 1);
+ }
+
+ return 1;
+}
diff --git a/examples/nfft/taylor_nfft.m b/examples/nfft/taylor_nfft.m
new file mode 100644
index 0000000..266a1f0
--- /dev/null
+++ b/examples/nfft/taylor_nfft.m
@@ -0,0 +1,140 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: taylor_nfft.m 3776 2012-06-03 13:29:25Z keiner $
+%% File: taylor_nfft.m
+%%
+%% Testing the nfft againt a Taylor expansion based version.
+%%
+%% Author Stefan Kunis
+%%
+%% References: Time and memory requirements of the Nonequispaced FFT
+%%
+%% Calls repeatedly the executable taylor_nfft.
+
+to_pdf=0;
+
+%%
+%% Testing time vs. problem size.
+%%
+trials=10;
+first=4;
+last=22;
+system(sprintf('./taylor_nfft %d %d %d %d %f %f > taylor_nfft.data0',0,first,last,trials,2,4));
+data=load('taylor_nfft.data0');
+
+N=data(1:trials:end,1);
+t_nfft=(mean(reshape(data(:,6),trials,last-first+1)))';
+t_taylor=(mean(reshape(data(:,10),trials,last-first+1)))';
+
+h=loglog(N,t_taylor,'k',...
+ N,t_nfft,'k--',...
+ N,10^-7*N.*log(N),'k:');
+set(h,'LineWidth',1.8); set(h,'MarkerSize',6);
+set(gca,'YTick',[10^-6,10^-4,10^-2,1,10^2]);
+set(gca,'XTick',[10^2,10^3,10^4,10^5,10^6]);
+set(gca,'FontSize',20);
+axis([N(1),N(end),10^-6,10^2]);
+
+print temp.eps -deps
+if(to_pdf)
+ !ps2pdf temp.eps taylor_nfft0.pdf
+ !rm temp.eps
+else
+ !mv temp.eps taylor_nfft0.eps
+end;
+
+return
+%%
+%% Testing accuracy vs. cut-off/Taylor degree m.
+%%
+trials=10;
+first=1;
+last=20;
+sigma_nfft_a=2;
+sigma_taylor_a=2;
+sigma_nfft_b=1.5;
+sigma_taylor_b=1.5;
+sigma_nfft_c=16;
+sigma_taylor_c=16;
+
+% typical sigma
+system(sprintf('./taylor_nfft %d %d %d %d %f %f > taylor_nfft.data1a',1,first,...
+ last,trials,sigma_nfft_a,sigma_taylor_a));
+data=load('taylor_nfft.data1a');
+
+m_nfft=data(1:trials:end,5);
+e_nfft_a=(max(reshape(data(:,7),trials,last-first+1)))';
+t_nfft_a=(mean(reshape(data(:,6),trials,last-first+1)))';
+
+m_taylor=data(1:trials:end,9);
+e_taylor_a=(max(reshape(data(:,11),trials,last-first+1)))';
+t_taylor_a=(mean(reshape(data(:,10),trials,last-first+1)))';
+
+% small sigma
+system(sprintf('./taylor_nfft %d %d %d %d %f %f > taylor_nfft.data1b',1,first,...
+ last,trials,sigma_nfft_b,sigma_taylor_b));
+data=load('taylor_nfft.data1b');
+
+e_nfft_b=(max(reshape(data1(:,7),trials,last-first+1)))';
+e_taylor_b=(max(reshape(data1(:,11),trials,last-first+1)))';
+
+% large sigma
+system(sprintf('./taylor_nfft %d %d %d %d %f %f > taylor_nfft.data1c',1,first,...
+ last,trials,sigma_nfft_c,sigma_taylor_c));
+data=load('taylor_nfft.data1c');
+
+e_nfft_c=(max(reshape(data2(:,7),trials,last-first+1)))';
+e_taylor_c=(max(reshape(data2(:,11),trials,last-first+1)))';
+
+h=semilogy(m_taylor,e_taylor_a,'kd',...
+ m_nfft,e_nfft_a,'kx',...
+ m_taylor,e_taylor_b,'k',...
+ m_nfft,e_nfft_b,'k--',...
+ m_taylor,e_taylor,'k-.',...
+ m_nfft,e_nfft,'k:');
+set(h,'LineWidth',1.8); set(h,'MarkerSize',6);
+set(gca,'YTick',[10^-15,10^-10,10^-5,1]);
+set(gca,'FontSize',20);
+axis([m(1),m(end),10^-13,10^-1]);
+
+print temp.eps -deps
+if(to_pdf)
+ !ps2pdf temp.eps taylor_nfft1.pdf
+ !rm temp.eps
+else
+ !mv temp.eps taylor_nfft1.eps
+end;
+
+%%
+%% Testing accuracy vs. time.
+%%
+
+
+h=semilogy(avg_t_taylor,max_e_taylor,'ko',...
+ avg_t_nfft,max_e_nfft,'kx');
+set(h,'LineWidth',1.8); set(h,'MarkerSize',6);
+set(gca,'YTick',[10^-15,10^-10,10^-5,1]);
+set(gca,'FontSize',20);
+axis([min([t_nfft;t_taylor]),max([t_nfft;t_taylor]),10^-16,1]);
+
+print temp.eps -deps
+if(to_pdf)
+ !ps2pdf temp.eps taylor_nfft3.pdf
+ !rm temp.eps
+else
+ !mv temp.eps taylor_nfft3.eps
+end;
diff --git a/examples/nfsft/Makefile.am b/examples/nfsft/Makefile.am
new file mode 100644
index 0000000..152e0fe
--- /dev/null
+++ b/examples/nfsft/Makefile.am
@@ -0,0 +1,53 @@
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+if HAVE_THREADS
+ SIMPLE_TEST_THREADS=simple_test_threads
+else
+ SIMPLE_TEST_THREADS=
+endif
+
+if HAVE_THREADS
+if HAVE_OPENMP
+ NFSFT_BENCHOMP_PROGS=nfsft_benchomp nfsft_benchomp_createdataset nfsft_benchomp_detail_single nfsft_benchomp_detail_threads
+else
+ NFSFT_BENCHOMP_PROGS=
+endif
+else
+ NFSFT_BENCHOMP_PROGS=
+endif
+
+## The program name
+noinst_PROGRAMS = simple_test $(SIMPLE_TEST_THREADS) $(NFSFT_BENCHOMP_PROGS)
+
+## The source files.
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+if HAVE_THREADS
+ simple_test_threads_SOURCES = simple_test_threads.c
+ simple_test_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+if HAVE_OPENMP
+ simple_test_threads_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
+if HAVE_THREADS
+if HAVE_OPENMP
+ nfsft_benchomp_SOURCES = nfsft_benchomp.c
+ nfsft_benchomp_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ nfsft_benchomp_CFLAGS = $(OPENMP_CFLAGS)
+
+ nfsft_benchomp_createdataset_SOURCES = nfsft_benchomp_createdataset.c
+ nfsft_benchomp_createdataset_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+ nfsft_benchomp_detail_single_SOURCES = nfsft_benchomp_detail.c
+ nfsft_benchomp_detail_single_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+ nfsft_benchomp_detail_threads_SOURCES = nfsft_benchomp_detail.c
+ nfsft_benchomp_detail_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ nfsft_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
diff --git a/examples/nfsft/Makefile.in b/examples/nfsft/Makefile.in
new file mode 100644
index 0000000..b1f3636
--- /dev/null
+++ b/examples/nfsft/Makefile.in
@@ -0,0 +1,686 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT) $(am__EXEEXT_1) $(am__EXEEXT_2)
+subdir = examples/nfsft
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+ at HAVE_THREADS_TRUE@am__EXEEXT_1 = simple_test_threads$(EXEEXT)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am__EXEEXT_2 = \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ nfsft_benchomp$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ nfsft_benchomp_createdataset$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ nfsft_benchomp_detail_single$(EXEEXT) \
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@ nfsft_benchomp_detail_threads$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
+am__nfsft_benchomp_SOURCES_DIST = nfsft_benchomp.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfsft_benchomp_OBJECTS = nfsft_benchomp-nfsft_benchomp.$(OBJEXT)
+nfsft_benchomp_OBJECTS = $(am_nfsft_benchomp_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_DEPENDENCIES = $(top_builddir)/libnfft3_threads.la
+nfsft_benchomp_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(nfsft_benchomp_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__nfsft_benchomp_createdataset_SOURCES_DIST = \
+ nfsft_benchomp_createdataset.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfsft_benchomp_createdataset_OBJECTS = nfsft_benchomp_createdataset.$(OBJEXT)
+nfsft_benchomp_createdataset_OBJECTS = \
+ $(am_nfsft_benchomp_createdataset_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_createdataset_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am__nfsft_benchomp_detail_single_SOURCES_DIST = \
+ nfsft_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfsft_benchomp_detail_single_OBJECTS = nfsft_benchomp_detail.$(OBJEXT)
+nfsft_benchomp_detail_single_OBJECTS = \
+ $(am_nfsft_benchomp_detail_single_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_single_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am__nfsft_benchomp_detail_threads_SOURCES_DIST = \
+ nfsft_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfsft_benchomp_detail_threads_OBJECTS = nfsft_benchomp_detail_threads-nfsft_benchomp_detail.$(OBJEXT)
+nfsft_benchomp_detail_threads_OBJECTS = \
+ $(am_nfsft_benchomp_detail_threads_OBJECTS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_threads_DEPENDENCIES = $(top_builddir)/libnfft3_threads.la
+nfsft_benchomp_detail_threads_LINK = $(LIBTOOL) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(nfsft_benchomp_detail_threads_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am__simple_test_threads_SOURCES_DIST = simple_test_threads.c
+ at HAVE_THREADS_TRUE@am_simple_test_threads_OBJECTS = simple_test_threads-simple_test_threads.$(OBJEXT)
+simple_test_threads_OBJECTS = $(am_simple_test_threads_OBJECTS)
+ at HAVE_THREADS_TRUE@simple_test_threads_DEPENDENCIES = \
+ at HAVE_THREADS_TRUE@ $(top_builddir)/libnfft3_threads.la
+simple_test_threads_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(simple_test_threads_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(nfsft_benchomp_SOURCES) \
+ $(nfsft_benchomp_createdataset_SOURCES) \
+ $(nfsft_benchomp_detail_single_SOURCES) \
+ $(nfsft_benchomp_detail_threads_SOURCES) \
+ $(simple_test_SOURCES) $(simple_test_threads_SOURCES)
+DIST_SOURCES = $(am__nfsft_benchomp_SOURCES_DIST) \
+ $(am__nfsft_benchomp_createdataset_SOURCES_DIST) \
+ $(am__nfsft_benchomp_detail_single_SOURCES_DIST) \
+ $(am__nfsft_benchomp_detail_threads_SOURCES_DIST) \
+ $(simple_test_SOURCES) $(am__simple_test_threads_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+ at HAVE_THREADS_FALSE@SIMPLE_TEST_THREADS =
+ at HAVE_THREADS_TRUE@SIMPLE_TEST_THREADS = simple_test_threads
+ at HAVE_OPENMP_FALSE@@HAVE_THREADS_TRUE at NFSFT_BENCHOMP_PROGS =
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at NFSFT_BENCHOMP_PROGS = nfsft_benchomp nfsft_benchomp_createdataset nfsft_benchomp_detail_single nfsft_benchomp_detail_threads
+ at HAVE_THREADS_FALSE@NFSFT_BENCHOMP_PROGS =
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ at HAVE_THREADS_TRUE@simple_test_threads_SOURCES = simple_test_threads.c
+ at HAVE_THREADS_TRUE@simple_test_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at simple_test_threads_CFLAGS = $(OPENMP_CFLAGS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_SOURCES = nfsft_benchomp.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_CFLAGS = $(OPENMP_CFLAGS)
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_createdataset_SOURCES = nfsft_benchomp_createdataset.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_createdataset_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_single_SOURCES = nfsft_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_single_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_threads_SOURCES = nfsft_benchomp_detail.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nfsft/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu examples/nfsft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+nfsft_benchomp$(EXEEXT): $(nfsft_benchomp_OBJECTS) $(nfsft_benchomp_DEPENDENCIES) $(EXTRA_nfsft_benchomp_DEPENDENCIES)
+ @rm -f nfsft_benchomp$(EXEEXT)
+ $(nfsft_benchomp_LINK) $(nfsft_benchomp_OBJECTS) $(nfsft_benchomp_LDADD) $(LIBS)
+nfsft_benchomp_createdataset$(EXEEXT): $(nfsft_benchomp_createdataset_OBJECTS) $(nfsft_benchomp_createdataset_DEPENDENCIES) $(EXTRA_nfsft_benchomp_createdataset_DEPENDENCIES)
+ @rm -f nfsft_benchomp_createdataset$(EXEEXT)
+ $(LINK) $(nfsft_benchomp_createdataset_OBJECTS) $(nfsft_benchomp_createdataset_LDADD) $(LIBS)
+nfsft_benchomp_detail_single$(EXEEXT): $(nfsft_benchomp_detail_single_OBJECTS) $(nfsft_benchomp_detail_single_DEPENDENCIES) $(EXTRA_nfsft_benchomp_detail_single_DEPENDENCIES)
+ @rm -f nfsft_benchomp_detail_single$(EXEEXT)
+ $(LINK) $(nfsft_benchomp_detail_single_OBJECTS) $(nfsft_benchomp_detail_single_LDADD) $(LIBS)
+nfsft_benchomp_detail_threads$(EXEEXT): $(nfsft_benchomp_detail_threads_OBJECTS) $(nfsft_benchomp_detail_threads_DEPENDENCIES) $(EXTRA_nfsft_benchomp_detail_threads_DEPENDENCIES)
+ @rm -f nfsft_benchomp_detail_threads$(EXEEXT)
+ $(nfsft_benchomp_detail_threads_LINK) $(nfsft_benchomp_detail_threads_OBJECTS) $(nfsft_benchomp_detail_threads_LDADD) $(LIBS)
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES)
+ @rm -f simple_test$(EXEEXT)
+ $(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+simple_test_threads$(EXEEXT): $(simple_test_threads_OBJECTS) $(simple_test_threads_DEPENDENCIES) $(EXTRA_simple_test_threads_DEPENDENCIES)
+ @rm -f simple_test_threads$(EXEEXT)
+ $(simple_test_threads_LINK) $(simple_test_threads_OBJECTS) $(simple_test_threads_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsft_benchomp_createdataset.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsft_benchomp_detail.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test_threads-simple_test_threads.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+nfsft_benchomp-nfsft_benchomp.o: nfsft_benchomp.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_CFLAGS) $(CFLAGS) -MT nfsft_benchomp-nfsft_benchomp.o -MD -MP -MF $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Tpo -c -o nfsft_benchomp-nfsft_benchomp.o `test -f 'nfsft_benchomp.c' || echo '$(srcdir)/'`nfsft_benchomp.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Tpo $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nfsft_benchomp.c' object='nfsft_benchomp-nfsft_benchomp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_CFLAGS) $(CFLAGS) -c -o nfsft_benchomp-nfsft_benchomp.o `test -f 'nfsft_benchomp.c' || echo '$(srcdir)/'`nfsft_benchomp.c
+
+nfsft_benchomp-nfsft_benchomp.obj: nfsft_benchomp.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_CFLAGS) $(CFLAGS) -MT nfsft_benchomp-nfsft_benchomp.obj -MD -MP -MF $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Tpo -c -o nfsft_benchomp-nfsft_benchomp.obj `if test -f 'nfsft_benchomp.c'; then $(CYGPATH_W) 'nfsft_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/nfsft_benchomp.c'; fi`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Tpo $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nfsft_benchomp.c' object='nfsft_benchomp-nfsft_benchomp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_CFLAGS) $(CFLAGS) -c -o nfsft_benchomp-nfsft_benchomp.obj `if test -f 'nfsft_benchomp.c'; then $(CYGPATH_W) 'nfsft_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/nfsft_benchomp.c'; fi`
+
+nfsft_benchomp_detail_threads-nfsft_benchomp_detail.o: nfsft_benchomp_detail.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT nfsft_benchomp_detail_threads-nfsft_benchomp_detail.o -MD -MP -MF $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Tpo -c -o nfsft_benchomp_detail_threads-nfsft_benchomp_detail.o `test -f 'nfsft_benchomp_detail.c' || echo '$(srcdir)/'`nfsft_benchomp_detail.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Tpo $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nfsft_benchomp_detail.c' object='nfsft_benchomp_detail_threads-nfsft_benchomp_detail.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o nfsft_benchomp_detail_threads-nfsft_benchomp_detail.o `test -f 'nfsft_benchomp_detail.c' || echo '$(srcdir)/'`nfsft_benchomp_detail.c
+
+nfsft_benchomp_detail_threads-nfsft_benchomp_detail.obj: nfsft_benchomp_detail.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT nfsft_benchomp_detail_threads-nfsft_benchomp_detail.obj -MD -MP -MF $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Tpo -c -o nfsft_benchomp_detail_threads-nfsft_benchomp_detail.obj `if test -f 'nfsft_benchomp_detail.c'; then $(CYGPATH_W) 'nfsft_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/nfsft_benchomp_detail.c'; fi`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Tpo $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nfsft_benchomp_detail.c' object='nfsft_benchomp_detail_threads-nfsft_benchomp_detail.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o nfsft_benchomp_detail_threads-nfsft_benchomp_detail.obj `if test -f 'nfsft_benchomp_detail.c'; then $(CYGPATH_W) 'nfsft_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/nfsft_benchomp_detail.c'; fi`
+
+simple_test_threads-simple_test_threads.o: simple_test_threads.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(simple_test_threads_CFLAGS) $(CFLAGS) -MT simple_test_threads-simple_test_threads.o -MD -MP -MF $(DEPDIR)/simple_test_threads-simple_test_threads.Tpo -c -o simple_test_threads-simple_test_threads.o `test -f 'simple_test_threads.c' || echo '$(srcdir)/'`simple_test_threads.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/simple_test_threads-simple_test_threads.Tpo $(DEPDIR)/simple_test_threads-simple_test_threads.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple_test_threads.c' object='simple_test_threads-simple_test_threads.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(simple_test_threads_CFLAGS) $(CFLAGS) -c -o simple_test_threads-simple_test_threads.o `test -f 'simple_test_threads.c' || echo '$(srcdir)/'`simple_test_threads.c
+
+simple_test_threads-simple_test_threads.obj: simple_test_threads.c
+ at am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(simple_test_threads_CFLAGS) $(CFLAGS) -MT simple_test_threads-simple_test_threads.obj -MD -MP -MF $(DEPDIR)/simple_test_threads-simple_test_threads.Tpo -c -o simple_test_threads-simple_test_threads.obj `if test -f 'simple_test_threads.c'; then $(CYGPATH_W) 'simple_test_threads.c'; else $(CYGPATH_W) '$(srcdir)/simple_test_threads.c'; fi`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/simple_test_threads-simple_test_threads.Tpo $(DEPDIR)/simple_test_threads-simple_test_threads.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple_test_threads.c' object='simple_test_threads-simple_test_threads.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(simple_test_threads_CFLAGS) $(CFLAGS) -c -o simple_test_threads-simple_test_threads.obj `if test -f 'simple_test_threads.c'; then $(CYGPATH_W) 'simple_test_threads.c'; else $(CYGPATH_W) '$(srcdir)/simple_test_threads.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/nfsft/nfsft_benchomp.c b/examples/nfsft/nfsft_benchomp.c
new file mode 100644
index 0000000..abb3408
--- /dev/null
+++ b/examples/nfsft/nfsft_benchomp.c
@@ -0,0 +1,517 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "config.h"
+
+#include <nfft3.h>
+#include <nfft3util.h>
+
+#define NREPEAT 5
+
+static FILE* file_out_tex = NULL;
+
+int get_nthreads_array(int **arr)
+{
+ int max_threads = nfft_get_omp_num_threads();
+ int alloc_num = 2;
+ int k;
+ int ret_number = 0;
+ int max_threads_pw2 = (max_threads / 2) * 2 == max_threads ? 1 : 0;
+
+ if (max_threads <= 5)
+ {
+ *arr = (int*) malloc(max_threads*sizeof(int));
+ for (k = 0; k < max_threads; k++)
+ *(*arr + k) = k+1;
+ return max_threads;
+ }
+
+ for (k = 1; k <= max_threads; k*=2, alloc_num++);
+
+ *arr = (int*) malloc(alloc_num*sizeof(int));
+
+ for (k = 1; k <= max_threads; k*=2)
+ {
+ if (k != max_threads && 2*k > max_threads && max_threads_pw2)
+ {
+ *(*arr + ret_number) = max_threads/2;
+ ret_number++;
+ }
+
+ *(*arr + ret_number) = k;
+ ret_number++;
+
+ if (k != max_threads && 2*k > max_threads)
+ {
+ *(*arr + ret_number) = max_threads;
+ ret_number++;
+ break;
+ }
+ }
+
+ return ret_number;
+}
+
+
+void check_result_value(const int val, const int ok, const char *msg)
+{
+ if (val != ok)
+ {
+ fprintf(stderr, "ERROR %s: %d not %d\n", msg, val, ok);
+
+ exit(1);
+ }
+}
+
+void run_test_create(int trafo_adjoint, int N, int M)
+{
+ char cmd[1025];
+
+ snprintf(cmd, 1024, "./nfsft_benchomp_createdataset %d %d %d > nfsft_benchomp_test.data", trafo_adjoint, N, M);
+ fprintf(stderr, "%s\n", cmd);
+ check_result_value(system(cmd), 0, "createdataset");
+}
+
+void run_test_init_output()
+{
+ FILE *f = fopen("nfsft_benchomp_test.result", "w");
+ if (f!= NULL)
+ fclose(f);
+}
+
+typedef struct
+{
+ int trafo_adjoint;
+ int N;
+ int M;
+ int m;
+ int nfsft_flags;
+ int psi_flags;
+} s_param;
+
+typedef struct
+{
+ double avg;
+ double min;
+ double max;
+} s_resval;
+
+typedef struct
+{
+ int nthreads;
+ s_resval resval[6];
+} s_result;
+
+typedef struct
+{
+ s_param param;
+ s_result *results;
+ int nresults;
+} s_testset;
+
+void run_test(s_resval *res, int nrepeat, int m, int nfsft_flags, int psi_flags, int nthreads)
+{
+ FILE *f;
+ char cmd[1025];
+ int r,t;
+
+ for (t = 0; t < 6; t++)
+ {
+ res[t].avg = 0.0; res[t].min = 1.0/0.0; res[t].max = 0.0;
+ }
+
+ if (nthreads < 2)
+ snprintf(cmd, 1024, "./nfsft_benchomp_detail_single %d %d %d %d < nfsft_benchomp_test.data > nfsft_benchomp_test.out", m, nfsft_flags, psi_flags, nrepeat);
+ else
+ snprintf(cmd, 1024, "./nfsft_benchomp_detail_threads %d %d %d %d %d < nfsft_benchomp_test.data > nfsft_benchomp_test.out", m, nfsft_flags, psi_flags, nrepeat, nthreads);
+ fprintf(stderr, "%s\n", cmd);
+
+ check_result_value(system(cmd), 0, cmd);
+
+ f = fopen("nfsft_benchomp_test.out", "r");
+ for (r = 0; r < nrepeat; r++)
+ {
+ int retval;
+ double v[6];
+// FILE *f;
+// check_result_value(system(cmd), 0, cmd);
+// f = fopen("nfsft_benchomp_test.out", "r");
+ retval = fscanf(f, "%lg %lg %lg %lg %lg %lg", v, v+1, v+2, v+3, v+4, v+5);
+ check_result_value(retval, 6, "read nfsft_benchomp_test.out");
+// fclose(f);
+// fprintf(stderr, "%.3e %.3e %.3e %.3e %.3e %.3e\n", v[0], v[1], v[2], v[3], v[4], v[5]);
+ for (t = 0; t < 6; t++)
+ {
+ res[t].avg += v[t];
+ if (res[t].min > v[t])
+ res[t].min = v[t];
+ if (res[t].max < v[t])
+ res[t].max = v[t];
+ }
+ }
+ fclose(f);
+
+ for (t = 0; t < 6; t++)
+ res[t].avg /= nrepeat;
+
+ fprintf(stderr, "%d %d: ", nthreads, nrepeat);
+ for (t = 0; t < 6; t++)
+ fprintf(stderr, "%.3e %.3e %.3e | ", res[t].avg, res[t].min, res[t].max);
+ fprintf(stderr, "\n");
+}
+
+const char *get_psi_string(int flags)
+{
+ if (flags & PRE_PSI)
+ return "prepsi";
+ else if (flags & PRE_ONE_PSI)
+ return "unknownPSI";
+
+ return "nopsi";
+}
+const char *get_sort_string(int flags)
+{
+ if (flags & NFFT_SORT_NODES)
+ return "sorted";
+
+ return "unsorted";
+}
+
+const char *get_adjoint_omp_string(int flags)
+{
+ if (flags & NFFT_OMP_BLOCKWISE_ADJOINT)
+ return "blockwise";
+
+ return "";
+}
+
+#define MASK_TA (1U<<1)
+#define MASK_N (1U<<2)
+#define MASK_M (1U<<4)
+#define MASK_WINM (1U<<5)
+#define MASK_FLAGS_PSI (1U<<6)
+#define MASK_FLAGS_SORT (1U<<7)
+#define MASK_FLAGS_BW (1U<<8)
+#define MASK_FLAGS_FPT (1U<<9)
+
+unsigned int determine_different_parameters(s_testset *testsets, int ntestsets)
+{
+ int t;
+ unsigned int mask = 0;
+
+ if (ntestsets < 2)
+ return 0;
+
+ for (t = 1; t < ntestsets; t++)
+ {
+ if (testsets[t-1].param.trafo_adjoint != testsets[t].param.trafo_adjoint)
+ mask |= MASK_TA;
+ if (testsets[t-1].param.N != testsets[t].param.N)
+ mask |= MASK_N;
+ if (testsets[t-1].param.M != testsets[t].param.M)
+ mask |= MASK_M;
+ if (testsets[t-1].param.m != testsets[t].param.m)
+ mask |= MASK_WINM;
+ if ((testsets[t-1].param.psi_flags & PRE_ONE_PSI) != (testsets[t].param.psi_flags & PRE_ONE_PSI))
+ mask |= MASK_FLAGS_PSI;
+ if ((testsets[t-1].param.psi_flags & NFFT_SORT_NODES) != (testsets[t].param.psi_flags & NFFT_SORT_NODES))
+ mask |= MASK_FLAGS_SORT;
+ if ((testsets[t-1].param.psi_flags & NFFT_OMP_BLOCKWISE_ADJOINT) != (testsets[t].param.psi_flags & NFFT_OMP_BLOCKWISE_ADJOINT))
+ mask |= MASK_FLAGS_BW;
+ if ((testsets[t-1].param.nfsft_flags & NFSFT_USE_DPT) != (testsets[t].param.nfsft_flags & NFSFT_USE_DPT))
+ mask |= MASK_FLAGS_FPT;
+ }
+
+ return mask;
+}
+
+void get_plot_title(char *outstr, int maxlen, char *hostname, s_param param, unsigned int diff_mask)
+{
+ unsigned int mask = ~diff_mask;
+ int offset = 0;
+ int len;
+
+ len = snprintf(outstr, maxlen, "%s", hostname);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+
+ if (mask & MASK_TA)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " $\\mathrm{NFSFT}%s$", param.trafo_adjoint==0?"":"^\\top");
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_N)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " N=%d", param.N);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_M)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " M=%d", param.M);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_WINM)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " m=%d", param.m);
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_FLAGS_PSI)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " %s", get_psi_string(param.psi_flags));
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_FLAGS_SORT)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " %s", get_sort_string(param.psi_flags));
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if ((mask & MASK_FLAGS_BW) && strlen(get_adjoint_omp_string(param.psi_flags)) > 0)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, " %s", get_adjoint_omp_string(param.psi_flags));
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+ if (mask & MASK_FLAGS_FPT)
+ {
+ len = snprintf(outstr+offset, maxlen-offset, param.nfsft_flags & NFSFT_USE_DPT ? " DPT" : "");
+ if (len < 0 || len+offset >= maxlen-1) return;
+ offset += len;
+ }
+
+}
+
+void print_output_speedup_total_tref(FILE *out, s_testset *testsets, int ntestsets, int use_tref, double tref)
+{
+ int i, t;
+ char hostname[1025];
+ char plottitle[1025];
+ unsigned int diff_mask = determine_different_parameters(testsets, ntestsets);
+
+ if (gethostname(hostname, 1024) != 0)
+ strncpy(hostname, "unnamed", 1024);
+
+ get_plot_title(plottitle, 1024, hostname, testsets[0].param, diff_mask);
+
+ fprintf(out, "\\begin{tikzpicture}\n");
+ fprintf(out, "\\begin{axis}[");
+ fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Speedup, xtick=data, legend style={ legend pos = north west, legend columns=1}, ymajorgrids=true, yminorgrids=true, minor y tick num=4, ");
+ fprintf(out, " title={%s}", plottitle);
+ fprintf(out, " ]\n");
+
+ for (t = 0; t < ntestsets; t++)
+ {
+ s_testset testset = testsets[t];
+ fprintf(stderr, "%s $\\mathrm{NFSFT}%s$ N=%d M=%d m=%d %s %s %s}", hostname, testset.param.trafo_adjoint==0?"":"^\\top", testset.param.N, testset.param.M, testset.param.m, get_psi_string(testset.param.psi_flags), get_sort_string(testset.param.psi_flags), get_adjoint_omp_string(testset.param.psi_flags));
+ fprintf(stderr, "\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < testset.nresults; i++)
+ if (use_tref == 1)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, tref/testset.results[i].resval[5].avg);
+ else
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[0].resval[5].avg/testset.results[i].resval[5].avg);
+ fprintf(out, "};\n");
+
+ for (i = 0; i < testset.nresults; i++)
+ if (use_tref == 1)
+ fprintf(stderr, "%d:%.3f ", testset.results[i].nthreads, tref/testset.results[i].resval[5].avg);
+ else
+ fprintf(stderr, "%d:%.3f ", testset.results[i].nthreads, testset.results[0].resval[5].avg/testset.results[i].resval[5].avg);
+ fprintf(stderr, "\n\n");
+ }
+
+ fprintf(out, "\\legend{{");
+ for (t = 0; t < ntestsets; t++)
+ {
+ char title[256];
+ if (t > 0)
+ fprintf(out, "},{");
+ get_plot_title(title, 255, "", testsets[t].param, ~(diff_mask));
+ fprintf(out, "%s", title);
+ }
+ fprintf(out, "}}\n");
+ fprintf(out, "\\end{axis}\n");
+ fprintf(out, "\\end{tikzpicture}\n");
+ fprintf(out, "\n\n");
+
+ fflush(out);
+}
+
+void print_output_speedup_total(FILE *out, s_testset *testsets, int ntestsets, int use_tref)
+{
+ double tref = 1.0/0.0;
+ int t, k;
+
+ if (use_tref == 1)
+ for (t = 0; t < ntestsets; t++)
+ for (k = 0; k < testsets[t].nresults; k++)
+ if (testsets[t].results[k].nthreads == 1 && testsets[t].results[k].resval[5].avg < tref)
+ tref = testsets[t].results[k].resval[5].avg;
+
+ print_output_speedup_total_tref(out, testsets, ntestsets, use_tref, tref);
+}
+
+void print_output_histo_PENRT(FILE *out, s_testset testset)
+{
+ int i, size = testset.nresults;
+ char hostname[1025];
+
+ if (gethostname(hostname, 1024) != 0)
+ strncpy(hostname, "unnamed", 1024);
+
+ fprintf(out, "\\begin{tikzpicture}\n");
+ fprintf(out, "\\begin{axis}[");
+ fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, ");
+ fprintf(out, "symbolic x coords={");
+ for (i = 0; i < size; i++)
+ if (i > 0)
+ fprintf(out, ",%d", testset.results[i].nthreads);
+ else
+ fprintf(out, "%d", testset.results[i].nthreads);
+
+ fprintf(out, "}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, ");
+ fprintf(out, " title={%s $\\mathrm{NFSFT}%s$ N=%d M=%d m=%d %s %s %s}", hostname, testset.param.trafo_adjoint==0?"":"^\\top", testset.param.N, testset.param.M, testset.param.m, get_psi_string(testset.param.psi_flags), get_sort_string(testset.param.psi_flags), get_adjoint_omp_string(testset.param.psi_flags));
+ fprintf(out, " ]\n");
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[1].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[2].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[3].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[0].avg + testset.results[i].resval[4].avg);
+ fprintf(out, "};\n");
+
+ fprintf(out, "\\addplot coordinates {");
+ for (i = 0; i < size; i++)
+ fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[5].avg);
+ fprintf(out, "};\n");
+ fprintf(out, "\\legend{%s,%s,$\\mathrm{NFFT}%s$,rest,total}\n", testset.param.nfsft_flags & NFSFT_USE_DPT ? "DPT" : "FPT", testset.param.trafo_adjoint==0?"c2e":"$\\mathrm{c2e}^\\top$", testset.param.trafo_adjoint==0?"":"^\\top");
+ fprintf(out, "\\end{axis}\n");
+ fprintf(out, "\\end{tikzpicture}\n");
+ fprintf(out, "\n\n");
+
+ fflush(out);
+}
+
+void run_testset(s_testset *testset, int trafo_adjoint, int N, int M, int m, int nfsft_flags, int psi_flags, int *nthreads_array, int n_threads_array_size)
+{
+ int i;
+ testset->param.trafo_adjoint = trafo_adjoint;
+ testset->param.N = N;
+ testset->param.M = M;
+ testset->param.m = m;
+ testset->param.nfsft_flags = nfsft_flags;
+ testset->param.psi_flags = psi_flags;
+
+ testset->results = (s_result*) malloc(n_threads_array_size*sizeof(s_result));
+ testset->nresults = n_threads_array_size;
+
+ run_test_create(testset->param.trafo_adjoint, testset->param.N, testset->param.M);
+ for (i = 0; i < n_threads_array_size; i++)
+ {
+ testset->results[i].nthreads = nthreads_array[i];
+ run_test(testset->results[i].resval, NREPEAT, testset->param.m, testset->param.nfsft_flags, testset->param.psi_flags, testset->results[i].nthreads = nthreads_array[i]);
+ }
+
+}
+
+void test1(int *nthreads_array, int n_threads_array_size, int m)
+{
+ s_testset testsets[4];
+
+ run_testset(&testsets[0], 0, 1024, 1000000, m, 0, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_PENRT(file_out_tex, testsets[0]);
+#endif
+
+ run_testset(&testsets[1], 1, 1024, 1000000, m, 0, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_PENRT(file_out_tex, testsets[1]);
+#endif
+
+ print_output_speedup_total(file_out_tex, testsets, 2, 0);
+
+ run_testset(&testsets[2], 0, 1024, 1000000, m, NFSFT_USE_DPT, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_PENRT(file_out_tex, testsets[2]);
+#endif
+
+ run_testset(&testsets[3], 1, 1024, 1000000, m, NFSFT_USE_DPT, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+ print_output_histo_PENRT(file_out_tex, testsets[3]);
+#endif
+
+ print_output_speedup_total(file_out_tex, testsets+2, 2, 0);
+}
+
+int main(int argc, char** argv)
+{
+ int *nthreads_array;
+ int n_threads_array_size = get_nthreads_array(&nthreads_array);
+ int k;
+
+#if !(defined MEASURE_TIME && defined MEASURE_TIME_FFTW)
+ fprintf(stderr, "WARNING: Detailed time measurements for NFSFT are not activated.\n");
+ fprintf(stderr, "For more detailed plots, please re-run the configure script with options\n");
+ fprintf(stderr, "--enable-measure-time --enable-measure-time-fftw --enable-nfsft --enable-openmp\n");
+ fprintf(stderr, "and run \"make clean all\"\n\n");
+#endif
+
+ for (k = 0; k < n_threads_array_size; k++)
+ fprintf(stderr, "%d ", nthreads_array[k]);
+ fprintf(stderr, "\n");
+
+ file_out_tex = fopen("nfsft_benchomp_results_plots.tex", "w");
+
+ test1(nthreads_array, n_threads_array_size, 2);
+ test1(nthreads_array, n_threads_array_size, 4);
+ test1(nthreads_array, n_threads_array_size, 6);
+ test1(nthreads_array, n_threads_array_size, 8);
+
+ fclose(file_out_tex);
+
+ return 0;
+}
diff --git a/examples/nfsft/nfsft_benchomp_createdataset.c b/examples/nfsft/nfsft_benchomp_createdataset.c
new file mode 100644
index 0000000..72f7643
--- /dev/null
+++ b/examples/nfsft/nfsft_benchomp_createdataset.c
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <complex.h>
+
+#include "config.h"
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+void nfsft_benchomp_createdataset(unsigned int trafo_adjoint, int N, int M)
+{
+ int t, j, k, n;
+ R *x;
+ C *f, *f_hat;
+ int N_total = (2*N+2) * (2*N+2);
+ nfsft_plan ptemp;
+
+ nfsft_init_guru(&ptemp, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |
+ NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,
+ PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFT_OUT_OF_PLACE, 6);
+
+ x = (R*) nfft_malloc(2*M*sizeof(R));
+ f = (C*) nfft_malloc(M*sizeof(C));
+ f_hat = (C*) nfft_malloc(N_total*sizeof(C));
+
+ /* init pseudo-random nodes */
+ for (j = 0; j < M; j++)
+ {
+ x[2*j]= nfft_drand48() - K(0.5);
+ x[2*j+1]= K(0.5) * nfft_drand48();
+ }
+
+ if (trafo_adjoint==0)
+ {
+ for (k = 0; k <= N; k++)
+ for (n = -k; n <= k; n++)
+ nfft_vrand_unit_complex(f_hat+NFSFT_INDEX(k,n,&ptemp),1);
+ }
+ else
+ {
+ nfft_vrand_unit_complex(f,M);
+ }
+
+ printf("%d %d %d\n", trafo_adjoint, N, M);
+
+ for (j=0; j < M; j++)
+ {
+ for (t=0; t < 2; t++)
+ printf("%.16e ", x[2*j+t]);
+ printf("\n");
+ }
+
+ if (trafo_adjoint==0)
+ {
+ for (k = 0; k <= N; k++)
+ for (n = -k; n <= k; n++)
+ printf("%.16e %.16e\n", creal(f_hat[NFSFT_INDEX(k,n,&ptemp)]), cimag(f_hat[NFSFT_INDEX(k,n,&ptemp)]));
+ }
+ else
+ {
+ for (j=0; j < M; j++)
+ printf("%.16e %.16e\n", creal(f[j]), cimag(f[j]));
+ }
+
+ nfft_free(x);
+ nfft_free(f);
+ nfft_free(f_hat);
+}
+
+int main(int argc, char **argv)
+{
+ int trafo_adjoint;
+ int N;
+ int M;
+
+ if (argc < 4) {
+ fprintf(stderr, "usage: tr_adj N M\n");
+ return -1;
+ }
+
+ trafo_adjoint = atoi(argv[1]);
+ if (trafo_adjoint < 0 && trafo_adjoint > 1)
+ trafo_adjoint = 1;
+
+ N = atoi(argv[2]);
+ M = atoi(argv[3]);
+ fprintf(stderr, "tr_adj=%d, N=%d, M=%d\n", trafo_adjoint, N, M);
+
+ nfsft_benchomp_createdataset(trafo_adjoint, N, M);
+
+ return 0;
+}
diff --git a/examples/nfsft/nfsft_benchomp_detail.c b/examples/nfsft/nfsft_benchomp_detail.c
new file mode 100644
index 0000000..dad50d1
--- /dev/null
+++ b/examples/nfsft/nfsft_benchomp_detail.c
@@ -0,0 +1,218 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3372 2009-10-21 06:04:05Z skunis $ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <complex.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+void bench_openmp_readfile(FILE *infile, int *trafo_adjoint, int *N, int *M, double **x, C **f_hat, C **f)
+{
+ double re,im;
+ int k, n, j, t;
+ nfsft_plan plan;
+
+ fscanf(infile, "%d %d %d", trafo_adjoint, N, M);
+ *x = (double *)nfft_malloc(2*(*M)*sizeof(double));
+ *f_hat = (C*)nfft_malloc((2*(*N)+2) * (2*(*N)+2) * sizeof(C));
+ *f = (C*)nfft_malloc((*M)*sizeof(C));
+
+ memset(*f_hat,0U,(2*(*N)+2) * (2*(*N)+2) * sizeof(C));
+ memset(*f,0U,(*M)*sizeof(C));
+
+#ifdef _OPENMP
+ fftw_import_wisdom_from_filename("nfsft_benchomp_detail_threads.plan");
+#else
+ fftw_import_wisdom_from_filename("nfsft_benchomp_detail_single.plan");
+#endif
+
+ nfsft_init_guru(&plan, *N, *M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |
+ NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,
+ PRE_PHI_HUT | FFTW_INIT | FFT_OUT_OF_PLACE, 6);
+
+#ifdef _OPENMP
+ fftw_export_wisdom_to_filename("nfsft_benchomp_detail_threads.plan");
+#else
+ fftw_export_wisdom_to_filename("nfsft_benchomp_detail_single.plan");
+#endif
+
+ for (j=0; j < *M; j++)
+ for (t=0; t < 2; t++)
+ fscanf(infile, "%lg", (*x)+2*j+t);
+
+ if (trafo_adjoint==0)
+ {
+ for (k = 0; k <= *N; k++)
+ for (n = -k; n <= k; n++)
+ {
+ fscanf(infile, "%lg %lg", &re, &im);
+ (*f_hat)[NFSFT_INDEX(k,n,&plan)] = re + _Complex_I * im;
+ }
+ }
+ else
+ {
+ for (j=0; j < *M; j++)
+ {
+ fscanf(infile, "%lg %lg", &re, &im);
+ (*f)[j] = re + _Complex_I * im;
+ }
+ }
+
+ nfsft_finalize(&plan);
+}
+
+void bench_openmp(int trafo_adjoint, int N, int M, double *x, C *f_hat, C *f, int m, int nfsft_flags, int psi_flags)
+{
+ nfsft_plan plan;
+ int k, n;
+// int N, M, trafo_adjoint;
+ int t, j;
+ ticks t0, t1;
+ double tt_total, tt_pre;
+
+// fscanf(infile, "%d %d %d", &trafo_adjoint, &N, &M);
+
+/*#ifdef _OPENMP
+ fftw_import_wisdom_from_filename("nfsft_benchomp_detail_threads.plan");
+#else
+ fftw_import_wisdom_from_filename("nfsft_benchomp_detail_single.plan");
+#endif*/
+
+ /* precomputation (for fast polynomial transform) */
+// nfsft_precompute(N,1000.0,0U,0U);
+
+ /* Initialize transform plan using the guru interface. All input and output
+ * arrays are allocated by nfsft_init_guru(). Computations are performed with
+ * respect to L^2-normalized spherical harmonics Y_k^n. The array of spherical
+ * Fourier coefficients is preserved during transformations. The NFFT uses a
+ * cut-off parameter m = 6. See the NFFT 3 manual for details.
+ */
+ nfsft_init_guru(&plan, N, M, nfsft_flags | NFSFT_MALLOC_X | NFSFT_MALLOC_F |
+ NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,
+ PRE_PHI_HUT | psi_flags | FFTW_INIT | FFT_OUT_OF_PLACE, m);
+
+/*#ifdef _OPENMP
+ fftw_export_wisdom_to_filename("nfsft_benchomp_detail_threads.plan");
+#else
+ fftw_export_wisdom_to_filename("nfsft_benchomp_detail_single.plan");
+#endif*/
+
+ for (j=0; j < plan.M_total; j++)
+ {
+ for (t=0; t < 2; t++)
+ // fscanf(infile, "%lg", plan.x+2*j+t);
+ plan.x[2*j+t] = x[2*j+t];
+ }
+
+ if (trafo_adjoint==0)
+ {
+ memset(plan.f_hat,0U,plan.N_total*sizeof(double _Complex));
+ for (k = 0; k <= plan.N; k++)
+ for (n = -k; n <= k; n++)
+ {
+// fscanf(infile, "%lg %lg", &re, &im);
+// plan.f_hat[NFSFT_INDEX(k,n,&plan)] = re + _Complex_I * im;
+ plan.f_hat[NFSFT_INDEX(k,n,&plan)] = f_hat[NFSFT_INDEX(k,n,&plan)];
+ }
+ }
+ else
+ {
+ for (j=0; j < plan.M_total; j++)
+ {
+// fscanf(infile, "%lg %lg", &re, &im);
+// plan.f[j] = re + _Complex_I * im;
+ plan.f[j] = f[j];
+ }
+
+ memset(plan.f_hat,0U,plan.N_total*sizeof(double _Complex));
+ }
+
+ t0 = getticks();
+ /* precomputation (for NFFT, node-dependent) */
+ nfsft_precompute_x(&plan);
+ t1 = getticks();
+ tt_pre = nfft_elapsed_seconds(t1,t0);
+
+ if (trafo_adjoint==0)
+ nfsft_trafo(&plan);
+ else
+ nfsft_adjoint(&plan);
+ t1 = getticks();
+ tt_total = nfft_elapsed_seconds(t1,t0);
+
+#ifndef MEASURE_TIME
+ plan.MEASURE_TIME_t[0] = 0.0;
+ plan.MEASURE_TIME_t[2] = 0.0;
+#endif
+
+#ifndef MEASURE_TIME_FFTW
+ plan.MEASURE_TIME_t[1] = 0.0;
+#endif
+
+ printf("%.6e %.6e %6e %.6e %.6e %.6e\n", tt_pre, plan.MEASURE_TIME_t[0], plan.MEASURE_TIME_t[1], plan.MEASURE_TIME_t[2], tt_total-tt_pre-plan.MEASURE_TIME_t[0]-plan.MEASURE_TIME_t[1]-plan.MEASURE_TIME_t[2], tt_total);
+
+ /** finalise the one dimensional plan */
+ nfsft_finalize(&plan);
+}
+
+int main(int argc, char **argv)
+{
+ int m, nfsft_flags, psi_flags;
+ int nrepeat;
+ int trafo_adjoint, N, M, r;
+ double *x;
+ C *f_hat, *f;
+#ifdef _OPENMP
+ int nthreads;
+
+ if (argc != 6)
+ return 1;
+
+ nthreads = atoi(argv[5]);
+ fftw_init_threads();
+ omp_set_num_threads(nthreads);
+#else
+ if (argc != 5)
+ return 1;
+#endif
+
+ m = atoi(argv[1]);
+ nfsft_flags = atoi(argv[2]);
+ psi_flags = atoi(argv[3]);
+ nrepeat = atoi(argv[4]);
+
+ bench_openmp_readfile(stdin, &trafo_adjoint, &N, &M, &x, &f_hat, &f);
+
+ /* precomputation (for fast polynomial transform) */
+ nfsft_precompute(N,1000.0,0U,0U);
+
+ for (r = 0; r < nrepeat; r++)
+ bench_openmp(trafo_adjoint, N, M, x, f_hat, f, m, nfsft_flags, psi_flags);
+
+ return 0;
+}
diff --git a/examples/nfsft/simple_test.c b/examples/nfsft/simple_test.c
new file mode 100644
index 0000000..96856be
--- /dev/null
+++ b/examples/nfsft/simple_test.c
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3902 2012-10-16 14:02:31Z tovo $ */
+
+#include "config.h"
+
+/* standard headers */
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+/* It is important to include complex.h before nfft3.h. */
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3.h" /* NFFT3 header */
+#include "nfft3util.h" /* NFFT3 utilities header*/
+#include "infft.h" /* NFFT3 internal header */
+
+static void simple_test_nfsft(void)
+{
+ const int N = 4; /* bandwidth/maximum degree */
+ const int M = 8; /* number of nodes */
+ nfsft_plan plan; /* transform plan */
+ int j, k, n; /* loop variables */
+
+ /* precomputation (for fast polynomial transform) */
+ nfsft_precompute(N,1000.0,0U,0U);
+
+ /* Initialize transform plan using the guru interface. All input and output
+ * arrays are allocated by nfsft_init_guru(). Computations are performed with
+ * respect to L^2-normalized spherical harmonics Y_k^n. The array of spherical
+ * Fourier coefficients is preserved during transformations. The NFFT uses a
+ * cut-off parameter m = 6. See the NFFT 3 manual for details.
+ */
+ nfsft_init_guru(&plan, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |
+ NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,
+ PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFT_OUT_OF_PLACE, 6);
+
+ /* pseudo-random nodes */
+ for (j = 0; j < plan.M_total; j++)
+ {
+ plan.x[2*j]= nfft_drand48() - K(0.5);
+ plan.x[2*j+1]= K(0.5) * nfft_drand48();
+ }
+
+ /* precomputation (for NFFT, node-dependent) */
+ nfsft_precompute_x(&plan);
+
+ /* pseudo-random Fourier coefficients */
+ for (k = 0; k <= plan.N; k++)
+ for (n = -k; n <= k; n++)
+ plan.f_hat[NFSFT_INDEX(k,n,&plan)] =
+ nfft_drand48() - K(0.5) + _Complex_I*(nfft_drand48() - K(0.5));
+
+ /* Direct transformation, display result. */
+ nfsft_trafo_direct(&plan);
+ printf("Vector f (NDSFT):\n");
+ for (j = 0; j < plan.M_total; j++)
+ printf("f[%+2d] = %+5.3" FE " %+5.3" FE "*I\n",j,
+ creal(plan.f[j]), cimag(plan.f[j]));
+
+ printf("\n");
+
+ /* Fast approximate transformation, display result. */
+ nfsft_trafo(&plan);
+ printf("Vector f (NFSFT):\n");
+ for (j = 0; j < plan.M_total; j++)
+ printf("f[%+2d] = %+5.3" FE " %+5.3" FE "*I\n",j,
+ creal(plan.f[j]), cimag(plan.f[j]));
+
+ printf("\n");
+
+ /* Direct adjoint transformation, display result. */
+ nfsft_adjoint_direct(&plan);
+ printf("Vector f_hat (NDSFT):\n");
+ for (k = 0; k <= plan.N; k++)
+ for (n = -k; n <= k; n++)
+ fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" FE " %+5.3" FE "*I\n",k,n,
+ creal(plan.f_hat[NFSFT_INDEX(k,n,&plan)]),
+ cimag(plan.f_hat[NFSFT_INDEX(k,n,&plan)]));
+
+ printf("\n");
+
+ /* Fast approximate adjoint transformation, display result. */
+ nfsft_adjoint(&plan);
+ printf("Vector f_hat (NFSFT):\n");
+ for (k = 0; k <= plan.N; k++)
+ {
+ for (n = -k; n <= k; n++)
+ {
+ fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" FE " %+5.3" FE "*I\n",k,n,
+ creal(plan.f_hat[NFSFT_INDEX(k,n,&plan)]),
+ cimag(plan.f_hat[NFSFT_INDEX(k,n,&plan)]));
+ }
+ }
+
+ /* Finalize the plan. */
+ nfsft_finalize(&plan);
+
+ /* Destroy data precomputed for fast polynomial transform. */
+ nfsft_forget();
+}
+
+int main(void)
+{
+ printf("Computing an NDSFT, an NFSFT, an adjoint NDSFT, and an adjoint NFSFT"
+ "...\n\n");
+ simple_test_nfsft();
+ return EXIT_SUCCESS;
+}
diff --git a/examples/nfsft/simple_test_threads.c b/examples/nfsft/simple_test_threads.c
new file mode 100644
index 0000000..7864358
--- /dev/null
+++ b/examples/nfsft/simple_test_threads.c
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3498 2010-05-07 18:46:08Z keiner $ */
+
+#include "config.h"
+
+/* standard headers */
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+/* It is important to include complex.h before nfft3.h. */
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include <omp.h>
+
+#include "nfft3.h" /* NFFT3 header */
+#include "nfft3util.h" /* NFFT3 utilities header*/
+#include "infft.h" /* NFFT3 internal header */
+
+static void simple_test_nfsft(void)
+{
+ const int N = 4; /* bandwidth/maximum degree */
+ const int M = 8; /* number of nodes */
+ nfsft_plan plan; /* transform plan */
+ int j, k, n; /* loop variables */
+
+ /* precomputation (for fast polynomial transform) */
+ nfsft_precompute(N,1000.0,0U,0U);
+
+ /* Initialize transform plan using the guru interface. All input and output
+ * arrays are allocated by nfsft_init_guru(). Computations are performed with
+ * respect to L^2-normalized spherical harmonics Y_k^n. The array of spherical
+ * Fourier coefficients is preserved during transformations. The NFFT uses a
+ * cut-off parameter m = 6. See the NFFT 3 manual for details.
+ */
+ nfsft_init_guru(&plan, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |
+ NFSFT_MALLOC_F_HAT | NFSFT_NORMALIZED | NFSFT_PRESERVE_F_HAT,
+ PRE_PHI_HUT | PRE_PSI | FFTW_INIT | FFT_OUT_OF_PLACE, 6);
+
+ /* pseudo-random nodes */
+ for (j = 0; j < plan.M_total; j++)
+ {
+ plan.x[2*j]= nfft_drand48() - K(0.5);
+ plan.x[2*j+1]= K(0.5) * nfft_drand48();
+ }
+
+ /* precomputation (for NFFT, node-dependent) */
+ nfsft_precompute_x(&plan);
+
+ /* pseudo-random Fourier coefficients */
+ for (k = 0; k <= plan.N; k++)
+ for (n = -k; n <= k; n++)
+ plan.f_hat[NFSFT_INDEX(k,n,&plan)] =
+ nfft_drand48() - K(0.5) + _Complex_I*(nfft_drand48() - K(0.5));
+
+ /* Direct transformation, display result. */
+ nfsft_trafo_direct(&plan);
+ printf("Vector f (NDSFT):\n");
+ for (j = 0; j < plan.M_total; j++)
+ printf("f[%+2d] = %+5.3" FE " %+5.3" FE "*I\n",j,
+ creal(plan.f[j]), cimag(plan.f[j]));
+
+ printf("\n");
+
+ /* Fast approximate transformation, display result. */
+ printf("Vector f (NDSFT):\n");
+ for (j = 0; j < plan.M_total; j++)
+ printf("f[%+2d] = %+5.3" FE " %+5.3" FE "*I\n",j,
+ creal(plan.f[j]), cimag(plan.f[j]));
+
+ printf("\n");
+
+ /* Direct adjoint transformation, display result. */
+ nfsft_adjoint_direct(&plan);
+ printf("Vector f_hat (NDSFT):\n");
+ for (k = 0; k <= plan.N; k++)
+ for (n = -k; n <= k; n++)
+ fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" FE " %+5.3" FE "*I\n",k,n,
+ creal(plan.f_hat[NFSFT_INDEX(k,n,&plan)]),
+ cimag(plan.f_hat[NFSFT_INDEX(k,n,&plan)]));
+
+ printf("\n");
+
+ /* Fast approximate adjoint transformation, display result. */
+ nfsft_adjoint(&plan);
+ printf("Vector f_hat (NFSFT):\n");
+ for (k = 0; k <= plan.N; k++)
+ {
+ for (n = -k; n <= k; n++)
+ {
+ fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" FE " %+5.3" FE "*I\n",k,n,
+ creal(plan.f_hat[NFSFT_INDEX(k,n,&plan)]),
+ cimag(plan.f_hat[NFSFT_INDEX(k,n,&plan)]));
+ }
+ }
+
+ /* Finalize the plan. */
+ nfsft_finalize(&plan);
+
+ /* Destroy data precomputed for fast polynomial transform. */
+ nfsft_forget();
+}
+
+int main(void)
+{
+ printf("nthreads = %d\n", nfft_get_omp_num_threads());
+
+ /* init */
+ fftw_init_threads();
+
+ printf("Computing an NDSFT, an NFSFT, an adjoint NDSFT, and an adjoint NFSFT"
+ "...\n\n");
+ simple_test_nfsft();
+ return EXIT_SUCCESS;
+}
diff --git a/examples/nfsoft/Makefile.am b/examples/nfsoft/Makefile.am
new file mode 100644
index 0000000..7aa9ece
--- /dev/null
+++ b/examples/nfsoft/Makefile.am
@@ -0,0 +1,12 @@
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+## The program name
+noinst_PROGRAMS = simple_test
+
+## The source files.
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = README
diff --git a/examples/nfsoft/Makefile.in b/examples/nfsoft/Makefile.in
new file mode 100644
index 0000000..811f39b
--- /dev/null
+++ b/examples/nfsoft/Makefile.in
@@ -0,0 +1,555 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT)
+subdir = examples/nfsoft
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(simple_test_SOURCES)
+DIST_SOURCES = $(simple_test_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nfsoft/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu examples/nfsoft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES)
+ @rm -f simple_test$(EXEEXT)
+ $(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/nfsoft/README b/examples/nfsoft/README
new file mode 100644
index 0000000..2bf0e97
--- /dev/null
+++ b/examples/nfsoft/README
@@ -0,0 +1,12 @@
+NDFT for nonequispaced data on the rotation group SO(3)
+
+the algorithms are written by Antje Vollrath
+
+based on the paper
+Potts, D., Prestin J., and Vollrath A.
+ A Fast Algorithm for Nonequispaced Fourier Transforms on the Rotation Group
+ to appear in Num. Alg.
+
+Available from:
+http://www.tu-chemnitz.de/~potts
+
\ No newline at end of file
diff --git a/examples/nfsoft/simple_test.c b/examples/nfsoft/simple_test.c
new file mode 100644
index 0000000..dcc0035
--- /dev/null
+++ b/examples/nfsoft/simple_test.c
@@ -0,0 +1,215 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include "config.h"
+
+/* Include standard C headers. */
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+/* Include NFFT 3 utilities headers. */
+#include "nfft3util.h"
+/* Include NFFT3 library header. */
+#include "nfft3.h"
+#include "infft.h"
+
+static void simple_test_nfsoft(int bw, int M)
+{
+ nfsoft_plan plan_nfsoft; /**< Plan for the NFSOFT */
+ nfsoft_plan plan_ndsoft; /**< Plan for the NDSOFT */
+
+ ticks t0, t1;
+ int j; /** just an index*/
+ int k, m; /** the two parameters controlling the accuracy of the NFSOFT*/
+ double d1, d2, d3; /** indeces for initializing the Euler angles*/
+ double time, error; /**...self-explainatory*/
+ unsigned int flags = NFSOFT_MALLOC_X | NFSOFT_MALLOC_F | NFSOFT_MALLOC_F_HAT; /**flags for memory allocation \see nfft3.h*/
+
+ /**set the accuracy controlling parameters*/
+ k = 1000; /** k resembles the FPT kappa */
+ m = 5; /** m the NFFT cut-off parameter*/
+
+ /** Init two transform plans using the guru interface.
+ * All arrays for input and
+ * output variables are allocated by nfsoft_init_guru(). The
+ * array of SO(3) Fourier coefficients is preserved during
+ * transformations.
+ */
+
+ nfsoft_init_guru(&plan_ndsoft, bw, M, flags | NFSOFT_USE_NDFT
+ | NFSOFT_USE_DPT, PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT
+ | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE, m, k);
+
+ nfsoft_init_guru(&plan_nfsoft, bw, M, flags, PRE_PHI_HUT | PRE_PSI | MALLOC_X
+ | MALLOC_F_HAT | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE, m, k);
+
+ /** Init random nodes (for both plans, the same). */
+ for (j = 0; j < plan_nfsoft.M_total; j++)
+ {
+ d1 = ((R) rand()) / RAND_MAX - 0.5;
+ d2 = 0.5 * ((R) rand()) / RAND_MAX;
+ d3 = ((R) rand()) / RAND_MAX - 0.5;
+
+ plan_nfsoft.x[3* j ] = d1; /**alpha*/
+ plan_nfsoft.x[3* j + 1] = d2; /**beta*/
+ plan_nfsoft.x[3* j + 2] = d3; /**gamma*/
+
+ plan_ndsoft.x[3* j ] = d1; /**alpha*/
+ plan_ndsoft.x[3* j + 1] = d2; /**beta*/
+ plan_ndsoft.x[3* j + 2] = d3; /**gamma*/
+ }
+
+ /** init random Fourier coefficients (again the same for both plans) and display them*/
+ for (j = 0; j < (bw + 1) * (4* (bw +1)*(bw+1)-1)/3;j++)
+ {
+ d1=((R)rand())/RAND_MAX - 0.5;
+ d2=((R)rand())/RAND_MAX - 0.5;
+ plan_nfsoft.f_hat[j]=d1 + I*d2;
+ plan_ndsoft.f_hat[j]=d1 + I*d2;
+ }
+
+ if ((bw+1)*(4*(bw+1)*(bw+1)-1)/3<=20)
+ nfft_vpr_complex(plan_nfsoft.f_hat,(bw+1)*(4*(bw+1)*(bw+1)-1)/3,"randomly generated SO(3) Fourier coefficients");
+ else
+ nfft_vpr_complex(plan_ndsoft.f_hat,20,"1st-20th randomly generated SO(3) Fourier coefficient");
+
+ printf("\n---------------------------------------------\n");
+
+ /**Do precomputation for all transforms*/
+ nfsoft_precompute(&plan_nfsoft);
+ nfsoft_precompute(&plan_ndsoft);
+
+
+ /** Compute NFSOFT and display the time needed. */
+ t0 = getticks();
+ nfsoft_trafo(&plan_nfsoft);
+ t1 = getticks();
+ time = nfft_elapsed_seconds(t1,t0);
+ if (plan_nfsoft.M_total<=20)
+ nfft_vpr_complex(plan_nfsoft.f,plan_nfsoft.M_total,"NFSOFT, function samples");
+ else
+ nfft_vpr_complex(plan_nfsoft.f,20,"NFSOFT, 1st-20th function sample");
+ printf(" computed in %11le seconds\n",time);
+
+ /** Compute NDSOFT and display the time needed. */
+ t0 = getticks();
+ nfsoft_trafo(&plan_ndsoft);
+ t1 = getticks();
+time = nfft_elapsed_seconds(t1,t0);
+ if (plan_ndsoft.M_total<=20)
+ nfft_vpr_complex(plan_ndsoft.f,plan_ndsoft.M_total,"NDSOFT, function samples");
+ else
+ nfft_vpr_complex(plan_ndsoft.f,20,"NDSOFT, 1st-20th function sample");
+ printf(" computed in %11le seconds\n",time);
+
+ /**compute the error between the NFSOFT and NDSOFT and display it*/
+ error= X(error_l_infty_complex)(plan_ndsoft.f,plan_nfsoft.f, plan_nfsoft.M_total);
+ printf("\n The NFSOFT of bandwidth=%d for %d rotations has infty-error %11le \n",bw, M,error);
+
+ printf("\n---------------------------------------------\n");
+
+ plan_nfsoft.f[0]=1.0;
+ plan_ndsoft.f[0]=1.0;
+ nfft_vpr_complex(plan_ndsoft.f,plan_ndsoft.M_total, "function samples to start adjoint trafo");
+
+ /** Compute the adjoint NFSOFT and display the time needed.*/
+ t0 = getticks();
+ nfsoft_adjoint(&plan_nfsoft);
+ t1 = getticks();
+time = nfft_elapsed_seconds(t1,t0);
+ if ((bw+1)*(4*(bw+1)*(bw+1)-1)/3<=20)
+ nfft_vpr_complex(plan_nfsoft.f_hat,(bw+1)*(4*(bw+1)*(bw+1)-1)/3,"SO(3) Fourier coefficients");
+ else
+ nfft_vpr_complex(plan_nfsoft.f_hat,20,"adjoint NFSOFT, 1st-20th Fourier coefficient");
+ printf(" computed in %11le seconds\n",time);
+
+ /** Compute adjoint NDSOFT and display the time needed.*/
+ t0 = getticks();
+ nfsoft_adjoint(&plan_ndsoft);
+ t1 = getticks();
+time = nfft_elapsed_seconds(t1,t0);
+ if ((bw+1)*(4*(bw+1)*(bw+1)-1)/3<=20)
+ nfft_vpr_complex(plan_ndsoft.f_hat,(bw+1)*(4*(bw+1)*(bw+1)-1)/3,"SO(3) Fourier coefficients");
+ else
+ nfft_vpr_complex(plan_ndsoft.f_hat,20,"adjoint NDSOFT, 1st-20th Fourier coefficient");
+ printf(" computed in %11le seconds\n",time);
+
+
+ /**compute the error between the adjoint NFSOFT and NDSOFT and display it*/
+ error=X(error_l_infty_complex)(plan_ndsoft.f_hat,plan_nfsoft.f_hat, (bw+1)*(4*(bw+1)*(bw+1)-1)/3);
+ printf("\n The adjoint NFSOFT of bandwidth=%d for %d rotations has infty-error %11le \n",bw, M,error);
+
+ printf("\n---------------------------------------------\n");
+
+ /**destroy the plans*/
+ nfsoft_finalize(&plan_ndsoft);
+ nfsoft_finalize(&plan_nfsoft);
+}
+
+ /**
+ * The main program.
+ *
+ * computes an NDSOFT and its adjoint as well as an NFSOFT and its adjoint
+ *
+ * \f[
+ * f(g_q)=\sum^{N}_{l=0}\sum_{m,n=-l}^l \hat f^{mn}_l D_{mn}^l(\alpha_q,\beta_q,\gamma_q)
+ * \f]
+
+ * at the desired bandwidth N for all M random nodes (g_q) with q=0,...,M-1
+ *
+ * \arg N the bandwidth
+ * \arg M the number of nodes
+ *
+ */
+
+int main(int argc, char **argv)
+{
+ int N; /**< The bandwidth N */
+ int M; /**< The number of nodes M */
+
+ if (argc < 2)
+ {
+ printf(
+ "This test programm computes the NFSOFT with maximum polynomial degree N at M input rotations\n");
+ printf("Usage: simple_test N M \n");
+ printf("e.g.: simple_test 8 64\n");
+ exit(0);
+ }
+
+ /**Read in bandwidth and number of nodes*/
+ N = atoi(argv[1]);
+ M = atoi(argv[2]);
+
+ printf(
+ "computing an NDSOFT, an NFSOFT, an adjoint NDSOFT, and an adjoint NFSOFT\n\n");
+
+ simple_test_nfsoft(N, M);
+
+
+
+ /* Exit the program. */
+ return EXIT_SUCCESS;
+
+}
diff --git a/examples/nfst/Makefile.am b/examples/nfst/Makefile.am
new file mode 100644
index 0000000..fc85794
--- /dev/null
+++ b/examples/nfst/Makefile.am
@@ -0,0 +1,10 @@
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = simple_test
+
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = README
diff --git a/examples/nfst/Makefile.in b/examples/nfst/Makefile.in
new file mode 100644
index 0000000..49f37ad
--- /dev/null
+++ b/examples/nfst/Makefile.in
@@ -0,0 +1,555 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT)
+subdir = examples/nfst
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(simple_test_SOURCES)
+DIST_SOURCES = $(simple_test_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nfst/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu examples/nfst/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES)
+ @rm -f simple_test$(EXEEXT)
+ $(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/nfst/README b/examples/nfst/README
new file mode 100644
index 0000000..41312e7
--- /dev/null
+++ b/examples/nfst/README
@@ -0,0 +1,17 @@
+Examples to the nonequispaced fast sine transform
+
+Author
+
+ Stefan Kunis <kunis at mathematik.tu-chemnitz.de>
+ Steffen Klatt <heracleum.mantegazziani at web.de>
+
+List of files and purpose
+
+ README this file
+ simple_test.c introductory example how to use the nfst
+
+References
+
+ M. Fenn and D. Potts.
+ Fast summation based on fast trigonometric transforms at nonequispaced nodes.
+ Numer. Linear Algebra Appl., 12:161--169, 2005.
diff --git a/examples/nfst/simple_test.c b/examples/nfst/simple_test.c
new file mode 100644
index 0000000..1abb4a7
--- /dev/null
+++ b/examples/nfst/simple_test.c
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+static void simple_test_nfst_1d(void)
+{
+ int j,k;
+ nfst_plan p;
+
+ int N=14;
+ int M=19;
+
+ /** init an one dimensional plan */
+ nfst_init_1d(&p,N,M);
+
+ /** init pseudo random nodes */
+ for(j = 0; j < p.d*p.M_total; j++)
+ p.x[j] = 0.5 * ((double)rand()) / RAND_MAX;
+
+ /** precompute psi, the entries of the matrix B */
+ if( p.nfst_flags & PRE_PSI)
+ nfst_precompute_psi( &p);
+
+ /** init pseudo random Fourier coefficients and show them */
+ for(k = 0; k < p.N_total; k++)
+ p.f_hat[k] = (double)rand() / RAND_MAX;
+
+ nfft_vpr_double(p.f_hat,p.N_total,"given Fourier coefficients, vector f_hat");
+
+ /** direct trafo and show the result */
+ nfst_trafo_direct(&p);
+ nfft_vpr_double(p.f,p.M_total,"ndst, vector f");
+
+ /** approx. trafo and show the result */
+ nfst_trafo(&p);
+ nfft_vpr_double(p.f,p.M_total,"nfst, vector f");
+
+ /** approx. adjoint and show the result */
+ nfst_adjoint_direct(&p);
+ nfft_vpr_double(p.f_hat,p.N_total,"adjoint ndst, vector f_hat");
+
+ /** approx. adjoint and show the result */
+ nfst_adjoint(&p);
+ nfft_vpr_double(p.f_hat,p.N_total,"adjoint nfst, vector f_hat");
+
+ /** finalise the one dimensional plan */
+ nfst_finalize(&p);
+}
+
+int main(void)
+{
+ system("clear");
+ printf("computing one dimensional ndst, nfst and adjoint ndst, nfst\n\n");
+ simple_test_nfst_1d();
+ printf("\n\n");
+
+ return 1;
+}
diff --git a/examples/nnfft/Makefile.am b/examples/nnfft/Makefile.am
new file mode 100644
index 0000000..08f5ae0
--- /dev/null
+++ b/examples/nnfft/Makefile.am
@@ -0,0 +1,13 @@
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = simple_test accuracy
+
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+accuracy_SOURCES = accuracy.c
+accuracy_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = accuracy.m README
diff --git a/examples/nnfft/Makefile.in b/examples/nnfft/Makefile.in
new file mode 100644
index 0000000..d9dc7c9
--- /dev/null
+++ b/examples/nnfft/Makefile.in
@@ -0,0 +1,564 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT) accuracy$(EXEEXT)
+subdir = examples/nnfft
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_accuracy_OBJECTS = accuracy.$(OBJEXT)
+accuracy_OBJECTS = $(am_accuracy_OBJECTS)
+accuracy_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(accuracy_SOURCES) $(simple_test_SOURCES)
+DIST_SOURCES = $(accuracy_SOURCES) $(simple_test_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+accuracy_SOURCES = accuracy.c
+accuracy_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = accuracy.m README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nnfft/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu examples/nnfft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+accuracy$(EXEEXT): $(accuracy_OBJECTS) $(accuracy_DEPENDENCIES) $(EXTRA_accuracy_DEPENDENCIES)
+ @rm -f accuracy$(EXEEXT)
+ $(LINK) $(accuracy_OBJECTS) $(accuracy_LDADD) $(LIBS)
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES)
+ @rm -f simple_test$(EXEEXT)
+ $(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/accuracy.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/nnfft/README b/examples/nnfft/README
new file mode 100644
index 0000000..a5628b7
--- /dev/null
+++ b/examples/nnfft/README
@@ -0,0 +1,12 @@
+NDFT for nonequispaced data in time and frequency domain
+
+the algorithms are written by Tobias Knopp
+based on the paper
+Potts, D., Steidl G., and Tasche M.
+ Fast Fourier transforms for nonequispaced data: A tutorial.
+ in: Modern Sampling Theory: Mathematics and Applications,
+ J.J. Benedetto and P. Ferreira (Eds.), Chapter 12, pages 249-274. 1998
+
+Available from:
+http://www.tu-chemnitz.de/~potts
+
diff --git a/examples/nnfft/accuracy.c b/examples/nnfft/accuracy.c
new file mode 100644
index 0000000..3409be4
--- /dev/null
+++ b/examples/nnfft/accuracy.c
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: accuracy.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include "config.h"
+
+#include <math.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+void accuracy(int d)
+{
+ int m,t;
+ nnfft_plan my_plan;
+ double _Complex *slow;
+
+ int N[d],n[d];
+ int M_total,N_total;
+ M_total=10000;N_total=1;
+
+ slow=(double _Complex*)nfft_malloc(M_total*sizeof(double _Complex));
+
+ for(t=0; t<d; t++)
+ {
+ N[t]=(1<<(12/d));
+ n[t]=2*N[t];
+ N_total*=N[t];
+ }
+
+ /** init a plan */
+ for(m=0; m<10; m++)
+ {
+ nnfft_init_guru(&my_plan, d, N_total, M_total, N, n, m,
+ PRE_PSI| PRE_PHI_HUT|
+ MALLOC_X| MALLOC_V| MALLOC_F_HAT| MALLOC_F);
+
+
+ /** init pseudo random nodes */
+ nfft_vrand_shifted_unit_double(my_plan.x, d*my_plan.M_total);
+ nfft_vrand_shifted_unit_double(my_plan.v, d*my_plan.N_total);
+
+ /** precompute psi, the entries of the matrix B */
+ if(my_plan.nnfft_flags & PRE_PSI)
+ nnfft_precompute_psi(&my_plan);
+
+ if(my_plan.nnfft_flags & PRE_LIN_PSI)
+ nnfft_precompute_lin_psi(&my_plan);
+
+ if(my_plan.nnfft_flags & PRE_FULL_PSI)
+ nnfft_precompute_full_psi(&my_plan);
+
+ /** precompute psi, the entries of the matrix D */
+ if(my_plan.nnfft_flags & PRE_PHI_HUT)
+ nnfft_precompute_phi_hut(&my_plan);
+
+ /** init pseudo random Fourier coefficients */
+ nfft_vrand_unit_complex(my_plan.f_hat, my_plan.N_total);
+
+ /** direct trafo and show the result */
+ nnfft_trafo_direct(&my_plan);
+
+ NFFT_SWAP_complex(my_plan.f,slow);
+
+ /** approx. trafo and show the result */
+ nnfft_trafo(&my_plan);
+
+ printf("%e, %e\n",
+ X(error_l_infty_complex)(slow, my_plan.f, M_total),
+ X(error_l_infty_1_complex)(slow, my_plan.f, M_total, my_plan.f_hat,
+ my_plan.N_total));
+
+ /** finalise the one dimensional plan */
+ nnfft_finalize(&my_plan);
+ }
+}
+
+int main(void)
+{
+ int d;
+ for(d=1; d<4; d++)
+ accuracy(d);
+
+ return 1;
+}
diff --git a/examples/nnfft/accuracy.m b/examples/nnfft/accuracy.m
new file mode 100644
index 0000000..6d7bd0c
--- /dev/null
+++ b/examples/nnfft/accuracy.m
@@ -0,0 +1,64 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: accuracy.m 3776 2012-06-03 13:29:25Z keiner $
+m=0:14;
+load kaiser_bessel.dat
+load sinc_power.dat
+load b_spline.dat
+load gaussian.dat
+
+figure(1);
+h=semilogy(m,kaiser_bessel(m+1,1),'k',m,kaiser_bessel(m+1,1),'ko',...
+ m,sinc_power(m+1,1),'k',m,sinc_power(m+1,1),'kx',...
+ m,b_spline(m+1,1),'k',m,b_spline(m+1,1),'k+',...
+ m,gaussian(m+1,1),'k',m,gaussian(m+1,1),'k^');
+set(h,'LineWidth',2.0); set(h,'Markersize',10); set(gca,'FontSize',22); print accuracy1.eps -deps
+
+figure(2);
+h=semilogy(m,kaiser_bessel(m+1,2),'k',m,kaiser_bessel(m+1,2),'ko',...
+ m,sinc_power(m+1,2),'k',m,sinc_power(m+1,2),'kx',...
+ m,b_spline(m+1,2),'k',m,b_spline(m+1,2),'k+',...
+ m,gaussian(m+1,2),'k',m,gaussian(m+1,2),'k^');
+set(h,'LineWidth',2.0); set(h,'Markersize',10); set(gca,'FontSize',22); print accuracy2.eps -deps
+
+figure(3);
+h=semilogy(m,kaiser_bessel(m+16,1),'k',m,kaiser_bessel(m+16,1),'ko',...
+ m,sinc_power(m+16,1),'k',m,sinc_power(m+16,1),'kx',...
+ m,b_spline(m+16,1),'k',m,b_spline(m+16,1),'k+',...
+ m,gaussian(m+16,1),'k',m,gaussian(m+16,1),'k^');
+set(h,'LineWidth',2.0); set(h,'Markersize',10); set(gca,'FontSize',22); print accuracy3.eps -deps
+
+figure(4);
+h=semilogy(m,kaiser_bessel(m+16,2),'k',m,kaiser_bessel(m+16,2),'ko',...
+ m,sinc_power(m+16,2),'k',m,sinc_power(m+16,2),'kx',...
+ m,b_spline(m+16,2),'k',m,b_spline(m+16,2),'k+',...
+ m,gaussian(m+16,2),'k',m,gaussian(m+16,2),'k^');
+set(h,'LineWidth',2.0); set(h,'Markersize',10); set(gca,'FontSize',22); print accuracy4.eps -deps
+
+figure(5);
+h=semilogy(m,kaiser_bessel(m+31,1),'k',m,kaiser_bessel(m+31,1),'ko',...
+ m,sinc_power(m+31,1),'k',m,sinc_power(m+31,1),'kx',...
+ m,b_spline(m+31,1),'k',m,b_spline(m+31,1),'k+',...
+ m,gaussian(m+31,1),'k',m,gaussian(m+31,1),'k^');
+set(h,'LineWidth',2.0); set(h,'Markersize',10); set(gca,'FontSize',22); print accuracy5.eps -deps
+
+figure(6);
+h=semilogy(m,kaiser_bessel(m+31,2),'k',m,kaiser_bessel(m+31,2),'ko',...
+ m,sinc_power(m+31,2),'k',m,sinc_power(m+31,2),'kx',...
+ m,b_spline(m+31,2),'k',m,b_spline(m+31,2),'k+',...
+ m,gaussian(m+31,2),'k',m,gaussian(m+31,2),'k^');
+set(h,'LineWidth',2.0); set(h,'Markersize',10); set(gca,'FontSize',22); print accuracy6.eps -deps
diff --git a/examples/nnfft/simple_test.c b/examples/nnfft/simple_test.c
new file mode 100644
index 0000000..fcf3ac0
--- /dev/null
+++ b/examples/nnfft/simple_test.c
@@ -0,0 +1,342 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+void simple_test_nnfft_1d(void)
+{
+ int j,k; /**< index for nodes and freqencies */
+ nnfft_plan my_plan; /**< plan for the nfft */
+
+ int N[1];
+ N[0]=12;
+
+ /** init an one dimensional plan */
+ nnfft_init(&my_plan, 1, 3, 19, N);
+
+ /** init pseudo random nodes */
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ my_plan.x[j]=((double)rand())/((double)RAND_MAX)-0.5;
+ }
+ /** init pseudo random nodes */
+ for(j=0;j<my_plan.N_total;j++)
+ {
+ my_plan.v[j]=((double)rand())/((double)RAND_MAX)-0.5;
+ }
+
+ /** precompute psi, the entries of the matrix B */
+ if(my_plan.nnfft_flags & PRE_PSI)
+ nnfft_precompute_psi(&my_plan);
+
+ if(my_plan.nnfft_flags & PRE_FULL_PSI)
+ nnfft_precompute_full_psi(&my_plan);
+
+ if(my_plan.nnfft_flags & PRE_LIN_PSI)
+ nnfft_precompute_lin_psi(&my_plan);
+
+ /** precompute phi_hut, the entries of the matrix D */
+ if(my_plan.nnfft_flags & PRE_PHI_HUT)
+ nnfft_precompute_phi_hut(&my_plan);
+
+ /** init pseudo random Fourier coefficients and show them */
+ for(k=0;k<my_plan.N_total;k++)
+ my_plan.f_hat[k] = ((double)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((double)RAND_MAX);
+
+ nfft_vpr_complex(my_plan.f_hat,my_plan.N_total,"given Fourier coefficients, vector f_hat");
+
+ /** direct trafo and show the result */
+ nnfft_trafo_direct(&my_plan);
+ nfft_vpr_complex(my_plan.f,my_plan.M_total,"nndft, vector f");
+
+ /** approx. trafo and show the result */
+ nnfft_trafo(&my_plan);
+ nfft_vpr_complex(my_plan.f,my_plan.M_total,"nnfft, vector f");
+
+ /** finalise the one dimensional plan */
+ nnfft_finalize(&my_plan);
+}
+
+static void simple_test_adjoint_nnfft_1d(void)
+{
+ int j; /**< index for nodes and freqencies */
+ nnfft_plan my_plan; /**< plan for the nfft */
+
+ int N[1];
+ N[0]=12;
+
+ /** init an one dimensional plan */
+ nnfft_init(&my_plan, 1, 20, 33, N);
+
+ /** init pseudo random nodes */
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ my_plan.x[j]=((double)rand())/((double)RAND_MAX)-0.5;
+ }
+ /** init pseudo random nodes */
+ for(j=0;j<my_plan.N_total;j++)
+ {
+ my_plan.v[j]=((double)rand())/((double)RAND_MAX)-0.5;
+ }
+
+ /** precompute psi, the entries of the matrix B */
+ if(my_plan.nnfft_flags & PRE_PSI)
+ nnfft_precompute_psi(&my_plan);
+
+ if(my_plan.nnfft_flags & PRE_FULL_PSI)
+ nnfft_precompute_full_psi(&my_plan);
+
+ if(my_plan.nnfft_flags & PRE_LIN_PSI)
+ nnfft_precompute_lin_psi(&my_plan);
+
+ /** precompute phi_hut, the entries of the matrix D */
+ if(my_plan.nnfft_flags & PRE_PHI_HUT)
+ nnfft_precompute_phi_hut(&my_plan);
+
+ /** init pseudo random Fourier coefficients and show them */
+ for(j=0;j<my_plan.M_total;j++)
+ my_plan.f[j] = ((double)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((double)RAND_MAX);
+
+ nfft_vpr_complex(my_plan.f,my_plan.M_total,"given Samples, vector f");
+
+ /** direct trafo and show the result */
+ nnfft_adjoint_direct(&my_plan);
+ nfft_vpr_complex(my_plan.f_hat,my_plan.N_total,"adjoint nndft, vector f_hat");
+
+ /** approx. trafo and show the result */
+ nnfft_adjoint(&my_plan);
+ nfft_vpr_complex(my_plan.f_hat,my_plan.N_total,"adjoint nnfft, vector f_hat");
+
+ /** finalise the one dimensional plan */
+ nnfft_finalize(&my_plan);
+}
+
+static void simple_test_nnfft_2d(void)
+{
+ int j,k; /**< index for nodes and freqencies */
+ nnfft_plan my_plan; /**< plan for the nfft */
+
+ int N[2];
+ N[0]=12;
+ N[1]=14;
+
+ /** init an one dimensional plan */
+ nnfft_init(&my_plan, 2,12*14,19, N);
+
+ /** init pseudo random nodes */
+ for(j=0;j<my_plan.M_total;j++)
+ {
+ my_plan.x[2*j]=((double)rand())/((double)RAND_MAX)-0.5;
+ my_plan.x[2*j+1]=((double)rand())/((double)RAND_MAX)-0.5;
+ }
+
+ /** init pseudo random nodes */
+ for(j=0;j<my_plan.N_total;j++)
+ {
+ my_plan.v[2*j]=((double)rand())/((double)RAND_MAX)-0.5;
+ my_plan.v[2*j+1]=((double)rand())/((double)RAND_MAX)-0.5;
+ }
+
+ /** precompute psi, the entries of the matrix B */
+ if(my_plan.nnfft_flags & PRE_PSI)
+ nnfft_precompute_psi(&my_plan);
+
+ if(my_plan.nnfft_flags & PRE_FULL_PSI)
+ nnfft_precompute_full_psi(&my_plan);
+
+ if(my_plan.nnfft_flags & PRE_LIN_PSI)
+ nnfft_precompute_lin_psi(&my_plan);
+
+ /** precompute phi_hut, the entries of the matrix D */
+ if(my_plan.nnfft_flags & PRE_PHI_HUT)
+ nnfft_precompute_phi_hut(&my_plan);
+
+ /** init pseudo random Fourier coefficients and show them */
+ for(k=0;k<my_plan.N_total;k++)
+ my_plan.f_hat[k] = ((double)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((double)RAND_MAX);
+
+ nfft_vpr_complex(my_plan.f_hat,12,
+ "given Fourier coefficients, vector f_hat (first 12 entries)");
+
+ /** direct trafo and show the result */
+ nnfft_trafo_direct(&my_plan);
+ nfft_vpr_complex(my_plan.f,my_plan.M_total,"ndft, vector f");
+
+ /** approx. trafo and show the result */
+ nnfft_trafo(&my_plan);
+ nfft_vpr_complex(my_plan.f,my_plan.M_total,"nfft, vector f");
+
+ /** finalise the one dimensional plan */
+ nnfft_finalize(&my_plan);
+}
+
+static void simple_test_innfft_1d(void)
+{
+ int j,k,l,N=8; /**< index for nodes, freqencies, iter*/
+ nnfft_plan my_plan; /**< plan for the nnfft */
+ solver_plan_complex my_iplan; /**< plan for the inverse nnfft */
+
+ /** initialise an one dimensional plan */
+ nnfft_init(&my_plan,1 ,8 ,8 ,&N);
+
+ /** initialise my_iplan */
+ solver_init_advanced_complex(&my_iplan,(nfft_mv_plan_complex*)(&my_plan),CGNR);
+
+ /** init pseudo random nodes */
+ for(j=0;j<my_plan.M_total;j++)
+ my_plan.x[j]=((double)rand())/((double)RAND_MAX)-0.5;
+
+ /** init pseudo random nodes */
+ for(k=0;k<my_plan.N_total;k++)
+ my_plan.v[k]=((double)rand())/((double)RAND_MAX)-0.5;
+
+ /** precompute psi, the entries of the matrix B */
+ if(my_plan.nnfft_flags & PRE_PSI)
+ nnfft_precompute_psi(&my_plan);
+
+ if(my_plan.nnfft_flags & PRE_FULL_PSI)
+ nnfft_precompute_full_psi(&my_plan);
+
+ /** precompute phi_hut, the entries of the matrix D */
+ if(my_plan.nnfft_flags & PRE_PHI_HUT)
+ nnfft_precompute_phi_hut(&my_plan);
+
+ /** init pseudo random samples (real) and show them */
+ for(j=0;j<my_plan.M_total;j++)
+ my_iplan.y[j] = ((double)rand())/((double)RAND_MAX);
+
+ nfft_vpr_complex(my_iplan.y,my_plan.M_total,"given data, vector given_f");
+
+ /** initialise some guess f_hat_0 */
+ for(k=0;k<my_plan.N_total;k++)
+ my_iplan.f_hat_iter[k] = 0.0;
+
+ nfft_vpr_complex(my_iplan.f_hat_iter,my_plan.N_total,
+ "approximate solution, vector f_hat_iter");
+
+ /** solve the system */
+ solver_before_loop_complex(&my_iplan);
+
+ for(l=0;l<8;l++)
+ {
+ printf("iteration l=%d\n",l);
+ solver_loop_one_step_complex(&my_iplan);
+ nfft_vpr_complex(my_iplan.f_hat_iter,my_plan.N_total,
+ "approximate solution, vector f_hat_iter");
+
+ NFFT_SWAP_complex(my_iplan.f_hat_iter,my_plan.f_hat);
+ nnfft_trafo(&my_plan);
+ nfft_vpr_complex(my_plan.f,my_plan.M_total,"fitting the data, vector f");
+ NFFT_SWAP_complex(my_iplan.f_hat_iter,my_plan.f_hat);
+ }
+
+ solver_finalize_complex(&my_iplan);
+ nnfft_finalize(&my_plan);
+}
+
+static void measure_time_nnfft_1d(void)
+{
+ int j,k; /**< index for nodes and freqencies */
+ nnfft_plan my_plan; /**< plan for the nfft */
+ int my_N,N=4;
+ double t;
+ ticks t0, t1;
+
+ for(my_N=16; my_N<=16384; my_N*=2)
+ {
+ nnfft_init(&my_plan,1,my_N,my_N,&N);
+
+ for(j=0;j<my_plan.M_total;j++)
+ my_plan.x[j]=((double)rand())/((double)RAND_MAX)-0.5;
+
+ for(j=0;j<my_plan.N_total;j++)
+ my_plan.v[j]=((double)rand())/((double)RAND_MAX)-0.5;
+
+ if(my_plan.nnfft_flags & PRE_PSI)
+ nnfft_precompute_psi(&my_plan);
+
+ if(my_plan.nnfft_flags & PRE_FULL_PSI)
+ nnfft_precompute_full_psi(&my_plan);
+
+ if(my_plan.nnfft_flags & PRE_PHI_HUT)
+ nnfft_precompute_phi_hut(&my_plan);
+
+ for(k=0;k<my_plan.N_total;k++)
+ my_plan.f_hat[k] = ((double)rand())/((double)RAND_MAX) + _Complex_I*((double)rand())/((double)RAND_MAX);
+
+ t0 = getticks();
+ nnfft_trafo_direct(&my_plan);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ printf("t_nndft=%e,\t",t);
+
+ t0 = getticks();
+ nnfft_trafo(&my_plan);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ printf("t_nnfft=%e\t",t);
+
+ printf("(N=M=%d)\n",my_N);
+
+ nnfft_finalize(&my_plan);
+ }
+}
+
+int main(void)
+{
+ system("clear");
+ printf("1) computing a one dimensional nndft, nnfft\n\n");
+ simple_test_nnfft_1d();
+
+ getc(stdin);
+
+ system("clear");
+ printf("1a) computing a one dimensional adjoint nndft, nnfft\n\n");
+ simple_test_adjoint_nnfft_1d();
+
+ getc(stdin);
+
+ system("clear");
+ printf("2) computing a two dimensional nndft, nnfft\n\n");
+ simple_test_nnfft_2d();
+
+ getc(stdin);
+
+ system("clear");
+ printf("3) computing a one dimensional innfft\n\n");
+ simple_test_innfft_1d();
+
+ getc(stdin);
+
+ system("clear");
+ printf("4) computing times for one dimensional nnfft\n\n");
+ measure_time_nnfft_1d();
+
+ return 1;
+}
diff --git a/examples/nsfft/Makefile.am b/examples/nsfft/Makefile.am
new file mode 100644
index 0000000..370c617
--- /dev/null
+++ b/examples/nsfft/Makefile.am
@@ -0,0 +1,13 @@
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = simple_test nsfft_test
+
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+nsfft_test_SOURCES = nsfft_test.c
+nsfft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = README
diff --git a/examples/nsfft/Makefile.in b/examples/nsfft/Makefile.in
new file mode 100644
index 0000000..c024b65
--- /dev/null
+++ b/examples/nsfft/Makefile.in
@@ -0,0 +1,564 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT) nsfft_test$(EXEEXT)
+subdir = examples/nsfft
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_nsfft_test_OBJECTS = nsfft_test.$(OBJEXT)
+nsfft_test_OBJECTS = $(am_nsfft_test_OBJECTS)
+nsfft_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(nsfft_test_SOURCES) $(simple_test_SOURCES)
+DIST_SOURCES = $(nsfft_test_SOURCES) $(simple_test_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+nsfft_test_SOURCES = nsfft_test.c
+nsfft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nsfft/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu examples/nsfft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+nsfft_test$(EXEEXT): $(nsfft_test_OBJECTS) $(nsfft_test_DEPENDENCIES) $(EXTRA_nsfft_test_DEPENDENCIES)
+ @rm -f nsfft_test$(EXEEXT)
+ $(LINK) $(nsfft_test_OBJECTS) $(nsfft_test_LDADD) $(LIBS)
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES)
+ @rm -f simple_test$(EXEEXT)
+ $(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nsfft_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/nsfft/README b/examples/nsfft/README
new file mode 100644
index 0000000..bace2d9
--- /dev/null
+++ b/examples/nsfft/README
@@ -0,0 +1,8 @@
+nsfft - nonequispaced sparse FFT or sparse NFFT
+
+Based on the research paper:
+Fast evaluation of trigonometric polynomials from hyperbolic crosses
+by Markus Fenn and Stefan Kunis and Daniel Potts
+
+Available from:
+http://www.tu-chemnitz.de/~potts
diff --git a/examples/nsfft/nsfft_test.c b/examples/nsfft/nsfft_test.c
new file mode 100644
index 0000000..7d01c9a
--- /dev/null
+++ b/examples/nsfft/nsfft_test.c
@@ -0,0 +1,217 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nsfft_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+static void accuracy_nsfft(int d, int J, int M, int m)
+{
+ nsfft_plan p;
+ double _Complex *swap_sndft_trafo, *swap_sndft_adjoint;
+
+ nsfft_init(&p, d, J, M, m, NSDFT);
+
+ swap_sndft_trafo=(double _Complex*) nfft_malloc(p.M_total*
+ sizeof(double _Complex));
+ swap_sndft_adjoint=(double _Complex*) nfft_malloc(p.N_total*
+ sizeof(double _Complex));
+
+ nsfft_init_random_nodes_coeffs(&p);
+
+ /** direct trafo */
+ nsfft_trafo_direct(&p);
+
+ NFFT_SWAP_complex(swap_sndft_trafo,p.f);
+
+ /** approx. trafo */
+ nsfft_trafo(&p);
+
+ printf("%5d\t %+.5E\t",J,
+ X(error_l_infty_1_complex)(swap_sndft_trafo, p.f, p.M_total,
+ p.f_hat, p.N_total));
+ fflush(stdout);
+
+ nfft_vrand_unit_complex(p.f, p.M_total);
+
+ /** direct adjoint */
+ nsfft_adjoint_direct(&p);
+
+ NFFT_SWAP_complex(swap_sndft_adjoint,p.f_hat);
+
+ /** approx. adjoint */
+ nsfft_adjoint(&p);
+
+ printf("%+.5E\n",
+ X(error_l_infty_1_complex)(swap_sndft_adjoint, p.f_hat,
+ p.N_total,
+ p.f, p.M_total));
+ fflush(stdout);
+
+ nfft_free(swap_sndft_adjoint);
+ nfft_free(swap_sndft_trafo);
+
+ /** finalise the one dimensional plan */
+ nsfft_finalize(&p);
+}
+
+static void time_nsfft(int d, int J, int M, unsigned test_nsdft, unsigned test_nfft)
+{
+ int r, N[d], n[d];
+ double t, t_nsdft, t_nfft, t_nsfft;
+ ticks t0, t1;
+
+ nsfft_plan p;
+ nfft_plan np;
+
+ for(r=0;r<d;r++)
+ {
+ N[r]= X(exp2i)(J+2);
+ n[r]=(3*N[r])/2;
+ /*n[r]=2*N[r];*/
+ }
+
+ /** init */
+ nsfft_init(&p, d, J, M, 4, NSDFT);
+ nsfft_init_random_nodes_coeffs(&p);
+
+ /* transforms */
+ if(test_nsdft)
+ {
+ t_nsdft=0;
+ r=0;
+ while(t_nsdft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nsfft_trafo_direct(&p);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ t_nsdft+=t;
+ }
+ t_nsdft/=r;
+ }
+ else
+ t_nsdft=nan("");
+
+ if(test_nfft)
+ {
+ nfft_init_guru(&np,d,N,M,n,6, FG_PSI| MALLOC_F_HAT| MALLOC_F| FFTW_INIT,
+ FFTW_MEASURE);
+ np.x=p.act_nfft_plan->x;
+ if(np.nfft_flags & PRE_ONE_PSI)
+ nfft_precompute_one_psi(&np);
+ nsfft_cp(&p, &np);
+
+ t_nfft=0;
+ r=0;
+ while(t_nfft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nfft_trafo(&np);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ t_nfft+=t;
+ }
+ t_nfft/=r;
+
+ nfft_finalize(&np);
+ }
+ else
+ {
+ t_nfft=nan("");
+ }
+
+ t_nsfft=0;
+ r=0;
+ while(t_nsfft<0.1)
+ {
+ r++;
+ t0 = getticks();
+ nsfft_trafo(&p);
+ t1 = getticks();
+ t = nfft_elapsed_seconds(t1,t0);
+ t_nsfft+=t;
+ }
+ t_nsfft/=r;
+
+ printf("%d\t%.2e\t%.2e\t%.2e\n", J, t_nsdft, t_nfft, t_nsfft);
+
+ fflush(stdout);
+
+ /** finalise */
+ nsfft_finalize(&p);
+}
+
+
+int main(int argc,char **argv)
+{
+ int d, J, M;
+
+ if(argc<=2)
+ {
+ fprintf(stderr,"nsfft_test type d [first last trials]\n");
+ return -1;
+ }
+
+ d=atoi(argv[2]);
+ fprintf(stderr,"Testing the nfft on the hyperbolic cross (nsfft).\n");
+
+ if(atoi(argv[1])==1)
+ {
+ fprintf(stderr,"Testing the accuracy of the nsfft vs. nsdft\n");
+ fprintf(stderr,"Columns: d, E_{1,\\infty}(trafo) E_{1,\\infty}(adjoint)\n\n");
+ for(J=1; J<10; J++)
+ accuracy_nsfft(d, J, 1000, 6);
+ }
+
+ if(atoi(argv[1])==2)
+ {
+ fprintf(stderr,"Testing the computation time of the nsdft, nfft, and nsfft\n");
+ fprintf(stderr,"Columns: d, J, M, t_nsdft, t_nfft, t_nsfft\n\n");
+ for(J=atoi(argv[3]); J<=atoi(argv[4]); J++)
+ {
+ if(d==2)
+ M=(J+4)*X(exp2i)(J+1);
+ else
+ M=6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1)+X(exp2i)(3*(J/2+1));
+
+ if(d*(J+2)<=24)
+ time_nsfft(d, J, M, 1, 1);
+ else
+ if(d*(J+2)<=24)
+ time_nsfft(d, J, M, 0, 1);
+ else
+ time_nsfft(d, J, M, 0, 0);
+ }
+ }
+
+ return 1;
+}
diff --git a/examples/nsfft/simple_test.c b/examples/nsfft/simple_test.c
new file mode 100644
index 0000000..9f4e356
--- /dev/null
+++ b/examples/nsfft/simple_test.c
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+static void simple_test_nsfft(int d, int J, int M)
+{
+ int K=12;
+ nsfft_plan p;
+
+ nsfft_init(&p, d, J, M, 6, NSDFT);
+
+ nsfft_init_random_nodes_coeffs(&p);
+
+ nfft_vpr_complex(p.f_hat, K, "frequencies, vector f_hat (first few entries)");
+
+ /** direct trafo and show the result */
+ nsfft_trafo_direct(&p);
+ nfft_vpr_complex(p.f, K, "nsdft, vector f (first few entries)");
+
+ /** approx. trafo and show the result */
+ nsfft_trafo(&p);
+ nfft_vpr_complex(p.f, K, "nsfft, vector f (first few entries)");
+
+ /** direct adjoint and show the result */
+ nsfft_adjoint_direct(&p);
+ nfft_vpr_complex(p.f_hat, K, "adjoint nsdft, vector f_hat, (first few entries)");
+
+ /** approx. adjoint and show the result */
+ nsfft_adjoint(&p);
+ nfft_vpr_complex(p.f_hat, K, "adjoint nsfft, vector f_hat, (first few entries)");
+
+ /** finalise the one dimensional plan */
+ nsfft_finalize(&p);
+}
+
+int main(int argc,char **argv)
+{
+ int d, J, M;
+
+ system("clear");
+ printf("1) computing a two dimensional nsdft, nsfft and adjoints\n\n");
+ d=2;
+ J=5;
+ M=(J+4)*X(exp2i)(J+1);
+ simple_test_nsfft(d,J,M);
+ getc(stdin);
+
+ system("clear");
+ printf("2) computing a three dimensional nsdft, nsfft and adjoints\n\n");
+ d=3;
+ J=5;
+ M=6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1)+X(exp2i)(3*(J/2+1));
+ simple_test_nsfft(d,J,M);
+
+ return 1;
+}
diff --git a/examples/solver/Makefile.am b/examples/solver/Makefile.am
new file mode 100644
index 0000000..af6159c
--- /dev/null
+++ b/examples/solver/Makefile.am
@@ -0,0 +1,13 @@
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_PROGRAMS = simple_test glacier
+
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+glacier_SOURCES = glacier.c doxygen.h
+glacier_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+
+EXTRA_DIST = glacier.m glacier_cv.m vol87.dat README
diff --git a/examples/solver/Makefile.in b/examples/solver/Makefile.in
new file mode 100644
index 0000000..cd17ab1
--- /dev/null
+++ b/examples/solver/Makefile.in
@@ -0,0 +1,564 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = simple_test$(EXEEXT) glacier$(EXEEXT)
+subdir = examples/solver
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_glacier_OBJECTS = glacier.$(OBJEXT)
+glacier_OBJECTS = $(am_glacier_OBJECTS)
+glacier_DEPENDENCIES = $(top_builddir)/libnfft3.la
+am_simple_test_OBJECTS = simple_test.$(OBJEXT)
+simple_test_OBJECTS = $(am_simple_test_OBJECTS)
+simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(glacier_SOURCES) $(simple_test_SOURCES)
+DIST_SOURCES = $(glacier_SOURCES) $(simple_test_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+simple_test_SOURCES = simple_test.c
+simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+glacier_SOURCES = glacier.c doxygen.h
+glacier_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+EXTRA_DIST = glacier.m glacier_cv.m vol87.dat README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/solver/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu examples/solver/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+glacier$(EXEEXT): $(glacier_OBJECTS) $(glacier_DEPENDENCIES) $(EXTRA_glacier_DEPENDENCIES)
+ @rm -f glacier$(EXEEXT)
+ $(LINK) $(glacier_OBJECTS) $(glacier_LDADD) $(LIBS)
+simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES)
+ @rm -f simple_test$(EXEEXT)
+ $(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/glacier.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/solver/README b/examples/solver/README
new file mode 100644
index 0000000..7d741f7
--- /dev/null
+++ b/examples/solver/README
@@ -0,0 +1,21 @@
+Examples to the inverse NFFT
+
+Author
+
+ Stefan Kunis <kunis at mathematik.tu-chemnitz.de>
+
+List of files and purpose
+
+ README this file
+ simple_test.c introductory example how to use the solver component with
+ the nfft
+ glacier.c reconstruction of a glacier from sampled level curves
+ glacier.m visualisation with MATLAB, calls the executable glacier
+ glacier_cv.m cross validation test for the glacier reconstruction
+ vol87.dat data set, see http://www.math.nps.navy.mil/~rfranke/README
+
+References
+
+ Kunis, S. and Potts, D. Stability Results for Scattered Data Interpolation
+ by Trigonometric Polynomials, SIAM J. Sci. Comput. 29, 1403 - 1419, 2007.
+
diff --git a/examples/solver/doxygen.h b/examples/solver/doxygen.h
new file mode 100644
index 0000000..1ee7bf5
--- /dev/null
+++ b/examples/solver/doxygen.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3100 2009-03-12 08:42:48Z keiner $ */
+
+/**
+ * \defgroup examples_solver Solver component
+ * \ingroup examples
+ */
diff --git a/examples/solver/glacier.c b/examples/solver/glacier.c
new file mode 100644
index 0000000..feb86e7
--- /dev/null
+++ b/examples/solver/glacier.c
@@ -0,0 +1,241 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: glacier.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+/**
+ * \defgroup examples_solver_glacier Reconstruction of a glacier from \
+ scattered data
+ * \ingroup examples_solver
+ * \{
+ */
+
+/** Generalised Sobolev weight */
+static double my_weight(double z,double a,double b,double c)
+{
+ return pow(0.25-z*z,b)/(c+pow(fabs(z),2*a));
+}
+
+/** Reconstruction routine */
+static void glacier(int N,int M)
+{
+ int j,k,k0,k1,l,my_N[2],my_n[2];
+ double tmp_y;
+ nfft_plan p;
+ solver_plan_complex ip;
+ FILE* fp;
+
+ /* initialise p */
+ my_N[0]=N; my_n[0]=X(next_power_of_2)(N);
+ my_N[1]=N; my_n[1]=X(next_power_of_2)(N);
+ nfft_init_guru(&p, 2, my_N, M, my_n, 6,
+ PRE_PHI_HUT| PRE_FULL_PSI|
+ MALLOC_X| MALLOC_F_HAT| MALLOC_F|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ /* initialise ip, specific */
+ solver_init_advanced_complex(&ip,(nfft_mv_plan_complex*)(&p), CGNE| PRECOMPUTE_DAMP);
+ fprintf(stderr,"Using the generic solver!");
+
+ /* init nodes */
+ fp=fopen("input_data.dat","r");
+ for(j=0;j<p.M_total;j++)
+ {
+ fscanf(fp,"%le %le %le",&p.x[2*j+0],&p.x[2*j+1],&tmp_y);
+ ip.y[j]=tmp_y;
+ }
+ fclose(fp);
+
+ /* precompute psi */
+ if(p.nfft_flags & PRE_ONE_PSI)
+ nfft_precompute_one_psi(&p);
+
+ /* initialise damping factors */
+ if(ip.flags & PRECOMPUTE_DAMP)
+ for(k0=0;k0<p.N[0];k0++)
+ for(k1=0;k1<p.N[1];k1++)
+ ip.w_hat[k0*p.N[1]+k1]=
+ my_weight(((double)(k0-p.N[0]/2))/p.N[0],0.5,3,0.001)*
+ my_weight(((double)(k1-p.N[1]/2))/p.N[1],0.5,3,0.001);
+
+ /* init some guess */
+ for(k=0;k<p.N_total;k++)
+ ip.f_hat_iter[k]=0;
+
+ /* inverse trafo */
+ solver_before_loop_complex(&ip);
+ for(l=0;l<40;l++)
+ {
+ fprintf(stderr,"Residual ||r||=%e,\n",sqrt(ip.dot_r_iter));
+ solver_loop_one_step_complex(&ip);
+ }
+
+ for(k=0;k<p.N_total;k++)
+ printf("%le %le\n",creal(ip.f_hat_iter[k]),cimag(ip.f_hat_iter[k]));
+
+ solver_finalize_complex(&ip);
+ nfft_finalize(&p);
+}
+
+/** Reconstruction routine with cross validation */
+static void glacier_cv(int N,int M,int M_cv,unsigned solver_flags)
+{
+ int j,k,k0,k1,l,my_N[2],my_n[2];
+ double tmp_y,r;
+ nfft_plan p,cp;
+ solver_plan_complex ip;
+ double _Complex* cp_y;
+ FILE* fp;
+ int M_re=M-M_cv;
+
+ /* initialise p for reconstruction */
+ my_N[0]=N; my_n[0]=X(next_power_of_2)(N);
+ my_N[1]=N; my_n[1]=X(next_power_of_2)(N);
+ nfft_init_guru(&p, 2, my_N, M_re, my_n, 6,
+ PRE_PHI_HUT| PRE_FULL_PSI|
+ MALLOC_X| MALLOC_F_HAT| MALLOC_F|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+
+ /* initialise ip, specific */
+ solver_init_advanced_complex(&ip,(nfft_mv_plan_complex*)(&p), solver_flags);
+
+ /* initialise cp for validation */
+ cp_y = (double _Complex*) nfft_malloc(M*sizeof(double _Complex));
+ nfft_init_guru(&cp, 2, my_N, M, my_n, 6,
+ PRE_PHI_HUT| PRE_FULL_PSI|
+ MALLOC_X| MALLOC_F|
+ FFTW_INIT| FFT_OUT_OF_PLACE,
+ FFTW_MEASURE| FFTW_DESTROY_INPUT);
+
+ cp.f_hat=ip.f_hat_iter;
+
+ /* set up data in cp and cp_y */
+ fp=fopen("input_data.dat","r");
+ for(j=0;j<cp.M_total;j++)
+ {
+ fscanf(fp,"%le %le %le",&cp.x[2*j+0],&cp.x[2*j+1],&tmp_y);
+ cp_y[j]=tmp_y;
+ }
+ fclose(fp);
+
+ /* copy part of the data to p and ip */
+ for(j=0;j<p.M_total;j++)
+ {
+ p.x[2*j+0]=cp.x[2*j+0];
+ p.x[2*j+1]=cp.x[2*j+1];
+ ip.y[j]=tmp_y;
+ }
+
+ /* precompute psi */
+ if(p.nfft_flags & PRE_ONE_PSI)
+ nfft_precompute_one_psi(&p);
+
+ /* precompute psi */
+ if(cp.nfft_flags & PRE_ONE_PSI)
+ nfft_precompute_one_psi(&cp);
+
+ /* initialise damping factors */
+ if(ip.flags & PRECOMPUTE_DAMP)
+ for(k0=0;k0<p.N[0];k0++)
+ for(k1=0;k1<p.N[1];k1++)
+ ip.w_hat[k0*p.N[1]+k1]=
+ my_weight(((double)(k0-p.N[0]/2))/p.N[0],0.5,3,0.001)*
+ my_weight(((double)(k1-p.N[1]/2))/p.N[1],0.5,3,0.001);
+
+ /* init some guess */
+ for(k=0;k<p.N_total;k++)
+ ip.f_hat_iter[k]=0;
+
+ /* inverse trafo */
+ solver_before_loop_complex(&ip);
+ // fprintf(stderr,"iteration starts,\t");
+ for(l=0;l<40;l++)
+ solver_loop_one_step_complex(&ip);
+
+ //fprintf(stderr,"r=%1.2e, ",sqrt(ip.dot_r_iter)/M_re);
+
+ NFFT_SWAP_complex(p.f_hat,ip.f_hat_iter);
+ nfft_trafo(&p);
+ NFFT_SWAP_complex(p.f_hat,ip.f_hat_iter);
+ nfft_upd_axpy_complex(p.f,-1,ip.y,M_re);
+ r=sqrt(nfft_dot_complex(p.f,M_re)/nfft_dot_complex(cp_y,M));
+ fprintf(stderr,"r=%1.2e, ",r);
+ printf("$%1.1e$ & ",r);
+
+ nfft_trafo(&cp);
+ nfft_upd_axpy_complex(&cp.f[M_re],-1,&cp_y[M_re],M_cv);
+ r=sqrt(nfft_dot_complex(&cp.f[M_re],M_cv)/nfft_dot_complex(cp_y,M));
+ fprintf(stderr,"r_1=%1.2e\t",r);
+ printf("$%1.1e$ & ",r);
+
+ nfft_finalize(&cp);
+ solver_finalize_complex(&ip);
+ nfft_finalize(&p);
+}
+
+
+/** Main routine */
+int main(int argc, char **argv)
+{
+ int M_cv;
+
+ if(argc<3)
+ {
+ fprintf(stderr,"Call this program from the Matlab script glacier.m!");
+ exit(-1);
+ }
+
+ if(argc==3)
+ glacier(atoi(argv[1]),atoi(argv[2]));
+ else
+ for(M_cv=atoi(argv[3]);M_cv<=atoi(argv[5]);M_cv+=atoi(argv[4]))
+ {
+ fprintf(stderr,"\nM_cv=%d,\t",M_cv);
+ printf("$%d$ & ",M_cv);
+ fprintf(stderr,"cgne+damp: ");
+ glacier_cv(atoi(argv[1]),atoi(argv[2]),M_cv,CGNE| PRECOMPUTE_DAMP);
+ //fprintf(stderr,"cgne: ");
+ //glacier_cv(atoi(argv[1]),atoi(argv[2]),M_cv,CGNE);
+ fprintf(stderr,"cgnr: ");
+ glacier_cv(atoi(argv[1]),atoi(argv[2]),M_cv,CGNR);
+ fprintf(stderr,"cgnr: ");
+ glacier_cv(atoi(argv[1])/4,atoi(argv[2]),M_cv,CGNR);
+ printf("XXX \\\\\n");
+ }
+
+ fprintf(stderr,"\n");
+
+ return 1;
+}
+/* \} */
diff --git a/examples/solver/glacier.m b/examples/solver/glacier.m
new file mode 100644
index 0000000..c55e702
--- /dev/null
+++ b/examples/solver/glacier.m
@@ -0,0 +1,63 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: glacier.m 3776 2012-06-03 13:29:25Z keiner $
+N=256;
+border_eps=0.1;
+
+M=8345;
+
+load vol87.dat -ascii
+input_data=vol87(2:end,:);
+
+x_range=max(input_data(:,1))-min(input_data(:,1));
+input_data(:,1)=(input_data(:,1)-min(input_data(:,1))) /x_range*(1-2*border_eps)-0.5+border_eps;
+
+y_range=max(input_data(:,2))-min(input_data(:,2));
+input_data(:,2)=(input_data(:,2)-min(input_data(:,2))) /y_range*(1-2*border_eps)-0.5+border_eps;
+
+save input_data.dat -ascii -double -tabs input_data
+
+system(sprintf('./glacier %d %d > output_data.dat',N,M));
+
+load output_data.dat
+f_hat=output_data(:,1)+i*output_data(:,2);
+
+figure(1);
+C=ifftshift(real(fft2(fftshift(reshape(f_hat,N,N)))));
+x=-0.5:1/N:0.5-1/N;
+[X,Y]=meshgrid(x,x);
+Border=ceil(border_eps*N);
+X=X(Border+1:N-Border,Border+1:N-Border);
+Y=Y(Border+1:N-Border,Border+1:N-Border);
+C=C(Border+1:N-Border,Border+1:N-Border);
+surfl(X,Y,C);
+axis([-0.5+border_eps,0.5-border_eps,-0.5+border_eps,0.5-border_eps,min(input_data(:,3)),max(C(:))]);
+colormap(bone);
+shading interp
+axis off
+view([30,30])
+print glacier1.eps -deps
+
+figure(2);
+contour(X,Y,C,sort(input_data(:,3)));
+axis([-0.5+border_eps,0.5-border_eps,-0.5+border_eps,0.5-border_eps]);
+axis off
+hold on
+plot(input_data(:,1),input_data(:,2),'k.');
+colormap(gray(256));
+hold off
+print glacier2.eps -deps
diff --git a/examples/solver/glacier_cv.m b/examples/solver/glacier_cv.m
new file mode 100644
index 0000000..de7716d
--- /dev/null
+++ b/examples/solver/glacier_cv.m
@@ -0,0 +1,42 @@
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: glacier_cv.m 3776 2012-06-03 13:29:25Z keiner $
+N=256;
+border_eps=0.1;
+
+M=8345;
+
+load vol87.dat -ascii
+input_data=vol87(2:end,:);
+
+x_range=max(input_data(:,1))-min(input_data(:,1));
+input_data(:,1)=(input_data(:,1)-min(input_data(:,1))) /x_range*(1-2*border_eps)-0.5+border_eps;
+
+y_range=max(input_data(:,2))-min(input_data(:,2));
+input_data(:,2)=(input_data(:,2)-min(input_data(:,2))) /y_range*(1-2*border_eps)-0.5+border_eps;
+
+% Resort samples randomly
+P=randperm(M);
+input_data=input_data(P,:);
+
+M_cv_start=200;
+M_cv_step=200;
+M_cv_end=1000;
+
+save input_data.dat -ascii -double -tabs input_data
+
+system(sprintf('./glacier %d %d %d %d %d > output_data_cv.tex',N,M,M_cv_start,M_cv_step,M_cv_end));
diff --git a/examples/solver/simple_test.c b/examples/solver/simple_test.c
new file mode 100644
index 0000000..995a78b
--- /dev/null
+++ b/examples/solver/simple_test.c
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3util.h"
+#include "nfft3.h"
+
+/* void simple_test_infft_1d(int N, int M, int iter) */
+/* { */
+/* int k,l; /\**< index for nodes, freqencies,iter*\/ */
+/* nfft_plan p; /\**< plan for the nfft *\/ */
+/* infft_plan ip; /\**< plan for the inverse nfft *\/ */
+
+/* /\** initialise an one dimensional plan *\/ */
+/* nfft_init_1d(&p, N, M); */
+
+/* /\** init pseudo random nodes *\/ */
+/* nfft_vrand_shifted_unit_double(p.x,p.M_total); */
+
+/* /\** precompute psi, the entries of the matrix B *\/ */
+/* if(p.nfft_flags & PRE_ONE_PSI) */
+/* nfft_precompute_one_psi(&p); */
+
+/* /\** initialise inverse plan *\/ */
+/* infft_init(&ip,&p); */
+
+/* /\** init pseudo random samples and show them *\/ */
+/* nfft_vrand_unit_complex(ip.y,p.M_total); */
+/* nfft_vpr_complex(ip.y,p.M_total,"Given data, vector y"); */
+
+/* /\** initialise some guess f_hat_0 and solve *\/ */
+/* for(k=0;k<p.N_total;k++) */
+/* ip.f_hat_iter[k]=0; */
+
+/* nfft_vpr_complex(ip.f_hat_iter,p.N_total,"Initial guess, vector f_hat_iter"); */
+
+/* NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */
+/* nfft_trafo(&p); */
+/* nfft_vpr_complex(p.f,p.M_total,"Data fit, vector f"); */
+/* NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */
+
+/* infft_before_loop(&ip); */
+/* printf("\n Residual r=%e\n",ip.dot_r_iter); */
+
+/* for(l=0;l<iter;l++) */
+/* { */
+/* printf("\n********** Iteration l=%d **********\n",l); */
+/* infft_loop_one_step(&ip); */
+/* nfft_vpr_complex(ip.f_hat_iter,p.N_total, */
+/* "Approximate solution, vector f_hat_iter"); */
+
+/* NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */
+/* nfft_trafo(&p); */
+/* nfft_vpr_complex(p.f,p.M_total,"Data fit, vector f"); */
+/* NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */
+
+/* printf("\n Residual r=%e\n",ip.dot_r_iter); */
+/* } */
+
+/* infft_finalize(&ip); */
+/* nfft_finalize(&p); */
+/* } */
+
+/** Simple test routine for the inverse nfft */
+static void simple_test_solver_nfft_1d(int N, int M, int iter)
+{
+ int k,l; /**< index for nodes, freqencies,iter*/
+ nfft_plan p; /**< plan for the nfft */
+ solver_plan_complex ip; /**< plan for the inverse nfft */
+
+ /** initialise an one dimensional plan */
+ nfft_init_1d(&p, N, M);
+
+ /** init pseudo random nodes */
+ nfft_vrand_shifted_unit_double(p.x,p.M_total);
+
+ /** precompute psi, the entries of the matrix B */
+ if(p.nfft_flags & PRE_ONE_PSI)
+ nfft_precompute_one_psi(&p);
+
+ /** initialise inverse plan */
+ solver_init_complex(&ip,(nfft_mv_plan_complex*)(&p));
+
+ /** init pseudo random samples and show them */
+ nfft_vrand_unit_complex(ip.y,p.M_total);
+ nfft_vpr_complex(ip.y,p.M_total,"Given data, vector y");
+
+ /** initialise some guess f_hat_0 and solve */
+ for(k=0;k<p.N_total;k++)
+ ip.f_hat_iter[k]=0;
+
+ nfft_vpr_complex(ip.f_hat_iter,p.N_total,"Initial guess, vector f_hat_iter");
+
+ NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat);
+ nfft_trafo(&p);
+ nfft_vpr_complex(p.f,p.M_total,"Data fit, vector f");
+ NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat);
+
+ solver_before_loop_complex(&ip);
+ printf("\n Residual r=%e\n",ip.dot_r_iter);
+
+ for(l=0;l<iter;l++)
+ {
+ printf("\n********** Iteration l=%d **********\n",l);
+ solver_loop_one_step_complex(&ip);
+ nfft_vpr_complex(ip.f_hat_iter,p.N_total,
+ "Approximate solution, vector f_hat_iter");
+
+ NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat);
+ nfft_trafo(&p);
+ nfft_vpr_complex(p.f,p.M_total,"Data fit, vector f");
+ NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat);
+
+ printf("\n Residual r=%e\n",ip.dot_r_iter);
+ }
+
+ solver_finalize_complex(&ip);
+ nfft_finalize(&p);
+}
+
+/** Main routine */
+int main(void)
+{
+ printf("\n Computing a one dimensional inverse nfft\n");
+
+ simple_test_solver_nfft_1d(8,4,5);
+
+ return 1;
+}
+/* \} */
diff --git a/examples/solver/vol87.dat b/examples/solver/vol87.dat
new file mode 100644
index 0000000..efe2c83
--- /dev/null
+++ b/examples/solver/vol87.dat
@@ -0,0 +1,8346 @@
+3 8345 16
+13.966 3.319 1300
+13.963 3.318 1300
+13.938 3.369 1300
+13.920 3.424 1300
+13.907 3.483 1300
+13.892 3.535 1300
+13.877 3.588 1300
+13.866 3.639 1300
+13.858 3.692 1300
+13.866 3.746 1300
+13.893 3.797 1300
+13.907 3.850 1300
+13.918 3.902 1300
+13.919 3.956 1300
+13.910 4.007 1300
+13.915 4.059 1300
+13.929 4.110 1300
+13.923 4.164 1300
+13.908 4.214 1300
+13.902 4.269 1300
+13.952 4.316 1300
+13.981 4.367 1300
+13.993 4.419 1300
+14.007 4.469 1300
+14.014 4.525 1300
+14.029 4.578 1300
+14.080 4.588 1300
+14.131 4.546 1300
+14.150 4.494 1300
+14.170 4.442 1300
+14.224 4.404 1300
+14.264 4.351 1300
+14.269 4.300 1300
+14.282 4.249 1300
+14.323 4.196 1300
+14.359 4.145 1300
+14.397 4.095 1300
+14.405 4.044 1300
+14.419 3.993 1300
+14.470 3.944 1300
+14.480 3.893 1300
+14.495 3.839 1300
+14.523 3.789 1300
+14.525 3.735 1300
+14.526 3.679 1300
+14.538 3.625 1300
+14.540 3.575 1300
+14.596 3.573 1300
+14.647 3.580 1300
+14.699 3.594 1300
+14.751 3.578 1300
+14.750 3.526 1300
+14.767 3.472 1300
+14.810 3.420 1300
+14.803 3.369 1300
+14.855 3.353 1300
+14.907 3.357 1300
+14.958 3.350 1300
+15.009 3.360 1300
+15.059 3.326 1300
+13.785 3.306 1325
+13.785 3.306 1325
+13.798 3.357 1325
+13.807 3.410 1325
+13.799 3.465 1325
+13.792 3.518 1325
+13.785 3.568 1325
+13.768 3.621 1325
+13.748 3.673 1325
+13.730 3.726 1325
+13.706 3.782 1325
+13.684 3.835 1325
+13.673 3.886 1325
+13.659 3.939 1325
+13.647 3.993 1325
+13.640 4.047 1325
+13.640 4.101 1325
+13.648 4.157 1325
+13.652 4.210 1325
+13.650 4.268 1325
+13.643 4.322 1325
+13.639 4.375 1325
+13.634 4.433 1325
+13.625 4.484 1325
+13.601 4.538 1325
+13.586 4.594 1325
+13.577 4.650 1325
+13.573 4.702 1325
+13.591 4.753 1325
+13.629 4.805 1325
+13.646 4.857 1325
+13.653 4.907 1325
+13.643 4.960 1325
+13.619 5.011 1325
+13.614 5.062 1325
+13.624 5.115 1325
+13.619 5.167 1325
+13.596 5.217 1325
+13.591 5.268 1325
+13.605 5.318 1325
+13.618 5.369 1325
+13.637 5.424 1325
+13.650 5.477 1325
+13.659 5.531 1325
+13.677 5.588 1325
+13.705 5.641 1325
+13.700 5.691 1325
+13.665 5.742 1325
+13.674 5.796 1325
+13.728 5.846 1325
+13.780 5.869 1325
+13.833 5.897 1325
+13.884 5.924 1325
+13.939 5.933 1325
+13.992 5.926 1325
+14.044 5.935 1325
+14.095 5.959 1325
+14.148 5.924 1325
+14.203 5.897 1325
+14.255 5.896 1325
+14.305 5.863 1325
+14.322 5.811 1325
+14.336 5.757 1325
+14.351 5.706 1325
+14.371 5.654 1325
+14.408 5.602 1325
+14.448 5.551 1325
+14.463 5.497 1325
+14.462 5.443 1325
+14.464 5.392 1325
+14.485 5.340 1325
+14.504 5.288 1325
+14.532 5.235 1325
+14.555 5.183 1325
+14.572 5.128 1325
+14.583 5.075 1325
+14.591 5.022 1325
+14.608 4.970 1325
+14.640 4.919 1325
+14.660 4.868 1325
+14.672 4.812 1325
+14.679 4.761 1325
+14.694 4.706 1325
+14.745 4.659 1325
+14.796 4.647 1325
+14.815 4.592 1325
+14.806 4.538 1325
+14.788 4.485 1325
+14.772 4.433 1325
+14.760 4.380 1325
+14.746 4.326 1325
+14.798 4.296 1325
+14.822 4.245 1325
+14.832 4.192 1325
+14.837 4.138 1325
+14.838 4.082 1325
+14.866 4.031 1325
+14.918 4.042 1325
+14.968 4.075 1325
+15.019 4.087 1325
+15.055 4.034 1325
+15.019 3.978 1325
+15.030 3.927 1325
+15.063 3.876 1325
+15.106 3.825 1325
+15.127 3.773 1325
+15.139 3.721 1325
+15.161 3.669 1325
+15.211 3.695 1325
+15.263 3.655 1325
+15.314 3.638 1325
+15.369 3.630 1325
+15.328 3.577 1325
+15.322 3.526 1325
+15.351 3.472 1325
+15.355 3.421 1325
+15.405 3.382 1325
+15.409 3.330 1325
+13.629 3.310 1350
+13.627 3.310 1350
+13.625 3.365 1350
+13.629 3.416 1350
+13.624 3.470 1350
+13.610 3.525 1350
+13.603 3.579 1350
+13.598 3.635 1350
+13.585 3.691 1350
+13.566 3.742 1350
+13.537 3.793 1350
+13.517 3.847 1350
+13.508 3.900 1350
+13.505 3.956 1350
+13.506 4.009 1350
+13.464 4.060 1350
+13.455 4.112 1350
+13.491 4.163 1350
+13.504 4.215 1350
+13.504 4.265 1350
+13.499 4.321 1350
+13.492 4.373 1350
+13.480 4.427 1350
+13.472 4.477 1350
+13.469 4.530 1350
+13.462 4.585 1350
+13.455 4.641 1350
+13.451 4.693 1350
+13.445 4.747 1350
+13.441 4.799 1350
+13.432 4.855 1350
+13.426 4.906 1350
+13.417 4.956 1350
+13.393 5.009 1350
+13.368 5.062 1350
+13.351 5.116 1350
+13.323 5.169 1350
+13.309 5.223 1350
+13.301 5.279 1350
+13.304 5.329 1350
+13.312 5.383 1350
+13.319 5.433 1350
+13.329 5.486 1350
+13.334 5.540 1350
+13.325 5.593 1350
+13.332 5.645 1350
+13.331 5.698 1350
+13.336 5.749 1350
+13.328 5.800 1350
+13.323 5.850 1350
+13.315 5.903 1350
+13.315 5.954 1350
+13.317 6.007 1350
+13.329 6.059 1350
+13.332 6.071 1350
+13.382 6.090 1350
+13.434 6.108 1350
+13.486 6.127 1350
+13.536 6.148 1350
+13.586 6.174 1350
+13.636 6.203 1350
+13.688 6.244 1350
+13.739 6.285 1350
+13.791 6.310 1350
+13.845 6.335 1350
+13.895 6.376 1350
+13.926 6.429 1350
+13.960 6.479 1350
+13.987 6.530 1350
+14.040 6.523 1350
+14.090 6.519 1350
+14.140 6.526 1350
+14.193 6.530 1350
+14.191 6.533 1350
+14.240 6.478 1350
+14.263 6.427 1350
+14.289 6.377 1350
+14.317 6.324 1350
+14.359 6.271 1350
+14.411 6.243 1350
+14.456 6.190 1350
+14.476 6.135 1350
+14.506 6.083 1350
+14.540 6.031 1350
+14.566 5.980 1350
+14.599 5.922 1350
+14.631 5.868 1350
+14.650 5.815 1350
+14.666 5.762 1350
+14.696 5.708 1350
+14.719 5.658 1350
+14.738 5.604 1350
+14.757 5.553 1350
+14.775 5.503 1350
+14.794 5.452 1350
+14.826 5.402 1350
+14.861 5.349 1350
+14.888 5.295 1350
+14.914 5.242 1350
+14.938 5.191 1350
+14.956 5.137 1350
+14.974 5.081 1350
+14.986 5.031 1350
+14.991 4.980 1350
+15.001 4.927 1350
+15.013 4.875 1350
+15.025 4.821 1350
+15.040 4.766 1350
+15.054 4.712 1350
+15.072 4.657 1350
+15.083 4.605 1350
+15.100 4.555 1350
+15.119 4.502 1350
+15.164 4.451 1350
+15.183 4.395 1350
+15.188 4.343 1350
+15.191 4.288 1350
+15.201 4.235 1350
+15.237 4.183 1350
+15.268 4.130 1350
+15.290 4.075 1350
+15.298 4.023 1350
+15.308 3.971 1350
+15.317 3.919 1350
+15.330 3.868 1350
+15.381 3.854 1350
+15.403 3.907 1350
+15.384 3.960 1350
+15.364 4.016 1350
+15.350 4.068 1350
+15.346 4.119 1350
+15.365 4.171 1350
+15.418 4.196 1350
+15.430 4.143 1350
+15.437 4.090 1350
+15.484 4.040 1350
+15.516 3.987 1350
+15.530 3.935 1350
+15.539 3.880 1350
+15.552 3.827 1350
+15.558 3.776 1350
+15.572 3.725 1350
+15.560 3.673 1350
+15.549 3.619 1350
+15.544 3.565 1350
+15.542 3.514 1350
+15.553 3.463 1350
+15.571 3.413 1350
+15.566 3.360 1350
+15.562 3.307 1350
+13.458 3.310 1375
+13.457 3.310 1375
+13.457 3.363 1375
+13.471 3.414 1375
+13.471 3.464 1375
+13.465 3.516 1375
+13.450 3.568 1375
+13.432 3.619 1375
+13.416 3.674 1375
+13.389 3.728 1375
+13.370 3.779 1375
+13.356 3.830 1375
+13.337 3.882 1375
+13.323 3.933 1375
+13.305 3.987 1375
+13.291 4.037 1375
+13.274 4.087 1375
+13.268 4.138 1375
+13.318 4.136 1375
+13.355 4.189 1375
+13.351 4.242 1375
+13.329 4.297 1375
+13.315 4.355 1375
+13.303 4.407 1375
+13.302 4.459 1375
+13.311 4.513 1375
+13.315 4.565 1375
+13.300 4.619 1375
+13.284 4.672 1375
+13.279 4.726 1375
+13.277 4.780 1375
+13.274 4.833 1375
+13.268 4.888 1375
+13.257 4.939 1375
+13.253 4.990 1375
+13.243 5.043 1375
+13.227 5.094 1375
+13.203 5.145 1375
+13.198 5.195 1375
+13.183 5.247 1375
+13.146 5.297 1375
+13.148 5.352 1375
+13.153 5.410 1375
+13.147 5.465 1375
+13.146 5.516 1375
+13.150 5.567 1375
+13.157 5.618 1375
+13.162 5.668 1375
+13.168 5.720 1375
+13.164 5.774 1375
+13.160 5.826 1375
+13.154 5.878 1375
+13.149 5.929 1375
+13.143 5.981 1375
+13.135 6.033 1375
+13.127 6.085 1375
+13.127 6.137 1375
+13.130 6.189 1375
+13.133 6.242 1375
+13.121 6.293 1375
+13.112 6.345 1375
+13.114 6.377 1375
+13.146 6.395 1375
+13.196 6.431 1375
+13.249 6.462 1375
+13.301 6.490 1375
+13.353 6.523 1375
+13.403 6.550 1375
+13.453 6.572 1375
+13.503 6.607 1375
+13.556 6.652 1375
+13.606 6.697 1375
+13.659 6.745 1375
+13.704 6.795 1375
+13.728 6.848 1375
+13.752 6.900 1375
+13.781 6.954 1375
+13.810 7.007 1375
+13.852 7.059 1375
+13.898 7.109 1375
+13.948 7.137 1375
+13.999 7.174 1375
+14.000 7.093 1375
+14.036 7.042 1375
+14.070 6.990 1375
+14.099 6.938 1375
+14.150 6.893 1375
+14.200 6.894 1375
+14.250 6.850 1375
+14.300 6.799 1375
+14.336 6.746 1375
+14.377 6.695 1375
+14.412 6.645 1375
+14.451 6.594 1375
+14.465 6.543 1375
+14.478 6.491 1375
+14.518 6.437 1375
+14.551 6.386 1375
+14.571 6.330 1375
+14.597 6.278 1375
+14.645 6.223 1375
+14.686 6.172 1375
+14.724 6.119 1375
+14.755 6.069 1375
+14.779 6.011 1375
+14.799 5.961 1375
+14.819 5.907 1375
+14.834 5.855 1375
+14.858 5.802 1375
+14.882 5.751 1375
+14.909 5.701 1375
+14.934 5.647 1375
+14.956 5.593 1375
+14.980 5.538 1375
+15.007 5.485 1375
+15.034 5.432 1375
+15.053 5.377 1375
+15.070 5.326 1375
+15.094 5.272 1375
+15.132 5.221 1375
+15.150 5.171 1375
+15.161 5.116 1375
+15.177 5.059 1375
+15.189 5.007 1375
+15.198 4.955 1375
+15.209 4.902 1375
+15.224 4.849 1375
+15.244 4.796 1375
+15.263 4.745 1375
+15.284 4.691 1375
+15.320 4.640 1375
+15.365 4.590 1375
+15.415 4.568 1375
+15.468 4.557 1375
+15.516 4.506 1375
+15.557 4.453 1375
+15.575 4.399 1375
+15.569 4.347 1375
+15.565 4.295 1375
+15.562 4.243 1375
+15.569 4.192 1375
+15.585 4.141 1375
+15.630 4.091 1375
+15.649 4.037 1375
+15.656 3.987 1375
+15.689 3.933 1375
+15.719 3.882 1375
+15.751 3.829 1375
+15.780 3.775 1375
+15.801 3.722 1375
+15.825 3.667 1375
+15.845 3.612 1375
+15.856 3.561 1375
+15.860 3.505 1375
+15.858 3.451 1375
+15.854 3.399 1375
+15.866 3.347 1375
+13.278 3.306 1400
+13.277 3.305 1400
+13.281 3.356 1400
+13.283 3.411 1400
+13.277 3.463 1400
+13.276 3.514 1400
+13.276 3.568 1400
+13.256 3.625 1400
+13.240 3.679 1400
+13.223 3.735 1400
+13.211 3.787 1400
+13.200 3.838 1400
+13.187 3.890 1400
+13.176 3.946 1400
+13.168 3.997 1400
+13.170 4.047 1400
+13.116 4.069 1400
+13.066 4.069 1400
+13.088 4.122 1400
+13.124 4.177 1400
+13.135 4.235 1400
+13.136 4.292 1400
+13.135 4.346 1400
+13.133 4.403 1400
+13.131 4.458 1400
+13.130 4.518 1400
+13.127 4.574 1400
+13.121 4.628 1400
+13.112 4.680 1400
+13.106 4.734 1400
+13.102 4.785 1400
+13.096 4.840 1400
+13.083 4.893 1400
+13.068 4.946 1400
+13.054 4.996 1400
+13.003 5.045 1400
+12.988 5.100 1400
+13.012 5.151 1400
+13.013 5.202 1400
+12.996 5.256 1400
+12.972 5.306 1400
+12.988 5.356 1400
+13.006 5.412 1400
+13.012 5.464 1400
+13.017 5.517 1400
+13.009 5.573 1400
+12.993 5.626 1400
+13.000 5.682 1400
+13.008 5.733 1400
+12.999 5.783 1400
+12.984 5.833 1400
+12.972 5.889 1400
+12.960 5.942 1400
+12.948 5.997 1400
+12.940 6.048 1400
+12.934 6.104 1400
+12.925 6.161 1400
+12.918 6.211 1400
+12.903 6.262 1400
+12.888 6.316 1400
+12.868 6.369 1400
+12.828 6.423 1400
+12.789 6.474 1400
+12.770 6.524 1400
+13.761 7.639 1400
+13.761 7.645 1400
+13.814 7.597 1400
+13.867 7.547 1400
+13.916 7.493 1400
+13.955 7.439 1400
+13.994 7.385 1400
+14.035 7.333 1400
+14.082 7.279 1400
+14.136 7.238 1400
+14.189 7.192 1400
+14.234 7.140 1400
+14.277 7.086 1400
+14.317 7.029 1400
+14.364 6.973 1400
+14.412 6.921 1400
+14.455 6.868 1400
+14.495 6.814 1400
+14.531 6.764 1400
+14.566 6.711 1400
+14.596 6.658 1400
+14.623 6.606 1400
+14.651 6.554 1400
+14.676 6.502 1400
+14.703 6.450 1400
+14.726 6.398 1400
+14.750 6.340 1400
+14.777 6.285 1400
+14.799 6.235 1400
+14.834 6.183 1400
+14.844 6.130 1400
+14.861 6.075 1400
+14.900 6.023 1400
+14.934 5.971 1400
+14.961 5.920 1400
+14.961 5.867 1400
+14.972 5.816 1400
+15.022 5.778 1400
+15.048 5.728 1400
+15.055 5.675 1400
+15.061 5.620 1400
+15.086 5.566 1400
+15.119 5.513 1400
+15.170 5.462 1400
+15.214 5.410 1400
+15.250 5.357 1400
+15.280 5.307 1400
+15.292 5.256 1400
+15.301 5.202 1400
+15.318 5.149 1400
+15.343 5.097 1400
+15.367 5.045 1400
+15.404 4.995 1400
+15.457 4.949 1400
+15.504 4.896 1400
+15.556 4.890 1400
+15.607 4.875 1400
+15.654 4.822 1400
+15.673 4.768 1400
+15.689 4.715 1400
+15.694 4.662 1400
+15.691 4.611 1400
+15.698 4.561 1400
+15.750 4.545 1400
+15.772 4.491 1400
+15.788 4.439 1400
+15.803 4.386 1400
+15.817 4.336 1400
+15.834 4.279 1400
+15.858 4.225 1400
+15.891 4.171 1400
+15.927 4.115 1400
+15.961 4.061 1400
+16.003 4.007 1400
+16.049 3.957 1400
+16.083 3.904 1400
+16.093 3.852 1400
+16.096 3.796 1400
+16.113 3.743 1400
+16.133 3.692 1400
+16.143 3.640 1400
+16.135 3.581 1400
+16.139 3.530 1400
+16.158 3.478 1400
+16.169 3.425 1400
+16.188 3.371 1400
+16.208 3.317 1400
+12.762 6.559 1400
+12.762 6.560 1400
+12.781 6.614 1400
+12.805 6.665 1400
+12.844 6.717 1400
+12.896 6.766 1400
+12.949 6.803 1400
+12.999 6.842 1400
+13.049 6.880 1400
+13.102 6.917 1400
+13.157 6.959 1400
+13.209 7.004 1400
+13.264 7.049 1400
+13.319 7.094 1400
+13.369 7.144 1400
+13.420 7.192 1400
+13.466 7.242 1400
+13.515 7.293 1400
+13.549 7.345 1400
+13.567 7.397 1400
+13.584 7.449 1400
+13.605 7.499 1400
+13.632 7.550 1400
+13.661 7.600 1400
+13.711 7.627 1400
+13.143 3.300 1425
+13.141 3.302 1425
+13.148 3.356 1425
+13.131 3.411 1425
+13.121 3.464 1425
+13.117 3.517 1425
+13.113 3.570 1425
+13.106 3.624 1425
+13.101 3.675 1425
+13.073 3.728 1425
+13.054 3.782 1425
+13.050 3.834 1425
+13.066 3.887 1425
+13.044 3.941 1425
+13.006 3.994 1425
+12.956 4.037 1425
+12.905 4.068 1425
+12.854 4.105 1425
+12.908 4.142 1425
+12.959 4.179 1425
+13.002 4.235 1425
+13.007 4.289 1425
+13.005 4.339 1425
+12.998 4.393 1425
+12.992 4.443 1425
+12.983 4.499 1425
+12.973 4.554 1425
+12.965 4.609 1425
+12.961 4.660 1425
+12.953 4.712 1425
+12.945 4.765 1425
+12.940 4.822 1425
+12.926 4.872 1425
+12.892 4.924 1425
+12.860 4.977 1425
+12.818 5.028 1425
+12.782 5.080 1425
+12.829 5.131 1425
+12.849 5.182 1425
+12.836 5.233 1425
+12.827 5.284 1425
+12.818 5.337 1425
+12.835 5.389 1425
+12.855 5.445 1425
+12.864 5.496 1425
+12.872 5.548 1425
+12.868 5.598 1425
+12.863 5.653 1425
+12.860 5.704 1425
+12.848 5.758 1425
+12.841 5.808 1425
+12.835 5.862 1425
+12.831 5.913 1425
+12.819 5.969 1425
+12.799 6.024 1425
+12.785 6.077 1425
+12.777 6.130 1425
+12.762 6.184 1425
+12.743 6.237 1425
+12.713 6.292 1425
+12.690 6.342 1425
+12.665 6.395 1425
+12.634 6.445 1425
+12.607 6.499 1425
+12.579 6.551 1425
+12.557 6.608 1425
+12.543 6.659 1425
+12.525 6.717 1425
+12.506 6.769 1425
+12.487 6.819 1425
+12.485 6.881 1425
+12.482 6.882 1425
+12.467 6.935 1425
+12.488 6.987 1425
+12.517 7.040 1425
+12.566 7.090 1425
+12.617 7.145 1425
+12.665 7.195 1425
+12.715 7.236 1425
+12.766 7.276 1425
+12.818 7.318 1425
+12.872 7.360 1425
+12.925 7.406 1425
+12.962 7.458 1425
+12.991 7.509 1425
+13.021 7.565 1425
+13.050 7.617 1425
+13.102 7.666 1425
+13.155 7.702 1425
+13.208 7.729 1425
+13.263 7.751 1425
+13.317 7.782 1425
+13.368 7.812 1425
+13.411 7.867 1425
+13.444 7.920 1425
+13.471 7.972 1425
+13.492 8.023 1425
+13.543 8.043 1425
+13.556 8.093 1425
+13.565 8.105 1425
+13.608 8.090 1425
+13.661 8.054 1425
+13.712 8.007 1425
+13.755 7.956 1425
+13.803 7.903 1425
+13.854 7.854 1425
+13.907 7.802 1425
+13.947 7.752 1425
+13.986 7.701 1425
+14.029 7.650 1425
+14.082 7.606 1425
+14.133 7.560 1425
+14.134 7.509 1425
+14.184 7.488 1425
+14.234 7.456 1425
+14.251 7.403 1425
+14.277 7.353 1425
+14.275 7.300 1425
+14.311 7.245 1425
+14.351 7.194 1425
+14.389 7.143 1425
+14.429 7.090 1425
+14.469 7.035 1425
+14.517 6.982 1425
+14.570 6.947 1425
+14.620 6.902 1425
+14.653 6.847 1425
+14.676 6.794 1425
+14.694 6.738 1425
+14.717 6.685 1425
+14.738 6.632 1425
+14.758 6.580 1425
+14.784 6.528 1425
+14.817 6.478 1425
+14.853 6.426 1425
+14.886 6.375 1425
+14.926 6.323 1425
+14.976 6.292 1425
+15.009 6.238 1425
+15.022 6.185 1425
+15.055 6.133 1425
+15.088 6.078 1425
+15.117 6.027 1425
+15.153 5.976 1425
+15.186 5.924 1425
+15.221 5.874 1425
+15.235 5.822 1425
+15.216 5.771 1425
+15.248 5.718 1425
+15.290 5.667 1425
+15.344 5.612 1425
+15.397 5.572 1425
+15.451 5.540 1425
+15.504 5.504 1425
+15.556 5.464 1425
+15.608 5.421 1425
+15.649 5.370 1425
+15.684 5.319 1425
+15.735 5.290 1425
+15.775 5.235 1425
+15.793 5.178 1425
+15.813 5.121 1425
+15.838 5.070 1425
+15.860 5.017 1425
+15.884 4.961 1425
+15.911 4.908 1425
+15.933 4.857 1425
+15.954 4.807 1425
+15.976 4.749 1425
+16.000 4.695 1425
+16.026 4.644 1425
+16.048 4.593 1425
+16.070 4.537 1425
+16.092 4.480 1425
+16.110 4.430 1425
+16.128 4.370 1425
+16.143 4.317 1425
+16.160 4.263 1425
+16.176 4.209 1425
+16.202 4.157 1425
+16.234 4.104 1425
+16.264 4.054 1425
+16.289 4.004 1425
+16.318 3.947 1425
+16.346 3.896 1425
+16.360 3.845 1425
+16.363 3.787 1425
+16.367 3.736 1425
+16.362 3.681 1425
+16.361 3.628 1425
+16.364 3.575 1425
+16.391 3.520 1425
+16.429 3.466 1425
+16.464 3.413 1425
+16.479 3.358 1425
+12.995 3.331 1450
+12.994 3.331 1450
+12.976 3.385 1450
+12.973 3.437 1450
+12.968 3.490 1450
+12.962 3.544 1450
+12.960 3.595 1450
+12.954 3.649 1450
+12.925 3.702 1450
+12.907 3.756 1450
+12.913 3.808 1450
+12.913 3.860 1450
+12.884 3.913 1450
+12.831 3.953 1450
+12.779 3.984 1450
+12.728 4.022 1450
+12.677 4.049 1450
+12.633 4.101 1450
+12.683 4.116 1450
+12.733 4.156 1450
+12.786 4.196 1450
+12.839 4.237 1450
+12.878 4.288 1450
+12.880 4.343 1450
+12.866 4.395 1450
+12.846 4.451 1450
+12.839 4.503 1450
+12.828 4.558 1450
+12.815 4.617 1450
+12.810 4.669 1450
+12.806 4.724 1450
+12.792 4.775 1450
+12.773 4.829 1450
+12.760 4.880 1450
+12.733 4.933 1450
+12.681 4.984 1450
+12.630 5.033 1450
+12.590 5.083 1450
+12.604 5.134 1450
+12.655 5.150 1450
+12.707 5.169 1450
+12.727 5.221 1450
+12.693 5.275 1450
+12.666 5.325 1450
+12.660 5.375 1450
+12.671 5.429 1450
+12.684 5.481 1450
+12.699 5.532 1450
+12.714 5.588 1450
+12.720 5.642 1450
+12.719 5.693 1450
+12.720 5.747 1450
+12.715 5.798 1450
+12.705 5.848 1450
+12.692 5.899 1450
+12.677 5.953 1450
+12.659 6.003 1450
+12.633 6.056 1450
+12.604 6.110 1450
+12.584 6.161 1450
+12.557 6.211 1450
+12.537 6.263 1450
+12.520 6.315 1450
+12.505 6.367 1450
+12.483 6.418 1450
+12.455 6.473 1450
+12.423 6.525 1450
+12.393 6.581 1450
+12.369 6.633 1450
+12.343 6.683 1450
+12.318 6.736 1450
+12.299 6.789 1450
+12.283 6.840 1450
+12.263 6.893 1450
+12.245 6.946 1450
+12.238 6.996 1450
+12.210 7.050 1450
+12.164 7.100 1450
+12.113 7.142 1450
+12.074 7.195 1450
+12.060 7.256 1450
+12.054 7.251 1450
+12.022 7.303 1450
+12.033 7.355 1450
+12.068 7.406 1450
+12.115 7.459 1450
+12.168 7.513 1450
+12.211 7.566 1450
+12.256 7.619 1450
+12.299 7.675 1450
+12.344 7.731 1450
+12.384 7.783 1450
+12.426 7.834 1450
+12.472 7.892 1450
+12.525 7.946 1450
+12.577 7.986 1450
+12.627 8.016 1450
+12.683 8.046 1450
+12.739 8.077 1450
+12.792 8.101 1450
+12.845 8.127 1450
+12.900 8.151 1450
+12.950 8.169 1450
+13.000 8.191 1450
+13.054 8.226 1450
+13.109 8.263 1450
+13.161 8.319 1450
+13.187 8.372 1450
+13.211 8.424 1450
+13.220 8.478 1450
+13.229 8.529 1450
+13.248 8.581 1450
+13.278 8.632 1450
+13.317 8.674 1450
+13.331 8.659 1450
+13.362 8.604 1450
+13.405 8.554 1450
+13.457 8.514 1450
+13.510 8.474 1450
+13.560 8.429 1450
+13.606 8.379 1450
+13.648 8.325 1450
+13.678 8.274 1450
+13.715 8.223 1450
+13.766 8.179 1450
+13.817 8.144 1450
+13.871 8.096 1450
+13.914 8.043 1450
+13.946 7.992 1450
+13.974 7.939 1450
+14.009 7.887 1450
+14.050 7.836 1450
+14.102 7.811 1450
+14.154 7.787 1450
+14.198 7.733 1450
+14.241 7.680 1450
+14.291 7.633 1450
+14.332 7.581 1450
+14.372 7.529 1450
+14.403 7.478 1450
+14.416 7.425 1450
+14.424 7.372 1450
+14.448 7.321 1450
+14.499 7.271 1450
+14.550 7.225 1450
+14.603 7.169 1450
+14.639 7.115 1450
+14.670 7.063 1450
+14.704 7.006 1450
+14.739 6.953 1450
+14.771 6.900 1450
+14.804 6.846 1450
+14.842 6.793 1450
+14.885 6.741 1450
+14.932 6.687 1450
+14.986 6.652 1450
+15.035 6.601 1450
+15.046 6.550 1450
+15.058 6.497 1450
+15.088 6.444 1450
+15.116 6.392 1450
+15.144 6.337 1450
+15.174 6.279 1450
+15.214 6.224 1450
+15.265 6.172 1450
+15.318 6.127 1450
+15.360 6.075 1450
+15.392 6.024 1450
+15.427 5.971 1450
+15.482 5.971 1450
+15.522 5.920 1450
+15.548 5.868 1450
+15.573 5.814 1450
+15.610 5.760 1450
+15.659 5.707 1450
+15.712 5.668 1450
+15.764 5.621 1450
+15.807 5.570 1450
+15.842 5.518 1450
+15.872 5.466 1450
+15.912 5.411 1450
+15.955 5.356 1450
+15.989 5.302 1450
+16.012 5.249 1450
+16.034 5.198 1450
+16.060 5.148 1450
+16.089 5.097 1450
+16.116 5.044 1450
+16.148 4.990 1450
+16.171 4.940 1450
+16.193 4.887 1450
+16.214 4.836 1450
+16.240 4.779 1450
+16.260 4.724 1450
+16.272 4.673 1450
+16.288 4.620 1450
+16.305 4.560 1450
+16.321 4.509 1450
+16.338 4.456 1450
+16.357 4.404 1450
+16.371 4.351 1450
+16.390 4.296 1450
+16.412 4.245 1450
+16.443 4.191 1450
+16.466 4.141 1450
+16.492 4.090 1450
+16.526 4.038 1450
+16.566 3.983 1450
+16.596 3.930 1450
+16.596 3.876 1450
+16.599 3.825 1450
+16.592 3.774 1450
+16.592 3.721 1450
+16.617 3.669 1450
+16.650 3.613 1450
+16.690 3.559 1450
+16.713 3.507 1450
+16.727 3.450 1450
+16.737 3.396 1450
+16.751 3.344 1450
+12.841 3.322 1475
+12.839 3.322 1475
+12.812 3.375 1475
+12.812 3.428 1475
+12.825 3.481 1475
+12.831 3.538 1475
+12.826 3.588 1475
+12.820 3.641 1475
+12.785 3.693 1475
+12.778 3.746 1475
+12.765 3.799 1475
+12.733 3.853 1475
+12.688 3.907 1475
+12.637 3.953 1475
+12.585 3.993 1475
+12.534 4.010 1475
+12.484 4.038 1475
+12.475 4.090 1475
+12.467 4.140 1475
+12.517 4.165 1475
+12.567 4.190 1475
+12.618 4.226 1475
+12.668 4.265 1475
+12.720 4.306 1475
+12.739 4.357 1475
+12.741 4.410 1475
+12.734 4.465 1475
+12.721 4.523 1475
+12.711 4.577 1475
+12.700 4.631 1475
+12.688 4.685 1475
+12.676 4.739 1475
+12.660 4.795 1475
+12.638 4.846 1475
+12.600 4.900 1475
+12.550 4.941 1475
+12.499 4.970 1475
+12.448 5.015 1475
+12.413 5.066 1475
+12.408 5.123 1475
+12.442 5.174 1475
+12.462 5.226 1475
+12.444 5.277 1475
+12.457 5.329 1475
+12.497 5.383 1475
+12.522 5.437 1475
+12.491 5.488 1475
+12.485 5.540 1475
+12.522 5.592 1475
+12.558 5.644 1475
+12.578 5.694 1475
+12.578 5.745 1475
+12.579 5.798 1475
+12.594 5.850 1475
+12.613 5.905 1475
+12.607 5.957 1475
+12.556 6.008 1475
+12.525 6.062 1475
+12.502 6.114 1475
+12.477 6.164 1475
+12.451 6.214 1475
+12.428 6.270 1475
+12.403 6.321 1475
+12.383 6.373 1475
+12.360 6.429 1475
+12.336 6.480 1475
+12.307 6.532 1475
+12.275 6.586 1475
+12.241 6.639 1475
+12.209 6.693 1475
+12.176 6.744 1475
+12.141 6.799 1475
+12.107 6.854 1475
+12.075 6.907 1475
+12.048 6.963 1475
+12.019 7.013 1475
+11.988 7.069 1475
+11.954 7.120 1475
+11.916 7.172 1475
+11.869 7.224 1475
+11.827 7.275 1475
+11.781 7.328 1475
+11.740 7.378 1475
+11.700 7.432 1475
+11.660 7.485 1475
+11.613 7.536 1475
+11.591 7.588 1475
+11.577 7.604 1475
+11.580 7.643 1475
+11.587 7.695 1475
+11.601 7.746 1475
+11.612 7.798 1475
+11.617 7.852 1475
+11.640 7.908 1475
+11.677 7.961 1475
+11.728 8.009 1475
+11.755 8.059 1475
+11.773 8.111 1475
+11.804 8.162 1475
+11.856 8.194 1475
+11.912 8.230 1475
+11.958 8.282 1475
+12.010 8.335 1475
+12.061 8.378 1475
+12.111 8.420 1475
+12.163 8.471 1475
+12.218 8.519 1475
+12.268 8.554 1475
+12.323 8.574 1475
+12.374 8.595 1475
+12.426 8.617 1475
+12.482 8.639 1475
+12.539 8.665 1475
+12.589 8.688 1475
+12.640 8.713 1475
+12.696 8.731 1475
+12.747 8.750 1475
+12.799 8.775 1475
+12.855 8.813 1475
+12.886 8.863 1475
+12.915 8.917 1475
+12.939 8.973 1475
+12.952 9.027 1475
+12.960 9.080 1475
+12.973 9.135 1475
+12.975 9.185 1475
+12.984 9.238 1475
+12.994 9.289 1475
+13.001 9.305 1475
+13.050 9.288 1475
+13.102 9.258 1475
+13.157 9.236 1475
+13.208 9.183 1475
+13.237 9.133 1475
+13.257 9.080 1475
+13.295 9.026 1475
+13.337 8.976 1475
+13.385 8.923 1475
+13.426 8.868 1475
+13.457 8.815 1475
+13.509 8.773 1475
+13.537 8.721 1475
+13.576 8.668 1475
+13.620 8.615 1475
+13.663 8.565 1475
+13.717 8.521 1475
+13.767 8.481 1475
+13.819 8.430 1475
+13.872 8.379 1475
+13.923 8.325 1475
+13.958 8.271 1475
+13.988 8.219 1475
+14.026 8.165 1475
+14.074 8.109 1475
+14.123 8.055 1475
+14.173 8.003 1475
+14.225 7.954 1475
+14.277 7.901 1475
+14.321 7.846 1475
+14.369 7.794 1475
+14.419 7.742 1475
+14.471 7.691 1475
+14.510 7.638 1475
+14.508 7.587 1475
+14.523 7.531 1475
+14.549 7.474 1475
+14.584 7.418 1475
+14.622 7.368 1475
+14.676 7.323 1475
+14.732 7.275 1475
+14.781 7.221 1475
+14.832 7.169 1475
+14.881 7.114 1475
+14.921 7.061 1475
+14.958 7.006 1475
+15.013 6.957 1475
+15.067 6.934 1475
+15.117 6.895 1475
+15.171 6.871 1475
+15.222 6.816 1475
+15.246 6.764 1475
+15.271 6.713 1475
+15.311 6.659 1475
+15.359 6.608 1475
+15.402 6.555 1475
+15.436 6.500 1475
+15.471 6.444 1475
+15.498 6.393 1475
+15.536 6.336 1475
+15.566 6.285 1475
+15.597 6.233 1475
+15.631 6.182 1475
+15.666 6.128 1475
+15.694 6.077 1475
+15.726 6.024 1475
+15.761 5.967 1475
+15.795 5.913 1475
+15.832 5.856 1475
+15.870 5.800 1475
+15.909 5.748 1475
+15.953 5.694 1475
+15.998 5.642 1475
+16.042 5.587 1475
+16.084 5.531 1475
+16.121 5.480 1475
+16.166 5.423 1475
+16.194 5.372 1475
+16.224 5.316 1475
+16.253 5.262 1475
+16.281 5.208 1475
+16.311 5.158 1475
+16.346 5.101 1475
+16.379 5.044 1475
+16.415 4.993 1475
+16.446 4.941 1475
+16.475 4.888 1475
+16.499 4.835 1475
+16.529 4.776 1475
+16.551 4.725 1475
+16.572 4.671 1475
+16.590 4.620 1475
+16.606 4.565 1475
+16.623 4.510 1475
+16.643 4.459 1475
+16.659 4.403 1475
+16.665 4.345 1475
+16.674 4.291 1475
+16.689 4.238 1475
+16.714 4.185 1475
+16.745 4.133 1475
+16.782 4.077 1475
+16.813 4.027 1475
+16.844 3.971 1475
+16.849 3.919 1475
+16.844 3.868 1475
+16.839 3.816 1475
+16.838 3.760 1475
+16.848 3.707 1475
+16.870 3.654 1475
+16.904 3.595 1475
+16.928 3.544 1475
+16.961 3.487 1475
+16.984 3.434 1475
+16.996 3.380 1475
+17.020 3.329 1475
+12.734 3.321 1500
+12.733 3.321 1500
+12.710 3.372 1500
+12.703 3.425 1500
+12.701 3.478 1500
+12.705 3.533 1500
+12.697 3.586 1500
+12.667 3.638 1500
+12.652 3.694 1500
+12.655 3.747 1500
+12.643 3.802 1500
+12.606 3.853 1500
+12.553 3.867 1500
+12.503 3.878 1500
+12.452 3.922 1500
+12.428 3.975 1500
+12.374 3.989 1500
+12.322 4.035 1500
+12.350 4.088 1500
+12.368 4.138 1500
+12.358 4.189 1500
+12.382 4.244 1500
+12.437 4.257 1500
+12.491 4.281 1500
+12.545 4.319 1500
+12.596 4.343 1500
+12.613 4.396 1500
+12.613 4.450 1500
+12.612 4.500 1500
+12.603 4.558 1500
+12.594 4.612 1500
+12.589 4.664 1500
+12.576 4.716 1500
+12.547 4.767 1500
+12.495 4.802 1500
+12.442 4.846 1500
+12.391 4.880 1500
+12.337 4.915 1500
+12.285 4.967 1500
+12.249 5.019 1500
+12.223 5.071 1500
+12.242 5.123 1500
+12.282 5.175 1500
+12.291 5.225 1500
+12.288 5.278 1500
+12.289 5.329 1500
+12.341 5.377 1500
+12.357 5.429 1500
+12.351 5.479 1500
+12.336 5.532 1500
+12.352 5.584 1500
+12.388 5.639 1500
+12.411 5.690 1500
+12.426 5.741 1500
+12.436 5.792 1500
+12.449 5.847 1500
+12.452 5.902 1500
+12.437 5.954 1500
+12.419 6.008 1500
+12.391 6.060 1500
+12.344 6.112 1500
+12.322 6.164 1500
+12.319 6.217 1500
+12.322 6.270 1500
+12.302 6.326 1500
+12.270 6.378 1500
+12.230 6.431 1500
+12.184 6.486 1500
+12.155 6.539 1500
+12.127 6.590 1500
+12.091 6.644 1500
+12.054 6.699 1500
+12.020 6.751 1500
+11.998 6.801 1500
+11.963 6.852 1500
+11.912 6.908 1500
+11.871 6.959 1500
+11.831 7.010 1500
+11.785 7.063 1500
+11.739 7.114 1500
+11.690 7.164 1500
+11.638 7.208 1500
+11.587 7.261 1500
+11.550 7.316 1500
+11.515 7.367 1500
+11.474 7.419 1500
+11.426 7.472 1500
+11.374 7.517 1500
+11.356 7.571 1500
+11.344 7.626 1500
+11.314 7.679 1500
+11.267 7.733 1500
+11.236 7.783 1500
+11.228 7.835 1500
+11.216 7.887 1500
+11.203 7.940 1500
+11.202 7.981 1500
+11.200 7.991 1500
+11.198 8.043 1500
+11.195 8.095 1500
+11.163 8.147 1500
+11.151 8.198 1500
+11.143 8.249 1500
+11.142 8.299 1500
+11.154 8.351 1500
+11.181 8.404 1500
+11.212 8.457 1500
+11.256 8.507 1500
+11.297 8.558 1500
+11.324 8.608 1500
+11.345 8.659 1500
+11.389 8.710 1500
+11.445 8.742 1500
+11.496 8.776 1500
+11.548 8.818 1500
+11.604 8.866 1500
+11.652 8.920 1500
+11.707 8.975 1500
+11.757 9.027 1500
+11.813 9.081 1500
+11.866 9.127 1500
+11.919 9.167 1500
+11.970 9.207 1500
+12.021 9.247 1500
+12.074 9.296 1500
+12.126 9.337 1500
+12.176 9.363 1500
+12.228 9.384 1500
+12.284 9.393 1500
+12.341 9.410 1500
+12.391 9.423 1500
+12.443 9.431 1500
+12.497 9.451 1500
+12.541 9.504 1500
+12.569 9.554 1500
+12.584 9.605 1500
+12.600 9.655 1500
+12.612 9.706 1500
+12.620 9.758 1500
+12.633 9.808 1500
+12.684 9.833 1500
+12.737 9.818 1500
+12.762 9.805 1500
+12.759 9.767 1500
+12.802 9.715 1500
+12.848 9.665 1500
+12.900 9.616 1500
+12.955 9.572 1500
+13.009 9.529 1500
+13.066 9.487 1500
+13.120 9.450 1500
+13.176 9.409 1500
+13.230 9.364 1500
+13.284 9.322 1500
+13.337 9.292 1500
+13.390 9.245 1500
+13.441 9.195 1500
+13.473 9.144 1500
+13.509 9.091 1500
+13.559 9.043 1500
+13.593 8.991 1500
+13.626 8.939 1500
+13.638 8.886 1500
+13.667 8.835 1500
+13.717 8.801 1500
+13.767 8.753 1500
+13.817 8.706 1500
+13.851 8.654 1500
+13.860 8.604 1500
+13.891 8.554 1500
+13.943 8.503 1500
+13.998 8.466 1500
+14.048 8.425 1500
+14.101 8.379 1500
+14.153 8.324 1500
+14.186 8.271 1500
+14.207 8.219 1500
+14.243 8.165 1500
+14.278 8.115 1500
+14.332 8.066 1500
+14.385 8.037 1500
+14.438 8.010 1500
+14.489 7.975 1500
+14.539 7.924 1500
+14.582 7.871 1500
+14.627 7.821 1500
+14.671 7.769 1500
+14.708 7.718 1500
+14.703 7.667 1500
+14.740 7.612 1500
+14.791 7.560 1500
+14.842 7.527 1500
+14.893 7.559 1500
+14.943 7.527 1500
+14.986 7.474 1500
+15.032 7.420 1500
+15.083 7.381 1500
+15.135 7.332 1500
+15.176 7.281 1500
+15.230 7.230 1500
+15.268 7.179 1500
+15.310 7.123 1500
+15.356 7.068 1500
+15.388 7.016 1500
+15.416 6.964 1500
+15.444 6.910 1500
+15.470 6.856 1500
+15.490 6.803 1500
+15.512 6.751 1500
+15.542 6.701 1500
+15.578 6.645 1500
+15.604 6.595 1500
+15.638 6.538 1500
+15.671 6.483 1500
+15.701 6.429 1500
+15.734 6.379 1500
+15.768 6.323 1500
+15.798 6.271 1500
+15.820 6.219 1500
+15.822 6.169 1500
+15.867 6.118 1500
+15.907 6.062 1500
+15.948 6.011 1500
+15.995 5.961 1500
+16.041 5.909 1500
+16.076 5.856 1500
+16.119 5.802 1500
+16.154 5.752 1500
+16.187 5.701 1500
+16.225 5.647 1500
+16.270 5.597 1500
+16.314 5.543 1500
+16.346 5.492 1500
+16.375 5.439 1500
+16.402 5.386 1500
+16.427 5.335 1500
+16.458 5.282 1500
+16.492 5.229 1500
+16.532 5.175 1500
+16.578 5.124 1500
+16.629 5.078 1500
+16.660 5.022 1500
+16.660 4.968 1500
+16.678 4.915 1500
+16.718 4.863 1500
+16.760 4.808 1500
+16.777 4.758 1500
+16.794 4.701 1500
+16.811 4.644 1500
+16.828 4.591 1500
+16.847 4.535 1500
+16.861 4.484 1500
+16.874 4.433 1500
+16.882 4.380 1500
+16.895 4.328 1500
+16.909 4.272 1500
+16.922 4.219 1500
+16.940 4.169 1500
+16.966 4.117 1500
+16.993 4.067 1500
+17.027 4.013 1500
+17.051 3.963 1500
+17.051 3.912 1500
+17.059 3.860 1500
+17.070 3.807 1500
+17.081 3.752 1500
+17.095 3.697 1500
+17.113 3.640 1500
+17.140 3.588 1500
+17.162 3.535 1500
+17.177 3.485 1500
+17.203 3.433 1500
+12.598 3.328 1525
+12.597 3.328 1525
+12.563 3.380 1525
+12.552 3.432 1525
+12.544 3.486 1525
+12.538 3.537 1525
+12.531 3.593 1525
+12.527 3.647 1525
+12.516 3.699 1525
+12.483 3.749 1525
+12.432 3.781 1525
+12.379 3.808 1525
+12.348 3.859 1525
+12.332 3.909 1525
+12.281 3.955 1525
+12.229 3.995 1525
+12.177 4.029 1525
+12.172 4.081 1525
+12.222 4.123 1525
+12.248 4.175 1525
+12.242 4.226 1525
+12.269 4.276 1525
+12.267 4.328 1525
+12.285 4.384 1525
+12.338 4.398 1525
+12.388 4.371 1525
+12.438 4.416 1525
+12.444 4.470 1525
+12.443 4.526 1525
+12.445 4.581 1525
+12.441 4.632 1525
+12.420 4.683 1525
+12.390 4.734 1525
+12.336 4.783 1525
+12.283 4.793 1525
+12.230 4.827 1525
+12.186 4.879 1525
+12.135 4.919 1525
+12.084 4.956 1525
+12.050 5.009 1525
+12.022 5.064 1525
+12.048 5.115 1525
+12.082 5.168 1525
+12.134 5.222 1525
+12.171 5.272 1525
+12.167 5.323 1525
+12.146 5.373 1525
+12.141 5.426 1525
+12.168 5.478 1525
+12.141 5.528 1525
+12.110 5.579 1525
+12.133 5.630 1525
+12.162 5.681 1525
+12.155 5.732 1525
+12.141 5.789 1525
+12.134 5.839 1525
+12.131 5.895 1525
+12.126 5.945 1525
+12.116 6.002 1525
+12.104 6.054 1525
+12.091 6.105 1525
+12.082 6.157 1525
+12.072 6.209 1525
+12.070 6.259 1525
+12.076 6.312 1525
+12.089 6.370 1525
+12.093 6.425 1525
+12.083 6.478 1525
+12.062 6.531 1525
+12.032 6.585 1525
+11.982 6.633 1525
+11.931 6.681 1525
+11.903 6.733 1525
+11.871 6.783 1525
+11.821 6.833 1525
+11.771 6.865 1525
+11.724 6.920 1525
+11.685 6.971 1525
+11.640 7.023 1525
+11.601 7.073 1525
+11.562 7.127 1525
+11.533 7.178 1525
+11.502 7.230 1525
+11.459 7.282 1525
+11.405 7.310 1525
+11.352 7.346 1525
+11.309 7.398 1525
+11.264 7.449 1525
+11.212 7.495 1525
+11.161 7.521 1525
+11.111 7.561 1525
+11.077 7.613 1525
+11.051 7.667 1525
+11.048 7.718 1525
+11.047 7.772 1525
+11.041 7.831 1525
+11.033 7.885 1525
+11.017 7.938 1525
+10.999 7.988 1525
+10.986 8.041 1525
+10.956 8.096 1525
+10.928 8.152 1525
+10.909 8.202 1525
+10.889 8.257 1525
+10.867 8.309 1525
+10.856 8.363 1525
+10.846 8.415 1525
+10.826 8.469 1525
+10.804 8.520 1525
+10.787 8.570 1525
+10.777 8.623 1525
+10.767 8.669 1525
+10.764 8.675 1525
+10.748 8.729 1525
+10.750 8.780 1525
+10.755 8.832 1525
+10.768 8.882 1525
+10.778 8.938 1525
+10.793 8.993 1525
+10.804 9.044 1525
+10.818 9.094 1525
+10.826 9.149 1525
+10.838 9.204 1525
+10.852 9.256 1525
+10.872 9.309 1525
+10.922 9.317 1525
+10.953 9.369 1525
+10.959 9.422 1525
+10.974 9.473 1525
+11.029 9.514 1525
+11.079 9.540 1525
+11.130 9.586 1525
+11.181 9.638 1525
+11.232 9.685 1525
+11.283 9.738 1525
+11.336 9.780 1525
+11.390 9.827 1525
+11.443 9.873 1525
+11.499 9.926 1525
+11.551 9.963 1525
+11.601 9.989 1525
+11.654 10.007 1525
+11.706 10.014 1525
+11.757 10.022 1525
+11.813 10.034 1525
+11.863 10.039 1525
+11.919 10.042 1525
+11.973 10.053 1525
+12.027 10.068 1525
+12.081 10.079 1525
+12.133 10.094 1525
+12.183 10.111 1525
+12.237 10.130 1525
+12.289 10.168 1525
+12.341 10.212 1525
+12.379 10.267 1525
+12.416 10.319 1525
+12.456 10.369 1525
+12.488 10.319 1525
+12.510 10.303 1525
+12.544 10.272 1525
+12.598 10.240 1525
+12.654 10.205 1525
+12.704 10.163 1525
+12.746 10.107 1525
+12.779 10.055 1525
+12.811 10.001 1525
+12.861 9.996 1525
+12.898 9.945 1525
+12.929 9.895 1525
+12.980 9.853 1525
+13.030 9.824 1525
+13.084 9.785 1525
+13.133 9.735 1525
+13.184 9.686 1525
+13.234 9.643 1525
+13.287 9.594 1525
+13.343 9.556 1525
+13.395 9.516 1525
+13.448 9.471 1525
+13.499 9.419 1525
+13.540 9.369 1525
+13.571 9.317 1525
+13.608 9.262 1525
+13.644 9.211 1525
+13.694 9.176 1525
+13.731 9.123 1525
+13.751 9.070 1525
+13.784 9.019 1525
+13.832 8.968 1525
+13.882 8.929 1525
+13.935 8.880 1525
+13.989 8.855 1525
+14.032 8.801 1525
+14.074 8.751 1525
+14.128 8.706 1525
+14.180 8.659 1525
+14.231 8.606 1525
+14.267 8.554 1525
+14.315 8.500 1525
+14.363 8.447 1525
+14.404 8.396 1525
+14.429 8.344 1525
+14.455 8.291 1525
+14.489 8.237 1525
+14.533 8.185 1525
+14.586 8.133 1525
+14.638 8.090 1525
+14.690 8.041 1525
+14.719 7.991 1525
+14.770 7.963 1525
+14.801 7.913 1525
+14.814 7.860 1525
+14.869 7.806 1525
+14.922 7.768 1525
+14.973 7.747 1525
+15.027 7.728 1525
+15.080 7.717 1525
+15.134 7.681 1525
+15.168 7.631 1525
+15.206 7.580 1525
+15.260 7.533 1525
+15.310 7.479 1525
+15.362 7.427 1525
+15.412 7.391 1525
+15.452 7.336 1525
+15.485 7.286 1525
+15.515 7.232 1525
+15.545 7.179 1525
+15.575 7.129 1525
+15.605 7.073 1525
+15.625 7.022 1525
+15.645 6.969 1525
+15.673 6.913 1525
+15.701 6.852 1525
+15.730 6.793 1525
+15.755 6.734 1525
+15.777 6.678 1525
+15.795 6.618 1525
+15.814 6.558 1525
+15.838 6.500 1525
+15.867 6.447 1525
+15.911 6.386 1525
+15.942 6.331 1525
+15.970 6.276 1525
+16.001 6.221 1525
+16.036 6.170 1525
+16.081 6.118 1525
+16.132 6.068 1525
+16.180 6.015 1525
+16.218 5.961 1525
+16.257 5.908 1525
+16.298 5.857 1525
+16.339 5.807 1525
+16.384 5.747 1525
+16.428 5.691 1525
+16.471 5.641 1525
+16.522 5.583 1525
+16.569 5.533 1525
+16.610 5.480 1525
+16.645 5.424 1525
+16.674 5.369 1525
+16.700 5.317 1525
+16.719 5.266 1525
+16.745 5.215 1525
+16.784 5.159 1525
+16.817 5.107 1525
+16.851 5.050 1525
+16.886 4.995 1525
+16.913 4.942 1525
+16.947 4.883 1525
+16.976 4.829 1525
+17.005 4.775 1525
+17.036 4.714 1525
+17.060 4.664 1525
+17.087 4.609 1525
+17.103 4.558 1525
+17.099 4.502 1525
+17.103 4.451 1525
+17.112 4.396 1525
+17.117 4.339 1525
+17.132 4.283 1525
+17.151 4.232 1525
+17.172 4.178 1525
+17.181 4.128 1525
+17.187 4.073 1525
+17.191 4.018 1525
+17.201 3.960 1525
+17.209 3.902 1525
+17.216 3.849 1525
+17.228 3.795 1525
+17.246 3.743 1525
+17.270 3.690 1525
+17.300 3.637 1525
+17.331 3.585 1525
+17.364 3.532 1525
+17.389 3.479 1525
+12.450 3.315 1550
+12.448 3.315 1550
+12.431 3.369 1550
+12.425 3.423 1550
+12.413 3.476 1550
+12.397 3.528 1550
+12.370 3.581 1550
+12.334 3.637 1550
+12.290 3.688 1550
+12.249 3.740 1550
+12.197 3.795 1550
+12.147 3.848 1550
+12.098 3.904 1550
+12.060 3.959 1550
+12.041 4.014 1550
+12.040 4.068 1550
+12.043 4.119 1550
+12.062 4.175 1550
+12.057 4.225 1550
+12.072 4.278 1550
+12.122 4.309 1550
+12.111 4.362 1550
+12.080 4.414 1550
+12.072 4.464 1550
+12.122 4.495 1550
+12.174 4.518 1550
+12.228 4.547 1550
+12.254 4.598 1550
+12.230 4.651 1550
+12.179 4.699 1550
+12.129 4.734 1550
+12.076 4.785 1550
+12.034 4.836 1550
+11.981 4.848 1550
+11.958 4.899 1550
+11.908 4.940 1550
+11.908 4.990 1550
+11.856 5.035 1550
+11.849 5.085 1550
+11.899 5.125 1550
+11.926 5.177 1550
+11.976 5.197 1550
+12.008 5.247 1550
+12.000 5.297 1550
+11.949 5.344 1550
+11.931 5.395 1550
+11.900 5.449 1550
+11.885 5.499 1550
+11.874 5.550 1550
+11.853 5.601 1550
+11.807 5.651 1550
+11.818 5.706 1550
+11.780 5.761 1550
+11.760 5.812 1550
+11.752 5.863 1550
+11.751 5.914 1550
+11.753 5.969 1550
+11.766 6.024 1550
+11.778 6.077 1550
+11.769 6.129 1550
+11.755 6.179 1550
+11.767 6.230 1550
+11.792 6.281 1550
+11.782 6.335 1550
+11.759 6.388 1550
+11.735 6.442 1550
+11.710 6.493 1550
+11.706 6.544 1550
+11.686 6.595 1550
+11.655 6.647 1550
+11.646 6.698 1550
+11.638 6.749 1550
+11.614 6.802 1550
+11.581 6.856 1550
+11.558 6.909 1550
+11.536 6.960 1550
+11.499 7.015 1550
+11.446 7.069 1550
+11.422 7.124 1550
+11.389 7.174 1550
+11.337 7.214 1550
+11.284 7.239 1550
+11.232 7.264 1550
+11.193 7.314 1550
+11.154 7.366 1550
+11.100 7.402 1550
+11.050 7.427 1550
+10.993 7.450 1550
+10.938 7.473 1550
+10.887 7.510 1550
+10.847 7.561 1550
+10.852 7.614 1550
+10.866 7.664 1550
+10.874 7.718 1550
+10.871 7.772 1550
+10.859 7.826 1550
+10.839 7.881 1550
+10.811 7.933 1550
+10.787 7.989 1550
+10.772 8.042 1550
+10.753 8.094 1550
+10.734 8.147 1550
+10.715 8.203 1550
+10.700 8.258 1550
+10.681 8.312 1550
+10.666 8.363 1550
+10.643 8.415 1550
+10.612 8.465 1550
+10.578 8.516 1550
+10.550 8.569 1550
+10.524 8.623 1550
+10.497 8.677 1550
+10.473 8.731 1550
+10.452 8.786 1550
+10.432 8.838 1550
+10.409 8.892 1550
+10.390 8.946 1550
+10.375 8.996 1550
+10.358 9.047 1550
+10.341 9.088 1550
+10.323 9.101 1550
+10.305 9.155 1550
+10.291 9.209 1550
+10.284 9.261 1550
+10.281 9.312 1550
+10.289 9.363 1550
+10.302 9.417 1550
+10.312 9.470 1550
+10.322 9.522 1550
+10.330 9.574 1550
+10.341 9.626 1550
+10.357 9.678 1550
+10.377 9.731 1550
+10.400 9.784 1550
+10.424 9.838 1550
+10.443 9.891 1550
+10.464 9.942 1550
+10.490 9.993 1550
+10.529 10.043 1550
+10.580 10.089 1550
+10.632 10.119 1550
+10.683 10.149 1550
+10.738 10.188 1550
+10.791 10.229 1550
+10.846 10.277 1550
+10.899 10.322 1550
+10.949 10.364 1550
+11.001 10.404 1550
+11.053 10.442 1550
+11.104 10.477 1550
+11.157 10.512 1550
+11.211 10.552 1550
+11.268 10.587 1550
+11.322 10.618 1550
+11.372 10.643 1550
+11.422 10.661 1550
+11.476 10.677 1550
+11.530 10.683 1550
+11.583 10.692 1550
+11.634 10.703 1550
+11.687 10.710 1550
+11.740 10.713 1550
+11.798 10.721 1550
+11.848 10.732 1550
+11.902 10.741 1550
+11.956 10.758 1550
+12.009 10.775 1550
+12.063 10.800 1550
+12.114 10.821 1550
+12.165 10.848 1550
+12.215 10.874 1550
+12.265 10.914 1550
+12.309 10.965 1550
+12.317 10.974 1550
+12.362 10.957 1550
+12.411 10.903 1550
+12.431 10.852 1550
+12.458 10.801 1550
+12.495 10.747 1550
+12.537 10.697 1550
+12.580 10.646 1550
+12.631 10.606 1550
+12.681 10.580 1550
+12.703 10.525 1550
+12.717 10.473 1550
+12.738 10.422 1550
+12.772 10.366 1550
+12.815 10.311 1550
+12.866 10.282 1550
+12.891 10.231 1550
+12.927 10.181 1550
+12.979 10.178 1550
+13.032 10.178 1550
+13.052 10.126 1550
+13.084 10.075 1550
+13.133 10.023 1550
+13.151 9.970 1550
+13.168 9.915 1550
+13.215 9.865 1550
+13.260 9.813 1550
+13.310 9.771 1550
+13.362 9.724 1550
+13.416 9.672 1550
+13.469 9.640 1550
+13.523 9.621 1550
+13.574 9.610 1550
+13.626 9.570 1550
+13.661 9.519 1550
+13.710 9.466 1550
+13.762 9.425 1550
+13.813 9.388 1550
+13.836 9.338 1550
+13.866 9.285 1550
+13.918 9.242 1550
+13.961 9.190 1550
+13.988 9.137 1550
+14.017 9.084 1550
+14.067 9.043 1550
+14.119 9.036 1550
+14.128 8.983 1550
+14.158 8.933 1550
+14.216 8.915 1550
+14.269 8.888 1550
+14.311 8.838 1550
+14.329 8.787 1550
+14.359 8.732 1550
+14.392 8.678 1550
+14.429 8.623 1550
+14.476 8.566 1550
+14.525 8.510 1550
+14.564 8.458 1550
+14.594 8.406 1550
+14.624 8.355 1550
+14.661 8.300 1550
+14.694 8.244 1550
+14.731 8.193 1550
+14.773 8.142 1550
+14.826 8.090 1550
+14.879 8.047 1550
+14.935 8.004 1550
+14.989 7.968 1550
+15.042 7.929 1550
+15.093 7.894 1550
+15.146 7.874 1550
+15.197 7.849 1550
+15.247 7.819 1550
+15.298 7.780 1550
+15.349 7.734 1550
+15.395 7.683 1550
+15.448 7.634 1550
+15.498 7.586 1550
+15.549 7.534 1550
+15.593 7.483 1550
+15.637 7.430 1550
+15.678 7.379 1550
+15.711 7.326 1550
+15.730 7.274 1550
+15.736 7.221 1550
+15.736 7.171 1550
+15.750 7.118 1550
+15.767 7.062 1550
+15.791 7.003 1550
+15.818 6.947 1550
+15.847 6.892 1550
+15.868 6.839 1550
+15.885 6.789 1550
+15.907 6.734 1550
+15.927 6.683 1550
+15.949 6.626 1550
+15.977 6.567 1550
+16.003 6.510 1550
+16.039 6.454 1550
+16.073 6.403 1550
+16.103 6.351 1550
+16.129 6.300 1550
+16.167 6.244 1550
+16.201 6.194 1550
+16.240 6.142 1550
+16.291 6.088 1550
+16.342 6.038 1550
+16.392 5.993 1550
+16.448 5.939 1550
+16.498 5.895 1550
+16.553 5.852 1550
+16.605 5.802 1550
+16.644 5.752 1550
+16.672 5.701 1550
+16.714 5.648 1550
+16.756 5.595 1550
+16.780 5.541 1550
+16.803 5.491 1550
+16.831 5.439 1550
+16.861 5.386 1550
+16.896 5.332 1550
+16.939 5.278 1550
+16.975 5.228 1550
+17.007 5.177 1550
+17.035 5.124 1550
+17.051 5.074 1550
+17.066 5.022 1550
+17.081 4.968 1550
+17.112 4.914 1550
+17.148 4.862 1550
+17.191 4.809 1550
+17.181 4.756 1550
+17.183 4.699 1550
+17.190 4.642 1550
+17.200 4.592 1550
+17.221 4.541 1550
+17.236 4.491 1550
+17.250 4.439 1550
+17.256 4.387 1550
+17.273 4.335 1550
+17.288 4.283 1550
+17.292 4.233 1550
+17.294 4.181 1550
+17.296 4.131 1550
+17.311 4.078 1550
+17.325 4.023 1550
+17.344 3.970 1550
+17.363 3.919 1550
+17.379 3.867 1550
+17.384 3.812 1550
+17.388 3.760 1550
+17.402 3.707 1550
+12.317 3.309 1575
+12.316 3.309 1575
+12.301 3.362 1575
+12.301 3.414 1575
+12.285 3.469 1575
+12.260 3.523 1575
+12.208 3.577 1575
+12.154 3.612 1575
+12.102 3.657 1575
+12.052 3.701 1575
+12.003 3.755 1575
+11.968 3.809 1575
+11.938 3.862 1575
+11.915 3.913 1575
+11.908 3.963 1575
+11.905 4.015 1575
+11.873 4.066 1575
+11.835 4.117 1575
+11.813 4.169 1575
+11.827 4.222 1575
+11.841 4.279 1575
+11.843 4.329 1575
+11.826 4.382 1575
+11.799 4.436 1575
+11.757 4.488 1575
+11.712 4.543 1575
+11.707 4.595 1575
+11.713 4.645 1575
+11.766 4.633 1575
+11.822 4.618 1575
+11.873 4.619 1575
+11.895 4.673 1575
+11.878 4.726 1575
+11.838 4.780 1575
+11.801 4.832 1575
+11.754 4.883 1575
+11.739 4.934 1575
+11.743 4.984 1575
+11.691 4.996 1575
+11.661 5.048 1575
+11.674 5.101 1575
+11.684 5.154 1575
+11.728 5.208 1575
+11.728 5.259 1575
+11.710 5.312 1575
+11.674 5.365 1575
+11.641 5.417 1575
+11.611 5.471 1575
+11.573 5.524 1575
+11.545 5.577 1575
+11.515 5.630 1575
+11.499 5.682 1575
+11.497 5.734 1575
+11.506 5.786 1575
+11.522 5.840 1575
+11.537 5.896 1575
+11.545 5.952 1575
+11.548 6.004 1575
+11.548 6.056 1575
+11.546 6.111 1575
+11.545 6.168 1575
+11.537 6.224 1575
+11.532 6.276 1575
+11.531 6.333 1575
+11.527 6.386 1575
+11.522 6.438 1575
+11.511 6.496 1575
+11.499 6.551 1575
+11.489 6.607 1575
+11.478 6.659 1575
+11.463 6.718 1575
+11.446 6.768 1575
+11.428 6.820 1575
+11.404 6.876 1575
+11.378 6.932 1575
+11.350 6.988 1575
+11.312 7.041 1575
+11.272 7.098 1575
+11.235 7.149 1575
+11.191 7.202 1575
+11.141 7.232 1575
+11.090 7.252 1575
+11.037 7.295 1575
+10.982 7.333 1575
+10.927 7.349 1575
+10.873 7.344 1575
+10.818 7.360 1575
+10.764 7.400 1575
+10.710 7.423 1575
+10.659 7.432 1575
+10.633 7.485 1575
+10.627 7.537 1575
+10.619 7.587 1575
+10.664 7.640 1575
+10.715 7.679 1575
+10.758 7.729 1575
+10.743 7.780 1575
+10.692 7.833 1575
+10.655 7.887 1575
+10.657 7.940 1575
+10.668 7.992 1575
+10.661 8.043 1575
+10.645 8.096 1575
+10.618 8.151 1575
+10.599 8.204 1575
+10.579 8.257 1575
+10.555 8.311 1575
+10.522 8.365 1575
+10.485 8.418 1575
+10.444 8.469 1575
+10.412 8.525 1575
+10.377 8.579 1575
+10.355 8.631 1575
+10.338 8.683 1575
+10.311 8.736 1575
+10.290 8.789 1575
+10.267 8.839 1575
+10.236 8.893 1575
+10.203 8.949 1575
+10.172 9.001 1575
+10.135 9.054 1575
+10.103 9.107 1575
+10.075 9.160 1575
+10.051 9.211 1575
+10.039 9.265 1575
+10.030 9.322 1575
+10.022 9.377 1575
+10.008 9.427 1575
+9.987 9.451 1575
+9.974 9.481 1575
+9.955 9.536 1575
+9.928 9.592 1575
+9.901 9.646 1575
+9.875 9.699 1575
+9.856 9.752 1575
+9.846 9.802 1575
+9.847 9.852 1575
+9.865 9.903 1575
+9.905 9.954 1575
+9.929 10.008 1575
+9.946 10.060 1575
+9.954 10.115 1575
+9.956 10.168 1575
+9.962 10.221 1575
+9.967 10.271 1575
+9.974 10.325 1575
+9.981 10.377 1575
+9.990 10.427 1575
+10.006 10.478 1575
+10.023 10.531 1575
+10.047 10.584 1575
+10.079 10.638 1575
+10.111 10.691 1575
+10.158 10.744 1575
+10.211 10.788 1575
+10.262 10.822 1575
+10.317 10.845 1575
+10.369 10.875 1575
+10.419 10.917 1575
+10.458 10.973 1575
+10.499 11.030 1575
+10.533 11.083 1575
+10.579 11.141 1575
+10.632 11.191 1575
+10.686 11.244 1575
+10.738 11.292 1575
+10.788 11.343 1575
+10.842 11.396 1575
+10.898 11.438 1575
+10.950 11.472 1575
+11.003 11.503 1575
+11.054 11.526 1575
+11.107 11.545 1575
+11.163 11.565 1575
+11.215 11.581 1575
+11.269 11.593 1575
+11.326 11.594 1575
+11.377 11.591 1575
+11.430 11.577 1575
+11.482 11.563 1575
+11.532 11.543 1575
+11.583 11.520 1575
+11.637 11.493 1575
+11.693 11.480 1575
+11.746 11.478 1575
+11.798 11.482 1575
+11.848 11.487 1575
+11.900 11.492 1575
+11.952 11.479 1575
+12.002 11.472 1575
+12.052 11.473 1575
+12.102 11.513 1575
+12.153 11.559 1575
+12.204 11.601 1575
+12.255 11.619 1575
+12.258 11.618 1575
+12.285 11.559 1575
+12.317 11.509 1575
+12.359 11.458 1575
+12.388 11.404 1575
+12.424 11.350 1575
+12.458 11.298 1575
+12.510 11.245 1575
+12.517 11.188 1575
+12.519 11.138 1575
+12.549 11.086 1575
+12.593 11.030 1575
+12.617 10.979 1575
+12.636 10.927 1575
+12.665 10.868 1575
+12.705 10.812 1575
+12.753 10.762 1575
+12.804 10.773 1575
+12.854 10.773 1575
+12.910 10.718 1575
+12.949 10.667 1575
+12.952 10.615 1575
+12.958 10.564 1575
+12.986 10.512 1575
+13.019 10.458 1575
+13.050 10.405 1575
+13.082 10.355 1575
+13.112 10.302 1575
+13.147 10.249 1575
+13.200 10.243 1575
+13.221 10.184 1575
+13.237 10.124 1575
+13.264 10.069 1575
+13.298 10.017 1575
+13.348 9.968 1575
+13.402 9.935 1575
+13.455 9.916 1575
+13.512 9.888 1575
+13.565 9.855 1575
+13.620 9.809 1575
+13.674 9.769 1575
+13.730 9.727 1575
+13.779 9.675 1575
+13.829 9.648 1575
+13.856 9.594 1575
+13.894 9.544 1575
+13.945 9.507 1575
+13.996 9.511 1575
+14.013 9.459 1575
+14.063 9.435 1575
+14.116 9.427 1575
+14.171 9.419 1575
+14.215 9.369 1575
+14.240 9.318 1575
+14.292 9.293 1575
+14.323 9.238 1575
+14.315 9.185 1575
+14.311 9.135 1575
+14.361 9.098 1575
+14.388 9.046 1575
+14.412 8.992 1575
+14.424 8.941 1575
+14.444 8.888 1575
+14.478 8.838 1575
+14.512 8.787 1575
+14.543 8.733 1575
+14.579 8.679 1575
+14.622 8.623 1575
+14.658 8.571 1575
+14.697 8.521 1575
+14.737 8.471 1575
+14.766 8.413 1575
+14.792 8.360 1575
+14.822 8.307 1575
+14.867 8.251 1575
+14.919 8.204 1575
+14.969 8.155 1575
+15.022 8.133 1575
+15.073 8.115 1575
+15.123 8.075 1575
+15.149 8.024 1575
+15.201 8.000 1575
+15.254 7.987 1575
+15.308 7.980 1575
+15.361 7.968 1575
+15.412 7.934 1575
+15.463 7.895 1575
+15.503 7.842 1575
+15.516 7.789 1575
+15.544 7.736 1575
+15.594 7.684 1575
+15.650 7.639 1575
+15.704 7.591 1575
+15.754 7.537 1575
+15.805 7.500 1575
+15.810 7.449 1575
+15.842 7.396 1575
+15.881 7.344 1575
+15.894 7.292 1575
+15.918 7.239 1575
+15.935 7.185 1575
+15.954 7.129 1575
+15.967 7.075 1575
+15.977 7.019 1575
+15.985 6.964 1575
+16.000 6.909 1575
+16.021 6.856 1575
+16.044 6.806 1575
+16.063 6.751 1575
+16.081 6.695 1575
+16.115 6.645 1575
+16.147 6.594 1575
+16.166 6.541 1575
+16.190 6.486 1575
+16.218 6.431 1575
+16.247 6.375 1575
+16.281 6.321 1575
+16.325 6.265 1575
+16.374 6.214 1575
+16.425 6.172 1575
+16.477 6.136 1575
+16.532 6.088 1575
+16.582 6.040 1575
+16.638 5.991 1575
+16.692 5.948 1575
+16.744 5.896 1575
+16.792 5.842 1575
+16.837 5.792 1575
+16.881 5.735 1575
+16.927 5.683 1575
+16.962 5.632 1575
+16.985 5.581 1575
+17.003 5.531 1575
+17.019 5.476 1575
+17.035 5.420 1575
+17.053 5.366 1575
+17.077 5.314 1575
+17.099 5.263 1575
+17.150 5.226 1575
+17.184 5.171 1575
+17.195 5.117 1575
+17.195 5.064 1575
+17.208 5.013 1575
+17.251 4.963 1575
+17.305 4.931 1575
+17.324 4.878 1575
+17.320 4.823 1575
+17.322 4.768 1575
+17.323 4.718 1575
+17.324 4.667 1575
+17.336 4.611 1575
+17.388 4.576 1575
+17.403 4.521 1575
+17.402 4.470 1575
+17.422 4.419 1575
+12.190 3.312 1600
+12.188 3.312 1600
+12.151 3.364 1600
+12.114 3.416 1600
+12.066 3.467 1600
+12.010 3.499 1600
+11.960 3.519 1600
+11.910 3.541 1600
+11.858 3.564 1600
+11.804 3.595 1600
+11.752 3.632 1600
+11.701 3.671 1600
+11.648 3.707 1600
+11.597 3.746 1600
+11.548 3.801 1600
+11.506 3.853 1600
+11.451 3.888 1600
+11.397 3.909 1600
+11.356 3.961 1600
+11.326 4.016 1600
+11.301 4.070 1600
+11.258 4.121 1600
+11.204 4.170 1600
+11.151 4.207 1600
+11.098 4.221 1600
+11.046 4.238 1600
+10.994 4.270 1600
+10.941 4.304 1600
+10.889 4.346 1600
+10.866 4.399 1600
+10.856 4.450 1600
+10.846 4.503 1600
+10.793 4.537 1600
+10.741 4.558 1600
+10.711 4.613 1600
+10.705 4.664 1600
+10.711 4.716 1600
+10.738 4.768 1600
+10.791 4.799 1600
+10.843 4.818 1600
+10.896 4.836 1600
+10.950 4.857 1600
+11.007 4.881 1600
+11.063 4.908 1600
+11.113 4.931 1600
+11.168 4.956 1600
+11.223 4.984 1600
+11.276 5.015 1600
+11.329 5.041 1600
+11.385 5.066 1600
+11.435 5.088 1600
+11.483 5.141 1600
+11.485 5.192 1600
+11.472 5.243 1600
+11.474 5.293 1600
+11.422 5.286 1600
+11.388 5.338 1600
+11.338 5.351 1600
+11.348 5.402 1600
+11.304 5.454 1600
+11.286 5.512 1600
+11.276 5.565 1600
+11.271 5.615 1600
+11.267 5.666 1600
+11.275 5.718 1600
+11.294 5.771 1600
+11.324 5.821 1600
+11.365 5.872 1600
+11.399 5.923 1600
+11.416 5.974 1600
+11.419 6.027 1600
+11.413 6.080 1600
+11.395 6.134 1600
+11.369 6.188 1600
+11.341 6.239 1600
+11.321 6.289 1600
+11.303 6.343 1600
+11.282 6.399 1600
+11.268 6.452 1600
+11.254 6.507 1600
+11.237 6.558 1600
+11.223 6.612 1600
+11.209 6.666 1600
+11.189 6.721 1600
+11.162 6.772 1600
+11.113 6.827 1600
+11.068 6.878 1600
+11.031 6.928 1600
+11.007 6.983 1600
+11.005 7.036 1600
+10.987 7.087 1600
+10.945 7.138 1600
+10.905 7.189 1600
+10.853 7.224 1600
+10.802 7.241 1600
+10.752 7.272 1600
+10.701 7.318 1600
+10.648 7.312 1600
+10.593 7.322 1600
+10.540 7.337 1600
+10.490 7.352 1600
+10.459 7.406 1600
+10.455 7.458 1600
+10.453 7.511 1600
+10.478 7.564 1600
+10.529 7.613 1600
+10.564 7.664 1600
+10.580 7.715 1600
+10.527 7.755 1600
+10.483 7.806 1600
+10.505 7.856 1600
+10.526 7.907 1600
+10.530 7.963 1600
+10.523 8.014 1600
+10.505 8.066 1600
+10.484 8.116 1600
+10.459 8.169 1600
+10.433 8.221 1600
+10.403 8.276 1600
+10.365 8.330 1600
+10.331 8.383 1600
+10.293 8.435 1600
+10.257 8.487 1600
+10.218 8.538 1600
+10.178 8.591 1600
+10.142 8.646 1600
+10.110 8.700 1600
+10.077 8.753 1600
+10.048 8.806 1600
+10.022 8.860 1600
+9.994 8.910 1600
+9.970 8.964 1600
+9.953 9.015 1600
+9.928 9.066 1600
+9.898 9.117 1600
+9.865 9.168 1600
+9.831 9.218 1600
+9.798 9.270 1600
+9.765 9.324 1600
+9.736 9.374 1600
+9.715 9.425 1600
+9.691 9.476 1600
+9.662 9.527 1600
+9.633 9.577 1600
+9.610 9.628 1600
+9.584 9.680 1600
+9.564 9.731 1600
+9.545 9.787 1600
+9.530 9.841 1600
+9.523 9.895 1600
+9.523 9.946 1600
+9.526 9.955 1600
+9.519 9.999 1600
+9.514 10.049 1600
+9.516 10.100 1600
+9.522 10.151 1600
+9.532 10.205 1600
+9.541 10.256 1600
+9.569 10.310 1600
+9.604 10.364 1600
+9.611 10.416 1600
+9.598 10.467 1600
+9.578 10.518 1600
+9.557 10.572 1600
+9.537 10.629 1600
+9.525 10.680 1600
+9.532 10.731 1600
+9.545 10.787 1600
+9.563 10.840 1600
+9.581 10.893 1600
+9.598 10.943 1600
+9.611 10.995 1600
+9.618 11.046 1600
+9.625 11.096 1600
+9.627 11.147 1600
+9.632 11.202 1600
+9.640 11.256 1600
+9.651 11.311 1600
+9.662 11.363 1600
+9.677 11.417 1600
+9.692 11.471 1600
+9.714 11.523 1600
+9.764 11.570 1600
+9.815 11.603 1600
+9.865 11.627 1600
+9.919 11.658 1600
+9.974 11.690 1600
+10.029 11.728 1600
+10.080 11.765 1600
+10.134 11.805 1600
+10.190 11.848 1600
+10.241 11.888 1600
+10.296 11.925 1600
+10.348 11.956 1600
+10.405 11.987 1600
+10.459 12.014 1600
+10.517 12.041 1600
+10.576 12.067 1600
+10.626 12.094 1600
+10.681 12.119 1600
+10.731 12.138 1600
+10.782 12.155 1600
+10.840 12.169 1600
+10.896 12.186 1600
+10.946 12.201 1600
+10.996 12.217 1600
+11.051 12.236 1600
+11.101 12.247 1600
+11.155 12.256 1600
+11.209 12.263 1600
+11.264 12.262 1600
+11.319 12.268 1600
+11.369 12.269 1600
+11.425 12.269 1600
+11.476 12.262 1600
+11.530 12.249 1600
+11.581 12.237 1600
+11.631 12.221 1600
+11.686 12.202 1600
+11.737 12.186 1600
+11.787 12.174 1600
+11.841 12.163 1600
+11.898 12.149 1600
+11.952 12.142 1600
+12.008 12.140 1600
+12.063 12.130 1600
+12.115 12.124 1600
+12.172 12.121 1600
+12.190 12.114 1600
+12.223 12.080 1600
+12.274 12.050 1600
+12.311 11.998 1600
+12.341 11.947 1600
+12.370 11.893 1600
+12.397 11.843 1600
+12.426 11.792 1600
+12.453 11.741 1600
+12.476 11.687 1600
+12.493 11.637 1600
+12.543 11.608 1600
+12.570 11.551 1600
+12.601 11.498 1600
+12.652 11.464 1600
+12.700 11.412 1600
+12.727 11.360 1600
+12.771 11.308 1600
+12.824 11.281 1600
+12.876 11.239 1600
+12.922 11.187 1600
+12.953 11.137 1600
+12.992 11.084 1600
+13.019 11.029 1600
+13.072 10.990 1600
+13.103 10.939 1600
+13.113 10.885 1600
+13.137 10.831 1600
+13.160 10.778 1600
+13.182 10.727 1600
+13.197 10.677 1600
+13.213 10.620 1600
+13.225 10.565 1600
+13.241 10.512 1600
+13.260 10.459 1600
+13.281 10.408 1600
+13.305 10.357 1600
+13.356 10.321 1600
+13.388 10.269 1600
+13.404 10.215 1600
+13.445 10.165 1600
+13.488 10.115 1600
+13.539 10.119 1600
+13.565 10.068 1600
+13.604 10.016 1600
+13.657 9.979 1600
+13.711 9.935 1600
+13.765 9.910 1600
+13.821 9.878 1600
+13.871 9.852 1600
+13.922 9.828 1600
+13.973 9.796 1600
+14.026 9.746 1600
+14.081 9.707 1600
+14.131 9.678 1600
+14.163 9.627 1600
+14.183 9.576 1600
+14.234 9.533 1600
+14.285 9.522 1600
+14.335 9.491 1600
+14.388 9.518 1600
+14.438 9.525 1600
+14.488 9.474 1600
+14.489 9.423 1600
+14.490 9.370 1600
+14.486 9.319 1600
+14.476 9.269 1600
+14.526 9.228 1600
+14.529 9.176 1600
+14.580 9.126 1600
+14.574 9.074 1600
+14.583 9.024 1600
+14.617 8.973 1600
+14.650 8.923 1600
+14.650 8.873 1600
+14.674 8.821 1600
+14.705 8.771 1600
+14.744 8.721 1600
+14.774 8.668 1600
+14.805 8.615 1600
+14.834 8.562 1600
+14.862 8.510 1600
+14.902 8.458 1600
+14.908 8.403 1600
+14.949 8.352 1600
+14.991 8.300 1600
+15.042 8.276 1600
+15.094 8.269 1600
+15.149 8.242 1600
+15.193 8.190 1600
+15.211 8.135 1600
+15.263 8.104 1600
+15.315 8.090 1600
+15.365 8.087 1600
+15.415 8.104 1600
+15.465 8.096 1600
+15.518 8.049 1600
+15.560 7.996 1600
+15.615 7.942 1600
+15.651 7.887 1600
+15.676 7.833 1600
+15.710 7.783 1600
+15.747 7.733 1600
+15.797 7.683 1600
+15.849 7.658 1600
+15.899 7.643 1600
+15.924 7.592 1600
+15.953 7.539 1600
+15.989 7.487 1600
+16.009 7.436 1600
+16.016 7.383 1600
+16.027 7.330 1600
+16.052 7.275 1600
+16.076 7.221 1600
+16.089 7.171 1600
+16.097 7.118 1600
+16.100 7.064 1600
+16.106 7.012 1600
+16.114 6.959 1600
+16.134 6.903 1600
+16.157 6.850 1600
+16.173 6.796 1600
+16.187 6.745 1600
+16.202 6.688 1600
+16.224 6.634 1600
+16.254 6.578 1600
+16.287 6.520 1600
+16.318 6.470 1600
+16.368 6.416 1600
+16.409 6.360 1600
+16.443 6.309 1600
+16.482 6.256 1600
+16.537 6.209 1600
+16.589 6.172 1600
+16.643 6.136 1600
+16.694 6.088 1600
+16.748 6.054 1600
+16.803 6.027 1600
+16.859 5.984 1600
+16.915 5.932 1600
+16.967 5.878 1600
+17.006 5.828 1600
+17.043 5.775 1600
+17.069 5.724 1600
+17.102 5.669 1600
+17.128 5.617 1600
+17.172 5.565 1600
+17.183 5.513 1600
+17.183 5.460 1600
+17.190 5.410 1600
+17.221 5.357 1600
+17.275 5.312 1600
+17.314 5.259 1600
+17.313 5.205 1600
+17.318 5.151 1600
+17.336 5.101 1600
+17.385 5.050 1600
+17.435 5.007 1600
+12.020 3.307 1625
+12.020 3.309 1625
+11.968 3.330 1625
+11.914 3.357 1625
+11.863 3.382 1625
+11.811 3.410 1625
+11.758 3.437 1625
+11.705 3.466 1625
+11.654 3.498 1625
+11.603 3.540 1625
+11.551 3.580 1625
+11.499 3.619 1625
+11.448 3.659 1625
+11.399 3.711 1625
+11.358 3.765 1625
+11.317 3.818 1625
+11.267 3.868 1625
+11.216 3.906 1625
+11.164 3.933 1625
+11.114 3.957 1625
+11.063 3.976 1625
+11.009 3.996 1625
+10.956 4.021 1625
+10.903 4.047 1625
+10.853 4.076 1625
+10.802 4.100 1625
+10.750 4.134 1625
+10.699 4.166 1625
+10.648 4.207 1625
+10.597 4.256 1625
+10.555 4.306 1625
+10.516 4.358 1625
+10.480 4.411 1625
+10.450 4.461 1625
+10.432 4.514 1625
+10.420 4.565 1625
+10.409 4.619 1625
+10.402 4.673 1625
+10.403 4.725 1625
+10.403 4.776 1625
+10.406 4.828 1625
+10.411 4.878 1625
+10.420 4.929 1625
+10.456 4.980 1625
+10.506 5.023 1625
+10.556 5.040 1625
+10.607 5.059 1625
+10.657 5.073 1625
+10.711 5.090 1625
+10.699 5.140 1625
+10.721 5.194 1625
+10.771 5.229 1625
+10.824 5.266 1625
+10.874 5.291 1625
+10.927 5.325 1625
+10.975 5.375 1625
+10.993 5.427 1625
+11.005 5.477 1625
+11.023 5.528 1625
+11.042 5.579 1625
+11.056 5.632 1625
+11.070 5.686 1625
+11.088 5.739 1625
+11.115 5.793 1625
+11.151 5.845 1625
+11.183 5.896 1625
+11.202 5.947 1625
+11.215 5.997 1625
+11.214 6.048 1625
+11.203 6.100 1625
+11.167 6.152 1625
+11.136 6.204 1625
+11.114 6.256 1625
+11.096 6.306 1625
+11.053 6.359 1625
+11.035 6.413 1625
+11.035 6.467 1625
+11.009 6.520 1625
+10.968 6.570 1625
+10.934 6.624 1625
+10.886 6.675 1625
+10.841 6.726 1625
+10.798 6.779 1625
+10.762 6.833 1625
+10.743 6.886 1625
+10.736 6.940 1625
+10.713 6.991 1625
+10.666 7.043 1625
+10.616 7.080 1625
+10.566 7.108 1625
+10.511 7.143 1625
+10.457 7.182 1625
+10.404 7.222 1625
+10.355 7.274 1625
+10.346 7.325 1625
+10.350 7.381 1625
+10.352 7.432 1625
+10.344 7.483 1625
+10.334 7.537 1625
+10.345 7.588 1625
+10.377 7.640 1625
+10.402 7.691 1625
+10.350 7.736 1625
+10.312 7.787 1625
+10.339 7.839 1625
+10.384 7.893 1625
+10.417 7.943 1625
+10.419 7.999 1625
+10.405 8.050 1625
+10.385 8.107 1625
+10.357 8.158 1625
+10.325 8.212 1625
+10.289 8.263 1625
+10.242 8.314 1625
+10.205 8.369 1625
+10.175 8.420 1625
+10.141 8.476 1625
+10.094 8.529 1625
+10.042 8.573 1625
+9.995 8.626 1625
+9.960 8.679 1625
+9.926 8.731 1625
+9.886 8.787 1625
+9.862 8.838 1625
+9.850 8.888 1625
+9.833 8.939 1625
+9.812 8.992 1625
+9.784 9.043 1625
+9.743 9.095 1625
+9.700 9.148 1625
+9.659 9.202 1625
+9.630 9.254 1625
+9.614 9.304 1625
+9.587 9.357 1625
+9.562 9.409 1625
+9.538 9.460 1625
+9.514 9.510 1625
+9.481 9.563 1625
+9.446 9.613 1625
+9.420 9.664 1625
+9.403 9.718 1625
+9.385 9.772 1625
+9.364 9.824 1625
+9.337 9.876 1625
+9.308 9.926 1625
+9.283 9.977 1625
+9.248 10.028 1625
+9.248 10.027 1625
+9.224 10.082 1625
+9.215 10.134 1625
+9.232 10.184 1625
+9.252 10.234 1625
+9.272 10.285 1625
+9.297 10.310 1625
+9.312 10.341 1625
+9.343 10.392 1625
+9.362 10.443 1625
+9.359 10.496 1625
+9.338 10.548 1625
+9.319 10.600 1625
+9.293 10.653 1625
+9.267 10.704 1625
+9.229 10.757 1625
+9.201 10.787 1625
+9.195 10.808 1625
+9.169 10.859 1625
+9.156 10.909 1625
+9.150 10.961 1625
+9.153 11.014 1625
+9.168 11.064 1625
+9.190 11.119 1625
+9.200 11.143 1625
+9.202 11.169 1625
+9.231 11.222 1625
+9.243 11.274 1625
+9.223 11.325 1625
+9.221 11.368 1625
+9.219 11.375 1625
+9.208 11.428 1625
+9.198 11.480 1625
+9.200 11.530 1625
+9.203 11.581 1625
+9.212 11.634 1625
+9.227 11.684 1625
+9.241 11.735 1625
+9.252 11.785 1625
+9.277 11.836 1625
+9.316 11.893 1625
+9.349 11.948 1625
+9.358 12.000 1625
+9.366 12.053 1625
+9.371 12.106 1625
+9.384 12.158 1625
+9.404 12.210 1625
+9.437 12.262 1625
+9.485 12.316 1625
+9.531 12.368 1625
+9.576 12.420 1625
+9.628 12.476 1625
+9.678 12.516 1625
+9.735 12.562 1625
+9.787 12.590 1625
+9.852 12.616 1625
+9.905 12.636 1625
+9.956 12.655 1625
+10.007 12.672 1625
+10.062 12.672 1625
+10.113 12.660 1625
+10.167 12.645 1625
+10.223 12.639 1625
+10.276 12.648 1625
+10.329 12.659 1625
+10.383 12.661 1625
+10.439 12.670 1625
+10.498 12.681 1625
+10.551 12.688 1625
+10.601 12.699 1625
+10.658 12.710 1625
+10.708 12.720 1625
+10.765 12.728 1625
+10.824 12.729 1625
+10.879 12.725 1625
+10.933 12.720 1625
+10.984 12.714 1625
+11.037 12.707 1625
+11.093 12.699 1625
+11.143 12.704 1625
+11.197 12.715 1625
+11.247 12.728 1625
+11.297 12.733 1625
+11.349 12.732 1625
+11.403 12.717 1625
+11.456 12.700 1625
+11.506 12.673 1625
+11.562 12.651 1625
+11.616 12.633 1625
+11.666 12.613 1625
+11.720 12.600 1625
+11.771 12.593 1625
+11.821 12.580 1625
+11.872 12.573 1625
+11.926 12.574 1625
+11.976 12.593 1625
+12.029 12.592 1625
+12.083 12.581 1625
+12.135 12.567 1625
+12.191 12.550 1625
+12.244 12.534 1625
+12.298 12.522 1625
+12.350 12.499 1625
+12.356 12.491 1625
+12.363 12.445 1625
+12.374 12.393 1625
+12.381 12.341 1625
+12.422 12.289 1625
+12.422 12.238 1625
+12.428 12.188 1625
+12.479 12.212 1625
+12.500 12.160 1625
+12.522 12.110 1625
+12.555 12.056 1625
+12.606 12.012 1625
+12.657 11.972 1625
+12.708 11.933 1625
+12.759 11.908 1625
+12.810 11.860 1625
+12.839 11.805 1625
+12.831 11.753 1625
+12.842 11.700 1625
+12.893 11.661 1625
+12.931 11.607 1625
+12.975 11.556 1625
+13.027 11.520 1625
+13.081 11.489 1625
+13.133 11.471 1625
+13.176 11.417 1625
+13.186 11.365 1625
+13.195 11.311 1625
+13.249 11.265 1625
+13.301 11.218 1625
+13.323 11.167 1625
+13.371 11.115 1625
+13.383 11.064 1625
+13.384 11.009 1625
+13.420 10.959 1625
+13.459 10.908 1625
+13.458 10.858 1625
+13.441 10.805 1625
+13.423 10.753 1625
+13.405 10.703 1625
+13.397 10.652 1625
+13.395 10.599 1625
+13.403 10.543 1625
+13.425 10.493 1625
+13.475 10.450 1625
+13.526 10.436 1625
+13.578 10.473 1625
+13.624 10.525 1625
+13.677 10.577 1625
+13.727 10.585 1625
+13.780 10.567 1625
+13.832 10.543 1625
+13.882 10.529 1625
+13.933 10.504 1625
+13.953 10.453 1625
+13.942 10.395 1625
+13.921 10.341 1625
+13.875 10.290 1625
+13.832 10.237 1625
+13.820 10.187 1625
+13.864 10.137 1625
+13.919 10.114 1625
+13.974 10.103 1625
+14.025 10.089 1625
+14.076 10.081 1625
+14.127 10.053 1625
+14.165 10.003 1625
+14.221 9.984 1625
+14.271 9.986 1625
+14.322 9.984 1625
+14.372 9.932 1625
+14.384 9.880 1625
+14.392 9.827 1625
+14.391 9.774 1625
+14.404 9.721 1625
+14.456 9.691 1625
+14.509 9.702 1625
+14.560 9.652 1625
+14.612 9.633 1625
+14.634 9.579 1625
+14.685 9.567 1625
+14.692 9.514 1625
+14.679 9.462 1625
+14.660 9.411 1625
+14.648 9.358 1625
+14.698 9.316 1625
+14.705 9.265 1625
+14.707 9.211 1625
+14.704 9.158 1625
+14.746 9.104 1625
+14.754 9.051 1625
+14.773 8.996 1625
+14.789 8.943 1625
+14.820 8.890 1625
+14.839 8.840 1625
+14.864 8.786 1625
+14.888 8.734 1625
+14.913 8.680 1625
+14.932 8.628 1625
+14.977 8.578 1625
+15.025 8.525 1625
+15.053 8.474 1625
+15.104 8.443 1625
+15.155 8.420 1625
+15.207 8.407 1625
+15.260 8.389 1625
+15.284 8.337 1625
+15.316 8.285 1625
+15.367 8.264 1625
+15.423 8.244 1625
+15.476 8.236 1625
+15.530 8.242 1625
+15.583 8.223 1625
+15.619 8.172 1625
+15.658 8.121 1625
+15.676 8.069 1625
+15.711 8.019 1625
+15.763 7.994 1625
+15.794 7.941 1625
+15.820 7.889 1625
+15.859 7.836 1625
+15.914 7.785 1625
+15.965 7.740 1625
+16.016 7.706 1625
+16.055 7.654 1625
+16.089 7.601 1625
+16.115 7.550 1625
+16.135 7.495 1625
+16.153 7.440 1625
+16.169 7.388 1625
+16.183 7.330 1625
+16.193 7.276 1625
+16.201 7.221 1625
+16.210 7.171 1625
+16.222 7.115 1625
+16.232 7.063 1625
+16.241 7.009 1625
+16.250 6.956 1625
+16.265 6.902 1625
+16.282 6.848 1625
+16.300 6.793 1625
+16.315 6.743 1625
+16.332 6.688 1625
+16.352 6.634 1625
+16.379 6.580 1625
+16.413 6.527 1625
+16.463 6.472 1625
+16.519 6.422 1625
+16.569 6.380 1625
+16.627 6.338 1625
+16.680 6.306 1625
+16.732 6.266 1625
+16.784 6.223 1625
+16.837 6.176 1625
+16.889 6.148 1625
+16.941 6.126 1625
+16.994 6.094 1625
+17.028 6.043 1625
+17.048 5.989 1625
+17.099 5.940 1625
+17.119 5.889 1625
+17.171 5.846 1625
+17.196 5.796 1625
+17.196 5.742 1625
+17.218 5.690 1625
+17.270 5.653 1625
+17.294 5.602 1625
+17.290 5.551 1625
+17.304 5.496 1625
+17.324 5.445 1625
+17.376 5.418 1625
+17.413 5.367 1625
+17.421 5.317 1625
+17.434 5.263 1625
+17.443 5.210 1625
+11.690 3.315 1650
+11.690 3.315 1650
+11.652 3.367 1650
+11.598 3.418 1650
+11.548 3.457 1650
+11.498 3.498 1650
+11.446 3.535 1650
+11.395 3.574 1650
+11.345 3.613 1650
+11.294 3.659 1650
+11.289 3.665 1650
+11.244 3.700 1650
+11.194 3.736 1650
+11.142 3.739 1650
+11.089 3.731 1650
+11.036 3.721 1650
+10.986 3.716 1650
+10.936 3.712 1650
+10.882 3.720 1650
+10.832 3.746 1650
+10.781 3.783 1650
+10.728 3.833 1650
+10.675 3.880 1650
+10.623 3.927 1650
+10.576 3.978 1650
+10.526 4.030 1650
+10.474 4.085 1650
+10.424 4.138 1650
+10.381 4.190 1650
+10.349 4.240 1650
+10.317 4.295 1650
+10.284 4.347 1650
+10.255 4.397 1650
+10.223 4.450 1650
+10.190 4.503 1650
+10.165 4.554 1650
+10.148 4.606 1650
+10.135 4.658 1650
+10.122 4.709 1650
+10.115 4.765 1650
+10.136 4.818 1650
+10.154 4.839 1650
+10.158 4.870 1650
+10.177 4.926 1650
+10.204 4.977 1650
+10.225 5.030 1650
+10.239 5.081 1650
+10.243 5.136 1650
+10.270 5.188 1650
+10.322 5.237 1650
+10.353 5.291 1650
+10.391 5.343 1650
+10.435 5.398 1650
+10.480 5.451 1650
+10.534 5.503 1650
+10.588 5.544 1650
+10.644 5.576 1650
+10.699 5.608 1650
+10.754 5.634 1650
+10.804 5.667 1650
+10.854 5.699 1650
+10.907 5.738 1650
+10.959 5.776 1650
+11.009 5.832 1650
+11.034 5.886 1650
+11.040 5.937 1650
+11.029 5.990 1650
+11.000 6.043 1650
+10.955 6.095 1650
+10.926 6.145 1650
+10.915 6.198 1650
+10.919 6.251 1650
+10.905 6.303 1650
+10.862 6.356 1650
+10.836 6.410 1650
+10.813 6.462 1650
+10.780 6.514 1650
+10.743 6.564 1650
+10.705 6.618 1650
+10.660 6.672 1650
+10.617 6.724 1650
+10.564 6.778 1650
+10.513 6.820 1650
+10.464 6.872 1650
+10.422 6.924 1650
+10.384 6.979 1650
+10.351 7.035 1650
+10.317 7.090 1650
+10.276 7.142 1650
+10.225 7.184 1650
+10.195 7.236 1650
+10.174 7.291 1650
+10.141 7.344 1650
+10.119 7.397 1650
+10.110 7.451 1650
+10.107 7.502 1650
+10.114 7.556 1650
+10.155 7.608 1650
+10.147 7.659 1650
+10.178 7.712 1650
+10.178 7.764 1650
+10.151 7.814 1650
+10.163 7.867 1650
+10.205 7.919 1650
+10.235 7.969 1650
+10.286 7.999 1650
+10.299 8.051 1650
+10.272 8.101 1650
+10.218 8.116 1650
+10.165 8.127 1650
+10.144 8.180 1650
+10.130 8.230 1650
+10.088 8.281 1650
+10.070 8.331 1650
+10.049 8.384 1650
+10.014 8.435 1650
+9.962 8.489 1650
+9.917 8.541 1650
+9.878 8.592 1650
+9.838 8.643 1650
+9.800 8.694 1650
+9.751 8.746 1650
+9.713 8.799 1650
+9.702 8.850 1650
+9.698 8.901 1650
+9.681 8.953 1650
+9.630 9.000 1650
+9.579 9.037 1650
+9.526 9.067 1650
+9.483 9.117 1650
+9.466 9.171 1650
+9.460 9.224 1650
+9.450 9.274 1650
+9.432 9.324 1650
+9.400 9.374 1650
+9.372 9.427 1650
+9.353 9.480 1650
+9.333 9.530 1650
+9.315 9.581 1650
+9.292 9.633 1650
+9.264 9.683 1650
+9.230 9.734 1650
+9.191 9.785 1650
+9.158 9.838 1650
+9.123 9.889 1650
+9.082 9.941 1650
+9.044 9.993 1650
+9.017 10.044 1650
+8.999 10.095 1650
+8.996 10.145 1650
+9.006 10.198 1650
+9.017 10.248 1650
+9.034 10.298 1650
+9.055 10.348 1650
+9.082 10.399 1650
+9.104 10.449 1650
+9.122 10.499 1650
+9.130 10.551 1650
+9.127 10.603 1650
+9.096 10.654 1650
+9.044 10.694 1650
+9.001 10.731 1650
+8.990 10.735 1650
+8.940 10.779 1650
+8.920 10.832 1650
+8.903 10.885 1650
+8.895 10.936 1650
+8.895 10.987 1650
+8.894 10.998 1650
+8.900 11.040 1650
+8.913 11.090 1650
+8.922 11.143 1650
+8.927 11.194 1650
+8.926 11.245 1650
+8.934 11.295 1650
+8.967 11.346 1650
+8.966 11.398 1650
+8.929 11.448 1650
+8.919 11.464 1650
+8.914 11.500 1650
+8.903 11.551 1650
+8.890 11.603 1650
+8.872 11.655 1650
+8.863 11.708 1650
+8.862 11.761 1650
+8.862 11.814 1650
+8.873 11.867 1650
+8.905 11.919 1650
+8.943 11.972 1650
+8.967 12.022 1650
+8.992 12.074 1650
+9.013 12.127 1650
+9.034 12.181 1650
+9.031 12.204 1650
+9.044 12.232 1650
+9.043 12.282 1650
+9.050 12.336 1650
+9.069 12.388 1650
+9.091 12.439 1650
+9.117 12.490 1650
+9.122 12.498 1650
+9.133 12.550 1650
+9.135 12.604 1650
+9.170 12.654 1650
+9.215 12.705 1650
+9.244 12.755 1650
+9.278 12.807 1650
+9.317 12.861 1650
+9.366 12.916 1650
+9.417 12.970 1650
+9.460 13.020 1650
+9.506 13.072 1650
+9.557 13.107 1650
+9.608 13.135 1650
+9.658 13.162 1650
+9.708 13.186 1650
+9.767 13.208 1650
+9.824 13.223 1650
+9.878 13.236 1650
+9.932 13.245 1650
+9.988 13.260 1650
+10.040 13.272 1650
+10.093 13.287 1650
+10.147 13.297 1650
+10.202 13.308 1650
+10.252 13.315 1650
+10.302 13.312 1650
+10.353 13.269 1650
+10.392 13.218 1650
+10.442 13.202 1650
+10.492 13.205 1650
+10.547 13.210 1650
+10.599 13.210 1650
+10.651 13.191 1650
+10.703 13.167 1650
+10.753 13.157 1650
+10.806 13.161 1650
+10.858 13.164 1650
+10.910 13.171 1650
+10.965 13.177 1650
+11.016 13.183 1650
+11.067 13.184 1650
+11.122 13.180 1650
+11.176 13.168 1650
+11.230 13.146 1650
+11.284 13.134 1650
+11.337 13.142 1650
+11.391 13.162 1650
+11.441 13.163 1650
+11.491 13.144 1650
+11.545 13.124 1650
+11.596 13.102 1650
+11.647 13.082 1650
+11.698 13.060 1650
+11.751 13.034 1650
+11.801 13.014 1650
+11.854 12.998 1650
+11.906 12.982 1650
+11.959 12.965 1650
+12.013 12.945 1650
+12.066 12.938 1650
+12.119 12.925 1650
+12.170 12.910 1650
+12.221 12.898 1650
+12.274 12.882 1650
+12.324 12.867 1650
+12.377 12.851 1650
+12.431 12.835 1650
+12.482 12.817 1650
+12.525 12.775 1650
+12.503 12.755 1650
+12.543 12.703 1650
+12.553 12.648 1650
+12.565 12.597 1650
+12.616 12.546 1650
+12.640 12.492 1650
+12.684 12.439 1650
+12.722 12.384 1650
+12.762 12.334 1650
+12.802 12.282 1650
+12.847 12.232 1650
+12.893 12.182 1650
+12.945 12.162 1650
+12.996 12.141 1650
+13.039 12.087 1650
+13.090 12.051 1650
+13.141 12.037 1650
+13.191 12.003 1650
+13.236 11.950 1650
+13.264 11.900 1650
+13.300 11.847 1650
+13.345 11.796 1650
+13.371 11.745 1650
+13.404 11.693 1650
+13.435 11.639 1650
+13.465 11.586 1650
+13.497 11.533 1650
+13.527 11.483 1650
+13.552 11.429 1650
+13.576 11.378 1650
+13.601 11.325 1650
+13.616 11.270 1650
+13.620 11.220 1650
+13.627 11.167 1650
+13.637 11.111 1650
+13.648 11.055 1650
+13.672 11.003 1650
+13.724 10.966 1650
+13.774 10.941 1650
+13.825 10.900 1650
+13.860 10.847 1650
+13.915 10.795 1650
+13.965 10.780 1650
+14.017 10.773 1650
+14.070 10.764 1650
+14.126 10.750 1650
+14.177 10.710 1650
+14.194 10.657 1650
+14.205 10.603 1650
+14.203 10.548 1650
+14.197 10.493 1650
+14.208 10.442 1650
+14.238 10.391 1650
+14.274 10.336 1650
+14.324 10.302 1650
+14.377 10.289 1650
+14.422 10.237 1650
+14.439 10.187 1650
+14.465 10.136 1650
+14.516 10.101 1650
+14.569 10.063 1650
+14.608 10.009 1650
+14.615 9.957 1650
+14.665 9.933 1650
+14.694 9.879 1650
+14.735 9.827 1650
+14.755 9.773 1650
+14.805 9.739 1650
+14.855 9.727 1650
+14.905 9.722 1650
+14.954 9.672 1650
+14.952 9.617 1650
+14.969 9.566 1650
+15.008 9.514 1650
+15.061 9.486 1650
+15.114 9.457 1650
+15.156 9.406 1650
+15.179 9.352 1650
+15.198 9.301 1650
+15.193 9.248 1650
+15.165 9.197 1650
+15.126 9.142 1650
+15.081 9.090 1650
+15.046 9.036 1650
+15.019 8.984 1650
+15.070 8.948 1650
+15.122 8.966 1650
+15.175 9.005 1650
+15.228 9.047 1650
+15.280 9.068 1650
+15.331 9.088 1650
+15.382 9.097 1650
+15.404 9.098 1650
+15.434 9.094 1650
+15.484 9.046 1650
+15.515 8.994 1650
+15.539 8.943 1650
+15.555 8.890 1650
+15.558 8.878 1650
+15.540 8.834 1650
+15.522 8.780 1650
+15.503 8.722 1650
+15.485 8.672 1650
+15.476 8.620 1650
+15.466 8.569 1650
+15.459 8.518 1650
+15.466 8.467 1650
+15.516 8.432 1650
+15.567 8.413 1650
+15.618 8.398 1650
+15.670 8.372 1650
+15.701 8.318 1650
+15.732 8.264 1650
+15.765 8.211 1650
+15.806 8.160 1650
+15.852 8.109 1650
+15.903 8.059 1650
+15.939 8.004 1650
+15.975 7.948 1650
+16.008 7.896 1650
+16.054 7.842 1650
+16.108 7.791 1650
+16.162 7.741 1650
+16.204 7.687 1650
+16.234 7.634 1650
+16.257 7.581 1650
+16.264 7.531 1650
+16.271 7.480 1650
+16.282 7.430 1650
+16.294 7.378 1650
+16.307 7.323 1650
+16.328 7.268 1650
+16.349 7.216 1650
+16.367 7.162 1650
+16.382 7.108 1650
+16.392 7.056 1650
+16.402 7.004 1650
+16.417 6.952 1650
+16.432 6.900 1650
+16.446 6.849 1650
+16.459 6.794 1650
+16.482 6.738 1650
+16.503 6.686 1650
+16.532 6.633 1650
+16.575 6.581 1650
+16.626 6.543 1650
+16.677 6.513 1650
+16.727 6.459 1650
+16.775 6.405 1650
+16.828 6.372 1650
+16.880 6.344 1650
+16.931 6.319 1650
+16.984 6.295 1650
+17.035 6.262 1650
+17.089 6.215 1650
+17.127 6.165 1650
+17.150 6.112 1650
+17.173 6.060 1650
+17.223 6.011 1650
+17.251 5.961 1650
+17.304 5.933 1650
+17.332 5.882 1650
+17.330 5.828 1650
+17.334 5.776 1650
+17.385 5.732 1650
+11.402 3.305 1675
+11.400 3.305 1675
+11.350 3.342 1675
+11.299 3.380 1675
+11.248 3.405 1675
+11.197 3.413 1675
+11.143 3.427 1675
+11.093 3.442 1675
+11.043 3.456 1675
+10.993 3.469 1675
+10.939 3.485 1675
+10.889 3.503 1675
+10.835 3.525 1675
+10.781 3.561 1675
+10.727 3.605 1675
+10.674 3.654 1675
+10.623 3.701 1675
+10.573 3.748 1675
+10.523 3.793 1675
+10.476 3.840 1675
+10.471 3.840 1675
+10.418 3.885 1675
+10.368 3.927 1675
+10.314 3.960 1675
+10.264 4.011 1675
+10.228 4.063 1675
+10.190 4.115 1675
+10.145 4.166 1675
+10.103 4.221 1675
+10.070 4.275 1675
+10.044 4.326 1675
+10.022 4.377 1675
+10.000 4.427 1675
+9.965 4.481 1675
+9.927 4.535 1675
+9.883 4.588 1675
+9.856 4.642 1675
+9.835 4.694 1675
+9.817 4.745 1675
+9.798 4.796 1675
+9.782 4.847 1675
+9.771 4.897 1675
+9.768 4.950 1675
+9.773 4.990 1675
+9.771 5.001 1675
+9.769 5.055 1675
+9.787 5.108 1675
+9.822 5.161 1675
+9.872 5.205 1675
+9.924 5.248 1675
+9.979 5.299 1675
+10.033 5.353 1675
+10.088 5.398 1675
+10.144 5.436 1675
+10.197 5.472 1675
+10.249 5.504 1675
+10.304 5.540 1675
+10.356 5.571 1675
+10.415 5.619 1675
+10.466 5.660 1675
+10.522 5.699 1675
+10.576 5.736 1675
+10.626 5.766 1675
+10.677 5.795 1675
+10.727 5.822 1675
+10.779 5.854 1675
+10.829 5.888 1675
+10.835 5.940 1675
+10.807 5.993 1675
+10.752 6.040 1675
+10.698 6.094 1675
+10.666 6.145 1675
+10.643 6.202 1675
+10.624 6.262 1675
+10.618 6.317 1675
+10.621 6.369 1675
+10.624 6.429 1675
+10.612 6.486 1675
+10.590 6.540 1675
+10.552 6.593 1675
+10.504 6.646 1675
+10.453 6.687 1675
+10.399 6.725 1675
+10.346 6.775 1675
+10.305 6.828 1675
+10.265 6.878 1675
+10.228 6.928 1675
+10.190 6.982 1675
+10.154 7.038 1675
+10.115 7.094 1675
+10.073 7.148 1675
+10.034 7.202 1675
+10.003 7.257 1675
+9.974 7.310 1675
+9.945 7.362 1675
+9.920 7.417 1675
+9.893 7.473 1675
+9.867 7.526 1675
+9.876 7.584 1675
+9.894 7.637 1675
+9.928 7.687 1675
+9.966 7.739 1675
+9.948 7.789 1675
+9.921 7.841 1675
+9.913 7.894 1675
+9.922 7.946 1675
+9.950 7.999 1675
+9.990 8.049 1675
+10.012 8.105 1675
+9.990 8.155 1675
+9.962 8.210 1675
+9.941 8.261 1675
+9.916 8.316 1675
+9.885 8.368 1675
+9.834 8.419 1675
+9.784 8.470 1675
+9.747 8.521 1675
+9.708 8.571 1675
+9.654 8.618 1675
+9.620 8.672 1675
+9.601 8.726 1675
+9.588 8.776 1675
+9.563 8.829 1675
+9.512 8.867 1675
+9.460 8.907 1675
+9.407 8.934 1675
+9.377 8.946 1675
+9.355 8.982 1675
+9.305 9.012 1675
+9.270 9.062 1675
+9.261 9.115 1675
+9.261 9.145 1675
+9.261 9.165 1675
+9.249 9.215 1675
+9.223 9.267 1675
+9.216 9.318 1675
+9.229 9.369 1675
+9.236 9.422 1675
+9.230 9.472 1675
+9.211 9.524 1675
+9.184 9.576 1675
+9.156 9.627 1675
+9.117 9.678 1675
+9.067 9.731 1675
+9.016 9.784 1675
+8.972 9.836 1675
+8.932 9.886 1675
+8.895 9.938 1675
+8.861 9.989 1675
+8.828 10.027 1675
+8.818 10.043 1675
+8.780 10.095 1675
+8.775 10.149 1675
+8.778 10.200 1675
+8.776 10.250 1675
+8.766 10.302 1675
+8.762 10.352 1675
+8.755 10.406 1675
+8.760 10.458 1675
+8.768 10.512 1675
+8.775 10.556 1675
+8.774 10.562 1675
+8.757 10.612 1675
+8.734 10.664 1675
+8.713 10.714 1675
+8.711 10.720 1675
+8.694 10.764 1675
+8.675 10.817 1675
+8.658 10.871 1675
+8.641 10.925 1675
+8.638 10.976 1675
+8.637 11.028 1675
+8.643 11.081 1675
+8.647 11.134 1675
+8.648 11.187 1675
+8.643 11.238 1675
+8.623 11.289 1675
+8.592 11.345 1675
+8.570 11.399 1675
+8.554 11.452 1675
+8.557 11.506 1675
+8.566 11.558 1675
+8.573 11.608 1675
+8.574 11.658 1675
+8.562 11.712 1675
+8.551 11.768 1675
+8.543 11.819 1675
+8.539 11.871 1675
+8.550 11.923 1675
+8.578 11.974 1675
+8.630 12.017 1675
+8.683 12.059 1675
+8.728 12.109 1675
+8.760 12.161 1675
+8.798 12.212 1675
+8.819 12.263 1675
+8.818 12.263 1675
+8.842 12.315 1675
+8.880 12.365 1675
+8.875 12.416 1675
+8.868 12.467 1675
+8.869 12.520 1675
+8.873 12.572 1675
+8.874 12.624 1675
+8.872 12.675 1675
+8.878 12.725 1675
+8.896 12.775 1675
+8.905 12.793 1675
+8.919 12.828 1675
+8.942 12.879 1675
+8.982 12.933 1675
+9.016 12.983 1675
+9.048 13.036 1675
+9.076 13.089 1675
+9.112 13.139 1675
+9.144 13.189 1675
+9.180 13.241 1675
+9.225 13.291 1675
+9.275 13.323 1675
+9.325 13.348 1675
+9.375 13.375 1675
+9.427 13.402 1675
+9.481 13.434 1675
+9.534 13.470 1675
+9.590 13.512 1675
+9.640 13.553 1675
+9.694 13.589 1675
+9.744 13.611 1675
+9.796 13.627 1675
+9.846 13.639 1675
+9.900 13.660 1675
+9.953 13.683 1675
+10.009 13.706 1675
+10.066 13.730 1675
+10.117 13.741 1675
+10.170 13.754 1675
+10.222 13.762 1675
+10.275 13.767 1675
+10.326 13.760 1675
+10.379 13.752 1675
+10.433 13.750 1675
+10.483 13.748 1675
+10.537 13.748 1675
+10.588 13.737 1675
+10.641 13.717 1675
+10.693 13.703 1675
+10.746 13.691 1675
+10.800 13.690 1675
+10.852 13.692 1675
+10.908 13.691 1675
+10.963 13.692 1675
+11.017 13.688 1675
+11.068 13.684 1675
+11.120 13.683 1675
+11.171 13.681 1675
+11.222 13.678 1675
+11.277 13.673 1675
+11.329 13.654 1675
+11.383 13.631 1675
+11.435 13.622 1675
+11.489 13.610 1675
+11.543 13.589 1675
+11.598 13.565 1675
+11.654 13.544 1675
+11.711 13.518 1675
+11.761 13.489 1675
+11.815 13.466 1675
+11.872 13.439 1675
+11.925 13.415 1675
+11.976 13.395 1675
+12.027 13.376 1675
+12.080 13.355 1675
+12.134 13.329 1675
+12.187 13.285 1675
+12.240 13.248 1675
+12.296 13.217 1675
+12.353 13.184 1675
+12.408 13.164 1675
+12.459 13.151 1675
+12.511 13.129 1675
+12.562 13.110 1675
+12.612 13.093 1675
+12.665 13.074 1675
+12.715 13.057 1675
+12.766 13.039 1675
+12.787 13.010 1675
+12.820 12.988 1675
+12.871 12.943 1675
+12.894 12.891 1675
+12.922 12.838 1675
+12.953 12.786 1675
+12.988 12.734 1675
+13.041 12.686 1675
+13.095 12.637 1675
+13.147 12.597 1675
+13.168 12.544 1675
+13.218 12.516 1675
+13.271 12.467 1675
+13.325 12.458 1675
+13.377 12.463 1675
+13.428 12.455 1675
+13.482 12.445 1675
+13.533 12.423 1675
+13.569 12.371 1675
+13.594 12.318 1675
+13.620 12.263 1675
+13.624 12.207 1675
+13.613 12.154 1675
+13.608 12.104 1675
+13.625 12.052 1675
+13.654 12.001 1675
+13.673 11.948 1675
+13.699 11.895 1675
+13.720 11.842 1675
+13.720 11.789 1675
+13.719 11.738 1675
+13.726 11.686 1675
+13.743 11.632 1675
+13.757 11.579 1675
+13.765 11.526 1675
+13.768 11.476 1675
+13.784 11.425 1675
+13.800 11.369 1675
+13.801 11.319 1675
+13.805 11.267 1675
+13.811 11.217 1675
+13.855 11.167 1675
+13.905 11.134 1675
+13.947 11.083 1675
+13.969 11.030 1675
+14.010 10.980 1675
+14.060 10.972 1675
+14.111 10.987 1675
+14.161 10.987 1675
+14.213 10.984 1675
+14.263 10.952 1675
+14.315 10.901 1675
+14.342 10.849 1675
+14.358 10.795 1675
+14.374 10.743 1675
+14.389 10.688 1675
+14.398 10.634 1675
+14.401 10.584 1675
+14.409 10.531 1675
+14.424 10.477 1675
+14.448 10.425 1675
+14.475 10.372 1675
+14.497 10.321 1675
+14.525 10.270 1675
+14.577 10.238 1675
+14.630 10.218 1675
+14.681 10.209 1675
+14.732 10.198 1675
+14.782 10.149 1675
+14.827 10.097 1675
+14.877 10.081 1675
+14.929 10.048 1675
+14.980 10.003 1675
+15.034 9.974 1675
+15.087 9.939 1675
+15.132 9.888 1675
+15.157 9.836 1675
+15.180 9.784 1675
+15.211 9.732 1675
+15.246 9.680 1675
+15.292 9.630 1675
+15.339 9.580 1675
+15.379 9.529 1675
+15.432 9.506 1675
+15.483 9.498 1675
+15.534 9.479 1675
+15.585 9.431 1675
+15.559 9.391 1675
+15.569 9.379 1675
+15.613 9.326 1675
+15.634 9.269 1675
+15.665 9.217 1675
+15.697 9.165 1675
+15.715 9.140 1675
+15.720 9.114 1675
+15.720 9.061 1675
+15.704 9.008 1675
+15.697 8.952 1675
+15.689 8.898 1675
+15.673 8.845 1675
+15.668 8.794 1675
+15.667 8.741 1675
+15.671 8.688 1675
+15.679 8.637 1675
+15.694 8.584 1675
+15.713 8.526 1675
+15.744 8.471 1675
+15.784 8.417 1675
+15.828 8.364 1675
+15.878 8.315 1675
+15.920 8.264 1675
+15.958 8.210 1675
+15.982 8.160 1675
+16.005 8.110 1675
+16.028 8.059 1675
+16.066 8.009 1675
+16.120 7.982 1675
+16.171 7.950 1675
+16.215 7.898 1675
+16.255 7.843 1675
+16.288 7.788 1675
+16.311 7.734 1675
+16.329 7.680 1675
+16.344 7.626 1675
+16.374 7.574 1675
+16.398 7.521 1675
+16.405 7.466 1675
+16.408 7.413 1675
+16.425 7.358 1675
+16.444 7.300 1675
+16.459 7.248 1675
+16.471 7.197 1675
+16.485 7.145 1675
+16.516 7.095 1675
+16.546 7.044 1675
+16.553 6.990 1675
+16.563 6.934 1675
+16.582 6.882 1675
+16.596 6.832 1675
+16.613 6.781 1675
+16.641 6.726 1675
+16.690 6.674 1675
+16.743 6.628 1675
+16.797 6.578 1675
+16.838 6.524 1675
+16.891 6.486 1675
+16.945 6.477 1675
+17.000 6.458 1675
+17.053 6.430 1675
+17.104 6.392 1675
+17.143 6.340 1675
+17.186 6.288 1675
+17.215 6.236 1675
+17.267 6.185 1675
+17.315 6.134 1675
+17.323 6.083 1675
+17.362 6.033 1675
+17.415 6.008 1675
+11.074 3.289 1700
+11.073 3.289 1700
+11.023 3.312 1700
+10.969 3.329 1700
+10.916 3.337 1700
+10.865 3.360 1700
+10.813 3.383 1700
+10.760 3.409 1700
+10.710 3.437 1700
+10.660 3.471 1700
+10.606 3.516 1700
+10.557 3.570 1700
+10.513 3.624 1700
+10.463 3.673 1700
+10.413 3.712 1700
+10.359 3.746 1700
+10.309 3.781 1700
+10.258 3.820 1700
+10.207 3.866 1700
+10.163 3.917 1700
+10.115 3.969 1700
+10.063 4.015 1700
+10.057 4.021 1700
+10.010 4.051 1700
+9.959 4.104 1700
+9.914 4.156 1700
+9.871 4.207 1700
+9.826 4.261 1700
+9.795 4.312 1700
+9.764 4.365 1700
+9.729 4.418 1700
+9.697 4.473 1700
+9.674 4.526 1700
+9.647 4.580 1700
+9.623 4.633 1700
+9.605 4.687 1700
+9.591 4.738 1700
+9.580 4.789 1700
+9.573 4.842 1700
+9.570 4.892 1700
+9.571 4.943 1700
+9.571 4.945 1700
+9.570 4.995 1700
+9.600 5.045 1700
+9.652 5.100 1700
+9.692 5.155 1700
+9.726 5.208 1700
+9.772 5.263 1700
+9.822 5.316 1700
+9.873 5.355 1700
+9.924 5.398 1700
+9.975 5.440 1700
+10.028 5.491 1700
+10.079 5.539 1700
+10.134 5.587 1700
+10.186 5.627 1700
+10.238 5.661 1700
+10.295 5.701 1700
+10.350 5.745 1700
+10.400 5.789 1700
+10.450 5.832 1700
+10.505 5.873 1700
+10.556 5.908 1700
+10.596 5.959 1700
+10.584 6.010 1700
+10.553 6.061 1700
+10.517 6.115 1700
+10.491 6.171 1700
+10.484 6.224 1700
+10.470 6.277 1700
+10.451 6.329 1700
+10.427 6.386 1700
+10.396 6.440 1700
+10.364 6.490 1700
+10.332 6.541 1700
+10.299 6.597 1700
+10.257 6.650 1700
+10.209 6.700 1700
+10.163 6.754 1700
+10.121 6.809 1700
+10.088 6.859 1700
+10.049 6.912 1700
+10.021 6.962 1700
+9.967 7.015 1700
+9.920 7.069 1700
+9.905 7.122 1700
+9.893 7.178 1700
+9.873 7.230 1700
+9.833 7.284 1700
+9.785 7.336 1700
+9.746 7.390 1700
+9.718 7.445 1700
+9.694 7.497 1700
+9.681 7.551 1700
+9.673 7.607 1700
+9.664 7.657 1700
+9.658 7.711 1700
+9.653 7.766 1700
+9.648 7.819 1700
+9.645 7.873 1700
+9.640 7.928 1700
+9.634 7.983 1700
+9.624 8.033 1700
+9.617 8.087 1700
+9.624 8.145 1700
+9.638 8.196 1700
+9.672 8.250 1700
+9.725 8.299 1700
+9.768 8.351 1700
+9.715 8.395 1700
+9.677 8.432 1700
+9.665 8.432 1700
+9.613 8.486 1700
+9.572 8.539 1700
+9.526 8.591 1700
+9.485 8.641 1700
+9.433 8.688 1700
+9.382 8.704 1700
+9.329 8.739 1700
+9.279 8.764 1700
+9.228 8.792 1700
+9.176 8.822 1700
+9.123 8.862 1700
+9.079 8.913 1700
+9.054 8.964 1700
+9.038 9.016 1700
+9.036 9.066 1700
+9.047 9.116 1700
+9.055 9.143 1700
+9.063 9.169 1700
+9.069 9.221 1700
+9.049 9.271 1700
+9.082 9.321 1700
+9.108 9.372 1700
+9.105 9.423 1700
+9.077 9.476 1700
+9.054 9.531 1700
+9.017 9.581 1700
+8.966 9.619 1700
+8.938 9.671 1700
+8.919 9.721 1700
+8.883 9.771 1700
+8.832 9.806 1700
+8.784 9.859 1700
+8.733 9.908 1700
+8.683 9.949 1700
+8.651 10.002 1700
+8.634 10.053 1700
+8.633 10.107 1700
+8.638 10.161 1700
+8.637 10.212 1700
+8.632 10.265 1700
+8.611 10.318 1700
+8.585 10.369 1700
+8.581 10.378 1700
+8.560 10.422 1700
+8.540 10.472 1700
+8.523 10.523 1700
+8.511 10.573 1700
+8.502 10.627 1700
+8.492 10.680 1700
+8.483 10.732 1700
+8.464 10.788 1700
+8.445 10.841 1700
+8.426 10.892 1700
+8.406 10.942 1700
+8.385 10.995 1700
+8.367 11.047 1700
+8.346 11.100 1700
+8.322 11.156 1700
+8.297 11.208 1700
+8.274 11.265 1700
+8.263 11.317 1700
+8.254 11.369 1700
+8.247 11.423 1700
+8.241 11.477 1700
+8.235 11.530 1700
+8.226 11.587 1700
+8.223 11.641 1700
+8.219 11.692 1700
+8.214 11.743 1700
+8.214 11.801 1700
+8.214 11.858 1700
+8.215 11.912 1700
+8.214 11.963 1700
+8.215 12.014 1700
+8.228 12.064 1700
+8.278 12.100 1700
+8.330 12.123 1700
+8.381 12.130 1700
+8.432 12.131 1700
+8.484 12.138 1700
+8.511 12.149 1700
+8.536 12.169 1700
+8.590 12.201 1700
+8.637 12.254 1700
+8.665 12.307 1700
+8.655 12.358 1700
+8.624 12.409 1700
+8.617 12.460 1700
+8.615 12.458 1700
+8.592 12.512 1700
+8.573 12.564 1700
+8.559 12.617 1700
+8.554 12.673 1700
+8.554 12.724 1700
+8.563 12.779 1700
+8.588 12.831 1700
+8.625 12.886 1700
+8.664 12.940 1700
+8.700 12.994 1700
+8.720 13.046 1700
+8.725 13.097 1700
+8.747 13.148 1700
+8.798 13.200 1700
+8.812 13.251 1700
+8.827 13.301 1700
+8.845 13.353 1700
+8.865 13.408 1700
+8.887 13.463 1700
+8.903 13.516 1700
+8.936 13.567 1700
+8.981 13.617 1700
+9.033 13.658 1700
+9.083 13.691 1700
+9.134 13.727 1700
+9.184 13.764 1700
+9.234 13.795 1700
+9.285 13.827 1700
+9.336 13.858 1700
+9.386 13.884 1700
+9.438 13.903 1700
+9.490 13.920 1700
+9.546 13.939 1700
+9.599 13.956 1700
+9.650 13.969 1700
+9.700 13.984 1700
+9.752 14.001 1700
+9.803 14.015 1700
+9.854 14.028 1700
+9.905 14.053 1700
+9.963 14.088 1700
+10.017 14.117 1700
+10.071 14.154 1700
+10.123 14.195 1700
+10.174 14.236 1700
+10.227 14.271 1700
+10.281 14.295 1700
+10.334 14.302 1700
+10.386 14.304 1700
+10.439 14.296 1700
+10.491 14.282 1700
+10.546 14.279 1700
+10.600 14.282 1700
+10.654 14.289 1700
+10.705 14.296 1700
+10.760 14.289 1700
+10.815 14.276 1700
+10.867 14.260 1700
+10.919 14.243 1700
+10.974 14.236 1700
+11.030 14.225 1700
+11.088 14.218 1700
+11.144 14.217 1700
+11.195 14.221 1700
+11.250 14.218 1700
+11.302 14.207 1700
+11.356 14.190 1700
+11.411 14.163 1700
+11.463 14.128 1700
+11.517 14.097 1700
+11.570 14.067 1700
+11.621 14.039 1700
+11.675 14.007 1700
+11.726 13.984 1700
+11.778 13.968 1700
+11.828 13.960 1700
+11.879 13.953 1700
+11.931 13.942 1700
+11.981 13.922 1700
+12.032 13.871 1700
+12.082 13.835 1700
+12.135 13.796 1700
+12.188 13.754 1700
+12.242 13.713 1700
+12.298 13.681 1700
+12.351 13.647 1700
+12.405 13.611 1700
+12.459 13.576 1700
+12.510 13.539 1700
+12.564 13.495 1700
+12.617 13.455 1700
+12.673 13.426 1700
+12.727 13.413 1700
+12.781 13.406 1700
+12.832 13.393 1700
+12.882 13.372 1700
+12.933 13.353 1700
+12.983 13.331 1700
+13.033 13.302 1700
+13.034 13.298 1700
+13.084 13.269 1700
+13.136 13.225 1700
+13.165 13.171 1700
+13.193 13.120 1700
+13.216 13.068 1700
+13.235 13.015 1700
+13.249 12.963 1700
+13.262 12.910 1700
+13.278 12.860 1700
+13.314 12.805 1700
+13.368 12.780 1700
+13.418 12.745 1700
+13.473 12.712 1700
+13.530 12.674 1700
+13.583 12.636 1700
+13.634 12.587 1700
+13.687 12.538 1700
+13.737 12.489 1700
+13.786 12.438 1700
+13.818 12.383 1700
+13.822 12.328 1700
+13.821 12.274 1700
+13.822 12.223 1700
+13.822 12.169 1700
+13.856 12.119 1700
+13.894 12.067 1700
+13.902 12.014 1700
+13.907 11.958 1700
+13.916 11.902 1700
+13.921 11.847 1700
+13.921 11.796 1700
+13.920 11.739 1700
+13.920 11.688 1700
+13.921 11.638 1700
+13.935 11.585 1700
+13.987 11.547 1700
+14.039 11.543 1700
+14.093 11.510 1700
+14.144 11.457 1700
+14.191 11.404 1700
+14.228 11.351 1700
+14.261 11.299 1700
+14.300 11.249 1700
+14.352 11.227 1700
+14.404 11.207 1700
+14.455 11.160 1700
+14.478 11.110 1700
+14.486 11.057 1700
+14.497 11.003 1700
+14.505 10.949 1700
+14.505 10.899 1700
+14.509 10.843 1700
+14.519 10.792 1700
+14.531 10.740 1700
+14.542 10.684 1700
+14.550 10.629 1700
+14.560 10.576 1700
+14.576 10.522 1700
+14.594 10.472 1700
+14.612 10.420 1700
+14.647 10.369 1700
+14.699 10.328 1700
+14.750 10.318 1700
+14.803 10.331 1700
+14.854 10.335 1700
+14.905 10.286 1700
+14.956 10.283 1700
+15.007 10.261 1700
+15.044 10.208 1700
+15.095 10.165 1700
+15.149 10.126 1700
+15.200 10.094 1700
+15.250 10.071 1700
+15.303 10.047 1700
+15.354 10.019 1700
+15.394 9.967 1700
+15.415 9.916 1700
+15.445 9.865 1700
+15.497 9.835 1700
+15.549 9.834 1700
+15.603 9.818 1700
+15.652 9.767 1700
+15.673 9.717 1700
+15.699 9.667 1700
+15.743 9.615 1700
+15.794 9.573 1700
+15.798 9.559 1700
+15.818 9.519 1700
+15.835 9.464 1700
+15.849 9.412 1700
+15.865 9.358 1700
+15.856 9.323 1700
+15.862 9.302 1700
+15.867 9.250 1700
+15.868 9.198 1700
+15.865 9.144 1700
+15.859 9.093 1700
+15.849 9.043 1700
+15.835 8.992 1700
+15.824 8.941 1700
+15.813 8.888 1700
+15.811 8.833 1700
+15.812 8.779 1700
+15.814 8.724 1700
+15.819 8.672 1700
+15.828 8.615 1700
+15.845 8.564 1700
+15.868 8.513 1700
+15.909 8.462 1700
+15.953 8.410 1700
+16.000 8.358 1700
+16.049 8.308 1700
+16.088 8.257 1700
+16.108 8.203 1700
+16.117 8.152 1700
+16.148 8.100 1700
+16.203 8.063 1700
+16.254 8.024 1700
+16.305 7.981 1700
+16.354 7.930 1700
+16.387 7.878 1700
+16.409 7.825 1700
+16.424 7.771 1700
+16.443 7.713 1700
+16.470 7.659 1700
+16.513 7.608 1700
+16.544 7.557 1700
+16.557 7.502 1700
+16.560 7.449 1700
+16.567 7.396 1700
+16.586 7.343 1700
+16.617 7.290 1700
+16.654 7.236 1700
+16.672 7.185 1700
+16.679 7.133 1700
+16.692 7.078 1700
+16.713 7.026 1700
+16.747 6.975 1700
+16.800 6.930 1700
+16.855 6.890 1700
+16.898 6.838 1700
+16.902 6.787 1700
+16.918 6.735 1700
+16.955 6.681 1700
+17.007 6.660 1700
+17.062 6.646 1700
+17.112 6.598 1700
+17.167 6.577 1700
+17.183 6.525 1700
+17.220 6.472 1700
+17.270 6.435 1700
+17.316 6.380 1700
+17.335 6.324 1700
+17.357 6.271 1700
+17.387 6.217 1700
+17.422 6.167 1700
+10.646 3.299 1725
+10.645 3.299 1725
+10.601 3.350 1725
+10.550 3.403 1725
+10.500 3.456 1725
+10.445 3.505 1725
+10.399 3.560 1725
+10.349 3.614 1725
+10.297 3.658 1725
+10.245 3.685 1725
+10.195 3.709 1725
+10.144 3.738 1725
+10.090 3.776 1725
+10.037 3.815 1725
+9.987 3.854 1725
+9.933 3.889 1725
+9.883 3.926 1725
+9.831 3.980 1725
+9.780 4.033 1725
+9.738 4.085 1725
+9.691 4.136 1725
+9.650 4.189 1725
+9.610 4.240 1725
+9.573 4.295 1725
+9.540 4.350 1725
+9.509 4.405 1725
+9.484 4.460 1725
+9.460 4.513 1725
+9.439 4.565 1725
+9.427 4.620 1725
+9.419 4.672 1725
+9.415 4.725 1725
+9.411 4.779 1725
+9.413 4.833 1725
+9.422 4.888 1725
+9.431 4.940 1725
+9.439 4.994 1725
+9.445 5.045 1725
+9.452 5.096 1725
+9.459 5.149 1725
+9.462 5.202 1725
+9.412 5.218 1725
+9.357 5.209 1725
+9.305 5.177 1725
+9.255 5.137 1725
+9.212 5.083 1725
+9.162 5.031 1725
+9.108 4.993 1725
+9.056 4.949 1725
+9.006 4.915 1725
+8.961 4.862 1725
+8.931 4.809 1725
+8.910 4.753 1725
+8.901 4.701 1725
+8.890 4.646 1725
+8.882 4.595 1725
+8.888 4.541 1725
+8.903 4.488 1725
+8.920 4.436 1725
+8.949 4.382 1725
+8.989 4.331 1725
+9.028 4.278 1725
+9.063 4.224 1725
+9.098 4.169 1725
+9.117 4.116 1725
+9.120 4.062 1725
+9.108 4.011 1725
+9.086 3.957 1725
+9.060 3.904 1725
+9.027 3.850 1725
+8.999 3.799 1725
+8.977 3.747 1725
+8.955 3.694 1725
+8.941 3.640 1725
+8.929 3.590 1725
+10.429 3.325 1750
+10.428 3.325 1750
+10.392 3.377 1750
+10.359 3.430 1750
+10.304 3.481 1750
+10.248 3.524 1750
+10.191 3.558 1750
+10.135 3.598 1750
+10.083 3.630 1750
+10.033 3.657 1750
+9.983 3.692 1750
+9.933 3.725 1750
+9.881 3.756 1750
+9.826 3.796 1750
+9.775 3.840 1750
+9.729 3.890 1750
+9.678 3.943 1750
+9.638 3.994 1750
+9.599 4.048 1750
+9.565 4.100 1750
+9.524 4.152 1750
+9.484 4.204 1750
+9.444 4.257 1750
+9.410 4.309 1750
+9.379 4.359 1750
+9.352 4.413 1750
+9.333 4.464 1750
+9.321 4.518 1750
+9.305 4.571 1750
+9.302 4.623 1750
+9.299 4.674 1750
+9.293 4.728 1750
+9.288 4.781 1750
+9.284 4.834 1750
+9.283 4.888 1750
+9.286 4.941 1750
+9.284 4.995 1750
+9.234 4.977 1750
+9.182 4.926 1750
+9.143 4.873 1750
+9.110 4.822 1750
+9.076 4.768 1750
+9.054 4.718 1750
+9.037 4.665 1750
+9.027 4.609 1750
+9.026 4.555 1750
+9.036 4.503 1750
+9.062 4.451 1750
+9.104 4.397 1750
+9.142 4.347 1750
+9.174 4.292 1750
+9.202 4.239 1750
+9.227 4.187 1750
+9.244 4.131 1750
+9.255 4.075 1750
+9.263 4.024 1750
+9.267 3.971 1750
+9.262 3.916 1750
+9.238 3.859 1750
+9.212 3.808 1750
+9.180 3.754 1750
+9.133 3.700 1750
+9.103 3.649 1750
+9.081 3.595 1750
+9.068 3.544 1750
+9.055 3.486 1750
+9.044 3.434 1750
+9.038 3.382 1750
+9.036 3.326 1750
+10.210 3.332 1775
+10.210 3.332 1775
+10.208 3.386 1775
+10.183 3.438 1775
+10.130 3.464 1775
+10.079 3.490 1775
+10.026 3.520 1775
+9.975 3.547 1775
+9.924 3.573 1775
+9.873 3.605 1775
+9.820 3.651 1775
+9.771 3.704 1775
+9.720 3.743 1775
+9.672 3.797 1775
+9.641 3.848 1775
+9.607 3.901 1775
+9.566 3.952 1775
+9.516 3.994 1775
+9.465 4.018 1775
+9.415 3.982 1775
+9.391 3.931 1775
+9.377 3.879 1775
+9.365 3.822 1775
+9.350 3.766 1775
+9.323 3.715 1775
+9.292 3.662 1775
+9.261 3.601 1775
+9.238 3.546 1775
+9.219 3.494 1775
+9.205 3.440 1775
+9.189 3.386 1775
+9.175 3.333 1775
+9.984 3.344 1800
+9.983 3.344 1800
+9.938 3.396 1800
+9.886 3.435 1800
+9.835 3.457 1800
+9.782 3.490 1800
+9.731 3.526 1800
+9.683 3.581 1800
+9.639 3.633 1800
+9.596 3.684 1800
+9.552 3.735 1800
+9.502 3.722 1800
+9.457 3.667 1800
+9.423 3.614 1800
+9.388 3.563 1800
+9.353 3.510 1800
+9.336 3.456 1800
+9.311 3.402 1800
+9.303 3.351 1800
+9.794 3.326 1825
+9.794 3.326 1825
+9.741 3.352 1825
+9.691 3.392 1825
+9.643 3.446 1825
+9.605 3.498 1825
+9.553 3.535 1825
+9.510 3.483 1825
+9.467 3.428 1825
+9.452 3.373 1825
+8.779 3.834 1700
+8.778 3.834 1700
+8.795 3.888 1700
+8.820 3.939 1700
+8.842 3.993 1700
+8.849 4.049 1700
+8.849 4.103 1700
+8.848 4.157 1700
+8.828 4.210 1700
+8.786 4.261 1700
+8.738 4.312 1700
+8.702 4.364 1700
+8.690 4.416 1700
+8.699 4.470 1700
+8.691 4.524 1700
+8.671 4.581 1700
+8.673 4.639 1700
+8.686 4.693 1700
+8.707 4.749 1700
+8.729 4.805 1700
+8.758 4.860 1700
+8.795 4.912 1700
+8.845 4.964 1700
+8.899 5.010 1700
+8.949 5.055 1700
+9.001 5.090 1700
+9.053 5.125 1700
+9.109 5.176 1700
+9.164 5.228 1700
+9.216 5.265 1700
+9.270 5.305 1700
+9.323 5.340 1700
+9.377 5.367 1700
+9.428 5.393 1700
+9.481 5.423 1700
+9.534 5.459 1700
+9.527 5.510 1700
+9.491 5.561 1700
+9.439 5.605 1700
+9.388 5.658 1700
+9.368 5.709 1700
+9.355 5.765 1700
+9.339 5.818 1700
+9.325 5.869 1700
+9.309 5.923 1700
+9.295 5.975 1700
+9.279 6.031 1700
+9.268 6.087 1700
+9.256 6.144 1700
+9.251 6.198 1700
+9.241 6.251 1700
+9.228 6.302 1700
+9.214 6.353 1700
+9.201 6.405 1700
+9.185 6.463 1700
+9.176 6.514 1700
+9.165 6.567 1700
+9.151 6.618 1700
+9.124 6.673 1700
+9.101 6.724 1700
+9.071 6.778 1700
+9.041 6.833 1700
+9.005 6.888 1700
+8.962 6.941 1700
+8.915 6.994 1700
+8.865 7.048 1700
+8.813 7.095 1700
+8.759 7.130 1700
+8.706 7.161 1700
+8.650 7.185 1700
+8.600 7.209 1700
+8.550 7.226 1700
+8.498 7.239 1700
+8.447 7.254 1700
+8.979 5.211 1675
+8.813 5.170 1675
+8.866 5.210 1675
+8.919 5.228 1675
+8.970 5.248 1675
+9.021 5.281 1675
+9.074 5.323 1675
+9.116 5.373 1675
+9.141 5.430 1675
+9.161 5.480 1675
+9.183 5.530 1675
+9.204 5.583 1675
+9.214 5.635 1675
+9.238 5.690 1675
+9.242 5.741 1675
+9.223 5.794 1675
+9.194 5.850 1675
+9.175 5.902 1675
+9.153 5.954 1675
+9.141 6.006 1675
+9.141 6.061 1675
+9.137 6.112 1675
+9.130 6.162 1675
+9.122 6.218 1675
+9.112 6.268 1675
+9.100 6.318 1675
+9.086 6.369 1675
+9.071 6.420 1675
+9.054 6.472 1675
+9.035 6.523 1675
+9.010 6.574 1675
+8.986 6.624 1675
+8.954 6.678 1675
+8.929 6.731 1675
+8.894 6.782 1675
+8.849 6.833 1675
+8.795 6.887 1675
+8.745 6.917 1675
+8.218 7.470 1725
+8.217 7.470 1725
+8.270 7.439 1725
+8.321 7.414 1725
+8.372 7.404 1725
+8.422 7.388 1725
+8.473 7.369 1725
+8.526 7.359 1725
+8.583 7.346 1725
+8.640 7.326 1725
+8.691 7.305 1725
+8.744 7.283 1725
+8.799 7.261 1725
+8.850 7.241 1725
+8.903 7.212 1725
+8.955 7.162 1725
+9.000 7.109 1725
+9.049 7.057 1725
+9.086 7.001 1725
+9.116 6.946 1725
+9.147 6.895 1725
+9.178 6.842 1725
+9.211 6.791 1725
+9.242 6.736 1725
+9.271 6.686 1725
+9.296 6.634 1725
+9.319 6.583 1725
+9.344 6.528 1725
+9.365 6.474 1725
+9.382 6.418 1725
+9.397 6.359 1725
+9.411 6.309 1725
+9.429 6.255 1725
+9.443 6.205 1725
+9.450 6.154 1725
+9.457 6.102 1725
+9.460 6.048 1725
+9.462 5.994 1725
+9.470 5.936 1725
+9.480 5.880 1725
+9.486 5.829 1725
+9.514 5.779 1725
+9.566 5.734 1725
+9.613 5.683 1725
+9.640 5.628 1725
+9.665 5.574 1725
+9.690 5.523 1725
+9.711 5.472 1725
+9.762 5.466 1725
+9.818 5.485 1725
+9.874 5.514 1725
+9.928 5.547 1725
+9.984 5.585 1725
+10.035 5.627 1725
+10.082 5.680 1725
+10.134 5.734 1725
+10.186 5.787 1725
+10.239 5.840 1725
+10.292 5.885 1725
+10.344 5.914 1725
+10.396 5.954 1725
+10.397 6.008 1725
+10.366 6.061 1725
+10.349 6.111 1725
+10.343 6.162 1725
+10.344 6.217 1725
+10.335 6.268 1725
+10.322 6.323 1725
+10.304 6.373 1725
+10.272 6.424 1725
+10.237 6.479 1725
+10.195 6.534 1725
+10.149 6.587 1725
+10.096 6.641 1725
+10.055 6.692 1725
+10.020 6.744 1725
+9.987 6.800 1725
+9.957 6.850 1725
+9.919 6.905 1725
+9.865 6.957 1725
+9.813 7.009 1725
+9.771 7.062 1725
+9.740 7.118 1725
+9.710 7.170 1725
+9.683 7.225 1725
+9.659 7.277 1725
+9.627 7.329 1725
+9.596 7.385 1725
+9.572 7.439 1725
+9.552 7.492 1725
+9.525 7.547 1725
+9.503 7.599 1725
+9.486 7.652 1725
+9.467 7.707 1725
+9.453 7.758 1725
+9.439 7.812 1725
+9.428 7.867 1725
+9.426 7.923 1725
+9.425 7.974 1725
+9.426 8.030 1725
+9.429 8.082 1725
+9.430 8.134 1725
+9.427 8.171 1725
+9.424 8.185 1725
+9.403 8.239 1725
+9.375 8.291 1725
+9.323 8.339 1725
+9.274 8.390 1725
+9.228 8.444 1725
+9.194 8.495 1725
+9.150 8.545 1725
+9.100 8.577 1725
+9.049 8.613 1725
+8.996 8.651 1725
+8.950 8.705 1725
+8.948 8.704 1725
+8.900 8.751 1725
+8.873 8.803 1725
+8.852 8.856 1725
+8.847 8.909 1725
+8.860 8.964 1725
+8.879 9.015 1725
+8.895 9.066 1725
+8.892 9.116 1725
+8.887 9.167 1725
+8.888 9.218 1725
+8.900 9.270 1725
+8.924 9.321 1725
+8.938 9.372 1725
+8.942 9.422 1725
+8.934 9.473 1725
+8.893 9.526 1725
+8.841 9.553 1725
+8.804 9.608 1725
+8.803 9.659 1725
+8.752 9.694 1725
+8.708 9.745 1725
+8.658 9.787 1725
+8.607 9.825 1725
+8.557 9.869 1725
+8.516 9.908 1725
+8.503 9.914 1725
+8.460 9.965 1725
+8.452 10.016 1725
+8.458 10.067 1725
+8.471 10.119 1725
+8.478 10.144 1725
+8.481 10.169 1725
+8.491 10.224 1725
+8.492 10.274 1725
+8.478 10.324 1725
+8.472 10.331 1725
+8.427 10.362 1725
+8.392 10.417 1725
+8.359 10.467 1725
+8.337 10.519 1725
+8.318 10.570 1725
+8.300 10.624 1725
+8.278 10.675 1725
+8.254 10.725 1725
+8.231 10.777 1725
+8.195 10.831 1725
+8.158 10.883 1725
+8.122 10.938 1725
+8.091 10.989 1725
+8.067 11.039 1725
+8.047 11.089 1725
+8.033 11.140 1725
+8.022 11.196 1725
+8.008 11.250 1725
+7.991 11.303 1725
+7.982 11.358 1725
+7.974 11.409 1725
+7.966 11.460 1725
+7.955 11.515 1725
+7.942 11.567 1725
+7.929 11.618 1725
+7.917 11.672 1725
+7.912 11.727 1725
+7.909 11.780 1725
+7.912 11.836 1725
+7.913 11.887 1725
+7.920 11.941 1725
+7.933 11.992 1725
+7.954 12.046 1725
+7.983 12.097 1725
+8.021 12.149 1725
+8.061 12.201 1725
+8.109 12.253 1725
+8.161 12.298 1725
+8.190 12.317 1725
+8.211 12.336 1725
+8.261 12.349 1725
+8.318 12.334 1725
+8.369 12.323 1725
+8.419 12.328 1725
+8.430 12.378 1725
+8.424 12.429 1725
+8.415 12.482 1725
+8.399 12.534 1725
+8.388 12.587 1725
+8.378 12.638 1725
+8.373 12.688 1725
+8.367 12.720 1725
+8.353 12.739 1725
+8.331 12.789 1725
+8.337 12.844 1725
+8.357 12.900 1725
+8.376 12.955 1725
+8.388 13.008 1725
+8.404 13.062 1725
+8.420 13.113 1725
+8.436 13.164 1725
+8.453 13.217 1725
+8.469 13.267 1725
+8.484 13.317 1725
+8.496 13.370 1725
+8.506 13.420 1725
+8.517 13.477 1725
+8.530 13.529 1725
+8.548 13.585 1725
+8.565 13.637 1725
+8.591 13.693 1725
+8.612 13.745 1725
+8.627 13.799 1725
+8.646 13.854 1725
+8.666 13.905 1725
+8.692 13.961 1725
+8.721 14.016 1725
+8.748 14.067 1725
+8.793 14.121 1725
+8.845 14.162 1725
+8.899 14.184 1725
+8.952 14.196 1725
+9.002 14.210 1725
+9.056 14.234 1725
+9.107 14.262 1725
+9.157 14.296 1725
+9.209 14.310 1725
+9.261 14.311 1725
+9.319 14.303 1725
+9.375 14.297 1725
+9.429 14.297 1725
+9.483 14.304 1725
+9.534 14.307 1725
+9.592 14.315 1725
+9.646 14.328 1725
+9.698 14.339 1725
+9.750 14.348 1725
+9.802 14.374 1725
+9.852 14.402 1725
+9.907 14.424 1725
+9.960 14.448 1725
+10.012 14.471 1725
+10.064 14.500 1725
+10.115 14.530 1725
+10.168 14.553 1725
+10.221 14.579 1725
+10.271 14.596 1725
+10.325 14.612 1725
+10.375 14.629 1725
+10.426 14.640 1725
+10.476 14.626 1725
+10.526 14.604 1725
+10.577 14.574 1725
+10.627 14.552 1725
+10.677 14.545 1725
+10.728 14.543 1725
+10.779 14.567 1725
+10.826 14.617 1725
+10.878 14.640 1725
+10.934 14.651 1725
+10.989 14.658 1725
+11.043 14.664 1725
+11.097 14.668 1725
+11.151 14.666 1725
+11.203 14.663 1725
+11.257 14.661 1725
+11.315 14.657 1725
+11.367 14.651 1725
+11.419 14.646 1725
+11.472 14.633 1725
+11.525 14.617 1725
+11.577 14.598 1725
+11.631 14.569 1725
+11.685 14.539 1725
+11.737 14.516 1725
+11.791 14.498 1725
+11.845 14.475 1725
+11.899 14.448 1725
+11.953 14.417 1725
+12.006 14.381 1725
+12.062 14.345 1725
+12.116 14.314 1725
+12.170 14.269 1725
+12.228 14.232 1725
+12.278 14.202 1725
+12.311 14.151 1725
+12.363 14.099 1725
+12.419 14.065 1725
+12.473 14.025 1725
+12.524 13.988 1725
+12.577 13.951 1725
+12.633 13.918 1725
+12.685 13.878 1725
+12.737 13.842 1725
+12.787 13.803 1725
+12.839 13.764 1725
+12.889 13.734 1725
+12.940 13.704 1725
+12.993 13.674 1725
+13.047 13.648 1725
+13.097 13.630 1725
+13.149 13.612 1725
+13.200 13.591 1725
+13.250 13.571 1725
+13.301 13.526 1725
+13.346 13.475 1725
+13.381 13.422 1725
+13.418 13.372 1725
+13.465 13.318 1725
+13.508 13.267 1725
+13.545 13.211 1725
+13.578 13.156 1725
+13.612 13.102 1725
+13.639 13.052 1725
+13.647 13.001 1725
+13.626 12.927 1725
+13.624 12.925 1725
+13.618 12.873 1725
+13.640 12.821 1725
+13.657 12.766 1725
+13.705 12.714 1725
+13.755 12.685 1725
+13.805 12.653 1725
+13.861 12.614 1725
+13.915 12.563 1725
+13.965 12.512 1725
+13.998 12.460 1725
+14.007 12.408 1725
+14.014 12.351 1725
+14.026 12.297 1725
+14.036 12.245 1725
+14.046 12.193 1725
+14.059 12.141 1725
+14.072 12.088 1725
+14.075 12.036 1725
+14.077 11.984 1725
+14.087 11.931 1725
+14.097 11.878 1725
+14.151 11.832 1725
+14.203 11.828 1725
+14.254 11.832 1725
+14.310 11.827 1725
+14.362 11.810 1725
+14.412 11.784 1725
+14.449 11.752 1725
+14.464 11.757 1725
+14.517 11.710 1725
+14.556 11.657 1725
+14.594 11.607 1725
+14.611 11.564 1725
+14.612 11.552 1725
+14.624 11.502 1725
+14.631 11.452 1725
+14.630 11.397 1725
+14.624 11.339 1725
+14.619 11.286 1725
+14.611 11.234 1725
+14.606 11.184 1725
+14.604 11.133 1725
+14.606 11.081 1725
+14.608 11.024 1725
+14.610 10.973 1725
+14.613 10.921 1725
+14.620 10.869 1725
+14.646 10.818 1725
+14.696 10.809 1725
+14.748 10.814 1725
+14.801 10.825 1725
+14.854 10.833 1725
+14.911 10.841 1725
+14.966 10.851 1725
+15.017 10.849 1725
+15.070 10.836 1725
+15.120 10.820 1725
+15.142 10.767 1725
+15.123 10.712 1725
+15.073 10.664 1725
+15.028 10.612 1725
+14.995 10.558 1725
+14.973 10.502 1725
+15.026 10.465 1725
+15.077 10.422 1725
+15.128 10.457 1725
+15.179 10.492 1725
+15.231 10.500 1725
+15.277 10.446 1725
+15.267 10.395 1725
+15.247 10.345 1725
+15.261 10.293 1725
+15.320 10.278 1725
+15.376 10.258 1725
+15.424 10.203 1725
+15.432 10.149 1725
+15.446 10.097 1725
+15.496 10.077 1725
+15.547 10.121 1725
+15.597 10.169 1725
+15.608 10.178 1725
+15.647 10.190 1725
+15.699 10.182 1725
+15.751 10.148 1725
+15.804 10.098 1725
+15.847 10.046 1725
+15.879 9.994 1725
+15.903 9.943 1725
+15.932 9.888 1725
+15.949 9.838 1725
+15.961 9.788 1725
+15.979 9.735 1725
+15.989 9.681 1725
+15.995 9.631 1725
+16.006 9.580 1725
+16.016 9.529 1725
+16.016 9.513 1725
+16.018 9.477 1725
+16.026 9.416 1725
+16.040 9.365 1725
+16.044 9.315 1725
+16.035 9.257 1725
+16.022 9.201 1725
+16.009 9.145 1725
+15.993 9.089 1725
+15.975 9.030 1725
+15.963 8.980 1725
+15.958 8.926 1725
+15.954 8.873 1725
+15.954 8.821 1725
+15.960 8.767 1725
+15.970 8.712 1725
+15.983 8.659 1725
+15.996 8.606 1725
+16.015 8.554 1725
+16.041 8.498 1725
+16.070 8.446 1725
+16.116 8.396 1725
+16.168 8.348 1725
+16.197 8.296 1725
+16.218 8.244 1725
+16.243 8.191 1725
+16.281 8.138 1725
+16.334 8.102 1725
+16.389 8.061 1725
+16.443 8.016 1725
+16.483 7.963 1725
+16.513 7.909 1725
+16.542 7.859 1725
+16.559 7.806 1725
+16.577 7.755 1725
+16.632 7.747 1725
+16.672 7.692 1725
+16.678 7.639 1725
+16.731 7.606 1725
+16.785 7.617 1725
+16.835 7.639 1725
+16.873 7.691 1725
+16.905 7.746 1725
+16.927 7.802 1725
+16.941 7.853 1725
+16.959 7.905 1725
+16.980 7.959 1725
+16.998 7.981 1725
+17.034 8.000 1725
+17.088 8.015 1725
+17.142 8.008 1725
+17.193 7.988 1725
+17.244 7.959 1725
+17.290 7.905 1725
+17.307 7.855 1725
+17.324 7.805 1725
+17.345 7.753 1725
+17.368 7.701 1725
+17.395 7.650 1725
+17.408 7.597 1725
+17.416 7.544 1725
+17.413 7.493 1725
+17.413 7.440 1725
+17.417 7.389 1725
+17.418 7.336 1725
+17.421 7.285 1725
+17.421 7.232 1725
+17.424 7.182 1725
+17.429 7.131 1725
+17.430 7.077 1725
+17.432 7.026 1725
+17.435 6.974 1725
+17.431 6.921 1725
+17.429 6.868 1725
+17.423 6.814 1725
+17.423 6.761 1725
+17.419 6.708 1725
+17.417 6.657 1725
+17.419 6.607 1725
+17.421 6.557 1725
+17.431 6.505 1725
+17.443 6.452 1725
+8.024 7.643 1750
+8.023 7.643 1750
+8.074 7.632 1750
+8.129 7.637 1750
+8.182 7.627 1750
+8.236 7.610 1750
+8.288 7.590 1750
+8.339 7.550 1750
+8.392 7.543 1750
+8.443 7.545 1750
+8.496 7.532 1750
+8.552 7.490 1750
+8.608 7.464 1750
+8.661 7.440 1750
+8.713 7.430 1750
+8.766 7.435 1750
+8.820 7.426 1750
+8.873 7.400 1750
+8.923 7.360 1750
+8.968 7.305 1750
+9.016 7.251 1750
+9.069 7.217 1750
+9.122 7.194 1750
+9.172 7.172 1750
+9.222 7.128 1750
+9.234 7.074 1750
+9.231 7.023 1750
+9.247 6.971 1750
+9.276 6.921 1750
+9.314 6.868 1750
+9.353 6.816 1750
+9.384 6.762 1750
+9.397 6.708 1750
+9.400 6.658 1750
+9.417 6.607 1750
+9.458 6.554 1750
+9.490 6.502 1750
+9.514 6.447 1750
+9.537 6.388 1750
+9.553 6.333 1750
+9.560 6.279 1750
+9.567 6.225 1750
+9.572 6.171 1750
+9.581 6.118 1750
+9.593 6.067 1750
+9.601 6.013 1750
+9.613 5.959 1750
+9.636 5.906 1750
+9.658 5.854 1750
+9.681 5.801 1750
+9.722 5.749 1750
+9.772 5.709 1750
+9.824 5.714 1750
+9.875 5.748 1750
+9.926 5.783 1750
+9.979 5.813 1750
+10.030 5.854 1750
+10.083 5.887 1750
+10.137 5.920 1750
+10.188 5.942 1750
+10.223 5.994 1750
+10.235 6.048 1750
+10.216 6.102 1750
+10.194 6.156 1750
+10.183 6.209 1750
+10.170 6.259 1750
+10.156 6.315 1750
+10.138 6.369 1750
+10.116 6.420 1750
+10.086 6.471 1750
+10.043 6.525 1750
+10.002 6.577 1750
+9.960 6.630 1750
+9.924 6.681 1750
+9.899 6.734 1750
+9.863 6.788 1750
+9.811 6.820 1750
+9.758 6.845 1750
+9.704 6.883 1750
+9.671 6.933 1750
+9.638 6.991 1750
+9.611 7.044 1750
+9.579 7.100 1750
+9.550 7.156 1750
+9.518 7.207 1750
+9.485 7.261 1750
+9.456 7.316 1750
+9.431 7.371 1750
+9.416 7.422 1750
+9.398 7.474 1750
+9.382 7.524 1750
+9.369 7.576 1750
+9.360 7.626 1750
+9.355 7.680 1750
+9.356 7.734 1750
+9.358 7.787 1750
+9.355 7.840 1750
+9.339 7.894 1750
+9.305 7.946 1750
+9.275 8.001 1750
+9.249 8.051 1750
+9.218 8.101 1750
+9.181 8.160 1750
+9.160 8.214 1750
+9.136 8.270 1750
+9.102 8.325 1750
+9.060 8.379 1750
+9.014 8.429 1750
+8.964 8.474 1750
+8.908 8.517 1750
+8.856 8.560 1750
+8.824 8.613 1750
+8.799 8.668 1750
+8.771 8.722 1750
+8.741 8.774 1750
+8.727 8.825 1750
+8.729 8.875 1750
+8.738 8.928 1750
+8.733 8.979 1750
+8.731 9.000 1750
+8.713 9.029 1750
+8.669 9.082 1750
+8.644 9.133 1750
+8.641 9.184 1750
+8.644 9.236 1750
+8.641 9.291 1750
+8.640 9.342 1750
+8.630 9.395 1750
+8.599 9.446 1750
+8.566 9.497 1750
+8.546 9.548 1750
+8.545 9.598 1750
+8.547 9.618 1750
+8.550 9.650 1750
+8.519 9.701 1750
+8.486 9.752 1750
+8.436 9.791 1750
+8.397 9.842 1750
+8.399 9.839 1750
+8.371 9.894 1750
+8.342 9.947 1750
+8.315 10.000 1750
+8.295 10.054 1750
+8.272 10.104 1750
+8.248 10.154 1750
+8.225 10.205 1750
+8.201 10.260 1750
+8.180 10.314 1750
+8.161 10.365 1750
+8.136 10.417 1750
+8.115 10.469 1750
+8.096 10.523 1750
+8.086 10.573 1750
+8.063 10.629 1750
+8.037 10.681 1750
+8.009 10.731 1750
+7.980 10.784 1750
+7.945 10.842 1750
+7.919 10.893 1750
+7.892 10.943 1750
+7.867 10.999 1750
+7.840 11.052 1750
+7.811 11.102 1750
+7.782 11.156 1750
+7.753 11.210 1750
+7.729 11.262 1750
+7.709 11.314 1750
+7.693 11.370 1750
+7.680 11.422 1750
+7.673 11.478 1750
+7.667 11.533 1750
+7.664 11.586 1750
+7.660 11.641 1750
+7.661 11.694 1750
+7.665 11.747 1750
+7.673 11.800 1750
+7.683 11.855 1750
+7.684 11.908 1750
+7.687 11.958 1750
+7.690 12.013 1750
+7.693 12.066 1750
+7.707 12.116 1750
+7.732 12.169 1750
+7.758 12.221 1750
+7.796 12.275 1750
+7.842 12.328 1750
+7.895 12.370 1750
+7.945 12.410 1750
+7.999 12.445 1750
+8.050 12.478 1750
+8.102 12.510 1750
+8.151 12.562 1750
+8.163 12.571 1750
+8.187 12.618 1750
+8.207 12.670 1750
+8.212 12.725 1750
+8.205 12.775 1750
+8.204 12.827 1750
+8.204 12.879 1750
+8.203 12.929 1750
+8.204 12.979 1750
+8.203 13.032 1750
+8.205 13.083 1750
+8.210 13.134 1750
+8.212 13.184 1750
+8.214 13.193 1750
+8.202 13.235 1750
+8.195 13.285 1750
+8.202 13.335 1750
+8.219 13.388 1750
+8.237 13.441 1750
+8.259 13.492 1750
+8.279 13.545 1750
+8.300 13.597 1750
+8.328 13.652 1750
+8.355 13.707 1750
+8.381 13.759 1750
+8.402 13.815 1750
+8.416 13.867 1750
+8.431 13.922 1750
+8.449 13.973 1750
+8.462 14.026 1750
+8.487 14.084 1750
+8.511 14.136 1750
+8.541 14.196 1750
+8.577 14.248 1750
+8.614 14.298 1750
+8.657 14.350 1750
+8.700 14.402 1750
+8.750 14.444 1750
+8.801 14.476 1750
+8.853 14.485 1750
+8.907 14.471 1750
+8.960 14.458 1750
+9.014 14.455 1750
+9.069 14.457 1750
+9.123 14.472 1750
+9.177 14.500 1750
+9.229 14.545 1750
+9.279 14.592 1750
+9.333 14.623 1750
+9.386 14.638 1750
+9.440 14.654 1750
+9.491 14.673 1750
+9.545 14.685 1750
+9.601 14.690 1750
+9.654 14.699 1750
+9.707 14.705 1750
+9.759 14.715 1750
+9.815 14.735 1750
+9.865 14.747 1750
+9.917 14.751 1750
+9.968 14.753 1750
+10.020 14.759 1750
+10.073 14.775 1750
+10.126 14.793 1750
+10.180 14.817 1750
+10.230 14.835 1750
+10.283 14.860 1750
+10.337 14.885 1750
+10.389 14.912 1750
+10.440 14.927 1750
+10.490 14.934 1750
+10.540 14.941 1750
+10.591 14.949 1750
+10.641 14.959 1750
+10.692 14.968 1750
+10.750 14.980 1750
+10.804 14.983 1750
+10.861 14.980 1750
+10.912 14.986 1750
+10.966 14.991 1750
+11.022 14.991 1750
+11.075 14.992 1750
+11.126 14.991 1750
+11.176 14.993 1750
+11.230 14.987 1750
+11.283 14.982 1750
+11.334 14.975 1750
+11.384 14.959 1750
+11.437 14.946 1750
+11.492 14.934 1750
+11.545 14.921 1750
+11.599 14.907 1750
+11.652 14.893 1750
+11.711 14.877 1750
+11.767 14.861 1750
+11.818 14.848 1750
+11.869 14.834 1750
+11.923 14.821 1750
+11.976 14.804 1750
+12.027 14.781 1750
+12.081 14.753 1750
+12.131 14.725 1750
+12.186 14.677 1750
+12.237 14.637 1750
+12.291 14.592 1750
+12.343 14.546 1750
+12.395 14.508 1750
+12.453 14.492 1750
+12.504 14.482 1750
+12.563 14.460 1750
+12.613 14.436 1750
+12.665 14.402 1750
+12.713 14.351 1750
+12.755 14.301 1750
+12.808 14.253 1750
+12.862 14.216 1750
+12.915 14.179 1750
+12.965 14.146 1750
+13.015 14.111 1750
+13.070 14.063 1750
+13.124 14.019 1750
+13.175 13.984 1750
+13.225 13.956 1750
+13.278 13.931 1750
+13.328 13.906 1750
+13.382 13.865 1750
+13.438 13.813 1750
+13.490 13.765 1750
+13.536 13.713 1750
+13.582 13.663 1750
+13.633 13.607 1750
+13.687 13.557 1750
+13.718 13.504 1750
+13.745 13.451 1750
+13.780 13.397 1750
+13.805 13.343 1750
+13.833 13.291 1750
+13.862 13.237 1750
+13.877 13.184 1750
+13.885 13.130 1750
+13.884 13.080 1750
+13.867 13.028 1750
+13.855 13.007 1750
+13.848 12.976 1750
+13.853 12.926 1750
+13.865 12.874 1750
+13.892 12.822 1750
+13.945 12.779 1750
+13.996 12.753 1750
+14.041 12.700 1750
+14.074 12.645 1750
+14.109 12.590 1750
+14.134 12.538 1750
+14.148 12.485 1750
+14.164 12.432 1750
+14.176 12.376 1750
+14.194 12.323 1750
+14.202 12.268 1750
+14.216 12.216 1750
+14.240 12.160 1750
+14.265 12.108 1750
+14.318 12.054 1750
+14.371 12.028 1750
+14.422 12.016 1750
+14.477 12.002 1750
+14.530 11.994 1750
+14.584 11.979 1750
+14.638 11.960 1750
+14.689 11.939 1750
+14.701 11.954 1750
+14.740 11.914 1750
+14.761 11.862 1750
+14.785 11.811 1750
+14.793 11.757 1750
+14.801 11.706 1750
+14.804 11.650 1750
+14.804 11.652 1750
+14.795 11.598 1750
+14.787 11.548 1750
+14.772 11.493 1750
+14.760 11.441 1750
+14.757 11.389 1750
+14.757 11.337 1750
+14.751 11.282 1750
+14.740 11.231 1750
+14.735 11.177 1750
+14.733 11.122 1750
+14.743 11.072 1750
+14.794 11.031 1750
+14.845 11.016 1750
+14.896 11.024 1750
+14.946 11.052 1750
+14.996 11.086 1750
+15.048 11.120 1750
+15.099 11.141 1750
+15.153 11.153 1750
+15.208 11.151 1750
+15.262 11.149 1750
+15.314 11.122 1750
+15.350 11.067 1750
+15.396 11.017 1750
+15.446 10.984 1750
+15.499 10.969 1750
+15.551 10.960 1750
+15.601 10.948 1750
+15.651 10.921 1750
+15.680 10.943 1750
+15.707 10.905 1750
+15.760 10.849 1750
+15.810 10.802 1750
+15.854 10.752 1750
+15.892 10.700 1750
+15.915 10.648 1750
+15.940 10.588 1750
+15.962 10.536 1750
+15.986 10.480 1750
+16.000 10.430 1750
+16.015 10.374 1750
+16.033 10.321 1750
+16.049 10.269 1750
+16.077 10.212 1750
+16.108 10.156 1750
+16.130 10.104 1750
+16.142 10.051 1750
+16.154 10.000 1750
+16.168 9.948 1750
+16.182 9.901 1750
+16.182 9.898 1750
+16.182 9.847 1750
+16.184 9.793 1750
+16.186 9.740 1750
+16.177 9.685 1750
+16.169 9.628 1750
+16.167 9.577 1750
+16.166 9.524 1750
+16.166 9.474 1750
+16.169 9.420 1750
+16.160 9.369 1750
+16.154 9.314 1750
+16.150 9.259 1750
+16.139 9.209 1750
+16.119 9.156 1750
+16.106 9.103 1750
+16.095 9.051 1750
+16.084 8.995 1750
+16.086 8.941 1750
+16.092 8.888 1750
+16.103 8.838 1750
+16.115 8.784 1750
+16.115 8.731 1750
+16.117 8.679 1750
+16.124 8.627 1750
+16.149 8.573 1750
+16.191 8.521 1750
+16.236 8.469 1750
+16.278 8.415 1750
+16.311 8.360 1750
+16.334 8.305 1750
+16.359 8.255 1750
+16.412 8.218 1750
+16.462 8.208 1750
+16.518 8.202 1750
+16.572 8.196 1750
+16.623 8.191 1750
+16.674 8.187 1750
+16.728 8.185 1750
+16.771 8.128 1750
+16.773 8.074 1750
+16.825 8.100 1750
+16.854 8.152 1750
+16.872 8.207 1750
+16.898 8.257 1750
+16.927 8.308 1750
+16.969 8.358 1750
+17.005 8.409 1750
+17.012 8.415 1750
+17.058 8.437 1750
+17.110 8.440 1750
+17.163 8.427 1750
+17.214 8.409 1750
+17.268 8.385 1750
+17.320 8.343 1750
+17.361 8.293 1750
+17.416 8.250 1750
+9.440 7.060 1775
+9.442 7.061 1775
+9.460 7.009 1775
+9.479 6.955 1775
+9.496 6.901 1775
+9.514 6.850 1775
+9.533 6.798 1775
+9.552 6.746 1775
+9.571 6.692 1775
+9.584 6.639 1775
+9.596 6.588 1775
+9.614 6.536 1775
+9.630 6.485 1775
+9.640 6.431 1775
+9.651 6.376 1775
+9.665 6.323 1775
+9.681 6.266 1775
+9.695 6.212 1775
+9.704 6.161 1775
+9.713 6.105 1775
+9.733 6.049 1775
+9.762 5.996 1775
+9.812 5.962 1775
+9.862 5.952 1775
+9.912 5.962 1775
+9.967 5.987 1775
+10.021 6.004 1775
+10.075 6.015 1775
+10.109 6.066 1775
+10.071 6.119 1775
+10.042 6.170 1775
+10.022 6.224 1775
+10.016 6.279 1775
+10.009 6.331 1775
+9.981 6.383 1775
+9.927 6.438 1775
+9.876 6.487 1775
+9.826 6.540 1775
+9.782 6.591 1775
+9.732 6.641 1775
+9.681 6.690 1775
+9.638 6.744 1775
+9.597 6.798 1775
+9.560 6.848 1775
+9.525 6.903 1775
+9.498 6.954 1775
+9.470 7.007 1775
+9.439 7.060 1775
+7.826 7.902 1775
+7.826 7.902 1775
+7.878 7.865 1775
+7.928 7.826 1775
+7.981 7.785 1775
+8.036 7.760 1775
+8.086 7.753 1775
+8.141 7.758 1775
+8.191 7.766 1775
+8.242 7.761 1775
+8.296 7.724 1775
+8.348 7.697 1775
+8.403 7.690 1775
+8.457 7.677 1775
+8.511 7.645 1775
+8.565 7.621 1775
+8.617 7.610 1775
+8.671 7.606 1775
+8.724 7.606 1775
+8.779 7.584 1775
+8.832 7.534 1775
+8.882 7.506 1775
+8.933 7.493 1775
+8.988 7.478 1775
+9.040 7.464 1775
+9.090 7.430 1775
+9.140 7.397 1775
+9.194 7.355 1775
+9.245 7.325 1775
+9.295 7.314 1775
+9.288 7.368 1775
+9.271 7.418 1775
+9.250 7.470 1775
+9.237 7.521 1775
+9.229 7.574 1775
+9.229 7.624 1775
+9.232 7.677 1775
+9.237 7.727 1775
+9.237 7.779 1775
+9.205 7.832 1775
+9.157 7.883 1775
+9.110 7.933 1775
+9.060 7.986 1775
+9.027 8.036 1775
+9.005 8.087 1775
+8.990 8.140 1775
+8.977 8.191 1775
+8.960 8.243 1775
+8.929 8.298 1775
+8.893 8.351 1775
+8.845 8.405 1775
+8.794 8.458 1775
+8.748 8.509 1775
+8.706 8.559 1775
+8.672 8.610 1775
+8.632 8.666 1775
+8.605 8.720 1775
+8.588 8.773 1775
+8.579 8.826 1775
+8.569 8.879 1775
+8.554 8.929 1775
+8.531 8.981 1775
+8.493 9.034 1775
+8.460 9.087 1775
+8.433 9.140 1775
+8.427 9.183 1775
+8.405 9.195 1775
+8.363 9.247 1775
+8.337 9.297 1775
+8.308 9.350 1775
+8.292 9.403 1775
+8.281 9.456 1775
+8.275 9.506 1775
+8.275 9.530 1775
+8.277 9.556 1775
+8.308 9.606 1775
+8.335 9.661 1775
+8.333 9.711 1775
+8.283 9.752 1775
+8.229 9.773 1775
+8.177 9.794 1775
+8.156 9.821 1775
+8.133 9.848 1775
+8.109 9.902 1775
+8.075 9.956 1775
+8.043 10.008 1775
+8.006 10.060 1775
+7.979 10.111 1775
+7.955 10.162 1775
+7.930 10.218 1775
+7.908 10.272 1775
+7.890 10.323 1775
+7.871 10.378 1775
+7.850 10.429 1775
+7.819 10.484 1775
+7.785 10.534 1775
+7.753 10.586 1775
+7.727 10.636 1775
+7.698 10.694 1775
+7.675 10.747 1775
+7.651 10.802 1775
+7.630 10.855 1775
+7.607 10.910 1775
+7.590 10.965 1775
+7.569 11.016 1775
+7.550 11.067 1775
+7.531 11.121 1775
+7.510 11.172 1775
+7.485 11.222 1775
+7.470 11.274 1775
+7.465 11.329 1775
+7.462 11.381 1775
+7.459 11.432 1775
+7.460 11.482 1775
+7.457 11.534 1775
+7.449 11.586 1775
+7.443 11.637 1775
+7.477 11.690 1775
+7.505 11.743 1775
+7.514 11.794 1775
+7.525 11.846 1775
+7.537 11.902 1775
+7.550 11.953 1775
+7.558 12.006 1775
+7.566 12.059 1775
+7.570 12.110 1775
+7.576 12.161 1775
+7.563 12.212 1775
+7.563 12.264 1775
+7.569 12.315 1775
+7.599 12.365 1775
+7.650 12.416 1775
+7.701 12.464 1775
+7.753 12.509 1775
+7.803 12.547 1775
+7.856 12.584 1775
+7.907 12.623 1775
+7.959 12.673 1775
+7.994 12.724 1775
+8.020 12.775 1775
+8.040 12.826 1775
+8.047 12.881 1775
+8.053 12.932 1775
+8.048 12.986 1775
+8.042 13.036 1775
+8.036 13.088 1775
+8.027 13.140 1775
+8.020 13.191 1775
+8.017 13.241 1775
+8.017 13.294 1775
+8.015 13.346 1775
+8.014 13.399 1775
+8.016 13.452 1775
+8.023 13.502 1775
+8.031 13.552 1775
+8.042 13.604 1775
+8.057 13.656 1775
+8.081 13.708 1775
+8.102 13.761 1775
+8.122 13.814 1775
+8.145 13.868 1775
+8.170 13.919 1775
+8.203 13.972 1775
+8.235 14.022 1775
+8.265 14.079 1775
+8.296 14.134 1775
+8.321 14.186 1775
+8.343 14.236 1775
+8.373 14.290 1775
+8.405 14.344 1775
+8.457 14.395 1775
+8.507 14.446 1775
+8.540 14.496 1775
+8.578 14.549 1775
+8.628 14.591 1775
+8.678 14.605 1775
+8.729 14.616 1775
+8.779 14.624 1775
+8.829 14.637 1775
+8.885 14.598 1775
+8.939 14.567 1775
+8.991 14.564 1775
+9.044 14.565 1775
+9.095 14.594 1775
+9.148 14.629 1775
+9.200 14.674 1775
+9.245 14.726 1775
+9.289 14.778 1775
+9.329 14.828 1775
+9.368 14.879 1775
+9.423 14.920 1775
+9.478 14.951 1775
+9.536 14.955 1775
+9.594 14.969 1775
+9.650 14.977 1775
+9.704 14.985 1775
+9.761 14.996 1775
+9.813 15.008 1775
+9.866 15.016 1775
+9.916 15.020 1775
+9.969 15.030 1775
+10.024 15.041 1775
+10.079 15.058 1775
+10.131 15.079 1775
+10.182 15.104 1775
+10.235 15.142 1775
+10.289 15.181 1775
+10.343 15.218 1775
+10.393 15.249 1775
+10.443 15.287 1775
+10.927 15.296 1775
+10.927 15.298 1775
+10.980 15.291 1775
+11.033 15.277 1775
+11.083 15.269 1775
+11.134 15.254 1775
+11.186 15.241 1775
+11.237 15.234 1775
+11.295 15.224 1775
+11.356 15.211 1775
+11.409 15.203 1775
+11.466 15.196 1775
+11.516 15.197 1775
+11.566 15.195 1775
+11.618 15.189 1775
+11.673 15.183 1775
+11.727 15.181 1775
+11.780 15.177 1775
+11.835 15.171 1775
+11.892 15.150 1775
+11.945 15.128 1775
+11.998 15.106 1775
+12.049 15.084 1775
+12.107 15.056 1775
+12.165 15.029 1775
+12.220 14.999 1775
+12.271 14.965 1775
+12.327 14.925 1775
+12.383 14.889 1775
+12.438 14.860 1775
+12.492 14.829 1775
+12.549 14.799 1775
+12.603 14.772 1775
+12.654 14.748 1775
+12.708 14.719 1775
+12.765 14.686 1775
+12.822 14.651 1775
+12.879 14.615 1775
+12.936 14.578 1775
+12.994 14.546 1775
+13.046 14.513 1775
+13.096 14.484 1775
+13.146 14.452 1775
+13.200 14.422 1775
+13.250 14.388 1775
+13.304 14.348 1775
+13.361 14.310 1775
+13.417 14.268 1775
+13.467 14.221 1775
+13.517 14.171 1775
+13.562 14.115 1775
+13.599 14.063 1775
+13.638 14.013 1775
+13.678 13.963 1775
+13.725 13.909 1775
+13.765 13.856 1775
+13.804 13.799 1775
+13.844 13.745 1775
+13.877 13.691 1775
+13.902 13.640 1775
+13.932 13.585 1775
+13.961 13.533 1775
+13.982 13.480 1775
+14.000 13.430 1775
+14.021 13.378 1775
+14.041 13.323 1775
+14.059 13.269 1775
+14.075 13.214 1775
+14.086 13.162 1775
+14.091 13.111 1775
+14.091 13.054 1775
+14.104 13.001 1775
+14.110 12.950 1775
+14.108 12.898 1775
+14.036 12.789 1775
+14.095 12.827 1775
+14.129 12.775 1775
+14.164 12.724 1775
+14.191 12.667 1775
+14.220 12.614 1775
+14.247 12.563 1775
+14.271 12.511 1775
+14.291 12.458 1775
+14.298 12.406 1775
+14.304 12.355 1775
+14.356 12.329 1775
+14.355 12.279 1775
+14.350 12.228 1775
+14.402 12.177 1775
+14.455 12.171 1775
+14.510 12.163 1775
+14.563 12.160 1775
+14.615 12.151 1775
+14.667 12.142 1775
+14.718 12.137 1775
+14.768 12.129 1775
+14.818 12.117 1775
+14.820 12.094 1775
+14.869 12.088 1775
+14.911 12.034 1775
+14.942 11.981 1775
+14.973 11.928 1775
+14.970 11.880 1775
+14.968 11.876 1775
+14.976 11.825 1775
+14.986 11.774 1775
+14.974 11.721 1775
+14.952 11.671 1775
+14.928 11.618 1775
+14.932 11.565 1775
+14.922 11.512 1775
+14.894 11.459 1775
+14.869 11.406 1775
+14.845 11.352 1775
+14.828 11.301 1775
+14.855 11.251 1775
+14.907 11.254 1775
+14.959 11.264 1775
+15.016 11.282 1775
+15.067 11.299 1775
+15.119 11.316 1775
+15.169 11.325 1775
+15.224 11.334 1775
+15.276 11.337 1775
+15.335 11.339 1775
+15.389 11.344 1775
+15.445 11.345 1775
+15.501 11.339 1775
+15.552 11.309 1775
+15.593 11.256 1775
+15.637 11.205 1775
+15.687 11.170 1775
+15.738 11.153 1775
+15.793 11.135 1775
+15.845 11.110 1775
+15.858 11.104 1775
+15.880 11.056 1775
+15.909 10.999 1775
+15.940 10.945 1775
+15.975 10.894 1775
+16.009 10.838 1775
+16.047 10.786 1775
+16.089 10.735 1775
+16.121 10.678 1775
+16.142 10.621 1775
+16.162 10.563 1775
+16.182 10.510 1775
+16.206 10.460 1775
+16.230 10.408 1775
+16.246 10.356 1775
+16.264 10.304 1775
+16.276 10.252 1775
+16.283 10.201 1775
+16.294 10.148 1775
+16.302 10.094 1775
+16.309 10.044 1775
+16.322 9.999 1775
+16.322 9.990 1775
+16.325 9.938 1775
+16.327 9.883 1775
+16.323 9.832 1775
+16.315 9.778 1775
+16.302 9.728 1775
+16.274 9.675 1775
+16.255 9.621 1775
+16.274 9.569 1775
+16.276 9.516 1775
+16.255 9.464 1775
+16.244 9.413 1775
+16.264 9.360 1775
+16.277 9.305 1775
+16.268 9.254 1775
+16.251 9.203 1775
+16.237 9.148 1775
+16.227 9.095 1775
+16.210 9.042 1775
+16.196 8.987 1775
+16.195 8.935 1775
+16.221 8.885 1775
+16.248 8.832 1775
+16.260 8.778 1775
+16.257 8.725 1775
+16.268 8.674 1775
+16.292 8.620 1775
+16.328 8.567 1775
+16.355 8.517 1775
+16.384 8.465 1775
+16.437 8.413 1775
+16.491 8.405 1775
+16.542 8.415 1775
+16.593 8.435 1775
+16.644 8.457 1775
+16.697 8.477 1775
+16.752 8.492 1775
+16.804 8.514 1775
+16.855 8.537 1775
+16.906 8.569 1775
+16.947 8.619 1775
+16.956 8.625 1775
+17.005 8.646 1775
+17.059 8.678 1775
+17.109 8.684 1775
+17.163 8.679 1775
+17.216 8.664 1775
+17.267 8.651 1775
+17.318 8.640 1775
+17.369 8.617 1775
+17.419 8.593 1775
+7.659 8.134 1800
+7.658 8.130 1800
+7.712 8.104 1800
+7.766 8.081 1800
+7.816 8.068 1800
+7.867 8.048 1800
+7.921 8.019 1800
+7.943 7.967 1800
+7.991 7.916 1800
+8.042 7.898 1800
+8.096 7.886 1800
+8.151 7.875 1800
+8.207 7.867 1800
+8.263 7.868 1800
+8.319 7.867 1800
+8.369 7.863 1800
+8.425 7.852 1800
+8.481 7.828 1800
+8.537 7.803 1800
+8.587 7.780 1800
+8.641 7.751 1800
+8.693 7.727 1800
+8.745 7.708 1800
+8.795 7.698 1800
+8.850 7.681 1800
+8.900 7.669 1800
+8.957 7.651 1800
+9.007 7.633 1800
+9.060 7.614 1800
+9.075 7.668 1800
+9.046 7.725 1800
+9.006 7.779 1800
+8.962 7.835 1800
+8.920 7.888 1800
+8.881 7.941 1800
+8.838 7.996 1800
+8.812 8.050 1800
+8.794 8.107 1800
+8.775 8.157 1800
+8.757 8.209 1800
+8.733 8.263 1800
+8.697 8.315 1800
+8.658 8.369 1800
+8.610 8.423 1800
+8.570 8.476 1800
+8.533 8.532 1800
+8.499 8.585 1800
+8.481 8.638 1800
+8.470 8.693 1800
+8.459 8.744 1800
+8.449 8.800 1800
+8.430 8.858 1800
+8.415 8.909 1800
+8.391 8.964 1800
+8.362 9.017 1800
+8.314 9.067 1800
+8.257 9.111 1800
+8.201 9.140 1800
+8.148 9.183 1800
+8.117 9.236 1800
+8.110 9.291 1800
+8.109 9.344 1800
+8.114 9.399 1800
+8.122 9.452 1800
+8.130 9.505 1800
+8.141 9.559 1800
+8.147 9.614 1800
+8.154 9.664 1800
+8.103 9.673 1800
+8.048 9.691 1800
+7.996 9.713 1800
+7.945 9.740 1800
+7.914 9.762 1800
+7.892 9.793 1800
+7.840 9.846 1800
+7.800 9.896 1800
+7.758 9.949 1800
+7.724 10.003 1800
+7.688 10.057 1800
+7.655 10.107 1800
+7.621 10.164 1800
+7.597 10.215 1800
+7.569 10.267 1800
+7.540 10.318 1800
+7.517 10.369 1800
+7.498 10.422 1800
+7.484 10.472 1800
+7.471 10.522 1800
+7.457 12.488 1800
+7.457 12.490 1800
+7.490 12.545 1800
+7.519 12.596 1800
+7.559 12.650 1800
+7.591 12.703 1800
+7.615 12.754 1800
+7.634 12.804 1800
+7.650 12.856 1800
+7.664 12.907 1800
+7.679 12.958 1800
+7.698 13.009 1800
+7.719 13.060 1800
+7.742 13.113 1800
+7.771 13.164 1800
+7.812 13.215 1800
+7.836 13.265 1800
+7.846 13.317 1800
+7.846 13.367 1800
+7.841 13.422 1800
+7.838 13.477 1800
+7.839 13.534 1800
+7.850 13.591 1800
+7.866 13.647 1800
+7.880 13.701 1800
+7.901 13.757 1800
+7.929 13.811 1800
+7.954 13.862 1800
+7.984 13.912 1800
+8.012 13.962 1800
+8.034 14.015 1800
+8.057 14.067 1800
+8.087 14.120 1800
+8.119 14.174 1800
+8.148 14.225 1800
+8.176 14.277 1800
+8.198 14.328 1800
+8.224 14.378 1800
+8.245 14.429 1800
+8.265 14.483 1800
+8.283 14.536 1800
+8.297 14.587 1800
+8.312 14.639 1800
+8.317 14.691 1800
+8.326 14.746 1800
+8.332 14.799 1800
+8.350 14.851 1800
+8.400 14.888 1800
+8.452 14.908 1800
+8.505 14.912 1800
+8.560 14.912 1800
+8.612 14.906 1800
+8.664 14.898 1800
+8.720 14.872 1800
+8.771 14.844 1800
+8.816 14.794 1800
+8.858 14.741 1800
+8.895 14.691 1800
+8.945 14.641 1800
+8.995 14.625 1800
+9.014 14.676 1800
+9.064 14.684 1800
+9.091 14.735 1800
+9.140 14.786 1800
+9.193 14.818 1800
+9.227 14.872 1800
+9.232 14.922 1800
+9.241 14.973 1800
+9.236 15.026 1800
+9.259 15.079 1800
+9.298 15.130 1800
+9.323 15.180 1800
+9.338 15.234 1800
+9.362 15.288 1800
+12.195 15.295 1800
+12.196 15.298 1800
+12.250 15.298 1800
+12.303 15.267 1800
+12.357 15.225 1800
+12.398 15.173 1800
+12.448 15.133 1800
+12.500 15.086 1800
+12.552 15.053 1800
+12.607 15.030 1800
+12.658 15.014 1800
+12.713 14.994 1800
+12.768 14.967 1800
+12.820 14.934 1800
+12.875 14.907 1800
+12.932 14.878 1800
+12.983 14.858 1800
+13.034 14.839 1800
+13.087 14.815 1800
+13.139 14.778 1800
+13.193 14.737 1800
+13.249 14.693 1800
+13.300 14.657 1800
+13.355 14.618 1800
+13.408 14.582 1800
+13.459 14.543 1800
+13.515 14.506 1800
+13.566 14.463 1800
+13.612 14.411 1800
+13.663 14.363 1800
+13.713 14.324 1800
+13.765 14.282 1800
+13.814 14.230 1800
+13.851 14.180 1800
+13.895 14.129 1800
+13.938 14.076 1800
+13.975 14.023 1800
+14.012 13.969 1800
+14.046 13.915 1800
+14.069 13.865 1800
+14.087 13.807 1800
+14.110 13.753 1800
+14.144 13.697 1800
+14.168 13.644 1800
+14.194 13.589 1800
+14.221 13.539 1800
+14.246 13.489 1800
+14.268 13.436 1800
+14.285 13.382 1800
+14.298 13.329 1800
+14.312 13.278 1800
+14.330 13.224 1800
+14.335 13.172 1800
+14.327 13.122 1800
+14.311 13.072 1800
+14.294 13.019 1800
+14.268 12.967 1800
+14.310 13.032 1800
+14.309 13.033 1800
+14.267 12.983 1800
+14.254 12.931 1800
+14.254 12.879 1800
+14.265 12.828 1800
+14.279 12.778 1800
+14.301 12.725 1800
+14.322 12.675 1800
+14.344 12.622 1800
+14.367 12.569 1800
+14.389 12.518 1800
+14.404 12.465 1800
+14.418 12.412 1800
+14.432 12.362 1800
+14.465 12.312 1800
+14.516 12.315 1800
+14.570 12.315 1800
+14.622 12.278 1800
+14.674 12.237 1800
+14.725 12.218 1800
+14.775 12.224 1800
+14.826 12.256 1800
+14.877 12.253 1800
+14.880 12.251 1800
+14.929 12.237 1800
+14.979 12.184 1800
+15.019 12.130 1800
+15.058 12.079 1800
+15.081 12.028 1800
+15.100 11.977 1800
+15.108 11.927 1800
+15.113 11.888 1800
+15.110 11.874 1800
+15.107 11.822 1800
+15.102 11.768 1800
+15.089 11.717 1800
+15.072 11.665 1800
+15.049 11.614 1800
+15.016 11.563 1800
+14.989 11.512 1800
+14.960 11.460 1800
+14.946 11.409 1800
+14.996 11.408 1800
+15.050 11.442 1800
+15.100 11.462 1800
+15.158 11.480 1800
+15.217 11.491 1800
+15.272 11.500 1800
+15.323 11.515 1800
+15.375 11.520 1800
+15.427 11.526 1800
+15.480 11.531 1800
+15.530 11.536 1800
+15.582 11.524 1800
+15.633 11.500 1800
+15.683 11.462 1800
+15.733 11.410 1800
+15.777 11.358 1800
+15.824 11.307 1800
+15.877 11.269 1800
+15.929 11.231 1800
+15.980 11.194 1800
+16.030 11.147 1800
+16.034 11.146 1800
+16.088 11.151 1800
+16.139 11.121 1800
+16.182 11.069 1800
+16.218 11.019 1800
+16.251 10.963 1800
+16.274 10.913 1800
+16.295 10.860 1800
+16.313 10.805 1800
+16.329 10.753 1800
+16.344 10.700 1800
+16.355 10.647 1800
+16.368 10.596 1800
+16.382 10.543 1800
+16.395 10.491 1800
+16.408 10.439 1800
+16.424 10.386 1800
+16.443 10.334 1800
+16.455 10.282 1800
+16.462 10.230 1800
+16.464 10.178 1800
+16.465 10.127 1800
+16.466 10.075 1800
+16.464 10.023 1800
+16.463 10.014 1800
+16.432 9.969 1800
+16.406 9.917 1800
+16.394 9.865 1800
+16.379 9.812 1800
+16.363 9.760 1800
+16.343 9.706 1800
+16.327 9.654 1800
+16.354 9.604 1800
+16.359 9.553 1800
+16.348 9.503 1800
+16.338 9.453 1800
+16.355 9.403 1800
+16.371 9.348 1800
+16.378 9.291 1800
+16.378 9.241 1800
+16.376 9.191 1800
+16.367 9.135 1800
+16.358 9.079 1800
+16.346 9.027 1800
+16.336 8.976 1800
+16.328 8.922 1800
+16.378 8.881 1800
+16.432 8.892 1800
+16.484 8.863 1800
+16.531 8.809 1800
+16.582 8.768 1800
+16.634 8.741 1800
+16.685 8.732 1800
+16.738 8.710 1800
+16.789 8.720 1800
+16.846 8.736 1800
+16.902 8.758 1800
+16.956 8.788 1800
+17.009 8.805 1800
+17.062 8.812 1800
+17.116 8.831 1800
+17.167 8.835 1800
+17.223 8.842 1800
+17.274 8.859 1800
+17.327 8.865 1800
+17.381 8.863 1800
+17.432 8.847 1800
+7.479 8.369 1825
+7.480 8.370 1825
+7.531 8.322 1825
+7.586 8.289 1825
+7.637 8.279 1825
+7.690 8.285 1825
+7.741 8.270 1825
+7.783 8.219 1825
+7.839 8.194 1825
+7.896 8.193 1825
+7.946 8.193 1825
+7.999 8.174 1825
+8.022 8.124 1825
+8.035 8.073 1825
+8.067 8.019 1825
+8.117 8.013 1825
+8.168 8.029 1825
+8.221 8.014 1825
+8.272 7.995 1825
+8.328 7.988 1825
+8.378 7.979 1825
+8.431 7.976 1825
+8.481 7.974 1825
+8.532 7.961 1825
+8.585 7.955 1825
+8.638 7.946 1825
+8.691 7.947 1825
+8.692 8.001 1825
+8.671 8.051 1825
+8.648 8.105 1825
+8.627 8.160 1825
+8.608 8.211 1825
+8.584 8.262 1825
+8.547 8.315 1825
+8.509 8.369 1825
+8.473 8.423 1825
+8.443 8.479 1825
+8.420 8.529 1825
+8.398 8.579 1825
+8.376 8.633 1825
+8.359 8.686 1825
+8.341 8.738 1825
+8.322 8.796 1825
+8.304 8.850 1825
+8.283 8.905 1825
+8.229 8.961 1825
+8.179 8.995 1825
+8.124 9.049 1825
+8.087 9.100 1825
+8.062 9.153 1825
+8.037 9.205 1825
+8.017 9.261 1825
+8.003 9.312 1825
+7.990 9.366 1825
+7.984 9.418 1825
+7.983 9.471 1825
+7.988 9.523 1825
+7.996 9.578 1825
+7.984 9.630 1825
+7.933 9.647 1825
+7.881 9.694 1825
+7.827 9.718 1825
+7.774 9.752 1825
+7.725 9.804 1825
+7.685 9.855 1825
+7.655 9.905 1825
+7.621 9.960 1825
+7.591 10.013 1825
+7.558 10.066 1825
+7.529 10.117 1825
+7.496 10.168 1825
+7.451 8.509 1850
+7.452 8.506 1850
+7.503 8.496 1850
+7.554 8.469 1850
+7.604 8.430 1850
+7.658 8.413 1850
+7.708 8.418 1850
+7.760 8.398 1850
+7.812 8.366 1850
+7.866 8.355 1850
+7.919 8.355 1850
+7.972 8.335 1850
+8.023 8.298 1850
+8.074 8.244 1850
+8.129 8.224 1850
+8.179 8.201 1850
+8.229 8.162 1850
+8.281 8.143 1850
+8.332 8.131 1850
+8.388 8.121 1850
+8.443 8.126 1850
+8.451 8.178 1850
+8.407 8.230 1850
+8.375 8.286 1850
+8.351 8.337 1850
+8.329 8.389 1850
+8.322 8.447 1850
+8.316 8.503 1850
+8.285 8.554 1850
+8.249 8.604 1850
+8.215 8.655 1850
+8.185 8.707 1850
+8.162 8.760 1850
+8.136 8.811 1850
+8.094 8.862 1850
+8.054 8.919 1850
+8.026 8.970 1850
+7.993 9.020 1850
+7.955 9.071 1850
+7.932 9.121 1850
+7.903 9.175 1850
+7.876 9.230 1850
+7.863 9.283 1850
+7.855 9.339 1850
+7.852 9.393 1850
+7.853 9.446 1850
+7.856 9.497 1850
+7.862 9.548 1850
+7.863 9.600 1850
+7.811 9.633 1850
+7.758 9.667 1850
+7.705 9.701 1850
+7.658 9.753 1850
+7.635 9.804 1850
+7.583 9.831 1850
+7.559 9.882 1850
+7.532 9.934 1850
+7.493 9.984 1850
+7.450 8.731 1875
+7.449 8.731 1875
+7.500 8.683 1875
+7.552 8.647 1875
+7.605 8.611 1875
+7.655 8.579 1875
+7.711 8.564 1875
+7.767 8.553 1875
+7.821 8.526 1875
+7.871 8.497 1875
+7.929 8.490 1875
+7.980 8.483 1875
+8.033 8.463 1875
+8.086 8.431 1875
+8.140 8.399 1875
+8.167 8.450 1875
+8.149 8.505 1875
+8.126 8.562 1875
+8.101 8.615 1875
+8.068 8.671 1875
+8.033 8.727 1875
+7.999 8.781 1875
+7.969 8.834 1875
+7.936 8.886 1875
+7.899 8.939 1875
+7.865 8.991 1875
+7.827 9.047 1875
+7.793 9.101 1875
+7.764 9.154 1875
+7.740 9.204 1875
+7.726 9.255 1875
+7.727 9.305 1875
+7.733 9.355 1875
+7.732 9.406 1875
+7.740 9.460 1875
+7.757 9.510 1875
+7.715 9.563 1875
+7.665 9.600 1875
+7.614 9.621 1875
+7.567 9.672 1875
+7.513 9.719 1875
+7.462 9.766 1875
+7.456 8.988 1900
+7.455 8.987 1900
+7.493 8.934 1900
+7.533 8.873 1900
+7.559 8.822 1900
+7.611 8.776 1900
+7.665 8.731 1900
+7.715 8.722 1900
+7.766 8.705 1900
+7.816 8.675 1900
+7.867 8.655 1900
+7.919 8.639 1900
+7.972 8.617 1900
+7.961 8.673 1900
+7.934 8.726 1900
+7.901 8.782 1900
+7.865 8.835 1900
+7.831 8.885 1900
+7.794 8.938 1900
+7.755 8.994 1900
+7.733 9.046 1900
+7.704 9.098 1900
+7.669 9.153 1900
+7.640 9.204 1900
+7.621 9.258 1900
+7.615 9.311 1900
+7.613 9.363 1900
+7.612 9.415 1900
+7.603 9.470 1900
+7.566 9.520 1900
+7.516 9.558 1900
+7.467 13.055 1825
+7.484 13.054 1825
+7.518 13.115 1825
+7.556 13.170 1825
+7.597 13.221 1825
+7.632 13.274 1825
+7.667 13.328 1825
+7.694 13.381 1825
+7.704 13.434 1825
+7.706 13.488 1825
+7.701 13.543 1825
+7.709 13.594 1825
+7.720 13.646 1825
+7.726 13.697 1825
+7.744 13.748 1825
+7.779 13.799 1825
+7.824 13.854 1825
+7.867 13.907 1825
+7.867 13.958 1825
+7.894 14.012 1825
+7.946 14.049 1825
+7.987 14.101 1825
+7.999 14.154 1825
+8.001 14.208 1825
+8.029 14.260 1825
+8.081 14.290 1825
+8.083 14.341 1825
+8.102 14.392 1825
+8.154 14.424 1825
+8.175 14.477 1825
+8.191 14.530 1825
+8.223 14.583 1825
+8.249 14.636 1825
+8.254 14.690 1825
+8.247 14.740 1825
+8.239 14.792 1825
+8.223 14.844 1825
+8.208 14.896 1825
+8.208 14.949 1825
+8.201 14.999 1825
+8.150 15.035 1825
+8.131 14.985 1825
+8.080 14.970 1825
+8.029 14.921 1825
+7.979 14.889 1825
+7.929 14.858 1825
+7.922 14.807 1825
+7.872 14.766 1825
+7.845 14.715 1825
+7.849 14.664 1825
+7.816 14.611 1825
+7.833 14.558 1825
+7.843 14.506 1825
+7.818 14.453 1825
+7.767 14.411 1825
+7.715 14.372 1825
+7.718 14.322 1825
+7.705 14.271 1825
+7.654 14.231 1825
+7.671 14.177 1825
+7.674 14.126 1825
+7.644 14.076 1825
+7.628 14.025 1825
+7.624 13.975 1825
+7.613 13.925 1825
+7.583 13.872 1825
+7.551 13.822 1825
+7.497 13.777 1825
+7.713 13.908 1850
+7.712 13.907 1850
+7.764 13.925 1850
+7.780 13.979 1850
+7.785 14.029 1850
+7.786 14.079 1850
+7.842 14.116 1850
+7.878 14.167 1850
+7.883 14.221 1850
+7.908 14.272 1850
+7.948 14.325 1850
+7.986 14.375 1850
+8.036 14.395 1850
+8.055 14.449 1850
+8.077 14.502 1850
+8.117 14.553 1850
+8.127 14.606 1850
+8.130 14.660 1850
+8.126 14.710 1850
+8.124 14.760 1850
+8.134 14.813 1850
+8.082 14.860 1850
+8.031 14.827 1850
+8.009 14.775 1850
+7.955 14.727 1850
+7.913 14.677 1850
+7.910 14.627 1850
+7.901 14.573 1850
+7.909 14.523 1850
+7.933 14.471 1850
+7.930 14.419 1850
+7.878 14.401 1850
+7.836 14.351 1850
+7.821 14.301 1850
+7.793 14.243 1850
+7.741 14.191 1850
+7.722 14.137 1850
+7.722 14.083 1850
+7.715 14.033 1850
+7.697 13.982 1850
+7.455 13.956 1800
+7.453 13.955 1800
+7.497 14.007 1800
+7.534 14.060 1800
+7.543 14.111 1800
+7.558 14.164 1800
+7.543 14.217 1800
+7.532 14.267 1800
+7.585 14.310 1800
+7.617 14.361 1800
+7.619 14.411 1800
+7.671 14.446 1800
+7.722 14.466 1800
+7.774 14.516 1800
+7.793 14.570 1800
+7.779 14.620 1800
+7.751 14.670 1800
+7.754 14.721 1800
+7.745 14.771 1800
+7.799 14.798 1800
+7.850 14.825 1800
+7.835 14.877 1800
+7.834 14.929 1800
+7.888 14.954 1800
+7.942 14.970 1800
+7.995 14.993 1800
+8.028 15.044 1800
+8.033 15.094 1800
+8.083 15.116 1800
+8.136 15.133 1800
+8.188 15.165 1800
+8.235 15.215 1800
+8.267 15.269 1800
+12.754 15.297 1825
+12.754 15.298 1825
+12.794 15.247 1825
+12.846 15.214 1825
+12.900 15.204 1825
+12.953 15.191 1825
+13.008 15.168 1825
+13.061 15.134 1825
+13.107 15.083 1825
+13.154 15.033 1825
+13.191 14.983 1825
+13.242 14.943 1825
+13.296 14.918 1825
+13.346 14.902 1825
+13.398 14.885 1825
+13.449 14.862 1825
+13.500 14.831 1825
+13.556 14.787 1825
+13.608 14.739 1825
+13.658 14.692 1825
+13.711 14.644 1825
+13.762 14.603 1825
+13.812 14.562 1825
+13.866 14.518 1825
+13.916 14.483 1825
+13.968 14.441 1825
+14.021 14.397 1825
+14.075 14.361 1825
+14.128 14.309 1825
+14.167 14.253 1825
+14.188 14.202 1825
+14.203 14.149 1825
+14.227 14.094 1825
+14.249 14.044 1825
+14.272 13.992 1825
+14.289 13.940 1825
+14.303 13.886 1825
+14.317 13.831 1825
+14.338 13.777 1825
+14.361 13.725 1825
+14.382 13.673 1825
+14.404 13.622 1825
+14.425 13.572 1825
+14.445 13.519 1825
+14.469 13.465 1825
+14.486 13.413 1825
+14.493 13.361 1825
+14.506 13.311 1825
+14.509 13.258 1825
+14.512 13.207 1825
+14.504 13.157 1825
+14.488 13.107 1825
+14.489 13.102 1825
+14.459 13.054 1825
+14.429 13.002 1825
+14.409 12.949 1825
+14.402 12.899 1825
+14.401 12.848 1825
+14.418 12.796 1825
+14.442 12.745 1825
+14.470 12.693 1825
+14.488 12.640 1825
+14.490 12.590 1825
+14.538 12.540 1825
+14.560 12.489 1825
+14.611 12.446 1825
+14.661 12.415 1825
+14.712 12.419 1825
+14.763 12.424 1825
+14.813 12.413 1825
+14.821 12.416 1825
+14.867 12.410 1825
+14.918 12.393 1825
+14.969 12.349 1825
+15.023 12.309 1825
+15.075 12.277 1825
+15.122 12.223 1825
+15.162 12.170 1825
+15.187 12.120 1825
+15.208 12.068 1825
+15.218 12.017 1825
+15.222 11.967 1825
+15.223 11.916 1825
+15.220 11.863 1825
+15.216 11.815 1825
+15.211 11.813 1825
+15.197 11.762 1825
+15.176 11.711 1825
+15.140 11.661 1825
+15.097 11.610 1825
+15.067 11.558 1825
+15.121 11.544 1825
+15.174 11.571 1825
+15.225 11.591 1825
+15.282 11.605 1825
+15.343 11.620 1825
+15.396 11.636 1825
+15.449 11.660 1825
+15.499 11.684 1825
+15.550 11.698 1825
+15.604 11.706 1825
+15.654 11.693 1825
+15.705 11.667 1825
+15.757 11.630 1825
+15.808 11.586 1825
+15.859 11.539 1825
+15.912 11.497 1825
+15.960 11.446 1825
+15.985 11.396 1825
+16.037 11.364 1825
+16.087 11.383 1825
+16.110 11.397 1825
+16.144 11.398 1825
+16.195 11.390 1825
+16.248 11.355 1825
+16.302 11.315 1825
+16.345 11.261 1825
+16.381 11.209 1825
+16.410 11.155 1825
+16.431 11.103 1825
+16.457 11.051 1825
+16.478 10.996 1825
+16.496 10.946 1825
+16.515 10.892 1825
+16.531 10.841 1825
+16.552 10.786 1825
+16.570 10.735 1825
+16.585 10.681 1825
+16.600 10.629 1825
+16.612 10.577 1825
+16.624 10.524 1825
+16.629 10.471 1825
+16.630 10.417 1825
+16.641 10.365 1825
+16.641 10.311 1825
+16.636 10.258 1825
+16.618 10.207 1825
+16.601 10.164 1825
+16.598 10.157 1825
+16.598 10.102 1825
+16.591 10.051 1825
+16.564 10.001 1825
+16.548 9.949 1825
+16.530 9.893 1825
+16.517 9.843 1825
+16.503 9.789 1825
+16.489 9.739 1825
+16.471 9.687 1825
+16.480 9.636 1825
+16.497 9.580 1825
+16.473 9.527 1825
+16.466 9.473 1825
+16.501 9.423 1825
+16.516 9.369 1825
+16.515 9.314 1825
+16.510 9.259 1825
+16.499 9.205 1825
+16.503 9.153 1825
+16.539 9.103 1825
+16.593 9.068 1825
+16.644 9.048 1825
+16.696 9.008 1825
+16.740 8.956 1825
+16.791 8.915 1825
+16.844 8.885 1825
+16.902 8.892 1825
+16.960 8.906 1825
+17.012 8.921 1825
+17.070 8.941 1825
+17.128 8.961 1825
+17.181 8.976 1825
+17.232 8.983 1825
+17.285 8.993 1825
+17.341 8.990 1825
+17.394 8.984 1825
+17.444 8.983 1825
+13.279 15.298 1850
+13.272 15.292 1850
+13.327 15.255 1850
+13.379 15.217 1850
+13.430 15.182 1850
+13.482 15.160 1850
+13.533 15.129 1850
+13.586 15.101 1850
+13.637 15.070 1850
+13.690 15.039 1850
+13.740 15.009 1850
+13.791 14.977 1850
+13.833 14.927 1850
+13.865 14.868 1850
+13.889 14.817 1850
+13.920 14.766 1850
+13.948 14.715 1850
+13.983 14.665 1850
+14.036 14.611 1850
+14.088 14.563 1850
+14.140 14.527 1850
+14.191 14.495 1850
+14.241 14.470 1850
+14.292 14.445 1850
+14.339 14.392 1850
+14.361 14.338 1850
+14.376 14.285 1850
+14.391 14.234 1850
+14.408 14.183 1850
+14.425 14.130 1850
+14.438 14.079 1850
+14.449 14.028 1850
+14.471 13.972 1850
+14.488 13.918 1850
+14.512 13.866 1850
+14.540 13.813 1850
+14.574 13.762 1850
+14.593 13.710 1850
+14.620 13.660 1850
+14.641 13.608 1850
+14.685 13.552 1850
+14.718 13.500 1850
+14.736 13.450 1850
+14.733 13.396 1850
+14.735 13.345 1850
+14.719 13.299 1850
+14.714 13.288 1850
+14.705 13.237 1850
+14.692 13.183 1850
+14.673 13.129 1850
+14.651 13.076 1850
+14.608 13.022 1850
+14.566 12.969 1850
+14.579 12.919 1850
+14.560 12.867 1850
+14.558 12.811 1850
+14.553 12.758 1850
+14.577 12.707 1850
+14.629 12.676 1850
+14.680 12.692 1850
+14.730 12.719 1850
+14.780 12.738 1850
+14.791 12.743 1850
+14.832 12.740 1850
+14.869 12.690 1850
+14.909 12.638 1850
+14.962 12.599 1850
+15.015 12.570 1850
+15.066 12.525 1850
+15.117 12.475 1850
+15.154 12.425 1850
+15.180 12.372 1850
+15.222 12.322 1850
+15.269 12.271 1850
+15.301 12.216 1850
+15.309 12.164 1850
+15.322 12.114 1850
+15.329 12.062 1850
+15.315 12.012 1850
+15.300 11.960 1850
+15.292 11.908 1850
+15.284 11.858 1850
+15.278 11.852 1850
+15.271 11.806 1850
+15.321 11.766 1850
+15.372 11.777 1850
+15.422 11.792 1850
+15.476 11.807 1850
+15.527 11.822 1850
+15.577 11.833 1850
+15.630 11.840 1850
+15.683 11.841 1850
+15.735 11.826 1850
+15.788 11.802 1850
+15.839 11.767 1850
+15.891 11.722 1850
+15.944 11.683 1850
+15.995 11.655 1850
+16.035 11.636 1850
+16.046 11.643 1850
+16.097 11.664 1850
+16.147 11.676 1850
+16.201 11.677 1850
+16.256 11.670 1850
+16.308 11.663 1850
+16.362 11.646 1850
+16.417 11.634 1850
+16.468 11.614 1850
+16.518 11.562 1850
+16.549 11.510 1850
+16.569 11.456 1850
+16.584 11.402 1850
+16.601 11.345 1850
+16.625 11.292 1850
+16.650 11.236 1850
+16.670 11.183 1850
+16.685 11.133 1850
+16.703 11.079 1850
+16.715 11.028 1850
+16.727 10.975 1850
+16.734 10.921 1850
+16.739 10.869 1850
+16.737 10.818 1850
+16.734 10.794 1850
+16.730 10.768 1850
+16.731 10.718 1850
+16.736 10.665 1850
+16.744 10.612 1850
+16.745 10.557 1850
+16.739 10.505 1850
+16.732 10.453 1850
+16.730 10.398 1850
+16.739 10.345 1850
+16.731 10.290 1850
+16.705 10.240 1850
+16.687 10.186 1850
+16.686 10.133 1850
+16.684 10.080 1850
+16.684 10.023 1850
+16.677 9.970 1850
+16.665 9.917 1850
+16.653 9.863 1850
+16.634 9.811 1850
+16.618 9.757 1850
+16.620 9.706 1850
+16.630 9.651 1850
+16.619 9.599 1850
+16.592 9.548 1850
+16.594 9.493 1850
+16.623 9.438 1850
+16.650 9.381 1850
+16.651 9.328 1850
+16.670 9.275 1850
+16.723 9.230 1850
+16.774 9.207 1850
+16.824 9.189 1850
+16.875 9.167 1850
+16.907 9.115 1850
+16.961 9.077 1850
+17.012 9.075 1850
+17.063 9.084 1850
+17.115 9.087 1850
+17.169 9.093 1850
+17.221 9.103 1850
+17.273 9.109 1850
+17.324 9.111 1850
+17.377 9.109 1850
+17.427 9.108 1850
+13.589 15.298 1875
+13.589 15.298 1875
+13.643 15.253 1875
+13.687 15.202 1875
+13.725 15.151 1875
+13.775 15.111 1875
+13.826 15.089 1875
+13.879 15.063 1875
+13.920 15.010 1875
+13.972 15.003 1875
+14.022 14.972 1875
+14.074 14.921 1875
+14.114 14.869 1875
+14.165 14.826 1875
+14.217 14.773 1875
+14.255 14.722 1875
+14.288 14.672 1875
+14.302 14.620 1875
+14.301 14.569 1875
+14.308 14.518 1875
+14.331 14.466 1875
+14.365 14.415 1875
+14.410 14.363 1875
+14.459 14.312 1875
+14.502 14.258 1875
+14.526 14.204 1875
+14.565 14.151 1875
+14.611 14.100 1875
+14.639 14.049 1875
+14.676 13.998 1875
+14.705 13.948 1875
+14.726 13.895 1875
+14.744 13.844 1875
+14.791 13.793 1875
+14.812 13.740 1875
+14.840 13.688 1875
+14.845 13.638 1875
+14.853 13.584 1875
+14.856 13.530 1875
+14.851 13.480 1875
+14.848 13.429 1875
+14.847 13.377 1875
+14.848 13.325 1875
+14.846 13.270 1875
+14.841 13.220 1875
+14.855 13.169 1875
+14.868 13.119 1875
+14.896 13.068 1875
+14.925 13.014 1875
+14.955 12.963 1875
+14.993 12.912 1875
+15.037 12.861 1875
+15.080 12.810 1875
+15.129 12.759 1875
+15.179 12.705 1875
+15.230 12.658 1875
+15.282 12.607 1875
+15.324 12.556 1875
+15.360 12.506 1875
+15.384 12.455 1875
+15.411 12.402 1875
+15.429 12.351 1875
+15.458 12.301 1875
+15.499 12.251 1875
+15.520 12.200 1875
+15.531 12.148 1875
+15.542 12.096 1875
+15.542 12.046 1875
+15.540 12.044 1875
+15.593 12.028 1875
+15.645 12.021 1875
+15.697 12.009 1875
+15.750 12.002 1875
+15.805 11.996 1875
+15.855 11.992 1875
+15.882 11.989 1875
+15.906 11.994 1875
+15.958 12.003 1875
+16.012 11.994 1875
+16.063 11.963 1875
+16.114 11.949 1875
+16.164 11.943 1875
+16.224 11.949 1875
+16.280 11.955 1875
+16.334 11.956 1875
+16.387 11.954 1875
+16.439 11.960 1875
+16.491 11.965 1875
+16.544 11.965 1875
+16.597 11.958 1875
+16.650 11.931 1875
+16.703 11.882 1875
+16.736 11.827 1875
+16.757 11.771 1875
+16.773 11.715 1875
+16.792 11.665 1875
+16.808 11.614 1875
+16.824 11.553 1875
+16.839 11.497 1875
+16.859 11.444 1875
+16.874 11.391 1875
+16.892 11.339 1875
+16.913 11.289 1875
+16.915 11.238 1875
+16.918 11.184 1875
+16.914 11.131 1875
+16.907 11.074 1875
+16.904 11.024 1875
+16.891 10.970 1875
+16.882 10.917 1875
+16.880 10.866 1875
+16.867 10.814 1875
+16.839 10.719 1875
+16.837 10.719 1875
+16.825 10.667 1875
+16.854 10.616 1875
+16.859 10.566 1875
+16.840 10.514 1875
+16.830 10.464 1875
+16.826 10.411 1875
+16.835 10.360 1875
+16.839 10.308 1875
+16.824 10.258 1875
+16.804 10.202 1875
+16.788 10.148 1875
+16.782 10.094 1875
+16.777 10.043 1875
+16.764 9.992 1875
+16.771 9.942 1875
+16.757 9.886 1875
+16.751 9.834 1875
+16.738 9.781 1875
+16.712 9.725 1875
+16.707 9.674 1875
+16.712 9.623 1875
+16.707 9.572 1875
+16.761 9.526 1875
+16.814 9.503 1875
+16.870 9.478 1875
+16.922 9.463 1875
+16.974 9.420 1875
+17.021 9.366 1875
+17.058 9.315 1875
+17.109 9.279 1875
+17.163 9.257 1875
+17.215 9.248 1875
+17.267 9.242 1875
+17.322 9.238 1875
+17.377 9.232 1875
+17.427 9.219 1875
+13.932 15.305 1900
+13.931 15.305 1900
+13.961 15.253 1900
+13.992 15.203 1900
+14.025 15.151 1900
+14.049 15.100 1900
+14.087 15.050 1900
+14.140 15.008 1900
+14.195 14.979 1900
+14.248 14.946 1900
+14.299 14.907 1900
+14.335 14.854 1900
+14.353 14.803 1900
+14.356 14.753 1900
+14.351 14.699 1900
+14.346 14.648 1900
+14.344 14.596 1900
+14.350 14.545 1900
+14.365 14.492 1900
+14.392 14.442 1900
+14.442 14.404 1900
+14.492 14.376 1900
+14.544 14.355 1900
+14.597 14.336 1900
+14.645 14.284 1900
+14.681 14.231 1900
+14.708 14.180 1900
+14.743 14.127 1900
+14.779 14.077 1900
+14.822 14.025 1900
+14.861 13.973 1900
+14.898 13.923 1900
+14.915 13.871 1900
+14.916 13.846 1900
+14.926 13.812 1900
+14.936 13.760 1900
+14.941 13.707 1900
+14.952 13.657 1900
+14.965 13.607 1900
+14.986 13.555 1900
+15.037 13.512 1900
+15.042 13.512 1900
+15.068 13.460 1900
+15.102 13.406 1900
+15.120 13.350 1900
+15.144 13.298 1900
+15.175 13.245 1900
+15.208 13.189 1900
+15.238 13.133 1900
+15.271 13.077 1900
+15.303 13.020 1900
+15.339 12.969 1900
+15.375 12.912 1900
+15.411 12.862 1900
+15.452 12.812 1900
+15.485 12.760 1900
+15.519 12.706 1900
+15.549 12.652 1900
+15.580 12.600 1900
+15.633 12.574 1900
+15.685 12.552 1900
+15.717 12.500 1900
+15.721 12.478 1900
+15.726 12.450 1900
+15.723 12.397 1900
+15.707 12.344 1900
+15.689 12.294 1900
+15.670 12.241 1900
+15.667 12.190 1900
+15.719 12.143 1900
+15.770 12.137 1900
+15.821 12.147 1900
+15.871 12.165 1900
+15.922 12.193 1900
+15.973 12.214 1900
+16.028 12.232 1900
+16.079 12.243 1900
+16.080 12.324 1900
+16.080 12.325 1900
+16.132 12.324 1900
+16.187 12.310 1900
+16.239 12.303 1900
+16.292 12.302 1900
+16.344 12.291 1900
+16.398 12.283 1900
+16.450 12.282 1900
+16.506 12.276 1900
+16.557 12.258 1900
+16.609 12.237 1900
+16.666 12.208 1900
+16.718 12.171 1900
+16.772 12.121 1900
+16.825 12.075 1900
+16.866 12.024 1900
+16.913 11.970 1900
+16.946 11.915 1900
+16.979 11.863 1900
+16.999 11.808 1900
+17.008 11.754 1900
+17.013 11.701 1900
+17.027 11.647 1900
+17.046 11.594 1900
+17.048 11.538 1900
+17.056 11.484 1900
+17.062 11.426 1900
+17.069 11.375 1900
+17.073 11.319 1900
+17.074 11.268 1900
+17.073 11.218 1900
+17.074 11.165 1900
+17.073 11.114 1900
+17.066 11.061 1900
+17.055 11.006 1900
+17.043 10.955 1900
+17.021 10.899 1900
+17.007 10.847 1900
+17.009 10.795 1900
+16.988 10.744 1900
+16.976 10.692 1900
+16.967 10.638 1900
+16.959 10.585 1900
+16.963 10.532 1900
+16.962 10.532 1900
+16.938 10.482 1900
+16.932 10.432 1900
+16.961 10.376 1900
+16.970 10.325 1900
+16.966 10.270 1900
+16.952 10.216 1900
+16.955 10.165 1900
+16.942 10.111 1900
+16.924 10.057 1900
+16.874 10.033 1900
+16.875 9.982 1900
+16.906 9.931 1900
+16.896 9.881 1900
+16.844 9.843 1900
+16.822 9.793 1900
+16.818 9.738 1900
+16.837 9.686 1900
+16.881 9.633 1900
+16.933 9.613 1900
+16.988 9.580 1900
+17.044 9.578 1900
+17.099 9.563 1900
+17.153 9.534 1900
+17.207 9.487 1900
+17.261 9.465 1900
+17.313 9.432 1900
+17.365 9.385 1900
+17.416 9.358 1900
+14.160 15.307 1925
+14.162 15.315 1925
+14.208 15.264 1925
+14.238 15.210 1925
+14.285 15.158 1925
+14.329 15.107 1925
+14.361 15.056 1925
+14.367 15.006 1925
+14.368 14.955 1925
+14.363 14.936 1925
+14.363 14.901 1925
+14.415 14.855 1925
+14.432 14.805 1925
+14.391 14.753 1925
+14.382 14.701 1925
+14.382 14.650 1925
+14.394 14.599 1925
+14.405 14.547 1925
+14.436 14.497 1925
+14.486 14.449 1925
+14.537 14.422 1925
+14.587 14.406 1925
+14.639 14.391 1925
+14.689 14.369 1925
+14.737 14.318 1925
+14.777 14.267 1925
+14.822 14.215 1925
+14.871 14.163 1925
+14.909 14.110 1925
+14.939 14.057 1925
+14.965 14.005 1925
+14.989 13.953 1925
+15.000 13.903 1925
+15.020 13.849 1925
+15.052 13.796 1925
+15.081 13.745 1925
+15.093 13.691 1925
+15.097 13.641 1925
+15.135 13.591 1925
+15.187 13.597 1925
+15.209 13.518 1925
+15.216 13.539 1925
+15.268 13.518 1925
+15.318 13.488 1925
+15.370 13.437 1925
+15.422 13.384 1925
+15.473 13.334 1925
+15.524 13.284 1925
+15.575 13.232 1925
+15.617 13.182 1925
+15.659 13.130 1925
+15.703 13.079 1925
+15.738 13.026 1925
+15.771 12.972 1925
+15.797 12.922 1925
+15.820 12.871 1925
+15.841 12.820 1925
+15.861 12.767 1925
+15.872 12.714 1925
+15.874 12.664 1925
+15.872 12.614 1925
+15.856 12.558 1925
+15.855 12.557 1925
+15.827 12.506 1925
+15.806 12.453 1925
+15.792 12.397 1925
+15.808 12.346 1925
+15.858 12.343 1925
+15.912 12.376 1925
+15.966 12.399 1925
+16.020 12.416 1925
+16.079 12.426 1925
+16.130 12.436 1925
+16.183 12.438 1925
+16.239 12.436 1925
+16.294 12.437 1925
+16.348 12.441 1925
+16.399 12.439 1925
+16.449 12.439 1925
+16.504 12.435 1925
+16.557 12.426 1925
+16.607 12.410 1925
+16.658 12.379 1925
+16.713 12.341 1925
+16.765 12.303 1925
+16.818 12.270 1925
+16.871 12.244 1925
+16.922 12.217 1925
+16.974 12.182 1925
+17.026 12.130 1925
+17.046 12.076 1925
+17.043 12.075 1925
+17.087 12.022 1925
+17.109 11.969 1925
+17.119 11.919 1925
+17.126 11.868 1925
+17.136 11.817 1925
+17.151 11.762 1925
+17.161 11.706 1925
+17.171 11.653 1925
+17.176 11.597 1925
+17.181 11.547 1925
+17.187 11.495 1925
+17.190 11.445 1925
+17.190 11.391 1925
+17.193 11.341 1925
+17.196 11.285 1925
+17.202 11.234 1925
+17.199 11.182 1925
+17.190 11.131 1925
+17.183 11.075 1925
+17.175 11.020 1925
+17.171 10.967 1925
+17.170 10.914 1925
+17.163 10.862 1925
+17.153 10.808 1925
+17.144 10.752 1925
+17.135 10.693 1925
+17.126 10.636 1925
+17.117 10.584 1925
+17.107 10.533 1925
+17.095 10.483 1925
+17.096 10.486 1925
+17.073 10.432 1925
+17.086 10.381 1925
+17.108 10.330 1925
+17.106 10.279 1925
+17.094 10.229 1925
+17.068 10.178 1925
+17.076 10.128 1925
+17.065 10.077 1925
+17.040 10.023 1925
+17.019 9.968 1925
+16.999 9.915 1925
+16.986 9.865 1925
+16.981 9.814 1925
+17.033 9.766 1925
+17.087 9.721 1925
+17.133 9.670 1925
+17.186 9.628 1925
+17.240 9.614 1925
+17.292 9.601 1925
+17.343 9.579 1925
+17.394 9.539 1925
+17.431 9.489 1925
+14.411 15.289 1950
+14.415 15.295 1950
+14.431 15.243 1950
+14.459 15.191 1950
+14.489 15.139 1950
+14.496 15.088 1950
+14.492 15.036 1950
+14.486 15.013 1950
+14.480 14.986 1950
+14.530 14.949 1950
+14.526 14.899 1950
+14.540 14.849 1950
+14.558 14.798 1950
+14.508 14.757 1950
+14.468 14.706 1950
+14.466 14.656 1950
+14.484 14.604 1950
+14.516 14.552 1950
+14.566 14.518 1950
+14.617 14.515 1950
+14.668 14.506 1950
+14.706 14.456 1950
+14.757 14.424 1950
+14.795 14.374 1950
+14.847 14.342 1950
+14.898 14.318 1950
+14.933 14.268 1950
+14.948 14.217 1950
+14.962 14.164 1950
+14.985 14.113 1950
+14.994 14.063 1950
+15.025 14.013 1950
+15.061 13.962 1950
+15.106 13.912 1950
+15.134 13.861 1950
+15.153 13.811 1950
+15.168 13.759 1950
+15.220 13.717 1950
+15.271 13.701 1950
+15.322 13.647 1950
+15.375 13.636 1950
+15.428 13.638 1950
+15.482 13.626 1950
+15.532 13.604 1950
+15.582 13.574 1950
+15.634 13.540 1950
+15.684 13.506 1950
+15.734 13.464 1950
+15.781 13.411 1950
+15.820 13.358 1950
+15.852 13.305 1950
+15.874 13.255 1950
+15.895 13.205 1950
+15.926 13.154 1950
+15.936 13.104 1950
+15.941 13.054 1950
+15.945 13.003 1950
+15.944 12.953 1950
+15.940 12.902 1950
+15.936 12.849 1950
+15.948 12.798 1950
+15.960 12.746 1950
+15.955 12.696 1950
+15.942 12.645 1950
+15.949 12.594 1950
+15.999 12.562 1950
+16.049 12.569 1950
+16.102 12.585 1950
+16.156 12.591 1950
+16.213 12.603 1950
+16.267 12.600 1950
+16.321 12.597 1950
+16.375 12.591 1950
+16.430 12.576 1950
+16.484 12.573 1950
+16.539 12.570 1950
+16.590 12.544 1950
+16.641 12.513 1950
+16.693 12.485 1950
+16.746 12.452 1950
+16.798 12.424 1950
+16.849 12.393 1950
+16.902 12.349 1950
+16.946 12.298 1950
+16.995 12.248 1950
+17.046 12.217 1950
+17.096 12.174 1950
+17.121 12.124 1950
+17.147 12.074 1950
+17.181 12.023 1950
+17.224 11.970 1950
+17.246 11.922 1950
+17.244 11.919 1950
+17.253 11.866 1950
+17.262 11.815 1950
+17.276 11.759 1950
+17.291 11.707 1950
+17.309 11.654 1950
+17.310 11.599 1950
+17.317 11.546 1950
+17.327 11.495 1950
+17.318 11.445 1950
+17.305 11.393 1950
+17.296 11.341 1950
+17.291 11.288 1950
+17.294 11.237 1950
+17.290 11.187 1950
+17.269 11.130 1950
+17.263 11.079 1950
+17.280 11.027 1950
+17.290 10.972 1950
+17.291 10.920 1950
+17.287 10.866 1950
+17.281 10.811 1950
+17.270 10.757 1950
+17.263 10.707 1950
+17.247 10.653 1950
+17.236 10.601 1950
+17.234 10.548 1950
+17.247 10.497 1950
+17.249 10.445 1950
+17.229 10.393 1950
+17.216 10.343 1950
+17.228 10.290 1950
+17.223 10.236 1950
+17.211 10.186 1950
+17.199 10.135 1950
+17.180 10.074 1950
+17.180 10.077 1950
+17.130 10.069 1950
+17.096 10.010 1950
+17.093 9.959 1950
+17.109 9.906 1950
+17.153 9.852 1950
+17.204 9.813 1950
+17.257 9.780 1950
+17.308 9.747 1950
+17.360 9.705 1950
+17.411 9.665 1950
+14.626 15.289 1975
+14.626 15.289 1975
+14.660 15.238 1975
+14.659 15.188 1975
+14.661 15.135 1975
+14.673 15.083 1975
+14.663 15.033 1975
+14.644 14.983 1975
+14.648 14.952 1975
+14.638 14.932 1975
+14.654 14.880 1975
+14.622 14.825 1975
+14.630 14.771 1975
+14.591 14.720 1975
+14.583 14.668 1975
+14.637 14.630 1975
+14.687 14.612 1975
+14.726 14.560 1975
+14.778 14.513 1975
+14.828 14.469 1975
+14.879 14.460 1975
+14.932 14.441 1975
+14.956 14.390 1975
+14.969 14.338 1975
+15.010 14.288 1975
+15.041 14.236 1975
+15.069 14.186 1975
+15.065 14.134 1975
+15.053 14.084 1975
+15.055 14.030 1975
+15.094 13.980 1975
+15.146 13.965 1975
+15.197 13.941 1975
+15.242 13.888 1975
+15.272 13.838 1975
+15.317 13.787 1975
+15.368 13.753 1975
+15.418 13.737 1975
+15.471 13.719 1975
+15.522 13.692 1975
+15.576 13.656 1975
+15.626 13.624 1975
+15.679 13.597 1975
+15.731 13.565 1975
+15.784 13.530 1975
+15.806 13.480 1975
+15.837 13.429 1975
+15.888 13.383 1975
+15.939 13.351 1975
+15.970 13.300 1975
+15.985 13.249 1975
+16.003 13.198 1975
+16.018 13.144 1975
+16.028 13.087 1975
+16.035 13.035 1975
+16.041 12.981 1975
+16.047 12.927 1975
+16.049 12.872 1975
+16.042 12.820 1975
+16.047 12.765 1975
+16.072 12.715 1975
+16.123 12.705 1975
+16.176 12.705 1975
+16.229 12.710 1975
+16.282 12.712 1975
+16.332 12.711 1975
+16.385 12.706 1975
+16.437 12.699 1975
+16.493 12.686 1975
+16.546 12.676 1975
+16.598 12.668 1975
+16.653 12.657 1975
+16.705 12.641 1975
+16.759 12.620 1975
+16.812 12.591 1975
+16.862 12.537 1975
+16.902 12.486 1975
+16.945 12.431 1975
+16.988 12.378 1975
+17.037 12.325 1975
+17.089 12.274 1975
+17.136 12.224 1975
+17.179 12.170 1975
+17.213 12.117 1975
+17.243 12.064 1975
+17.274 12.013 1975
+17.304 11.962 1975
+17.337 11.909 1975
+17.364 11.855 1975
+17.383 11.805 1975
+17.398 11.755 1975
+17.413 11.704 1975
+17.450 11.591 1975
+17.446 11.589 1975
+17.443 11.534 1975
+17.439 11.483 1975
+17.434 11.431 1975
+17.425 11.377 1975
+17.418 11.325 1975
+17.412 11.274 1975
+17.408 11.221 1975
+17.405 11.169 1975
+17.401 11.119 1975
+17.402 11.066 1975
+17.416 11.015 1975
+17.427 10.963 1975
+17.434 10.908 1975
+17.430 10.858 1975
+17.424 10.808 1975
+17.416 10.757 1975
+17.401 10.698 1975
+17.383 10.643 1975
+17.370 10.592 1975
+17.356 10.541 1975
+17.349 10.490 1975
+17.351 10.439 1975
+17.357 10.388 1975
+17.358 10.337 1975
+17.357 10.283 1975
+17.349 10.223 1975
+17.337 10.171 1975
+17.316 10.119 1975
+17.289 10.068 1975
+17.257 10.017 1975
+14.804 15.269 2000
+14.803 15.271 2000
+14.806 15.217 2000
+14.803 15.167 2000
+14.794 15.116 2000
+14.772 15.050 2000
+14.771 15.052 2000
+14.767 15.001 2000
+14.741 14.951 2000
+14.730 14.898 2000
+14.720 14.846 2000
+14.715 14.795 2000
+14.750 14.744 2000
+14.788 14.694 2000
+14.785 14.644 2000
+14.805 14.592 2000
+14.855 14.563 2000
+14.907 14.582 2000
+14.959 14.565 2000
+15.008 14.512 2000
+15.008 14.458 2000
+15.007 14.405 2000
+15.005 14.355 2000
+15.056 14.302 2000
+15.107 14.288 2000
+15.157 14.264 2000
+15.202 14.211 2000
+15.158 14.160 2000
+15.153 14.109 2000
+15.203 14.088 2000
+15.229 14.035 2000
+15.237 13.981 2000
+15.256 13.929 2000
+15.309 13.906 2000
+15.360 13.900 2000
+15.392 13.848 2000
+15.444 13.803 2000
+15.495 13.785 2000
+15.546 13.784 2000
+15.596 13.771 2000
+15.631 13.720 2000
+15.683 13.701 2000
+15.736 13.691 2000
+15.787 13.661 2000
+15.839 13.613 2000
+15.889 13.576 2000
+15.939 13.537 2000
+15.991 13.489 2000
+16.040 13.434 2000
+16.080 13.384 2000
+16.102 13.331 2000
+16.123 13.278 2000
+16.141 13.228 2000
+16.153 13.176 2000
+16.155 13.121 2000
+16.162 13.066 2000
+16.164 13.012 2000
+16.166 12.960 2000
+16.167 12.908 2000
+16.176 12.858 2000
+16.227 12.881 2000
+16.281 12.896 2000
+16.335 12.891 2000
+16.390 12.880 2000
+16.441 12.863 2000
+16.492 12.852 2000
+16.545 12.845 2000
+16.546 12.898 2000
+16.496 12.949 2000
+16.456 13.000 2000
+16.424 13.053 2000
+16.403 13.108 2000
+16.379 13.160 2000
+16.323 13.207 2000
+16.272 13.236 2000
+16.227 13.289 2000
+16.203 13.341 2000
+16.181 13.392 2000
+16.156 13.443 2000
+16.126 13.496 2000
+16.095 13.549 2000
+16.066 13.600 2000
+16.041 13.652 2000
+16.015 13.706 2000
+15.995 13.758 2000
+15.975 13.813 2000
+15.963 13.864 2000
+15.960 13.915 2000
+15.956 13.965 2000
+15.952 14.019 2000
+15.944 14.069 2000
+15.932 14.121 2000
+15.922 14.175 2000
+15.915 14.227 2000
+15.905 14.282 2000
+15.895 14.335 2000
+15.891 14.385 2000
+15.894 14.436 2000
+15.945 14.486 2000
+15.215 15.242 2100
+15.211 15.242 2100
+15.160 15.210 2100
+15.149 15.156 2100
+15.155 15.103 2100
+15.155 15.050 2100
+15.114 14.999 2100
+15.101 14.946 2100
+15.151 14.907 2100
+15.160 14.856 2100
+15.210 14.832 2100
+15.260 14.789 2100
+15.311 14.755 2100
+15.336 14.808 2100
+15.321 14.858 2100
+15.316 14.911 2100
+15.320 14.962 2100
+15.321 15.013 2100
+15.328 15.067 2100
+15.329 15.117 2100
+15.300 15.169 2100
+15.249 15.208 2100
+15.198 15.230 2100
diff --git a/include/Makefile.am b/include/Makefile.am
new file mode 100644
index 0000000..b5fb86b
--- /dev/null
+++ b/include/Makefile.am
@@ -0,0 +1,3 @@
+include_HEADERS = nfft3.h nfft3util.h nfft3conf.h
+
+EXTRA_DIST = infft.h cycle.h api.h
diff --git a/include/Makefile.in b/include/Makefile.in
new file mode 100644
index 0000000..0ad727d
--- /dev/null
+++ b/include/Makefile.in
@@ -0,0 +1,560 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = include
+DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+ $(srcdir)/nfft3conf.h.in $(srcdir)/ticks.h.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = nfft3conf.h ticks.h
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(includedir)"
+HEADERS = $(include_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+include_HEADERS = nfft3.h nfft3util.h nfft3conf.h
+EXTRA_DIST = infft.h cycle.h api.h
+all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu include/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+ @if test ! -f $@; then rm -f stamp-h1; else :; fi
+ @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status include/config.h
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+nfft3conf.h: $(top_builddir)/config.status $(srcdir)/nfft3conf.h.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+ticks.h: $(top_builddir)/config.status $(srcdir)/ticks.h.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-includeHEADERS: $(include_HEADERS)
+ @$(NORMAL_INSTALL)
+ @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
+ done
+
+uninstall-includeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS) config.h
+installdirs:
+ for dir in "$(DESTDIR)$(includedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-includeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-includeHEADERS
+
+.MAKE: all install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool cscopelist ctags distclean distclean-generic \
+ distclean-hdr distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-includeHEADERS install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags uninstall uninstall-am uninstall-includeHEADERS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/include/api.h b/include/api.h
new file mode 100644
index 0000000..4eb2476
--- /dev/null
+++ b/include/api.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: infft.h 3483 2010-04-23 19:02:34Z keiner $ */
+
+#ifndef __API_H__
+#define __API_H__
+
+#include "nfft3.h"
+#include "infft.h"
+
+#endif /* __API_H__ */
diff --git a/include/config.h.in b/include/config.h.in
new file mode 100644
index 0000000..e02b17d
--- /dev/null
+++ b/include/config.h.in
@@ -0,0 +1,2067 @@
+/* include/config.h.in. Generated from configure.ac by autoheader. */
+
+/* Define to enable Dirac delta window function. */
+#undef B_SPLINE
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+ systems. This function is required for `alloca.c' support on those systems.
+ */
+#undef CRAY_STACKSEG_END
+
+/* Define to 1 if using `alloca.c'. */
+#undef C_ALLOCA
+
+/* Define to enable Gaussian window function. */
+#undef GAUSSIAN
+
+/* Define to 1 if you have the `abort' function. */
+#undef HAVE_ABORT
+
+/* Define to 1 if you have the `acos' function. */
+#undef HAVE_ACOS
+
+/* Define to 1 if you have the `acosf' function. */
+#undef HAVE_ACOSF
+
+/* Define to 1 if you have the `acosh' function. */
+#undef HAVE_ACOSH
+
+/* Define to 1 if you have the `acoshf' function. */
+#undef HAVE_ACOSHF
+
+/* Define to 1 if you have the `acoshl' function. */
+#undef HAVE_ACOSHL
+
+/* Define to 1 if you have the `acosl' function. */
+#undef HAVE_ACOSL
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#undef HAVE_ALLOCA
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+ */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if you have the `asin' function. */
+#undef HAVE_ASIN
+
+/* Define to 1 if you have the `asinf' function. */
+#undef HAVE_ASINF
+
+/* Define to 1 if you have the `asinh' function. */
+#undef HAVE_ASINH
+
+/* Define to 1 if you have the `asinhf' function. */
+#undef HAVE_ASINHF
+
+/* Define to 1 if you have the `asinhl' function. */
+#undef HAVE_ASINHL
+
+/* Define to 1 if you have the `asinl' function. */
+#undef HAVE_ASINL
+
+/* Define to 1 if you have the `atan' function. */
+#undef HAVE_ATAN
+
+/* Define to 1 if you have the `atan2' function. */
+#undef HAVE_ATAN2
+
+/* Define to 1 if you have the `atan2f' function. */
+#undef HAVE_ATAN2F
+
+/* Define to 1 if you have the `atan2l' function. */
+#undef HAVE_ATAN2L
+
+/* Define to 1 if you have the `atanf' function. */
+#undef HAVE_ATANF
+
+/* Define to 1 if you have the `atanh' function. */
+#undef HAVE_ATANH
+
+/* Define to 1 if you have the `atanhf' function. */
+#undef HAVE_ATANHF
+
+/* Define to 1 if you have the `atanhl' function. */
+#undef HAVE_ATANHL
+
+/* Define to 1 if you have the `atanl' function. */
+#undef HAVE_ATANL
+
+/* Define to 1 if you have the `cabs' function. */
+#undef HAVE_CABS
+
+/* Define to 1 if you have the `cabsf' function. */
+#undef HAVE_CABSF
+
+/* Define to 1 if you have the `cabsl' function. */
+#undef HAVE_CABSL
+
+/* Define to 1 if you have the `cacos' function. */
+#undef HAVE_CACOS
+
+/* Define to 1 if you have the `cacosf' function. */
+#undef HAVE_CACOSF
+
+/* Define to 1 if you have the `cacosh' function. */
+#undef HAVE_CACOSH
+
+/* Define to 1 if you have the `cacoshf' function. */
+#undef HAVE_CACOSHF
+
+/* Define to 1 if you have the `cacoshl' function. */
+#undef HAVE_CACOSHL
+
+/* Define to 1 if you have the `cacosl' function. */
+#undef HAVE_CACOSL
+
+/* Define to 1 if you have the `carg' function. */
+#undef HAVE_CARG
+
+/* Define to 1 if you have the `cargf' function. */
+#undef HAVE_CARGF
+
+/* Define to 1 if you have the `cargl' function. */
+#undef HAVE_CARGL
+
+/* Define to 1 if you have the `casin' function. */
+#undef HAVE_CASIN
+
+/* Define to 1 if you have the `casinf' function. */
+#undef HAVE_CASINF
+
+/* Define to 1 if you have the `casinh' function. */
+#undef HAVE_CASINH
+
+/* Define to 1 if you have the `casinhf' function. */
+#undef HAVE_CASINHF
+
+/* Define to 1 if you have the `casinhl' function. */
+#undef HAVE_CASINHL
+
+/* Define to 1 if you have the `casinl' function. */
+#undef HAVE_CASINL
+
+/* Define to 1 if you have the `catan' function. */
+#undef HAVE_CATAN
+
+/* Define to 1 if you have the `catanf' function. */
+#undef HAVE_CATANF
+
+/* Define to 1 if you have the `catanh' function. */
+#undef HAVE_CATANH
+
+/* Define to 1 if you have the `catanhf' function. */
+#undef HAVE_CATANHF
+
+/* Define to 1 if you have the `catanhl' function. */
+#undef HAVE_CATANHL
+
+/* Define to 1 if you have the `catanl' function. */
+#undef HAVE_CATANL
+
+/* Define to 1 if you have the `cbrt' function. */
+#undef HAVE_CBRT
+
+/* Define to 1 if you have the `cbrtf' function. */
+#undef HAVE_CBRTF
+
+/* Define to 1 if you have the `cbrtl' function. */
+#undef HAVE_CBRTL
+
+/* Define to 1 if you have the `ccos' function. */
+#undef HAVE_CCOS
+
+/* Define to 1 if you have the `ccosf' function. */
+#undef HAVE_CCOSF
+
+/* Define to 1 if you have the `ccosh' function. */
+#undef HAVE_CCOSH
+
+/* Define to 1 if you have the `ccoshf' function. */
+#undef HAVE_CCOSHF
+
+/* Define to 1 if you have the `ccoshl' function. */
+#undef HAVE_CCOSHL
+
+/* Define to 1 if you have the `ccosl' function. */
+#undef HAVE_CCOSL
+
+/* Define to 1 if you have the `ceil' function. */
+#undef HAVE_CEIL
+
+/* Define to 1 if you have the `ceilf' function. */
+#undef HAVE_CEILF
+
+/* Define to 1 if you have the `ceill' function. */
+#undef HAVE_CEILL
+
+/* Define to 1 if you have the `cexp' function. */
+#undef HAVE_CEXP
+
+/* Define to 1 if you have the `cexpf' function. */
+#undef HAVE_CEXPF
+
+/* Define to 1 if you have the `cexpl' function. */
+#undef HAVE_CEXPL
+
+/* Define to 1 if you have the `cimag' function. */
+#undef HAVE_CIMAG
+
+/* Define to 1 if you have the `cimagf' function. */
+#undef HAVE_CIMAGF
+
+/* Define to 1 if you have the `cimagl' function. */
+#undef HAVE_CIMAGL
+
+/* Define to 1 if you have the `clock_gettime' function. */
+#undef HAVE_CLOCK_GETTIME
+
+/* Define to 1 if you have the `clog' function. */
+#undef HAVE_CLOG
+
+/* Define to 1 if you have the `clogf' function. */
+#undef HAVE_CLOGF
+
+/* Define to 1 if you have the `clogl' function. */
+#undef HAVE_CLOGL
+
+/* Define to 1 if you have the <complex.h> header file. */
+#undef HAVE_COMPLEX_H
+
+/* Define to 1 if you have the `conj' function. */
+#undef HAVE_CONJ
+
+/* Define to 1 if you have the `conjf' function. */
+#undef HAVE_CONJF
+
+/* Define to 1 if you have the `conjl' function. */
+#undef HAVE_CONJL
+
+/* Define to 1 if you have the `copysign' function. */
+#undef HAVE_COPYSIGN
+
+/* Define to 1 if you have the `copysignf' function. */
+#undef HAVE_COPYSIGNF
+
+/* Define to 1 if you have the `copysignl' function. */
+#undef HAVE_COPYSIGNL
+
+/* Define to 1 if you have the `cos' function. */
+#undef HAVE_COS
+
+/* Define to 1 if you have the `cosf' function. */
+#undef HAVE_COSF
+
+/* Define to 1 if you have the `cosh' function. */
+#undef HAVE_COSH
+
+/* Define to 1 if you have the `coshf' function. */
+#undef HAVE_COSHF
+
+/* Define to 1 if you have the `coshl' function. */
+#undef HAVE_COSHL
+
+/* Define to 1 if you have the `cosl' function. */
+#undef HAVE_COSL
+
+/* Define to 1 if you have the `cpow' function. */
+#undef HAVE_CPOW
+
+/* Define to 1 if you have the `cpowf' function. */
+#undef HAVE_CPOWF
+
+/* Define to 1 if you have the `cpowl' function. */
+#undef HAVE_CPOWL
+
+/* Define to 1 if you have the `cproj' function. */
+#undef HAVE_CPROJ
+
+/* Define to 1 if you have the `cprojf' function. */
+#undef HAVE_CPROJF
+
+/* Define to 1 if you have the `cprojl' function. */
+#undef HAVE_CPROJL
+
+/* Define to 1 if you have the `creal' function. */
+#undef HAVE_CREAL
+
+/* Define to 1 if you have the `crealf' function. */
+#undef HAVE_CREALF
+
+/* Define to 1 if you have the `creall' function. */
+#undef HAVE_CREALL
+
+/* Define to 1 if you have the `csin' function. */
+#undef HAVE_CSIN
+
+/* Define to 1 if you have the `csinf' function. */
+#undef HAVE_CSINF
+
+/* Define to 1 if you have the `csinh' function. */
+#undef HAVE_CSINH
+
+/* Define to 1 if you have the `csinhf' function. */
+#undef HAVE_CSINHF
+
+/* Define to 1 if you have the `csinhl' function. */
+#undef HAVE_CSINHL
+
+/* Define to 1 if you have the `csinl' function. */
+#undef HAVE_CSINL
+
+/* Define to 1 if you have the `csqrt' function. */
+#undef HAVE_CSQRT
+
+/* Define to 1 if you have the `csqrtf' function. */
+#undef HAVE_CSQRTF
+
+/* Define to 1 if you have the `csqrtl' function. */
+#undef HAVE_CSQRTL
+
+/* Define to 1 if you have the `ctan' function. */
+#undef HAVE_CTAN
+
+/* Define to 1 if you have the `ctanf' function. */
+#undef HAVE_CTANF
+
+/* Define to 1 if you have the `ctanh' function. */
+#undef HAVE_CTANH
+
+/* Define to 1 if you have the `ctanhf' function. */
+#undef HAVE_CTANHF
+
+/* Define to 1 if you have the `ctanhl' function. */
+#undef HAVE_CTANHL
+
+/* Define to 1 if you have the `ctanl' function. */
+#undef HAVE_CTANL
+
+/* Define to 1 if you have the <c_asm.h> header file. */
+#undef HAVE_C_ASM_H
+
+/* Define to 1 if you have the declaration of `acos', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ACOS
+
+/* Define to 1 if you have the declaration of `acosf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ACOSF
+
+/* Define to 1 if you have the declaration of `acosh', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ACOSH
+
+/* Define to 1 if you have the declaration of `acoshf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ACOSHF
+
+/* Define to 1 if you have the declaration of `acoshl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ACOSHL
+
+/* Define to 1 if you have the declaration of `acosl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ACOSL
+
+/* Define to 1 if you have the declaration of `asin', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ASIN
+
+/* Define to 1 if you have the declaration of `asinf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ASINF
+
+/* Define to 1 if you have the declaration of `asinh', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ASINH
+
+/* Define to 1 if you have the declaration of `asinhf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ASINHF
+
+/* Define to 1 if you have the declaration of `asinhl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ASINHL
+
+/* Define to 1 if you have the declaration of `asinl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ASINL
+
+/* Define to 1 if you have the declaration of `atan', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ATAN
+
+/* Define to 1 if you have the declaration of `atan2', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ATAN2
+
+/* Define to 1 if you have the declaration of `atan2f', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ATAN2F
+
+/* Define to 1 if you have the declaration of `atan2l', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ATAN2L
+
+/* Define to 1 if you have the declaration of `atanf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ATANF
+
+/* Define to 1 if you have the declaration of `atanh', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ATANH
+
+/* Define to 1 if you have the declaration of `atanhf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ATANHF
+
+/* Define to 1 if you have the declaration of `atanhl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ATANHL
+
+/* Define to 1 if you have the declaration of `atanl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ATANL
+
+/* Define to 1 if you have the declaration of `cabs', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CABS
+
+/* Define to 1 if you have the declaration of `cabsl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CABSL
+
+/* Define to 1 if you have the declaration of `cacos', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CACOS
+
+/* Define to 1 if you have the declaration of `cacosf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CACOSF
+
+/* Define to 1 if you have the declaration of `cacosh', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CACOSH
+
+/* Define to 1 if you have the declaration of `cacoshf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_CACOSHF
+
+/* Define to 1 if you have the declaration of `cacoshl', and to 0 if you
+ don't. */
+#undef HAVE_DECL_CACOSHL
+
+/* Define to 1 if you have the declaration of `cacosl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CACOSL
+
+/* Define to 1 if you have the declaration of `carg', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CARG
+
+/* Define to 1 if you have the declaration of `cargf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CARGF
+
+/* Define to 1 if you have the declaration of `cargl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CARGL
+
+/* Define to 1 if you have the declaration of `casin', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CASIN
+
+/* Define to 1 if you have the declaration of `casinf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CASINF
+
+/* Define to 1 if you have the declaration of `casinh', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CASINH
+
+/* Define to 1 if you have the declaration of `casinhf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_CASINHF
+
+/* Define to 1 if you have the declaration of `casinhl', and to 0 if you
+ don't. */
+#undef HAVE_DECL_CASINHL
+
+/* Define to 1 if you have the declaration of `casinl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CASINL
+
+/* Define to 1 if you have the declaration of `catan', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CATAN
+
+/* Define to 1 if you have the declaration of `catanf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CATANF
+
+/* Define to 1 if you have the declaration of `catanh', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CATANH
+
+/* Define to 1 if you have the declaration of `catanhf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_CATANHF
+
+/* Define to 1 if you have the declaration of `catanhl', and to 0 if you
+ don't. */
+#undef HAVE_DECL_CATANHL
+
+/* Define to 1 if you have the declaration of `catanl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CATANL
+
+/* Define to 1 if you have the declaration of `cbrt', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CBRT
+
+/* Define to 1 if you have the declaration of `cbrtf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CBRTF
+
+/* Define to 1 if you have the declaration of `cbrtl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CBRTL
+
+/* Define to 1 if you have the declaration of `ccos', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CCOS
+
+/* Define to 1 if you have the declaration of `ccosf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CCOSF
+
+/* Define to 1 if you have the declaration of `ccosh', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CCOSH
+
+/* Define to 1 if you have the declaration of `ccoshf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CCOSHF
+
+/* Define to 1 if you have the declaration of `ccoshl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CCOSHL
+
+/* Define to 1 if you have the declaration of `ccosl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CCOSL
+
+/* Define to 1 if you have the declaration of `ceil', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CEIL
+
+/* Define to 1 if you have the declaration of `ceilf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CEILF
+
+/* Define to 1 if you have the declaration of `ceill', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CEILL
+
+/* Define to 1 if you have the declaration of `cexp', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CEXP
+
+/* Define to 1 if you have the declaration of `cexpf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CEXPF
+
+/* Define to 1 if you have the declaration of `cexpl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CEXPL
+
+/* Define to 1 if you have the declaration of `cimag', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CIMAG
+
+/* Define to 1 if you have the declaration of `cimagf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CIMAGF
+
+/* Define to 1 if you have the declaration of `cimagl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CIMAGL
+
+/* Define to 1 if you have the declaration of `clog', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CLOG
+
+/* Define to 1 if you have the declaration of `clogf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CLOGF
+
+/* Define to 1 if you have the declaration of `clogl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CLOGL
+
+/* Define to 1 if you have the declaration of `conj', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CONJ
+
+/* Define to 1 if you have the declaration of `conjf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CONJF
+
+/* Define to 1 if you have the declaration of `conjl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CONJL
+
+/* Define to 1 if you have the declaration of `copysign', and to 0 if you
+ don't. */
+#undef HAVE_DECL_COPYSIGN
+
+/* Define to 1 if you have the declaration of `copysignf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_COPYSIGNF
+
+/* Define to 1 if you have the declaration of `copysignl', and to 0 if you
+ don't. */
+#undef HAVE_DECL_COPYSIGNL
+
+/* Define to 1 if you have the declaration of `cos', and to 0 if you don't. */
+#undef HAVE_DECL_COS
+
+/* Define to 1 if you have the declaration of `cosf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_COSF
+
+/* Define to 1 if you have the declaration of `cosh', and to 0 if you don't.
+ */
+#undef HAVE_DECL_COSH
+
+/* Define to 1 if you have the declaration of `coshf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_COSHF
+
+/* Define to 1 if you have the declaration of `coshl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_COSHL
+
+/* Define to 1 if you have the declaration of `cosl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_COSL
+
+/* Define to 1 if you have the declaration of `cpow', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CPOW
+
+/* Define to 1 if you have the declaration of `cpowf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CPOWF
+
+/* Define to 1 if you have the declaration of `cpowl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CPOWL
+
+/* Define to 1 if you have the declaration of `cproj', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CPROJ
+
+/* Define to 1 if you have the declaration of `cprojf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CPROJF
+
+/* Define to 1 if you have the declaration of `cprojl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CPROJL
+
+/* Define to 1 if you have the declaration of `creal', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CREAL
+
+/* Define to 1 if you have the declaration of `crealf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CREALF
+
+/* Define to 1 if you have the declaration of `creall', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CREALL
+
+/* Define to 1 if you have the declaration of `csin', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CSIN
+
+/* Define to 1 if you have the declaration of `csinf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CSINF
+
+/* Define to 1 if you have the declaration of `csinh', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CSINH
+
+/* Define to 1 if you have the declaration of `csinhf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CSINHF
+
+/* Define to 1 if you have the declaration of `csinhl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CSINHL
+
+/* Define to 1 if you have the declaration of `csinl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CSINL
+
+/* Define to 1 if you have the declaration of `csqrt', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CSQRT
+
+/* Define to 1 if you have the declaration of `csqrtf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CSQRTF
+
+/* Define to 1 if you have the declaration of `csqrtl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CSQRTL
+
+/* Define to 1 if you have the declaration of `ctan', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CTAN
+
+/* Define to 1 if you have the declaration of `ctanf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CTANF
+
+/* Define to 1 if you have the declaration of `ctanh', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CTANH
+
+/* Define to 1 if you have the declaration of `ctanhf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CTANHF
+
+/* Define to 1 if you have the declaration of `ctanhl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CTANHL
+
+/* Define to 1 if you have the declaration of `ctanl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_CTANL
+
+/* Define to 1 if you have the declaration of `drand48', and to 0 if you
+ don't. */
+#undef HAVE_DECL_DRAND48
+
+/* Define to 1 if you have the declaration of `erf', and to 0 if you don't. */
+#undef HAVE_DECL_ERF
+
+/* Define to 1 if you have the declaration of `erfc', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ERFC
+
+/* Define to 1 if you have the declaration of `erfcf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ERFCF
+
+/* Define to 1 if you have the declaration of `erfcl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ERFCL
+
+/* Define to 1 if you have the declaration of `erff', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ERFF
+
+/* Define to 1 if you have the declaration of `erfl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ERFL
+
+/* Define to 1 if you have the declaration of `exp', and to 0 if you don't. */
+#undef HAVE_DECL_EXP
+
+/* Define to 1 if you have the declaration of `exp2', and to 0 if you don't.
+ */
+#undef HAVE_DECL_EXP2
+
+/* Define to 1 if you have the declaration of `exp2f', and to 0 if you don't.
+ */
+#undef HAVE_DECL_EXP2F
+
+/* Define to 1 if you have the declaration of `exp2l', and to 0 if you don't.
+ */
+#undef HAVE_DECL_EXP2L
+
+/* Define to 1 if you have the declaration of `expf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_EXPF
+
+/* Define to 1 if you have the declaration of `expl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_EXPL
+
+/* Define to 1 if you have the declaration of `expm1', and to 0 if you don't.
+ */
+#undef HAVE_DECL_EXPM1
+
+/* Define to 1 if you have the declaration of `expm1f', and to 0 if you don't.
+ */
+#undef HAVE_DECL_EXPM1F
+
+/* Define to 1 if you have the declaration of `expm1l', and to 0 if you don't.
+ */
+#undef HAVE_DECL_EXPM1L
+
+/* Define to 1 if you have the declaration of `fabs', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FABS
+
+/* Define to 1 if you have the declaration of `fabsf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FABSF
+
+/* Define to 1 if you have the declaration of `fabsl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FABSL
+
+/* Define to 1 if you have the declaration of `fdim', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FDIM
+
+/* Define to 1 if you have the declaration of `fdimf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FDIMF
+
+/* Define to 1 if you have the declaration of `fdiml', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FDIML
+
+/* Define to 1 if you have the declaration of `floor', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FLOOR
+
+/* Define to 1 if you have the declaration of `floorf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FLOORF
+
+/* Define to 1 if you have the declaration of `floorl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FLOORL
+
+/* Define to 1 if you have the declaration of `fma', and to 0 if you don't. */
+#undef HAVE_DECL_FMA
+
+/* Define to 1 if you have the declaration of `fmaf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FMAF
+
+/* Define to 1 if you have the declaration of `fmal', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FMAL
+
+/* Define to 1 if you have the declaration of `fmax', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FMAX
+
+/* Define to 1 if you have the declaration of `fmaxf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FMAXF
+
+/* Define to 1 if you have the declaration of `fmaxl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FMAXL
+
+/* Define to 1 if you have the declaration of `fmin', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FMIN
+
+/* Define to 1 if you have the declaration of `fminf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FMINF
+
+/* Define to 1 if you have the declaration of `fminl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FMINL
+
+/* Define to 1 if you have the declaration of `fmod', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FMOD
+
+/* Define to 1 if you have the declaration of `fmodf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FMODF
+
+/* Define to 1 if you have the declaration of `fmodl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FMODL
+
+/* Define to 1 if you have the declaration of `frexp', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FREXP
+
+/* Define to 1 if you have the declaration of `frexpf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FREXPF
+
+/* Define to 1 if you have the declaration of `frexpl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FREXPL
+
+/* Define to 1 if you have the declaration of `hypot', and to 0 if you don't.
+ */
+#undef HAVE_DECL_HYPOT
+
+/* Define to 1 if you have the declaration of `hypotf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_HYPOTF
+
+/* Define to 1 if you have the declaration of `hypotl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_HYPOTL
+
+/* Define to 1 if you have the declaration of `ilogb', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ILOGB
+
+/* Define to 1 if you have the declaration of `ilogbf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ILOGBF
+
+/* Define to 1 if you have the declaration of `ilogbl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ILOGBL
+
+/* Define to 1 if you have the declaration of `j0', and to 0 if you don't. */
+#undef HAVE_DECL_J0
+
+/* Define to 1 if you have the declaration of `j0f', and to 0 if you don't. */
+#undef HAVE_DECL_J0F
+
+/* Define to 1 if you have the declaration of `j0l', and to 0 if you don't. */
+#undef HAVE_DECL_J0L
+
+/* Define to 1 if you have the declaration of `j1', and to 0 if you don't. */
+#undef HAVE_DECL_J1
+
+/* Define to 1 if you have the declaration of `j1f', and to 0 if you don't. */
+#undef HAVE_DECL_J1F
+
+/* Define to 1 if you have the declaration of `j1l', and to 0 if you don't. */
+#undef HAVE_DECL_J1L
+
+/* Define to 1 if you have the declaration of `jn', and to 0 if you don't. */
+#undef HAVE_DECL_JN
+
+/* Define to 1 if you have the declaration of `jnf', and to 0 if you don't. */
+#undef HAVE_DECL_JNF
+
+/* Define to 1 if you have the declaration of `jnl', and to 0 if you don't. */
+#undef HAVE_DECL_JNL
+
+/* Define to 1 if you have the declaration of `ldexp', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LDEXP
+
+/* Define to 1 if you have the declaration of `ldexpf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LDEXPF
+
+/* Define to 1 if you have the declaration of `ldexpl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LDEXPL
+
+/* Define to 1 if you have the declaration of `lgamma', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LGAMMA
+
+/* Define to 1 if you have the declaration of `lgammaf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_LGAMMAF
+
+/* Define to 1 if you have the declaration of `lgammal', and to 0 if you
+ don't. */
+#undef HAVE_DECL_LGAMMAL
+
+/* Define to 1 if you have the declaration of `llrint', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LLRINT
+
+/* Define to 1 if you have the declaration of `llrintf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_LLRINTF
+
+/* Define to 1 if you have the declaration of `llrintl', and to 0 if you
+ don't. */
+#undef HAVE_DECL_LLRINTL
+
+/* Define to 1 if you have the declaration of `llround', and to 0 if you
+ don't. */
+#undef HAVE_DECL_LLROUND
+
+/* Define to 1 if you have the declaration of `llroundf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_LLROUNDF
+
+/* Define to 1 if you have the declaration of `llroundl', and to 0 if you
+ don't. */
+#undef HAVE_DECL_LLROUNDL
+
+/* Define to 1 if you have the declaration of `log', and to 0 if you don't. */
+#undef HAVE_DECL_LOG
+
+/* Define to 1 if you have the declaration of `log10', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LOG10
+
+/* Define to 1 if you have the declaration of `log10f', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LOG10F
+
+/* Define to 1 if you have the declaration of `log10l', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LOG10L
+
+/* Define to 1 if you have the declaration of `log1p', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LOG1P
+
+/* Define to 1 if you have the declaration of `log1pf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LOG1PF
+
+/* Define to 1 if you have the declaration of `log1pl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LOG1PL
+
+/* Define to 1 if you have the declaration of `log2', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LOG2
+
+/* Define to 1 if you have the declaration of `log2f', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LOG2F
+
+/* Define to 1 if you have the declaration of `log2l', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LOG2L
+
+/* Define to 1 if you have the declaration of `logb', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LOGB
+
+/* Define to 1 if you have the declaration of `logbf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LOGBF
+
+/* Define to 1 if you have the declaration of `logbl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LOGBL
+
+/* Define to 1 if you have the declaration of `logf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LOGF
+
+/* Define to 1 if you have the declaration of `logl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LOGL
+
+/* Define to 1 if you have the declaration of `lrint', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LRINT
+
+/* Define to 1 if you have the declaration of `lrintf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LRINTF
+
+/* Define to 1 if you have the declaration of `lrintl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LRINTL
+
+/* Define to 1 if you have the declaration of `lround', and to 0 if you don't.
+ */
+#undef HAVE_DECL_LROUND
+
+/* Define to 1 if you have the declaration of `lroundf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_LROUNDF
+
+/* Define to 1 if you have the declaration of `lroundl', and to 0 if you
+ don't. */
+#undef HAVE_DECL_LROUNDL
+
+/* Define to 1 if you have the declaration of `memalign', and to 0 if you
+ don't. */
+#undef HAVE_DECL_MEMALIGN
+
+/* Define to 1 if you have the declaration of `modf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_MODF
+
+/* Define to 1 if you have the declaration of `modff', and to 0 if you don't.
+ */
+#undef HAVE_DECL_MODFF
+
+/* Define to 1 if you have the declaration of `modfl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_MODFL
+
+/* Define to 1 if you have the declaration of `nan', and to 0 if you don't. */
+#undef HAVE_DECL_NAN
+
+/* Define to 1 if you have the declaration of `nanf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_NANF
+
+/* Define to 1 if you have the declaration of `nanl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_NANL
+
+/* Define to 1 if you have the declaration of `nanosleep', and to 0 if you
+ don't. */
+#undef HAVE_DECL_NANOSLEEP
+
+/* Define to 1 if you have the declaration of `nearbyint', and to 0 if you
+ don't. */
+#undef HAVE_DECL_NEARBYINT
+
+/* Define to 1 if you have the declaration of `nearbyintf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_NEARBYINTF
+
+/* Define to 1 if you have the declaration of `nearbyintl', and to 0 if you
+ don't. */
+#undef HAVE_DECL_NEARBYINTL
+
+/* Define to 1 if you have the declaration of `nextafter', and to 0 if you
+ don't. */
+#undef HAVE_DECL_NEXTAFTER
+
+/* Define to 1 if you have the declaration of `nextafterf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_NEXTAFTERF
+
+/* Define to 1 if you have the declaration of `nextafterl', and to 0 if you
+ don't. */
+#undef HAVE_DECL_NEXTAFTERL
+
+/* Define to 1 if you have the declaration of `posix_memalign', and to 0 if
+ you don't. */
+#undef HAVE_DECL_POSIX_MEMALIGN
+
+/* Define to 1 if you have the declaration of `pow', and to 0 if you don't. */
+#undef HAVE_DECL_POW
+
+/* Define to 1 if you have the declaration of `powf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_POWF
+
+/* Define to 1 if you have the declaration of `powl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_POWL
+
+/* Define to 1 if you have the declaration of `remainder', and to 0 if you
+ don't. */
+#undef HAVE_DECL_REMAINDER
+
+/* Define to 1 if you have the declaration of `remainderf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_REMAINDERF
+
+/* Define to 1 if you have the declaration of `remainderl', and to 0 if you
+ don't. */
+#undef HAVE_DECL_REMAINDERL
+
+/* Define to 1 if you have the declaration of `remquo', and to 0 if you don't.
+ */
+#undef HAVE_DECL_REMQUO
+
+/* Define to 1 if you have the declaration of `remquof', and to 0 if you
+ don't. */
+#undef HAVE_DECL_REMQUOF
+
+/* Define to 1 if you have the declaration of `remquol', and to 0 if you
+ don't. */
+#undef HAVE_DECL_REMQUOL
+
+/* Define to 1 if you have the declaration of `rint', and to 0 if you don't.
+ */
+#undef HAVE_DECL_RINT
+
+/* Define to 1 if you have the declaration of `rintf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_RINTF
+
+/* Define to 1 if you have the declaration of `rintl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_RINTL
+
+/* Define to 1 if you have the declaration of `round', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ROUND
+
+/* Define to 1 if you have the declaration of `roundf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ROUNDF
+
+/* Define to 1 if you have the declaration of `roundl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ROUNDL
+
+/* Define to 1 if you have the declaration of `scalbln', and to 0 if you
+ don't. */
+#undef HAVE_DECL_SCALBLN
+
+/* Define to 1 if you have the declaration of `scalblnf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_SCALBLNF
+
+/* Define to 1 if you have the declaration of `scalblnl', and to 0 if you
+ don't. */
+#undef HAVE_DECL_SCALBLNL
+
+/* Define to 1 if you have the declaration of `scalbn', and to 0 if you don't.
+ */
+#undef HAVE_DECL_SCALBN
+
+/* Define to 1 if you have the declaration of `scalbnf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_SCALBNF
+
+/* Define to 1 if you have the declaration of `scalbnl', and to 0 if you
+ don't. */
+#undef HAVE_DECL_SCALBNL
+
+/* Define to 1 if you have the declaration of `sin', and to 0 if you don't. */
+#undef HAVE_DECL_SIN
+
+/* Define to 1 if you have the declaration of `sinf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_SINF
+
+/* Define to 1 if you have the declaration of `sinh', and to 0 if you don't.
+ */
+#undef HAVE_DECL_SINH
+
+/* Define to 1 if you have the declaration of `sinhf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_SINHF
+
+/* Define to 1 if you have the declaration of `sinhl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_SINHL
+
+/* Define to 1 if you have the declaration of `sinl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_SINL
+
+/* Define to 1 if you have the declaration of `sleep', and to 0 if you don't.
+ */
+#undef HAVE_DECL_SLEEP
+
+/* Define to 1 if you have the declaration of `sqrt', and to 0 if you don't.
+ */
+#undef HAVE_DECL_SQRT
+
+/* Define to 1 if you have the declaration of `sqrtf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_SQRTF
+
+/* Define to 1 if you have the declaration of `sqrtl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_SQRTL
+
+/* Define to 1 if you have the declaration of `srand48', and to 0 if you
+ don't. */
+#undef HAVE_DECL_SRAND48
+
+/* Define to 1 if you have the declaration of `tan', and to 0 if you don't. */
+#undef HAVE_DECL_TAN
+
+/* Define to 1 if you have the declaration of `tanf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_TANF
+
+/* Define to 1 if you have the declaration of `tanh', and to 0 if you don't.
+ */
+#undef HAVE_DECL_TANH
+
+/* Define to 1 if you have the declaration of `tanhf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_TANHF
+
+/* Define to 1 if you have the declaration of `tanhl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_TANHL
+
+/* Define to 1 if you have the declaration of `tanl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_TANL
+
+/* Define to 1 if you have the declaration of `tgamma', and to 0 if you don't.
+ */
+#undef HAVE_DECL_TGAMMA
+
+/* Define to 1 if you have the declaration of `tgammaf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_TGAMMAF
+
+/* Define to 1 if you have the declaration of `tgammal', and to 0 if you
+ don't. */
+#undef HAVE_DECL_TGAMMAL
+
+/* Define to 1 if you have the declaration of `trunc', and to 0 if you don't.
+ */
+#undef HAVE_DECL_TRUNC
+
+/* Define to 1 if you have the declaration of `truncf', and to 0 if you don't.
+ */
+#undef HAVE_DECL_TRUNCF
+
+/* Define to 1 if you have the declaration of `truncl', and to 0 if you don't.
+ */
+#undef HAVE_DECL_TRUNCL
+
+/* Define to 1 if you have the declaration of `y0', and to 0 if you don't. */
+#undef HAVE_DECL_Y0
+
+/* Define to 1 if you have the declaration of `y0f', and to 0 if you don't. */
+#undef HAVE_DECL_Y0F
+
+/* Define to 1 if you have the declaration of `y0l', and to 0 if you don't. */
+#undef HAVE_DECL_Y0L
+
+/* Define to 1 if you have the declaration of `y1', and to 0 if you don't. */
+#undef HAVE_DECL_Y1
+
+/* Define to 1 if you have the declaration of `y1f', and to 0 if you don't. */
+#undef HAVE_DECL_Y1F
+
+/* Define to 1 if you have the declaration of `y1l', and to 0 if you don't. */
+#undef HAVE_DECL_Y1L
+
+/* Define to 1 if you have the declaration of `yn', and to 0 if you don't. */
+#undef HAVE_DECL_YN
+
+/* Define to 1 if you have the declaration of `ynf', and to 0 if you don't. */
+#undef HAVE_DECL_YNF
+
+/* Define to 1 if you have the declaration of `ynl', and to 0 if you don't. */
+#undef HAVE_DECL_YNL
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
+#undef HAVE_DOPRNT
+
+/* Define to 1 if you have the `drand48' function. */
+#undef HAVE_DRAND48
+
+/* Define to 1 if you have the `erf' function. */
+#undef HAVE_ERF
+
+/* Define to 1 if you have the `erfc' function. */
+#undef HAVE_ERFC
+
+/* Define to 1 if you have the `erfcf' function. */
+#undef HAVE_ERFCF
+
+/* Define to 1 if you have the `erfcl' function. */
+#undef HAVE_ERFCL
+
+/* Define to 1 if you have the `erff' function. */
+#undef HAVE_ERFF
+
+/* Define to 1 if you have the `erfl' function. */
+#undef HAVE_ERFL
+
+/* Define to 1 if you have the `exp' function. */
+#undef HAVE_EXP
+
+/* Define to 1 if you have the `exp2' function. */
+#undef HAVE_EXP2
+
+/* Define to 1 if you have the `exp2f' function. */
+#undef HAVE_EXP2F
+
+/* Define to 1 if you have the `exp2l' function. */
+#undef HAVE_EXP2L
+
+/* Define to 1 if you have the `expf' function. */
+#undef HAVE_EXPF
+
+/* Define to 1 if you have the `expl' function. */
+#undef HAVE_EXPL
+
+/* Define to 1 if you have the `expm1' function. */
+#undef HAVE_EXPM1
+
+/* Define to 1 if you have the `expm1f' function. */
+#undef HAVE_EXPM1F
+
+/* Define to 1 if you have the `expm1l' function. */
+#undef HAVE_EXPM1L
+
+/* Define to 1 if you have the `fabs' function. */
+#undef HAVE_FABS
+
+/* Define to 1 if you have the `fabsf' function. */
+#undef HAVE_FABSF
+
+/* Define to 1 if you have the `fabsl' function. */
+#undef HAVE_FABSL
+
+/* Define to 1 if you have the `fdim' function. */
+#undef HAVE_FDIM
+
+/* Define to 1 if you have the `fdimf' function. */
+#undef HAVE_FDIMF
+
+/* Define to 1 if you have the `fdiml' function. */
+#undef HAVE_FDIML
+
+/* Define to 1 if you have the <float.h> header file. */
+#undef HAVE_FLOAT_H
+
+/* Define to 1 if you have the `floor' function. */
+#undef HAVE_FLOOR
+
+/* Define to 1 if you have the `floorf' function. */
+#undef HAVE_FLOORF
+
+/* Define to 1 if you have the `floorl' function. */
+#undef HAVE_FLOORL
+
+/* Define to 1 if you have the `fma' function. */
+#undef HAVE_FMA
+
+/* Define to 1 if you have the `fmaf' function. */
+#undef HAVE_FMAF
+
+/* Define to 1 if you have the `fmal' function. */
+#undef HAVE_FMAL
+
+/* Define to 1 if you have the `fmax' function. */
+#undef HAVE_FMAX
+
+/* Define to 1 if you have the `fmaxf' function. */
+#undef HAVE_FMAXF
+
+/* Define to 1 if you have the `fmaxl' function. */
+#undef HAVE_FMAXL
+
+/* Define to 1 if you have the `fmin' function. */
+#undef HAVE_FMIN
+
+/* Define to 1 if you have the `fminf' function. */
+#undef HAVE_FMINF
+
+/* Define to 1 if you have the `fminl' function. */
+#undef HAVE_FMINL
+
+/* Define to 1 if you have the `fmod' function. */
+#undef HAVE_FMOD
+
+/* Define to 1 if you have the `fmodf' function. */
+#undef HAVE_FMODF
+
+/* Define to 1 if you have the `fmodl' function. */
+#undef HAVE_FMODL
+
+/* Define to 1 if you have the `frexp' function. */
+#undef HAVE_FREXP
+
+/* Define to 1 if you have the `frexpf' function. */
+#undef HAVE_FREXPF
+
+/* Define to 1 if you have the `frexpl' function. */
+#undef HAVE_FREXPL
+
+/* Define to 1 if you have the `gethrtime' function. */
+#undef HAVE_GETHRTIME
+
+/* Define to 1 if hrtime_t is defined in <sys/time.h> */
+#undef HAVE_HRTIME_T
+
+/* Define to 1 if you have the `hypot' function. */
+#undef HAVE_HYPOT
+
+/* Define to 1 if you have the `hypotf' function. */
+#undef HAVE_HYPOTF
+
+/* Define to 1 if you have the `hypotl' function. */
+#undef HAVE_HYPOTL
+
+/* Define to 1 if you have the `ilogb' function. */
+#undef HAVE_ILOGB
+
+/* Define to 1 if you have the `ilogbf' function. */
+#undef HAVE_ILOGBF
+
+/* Define to 1 if you have the `ilogbl' function. */
+#undef HAVE_ILOGBL
+
+/* Define to 1 if you have the <intrinsics.h> header file. */
+#undef HAVE_INTRINSICS_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `j0' function. */
+#undef HAVE_J0
+
+/* Define to 1 if you have the `j0f' function. */
+#undef HAVE_J0F
+
+/* Define to 1 if you have the `j0l' function. */
+#undef HAVE_J0L
+
+/* Define to 1 if you have the `j1' function. */
+#undef HAVE_J1
+
+/* Define to 1 if you have the `j1f' function. */
+#undef HAVE_J1F
+
+/* Define to 1 if you have the `j1l' function. */
+#undef HAVE_J1L
+
+/* Define to 1 if you have the `jn' function. */
+#undef HAVE_JN
+
+/* Define to 1 if you have the `jnf' function. */
+#undef HAVE_JNF
+
+/* Define to 1 if you have the `jnl' function. */
+#undef HAVE_JNL
+
+/* Define to 1 if you have the `ldexp' function. */
+#undef HAVE_LDEXP
+
+/* Define to 1 if you have the `ldexpf' function. */
+#undef HAVE_LDEXPF
+
+/* Define to 1 if you have the `ldexpl' function. */
+#undef HAVE_LDEXPL
+
+/* Define to 1 if you have the `lgamma' function. */
+#undef HAVE_LGAMMA
+
+/* Define to 1 if you have the `lgammaf' function. */
+#undef HAVE_LGAMMAF
+
+/* Define to 1 if you have the `lgammal' function. */
+#undef HAVE_LGAMMAL
+
+/* Define to 1 if you have the `fftw3' library (-lfftw3). */
+#undef HAVE_LIBFFTW3
+
+/* Define to 1 if you have the `m' library (-lm). */
+#undef HAVE_LIBM
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the `llrint' function. */
+#undef HAVE_LLRINT
+
+/* Define to 1 if you have the `llrintf' function. */
+#undef HAVE_LLRINTF
+
+/* Define to 1 if you have the `llrintl' function. */
+#undef HAVE_LLRINTL
+
+/* Define to 1 if you have the `llround' function. */
+#undef HAVE_LLROUND
+
+/* Define to 1 if you have the `llroundf' function. */
+#undef HAVE_LLROUNDF
+
+/* Define to 1 if you have the `llroundl' function. */
+#undef HAVE_LLROUNDL
+
+/* Define to 1 if you have the `log' function. */
+#undef HAVE_LOG
+
+/* Define to 1 if you have the `log10' function. */
+#undef HAVE_LOG10
+
+/* Define to 1 if you have the `log10f' function. */
+#undef HAVE_LOG10F
+
+/* Define to 1 if you have the `log10l' function. */
+#undef HAVE_LOG10L
+
+/* Define to 1 if you have the `log1p' function. */
+#undef HAVE_LOG1P
+
+/* Define to 1 if you have the `log1pf' function. */
+#undef HAVE_LOG1PF
+
+/* Define to 1 if you have the `log1pl' function. */
+#undef HAVE_LOG1PL
+
+/* Define to 1 if you have the `log2' function. */
+#undef HAVE_LOG2
+
+/* Define to 1 if you have the `log2f' function. */
+#undef HAVE_LOG2F
+
+/* Define to 1 if you have the `log2l' function. */
+#undef HAVE_LOG2L
+
+/* Define to 1 if you have the `logb' function. */
+#undef HAVE_LOGB
+
+/* Define to 1 if you have the `logbf' function. */
+#undef HAVE_LOGBF
+
+/* Define to 1 if you have the `logbl' function. */
+#undef HAVE_LOGBL
+
+/* Define to 1 if you have the `logf' function. */
+#undef HAVE_LOGF
+
+/* Define to 1 if you have the `logl' function. */
+#undef HAVE_LOGL
+
+/* Define to 1 if the compiler supports 'long double' */
+#undef HAVE_LONG_DOUBLE
+
+/* Define to 1 if you have the `lrint' function. */
+#undef HAVE_LRINT
+
+/* Define to 1 if you have the `lrintf' function. */
+#undef HAVE_LRINTF
+
+/* Define to 1 if you have the `lrintl' function. */
+#undef HAVE_LRINTL
+
+/* Define to 1 if you have the `lround' function. */
+#undef HAVE_LROUND
+
+/* Define to 1 if you have the `lroundf' function. */
+#undef HAVE_LROUNDF
+
+/* Define to 1 if you have the `lroundl' function. */
+#undef HAVE_LROUNDL
+
+/* Define to 1 if you have the `mach_absolute_time' function. */
+#undef HAVE_MACH_ABSOLUTE_TIME
+
+/* Define to 1 if you have the <mach/mach_time.h> header file. */
+#undef HAVE_MACH_MACH_TIME_H
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* Define to 1 if you have the <math.h> header file. */
+#undef HAVE_MATH_H
+
+/* Define to 1 if compilation of Matlab interface only succeeds when macro
+ __STDC_UTF_16__ not defined. */
+#undef HAVE_MATLAB_GCC_REQUIRE_UNDEF_STDC_UTF_16
+
+/* Define to 1 if you have the `memalign' function. */
+#undef HAVE_MEMALIGN
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `memset' function. */
+#undef HAVE_MEMSET
+
+/* Define to have the file mexversion.c */
+#undef HAVE_MEXVERSION_C
+
+/* Define to enable use of MIPS ZBus cycle-counter. */
+#undef HAVE_MIPS_ZBUS_TIMER
+
+/* Define to 1 if you have the `modf' function. */
+#undef HAVE_MODF
+
+/* Define to 1 if you have the `modff' function. */
+#undef HAVE_MODFF
+
+/* Define to 1 if you have the `modfl' function. */
+#undef HAVE_MODFL
+
+/* Define to 1 if you have the `nan' function. */
+#undef HAVE_NAN
+
+/* Define to 1 if you have the `nanf' function. */
+#undef HAVE_NANF
+
+/* Define to 1 if you have the `nanl' function. */
+#undef HAVE_NANL
+
+/* Define to 1 if you have the `nanosleep' function. */
+#undef HAVE_NANOSLEEP
+
+/* Define to 1 if you have the `nearbyint' function. */
+#undef HAVE_NEARBYINT
+
+/* Define to 1 if you have the `nearbyintf' function. */
+#undef HAVE_NEARBYINTF
+
+/* Define to 1 if you have the `nearbyintl' function. */
+#undef HAVE_NEARBYINTL
+
+/* Define to 1 if you have the `nextafter' function. */
+#undef HAVE_NEXTAFTER
+
+/* Define to 1 if you have the `nextafterf' function. */
+#undef HAVE_NEXTAFTERF
+
+/* Define to 1 if you have the `nextafterl' function. */
+#undef HAVE_NEXTAFTERL
+
+/* Define if OpenMP is enabled */
+#undef HAVE_OPENMP
+
+/* Define to 1 if you have the `posix_memalign' function. */
+#undef HAVE_POSIX_MEMALIGN
+
+/* Define to 1 if you have the `pow' function. */
+#undef HAVE_POW
+
+/* Define to 1 if you have the `powf' function. */
+#undef HAVE_POWF
+
+/* Define to 1 if you have the `powl' function. */
+#undef HAVE_POWL
+
+/* Define to 1 if you have the `read_real_time' function. */
+#undef HAVE_READ_REAL_TIME
+
+/* Define to 1 if you have the `remainder' function. */
+#undef HAVE_REMAINDER
+
+/* Define to 1 if you have the `remainderf' function. */
+#undef HAVE_REMAINDERF
+
+/* Define to 1 if you have the `remainderl' function. */
+#undef HAVE_REMAINDERL
+
+/* Define to 1 if you have the `remquo' function. */
+#undef HAVE_REMQUO
+
+/* Define to 1 if you have the `remquof' function. */
+#undef HAVE_REMQUOF
+
+/* Define to 1 if you have the `remquol' function. */
+#undef HAVE_REMQUOL
+
+/* Define to 1 if you have the `rint' function. */
+#undef HAVE_RINT
+
+/* Define to 1 if you have the `rintf' function. */
+#undef HAVE_RINTF
+
+/* Define to 1 if you have the `rintl' function. */
+#undef HAVE_RINTL
+
+/* Define to 1 if you have the `round' function. */
+#undef HAVE_ROUND
+
+/* Define to 1 if you have the `roundf' function. */
+#undef HAVE_ROUNDF
+
+/* Define to 1 if you have the `roundl' function. */
+#undef HAVE_ROUNDL
+
+/* Define to 1 if you have the `scalbln' function. */
+#undef HAVE_SCALBLN
+
+/* Define to 1 if you have the `scalblnf' function. */
+#undef HAVE_SCALBLNF
+
+/* Define to 1 if you have the `scalblnl' function. */
+#undef HAVE_SCALBLNL
+
+/* Define to 1 if you have the `scalbn' function. */
+#undef HAVE_SCALBN
+
+/* Define to 1 if you have the `scalbnf' function. */
+#undef HAVE_SCALBNF
+
+/* Define to 1 if you have the `scalbnl' function. */
+#undef HAVE_SCALBNL
+
+/* Define to 1 if you have the `sin' function. */
+#undef HAVE_SIN
+
+/* Define to 1 if you have the `sinf' function. */
+#undef HAVE_SINF
+
+/* Define to 1 if you have the `sinh' function. */
+#undef HAVE_SINH
+
+/* Define to 1 if you have the `sinhf' function. */
+#undef HAVE_SINHF
+
+/* Define to 1 if you have the `sinhl' function. */
+#undef HAVE_SINHL
+
+/* Define to 1 if you have the `sinl' function. */
+#undef HAVE_SINL
+
+/* Define to 1 if you have the `sleep' function. */
+#undef HAVE_SLEEP
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the `sqrt' function. */
+#undef HAVE_SQRT
+
+/* Define to 1 if you have the `sqrtf' function. */
+#undef HAVE_SQRTF
+
+/* Define to 1 if you have the `sqrtl' function. */
+#undef HAVE_SQRTL
+
+/* Define to 1 if you have the `srand48' function. */
+#undef HAVE_SRAND48
+
+/* Define to 1 if you have the <stdarg.h> header file. */
+#undef HAVE_STDARG_H
+
+/* Define to 1 if you have the <stdbool.h> header file. */
+#undef HAVE_STDBOOL_H
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#undef HAVE_STDDEF_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `sysctl' function. */
+#undef HAVE_SYSCTL
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the `tan' function. */
+#undef HAVE_TAN
+
+/* Define to 1 if you have the `tanf' function. */
+#undef HAVE_TANF
+
+/* Define to 1 if you have the `tanh' function. */
+#undef HAVE_TANH
+
+/* Define to 1 if you have the `tanhf' function. */
+#undef HAVE_TANHF
+
+/* Define to 1 if you have the `tanhl' function. */
+#undef HAVE_TANHL
+
+/* Define to 1 if you have the `tanl' function. */
+#undef HAVE_TANL
+
+/* Define to 1 if you have the `tgamma' function. */
+#undef HAVE_TGAMMA
+
+/* Define to 1 if you have the `tgammaf' function. */
+#undef HAVE_TGAMMAF
+
+/* Define to 1 if you have the `tgammal' function. */
+#undef HAVE_TGAMMAL
+
+/* Define to 1 if you have the `time_base_to_time' function. */
+#undef HAVE_TIME_BASE_TO_TIME
+
+/* Define to 1 if you have the <time.h> header file. */
+#undef HAVE_TIME_H
+
+/* Define to 1 if you have the `trunc' function. */
+#undef HAVE_TRUNC
+
+/* Define to 1 if you have the `truncf' function. */
+#undef HAVE_TRUNCF
+
+/* Define to 1 if you have the `truncl' function. */
+#undef HAVE_TRUNCL
+
+/* Define to 1 if the system has the type `uintptr_t'. */
+#undef HAVE_UINTPTR_T
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `usleep' function. */
+#undef HAVE_USLEEP
+
+/* Define to 1 if you have the `vprintf' function. */
+#undef HAVE_VPRINTF
+
+/* Define to 1 if you have the `y0' function. */
+#undef HAVE_Y0
+
+/* Define to 1 if you have the `y0f' function. */
+#undef HAVE_Y0F
+
+/* Define to 1 if you have the `y0l' function. */
+#undef HAVE_Y0L
+
+/* Define to 1 if you have the `y1' function. */
+#undef HAVE_Y1
+
+/* Define to 1 if you have the `y1f' function. */
+#undef HAVE_Y1F
+
+/* Define to 1 if you have the `y1l' function. */
+#undef HAVE_Y1L
+
+/* Define to 1 if you have the `yn' function. */
+#undef HAVE_YN
+
+/* Define to 1 if you have the `ynf' function. */
+#undef HAVE_YNF
+
+/* Define to 1 if you have the `ynl' function. */
+#undef HAVE_YNL
+
+/* Define to 1 if you have the `_mm_free' function. */
+#undef HAVE__MM_FREE
+
+/* Define to 1 if you have the `_mm_malloc' function. */
+#undef HAVE__MM_MALLOC
+
+/* Define if you have the UNICOS _rtc() intrinsic. */
+#undef HAVE__RTC
+
+/* Define to enable Kaiser-Bessel window function. */
+#undef KAISER_BESSEL
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
+#undef LT_OBJDIR
+
+/* Define to enable Matlab argument checks. */
+#undef MATLAB_ARGCHECKS
+
+/* Define to enable runtime time measurements. */
+#undef MEASURE_TIME
+
+/* Define to enable time measurements for FFTW transforms. */
+#undef MEASURE_TIME_FFTW
+
+/* Define to enable extra debugging code. */
+#undef NFFT_DEBUG
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to enable sinc power window function. */
+#undef SINC_POWER
+
+/* The size of `double', as computed by sizeof. */
+#undef SIZEOF_DOUBLE
+
+/* The size of `float', as computed by sizeof. */
+#undef SIZEOF_FLOAT
+
+/* The size of `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* The size of `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* The size of `long double', as computed by sizeof. */
+#undef SIZEOF_LONG_DOUBLE
+
+/* The size of `long long', as computed by sizeof. */
+#undef SIZEOF_LONG_LONG
+
+/* The size of `ptrdiff_t', as computed by sizeof. */
+#undef SIZEOF_PTRDIFF_T
+
+/* The size of `size_t', as computed by sizeof. */
+#undef SIZEOF_SIZE_T
+
+/* The size of `unsigned int', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_INT
+
+/* The size of `unsigned long', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_LONG
+
+/* The size of `unsigned long long', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_LONG_LONG
+
+/* The size of `void *', as computed by sizeof. */
+#undef SIZEOF_VOID_P
+
+/* If using the C implementation of alloca, define if you know the
+ direction of stack growth for your system; otherwise it will be
+ automatically deduced at runtime.
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to the equivalent of the C99 'restrict' keyword, or to
+ nothing if this is not supported. Do not define if restrict is
+ supported directly. */
+#undef restrict
+/* Work around a bug in Sun C++: it does not support _Restrict or
+ __restrict__, even though the corresponding Sun C compiler ends up with
+ "#define restrict _Restrict" or "#define restrict __restrict__" in the
+ previous line. Perhaps some future version of Sun C++ will work with
+ restrict; if so, hopefully it defines __RESTRICT like Sun C does. */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+# define __restrict__
+#endif
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
diff --git a/include/cycle.h b/include/cycle.h
new file mode 100644
index 0000000..82867f8
--- /dev/null
+++ b/include/cycle.h
@@ -0,0 +1,518 @@
+/*
+ * Copyright (c) 2003, 2007-8 Matteo Frigo
+ * Copyright (c) 2003, 2007-8 Massachusetts Institute of Technology
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+
+/* machine-dependent cycle counters code. Needs to be inlined. */
+
+/***************************************************************************/
+/* To use the cycle counters in your code, simply #include "cycle.h" (this
+ file), and then use the functions/macros:
+
+ ticks getticks(void);
+
+ ticks is an opaque typedef defined below, representing the current time.
+ You extract the elapsed time between two calls to gettick() via:
+
+ double elapsed(ticks t1, ticks t0);
+
+ which returns a double-precision variable in arbitrary units. You
+ are not expected to convert this into human units like seconds; it
+ is intended only for *comparisons* of time intervals.
+
+ (In order to use some of the OS-dependent timer routines like
+ Solaris' gethrtime, you need to paste the autoconf snippet below
+ into your configure.ac file and #include "config.h" before cycle.h,
+ or define the relevant macros manually if you are not using autoconf.)
+*/
+
+/***************************************************************************/
+/* This file uses macros like HAVE_GETHRTIME that are assumed to be
+ defined according to whether the corresponding function/type/header
+ is available on your system. The necessary macros are most
+ conveniently defined if you are using GNU autoconf, via the tests:
+
+ dnl ---------------------------------------------------------------------
+
+ AC_C_INLINE
+ AC_HEADER_TIME
+ AC_CHECK_HEADERS([sys/time.h c_asm.h intrinsics.h mach/mach_time.h])
+
+ AC_CHECK_TYPE([hrtime_t],[AC_DEFINE(HAVE_HRTIME_T, 1, [Define to 1 if hrtime_t is defined in <sys/time.h>])],,[#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif])
+
+ AC_CHECK_FUNCS([gethrtime read_real_time time_base_to_time clock_gettime mach_absolute_time])
+
+ dnl Cray UNICOS _rtc() (real-time clock) intrinsic
+ AC_MSG_CHECKING([for _rtc intrinsic])
+ rtc_ok=yes
+ AC_TRY_LINK([#ifdef HAVE_INTRINSICS_H
+#include <intrinsics.h>
+#endif], [_rtc()], [AC_DEFINE(HAVE__RTC,1,[Define if you have the UNICOS _rtc() intrinsic.])], [rtc_ok=no])
+ AC_MSG_RESULT($rtc_ok)
+
+ dnl ---------------------------------------------------------------------
+*/
+
+/***************************************************************************/
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+#define INLINE_ELAPSED(INL) static INL double elapsed(ticks t1, ticks t0) \
+{ \
+ return (double)t1 - (double)t0; \
+}
+
+#if 1 == 0
+#else
+
+/*----------------------------------------------------------------*/
+/* Solaris */
+#if defined(HAVE_GETHRTIME) && defined(HAVE_HRTIME_T) && !defined(HAVE_TICK_COUNTER)
+typedef hrtime_t ticks;
+
+#define getticks gethrtime
+
+INLINE_ELAPSED(inline)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+/* AIX v. 4+ routines to read the real-time clock or time-base register */
+#if defined(HAVE_READ_REAL_TIME) && defined(HAVE_TIME_BASE_TO_TIME) && !defined(HAVE_TICK_COUNTER)
+typedef timebasestruct_t ticks;
+
+static __inline ticks getticks(void)
+{
+ ticks t;
+ read_real_time(&t, TIMEBASE_SZ);
+ return t;
+}
+
+static __inline double elapsed(ticks t1, ticks t0) /* time in nanoseconds */
+{
+ time_base_to_time(&t1, TIMEBASE_SZ);
+ time_base_to_time(&t0, TIMEBASE_SZ);
+ return (((double)t1.tb_high - (double)t0.tb_high) * 1.0e9 +
+ ((double)t1.tb_low - (double)t0.tb_low));
+}
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+/*
+ * PowerPC ``cycle'' counter using the time base register.
+ */
+#if ((((defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__))) || (defined(__MWERKS__) && defined(macintosh)))) || (defined(__IBM_GCC_ASM) && (defined(__powerpc__) || defined(__ppc__)))) && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long long ticks;
+
+static __inline__ ticks getticks(void)
+{
+ unsigned int tbl, tbu0, tbu1;
+
+ do {
+ __asm__ __volatile__ ("mftbu %0" : "=r"(tbu0));
+ __asm__ __volatile__ ("mftb %0" : "=r"(tbl));
+ __asm__ __volatile__ ("mftbu %0" : "=r"(tbu1));
+ } while (tbu0 != tbu1);
+
+ return (((unsigned long long)tbu0) << 32) | tbl;
+}
+
+INLINE_ELAPSED(__inline__)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/* MacOS/Mach (Darwin) time-base register interface (unlike UpTime,
+ from Carbon, requires no additional libraries to be linked). */
+#if defined(HAVE_MACH_ABSOLUTE_TIME) && defined(HAVE_MACH_MACH_TIME_H) && !defined(HAVE_TICK_COUNTER)
+#include <mach/mach_time.h>
+typedef uint64_t ticks;
+#define getticks mach_absolute_time
+INLINE_ELAPSED(__inline__)
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+/*
+ * Pentium cycle counter
+ */
+#if (defined(__GNUC__) || defined(__ICC)) && defined(__i386__) && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long long ticks;
+
+static __inline__ ticks getticks(void)
+{
+ ticks ret;
+
+ __asm__ __volatile__("rdtsc": "=A" (ret));
+ /* no input, nothing else clobbered */
+ return ret;
+}
+
+INLINE_ELAPSED(__inline__)
+
+#define HAVE_TICK_COUNTER
+#define TIME_MIN 5000.0 /* unreliable pentium IV cycle counter */
+#endif
+
+/* Visual C++ -- thanks to Morten Nissov for his help with this */
+#if defined(_MSC_VER) && _MSC_VER >= 1200 && _M_IX86 >= 500 && !defined(HAVE_TICK_COUNTER)
+#include <windows.h>
+typedef LARGE_INTEGER ticks;
+#define RDTSC __asm __emit 0fh __asm __emit 031h /* hack for VC++ 5.0 */
+
+static __inline ticks getticks(void)
+{
+ ticks retval;
+
+ __asm {
+ RDTSC
+ mov retval.HighPart, edx
+ mov retval.LowPart, eax
+ }
+ return retval;
+}
+
+static __inline double elapsed(ticks t1, ticks t0)
+{
+ return (double)t1.QuadPart - (double)t0.QuadPart;
+}
+
+#define HAVE_TICK_COUNTER
+#define TIME_MIN 5000.0 /* unreliable pentium IV cycle counter */
+#endif
+
+/*----------------------------------------------------------------*/
+/*
+ * X86-64 cycle counter
+ */
+#if (defined(__GNUC__) || defined(__ICC) || defined(__SUNPRO_C)) && defined(__x86_64__) && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long long ticks;
+
+static __inline__ ticks getticks(void)
+{
+ unsigned a, d;
+ asm volatile("rdtsc" : "=a" (a), "=d" (d));
+ return ((ticks)a) | (((ticks)d) << 32);
+}
+
+INLINE_ELAPSED(__inline__)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/* PGI compiler, courtesy Cristiano Calonaci, Andrea Tarsi, & Roberto Gori.
+ NOTE: this code will fail to link unless you use the -Masmkeyword compiler
+ option (grrr). */
+#if defined(__PGI) && defined(__x86_64__) && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long long ticks;
+static ticks getticks(void)
+{
+ asm(" rdtsc; shl $0x20,%rdx; mov %eax,%eax; or %rdx,%rax; ");
+}
+INLINE_ELAPSED(__inline__)
+#define HAVE_TICK_COUNTER
+#endif
+
+/* Visual C++, courtesy of Dirk Michaelis */
+#if defined(_MSC_VER) && _MSC_VER >= 1400 && (defined(_M_AMD64) || defined(_M_X64)) && !defined(HAVE_TICK_COUNTER)
+
+#include <intrin.h>
+#pragma intrinsic(__rdtsc)
+typedef unsigned __int64 ticks;
+#define getticks __rdtsc
+INLINE_ELAPSED(__inline)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+/*
+ * IA64 cycle counter
+ */
+
+/* intel's icc/ecc compiler */
+#if (defined(__EDG_VERSION) || defined(__ECC)) && defined(__ia64__) && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long ticks;
+#include <ia64intrin.h>
+
+static __inline__ ticks getticks(void)
+{
+ return __getReg(_IA64_REG_AR_ITC);
+}
+
+INLINE_ELAPSED(__inline__)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/* gcc */
+#if defined(__GNUC__) && defined(__ia64__) && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long ticks;
+
+static __inline__ ticks getticks(void)
+{
+ ticks ret;
+
+ __asm__ __volatile__ ("mov %0=ar.itc" : "=r"(ret));
+ return ret;
+}
+
+INLINE_ELAPSED(__inline__)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/* HP/UX IA64 compiler, courtesy Teresa L. Johnson: */
+#if defined(__hpux) && defined(__ia64) && !defined(HAVE_TICK_COUNTER)
+#include <machine/sys/inline.h>
+typedef unsigned long ticks;
+
+static inline ticks getticks(void)
+{
+ ticks ret;
+
+ ret = _Asm_mov_from_ar (_AREG_ITC);
+ return ret;
+}
+
+INLINE_ELAPSED(inline)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/* Microsoft Visual C++ */
+#if defined(_MSC_VER) && defined(_M_IA64) && !defined(HAVE_TICK_COUNTER)
+typedef unsigned __int64 ticks;
+
+# ifdef __cplusplus
+extern "C"
+# endif
+ticks __getReg(int whichReg);
+#pragma intrinsic(__getReg)
+
+static __inline ticks getticks(void)
+{
+ volatile ticks temp;
+ temp = __getReg(3116);
+ return temp;
+}
+
+INLINE_ELAPSED(inline)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+/*
+ * PA-RISC cycle counter
+ */
+#if defined(__hppa__) || defined(__hppa) && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long ticks;
+
+# ifdef __GNUC__
+static __inline__ ticks getticks(void)
+{
+ ticks ret;
+
+ __asm__ __volatile__("mfctl 16, %0": "=r" (ret));
+ /* no input, nothing else clobbered */
+ return ret;
+}
+# else
+# include <machine/inline.h>
+static inline unsigned long getticks(void)
+{
+ register ticks ret;
+ _MFCTL(16, ret);
+ return ret;
+}
+# endif
+
+INLINE_ELAPSED(inline)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+/* S390, courtesy of James Treacy */
+#if defined(__GNUC__) && defined(__s390__) && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long long ticks;
+
+static __inline__ ticks getticks(void)
+{
+ ticks cycles;
+ __asm__("stck 0(%0)" : : "a" (&(cycles)) : "memory", "cc");
+ return cycles;
+}
+
+INLINE_ELAPSED(__inline__)
+
+#define HAVE_TICK_COUNTER
+#endif
+/*----------------------------------------------------------------*/
+#if defined(__GNUC__) && defined(__alpha__) && !defined(HAVE_TICK_COUNTER)
+/*
+ * The 32-bit cycle counter on alpha overflows pretty quickly,
+ * unfortunately. A 1GHz machine overflows in 4 seconds.
+ */
+typedef unsigned int ticks;
+
+static __inline__ ticks getticks(void)
+{
+ unsigned long cc;
+ __asm__ __volatile__ ("rpcc %0" : "=r"(cc));
+ return (cc & 0xFFFFFFFF);
+}
+
+INLINE_ELAPSED(__inline__)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+#if defined(__GNUC__) && defined(__sparc_v9__) && !defined(HAVE_TICK_COUNTER)
+typedef unsigned long ticks;
+
+static __inline__ ticks getticks(void)
+{
+ ticks ret;
+ __asm__ __volatile__("rd %%tick, %0" : "=r" (ret));
+ return ret;
+}
+
+INLINE_ELAPSED(__inline__)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+#if (defined(__DECC) || defined(__DECCXX)) && defined(__alpha) && defined(HAVE_C_ASM_H) && !defined(HAVE_TICK_COUNTER)
+# include <c_asm.h>
+typedef unsigned int ticks;
+
+static __inline ticks getticks(void)
+{
+ unsigned long cc;
+ cc = asm("rpcc %v0");
+ return (cc & 0xFFFFFFFF);
+}
+
+INLINE_ELAPSED(__inline)
+
+#define HAVE_TICK_COUNTER
+#endif
+/*----------------------------------------------------------------*/
+/* SGI/Irix */
+#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_SGI_CYCLE) && !defined(HAVE_TICK_COUNTER)
+typedef struct timespec ticks;
+
+static inline ticks getticks(void)
+{
+ struct timespec t;
+ clock_gettime(CLOCK_SGI_CYCLE, &t);
+ return t;
+}
+
+static inline double elapsed(ticks t1, ticks t0)
+{
+ return ((double)t1.tv_sec - (double)t0.tv_sec) * 1.0E9 +
+ ((double)t1.tv_nsec - (double)t0.tv_nsec);
+}
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+/* Cray UNICOS _rtc() intrinsic function */
+#if defined(HAVE__RTC) && !defined(HAVE_TICK_COUNTER)
+#ifdef HAVE_INTRINSICS_H
+# include <intrinsics.h>
+#endif
+
+typedef long long ticks;
+
+#define getticks _rtc
+
+INLINE_ELAPSED(inline)
+
+#define HAVE_TICK_COUNTER
+#endif
+
+/*----------------------------------------------------------------*/
+/* MIPS ZBus */
+#if defined(HAVE_MIPS_ZBUS_TIMER) && HAVE_MIPS_ZBUS_TIMER
+#if defined(__mips__) && !defined(HAVE_TICK_COUNTER)
+#include <sys/mman.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+typedef uint64_t ticks;
+
+static inline ticks getticks(void)
+{
+ static uint64_t* addr = 0;
+
+ if (addr == 0)
+ {
+ uint32_t rq_addr = 0x10030000;
+ int fd;
+ int pgsize;
+
+ pgsize = getpagesize();
+ fd = open ("/dev/mem", O_RDONLY | O_SYNC, 0);
+ if (fd < 0) {
+ perror("open");
+ return NULL;
+ }
+ addr = mmap(0, pgsize, PROT_READ, MAP_SHARED, fd, rq_addr);
+ close(fd);
+ if (addr == (uint64_t *)-1) {
+ perror("mmap");
+ return NULL;
+ }
+ }
+
+ return *addr;
+}
+
+INLINE_ELAPSED(inline)
+
+#define HAVE_TICK_COUNTER
+#endif
+#endif /* HAVE_MIPS_ZBUS_TIMER */
+
+#endif
diff --git a/include/infft.h b/include/infft.h
new file mode 100644
index 0000000..9f298ee
--- /dev/null
+++ b/include/infft.h
@@ -0,0 +1,1389 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: infft.h 3896 2012-10-10 12:19:26Z tovo $ */
+
+/* NFFT internal header file */
+#ifndef __INFFT_H__
+#define __INFFT_H__
+
+#include "config.h"
+
+#include <math.h>
+#include <float.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include <stdio.h>
+#include <string.h>
+
+#include <stdlib.h> /* size_t */
+#include <stdarg.h> /* va_list */
+#include <stddef.h> /* ptrdiff_t */
+
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#if HAVE_STDINT_H
+#include <stdint.h> /* uintptr_t, maybe */
+#endif
+
+#if HAVE_INTTYPES_H
+#include <inttypes.h> /* uintptr_t, maybe */
+#endif
+
+#include <fftw3.h>
+
+#include "ticks.h"
+
+/* Determine precision and name-mangling scheme. */
+#define CONCAT(prefix, name) prefix ## name
+#if defined(NFFT_SINGLE)
+typedef float R;
+typedef float _Complex C;
+#define Y(name) CONCAT(nfftf_,name)
+#define Z(name) CONCAT(fftwf_,name)
+#define NFSFT(name) CONCAT(nfsftf_,name)
+#elif defined(NFFT_LDOUBLE)
+typedef long double R;
+typedef long double _Complex C;
+#define Y(name) CONCAT(nfftl_,name)
+#define Z(name) CONCAT(fftwl_,name)
+#define NFSFT(name) CONCAT(nfsftl_,name)
+#else
+typedef double R;
+typedef double _Complex C;
+#define Y(name) CONCAT(nfft_,name)
+#define Z(name) CONCAT(fftw_,name)
+#define NFSFT(name) CONCAT(nfsft_,name)
+#endif
+#define X(name) Y(name)
+
+#define STRINGIZEx(x) #x
+#define STRINGIZE(x) STRINGIZEx(x)
+
+#ifdef NFFT_LDOUBLE
+# define K(x) ((R) x##L)
+#else
+# define K(x) ((R) x)
+#endif
+#define DK(name, value) const R name = K(value)
+
+/* Integral type large enough to contain a stride (what ``int'' should have been
+ * in the first place) */
+typedef ptrdiff_t INT;
+
+#define KPI K(3.1415926535897932384626433832795028841971693993751)
+#define K2PI K(6.2831853071795864769252867665590057683943387987502)
+#define KE K(2.7182818284590452353602874713526624977572470937000)
+
+#define IF(x,a,b) ((x)?(a):(b))
+#define MIN(a,b) (((a)<(b))?(a):(b))
+#define MAX(a,b) (((a)>(b))?(a):(b))
+#define ABS(x) (((x)>K(0.0))?(x):(-(x)))
+#define SIGN(a) (((a)>=0)?1:-1)
+#define SIGN(a) (((a)>=0)?1:-1)
+#define SIGNF(a) IF((a)<K(0.0),K(-1.0),K(1.0))
+
+/* macros for window functions */
+
+#if defined(DIRAC_DELTA)
+ #define PHI_HUT(k,d) K(1.0)
+ #define PHI(x,d) IF(FABS((x)) < K(10E-8),K(1.0),K(0.0))
+ #define WINDOW_HELP_INIT(d)
+ #define WINDOW_HELP_FINALIZE
+ #define WINDOW_HELP_ESTIMATE_m 0
+#elif defined(GAUSSIAN)
+ #define PHI_HUT(k,d) ((R)EXP(-(POW(KPI*(k)/ths->n[d],K(2.0))*ths->b[d])))
+ #define PHI(x,d) ((R)EXP(-POW((x)*((R)ths->n[d]),K(2.0)) / \
+ ths->b[d])/SQRT(KPI*ths->b[d]))
+ #define WINDOW_HELP_INIT \
+ { \
+ int WINDOW_idx; \
+ ths->b = (R*) Y(malloc)(ths->d*sizeof(R)); \
+ for (WINDOW_idx = 0; WINDOW_idx < ths->d; WINDOW_idx++) \
+ ths->b[WINDOW_idx]=(K(2.0)*ths->sigma[WINDOW_idx]) / \
+ (K(2.0)*ths->sigma[WINDOW_idx] - K(1.0)) * (((R)ths->m) / KPI); \
+ }
+ #define WINDOW_HELP_FINALIZE {Y(free)(ths->b);}
+ #define WINDOW_HELP_ESTIMATE_m 12
+#elif defined(B_SPLINE)
+ #define PHI_HUT(k,d) ((R)(((k) == 0) ? K(1.0) / ths->n[(d)] : \
+ POW(SIN((k) * KPI / ths->n[(d)]) / ((k) * KPI / ths->n[(d)]), \
+ K(2.0) * ths->m)/ths->n[(d)]))
+ #define PHI(x,d) (Y(bspline)(2*ths->m,((x)*ths->n[(d)]) + \
+ (R)ths->m,ths->spline_coeffs) / ths->n[(d)])
+ #define WINDOW_HELP_INIT \
+ { \
+ ths->spline_coeffs= (R*)Y(malloc)(2*ths->m*sizeof(R)); \
+ }
+ #define WINDOW_HELP_FINALIZE {Y(free)(ths->spline_coeffs);}
+ #define WINDOW_HELP_ESTIMATE_m 11
+#elif defined(SINC_POWER)
+ #define PHI_HUT(k,d) (Y(bspline)(2 * ths->m, (K(2.0) * ths->m*(k)) / \
+ ((K(2.0) * ths->sigma[(d)] - 1) * ths->n[(d)] / \
+ ths->sigma[(d)]) + (R)ths->m, ths->spline_coeffs))
+ #define PHI(x,d) ((R)(ths->n[(d)] / ths->sigma[(d)] * \
+ (K(2.0) * ths->sigma[(d)] - K(1.0))/ (K(2.0)*ths->m) * \
+ POW(Y(sinc)(KPI * ths->n[(d)] / ths->sigma[(d)] * (x) * \
+ (K(2.0) * ths->sigma[(d)] - K(1.0)) / (K(2.0)*ths->m)) , 2*ths->m) / \
+ ths->n[(d)]))
+ #define WINDOW_HELP_INIT \
+ { \
+ ths->spline_coeffs= (R*)Y(malloc)(2 * ths->m * sizeof(R)); \
+ }
+ #define WINDOW_HELP_FINALIZE {Y(free)(ths->spline_coeffs);}
+ #define WINDOW_HELP_ESTIMATE_m 9
+#else /* Kaiser-Bessel is the default. */
+ #define PHI_HUT(k,d) ((R)Y(bessel_i0)(ths->m * SQRT(\
+ POW((R)(ths->b[d]), K(2.0)) - POW(K(2.0) * KPI * (k) / ths->n[d], K(2.0)))))
+ #define PHI(x,d) ((R)((POW((R)(ths->m), K(2.0))\
+ -POW((x)*ths->n[d],K(2.0))) > 0)? \
+ SINH(ths->b[d] * SQRT(POW((R)(ths->m),K(2.0)) - \
+ POW((x)*ths->n[d],K(2.0))))/(KPI*SQRT(POW((R)(ths->m),K(2.0)) - \
+ POW((x)*ths->n[d],K(2.0)))) : (((POW((R)(ths->m),K(2.0)) - \
+ POW((x)*ths->n[d],K(2.0))) < 0)? SIN(ths->b[d] * \
+ SQRT(POW(ths->n[d]*(x),K(2.0)) - POW((R)(ths->m), K(2.0)))) / \
+ (KPI*SQRT(POW(ths->n[d]*(x),K(2.0)) - POW((R)(ths->m),K(2.0)))):K(1.0)))
+ #define WINDOW_HELP_INIT \
+ { \
+ int WINDOW_idx; \
+ ths->b = (R*) Y(malloc)(ths->d*sizeof(R)); \
+ for (WINDOW_idx = 0; WINDOW_idx < ths->d; WINDOW_idx++) \
+ ths->b[WINDOW_idx] = ((R)KPI*(K(2.0)-K(1.0) / ths->sigma[WINDOW_idx])); \
+ }
+ #define WINDOW_HELP_FINALIZE {Y(free)(ths->b);}
+ #define WINDOW_HELP_ESTIMATE_m 6
+#endif
+
+#if defined(NFFT_LDOUBLE)
+#if HAVE_DECL_COPYSIGNL == 0
+extern long double copysignl(long double, long double);
+#endif
+#if HAVE_DECL_NEXTAFTERL == 0
+extern long double nextafterl(long double, long double);
+#endif
+#if HAVE_DECL_NANL == 0
+extern long double nanl(const char *tag);
+#endif
+#if HAVE_DECL_CEILL == 0
+extern long double ceill(long double);
+#endif
+#if HAVE_DECL_FLOORL == 0
+extern long double floorl(long double);
+#endif
+#if HAVE_DECL_NEARBYINTL == 0
+extern long double nearbyintl(long double);
+#endif
+#if HAVE_DECL_RINTL == 0
+extern long double rintl(long double);
+#endif
+#if HAVE_DECL_ROUNDL == 0
+extern long double roundl(long double);
+#endif
+#if HAVE_DECL_LRINTL == 0
+extern long int lrintl(long double);
+#endif
+#if HAVE_DECL_LROUNDL == 0
+extern long int lroundl(long double);
+#endif
+#if HAVE_DECL_LLRINTL == 0
+extern long long int llrintl(long double);
+#endif
+#if HAVE_DECL_LLROUNDL == 0
+extern long long int llroundl(long double);
+#endif
+#if HAVE_DECL_TRUNCL == 0
+extern long double truncl(long double);
+#endif
+#if HAVE_DECL_FMODL == 0
+extern long double fmodl(long double, long double);
+#endif
+#if HAVE_DECL_REMAINDERL == 0
+extern long double remainderl(long double, long double);
+#endif
+#if HAVE_DECL_REMQUOL == 0
+extern long double remquol(long double x, long double y, int *);
+#endif
+#if HAVE_DECL_FDIML == 0
+extern long double fdiml(long double, long double);
+#endif
+#if HAVE_DECL_FMAXL == 0
+extern long double fmaxl(long double, long double);
+#endif
+#if HAVE_DECL_FMINL == 0
+extern long double fminl(long double, long double);
+#endif
+#if HAVE_DECL_FMAL == 0
+extern long double fmal(long double x, long double y, long double z);
+#endif
+#if HAVE_DECL_FABSL == 0
+extern long double fabsl(long double);
+#endif
+#if HAVE_DECL_SQRTL == 0
+extern long double sqrtl(long double);
+#endif
+#if HAVE_DECL_CBRTL == 0
+extern long double cbrtl(long double);
+#endif
+#if HAVE_DECL_HYPOTL == 0
+extern long double hypotl(long double, long double);
+#endif
+#if HAVE_DECL_EXPL == 0
+extern long double expl(long double);
+#endif
+#if HAVE_DECL_EXP2L == 0
+extern long double exp2l(long double);
+#endif
+#if HAVE_DECL_EXPM1L == 0
+extern long double expm1l(long double);
+#endif
+#if HAVE_DECL_LOGL == 0
+extern long double logl(long double);
+#endif
+#if HAVE_DECL_LOG2L == 0
+extern long double log2l(long double);
+#endif
+#if HAVE_DECL_LOG10L == 0
+extern long double log10l(long double);
+#endif
+#if HAVE_DECL_LOG1PL == 0
+extern long double log1pl(long double);
+#endif
+#if HAVE_DECL_LOGBL == 0
+extern long double logbl(long double);
+#endif
+#if HAVE_DECL_ILOGBL == 0
+extern int ilogbl(long double);
+#endif
+#if HAVE_DECL_MODFL == 0
+extern long double modfl(long double, long double *);
+#endif
+#if HAVE_DECL_FREXPL == 0
+extern long double frexpl(long double, int *);
+#endif
+#if HAVE_DECL_LDEXPL == 0
+extern long double ldexpl(long double, int);
+#endif
+#if HAVE_DECL_SCALBNL == 0
+extern long double scalbnl(long double, int);
+#endif
+#if HAVE_DECL_SCALBLNL == 0
+extern long double scalblnl(long double, long int);
+#endif
+#if HAVE_DECL_POWL == 0
+extern long double powl(long double, long double);
+#endif
+#if HAVE_DECL_COSL == 0
+extern long double cosl(long double);
+#endif
+#if HAVE_DECL_SINL == 0
+extern long double sinl(long double);
+#endif
+#if HAVE_DECL_TANL == 0
+extern long double tanl(long double);
+#endif
+#if HAVE_DECL_COSHL == 0
+extern long double coshl(long double);
+#endif
+#if HAVE_DECL_SINHL == 0
+extern long double sinhl(long double);
+#endif
+#if HAVE_DECL_TANHL == 0
+extern long double tanhl(long double);
+#endif
+#if HAVE_DECL_ACOSL == 0
+extern long double acosl(long double);
+#endif
+#if HAVE_DECL_ASINL == 0
+extern long double asinl(long double);
+#endif
+#if HAVE_DECL_ATANL == 0
+extern long double atanl(long double);
+#endif
+#if HAVE_DECL_ATAN2L == 0
+extern long double atan2l(long double, long double);
+#endif
+#if HAVE_DECL_ACOSHL == 0
+extern long double acoshl(long double);
+#endif
+#if HAVE_DECL_ASINHL == 0
+extern long double asinhl(long double);
+#endif
+#if HAVE_DECL_ATANHL == 0
+extern long double atanhl(long double);
+#endif
+#if HAVE_DECL_TGAMMAL == 0
+extern long double tgammal(long double);
+#endif
+#if HAVE_DECL_LGAMMAL == 0
+extern long double lgammal(long double);
+#endif
+#if HAVE_DECL_J0L == 0
+extern long double j0l(long double);
+#endif
+#if HAVE_DECL_J1L == 0
+extern long double j1l(long double);
+#endif
+#if HAVE_DECL_JNL == 0
+extern long double jnl(int, long double);
+#endif
+#if HAVE_DECL_Y0L == 0
+extern long double y0l(long double);
+#endif
+#if HAVE_DECL_Y1L == 0
+extern long double y1l(long double);
+#endif
+#if HAVE_DECL_YNL == 0
+extern long double ynl(int, long double);
+#endif
+#if HAVE_DECL_ERFL == 0
+extern long double erfl(long double);
+#endif
+#if HAVE_DECL_ERFCL == 0
+extern long double erfcl(long double);
+#endif
+#if HAVE_DECL_CREALL == 0
+extern long double creall(long double _Complex z);
+#endif
+#if HAVE_DECL_CIMAGL == 0
+extern long double cimagl(long double _Complex z);
+#endif
+#if HAVE_DECL_CABSL == 0
+extern long double cabsl(long double _Complex z);
+#endif
+#if HAVE_DECL_CARGL == 0
+extern long double cargl(long double _Complex z);
+#endif
+#if HAVE_DECL_CONJL == 0
+extern long double _Complex conjl(long double _Complex z);
+#endif
+#if HAVE_DECL_CPROJL == 0
+extern long double _Complex cprojl(long double _Complex z);
+#endif
+#if HAVE_DECL_CSQRTL == 0
+extern long double _Complex csqrtl(long double _Complex z);
+#endif
+#if HAVE_DECL_CEXPL == 0
+extern long double _Complex cexpl(long double _Complex z);
+#endif
+#if HAVE_DECL_CLOGL == 0
+extern long double _Complex clogl(long double _Complex z);
+#endif
+#if HAVE_DECL_CPOWL == 0
+extern long double _Complex cpowl(long double _Complex z, long double _Complex w);
+#endif
+#if HAVE_DECL_CSINL == 0
+extern long double _Complex csinl(long double _Complex z);
+#endif
+#if HAVE_DECL_CCOSL == 0
+extern long double _Complex ccosl(long double _Complex z);
+#endif
+#if HAVE_DECL_CTANL == 0
+extern long double _Complex ctanl(long double _Complex z);
+#endif
+#if HAVE_DECL_CASINL == 0
+extern long double _Complex casinl(long double _Complex z);
+#endif
+#if HAVE_DECL_CACOSL == 0
+extern long double _Complex cacosl(long double _Complex z);
+#endif
+#if HAVE_DECL_CATANL == 0
+extern long double _Complex catanl(long double _Complex z);
+#endif
+#if HAVE_DECL_CSINHL == 0
+extern long double _Complex csinhl(long double _Complex z);
+#endif
+#if HAVE_DECL_CCOSHL == 0
+extern long double _Complex ccoshl(long double _Complex z);
+#endif
+#if HAVE_DECL_CTANHL == 0
+extern long double _Complex ctanhl(long double _Complex z);
+#endif
+#if HAVE_DECL_CASINHL == 0
+extern long double _Complex casinhl(long double _Complex z);
+#endif
+#if HAVE_DECL_CACOSHL == 0
+extern long double _Complex cacoshl(long double _Complex z);
+#endif
+#if HAVE_DECL_CATANHL == 0
+extern long double _Complex catanhl(long double _Complex z);
+#endif
+#define COPYSIGN copysignl
+#define NEXTAFTER nextafterl
+#define MKNAN nanl
+#define CEIL ceill
+#define FLOOR floorl
+#define NEARBYINT nearbyintl
+#define RINT rintl
+#define ROUND roundl
+#define LRINT lrintl
+#define LROUND lroundl
+#define LLRINT llrintl
+#define LLROUND llroundl
+#define TRUNC truncl
+#define FMOD fmodl
+#define REMAINDER remainderl
+#define REMQUO remquol
+#define FDIM fdiml
+#define FMAX fmaxl
+#define FMIN fminl
+#define FFMA fmal
+#define FABS fabsl
+#define SQRT sqrtl
+#define CBRT cbrtl
+#define HYPOT hypotl
+#define EXP expl
+#define EXP2 exp2l
+#define EXPM1 expm1l
+#define LOG logl
+#define LOG2 log2l
+#define LOG10 log10l
+#define LOG1P log1pl
+#define LOGB logbl
+#define ILOGB ilogbl
+#define MODF modfl
+#define FREXP frexpl
+#define LDEXP ldexpl
+#define SCALBN scalbnl
+#define SCALBLN scalblnl
+#define POW powl
+#define COS cosl
+#define SIN sinl
+#define TAN tanl
+#define COSH coshl
+#define SINH sinhl
+#define TANH tanhl
+#define ACOS acosl
+#define ASIN asinl
+#define ATAN atanl
+#define ATAN2 atan2l
+#define ACOSH acoshl
+#define ASINH asinhl
+#define ATANH atanhl
+#define TGAMMA tgammal
+#define LGAMMA lgammal
+#define J0 j0l
+#define J1 j1l
+#define JN jnl
+#define Y0 y0l
+#define Y1 y1l
+#define YN ynl
+#define ERF erfl
+#define ERFC erfcl
+#define CREAL creall
+#define CIMAG cimagl
+#define CABS cabsl
+#define CARG cargl
+#define CONJ conjl
+#define CPROJ cprojl
+#define CSQRT csqrtl
+#define CEXP cexpl
+#define CLOG clogl
+#define CPOW cpowl
+#define CSIN csinl
+#define CCOS ccosl
+#define CTAN ctanl
+#define CASIN casinl
+#define CACOS cacosl
+#define CATAN catanl
+#define CSINH csinhl
+#define CCOSH ccoshl
+#define CTANH ctanhl
+#define CASINH casinhl
+#define CACOSH cacoshl
+#define CATANH catanhl
+#elif defined(NFFT_SINGLE)
+#if HAVE_DECL_COPYSIGNF == 0
+extern float copysignf(float, float);
+#endif
+#if HAVE_DECL_NEXTAFTERF == 0
+extern float nextafterf(float, float);
+#endif
+#if HAVE_DECL_NANF == 0
+extern float nanf(const char *tag);
+#endif
+#if HAVE_DECL_CEILF == 0
+extern float ceilf(float);
+#endif
+#if HAVE_DECL_FLOORF == 0
+extern float floorf(float);
+#endif
+#if HAVE_DECL_NEARBYINTF == 0
+extern float nearbyintf(float);
+#endif
+#if HAVE_DECL_RINTF == 0
+extern float rintf(float);
+#endif
+#if HAVE_DECL_ROUNDF == 0
+extern float roundf(float);
+#endif
+#if HAVE_DECL_LRINTF == 0
+extern long int lrintf(float);
+#endif
+#if HAVE_DECL_LROUNDF == 0
+extern long int lroundf(float);
+#endif
+#if HAVE_DECL_LLRINTF == 0
+extern long long int llrintf(float);
+#endif
+#if HAVE_DECL_LLROUNDF == 0
+extern long long int llroundf(float);
+#endif
+#if HAVE_DECL_TRUNCF == 0
+extern float truncf(float);
+#endif
+#if HAVE_DECL_FMODF == 0
+extern float fmodf(float, float);
+#endif
+#if HAVE_DECL_REMAINDERF == 0
+extern float remainderf(float, float);
+#endif
+#if HAVE_DECL_REMQUOF == 0
+extern float remquof(float x, float y, int *);
+#endif
+#if HAVE_DECL_FDIMF == 0
+extern float fdimf(float, float);
+#endif
+#if HAVE_DECL_FMAXF == 0
+extern float fmaxf(float, float);
+#endif
+#if HAVE_DECL_FMINF == 0
+extern float fminf(float, float);
+#endif
+#if HAVE_DECL_FMAF == 0
+extern float fmaf(float x, float y, float z);
+#endif
+#if HAVE_DECL_FABSF == 0
+extern float fabsf(float);
+#endif
+#if HAVE_DECL_SQRTF == 0
+extern float sqrtf(float);
+#endif
+#if HAVE_DECL_CBRTF == 0
+extern float cbrtf(float);
+#endif
+#if HAVE_DECL_HYPOTF == 0
+extern float hypotf(float, float);
+#endif
+#if HAVE_DECL_EXPF == 0
+extern float expf(float);
+#endif
+#if HAVE_DECL_EXP2F == 0
+extern float exp2f(float);
+#endif
+#if HAVE_DECL_EXPM1F == 0
+extern float expm1f(float);
+#endif
+#if HAVE_DECL_LOGF == 0
+extern float logf(float);
+#endif
+#if HAVE_DECL_LOG2F == 0
+extern float log2f(float);
+#endif
+#if HAVE_DECL_LOG10F == 0
+extern float log10f(float);
+#endif
+#if HAVE_DECL_LOG1PF == 0
+extern float log1pf(float);
+#endif
+#if HAVE_DECL_LOGBF == 0
+extern float logbf(float);
+#endif
+#if HAVE_DECL_ILOGBF == 0
+extern int ilogbf(float);
+#endif
+#if HAVE_DECL_MODFF == 0
+extern float modff(float, float *);
+#endif
+#if HAVE_DECL_FREXPF == 0
+extern float frexpf(float, int *);
+#endif
+#if HAVE_DECL_LDEXPF == 0
+extern float ldexpf(float, int);
+#endif
+#if HAVE_DECL_SCALBNF == 0
+extern float scalbnf(float, int);
+#endif
+#if HAVE_DECL_SCALBLNF == 0
+extern float scalblnf(float, long int);
+#endif
+#if HAVE_DECL_POWF == 0
+extern float powf(float, float);
+#endif
+#if HAVE_DECL_COSF == 0
+extern float cosf(float);
+#endif
+#if HAVE_DECL_SINF == 0
+extern float sinf(float);
+#endif
+#if HAVE_DECL_TANF == 0
+extern float tanf(float);
+#endif
+#if HAVE_DECL_COSHF == 0
+extern float coshf(float);
+#endif
+#if HAVE_DECL_SINHF == 0
+extern float sinhf(float);
+#endif
+#if HAVE_DECL_TANHF == 0
+extern float tanhf(float);
+#endif
+#if HAVE_DECL_ACOSF == 0
+extern float acosf(float);
+#endif
+#if HAVE_DECL_ASINF == 0
+extern float asinf(float);
+#endif
+#if HAVE_DECL_ATANF == 0
+extern float atanf(float);
+#endif
+#if HAVE_DECL_ATAN2F == 0
+extern float atan2f(float, float);
+#endif
+#if HAVE_DECL_ACOSHF == 0
+extern float acoshf(float);
+#endif
+#if HAVE_DECL_ASINHF == 0
+extern float asinhf(float);
+#endif
+#if HAVE_DECL_ATANHF == 0
+extern float atanhf(float);
+#endif
+#if HAVE_DECL_TGAMMAF == 0
+extern float tgammaf(float);
+#endif
+#if HAVE_DECL_LGAMMAF == 0
+extern float lgammaf(float);
+#endif
+#if HAVE_DECL_J0F == 0
+extern float j0f(float);
+#endif
+#if HAVE_DECL_J1F == 0
+extern float j1f(float);
+#endif
+#if HAVE_DECL_JNF == 0
+extern float jnf(int, float);
+#endif
+#if HAVE_DECL_Y0F == 0
+extern float y0f(float);
+#endif
+#if HAVE_DECL_Y1F == 0
+extern float y1f(float);
+#endif
+#if HAVE_DECL_YNF == 0
+extern float ynf(int, float);
+#endif
+#if HAVE_DECL_ERFF == 0
+extern float erff(float);
+#endif
+#if HAVE_DECL_ERFCF == 0
+extern float erfcf(float);
+#endif
+#if HAVE_DECL_CREALF == 0
+extern float crealf(float _Complex z);
+#endif
+#if HAVE_DECL_CIMAGF == 0
+extern float cimagf(float _Complex z);
+#endif
+#if HAVE_DECL_CABSF == 0
+extern float cabsf(float _Complex z);
+#endif
+#if HAVE_DECL_CARGF == 0
+extern float cargf(float _Complex z);
+#endif
+#if HAVE_DECL_CONJF == 0
+extern float _Complex conjf(float _Complex z);
+#endif
+#if HAVE_DECL_CPROJF == 0
+extern float _Complex cprojf(float _Complex z);
+#endif
+#if HAVE_DECL_CSQRTF == 0
+extern float _Complex csqrtf(float _Complex z);
+#endif
+#if HAVE_DECL_CEXPF == 0
+extern float _Complex cexpf(float _Complex z);
+#endif
+#if HAVE_DECL_CLOGF == 0
+extern float _Complex clogf(float _Complex z);
+#endif
+#if HAVE_DECL_CPOWF == 0
+extern float _Complex cpowf(float _Complex z, float _Complex w);
+#endif
+#if HAVE_DECL_CSINF == 0
+extern float _Complex csinf(float _Complex z);
+#endif
+#if HAVE_DECL_CCOSF == 0
+extern float _Complex ccosf(float _Complex z);
+#endif
+#if HAVE_DECL_CTANF == 0
+extern float _Complex ctanf(float _Complex z);
+#endif
+#if HAVE_DECL_CASINF == 0
+extern float _Complex casinf(float _Complex z);
+#endif
+#if HAVE_DECL_CACOSF == 0
+extern float _Complex cacosf(float _Complex z);
+#endif
+#if HAVE_DECL_CATANF == 0
+extern float _Complex catanf(float _Complex z);
+#endif
+#if HAVE_DECL_CSINHF == 0
+extern float _Complex csinhf(float _Complex z);
+#endif
+#if HAVE_DECL_CCOSHF == 0
+extern float _Complex ccoshf(float _Complex z);
+#endif
+#if HAVE_DECL_CTANHF == 0
+extern float _Complex ctanhf(float _Complex z);
+#endif
+#if HAVE_DECL_CASINHF == 0
+extern float _Complex casinhf(float _Complex z);
+#endif
+#if HAVE_DECL_CACOSHF == 0
+extern float _Complex cacoshf(float _Complex z);
+#endif
+#if HAVE_DECL_CATANHF == 0
+extern float _Complex catanhf(float _Complex z);
+#endif
+#define COPYSIGN copysignf
+#define NEXTAFTER nextafterf
+#define MKNAN nanf
+#define CEIL ceilf
+#define FLOOR floorf
+#define NEARBYINT nearbyintf
+#define RINT rintf
+#define ROUND roundf
+#define LRINT lrintf
+#define LROUND lroundf
+#define LLRINT llrintf
+#define LLROUND llroundf
+#define TRUNC truncf
+#define FMOD fmodf
+#define REMAINDER remainderf
+#define REMQUO remquof
+#define FDIM fdimf
+#define FMAX fmaxf
+#define FMIN fminf
+#define FFMA fmaf
+#define FABS fabsf
+#define SQRT sqrtf
+#define CBRT cbrtf
+#define HYPOT hypotf
+#define EXP expf
+#define EXP2 exp2f
+#define EXPM1 expm1f
+#define LOG logf
+#define LOG2 log2f
+#define LOG10 log10f
+#define LOG1P log1pf
+#define LOGB logbf
+#define ILOGB ilogbf
+#define MODF modff
+#define FREXP frexpf
+#define LDEXP ldexpf
+#define SCALBN scalbnf
+#define SCALBLN scalblnf
+#define POW powf
+#define COS cosf
+#define SIN sinf
+#define TAN tanf
+#define COSH coshf
+#define SINH sinhf
+#define TANH tanhf
+#define ACOS acosf
+#define ASIN asinf
+#define ATAN atanf
+#define ATAN2 atan2f
+#define ACOSH acoshf
+#define ASINH asinhf
+#define ATANH atanhf
+#define TGAMMA tgammaf
+#define LGAMMA lgammaf
+#define J0 j0f
+#define J1 j1f
+#define JN jnf
+#define Y0 y0f
+#define Y1 y1f
+#define YN ynf
+#define ERF erff
+#define ERFC erfcf
+#define CREAL crealf
+#define CIMAG cimagf
+#define CABS cabsf
+#define CARG cargf
+#define CONJ conjf
+#define CPROJ cprojf
+#define CSQRT csqrtf
+#define CEXP cexpf
+#define CLOG clogf
+#define CPOW cpowf
+#define CSIN csinf
+#define CCOS ccosf
+#define CTAN ctanf
+#define CASIN casinf
+#define CACOS cacosf
+#define CATAN catanf
+#define CSINH csinhf
+#define CCOSH ccoshf
+#define CTANH ctanhf
+#define CASINH casinhf
+#define CACOSH cacoshf
+#define CATANH catanhf
+#else
+#if HAVE_DECL_COPYSIGN == 0
+extern double copysign(double, double);
+#endif
+#if HAVE_DECL_NEXTAFTER == 0
+extern double nextafter(double, double);
+#endif
+#if HAVE_DECL_NAN == 0
+extern double nan(const char *tag);
+#endif
+#if HAVE_DECL_CEIL == 0
+extern double ceil(double);
+#endif
+#if HAVE_DECL_FLOOR == 0
+extern double floor(double);
+#endif
+#if HAVE_DECL_NEARBYINT == 0
+extern double nearbyint(double);
+#endif
+#if HAVE_DECL_RINT == 0
+extern double rint(double);
+#endif
+#if HAVE_DECL_ROUND == 0
+extern double round(double);
+#endif
+#if HAVE_DECL_LRINT == 0
+extern long int lrint(double);
+#endif
+#if HAVE_DECL_LROUND == 0
+extern long int lround(double);
+#endif
+#if HAVE_DECL_LLRINT == 0
+extern long long int llrint(double);
+#endif
+#if HAVE_DECL_LLROUND == 0
+extern long long int llround(double);
+#endif
+#if HAVE_DECL_TRUNC == 0
+extern double trunc(double);
+#endif
+#if HAVE_DECL_FMOD == 0
+extern double fmod(double, double);
+#endif
+#if HAVE_DECL_REMAINDER == 0
+extern double remainder(double, double);
+#endif
+#if HAVE_DECL_REMQUO == 0
+extern double remquo(double x, double y, int *);
+#endif
+#if HAVE_DECL_FDIM == 0
+extern double fdim(double, double);
+#endif
+#if HAVE_DECL_FMAX == 0
+extern double fmax(double, double);
+#endif
+#if HAVE_DECL_FMIN == 0
+extern double fmin(double, double);
+#endif
+#if HAVE_DECL_FMA == 0
+extern double fma(double x, double y, double z);
+#endif
+#if HAVE_DECL_FABS == 0
+extern double fabs(double);
+#endif
+#if HAVE_DECL_SQRT == 0
+extern double sqrt(double);
+#endif
+#if HAVE_DECL_CBRT == 0
+extern double cbrt(double);
+#endif
+#if HAVE_DECL_HYPOT == 0
+extern double hypot(double, double);
+#endif
+#if HAVE_DECL_EXP == 0
+extern double exp(double);
+#endif
+#if HAVE_DECL_EXP2 == 0
+extern double exp2(double);
+#endif
+#if HAVE_DECL_EXPM1 == 0
+extern double expm1(double);
+#endif
+#if HAVE_DECL_LOG == 0
+extern double log(double);
+#endif
+#if HAVE_DECL_LOG2 == 0
+extern double log2(double);
+#endif
+#if HAVE_DECL_LOG10 == 0
+extern double log10(double);
+#endif
+#if HAVE_DECL_LOG1P == 0
+extern double log1p(double);
+#endif
+#if HAVE_DECL_LOGB == 0
+extern double logb(double);
+#endif
+#if HAVE_DECL_ILOGB == 0
+extern int ilogb(double);
+#endif
+#if HAVE_DECL_MODF == 0
+extern double modf(double, double *);
+#endif
+#if HAVE_DECL_FREXP == 0
+extern double frexp(double, int *);
+#endif
+#if HAVE_DECL_LDEXP == 0
+extern double ldexp(double, int);
+#endif
+#if HAVE_DECL_SCALBN == 0
+extern double scalbn(double, int);
+#endif
+#if HAVE_DECL_SCALBLN == 0
+extern double scalbln(double, long int);
+#endif
+#if HAVE_DECL_POW == 0
+extern double pow(double, double);
+#endif
+#if HAVE_DECL_COS == 0
+extern double cos(double);
+#endif
+#if HAVE_DECL_SIN == 0
+extern double sin(double);
+#endif
+#if HAVE_DECL_TAN == 0
+extern double tan(double);
+#endif
+#if HAVE_DECL_COSH == 0
+extern double cosh(double);
+#endif
+#if HAVE_DECL_SINH == 0
+extern double sinh(double);
+#endif
+#if HAVE_DECL_TANH == 0
+extern double tanh(double);
+#endif
+#if HAVE_DECL_ACOS == 0
+extern double acos(double);
+#endif
+#if HAVE_DECL_ASIN == 0
+extern double asin(double);
+#endif
+#if HAVE_DECL_ATAN == 0
+extern double atan(double);
+#endif
+#if HAVE_DECL_ATAN2 == 0
+extern double atan2(double, double);
+#endif
+#if HAVE_DECL_ACOSH == 0
+extern double acosh(double);
+#endif
+#if HAVE_DECL_ASINH == 0
+extern double asinh(double);
+#endif
+#if HAVE_DECL_ATANH == 0
+extern double atanh(double);
+#endif
+#if HAVE_DECL_TGAMMA == 0
+extern double tgamma(double);
+#endif
+#if HAVE_DECL_LGAMMA == 0
+extern double lgamma(double);
+#endif
+#if HAVE_DECL_J0 == 0
+extern double j0(double);
+#endif
+#if HAVE_DECL_J1 == 0
+extern double j1(double);
+#endif
+#if HAVE_DECL_JN == 0
+extern double jn(int, double);
+#endif
+#if HAVE_DECL_Y0 == 0
+extern double y0(double);
+#endif
+#if HAVE_DECL_Y1 == 0
+extern double y1(double);
+#endif
+#if HAVE_DECL_YN == 0
+extern double yn(int, double);
+#endif
+#if HAVE_DECL_ERF == 0
+extern double erf(double);
+#endif
+#if HAVE_DECL_ERFC == 0
+extern double erfc(double);
+#endif
+#if HAVE_DECL_CREAL == 0
+extern double creal(double _Complex z);
+#endif
+#if HAVE_DECL_CIMAG == 0
+extern double cimag(double _Complex z);
+#endif
+#if HAVE_DECL_CABS == 0
+extern double cabs(double _Complex z);
+#endif
+#if HAVE_DECL_CARG == 0
+extern double carg(double _Complex z);
+#endif
+#if HAVE_DECL_CONJ == 0
+extern double _Complex conj(double _Complex z);
+#endif
+#if HAVE_DECL_CPROJ == 0
+extern double _Complex cproj(double _Complex z);
+#endif
+#if HAVE_DECL_CSQRT == 0
+extern double _Complex csqrt(double _Complex z);
+#endif
+#if HAVE_DECL_CEXP == 0
+extern double _Complex cexp(double _Complex z);
+#endif
+#if HAVE_DECL_CLOG == 0
+extern double _Complex clog(double _Complex z);
+#endif
+#if HAVE_DECL_CPOW == 0
+extern double _Complex cpow(double _Complex z, double _Complex w);
+#endif
+#if HAVE_DECL_CSIN == 0
+extern double _Complex csin(double _Complex z);
+#endif
+#if HAVE_DECL_CCOS == 0
+extern double _Complex ccos(double _Complex z);
+#endif
+#if HAVE_DECL_CTAN == 0
+extern double _Complex ctan(double _Complex z);
+#endif
+#if HAVE_DECL_CASIN == 0
+extern double _Complex casin(double _Complex z);
+#endif
+#if HAVE_DECL_CACOS == 0
+extern double _Complex cacos(double _Complex z);
+#endif
+#if HAVE_DECL_CATAN == 0
+extern double _Complex catan(double _Complex z);
+#endif
+#if HAVE_DECL_CSINH == 0
+extern double _Complex csinh(double _Complex z);
+#endif
+#if HAVE_DECL_CCOSH == 0
+extern double _Complex ccosh(double _Complex z);
+#endif
+#if HAVE_DECL_CTANH == 0
+extern double _Complex ctanh(double _Complex z);
+#endif
+#if HAVE_DECL_CASINH == 0
+extern double _Complex casinh(double _Complex z);
+#endif
+#if HAVE_DECL_CACOSH == 0
+extern double _Complex cacosh(double _Complex z);
+#endif
+#if HAVE_DECL_CATANH == 0
+extern double _Complex catanh(double _Complex z);
+#endif
+#define COPYSIGN copysign
+#define NEXTAFTER nextafter
+#define MKNAN nan
+#define CEIL ceil
+#define FLOOR floor
+#define NEARBYINT nearbyint
+#define RINT rint
+#define ROUND round
+#define LRINT lrint
+#define LROUND lround
+#define LLRINT llrint
+#define LLROUND llround
+#define TRUNC trunc
+#define FMOD fmod
+#define REMAINDER remainder
+#define REMQUO remquo
+#define FDIM fdim
+#define FMAX fmax
+#define FMIN fmin
+#define FFMA fma
+#define FABS fabs
+#define SQRT sqrt
+#define CBRT cbrt
+#define HYPOT hypot
+#define EXP exp
+#define EXP2 exp2
+#define EXPM1 expm1
+#define LOG log
+#define LOG2 log2
+#define LOG10 log10
+#define LOG1P log1p
+#define LOGB logb
+#define ILOGB ilogb
+#define MODF modf
+#define FREXP frexp
+#define LDEXP ldexp
+#define SCALBN scalbn
+#define SCALBLN scalbln
+#define POW pow
+#define COS cos
+#define SIN sin
+#define TAN tan
+#define COSH cosh
+#define SINH sinh
+#define TANH tanh
+#define ACOS acos
+#define ASIN asin
+#define ATAN atan
+#define ATAN2 atan2
+#define ACOSH acosh
+#define ASINH asinh
+#define ATANH atanh
+#define TGAMMA tgamma
+#define LGAMMA lgamma
+#define J0 j0
+#define J1 j1
+#define JN jn
+#define Y0 y0
+#define Y1 y1
+#define YN yn
+#define ERF erf
+#define ERFC erfc
+#define CREAL creal
+#define CIMAG cimag
+#define CABS cabs
+#define CARG carg
+#define CONJ conj
+#define CPROJ cproj
+#define CSQRT csqrt
+#define CEXP cexp
+#define CLOG clog
+#define CPOW cpow
+#define CSIN csin
+#define CCOS ccos
+#define CTAN ctan
+#define CASIN casin
+#define CACOS cacos
+#define CATAN catan
+#define CSINH csinh
+#define CCOSH ccosh
+#define CTANH ctanh
+#define CASINH casinh
+#define CACOSH cacosh
+#define CATANH catanh
+#endif
+
+#if defined(NFFT_LDOUBLE)
+ #define EPSILON LDBL_EPSILON//4.0E-31L
+ #define MANT_DIG LDBL_MANT_DIG
+ #define MIN_EXP LDBL_MIN_EXP
+ #define MAX_EXP LDBL_MAX_EXP
+#elif defined(NFFT_SINGLE)
+ #define EPSILON FLT_EPSILON
+ #define MANT_DIG FLT_MANT_DIG
+ #define MIN_EXP FLT_MIN_EXP
+ #define MAX_EXP FLT_MAX_EXP
+#else
+ #define EPSILON DBL_EPSILON
+ #define MANT_DIG DBL_MANT_DIG
+ #define MIN_EXP DBL_MIN_EXP
+ #define MAX_EXP DBL_MAX_EXP
+#endif
+
+#if defined(FLT_ROUND)
+ #if FLT_ROUND != -1
+ #define FLTROUND 1.0
+ #else
+ #define FLTROUND 0.0
+ #endif
+#else
+ #define FLTROUND 0.0
+#endif
+
+#if HAVE_DECL_DRAND48 == 0
+ extern double drand48(void);
+#endif
+#if HAVE_DECL_SRAND48 == 0
+ extern void srand48(long int);
+#endif
+#define R_RADIX FLT_RADIX
+#define II _Complex_I
+
+/* format strings */
+#if defined(NFFT_LDOUBLE)
+# define FE "LE"
+# define FE_ "% 36.32LE"
+# define FFI "%Lf"
+#elif defined(NFFT_SINGLE)
+# define FE "E"
+# define FE_ "% 12.8E"
+# define FFI "%f"
+#else
+# define FE "lE"
+# define FE_ "% 20.16lE"
+# define FFI "%lf"
+#endif
+
+#define TRUE 1
+#define FALSE 0
+
+/** Dummy use of unused parameters to silence compiler warnings */
+#define UNUSED(x) (void)x
+
+extern void nfft_assertion_failed(const char *s, int line, const char *file);
+
+/* always check */
+#define CK(ex) \
+ (void)((ex) || (nfft_assertion_failed(#ex, __LINE__, __FILE__), 0))
+
+#ifdef NFFT_DEBUG
+ /* check only if debug enabled */
+ #define A(ex) \
+ (void)((ex) || (nfft_assertion_failed(#ex, __LINE__, __FILE__), 0))
+#else
+ #define A(ex) /* nothing */
+#endif
+
+#ifdef HAVE_ALLOCA
+ /* Use alloca if available. */
+ #ifndef alloca
+ #ifdef __GNUC__
+ /* No alloca defined but can use GCC's builtin version. */
+ #define alloca __builtin_alloca
+ #else
+ /* No alloca defined and not using GCC. */
+ #ifdef _MSC_VER
+ /* Using Microsoft's C compiler. Include header file and use _alloca
+ * defined therein. */
+ #include <malloc.h>
+ #define alloca _alloca
+ #else
+ /* Also not using Microsoft's C compiler. */
+ #if HAVE_ALLOCA_H
+ /* Alloca header is available. */
+ #include <alloca.h>
+ #else
+ /* No alloca header available. */
+ #ifdef _AIX
+ /* We're using the AIX C compiler. Use pragma. */
+ #pragma alloca
+ #else
+ /* Not using AIX compiler. */
+ #ifndef alloca /* HP's cc +Olibcalls predefines alloca. */
+ void *alloca(size_t);
+ #endif
+ #endif
+ #endif
+ #endif
+ #endif
+ #endif
+ /* So we have alloca. */
+ #define STACK_MALLOC(T, p, x) p = (T)alloca(x)
+ #define STACK_FREE(x) /* Nothing. Cleanup done automatically. */
+#else /* ! HAVE_ALLOCA */
+ /* Use malloc instead of alloca. So we allocate memory on the heap instead of
+ * on the stack which is slower. */
+ #define STACK_MALLOC(T, p, x) p = (T)nfft_malloc(x)
+ #define STACK_FREE(x) nfft_free(x)
+#endif /* ! HAVE_ALLOCA */
+
+/** Return number of elapsed seconds between two time points. */
+double nfft_elapsed_seconds(ticks t1, ticks t0);
+
+/** Dummy use of unused parameters to silence compiler warnings */
+#define UNUSED(x) (void)x
+
+/** Timing, method works since the inaccurate timer is updated mostly in the
+ * measured function. For small times not every call of the measured function
+ * will also produce a 'unit' time step.
+ * Measuring the fftw might cause a wrong output vector due to the repeated
+ * ffts.
+ */
+#ifdef MEASURE_TIME
+ int MEASURE_TIME_r;
+ double MEASURE_TIME_tt;
+ ticks MEASURE_TIME_t0, MEASURE_TIME_t1;
+
+#define TIC(a) \
+ ths->MEASURE_TIME_t[(a)]=0; \
+ MEASURE_TIME_r=0; \
+ /* DISABLED LOOP due to code blocks causing segfault when repeatedly run */ \
+ /*while(ths->MEASURE_TIME_t[(a)]<0.01)*/ \
+ { \
+ MEASURE_TIME_r++; \
+ MEASURE_TIME_t0 = getticks(); \
+
+/* THE MEASURED FUNCTION IS CALLED REPEATEDLY */
+
+#define TOC(a) \
+ MEASURE_TIME_t1 = getticks(); \
+ MEASURE_TIME_tt = nfft_elapsed_seconds(MEASURE_TIME_t1,MEASURE_TIME_t0);\
+ ths->MEASURE_TIME_t[(a)]+=MEASURE_TIME_tt; \
+ } \
+ ths->MEASURE_TIME_t[(a)]/=MEASURE_TIME_r; \
+
+#else
+#define TIC(a)
+#define TOC(a)
+#endif
+
+#ifdef MEASURE_TIME_FFTW
+#define TIC_FFTW(a) TIC(a)
+#define TOC_FFTW(a) TOC(a)
+#else
+#define TIC_FFTW(a)
+#define TOC_FFTW(a)
+#endif
+
+/* sinc.c: */
+
+/* Sinus cardinalis. */
+R X(sinc)(R x);
+
+/* lambda.c: */
+
+/* lambda(z, eps) = gamma(z + eps) / gamma(z + 1) */
+R X(lambda)(R z, R eps);
+
+/* lambda2(mu, nu) = sqrt(gamma(mu + nu + 1) / (gamma(mu + 1) * gamma(nu + 1))) */
+R X(lambda2)(R mu, R nu);
+
+/* bessel_i0.c: */
+R X(bessel_i0)(R x);
+
+/* float.c: */
+typedef enum {NFFT_EPSILON = 0, NFFT_SAFE_MIN = 1, NFFT_BASE = 2,
+ NFFT_PRECISION = 3, NFFT_MANT_DIG = 4, NFFT_FLTROUND = 5, NFFT_E_MIN = 6,
+ NFFT_R_MIN = 7, NFFT_E_MAX = 8, NFFT_R_MAX = 9} float_property;
+
+R X(float_property)(float_property);
+
+/* int.c: */
+int X(exp2i)(const int a);
+int X(log2i)(const int m);
+int X(next_power_of_2)(const int N);
+void X(next_power_of_2_exp)(const int N, int *N2, int *t);
+
+/* error.c: */
+R X(error_l_infty_complex)(const C *x, const C *y, const INT n);
+/* not used */ R X(error_l_infty_double)(const R *x, const R *y, const INT n);
+R X(error_l_infty_1_complex)(const C *x, const C *y, const INT n,
+ const C *z, const INT m);
+/* not used */ R X(error_l_infty_1_double)(const R *x, const R *y, const INT n, const R *z,
+ const INT m);
+R X(error_l_2_complex)(const C *x, const C *y, const INT n);
+/* not used */ R X(error_l_2_double)(const R *x, const R *y, const INT n);
+
+#endif
diff --git a/include/nfft3.h b/include/nfft3.h
new file mode 100644
index 0000000..713389b
--- /dev/null
+++ b/include/nfft3.h
@@ -0,0 +1,826 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfft3.h 3896 2012-10-10 12:19:26Z tovo $ */
+
+#ifndef __NFFT3_H__
+#define __NFFT3_H__
+
+/* module configuration */
+#include "nfft3conf.h"
+
+/* fftw_complex */
+#include <fftw3.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+#define NFFT_CONCAT(prefix, name) prefix ## name
+
+/* IMPORTANT: for Windows compilers, you should add a line
+ * #define FFTW_DLL
+ * here and in kernel/infft.h if you are compiling/using NFFT as a DLL, in order
+ * to do the proper importing/exporting, or alternatively compile with
+ * -DNFFT_DLL or the equivalent command-line flag. This is not necessary under
+ * MinGW/Cygwin, where libtool does the imports/exports automatically. */
+#if defined(NFFT_DLL) && (defined(_WIN32) || defined(__WIN32__))
+ /* annoying Windows syntax for shared-library declarations */
+# if defined(COMPILING_NFFT) /* defined in api.h when compiling NFFT */
+# define NFFT_EXTERN extern __declspec(dllexport)
+# else /* user is calling NFFT; import symbol */
+# define NFFT_EXTERN extern __declspec(dllimport)
+# endif
+#else
+# define NFFT_EXTERN extern
+#endif
+
+/* our own memory allocation and exit functions */
+NFFT_EXTERN void *nfft_malloc(size_t n);
+NFFT_EXTERN void nfft_free(void *p);
+NFFT_EXTERN void nfft_die(char *s);
+
+/* You can replace the hooks with your own, functions if necessary. We need this
+ * for the Matlab interfaces etc. */
+typedef void *(*nfft_malloc_type_function) (size_t n);
+typedef void (*nfft_free_type_function) (void *p);
+typedef void (*nfft_die_type_function) (const char *errString);
+NFFT_EXTERN nfft_malloc_type_function nfft_malloc_hook;
+NFFT_EXTERN nfft_free_type_function nfft_free_hook;
+NFFT_EXTERN nfft_die_type_function nfft_die_hook;
+
+/* members inherited by all plans */
+#define MACRO_MV_PLAN(RC) \
+ int N_total; /**< Total number of Fourier coefficients */\
+ int M_total; /**< Total number of samples */\
+ RC *f_hat; /**< Vector of Fourier coefficients, size is N_total * sizeof(RC) */\
+ RC *f; /**< Vector of samples, size is M_total * sizeof(RC) */\
+ void (*mv_trafo)(void*); /**< Pointer to the own transform */\
+ void (*mv_adjoint)(void*); /**< Pointer to the own adjoint */
+
+/* nfft */
+
+/* name mangling macros */
+#define NFFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfft_, name)
+#define NFFT_MANGLE_FLOAT(name) NFFT_CONCAT(nfftf_, name)
+#define NFFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfftl_, name)
+
+/* huge second-order macro that defines prototypes for all nfft API functions.
+ * We expand this macro for each supported precision.
+ * X: nfft name-mangling macro
+ * Y: fftw name-mangling macro
+ * R: real data type
+ * C: complex data type
+ */
+#define NFFT_DEFINE_API(X,Y,R,C) \
+\
+typedef struct \
+{ \
+ MACRO_MV_PLAN(C) \
+} X(mv_plan_complex); \
+\
+typedef struct \
+{ \
+ MACRO_MV_PLAN(R) \
+} X(mv_plan_double); \
+\
+typedef struct\
+{\
+ MACRO_MV_PLAN(C)\
+\
+ int d; /**< dimension aka rank */\
+ int *N; /**< multi-bandwidth */\
+ R *sigma; /**< oversampling-factor */\
+ int *n; /**< FFTW length, equal to sigma*N, default is the power of 2 such
+ that \f$2\le\sigma<4\f$ */\
+ int n_total; /**< Total size of FFTW */\
+ int m; /**< Cut-off parameter of the window function, default value is
+ 6 (KAISER_BESSEL),
+ 9 (SINC_POWER),
+ 11 (B_SPLINE),
+ 12 (GAUSSIAN) */\
+ R *b; /**< Shape parameter of the window function */\
+ int K; /**< Number of equispaced samples of the window function for \ref
+ PRE_LIN_PSI */\
+\
+ unsigned nfft_flags; /**< Flags for precomputation, (de)allocation, and FFTW
+ usage, default setting is
+ PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT |
+ MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE */\
+\
+ unsigned fftw_flags; /**< Flags for the FFTW, default is
+ FFTW_ESTIMATE | FFTW_DESTROY_INPUT */\
+\
+ R *x; /**< Nodes in time/spatial domain, size is \f$dM\f$ doubles */\
+\
+ double MEASURE_TIME_t[3]; /**< Measured time for each step if MEASURE_TIME is
+ set */\
+\
+ /* internal use only */\
+ Y(plan) my_fftw_plan1; /**< Forward FFTW plan */\
+ Y(plan) my_fftw_plan2; /**< Backward FFTW plan */\
+\
+ R **c_phi_inv; /**< Precomputed data for the diagonal matrix \f$D\f$, size \
+ is \f$N_0+\hdots+N_{d-1}\f$ doubles*/\
+ R *psi; /**< Precomputed data for the sparse matrix \f$B\f$, size depends
+ on precomputation scheme */\
+ int *psi_index_g; /**< Indices in source/target vector for \ref PRE_FULL_PSI */\
+ int *psi_index_f; /**< Indices in source/target vector for \ref PRE_FULL_PSI */\
+\
+ C *g; /**< Oversampled vector of samples, size is \ref n_total double complex */\
+ C *g_hat; /**< Zero-padded vector of Fourier coefficients, size is \ref n_total fftw_complex */\
+ C *g1; /**< Input of fftw */\
+ C *g2; /**< Output of fftw */\
+\
+ R *spline_coeffs; /**< Input for de Boor algorithm if B_SPLINE or SINC_POWER is defined */\
+\
+ int *index_x; /**< Index array for nodes x used when flag \ref NFFT_SORT_NODES is set */\
+} X(plan); \
+\
+NFFT_EXTERN void X(trafo_direct)(X(plan) *ths);\
+NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths);\
+NFFT_EXTERN void X(trafo)(X(plan) *ths);\
+NFFT_EXTERN void X(trafo_1d)(X(plan) *ths);\
+NFFT_EXTERN void X(trafo_2d)(X(plan) *ths);\
+NFFT_EXTERN void X(trafo_3d)(X(plan) *ths);\
+NFFT_EXTERN void X(adjoint)(X(plan) *ths);\
+NFFT_EXTERN void X(adjoint_1d)(X(plan) *ths);\
+NFFT_EXTERN void X(adjoint_2d)(X(plan) *ths);\
+NFFT_EXTERN void X(adjoint_3d)(X(plan) *ths);\
+NFFT_EXTERN void X(init_1d)(X(plan) *ths, int N1, int M);\
+NFFT_EXTERN void X(init_2d)(X(plan) *ths, int N1, int N2, int M);\
+NFFT_EXTERN void X(init_3d)(X(plan) *ths, int N1, int N2, int N3, int M);\
+NFFT_EXTERN void X(init)(X(plan) *ths, int d, int *N, int M);\
+NFFT_EXTERN void X(init_guru)(X(plan) *ths, int d, int *N, int M, int *n, \
+ int m, unsigned nfft_flags, unsigned fftw_flags);\
+NFFT_EXTERN void X(precompute_one_psi)(X(plan) *ths);\
+NFFT_EXTERN void X(precompute_full_psi)(X(plan) *ths);\
+NFFT_EXTERN void X(precompute_psi)(X(plan) *ths);\
+NFFT_EXTERN void X(precompute_lin_psi)(X(plan) *ths);\
+NFFT_EXTERN const char* X(check)(X(plan) *ths);\
+NFFT_EXTERN void X(finalize)(X(plan) *ths);
+
+/* nfft api */
+NFFT_DEFINE_API(NFFT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,float,fftwf_complex)
+NFFT_DEFINE_API(NFFT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,double,fftw_complex)
+NFFT_DEFINE_API(NFFT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+
+/* flags for init */
+#define PRE_PHI_HUT (1U<< 0)
+#define FG_PSI (1U<< 1)
+#define PRE_LIN_PSI (1U<< 2)
+#define PRE_FG_PSI (1U<< 3)
+#define PRE_PSI (1U<< 4)
+#define PRE_FULL_PSI (1U<< 5)
+#define MALLOC_X (1U<< 6)
+#define MALLOC_F_HAT (1U<< 7)
+#define MALLOC_F (1U<< 8)
+#define FFT_OUT_OF_PLACE (1U<< 9)
+#define FFTW_INIT (1U<< 10)
+#define NFFT_SORT_NODES (1U<< 11)
+#define NFFT_OMP_BLOCKWISE_ADJOINT (1U<<12)
+#define PRE_ONE_PSI (PRE_LIN_PSI| PRE_FG_PSI| PRE_PSI| PRE_FULL_PSI)
+
+
+/* nfct */
+
+/* name mangling macros */
+#define NFCT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfct_, name)
+#define NFCT_MANGLE_FLOAT(name) NFFT_CONCAT(nfctf_, name)
+#define NFCT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfctl_, name)
+
+/* huge second-order macro that defines prototypes for all nfct API functions.
+ * We expand this macro for each supported precision.
+ * X: nfct name-mangling macro
+ * Y: fftw name-mangling macro
+ * R: real data type
+ * C: complex data type
+ */
+#define NFCT_DEFINE_API(X,Y,R,C) \
+typedef struct\
+{\
+ /* api */\
+ MACRO_MV_PLAN(R)\
+\
+ int d; /**< dimension, rank */\
+ int *N; /**< cut-off-frequencies (kernel) */\
+ int *n; /**< length of DCT-I */\
+ R *sigma; /**< oversampling-factor */\
+ int m; /**< cut-off parameter in time-domain */\
+\
+ R nfct_full_psi_eps;\
+ R *b; /**< shape parameters */\
+\
+ unsigned nfct_flags; /**< flags for precomputation, malloc */\
+ unsigned fftw_flags; /**< flags for the fftw */\
+\
+ R *x; /**< nodes (in time/spatial domain) */\
+\
+ double MEASURE_TIME_t[3]; /**< measured time for each step */\
+\
+ /* internal use only */\
+ Y(plan) my_fftw_r2r_plan; /**< fftw_plan */\
+ Y(r2r_kind) *r2r_kind; /**< r2r transform type (DCT-I) */\
+\
+ R **c_phi_inv; /**< precomputed data, matrix D */\
+ R *psi; /**< precomputed data, matrix B */\
+ int size_psi; /**< only for thin B */\
+ int *psi_index_g; /**< only for thin B */\
+ int *psi_index_f; /**< only for thin B */\
+\
+ R *g;\
+ R *g_hat;\
+ R *g1; /**< input of fftw */\
+ R *g2; /**< output of fftw */\
+\
+ R *spline_coeffs; /**< input for de Boor algorithm, if B_SPLINE or SINC_2m is defined */\
+} X(plan);\
+\
+NFFT_EXTERN void X(init_1d)(X(plan) *ths_plan, int N0, int M_total); \
+NFFT_EXTERN void X(init_2d)(X(plan) *ths_plan, int N0, int N1, int M_total); \
+NFFT_EXTERN void X(init_3d)(X(plan) *ths_plan, int N0, int N1, int N2, int M_total); \
+NFFT_EXTERN void X(init)(X(plan) *ths_plan, int d, int *N, int M_total); \
+NFFT_EXTERN void X(init_guru)(X(plan) *ths_plan, int d, int *N, int M_total, int *n, \
+ int m, unsigned nfct_flags, unsigned fftw_flags); \
+NFFT_EXTERN void X(precompute_psi)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(trafo)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(trafo_direct)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(adjoint)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(finalize)(X(plan) *ths_plan); \
+NFFT_EXTERN R X(phi_hut)(X(plan) *ths_plan, int k, int d); \
+NFFT_EXTERN R X(phi)(X(plan) *ths_plan, R x, int d);
+
+#if defined(HAVE_NFCT)
+/* nfct api */
+NFCT_DEFINE_API(NFCT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,float,fftwf_complex)
+NFCT_DEFINE_API(NFCT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,double,fftw_complex)
+NFCT_DEFINE_API(NFCT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+#endif
+
+/* nfst */
+
+/* name mangling macros */
+#define NFST_MANGLE_DOUBLE(name) NFFT_CONCAT(nfst_, name)
+#define NFST_MANGLE_FLOAT(name) NFFT_CONCAT(nfstf_, name)
+#define NFST_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfstl_, name)
+
+/* huge second-order macro that defines prototypes for all nfct API functions.
+ * We expand this macro for each supported precision.
+ * X: nfst name-mangling macro
+ * Y: fftw name-mangling macro
+ * R: real data type
+ * C: complex data type
+ */
+#define NFST_DEFINE_API(X,Y,R,C) \
+typedef struct\
+{\
+ /* api */\
+ MACRO_MV_PLAN(R)\
+\
+ int d; /**< dimension, rank */\
+ int *N; /**< bandwidth */\
+ int *n; /**< length of DST-1 */\
+ R *sigma; /**< oversampling-factor */\
+ int m; /**< cut-off parameter in time-domain */\
+\
+ R nfst_full_psi_eps;\
+ R *b; /**< shape parameters */\
+\
+ unsigned nfst_flags; /**< flags for precomputation, malloc */\
+ unsigned fftw_flags; /**< flags for the fftw */\
+\
+ R *x; /**< nodes (in time/spatial domain) */\
+\
+ double MEASURE_TIME_t[3]; /**< measured time for each step */\
+\
+ /* internal use only */\
+ Y(plan) my_fftw_r2r_plan; /**< fftw_plan forward */\
+ Y(r2r_kind) *r2r_kind; /**< r2r transform type (dct-i) */\
+\
+ R **c_phi_inv; /**< precomputed data, matrix D */\
+ R *psi; /**< precomputed data, matrix B */\
+ int size_psi; /**< only for thin B */\
+ int *psi_index_g; /**< only for thin B */\
+ int *psi_index_f; /**< only for thin B */\
+\
+ R *g;\
+ R *g_hat;\
+ R *g1; /**< input of fftw */\
+ R *g2; /**< output of fftw */\
+\
+ R *spline_coeffs; /**< input for de Boor algorithm, if B_SPLINE or SINC_2m is defined */\
+} X(plan);\
+\
+NFFT_EXTERN void X(init_1d)(X(plan) *ths_plan, int N0, int M_total); \
+NFFT_EXTERN void X(init_2d)(X(plan) *ths_plan, int N0, int N1, int M_total); \
+NFFT_EXTERN void X(init_3d)(X(plan) *ths_plan, int N0, int N1, int N2, int M_total); \
+NFFT_EXTERN void X(init)(X(plan) *ths_plan, int d, int *N, int M_total); \
+NFFT_EXTERN void X(init_m)(X(plan) *ths_plan, int d, int *N, int M_total, int m);\
+NFFT_EXTERN void X(init_guru)(X(plan) *ths_plan, int d, int *N, int M_total, int *n, \
+ int m, unsigned nfst_flags, unsigned fftw_flags); \
+NFFT_EXTERN void X(precompute_psi)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(trafo)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(trafo_direct)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(adjoint)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(finalize)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(full_psi)(X(plan) *ths_plan, R eps); \
+NFFT_EXTERN R X(phi_hut)(X(plan) *ths_plan, int k, int d); \
+NFFT_EXTERN R X(phi)(X(plan) *ths_plan, R x, int d); \
+NFFT_EXTERN int X(fftw_2N)(int n); \
+NFFT_EXTERN int X(fftw_2N_rev)(int n);
+
+#ifdef HAVE_NFST
+/* nfst api */
+NFST_DEFINE_API(NFST_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,float,fftwf_complex)
+NFST_DEFINE_API(NFST_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,double,fftw_complex)
+NFST_DEFINE_API(NFST_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+#endif
+
+/* nnfft */
+
+/* name mangling macros */
+#define NNFFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nnfft_, name)
+#define NNFFT_MANGLE_FLOAT(name) NFFT_CONCAT(nnfftf_, name)
+#define NNFFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nnfftl_, name)
+
+/* huge second-order macro that defines prototypes for all nfst API functions.
+ * We expand this macro for each supported precision.
+ * X: nnfft name-mangling macro
+ * Y: fftw name-mangling macro
+ * Z: nfft name mangling macro
+ * R: real data type
+ * C: complex data type
+ */
+#define NNFFT_DEFINE_API(X,Y,Z,R,C) \
+typedef struct\
+{\
+ /* api */\
+ MACRO_MV_PLAN(C)\
+\
+ int d; /**< dimension, rank */\
+ R *sigma; /**< oversampling-factor */\
+ R *a; /**< 1 + 2*m/N1 */\
+ int *N; /**< cut-off-frequencies */\
+ int *N1; /**< sigma*N */\
+ int *aN1; /**< sigma*a*N */\
+ int m; /**< cut-off parameter in time-domain*/\
+ R *b; /**< shape parameters */\
+ int K; /**< number of precomp. uniform psi */\
+ int aN1_total; /**< aN1_total=aN1[0]* ... *aN1[d-1] */\
+ Z(plan) *direct_plan; /**< plan for the nfft */\
+ unsigned nnfft_flags; /**< flags for precomputation, malloc*/\
+ int *n; /**< n=N1, for the window function */\
+ R *x; /**< nodes (in time/spatial domain) */\
+ R *v; /**< nodes (in fourier domain) */\
+ R *c_phi_inv; /**< precomputed data, matrix D */\
+ R *psi; /**< precomputed data, matrix B */\
+ int size_psi; /**< only for thin B */\
+ int *psi_index_g; /**< only for thin B */\
+ int *psi_index_f; /**< only for thin B */\
+ C *F;\
+ R *spline_coeffs; /**< input for de Boor algorithm, if B_SPLINE or SINC_2m is defined */\
+} X(plan);\
+\
+NFFT_EXTERN void X(init)(X(plan) *ths_plan, int d, int N_total, int M_total, int *N); \
+NFFT_EXTERN void X(init_guru)(X(plan) *ths_plan, int d, int N_total, int M_total, \
+ int *N, int *N1, int m, unsigned nnfft_flags); \
+NFFT_EXTERN void X(trafo_direct)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(trafo)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(adjoint)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(precompute_lin_psi)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(precompute_psi)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(precompute_full_psi)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(precompute_phi_hut)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(finalize)(X(plan) *ths_plan);
+
+#ifdef HAVE_NNFFT
+/* nnfft api */
+NNFFT_DEFINE_API(NNFFT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,float,fftwf_complex)
+NNFFT_DEFINE_API(NNFFT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,double,fftw_complex)
+NNFFT_DEFINE_API(NNFFT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+#endif
+
+/* additional init flags */
+#define MALLOC_V (1U<< 11)
+
+/* nsfft */
+
+#define NSFFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nsfft_, name)
+#define NSFFT_MANGLE_FLOAT(name) NFFT_CONCAT(nsfftf_, name)
+#define NSFFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nsfftl_, name)
+
+/* huge second-order macro that defines prototypes for all nnfft API functions.
+ * We expand this macro for each supported precision.
+ * X: nnfft name-mangling macro
+ * Y: fftw name-mangling macro
+ * Z: nfft name mangling macro
+ * R: real data type
+ * C: complex data type
+ */
+#define NSFFT_DEFINE_API(X,Y,Z,R,C) \
+typedef struct\
+{\
+ MACRO_MV_PLAN(C)\
+\
+ int d; /**< dimension, rank; d = 2, 3 */\
+ int J; /**< problem size, i.e.,
+ d=2: N_total=(J+4) 2^(J+1)
+ d=3: N_total=2^J 6(2^((J+1)/2+1)-1)+2^(3(J/2+1)) */\
+ int sigma; /**< oversampling-factor */\
+ unsigned flags; /**< flags for precomputation, malloc*/\
+ int *index_sparse_to_full; /**< index conversation, overflow for d=3, J=9! */\
+ int r_act_nfft_plan; /**< index of current nfft block */\
+ Z(plan) *act_nfft_plan; /**< current nfft block */\
+ Z(plan) *center_nfft_plan; /**< central nfft block */\
+ Y(plan) *set_fftw_plan1; /**< fftw plan for the nfft blocks */\
+ Y(plan) *set_fftw_plan2; /**< fftw plan for the nfft blocks */\
+ Z(plan) *set_nfft_plan_1d; /**< nfft plans for short nffts */\
+ Z(plan) *set_nfft_plan_2d; /**< nfft plans for short nffts */\
+ R *x_transposed; /**< coordinate exchanged nodes, d = 2 */\
+ R *x_102,*x_201,*x_120,*x_021; /**< coordinate exchanged nodes, d=3 */\
+} X(plan);\
+\
+NFFT_EXTERN void X(trafo_direct)(X(plan) *ths); \
+NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths); \
+NFFT_EXTERN void X(trafo)(X(plan) *ths); \
+NFFT_EXTERN void X(adjoint)(X(plan) *ths); \
+NFFT_EXTERN void X(cp)(X(plan) *ths, Z(plan) *ths_nfft); \
+NFFT_EXTERN void X(init_random_nodes_coeffs)(X(plan) *ths); \
+NFFT_EXTERN void X(init)(X(plan) *ths, int d, int J, int M, int m, unsigned flags); \
+NFFT_EXTERN void X(finalize)(X(plan) *ths);
+
+#ifdef HAVE_NSFFT
+/* nsfft api */
+NSFFT_DEFINE_API(NSFFT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,float,fftwf_complex)
+NSFFT_DEFINE_API(NSFFT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,double,fftw_complex)
+NSFFT_DEFINE_API(NSFFT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+#endif
+
+/* additional init flags */
+#define NSDFT (1U<< 12)
+
+/* mri */
+
+/* name mangling macros */
+#define MRI_MANGLE_DOUBLE(name) NFFT_CONCAT(mri_, name)
+#define MRI_MANGLE_FLOAT(name) NFFT_CONCAT(mrif_, name)
+#define MRI_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(mril_, name)
+
+/* huge second-order macro that defines prototypes for all mri API functions.
+ * We expand this macro for each supported precision.
+ * X: mri name-mangling macro
+ * Z: nfft name mangling macro
+ * R: real data type
+ * C: complex data type
+ */
+#define MRI_DEFINE_API(X,Z,R,C) \
+typedef struct\
+{\
+ MACRO_MV_PLAN(C)\
+ Z(plan) plan;\
+ int N3;\
+ R sigma3;\
+ R *t;\
+ R *w;\
+} X(inh_2d1d_plan);\
+\
+typedef struct\
+{\
+ MACRO_MV_PLAN(C)\
+ Z(plan) plan;\
+ int N3;\
+ R sigma3;\
+ R *t;\
+ R *w;\
+} X(inh_3d_plan);\
+\
+void X(inh_2d1d_trafo)(X(inh_2d1d_plan) *ths); \
+void X(inh_2d1d_adjoint)(X(inh_2d1d_plan) *ths); \
+void X(inh_2d1d_init_guru)(X(inh_2d1d_plan) *ths, int *N, int M, int *n, \
+ int m, R sigma, unsigned nfft_flags, unsigned fftw_flags); \
+void X(inh_2d1d_finalize)(X(inh_2d1d_plan) *ths); \
+void X(inh_3d_trafo)(X(inh_3d_plan) *ths); \
+void X(inh_3d_adjoint)(X(inh_3d_plan) *ths); \
+void X(inh_3d_init_guru)(X(inh_3d_plan) *ths, int *N, int M, int *n, \
+ int m, R sigma, unsigned nfft_flags, unsigned fftw_flags); \
+void X(inh_3d_finalize)(X(inh_3d_plan) *ths);
+
+#ifdef HAVE_MRI
+ /* mri api */
+MRI_DEFINE_API(MRI_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,float,fftwf_complex)
+MRI_DEFINE_API(MRI_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,double,fftw_complex)
+MRI_DEFINE_API(MRI_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+#endif
+
+/* nfsft */
+
+/* name mangling macros */
+#define NFSFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfsft_, name)
+#define NFSFT_MANGLE_FLOAT(name) NFFT_CONCAT(nfsftf_, name)
+#define NFSFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfsftl_, name)
+
+/* huge second-order macro that defines prototypes for all nfsft API functions.
+ * We expand this macro for each supported precision.
+ * X: nfsft name-mangling macro
+ * Z: nfft name mangling macro
+ * R: real data type
+ * C: complex data type
+ */
+#define NFSFT_DEFINE_API(X,Z,R,C) \
+typedef struct\
+{\
+ MACRO_MV_PLAN(C)\
+ int N; /**< the bandwidth \f$N\f$ */\
+ R *x; /**< the nodes \f$\mathbf{x}(m) = \left(x_1,x_2\right) \in
+ [-\frac{1}{2},\frac{1}{2}) \times [0,\frac{1}{2}]\f$ for \f$m=0,\ldots,
+ M-1\f$,\f$M \in \mathbb{N},\f$ */\
+ /* internal use only */\
+ int t; /**< the logarithm of NPT with respect to the basis 2 */\
+ unsigned int flags; /**< the planner flags */\
+ Z(plan) plan_nfft; /**< the internal NFFT plan */\
+ C *f_hat_intern; /**< Internally used pointer to spherical Fourier
+ coefficients */\
+ double MEASURE_TIME_t[3]; /**< Measured time for each step if MEASURE_TIME is
+ set */\
+} X(plan);\
+\
+NFFT_EXTERN void X(init)(X(plan) *plan, int N, int M); \
+NFFT_EXTERN void X(init_advanced)(X(plan)* plan, int N, int M, unsigned int \
+ nfsft_flags); \
+NFFT_EXTERN void X(init_guru)(X(plan) *plan, int N, int M, \
+ unsigned int nfsft_flags, unsigned int nfft_flags, int nfft_cutoff); \
+NFFT_EXTERN void X(precompute)(int N, R kappa, unsigned int nfsft_flags, \
+ unsigned int fpt_flags); \
+NFFT_EXTERN void X(forget)(void); \
+NFFT_EXTERN void X(trafo_direct)(X(plan)* plan); \
+NFFT_EXTERN void X(adjoint_direct)(X(plan)* plan); \
+NFFT_EXTERN void X(trafo)(X(plan)* plan); \
+NFFT_EXTERN void X(adjoint)(X(plan)* plan); \
+NFFT_EXTERN void X(finalize)(X(plan) *plan); \
+NFFT_EXTERN void X(precompute_x)(X(plan) *plan);
+
+#ifdef HAVE_NFSFT
+/* nfsft api */
+NFSFT_DEFINE_API(NFSFT_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,float,fftwf_complex)
+NFSFT_DEFINE_API(NFSFT_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,double,fftw_complex)
+NFSFT_DEFINE_API(NFSFT_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+#endif
+
+/* init flags */
+#define NFSFT_NORMALIZED (1U << 0)
+#define NFSFT_USE_NDFT (1U << 1)
+#define NFSFT_USE_DPT (1U << 2)
+#define NFSFT_MALLOC_X (1U << 3)
+#define NFSFT_MALLOC_F_HAT (1U << 5)
+#define NFSFT_MALLOC_F (1U << 6)
+#define NFSFT_PRESERVE_F_HAT (1U << 7)
+#define NFSFT_PRESERVE_X (1U << 8)
+#define NFSFT_PRESERVE_F (1U << 9)
+#define NFSFT_DESTROY_F_HAT (1U << 10)
+#define NFSFT_DESTROY_X (1U << 11)
+#define NFSFT_DESTROY_F (1U << 12)
+
+/* precompute flags */
+#define NFSFT_NO_DIRECT_ALGORITHM (1U << 13)
+#define NFSFT_NO_FAST_ALGORITHM (1U << 14)
+#define NFSFT_ZERO_F_HAT (1U << 16)
+
+/* helper macros */
+#define NFSFT_INDEX(k,n,plan) ((2*(plan)->N+2)*((plan)->N-n+1)+(plan)->N+k+1)
+#define NFSFT_F_HAT_SIZE(N) ((2*N+2)*(2*N+2))
+
+/* fpt */
+
+/* name mangling macros */
+#define FPT_MANGLE_DOUBLE(name) NFFT_CONCAT(fpt_, name)
+#define FPT_MANGLE_FLOAT(name) NFFT_CONCAT(fptf_, name)
+#define FPT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(fptl_, name)
+
+/* huge second-order macro that defines prototypes for all fpt API functions.
+ * We expand this macro for each supported precision.
+ * X: fpt name-mangling macro
+ * R: real data type
+ * C: complex data type
+ */
+#define FPT_DEFINE_API(X,Y,R,C) \
+typedef struct X(set_s_) *X(set); /**< A set of precomputed data for a set of
+ DPT transforms of equal maximum length. */\
+\
+NFFT_EXTERN X(set) X(init)(const int M, const int t, const unsigned int flags); \
+NFFT_EXTERN void X(precompute)(X(set) set, const int m, R *alpha, R *beta, \
+ R *gam, int k_start, const R threshold); \
+NFFT_EXTERN void X(trafo_direct)(X(set) set, const int m, const C *x, C *y, \
+ const int k_end, const unsigned int flags); \
+NFFT_EXTERN void X(trafo)(X(set) set, const int m, const C *x, C *y, \
+ const int k_end, const unsigned int flags); \
+NFFT_EXTERN void X(transposed_direct)(X(set) set, const int m, C *x, \
+ C *y, const int k_end, const unsigned int flags); \
+NFFT_EXTERN void X(transposed)(X(set) set, const int m, C *x, \
+ C *y, const int k_end, const unsigned int flags); \
+NFFT_EXTERN void X(finalize)(X(set) set);
+
+#ifdef HAVE_FPT
+/* fpt api */
+FPT_DEFINE_API(FPT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,float,fftwf_complex)
+FPT_DEFINE_API(FPT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,double,fftw_complex)
+FPT_DEFINE_API(FPT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+
+/* init flags */
+#define FPT_NO_STABILIZATION (1U << 0)
+#define FPT_NO_FAST_ALGORITHM (1U << 2)
+#define FPT_NO_DIRECT_ALGORITHM (1U << 3)
+#define FPT_PERSISTENT_DATA (1U << 4)
+
+/* transform flags */
+#define FPT_FUNCTION_VALUES (1U << 5)
+#define FPT_AL_SYMMETRY (1U << 6)
+#endif
+
+/* nfsoft*/
+
+/* name mangling macros */
+#define NFSOFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfsoft_, name)
+#define NFSOFT_MANGLE_FLOAT(name) NFFT_CONCAT(nfsoftf_, name)
+#define NFSOFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfsoftl_, name)
+
+/* huge second-order macro that defines prototypes for all nfsoft API functions.
+ * We expand this macro for each supported precision.
+ * X: nfsoft name-mangling macro
+ * Y: nfft name-mangling macro
+ * Z: fpt name-mangling macro
+ * R: real data type
+ * C: complex data type
+ */
+#define NFSOFT_DEFINE_API(X,Y,Z,R,C) \
+typedef struct X(plan_)\
+{\
+ MACRO_MV_PLAN(C) \
+ R *x; /**< input nodes */\
+ C *wig_coeffs; /**< contains a set of SO(3) Fourier coefficients for fixed
+ orders m and n*/\
+ C *cheby; /**< contains a set of Chebychev coefficients for fixed orders m
+ and n*/\
+ C *aux; /**< used when converting Chebychev to Fourier coeffcients*/\
+ /* internal use only */\
+ int t; /**< the logaritm of NPT with respect to the basis 2 */\
+ unsigned int flags; /**< the planner flags */\
+ Y(plan) p_nfft; /**< the internal NFFT plan */\
+ Z(set) internal_fpt_set; /**< the internal FPT plan */\
+ int fpt_kappa; /**a parameter controlling the accuracy of the FPT*/\
+} X(plan);\
+\
+NFFT_EXTERN void X(precompute)(X(plan) *plan); \
+NFFT_EXTERN Z(set) X(SO3_single_fpt_init)(int l, int k, int m, unsigned int flags, int kappa); \
+NFFT_EXTERN void X(SO3_fpt)(C *coeffs, Z(set) set, int l, int k, int m, unsigned int nfsoft_flags); \
+NFFT_EXTERN void X(SO3_fpt_transposed)(C *coeffs, Z(set) set,int l, int k, int m,unsigned int nfsoft_flags); \
+NFFT_EXTERN void X(init)(X(plan) *plan, int N, int M); \
+NFFT_EXTERN void X(init_advanced)(X(plan) *plan, int N, int M,unsigned int nfsoft_flags); \
+NFFT_EXTERN void X(init_guru)(X(plan) *plan, int N, int M,unsigned int nfsoft_flags,unsigned int nfft_flags,int nfft_cutoff,int fpt_kappa); \
+NFFT_EXTERN void X(trafo)(X(plan) *plan_nfsoft); \
+NFFT_EXTERN void X(adjoint)(X(plan) *plan_nfsoft); \
+NFFT_EXTERN void X(finalize)(X(plan) *plan); \
+NFFT_EXTERN int X(posN)(int n,int m, int B);
+
+#ifdef HAVE_NFSOFT
+/* nfsoft api */
+NFSOFT_DEFINE_API(NFSOFT_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,FPT_MANGLE_FLOAT,float,fftwf_complex)
+NFSOFT_DEFINE_API(NFSOFT_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,FPT_MANGLE_DOUBLE,double,fftw_complex)
+NFSOFT_DEFINE_API(NFSOFT_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,FPT_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+
+/* init flags */
+#define NFSOFT_NORMALIZED (1U << 0)
+#define NFSOFT_USE_NDFT (1U << 1)
+#define NFSOFT_USE_DPT (1U << 2)
+#define NFSOFT_MALLOC_X (1U << 3)
+#define NFSOFT_REPRESENT (1U << 4)
+#define NFSOFT_MALLOC_F_HAT (1U << 5)
+#define NFSOFT_MALLOC_F (1U << 6)
+#define NFSOFT_PRESERVE_F_HAT (1U << 7)
+#define NFSOFT_PRESERVE_X (1U << 8)
+#define NFSOFT_PRESERVE_F (1U << 9)
+#define NFSOFT_DESTROY_F_HAT (1U << 10)
+#define NFSOFT_DESTROY_X (1U << 11)
+#define NFSOFT_DESTROY_F (1U << 12)
+
+/* precompute flags */
+#define NFSOFT_NO_STABILIZATION (1U << 13)
+#define NFSOFT_CHOOSE_DPT (1U << 14)
+#define NFSOFT_SOFT (1U << 15)
+#define NFSOFT_ZERO_F_HAT (1U << 16)
+
+/* helper macros */
+#define NFSOFT_INDEX(m,n,l,B) (((l)+((B)+1))+(2*(B)+2)*(((n)+((B)+1))+(2*(B)+2)*((m)+((B)+1))))
+#define NFSOFT_INDEX_TWO(m,n,l,B) ((B+1)*(B+1)+(B+1)*(B+1)*(m+B)-((m-1)*m*(2*m-1)+(B+1)*(B+2)*(2*B+3))/6)+(posN(n,m,B))+(l-MAX(ABS(m),ABS(n)))
+#define NFSOFT_F_HAT_SIZE(B) (((B)+1)*(4*((B)+1)*((B)+1)-1)/3)
+
+#endif
+
+/*solver */
+
+/* name mangling macros */
+#define SOLVER_MANGLE_DOUBLE(name) NFFT_CONCAT(solver_, name)
+#define SOLVER_MANGLE_FLOAT(name) NFFT_CONCAT(solverf_, name)
+#define SOLVER_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(solverl_, name)
+
+/* huge second-order macro that defines prototypes for all nfsoft API functions.
+ * We expand this macro for each supported precision.
+ * X: nfsoft name-mangling macro
+ * Y: nfft name-mangling macro
+ * R: real data type
+ * C: complex data type
+ */
+#define SOLVER_DEFINE_API(X,Y,R,C)\
+typedef struct\
+{\
+ Y(mv_plan_complex) *mv; /**< matrix vector multiplication */\
+ unsigned flags; /**< iteration type */\
+ R *w; /**< weighting factors */\
+ R *w_hat; /**< damping factors */\
+ C *y; /**< right hand side, samples */\
+ C *f_hat_iter; /**< iterative solution */\
+ C *r_iter; /**< iterated residual vector */\
+ C *z_hat_iter; /**< residual of normal equation of first kind */\
+ C *p_hat_iter; /**< search direction */\
+ C *v_iter; /**< residual vector update */\
+ R alpha_iter; /**< step size for search direction */\
+ R beta_iter; /**< step size for search correction*/\
+ R dot_r_iter; /**< weighted dotproduct of r_iter */\
+ R dot_r_iter_old; /**< previous dot_r_iter */\
+ R dot_z_hat_iter; /**< weighted dotproduct of z_hat_iter */\
+ R dot_z_hat_iter_old; /**< previous dot_z_hat_iter */\
+ R dot_p_hat_iter; /**< weighted dotproduct of p_hat_iter */\
+ R dot_v_iter; /**< weighted dotproduct of v_iter */\
+} X(plan_complex);\
+\
+NFFT_EXTERN void X(init_advanced_complex)(X(plan_complex)* ths, Y(mv_plan_complex) *mv, unsigned flags);\
+NFFT_EXTERN void X(init_complex)(X(plan_complex)* ths, Y(mv_plan_complex) *mv);\
+NFFT_EXTERN void X(before_loop_complex)(X(plan_complex)* ths);\
+NFFT_EXTERN void X(loop_one_step_complex)(X(plan_complex) *ths);\
+NFFT_EXTERN void X(finalize_complex)(X(plan_complex) *ths);\
+\
+typedef struct\
+{\
+ Y(mv_plan_double) *mv; /**< matrix vector multiplication */\
+ unsigned flags; /**< iteration type */\
+ R *w; /**< weighting factors */\
+ R *w_hat; /**< damping factors */\
+ R *y; /**< right hand side, samples */\
+ R *f_hat_iter; /**< iterative solution */\
+ R *r_iter; /**< iterated residual vector */\
+ R *z_hat_iter; /**< residual of normal equation of first kind */\
+ R *p_hat_iter; /**< search direction */\
+ R *v_iter; /**< residual vector update */\
+ R alpha_iter; /**< step size for search direction */\
+ R beta_iter; /**< step size for search correction */\
+ R dot_r_iter; /**< weighted dotproduct of r_iter */\
+ R dot_r_iter_old; /**< previous dot_r_iter */\
+ R dot_z_hat_iter; /**< weighted dotproduct of z_hat_iter */\
+ R dot_z_hat_iter_old; /**< previous dot_z_hat_iter */\
+ R dot_p_hat_iter; /**< weighted dotproduct of p_hat_iter */\
+ R dot_v_iter; /**< weighted dotproduct of v_iter */\
+} X(plan_double);\
+\
+NFFT_EXTERN void X(init_advanced_double)(X(plan_double)* ths, Y(mv_plan_double) *mv, unsigned flags);\
+NFFT_EXTERN void X(solver_init_double)(X(plan_double)* ths, Y(mv_plan_double) *mv);\
+NFFT_EXTERN void X(solver_before_loop_double)(X(plan_double)* ths);\
+NFFT_EXTERN void X(solver_loop_one_step_double)(X(plan_double) *ths);\
+NFFT_EXTERN void X(solver_finalize_double)(X(plan_double) *ths);
+
+/* solver api */
+SOLVER_DEFINE_API(SOLVER_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,float,fftwf_complex)
+SOLVER_DEFINE_API(SOLVER_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,double,fftw_complex)
+SOLVER_DEFINE_API(SOLVER_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
+
+/* init flags */
+#define LANDWEBER (1U<< 0)
+#define STEEPEST_DESCENT (1U<< 1)
+#define CGNR (1U<< 2)
+#define CGNE (1U<< 3)
+#define NORMS_FOR_LANDWEBER (1U<< 4)
+#define PRECOMPUTE_WEIGHT (1U<< 5)
+#define PRECOMPUTE_DAMP (1U<< 6)
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* defined(__NFFT3_H__) */
diff --git a/include/nfft3conf.h b/include/nfft3conf.h
new file mode 100644
index 0000000..6eac835
--- /dev/null
+++ b/include/nfft3conf.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id$ */
+
+/* include/nfftconf.h.in. Generated from configure.ac by autoheader. */
+
+/* Define to enable FPT module. */
+#define HAVE_FPT 1
+
+/* Define to enable MRI module. */
+#define HAVE_MRI 1
+
+/* Define to enable NFCT module. */
+#define HAVE_NFCT 1
+
+/* Define to enable NFSFT module. */
+#define HAVE_NFSFT 1
+
+/* Define to enable NFSOFT module. */
+#define HAVE_NFSOFT 1
+
+/* Define to enable NFST module. */
+#define HAVE_NFST 1
+
+/* Define to enable NNFFT module. */
+#define HAVE_NNFFT 1
+
+/* Define to enable NSFFT module. */
+#define HAVE_NSFFT 1
diff --git a/include/nfft3conf.h.in b/include/nfft3conf.h.in
new file mode 100644
index 0000000..4522e0a
--- /dev/null
+++ b/include/nfft3conf.h.in
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id$ */
+
+/* include/nfftconf.h.in. Generated from configure.ac by autoheader. */
+
+/* Define to enable FPT module. */
+ at HAVE_FPT@
+
+/* Define to enable MRI module. */
+ at HAVE_MRI@
+
+/* Define to enable NFCT module. */
+ at HAVE_NFCT@
+
+/* Define to enable NFSFT module. */
+ at HAVE_NFSFT@
+
+/* Define to enable NFSOFT module. */
+ at HAVE_NFSOFT@
+
+/* Define to enable NFST module. */
+ at HAVE_NFST@
+
+/* Define to enable NNFFT module. */
+ at HAVE_NNFFT@
+
+/* Define to enable NSFFT module. */
+ at HAVE_NSFFT@
diff --git a/include/nfft3util.h b/include/nfft3util.h
new file mode 100644
index 0000000..4a5855c
--- /dev/null
+++ b/include/nfft3util.h
@@ -0,0 +1,279 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfft3util.h 3896 2012-10-10 12:19:26Z tovo $ */
+
+/*! \file nfft3util.h
+ * \brief Header file for utility functions used by the nfft3 library.
+ */
+#ifndef __UTIL_H__
+#define __UTIL_H__
+
+/** Include header for FFTW3 library for its complex type. */
+#include <fftw3.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/*###########################################################################*/
+/*###########################################################################*/
+/*###########################################################################*/
+
+/**
+ * @defgroup nfftutil Util - Auxilliary functions
+ * @{
+ *
+ * This module implements frequently used utility functions.
+ * In particular, this includes simple measurement of resources, evaluation of
+ * window functions, vector routines for basic linear algebra tasks, and
+ * computation of weights for the inverse transforms.
+ *
+ */
+
+/** Swapping of two vectors.
+ */
+#define NFFT_SWAP_complex(x,y) {fftw_complex* NFFT_SWAP_temp__; \
+ NFFT_SWAP_temp__=(x); (x)=(y); (y)=NFFT_SWAP_temp__;}
+
+/** Swapping of two vectors.
+ */
+#define NFFT_SWAP_double(x,y) {double* NFFT_SWAP_temp__; NFFT_SWAP_temp__=(x); \
+ (x)=(y); (y)=NFFT_SWAP_temp__;}
+
+/** Formerly known to be an irrational number.
+ */
+#define PI 3.141592653589793238462643383279502884197169399375105820974944592
+#define PI2 6.283185307179586476925286766559005768394338798750211641949889185
+#define PI4 12.56637061435917295385057353311801153678867759750042328389977837
+
+/** Maximum of its two arguments.
+ */
+#define NFFT_MAX(a,b) ((a)>(b)? (a) : (b))
+
+/** Mimimum of its two arguments.
+ */
+#define NFFT_MIN(a,b) ((a)<(b)? (a) : (b))
+
+/* ######################################################################### */
+/* ########## Window function related ###################################### */
+/* ######################################################################### */
+
+/** To test the new one
+ */
+double nfft_bspline_old(int k,double x,double *A);
+
+/** Computes the B-spline \f$M_{k,0}\left(x\right)\f$,
+ scratch is used for de Boor's scheme
+ */
+double nfft_bspline(int k, double x, double *scratch);
+
+/* ######################################################################### */
+/* ########## Vector routines ############################################## */
+/* ######################################################################### */
+
+/** Computes integer \f$\prod_{t=0}^{d-1} v_t\f$.
+ */
+int nfft_prod_int(int *vec, int d);
+
+/** Computes integer \f$\prod_{t=0}^{d-1} v_t-a\f$.
+ */
+int nfst_prod_minus_a_int(int *vec, int a, int d);
+
+/** Computes \f$\sum_{t=0}^{d-1} i_t \prod_{t'=t+1}^{d-1} N_{t'}\f$.
+ */
+int nfft_plain_loop(int *idx,int *N,int d);
+
+/** Computes double \f$\prod_{t=0}^{d-1} v_t\f$.
+ */
+double nfft_prod_real(double *vec,int d);
+
+/** Computes the inner/dot product \f$x^H x\f$.
+ */
+double nfft_dot_complex(fftw_complex* x, int n);
+
+/** Computes the inner/dot product \f$x^H x\f$.
+ */
+double nfft_dot_double( double* x, int n);
+
+/** Computes the weighted inner/dot product \f$x^H (w \odot x)\f$.
+ */
+double nfft_dot_w_complex(fftw_complex* x, double* w, int n);
+
+/** Computes the weighted inner/dot product \f$x^H (w \odot x)\f$.
+ */
+double nfft_dot_w_double( double* x, double* w, int n);
+
+/** Computes the weighted inner/dot product
+ \f$x^H (w1\odot w2\odot w2 \odot x)\f$.
+*/
+double nfft_dot_w_w2_complex(fftw_complex* x, double* w, double* w2, int n);
+
+/** Computes the weighted inner/dot product
+ \f$x^H (w2\odot w2 \odot x)\f$.
+ */
+double nfft_dot_w2_complex(fftw_complex* x, double* w2, int n);
+
+/** Copies \f$x \leftarrow y\f$.
+ */
+void nfft_cp_complex(fftw_complex* x, fftw_complex* y, int n);
+
+/** Copies \f$x \leftarrow y\f$.
+ */
+void nfft_cp_double( double* x, double* y, int n);
+
+/** Copies \f$x \leftarrow a y\f$.
+ */
+void nfft_cp_a_complex(fftw_complex* x, double a, fftw_complex* y, int n);
+
+/** Copies \f$x \leftarrow a y\f$.
+ */
+void nfft_cp_a_double(double *x, double a, double *y, int n);
+
+/** Copies \f$x \leftarrow w\odot y\f$.
+ */
+void nfft_cp_w_complex(fftw_complex* x, double* w, fftw_complex* y, int n);
+
+/** Copies \f$x \leftarrow w\odot y\f$.
+ */
+void nfft_cp_w_double( double* x, double* w, double* y, int n);
+
+/** Updates \f$x \leftarrow a x + y\f$.
+ */
+void nfft_upd_axpy_complex(fftw_complex* x, double a, fftw_complex* y, int n);
+
+/** Updates \f$x \leftarrow a x + y\f$.
+ */
+void nfft_upd_axpy_double( double* x, double a, double* y, int n);
+
+/** Updates \f$x \leftarrow x + a y\f$.
+ */
+void nfft_upd_xpay_complex(fftw_complex* x, double a, fftw_complex* y, int n);
+
+/** Updates \f$x \leftarrow x + a y\f$.
+ */
+void nfft_upd_xpay_double( double* x, double a, double* y, int n);
+
+/** Updates \f$x \leftarrow a x + b y\f$.
+ */
+void nfft_upd_axpby_complex(fftw_complex* x, double a, fftw_complex* y, double b, int n);
+
+/** Updates \f$x \leftarrow a x + b y\f$.
+ */
+void nfft_upd_axpby_double( double* x, double a, double* y, double b, int n);
+
+/** Updates \f$x \leftarrow x + a w\odot y\f$.
+ */
+void nfft_upd_xpawy_complex(fftw_complex* x, double a, double* w, fftw_complex* y, int n);
+
+/** Updates \f$x \leftarrow x + a w\odot y\f$.
+ */
+void nfft_upd_xpawy_double( double* x, double a, double* w, double* y, int n);
+
+/** Updates \f$x \leftarrow a x + w\odot y\f$.
+ */
+void nfft_upd_axpwy_complex(fftw_complex* x, double a, double* w, fftw_complex* y, int n);
+
+/** Updates \f$x \leftarrow a x + w\odot y\f$.
+ */
+void nfft_upd_axpwy_double( double* x, double a, double* w, double* y, int n);
+
+/** Swaps each half over N[d]/2.
+ */
+void nfft_fftshift_complex(fftw_complex *x, int d, int* N);
+
+/** Prints a vector of integer numbers.
+ */
+void nfft_vpr_int(int *x, int n, char *text);
+
+/** Prints a vector of doubles numbers.
+ */
+void nfft_vpr_double(double *x, int n, const char *text);
+
+/** Prints a vector of complex numbers.
+ */
+void nfft_vpr_complex(fftw_complex *x, int n, const char *text);
+
+/** Inits a vector of random complex numbers in \f$[0,1]\times[0,1]{\rm i}\f$.
+ */
+void nfft_vrand_unit_complex(fftw_complex *x, int n);
+
+/** Inits a vector of random double numbers in \f$[-1/2,1/2]\f$.
+ */
+void nfft_vrand_shifted_unit_double(double *x, int n);
+
+/* ######################################################################### */
+/* ########## Helpers for inverse transforms ############################### */
+/* ######################################################################### */
+
+/** Computes non periodic voronoi weights, assumes ordered nodes \f$x_j\f$ */
+void nfft_voronoi_weights_1d(double *w, double *x, int M);
+
+/** Computes voronoi weights for nodes on the sphere S^2. */
+void nfft_voronoi_weights_S2(double *w, double *xi, int M);
+
+/** Computes the damping factor for the modified Fejer kernel, ie
+ \f$\frac{2}{N}\left(1-\frac{\left|2k+1\right|}{N}\right)\f$
+ */
+double nfft_modified_fejer(int N,int kk);
+
+/** Computes the damping factor for the modified Jackson kernel.
+ */
+double nfft_modified_jackson2(int N,int kk);
+
+/** Computes the damping factor for the modified generalised Jackson kernel.
+ */
+double nfft_modified_jackson4(int N,int kk);
+
+/** Computes the damping factor for the modified Sobolev kernel.
+ */
+double nfft_modified_sobolev(double mu,int kk);
+
+/** Computes the damping factor for the modified multiquadric kernel.
+ */
+double nfft_modified_multiquadric(double mu,double c,int kk);
+
+int nfft_smbi(const double x, const double alpha, const int nb, const int ize,
+ double *b);
+
+double nfft_drand48(void);
+
+void nfft_srand48(long int seed);
+
+/** Radix sort for node indices.
+ */
+void nfft_sort_node_indices_radix_lsdf(int n, int *keys0, int *keys1, int rhigh);
+
+/** Radix sort for node indices.
+ */
+void nfft_sort_node_indices_radix_msdf(int n, int *keys0, int *keys1, int rhigh);
+
+int nfft_get_num_threads(void);
+
+#ifdef _OPENMP
+int nfft_get_omp_num_threads(void);
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+/** @}
+ */
+#endif
diff --git a/include/ticks.h.in b/include/ticks.h.in
new file mode 100644
index 0000000..292e677
--- /dev/null
+++ b/include/ticks.h.in
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: infft.h 3471 2010-04-08 21:43:41Z keiner $ */
+
+#ifndef TICKS_H_
+#define TICKS_H_
+
+#include "cycle.h"
+
+#define TICKS_PER_SECOND @TICKS_PER_SECOND@
+
+#ifndef HAVE_TICK_COUNTER
+ typedef unsigned ticks;
+ #define getticks() 0U;
+ INLINE_ELAPSED(__inline__)
+#endif
+
+#endif /* TICKS_H_ */
diff --git a/kernel/Makefile.am b/kernel/Makefile.am
new file mode 100644
index 0000000..6d45fa4
--- /dev/null
+++ b/kernel/Makefile.am
@@ -0,0 +1,104 @@
+if HAVE_NFCT
+ LIB_NFCT=nfct/libnfct.la
+ DIR_NFCT=nfct
+else
+ LIB_NFCT=
+endif
+
+if HAVE_NFST
+ LIB_NFST=nfst/libnfst.la
+ DIR_NFST=nfst
+else
+ LIB_NFST=
+ DIR_NFST=
+endif
+
+if HAVE_NFSFT
+ LIB_NFSFT=nfsft/libnfsft.la
+ DIR_NFSFT=nfsft
+if HAVE_THREADS
+ LIB_NFSFT_THREADS=nfsft/libnfsft_threads.la
+else
+ LIB_NFSFT_THREADS=
+endif
+else
+ LIB_NFSFT=
+ DIR_NFSFT=
+ LIB_NFSFT_THREADS=
+endif
+
+if HAVE_NFSOFT
+ LIB_NFSOFT=nfsoft/libnfsoft.la
+ DIR_NFSOFT=nfsoft
+else
+ LIB_NFSOFT=
+ DIR_NFSOFT=
+endif
+
+if HAVE_NNFFT
+ LIB_NNFFT=nnfft/libnnfft.la
+ DIR_NNFFT=nnfft
+else
+ LIB_NNFFT=
+ DIR_NNFFT=
+endif
+
+if HAVE_NSFFT
+ LIB_NSFFT=nsfft/libnsfft.la
+ DIR_NSFFT=nsfft
+else
+ LIB_NSFFT=
+ DIR_NSFFT=
+endif
+
+if HAVE_MRI
+ LIB_MRI=mri/libmri.la
+ DIR_MRI=mri
+else
+ LIB_MRI=
+ DIR_MRI=
+endif
+
+if HAVE_FPT
+ LIB_FPT=fpt/libfpt.la
+ DIR_FPT=fpt
+if HAVE_THREADS
+ LIB_FPT_THREADS=fpt/libfpt_threads.la
+else
+ LIB_FPT_THREADS=
+endif
+else
+ LIB_FPT=
+ DIR_FPT=
+ LIB_FPT_THREADS=
+endif
+
+SUBDIRS = util nfft $(DIR_NFCT) $(DIR_NFST) $(DIR_NNFFT) $(DIR_NSFFT) \
+ $(DIR_MRI) $(DIR_FPT) $(DIR_NFSFT) $(DIR_NFSOFT) solver .
+
+if HAVE_THREADS
+ LIBKERNEL_THREADS_LA = libkernel_threads.la
+else
+ LIBKERNEL_THREADS_LA =
+endif
+
+
+noinst_LTLIBRARIES = libkernel.la $(LIBKERNEL_THREADS_LA)
+
+libkernel_la_SOURCES =
+
+libkernel_la_LIBADD = util/libutil.la nfft/libnfft.la $(LIB_NFCT) $(LIB_NFST) \
+ $(LIB_NNFFT) $(LIB_NSFFT) $(LIB_MRI) $(LIB_FPT) $(LIB_NFSFT) $(LIB_NFSOFT) \
+ solver/libsolver.la
+
+if HAVE_THREADS
+ libkernel_threads_la_SOURCES =
+
+ libkernel_threads_la_LIBADD = util/libutil.la nfft/libnfft_threads.la $(LIB_NFCT) $(LIB_NFST) \
+ $(LIB_NNFFT) $(LIB_NSFFT) $(LIB_MRI) $(LIB_FPT_THREADS) $(LIB_NFSFT_THREADS) $(LIB_NFSOFT) \
+ solver/libsolver.la
+
+if HAVE_OPENMP
+ libkernel_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
diff --git a/kernel/Makefile.in b/kernel/Makefile.in
new file mode 100644
index 0000000..ca66153
--- /dev/null
+++ b/kernel/Makefile.in
@@ -0,0 +1,762 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+ at HAVE_NFCT_TRUE@am__DEPENDENCIES_1 = nfct/libnfct.la
+ at HAVE_NFST_TRUE@am__DEPENDENCIES_2 = nfst/libnfst.la
+ at HAVE_NNFFT_TRUE@am__DEPENDENCIES_3 = nnfft/libnnfft.la
+ at HAVE_NSFFT_TRUE@am__DEPENDENCIES_4 = nsfft/libnsfft.la
+ at HAVE_MRI_TRUE@am__DEPENDENCIES_5 = mri/libmri.la
+ at HAVE_FPT_TRUE@am__DEPENDENCIES_6 = fpt/libfpt.la
+ at HAVE_NFSFT_TRUE@am__DEPENDENCIES_7 = nfsft/libnfsft.la
+ at HAVE_NFSOFT_TRUE@am__DEPENDENCIES_8 = nfsoft/libnfsoft.la
+libkernel_la_DEPENDENCIES = util/libutil.la nfft/libnfft.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
+ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \
+ $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_6) \
+ $(am__DEPENDENCIES_7) $(am__DEPENDENCIES_8) \
+ solver/libsolver.la
+am_libkernel_la_OBJECTS =
+libkernel_la_OBJECTS = $(am_libkernel_la_OBJECTS)
+ at HAVE_FPT_TRUE@@HAVE_THREADS_TRUE at am__DEPENDENCIES_9 = \
+ at HAVE_FPT_TRUE@@HAVE_THREADS_TRUE@ fpt/libfpt_threads.la
+ at HAVE_NFSFT_TRUE@@HAVE_THREADS_TRUE at am__DEPENDENCIES_10 = \
+ at HAVE_NFSFT_TRUE@@HAVE_THREADS_TRUE@ nfsft/libnfsft_threads.la
+ at HAVE_THREADS_TRUE@libkernel_threads_la_DEPENDENCIES = \
+ at HAVE_THREADS_TRUE@ util/libutil.la nfft/libnfft_threads.la \
+ at HAVE_THREADS_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
+ at HAVE_THREADS_TRUE@ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \
+ at HAVE_THREADS_TRUE@ $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_9) \
+ at HAVE_THREADS_TRUE@ $(am__DEPENDENCIES_10) \
+ at HAVE_THREADS_TRUE@ $(am__DEPENDENCIES_8) solver/libsolver.la
+am_libkernel_threads_la_OBJECTS =
+libkernel_threads_la_OBJECTS = $(am_libkernel_threads_la_OBJECTS)
+libkernel_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libkernel_threads_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+ at HAVE_THREADS_TRUE@am_libkernel_threads_la_rpath =
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libkernel_la_SOURCES) $(libkernel_threads_la_SOURCES)
+DIST_SOURCES = $(libkernel_la_SOURCES) $(libkernel_threads_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = util nfft nfct nfst nnfft nsfft mri fpt nfsft nfsoft \
+ solver .
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ at HAVE_NFCT_FALSE@LIB_NFCT =
+ at HAVE_NFCT_TRUE@LIB_NFCT = nfct/libnfct.la
+ at HAVE_NFCT_TRUE@DIR_NFCT = nfct
+ at HAVE_NFST_FALSE@LIB_NFST =
+ at HAVE_NFST_TRUE@LIB_NFST = nfst/libnfst.la
+ at HAVE_NFST_FALSE@DIR_NFST =
+ at HAVE_NFST_TRUE@DIR_NFST = nfst
+ at HAVE_NFSFT_FALSE@LIB_NFSFT =
+ at HAVE_NFSFT_TRUE@LIB_NFSFT = nfsft/libnfsft.la
+ at HAVE_NFSFT_FALSE@DIR_NFSFT =
+ at HAVE_NFSFT_TRUE@DIR_NFSFT = nfsft
+ at HAVE_NFSFT_FALSE@LIB_NFSFT_THREADS =
+ at HAVE_NFSFT_TRUE@@HAVE_THREADS_FALSE at LIB_NFSFT_THREADS =
+ at HAVE_NFSFT_TRUE@@HAVE_THREADS_TRUE at LIB_NFSFT_THREADS = nfsft/libnfsft_threads.la
+ at HAVE_NFSOFT_FALSE@LIB_NFSOFT =
+ at HAVE_NFSOFT_TRUE@LIB_NFSOFT = nfsoft/libnfsoft.la
+ at HAVE_NFSOFT_FALSE@DIR_NFSOFT =
+ at HAVE_NFSOFT_TRUE@DIR_NFSOFT = nfsoft
+ at HAVE_NNFFT_FALSE@LIB_NNFFT =
+ at HAVE_NNFFT_TRUE@LIB_NNFFT = nnfft/libnnfft.la
+ at HAVE_NNFFT_FALSE@DIR_NNFFT =
+ at HAVE_NNFFT_TRUE@DIR_NNFFT = nnfft
+ at HAVE_NSFFT_FALSE@LIB_NSFFT =
+ at HAVE_NSFFT_TRUE@LIB_NSFFT = nsfft/libnsfft.la
+ at HAVE_NSFFT_FALSE@DIR_NSFFT =
+ at HAVE_NSFFT_TRUE@DIR_NSFFT = nsfft
+ at HAVE_MRI_FALSE@LIB_MRI =
+ at HAVE_MRI_TRUE@LIB_MRI = mri/libmri.la
+ at HAVE_MRI_FALSE@DIR_MRI =
+ at HAVE_MRI_TRUE@DIR_MRI = mri
+ at HAVE_FPT_FALSE@LIB_FPT =
+ at HAVE_FPT_TRUE@LIB_FPT = fpt/libfpt.la
+ at HAVE_FPT_FALSE@DIR_FPT =
+ at HAVE_FPT_TRUE@DIR_FPT = fpt
+ at HAVE_FPT_FALSE@LIB_FPT_THREADS =
+ at HAVE_FPT_TRUE@@HAVE_THREADS_FALSE at LIB_FPT_THREADS =
+ at HAVE_FPT_TRUE@@HAVE_THREADS_TRUE at LIB_FPT_THREADS = fpt/libfpt_threads.la
+SUBDIRS = util nfft $(DIR_NFCT) $(DIR_NFST) $(DIR_NNFFT) $(DIR_NSFFT) \
+ $(DIR_MRI) $(DIR_FPT) $(DIR_NFSFT) $(DIR_NFSOFT) solver .
+
+ at HAVE_THREADS_FALSE@LIBKERNEL_THREADS_LA =
+ at HAVE_THREADS_TRUE@LIBKERNEL_THREADS_LA = libkernel_threads.la
+noinst_LTLIBRARIES = libkernel.la $(LIBKERNEL_THREADS_LA)
+libkernel_la_SOURCES =
+libkernel_la_LIBADD = util/libutil.la nfft/libnfft.la $(LIB_NFCT) $(LIB_NFST) \
+ $(LIB_NNFFT) $(LIB_NSFFT) $(LIB_MRI) $(LIB_FPT) $(LIB_NFSFT) $(LIB_NFSOFT) \
+ solver/libsolver.la
+
+ at HAVE_THREADS_TRUE@libkernel_threads_la_SOURCES =
+ at HAVE_THREADS_TRUE@libkernel_threads_la_LIBADD = util/libutil.la nfft/libnfft_threads.la $(LIB_NFCT) $(LIB_NFST) \
+ at HAVE_THREADS_TRUE@ $(LIB_NNFFT) $(LIB_NSFFT) $(LIB_MRI) $(LIB_FPT_THREADS) $(LIB_NFSFT_THREADS) $(LIB_NFSOFT) \
+ at HAVE_THREADS_TRUE@ solver/libsolver.la
+
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libkernel_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu kernel/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libkernel.la: $(libkernel_la_OBJECTS) $(libkernel_la_DEPENDENCIES) $(EXTRA_libkernel_la_DEPENDENCIES)
+ $(LINK) $(libkernel_la_OBJECTS) $(libkernel_la_LIBADD) $(LIBS)
+libkernel_threads.la: $(libkernel_threads_la_OBJECTS) $(libkernel_threads_la_DEPENDENCIES) $(EXTRA_libkernel_threads_la_DEPENDENCIES)
+ $(libkernel_threads_la_LINK) $(am_libkernel_threads_la_rpath) $(libkernel_threads_la_OBJECTS) $(libkernel_threads_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+cscopelist-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES)
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+ cscopelist-recursive ctags-recursive install-am install-strip \
+ tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES cscopelist cscopelist-recursive ctags \
+ ctags-recursive distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/fpt/Makefile.am b/kernel/fpt/Makefile.am
new file mode 100644
index 0000000..e011d08
--- /dev/null
+++ b/kernel/fpt/Makefile.am
@@ -0,0 +1,23 @@
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+if HAVE_THREADS
+ LIBFPT_THREADS_LA = libfpt_threads.la
+else
+ LIBFPT_THREADS_LA =
+endif
+
+noinst_LTLIBRARIES = libfpt.la $(LIBFPT_THREADS_LA)
+
+libfpt_la_SOURCES = fpt.c
+
+noinst_HEADERS = fpt.h
+
+if HAVE_THREADS
+ libfpt_threads_la_SOURCES = fpt.c
+if HAVE_OPENMP
+ libfpt_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
diff --git a/kernel/fpt/Makefile.in b/kernel/fpt/Makefile.in
new file mode 100644
index 0000000..0360ca1
--- /dev/null
+++ b/kernel/fpt/Makefile.in
@@ -0,0 +1,583 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/fpt
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libfpt_la_LIBADD =
+am_libfpt_la_OBJECTS = fpt.lo
+libfpt_la_OBJECTS = $(am_libfpt_la_OBJECTS)
+libfpt_threads_la_LIBADD =
+am__libfpt_threads_la_SOURCES_DIST = fpt.c
+ at HAVE_THREADS_TRUE@am_libfpt_threads_la_OBJECTS = \
+ at HAVE_THREADS_TRUE@ libfpt_threads_la-fpt.lo
+libfpt_threads_la_OBJECTS = $(am_libfpt_threads_la_OBJECTS)
+libfpt_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libfpt_threads_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+ at HAVE_THREADS_TRUE@am_libfpt_threads_la_rpath =
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libfpt_la_SOURCES) $(libfpt_threads_la_SOURCES)
+DIST_SOURCES = $(libfpt_la_SOURCES) \
+ $(am__libfpt_threads_la_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+ at HAVE_THREADS_FALSE@LIBFPT_THREADS_LA =
+ at HAVE_THREADS_TRUE@LIBFPT_THREADS_LA = libfpt_threads.la
+noinst_LTLIBRARIES = libfpt.la $(LIBFPT_THREADS_LA)
+libfpt_la_SOURCES = fpt.c
+noinst_HEADERS = fpt.h
+ at HAVE_THREADS_TRUE@libfpt_threads_la_SOURCES = fpt.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libfpt_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/fpt/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu kernel/fpt/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libfpt.la: $(libfpt_la_OBJECTS) $(libfpt_la_DEPENDENCIES) $(EXTRA_libfpt_la_DEPENDENCIES)
+ $(LINK) $(libfpt_la_OBJECTS) $(libfpt_la_LIBADD) $(LIBS)
+libfpt_threads.la: $(libfpt_threads_la_OBJECTS) $(libfpt_threads_la_DEPENDENCIES) $(EXTRA_libfpt_threads_la_DEPENDENCIES)
+ $(libfpt_threads_la_LINK) $(am_libfpt_threads_la_rpath) $(libfpt_threads_la_OBJECTS) $(libfpt_threads_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fpt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libfpt_threads_la-fpt.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+libfpt_threads_la-fpt.lo: fpt.c
+ at am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfpt_threads_la_CFLAGS) $(CFLAGS) -MT libfpt_threads_la-fpt.lo -MD -MP -MF $(DEPDIR)/libfpt_threads_la-fpt.Tpo -c -o libfpt_threads_la-fpt.lo `test -f 'fpt.c' || echo '$(srcdir)/'`fpt.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libfpt_threads_la-fpt.Tpo $(DEPDIR)/libfpt_threads_la-fpt.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fpt.c' object='libfpt_threads_la-fpt.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfpt_threads_la_CFLAGS) $(CFLAGS) -c -o libfpt_threads_la-fpt.lo `test -f 'fpt.c' || echo '$(srcdir)/'`fpt.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/fpt/fpt.c b/kernel/fpt/fpt.c
new file mode 100644
index 0000000..13d179a
--- /dev/null
+++ b/kernel/fpt/fpt.c
@@ -0,0 +1,1923 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: fpt.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \file fpt.c
+ * \brief Implementation file for the FPT module
+ * \author Jens Keiner
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#include "nfft3.h"
+#include "nfft3util.h"
+#include "infft.h"
+
+/* Macros for index calculation. */
+
+/** Minimum degree at top of a cascade */
+#define K_START_TILDE(x,y) (NFFT_MAX(NFFT_MIN(x,y-2),0))
+
+/** Maximum degree at top of a cascade */
+#define K_END_TILDE(x,y) NFFT_MIN(x,y-1)
+
+/** Index of first block of four functions at level */
+#define FIRST_L(x,y) (LRINT(floor((x)/(double)y)))
+
+/** Index of last block of four functions at level */
+#define LAST_L(x,y) (LRINT(ceil(((x)+1)/(double)y))-1)
+
+#define N_TILDE(y) (y-1)
+
+#define IS_SYMMETRIC(x,y,z) (x >= ((y-1.0)/z))
+
+#define FPT_BREAK_EVEN 4
+
+/**
+ * Holds data for a single multiplication step in the cascade summation.
+ */
+typedef struct fpt_step_
+{
+ bool stable; /**< Indicates if the values
+ contained represent a fast or
+ a slow stabilized step. */
+ int Ns; /**< TODO Add comment here. */
+ int ts; /**< TODO Add comment here. */
+ double **a11,**a12,**a21,**a22; /**< The matrix components */
+ double *g; /**< */
+} fpt_step;
+
+/**
+ * Holds data for a single cascade summation.
+ */
+typedef struct fpt_data_
+{
+ fpt_step **steps; /**< The cascade summation steps */
+ int k_start; /**< TODO Add comment here. */
+ double *alphaN; /**< TODO Add comment here. */
+ double *betaN; /**< TODO Add comment here. */
+ double *gammaN; /**< TODO Add comment here. */
+ double alpha_0; /**< TODO Add comment here. */
+ double beta_0; /**< TODO Add comment here. */
+ double gamma_m1; /**< TODO Add comment here. */
+ /* Data for direct transform. */ /**< TODO Add comment here. */
+ double *_alpha; /**< TODO Add comment here. */
+ double *_beta; /**< TODO Add comment here. */
+ double *_gamma; /**< TODO Add comment here. */
+} fpt_data;
+
+/**
+ * Holds data for a set of cascade summations.
+ */
+typedef struct fpt_set_s_
+{
+ int flags; /**< The flags */
+ int M; /**< The number of DPT transforms */
+ int N; /**< The transform length. Must be
+ a power of two. */
+ int t; /**< The exponent of N */
+ fpt_data *dpt; /**< The DPT transform data */
+ double **xcvecs; /**< Array of pointers to arrays
+ containing the Chebyshev
+ nodes */
+ double *xc; /**< Array for Chebychev-nodes. */
+ double _Complex *temp; /**< */
+ double _Complex *work; /**< */
+ double _Complex *result; /**< */
+ double _Complex *vec3;
+ double _Complex *vec4;
+ double _Complex *z;
+ fftw_plan *plans_dct3; /**< Transform plans for the fftw
+ library */
+ fftw_plan *plans_dct2; /**< Transform plans for the fftw
+ library */
+ fftw_r2r_kind *kinds; /**< Transform kinds for fftw
+ library */
+ fftw_r2r_kind *kindsr; /**< Transform kinds for fftw
+ library */
+
+ int *lengths; /**< Transform lengths for fftw library */
+
+ /* Data for slow transforms. */
+ double *xc_slow;
+} fpt_set_s;
+
+static inline void abuvxpwy(double a, double b, double _Complex* u, double _Complex* x,
+ double* v, double _Complex* y, double* w, int n)
+{
+ int l; double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;
+ double *v_ptr = v, *w_ptr = w;
+ for (l = 0; l < n; l++)
+ *u_ptr++ = a * (b * (*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++));
+}
+
+#define ABUVXPWY_SYMMETRIC(NAME,S1,S2) \
+static inline void NAME(double a, double b, double _Complex* u, double _Complex* x, \
+ double* v, double _Complex* y, double* w, int n) \
+{ \
+ const int n2 = n>>1; \
+ int l; double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \
+ double *v_ptr = v, *w_ptr = w; \
+ for (l = 0; l < n2; l++) \
+ *u_ptr++ = a * (b * (*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++)); \
+ v_ptr--; w_ptr--; \
+ for (l = 0; l < n2; l++) \
+ *u_ptr++ = a * (b * S1 * (*v_ptr--) * (*x_ptr++) + S2 * (*w_ptr--) * (*y_ptr++)); \
+}
+
+ABUVXPWY_SYMMETRIC(abuvxpwy_symmetric1,1.0,-1.0)
+ABUVXPWY_SYMMETRIC(abuvxpwy_symmetric2,-1.0,1.0)
+
+#define ABUVXPWY_SYMMETRIC_1(NAME,S1) \
+static inline void NAME(double a, double b, double _Complex* u, double _Complex* x, \
+ double* v, double _Complex* y, int n, double *xx) \
+{ \
+ const int n2 = n>>1; \
+ int l; double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \
+ double *v_ptr = v, *xx_ptr = xx; \
+ for (l = 0; l < n2; l++, v_ptr++) \
+ *u_ptr++ = a * (b * (*v_ptr) * (*x_ptr++) + ((*v_ptr)*(1.0+*xx_ptr++)) * (*y_ptr++)); \
+ v_ptr--; \
+ for (l = 0; l < n2; l++, v_ptr--) \
+ *u_ptr++ = a * (b * S1 * (*v_ptr) * (*x_ptr++) + (S1 * (*v_ptr) * (1.0+*xx_ptr++)) * (*y_ptr++)); \
+}
+
+ABUVXPWY_SYMMETRIC_1(abuvxpwy_symmetric1_1,1.0)
+ABUVXPWY_SYMMETRIC_1(abuvxpwy_symmetric1_2,-1.0)
+
+#define ABUVXPWY_SYMMETRIC_2(NAME,S1) \
+static inline void NAME(double a, double b, double _Complex* u, double _Complex* x, \
+ double _Complex* y, double* w, int n, double *xx) \
+{ \
+ const int n2 = n>>1; \
+ int l; double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y; \
+ double *w_ptr = w, *xx_ptr = xx; \
+ for (l = 0; l < n2; l++, w_ptr++) \
+ *u_ptr++ = a * (b * (*w_ptr/(1.0+*xx_ptr++)) * (*x_ptr++) + (*w_ptr) * (*y_ptr++)); \
+ w_ptr--; \
+ for (l = 0; l < n2; l++, w_ptr--) \
+ *u_ptr++ = a * (b * (S1 * (*w_ptr)/(1.0+*xx_ptr++) ) * (*x_ptr++) + S1 * (*w_ptr) * (*y_ptr++)); \
+}
+
+ABUVXPWY_SYMMETRIC_2(abuvxpwy_symmetric2_1,1.0)
+ABUVXPWY_SYMMETRIC_2(abuvxpwy_symmetric2_2,-1.0)
+
+static inline void auvxpwy(double a, double _Complex* u, double _Complex* x, double* v,
+ double _Complex* y, double* w, int n)
+{
+ int l;
+ double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;
+ double *v_ptr = v, *w_ptr = w;
+ for (l = n; l > 0; l--)
+ *u_ptr++ = a * ((*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++));
+}
+
+static inline void auvxpwy_symmetric(double a, double _Complex* u, double _Complex* x,
+ double* v, double _Complex* y, double* w, int n)
+{
+ const int n2 = n>>1; \
+ int l;
+ double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;
+ double *v_ptr = v, *w_ptr = w;
+ for (l = n2; l > 0; l--)
+ *u_ptr++ = a * ((*v_ptr++) * (*x_ptr++) + (*w_ptr++) * (*y_ptr++));
+ v_ptr--; w_ptr--;
+ for (l = n2; l > 0; l--)
+ *u_ptr++ = a * ((*v_ptr--) * (*x_ptr++) - (*w_ptr--) * (*y_ptr++));
+}
+
+static inline void auvxpwy_symmetric_1(double a, double _Complex* u, double _Complex* x,
+ double* v, double _Complex* y, double* w, int n, double *xx)
+{
+ const int n2 = n>>1; \
+ int l;
+ double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;
+ double *v_ptr = v, *w_ptr = w, *xx_ptr = xx;
+ for (l = n2; l > 0; l--, xx_ptr++)
+ *u_ptr++ = a * (((*v_ptr++)*(1.0+*xx_ptr)) * (*x_ptr++) + ((*w_ptr++)*(1.0+*xx_ptr)) * (*y_ptr++));
+ v_ptr--; w_ptr--;
+ for (l = n2; l > 0; l--, xx_ptr++)
+ *u_ptr++ = a * (-((*v_ptr--)*(1.0+*xx_ptr)) * (*x_ptr++) + ((*w_ptr--)*(1.0+*xx_ptr)) * (*y_ptr++));
+}
+
+static inline void auvxpwy_symmetric_2(double a, double _Complex* u, double _Complex* x,
+ double* v, double _Complex* y, double* w, int n, double *xx)
+{
+ const int n2 = n>>1; \
+ int l;
+ double _Complex *u_ptr = u, *x_ptr = x, *y_ptr = y;
+ double *v_ptr = v, *w_ptr = w, *xx_ptr = xx;
+ for (l = n2; l > 0; l--, xx_ptr++)
+ *u_ptr++ = a * (((*v_ptr++)/(1.0+*xx_ptr)) * (*x_ptr++) + ((*w_ptr++)/(1.0+*xx_ptr)) * (*y_ptr++));
+ v_ptr--; w_ptr--;
+ for (l = n2; l > 0; l--, xx_ptr++)
+ *u_ptr++ = a * (-((*v_ptr--)/(1.0+*xx_ptr)) * (*x_ptr++) + ((*w_ptr--)/(1.0+*xx_ptr)) * (*y_ptr++));
+}
+
+#define FPT_DO_STEP(NAME,M1_FUNCTION,M2_FUNCTION) \
+static inline void NAME(double _Complex *a, double _Complex *b, double *a11, double *a12, \
+ double *a21, double *a22, double g, int tau, fpt_set set) \
+{ \
+ /** The length of the coefficient arrays. */ \
+ int length = 1<<(tau+1); \
+ /** Twice the length of the coefficient arrays. */ \
+ double norm = 1.0/(length<<1); \
+ \
+ /* Compensate for factors introduced by a raw DCT-III. */ \
+ a[0] *= 2.0; \
+ b[0] *= 2.0; \
+ \
+ /* Compute function values from Chebyshev-coefficients using a DCT-III. */ \
+ fftw_execute_r2r(set->plans_dct3[tau-1],(double*)a,(double*)a); \
+ fftw_execute_r2r(set->plans_dct3[tau-1],(double*)b,(double*)b); \
+ \
+ /*for (k = 0; k < length; k++)*/ \
+ /*{*/ \
+ /*fprintf(stderr,"fpt_do_step: a11 = %le, a12 = %le, a21 = %le, a22 = %le\n",*/ \
+ /* a11[k],a12[k],a21[k],a22[k]);*/ \
+ /*}*/ \
+ \
+ /* Check, if gamma is zero. */ \
+ if (g == 0.0) \
+ { \
+ /*fprintf(stderr,"gamma == 0!\n");*/ \
+ /* Perform multiplication only for second row. */ \
+ M2_FUNCTION(norm,b,b,a22,a,a21,length); \
+ } \
+ else \
+ { \
+ /*fprintf(stderr,"gamma != 0!\n");*/ \
+ /* Perform multiplication for both rows. */ \
+ M2_FUNCTION(norm,set->z,b,a22,a,a21,length); \
+ M1_FUNCTION(norm*g,a,a,a11,b,a12,length); \
+ memcpy(b,set->z,length*sizeof(double _Complex)); \
+ /* Compute Chebyshev-coefficients using a DCT-II. */ \
+ fftw_execute_r2r(set->plans_dct2[tau-1],(double*)a,(double*)a); \
+ /* Compensate for factors introduced by a raw DCT-II. */ \
+ a[0] *= 0.5; \
+ } \
+ \
+ /* Compute Chebyshev-coefficients using a DCT-II. */ \
+ fftw_execute_r2r(set->plans_dct2[tau-1],(double*)b,(double*)b); \
+ /* Compensate for factors introduced by a raw DCT-II. */ \
+ b[0] *= 0.5; \
+}
+
+FPT_DO_STEP(fpt_do_step,auvxpwy,auvxpwy)
+FPT_DO_STEP(fpt_do_step_symmetric,auvxpwy_symmetric,auvxpwy_symmetric)
+/*FPT_DO_STEP(fpt_do_step_symmetric_u,auvxpwy_symmetric,auvxpwy)
+FPT_DO_STEP(fpt_do_step_symmetric_l,auvxpwy,auvxpwy_symmetric)*/
+
+static inline void fpt_do_step_symmetric_u(double _Complex *a, double _Complex *b,
+ double *a11, double *a12, double *a21, double *a22, double *x,
+ double gam, int tau, fpt_set set)
+{
+ /** The length of the coefficient arrays. */
+ int length = 1<<(tau+1);
+ /** Twice the length of the coefficient arrays. */
+ double norm = 1.0/(length<<1);
+
+ UNUSED(a21); UNUSED(a22);
+
+ /* Compensate for factors introduced by a raw DCT-III. */
+ a[0] *= 2.0;
+ b[0] *= 2.0;
+
+ /* Compute function values from Chebyshev-coefficients using a DCT-III. */
+ fftw_execute_r2r(set->plans_dct3[tau-1],(double*)a,(double*)a);
+ fftw_execute_r2r(set->plans_dct3[tau-1],(double*)b,(double*)b);
+
+ /*for (k = 0; k < length; k++)*/
+ /*{*/
+ /*fprintf(stderr,"fpt_do_step: a11 = %le, a12 = %le, a21 = %le, a22 = %le\n",*/
+ /* a11[k],a12[k],a21[k],a22[k]);*/
+ /*}*/
+
+ /* Check, if gamma is zero. */
+ if (gam == 0.0)
+ {
+ /*fprintf(stderr,"gamma == 0!\n");*/
+ /* Perform multiplication only for second row. */
+ auvxpwy_symmetric_1(norm,b,b,a12,a,a11,length,x);
+ }
+ else
+ {
+ /*fprintf(stderr,"gamma != 0!\n");*/
+ /* Perform multiplication for both rows. */
+ auvxpwy_symmetric_1(norm,set->z,b,a12,a,a11,length,x);
+ auvxpwy_symmetric(norm*gam,a,a,a11,b,a12,length);
+ memcpy(b,set->z,length*sizeof(double _Complex));
+ /* Compute Chebyshev-coefficients using a DCT-II. */
+ fftw_execute_r2r(set->plans_dct2[tau-1],(double*)a,(double*)a);
+ /* Compensate for factors introduced by a raw DCT-II. */
+ a[0] *= 0.5;
+ }
+
+ /* Compute Chebyshev-coefficients using a DCT-II. */
+ fftw_execute_r2r(set->plans_dct2[tau-1],(double*)b,(double*)b);
+ /* Compensate for factors introduced by a raw DCT-II. */
+ b[0] *= 0.5;
+}
+
+static inline void fpt_do_step_symmetric_l(double _Complex *a, double _Complex *b,
+ double *a11, double *a12, double *a21, double *a22, double *x, double gam, int tau, fpt_set set)
+{
+ /** The length of the coefficient arrays. */
+ int length = 1<<(tau+1);
+ /** Twice the length of the coefficient arrays. */
+ double norm = 1.0/(length<<1);
+
+ /* Compensate for factors introduced by a raw DCT-III. */
+ a[0] *= 2.0;
+ b[0] *= 2.0;
+
+ UNUSED(a11); UNUSED(a12);
+
+ /* Compute function values from Chebyshev-coefficients using a DCT-III. */
+ fftw_execute_r2r(set->plans_dct3[tau-1],(double*)a,(double*)a);
+ fftw_execute_r2r(set->plans_dct3[tau-1],(double*)b,(double*)b);
+
+ /*for (k = 0; k < length; k++)*/
+ /*{*/
+ /*fprintf(stderr,"fpt_do_step: a11 = %le, a12 = %le, a21 = %le, a22 = %le\n",*/
+ /* a11[k],a12[k],a21[k],a22[k]);*/
+ /*}*/
+
+ /* Check, if gamma is zero. */
+ if (gam == 0.0)
+ {
+ /*fprintf(stderr,"gamma == 0!\n");*/
+ /* Perform multiplication only for second row. */
+ auvxpwy_symmetric(norm,b,b,a22,a,a21,length);
+ }
+ else
+ {
+ /*fprintf(stderr,"gamma != 0!\n");*/
+ /* Perform multiplication for both rows. */
+ auvxpwy_symmetric(norm,set->z,b,a22,a,a21,length);
+ auvxpwy_symmetric_2(norm*gam,a,a,a21,b,a22,length,x);
+ memcpy(b,set->z,length*sizeof(double _Complex));
+ /* Compute Chebyshev-coefficients using a DCT-II. */
+ fftw_execute_r2r(set->plans_dct2[tau-1],(double*)a,(double*)a);
+ /* Compensate for factors introduced by a raw DCT-II. */
+ a[0] *= 0.5;
+ }
+
+ /* Compute Chebyshev-coefficients using a DCT-II. */
+ fftw_execute_r2r(set->plans_dct2[tau-1],(double*)b,(double*)b);
+ /* Compensate for factors introduced by a raw DCT-II. */
+ b[0] *= 0.5;
+}
+
+#define FPT_DO_STEP_TRANSPOSED(NAME,M1_FUNCTION,M2_FUNCTION) \
+static inline void NAME(double _Complex *a, double _Complex *b, double *a11, \
+ double *a12, double *a21, double *a22, double g, int tau, fpt_set set) \
+{ \
+ /** The length of the coefficient arrays. */ \
+ int length = 1<<(tau+1); \
+ /** Twice the length of the coefficient arrays. */ \
+ double norm = 1.0/(length<<1); \
+ \
+ /* Compute function values from Chebyshev-coefficients using a DCT-III. */ \
+ fftw_execute_r2r(set->plans_dct3[tau-1],(double*)a,(double*)a); \
+ fftw_execute_r2r(set->plans_dct3[tau-1],(double*)b,(double*)b); \
+ \
+ /* Perform matrix multiplication. */ \
+ M1_FUNCTION(norm,g,set->z,a,a11,b,a21,length); \
+ M2_FUNCTION(norm,g,b,a,a12,b,a22,length); \
+ memcpy(a,set->z,length*sizeof(double _Complex)); \
+ \
+ /* Compute Chebyshev-coefficients using a DCT-II. */ \
+ fftw_execute_r2r(set->plans_dct2[tau-1],(double*)a,(double*)a); \
+ fftw_execute_r2r(set->plans_dct2[tau-1],(double*)b,(double*)b); \
+}
+
+FPT_DO_STEP_TRANSPOSED(fpt_do_step_t,abuvxpwy,abuvxpwy)
+FPT_DO_STEP_TRANSPOSED(fpt_do_step_t_symmetric,abuvxpwy_symmetric1,abuvxpwy_symmetric2)
+/*FPT_DO_STEP_TRANSPOSED(fpt_do_step_t_symmetric_u,abuvxpwy_symmetric1_1,abuvxpwy_symmetric1_2)*/
+/*FPT_DO_STEP_TRANSPOSED(fpt_do_step_t_symmetric_l,abuvxpwy_symmetric2_2,abuvxpwy_symmetric2_1)*/
+
+
+static inline void fpt_do_step_t_symmetric_u(double _Complex *a,
+ double _Complex *b, double *a11, double *a12, double *x,
+ double gam, int tau, fpt_set set)
+{
+ /** The length of the coefficient arrays. */
+ int length = 1<<(tau+1);
+ /** Twice the length of the coefficient arrays. */
+ double norm = 1.0/(length<<1);
+
+ /* Compute function values from Chebyshev-coefficients using a DCT-III. */
+ fftw_execute_r2r(set->plans_dct3[tau-1],(double*)a,(double*)a);
+ fftw_execute_r2r(set->plans_dct3[tau-1],(double*)b,(double*)b);
+
+ /* Perform matrix multiplication. */
+ abuvxpwy_symmetric1_1(norm,gam,set->z,a,a11,b,length,x);
+ abuvxpwy_symmetric1_2(norm,gam,b,a,a12,b,length,x);
+ memcpy(a,set->z,length*sizeof(double _Complex));
+
+ /* Compute Chebyshev-coefficients using a DCT-II. */
+ fftw_execute_r2r(set->plans_dct2[tau-1],(double*)a,(double*)a);
+ fftw_execute_r2r(set->plans_dct2[tau-1],(double*)b,(double*)b);
+}
+
+static inline void fpt_do_step_t_symmetric_l(double _Complex *a,
+ double _Complex *b, double *a21, double *a22,
+ double *x, double gam, int tau, fpt_set set)
+{
+ /** The length of the coefficient arrays. */
+ int length = 1<<(tau+1);
+ /** Twice the length of the coefficient arrays. */
+ double norm = 1.0/(length<<1);
+
+ /* Compute function values from Chebyshev-coefficients using a DCT-III. */
+ fftw_execute_r2r(set->plans_dct3[tau-1],(double*)a,(double*)a);
+ fftw_execute_r2r(set->plans_dct3[tau-1],(double*)b,(double*)b);
+
+ /* Perform matrix multiplication. */
+ abuvxpwy_symmetric2_2(norm,gam,set->z,a,b,a21,length,x);
+ abuvxpwy_symmetric2_1(norm,gam,b,a,b,a22,length,x);
+ memcpy(a,set->z,length*sizeof(double _Complex));
+
+ /* Compute Chebyshev-coefficients using a DCT-II. */
+ fftw_execute_r2r(set->plans_dct2[tau-1],(double*)a,(double*)a);
+ fftw_execute_r2r(set->plans_dct2[tau-1],(double*)b,(double*)b);
+}
+
+
+static void eval_clenshaw(const double *x, double *y, int size, int k, const double *alpha,
+ const double *beta, const double *gam)
+{
+ /* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector
+ * of knots x[0], ..., x[size-1] by the Clenshaw algorithm
+ */
+ int i,j;
+ double a,b,x_val_act,a_old;
+ const double *x_act;
+ double *y_act;
+ const double *alpha_act, *beta_act, *gamma_act;
+
+ /* Traverse all nodes. */
+ x_act = x;
+ y_act = y;
+ for (i = 0; i < size; i++)
+ {
+ a = 1.0;
+ b = 0.0;
+ x_val_act = *x_act;
+
+ if (k == 0)
+ {
+ *y_act = 1.0;
+ }
+ else
+ {
+ alpha_act = &(alpha[k]);
+ beta_act = &(beta[k]);
+ gamma_act = &(gam[k]);
+ for (j = k; j > 1; j--)
+ {
+ a_old = a;
+ a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));
+ b = a_old*(*gamma_act);
+ alpha_act--;
+ beta_act--;
+ gamma_act--;
+ }
+ *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);
+ }
+ x_act++;
+ y_act++;
+ }
+}
+
+static void eval_clenshaw2(const double *x, double *z, double *y, int size1, int size, int k, const double *alpha,
+ const double *beta, const double *gam)
+{
+ /* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector
+ * of knots x[0], ..., x[size-1] by the Clenshaw algorithm
+ */
+ int i,j;
+ double a,b,x_val_act,a_old;
+ const double *x_act;
+ double *y_act, *z_act;
+ const double *alpha_act, *beta_act, *gamma_act;
+
+ /* Traverse all nodes. */
+ x_act = x;
+ y_act = y;
+ z_act = z;
+ for (i = 0; i < size; i++)
+ {
+ a = 1.0;
+ b = 0.0;
+ x_val_act = *x_act;
+
+ if (k == 0)
+ {
+ *y_act = 1.0;
+ *z_act = 0.0;
+ }
+ else
+ {
+ alpha_act = &(alpha[k]);
+ beta_act = &(beta[k]);
+ gamma_act = &(gam[k]);
+ for (j = k; j > 1; j--)
+ {
+ a_old = a;
+ a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));
+ b = a_old*(*gamma_act);
+ alpha_act--;
+ beta_act--;
+ gamma_act--;
+ }
+ if (i < size1)
+ *z_act = a;
+ *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);
+ }
+
+ x_act++;
+ y_act++;
+ z_act++;
+ }
+ /*gamma_act++;
+ FILE *f = fopen("/Users/keiner/Desktop/nfsft_debug.txt","a");
+ fprintf(f,"size1: %10d, size: %10d\n",size1,size);
+ fclose(f);*/
+}
+
+static int eval_clenshaw_thresh2(const double *x, double *z, double *y, int size, int k,
+ const double *alpha, const double *beta, const double *gam, const
+ double threshold)
+{
+ /* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector
+ * of knots x[0], ..., x[size-1] by the Clenshaw algorithm
+ */
+ int i,j;
+ double a,b,x_val_act,a_old;
+ const double *x_act;
+ double *y_act, *z_act;
+ const double *alpha_act, *beta_act, *gamma_act;
+ R max = -nfft_float_property(NFFT_R_MAX);
+ const R t = LOG10(FABS(threshold));
+
+ /* Traverse all nodes. */
+ x_act = x;
+ y_act = y;
+ z_act = z;
+ for (i = 0; i < size; i++)
+ {
+ a = 1.0;
+ b = 0.0;
+ x_val_act = *x_act;
+
+ if (k == 0)
+ {
+ *y_act = 1.0;
+ *z_act = 0.0;
+ }
+ else
+ {
+ alpha_act = &(alpha[k]);
+ beta_act = &(beta[k]);
+ gamma_act = &(gam[k]);
+ for (j = k; j > 1; j--)
+ {
+ a_old = a;
+ a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));
+ b = a_old*(*gamma_act);
+ alpha_act--;
+ beta_act--;
+ gamma_act--;
+ }
+ *z_act = a;
+ *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);
+ max = FMAX(max,LOG10(FABS(*y_act)));
+ if (max > t)
+ return 1;
+ }
+ x_act++;
+ y_act++;
+ z_act++;
+ }
+ return 0;
+}
+
+static inline void eval_sum_clenshaw_fast(const int N, const int M,
+ const double _Complex *a, const double *x, double _Complex *y,
+ const double *alpha, const double *beta, const double *gam,
+ const double lambda)
+{
+ int j,k;
+ double _Complex tmp1, tmp2, tmp3;
+ double xc;
+
+ /*fprintf(stderr, "Executing eval_sum_clenshaw_fast.\n");
+ fprintf(stderr, "Before transform:\n");
+ for (j = 0; j < N; j++)
+ fprintf(stderr, "a[%4d] = %e.\n", j, a[j]);
+ for (j = 0; j <= M; j++)
+ fprintf(stderr, "x[%4d] = %e, y[%4d] = %e.\n", j, x[j], j, y[j]);*/
+
+ if (N == 0)
+ for (j = 0; j <= M; j++)
+ y[j] = a[0];
+ else
+ {
+ for (j = 0; j <= M; j++)
+ {
+#if 0
+ xc = x[j];
+ tmp2 = a[N];
+ tmp1 = a[N-1] + (alpha[N-1] * xc + beta[N-1])*tmp2;
+ for (k = N-1; k > 0; k--)
+ {
+ tmp3 = a[k-1]
+ + (alpha[k-1] * xc + beta[k-1]) * tmp1
+ + gam[k] * tmp2;
+ tmp2 = tmp1;
+ tmp1 = tmp3;
+ }
+ y[j] = lambda * tmp1;
+#else
+ xc = x[j];
+ tmp1 = a[N-1];
+ tmp2 = a[N];
+ for (k = N-1; k > 0; k--)
+ {
+ tmp3 = a[k-1] + tmp2 * gam[k];
+ tmp2 *= (alpha[k] * xc + beta[k]);
+ tmp2 += tmp1;
+ tmp1 = tmp3;
+ /*if (j == 1515)
+ {
+ fprintf(stderr, "k = %d, tmp1 = %e, tmp2 = %e.\n", k, tmp1, tmp2);
+ }*/
+ }
+ tmp2 *= (alpha[0] * xc + beta[0]);
+ //fprintf(stderr, "alpha[0] = %e, beta[0] = %e.\n", alpha[0], beta[0]);
+ y[j] = lambda * (tmp2 + tmp1);
+ //fprintf(stderr, "lambda = %e.\n", lambda);
+#endif
+ }
+ }
+ /*fprintf(stderr, "Before transform:\n");
+ for (j = 0; j < N; j++)
+ fprintf(stderr, "a[%4d] = %e.\n", j, a[j]);
+ for (j = 0; j <= M; j++)
+ fprintf(stderr, "x[%4d] = %e, y[%4d] = %e.\n", j, x[j], j, y[j]); */
+}
+
+/**
+ * Clenshaw algorithm
+ *
+ * Evaluates a sum of real-valued functions \f$P_k : \mathbb{R} \rightarrow
+ * \mathbb{R}\f$
+ * \f[
+ * f(x) = \sum_{k=0}^N a_k P_k(x) \quad (N \in \mathbb{N}_0)
+ * \f]
+ * obeying a three-term recurrence relation
+ * \f[
+ * P_{k+1}(x) = (alpha_k * x + beta_k)*P_{k}(x) + gamma_k P_{k-1}(x) \quad
+ * (alpha_k, beta_k, gamma_k \in \mathbb{R},\; k \ge 0)
+ * \f]
+ * with initial conditions \f$P_{-1}(x) := 0\f$, \f$P_0(x) := \lambda\f$
+ * for given double _Complex coefficients \f$\left(a_k\right)_{k=0}^N \in
+ * \mathbb{C}^{N+1}\f$ at given nodes \f$\left(x_j\right)_{j=0}^M \in
+ * \mathbb{R}^{M+1}\f$, \f$M \in \mathbb{N}_0\f$.
+ */
+static void eval_sum_clenshaw_transposed(int N, int M, double _Complex* a, double *x,
+ double _Complex *y, double _Complex *temp, double *alpha, double *beta, double *gam,
+ double lambda)
+{
+ int j,k;
+ double _Complex* it1 = temp;
+ double _Complex* it2 = y;
+ double _Complex aux;
+
+ /* Compute final result by multiplying with the constant lambda */
+ a[0] = 0.0;
+ for (j = 0; j <= M; j++)
+ {
+ it2[j] = lambda * y[j];
+ a[0] += it2[j];
+ }
+
+ if (N > 0)
+ {
+ /* Compute final step. */
+ a[1] = 0.0;
+ for (j = 0; j <= M; j++)
+ {
+ it1[j] = it2[j];
+ it2[j] = it2[j] * (alpha[0] * x[j] + beta[0]);
+ a[1] += it2[j];
+ }
+
+ for (k = 2; k <= N; k++)
+ {
+ a[k] = 0.0;
+ for (j = 0; j <= M; j++)
+ {
+ aux = it1[j];
+ it1[j] = it2[j];
+ it2[j] = it2[j]*(alpha[k-1] * x[j] + beta[k-1]) + gam[k-1] * aux;
+ a[k] += it2[j];
+ }
+ }
+ }
+}
+
+
+fpt_set fpt_init(const int M, const int t, const unsigned int flags)
+{
+ /** Polynomial length */
+ int plength;
+ /** Cascade level */
+ int tau;
+ /** Index m */
+ int m;
+ int k;
+#ifdef _OPENMP
+ int nthreads = nfft_get_omp_num_threads();
+#endif
+
+ /* Allocate memory for new DPT set. */
+ fpt_set_s *set = (fpt_set_s*)nfft_malloc(sizeof(fpt_set_s));
+
+ /* Save parameters in structure. */
+ set->flags = flags;
+
+ set->M = M;
+ set->t = t;
+ set->N = 1<<t;
+
+ /* Allocate memory for M transforms. */
+ set->dpt = (fpt_data*) nfft_malloc(M*sizeof(fpt_data));
+
+ /* Initialize with NULL pointer. */
+ for (m = 0; m < set->M; m++)
+ set->dpt[m].steps = 0;
+
+ /* Create arrays with Chebyshev nodes. */
+
+ /* Initialize array with Chebyshev coefficients for the polynomial x. This
+ * would be trivially an array containing a 1 as second entry with all other
+ * coefficients set to zero. In order to compensate for the multiplicative
+ * factor 2 introduced by the DCT-III, we set this coefficient to 0.5 here. */
+
+ /* Allocate memory for array of pointers to node arrays. */
+ set->xcvecs = (double**) nfft_malloc((set->t)*sizeof(double*));
+ /* For each polynomial length starting with 4, compute the Chebyshev nodes
+ * using a DCT-III. */
+ plength = 4;
+ for (tau = 1; tau < t+1; tau++)
+ {
+ /* Allocate memory for current array. */
+ set->xcvecs[tau-1] = (double*) nfft_malloc(plength*sizeof(double));
+ for (k = 0; k < plength; k++)
+ {
+ set->xcvecs[tau-1][k] = cos(((k+0.5)*PI)/plength);
+ }
+ plength = plength << 1;
+ }
+
+ /** Allocate memory for auxilliary arrays. */
+ set->work = (double _Complex*) nfft_malloc((2*set->N)*sizeof(double _Complex));
+ set->result = (double _Complex*) nfft_malloc((2*set->N)*sizeof(double _Complex));
+
+ set->lengths = (int*) nfft_malloc((set->t/*-1*/)*sizeof(int));
+ set->plans_dct2 = (fftw_plan*) nfft_malloc(sizeof(fftw_plan)*(set->t/*-1*/));
+ set->kindsr = (fftw_r2r_kind*) nfft_malloc(2*sizeof(fftw_r2r_kind));
+ set->kindsr[0] = FFTW_REDFT10;
+ set->kindsr[1] = FFTW_REDFT10;
+ for (tau = 0, plength = 4; tau < set->t/*-1*/; tau++, plength<<=1)
+ {
+ set->lengths[tau] = plength;
+#ifdef _OPENMP
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+ fftw_plan_with_nthreads(nthreads);
+#endif
+ set->plans_dct2[tau] =
+ fftw_plan_many_r2r(1, &set->lengths[tau], 2, (double*)set->work, NULL,
+ 2, 1, (double*)set->result, NULL, 2, 1,set->kindsr,
+ 0);
+#ifdef _OPENMP
+}
+#endif
+ }
+
+ /* Check if fast transform is activated. */
+ if (!(set->flags & FPT_NO_FAST_ALGORITHM))
+ {
+ /** Allocate memory for auxilliary arrays. */
+ set->vec3 = (double _Complex*) nfft_malloc(set->N*sizeof(double _Complex));
+ set->vec4 = (double _Complex*) nfft_malloc(set->N*sizeof(double _Complex));
+ set->z = (double _Complex*) nfft_malloc(set->N*sizeof(double _Complex));
+
+ /** Initialize FFTW plans. */
+ set->plans_dct3 = (fftw_plan*) nfft_malloc(sizeof(fftw_plan)*(set->t/*-1*/));
+ set->kinds = (fftw_r2r_kind*) nfft_malloc(2*sizeof(fftw_r2r_kind));
+ set->kinds[0] = FFTW_REDFT01;
+ set->kinds[1] = FFTW_REDFT01;
+ for (tau = 0, plength = 4; tau < set->t/*-1*/; tau++, plength<<=1)
+ {
+ set->lengths[tau] = plength;
+#ifdef _OPENMP
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+ fftw_plan_with_nthreads(nthreads);
+#endif
+ set->plans_dct3[tau] =
+ fftw_plan_many_r2r(1, &set->lengths[tau], 2, (double*)set->work, NULL,
+ 2, 1, (double*)set->result, NULL, 2, 1, set->kinds,
+ 0);
+#ifdef _OPENMP
+}
+#endif
+ }
+ nfft_free(set->lengths);
+ nfft_free(set->kinds);
+ nfft_free(set->kindsr);
+ set->lengths = NULL;
+ set->kinds = NULL;
+ set->kindsr = NULL;
+ }
+
+ if (!(set->flags & FPT_NO_DIRECT_ALGORITHM))
+ {
+ set->xc_slow = (double*) nfft_malloc((set->N+1)*sizeof(double));
+ set->temp = (double _Complex*) nfft_malloc((set->N+1)*sizeof(double _Complex));
+ }
+
+ /* Return the newly created DPT set. */
+ return set;
+}
+
+void fpt_precompute(fpt_set set, const int m, double *alpha, double *beta,
+ double *gam, int k_start, const double threshold)
+{
+
+ int tau; /**< Cascade level */
+ int l; /**< Level index */
+ int plength; /**< Length of polynomials for the next level in the
+ cascade */
+ int degree; /**< Degree of polynomials for the current level in the
+ cascade */
+ int firstl; /**< First index l for current cascade level */
+ int lastl; /**< Last index l for current cascade level and current */
+ int plength_stab; /**< Length of polynomials for the next level in the
+ cascade for stabilization */
+ int degree_stab; /**< Degree of polynomials for the current level in the
+ cascade for stabilization */
+ double *a11; /**< Array containing function values of the
+ (1,1)-component of U_k^n. */
+ double *a12; /**< Array containing function values of the
+ (1,2)-component of U_k^n. */
+ double *a21; /**< Array containing function values of the
+ (2,1)-component of U_k^n. */
+ double *a22; /**< Array containing function values of the
+ (2,2)-component of U_k^n. */
+ const double *calpha;
+ const double *cbeta;
+ const double *cgamma;
+ int needstab = 0; /**< Used to indicate that stabilization is neccessary. */
+ int k_start_tilde;
+ int N_tilde;
+ int clength;
+ int clength_1;
+ int clength_2;
+ int t_stab, N_stab;
+ fpt_data *data;
+
+ /* Get pointer to DPT data. */
+ data = &(set->dpt[m]);
+
+ /* Check, if already precomputed. */
+ if (data->steps != NULL)
+ return;
+
+ /* Save k_start. */
+ data->k_start = k_start;
+
+ data->gamma_m1 = gam[0];
+
+ /* Check if fast transform is activated. */
+ if (!(set->flags & FPT_NO_FAST_ALGORITHM))
+ {
+ /* Save recursion coefficients. */
+ data->alphaN = (double*) nfft_malloc((set->t-1)*sizeof(double _Complex));
+ data->betaN = (double*) nfft_malloc((set->t-1)*sizeof(double _Complex));
+ data->gammaN = (double*) nfft_malloc((set->t-1)*sizeof(double _Complex));
+
+ for (tau = 2; tau <= set->t; tau++)
+ {
+
+ data->alphaN[tau-2] = alpha[1<<tau];
+ data->betaN[tau-2] = beta[1<<tau];
+ data->gammaN[tau-2] = gam[1<<tau];
+ }
+
+ data->alpha_0 = alpha[1];
+ data->beta_0 = beta[1];
+
+ k_start_tilde = K_START_TILDE(data->k_start,X(next_power_of_2)(data->k_start)
+ /*set->N*/);
+ N_tilde = N_TILDE(set->N);
+
+ /* Allocate memory for the cascade with t = log_2(N) many levels. */
+ data->steps = (fpt_step**) nfft_malloc(sizeof(fpt_step*)*set->t);
+
+ /* For tau = 1,...t compute the matrices U_{n,tau,l}. */
+ plength = 4;
+ for (tau = 1; tau < set->t; tau++)
+ {
+ /* Compute auxilliary values. */
+ degree = plength>>1;
+ /* Compute first l. */
+ firstl = FIRST_L(k_start_tilde,plength);
+ /* Compute last l. */
+ lastl = LAST_L(N_tilde,plength);
+
+ /* Allocate memory for current level. This level will contain 2^{t-tau-1}
+ * many matrices. */
+ data->steps[tau] = (fpt_step*) nfft_malloc(sizeof(fpt_step)
+ * (lastl+1));
+
+ /* For l = 0,...2^{t-tau-1}-1 compute the matrices U_{n,tau,l}. */
+ for (l = firstl; l <= lastl; l++)
+ {
+ if (set->flags & FPT_AL_SYMMETRY && IS_SYMMETRIC(l,m,plength))
+ {
+ //fprintf(stderr,"fpt_precompute(%d): symmetric step\n",m);
+ //fflush(stderr);
+ clength = plength/2;
+ }
+ else
+ {
+ clength = plength;
+ }
+
+ /* Allocate memory for the components of U_{n,tau,l}. */
+ a11 = (double*) nfft_malloc(sizeof(double)*clength);
+ a12 = (double*) nfft_malloc(sizeof(double)*clength);
+ a21 = (double*) nfft_malloc(sizeof(double)*clength);
+ a22 = (double*) nfft_malloc(sizeof(double)*clength);
+
+ /* Evaluate the associated polynomials at the 2^{tau+1} Chebyshev
+ * nodes. */
+
+ /* Get the pointers to the three-term recurrence coeffcients. */
+ calpha = &(alpha[plength*l+1+1]);
+ cbeta = &(beta[plength*l+1+1]);
+ cgamma = &(gam[plength*l+1+1]);
+
+ if (set->flags & FPT_NO_STABILIZATION)
+ {
+ /* Evaluate P_{2^{tau}-2}^n(\cdot,2^{tau+1}l+2). */
+ calpha--;
+ cbeta--;
+ cgamma--;
+ eval_clenshaw2(set->xcvecs[tau-1], a11, a21, clength, clength, degree-1, calpha, cbeta,
+ cgamma);
+ eval_clenshaw2(set->xcvecs[tau-1], a12, a22, clength, clength, degree, calpha, cbeta,
+ cgamma);
+ needstab = 0;
+ }
+ else
+ {
+ calpha--;
+ cbeta--;
+ cgamma--;
+ /* Evaluate P_{2^{tau}-1}^n(\cdot,2^{tau+1}l+1). */
+ needstab = eval_clenshaw_thresh2(set->xcvecs[tau-1], a11, a21, clength,
+ degree-1, calpha, cbeta, cgamma, threshold);
+ if (needstab == 0)
+ {
+ /* Evaluate P_{2^{tau}}^n(\cdot,2^{tau+1}l+1). */
+ needstab = eval_clenshaw_thresh2(set->xcvecs[tau-1], a12, a22, clength,
+ degree, calpha, cbeta, cgamma, threshold);
+ }
+ }
+
+
+ /* Check if stabilization needed. */
+ if (needstab == 0)
+ {
+ data->steps[tau][l].a11 = (double**) nfft_malloc(sizeof(double*));
+ data->steps[tau][l].a12 = (double**) nfft_malloc(sizeof(double*));
+ data->steps[tau][l].a21 = (double**) nfft_malloc(sizeof(double*));
+ data->steps[tau][l].a22 = (double**) nfft_malloc(sizeof(double*));
+ data->steps[tau][l].g = (double*) nfft_malloc(sizeof(double));
+ /* No stabilization needed. */
+ data->steps[tau][l].a11[0] = a11;
+ data->steps[tau][l].a12[0] = a12;
+ data->steps[tau][l].a21[0] = a21;
+ data->steps[tau][l].a22[0] = a22;
+ data->steps[tau][l].g[0] = gam[plength*l+1+1];
+ data->steps[tau][l].stable = true;
+ }
+ else
+ {
+ /* Stabilize. */
+ degree_stab = degree*(2*l+1);
+ X(next_power_of_2_exp)((l+1)*(1<<(tau+1)),&N_stab,&t_stab);
+
+ /* Old arrays are to small. */
+ nfft_free(a11);
+ nfft_free(a12);
+ nfft_free(a21);
+ nfft_free(a22);
+
+ data->steps[tau][l].a11 = (double**) nfft_malloc(sizeof(double*));
+ data->steps[tau][l].a12 = (double**)nfft_malloc(sizeof(double*));
+ data->steps[tau][l].a21 = (double**) nfft_malloc(sizeof(double*));
+ data->steps[tau][l].a22 = (double**) nfft_malloc(sizeof(double*));
+ data->steps[tau][l].g = (double*) nfft_malloc(sizeof(double));
+
+ plength_stab = N_stab;
+
+ if (set->flags & FPT_AL_SYMMETRY)
+ {
+ if (m <= 1)
+ {
+ /* This should never be executed */
+ clength_1 = plength_stab;
+ clength_2 = plength_stab;
+ /* Allocate memory for arrays. */
+ a11 = (double*) nfft_malloc(sizeof(double)*clength_1);
+ a12 = (double*) nfft_malloc(sizeof(double)*clength_1);
+ a21 = (double*) nfft_malloc(sizeof(double)*clength_2);
+ a22 = (double*) nfft_malloc(sizeof(double)*clength_2);
+ /* Get the pointers to the three-term recurrence coeffcients. */
+ calpha = &(alpha[1]); cbeta = &(beta[1]); cgamma = &(gam[1]);
+ eval_clenshaw2(set->xcvecs[t_stab-2], a11, a21, clength_1,
+ clength_2, degree_stab-1, calpha, cbeta, cgamma);
+ eval_clenshaw2(set->xcvecs[t_stab-2], a12, a22, clength_1,
+ clength_2, degree_stab+0, calpha, cbeta, cgamma);
+ }
+ else
+ {
+ clength = plength_stab/2;
+ if (m%2 == 0)
+ {
+ a11 = (double*) nfft_malloc(sizeof(double)*clength);
+ a12 = (double*) nfft_malloc(sizeof(double)*clength);
+ a21 = 0;
+ a22 = 0;
+ calpha = &(alpha[2]); cbeta = &(beta[2]); cgamma = &(gam[2]);
+ eval_clenshaw(set->xcvecs[t_stab-2], a11, clength,
+ degree_stab-2, calpha, cbeta, cgamma);
+ eval_clenshaw(set->xcvecs[t_stab-2], a12, clength,
+ degree_stab-1, calpha, cbeta, cgamma);
+ }
+ else
+ {
+ a11 = 0;
+ a12 = 0;
+ a21 = (double*) nfft_malloc(sizeof(double)*clength);
+ a22 = (double*) nfft_malloc(sizeof(double)*clength);
+ calpha = &(alpha[1]); cbeta = &(beta[1]); cgamma = &(gam[1]);
+ eval_clenshaw(set->xcvecs[t_stab-2], a21, clength,
+ degree_stab-1,calpha, cbeta, cgamma);
+ eval_clenshaw(set->xcvecs[t_stab-2], a22, clength,
+ degree_stab+0, calpha, cbeta, cgamma);
+ }
+ }
+ }
+ else
+ {
+ clength_1 = plength_stab;
+ clength_2 = plength_stab;
+ a11 = (double*) nfft_malloc(sizeof(double)*clength_1);
+ a12 = (double*) nfft_malloc(sizeof(double)*clength_1);
+ a21 = (double*) nfft_malloc(sizeof(double)*clength_2);
+ a22 = (double*) nfft_malloc(sizeof(double)*clength_2);
+ calpha = &(alpha[2]);
+ cbeta = &(beta[2]);
+ cgamma = &(gam[2]);
+ calpha--;
+ cbeta--;
+ cgamma--;
+ eval_clenshaw2(set->xcvecs[t_stab-2], a11, a21, clength_1, clength_2, degree_stab-1,
+ calpha, cbeta, cgamma);
+ eval_clenshaw2(set->xcvecs[t_stab-2], a12, a22, clength_1, clength_2, degree_stab+0,
+ calpha, cbeta, cgamma);
+
+ }
+ data->steps[tau][l].a11[0] = a11;
+ data->steps[tau][l].a12[0] = a12;
+ data->steps[tau][l].a21[0] = a21;
+ data->steps[tau][l].a22[0] = a22;
+
+ data->steps[tau][l].g[0] = gam[1+1];
+ data->steps[tau][l].stable = false;
+ data->steps[tau][l].ts = t_stab;
+ data->steps[tau][l].Ns = N_stab;
+ }
+ }
+ /** Increase polynomial degree to next power of two. */
+ plength = plength << 1;
+ }
+ }
+
+ if (!(set->flags & FPT_NO_DIRECT_ALGORITHM))
+ {
+ /* Check, if recurrence coefficients must be copied. */
+ if (set->flags & FPT_PERSISTENT_DATA)
+ {
+ data->_alpha = (double*) alpha;
+ data->_beta = (double*) beta;
+ data->_gamma = (double*) gam;
+ }
+ else
+ {
+ data->_alpha = (double*) nfft_malloc((set->N+1)*sizeof(double));
+ data->_beta = (double*) nfft_malloc((set->N+1)*sizeof(double));
+ data->_gamma = (double*) nfft_malloc((set->N+1)*sizeof(double));
+ memcpy(data->_alpha,alpha,(set->N+1)*sizeof(double));
+ memcpy(data->_beta,beta,(set->N+1)*sizeof(double));
+ memcpy(data->_gamma,gam,(set->N+1)*sizeof(double));
+ }
+ }
+}
+
+void fpt_trafo_direct(fpt_set set, const int m, const double _Complex *x, double _Complex *y,
+ const int k_end, const unsigned int flags)
+{
+ int j;
+ fpt_data *data = &(set->dpt[m]);
+ int Nk;
+ int tk;
+ double norm;
+
+ //fprintf(stderr, "Executing dpt.\n");
+
+ X(next_power_of_2_exp)(k_end+1,&Nk,&tk);
+ norm = 2.0/(Nk<<1);
+
+ //fprintf(stderr, "Norm = %e.\n", norm);
+
+ if (set->flags & FPT_NO_DIRECT_ALGORITHM)
+ {
+ return;
+ }
+
+ if (flags & FPT_FUNCTION_VALUES)
+ {
+ /* Fill array with Chebyshev nodes. */
+ for (j = 0; j <= k_end; j++)
+ {
+ set->xc_slow[j] = cos((PI*(j+0.5))/(k_end+1));
+ //fprintf(stderr, "x[%4d] = %e.\n", j, set->xc_slow[j]);
+ }
+
+ memset(set->result,0U,data->k_start*sizeof(double _Complex));
+ memcpy(&set->result[data->k_start],x,(k_end-data->k_start+1)*sizeof(double _Complex));
+
+ /*eval_sum_clenshaw(k_end, k_end, set->result, set->xc_slow,
+ y, set->work, &data->alpha[1], &data->beta[1], &data->gamma[1],
+ data->gamma_m1);*/
+ eval_sum_clenshaw_fast(k_end, k_end, set->result, set->xc_slow,
+ y, &data->_alpha[1], &data->_beta[1], &data->_gamma[1], data->gamma_m1);
+ }
+ else
+ {
+ memset(set->temp,0U,data->k_start*sizeof(double _Complex));
+ memcpy(&set->temp[data->k_start],x,(k_end-data->k_start+1)*sizeof(double _Complex));
+
+ eval_sum_clenshaw_fast(k_end, Nk-1, set->temp, set->xcvecs[tk-2],
+ set->result, &data->_alpha[1], &data->_beta[1], &data->_gamma[1],
+ data->gamma_m1);
+
+ fftw_execute_r2r(set->plans_dct2[tk-2],(double*)set->result,
+ (double*)set->result);
+
+ set->result[0] *= 0.5;
+ for (j = 0; j < Nk; j++)
+ {
+ set->result[j] *= norm;
+ }
+
+ memcpy(y,set->result,(k_end+1)*sizeof(double _Complex));
+ }
+}
+
+void fpt_trafo(fpt_set set, const int m, const double _Complex *x, double _Complex *y,
+ const int k_end, const unsigned int flags)
+{
+ /* Get transformation data. */
+ fpt_data *data = &(set->dpt[m]);
+ /** */
+ int Nk;
+ /** */
+ int tk;
+ /** */
+ int k_start_tilde;
+ /** */
+ int k_end_tilde;
+
+ /** Level index \f$tau\f$ */
+ int tau;
+ /** Index of first block at current level */
+ int firstl;
+ /** Index of last block at current level */
+ int lastl;
+ /** Block index \f$l\f$ */
+ int l;
+ /** Length of polynomial coefficient arrays at next level */
+ int plength;
+ /** Polynomial array length for stabilization */
+ int plength_stab;
+ int t_stab;
+ /** Current matrix \f$U_{n,tau,l}\f$ */
+ fpt_step *step;
+ /** */
+ fftw_plan plan = 0;
+ int length = k_end+1;
+ fftw_r2r_kind kinds[2] = {FFTW_REDFT01,FFTW_REDFT01};
+
+ /** Loop counter */
+ int k;
+
+ double _Complex *work_ptr;
+ const double _Complex *x_ptr;
+
+ /* Check, if slow transformation should be used due to small bandwidth. */
+ if (k_end < FPT_BREAK_EVEN)
+ {
+ /* Use NDSFT. */
+ fpt_trafo_direct(set, m, x, y, k_end, flags);
+ return;
+ }
+
+ X(next_power_of_2_exp)(k_end,&Nk,&tk);
+ k_start_tilde = K_START_TILDE(data->k_start,Nk);
+ k_end_tilde = K_END_TILDE(k_end,Nk);
+
+ /* Check if fast transform is activated. */
+ if (set->flags & FPT_NO_FAST_ALGORITHM)
+ return;
+
+ if (flags & FPT_FUNCTION_VALUES)
+ {
+#ifdef _OPENMP
+ int nthreads = nfft_get_omp_num_threads();
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+ fftw_plan_with_nthreads(nthreads);
+#endif
+ plan = fftw_plan_many_r2r(1, &length, 2, (double*)set->work, NULL, 2, 1,
+ (double*)set->work, NULL, 2, 1, kinds, 0U);
+#ifdef _OPENMP
+}
+#endif
+ }
+
+ /* Initialize working arrays. */
+ memset(set->result,0U,2*Nk*sizeof(double _Complex));
+
+ /* The first step. */
+
+ /* Set the first 2*data->k_start coefficients to zero. */
+ memset(set->work,0U,2*data->k_start*sizeof(double _Complex));
+
+ work_ptr = &set->work[2*data->k_start];
+ x_ptr = x;
+
+ for (k = 0; k <= k_end_tilde-data->k_start; k++)
+ {
+ *work_ptr++ = *x_ptr++;
+ *work_ptr++ = K(0.0);
+ }
+
+ /* Set the last 2*(set->N-1-k_end_tilde) coefficients to zero. */
+ memset(&set->work[2*(k_end_tilde+1)],0U,2*(Nk-1-k_end_tilde)*sizeof(double _Complex));
+
+ /* If k_end == Nk, use three-term recurrence to map last coefficient x_{Nk} to
+ * x_{Nk-1} and x_{Nk-2}. */
+ if (k_end == Nk)
+ {
+ set->work[2*(Nk-2)] += data->gammaN[tk-2]*x[Nk-data->k_start];
+ set->work[2*(Nk-1)] += data->betaN[tk-2]*x[Nk-data->k_start];
+ set->work[2*(Nk-1)+1] = data->alphaN[tk-2]*x[Nk-data->k_start];
+ }
+
+ /* Compute the remaining steps. */
+ plength = 4;
+ for (tau = 1; tau < tk; tau++)
+ {
+ /* Compute first l. */
+ firstl = FIRST_L(k_start_tilde,plength);
+ /* Compute last l. */
+ lastl = LAST_L(k_end_tilde,plength);
+
+ /* Compute the multiplication steps. */
+ for (l = firstl; l <= lastl; l++)
+ {
+ /* Copy vectors to multiply into working arrays zero-padded to twice the length. */
+ memcpy(set->vec3,&(set->work[(plength/2)*(4*l+2)]),(plength/2)*sizeof(double _Complex));
+ memcpy(set->vec4,&(set->work[(plength/2)*(4*l+3)]),(plength/2)*sizeof(double _Complex));
+ memset(&set->vec3[plength/2],0U,(plength/2)*sizeof(double _Complex));
+ memset(&set->vec4[plength/2],0U,(plength/2)*sizeof(double _Complex));
+
+ /* Copy coefficients into first half. */
+ memcpy(&(set->work[(plength/2)*(4*l+2)]),&(set->work[(plength/2)*(4*l+1)]),(plength/2)*sizeof(double _Complex));
+ memset(&(set->work[(plength/2)*(4*l+1)]),0U,(plength/2)*sizeof(double _Complex));
+ memset(&(set->work[(plength/2)*(4*l+3)]),0U,(plength/2)*sizeof(double _Complex));
+
+ /* Get matrix U_{n,tau,l} */
+ step = &(data->steps[tau][l]);
+
+ /* Check if step is stable. */
+ if (step->stable)
+ {
+ /* Check, if we should do a symmetrizised step. */
+ if (set->flags & FPT_AL_SYMMETRY && IS_SYMMETRIC(l,m,plength))
+ {
+ /*for (k = 0; k < plength; k++)
+ {
+ fprintf(stderr,"fpt_trafo: a11 = %le, a12 = %le, a21 = %le, a22 = %le\n",
+ step->a11[0][k],step->a12[0][k],step->a21[0][k],step->a22[0][k]);
+ }*/
+ /* Multiply third and fourth polynomial with matrix U. */
+ //fprintf(stderr,"\nhallo\n");
+ fpt_do_step_symmetric(set->vec3, set->vec4, step->a11[0],
+ step->a12[0], step->a21[0], step->a22[0], step->g[0], tau, set);
+ }
+ else
+ {
+ /* Multiply third and fourth polynomial with matrix U. */
+ fpt_do_step(set->vec3, set->vec4, step->a11[0], step->a12[0],
+ step->a21[0], step->a22[0], step->g[0], tau, set);
+ }
+
+ if (step->g[0] != 0.0)
+ {
+ for (k = 0; k < plength; k++)
+ {
+ set->work[plength*2*l+k] += set->vec3[k];
+ }
+ }
+ for (k = 0; k < plength; k++)
+ {
+ set->work[plength*(2*l+1)+k] += set->vec4[k];
+ }
+ }
+ else
+ {
+ /* Stabilize. */
+
+ /* The lengh of the polynomials */
+ plength_stab = step->Ns;
+ t_stab = step->ts;
+
+ /*---------*/
+ /*fprintf(stderr,"\nfpt_trafo: stabilizing at tau = %d, l = %d.\n",tau,l);
+ fprintf(stderr,"\nfpt_trafo: plength_stab = %d.\n",plength_stab);
+ fprintf(stderr,"\nfpt_trafo: tk = %d.\n",tk);
+ fprintf(stderr,"\nfpt_trafo: index = %d.\n",tk-tau-1);*/
+ /*---------*/
+
+ /* Set rest of vectors explicitely to zero */
+ /*fprintf(stderr,"fpt_trafo: stabilizing: plength = %d, plength_stab = %d\n",
+ plength, plength_stab);*/
+ memset(&set->vec3[plength/2],0U,(plength_stab-plength/2)*sizeof(double _Complex));
+ memset(&set->vec4[plength/2],0U,(plength_stab-plength/2)*sizeof(double _Complex));
+
+ /* Multiply third and fourth polynomial with matrix U. */
+ /* Check for symmetry. */
+ if (set->flags & FPT_AL_SYMMETRY)
+ {
+ if (m <= 1)
+ {
+ fpt_do_step_symmetric(set->vec3, set->vec4, step->a11[0], step->a12[0],
+ step->a21[0], step->a22[0], step->g[0], t_stab-1, set);
+ }
+ else if (m%2 == 0)
+ {
+ /*fpt_do_step_symmetric_u(set->vec3, set->vec4, step->a11[0], step->a12[0],
+ step->a21[0], step->a22[0], step->gamma[0], t_stab-1, set);*/
+ fpt_do_step_symmetric_u(set->vec3, set->vec4, step->a11[0], step->a12[0],
+ step->a21[0], step->a22[0],
+ set->xcvecs[t_stab-2], step->g[0], t_stab-1, set);
+ /*fpt_do_step(set->vec3, set->vec4, step->a11[0], step->a12[0],
+ step->a21[0], step->a22[0], step->gamma[0], t_stab-1, set);*/
+ }
+ else
+ {
+ /*fpt_do_step_symmetric_l(set->vec3, set->vec4, step->a11[0], step->a12[0],
+ step->a21[0], step->a22[0], step->gamma[0], t_stab-1, set);*/
+ fpt_do_step_symmetric_l(set->vec3, set->vec4,
+ step->a11[0], step->a12[0],
+ step->a21[0],
+ step->a22[0], set->xcvecs[t_stab-2], step->g[0], t_stab-1, set);
+ /*fpt_do_step(set->vec3, set->vec4, step->a11[0], step->a12[0],
+ step->a21[0], step->a22[0], step->gamma[0], t_stab-1, set);*/
+ }
+ }
+ else
+ {
+ fpt_do_step(set->vec3, set->vec4, step->a11[0], step->a12[0],
+ step->a21[0], step->a22[0], step->g[0], t_stab-1, set);
+ }
+
+ if (step->g[0] != 0.0)
+ {
+ for (k = 0; k < plength_stab; k++)
+ {
+ set->result[k] += set->vec3[k];
+ }
+ }
+
+ for (k = 0; k < plength_stab; k++)
+ {
+ set->result[Nk+k] += set->vec4[k];
+ }
+ }
+ }
+ /* Double length of polynomials. */
+ plength = plength<<1;
+
+ /*--------*/
+ /*for (k = 0; k < 2*Nk; k++)
+ {
+ fprintf(stderr,"work[%2d] = %le + I*%le\tresult[%2d] = %le + I*%le\n",
+ k,creal(set->work[k]),cimag(set->work[k]),k,creal(set->result[k]),
+ cimag(set->result[k]));
+ }*/
+ /*--------*/
+ }
+
+ /* Add the resulting cascade coeffcients to the coeffcients accumulated from
+ * the stabilization steps. */
+ for (k = 0; k < 2*Nk; k++)
+ {
+ set->result[k] += set->work[k];
+ }
+
+ /* The last step. Compute the Chebyshev coeffcients c_k^n from the
+ * polynomials in front of P_0^n and P_1^n. */
+ y[0] = data->gamma_m1*(set->result[0] + data->beta_0*set->result[Nk] +
+ data->alpha_0*set->result[Nk+1]*0.5);
+ y[1] = data->gamma_m1*(set->result[1] + data->beta_0*set->result[Nk+1]+
+ data->alpha_0*(set->result[Nk]+set->result[Nk+2]*0.5));
+ y[k_end-1] = data->gamma_m1*(set->result[k_end-1] +
+ data->beta_0*set->result[Nk+k_end-1] +
+ data->alpha_0*set->result[Nk+k_end-2]*0.5);
+ y[k_end] = data->gamma_m1*(0.5*data->alpha_0*set->result[Nk+k_end-1]);
+ for (k = 2; k <= k_end-2; k++)
+ {
+ y[k] = data->gamma_m1*(set->result[k] + data->beta_0*set->result[Nk+k] +
+ data->alpha_0*0.5*(set->result[Nk+k-1]+set->result[Nk+k+1]));
+ }
+
+ if (flags & FPT_FUNCTION_VALUES)
+ {
+ y[0] *= 2.0;
+ fftw_execute_r2r(plan,(double*)y,(double*)y);
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+ fftw_destroy_plan(plan);
+ for (k = 0; k <= k_end; k++)
+ {
+ y[k] *= 0.5;
+ }
+ }
+}
+
+void fpt_transposed_direct(fpt_set set, const int m, double _Complex *x,
+ double _Complex *y, const int k_end, const unsigned int flags)
+{
+ int j;
+ fpt_data *data = &(set->dpt[m]);
+ int Nk;
+ int tk;
+ double norm;
+
+ X(next_power_of_2_exp)(k_end+1,&Nk,&tk);
+ norm = 2.0/(Nk<<1);
+
+ if (set->flags & FPT_NO_DIRECT_ALGORITHM)
+ {
+ return;
+ }
+
+ if (flags & FPT_FUNCTION_VALUES)
+ {
+ for (j = 0; j <= k_end; j++)
+ {
+ set->xc_slow[j] = cos((PI*(j+0.5))/(k_end+1));
+ }
+
+ eval_sum_clenshaw_transposed(k_end, k_end, set->result, set->xc_slow,
+ y, set->work, &data->_alpha[1], &data->_beta[1], &data->_gamma[1],
+ data->gamma_m1);
+
+ memcpy(x,&set->result[data->k_start],(k_end-data->k_start+1)*
+ sizeof(double _Complex));
+ }
+ else
+ {
+ memcpy(set->result,y,(k_end+1)*sizeof(double _Complex));
+ memset(&set->result[k_end+1],0U,(Nk-k_end-1)*sizeof(double _Complex));
+
+ for (j = 0; j < Nk; j++)
+ {
+ set->result[j] *= norm;
+ }
+
+ fftw_execute_r2r(set->plans_dct3[tk-2],(double*)set->result,
+ (double*)set->result);
+
+ eval_sum_clenshaw_transposed(k_end, Nk-1, set->temp, set->xcvecs[tk-2],
+ set->result, set->work, &data->_alpha[1], &data->_beta[1], &data->_gamma[1],
+ data->gamma_m1);
+
+ memcpy(x,&set->temp[data->k_start],(k_end-data->k_start+1)*sizeof(double _Complex));
+ }
+}
+
+void fpt_transposed(fpt_set set, const int m, double _Complex *x,
+ double _Complex *y, const int k_end, const unsigned int flags)
+{
+ /* Get transformation data. */
+ fpt_data *data = &(set->dpt[m]);
+ /** */
+ int Nk;
+ /** */
+ int tk;
+ /** */
+ int k_start_tilde;
+ /** */
+ int k_end_tilde;
+
+ /** Level index \f$tau\f$ */
+ int tau;
+ /** Index of first block at current level */
+ int firstl;
+ /** Index of last block at current level */
+ int lastl;
+ /** Block index \f$l\f$ */
+ int l;
+ /** Length of polynomial coefficient arrays at next level */
+ int plength;
+ /** Polynomial array length for stabilization */
+ int plength_stab;
+ /** Current matrix \f$U_{n,tau,l}\f$ */
+ fpt_step *step;
+ /** */
+ fftw_plan plan;
+ int length = k_end+1;
+ fftw_r2r_kind kinds[2] = {FFTW_REDFT10,FFTW_REDFT10};
+ /** Loop counter */
+ int k;
+ int t_stab;
+
+ /* Check, if slow transformation should be used due to small bandwidth. */
+ if (k_end < FPT_BREAK_EVEN)
+ {
+ /* Use NDSFT. */
+ fpt_transposed_direct(set, m, x, y, k_end, flags);
+ return;
+ }
+
+ X(next_power_of_2_exp)(k_end,&Nk,&tk);
+ k_start_tilde = K_START_TILDE(data->k_start,Nk);
+ k_end_tilde = K_END_TILDE(k_end,Nk);
+
+ /* Check if fast transform is activated. */
+ if (set->flags & FPT_NO_FAST_ALGORITHM)
+ {
+ return;
+ }
+
+ if (flags & FPT_FUNCTION_VALUES)
+ {
+#ifdef _OPENMP
+ int nthreads = nfft_get_omp_num_threads();
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+ fftw_plan_with_nthreads(nthreads);
+#endif
+ plan = fftw_plan_many_r2r(1, &length, 2, (double*)set->work, NULL, 2, 1,
+ (double*)set->work, NULL, 2, 1, kinds, 0U);
+#ifdef _OPENMP
+}
+#endif
+ fftw_execute_r2r(plan,(double*)y,(double*)set->result);
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+ fftw_destroy_plan(plan);
+ for (k = 0; k <= k_end; k++)
+ {
+ set->result[k] *= 0.5;
+ }
+ }
+ else
+ {
+ memcpy(set->result,y,(k_end+1)*sizeof(double _Complex));
+ }
+
+ /* Initialize working arrays. */
+ memset(set->work,0U,2*Nk*sizeof(double _Complex));
+
+ /* The last step is now the first step. */
+ for (k = 0; k <= k_end; k++)
+ {
+ set->work[k] = data->gamma_m1*set->result[k];
+ }
+ //memset(&set->work[k_end+1],0U,(Nk+1-k_end)*sizeof(double _Complex));
+
+ set->work[Nk] = data->gamma_m1*(data->beta_0*set->result[0] +
+ data->alpha_0*set->result[1]);
+ for (k = 1; k < k_end; k++)
+ {
+ set->work[Nk+k] = data->gamma_m1*(data->beta_0*set->result[k] +
+ data->alpha_0*0.5*(set->result[k-1]+set->result[k+1]));
+ }
+ if (k_end<Nk)
+ {
+ memset(&set->work[k_end],0U,(Nk-k_end)*sizeof(double _Complex));
+ }
+
+ /** Save copy of inpute data for stabilization steps. */
+ memcpy(set->result,set->work,2*Nk*sizeof(double _Complex));
+
+ /* Compute the remaining steps. */
+ plength = Nk;
+ for (tau = tk-1; tau >= 1; tau--)
+ {
+ /* Compute first l. */
+ firstl = FIRST_L(k_start_tilde,plength);
+ /* Compute last l. */
+ lastl = LAST_L(k_end_tilde,plength);
+
+ /* Compute the multiplication steps. */
+ for (l = firstl; l <= lastl; l++)
+ {
+ /* Initialize second half of coefficient arrays with zeros. */
+ memcpy(set->vec3,&(set->work[(plength/2)*(4*l+0)]),plength*sizeof(double _Complex));
+ memcpy(set->vec4,&(set->work[(plength/2)*(4*l+2)]),plength*sizeof(double _Complex));
+
+ memcpy(&set->work[(plength/2)*(4*l+1)],&(set->work[(plength/2)*(4*l+2)]),
+ (plength/2)*sizeof(double _Complex));
+
+ /* Get matrix U_{n,tau,l} */
+ step = &(data->steps[tau][l]);
+
+ /* Check if step is stable. */
+ if (step->stable)
+ {
+ if (set->flags & FPT_AL_SYMMETRY && IS_SYMMETRIC(l,m,plength))
+ {
+ /* Multiply third and fourth polynomial with matrix U. */
+ fpt_do_step_t_symmetric(set->vec3, set->vec4, step->a11[0], step->a12[0],
+ step->a21[0], step->a22[0], step->g[0], tau, set);
+ }
+ else
+ {
+ /* Multiply third and fourth polynomial with matrix U. */
+ fpt_do_step_t(set->vec3, set->vec4, step->a11[0], step->a12[0],
+ step->a21[0], step->a22[0], step->g[0], tau, set);
+ }
+ memcpy(&(set->vec3[plength/2]), set->vec4,(plength/2)*sizeof(double _Complex));
+
+ for (k = 0; k < plength; k++)
+ {
+ set->work[plength*(4*l+2)/2+k] = set->vec3[k];
+ }
+ }
+ else
+ {
+ /* Stabilize. */
+ plength_stab = step->Ns;
+ t_stab = step->ts;
+
+ memcpy(set->vec3,set->result,plength_stab*sizeof(double _Complex));
+ memcpy(set->vec4,&(set->result[Nk]),plength_stab*sizeof(double _Complex));
+
+ /* Multiply third and fourth polynomial with matrix U. */
+ if (set->flags & FPT_AL_SYMMETRY)
+ {
+ if (m <= 1)
+ {
+ fpt_do_step_t_symmetric(set->vec3, set->vec4, step->a11[0], step->a12[0],
+ step->a21[0], step->a22[0], step->g[0], t_stab-1, set);
+ }
+ else if (m%2 == 0)
+ {
+ fpt_do_step_t_symmetric_u(set->vec3, set->vec4, step->a11[0], step->a12[0],
+ set->xcvecs[t_stab-2], step->g[0], t_stab-1, set);
+ }
+ else
+ {
+ fpt_do_step_t_symmetric_l(set->vec3, set->vec4,
+ step->a21[0], step->a22[0], set->xcvecs[t_stab-2], step->g[0], t_stab-1, set);
+ }
+ }
+ else
+ {
+ fpt_do_step_t(set->vec3, set->vec4, step->a11[0], step->a12[0],
+ step->a21[0], step->a22[0], step->g[0], t_stab-1, set);
+ }
+
+ memcpy(&(set->vec3[plength/2]),set->vec4,(plength/2)*sizeof(double _Complex));
+
+ for (k = 0; k < plength; k++)
+ {
+ set->work[(plength/2)*(4*l+2)+k] = set->vec3[k];
+ }
+ }
+ }
+ /* Half the length of polynomial arrays. */
+ plength = plength>>1;
+ }
+
+ /* First step */
+ for (k = 0; k <= k_end_tilde-data->k_start; k++)
+ {
+ x[k] = set->work[2*(data->k_start+k)];
+ }
+ if (k_end == Nk)
+ {
+ x[Nk-data->k_start] =
+ data->gammaN[tk-2]*set->work[2*(Nk-2)]
+ + data->betaN[tk-2] *set->work[2*(Nk-1)]
+ + data->alphaN[tk-2]*set->work[2*(Nk-1)+1];
+ }
+}
+
+void fpt_finalize(fpt_set set)
+{
+ int tau;
+ int l;
+ int m;
+ fpt_data *data;
+ int k_start_tilde;
+ int N_tilde;
+ int firstl, lastl;
+ int plength;
+ const int M = set->M;
+
+ /* TODO Clean up DPT transform data structures. */
+ for (m = 0; m < M; m++)
+ {
+ /* Check if precomputed. */
+ data = &set->dpt[m];
+ if (data->steps != (fpt_step**)NULL)
+ {
+ nfft_free(data->alphaN);
+ nfft_free(data->betaN);
+ nfft_free(data->gammaN);
+ data->alphaN = NULL;
+ data->betaN = NULL;
+ data->gammaN = NULL;
+
+ /* Free precomputed data. */
+ k_start_tilde = K_START_TILDE(data->k_start,X(next_power_of_2)(data->k_start)
+ /*set->N*/);
+ N_tilde = N_TILDE(set->N);
+ plength = 4;
+ for (tau = 1; tau < set->t; tau++)
+ {
+ /* Compute first l. */
+ firstl = FIRST_L(k_start_tilde,plength);
+ /* Compute last l. */
+ lastl = LAST_L(N_tilde,plength);
+
+ /* For l = 0,...2^{t-tau-1}-1 compute the matrices U_{n,tau,l}. */
+ for (l = firstl; l <= lastl; l++)
+ {
+ /* Free components. */
+ nfft_free(data->steps[tau][l].a11[0]);
+ nfft_free(data->steps[tau][l].a12[0]);
+ nfft_free(data->steps[tau][l].a21[0]);
+ nfft_free(data->steps[tau][l].a22[0]);
+ data->steps[tau][l].a11[0] = NULL;
+ data->steps[tau][l].a12[0] = NULL;
+ data->steps[tau][l].a21[0] = NULL;
+ data->steps[tau][l].a22[0] = NULL;
+ /* Free components. */
+ nfft_free(data->steps[tau][l].a11);
+ nfft_free(data->steps[tau][l].a12);
+ nfft_free(data->steps[tau][l].a21);
+ nfft_free(data->steps[tau][l].a22);
+ nfft_free(data->steps[tau][l].g);
+ data->steps[tau][l].a11 = NULL;
+ data->steps[tau][l].a12 = NULL;
+ data->steps[tau][l].a21 = NULL;
+ data->steps[tau][l].a22 = NULL;
+ data->steps[tau][l].g = NULL;
+ }
+ /* Free pointers for current level. */
+ nfft_free(data->steps[tau]);
+ data->steps[tau] = NULL;
+ /* Double length of polynomials. */
+ plength = plength<<1;
+ }
+ /* Free steps. */
+ nfft_free(data->steps);
+ data->steps = NULL;
+ }
+
+ if (!(set->flags & FPT_NO_DIRECT_ALGORITHM))
+ {
+ /* Check, if recurrence coefficients must be copied. */
+ //fprintf(stderr,"\nfpt_finalize: %d\n",set->flags & FPT_PERSISTENT_DATA);
+ if (!(set->flags & FPT_PERSISTENT_DATA))
+ {
+ nfft_free(data->_alpha);
+ nfft_free(data->_beta);
+ nfft_free(data->_gamma);
+ }
+ data->_alpha = NULL;
+ data->_beta = NULL;
+ data->_gamma = NULL;
+ }
+ }
+
+ /* Delete array of DPT transform data. */
+ nfft_free(set->dpt);
+ set->dpt = NULL;
+
+ for (tau = 1; tau < set->t+1; tau++)
+ {
+ nfft_free(set->xcvecs[tau-1]);
+ set->xcvecs[tau-1] = NULL;
+ }
+ nfft_free(set->xcvecs);
+ set->xcvecs = NULL;
+
+ /* Free auxilliary arrays. */
+ nfft_free(set->work);
+ nfft_free(set->result);
+
+ /* Check if fast transform is activated. */
+ if (!(set->flags & FPT_NO_FAST_ALGORITHM))
+ {
+ /* Free auxilliary arrays. */
+ nfft_free(set->vec3);
+ nfft_free(set->vec4);
+ nfft_free(set->z);
+ set->work = NULL;
+ set->result = NULL;
+ set->vec3 = NULL;
+ set->vec4 = NULL;
+ set->z = NULL;
+
+ /* Free FFTW plans. */
+ for(tau = 0; tau < set->t/*-1*/; tau++)
+ {
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+ fftw_destroy_plan(set->plans_dct3[tau]);
+ fftw_destroy_plan(set->plans_dct2[tau]);
+}
+ set->plans_dct3[tau] = NULL;
+ set->plans_dct2[tau] = NULL;
+ }
+
+ nfft_free(set->plans_dct3);
+ nfft_free(set->plans_dct2);
+ set->plans_dct3 = NULL;
+ set->plans_dct2 = NULL;
+ }
+
+ if (!(set->flags & FPT_NO_DIRECT_ALGORITHM))
+ {
+ /* Delete arrays of Chebyshev nodes. */
+ nfft_free(set->xc_slow);
+ set->xc_slow = NULL;
+ nfft_free(set->temp);
+ set->temp = NULL;
+ }
+
+ /* Free DPT set structure. */
+ nfft_free(set);
+}
diff --git a/kernel/fpt/fpt.h b/kernel/fpt/fpt.h
new file mode 100644
index 0000000..fdb5d04
--- /dev/null
+++ b/kernel/fpt/fpt.h
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: fpt.h 3775 2012-06-02 16:39:48Z keiner $ */
+
+#ifndef _FPT_H_
+#define _FPT_H_
+
+/**
+ * Holds data for a single multiplication step in the cascade summation.
+ */
+typedef struct fpt_step_
+{
+ bool stable; /**< Indicates if the values
+ contained represent a fast or
+ a slow stabilized step. */
+ int Ns; /**< TODO Add comment here. */
+ int ts; /**< TODO Add comment here. */
+ double **a11,**a12,**a21,**a22; /**< The matrix components */
+ double *g; /**< */
+} fpt_step;
+
+/**
+ * Holds data for a single cascade summation.
+ */
+typedef struct fpt_data_
+{
+ fpt_step **steps; /**< The cascade summation steps */
+ int k_start; /**< TODO Add comment here. */
+ double *alphaN; /**< TODO Add comment here. */
+ double *betaN; /**< TODO Add comment here. */
+ double *gammaN; /**< TODO Add comment here. */
+ double alpha_0; /**< TODO Add comment here. */
+ double beta_0; /**< TODO Add comment here. */
+ double gamma_m1; /**< TODO Add comment here. */
+ /* Data for direct transform. */ /**< TODO Add comment here. */
+ double *alpha; /**< TODO Add comment here. */
+ double *beta; /**< TODO Add comment here. */
+ double *gamma; /**< TODO Add comment here. */
+} fpt_data;
+
+/**
+ * Holds data for a set of cascade summations.
+ */
+typedef struct fpt_set_s_
+{
+ unsigned int flags; /**< The flags */
+ int M; /**< The number of DPT transforms */
+ int N; /**< The transform length. Must be
+ a power of two. */
+ int t; /**< The exponent of N */
+ fpt_data *dpt; /**< The DPT transform data */
+ double **xcvecs; /**< Array of pointers to arrays
+ containing the Chebyshev
+ nodes */
+ double *xc; /**< Array for Chebychev-nodes. */
+ double _Complex *temp; /**< */
+ double _Complex *work; /**< */
+ double _Complex *result; /**< */
+ double _Complex *vec3;
+ double _Complex *vec4;
+ double _Complex *z;
+ fftw_plan *plans_dct3; /**< Transform plans for the fftw
+ library */
+ fftw_plan *plans_dct2; /**< Transform plans for the fftw
+ library */
+ fftw_r2r_kind *kinds; /**< Transform kinds for fftw
+ library */
+ fftw_r2r_kind *kindsr; /**< Transform kinds for fftw
+ library */
+
+ int *lengths; /**< Transform lengths for fftw library */
+
+ /* Data for slow transforms. */
+ double *xc_slow;
+} fpt_set_s;
+
+#endif /*_FPT_H_*/
diff --git a/kernel/mri/Makefile.am b/kernel/mri/Makefile.am
new file mode 100644
index 0000000..e747e6c
--- /dev/null
+++ b/kernel/mri/Makefile.am
@@ -0,0 +1,5 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_LTLIBRARIES = libmri.la
+
+libmri_la_SOURCES = mri.c
diff --git a/kernel/mri/Makefile.in b/kernel/mri/Makefile.in
new file mode 100644
index 0000000..9b3b6d8
--- /dev/null
+++ b/kernel/mri/Makefile.in
@@ -0,0 +1,553 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/mri
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmri_la_LIBADD =
+am_libmri_la_OBJECTS = mri.lo
+libmri_la_OBJECTS = $(am_libmri_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libmri_la_SOURCES)
+DIST_SOURCES = $(libmri_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+noinst_LTLIBRARIES = libmri.la
+libmri_la_SOURCES = mri.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/mri/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu kernel/mri/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libmri.la: $(libmri_la_OBJECTS) $(libmri_la_DEPENDENCIES) $(EXTRA_libmri_la_DEPENDENCIES)
+ $(LINK) $(libmri_la_OBJECTS) $(libmri_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mri.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/mri/mri.c b/kernel/mri/mri.c
new file mode 100644
index 0000000..2cdbab3
--- /dev/null
+++ b/kernel/mri/mri.c
@@ -0,0 +1,275 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: mri.c 3965 2013-04-22 12:12:31Z tovo $ */
+
+#include "config.h"
+
+#include <string.h>
+#include <math.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+/**
+ * window_funct_plan is a plan to use the window functions
+ * independent of the nfft
+ */
+
+typedef struct window_funct_plan_ {
+ int d;
+ int m;
+ int n[1];
+ double sigma[1];
+ double *b;
+ double *spline_coeffs; /**< input for de Boor algorithm, if
+ B_SPLINE or SINC_2m is defined */
+} window_funct_plan;
+
+/**
+ * init the window_funct_plan
+ */
+static void window_funct_init(window_funct_plan* ths, int m, int n, double sigma) {
+ ths->d=1;
+ ths->m=m;
+ ths->n[0]=n;
+ ths->sigma[0]=sigma;
+ WINDOW_HELP_INIT
+}
+
+/*
+ * mri_inh_2d1d
+ */
+
+void mri_inh_2d1d_trafo(mri_inh_2d1d_plan *that) {
+ int l,j;
+ double _Complex *f = (double _Complex*) nfft_malloc(that->M_total*sizeof(double _Complex));
+ double _Complex *f_hat = (double _Complex*) nfft_malloc(that->N_total*sizeof(double _Complex));
+
+ window_funct_plan *ths = (window_funct_plan*) nfft_malloc(sizeof(window_funct_plan));
+ window_funct_init(ths,that->plan.m,that->N3,that->sigma3);
+
+ /* the pointers that->f and that->f_hat have been modified by the solver */
+ that->plan.f = that->f;
+ that->plan.f_hat = that->f_hat;
+
+
+ memset(f,0,that->M_total*sizeof(double _Complex));
+ for(j=0;j<that->N_total;j++)
+ {
+ f_hat[j]=that->f_hat[j];
+ }
+
+ for(l=-ths->n[0]/2;l<=ths->n[0]/2;l++) {
+ for(j=0;j<that->N_total;j++)
+ that->f_hat[j]*=cexp(-2*PI*_Complex_I*that->w[j]*((double)l))/PHI_HUT(ths->n[0]*that->w[j],0);
+ nfft_trafo(&that->plan);
+ for(j=0;j<that->M_total;j++){
+ /* PHI has compact support */
+ if(fabs(that->t[j]-((double)l)/((double)ths->n[0]))<that->plan.m/((double)ths->n[0]))
+ {
+ double phi_val = PHI(that->t[j]-((double)l)/((double)ths->n[0]),0);
+ f[j]+=that->f[j]*phi_val;
+// the line below causes internal compiler error for gcc 4.7.1
+// f[j]+=that->f[j]*PHI(that->t[j]-((double)l)/((double)ths->n[0]),0);
+ }
+ }
+ for(j=0;j<that->N_total;j++)
+ that->f_hat[j]=f_hat[j];
+ }
+
+ nfft_free(that->plan.f);
+ that->f=f;
+ that->plan.f = that->f;
+
+ nfft_free(f_hat);
+
+ WINDOW_HELP_FINALIZE
+ nfft_free(ths);
+}
+
+void mri_inh_2d1d_adjoint(mri_inh_2d1d_plan *that) {
+ int l,j;
+ double _Complex *f = (double _Complex*) nfft_malloc(that->M_total*sizeof(double _Complex));
+ double _Complex *f_hat = (double _Complex*) nfft_malloc(that->N_total*sizeof(double _Complex));
+
+ window_funct_plan *ths = (window_funct_plan*) nfft_malloc(sizeof(window_funct_plan));
+ window_funct_init(ths,that->plan.m,that->N3,that->sigma3);
+
+ memset(f_hat,0,that->N_total*sizeof(double _Complex));
+
+ /* the pointers that->f and that->f_hat have been modified by the solver */
+ that->plan.f = that->f;
+ that->plan.f_hat = that->f_hat;
+
+ for(j=0;j<that->M_total;j++)
+ {
+ f[j]=that->f[j];
+ }
+
+
+
+ for(l=-ths->n[0]/2;l<=ths->n[0]/2;l++) {
+
+ for(j=0;j<that->M_total;j++) {
+ /* PHI has compact support */
+ if(fabs(that->t[j]-((double)l)/((double)ths->n[0]))<that->plan.m/((double)ths->n[0]))
+ that->f[j]*=PHI(that->t[j]-((double)l)/((double)ths->n[0]),0);
+ else
+ that->f[j]=0.0;
+ }
+ nfft_adjoint(&that->plan);
+ for(j=0;j<that->N_total;j++)
+ f_hat[j]+=that->f_hat[j]*cexp(2*PI*_Complex_I*that->w[j]*((double)l));
+ for(j=0;j<that->M_total;j++)
+ that->f[j]=f[j];
+ }
+
+ for(j=0;j<that->N_total;j++)
+ {
+ f_hat[j] /= PHI_HUT(ths->n[0]*that->w[j],0);
+ }
+
+ nfft_free(that->plan.f_hat);
+ that->f_hat=f_hat;
+ that->plan.f_hat = that->f_hat;
+
+ nfft_free(f);
+
+ WINDOW_HELP_FINALIZE
+ nfft_free(ths);
+}
+
+void mri_inh_2d1d_init_guru(mri_inh_2d1d_plan *ths, int *N, int M, int *n,
+ int m, double sigma, unsigned nfft_flags, unsigned fftw_flags) {
+
+ nfft_init_guru(&ths->plan,2,N,M,n,m,nfft_flags,fftw_flags);
+ ths->N3=N[2];
+ ths->sigma3=sigma;
+ ths->N_total = ths->plan.N_total;
+ ths->M_total = ths->plan.M_total;
+ ths->f = ths->plan.f;
+ ths->f_hat = ths->plan.f_hat;
+
+ ths->t = (double*) nfft_malloc(ths->M_total*sizeof(double));
+ ths->w = (double*) nfft_malloc(ths->N_total*sizeof(double));
+
+ ths->mv_trafo = (void (*) (void* ))mri_inh_2d1d_trafo;
+ ths->mv_adjoint = (void (*) (void* ))mri_inh_2d1d_adjoint;
+}
+
+void mri_inh_2d1d_finalize(mri_inh_2d1d_plan *ths) {
+ nfft_free(ths->t);
+ nfft_free(ths->w);
+
+ /* the pointers ths->f and ths->f_hat have been modified by the solver */
+ ths->plan.f = ths->f;
+ ths->plan.f_hat = ths->f_hat;
+
+ nfft_finalize(&ths->plan);
+}
+
+/*
+ * mri_inh_3d
+ */
+
+void mri_inh_3d_trafo(mri_inh_3d_plan *that) {
+ int l,j;
+ window_funct_plan *ths = (window_funct_plan*) nfft_malloc(sizeof(window_funct_plan));
+ window_funct_init(ths,that->plan.m,that->N3,that->sigma3);
+
+ /* the pointers that->f has been modified by the solver */
+ that->plan.f =that->f ;
+
+
+
+ for(j=0;j<that->N_total;j++) {
+ for(l=-ths->n[0]/2;l<ths->n[0]/2;l++)
+ {
+ /* PHI has compact support */
+ if(fabs(that->w[j]-((double)l)/((double)ths->n[0]))<ths->m/((double)ths->n[0]))
+ that->plan.f_hat[j*ths->n[0]+(l+ths->n[0]/2)]= that->f_hat[j]*PHI(that->w[j]-((double)l)/((double)ths->n[0]),0);
+ else
+ that->plan.f_hat[j*ths->n[0]+(l+ths->n[0]/2)]=0.0;
+ }
+ }
+
+ nfft_trafo(&that->plan);
+
+ for(j=0;j<that->M_total;j++)
+ {
+ that->f[j] /= PHI_HUT(ths->n[0]*that->plan.x[3*j+2],0);
+ }
+
+ WINDOW_HELP_FINALIZE
+ nfft_free(ths);
+}
+
+void mri_inh_3d_adjoint(mri_inh_3d_plan *that) {
+ int l,j;
+ window_funct_plan *ths = (window_funct_plan*) nfft_malloc(sizeof(window_funct_plan));
+ window_funct_init(ths,that->plan.m,that->N3,that->sigma3);
+
+ /* the pointers that->f has been modified by the solver */
+ that->plan.f =that->f ;
+
+ for(j=0;j<that->M_total;j++)
+ {
+ that->f[j] /= PHI_HUT(ths->n[0]*that->plan.x[3*j+2],0);
+ }
+
+ nfft_adjoint(&that->plan);
+
+ for(j=0;j<that->N_total;j++) {
+ that->f_hat[j]=0.0;
+ for(l=-ths->n[0]/2;l<ths->n[0]/2;l++)
+ {
+ /* PHI has compact support */
+ if(fabs(that->w[j]-((double)l)/((double)ths->n[0]))<ths->m/((double)ths->n[0]))
+ that->f_hat[j]+= that->plan.f_hat[j*ths->n[0]+(l+ths->n[0]/2)]*PHI(that->w[j]-((double)l)/((double)ths->n[0]),0);
+ }
+ }
+
+
+ WINDOW_HELP_FINALIZE
+ nfft_free(ths);
+}
+
+void mri_inh_3d_init_guru(mri_inh_3d_plan *ths, int *N, int M, int *n,
+ int m, double sigma, unsigned nfft_flags, unsigned fftw_flags) {
+ ths->N3=N[2];
+ ths->sigma3=sigma;
+ nfft_init_guru(&ths->plan,3,N,M,n,m,nfft_flags,fftw_flags);
+ ths->N_total = N[0]*N[1];
+ ths->M_total = ths->plan.M_total;
+ ths->f = ths->plan.f;
+ ths->f_hat = (double _Complex*) nfft_malloc(ths->N_total*sizeof(double _Complex));
+ ths->w = (double*) nfft_malloc(ths->N_total*sizeof(double));
+
+ ths->mv_trafo = (void (*) (void* ))mri_inh_3d_trafo;
+ ths->mv_adjoint = (void (*) (void* ))mri_inh_3d_adjoint;
+}
+
+void mri_inh_3d_finalize(mri_inh_3d_plan *ths) {
+ nfft_free(ths->w);
+ nfft_free(ths->f_hat);
+ nfft_finalize(&ths->plan);
+}
diff --git a/kernel/nfct/Makefile.am b/kernel/nfct/Makefile.am
new file mode 100644
index 0000000..ac3fe30
--- /dev/null
+++ b/kernel/nfct/Makefile.am
@@ -0,0 +1,6 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_LTLIBRARIES = libnfct.la
+
+libnfct_la_SOURCES = nfct.c
+
diff --git a/kernel/nfct/Makefile.in b/kernel/nfct/Makefile.in
new file mode 100644
index 0000000..b9fc453
--- /dev/null
+++ b/kernel/nfct/Makefile.in
@@ -0,0 +1,553 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/nfct
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libnfct_la_LIBADD =
+am_libnfct_la_OBJECTS = nfct.lo
+libnfct_la_OBJECTS = $(am_libnfct_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libnfct_la_SOURCES)
+DIST_SOURCES = $(libnfct_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+noinst_LTLIBRARIES = libnfct.la
+libnfct_la_SOURCES = nfct.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nfct/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu kernel/nfct/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libnfct.la: $(libnfct_la_OBJECTS) $(libnfct_la_DEPENDENCIES) $(EXTRA_libnfct_la_DEPENDENCIES)
+ $(LINK) $(libnfct_la_OBJECTS) $(libnfct_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfct.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/nfct/nfct.c b/kernel/nfct/nfct.c
new file mode 100644
index 0000000..a6fc00d
--- /dev/null
+++ b/kernel/nfct/nfct.c
@@ -0,0 +1,926 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfct.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/* Nonequispaced fast cosine transform
+ * Author: Steffen Klatt 2004-2006, Jens Keiner 2010 */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+#undef X
+#if defined(NFFT_SINGLE)
+#define X(name) CONCAT(nfctf_, name)
+#elif defined(NFFT_LDOUBLE)
+#define X(name) CONCAT(nfctl_, name)
+#else
+#define X(name) CONCAT(nfct_, name)
+#endif
+
+static inline int fftw_2N(int n)
+{
+ return 2 * (n - 1);
+}
+
+static inline int fftw_2N_rev(int n)
+{
+ return (LRINT(K(0.5) * n) + 1);
+}
+
+static inline int prod_int(int *vec, int d)
+{
+ int t, prod = 1;
+
+ for (t = 0; t < d; t++)
+ prod *= vec[t];
+
+ return prod;
+}
+
+/* handy shortcuts */
+#define NFCT_DEFAULT_FLAGS PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | \
+ MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE
+
+#define FFTW_DEFAULT_FLAGS FFTW_ESTIMATE | FFTW_DESTROY_INPUT
+
+#define NFCT_SUMMANDS (2 * ths->m + 2)
+#define NODE(p,r) (ths->x[(p) * ths->d + (r)])
+
+#define MACRO_ndct_init_result_trafo \
+ memset(f, 0, ths->M_total * sizeof(R));
+#define MACRO_ndct_init_result_adjoint \
+ memset(f_hat, 0, ths->N_total * sizeof(R));
+
+#define MACRO_nfct_D_init_result_A \
+ memset(g_hat, 0, prod_int(ths->n, ths->d) * sizeof(R));
+#define MACRO_nfct_D_init_result_T \
+ memset(f_hat, 0, ths->N_total * sizeof(R));
+
+#define MACRO_nfct_B_init_result_A \
+ memset(f, 0, ths->M_total * sizeof(R));
+#define MACRO_nfct_B_init_result_T \
+ memset(g, 0, prod_int(ths->n, ths->d) * sizeof(R));
+
+#define NFCT_PRE_WINFUN(d) ths->N[d] = 2 * ths->N[d]; \
+ ths->n[d] = fftw_2N(ths->n[d]);
+
+#define NFCT_POST_WINFUN(d) ths->N[d] = LRINT(K(0.5) * ths->N[d]); \
+ ths->n[d] = fftw_2N_rev(ths->n[d]);
+
+#define NFCT_WINDOW_HELP_INIT WINDOW_HELP_INIT
+
+R X(phi_hut)(X(plan) *ths, int k, int d)
+{
+ NFCT_PRE_WINFUN(d);
+ R phi_hut_tmp = PHI_HUT(k, d);
+ NFCT_POST_WINFUN(d);
+
+ return phi_hut_tmp;
+}
+
+R X(phi)(X(plan) *ths, R x, int d)
+{
+ NFCT_PRE_WINFUN(d);
+ R phi_tmp = PHI(x, d);
+ NFCT_POST_WINFUN(d);
+
+ return phi_tmp;
+}
+
+#define MACRO_with_cos_vec cos_vec[t][ka[t]]
+#define MACRO_without_cos_vec COS(K(2.0) * KPI * ka[t] * NODE(j,t))
+
+#define MACRO_with_PRE_PHI_HUT ths->c_phi_inv[t][kg[t]];
+#define MACRO_compute_PHI_HUT_INV (K(1.0) / (X(phi_hut)(ths, kg[t], t)))
+
+#define MACRO_with_PRE_PSI ths->psi[(j * ths->d + t) * NFCT_SUMMANDS + lc[t]]
+#define MACRO_compute_PSI X(phi)(ths, NODE(j,t) - ((R)(lc[t] + lb[t])) / (K(2.0)*((R)(ths->n[t])-K(1.0))/*(R)(fftw_2N(ths->n[t]))*/), t)
+
+/** direct computation of non equispaced cosine transforms
+ * nfct_trafo_direct, nfct_adjoint_direct
+ * require O(M N^d) arithemtical operations
+ *
+ * direct computation of the nfct_trafo_direct, formula (1.1)
+ * nfct_trafo_direct:
+ * for j=0,...,M-1
+ * f[j] = sum_{k in I_N^d} f_hat[k] * cos(2 (pi) k x[j])
+ *
+ * direct computation of the nfft_adjoint_direct, formula (1.2)
+ * nfct_adjoint_direct:
+ * for k in I_N^d
+ * f_hat[k] = sum_{j=0}^{M-1} f[j] * cos(2 (pi) k x[j])
+ */
+
+#define MACRO_ndct_malloc__cos_vec \
+ R **cos_vec; \
+ cos_vec = (R**)Y(malloc)(ths->d * sizeof(R*)); \
+ for (t = 0; t < ths->d; t++) \
+ cos_vec[t] = (R*)Y(malloc)(ths->N[t] * sizeof(R));
+
+#define MACRO_ndct_free__cos_vec \
+{ \
+ /* free allocated memory */ \
+ for (t = 0; t < ths->d; t++) \
+ Y(free)(cos_vec[t]); \
+ Y(free)(cos_vec); \
+}
+
+#define MACRO_ndct_init__cos_vec \
+{ \
+ for(t = 0; t < ths->d; t++) \
+ { \
+ cos_vec[t][0] = K(1.0); \
+ cos_vec[t][1] = COS(K(2.0) * KPI * NODE(j,t)); \
+ for (k = 2; k < ths->N[t]; k++) \
+ cos_vec[t][k] = K(2.0) * cos_vec[t][1] * cos_vec[t][k-1] - \
+ cos_vec[t][k-2]; \
+ } \
+}
+
+#define MACRO_ndct_init__k__cos_k(which_one) \
+{ \
+ cos_k[0] = K(1.0); \
+ for (t = 0; t < ths->d; t++) \
+ ka[t] = 0; \
+\
+ for (t = 0; t < ths->d; t++) \
+ { \
+ cos_k[t+1] = cos_k[t] * MACRO_ ##which_one; \
+ } \
+}
+
+#define MACRO_ndct_count__k__cos_k(which_one) \
+{ \
+ ka[ths->d-1]++; \
+ i = ths->d - 1; \
+ while ((ka[i] == ths->N[i]) && (i > 0)) \
+ { \
+ ka[i - 1]++; \
+ ka[i] = 0; \
+ i--; \
+ } \
+ for (t = i; t < ths->d; t++) \
+ cos_k[t+1] = cos_k[t] * MACRO_ ##which_one; \
+}
+
+#define MACRO_ndct_compute__trafo \
+{ \
+ f[j] += f_hat[k] * cos_k[ths->d]; \
+}
+
+#define MACRO_ndct_compute__adjoint \
+{ \
+ f_hat[k] += f[j] * cos_k[ths->d]; \
+}
+
+/* slow (trafo) transform */
+#define MACRO_ndct(which_one) \
+ void X(which_one ## _direct) (X(plan) *ths) \
+ { \
+ int j, k, t, i; \
+ int ka[ths->d]; \
+ R cos_k[ths->d+1]; \
+ R *f = ths->f; \
+ R *f_hat = ths->f_hat; \
+\
+ MACRO_ndct_init_result_ ## which_one; \
+ if (ths->d == 1) \
+ for (j = 0; j < ths->M_total; j++) \
+ { \
+ for (k = 0; k < ths->N[0]; k++) \
+ { \
+ cos_k[ths->d] = COS(K(2.0) * KPI * k * NODE(j,0)); \
+ MACRO_ndct_compute__ ## which_one; \
+ } \
+ } \
+ else \
+ { \
+ /* fast nfct_trafo_direct */ \
+ MACRO_ndct_malloc__cos_vec; \
+\
+ for (j = 0; j < ths->M_total; j++) \
+ { \
+ MACRO_ndct_init__cos_vec; \
+ MACRO_ndct_init__k__cos_k(with_cos_vec); \
+\
+ for (k = 0; k < ths->N_total; k++) \
+ { \
+ MACRO_ndct_compute__ ## which_one; \
+ MACRO_ndct_count__k__cos_k(with_cos_vec); \
+ } \
+ } \
+ MACRO_ndct_free__cos_vec; \
+ } \
+} /* ndct_{trafo, adjoint} */
+
+MACRO_ndct(trafo)
+MACRO_ndct(adjoint)
+
+/** fast computation of non equispaced cosine transforms
+* require O(N^d log(N) + M) arithemtical operations
+*
+* fast computation of the nfct_trafo, formula (1.1)
+* nfct_trafo:
+* for j=0,...,M-1
+* f[j] = sum_{k in I_N^d} f_hat[k] * cos(2 (pi) k x[j])
+*
+* direct computation of the nfct_adjoint, formula (1.2)
+* nfct_adjoint:
+* for k in I_N^d
+* f_hat[k] = sum_{j=0}^{M-1} f[j] * cos(2 (pi) k x[j])
+*/
+
+#define MACRO_nfct__lower_boundary(j,act_dim) \
+{ \
+ lb[(act_dim)] = \
+ LRINT(NODE((j),(act_dim)) * fftw_2N(ths->n[(act_dim)])) - ths->m; \
+}
+
+#define MACRO_nfct_D_compute_A \
+{ \
+ g_hat[kg_plain[ths->d]] = f_hat[k_L] * c_phi_inv_k[ths->d]; \
+}
+
+#define MACRO_nfct_D_compute_T \
+{ \
+ f_hat[k_L] = g_hat[kg_plain[ths->d]] * c_phi_inv_k[ths->d]; \
+}
+
+#define MACRO_init__kg \
+{ \
+ for (t = 0; t < ths->d; t++) \
+ kg[t] = 0; \
+ i = 0; \
+}
+
+#define MACRO_count__kg \
+{ \
+\
+ kg[ths->d - 1]++; \
+ i = ths->d - 1; \
+ while ((kg[i] == ths->N[i]) && (i > 0)) \
+ { \
+ kg[i - 1]++; \
+ kg[i] = 0; \
+ i--; \
+ } \
+}
+
+#define MACRO_update__phi_inv_k__kg_plain(what_kind, which_phi) \
+{ \
+ for (t = i; t < ths->d; t++) \
+ { \
+ MACRO__c_phi_inv_k__ ## what_kind(which_phi); \
+ kg_plain[t+1] = kg_plain[t] * ths->n[t] + kg[t]; \
+ } \
+}
+
+#define MACRO__c_phi_inv_k__A(which_phi) \
+{ \
+ if (kg[t] == 0) \
+ { \
+ c_phi_inv_k[t+1] = c_phi_inv_k[t] * MACRO_ ## which_phi; \
+ } \
+ else \
+ { \
+ c_phi_inv_k[t+1] = K(0.5) * c_phi_inv_k[t] * MACRO_ ## which_phi; \
+ } \
+}
+
+#define MACRO__c_phi_inv_k__T(which_phi) \
+{ \
+ c_phi_inv_k[t+1] = c_phi_inv_k[t] * MACRO_ ## which_phi; \
+}
+
+#define MACRO_nfct_D(which_one) \
+static inline void D_ ## which_one (X(plan) *ths) \
+{ \
+ int k_L; /* plain index */ \
+ int i, t; \
+ int kg[ths->d]; /* multi index in g_hat,c_phi */ \
+ R c_phi_inv_k[ths->d+1]; /* postfix product of PHI_HUT_INV */ \
+ int kg_plain[ths->d+1]; /* postfix plain index */ \
+ R *g_hat, *f_hat; /* local copy */ \
+\
+ g_hat = ths->g_hat; \
+ f_hat = ths->f_hat; \
+\
+ MACRO_nfct_D_init_result_ ## which_one \
+\
+ c_phi_inv_k[0] = K(1.0); \
+ kg_plain[0] = 0; \
+\
+ MACRO_init__kg; \
+\
+ if (ths->nfct_flags & PRE_PHI_HUT) \
+ for (k_L = 0; k_L < ths->N_total; k_L++) \
+ { \
+ MACRO_update__phi_inv_k__kg_plain(which_one, with_PRE_PHI_HUT); \
+ MACRO_nfct_D_compute_ ## which_one; \
+ MACRO_count__kg; \
+ } /* for (k_L) */ \
+ else \
+ for (k_L = 0; k_L < ths->N_total; k_L++) \
+ { \
+ MACRO_update__phi_inv_k__kg_plain(which_one,compute_PHI_HUT_INV); \
+ MACRO_nfct_D_compute_ ## which_one; \
+ MACRO_count__kg; \
+ } /* for(k_L) */ \
+} /* nfct_D */
+
+MACRO_nfct_D(A)
+MACRO_nfct_D(T)
+
+/** sub routines for the fast transforms
+* matrix vector multiplication with \f$B, B^{\rm T}\f$
+*/
+#define MACRO_nfct_B_PRE_FULL_PSI_compute_A \
+{ \
+ (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]]; \
+}
+
+#define MACRO_nfct_B_PRE_FULL_PSI_compute_T \
+{ \
+ g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj); \
+}
+
+#define MACRO_nfct_B_compute_A \
+{ \
+ (*fj) += phi_tilde[ths->d] * g[lg_plain[ths->d]]; \
+}
+
+#define MACRO_nfct_B_compute_T \
+{ \
+ g[lg_plain[ths->d]] += phi_tilde[ths->d] * (*fj); \
+}
+
+#define MACRO_compute_lg_offset__count_lg(i0) \
+{ \
+ /* determine index in g-array corresponding to lb[(i0)] */ \
+ if (lb[(i0)] < 0) \
+ lg_offset[(i0)] = \
+ (lb[(i0)] % fftw_2N(ths->n[(i0)])) + fftw_2N(ths->n[(i0)]); \
+ else \
+ lg_offset[(i0)] = lb[(i0)] % (fftw_2N(ths->n[(i0)])); \
+ if (lg_offset[(i0)] >= ths->n[(i0)]) \
+ lg_offset[(i0)] = -(fftw_2N(ths->n[(i0)]) - lg_offset[(i0)]); \
+}
+
+#define MACRO_set__lg__to__lg_offset \
+{ \
+ if (lg_offset[i] <= 0) \
+ { \
+ lg[i] = -lg_offset[i]; \
+ count_lg[i] = -1; \
+ } \
+ else \
+ { \
+ lg[i] = +lg_offset[i]; \
+ count_lg[i] = +1; \
+ } \
+}
+
+#define MACRO_count__lg(dim) \
+{ \
+ /* turn around if we hit one of the boundaries */ \
+ if ((lg[(dim)] == 0) || (lg[(dim)] == ths->n[(dim)]-1)) \
+ count_lg[(dim)] *= -1; \
+ /* move array index */ \
+ lg[(dim)] += count_lg[(dim)]; \
+}
+
+#define MACRO_init_lb_lg_lc \
+{ \
+ for (i = 0; i < ths->d; i++) \
+ { \
+ MACRO_nfct__lower_boundary(j, i); \
+ MACRO_compute_lg_offset__count_lg(i); \
+ MACRO_set__lg__to__lg_offset; \
+ /* counter for lg */ \
+ lc[i] = 0; \
+ } \
+ i = 0; \
+}
+
+#define MACRO_count__lg_lc \
+{ \
+ MACRO_count__lg(ths->d-1); \
+ lc[ths->d - 1]++; \
+ i = ths->d - 1; \
+ while ((lc[i] == NFCT_SUMMANDS) && (i > 0)) \
+ { \
+ lc[i - 1]++; \
+ lc[i] = 0; \
+ /* ansonsten lg[i-1] verschieben */ \
+ MACRO_count__lg(i - 1); \
+ /* lg[i] = anfangswert */ \
+ MACRO_set__lg__to__lg_offset; \
+ i--; \
+ } \
+}
+
+#define MACRO_update_phi_tilde_lg_plain(which_one, which_psi) \
+{ \
+ for (t = i; t < ths->d; t++) \
+ { \
+ MACRO__phi_tilde__ ## which_one(which_psi); \
+ lg_plain[t+1] = lg_plain[t] * ths->n[t] + lg[t]; \
+ } \
+}
+
+#define MACRO__phi_tilde__A(which_psi) \
+{ \
+ phi_tilde[t+1] = phi_tilde[t] * MACRO_ ## which_psi; \
+}
+
+#define MACRO__phi_tilde__T(which_psi) \
+{ \
+ if(lg[t] == 0 || lg[t] == ths->n[t] - 1) \
+ { \
+ phi_tilde[t+1] = phi_tilde[t] * MACRO_ ## which_psi; \
+ } \
+ else \
+ { \
+ phi_tilde[t+1] = K(0.5) * phi_tilde[t] * MACRO_ ## which_psi; \
+ } \
+}
+
+#define MACRO_nfct_B(which_one) \
+static inline void B_ ## which_one (nfct_plan *ths) \
+{ /* MACRO_nfct_B */ \
+ int lb[ths->d]; /* multi band with respect to x_j */ \
+ int j, t, i; /* index nodes, help vars */ \
+ int lprod, l_L, ix; /* index one row of B */ \
+ int lc[ths->d]; /* multi index 0<=lc<2m+2 */ \
+ int lg[ths->d]; /* real index of g in array */ \
+ int lg_offset[ths->d]; /* offset in g according to u */ \
+ int count_lg[ths->d]; /* count summands (2m+2) */ \
+ int lg_plain[ths->d+1]; /* index of g in multi_array */ \
+ R *f, *g; /* local copy */ \
+ R phi_tilde[ths->d+1]; /* holds values for psi */ \
+ R *fj; /* pointer to final result */ \
+\
+ f = ths->f; g = ths->g; \
+\
+ MACRO_nfct_B_init_result_ ## which_one \
+\
+ /* both flags are set */ \
+ if ((ths->nfct_flags & PRE_PSI)&&(ths->nfct_flags & PRE_FULL_PSI)) \
+ { \
+ for (ix = 0, j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \
+ for (l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++) \
+ { \
+ MACRO_nfct_B_PRE_FULL_PSI_compute_ ## which_one; \
+ } \
+ } \
+ else \
+ { \
+ phi_tilde[0] = K(1.0); \
+ lg_plain[0] = 0; \
+\
+ for (t = 0, lprod = 1; t < ths->d; t++) \
+ lprod *= NFCT_SUMMANDS; \
+\
+ /* PRE_PSI flag is set */ \
+ if (ths->nfct_flags & PRE_PSI) \
+ for (j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \
+ { \
+ MACRO_init_lb_lg_lc; \
+ for (l_L = 0; l_L < lprod; l_L++) \
+ { \
+ MACRO_update_phi_tilde_lg_plain(which_one, with_PRE_PSI); \
+ MACRO_nfct_B_compute_ ## which_one; \
+ MACRO_count__lg_lc; \
+ } /* for(l_L) */ \
+ } /* for(j) */ \
+\
+ /* no PSI flag is set */ \
+ else \
+ for (j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \
+ { \
+ MACRO_init_lb_lg_lc; \
+ for (l_L = 0; l_L < lprod; l_L++) \
+ { \
+ MACRO_update_phi_tilde_lg_plain(which_one,compute_PSI); \
+ MACRO_nfct_B_compute_ ## which_one; \
+ MACRO_count__lg_lc; \
+ } /* for (l_L) */ \
+ } /* for (j) */ \
+ } /* else (PRE_PSI && FULL_PRE_PSI) */ \
+} /* nfct_B */
+
+MACRO_nfct_B(A)
+MACRO_nfct_B(T)
+
+/* more memory, but faster */
+#define MACRO_nfct_full_psi(which_one) \
+static inline void full_psi__ ## which_one(nfct_plan *ths) \
+{ \
+ int t, i; /* index over all dimensions */ \
+ int j; /* node index */ \
+ int l_L; /* plain index 0 <= l_L < lprod */ \
+ int lc[ths->d]; /* multi index 0<=lj<u+o+1 */ \
+ int lg_plain[ths->d+1]; /* postfix plain index */ \
+ int count_lg[ths->d]; \
+ int lg_offset[ths->d]; \
+ int lg[ths->d]; \
+ int lprod; /* 'bandwidth' of matrix B */ \
+ int lb[ths->d]; /* depends on x_j */ \
+\
+ R phi_tilde[ths->d+1]; \
+ R eps = ths->nfct_full_psi_eps; \
+\
+ int *index_g, *index_f; \
+ R *new_psi; \
+ int ix, ix_old, size_psi; \
+\
+ phi_tilde[0] = K(1.0); \
+ lg_plain[0] = 0; \
+ \
+ if (ths->nfct_flags & PRE_PSI) \
+ { \
+ size_psi = ths->M_total; \
+ index_f = (int*)Y(malloc)(ths->M_total * sizeof(int)); \
+ index_g = (int*)Y(malloc)(size_psi * sizeof(int)); \
+ new_psi = (R*)Y(malloc)(size_psi * sizeof(R)); \
+\
+ for (t = 0,lprod = 1; t < ths->d; t++) \
+ { \
+ lprod *= NFCT_SUMMANDS; \
+ eps *= nfct_phi(ths, K(0.0), t); \
+ } \
+\
+ for (ix = 0, ix_old = 0, j = 0; j < ths->M_total; j++) \
+ { \
+ MACRO_init_lb_lg_lc; \
+\
+ for (l_L = 0; l_L < lprod; l_L++) \
+ { \
+ MACRO_update_phi_tilde_lg_plain(which_one, with_PRE_PSI); \
+\
+ if (phi_tilde[ths->d] > eps) \
+ { \
+ index_g[ix] = lg_plain[ths->d]; \
+ new_psi[ix] = phi_tilde[ths->d]; \
+\
+ ix++; \
+ if (ix == size_psi) \
+ { \
+ size_psi += ths->M_total; \
+ index_g = (int*)realloc(index_g, size_psi * sizeof(int)); \
+ new_psi = (R*)realloc(new_psi, size_psi * sizeof(R)); \
+ } \
+ } \
+\
+ MACRO_count__lg_lc; \
+\
+ } /* for (l_L) */ \
+\
+ index_f[j] = ix - ix_old; \
+ ix_old = ix; \
+\
+ } /* for(j) */ \
+\
+ Y(free)(ths->psi); \
+ size_psi = ix; \
+ ths->size_psi = size_psi; \
+\
+ index_g = (int*)realloc(index_g, size_psi * sizeof(int)); \
+ new_psi = (R*)realloc(new_psi, size_psi * sizeof(R)); \
+\
+ ths->psi = new_psi; \
+ ths->psi_index_g = index_g; \
+ ths->psi_index_f = index_f; \
+\
+ } /* if(PRE_PSI) */ \
+}
+
+MACRO_nfct_full_psi(A)
+MACRO_nfct_full_psi(T)
+
+/* user routines */
+
+void X(trafo)(X(plan) *ths)
+{
+ /* use ths->my_fftw_r2r_plan */
+ ths->g_hat = ths->g1;
+ ths->g = ths->g2;
+
+ /* form \f$ \hat g_k = \frac{\hat f_k}{c_k\left(\phi\right)} \text{ for }
+ * k \in I_N \f$ */
+ TIC(0)
+ D_A(ths);
+ TOC(0)
+
+ /* Compute by d-variate discrete Fourier transform
+ * \f$ g_l = \sum_{k \in I_N} \hat g_k {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
+ * \text{ for } l \in I_n \f$ */
+ TIC(1)
+ Z(execute)(ths->my_fftw_r2r_plan);
+ TOC(1)
+
+ if (ths->nfct_flags & PRE_FULL_PSI)
+ full_psi__A(ths);
+
+ /* Set \f$ f_j = \sum_{l \in I_n,m(x_j)} g_l \psi\left(x_j-\frac{l}{n}\right)
+ * \text{ for } j=0,\hdots,M-1 \f$ */
+ TIC(2)
+ B_A(ths);
+ TOC(2)
+
+ if (ths->nfct_flags & PRE_FULL_PSI)
+ {
+ Y(free)(ths->psi_index_g);
+ Y(free)(ths->psi_index_f);
+ }
+} /* nfct_trafo */
+
+void X(adjoint)(X(plan) *ths)
+{
+ /* use ths->my_fftw_plan */
+ ths->g_hat = ths->g2;
+ ths->g = ths->g1;
+
+ if (ths->nfct_flags & PRE_FULL_PSI)
+ full_psi__T(ths);
+
+ /* Set \f$ g_l = \sum_{j=0}^{M-1} f_j \psi\left(x_j-\frac{l}{n}\right)
+ * \text{ for } l \in I_n,m(x_j) \f$ */
+ TIC(2)
+ B_T(ths);
+ TOC(2)
+
+ if (ths->nfct_flags & PRE_FULL_PSI)
+ {
+ Y(free)(ths->psi_index_g);
+ Y(free)(ths->psi_index_f);
+ }
+
+ /* Compute by d-variate discrete cosine transform
+ * \f$ \hat g_k = \sum_{l \in I_n} g_l {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
+ * \text{ for } k \in I_N\f$ */
+ TIC(1)
+ Z(execute)(ths->my_fftw_r2r_plan);
+ TOC(1)
+
+ /* Form \f$ \hat f_k = \frac{\hat g_k}{c_k\left(\phi\right)} \text{ for }
+ * k \in I_N \f$ */
+ TIC(0)
+ D_T(ths);
+ TOC(0)
+
+} /* nfct_adjoint */
+
+static inline void precompute_phi_hut(X(plan) *ths)
+{
+ int kg[ths->d]; /* index over all frequencies */
+ int t; /* index over all dimensions */
+
+ ths->c_phi_inv = (R**)Y(malloc)(ths->d * sizeof(R*));
+
+ for (t = 0; t < ths->d; t++)
+ {
+ ths->c_phi_inv[t] = (R*)Y(malloc)(ths->N[t] * sizeof(R));
+
+ for (kg[t] = 0; kg[t] < ths->N[t]; kg[t]++)
+ {
+ ths->c_phi_inv[t][kg[t]] = MACRO_compute_PHI_HUT_INV;
+ }
+ }
+} /* nfct_phi_hut */
+
+void X(precompute_psi)(X(plan) *ths)
+{
+ int t; /* index over all dimensions */
+ int j; /* index over all nodes */
+ int lc[ths->d]; /* index 0<=lj<u+o+1 */
+ int lb[ths->d]; /* depends on x_j */
+
+ for (t = 0; t < ths->d; t++)
+ {
+ for (j = 0; j < ths->M_total; j++)
+ {
+ MACRO_nfct__lower_boundary(j, t);
+ for(lc[t] = 0; lc[t] < NFCT_SUMMANDS; lc[t]++)
+ ths->psi[(j * ths->d + t) * NFCT_SUMMANDS + lc[t]] = MACRO_compute_PSI;
+ } /* for (j) */
+ } /* for (t) */
+} /* nfct_precompute_psi */
+
+static inline void init_help(X(plan) *ths)
+{
+ int t; /* index over all dimensions */
+
+ ths->N_total = prod_int(ths->N, ths->d);
+ ths->sigma = (R*)Y(malloc)(ths->d * sizeof(R));
+
+ for (t = 0; t < ths->d; t++)
+ ths->sigma[t] = ((R)(ths->n[t] - 1)) / ths->N[t];
+
+ /* Assign r2r transform kinds for each dimension */
+ ths->r2r_kind = (Z(r2r_kind)*)Y(malloc)(ths->d * sizeof (Z(r2r_kind)));
+ for (t = 0; t < ths->d; t++)
+ ths->r2r_kind[t] = FFTW_REDFT00;
+
+ NFCT_WINDOW_HELP_INIT;
+
+ if (ths->nfct_flags & MALLOC_X)
+ ths->x = (R*)Y(malloc)(ths->d * ths->M_total * sizeof(R));
+
+ if (ths->nfct_flags & MALLOC_F_HAT)
+ ths->f_hat = (R*)Y(malloc)(ths->N_total * sizeof(R));
+
+ if (ths->nfct_flags & MALLOC_F)
+ ths->f = (R*)Y(malloc)(ths->M_total * sizeof(R));
+
+ if (ths->nfct_flags & PRE_PHI_HUT)
+ precompute_phi_hut(ths);
+
+ /* NO FFTW_MALLOC HERE */
+ if (ths->nfct_flags & PRE_PSI)
+ {
+ ths->psi =
+ (R*)Y(malloc)(ths->M_total * ths->d * NFCT_SUMMANDS * sizeof(R));
+
+ /* Set default for full_psi_eps */
+ ths->nfct_full_psi_eps = POW(K(10.0), K(-10.0));
+ }
+
+ if (ths->nfct_flags & FFTW_INIT)
+ {
+ ths->g1 =
+ (R*)Y(malloc)(prod_int(ths->n, ths->d) * sizeof(R));
+
+ if (ths->nfct_flags & FFT_OUT_OF_PLACE)
+ ths->g2 =
+ (R*) Y(malloc)(prod_int(ths->n, ths->d) * sizeof(R));
+ else
+ ths->g2 = ths->g1;
+
+ ths->my_fftw_r2r_plan =
+ Z(plan_r2r)(ths->d, ths->n, ths->g1, ths->g2, ths->r2r_kind,
+ ths->fftw_flags);
+ }
+
+ ths->mv_trafo = (void (*) (void* ))X(trafo);
+ ths->mv_adjoint = (void (*) (void* ))X(adjoint);
+}
+
+void X(init)(X(plan) *ths, int d, int *N, int M_total)
+{
+ int t;
+
+ ths->d = d;
+ ths->M_total = M_total;
+ ths->N = (int*) Y(malloc)(ths->d * sizeof(int));
+
+ for (t = 0;t < d; t++)
+ ths->N[t] = N[t];
+
+ ths->n = (int*) Y(malloc)(ths->d * sizeof(int));
+
+ for (t = 0; t < d; t++)
+ ths->n[t] = fftw_2N(Y(next_power_of_2)(ths->N[t]));
+
+/* Was soll dieser Ausdruck machen? Es handelt sich um eine Ganzzahl!
+
+ WINDOW_HELP_ESTIMATE_m;
+*/
+ ths->nfct_flags = NFCT_DEFAULT_FLAGS;
+ ths->fftw_flags = FFTW_DEFAULT_FLAGS;
+
+ init_help(ths);
+}
+
+/* Was macht diese Funktion. Wird sie gebraucht? Bei NFST ist sie auch in
+ * nfft3.h deklariert.
+void nfct_init_m(nfct_plan *ths, int d, int *N, int M_total, int m)
+{
+ int t, n[d];
+
+ for(t = 0; t < d; t++)
+ n[t] = fftw_2N(X(next_power_of_2)(N[t]));
+
+ nfct_init_guru(ths, d, N, M_total, n, m, NFCT_DEFAULT_FLAGS, FFTW_DEFAULT_FLAGS);
+}
+*/
+
+void X(init_guru)(X(plan) *ths, int d, int *N, int M_total, int *n, int m,
+ unsigned nfct_flags, unsigned fftw_flags)
+{
+ int t; /* index over all dimensions */
+
+ ths->d = d;
+ ths->M_total = M_total;
+
+ ths->N = (int*)Y(malloc)(ths->d * sizeof(int));
+
+ for (t = 0; t < d; t++)
+ ths->N[t] = N[t];
+
+ ths->n = (int*)Y(malloc)(ths->d * sizeof(int));
+
+ for (t = 0; t < d; t++)
+ ths->n[t] = n[t];
+
+ ths->m = m;
+
+ ths->nfct_flags = nfct_flags;
+ ths->fftw_flags = fftw_flags;
+
+ init_help(ths);
+}
+
+void X(init_1d)(X(plan) *ths, int N0, int M_total)
+{
+ int N[1];
+
+ N[0] = N0;
+ X(init)(ths, 1, N, M_total);
+}
+
+void X(init_2d)(X(plan) *ths, int N0, int N1, int M_total)
+{
+ int N[2];
+
+ N[0] = N0;
+ N[1] = N1;
+ X(init)(ths, 2, N, M_total);
+}
+
+void X(init_3d)(X(plan) *ths, int N0, int N1, int N2, int M_total)
+{
+ int N[3];
+
+ N[0] = N0;
+ N[1] = N1;
+ N[2] = N2;
+ X(init)(ths, 3, N, M_total);
+}
+
+void X(finalize)(X(plan) *ths)
+{
+ int t; /* dimension index*/
+
+ if (ths->nfct_flags & FFTW_INIT)
+ {
+ Z(destroy_plan)(ths->my_fftw_r2r_plan);
+
+ if (ths->nfct_flags & FFT_OUT_OF_PLACE)
+ Y(free)(ths->g2);
+
+ Y(free)(ths->g1);
+ }
+
+ /* NO FFTW_FREE HERE */
+ if (ths->nfct_flags & PRE_PSI)
+ {
+ Y(free)(ths->psi);
+ }
+
+ if (ths->nfct_flags & PRE_PHI_HUT)
+ {
+ for (t = 0; t < ths->d; t++)
+ Y(free)(ths->c_phi_inv[t]);
+ Y(free)(ths->c_phi_inv);
+ }
+
+ if (ths->nfct_flags & MALLOC_F)
+ Y(free)(ths->f);
+
+ if(ths->nfct_flags & MALLOC_F_HAT)
+ Y(free)(ths->f_hat);
+
+ if (ths->nfct_flags & MALLOC_X)
+ Y(free)(ths->x);
+
+ WINDOW_HELP_FINALIZE;
+
+ Y(free)(ths->N);
+ Y(free)(ths->n);
+ Y(free)(ths->sigma);
+
+ Y(free)(ths->r2r_kind);
+} /* nfct_finalize */
diff --git a/kernel/nfft/Makefile.am b/kernel/nfft/Makefile.am
new file mode 100644
index 0000000..3cedb5f
--- /dev/null
+++ b/kernel/nfft/Makefile.am
@@ -0,0 +1,17 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+if HAVE_THREADS
+ LIBNFFT_THREADS_LA = libnfft_threads.la
+else
+ LIBNFFT_THREADS_LA =
+endif
+
+noinst_LTLIBRARIES = libnfft.la $(LIBNFFT_THREADS_LA)
+libnfft_la_SOURCES = nfft.c
+
+if HAVE_THREADS
+ libnfft_threads_la_SOURCES = nfft.c
+if HAVE_OPENMP
+ libnfft_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
diff --git a/kernel/nfft/Makefile.in b/kernel/nfft/Makefile.in
new file mode 100644
index 0000000..1ed75b0
--- /dev/null
+++ b/kernel/nfft/Makefile.in
@@ -0,0 +1,578 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/nfft
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libnfft_la_LIBADD =
+am_libnfft_la_OBJECTS = nfft.lo
+libnfft_la_OBJECTS = $(am_libnfft_la_OBJECTS)
+libnfft_threads_la_LIBADD =
+am__libnfft_threads_la_SOURCES_DIST = nfft.c
+ at HAVE_THREADS_TRUE@am_libnfft_threads_la_OBJECTS = \
+ at HAVE_THREADS_TRUE@ libnfft_threads_la-nfft.lo
+libnfft_threads_la_OBJECTS = $(am_libnfft_threads_la_OBJECTS)
+libnfft_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libnfft_threads_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+ at HAVE_THREADS_TRUE@am_libnfft_threads_la_rpath =
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libnfft_la_SOURCES) $(libnfft_threads_la_SOURCES)
+DIST_SOURCES = $(libnfft_la_SOURCES) \
+ $(am__libnfft_threads_la_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+ at HAVE_THREADS_FALSE@LIBNFFT_THREADS_LA =
+ at HAVE_THREADS_TRUE@LIBNFFT_THREADS_LA = libnfft_threads.la
+noinst_LTLIBRARIES = libnfft.la $(LIBNFFT_THREADS_LA)
+libnfft_la_SOURCES = nfft.c
+ at HAVE_THREADS_TRUE@libnfft_threads_la_SOURCES = nfft.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libnfft_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nfft/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu kernel/nfft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libnfft.la: $(libnfft_la_OBJECTS) $(libnfft_la_DEPENDENCIES) $(EXTRA_libnfft_la_DEPENDENCIES)
+ $(LINK) $(libnfft_la_OBJECTS) $(libnfft_la_LIBADD) $(LIBS)
+libnfft_threads.la: $(libnfft_threads_la_OBJECTS) $(libnfft_threads_la_DEPENDENCIES) $(EXTRA_libnfft_threads_la_DEPENDENCIES)
+ $(libnfft_threads_la_LINK) $(am_libnfft_threads_la_rpath) $(libnfft_threads_la_OBJECTS) $(libnfft_threads_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libnfft_threads_la-nfft.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+libnfft_threads_la-nfft.lo: nfft.c
+ at am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfft_threads_la_CFLAGS) $(CFLAGS) -MT libnfft_threads_la-nfft.lo -MD -MP -MF $(DEPDIR)/libnfft_threads_la-nfft.Tpo -c -o libnfft_threads_la-nfft.lo `test -f 'nfft.c' || echo '$(srcdir)/'`nfft.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libnfft_threads_la-nfft.Tpo $(DEPDIR)/libnfft_threads_la-nfft.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nfft.c' object='libnfft_threads_la-nfft.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfft_threads_la_CFLAGS) $(CFLAGS) -c -o libnfft_threads_la-nfft.lo `test -f 'nfft.c' || echo '$(srcdir)/'`nfft.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/nfft/nfft.c b/kernel/nfft/nfft.c
new file mode 100644
index 0000000..517b83c
--- /dev/null
+++ b/kernel/nfft/nfft.c
@@ -0,0 +1,5878 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfft.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/* Nonequispaced FFT */
+
+/* Authors: D. Potts, S. Kunis 2002-2009, Jens Keiner 2009, Toni Volkmer 2012 */
+
+/* configure header */
+#include "config.h"
+
+/* complex datatype (maybe) */
+#ifdef HAVE_COMPLEX_H
+#include<complex.h>
+#endif
+
+/* NFFT headers */
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+#ifdef OMP_ASSERT
+#include <assert.h>
+#endif
+
+
+/**
+ * Sort nodes (index) to get better cache utilization during multiplication
+ * with matrix B.
+ * The resulting index set is written to ar[2*j+1], the nodes array remains
+ * unchanged.
+ *
+ * \arg n FFTW length (number of oversampled in each dimension)
+ * \arg m window length
+ * \arg local_x_num number of nodes
+ * \arg local_x nodes array
+ * \arg ar_x resulting index array
+ *
+ * \author Toni Volkmer
+ */
+static void nfft_sort_nodes_for_better_cache_handle(int d,
+ const int *n, int m, int local_x_num, const R *local_x, int *ar_x)
+{
+ int u_j[d], i, j, help, rhigh;
+ int *ar_x_temp;
+ int nprod;
+
+ for(i = 0; i < local_x_num; i++) {
+ ar_x[2*i] = 0;
+ ar_x[2*i+1] = i;
+ for(j = 0; j < d; j++) {
+ help = (int) floor( n[j]*local_x[d*i+j] - m);
+ u_j[j] = (help%n[j]+n[j])%n[j];
+
+ ar_x[2*i] += u_j[j];
+ if (j+1 < d)
+ ar_x[2*i] *= n[j+1];
+ }
+ }
+
+ for (j = 0, nprod = 1; j < d; j++)
+ nprod *= n[j];
+
+ rhigh = (int) ceil(log2(nprod)) - 1;
+
+ ar_x_temp = (int *) nfft_malloc(2*local_x_num*sizeof(int));
+ nfft_sort_node_indices_radix_lsdf(local_x_num, ar_x, ar_x_temp, rhigh);
+#ifdef OMP_ASSERT
+ for (i = 1; i < local_x_num; i++)
+ assert(ar_x[2*(i-1)] <= ar_x[2*i]);
+#endif
+ nfft_free(ar_x_temp);
+}
+
+/**
+ * Sort nodes (index) to get better cache utilization during multiplication
+ * with matrix B.
+ * The resulting index set is written to ths->index_x[2*j+1], the nodes array
+ * remains unchanged.
+ *
+ * \arg ths nfft_plan
+ */
+static void nfft_sort_nodes(const nfft_plan *ths)
+{
+ if (ths->nfft_flags & NFFT_SORT_NODES)
+ nfft_sort_nodes_for_better_cache_handle(ths->d, ths->n, ths->m, ths->M_total, ths->x, ths->index_x);
+}
+
+/** direct computation of non equispaced fourier transforms
+ * nfft_trafo_direct, ndft_conjugated, nfft_adjoint_direct, ndft_transposed
+ * require O(M_total N^d) arithemtical operations
+ *
+ * direct computation of the nfft_trafo_direct and ndft_conjugated, formula (1.1)
+ * nfft_trafo_direct:
+ * for j=0,...,M_total-1
+ * f[j] = sum_{k in I_N^d} f_hat[k] * exp(-2 (pi) k x[j])
+ * ndft_conjugated:
+ * for j=0,...,M_total-1
+ * f[j] = sum_{k in I_N^d} f_hat[k] * exp(+2 (pi) k x[j])
+ *
+ * direct computation of the nfft_adjoint_direct and ndft_transposed, formula (1.2)
+ * nfft_adjoint_direct:
+ * for k in I_N^d
+ * f_hat[k] = sum_{j=0}^{M_total-1} f[j] * exp(+2(pi) k x[j])
+ * ndft_transposed:
+ * for k in I_N^d
+ * f_hat[k] = sum_{j=0}^{M_total-1} f[j] * exp(-2(pi) k x[j])
+ */
+
+/* some macros to initialize arrays before executing a transformation */
+#define MACRO_ndft_init_result_trafo memset(f,0,ths->M_total*sizeof(C));
+#define MACRO_ndft_init_result_conjugated MACRO_ndft_init_result_trafo
+#define MACRO_ndft_init_result_adjoint memset(f_hat,0,ths->N_total*sizeof(C));
+#define MACRO_ndft_init_result_transposed MACRO_ndft_init_result_adjoint
+
+/* exponent of complex exponentials */
+#define MACRO_ndft_sign_trafo K2PI*ths->x[j*ths->d+t]
+#define MACRO_ndft_sign_conjugated -K2PI*ths->x[j*ths->d+t]
+#define MACRO_ndft_sign_adjoint K2PI*ths->x[j*ths->d+t]
+#define MACRO_ndft_sign_transposed -K2PI*ths->x[j*ths->d+t]
+
+#define MACRO_init_k_N_Omega_x(which_one) \
+{ \
+ for (t = 0; t < ths->d; t++) \
+ { \
+ k[t] = -ths->N[t]/2; \
+ x[t] = MACRO_ndft_sign_ ## which_one; \
+ Omega[t+1] = k[t]*x[t] + Omega[t]; \
+ } \
+ omega = Omega[ths->d]; \
+} \
+
+#define MACRO_count_k_N_Omega \
+{ \
+ for (t = ths->d-1; (t >= 1) && (k[t] == ths->N[t]/2-1); t--) \
+ k[t]-= ths->N[t]-1; \
+ \
+ k[t]++; \
+\
+ for (t2 = t; t2 < ths->d; t2++) \
+ Omega[t2+1] = k[t2]*x[t2] + Omega[t2]; \
+ \
+ omega = Omega[ths->d]; \
+}
+
+#define MACRO_ndft_compute_trafo f[j] += f_hat[k_L]*CEXP(-II*omega);
+#define MACRO_ndft_compute_conjugated MACRO_ndft_compute_trafo
+#define MACRO_ndft_compute_adjoint f_hat[k_L] += f[j]*CEXP(+II*omega);
+#define MACRO_ndft_compute_transposed MACRO_ndft_compute_adjoint
+
+#define MACRO_ndft(which_one) \
+void nfft_ ## which_one ## _direct (nfft_plan *ths) \
+{ \
+ C *f_hat = (C*)ths->f_hat, *f = (C*)ths->f; \
+ \
+ MACRO_ndft_init_result_ ## which_one \
+ \
+ if (ths->d == 1) \
+ { \
+ /* specialize for univariate case, rationale: faster */ \
+ const int t = 0; \
+ int j; \
+ for (j = 0; j < ths->M_total; j++) \
+ { \
+ int k_L; \
+ for(k_L = 0; k_L < ths->N_total; k_L++) \
+ { \
+ R omega = (k_L - (ths->N_total/2)) * MACRO_ndft_sign_ ## which_one; \
+ MACRO_ndft_compute_ ## which_one; \
+ } \
+ } \
+ } \
+ else \
+ { \
+ /* multivariate case */ \
+ int j; \
+ for (j = 0; j < ths->M_total; j++) \
+ { \
+ R x[ths->d], omega, Omega[ths->d+1]; \
+ int t, t2, k_L, k[ths->d]; \
+ Omega[0] = K(0.0); \
+ MACRO_init_k_N_Omega_x(which_one); \
+ for(k_L = 0; k_L < ths->N_total; k_L++) \
+ { \
+ MACRO_ndft_compute_ ## which_one; \
+ MACRO_count_k_N_Omega; \
+ } \
+ } \
+ } \
+}
+
+// macro expanded for OpenMP parallelization
+//MACRO_ndft(trafo)
+void nfft_trafo_direct (nfft_plan *ths)
+{
+ C *f_hat = (C*)ths->f_hat, *f = (C*)ths->f;
+
+ memset(f,0,ths->M_total*sizeof(C));
+
+ if (ths->d == 1)
+ {
+ /* specialize for univariate case, rationale: faster */
+ int j;
+ #pragma omp parallel for default(shared) private(j)
+ for (j = 0; j < ths->M_total; j++)
+ {
+ int k_L;
+ for(k_L = 0; k_L < ths->N_total; k_L++)
+ {
+ R omega = (k_L - ths->N_total/2) * K2PI * ths->x[j];
+ f[j] += f_hat[k_L]*cexp(-( 1.0iF)*omega);
+ }
+ }
+ }
+ else
+ {
+ /* multivariate case */
+ int j;
+ #pragma omp parallel for default(shared) private(j)
+ for (j = 0; j < ths->M_total; j++)
+ {
+ R x[ths->d], omega, Omega[ths->d+1];
+ int t, t2, k_L, k[ths->d];
+ Omega[0] = ((R) 0.0);
+ for (t = 0; t < ths->d; t++)
+ {
+ k[t] = -ths->N[t]/2;
+ x[t] = K2PI*ths->x[j*ths->d+t];
+ Omega[t+1] = k[t]*x[t] + Omega[t];
+ }
+ omega = Omega[ths->d];
+
+ for(k_L = 0; k_L < ths->N_total; k_L++)
+ {
+ f[j] += f_hat[k_L]*cexp(-( 1.0iF)*omega);
+ {
+ for (t = ths->d-1; (t >= 1) && (k[t] == ths->N[t]/2-1); t--)
+ k[t]-= ths->N[t]-1;
+
+ k[t]++;
+
+ for (t2 = t; t2 < ths->d; t2++)
+ Omega[t2+1] = k[t2]*x[t2] + Omega[t2];
+
+ omega = Omega[ths->d];
+ }
+ }
+ }
+ }
+}
+
+// macro expanded for OpenMP parallelization since parallel calculation
+// requires outer loop over frequencies and inner loop over nodes.
+//MACRO_ndft(adjoint)
+void nfft_adjoint_direct (nfft_plan *ths)
+{
+ C *f_hat = (C*)ths->f_hat, *f = (C*)ths->f;
+
+ memset(f_hat,0,ths->N_total*sizeof(C));
+
+ if (ths->d == 1)
+ {
+ /* specialize for univariate case, rationale: faster */
+#ifdef _OPENMP
+ int k_L;
+ #pragma omp parallel for default(shared) private(k_L)
+ for(k_L = 0; k_L < ths->N_total; k_L++)
+ {
+ int j;
+ for (j = 0; j < ths->M_total; j++)
+ {
+ R omega = (k_L - (ths->N_total/2)) * K2PI * ths->x[j];
+ f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);
+ }
+ }
+#else
+ int j;
+ for (j = 0; j < ths->M_total; j++)
+ {
+ int k_L;
+ for(k_L = 0; k_L < ths->N_total; k_L++)
+ {
+ R omega = (k_L - (ths->N_total/2)) * K2PI * ths->x[j];
+ f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);
+ }
+ }
+#endif
+ }
+ else
+ {
+ /* multivariate case */
+ int j, k_L;
+#ifdef _OPENMP
+ #pragma omp parallel for default(shared) private(j, k_L)
+ for(k_L = 0; k_L < ths->N_total; k_L++)
+ {
+ int k[ths->d], k_temp, t;
+
+ k_temp = k_L;
+
+ for (t = ths->d-1; t >= 0; t--)
+ {
+ k[t] = k_temp % ths->N[t] - ths->N[t]/2;
+ k_temp /= ths->N[t];
+ }
+
+ for (j = 0; j < ths->M_total; j++)
+ {
+ R omega = 0.0;
+ for (t = 0; t < ths->d; t++)
+ omega += k[t] * K2PI * ths->x[j*ths->d+t];
+ f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);
+ }
+ }
+#else
+ for (j = 0; j < ths->M_total; j++)
+ {
+ R x[ths->d], omega, Omega[ths->d+1];
+ int t, t2, k[ths->d];
+ Omega[0] = ((R) 0.0);
+ for (t = 0; t < ths->d; t++)
+ {
+ k[t] = -ths->N[t]/2;
+ x[t] = K2PI * ths->x[j*ths->d+t];
+ Omega[t+1] = k[t]*x[t] + Omega[t];
+ }
+ omega = Omega[ths->d];
+ for(k_L = 0; k_L < ths->N_total; k_L++)
+ {
+ f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);
+
+ for (t = ths->d-1; (t >= 1) && (k[t] == ths->N[t]/2-1); t--)
+ k[t]-= ths->N[t]-1;
+
+ k[t]++;
+
+ for (t2 = t; t2 < ths->d; t2++)
+ Omega[t2+1] = k[t2]*x[t2] + Omega[t2];
+
+ omega = Omega[ths->d];
+ }
+ }
+#endif
+ }
+}
+
+/** fast computation of non equispaced fourier transforms
+ * require O(N^d log(N) + M_total) arithmetical operations
+ *
+ * fast computation of the nfft_trafo and nfft_conjugated, formula (1.1)
+ * nfft_trafo:
+ * for j=0,...,M_total-1
+ * f[j] = sum_{k in I_N^d} f_hat[k] * exp(-2 (pi) k x[j])
+ * nfft_conjugated:
+ * for j=0,...,M_total-1
+ * f[j] = sum_{k in I_N^d} f_hat[k] * exp(+2 (pi) k x[j])
+ *
+ * direct computation of the nfft_adjoint and nfft_transposed, formula (1.2)
+ * nfft_adjoint:
+ * for k in I_N^d
+ * f_hat[k] = sum_{j=0}^{M_total-1} f[j] * exp(+2(pi) k x[j])
+ * nfft_transposed:
+ * for k in I_N^d
+ * f_hat[k] = sum_{j=0}^{M_total-1} f[j] * exp(-2(pi) k x[j])
+ */
+
+/** macros and small sub routines for the fast transforms
+ */
+
+/** computes 2m+2 indices for the matrix B
+ */
+static inline void nfft_uo(const nfft_plan *ths, const int j, int *up, int *op,
+ const int act_dim)
+{
+ const R xj = ths->x[j * ths->d + act_dim];
+ int c = LRINT(FLOOR(xj * ths->n[act_dim]));
+
+ (*up) = c - (ths->m);
+ (*op) = c + 1 + (ths->m);
+}
+
+static inline void nfft_uo2(int *u, int *o, const R x, const int n, const int m)
+{
+ int c = LRINT(FLOOR(x * n));
+
+ *u = (c - m + n) % n;
+ *o = (c + 1 + m + n) % n;
+}
+
+#define MACRO_nfft_D_compute_A \
+{ \
+ g_hat[k_plain[ths->d]] = f_hat[ks_plain[ths->d]] * c_phi_inv_k[ths->d]; \
+}
+
+#define MACRO_nfft_D_compute_T \
+{ \
+ f_hat[ks_plain[ths->d]] = g_hat[k_plain[ths->d]] * c_phi_inv_k[ths->d]; \
+}
+
+#define MACRO_nfft_D_init_result_A memset(g_hat,0,ths->n_total*sizeof(C));
+
+#define MACRO_nfft_D_init_result_T memset(f_hat,0,ths->N_total*sizeof(C));
+
+#define MACRO_with_PRE_PHI_HUT * ths->c_phi_inv[t2][ks[t2]];
+
+#define MACRO_without_PRE_PHI_HUT / (PHI_HUT(ks[t2]-(ths->N[t2]/2),t2));
+
+#define MACRO_init_k_ks \
+{ \
+ for (t = ths->d-1; 0 <= t; t--) \
+ { \
+ kp[t] = k[t] = 0; \
+ ks[t] = ths->N[t]/2; \
+ } \
+ t++; \
+}
+
+#define MACRO_update_c_phi_inv_k(which_one) \
+{ \
+ for (t2 = t; t2 < ths->d; t2++) \
+ { \
+ c_phi_inv_k[t2+1] = c_phi_inv_k[t2] MACRO_ ##which_one; \
+ ks_plain[t2+1] = ks_plain[t2]*ths->N[t2] + ks[t2]; \
+ k_plain[t2+1] = k_plain[t2]*ths->n[t2] + k[t2]; \
+ } \
+}
+
+#define MACRO_count_k_ks \
+{ \
+ for (t = ths->d-1; (t > 0) && (kp[t] == ths->N[t]-1); t--) \
+ { \
+ kp[t] = k[t] = 0; \
+ ks[t]= ths->N[t]/2; \
+ } \
+ \
+ kp[t]++; k[t]++; ks[t]++; \
+ if(kp[t] == ths->N[t]/2) \
+ { \
+ k[t] = ths->n[t] - ths->N[t]/2; \
+ ks[t] = 0; \
+ } \
+} \
+
+
+/** sub routines for the fast transforms
+ * matrix vector multiplication with \f$D, D^T\f$
+ */
+#define MACRO_nfft_D(which_one) \
+static inline void nfft_D_serial_ ## which_one (nfft_plan *ths) \
+{ \
+ C *f_hat, *g_hat; /**< local copy */\
+ R c_phi_inv_k[ths->d+1]; /**< postfix product of PHI_HUT */\
+ int t, t2; /**< index dimensions */\
+ int k_L; /**< plain index */\
+ int kp[ths->d]; /**< multi index (simple) */\
+ int k[ths->d]; /**< multi index in g_hat */\
+ int ks[ths->d]; /**< multi index in f_hat, c_phi_inv*/\
+ int k_plain[ths->d+1]; /**< postfix plain index */\
+ int ks_plain[ths->d+1]; /**< postfix plain index */\
+ \
+ f_hat = (C*)ths->f_hat; g_hat = (C*)ths->g_hat; \
+ MACRO_nfft_D_init_result_ ## which_one; \
+ \
+ c_phi_inv_k[0] = K(1.0); \
+ k_plain[0] = 0; \
+ ks_plain[0] = 0; \
+ \
+ if (ths->nfft_flags & PRE_PHI_HUT) \
+ { \
+ MACRO_init_k_ks; \
+ \
+ for (k_L = 0; k_L < ths->N_total; k_L++) \
+ { \
+ MACRO_update_c_phi_inv_k(with_PRE_PHI_HUT); \
+ MACRO_nfft_D_compute_ ## which_one; \
+ MACRO_count_k_ks; \
+ } /* for(k_L) */ \
+ } /* if(PRE_PHI_HUT) */ \
+ else \
+ { \
+ MACRO_init_k_ks; \
+ for (k_L = 0; k_L < ths->N_total; k_L++) \
+ { \
+ MACRO_update_c_phi_inv_k(without_PRE_PHI_HUT); \
+ MACRO_nfft_D_compute_ ## which_one; \
+ MACRO_count_k_ks; \
+ } /* for(k_L) */ \
+ } /* else(PRE_PHI_HUT) */ \
+} /* nfft_D */
+
+#ifdef _OPENMP
+static void nfft_D_openmp_A(nfft_plan *ths)
+{
+ C *f_hat, *g_hat; /**< local copy */
+ int k_L; /**< plain index */
+
+ f_hat = (C*)ths->f_hat; g_hat = (C*)ths->g_hat;
+ memset(g_hat,0,ths->n_total*sizeof(C));
+
+ if (ths->nfft_flags & PRE_PHI_HUT)
+ {
+ #pragma omp parallel for default(shared) private(k_L)
+ for (k_L = 0; k_L < ths->N_total; k_L++)
+ {
+ int kp[ths->d]; /**< multi index (simple) */ //0..N-1
+ int k[ths->d]; /**< multi index in g_hat */
+ int ks[ths->d]; /**< multi index in f_hat, c_phi_inv*/
+ R c_phi_inv_k_val = K(1.0);
+ int k_plain_val = 0;
+ int ks_plain_val = 0;
+ int t;
+ int k_temp = k_L;
+
+ for (t = ths->d-1; t >= 0; t--)
+ {
+ kp[t] = k_temp % ths->N[t];
+ if (kp[t] >= ths->N[t]/2)
+ k[t] = ths->n[t] - ths->N[t] + kp[t];
+ else
+ k[t] = kp[t];
+ ks[t] = (kp[t] + ths->N[t]/2) % ths->N[t];
+ k_temp /= ths->N[t];
+ }
+
+ for (t = 0; t < ths->d; t++)
+ {
+ c_phi_inv_k_val *= ths->c_phi_inv[t][ks[t]];
+ ks_plain_val = ks_plain_val*ths->N[t] + ks[t];
+ k_plain_val = k_plain_val*ths->n[t] + k[t];
+ }
+
+ g_hat[k_plain_val] = f_hat[ks_plain_val] * c_phi_inv_k_val;
+ } /* for(k_L) */
+ } /* if(PRE_PHI_HUT) */
+ else
+ {
+ #pragma omp parallel for default(shared) private(k_L)
+ for (k_L = 0; k_L < ths->N_total; k_L++)
+ {
+ int kp[ths->d]; /**< multi index (simple) */ //0..N-1
+ int k[ths->d]; /**< multi index in g_hat */
+ int ks[ths->d]; /**< multi index in f_hat, c_phi_inv*/
+ R c_phi_inv_k_val = K(1.0);
+ int k_plain_val = 0;
+ int ks_plain_val = 0;
+ int t;
+ int k_temp = k_L;
+
+ for (t = ths->d-1; t >= 0; t--)
+ {
+ kp[t] = k_temp % ths->N[t];
+ if (kp[t] >= ths->N[t]/2)
+ k[t] = ths->n[t] - ths->N[t] + kp[t];
+ else
+ k[t] = kp[t];
+ ks[t] = (kp[t] + ths->N[t]/2) % ths->N[t];
+ k_temp /= ths->N[t];
+ }
+
+ for (t = 0; t < ths->d; t++)
+ {
+ c_phi_inv_k_val /= (PHI_HUT(ks[t]-(ths->N[t]/2),t));
+ ks_plain_val = ks_plain_val*ths->N[t] + ks[t];
+ k_plain_val = k_plain_val*ths->n[t] + k[t];
+ }
+
+ g_hat[k_plain_val] = f_hat[ks_plain_val] * c_phi_inv_k_val;
+ } /* for(k_L) */
+ } /* else(PRE_PHI_HUT) */
+}
+#endif
+
+#ifndef _OPENMP
+MACRO_nfft_D(A)
+#endif
+
+static void nfft_D_A(nfft_plan *ths)
+{
+#ifdef _OPENMP
+ nfft_D_openmp_A(ths);
+#else
+ nfft_D_serial_A(ths);
+#endif
+}
+
+#ifdef _OPENMP
+static void nfft_D_openmp_T(nfft_plan *ths)
+{
+ C *f_hat, *g_hat; /**< local copy */
+ int k_L; /**< plain index */
+
+ f_hat = (C*)ths->f_hat; g_hat = (C*)ths->g_hat;
+ memset(f_hat,0,ths->N_total*sizeof(C));
+
+ if (ths->nfft_flags & PRE_PHI_HUT)
+ {
+ #pragma omp parallel for default(shared) private(k_L)
+ for (k_L = 0; k_L < ths->N_total; k_L++)
+ {
+ int kp[ths->d]; /**< multi index (simple) */ //0..N-1
+ int k[ths->d]; /**< multi index in g_hat */
+ int ks[ths->d]; /**< multi index in f_hat, c_phi_inv*/
+ R c_phi_inv_k_val = K(1.0);
+ int k_plain_val = 0;
+ int ks_plain_val = 0;
+ int t;
+ int k_temp = k_L;
+
+ for (t = ths->d-1; t >= 0; t--)
+ {
+ kp[t] = k_temp % ths->N[t];
+ if (kp[t] >= ths->N[t]/2)
+ k[t] = ths->n[t] - ths->N[t] + kp[t];
+ else
+ k[t] = kp[t];
+ ks[t] = (kp[t] + ths->N[t]/2) % ths->N[t];
+ k_temp /= ths->N[t];
+ }
+
+ for (t = 0; t < ths->d; t++)
+ {
+ c_phi_inv_k_val *= ths->c_phi_inv[t][ks[t]];
+ ks_plain_val = ks_plain_val*ths->N[t] + ks[t];
+ k_plain_val = k_plain_val*ths->n[t] + k[t];
+ }
+
+ f_hat[ks_plain_val] = g_hat[k_plain_val] * c_phi_inv_k_val;
+ } /* for(k_L) */
+ } /* if(PRE_PHI_HUT) */
+ else
+ {
+ #pragma omp parallel for default(shared) private(k_L)
+ for (k_L = 0; k_L < ths->N_total; k_L++)
+ {
+ int kp[ths->d]; /**< multi index (simple) */ //0..N-1
+ int k[ths->d]; /**< multi index in g_hat */
+ int ks[ths->d]; /**< multi index in f_hat, c_phi_inv*/
+ R c_phi_inv_k_val = K(1.0);
+ int k_plain_val = 0;
+ int ks_plain_val = 0;
+ int t;
+ int k_temp = k_L;
+
+ for (t = ths->d-1; t >= 0; t--)
+ {
+ kp[t] = k_temp % ths->N[t];
+ if (kp[t] >= ths->N[t]/2)
+ k[t] = ths->n[t] - ths->N[t] + kp[t];
+ else
+ k[t] = kp[t];
+ ks[t] = (kp[t] + ths->N[t]/2) % ths->N[t];
+ k_temp /= ths->N[t];
+ }
+
+ for (t = 0; t < ths->d; t++)
+ {
+ c_phi_inv_k_val /= (PHI_HUT(ks[t]-(ths->N[t]/2),t));
+ ks_plain_val = ks_plain_val*ths->N[t] + ks[t];
+ k_plain_val = k_plain_val*ths->n[t] + k[t];
+ }
+
+ f_hat[ks_plain_val] = g_hat[k_plain_val] * c_phi_inv_k_val;
+ } /* for(k_L) */
+ } /* else(PRE_PHI_HUT) */
+}
+#endif
+
+#ifndef _OPENMP
+MACRO_nfft_D(T)
+#endif
+
+static void nfft_D_T(nfft_plan *ths)
+{
+#ifdef _OPENMP
+ nfft_D_openmp_T(ths);
+#else
+ nfft_D_serial_T(ths);
+#endif
+}
+
+/** sub routines for the fast transforms
+ * matrix vector multiplication with \f$B, B^{\rm T}\f$
+ */
+#define MACRO_nfft_B_init_result_A memset(f,0,ths->M_total*sizeof(C));
+#define MACRO_nfft_B_init_result_T memset(g,0,ths->n_total*sizeof(C));
+
+#define MACRO_nfft_B_PRE_FULL_PSI_compute_A \
+{ \
+ (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]]; \
+}
+
+#define MACRO_nfft_B_PRE_FULL_PSI_compute_T \
+{ \
+ g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj); \
+}
+
+#define MACRO_nfft_B_compute_A \
+{ \
+ (*fj) += phi_prod[ths->d] * g[ll_plain[ths->d]]; \
+}
+
+#define MACRO_nfft_B_compute_T \
+{ \
+ g[ll_plain[ths->d]] += phi_prod[ths->d] * (*fj); \
+}
+
+#define MACRO_with_FG_PSI fg_psi[t2][lj[t2]]
+
+#define MACRO_with_PRE_PSI ths->psi[(j*ths->d+t2) * (2*ths->m+2)+lj[t2]]
+
+#define MACRO_without_PRE_PSI PHI(ths->x[j*ths->d+t2] \
+ - ((R)l[t2])/((R)ths->n[t2]), t2)
+
+#define MACRO_init_uo_l_lj_t \
+{ \
+ for (t = ths->d-1; t >= 0; t--) \
+ { \
+ nfft_uo(ths,j,&u[t],&o[t],t); \
+ l[t] = u[t]; \
+ lj[t] = 0; \
+ } /* for(t) */ \
+ t++; \
+}
+
+#define MACRO_update_phi_prod_ll_plain(which_one) { \
+ for(t2=t; t2<ths->d; t2++) \
+ { \
+ phi_prod[t2+1] = phi_prod[t2]* MACRO_ ## which_one; \
+ ll_plain[t2+1] = ll_plain[t2]*ths->n[t2] +(l[t2]+ths->n[t2])%ths->n[t2];\
+ } /* for(t2) */ \
+}
+
+#define MACRO_count_uo_l_lj_t { \
+ for(t = ths->d-1; (t > 0) && (l[t] == o[t]); t--) \
+ { \
+ l[t] = u[t]; \
+ lj[t] = 0; \
+ } /* for(t) */ \
+ \
+ l[t]++; \
+ lj[t]++; \
+}
+
+#define MACRO_nfft_B(which_one) \
+static inline void nfft_B_serial_ ## which_one (nfft_plan *ths) \
+{ \
+ int lprod; /* 'regular bandwidth' of matrix B */ \
+ int u[ths->d], o[ths->d]; /* multi band with respect to x_j */ \
+ int t, t2; /* index dimensions */ \
+ int j; /* index nodes */ \
+ int l_L, ix; /* index one row of B */ \
+ int l[ths->d]; /* multi index u<=l<=o */ \
+ int lj[ths->d]; /* multi index 0<=lj<u+o+1 */ \
+ int ll_plain[ths->d+1]; /* postfix plain index in g */ \
+ R phi_prod[ths->d+1]; /* postfix product of PHI */ \
+ C *f, *g; /* local copy */ \
+ C *fj; /* local copy */ \
+ R y[ths->d]; \
+ R fg_psi[ths->d][2*ths->m+2]; \
+ R fg_exp_l[ths->d][2*ths->m+2]; \
+ int l_fg,lj_fg; \
+ R tmpEXP1, tmpEXP2, tmpEXP2sq, tmp1, tmp2, tmp3; \
+ R ip_w; \
+ int ip_u; \
+ int ip_s = ths->K/(ths->m+2); \
+ \
+ f = (C*)ths->f; g = (C*)ths->g; \
+ \
+ MACRO_nfft_B_init_result_ ## which_one; \
+ \
+ if (ths->nfft_flags & PRE_FULL_PSI) \
+ { \
+ for (ix = 0, j = 0, fj = f; j < ths->M_total; j++, fj++) \
+ for (l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++) \
+ MACRO_nfft_B_PRE_FULL_PSI_compute_ ## which_one; \
+ return; \
+ } \
+ \
+ phi_prod[0] = K(1.0); \
+ ll_plain[0] = 0; \
+ \
+ for (t = 0, lprod = 1; t < ths->d; t++) \
+ lprod *= (2*ths->m+2); \
+ \
+ if (ths->nfft_flags & PRE_PSI) \
+ { \
+ for (j = 0, fj = f; j < ths->M_total; j++, fj++) \
+ { \
+ MACRO_init_uo_l_lj_t; \
+ \
+ for (l_L = 0; l_L < lprod; l_L++) \
+ { \
+ MACRO_update_phi_prod_ll_plain(with_PRE_PSI); \
+ \
+ MACRO_nfft_B_compute_ ## which_one; \
+ \
+ MACRO_count_uo_l_lj_t; \
+ } /* for(l_L) */ \
+ } /* for(j) */ \
+ return; \
+ } /* if(PRE_PSI) */ \
+ \
+ if (ths->nfft_flags & PRE_FG_PSI) \
+ { \
+ for(t2 = 0; t2 < ths->d; t2++) \
+ { \
+ tmpEXP2 = EXP(K(-1.0)/ths->b[t2]); \
+ tmpEXP2sq = tmpEXP2*tmpEXP2; \
+ tmp2 = K(1.0); \
+ tmp3 = K(1.0); \
+ fg_exp_l[t2][0] = K(1.0); \
+ for(lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++) \
+ { \
+ tmp3 = tmp2*tmpEXP2; \
+ tmp2 *= tmpEXP2sq; \
+ fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3; \
+ } \
+ } \
+ for (j = 0, fj = f; j < ths->M_total; j++, fj++) \
+ { \
+ MACRO_init_uo_l_lj_t; \
+ \
+ for (t2 = 0; t2 < ths->d; t2++) \
+ { \
+ fg_psi[t2][0] = ths->psi[2*(j*ths->d+t2)]; \
+ tmpEXP1 = ths->psi[2*(j*ths->d+t2)+1]; \
+ tmp1 = K(1.0); \
+ for (l_fg = u[t2]+1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++) \
+ { \
+ tmp1 *= tmpEXP1; \
+ fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg]; \
+ } \
+ } \
+ \
+ for (l_L= 0; l_L < lprod; l_L++) \
+ { \
+ MACRO_update_phi_prod_ll_plain(with_FG_PSI); \
+ \
+ MACRO_nfft_B_compute_ ## which_one; \
+ \
+ MACRO_count_uo_l_lj_t; \
+ } /* for(l_L) */ \
+ } /* for(j) */ \
+ return; \
+ } /* if(PRE_FG_PSI) */ \
+ \
+ if (ths->nfft_flags & FG_PSI) \
+ { \
+ for (t2 = 0; t2 < ths->d; t2++) \
+ { \
+ tmpEXP2 = EXP(K(-1.0)/ths->b[t2]); \
+ tmpEXP2sq = tmpEXP2*tmpEXP2; \
+ tmp2 = K(1.0); \
+ tmp3 = K(1.0); \
+ fg_exp_l[t2][0] = K(1.0); \
+ for (lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++) \
+ { \
+ tmp3 = tmp2*tmpEXP2; \
+ tmp2 *= tmpEXP2sq; \
+ fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3; \
+ } \
+ } \
+ for (j = 0, fj = f; j < ths->M_total; j++, fj++) \
+ { \
+ MACRO_init_uo_l_lj_t; \
+ \
+ for (t2 = 0; t2 < ths->d; t2++) \
+ { \
+ fg_psi[t2][0] = (PHI((ths->x[j*ths->d+t2]-((R)u[t2])/ths->n[t2]),t2));\
+ \
+ tmpEXP1 = EXP(K(2.0)*(ths->n[t2]*ths->x[j*ths->d+t2] - u[t2]) \
+ /ths->b[t2]); \
+ tmp1 = K(1.0); \
+ for (l_fg = u[t2] + 1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++) \
+ { \
+ tmp1 *= tmpEXP1; \
+ fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg]; \
+ } \
+ } \
+ \
+ for (l_L = 0; l_L < lprod; l_L++) \
+ { \
+ MACRO_update_phi_prod_ll_plain(with_FG_PSI); \
+ \
+ MACRO_nfft_B_compute_ ## which_one; \
+ \
+ MACRO_count_uo_l_lj_t; \
+ } /* for(l_L) */ \
+ } /* for(j) */ \
+ return; \
+ } /* if(FG_PSI) */ \
+ \
+ if (ths->nfft_flags & PRE_LIN_PSI) \
+ { \
+ for (j = 0, fj=f; j<ths->M_total; j++, fj++) \
+ { \
+ MACRO_init_uo_l_lj_t; \
+ \
+ for (t2 = 0; t2 < ths->d; t2++) \
+ { \
+ y[t2] = ((ths->n[t2]*ths->x[j*ths->d+t2]-(R)u[t2]) \
+ * ((R)ths->K))/(ths->m+2); \
+ ip_u = LRINT(FLOOR(y[t2])); \
+ ip_w = y[t2]-ip_u; \
+ for (l_fg = u[t2], lj_fg = 0; l_fg <= o[t2]; l_fg++, lj_fg++) \
+ { \
+ fg_psi[t2][lj_fg] = ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s)] \
+ * (1-ip_w) + ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s+1)] \
+ * (ip_w); \
+ } \
+ } \
+ \
+ for (l_L = 0; l_L < lprod; l_L++) \
+ { \
+ MACRO_update_phi_prod_ll_plain(with_FG_PSI); \
+ \
+ MACRO_nfft_B_compute_ ## which_one; \
+ \
+ MACRO_count_uo_l_lj_t; \
+ } /* for(l_L) */ \
+ } /* for(j) */ \
+ return; \
+ } /* if(PRE_LIN_PSI) */ \
+ \
+ /* no precomputed psi at all */ \
+ for (j = 0, fj = f; j < ths->M_total; j++, fj++) \
+ { \
+ MACRO_init_uo_l_lj_t; \
+ \
+ for (l_L = 0; l_L < lprod; l_L++) \
+ { \
+ MACRO_update_phi_prod_ll_plain(without_PRE_PSI); \
+ \
+ MACRO_nfft_B_compute_ ## which_one; \
+ \
+ MACRO_count_uo_l_lj_t; \
+ } /* for(l_L) */ \
+ } /* for(j) */ \
+} /* nfft_B */ \
+
+#ifndef _OPENMP
+MACRO_nfft_B(A)
+#endif
+
+#ifdef _OPENMP
+static inline void nfft_B_openmp_A (nfft_plan *ths)
+{
+ int lprod; /* 'regular bandwidth' of matrix B */
+ int k;
+
+ memset(ths->f,0,ths->M_total*sizeof(C));
+
+ for (k = 0, lprod = 1; k < ths->d; k++)
+ lprod *= (2*ths->m+2);
+
+ if (ths->nfft_flags & PRE_FULL_PSI)
+ {
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < ths->M_total; k++)
+ {
+ int l;
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ ths->f[j] = K(0.0);
+ for (l = 0; l < lprod; l++)
+ ths->f[j] += ths->psi[j*lprod+l] * ths->g[ths->psi_index_g[j*lprod+l]];
+ }
+ return;
+ }
+
+ if (ths->nfft_flags & PRE_PSI)
+ {
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < ths->M_total; k++)
+ {
+ int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+ int t, t2; /* index dimensions */
+ int l_L; /* index one row of B */
+ int l[ths->d]; /* multi index u<=l<=o */
+ int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+ int ll_plain[ths->d+1]; /* postfix plain index in g */
+ R phi_prod[ths->d+1]; /* postfix product of PHI */
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ phi_prod[0] = K(1.0);
+ ll_plain[0] = 0;
+
+ MACRO_init_uo_l_lj_t;
+
+ for (l_L = 0; l_L < lprod; l_L++)
+ {
+ MACRO_update_phi_prod_ll_plain(with_PRE_PSI);
+
+ ths->f[j] += phi_prod[ths->d] * ths->g[ll_plain[ths->d]];
+
+ MACRO_count_uo_l_lj_t;
+ } /* for(l_L) */
+ } /* for(j) */
+ return;
+ } /* if(PRE_PSI) */
+
+ if (ths->nfft_flags & PRE_FG_PSI)
+ {
+ int t, t2; /* index dimensions */
+ R fg_exp_l[ths->d][2*ths->m+2];
+
+ for(t2 = 0; t2 < ths->d; t2++)
+ {
+ int lj_fg;
+ R tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);
+ R tmpEXP2sq = tmpEXP2*tmpEXP2;
+ R tmp2 = K(1.0);
+ R tmp3 = K(1.0);
+ fg_exp_l[t2][0] = K(1.0);
+ for(lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++)
+ {
+ tmp3 = tmp2*tmpEXP2;
+ tmp2 *= tmpEXP2sq;
+ fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;
+ }
+ }
+
+ #pragma omp parallel for default(shared) private(k,t,t2)
+ for (k = 0; k < ths->M_total; k++)
+ {
+ int ll_plain[ths->d+1]; /* postfix plain index in g */
+ R phi_prod[ths->d+1]; /* postfix product of PHI */
+ int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+ int l[ths->d]; /* multi index u<=l<=o */
+ int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+ R fg_psi[ths->d][2*ths->m+2];
+ R tmpEXP1, tmp1;
+ int l_fg,lj_fg;
+ int l_L;
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ phi_prod[0] = K(1.0);
+ ll_plain[0] = 0;
+
+ MACRO_init_uo_l_lj_t;
+
+ for (t2 = 0; t2 < ths->d; t2++)
+ {
+ fg_psi[t2][0] = ths->psi[2*(j*ths->d+t2)];
+ tmpEXP1 = ths->psi[2*(j*ths->d+t2)+1];
+ tmp1 = K(1.0);
+ for (l_fg = u[t2]+1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)
+ {
+ tmp1 *= tmpEXP1;
+ fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];
+ }
+ }
+
+ for (l_L= 0; l_L < lprod; l_L++)
+ {
+ MACRO_update_phi_prod_ll_plain(with_FG_PSI);
+
+ ths->f[j] += phi_prod[ths->d] * ths->g[ll_plain[ths->d]];
+
+ MACRO_count_uo_l_lj_t;
+ } /* for(l_L) */
+ } /* for(j) */
+ return;
+ } /* if(PRE_FG_PSI) */
+
+ if (ths->nfft_flags & FG_PSI)
+ {
+ int t, t2; /* index dimensions */
+ R fg_exp_l[ths->d][2*ths->m+2];
+
+ nfft_sort_nodes(ths);
+
+ for (t2 = 0; t2 < ths->d; t2++)
+ {
+ int lj_fg;
+ R tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);
+ R tmpEXP2sq = tmpEXP2*tmpEXP2;
+ R tmp2 = K(1.0);
+ R tmp3 = K(1.0);
+ fg_exp_l[t2][0] = K(1.0);
+ for (lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++)
+ {
+ tmp3 = tmp2*tmpEXP2;
+ tmp2 *= tmpEXP2sq;
+ fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;
+ }
+ }
+
+ #pragma omp parallel for default(shared) private(k,t,t2)
+ for (k = 0; k < ths->M_total; k++)
+ {
+ int ll_plain[ths->d+1]; /* postfix plain index in g */
+ R phi_prod[ths->d+1]; /* postfix product of PHI */
+ int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+ int l[ths->d]; /* multi index u<=l<=o */
+ int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+ R fg_psi[ths->d][2*ths->m+2];
+ R tmpEXP1, tmp1;
+ int l_fg,lj_fg;
+ int l_L;
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ phi_prod[0] = K(1.0);
+ ll_plain[0] = 0;
+
+ MACRO_init_uo_l_lj_t;
+
+ for (t2 = 0; t2 < ths->d; t2++)
+ {
+ fg_psi[t2][0] = (PHI((ths->x[j*ths->d+t2]-((R)u[t2])/ths->n[t2]),t2));
+
+ tmpEXP1 = EXP(K(2.0)*(ths->n[t2]*ths->x[j*ths->d+t2] - u[t2])
+ /ths->b[t2]);
+ tmp1 = K(1.0);
+ for (l_fg = u[t2] + 1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)
+ {
+ tmp1 *= tmpEXP1;
+ fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];
+ }
+ }
+
+ for (l_L = 0; l_L < lprod; l_L++)
+ {
+ MACRO_update_phi_prod_ll_plain(with_FG_PSI);
+
+ ths->f[j] += phi_prod[ths->d] * ths->g[ll_plain[ths->d]];
+
+ MACRO_count_uo_l_lj_t;
+ } /* for(l_L) */
+ } /* for(j) */
+ return;
+ } /* if(FG_PSI) */
+
+ if (ths->nfft_flags & PRE_LIN_PSI)
+ {
+ nfft_sort_nodes(ths);
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k<ths->M_total; k++)
+ {
+ int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+ int t, t2; /* index dimensions */
+ int l_L; /* index one row of B */
+ int l[ths->d]; /* multi index u<=l<=o */
+ int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+ int ll_plain[ths->d+1]; /* postfix plain index in g */
+ R phi_prod[ths->d+1]; /* postfix product of PHI */
+ R y[ths->d];
+ R fg_psi[ths->d][2*ths->m+2];
+ int l_fg,lj_fg;
+ R ip_w;
+ int ip_u;
+ int ip_s = ths->K/(ths->m+2);
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ phi_prod[0] = K(1.0);
+ ll_plain[0] = 0;
+
+ MACRO_init_uo_l_lj_t;
+
+ for (t2 = 0; t2 < ths->d; t2++)
+ {
+ y[t2] = ((ths->n[t2]*ths->x[j*ths->d+t2]-(R)u[t2])
+ * ((R)ths->K))/(ths->m+2);
+ ip_u = LRINT(FLOOR(y[t2]));
+ ip_w = y[t2]-ip_u;
+ for (l_fg = u[t2], lj_fg = 0; l_fg <= o[t2]; l_fg++, lj_fg++)
+ {
+ fg_psi[t2][lj_fg] = ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s)]
+ * (1-ip_w) + ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s+1)]
+ * (ip_w);
+ }
+ }
+
+ for (l_L = 0; l_L < lprod; l_L++)
+ {
+ MACRO_update_phi_prod_ll_plain(with_FG_PSI);
+
+ ths->f[j] += phi_prod[ths->d] * ths->g[ll_plain[ths->d]];
+
+ MACRO_count_uo_l_lj_t;
+ } /* for(l_L) */
+ } /* for(j) */
+ return;
+ } /* if(PRE_LIN_PSI) */
+
+ /* no precomputed psi at all */
+ nfft_sort_nodes(ths);
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < ths->M_total; k++)
+ {
+ int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+ int t, t2; /* index dimensions */
+ int l_L; /* index one row of B */
+ int l[ths->d]; /* multi index u<=l<=o */
+ int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+ int ll_plain[ths->d+1]; /* postfix plain index in g */
+ R phi_prod[ths->d+1]; /* postfix product of PHI */
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ phi_prod[0] = K(1.0);
+ ll_plain[0] = 0;
+
+ MACRO_init_uo_l_lj_t;
+
+ for (l_L = 0; l_L < lprod; l_L++)
+ {
+ MACRO_update_phi_prod_ll_plain(without_PRE_PSI);
+
+ ths->f[j] += phi_prod[ths->d] * ths->g[ll_plain[ths->d]];
+
+ MACRO_count_uo_l_lj_t;
+ } /* for(l_L) */
+ } /* for(j) */
+}
+#endif
+
+static void nfft_B_A(nfft_plan *ths)
+{
+#ifdef _OPENMP
+ nfft_B_openmp_A(ths);
+#else
+ nfft_B_serial_A(ths);
+#endif
+}
+
+#ifdef _OPENMP
+/**
+ * Performs binary search in sorted index array and returns the offset of the
+ * specified key.
+ * If the key is not unique, the index of the left-most element with the
+ * requested key is returned.
+ * If the index array does not contain the key, the index of the next-largest
+ * element is returned.
+ *
+ * \arg ar_x sorted index array containing the key at offset 2*k
+ * and the nodes index at offset 2*k+1
+ * \arg len number of nodes x
+ * \arg key the key value
+ *
+ * \author Toni Volkmer
+ */
+static inline int index_x_binary_search(const int *ar_x, const int len, const int key)
+{
+ int left = 0, right = len - 1;
+
+ if (len == 1)
+ return 0;
+
+ while (left < right - 1)
+ {
+ int i = (left + right) / 2;
+ if (ar_x[2*i] >= key)
+ right = i;
+ else if (ar_x[2*i] < key)
+ left = i;
+ }
+
+ if (ar_x[2*left] < key && left != len-1)
+ return left+1;
+
+ return left;
+}
+#endif
+
+#ifdef _OPENMP
+/**
+ * Determines the blocks of vector g the current thread is responsible for.
+ *
+ * \arg my_u0 lowest index (first component) the current threads writes to in g
+ * \arg my_o0 highest index (first component) the current threads writes to in g
+ * \arg min_u_a lowest (linearized) index u which could lead to writing to g
+ * \arg max_u_a highest (linearized) index u which could lead to writing to g
+ * \arg min_u_b lowest (linearized) index u which could lead to writing to g
+ * \arg max_u_b highest (linearized) index u which could lead to writing to g
+ * \arg d dimensionality
+ * \arg n FFTW length
+ * \arg m window length
+ *
+ * \author Toni Volkmer
+ */
+static void nfft_adjoint_B_omp_blockwise_init(int *my_u0, int *my_o0, int *min_u_a, int *max_u_a, int *min_u_b, int *max_u_b, const int d, const int *n, const int m)
+{
+ const int n0 = n[0];
+ int k;
+ int nthreads = omp_get_num_threads();
+ int nthreads_used = MIN(nthreads, n0);
+ int size_per_thread = n0 / nthreads_used;
+ int size_left = n0 - size_per_thread * nthreads_used;
+ int size_g[nthreads_used];
+ int offset_g[nthreads_used];
+ int my_id = omp_get_thread_num();
+ int n_prod_rest = 1;
+
+ for (k = 1; k < d; k++)
+ n_prod_rest *= n[k];
+
+ *min_u_a = -1;
+ *max_u_a = -1;
+ *min_u_b = -1;
+ *max_u_b = -1;
+ *my_u0 = -1;
+ *my_o0 = -1;
+
+ if (my_id < nthreads_used)
+ {
+ const int m22 = 2 * m + 2;
+
+ offset_g[0] = 0;
+ for (k = 0; k < nthreads_used; k++)
+ {
+ if (k > 0)
+ offset_g[k] = offset_g[k-1] + size_g[k-1];
+ size_g[k] = size_per_thread;
+ if (size_left > 0)
+ {
+ size_g[k]++;
+ size_left--;
+ }
+ }
+
+ *my_u0 = offset_g[my_id];
+ *my_o0 = offset_g[my_id] + size_g[my_id] - 1;
+
+ if (nthreads_used > 1)
+ {
+ *max_u_a = n_prod_rest*(offset_g[my_id] + size_g[my_id]) - 1;
+ *min_u_a = n_prod_rest*(offset_g[my_id] - m22 + 1);
+ }
+ else
+ {
+ *min_u_a = 0;
+ *max_u_a = n_prod_rest * n0 - 1;
+ }
+
+ if (*min_u_a < 0)
+ {
+ *min_u_b = n_prod_rest * (offset_g[my_id] - m22 + 1 + n0);
+ *max_u_b = n_prod_rest * n0 - 1;
+ *min_u_a = 0;
+ }
+
+ if (*min_u_b != -1 && *min_u_b <= *max_u_a)
+ {
+ *max_u_a = *max_u_b;
+ *min_u_b = -1;
+ *max_u_b = -1;
+ }
+#ifdef OMP_ASSERT
+ assert(*min_u_a <= *max_u_a);
+ assert(*min_u_b <= *max_u_b);
+ assert(*min_u_b == -1 || *max_u_a < *min_u_b);
+#endif
+ }
+}
+#endif
+
+/**
+ * Calculates adjoint NFFT for flag PRE_FULL_PSI.
+ * Parallel calculation (OpenMP) with and without atomic operations.
+ *
+ * \arg lprod stride (2*m+2)^d
+ *
+ * \author Toni Volkmer
+ */
+static void nfft_adjoint_B_compute_full_psi(
+ C *g, const int *psi_index_g, const R *psi, const C *f,
+ const int M, const int d, const int *n, const int m, const int nfft_flags, const int *index_x)
+{
+ int k;
+ int lprod, lprod_m1;
+ {
+ int t;
+ for(t = 0, lprod = 1; t < d; t++)
+ lprod *= 2 * m + 2;
+ }
+ lprod_m1 = lprod / (2 * m + 2);
+
+#ifdef _OPENMP
+ if (nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)
+ {
+ #pragma omp parallel private(k)
+ {
+ int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b;
+ const int *ar_x = index_x;
+ int n_prod_rest = 1;
+
+ for (k = 1; k < d; k++)
+ n_prod_rest *= n[k];
+
+ nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, &min_u_b, &max_u_b, d, n, m);
+
+ if (min_u_a != -1)
+ {
+ k = index_x_binary_search(ar_x, M, min_u_a);
+#ifdef OMP_ASSERT
+ assert(ar_x[2*k] >= min_u_a || k == M-1);
+ if (k > 0)
+ assert(ar_x[2*k-2] < min_u_a);
+#endif
+ while (k < M)
+ {
+ int l0, lrest;
+ int u_prod = ar_x[2*k];
+ int j = ar_x[2*k+1];
+
+ if (u_prod < min_u_a || u_prod > max_u_a)
+ break;
+
+ for (l0 = 0; l0 < 2 * m + 2; l0++)
+ {
+ const int start_index = psi_index_g[j * lprod + l0 * lprod_m1];
+
+ if (start_index < my_u0 * n_prod_rest || start_index > (my_o0+1) * n_prod_rest - 1)
+ continue;
+
+ for (lrest = 0; lrest < lprod_m1; lrest++)
+ {
+ const int l = l0 * lprod_m1 + lrest;
+ g[psi_index_g[j * lprod + l]] += psi[j * lprod + l] * f[j];
+ }
+ }
+
+ k++;
+ }
+ }
+
+ if (min_u_b != -1)
+ {
+ k = index_x_binary_search(ar_x, M, min_u_b);
+#ifdef OMP_ASSERT
+ assert(ar_x[2*k] >= min_u_b || k == M-1);
+ if (k > 0)
+ assert(ar_x[2*k-2] < min_u_b);
+#endif
+ while (k < M)
+ {
+ int l0, lrest;
+ int u_prod = ar_x[2*k];
+ int j = ar_x[2*k+1];
+
+ if (u_prod < min_u_b || u_prod > max_u_b)
+ break;
+
+ for (l0 = 0; l0 < 2 * m + 2; l0++)
+ {
+ const int start_index = psi_index_g[j * lprod + l0 * lprod_m1];
+
+ if (start_index < my_u0 * n_prod_rest || start_index > (my_o0+1) * n_prod_rest - 1)
+ continue;
+ for (lrest = 0; lrest < lprod_m1; lrest++)
+ {
+ const int l = l0 * lprod_m1 + lrest;
+ g[psi_index_g[j * lprod + l]] += psi[j * lprod + l] * f[j];
+ }
+ }
+
+ k++;
+ }
+ }
+ } /* omp parallel */
+ return;
+ } /* if(NFFT_OMP_BLOCKWISE_ADJOINT) */
+#endif
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int l;
+ int j = (nfft_flags & NFFT_SORT_NODES) ? index_x[2*k+1] : k;
+
+ for (l = 0; l < lprod; l++)
+ {
+#ifdef _OPENMP
+ C val = psi[j * lprod + l] * f[j];
+ C *gref = g + psi_index_g[j * lprod + l];
+ R *gref_real = (R*) gref;
+
+ #pragma omp atomic
+ gref_real[0] += creal(val);
+
+ #pragma omp atomic
+ gref_real[1] += cimag(val);
+#else
+ g[psi_index_g[j * lprod + l]] += psi[j * lprod + l] * f[j];
+#endif
+ }
+ }
+}
+
+#ifndef _OPENMP
+MACRO_nfft_B(T)
+#endif
+
+#ifdef _OPENMP
+static inline void nfft_B_openmp_T(nfft_plan *ths)
+{
+ int lprod; /* 'regular bandwidth' of matrix B */
+ int k;
+
+ memset(ths->g,0,ths->n_total*sizeof(C));
+
+ for (k = 0, lprod = 1; k < ths->d; k++)
+ lprod *= (2*ths->m+2);
+
+ if (ths->nfft_flags & PRE_FULL_PSI)
+ {
+ nfft_adjoint_B_compute_full_psi(ths->g, ths->psi_index_g, ths->psi, ths->f, ths->M_total,
+ ths->d, ths->n, ths->m, ths->nfft_flags, ths->index_x);
+ return;
+ }
+
+ if (ths->nfft_flags & PRE_PSI)
+ {
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < ths->M_total; k++)
+ {
+ int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+ int t, t2; /* index dimensions */
+ int l_L; /* index one row of B */
+ int l[ths->d]; /* multi index u<=l<=o */
+ int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+ int ll_plain[ths->d+1]; /* postfix plain index in g */
+ R phi_prod[ths->d+1]; /* postfix product of PHI */
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ phi_prod[0] = K(1.0);
+ ll_plain[0] = 0;
+
+ MACRO_init_uo_l_lj_t;
+
+ for (l_L = 0; l_L < lprod; l_L++)
+ {
+ C *lhs;
+ R *lhs_real;
+ C val;
+
+ MACRO_update_phi_prod_ll_plain(with_PRE_PSI);
+
+ lhs = ths->g + ll_plain[ths->d];
+ lhs_real = (R*)lhs;
+ val = phi_prod[ths->d] * ths->f[j];
+
+ #pragma omp atomic
+ lhs_real[0] += creal(val);
+
+ #pragma omp atomic
+ lhs_real[1] += cimag(val);
+
+ MACRO_count_uo_l_lj_t;
+ } /* for(l_L) */
+ } /* for(j) */
+ return;
+ } /* if(PRE_PSI) */
+
+ if (ths->nfft_flags & PRE_FG_PSI)
+ {
+ int t, t2; /* index dimensions */
+ R fg_exp_l[ths->d][2*ths->m+2];
+ for(t2 = 0; t2 < ths->d; t2++)
+ {
+ int lj_fg;
+ R tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);
+ R tmpEXP2sq = tmpEXP2*tmpEXP2;
+ R tmp2 = K(1.0);
+ R tmp3 = K(1.0);
+ fg_exp_l[t2][0] = K(1.0);
+ for(lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++)
+ {
+ tmp3 = tmp2*tmpEXP2;
+ tmp2 *= tmpEXP2sq;
+ fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;
+ }
+ }
+
+ #pragma omp parallel for default(shared) private(k,t,t2)
+ for (k = 0; k < ths->M_total; k++)
+ {
+ int ll_plain[ths->d+1]; /* postfix plain index in g */
+ R phi_prod[ths->d+1]; /* postfix product of PHI */
+ int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+ int l[ths->d]; /* multi index u<=l<=o */
+ int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+ R fg_psi[ths->d][2*ths->m+2];
+ R tmpEXP1, tmp1;
+ int l_fg,lj_fg;
+ int l_L;
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ phi_prod[0] = K(1.0);
+ ll_plain[0] = 0;
+
+ MACRO_init_uo_l_lj_t;
+
+ for (t2 = 0; t2 < ths->d; t2++)
+ {
+ fg_psi[t2][0] = ths->psi[2*(j*ths->d+t2)];
+ tmpEXP1 = ths->psi[2*(j*ths->d+t2)+1];
+ tmp1 = K(1.0);
+ for (l_fg = u[t2]+1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)
+ {
+ tmp1 *= tmpEXP1;
+ fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];
+ }
+ }
+
+ for (l_L= 0; l_L < lprod; l_L++)
+ {
+ C *lhs;
+ R *lhs_real;
+ C val;
+
+ MACRO_update_phi_prod_ll_plain(with_FG_PSI);
+
+ lhs = ths->g + ll_plain[ths->d];
+ lhs_real = (R*)lhs;
+ val = phi_prod[ths->d] * ths->f[j];
+
+ #pragma omp atomic
+ lhs_real[0] += creal(val);
+
+ #pragma omp atomic
+ lhs_real[1] += cimag(val);
+
+ MACRO_count_uo_l_lj_t;
+ } /* for(l_L) */
+ } /* for(j) */
+ return;
+ } /* if(PRE_FG_PSI) */
+
+ if (ths->nfft_flags & FG_PSI)
+ {
+ int t, t2; /* index dimensions */
+ R fg_exp_l[ths->d][2*ths->m+2];
+
+ nfft_sort_nodes(ths);
+
+ for (t2 = 0; t2 < ths->d; t2++)
+ {
+ int lj_fg;
+ R tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);
+ R tmpEXP2sq = tmpEXP2*tmpEXP2;
+ R tmp2 = K(1.0);
+ R tmp3 = K(1.0);
+ fg_exp_l[t2][0] = K(1.0);
+ for (lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++)
+ {
+ tmp3 = tmp2*tmpEXP2;
+ tmp2 *= tmpEXP2sq;
+ fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;
+ }
+ }
+
+ #pragma omp parallel for default(shared) private(k,t,t2)
+ for (k = 0; k < ths->M_total; k++)
+ {
+ int ll_plain[ths->d+1]; /* postfix plain index in g */
+ R phi_prod[ths->d+1]; /* postfix product of PHI */
+ int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+ int l[ths->d]; /* multi index u<=l<=o */
+ int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+ R fg_psi[ths->d][2*ths->m+2];
+ R tmpEXP1, tmp1;
+ int l_fg,lj_fg;
+ int l_L;
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ phi_prod[0] = K(1.0);
+ ll_plain[0] = 0;
+
+ MACRO_init_uo_l_lj_t;
+
+ for (t2 = 0; t2 < ths->d; t2++)
+ {
+ fg_psi[t2][0] = (PHI((ths->x[j*ths->d+t2]-((R)u[t2])/ths->n[t2]),t2));
+
+ tmpEXP1 = EXP(K(2.0)*(ths->n[t2]*ths->x[j*ths->d+t2] - u[t2])
+ /ths->b[t2]);
+ tmp1 = K(1.0);
+ for (l_fg = u[t2] + 1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)
+ {
+ tmp1 *= tmpEXP1;
+ fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];
+ }
+ }
+
+ for (l_L = 0; l_L < lprod; l_L++)
+ {
+ C *lhs;
+ R *lhs_real;
+ C val;
+
+ MACRO_update_phi_prod_ll_plain(with_FG_PSI);
+
+ lhs = ths->g + ll_plain[ths->d];
+ lhs_real = (R*)lhs;
+ val = phi_prod[ths->d] * ths->f[j];
+
+ #pragma omp atomic
+ lhs_real[0] += creal(val);
+
+ #pragma omp atomic
+ lhs_real[1] += cimag(val);
+
+ MACRO_count_uo_l_lj_t;
+ } /* for(l_L) */
+ } /* for(j) */
+ return;
+ } /* if(FG_PSI) */
+
+ if (ths->nfft_flags & PRE_LIN_PSI)
+ {
+ nfft_sort_nodes(ths);
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k<ths->M_total; k++)
+ {
+ int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+ int t, t2; /* index dimensions */
+ int l_L; /* index one row of B */
+ int l[ths->d]; /* multi index u<=l<=o */
+ int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+ int ll_plain[ths->d+1]; /* postfix plain index in g */
+ R phi_prod[ths->d+1]; /* postfix product of PHI */
+ R y[ths->d];
+ R fg_psi[ths->d][2*ths->m+2];
+ int l_fg,lj_fg;
+ R ip_w;
+ int ip_u;
+ int ip_s = ths->K/(ths->m+2);
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ phi_prod[0] = K(1.0);
+ ll_plain[0] = 0;
+
+ MACRO_init_uo_l_lj_t;
+
+ for (t2 = 0; t2 < ths->d; t2++)
+ {
+ y[t2] = ((ths->n[t2]*ths->x[j*ths->d+t2]-(R)u[t2])
+ * ((R)ths->K))/(ths->m+2);
+ ip_u = LRINT(FLOOR(y[t2]));
+ ip_w = y[t2]-ip_u;
+ for (l_fg = u[t2], lj_fg = 0; l_fg <= o[t2]; l_fg++, lj_fg++)
+ {
+ fg_psi[t2][lj_fg] = ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s)]
+ * (1-ip_w) + ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s+1)]
+ * (ip_w);
+ }
+ }
+
+ for (l_L = 0; l_L < lprod; l_L++)
+ {
+ C *lhs;
+ R *lhs_real;
+ C val;
+
+ MACRO_update_phi_prod_ll_plain(with_FG_PSI);
+
+ lhs = ths->g + ll_plain[ths->d];
+ lhs_real = (R*)lhs;
+ val = phi_prod[ths->d] * ths->f[j];
+
+ #pragma omp atomic
+ lhs_real[0] += creal(val);
+
+ #pragma omp atomic
+ lhs_real[1] += cimag(val);
+
+ MACRO_count_uo_l_lj_t;
+ } /* for(l_L) */
+ } /* for(j) */
+ return;
+ } /* if(PRE_LIN_PSI) */
+
+ /* no precomputed psi at all */
+ nfft_sort_nodes(ths);
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < ths->M_total; k++)
+ {
+ int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+ int t, t2; /* index dimensions */
+ int l_L; /* index one row of B */
+ int l[ths->d]; /* multi index u<=l<=o */
+ int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+ int ll_plain[ths->d+1]; /* postfix plain index in g */
+ R phi_prod[ths->d+1]; /* postfix product of PHI */
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ phi_prod[0] = K(1.0);
+ ll_plain[0] = 0;
+
+ MACRO_init_uo_l_lj_t;
+
+ for (l_L = 0; l_L < lprod; l_L++)
+ {
+ C *lhs;
+ R *lhs_real;
+ C val;
+
+ MACRO_update_phi_prod_ll_plain(without_PRE_PSI);
+
+ lhs = ths->g + ll_plain[ths->d];
+ lhs_real = (R*)lhs;
+ val = phi_prod[ths->d] * ths->f[j];
+
+ #pragma omp atomic
+ lhs_real[0] += creal(val);
+
+ #pragma omp atomic
+ lhs_real[1] += cimag(val);
+
+ MACRO_count_uo_l_lj_t;
+ } /* for(l_L) */
+ } /* for(j) */
+}
+#endif
+
+static void nfft_B_T(nfft_plan *ths)
+{
+#ifdef _OPENMP
+ nfft_B_openmp_T(ths);
+#else
+ nfft_B_serial_T(ths);
+#endif
+}
+
+/* ## specialized version for d=1 ########################################### */
+
+static void nfft_1d_init_fg_exp_l(R *fg_exp_l, const int m, const R b)
+{
+ const int tmp2 = 2*m+2;
+ int l;
+ R fg_exp_b0, fg_exp_b1, fg_exp_b2, fg_exp_b0_sq;
+
+ fg_exp_b0 = EXP(K(-1.0)/b);
+ fg_exp_b0_sq = fg_exp_b0*fg_exp_b0;
+ fg_exp_b1 = fg_exp_b2 =fg_exp_l[0] = K(1.0);
+
+ for (l = 1; l < tmp2; l++)
+ {
+ fg_exp_b2 = fg_exp_b1*fg_exp_b0;
+ fg_exp_b1 *= fg_exp_b0_sq;
+ fg_exp_l[l] = fg_exp_l[l-1]*fg_exp_b2;
+ }
+}
+
+
+static void nfft_trafo_1d_compute(C *fj, const C *g,const R *psij_const,
+ const R *xj, const int n, const int m)
+{
+ int u, o, l;
+ const C *gj;
+ const R *psij;
+ psij = psij_const;
+
+ nfft_uo2(&u, &o, *xj, n, m);
+
+ if (u < o)
+ {
+ for (l = 1, gj = g + u, (*fj) = (*psij++) * (*gj++); l <= 2*m+1; l++)
+ (*fj) += (*psij++) * (*gj++);
+ }
+ else
+ {
+ for (l = 1, gj = g + u, (*fj) = (*psij++) * (*gj++); l < 2*m+1 - o; l++)
+ (*fj) += (*psij++) * (*gj++);
+ for (l = 0, gj = g; l <= o; l++)
+ (*fj) += (*psij++) * (*gj++);
+ }
+}
+
+#ifndef _OPENMP
+static void nfft_adjoint_1d_compute_serial(const C *fj, C *g,const R *psij_const,
+ const R *xj, const int n, const int m)
+{
+ int u,o,l;
+ C *gj;
+ const R *psij;
+ psij=psij_const;
+
+ nfft_uo2(&u,&o,*xj, n, m);
+
+ if(u<o)
+ {
+ for (l = 0, gj = g+u; l <= 2*m+1; l++)
+ (*gj++) += (*psij++) * (*fj);
+ }
+ else
+ {
+ for (l = 0, gj = g+u; l < 2*m+1-o; l++)
+ (*gj++) += (*psij++) * (*fj);
+ for (l = 0, gj = g; l <= o; l++)
+ (*gj++) += (*psij++) * (*fj);
+ }
+}
+#endif
+
+#ifdef _OPENMP
+/* adjoint NFFT one-dimensional case with OpenMP atomic operations */
+static void nfft_adjoint_1d_compute_omp_atomic(const C f, C *g,const R *psij_const,
+ const R *xj, const int n, const int m)
+{
+ int u,o,l;
+ C *gj;
+ int index_temp[2*m+2];
+
+ nfft_uo2(&u,&o,*xj, n, m);
+
+ for (l=0; l<=2*m+1; l++)
+ index_temp[l] = (l+u)%n;
+
+ for (l = 0, gj = g+u; l <= 2*m+1; l++)
+ {
+ int i = index_temp[l];
+ C *lhs = g+i;
+ R *lhs_real = (R*)lhs;
+ C val = psij_const[l] * f;
+ #pragma omp atomic
+ lhs_real[0] += creal(val);
+
+ #pragma omp atomic
+ lhs_real[1] += cimag(val);
+ }
+}
+#endif
+
+#ifdef _OPENMP
+/**
+ * Adjoint NFFT for one-dimensional case updating only a specified range of
+ * vector g.
+ *
+ * \arg f input coefficient f[j]
+ * \arg g output vector g
+ * \arg psij_const vector of window function values
+ * \arg xj node x[j]
+ * \arg n FFTW length (number oversampled Fourier coefficients)
+ * \arg m window length
+ * \arg my_u0 lowest index the current thread writes to in g
+ * \arg my_o0 highest index the current thread writes to in g
+ *
+ * \author Toni Volkmer
+ */
+static void nfft_adjoint_1d_compute_omp_blockwise(const C f, C *g,const R *psij_const,
+ const R *xj, const int n, const int m, const int my_u0, const int my_o0)
+{
+ int ar_u,ar_o,l;
+
+ nfft_uo2(&ar_u,&ar_o,*xj, n, m);
+
+ if(ar_u<ar_o)
+ {
+ int u = MAX(my_u0,ar_u);
+ int o = MIN(my_o0,ar_o);
+ int offset_psij = u-ar_u;
+#ifdef OMP_ASSERT
+ assert(offset_psij >= 0);
+ assert(o-u <= 2*m+1);
+ assert(offset_psij+o-u <= 2*m+1);
+#endif
+
+ for (l = 0; l <= o-u; l++)
+ g[u+l] += psij_const[offset_psij+l] * f;
+ }
+ else
+ {
+ int u = MAX(my_u0,ar_u);
+ int o = my_o0;
+ int offset_psij = u-ar_u;
+#ifdef OMP_ASSERT
+ assert(offset_psij >= 0);
+ assert(o-u <= 2*m+1);
+ assert(offset_psij+o-u <= 2*m+1);
+#endif
+
+ for (l = 0; l <= o-u; l++)
+ g[u+l] += psij_const[offset_psij+l] * f;
+
+ u = my_u0;
+ o = MIN(my_o0,ar_o);
+ offset_psij += my_u0-ar_u+n;
+
+#ifdef OMP_ASSERT
+ if (u<=o)
+ {
+ assert(o-u <= 2*m+1);
+ if (offset_psij+o-u > 2*m+1)
+ {
+ fprintf(stderr, "ERR: %d %d %d %d %d %d %d\n", ar_u, ar_o, my_u0, my_o0, u, o, offset_psij);
+ }
+ assert(offset_psij+o-u <= 2*m+1);
+ }
+#endif
+ for (l = 0; l <= o-u; l++)
+ g[u+l] += psij_const[offset_psij+l] * f;
+ }
+}
+#endif
+
+static void nfft_trafo_1d_B(nfft_plan *ths)
+{
+ const int n = ths->n[0], M = ths->M_total, m = ths->m, m2p2 = 2*m+2;
+ const C *g = (C*)ths->g;
+
+ if (ths->nfft_flags & PRE_FULL_PSI)
+ {
+ int k;
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int l;
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ ths->f[j] = K(0.0);
+ for (l = 0; l < m2p2; l++)
+ ths->f[j] += ths->psi[j*m2p2+l] * g[ths->psi_index_g[j*m2p2+l]];
+ }
+ return;
+ } /* if(PRE_FULL_PSI) */
+
+ if (ths->nfft_flags & PRE_PSI)
+ {
+ int k;
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ nfft_trafo_1d_compute(&ths->f[j], g, ths->psi + j * (2 * m + 2),
+ &ths->x[j], n, m);
+ }
+ return;
+ } /* if(PRE_PSI) */
+
+ if (ths->nfft_flags & PRE_FG_PSI)
+ {
+ int k;
+ R fg_exp_l[m2p2];
+
+ nfft_1d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ const R fg_psij0 = ths->psi[2 * j], fg_psij1 = ths->psi[2 * j + 1];
+ R fg_psij2 = K(1.0);
+ R psij_const[m2p2];
+ int l;
+
+ psij_const[0] = fg_psij0;
+
+ for (l = 1; l < m2p2; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];
+ }
+
+ nfft_trafo_1d_compute(&ths->f[j], g, psij_const, &ths->x[j], n, m);
+ }
+
+ return;
+ } /* if(PRE_FG_PSI) */
+
+ if (ths->nfft_flags & FG_PSI)
+ {
+ int k;
+ R fg_exp_l[m2p2];
+
+ nfft_sort_nodes(ths);
+
+ nfft_1d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ int u, o, l;
+ R fg_psij0, fg_psij1, fg_psij2;
+ R psij_const[m2p2];
+
+ nfft_uo(ths, (int)j, &u, &o, 0);
+ fg_psij0 = (PHI(ths->x[j]-((R)u)/n,0));
+ fg_psij1 = EXP(K(2.0) * (n * ths->x[j] - u) / ths->b[0]);
+ fg_psij2 = K(1.0);
+
+ psij_const[0] = fg_psij0;
+
+ for (l = 1; l < m2p2; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];
+ }
+
+ nfft_trafo_1d_compute(&ths->f[j], g, psij_const, &ths->x[j], n, m);
+ }
+ return;
+ } /* if(FG_PSI) */
+
+ if (ths->nfft_flags & PRE_LIN_PSI)
+ {
+ const int K = ths->K, ip_s = K / (m + 2);
+ int k;
+
+ nfft_sort_nodes(ths);
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int u, o, l;
+ R ip_y, ip_w;
+ int ip_u;
+ R psij_const[m2p2];
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ nfft_uo(ths, (int)j, &u, &o, 0);
+
+ ip_y = FABS(n * ths->x[j] - u) * ((R)ip_s);
+ ip_u = LRINT(FLOOR(ip_y));
+ ip_w = ip_y - ip_u;
+
+ for (l = 0; l < m2p2; l++)
+ psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)] * (K(1.0) - ip_w)
+ + ths->psi[ABS(ip_u-l*ip_s+1)] * (ip_w);
+
+ nfft_trafo_1d_compute(&ths->f[j], g, psij_const, &ths->x[j], n, m);
+ }
+ return;
+ } /* if(PRE_LIN_PSI) */
+ else
+ {
+ /* no precomputed psi at all */
+ int k;
+
+ nfft_sort_nodes(ths);
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ R psij_const[m2p2];
+ int u, o, l;
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ nfft_uo(ths, (int)j, &u, &o, 0);
+
+ for (l = 0; l < m2p2; l++)
+ psij_const[l] = (PHI(ths->x[j]-((R)((u+l)))/n,0));
+
+ nfft_trafo_1d_compute(&ths->f[j], g, psij_const, &ths->x[j], n, m);
+ }
+ }
+}
+
+
+#ifdef OMP_ASSERT
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A \
+{ \
+ assert(ar_x[2*k] >= min_u_a || k == M-1); \
+ if (k > 0) \
+ assert(ar_x[2*k-2] < min_u_a); \
+}
+#else
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A
+#endif
+
+#ifdef OMP_ASSERT
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B \
+{ \
+ assert(ar_x[2*k] >= min_u_b || k == M-1); \
+ if (k > 0) \
+ assert(ar_x[2*k-2] < min_u_b); \
+}
+#else
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B
+#endif
+
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI \
+{ \
+ nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, \
+ ths->psi + j * (2 * m + 2), ths->x + j, n, m, my_u0, my_o0); \
+}
+
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI \
+{ \
+ R psij_const[2 * m + 2]; \
+ int u, o, l; \
+ R fg_psij0 = ths->psi[2 * j]; \
+ R fg_psij1 = ths->psi[2 * j + 1]; \
+ R fg_psij2 = K(1.0); \
+ \
+ psij_const[0] = fg_psij0; \
+ for (l = 1; l <= 2 * m + 1; l++) \
+ { \
+ fg_psij2 *= fg_psij1; \
+ psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l]; \
+ } \
+ \
+ nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const, \
+ ths->x + j, n, m, my_u0, my_o0); \
+}
+
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI \
+{ \
+ R psij_const[2 * m + 2]; \
+ R fg_psij0, fg_psij1, fg_psij2; \
+ int u, o, l; \
+ \
+ nfft_uo(ths, j, &u, &o, 0); \
+ fg_psij0 = (PHI(ths->x[j]-((R)u)/n,0)); \
+ fg_psij1 = EXP(K(2.0) * (n * (ths->x[j]) - u) / ths->b[0]); \
+ fg_psij2 = K(1.0); \
+ psij_const[0] = fg_psij0; \
+ for (l = 1; l <= 2 * m + 1; l++) \
+ { \
+ fg_psij2 *= fg_psij1; \
+ psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l]; \
+ } \
+ \
+ nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const, \
+ ths->x + j, n, m, my_u0, my_o0); \
+}
+
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI \
+{ \
+ R psij_const[2 * m + 2]; \
+ int ip_u; \
+ R ip_y, ip_w; \
+ int u, o, l; \
+ \
+ nfft_uo(ths, j, &u, &o, 0); \
+ \
+ ip_y = FABS(n * ths->x[j] - u) * ((R)ip_s); \
+ ip_u = LRINT(FLOOR(ip_y)); \
+ ip_w = ip_y - ip_u; \
+ for (l = 0; l < 2 * m + 2; l++) \
+ psij_const[l] \
+ = ths->psi[ABS(ip_u-l*ip_s)] * (K(1.0) - ip_w) \
+ + ths->psi[ABS(ip_u-l*ip_s+1)] * (ip_w); \
+ \
+ nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const, \
+ ths->x + j, n, m, my_u0, my_o0); \
+}
+
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI \
+{ \
+ R psij_const[2 * m + 2]; \
+ int u, o, l; \
+ \
+ nfft_uo(ths, j, &u, &o, 0); \
+ \
+ for (l = 0; l <= 2 * m + 1; l++) \
+ psij_const[l] = (PHI(ths->x[j]-((R)((u+l)))/n,0)); \
+ \
+ nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const, \
+ ths->x + j, n, m, my_u0, my_o0); \
+}
+
+#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(whichone) \
+{ \
+ if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT) \
+ { \
+ _Pragma("omp parallel private(k)") \
+ { \
+ int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b; \
+ int *ar_x = ths->index_x; \
+ \
+ nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, \
+ &min_u_b, &max_u_b, 1, &n, m); \
+ \
+ if (min_u_a != -1) \
+ { \
+ k = index_x_binary_search(ar_x, M, min_u_a); \
+ \
+ MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A \
+ \
+ while (k < M) \
+ { \
+ int u_prod = ar_x[2*k]; \
+ int j = ar_x[2*k+1]; \
+ \
+ if (u_prod < min_u_a || u_prod > max_u_a) \
+ break; \
+ \
+ MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \
+ \
+ k++; \
+ } \
+ } \
+ \
+ if (min_u_b != -1) \
+ { \
+ k = index_x_binary_search(ar_x, M, min_u_b); \
+ \
+ MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B \
+ \
+ while (k < M) \
+ { \
+ int u_prod = ar_x[2*k]; \
+ int j = ar_x[2*k+1]; \
+ \
+ if (u_prod < min_u_b || u_prod > max_u_b) \
+ break; \
+ \
+ MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \
+ \
+ k++; \
+ } \
+ } \
+ } /* omp parallel */ \
+ return; \
+ } /* if(NFFT_OMP_BLOCKWISE_ADJOINT) */ \
+}
+
+static void nfft_adjoint_1d_B(nfft_plan *ths)
+{
+ const int n = ths->n[0], M = ths->M_total, m = ths->m;
+ int k;
+ C *g = (C*)ths->g;
+
+ memset(g,0,ths->n_total*sizeof(C));
+
+ if (ths->nfft_flags & PRE_FULL_PSI)
+ {
+ nfft_adjoint_B_compute_full_psi(g, ths->psi_index_g, ths->psi, ths->f, M,
+ 1, ths->n, m, ths->nfft_flags, ths->index_x);
+ return;
+ } /* if(PRE_FULL_PSI) */
+
+ if (ths->nfft_flags & PRE_PSI)
+ {
+#ifdef _OPENMP
+ MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(PRE_PSI)
+#endif
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+#ifdef _OPENMP
+ nfft_adjoint_1d_compute_omp_atomic(ths->f[j], g, ths->psi + j * (2 * m + 2), ths->x + j, n, m);
+#else
+ nfft_adjoint_1d_compute_serial(ths->f + j, g, ths->psi + j * (2 * m + 2), ths->x + j, n, m);
+#endif
+ }
+
+ return;
+ } /* if(PRE_PSI) */
+
+ if (ths->nfft_flags & PRE_FG_PSI)
+ {
+ R fg_exp_l[2 * m + 2];
+
+ nfft_1d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+
+#ifdef _OPENMP
+ MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(PRE_FG_PSI)
+#endif
+
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ R psij_const[2 * m + 2];
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ int l;
+ R fg_psij0 = ths->psi[2 * j];
+ R fg_psij1 = ths->psi[2 * j + 1];
+ R fg_psij2 = K(1.0);
+
+ psij_const[0] = fg_psij0;
+ for (l = 1; l <= 2 * m + 1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];
+ }
+
+#ifdef _OPENMP
+ nfft_adjoint_1d_compute_omp_atomic(ths->f[j], g, psij_const, ths->x + j, n, m);
+#else
+ nfft_adjoint_1d_compute_serial(ths->f + j, g, psij_const, ths->x + j, n, m);
+#endif
+ }
+
+ return;
+ } /* if(PRE_FG_PSI) */
+
+ if (ths->nfft_flags & FG_PSI)
+ {
+ R fg_exp_l[2 * m + 2];
+
+ nfft_1d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+
+ nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+ MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(FG_PSI)
+#endif
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int u,o,l;
+ R psij_const[2 * m + 2];
+ R fg_psij0, fg_psij1, fg_psij2;
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ nfft_uo(ths, j, &u, &o, 0);
+ fg_psij0 = (PHI(ths->x[j]-((R)u)/n,0));
+ fg_psij1 = EXP(K(2.0) * (n * (ths->x[j]) - u) / ths->b[0]);
+ fg_psij2 = K(1.0);
+ psij_const[0] = fg_psij0;
+ for (l = 1; l <= 2 * m + 1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];
+ }
+
+#ifdef _OPENMP
+ nfft_adjoint_1d_compute_omp_atomic(ths->f[j], g, psij_const, ths->x + j, n, m);
+#else
+ nfft_adjoint_1d_compute_serial(ths->f + j, g, psij_const, ths->x + j, n, m);
+#endif
+ }
+
+ return;
+ } /* if(FG_PSI) */
+
+ if (ths->nfft_flags & PRE_LIN_PSI)
+ {
+ const int K = ths->K;
+ const int ip_s = K / (m + 2);
+
+ nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+ MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(PRE_LIN_PSI)
+#endif
+
+ #pragma openmp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int u,o,l;
+ int ip_u;
+ R ip_y, ip_w;
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ R psij_const[2 * m + 2];
+
+ nfft_uo(ths, j, &u, &o, 0);
+
+ ip_y = FABS(n * ths->x[j] - u) * ((R)ip_s);
+ ip_u = LRINT(FLOOR(ip_y));
+ ip_w = ip_y - ip_u;
+ for (l = 0; l < 2 * m + 2; l++)
+ psij_const[l]
+ = ths->psi[ABS(ip_u-l*ip_s)] * (K(1.0) - ip_w)
+ + ths->psi[ABS(ip_u-l*ip_s+1)] * (ip_w);
+
+#ifdef _OPENMP
+ nfft_adjoint_1d_compute_omp_atomic(ths->f[j], g, psij_const, ths->x + j, n, m);
+#else
+ nfft_adjoint_1d_compute_serial(ths->f + j, g, psij_const, ths->x + j, n, m);
+#endif
+ }
+ return;
+ } /* if(PRE_LIN_PSI) */
+
+ /* no precomputed psi at all */
+ nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+ MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(NO_PSI)
+#endif
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int u,o,l;
+ R psij_const[2 * m + 2];
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ nfft_uo(ths, j, &u, &o, 0);
+
+ for (l = 0; l <= 2 * m + 1; l++)
+ psij_const[l] = (PHI(ths->x[j]-((R)((u+l)))/n,0));
+
+#ifdef _OPENMP
+ nfft_adjoint_1d_compute_omp_atomic(ths->f[j], g, psij_const, ths->x + j, n, m);
+#else
+ nfft_adjoint_1d_compute_serial(ths->f + j, g, psij_const, ths->x + j, n, m);
+#endif
+ }
+}
+
+void nfft_trafo_1d(nfft_plan *ths)
+{
+ const int N = ths->N[0], N2 = N/2, n = ths->n[0];
+ C *f_hat1 = (C*)ths->f_hat, *f_hat2 = (C*)&ths->f_hat[N2];
+
+ ths->g_hat = ths->g1;
+ ths->g = ths->g2;
+
+ {
+ C *g_hat1 = (C*)&ths->g_hat[n-N/2], *g_hat2 = (C*)ths->g_hat;
+ R *c_phi_inv1, *c_phi_inv2;
+
+ TIC(0)
+#ifdef _OPENMP
+ {
+ int k;
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < ths->n_total; k++)
+ ths->g_hat[k] = 0.0;
+ }
+#else
+ memset(ths->g_hat, 0, ths->n_total*sizeof(C));
+#endif
+ if(ths->nfft_flags & PRE_PHI_HUT)
+ {
+ int k;
+ c_phi_inv1 = ths->c_phi_inv[0];
+ c_phi_inv2 = &ths->c_phi_inv[0][N2];
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < N2; k++)
+ {
+ g_hat1[k] = f_hat1[k] * c_phi_inv1[k];
+ g_hat2[k] = f_hat2[k] * c_phi_inv2[k];
+ }
+ }
+ else
+ {
+ int k;
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < N2; k++)
+ {
+ g_hat1[k] = f_hat1[k] / (PHI_HUT(k-N2,0));
+ g_hat2[k] = f_hat2[k] / (PHI_HUT(k,0));
+ }
+ }
+ TOC(0)
+
+ TIC_FFTW(1)
+ fftw_execute(ths->my_fftw_plan1);
+ TOC_FFTW(1);
+
+ TIC(2);
+ nfft_trafo_1d_B(ths);
+ TOC(2);
+ }
+}
+
+void nfft_adjoint_1d(nfft_plan *ths)
+{
+ int n,N;
+ C *g_hat1,*g_hat2,*f_hat1,*f_hat2;
+ R *c_phi_inv1, *c_phi_inv2;
+
+ N=ths->N[0];
+ n=ths->n[0];
+
+ ths->g_hat=ths->g1;
+ ths->g=ths->g2;
+
+ f_hat1=(C*)ths->f_hat;
+ f_hat2=(C*)&ths->f_hat[N/2];
+ g_hat1=(C*)&ths->g_hat[n-N/2];
+ g_hat2=(C*)ths->g_hat;
+
+ TIC(2)
+ nfft_adjoint_1d_B(ths);
+ TOC(2)
+
+ TIC_FFTW(1)
+ fftw_execute(ths->my_fftw_plan2);
+ TOC_FFTW(1);
+
+ TIC(0)
+ if(ths->nfft_flags & PRE_PHI_HUT)
+ {
+ int k;
+ c_phi_inv1=ths->c_phi_inv[0];
+ c_phi_inv2=&ths->c_phi_inv[0][N/2];
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < N/2; k++)
+ {
+ f_hat1[k] = g_hat1[k] * c_phi_inv1[k];
+ f_hat2[k] = g_hat2[k] * c_phi_inv2[k];
+ }
+ }
+ else
+ {
+ int k;
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < N/2; k++)
+ {
+ f_hat1[k] = g_hat1[k] / (PHI_HUT(k-N/2,0));
+ f_hat2[k] = g_hat2[k] / (PHI_HUT(k,0));
+ }
+ }
+ TOC(0)
+}
+
+
+/* ############################################################ SPECIFIC VERSIONS FOR d=2 */
+
+static void nfft_2d_init_fg_exp_l(R *fg_exp_l, const int m, const R b)
+{
+ int l;
+ R fg_exp_b0, fg_exp_b1, fg_exp_b2, fg_exp_b0_sq;
+
+ fg_exp_b0 = EXP(K(-1.0)/b);
+ fg_exp_b0_sq = fg_exp_b0*fg_exp_b0;
+ fg_exp_b1 = K(1.0);
+ fg_exp_b2 = K(1.0);
+ fg_exp_l[0] = K(1.0);
+ for(l=1; l <= 2*m+1; l++)
+ {
+ fg_exp_b2 = fg_exp_b1*fg_exp_b0;
+ fg_exp_b1 *= fg_exp_b0_sq;
+ fg_exp_l[l] = fg_exp_l[l-1]*fg_exp_b2;
+ }
+}
+
+static void nfft_trafo_2d_compute(C *fj, const C *g,
+ const R *psij_const0, const R *psij_const1,
+ const R *xj0, const R *xj1,
+ const int n0, const int n1, const int m)
+{
+ int u0,o0,l0,u1,o1,l1;
+ const C *gj;
+ const R *psij0,*psij1;
+
+ psij0=psij_const0;
+ psij1=psij_const1;
+
+ nfft_uo2(&u0,&o0,*xj0, n0, m);
+ nfft_uo2(&u1,&o1,*xj1, n1, m);
+
+ *fj=0;
+
+ if(u0<o0)
+ if(u1<o1)
+ for(l0=0; l0<=2*m+1; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ gj=g+(u0+l0)*n1+u1;
+ for(l1=0; l1<=2*m+1; l1++)
+ (*fj) += (*psij0) * (*psij1++) * (*gj++);
+ }
+ else
+ for(l0=0; l0<=2*m+1; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ gj=g+(u0+l0)*n1+u1;
+ for(l1=0; l1<2*m+1-o1; l1++)
+ (*fj) += (*psij0) * (*psij1++) * (*gj++);
+ gj=g+(u0+l0)*n1;
+ for(l1=0; l1<=o1; l1++)
+ (*fj) += (*psij0) * (*psij1++) * (*gj++);
+ }
+ else
+ if(u1<o1)
+ {
+ for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ gj=g+(u0+l0)*n1+u1;
+ for(l1=0; l1<=2*m+1; l1++)
+ (*fj) += (*psij0) * (*psij1++) * (*gj++);
+ }
+ for(l0=0; l0<=o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ gj=g+l0*n1+u1;
+ for(l1=0; l1<=2*m+1; l1++)
+ (*fj) += (*psij0) * (*psij1++) * (*gj++);
+ }
+ }
+ else
+ {
+ for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ gj=g+(u0+l0)*n1+u1;
+ for(l1=0; l1<2*m+1-o1; l1++)
+ (*fj) += (*psij0) * (*psij1++) * (*gj++);
+ gj=g+(u0+l0)*n1;
+ for(l1=0; l1<=o1; l1++)
+ (*fj) += (*psij0) * (*psij1++) * (*gj++);
+ }
+ for(l0=0; l0<=o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ gj=g+l0*n1+u1;
+ for(l1=0; l1<2*m+1-o1; l1++)
+ (*fj) += (*psij0) * (*psij1++) * (*gj++);
+ gj=g+l0*n1;
+ for(l1=0; l1<=o1; l1++)
+ (*fj) += (*psij0) * (*psij1++) * (*gj++);
+ }
+ }
+}
+
+#ifdef _OPENMP
+/* adjoint NFFT two-dimensional case with OpenMP atomic operations */
+static void nfft_adjoint_2d_compute_omp_atomic(const C f, C *g,
+ const R *psij_const0, const R *psij_const1,
+ const R *xj0, const R *xj1,
+ const int n0, const int n1, const int m)
+{
+ int u0,o0,l0,u1,o1,l1;
+ const int lprod = (2*m+2) * (2*m+2);
+
+ unsigned long int index_temp0[2*m+2];
+ unsigned long int index_temp1[2*m+2];
+
+ nfft_uo2(&u0,&o0,*xj0, n0, m);
+ nfft_uo2(&u1,&o1,*xj1, n1, m);
+
+ for (l0=0; l0<=2*m+1; l0++)
+ index_temp0[l0] = (u0+l0)%n0;
+
+ for (l1=0; l1<=2*m+1; l1++)
+ index_temp1[l1] = (u1+l1)%n1;
+
+ for(l0=0; l0<=2*m+1; l0++)
+ {
+ for(l1=0; l1<=2*m+1; l1++)
+ {
+ unsigned long int i = index_temp0[l0] * n1 + index_temp1[l1];
+ C *lhs = g+i;
+ R *lhs_real = (R*)lhs;
+ C val = psij_const0[l0] * psij_const1[l1] * f;
+
+ #pragma omp atomic
+ lhs_real[0] += creal(val);
+
+ #pragma omp atomic
+ lhs_real[1] += cimag(val);
+ }
+ }
+}
+#endif
+
+#ifdef _OPENMP
+/**
+ * Adjoint NFFT for two-dimensional case updating only a specified range of
+ * vector g.
+ *
+ * \arg f input coefficient f[j]
+ * \arg g output vector g
+ * \arg psij_const0 vector of window function values first component
+ * \arg psij_const1 vector of window function values second component
+ * \arg xj0 node x[2*j]
+ * \arg xj1 node x[2*j+1]
+ * \arg n0 FFTW length (number oversampled Fourier coefficients) first comp.
+ * \arg n1 FFTW length (number oversampled Fourier coefficients) second comp.
+ * \arg m window length
+ * \arg my_u0 lowest index (first component) the current thread writes to
+ * \arg my_o0 highest index (second component) the current thread writes to
+ *
+ * \author Toni Volkmer
+ */
+static void nfft_adjoint_2d_compute_omp_blockwise(const C f, C *g,
+ const R *psij_const0, const R *psij_const1,
+ const R *xj0, const R *xj1,
+ const int n0, const int n1, const int m,
+ const int my_u0, const int my_o0)
+{
+ int ar_u0,ar_o0,l0,u1,o1,l1;
+ const int lprod = (2*m+2) * (2*m+2);
+ unsigned long int index_temp1[2*m+2];
+
+ nfft_uo2(&ar_u0,&ar_o0,*xj0, n0, m);
+ nfft_uo2(&u1,&o1,*xj1, n1, m);
+
+ for (l1=0; l1<=2*m+1; l1++)
+ index_temp1[l1] = (u1+l1)%n1;
+
+ if(ar_u0<ar_o0)
+ {
+ int u0 = MAX(my_u0,ar_u0);
+ int o0 = MIN(my_o0,ar_o0);
+ int offset_psij = u0-ar_u0;
+#ifdef OMP_ASSERT
+ assert(offset_psij >= 0);
+ assert(o0-u0 <= 2*m+1);
+ assert(offset_psij+o0-u0 <= 2*m+1);
+#endif
+
+ for (l0 = 0; l0 <= o0-u0; l0++)
+ {
+ unsigned long int i0 = (u0+l0) * n1;
+ const C val0 = psij_const0[offset_psij+l0];
+
+ for(l1=0; l1<=2*m+1; l1++)
+ g[i0 + index_temp1[l1]] += val0 * psij_const1[l1] * f;
+ }
+ }
+ else
+ {
+ int u0 = MAX(my_u0,ar_u0);
+ int o0 = my_o0;
+ int offset_psij = u0-ar_u0;
+#ifdef OMP_ASSERT
+ assert(offset_psij >= 0);
+ assert(o0-u0 <= 2*m+1);
+ assert(offset_psij+o0-u0 <= 2*m+1);
+#endif
+
+ for (l0 = 0; l0 <= o0-u0; l0++)
+ {
+ unsigned long int i0 = (u0+l0) * n1;
+ const C val0 = psij_const0[offset_psij+l0];
+
+ for(l1=0; l1<=2*m+1; l1++)
+ g[i0 + index_temp1[l1]] += val0 * psij_const1[l1] * f;
+ }
+
+ u0 = my_u0;
+ o0 = MIN(my_o0,ar_o0);
+ offset_psij += my_u0-ar_u0+n0;
+
+#ifdef OMP_ASSERT
+ if (u0<=o0)
+ {
+ assert(o0-u0 <= 2*m+1);
+ assert(offset_psij+o0-u0 <= 2*m+1);
+ }
+#endif
+
+ for (l0 = 0; l0 <= o0-u0; l0++)
+ {
+ unsigned long int i0 = (u0+l0) * n1;
+ const C val0 = psij_const0[offset_psij+l0];
+
+ for(l1=0; l1<=2*m+1; l1++)
+ g[i0 + index_temp1[l1]] += val0 * psij_const1[l1] * f;
+ }
+ }
+}
+#endif
+
+#ifndef _OPENMP
+static void nfft_adjoint_2d_compute_serial(const C *fj, C *g,
+ const R *psij_const0, const R *psij_const1,
+ const R *xj0, const R *xj1,
+ const int n0, const int n1, const int m)
+{
+ int u0,o0,l0,u1,o1,l1;
+ C *gj;
+ const R *psij0,*psij1;
+
+ psij0=psij_const0;
+ psij1=psij_const1;
+
+ nfft_uo2(&u0,&o0,*xj0, n0, m);
+ nfft_uo2(&u1,&o1,*xj1, n1, m);
+
+ if(u0<o0)
+ if(u1<o1)
+ for(l0=0; l0<=2*m+1; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ gj=g+(u0+l0)*n1+u1;
+ for(l1=0; l1<=2*m+1; l1++)
+ (*gj++) += (*psij0) * (*psij1++) * (*fj);
+ }
+ else
+ for(l0=0; l0<=2*m+1; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ gj=g+(u0+l0)*n1+u1;
+ for(l1=0; l1<2*m+1-o1; l1++)
+ (*gj++) += (*psij0) * (*psij1++) * (*fj);
+ gj=g+(u0+l0)*n1;
+ for(l1=0; l1<=o1; l1++)
+ (*gj++) += (*psij0) * (*psij1++) * (*fj);
+ }
+ else
+ if(u1<o1)
+ {
+ for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ gj=g+(u0+l0)*n1+u1;
+ for(l1=0; l1<=2*m+1; l1++)
+ (*gj++) += (*psij0) * (*psij1++) * (*fj);
+ }
+ for(l0=0; l0<=o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ gj=g+l0*n1+u1;
+ for(l1=0; l1<=2*m+1; l1++)
+ (*gj++) += (*psij0) * (*psij1++) * (*fj);
+ }
+ }
+ else
+ {
+ for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ gj=g+(u0+l0)*n1+u1;
+ for(l1=0; l1<2*m+1-o1; l1++)
+ (*gj++) += (*psij0) * (*psij1++) * (*fj);
+ gj=g+(u0+l0)*n1;
+ for(l1=0; l1<=o1; l1++)
+ (*gj++) += (*psij0) * (*psij1++) * (*fj);
+ }
+ for(l0=0; l0<=o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ gj=g+l0*n1+u1;
+ for(l1=0; l1<2*m+1-o1; l1++)
+ (*gj++) += (*psij0) * (*psij1++) * (*fj);
+ gj=g+l0*n1;
+ for(l1=0; l1<=o1; l1++)
+ (*gj++) += (*psij0) * (*psij1++) * (*fj);
+ }
+ }
+}
+#endif
+
+static void nfft_trafo_2d_B(nfft_plan *ths)
+{
+ const C *g = (C*)ths->g;
+ const int N0 = ths->N[0];
+ const int n0 = ths->n[0];
+ const int N1 = ths->N[1];
+ const int n1 = ths->n[1];
+ const int M = ths->M_total;
+ const int m = ths->m;
+
+ int k;
+
+ if(ths->nfft_flags & PRE_FULL_PSI)
+ {
+ const int lprod = (2*m+2) * (2*m+2);
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int l;
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ ths->f[j] = K(0.0);
+ for (l = 0; l < lprod; l++)
+ ths->f[j] += ths->psi[j*lprod+l] * g[ths->psi_index_g[j*lprod+l]];
+ }
+ return;
+ } /* if(PRE_FULL_PSI) */
+
+ if(ths->nfft_flags & PRE_PSI)
+ {
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ nfft_trafo_2d_compute(ths->f+j, g, ths->psi+j*2*(2*m+2), ths->psi+(j*2+1)*(2*m+2), ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+ }
+
+ return;
+ } /* if(PRE_PSI) */
+
+ if(ths->nfft_flags & PRE_FG_PSI)
+ {
+ R fg_exp_l[2*(2*m+2)];
+
+ nfft_2d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+ nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ R psij_const[2*(2*m+2)];
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ int l;
+ R fg_psij0 = ths->psi[2*j*2];
+ R fg_psij1 = ths->psi[2*j*2+1];
+ R fg_psij2 = K(1.0);
+
+ psij_const[0] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
+ }
+
+ fg_psij0 = ths->psi[2*(j*2+1)];
+ fg_psij1 = ths->psi[2*(j*2+1)+1];
+ fg_psij2 = K(1.0);
+ psij_const[2*m+2] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
+ }
+
+ nfft_trafo_2d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+ }
+
+ return;
+ } /* if(PRE_FG_PSI) */
+
+ if(ths->nfft_flags & FG_PSI)
+ {
+ R fg_exp_l[2*(2*m+2)];
+
+ nfft_2d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+ nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
+
+ nfft_sort_nodes(ths);
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int u, o, l;
+ R fg_psij0, fg_psij1, fg_psij2;
+ R psij_const[2*(2*m+2)];
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ nfft_uo(ths,j,&u,&o,0);
+ fg_psij0 = (PHI(ths->x[2*j]-((R)u)/n0,0));
+ fg_psij1 = EXP(K(2.0)*(n0*(ths->x[2*j]) - u)/ths->b[0]);
+ fg_psij2 = K(1.0);
+ psij_const[0] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
+ }
+
+ nfft_uo(ths,j,&u,&o,1);
+ fg_psij0 = (PHI(ths->x[2*j+1]-((R)u)/n1,1));
+ fg_psij1 = EXP(K(2.0)*(n1*(ths->x[2*j+1]) - u)/ths->b[1]);
+ fg_psij2 = K(1.0);
+ psij_const[2*m+2] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
+ }
+
+ nfft_trafo_2d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+ }
+
+ return;
+ } /* if(FG_PSI) */
+
+ if(ths->nfft_flags & PRE_LIN_PSI)
+ {
+ const int K = ths->K, ip_s = K / (m + 2);
+
+ nfft_sort_nodes(ths);
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int u, o, l;
+ R ip_y, ip_w;
+ int ip_u;
+ R psij_const[2*(2*m+2)];
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ nfft_uo(ths,j,&u,&o,0);
+ ip_y = FABS(n0*ths->x[2*j] - u)*((R)ip_s);
+ ip_u = LRINT(FLOOR(ip_y));
+ ip_w = ip_y-ip_u;
+ for(l=0; l < 2*m+2; l++)
+ psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+ nfft_uo(ths,j,&u,&o,1);
+ ip_y = FABS(n1*ths->x[2*j+1] - u)*((R)ip_s);
+ ip_u = LRINT(FLOOR(ip_y));
+ ip_w = ip_y-ip_u;
+ for(l=0; l < 2*m+2; l++)
+ psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+ nfft_trafo_2d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+ }
+ return;
+ } /* if(PRE_LIN_PSI) */
+
+ /* no precomputed psi at all */
+
+ nfft_sort_nodes(ths);
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ R psij_const[2*(2*m+2)];
+ int u, o, l;
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ nfft_uo(ths,j,&u,&o,0);
+ for(l=0;l<=2*m+1;l++)
+ psij_const[l]=(PHI(ths->x[2*j]-((R)((u+l)))/n0,0));
+
+ nfft_uo(ths,j,&u,&o,1);
+ for(l=0;l<=2*m+1;l++)
+ psij_const[2*m+2+l]=(PHI(ths->x[2*j+1]-((R)((u+l)))/n1,1));
+
+ nfft_trafo_2d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+ }
+}
+
+#ifdef OMP_ASSERT
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A \
+{ \
+ assert(ar_x[2*k] >= min_u_a || k == M-1); \
+ if (k > 0) \
+ assert(ar_x[2*k-2] < min_u_a); \
+}
+#else
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A
+#endif
+
+#ifdef OMP_ASSERT
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B \
+{ \
+ assert(ar_x[2*k] >= min_u_b || k == M-1); \
+ if (k > 0) \
+ assert(ar_x[2*k-2] < min_u_b); \
+}
+#else
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B
+#endif
+
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI \
+ nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g, \
+ ths->psi+j*2*(2*m+2), ths->psi+(j*2+1)*(2*m+2), \
+ ths->x+2*j, ths->x+2*j+1, n0, n1, m, my_u0, my_o0);
+
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI \
+{ \
+ R psij_const[2*(2*m+2)]; \
+ int u, o, l; \
+ R fg_psij0 = ths->psi[2*j*2]; \
+ R fg_psij1 = ths->psi[2*j*2+1]; \
+ R fg_psij2 = K(1.0); \
+ \
+ psij_const[0] = fg_psij0; \
+ for(l=1; l<=2*m+1; l++) \
+ { \
+ fg_psij2 *= fg_psij1; \
+ psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l]; \
+ } \
+ \
+ fg_psij0 = ths->psi[2*(j*2+1)]; \
+ fg_psij1 = ths->psi[2*(j*2+1)+1]; \
+ fg_psij2 = K(1.0); \
+ psij_const[2*m+2] = fg_psij0; \
+ for(l=1; l<=2*m+1; l++) \
+ { \
+ fg_psij2 *= fg_psij1; \
+ psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l]; \
+ } \
+ \
+ nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g, \
+ psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, \
+ n0, n1, m, my_u0, my_o0); \
+}
+
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI \
+{ \
+ R psij_const[2*(2*m+2)]; \
+ R fg_psij0, fg_psij1, fg_psij2; \
+ int u, o, l; \
+ \
+ nfft_uo(ths,j,&u,&o,0); \
+ fg_psij0 = (PHI(ths->x[2*j]-((R)u)/n0,0)); \
+ fg_psij1 = EXP(K(2.0)*(n0*(ths->x[2*j]) - u)/ths->b[0]); \
+ fg_psij2 = K(1.0); \
+ psij_const[0] = fg_psij0; \
+ for(l=1; l<=2*m+1; l++) \
+ { \
+ fg_psij2 *= fg_psij1; \
+ psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l]; \
+ } \
+ \
+ nfft_uo(ths,j,&u,&o,1); \
+ fg_psij0 = (PHI(ths->x[2*j+1]-((R)u)/n1,1)); \
+ fg_psij1 = EXP(K(2.0)*(n1*(ths->x[2*j+1]) - u)/ths->b[1]); \
+ fg_psij2 = K(1.0); \
+ psij_const[2*m+2] = fg_psij0; \
+ for(l=1; l<=2*m+1; l++) \
+ { \
+ fg_psij2 *= fg_psij1; \
+ psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l]; \
+ } \
+ \
+ nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g, \
+ psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, \
+ n0, n1, m, my_u0, my_o0); \
+}
+
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI \
+{ \
+ R psij_const[2*(2*m+2)]; \
+ int u, o, l; \
+ int ip_u; \
+ R ip_y, ip_w; \
+ \
+ nfft_uo(ths,j,&u,&o,0); \
+ ip_y = FABS(n0*(ths->x[2*j]) - u)*((R)ip_s); \
+ ip_u = LRINT(FLOOR(ip_y)); \
+ ip_w = ip_y-ip_u; \
+ for(l=0; l < 2*m+2; l++) \
+ psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \
+ ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w); \
+ \
+ nfft_uo(ths,j,&u,&o,1); \
+ ip_y = FABS(n1*(ths->x[2*j+1]) - u)*((R)ip_s); \
+ ip_u = LRINT(FLOOR(ip_y)); \
+ ip_w = ip_y-ip_u; \
+ for(l=0; l < 2*m+2; l++) \
+ psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \
+ ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w); \
+ \
+ nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g, \
+ psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, \
+ n0, n1, m, my_u0, my_o0); \
+}
+
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI \
+{ \
+ R psij_const[2*(2*m+2)]; \
+ int u, o, l; \
+ \
+ nfft_uo(ths,j,&u,&o,0); \
+ for(l=0;l<=2*m+1;l++) \
+ psij_const[l]=(PHI(ths->x[2*j]-((R)((u+l)))/n0,0)); \
+ \
+ nfft_uo(ths,j,&u,&o,1); \
+ for(l=0;l<=2*m+1;l++) \
+ psij_const[2*m+2+l]=(PHI(ths->x[2*j+1]-((R)((u+l)))/n1,1)); \
+ \
+ nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g, \
+ psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, \
+ n0, n1, m, my_u0, my_o0); \
+}
+
+#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(whichone) \
+{ \
+ if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT) \
+ { \
+ _Pragma("omp parallel private(k)") \
+ { \
+ int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b; \
+ int *ar_x = ths->index_x; \
+ \
+ nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, \
+ &min_u_b, &max_u_b, 2, ths->n, m); \
+ \
+ if (min_u_a != -1) \
+ { \
+ k = index_x_binary_search(ar_x, M, min_u_a); \
+ \
+ MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A \
+ \
+ while (k < M) \
+ { \
+ int u_prod = ar_x[2*k]; \
+ int j = ar_x[2*k+1]; \
+ \
+ if (u_prod < min_u_a || u_prod > max_u_a) \
+ break; \
+ \
+ MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \
+ \
+ k++; \
+ } \
+ } \
+ \
+ if (min_u_b != -1) \
+ { \
+ int k = index_x_binary_search(ar_x, M, min_u_b); \
+ \
+ MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B \
+ \
+ while (k < M) \
+ { \
+ int u_prod = ar_x[2*k]; \
+ int j = ar_x[2*k+1]; \
+ \
+ if (u_prod < min_u_b || u_prod > max_u_b) \
+ break; \
+ \
+ MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \
+ \
+ k++; \
+ } \
+ } \
+ } /* omp parallel */ \
+ return; \
+ } /* if(NFFT_OMP_BLOCKWISE_ADJOINT) */ \
+}
+
+
+static void nfft_adjoint_2d_B(nfft_plan *ths)
+{
+ const int N0 = ths->N[0];
+ const int n0 = ths->n[0];
+ const int N1 = ths->N[1];
+ const int n1 = ths->n[1];
+ const int M = ths->M_total;
+ const int m = ths->m;
+ C* g = (C*) ths->g;
+ int k;
+
+ memset(g,0,ths->n_total*sizeof(C));
+
+ if(ths->nfft_flags & PRE_FULL_PSI)
+ {
+ nfft_adjoint_B_compute_full_psi(g, ths->psi_index_g, ths->psi, ths->f, M,
+ 2, ths->n, m, ths->nfft_flags, ths->index_x);
+ return;
+ } /* if(PRE_FULL_PSI) */
+
+ if(ths->nfft_flags & PRE_PSI)
+ {
+#ifdef _OPENMP
+ MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(PRE_PSI)
+#endif
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+#ifdef _OPENMP
+ nfft_adjoint_2d_compute_omp_atomic(ths->f[j], g, ths->psi+j*2*(2*m+2), ths->psi+(j*2+1)*(2*m+2), ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#else
+ nfft_adjoint_2d_compute_serial(ths->f+j, g, ths->psi+j*2*(2*m+2), ths->psi+(j*2+1)*(2*m+2), ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#endif
+ }
+ return;
+ } /* if(PRE_PSI) */
+
+ if(ths->nfft_flags & PRE_FG_PSI)
+ {
+ R fg_exp_l[2*(2*m+2)];
+
+ nfft_2d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+ nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
+
+#ifdef _OPENMP
+ MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(PRE_FG_PSI)
+#endif
+
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ R psij_const[2*(2*m+2)];
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ int l;
+ R fg_psij0 = ths->psi[2*j*2];
+ R fg_psij1 = ths->psi[2*j*2+1];
+ R fg_psij2 = K(1.0);
+
+ psij_const[0] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
+ }
+
+ fg_psij0 = ths->psi[2*(j*2+1)];
+ fg_psij1 = ths->psi[2*(j*2+1)+1];
+ fg_psij2 = K(1.0);
+ psij_const[2*m+2] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
+ }
+
+#ifdef _OPENMP
+ nfft_adjoint_2d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#else
+ nfft_adjoint_2d_compute_serial(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#endif
+ }
+
+ return;
+ } /* if(PRE_FG_PSI) */
+
+ if(ths->nfft_flags & FG_PSI)
+ {
+ R fg_exp_l[2*(2*m+2)];
+
+ nfft_2d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+ nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
+
+ nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+ MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(FG_PSI)
+#endif
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int u, o, l;
+ R fg_psij0, fg_psij1, fg_psij2;
+ R psij_const[2*(2*m+2)];
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ nfft_uo(ths,j,&u,&o,0);
+ fg_psij0 = (PHI(ths->x[2*j]-((R)u)/n0,0));
+ fg_psij1 = EXP(K(2.0)*(n0*(ths->x[2*j]) - u)/ths->b[0]);
+ fg_psij2 = K(1.0);
+ psij_const[0] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
+ }
+
+ nfft_uo(ths,j,&u,&o,1);
+ fg_psij0 = (PHI(ths->x[2*j+1]-((R)u)/n1,1));
+ fg_psij1 = EXP(K(2.0)*(n1*(ths->x[2*j+1]) - u)/ths->b[1]);
+ fg_psij2 = K(1.0);
+ psij_const[2*m+2] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
+ }
+
+#ifdef _OPENMP
+ nfft_adjoint_2d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#else
+ nfft_adjoint_2d_compute_serial(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#endif
+ }
+
+ return;
+ } /* if(FG_PSI) */
+
+ if(ths->nfft_flags & PRE_LIN_PSI)
+ {
+ const int K = ths->K;
+ const int ip_s = K / (m + 2);
+
+ nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+ MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(PRE_LIN_PSI)
+#endif
+
+ #pragma openmp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int u,o,l;
+ int ip_u;
+ R ip_y, ip_w;
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ R psij_const[2*(2*m+2)];
+
+ nfft_uo(ths,j,&u,&o,0);
+ ip_y = FABS(n0*(ths->x[2*j]) - u)*((R)ip_s);
+ ip_u = LRINT(FLOOR(ip_y));
+ ip_w = ip_y-ip_u;
+ for(l=0; l < 2*m+2; l++)
+ psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
+ ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+ nfft_uo(ths,j,&u,&o,1);
+ ip_y = FABS(n1*(ths->x[2*j+1]) - u)*((R)ip_s);
+ ip_u = LRINT(FLOOR(ip_y));
+ ip_w = ip_y-ip_u;
+ for(l=0; l < 2*m+2; l++)
+ psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
+ ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+#ifdef _OPENMP
+ nfft_adjoint_2d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#else
+ nfft_adjoint_2d_compute_serial(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#endif
+ }
+ return;
+ } /* if(PRE_LIN_PSI) */
+
+ /* no precomputed psi at all */
+ nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+ MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(NO_PSI)
+#endif
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int u,o,l;
+ R psij_const[2*(2*m+2)];
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ nfft_uo(ths,j,&u,&o,0);
+ for(l=0;l<=2*m+1;l++)
+ psij_const[l]=(PHI(ths->x[2*j]-((R)((u+l)))/n0,0));
+
+ nfft_uo(ths,j,&u,&o,1);
+ for(l=0;l<=2*m+1;l++)
+ psij_const[2*m+2+l]=(PHI(ths->x[2*j+1]-((R)((u+l)))/n1,1));
+
+#ifdef _OPENMP
+ nfft_adjoint_2d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#else
+ nfft_adjoint_2d_compute_serial(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
+#endif
+ }
+}
+
+
+void nfft_trafo_2d(nfft_plan *ths)
+{
+ int k0,k1,n0,n1,N0,N1;
+ C *g_hat,*f_hat;
+ R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12;
+ R ck01, ck02, ck11, ck12;
+ C *g_hat11,*f_hat11,*g_hat21,*f_hat21,*g_hat12,*f_hat12,*g_hat22,*f_hat22;
+
+ ths->g_hat=ths->g1;
+ ths->g=ths->g2;
+
+ N0=ths->N[0];
+ N1=ths->N[1];
+ n0=ths->n[0];
+ n1=ths->n[1];
+
+ f_hat=(C*)ths->f_hat;
+ g_hat=(C*)ths->g_hat;
+
+ TIC(0)
+#ifdef _OPENMP
+ #pragma omp parallel for default(shared) private(k0)
+ for (k0 = 0; k0 < ths->n_total; k0++)
+ ths->g_hat[k0] = 0.0;
+#else
+ memset(ths->g_hat,0,ths->n_total*sizeof(C));
+#endif
+ if(ths->nfft_flags & PRE_PHI_HUT)
+ {
+ c_phi_inv01=ths->c_phi_inv[0];
+ c_phi_inv02=&ths->c_phi_inv[0][N0/2];
+
+ #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,c_phi_inv11,c_phi_inv12,g_hat11,f_hat11,g_hat21,f_hat21,g_hat12,f_hat12,g_hat22,f_hat22,ck11,ck12)
+ for(k0=0;k0<N0/2;k0++)
+ {
+ ck01=c_phi_inv01[k0];
+ ck02=c_phi_inv02[k0];
+
+ c_phi_inv11=ths->c_phi_inv[1];
+ c_phi_inv12=&ths->c_phi_inv[1][N1/2];
+
+ g_hat11=g_hat + (n0-(N0/2)+k0)*n1+n1-(N1/2);
+ f_hat11=f_hat + k0*N1;
+ g_hat21=g_hat + k0*n1+n1-(N1/2);
+ f_hat21=f_hat + ((N0/2)+k0)*N1;
+ g_hat12=g_hat + (n0-(N0/2)+k0)*n1;
+ f_hat12=f_hat + k0*N1+(N1/2);
+ g_hat22=g_hat + k0*n1;
+ f_hat22=f_hat + ((N0/2)+k0)*N1+(N1/2);
+
+ for(k1=0;k1<N1/2;k1++)
+ {
+ ck11=c_phi_inv11[k1];
+ ck12=c_phi_inv12[k1];
+
+ g_hat11[k1] = f_hat11[k1] * ck01 * ck11;
+ g_hat21[k1] = f_hat21[k1] * ck02 * ck11;
+ g_hat12[k1] = f_hat12[k1] * ck01 * ck12;
+ g_hat22[k1] = f_hat22[k1] * ck02 * ck12;
+ }
+ }
+ }
+ else
+ #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,ck11,ck12)
+ for(k0=0;k0<N0/2;k0++)
+ {
+ ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));
+ ck02=K(1.0)/(PHI_HUT(k0,0));
+ for(k1=0;k1<N1/2;k1++)
+ {
+ ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));
+ ck12=K(1.0)/(PHI_HUT(k1,1));
+ g_hat[(n0-N0/2+k0)*n1+n1-N1/2+k1] = f_hat[k0*N1+k1] * ck01 * ck11;
+ g_hat[k0*n1+n1-N1/2+k1] = f_hat[(N0/2+k0)*N1+k1] * ck02 * ck11;
+ g_hat[(n0-N0/2+k0)*n1+k1] = f_hat[k0*N1+N1/2+k1] * ck01 * ck12;
+ g_hat[k0*n1+k1] = f_hat[(N0/2+k0)*N1+N1/2+k1] * ck02 * ck12;
+ }
+ }
+
+ TOC(0)
+
+ TIC_FFTW(1)
+ fftw_execute(ths->my_fftw_plan1);
+ TOC_FFTW(1);
+
+ TIC(2);
+ nfft_trafo_2d_B(ths);
+ TOC(2);
+}
+
+void nfft_adjoint_2d(nfft_plan *ths)
+{
+ int k0,k1,n0,n1,N0,N1;
+ C *g_hat,*f_hat;
+ R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12;
+ R ck01, ck02, ck11, ck12;
+ C *g_hat11,*f_hat11,*g_hat21,*f_hat21,*g_hat12,*f_hat12,*g_hat22,*f_hat22;
+
+ ths->g_hat=ths->g1;
+ ths->g=ths->g2;
+
+ N0=ths->N[0];
+ N1=ths->N[1];
+ n0=ths->n[0];
+ n1=ths->n[1];
+
+ f_hat=(C*)ths->f_hat;
+ g_hat=(C*)ths->g_hat;
+
+ TIC(2);
+ nfft_adjoint_2d_B(ths);
+ TOC(2);
+
+ TIC_FFTW(1)
+ fftw_execute(ths->my_fftw_plan2);
+ TOC_FFTW(1);
+
+ TIC(0)
+ if(ths->nfft_flags & PRE_PHI_HUT)
+ {
+ c_phi_inv01=ths->c_phi_inv[0];
+ c_phi_inv02=&ths->c_phi_inv[0][N0/2];
+
+ #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,c_phi_inv11,c_phi_inv12,g_hat11,f_hat11,g_hat21,f_hat21,g_hat12,f_hat12,g_hat22,f_hat22,ck11,ck12)
+ for(k0=0;k0<N0/2;k0++)
+ {
+ ck01=c_phi_inv01[k0];
+ ck02=c_phi_inv02[k0];
+
+ c_phi_inv11=ths->c_phi_inv[1];
+ c_phi_inv12=&ths->c_phi_inv[1][N1/2];
+
+ g_hat11=g_hat + (n0-(N0/2)+k0)*n1+n1-(N1/2);
+ f_hat11=f_hat + k0*N1;
+ g_hat21=g_hat + k0*n1+n1-(N1/2);
+ f_hat21=f_hat + ((N0/2)+k0)*N1;
+ g_hat12=g_hat + (n0-(N0/2)+k0)*n1;
+ f_hat12=f_hat + k0*N1+(N1/2);
+ g_hat22=g_hat + k0*n1;
+ f_hat22=f_hat + ((N0/2)+k0)*N1+(N1/2);
+
+ for(k1=0;k1<N1/2;k1++)
+ {
+ ck11=c_phi_inv11[k1];
+ ck12=c_phi_inv12[k1];
+
+ f_hat11[k1] = g_hat11[k1] * ck01 * ck11;
+ f_hat21[k1] = g_hat21[k1] * ck02 * ck11;
+ f_hat12[k1] = g_hat12[k1] * ck01 * ck12;
+ f_hat22[k1] = g_hat22[k1] * ck02 * ck12;
+ }
+ }
+ }
+ else
+ #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,ck11,ck12)
+ for(k0=0;k0<N0/2;k0++)
+ {
+ ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));
+ ck02=K(1.0)/(PHI_HUT(k0,0));
+ for(k1=0;k1<N1/2;k1++)
+ {
+ ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));
+ ck12=K(1.0)/(PHI_HUT(k1,1));
+ f_hat[k0*N1+k1] = g_hat[(n0-N0/2+k0)*n1+n1-N1/2+k1] * ck01 * ck11;
+ f_hat[(N0/2+k0)*N1+k1] = g_hat[k0*n1+n1-N1/2+k1] * ck02 * ck11;
+ f_hat[k0*N1+N1/2+k1] = g_hat[(n0-N0/2+k0)*n1+k1] * ck01 * ck12;
+ f_hat[(N0/2+k0)*N1+N1/2+k1] = g_hat[k0*n1+k1] * ck02 * ck12;
+ }
+ }
+ TOC(0)
+}
+
+/* ############################################################ SPECIFIC VERSIONS FOR d=3 */
+
+static void nfft_3d_init_fg_exp_l(R *fg_exp_l, const int m, const R b)
+{
+ int l;
+ R fg_exp_b0, fg_exp_b1, fg_exp_b2, fg_exp_b0_sq;
+
+ fg_exp_b0 = EXP(-1.0/b);
+ fg_exp_b0_sq = fg_exp_b0*fg_exp_b0;
+ fg_exp_b1 = K(1.0);
+ fg_exp_b2 = K(1.0);
+ fg_exp_l[0] = K(1.0);
+ for(l=1; l <= 2*m+1; l++)
+ {
+ fg_exp_b2 = fg_exp_b1*fg_exp_b0;
+ fg_exp_b1 *= fg_exp_b0_sq;
+ fg_exp_l[l] = fg_exp_l[l-1]*fg_exp_b2;
+ }
+}
+
+static void nfft_trafo_3d_compute(C *fj, const C *g,
+ const R *psij_const0, const R *psij_const1, const R *psij_const2,
+ const R *xj0, const R *xj1, const R *xj2,
+ const int n0, const int n1, const int n2, const int m)
+{
+ int u0,o0,l0,u1,o1,l1,u2,o2,l2;
+ const C *gj;
+ const R *psij0,*psij1,*psij2;
+
+ psij0=psij_const0;
+ psij1=psij_const1;
+ psij2=psij_const2;
+
+ nfft_uo2(&u0,&o0,*xj0, n0, m);
+ nfft_uo2(&u1,&o1,*xj1, n1, m);
+ nfft_uo2(&u2,&o2,*xj2, n2, m);
+
+ *fj=0;
+
+ if(u0<o0)
+ if(u1<o1)
+ if(u2<o2)
+ for(l0=0; l0<=2*m+1; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<=2*m+1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ }
+ else/* asserts (u2>o2)*/
+ for(l0=0; l0<=2*m+1; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<=2*m+1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ gj=g+((u0+l0)*n1+(u1+l1))*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ }
+ else/* asserts (u1>o1)*/
+ if(u2<o2)
+ for(l0=0; l0<=2*m+1; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ for(l1=0; l1<=o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+l1)*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ }
+ else/* asserts (u2>o2) */
+ {
+ for(l0=0; l0<=2*m+1; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ gj=g+((u0+l0)*n1+(u1+l1))*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ for(l1=0; l1<=o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+l1)*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ gj=g+((u0+l0)*n1+l1)*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ }
+ }
+ else/* asserts (u0>o0) */
+ if(u1<o1)
+ if(u2<o2)
+ {
+ for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<=2*m+1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ }
+
+ for(l0=0; l0<=o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<=2*m+1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+(l0*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ }
+ }
+ else/* asserts (u2>o2) */
+ {
+ for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<=2*m+1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ gj=g+((u0+l0)*n1+(u1+l1))*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ }
+
+ for(l0=0; l0<=o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<=2*m+1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+(l0*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ gj=g+(l0*n1+(u1+l1))*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ }
+ }
+ else/* asserts (u1>o1) */
+ if(u2<o2)
+ {
+ for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ for(l1=0; l1<=o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+l1)*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ }
+ for(l0=0; l0<=o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+(l0*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ for(l1=0; l1<=o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+(l0*n1+l1)*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ }
+ }
+ else/* asserts (u2>o2) */
+ {
+ for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ gj=g+((u0+l0)*n1+(u1+l1))*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ for(l1=0; l1<=o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+l1)*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ gj=g+((u0+l0)*n1+l1)*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ }
+
+ for(l0=0; l0<=o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+(l0*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ gj=g+(l0*n1+(u1+l1))*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ for(l1=0; l1<=o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+(l0*n1+l1)*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ gj=g+(l0*n1+l1)*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+ }
+ }
+ }
+}
+
+#ifdef _OPENMP
+/**
+ * Adjoint NFFT for three-dimensional case updating only a specified range of
+ * vector g.
+ *
+ * \arg f input coefficient f[j]
+ * \arg g output vector g
+ * \arg psij_const0 vector of window function values first component
+ * \arg psij_const1 vector of window function values second component
+ * \arg psij_const2 vector of window function values third component
+ * \arg xj0 node x[3*j]
+ * \arg xj1 node x[3*j+1]
+ * \arg xj2 node x[3*j+2]
+ * \arg n0 FFTW length (number oversampled Fourier coefficients) first comp.
+ * \arg n1 FFTW length (number oversampled Fourier coefficients) second comp.
+ * \arg n2 FFTW length (number oversampled Fourier coefficients) third comp.
+ * \arg m window length
+ * \arg my_u0 lowest index (first component) the current thread writes to
+ * \arg my_o0 highest index (second component) the current thread writes to
+ *
+ * \author Toni Volkmer
+ */
+static void nfft_adjoint_3d_compute_omp_blockwise(const C f, C *g,
+ const R *psij_const0, const R *psij_const1, const R *psij_const2,
+ const R *xj0, const R *xj1, const R *xj2,
+ const int n0, const int n1, const int n2, const int m,
+ const int my_u0, const int my_o0)
+{
+ int ar_u0,ar_o0,l0,u1,o1,l1,u2,o2,l2;
+ const int lprod = (2*m+2) * (2*m+2) * (2*m+2);
+
+ unsigned long int index_temp1[2*m+2];
+ unsigned long int index_temp2[2*m+2];
+
+ nfft_uo2(&ar_u0,&ar_o0,*xj0, n0, m);
+ nfft_uo2(&u1,&o1,*xj1, n1, m);
+ nfft_uo2(&u2,&o2,*xj2, n2, m);
+
+ for (l1=0; l1<=2*m+1; l1++)
+ index_temp1[l1] = (u1+l1)%n1;
+
+ for (l2=0; l2<=2*m+1; l2++)
+ index_temp2[l2] = (u2+l2)%n2;
+
+ if(ar_u0<ar_o0)
+ {
+ int u0 = MAX(my_u0,ar_u0);
+ int o0 = MIN(my_o0,ar_o0);
+ int offset_psij = u0-ar_u0;
+#ifdef OMP_ASSERT
+ assert(offset_psij >= 0);
+ assert(o0-u0 <= 2*m+1);
+ assert(offset_psij+o0-u0 <= 2*m+1);
+#endif
+
+ for (l0 = 0; l0 <= o0-u0; l0++)
+ {
+ const unsigned long int i0 = (u0+l0) * n1;
+ const C val0 = psij_const0[offset_psij+l0];
+
+ for(l1=0; l1<=2*m+1; l1++)
+ {
+ const unsigned long int i1 = (i0 + index_temp1[l1]) * n2;
+ const C val1 = psij_const1[l1];
+
+ for(l2=0; l2<=2*m+1; l2++)
+ g[i1 + index_temp2[l2]] += val0 * val1 * psij_const2[l2] * f;
+ }
+ }
+ }
+ else
+ {
+ int u0 = MAX(my_u0,ar_u0);
+ int o0 = my_o0;
+ int offset_psij = u0-ar_u0;
+#ifdef OMP_ASSERT
+ assert(offset_psij >= 0);
+ assert(o0-u0 <= 2*m+1);
+ assert(offset_psij+o0-u0 <= 2*m+1);
+#endif
+
+ for (l0 = 0; l0 <= o0-u0; l0++)
+ {
+ unsigned long int i0 = (u0+l0) * n1;
+ const C val0 = psij_const0[offset_psij+l0];
+
+ for(l1=0; l1<=2*m+1; l1++)
+ {
+ const unsigned long int i1 = (i0 + index_temp1[l1]) * n2;
+ const C val1 = psij_const1[l1];
+
+ for(l2=0; l2<=2*m+1; l2++)
+ g[i1 + index_temp2[l2]] += val0 * val1 * psij_const2[l2] * f;
+ }
+ }
+
+ u0 = my_u0;
+ o0 = MIN(my_o0,ar_o0);
+ offset_psij += my_u0-ar_u0+n0;
+
+#ifdef OMP_ASSERT
+ if (u0<=o0)
+ {
+ assert(o0-u0 <= 2*m+1);
+ assert(offset_psij+o0-u0 <= 2*m+1);
+ }
+#endif
+ for (l0 = 0; l0 <= o0-u0; l0++)
+ {
+ unsigned long int i0 = (u0+l0) * n1;
+ const C val0 = psij_const0[offset_psij+l0];
+
+ for(l1=0; l1<=2*m+1; l1++)
+ {
+ const unsigned long int i1 = (i0 + index_temp1[l1]) * n2;
+ const C val1 = psij_const1[l1];
+
+ for(l2=0; l2<=2*m+1; l2++)
+ g[i1 + index_temp2[l2]] += val0 * val1 * psij_const2[l2] * f;
+ }
+ }
+ }
+}
+#endif
+
+#ifdef _OPENMP
+/* adjoint NFFT three-dimensional case with OpenMP atomic operations */
+static void nfft_adjoint_3d_compute_omp_atomic(const C f, C *g,
+ const R *psij_const0, const R *psij_const1, const R *psij_const2,
+ const R *xj0, const R *xj1, const R *xj2,
+ const int n0, const int n1, const int n2, const int m)
+{
+ int u0,o0,l0,u1,o1,l1,u2,o2,l2;
+ const int lprod = (2*m+2) * (2*m+2) * (2*m+2);
+
+ unsigned long int index_temp0[2*m+2];
+ unsigned long int index_temp1[2*m+2];
+ unsigned long int index_temp2[2*m+2];
+
+ nfft_uo2(&u0,&o0,*xj0, n0, m);
+ nfft_uo2(&u1,&o1,*xj1, n1, m);
+ nfft_uo2(&u2,&o2,*xj2, n2, m);
+
+ for (l0=0; l0<=2*m+1; l0++)
+ index_temp0[l0] = (u0+l0)%n0;
+
+ for (l1=0; l1<=2*m+1; l1++)
+ index_temp1[l1] = (u1+l1)%n1;
+
+ for (l2=0; l2<=2*m+1; l2++)
+ index_temp2[l2] = (u2+l2)%n2;
+
+ for(l0=0; l0<=2*m+1; l0++)
+ {
+ for(l1=0; l1<=2*m+1; l1++)
+ {
+ for(l2=0; l2<=2*m+1; l2++)
+ {
+ unsigned long int i = (index_temp0[l0] * n1 + index_temp1[l1]) * n2 + index_temp2[l2];
+ C *lhs = g+i;
+ R *lhs_real = (R*)lhs;
+ C val = psij_const0[l0] * psij_const1[l1] * psij_const2[l2] * f;
+
+ #pragma omp atomic
+ lhs_real[0] += creal(val);
+
+ #pragma omp atomic
+ lhs_real[1] += cimag(val);
+ }
+ }
+ }
+}
+#endif
+
+#ifndef _OPENMP
+static void nfft_adjoint_3d_compute_serial(const C *fj, C *g,
+ const R *psij_const0, const R *psij_const1, const R *psij_const2,
+ const R *xj0, const R *xj1, const R *xj2,
+ const int n0, const int n1, const int n2, const int m)
+{
+ int u0,o0,l0,u1,o1,l1,u2,o2,l2;
+ C *gj;
+ const R *psij0,*psij1,*psij2;
+
+ psij0=psij_const0;
+ psij1=psij_const1;
+ psij2=psij_const2;
+
+ nfft_uo2(&u0,&o0,*xj0, n0, m);
+ nfft_uo2(&u1,&o1,*xj1, n1, m);
+ nfft_uo2(&u2,&o2,*xj2, n2, m);
+
+ if(u0<o0)
+ if(u1<o1)
+ if(u2<o2)
+ for(l0=0; l0<=2*m+1; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<=2*m+1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ }
+ else/* asserts (u2>o2)*/
+ for(l0=0; l0<=2*m+1; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<=2*m+1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ gj=g+((u0+l0)*n1+(u1+l1))*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ }
+ else/* asserts (u1>o1)*/
+ if(u2<o2)
+ for(l0=0; l0<=2*m+1; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ for(l1=0; l1<=o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+l1)*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ }
+ else/* asserts (u2>o2) */
+ {
+ for(l0=0; l0<=2*m+1; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ gj=g+((u0+l0)*n1+(u1+l1))*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ for(l1=0; l1<=o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+l1)*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ gj=g+((u0+l0)*n1+l1)*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ }
+ }
+ else/* asserts (u0>o0) */
+ if(u1<o1)
+ if(u2<o2)
+ {
+ for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<=2*m+1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ }
+
+ for(l0=0; l0<=o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<=2*m+1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+(l0*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ }
+ }
+ else/* asserts (u2>o2) */
+ {
+ for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<=2*m+1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ gj=g+((u0+l0)*n1+(u1+l1))*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ }
+
+ for(l0=0; l0<=o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<=2*m+1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+(l0*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ gj=g+(l0*n1+(u1+l1))*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ }
+ }
+ else/* asserts (u1>o1) */
+ if(u2<o2)
+ {
+ for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ for(l1=0; l1<=o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+l1)*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ }
+ for(l0=0; l0<=o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+(l0*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ for(l1=0; l1<=o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+(l0*n1+l1)*n2+u2;
+ for(l2=0; l2<=2*m+1; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ }
+ }
+ else/* asserts (u2>o2) */
+ {
+ for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ gj=g+((u0+l0)*n1+(u1+l1))*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ for(l1=0; l1<=o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+((u0+l0)*n1+l1)*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ gj=g+((u0+l0)*n1+l1)*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ }
+
+ for(l0=0; l0<=o0; l0++,psij0++)
+ {
+ psij1=psij_const1;
+ for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+(l0*n1+(u1+l1))*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ gj=g+(l0*n1+(u1+l1))*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ for(l1=0; l1<=o1; l1++,psij1++)
+ {
+ psij2=psij_const2;
+ gj=g+(l0*n1+l1)*n2+u2;
+ for(l2=0; l2<2*m+1-o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ gj=g+(l0*n1+l1)*n2;
+ for(l2=0; l2<=o2; l2++)
+ (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+ }
+ }
+ }
+}
+#endif
+
+static void nfft_trafo_3d_B(nfft_plan *ths)
+{
+ const int N0 = ths->N[0];
+ const int n0 = ths->n[0];
+ const int N1 = ths->N[1];
+ const int n1 = ths->n[1];
+ const int N2 = ths->N[2];
+ const int n2 = ths->n[2];
+ const int M = ths->M_total;
+ const int m = ths->m;
+
+ const C* g = (C*) ths->g;
+
+ int k;
+
+ if(ths->nfft_flags & PRE_FULL_PSI)
+ {
+ const int lprod = (2*m+2) * (2*m+2) * (2*m+2);
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int l;
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ ths->f[j] = K(0.0);
+ for (l = 0; l < lprod; l++)
+ ths->f[j] += ths->psi[j*lprod+l] * g[ths->psi_index_g[j*lprod+l]];
+ }
+ return;
+ } /* if(PRE_FULL_PSI) */
+
+ if(ths->nfft_flags & PRE_PSI)
+ {
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ nfft_trafo_3d_compute(ths->f+j, g, ths->psi+j*3*(2*m+2), ths->psi+(j*3+1)*(2*m+2), ths->psi+(j*3+2)*(2*m+2), ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+ }
+ return;
+ } /* if(PRE_PSI) */
+
+ if(ths->nfft_flags & PRE_FG_PSI)
+ {
+ R fg_exp_l[3*(2*m+2)];
+
+ nfft_3d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+ nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
+ nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths->b[2]);
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ int l;
+ R psij_const[3*(2*m+2)];
+ R fg_psij0 = ths->psi[2*j*3];
+ R fg_psij1 = ths->psi[2*j*3+1];
+ R fg_psij2 = K(1.0);
+
+ psij_const[0] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
+ }
+
+ fg_psij0 = ths->psi[2*(j*3+1)];
+ fg_psij1 = ths->psi[2*(j*3+1)+1];
+ fg_psij2 = K(1.0);
+ psij_const[2*m+2] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
+ }
+
+ fg_psij0 = ths->psi[2*(j*3+2)];
+ fg_psij1 = ths->psi[2*(j*3+2)+1];
+ fg_psij2 = K(1.0);
+ psij_const[2*(2*m+2)] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l];
+ }
+
+ nfft_trafo_3d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+ }
+
+ return;
+ } /* if(PRE_FG_PSI) */
+
+ if(ths->nfft_flags & FG_PSI)
+ {
+ R fg_exp_l[3*(2*m+2)];
+
+ nfft_3d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+ nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
+ nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths->b[2]);
+
+ nfft_sort_nodes(ths);
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ int u, o, l;
+ R psij_const[3*(2*m+2)];
+ R fg_psij0, fg_psij1, fg_psij2;
+
+ nfft_uo(ths,j,&u,&o,0);
+ fg_psij0 = (PHI(ths->x[3*j]-((R)u)/n0,0));
+ fg_psij1 = EXP(K(2.0)*(n0*(ths->x[3*j]) - u)/ths->b[0]);
+ fg_psij2 = K(1.0);
+ psij_const[0] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
+ }
+
+ nfft_uo(ths,j,&u,&o,1);
+ fg_psij0 = (PHI(ths->x[3*j+1]-((R)u)/n1,1));
+ fg_psij1 = EXP(K(2.0)*(n1*(ths->x[3*j+1]) - u)/ths->b[1]);
+ fg_psij2 = K(1.0);
+ psij_const[2*m+2] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
+ }
+
+ nfft_uo(ths,j,&u,&o,2);
+ fg_psij0 = (PHI(ths->x[3*j+2]-((R)u)/n2,2));
+ fg_psij1 = EXP(K(2.0)*(n2*(ths->x[3*j+2]) - u)/ths->b[2]);
+ fg_psij2 = K(1.0);
+ psij_const[2*(2*m+2)] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l];
+ }
+
+ nfft_trafo_3d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+ }
+
+ return;
+ } /* if(FG_PSI) */
+
+ if(ths->nfft_flags & PRE_LIN_PSI)
+ {
+ const int K = ths->K, ip_s = K / (m + 2);
+
+ nfft_sort_nodes(ths);
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int u, o, l;
+ R ip_y, ip_w;
+ int ip_u;
+ R psij_const[3*(2*m+2)];
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ nfft_uo(ths,j,&u,&o,0);
+ ip_y = FABS(n0*ths->x[3*j+0] - u)*((R)ip_s);
+ ip_u = LRINT(FLOOR(ip_y));
+ ip_w = ip_y-ip_u;
+ for(l=0; l < 2*m+2; l++)
+ psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
+ ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+ nfft_uo(ths,j,&u,&o,1);
+ ip_y = FABS(n1*ths->x[3*j+1] - u)*((R)ip_s);
+ ip_u = LRINT(FLOOR(ip_y));
+ ip_w = ip_y-ip_u;
+ for(l=0; l < 2*m+2; l++)
+ psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
+ ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+ nfft_uo(ths,j,&u,&o,2);
+ ip_y = FABS(n2*ths->x[3*j+2] - u)*((R)ip_s);
+ ip_u = LRINT(FLOOR(ip_y));
+ ip_w = ip_y-ip_u;
+ for(l=0; l < 2*m+2; l++)
+ psij_const[2*(2*m+2)+l] = ths->psi[2*(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
+ ths->psi[2*(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+ nfft_trafo_3d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+ }
+ return;
+ } /* if(PRE_LIN_PSI) */
+
+ /* no precomputed psi at all */
+
+ nfft_sort_nodes(ths);
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ R psij_const[3*(2*m+2)];
+ int u, o, l;
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ nfft_uo(ths,j,&u,&o,0);
+ for(l=0;l<=2*m+1;l++)
+ psij_const[l]=(PHI(ths->x[3*j]-((R)((u+l)))/n0,0));
+
+ nfft_uo(ths,j,&u,&o,1);
+ for(l=0;l<=2*m+1;l++)
+ psij_const[2*m+2+l]=(PHI(ths->x[3*j+1]-((R)((u+l)))/n1,1));
+
+ nfft_uo(ths,j,&u,&o,2);
+ for(l=0;l<=2*m+1;l++)
+ psij_const[2*(2*m+2)+l]=(PHI(ths->x[3*j+2]-((R)((u+l)))/n2,2));
+
+ nfft_trafo_3d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+ }
+}
+
+#ifdef OMP_ASSERT
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A \
+{ \
+ assert(ar_x[2*k] >= min_u_a || k == M-1); \
+ if (k > 0) \
+ assert(ar_x[2*k-2] < min_u_a); \
+}
+#else
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A
+#endif
+
+#ifdef OMP_ASSERT
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B \
+{ \
+ assert(ar_x[2*k] >= min_u_b || k == M-1); \
+ if (k > 0) \
+ assert(ar_x[2*k-2] < min_u_b); \
+}
+#else
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B
+#endif
+
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI \
+ nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g, \
+ ths->psi+j*3*(2*m+2), \
+ ths->psi+(j*3+1)*(2*m+2), \
+ ths->psi+(j*3+2)*(2*m+2), \
+ ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, \
+ n0, n1, n2, m, my_u0, my_o0);
+
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI \
+{ \
+ int u, o, l; \
+ R psij_const[3*(2*m+2)]; \
+ R fg_psij0 = ths->psi[2*j*3]; \
+ R fg_psij1 = ths->psi[2*j*3+1]; \
+ R fg_psij2 = K(1.0); \
+ \
+ psij_const[0] = fg_psij0; \
+ for(l=1; l<=2*m+1; l++) \
+ { \
+ fg_psij2 *= fg_psij1; \
+ psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l]; \
+ } \
+ \
+ fg_psij0 = ths->psi[2*(j*3+1)]; \
+ fg_psij1 = ths->psi[2*(j*3+1)+1]; \
+ fg_psij2 = K(1.0); \
+ psij_const[2*m+2] = fg_psij0; \
+ for(l=1; l<=2*m+1; l++) \
+ { \
+ fg_psij2 *= fg_psij1; \
+ psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l]; \
+ } \
+ \
+ fg_psij0 = ths->psi[2*(j*3+2)]; \
+ fg_psij1 = ths->psi[2*(j*3+2)+1]; \
+ fg_psij2 = K(1.0); \
+ psij_const[2*(2*m+2)] = fg_psij0; \
+ for(l=1; l<=2*m+1; l++) \
+ { \
+ fg_psij2 *= fg_psij1; \
+ psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l]; \
+ } \
+ \
+ nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g, \
+ psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, \
+ ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, \
+ n0, n1, n2, m, my_u0, my_o0); \
+}
+
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI \
+{ \
+ int u, o, l; \
+ R psij_const[3*(2*m+2)]; \
+ R fg_psij0, fg_psij1, fg_psij2; \
+ \
+ nfft_uo(ths,j,&u,&o,0); \
+ fg_psij0 = (PHI(ths->x[3*j]-((R)u)/n0,0)); \
+ fg_psij1 = EXP(K(2.0)*(n0*(ths->x[3*j]) - u)/ths->b[0]); \
+ fg_psij2 = K(1.0); \
+ psij_const[0] = fg_psij0; \
+ for(l=1; l<=2*m+1; l++) \
+ { \
+ fg_psij2 *= fg_psij1; \
+ psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l]; \
+ } \
+ \
+ nfft_uo(ths,j,&u,&o,1); \
+ fg_psij0 = (PHI(ths->x[3*j+1]-((R)u)/n1,1)); \
+ fg_psij1 = EXP(K(2.0)*(n1*(ths->x[3*j+1]) - u)/ths->b[1]); \
+ fg_psij2 = K(1.0); \
+ psij_const[2*m+2] = fg_psij0; \
+ for(l=1; l<=2*m+1; l++) \
+ { \
+ fg_psij2 *= fg_psij1; \
+ psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l]; \
+ } \
+ \
+ nfft_uo(ths,j,&u,&o,2); \
+ fg_psij0 = (PHI(ths->x[3*j+2]-((R)u)/n2,2)); \
+ fg_psij1 = EXP(K(2.0)*(n2*(ths->x[3*j+2]) - u)/ths->b[2]); \
+ fg_psij2 = K(1.0); \
+ psij_const[2*(2*m+2)] = fg_psij0; \
+ for(l=1; l<=2*m+1; l++) \
+ { \
+ fg_psij2 *= fg_psij1; \
+ psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l]; \
+ } \
+ \
+ nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g, \
+ psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, \
+ ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, \
+ n0, n1, n2, m, my_u0, my_o0); \
+}
+
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI \
+{ \
+ int u, o, l; \
+ R psij_const[3*(2*m+2)]; \
+ int ip_u; \
+ R ip_y, ip_w; \
+ \
+ nfft_uo(ths,j,&u,&o,0); \
+ ip_y = FABS(n0*ths->x[3*j+0] - u)*((R)ip_s); \
+ ip_u = LRINT(FLOOR(ip_y)); \
+ ip_w = ip_y-ip_u; \
+ for(l=0; l < 2*m+2; l++) \
+ psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \
+ ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w); \
+ \
+ nfft_uo(ths,j,&u,&o,1); \
+ ip_y = FABS(n1*ths->x[3*j+1] - u)*((R)ip_s); \
+ ip_u = LRINT(FLOOR(ip_y)); \
+ ip_w = ip_y-ip_u; \
+ for(l=0; l < 2*m+2; l++) \
+ psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \
+ ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w); \
+ \
+ nfft_uo(ths,j,&u,&o,2); \
+ ip_y = FABS(n2*ths->x[3*j+2] - u)*((R)ip_s); \
+ ip_u = LRINT(FLOOR(ip_y)); \
+ ip_w = ip_y-ip_u; \
+ for(l=0; l < 2*m+2; l++) \
+ psij_const[2*(2*m+2)+l] = ths->psi[2*(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \
+ ths->psi[2*(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w); \
+ \
+ nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g, \
+ psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, \
+ ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, \
+ n0, n1, n2, m, my_u0, my_o0); \
+}
+
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI \
+{ \
+ int u, o, l; \
+ R psij_const[3*(2*m+2)]; \
+ \
+ nfft_uo(ths,j,&u,&o,0); \
+ for(l=0;l<=2*m+1;l++) \
+ psij_const[l]=(PHI(ths->x[3*j]-((R)((u+l)))/n0,0)); \
+ \
+ nfft_uo(ths,j,&u,&o,1); \
+ for(l=0;l<=2*m+1;l++) \
+ psij_const[2*m+2+l]=(PHI(ths->x[3*j+1]-((R)((u+l)))/n1,1)); \
+ \
+ nfft_uo(ths,j,&u,&o,2); \
+ for(l=0;l<=2*m+1;l++) \
+ psij_const[2*(2*m+2)+l]=(PHI(ths->x[3*j+2]-((R)((u+l)))/n2,2)); \
+ \
+ nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g, \
+ psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, \
+ ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, \
+ n0, n1, n2, m, my_u0, my_o0); \
+}
+
+#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(whichone) \
+{ \
+ if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT) \
+ { \
+ _Pragma("omp parallel private(k)") \
+ { \
+ int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b; \
+ int *ar_x = ths->index_x; \
+ \
+ nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, \
+ &min_u_b, &max_u_b, 3, ths->n, m); \
+ \
+ if (min_u_a != -1) \
+ { \
+ k = index_x_binary_search(ar_x, M, min_u_a); \
+ \
+ MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A \
+ \
+ while (k < M) \
+ { \
+ int u_prod = ar_x[2*k]; \
+ int j = ar_x[2*k+1]; \
+ \
+ if (u_prod < min_u_a || u_prod > max_u_a) \
+ break; \
+ \
+ MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \
+ \
+ k++; \
+ } \
+ } \
+ \
+ if (min_u_b != -1) \
+ { \
+ int k = index_x_binary_search(ar_x, M, min_u_b); \
+ \
+ MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B \
+ \
+ while (k < M) \
+ { \
+ int u_prod = ar_x[2*k]; \
+ int j = ar_x[2*k+1]; \
+ \
+ if (u_prod < min_u_b || u_prod > max_u_b) \
+ break; \
+ \
+ MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \
+ \
+ k++; \
+ } \
+ } \
+ } /* omp parallel */ \
+ return; \
+ } /* if(NFFT_OMP_BLOCKWISE_ADJOINT) */ \
+}
+
+static void nfft_adjoint_3d_B(nfft_plan *ths)
+{
+ int k;
+ const int N0 = ths->N[0];
+ const int n0 = ths->n[0];
+ const int N1 = ths->N[1];
+ const int n1 = ths->n[1];
+ const int N2 = ths->N[2];
+ const int n2 = ths->n[2];
+ const int M = ths->M_total;
+ const int m = ths->m;
+
+ C* g = (C*) ths->g;
+
+ memset(g,0,ths->n_total*sizeof(C));
+
+ if(ths->nfft_flags & PRE_FULL_PSI)
+ {
+ nfft_adjoint_B_compute_full_psi(g, ths->psi_index_g, ths->psi, ths->f, M,
+ 3, ths->n, m, ths->nfft_flags, ths->index_x);
+ return;
+ } /* if(PRE_FULL_PSI) */
+
+ if(ths->nfft_flags & PRE_PSI)
+ {
+#ifdef _OPENMP
+ MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(PRE_PSI)
+#endif
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+#ifdef _OPENMP
+ nfft_adjoint_3d_compute_omp_atomic(ths->f[j], g, ths->psi+j*3*(2*m+2), ths->psi+(j*3+1)*(2*m+2), ths->psi+(j*3+2)*(2*m+2), ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#else
+ nfft_adjoint_3d_compute_serial(ths->f+j, g, ths->psi+j*3*(2*m+2), ths->psi+(j*3+1)*(2*m+2), ths->psi+(j*3+2)*(2*m+2), ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#endif
+ }
+ return;
+ } /* if(PRE_PSI) */
+
+ if(ths->nfft_flags & PRE_FG_PSI)
+ {
+ R fg_exp_l[3*(2*m+2)];
+
+ nfft_3d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+ nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
+ nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths->b[2]);
+
+#ifdef _OPENMP
+ MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(PRE_FG_PSI)
+#endif
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ R psij_const[3*(2*m+2)];
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ int l;
+ R fg_psij0 = ths->psi[2*j*3];
+ R fg_psij1 = ths->psi[2*j*3+1];
+ R fg_psij2 = K(1.0);
+
+ psij_const[0] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
+ }
+
+ fg_psij0 = ths->psi[2*(j*3+1)];
+ fg_psij1 = ths->psi[2*(j*3+1)+1];
+ fg_psij2 = K(1.0);
+ psij_const[2*m+2] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
+ }
+
+ fg_psij0 = ths->psi[2*(j*3+2)];
+ fg_psij1 = ths->psi[2*(j*3+2)+1];
+ fg_psij2 = K(1.0);
+ psij_const[2*(2*m+2)] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l];
+ }
+
+#ifdef _OPENMP
+ nfft_adjoint_3d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#else
+ nfft_adjoint_3d_compute_serial(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#endif
+ }
+
+ return;
+ } /* if(PRE_FG_PSI) */
+
+ if(ths->nfft_flags & FG_PSI)
+ {
+ R fg_exp_l[3*(2*m+2)];
+
+ nfft_3d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
+ nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
+ nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths->b[2]);
+
+ nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+ MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(FG_PSI)
+#endif
+
+ #pragma openmp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int u,o,l;
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ R psij_const[3*(2*m+2)];
+ R fg_psij0, fg_psij1, fg_psij2;
+
+ nfft_uo(ths,j,&u,&o,0);
+ fg_psij0 = (PHI(ths->x[3*j]-((R)u)/n0,0));
+ fg_psij1 = EXP(K(2.0)*(n0*(ths->x[3*j]) - u)/ths->b[0]);
+ fg_psij2 = K(1.0);
+ psij_const[0] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
+ }
+
+ nfft_uo(ths,j,&u,&o,1);
+ fg_psij0 = (PHI(ths->x[3*j+1]-((R)u)/n1,1));
+ fg_psij1 = EXP(K(2.0)*(n1*(ths->x[3*j+1]) - u)/ths->b[1]);
+ fg_psij2 = K(1.0);
+ psij_const[2*m+2] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
+ }
+
+ nfft_uo(ths,j,&u,&o,2);
+ fg_psij0 = (PHI(ths->x[3*j+2]-((R)u)/n2,2));
+ fg_psij1 = EXP(K(2.0)*(n2*(ths->x[3*j+2]) - u)/ths->b[2]);
+ fg_psij2 = K(1.0);
+ psij_const[2*(2*m+2)] = fg_psij0;
+ for(l=1; l<=2*m+1; l++)
+ {
+ fg_psij2 *= fg_psij1;
+ psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l];
+ }
+
+#ifdef _OPENMP
+ nfft_adjoint_3d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#else
+ nfft_adjoint_3d_compute_serial(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#endif
+ }
+
+ return;
+ } /* if(FG_PSI) */
+
+ if(ths->nfft_flags & PRE_LIN_PSI)
+ {
+ const int K = ths->K;
+ const int ip_s = K / (m + 2);
+
+ nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+ MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(PRE_LIN_PSI)
+#endif
+
+ #pragma openmp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int u,o,l;
+ int ip_u;
+ R ip_y, ip_w;
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+ R psij_const[3*(2*m+2)];
+
+ nfft_uo(ths,j,&u,&o,0);
+ ip_y = FABS(n0*ths->x[3*j+0] - u)*((R)ip_s);
+ ip_u = LRINT(FLOOR(ip_y));
+ ip_w = ip_y-ip_u;
+ for(l=0; l < 2*m+2; l++)
+ psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
+ ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+ nfft_uo(ths,j,&u,&o,1);
+ ip_y = FABS(n1*ths->x[3*j+1] - u)*((R)ip_s);
+ ip_u = LRINT(FLOOR(ip_y));
+ ip_w = ip_y-ip_u;
+ for(l=0; l < 2*m+2; l++)
+ psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
+ ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+ nfft_uo(ths,j,&u,&o,2);
+ ip_y = FABS(n2*ths->x[3*j+2] - u)*((R)ip_s);
+ ip_u = LRINT(FLOOR(ip_y));
+ ip_w = ip_y-ip_u;
+ for(l=0; l < 2*m+2; l++)
+ psij_const[2*(2*m+2)+l] = ths->psi[2*(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
+ ths->psi[2*(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
+
+#ifdef _OPENMP
+ nfft_adjoint_3d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#else
+ nfft_adjoint_3d_compute_serial(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#endif
+ }
+ return;
+ } /* if(PRE_LIN_PSI) */
+
+ /* no precomputed psi at all */
+ nfft_sort_nodes(ths);
+
+#ifdef _OPENMP
+ MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(NO_PSI)
+#endif
+
+ #pragma omp parallel for default(shared) private(k)
+ for (k = 0; k < M; k++)
+ {
+ int u,o,l;
+ R psij_const[3*(2*m+2)];
+ int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+
+ nfft_uo(ths,j,&u,&o,0);
+ for(l=0;l<=2*m+1;l++)
+ psij_const[l]=(PHI(ths->x[3*j]-((R)((u+l)))/n0,0));
+
+ nfft_uo(ths,j,&u,&o,1);
+ for(l=0;l<=2*m+1;l++)
+ psij_const[2*m+2+l]=(PHI(ths->x[3*j+1]-((R)((u+l)))/n1,1));
+
+ nfft_uo(ths,j,&u,&o,2);
+ for(l=0;l<=2*m+1;l++)
+ psij_const[2*(2*m+2)+l]=(PHI(ths->x[3*j+2]-((R)((u+l)))/n2,2));
+
+#ifdef _OPENMP
+ nfft_adjoint_3d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#else
+ nfft_adjoint_3d_compute_serial(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
+#endif
+ }
+}
+
+
+void nfft_trafo_3d(nfft_plan *ths)
+{
+ int k0,k1,k2,n0,n1,n2,N0,N1,N2;
+ C *g_hat,*f_hat;
+ R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12, *c_phi_inv21, *c_phi_inv22;
+ R ck01, ck02, ck11, ck12, ck21, ck22;
+ C *g_hat111,*f_hat111,*g_hat211,*f_hat211,*g_hat121,*f_hat121,*g_hat221,*f_hat221;
+ C *g_hat112,*f_hat112,*g_hat212,*f_hat212,*g_hat122,*f_hat122,*g_hat222,*f_hat222;
+
+ ths->g_hat=ths->g1;
+ ths->g=ths->g2;
+
+ N0=ths->N[0];
+ N1=ths->N[1];
+ N2=ths->N[2];
+ n0=ths->n[0];
+ n1=ths->n[1];
+ n2=ths->n[2];
+
+ f_hat=(C*)ths->f_hat;
+ g_hat=(C*)ths->g_hat;
+
+ TIC(0)
+#ifdef _OPENMP
+ #pragma omp parallel for default(shared) private(k0)
+ for (k0 = 0; k0 < ths->n_total; k0++)
+ ths->g_hat[k0] = 0.0;
+#else
+ memset(ths->g_hat,0,ths->n_total*sizeof(C));
+#endif
+
+ if(ths->nfft_flags & PRE_PHI_HUT)
+ {
+ c_phi_inv01=ths->c_phi_inv[0];
+ c_phi_inv02=&ths->c_phi_inv[0][N0/2];
+
+ #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,c_phi_inv11,c_phi_inv12,ck11,ck12,c_phi_inv21,c_phi_inv22,g_hat111,f_hat111,g_hat211,f_hat211,g_hat121,f_hat121,g_hat221,f_hat221,g_hat112,f_hat112,g_hat212,f_hat212,g_hat122,f_hat122,g_hat222,f_hat222,ck21,ck22)
+ for(k0=0;k0<N0/2;k0++)
+ {
+ ck01=c_phi_inv01[k0];
+ ck02=c_phi_inv02[k0];
+ c_phi_inv11=ths->c_phi_inv[1];
+ c_phi_inv12=&ths->c_phi_inv[1][N1/2];
+
+ for(k1=0;k1<N1/2;k1++)
+ {
+ ck11=c_phi_inv11[k1];
+ ck12=c_phi_inv12[k1];
+ c_phi_inv21=ths->c_phi_inv[2];
+ c_phi_inv22=&ths->c_phi_inv[2][N2/2];
+
+ g_hat111=g_hat + ((n0-(N0/2)+k0)*n1+n1-(N1/2)+k1)*n2+n2-(N2/2);
+ f_hat111=f_hat + (k0*N1+k1)*N2;
+ g_hat211=g_hat + (k0*n1+n1-(N1/2)+k1)*n2+n2-(N2/2);
+ f_hat211=f_hat + (((N0/2)+k0)*N1+k1)*N2;
+ g_hat121=g_hat + ((n0-(N0/2)+k0)*n1+k1)*n2+n2-(N2/2);
+ f_hat121=f_hat + (k0*N1+(N1/2)+k1)*N2;
+ g_hat221=g_hat + (k0*n1+k1)*n2+n2-(N2/2);
+ f_hat221=f_hat + (((N0/2)+k0)*N1+(N1/2)+k1)*N2;
+
+ g_hat112=g_hat + ((n0-(N0/2)+k0)*n1+n1-(N1/2)+k1)*n2;
+ f_hat112=f_hat + (k0*N1+k1)*N2+(N2/2);
+ g_hat212=g_hat + (k0*n1+n1-(N1/2)+k1)*n2;
+ f_hat212=f_hat + (((N0/2)+k0)*N1+k1)*N2+(N2/2);
+ g_hat122=g_hat + ((n0-(N0/2)+k0)*n1+k1)*n2;
+ f_hat122=f_hat + (k0*N1+N1/2+k1)*N2+(N2/2);
+ g_hat222=g_hat + (k0*n1+k1)*n2;
+ f_hat222=f_hat + (((N0/2)+k0)*N1+(N1/2)+k1)*N2+(N2/2);
+
+ for(k2=0;k2<N2/2;k2++)
+ {
+ ck21=c_phi_inv21[k2];
+ ck22=c_phi_inv22[k2];
+
+ g_hat111[k2] = f_hat111[k2] * ck01 * ck11 * ck21;
+ g_hat211[k2] = f_hat211[k2] * ck02 * ck11 * ck21;
+ g_hat121[k2] = f_hat121[k2] * ck01 * ck12 * ck21;
+ g_hat221[k2] = f_hat221[k2] * ck02 * ck12 * ck21;
+
+ g_hat112[k2] = f_hat112[k2] * ck01 * ck11 * ck22;
+ g_hat212[k2] = f_hat212[k2] * ck02 * ck11 * ck22;
+ g_hat122[k2] = f_hat122[k2] * ck01 * ck12 * ck22;
+ g_hat222[k2] = f_hat222[k2] * ck02 * ck12 * ck22;
+ }
+ }
+ }
+ }
+ else
+ #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,ck11,ck12,ck21,ck22)
+ for(k0=0;k0<N0/2;k0++)
+ {
+ ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));
+ ck02=K(1.0)/(PHI_HUT(k0,0));
+ for(k1=0;k1<N1/2;k1++)
+ {
+ ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));
+ ck12=K(1.0)/(PHI_HUT(k1,1));
+
+ for(k2=0;k2<N2/2;k2++)
+ {
+ ck21=K(1.0)/(PHI_HUT(k2-N2/2,2));
+ ck22=K(1.0)/(PHI_HUT(k2,2));
+
+ g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+n2-N2/2+k2] = f_hat[(k0*N1+k1)*N2+k2] * ck01 * ck11 * ck21;
+ g_hat[(k0*n1+n1-N1/2+k1)*n2+n2-N2/2+k2] = f_hat[((N0/2+k0)*N1+k1)*N2+k2] * ck02 * ck11 * ck21;
+ g_hat[((n0-N0/2+k0)*n1+k1)*n2+n2-N2/2+k2] = f_hat[(k0*N1+N1/2+k1)*N2+k2] * ck01 * ck12 * ck21;
+ g_hat[(k0*n1+k1)*n2+n2-N2/2+k2] = f_hat[((N0/2+k0)*N1+N1/2+k1)*N2+k2] * ck02 * ck12 * ck21;
+
+ g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+k2] = f_hat[(k0*N1+k1)*N2+N2/2+k2] * ck01 * ck11 * ck22;
+ g_hat[(k0*n1+n1-N1/2+k1)*n2+k2] = f_hat[((N0/2+k0)*N1+k1)*N2+N2/2+k2] * ck02 * ck11 * ck22;
+ g_hat[((n0-N0/2+k0)*n1+k1)*n2+k2] = f_hat[(k0*N1+N1/2+k1)*N2+N2/2+k2] * ck01 * ck12 * ck22;
+ g_hat[(k0*n1+k1)*n2+k2] = f_hat[((N0/2+k0)*N1+N1/2+k1)*N2+N2/2+k2] * ck02 * ck12 * ck22;
+ }
+ }
+ }
+
+ TOC(0)
+
+ TIC_FFTW(1)
+ fftw_execute(ths->my_fftw_plan1);
+ TOC_FFTW(1);
+
+ TIC(2);
+ nfft_trafo_3d_B(ths);
+ TOC(2);
+}
+
+void nfft_adjoint_3d(nfft_plan *ths)
+{
+ int k0,k1,k2,n0,n1,n2,N0,N1,N2;
+ C *g_hat,*f_hat;
+ R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12, *c_phi_inv21, *c_phi_inv22;
+ R ck01, ck02, ck11, ck12, ck21, ck22;
+ C *g_hat111,*f_hat111,*g_hat211,*f_hat211,*g_hat121,*f_hat121,*g_hat221,*f_hat221;
+ C *g_hat112,*f_hat112,*g_hat212,*f_hat212,*g_hat122,*f_hat122,*g_hat222,*f_hat222;
+
+ ths->g_hat=ths->g1;
+ ths->g=ths->g2;
+
+ N0=ths->N[0];
+ N1=ths->N[1];
+ N2=ths->N[2];
+ n0=ths->n[0];
+ n1=ths->n[1];
+ n2=ths->n[2];
+
+ f_hat=(C*)ths->f_hat;
+ g_hat=(C*)ths->g_hat;
+
+ TIC(2);
+ nfft_adjoint_3d_B(ths);
+ TOC(2);
+
+ TIC_FFTW(1)
+ fftw_execute(ths->my_fftw_plan2);
+ TOC_FFTW(1);
+
+ TIC(0)
+ if(ths->nfft_flags & PRE_PHI_HUT)
+ {
+ c_phi_inv01=ths->c_phi_inv[0];
+ c_phi_inv02=&ths->c_phi_inv[0][N0/2];
+
+ #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,c_phi_inv11,c_phi_inv12,ck11,ck12,c_phi_inv21,c_phi_inv22,g_hat111,f_hat111,g_hat211,f_hat211,g_hat121,f_hat121,g_hat221,f_hat221,g_hat112,f_hat112,g_hat212,f_hat212,g_hat122,f_hat122,g_hat222,f_hat222,ck21,ck22)
+ for(k0=0;k0<N0/2;k0++)
+ {
+ ck01=c_phi_inv01[k0];
+ ck02=c_phi_inv02[k0];
+ c_phi_inv11=ths->c_phi_inv[1];
+ c_phi_inv12=&ths->c_phi_inv[1][N1/2];
+
+ for(k1=0;k1<N1/2;k1++)
+ {
+ ck11=c_phi_inv11[k1];
+ ck12=c_phi_inv12[k1];
+ c_phi_inv21=ths->c_phi_inv[2];
+ c_phi_inv22=&ths->c_phi_inv[2][N2/2];
+
+ g_hat111=g_hat + ((n0-(N0/2)+k0)*n1+n1-(N1/2)+k1)*n2+n2-(N2/2);
+ f_hat111=f_hat + (k0*N1+k1)*N2;
+ g_hat211=g_hat + (k0*n1+n1-(N1/2)+k1)*n2+n2-(N2/2);
+ f_hat211=f_hat + (((N0/2)+k0)*N1+k1)*N2;
+ g_hat121=g_hat + ((n0-(N0/2)+k0)*n1+k1)*n2+n2-(N2/2);
+ f_hat121=f_hat + (k0*N1+(N1/2)+k1)*N2;
+ g_hat221=g_hat + (k0*n1+k1)*n2+n2-(N2/2);
+ f_hat221=f_hat + (((N0/2)+k0)*N1+(N1/2)+k1)*N2;
+
+ g_hat112=g_hat + ((n0-(N0/2)+k0)*n1+n1-(N1/2)+k1)*n2;
+ f_hat112=f_hat + (k0*N1+k1)*N2+(N2/2);
+ g_hat212=g_hat + (k0*n1+n1-(N1/2)+k1)*n2;
+ f_hat212=f_hat + (((N0/2)+k0)*N1+k1)*N2+(N2/2);
+ g_hat122=g_hat + ((n0-(N0/2)+k0)*n1+k1)*n2;
+ f_hat122=f_hat + (k0*N1+(N1/2)+k1)*N2+(N2/2);
+ g_hat222=g_hat + (k0*n1+k1)*n2;
+ f_hat222=f_hat + (((N0/2)+k0)*N1+(N1/2)+k1)*N2+(N2/2);
+
+ for(k2=0;k2<N2/2;k2++)
+ {
+ ck21=c_phi_inv21[k2];
+ ck22=c_phi_inv22[k2];
+
+ f_hat111[k2] = g_hat111[k2] * ck01 * ck11 * ck21;
+ f_hat211[k2] = g_hat211[k2] * ck02 * ck11 * ck21;
+ f_hat121[k2] = g_hat121[k2] * ck01 * ck12 * ck21;
+ f_hat221[k2] = g_hat221[k2] * ck02 * ck12 * ck21;
+
+ f_hat112[k2] = g_hat112[k2] * ck01 * ck11 * ck22;
+ f_hat212[k2] = g_hat212[k2] * ck02 * ck11 * ck22;
+ f_hat122[k2] = g_hat122[k2] * ck01 * ck12 * ck22;
+ f_hat222[k2] = g_hat222[k2] * ck02 * ck12 * ck22;
+ }
+ }
+ }
+ }
+ else
+ #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,ck11,ck12,ck21,ck22)
+ for(k0=0;k0<N0/2;k0++)
+ {
+ ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));
+ ck02=K(1.0)/(PHI_HUT(k0,0));
+ for(k1=0;k1<N1/2;k1++)
+ {
+ ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));
+ ck12=K(1.0)/(PHI_HUT(k1,1));
+
+ for(k2=0;k2<N2/2;k2++)
+ {
+ ck21=K(1.0)/(PHI_HUT(k2-N2/2,2));
+ ck22=K(1.0)/(PHI_HUT(k2,2));
+
+ f_hat[(k0*N1+k1)*N2+k2] = g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+n2-N2/2+k2] * ck01 * ck11 * ck21;
+ f_hat[((N0/2+k0)*N1+k1)*N2+k2] = g_hat[(k0*n1+n1-N1/2+k1)*n2+n2-N2/2+k2] * ck02 * ck11 * ck21;
+ f_hat[(k0*N1+N1/2+k1)*N2+k2] = g_hat[((n0-N0/2+k0)*n1+k1)*n2+n2-N2/2+k2] * ck01 * ck12 * ck21;
+ f_hat[((N0/2+k0)*N1+N1/2+k1)*N2+k2] = g_hat[(k0*n1+k1)*n2+n2-N2/2+k2] * ck02 * ck12 * ck21;
+
+ f_hat[(k0*N1+k1)*N2+N2/2+k2] = g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+k2] * ck01 * ck11 * ck22;
+ f_hat[((N0/2+k0)*N1+k1)*N2+N2/2+k2] = g_hat[(k0*n1+n1-N1/2+k1)*n2+k2] * ck02 * ck11 * ck22;
+ f_hat[(k0*N1+N1/2+k1)*N2+N2/2+k2] = g_hat[((n0-N0/2+k0)*n1+k1)*n2+k2] * ck01 * ck12 * ck22;
+ f_hat[((N0/2+k0)*N1+N1/2+k1)*N2+N2/2+k2] = g_hat[(k0*n1+k1)*n2+k2] * ck02 * ck12 * ck22;
+ }
+ }
+ }
+
+ TOC(0)
+}
+
+/** user routines
+ */
+void nfft_trafo(nfft_plan *ths)
+{
+ switch(ths->d)
+ {
+ case 1: nfft_trafo_1d(ths); break;
+ case 2: nfft_trafo_2d(ths); break;
+ case 3: nfft_trafo_3d(ths); break;
+ default:
+ /* use ths->my_fftw_plan1 */
+ ths->g_hat=ths->g1;
+ ths->g=ths->g2;
+
+ /** form \f$ \hat g_k = \frac{\hat f_k}{c_k\left(\phi\right)} \text{ for }
+ * k \in I_N \f$
+ */
+ TIC(0)
+ nfft_D_A(ths);
+ TOC(0)
+
+ /** compute by d-variate discrete Fourier transform
+ * \f$ g_l = \sum_{k \in I_N} \hat g_k {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
+ * \text{ for } l \in I_n \f$
+ */
+ TIC_FFTW(1)
+ fftw_execute(ths->my_fftw_plan1);
+ TOC_FFTW(1)
+
+ /** set \f$ f_j =\sum_{l \in I_n,m(x_j)} g_l \psi\left(x_j-\frac{l}{n}\right)
+ * \text{ for } j=0,\hdots,M_total-1 \f$
+ */
+ TIC(2)
+ nfft_B_A(ths);
+ TOC(2)
+ }
+} /* nfft_trafo */
+
+void nfft_adjoint(nfft_plan *ths)
+{
+ switch(ths->d)
+ {
+ case 1: nfft_adjoint_1d(ths); break;
+ case 2: nfft_adjoint_2d(ths); break;
+ case 3: nfft_adjoint_3d(ths); break;
+ default:
+ /* use ths->my_fftw_plan2 */
+ ths->g_hat=ths->g1;
+ ths->g=ths->g2;
+
+ /** set \f$ g_l = \sum_{j=0}^{M_total-1} f_j \psi\left(x_j-\frac{l}{n}\right)
+ * \text{ for } l \in I_n,m(x_j) \f$
+ */
+ TIC(2)
+ nfft_B_T(ths);
+ TOC(2)
+
+ /** compute by d-variate discrete Fourier transform
+ * \f$ \hat g_k = \sum_{l \in I_n} g_l {\rm e}^{+2\pi {\rm i} \frac{kl}{n}}
+ * \text{ for } k \in I_N\f$
+ */
+ TIC_FFTW(1)
+ fftw_execute(ths->my_fftw_plan2);
+ TOC_FFTW(1)
+
+ /** form \f$ \hat f_k = \frac{\hat g_k}{c_k\left(\phi\right)} \text{ for }
+ * k \in I_N \f$
+ */
+ TIC(0)
+ nfft_D_T(ths);
+ TOC(0)
+ }
+} /* nfft_adjoint */
+
+
+/** initialisation of direct transform
+ */
+static void nfft_precompute_phi_hut(nfft_plan *ths)
+{
+ int ks[ths->d]; /**< index over all frequencies */
+ int t; /**< index over all dimensions */
+
+ ths->c_phi_inv = (R**) nfft_malloc(ths->d*sizeof(R*));
+
+ for(t=0; t<ths->d; t++)
+ {
+ ths->c_phi_inv[t]= (R*)nfft_malloc(ths->N[t]*sizeof(R));
+ for(ks[t]=0; ks[t]<ths->N[t]; ks[t]++)
+ ths->c_phi_inv[t][ks[t]]= K(1.0)/(PHI_HUT(ks[t]-ths->N[t]/2,t));
+ }
+} /* nfft_phi_hut */
+
+/** create a lookup table, but NOT for each node
+ * good idea K=2^xx
+ * TODO: estimate K, call from init
+ * assumes an EVEN window function
+ */
+void nfft_precompute_lin_psi(nfft_plan *ths)
+{
+ int t; /**< index over all dimensions */
+ int j; /**< index over all nodes */
+ R step; /**< step size in [0,(m+2)/n] */
+
+ for (t=0; t<ths->d; t++)
+ {
+ step=((R)(ths->m+2))/(((R)ths->K)*ths->n[t]);
+ for(j=0;j<=ths->K;j++)
+ {
+ ths->psi[(ths->K+1)*t + j] = PHI(j*step,t);
+ } /* for(j) */
+ } /* for(t) */
+}
+
+static void nfft_precompute_fg_psi(nfft_plan *ths)
+{
+ int t; /**< index over all dimensions */
+ int u, o; /**< depends on x_j */
+
+ nfft_sort_nodes(ths);
+
+ for (t=0; t<ths->d; t++)
+ {
+ int j;
+ #pragma omp parallel for default(shared) private(j,u,o)
+ for (j = 0; j < ths->M_total; j++)
+ {
+ nfft_uo(ths,j,&u,&o,t);
+
+ ths->psi[2*(j*ths->d+t)]=
+ (PHI((ths->x[j*ths->d+t]-((R)u)/ths->n[t]),t));
+
+ ths->psi[2*(j*ths->d+t)+1]=
+ EXP(K(2.0)*(ths->n[t]*ths->x[j*ths->d+t] - u) / ths->b[t]);
+ } /* for(j) */
+ }
+ /* for(t) */
+} /* nfft_precompute_fg_psi */
+
+void nfft_precompute_psi(nfft_plan *ths)
+{
+ int t; /**< index over all dimensions */
+ int l; /**< index u<=l<=o */
+ int lj; /**< index 0<=lj<u+o+1 */
+ int u, o; /**< depends on x_j */
+
+ nfft_sort_nodes(ths);
+
+ for (t=0; t<ths->d; t++)
+ {
+ int j;
+ #pragma omp parallel for default(shared) private(j,l,lj,u,o)
+ for (j = 0; j < ths->M_total; j++)
+ {
+ nfft_uo(ths,j,&u,&o,t);
+
+ for(l=u, lj=0; l <= o; l++, lj++)
+ ths->psi[(j*ths->d+t)*(2*ths->m+2)+lj]=
+ (PHI((ths->x[j*ths->d+t]-((R)l)/ths->n[t]),t));
+ } /* for(j) */
+ }
+ /* for(t) */
+} /* nfft_precompute_psi */
+
+#ifdef _OPENMP
+static void nfft_precompute_full_psi_omp(nfft_plan *ths)
+{
+ int j; /**< index over all nodes */
+ int lprod; /**< 'bandwidth' of matrix B */
+
+ {
+ int t;
+ for(t=0,lprod = 1; t<ths->d; t++)
+ lprod *= 2*ths->m+2;
+ }
+
+ #pragma omp parallel for default(shared) private(j)
+ for(j=0; j<ths->M_total; j++)
+ {
+ int t,t2; /**< index over all dimensions */
+ int l_L; /**< plain index 0<=l_L<lprod */
+ int l[ths->d]; /**< multi index u<=l<=o */
+ int lj[ths->d]; /**< multi index 0<=lj<u+o+1 */
+ int ll_plain[ths->d+1]; /**< postfix plain index */
+
+ int u[ths->d], o[ths->d]; /**< depends on x_j */
+
+ R phi_prod[ths->d+1];
+ int ix = j*lprod;
+
+ phi_prod[0]=1;
+ ll_plain[0]=0;
+
+ MACRO_init_uo_l_lj_t;
+
+ for(l_L=0; l_L<lprod; l_L++, ix++)
+ {
+ MACRO_update_phi_prod_ll_plain(without_PRE_PSI);
+
+ ths->psi_index_g[ix]=ll_plain[ths->d];
+ ths->psi[ix]=phi_prod[ths->d];
+
+ MACRO_count_uo_l_lj_t;
+ } /* for(l_L) */
+
+ ths->psi_index_f[j]=lprod;
+ } /* for(j) */
+}
+#endif
+
+void nfft_precompute_full_psi(nfft_plan *ths)
+{
+#ifdef _OPENMP
+ nfft_sort_nodes(ths);
+
+ nfft_precompute_full_psi_omp(ths);
+#else
+ int t,t2; /**< index over all dimensions */
+ int j; /**< index over all nodes */
+ int l_L; /**< plain index 0<=l_L<lprod */
+ int l[ths->d]; /**< multi index u<=l<=o */
+ int lj[ths->d]; /**< multi index 0<=lj<u+o+1 */
+ int ll_plain[ths->d+1]; /**< postfix plain index */
+ int lprod; /**< 'bandwidth' of matrix B */
+ int u[ths->d], o[ths->d]; /**< depends on x_j */
+
+ R phi_prod[ths->d+1];
+
+ int ix,ix_old;
+
+ nfft_sort_nodes(ths);
+
+ phi_prod[0]=1;
+ ll_plain[0]=0;
+
+ for(t=0,lprod = 1; t<ths->d; t++)
+ lprod *= 2*ths->m+2;
+
+ for(j=0,ix=0,ix_old=0; j<ths->M_total; j++)
+ {
+ MACRO_init_uo_l_lj_t;
+
+ for(l_L=0; l_L<lprod; l_L++, ix++)
+ {
+ MACRO_update_phi_prod_ll_plain(without_PRE_PSI);
+
+ ths->psi_index_g[ix]=ll_plain[ths->d];
+ ths->psi[ix]=phi_prod[ths->d];
+
+ MACRO_count_uo_l_lj_t;
+ } /* for(l_L) */
+
+
+ ths->psi_index_f[j]=ix-ix_old;
+ ix_old=ix;
+ } /* for(j) */
+#endif
+}
+
+void nfft_precompute_one_psi(nfft_plan *ths)
+{
+ if(ths->nfft_flags & PRE_LIN_PSI)
+ nfft_precompute_lin_psi(ths);
+ if(ths->nfft_flags & PRE_FG_PSI)
+ nfft_precompute_fg_psi(ths);
+ if(ths->nfft_flags & PRE_PSI)
+ nfft_precompute_psi(ths);
+ if(ths->nfft_flags & PRE_FULL_PSI)
+ nfft_precompute_full_psi(ths);
+}
+
+
+static void nfft_init_help(nfft_plan *ths)
+{
+ int t; /**< index over all dimensions */
+ int lprod; /**< 'bandwidth' of matrix B */
+
+ if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)
+ ths->nfft_flags |= NFFT_SORT_NODES;
+
+ ths->N_total=nfft_prod_int(ths->N, ths->d);
+ ths->n_total=nfft_prod_int(ths->n, ths->d);
+
+ ths->sigma = (R*) nfft_malloc(ths->d*sizeof(R));
+ for(t = 0;t < ths->d; t++)
+ ths->sigma[t] = ((R)ths->n[t])/ths->N[t];
+
+ WINDOW_HELP_INIT;
+
+ if(ths->nfft_flags & MALLOC_X)
+ ths->x = (R*)nfft_malloc(ths->d*ths->M_total*sizeof(R));
+
+ if(ths->nfft_flags & MALLOC_F_HAT)
+ ths->f_hat = (fftw_complex*)nfft_malloc(ths->N_total*sizeof(C));
+
+ if(ths->nfft_flags & MALLOC_F)
+ ths->f = (fftw_complex*)nfft_malloc(ths->M_total*sizeof(C));
+
+ if(ths->nfft_flags & PRE_PHI_HUT)
+ nfft_precompute_phi_hut(ths);
+
+ if(ths->nfft_flags & PRE_LIN_PSI)
+ {
+ ths->K=(1U<< 10)*(ths->m+2);
+ ths->psi = (R*) nfft_malloc((ths->K+1)*ths->d*sizeof(R));
+ }
+
+ if(ths->nfft_flags & PRE_FG_PSI)
+ ths->psi = (R*) nfft_malloc(ths->M_total*ths->d*2*sizeof(R));
+
+ if(ths->nfft_flags & PRE_PSI)
+ ths->psi = (R*) nfft_malloc(ths->M_total*ths->d*
+ (2*ths->m+2)*sizeof(R));
+
+ if(ths->nfft_flags & PRE_FULL_PSI)
+ {
+ for(t=0,lprod = 1; t<ths->d; t++)
+ lprod *= 2*ths->m+2;
+
+ ths->psi = (R*) nfft_malloc(ths->M_total*lprod*sizeof(R));
+
+ ths->psi_index_f = (int*) nfft_malloc(ths->M_total*sizeof(int));
+ ths->psi_index_g = (int*) nfft_malloc(ths->M_total*lprod*sizeof(int));
+ }
+
+ if(ths->nfft_flags & FFTW_INIT)
+ {
+#ifdef _OPENMP
+ int nthreads = nfft_get_omp_num_threads();
+#endif
+
+ ths->g1=(fftw_complex*)nfft_malloc(ths->n_total*sizeof(C));
+
+ if(ths->nfft_flags & FFT_OUT_OF_PLACE)
+ ths->g2 = (fftw_complex*) nfft_malloc(ths->n_total*sizeof(C));
+ else
+ ths->g2 = ths->g1;
+
+#ifdef _OPENMP
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+ fftw_plan_with_nthreads(nthreads);
+#endif
+ ths->my_fftw_plan1 = fftw_plan_dft(ths->d, ths->n, ths->g1, ths->g2, FFTW_FORWARD, ths->fftw_flags);
+ ths->my_fftw_plan2 = fftw_plan_dft(ths->d, ths->n, ths->g2, ths->g1,
+ FFTW_BACKWARD, ths->fftw_flags);
+#ifdef _OPENMP
+}
+#endif
+ }
+
+ if(ths->nfft_flags & NFFT_SORT_NODES)
+ ths->index_x = (int*) nfft_malloc(sizeof(int)*2*ths->M_total);
+ else
+ ths->index_x = NULL;
+
+ ths->mv_trafo = (void (*) (void* ))nfft_trafo;
+ ths->mv_adjoint = (void (*) (void* ))nfft_adjoint;
+}
+
+void nfft_init(nfft_plan *ths, int d, int *N, int M_total)
+{
+ int t; /**< index over all dimensions */
+
+ ths->d = d;
+
+ ths->N=(int*) nfft_malloc(d*sizeof(int));
+
+ for (t = 0;t < d; t++)
+ ths->N[t] = N[t];
+
+ ths->M_total = M_total;
+
+ ths->n = (int*) nfft_malloc(d*sizeof(int));
+ for (t = 0;t < d; t++)
+ ths->n[t] = 2*X(next_power_of_2)(ths->N[t]);
+
+ ths->m = WINDOW_HELP_ESTIMATE_m;
+
+ if (d > 1)
+ {
+#ifdef _OPENMP
+ ths->nfft_flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
+ FFTW_INIT | FFT_OUT_OF_PLACE | NFFT_SORT_NODES |
+ NFFT_OMP_BLOCKWISE_ADJOINT;
+#else
+ ths->nfft_flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
+ FFTW_INIT | FFT_OUT_OF_PLACE | NFFT_SORT_NODES;
+#endif
+ }
+ else
+ ths->nfft_flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
+ FFTW_INIT | FFT_OUT_OF_PLACE;
+
+ ths->fftw_flags= FFTW_ESTIMATE| FFTW_DESTROY_INPUT;
+
+ nfft_init_help(ths);
+}
+
+void nfft_init_guru(nfft_plan *ths, int d, int *N, int M_total, int *n,
+ int m, unsigned nfft_flags, unsigned fftw_flags)
+{
+ int t; /**< index over all dimensions */
+
+ ths->d =d;
+ ths->N= (int*) nfft_malloc(ths->d*sizeof(int));
+ for(t=0; t<d; t++)
+ ths->N[t]= N[t];
+ ths->M_total= M_total;
+ ths->n= (int*) nfft_malloc(ths->d*sizeof(int));
+ for(t=0; t<d; t++)
+ ths->n[t]= n[t];
+ ths->m= m;
+ ths->nfft_flags= nfft_flags;
+ ths->fftw_flags= fftw_flags;
+
+ nfft_init_help(ths);
+}
+
+void nfft_init_1d(nfft_plan *ths, int N1, int M_total)
+{
+ int N[1];
+
+ N[0]=N1;
+
+ nfft_init(ths, 1, N, M_total);
+}
+
+void nfft_init_2d(nfft_plan *ths, int N1, int N2, int M_total)
+{
+ int N[2];
+
+ N[0]=N1;
+ N[1]=N2;
+ nfft_init(ths,2,N,M_total);
+}
+
+void nfft_init_3d(nfft_plan *ths, int N1, int N2, int N3, int M_total)
+{
+ int N[3];
+
+ N[0]=N1;
+ N[1]=N2;
+ N[2]=N3;
+ nfft_init(ths,3,N,M_total);
+}
+
+const char* nfft_check(nfft_plan *ths)
+{
+ int j;
+
+ for(j=0;j<ths->M_total*ths->d;j++)
+ if((ths->x[j]<-K(0.5)) || (ths->x[j]>= K(0.5)))
+ return "ths->x out of range [-0.5,0.5)";
+
+ for(j=0;j<ths->d;j++)
+ {
+ if(ths->sigma[j]<=1)
+ return "nfft_check: oversampling factor too small";
+
+ if(ths->N[j]<=ths->m)
+ return "Polynomial degree N is smaller than cut-off m";
+
+ if(ths->N[j]%2==1)
+ return "polynomial degree N has to be even";
+ }
+ return 0;
+}
+
+void nfft_finalize(nfft_plan *ths)
+{
+ int t; /* index over dimensions */
+
+ if(ths->nfft_flags & NFFT_SORT_NODES)
+ nfft_free(ths->index_x);
+
+ if(ths->nfft_flags & FFTW_INIT)
+ {
+#pragma omp critical (nfft_omp_critical_fftw_plan)
+{
+ fftw_destroy_plan(ths->my_fftw_plan2);
+ fftw_destroy_plan(ths->my_fftw_plan1);
+}
+
+ if(ths->nfft_flags & FFT_OUT_OF_PLACE)
+ nfft_free(ths->g2);
+
+ nfft_free(ths->g1);
+ }
+
+ if(ths->nfft_flags & PRE_FULL_PSI)
+ {
+ nfft_free(ths->psi_index_g);
+ nfft_free(ths->psi_index_f);
+ nfft_free(ths->psi);
+ }
+
+ if(ths->nfft_flags & PRE_PSI)
+ nfft_free(ths->psi);
+
+ if(ths->nfft_flags & PRE_FG_PSI)
+ nfft_free(ths->psi);
+
+ if(ths->nfft_flags & PRE_LIN_PSI)
+ nfft_free(ths->psi);
+
+ if(ths->nfft_flags & PRE_PHI_HUT)
+ {
+ for(t=0; t<ths->d; t++)
+ nfft_free(ths->c_phi_inv[t]);
+ nfft_free(ths->c_phi_inv);
+ }
+
+ if(ths->nfft_flags & MALLOC_F)
+ nfft_free(ths->f);
+
+ if(ths->nfft_flags & MALLOC_F_HAT)
+ nfft_free(ths->f_hat);
+
+ if(ths->nfft_flags & MALLOC_X)
+ nfft_free(ths->x);
+
+ WINDOW_HELP_FINALIZE;
+
+ nfft_free(ths->sigma);
+ nfft_free(ths->n);
+ nfft_free(ths->N);
+}
diff --git a/kernel/nfsft/Makefile.am b/kernel/nfsft/Makefile.am
new file mode 100644
index 0000000..42e6460
--- /dev/null
+++ b/kernel/nfsft/Makefile.am
@@ -0,0 +1,20 @@
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+if HAVE_THREADS
+ LIBNFSFT_THREADS_LA = libnfsft_threads.la
+else
+ LIBNFSFT_THREADS_LA =
+endif
+
+noinst_LTLIBRARIES = libnfsft.la $(LIBNFSFT_THREADS_LA)
+libnfsft_la_SOURCES = nfsft.c legendre.h legendre.c api.h
+
+if HAVE_THREADS
+ libnfsft_threads_la_SOURCES = nfsft.c legendre.h legendre.c api.h
+if HAVE_OPENMP
+ libnfsft_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
diff --git a/kernel/nfsft/Makefile.in b/kernel/nfsft/Makefile.in
new file mode 100644
index 0000000..fe8aba2
--- /dev/null
+++ b/kernel/nfsft/Makefile.in
@@ -0,0 +1,591 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/nfsft
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libnfsft_la_LIBADD =
+am_libnfsft_la_OBJECTS = nfsft.lo legendre.lo
+libnfsft_la_OBJECTS = $(am_libnfsft_la_OBJECTS)
+libnfsft_threads_la_LIBADD =
+am__libnfsft_threads_la_SOURCES_DIST = nfsft.c legendre.h legendre.c \
+ api.h
+ at HAVE_THREADS_TRUE@am_libnfsft_threads_la_OBJECTS = \
+ at HAVE_THREADS_TRUE@ libnfsft_threads_la-nfsft.lo \
+ at HAVE_THREADS_TRUE@ libnfsft_threads_la-legendre.lo
+libnfsft_threads_la_OBJECTS = $(am_libnfsft_threads_la_OBJECTS)
+libnfsft_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libnfsft_threads_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+ at HAVE_THREADS_TRUE@am_libnfsft_threads_la_rpath =
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libnfsft_la_SOURCES) $(libnfsft_threads_la_SOURCES)
+DIST_SOURCES = $(libnfsft_la_SOURCES) \
+ $(am__libnfsft_threads_la_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+ at HAVE_THREADS_FALSE@LIBNFSFT_THREADS_LA =
+ at HAVE_THREADS_TRUE@LIBNFSFT_THREADS_LA = libnfsft_threads.la
+noinst_LTLIBRARIES = libnfsft.la $(LIBNFSFT_THREADS_LA)
+libnfsft_la_SOURCES = nfsft.c legendre.h legendre.c api.h
+ at HAVE_THREADS_TRUE@libnfsft_threads_la_SOURCES = nfsft.c legendre.h legendre.c api.h
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libnfsft_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nfsft/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu kernel/nfsft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libnfsft.la: $(libnfsft_la_OBJECTS) $(libnfsft_la_DEPENDENCIES) $(EXTRA_libnfsft_la_DEPENDENCIES)
+ $(LINK) $(libnfsft_la_OBJECTS) $(libnfsft_la_LIBADD) $(LIBS)
+libnfsft_threads.la: $(libnfsft_threads_la_OBJECTS) $(libnfsft_threads_la_DEPENDENCIES) $(EXTRA_libnfsft_threads_la_DEPENDENCIES)
+ $(libnfsft_threads_la_LINK) $(am_libnfsft_threads_la_rpath) $(libnfsft_threads_la_OBJECTS) $(libnfsft_threads_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/legendre.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libnfsft_threads_la-legendre.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libnfsft_threads_la-nfsft.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsft.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+libnfsft_threads_la-nfsft.lo: nfsft.c
+ at am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_threads_la_CFLAGS) $(CFLAGS) -MT libnfsft_threads_la-nfsft.lo -MD -MP -MF $(DEPDIR)/libnfsft_threads_la-nfsft.Tpo -c -o libnfsft_threads_la-nfsft.lo `test -f 'nfsft.c' || echo '$(srcdir)/'`nfsft.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libnfsft_threads_la-nfsft.Tpo $(DEPDIR)/libnfsft_threads_la-nfsft.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nfsft.c' object='libnfsft_threads_la-nfsft.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_threads_la_CFLAGS) $(CFLAGS) -c -o libnfsft_threads_la-nfsft.lo `test -f 'nfsft.c' || echo '$(srcdir)/'`nfsft.c
+
+libnfsft_threads_la-legendre.lo: legendre.c
+ at am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_threads_la_CFLAGS) $(CFLAGS) -MT libnfsft_threads_la-legendre.lo -MD -MP -MF $(DEPDIR)/libnfsft_threads_la-legendre.Tpo -c -o libnfsft_threads_la-legendre.lo `test -f 'legendre.c' || echo '$(srcdir)/'`legendre.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libnfsft_threads_la-legendre.Tpo $(DEPDIR)/libnfsft_threads_la-legendre.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='legendre.c' object='libnfsft_threads_la-legendre.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_threads_la_CFLAGS) $(CFLAGS) -c -o libnfsft_threads_la-legendre.lo `test -f 'legendre.c' || echo '$(srcdir)/'`legendre.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/nfsft/api.h b/kernel/nfsft/api.h
new file mode 100644
index 0000000..ef479a5
--- /dev/null
+++ b/kernel/nfsft/api.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: api.h 3775 2012-06-02 16:39:48Z keiner $ */
+
+/**
+ * \file api.h
+ * \brief Header file with internal API of the NFSFT module
+ * \author Jens Keiner
+ */
+#ifndef API_H
+#define API_H
+
+#include "config.h"
+#include "nfft3.h"
+
+/** \addtogroup nfsft
+ * \{
+ */
+
+/* "Default exponent of maximum bandwidth" */
+#define BWEXP_MAX 10
+
+/* "Default maximum bandwidth" */
+#define BW_MAX 1024
+
+#define ROW(k) (k*(wisdom.N_MAX+2))
+#define ROWK(k) (k*(wisdom.N_MAX+2)+k)
+
+#ifdef HAVE_STDBOOL_H
+ #include <stdbool.h>
+#else
+ typedef enum {false = 0,true = 1} bool;
+#endif
+
+//#define FIRST_L (int)floor(ntilde/(double)plength)
+//#define LAST_L (int)ceil((Mtilde+1)/(double)plength)-1
+
+
+/**
+ * Wisdom structure
+ */
+struct nfsft_wisdom
+{
+ /** Indicates wether the structure has been initialized. */
+ bool initialized;
+ unsigned int flags;
+ /** Stores precomputation flags. */
+ /** The maximum bandwidth /f$N_{\text{max}} \in \mathbb{N}_0/f$ */
+ int N_MAX;
+ /** The logarithm /f$t = \log_2 N_{\text{max}}/f$ of the maximum bandwidth */
+ int T_MAX;
+
+ /* Data for the direct algorithms */
+
+ /**
+ * Precomputed recursion coefficients /f$\alpha_k^n/f$ for /f$k = 0,/ldots,
+ * N_{\text{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions
+ * /f$P_k^n/f$
+ */
+ double *alpha;
+ /**
+ * Precomputed recursion coefficients /f$\beta_k^n/f$ for /f$k = 0,/ldots,
+ * N_{\text{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions
+ * /f$P_k^n/f$
+ */
+ double *beta;
+ /**
+ * Precomputed recursion coefficients /f$\gamma_k^n/f$ for /f$k = 0,/ldots,
+ * N_{\text{max}}; n=-k,/ldots,k/f$ of associated Legendre-functions
+ * /f$P_k^n/f$
+ */
+ double *gamma;
+
+ /* Data for fast algorithms. */
+
+ /** The threshold /f$\kappa/f$ */
+ double threshold;
+#ifdef _OPENMP
+ int nthreads;
+ fpt_set *set_threads;
+#else
+ /** Structure for \e discrete \e polynomial \e transform (\e DPT) */
+ fpt_set set;
+#endif
+};
+/* \} */
+#endif
+
diff --git a/kernel/nfsft/legendre.c b/kernel/nfsft/legendre.c
new file mode 100644
index 0000000..1790c17
--- /dev/null
+++ b/kernel/nfsft/legendre.c
@@ -0,0 +1,211 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: legendre.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include <math.h>
+#include <stdio.h>
+#include "infft.h"
+#include "nfft3util.h"
+#include "legendre.h"
+
+/* One over sqrt(pi) */
+DK(KSQRTPII,0.56418958354775628694807945156077258584405062932900);
+
+static inline R alpha_al(const int k, const int n)
+{
+ if (k > 0)
+ {
+ if (k < n)
+ return IF(k%2,K(1.0),K(-1.0));
+ else
+ return SQRT(((R)(2*k+1))/((R)(k-n+1)))*SQRT((((R)(2*k+1))/((R)(k+n+1))));
+ }
+ else if (k == 0)
+ {
+ if (n == 0)
+ return K(1.0);
+ else
+ return IF(n%2,K(0.0),K(-1.0));
+ }
+ return K(0.0);
+}
+
+static inline R beta_al(const int k, const int n)
+{
+ if (0 <= k && k < n)
+ return K(1.0);
+ else
+ return K(0.0);
+}
+
+static inline R gamma_al(const int k, const int n)
+{
+ if (k == -1)
+ return SQRT(KSQRTPII*nfft_lambda((R)(n),K(0.5)));
+ else if (k <= n)
+ return K(0.0);
+ else
+ return -SQRT(((R)(k-n))/((R)(k-n+1))*((R)(k+n))/((R)(k+n+1)));
+}
+
+void alpha_al_row(R *alpha, const int N, const int n)
+{
+ int j;
+ R *p = alpha;
+ for (j = -1; j <= N; j++)
+ *p++ = alpha_al(j,n);
+}
+
+void beta_al_row(R *beta, const int N, const int n)
+{
+ int j;
+ R *p = beta;
+ for (j = -1; j <= N; j++)
+ *p++ = beta_al(j,n);
+}
+
+void gamma_al_row(R *gamma, const int N, const int n)
+{
+ int j;
+ R *p = gamma;
+ for (j = -1; j <= N; j++)
+ *p++ = gamma_al(j,n);
+}
+
+inline void alpha_al_all(R *alpha, const int N)
+{
+ int i,j;
+ R *p = alpha;
+ for (i = 0; i <= N; i++)
+ for (j = -1; j <= N; j++)
+ *p++ = alpha_al(j,i);
+}
+
+inline void beta_al_all(R *alpha, const int N)
+{
+ int i,j;
+ R *p = alpha;
+ for (i = 0; i <= N; i++)
+ for (j = -1; j <= N; j++)
+ *p++ = beta_al(j,i);
+}
+
+inline void gamma_al_all(R *alpha, const int N)
+{
+ int i,j;
+ R *p = alpha;
+ for (i = 0; i <= N; i++)
+ for (j = -1; j <= N; j++)
+ *p++ = gamma_al(j,i);
+}
+
+void eval_al(R *x, R *y, const int size, const int k, R *alpha,
+ R *beta, R *gamma)
+{
+ /* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector
+ * of knots x[0], ..., x[size-1] by the Clenshaw algorithm
+ */
+ int i,j;
+ R a,b,x_val_act,a_old;
+ R *x_act, *y_act;
+ R *alpha_act, *beta_act, *gamma_act;
+
+ /* Traverse all nodes. */
+ x_act = x;
+ y_act = y;
+ for (i = 0; i < size; i++)
+ {
+ a = 1.0;
+ b = 0.0;
+ x_val_act = *x_act;
+
+ if (k == 0)
+ {
+ *y_act = 1.0;
+ }
+ else
+ {
+ alpha_act = &(alpha[k]);
+ beta_act = &(beta[k]);
+ gamma_act = &(gamma[k]);
+ for (j = k; j > 1; j--)
+ {
+ a_old = a;
+ a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));
+ b = a_old*(*gamma_act);
+ alpha_act--;
+ beta_act--;
+ gamma_act--;
+ }
+ *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);
+ }
+ x_act++;
+ y_act++;
+ }
+}
+
+int eval_al_thresh(R *x, R *y, const int size, const int k, R *alpha,
+ R *beta, R *gamma, R threshold)
+{
+ /* Evaluate the associated Legendre polynomial P_{k,nleg} (l,x) for the vector
+ * of knots x[0], ..., x[size-1] by the Clenshaw algorithm
+ */
+ int i,j;
+ R a,b,x_val_act,a_old;
+ R *x_act, *y_act;
+ R *alpha_act, *beta_act, *gamma_act;
+
+ /* Traverse all nodes. */
+ x_act = x;
+ y_act = y;
+ for (i = 0; i < size; i++)
+ {
+ a = 1.0;
+ b = 0.0;
+ x_val_act = *x_act;
+
+ if (k == 0)
+ {
+ *y_act = 1.0;
+ }
+ else
+ {
+ alpha_act = &(alpha[k]);
+ beta_act = &(beta[k]);
+ gamma_act = &(gamma[k]);
+ for (j = k; j > 1; j--)
+ {
+ a_old = a;
+ a = b + a_old*((*alpha_act)*x_val_act+(*beta_act));
+ b = a_old*(*gamma_act);
+ alpha_act--;
+ beta_act--;
+ gamma_act--;
+ }
+ *y_act = (a*((*alpha_act)*x_val_act+(*beta_act))+b);
+ if (fabs(*y_act) > threshold)
+ {
+ return 1;
+ }
+ }
+ x_act++;
+ y_act++;
+ }
+ return 0;
+}
diff --git a/kernel/nfsft/legendre.h b/kernel/nfsft/legendre.h
new file mode 100644
index 0000000..00fbd11
--- /dev/null
+++ b/kernel/nfsft/legendre.h
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: legendre.h 3775 2012-06-02 16:39:48Z keiner $ */
+
+/**
+ * \file nfsft.h
+ *
+ * \brief Header file for functions related to associated Legendre
+ * functions/polynomials
+ *
+ * \author Jens Keiner
+ */
+#ifndef LEGENDRE_H
+#define LEGENDRE_H
+
+#include "infft.h"
+
+/** \addtogroup nfsft
+ * \{
+ */
+
+void alpha_al_row(R *alpha, const int N, const int n);
+void beta_al_row(R *beta, const int N, const int n);
+void gamma_al_row(R *gamma, const int N, const int n);
+
+/**
+ * Compute three-term-recurrence coefficients \f$\alpha_{k-1}^n\f$ of associated
+ * Legendre functions for \f$k,n = 0,1,\ldots,N\f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(N+1)^2\f$ where the
+ * coefficients will be stored such that alpha[n+(N+1)+k] =
+ * \f$\alpha_{k-1}^n\f$.
+ * \arg N The upper bound \f$N\f$.
+ */
+void alpha_al_all(R *alpha, const int N);
+
+/**
+ * Compute three-term-recurrence coefficients \f$\beta_{k-1}^n\f$ of associated
+ * Legendre functions for \f$k,n = 0,1,\ldots,N\f$.
+ *
+ * \arg beta A pointer to an array of doubles of size \f$(N+1)^2\f$ where the
+ * coefficients will be stored such that beta[n+(N+1)+k] =
+ * \f$\beta_{k-1}^n\f$.
+ * \arg N The upper bound \f$N\f$.
+ */
+void beta_al_all(R *beta, const int N);
+
+/**
+ * Compute three-term-recurrence coefficients \f$\gamma_{k-1}^n\f$ of associated
+ * Legendre functions for \f$k,n = 0,1,\ldots,N\f$.
+ *
+ * \arg beta A pointer to an array of doubles of size \f$(N+1)^2\f$ where the
+ * coefficients will be stored such that gamma[n+(N+1)+k] =
+ * \f$\gamma_{k-1}^n\f$.
+ * \arg N The upper bound \f$N\f$.
+ */
+void gamma_al_all(R *gamma, const int N);
+
+/**
+ * Evaluates an associated Legendre polynomials \f$P_k^n(x,c)\f$ using the
+ * Clenshaw-algorithm.
+ *
+ * \arg x A pointer to an array of nodes where the function is to be evaluated
+ * \arg y A pointer to an array where the function values are returned
+ * \arg size The length of x and y
+ * \arg k The index \f$k\f$
+ * \arg alpha A pointer to an array containing the recurrence coefficients
+ * \f$\alpha_c^n,\ldots,\alpha_{c+k}^n\f$
+ * \arg beta A pointer to an array containing the recurrence coefficients
+ * \f$\beta_c^n,\ldots,\beta_{c+k}^n\f$
+ * \arg gamma A pointer to an array containing the recurrence coefficients
+ * \f$\gamma_c^n,\ldots,\gamma_{c+k}^n\f$
+ */
+void eval_al(R *x, R *y, const int size, const int k, R *alpha,
+ R *beta, R *gamma);
+
+/**
+ * Evaluates an associated Legendre polynomials \f$P_k^n(x,c)\f$ using the
+ * Clenshaw-algorithm if it no exceeds a given threshold.
+ *
+ * \arg x A pointer to an array of nodes where the function is to be evaluated
+ * \arg y A pointer to an array where the function values are returned
+ * \arg size The length of x and y
+ * \arg k The index \f$k\f$
+ * \arg alpha A pointer to an array containing the recurrence coefficients
+ * \f$\alpha_c^n,\ldots,\alpha_{c+k}^n\f$
+ * \arg beta A pointer to an array containing the recurrence coefficients
+ * \f$\beta_c^n,\ldots,\beta_{c+k}^n\f$
+ * \arg gamma A pointer to an array containing the recurrence coefficients
+ * \f$\gamma_c^n,\ldots,\gamma_{c+k}^n\f$
+ * \arg threshold The threshold
+ */
+int eval_al_thresh(R *x, R *y, const int size, const int k, R *alpha,
+ R *beta, R *gamma, R threshold);
+/* \} */
+#endif
diff --git a/kernel/nfsft/nfsft.c b/kernel/nfsft/nfsft.c
new file mode 100644
index 0000000..caa08fc
--- /dev/null
+++ b/kernel/nfsft/nfsft.c
@@ -0,0 +1,1268 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfsft.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * \file nfsft.c
+ * \brief Implementation file for the NFSFT module
+ * \author Jens Keiner
+ */
+
+#include "config.h"
+
+/* Include standard C headers. */
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+/* Include NFFT3 utilities header. */
+#include "nfft3util.h"
+
+/* Include NFFT3 library header. */
+#include "nfft3.h"
+
+#include "infft.h"
+
+/* Include private associated Legendre functions header. */
+#include "legendre.h"
+
+/* Include private API header. */
+#include "api.h"
+
+
+/** \addtogroup nfsft
+ * \{
+ */
+
+/**
+ * The default NFFT cutoff parameter
+ *
+ * \author Jens Keiner
+ */
+#define NFSFT_DEFAULT_NFFT_CUTOFF 6
+
+/**
+ * The default threshold for the FPT
+ *
+ * \author Jens Keiner
+ */
+#define NFSFT_DEFAULT_THRESHOLD 1000
+
+/**
+ * The break-even bandwidth \f$N \in \mathbb{N}_0\f$
+ *
+ * \author Jens Keiner
+ */
+#define NFSFT_BREAK_EVEN 5
+
+/**
+ * The global wisdom structure for precomputed data. \c wisdom.initialized
+ * is set to \c false and \c wisdom.flags is set to \c 0U.
+ *
+ * \author Jens Keiner
+ */
+static struct nfsft_wisdom wisdom = {false,0U,-1,-1,0,0,0,0,0};
+
+/**
+ * Converts coefficients \f$\left(b_k^n\right)_{k=0}^M\f$ with
+ * \f$M \in \mathbb{N}_0\f$, \f$-M \le n \le M\f$ from a linear combination
+ * of Chebyshev polynomials
+ * \f[
+ * f(\cos\vartheta) = \sum_{k=0}^{2\lfloor\frac{M}{2}\rfloor}
+ * a_k (\sin\vartheta)^{n\;\mathrm{mod}\;2} T_k(\cos\vartheta)
+ * \f]
+ * to coefficients \f$\left(c_k^n\right)_{k=0}^M\f$ matching the representation
+ * by complex exponentials
+ * \f[
+ * f(\cos\vartheta) = \sum_{k=-M}^{M} c_k \mathrm{e}^{\mathrm{i}k\vartheta}
+ * \f]
+ * for each order \f$n=-M,\ldots,M\f$.
+ *
+ * \arg plan The \c nfsft_plan containing the coefficients
+ * \f$\left(b_k^n\right)_{k=0,\ldots,M;n=-M,\ldots,M}\f$
+ *
+ * \remark The transformation is computed in place.
+ *
+ * \author Jens Keiner
+ */
+static inline void c2e(nfsft_plan *plan)
+{
+ int k; /**< The degree k */
+ int n; /**< The order k */
+ double _Complex last; /**< Stores temporary values */
+ double _Complex act; /**< Stores temporary values */
+ double _Complex *xp; /**< Auxilliary pointer */
+ double _Complex *xm; /**< Auxilliary pointer */
+ int low; /**< Lower loop bound */
+ int up; /**< Upper loop bound */
+ int lowe; /**< Lower loop bound for even terms */
+ int upe; /**< Upper loop bound for even terms */
+
+ /* Set the first row to order to zero since it is unused. */
+ memset(plan->f_hat_intern,0U,(2*plan->N+2)*sizeof(double _Complex));
+
+ /* Determine lower and upper bounds for loop processing even terms. */
+ lowe = -plan->N + (plan->N%2);
+ upe = -lowe;
+
+ /* Process even terms. */
+ for (n = lowe; n <= upe; n += 2)
+ {
+ /* Compute new coefficients \f$\left(c_k^n\right)_{k=-M,\ldots,M}\f$ from
+ * old coefficients $\left(b_k^n\right)_{k=0,\ldots,M}$. */
+ xm = &(plan->f_hat_intern[NFSFT_INDEX(-1,n,plan)]);
+ xp = &(plan->f_hat_intern[NFSFT_INDEX(+1,n,plan)]);
+ for(k = 1; k <= plan->N; k++)
+ {
+ *xp *= 0.5;
+ *xm-- = *xp++;
+ }
+ /* Set the first coefficient in the array corresponding to this order to
+ * zero since it is unused. */
+ *xm = 0.0;
+ }
+
+ /* Determine lower and upper bounds for loop processing odd terms. */
+ low = -plan->N + (1-plan->N%2);
+ up = -low;
+
+ /* Process odd terms incorporating the additional sine term
+ * \f$\sin \vartheta\f$. */
+ for (n = low; n <= up; n += 2)
+ {
+ /* Compute new coefficients \f$\left(c_k^n\right)_{k=-M,\ldots,M}\f$ from
+ * old coefficients $\left(b_k^n\right)_{k=0,\ldots,M-1}$ incorporating
+ * the additional term \f$\sin \vartheta\f$. */
+ plan->f_hat_intern[NFSFT_INDEX(0,n,plan)] *= 2.0;
+ xp = &(plan->f_hat_intern[NFSFT_INDEX(-plan->N-1,n,plan)]);
+ /* Set the first coefficient in the array corresponding to this order to zero
+ * since it is unused. */
+ *xp++ = 0.0;
+ xm = &(plan->f_hat_intern[NFSFT_INDEX(plan->N,n,plan)]);
+ last = *xm;
+ *xm = 0.5 * _Complex_I * (0.5*xm[-1]);
+ *xp++ = -(*xm--);
+ for (k = plan->N-1; k > 0; k--)
+ {
+ act = *xm;
+ *xm = 0.5 * _Complex_I * (0.5*(xm[-1] - last));
+ *xp++ = -(*xm--);
+ last = act;
+ }
+ *xm = 0.0;
+ }
+}
+
+/**
+ * Transposed version of the function \ref c2e
+ *
+ * \arg plan The \c nfsft_plan containing the coefficients
+ * \f$\left(c_k^n\right)_{k=-M,\ldots,M;n=-M,\ldots,M}\f$
+ *
+ * \remark The transformation is computed in place.
+ *
+ * \author Jens Keiner
+ */
+static inline void c2e_transposed(nfsft_plan *plan)
+{
+ int k; /**< The degree k */
+ int n; /**< The order k */
+ double _Complex last; /**< Stores temporary values */
+ double _Complex act; /**< Stores temporary values */
+ double _Complex *xp; /**< Auxilliary pointer */
+ double _Complex *xm; /**< Auxilliary pointer */
+ int low; /**< Lower loop bound */
+ int up; /**< Upper loop bound */
+ int lowe; /**< Lower loop bound for even terms */
+ int upe; /**< Upper loop bound for even terms */
+
+ /* Determine lower and upper bounds for loop processing even terms. */
+ lowe = -plan->N + (plan->N%2);
+ upe = -lowe;
+
+ /* Process even terms. */
+ for (n = lowe; n <= upe; n += 2)
+ {
+ /* Compute new coefficients \f$\left(b_k^n\right)_{k=0,\ldots,M}\f$ from
+ * old coefficients $\left(c_k^n\right)_{k=-M,\ldots,M}$. */
+ xm = &(plan->f_hat[NFSFT_INDEX(-1,n,plan)]);
+ xp = &(plan->f_hat[NFSFT_INDEX(+1,n,plan)]);
+ for(k = 1; k <= plan->N; k++)
+ {
+ *xp += *xm--;
+ *xp++ *= 0.5;;
+ }
+ }
+
+ /* Determine lower and upper bounds for loop processing odd terms. */
+ low = -plan->N + (1-plan->N%2);
+ up = -low;
+
+ /* Process odd terms. */
+ for (n = low; n <= up; n += 2)
+ {
+ /* Compute new coefficients \f$\left(b_k^n\right)_{k=0,\ldots,M-1}\f$ from
+ * old coefficients $\left(c_k^n\right)_{k=0,\ldots,M-1}$. */
+ xm = &(plan->f_hat[NFSFT_INDEX(-1,n,plan)]);
+ xp = &(plan->f_hat[NFSFT_INDEX(+1,n,plan)]);
+ for(k = 1; k <= plan->N; k++)
+ {
+ *xp++ -= *xm--;
+ }
+
+ plan->f_hat[NFSFT_INDEX(0,n,plan)] =
+ -0.25*_Complex_I*plan->f_hat[NFSFT_INDEX(1,n,plan)];
+ last = plan->f_hat[NFSFT_INDEX(1,n,plan)];
+ plan->f_hat[NFSFT_INDEX(1,n,plan)] =
+ -0.25*_Complex_I*plan->f_hat[NFSFT_INDEX(2,n,plan)];
+
+ xp = &(plan->f_hat[NFSFT_INDEX(2,n,plan)]);
+ for (k = 2; k < plan->N; k++)
+ {
+ act = *xp;
+ *xp = -0.25 * _Complex_I * (xp[1] - last);
+ xp++;
+ last = act;
+ }
+ *xp = 0.25 * _Complex_I * last;
+
+ plan->f_hat[NFSFT_INDEX(0,n,plan)] *= 2.0;
+ }
+}
+
+void nfsft_init(nfsft_plan *plan, int N, int M)
+{
+ /* Call nfsft_init_advanced with default flags. */
+ nfsft_init_advanced(plan, N, M, NFSFT_MALLOC_X | NFSFT_MALLOC_F |
+ NFSFT_MALLOC_F_HAT);
+}
+
+void nfsft_init_advanced(nfsft_plan* plan, int N, int M,
+ unsigned int flags)
+{
+ /* Call nfsft_init_guru with the flags and default NFFT cut-off. */
+ nfsft_init_guru(plan, N, M, flags, PRE_PHI_HUT | PRE_PSI | FFTW_INIT |
+ FFT_OUT_OF_PLACE, NFSFT_DEFAULT_NFFT_CUTOFF);
+}
+
+void nfsft_init_guru(nfsft_plan *plan, int N, int M, unsigned int flags,
+ unsigned int nfft_flags, int nfft_cutoff)
+{
+ int *nfft_size; /*< NFFT size */
+ int *fftw_size; /*< FFTW size */
+
+ /* Save the flags in the plan. */
+ plan->flags = flags;
+
+ /* Save the bandwidth N and the number of samples M in the plan. */
+ plan->N = N;
+ plan->M_total = M;
+
+ /* Calculate the next greater power of two with respect to the bandwidth N
+ * and the corresponding exponent. */
+ //next_power_of_2_exp(plan->N,&plan->NPT,&plan->t);
+
+ /* Save length of array of Fourier coefficients. Owing to the data layout the
+ * length is (2N+2)(2N+2) */
+ plan->N_total = (2*plan->N+2)*(2*plan->N+2);
+
+ /* Allocate memory for auxilliary array of spherical Fourier coefficients,
+ * if neccesary. */
+ if (plan->flags & NFSFT_PRESERVE_F_HAT)
+ {
+ plan->f_hat_intern = (double _Complex*) nfft_malloc(plan->N_total*
+ sizeof(double _Complex));
+ }
+
+ /* Allocate memory for spherical Fourier coefficients, if neccesary. */
+ if (plan->flags & NFSFT_MALLOC_F_HAT)
+ {
+ plan->f_hat = (double _Complex*) nfft_malloc(plan->N_total*
+ sizeof(double _Complex));
+ }
+
+ /* Allocate memory for samples, if neccesary. */
+ if (plan->flags & NFSFT_MALLOC_F)
+ {
+ plan->f = (double _Complex*) nfft_malloc(plan->M_total*sizeof(double _Complex));
+ }
+
+ /* Allocate memory for nodes, if neccesary. */
+ if (plan->flags & NFSFT_MALLOC_X)
+ {
+ plan->x = (double*) nfft_malloc(plan->M_total*2*sizeof(double));
+ }
+
+ /* Check if fast algorithm is activated. */
+ if (plan->flags & NFSFT_NO_FAST_ALGORITHM)
+ {
+ }
+ else
+ {
+ nfft_size = (int*)nfft_malloc(2*sizeof(int));
+ fftw_size = (int*)nfft_malloc(2*sizeof(int));
+
+ /** \todo Replace 4*plan->N by next_power_of_2(2*this->n). */
+ nfft_size[0] = 2*plan->N+2;
+ nfft_size[1] = 2*plan->N+2;
+ fftw_size[0] = 4*plan->N;
+ fftw_size[1] = 4*plan->N;
+
+ /** \todo NFSFT: Check NFFT flags. */
+ nfft_init_guru(&plan->plan_nfft, 2, nfft_size, plan->M_total, fftw_size,
+ nfft_cutoff, nfft_flags,
+ FFTW_ESTIMATE | FFTW_DESTROY_INPUT);
+
+ /* Assign angle array. */
+ plan->plan_nfft.x = plan->x;
+ /* Assign result array. */
+ plan->plan_nfft.f = plan->f;
+ /* Assign Fourier coefficients array. */
+ plan->plan_nfft.f_hat = plan->f_hat;
+
+ /** \todo Add precomputation if neccessary and possible. */
+
+ /* Precompute. */
+ //nfft_precompute_one_psi(&plan->plan_nfft);
+
+ /* Free auxilliary arrays. */
+ nfft_free(nfft_size);
+ nfft_free(fftw_size);
+ }
+
+ plan->mv_trafo = (void (*) (void* ))nfsft_trafo;
+ plan->mv_adjoint = (void (*) (void* ))nfsft_adjoint;
+}
+
+void nfsft_precompute(int N, double kappa, unsigned int nfsft_flags,
+ unsigned int fpt_flags)
+{
+ int n; /*< The order n */
+
+ /* Check if already initialized. */
+ if (wisdom.initialized == true)
+ {
+ return;
+ }
+
+#ifdef _OPENMP
+ #pragma omp parallel default(shared)
+ {
+ int nthreads = omp_get_num_threads();
+ int threadid = omp_get_thread_num();
+ #pragma omp single
+ {
+ wisdom.nthreads = nthreads;
+ }
+ }
+#endif
+
+ /* Save the precomputation flags. */
+ wisdom.flags = nfsft_flags;
+
+ /* Compute and save N_max = 2^{\ceil{log_2 N}} as next greater
+ * power of two with respect to N. */
+ X(next_power_of_2_exp)(N,&wisdom.N_MAX,&wisdom.T_MAX);
+
+ /* Check, if precomputation for direct algorithms needs to be performed. */
+ if (wisdom.flags & NFSFT_NO_DIRECT_ALGORITHM)
+ {
+ wisdom.alpha = NULL;
+ wisdom.beta = NULL;
+ wisdom.gamma = NULL;
+ }
+ else
+ {
+ /* Allocate memory for three-term recursion coefficients. */
+ wisdom.alpha = (double*) nfft_malloc((wisdom.N_MAX+1)*(wisdom.N_MAX+2)*
+ sizeof(double));
+ wisdom.beta = (double*) nfft_malloc((wisdom.N_MAX+1)*(wisdom.N_MAX+2)*
+ sizeof(double));
+ wisdom.gamma = (double*) nfft_malloc((wisdom.N_MAX+1)*(wisdom.N_MAX+2)*
+ sizeof(double));
+ /** \todo Change to functions which compute only for fixed order n. */
+ /* Compute three-term recurrence coefficients alpha_k^n, beta_k^n, and
+ * gamma_k^n. */
+ alpha_al_all(wisdom.alpha,wisdom.N_MAX);
+ beta_al_all(wisdom.beta,wisdom.N_MAX);
+ gamma_al_all(wisdom.gamma,wisdom.N_MAX);
+ }
+
+ /* Check, if precomputation for fast algorithms needs to be performed. */
+ if (wisdom.flags & NFSFT_NO_FAST_ALGORITHM)
+ {
+ }
+ else if (wisdom.N_MAX >= NFSFT_BREAK_EVEN)
+ {
+ /* Precompute data for DPT/FPT. */
+
+ /* Check, if recursion coefficients have already been calculated. */
+ if (wisdom.alpha != NULL)
+ {
+#ifdef _OPENMP
+ #pragma omp parallel default(shared) private(n)
+ {
+ int nthreads = omp_get_num_threads();
+ int threadid = omp_get_thread_num();
+ #pragma omp single
+ {
+ wisdom.nthreads = nthreads;
+ wisdom.set_threads = (fpt_set*) nfft_malloc(nthreads*sizeof(fpt_set));
+ }
+
+ wisdom.set_threads[threadid] = fpt_init(wisdom.N_MAX+1, wisdom.T_MAX,
+ fpt_flags | FPT_AL_SYMMETRY | FPT_PERSISTENT_DATA);
+ for (n = 0; n <= wisdom.N_MAX; n++)
+ fpt_precompute(wisdom.set_threads[threadid],n,&wisdom.alpha[ROW(n)],
+ &wisdom.beta[ROW(n)], &wisdom.gamma[ROW(n)],n,kappa);
+ }
+
+#else
+ /* Use the recursion coefficients to precompute FPT data using persistent
+ * arrays. */
+ wisdom.set = fpt_init(wisdom.N_MAX+1, wisdom.T_MAX,
+ fpt_flags | FPT_AL_SYMMETRY | FPT_PERSISTENT_DATA);
+ for (n = 0; n <= wisdom.N_MAX; n++)
+ {
+ /*fprintf(stderr,"%d\n",n);
+ fflush(stderr);*/
+ /* Precompute data for FPT transformation for order n. */
+ fpt_precompute(wisdom.set,n,&wisdom.alpha[ROW(n)],&wisdom.beta[ROW(n)],
+ &wisdom.gamma[ROW(n)],n,kappa);
+ }
+#endif
+ }
+ else
+ {
+#ifdef _OPENMP
+ #pragma omp parallel default(shared) private(n)
+ {
+ double *alpha, *beta, *gamma;
+ int nthreads = omp_get_num_threads();
+ int threadid = omp_get_thread_num();
+ #pragma omp single
+ {
+ wisdom.nthreads = nthreads;
+ wisdom.set_threads = (fpt_set*) nfft_malloc(nthreads*sizeof(fpt_set));
+ }
+
+ alpha = (double*) nfft_malloc((wisdom.N_MAX+2)*sizeof(double));
+ beta = (double*) nfft_malloc((wisdom.N_MAX+2)*sizeof(double));
+ gamma = (double*) nfft_malloc((wisdom.N_MAX+2)*sizeof(double));
+ wisdom.set_threads[threadid] = fpt_init(wisdom.N_MAX+1, wisdom.T_MAX,
+ fpt_flags | FPT_AL_SYMMETRY);
+
+ for (n = 0; n <= wisdom.N_MAX; n++)
+ {
+ alpha_al_row(alpha,wisdom.N_MAX,n);
+ beta_al_row(beta,wisdom.N_MAX,n);
+ gamma_al_row(gamma,wisdom.N_MAX,n);
+
+ /* Precompute data for FPT transformation for order n. */
+ fpt_precompute(wisdom.set_threads[threadid],n,alpha,beta,gamma,n,
+ kappa);
+ }
+ /* Free auxilliary arrays. */
+ nfft_free(alpha);
+ nfft_free(beta);
+ nfft_free(gamma);
+ }
+#else
+ /* Allocate memory for three-term recursion coefficients. */
+ wisdom.alpha = (double*) nfft_malloc((wisdom.N_MAX+2)*sizeof(double));
+ wisdom.beta = (double*) nfft_malloc((wisdom.N_MAX+2)*sizeof(double));
+ wisdom.gamma = (double*) nfft_malloc((wisdom.N_MAX+2)*sizeof(double));
+ wisdom.set = fpt_init(wisdom.N_MAX+1, wisdom.T_MAX,
+ fpt_flags | FPT_AL_SYMMETRY);
+ for (n = 0; n <= wisdom.N_MAX; n++)
+ {
+ /*fprintf(stderr,"%d NO_DIRECT\n",n);
+ fflush(stderr);*/
+ /* Compute three-term recurrence coefficients alpha_k^n, beta_k^n, and
+ * gamma_k^n. */
+ alpha_al_row(wisdom.alpha,wisdom.N_MAX,n);
+ beta_al_row(wisdom.beta,wisdom.N_MAX,n);
+ gamma_al_row(wisdom.gamma,wisdom.N_MAX,n);
+
+ /* Precompute data for FPT transformation for order n. */
+ fpt_precompute(wisdom.set,n,wisdom.alpha,wisdom.beta,wisdom.gamma,n,
+ kappa);
+ }
+ /* Free auxilliary arrays. */
+ nfft_free(wisdom.alpha);
+ nfft_free(wisdom.beta);
+ nfft_free(wisdom.gamma);
+#endif
+ wisdom.alpha = NULL;
+ wisdom.beta = NULL;
+ wisdom.gamma = NULL;
+ }
+ }
+
+ /* Wisdom has been initialised. */
+ wisdom.initialized = true;
+}
+
+void nfsft_forget(void)
+{
+ /* Check if wisdom has been initialised. */
+ if (wisdom.initialized == false)
+ {
+ /* Nothing to do. */
+ return;
+ }
+
+ /* Check, if precomputation for direct algorithms has been performed. */
+ if (wisdom.flags & NFSFT_NO_DIRECT_ALGORITHM)
+ {
+ }
+ else
+ {
+ /* Free arrays holding three-term recurrence coefficients. */
+ nfft_free(wisdom.alpha);
+ nfft_free(wisdom.beta);
+ nfft_free(wisdom.gamma);
+ wisdom.alpha = NULL;
+ wisdom.beta = NULL;
+ wisdom.gamma = NULL;
+ }
+
+ /* Check, if precomputation for fast algorithms has been performed. */
+ if (wisdom.flags & NFSFT_NO_FAST_ALGORITHM)
+ {
+ }
+ else if (wisdom.N_MAX >= NFSFT_BREAK_EVEN)
+ {
+#ifdef _OPENMP
+ int k;
+ for (k = 0; k < wisdom.nthreads; k++)
+ fpt_finalize(wisdom.set_threads[k]);
+ nfft_free(wisdom.set_threads);
+#else
+ /* Free precomputed data for FPT transformation. */
+ fpt_finalize(wisdom.set);
+#endif
+ }
+
+ /* Wisdom is now uninitialised. */
+ wisdom.initialized = false;
+}
+
+
+void nfsft_finalize(nfsft_plan *plan)
+{
+ if (!plan)
+ return;
+
+ /* Finalise the nfft plan. */
+ nfft_finalize(&plan->plan_nfft);
+
+ /* De-allocate memory for auxilliary array of spherical Fourier coefficients,
+ * if neccesary. */
+ if (plan->flags & NFSFT_PRESERVE_F_HAT)
+ {
+ nfft_free(plan->f_hat_intern);
+ }
+
+ /* De-allocate memory for spherical Fourier coefficients, if necessary. */
+ if (plan->flags & NFSFT_MALLOC_F_HAT)
+ {
+ //fprintf(stderr,"deallocating f_hat\n");
+ nfft_free(plan->f_hat);
+ }
+
+ /* De-allocate memory for samples, if neccesary. */
+ if (plan->flags & NFSFT_MALLOC_F)
+ {
+ //fprintf(stderr,"deallocating f\n");
+ nfft_free(plan->f);
+ }
+
+ /* De-allocate memory for nodes, if neccesary. */
+ if (plan->flags & NFSFT_MALLOC_X)
+ {
+ //fprintf(stderr,"deallocating x\n");
+ nfft_free(plan->x);
+ }
+}
+
+void nfsft_trafo_direct(nfsft_plan *plan)
+{
+ int m; /*< The node index */
+ int k; /*< The degree k */
+ int n; /*< The order n */
+ int n_abs; /*< The absolute value of the order n, ie n_abs = |n| */
+ double *alpha; /*< Pointer to current three-term recurrence
+ coefficient alpha_k^n for associated Legendre
+ functions P_k^n */
+ double *gamma; /*< Pointer to current three-term recurrence
+ coefficient beta_k^n for associated Legendre
+ functions P_k^n */
+ double _Complex *a; /*< Pointer to auxilliary array for Clenshaw algor. */
+ double _Complex it1; /*< Auxilliary variable for Clenshaw algorithm */
+ double _Complex it2; /*< Auxilliary variable for Clenshaw algorithm */
+ double _Complex temp; /*< Auxilliary variable for Clenshaw algorithm */
+ double _Complex f_m; /*< The final function value f_m = f(x_m) for a
+ single node. */
+ double stheta; /*< Current angle theta for Clenshaw algorithm */
+ double sphi; /*< Current angle phi for Clenshaw algorithm */
+
+#ifdef MEASURE_TIME
+ plan->MEASURE_TIME_t[0] = 0.0;
+ plan->MEASURE_TIME_t[1] = 0.0;
+ plan->MEASURE_TIME_t[2] = 0.0;
+#endif
+
+ if (wisdom.flags & NFSFT_NO_DIRECT_ALGORITHM)
+ {
+ return;
+ }
+
+ /* Copy spherical Fourier coefficients, if necessary. */
+ if (plan->flags & NFSFT_PRESERVE_F_HAT)
+ {
+ memcpy(plan->f_hat_intern,plan->f_hat,plan->N_total*
+ sizeof(double _Complex));
+ }
+ else
+ {
+ plan->f_hat_intern = plan->f_hat;
+ }
+
+ /* Check, if we compute with L^2-normalized spherical harmonics. If so,
+ * multiply spherical Fourier coefficients with corresponding normalization
+ * weight. */
+ if (plan->flags & NFSFT_NORMALIZED)
+ {
+ /* Traverse Fourier coefficients array. */
+ #pragma omp parallel for default(shared) private(k,n)
+ for (k = 0; k <= plan->N; k++)
+ {
+ for (n = -k; n <= k; n++)
+ {
+ /* Multiply with normalization weight. */
+ plan->f_hat_intern[NFSFT_INDEX(k,n,plan)] *=
+ sqrt((2*k+1)/(4.0*PI));
+ }
+ }
+ }
+
+ /* Distinguish by bandwidth M. */
+ if (plan->N == 0)
+ {
+ /* N = 0 */
+
+ /* Constant function */
+ for (m = 0; m < plan->M_total; m++)
+ {
+ plan->f[m] = plan->f_hat_intern[NFSFT_INDEX(0,0,plan)];
+ }
+ }
+ else
+ {
+ /* N > 0 */
+
+ /* Evaluate
+ * \sum_{k=0}^N \sum_{n=-k}^k a_k^n P_k^{|n|}(cos theta_m) e^{i n phi_m}
+ * = \sum_{n=-N}^N \sum_{k=|n|}^N a_k^n P_k^{|n|}(cos theta_m)
+ * e^{i n phi_m}.
+ */
+ #pragma omp parallel for default(shared) private(m,stheta,sphi,f_m,n,a,n_abs,alpha,gamma,it2,it1,k,temp)
+ for (m = 0; m < plan->M_total; m++)
+ {
+ /* Scale angle theta from [0,1/2] to [0,pi] and apply cosine. */
+ stheta = cos(2.0*PI*plan->x[2*m+1]);
+ /* Scale angle phi from [-1/2,1/2] to [-pi,pi]. */
+ sphi = 2.0*PI*plan->x[2*m];
+
+ /* Initialize result for current node. */
+ f_m = 0.0;
+
+ /* For n = -N,...,N, evaluate
+ * b_n := \sum_{k=|n|}^N a_k^n P_k^{|n|}(cos theta_m)
+ * using Clenshaw's algorithm.
+ */
+ for (n = -plan->N; n <= plan->N; n++)
+ {
+ /* Get pointer to Fourier coefficients vector for current order n. */
+ a = &(plan->f_hat_intern[NFSFT_INDEX(0,n,plan)]);
+
+ /* Take absolute value of n. */
+ n_abs = abs(n);
+
+ /* Get pointers to three-term recurrence coefficients arrays. */
+ alpha = &(wisdom.alpha[ROW(n_abs)]);
+ gamma = &(wisdom.gamma[ROW(n_abs)]);
+
+ /* Clenshaw's algorithm */
+ it2 = a[plan->N];
+ it1 = a[plan->N-1];
+ for (k = plan->N; k > n_abs + 1; k--)
+ {
+ temp = a[k-2] + it2 * gamma[k];
+ it2 = it1 + it2 * alpha[k] * stheta;
+ it1 = temp;
+ }
+
+ /* Compute final step if neccesary. */
+ if (n_abs < plan->N)
+ {
+ it2 = it1 + it2 * wisdom.alpha[ROWK(n_abs)+1] * stheta;
+ }
+
+ /* Compute final result by multiplying the fixed part
+ * gamma_|n| (1-cos^2(theta))^{|n|/2}
+ * for order n and the exponential part
+ * e^{i n phi}
+ * and add the result to f_m.
+ */
+ f_m += it2 * wisdom.gamma[ROW(n_abs)] *
+ pow(1- stheta * stheta, 0.5*n_abs) * cexp(_Complex_I*n*sphi);
+ }
+
+ /* Write result f_m for current node to array f. */
+ plan->f[m] = f_m;
+ }
+ }
+}
+
+void nfsft_adjoint_direct(nfsft_plan *plan)
+{
+ int m; /*< The node index */
+ int k; /*< The degree k */
+ int n; /*< The order n */
+ int n_abs; /*< The absolute value of the order n, ie n_abs = |n| */
+ double *alpha; /*< Pointer to current three-term recurrence
+ coefficient alpha_k^n for associated Legendre
+ functions P_k^n */
+ double *gamma; /*< Pointer to current three-term recurrence
+ coefficient beta_k^n for associated Legendre
+ functions P_k^n */
+ double _Complex it1; /*< Auxilliary variable for Clenshaw algorithm */
+ double _Complex it2; /*< Auxilliary variable for Clenshaw algorithm */
+ double _Complex temp; /*< Auxilliary variable for Clenshaw algorithm */
+ double stheta; /*< Current angle theta for Clenshaw algorithm */
+ double sphi; /*< Current angle phi for Clenshaw algorithm */
+
+#ifdef MEASURE_TIME
+ plan->MEASURE_TIME_t[0] = 0.0;
+ plan->MEASURE_TIME_t[1] = 0.0;
+ plan->MEASURE_TIME_t[2] = 0.0;
+#endif
+
+ if (wisdom.flags & NFSFT_NO_DIRECT_ALGORITHM)
+ {
+ return;
+ }
+
+ /* Initialise spherical Fourier coefficients array with zeros. */
+ memset(plan->f_hat,0U,plan->N_total*sizeof(double _Complex));
+
+ /* Distinguish by bandwidth N. */
+ if (plan->N == 0)
+ {
+ /* N == 0 */
+
+ /* Constant function */
+ for (m = 0; m < plan->M_total; m++)
+ {
+ plan->f_hat[NFSFT_INDEX(0,0,plan)] += plan->f[m];
+ }
+ }
+ else
+ {
+ /* N > 0 */
+
+#ifdef _OPENMP
+ /* Traverse all orders n. */
+ #pragma omp parallel for default(shared) private(n,n_abs,alpha,gamma,m,stheta,sphi,it2,it1,k,temp)
+ for (n = -plan->N; n <= plan->N; n++)
+ {
+ /* Take absolute value of n. */
+ n_abs = abs(n);
+
+ /* Get pointers to three-term recurrence coefficients arrays. */
+ alpha = &(wisdom.alpha[ROW(n_abs)]);
+ gamma = &(wisdom.gamma[ROW(n_abs)]);
+
+ /* Traverse all nodes. */
+ for (m = 0; m < plan->M_total; m++)
+ {
+ /* Scale angle theta from [0,1/2] to [0,pi] and apply cosine. */
+ stheta = cos(2.0*PI*plan->x[2*m+1]);
+ /* Scale angle phi from [-1/2,1/2] to [-pi,pi]. */
+ sphi = 2.0*PI*plan->x[2*m];
+
+ /* Transposed Clenshaw algorithm */
+
+ /* Initial step */
+ it1 = plan->f[m] * wisdom.gamma[ROW(n_abs)] *
+ pow(1 - stheta * stheta, 0.5*n_abs) * cexp(-_Complex_I*n*sphi);
+ plan->f_hat[NFSFT_INDEX(n_abs,n,plan)] += it1;
+ it2 = 0.0;
+
+ if (n_abs < plan->N)
+ {
+ it2 = it1 * wisdom.alpha[ROWK(n_abs)+1] * stheta;
+ plan->f_hat[NFSFT_INDEX(n_abs+1,n,plan)] += it2;
+ }
+
+ /* Loop for transposed Clenshaw algorithm */
+ for (k = n_abs+2; k <= plan->N; k++)
+ {
+ temp = it2;
+ it2 = alpha[k] * stheta * it2 + gamma[k] * it1;
+ it1 = temp;
+ plan->f_hat[NFSFT_INDEX(k,n,plan)] += it2;
+ }
+ }
+ }
+#else
+ /* Traverse all nodes. */
+ for (m = 0; m < plan->M_total; m++)
+ {
+ /* Scale angle theta from [0,1/2] to [0,pi] and apply cosine. */
+ stheta = cos(2.0*PI*plan->x[2*m+1]);
+ /* Scale angle phi from [-1/2,1/2] to [-pi,pi]. */
+ sphi = 2.0*PI*plan->x[2*m];
+
+ /* Traverse all orders n. */
+ for (n = -plan->N; n <= plan->N; n++)
+ {
+ /* Take absolute value of n. */
+ n_abs = abs(n);
+
+ /* Get pointers to three-term recurrence coefficients arrays. */
+ alpha = &(wisdom.alpha[ROW(n_abs)]);
+ gamma = &(wisdom.gamma[ROW(n_abs)]);
+
+ /* Transposed Clenshaw algorithm */
+
+ /* Initial step */
+ it1 = plan->f[m] * wisdom.gamma[ROW(n_abs)] *
+ pow(1 - stheta * stheta, 0.5*n_abs) * cexp(-_Complex_I*n*sphi);
+ plan->f_hat[NFSFT_INDEX(n_abs,n,plan)] += it1;
+ it2 = 0.0;
+
+ if (n_abs < plan->N)
+ {
+ it2 = it1 * wisdom.alpha[ROWK(n_abs)+1] * stheta;
+ plan->f_hat[NFSFT_INDEX(n_abs+1,n,plan)] += it2;
+ }
+
+ /* Loop for transposed Clenshaw algorithm */
+ for (k = n_abs+2; k <= plan->N; k++)
+ {
+ temp = it2;
+ it2 = alpha[k] * stheta * it2 + gamma[k] * it1;
+ it1 = temp;
+ plan->f_hat[NFSFT_INDEX(k,n,plan)] += it2;
+ }
+ }
+ }
+#endif
+ }
+
+ /* Check, if we compute with L^2-normalized spherical harmonics. If so,
+ * multiply spherical Fourier coefficients with corresponding normalization
+ * weight. */
+ if (plan->flags & NFSFT_NORMALIZED)
+ {
+ /* Traverse Fourier coefficients array. */
+ #pragma omp parallel for default(shared) private(k,n)
+ for (k = 0; k <= plan->N; k++)
+ {
+ for (n = -k; n <= k; n++)
+ {
+ /* Multiply with normalization weight. */
+ plan->f_hat[NFSFT_INDEX(k,n,plan)] *=
+ sqrt((2*k+1)/(4.0*PI));
+ }
+ }
+ }
+
+ /* Set unused coefficients to zero. */
+ if (plan->flags & NFSFT_ZERO_F_HAT)
+ {
+ for (n = -plan->N; n <= plan->N+1; n++)
+ {
+ memset(&plan->f_hat[NFSFT_INDEX(-plan->N-1,n,plan)],0U,
+ (plan->N+1+abs(n))*sizeof(double _Complex));
+ }
+ }
+}
+
+void nfsft_trafo(nfsft_plan *plan)
+{
+ int k; /*< The degree k */
+ int n; /*< The order n */
+#ifdef MEASURE_TIME
+ ticks t0, t1;
+#endif
+ #ifdef DEBUG
+ double t, t_pre, t_nfft, t_fpt, t_c2e, t_norm;
+ t_pre = 0.0;
+ t_norm = 0.0;
+ t_fpt = 0.0;
+ t_c2e = 0.0;
+ t_nfft = 0.0;
+ #endif
+
+#ifdef MEASURE_TIME
+ plan->MEASURE_TIME_t[0] = 0.0;
+ plan->MEASURE_TIME_t[1] = 0.0;
+ plan->MEASURE_TIME_t[2] = 0.0;
+#endif
+
+ if (wisdom.flags & NFSFT_NO_FAST_ALGORITHM)
+ {
+ return;
+ }
+
+ /* Check, if precomputation was done and that the bandwidth N is not too
+ * big.
+ */
+ if (wisdom.initialized == 0 || plan->N > wisdom.N_MAX)
+ {
+ return;
+ }
+
+ /* Check, if slow transformation should be used due to small bandwidth. */
+ if (plan->N < NFSFT_BREAK_EVEN)
+ {
+ /* Use NDSFT. */
+ nfsft_trafo_direct(plan);
+ }
+
+ /* Check for correct value of the bandwidth N. */
+ else if (plan->N <= wisdom.N_MAX)
+ {
+ /* Copy spherical Fourier coefficients, if necessary. */
+ if (plan->flags & NFSFT_PRESERVE_F_HAT)
+ {
+ memcpy(plan->f_hat_intern,plan->f_hat,plan->N_total*
+ sizeof(double _Complex));
+ }
+ else
+ {
+ plan->f_hat_intern = plan->f_hat;
+ }
+
+ /* Propagate pointer values to the internal NFFT plan to assure
+ * consistency. Pointers may have been modified externally.
+ */
+ plan->plan_nfft.x = plan->x;
+ plan->plan_nfft.f = plan->f;
+ plan->plan_nfft.f_hat = plan->f_hat_intern;
+
+ /* Check, if we compute with L^2-normalized spherical harmonics. If so,
+ * multiply spherical Fourier coefficients with corresponding normalization
+ * weight. */
+ if (plan->flags & NFSFT_NORMALIZED)
+ {
+ /* Traverse Fourier coefficients array. */
+ #pragma omp parallel for default(shared) private(k,n)
+ for (k = 0; k <= plan->N; k++)
+ {
+ for (n = -k; n <= k; n++)
+ {
+ /* Multiply with normalization weight. */
+ plan->f_hat_intern[NFSFT_INDEX(k,n,plan)] *=
+ sqrt((2*k+1)/(4.0*PI));
+ }
+ }
+ }
+
+#ifdef MEASURE_TIME
+ t0 = getticks();
+#endif
+ /* Check, which polynomial transform algorithm should be used. */
+ if (plan->flags & NFSFT_USE_DPT)
+ {
+#ifdef _OPENMP
+ #pragma omp parallel for default(shared) private(n) num_threads(wisdom.nthreads)
+ for (n = -plan->N; n <= plan->N; n++)
+ fpt_trafo_direct(wisdom.set_threads[omp_get_thread_num()],abs(n),
+ &plan->f_hat_intern[NFSFT_INDEX(abs(n),n,plan)],
+ &plan->f_hat_intern[NFSFT_INDEX(0,n,plan)],
+ plan->N,0U);
+#else
+ /* Use direct discrete polynomial transform DPT. */
+ for (n = -plan->N; n <= plan->N; n++)
+ {
+ //fprintf(stderr,"nfsft_trafo: n = %d\n",n);
+ //fflush(stderr);
+ fpt_trafo_direct(wisdom.set,abs(n),
+ &plan->f_hat_intern[NFSFT_INDEX(abs(n),n,plan)],
+ &plan->f_hat_intern[NFSFT_INDEX(0,n,plan)],
+ plan->N,0U);
+ }
+#endif
+ }
+ else
+ {
+#ifdef _OPENMP
+ #pragma omp parallel for default(shared) private(n) num_threads(wisdom.nthreads)
+ for (n = -plan->N; n <= plan->N; n++)
+ fpt_trafo(wisdom.set_threads[omp_get_thread_num()],abs(n),
+ &plan->f_hat_intern[NFSFT_INDEX(abs(n),n,plan)],
+ &plan->f_hat_intern[NFSFT_INDEX(0,n,plan)],
+ plan->N,0U);
+#else
+ /* Use fast polynomial transform FPT. */
+ for (n = -plan->N; n <= plan->N; n++)
+ {
+ //fprintf(stderr,"nfsft_trafo: n = %d\n",n);
+ //fflush(stderr);
+ fpt_trafo(wisdom.set,abs(n),
+ &plan->f_hat_intern[NFSFT_INDEX(abs(n),n,plan)],
+ &plan->f_hat_intern[NFSFT_INDEX(0,n,plan)],
+ plan->N,0U);
+ }
+#endif
+ }
+#ifdef MEASURE_TIME
+ t1 = getticks();
+ plan->MEASURE_TIME_t[0] = nfft_elapsed_seconds(t1,t0);
+#endif
+
+#ifdef MEASURE_TIME
+ t0 = getticks();
+#endif
+ /* Convert Chebyshev coefficients to Fourier coefficients. */
+ c2e(plan);
+#ifdef MEASURE_TIME
+ t1 = getticks();
+ plan->MEASURE_TIME_t[1] = nfft_elapsed_seconds(t1,t0);
+#endif
+
+#ifdef MEASURE_TIME
+ t0 = getticks();
+#endif
+ /* Check, which nonequispaced discrete Fourier transform algorithm should
+ * be used.
+ */
+ if (plan->flags & NFSFT_USE_NDFT)
+ {
+ /* Use NDFT. */
+ nfft_trafo_direct(&plan->plan_nfft);
+ }
+ else
+ {
+ /* Use NFFT. */
+ //fprintf(stderr,"nfsft_adjoint: nfft_trafo\n");
+ nfft_trafo_2d(&plan->plan_nfft);
+ }
+#ifdef MEASURE_TIME
+ t1 = getticks();
+ plan->MEASURE_TIME_t[2] = nfft_elapsed_seconds(t1,t0);
+#endif
+ }
+}
+
+void nfsft_adjoint(nfsft_plan *plan)
+{
+ int k; /*< The degree k */
+ int n; /*< The order n */
+#ifdef MEASURE_TIME
+ ticks t0, t1;
+#endif
+
+#ifdef MEASURE_TIME
+ plan->MEASURE_TIME_t[0] = 0.0;
+ plan->MEASURE_TIME_t[1] = 0.0;
+ plan->MEASURE_TIME_t[2] = 0.0;
+#endif
+
+ if (wisdom.flags & NFSFT_NO_FAST_ALGORITHM)
+ {
+ return;
+ }
+
+ /* Check, if precomputation was done and that the bandwidth N is not too
+ * big.
+ */
+ if (wisdom.initialized == 0 || plan->N > wisdom.N_MAX)
+ {
+ return;
+ }
+
+ /* Check, if slow transformation should be used due to small bandwidth. */
+ if (plan->N < NFSFT_BREAK_EVEN)
+ {
+ /* Use adjoint NDSFT. */
+ nfsft_adjoint_direct(plan);
+ }
+ /* Check for correct value of the bandwidth N. */
+ else if (plan->N <= wisdom.N_MAX)
+ {
+ //fprintf(stderr,"nfsft_adjoint: Starting\n");
+ //fflush(stderr);
+ /* Propagate pointer values to the internal NFFT plan to assure
+ * consistency. Pointers may have been modified externally.
+ */
+ plan->plan_nfft.x = plan->x;
+ plan->plan_nfft.f = plan->f;
+ plan->plan_nfft.f_hat = plan->f_hat;
+
+#ifdef MEASURE_TIME
+ t0 = getticks();
+#endif
+ /* Check, which adjoint nonequispaced discrete Fourier transform algorithm
+ * should be used.
+ */
+ if (plan->flags & NFSFT_USE_NDFT)
+ {
+ //fprintf(stderr,"nfsft_adjoint: Executing nfft_adjoint_direct\n");
+ //fflush(stderr);
+ /* Use adjoint NDFT. */
+ nfft_adjoint_direct(&plan->plan_nfft);
+ }
+ else
+ {
+ //fprintf(stderr,"nfsft_adjoint: Executing nfft_adjoint\n");
+ //fflush(stderr);
+ //fprintf(stderr,"nfsft_adjoint: nfft_adjoint\n");
+ /* Use adjoint NFFT. */
+ nfft_adjoint_2d(&plan->plan_nfft);
+ }
+#ifdef MEASURE_TIME
+ t1 = getticks();
+ plan->MEASURE_TIME_t[2] = nfft_elapsed_seconds(t1,t0);
+#endif
+
+ //fprintf(stderr,"nfsft_adjoint: Executing c2e_transposed\n");
+ //fflush(stderr);
+#ifdef MEASURE_TIME
+ t0 = getticks();
+#endif
+ /* Convert Fourier coefficients to Chebyshev coefficients. */
+ c2e_transposed(plan);
+#ifdef MEASURE_TIME
+ t1 = getticks();
+ plan->MEASURE_TIME_t[1] = nfft_elapsed_seconds(t1,t0);
+#endif
+
+#ifdef MEASURE_TIME
+ t0 = getticks();
+#endif
+ /* Check, which transposed polynomial transform algorithm should be used */
+ if (plan->flags & NFSFT_USE_DPT)
+ {
+#ifdef _OPENMP
+ #pragma omp parallel for default(shared) private(n) num_threads(wisdom.nthreads)
+ for (n = -plan->N; n <= plan->N; n++)
+ fpt_transposed_direct(wisdom.set_threads[omp_get_thread_num()],abs(n),
+ &plan->f_hat[NFSFT_INDEX(abs(n),n,plan)],
+ &plan->f_hat[NFSFT_INDEX(0,n,plan)],
+ plan->N,0U);
+#else
+ /* Use transposed DPT. */
+ for (n = -plan->N; n <= plan->N; n++)
+ {
+ //fprintf(stderr,"nfsft_adjoint: Executing dpt_transposed\n");
+ //fflush(stderr);
+ fpt_transposed_direct(wisdom.set,abs(n),
+ &plan->f_hat[NFSFT_INDEX(abs(n),n,plan)],
+ &plan->f_hat[NFSFT_INDEX(0,n,plan)],
+ plan->N,0U);
+ }
+#endif
+ }
+ else
+ {
+#ifdef _OPENMP
+ #pragma omp parallel for default(shared) private(n) num_threads(wisdom.nthreads)
+ for (n = -plan->N; n <= plan->N; n++)
+ fpt_transposed(wisdom.set_threads[omp_get_thread_num()],abs(n),
+ &plan->f_hat[NFSFT_INDEX(abs(n),n,plan)],
+ &plan->f_hat[NFSFT_INDEX(0,n,plan)],
+ plan->N,0U);
+#else
+ //fprintf(stderr,"nfsft_adjoint: fpt_transposed\n");
+ /* Use transposed FPT. */
+ for (n = -plan->N; n <= plan->N; n++)
+ {
+ //fprintf(stderr,"nfsft_adjoint: Executing fpt_transposed\n");
+ //fflush(stderr);
+ fpt_transposed(wisdom.set,abs(n),
+ &plan->f_hat[NFSFT_INDEX(abs(n),n,plan)],
+ &plan->f_hat[NFSFT_INDEX(0,n,plan)],
+ plan->N,0U);
+ }
+#endif
+ }
+#ifdef MEASURE_TIME
+ t1 = getticks();
+ plan->MEASURE_TIME_t[0] = nfft_elapsed_seconds(t1,t0);
+#endif
+
+ /* Check, if we compute with L^2-normalized spherical harmonics. If so,
+ * multiply spherical Fourier coefficients with corresponding normalization
+ * weight. */
+ if (plan->flags & NFSFT_NORMALIZED)
+ {
+ //fprintf(stderr,"nfsft_adjoint: Normalizing\n");
+ //fflush(stderr);
+ /* Traverse Fourier coefficients array. */
+ #pragma omp parallel for default(shared) private(k,n)
+ for (k = 0; k <= plan->N; k++)
+ {
+ for (n = -k; n <= k; n++)
+ {
+ /* Multiply with normalization weight. */
+ plan->f_hat[NFSFT_INDEX(k,n,plan)] *=
+ sqrt((2*k+1)/(4.0*PI));
+ }
+ }
+ }
+
+ /* Set unused coefficients to zero. */
+ if (plan->flags & NFSFT_ZERO_F_HAT)
+ {
+ //fprintf(stderr,"nfsft_adjoint: Setting to zero\n");
+ //fflush(stderr);
+ for (n = -plan->N; n <= plan->N+1; n++)
+ {
+ memset(&plan->f_hat[NFSFT_INDEX(-plan->N-1,n,plan)],0U,
+ (plan->N+1+abs(n))*sizeof(double _Complex));
+ }
+ }
+ //fprintf(stderr,"nfsft_adjoint: Finished\n");
+ //fflush(stderr);
+ }
+}
+
+void nfsft_precompute_x(nfsft_plan *plan)
+{
+ /* Pass angle array to NFFT plan. */
+ plan->plan_nfft.x = plan->x;
+
+ /* Precompute. */
+ if (plan->plan_nfft.nfft_flags & PRE_ONE_PSI)
+ nfft_precompute_one_psi(&plan->plan_nfft);
+}
+/* \} */
diff --git a/kernel/nfsoft/Makefile.am b/kernel/nfsoft/Makefile.am
new file mode 100644
index 0000000..3f33e35
--- /dev/null
+++ b/kernel/nfsoft/Makefile.am
@@ -0,0 +1,6 @@
+# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_LTLIBRARIES = libnfsoft.la
+libnfsoft_la_SOURCES = nfsoft.c wigner.h wigner.c
\ No newline at end of file
diff --git a/kernel/nfsoft/Makefile.in b/kernel/nfsoft/Makefile.in
new file mode 100644
index 0000000..978e894
--- /dev/null
+++ b/kernel/nfsoft/Makefile.in
@@ -0,0 +1,556 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/nfsoft
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libnfsoft_la_LIBADD =
+am_libnfsoft_la_OBJECTS = nfsoft.lo wigner.lo
+libnfsoft_la_OBJECTS = $(am_libnfsoft_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libnfsoft_la_SOURCES)
+DIST_SOURCES = $(libnfsoft_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+noinst_LTLIBRARIES = libnfsoft.la
+libnfsoft_la_SOURCES = nfsoft.c wigner.h wigner.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nfsoft/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu kernel/nfsoft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libnfsoft.la: $(libnfsoft_la_OBJECTS) $(libnfsoft_la_DEPENDENCIES) $(EXTRA_libnfsoft_la_DEPENDENCIES)
+ $(LINK) $(libnfsoft_la_OBJECTS) $(libnfsoft_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsoft.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wigner.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/nfsoft/nfsoft.c b/kernel/nfsoft/nfsoft.c
new file mode 100755
index 0000000..50ee2fb
--- /dev/null
+++ b/kernel/nfsoft/nfsoft.c
@@ -0,0 +1,730 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfsoft.c 3919 2012-11-20 13:31:45Z grman $ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include "nfft3.h"
+#include "nfft3util.h"
+#include "infft.h"
+#include "wigner.h"
+
+#define DEFAULT_NFFT_CUTOFF 6
+#define FPT_THRESHOLD 1000
+
+static fpt_set SO3_fpt_init(int l, unsigned int flags, int kappa);
+
+void nfsoft_init(nfsoft_plan *plan, int N, int M)
+{
+ nfsoft_init_advanced(plan, N, M, NFSOFT_MALLOC_X | NFSOFT_MALLOC_F
+ | NFSOFT_MALLOC_F_HAT);
+}
+
+void nfsoft_init_advanced(nfsoft_plan *plan, int N, int M,
+ unsigned int nfsoft_flags)
+{
+ nfsoft_init_guru(plan, N, M, nfsoft_flags, PRE_PHI_HUT | PRE_PSI | MALLOC_X
+ | MALLOC_F_HAT | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE,
+ DEFAULT_NFFT_CUTOFF, FPT_THRESHOLD);
+}
+
+void nfsoft_init_guru(nfsoft_plan *plan, int B, int M,
+ unsigned int nfsoft_flags, unsigned int nfft_flags, int nfft_cutoff,
+ int fpt_kappa)
+{
+ int N[3];
+ int n[3];
+
+ N[0] = 2* B + 2;
+ N[1] = 2* B + 2;
+ N[2] = 2* B + 2;
+
+ n[0] = 8* B ;
+ n[1] = 8* B ;
+ n[2] = 8* B ;
+
+ nfft_init_guru(&plan->p_nfft, 3, N, M, n, nfft_cutoff, nfft_flags,
+ FFTW_ESTIMATE | FFTW_DESTROY_INPUT);
+
+ if ((plan->p_nfft).nfft_flags & PRE_LIN_PSI)
+ {
+ nfft_precompute_lin_psi(&(plan->p_nfft));
+ }
+
+ plan->N_total = B;
+ plan->M_total = M;
+ plan->fpt_kappa = fpt_kappa;
+ plan->flags = nfsoft_flags;
+
+ if (plan->flags & NFSOFT_MALLOC_F_HAT)
+ {
+ plan->f_hat = (C*) nfft_malloc((B + 1) * (4* (B +1)*(B+1)-1)/3*sizeof(C));
+ if (plan->f_hat == NULL ) printf("Allocation failed!\n");
+ }
+
+ if (plan->flags & NFSOFT_MALLOC_X)
+ {
+ plan->x = (R*) nfft_malloc(plan->M_total*3*sizeof(R));
+ if (plan->x == NULL ) printf("Allocation failed!\n");
+ }
+ if (plan->flags & NFSOFT_MALLOC_F)
+ {
+ plan->f = (C*) nfft_malloc(plan->M_total*sizeof(C));
+ if (plan->f == NULL ) printf("Allocation failed!\n");
+ }
+
+ plan->wig_coeffs = (C*) nfft_malloc((X(next_power_of_2)(B)+1)*sizeof(C));
+ plan->cheby = (C*) nfft_malloc((2*B+2)*sizeof(C));
+ plan->aux = (C*) nfft_malloc((2*B+4)*sizeof(C));
+
+ if (plan->wig_coeffs == NULL ) printf("Allocation failed!\n");
+ if (plan->cheby == NULL ) printf("Allocation failed!\n");
+ if (plan->aux == NULL ) printf("Allocation failed!\n");
+
+ plan->mv_trafo = (void (*) (void* ))nfsoft_trafo;
+ plan->mv_adjoint = (void (*) (void* ))nfsoft_adjoint;
+
+ plan->internal_fpt_set = SO3_fpt_init(plan->N_total, plan->flags, plan->fpt_kappa);
+
+}
+
+static void c2e(nfsoft_plan *my_plan, int even)
+{
+ int j, N;
+
+ /**initialize the bigger plan*/
+ N = 2* (my_plan ->N_total+1);
+
+ /** prepare the coefficients for the new plan */
+ my_plan->cheby[my_plan->N_total+1] = my_plan->wig_coeffs[0];
+ my_plan->cheby[0]=0.0;
+
+ for (j=1;j<my_plan->N_total+1;j++)
+ {
+ my_plan->cheby[my_plan->N_total+1+j]=0.5* my_plan->wig_coeffs[j];
+ my_plan->cheby[my_plan->N_total+1-j]=0.5* my_plan->wig_coeffs[j];
+ }
+
+ C *aux= (C*) nfft_malloc((N+2)*sizeof(C));
+
+ for(j=1;j<N;j++)
+ aux[j]=my_plan->cheby[j];
+
+ aux[0]=0.;
+ aux[N]=0.;
+
+ if (even>0)
+ {
+ my_plan->cheby[0]=(C) (-1.)/(2.*_Complex_I) * aux[1];
+ for (j=1;j<N;j++)
+ {
+ my_plan->cheby[j]=(1./(2.*_Complex_I)*(aux[j+1]-aux[j-1]));
+ }
+
+ }
+ free(aux);
+ aux = NULL;
+}
+
+
+static fpt_set SO3_fpt_init(int l, unsigned int flags, int kappa)
+{
+ fpt_set set = 0;
+ int N, t, k_start, k_end, k, m;
+ int glo = 0;
+ R *alpha, *beta, *gamma;
+
+ /** Read in transfrom length. */
+ if (flags & NFSOFT_USE_DPT)
+ {
+ if (l < 2)
+ N = 2;
+ else
+ N = l;
+
+ t = (int) log2(X(next_power_of_2)(N));
+
+ }
+ else
+ {
+ /** workaround to compute polynomials of degree less than 2*/
+ if (l < 2)
+ N = 2;
+ else
+ N = X(next_power_of_2)(l);
+
+ t = (int) log2(N);
+ }
+
+ /**memory for the recurrence coefficients*/
+ alpha = (R*) nfft_malloc((N + 2) * sizeof(R));
+ beta = (R*) nfft_malloc((N + 2) * sizeof(R));
+ gamma = (R*) nfft_malloc((N + 2) * sizeof(R));
+
+ /** Initialize DPT. */
+ if (flags & NFSOFT_NO_STABILIZATION)
+ {
+ set = fpt_init((2* N + 1) * (2* N + 1), t, 0U | FPT_NO_STABILIZATION);
+ }
+ else
+ {
+ set = fpt_init((2* N + 1) * (2* N + 1), t, 0U);
+ }
+
+ for (k = -N; k <= N; k++)
+ for (m = -N; m <= N; m++)
+ {
+ /** Read in start and end indeces */
+ k_start = (ABS(k) >= ABS(m)) ? ABS(k) : ABS(m);
+ k_end = N;
+
+ SO3_alpha_row(alpha, N, k, m);
+ SO3_beta_row(beta, N, k, m);
+ SO3_gamma_row(gamma, N, k, m);
+
+ fpt_precompute(set, glo, alpha, beta, gamma, k_start, kappa);
+ glo++;
+ }
+
+ free(alpha);
+ free(beta);
+ free(gamma);
+ alpha = NULL;
+ beta = NULL;
+ gamma = NULL;
+
+ return set;
+}
+
+static fpt_set SO3_single_fpt_init(int l, int k, int m, unsigned int flags, int kappa)
+{
+ int N, t, k_start, k_end;
+ R *alpha, *beta, *gamma;
+ fpt_set set = 0;
+
+ /** Read in transfrom length. */
+ if (flags & NFSOFT_USE_DPT)
+ {
+ if (l < 2)
+ N = 2;
+ else
+ N = l;
+
+ t = (int) log2(X(next_power_of_2)(N));
+
+ }
+ else
+ {
+ /** workaround to compute polynomials of degree less than 2*/
+ if (l < 2)
+ N = 2;
+ else
+ N = X(next_power_of_2)(l);
+
+ t = (int) log2(N);
+ }
+
+ /**memory for the recurrence coefficients*/
+ alpha = (R*) nfft_malloc((N + 2) * sizeof(R));
+ beta = (R*) nfft_malloc((N + 2) * sizeof(R));
+ gamma = (R*) nfft_malloc((N + 2) * sizeof(R));
+
+ /** Initialize DPT. */
+ {
+ unsigned int fptflags = 0U
+ | IF(flags & NFSOFT_USE_DPT,FPT_NO_FAST_ALGORITHM,IF(t > 1,FPT_NO_DIRECT_ALGORITHM,0U))
+ | IF(flags & NFSOFT_NO_STABILIZATION,FPT_NO_STABILIZATION,0U);
+ set = fpt_init(1, t, fptflags);
+ }
+
+ /** Read in start and end indices */
+ k_start = (ABS(k) >= ABS(m)) ? ABS(k) : ABS(m);
+ k_end = N;
+
+ SO3_alpha_row(alpha, N, k, m);
+ SO3_beta_row(beta, N, k, m);
+ SO3_gamma_row(gamma, N, k, m);
+
+ /*{
+ int rr;
+ for (rr = 0; rr < N + 2; rr++)
+ fprintf(stderr, "a[%4d] = %10e b[%4d] = %10e c[%4d] = %10e\n",rr,alpha[rr],rr,beta[rr],rr,gamma[rr]);
+ }*/
+
+ fpt_precompute(set, 0, alpha, beta, gamma, k_start, kappa);
+
+ free(alpha);
+ free(beta);
+ free(gamma);
+ alpha = NULL;
+ beta = NULL;
+ gamma = NULL;
+
+ return set;
+}
+
+void SO3_fpt(C *coeffs, fpt_set set, int l, int k, int m, unsigned int flags)
+{
+ int N;
+ /** The Wigner coefficients */
+ C* x;
+ /** The Chebyshev coefficients */
+ C* y;
+
+ int trafo_nr; /**gives the index of the trafo in the FPT_set*/
+ int k_start, k_end, j;
+ int function_values = 0;
+
+ /** Read in transfrom length. */
+ if (flags & NFSOFT_USE_DPT)
+ {
+ N = l;
+ if (l < 2)
+ N = 2;
+ }
+ else
+ {
+ if (l < 2)
+ N = 2;
+ else
+ N = X(next_power_of_2)(l);
+ }
+
+ /** Read in start and end indeces */
+ k_start = (ABS(k) >= ABS(m)) ? ABS(k) : ABS(m);
+ k_end = N;
+ trafo_nr = (N + k) * (2* N + 1) + (m + N);
+
+ /** Read in Wigner coefficients. */
+ x = (C*) nfft_malloc((k_end + 1) * sizeof(C));
+
+ for (j = 0; j <= k_end; j++)
+ x[j] = K(0.0);
+
+
+ for (j = 0; j <= l - k_start; j++)
+ {
+ x[j + k_start] = coeffs[j];
+ }
+ for (j = l - k_start + 1; j <= k_end - k_start; j++)
+ {
+ x[j + k_start] = K(0.0);
+ }
+
+ /** Allocate memory for Chebyshev coefficients. */
+ y = (C*) nfft_malloc((k_end + 1) * sizeof(C));
+
+ if (flags & NFSOFT_USE_DPT)
+ { /** Execute DPT. */
+ fpt_trafo_direct(set, trafo_nr, &x[k_start], y, k_end, 0U
+ | (function_values ? FPT_FUNCTION_VALUES : 0U));
+ }
+ else
+ { /** compute fpt*/
+ fpt_trafo(set, trafo_nr, &x[k_start], y, k_end, 0U
+ | (function_values ? FPT_FUNCTION_VALUES : 0U));
+ }
+
+ /**write computed coeffs in the plan*/
+ for (j = 0; j <= l; j++)
+ {
+ coeffs[j] = y[j];
+ }
+
+ /** Free memory. */
+
+ free(x);
+ free(y);
+ x = NULL;
+ y = NULL;
+}
+
+void SO3_fpt_transposed(C *coeffs, fpt_set set, int l, int k, int m,
+ unsigned int flags)
+{
+ int N, k_start, k_end, j;
+ int trafo_nr; /**gives the index of the trafo in the FPT_set*/
+ int function_values = 0;
+ /** The Wigner coefficients */
+ C* x;
+ /** The Chebyshev coefficients */
+ C* y;
+
+ /** Read in transfrom length. */
+
+ if (flags & NFSOFT_USE_DPT)
+ {
+ N = l;
+ if (l < 2)
+ N = 2;
+ }
+ else
+ {
+ if (l < 2)
+ N = 2;
+ else
+ N = X(next_power_of_2)(l);
+ }
+
+ /** Read in start and end indeces */
+ k_start = (ABS(k) >= ABS(m)) ? ABS(k) : ABS(m);
+ k_end = N;
+ trafo_nr = (N + k) * (2* N + 1) + (m + N);
+
+ /** Allocate memory for Chebychev coefficients. */
+ y = (C*) nfft_malloc((k_end + 1) * sizeof(C));
+ /** Allocate memory for Wigner coefficients. */
+ x = (C*) nfft_malloc((k_end + 1) * sizeof(C));
+
+ for (j = 0; j <= l; j++)
+ {
+ y[j] = coeffs[j];
+ }
+ for (j = l + 1; j <= k_end; j++)
+ {
+ y[j] = K(0.0);
+ }
+
+ if (flags & NFSOFT_USE_DPT)
+ {
+ fpt_transposed_direct(set, trafo_nr, &x[k_start], y, k_end, 0U
+ | (function_values ? FPT_FUNCTION_VALUES : 0U));
+ }
+ else
+ {
+ fpt_transposed(set, trafo_nr, &x[k_start], y, k_end, 0U
+ | (function_values ? FPT_FUNCTION_VALUES : 0U));
+ }
+
+ for (j = 0; j <= l; j++)
+ {
+ coeffs[j] = x[j];
+ }
+
+ /** Free memory. */
+ free(x);
+ free(y);
+ x = NULL;
+ y = NULL;
+}
+
+void nfsoft_precompute(nfsoft_plan *plan3D)
+{
+ int j;
+ int N = plan3D->N_total;
+ int M = plan3D->M_total;
+
+ /** Node-dependent part*/
+
+ for (j = 0; j < M; j++)
+ {
+ plan3D->p_nfft.x[3* j ] = plan3D->x[3* j + 2];
+ plan3D->p_nfft.x[3* j + 1] = plan3D->x[3* j ];
+ plan3D->p_nfft.x[3* j + 2] = plan3D->x[3* j + 1];
+ }
+
+ for (j = 0; j < 3* plan3D ->p_nfft.M_total; j++)
+ {
+ plan3D->p_nfft.x[j] = plan3D->p_nfft.x[j] * (1 / (2* PI ));
+ }
+
+ if ((plan3D->p_nfft).nfft_flags & FG_PSI)
+ {
+ nfft_precompute_one_psi(&(plan3D->p_nfft));
+ }
+ if ((plan3D->p_nfft).nfft_flags & PRE_PSI)
+ {
+ nfft_precompute_one_psi(&(plan3D->p_nfft));
+ }
+
+}
+
+void nfsoft_trafo(nfsoft_plan *plan3D)
+{
+ int i, j, m, k, max, glo1, glo2;
+
+ i = 0;
+ glo1 = 0;
+ glo2 = 0;
+
+ int N = plan3D->N_total;
+ int M = plan3D->M_total;
+
+ /**almost nothing to be done for polynomial degree 0*/
+ if (N == 0)
+ {
+ for (j = 0; j < M; j++)
+ plan3D->f[j] = plan3D->f_hat[0];
+ return;
+ }
+
+ for (j = 0; j < plan3D->p_nfft.N_total; j++)
+ plan3D->p_nfft.f_hat[j] = 0.0;
+
+ for (k = -N; k <= N; k++)
+ {
+ for (m = -N; m <= N; m++)
+ {
+
+ max = (ABS(m) > ABS(k) ? ABS(m) : ABS(k));
+
+ for (j = 0; j <= N - max; j++)
+ {
+ plan3D->wig_coeffs[j] = plan3D->f_hat[glo1];
+
+ if ((plan3D->flags & NFSOFT_NORMALIZED))
+ {
+ plan3D->wig_coeffs[j] = plan3D->wig_coeffs[j] * (1. / (2. * PI))
+ * SQRT(0.5 * (2. * (max + j) + 1.));
+ }
+
+ if ((plan3D->flags & NFSOFT_REPRESENT))
+ {
+ if ((k < 0) && (k % 2))
+ {
+ plan3D->wig_coeffs[j] = plan3D->wig_coeffs[j] * (-1);
+ }
+ if ((m < 0) && (m % 2))
+ plan3D->wig_coeffs[j] = plan3D->wig_coeffs[j] * (-1);
+
+ if ((m + k) % 2)
+ plan3D->wig_coeffs[j] = plan3D->wig_coeffs[j] * (-1);
+
+ }
+
+ glo1++;
+ }
+
+ for (j = N - max + 1; j < X(next_power_of_2)(N) + 1; j++)
+ plan3D->wig_coeffs[j] = 0.0;
+ //fprintf(stdout,"\n k= %d, m= %d \n",k,m);
+ SO3_fpt(plan3D->wig_coeffs, plan3D->internal_fpt_set, N, k, m, plan3D->flags);
+
+ c2e(plan3D, ABS((k + m) % 2));
+
+ for (i = 1; i <= 2* plan3D ->N_total + 2; i++)
+ {
+ plan3D->p_nfft.f_hat[NFSOFT_INDEX(k, m, i - N - 1, N) - 1]
+ = plan3D->cheby[i - 1];
+ //fprintf(stdout,"%f \t", plan3D->nfft_plan.f_hat[NFSOFT_INDEX(k,m,i-N-1,N)-1]);
+ //fprintf(stdout,"another index: %d for k=%d,m=%d,l=%d,N=%d \n", NFSOFT_INDEX(k,m,i-N-1,N)-1,k,m,i-N-1,N);
+ }
+
+ }
+ }
+
+ if (plan3D->flags & NFSOFT_USE_NDFT)
+ {
+ nfft_trafo_direct(&(plan3D->p_nfft));
+ }
+ else
+ {
+ nfft_trafo(&(plan3D->p_nfft));
+ }
+
+ for (j = 0; j < plan3D->M_total; j++)
+ plan3D->f[j] = plan3D->p_nfft.f[j];
+
+}
+
+static void e2c(nfsoft_plan *my_plan, int even)
+{
+ int N;
+ int j;
+
+ /**initialize the bigger plan*/
+ N = 2* (my_plan ->N_total+1);
+ //nfft_vpr_complex(my_plan->cheby,N+1,"chebychev");
+
+
+ if (even>0)
+ {
+ //my_plan->aux[N-1]= -1/(2*I)* my_plan->cheby[N-2];
+ my_plan->aux[0]= 1/(2*_Complex_I)*my_plan->cheby[1];
+
+ for(j=1;j<N-1;j++)
+ {
+ my_plan->aux[j]=1/(2*_Complex_I)*(my_plan->cheby[j+1]-my_plan->cheby[j-1]);
+}
+my_plan->aux[N-1]=1/(2*_Complex_I)*(-my_plan->cheby[j-1]);
+
+
+for(j=0;j<N;j++)
+{
+my_plan->cheby[j]= my_plan->aux[j];
+}
+}
+
+my_plan->wig_coeffs[0]=my_plan->cheby[my_plan->N_total+1];
+
+for(j=1;j<=my_plan->N_total;j++)
+{
+my_plan->wig_coeffs[j]=0.5*(my_plan->cheby[my_plan->N_total+j+1]+my_plan->cheby[my_plan->N_total+1-j]);
+}
+
+
+
+//nfft_vpr_complex(my_plan->wig_coeffs,my_plan->N_total,"chebychev ");
+
+}
+
+void nfsoft_adjoint(nfsoft_plan *plan3D)
+{
+ int i, j, m, k, max, glo1, glo2;
+
+ i = 0;
+ glo1 = 0;
+ glo2 = 0;
+
+ int N = plan3D->N_total;
+ int M = plan3D->M_total;
+
+ //nothing much to be done for polynomial degree 0
+ if (N == 0)
+ {
+ plan3D->f_hat[0]=0;
+ for (j = 0; j < M; j++)
+ plan3D->f_hat[0] += plan3D->f[j];
+ return;
+ }
+
+ for (j = 0; j < M; j++)
+ {
+ plan3D->p_nfft.f[j] = plan3D->f[j];
+ }
+
+ if (plan3D->flags & NFSOFT_USE_NDFT)
+ {
+ nfft_adjoint_direct(&(plan3D->p_nfft));
+ }
+ else
+ {
+ nfft_adjoint(&(plan3D->p_nfft));
+ }
+
+ //nfft_vpr_complex(plan3D->nfft_plan.f_hat,plan3D->nfft_plan.N_total,"all results");
+
+ glo1 = 0;
+
+ for (k = -N; k <= N; k++)
+ {
+ for (m = -N; m <= N; m++)
+ {
+
+ max = (ABS(m) > ABS(k) ? ABS(m) : ABS(k));
+
+ for (i = 1; i < 2* plan3D ->N_total + 3; i++)
+ {
+ plan3D->cheby[i - 1] = plan3D->p_nfft.f_hat[NFSOFT_INDEX(k, m, i - N
+ - 1, N) - 1];
+ }
+
+ //fprintf(stdout,"k=%d,m=%d \n",k,m);
+ //nfft_vpr_complex(plan3D->cheby,2*plan3D->N_total+2,"euler");
+ e2c(plan3D, ABS((k + m) % 2));
+
+ //nfft_vpr_complex(plan3D->wig_coeffs,plan3D->N_total+1,"chebys");
+ SO3_fpt_transposed(plan3D->wig_coeffs, plan3D->internal_fpt_set, N, k, m,
+ plan3D->flags);
+ //nfft_vpr_complex(plan3D->wig_coeffs,plan3D->N_total+1,"wigners");
+ // SO3_fpt_transposed(plan3D->wig_coeffs,N,k,m,plan3D->flags,plan3D->fpt_kappa);
+
+
+ for (j = max; j <= N; j++)
+ {
+ if ((plan3D->flags & NFSOFT_REPRESENT))
+ {
+ if ((k < 0) && (k % 2))
+ {
+ plan3D->wig_coeffs[j] = -plan3D->wig_coeffs[j];
+ }
+ if ((m < 0) && (m % 2))
+ plan3D->wig_coeffs[j] = -plan3D->wig_coeffs[j];
+
+ if ((m + k) % 2)
+ plan3D->wig_coeffs[j] = plan3D->wig_coeffs[j] * (-1);
+
+ }
+
+ plan3D->f_hat[glo1] = plan3D->wig_coeffs[j];
+
+ if ((plan3D->flags & NFSOFT_NORMALIZED))
+ {
+ plan3D->f_hat[glo1] = plan3D->f_hat[glo1] * (1 / (2. * PI)) * SQRT(
+ 0.5 * (2. * (j) + 1.));
+ }
+
+ glo1++;
+ }
+
+ }
+ }
+}
+
+void nfsoft_finalize(nfsoft_plan *plan)
+{
+ /* Finalise the nfft plan. */
+ nfft_finalize(&plan->p_nfft);
+ free(plan->wig_coeffs);
+ free(plan->cheby);
+ free(plan->aux);
+
+ fpt_finalize(plan->internal_fpt_set);
+ plan->internal_fpt_set = NULL;
+
+ if (plan->flags & NFSOFT_MALLOC_F_HAT)
+ {
+ //fprintf(stderr,"deallocating f_hat\n");
+ free(plan->f_hat);
+ }
+
+ /* De-allocate memory for samples, if neccesary. */
+ if (plan->flags & NFSOFT_MALLOC_F)
+ {
+ //fprintf(stderr,"deallocating f\n");
+ free(plan->f);
+ }
+
+ /* De-allocate memory for nodes, if neccesary. */
+ if (plan->flags & NFSOFT_MALLOC_X)
+ {
+ //fprintf(stderr,"deallocating x\n");
+ free(plan->x);
+ }
+}
+
+int posN(int n, int m, int B)
+{
+ int pos;
+
+ if (n > -B)
+ pos = posN(n - 1, m, B) + B + 1 - MAX(ABS(m), ABS(n - 1));
+ else
+ pos = 0;
+ //(n > -B? pos=posN(n-1,m,B)+B+1-MAX(ABS(m),ABS(n-1)): pos= 0)
+ return pos;
+}
+
diff --git a/kernel/nfsoft/wigner.c b/kernel/nfsoft/wigner.c
new file mode 100755
index 0000000..9ac2a7a
--- /dev/null
+++ b/kernel/nfsoft/wigner.c
@@ -0,0 +1,382 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: wigner.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include <math.h>
+#include <stdio.h>
+#include "infft.h"
+#include "wigner.h"
+#include "nfft3util.h"
+
+double SO3_alpha(const int m1, const int m2, const int j)
+{
+ const int M = MAX(ABS(m1),ABS(m2)), mini = MIN(ABS(m1),ABS(m2));
+
+ if (j < 0)
+ return K(0.0);
+ else if (j == 0)
+ {
+ if (m1 == 0 && m2 == 0)
+ return K(1.0);
+ if (m1 == m2)
+ return K(0.5);
+ else
+ return IF((m1+m2)%2,K(0.0),K(-0.5));
+ }
+ else if (j < M - mini)
+ return IF(j%2,K(0.5),K(-0.5));
+ else if (j < M)
+ return K(0.5) * SIGNF((R)m1)*SIGNF((R)m2);
+ else
+ return
+ SQRT(((R)(j+1))/((R)(j+1-m1)))
+ * SQRT(((R)(2*j+1))/((R)(j+1+m1)))
+ * SQRT(((R)(j+1))/((R)(j+1-m2)))
+ * SQRT(((R)(2*j+1))/((R)(j+1+m2)));
+}
+
+double SO3_beta(const int m1, const int m2, const int j)
+{
+ if (j < 0)
+ return K(0.0);
+ else if (j < MAX(ABS(m1),ABS(m2)))
+ return K(0.5);
+ else if (m1 == 0 || m2 == 0)
+ return K(0.0);
+ else
+ {
+ const R m1a = FABS((R)m1), m2a = FABS((R)m2);
+ return -COPYSIGN(
+ ((SQRT(m1a)*SQRT(m2a))/((R)j))
+ * SQRT(m1a/((R)(j+1-m1)))
+ * SQRT(((R)(2*j+1))/((R)(j+1+m1)))
+ * SQRT(m2a/((R)(j+1-m2)))
+ * SQRT(((R)(2*j+1))/((R)(j+1+m2))),
+ SIGNF((R)m1)*SIGNF((R)m2));
+ }
+}
+
+double SO3_gamma(const int m1, const int m2, const int j)
+{
+ if (MAX(ABS(m1),ABS(m2)) < j)
+ return -(((R)(j+1))/((R)j)) * SQRT((((R)(j-m1))/((R)(j+1-m1)))
+ *(((R)(j+m1))/((R)(j+1+m1)))*(((R)(j-m2))/((R)(j+1-m2)))
+ *(((R)(j+m2))/((R)(j+1+m2))));
+ else if (j == -1)
+ return IF(m1 > m2 || !((m1 + m2) % 2), K(1.0), K(-1.0))
+ * nfft_lambda2((R)ABS(m2 - m1),(R)ABS(m2 + m1));
+ else
+ return K(0.0);
+}
+
+/*compute the coefficients for all degrees*/
+
+inline void SO3_alpha_row(double *alpha, int N, int k, int m)
+{
+ int j;
+ double *alpha_act = alpha;
+ for (j = -1; j <= N; j++)
+ *alpha_act++ = SO3_alpha(k, m, j);
+}
+
+inline void SO3_beta_row(double *beta, int N, int k, int m)
+{
+ int j;
+ double *beta_act = beta;
+ for (j = -1; j <= N; j++)
+ *beta_act++ = SO3_beta(k, m, j);
+}
+
+inline void SO3_gamma_row(double *gamma, int N, int k, int m)
+{
+ int j;
+ double *gamma_act = gamma;
+ for (j = -1; j <= N; j++)
+ *gamma_act++ = SO3_gamma(k, m, j);
+}
+
+/*compute for all degrees l and orders k*/
+
+inline void SO3_alpha_matrix(double *alpha, int N, int m)
+{
+ int i, j;
+ double *alpha_act = alpha;
+ for (i = -N; i <= N; i++)
+ {
+ for (j = -1; j <= N; j++)
+ {
+ *alpha_act = SO3_alpha(i, m, j);
+ alpha_act++;
+ }
+ }
+}
+
+inline void SO3_beta_matrix(double *alpha, int N, int m)
+{
+ int i, j;
+ double *alpha_act = alpha;
+ for (i = -N; i <= N; i++)
+ {
+ for (j = -1; j <= N; j++)
+ {
+ *alpha_act = SO3_beta(i, m, j);
+ alpha_act++;
+ }
+ }
+}
+
+inline void SO3_gamma_matrix(double *alpha, int N, int m)
+{
+ int i, j;
+ double *alpha_act = alpha;
+ for (i = -N; i <= N; i++)
+ {
+ for (j = -1; j <= N; j++)
+ {
+ *alpha_act = SO3_gamma(i, m, j);
+ alpha_act++;
+ }
+ }
+}
+
+/*compute all 3termrecurrence coeffs*/
+
+inline void SO3_alpha_all(double *alpha, int N)
+{
+ int q;
+ int i, j, m;
+ double *alpha_act = alpha;
+ q = 0;
+ for (m = -N; m <= N; m++)
+ {
+ for (i = -N; i <= N; i++)
+ {
+ for (j = -1; j <= N; j++)
+ {
+ *alpha_act = SO3_alpha(i, m, j);
+ fprintf(stdout, "alpha_all_%d^[%d,%d]=%f\n", j, i, m,
+ SO3_alpha(i, m, j));
+ alpha_act++;
+ q = q + 1;
+
+ }
+ }
+ }
+}
+
+inline void SO3_beta_all(double *alpha, int N)
+{
+ int i, j, m;
+ double *alpha_act = alpha;
+ for (m = -N; m <= N; m++)
+ {
+ for (i = -N; i <= N; i++)
+ {
+ for (j = -1; j <= N; j++)
+ {
+ *alpha_act = SO3_beta(i, m, j);
+ alpha_act++;
+ }
+ }
+ }
+}
+
+inline void SO3_gamma_all(double *alpha, int N)
+{
+ int i, j, m;
+ double *alpha_act = alpha;
+ for (m = -N; m <= N; m++)
+ {
+ for (i = -N; i <= N; i++)
+ {
+ for (j = -1; j <= N; j++)
+ {
+ *alpha_act = SO3_gamma(i, m, j);
+ alpha_act++;
+ }
+ }
+ }
+}
+
+inline void eval_wigner(double *x, double *y, int size, int k, double *alpha,
+ double *beta, double *gamma)
+{
+ /* Evaluate the wigner function d_{k,nleg} (l,x) for the vector
+ * of knots x[0], ..., x[size-1] by the Clenshaw algorithm
+ */
+ int i, j;
+ double a, b, x_val_act, a_old;
+ double *x_act, *y_act;
+ double *alpha_act, *beta_act, *gamma_act;
+
+ /* Traverse all nodes. */
+ x_act = x;
+ y_act = y;
+ for (i = 0; i < size; i++)
+ {
+ a = 1.0;
+ b = 0.0;
+ x_val_act = *x_act;
+
+ if (k == 0)
+ {
+ *y_act = 1.0;
+ }
+ else
+ {
+ alpha_act = &(alpha[k]);
+ beta_act = &(beta[k]);
+ gamma_act = &(gamma[k]);
+ for (j = k; j > 1; j--)
+ {
+ a_old = a;
+ a = b + a_old * ((*alpha_act) * x_val_act + (*beta_act));
+ b = a_old * (*gamma_act);
+ alpha_act--;
+ beta_act--;
+ gamma_act--;
+ }
+ *y_act = (a * ((*alpha_act) * x_val_act + (*beta_act)) + b);
+ }
+ x_act++;
+ y_act++;
+ }
+}
+
+inline int eval_wigner_thresh(double *x, double *y, int size, int k,
+ double *alpha, double *beta, double *gamma, double threshold)
+{
+
+ int i, j;
+ double a, b, x_val_act, a_old;
+ double *x_act, *y_act;
+ double *alpha_act, *beta_act, *gamma_act;
+
+ /* Traverse all nodes. */
+ x_act = x;
+ y_act = y;
+ for (i = 0; i < size; i++)
+ {
+ a = 1.0;
+ b = 0.0;
+ x_val_act = *x_act;
+
+ if (k == 0)
+ {
+ *y_act = 1.0;
+ }
+ else
+ {
+ alpha_act = &(alpha[k]);
+ beta_act = &(beta[k]);
+ gamma_act = &(gamma[k]);
+ for (j = k; j > 1; j--)
+ {
+ a_old = a;
+ a = b + a_old * ((*alpha_act) * x_val_act + (*beta_act));
+ b = a_old * (*gamma_act);
+ alpha_act--;
+ beta_act--;
+ gamma_act--;
+ }
+ *y_act = (a * ((*alpha_act) * x_val_act + (*beta_act)) + b);
+ if (fabs(*y_act) > threshold)
+ {
+ return 1;
+ }
+ }
+ x_act++;
+ y_act++;
+ }
+ return 0;
+}
+
+/************************************************************************/
+/* L2 normed wigner little d, WHERE THE DEGREE OF THE FUNCTION IS EQUAL
+ TO ONE OF ITS ORDERS. This is the function to use when starting the
+ three-term recurrence at orders (m1,m2)
+
+ Note that, by definition, since I am starting the recurrence with this
+ function, that the degree j of the function is equal to max(abs(m1), abs(m2) ).
+ */
+
+double wigner_start(int m1, int m2, double theta)
+{
+
+ int i, l, delta;
+ int cosPower, sinPower;
+ int absM1, absM2;
+ double dl, dm1, dm2, normFactor, sinSign;
+ double dCP, dSP;
+ double max;
+ double min;
+
+ max = (double) (ABS(m1) > ABS(m2) ? ABS(m1) : ABS(m2));
+ min = (double) (ABS(m1) < ABS(m2) ? ABS(m1) : ABS(m2));
+
+ l = max;
+ delta = l - min;
+
+ absM1 = ABS(m1);
+ absM2 = ABS(m2);
+ dl = (double) l;
+ dm1 = (double) m1;
+ dm2 = (double) m2;
+ sinSign = 1.;
+ normFactor = 1.;
+
+ for (i = 0; i < delta; i++)
+ normFactor *= SQRT((2. * dl - ((double) i)) / (((double) i) + 1.));
+
+ /* need to adjust to make the L2-norm equal to 1 */
+
+ normFactor *= SQRT((2. * dl + 1.) / 2.);
+
+ if (l == absM1)
+ if (m1 >= 0)
+ {
+ cosPower = l + m2;
+ sinPower = l - m2;
+ if ((l - m2) % 2)
+ sinSign = -1.;
+ }
+ else
+ {
+ cosPower = l - m2;
+ sinPower = l + m2;
+ }
+ else if (m2 >= 0)
+ {
+ cosPower = l + m1;
+ sinPower = l - m1;
+ }
+ else
+ {
+ cosPower = l - m1;
+ sinPower = l + m1;
+ if ((l + m1) % 2)
+ sinSign = -1.;
+ }
+
+ dCP = (double) cosPower;
+ dSP = (double) sinPower;
+
+ return normFactor * sinSign * POW(sin(theta / 2), dSP) * POW(cos(theta / 2),
+ dCP);
+}
diff --git a/kernel/nfsoft/wigner.h b/kernel/nfsoft/wigner.h
new file mode 100755
index 0000000..15d34f8
--- /dev/null
+++ b/kernel/nfsoft/wigner.h
@@ -0,0 +1,197 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: wigner.h 3775 2012-06-02 16:39:48Z keiner $ */
+
+/**
+ * \file wigner.h
+ *
+ * \brief Header file for functions related to Wigner-d/D functions
+ *
+ * \author Antje Vollrath
+ */
+#ifndef WIGNER_H
+#define WIGNER_H
+
+/**
+ * Computes three-term recurrence coefficients \f$\alpha_l^{km}\f$ of
+ * Wigner-d functions
+ *
+ * \arg k The order \f$k\f$
+ * \arg m The order \f$m\f$
+ * \arg l The degree \f$l\f$
+ */
+double SO3_alpha(int k, int m, int l);
+/**
+ * Computes three-term recurrence coefficients \f$\beta_l^{km}\f$ of
+ * Wigner-d functions
+ *
+ * \arg k The order \f$k\f$
+ * \arg m The order \f$m\f$
+ * \arg l The degree \f$l\f$
+ */
+double SO3_beta(int k, int m, int l);
+/**
+ * Computes three-term recurrence coefficients \f$\gamma_l^{km}\f$ of
+ * Wigner-d functions
+ *
+ * \arg k The order \f$k\f$
+ * \arg m The order \f$m\f$
+ * \arg l The degree \f$l\f$
+ */
+double SO3_gamma(int k, int m, int l);
+/**
+ * Compute three-term-recurrence coefficients \f$ \alpha_{l}^{km}\f$ of
+ * Wigner-d functions for all degrees \f$ l= 0,\ldots,N \f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ * \arg m the first order
+ * \arg n the second order
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_alpha_row(double *alpha, int N, int m, int n);
+/**
+ * Compute three-term-recurrence coefficients \f$ \beta_{l}^{km}\f$ of
+ * Wigner-d functions for all degrees \f$ l= 0,\ldots,N \f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ * \arg m the first order
+ * \arg n the second order
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_beta_row(double *beta, int N, int m, int n);
+/**
+ * Compute three-term-recurrence coefficients \f$ \gamma_{l}^{km}\f$ of
+ * Wigner-d functions for all degrees \f$ l= 0,\ldots,N \f$
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ * \arg m the first order
+ * \arg n the second order
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_gamma_row(double *gamma, int N, int m, int n);
+/**
+ * Compute three-term-recurrence coefficients \f$ \alpha_{l}^{km}\f$ of
+ * Wigner-d functions for all order \f$ m = -N,\ldots,N \f$ and
+ * degrees \f$ l= 0,\ldots,N \f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ * \arg n the second order
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_alpha_matrix(double *alpha, int N, int n);
+/**
+ * Compute three-term-recurrence coefficients \f$ \beta_{l}^{km}\f$ of
+ * Wigner-d functions for all order \f$ m = -N,\ldots,N \f$ and
+ * degrees \f$ l= 0,\ldots,N \f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ * \arg n the second order
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_beta_matrix(double *beta, int N, int n);
+/**
+ * Compute three-term-recurrence coefficients \f$ \gamma_{l}^{km}\f$ of
+ * Wigner-d functions for all order \f$ m = -N,\ldots,N \f$ and
+ * degrees \f$ l= 0,\ldots,N \f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ * \arg n the second order
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_gamma_matrix(double *gamma, int N, int n);
+
+/**
+ * Compute three-term-recurrence coefficients \f$\alpha_{l}^{km}\f$ of
+ * Wigner-d functions for all \f$ k,m = -N,\ldots,N \f$ and \f$ l= 0,\ldots,N \f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ *
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_alpha_all(double *alpha, int N);
+/**
+ * Compute three-term-recurrence coefficients \f$\beta_{l}^{km}\f$ of
+ * Wigner-d functions for all \f$ k,m = -N,\ldots,N \f$ and \f$ l= 0,\ldots,N \f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ *
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_beta_all(double *beta, int N);
+/**
+ * Compute three-term-recurrence coefficients \f$\gamma_{l}^{km}\f$ of
+ * Wigner-d functions for all \f$ k,m = -N,\ldots,N \f$ and \f$ l= 0,\ldots,N \f$.
+ *
+ * \arg alpha A pointer to an array of doubles of size \f$(2N+1)^2(N+1)\f$
+ *
+ * \arg N The upper bound \f$N\f$.
+ */
+void SO3_gamma_all(double *gamma, int N);
+
+/**
+ * Evaluates Wigner-d functions \f$d_l^{km}(x,c)\f$ using the
+ * Clenshaw-algorithm.
+ *
+ * \arg x A pointer to an array of nodes where the function is to be evaluated
+ * \arg y A pointer to an array where the function values are returned
+ * \arg size The length of x and y
+ * \arg l The degree \f$l\f$
+ * \arg alpha A pointer to an array containing the recurrence coefficients
+ * \f$\alpha_c^{km},\ldots,\alpha_{c+l}^{km}\f$
+ * \arg beta A pointer to an array containing the recurrence coefficients
+ * \f$\beta_c^{km},\ldots,\beta_{c+l}^{km}\f$
+ * \arg gamma A pointer to an array containing the recurrence coefficients
+ * \f$\gamma_c^{km},\ldots,\gamma_{c+l}^{km}\f$
+ */
+void eval_wigner(double *x, double *y, int size, int l, double *alpha,
+ double *beta, double *gamma);
+/**
+ * Evaluates Wigner-d functions \f$d_l^{km}(x,c)\f$ using the
+ * Clenshaw-algorithm if it not exceeds a given threshold.
+ *
+ * \arg x A pointer to an array of nodes where the function is to be evaluated
+ * \arg y A pointer to an array where the function values are returned
+ * \arg size The length of x and y
+ * \arg l The degree \f$l\f$
+ * \arg alpha A pointer to an array containing the recurrence coefficients
+ * \f$\alpha_c^{km},\ldots,\alpha_{c+l}^{km}\f$
+ * \arg beta A pointer to an array containing the recurrence coefficients
+ * \f$\beta_c^{km},\ldots,\beta_{c+l}^{km}\f$
+ * \arg gamma A pointer to an array containing the recurrence coefficients
+ * \f$\gamma_c^{km},\ldots,\gamma_{c+l}^{km}\f$
+ * \arg threshold The threshold
+ */
+int eval_wigner_thresh(double *x, double *y, int size, int l, double *alpha,
+ double *beta, double *gamma, double threshold);
+
+/**
+ * A method used for debugging, gives the values to start the "old" three-term recurrence
+ * generates \f$ d^{km}_l(cos(theta)) \f$ WHERE THE DEGREE l OF THE FUNCTION IS EQUAL
+ * TO THE MAXIMUM OF ITS ORDERS
+ *
+ * \arg theta the argument of
+ * \arg n1 the first order
+ * \arg n2 the second order
+ *
+ * \return the function value \f$ d^{km}_l(cos(theta)) \f$
+ *
+ **/
+double wigner_start(int n1, int n2, double theta);
+
+#endif
diff --git a/kernel/nfst/Makefile.am b/kernel/nfst/Makefile.am
new file mode 100644
index 0000000..0f79902
--- /dev/null
+++ b/kernel/nfst/Makefile.am
@@ -0,0 +1,6 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_LTLIBRARIES = libnfst.la
+
+libnfst_la_SOURCES = nfst.c
+
diff --git a/kernel/nfst/Makefile.in b/kernel/nfst/Makefile.in
new file mode 100644
index 0000000..3a28889
--- /dev/null
+++ b/kernel/nfst/Makefile.in
@@ -0,0 +1,553 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/nfst
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libnfst_la_LIBADD =
+am_libnfst_la_OBJECTS = nfst.lo
+libnfst_la_OBJECTS = $(am_libnfst_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libnfst_la_SOURCES)
+DIST_SOURCES = $(libnfst_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+noinst_LTLIBRARIES = libnfst.la
+libnfst_la_SOURCES = nfst.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nfst/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu kernel/nfst/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libnfst.la: $(libnfst_la_OBJECTS) $(libnfst_la_DEPENDENCIES) $(EXTRA_libnfst_la_DEPENDENCIES)
+ $(LINK) $(libnfst_la_OBJECTS) $(libnfst_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfst.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/nfst/nfst.c b/kernel/nfst/nfst.c
new file mode 100644
index 0000000..664257b
--- /dev/null
+++ b/kernel/nfst/nfst.c
@@ -0,0 +1,1078 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfst.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/**
+ * Library.
+ * Includes simple and fast computation of the NFST (direct problem)
+ * author: S. Klatt 2004-2006
+ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+/**
+ * handy shortcuts
+ **/
+#define NFST_DEFAULT_FLAGS PRE_PHI_HUT|\
+ PRE_PSI|\
+ MALLOC_X|\
+ MALLOC_F_HAT|\
+ MALLOC_F|\
+ FFTW_INIT|\
+ FFT_OUT_OF_PLACE
+
+#define FFTW_DEFAULT_FLAGS FFTW_ESTIMATE|\
+ FFTW_DESTROY_INPUT
+
+#define NFST_SUMMANDS ( 2 * ths->m + 2)
+#define NODE(p,r) ( ths->x[(p) * ths->d + (r)])
+
+#define MACRO_ndst_init_result_trafo \
+ memset( f, 0, ths->M_total * sizeof( double));
+#define MACRO_ndst_init_result_adjoint \
+ memset( f_hat, 0, ths->N_total * sizeof( double));
+
+
+#define MACRO_nfst_D_init_result_A \
+ memset(g_hat, 0, nfst_prod_minus_a_int( ths->n, 0, ths->d) * sizeof( double));
+#define MACRO_nfst_D_init_result_T \
+ memset(f_hat, 0, ths->N_total * sizeof( double));
+
+#define MACRO_nfst_B_init_result_A \
+ memset(f, 0, ths->M_total * sizeof( double));
+#define MACRO_nfst_B_init_result_T \
+ memset(g, 0, nfst_prod_minus_a_int( ths->n, 0, ths->d) * sizeof( double));
+
+
+#define NFST_PRE_WINFUN( d) ths->N[d] = 2 * ths->N[d]; \
+ ths->n[d] = nfst_fftw_2N( ths->n[d]);
+
+#define NFST_POST_WINFUN( d) ths->N[d] = (LRINT(0.5 * ths->N[d])); \
+ ths->n[d] = nfst_fftw_2N_rev( ths->n[d]);
+
+
+#define NFST_WINDOW_HELP_INIT WINDOW_HELP_INIT
+
+
+double nfst_phi_hut( nfst_plan *ths, int k, int d)
+{
+ NFST_PRE_WINFUN( d);
+ double phi_hut_tmp = PHI_HUT( k, d);
+ NFST_POST_WINFUN( d);
+
+ return phi_hut_tmp;
+}
+
+double nfst_phi( nfst_plan *ths, double x, int d)
+{
+ NFST_PRE_WINFUN( d);
+ double phi_tmp = PHI( x, d);
+ NFST_POST_WINFUN( d);
+
+ return phi_tmp;
+}
+
+int nfst_fftw_2N( int n)
+{
+ return 2 * ( n + 1);
+}
+
+int nfst_fftw_2N_rev( int n)
+{
+ div_t n_div;
+
+ n_div = div(n, 2);
+ return n_div.quot - 1;
+}
+
+#define MACRO_with_sin_vec sin_vec[t][ka[t]]
+#define MACRO_without_sin_vec sin( 2.0 * PI * (ka[t]+1) * NODE(j,t))
+
+
+#define MACRO_with_PRE_PHI_HUT ths->c_phi_inv[t][kg[t]];
+#define MACRO_compute_PHI_HUT_INV (1.0 / (nfst_phi_hut( ths, kg[t]+1, t)))
+
+#define MACRO_with_PRE_PSI ths->psi[(j * ths->d + t) * NFST_SUMMANDS + lc[t]];
+#define MACRO_compute_PSI \
+ nfst_phi( ths, NODE(j,t) - (( double)(lc[t] + lb[t])) / nfst_fftw_2N( ths->n[t]), t)
+
+
+
+/** direct computation of non equispaced sine transforms
+ * nfst_trafo_direct, nfst_adjoint_direct_
+ * require O(M N^d) arithemtical operations
+ *
+ * direct computation of the nfst_trafo_direct, formula (1.1)
+ * nfst_trafo_direct:
+ * for j=0,...,M-1
+ * f[j] = sum_{k in I_N^d} f_hat[k] * sin(2 (pi) k x[j])
+ *
+ * direct computation of the nfft_adjoint_direct, formula (1.2)
+ * nfst_adjoint_direct:
+ * for k in I_N^d
+ * f_hat[k] = sum_{j=0}^{M-1} f[j] * sin(2 (pi) k x[j])
+ */
+
+#define MACRO_ndst_malloc__sin_vec \
+ \
+ double **sin_vec; \
+ sin_vec = (double**)nfft_malloc( ths->d * sizeof( double*)); \
+ for( t = 0; t < ths->d; t++) \
+ sin_vec[t] = (double*)nfft_malloc( ( ths->N[t] - 1) * sizeof( double)); \
+
+
+
+
+#define MACRO_ndst_free__sin_vec \
+{ \
+ /* free allocated memory */ \
+ for( t = 0; t < ths->d; t++) \
+ nfft_free( sin_vec[t]); \
+ nfft_free( sin_vec); \
+}
+
+
+
+#define MACRO_ndst_init__sin_vec \
+{ \
+ for( t = 0; t < ths->d; t++) \
+ { \
+ cos_x[t] = cos( 2.0 * PI * NODE(j,t)); \
+ sin_vec[t][0] = sin( 2.0 * PI * NODE(j,t)); \
+ sin_vec[t][1] = sin( 4.0 * PI * NODE(j,t)); \
+ for( k = 2; k < ths->N[t] - 1; k++) \
+ sin_vec[t][k] = 2.0 * cos_x[t] * sin_vec[t][k-1] \
+ - sin_vec[t][k-2]; \
+ } \
+}
+
+
+#define MACRO_ndst_init__k__sin_k( which_one) \
+{ \
+ sin_k[0] = 1.0; \
+ for( t = 0; t < ths->d; t++) \
+ ka[t] = 0; \
+ \
+ for( t = 0; t < ths->d; t++) \
+ { \
+ sin_k[t+1] = sin_k[t] * MACRO_ ##which_one; \
+ } \
+}
+
+
+#define MACRO_ndst_count__k__sin_k( which_one) \
+{ \
+ ka[ths->d-1]++; \
+ i = ths->d - 1; \
+ while( ( ka[i] == ths->N[i] - 1) && ( i > 0)) \
+ { \
+ ka[i - 1]++; \
+ ka[i] = 0; \
+ \
+ i--; \
+ } \
+ for( t = i; t < ths->d; t++) \
+ sin_k[t+1] = sin_k[t] * MACRO_ ##which_one; \
+}
+
+
+#define MACRO_ndst_compute__trafo \
+{ \
+ f[j] += f_hat[k] * sin_k[ths->d]; \
+}
+
+#define MACRO_ndst_compute__adjoint \
+{ \
+ f_hat[k] += f[j] * sin_k[ths->d]; \
+}
+
+
+/* slow (trafo) transform */
+#define MACRO_ndst( which_one) \
+ void nfst_ ## which_one ## _direct ( nfst_plan *ths) \
+ { \
+ int j, k, t, i; \
+ int ka[ths->d]; \
+ double sin_k[ths->d+1]; \
+ double cos_x[ths->d]; \
+ \
+ double *f = ths->f; \
+ double *f_hat = ths->f_hat; \
+ \
+ MACRO_ndst_init_result_ ## which_one; \
+ \
+ if( ths->d == 1) \
+ for( j = 0; j < ths->M_total; j++) \
+ for( k = 0; k < ths->N_total; k++) \
+ { \
+ sin_k[ths->d] = sin( 2.0 * PI * (k+1) * NODE(j,0)); \
+ MACRO_ndst_compute__ ## which_one; \
+ } \
+ else \
+ if( 1 == 0) /*FIXME: remove slow slow ... */ \
+ /* slow ndst */ \
+ for( j = 0; j < ths->M_total; j++) \
+ { \
+ MACRO_ndst_init__k__sin_k(without_sin_vec); \
+ \
+ for( k = 0; k < ths->N_total; k++) \
+ { \
+ MACRO_ndst_compute__ ## which_one; \
+ \
+ MACRO_ndst_count__k__sin_k(without_sin_vec); \
+ } \
+ } \
+ else \
+ { \
+ /* fast nfst_trafo_direct */ \
+ MACRO_ndst_malloc__sin_vec; \
+ \
+ for( j = 0; j < ths->M_total; j++) \
+ { \
+ MACRO_ndst_init__sin_vec; \
+ \
+ MACRO_ndst_init__k__sin_k(with_sin_vec); \
+ \
+ for( k = 0; k < ths->N_total; k++) \
+ { \
+ MACRO_ndst_compute__ ## which_one; \
+ \
+ MACRO_ndst_count__k__sin_k(with_sin_vec); \
+ } \
+ } \
+ MACRO_ndst_free__sin_vec; \
+ } \
+ } /* ndst_{trafo, adjoint} */
+
+
+MACRO_ndst(trafo)
+MACRO_ndst(adjoint)
+
+
+
+
+/** fast computation of non equispaced sine transforms
+ * require O(N^d log(N) + M) arithemtical operations
+ *
+ * fast computation of the nfst_trafo, formula (1.1)
+ * nfst_trafo:
+ * for j=0,...,M-1
+ * f[j] = sum_{k in I_N^d} f_hat[k] * sin(2 (pi) k x[j])
+ *
+ * direct computation of the nfst_adjoint, formula (1.2)
+ * nfst_adjoint:
+ * for k in I_N^d
+ * f_hat[k] = sum_{j=0}^{M-1} f[j] * sin(2 (pi) k x[j])
+ */
+
+#define MACRO_nfst__lower_boundary( j,act_dim) \
+{ \
+ lb[(act_dim)] = \
+ (LRINT(NODE((j),(act_dim)) * nfst_fftw_2N( ths->n[(act_dim)]))) - ths->m; \
+}
+
+#define MACRO_nfst_D_compute_A \
+{ \
+ g_hat[kg_plain[ths->d]] = f_hat[k_L] * c_phi_inv_k[ths->d]; \
+}
+
+#define MACRO_nfst_D_compute_T \
+{ \
+ f_hat[k_L] = g_hat[kg_plain[ths->d]] * c_phi_inv_k[ths->d]; \
+}
+
+
+#define MACRO_init__kg \
+{ \
+ for( t = 0; t < ths->d; t++) \
+ kg[t] = 0; \
+ \
+ i = 0; \
+}
+
+
+#define MACRO_count__kg \
+{ \
+ kg[ths->d - 1]++; \
+ i = ths->d - 1; \
+ while( ( kg[i] == ths->N[i] - 1) && ( i > 0)) \
+ { \
+ kg[i - 1]++; \
+ kg[i] = 0; \
+ \
+ i--; \
+ } \
+}
+
+
+#define MACRO_update__c_phi_inv_k__lg_plain( which_one, which_phi) \
+{ \
+ for( t = i; t < ths->d; t++) { \
+ MACRO__c_phi_inv_k( which_phi); \
+ kg_plain[t+1] = kg_plain[t] * ths->n[t] + kg[t]; \
+ } \
+}
+
+
+#define MACRO__c_phi_inv_k( which_phi) \
+{ \
+ c_phi_inv_k[t+1] = 0.5 * c_phi_inv_k[t] * MACRO_ ## which_phi; \
+}
+
+
+#define MACRO_nfst_D(which_one) \
+static inline void nfst_D_ ## which_one (nfst_plan *ths) \
+{ \
+ int k_L; /**< plain index */ \
+ \
+ int i, t; \
+ int kg[ths->d]; /**< multi index in g_hat,c_phi */ \
+ double c_phi_inv_k[ths->d+1]; /**< postfix product of PHI_HUT */ \
+ int kg_plain[ths->d+1]; /**< postfix plain index */ \
+ \
+ double *g_hat, *f_hat; /**< local copy */ \
+ \
+ g_hat = ths->g_hat; \
+ f_hat = ths->f_hat; \
+ \
+ MACRO_nfst_D_init_result_ ## which_one \
+ \
+ c_phi_inv_k[0] = 1; \
+ kg_plain[0] = 0; \
+ \
+ MACRO_init__kg; \
+ \
+ if( ths->nfst_flags & PRE_PHI_HUT) \
+ \
+ for( k_L = 0; k_L < ths->N_total; k_L++) \
+ { \
+ MACRO_update__c_phi_inv_k__lg_plain( which_one, with_PRE_PHI_HUT); \
+ \
+ MACRO_nfst_D_compute_ ## which_one; \
+ \
+ MACRO_count__kg; \
+ \
+ } /* for(k_L) */ \
+ \
+ else \
+ \
+ for( k_L = 0; k_L < ths->N_total; k_L++) \
+ { \
+ MACRO_update__c_phi_inv_k__lg_plain( which_one, compute_PHI_HUT_INV); \
+ \
+ MACRO_nfst_D_compute_ ## which_one; \
+ \
+ MACRO_count__kg \
+ \
+ } /* for(k_L) */ \
+} /* nfst_D */
+
+MACRO_nfst_D(A)
+MACRO_nfst_D(T)
+
+
+
+
+
+
+
+/** sub routines for the fast transforms
+ * matrix vector multiplication with \f$B, B^{\rm T}\f$
+ */
+#define MACRO_nfst_B_PRE_FULL_PSI_compute_A \
+{ \
+ (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]]; \
+}
+
+#define MACRO_nfst_B_PRE_FULL_PSI_compute_T \
+{ \
+ g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj); \
+}
+
+
+
+#define MACRO_nfst_B_compute_A \
+{ \
+ (*fj) += phi_tilde[ths->d] * g[lg_plain[ths->d]]; \
+}
+
+#define MACRO_nfst_B_compute_T \
+{ \
+ g[lg_plain[ths->d]] += phi_tilde[ths->d] * (*fj); \
+}
+
+
+
+#define MACRO_compute_lg_offset__count_lg( i0) \
+{ \
+ /* determine index in g-array corresponding to lb[(i0)] */ \
+ if( lb[(i0)] < 0) \
+ { \
+ lg_offset[(i0)] = \
+ (lb[(i0)] % nfst_fftw_2N( ths->n[(i0)])) + nfst_fftw_2N( ths->n[(i0)]); \
+ } \
+ else \
+ { \
+ lg_offset[(i0)] = lb[(i0)] % nfst_fftw_2N( ths->n[(i0)]); \
+ } \
+ \
+ if( lg_offset[(i0)] > ths->n[(i0)]+1) \
+ lg_offset[(i0)] = -( nfst_fftw_2N( ths->n[(i0)]) - lg_offset[(i0)]); \
+}
+
+
+
+#define MACRO_set__lg__to__lg_offset \
+{ \
+ if( lg_offset[i] <= 0) \
+ { \
+ lg[i] = -lg_offset[i]; \
+ count_lg[i] = -1; \
+ } \
+ else \
+ { \
+ lg[i] = +lg_offset[i]; \
+ count_lg[i] = +1; \
+ } \
+}
+
+
+
+#define MACRO_count__lg(dim) \
+{ \
+ /* turn around when we hit one of the boundaries */ \
+ if( ((lg[(dim)] == 0) || (lg[(dim)] == (ths->n[(dim)] + 1))) ) \
+ count_lg[(dim)] *= -1; \
+ \
+ lg[(dim)] += count_lg[(dim)]; \
+}
+
+
+
+#define MACRO_init_lb_lg_lc_phi_tilde_lg_plain( which_psi) \
+{ \
+ for( i = 0; i < ths->d; i++) \
+ { \
+ MACRO_nfst__lower_boundary( j, i); \
+ \
+ MACRO_compute_lg_offset__count_lg( i); \
+ MACRO_set__lg__to__lg_offset; \
+ \
+ /* counter for lg */ \
+ lc[i] = 0; \
+ } \
+ \
+ for( t = 0; t < ths->d; t++) \
+ { \
+ if( lg[t] == 0) \
+ { \
+ lg_plain[t+1] = lg_plain[t] * ths->n[t]; \
+ phi_tilde[t+1] = 0.0; \
+ } \
+ else \
+ if( lg[t] == ths->n[t]+1) \
+ { \
+ lg_plain[t+1] = lg_plain[t] * ths->n[t] + ths->n[t]-1; \
+ phi_tilde[t+1] = 0.0; \
+ } \
+ else \
+ { \
+ MACRO__phi_tilde( which_psi); \
+ lg_plain[t+1] = lg_plain[t] * ths->n[t] + lg[t]-1; \
+ } \
+ } \
+ \
+ i = 0; \
+}
+
+
+
+#define MACRO_count__lg_lc \
+{ \
+ MACRO_count__lg( ths->d-1); \
+ \
+ lc[ths->d - 1]++; \
+ i = ths->d - 1; \
+ \
+ while( (lc[i] == NFST_SUMMANDS) && (i > 0)) \
+ { \
+ lc[i - 1]++; \
+ lc[i] = 0; \
+ \
+ /* ansonsten lg[i-1] verschieben */ \
+ MACRO_count__lg( i - 1); \
+ /* lg[i] = anfangswert */ \
+ MACRO_set__lg__to__lg_offset; \
+ \
+ i--; \
+ } \
+}
+
+
+#define MACRO_update__phi_tilde__lg_plain( which_psi) \
+{ \
+ for( t = i; t < ths->d; t++) \
+ { \
+ if( (lg[t] != 0) && (lg[t] != ths->n[t]+1)) \
+ { \
+ MACRO__phi_tilde( which_psi); \
+ lg_plain[t+1] = lg_plain[t] * ths->n[t] + lg[t]-1; \
+ } \
+ else \
+ phi_tilde[t+1] = 0.0; \
+ } \
+}
+
+
+
+#define MACRO__phi_tilde( which_psi) \
+{ \
+ phi_tilde[t+1] = (double)count_lg[t] * phi_tilde[t] * MACRO_ ## which_psi; \
+}
+
+
+
+
+#define MACRO_nfst_B( which_one) \
+ static inline void nfst_B_ ## which_one ( nfst_plan *ths) \
+ { /* MACRO_nfst_B */ \
+ int lb[ths->d]; /**< multi band with respect to x_j */ \
+ int j, t, i; /**< index nodes, help vars */ \
+ int lprod, l_L, ix; /**< index one row of B */ \
+ int lc[ths->d]; /**< multi index 0<=lj<u+o+1 */ \
+ int lg[ths->d]; /**< real index of g in array */ \
+ int lg_offset[ths->d]; /**< offset in g according to u */ \
+ int count_lg[ths->d]; /**< count summands (2m+2) */ \
+ int lg_plain[ths->d+1]; /**< index of g in multi_array */ \
+ double *f, *g; /**< local copy */ \
+ double phi_tilde[ths->d+1]; /**< holds values for psi */ \
+ double *fj; /**< pointer to final result */ \
+ \
+ f = ths->f; g = ths->g; \
+ \
+ MACRO_nfst_B_init_result_ ## which_one \
+ \
+ /* both flags are set */ \
+ if( (ths->nfst_flags & PRE_PSI) && (ths->nfst_flags & PRE_FULL_PSI)) \
+ { \
+ for( ix = 0, j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \
+ for( l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++) \
+ { \
+ MACRO_nfst_B_PRE_FULL_PSI_compute_ ## which_one; \
+ } \
+ } \
+ else \
+ { \
+ phi_tilde[0] = 1; \
+ lg_plain[0] = 0; \
+ \
+ for( t = 0, lprod = 1; t < ths->d; t++) \
+ lprod *= NFST_SUMMANDS; \
+ \
+ /* PRE_PSI flag is set */ \
+ if( ths->nfst_flags & PRE_PSI) \
+ { \
+ for( j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \
+ { \
+ MACRO_init_lb_lg_lc_phi_tilde_lg_plain( with_PRE_PSI); \
+ \
+ for( l_L = 0; l_L < lprod; l_L++) \
+ { \
+ MACRO_update__phi_tilde__lg_plain( with_PRE_PSI); \
+ \
+ MACRO_nfst_B_compute_ ## which_one; \
+ \
+ MACRO_count__lg_lc; \
+ \
+ } /* for( l_L) */ \
+ } /* for( j) */ \
+ } /* if( PRE_PSI) */ \
+ \
+ /* no PSI flag is set */ \
+ else \
+ { \
+ for( j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \
+ { \
+ MACRO_init_lb_lg_lc_phi_tilde_lg_plain( compute_PSI); \
+ \
+ for( l_L = 0; l_L < lprod; l_L++) \
+ { \
+ MACRO_update__phi_tilde__lg_plain( compute_PSI); \
+ \
+ MACRO_nfst_B_compute_ ## which_one; \
+ \
+ MACRO_count__lg_lc; \
+ \
+ } /* for(l_L) */ \
+ } /* for(j) */ \
+ } /* else(PRE_PSI) */ \
+ }/* else( PRE_PRE && FULL_PRE_PSI) */ \
+} /* nfst_B */
+
+MACRO_nfst_B(A)
+MACRO_nfst_B(T)
+
+
+
+
+
+
+/**
+ * user routines
+ *
+ */
+void nfst_trafo( nfst_plan *ths)
+{
+ /**
+ * use ths->my_fftw_r2r_plan
+ *
+ */
+ ths->g_hat = ths->g1;
+ ths->g = ths->g2;
+
+
+ /**
+ * form \f$ \hat g_k = \frac{\hat f_k}{c_k\left(\phi\right)} \text{ for }
+ * k \in I_N \f$
+ *
+ */
+ TIC(0)
+ nfst_D_A( ths);
+ TOC(0)
+
+
+ /**
+ * compute by d-variate discrete Fourier transform
+ * \f$ g_l = \sum_{k \in I_N} \hat g_k {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
+ * \text{ for } l \in I_n \f$
+ *
+ */
+ TIC(1)
+ fftw_execute( ths->my_fftw_r2r_plan);
+ TOC(1)
+
+
+ /**
+ * set \f$ f_j = \sum_{l \in I_n,m(x_j)} g_l \psi\left(x_j-\frac{l}{n}\right)
+ * \text{ for } j=0,\hdots,M-1 \f$
+ *
+ */
+ TIC(2)
+ nfst_B_A( ths);
+ TOC(2)
+
+} /* nfst_trafo */
+
+
+
+
+void nfst_adjoint( nfst_plan *ths)
+{
+ /**
+ * use ths->my_fftw_plan
+ *
+ **/
+ ths->g_hat = ths->g2;
+ ths->g = ths->g1;
+
+
+ /**
+ * set \f$ g_l = \sum_{j=0}^{M-1} f_j \psi\left(x_j-\frac{l}{n}\right)
+ * \text{ for } l \in I_n,m(x_j) \f$
+ *
+ */
+ TIC(2)
+ nfst_B_T( ths);
+ TOC(2)
+
+
+ /**
+ * compute by d-variate discrete cosine transform
+ * \f$ \hat g_k = \sum_{l \in I_n} g_l {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
+ * \text{ for } k \in I_N\f$
+ *
+ */
+ TIC(1)
+ fftw_execute( ths->my_fftw_r2r_plan);
+ TOC(1)
+
+
+ /**
+ * form \f$ \hat f_k = \frac{\hat g_k}{c_k\left(\phi\right)} \text{ for }
+ * k \in I_N \f$
+ *
+ */
+ TIC(0)
+ nfst_D_T( ths);
+ TOC(0)
+
+} /* nfst_adjoint */
+
+
+
+/**
+ * initialization of direct transform
+ *
+ */
+void nfst_precompute_phi_hut( nfst_plan *ths)
+{
+ int kg[ths->d]; /**< index over all frequencies */
+ int t; /**< index over all dimensions */
+
+ ths->c_phi_inv = (double**)nfft_malloc( ths->d * sizeof( double*));
+
+ for( t = 0; t < ths->d; t++)
+ {
+ ths->c_phi_inv[t] = (double*)nfft_malloc( ( ths->N[t] - 1) * sizeof( double));
+
+ for( kg[t] = 0; kg[t] < ths->N[t] - 1; kg[t]++)
+ {
+ ths->c_phi_inv[t][kg[t]] = MACRO_compute_PHI_HUT_INV;
+ }
+ }
+} /* nfst_phi_hut */
+
+
+
+void nfst_precompute_psi( nfst_plan *ths)
+{
+ int t; /**< index over all dimensions */
+ int j; /**< index over all nodes */
+ int lc[ths->d]; /**< index 0<=lj<u+o+1 */
+ int lb[ths->d]; /**< depends on x_j */
+
+ for (t = 0; t < ths->d; t++)
+ {
+ for(j = 0; j < ths->M_total; j++)
+ {
+ MACRO_nfst__lower_boundary( j, t);
+
+ for( lc[t] = 0; lc[t] < NFST_SUMMANDS; lc[t]++)
+ ths->psi[(j * ths->d + t) * NFST_SUMMANDS + lc[t]] = MACRO_compute_PSI;
+
+ } /* for(j) */
+ } /* for(t) */
+
+ /* full precomputation of psi */
+ if ( ths->nfst_flags & PRE_FULL_PSI)
+ nfst_full_psi( ths, ths->nfst_full_psi_eps);
+
+} /* nfst_precompute_psi */
+
+
+
+/** more memory usage, a bit faster */
+void nfst_full_psi(nfst_plan *ths, double eps)
+{
+ int t, i; /**< index over all dimensions */
+ int j; /**< index over all nodes */
+ int l_L; /**< plain index 0<=l_L<lprod */
+ int lc[ths->d]; /**< multi index 0<=lj<u+o+1 */
+ int lg_plain[ths->d+1]; /**< postfix plain index */
+ int count_lg[ths->d];
+ int lg_offset[ths->d];
+ int lg[ths->d];
+ int lprod; /**< 'bandwidth' of matrix B */
+ int lb[ths->d]; /**< depends on x_j */
+
+ double phi_tilde[ths->d+1];
+
+ int *index_g, *index_f;
+ double *new_psi;
+ int ix, ix_old, size_psi;
+
+ phi_tilde[0] = 1.0;
+ lg_plain[0] = 0;
+
+ if(ths->nfst_flags & PRE_PSI)
+ {
+ size_psi = ths->M_total;
+ index_f = (int*)nfft_malloc( ths->M_total * sizeof( int));
+ index_g = (int*)nfft_malloc( size_psi * sizeof( int));
+ new_psi = (double*)nfft_malloc( size_psi * sizeof( double));
+
+ for( t = 0,lprod = 1; t < ths->d; t++)
+ {
+ lprod *= NFST_SUMMANDS;
+ eps *= PHI( 0, t);
+ }
+
+ for( ix = 0, ix_old = 0, j = 0; j < ths->M_total; j++)
+ {
+ MACRO_init_lb_lg_lc_phi_tilde_lg_plain( with_PRE_PSI);
+
+ for( l_L = 0; l_L < lprod; l_L++)
+ {
+ MACRO_update__phi_tilde__lg_plain( with_PRE_PSI);
+
+ if( fabs(phi_tilde[ths->d]) > eps)
+ {
+ index_g[ix] = lg_plain[ths->d];
+ new_psi[ix] = phi_tilde[ths->d];
+
+ ix++;
+ if( ix == size_psi)
+ {
+ size_psi += ths->M_total;
+ index_g = (int*)realloc( index_g, size_psi * sizeof( int));
+ new_psi = (double*)realloc( new_psi, size_psi * sizeof( double));
+ }
+ }
+ MACRO_count__lg_lc;
+
+ } /* for(l_L) */
+
+ index_f[j] = ix - ix_old;
+ ix_old = ix;
+
+ } /* for(j) */
+
+ nfft_free( ths->psi);
+
+ size_psi = ix;
+ ths->size_psi = size_psi;
+ index_g = (int*)realloc( index_g, size_psi * sizeof( int));
+ new_psi = (double*)realloc( new_psi, size_psi * sizeof( double));
+
+ ths->psi = new_psi;
+ ths->psi_index_g = index_g;
+ ths->psi_index_f = index_f;
+
+ } /* if(PRE_PSI) */
+} /* nfst_full_psi */
+
+
+
+
+void nfst_init_help( nfst_plan *ths)
+{
+ int t; /**< index over all dimensions */
+
+ ths->N_total = nfst_prod_minus_a_int( ths->N, 1, ths->d);
+
+ ths->sigma = (double*)nfft_malloc( ths->d * sizeof( double));
+
+ for( t = 0; t < ths->d; t++)
+ /* FIXME: n/N or (n+1)/N */
+ ths->sigma[t] = ((double)ths->n[t] + 1) / ths->N[t];
+
+ /* assign r2r transform kinds for each dimension */
+ ths->r2r_kind = (fftw_r2r_kind*) nfft_malloc ( ths->d * sizeof( fftw_r2r_kind));
+ for (t = 0; t < ths->d; t++)
+ ths->r2r_kind[t] = FFTW_RODFT00;
+
+
+ WINDOW_HELP_INIT;
+
+ if(ths->nfst_flags & MALLOC_X)
+ ths->x = (double*)nfft_malloc( ths->d * ths->M_total * sizeof( double));
+
+ if(ths->nfst_flags & MALLOC_F_HAT)
+ ths->f_hat = (double*)nfft_malloc( ths->N_total * sizeof( double));
+
+ if(ths->nfst_flags & MALLOC_F)
+ ths->f = (double*)nfft_malloc( ths->M_total * sizeof( double));
+
+ if(ths->nfst_flags & PRE_PHI_HUT)
+ nfst_precompute_phi_hut( ths);
+
+ /* NO FFTW_MALLOC HERE */
+ if(ths->nfst_flags & PRE_PSI)
+ {
+ ths->psi =
+ (double*)nfft_malloc( ths->M_total * ths->d * NFST_SUMMANDS * sizeof( double));
+
+ /**
+ * set default for full_psi_eps
+ **/
+ ths->nfst_full_psi_eps = pow(10, -10);
+ }
+
+ if(ths->nfst_flags & FFTW_INIT)
+ {
+ ths->g1 =
+ (double*)nfft_malloc( nfst_prod_minus_a_int( ths->n, 0, ths->d) * sizeof( double));
+
+ if(ths->nfst_flags & FFT_OUT_OF_PLACE)
+ ths->g2 =
+ (double*)nfft_malloc( nfst_prod_minus_a_int( ths->n, 0, ths->d) * sizeof( double));
+ else
+ ths->g2 = ths->g1;
+
+ ths->my_fftw_r2r_plan =
+ fftw_plan_r2r( ths->d, ths->n, ths->g1, ths->g2, ths->r2r_kind, ths->fftw_flags);
+ }
+
+ ths->mv_trafo = (void (*) (void* ))nfst_trafo;
+ ths->mv_adjoint = (void (*) (void* ))nfst_adjoint;
+}
+
+void nfst_init( nfst_plan *ths, int d, int *N, int M_total)
+{
+ int t; /**< index over all dimensions */
+
+ ths->d = d;
+
+ ths->N = (int*)nfft_malloc( ths->d * sizeof( int));
+
+ for(t = 0;t < d; t++)
+ ths->N[t] = N[t];
+
+ ths->n = (int*)nfft_malloc( ths->d * sizeof( int));
+
+ for( t = 0; t < d; t++)
+ ths->n[t] = 2 * X(next_power_of_2)( ths->N[t]) - 1;
+
+ ths->M_total = M_total;
+
+/* Was soll dieser Ausdruck machen? Es handelt sich um eine Ganzzahl!
+
+ WINDOW_HELP_ESTIMATE_m;
+*/
+
+ ths->nfst_flags = NFST_DEFAULT_FLAGS;
+ ths->fftw_flags = FFTW_DEFAULT_FLAGS;
+
+ nfst_init_help( ths);
+}
+
+
+void nfst_init_m( nfst_plan *ths, int d, int *N, int M_total, int m)
+{
+ int t, n[d];
+
+ for( t = 0; t < d; t++)
+ n[t] = nfst_fftw_2N( X(next_power_of_2)( N[t]));
+
+ nfst_init_guru( ths, d, N, M_total, n, m, NFST_DEFAULT_FLAGS, FFTW_DEFAULT_FLAGS);
+}
+
+
+void nfst_init_guru( nfst_plan *ths, int d, int *N,
+ int M_total, int *n, int m,
+ unsigned nfst_flags, unsigned fftw_flags)
+{
+ int t; /**< index over all dimensions */
+
+ ths->d = d;
+ ths->M_total = M_total;
+
+ ths->N = (int*)nfft_malloc( ths->d * sizeof( int));
+
+ for( t = 0; t < d; t++)
+ ths->N[t] = N[t];
+
+ ths->n = (int*)nfft_malloc( ths->d * sizeof( int));
+
+ for( t = 0; t < d; t++)
+ ths->n[t] = n[t];
+
+ ths->m = m;
+
+ ths->nfst_flags = nfst_flags;
+ ths->fftw_flags = fftw_flags;
+
+ nfst_init_help( ths);
+}
+
+
+void nfst_init_1d( nfst_plan *ths, int N0, int M_total)
+{
+ int N[1];
+
+ N[0] = N0;
+ nfst_init( ths, 1, N, M_total);
+}
+
+void nfst_init_2d( nfst_plan *ths, int N0, int N1, int M_total)
+{
+ int N[2];
+
+ N[0] = N0;
+ N[1] = N1;
+ nfst_init( ths, 2, N, M_total);
+}
+
+void nfst_init_3d( nfst_plan *ths, int N0, int N1, int N2, int M_total)
+{
+ int N[3];
+
+ N[0] = N0;
+ N[1] = N1;
+ N[2] = N2;
+ nfst_init( ths, 3, N, M_total);
+}
+
+void nfst_finalize( nfst_plan *ths)
+{
+ int t; /* index over dimensions */
+
+ if( ths->nfst_flags & FFTW_INIT)
+ {
+ fftw_destroy_plan( ths->my_fftw_r2r_plan);
+
+ if( ths->nfst_flags & FFT_OUT_OF_PLACE)
+ nfft_free( ths->g2);
+
+ nfft_free( ths->g1);
+ }
+
+ /* NO FFTW_FREE HERE */
+ if( ths->nfst_flags & PRE_PSI)
+ {
+ if( ths->nfst_flags & PRE_FULL_PSI)
+ {
+ nfft_free( ths->psi_index_g);
+ nfft_free( ths->psi_index_f);
+ }
+
+ nfft_free( ths->psi);
+ }
+
+ if( ths->nfst_flags & PRE_PHI_HUT) {
+ for( t = 0; t < ths->d; t++)
+ nfft_free( ths->c_phi_inv[t]);
+ nfft_free( ths->c_phi_inv);
+ }
+
+ if( ths->nfst_flags & MALLOC_F)
+ nfft_free( ths->f);
+
+ if( ths->nfst_flags & MALLOC_F_HAT)
+ nfft_free( ths->f_hat);
+
+ if( ths->nfst_flags & MALLOC_X)
+ nfft_free( ths->x);
+
+ WINDOW_HELP_FINALIZE;
+
+ nfft_free( ths->N);
+ nfft_free( ths->n);
+ nfft_free( ths->sigma);
+
+ nfft_free(ths->r2r_kind);
+} /* nfst_finalize */
+
diff --git a/kernel/nnfft/Makefile.am b/kernel/nnfft/Makefile.am
new file mode 100644
index 0000000..56d283a
--- /dev/null
+++ b/kernel/nnfft/Makefile.am
@@ -0,0 +1,6 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_LTLIBRARIES = libnnfft.la
+
+libnnfft_la_SOURCES = nnfft.c
+
diff --git a/kernel/nnfft/Makefile.in b/kernel/nnfft/Makefile.in
new file mode 100644
index 0000000..9a2e023
--- /dev/null
+++ b/kernel/nnfft/Makefile.in
@@ -0,0 +1,553 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/nnfft
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libnnfft_la_LIBADD =
+am_libnnfft_la_OBJECTS = nnfft.lo
+libnnfft_la_OBJECTS = $(am_libnnfft_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libnnfft_la_SOURCES)
+DIST_SOURCES = $(libnnfft_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+noinst_LTLIBRARIES = libnnfft.la
+libnnfft_la_SOURCES = nnfft.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nnfft/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu kernel/nnfft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libnnfft.la: $(libnnfft_la_OBJECTS) $(libnnfft_la_DEPENDENCIES) $(EXTRA_libnnfft_la_DEPENDENCIES)
+ $(LINK) $(libnnfft_la_OBJECTS) $(libnnfft_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nnfft.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/nnfft/nnfft.c b/kernel/nnfft/nnfft.c
new file mode 100644
index 0000000..274307f
--- /dev/null
+++ b/kernel/nnfft/nnfft.c
@@ -0,0 +1,673 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nnfft.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+
+#define MACRO_nndft_init_result_trafo memset(f,0,ths->M_total*sizeof(double _Complex));
+#define MACRO_nndft_init_result_conjugated MACRO_nndft_init_result_trafo
+#define MACRO_nndft_init_result_adjoint memset(f_hat,0,ths->N_total*sizeof(double _Complex));
+#define MACRO_nndft_init_result_transposed MACRO_nndft_init_result_adjoint
+
+#define MACRO_nndft_sign_trafo (-2.0*PI)
+#define MACRO_nndft_sign_conjugated (+2.0*PI)
+#define MACRO_nndft_sign_adjoint (+2.0*PI)
+#define MACRO_nndft_sign_transposed (-2.0*PI)
+
+#define MACRO_nndft_compute_trafo (*fj) += (*f_hat_k)*cexp(+ _Complex_I*omega);
+
+#define MACRO_nndft_compute_conjugated MACRO_nndft_compute_trafo
+
+#define MACRO_nndft_compute_adjoint (*f_hat_k) += (*fj)*cexp(+ _Complex_I*omega);
+
+#define MACRO_nndft_compute_transposed MACRO_nndft_compute_adjoint
+
+#define MACRO_nndft(which_one) \
+void nnfft_ ## which_one ## _direct (nnfft_plan *ths) \
+{ \
+ int j; /**< index over all nodes (time) */\
+ int t; /**< index for dimensions */\
+ int l; /**< index over all nodes (fourier) */\
+ double _Complex *f_hat, *f; /**< dito */\
+ double _Complex *f_hat_k; /**< actual Fourier coefficient */\
+ double _Complex *fj; /**< actual sample */\
+ double omega; /**< sign times 2*pi*k*x */\
+ \
+ f_hat=ths->f_hat; f=ths->f; \
+ \
+ MACRO_nndft_init_result_ ## which_one \
+ \
+ for(j=0, fj=f; j<ths->M_total; j++, fj++) \
+ { \
+ for(l=0, f_hat_k=f_hat; l<ths->N_total; l++, f_hat_k++) \
+ { \
+ omega=0.0; \
+ for(t = 0; t<ths->d; t++) \
+ omega+=ths->v[l*ths->d+t] * ths->x[j*ths->d+t] * ths->N[t]; \
+ \
+ omega*= MACRO_nndft_sign_ ## which_one; \
+ \
+ MACRO_nndft_compute_ ## which_one \
+ \
+ } /* for(l) */ \
+ } /* for(j) */ \
+} /* nndft_trafo */ \
+
+MACRO_nndft(trafo)
+MACRO_nndft(adjoint)
+
+/** computes 2m+2 indices for the matrix B
+ */
+static void nnfft_uo(nnfft_plan *ths,int j,int *up,int *op,int act_dim)
+{
+ double c;
+ int u,o;
+
+ c = ths->v[j*ths->d+act_dim] * ths->n[act_dim];
+
+ u = c; o = c;
+ if(c < 0)
+ u = u-1;
+ else
+ o = o+1;
+
+ u = u - (ths->m); o = o + (ths->m);
+
+ up[0]=u; op[0]=o;
+}
+
+/** sub routines for the fast transforms
+ * matrix vector multiplication with \f$B, B^{\rm T}\f$
+ */
+#define MACRO_nnfft_B_init_result_A memset(f,0,ths->N_total*sizeof(double _Complex));
+#define MACRO_nnfft_B_init_result_T memset(g,0,ths->aN1_total*sizeof(double _Complex));
+
+#define MACRO_nnfft_B_PRE_FULL_PSI_compute_A { \
+ (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]]; \
+}
+
+#define MACRO_nnfft_B_PRE_FULL_PSI_compute_T { \
+ g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj); \
+}
+
+#define MACRO_nnfft_B_compute_A { \
+ (*fj) += phi_prod[ths->d] * g[ll_plain[ths->d]]; \
+}
+
+#define MACRO_nnfft_B_compute_T { \
+ g[ll_plain[ths->d]] += phi_prod[ths->d] * (*fj); \
+}
+
+#define MACRO_with_PRE_LIN_PSI (ths->psi[(ths->K+1)*t2+y_u[t2]]* \
+ (y_u[t2]+1-y[t2]) + \
+ ths->psi[(ths->K+1)*t2+y_u[t2]+1]* \
+ (y[t2]-y_u[t2]))
+#define MACRO_with_PRE_PSI ths->psi[(j*ths->d+t2)*(2*ths->m+2)+lj[t2]]
+#define MACRO_without_PRE_PSI PHI(-ths->v[j*ths->d+t2]+ \
+ ((double)l[t2])/ths->N1[t2], t2)
+
+#define MACRO_init_uo_l_lj_t { \
+ for(t = ths->d-1; t>=0; t--) \
+ { \
+ nnfft_uo(ths,j,&u[t],&o[t],t); \
+ l[t] = u[t]; \
+ lj[t] = 0; \
+ } /* for(t) */ \
+ t++; \
+}
+
+#define MACRO_update_with_PRE_PSI_LIN { \
+ for(t2=t; t2<ths->d; t2++) \
+ { \
+ y[t2] = fabs(((-ths->N1[t2]*ths->v[j*ths->d+t2]+(double)l[t2]) \
+ * ((double)ths->K))/(ths->m+1)); \
+ y_u[t2] = (int)y[t2]; \
+ } /* for(t2) */ \
+}
+
+#define MACRO_update_phi_prod_ll_plain(which_one) { \
+ for(t2=t; t2<ths->d; t2++) \
+ { \
+ phi_prod[t2+1]=phi_prod[t2]* MACRO_ ## which_one; \
+ ll_plain[t2+1]=ll_plain[t2]*ths->aN1[t2] + \
+ (l[t2]+ths->aN1[t2]*3/2)%ths->aN1[t2]; \
+ /* 3/2 because of the (not needed) fftshift and to be in [0 aN1[t2]]?!*/\
+ } /* for(t2) */ \
+}
+
+#define MACRO_count_uo_l_lj_t { \
+ for(t = ths->d-1; (t>0)&&(l[t]==o[t]); t--) \
+ { \
+ l[t] = u[t]; \
+ lj[t] = 0; \
+ } /* for(t) */ \
+ \
+ l[t]++; \
+ lj[t]++; \
+}
+
+#define MACRO_nnfft_B(which_one) \
+static inline void nnfft_B_ ## which_one (nnfft_plan *ths) \
+{ \
+ int lprod; /**< 'regular bandwidth' of matrix B */\
+ int u[ths->d], o[ths->d]; /**< multi band with respect to x_j */\
+ int t, t2; /**< index dimensions */\
+ int j; /**< index nodes */\
+ int l_L, ix; /**< index one row of B */\
+ int l[ths->d]; /**< multi index u<=l<=o */\
+ int lj[ths->d]; /**< multi index 0<=lj<u+o+1 */\
+ int ll_plain[ths->d+1]; /**< postfix plain index in g */\
+ double phi_prod[ths->d+1]; /**< postfix product of PHI */\
+ double _Complex *f, *g; /**< local copy */\
+ double _Complex *fj; /**< local copy */\
+ double y[ths->d]; \
+ int y_u[ths->d]; \
+ \
+ f=ths->f_hat; g=ths->F; \
+ \
+ MACRO_nnfft_B_init_result_ ## which_one \
+ \
+ if(ths->nnfft_flags & PRE_FULL_PSI) \
+ { \
+ for(ix=0, j=0, fj=f; j<ths->N_total; j++,fj++) \
+ for(l_L=0; l_L<ths->psi_index_f[j]; l_L++, ix++) \
+ MACRO_nnfft_B_PRE_FULL_PSI_compute_ ## which_one; \
+ return; \
+ } \
+ \
+ phi_prod[0]=1; \
+ ll_plain[0]=0; \
+ \
+ for(t=0,lprod = 1; t<ths->d; t++) \
+ lprod *= (2*ths->m+2); \
+ \
+ if(ths->nnfft_flags & PRE_PSI) \
+ { \
+ for(j=0, fj=f; j<ths->N_total; j++, fj++) \
+ { \
+ MACRO_init_uo_l_lj_t; \
+ \
+ for(l_L=0; l_L<lprod; l_L++) \
+ { \
+ MACRO_update_phi_prod_ll_plain(with_PRE_PSI); \
+ \
+ MACRO_nnfft_B_compute_ ## which_one; \
+ \
+ MACRO_count_uo_l_lj_t; \
+ } /* for(l_L) */ \
+ } /* for(j) */ \
+ return; \
+ } /* if(PRE_PSI) */ \
+ \
+ if(ths->nnfft_flags & PRE_LIN_PSI) \
+ { \
+ for(j=0, fj=f; j<ths->N_total; j++, fj++) \
+ { \
+ MACRO_init_uo_l_lj_t; \
+ \
+ for(l_L=0; l_L<lprod; l_L++) \
+ { \
+ MACRO_update_with_PRE_PSI_LIN; \
+ \
+ MACRO_update_phi_prod_ll_plain(with_PRE_LIN_PSI); \
+ \
+ MACRO_nnfft_B_compute_ ## which_one; \
+ \
+ MACRO_count_uo_l_lj_t; \
+ } /* for(l_L) */ \
+ } /* for(j) */ \
+ return; \
+ } /* if(PRE_LIN_PSI) */ \
+ \
+ /* no precomputed psi at all */ \
+ for(j=0, fj=f; j<ths->N_total; j++, fj++) \
+ { \
+ \
+ MACRO_init_uo_l_lj_t; \
+ \
+ for(l_L=0; l_L<lprod; l_L++) \
+ { \
+ MACRO_update_phi_prod_ll_plain(without_PRE_PSI); \
+ \
+ MACRO_nnfft_B_compute_ ## which_one; \
+ \
+ MACRO_count_uo_l_lj_t; \
+ } /* for(l_L) */ \
+ } /* for(j) */ \
+} /* nnfft_B */
+
+MACRO_nnfft_B(A)
+MACRO_nnfft_B(T)
+
+static inline void nnfft_D (nnfft_plan *ths){
+ int j,t;
+ double tmp;
+
+ if(ths->nnfft_flags & PRE_PHI_HUT)
+ {
+ for(j=0; j<ths->M_total; j++)
+ ths->f[j] *= ths->c_phi_inv[j];
+ }
+ else
+ {
+ for(j=0; j<ths->M_total; j++)
+ {
+ tmp = 1.0;
+ /* multiply with N1, because x was modified */
+ for(t=0; t<ths->d; t++)
+ tmp*= 1.0 /((PHI_HUT(ths->x[ths->d*j + t]*((double)ths->N[t]),t)) );
+ ths->f[j] *= tmp;
+ }
+ }
+}
+
+/** user routines
+ */
+void nnfft_trafo(nnfft_plan *ths)
+{
+ int j,t;
+
+ nnfft_B_T(ths);
+
+ for(j=0;j<ths->M_total;j++) {
+ for(t=0;t<ths->d;t++) {
+ ths->x[j*ths->d+t]= ths->x[j*ths->d+t] / ((double)ths->sigma[t]);
+ }
+ }
+
+ /* allows for external swaps of ths->f */
+ ths->direct_plan->f = ths->f;
+
+ nfft_trafo(ths->direct_plan);
+
+ for(j=0;j<ths->M_total;j++) {
+ for(t=0;t<ths->d;t++) {
+ ths->x[j*ths->d+t]= ths->x[j*ths->d+t] * ((double)ths->sigma[t]);
+ }
+ }
+
+ nnfft_D(ths);
+} /* nnfft_trafo */
+
+void nnfft_adjoint(nnfft_plan *ths)
+{
+ int j,t;
+
+ nnfft_D(ths);
+
+ for(j=0;j<ths->M_total;j++) {
+ for(t=0;t<ths->d;t++) {
+ ths->x[j*ths->d+t]= ths->x[j*ths->d+t] / ((double)ths->sigma[t]);
+ }
+ }
+
+ /* allows for external swaps of ths->f */
+ ths->direct_plan->f=ths->f;
+
+ nfft_adjoint(ths->direct_plan);
+
+ for(j=0;j<ths->M_total;j++) {
+ for(t=0;t<ths->d;t++) {
+ ths->x[j*ths->d+t]= ths->x[j*ths->d+t] * ((double)ths->sigma[t]);
+ }
+ }
+
+ nnfft_B_A(ths);
+} /* nnfft_adjoint */
+
+/** initialisation of direct transform
+ */
+void nnfft_precompute_phi_hut(nnfft_plan *ths)
+{
+ int j; /**< index over all frequencies */
+ int t; /**< index over all dimensions */
+ double tmp;
+
+ ths->c_phi_inv= (double*)nfft_malloc(ths->M_total*sizeof(double));
+
+ for(j=0; j<ths->M_total; j++)
+ {
+ tmp = 1.0;
+ for(t=0; t<ths->d; t++)
+ tmp*= 1.0 /(PHI_HUT(ths->x[ths->d*j + t]*((double)ths->N[t]),t));
+ ths->c_phi_inv[j]=tmp;
+ }
+} /* nnfft_phi_hut */
+
+
+/** create a lookup table
+ */
+void nnfft_precompute_lin_psi(nnfft_plan *ths)
+{
+ int t; /**< index over all dimensions */
+ int j; /**< index over all nodes */
+ double step; /**< step size in [0,(m+1)/n] */
+
+ nfft_precompute_lin_psi(ths->direct_plan);
+
+ for (t=0; t<ths->d; t++)
+ {
+ step=((double)(ths->m+1))/(ths->K*ths->N1[t]);
+ for(j=0;j<=ths->K;j++)
+ {
+ ths->psi[(ths->K+1)*t + j] = PHI(j*step,t);
+ } /* for(j) */
+ } /* for(t) */
+}
+
+void nnfft_precompute_psi(nnfft_plan *ths)
+{
+ int t; /**< index over all dimensions */
+ int j; /**< index over all nodes */
+ int l; /**< index u<=l<=o */
+ int lj; /**< index 0<=lj<u+o+1 */
+ int u, o; /**< depends on v_j */
+
+ for (t=0; t<ths->d; t++)
+ for(j=0;j<ths->N_total;j++)
+ {
+ nnfft_uo(ths,j,&u,&o,t);
+
+ for(l=u, lj=0; l <= o; l++, lj++)
+ ths->psi[(j*ths->d+t)*(2*ths->m+2)+lj]=
+ (PHI((-ths->v[j*ths->d+t]+((double)l)/((double)ths->N1[t])),t));
+ } /* for(j) */
+
+ for(j=0;j<ths->M_total;j++) {
+ for(t=0;t<ths->d;t++) {
+ ths->x[j*ths->d+t]= ths->x[j*ths->d+t] / ((double)ths->sigma[t]);
+ }
+ }
+
+ nfft_precompute_psi(ths->direct_plan);
+
+ for(j=0;j<ths->M_total;j++) {
+ for(t=0;t<ths->d;t++) {
+ ths->x[j*ths->d+t]= ths->x[j*ths->d+t] * ((double)ths->sigma[t]);
+ }
+ }
+ /* for(t) */
+} /* nfft_precompute_psi */
+
+
+
+/**
+ * computes all entries of B explicitly
+ */
+void nnfft_precompute_full_psi(nnfft_plan *ths)
+{
+ int t,t2; /**< index over all dimensions */
+ int j; /**< index over all nodes */
+ int l_L; /**< plain index 0<=l_L<lprod */
+ int l[ths->d]; /**< multi index u<=l<=o */
+ int lj[ths->d]; /**< multi index 0<=lj<u+o+1 */
+ int ll_plain[ths->d+1]; /**< postfix plain index */
+ int lprod; /**< 'bandwidth' of matrix B */
+ int u[ths->d], o[ths->d]; /**< depends on x_j */
+
+ double phi_prod[ths->d+1];
+
+ int ix,ix_old;
+
+ for(j=0;j<ths->M_total;j++) {
+ for(t=0;t<ths->d;t++) {
+ ths->x[j*ths->d+t]= ths->x[j*ths->d+t] / ((double)ths->sigma[t]);
+ }
+ }
+
+ nnfft_precompute_psi(ths);
+
+ nfft_precompute_full_psi(ths->direct_plan);
+
+ for(j=0;j<ths->M_total;j++) {
+ for(t=0;t<ths->d;t++) {
+ ths->x[j*ths->d+t]= ths->x[j*ths->d+t] * ((double)ths->sigma[t]);
+ }
+ }
+
+ phi_prod[0]=1;
+ ll_plain[0]=0;
+
+ for(t=0,lprod = 1; t<ths->d; t++)
+ lprod *= 2*ths->m+2;
+
+ for(j=0,ix=0,ix_old=0; j<ths->N_total; j++)
+ {
+ MACRO_init_uo_l_lj_t;
+
+ for(l_L=0; l_L<lprod; l_L++, ix++)
+ {
+ MACRO_update_phi_prod_ll_plain(without_PRE_PSI);
+
+ ths->psi_index_g[ix]=ll_plain[ths->d];
+ ths->psi[ix]=phi_prod[ths->d];
+
+ MACRO_count_uo_l_lj_t;
+ } /* for(l_L) */
+
+
+ ths->psi_index_f[j]=ix-ix_old;
+ ix_old=ix;
+ } /* for(j) */
+}
+
+static void nnfft_init_help(nnfft_plan *ths, int m2, unsigned nfft_flags, unsigned fftw_flags)
+{
+ int t; /**< index over all dimensions */
+ int lprod; /**< 'bandwidth' of matrix B */
+ int N2[ths->d];
+
+ ths->aN1 = (int*) nfft_malloc(ths->d*sizeof(int));
+
+ ths->a = (double*) nfft_malloc(ths->d*sizeof(double));
+
+ ths->sigma = (double*) nfft_malloc(ths->d*sizeof(double));
+
+ ths->n = ths->N1;
+
+ ths->aN1_total=1;
+
+ for(t = 0; t<ths->d; t++) {
+ ths->a[t] = 1.0 + (2.0*((double)ths->m))/((double)ths->N1[t]);
+ ths->aN1[t] = ths->a[t] * ((double)ths->N1[t]);
+ /* aN1 should be even */
+ if(ths->aN1[t]%2 != 0)
+ ths->aN1[t] = ths->aN1[t] +1;
+
+ ths->aN1_total*=ths->aN1[t];
+ ths->sigma[t] = ((double) ths->N1[t] )/((double) ths->N[t]);;
+
+ /* take the same oversampling factor in the inner NFFT */
+ N2[t] = ceil(ths->sigma[t]*(ths->aN1[t]));
+
+ /* N2 should be even */
+ if(N2[t]%2 != 0)
+ N2[t] = N2[t] +1;
+ }
+
+ WINDOW_HELP_INIT
+
+ if(ths->nnfft_flags & MALLOC_X)
+ ths->x = (double*)nfft_malloc(ths->d*ths->M_total*sizeof(double));
+ if(ths->nnfft_flags & MALLOC_F)
+ ths->f=(double _Complex*)nfft_malloc(ths->M_total*sizeof(double _Complex));
+
+ if(ths->nnfft_flags & MALLOC_V)
+ ths->v = (double*)nfft_malloc(ths->d*ths->N_total*sizeof(double));
+ if(ths->nnfft_flags & MALLOC_F_HAT)
+ ths->f_hat = (double _Complex*)nfft_malloc(ths->N_total*sizeof(double _Complex));
+
+ if(ths->nnfft_flags & PRE_LIN_PSI)
+ {
+ ths->K=(1U<< 10)*(ths->m+1);
+ ths->psi = (double*) nfft_malloc((ths->K+1)*ths->d*sizeof(double));
+ }
+
+ if(ths->nnfft_flags & PRE_PSI)
+ ths->psi = (double*)nfft_malloc(ths->N_total*ths->d*(2*ths->m+2)*sizeof(double));
+
+ if(ths->nnfft_flags & PRE_FULL_PSI)
+ {
+ for(t=0,lprod = 1; t<ths->d; t++)
+ lprod *= 2*ths->m+2;
+
+ ths->psi = (double*)nfft_malloc(ths->N_total*lprod*sizeof(double));
+
+ ths->psi_index_f = (int*) nfft_malloc(ths->N_total*sizeof(int));
+ ths->psi_index_g = (int*) nfft_malloc(ths->N_total*lprod*sizeof(int));
+ }
+
+ ths->direct_plan = (nfft_plan*)nfft_malloc(sizeof(nfft_plan));
+
+ nfft_init_guru(ths->direct_plan, ths->d, ths->aN1, ths->M_total, N2, m2,
+ nfft_flags, fftw_flags);
+
+ ths->direct_plan->x = ths->x;
+ ths->direct_plan->f = ths->f;
+ ths->F = ths->direct_plan->f_hat;
+
+ ths->mv_trafo = (void (*) (void* ))nnfft_trafo;
+ ths->mv_adjoint = (void (*) (void* ))nnfft_adjoint;
+}
+
+void nnfft_init_guru(nnfft_plan *ths, int d, int N_total, int M_total, int *N, int *N1,
+ int m, unsigned nnfft_flags)
+{
+ int t; /**< index over all dimensions */
+
+ unsigned nfft_flags;
+ unsigned fftw_flags;
+
+ ths->d= d;
+ ths->M_total= M_total;
+ ths->N_total= N_total;
+ ths->m= m;
+ ths->nnfft_flags= nnfft_flags;
+ fftw_flags= FFTW_ESTIMATE| FFTW_DESTROY_INPUT;
+ nfft_flags= PRE_PHI_HUT| MALLOC_F_HAT| FFTW_INIT| FFT_OUT_OF_PLACE;
+
+ if(ths->nnfft_flags & PRE_PSI)
+ nfft_flags = nfft_flags | PRE_PSI;
+
+ if(ths->nnfft_flags & PRE_FULL_PSI)
+ nfft_flags = nfft_flags | PRE_FULL_PSI;
+
+ if(ths->nnfft_flags & PRE_LIN_PSI)
+ nfft_flags = nfft_flags | PRE_LIN_PSI;
+
+ ths->N = (int*) nfft_malloc(ths->d*sizeof(int));
+ ths->N1 = (int*) nfft_malloc(ths->d*sizeof(int));
+
+ for(t=0; t<d; t++) {
+ ths->N[t] = N[t];
+ ths->N1[t] = N1[t];
+ }
+ nnfft_init_help(ths,m,nfft_flags,fftw_flags);
+}
+
+void nnfft_init(nnfft_plan *ths, int d, int N_total, int M_total, int *N)
+{
+ int t; /**< index over all dimensions */
+
+ unsigned nfft_flags;
+ unsigned fftw_flags;
+
+ ths->d = d;
+ ths->M_total = M_total;
+ ths->N_total = N_total;
+
+ /* m should be greater to get the same accuracy as the nfft */
+/* Was soll dieser Ausdruck machen? Es handelt sich um eine Ganzzahl!
+
+ WINDOW_HELP_ESTIMATE_m;
+*/
+
+ ths->N = (int*) nfft_malloc(ths->d*sizeof(int));
+ ths->N1 = (int*) nfft_malloc(ths->d*sizeof(int));
+
+ for(t=0; t<d; t++) {
+ ths->N[t] = N[t];
+
+ /* the standard oversampling factor in the nnfft is 1.5 */
+ ths->N1[t] = ceil(1.5*ths->N[t]);
+
+ /* N1 should be even */
+ if(ths->N1[t]%2 != 0)
+ ths->N1[t] = ths->N1[t] +1;
+ }
+
+ ths->nnfft_flags=PRE_PSI| PRE_PHI_HUT| MALLOC_X| MALLOC_V| MALLOC_F_HAT| MALLOC_F;
+ nfft_flags= PRE_PSI| PRE_PHI_HUT| MALLOC_F_HAT| FFTW_INIT| FFT_OUT_OF_PLACE;
+
+ fftw_flags= FFTW_ESTIMATE| FFTW_DESTROY_INPUT;
+
+ nnfft_init_help(ths,ths->m,nfft_flags,fftw_flags);
+}
+
+void nnfft_finalize(nnfft_plan *ths)
+{
+
+ nfft_finalize(ths->direct_plan);
+
+ nfft_free(ths->direct_plan);
+
+ nfft_free(ths->aN1);
+ nfft_free(ths->N);
+ nfft_free(ths->N1);
+
+ if(ths->nnfft_flags & PRE_FULL_PSI)
+ {
+ nfft_free(ths->psi_index_g);
+ nfft_free(ths->psi_index_f);
+ nfft_free(ths->psi);
+ }
+
+ if(ths->nnfft_flags & PRE_PSI)
+ nfft_free(ths->psi);
+
+ if(ths->nnfft_flags & PRE_LIN_PSI)
+ nfft_free(ths->psi);
+
+ if(ths->nnfft_flags & PRE_PHI_HUT)
+ nfft_free(ths->c_phi_inv);
+
+ if(ths->nnfft_flags & MALLOC_F)
+ nfft_free(ths->f);
+
+ if(ths->nnfft_flags & MALLOC_F_HAT)
+ nfft_free(ths->f_hat);
+
+ if(ths->nnfft_flags & MALLOC_X)
+ nfft_free(ths->x);
+
+ if(ths->nnfft_flags & MALLOC_V)
+ nfft_free(ths->v);
+}
diff --git a/kernel/nsfft/Makefile.am b/kernel/nsfft/Makefile.am
new file mode 100644
index 0000000..5fd5d7c
--- /dev/null
+++ b/kernel/nsfft/Makefile.am
@@ -0,0 +1,6 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_LTLIBRARIES = libnsfft.la
+
+libnsfft_la_SOURCES = nsfft.c
+
diff --git a/kernel/nsfft/Makefile.in b/kernel/nsfft/Makefile.in
new file mode 100644
index 0000000..2faa983
--- /dev/null
+++ b/kernel/nsfft/Makefile.in
@@ -0,0 +1,553 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/nsfft
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libnsfft_la_LIBADD =
+am_libnsfft_la_OBJECTS = nsfft.lo
+libnsfft_la_OBJECTS = $(am_libnsfft_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libnsfft_la_SOURCES)
+DIST_SOURCES = $(libnsfft_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+noinst_LTLIBRARIES = libnsfft.la
+libnsfft_la_SOURCES = nsfft.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nsfft/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu kernel/nsfft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libnsfft.la: $(libnsfft_la_OBJECTS) $(libnsfft_la_DEPENDENCIES) $(EXTRA_libnsfft_la_DEPENDENCIES)
+ $(LINK) $(libnsfft_la_OBJECTS) $(libnsfft_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nsfft.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/nsfft/nsfft.c b/kernel/nsfft/nsfft.c
new file mode 100644
index 0000000..37fb337
--- /dev/null
+++ b/kernel/nsfft/nsfft.c
@@ -0,0 +1,1894 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nsfft.c 3896 2012-10-10 12:19:26Z tovo $ */
+#include "config.h"
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+
+#define NSFTT_DISABLE_TEST
+
+/* computes a 2d ndft by 1d nfft along the dimension 1 times
+ 1d ndft along dimension 0
+*/
+static void short_nfft_trafo_2d(nfft_plan* ths, nfft_plan* plan_1d)
+{
+ int j,k0;
+ double omega;
+
+ for(j=0;j<ths->M_total;j++)
+ {
+ ths->f[j]= 0;
+ plan_1d->x[j] = ths->x[ths->d * j + 1];
+ }
+
+ for(k0=0;k0<ths->N[0];k0++) /* for shorties */
+ {
+ plan_1d->f_hat = ths->f_hat + k0*ths->N[1];
+
+ nfft_trafo(plan_1d);
+
+ for(j=0;j<ths->M_total;j++)
+ {
+ omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0];
+ ths->f[j] += plan_1d->f[j] * cexp( - I*2*PI*omega);
+ }
+ }
+}
+
+static void short_nfft_adjoint_2d(nfft_plan* ths, nfft_plan* plan_1d)
+{
+ int j,k0;
+ double omega;
+
+ for(j=0;j<ths->M_total;j++)
+ plan_1d->x[j] = ths->x[ths->d * j + 1];
+
+ for(k0=0;k0<ths->N[0];k0++) /* for shorties */
+ {
+ for(j=0;j<ths->M_total;j++)
+ {
+ omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0];
+ plan_1d->f[j] = ths->f[j] * cexp( + _Complex_I*2*PI*omega);
+ }
+
+ plan_1d->f_hat = ths->f_hat + k0*ths->N[1];
+
+ nfft_adjoint(plan_1d);
+ }
+}
+
+/* computes a 3d ndft by 1d nfft along the dimension 2 times
+ 2d ndft along dimension 0,1
+*/
+static void short_nfft_trafo_3d_1(nfft_plan* ths, nfft_plan* plan_1d)
+{
+ int j,k0,k1;
+ double omega;
+
+ for(j=0;j<ths->M_total;j++)
+ {
+ ths->f[j] = 0;
+ plan_1d->x[j] = ths->x[ths->d * j + 2];
+ }
+
+ for(k0=0;k0<ths->N[0];k0++) /* for shorties */
+ for(k1=0;k1<ths->N[1];k1++)
+ {
+ plan_1d->f_hat = ths->f_hat + (k0*ths->N[1]+k1)*ths->N[2];
+
+ nfft_trafo(plan_1d);
+
+ for(j=0;j<ths->M_total;j++)
+ {
+ omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0]
+ + ((double)(k1 - ths->N[1]/2)) * ths->x[ths->d * j + 1];
+ ths->f[j] += plan_1d->f[j] * cexp( - I*2*PI*omega);
+ }
+ }
+}
+
+static void short_nfft_adjoint_3d_1(nfft_plan* ths, nfft_plan* plan_1d)
+{
+ int j,k0,k1;
+ double omega;
+
+ for(j=0;j<ths->M_total;j++)
+ plan_1d->x[j] = ths->x[ths->d * j + 2];
+
+ for(k0=0;k0<ths->N[0];k0++) /* for shorties */
+ for(k1=0;k1<ths->N[1];k1++)
+ {
+ for(j=0;j<ths->M_total;j++)
+ {
+ omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0]
+ + ((double)(k1 - ths->N[1]/2)) * ths->x[ths->d * j + 1];
+ plan_1d->f[j] = ths->f[j] * cexp( + _Complex_I*2*PI*omega);
+ }
+
+ plan_1d->f_hat = ths->f_hat + (k0*ths->N[1]+k1)*ths->N[2];
+
+ nfft_adjoint(plan_1d);
+ }
+}
+
+/* computes a 3d ndft by 2d nfft along the dimension 1,2 times
+ 1d ndft along dimension 0
+*/
+static void short_nfft_trafo_3d_2(nfft_plan* ths, nfft_plan* plan_2d)
+{
+ int j,k0;
+ double omega;
+
+ for(j=0;j<ths->M_total;j++)
+ {
+ ths->f[j] = 0;
+ plan_2d->x[2*j+0] = ths->x[ths->d * j + 1];
+ plan_2d->x[2*j+1] = ths->x[ths->d * j + 2];
+ }
+
+ for(k0=0;k0<ths->N[0];k0++) /* for shorties */
+ {
+ plan_2d->f_hat = ths->f_hat + k0*ths->N[1]*ths->N[2];
+
+ nfft_trafo(plan_2d);
+
+ for(j=0;j<ths->M_total;j++)
+ {
+ omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0];
+ ths->f[j] += plan_2d->f[j] * cexp( - I*2*PI*omega);
+ }
+ }
+}
+
+static void short_nfft_adjoint_3d_2(nfft_plan* ths, nfft_plan* plan_2d)
+{
+ int j,k0;
+ double omega;
+
+ for(j=0;j<ths->M_total;j++)
+ {
+ plan_2d->x[2*j+0] = ths->x[ths->d * j + 1];
+ plan_2d->x[2*j+1] = ths->x[ths->d * j + 2];
+ }
+
+ for(k0=0;k0<ths->N[0];k0++) /* for shorties */
+ {
+ for(j=0;j<ths->M_total;j++)
+ {
+ omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0];
+ plan_2d->f[j] = ths->f[j] * cexp( + _Complex_I*2*PI*omega);
+ }
+
+ plan_2d->f_hat = ths->f_hat + k0*ths->N[1]*ths->N[2];
+
+ nfft_adjoint(plan_2d);
+ }
+}
+
+/*---------------------------------------------------------------------------*/
+
+#ifdef GAUSSIAN
+static int index_sparse_to_full_direct_2d(int J, int k)
+{
+ int N=X(exp2i)(J+2); /* number of full coeffs */
+ int N_B=X(exp2i)(J); /* number in each sparse block */
+
+ int j=k/N_B; /* consecutive number of Block */
+ int r=j/4; /* level of block */
+
+ int i, o, a, b,s,l,m1,m2;
+ int k1,k2;
+
+ if (k>=(J+4)*X(exp2i)(J+1))
+ {
+ printf("Fehler!\n");
+ return(-1);
+ }
+ else
+ {
+ if (r>(J+1)/2) /* center block */
+ {
+ i=k-4*((J+1)/2+1)*N_B;
+ a=X(exp2i)(J/2+1);
+ m1=i/a;
+ m2=i%a;
+ k1=N/2-a/2+m1;
+ k2=N/2-a/2+m2;
+ }
+ else /* no center block */
+ {
+ i=k-j*N_B; /* index in specific block */
+ o=j%4; /* kind of specific block */
+ a=X(exp2i)(r);
+ b=X(exp2i)(J-r);
+ l=NFFT_MAX(a,b); /* long dimension of block */
+ s=NFFT_MIN(a,b); /* short dimension of block */
+ m1=i/l;
+ m2=i%l;
+
+ switch(o)
+ {
+ case 0:
+ {
+ k1=N/2-a/2 ;
+ k2=N/2+ b ;
+
+ if (b>=a)
+ {
+ k1+=m1;
+ k2+=m2;
+ }
+ else
+ {
+ k1+=m2;
+ k2+=m1;
+ }
+ break;
+ }
+ case 1:
+ {
+ k1=N/2+ b ;
+ k2=N/2-a/2 ;
+
+ if (b>a)
+ {
+ k1+=m2;
+ k2+=m1;
+ }
+ else
+ {
+ k1+=m1;
+ k2+=m2;
+ }
+ break;
+ }
+ case 2:
+ {
+ k1=N/2-a/2 ;
+ k2=N/2-2*b ;
+
+ if (b>=a)
+ {
+ k1+=m1;
+ k2+=m2;
+ }
+ else
+ {
+ k1+=m2;
+ k2+=m1;
+ }
+ break;
+ }
+ case 3:
+ {
+ k1=N/2-2*b ;
+ k2=N/2-a/2 ;
+
+ if (b>a)
+ {
+ k1+=m2;
+ k2+=m1;
+ }
+ else
+ {
+ k1+=m1;
+ k2+=m2;
+ }
+ break;
+ }
+ default:
+ {
+ k1=-1;
+ k2=-1;
+ }
+ }
+ }
+ //printf("m1=%d, m2=%d\n",m1,m2);
+ return(k1*N+k2);
+ }
+}
+#endif
+
+static inline int index_sparse_to_full_2d(nsfft_plan *ths, int k)
+{
+ /* only by lookup table */
+ if( k < ths->N_total)
+ return ths->index_sparse_to_full[k];
+ else
+ return -1;
+}
+
+#ifndef NSFTT_DISABLE_TEST
+static int index_full_to_sparse_2d(int J, int k)
+{
+ int N=X(exp2i)(J+2); /* number of full coeffs */
+ int N_B=X(exp2i)(J); /* number in each sparse block */
+
+ int k1=k/N-N/2; /* coordinates in the full grid */
+ int k2=k%N-N/2; /* k1: row, k2: column */
+
+ int r,a,b;
+
+ a=X(exp2i)(J/2+1);
+
+ if ( (k1>=-(a/2)) && (k1<a/2) && (k2>=(-a/2)) && (k2<a/2) )
+ {
+ return(4*((J+1)/2+1)*N_B+(k1+a/2)*a+(k2+a/2));
+ }
+
+ for (r=0; r<=(J+1)/2; r++)
+ {
+ b=X(exp2i)(r);
+ a=X(exp2i)(J-r);
+ if ( (k1>=-(b/2)) && (k1<(b+1)/2) && (k2>=a) && (k2<2*a) )
+ {
+ if (a>=b)
+ return((4*r+0)*N_B+(k1+b/2)*a+(k2-a));
+ else
+ return((4*r+0)*N_B+(k2-a)*b+(k1+b/2));
+ }
+ else if ( (k1>=a) && (k1<2*a) && (k2>=-(b/2)) && (k2<(b+1)/2) )
+ {
+ if (a>b)
+ return((4*r+1)*N_B+(k2+b/2)*a+(k1-a));
+ else
+ return((4*r+1)*N_B+(k1-a)*b+(k2+b/2));
+ }
+ else if ( (k1>=-(b/2)) && (k1<(b+1)/2) && (k2>=-2*a) && (k2<-a) )
+ {
+ if (a>=b)
+ return((4*r+2)*N_B+(k1+b/2)*a+(k2+2*a));
+ else
+ return((4*r+2)*N_B+(k2+2*a)*b+(k1+b/2));
+ }
+ else if ( (k1>=-2*a) && (k1<-a) && (k2>=-(b/2)) && (k2<(b+1)/2) )
+ {
+ if (a>b)
+ return((4*r+3)*N_B+(k2+b/2)*a+(k1+2*a));
+ else
+ return((4*r+3)*N_B+(k1+2*a)*b+(k2+b/2));
+ }
+ }
+
+ return(-1);
+}
+#endif
+
+#ifdef GAUSSIAN
+static void init_index_sparse_to_full_2d(nsfft_plan *ths)
+{
+ int k_S;
+
+ for (k_S=0; k_S<ths->N_total; k_S++)
+ ths->index_sparse_to_full[k_S]=index_sparse_to_full_direct_2d(ths->J, k_S);
+}
+#endif
+
+#ifdef GAUSSIAN
+static inline int index_sparse_to_full_3d(nsfft_plan *ths, int k)
+{
+ /* only by lookup table */
+ if( k < ths->N_total)
+ return ths->index_sparse_to_full[k];
+ else
+ return -1;
+}
+#endif
+
+#ifndef NSFTT_DISABLE_TEST
+static int index_full_to_sparse_3d(int J, int k)
+{
+ int N=X(exp2i)(J+2); /* length of the full grid */
+ int N_B_r; /* size of a sparse block in level r */
+ int sum_N_B_less_r; /* sum N_B_r */
+
+ int r,a,b;
+
+ int k3=(k%N)-N/2; /* coordinates in the full grid */
+ int k2=((k/N)%N)-N/2;
+ int k1=k/(N*N)-N/2;
+
+ a=X(exp2i)(J/2+1); /* length of center block */
+
+ if((k1>=-(a/2)) && (k1<a/2) && (k2>=(-a/2)) && (k2<a/2) && (k3>=(-a/2)) &&
+ (k3<a/2))
+ {
+ return(6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1)+((k1+a/2)*a+(k2+a/2))*a+
+ (k3+a/2));
+ }
+
+ sum_N_B_less_r=0;
+ for (r=0; r<=(J+1)/2; r++)
+ {
+ a=X(exp2i)(J-r);
+ b=X(exp2i)(r);
+
+ N_B_r=a*b*b;
+
+ /* right - rear - top - left - front - bottom */
+ if ((k1>=a) && (k1<2*a) && (k2>=-(b/2)) && (k2<(b+1)/2) &&
+ (k3>=-(b/2)) && (k3<(b+1)/2)) /* right */
+ {
+ if(a>b)
+ return sum_N_B_less_r+N_B_r*0 + ((k2+b/2)*b+k3+b/2)*a + (k1-a);
+ else
+ return sum_N_B_less_r+N_B_r*0 + ((k1-a)*b+(k2+b/2))*b + (k3+b/2);
+ }
+ else if ((k2>=a) && (k2<2*a) && (k1>=-(b/2)) && (k1<(b+1)/2) &&
+ (k3>=-(b/2)) && (k3<(b+1)/2)) /* rear */
+ {
+ if(a>b)
+ return sum_N_B_less_r+N_B_r*1 + ((k1+b/2)*b+k3+b/2)*a + (k2-a);
+ else if (a==b)
+ return sum_N_B_less_r+N_B_r*1 + ((k1+b/2)*b+(k2-a))*a + (k3+b/2);
+ else
+ return sum_N_B_less_r+N_B_r*1 + ((k2-a)*b+(k1+b/2))*b + (k3+b/2);
+ }
+ else if ((k3>=a) && (k3<2*a) && (k1>=-(b/2)) && (k1<(b+1)/2) &&
+ (k2>=-(b/2)) && (k2<(b+1)/2)) /* top */
+ {
+ if(a>=b)
+ return sum_N_B_less_r+N_B_r*2 + ((k1+b/2)*b+k2+b/2)*a + (k3-a);
+ else
+ return sum_N_B_less_r+N_B_r*2 + ((k3-a)*b+(k1+b/2))*b + (k2+b/2);
+ }
+
+ else if ((k1>=-2*a) && (k1<-a) && (k2>=-(b/2)) && (k2<(b+1)/2) &&
+ (k3>=-(b/2)) && (k3<(b+1)/2)) /* left */
+ {
+ if(a>b)
+ return sum_N_B_less_r+N_B_r*3 + ((k2+b/2)*b+k3+b/2)*a + (k1+2*a);
+ else
+ return sum_N_B_less_r+N_B_r*3 + ((k1+2*a)*b+(k2+b/2))*b + (k3+b/2);
+ }
+ else if ((k2>=-2*a) && (k2<-a) && (k1>=-(b/2)) && (k1<(b+1)/2) &&
+ (k3>=-(b/2)) && (k3<(b+1)/2)) /* front */
+ {
+ if(a>b)
+ return sum_N_B_less_r+N_B_r*4 + ((k1+b/2)*b+k3+b/2)*a + (k2+2*a);
+ else if (a==b)
+ return sum_N_B_less_r+N_B_r*4 + ((k1+b/2)*b+(k2+2*a))*a + (k3+b/2);
+ else
+ return sum_N_B_less_r+N_B_r*4 + ((k2+2*a)*b+(k1+b/2))*b + (k3+b/2);
+ }
+ else if ((k3>=-2*a) && (k3<-a) && (k1>=-(b/2)) && (k1<(b+1)/2) &&
+ (k2>=-(b/2)) && (k2<(b+1)/2)) /* bottom */
+ {
+ if(a>=b)
+ return sum_N_B_less_r+N_B_r*5 + ((k1+b/2)*b+k2+b/2)*a + (k3+2*a);
+ else
+ return sum_N_B_less_r+N_B_r*5 + ((k3+2*a)*b+(k1+b/2))*b + (k2+b/2);
+ }
+
+ sum_N_B_less_r+=6*N_B_r;
+ } /* for(r) */
+
+ return(-1);
+}
+#endif
+
+#ifdef GAUSSIAN
+static void init_index_sparse_to_full_3d(nsfft_plan *ths)
+{
+ int k1,k2,k3,k_s,r;
+ int a,b;
+ int N=X(exp2i)(ths->J+2); /* length of the full grid */
+ int Nc=ths->center_nfft_plan->N[0]; /* length of the center block */
+
+ for (k_s=0, r=0; r<=(ths->J+1)/2; r++)
+ {
+ a=X(exp2i)(ths->J-r);
+ b=X(exp2i)(r);
+
+ /* right - rear - top - left - front - bottom */
+
+ /* right */
+ if(a>b)
+ for(k2=-b/2;k2<(b+1)/2;k2++)
+ for(k3=-b/2;k3<(b+1)/2;k3++)
+ for(k1=a; k1<2*a; k1++,k_s++)
+ ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+ else
+ for(k1=a; k1<2*a; k1++)
+ for(k2=-b/2;k2<(b+1)/2;k2++)
+ for(k3=-b/2;k3<(b+1)/2;k3++,k_s++)
+ ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+
+ /* rear */
+ if(a>b)
+ for(k1=-b/2;k1<(b+1)/2;k1++)
+ for(k3=-b/2;k3<(b+1)/2;k3++)
+ for(k2=a; k2<2*a; k2++,k_s++)
+ ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+ else if(a==b)
+ for(k1=-b/2;k1<(b+1)/2;k1++)
+ for(k2=a; k2<2*a; k2++)
+ for(k3=-b/2;k3<(b+1)/2;k3++,k_s++)
+ ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+ else
+ for(k2=a; k2<2*a; k2++)
+ for(k1=-b/2;k1<(b+1)/2;k1++)
+ for(k3=-b/2;k3<(b+1)/2;k3++,k_s++)
+ ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+
+ /* top */
+ if(a>=b)
+ for(k1=-b/2;k1<(b+1)/2;k1++)
+ for(k2=-b/2;k2<(b+1)/2;k2++)
+ for(k3=a; k3<2*a; k3++,k_s++)
+ ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+ else
+ for(k3=a; k3<2*a; k3++)
+ for(k1=-b/2;k1<(b+1)/2;k1++)
+ for(k2=-b/2;k2<(b+1)/2;k2++,k_s++)
+ ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+
+ /* left */
+ if(a>b)
+ for(k2=-b/2;k2<(b+1)/2;k2++)
+ for(k3=-b/2;k3<(b+1)/2;k3++)
+ for(k1=-2*a; k1<-a; k1++,k_s++)
+ ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+ else
+ for(k1=-2*a; k1<-a; k1++)
+ for(k2=-b/2;k2<(b+1)/2;k2++)
+ for(k3=-b/2;k3<(b+1)/2;k3++,k_s++)
+ ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+
+ /* front */
+ if(a>b)
+ for(k1=-b/2;k1<(b+1)/2;k1++)
+ for(k3=-b/2;k3<(b+1)/2;k3++)
+ for(k2=-2*a; k2<-a; k2++,k_s++)
+ ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+ else if(a==b)
+ for(k1=-b/2;k1<(b+1)/2;k1++)
+ for(k2=-2*a; k2<-a; k2++)
+ for(k3=-b/2;k3<(b+1)/2;k3++,k_s++)
+ ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+ else
+ for(k2=-2*a; k2<-a; k2++)
+ for(k1=-b/2;k1<(b+1)/2;k1++)
+ for(k3=-b/2;k3<(b+1)/2;k3++,k_s++)
+ ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+
+ /* top */
+ if(a>=b)
+ for(k1=-b/2;k1<(b+1)/2;k1++)
+ for(k2=-b/2;k2<(b+1)/2;k2++)
+ for(k3=-2*a; k3<-a; k3++,k_s++)
+ ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+ else
+ for(k3=-2*a; k3<-a; k3++)
+ for(k1=-b/2;k1<(b+1)/2;k1++)
+ for(k2=-b/2;k2<(b+1)/2;k2++,k_s++)
+ ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+ }
+
+ /* center */
+ for(k1=-Nc/2;k1<Nc/2;k1++)
+ for(k2=-Nc/2;k2<Nc/2;k2++)
+ for(k3=-Nc/2; k3<Nc/2; k3++,k_s++)
+ ths->index_sparse_to_full[k_s]=((k1+N/2)*N+k2+N/2)*N+k3+N/2;
+}
+#endif
+
+/* copies ths->f_hat to ths_plan->f_hat */
+void nsfft_cp(nsfft_plan *ths, nfft_plan *ths_full_plan)
+{
+ int k;
+
+ /* initialize f_hat with zero values */
+ memset(ths_full_plan->f_hat, 0, ths_full_plan->N_total*sizeof(double _Complex));
+
+ /* copy values at hyperbolic grid points */
+ for(k=0;k<ths->N_total;k++)
+ ths_full_plan->f_hat[ths->index_sparse_to_full[k]]=ths->f_hat[k];
+
+ /* copy nodes */
+ memcpy(ths_full_plan->x,ths->act_nfft_plan->x,ths->M_total*ths->d*sizeof(double));
+}
+
+#ifndef NSFTT_DISABLE_TEST
+/* test copy_sparse_to_full */
+static void test_copy_sparse_to_full_2d(nsfft_plan *ths, nfft_plan *ths_full_plan)
+{
+ int r;
+ int k1, k2;
+ int a,b;
+ const int J=ths->J; /* N=2^J */
+ const int N=ths_full_plan->N[0]; /* size of full NFFT */
+ const int N_B=X(exp2i)(J); /* size of small blocks */
+
+ /* copy sparse plan to full plan */
+ nsfft_cp(ths, ths_full_plan);
+
+ /* show blockwise f_hat */
+ printf("f_hat blockwise\n");
+ for (r=0; r<=(J+1)/2; r++){
+ a=X(exp2i)(J-r); b=X(exp2i)(r);
+
+ printf("top\n");
+ for (k1=0; k1<a; k1++){
+ for (k2=0; k2<b; k2++){
+ printf("(%1.1f,%1.1f) ", creal(ths->f_hat[(4*r+1)*N_B+ k1*b+k2]),
+ cimag(ths->f_hat[(4*r+1)*N_B+ k1*b+k2]));
+ }
+ printf("\n");
+ }
+
+ printf("bottom\n");
+ for (k1=0; k1<a; k1++){
+ for (k2=0; k2<b; k2++){
+ printf("(%1.1f,%1.1f) ", creal(ths->f_hat[(4*r+3)*N_B+ k1*b+k2]),
+ cimag(ths->f_hat[(4*r+3)*N_B+ k1*b+k2]));
+ }
+ printf("\n");
+ }
+
+ printf("right\n");
+ for (k2=0; k2<b; k2++){
+ for (k1=0; k1<a; k1++){
+ printf("(%1.1f,%1.1f) ", creal(ths->f_hat[(4*r+0)*N_B+ k2*a+k1]),
+ cimag(ths->f_hat[(4*r+0)*N_B+ k2*a+k1]));
+ }
+ printf("\n");
+ }
+
+ printf("left\n");
+ for (k2=0; k2<b; k2++){
+ for (k1=0; k1<a; k1++){
+ printf("(%1.1f,%1.1f) ", creal(ths->f_hat[(4*r+2)*N_B+ k2*a+k1]),
+ cimag(ths->f_hat[(4*r+2)*N_B+ k2*a+k1]));
+ }
+ printf("\n");
+ }
+ }
+
+ return;
+ /* show full f_hat */
+ printf("full f_hat\n");
+ for (k1=0;k1<N;k1++){
+ for (k2=0;k2<N;k2++){
+ printf("(%1.1f,%1.1f) ", creal(ths_full_plan->f_hat[k1*N+k2]),
+ cimag(ths_full_plan->f_hat[k1*N+k2]));
+ }
+ printf("\n");
+ }
+}
+#endif
+
+#ifndef NSFTT_DISABLE_TEST
+static void test_sparse_to_full_2d(nsfft_plan* ths)
+{
+ int k_S,k1,k2;
+ int N=X(exp2i)(ths->J+2);
+
+ printf("N=%d\n\n",N);
+
+ for(k1=0;k1<N;k1++)
+ for(k2=0;k2<N;k2++)
+ {
+ k_S=index_full_to_sparse_2d(ths->J, k1*N+k2);
+ if(k_S!=-1)
+ printf("(%+d, %+d)\t= %+d \t= %+d = %+d \n",k1-N/2,k2-N/2,
+ k1*N+k2, k_S, ths->index_sparse_to_full[k_S]);
+ }
+}
+#endif
+
+#ifndef NSFTT_DISABLE_TEST
+static void test_sparse_to_full_3d(nsfft_plan* ths)
+{
+ int k_S,k1,k2,k3;
+ int N=X(exp2i)(ths->J+2);
+
+ printf("N=%d\n\n",N);
+
+ for(k1=0;k1<N;k1++)
+ for(k2=0;k2<N;k2++)
+ for(k3=0;k3<N;k3++)
+ {
+ k_S=index_full_to_sparse_3d(ths->J, (k1*N+k2)*N+k3);
+ if(k_S!=-1)
+ printf("(%d, %d, %d)\t= %d \t= %d = %d \n",k1-N/2,k2-N/2,k3-N/2,
+ (k1*N+k2)*N+k3,k_S, ths->index_sparse_to_full[k_S]);
+ }
+}
+#endif
+
+
+void nsfft_init_random_nodes_coeffs(nsfft_plan *ths)
+{
+ int j;
+
+ /* init frequencies */
+ nfft_vrand_unit_complex(ths->f_hat, ths->N_total);
+
+ /* init nodes */
+ nfft_vrand_shifted_unit_double(ths->act_nfft_plan->x, ths->d * ths->M_total);
+
+ if(ths->d==2)
+ for(j=0;j<ths->M_total;j++)
+ {
+ ths->x_transposed[2*j+0]=ths->act_nfft_plan->x[2*j+1];
+ ths->x_transposed[2*j+1]=ths->act_nfft_plan->x[2*j+0];
+ }
+ else /* this->d==3 */
+ for(j=0;j<ths->M_total;j++)
+ {
+ ths->x_102[3*j+0]=ths->act_nfft_plan->x[3*j+1];
+ ths->x_102[3*j+1]=ths->act_nfft_plan->x[3*j+0];
+ ths->x_102[3*j+2]=ths->act_nfft_plan->x[3*j+2];
+
+ ths->x_201[3*j+0]=ths->act_nfft_plan->x[3*j+2];
+ ths->x_201[3*j+1]=ths->act_nfft_plan->x[3*j+0];
+ ths->x_201[3*j+2]=ths->act_nfft_plan->x[3*j+1];
+
+ ths->x_120[3*j+0]=ths->act_nfft_plan->x[3*j+1];
+ ths->x_120[3*j+1]=ths->act_nfft_plan->x[3*j+2];
+ ths->x_120[3*j+2]=ths->act_nfft_plan->x[3*j+0];
+
+ ths->x_021[3*j+0]=ths->act_nfft_plan->x[3*j+0];
+ ths->x_021[3*j+1]=ths->act_nfft_plan->x[3*j+2];
+ ths->x_021[3*j+2]=ths->act_nfft_plan->x[3*j+1];
+ }
+}
+
+static void nsdft_trafo_2d(nsfft_plan *ths)
+{
+ int j,k_S,k_L,k0,k1;
+ double omega;
+ int N=X(exp2i)(ths->J+2);
+
+ memset(ths->f,0,ths->M_total*sizeof(double _Complex));
+
+ for(k_S=0;k_S<ths->N_total;k_S++)
+ {
+ k_L=ths->index_sparse_to_full[k_S];
+ k0=k_L / N;
+ k1=k_L % N;
+
+ for(j=0;j<ths->M_total;j++)
+ {
+ omega =
+ ((double)(k0 - N/2)) * ths->act_nfft_plan->x[2 * j + 0] +
+ ((double)(k1 - N/2)) * ths->act_nfft_plan->x[2 * j + 1];
+ ths->f[j] += ths->f_hat[k_S] * cexp( - I*2*PI*omega);
+ }
+ }
+} /* void nsdft_trafo_2d */
+
+static void nsdft_trafo_3d(nsfft_plan *ths)
+{
+ int j,k_S,k0,k1,k2;
+ double omega;
+ int N=X(exp2i)(ths->J+2);
+ int k_L;
+
+ memset(ths->f,0,ths->M_total*sizeof(double _Complex));
+
+ for(k_S=0;k_S<ths->N_total;k_S++)
+ {
+ k_L=ths->index_sparse_to_full[k_S];
+
+ k0=k_L/(N*N);
+ k1=(k_L/N)%N;
+ k2=k_L%N;
+
+ for(j=0;j<ths->M_total;j++)
+ {
+ omega =
+ ((double)(k0 - N/2)) * ths->act_nfft_plan->x[3 * j + 0] +
+ ((double)(k1 - N/2)) * ths->act_nfft_plan->x[3 * j + 1] +
+ ((double)(k2 - N/2)) * ths->act_nfft_plan->x[3 * j + 2];
+ ths->f[j] += ths->f_hat[k_S] * cexp( - I*2*PI*omega);
+ }
+ }
+} /* void nsdft_trafo_3d */
+
+void nsfft_trafo_direct(nsfft_plan *ths)
+{
+ if(ths->d==2)
+ nsdft_trafo_2d(ths);
+ else
+ nsdft_trafo_3d(ths);
+}
+
+static void nsdft_adjoint_2d(nsfft_plan *ths)
+{
+ int j,k_S,k_L,k0,k1;
+ double omega;
+ int N=X(exp2i)(ths->J+2);
+
+ memset(ths->f_hat,0,ths->N_total*sizeof(double _Complex));
+
+ for(k_S=0;k_S<ths->N_total;k_S++)
+ {
+ k_L=ths->index_sparse_to_full[k_S];
+ k0=k_L / N;
+ k1=k_L % N;
+
+ for(j=0;j<ths->M_total;j++)
+ {
+ omega =
+ ((double)(k0 - N/2)) * ths->act_nfft_plan->x[2 * j + 0] +
+ ((double)(k1 - N/2)) * ths->act_nfft_plan->x[2 * j + 1];
+ ths->f_hat[k_S] += ths->f[j] * cexp( + _Complex_I*2*PI*omega);
+ }
+ }
+} /* void nsdft_adjoint_2d */
+
+static void nsdft_adjoint_3d(nsfft_plan *ths)
+{
+ int j,k_S,k0,k1,k2;
+ double omega;
+ int N=X(exp2i)(ths->J+2);
+ int k_L;
+
+ memset(ths->f_hat,0,ths->N_total*sizeof(double _Complex));
+
+ for(k_S=0;k_S<ths->N_total;k_S++)
+ {
+ k_L=ths->index_sparse_to_full[k_S];
+
+ k0=k_L/(N*N);
+ k1=(k_L/N)%N;
+ k2=k_L%N;
+
+ for(j=0;j<ths->M_total;j++)
+ {
+ omega =
+ ((double)(k0 - N/2)) * ths->act_nfft_plan->x[3 * j + 0] +
+ ((double)(k1 - N/2)) * ths->act_nfft_plan->x[3 * j + 1] +
+ ((double)(k2 - N/2)) * ths->act_nfft_plan->x[3 * j + 2];
+ ths->f_hat[k_S] += ths->f[j] * cexp( + _Complex_I*2*PI*omega);
+ }
+ }
+} /* void nsdft_adjoint_3d */
+
+void nsfft_adjoint_direct(nsfft_plan *ths)
+{
+ if(ths->d==2)
+ nsdft_adjoint_2d(ths);
+ else
+ nsdft_adjoint_3d(ths);
+}
+
+static void nsfft_trafo_2d(nsfft_plan *ths)
+{
+ int r,rr,j;
+ double temp;
+
+ int M=ths->M_total;
+ int J=ths->J;
+
+ /* center */
+ ths->center_nfft_plan->f_hat=ths->f_hat+4*((J+1)/2+1)*X(exp2i)(J);
+
+ if (ths->center_nfft_plan->N[0]<=ths->center_nfft_plan->m)
+ nfft_trafo_direct(ths->center_nfft_plan);
+ else
+ nfft_trafo(ths->center_nfft_plan);
+
+ for (j=0; j<M; j++)
+ ths->f[j] = ths->center_nfft_plan->f[j];
+
+ for(rr=0;rr<=(J+1)/2;rr++)
+ {
+ r=NFFT_MIN(rr,J-rr);
+ ths->act_nfft_plan->my_fftw_plan1 = ths->set_fftw_plan1[r];
+ ths->act_nfft_plan->N[0]=X(exp2i)(r); ths->act_nfft_plan->n[0]=ths->sigma*ths->act_nfft_plan->N[0];
+ ths->act_nfft_plan->N[1]=X(exp2i)(J-r); ths->act_nfft_plan->n[1]=ths->sigma*ths->act_nfft_plan->N[1];
+
+ /*printf("%d x %d\n",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1]);*/
+
+ temp=-3.0*PI*X(exp2i)(J-rr);
+
+ /* right */
+ ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+0)*X(exp2i)(J);
+
+ if(r<rr)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ nfft_trafo_direct(ths->act_nfft_plan);
+ else
+ short_nfft_trafo_2d(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ nfft_trafo(ths->act_nfft_plan);
+
+ if(r<rr)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+ for (j=0; j<M; j++)
+ ths->f[j] += ths->act_nfft_plan->f[j] *
+ cexp( + _Complex_I*temp*ths->act_nfft_plan->x[2*j+1]);
+
+ /* top */
+ ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+1)*X(exp2i)(J);
+
+ if((r==rr)&&(J-rr!=rr))
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ nfft_trafo_direct(ths->act_nfft_plan);
+ else
+ short_nfft_trafo_2d(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ nfft_trafo(ths->act_nfft_plan);
+
+ if((r==rr)&&(J-rr!=rr))
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+ for (j=0; j<M; j++)
+ ths->f[j] += ths->act_nfft_plan->f[j] *
+ cexp( + _Complex_I*temp*ths->act_nfft_plan->x[2*j+0]);
+
+ /* left */
+ ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+2)*X(exp2i)(J);
+
+ if(r<rr)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ nfft_trafo_direct(ths->act_nfft_plan);
+ else
+ short_nfft_trafo_2d(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ nfft_trafo(ths->act_nfft_plan);
+
+ if(r<rr)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+ for (j=0; j<M; j++)
+ ths->f[j] += ths->act_nfft_plan->f[j] *
+ cexp( - I*temp*ths->act_nfft_plan->x[2*j+1]);
+
+ /* bottom */
+ ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+3)*X(exp2i)(J);
+
+ if((r==rr)&&(J-rr!=rr))
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ nfft_trafo_direct(ths->act_nfft_plan);
+ else
+ short_nfft_trafo_2d(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ nfft_trafo(ths->act_nfft_plan);
+
+ if((r==rr)&&(J-rr!=rr))
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+ for (j=0; j<M; j++)
+ ths->f[j] += ths->act_nfft_plan->f[j] *
+ cexp( - I*temp*ths->act_nfft_plan->x[2*j+0]);
+ } /* for(rr) */
+} /* void nsfft_trafo_2d */
+
+static void nsfft_adjoint_2d(nsfft_plan *ths)
+{
+ int r,rr,j;
+ double temp;
+
+ int M=ths->M_total;
+ int J=ths->J;
+
+ /* center */
+ for (j=0; j<M; j++)
+ ths->center_nfft_plan->f[j] = ths->f[j];
+
+ ths->center_nfft_plan->f_hat=ths->f_hat+4*((J+1)/2+1)*X(exp2i)(J);
+
+ if (ths->center_nfft_plan->N[0]<=ths->center_nfft_plan->m)
+ nfft_adjoint_direct(ths->center_nfft_plan);
+ else
+ nfft_adjoint(ths->center_nfft_plan);
+
+ for(rr=0;rr<=(J+1)/2;rr++)
+ {
+ r=NFFT_MIN(rr,J-rr);
+ ths->act_nfft_plan->my_fftw_plan2 = ths->set_fftw_plan2[r];
+ ths->act_nfft_plan->N[0]=X(exp2i)(r); ths->act_nfft_plan->n[0]=ths->sigma*ths->act_nfft_plan->N[0];
+ ths->act_nfft_plan->N[1]=X(exp2i)(J-r); ths->act_nfft_plan->n[1]=ths->sigma*ths->act_nfft_plan->N[1];
+
+ /*printf("%d x %d\n",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1]);*/
+
+ temp=-3.0*PI*X(exp2i)(J-rr);
+
+ /* right */
+ ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+0)*X(exp2i)(J);
+
+ for (j=0; j<M; j++)
+ ths->act_nfft_plan->f[j]= ths->f[j] *
+ cexp( - I*temp*ths->act_nfft_plan->x[2*j+1]);
+
+ if(r<rr)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ nfft_adjoint_direct(ths->act_nfft_plan);
+ else
+ short_nfft_adjoint_2d(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ nfft_adjoint(ths->act_nfft_plan);
+
+ if(r<rr)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+ /* top */
+ ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+1)*X(exp2i)(J);
+
+ for (j=0; j<M; j++)
+ ths->act_nfft_plan->f[j]= ths->f[j] *
+ cexp( - I*temp*ths->act_nfft_plan->x[2*j+0]);
+
+ if((r==rr)&&(J-rr!=rr))
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ nfft_adjoint_direct(ths->act_nfft_plan);
+ else
+ short_nfft_adjoint_2d(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ nfft_adjoint(ths->act_nfft_plan);
+
+ if((r==rr)&&(J-rr!=rr))
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+ /* left */
+ ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+2)*X(exp2i)(J);
+
+ for (j=0; j<M; j++)
+ ths->act_nfft_plan->f[j]= ths->f[j] *
+ cexp( + _Complex_I*temp*ths->act_nfft_plan->x[2*j+1]);
+
+ if(r<rr)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ nfft_adjoint_direct(ths->act_nfft_plan);
+ else
+ short_nfft_adjoint_2d(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ nfft_adjoint(ths->act_nfft_plan);
+
+ if(r<rr)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+ /* bottom */
+ ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+3)*X(exp2i)(J);
+
+ for (j=0; j<M; j++)
+ ths->act_nfft_plan->f[j]= ths->f[j] *
+ cexp( + _Complex_I*temp*ths->act_nfft_plan->x[2*j+0]);
+
+ if((r==rr)&&(J-rr!=rr))
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ nfft_adjoint_direct(ths->act_nfft_plan);
+ else
+ short_nfft_adjoint_2d(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ nfft_adjoint(ths->act_nfft_plan);
+
+ if((r==rr)&&(J-rr!=rr))
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+ } /* for(rr) */
+} /* void nsfft_adjoint_2d */
+
+static void nsfft_trafo_3d(nsfft_plan *ths)
+{
+ int r,rr,j;
+ double temp;
+ int sum_N_B_less_r,N_B_r,a,b;
+
+ int M=ths->M_total;
+ int J=ths->J;
+
+ /* center */
+ ths->center_nfft_plan->f_hat=ths->f_hat+6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1);
+
+ if (ths->center_nfft_plan->N[0]<=ths->center_nfft_plan->m)
+ nfft_trafo_direct(ths->center_nfft_plan);
+ else
+ nfft_trafo(ths->center_nfft_plan);
+
+ for (j=0; j<M; j++)
+ ths->f[j] = ths->center_nfft_plan->f[j];
+
+ sum_N_B_less_r=0;
+ for(rr=0;rr<=(J+1)/2;rr++)
+ {
+ a=X(exp2i)(J-rr);
+ b=X(exp2i)(rr);
+
+ N_B_r=a*b*b;
+
+ r=NFFT_MIN(rr,J-rr);
+ ths->act_nfft_plan->my_fftw_plan1 = ths->set_fftw_plan1[rr];
+
+ ths->act_nfft_plan->N[0]=X(exp2i)(r);
+ if(a<b)
+ ths->act_nfft_plan->N[1]=X(exp2i)(J-r);
+ else
+ ths->act_nfft_plan->N[1]=X(exp2i)(r);
+ ths->act_nfft_plan->N[2]=X(exp2i)(J-r);
+
+ /*printf("\n\n%d x %d x %d:\t",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1],ths->act_nfft_plan->N[2]); fflush(stdout);*/
+
+ ths->act_nfft_plan->N_total=ths->act_nfft_plan->N[0]*ths->act_nfft_plan->N[1]*ths->act_nfft_plan->N[2];
+ ths->act_nfft_plan->n[0]=ths->sigma*ths->act_nfft_plan->N[0];
+ ths->act_nfft_plan->n[1]=ths->sigma*ths->act_nfft_plan->N[1];
+ ths->act_nfft_plan->n[2]=ths->sigma*ths->act_nfft_plan->N[2];
+ ths->act_nfft_plan->n_total=ths->act_nfft_plan->n[0]*ths->act_nfft_plan->n[1]*ths->act_nfft_plan->n[2];
+
+ /* only for right - rear - top */
+ if((J==0)||((J==1)&&(rr==1)))
+ temp=-2.0*PI;
+ else
+ temp=-3.0*PI*X(exp2i)(J-rr);
+
+ /* right */
+ ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*0;
+
+ if(a>b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+ nfft_trafo_direct(ths->act_nfft_plan);
+ else
+ short_nfft_trafo_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ short_nfft_trafo_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+ else
+ nfft_trafo(ths->act_nfft_plan);
+
+ if(a>b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+
+ for (j=0; j<M; j++)
+ ths->f[j] += ths->act_nfft_plan->f[j] *
+ cexp( + _Complex_I*temp*ths->act_nfft_plan->x[3*j+0]);
+
+ /* rear */
+ ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*1;
+
+ if(a>b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+ if(a<b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+ nfft_trafo_direct(ths->act_nfft_plan);
+ else
+ short_nfft_trafo_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ short_nfft_trafo_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+ else
+ nfft_trafo(ths->act_nfft_plan);
+
+ if(a>b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+ if(a<b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+
+ for (j=0; j<M; j++)
+ ths->f[j] += ths->act_nfft_plan->f[j] *
+ cexp( + _Complex_I*temp*ths->act_nfft_plan->x[3*j+1]);
+
+ /* top */
+ ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*2;
+
+ if(a<b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+ nfft_trafo_direct(ths->act_nfft_plan);
+ else
+ short_nfft_trafo_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ short_nfft_trafo_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+ else
+ nfft_trafo(ths->act_nfft_plan);
+
+ if(a<b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+
+ for (j=0; j<M; j++)
+ ths->f[j] += ths->act_nfft_plan->f[j] *
+ cexp( + _Complex_I*temp*ths->act_nfft_plan->x[3*j+2]);
+
+ /* only for left - front - bottom */
+ if((J==0)||((J==1)&&(rr==1)))
+ temp=-4.0*PI;
+ else
+ temp=-3.0*PI*X(exp2i)(J-rr);
+
+ /* left */
+ ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*3;
+
+ if(a>b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+ nfft_trafo_direct(ths->act_nfft_plan);
+ else
+ short_nfft_trafo_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ short_nfft_trafo_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+ else
+ nfft_trafo(ths->act_nfft_plan);
+
+ if(a>b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+
+ for (j=0; j<M; j++)
+ ths->f[j] += ths->act_nfft_plan->f[j] *
+ cexp( - I*temp*ths->act_nfft_plan->x[3*j+0]);
+
+ /* front */
+ ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*4;
+
+ if(a>b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+ if(a<b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+ nfft_trafo_direct(ths->act_nfft_plan);
+ else
+ short_nfft_trafo_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ short_nfft_trafo_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+ else
+ nfft_trafo(ths->act_nfft_plan);
+
+ if(a>b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+ if(a<b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+
+ for (j=0; j<M; j++)
+ ths->f[j] += ths->act_nfft_plan->f[j] *
+ cexp( - I*temp*ths->act_nfft_plan->x[3*j+1]);
+
+ /* bottom */
+ ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*5;
+
+ if(a<b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+ nfft_trafo_direct(ths->act_nfft_plan);
+ else
+ short_nfft_trafo_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ short_nfft_trafo_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+ else
+ nfft_trafo(ths->act_nfft_plan);
+
+ if(a<b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+
+ for (j=0; j<M; j++)
+ ths->f[j] += ths->act_nfft_plan->f[j] *
+ cexp( - I*temp*ths->act_nfft_plan->x[3*j+2]);
+
+ sum_N_B_less_r+=6*N_B_r;
+ } /* for(rr) */
+} /* void nsfft_trafo_3d */
+
+static void nsfft_adjoint_3d(nsfft_plan *ths)
+{
+ int r,rr,j;
+ double temp;
+ int sum_N_B_less_r,N_B_r,a,b;
+
+ int M=ths->M_total;
+ int J=ths->J;
+
+ /* center */
+ for (j=0; j<M; j++)
+ ths->center_nfft_plan->f[j] = ths->f[j];
+
+ ths->center_nfft_plan->f_hat=ths->f_hat+6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1);
+
+ if (ths->center_nfft_plan->N[0]<=ths->center_nfft_plan->m)
+ nfft_adjoint_direct(ths->center_nfft_plan);
+ else
+ nfft_adjoint(ths->center_nfft_plan);
+
+ sum_N_B_less_r=0;
+ for(rr=0;rr<=(J+1)/2;rr++)
+ {
+ a=X(exp2i)(J-rr);
+ b=X(exp2i)(rr);
+
+ N_B_r=a*b*b;
+
+ r=NFFT_MIN(rr,J-rr);
+ ths->act_nfft_plan->my_fftw_plan1 = ths->set_fftw_plan1[rr];
+ ths->act_nfft_plan->my_fftw_plan2 = ths->set_fftw_plan2[rr];
+
+ ths->act_nfft_plan->N[0]=X(exp2i)(r);
+ if(a<b)
+ ths->act_nfft_plan->N[1]=X(exp2i)(J-r);
+ else
+ ths->act_nfft_plan->N[1]=X(exp2i)(r);
+ ths->act_nfft_plan->N[2]=X(exp2i)(J-r);
+
+ /*printf("\n\n%d x %d x %d:\t",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1],ths->act_nfft_plan->N[2]); fflush(stdout);*/
+
+ ths->act_nfft_plan->N_total=ths->act_nfft_plan->N[0]*ths->act_nfft_plan->N[1]*ths->act_nfft_plan->N[2];
+ ths->act_nfft_plan->n[0]=ths->sigma*ths->act_nfft_plan->N[0];
+ ths->act_nfft_plan->n[1]=ths->sigma*ths->act_nfft_plan->N[1];
+ ths->act_nfft_plan->n[2]=ths->sigma*ths->act_nfft_plan->N[2];
+ ths->act_nfft_plan->n_total=ths->act_nfft_plan->n[0]*ths->act_nfft_plan->n[1]*ths->act_nfft_plan->n[2];
+
+ /* only for right - rear - top */
+ if((J==0)||((J==1)&&(rr==1)))
+ temp=-2.0*PI;
+ else
+ temp=-3.0*PI*X(exp2i)(J-rr);
+
+ /* right */
+ ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*0;
+
+ for (j=0; j<M; j++)
+ ths->act_nfft_plan->f[j]= ths->f[j] *
+ cexp( - I*temp*ths->act_nfft_plan->x[3*j+0]);
+
+ if(a>b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+ nfft_adjoint_direct(ths->act_nfft_plan);
+ else
+ short_nfft_adjoint_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ short_nfft_adjoint_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+ else
+ nfft_adjoint(ths->act_nfft_plan);
+
+ if(a>b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+
+ /* rear */
+ ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*1;
+
+ for (j=0; j<M; j++)
+ ths->act_nfft_plan->f[j]= ths->f[j] *
+ cexp( - I*temp*ths->act_nfft_plan->x[3*j+1]);
+
+ if(a>b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+ if(a<b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+ nfft_adjoint_direct(ths->act_nfft_plan);
+ else
+ short_nfft_adjoint_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ short_nfft_adjoint_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+ else
+ nfft_adjoint(ths->act_nfft_plan);
+
+ if(a>b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+ if(a<b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+
+ /* top */
+ ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*2;
+
+ for (j=0; j<M; j++)
+ ths->act_nfft_plan->f[j]= ths->f[j] *
+ cexp( - I*temp*ths->act_nfft_plan->x[3*j+2]);
+
+ if(a<b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+ nfft_adjoint_direct(ths->act_nfft_plan);
+ else
+ short_nfft_adjoint_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ short_nfft_adjoint_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+ else
+ nfft_adjoint(ths->act_nfft_plan);
+
+ if(a<b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+
+ /* only for left - front - bottom */
+ if((J==0)||((J==1)&&(rr==1)))
+ temp=-4.0*PI;
+ else
+ temp=-3.0*PI*X(exp2i)(J-rr);
+
+ /* left */
+ ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*3;
+
+ for (j=0; j<M; j++)
+ ths->act_nfft_plan->f[j]= ths->f[j] *
+ cexp( + _Complex_I*temp*ths->act_nfft_plan->x[3*j+0]);
+
+ if(a>b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+ nfft_adjoint_direct(ths->act_nfft_plan);
+ else
+ short_nfft_adjoint_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ short_nfft_adjoint_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+ else
+ nfft_adjoint(ths->act_nfft_plan);
+
+ if(a>b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+
+ /* front */
+ ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*4;
+
+ for (j=0; j<M; j++)
+ ths->act_nfft_plan->f[j]= ths->f[j] *
+ cexp( + _Complex_I*temp*ths->act_nfft_plan->x[3*j+1]);
+
+ if(a>b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+ if(a<b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+ nfft_adjoint_direct(ths->act_nfft_plan);
+ else
+ short_nfft_adjoint_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ short_nfft_adjoint_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+ else
+ nfft_adjoint(ths->act_nfft_plan);
+
+ if(a>b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+ if(a<b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+
+ /* bottom */
+ ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*5;
+
+ for (j=0; j<M; j++)
+ ths->act_nfft_plan->f[j]= ths->f[j] *
+ cexp( + _Complex_I*temp*ths->act_nfft_plan->x[3*j+2]);
+
+ if(a<b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+
+ if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
+ if(ths->act_nfft_plan->N[2]<=ths->act_nfft_plan->m)
+ nfft_adjoint_direct(ths->act_nfft_plan);
+ else
+ short_nfft_adjoint_3d_1(ths->act_nfft_plan,&(ths->set_nfft_plan_1d[r]));
+ else
+ short_nfft_adjoint_3d_2(ths->act_nfft_plan,&(ths->set_nfft_plan_2d[r]));
+ else
+ nfft_adjoint(ths->act_nfft_plan);
+
+ if(a<b)
+ NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+
+ sum_N_B_less_r+=6*N_B_r;
+ } /* for(rr) */
+} /* void nsfft_adjoint_3d */
+
+void nsfft_trafo(nsfft_plan *ths)
+{
+ if(ths->d==2)
+ nsfft_trafo_2d(ths);
+ else
+ nsfft_trafo_3d(ths);
+}
+
+void nsfft_adjoint(nsfft_plan *ths)
+{
+ if(ths->d==2)
+ nsfft_adjoint_2d(ths);
+ else
+ nsfft_adjoint_3d(ths);
+}
+
+
+/*========================================================*/
+/* J >1, no precomputation at all!! */
+#ifdef GAUSSIAN
+static void nsfft_init_2d(nsfft_plan *ths, int J, int M, int m, unsigned snfft_flags)
+{
+ int r;
+ int N[2];
+ int n[2];
+
+ ths->flags=snfft_flags;
+ ths->sigma=2;
+ ths->J=J;
+ ths->M_total=M;
+ ths->N_total=(J+4)*X(exp2i)(J+1);
+
+ /* memory allocation */
+ ths->f = (double _Complex *)nfft_malloc(M*sizeof(double _Complex));
+ ths->f_hat = (double _Complex *)nfft_malloc(ths->N_total*sizeof(double _Complex));
+ ths->x_transposed= (double*)nfft_malloc(2*M*sizeof(double));
+
+ ths->act_nfft_plan = (nfft_plan*)nfft_malloc(sizeof(nfft_plan));
+ ths->center_nfft_plan = (nfft_plan*)nfft_malloc(sizeof(nfft_plan));
+
+ ths->set_fftw_plan1=(fftw_plan*) nfft_malloc((J/2+1)*sizeof(fftw_plan));
+ ths->set_fftw_plan2=(fftw_plan*) nfft_malloc((J/2+1)*sizeof(fftw_plan));
+
+ ths->set_nfft_plan_1d = (nfft_plan*) nfft_malloc((X(log2i)(m)+1)*(sizeof(nfft_plan)));
+
+ /* planning the small nffts */
+ /* r=0 */
+ N[0]=1; n[0]=ths->sigma*N[0];
+ N[1]=X(exp2i)(J); n[1]=ths->sigma*N[1];
+
+ nfft_init_guru(ths->act_nfft_plan,2,N,M,n,m, FG_PSI| MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);
+
+ if(ths->act_nfft_plan->nfft_flags & PRE_ONE_PSI)
+ nfft_precompute_one_psi(ths->act_nfft_plan);
+
+ ths->set_fftw_plan1[0]=ths->act_nfft_plan->my_fftw_plan1;
+ ths->set_fftw_plan2[0]=ths->act_nfft_plan->my_fftw_plan2;
+
+ for(r=1;r<=J/2;r++)
+ {
+ N[0]=X(exp2i)(r); n[0]=ths->sigma*N[0];
+ N[1]=X(exp2i)(J-r); n[1]=ths->sigma*N[1];
+ ths->set_fftw_plan1[r] =
+ fftw_plan_dft(2, n, ths->act_nfft_plan->g1, ths->act_nfft_plan->g2,
+ FFTW_FORWARD, ths->act_nfft_plan->fftw_flags);
+
+ ths->set_fftw_plan2[r] =
+ fftw_plan_dft(2, n, ths->act_nfft_plan->g2, ths->act_nfft_plan->g1,
+ FFTW_BACKWARD, ths->act_nfft_plan->fftw_flags);
+ }
+
+ /* planning the 1d nffts */
+ for(r=0;r<=X(log2i)(m);r++)
+ {
+ N[0]=X(exp2i)(J-r); n[0]=ths->sigma*N[0]; /* ==N[1] of the 2 dimensional plan */
+
+ nfft_init_guru(&(ths->set_nfft_plan_1d[r]),1,N,M,n,m, MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);
+ ths->set_nfft_plan_1d[r].nfft_flags = ths->set_nfft_plan_1d[r].nfft_flags | FG_PSI;
+ ths->set_nfft_plan_1d[r].K=ths->act_nfft_plan->K;
+ ths->set_nfft_plan_1d[r].psi=ths->act_nfft_plan->psi;
+ }
+
+ /* center plan */
+ /* J/2 == floor(((double)J) / 2.0) */
+ N[0]=X(exp2i)(J/2+1); n[0]=ths->sigma*N[0];
+ N[1]=X(exp2i)(J/2+1); n[1]=ths->sigma*N[1];
+ nfft_init_guru(ths->center_nfft_plan,2,N,M,n, m, MALLOC_F| FFTW_INIT,
+ FFTW_MEASURE);
+ ths->center_nfft_plan->x= ths->act_nfft_plan->x;
+ ths->center_nfft_plan->nfft_flags = ths->center_nfft_plan->nfft_flags|
+ FG_PSI;
+ ths->center_nfft_plan->K=ths->act_nfft_plan->K;
+ ths->center_nfft_plan->psi=ths->act_nfft_plan->psi;
+
+ if(ths->flags & NSDFT)
+ {
+ ths->index_sparse_to_full=(int*)nfft_malloc(ths->N_total*sizeof(int));
+ init_index_sparse_to_full_2d(ths);
+ }
+}
+#endif
+
+/*========================================================*/
+/* J >1, no precomputation at all!! */
+#ifdef GAUSSIAN
+static void nsfft_init_3d(nsfft_plan *ths, int J, int M, int m, unsigned snfft_flags)
+{
+ int r,rr,a,b;
+ int N[3];
+ int n[3];
+
+ ths->flags=snfft_flags;
+ ths->sigma=2;
+ ths->J=J;
+ ths->M_total=M;
+ ths->N_total=6*X(exp2i)(J)*(X(exp2i)((J+1)/2+1)-1)+X(exp2i)(3*(J/2+1));
+
+ /* memory allocation */
+ ths->f = (double _Complex *)nfft_malloc(M*sizeof(double _Complex));
+ ths->f_hat = (double _Complex *)nfft_malloc(ths->N_total*sizeof(double _Complex));
+
+ ths->x_102= (double*)nfft_malloc(3*M*sizeof(double));
+ ths->x_201= (double*)nfft_malloc(3*M*sizeof(double));
+ ths->x_120= (double*)nfft_malloc(3*M*sizeof(double));
+ ths->x_021= (double*)nfft_malloc(3*M*sizeof(double));
+
+ ths->act_nfft_plan = (nfft_plan*)nfft_malloc(sizeof(nfft_plan));
+ ths->center_nfft_plan = (nfft_plan*)nfft_malloc(sizeof(nfft_plan));
+
+ ths->set_fftw_plan1=(fftw_plan*) nfft_malloc(((J+1)/2+1)*sizeof(fftw_plan));
+ ths->set_fftw_plan2=(fftw_plan*) nfft_malloc(((J+1)/2+1)*sizeof(fftw_plan));
+
+ ths->set_nfft_plan_1d = (nfft_plan*) nfft_malloc((X(log2i)(m)+1)*(sizeof(nfft_plan)));
+ ths->set_nfft_plan_2d = (nfft_plan*) nfft_malloc((X(log2i)(m)+1)*(sizeof(nfft_plan)));
+
+ /* planning the small nffts */
+ /* r=0 */
+ N[0]=1; n[0]=ths->sigma*N[0];
+ N[1]=1; n[1]=ths->sigma*N[1];
+ N[2]=X(exp2i)(J); n[2]=ths->sigma*N[2];
+
+ nfft_init_guru(ths->act_nfft_plan,3,N,M,n,m, FG_PSI| MALLOC_X| MALLOC_F, FFTW_MEASURE);
+
+ if(ths->act_nfft_plan->nfft_flags & PRE_ONE_PSI)
+ nfft_precompute_one_psi(ths->act_nfft_plan);
+
+ /* malloc g1, g2 for maximal size */
+ ths->act_nfft_plan->g1 = nfft_malloc(ths->sigma*ths->sigma*ths->sigma*X(exp2i)(J+(J+1)/2)*sizeof(double _Complex));
+ ths->act_nfft_plan->g2 = nfft_malloc(ths->sigma*ths->sigma*ths->sigma*X(exp2i)(J+(J+1)/2)*sizeof(double _Complex));
+
+ ths->act_nfft_plan->my_fftw_plan1 =
+ fftw_plan_dft(3, n, ths->act_nfft_plan->g1, ths->act_nfft_plan->g2,
+ FFTW_FORWARD, ths->act_nfft_plan->fftw_flags);
+ ths->act_nfft_plan->my_fftw_plan2 =
+ fftw_plan_dft(3, n, ths->act_nfft_plan->g2, ths->act_nfft_plan->g1,
+ FFTW_BACKWARD, ths->act_nfft_plan->fftw_flags);
+
+ ths->set_fftw_plan1[0]=ths->act_nfft_plan->my_fftw_plan1;
+ ths->set_fftw_plan2[0]=ths->act_nfft_plan->my_fftw_plan2;
+
+ for(rr=1;rr<=(J+1)/2;rr++)
+ {
+ a=X(exp2i)(J-rr);
+ b=X(exp2i)(rr);
+
+ r=NFFT_MIN(rr,J-rr);
+
+ n[0]=ths->sigma*X(exp2i)(r);
+ if(a<b)
+ n[1]=ths->sigma*X(exp2i)(J-r);
+ else
+ n[1]=ths->sigma*X(exp2i)(r);
+ n[2]=ths->sigma*X(exp2i)(J-r);
+
+ ths->set_fftw_plan1[rr] =
+ fftw_plan_dft(3, n, ths->act_nfft_plan->g1, ths->act_nfft_plan->g2,
+ FFTW_FORWARD, ths->act_nfft_plan->fftw_flags);
+ ths->set_fftw_plan2[rr] =
+ fftw_plan_dft(3, n, ths->act_nfft_plan->g2, ths->act_nfft_plan->g1,
+ FFTW_BACKWARD, ths->act_nfft_plan->fftw_flags);
+ }
+
+ /* planning the 1d nffts */
+ for(r=0;r<=X(log2i)(m);r++)
+ {
+ N[0]=X(exp2i)(J-r); n[0]=ths->sigma*N[0];
+ N[1]=X(exp2i)(J-r); n[1]=ths->sigma*N[1];
+
+ if(N[0]>m)
+ {
+ nfft_init_guru(&(ths->set_nfft_plan_1d[r]),1,N,M,n,m, MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);
+ ths->set_nfft_plan_1d[r].nfft_flags = ths->set_nfft_plan_1d[r].nfft_flags | FG_PSI;
+ ths->set_nfft_plan_1d[r].K=ths->act_nfft_plan->K;
+ ths->set_nfft_plan_1d[r].psi=ths->act_nfft_plan->psi;
+ nfft_init_guru(&(ths->set_nfft_plan_2d[r]),2,N,M,n,m, MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);
+ ths->set_nfft_plan_2d[r].nfft_flags = ths->set_nfft_plan_2d[r].nfft_flags | FG_PSI;
+ ths->set_nfft_plan_2d[r].K=ths->act_nfft_plan->K;
+ ths->set_nfft_plan_2d[r].psi=ths->act_nfft_plan->psi;
+ }
+ }
+
+ /* center plan */
+ /* J/2 == floor(((double)J) / 2.0) */
+ N[0]=X(exp2i)(J/2+1); n[0]=ths->sigma*N[0];
+ N[1]=X(exp2i)(J/2+1); n[1]=ths->sigma*N[1];
+ N[2]=X(exp2i)(J/2+1); n[2]=ths->sigma*N[2];
+ nfft_init_guru(ths->center_nfft_plan,3,N,M,n, m, MALLOC_F| FFTW_INIT,
+ FFTW_MEASURE);
+ ths->center_nfft_plan->x= ths->act_nfft_plan->x;
+ ths->center_nfft_plan->nfft_flags = ths->center_nfft_plan->nfft_flags|
+ FG_PSI;
+ ths->center_nfft_plan->K=ths->act_nfft_plan->K;
+ ths->center_nfft_plan->psi=ths->act_nfft_plan->psi;
+
+ if(ths->flags & NSDFT)
+ {
+ ths->index_sparse_to_full=(int*)nfft_malloc(ths->N_total*sizeof(int));
+ init_index_sparse_to_full_3d(ths);
+ }
+}
+#endif
+
+#ifdef GAUSSIAN
+void nsfft_init(nsfft_plan *ths, int d, int J, int M, int m, unsigned flags)
+{
+ ths->d=d;
+
+ if(ths->d==2)
+ nsfft_init_2d(ths, J, M, m, flags);
+ else
+ nsfft_init_3d(ths, J, M, m, flags);
+
+
+ ths->mv_trafo = (void (*) (void* ))nsfft_trafo;
+ ths->mv_adjoint = (void (*) (void* ))nsfft_adjoint;
+}
+#else
+void nsfft_init(nsfft_plan *ths, int d, int J, int M, int m, unsigned flags)
+{
+ UNUSED(ths);
+ UNUSED(d);
+ UNUSED(J);
+ UNUSED(M);
+ UNUSED(m);
+ UNUSED(flags);
+ fprintf(stderr,
+ "\nError in kernel/nsfft_init: require GAUSSIAN window function\n");
+}
+#endif
+
+static void nsfft_finalize_2d(nsfft_plan *ths)
+{
+ int r;
+
+ if(ths->flags & NSDFT)
+ nfft_free(ths->index_sparse_to_full);
+
+ /* center plan */
+ ths->center_nfft_plan->nfft_flags = ths->center_nfft_plan->nfft_flags ^ FG_PSI;
+ nfft_finalize(ths->center_nfft_plan);
+
+ /* the 1d nffts */
+ for(r=0;r<=X(log2i)(ths->act_nfft_plan->m);r++)
+ {
+ ths->set_nfft_plan_1d[r].nfft_flags =
+ ths->set_nfft_plan_1d[r].nfft_flags ^ FG_PSI;
+ nfft_finalize(&(ths->set_nfft_plan_1d[r]));
+ }
+
+ /* finalize the small nffts */
+ ths->act_nfft_plan->my_fftw_plan2=ths->set_fftw_plan2[0];
+ ths->act_nfft_plan->my_fftw_plan1=ths->set_fftw_plan1[0];
+
+ for(r=1;r<=ths->J/2;r++)
+ {
+ fftw_destroy_plan(ths->set_fftw_plan2[r]);
+ fftw_destroy_plan(ths->set_fftw_plan1[r]);
+ }
+
+ /* r=0 */
+ nfft_finalize(ths->act_nfft_plan);
+
+ nfft_free(ths->set_nfft_plan_1d);
+
+ nfft_free(ths->set_fftw_plan2);
+ nfft_free(ths->set_fftw_plan1);
+
+ nfft_free(ths->x_transposed);
+
+ nfft_free(ths->f_hat);
+ nfft_free(ths->f);
+}
+
+static void nsfft_finalize_3d(nsfft_plan *ths)
+{
+ int r;
+
+ if(ths->flags & NSDFT)
+ nfft_free(ths->index_sparse_to_full);
+
+ /* center plan */
+ ths->center_nfft_plan->nfft_flags = ths->center_nfft_plan->nfft_flags ^ FG_PSI;
+ nfft_finalize(ths->center_nfft_plan);
+
+ /* the 1d and 2d nffts */
+ for(r=0;r<=X(log2i)(ths->act_nfft_plan->m);r++)
+ {
+ if(X(exp2i)(ths->J-r)>ths->act_nfft_plan->m)
+ {
+ ths->set_nfft_plan_2d[r].nfft_flags = ths->set_nfft_plan_2d[r].nfft_flags ^ FG_PSI;
+ nfft_finalize(&(ths->set_nfft_plan_2d[r]));
+ ths->set_nfft_plan_1d[r].nfft_flags = ths->set_nfft_plan_1d[r].nfft_flags ^ FG_PSI;
+ nfft_finalize(&(ths->set_nfft_plan_1d[r]));
+ }
+ }
+
+ /* finalize the small nffts */
+ ths->act_nfft_plan->my_fftw_plan2=ths->set_fftw_plan2[0];
+ ths->act_nfft_plan->my_fftw_plan1=ths->set_fftw_plan1[0];
+
+ for(r=1;r<=(ths->J+1)/2;r++)
+ {
+ fftw_destroy_plan(ths->set_fftw_plan2[r]);
+ fftw_destroy_plan(ths->set_fftw_plan1[r]);
+ }
+
+ /* r=0 */
+ nfft_finalize(ths->act_nfft_plan);
+
+ nfft_free(ths->set_nfft_plan_1d);
+ nfft_free(ths->set_nfft_plan_2d);
+
+ nfft_free(ths->set_fftw_plan2);
+ nfft_free(ths->set_fftw_plan1);
+
+ nfft_free(ths->x_102);
+ nfft_free(ths->x_201);
+ nfft_free(ths->x_120);
+ nfft_free(ths->x_021);
+
+ nfft_free(ths->f_hat);
+ nfft_free(ths->f);
+}
+
+void nsfft_finalize(nsfft_plan *ths)
+{
+ if(ths->d==2)
+ nsfft_finalize_2d(ths);
+ else
+ nsfft_finalize_3d(ths);
+}
diff --git a/kernel/solver/Makefile.am b/kernel/solver/Makefile.am
new file mode 100644
index 0000000..9f8e9d5
--- /dev/null
+++ b/kernel/solver/Makefile.am
@@ -0,0 +1,4 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_LTLIBRARIES = libsolver.la
+libsolver_la_SOURCES = solver.c
diff --git a/kernel/solver/Makefile.in b/kernel/solver/Makefile.in
new file mode 100644
index 0000000..d3050ee
--- /dev/null
+++ b/kernel/solver/Makefile.in
@@ -0,0 +1,553 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/solver
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libsolver_la_LIBADD =
+am_libsolver_la_OBJECTS = solver.lo
+libsolver_la_OBJECTS = $(am_libsolver_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libsolver_la_SOURCES)
+DIST_SOURCES = $(libsolver_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+noinst_LTLIBRARIES = libsolver.la
+libsolver_la_SOURCES = solver.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/solver/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu kernel/solver/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libsolver.la: $(libsolver_la_OBJECTS) $(libsolver_la_DEPENDENCIES) $(EXTRA_libsolver_la_DEPENDENCIES)
+ $(LINK) $(libsolver_la_OBJECTS) $(libsolver_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/solver.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/solver/solver.c b/kernel/solver/solver.c
new file mode 100644
index 0000000..1b48c0e
--- /dev/null
+++ b/kernel/solver/solver.c
@@ -0,0 +1,728 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: solver.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/*! \file solver.c
+ * \brief Implementation file for the solver module
+ * \author Stefan Kunis
+ */
+#include "config.h"
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include "nfft3util.h"
+#include "nfft3.h"
+
+void solver_init_advanced_complex(solver_plan_complex* ths, nfft_mv_plan_complex *mv, unsigned flags)
+{
+ ths->mv = mv;
+ ths->flags = flags;
+
+ ths->y = (fftw_complex*)nfft_malloc(ths->mv->M_total*sizeof(fftw_complex));
+ ths->r_iter = (fftw_complex*)nfft_malloc(ths->mv->M_total*sizeof(fftw_complex));
+ ths->f_hat_iter = (fftw_complex*)nfft_malloc(ths->mv->N_total*sizeof(fftw_complex));
+ ths->p_hat_iter = (fftw_complex*)nfft_malloc(ths->mv->N_total*sizeof(fftw_complex));
+
+ if(ths->flags & LANDWEBER)
+ ths->z_hat_iter = ths->p_hat_iter;
+
+ if(ths->flags & STEEPEST_DESCENT)
+ {
+ ths->z_hat_iter = ths->p_hat_iter;
+ ths->v_iter = (fftw_complex*)nfft_malloc(ths->mv->M_total*sizeof(fftw_complex));
+ }
+
+ if(ths->flags & CGNR)
+ {
+ ths->z_hat_iter = (fftw_complex*)nfft_malloc(ths->mv->N_total*sizeof(fftw_complex));
+ ths->v_iter = (fftw_complex*)nfft_malloc(ths->mv->M_total*sizeof(fftw_complex));
+ }
+
+ if(ths->flags & CGNE)
+ ths->z_hat_iter = ths->p_hat_iter;
+
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ ths->w = (double*) nfft_malloc(ths->mv->M_total*sizeof(double));
+
+ if(ths->flags & PRECOMPUTE_DAMP)
+ ths->w_hat = (double*) nfft_malloc(ths->mv->N_total*sizeof(double));
+}
+
+void solver_init_complex(solver_plan_complex* ths, nfft_mv_plan_complex *mv)
+{
+ solver_init_advanced_complex(ths, mv, CGNR);
+}
+
+void solver_before_loop_complex(solver_plan_complex* ths)
+{
+ nfft_cp_complex(ths->mv->f_hat, ths->f_hat_iter, ths->mv->N_total);
+
+ NFFT_SWAP_complex(ths->r_iter, ths->mv->f);
+ ths->mv->mv_trafo(ths->mv);
+ NFFT_SWAP_complex(ths->r_iter, ths->mv->f);
+
+ nfft_upd_axpy_complex(ths->r_iter, -1.0, ths->y, ths->mv->M_total);
+
+ if((!(ths->flags & LANDWEBER)) || (ths->flags & NORMS_FOR_LANDWEBER))
+ {
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ ths->dot_r_iter = nfft_dot_w_complex(ths->r_iter, ths->w,
+ ths->mv->M_total);
+ else
+ ths->dot_r_iter = nfft_dot_complex(ths->r_iter, ths->mv->M_total);
+ }
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ nfft_cp_w_complex(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+ else
+ nfft_cp_complex(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+ NFFT_SWAP_complex(ths->z_hat_iter, ths->mv->f_hat);
+ ths->mv->mv_adjoint(ths->mv);
+ NFFT_SWAP_complex(ths->z_hat_iter, ths->mv->f_hat);
+
+ if((!(ths->flags & LANDWEBER)) || (ths->flags & NORMS_FOR_LANDWEBER))
+ {
+ if(ths->flags & PRECOMPUTE_DAMP)
+ ths->dot_z_hat_iter = nfft_dot_w_complex(ths->z_hat_iter, ths->w_hat,
+ ths->mv->N_total);
+ else
+ ths->dot_z_hat_iter = nfft_dot_complex(ths->z_hat_iter,
+ ths->mv->N_total);
+ }
+
+ if(ths->flags & CGNE)
+ ths->dot_p_hat_iter = ths->dot_z_hat_iter;
+
+ if(ths->flags & CGNR)
+ nfft_cp_complex(ths->p_hat_iter, ths->z_hat_iter, ths->mv->N_total);
+} /* void solver_before_loop */
+
+/** void solver_loop_one_step_landweber */
+static void solver_loop_one_step_landweber_complex(solver_plan_complex* ths)
+{
+ if(ths->flags & PRECOMPUTE_DAMP)
+ nfft_upd_xpawy_complex(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+ ths->z_hat_iter, ths->mv->N_total);
+ else
+ nfft_upd_xpay_complex(ths->f_hat_iter, ths->alpha_iter, ths->z_hat_iter,
+ ths->mv->N_total);
+
+ /*-----------------*/
+ nfft_cp_complex(ths->mv->f_hat, ths->f_hat_iter, ths->mv->N_total);
+
+ NFFT_SWAP_complex(ths->r_iter,ths->mv->f);
+ ths->mv->mv_trafo(ths->mv);
+ NFFT_SWAP_complex(ths->r_iter,ths->mv->f);
+
+ nfft_upd_axpy_complex(ths->r_iter, -1.0, ths->y, ths->mv->M_total);
+
+ if(ths->flags & NORMS_FOR_LANDWEBER)
+ {
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ ths->dot_r_iter = nfft_dot_w_complex(ths->r_iter,ths->w,
+ ths->mv->M_total);
+ else
+ ths->dot_r_iter = nfft_dot_complex(ths->r_iter, ths->mv->M_total);
+ }
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ nfft_cp_w_complex(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+ else
+ nfft_cp_complex(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+ NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+ ths->mv->mv_adjoint(ths->mv);
+ NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+
+ if(ths->flags & NORMS_FOR_LANDWEBER)
+ {
+ if(ths->flags & PRECOMPUTE_DAMP)
+ ths->dot_z_hat_iter = nfft_dot_w_complex(ths->z_hat_iter, ths->w_hat,
+ ths->mv->N_total);
+ else
+ ths->dot_z_hat_iter = nfft_dot_complex(ths->z_hat_iter,
+ ths->mv->N_total);
+ }
+} /* void solver_loop_one_step_landweber */
+
+/** void solver_loop_one_step_steepest_descent */
+static void solver_loop_one_step_steepest_descent_complex(solver_plan_complex *ths)
+{
+ if(ths->flags & PRECOMPUTE_DAMP)
+ nfft_cp_w_complex(ths->mv->f_hat, ths->w_hat, ths->z_hat_iter,
+ ths->mv->N_total);
+ else
+ nfft_cp_complex(ths->mv->f_hat, ths->z_hat_iter, ths->mv->N_total);
+
+ NFFT_SWAP_complex(ths->v_iter,ths->mv->f);
+ ths->mv->mv_trafo(ths->mv);
+ NFFT_SWAP_complex(ths->v_iter,ths->mv->f);
+
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ ths->dot_v_iter = nfft_dot_w_complex(ths->v_iter,ths->w,ths->mv->M_total);
+ else
+ ths->dot_v_iter = nfft_dot_complex(ths->v_iter, ths->mv->M_total);
+
+ /*-----------------*/
+ ths->alpha_iter = ths->dot_z_hat_iter / ths->dot_v_iter;
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_DAMP)
+ nfft_upd_xpawy_complex(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+ ths->z_hat_iter, ths->mv->N_total);
+ else
+ nfft_upd_xpay_complex(ths->f_hat_iter, ths->alpha_iter, ths->z_hat_iter,
+ ths->mv->N_total);
+
+ /*-----------------*/
+ nfft_upd_xpay_complex(ths->r_iter, -ths->alpha_iter, ths->v_iter,
+ ths->mv->M_total);
+
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ ths->dot_r_iter = nfft_dot_w_complex(ths->r_iter,ths->w,ths->mv->M_total);
+ else
+ ths->dot_r_iter = nfft_dot_complex(ths->r_iter, ths->mv->M_total);
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ nfft_cp_w_complex(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+ else
+ nfft_cp_complex(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+ NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+ ths->mv->mv_adjoint(ths->mv);
+ NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+
+ if(ths->flags & PRECOMPUTE_DAMP)
+ ths->dot_z_hat_iter = nfft_dot_w_complex(ths->z_hat_iter, ths->w_hat,
+ ths->mv->N_total);
+ else
+ ths->dot_z_hat_iter = nfft_dot_complex(ths->z_hat_iter, ths->mv->N_total);
+} /* void solver_loop_one_step_steepest_descent */
+
+/** void solver_loop_one_step_cgnr */
+static void solver_loop_one_step_cgnr_complex(solver_plan_complex *ths)
+{
+ if(ths->flags & PRECOMPUTE_DAMP)
+ nfft_cp_w_complex(ths->mv->f_hat, ths->w_hat, ths->p_hat_iter,
+ ths->mv->N_total);
+ else
+ nfft_cp_complex(ths->mv->f_hat, ths->p_hat_iter, ths->mv->N_total);
+
+ NFFT_SWAP_complex(ths->v_iter,ths->mv->f);
+ ths->mv->mv_trafo(ths->mv);
+ NFFT_SWAP_complex(ths->v_iter,ths->mv->f);
+
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ ths->dot_v_iter = nfft_dot_w_complex(ths->v_iter,ths->w,ths->mv->M_total);
+ else
+ ths->dot_v_iter = nfft_dot_complex(ths->v_iter, ths->mv->M_total);
+
+ /*-----------------*/
+ ths->alpha_iter = ths->dot_z_hat_iter / ths->dot_v_iter;
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_DAMP)
+ nfft_upd_xpawy_complex(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+ ths->p_hat_iter, ths->mv->N_total);
+ else
+ nfft_upd_xpay_complex(ths->f_hat_iter, ths->alpha_iter, ths->p_hat_iter,
+ ths->mv->N_total);
+
+ /*-----------------*/
+ nfft_upd_xpay_complex(ths->r_iter, -ths->alpha_iter, ths->v_iter,
+ ths->mv->M_total);
+
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ ths->dot_r_iter = nfft_dot_w_complex(ths->r_iter,ths->w,ths->mv->M_total);
+ else
+ ths->dot_r_iter = nfft_dot_complex(ths->r_iter, ths->mv->M_total);
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ nfft_cp_w_complex(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+ else
+ nfft_cp_complex(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+ NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+ ths->mv->mv_adjoint(ths->mv);
+ NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+
+ ths->dot_z_hat_iter_old = ths->dot_z_hat_iter;
+ if(ths->flags & PRECOMPUTE_DAMP)
+ ths->dot_z_hat_iter = nfft_dot_w_complex(ths->z_hat_iter, ths->w_hat,
+ ths->mv->N_total);
+ else
+ ths->dot_z_hat_iter = nfft_dot_complex(ths->z_hat_iter, ths->mv->N_total);
+
+ /*-----------------*/
+ ths->beta_iter = ths->dot_z_hat_iter / ths->dot_z_hat_iter_old;
+
+ /*-----------------*/
+ nfft_upd_axpy_complex(ths->p_hat_iter, ths->beta_iter, ths->z_hat_iter,
+ ths->mv->N_total);
+} /* void solver_loop_one_step_cgnr */
+
+/** void solver_loop_one_step_cgne */
+static void solver_loop_one_step_cgne_complex(solver_plan_complex *ths)
+{
+ ths->alpha_iter = ths->dot_r_iter / ths->dot_p_hat_iter;
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_DAMP)
+ nfft_upd_xpawy_complex(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+ ths->p_hat_iter, ths->mv->N_total);
+ else
+ nfft_upd_xpay_complex(ths->f_hat_iter, ths->alpha_iter, ths->p_hat_iter,
+ ths->mv->N_total);
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_DAMP)
+ nfft_cp_w_complex(ths->mv->f_hat, ths->w_hat, ths->p_hat_iter,
+ ths->mv->N_total);
+ else
+ nfft_cp_complex(ths->mv->f_hat, ths->p_hat_iter, ths->mv->N_total);
+
+ ths->mv->mv_trafo(ths->mv);
+
+ nfft_upd_xpay_complex(ths->r_iter, -ths->alpha_iter, ths->mv->f,
+ ths->mv->M_total);
+
+ ths->dot_r_iter_old = ths->dot_r_iter;
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ ths->dot_r_iter = nfft_dot_w_complex(ths->r_iter,ths->w,ths->mv->M_total);
+ else
+ ths->dot_r_iter = nfft_dot_complex(ths->r_iter, ths->mv->M_total);
+
+ /*-----------------*/
+ ths->beta_iter = ths->dot_r_iter / ths->dot_r_iter_old;
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ nfft_cp_w_complex(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+ else
+ nfft_cp_complex(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+ ths->mv->mv_adjoint(ths->mv);
+
+ nfft_upd_axpy_complex(ths->p_hat_iter, ths->beta_iter, ths->mv->f_hat,
+ ths->mv->N_total);
+
+ if(ths->flags & PRECOMPUTE_DAMP)
+ ths->dot_p_hat_iter = nfft_dot_w_complex(ths->p_hat_iter, ths->w_hat,
+ ths->mv->N_total);
+ else
+ ths->dot_p_hat_iter = nfft_dot_complex(ths->p_hat_iter, ths->mv->N_total);
+} /* void solver_loop_one_step_cgne */
+
+/** void solver_loop_one_step */
+void solver_loop_one_step_complex(solver_plan_complex *ths)
+{
+ if(ths->flags & LANDWEBER)
+ solver_loop_one_step_landweber_complex(ths);
+
+ if(ths->flags & STEEPEST_DESCENT)
+ solver_loop_one_step_steepest_descent_complex(ths);
+
+ if(ths->flags & CGNR)
+ solver_loop_one_step_cgnr_complex(ths);
+
+ if(ths->flags & CGNE)
+ solver_loop_one_step_cgne_complex(ths);
+} /* void solver_loop_one_step */
+
+/** void solver_finalize */
+void solver_finalize_complex(solver_plan_complex *ths)
+{
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ nfft_free(ths->w);
+
+ if(ths->flags & PRECOMPUTE_DAMP)
+ nfft_free(ths->w_hat);
+
+ if(ths->flags & CGNR)
+ {
+ nfft_free(ths->v_iter);
+ nfft_free(ths->z_hat_iter);
+ }
+
+ if(ths->flags & STEEPEST_DESCENT)
+ nfft_free(ths->v_iter);
+
+ nfft_free(ths->p_hat_iter);
+ nfft_free(ths->f_hat_iter);
+
+ nfft_free(ths->r_iter);
+ nfft_free(ths->y);
+} /** void solver_finalize */
+
+
+/****************************************************************************/
+/****************************************************************************/
+/****************************************************************************/
+
+void solver_init_advanced_double(solver_plan_double* ths, nfft_mv_plan_double *mv, unsigned flags)
+{
+ ths->mv = mv;
+ ths->flags = flags;
+
+ ths->y = (double*)nfft_malloc(ths->mv->M_total*sizeof(double));
+ ths->r_iter = (double*)nfft_malloc(ths->mv->M_total*sizeof(double));
+ ths->f_hat_iter = (double*)nfft_malloc(ths->mv->N_total*sizeof(double));
+ ths->p_hat_iter = (double*)nfft_malloc(ths->mv->N_total*sizeof(double));
+
+ if(ths->flags & LANDWEBER)
+ ths->z_hat_iter = ths->p_hat_iter;
+
+ if(ths->flags & STEEPEST_DESCENT)
+ {
+ ths->z_hat_iter = ths->p_hat_iter;
+ ths->v_iter = (double*)nfft_malloc(ths->mv->M_total*sizeof(double));
+ }
+
+ if(ths->flags & CGNR)
+ {
+ ths->z_hat_iter = (double*)nfft_malloc(ths->mv->N_total*sizeof(double));
+ ths->v_iter = (double*)nfft_malloc(ths->mv->M_total*sizeof(double));
+ }
+
+ if(ths->flags & CGNE)
+ ths->z_hat_iter = ths->p_hat_iter;
+
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ ths->w = (double*) nfft_malloc(ths->mv->M_total*sizeof(double));
+
+ if(ths->flags & PRECOMPUTE_DAMP)
+ ths->w_hat = (double*) nfft_malloc(ths->mv->N_total*sizeof(double));
+}
+
+static void solver_init_double(solver_plan_double* ths, nfft_mv_plan_double *mv)
+{
+ solver_init_advanced_double(ths, mv, CGNR);
+}
+
+static void solver_before_loop_double(solver_plan_double* ths)
+{
+ nfft_cp_double(ths->mv->f_hat, ths->f_hat_iter, ths->mv->N_total);
+
+ NFFT_SWAP_double(ths->r_iter, ths->mv->f);
+ ths->mv->mv_trafo(ths->mv);
+ NFFT_SWAP_double(ths->r_iter, ths->mv->f);
+
+ nfft_upd_axpy_double(ths->r_iter, -1.0, ths->y, ths->mv->M_total);
+
+ if((!(ths->flags & LANDWEBER)) || (ths->flags & NORMS_FOR_LANDWEBER))
+ {
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ ths->dot_r_iter = nfft_dot_w_double(ths->r_iter, ths->w,
+ ths->mv->M_total);
+ else
+ ths->dot_r_iter = nfft_dot_double(ths->r_iter, ths->mv->M_total);
+ }
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ nfft_cp_w_double(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+ else
+ nfft_cp_double(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+ NFFT_SWAP_double(ths->z_hat_iter, ths->mv->f_hat);
+ ths->mv->mv_adjoint(ths->mv);
+ NFFT_SWAP_double(ths->z_hat_iter, ths->mv->f_hat);
+
+ if((!(ths->flags & LANDWEBER)) || (ths->flags & NORMS_FOR_LANDWEBER))
+ {
+ if(ths->flags & PRECOMPUTE_DAMP)
+ ths->dot_z_hat_iter = nfft_dot_w_double(ths->z_hat_iter, ths->w_hat,
+ ths->mv->N_total);
+ else
+ ths->dot_z_hat_iter = nfft_dot_double(ths->z_hat_iter,
+ ths->mv->N_total);
+ }
+
+ if(ths->flags & CGNE)
+ ths->dot_p_hat_iter = ths->dot_z_hat_iter;
+
+ if(ths->flags & CGNR)
+ nfft_cp_double(ths->p_hat_iter, ths->z_hat_iter, ths->mv->N_total);
+} /* void solver_before_loop */
+
+/** void solver_loop_one_step_landweber */
+static void solver_loop_one_step_landweber_double(solver_plan_double* ths)
+{
+ if(ths->flags & PRECOMPUTE_DAMP)
+ nfft_upd_xpawy_double(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+ ths->z_hat_iter, ths->mv->N_total);
+ else
+ nfft_upd_xpay_double(ths->f_hat_iter, ths->alpha_iter, ths->z_hat_iter,
+ ths->mv->N_total);
+
+ /*-----------------*/
+ nfft_cp_double(ths->mv->f_hat, ths->f_hat_iter, ths->mv->N_total);
+
+ NFFT_SWAP_double(ths->r_iter,ths->mv->f);
+ ths->mv->mv_trafo(ths->mv);
+ NFFT_SWAP_double(ths->r_iter,ths->mv->f);
+
+ nfft_upd_axpy_double(ths->r_iter, -1.0, ths->y, ths->mv->M_total);
+
+ if(ths->flags & NORMS_FOR_LANDWEBER)
+ {
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ ths->dot_r_iter = nfft_dot_w_double(ths->r_iter,ths->w,
+ ths->mv->M_total);
+ else
+ ths->dot_r_iter = nfft_dot_double(ths->r_iter, ths->mv->M_total);
+ }
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ nfft_cp_w_double(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+ else
+ nfft_cp_double(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+ NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+ ths->mv->mv_adjoint(ths->mv);
+ NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+
+ if(ths->flags & NORMS_FOR_LANDWEBER)
+ {
+ if(ths->flags & PRECOMPUTE_DAMP)
+ ths->dot_z_hat_iter = nfft_dot_w_double(ths->z_hat_iter, ths->w_hat,
+ ths->mv->N_total);
+ else
+ ths->dot_z_hat_iter = nfft_dot_double(ths->z_hat_iter,
+ ths->mv->N_total);
+ }
+} /* void solver_loop_one_step_landweber */
+
+/** void solver_loop_one_step_steepest_descent */
+static void solver_loop_one_step_steepest_descent_double(solver_plan_double *ths)
+{
+ if(ths->flags & PRECOMPUTE_DAMP)
+ nfft_cp_w_double(ths->mv->f_hat, ths->w_hat, ths->z_hat_iter,
+ ths->mv->N_total);
+ else
+ nfft_cp_double(ths->mv->f_hat, ths->z_hat_iter, ths->mv->N_total);
+
+ NFFT_SWAP_double(ths->v_iter,ths->mv->f);
+ ths->mv->mv_trafo(ths->mv);
+ NFFT_SWAP_double(ths->v_iter,ths->mv->f);
+
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ ths->dot_v_iter = nfft_dot_w_double(ths->v_iter,ths->w,ths->mv->M_total);
+ else
+ ths->dot_v_iter = nfft_dot_double(ths->v_iter, ths->mv->M_total);
+
+ /*-----------------*/
+ ths->alpha_iter = ths->dot_z_hat_iter / ths->dot_v_iter;
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_DAMP)
+ nfft_upd_xpawy_double(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+ ths->z_hat_iter, ths->mv->N_total);
+ else
+ nfft_upd_xpay_double(ths->f_hat_iter, ths->alpha_iter, ths->z_hat_iter,
+ ths->mv->N_total);
+
+ /*-----------------*/
+ nfft_upd_xpay_double(ths->r_iter, -ths->alpha_iter, ths->v_iter,
+ ths->mv->M_total);
+
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ ths->dot_r_iter = nfft_dot_w_double(ths->r_iter,ths->w,ths->mv->M_total);
+ else
+ ths->dot_r_iter = nfft_dot_double(ths->r_iter, ths->mv->M_total);
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ nfft_cp_w_double(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+ else
+ nfft_cp_double(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+ NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+ ths->mv->mv_adjoint(ths->mv);
+ NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+
+ if(ths->flags & PRECOMPUTE_DAMP)
+ ths->dot_z_hat_iter = nfft_dot_w_double(ths->z_hat_iter, ths->w_hat,
+ ths->mv->N_total);
+ else
+ ths->dot_z_hat_iter = nfft_dot_double(ths->z_hat_iter, ths->mv->N_total);
+} /* void solver_loop_one_step_steepest_descent */
+
+/** void solver_loop_one_step_cgnr */
+static void solver_loop_one_step_cgnr_double(solver_plan_double *ths)
+{
+ if(ths->flags & PRECOMPUTE_DAMP)
+ nfft_cp_w_double(ths->mv->f_hat, ths->w_hat, ths->p_hat_iter,
+ ths->mv->N_total);
+ else
+ nfft_cp_double(ths->mv->f_hat, ths->p_hat_iter, ths->mv->N_total);
+
+ NFFT_SWAP_double(ths->v_iter,ths->mv->f);
+ ths->mv->mv_trafo(ths->mv);
+ NFFT_SWAP_double(ths->v_iter,ths->mv->f);
+
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ ths->dot_v_iter = nfft_dot_w_double(ths->v_iter,ths->w,ths->mv->M_total);
+ else
+ ths->dot_v_iter = nfft_dot_double(ths->v_iter, ths->mv->M_total);
+
+ /*-----------------*/
+ ths->alpha_iter = ths->dot_z_hat_iter / ths->dot_v_iter;
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_DAMP)
+ nfft_upd_xpawy_double(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+ ths->p_hat_iter, ths->mv->N_total);
+ else
+ nfft_upd_xpay_double(ths->f_hat_iter, ths->alpha_iter, ths->p_hat_iter,
+ ths->mv->N_total);
+
+ /*-----------------*/
+ nfft_upd_xpay_double(ths->r_iter, -ths->alpha_iter, ths->v_iter,
+ ths->mv->M_total);
+
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ ths->dot_r_iter = nfft_dot_w_double(ths->r_iter,ths->w,ths->mv->M_total);
+ else
+ ths->dot_r_iter = nfft_dot_double(ths->r_iter, ths->mv->M_total);
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ nfft_cp_w_double(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+ else
+ nfft_cp_double(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+ NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+ ths->mv->mv_adjoint(ths->mv);
+ NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+
+ ths->dot_z_hat_iter_old = ths->dot_z_hat_iter;
+ if(ths->flags & PRECOMPUTE_DAMP)
+ ths->dot_z_hat_iter = nfft_dot_w_double(ths->z_hat_iter, ths->w_hat,
+ ths->mv->N_total);
+ else
+ ths->dot_z_hat_iter = nfft_dot_double(ths->z_hat_iter, ths->mv->N_total);
+
+ /*-----------------*/
+ ths->beta_iter = ths->dot_z_hat_iter / ths->dot_z_hat_iter_old;
+
+ /*-----------------*/
+ nfft_upd_axpy_double(ths->p_hat_iter, ths->beta_iter, ths->z_hat_iter,
+ ths->mv->N_total);
+} /* void solver_loop_one_step_cgnr */
+
+/** void solver_loop_one_step_cgne */
+static void solver_loop_one_step_cgne_double(solver_plan_double *ths)
+{
+ ths->alpha_iter = ths->dot_r_iter / ths->dot_p_hat_iter;
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_DAMP)
+ nfft_upd_xpawy_double(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+ ths->p_hat_iter, ths->mv->N_total);
+ else
+ nfft_upd_xpay_double(ths->f_hat_iter, ths->alpha_iter, ths->p_hat_iter,
+ ths->mv->N_total);
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_DAMP)
+ nfft_cp_w_double(ths->mv->f_hat, ths->w_hat, ths->p_hat_iter,
+ ths->mv->N_total);
+ else
+ nfft_cp_double(ths->mv->f_hat, ths->p_hat_iter, ths->mv->N_total);
+
+ ths->mv->mv_trafo(ths->mv);
+
+ nfft_upd_xpay_double(ths->r_iter, -ths->alpha_iter, ths->mv->f,
+ ths->mv->M_total);
+
+ ths->dot_r_iter_old = ths->dot_r_iter;
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ ths->dot_r_iter = nfft_dot_w_double(ths->r_iter,ths->w,ths->mv->M_total);
+ else
+ ths->dot_r_iter = nfft_dot_double(ths->r_iter, ths->mv->M_total);
+
+ /*-----------------*/
+ ths->beta_iter = ths->dot_r_iter / ths->dot_r_iter_old;
+
+ /*-----------------*/
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ nfft_cp_w_double(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+ else
+ nfft_cp_double(ths->mv->f, ths->r_iter, ths->mv->M_total);
+
+ ths->mv->mv_adjoint(ths->mv);
+
+ nfft_upd_axpy_double(ths->p_hat_iter, ths->beta_iter, ths->mv->f_hat,
+ ths->mv->N_total);
+
+ if(ths->flags & PRECOMPUTE_DAMP)
+ ths->dot_p_hat_iter = nfft_dot_w_double(ths->p_hat_iter, ths->w_hat,
+ ths->mv->N_total);
+ else
+ ths->dot_p_hat_iter = nfft_dot_double(ths->p_hat_iter, ths->mv->N_total);
+} /* void solver_loop_one_step_cgne */
+
+/** void solver_loop_one_step */
+static void solver_loop_one_step_double(solver_plan_double *ths)
+{
+ if(ths->flags & LANDWEBER)
+ solver_loop_one_step_landweber_double(ths);
+
+ if(ths->flags & STEEPEST_DESCENT)
+ solver_loop_one_step_steepest_descent_double(ths);
+
+ if(ths->flags & CGNR)
+ solver_loop_one_step_cgnr_double(ths);
+
+ if(ths->flags & CGNE)
+ solver_loop_one_step_cgne_double(ths);
+} /* void solver_loop_one_step */
+
+/** void solver_finalize */
+static void solver_finalize_double(solver_plan_double *ths)
+{
+ if(ths->flags & PRECOMPUTE_WEIGHT)
+ nfft_free(ths->w);
+
+ if(ths->flags & PRECOMPUTE_DAMP)
+ nfft_free(ths->w_hat);
+
+ if(ths->flags & CGNR)
+ {
+ nfft_free(ths->v_iter);
+ nfft_free(ths->z_hat_iter);
+ }
+
+ if(ths->flags & STEEPEST_DESCENT)
+ nfft_free(ths->v_iter);
+
+ nfft_free(ths->p_hat_iter);
+ nfft_free(ths->f_hat_iter);
+
+ nfft_free(ths->r_iter);
+ nfft_free(ths->y);
+} /** void solver_finalize */
diff --git a/kernel/util/Makefile.am b/kernel/util/Makefile.am
new file mode 100644
index 0000000..fb5ad82
--- /dev/null
+++ b/kernel/util/Makefile.am
@@ -0,0 +1,4 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_LTLIBRARIES = libutil.la
+libutil_la_SOURCES = malloc.c sinc.c lambda.c bessel_i0.c float.c int.c error.c
\ No newline at end of file
diff --git a/kernel/util/Makefile.in b/kernel/util/Makefile.in
new file mode 100644
index 0000000..b7c5ce1
--- /dev/null
+++ b/kernel/util/Makefile.in
@@ -0,0 +1,560 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = kernel/util
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libutil_la_LIBADD =
+am_libutil_la_OBJECTS = malloc.lo sinc.lo lambda.lo bessel_i0.lo \
+ float.lo int.lo error.lo
+libutil_la_OBJECTS = $(am_libutil_la_OBJECTS)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libutil_la_SOURCES)
+DIST_SOURCES = $(libutil_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+noinst_LTLIBRARIES = libutil.la
+libutil_la_SOURCES = malloc.c sinc.c lambda.c bessel_i0.c float.c int.c error.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/util/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu kernel/util/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libutil.la: $(libutil_la_OBJECTS) $(libutil_la_DEPENDENCIES) $(EXTRA_libutil_la_DEPENDENCIES)
+ $(LINK) $(libutil_la_OBJECTS) $(libutil_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bessel_i0.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/error.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/float.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/int.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lambda.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/malloc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/sinc.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/kernel/util/bessel_i0.c b/kernel/util/bessel_i0.c
new file mode 100644
index 0000000..898526c
--- /dev/null
+++ b/kernel/util/bessel_i0.c
@@ -0,0 +1,318 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+#if defined(NFFT_LDOUBLE)
+ #if LDBL_MANT_DIG > 64
+ /* long double 128 bit wide */
+ static const R P1[] =
+ {
+ K(1.00715709113717408460589579223209941204261347125985390244049122),
+ K(0.244951997023176876020320575838917179801959212259109588711443322),
+ K(0.007157677421552158878119583351756319398653762265084335703499437),
+ K(0.000088638803372684623765617528646130117285577351082745565226135),
+ K(5.86290506716174293160891590037213629006472953235560773267e-7),
+ K(2.345957469650316879673588315314269880856753475545514611e-9),
+ K(6.128655873200031753345017339110506400750029700912053e-12),
+ K(1.0986892011606471142197070904902679807307454250063e-14),
+ K(1.3971139352985872209413265761909675621623302845e-17),
+ K(1.2871864763402201040551492995178709443354555e-20),
+ K(8.691006015934819586402366491436791599814e-24),
+ K(4.309390047550403478410330783891146603e-27),
+ K(1.555612957227921944637472907134242e-30),
+ K(3.9925388022711127965090640127e-34),
+ K(6.9368410036374068977799409e-38),
+ K(7.357454531748581565018e-42),
+ K(3.62204101214442072e-46),
+ };
+ static const R Q1[] =
+ {
+ K(1.000007070784273109528051454385187718969110645914059499666326971665),
+ K(-0.005313926453449002844879821442805584438144938596471790433918964154),
+ K(7.070788418542362565462155969863941136682888242514039780835548e-6),
+ K(-6.26540971437695808708857953483635930152829451235344028056e-9),
+ K(4.145433773149898726789014352388133793941127788810021957e-12),
+ K(-2.175603200497645955857316018087216481968512641548262e-15),
+ K(9.38635995876117135738708302122439402494096616172e-19),
+ K(-3.40237206590514988600833435986797066144532635e-22),
+ K(1.04920116497922307284730776882365699575587e-25),
+ K(-2.7669765371483918815184949580784634161e-29),
+ K(6.231564149372584873279011515844227e-33),
+ K(-1.188050982913851622946881814029e-36),
+ K(1.88293159106694034780937099e-40),
+ K(-2.4019827304263718078055e-44),
+ K(2.329008315410200325e-48),
+ K(-1.5351885198203e-52),
+ K(5.185989964e-57),
+ };
+ static const R P2[] =
+ {
+ K( 131.0667020533290798466779416062094395070734202211890460026693857),
+ K(-245.6303545941878773983069709370348347580041325639555236454969282),
+ K( 204.5101554148308448423458719550952945685069457114308003995567211),
+ K(-150.5327320302921153754033870344894598759293143264072490756636477),
+ K( 98.7912567249134681293252237328232822188103014960829409778733265),
+ K(-57.7019241687318590480852440271548151666166507997357208465833492),
+ K( 30.1081598594932287475081756049550869990287890532877175670317803),
+ K(-14.0088712491952531569334147267018927351724433165829632848926311),
+ K( 5.8111909743388254524987383393719023598144356156326152933831237),
+ K(-2.1414136626793476610653760169160704073350780611789294609123711),
+ K( 0.698259559703142895902111022926235616592885506170181809796723),
+ K(-0.2001189347807367129846000381714457873845590394096920427488356),
+ K( 0.049988621846192684047867347253361546337456980171441178625268),
+ K(-0.0107553807128048320349112565182564637746370430259714241685807),
+ K( 0.0019628478791093008488874963820323167136472914702684286586238),
+ K(-0.0002975064821201439959012839810796951490827490578144599267114),
+ K( 0.0000363948822068787975159479880539390140326476204059270500102),
+ K(-3.4500354506312803346122587812035952285744626406680126004e-6),
+ K( 2.389194163273735466736165111640837640682648262451843124e-7),
+ K(-1.10522228579658847710719851107420853059835206797979003e-8),
+ K( 2.998585735858447897961231663140456464729911623332484e-10),
+ K(-3.9833617558882606404645795329229040634928477778665e-12),
+ K( 1.92588438006565847602499920031655017544553574078e-14),
+ K(-1.53988141966712757209882685942469734803820881e-17)
+ };
+ static const R Q2[] =
+ {
+ K(328.4489907350967829456654595549647170421869780143590268003242948),
+ K(-615.575319575198219705670766725559477112082560070865403723416427),
+ K(512.563661235514015228169012911053008163272899480360140632585558),
+ K(-377.3415411557897134242242685951784724031156711312221525972796826),
+ K(247.6887960380354072297631204916926385047383091206925653242453925),
+ K(-144.7079367047916629699737294050207521413589574809430211064537016),
+ K(75.5300501439366128901130531145623549019791219037305096822646727),
+ K(-35.1562871183824787711155827433330019401972267325168728838283815),
+ K(14.5900995053625141158588399870084373879991873744753473985888771),
+ K(-5.3793167684795558315535956122846115342243771791771104555817078),
+ K(1.7551860916884001665224751521627837644140913167505738803593836),
+ K(-0.5034275191915128601243198185547065251560284487106213345738464),
+ K(0.1258761177781805904401665597080296597844219207555140252667602),
+ K(-0.0271165711067811527517031577204913417520417117202287079370524),
+ K(0.0049566968097755025323253093106955508273120444565853663949773),
+ K(-0.0007529042621964042565348473109633952383792675486716081916002),
+ K(0.0000923845012025941529926888028246088283227759969619552077927),
+ K(-8.7971061636613823628316954758674029940675792754742342069e-6),
+ K(6.136252042100256280345626781919643641626278378156829218e-7),
+ K(-2.87514497545628209951433938237642236070094379906239019e-8),
+ K(7.99982739755782677965258184972152681716223485333226e-10),
+ K(-1.12250050360331111260828032356887810736651792918878e-11),
+ K(6.221827386743849038481605158298006999161167883e-14),
+ K(-8.0950402455773560717067392049638116407074069e-17)
+ };
+ #elif LDBL_MANT_DIG == 64
+ /* long double 96 bit wide */
+ static const R P1[] =
+ {
+ K(1.00696388290874250231638626673686646317801154370159972703168538),
+ K(0.243352848727738955738908687369450214577920342918851509272408866),
+ K(0.006964401160721188186398281247079919082283450941469460164590432),
+ K(0.000083047334117897959145500056901191736030823531931380263686302),
+ K(5.18256420384764810882467760619532575731801821889985626099e-7),
+ K(1.90790611016475818883461118145629029943434891680660527e-9),
+ K(4.44170587990105074420754325358582895345307949815573e-12),
+ K(6.805150196466153819995090798791966304827558189423e-15),
+ K(6.985104315031938858779570788468047860794936128e-18),
+ K(4.785507068734939741097928056648844894386614e-21),
+ K(2.117077490896605677726199140622837572025e-24),
+ K(5.52919580174986488729896702518475621e-28),
+ K(6.5666588969169003434516942087381e-32),
+ };
+ static const R Q1[] =
+ {
+ K(1.000011863675914860400478598182318948452642744176732473923183795358),
+ K(-0.006896324225185339751945118908659032102601115341265224641280055928),
+ K(0.00001186368725103095674191039208189536570056102297912907572890034),
+ K(-1.3496696876875206170114218872940978330152830864048922600366e-8),
+ K(1.1336174449932022007831556161183407392648142591512923821e-11),
+ K(-7.422841655569707018644701823047396523966712871897812e-15),
+ K(3.893669273036094904159100761627937282479044304922e-18),
+ K(-1.651720545895290413869725701665259282787265642e-21),
+ K(5.6323805635535562808481781647661895955232e-25),
+ K(-1.50728066570923164846664348266414336373e-28),
+ K(3.006044492319661074666639642233229e-32),
+ K(-4.010148023149017379419706572721e-36),
+ K(2.70282874465984817539266054e-40),
+ };
+ static const R P2[] =
+ {
+ K( 1.30090423521760256476093919023146864017751590623897710895862681),
+ K(-1.981041925270972574120174940817336830170017871902975653312750388),
+ K( 0.956892580228917795561363651877698243164566364537052353014543669),
+ K(-0.295476285312266394050596510402082979039773201845265239542019439),
+ K( 0.056978837924988815165935230495950981635872574537538384147033652),
+ K(-0.006299149197554616295736173514236214970859775932020376086036399),
+ K( 0.000353716966863384475462973243411450895641022763240331882363443),
+ K(-8.707624424632528381900923003415938761710942641810978203625e-6),
+ K( 7.283705999222063845686558855093093825421931939071318202e-8),
+ K(-9.7967727386492889920273780071218382357131320542055799e-11)
+ };
+ static const R Q2[] =
+ {
+ K( 3.257608431020108786259398271424889402309379351594793640349460063),
+ K(-4.96363276525502538609792324882976732173260916421950408693842731),
+ K( 2.400495835659089927333294199555080092801133193497330702140754591),
+ K(-0.742868968166381852162379299256973953894545292197384361382965225),
+ K( 0.143801810439830068463911726822151703498931831272162081681231077),
+ K(-0.016019224718850575023820322478614758671031103220377245057110662),
+ K( 0.000914623505897601721718970098041677534130323750396506936364887),
+ K(-0.000023411644633126949191317085153966622167096685843127825287574),
+ K( 2.17705048674331703171406080664526952334380771487046428339e-7),
+ K(-4.47580289731041130181939560179689655281441839562189718e-10)
+ };
+ #else
+ #error Unsupported size of long double
+ #endif
+#elif defined(NFFT_SINGLE)
+ /* float */
+ static const R P1[] =
+ {
+ K(1.006634511033311726164163027592274220828216885723379609007274761),
+ K(0.240606487720090757394176928596156553834296465200311569457994763),
+ K(0.006634921274522227156198202198389031672287220144321235665461021),
+ K(0.000073749622820821337100502174723273851941734199062726870961819),
+ K(4.10243517822171814488230564074819973544765129449450710122e-7),
+ K(1.262110026222369902633819303536802438120823461060572684e-9),
+ K(2.218532296437410634454463125960648541194468552527652e-12),
+ K(2.141504045536019682125761418851096299425878119158e-15),
+ K(9.19584570350722374435337612379408707845677156e-19),
+ };
+ static const R Q1[] =
+ {
+ K(1.000022624782705275228334312456728477812835742762369533496905023937),
+ K(-0.009614857078745003693609489751018087358244444264456521971379273084),
+ K(0.000022624818652773047747424411495054891627754515915461183178099877),
+ K(-3.4080521639954323706277061786236961377055349443081338572762e-8),
+ K(3.5947512112800645225066705862453058797853924958888263259e-11),
+ K(-2.7149805873212658218594464017972758572144265290831215e-14),
+ K(1.4293388301569282795540255590126107486209476445158e-17),
+ K(-4.771887851505849942903948600229238419570937509e-21),
+ K(7.68298982666756594543081799488936861257839e-25),
+ };
+ static const R P2[] =
+ {
+ K( 0.400758393969643840397216812932361963736749407866811083462461),
+ K(-0.0312216150704950438088565774064329777860642477326179964345542),
+ K( 0.0001215451718646727844117193541329442989170354233955281424116)
+ };
+ static const R Q2[] =
+ {
+ K( 1.00043733569136882353241680221279480297575523819814430369272934),
+ K(-0.0822433017391967535749382764476705160129315137731445852657631),
+ K( 0.00043733569136882353241680221279480297575523819814430369272934)
+ };
+#else
+ /* double */
+ static const R P1[] =
+ {
+ K(1.006897990143384859657820271920512961153421109156614230747188622),
+ K(0.242805341483041870658834102275462978674549112393424086979586278),
+ K(0.006898486035482686938510112687043665965094733332210445239567379),
+ K(0.000081165067173822070066416843139523709162208390998449005642346),
+ K(4.95896034564955471201271060753697747487292805350402943964e-7),
+ K(1.769262324717844587819564151110983803173733141412266849e-9),
+ K(3.936742942676484111899247866083681245613312522754135e-12),
+ K(5.65030097981781148787580946077568408874044779529e-15),
+ K(5.267856044117588097078633338366456262960465052e-18),
+ K(3.111192981528832405775039015470693622536939e-21),
+ K(1.071238669051606108411504195862449904664e-24),
+ K(1.66685455020362122704904175079692613e-28),
+ };
+ static const R Q1[] =
+ {
+ K(1.000013770640886533569435896302721489503868900260448440877422679934),
+ K(-0.007438195256024963574139196893944950727405523418354136393367554385),
+ K(0.000013770655915064256304772604385297068669909609091264440116789601),
+ K(-1.6794623118559896441239590667288215019925076196457659206142e-8),
+ K(1.50285363491992136130760477001818578470292828225498818e-11),
+ K(-1.0383232801211938342796582949062551517465351830706356e-14),
+ K(5.66233115275307483428203764087829782195312564006e-18),
+ K(-2.44062252162491829675666639093292109472275754e-21),
+ K(8.15441695513966815222186223740016719597617e-25),
+ K(-2.01117218503954384746303760121365911698e-28),
+ K(3.2919820158429806312377323449729691e-32),
+ K(-2.70343047912331415988664032397e-36),
+ };
+ static const R P2[] =
+ {
+ K( 0.4305671332839579065931339658100499864903788418438938270811),
+ K(-0.2897224581554843285637983312103876003389911968369470222427),
+ K( 0.0299419330186508349765969995362253891383950029259740306077),
+ K(-0.0010756807437990349677633120240742396555192749710627626584),
+ K( 0.0000116485185631252780743187413946316104574410146692335443),
+ K(-1.89995137955806752293614125586568854200245376235433e-08)
+ };
+ static const R Q2[] =
+ {
+ K(1.0762291019783101702628805159947862543863829764738274558421),
+ K(-0.7279167074883770739509279847502106137135422309409220238564),
+ K(0.0762629142282649564822465976300194596092279190843683614797),
+ K(-0.0028345107938479082322784040228834113914746923069059932628),
+ K(0.0000338122499547862193660816352332052228449426105409056376),
+ K(-8.28850093512263912295888947693700479250899073022595e-08)
+ };
+#endif
+
+static const INT N1 = sizeof(P1)/sizeof(P1[0]);
+static const INT M1 = sizeof(Q1)/sizeof(Q1[0]);
+static const INT N2 = sizeof(P2)/sizeof(P2[0]);
+static const INT M2 = sizeof(Q2)/sizeof(Q2[0]);
+
+static inline R evaluate_chebyshev(const INT n, const R *c, const R x)
+{
+ R a = c[n-2], b = c[n-1], t;
+ int j;
+
+ A(n >= 2);
+
+ for (j = n - 2; j > 0; j--)
+ {
+ t = c[j-1] - b;
+ b = a + K(2.0) * x * b;
+ a = t;
+ }
+ return a + x * b;
+}
+
+R X(bessel_i0)(R x)
+{
+ if (x < 0)
+ {
+ /* even function */
+ x = -x;
+ }
+
+ if (x == K(0.0))
+ return K(1.0);
+
+ if (x <= K(15.0))
+ {
+ /* x in (0, 15] */
+ const R y = x * x;
+ return evaluate_chebyshev(N1, P1, y) / evaluate_chebyshev(M1, Q1, y);
+ }
+ else
+ {
+ /* x in (15, \infty) */
+ const R y = (K(30.0) - x) / x;
+ return (EXP(x) / SQRT(x)) * (evaluate_chebyshev(N2, P2, y) /
+ evaluate_chebyshev(M2, Q2, y));
+ }
+}
diff --git a/kernel/util/error.c b/kernel/util/error.c
new file mode 100644
index 0000000..648fe3d
--- /dev/null
+++ b/kernel/util/error.c
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+static R cnrm1(const C *x, const INT n)
+{
+ INT k;
+ R nrm = K(0.0);
+
+ for (k = 0; k < n; k++)
+ nrm += CABS(x[k]);
+
+ return nrm;
+}
+
+static R nrm1(const R *x, const INT n)
+{
+ int k;
+ R nrm = K(0.0);
+
+ for (k = 0; k < n; k++)
+ nrm += FABS(x[k]);
+
+ return nrm;
+}
+
+static R cerr2(const C *x, const C *y, const INT n)
+{
+ int k;
+ R err = K(0.0);
+
+ if (!y)
+ {
+ for (k = 0; k < n; k++)
+ err += CONJ(x[k]) * x[k];
+ }
+ else
+ {
+ for (k = 0; k < n; k++)
+ err += CONJ(x[k]-y[k]) * (x[k]-y[k]);
+ }
+
+ return SQRT(err);
+}
+
+static R err2(const R *x, const R *y, const INT n)
+{
+ int k;
+ R err = K(0.0);
+
+ if (!y)
+ {
+ for (k = 0; k < n; k++)
+ err += x[k]*x[k];
+ }
+ else
+ {
+ for (k = 0; k < n; k++)
+ err += (x[k]-y[k]) * (x[k]-y[k]);
+ }
+
+ return SQRT(err);
+}
+
+static R cerri(const C *x, const C *y, const INT n)
+{
+ int k;
+ R err = K(0.0), t;
+
+ if (!y)
+ {
+ for (k = 0; k < n; k++)
+ {
+ t = CABS(x[k]);
+ err = MAX(err, t);
+ }
+ }
+ else
+ {
+ for (k = 0; k < n; k++)
+ {
+ t = CABS(x[k] - y[k]);
+ err = MAX(err, t);
+ }
+ }
+
+ return err;
+}
+
+static R erri(const R *x, const R *y, const INT n)
+{
+ int k;
+ R err = K(0.0), t;
+
+ if (!y)
+ {
+ for (k = 0; k < n; k++)
+ {
+ t = FABS(x[k]);
+ err = MAX(err, t);
+ }
+ }
+ else
+ {
+ for (k = 0; k < n; k++)
+ {
+ t = FABS(x[k] - y[k]);
+ err = MAX(err, t);
+ }
+ }
+
+ return err;
+}
+
+/** computes \f$\frac{\|x-y\|_{\infty}}{\|x\|_{\infty}} \f$
+ */
+R X(error_l_infty_complex)(const C *x, const C *y, const INT n)
+{
+ return (cerri(x, y, n)/cerri(x, 0, n));
+}
+
+/** computes \f$\frac{\|x-y\|_{\infty}}{\|x\|_{\infty}} \f$
+ */
+R X(error_l_infty_double)(const R *x, const R *y, const INT n)
+{
+ return (erri(x, y, n)/erri(x, 0, n));
+}
+
+/** computes \f$\frac{\|x-y\|_{\infty}}{\|z\|_1} \f$
+ */
+R X(error_l_infty_1_complex)(const C *x, const C *y, const INT n,
+ const C *z, const INT m)
+{
+ return (cerri(x, y, n)/cnrm1(z, m));
+}
+
+/** computes \f$\frac{\|x-y\|_{\infty}}{\|z\|_1} \f$
+ */
+R X(error_l_infty_1_double)(const R *x, const R *y, const INT n, const R *z,
+ const INT m)
+{
+ return (erri(x, y, n)/nrm1(z, m));
+}
+
+/** computes \f$\frac{\|x-y\|_2}{\|x\|_2} \f$
+ */
+R X(error_l_2_complex)(const C *x, const C *y, const INT n)
+{
+ return (cerr2(x, y, n)/cerr2(x, 0, n));
+}
+
+/** computes \f$\frac{\|x-y\|_2}{\|x\|_2} \f$
+ */
+R X(error_l_2_double)(const R *x, const R *y, const INT n)
+{
+ return (err2(x, y, n)/err2(x, NULL, n));
+}
diff --git a/kernel/util/float.c b/kernel/util/float.c
new file mode 100644
index 0000000..67d9ad5
--- /dev/null
+++ b/kernel/util/float.c
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+R X(float_property)(const float_property p)
+{
+ const R base = FLT_RADIX;
+ const R eps = EPSILON;
+ const R t = MANT_DIG;
+ const R emin = MIN_EXP;
+ const R emax = MAX_EXP;
+ const R prec = eps * base;
+ static R rmin = K(1.0);
+ static R rmax = K(1.0);
+ const R rnd = FLTROUND;
+ static R sfmin = K(-1.0);
+ static short first = TRUE;
+
+ if (first)
+ {
+ /* Compute rmin */
+ {
+ const INT n = 1 - MIN_EXP;
+ INT i;
+ for (i = 0; i < n; i++)
+ rmin /= base;
+ }
+
+ /* Compute rmax */
+ {
+ INT i;
+ rmax -= eps;
+ for (i = 0; i < emax; i++)
+ rmax *= base;
+ }
+
+ /* Compute sfmin */
+ {
+ R small = K(1.0) / rmax;
+ sfmin = rmin;
+ if (small >= sfmin)
+ sfmin = small * (eps + K(1.0));
+ }
+
+ first = FALSE;
+ }
+
+ if (p == NFFT_EPSILON)
+ return eps;
+ else if (p == NFFT_SAFE_MIN)
+ return sfmin;
+ else if (p == NFFT_BASE)
+ return base;
+ else if (p == NFFT_PRECISION)
+ return prec;
+ else if (p == NFFT_MANT_DIG)
+ return t;
+ else if (p == NFFT_FLTROUND)
+ return rnd;
+ else if (p == NFFT_E_MIN)
+ return emin;
+ else if (p == NFFT_R_MIN)
+ return rmin;
+ else if (p == NFFT_E_MAX)
+ return emax;
+ else if (p == NFFT_R_MAX)
+ return rmax;
+ else
+ CK(0 /* cannot happen */);
+
+ return K(-1.0);
+} /* dlamch_ */
diff --git a/kernel/util/int.c b/kernel/util/int.c
new file mode 100644
index 0000000..8569ebf
--- /dev/null
+++ b/kernel/util/int.c
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+int X(exp2i)(const int a)
+{
+ return (1U << a);
+}
+
+int X(log2i)(const int m)
+{
+ int l = 0;
+ int mm = m;
+
+ while (mm > 0)
+ {
+ mm = (mm >> 1);
+ l++;
+ }
+ return (l-1);
+}
+
+/** Computes /f$n\ge N/f$ such that /f$n=2^j,\, j\in\mathhb{N}_0/f$.
+ */
+int X(next_power_of_2)(const int N)
+{
+ int n,i,logn;
+ int N_is_not_power_of_2=0;
+
+ if (N == 0)
+ return 1;
+ else
+ {
+ n = N;
+ logn = 0;
+ while (n != 1)
+ {
+ if (n%2 == 1)
+ N_is_not_power_of_2=1;
+ n = n/2;
+ logn++;
+ }
+
+ if (!N_is_not_power_of_2)
+ logn--;
+
+ for (i = 0; i <= logn; i++)
+ n = n*2;
+
+ return n;
+ }
+}
+
+/** Computes /f$n\ge N/f$ such that /f$n=2^j,\, j\in\mathhb{N}_0/f$.
+ */
+void X(next_power_of_2_exp)(const int N, int *N2, int *t)
+{
+ int n,i,logn;
+ int N_is_not_power_of_2=0;
+
+ if (N == 0)
+ {
+ *N2 = 1;
+ *t = 0;
+ }
+ else
+ {
+ n=N;
+ logn=0;
+ while (n != 1)
+ {
+ if (n%2 == 1)
+ {
+ N_is_not_power_of_2=1;
+ }
+ n = n/2;
+ logn++;
+ }
+
+ if (!N_is_not_power_of_2)
+ {
+ logn--;
+ }
+
+ for (i = 0; i <= logn; i++)
+ {
+ n = n*2;
+ }
+
+ *N2 = n;
+ *t = logn+1;
+ }
+}
diff --git a/kernel/util/lambda.c b/kernel/util/lambda.c
new file mode 100644
index 0000000..0a98438
--- /dev/null
+++ b/kernel/util/lambda.c
@@ -0,0 +1,247 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+/* Coefficients for Lanzcos's approximation to the Gamma function. Can be
+ * regenerated with Mathematica from file lambda.nb. */
+
+#if defined(NFFT_LDOUBLE)
+ #if LDBL_MANT_DIG > 64
+ /* long double 128 bit wide */
+ #define N 24
+ static const R num[24] =
+ {
+ K(3.035162425359883494754028782232869726547E21),
+ K(3.4967568944064301036001605717507506346E21),
+ K(1.9266526566893208886540195401514595829E21),
+ K(6.755170664882727663160830237424406199E20),
+ K(1.691728531049187527800862627495648317E20),
+ K(3.21979351672256057856444116302160246E19),
+ K(4.8378495427140832493758744745481812E18),
+ K(5.8843103809049324230843820398664955E17),
+ K(5.893958514163405862064178891925630E16),
+ K(4.919561837722192829918665308020810E15),
+ K(3.449165802442404074427531228315120E14),
+ K(2.041330296068782505988459692384726E13),
+ K(1.022234822943784007524609706893119E12),
+ K(4.33137871919821354846952908076307E10),
+ K(1.54921950559667418528481770869280E9),
+ K(4.6544421199876191938054157935810E7),
+ K(1.16527806807504975090675074910053E6),
+ K(24024.759267256769471083727721827),
+ K(400.96500811342195582435806376976),
+ K(5.2829901565447826961703902917085),
+ K(0.05289990244125101024092566765994),
+ K(0.0003783467106547406854542665695934),
+ K(1.7219414217921113919596660801124E-6),
+ K(3.747999317071488557713812635427084359354E-9)
+ };
+/* static const R denom[24] =
+ {
+ K(0.0),
+ K(1124000727777607680000.0),
+ K(4148476779335454720000.0),
+ K(6756146673770930688000.0),
+ K(6548684852703068697600.0),
+ K(4280722865357147142912.0),
+ K(2021687376910682741568.0),
+ K(720308216440924653696.0),
+ K(199321978221066137360.0),
+ K(43714229649594412832.0),
+ K(7707401101297361068.0),
+ K(1103230881185949736.0),
+ K(129006659818331295.0),
+ K(12363045847086207.0),
+ K(971250460939913.0),
+ K(62382416421941.0),
+ K(3256091103430.0),
+ K(136717357942.0),
+ K(4546047198.0),
+ K(116896626.0),
+ K(2240315.0),
+ K(30107.0),
+ K(253.0),
+ K(1.0L)
+ };*/
+ static const R g = K(20.32098218798637390136718750000000000000);
+ #elif LDBL_MANT_DIG == 64
+ /* long double 96 bit wide */
+ #define N 17
+ static const R num[17] =
+ {
+ K(2.715894658327717377557655133124376674911E12),
+ K(3.59017952609791210503852552872112955043E12),
+ K(2.22396659973781496931212735323581871017E12),
+ K(8.5694083451895624818099258668254858834E11),
+ K(2.2988587166874907293359744645339939547E11),
+ K(4.552617168754610815813502794395753410E10),
+ K(6.884887713165178784550917647709216425E9),
+ K(8.11048596140753186476028245385237278E8),
+ K(7.52139159654082231449961362311950170E7),
+ K(5.50924541722426515169752795795495283E6),
+ K(317673.536843541912671493184218236957),
+ K(14268.2798984503552014701437332033752),
+ K(489.361872040326367021390908360178781),
+ K(12.3894133003845444929588321786545861),
+ K(0.218362738950461496394157450728168315),
+ K(0.00239374952205844918669062799606398310),
+ K(0.00001229541408909435212800785616808830746135)
+ };
+/* static const R denom[17] =
+ {
+ K(0.0),
+ K(1307674368000.0),
+ K(4339163001600.0),
+ K(6165817614720.0),
+ K(5056995703824.0),
+ K(2706813345600.0),
+ K(1009672107080.0),
+ K(272803210680.0),
+ K(54631129553.0),
+ K(8207628000.0),
+ K(928095740.0),
+ K(78558480.0),
+ K(4899622.0),
+ K(218400.0),
+ K(6580.0),
+ K(120.0),
+ K(1.0L)
+ };*/
+ static const R g = K(12.22522273659706115722656250000000000000);
+ #else
+ #error Unsupported size of long double
+ #endif
+#elif defined(NFFT_SINGLE)
+ /* float */
+ #define N 6
+ static const R num[6] =
+ {
+ K(14.02614328749964766195705772850038393570),
+ K(43.74732405540314316089531289293124360129),
+ K(50.59547402616588964511581430025589038612),
+ K(26.90456680562548195593733429204228910299),
+ K(6.595765571169314946316366571954421695196),
+ K(0.6007854010515290065101128585795542383721)
+ };
+/* static const R denom[6] =
+ {
+ K(0.0),
+ K(24.0),
+ K(50.0),
+ K(35.0),
+ K(10.0),
+ K(1.0)
+ };*/
+ static const R g = K(1.428456135094165802001953125000000000000);
+#else
+ /* double */
+ #define N 13
+ static const R num[13] =
+ {
+ K(5.690652191347156388090791033559122686859E7),
+ K(1.037940431163445451906271053616070238554E8),
+ K(8.63631312881385914554692728897786842234E7),
+ K(4.33388893246761383477372374059053331609E7),
+ K(1.46055780876850680841416998279135921857E7),
+ K(3.48171215498064590882071018964774556468E6),
+ K(601859.61716810987866702265336993523025),
+ K(75999.293040145426498753034435989091371),
+ K(6955.9996025153761403563101155151989875),
+ K(449.944556906316811944685860765098840962),
+ K(19.5199278824761748284786096623565213621),
+ K(0.509841665565667618812517864480469450999),
+ K(0.006061842346248906525783753964555936883222)
+ };
+/* static const R denom[13] =
+ {
+ K(0.0),
+ K(39916800.0),
+ K(120543840.0),
+ K(150917976.0),
+ K(105258076.0),
+ K(45995730.0),
+ K(13339535.0),
+ K(2637558.0),
+ K(357423.0),
+ K(32670.0),
+ K(1925.0),
+ K(66.0),
+ K(1.0)
+ };*/
+ static const R g = K(6.024680040776729583740234375000000000000);
+#endif
+
+static inline R evaluate_rational(const R z_)
+{
+ R z = z_, s1, s2;
+ int i;
+
+ if (z <= K(1.0))
+ {
+ s1 = num[N - 1];
+ s2 = K(1.0);
+ for (i = N - 2; i >= 0; --i)
+ {
+ s1 *= z;
+ s2 *= (z + i);
+ s1 += num[i];
+ }
+ }
+ else
+ {
+ z = K(1.0)/z;
+ s1 = num[0];
+ s2 = K(1.0);
+ for (i = 1; i < N; ++i)
+ {
+ s1 *= z;
+ s2 *= K(1.0) + (i-1)*z;
+ s1 += num[i];
+ }
+ }
+ return s1 / s2;
+}
+
+R X(lambda)(const R z, const R eps)
+{
+ const R d = K(1.0) - eps, zpg = z + g, emh = eps - K(0.5);
+ return EXP(-LOG1P(d / (zpg + emh)) * (z + emh)) *
+ POW(KE / (zpg + K(0.5)),d) *
+ (evaluate_rational(z + eps) / evaluate_rational(z + K(1.0)));
+}
+
+R X(lambda2)(const R mu, const R nu)
+{
+ if (mu == K(0.0))
+ return K(1.0);
+ else if (nu == K(0.0))
+ return K(1.0);
+ else
+ return
+ SQRT(
+ POW((mu + nu + g + K(0.5)) / (K(1.0) * (mu + g + K(0.5))), mu) *
+ POW((mu + nu + g + K(0.5)) / (K(1.0) * (nu + g + K(0.5))), nu) *
+ SQRT(KE * (mu + nu + g + K(0.5)) /
+ ((mu + g + K(0.5)) * (nu + g + K(0.5)))) *
+ (evaluate_rational(mu + nu + K(1.0)) /
+ (evaluate_rational(mu + K(1.0)) * evaluate_rational(nu + K(1.0))))
+ );
+}
diff --git a/kernel/util/malloc.c b/kernel/util/malloc.c
new file mode 100644
index 0000000..d9b38b4
--- /dev/null
+++ b/kernel/util/malloc.c
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include<stdlib.h>
+
+#include "api.h"
+
+X(malloc_type_function) X(malloc_hook) = 0;
+X(free_type_function) X(free_hook) = 0;
+X(die_type_function) X(die_hook) = 0;
+
+void *X(malloc)(size_t n)
+{
+ void *p;
+
+ if (X(malloc_hook))
+ return nfft_malloc_hook(n);
+
+ if (n == 0)
+ n = 1;
+
+ p = Z(malloc)(n);
+
+ if (!p)
+ X(die)(STRINGIZE(X(malloc)) ": out of memory\n");
+
+ return p;
+}
+
+void X(free)(void *p)
+{
+ if (p)
+ {
+ if (X(free_hook))
+ {
+ X(free_hook)(p);
+ return;
+ }
+ Z(free)(p);
+ }
+}
+
+void X(die)(char *s)
+{
+ if (X(die_hook))
+ X(die_hook)(s);
+
+ exit(EXIT_FAILURE);
+}
diff --git a/kernel/util/sinc.c b/kernel/util/sinc.c
new file mode 100644
index 0000000..fcccba6
--- /dev/null
+++ b/kernel/util/sinc.c
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+R X(sinc)(const R x)
+{
+ /* Based on sinc function from Boost C++ library. */
+ const R b = EPSILON;
+ const R bs = SQRT(b);
+ const R bs2 = SQRT(bs);
+
+ if (FABS(x) >= bs2)
+ return SIN(x)/x;
+ else
+ {
+ R r = K(1.0);
+
+ if (FABS(x) >= b)
+ {
+ const R x2 = x * x;
+ r -= x2 / K(6.0);
+
+ if (FABS(x) >= bs)
+ r += (x2 * x2) / K(120.0);
+ }
+
+ return r;
+ }
+}
diff --git a/m4/ax_apple_gcc_archflag.m4 b/m4/ax_apple_gcc_archflag.m4
new file mode 100644
index 0000000..64e4668
--- /dev/null
+++ b/m4/ax_apple_gcc_archflag.m4
@@ -0,0 +1,93 @@
+dnl @synopsis AX_APPLE_GCC_ARCHFLAG([PORTABLE],[ACTION-SUCCESS],[ACTION-FAILURE])
+dnl @summary find target architecture name for Apple's gcc -arch flag
+dnl @category Misc
+dnl
+dnl This macro tries to guess the "native" arch corresponding to
+dnl the target architecture for use with Apple's gcc's -arch flag. If found, the
+dnl cache variable $ax_cv_apple_gcc_archflag is set to this flag and
+dnl ACTION-SUCCESS is executed; otherwise $ax_cv_apple_gcc_archflag is
+dnl is set to "unknown" and ACTION-FAILURE is executed. The default
+dnl ACTION-SUCCESS is to add $ax_cv_apple gcc_archflag to the end of $CFLAGS.
+dnl
+dnl The user can specify --with-apple-gcc-arch=<arch> in order to override
+dnl the macro's choice of architecture, or --without-apple-gcc-arch to
+dnl disable this.
+dnl
+dnl When cross-compiling, or if $CC is not Apple's gcc, then ACTION-FAILURE is
+dnl called unless the user specified --with-apple-gcc-arch manually.
+dnl
+dnl Requires macros: AX_CHECK_COMPILER_FLAGS
+dnl
+dnl (The main emphasis here is on recent CPUs, on the principle that
+dnl doing high-performance computing on old hardware is uncommon.)
+dnl
+dnl @version 2008-12-07
+dnl @license GPLWithACException
+dnl @author Jens Keiner <jens at nfft.org>.
+AC_DEFUN([AX_APPLE_GCC_ARCHFLAG],
+[AC_REQUIRE([AC_PROG_CC])
+AC_REQUIRE([AC_CANONICAL_HOST])
+
+AC_ARG_WITH(apple-gcc-arch, [AC_HELP_STRING([--with-apple-gcc-arch=<arch>],
+ [use architecture <arch> for Apple's gcc -arch, instead of guessing])],
+ ax_apple_gcc_arch=$withval, ax_apple_gcc_arch=yes)
+
+AC_CACHE_VAL(ax_cv_apple_gcc_archflag,
+[
+ax_cv_apple_gcc_archflag="unknown"
+
+if test "$GCC" = yes; then
+ if test "x$ax_apple_gcc_arch" = xyes; then
+ ax_apple_gcc_arch=""
+ if test "$cross_compiling" = no; then
+ if test "x[]m4_default([$1],no)" = xyes; then # if we require portable code
+ ax_apple_gcc_arch="i386 x86_64 ppc ppc64"
+ echo "default arch because of portable code"
+ else
+ case $host_cpu in
+ x86_64*|amd64*|i[[3456]]86*)
+ ax_apple_gcc_arch="x86_64 i386"
+ ;;
+ powerpc*)
+ cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null`
+ cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'`
+ case $cputype in
+ *750*|*740[[0-9]]*|*74[[4-5]][[0-9]]*|*74[[0-9]][[0-9]]*) ax_apple_gcc_arch="ppc";;
+ *970*|*POWER4*|*power4*|*gq*|*POWER5*|*power5*|*gr*|*gs*) ax_apple_gcc_arch="ppc64";;
+ *) ax_apple_gcc_arch="ppc64 ppc";;
+ esac
+ ;;
+ *)
+ ax_apple_gcc_arch="x86_64 i386 ppc64 ppc"
+ ;;
+ esac
+ fi # portable code
+ fi # not cross-compiling
+ fi # guess arch
+
+ if test "x$ax_apple_gcc_arch" != x -a "x$ax_apple_gcc_arch" != xno; then
+ ax_cv_apple_gcc_archflag=""
+ for arch in $ax_apple_gcc_arch; do
+ AX_CHECK_COMPILER_FLAGS([-arch $arch],[
+ saved_CFLAGS="$CFLAGS";
+ CFLAGS="$CFLAGS -arch $arch";
+ LIBS="$LIBS $fftw3_LIBS"
+ AC_MSG_CHECKING([whether linking is possible with -arch $arch]);
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[int main(void){return 0;}]])],[last_result=yes;AC_MSG_RESULT([yes]);ax_cv_apple_gcc_archflag="$ax_cv_apple_gcc_archflag -arch $arch"],[last_result=no;AC_MSG_RESULT([no])]);
+ CFLAGS="$saved_CFLAGS"
+ ])
+ if test "x$last_result" = "xyes"; then
+ break;
+ fi
+ done
+ fi
+fi # $GCC=yes
+])
+AC_MSG_CHECKING([for Apple's gcc architecture flag])
+AC_MSG_RESULT($ax_cv_apple_gcc_archflag)
+if test "x$ax_cv_apple_gcc_archflag" = xunknown; then
+ m4_default([$3],:)
+else
+ m4_default([$2], [CFLAGS="$CFLAGS $ax_cv_apple_gcc_archflag"])
+fi
+])
diff --git a/m4/ax_cc_maxopt.m4 b/m4/ax_cc_maxopt.m4
new file mode 100644
index 0000000..3ec65c5
--- /dev/null
+++ b/m4/ax_cc_maxopt.m4
@@ -0,0 +1,177 @@
+dnl @synopsis AX_CC_MAXOPT
+dnl @summary turn on optimization flags for the C compiler
+dnl @category C
+dnl
+dnl Try to turn on "good" C optimization flags for various compilers
+dnl and architectures, for some definition of "good". (In our case,
+dnl good for FFTW and hopefully for other scientific codes. Modify
+dnl as needed.)
+dnl
+dnl The user can override the flags by setting the CFLAGS environment
+dnl variable. The user can also specify --enable-portable-binary in
+dnl order to disable any optimization flags that might result in
+dnl a binary that only runs on the host architecture.
+dnl
+dnl Note also that the flags assume that ANSI C aliasing rules are
+dnl followed by the code (e.g. for gcc's -fstrict-aliasing), and that
+dnl floating-point computations can be re-ordered as needed.
+dnl
+dnl Requires macros: AX_CHECK_COMPILER_FLAGS, AX_COMPILER_VENDOR,
+dnl AX_GCC_ARCHFLAG, AX_GCC_X86_CPUID
+dnl
+dnl @version 2008-12-02
+dnl @license GPLWithACException
+dnl @author Steven G. Johnson <stevenj at alum.mit.edu> and Matteo Frigo.
+AC_DEFUN([AX_CC_MAXOPT],
+[
+AC_REQUIRE([AC_PROG_CC])
+AC_REQUIRE([AX_COMPILER_VENDOR])
+AC_REQUIRE([AC_CANONICAL_HOST])
+
+AC_ARG_ENABLE(portable-binary, [AC_HELP_STRING([--enable-portable-binary], [disable compiler optimizations that would produce unportable binaries])],
+ acx_maxopt_portable=$enableval, acx_maxopt_portable=no)
+
+# Try to determine "good" native compiler flags if none specified via CFLAGS
+if test "$ac_test_CFLAGS" != "set"; then
+ CFLAGS=""
+ case $ax_cv_c_compiler_vendor in
+ dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host"
+ if test "x$acx_maxopt_portable" = xno; then
+ CFLAGS="$CFLAGS -arch host"
+ fi;;
+
+ sun) CFLAGS="-native -fast -xO5 -dalign"
+ if test "x$acx_maxopt_portable" = xyes; then
+ CFLAGS="$CFLAGS -xarch=generic"
+ fi;;
+
+ hp) CFLAGS="+Oall +Optrs_ansi +DSnative"
+ if test "x$acx_maxopt_portable" = xyes; then
+ CFLAGS="$CFLAGS +DAportable"
+ fi;;
+
+ ibm) if test "x$acx_maxopt_portable" = xno; then
+ xlc_opt="-qarch=auto -qtune=auto"
+ else
+ xlc_opt="-qtune=auto"
+ fi
+ AX_CHECK_COMPILER_FLAGS($xlc_opt,
+ CFLAGS="-O3 -qansialias -w $xlc_opt",
+ [CFLAGS="-O3 -qansialias -w"
+ echo "******************************************************"
+ echo "* You seem to have the IBM C compiler. It is *"
+ echo "* recommended for best performance that you use: *"
+ echo "* *"
+ echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *"
+ echo "* ^^^ ^^^ *"
+ echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *"
+ echo "* CPU you have. (Set the CFLAGS environment var. *"
+ echo "* and re-run configure.) For more info, man cc. *"
+ echo "******************************************************"])
+ ;;
+
+ intel) CFLAGS="-O3"
+ # Intel seems to have changed the spelling of this flag recently
+ icc_ansi_alias="unknown"
+ for flag in -ansi-alias -ansi_alias; do
+ AX_CHECK_COMPILER_FLAGS($flag, [icc_ansi_alias=$flag; break])
+ done
+ if test "x$icc_ansi_alias" != xunknown; then
+ CFLAGS="$CFLAGS $icc_ansi_alias"
+ fi
+ AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double")
+ if test "x$acx_maxopt_portable" = xno; then
+ icc_archflag=unknown
+ icc_flags=""
+ # -xN etcetera are for older versions of icc:
+ case $host_cpu in
+ i686*|x86_64*)
+ # icc accepts gcc assembly syntax, so these should work:
+ AX_GCC_X86_CPUID(0)
+ AX_GCC_X86_CPUID(1)
+ case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG
+ *:756e6547:*:*) # Intel
+ case $ax_cv_gcc_x86_cpuid_1 in
+ *6a?:*[[234]]:*:*|*6[[789b]]?:*:*:*) icc_flags="-xK";;
+ *f3[[347]]:*:*:*|*f4[1347]:*:*:*) icc_flags="-xP -xN -xW -xK";;
+ *f??:*:*:*) icc_flags="-xN -xW -xK";;
+ esac ;;
+ esac ;;
+ esac
+ # newer icc versions should support -xHost
+ icc_flags="-xHost $icc_flags"
+ if test "x$icc_flags" != x; then
+ for flag in $icc_flags; do
+ AX_CHECK_COMPILER_FLAGS($flag, [icc_archflag=$flag; break])
+ done
+ fi
+ AC_MSG_CHECKING([for icc architecture flag])
+ AC_MSG_RESULT($icc_archflag)
+ if test "x$icc_archflag" != xunknown; then
+ CFLAGS="$CFLAGS $icc_archflag"
+ fi
+ fi
+ ;;
+
+ gnu)
+ # default optimization flags for gcc on all systems
+ CFLAGS="-O3 -fomit-frame-pointer"
+
+ # -malign-double for x86 systems
+ AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double")
+
+ # -fstrict-aliasing for gcc-2.95+
+ AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing,
+ CFLAGS="$CFLAGS -fstrict-aliasing")
+
+ # note that we enable "unsafe" fp optimization with other compilers, too
+ AX_CHECK_COMPILER_FLAGS(-ffast-math, CFLAGS="$CFLAGS -ffast-math")
+
+ AX_GCC_ARCHFLAG($acx_maxopt_portable)
+ ;;
+ apple)
+ # default optimization flags for apple on all systems
+ AX_CHECK_COMPILER_FLAGS(-O3, CFLAGS="$CFLAGS -O3")
+ AX_CHECK_COMPILER_FLAGS(-fomit-frame-pointer, CFLAGS="$CFLAGS -fomit-frame-pointer")
+ AX_CHECK_COMPILER_FLAGS(-fPIC, CFLAGS="$CFLAGS -fPIC")
+
+ # -malign-double for x86 systems
+ AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double")
+
+ # -fstrict-aliasing for gcc-2.95+
+ AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing,CFLAGS="$CFLAGS -fstrict-aliasing")
+
+ # note that we enable "unsafe" fp optimization with other compilers, too
+ AX_CHECK_COMPILER_FLAGS(-ffast-math, CFLAGS="$CFLAGS -ffast-math")
+
+ AX_CHECK_COMPILER_FLAGS(-march=core2, CFLAGS="$CFLAGS -march=core2")
+ AX_CHECK_COMPILER_FLAGS(-mtune=core2, CFLAGS="$CFLAGS -mtune=core2")
+
+ AX_APPLE_GCC_ARCHFLAG($acx_maxopt_portable)
+ ;;
+ esac
+
+ if test -z "$CFLAGS"; then
+ echo ""
+ echo "********************************************************"
+ echo "* WARNING: Don't know the best CFLAGS for this system *"
+ echo "* Use ./configure CFLAGS=... to specify your own flags *"
+ echo "* (otherwise, a default of CFLAGS=-O3 will be used) *"
+ echo "********************************************************"
+ echo ""
+ CFLAGS="-O3"
+ fi
+
+ AX_CHECK_COMPILER_FLAGS($CFLAGS, [], [
+ echo ""
+ echo "********************************************************"
+ echo "* WARNING: The guessed CFLAGS don't seem to work with *"
+ echo "* your compiler. *"
+ echo "* Use ./configure CFLAGS=... to specify your own flags *"
+ echo "********************************************************"
+ echo ""
+ CFLAGS=""
+ ])
+
+fi
+])
diff --git a/m4/ax_check_compiler_flags.m4 b/m4/ax_check_compiler_flags.m4
new file mode 100644
index 0000000..cc95cc2
--- /dev/null
+++ b/m4/ax_check_compiler_flags.m4
@@ -0,0 +1,40 @@
+dnl @synopsis AX_CHECK_COMPILER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE])
+dnl @summary check whether FLAGS are accepted by the compiler
+dnl @category Misc
+dnl
+dnl Check whether the given compiler FLAGS work with the current language's
+dnl compiler, or whether they give an error. (Warnings, however, are
+dnl ignored.)
+dnl
+dnl ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+dnl success/failure.
+dnl
+dnl @version 2005-05-30
+dnl @license GPLWithACException
+dnl @author Steven G. Johnson <stevenj at alum.mit.edu> and Matteo Frigo.
+AC_DEFUN([AX_CHECK_COMPILER_FLAGS],
+[AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX
+AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1])
+dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname:
+AS_LITERAL_IF([$1],
+ [AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1), [
+ ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+ _AC_LANG_PREFIX[]FLAGS="$1"
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([AC_LANG_PROGRAM()])],
+ AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes,
+ AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no)
+ _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])],
+ [ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+ _AC_LANG_PREFIX[]FLAGS="$1"
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([AC_LANG_PROGRAM()])],
+ eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes,
+ eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no)
+ _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])
+eval ax_check_compiler_flags=$AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)
+AC_MSG_RESULT($ax_check_compiler_flags)
+if test "x$ax_check_compiler_flags" = xyes; then
+ m4_default([$2], :)
+else
+ m4_default([$3], :)
+fi
+])dnl AX_CHECK_COMPILER_FLAGS
diff --git a/m4/ax_check_dir.m4 b/m4/ax_check_dir.m4
new file mode 100644
index 0000000..3ca9d35
--- /dev/null
+++ b/m4/ax_check_dir.m4
@@ -0,0 +1,23 @@
+dnl @synopsis AX_CHECK_DIR(DIR, [ACTION-SUCCESS], [ACTION-FAILURE])
+dnl @summary check for directory DIR
+dnl @category Misc
+dnl
+dnl Check whether the directory DIR exists.
+dnl
+dnl ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+dnl success/failure.
+dnl
+dnl @version 2008-12-07
+dnl @license GPLWithACException
+dnl @author Jens Keiner <jens at nfft.org>.
+AC_DEFUN([AX_CHECK_DIR],
+[
+AC_MSG_CHECKING([whether directory $1 exists])
+if test -d "$1"; then
+ AC_MSG_RESULT(yes)
+ m4_default([$2], :)
+else
+ AC_MSG_RESULT(no)
+ m4_default([$3], :)
+fi
+])dnl AX_CHECK_DIR
diff --git a/m4/ax_compiler_vendor.m4 b/m4/ax_compiler_vendor.m4
new file mode 100644
index 0000000..7a42427
--- /dev/null
+++ b/m4/ax_compiler_vendor.m4
@@ -0,0 +1,30 @@
+dnl @synopsis AX_COMPILER_VENDOR
+dnl @summary find the vendor (gnu, intel, etc.) of the C/C++ compiler
+dnl @category C
+dnl @category C++
+dnl
+dnl Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm,
+dnl sun, hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi,
+dnl microsoft, watcom, etc. The vendor is returned in the cache variable
+dnl $ax_cv_c_compiler_vendor for C and $ax_cv_cxx_compiler_vendor for C++.
+dnl
+dnl @version 2007-08-01
+dnl @license GPLWithACException
+dnl @author Steven G. Johnson <stevenj at alum.mit.edu> with Matteo Frigo
+
+AC_DEFUN([AX_COMPILER_VENDOR],
+[
+AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor,
+ [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown
+ # note: don't check for gcc first since some other compilers define __GNUC__
+ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ apple:__APPLE_CC__,__APPLE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do
+ vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")"
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([AC_LANG_PROGRAM(,[
+#if !($vencpp)
+ thisisanerror;
+#endif
+])])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break])
+ done
+ ])
+])
+
diff --git a/m4/ax_gcc_archflag.m4 b/m4/ax_gcc_archflag.m4
new file mode 100644
index 0000000..813f0a2
--- /dev/null
+++ b/m4/ax_gcc_archflag.m4
@@ -0,0 +1,184 @@
+dnl @synopsis AX_GCC_ARCHFLAG([PORTABLE?], [ACTION-SUCCESS], [ACTION-FAILURE])
+dnl @summary find target architecture name for gcc -march/-mtune flags
+dnl @category Misc
+dnl
+dnl This macro tries to guess the "native" arch corresponding to
+dnl the target architecture for use with gcc's -march=arch or -mtune=arch
+dnl flags. If found, the cache variable $ax_cv_gcc_archflag is set to this
+dnl flag and ACTION-SUCCESS is executed; otherwise $ax_cv_gcc_archflag is
+dnl is set to "unknown" and ACTION-FAILURE is executed. The default
+dnl ACTION-SUCCESS is to add $ax_cv_gcc_archflag to the end of $CFLAGS.
+dnl
+dnl PORTABLE? should be either [yes] (default) or [no]. In the former case,
+dnl the flag is set to -mtune (or equivalent) so that the architecture
+dnl is only used for tuning, but the instruction set used is still
+dnl portable. In the latter case, the flag is set to -march (or equivalent)
+dnl so that architecture-specific instructions are enabled.
+dnl
+dnl The user can specify --with-gcc-arch=<arch> in order to override
+dnl the macro's choice of architecture, or --without-gcc-arch to
+dnl disable this.
+dnl
+dnl When cross-compiling, or if $CC is not gcc, then ACTION-FAILURE is
+dnl called unless the user specified --with-gcc-arch manually.
+dnl
+dnl Requires macros: AX_CHECK_COMPILER_FLAGS, AX_GCC_X86_CPUID
+dnl
+dnl (The main emphasis here is on recent CPUs, on the principle that
+dnl doing high-performance computing on old hardware is uncommon.)
+dnl
+dnl @version 2007-03-20
+dnl @license GPLWithACException
+dnl @author Steven G. Johnson <stevenj at alum.mit.edu> and Matteo Frigo.
+AC_DEFUN([AX_GCC_ARCHFLAG],
+[AC_REQUIRE([AC_PROG_CC])
+AC_REQUIRE([AC_CANONICAL_HOST])
+
+AC_ARG_WITH(gcc-arch, [AC_HELP_STRING([--with-gcc-arch=<arch>], [use architecture <arch> for gcc -march/-mtune, instead of guessing])],
+ ax_gcc_arch=$withval, ax_gcc_arch=yes)
+
+AC_MSG_CHECKING([for gcc architecture flag])
+AC_MSG_RESULT([])
+AC_CACHE_VAL(ax_cv_gcc_archflag,
+[
+ax_cv_gcc_archflag="unknown"
+
+if test "$GCC" = yes; then
+
+if test "x$ax_gcc_arch" = xyes; then
+ax_gcc_arch=""
+if test "$cross_compiling" = no; then
+case $host_cpu in
+ i[[3456]]86*|x86_64*|amd64*) # use cpuid codes, in part from x86info-1.21 by D. Jones
+ AX_GCC_X86_CPUID(0)
+ AX_GCC_X86_CPUID(1)
+ case $ax_cv_gcc_x86_cpuid_0 in
+ *:756e6547:*:*) # Intel
+ case $ax_cv_gcc_x86_cpuid_1 in
+ *5[[48]]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;;
+ *5??:*:*:*) ax_gcc_arch=pentium ;;
+ *6[[3456]]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
+ *6a?:*[[01]]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
+ *6a?:*[[234]]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
+ *6[[78b]]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
+ *6[[9d]]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;;
+ *6[[e]]?:*:*:*) ax_gcc_arch="native pentium-m pentium3 pentiumpro" ;; # Core Duo
+ *6f?:*:*:*) ax_gcc_arch="core2 native pentium-m pentium3 pentiumpro" ;;
+ *6??:*:*:*) ax_gcc_arch="native pentiumpro" ;;
+ *f3[[347]]:*:*:*|*f4[[1347]]:*:*:*)
+ case $host_cpu in
+ x86_64*|amd64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;;
+ *) ax_gcc_arch="prescott pentium4 pentiumpro" ;;
+ esac ;;
+ *f??:*:*:*) ax_gcc_arch="native pentium4 pentiumpro";;
+ esac ;;
+ *:68747541:*:*) # AMD
+ case $ax_cv_gcc_x86_cpuid_1 in
+ *5[[67]]?:*:*:*) ax_gcc_arch=k6 ;;
+ *5[[8c]]?:*:*:*) ax_gcc_arch="k6-2 k6" ;;
+ *5[[9d]]?:*:*:*) ax_gcc_arch="k6-3 k6" ;;
+ *60?:*:*:*) ax_gcc_arch=k7 ;;
+ *6[[12]]?:*:*:*) ax_gcc_arch="athlon k7" ;;
+ *6[[34]]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;;
+ *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;;
+ *6[[68a]]?:*:*:*)
+ AX_GCC_X86_CPUID(0x80000006) # L2 cache size
+ case $ax_cv_gcc_x86_cpuid_0x80000006 in
+ *:*:*[[1-9a-f]]??????:*) # (L2 = ecx >> 16) >= 256
+ ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;;
+ *) ax_gcc_arch="athlon-4 athlon k7" ;;
+ esac ;;
+ *f[[4cef8b]]?:*:*:*) ax_gcc_arch="athlon64 k8" ;;
+ *f5?:*:*:*) ax_gcc_arch="opteron k8" ;;
+ *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;;
+ *f??:*:*:*) ax_gcc_arch="native k8" ;;
+ esac ;;
+ *:746e6543:*:*) # IDT
+ case $ax_cv_gcc_x86_cpuid_1 in
+ *54?:*:*:*) ax_gcc_arch=winchip-c6 ;;
+ *58?:*:*:*) ax_gcc_arch=winchip2 ;;
+ *6[[78]]?:*:*:*) ax_gcc_arch=c3 ;;
+ *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;;
+ esac ;;
+ esac
+ if test x"$ax_gcc_arch" = x; then # fallback
+ case $host_cpu in
+ i586*) ax_gcc_arch="native pentium" ;;
+ i686*) ax_gcc_arch="native pentiumpro" ;;
+ x86_64*|amd64*) ax_gcc_arch="native" ;;
+ esac
+ fi
+ ;;
+
+ sparc*)
+ AC_PATH_PROG([PRTDIAG], [prtdiag], [prtdiag], [$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/])
+ cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null`
+ cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters`
+ case $cputype in
+ *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;;
+ *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;;
+ *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;;
+ *supersparc*|*tms390z5[[05]]*) ax_gcc_arch="supersparc v8" ;;
+ *hypersparc*|*rt62[[056]]*) ax_gcc_arch="hypersparc v8" ;;
+ *cypress*) ax_gcc_arch=cypress ;;
+ esac ;;
+
+ alphaev5) ax_gcc_arch=ev5 ;;
+ alphaev56) ax_gcc_arch=ev56 ;;
+ alphapca56) ax_gcc_arch="pca56 ev56" ;;
+ alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;;
+ alphaev6) ax_gcc_arch=ev6 ;;
+ alphaev67) ax_gcc_arch=ev67 ;;
+ alphaev68) ax_gcc_arch="ev68 ev67" ;;
+ alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;;
+ alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;;
+ alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;;
+
+ powerpc*)
+ cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null`
+ cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'`
+ case $cputype in
+ *750*) ax_gcc_arch="750 G3" ;;
+ *740[[0-9]]*) ax_gcc_arch="$cputype 7400 G4" ;;
+ *74[[4-5]][[0-9]]*) ax_gcc_arch="$cputype 7450 G4" ;;
+ *74[[0-9]][[0-9]]*) ax_gcc_arch="$cputype G4" ;;
+ *970*) ax_gcc_arch="970 G5 power4";;
+ *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";;
+ *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";;
+ 603ev|8240) ax_gcc_arch="$cputype 603e 603";;
+ *Cell*) ax_gcc_arch="cellppu cell";;
+ *) ax_gcc_arch="$cputype native" ;;
+ esac
+ ax_gcc_arch="$ax_gcc_arch powerpc"
+ ;;
+esac
+fi # not cross-compiling
+fi # guess arch
+
+if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then
+for arch in $ax_gcc_arch; do
+ if test "x[]m4_default([$1],yes)" = xyes; then # if we require portable code
+ flags="-mtune=$arch"
+ # -mcpu=$arch and m$arch generate nonportable code on every arch except
+ # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr.
+ case $host_cpu in i*86|x86_64*|amd64*) flags="$flags -mcpu=$arch -m$arch";; esac
+ else
+ flags="-march=$arch -mcpu=$arch -m$arch"
+ fi
+ for flag in $flags; do
+ AX_CHECK_COMPILER_FLAGS($flag, [ax_cv_gcc_archflag=$flag; break])
+ done
+ test "x$ax_cv_gcc_archflag" = xunknown || break
+done
+fi
+
+fi # $GCC=yes
+])
+AC_MSG_CHECKING([for gcc architecture flag])
+AC_MSG_RESULT($ax_cv_gcc_archflag)
+if test "x$ax_cv_gcc_archflag" = xunknown; then
+ m4_default([$3],:)
+else
+ m4_default([$2], [CFLAGS="$CFLAGS $ax_cv_gcc_archflag"])
+fi
+])
diff --git a/m4/ax_gcc_x86_cpuid.m4 b/m4/ax_gcc_x86_cpuid.m4
new file mode 100644
index 0000000..6a01f48
--- /dev/null
+++ b/m4/ax_gcc_x86_cpuid.m4
@@ -0,0 +1,51 @@
+dnl @synopsis AX_GCC_X86_CPUID(OP)
+dnl @summary run x86 cpuid instruction OP using gcc inline assembler
+dnl @category Misc
+dnl
+dnl On Pentium and later x86 processors, with gcc or a compiler that
+dnl has a compatible syntax for inline assembly instructions, run
+dnl a small program that executes the cpuid instruction with
+dnl input OP. This can be used to detect the CPU type.
+dnl
+dnl On output, the values of the eax, ebx, ecx, and edx registers
+dnl are stored as hexadecimal strings as "eax:ebx:ecx:edx" in
+dnl the cache variable ax_cv_gcc_x86_cpuid_OP.
+dnl
+dnl If the cpuid instruction fails (because you are running a cross-compiler,
+dnl or because you are not using gcc, or because you are on a processor
+dnl that doesn't have this instruction), ax_cv_gcc_x86_cpuid_OP is set
+dnl to the string "unknown".
+dnl
+dnl This macro mainly exists to be used in AX_GCC_ARCHFLAG.
+dnl
+dnl @version 2006-04-20
+dnl @license GPLWithACException
+dnl @author Steven G. Johnson <stevenj at alum.mit.edu> and Matteo Frigo.
+AC_DEFUN([AX_GCC_X86_CPUID],
+[AC_REQUIRE([AC_PROG_CC])
+AC_LANG_PUSH([C])
+AC_CACHE_CHECK(for x86 cpuid $1 output, ax_cv_gcc_x86_cpuid_$1,
+ [AC_RUN_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [
+ int op = $1, eax, ebx, ecx, edx;
+ FILE *f;
+ __asm__("push %%ebx\n\t"
+ "cpuid\n\t"
+ "pop %%ebx"
+ : "=a" (eax), "=c" (ecx), "=d" (edx)
+ : "a" (op));
+ __asm__("push %%ebx\n\t"
+ "cpuid\n\t"
+ "mov %%ebx, %%eax\n\t"
+ "pop %%ebx"
+ : "=a" (ebx), "=c" (ecx), "=d" (edx)
+ : "a" (op));
+ f = fopen("conftest_cpuid", "w"); if (!f) return 1;
+ fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
+ fclose(f);
+ return 0;
+])],
+ [ax_cv_gcc_x86_cpuid_$1=`cat conftest_cpuid`; rm -f conftest_cpuid],
+ [ax_cv_gcc_x86_cpuid_$1=unknown; rm -f conftest_cpuid],
+ [ax_cv_gcc_x86_cpuid_$1=unknown])])
+AC_LANG_POP([C])
+])
diff --git a/m4/ax_lib_fftw3.m4 b/m4/ax_lib_fftw3.m4
new file mode 100644
index 0000000..fe35328
--- /dev/null
+++ b/m4/ax_lib_fftw3.m4
@@ -0,0 +1,125 @@
+# $Id: matlab.m4 2652 2008-12-04 13:19:40Z keiner $
+#
+# Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# @synopsis AX_LIB_FFTW3
+# @summary Check configure options and assign variables related to the fftw3 library.
+# @category C
+#
+# @version 2008-12-07
+# @license GPLWithACException
+# @author Jens Keiner <jens at nfft.org>
+#
+# If we find the library, set the shell variable `ax_have_fftw3' to `yes'.
+# Otherwise, set `ax_have_fftw3' to `no'.
+
+AC_DEFUN([AX_LIB_FFTW3],
+[
+ AC_ARG_WITH(fftw3, [AC_HELP_STRING([--with-fftw3=DIR],
+ [compile with fftw3 in DIR])], with_fftw3=$withval, with_fftw3="yes")
+
+ AC_ARG_WITH(fftw3-libdir, [AC_HELP_STRING([--with-fftw3-libdir=DIR],
+ [compile with fftw3 library directory DIR])], fftw3_lib_dir=$withval,
+ fftw3_lib_dir="yes")
+
+ AC_ARG_WITH(fftw3-includedir, [AC_HELP_STRING([--with-fftw3-includedir=DIR],
+ [compile with fftw3 include directory DIR])], fftw3_include_dir=$withval,
+ fftw3_include_dir="yes")
+
+ if test "x$with_fftw3" != "xyes"; then
+ if test "x${fftw3_include_dir}" = "xyes"; then
+ fftw3_include_dir="$with_fftw3/include"
+ fi
+ if test "x${fftw3_lib_dir}" = "xyes"; then
+ fftw3_lib_dir="$with_fftw3/lib"
+ fi
+ fi
+
+ if test "x${fftw3_include_dir}" != "xyes"; then
+ AX_CHECK_DIR([${fftw3_include_dir}],[],
+ [AC_MSG_ERROR([The directory ${fftw3_include_dir} does not exist.])])
+ fftw3_CPPFLAGS="-I$fftw3_include_dir"
+ else
+ fftw3_CPPFLAGS=""
+ fi
+
+ if test "x${fftw3_lib_dir}" != "xyes"; then
+ AX_CHECK_DIR([${fftw3_lib_dir}],[],
+ [AC_MSG_ERROR([The directory ${fftw3_lib_dir} does not exist.])])
+ fftw3_LDFLAGS="-L$fftw3_lib_dir"
+ else
+ fftw3_LDFLAGS=""
+ fi
+
+ saved_LDFLAGS="$LDFLAGS"
+ saved_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $fftw3_CPPFLAGS"
+ LDFLAGS="$LDFLAGS $fftw3_LDFLAGS"
+
+ # Check if header is present and usable.
+ ax_lib_fftw3=yes
+ ax_lib_fftw3_threads=yes
+ AC_CHECK_HEADER([fftw3.h], [], [ax_lib_fftw3=no;ax_lib_fftw3_threads=no])
+
+ if test "x$ax_lib_fftw3" = "xyes"; then
+ saved_LIBS="$LIBS"
+ AC_CHECK_LIB([fftw3], [fftw_execute], [], [ax_lib_fftw3=no])
+ fftw3_LIBS="-lfftw3"
+ LIBS="$saved_LIBS"
+ fi
+
+ if test "x$enable_threads" = "xyes" -a "x$ax_lib_fftw3" = "xyes"; then
+ fftw3_threads_LIBS=""
+ # Combined lib
+ LIBS="-lfftw3 $LIBS"
+ fftw3_threads_LIBS="-lfftw3"
+ AC_MSG_CHECKING([for fftw_init_threads in -lfftw3])
+ AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_init_threads])], [ax_lib_fftw3_threads=yes],[ax_lib_fftw3_threads=no])
+ AC_MSG_RESULT([$ax_lib_fftw3_threads])
+ LIBS="$saved_LIBS"
+
+ if test "x$ax_lib_fftw3_threads" = "xno"; then
+ AC_CHECK_LIB([fftw3], [fftw_init_threads],[ax_lib_fftw3_threads=yes],[ax_lib_fftw3_threads=no], [-lpthread -lm])
+ fftw3_threads_LIBS="-lfftw3 -lpthread -lm"
+ fi
+
+ if test "x$ax_lib_fftw3_threads" = "xno"; then
+ LIBS="-lfftw3_threads -lfftw3 $LIBS"
+ fftw3_threads_LIBS="-lfftw3_threads -lfftw3"
+ AC_MSG_CHECKING([for fftw_init_threads in -lfftw3_threads])
+ AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_init_threads])], [ax_lib_fftw3_threads=yes],[ax_lib_fftw3_threads=no])
+ AC_MSG_RESULT([$ax_lib_fftw3_threads])
+ LIBS="$saved_LIBS"
+ fi
+
+ if test "x$ax_lib_fftw3_threads" = "xno"; then
+ LIBS="-lfftw3 -lpthread -lm $LIBS"
+ fftw3_threads_LIBS="-lfftw3_threads -lfftw3 -lpthread -lm"
+ AC_CHECK_LIB([fftw3_threads], [fftw_init_threads],[ax_lib_fftw3_threads=yes],[ax_lib_fftw3_threads=no])
+ fi
+
+ LIBS="$saved_LIBS"
+ fi
+
+ # Restore saved flags.
+ CPPFLAGS="$saved_CPPFLAGS"
+ LDFLAGS="$saved_LDFLAGS"
+
+ AC_SUBST(fftw3_LIBS)
+ AC_SUBST(fftw3_threads_LIBS)
+ AC_SUBST(fftw3_LDFLAGS)
+])
diff --git a/m4/ax_nfft_module.m4 b/m4/ax_nfft_module.m4
new file mode 100644
index 0000000..6779576
--- /dev/null
+++ b/m4/ax_nfft_module.m4
@@ -0,0 +1,14 @@
+AC_DEFUN([AX_NFFT_MODULE],
+[
+ AC_ARG_ENABLE($1, [AC_HELP_STRING([--enable-]$1,[build ]$2[ module (]$3[)])],
+ ok=$enableval, ok=$nfft_module_default)
+ if m4_default($6,test "x$ok" = "xyes"); then
+ HAVE_$2="#define HAVE_$2 1"
+ $4
+ else
+ HAVE_$2="#undef HAVE_$2"
+ $5
+ fi
+ AM_CONDITIONAL(HAVE_$2, m4_default($6,test "x$ok" = "xyes"))
+ AC_SUBST(HAVE_$2)
+])
\ No newline at end of file
diff --git a/m4/ax_openmp.m4 b/m4/ax_openmp.m4
new file mode 100644
index 0000000..7ea794b
--- /dev/null
+++ b/m4/ax_openmp.m4
@@ -0,0 +1,99 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_openmp.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_OPENMP([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+#
+# DESCRIPTION
+#
+# This macro tries to find out how to compile programs that use OpenMP a
+# standard API and set of compiler directives for parallel programming
+# (see http://www-unix.mcs/)
+#
+# On success, it sets the OPENMP_CFLAGS/OPENMP_CXXFLAGS/OPENMP_F77FLAGS
+# output variable to the flag (e.g. -omp) used both to compile *and* link
+# OpenMP programs in the current language.
+#
+# NOTE: You are assumed to not only compile your program with these flags,
+# but also link it with them as well.
+#
+# If you want to compile everything with OpenMP, you should set:
+#
+# CFLAGS="$CFLAGS $OPENMP_CFLAGS"
+# #OR# CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"
+# #OR# FFLAGS="$FFLAGS $OPENMP_FFLAGS"
+#
+# (depending on the selected language).
+#
+# The user can override the default choice by setting the corresponding
+# environment variable (e.g. OPENMP_CFLAGS).
+#
+# ACTION-IF-FOUND is a list of shell commands to run if an OpenMP flag is
+# found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is
+# not found. If ACTION-IF-FOUND is not specified, the default action will
+# define HAVE_OPENMP.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Steven G. Johnson <stevenj at alum.mit.edu>
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception, the respective Autoconf Macro's copyright owner
+# gives unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the Macro. You
+# need not follow the terms of the GNU General Public License when using
+# or distributing such scripts, even though portions of the text of the
+# Macro appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes the Autoconf Macro.
+#
+# This special exception to the GPL applies to versions of the Autoconf
+# Macro released by the Autoconf Archive. When you make and distribute a
+# modified version of the Autoconf Macro, you may extend this special
+# exception to the GPL to apply to your modified version as well.
+
+#serial 8
+
+AC_DEFUN([AX_OPENMP], [
+AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX
+
+AC_CACHE_CHECK([for OpenMP flag of _AC_LANG compiler], ax_cv_[]_AC_LANG_ABBREV[]_openmp, [save[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+ax_cv_[]_AC_LANG_ABBREV[]_openmp=unknown
+# Flags to try: -fopenmp (gcc), -openmp (icc), -mp (SGI & PGI),
+# -xopenmp (Sun), -omp (Tru64), -qsmp=omp (AIX), none
+ax_openmp_flags="-fopenmp -openmp -mp -xopenmp -omp -qsmp=omp none"
+if test "x$OPENMP_[]_AC_LANG_PREFIX[]FLAGS" != x; then
+ ax_openmp_flags="$OPENMP_[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flags"
+fi
+for ax_openmp_flag in $ax_openmp_flags; do
+ case $ax_openmp_flag in
+ none) []_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[] ;;
+ *) []_AC_LANG_PREFIX[]FLAGS="$save[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flag" ;;
+ esac
+ AC_TRY_LINK_FUNC(omp_set_num_threads,
+ [ax_cv_[]_AC_LANG_ABBREV[]_openmp=$ax_openmp_flag; break])
+done
+[]_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[]FLAGS
+])
+if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" = "xunknown"; then
+ m4_default([$2],:)
+else
+ if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" != "xnone"; then
+ OPENMP_[]_AC_LANG_PREFIX[]FLAGS=$ax_cv_[]_AC_LANG_ABBREV[]_openmp
+ fi
+ m4_default([$1], [AC_DEFINE(HAVE_OPENMP,1,[Define if OpenMP is enabled])])
+fi
+])dnl AX_OPENMP
diff --git a/m4/ax_prog_matlab.m4 b/m4/ax_prog_matlab.m4
new file mode 100644
index 0000000..2d35a7a
--- /dev/null
+++ b/m4/ax_prog_matlab.m4
@@ -0,0 +1,318 @@
+# $Id: ax_prog_matlab.m4 3892 2012-09-28 18:52:59Z keiner $
+#
+# Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# @synopsis AX_PROG_MATLAB
+# @summary set up compiler and linker flags for Matlab mex file compilation.
+# @category C
+#
+# @version 2008-12-07
+# @license GPLWithACException
+# @author Jens Keiner <jens at nfft.org>
+
+AC_DEFUN([AX_PROG_MATLAB],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AX_LIB_FFTW3])
+
+ # option to enable mex file compilation
+ AC_ARG_WITH(matlab,
+ [AC_HELP_STRING([--with-matlab=DIR],
+ [the directory where Matlab is installed])],
+ matlab_dir=${withval},matlab_dir="no")
+
+ AC_ARG_WITH(matlab-arch,
+ [AC_HELP_STRING([--with-matlab-arch=DIR],
+ [Matlab architecture acronym])],
+ matlab_arch=${withval},matlab_arch="yes")
+
+ AC_ARG_ENABLE(matlab-argchecks,
+ [AC_HELP_STRING([--enable-matlab-argchecks],
+ [Compile Matlab interface with argument checks [default=yes]])],
+ [ok="$enableval"],
+ [ok="yes"])
+
+ if test "x$ok" = "xyes"; then
+ AC_DEFINE(MATLAB_ARGCHECKS,1,[Define to enable Matlab argument checks.])
+ fi
+
+ AC_ARG_WITH(matlab-fftw3-libdir, [AC_HELP_STRING([--with-matlab-fftw3-libdir=DIR],
+ [compile Matlab interface with fftw3 library directory DIR])], matlab_fftw3_lib_dir=$withval,
+ matlab_fftw3_lib_dir="yes")
+
+ AC_ARG_ENABLE(matlab-threads,
+ [AC_HELP_STRING([--enable-matlab-threads],
+ [Compile Matlab interface with thread support [default same as --enable-openmp]])],
+ [matlab_threads="$enableval"],
+ [matlab_threads="$enable_threads"])
+
+ AC_MSG_CHECKING([whether to check for Matlab])
+
+ if test "x${matlab_dir}" = "xno"; then
+ AC_MSG_RESULT([no])
+ ax_prog_matlab="no"
+ else
+ AC_MSG_RESULT([yes])
+
+ # Matlab root
+ AX_CHECK_DIR([${matlab_dir}],[],
+ [AC_MSG_ERROR([Please supply a valid path to a Matlab root directory or run configure without the option --with-matlab.])])
+
+ # subdirectories
+ matlab_bin_dir="${matlab_dir}/bin"
+ matlab_src_dir="${matlab_dir}/extern/src"
+ matlab_include_dir="${matlab_dir}/extern/include"
+ AX_CHECK_DIR([${matlab_bin_dir}],[],
+ [AC_MSG_ERROR([The directory ${matlab_dir} does not seem to be a valid Matlab root directory.])])
+ # More recent versions of Matlab do no longer have the src directory.
+ # AX_CHECK_DIR([${matlab_src_dir}],[],
+ # [AC_MSG_ERROR([The directory ${matlab_dir} does not seem to be a valid Matlab root directory.])])
+ AX_CHECK_DIR([${matlab_include_dir}],[],
+ [AC_MSG_ERROR([The directory ${matlab_dir} does not seem to be a valid Matlab root directory.])])
+
+ # architecture and mex file extension
+ if test ! "x${matlab_arch}" = "xyes"; then
+ AC_MSG_CHECKING([for Matlab architecture])
+ AC_MSG_RESULT([${matlab_arch}])
+ # mex file extension for architecture
+ AC_MSG_CHECKING([for mex file extension])
+ case $matlab_arch in
+ glnx86) matlab_mexext="mexglx";;
+ glnxa64) matlab_mexext="mexa64";;
+ mac) matlab_mexext="mexmac";;
+ maci) matlab_mexext="mexmaci";;
+ maci64) matlab_mexext="mexmaci64";;
+ sol64) matlab_mexext="mexs64";;
+ win32) matlab_mexext="mexw32";;
+ win64) matlab_mexext="mexw64";;
+ *) AC_MSG_ERROR([Unsupported or invalid architecture ${matlab_arch}.]);;
+ esac
+ AC_MSG_RESULT([${matlab_mexext}])
+ else
+ matlab_mexext="unknown"
+ matlab_arch="unknown"
+
+ # mex file extension, maybe
+ for matlab_check_prog_mexext in mexext mexext.sh mexext.bat; do
+ unset ac_cv_path_matlab_prog_mexext
+ AC_PATH_PROG([matlab_prog_mexext],[$matlab_check_prog_mexext],[no],
+ [$matlab_bin_dir$PATH_SEPARATOR$PATH$PATH_SEPARATOR$matlab_bin_dir])
+ if test ! "x${matlab_prog_mexext}" = "xno"; then
+ AC_MSG_CHECKING([for mex file extension])
+ if test "x${host_os}" = "xmingw32"; then
+ matlab_mexext=mexw32
+ else
+ matlab_mexext=`${matlab_prog_mexext}`
+ matlab_mexext=`echo ${matlab_mexext} | tr -d '\r\n'`
+ fi
+ AC_MSG_RESULT([${matlab_mexext}])
+ break
+ fi
+ done
+
+ # architecture, maybe
+ if test "x${matlab_mexext}" = "xunknown"; then
+ # Try guessing the architecture based on host
+ case $host in
+ *86_64*linux*) matlab_arch_test="glnxa64";;
+ *86*linux*) matlab_arch_test="glnx86";;
+ *powerpc*darwin*) matlab_arch_test="mac mac64";;
+ *86*darwin*) matlab_arch_test="maci maci64";;
+ *solaris*) matlab_arch_test="sol sol64";;
+ *cygwin*) matlab_arch_test="win32 win64";;
+ *mingw*) matlab_arch_test="win32 win64";;
+ *) AC_MSG_ERROR([Cannot guess Matlab architecture based on host type.]);;
+ esac
+ AC_MSG_CHECKING([for architecture])
+ for matlab_arch in "$matlab_arch_test"; do
+ if test -d "${matlab_bin_dir}/${matlab_arch}" -a -f "${matlab_bin_dir}/${matlab_arch}/MATLAB"; then
+ AC_MSG_RESULT([${matlab_arch}])
+ break
+ fi
+ matlab_arch="unkown"
+ AC_MSG_RESULT([unknown])
+ done
+ fi
+
+ # mex file extension or architecture found
+ if test "x${matlab_mexext}" = "xunknown" -a "x${matlab_arch}" = "xunknown"; then
+ AC_MSG_ERROR([Could not determine mex file extension nor Matlab architecture. Please supply a valid architecture flag using the option --with-matlab-arch])
+ fi
+
+ if test "x${matlab_arch}" = "xunknown"; then
+ # architecture for mex file extension
+ AC_MSG_CHECKING([for architecture])
+ case ${matlab_mexext} in
+ mexglx) matlab_arch="glnx86";;
+ mexa64) matlab_arch="glnxa64";;
+ mexmac) matlab_arch="mac";;
+ mexmaci) matlab_arch="maci";;
+ mexmaci64) matlab_arch="maci64";;
+ mexs64) matlab_arch="sol64";;
+ mexw32) matlab_arch="win32";;
+ mexw64) matlab_arch="win64";;
+ *) AC_MSG_ERROR([Unsupported mex file extension ${matlab_mexext}.]);;
+ esac
+ AC_MSG_RESULT([${matlab_arch}])
+ elif test "x${matlab_mexext}" = "xunknown"; then
+ AC_MSG_CHECKING([for mex file extension])
+ case $matlab_arch in
+ glnx86) matlab_mexext="mexglx";;
+ glnxa64) matlab_mexext="mexa64";;
+ mac) matlab_mexext="mexmac";;
+ maci) matlab_mexext="mexmaci";;
+ maci64) matlab_mexext="mexmaci64";;
+ sol64) matlab_mexext="mexs64";;
+ win32) matlab_mexext="mexw32";;
+ win64) matlab_mexext="mexw64";;
+ *) AC_MSG_ERROR([Unsupported or invalid architecture ${matlab_arch}.]);;
+ esac
+ AC_MSG_RESULT([${matlab_mexext}])
+ fi
+ fi
+
+ # add "." to mex file extension
+ matlab_mexext=".$matlab_mexext"
+
+ # arch bin dir
+ matlab_arch_bin_dir="${matlab_bin_dir}/${matlab_arch}"
+ AX_CHECK_DIR([${matlab_arch_bin_dir}],[],
+ [AC_MSG_ERROR([The directory ${matlab_dir} does not seem to be a valid Matlab root directory.])])
+
+ # dynamic library extension for architecture
+ case $matlab_arch in
+ glnx86|glnxa64|sol|sol64) matlab_libext=".so";;
+ mac|mac64|maci|maci64) matlab_libext=".dylib";;
+ win32|win64) matlab_libext=".dll";;
+ *) AC_MSG_ERROR([Unsupported or invalid architecture ${matlab_arch}.]);;
+ esac
+
+ # libraries
+ matlab_LDFLAGS="-L${matlab_arch_bin_dir}"
+ saved_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS ${matlab_LDFLAGS}"
+ matlab_LIBS=""
+ matlab_fftw3_LIBS=""
+ matlab_fftw3_LDFLAGS=""
+ AC_CHECK_LIB([mx],[mxMalloc],[matlab_LIBS="$matlab_LIBS -lmx"],
+ [AC_CHECK_FILE([${matlab_arch_bin_dir}/libmx${matlab_libext}],
+ [matlab_LIBS="$matlab_LIBS -lmx"],
+ [AC_MSG_ERROR([Needed Matlab library mx not usable.])])],[])
+ AC_CHECK_LIB([mex],[mexCallMATLAB],[matlab_LIBS="$matlab_LIBS -lmex"],
+ [AC_CHECK_FILE([${matlab_arch_bin_dir}/libmex${matlab_libext}],
+ [matlab_LIBS="$matlab_LIBS -lmex"],
+ [AC_MSG_ERROR([Needed Matlab library mex not usable.])])],[])
+ AC_CHECK_LIB([mat],[matGetVariable],[matlab_LIBS="$matlab_LIBS -lmat"],
+ [AC_CHECK_FILE([${matlab_arch_bin_dir}/libmat${matlab_libext}],
+ [matlab_LIBS="$matlab_LIBS -lmat"],
+ [AC_MSG_ERROR([Needed Matlab library mat not usable.])])],[])
+
+ LDFLAGS="$saved_LDFLAGS"
+
+ matlab_CPPFLAGS="-I${matlab_include_dir}"
+
+ # mexversion.c
+ AC_CHECK_FILE([${matlab_src_dir}/mexversion.c],[matlab_CPPFLAGS="${matlab_CPPFLAGS} -I${matlab_src_dir}"; AC_DEFINE([HAVE_MEXVERSION_C],[1],[Define to have the file mexversion.c])],[AC_MSG_WARN([File ]${matlab_src_dir}[/mexversion.c not found])])
+
+ ax_prog_matlab="yes"
+
+ # Only overwrite Matlab fftw3 lib dir when not explicitly set
+ if test "x${matlab_fftw3_lib_dir}" = "xyes"; then
+ matlab_fftw3_lib_dir="${matlab_bin_dir}/${matlab_arch}"
+ else
+ AX_CHECK_DIR([${matlab_fftw3_lib_dir}],[],
+ [AC_MSG_ERROR([The directory ${matlab_fftw3_lib_dir} does not seem to be a valid fftw3 library directory.])])
+ matlab_fftw3_LDFLAGS="-L$matlab_fftw3_lib_dir"
+ fi
+
+ saved_LIBS="$LIBS"
+ saved_LDFLAGS="$LDFLAGS"
+
+ matlab_fftw3_LIBS="-lfftw3"
+ LIBS="-lfftw3 $LIBS"
+ LDFLAGS="-L$matlab_fftw3_lib_dir ${matlab_LDFLAGS} $LDFLAGS"
+ AC_MSG_CHECKING([for Matlab fftw3 library])
+ AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_execute])], [ax_matlab_lib_fftw3=yes],[ax_matlab_lib_fftw3=no])
+ AC_MSG_RESULT([$ax_matlab_lib_fftw3])
+
+ if test "x$ax_matlab_lib_fftw3" = "xno"; then
+ matlab_fftw3_LIBS="-lfftw3 -lm"
+ LIBS="$matlab_fftw3_LIBS $saved_LIBS"
+ AC_MSG_CHECKING([for Matlab fftw3 library (-lm set)])
+ AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_execute])], [ax_matlab_lib_fftw3=yes],[ax_matlab_lib_fftw3=no])
+ AC_MSG_RESULT([$ax_matlab_lib_fftw3])
+ fi
+
+ if test "x$ax_matlab_lib_fftw3" = "xno"; then
+ matlab_fftw3_LIBS="-lfftw3 -pthread -lm"
+ LIBS="$matlab_fftw3_LIBS $saved_LIBS"
+ AC_MSG_CHECKING([for Matlab fftw3 library (-lpthread -lm set)])
+ AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_execute])], [ax_matlab_lib_fftw3=yes],[ax_matlab_lib_fftw3=no])
+ AC_MSG_RESULT([$ax_matlab_lib_fftw3])
+ fi
+
+ if test "x$ax_matlab_lib_fftw3" = "xno"; then
+ AC_MSG_ERROR([You don't seem to have installed installed the FFTW 3 libray for the NFFT Matlab interface.])
+ fi
+
+ if test "x$matlab_threads" = "xyes"; then
+ LIBS="$matlab_fftw3_LIBS $saved_LIBS"
+ AC_MSG_CHECKING([for Matlab combined fftw3 library with thread support])
+ AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_init_threads])], [ax_matlab_lib_fftw3_threads=yes],[ax_matlab_lib_fftw3_threads=no])
+ AC_MSG_RESULT([$ax_matlab_lib_fftw3_threads])
+
+ if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
+ ax_matlab_lib_fftw3_threads="yes"
+ LIBS="$matlab_fftw3_LIBS -lpthread -lm $saved_LIBS"
+ AC_MSG_CHECKING([for Matlab combined fftw3 library with thread support (-lpthread -lm set)])
+ AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_init_threads])], [matlab_fftw3_LIBS="$matlab_fftw3_LIBS -lpthread -lm"],[ax_matlab_lib_fftw3_threads=no])
+ AC_MSG_RESULT([$ax_matlab_lib_fftw3_threads])
+ fi
+
+ if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
+ ax_matlab_lib_fftw3_threads="yes"
+ LIBS="-lfftw3_threads $matlab_fftw3_LIBS $saved_LIBS"
+ AC_MSG_CHECKING([for Matlab fftw3 library with thread support])
+ AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_init_threads])], [matlab_fftw3_LIBS="-lfftw3_threads $matlab_fftw3_LIBS"],[ax_matlab_lib_fftw3_threads=no])
+ AC_MSG_RESULT([$ax_matlab_lib_fftw3_threads])
+ fi
+
+ if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
+ ax_matlab_lib_fftw3_threads="yes"
+ LIBS="-lfftw3_threads -lpthread $matlab_fftw3_LIBS $saved_LIBS"
+ AC_MSG_CHECKING([for Matlab fftw3 library with thread support (-lpthread set)])
+ AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_init_threads])], [matlab_fftw3_LIBS="-lfftw3_threads -lpthread $matlab_fftw3_LIBS"],[ax_matlab_lib_fftw3_threads=no])
+ AC_MSG_RESULT([$ax_matlab_lib_fftw3_threads])
+ fi
+
+ if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
+ AC_MSG_ERROR([You don't seem to have installed the FFTW 3 libray for the NFFT Matlab interface.])
+ fi
+ fi
+
+ LIBS="$saved_LIBS"
+ LDFLAGS="$saved_LDFLAGS"
+ fi
+ AM_CONDITIONAL(HAVE_MATLAB, test "x$ax_prog_matlab" = "xyes" )
+ AM_CONDITIONAL(HAVE_MATLAB_THREADS, test "x$matlab_threads" = "xyes")
+ AC_SUBST(matlab_CPPFLAGS)
+ AC_SUBST(matlab_LIBS)
+ AC_SUBST(matlab_LDFLAGS)
+ AC_SUBST(matlab_mexext)
+ AC_SUBST(matlab_fftw3_LIBS)
+ AC_SUBST(matlab_fftw3_LDFLAGS)
+])
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100644
index 0000000..44e0ecf
--- /dev/null
+++ b/m4/libtool.m4
@@ -0,0 +1,7982 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 57 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+ [m4_default([$3],
+ [m4_fatal([Libtool version $1 or higher is required],
+ 63)])],
+ [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+ *\ * | *\ *)
+ AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+ case $cc_temp in
+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ _LT_PATH_MAGIC
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+ [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME. Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+ [m4_ifval([$1], [$1], [$2])])
+ lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+ m4_ifval([$4],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+ lt_dict_add_subkey([lt_decl_dict], [$2],
+ [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+ [0], [m4_fatal([$0: too few arguments: $#])],
+ [1], [m4_fatal([$0: too few arguments: $#: $1])],
+ [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+ [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+ [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+ m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_if([$2], [],
+ m4_quote(lt_decl_varnames),
+ m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+ lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'. VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly. In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+# <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+ [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+# # Some comment about what VAR is for.
+# visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+ [description])))[]dnl
+m4_pushdef([_libtool_name],
+ m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+ [0], [_libtool_name=[$]$1],
+ [1], [_libtool_name=$lt_[]$1],
+ [2], [_libtool_name=$lt_[]$1],
+ [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script. Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+ m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'. Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+ dnl If the libtool generation code has been placed in $CONFIG_LT,
+ dnl instead of duplicating it all over again into config.status,
+ dnl then we will have config.status run $CONFIG_LT later, so it
+ dnl needs to know what name is stored there:
+ [AC_CONFIG_COMMANDS([libtool],
+ [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+ dnl If the libtool generation code is destined for config.status,
+ dnl expand the accumulated commands and init code now:
+ [AC_CONFIG_COMMANDS([libtool],
+ [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable. If COMMENT is supplied, it is inserted after the
+# `#!' sequence but before initialization text begins. After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script. The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test $lt_write_fail = 0 && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+ echo
+ AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+
+Report bugs to <bug-libtool at gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+ case $[1] in
+ --version | --v* | -V )
+ echo "$lt_cl_version"; exit 0 ;;
+ --help | --h* | -h )
+ echo "$lt_cl_help"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --quiet | --q* | --silent | --s* | -q )
+ lt_cl_silent=: ;;
+
+ -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+ *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+ esac
+ shift
+done
+
+if $lt_cl_silent; then
+ exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure. Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test "$silent" = yes &&
+ lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars. Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+ m4_if(_LT_TAG, [C], [
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+ _LT_PROG_LTMAIN
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ _LT_PROG_REPLACE_SHELLFNS
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+# autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+ [C], [_LT_LANG(C)],
+ [C++], [_LT_LANG(CXX)],
+ [Go], [_LT_LANG(GO)],
+ [Java], [_LT_LANG(GCJ)],
+ [Fortran 77], [_LT_LANG(F77)],
+ [Fortran], [_LT_LANG(FC)],
+ [Windows Resource], [_LT_LANG(RC)],
+ [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+ [_LT_LANG($1)],
+ [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+ [LT_SUPPORTED_TAG([$1])dnl
+ m4_append([_LT_TAGS], [$1 ])dnl
+ m4_define([_LT_LANG_]$1[_enabled], [])dnl
+ _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_GO. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC], [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+ if test -n "$ac_tool_prefix"; then
+ AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+ fi
+fi
+if test -z "$GOC"; then
+ AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [LT_LANG(CXX)],
+ [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [LT_LANG(F77)],
+ [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+ [LT_LANG(FC)],
+ [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [m4_ifdef([AC_PROG_GCJ],
+ [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([A][M_PROG_GCJ],
+ [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([LT_PROG_GCJ],
+ [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+ [LT_LANG(GO)],
+ [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+ [LT_LANG(RC)],
+ [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+ case $host_os in
+ rhapsody* | darwin*)
+ AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+ AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+ AC_CHECK_TOOL([LIPO], [lipo], [:])
+ AC_CHECK_TOOL([OTOOL], [otool], [:])
+ AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+ _LT_DECL([], [DSYMUTIL], [1],
+ [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+ _LT_DECL([], [NMEDIT], [1],
+ [Tool to change global to local symbols on Mac OS X])
+ _LT_DECL([], [LIPO], [1],
+ [Tool to manipulate fat objects and archives on Mac OS X])
+ _LT_DECL([], [OTOOL], [1],
+ [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+ _LT_DECL([], [OTOOL64], [1],
+ [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+ [lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ # If there is a non-empty error log, and "single_module"
+ # appears in it, assume the flag caused a linker warning
+ if test -s conftest.err && $GREP single_module conftest.err; then
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ # Otherwise, if the output was created with a 0 exit code from
+ # the compiler, it worked.
+ elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi])
+
+ AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+ [lt_cv_ld_exported_symbols_list],
+ [lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [lt_cv_ld_exported_symbols_list=yes],
+ [lt_cv_ld_exported_symbols_list=no])
+ LDFLAGS="$save_LDFLAGS"
+ ])
+
+ AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+ [lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+ echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+ $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+ echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+ $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -s conftest.err && $GREP force_load conftest.err; then
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+ ])
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ 10.[[012]]*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+ m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ if test "$lt_cv_ld_force_load" = "yes"; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+ m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+ [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes])
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=func_echo_all
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+ m4_if([$1], [CXX],
+[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+ fi
+],[])
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+if test "${lt_cv_aix_libpath+set}" = set; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+ lt_aix_libpath_sed='[
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }]'
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi],[])
+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+ fi
+ ])
+ aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script which will find a shell with a builtin
+# printf (which we can use as an echo command).
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
+
+case "$ECHO" in
+ printf*) AC_MSG_RESULT([printf]) ;;
+ print*) AC_MSG_RESULT([print -r]) ;;
+ *) AC_MSG_RESULT([cat]) ;;
+esac
+
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test "X`printf %s $ECHO`" = "X$ECHO" \
+ || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
+
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[ --with-sysroot[=DIR] Search for dependent libraries within DIR
+ (or the compiler's sysroot if not specified).],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted. We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+ if test "$GCC" = yes; then
+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+ fi
+ ;; #(
+ /*)
+ lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+ ;; #(
+ no|'')
+ ;; #(
+ *)
+ AC_MSG_RESULT([${with_sysroot}])
+ AC_MSG_ERROR([The sysroot must be an absolute path.])
+ ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and in which our libraries should be installed.])])
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AS_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*)
+ case $host in
+ i?86-*-solaris*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ sparc*-*-solaris*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
+ if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+ LD="${LD-ld}_sol2"
+ fi
+ ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+ [lt_cv_ar_at_file=no
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+ [echo conftest.$ac_objext > conftest.lst
+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([lt_ar_try])
+ if test "$ac_status" -eq 0; then
+ # Ensure the archiver fails upon bogus file names.
+ rm -f conftest.$ac_objext libconftest.a
+ AC_TRY_EVAL([lt_ar_try])
+ if test "$ac_status" -ne 0; then
+ lt_cv_ar_at_file=@
+ fi
+ fi
+ rm -f conftest.* libconftest.a
+ ])
+ ])
+
+if test "x$lt_cv_ar_at_file" = xno; then
+ archiver_list_spec=
+else
+ archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+ [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[_LT_PROG_AR
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+ [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+ [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+ [Whether to use a lock for old archive extraction])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ fi
+ $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+ m4_if([$5], , :, [$5])
+else
+ m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $3"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ else
+ $2=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+ m4_if([$4], , :, [$4])
+else
+ m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ os2*)
+ # The test takes a long time on OS/2.
+ lt_cv_sys_max_cmd_len=8192
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+ [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}]
+_LT_EOF
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_dlunknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen="shl_load"],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen="dlopen"],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+ [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+ [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+ [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w . 2>&AS_MESSAGE_LOG_FD
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+ [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test "$hard_links" = no; then
+ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+ [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+ [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+ test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+ test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+ test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+ test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+ [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+ [], [
+if test "$GCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
+ *) lt_sed_strip_eq="s,=/,/,g" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+ if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[[4-9]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[[45]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$cc_basename in
+ yes,*)
+ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ ;;
+
+ *,cl*)
+ # Native MSVC
+ libname_spec='$name'
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ library_names_spec='${libname}.dll.lib'
+
+ case $build_os in
+ mingw*)
+ sys_lib_search_path_spec=
+ lt_save_ifs=$IFS
+ IFS=';'
+ for lt_path in $LIB
+ do
+ IFS=$lt_save_ifs
+ # Let DOS variable expansion print the short 8.3 style file name.
+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+ done
+ IFS=$lt_save_ifs
+ # Convert to MSYS style.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+ ;;
+ cygwin*)
+ # Convert to unix form, then to dos form, then back to unix form
+ # but this time dos style (no spaces!) so that the unix form looks
+ # like /cygdrive/c/PROGRA~1:/cygdr...
+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ *)
+ sys_lib_search_path_spec="$LIB"
+ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # FIXME: find the short name or the path components, as spaces are
+ # common. (e.g. "Program Files" -> "PROGRA~1")
+ ;;
+ esac
+
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
+ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[[23]].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+haiku*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[[3-9]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+ [lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+ [lt_cv_shlibpath_overrides_runpath=yes])])
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+ ])
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[[89]] | openbsd2.[[89]].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+ [Variables whose values should be saved in libtool wrapper scripts and
+ restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+ [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+ [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+ [[List of archive names. First name is the real one, the rest are links.
+ The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+ [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+ [Permission mode override for installation of shared libraries])
+_LT_DECL([], [postinstall_cmds], [2],
+ [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+ [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+ [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+ [[As "finish_cmds", except a single script fragment to be evaled but
+ not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+ [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+ [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+ [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] | ?:[\\/]*])
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="m4_if([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$1; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+ [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+ [AS_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ if test "$GCC" != yes; then
+ reload_cmds=false
+ fi
+ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[[45]]*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+ if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ # Keep this pattern in sync with the one in func_win32_libid.
+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[[3-9]]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+ case $host_os in
+ mingw* | pw32*)
+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+ want_nocaseglob=yes
+ else
+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+ fi
+ ;;
+ esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+ [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+ [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+ [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+ [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+ case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+ AC_SUBST([DUMPBIN])
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+ [lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+ cat conftest.out >&AS_MESSAGE_LOG_FD
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+ # two different shell functions defined in ltmain.sh
+ # decide which to use based on capabilities of $DLLTOOL
+ case `$DLLTOOL --help 2>&1` in
+ *--identify-strict*)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+ ;;
+ *)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+ ;;
+ esac
+ ;;
+*)
+ # fallback: assume linklib IS sharedlib
+ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+ ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+ [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+ [lt_cv_path_mainfest_tool=no
+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+ lt_cv_path_mainfest_tool=yes
+ fi
+ rm -f conftest*])
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+ MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, cos, LIBM="-lm")
+ ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+ case $cc_basename in
+ nvcc*)
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+ esac
+
+ _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+ [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris*)
+ symcode='[[BDRT]]'
+ ;;
+sco3.2v5*)
+ symcode='[[DT]]'
+ ;;
+sysv4.2uw2*)
+ symcode='[[DT]]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[[ABDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK ['"\
+" {last_section=section; section=\$ 3};"\
+" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx]"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT@&t at _DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data. */
+# define LT@&t at _DLSYM_CONST
+#else
+# define LT@&t at _DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+LT@&t at _DLSYM_CONST struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_globsym_save_LIBS=$LIBS
+ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS=$lt_globsym_save_LIBS
+ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+ nm_file_list_spec='@'
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+ [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+ [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+ [lt_cv_sys_global_symbol_to_c_name_address], [1],
+ [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+ [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+ [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([], [nm_file_list_spec], [1],
+ [Specify filename containing input files for $NM])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+m4_if([$1], [CXX], [
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ ;;
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix[[4-9]]*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ if test "$host_cpu" != ia64; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ ecpc* )
+ # old Intel C++ for x86_64 which still supported -KPIC.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ icpc* )
+ # Intel C++, used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ cxx*)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+ # IBM XL 8.0, 9.0 on PPC and BlueGene
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+ if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+ fi
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+ ;;
+ nagfor*)
+ # NAG Fortran compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ ccc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+ ;;
+ *Sun\ F* | *Sun*Fortran*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ *Intel*\ [[CF]]*Compiler*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ *Portland\ Group*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ rdos*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ unicos*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+ [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+ [Additional compiler flags for building library objects])
+
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+ [How to pass a linker flag through the compiler])
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+ [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ case $host_os in
+ aix[[4-9]]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ # Also, AIX nm treats weak defined symbols like other global defined
+ # symbols, whereas GNU nm marks them as "W".
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+ ;;
+ cygwin* | mingw* | cegcc*)
+ case $cc_basename in
+ cl*)
+ _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+ ;;
+ esac
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+], [
+ runpath_var=
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(archive_cmds, $1)=
+ _LT_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_TAGVAR(compiler_needs_object, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(hardcode_automatic, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(inherit_rpath, $1)=no
+ _LT_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_TAGVAR(module_cmds, $1)=
+ _LT_TAGVAR(module_expsym_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test "$with_gnu_ld" = yes; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+ *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test "$lt_use_gnu_ld_interface" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[[3-9]]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ haiku*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=' $pic_flag'
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ tmp_sharedflag='--shared' ;;
+ xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+ runpath_var=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ # Also, AIX nm treats weak defined symbols like other global
+ # defined symbols, whereas GNU nm marks them as "W".
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ if test "$with_gnu_ld" = yes; then
+ # We only use this code for GNU lds that support --whole-archive.
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[[45]]*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ case $cc_basename in
+ cl*)
+ # Native MSVC
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+ else
+ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+ # Don't use ranlib
+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile="$lt_outputfile.exe"
+ lt_tool_outputfile="$lt_tool_outputfile.exe"
+ ;;
+ esac~
+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # Assume MSVC wrapper
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2.*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ m4_if($1, [], [
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ _LT_LINKER_OPTION([if $CC understands -b],
+ _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+ [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+ [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+ [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ # This should be the same for all languages, so no per-tag cache variable.
+ AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+ [lt_cv_irix_exported_symbol],
+ [save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ AC_LINK_IFELSE(
+ [AC_LANG_SOURCE(
+ [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+ [C++], [[int foo (void) { return 0; }]],
+ [Fortran 77], [[
+ subroutine foo
+ end]],
+ [Fortran], [[
+ subroutine foo
+ end]])])],
+ [lt_cv_irix_exported_symbol=yes],
+ [lt_cv_irix_exported_symbol=no])
+ LDFLAGS="$save_LDFLAGS"])
+ if test "$lt_cv_irix_exported_symbol" = yes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+ fi
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ case $host_os in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+ [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $_LT_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+ [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+ [$RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+ then
+ lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ ])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+ [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+ [enable_shared_with_static_runtimes], [0],
+ [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+ [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+ [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+ [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+ [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+ [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+ [Commands used to build a loadable module if different from building
+ a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+ [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+ [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+ [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+ [Flag to hardcode $libdir into a binary during linking.
+ This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+ [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+ DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+ DIR into the resulting binary and the resulting library dependency is
+ "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+ library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+ [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+ [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+ [Set to "yes" if building a shared library automatically hardcodes DIR
+ into the library and all subsequent libraries and executables linked
+ against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+ [Set to yes if linker adds runtime paths of dependent libraries
+ to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+ [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [always_export_symbols], [0],
+ [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+ [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+ [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+ [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+ [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+ [Commands necessary for finishing linking programs])
+_LT_TAGDECL([], [file_list_spec], [1],
+ [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+ LT_SYS_DLOPEN_SELF
+ _LT_CMD_STRIPLIB
+
+ # Report which library types will actually be built
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ AC_PROG_CXXCPP
+else
+ _lt_caught_CXX_error=yes
+fi
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="int some_variable = 0;"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_CFLAGS=$CFLAGS
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+ lt_save_with_gnu_ld=$with_gnu_ld
+ lt_save_path_LD=$lt_cv_path_LD
+ if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+ else
+ $as_unset lt_cv_prog_gnu_ld
+ fi
+ if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+ else
+ $as_unset lt_cv_path_LD
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
+ CFLAGS=$CXXFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ # We don't want -fno-exception when compiling C++ code, so set the
+ # no_builtin_flag separately
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+ else
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+ fi
+
+ if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+ LT_PATH_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+ $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+ fi
+
+ # PORTME: fill in a description of your system's C++ link characteristics
+ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to
+ # export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ if test "$with_gnu_ld" = yes; then
+ # We only use this code for GNU lds that support --whole-archive.
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared
+ # libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $GXX,$cc_basename in
+ ,cl* | no,cl*)
+ # Native MSVC
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+ else
+ $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ # Don't use ranlib
+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile="$lt_outputfile.exe"
+ lt_tool_outputfile="$lt_tool_outputfile.exe"
+ ;;
+ esac~
+ func_to_tool_file "$lt_outputfile"~
+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # g++
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ freebsd-elf*)
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+
+ freebsd* | dragonfly*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ gnu*)
+ ;;
+
+ haiku*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ hpux9*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC*)
+ # SGI C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+ fi
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc* | ecpc* )
+ # Intel C++
+ with_gnu_ld=yes
+ # version 8.0 and above of icpc choke on multiply defined symbols
+ # if we add $predep_objects and $postdep_objects, however 7.1 and
+ # earlier do not add the objects themselves.
+ case `$CC -V 2>&1` in
+ *"Version 7."*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 8.0 or newer
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ case `$CC -V` in
+ *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
+ _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+ _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+ $RANLIB $oldlib'
+ _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ *) # Version 6 and above use weak symbols
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ ;;
+ cxx*)
+ # Compaq C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+ ;;
+ xl* | mpixl* | bgxl*)
+ # IBM XL 8.0 on PPC, with GNU ld
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+ # Not sure whether something based on
+ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+ # would be better.
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+
+ *nto* | *qnx*)
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ openbsd2*)
+ # C++ shared libraries are fairly broken
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ fi
+ output_verbose_link_cmd=func_echo_all
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ case $host in
+ osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+ *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+ esac
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ case $host in
+ osf3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
+ $RM $lib.exp'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ case $host in
+ osf3*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ fi
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+ '"$_LT_TAGVAR(old_archive_cmds, $1)"
+ _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+ '"$_LT_TAGVAR(reload_cmds, $1)"
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+ test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+ _LT_TAGVAR(GCC, $1)="$GXX"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+ with_gnu_ld=$lt_save_with_gnu_ld
+ lt_cv_path_LDCXX=$lt_cv_path_LD
+ lt_cv_path_LD=$lt_save_path_LD
+ lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+ esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+_LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+ case ${prev}${p} in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" ||
+ test $p = "-R"; then
+ prev=$p
+ continue
+ fi
+
+ # Expand the sysroot to ease extracting the directories later.
+ if test -z "$prev"; then
+ case $p in
+ -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+ -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+ -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+ esac
+ fi
+ case $p in
+ =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+ esac
+ if test "$pre_test_object_deps_done" = no; then
+ case ${prev} in
+ -L | -R)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+ else
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+ _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+ else
+ _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+ fi
+ fi
+ prev=
+ ;;
+
+ *.lto.$objext) ;; # Ignore GCC LTO objects
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+ _LT_TAGVAR(predep_objects, $1)="$p"
+ else
+ _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+ _LT_TAGVAR(postdep_objects, $1)="$p"
+ else
+ _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ _LT_TAGVAR(predep_objects,$1)=
+ _LT_TAGVAR(postdep_objects,$1)=
+ _LT_TAGVAR(postdeps,$1)=
+ ;;
+
+linux*)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ # Adding this requires a known-good setup of shared libraries for
+ # Sun compiler versions before 5.6, else PIC objects from an old
+ # archive will be linked into the output, leading to subtle bugs.
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+ [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+ [Dependencies to place before and after the objects being linked to
+ create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+ [The library search path used internally by the compiler when linking
+ a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test "X$F77" = "Xno"; then
+ _lt_disable_F77=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
+ lt_save_CFLAGS=$CFLAGS
+ CC=${F77-"f77"}
+ CFLAGS=$FFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+ GCC=$G77
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)="$G77"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC="$lt_save_CC"
+ CFLAGS="$lt_save_CFLAGS"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test "X$FC" = "Xno"; then
+ _lt_disable_FC=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
+ lt_save_CFLAGS=$CFLAGS
+ CC=${FC-"f95"}
+ CFLAGS=$FCFLAGS
+ compiler=$CC
+ GCC=$ac_cv_fc_compiler_gnu
+
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+CFLAGS=
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+ :
+ _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+ [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+ [AC_CHECK_TOOL(GCJ, gcj,)
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+ [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
+# ------------------------------------------------------
+# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
+# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
+m4_defun([_LT_PROG_FUNCTION_REPLACE],
+[dnl {
+sed -e '/^$1 ()$/,/^} # $1 /c\
+$1 ()\
+{\
+m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1])
+} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+])
+
+
+# _LT_PROG_REPLACE_SHELLFNS
+# -------------------------
+# Replace existing portable implementations of several shell functions with
+# equivalent extended shell implementations where those features are available..
+m4_defun([_LT_PROG_REPLACE_SHELLFNS],
+[if test x"$xsi_shell" = xyes; then
+ _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac])
+
+ _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
+ func_basename_result="${1##*/}"])
+
+ _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+ func_basename_result="${1##*/}"])
+
+ _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}])
+
+ _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
+ func_split_long_opt_name=${1%%=*}
+ func_split_long_opt_arg=${1#*=}])
+
+ _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
+ func_split_short_opt_arg=${1#??}
+ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
+
+ _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac])
+
+ _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo])
+
+ _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))])
+
+ _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}])
+fi
+
+if test x"$lt_shell_append" = xyes; then
+ _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"])
+
+ _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
+ func_quote_for_eval "${2}"
+dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
+ eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
+
+ # Save a `func_append' function call where possible by direct use of '+='
+ sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+ test 0 -eq $? || _lt_function_replace_fail=:
+else
+ # Save a `func_append' function call even when '+=' is not available
+ sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+ test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+ AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
+fi
+])
+
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine which file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path). These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+ ;;
+ esac
+ ;;
+ *-*-cygwin* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+ ;;
+ esac
+ ;;
+ * ) # unhandled hosts (and "normal" native builds)
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+ [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ esac
+ ;;
+esac
+])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+ [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100644
index 0000000..5d9acd8
--- /dev/null
+++ b/m4/ltoptions.m4
@@ -0,0 +1,384 @@
+# Helper functions for option handling. -*- Autoconf -*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 7 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it. Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+ _LT_MANGLE_DEFUN([$1], [$2]),
+ [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+ [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME. If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+ dnl
+ dnl Simply set some default values (i.e off) if boolean options were not
+ dnl specified:
+ _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+ ])
+ _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+ ])
+ dnl
+ dnl If no reference was made to various pairs of opposing options, then
+ dnl we run the default mode handler for the pair. For example, if neither
+ dnl `shared' nor `disable-shared' was passed, we enable building of shared
+ dnl archives by default:
+ _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+ _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+ [_LT_ENABLE_FAST_INSTALL])
+ ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS], [1], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+ [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+ _LT_DECL([build_libtool_libs], [enable_shared], [0],
+ [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+ [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+ _LT_DECL([build_old_libs], [enable_static], [0],
+ [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+ [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+ [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+ [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [lt_p=${PACKAGE-default}
+ case $withval in
+ yes|no) pic_mode=$withval ;;
+ *)
+ pic_mode=default
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for lt_pkg in $withval; do
+ IFS="$lt_save_ifs"
+ if test "X$lt_pkg" = "X$lt_p"; then
+ pic_mode=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+ [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+ [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+ [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+ [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+ [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100644
index 0000000..9000a05
--- /dev/null
+++ b/m4/ltsugar.m4
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+ [$#], [2], [[$2]],
+ [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+ [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+ [$#], 1, [],
+ [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+ m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+ [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+ [m4_foreach([_Lt_suffix],
+ ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+ [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+ [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+ [lt_append([$1], [$2], [$3])$4],
+ [$5])],
+ [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+ m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+ m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+ [$5],
+ [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+ [lt_join(m4_quote(m4_default([$4], [[, ]])),
+ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+ [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100644
index 0000000..07a8602
--- /dev/null
+++ b/m4/ltversion.m4
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers -*- Autoconf -*-
+#
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# @configure_input@
+
+# serial 3337 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4.2])
+m4_define([LT_PACKAGE_REVISION], [1.3337])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4.2'
+macro_revision='1.3337'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100644
index 0000000..c573da9
--- /dev/null
+++ b/m4/lt~obsolete.m4
@@ -0,0 +1,98 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
+# Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else. This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])
diff --git a/matlab/Makefile.am b/matlab/Makefile.am
new file mode 100644
index 0000000..3aa1ac6
--- /dev/null
+++ b/matlab/Makefile.am
@@ -0,0 +1,23 @@
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+if HAVE_NFSFT
+ DIR_NFSFT=nfsft
+else
+ DIR_NFSFT=
+endif
+
+DIR_NFFT=nfft
+
+SUBDIRS = . $(DIR_NFFT) $(DIR_NFSFT)
+
+AM_CPPFLAGS = -I$(top_srcdir)/include $(matlab_CPPFLAGS)
+
+noinst_LTLIBRARIES = libmatlab.la
+
+libmatlab_la_SOURCES = args.c malloc.c imex.h
+
+if HAVE_MATLAB_THREADS
+ libmatlab_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+
+EXTRA_DIST = README
diff --git a/matlab/Makefile.in b/matlab/Makefile.in
new file mode 100644
index 0000000..a0b6aa6
--- /dev/null
+++ b/matlab/Makefile.in
@@ -0,0 +1,733 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = matlab
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmatlab_la_LIBADD =
+am_libmatlab_la_OBJECTS = libmatlab_la-args.lo libmatlab_la-malloc.lo
+libmatlab_la_OBJECTS = $(am_libmatlab_la_OBJECTS)
+libmatlab_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libmatlab_la_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libmatlab_la_SOURCES)
+DIST_SOURCES = $(libmatlab_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = . nfft nfsft
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ at HAVE_NFSFT_FALSE@DIR_NFSFT =
+ at HAVE_NFSFT_TRUE@DIR_NFSFT = nfsft
+DIR_NFFT = nfft
+SUBDIRS = . $(DIR_NFFT) $(DIR_NFSFT)
+AM_CPPFLAGS = -I$(top_srcdir)/include $(matlab_CPPFLAGS)
+noinst_LTLIBRARIES = libmatlab.la
+libmatlab_la_SOURCES = args.c malloc.c imex.h
+ at HAVE_MATLAB_THREADS_TRUE@libmatlab_la_CFLAGS = $(OPENMP_CFLAGS)
+EXTRA_DIST = README
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu matlab/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu matlab/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libmatlab.la: $(libmatlab_la_OBJECTS) $(libmatlab_la_DEPENDENCIES) $(EXTRA_libmatlab_la_DEPENDENCIES)
+ $(libmatlab_la_LINK) $(libmatlab_la_OBJECTS) $(libmatlab_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmatlab_la-args.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmatlab_la-malloc.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+libmatlab_la-args.lo: args.c
+ at am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmatlab_la_CFLAGS) $(CFLAGS) -MT libmatlab_la-args.lo -MD -MP -MF $(DEPDIR)/libmatlab_la-args.Tpo -c -o libmatlab_la-args.lo `test -f 'args.c' || echo '$(srcdir)/'`args.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libmatlab_la-args.Tpo $(DEPDIR)/libmatlab_la-args.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='args.c' object='libmatlab_la-args.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmatlab_la_CFLAGS) $(CFLAGS) -c -o libmatlab_la-args.lo `test -f 'args.c' || echo '$(srcdir)/'`args.c
+
+libmatlab_la-malloc.lo: malloc.c
+ at am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmatlab_la_CFLAGS) $(CFLAGS) -MT libmatlab_la-malloc.lo -MD -MP -MF $(DEPDIR)/libmatlab_la-malloc.Tpo -c -o libmatlab_la-malloc.lo `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libmatlab_la-malloc.Tpo $(DEPDIR)/libmatlab_la-malloc.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='malloc.c' object='libmatlab_la-malloc.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmatlab_la_CFLAGS) $(CFLAGS) -c -o libmatlab_la-malloc.lo `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+cscopelist-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES)
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+ cscopelist-recursive ctags-recursive install-am install-strip \
+ tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES cscopelist cscopelist-recursive ctags \
+ ctags-recursive distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/matlab/README b/matlab/README
new file mode 100644
index 0000000..79623c8
--- /dev/null
+++ b/matlab/README
@@ -0,0 +1 @@
+This directory contains Matlab interfaces to the NFFT library.
diff --git a/matlab/args.c b/matlab/args.c
new file mode 100644
index 0000000..5c65257
--- /dev/null
+++ b/matlab/args.c
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: args.c 3967 2013-04-23 08:59:35Z tovo $ */
+
+#include "config.h"
+#include "imex.h"
+
+int nfft_mex_get_int(const mxArray *p, const char *errmsg)
+{
+ DM(if (!mxIsDouble(p) || mxIsComplex(p) || mxGetM(p) != 1 || mxGetN(p) != 1)
+ mexErrMsgTxt(errmsg);)
+ return mxGetScalar(p);
+}
+
+double nfft_mex_get_double(const mxArray *p, const char *errmsg)
+{
+ DM(if (!mxIsDouble(p) || mxIsComplex(p) || mxGetM(p) != 1 || mxGetN(p) != 1)
+ mexErrMsgTxt(errmsg);)
+ return mxGetScalar(p);
+}
diff --git a/matlab/imex.h b/matlab/imex.h
new file mode 100644
index 0000000..2e79169
--- /dev/null
+++ b/matlab/imex.h
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: imex.h 3967 2013-04-23 08:59:35Z tovo $ */
+
+/* NFFT mex internal header file */
+#ifndef MEXUTIL_H
+#define MEXUTIL_H
+
+#include <math.h>
+
+#ifdef HAVE_MATLAB_GCC_REQUIRE_UNDEF_STDC_UTF_16
+ #undef __STDC_UTF_16__
+#endif
+
+#include <mex.h>
+#include <matrix.h>
+
+#ifdef HAVE_MATLAB_GCC_REQUIRE_UNDEF_STDC_UTF_16
+ #define __STDC_UTF_16__
+#endif
+
+/*----------------------------------------------------------------------------*/
+/* Replacements for nfft_malloc and nfft_free plus install routine */
+extern void *nfft_mex_malloc(size_t n);
+extern void nfft_mex_free(void *p);
+extern void nfft_mex_install_mem_hooks(void);
+
+int nfft_mex_get_int(const mxArray *p, const char *errmsg);
+double nfft_mex_get_double(const mxArray *p, const char *errmsg);
+
+#ifdef MATLAB_ARGCHECKS
+#define DM(Y) Y
+#else
+#define DM(Y)
+#endif
+
+/*----------------------------------------------------------------------------*/
+/* Checks if argument is a scalar. */
+#define ARG_CHECK_SCALAR(x,y) \
+if (mxGetM(prhs[x]) != 1 || mxGetN(prhs[x]) != 1 || mxIsDouble(prhs[x]) != 1) \
+ mexErrMsgTxt(#y " argument must be a scalar.");
+
+/* Gets and stores pointer to argument data. */
+#define ARG_GET_PTR(x,y) \
+y = mxGetPr(prhs[x]);
+
+/* Checks and get argument as nonnegative integer. */
+#define ARG_GET_NONNEG_INT(x,y,z) \
+ARG_CHECK_SCALAR(x,y) \
+ARG_GET_PTR(x,z) \
+if (z[0] != round(z[0]) || z[0] < 0) \
+ mexErrMsgTxt(#y " argument must be a nonnegative integer.");
+
+/* Checks and get argument as positive integer. */
+#define ARG_GET_POS_INT(x,y,z) \
+ARG_CHECK_SCALAR(x,y) \
+ARG_GET_PTR(x,z) \
+if (z[0] != round(z[0]) || z[0] < 1) \
+ mexErrMsgTxt(#y " argument must be a nonnegative integer.");
+
+/* Checks and get argument as nonnegative double. */
+#define ARG_GET_NONNEG_DOUBLE(x,y,z) \
+ARG_CHECK_SCALAR(x,y) \
+ARG_GET_PTR(x,z) \
+if (z[0] < 0) \
+ mexErrMsgTxt(#y " argument must be a nonnegative number.");
+
+#endif
diff --git a/matlab/malloc.c b/matlab/malloc.c
new file mode 100644
index 0000000..acc59d6
--- /dev/null
+++ b/matlab/malloc.c
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: malloc.c 3967 2013-04-23 08:59:35Z tovo $ */
+
+#include "config.h"
+#include "imex.h"
+#include "nfft3.h"
+
+/** Replacement for fftw_malloc in mex files */
+void *nfft_mex_malloc(size_t n)
+{
+ void *p;
+
+ #pragma omp critical (nfft_omp_matlab)
+ {
+ p = mxMalloc(n);
+
+ /* Should never be reached if mxMalloc fails (in a mex file) but in Matlab
+ * you never know... */
+ if (!p)
+ mexErrMsgTxt("Not enough memory.");
+
+ mexMakeMemoryPersistent(p);
+ }
+ return p;
+}
+
+/** Replacement for fftw_free in mex files */
+void nfft_mex_free(void *p)
+{
+ #pragma omp critical (nfft_omp_matlab)
+ {
+ if (p)
+ mxFree(p);
+ }
+}
+
+/** install hooks. */
+void nfft_mex_install_mem_hooks(void)
+{
+ nfft_malloc_hook = nfft_mex_malloc;
+ nfft_free_hook = nfft_mex_free;
+}
diff --git a/matlab/nfft/Contents.m b/matlab/nfft/Contents.m
new file mode 100644
index 0000000..07134e6
--- /dev/null
+++ b/matlab/nfft/Contents.m
@@ -0,0 +1,30 @@
+% NFFT
+%
+% Files
+% FFT_OUT_OF_PLACE - FFT flag
+% FFTW_ESTIMATE - FFT flag
+% FFTW_MEASURE - FFT flag
+% FG_PSI - Precompuation flag
+% ndft_adjoint - Adjoint nonequispaced discrete Fourier transform (direct algorithm)
+% ndft_trafo - Nonequispaced discrete Fourier transformation (direct algorithm)
+% nfft_adjoint - Adjoint nonequispaced fast Fourier transform
+% nfft_finalize - Finalize plan
+% nfft_get_f - Get function values from plan
+% nfft_get_f_hat - Get Fourier coefficients from plan
+% nfft_get_x - Get nodes from plan
+% nfft_init_1d - Initialise plans
+% nfft_init_2d - Initialise plans
+% nfft_init_3d - Initialise plans
+% nfft_init_guru - Initialise plans, no error handling
+% nfft_precompute_psi - Precompute psi, dependent on nodes x
+% nfft_set_f - Set function values in plan
+% nfft_set_f_hat - Set Fourier coefficients in plan
+% nfft_set_x - Set nodes in plan
+% nfft_trafo - nonequispaced fast Fourier transformat
+% nfftmex - Gateway function to NFFT module from NFFT3
+% PRE_FG_PSI - Precomputation flag
+% PRE_FULL_PSI - Precomputation flag
+% PRE_LIN_PSI - Precomputation flag
+% PRE_PHI_HUT - Precomputation flag
+% PRE_PSI - Precomputation flag
+% simple_test - Example program: Basic usage principles
diff --git a/matlab/nfft/FFTW_ESTIMATE.m b/matlab/nfft/FFTW_ESTIMATE.m
new file mode 100644
index 0000000..9f59800
--- /dev/null
+++ b/matlab/nfft/FFTW_ESTIMATE.m
@@ -0,0 +1,25 @@
+% FFTW_ESTIMATE FFT flag
+% Valid for FFTW3
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: FFTW_ESTIMATE.m 3776 2012-06-03 13:29:25Z keiner $
+function f = FFTW_ESTIMATE()
+
+f = bitshift(1, 6);
diff --git a/matlab/nfft/FFTW_MEASURE.m b/matlab/nfft/FFTW_MEASURE.m
new file mode 100644
index 0000000..fd13945
--- /dev/null
+++ b/matlab/nfft/FFTW_MEASURE.m
@@ -0,0 +1,25 @@
+%FFTW_MEASURE FFT flag
+% Valid for FFTW3
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: FFTW_MEASURE.m 3776 2012-06-03 13:29:25Z keiner $
+function f = FFTW_MEASURE()
+
+f = 0;
diff --git a/matlab/nfft/FFT_OUT_OF_PLACE.m b/matlab/nfft/FFT_OUT_OF_PLACE.m
new file mode 100644
index 0000000..1a4e656
--- /dev/null
+++ b/matlab/nfft/FFT_OUT_OF_PLACE.m
@@ -0,0 +1,25 @@
+%FFT_OUT_OF_PLACE FFT flag
+% If this flag is set, FFTW uses disjoint input/output vectors.
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: FFT_OUT_OF_PLACE.m 3776 2012-06-03 13:29:25Z keiner $
+function f = FFT_OUT_OF_PLACE()
+
+f = bitshift(1, 9);
diff --git a/matlab/nfft/FG_PSI.m b/matlab/nfft/FG_PSI.m
new file mode 100644
index 0000000..638864b
--- /dev/null
+++ b/matlab/nfft/FG_PSI.m
@@ -0,0 +1,27 @@
+%FG_PSI Precompuation flag
+% If this flag is set, the convolution step (the multiplication with the
+% sparse matrix B) uses particular properties of the Gaussian window function
+% to trade multiplications for direct calls to exponential function.
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: FG_PSI.m 3776 2012-06-03 13:29:25Z keiner $
+function f = FG_PSI()
+
+f = bitshift(1, 1);
diff --git a/matlab/nfft/Makefile.am b/matlab/nfft/Makefile.am
new file mode 100644
index 0000000..5980fbb
--- /dev/null
+++ b/matlab/nfft/Makefile.am
@@ -0,0 +1,44 @@
+# $Id: Makefile.am 3842 2012-07-18 12:14:23Z tovo $
+
+# compiler flags
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/matlab $(matlab_CPPFLAGS)
+
+# matlab wrapper directory
+nfftmatlabdir = $(datadir)/nfft/matlab/nfft
+
+# library
+lib_LTLIBRARIES = libnfft.la
+libnfft_la_SOURCES = nfftmex.c
+
+libnfft_la_LIBADD = $(top_builddir)/libnfft3_matlab.la @matlab_fftw3_LIBS@ $(top_builddir)/matlab/libmatlab.la $(matlab_LIBS)
+
+libnfft_la_LDFLAGS = -no-undefined -module -shared -shrext $(matlab_mexext) -avoid-version @matlab_fftw3_LDFLAGS@ $(matlab_LDFLAGS)
+
+if HAVE_MATLAB_THREADS
+libnfft_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+
+
+dist_nfftmatlab_DATA = FFT_OUT_OF_PLACE.m FFTW_ESTIMATE.m FFTW_MEASURE.m FG_PSI.m Contents.m ndft_adjoint.m ndft_trafo.m \
+ nfft_adjoint.m nfft_finalize.m nfft_get_f.m nfft_get_f_hat.m nfft_get_x.m nfft_init_1d.m nfft_init_2d.m \
+ nfft_init_3d.m nfft_init_guru.m nfft_precompute_psi.m nfft_set_f.m nfft_set_f_hat.m nfft_set_x.m nfft_trafo.m \
+ PRE_FG_PSI.m PRE_FULL_PSI.m PRE_LIN_PSI.m PRE_PHI_HUT.m PRE_PSI.m simple_test.m \
+ nfft_get_num_threads.m nfft.m test_nfft1d.m test_nfft2d.m test_nfft3d.m
+
+# target all-am builds .libs/libnfft at matlab_mexext@
+nfftmex at matlab_mexext@: all-am
+ rm -f ./nfftmex at matlab_mexext@
+ $(LN_S) .libs/libnfft at matlab_mexext@ ./nfftmex at matlab_mexext@
+
+all: all-am nfftmex at matlab_mexext@
+
+clean: clean-am
+ rm -f ./nfftmex at matlab_mexext@
+
+install-exec-hook:
+ rm -f $(libdir)/nfftmex at matlab_mexext@
+ $(LN_S) $(libdir)/libnfft at matlab_mexext@ $(libdir)/nfftmex at matlab_mexext@
+
+uninstall-hook:
+ rm -f $(libdir)/nfftmex at matlab_mexext@
+
diff --git a/matlab/nfft/Makefile.in b/matlab/nfft/Makefile.in
new file mode 100644
index 0000000..0c3dfa4
--- /dev/null
+++ b/matlab/nfft/Makefile.in
@@ -0,0 +1,679 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3842 2012-07-18 12:14:23Z tovo $
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = matlab/nfft
+DIST_COMMON = $(dist_nfftmatlab_DATA) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(nfftmatlabdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libnfft_la_DEPENDENCIES = $(top_builddir)/libnfft3_matlab.la \
+ $(top_builddir)/matlab/libmatlab.la $(am__DEPENDENCIES_1)
+am_libnfft_la_OBJECTS = libnfft_la-nfftmex.lo
+libnfft_la_OBJECTS = $(am_libnfft_la_OBJECTS)
+libnfft_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libnfft_la_CFLAGS) \
+ $(CFLAGS) $(libnfft_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libnfft_la_SOURCES)
+DIST_SOURCES = $(libnfft_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DATA = $(dist_nfftmatlab_DATA)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# compiler flags
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/matlab $(matlab_CPPFLAGS)
+
+# matlab wrapper directory
+nfftmatlabdir = $(datadir)/nfft/matlab/nfft
+
+# library
+lib_LTLIBRARIES = libnfft.la
+libnfft_la_SOURCES = nfftmex.c
+libnfft_la_LIBADD = $(top_builddir)/libnfft3_matlab.la @matlab_fftw3_LIBS@ $(top_builddir)/matlab/libmatlab.la $(matlab_LIBS)
+libnfft_la_LDFLAGS = -no-undefined -module -shared -shrext $(matlab_mexext) -avoid-version @matlab_fftw3_LDFLAGS@ $(matlab_LDFLAGS)
+ at HAVE_MATLAB_THREADS_TRUE@libnfft_la_CFLAGS = $(OPENMP_CFLAGS)
+dist_nfftmatlab_DATA = FFT_OUT_OF_PLACE.m FFTW_ESTIMATE.m FFTW_MEASURE.m FG_PSI.m Contents.m ndft_adjoint.m ndft_trafo.m \
+ nfft_adjoint.m nfft_finalize.m nfft_get_f.m nfft_get_f_hat.m nfft_get_x.m nfft_init_1d.m nfft_init_2d.m \
+ nfft_init_3d.m nfft_init_guru.m nfft_precompute_psi.m nfft_set_f.m nfft_set_f_hat.m nfft_set_x.m nfft_trafo.m \
+ PRE_FG_PSI.m PRE_FULL_PSI.m PRE_LIN_PSI.m PRE_PHI_HUT.m PRE_PSI.m simple_test.m \
+ nfft_get_num_threads.m nfft.m test_nfft1d.m test_nfft2d.m test_nfft3d.m
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu matlab/nfft/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu matlab/nfft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+ }
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libnfft.la: $(libnfft_la_OBJECTS) $(libnfft_la_DEPENDENCIES) $(EXTRA_libnfft_la_DEPENDENCIES)
+ $(libnfft_la_LINK) -rpath $(libdir) $(libnfft_la_OBJECTS) $(libnfft_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libnfft_la-nfftmex.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+libnfft_la-nfftmex.lo: nfftmex.c
+ at am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfft_la_CFLAGS) $(CFLAGS) -MT libnfft_la-nfftmex.lo -MD -MP -MF $(DEPDIR)/libnfft_la-nfftmex.Tpo -c -o libnfft_la-nfftmex.lo `test -f 'nfftmex.c' || echo '$(srcdir)/'`nfftmex.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libnfft_la-nfftmex.Tpo $(DEPDIR)/libnfft_la-nfftmex.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nfftmex.c' object='libnfft_la-nfftmex.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfft_la_CFLAGS) $(CFLAGS) -c -o libnfft_la-nfftmex.lo `test -f 'nfftmex.c' || echo '$(srcdir)/'`nfftmex.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-dist_nfftmatlabDATA: $(dist_nfftmatlab_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(dist_nfftmatlab_DATA)'; test -n "$(nfftmatlabdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(nfftmatlabdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(nfftmatlabdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nfftmatlabdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(nfftmatlabdir)" || exit $$?; \
+ done
+
+uninstall-dist_nfftmatlabDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_nfftmatlab_DATA)'; test -n "$(nfftmatlabdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(nfftmatlabdir)'; $(am__uninstall_files_from_dir)
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(nfftmatlabdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_nfftmatlabDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_nfftmatlabDATA uninstall-libLTLIBRARIES
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+.MAKE: install-am install-exec-am install-strip uninstall-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am \
+ install-dist_nfftmatlabDATA install-dvi install-dvi-am \
+ install-exec install-exec-am install-exec-hook install-html \
+ install-html-am install-info install-info-am \
+ install-libLTLIBRARIES install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-dist_nfftmatlabDATA \
+ uninstall-hook uninstall-libLTLIBRARIES
+
+
+# target all-am builds .libs/libnfft at matlab_mexext@
+nfftmex at matlab_mexext@: all-am
+ rm -f ./nfftmex at matlab_mexext@
+ $(LN_S) .libs/libnfft at matlab_mexext@ ./nfftmex at matlab_mexext@
+
+all: all-am nfftmex at matlab_mexext@
+
+clean: clean-am
+ rm -f ./nfftmex at matlab_mexext@
+
+install-exec-hook:
+ rm -f $(libdir)/nfftmex at matlab_mexext@
+ $(LN_S) $(libdir)/libnfft at matlab_mexext@ $(libdir)/nfftmex at matlab_mexext@
+
+uninstall-hook:
+ rm -f $(libdir)/nfftmex at matlab_mexext@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/matlab/nfft/PRE_FG_PSI.m b/matlab/nfft/PRE_FG_PSI.m
new file mode 100644
index 0000000..8324451
--- /dev/null
+++ b/matlab/nfft/PRE_FG_PSI.m
@@ -0,0 +1,28 @@
+%PRE_FG_PSI Precomputation flag
+% If this flag is set, the convolution step (the multiplication with the sparse
+% matrix B) uses particular properties of the Gaussian window function to trade
+% multiplications for direct calls to exponential function (the remaining 2dM
+% direct calls are precomputed).
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: PRE_FG_PSI.m 3776 2012-06-03 13:29:25Z keiner $
+function f = PRE_FG_PSI()
+
+f = bitshift(1, 3);
diff --git a/matlab/nfft/PRE_FULL_PSI.m b/matlab/nfft/PRE_FULL_PSI.m
new file mode 100644
index 0000000..6eec515
--- /dev/null
+++ b/matlab/nfft/PRE_FULL_PSI.m
@@ -0,0 +1,27 @@
+%PRE_FULL_PSI Precomputation flag
+% If this flag is set, the convolution step (the multiplication with the sparse
+% matrix B) uses (2m+2)^dM precomputed values of the window function, in
+% addition indices of source and target vectors are stored.
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: PRE_FULL_PSI.m 3776 2012-06-03 13:29:25Z keiner $
+function f = PRE_FULL_PSI()
+
+f = bitshift(1, 5);
diff --git a/matlab/nfft/PRE_LIN_PSI.m b/matlab/nfft/PRE_LIN_PSI.m
new file mode 100644
index 0000000..bfed81c
--- /dev/null
+++ b/matlab/nfft/PRE_LIN_PSI.m
@@ -0,0 +1,27 @@
+%PRE_LIN_PSI Precomputation flag
+% If this flag is set, the convolution step (the multiplication with the sparse
+% matrix B) uses linear interpolation from a lookup table of equispaced samples
+% of the window function instead of exact values of the window function.
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: PRE_LIN_PSI.m 3776 2012-06-03 13:29:25Z keiner $
+function f = PRE_LIN_PSI()
+
+f = bitshift(1, 2);
diff --git a/matlab/nfft/PRE_PHI_HUT.m b/matlab/nfft/PRE_PHI_HUT.m
new file mode 100644
index 0000000..ea8f2bc
--- /dev/null
+++ b/matlab/nfft/PRE_PHI_HUT.m
@@ -0,0 +1,27 @@
+%PRE_PHI_HUT Precomputation flag
+% If this flag is set, the deconvolution step (the multiplication with the
+% diagonal matrix D) uses precomputed values of the Fourier transformed window
+% function.
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: PRE_PHI_HUT.m 3776 2012-06-03 13:29:25Z keiner $
+function f = PRE_PHI_HUT()
+
+f = bitshift(1, 0);
diff --git a/matlab/nfft/PRE_PSI.m b/matlab/nfft/PRE_PSI.m
new file mode 100644
index 0000000..b49b799
--- /dev/null
+++ b/matlab/nfft/PRE_PSI.m
@@ -0,0 +1,25 @@
+%PRE_PSI Precomputation flag
+% If this flag is set, the convolution step (the multiplication with the sparse
+% matrix B uses (2m+2)dM precomputed values of the window function.
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: PRE_PSI.m 3776 2012-06-03 13:29:25Z keiner $
+function f = PRE_PSI()
+
+f = bitshift(1, 4);
diff --git a/matlab/nfft/ndft_adjoint.m b/matlab/nfft/ndft_adjoint.m
new file mode 100644
index 0000000..ec8328f
--- /dev/null
+++ b/matlab/nfft/ndft_adjoint.m
@@ -0,0 +1,23 @@
+%NDFT_ADJOINT Adjoint nonequispaced discrete Fourier transform (direct algorithm)
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: ndft_adjoint.m 3776 2012-06-03 13:29:25Z keiner $
+function ndft_adjoint(p)
+
+nfftmex('adjoint_direct',p)
diff --git a/matlab/nfft/ndft_trafo.m b/matlab/nfft/ndft_trafo.m
new file mode 100644
index 0000000..895933c
--- /dev/null
+++ b/matlab/nfft/ndft_trafo.m
@@ -0,0 +1,23 @@
+%NDFT_TRAFO Nonequispaced discrete Fourier transformation (direct algorithm)
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: ndft_trafo.m 3776 2012-06-03 13:29:25Z keiner $
+function ndft_trafo(p)
+
+nfftmex('trafo_direct',p)
diff --git a/matlab/nfft/nfft.m b/matlab/nfft/nfft.m
new file mode 100644
index 0000000..5d018e5
--- /dev/null
+++ b/matlab/nfft/nfft.m
@@ -0,0 +1,387 @@
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+% This class provides robust a Matlab interface to the NFFT library.
+%
+% Examples
+% See Matlab scripts test_nfft*d.m.
+classdef nfft < handle
+
+properties(Dependent=true)
+ x; % nodes (real Mxd matrix)
+ fhat; % fourier coefficients (complex column vector of length N1, N1*N2 or N1*N2*N3, for d=2 columnwise linearisation of N1xN2 matrix and for d=3 columnwise linearisation of N1xN2xN3 array)
+ f; % samples (complex column vector of length M)
+end %properties
+
+properties(Dependent=true,SetAccess='private');
+ N;
+end %properties
+
+properties(SetAccess='private')
+ d=[]; % spatial dimension (d=1, d=2 or d=3)
+ M=[]; % number of sampling points (positive integer)
+end %properties
+
+properties(Hidden=true,SetAccess='private',GetAccess='private');
+ plan=[];
+ N1=[]; % number of nodes in first direction (positive even integer)
+ N2=[]; % number of nodes in second direction (positive even integer)
+ N3=[]; % number of nodes in third direction (positive even integer)
+
+ x_is_set=false; % flag if x is set
+ fhat_is_set=false; % flag if fhat is set
+ f_is_set=false; % flag if f is set
+ plan_is_set=false; % flag if plan was created
+ precomputations_done=false; % flag if precomputations were done
+end %properties
+
+methods
+
+% Constructer and destructor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function h=nfft(d,N,M,varargin)
+% Constructor
+%
+% h=nfft(1,N,M) for spatial dimension d=1
+% h=nfft(2,N,M) for spatial dimension d=2
+% h=nfft(3,N,M) for spatial dimension d=3
+%
+% h=nfft(d,N,M,varargin) for use of nfft_init_guru
+% For example
+% h=nfft(1,N,M,n,7,'PRE_PHI_HUT','FFTW_MEASURE') for d=1
+% h=nfft(2,N,M,n,n,7,'PRE_PHI_HUT','FFTW_MEASURE') for d=2
+% h=nfft(3,N,M,n,n,n,7,'PRE_PHI_HUT','FFTW_MEASURE') for d=3
+% with n=2^(ceil(log(max(N))/log(2))+1)
+% Be careful: There is no error handling with using nfft_init_guru.
+% Incorrect inputs can cause a Matlab crash!
+%
+% INPUT
+% d spatial dimension (d=1, d=2 or d=3)
+% N numbers of nodes in each direction (column vector of length d with positive even integers)
+% M number of sampling points (positive integer)
+% varargin parameters for use of nfft_init_guru (see documentation of NFFT for more details)
+%
+% OUTPUT
+% h object of class type nfft
+
+ h.d=d;
+
+ if( isempty(N) || size(N,1)~=d || size(N,2)~=1)
+ error('The numbers of nodes N have to be an integer column vector of length %u for spatial dimension d=%u',d,d);
+ else
+ h.N=N;
+ end %if
+
+ h.M=M;
+
+ if( 3>nargin )
+ error('Wrong number of inputs.');
+ elseif( 3==nargin )
+ switch d
+ case 1
+ h.plan=nfftmex('init_1d',N,M);
+ h.plan_is_set=true;
+ case 2
+ h.plan=nfftmex('init_2d',N(1),N(2),M);
+ h.plan_is_set=true;
+ case 3
+ h.plan=nfftmex('init_3d',N(1),N(2),N(3),M);
+ h.plan_is_set=true;
+ otherwise
+ error('Invalid spatial dimension d.');
+ end %switch
+ else % nfft_init_guru
+ %disp('You are using nfft_init_guru. This is on your own risk. There will be no error handling. Incorrect inputs can cause a Matlab crash.');
+ switch d
+ case 1
+ args=[{d,N(1),M},varargin];
+ case 2
+ args=[{d,N(1),N(2),M},varargin];
+ case 3
+ args=[{d,N(1),N(2),N(3),M},varargin];
+ otherwise
+ error('Unknown error.');
+ end %switch
+ h.plan=nfftmex('init_guru',args);
+ h.plan_is_set=true;
+ end %if
+end %function
+
+function delete(h)
+% Destructor
+ if(h.plan_is_set)
+ nfftmex('finalize',h.plan);
+ end %if
+end %function
+
+% Set functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function set.d(h,d)
+ if( isempty(d) || (d~=1 && d~=2 && d~=3) )
+ error('The spatial dimension d has to be d=1, d=2 or d=3.');
+ else
+ h.d=d;
+ end %if
+end %function
+
+function set.N(h,N)
+ switch length(N)
+ case 1
+ h.N1=N;
+ case 2
+ h.N1=N(1);
+ h.N2=N(2);
+ case 3
+ h.N1=N(1);
+ h.N2=N(2);
+ h.N3=N(3);
+ otherwise
+ error('Unknown error');
+ end %switch
+end %function
+
+function set.N1(h,N)
+ if( isempty(N) || ~isnumeric(N) || ~isreal(N) || (mod(N,2)~=0) || ~(N>0))
+ error('The number of the nodes N1 has to be an even positive integer.');
+ else
+ h.N1=N;
+ end %if
+end %function
+
+function set.N2(h,N)
+ if( isempty(N) || ~isnumeric(N) || ~isreal(N) || (mod(N,2)~=0) || ~(N>0))
+ error('The number of the nodes N2 has to be an even positive integer.');
+ else
+ h.N2=N;
+ end %if
+end %function
+
+function set.N3(h,N)
+ if( isempty(N) || ~isnumeric(N) || ~isreal(N) || (mod(N,2)~=0) || ~(N>0))
+ error('The number of the nodes N2 has to be an even positive integer.');
+ else
+ h.N3=N;
+ end %if
+end %function
+
+function set.M(h,M)
+ if( isempty(M) || ~isnumeric(M) || ~isreal(M) || mod(M,1)~=0 || ~(M>0) )
+ error('The number of sampling pints M has to be an positive integer.');
+ else
+ h.M=M;
+ end %if
+end %function
+
+function set.x(h,x)
+ if( isempty(x) )
+ error('The sampling points x have to be real numbers.');
+ elseif( ~isnumeric(x) || ~isreal(x) )
+ error('The sampling points x have to be real numbers.');
+ elseif( min(x(:))<-1/2 || ~(max(x(:))<1/2) )
+ error('The sampling points x have to be in the two dimensional Torus [-0.5,0.5)^2');
+ elseif( size(x,1)~=h.M || size(x,2)~=h.d )
+ error('The sampling points have to be a %ux%u matrix',h.M,h.d);
+ else
+ nfftmex('set_x',h.plan,x.');
+ h.x_is_set=true;
+ h.precomputations_done=false;
+ end %if
+end %function
+
+function set.fhat(h,fhat)
+ switch h.d
+ case 1
+ n=h.N1;
+ case 2
+ n=h.N1*h.N2;
+ case 3
+ n=h.N1*h.N2*h.N3;
+ otherwise
+ error('Unknown error.');
+ end % switch
+
+ if( isempty(fhat) || ~isnumeric(fhat))
+ error('The Fourier coefficients fhat have to be complex numbers.');
+ elseif( size(fhat,1)~=(n) || size(fhat,2)~=1 )
+ error('The Fourier coefficients fhat have to be a column vector of length %u.',n);
+ else
+ switch h.d
+ case 1
+ % Do nothing.
+ case 2
+ % linearization in matlab with column (:) operator is columnwise, in NFFT it is rowwise
+ fhat=reshape(fhat,h.N1,h.N2).';
+ fhat=fhat(:);
+ case 3
+ % linearization in matlab with column (:) operator is columnwise, in NFFT it is rowwise
+ fhat=reshape(fhat,h.N1,h.N2,h.N3);
+ fhat=permute(fhat,[3,2,1]);
+ fhat=fhat(:);
+ otherwise
+ error('Unknown error.');
+ end %switch
+
+ nfftmex('set_f_hat',h.plan,fhat);
+ h.fhat_is_set=true;
+ end %if
+end %function
+
+function set.f(h,f)
+ if(isempty(f) || ~isnumeric(f))
+ error('The samples f have to be complex numbers.');
+ elseif( size(f,1)~=h.M || size(f,2)~=1 )
+ error('The samples f have to be an column vector of length M=%u',h.M);
+ else
+ nfftmex('set_f',h.plan,f);
+ h.f_is_set=true;
+ end %if
+end %function
+
+% Get functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function x=get.x(h)
+ if(h.x_is_set)
+ x=nfftmex('get_x',h.plan).';
+ else
+ x=[];
+ end %if
+end %function
+
+function fhat=get.fhat(h)
+ if(h.fhat_is_set)
+ fhat=nfftmex('get_f_hat',h.plan);
+
+ switch h.d
+ case 1
+ % Do nothing.
+ case 2
+ % linearization in matlab with column (:) operator is columnwise, in NFFT it is rowwise
+ fhat=reshape(fhat,h.N2,h.N1).';
+ fhat=fhat(:);
+ case 3
+ % linearization in matlab with column (:) operator is columnwise, in NFFT it is rowwise
+ fhat=reshape(fhat,h.N3,h.N2,h.N1);
+ fhat=permute(fhat,[3,2,1]);
+ fhat=fhat(:);
+ otherwise
+ error('Unknown error.');
+ end %switch
+ else
+ fhat=[];
+ end %if
+end %funcition
+
+function f=get.f(h)
+ if(h.f_is_set)
+ f=nfftmex('get_f',h.plan);
+ else
+ f=[];
+ end %if
+end %function
+
+function N=get.N(h)
+ N=[h.N1;h.N2;h.N3];
+end %function
+
+% User methods %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function nfft_precompute_psi(h)
+% Precomputations for NFFT.
+ if(~h.x_is_set)
+ error('Before doing precomputations you have to set nodes in x.');
+ else
+ nfftmex('precompute_psi',h.plan)
+ h.precomputations_done=true;
+ end %if
+end %function
+
+function ndft_trafo(h)
+% NDFT.
+%
+% ndft_trafo(h)
+%
+% INPUT
+% h object of class type nfft
+
+ if(~h.precomputations_done)
+ error('Before doing a NFFT transform you have to do precomputations.');
+ elseif(~h.fhat_is_set)
+ error('Before doing a NFFT transform you have to set Fourier coefficients in fhat.');
+ else
+ nfftmex('trafo_direct',h.plan);
+ h.f_is_set=true;
+ end %if
+end %function
+
+function nfft_trafo(h)
+% NFFT.
+%
+% nfft_trafo(h)
+%
+% INPUT
+% h object of class type nfft
+
+ if(~h.precomputations_done)
+ error('Before doing a NFFT transform you have to do precomputations.');
+ elseif(~h.fhat_is_set)
+ error('Before doing a NFFT transform you have to set Fourier coefficients in fhat.');
+ else
+ nfftmex('trafo',h.plan);
+ h.f_is_set=true;
+ end %if
+end %function
+
+function ndft_adjoint(h)
+% Adjoint NDFT.
+%
+% ndft_adjoint(h)
+%
+% INPUT
+% h object of class type nfft
+
+ if(~h.precomputations_done)
+ error('Before doing a adjoint NFFT transform you have to do precomputations.');
+ elseif(~h.f_is_set)
+ error('Before doing a adjoint NFFT transform you have to set samples in f.');
+ else
+ nfftmex('adjoint_direct',h.plan);
+ h.fhat_is_set=true;
+ end %if
+end %function
+
+function nfft_adjoint(h)
+% Adjoint NFFT
+%
+% nfft_adjoint(h)
+%
+% INPUT
+% h object of class type nfft
+
+ if(~h.precomputations_done)
+ error('Before doing a adjoint NFFT transform you have to do precomputations.');
+ elseif(~h.f_is_set)
+ error('Before doing a adjoint NFFT transform you have to set samples in f.');
+ else
+ nfftmex('adjoint',h.plan);
+ h.fhat_is_set=true;
+ end %if
+end %function
+
+end %methods
+
+end %classdef
+
diff --git a/matlab/nfft/nfft_adjoint.m b/matlab/nfft/nfft_adjoint.m
new file mode 100644
index 0000000..a37e591
--- /dev/null
+++ b/matlab/nfft/nfft_adjoint.m
@@ -0,0 +1,23 @@
+%NFFT_ADJOINT Adjoint nonequispaced fast Fourier transform
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_adjoint.m 3776 2012-06-03 13:29:25Z keiner $
+function nfft_adjoint(p)
+
+nfftmex('adjoint',p)
diff --git a/matlab/nfft/nfft_finalize.m b/matlab/nfft/nfft_finalize.m
new file mode 100644
index 0000000..c9d06bc
--- /dev/null
+++ b/matlab/nfft/nfft_finalize.m
@@ -0,0 +1,23 @@
+%NFFT_FINALIZE Finalize plan
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_finalize.m 3776 2012-06-03 13:29:25Z keiner $
+function nfft_finalize(p)
+
+nfftmex('finalize',p)
diff --git a/matlab/nfft/nfft_get_f.m b/matlab/nfft/nfft_get_f.m
new file mode 100644
index 0000000..dc08478
--- /dev/null
+++ b/matlab/nfft/nfft_get_f.m
@@ -0,0 +1,23 @@
+%NFFT_GET_F Get function values from plan
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_get_f.m 3776 2012-06-03 13:29:25Z keiner $
+function f = nfft_get_f(p)
+
+f = nfftmex('get_f',p);
diff --git a/matlab/nfft/nfft_get_f_hat.m b/matlab/nfft/nfft_get_f_hat.m
new file mode 100644
index 0000000..0b18968
--- /dev/null
+++ b/matlab/nfft/nfft_get_f_hat.m
@@ -0,0 +1,23 @@
+%NFFT_GET_F_HAT Get Fourier coefficients from plan
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_get_f_hat.m 3776 2012-06-03 13:29:25Z keiner $
+function f_hat = nfft_get_f_hat(p)
+
+f_hat = nfftmex('get_f_hat',p);
diff --git a/matlab/nfft/nfft_get_num_threads.m b/matlab/nfft/nfft_get_num_threads.m
new file mode 100644
index 0000000..8d6882c
--- /dev/null
+++ b/matlab/nfft/nfft_get_num_threads.m
@@ -0,0 +1,23 @@
+%NFFT_GET_NUM_THREADS Get number of threads (at most) used for computation
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_get_x.m 3124 2009-03-18 13:44:27Z kunis $
+function nthreads = nfft_get_num_threads()
+
+nthreads = nfftmex('get_num_threads');
diff --git a/matlab/nfft/nfft_get_x.m b/matlab/nfft/nfft_get_x.m
new file mode 100644
index 0000000..d7aba9f
--- /dev/null
+++ b/matlab/nfft/nfft_get_x.m
@@ -0,0 +1,23 @@
+%NFFT_GET_X Get nodes from plan
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_get_x.m 3776 2012-06-03 13:29:25Z keiner $
+function x = nfft_get_x(p)
+
+x = nfftmex('get_x',p);
diff --git a/matlab/nfft/nfft_init_1d.m b/matlab/nfft/nfft_init_1d.m
new file mode 100644
index 0000000..00c3075
--- /dev/null
+++ b/matlab/nfft/nfft_init_1d.m
@@ -0,0 +1,23 @@
+%NFFT_INIT_1D Initialise plans
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_init_1d.m 3776 2012-06-03 13:29:25Z keiner $
+function p = nfft_init_1d(N,M)
+
+p = nfftmex('init_1d',N,M);
diff --git a/matlab/nfft/nfft_init_2d.m b/matlab/nfft/nfft_init_2d.m
new file mode 100644
index 0000000..890bf26
--- /dev/null
+++ b/matlab/nfft/nfft_init_2d.m
@@ -0,0 +1,23 @@
+%NFFT_INIT_2D Initialise plans
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_init_2d.m 3776 2012-06-03 13:29:25Z keiner $
+function p = nfft_init_2d(N1,N2,M)
+
+p = nfftmex('init_2d',N1,N2,M);
diff --git a/matlab/nfft/nfft_init_3d.m b/matlab/nfft/nfft_init_3d.m
new file mode 100644
index 0000000..48396ae
--- /dev/null
+++ b/matlab/nfft/nfft_init_3d.m
@@ -0,0 +1,23 @@
+%NFFT_INIT_3D Initialise plans
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_init_3d.m 3776 2012-06-03 13:29:25Z keiner $
+function p = nfft_init_3d(N1,N2,N3,M)
+
+p = nfftmex('init_3d',N1,N2,N3,M);
diff --git a/matlab/nfft/nfft_init_guru.m b/matlab/nfft/nfft_init_guru.m
new file mode 100644
index 0000000..f84dfe9
--- /dev/null
+++ b/matlab/nfft/nfft_init_guru.m
@@ -0,0 +1,36 @@
+%NFFT_INIT_GURU Initialise plans, no error handling
+% Matlab might run into a segmentation violation for wrong parameters
+%
+% nfft_init_guru(d,N1,...,Nd,M,n1,...,nd,m,nfft_flags,fftw_flags)
+%
+% d spatial dimension
+% N1,...,Nd bandwidths
+% M number of nodes
+% n1,...,nd fft lengths
+% m cut-off parameter
+% nfft_flags PRE_PHI_HUT | {FG_PSI, PRE_LIN_PSI, PRE_FG_PSI, PRE_PSI,
+% PRE_FULL_PSI} | FFT_OUT_OF_PLACE
+% fftw_flags {FFTW_ESTIMATE, FFTW_MEASURE}
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_init_guru.m 3776 2012-06-03 13:29:25Z keiner $
+function p = nfft_init_guru(varargin)
+
+p = nfftmex('init_guru',varargin);
diff --git a/matlab/nfft/nfft_precompute_psi.m b/matlab/nfft/nfft_precompute_psi.m
new file mode 100644
index 0000000..148241e
--- /dev/null
+++ b/matlab/nfft/nfft_precompute_psi.m
@@ -0,0 +1,23 @@
+%NFFT_PRECOMPUTE_PSI Precompute psi, dependent on nodes x
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_precompute_psi.m 3776 2012-06-03 13:29:25Z keiner $
+function nfft_precompute_psi(p)
+
+nfftmex('precompute_psi',p)
diff --git a/matlab/nfft/nfft_set_f.m b/matlab/nfft/nfft_set_f.m
new file mode 100644
index 0000000..971ac25
--- /dev/null
+++ b/matlab/nfft/nfft_set_f.m
@@ -0,0 +1,23 @@
+%NFFT_SET_F Set function values in plan
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_set_f.m 3776 2012-06-03 13:29:25Z keiner $
+function nfft_set_f(p,f)
+
+nfftmex('set_f',p,f)
diff --git a/matlab/nfft/nfft_set_f_hat.m b/matlab/nfft/nfft_set_f_hat.m
new file mode 100644
index 0000000..f081cc5
--- /dev/null
+++ b/matlab/nfft/nfft_set_f_hat.m
@@ -0,0 +1,23 @@
+%NFFT_SET_F_HAT Set Fourier coefficients in plan
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_set_f_hat.m 3776 2012-06-03 13:29:25Z keiner $
+function nfft_set_f_hat(p,f_hat)
+
+nfftmex('set_f_hat',p,f_hat)
diff --git a/matlab/nfft/nfft_set_x.m b/matlab/nfft/nfft_set_x.m
new file mode 100644
index 0000000..a0b810d
--- /dev/null
+++ b/matlab/nfft/nfft_set_x.m
@@ -0,0 +1,23 @@
+%NFFT_SET_X Set nodes in plan
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_set_x.m 3776 2012-06-03 13:29:25Z keiner $
+function nfft_set_x(p,x)
+
+nfftmex('set_x',p,x)
diff --git a/matlab/nfft/nfft_trafo.m b/matlab/nfft/nfft_trafo.m
new file mode 100644
index 0000000..02d4cc1
--- /dev/null
+++ b/matlab/nfft/nfft_trafo.m
@@ -0,0 +1,23 @@
+%NFFT_TRAFO nonequispaced fast Fourier transformat
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_trafo.m 3776 2012-06-03 13:29:25Z keiner $
+function nfft_trafo(p)
+
+nfftmex('trafo',p)
diff --git a/matlab/nfft/nfftmex.c b/matlab/nfft/nfftmex.c
new file mode 100644
index 0000000..722e490
--- /dev/null
+++ b/matlab/nfft/nfftmex.c
@@ -0,0 +1,479 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfftmex.c 3967 2013-04-23 08:59:35Z tovo $ */
+#include "config.h"
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include <string.h>
+#include <stdio.h>
+#include <stdint.h>
+#include "nfft3.h"
+#include "infft.h"
+#include "nfft3util.h"
+#include "imex.h"
+
+#ifdef HAVE_MEXVERSION_C
+ #include "mexversion.c"
+#endif
+
+#define PLANS_MAX 100 /* maximum number of plans */
+#define CMD_LEN_MAX 20 /* maximum length of command argument */
+
+/* global flags */
+#define NFFT_MEX_FIRST_CALL (1U << 0)
+unsigned short gflags = NFFT_MEX_FIRST_CALL;
+
+nfft_plan* plans[PLANS_MAX]; /* plans */
+char cmd[CMD_LEN_MAX];
+
+static inline void get_nm(const mxArray *prhs[], int *n, int *m)
+{
+ int t = nfft_mex_get_int(prhs[1],"nfft: Input argument N must be a scalar.");
+ DM(if ((t < 0) || (t%2!=0))
+ mexErrMsgTxt("nfft: Input argument N must be non-negative and multiple of two.");)
+ *n = t;
+ t = nfft_mex_get_int(prhs[2],"nfft: Input argument M must be a scalar.");
+ DM(if (t < 1)
+ mexErrMsgTxt("nfft: Input argument M must be positive.");)
+ *m = t;
+}
+
+static inline void get_n1n2m(const mxArray *prhs[], int *n1, int *n2, int *m)
+{
+ int t = nfft_mex_get_int(prhs[1],"nfft: Input argument N1 must be a scalar.");
+ DM(if ((t < 0) || (t%2!=0))
+ mexErrMsgTxt("nfft: Input argument N1 must be non-negative and even.");)
+ *n1 = t;
+
+ t = nfft_mex_get_int(prhs[2],"nfft: Input argument N2 must be a scalar.");
+ DM(if ((t < 0) || (t%2!=0))
+ mexErrMsgTxt("nfft: Input argument N2 must be non-negative and even.");)
+ *n2 = t;
+
+ t = nfft_mex_get_int(prhs[3],"nfft: Input argument M must be a scalar.");
+ DM(if (t < 1)
+ mexErrMsgTxt("nfft: Input argument M must be positive.");)
+ *m = t;
+}
+
+static inline void get_n1n2n3m(const mxArray *prhs[], int *n1, int *n2, int *n3, int *m)
+{
+ int t = nfft_mex_get_int(prhs[1],"nfft: Input argument N1 must be a scalar.");
+ DM(if ((t < 0) || (t%2!=0))
+ mexErrMsgTxt("nfft: Input argument N1 must be non-negative and even.");)
+ *n1 = t;
+
+ t = nfft_mex_get_int(prhs[2],"nfft: Input argument N2 must be a scalar.");
+ DM(if ((t < 0) || (t%2!=0))
+ mexErrMsgTxt("nfft: Input argument N2 must be non-negative and even.");)
+ *n2 = t;
+
+ t = nfft_mex_get_int(prhs[3],"nfft: Input argument N3 must be a scalar.");
+ DM(if ((t < 0) || (t%2!=0))
+ mexErrMsgTxt("nfft: Input argument N3 must be non-negative and even.");)
+ *n3 = t;
+
+ t = nfft_mex_get_int(prhs[4],"nfft: Input argument M must be a scalar.");
+ DM(if (t < 1)
+ mexErrMsgTxt("nfft: Input argument M must be positive.");)
+ *m = t;
+}
+
+static inline void get_guru(const mxArray *prhs[], int d, int *N, int *M, int *n, int *m, unsigned int *f1, unsigned int *f2)
+{
+ /** NO ERROR HANDLING !!*/
+ int k;
+
+ for(k=0;k<d;k++)
+ N[k] = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(1+k)));
+
+ *M = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(d+1)));
+
+ for(k=0;k<d;k++)
+ n[k] = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(d+2+k)));
+
+ *m = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(2*d+2)));
+
+ *f1 = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(2*d+3)));
+
+ *f2 = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(2*d+4)));
+}
+
+static inline void check_nargs(const int nrhs, const int n, const char* errmsg)
+{
+ DM(if (nrhs != n)
+ mexErrMsgTxt(errmsg);)
+}
+
+static inline void check_plan(int i)
+{
+ DM(if (i < 0 || i >= PLANS_MAX)
+ mexErrMsgTxt("Invalid plan");)
+ DM(if (plans[i] == 0)
+ mexErrMsgTxt("Plan was not initialized or has already been finalized");)
+}
+
+static inline int mkplan(void)
+{
+ mexLock();
+ int i = 0;
+ while (i < PLANS_MAX && plans[i] != 0) i++;
+ if (i == PLANS_MAX)
+ mexErrMsgTxt("nfft: Too many plans already allocated.");
+ plans[i] = nfft_malloc(sizeof(nfft_plan));
+ return i;
+}
+
+/* cleanup on mex function unload */
+static void cleanup(void)
+{
+ int i;
+
+ mexUnlock();
+
+ if (!(gflags & NFFT_MEX_FIRST_CALL))
+ {
+ for (i = 0; i < PLANS_MAX; i++)
+ if (plans[i])
+ {
+ nfft_finalize(plans[i]);
+ plans[i] = 0;
+ }
+ gflags |= NFFT_MEX_FIRST_CALL;
+ }
+}
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
+{
+ if (gflags & NFFT_MEX_FIRST_CALL)
+ {
+ /* Force Matlab to load libfftw3. There is at least one version of Matlab
+ * which otherwise crashes upon invocation of this mex function. */
+ mexEvalString("fft([1,2,3,4]);");
+
+ nfft_mex_install_mem_hooks();
+
+ /* plan pointers to zeros */
+ {
+ int i;
+ for (i = 0; i < PLANS_MAX; i++)
+ plans[i] = 0;
+ }
+
+ mexAtExit(cleanup);
+ gflags &= ~NFFT_MEX_FIRST_CALL;
+ }
+
+ /* command string */
+ DM(if (nrhs == 0)
+ mexErrMsgTxt("At least one input required.");)
+
+ DM(if (!mxIsChar(prhs[0]))
+ mexErrMsgTxt("First argument must be a string.");)
+
+ if (mxGetString(prhs[0], cmd, CMD_LEN_MAX))
+ mexErrMsgTxt("Could not get command string.");
+
+ if (strcmp(cmd,"init_1d") == 0)
+ {
+ check_nargs(nrhs,3,"Wrong number of arguments for init.");
+ {
+ int i;
+ int n, m;
+ get_nm(prhs,&n,&m);
+ i = mkplan();
+ nfft_init_1d(plans[i],n,m);
+ plhs[0] = mxCreateDoubleScalar((double)i);
+ }
+ return;
+ }
+ else if (strcmp(cmd,"init_2d") == 0)
+ {
+ check_nargs(nrhs,4,"Wrong number of arguments for init.");
+ {
+ int i;
+ int n1, n2, m;
+ get_n1n2m(prhs,&n1,&n2,&m);
+ i = mkplan();
+ nfft_init_2d(plans[i],n1,n2,m);
+ plhs[0] = mxCreateDoubleScalar((double)i);
+ }
+ return;
+ }
+ else if (strcmp(cmd,"init_3d") == 0)
+ {
+ check_nargs(nrhs,5,"Wrong number of arguments for init.");
+ {
+ int i;
+ int n1, n2, n3, m;
+ get_n1n2n3m(prhs,&n1,&n2,&n3,&m);
+ i = mkplan();
+ nfft_init_3d(plans[i],n1,n2,n3,m);
+ plhs[0] = mxCreateDoubleScalar((double)i);
+ }
+ return;
+ }
+ else if (strcmp(cmd,"init_guru") == 0)
+ {
+ /** NO ERROR HANDLING !!*/
+ int i;
+ const int d = mxGetScalar(mxGetCell(prhs[1], 0));
+
+ int N[d],n[d],m,M;
+ unsigned int f1,f2;
+
+ DM(if ((d < 1) || (d>4))
+ mexErrMsgTxt("nfft: Input argument d must be positive and smaller than 5.");)
+
+ get_guru(prhs,d,N,&M,n,&m,&f1,&f2);
+ i = mkplan();
+ nfft_init_guru(plans[i],d,N,M,n,m,
+ f1 | MALLOC_X | MALLOC_F | MALLOC_F_HAT | FFTW_INIT,
+ f2);
+
+ plhs[0] = mxCreateDoubleScalar((double)i);
+
+ return;
+ }
+ else if (strcmp(cmd,"precompute_psi") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for precompute_one_psi.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+ check_plan(i);
+ nfft_precompute_one_psi(plans[i]);
+ }
+ return;
+ }
+ else if (strcmp(cmd,"trafo") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for trafo.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+ check_plan(i);
+ nfft_trafo(plans[i]);
+ }
+ return;
+ }
+ else if (strcmp(cmd,"adjoint") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for adjoint.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+ check_plan(i);
+ nfft_adjoint(plans[i]);
+ }
+ return;
+ }
+ else if (strcmp(cmd,"finalize") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for finalize.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+ check_plan(i);
+ nfft_finalize(plans[i]);
+ nfft_free(plans[i]);
+ plans[i] = 0;
+ }
+ return;
+ }
+ else if (strcmp(cmd,"trafo_direct") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for trafo direct.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+ check_plan(i);
+ nfft_trafo_direct(plans[i]);
+ }
+ return;
+ }
+ else if (strcmp(cmd,"adjoint_direct") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for adjoint direct.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+ check_plan(i);
+ nfft_adjoint_direct(plans[i]);
+ }
+ return;
+ }
+ else if (strcmp(cmd,"get_x") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for get_x.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+ int m, d;
+ check_plan(i);
+ m = plans[i]->M_total;
+ d = plans[i]->d;
+ plhs[0] = mxCreateDoubleMatrix((unsigned int)d, (unsigned int)m, mxREAL);
+ {
+ double *x = mxGetPr(plhs[0]);
+ int j,t;
+ for (j = 0; j < m; j++)
+ for (t = 0; t < d; t++)
+ x[d*j+t] = plans[i]->x[d*j+t];
+ }
+ }
+ return;
+ }
+ else if (strcmp(cmd,"get_f") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for get_f.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+ int m;
+ check_plan(i);
+ m = plans[i]->M_total;
+ plhs[0] = mxCreateDoubleMatrix((unsigned int)m, 1, mxCOMPLEX);
+ {
+ double *fr = mxGetPr(plhs[0]), *fi = mxGetPi(plhs[0]);
+ int j;
+ for (j = 0; j < m; j++)
+ {
+ fr[j] = creal(plans[i]->f[j]);
+ fi[j] = cimag(plans[i]->f[j]);
+ }
+ }
+ }
+ return;
+ }
+ else if (strcmp(cmd,"get_f_hat") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for get_f_hat.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+ int n;
+ check_plan(i);
+ n = plans[i]->N_total;
+ plhs[0] = mxCreateDoubleMatrix((unsigned int)n, 1, mxCOMPLEX);
+ {
+ double *f_hatr = mxGetPr(plhs[0]), *f_hati = mxGetPi(plhs[0]);
+ int k;
+ for (k = 0; k < n; k++)
+ {
+ f_hatr[k] = creal(plans[i]->f_hat[k]);
+ f_hati[k] = cimag(plans[i]->f_hat[k]);
+ }
+ }
+ }
+ return;
+ }
+ else if (strcmp(cmd,"set_x") == 0)
+ {
+ check_nargs(nrhs,3,"Wrong number of arguments for set_x.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+ int m, d;
+ check_plan(i);
+ m = plans[i]->M_total;
+ d = plans[i]->d;
+ DM(if (!mxIsDouble(prhs[2]) || mxGetNumberOfDimensions(prhs[2]) > 2)
+ mexErrMsgTxt("Input argument x must be a d x M double array");)
+ DM(if (mxGetM(prhs[2]) != (unsigned int)d || mxGetN(prhs[2]) != (unsigned int)m)
+ mexErrMsgTxt("Input argument x must have correct size (d x M).");)
+ {
+ double *x = mxGetPr(prhs[2]);
+ int j,t;
+ for (j = 0; j < m; j++)
+ for (t = 0; t < d; t++)
+ plans[i]->x[d*j+t] = x[d*j+t];
+ }
+ }
+ return;
+ }
+ else if (strcmp(cmd,"set_f") == 0)
+ {
+ check_nargs(nrhs,3,"Wrong number of arguments for set_f.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+ int m;
+ check_plan(i);
+ m = plans[i]->M_total;
+ DM(if (mxGetM(prhs[2]) * mxGetN(prhs[2]) != (unsigned int)m)
+ mexErrMsgTxt("Input argument f must have correct size.");)
+ {
+ double *fr = mxGetPr(prhs[2]), *fi = mxGetPi(prhs[2]);
+ int j;
+ if (fi)
+ for (j = 0; j < m; j++)
+ plans[i]->f[j] = fr[j] + _Complex_I*fi[j];
+ else
+ for (j = 0; j < m; j++)
+ plans[i]->f[j] = fr[j];
+ }
+ }
+ return;
+ }
+ else if (strcmp(cmd,"set_f_hat") == 0)
+ {
+ check_nargs(nrhs,3,"Wrong number of arguments for set_f_hat.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+ int n;
+ check_plan(i);
+ n = plans[i]->N_total;
+ DM(if (!mxIsDouble(prhs[2]))
+ mexErrMsgTxt("Input argument f must be a double array");)
+ DM(if ( mxGetM(prhs[2]) != (unsigned int)n || mxGetN(prhs[2]) != 1)
+ mexErrMsgTxt("Input argument f must have correct size.");)
+ {
+ double *f_hatr = mxGetPr(prhs[2]), *f_hati = mxGetPi(prhs[2]);
+ int k;
+ if (f_hati)
+ for (k = 0; k < n; k++)
+ plans[i]->f_hat[k] = f_hatr[k] + _Complex_I*f_hati[k];
+ else
+ for (k = 0; k < n; k++)
+ plans[i]->f_hat[k] = f_hatr[k];
+ }
+ }
+ return;
+ }
+ else if (strcmp(cmd,"display") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for set_f_hat_linear.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+ mexPrintf("Plan %d\n",i);
+ check_plan(i);
+ mexPrintf(" pointer: %p\n",plans[i]);
+ mexPrintf(" d: %d\n",plans[i]->d);
+ mexPrintf(" N_total: %d\n",plans[i]->N_total);
+ mexPrintf(" M_total: %d\n",plans[i]->M_total);
+ mexPrintf(" x: %p\n",plans[i]->x);
+ mexPrintf(" f: %p\n",plans[i]->f);
+ mexPrintf(" f_hat: %p\n",plans[i]->f_hat);
+ mexPrintf(" flags: %d\n",plans[i]->nfft_flags);
+ }
+ return;
+ }
+ else if(strcmp(cmd,"get_num_threads") == 0)
+ {
+ int32_t nthreads = nfft_get_num_threads();
+ plhs[0] = mxCreateNumericMatrix(1, 1, mxINT32_CLASS, mxREAL);
+ *((int32_t *)mxGetData(plhs[0])) = nthreads;
+
+ return;
+ }
+ else
+ mexErrMsgTxt("nfft: Unknown command.\n");
+}
diff --git a/matlab/nfft/simple_test.m b/matlab/nfft/simple_test.m
new file mode 100644
index 0000000..acaa665
--- /dev/null
+++ b/matlab/nfft/simple_test.m
@@ -0,0 +1,128 @@
+%SIMPLE_TEST Example program: Basic usage principles
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: simple_test.m 3776 2012-06-03 13:29:25Z keiner $
+
+disp(sprintf('Number of threads: %d\n', nfft_get_num_threads()));
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+disp('A simple one dimensional example');
+
+% maximum degree (bandwidth)
+N = 10;
+
+% number of nodes
+M = 3;
+
+% nodes
+x=rand(1,M)-0.5;
+
+% Create plan.
+plan = nfft_init_1d(N,M);
+
+% Set nodes.
+nfft_set_x(plan,x);
+
+% node-dependent precomputation
+nfft_precompute_psi(plan);
+
+% Fourier coefficients
+f_hat = rand(N,1)+i*rand(N,1);
+
+% Set Fourier coefficients.
+nfft_set_f_hat(plan,double(f_hat));
+
+% transform
+nfft_trafo(plan);
+
+% function values
+f = nfft_get_f(plan)
+
+% finalize plan
+nfft_finalize(plan);
+
+A=exp(-2*pi*i*x'*(-N/2:N/2-1));
+f2=A*f_hat
+
+error_vector=f-f2
+error_linfl1=norm(f-f2,inf)/norm(f_hat,1)
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+disp(sprintf('\nA two dimensional example'));
+d=2;
+for logN=3:10
+ N=2^logN;
+ M=N^2;
+ x=rand(2,M)-0.5;
+ plan = nfft_init_guru(d,N,N,M,2*N,2*N,2,bitor(PRE_PHI_HUT,PRE_PSI),FFTW_MEASURE);
+ nfft_set_x(plan,x);
+ nfft_precompute_psi(plan);
+ f_hat = rand(N,N)+i*rand(N,N);
+ nfft_set_f_hat(plan,double(f_hat(:)));
+ tic
+ nfft_trafo(plan);
+ t1=toc;
+ f = nfft_get_f(plan);
+
+ if(N<=64)
+ tic
+ ndft_trafo(plan);
+ t2=toc;
+ f2 = nfft_get_f(plan);
+ e=norm(f-f2,inf)/norm(f_hat(:),1);
+ else
+ t2=inf;
+ e=nan;
+ end;
+ nfft_finalize(plan);
+ disp(sprintf('t1=%1.2e, t2=%1.2e, e=%1.2e',t1,t2,e));
+end;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+disp(sprintf('\nAn asymmetric three dimensional example'));
+d=3;
+for logN=3:10
+ N1=2^logN; n1=2*N1;
+ N2=10; n2=32;
+ N3=18; n3=32;
+ M=N1*N2*N3;
+ x=rand(3,M)-0.5;
+ plan = nfft_init_guru(d,N1,N2,N3,M,n1,n2,n3,2,bitor(PRE_PHI_HUT,PRE_PSI),FFTW_MEASURE);
+ nfft_set_x(plan,x);
+ nfft_precompute_psi(plan);
+ f_hat = rand(N1,N2,N3)+i*rand(N1,N2,N3);
+ nfft_set_f_hat(plan,double(f_hat(:)));
+ tic
+ nfft_trafo(plan);
+ t1=toc;
+ f = nfft_get_f(plan);
+
+ if(N1<=32)
+ tic
+ ndft_trafo(plan);
+ t2=toc;
+ f2 = nfft_get_f(plan);
+ e=norm(f-f2,inf)/norm(f_hat(:),1);
+ else
+ t2=inf;
+ e=nan;
+ end;
+ nfft_finalize(plan);
+ disp(sprintf('t1=%1.2e, t2=%1.2e, e=%1.2e',t1,t2,e));
+end;
diff --git a/matlab/nfft/test_nfft1d.m b/matlab/nfft/test_nfft1d.m
new file mode 100644
index 0000000..a7f04d0
--- /dev/null
+++ b/matlab/nfft/test_nfft1d.m
@@ -0,0 +1,70 @@
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+% Test script of class nfft for spatial dimension d=1.
+clear all;
+
+M=16; % number of nodes
+N=24; % number of Fourier coefficients in first direction
+
+x=rand(M,1)-0.5; %nodes
+
+% Initialisation
+plan=nfft(1,N,M); % create plan of class type nfft
+%n=2^(ceil(log(N)/log(2))+1);
+%plan=nfft(1,N,M,n,7,'PRE_PHI_HUT','FFTW_MEASURE'); % use of nfft_init_guru
+
+plan.x=x; % set nodes in plan
+nfft_precompute_psi(plan); % precomputations
+
+% NFFT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+fhat=rand(N,1); % Fourier coefficients
+fhatv=fhat(:);
+
+% Compute samples with NFFT
+plan.fhat=fhatv; % set Fourier coefficients
+nfft_trafo(plan); % compute nonequispaced Fourier transform
+f1=plan.f; % get samples
+
+% Compute samples direct
+k1=(-N/2:N/2-1).';
+f2=zeros(M,1);
+for j=1:M
+ x1j=x(j,1);
+ f2(j)=sum( fhatv.*exp(-2*pi*1i*k1*x1j) );
+end %for
+
+% Compare results
+max(abs(f1-f2))
+
+% Adjoint NFFT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Computation with NFFT
+nfft_adjoint(plan);
+fhat1=plan.fhat;
+
+% Direct computation
+fhat2=zeros(N,1);
+for j=1:N
+ k1j=k1(j);
+ fhat2(j)=sum( plan.f.*exp(2*pi*1i*k1j*x(:,1)) );
+end %for
+
+% Compare results
+max(abs(fhat1-fhat2))
+
diff --git a/matlab/nfft/test_nfft2d.m b/matlab/nfft/test_nfft2d.m
new file mode 100644
index 0000000..0fa752b
--- /dev/null
+++ b/matlab/nfft/test_nfft2d.m
@@ -0,0 +1,78 @@
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+% Test script of class nfft for spatial dimension d=2.
+clear all;
+
+M=16; % number of nodes
+N1=24; % number of Fourier coefficients in first direction
+N2=32; % number of Fourier coefficients in second direction
+N=[N1;N2];
+
+x=rand(M,2)-0.5; %nodes
+
+% Initialisation
+plan=nfft(2,N,M); % create plan of class type nfft
+%n=2^(ceil(log(max(N))/log(2))+1);
+%plan=nfft(2,N,M,n,n,7,'PRE_PHI_HUT','FFTW_MEASURE'); % use of nfft_init_guru
+
+plan.x=x; % set nodes in plan
+nfft_precompute_psi(plan); % precomputations
+
+% NFFT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+fhat=rand(N1,N2); % Fourier coefficients
+fhatv=fhat(:);
+
+% Compute samples with NFFT
+plan.fhat=fhatv; % set Fourier coefficients
+nfft_trafo(plan); % compute nonequispaced Fourier transform
+f1=plan.f; % get samples
+
+% Compute samples direct
+k1=-N1/2:N1/2-1;
+k2=-N2/2:N2/2-1;
+[K1,K2]=ndgrid(k1,k2);
+k1=K1(:); clear K1;
+k2=K2(:); clear K2;
+f2=zeros(M,1);
+for j=1:M
+ x1j=x(j,1);
+ x2j=x(j,2);
+ f2(j)=sum( fhatv.*exp(-2*pi*1i*(k1*x1j+k2*x2j)) );
+end %for
+
+% Compare results
+max(abs(f1-f2))
+
+% Adjoint NFFT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Computation with NFFT
+nfft_adjoint(plan);
+fhat1=plan.fhat;
+
+% Direct computation
+fhat2=zeros(N1*N2,1);
+for j=1:N1*N2
+ k1j=k1(j);
+ k2j=k2(j);
+ fhat2(j)=sum( plan.f.*exp(2*pi*1i*(k1j*x(:,1)+k2j*x(:,2))) );
+end %for
+
+% Compare results
+max(abs(fhat1-fhat2))
+
diff --git a/matlab/nfft/test_nfft3d.m b/matlab/nfft/test_nfft3d.m
new file mode 100644
index 0000000..27ffecb
--- /dev/null
+++ b/matlab/nfft/test_nfft3d.m
@@ -0,0 +1,83 @@
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+% Test script of class nfft for spatial dimension d=3.
+clear all;
+
+M=16; % number of nodes
+N1=24; % number of Fourier coefficients in first direction
+N2=32; % number of Fourier coefficients in second direction
+N3=30; % number of Fourier coefficients in third direction
+N=[N1;N2;N3];
+
+x=rand(M,3)-0.5; %nodes
+
+% Initialisation
+plan=nfft(3,N,M); % create plan of class type nfft
+%n=2^(ceil(log(max(N))/log(2))+1);
+%plan=nfft(3,N,M,n,n,n,7,'PRE_PHI_HUT','FFTW_MEASURE'); % use of nfft_init_guru
+
+plan.x=x; % set nodes in plan
+nfft_precompute_psi(plan); % precomputations
+
+% NFFT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+fhat=rand(N1,N2,N3); % Fourier coefficients
+fhatv=fhat(:);
+
+% Compute samples with NFFT
+plan.fhat=fhatv; % set Fourier coefficients
+nfft_trafo(plan); % compute nonequispaced Fourier transform
+f1=plan.f; % get samples
+
+% Compute samples direct
+k1=-N1/2:N1/2-1;
+k2=-N2/2:N2/2-1;
+k3=-N3/2:N3/2-1;
+[K1,K2,K3]=ndgrid(k1,k2,k3);
+k1=K1(:); clear K1;
+k2=K2(:); clear K2;
+k3=K3(:); clear K3;
+f2=zeros(M,1);
+for j=1:M
+ x1j=x(j,1);
+ x2j=x(j,2);
+ x3j=x(j,3);
+ f2(j)=sum( fhatv.*exp(-2*pi*1i*(k1*x1j+k2*x2j+k3*x3j)) );
+end %for
+
+% Compare results
+max(abs(f1-f2))
+
+% Adjoint NFFT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Computation with NFFT
+nfft_adjoint(plan);
+fhat1=plan.fhat;
+
+% Direct computation
+fhat2=zeros(N1*N2*N3,1);
+for j=1:N1*N2*N3
+ k1j=k1(j);
+ k2j=k2(j);
+ k3j=k3(j);
+ fhat2(j)=sum( plan.f.*exp(2*pi*1i*(k1j*x(:,1)+k2j*x(:,2)+k3j*x(:,3))) );
+end %for
+
+% Compare results
+max(abs(fhat1-fhat2))
+
diff --git a/matlab/nfsft/@f_hat/Makefile.am b/matlab/nfsft/@f_hat/Makefile.am
new file mode 100644
index 0000000..1de3dbb
--- /dev/null
+++ b/matlab/nfsft/@f_hat/Makefile.am
@@ -0,0 +1,5 @@
+nfsftmatlabdir = $(datadir)/nfft/matlab/nfsft/@f_hat
+
+dist_nfsftmatlab_DATA = char.m display.m double.m f_hat.m minus.m mtimes.m mtimesr.m norm.m plus.m subsasgn.m subsref.m
+
+# EXTRA_DIST = char.m display.m double.m f_hat.m minus.m mtimes.m mtimesr.m norm.m plus.m subsasgn.m subsref.m
diff --git a/matlab/nfsft/@f_hat/Makefile.in b/matlab/nfsft/@f_hat/Makefile.in
new file mode 100644
index 0000000..4db9166
--- /dev/null
+++ b/matlab/nfsft/@f_hat/Makefile.in
@@ -0,0 +1,480 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = matlab/nfsft/@f_hat
+DIST_COMMON = $(dist_nfsftmatlab_DATA) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(nfsftmatlabdir)"
+DATA = $(dist_nfsftmatlab_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+nfsftmatlabdir = $(datadir)/nfft/matlab/nfsft/@f_hat
+dist_nfsftmatlab_DATA = char.m display.m double.m f_hat.m minus.m mtimes.m mtimesr.m norm.m plus.m subsasgn.m subsref.m
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu matlab/nfsft/@f_hat/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu matlab/nfsft/@f_hat/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-dist_nfsftmatlabDATA: $(dist_nfsftmatlab_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(dist_nfsftmatlab_DATA)'; test -n "$(nfsftmatlabdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(nfsftmatlabdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(nfsftmatlabdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nfsftmatlabdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(nfsftmatlabdir)" || exit $$?; \
+ done
+
+uninstall-dist_nfsftmatlabDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_nfsftmatlab_DATA)'; test -n "$(nfsftmatlabdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(nfsftmatlabdir)'; $(am__uninstall_files_from_dir)
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(nfsftmatlabdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_nfsftmatlabDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_nfsftmatlabDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dist_nfsftmatlabDATA \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-dist_nfsftmatlabDATA
+
+
+# EXTRA_DIST = char.m display.m double.m f_hat.m minus.m mtimes.m mtimesr.m norm.m plus.m subsasgn.m subsref.m
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/matlab/nfsft/@f_hat/char.m b/matlab/nfsft/@f_hat/char.m
new file mode 100644
index 0000000..8858f4b
--- /dev/null
+++ b/matlab/nfsft/@f_hat/char.m
@@ -0,0 +1,27 @@
+%CHAR Conversion to string for f_hat class
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: char.m 3776 2012-06-03 13:29:25Z keiner $
+function s = char(p)
+
+if (p.N == -1)
+ s = 'empty f_hat object';
+else
+ s = ['eegree ',num2str(p.N),' f_hat object'];
+end
diff --git a/matlab/nfsft/@f_hat/display.m b/matlab/nfsft/@f_hat/display.m
new file mode 100644
index 0000000..5bb0e86
--- /dev/null
+++ b/matlab/nfsft/@f_hat/display.m
@@ -0,0 +1,34 @@
+%DISPLAY Display function for f_hat class
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: display.m 3776 2012-06-03 13:29:25Z keiner $
+function display(p)
+
+if (p.N == -1)
+ disp([inputname(1) ' = empty']);
+else
+ f_hat_m = zeros(2*p.N+1,p.N+1);
+ o = 1;
+ for k = 0:p.N
+ f_hat_m(k*(2*p.N+1)+p.N+1-k:k*(2*p.N+1)+p.N+1+k) = p.f_hat(o:o+2*k);
+ o = o + 2*k+1;
+ end
+ disp([inputname(1) ' =']);
+ disp(f_hat_m);
+end
diff --git a/matlab/nfsft/@f_hat/double.m b/matlab/nfsft/@f_hat/double.m
new file mode 100644
index 0000000..f28b6b8
--- /dev/null
+++ b/matlab/nfsft/@f_hat/double.m
@@ -0,0 +1,28 @@
+%DOUBLE Double conversion for f_hat class
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: double.m 3776 2012-06-03 13:29:25Z keiner $
+function d = double(p)
+
+d = zeros(2*p.N+1,p.N+1);
+o = 1;
+for k = 0:p.N
+ d(k*(2*p.N+1)+p.N+1-k:k*(2*p.N+1)+p.N+1+k) = p.f_hat(o:o+2*k);
+ o = o + 2*k+1;
+end
diff --git a/matlab/nfsft/@f_hat/f_hat.m b/matlab/nfsft/@f_hat/f_hat.m
new file mode 100644
index 0000000..485d1c8
--- /dev/null
+++ b/matlab/nfsft/@f_hat/f_hat.m
@@ -0,0 +1,49 @@
+%F_HAT Constructor for f_hat class
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: f_hat.m 3776 2012-06-03 13:29:25Z keiner $
+function p = f_hat(a)
+
+if (nargin == 0)
+ p.N = -1;
+ p.f_hat = [];
+ p = class(p,'f_hat');
+elseif (isa(a,'f_hat'))
+ p = a;
+elseif (isnumeric(a) && isscalar(a) && a >= 0)
+ p.N = a;
+ p.f_hat = zeros((p.N+1)^2,1);
+ p = class(p,'f_hat');
+elseif (isnumeric(a) && ndims(a) == 2 && (size(a,1)-1)/2+1 == size(a,2))
+ p.N = (size(a,1)-1)/2;
+ p.f_hat = zeros((p.N+1)^2,1);
+ o = 1;
+ for k = 0:p.N
+ p.f_hat(o:o+2*k) = a(k*(2*p.N+1)+p.N+1-k:k*(2*p.N+1)+p.N+1+k);
+ o = o + 2*k+1;
+ end
+ p = class(p,'f_hat');
+elseif (isnumeric(a) && ndims(a) == 2 && length(a) == 0 || ...
+ round(sqrt(length(a(:)))-1) == sqrt(length(a(:)))-1)
+ p.N = sqrt(length(a(:)))-1;
+ p.f_hat = a(:);
+ p = class(p,'f_hat');
+else
+ error('Invalid argument for f_hat constructor.')
+end
diff --git a/matlab/nfsft/@f_hat/minus.m b/matlab/nfsft/@f_hat/minus.m
new file mode 100644
index 0000000..2b39770
--- /dev/null
+++ b/matlab/nfsft/@f_hat/minus.m
@@ -0,0 +1,28 @@
+%MINUS Minus for f_hat
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: minus.m 3776 2012-06-03 13:29:25Z keiner $
+function r = minus(p,q)
+p = f_hat(p);
+q = f_hat(q);
+if (p.N ~= q.N)
+ error('Dimensions must agree.')
+end
+r = f_hat(p.f_hat - q.f_hat);
diff --git a/matlab/nfsft/@f_hat/mtimes.m b/matlab/nfsft/@f_hat/mtimes.m
new file mode 100644
index 0000000..ff899be
--- /dev/null
+++ b/matlab/nfsft/@f_hat/mtimes.m
@@ -0,0 +1,28 @@
+%MTIMES Multiply for f_hat
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: mtimes.m 3776 2012-06-03 13:29:25Z keiner $
+function r = mtimes(p,q)
+
+p = f_hat(p);
+q = f_hat(q);
+if (p.N ~= q.N)
+ error('Dimensions must agree.')
+end
+r = f_hat(p.f_hat .* q.f_hat);
diff --git a/matlab/nfsft/@f_hat/mtimesr.m b/matlab/nfsft/@f_hat/mtimesr.m
new file mode 100644
index 0000000..606dee8
--- /dev/null
+++ b/matlab/nfsft/@f_hat/mtimesr.m
@@ -0,0 +1,33 @@
+%MTIMESR Multiply for f_hat
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: mtimesr.m 3776 2012-06-03 13:29:25Z keiner $
+function r = mtimesr(p,q)
+if (isa(p,'f_hat') && isnumeric(q))
+ p = f_hat(p);
+ if (p.N ~= length(q(:))-1)
+ error('Dimensions must agree.')
+ end
+ r = f_hat(p);
+ for k = 0:r.N
+ r.f_hat(k^2+1:k^2+1+2*k) = q(k+1)*r.f_hat(k^2+1:k^2+1+2*k);
+ end
+else
+ error('Wrong argument types');
+end
diff --git a/matlab/nfsft/@f_hat/norm.m b/matlab/nfsft/@f_hat/norm.m
new file mode 100644
index 0000000..915c865
--- /dev/null
+++ b/matlab/nfsft/@f_hat/norm.m
@@ -0,0 +1,24 @@
+%NORM Norm for f_hat class
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: norm.m 3776 2012-06-03 13:29:25Z keiner $
+function y = norm(p,n)
+% Norm for f_hat class
+p = f_hat(p);
+y = norm(p.f_hat);
diff --git a/matlab/nfsft/@f_hat/plus.m b/matlab/nfsft/@f_hat/plus.m
new file mode 100644
index 0000000..b1831a0
--- /dev/null
+++ b/matlab/nfsft/@f_hat/plus.m
@@ -0,0 +1,27 @@
+%PLUS Plus for f_hat
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: plus.m 3776 2012-06-03 13:29:25Z keiner $
+function r = plus(p,q)
+p = f_hat(p);
+q = f_hat(q);
+if (p.N ~= q.N)
+ error('Dimensions must agree.')
+end
+r = f_hat(p.f_hat + q.f_hat);
diff --git a/matlab/nfsft/@f_hat/subsasgn.m b/matlab/nfsft/@f_hat/subsasgn.m
new file mode 100644
index 0000000..8eec894
--- /dev/null
+++ b/matlab/nfsft/@f_hat/subsasgn.m
@@ -0,0 +1,57 @@
+%SUBSASGN Index assignment function for f_hat class
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: subsasgn.m 3776 2012-06-03 13:29:25Z keiner $
+function p = subsasgn(p,s,v)
+switch s.type
+case '()'
+ if (length(s.subs) > 2)
+ error('Index must consist of two elements.');
+ end
+
+ ind1 = s.subs{1};
+ ind2 = s.subs{2};
+
+ if (any(round(ind1) ~= ind1) || min(ind1) < 0 || max(ind1) > p.N)
+ error('Invalid index in first component');
+ end
+
+ if (any(round(ind2) ~= ind2) || min(ind2) < -p.N || max(ind2) > p.N)
+ error('Invalid index in second component');
+ end
+
+ if (length(ind1) == 1 && min(ind2) >= -ind1 && max(ind2) <= ind1)
+ if (ind1 == 0)
+ o = 0;
+ else
+ o = ind1^2;
+ end
+ p.f_hat(o+ind1+1+ind2) = v;
+ elseif (length(ind2) == 1 && min(ind1) >= abs(ind2))
+ ind = zeros(size(ind1));
+ for k = 1:length(ind1)
+ ind(k) = ind1(k)^2+ind1(k)+1+ind2;
+ end
+ p.f_hat(ind) = v;
+ else
+ error('Invalid subindex');
+ end
+otherwise
+ error('Wrong subindex format');
+end
diff --git a/matlab/nfsft/@f_hat/subsref.m b/matlab/nfsft/@f_hat/subsref.m
new file mode 100644
index 0000000..e514c8f
--- /dev/null
+++ b/matlab/nfsft/@f_hat/subsref.m
@@ -0,0 +1,56 @@
+%SUBSREF Indexing funcction for f_hat class
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: subsref.m 3776 2012-06-03 13:29:25Z keiner $
+function b = subsref(p,s)
+switch s.type
+case '()'
+ if (length(s.subs) > 2)
+ error('Index must consist of two elements.');
+ end
+
+ ind1 = s.subs{1};
+ ind2 = s.subs{2};
+
+ if (any(round(ind1) ~= ind1) || min(ind1) < 0 || max(ind1) > p.N)
+ error('Invalid index in first component');
+ end
+
+ if (any(round(ind2) ~= ind2) || min(ind2) < -p.N || max(ind2) > p.N)
+ error('Invalid index in second component');
+ end
+
+ if (length(ind1) == 1 && min(ind2) >= -ind1 && max(ind2) <= ind1)
+ if (ind1 == 0)
+ o = 0;
+ else
+ o = ind1^2;
+ end
+ b = p.f_hat(o+ind1+1+ind2);
+ elseif (length(ind2) == 1 && min(ind1) >= abs(ind2))
+ b = zeros(size(ind1));
+ for k = 1:length(ind1)
+ b(k) = p.f_hat(ind1(k)^2+ind1(k)+1+ind2);
+ end
+ else
+ error('Invalid subindex');
+ end
+otherwise
+ error('Wrong subindex format');
+end
diff --git a/matlab/nfsft/Contents.m b/matlab/nfsft/Contents.m
new file mode 100644
index 0000000..90129fd
--- /dev/null
+++ b/matlab/nfsft/Contents.m
@@ -0,0 +1,33 @@
+%
+% Files
+% f_hat_index - Return indices of Fourier coefficients
+% ndsft_adjoint - Adjoint discrete spherical Fourier transform (direct alg.)
+% ndsft_trafo - Discrete spherical Fourier transform (direct algorithm)
+% nfsft_adjoint - Adjoint fast spherical Fourier transform
+% nfsft_finalize - Finalize plan
+% nfsft_forget - Forget precomputed data
+% nfsft_get_f - Get function values from plan
+% nfsft_get_f_hat - Get Fourier coefficients in a matrix from plan
+% nfsft_get_x - Get nodes from plan
+% nfsft_init - Plan initialization
+% nfsft_init_advanced - Advanced plan initialization routine
+% nfsft_init_guru - Guru plan initialization
+% nfsft_precompute - Node-independent precomputation (for FPT)
+% nfsft_precompute_x - Node-dependent precomputation (for NFFT)
+% nfsft_set_f - Set function values in plan
+% nfsft_set_f_hat - Set Fourier coefficients in plan from a matrix
+% nfsft_set_x - Set nodes in plan
+% nfsft_trafo - Fast spherical Fourier transform
+% NFSFT_NORMALIZED - Flag for using L^2-normalized Spherical harmonics
+% NFSFT_NO_DIRECT_ALGORITHM - Flag for not precomputing for the direct algorithm
+% NFSFT_NO_FAST_ALGORITHM - Flag for not precomputing for the fast algorithm
+% NFSFT_PRESERVE_F_HAT - Flag for NFSFT not destroying input in f_hat
+% NFSFT_USE_DPT - Flag for using the DPT algorithm internally
+% NFSFT_USE_NDFT - Flag for using the NDFT algorithm internally
+% cc - Clenshaw-Curtis interpolatory quadrature rule
+% gl - Gauss-Legendre interpolatory quadrature rule
+% nfsft_get_f_hat_linear - Get Fourier coefficients in a linear vector from plan
+% nfsft_set_f_hat_linear - Set Fourier coefficients in plan from a linear vector
+% projection - Example program: Project a function onto spherical harmonics.
+% simple_test - Example program: Basic usage principles
+% nfsftmex - Gateway routine to the NFSFT module
diff --git a/matlab/nfsft/Makefile.am b/matlab/nfsft/Makefile.am
new file mode 100644
index 0000000..f3b295d
--- /dev/null
+++ b/matlab/nfsft/Makefile.am
@@ -0,0 +1,48 @@
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+SUBDIRS = @f_hat
+
+# compiler flags
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/matlab $(matlab_CPPFLAGS)
+
+# matlab wrapper directory
+nfsftmatlabdir = $(datadir)/nfft/matlab/nfsft
+
+# library
+lib_LTLIBRARIES = libnfsft.la
+libnfsft_la_SOURCES = nfsftmex.c
+libnfsft_la_LIBADD = $(top_builddir)/libnfft3_matlab.la @matlab_fftw3_LIBS@ $(top_builddir)/matlab/libmatlab.la $(matlab_LIBS)
+libnfsft_la_LDFLAGS = -no-undefined -module -shared -shrext $(matlab_mexext) -avoid-version @matlab_fftw3_LDFLAGS@ $(matlab_LDFLAGS)
+
+if HAVE_MATLAB_THREADS
+libnfsft_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+
+
+dist_nfsftmatlab_DATA = cc.m Contents.m f_hat_index.m ndsft_adjoint.m ndsft_trafo.m \
+ nfsft_adjoint.m nfsft_finalize.m nfsft_forget.m nfsft_get_f_hat.m \
+ nfsft_get_f.m nfsft_get_x.m nfsft_init_advanced.m nfsft_init_guru.m \
+ nfsft_init.m NFSFT_NO_DIRECT_ALGORITHM.m NFSFT_NO_FAST_ALGORITHM.m \
+ NFSFT_NORMALIZED.m nfsft_precompute_x.m nfsft_precompute.m \
+ NFSFT_PRESERVE_F_HAT.m nfsft_set_f_hat.m nfsft_set_f.m nfsft_set_x.m \
+ nfsft_trafo.m NFSFT_USE_DPT.m NFSFT_USE_NDFT.m gl.m simple_test.m \
+ nfsft_get_f_hat_linear.m nfsft_set_f_hat_linear.m projection.m \
+ nfsft_get_num_threads.m
+
+# target all-am builds .libs/libnfsft at matlab_mexext@
+nfsftmex at matlab_mexext@: all-am
+ rm -f ./nfsftmex at matlab_mexext@
+ $(LN_S) .libs/libnfsft at matlab_mexext@ ./nfsftmex at matlab_mexext@
+
+all: all-am nfsftmex at matlab_mexext@
+
+clean: clean-am
+ rm -f ./nfsftmex at matlab_mexext@
+
+install-exec-hook:
+ rm -f $(libdir)/nfsftmex at matlab_mexext@
+ $(LN_S) $(libdir)/libnfsft at matlab_mexext@ $(libdir)/nfsftmex at matlab_mexext@
+
+uninstall-hook:
+ rm -f $(libdir)/nfsftmex at matlab_mexext@
+
diff --git a/matlab/nfsft/Makefile.in b/matlab/nfsft/Makefile.in
new file mode 100644
index 0000000..f3ef809
--- /dev/null
+++ b/matlab/nfsft/Makefile.in
@@ -0,0 +1,840 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = matlab/nfsft
+DIST_COMMON = $(dist_nfsftmatlab_DATA) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(nfsftmatlabdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libnfsft_la_DEPENDENCIES = $(top_builddir)/libnfft3_matlab.la \
+ $(top_builddir)/matlab/libmatlab.la $(am__DEPENDENCIES_1)
+am_libnfsft_la_OBJECTS = libnfsft_la-nfsftmex.lo
+libnfsft_la_OBJECTS = $(am_libnfsft_la_OBJECTS)
+libnfsft_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libnfsft_la_CFLAGS) \
+ $(CFLAGS) $(libnfsft_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libnfsft_la_SOURCES)
+DIST_SOURCES = $(libnfsft_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DATA = $(dist_nfsftmatlab_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = @f_hat
+
+# compiler flags
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/matlab $(matlab_CPPFLAGS)
+
+# matlab wrapper directory
+nfsftmatlabdir = $(datadir)/nfft/matlab/nfsft
+
+# library
+lib_LTLIBRARIES = libnfsft.la
+libnfsft_la_SOURCES = nfsftmex.c
+libnfsft_la_LIBADD = $(top_builddir)/libnfft3_matlab.la @matlab_fftw3_LIBS@ $(top_builddir)/matlab/libmatlab.la $(matlab_LIBS)
+libnfsft_la_LDFLAGS = -no-undefined -module -shared -shrext $(matlab_mexext) -avoid-version @matlab_fftw3_LDFLAGS@ $(matlab_LDFLAGS)
+ at HAVE_MATLAB_THREADS_TRUE@libnfsft_la_CFLAGS = $(OPENMP_CFLAGS)
+dist_nfsftmatlab_DATA = cc.m Contents.m f_hat_index.m ndsft_adjoint.m ndsft_trafo.m \
+ nfsft_adjoint.m nfsft_finalize.m nfsft_forget.m nfsft_get_f_hat.m \
+ nfsft_get_f.m nfsft_get_x.m nfsft_init_advanced.m nfsft_init_guru.m \
+ nfsft_init.m NFSFT_NO_DIRECT_ALGORITHM.m NFSFT_NO_FAST_ALGORITHM.m \
+ NFSFT_NORMALIZED.m nfsft_precompute_x.m nfsft_precompute.m \
+ NFSFT_PRESERVE_F_HAT.m nfsft_set_f_hat.m nfsft_set_f.m nfsft_set_x.m \
+ nfsft_trafo.m NFSFT_USE_DPT.m NFSFT_USE_NDFT.m gl.m simple_test.m \
+ nfsft_get_f_hat_linear.m nfsft_set_f_hat_linear.m projection.m \
+ nfsft_get_num_threads.m
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu matlab/nfsft/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu matlab/nfsft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+ }
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libnfsft.la: $(libnfsft_la_OBJECTS) $(libnfsft_la_DEPENDENCIES) $(EXTRA_libnfsft_la_DEPENDENCIES)
+ $(libnfsft_la_LINK) -rpath $(libdir) $(libnfsft_la_OBJECTS) $(libnfsft_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libnfsft_la-nfsftmex.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+libnfsft_la-nfsftmex.lo: nfsftmex.c
+ at am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_la_CFLAGS) $(CFLAGS) -MT libnfsft_la-nfsftmex.lo -MD -MP -MF $(DEPDIR)/libnfsft_la-nfsftmex.Tpo -c -o libnfsft_la-nfsftmex.lo `test -f 'nfsftmex.c' || echo '$(srcdir)/'`nfsftmex.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libnfsft_la-nfsftmex.Tpo $(DEPDIR)/libnfsft_la-nfsftmex.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nfsftmex.c' object='libnfsft_la-nfsftmex.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_la_CFLAGS) $(CFLAGS) -c -o libnfsft_la-nfsftmex.lo `test -f 'nfsftmex.c' || echo '$(srcdir)/'`nfsftmex.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-dist_nfsftmatlabDATA: $(dist_nfsftmatlab_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(dist_nfsftmatlab_DATA)'; test -n "$(nfsftmatlabdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(nfsftmatlabdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(nfsftmatlabdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nfsftmatlabdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(nfsftmatlabdir)" || exit $$?; \
+ done
+
+uninstall-dist_nfsftmatlabDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_nfsftmatlab_DATA)'; test -n "$(nfsftmatlabdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(nfsftmatlabdir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+cscopelist-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES) $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(nfsftmatlabdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-dist_nfsftmatlabDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-dist_nfsftmatlabDATA uninstall-libLTLIBRARIES
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+ cscopelist-recursive ctags-recursive install-am \
+ install-exec-am install-strip tags-recursive uninstall-am
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic \
+ clean-libLTLIBRARIES clean-libtool cscopelist \
+ cscopelist-recursive ctags ctags-recursive distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am \
+ install-dist_nfsftmatlabDATA install-dvi install-dvi-am \
+ install-exec install-exec-am install-exec-hook install-html \
+ install-html-am install-info install-info-am \
+ install-libLTLIBRARIES install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am \
+ uninstall-dist_nfsftmatlabDATA uninstall-hook \
+ uninstall-libLTLIBRARIES
+
+
+# target all-am builds .libs/libnfsft at matlab_mexext@
+nfsftmex at matlab_mexext@: all-am
+ rm -f ./nfsftmex at matlab_mexext@
+ $(LN_S) .libs/libnfsft at matlab_mexext@ ./nfsftmex at matlab_mexext@
+
+all: all-am nfsftmex at matlab_mexext@
+
+clean: clean-am
+ rm -f ./nfsftmex at matlab_mexext@
+
+install-exec-hook:
+ rm -f $(libdir)/nfsftmex at matlab_mexext@
+ $(LN_S) $(libdir)/libnfsft at matlab_mexext@ $(libdir)/nfsftmex at matlab_mexext@
+
+uninstall-hook:
+ rm -f $(libdir)/nfsftmex at matlab_mexext@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/matlab/nfsft/NFSFT_NORMALIZED.m b/matlab/nfsft/NFSFT_NORMALIZED.m
new file mode 100644
index 0000000..1d6ed49
--- /dev/null
+++ b/matlab/nfsft/NFSFT_NORMALIZED.m
@@ -0,0 +1,22 @@
+%NFSFT_NORMALIZED Flag for using L^2-normalized Spherical harmonics
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: NFSFT_NORMALIZED.m 3776 2012-06-03 13:29:25Z keiner $
+function f = NFSFT_NORMALIZED()
+f = 1;
diff --git a/matlab/nfsft/NFSFT_NO_DIRECT_ALGORITHM.m b/matlab/nfsft/NFSFT_NO_DIRECT_ALGORITHM.m
new file mode 100644
index 0000000..2b69944
--- /dev/null
+++ b/matlab/nfsft/NFSFT_NO_DIRECT_ALGORITHM.m
@@ -0,0 +1,22 @@
+%NFSFT_NO_DIRECT_ALGORITHM Flag for not precomputing for the direct algorithm
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: NFSFT_NO_DIRECT_ALGORITHM.m 3776 2012-06-03 13:29:25Z keiner $
+function f = NFSFT_NO_DIRECT_ALGORITHM()
+f = 8192;
diff --git a/matlab/nfsft/NFSFT_NO_FAST_ALGORITHM.m b/matlab/nfsft/NFSFT_NO_FAST_ALGORITHM.m
new file mode 100644
index 0000000..abc1dfa
--- /dev/null
+++ b/matlab/nfsft/NFSFT_NO_FAST_ALGORITHM.m
@@ -0,0 +1,22 @@
+%NFSFT_NO_FAST_ALGORITHM Flag for not precomputing for the fast algorithm
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: NFSFT_NO_FAST_ALGORITHM.m 3776 2012-06-03 13:29:25Z keiner $
+function f = NFSFT_NO_FAST_ALGORITHM()
+f = 16384;
diff --git a/matlab/nfsft/NFSFT_PRESERVE_F_HAT.m b/matlab/nfsft/NFSFT_PRESERVE_F_HAT.m
new file mode 100644
index 0000000..fc1f1da
--- /dev/null
+++ b/matlab/nfsft/NFSFT_PRESERVE_F_HAT.m
@@ -0,0 +1,22 @@
+%NFSFT_PRESERVE_F_HAT Flag for NFSFT not destroying input in f_hat
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: NFSFT_PRESERVE_F_HAT.m 3776 2012-06-03 13:29:25Z keiner $
+function f = NFSFT_PRESERVE_F_HAT()
+f = 128;
diff --git a/matlab/nfsft/NFSFT_USE_DPT.m b/matlab/nfsft/NFSFT_USE_DPT.m
new file mode 100644
index 0000000..5a0f78c
--- /dev/null
+++ b/matlab/nfsft/NFSFT_USE_DPT.m
@@ -0,0 +1,23 @@
+%NFSFT_USE_DPT Flag for using the DPT algorithm internally
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: NFSFT_USE_DPT.m 3776 2012-06-03 13:29:25Z keiner $
+function f = NFSFT_USE_DPT()
+
+f = 4;
diff --git a/matlab/nfsft/NFSFT_USE_NDFT.m b/matlab/nfsft/NFSFT_USE_NDFT.m
new file mode 100644
index 0000000..5f915c0
--- /dev/null
+++ b/matlab/nfsft/NFSFT_USE_NDFT.m
@@ -0,0 +1,22 @@
+%NFSFT_USE_NDFT Flag for using the NDFT algorithm internally
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: NFSFT_USE_NDFT.m 3776 2012-06-03 13:29:25Z keiner $
+function f = NFSFT_USE_NDFT()
+f = 2;
diff --git a/matlab/nfsft/cc.m b/matlab/nfsft/cc.m
new file mode 100755
index 0000000..4b7beca
--- /dev/null
+++ b/matlab/nfsft/cc.m
@@ -0,0 +1,95 @@
+%CC Clenshaw-Curtis interpolatory quadrature rule
+% X = CC(N) generates the (2N+2)*(2*N-1)+2 Clenshaw-Curtis nodes and returns a
+% 2x[(2N+2)*(2*N-1)+2] matrix X containing their spherical coordinates. The
+% first row contains the longitudes in [0,2pi] and the second row the
+% colatitudes in [0,pi].
+%
+% [X,W] = CC(N) in addition generates the quadrature weights W. The resulting
+% quadrature rule is exact up to polynomial degree 2*N.
+%
+% For the special case N = 0, the number of nodes is 2.
+%
+% Nota bene: In latitudinal direction, the nodes are based on Chebyshev zeros
+% in (-1,1). Similar quadrature rules based on Chebyshev extrema in [-1,1]
+% are also often denoted Clenshaw-Curtis quadrature rules. See the references.
+%
+% Example:
+% [X,W] = CC(1) gives
+%
+% X =
+% 0 0 1.5708 3.1416 4.7124 0
+% 0 1.5708 1.5708 1.5708 1.5708 3.1416
+%
+% W =
+% 2.0944 2.0944 2.0944 2.0944 2.0944 2.0944
+%
+% See also gl, healpix, equidist
+%
+% References
+% TODO Add references.
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: cc.m 3776 2012-06-03 13:29:25Z keiner $
+function [x,w] = cc(n)
+
+% correctness conditions
+if (nargin ~= 1)
+ error('cc: Exactly one input argument required.');
+end
+if (~isscalar(n) || n < 0)
+ error('cc: Input argument must be a non-negative number.');
+end
+if (nargout > 2)
+ error('cc: No more than two output arguments allowed.');
+end
+
+% Gauss-Legendre nodes and weights (maybe) on [-1,1]
+if (nargout == 2)
+ [theta,w] = fclencurt(2*n+1,-1,1);
+else
+ theta = fclencurt(2*n+1,-1,1);
+end
+% coordinate transformation to [0,pi] for colatitude
+theta = acos(theta);
+% equispaced nodes for longitude
+phi = 2*pi*(0:2*n+1)/(2*n+2);
+% tensor product
+[x,y] = meshgrid(theta(2:end-1),phi);
+% linearisation to 2x((2*n+2)(2*n-1))+2 matrix
+x = [y(:),x(:)]';
+x = [[0;0],x,[0;pi]];
+if (nargout == 2)
+ % weights
+ w0 = 2*pi*w(1);
+ w = repmat((pi/(n+1))*w(2:end-1),1,2*n+2)';
+ w = w(:)';
+ w = [w0,w,w0];
+end
+
+% The following function is based on code by Greg von Winckel, 02/12/2005
+% See: ...
+function [x,w] = fclencurt(n1,a,b)
+n = n1-1; bma = b - a;
+c = zeros(n1,2);
+c(1:2:n1,1) = (2./[1 1-(2:2:n).^2 ])'; c(2,2)=1;
+f = real(ifft([c(1:n1,:);c(n:-1:2,:)]));
+w = bma*([f(1,1); 2*f(2:n,1); f(n1,1)])/2;
+x = 0.5*((b+a)+n*bma*f(1:n1,2));
+
diff --git a/matlab/nfsft/f_hat_index.m b/matlab/nfsft/f_hat_index.m
new file mode 100644
index 0000000..74db6ce
--- /dev/null
+++ b/matlab/nfsft/f_hat_index.m
@@ -0,0 +1,38 @@
+%F_HAT_INDEX Return indices of Fourier coefficients
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: f_hat_index.m 3776 2012-06-03 13:29:25Z keiner $
+function ind = f_hat_index(f_hat,j,k)
+[m,n] = size(f_hat);
+N = (m-1)/2;
+
+if (mod(m,2) ~= 1 || N+1 ~= n)
+ error('This is not a valid f_hat variable')
+end
+
+if (exist('k','var') == 0 || exist('n','var') == 0)
+ ind = zeros(1,(N+1)*(N+1));
+ j = 1;
+ for k = 0:N
+ ind(j:j+2*k) = k*(2*N+1) + N + 1 + (-k:k);
+ j = j + 2*k+1;
+ end
+else
+ ind = (2*N+1)*j + k + N + 1;
+end
diff --git a/matlab/nfsft/gl.m b/matlab/nfsft/gl.m
new file mode 100644
index 0000000..21f0aa2
--- /dev/null
+++ b/matlab/nfsft/gl.m
@@ -0,0 +1,106 @@
+%GL Gauss-Legendre interpolatory quadrature rule
+% X = GL(N) generates the (2N+2)*(N+1) Gauss-Legendre nodes and returns a
+% 2x[(2N+2)*(N+1)] matrix X containing their spherical coordinates. The first
+% row contains the longitudes in [0,2pi] and the second row the colatitudes in
+% [0,pi].
+%
+% [X,W] = GL(N) in addition generates the quadrature weights W. The resulting
+% quadrature rule is exact up to polynomial degree 2*N.
+%
+% Example:
+% [X,W] = GL(1) gives
+%
+% X =
+% 0 1.5708 3.1416 4.7124 0 1.5708 3.1416 4.7124
+% 0.9553 0.9553 0.9553 0.9553 2.1863 2.1863 2.1863 2.1863
+%
+% W =
+% 1.5708 1.5708 1.5708 1.5708 1.5708 1.5708 1.5708 1.5708
+%
+% See also cc, healpix, equidist
+%
+% References
+% TODO Add references.
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: gl.m 3776 2012-06-03 13:29:25Z keiner $
+function [x,w] = gl(n)
+
+% correctness conditions
+if (nargin ~= 1)
+ error('gl: Exactly one input argument required.');
+end
+if (~isscalar(n) || n < 0)
+ error('gl: Input argument must be a non-negative number.');
+end
+if (nargout > 2)
+ error('gl: No more than two output arguments allowed.');
+end
+
+% Gauss-Legendre nodes and weights (maybe) on [-1,1]
+if (nargout == 2)
+ [theta,w] = lgwt(n+1,-1,1);
+else
+ theta = lgwt(n+1,-1,1);
+end
+% coordinate transformation to [0,pi] for colatitude
+theta = acos(theta);
+% equispaced nodes for longitude
+phi = 2*pi*(0:2*n+1)/(2*n+2);
+% tensor product
+[x,y] = meshgrid(theta,phi);
+% linearisation to 2x((2*n+2)(n+1)) matrix
+x = [y(:),x(:)]';
+if (nargout == 2)
+ % weights
+ w = repmat((pi/(n+1))*w,1,2*n+2)';
+ w = w(:)';
+end
+
+% The following function is based on code by Greg von Winckel, 02/25/2004
+% See: TODO Add references.
+function [x,w] = lgwt(n,a,b)
+
+n = n-1; n1= n + 1; n2 = n + 2;
+% n1 uniform nodes in [-1,1]
+xu = linspace(-1,1,n1)';
+% initial guess for nodes
+y=cos((2*(0:n)'+1)*pi/(2*n+2)) + (0.27/n1)*sin(pi*xu*n/n2);
+% Gauss-Legendre Vandermonde matrix
+L=zeros(n1,n2);
+% derivative of that
+Lp=zeros(n1,n2);
+% We compute the zeros of the n1th Legendre polynomial using the recursion
+% relation and the Newton-Raphson method.
+y0=2;
+% Iterate until new points are uniformly within epsilon of old points.
+while (max(abs(y - y0)) > eps)
+ L(:,1) = 1; Lp(:,1) = 0; L(:,2) = y; Lp(:,2) = 1;
+ for k = 2:n1
+ L(:,k+1) = ((2*k-1)*y.*L(:,k)-(k-1)*L(:,k-1))/k;
+ end
+ Lp = n2 * (L(:,n1) - y.*L(:,n2))./(1-y.^2); y0 = y; y = y0 - L(:,n2)./Lp;
+end
+% linear map from[-1,1] to [a,b]
+x = (a*(1-y)+b*(1+y))/2;
+if (nargout == 2)
+ % weights
+ w = (b-a)./((1-y.^2).*Lp.^2)*(n2/n1)^2;
+end
diff --git a/matlab/nfsft/ndsft_adjoint.m b/matlab/nfsft/ndsft_adjoint.m
new file mode 100644
index 0000000..fb84628
--- /dev/null
+++ b/matlab/nfsft/ndsft_adjoint.m
@@ -0,0 +1,22 @@
+%NDSFT_ADJOINT Adjoint discrete spherical Fourier transform (direct alg.)
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: ndsft_adjoint.m 3776 2012-06-03 13:29:25Z keiner $
+function ndsft_adjoint(p)
+nfsftmex('adjoint_direct',p)
diff --git a/matlab/nfsft/ndsft_trafo.m b/matlab/nfsft/ndsft_trafo.m
new file mode 100644
index 0000000..ccb7db7
--- /dev/null
+++ b/matlab/nfsft/ndsft_trafo.m
@@ -0,0 +1,22 @@
+%NDSFT_TRAFO Discrete spherical Fourier transform (direct algorithm)
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: ndsft_trafo.m 3776 2012-06-03 13:29:25Z keiner $
+function ndsft_trafo(p)
+nfsftmex('trafo_direct',p)
diff --git a/matlab/nfsft/nfsft_adjoint.m b/matlab/nfsft/nfsft_adjoint.m
new file mode 100644
index 0000000..f7913a3
--- /dev/null
+++ b/matlab/nfsft/nfsft_adjoint.m
@@ -0,0 +1,22 @@
+%NFSFT_ADJOINT Adjoint fast spherical Fourier transform
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_adjoint.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_adjoint(p)
+nfsftmex('adjoint',p)
diff --git a/matlab/nfsft/nfsft_finalize.m b/matlab/nfsft/nfsft_finalize.m
new file mode 100644
index 0000000..6a1eed6
--- /dev/null
+++ b/matlab/nfsft/nfsft_finalize.m
@@ -0,0 +1,22 @@
+%NFSFT_FINALIZE Finalize plan
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_finalize.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_finalize(p)
+nfsftmex('finalize',p)
diff --git a/matlab/nfsft/nfsft_forget.m b/matlab/nfsft/nfsft_forget.m
new file mode 100644
index 0000000..f9e06ff
--- /dev/null
+++ b/matlab/nfsft/nfsft_forget.m
@@ -0,0 +1,22 @@
+%NFSFT_FORGET Forget precomputed data
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_forget.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_forget
+nfsftmex('forget');
diff --git a/matlab/nfsft/nfsft_get_f.m b/matlab/nfsft/nfsft_get_f.m
new file mode 100644
index 0000000..e6c3f12
--- /dev/null
+++ b/matlab/nfsft/nfsft_get_f.m
@@ -0,0 +1,22 @@
+%NFSFT_GET_F Get function values from plan
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_get_f.m 3776 2012-06-03 13:29:25Z keiner $
+function f = nfsft_get_f(p)
+f = nfsftmex('get_f',p);
diff --git a/matlab/nfsft/nfsft_get_f_hat.m b/matlab/nfsft/nfsft_get_f_hat.m
new file mode 100644
index 0000000..28c33e1
--- /dev/null
+++ b/matlab/nfsft/nfsft_get_f_hat.m
@@ -0,0 +1,22 @@
+%NFSFT_GET_F_HAT Get Fourier coefficients in a matrix from plan
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_get_f_hat.m 3776 2012-06-03 13:29:25Z keiner $
+function f_hat = nfsft_get_f_hat(p)
+f_hat = nfsftmex('get_f_hat',p);
diff --git a/matlab/nfsft/nfsft_get_f_hat_linear.m b/matlab/nfsft/nfsft_get_f_hat_linear.m
new file mode 100644
index 0000000..8edf27c
--- /dev/null
+++ b/matlab/nfsft/nfsft_get_f_hat_linear.m
@@ -0,0 +1,22 @@
+%NFSFT_GET_F_HAT_LINEAR Get Fourier coefficients in a linear vector from plan
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_get_f_hat_linear.m 3776 2012-06-03 13:29:25Z keiner $
+function f_hat = nfsft_get_f_hat_linear(p)
+f_hat = nfsftmex('get_f_hat_linear',p);
diff --git a/matlab/nfsft/nfsft_get_num_threads.m b/matlab/nfsft/nfsft_get_num_threads.m
new file mode 100644
index 0000000..c48e8f3
--- /dev/null
+++ b/matlab/nfsft/nfsft_get_num_threads.m
@@ -0,0 +1,23 @@
+%NFSFT_GET_NUM_THREADS Get number of threads (at most) used for computation
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfft_get_x.m 3124 2009-03-18 13:44:27Z kunis $
+function nthreads = nfsft_get_num_threads()
+
+nthreads = nfsftmex('get_num_threads');
diff --git a/matlab/nfsft/nfsft_get_x.m b/matlab/nfsft/nfsft_get_x.m
new file mode 100644
index 0000000..0c01151
--- /dev/null
+++ b/matlab/nfsft/nfsft_get_x.m
@@ -0,0 +1,22 @@
+%NFSFT_GET_X Get nodes from plan
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_get_x.m 3776 2012-06-03 13:29:25Z keiner $
+function x = nfsft_get_x(p)
+x = nfsftmex('get_x',p);
diff --git a/matlab/nfsft/nfsft_init.m b/matlab/nfsft/nfsft_init.m
new file mode 100644
index 0000000..4dd2c80
--- /dev/null
+++ b/matlab/nfsft/nfsft_init.m
@@ -0,0 +1,22 @@
+%NFSFT_INIT Plan initialization
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_init.m 3776 2012-06-03 13:29:25Z keiner $
+function p = nfsft_init(N,M)
+p = nfsftmex('init',N,M);
diff --git a/matlab/nfsft/nfsft_init_advanced.m b/matlab/nfsft/nfsft_init_advanced.m
new file mode 100644
index 0000000..0ecb48c
--- /dev/null
+++ b/matlab/nfsft/nfsft_init_advanced.m
@@ -0,0 +1,22 @@
+%NFSFT_INIT_ADVANCED Advanced plan initialization routine
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_init_advanced.m 3776 2012-06-03 13:29:25Z keiner $
+function p = nfsft_init_advanced(N,M,flags)
+p = nfsftmex('init_advanced',N,M,flags);
diff --git a/matlab/nfsft/nfsft_init_guru.m b/matlab/nfsft/nfsft_init_guru.m
new file mode 100644
index 0000000..71571ca
--- /dev/null
+++ b/matlab/nfsft/nfsft_init_guru.m
@@ -0,0 +1,22 @@
+%NFSFT_INIT_GURU Guru plan initialization
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_init_guru.m 3776 2012-06-03 13:29:25Z keiner $
+function p = nfsft_init_guru(N,M,flags,nfft_flags,nfft_cutoff)
+p = nfsftmex('init_guru',N,M,flags,nfft_flags,nfft_cutoff);
diff --git a/matlab/nfsft/nfsft_precompute.m b/matlab/nfsft/nfsft_precompute.m
new file mode 100644
index 0000000..c4e7e4a
--- /dev/null
+++ b/matlab/nfsft/nfsft_precompute.m
@@ -0,0 +1,30 @@
+%NFSFT_PRECOMPUTE Node-independent precomputation (for FPT)
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_precompute.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_precompute(N,kappa,nfsft_flags,fpt_flags)
+if ~exist('nfsft_flags','var')
+ nfsft_flags = 0;
+end
+
+if ~exist('fpt_flags','var')
+ fpt_flags = 0;
+end
+
+nfsftmex('precompute',N,kappa,nfsft_flags,fpt_flags)
diff --git a/matlab/nfsft/nfsft_precompute_x.m b/matlab/nfsft/nfsft_precompute_x.m
new file mode 100644
index 0000000..1975945
--- /dev/null
+++ b/matlab/nfsft/nfsft_precompute_x.m
@@ -0,0 +1,22 @@
+%NFSFT_PRECOMPUTE_X Node-dependent precomputation (for NFFT)
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_precompute_x.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_precompute_x(p)
+nfsftmex('precompute_x',p)
diff --git a/matlab/nfsft/nfsft_set_f.m b/matlab/nfsft/nfsft_set_f.m
new file mode 100644
index 0000000..93dfebd
--- /dev/null
+++ b/matlab/nfsft/nfsft_set_f.m
@@ -0,0 +1,22 @@
+%NFSFT_SET_F Set function values in plan
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_set_f.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_set_f(p,f)
+nfsftmex('set_f',p,f)
diff --git a/matlab/nfsft/nfsft_set_f_hat.m b/matlab/nfsft/nfsft_set_f_hat.m
new file mode 100644
index 0000000..2db341a
--- /dev/null
+++ b/matlab/nfsft/nfsft_set_f_hat.m
@@ -0,0 +1,22 @@
+%NFSFT_SET_F_HAT Set Fourier coefficients in plan from a matrix
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_set_f_hat.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_set_f_hat(p,f_hat)
+nfsftmex('set_f_hat',p,f_hat)
diff --git a/matlab/nfsft/nfsft_set_f_hat_linear.m b/matlab/nfsft/nfsft_set_f_hat_linear.m
new file mode 100644
index 0000000..ce3e869
--- /dev/null
+++ b/matlab/nfsft/nfsft_set_f_hat_linear.m
@@ -0,0 +1,22 @@
+%NFSFT_SET_F_HAT_LINEAR Set Fourier coefficients in plan from a linear vector
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_set_f_hat_linear.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_set_f_hat_linear(p,f_hat)
+nfsftmex('set_f_hat_linear',p,f_hat)
diff --git a/matlab/nfsft/nfsft_set_x.m b/matlab/nfsft/nfsft_set_x.m
new file mode 100644
index 0000000..886ed00
--- /dev/null
+++ b/matlab/nfsft/nfsft_set_x.m
@@ -0,0 +1,22 @@
+%NFSFT_SET_X Set nodes in plan
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_set_x.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_set_x(p,x)
+nfsftmex('set_x',p,x)
diff --git a/matlab/nfsft/nfsft_trafo.m b/matlab/nfsft/nfsft_trafo.m
new file mode 100644
index 0000000..2d43759
--- /dev/null
+++ b/matlab/nfsft/nfsft_trafo.m
@@ -0,0 +1,22 @@
+%NFSFT_TRAFO Fast spherical Fourier transform
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: nfsft_trafo.m 3776 2012-06-03 13:29:25Z keiner $
+function nfsft_trafo(p)
+nfsftmex('trafo',p)
diff --git a/matlab/nfsft/nfsftmex.c b/matlab/nfsft/nfsftmex.c
new file mode 100644
index 0000000..8a2060f
--- /dev/null
+++ b/matlab/nfsft/nfsftmex.c
@@ -0,0 +1,482 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: nfsftmex.c 3967 2013-04-23 08:59:35Z tovo $ */
+#include "config.h"
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include <string.h>
+#include <stdio.h>
+#include <stdint.h>
+#include "nfft3.h"
+#include "infft.h"
+#include "nfft3util.h"
+#include "imex.h"
+
+#ifdef HAVE_MEXVERSION_C
+ #include "mexversion.c"
+#endif
+
+#define PLANS_MAX 100 /* maximum number of plans */
+#define CMD_LEN_MAX 20 /* maximum length of command argument */
+
+/* global flags */
+#define NFSFT_MEX_FIRST_CALL (1U << 0)
+#define NFSFT_MEX_PRECOMPUTED (1U << 1)
+unsigned short gflags = NFSFT_MEX_FIRST_CALL;
+
+nfsft_plan* plans[PLANS_MAX]; /* plans */
+int n_max = -1; /* maximum degree precomputed */
+char cmd[CMD_LEN_MAX];
+
+static inline void get_nm(const mxArray *prhs[], int *n, int *m)
+{
+ int t = nfft_mex_get_int(prhs[1],"nfsft: Input argument N must be a scalar.");
+ DM(if (t < 0)
+ mexErrMsgTxt("nfsft: Input argument N must be non-negative.");)
+ *n = t;
+ t = nfft_mex_get_int(prhs[2],"nfsft: Input argument M must be a scalar.");
+ DM(if (t < 1)
+ mexErrMsgTxt("nfsft: Input argument M must be positive.");)
+ *m = t;
+}
+
+static inline void get_nmf(const mxArray *prhs[], int *n, int *m,
+ unsigned int *f)
+{
+ get_nm(prhs,n,m);
+ *f = nfft_mex_get_int(prhs[3],"nfsft: Input argument flags must be a scalar.");
+}
+
+static inline void get_nmffc(const mxArray *prhs[], int *n, int *m,
+ unsigned int *f, unsigned int *f2, int *c)
+{
+ get_nmf(prhs,n,m,f);
+ *f2 = nfft_mex_get_int(prhs[4],"nfsft: Input argument flags2 must be a scalar.");
+ {
+ int t = nfft_mex_get_int(prhs[5],"nfsft: Input argument c must be a scalar.");
+ DM(if (t < 1)
+ mexErrMsgTxt("nfsft: Input argument c must be positive.");)
+ *c = t;
+ }
+}
+
+static inline void check_nargs(const int nrhs, const int n, const char* errmsg)
+{
+ DM(if (nrhs != n)
+ mexErrMsgTxt(errmsg);)
+}
+
+static inline int mkplan()
+{
+ int i = 0;
+ while (i < PLANS_MAX && plans[i] != 0) i++;
+ if (i == PLANS_MAX)
+ mexErrMsgTxt("nfsft: Too many plans already allocated.");
+ plans[i] = nfft_malloc(sizeof(nfsft_plan));
+ return i;
+}
+
+/* cleanup on mex function unload */
+static void cleanup(void)
+{
+ int i;
+
+ if (!(gflags & NFSFT_MEX_FIRST_CALL))
+ {
+ for (i = 0; i < PLANS_MAX; i++)
+ if (plans[i])
+ {
+ nfsft_finalize(plans[i]);
+ nfft_free(plans[i]);
+ plans[i] = 0;
+ }
+ nfsft_forget();
+ gflags |= NFSFT_MEX_FIRST_CALL;
+ gflags &= ~NFSFT_MEX_PRECOMPUTED;
+ n_max = -1;
+ }
+}
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
+{
+ if (gflags & NFSFT_MEX_FIRST_CALL)
+ {
+ /* Force Matlab to load libfftw3. There is at least one version of Matlab
+ * which otherwise crashes upon invocation of this mex function. */
+ mexEvalString("fft([1,2,3,4]);");
+
+ nfft_mex_install_mem_hooks();
+
+ /* plan pointers to zeros */
+ {
+ int i;
+ for (i = 0; i < PLANS_MAX; i++)
+ plans[i] = 0;
+ }
+
+ mexAtExit(cleanup);
+ gflags &= ~NFSFT_MEX_FIRST_CALL;
+ }
+
+ /* command string */
+ DM(if (nrhs == 0)
+ mexErrMsgTxt("At least one input required.");)
+
+ DM(if (!mxIsChar(prhs[0]))
+ mexErrMsgTxt("First argument must be a string.");)
+
+ if (mxGetString(prhs[0], cmd, CMD_LEN_MAX))
+ mexErrMsgTxt("Could not get command string.");
+
+ if (strcmp(cmd,"init") == 0)
+ {
+ check_nargs(nrhs,3,"Wrong number of arguments for init.");
+ {
+ int i;
+ int n, m;
+ get_nm(prhs,&n,&m);
+ i = mkplan();
+ nfsft_init(plans[i],n,m);
+ plhs[0] = mxCreateDoubleScalar((double)i);
+ }
+ return;
+ }
+ else if (strcmp(cmd,"init_advanced") == 0)
+ {
+ check_nargs(nrhs,4,"Wrong number of arguments for init_advanced.");
+ {
+ int i;
+ int n, m;
+ unsigned int f;
+ get_nmf(prhs,&n,&m,&f);
+ i = mkplan();
+ nfsft_init_advanced(plans[i],n,m,f | NFSFT_MALLOC_X | NFSFT_MALLOC_F |
+ NFSFT_MALLOC_F_HAT);
+ plhs[0] = mxCreateDoubleScalar((double)i);
+ }
+ return;
+ }
+ else if (strcmp(cmd,"init_guru") == 0)
+ {
+ check_nargs(nrhs,6,"Wrong number of arguments for init_guru.");
+ {
+ int i;
+ int n, m, c;
+ unsigned int f, f2;
+ get_nmffc(prhs,&n,&m,&f,&f2,&c);
+ i = mkplan();
+ nfsft_init_guru(plans[i],n,m,f | NFSFT_MALLOC_X | NFSFT_MALLOC_F |
+ NFSFT_MALLOC_F_HAT, PRE_PHI_HUT | PRE_PSI | FFTW_INIT
+ | FFT_OUT_OF_PLACE, c);
+ plhs[0] = mxCreateDoubleScalar((double)i);
+ }
+ return;
+ }
+ else if (strcmp(cmd,"precompute") == 0)
+ {
+ check_nargs(nrhs,5,"Wrong number of arguments for precompute.");
+ {
+ int n = nfft_mex_get_int(prhs[1],"nfsft: Input argument n must be a scalar.");
+ double k = nfft_mex_get_double(prhs[2],"nfsft: Input argument kappa must be a scalar.");
+ unsigned int f = nfft_mex_get_int(prhs[3],"nfsft: Input argument flags must be a scalar.");
+ unsigned int f2 = nfft_mex_get_int(prhs[4],"nfsft: Input argument flags2 must be a scalar.");
+ if (n_max < n)
+ {
+ if (gflags & NFSFT_MEX_PRECOMPUTED)
+ nfsft_forget();
+
+ nfsft_precompute(n,k,f,f2);
+ n_max = n;
+ gflags |= NFSFT_MEX_PRECOMPUTED;
+ }
+ }
+ return;
+ }
+ else if (strcmp(cmd,"forget") == 0)
+ {
+ check_nargs(nrhs,1,"Wrong number of arguments for forget.");
+ nfsft_forget();
+ n_max = -1;
+ gflags &= ~NFSFT_MEX_PRECOMPUTED;
+ return;
+ }
+ else if (strcmp(cmd,"trafo") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for trafo.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+ nfsft_trafo(plans[i]);
+ }
+ return;
+ }
+ else if (strcmp(cmd,"adjoint") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for adjoint.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+ nfsft_adjoint(plans[i]);
+ }
+ return;
+ }
+ else if (strcmp(cmd,"finalize") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for finalize.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+ nfsft_finalize(plans[i]);
+ nfft_free(plans[i]);
+ plans[i] = 0;
+ }
+ return;
+ }
+ else if (strcmp(cmd,"precompute_x") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for precompute_x.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+ nfsft_precompute_x(plans[i]);
+ }
+ return;
+ }
+ else if (strcmp(cmd,"trafo_direct") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for trafo direct.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+ nfsft_trafo_direct(plans[i]);
+ }
+ return;
+ }
+ else if (strcmp(cmd,"adjoint_direct") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for adjoint direct.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+ nfsft_adjoint_direct(plans[i]);
+ }
+ return;
+ }
+ else if (strcmp(cmd,"get_x") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for get_x.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+ const int m = plans[i]->M_total;
+ plhs[0] = mxCreateDoubleMatrix(2, (unsigned)m, mxREAL);
+ {
+ double *x = mxGetPr(plhs[0]);
+ int j;
+ for (j = 0; j < m; j++)
+ {
+ x[2*j] = PI2*plans[i]->x[2*j];
+ if (x[2*j] < 0.0)
+ x[2*j] += PI2;
+ x[2*j+1] = PI2*plans[i]->x[2*j+1];
+ }
+ }
+ }
+ return;
+ }
+ else if (strcmp(cmd,"get_f") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for get_f.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+ const int m = plans[i]->M_total;
+ plhs[0] = mxCreateDoubleMatrix((unsigned)m, 1, mxCOMPLEX);
+ {
+ double *fr = mxGetPr(plhs[0]), *fi = mxGetPi(plhs[0]);
+ int j;
+ for (j = 0; j < m; j++)
+ {
+ fr[j] = creal(plans[i]->f[j]);
+ fi[j] = cimag(plans[i]->f[j]);
+ }
+ }
+ }
+ return;
+ }
+ else if (strcmp(cmd,"get_f_hat") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for get_f_hat.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+ const int n = plans[i]->N;
+ plhs[0] = mxCreateDoubleMatrix((unsigned)(2*n+1), (unsigned)(n+1), mxCOMPLEX);
+ {
+ double *f_hatr = mxGetPr(plhs[0]), *f_hati = mxGetPi(plhs[0]);
+ int k,j;
+ for (k = 0; k <= n; k++)
+ for (j = -k; j <= k; j++)
+ {
+ f_hatr[k*(2*n+1)+n+j] = creal(plans[i]->f_hat[NFSFT_INDEX(k,j,plans[i])]);
+ f_hati[k*(2*n+1)+n+j] = cimag(plans[i]->f_hat[NFSFT_INDEX(k,j,plans[i])]);
+ }
+ }
+ }
+ return;
+ }
+ else if (strcmp(cmd,"get_f_hat_linear") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for get_f_hat_linear.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+ const int n = plans[i]->N;
+ plhs[0] = mxCreateDoubleMatrix((unsigned)((n+1)*(n+1)), 1, mxCOMPLEX);
+ {
+ double *f_hatr = mxGetPr(plhs[0]), *f_hati = mxGetPi(plhs[0]);
+ int j,k,idx = 0;
+ for (k = 0; k <= n; k++)
+ for (j = -k; j <= k; j++, idx++)
+ {
+ f_hatr[idx] = creal(plans[i]->f_hat[NFSFT_INDEX(k,j,plans[i])]);
+ f_hati[idx] = cimag(plans[i]->f_hat[NFSFT_INDEX(k,j,plans[i])]);
+ }
+ }
+ }
+ return;
+ }
+ else if (strcmp(cmd,"set_x") == 0)
+ {
+ check_nargs(nrhs,3,"Wrong number of arguments for set_x.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+ const int m = plans[i]->M_total;
+ DM(if (!mxIsDouble(prhs[2]) || mxGetNumberOfDimensions(prhs[2]) > 2)
+ mexErrMsgTxt("Input argument x must be a 2 x M double array");)
+ DM(if (mxGetM(prhs[2]) != 2 || mxGetN(prhs[2]) != (unsigned)m)
+ mexErrMsgTxt("Input argument x must have correct size.");)
+ {
+ double *x = mxGetPr(prhs[2]);
+ int j;
+ for (j = 0; j < m; j++)
+ {
+ plans[i]->x[2*j] = ((x[2*j] > PI)?(x[2*j] - PI2):(x[2*j]))/PI2;
+ plans[i]->x[2*j+1] = x[2*j+1]/PI2;
+ }
+ }
+ }
+ return;
+ }
+ else if (strcmp(cmd,"set_f") == 0)
+ {
+ check_nargs(nrhs,3,"Wrong number of arguments for set_f.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+ const int m = plans[i]->M_total;
+ DM(if (mxGetM(prhs[2]) * mxGetN(prhs[2]) != (unsigned)m)
+ mexErrMsgTxt("Input argument f must have correct size.");)
+ {
+ double *fr = mxGetPr(prhs[2]), *fi = mxGetPi(prhs[2]);
+ int j;
+ if (fi)
+ for (j = 0; j < m; j++)
+ plans[i]->f[j] = fr[j] + _Complex_I*fi[j];
+ else
+ for (j = 0; j < m; j++)
+ plans[i]->f[j] = fr[j];
+ }
+ }
+ return;
+ }
+ else if (strcmp(cmd,"set_f_hat") == 0)
+ {
+ check_nargs(nrhs,3,"Wrong number of arguments for set_f_hat.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+ const int n = plans[i]->N;
+ DM(if (!mxIsDouble(prhs[2]))
+ mexErrMsgTxt("Input argument f must be a double array");)
+ DM(if ( mxGetM(prhs[2]) != (unsigned)(2*n+1)
+ || mxGetN(prhs[2]) != (unsigned)(n+1))
+ mexErrMsgTxt("Input argument f must have correct size.");)
+ {
+ double *f_hatr = mxGetPr(prhs[2]), *f_hati = mxGetPi(prhs[2]);
+ int j,k;
+ if (f_hati)
+ for (k = 0; k <= n; k++)
+ for (j = -k; j <= k; j++)
+ plans[i]->f_hat[NFSFT_INDEX(k,j,plans[i])] =
+ f_hatr[k*(2*n+1)+n+j] + _Complex_I*f_hati[k*(2*n+1)+n+j];
+ else
+ for (k = 0; k <= n; k++)
+ for (j = -k; j <= k; j++)
+ plans[i]->f_hat[NFSFT_INDEX(k,j,plans[i])] =
+ f_hatr[k*(2*n+1)+n+j];
+ }
+ }
+ return;
+ }
+ else if (strcmp(cmd,"set_f_hat_linear") == 0)
+ {
+ check_nargs(nrhs,3,"Wrong number of arguments for set_f_hat_linear.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+ const int n = plans[i]->N;
+ DM(if (!mxIsDouble(prhs[2]))
+ mexErrMsgTxt("Input argument f_hat must be a double array");)
+ DM(if (mxGetM(prhs[2]) != (unsigned)((n+1)*(n+1)) || mxGetN(prhs[2]) != 1)
+ mexErrMsgTxt("Input argument f_hat must have correct size.");)
+ {
+ double *f_hatr = mxGetPr(prhs[2]), *f_hati = mxGetPi(prhs[2]);
+ int j, k, idx = 0;
+ if (f_hati)
+ for (k = 0; k <= n; k++)
+ for (j = -k; j <= k; j++, idx++)
+ plans[i]->f_hat[NFSFT_INDEX(k,j,plans[i])] =
+ f_hatr[idx] + _Complex_I*f_hati[idx];
+ else
+ for (k = 0; k <= n; k++)
+ for (j = -k; j <= k; j++, idx++)
+ plans[i]->f_hat[NFSFT_INDEX(k,j,plans[i])] =
+ f_hatr[idx];
+ }
+ }
+ return;
+ }
+ else if (strcmp(cmd,"display") == 0)
+ {
+ check_nargs(nrhs,2,"Wrong number of arguments for set_f_hat_linear.");
+ {
+ int i = nfft_mex_get_int(prhs[1],"nfsft: Input argument plan must be a scalar.");
+ mexPrintf("Plan %d\n",i);
+ mexPrintf(" pointer: %p\n",plans[i]);
+ mexPrintf(" N: %d\n",plans[i]->N);
+ mexPrintf(" N_total: %d\n",plans[i]->N_total);
+ mexPrintf(" M_total: %d\n",plans[i]->M_total);
+ mexPrintf(" x: %p\n",plans[i]->x);
+ mexPrintf(" f: %p\n",plans[i]->f);
+ mexPrintf(" f_hat: %p\n",plans[i]->f_hat);
+ mexPrintf(" flags: %d\n",plans[i]->flags);
+ }
+ return;
+ }
+ else if(strcmp(cmd,"get_num_threads") == 0)
+ {
+ int32_t nthreads = nfft_get_num_threads();
+ plhs[0] = mxCreateNumericMatrix(1, 1, mxINT32_CLASS, mxREAL);
+ *((int32_t *)mxGetData(plhs[0])) = nthreads;
+
+ return;
+ }
+ else
+ mexErrMsgTxt("nfsft: Unknown command.\n");
+}
diff --git a/matlab/nfsft/projection.m b/matlab/nfsft/projection.m
new file mode 100644
index 0000000..2ee592e
--- /dev/null
+++ b/matlab/nfsft/projection.m
@@ -0,0 +1,78 @@
+%PROJECTION Example program: Project a function onto spherical harmonics.
+%
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: projection.m 3776 2012-06-03 13:29:25Z keiner $
+function err = projection()
+disp(sprintf('Number of threads: %d\n', nfsft_get_num_threads()));
+% threshold
+kappa = 1000;
+% polynomial degrees
+emin = 0; emax = 9; Nv = 2.^(emin:emax);
+% saves errors
+err = [Nv',zeros(length(Nv),1)];
+% uniform random nodes
+Me = 1000; xe = [2*pi*rand(1,Me);acos(2*rand(1,Me)-1)]; fe = ff(xe);
+% precomputation
+nfsft_precompute(max(Nv),kappa);
+
+% loop over polynomial degrees
+j = 1;
+for N = Nv
+ % projection using Gauss-Legendre points
+ [x,w] = gl(N);
+ M = size(x,2);
+ plan = nfsft_init_advanced(N,M,NFSFT_NORMALIZED);
+ nfsft_set_x(plan,x);
+ nfsft_precompute_x(plan);
+ f = ff(x).*w;
+ nfsft_set_f(plan,f);
+ nfsft_adjoint(plan);
+ fh = f_hat(nfsft_get_f_hat(plan));
+ nfsft_finalize(plan);
+
+ % evaluation at random nodes
+ plan = nfsft_init_advanced(N,Me,NFSFT_NORMALIZED);
+ nfsft_set_x(plan,xe);
+ nfsft_precompute_x(plan);
+ nfsft_set_f_hat(plan,double(fh));
+ nfsft_trafo(plan);
+ fa = nfsft_get_f(plan)';
+ err(j,2) = norm(fe-fa)/norm(fe);
+ j = j + 1;
+ nfsft_finalize(plan);
+end
+
+% delete precomputed data
+nfsft_forget();
+
+% error plot
+figure;
+loglog(Nv,err(:,2));
+
+end
+
+% the function f
+function y = ff(x)
+n = size(x,2);
+y = ones(1,n);
+j = x(2,:) > pi/2;
+y(j) = 1./sqrt(1 + 3*cos(x(2,j)).^2);
+end
+
diff --git a/matlab/nfsft/simple_test.m b/matlab/nfsft/simple_test.m
new file mode 100644
index 0000000..4a8c1ea
--- /dev/null
+++ b/matlab/nfsft/simple_test.m
@@ -0,0 +1,69 @@
+%SIMPLE_TEST Example program: Basic usage principles
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: simple_test.m 3776 2012-06-03 13:29:25Z keiner $
+
+disp(sprintf('Number of threads: %d\n', nfsft_get_num_threads()));
+
+% maximum degree (bandwidth) of spherical harmonics expansions
+N = 2;
+
+% threshold (affects accuracy, 1000 is the default)
+kappa = 1000;
+
+% precomputation
+nfsft_precompute(N,kappa);
+
+% Gau�-Legendre interpolatory quadrature nodes for N. See gl.m
+[X,W] = gl(N);
+
+% number of nodes
+M = size(X,2);
+
+% Create plan.
+plan = nfsft_init_advanced(N,M,NFSFT_NORMALIZED);
+
+% Set nodes.
+nfsft_set_x(plan,X);
+
+% node-dependent precomputation
+nfsft_precompute_x(plan);
+
+% Fourier coefficients
+fh = f_hat(rand((N+1)*(N+1),1));
+display(fh);
+
+% Set Fourier coefficients.
+nfsft_set_f_hat(plan,double(fh));
+
+% transform
+nfsft_trafo(plan);
+
+% function values
+f = nfsft_get_f(plan);
+display(f);
+
+% adjoint transform, using quadrature weights tor ecover Fourier coefficients
+nfsft_set_f(plan,f.*W');
+nfsft_adjoint(plan);
+
+fh2 = f_hat(nfsft_get_f_hat(plan));
+display(fh2);
+
+nfsft_finalize(plan);
diff --git a/nfft3.pc.in b/nfft3.pc.in
new file mode 100644
index 0000000..3fc7bfe
--- /dev/null
+++ b/nfft3.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+Name: NFFT
+Description: Nonuniform fast Fourier transform library
+Version: @VERSION@
+Requires: fftw3
+Libs: -L${libdir} -lnfft3
+Cflags: -I${includedir}
diff --git a/support/Makefile.am b/support/Makefile.am
new file mode 100644
index 0000000..9a76401
--- /dev/null
+++ b/support/Makefile.am
@@ -0,0 +1,3 @@
+# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+
+EXTRA_DIST = rem.sed toc.sed
\ No newline at end of file
diff --git a/support/Makefile.in b/support/Makefile.in
new file mode 100644
index 0000000..ec175a3
--- /dev/null
+++ b/support/Makefile.in
@@ -0,0 +1,423 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = support
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = rem.sed toc.sed
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu support/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu support/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/support/rem.sed b/support/rem.sed
new file mode 100755
index 0000000..537c823
--- /dev/null
+++ b/support/rem.sed
@@ -0,0 +1,3 @@
+#!/usr/bin/sed -f
+s/<h1><\/h1>//
+s/<h3>[1-9].[1-9].[1-9] <\/h3>//
diff --git a/support/toc.sed b/support/toc.sed
new file mode 100755
index 0000000..d3afb3e
--- /dev/null
+++ b/support/toc.sed
@@ -0,0 +1,5 @@
+#!/usr/bin/sed -f
+s/^ \* \\section \([a-zA-Z0-9_]*\) \(.*\)/<ul><li><a href="#\1">\2<\/a><\/li><\/ul>/w "${srcdir}"/doc/api/html/toc.txt
+s/^ \* \\subsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul>/w "${srcdir}"/doc/api/html/toc.txt
+s/^ \* \\subsubsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul><\/ul>/w "${srcdir}"/doc/api/html/toc.txt
+
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 0000000..ce1da08
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,31 @@
+# $Id: Makefile.am 3456 2010-03-17 19:25:47Z keiner $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+if HAVE_NFSFT
+ CHECK_NFSFT=
+#TODO implements nfsft check
+# CHECK_NFSFT=check_nfsft
+# check_nfsft_SOURCES = check_nfsft.c
+# check_nfsft_LDADD = $(top_builddir)/libnfft3.la
+else
+ CHECK_NFSFT=
+endif
+
+check_LTLIBRARIES = libcheck_nfft.la
+
+libcheck_nfft_la_SOURCES = check_nfft.c check_nfft.h
+
+check_PROGRAMS = check_nfft_1d
+#check_bessel_i0 check_nfft_1d check_nfft_2d $(CHECK_NFSFT)
+
+TESTS = #$(check_PROGRAMS)
+
+#check_bessel_i0_SOURCES = check_bessel_i0.c
+#check_bessel_i0_LDADD = $(top_builddir)/libnfft3.la
+
+check_nfft_1d_SOURCES = check_nfft_1d.c
+check_nfft_1d_LDADD = libcheck_nfft.la $(top_builddir)/libnfft3.la
+
+#check_nfft_2d_SOURCES = check_nfft_2d.c
+#check_nfft_2d_LDADD = $(top_builddir)/libnfft3.la
diff --git a/tests/Makefile.in b/tests/Makefile.in
new file mode 100644
index 0000000..0e015b5
--- /dev/null
+++ b/tests/Makefile.in
@@ -0,0 +1,685 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3456 2010-03-17 19:25:47Z keiner $
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = check_nfft_1d$(EXEEXT)
+TESTS =
+subdir = tests
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+libcheck_nfft_la_LIBADD =
+am_libcheck_nfft_la_OBJECTS = check_nfft.lo
+libcheck_nfft_la_OBJECTS = $(am_libcheck_nfft_la_OBJECTS)
+am_check_nfft_1d_OBJECTS = check_nfft_1d.$(OBJEXT)
+check_nfft_1d_OBJECTS = $(am_check_nfft_1d_OBJECTS)
+check_nfft_1d_DEPENDENCIES = libcheck_nfft.la \
+ $(top_builddir)/libnfft3.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libcheck_nfft_la_SOURCES) $(check_nfft_1d_SOURCES)
+DIST_SOURCES = $(libcheck_nfft_la_SOURCES) $(check_nfft_1d_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = $(am__tty_colors_dummy)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+#TODO implements nfsft check
+# CHECK_NFSFT=check_nfsft
+# check_nfsft_SOURCES = check_nfsft.c
+# check_nfsft_LDADD = $(top_builddir)/libnfft3.la
+ at HAVE_NFSFT_FALSE@CHECK_NFSFT =
+ at HAVE_NFSFT_TRUE@CHECK_NFSFT =
+check_LTLIBRARIES = libcheck_nfft.la
+libcheck_nfft_la_SOURCES = check_nfft.c check_nfft.h
+
+#check_bessel_i0_SOURCES = check_bessel_i0.c
+#check_bessel_i0_LDADD = $(top_builddir)/libnfft3.la
+check_nfft_1d_SOURCES = check_nfft_1d.c
+check_nfft_1d_LDADD = libcheck_nfft.la $(top_builddir)/libnfft3.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkLTLIBRARIES:
+ -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES)
+ @list='$(check_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libcheck_nfft.la: $(libcheck_nfft_la_OBJECTS) $(libcheck_nfft_la_DEPENDENCIES) $(EXTRA_libcheck_nfft_la_DEPENDENCIES)
+ $(LINK) $(libcheck_nfft_la_OBJECTS) $(libcheck_nfft_la_LIBADD) $(LIBS)
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+check_nfft_1d$(EXEEXT): $(check_nfft_1d_OBJECTS) $(check_nfft_1d_DEPENDENCIES) $(EXTRA_check_nfft_1d_DEPENDENCIES)
+ @rm -f check_nfft_1d$(EXEEXT)
+ $(LINK) $(check_nfft_1d_OBJECTS) $(check_nfft_1d_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_nfft.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_nfft_1d.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \
+ clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+ clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \
+ clean-libtool cscopelist ctags distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+#check_nfft_2d_SOURCES = check_nfft_2d.c
+#check_nfft_2d_LDADD = $(top_builddir)/libnfft3.la
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/check_nfft.c b/tests/check_nfft.c
new file mode 100644
index 0000000..f67ca7c
--- /dev/null
+++ b/tests/check_nfft.c
@@ -0,0 +1,283 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
+
+/* Standard headers. */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <complex.h>
+
+#include "nfft3util.h"
+#include "nfft3.h"
+#include "infft.h"
+#include "cycle.h"
+#include "check_nfft.h"
+
+static double trafo_direct_cost_factor = 1.0E-6;
+
+double X(trafo_direct_cost)(X(plan) *p)
+{
+ if (trafo_direct_cost_factor == 0.0)
+ {
+ int M, d, Nd, x = 0;
+ for (d = 1; d <= 4; d++)
+ {
+ for (Nd = 4; Nd < 128; Nd *= 2)
+ {
+ for (M = 4; M <= 128; M *= 2)
+ {
+ X(plan) p;
+ int *N = malloc(d*sizeof(int)), i;
+ for (i = 0; i < d; i++)
+ {
+ N[i] = Nd;
+ }
+ X(init)(&p, d, N, M);
+ for (i = 0; i < M; i++)
+ p.x[i] = K(0.0);
+ if(p.nfft_flags & PRE_ONE_PSI)
+ X(precompute_one_psi)(&p);
+ for (i = 0; i < d*Nd; i++)
+ {
+ p.f_hat[i] = K(0.0) + K(0.0) * I;
+ }
+ {
+ double r;
+ ticks t0, t1;
+ t0 = getticks();
+ X(trafo_direct)(&p);
+ t1 = getticks();
+ r = X(elapsed_seconds)(t1, t0)/M;
+ for (i = 0; i < d; i++)
+ r = r / Nd;
+ trafo_direct_cost_factor += r;
+ printf("%E\n", r);
+ x += 1;
+ }
+ X(finalize)(&p);
+ free(N);
+ }
+ }
+ }
+ trafo_direct_cost_factor = trafo_direct_cost_factor/((double)x);
+ printf("--> %E\n", trafo_direct_cost_factor);
+ }
+
+ {
+ int c = p->M_total, i;
+
+ for (i = 0; i < p->d; i++)
+ c *= p->N[i];
+
+ return trafo_direct_cost_factor * c;
+ }
+}
+
+R X(err_trafo_direct)(X(plan) *p)
+{
+ return K(30.0) * EPSILON;
+}
+
+R X(err_trafo)(X(plan) *p)
+{
+ R m = ((R)p->m), s = K(0.0), K = ((R)p->K);
+ int i;
+ for (i = 0; i < p->d; i++)
+ s = FMAX(s, ((R)p->sigma[i]));
+#if defined(GAUSSIAN)
+ R err = K(4.0) * EXP(-m*KPI*(K(1.0)-K(1.0)/(K(2.0)*s-K(1.0))));
+#elif defined(B_SPLINE)
+ R err = K(4.0) * POW(K(1.0)/(K(2.0)*s-K(1.0)),K(2.0)*m);
+#elif defined(SINC_POWER)
+ R err = (K(1.0)/(m-K(1.0))) * ((K(2.0)/(POW(s,K(2.0)*m))) + POW(s/(K(2.0)*s-K(1.0)),K(2.0)*m));
+#elif defined(KAISER_BESSEL)
+ R err;
+ if (p->nfft_flags | PRE_LIN_PSI)
+ err = EXP(K2PI * m)/(K(8.0) * K * K);
+ else
+ err = K(4.0) * KPI * (SQRT(m) + m) * SQRT(SQRT(K(1.0) - K(1.0)/s)) * EXP(-K2PI*m*SQRT(K(1.0)-K(1.0)/s));
+#else
+ #error Unsupported window function.
+#endif
+
+ return FMAX(K(30.0) * EPSILON, err);
+}
+
+#define MAX_SECONDS 0.1
+
+int X(check_single)(const testcase_delegate_t *testcase, init_delegate_t *init_delegate, trafo_delegate_t *trafo_delegate)
+{
+ int result = EXIT_FAILURE;
+ X(plan) p;
+ int d, j, *N, NN, M;
+ R *x;
+ C *f_hat, *f;
+
+ testcase->setup(testcase, &d, &N, &NN, &M, &x, &f_hat, &f);
+
+ /* Init plan. */
+ init_delegate->init(init_delegate, &p, d, N, M);
+
+ /* Nodes. */
+ for (j = 0; j < M*d; j++)
+ {
+ p.x[j] = x[j];
+ }
+
+ /* Pre-compute Psi, maybe. */
+ if(p.nfft_flags & PRE_ONE_PSI)
+ X(precompute_one_psi)(&p);
+
+ /* Fourier coefficients. */
+ for (j = 0; j < NN; j++)
+ {
+ p.f_hat[j] = f_hat[j];
+ }
+
+ if (trafo_delegate->check)
+ {
+ const char* check = trafo_delegate->check(&p);
+ if (check != 0)
+ {
+ printf(" -> %-4s (","OK");
+ printf("%s", check);
+ printf(")\n");
+ result = EXIT_SUCCESS;
+ goto cleanup;
+ }
+ }
+ else if (trafo_delegate->cost)
+ {
+ const double cost = trafo_delegate->cost(&p);
+ if (cost > MAX_SECONDS)
+ {
+ printf(" -> %-4s (cost too high)\n","OK");
+ result = EXIT_SUCCESS;
+ goto cleanup;
+ }
+ }
+
+ trafo_delegate->trafo(&p);
+
+ /* debug */
+ /*for (j = 0; j < M; j++)
+ fprintf(stderr, "f[%2d] = " FE_ " + " FE_ "I, f[%2d] = " FE_ " + " FE_ "I, err = " FE_ "\n", j,
+ CREAL(f[j]), CIMAG(f[j]), j, CREAL(p.f[j]), CIMAG(p.f[j]), CABS(f[j] - p.f[j]) / CABS(f[j]));*/
+
+ /* Standard NFFT error measure. */
+ {
+ R numerator = K(0.0), denominator = K(0.0);
+ for (j = 0; j < M; j++)
+ numerator = MAX(numerator, CABS(f[j] - p.f[j]));
+ for (j = 0; j < NN; j++)
+ denominator += CABS(p.f_hat[j]);
+ {
+ R err = numerator/denominator;
+ R bound = trafo_delegate->acc(&p);
+ result = IF(err < trafo_delegate->acc(&p), EXIT_SUCCESS, EXIT_FAILURE);
+ printf(" -> %-4s " FE_ " (" FE_ ")\n", IF(result == EXIT_FAILURE, "FAIL", "OK"), err, bound);
+ }
+ }
+
+cleanup:
+ testcase->destroy(testcase, x, f_hat, f);
+ X(finalize)(&p);
+ return result;
+}
+
+int X(check_many)(const int nf, const int ni, const int nt,
+ const testcase_delegate_t **testcases, init_delegate_t **initializers,
+ trafo_delegate_t **trafos)
+{
+ int i, j, k, result = EXIT_SUCCESS, r;
+ for (i = 0; i < nf; i++)
+ for (j = 0; j < ni; j++)
+ for (k = 0; k < nt; k++)
+ {
+ r = X(check_single)(testcases[i], initializers[j], trafos[k]);
+ result = IF(r == EXIT_FAILURE, EXIT_FAILURE, result);
+ }
+ return result;
+}
+
+void X(setup_file)(testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, C **f_hat, C **f)
+{
+ testcase_delegate_file_t *ego = (testcase_delegate_file_t*)ego_;
+ int j;
+ FILE *file = fopen(ego->filename, "r");
+
+ printf("%-25s", ego->filename);
+
+ /* Dimensions. */
+ fscanf(file, "%d", d);
+ /* Bandwidths. */
+ *N = malloc(*d * sizeof(int));
+ for (j = 0; j < *d; j++)
+ fscanf(file, "%d", &((*N)[j]));
+ /* Number of nodes. */
+ fscanf(file, "%d", M);
+
+ printf(" d = %-1d, N = [", *d);
+ {
+ for (j = 0; j < *d; j++)
+ {
+ printf("%s%-4d", IF(j > 0,", ", ""), (*N)[j]);
+ }
+ }
+ printf("],");
+ printf(" M = %-4d,", *M);
+
+ for (j = 0, *NN = 1; j < *d; j++)
+ *NN *= (*N)[j];
+
+ /* Nodes. */
+ *x = malloc(M[0]*d[0]*sizeof(R));
+ for (j = 0; j < M[0]*d[0]; j++)
+ {
+ fscanf(file, FFI, &((*x)[j]));
+ }
+
+ /* Fourier coefficients. */
+ *f_hat = malloc(NN[0]*sizeof(C));
+ for (j = 0; j < NN[0]; j++)
+ {
+ R re, im;
+ fscanf(file, FFI " " FFI, &re, &im);
+ (*f_hat)[j] = re + im * I;
+ }
+
+ /* Reference function values. */
+ *f = malloc(M[0] * sizeof(C));
+ for (j = 0; j < M[0]; j++)
+ {
+ R re, im;
+ fscanf(file, FFI " " FFI, &re, &im);
+ (*f)[j] = re + im * I;
+ }
+
+ fclose(file);
+}
+
+void X(destroy_file)(testcase_delegate_t *ego_, R *x, C *f_hat, C *f)
+{
+ free(x);
+ free(f_hat);
+ free(f);
+}
diff --git a/tests/check_nfft.h b/tests/check_nfft.h
new file mode 100644
index 0000000..15f22ab
--- /dev/null
+++ b/tests/check_nfft.h
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
+
+/* Standard headers. */
+#include <complex.h>
+#include "nfft3.h"
+#include "infft.h"
+
+/* Testcase delegate. */
+typedef struct testcase_delegate_s testcase_delegate_t;
+
+typedef void (*setup_t)(testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, C **f_hat, C **f);
+typedef void (*destroy_t)(testcase_delegate_t *ego_, R *x, C *f_hat, C *f);
+
+struct testcase_delegate_s
+{
+ setup_t setup;
+ destroy_t destroy;
+};
+
+typedef struct testcase_delegate_file_s
+{
+ setup_t setup;
+ destroy_t destroy;
+ const char *filename;
+} testcase_delegate_file_t;
+
+void X(setup_file)(testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, C **f_hat, C **f);
+void X(destroy_file)(testcase_delegate_t *ego_, R *x, C *f_hat, C *f);
+
+/* Init delegate. */
+typedef struct init_delegate_s init_delegate_t;
+typedef void (*init_t)(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+
+struct init_delegate_s
+{
+ const char *name;
+ init_t init;
+ const int m;
+ const unsigned nfft_flags;
+ const unsigned fftw_flags;
+};
+
+/* Trafo delegate. */
+typedef void (*trafo_t)(X(plan) *p);
+typedef double (*cost_t)(X(plan) *p);
+typedef const char* (*check_t)(X(plan) *p);
+typedef R (*acc_t)(X(plan) *p);
+
+typedef struct trafo_delegate_s
+{
+ const char *name;
+ trafo_t trafo;
+ check_t check;
+ cost_t cost;
+ acc_t acc;
+
+} trafo_delegate_t;
+
+double X(trafo_direct_cost)(X(plan) *p);
+
+R X(err_trafo)(X(plan) *p);
+R X(err_trafo_direct)(X(plan) *p);
+
+/* Check single test case.*/
+int X(check_single)(const testcase_delegate_t *testcase,
+ init_delegate_t *init_delegate, trafo_delegate_t *trafo_delegate);
+
+/* Check multiple test cases.*/
+int X(check_many)(const int nf, const int ni, const int nt,
+ const testcase_delegate_t **testcases, init_delegate_t **initializers,
+ trafo_delegate_t **trafos);
+
+/* Size of array. */
+#define SIZE(x) sizeof(x)/sizeof(x[0])
diff --git a/tests/check_nfft_1d.c b/tests/check_nfft_1d.c
new file mode 100644
index 0000000..bc1ab5e
--- /dev/null
+++ b/tests/check_nfft_1d.c
@@ -0,0 +1,203 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
+
+#include "check_nfft.h"
+#include "infft.h"
+
+static const char* filenames[] =
+{
+ "data/nfft_1d_1_1.txt",
+ /*"data/nfft_1d_1_10.txt",
+ "data/nfft_1d_1_20.txt",
+ "data/nfft_1d_1_50.txt",
+ "data/nfft_1d_2_1.txt",
+ "data/nfft_1d_2_10.txt",
+ "data/nfft_1d_2_20.txt",
+ "data/nfft_1d_2_50.txt",
+ "data/nfft_1d_4_1.txt",
+ "data/nfft_1d_4_10.txt",
+ "data/nfft_1d_4_20.txt",
+ "data/nfft_1d_4_50.txt",
+ "data/nfft_1d_10_1.txt",
+ "data/nfft_1d_10_10.txt",
+ "data/nfft_1d_10_20.txt",
+ "data/nfft_1d_10_50.txt",
+ "data/nfft_1d_20_1.txt",
+ "data/nfft_1d_20_10.txt",
+ "data/nfft_1d_20_20.txt",
+ "data/nfft_1d_20_50.txt",
+ "data/nfft_1d_50_1.txt",
+ "data/nfft_1d_50_10.txt",
+ "data/nfft_1d_50_20.txt",
+ "data/nfft_1d_50_50.txt",*/
+};
+
+static const testcase_delegate_file_t nfft_1d_1_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_1_1.txt"};
+static const testcase_delegate_file_t nfft_1d_1_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_1_10.txt"};
+static const testcase_delegate_file_t nfft_1d_1_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_1_20.txt"};
+static const testcase_delegate_file_t nfft_1d_1_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_1_50.txt"};
+static const testcase_delegate_file_t nfft_1d_2_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_2_1.txt"};
+static const testcase_delegate_file_t nfft_1d_2_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_2_10.txt"};
+static const testcase_delegate_file_t nfft_1d_2_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_2_20.txt"};
+static const testcase_delegate_file_t nfft_1d_2_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_2_50.txt"};
+static const testcase_delegate_file_t nfft_1d_4_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_4_1.txt"};
+static const testcase_delegate_file_t nfft_1d_4_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_4_10.txt"};
+static const testcase_delegate_file_t nfft_1d_4_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_4_20.txt"};
+static const testcase_delegate_file_t nfft_1d_4_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_4_50.txt"};
+static const testcase_delegate_file_t nfft_1d_10_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_10_1.txt"};
+static const testcase_delegate_file_t nfft_1d_10_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_10_10.txt"};
+static const testcase_delegate_file_t nfft_1d_10_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_10_20.txt"};
+static const testcase_delegate_file_t nfft_1d_10_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_10_50.txt"};
+static const testcase_delegate_file_t nfft_1d_20_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_20_1.txt"};
+static const testcase_delegate_file_t nfft_1d_20_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_20_10.txt"};
+static const testcase_delegate_file_t nfft_1d_20_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_20_20.txt"};
+static const testcase_delegate_file_t nfft_1d_20_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_20_50.txt"};
+static const testcase_delegate_file_t nfft_1d_50_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_50_1.txt"};
+static const testcase_delegate_file_t nfft_1d_50_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_50_10.txt"};
+static const testcase_delegate_file_t nfft_1d_50_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_50_20.txt"};
+static const testcase_delegate_file_t nfft_1d_50_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_50_50.txt"};
+static const testcase_delegate_file_t *testcases[] = {
+ &nfft_1d_1_1, &nfft_1d_1_10, &nfft_1d_1_20, &nfft_1d_1_50,
+ &nfft_1d_2_1, &nfft_1d_2_10, &nfft_1d_2_20, &nfft_1d_2_50,
+ &nfft_1d_4_1, &nfft_1d_4_10, &nfft_1d_4_20, &nfft_1d_4_50,
+ &nfft_1d_10_1, &nfft_1d_10_10, &nfft_1d_10_20, &nfft_1d_10_50,
+ &nfft_1d_20_1, &nfft_1d_20_10, &nfft_1d_20_20, &nfft_1d_20_50,
+ &nfft_1d_50_1, &nfft_1d_50_10, &nfft_1d_50_20, &nfft_1d_50_50,
+};
+
+/* Initializers. */
+static void init_1d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+ X(init_1d)(p, N[0], M);
+}
+
+static void init_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+ X(init)(p, d, N, M);
+}
+
+static void init_advanced_pre_psi_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+ int *n = malloc(d*sizeof(int));
+ int i;
+ for (i = 0; i < d; i++)
+ n[i] = 2*X(next_power_of_2)(N[i]);
+ X(init_guru)(p, d, N, M, n, ego->m, ego->nfft_flags, ego->fftw_flags);
+ free(n);
+}
+
+/*static void init_advanced_pre_full_psi_(X(plan) *p, const int d, const int *N, const int M)
+{
+ X(init_guru)(p, d, N, M, PRE_PHI_HUT | PRE_FULL_PSI | MALLOC_X | MALLOC_F | MALLOC_F_HAT | FFTW_INIT | FFT_OUT_OF_PLACE, 0U);
+}*/
+
+#define DEFAULT_NFFT_FLAGS MALLOC_X | MALLOC_F | MALLOC_F_HAT | FFTW_INIT | FFT_OUT_OF_PLACE
+#define DEFAULT_FFTW_FLAGS FFTW_ESTIMATE | FFTW_DESTROY_INPUT
+
+static init_delegate_t init_1d = {"init_1d", init_1d_};
+static init_delegate_t init = {"init", init_};
+static init_delegate_t init_advanced_pre_psi = {"init_guru (PRE PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+static init_delegate_t init_advanced_pre_full_psi = {"init_guru (PRE FULL PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_FULL_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+static init_delegate_t init_advanced_pre_lin_psi = {"init_guru (PRE LIN PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_LIN_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+#if defined(GAUSSIAN)
+static init_delegate_t init_advanced_pre_fg_psi = {"init_guru (PRE FG PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | FG_PSI | PRE_FG_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+#endif
+/* Transformations. */
+static double trafo_direct_cost_factor = 1.0E-6;
+
+static double trafo_direct_cost(X(plan) *p)
+{
+ if (trafo_direct_cost_factor == 0.0)
+ {
+ int M, d, Nd, x = 0;
+ for (d = 1; d <= 4; d++)
+ {
+ for (Nd = 4; Nd < 128; Nd *= 2)
+ {
+ for (M = 4; M <= 128; M *= 2)
+ {
+ X(plan) p;
+ int *N = malloc(d*sizeof(int)), i;
+ for (i = 0; i < d; i++)
+ {
+ N[i] = Nd;
+ }
+ X(init)(&p, d, N, M);
+ for (i = 0; i < M; i++)
+ p.x[i] = K(0.0);
+ if(p.nfft_flags & PRE_ONE_PSI)
+ X(precompute_one_psi)(&p);
+ for (i = 0; i < d*Nd; i++)
+ {
+ p.f_hat[i] = K(0.0) + K(0.0) * I;
+ }
+ {
+ double r;
+ ticks t0, t1;
+ t0 = getticks();
+ X(trafo_direct)(&p);
+ t1 = getticks();
+ r = X(elapsed_seconds)(t1, t0)/M;
+ for (i = 0; i < d; i++)
+ r = r / Nd;
+ trafo_direct_cost_factor += r;
+ printf("%E\n", r);
+ x += 1;
+ }
+ X(finalize)(&p);
+ free(N);
+ }
+ }
+ }
+ trafo_direct_cost_factor = trafo_direct_cost_factor/((double)x);
+ printf("--> %E\n", trafo_direct_cost_factor);
+ }
+
+ {
+ int c = p->M_total, i;
+
+ for (i = 0; i < p->d; i++)
+ c *= p->N[i];
+
+ return trafo_direct_cost_factor * c;
+ }
+}
+
+static trafo_delegate_t trafo_direct = {"trafo_direct", X(trafo_direct), 0, X(trafo_direct_cost), X(err_trafo_direct)};
+static trafo_delegate_t trafo = {"trafo", X(trafo), X(check), 0, X(err_trafo)};
+
+/* Delegates. */
+static const init_delegate_t* initializers[] = {
+ &init_1d,
+ &init,
+ &init_advanced_pre_psi,
+ &init_advanced_pre_full_psi,
+ &init_advanced_pre_lin_psi,
+#if defined(GAUSSIAN)
+ &init_advanced_pre_fg_psi,
+#endif
+};
+static const trafo_delegate_t* trafos[] = {&trafo_direct, &trafo};
+
+int main(void)
+{
+ return X(check_many)(SIZE(testcases), SIZE(initializers), SIZE(trafos),
+ testcases, initializers, trafos);
+}
diff --git a/util/Makefile.am b/util/Makefile.am
new file mode 100644
index 0000000..c92f3d5
--- /dev/null
+++ b/util/Makefile.am
@@ -0,0 +1,21 @@
+# $Id: Makefile.am 3896 2012-10-10 12:19:26Z tovo $
+
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/3rdparty/cstripack
+
+if HAVE_THREADS
+ LIBUTIL_THREADS_LA = libutil_threads.la
+else
+ LIBUTIL_THREADS_LA =
+endif
+
+noinst_LTLIBRARIES = libutil.la $(LIBUTIL_THREADS_LA)
+
+libutil_la_SOURCES = util.c
+
+if HAVE_THREADS
+ libutil_threads_la_SOURCES = util.c
+if HAVE_OPENMP
+ libutil_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
+
diff --git a/util/Makefile.in b/util/Makefile.in
new file mode 100644
index 0000000..4fd1750
--- /dev/null
+++ b/util/Makefile.in
@@ -0,0 +1,580 @@
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# $Id: Makefile.am 3896 2012-10-10 12:19:26Z tovo $
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = util
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/config/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_cc_maxopt.m4 \
+ $(top_srcdir)/m4/ax_check_compiler_flags.m4 \
+ $(top_srcdir)/m4/ax_check_dir.m4 \
+ $(top_srcdir)/m4/ax_compiler_vendor.m4 \
+ $(top_srcdir)/m4/ax_gcc_archflag.m4 \
+ $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
+ $(top_srcdir)/m4/ax_lib_fftw3.m4 \
+ $(top_srcdir)/m4/ax_nfft_module.m4 \
+ $(top_srcdir)/m4/ax_openmp.m4 \
+ $(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libutil_la_LIBADD =
+am_libutil_la_OBJECTS = util.lo
+libutil_la_OBJECTS = $(am_libutil_la_OBJECTS)
+libutil_threads_la_LIBADD =
+am__libutil_threads_la_SOURCES_DIST = util.c
+ at HAVE_THREADS_TRUE@am_libutil_threads_la_OBJECTS = \
+ at HAVE_THREADS_TRUE@ libutil_threads_la-util.lo
+libutil_threads_la_OBJECTS = $(am_libutil_threads_la_OBJECTS)
+libutil_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libutil_threads_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+ at HAVE_THREADS_TRUE@am_libutil_threads_la_rpath =
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libutil_la_SOURCES) $(libutil_threads_la_SOURCES)
+DIST_SOURCES = $(libutil_la_SOURCES) \
+ $(am__libutil_threads_la_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_FPT = @HAVE_FPT@
+HAVE_MRI = @HAVE_MRI@
+HAVE_NFCT = @HAVE_NFCT@
+HAVE_NFSFT = @HAVE_NFSFT@
+HAVE_NFSOFT = @HAVE_NFSOFT@
+HAVE_NFST = @HAVE_NFST@
+HAVE_NNFFT = @HAVE_NNFFT@
+HAVE_NSFFT = @HAVE_NSFFT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENMP_CFLAGS = @OPENMP_CFLAGS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PRTDIAG = @PRTDIAG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TICKS_PER_SECOND = @TICKS_PER_SECOND@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fftw3_LDFLAGS = @fftw3_LDFLAGS@
+fftw3_LIBS = @fftw3_LIBS@
+fftw3_threads_LIBS = @fftw3_threads_LIBS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+matlab_CPPFLAGS = @matlab_CPPFLAGS@
+matlab_LDFLAGS = @matlab_LDFLAGS@
+matlab_LIBS = @matlab_LIBS@
+matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
+matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
+matlab_mexext = @matlab_mexext@
+matlab_prog_mexext = @matlab_prog_mexext@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/3rdparty/cstripack
+ at HAVE_THREADS_FALSE@LIBUTIL_THREADS_LA =
+ at HAVE_THREADS_TRUE@LIBUTIL_THREADS_LA = libutil_threads.la
+noinst_LTLIBRARIES = libutil.la $(LIBUTIL_THREADS_LA)
+libutil_la_SOURCES = util.c
+ at HAVE_THREADS_TRUE@libutil_threads_la_SOURCES = util.c
+ at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libutil_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu util/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu util/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+libutil.la: $(libutil_la_OBJECTS) $(libutil_la_DEPENDENCIES) $(EXTRA_libutil_la_DEPENDENCIES)
+ $(LINK) $(libutil_la_OBJECTS) $(libutil_la_LIBADD) $(LIBS)
+libutil_threads.la: $(libutil_threads_la_OBJECTS) $(libutil_threads_la_DEPENDENCIES) $(EXTRA_libutil_threads_la_DEPENDENCIES)
+ $(libutil_threads_la_LINK) $(am_libutil_threads_la_rpath) $(libutil_threads_la_OBJECTS) $(libutil_threads_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libutil_threads_la-util.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/util.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+libutil_threads_la-util.lo: util.c
+ at am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_threads_la_CFLAGS) $(CFLAGS) -MT libutil_threads_la-util.lo -MD -MP -MF $(DEPDIR)/libutil_threads_la-util.Tpo -c -o libutil_threads_la-util.lo `test -f 'util.c' || echo '$(srcdir)/'`util.c
+ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libutil_threads_la-util.Tpo $(DEPDIR)/libutil_threads_la-util.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='libutil_threads_la-util.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_threads_la_CFLAGS) $(CFLAGS) -c -o libutil_threads_la-util.lo `test -f 'util.c' || echo '$(srcdir)/'`util.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/util/util.c b/util/util.c
new file mode 100644
index 0000000..e517788
--- /dev/null
+++ b/util/util.c
@@ -0,0 +1,1488 @@
+/*
+ * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3896 2012-10-10 12:19:26Z tovo $ */
+
+/** Sources for utilities.
+ * functions for vectors, window functions, ...
+ * (c) if not stated otherwise: Daniel Potts, Stefan Kunis
+ */
+#include "config.h"
+
+#include "infft.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <float.h>
+#include <sys/time.h>
+#include "cstripack.h"
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+#include "nfft3.h"
+#include "nfft3util.h"
+#include "infft.h"
+
+double nfft_elapsed_seconds(ticks t1, ticks t0)
+{
+ UNUSED(t1);
+ UNUSED(t0);
+ return elapsed(t1,t0) / TICKS_PER_SECOND;
+}
+
+/** Computes integer /f$\prod_{t=0}^{d-1} v_t/f$.
+ */
+int nfft_prod_int(int *vec, int d)
+{
+ int t, prod;
+
+ prod=1;
+ for(t=0; t<d; t++)
+ prod *= vec[t];
+
+ return prod;
+}
+
+/** Computes integer /f$\prod_{t=0}^{d-1} v_t-a/f$.
+ */
+int nfst_prod_minus_a_int(int *vec, int a, int d)
+{
+ int t, prod;
+
+ prod=1;
+ for(t=0; t<d; t++)
+ prod *= vec[t]-a;
+
+ return prod;
+}
+
+/** Computes /f$\sum_{t=0}^{d-1} i_t \prod_{t'=t+1}^{d-1} N_{t'}/f$.
+ */
+int nfft_plain_loop(int *idx,int *N,int d)
+{
+ int t,sum;
+
+ sum = idx[0];
+ for (t = 1; t < d; t++)
+ sum = sum * N[t] + idx[t];
+
+ return sum;
+}
+
+/** Computes double /f$\prod_{t=0}^{d-1} v_t/f$.
+ */
+double nfft_prod_real(double *vec,int d)
+{
+ int t;
+ double prod;
+
+ prod=1.0;
+ for(t=0; t<d; t++)
+ prod*=vec[t];
+
+ return prod;
+}
+
+static void bspline_help(int k, double x, double *scratch, int j, int ug,
+ int og, int r)
+{
+ int i; /* row index of the de Boor scheme */
+ int idx; /* index in scratch */
+ double a; /* alpha of the de Boor scheme */
+
+ /* computation of one column */
+ for (i = og + r - k + 1, idx = og; idx >= ug; i--, idx--)
+ {
+ a = ((R)(x - i)) / ((R)(k - j));
+ scratch[idx] = (1 - a) * scratch[idx-1] + a * scratch[idx];
+ }
+} /* bspline_help */
+
+/** Computes \f$M_{k,0}\left(x\right)\f$
+ * scratch is used for de Boor's scheme
+ */
+double nfft_bspline(int k, double x, double *scratch)
+{
+ double result_value; /**< M_{k,0}\left(x\right) */
+ int r; /**< \f$x \in {\rm supp}(M_{0,r}) \f$ */
+ int g1,g2; /**< boundaries */
+ int j,idx,ug,og; /**< indices */
+ double a; /**< alpha of the de Boor scheme */
+
+ result_value=0.0;
+ if(0<x && x<k)
+ {
+ /* using symmetry around k/2 */
+ if((k-x)<x) x=k-x;
+
+ r=(int)(ceil(x)-1.0);
+
+ for(idx=0; idx<k; idx++)
+ scratch[idx]=0.0;
+
+ scratch[k-r-1]=1.0;
+
+ /* bounds of the algorithm */
+ g1 = r;
+ g2 = k - 1 - r;
+ ug = g2;
+
+ /* g1<=g2 holds */
+
+ for(j=1, og=g2+1; j<=g1; j++, og++)
+ {
+ a = (x - r + k - 1 - og)/(k - j);
+ scratch[og] = (1 - a) * scratch[og-1];
+ bspline_help(k,x,scratch,j,ug+1,og-1,r);
+ a = (x - r + k - 1 - ug)/(k - j);
+ scratch[ug] = a * scratch[ug];
+ }
+ for(og-- ; j<=g2; j++)
+ {
+ bspline_help(k,x,scratch,j,ug+1,og,r);
+ a = (x - r + k - 1 - ug)/(k - j);
+ scratch[ug] = a * scratch[ug];
+ }
+ for( ; j<k; j++)
+ {
+ ug++;
+ bspline_help(k,x,scratch,j,ug,og,r);
+ }
+ result_value = scratch[k-1];
+ }
+ return(result_value);
+} /* bspline */
+
+/** Computes the inner/dot product \f$x^H x\f$.
+ */
+double nfft_dot_complex(double _Complex *x, int n)
+{
+ int k;
+ double dot;
+
+ for(k=0,dot=0; k<n; k++)
+ dot+=conj(x[k])*x[k];
+
+ return dot;
+}
+
+/** Computes the inner/dot product \f$x^H x\f$.
+ */
+double nfft_dot_double(double *x, int n)
+{
+ int k;
+ double dot;
+
+ for(k=0,dot=0; k<n; k++)
+ dot+=x[k]*x[k];
+
+ return dot;
+}
+
+
+/** Computes the weighted inner/dot product \f$x^H (w \odot x)\f$.
+ */
+double nfft_dot_w_complex(double _Complex *x, double *w, int n)
+{
+ int k;
+ double dot;
+
+ for(k=0,dot=0.0; k<n; k++)
+ dot+=w[k]*conj(x[k])*x[k];
+
+ return dot;
+}
+
+/** Computes the weighted inner/dot product \f$x^H (w \odot x)\f$.
+ */
+double nfft_dot_w_double(double *x, double *w, int n)
+{
+ int k;
+ double dot;
+
+ for(k=0,dot=0.0; k<n; k++)
+ dot+=w[k]*x[k]*x[k];
+
+ return dot;
+}
+
+
+/** Computes the weighted inner/dot product
+ \f$x^H (w\odot w2\odot w2 \odot x)\f$.
+ */
+double nfft_dot_w_w2_complex(double _Complex *x, double *w, double *w2, int n)
+{
+ int k;
+ double dot;
+
+ for(k=0,dot=0.0; k<n; k++)
+ dot+=w[k]*w2[k]*w2[k]*conj(x[k])*x[k];
+
+ return dot;
+}
+
+/** Computes the weighted inner/dot product
+ \f$x^H (w2\odot w2 \odot x)\f$.
+ */
+double nfft_dot_w2_complex(double _Complex *x, double *w2, int n)
+{
+ int k;
+ double dot;
+
+ for(k=0,dot=0.0; k<n; k++)
+ dot+=w2[k]*w2[k]*conj(x[k])*x[k];
+
+ return dot;
+}
+
+/** Copies \f$x \leftarrow y\f$.
+ */
+void nfft_cp_complex(double _Complex *x, double _Complex *y, int n)
+{
+ int k;
+
+ for(k=0;k<n;k++)
+ x[k]=y[k];
+}
+
+/** Copies \f$x \leftarrow y\f$.
+ */
+void nfft_cp_double(double *x, double *y, int n)
+{
+ int k;
+
+ for(k=0;k<n;k++)
+ x[k]=y[k];
+}
+
+/** Copies \f$x \leftarrow a y\f$.
+ */
+void nfft_cp_a_complex(double _Complex *x, double a, double _Complex *y, int n)
+{
+ int k;
+
+ for(k=0;k<n;k++)
+ x[k]=a*y[k];
+}
+
+/** Copies \f$x \leftarrow a y\f$.
+ */
+void nfft_cp_a_double(double *x, double a, double *y, int n)
+{
+ int k;
+
+ for(k=0;k<n;k++)
+ x[k]=a*y[k];
+}
+
+
+/** Copies \f$x \leftarrow w\odot y\f$.
+ */
+void nfft_cp_w_complex(double _Complex *x, double *w, double _Complex *y, int n)
+{
+ int k;
+
+ for(k=0;k<n;k++)
+ x[k]=w[k]*y[k];
+}
+
+/** Copies \f$x \leftarrow w\odot y\f$.
+ */
+void nfft_cp_w_double(double *x, double *w, double *y, int n)
+{
+ int k;
+
+ for(k=0;k<n;k++)
+ x[k]=w[k]*y[k];
+}
+
+
+
+/** Updates \f$x \leftarrow a x + y\f$.
+ */
+void nfft_upd_axpy_complex(double _Complex *x, double a, double _Complex *y, int n)
+{
+ int k;
+
+ for(k=0;k<n;k++)
+ x[k]=a*x[k]+y[k];
+}
+
+/** Updates \f$x \leftarrow a x + y\f$.
+ */
+void nfft_upd_axpy_double(double *x, double a, double *y, int n)
+{
+ int k;
+
+ for(k=0;k<n;k++)
+ x[k]=a*x[k]+y[k];
+}
+
+
+/** Updates \f$x \leftarrow x + a y\f$.
+ */
+void nfft_upd_xpay_complex(double _Complex *x, double a, double _Complex *y, int n)
+{
+ int k;
+
+ for(k=0;k<n;k++)
+ x[k]+=a*y[k];
+}
+
+/** Updates \f$x \leftarrow x + a y\f$.
+ */
+void nfft_upd_xpay_double(double *x, double a, double *y, int n)
+{
+ int k;
+
+ for(k=0;k<n;k++)
+ x[k]+=a*y[k];
+}
+
+
+
+/** Updates \f$x \leftarrow a x + b y\f$.
+ */
+void nfft_upd_axpby_complex(double _Complex *x, double a, double _Complex *y, double b, int n)
+{
+ int k;
+
+ for(k=0;k<n;k++)
+ x[k]=a*x[k]+b*y[k];
+}
+
+/** Updates \f$x \leftarrow a x + b y\f$.
+ */
+void nfft_upd_axpby_double(double *x, double a, double *y, double b, int n)
+{
+ int k;
+
+ for(k=0;k<n;k++)
+ x[k]=a*x[k]+b*y[k];
+}
+
+
+/** Updates \f$x \leftarrow x + a w\odot y\f$.
+ */
+void nfft_upd_xpawy_complex(double _Complex *x, double a, double *w, double _Complex *y, int n)
+{
+ int k;
+
+ for(k=0;k<n;k++)
+ x[k]+=a*w[k]*y[k];
+}
+
+/** Updates \f$x \leftarrow x + a w\odot y\f$.
+ */
+void nfft_upd_xpawy_double(double *x, double a, double *w, double *y, int n)
+{
+ int k;
+
+ for(k=0;k<n;k++)
+ x[k]+=a*w[k]*y[k];
+}
+
+
+
+/** Updates \f$x \leftarrow a x + w\odot y\f$.
+ */
+void nfft_upd_axpwy_complex(double _Complex *x, double a, double *w, double _Complex *y, int n)
+{
+ int k;
+
+ for(k=0;k<n;k++)
+ x[k]=a*x[k]+w[k]*y[k];
+}
+
+/** Updates \f$x \leftarrow a x + w\odot y\f$.
+ */
+void nfft_upd_axpwy_double(double *x, double a, double *w, double *y, int n)
+{
+ int k;
+
+ for(k=0;k<n;k++)
+ x[k]=a*x[k]+w[k]*y[k];
+}
+
+
+void nfft_fftshift_complex(double _Complex *x, int d, int* N)
+{
+ int d_pre, d_act, d_post;
+ int N_pre, N_act, N_post;
+ int k_pre, k_act, k_post;
+ int k,k_swap;
+
+ double _Complex x_swap;
+
+ for(d_act=0;d_act<d;d_act++)
+ {
+ for(d_pre=0, N_pre=1;d_pre<d_act;d_pre++)
+ N_pre*=N[d_pre];
+
+ N_act=N[d_act];
+
+ for(d_post=d_act+1, N_post=1;d_post<d;d_post++)
+ N_post*=N[d_post];
+
+ for(k_pre=0;k_pre<N_pre;k_pre++)
+ for(k_act=0;k_act<N_act/2;k_act++)
+ for(k_post=0;k_post<N_post;k_post++)
+ {
+ k=(k_pre*N_act+k_act)*N_post+k_post;
+ k_swap=(k_pre*N_act+k_act+N_act/2)*N_post+k_post;
+
+ x_swap=x[k];
+ x[k]=x[k_swap];
+ x[k_swap]=x_swap;
+ }
+ }
+}
+
+/** vector print
+ */
+void nfft_vpr_int(int *x, int n, char *text)
+{
+ int k;
+
+ if(text!=NULL)
+ {
+ printf ("\n %s, adr=%p\n", text, (void*)x);
+ for (k=0; k<n; k++)
+ {
+ if (k%8==0)
+ printf("%6d.\t", k);
+ printf("%d,", x[k]);
+ if (k%8==7)
+ printf("\n");
+ }
+ if (n%8!=0)
+ printf("\n");
+ }
+ else
+ for (k=0; k<n; k++)
+ printf("%d,\n", x[k]);
+ fflush(stdout);
+}
+
+/** Print real vector to standard output. */
+void X(vpr_double)(R *x, const int n, const char *text)
+{
+ int k;
+
+ if (x == NULL)
+ {
+ printf("null pointer\n");
+ fflush(stdout);
+ exit(-1);
+ }
+
+ if (text != NULL)
+ {
+ printf ("\n %s, adr=%p\n", text, (void*)x);
+
+ for (k = 0; k < n; k++)
+ {
+ if (k%8 == 0)
+ printf("%6d.\t", k);
+
+ printf("%+.1" FE ",", x[k]);
+
+ if (k%8 == 7)
+ printf("\n");
+ }
+
+ if (n%8 != 0)
+ printf("\n");
+ }
+ else
+ for (k = 0; k < n; k++)
+ printf("%+" FE ",\n", x[k]);
+
+ fflush(stdout);
+}
+
+/** Print complex vector to standard output. */
+void X(vpr_complex)(C *x, const int n, const char *text)
+{
+ int k;
+
+ if(text != NULL)
+ {
+ printf("\n %s, adr=%p\n", text, (void*)x);
+ for (k = 0; k < n; k++)
+ {
+ if (k%4 == 0)
+ printf("%6d.\t", k);
+
+ printf("%+.1" FE "%+.1" FE "i,", CREAL(x[k]), CIMAG(x[k]));
+
+ if (k%4==3)
+ printf("\n");
+ }
+ if (n%4!=0)
+ printf("\n");
+ }
+ else
+ for (k = 0; k < n; k++)
+ printf("%+" FE "%+" FE "i,\n", CREAL(x[k]), CIMAG(x[k]));
+
+ fflush(stdout);
+}
+
+void X(vrand_unit_complex)(C *x, const int n)
+{
+ int k;
+
+ for (k = 0; k < n; k++)
+ x[k] = nfft_drand48() + II*nfft_drand48();
+}
+
+void X(vrand_shifted_unit_double)(R *x, const int n)
+{
+ int k;
+
+ for (k = 0; k < n; k++)
+ x[k] = nfft_drand48() - K(0.5);
+}
+
+/** Compute non periodic voronoi weights for ordered nodes x_j */
+void X(voronoi_weights_1d)(R *w, R *x, const int M)
+{
+ int j;
+
+ w[0] = (x[1]-x[0])/K(2.0);
+
+ for(j = 1; j < M-1; j++)
+ w[j] = (x[j+1]-x[j-1])/K(2.0);
+
+ w[M-1] = (x[M-1]-x[M-2])/K(2.0);
+}
+
+void nfft_voronoi_weights_S2(double *w, double *xi, int M)
+{
+ double *x;
+ double *y;
+ double *z;
+ int j;
+ int k;
+ int el;
+ int Mlocal = M;
+ int lnew;
+ int ier;
+ int *list;
+ int *lptr;
+ int *lend;
+ int *near;
+ int *next;
+ double *dist;
+ int *ltri;
+ int *listc;
+ int nb;
+ double *xc;
+ double *yc;
+ double *zc;
+ double *rc;
+ double *vr;
+ int lp;
+ int lpl;
+ int kv;
+ double a;
+
+ /* Allocate memory for auxilliary arrays. */
+ x = (double*)nfft_malloc(M * sizeof(double));
+ y = (double*)nfft_malloc(M * sizeof(double));
+ z = (double*)nfft_malloc(M * sizeof(double));
+
+ list = (int*)nfft_malloc((6*M-12+1)*sizeof(int));
+ lptr = (int*)nfft_malloc((6*M-12+1)*sizeof(int));
+ lend = (int*)nfft_malloc((M+1)*sizeof(int));
+ near = (int*)nfft_malloc((M+1)*sizeof(int));
+ next = (int*)nfft_malloc((M+1)*sizeof(int));
+ dist = (double*)nfft_malloc((M+1)*sizeof(double));
+ ltri = (int*)nfft_malloc((6*M+1)*sizeof(int));
+ listc = (int*)nfft_malloc((6*M-12+1)*sizeof(int));
+ xc = (double*)nfft_malloc((2*M-4+1)*sizeof(double));
+ yc = (double*)nfft_malloc((2*M-4+1)*sizeof(double));
+ zc = (double*)nfft_malloc((2*M-4+1)*sizeof(double));
+ rc = (double*)nfft_malloc((2*M-4+1)*sizeof(double));
+ vr = (double*)nfft_malloc(3*(2*M-4+1)*sizeof(double));
+
+ /* Convert from spherical Coordinates in [0,1/2]x[-1/2,1/2) to Cartesian
+ * coordinates. */
+ for (k = 0; k < M; k++)
+ {
+ x[k] = sin(2.0*PI*xi[2*k+1])*cos(2.0*PI*xi[2*k]);
+ y[k] = sin(2.0*PI*xi[2*k+1])*sin(2.0*PI*xi[2*k]);
+ z[k] = cos(2.0*PI*xi[2*k+1]);
+ }
+
+ /* Generate Delaunay triangulation. */
+ trmesh_(&Mlocal, x, y, z, list, lptr, lend, &lnew, near, next, dist, &ier);
+
+ /* Check error flag. */
+ if (ier == 0)
+ {
+ /* Get Voronoi vertices. */
+ crlist_(&Mlocal, &Mlocal, x, y, z, list, lend, lptr, &lnew, ltri, listc, &nb, xc,
+ yc, zc, rc, &ier);
+
+ if (ier == 0)
+ {
+ /* Calcuate sizes of Voronoi regions. */
+ for (k = 0; k < M; k++)
+ {
+ /* Get last neighbour index. */
+ lpl = lend[k];
+ lp = lpl;
+
+ j = 0;
+ vr[3*j] = x[k];
+ vr[3*j+1] = y[k];
+ vr[3*j+2] = z[k];
+
+ do
+ {
+ j++;
+ /* Get next neighbour. */
+ lp = lptr[lp-1];
+ kv = listc[lp-1];
+ vr[3*j] = xc[kv-1];
+ vr[3*j+1] = yc[kv-1];
+ vr[3*j+2] = zc[kv-1];
+ /* fprintf(stderr, "lp = %ld\t", lp); */
+ } while (lp != lpl);
+
+ a = 0;
+ for (el = 0; el < j; el++)
+ {
+ a += areas_(vr, &vr[3*(el+1)],&vr[3*(((el+1)%j)+1)]);
+ }
+
+ w[k] = a;
+ }
+ }
+ }
+
+ /* Deallocate memory. */
+ nfft_free(x);
+ nfft_free(y);
+ nfft_free(z);
+
+ nfft_free(list);
+ nfft_free(lptr);
+ nfft_free(lend);
+ nfft_free(near);
+ nfft_free(next);
+ nfft_free(dist);
+ nfft_free(ltri);
+ nfft_free(listc);
+ nfft_free(xc);
+ nfft_free(yc);
+ nfft_free(zc);
+ nfft_free(rc);
+ nfft_free(vr);
+}
+
+/**
+ * Compute damping factor for modified Fejer kernel:
+ * /f$\frac{2}{N}\left(1-\frac{\left|2k+1\right|}{N}\right)/f$
+ */
+R X(modified_fejer)(const int N, const int kk)
+{
+ return (K(2.0)/((R)(N*N))*(K(1.0)-FABS(K(2.0)*kk+K(1.0))/((R)N)));
+}
+
+/** Compute damping factor for modified Jackson kernel. */
+R X(modified_jackson2)(const int N, const int kk)
+{
+ int kj;
+ const R n=(N/K(2.0)+K(1.0))/K(2.0);
+ R result, k;
+
+ for (result = K(0.0), kj = kk; kj <= kk+1; kj++)
+ {
+ k = ABS(kj);
+
+ if(k/n < K(1.0))
+ result += K(1.0) - (K(3.0)*k + K(6.0)*n*POW(k,K(2.0))
+ - K(3.0)*POW(k,K(3.0)))/(K(2.0)*n*(K(2.0)*POW(n,K(2.0))+K(1.0)));
+ else
+ result+= (K(2.0)*n-k)*(POW(2*n-k,K(2.0))-K(1.0))/(K(2.0)
+ *n*(K(2.0)*POW(n,K(2.0))+K(1.0)));
+ }
+
+ return result;
+}
+
+/** Compute damping factor for modified generalised Jackson kernel. */
+R X(modified_jackson4)(const int N, const int kk)
+{
+ int kj;
+ const R n = (N/K(2.0)+K(3.0))/K(4.0), normalisation = (K(2416.0)*POW(n,K(7.0))
+ + K(1120.0)*POW(n,K(5.0)) + K(784.0)*POW(n,K(3.0)) + K(720.0)*n);
+ R result, k;
+
+ for (result = K(0.0), kj = kk; kj <= kk + 1; kj++)
+ {
+ k = ABS(kj);
+
+ if (k/n < K(1.0))
+ result += K(1.0) - (K(1260.0)*k + (K(1680.0)*POW(n, K(5.0))
+ + K(2240.0)*POW(n, K(3.0)) + K(2940.0)*n)*POW(k, K(2.0))
+ - K(1715.0)*POW(k, K(3.0)) - (K(560.0)*POW(n, K(3.0))
+ + K(1400.0)*n)*POW(k, K(4.0)) + K(490.0)*POW(k, K(5.0))
+ + K(140.0)*n*POW(k, K(6.0)) - K(35.0)*POW(k,K(7.0)))/normalisation;
+
+ if ((K(1.0) <= k/n) && (k/n < K(2.0)))
+ result += ((K(2472.0)*POW(n, K(7.0)) + K(336.0)*POW(n, K(5.0))
+ + K(3528.0)*POW(n, K(3.0)) - K(1296.0)*n) - (K(392.0)*POW(n, K(6.0))
+ - K(3920.0)*POW(n, K(4.0)) + K(8232.0)*POW(n, K(2.0)) - K(756.0))*k
+ - (K(504.0)*POW(n, K(5.0)) + K(10080.0)*POW(n, K(3.0))
+ - K(5292.0)*n)*POW(k, K(2.0)) - (K(1960.0)*POW(n, K(4.0))
+ - K(7840.0)*POW(n, K(2.0)) + K(1029.0))*POW(k, K(3.0))
+ + (K(2520.0)*POW(n, K(3.0)) - K(2520.0)*n) * POW(k, K(4.0))
+ - (K(1176.0)*POW(n, K(2.0)) - K(294.0)) * POW(k, K(5.0))
+ + K(252.0)*n*POW(k, K(6.0)) - K(21.0)*POW(k, K(7.0)))/normalisation;
+
+ if ((K(2.0) <= k/n) && (k/n < K(3.0)))
+ result += (-(K(1112.0)*POW(n, K(7.0)) - K(12880.0)*POW(n, K(5.0))
+ + K(7448.0)*POW(n, K(3.0)) - K(720.0)*n) + (K(12152.0)*POW(n, K(6.0))
+ - K(27440.0)*POW(n, K(4.0)) + K(8232.0)*POW(n, K(2.0)) - K(252.0))*k
+ - (K(19320.0)*POW(n, K(5.0)) - K(21280.0)*POW(n, K(3.0))
+ + K(2940.0)*n)*POW(k, K(2.0)) + (K(13720.0)*POW(n, K(4.0))
+ - K(7840.0)*POW(n, K(2.0)) + K(343.0))*POW(k, K(3.0))
+ - (K(5320.0)*POW(n, K(3.0)) - K(1400.0)*n)*POW(k, K(4.0))
+ + (K(1176.0)*POW(n, K(2.0)) - K(98.0))*POW(k, K(5.0))
+ - K(140.0)*n*POW(k, K(6.0)) + K(7.0) * POW(k, K(7.0)))/normalisation;
+
+ if ((K(3.0) <= k/n) && (k/n < K(4.0)))
+ result += ((4*n-k)*(POW(4*n-k, K(2.0)) - K(1.0))*(POW(4*n-k, K(2.0))
+ - K(4.0))*(POW(4*n-k, K(2.0)) - K(9.0)))/normalisation;
+ }
+
+ return result;
+}
+
+/** Compute damping factor for modified Sobolev kernel. */
+R X(modified_sobolev)(const R mu, const int kk)
+{
+ R result;
+ int kj, k;
+
+ for (result = K(0.0), kj = kk; kj <= kk+1; kj++)
+ {
+ k = ABS(kj);
+ if (k == 0)
+ result += K(1.0);
+ else
+ result += POW((double)k,-K(2.0)*mu);
+ }
+
+ return result;
+}
+
+/** Comput damping factor for modified multiquadric kernel. */
+R X(modified_multiquadric)(const R mu, const R c, const int kk)
+{
+ R result;
+ int kj, k;
+
+ for (result = K(0.0), kj = kk; kj <= kk+1; kj++)
+ {
+ k = ABS(kj);
+ result += POW((double)(k*k + c*c), -mu);
+ }
+
+ return result;
+}
+
+static inline int scaled_modified_bessel_i_series(const R x, const R alpha,
+ const int nb, const int ize, R *b)
+{
+ const R enmten = K(4.0)*nfft_float_property(NFFT_R_MIN);
+ R tempa = K(1.0), empal = K(1.0) + alpha, halfx = K(0.0), tempb = K(0.0);
+ int n, ncalc = nb;
+
+ if (enmten < x)
+ halfx = x/K(2.0);
+
+ if (alpha != K(0.0))
+ tempa = POW(halfx, alpha)/TGAMMA(empal);
+
+ if (ize == 2)
+ tempa *= EXP(-x);
+
+ if (K(1.0) < x + K(1.0))
+ tempb = halfx*halfx;
+
+ b[0] = tempa + tempa*tempb/empal;
+
+ if (x != K(0.0) && b[0] == K(0.0))
+ ncalc = 0;
+
+ if (nb == 1)
+ return ncalc;
+
+ if (K(0.0) < x)
+ {
+ R tempc = halfx, tover = (enmten + enmten)/x;
+
+ if (tempb != K(0.0))
+ tover = enmten/tempb;
+
+ for (n = 1; n < nb; n++)
+ {
+ tempa /= empal;
+ empal += K(1.0);
+ tempa *= tempc;
+
+ if (tempa <= tover*empal)
+ tempa = K(0.0);
+
+ b[n] = tempa + tempa*tempb/empal;
+
+ if (b[n] == K(0.0) && n < ncalc)
+ ncalc = n;
+ }
+ }
+ else
+ for (n = 1; n < nb; n++)
+ b[n] = K(0.0);
+
+ return ncalc;
+}
+
+static inline void scaled_modified_bessel_i_normalize(const R x,
+ const R alpha, const int nb, const int ize, R *b, const R sum_)
+{
+ const R enmten = K(4.0)*nfft_float_property(NFFT_R_MIN);
+ R sum = sum_, tempa;
+ int n;
+
+ /* Normalize, i.e., divide all b[n] by sum */
+ if (alpha != K(0.0))
+ sum = sum * TGAMMA(K(1.0) + alpha) * POW(x/K(2.0), -alpha);
+
+ if (ize == 1)
+ sum *= EXP(-x);
+
+ tempa = enmten;
+
+ if (K(1.0) < sum)
+ tempa *= sum;
+
+ for (n = 1; n <= nb; n++)
+ {
+ if (b[n-1] < tempa)
+ b[n-1] = K(0.0);
+
+ b[n-1] /= sum;
+ }
+}
+
+/**
+ * Calculates the modified bessel function \f$I_{n+\alpha}(x)\f$, possibly
+ * scaled by \f$\mathrm{e}^{-x}\f$, for real non-negative \f$x,alpha\f$ with
+ * \f$0 \le \alpha < 1\f$, and \f$n=0,1,\ldots,nb-1\f$.
+ *
+ * \arg[in] \c x non-negative real number in \f$I_{n+\alpha}(x)\f$
+ * \arg[in] \c alpha non-negative real number with \f$0 \le \alpha < 1\f$ in
+ * \f$I_{n+\alpha}(x)\f$
+ * \arg[in] \c nb number of functions to be calculated
+ * \arg[in] \c ize switch between no scaling (\c ize = 1) and exponential
+ * scaling (\c ize = 2)
+ * \arg[out] \c b real output vector to contain \f$I_{n+\alpha}(x)\f$,
+ * \f$n=0,1,\ldots,nb-1\f$
+ * \return error indicator. Only if this value is identical to \c nb, then all
+ * values in \c b have been calculated to full accuracy. If not, errors are
+ * indicated using the following scheme:
+ * - ncalc < 0: At least one of the arguments was out of range (e.g. nb <= 0,
+ * ize neither equals 1 nor 2, \f$|x| \ge exparg\f$). In this case, the
+ * output vector b is not calculated and \c ncalc is set to
+ * \f$\min(nb,0)-1\f$.
+ * - 0 < ncalc < nb: Not all requested functions could be calculated to full
+ * accuracy. This can occur when nb is much larger than |x|. in this case,
+ * the values \f$I_{n+\alpha}(x)\f$ are calculated to full accuracy for
+ * \f$n=0,1,\ldots,ncalc\f$. The rest of the values up to
+ * \f$n=0,1,\ldots,nb-1\f$ is calculated to a lower accuracy.
+ *
+ * \acknowledgement
+ *
+ * This program is based on a program written by David J. Sookne [2] that
+ * computes values of the Bessel functions \f$J_{\nu}(x)\f$ or \f$I_{\nu}(x)\f$
+ * for real argument \f$x\f$ and integer order \f$\nu\f$. modifications include
+ * the restriction of the computation to the Bessel function \f$I_{\nu}(x)\f$
+ * for non-negative real argument, the extension of the computation to arbitrary
+ * non-negative orders \f$\nu\f$, and the elimination of most underflow.
+ *
+ * References:
+ * [1] F. W. J. Olver and D. J. Sookne, A note on backward recurrence
+ * algorithms", Math. Comput. (26), 1972, pp 125 -- 132.
+ * [2] D. J. Sookne, "Bessel functions of real argument and int order", NBS
+ * Jour. of Res. B. (77B), 1973, pp. 125 -- 132.
+ *
+ * Modified by W. J. Cody, Applied Mathematics Division, Argonne National
+ * Laboratory, Argonne, IL, 60439, USA
+ *
+ * Modified by Jens Keiner, Institute of Mathematics, University of Lübeck,
+ * 23560 Lübeck, Germany
+ */
+int nfft_smbi(const R x, const R alpha, const int nb, const int ize, R *b)
+{
+ /* machine dependent parameters */
+ /* NSIG - DECIMAL SIGNIFICANCE DESIRED. SHOULD BE SET TO */
+ /* IFIX(ALOG10(2)*NBIT+1), WHERE NBIT IS THE NUMBER OF */
+ /* BITS IN THE MANTISSA OF A WORKING PRECISION VARIABLE. */
+ /* SETTING NSIG LOWER WILL RESULT IN DECREASED ACCURACY */
+ /* WHILE SETTING NSIG HIGHER WILL INCREASE CPU TIME */
+ /* WITHOUT INCREASING ACCURACY. THE TRUNCATION ERROR */
+ /* IS LIMITED TO A RELATIVE ERROR OF T=.5*10**(-NSIG). */
+ /* ENTEN - 10.0 ** K, WHERE K IS THE LARGEST int SUCH THAT */
+ /* ENTEN IS MACHINE-REPRESENTABLE IN WORKING PRECISION. */
+ /* ENSIG - 10.0 ** NSIG. */
+ /* RTNSIG - 10.0 ** (-K) FOR THE SMALLEST int K SUCH THAT */
+ /* K .GE. NSIG/4. */
+ /* ENMTEN - THE SMALLEST ABS(X) SUCH THAT X/4 DOES NOT UNDERFLOW. */
+ /* XLARGE - UPPER LIMIT ON THE MAGNITUDE OF X WHEN IZE=2. BEAR */
+ /* IN MIND THAT IF ABS(X)=N, THEN AT LEAST N ITERATIONS */
+ /* OF THE BACKWARD RECURSION WILL BE EXECUTED. */
+ /* EXPARG - LARGEST WORKING PRECISION ARGUMENT THAT THE LIBRARY */
+ /* EXP ROUTINE CAN HANDLE AND UPPER LIMIT ON THE */
+ /* MAGNITUDE OF X WHEN IZE=1. */
+ const int nsig = MANT_DIG + 2;
+ const R enten = nfft_float_property(NFFT_R_MAX);
+ const R ensig = POW(K(10.0),(R)nsig);
+ const R rtnsig = POW(K(10.0),-CEIL((R)nsig/K(4.0)));
+ const R xlarge = K(1E4);
+ const R exparg = FLOOR(LOG(POW(K(R_RADIX),K(DBL_MAX_EXP-1))));
+
+ /* System generated locals */
+ int l, n, nend, magx, nbmx, ncalc, nstart;
+ R p, em, en, sum, pold, test, empal, tempa, tempb, tempc, psave, plast, tover,
+ emp2al, psavel;
+
+ magx = LRINT(FLOOR(x));
+
+ /* return if x, nb, or ize out of range */
+ if ( nb <= 0 || x < K(0.0) || alpha < K(0.0) || K(1.0) <= alpha
+ || ((ize != 1 || exparg < x) && (ize != 2 || xlarge < x)))
+ return (MIN(nb,0) - 1);
+
+ /* 2-term ascending series for small x */
+ if (x < rtnsig)
+ return scaled_modified_bessel_i_series(x,alpha,nb,ize,b);
+
+ ncalc = nb;
+ /* forward sweep, Olver's p-sequence */
+
+ nbmx = nb - magx;
+ n = magx + 1;
+
+ en = (R) (n+n) + (alpha+alpha);
+ plast = K(1.0);
+ p = en/x;
+
+ /* significance test */
+ test = ensig + ensig;
+
+ if ((5*nsig) < (magx << 1))
+ test = SQRT(test*p);
+ else
+ test /= POW(K(1.585),(R)magx);
+
+ if (3 <= nbmx)
+ {
+ /* calculate p-sequence until n = nb-1 */
+ tover = enten/ensig;
+ nstart = magx+2;
+ nend = nb - 1;
+
+ for (n = nstart; n <= nend; n++)
+ {
+ en += K(2.0);
+ pold = plast;
+ plast = p;
+ p = en*plast/x + pold;
+ if (p > tover)
+ {
+ /* divide p-sequence by tover to avoid overflow. Calculate p-sequence
+ * until 1 <= |p| */
+ tover = enten;
+ p /= tover;
+ plast /= tover;
+ psave = p;
+ psavel = plast;
+ nstart = n + 1;
+
+ do
+ {
+ n++;
+ en += K(2.0);
+ pold = plast;
+ plast = p;
+ p = en*plast/x + pold;
+ } while (p <= K(1.0));
+
+ tempb = en/x;
+
+ /* Backward test. Find ncalc as the largest n such that test is passed. */
+ test = pold*plast*(K(0.5) - K(0.5)/(tempb * tempb))/ensig;
+ p = plast*tover;
+ n--;
+ en -= K(2.0);
+ nend = MIN(nb,n);
+
+ for (ncalc = nstart; ncalc <= nend; ncalc++)
+ {
+ pold = psavel;
+ psavel = psave;
+ psave = en*psavel/x + pold;
+ if (test < psave * psavel)
+ break;
+ }
+
+ ncalc--;
+ goto L80;
+ }
+ }
+
+ n = nend;
+ en = (R) (n+n) + (alpha+alpha);
+
+ /* special significance test for 2 <= nbmx */
+ test = FMAX(test,SQRT(plast*ensig)*SQRT(p+p));
+ }
+
+ /* calculate p-sequence until significance test is passed */
+ do
+ {
+ n++;
+ en += K(2.0);
+ pold = plast;
+ plast = p;
+ p = en*plast/x + pold;
+ } while (p < test);
+
+ /* Initialize backward recursion and normalization sum. */
+L80:
+ n++;
+ en += K(2.0);
+ tempb = K(0.0);
+ tempa = K(1.0)/p;
+ em = (R)(n-1);
+ empal = em + alpha;
+ emp2al = em - K(1.0) + (alpha+alpha);
+ sum = tempa*empal*emp2al/em;
+ nend = n-nb;
+
+ if (nend < 0)
+ {
+ /* We have n <= nb. So store b[n] and set higher orders to zero */
+ b[n-1] = tempa;
+ nend = -nend;
+ for (l = 1; l <= nend; ++l)
+ b[n-1 + l] = K(0.0);
+ }
+ else
+ {
+ if (nend != 0)
+ {
+ /* recur backward via difference equation, calculating b[n] until n = nb */
+ for (l = 1; l <= nend; ++l)
+ {
+ n--;
+ en -= K(2.0);
+ tempc = tempb;
+ tempb = tempa;
+ tempa = en*tempb/x + tempc;
+ em -= K(1.0);
+ emp2al -= K(1.0);
+
+ if (n == 1)
+ break;
+
+ if (n == 2)
+ emp2al = K(1.0);
+
+ empal -= K(1.0);
+ sum = (sum + tempa*empal)*emp2al/em;
+ }
+ }
+
+ /* store b[nb] */
+ b[n-1] = tempa;
+
+ if (nb <= 1)
+ {
+ sum = sum + sum + tempa;
+ scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);
+ return ncalc;
+ }
+
+ /* calculate and store b[nb-1] */
+ n--;
+ en -= 2.0;
+ b[n-1] = en*tempa/x + tempb;
+
+ if (n == 1)
+ {
+ sum = sum + sum + b[0];
+ scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);
+ return ncalc;
+ }
+
+ em -= K(1.0);
+ emp2al -= K(1.0);
+
+ if (n == 2)
+ emp2al = K(1.0);
+
+ empal -= K(1.0);
+ sum = (sum + b[n-1]*empal)*emp2al/em;
+ }
+
+ nend = n - 2;
+
+ if (nend != 0)
+ {
+ /* Calculate and store b[n] until n = 2. */
+ for (l = 1; l <= nend; ++l)
+ {
+ n--;
+ en -= K(2.0);
+ b[n-1] = en*b[n]/x + b[n+1];
+ em -= K(1.0);
+ emp2al -= K(1.0);
+
+ if (n == 2)
+ emp2al = K(1.0);
+
+ empal -= K(1.0);
+ sum = (sum + b[n-1]*empal)*emp2al/em;
+ }
+ }
+
+ /* calculate b[1] */
+ b[0] = K(2.0)*empal*b[1]/x + b[2];
+ sum = sum + sum + b[0];
+
+ scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);
+ return ncalc;
+}
+
+/**
+ * Prints an error message for a failed assertion together with filename and the
+ * line where the assertion failed.
+ */
+void nfft_assertion_failed(const char *s, int line, const char *file)
+{
+ fflush(stdout);
+ fprintf(stderr, "nfft: %s:%d: assertion failed: %s\n", file, line, s);
+#ifdef HAVE_ABORT
+ /* Use abort function. */
+ abort();
+#else
+ /* Use exit function. */
+ exit(EXIT_FAILURE);
+#endif
+}
+
+/* We declare drand48() and srand48() ourselves, if they are is not declared in
+ * math.h (e.g. on SuSE 9.3), grrr. */
+#include "config.h"
+#if HAVE_DECL_DRAND48 == 0
+ extern double drand48(void);
+#endif
+#if HAVE_DECL_SRAND48 == 0
+ extern void srand48(long int);
+#endif
+
+double nfft_drand48(void)
+{
+#ifdef HAVE_DRAND48
+ return drand48();
+#else
+ return ((R)rand())/((R)RAND_MAX);
+#endif
+}
+
+void nfft_srand48(long int seed)
+{
+#ifdef HAVE_SRAND48
+ srand48(seed);
+#else
+ srand((unsigned int)seed);
+#endif
+}
+
+
+#define z_swap(_a_, _b_, _t_) do { (_t_) = (_a_); (_a_) = (_b_); (_b_) = (_t_); } while (0)
+
+/**
+ * Auxiliary function of radix sort for node indices.
+ *
+ * \author Michael Hofmann
+ */
+static void nfft_sort_node_indices_sort_bubble(int n, int *keys)
+{
+ int i, j, ti;
+
+ for (i = 0; i < n; ++i)
+ {
+ j = i;
+ while (j > 0 && keys[2 * j + 0] < keys[2 * (j - 1) + 0])
+ {
+ z_swap(keys[2 * j + 0], keys[2 * (j - 1) + 0], ti);
+ z_swap(keys[2 * j + 1], keys[2 * (j - 1) + 1], ti);
+ --j;
+ }
+ }
+}
+
+/**
+ * Auxiliary function of radix sort for node indices.
+ *
+ * \author Michael Hofmann
+ */
+static void nfft_sort_node_indices_radix_count(int n, int *keys, int shift, int mask, int *counts)
+{
+ int i, k;
+
+ for (i = 0; i < n; ++i)
+ {
+ k = (keys[2 * i + 0] >> shift) & mask;
+ ++counts[k];
+ }
+}
+
+/**
+ * Auxiliary function of radix sort for node indices.
+ *
+ * \author Michael Hofmann
+ */
+static void nfft_sort_node_indices_radix_rearrange(int n, int *keys_in, int *keys_out, int shift, int mask, int *displs)
+{
+ int i, k;
+
+ for (i = 0; i < n; ++i)
+ {
+ k = (keys_in[2 * i + 0] >> shift) & mask;
+ keys_out[2 * displs[k] + 0] = keys_in[2 * i + 0];
+ keys_out[2 * displs[k] + 1] = keys_in[2 * i + 1];
+ ++displs[k];
+ }
+}
+
+/**
+ * Radix sort for node indices with OpenMP support.
+ *
+ * \author Michael Hofmann
+ */
+void nfft_sort_node_indices_radix_lsdf(int n, int *keys0, int *keys1, int rhigh)
+{
+ const int rwidth = 9;
+ const int radix_n = 1 << rwidth;
+ const int radix_mask = radix_n - 1;
+ const int rhigh_in = rhigh;
+
+ const int tmax =
+#ifdef _OPENMP
+ omp_get_max_threads();
+#else
+ 1;
+#endif
+
+ int *from, *to, *tmp;
+
+ int i, k, l, h;
+ int lcounts[tmax * radix_n];
+
+ int tid = 0, tnum = 1;
+
+
+ from = keys0;
+ to = keys1;
+
+ while (rhigh >= 0)
+ {
+#ifdef _OPENMP
+ #pragma omp parallel private(tid, tnum, i, l, h)
+ {
+ tid = omp_get_thread_num();
+ tnum = omp_get_num_threads();
+#endif
+
+ for (i = 0; i < radix_n; ++i) lcounts[tid * radix_n + i] = 0;
+
+ l = (tid * n) / tnum;
+ h = ((tid + 1) * n) / tnum;
+
+ nfft_sort_node_indices_radix_count(h - l, from + (2 * l), rhigh_in - rhigh, radix_mask, &lcounts[tid * radix_n]);
+#ifdef _OPENMP
+ }
+#endif
+
+ k = 0;
+ for (i = 0; i < radix_n; ++i)
+ {
+ for (l = 0; l < tmax; ++l) lcounts[l * radix_n + i] = (k += lcounts[l * radix_n + i]) - lcounts[l * radix_n + i];
+ }
+
+#ifdef _OPENMP
+ #pragma omp parallel private(tid, tnum, i, l, h)
+ {
+ tid = omp_get_thread_num();
+ tnum = omp_get_num_threads();
+#endif
+
+ l = (tid * n) / tnum;
+ h = ((tid + 1) * n) / tnum;
+
+ nfft_sort_node_indices_radix_rearrange(h - l, from + (2 * l), to, rhigh_in - rhigh, radix_mask, &lcounts[tid * radix_n]);
+#ifdef _OPENMP
+ }
+#endif
+
+/* print_keys(n, to);*/
+
+ tmp = from;
+ from = to;
+ to = tmp;
+
+ rhigh -= rwidth;
+ }
+
+ if (to == keys0) memcpy(to, from, n * 2 * sizeof(int));
+}
+
+/**
+ * Radix sort for node indices with OpenMP support.
+ *
+ * \author Michael Hofmann
+ */
+void nfft_sort_node_indices_radix_msdf(int n, int *keys0, int *keys1, int rhigh)
+{
+ const int rwidth = 9;
+ const int radix_n = 1 << rwidth;
+ const int radix_mask = radix_n - 1;
+
+ const int tmax =
+#ifdef _OPENMP
+ omp_get_max_threads();
+#else
+ 1;
+#endif
+
+ int i, k, l, h;
+ int lcounts[tmax * radix_n];
+
+ int counts[radix_n], displs[radix_n];
+
+ int tid = 0, tnum = 1;
+
+
+ rhigh -= rwidth;
+
+#ifdef _OPENMP
+ #pragma omp parallel private(tid, tnum, i, l, h)
+ {
+ tid = omp_get_thread_num();
+ tnum = omp_get_num_threads();
+#endif
+
+ for (i = 0; i < radix_n; ++i) lcounts[tid * radix_n + i] = 0;
+
+ l = (tid * n) / tnum;
+ h = ((tid + 1) * n) / tnum;
+
+ nfft_sort_node_indices_radix_count(h - l, keys0 + (2 * l), rhigh + 1, radix_mask, &lcounts[tid * radix_n]);
+#ifdef _OPENMP
+ }
+#endif
+
+ k = 0;
+ for (i = 0; i < radix_n; ++i)
+ {
+ for (l = 0; l < tmax; ++l) lcounts[l * radix_n + i] = (k += lcounts[l * radix_n + i]) - lcounts[l * radix_n + i];
+
+ displs[i] = lcounts[0 * radix_n + i];
+ if (i > 0) counts[i - 1] = displs[i] - displs[i - 1];
+ }
+ counts[radix_n - 1] = n - displs[radix_n - 1];
+
+#ifdef _OPENMP
+ #pragma omp parallel private(tid, tnum, i, l, h)
+ {
+ tid = omp_get_thread_num();
+ tnum = omp_get_num_threads();
+#endif
+
+ l = (tid * n) / tnum;
+ h = ((tid + 1) * n) / tnum;
+
+ nfft_sort_node_indices_radix_rearrange(h - l, keys0 + (2 * l), keys1, rhigh + 1, radix_mask, &lcounts[tid * radix_n]);
+#ifdef _OPENMP
+ }
+#endif
+
+ memcpy(keys0, keys1, n * 2 * sizeof(int));
+
+ if (rhigh >= 0)
+ {
+ for (i = 0; i < radix_n; ++i)
+ {
+ if (counts[i] > 1)
+ {
+ if (counts[i] > 256)
+ nfft_sort_node_indices_radix_msdf(counts[i], keys0 + 2 * displs[i], keys1 + 2 * displs[i], rhigh);
+ else
+ nfft_sort_node_indices_sort_bubble(counts[i], keys0 + 2 * displs[i]);
+ }
+ }
+ }
+}
+
+int nfft_get_num_threads(void)
+{
+#ifdef _OPENMP
+ return nfft_get_omp_num_threads();
+#else
+ return 1;
+#endif
+}
+
+#ifdef _OPENMP
+int nfft_get_omp_num_threads(void)
+{
+ int nthreads;
+ #pragma omp parallel default(shared)
+ {
+ int n = omp_get_num_threads();
+ #pragma omp master
+ {
+ nthreads = n;
+ }
+ }
+ return nthreads;
+}
+#endif
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/nfft.git
More information about the debian-science-commits
mailing list